aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-02-10 17:53:52 +0300
committerarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-02-10 17:53:52 +0300
commit5c64b97bb7e4034eff8833e4c367f61d34fcb4ee (patch)
tree7c5769528f2fcdaa5a718aa73e4aa64d50905269
parent1b56f620ac98766b198121ca1b728e7e61efbb56 (diff)
downloadydb-5c64b97bb7e4034eff8833e4c367f61d34fcb4ee.tar.gz
intermediate changes
ref:4635f4dd763168c3fa295f87727595c785b4d5a4
-rw-r--r--build/conf/opensource.conf28
-rw-r--r--build/plugins/lib/ya.make14
-rw-r--r--build/rules/py2_deprecation/readme.md16
-rw-r--r--build/scripts/process_command_files.py66
-rw-r--r--build/ymake.core.conf2
-rw-r--r--contrib/libs/cxxsupp/libcxx/.clang-format3
-rwxr-xr-xcontrib/libs/cxxsupp/libcxx/import2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/format_context.h33
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/parser_std_format_spec.h6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__iterator/wrap_iter.h13
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory/allocator.h6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory/allocator_traits.h8
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory/shared_ptr.h1028
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/reverse_view.h77
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__threading_support71
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__utility/decay_copy.h5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/charconv2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/chrono180
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/complex9
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/deque30
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/experimental/memory_resource14
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/filesystem37
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/forward_list6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/list80
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/locale248
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/map44
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/memory15
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/module.modulemap1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/mutex2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/new10
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/ostream9
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/queue6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/scoped_allocator10
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/semaphore86
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/set55
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/span20
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/system_error8
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/type_traits3
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/unordered_map92
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/unordered_set79
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/utility2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/valarray7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/vector364
-rw-r--r--contrib/libs/cxxsupp/libcxx/src/locale.cpp19
-rw-r--r--contrib/libs/cxxsupp/libcxx/src/memory.cpp21
-rw-r--r--contrib/libs/cxxsupp/libcxx/src/support/win32/thread_win32.cpp36
-rw-r--r--contrib/libs/lzmasdk/7zStream.c352
-rw-r--r--contrib/libs/lzmasdk/7zTypes.h750
-rw-r--r--contrib/libs/lzmasdk/7zVersion.h54
-rw-r--r--contrib/libs/lzmasdk/Aes.c612
-rw-r--r--contrib/libs/lzmasdk/Aes.h76
-rw-r--r--contrib/libs/lzmasdk/AesOpt.c376
-rw-r--r--contrib/libs/lzmasdk/Alloc.c910
-rw-r--r--contrib/libs/lzmasdk/Alloc.h102
-rw-r--r--contrib/libs/lzmasdk/Bra.c460
-rw-r--r--contrib/libs/lzmasdk/Bra.h128
-rw-r--r--contrib/libs/lzmasdk/Bra86.c164
-rw-r--r--contrib/libs/lzmasdk/BraIA64.c106
-rw-r--r--contrib/libs/lzmasdk/Compiler.h66
-rw-r--r--contrib/libs/lzmasdk/CpuArch.c436
-rw-r--r--contrib/libs/lzmasdk/CpuArch.h672
-rw-r--r--contrib/libs/lzmasdk/LzFind.c2254
-rw-r--r--contrib/libs/lzmasdk/LzFind.h242
-rw-r--r--contrib/libs/lzmasdk/LzHash.h114
-rw-r--r--contrib/libs/lzmasdk/Lzma2Dec.c976
-rw-r--r--contrib/libs/lzmasdk/Lzma2Dec.h240
-rw-r--r--contrib/libs/lzmasdk/Lzma2Enc.c1606
-rw-r--r--contrib/libs/lzmasdk/Lzma2Enc.h110
-rw-r--r--contrib/libs/lzmasdk/LzmaDec.c2370
-rw-r--r--contrib/libs/lzmasdk/LzmaDec.h468
-rw-r--r--contrib/libs/lzmasdk/LzmaEnc.c5968
-rw-r--r--contrib/libs/lzmasdk/LzmaEnc.h166
-rw-r--r--contrib/libs/lzmasdk/LzmaLib.c80
-rw-r--r--contrib/libs/lzmasdk/LzmaLib.h262
-rw-r--r--contrib/libs/lzmasdk/MtCoder.h282
-rw-r--r--contrib/libs/lzmasdk/MtDec.h402
-rw-r--r--contrib/libs/lzmasdk/Precomp.h20
-rw-r--r--contrib/libs/lzmasdk/RotateDefs.h60
-rw-r--r--contrib/libs/lzmasdk/Sha256.c496
-rw-r--r--contrib/libs/lzmasdk/Sha256.h52
-rw-r--r--contrib/libs/lzmasdk/Threads.h136
-rw-r--r--contrib/libs/openssl/apps/progs-win.h1014
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/aes/aesni-mb-x86_64.masm3540
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/aes/aesni-sha1-x86_64.masm6544
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/aes/aesni-sha256-x86_64.masm9426
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86.masm6448
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86_64.masm10206
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86.masm1322
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86_64.masm2338
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/bn/rsaz-avx2.masm3968
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/bn/rsaz-x86_64.masm4534
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/bn/x86-gf2m.masm720
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/bn/x86-mont.masm984
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/bn/x86_64-gf2m.masm852
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/bn/x86_64-mont.masm2954
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/bn/x86_64-mont5.masm8102
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86.masm4738
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86_64.masm4328
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86.masm2046
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86_64.masm5094
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/ec/ecp_nistz256-x86_64.masm15882
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/ec/x25519-x86_64.masm2148
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/md5/md5-586.masm1376
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/md5/md5-x86_64.masm1576
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/modes/aesni-gcm-x86_64.masm1968
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86.masm2546
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86_64.masm4146
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/poly1305/poly1305-x86_64.masm4770
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/rc4/rc4-586.masm774
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/rc4/rc4-md5-x86_64.masm2780
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/rc4/rc4-x86_64.masm1570
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/sha/keccak1600-x86_64.masm1056
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/sha/sha1-586.masm7972
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/sha/sha1-mb-x86_64.masm15158
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/sha/sha1-x86_64.masm11544
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/sha/sha256-586.masm13634
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/sha/sha256-mb-x86_64.masm16520
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/sha/sha256-x86_64.masm11434
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/sha/sha512-586.masm5696
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/sha/sha512-x86_64.masm11340
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/uplink-x86_64.masm1008
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/whrlpool/wp-x86_64.masm1982
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/x86_64cpuid.masm968
-rw-r--r--contrib/libs/openssl/asm/windows/crypto/x86cpuid.masm1042
-rw-r--r--contrib/libs/openssl/asm/windows/engines/e_padlock-x86.masm2074
-rw-r--r--contrib/libs/openssl/asm/windows/engines/e_padlock-x86_64.masm2382
-rw-r--r--contrib/libs/openssl/crypto/buildinf-win.h90
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-win-i686.h56
-rw-r--r--contrib/libs/openssl/include/crypto/bn_conf-win-x86_64.h56
-rw-r--r--contrib/libs/openssl/include/crypto/dso_conf-win.h32
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-win-i686.h406
-rw-r--r--contrib/libs/openssl/include/openssl/opensslconf-win-x86_64.h412
-rw-r--r--contrib/python/PyHamcrest/src/hamcrest/library/text/stringcontainsinorder.py104
-rw-r--r--contrib/python/setuptools/py2/pkg_resources/_vendor/pyparsing.py11484
-rw-r--r--contrib/python/setuptools/py2/setuptools/_vendor/pyparsing.py11484
-rw-r--r--contrib/python/setuptools/py3/pkg_resources/_vendor/pyparsing.py11484
-rw-r--r--contrib/python/setuptools/py3/setuptools/_vendor/pyparsing.py11484
-rw-r--r--contrib/restricted/boost/boost/qvm/all.hpp64
-rw-r--r--contrib/restricted/boost/boost/qvm/assert.hpp18
-rw-r--r--contrib/restricted/boost/boost/qvm/deduce_mat.hpp180
-rw-r--r--contrib/restricted/boost/boost/qvm/deduce_quat.hpp126
-rw-r--r--contrib/restricted/boost/boost/qvm/deduce_scalar.hpp262
-rw-r--r--contrib/restricted/boost/boost/qvm/deduce_vec.hpp170
-rw-r--r--contrib/restricted/boost/boost/qvm/detail/cofactor_impl.hpp128
-rw-r--r--contrib/restricted/boost/boost/qvm/detail/determinant_impl.hpp158
-rw-r--r--contrib/restricted/boost/boost/qvm/detail/mat_assign.hpp150
-rw-r--r--contrib/restricted/boost/boost/qvm/detail/quat_assign.hpp70
-rw-r--r--contrib/restricted/boost/boost/qvm/detail/remove_const.hpp70
-rw-r--r--contrib/restricted/boost/boost/qvm/detail/swizzle_traits.hpp676
-rw-r--r--contrib/restricted/boost/boost/qvm/detail/transp_impl.hpp256
-rw-r--r--contrib/restricted/boost/boost/qvm/detail/vec_assign.hpp142
-rw-r--r--contrib/restricted/boost/boost/qvm/enable_if.hpp48
-rw-r--r--contrib/restricted/boost/boost/qvm/error.hpp80
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/mat_assign2.hpp250
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/mat_assign3.hpp264
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/mat_assign4.hpp282
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/mat_operations2.hpp3440
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/mat_operations3.hpp3830
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/mat_operations4.hpp4258
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/swizzle2.hpp1428
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/swizzle3.hpp8316
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/swizzle4.hpp48660
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/vec_assign2.hpp112
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/vec_assign3.hpp114
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/vec_assign4.hpp116
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/vec_mat_operations2.hpp228
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/vec_mat_operations3.hpp256
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/vec_mat_operations4.hpp292
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/vec_operations2.hpp1264
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/vec_operations3.hpp1306
-rw-r--r--contrib/restricted/boost/boost/qvm/gen/vec_operations4.hpp1348
-rw-r--r--contrib/restricted/boost/boost/qvm/inline.hpp68
-rw-r--r--contrib/restricted/boost/boost/qvm/map.hpp26
-rw-r--r--contrib/restricted/boost/boost/qvm/map_mat_mat.hpp1790
-rw-r--r--contrib/restricted/boost/boost/qvm/map_mat_vec.hpp1074
-rw-r--r--contrib/restricted/boost/boost/qvm/map_vec_mat.hpp1182
-rw-r--r--contrib/restricted/boost/boost/qvm/mat.hpp196
-rw-r--r--contrib/restricted/boost/boost/qvm/mat_access.hpp516
-rw-r--r--contrib/restricted/boost/boost/qvm/mat_operations.hpp4948
-rw-r--r--contrib/restricted/boost/boost/qvm/mat_operations2.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/mat_operations3.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/mat_operations4.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/mat_traits.hpp66
-rw-r--r--contrib/restricted/boost/boost/qvm/mat_traits_array.hpp236
-rw-r--r--contrib/restricted/boost/boost/qvm/mat_traits_defaults.hpp190
-rw-r--r--contrib/restricted/boost/boost/qvm/math.hpp174
-rw-r--r--contrib/restricted/boost/boost/qvm/operations.hpp30
-rw-r--r--contrib/restricted/boost/boost/qvm/quat.hpp136
-rw-r--r--contrib/restricted/boost/boost/qvm/quat_access.hpp256
-rw-r--r--contrib/restricted/boost/boost/qvm/quat_operations.hpp2986
-rw-r--r--contrib/restricted/boost/boost/qvm/quat_traits.hpp98
-rw-r--r--contrib/restricted/boost/boost/qvm/quat_traits_array.hpp260
-rw-r--r--contrib/restricted/boost/boost/qvm/quat_traits_defaults.hpp80
-rw-r--r--contrib/restricted/boost/boost/qvm/quat_vec_operations.hpp124
-rw-r--r--contrib/restricted/boost/boost/qvm/scalar_traits.hpp184
-rw-r--r--contrib/restricted/boost/boost/qvm/static_assert.hpp18
-rw-r--r--contrib/restricted/boost/boost/qvm/swizzle.hpp26
-rw-r--r--contrib/restricted/boost/boost/qvm/swizzle2.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/swizzle3.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/swizzle4.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/throw_exception.hpp18
-rw-r--r--contrib/restricted/boost/boost/qvm/to_string.hpp62
-rw-r--r--contrib/restricted/boost/boost/qvm/vec.hpp178
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_access.hpp164
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_mat_operations.hpp336
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_mat_operations2.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_mat_operations3.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_mat_operations4.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_operations.hpp1926
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_operations2.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_operations3.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_operations4.hpp12
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_traits.hpp64
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_traits_array.hpp216
-rw-r--r--contrib/restricted/boost/boost/qvm/vec_traits_defaults.hpp188
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/simple_event_log.h190
-rwxr-xr-xcontrib/restricted/libffi/configs/i386-microsoft-windows/fficonfig.h6
-rwxr-xr-xcontrib/restricted/libffi/configs/x86_64-microsoft-windows/fficonfig.h6
-rw-r--r--contrib/tools/python3/src/Lib/venv/scripts/common/Activate.ps1482
-rw-r--r--contrib/tools/python3/src/Lib/venv/scripts/nt/activate.bat66
-rw-r--r--contrib/tools/python3/src/Lib/venv/scripts/nt/deactivate.bat42
-rw-r--r--library/cpp/monlib/service/pages/tablesorter/resources/jquery.tablesorter.js8
-rwxr-xr-xya.bat172
-rw-r--r--ydb/library/yql/parser/pg_query_wrapper/outfuncs.c8806
225 files changed, 199988 insertions, 200151 deletions
diff --git a/build/conf/opensource.conf b/build/conf/opensource.conf
index c0ab8489b8..027f6a3e42 100644
--- a/build/conf/opensource.conf
+++ b/build/conf/opensource.conf
@@ -1,14 +1,14 @@
-when ($CATBOOST_OPENSOURCE == "yes") {
- OPENSOURCE=yes
-}
-
-when ($OPENSOURCE) {
- LOCAL_YDB_DOCKER_PUBLIC_BUILD=yes
- CATBOOST_OPENSOURCE=yes
- USE_DYNAMIC_IDN=yes
- USE_DYNAMIC_AIO=yes
- USE_DYNAMIC_ICONV=yes
- USE_ASMLIB=no
- SO_OUTPUTS=yes
- UDF_NO_PROBE=yes
-}
+when ($CATBOOST_OPENSOURCE == "yes") {
+ OPENSOURCE=yes
+}
+
+when ($OPENSOURCE) {
+ LOCAL_YDB_DOCKER_PUBLIC_BUILD=yes
+ CATBOOST_OPENSOURCE=yes
+ USE_DYNAMIC_IDN=yes
+ USE_DYNAMIC_AIO=yes
+ USE_DYNAMIC_ICONV=yes
+ USE_ASMLIB=no
+ SO_OUTPUTS=yes
+ UDF_NO_PROBE=yes
+}
diff --git a/build/plugins/lib/ya.make b/build/plugins/lib/ya.make
index a9bbb58bf2..7e61d12080 100644
--- a/build/plugins/lib/ya.make
+++ b/build/plugins/lib/ya.make
@@ -1,7 +1,7 @@
-OWNER(g:ymake)
-
-PY23_LIBRARY()
- PY_SRCS(
- _metric_resolvers.py
- )
-END()
+OWNER(g:ymake)
+
+PY23_LIBRARY()
+ PY_SRCS(
+ _metric_resolvers.py
+ )
+END()
diff --git a/build/rules/py2_deprecation/readme.md b/build/rules/py2_deprecation/readme.md
index deb36317a1..02af9087ef 100644
--- a/build/rules/py2_deprecation/readme.md
+++ b/build/rules/py2_deprecation/readme.md
@@ -1,9 +1,9 @@
-# Python 2 в Аркадии deprecated
-
-Arcadia мигрирует на Python 3 и код на Python 2 [объявлен deprecated](https://clubs.at.yandex-team.ru/arcadia/23044)
-
-Чтобы не перегружать большими портянками предупреждений консоль все такие ошибки по умолчанию выводятся через этот модуль и потому фигурирут одной строкой.
-
-Чтобы увидеть все ошибки достаточно запустить вашу сборку с дополнительным флагом `-DFAIL_PY2`. Это вызовет configure-ошибки во всех стартовых Python2-only модулях:
-программах - `PY2_PROGRAM`, тестах (`PY2TEST`) и Sandbox-задачах (`SANDBOX_TASK`). `PY2_LIBRARY` на данный момент не вызывает ошибок, потому что достаточно сложно
+# Python 2 в Аркадии deprecated
+
+Arcadia мигрирует на Python 3 и код на Python 2 [объявлен deprecated](https://clubs.at.yandex-team.ru/arcadia/23044)
+
+Чтобы не перегружать большими портянками предупреждений консоль все такие ошибки по умолчанию выводятся через этот модуль и потому фигурирут одной строкой.
+
+Чтобы увидеть все ошибки достаточно запустить вашу сборку с дополнительным флагом `-DFAIL_PY2`. Это вызовет configure-ошибки во всех стартовых Python2-only модулях:
+программах - `PY2_PROGRAM`, тестах (`PY2TEST`) и Sandbox-задачах (`SANDBOX_TASK`). `PY2_LIBRARY` на данный момент не вызывает ошибок, потому что достаточно сложно
отследить зависимости на них из разрешённых `PY23_LIBRARY` и `PY23_TEST`. \ No newline at end of file
diff --git a/build/scripts/process_command_files.py b/build/scripts/process_command_files.py
index 28accfc175..e24bdf3e2b 100644
--- a/build/scripts/process_command_files.py
+++ b/build/scripts/process_command_files.py
@@ -1,33 +1,33 @@
-import sys
-
-
-def is_cmdfile_arg(arg):
- return arg.startswith('@')
-
-def cmdfile_path(arg):
- return arg[1:]
-
-def read_from_command_file(arg):
- with open(arg) as afile:
- return afile.read().splitlines()
-
-def skip_markers(args):
- res = []
- for arg in args:
- if arg == '--ya-start-command-file' or arg == '--ya-end-command-file':
- continue
- res.append(arg)
- return res
-
-def iter_args(args):
- for arg in args:
- if not is_cmdfile_arg(arg):
- if arg == '--ya-start-command-file' or arg == '--ya-end-command-file':
- continue
- yield arg
- else:
- for cmdfile_arg in read_from_command_file(cmdfile_path(arg)):
- yield cmdfile_arg
-
-def get_args(args):
- return list(iter_args(args))
+import sys
+
+
+def is_cmdfile_arg(arg):
+ return arg.startswith('@')
+
+def cmdfile_path(arg):
+ return arg[1:]
+
+def read_from_command_file(arg):
+ with open(arg) as afile:
+ return afile.read().splitlines()
+
+def skip_markers(args):
+ res = []
+ for arg in args:
+ if arg == '--ya-start-command-file' or arg == '--ya-end-command-file':
+ continue
+ res.append(arg)
+ return res
+
+def iter_args(args):
+ for arg in args:
+ if not is_cmdfile_arg(arg):
+ if arg == '--ya-start-command-file' or arg == '--ya-end-command-file':
+ continue
+ yield arg
+ else:
+ for cmdfile_arg in read_from_command_file(cmdfile_path(arg)):
+ yield cmdfile_arg
+
+def get_args(args):
+ return list(iter_args(args))
diff --git a/build/ymake.core.conf b/build/ymake.core.conf
index 081833998b..f28586d91a 100644
--- a/build/ymake.core.conf
+++ b/build/ymake.core.conf
@@ -9,7 +9,7 @@
FAKEID=3141592653
SANDBOX_FAKEID=${FAKEID}.7600000
-CPP_FAKEID=9107927
+CPP_FAKEID=9111117
GO_FAKEID=9056219
ANDROID_FAKEID=8821472
CLANG_TIDY_FAKEID=8625699
diff --git a/contrib/libs/cxxsupp/libcxx/.clang-format b/contrib/libs/cxxsupp/libcxx/.clang-format
index 4598f60a00..527b629c38 100644
--- a/contrib/libs/cxxsupp/libcxx/.clang-format
+++ b/contrib/libs/cxxsupp/libcxx/.clang-format
@@ -2,7 +2,8 @@ BasedOnStyle: LLVM
---
Language: Cpp
-Standard: Cpp03
+Standard: c++20
+SpacesInAngles: Leave
AlwaysBreakTemplateDeclarations: true
PointerAlignment: Left
diff --git a/contrib/libs/cxxsupp/libcxx/import b/contrib/libs/cxxsupp/libcxx/import
index 9b93145897..f1067aab39 100755
--- a/contrib/libs/cxxsupp/libcxx/import
+++ b/contrib/libs/cxxsupp/libcxx/import
@@ -1,6 +1,6 @@
#!/bin/sh -e
-rev=968e2739
+rev=dce5fc56
output_dir="libcxx-r$rev"
if [ -z $1 ] ; then
git clone https://github.com/llvm/llvm-project.git --no-checkout "$output_dir/tmp"
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/format_context.h b/contrib/libs/cxxsupp/libcxx/include/__format/format_context.h
index 1cb7ee6a49..b4fe5cc7b1 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/format_context.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/format_context.h
@@ -70,9 +70,28 @@ __format_context_create(
}
#endif
+// TODO FMT Implement [format.context]/4
+// [Note 1: For a given type charT, implementations are encouraged to provide a
+// single instantiation of basic_format_context for appending to
+// basic_string<charT>, vector<charT>, or any other container with contiguous
+// storage by wrapping those in temporary objects with a uniform interface
+// (such as a span<charT>) and polymorphic reallocation. - end note]
+
+using format_context = basic_format_context<back_insert_iterator<string>, char>;
+#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
+using wformat_context = basic_format_context<back_insert_iterator<wstring>, wchar_t>;
+#endif
+
template <class _OutIt, class _CharT>
requires output_iterator<_OutIt, const _CharT&>
-class _LIBCPP_TEMPLATE_VIS _LIBCPP_AVAILABILITY_FORMAT basic_format_context {
+class
+ // clang-format off
+ _LIBCPP_TEMPLATE_VIS
+ _LIBCPP_AVAILABILITY_FORMAT
+ _LIBCPP_PREFERRED_NAME(format_context)
+ _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wformat_context))
+ // clang-format on
+ basic_format_context {
public:
using iterator = _OutIt;
using char_type = _CharT;
@@ -138,18 +157,6 @@ private:
#endif
};
-// TODO FMT Implement [format.context]/4
-// [Note 1: For a given type charT, implementations are encouraged to provide a
-// single instantiation of basic_format_context for appending to
-// basic_string<charT>, vector<charT>, or any other container with contiguous
-// storage by wrapping those in temporary objects with a uniform interface
-// (such as a span<charT>) and polymorphic reallocation. - end note]
-
-using format_context = basic_format_context<back_insert_iterator<string>, char>;
-#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
-using wformat_context = basic_format_context<back_insert_iterator<wstring>, wchar_t>;
-#endif
-
#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
#endif //_LIBCPP_STD_VER > 17
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/parser_std_format_spec.h b/contrib/libs/cxxsupp/libcxx/include/__format/parser_std_format_spec.h
index 77ee380936..9b713b8114 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/parser_std_format_spec.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/parser_std_format_spec.h
@@ -303,7 +303,7 @@ protected:
return __r.__ptr;
}
- void _LIBCPP_HIDE_FROM_ABI constexpr __substitute_width_arg_id(auto __arg) {
+ _LIBCPP_HIDE_FROM_ABI constexpr void __substitute_width_arg_id(auto __arg) {
_LIBCPP_ASSERT(__width_as_arg == 1,
"Substitute width called when no substitution is required");
@@ -395,7 +395,7 @@ protected:
return __r.__ptr;
}
- void _LIBCPP_HIDE_FROM_ABI constexpr __substitute_precision_arg_id(
+ _LIBCPP_HIDE_FROM_ABI constexpr void __substitute_precision_arg_id(
auto __arg) {
_LIBCPP_ASSERT(
__precision_as_arg == 1 && __precision != __format::__number_max,
@@ -576,7 +576,7 @@ private:
}
/** Processes the parsed std-format-spec based on the parsed display type. */
- void _LIBCPP_HIDE_FROM_ABI constexpr __process_display_type() {
+ _LIBCPP_HIDE_FROM_ABI constexpr void __process_display_type() {
switch (this->__type) {
case _Flags::_Type::__default:
case _Flags::_Type::__string:
diff --git a/contrib/libs/cxxsupp/libcxx/include/__iterator/wrap_iter.h b/contrib/libs/cxxsupp/libcxx/include/__iterator/wrap_iter.h
index 0a978914b1..28872f9fa4 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__iterator/wrap_iter.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__iterator/wrap_iter.h
@@ -13,6 +13,7 @@
#include <__config>
#include <__debug>
#include <__iterator/iterator_traits.h>
+#include <__memory/addressof.h>
#include <__memory/pointer_traits.h>
#include <type_traits>
@@ -54,7 +55,7 @@ public:
: __i(__u.base())
{
#if _LIBCPP_DEBUG_LEVEL == 2
- __get_db()->__iterator_copy(this, &__u);
+ __get_db()->__iterator_copy(this, _VSTD::addressof(__u));
#endif
}
#if _LIBCPP_DEBUG_LEVEL == 2
@@ -62,14 +63,14 @@ public:
__wrap_iter(const __wrap_iter& __x)
: __i(__x.base())
{
- __get_db()->__iterator_copy(this, &__x);
+ __get_db()->__iterator_copy(this, _VSTD::addressof(__x));
}
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
__wrap_iter& operator=(const __wrap_iter& __x)
{
- if (this != &__x)
+ if (this != _VSTD::addressof(__x))
{
- __get_db()->__iterator_copy(this, &__x);
+ __get_db()->__iterator_copy(this, _VSTD::addressof(__x));
__i = __x.__i;
}
return *this;
@@ -180,7 +181,7 @@ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
bool operator<(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__less_than_comparable(&__x, &__y),
+ _LIBCPP_ASSERT(__get_const_db()->__less_than_comparable(_VSTD::addressof(__x), _VSTD::addressof(__y)),
"Attempted to compare incomparable iterators");
#endif
return __x.base() < __y.base();
@@ -264,7 +265,7 @@ operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXC
#endif // C++03
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__less_than_comparable(&__x, &__y),
+ _LIBCPP_ASSERT(__get_const_db()->__less_than_comparable(_VSTD::addressof(__x), _VSTD::addressof(__y)),
"Attempted to subtract incompatible iterators");
#endif
return __x.base() - __y.base();
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory/allocator.h b/contrib/libs/cxxsupp/libcxx/include/__memory/allocator.h
index 7913a19c10..c174994ddf 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory/allocator.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory/allocator.h
@@ -98,8 +98,7 @@ public:
_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
_Tp* allocate(size_t __n) {
if (__n > allocator_traits<allocator>::max_size(*this))
- __throw_length_error("allocator<T>::allocate(size_t n)"
- " 'n' exceeds maximum supported size");
+ __throw_bad_array_new_length();
if (__libcpp_is_constant_evaluated()) {
return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
} else {
@@ -181,8 +180,7 @@ public:
_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
const _Tp* allocate(size_t __n) {
if (__n > allocator_traits<allocator>::max_size(*this))
- __throw_length_error("allocator<const T>::allocate(size_t n)"
- " 'n' exceeds maximum supported size");
+ __throw_bad_array_new_length();
if (__libcpp_is_constant_evaluated()) {
return static_cast<const _Tp*>(::operator new(__n * sizeof(_Tp)));
} else {
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory/allocator_traits.h b/contrib/libs/cxxsupp/libcxx/include/__memory/allocator_traits.h
index f4c8fa02d6..cc32352ae1 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory/allocator_traits.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory/allocator_traits.h
@@ -349,6 +349,14 @@ struct _LIBCPP_TEMPLATE_VIS allocator_traits
}
};
+// A version of `allocator_traits` for internal usage that SFINAEs away if the
+// given allocator doesn't have a nested `value_type`. This helps avoid hard
+// errors when forming implicit deduction guides for a container that has an
+// invalid Allocator type. See https://wg21.link/LWGXXXXX.
+// TODO(varconst): use the actual link once available.
+template <class _Alloc, class _ValueType = typename _Alloc::value_type>
+struct _LIBCPP_TEMPLATE_VIS __allocator_traits : allocator_traits<_Alloc> {};
+
template <class _Traits, class _Tp>
struct __rebind_alloc_helper {
#ifndef _LIBCPP_CXX03_LANG
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory/shared_ptr.h b/contrib/libs/cxxsupp/libcxx/include/__memory/shared_ptr.h
index 6d844760c8..1179b8a610 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory/shared_ptr.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory/shared_ptr.h
@@ -31,7 +31,7 @@
#include <typeinfo>
#include <type_traits>
#include <utility>
-#if !defined(_LIBCPP_HAS_NO_THREADS) //!defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
+#if !defined(_LIBCPP_HAS_NO_THREADS) // !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
# include <atomic>
#endif
@@ -157,7 +157,6 @@ protected:
typedef atomic<long> __atomic_count;
#endif
__atomic_count __shared_owners_;
-
virtual ~__shared_count();
private:
virtual void __on_zero_shared() _NOEXCEPT = 0;
@@ -459,12 +458,18 @@ private:
element_type* __ptr_;
__shared_weak_count* __cntrl_;
- struct __nat {int __for_bool_;};
public:
- _LIBCPP_INLINE_VISIBILITY
- _LIBCPP_CONSTEXPR shared_ptr() _NOEXCEPT;
- _LIBCPP_INLINE_VISIBILITY
- _LIBCPP_CONSTEXPR shared_ptr(nullptr_t) _NOEXCEPT;
+ _LIBCPP_HIDE_FROM_ABI
+ _LIBCPP_CONSTEXPR shared_ptr() _NOEXCEPT
+ : __ptr_(nullptr),
+ __cntrl_(nullptr)
+ { }
+
+ _LIBCPP_HIDE_FROM_ABI
+ _LIBCPP_CONSTEXPR shared_ptr(nullptr_t) _NOEXCEPT
+ : __ptr_(nullptr),
+ __cntrl_(nullptr)
+ { }
template<class _Yp, class = __enable_if_t<
_And<
@@ -486,638 +491,483 @@ public:
__enable_weak_this(__p, __p);
}
- template<class _Yp, class _Dp>
- shared_ptr(_Yp* __p, _Dp __d,
- typename enable_if<__shared_ptr_deleter_ctor_reqs<_Dp, _Yp, element_type>::value, __nat>::type = __nat());
- template<class _Yp, class _Dp, class _Alloc>
- shared_ptr(_Yp* __p, _Dp __d, _Alloc __a,
- typename enable_if<__shared_ptr_deleter_ctor_reqs<_Dp, _Yp, element_type>::value, __nat>::type = __nat());
- template <class _Dp> shared_ptr(nullptr_t __p, _Dp __d);
- template <class _Dp, class _Alloc> shared_ptr(nullptr_t __p, _Dp __d, _Alloc __a);
- template<class _Yp> _LIBCPP_INLINE_VISIBILITY shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) _NOEXCEPT;
- _LIBCPP_INLINE_VISIBILITY
- shared_ptr(const shared_ptr& __r) _NOEXCEPT;
- template<class _Yp>
- _LIBCPP_INLINE_VISIBILITY
- shared_ptr(const shared_ptr<_Yp>& __r,
- typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type = __nat())
- _NOEXCEPT;
- _LIBCPP_INLINE_VISIBILITY
- shared_ptr(shared_ptr&& __r) _NOEXCEPT;
- template<class _Yp> _LIBCPP_INLINE_VISIBILITY shared_ptr(shared_ptr<_Yp>&& __r,
- typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type = __nat())
- _NOEXCEPT;
- template<class _Yp> explicit shared_ptr(const weak_ptr<_Yp>& __r,
- typename enable_if<is_convertible<_Yp*, element_type*>::value, __nat>::type= __nat());
-#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR)
- template<class _Yp>
- shared_ptr(auto_ptr<_Yp>&& __r,
- typename enable_if<is_convertible<_Yp*, element_type*>::value, __nat>::type = __nat());
-#endif
- template <class _Yp, class _Dp>
- shared_ptr(unique_ptr<_Yp, _Dp>&&,
- typename enable_if
- <
- !is_lvalue_reference<_Dp>::value &&
- is_convertible<typename unique_ptr<_Yp, _Dp>::pointer, element_type*>::value,
- __nat
- >::type = __nat());
- template <class _Yp, class _Dp>
- shared_ptr(unique_ptr<_Yp, _Dp>&&,
- typename enable_if
- <
- is_lvalue_reference<_Dp>::value &&
- is_convertible<typename unique_ptr<_Yp, _Dp>::pointer, element_type*>::value,
- __nat
- >::type = __nat());
-
- ~shared_ptr();
+ template<class _Yp, class _Dp, class = __enable_if_t<__shared_ptr_deleter_ctor_reqs<_Dp, _Yp, element_type>::value> >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(_Yp* __p, _Dp __d)
+ : __ptr_(__p)
+ {
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ try
+ {
+#endif // _LIBCPP_NO_EXCEPTIONS
+ typedef typename __shared_ptr_default_allocator<_Yp>::type _AllocT;
+ typedef __shared_ptr_pointer<_Yp*, _Dp, _AllocT > _CntrlBlk;
+#ifndef _LIBCPP_CXX03_LANG
+ __cntrl_ = new _CntrlBlk(__p, _VSTD::move(__d), _AllocT());
+#else
+ __cntrl_ = new _CntrlBlk(__p, __d, _AllocT());
+#endif // not _LIBCPP_CXX03_LANG
+ __enable_weak_this(__p, __p);
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ }
+ catch (...)
+ {
+ __d(__p);
+ throw;
+ }
+#endif // _LIBCPP_NO_EXCEPTIONS
+ }
- _LIBCPP_INLINE_VISIBILITY
- shared_ptr& operator=(const shared_ptr& __r) _NOEXCEPT;
- template<class _Yp>
- typename enable_if
- <
- __compatible_with<_Yp, typename _VSTD::shared_ptr<_Tp>::element_type>::value,
- shared_ptr&
- >::type
- _LIBCPP_INLINE_VISIBILITY
- operator=(const shared_ptr<_Yp>& __r) _NOEXCEPT;
- _LIBCPP_INLINE_VISIBILITY
- shared_ptr& operator=(shared_ptr&& __r) _NOEXCEPT;
- template<class _Yp>
- typename enable_if
- <
- __compatible_with<_Yp, typename _VSTD::shared_ptr<_Tp>::element_type>::value,
- shared_ptr&
- >::type
- _LIBCPP_INLINE_VISIBILITY
- operator=(shared_ptr<_Yp>&& __r);
-#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR)
- template<class _Yp>
- _LIBCPP_INLINE_VISIBILITY
- typename enable_if
- <
- !is_array<_Yp>::value &&
- is_convertible<_Yp*, typename _VSTD::shared_ptr<_Tp>::element_type*>::value,
- shared_ptr
- >::type&
- operator=(auto_ptr<_Yp>&& __r);
-#endif
- template <class _Yp, class _Dp>
- typename enable_if
- <
- is_convertible<typename unique_ptr<_Yp, _Dp>::pointer, typename _VSTD::shared_ptr<_Tp>::element_type*>::value,
- shared_ptr&
- >::type
- _LIBCPP_INLINE_VISIBILITY
- operator=(unique_ptr<_Yp, _Dp>&& __r);
+ template<class _Yp, class _Dp, class _Alloc, class = __enable_if_t<__shared_ptr_deleter_ctor_reqs<_Dp, _Yp, element_type>::value> >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(_Yp* __p, _Dp __d, _Alloc __a)
+ : __ptr_(__p)
+ {
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ try
+ {
+#endif // _LIBCPP_NO_EXCEPTIONS
+ typedef __shared_ptr_pointer<_Yp*, _Dp, _Alloc> _CntrlBlk;
+ typedef typename __allocator_traits_rebind<_Alloc, _CntrlBlk>::type _A2;
+ typedef __allocator_destructor<_A2> _D2;
+ _A2 __a2(__a);
+ unique_ptr<_CntrlBlk, _D2> __hold2(__a2.allocate(1), _D2(__a2, 1));
+ ::new ((void*)_VSTD::addressof(*__hold2.get()))
+#ifndef _LIBCPP_CXX03_LANG
+ _CntrlBlk(__p, _VSTD::move(__d), __a);
+#else
+ _CntrlBlk(__p, __d, __a);
+#endif // not _LIBCPP_CXX03_LANG
+ __cntrl_ = _VSTD::addressof(*__hold2.release());
+ __enable_weak_this(__p, __p);
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ }
+ catch (...)
+ {
+ __d(__p);
+ throw;
+ }
+#endif // _LIBCPP_NO_EXCEPTIONS
+ }
+
+ template<class _Dp>
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(nullptr_t __p, _Dp __d)
+ : __ptr_(nullptr)
+ {
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ try
+ {
+#endif // _LIBCPP_NO_EXCEPTIONS
+ typedef typename __shared_ptr_default_allocator<_Tp>::type _AllocT;
+ typedef __shared_ptr_pointer<nullptr_t, _Dp, _AllocT > _CntrlBlk;
+#ifndef _LIBCPP_CXX03_LANG
+ __cntrl_ = new _CntrlBlk(__p, _VSTD::move(__d), _AllocT());
+#else
+ __cntrl_ = new _CntrlBlk(__p, __d, _AllocT());
+#endif // not _LIBCPP_CXX03_LANG
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ }
+ catch (...)
+ {
+ __d(__p);
+ throw;
+ }
+#endif // _LIBCPP_NO_EXCEPTIONS
+ }
+
+ template<class _Dp, class _Alloc>
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(nullptr_t __p, _Dp __d, _Alloc __a)
+ : __ptr_(nullptr)
+ {
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ try
+ {
+#endif // _LIBCPP_NO_EXCEPTIONS
+ typedef __shared_ptr_pointer<nullptr_t, _Dp, _Alloc> _CntrlBlk;
+ typedef typename __allocator_traits_rebind<_Alloc, _CntrlBlk>::type _A2;
+ typedef __allocator_destructor<_A2> _D2;
+ _A2 __a2(__a);
+ unique_ptr<_CntrlBlk, _D2> __hold2(__a2.allocate(1), _D2(__a2, 1));
+ ::new ((void*)_VSTD::addressof(*__hold2.get()))
+#ifndef _LIBCPP_CXX03_LANG
+ _CntrlBlk(__p, _VSTD::move(__d), __a);
+#else
+ _CntrlBlk(__p, __d, __a);
+#endif // not _LIBCPP_CXX03_LANG
+ __cntrl_ = _VSTD::addressof(*__hold2.release());
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ }
+ catch (...)
+ {
+ __d(__p);
+ throw;
+ }
+#endif // _LIBCPP_NO_EXCEPTIONS
+ }
- _LIBCPP_INLINE_VISIBILITY
- void swap(shared_ptr& __r) _NOEXCEPT;
- _LIBCPP_INLINE_VISIBILITY
- void reset() _NOEXCEPT;
template<class _Yp>
- typename enable_if
- <
- __compatible_with<_Yp, typename _VSTD::shared_ptr<_Tp>::element_type>::value,
- void
- >::type
- _LIBCPP_INLINE_VISIBILITY
- reset(_Yp* __p);
- template<class _Yp, class _Dp>
- typename enable_if
- <
- __compatible_with<_Yp, typename _VSTD::shared_ptr<_Tp>::element_type>::value,
- void
- >::type
- _LIBCPP_INLINE_VISIBILITY
- reset(_Yp* __p, _Dp __d);
- template<class _Yp, class _Dp, class _Alloc>
- typename enable_if
- <
- __compatible_with<_Yp, typename _VSTD::shared_ptr<_Tp>::element_type>::value,
- void
- >::type
- _LIBCPP_INLINE_VISIBILITY
- reset(_Yp* __p, _Dp __d, _Alloc __a);
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(const shared_ptr<_Yp>& __r, element_type *__p) _NOEXCEPT
+ : __ptr_(__p),
+ __cntrl_(__r.__cntrl_)
+ {
+ if (__cntrl_)
+ __cntrl_->__add_shared();
+ }
- _LIBCPP_INLINE_VISIBILITY
- element_type* get() const _NOEXCEPT {return __ptr_;}
- _LIBCPP_INLINE_VISIBILITY
- typename add_lvalue_reference<element_type>::type operator*() const _NOEXCEPT
- {return *__ptr_;}
- _LIBCPP_INLINE_VISIBILITY
- element_type* operator->() const _NOEXCEPT
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(const shared_ptr& __r) _NOEXCEPT
+ : __ptr_(__r.__ptr_),
+ __cntrl_(__r.__cntrl_)
{
- static_assert(!is_array<_Tp>::value,
- "std::shared_ptr<T>::operator-> is only valid when T is not an array type.");
- return __ptr_;
+ if (__cntrl_)
+ __cntrl_->__add_shared();
}
- _LIBCPP_INLINE_VISIBILITY
- long use_count() const _NOEXCEPT {return __cntrl_ ? __cntrl_->use_count() : 0;}
- _LIBCPP_INLINE_VISIBILITY
- bool unique() const _NOEXCEPT {return use_count() == 1;}
- _LIBCPP_INLINE_VISIBILITY
- explicit operator bool() const _NOEXCEPT {return get() != nullptr;}
- template <class _Up>
- _LIBCPP_INLINE_VISIBILITY
- bool owner_before(shared_ptr<_Up> const& __p) const _NOEXCEPT
- {return __cntrl_ < __p.__cntrl_;}
- template <class _Up>
- _LIBCPP_INLINE_VISIBILITY
- bool owner_before(weak_ptr<_Up> const& __p) const _NOEXCEPT
- {return __cntrl_ < __p.__cntrl_;}
- _LIBCPP_INLINE_VISIBILITY
- bool
- __owner_equivalent(const shared_ptr& __p) const
- {return __cntrl_ == __p.__cntrl_;}
-#if _LIBCPP_STD_VER > 14
- typename add_lvalue_reference<element_type>::type
- _LIBCPP_INLINE_VISIBILITY
- operator[](ptrdiff_t __i) const
+ template<class _Yp, class = __enable_if_t<__compatible_with<_Yp, _Tp>::value> >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(const shared_ptr<_Yp>& __r) _NOEXCEPT
+ : __ptr_(__r.__ptr_),
+ __cntrl_(__r.__cntrl_)
{
- static_assert(is_array<_Tp>::value,
- "std::shared_ptr<T>::operator[] is only valid when T is an array type.");
- return __ptr_[__i];
+ if (__cntrl_)
+ __cntrl_->__add_shared();
}
-#endif
-#ifndef _LIBCPP_NO_RTTI
- template <class _Dp>
- _LIBCPP_INLINE_VISIBILITY
- _Dp* __get_deleter() const _NOEXCEPT
- {return static_cast<_Dp*>(__cntrl_
- ? const_cast<void *>(__cntrl_->__get_deleter(typeid(_Dp)))
- : nullptr);}
-#endif // _LIBCPP_NO_RTTI
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(shared_ptr&& __r) _NOEXCEPT
+ : __ptr_(__r.__ptr_),
+ __cntrl_(__r.__cntrl_)
+ {
+ __r.__ptr_ = nullptr;
+ __r.__cntrl_ = nullptr;
+ }
- template<class _Yp, class _CntrlBlk>
- static shared_ptr<_Tp>
- __create_with_control_block(_Yp* __p, _CntrlBlk* __cntrl) _NOEXCEPT
+ template<class _Yp, class = __enable_if_t<__compatible_with<_Yp, _Tp>::value> >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(shared_ptr<_Yp>&& __r) _NOEXCEPT
+ : __ptr_(__r.__ptr_),
+ __cntrl_(__r.__cntrl_)
{
- shared_ptr<_Tp> __r;
- __r.__ptr_ = __p;
- __r.__cntrl_ = __cntrl;
- __r.__enable_weak_this(__r.__ptr_, __r.__ptr_);
- return __r;
+ __r.__ptr_ = nullptr;
+ __r.__cntrl_ = nullptr;
}
-private:
- template <class _Yp, bool = is_function<_Yp>::value>
- struct __shared_ptr_default_allocator
- {
- typedef allocator<_Yp> type;
- };
+ template<class _Yp, class = __enable_if_t<__compatible_with<_Yp, _Tp>::value> >
+ _LIBCPP_HIDE_FROM_ABI
+ explicit shared_ptr(const weak_ptr<_Yp>& __r)
+ : __ptr_(__r.__ptr_),
+ __cntrl_(__r.__cntrl_ ? __r.__cntrl_->lock() : __r.__cntrl_)
+ {
+ if (__cntrl_ == nullptr)
+ __throw_bad_weak_ptr();
+ }
- template <class _Yp>
- struct __shared_ptr_default_allocator<_Yp, true>
+#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR)
+ template<class _Yp, class = __enable_if_t<is_convertible<_Yp*, element_type*>::value> >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(auto_ptr<_Yp>&& __r)
+ : __ptr_(__r.get())
+ {
+ typedef __shared_ptr_pointer<_Yp*, default_delete<_Yp>, allocator<_Yp> > _CntrlBlk;
+ __cntrl_ = new _CntrlBlk(__r.get(), default_delete<_Yp>(), allocator<_Yp>());
+ __enable_weak_this(__r.get(), __r.get());
+ __r.release();
+ }
+#endif
+
+ template <class _Yp, class _Dp, class = __enable_if_t<
+ !is_lvalue_reference<_Dp>::value &&
+ is_convertible<typename unique_ptr<_Yp, _Dp>::pointer, element_type*>::value
+ > >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(unique_ptr<_Yp, _Dp>&& __r)
+ : __ptr_(__r.get())
+ {
+#if _LIBCPP_STD_VER > 11
+ if (__ptr_ == nullptr)
+ __cntrl_ = nullptr;
+ else
+#endif
{
- typedef allocator<__shared_ptr_dummy_rebind_allocator_type> type;
- };
+ typedef typename __shared_ptr_default_allocator<_Yp>::type _AllocT;
+ typedef __shared_ptr_pointer<typename unique_ptr<_Yp, _Dp>::pointer, _Dp, _AllocT > _CntrlBlk;
+ __cntrl_ = new _CntrlBlk(__r.get(), __r.get_deleter(), _AllocT());
+ __enable_weak_this(__r.get(), __r.get());
+ }
+ __r.release();
+ }
- template <class _Yp, class _OrigPtr>
- _LIBCPP_INLINE_VISIBILITY
- typename enable_if<is_convertible<_OrigPtr*,
- const enable_shared_from_this<_Yp>*
- >::value,
- void>::type
- __enable_weak_this(const enable_shared_from_this<_Yp>* __e,
- _OrigPtr* __ptr) _NOEXCEPT
+ template <class _Yp, class _Dp, class = void, class = __enable_if_t<
+ is_lvalue_reference<_Dp>::value &&
+ is_convertible<typename unique_ptr<_Yp, _Dp>::pointer, element_type*>::value
+ > >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr(unique_ptr<_Yp, _Dp>&& __r)
+ : __ptr_(__r.get())
+ {
+#if _LIBCPP_STD_VER > 11
+ if (__ptr_ == nullptr)
+ __cntrl_ = nullptr;
+ else
+#endif
{
- typedef typename remove_cv<_Yp>::type _RawYp;
- if (__e && __e->__weak_this_.expired())
- {
- __e->__weak_this_ = shared_ptr<_RawYp>(*this,
- const_cast<_RawYp*>(static_cast<const _Yp*>(__ptr)));
- }
+ typedef typename __shared_ptr_default_allocator<_Yp>::type _AllocT;
+ typedef __shared_ptr_pointer<typename unique_ptr<_Yp, _Dp>::pointer,
+ reference_wrapper<typename remove_reference<_Dp>::type>,
+ _AllocT > _CntrlBlk;
+ __cntrl_ = new _CntrlBlk(__r.get(), _VSTD::ref(__r.get_deleter()), _AllocT());
+ __enable_weak_this(__r.get(), __r.get());
}
+ __r.release();
+ }
- _LIBCPP_INLINE_VISIBILITY void __enable_weak_this(...) _NOEXCEPT {}
+ _LIBCPP_HIDE_FROM_ABI
+ ~shared_ptr()
+ {
+ if (__cntrl_)
+ __cntrl_->__release_shared();
+ }
- template <class, class _Yp>
- struct __shared_ptr_default_delete
- : default_delete<_Yp> {};
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr<_Tp>& operator=(const shared_ptr& __r) _NOEXCEPT
+ {
+ shared_ptr(__r).swap(*this);
+ return *this;
+ }
- template <class _Yp, class _Un, size_t _Sz>
- struct __shared_ptr_default_delete<_Yp[_Sz], _Un>
- : default_delete<_Yp[]> {};
+ template<class _Yp, class = __enable_if_t<__compatible_with<_Yp, _Tp>::value> >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr<_Tp>& operator=(const shared_ptr<_Yp>& __r) _NOEXCEPT
+ {
+ shared_ptr(__r).swap(*this);
+ return *this;
+ }
- template <class _Yp, class _Un>
- struct __shared_ptr_default_delete<_Yp[], _Un>
- : default_delete<_Yp[]> {};
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr<_Tp>& operator=(shared_ptr&& __r) _NOEXCEPT
+ {
+ shared_ptr(_VSTD::move(__r)).swap(*this);
+ return *this;
+ }
- template <class _Up> friend class _LIBCPP_TEMPLATE_VIS shared_ptr;
- template <class _Up> friend class _LIBCPP_TEMPLATE_VIS weak_ptr;
-};
+ template<class _Yp, class = __enable_if_t<__compatible_with<_Yp, _Tp>::value> >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr<_Tp>& operator=(shared_ptr<_Yp>&& __r)
+ {
+ shared_ptr(_VSTD::move(__r)).swap(*this);
+ return *this;
+ }
-#if _LIBCPP_STD_VER >= 17
-template<class _Tp>
-shared_ptr(weak_ptr<_Tp>) -> shared_ptr<_Tp>;
-template<class _Tp, class _Dp>
-shared_ptr(unique_ptr<_Tp, _Dp>) -> shared_ptr<_Tp>;
+#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR)
+ template<class _Yp, class = __enable_if_t<
+ !is_array<_Yp>::value &&
+ is_convertible<_Yp*, typename shared_ptr<_Tp>::element_type*>::value
+ > >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr<_Tp>& operator=(auto_ptr<_Yp>&& __r)
+ {
+ shared_ptr(_VSTD::move(__r)).swap(*this);
+ return *this;
+ }
#endif
-template<class _Tp>
-inline
-_LIBCPP_CONSTEXPR
-shared_ptr<_Tp>::shared_ptr() _NOEXCEPT
- : __ptr_(nullptr),
- __cntrl_(nullptr)
-{
-}
+ template <class _Yp, class _Dp, class = __enable_if_t<
+ is_convertible<typename unique_ptr<_Yp, _Dp>::pointer, element_type*>::value
+ > >
+ _LIBCPP_HIDE_FROM_ABI
+ shared_ptr<_Tp>& operator=(unique_ptr<_Yp, _Dp>&& __r)
+ {
+ shared_ptr(_VSTD::move(__r)).swap(*this);
+ return *this;
+ }
-template<class _Tp>
-inline
-_LIBCPP_CONSTEXPR
-shared_ptr<_Tp>::shared_ptr(nullptr_t) _NOEXCEPT
- : __ptr_(nullptr),
- __cntrl_(nullptr)
-{
-}
+ _LIBCPP_HIDE_FROM_ABI
+ void swap(shared_ptr& __r) _NOEXCEPT
+ {
+ _VSTD::swap(__ptr_, __r.__ptr_);
+ _VSTD::swap(__cntrl_, __r.__cntrl_);
+ }
-template<class _Tp>
-template<class _Yp, class _Dp>
-shared_ptr<_Tp>::shared_ptr(_Yp* __p, _Dp __d,
- typename enable_if<__shared_ptr_deleter_ctor_reqs<_Dp, _Yp, element_type>::value, __nat>::type)
- : __ptr_(__p)
-{
-#ifndef _LIBCPP_NO_EXCEPTIONS
- try
+ _LIBCPP_HIDE_FROM_ABI
+ void reset() _NOEXCEPT
{
-#endif // _LIBCPP_NO_EXCEPTIONS
- typedef typename __shared_ptr_default_allocator<_Yp>::type _AllocT;
- typedef __shared_ptr_pointer<_Yp*, _Dp, _AllocT > _CntrlBlk;
-#ifndef _LIBCPP_CXX03_LANG
- __cntrl_ = new _CntrlBlk(__p, _VSTD::move(__d), _AllocT());
-#else
- __cntrl_ = new _CntrlBlk(__p, __d, _AllocT());
-#endif // not _LIBCPP_CXX03_LANG
- __enable_weak_this(__p, __p);
-#ifndef _LIBCPP_NO_EXCEPTIONS
+ shared_ptr().swap(*this);
}
- catch (...)
+
+ template<class _Yp, class = __enable_if_t<
+ __compatible_with<_Yp, _Tp>::value
+ > >
+ _LIBCPP_HIDE_FROM_ABI
+ void reset(_Yp* __p)
{
- __d(__p);
- throw;
+ shared_ptr(__p).swap(*this);
}
-#endif // _LIBCPP_NO_EXCEPTIONS
-}
-template<class _Tp>
-template<class _Dp>
-shared_ptr<_Tp>::shared_ptr(nullptr_t __p, _Dp __d)
- : __ptr_(nullptr)
-{
-#ifndef _LIBCPP_NO_EXCEPTIONS
- try
+ template<class _Yp, class _Dp, class = __enable_if_t<
+ __compatible_with<_Yp, _Tp>::value
+ > >
+ _LIBCPP_HIDE_FROM_ABI
+ void reset(_Yp* __p, _Dp __d)
{
-#endif // _LIBCPP_NO_EXCEPTIONS
- typedef typename __shared_ptr_default_allocator<_Tp>::type _AllocT;
- typedef __shared_ptr_pointer<nullptr_t, _Dp, _AllocT > _CntrlBlk;
-#ifndef _LIBCPP_CXX03_LANG
- __cntrl_ = new _CntrlBlk(__p, _VSTD::move(__d), _AllocT());
-#else
- __cntrl_ = new _CntrlBlk(__p, __d, _AllocT());
-#endif // not _LIBCPP_CXX03_LANG
-#ifndef _LIBCPP_NO_EXCEPTIONS
+ shared_ptr(__p, __d).swap(*this);
}
- catch (...)
+
+ template<class _Yp, class _Dp, class _Alloc, class = __enable_if_t<
+ __compatible_with<_Yp, _Tp>::value
+ > >
+ _LIBCPP_HIDE_FROM_ABI
+ void reset(_Yp* __p, _Dp __d, _Alloc __a)
{
- __d(__p);
- throw;
+ shared_ptr(__p, __d, __a).swap(*this);
}
-#endif // _LIBCPP_NO_EXCEPTIONS
-}
-template<class _Tp>
-template<class _Yp, class _Dp, class _Alloc>
-shared_ptr<_Tp>::shared_ptr(_Yp* __p, _Dp __d, _Alloc __a,
- typename enable_if<__shared_ptr_deleter_ctor_reqs<_Dp, _Yp, element_type>::value, __nat>::type)
- : __ptr_(__p)
-{
-#ifndef _LIBCPP_NO_EXCEPTIONS
- try
+ _LIBCPP_HIDE_FROM_ABI
+ element_type* get() const _NOEXCEPT
{
-#endif // _LIBCPP_NO_EXCEPTIONS
- typedef __shared_ptr_pointer<_Yp*, _Dp, _Alloc> _CntrlBlk;
- typedef typename __allocator_traits_rebind<_Alloc, _CntrlBlk>::type _A2;
- typedef __allocator_destructor<_A2> _D2;
- _A2 __a2(__a);
- unique_ptr<_CntrlBlk, _D2> __hold2(__a2.allocate(1), _D2(__a2, 1));
- ::new ((void*)_VSTD::addressof(*__hold2.get()))
-#ifndef _LIBCPP_CXX03_LANG
- _CntrlBlk(__p, _VSTD::move(__d), __a);
-#else
- _CntrlBlk(__p, __d, __a);
-#endif // not _LIBCPP_CXX03_LANG
- __cntrl_ = _VSTD::addressof(*__hold2.release());
- __enable_weak_this(__p, __p);
-#ifndef _LIBCPP_NO_EXCEPTIONS
+ return __ptr_;
}
- catch (...)
+
+ _LIBCPP_HIDE_FROM_ABI
+ typename add_lvalue_reference<element_type>::type operator*() const _NOEXCEPT
{
- __d(__p);
- throw;
+ return *__ptr_;
}
-#endif // _LIBCPP_NO_EXCEPTIONS
-}
-template<class _Tp>
-template<class _Dp, class _Alloc>
-shared_ptr<_Tp>::shared_ptr(nullptr_t __p, _Dp __d, _Alloc __a)
- : __ptr_(nullptr)
-{
-#ifndef _LIBCPP_NO_EXCEPTIONS
- try
+ _LIBCPP_HIDE_FROM_ABI
+ element_type* operator->() const _NOEXCEPT
{
-#endif // _LIBCPP_NO_EXCEPTIONS
- typedef __shared_ptr_pointer<nullptr_t, _Dp, _Alloc> _CntrlBlk;
- typedef typename __allocator_traits_rebind<_Alloc, _CntrlBlk>::type _A2;
- typedef __allocator_destructor<_A2> _D2;
- _A2 __a2(__a);
- unique_ptr<_CntrlBlk, _D2> __hold2(__a2.allocate(1), _D2(__a2, 1));
- ::new ((void*)_VSTD::addressof(*__hold2.get()))
-#ifndef _LIBCPP_CXX03_LANG
- _CntrlBlk(__p, _VSTD::move(__d), __a);
-#else
- _CntrlBlk(__p, __d, __a);
-#endif // not _LIBCPP_CXX03_LANG
- __cntrl_ = _VSTD::addressof(*__hold2.release());
-#ifndef _LIBCPP_NO_EXCEPTIONS
+ static_assert(!is_array<_Tp>::value,
+ "std::shared_ptr<T>::operator-> is only valid when T is not an array type.");
+ return __ptr_;
}
- catch (...)
+
+ _LIBCPP_HIDE_FROM_ABI
+ long use_count() const _NOEXCEPT
{
- __d(__p);
- throw;
+ return __cntrl_ ? __cntrl_->use_count() : 0;
}
-#endif // _LIBCPP_NO_EXCEPTIONS
-}
-template<class _Tp>
-template<class _Yp>
-inline
-shared_ptr<_Tp>::shared_ptr(const shared_ptr<_Yp>& __r, element_type *__p) _NOEXCEPT
- : __ptr_(__p),
- __cntrl_(__r.__cntrl_)
-{
- if (__cntrl_)
- __cntrl_->__add_shared();
-}
+ _LIBCPP_HIDE_FROM_ABI
+ bool unique() const _NOEXCEPT
+ {
+ return use_count() == 1;
+ }
-template<class _Tp>
-inline
-shared_ptr<_Tp>::shared_ptr(const shared_ptr& __r) _NOEXCEPT
- : __ptr_(__r.__ptr_),
- __cntrl_(__r.__cntrl_)
-{
- if (__cntrl_)
- __cntrl_->__add_shared();
-}
+ _LIBCPP_HIDE_FROM_ABI
+ explicit operator bool() const _NOEXCEPT
+ {
+ return get() != nullptr;
+ }
-template<class _Tp>
-template<class _Yp>
-inline
-shared_ptr<_Tp>::shared_ptr(const shared_ptr<_Yp>& __r,
- typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type)
- _NOEXCEPT
- : __ptr_(__r.__ptr_),
- __cntrl_(__r.__cntrl_)
-{
- if (__cntrl_)
- __cntrl_->__add_shared();
-}
+ template <class _Up>
+ _LIBCPP_HIDE_FROM_ABI
+ bool owner_before(shared_ptr<_Up> const& __p) const _NOEXCEPT
+ {
+ return __cntrl_ < __p.__cntrl_;
+ }
-template<class _Tp>
-inline
-shared_ptr<_Tp>::shared_ptr(shared_ptr&& __r) _NOEXCEPT
- : __ptr_(__r.__ptr_),
- __cntrl_(__r.__cntrl_)
-{
- __r.__ptr_ = nullptr;
- __r.__cntrl_ = nullptr;
-}
+ template <class _Up>
+ _LIBCPP_HIDE_FROM_ABI
+ bool owner_before(weak_ptr<_Up> const& __p) const _NOEXCEPT
+ {
+ return __cntrl_ < __p.__cntrl_;
+ }
-template<class _Tp>
-template<class _Yp>
-inline
-shared_ptr<_Tp>::shared_ptr(shared_ptr<_Yp>&& __r,
- typename enable_if<__compatible_with<_Yp, element_type>::value, __nat>::type)
- _NOEXCEPT
- : __ptr_(__r.__ptr_),
- __cntrl_(__r.__cntrl_)
-{
- __r.__ptr_ = nullptr;
- __r.__cntrl_ = nullptr;
-}
+ _LIBCPP_HIDE_FROM_ABI
+ bool __owner_equivalent(const shared_ptr& __p) const
+ {
+ return __cntrl_ == __p.__cntrl_;
+ }
-#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR)
-template<class _Tp>
-template<class _Yp>
-shared_ptr<_Tp>::shared_ptr(auto_ptr<_Yp>&& __r,
- typename enable_if<is_convertible<_Yp*, element_type*>::value, __nat>::type)
- : __ptr_(__r.get())
-{
- typedef __shared_ptr_pointer<_Yp*, default_delete<_Yp>, allocator<_Yp> > _CntrlBlk;
- __cntrl_ = new _CntrlBlk(__r.get(), default_delete<_Yp>(), allocator<_Yp>());
- __enable_weak_this(__r.get(), __r.get());
- __r.release();
-}
+#if _LIBCPP_STD_VER > 14
+ _LIBCPP_HIDE_FROM_ABI
+ typename add_lvalue_reference<element_type>::type operator[](ptrdiff_t __i) const
+ {
+ static_assert(is_array<_Tp>::value,
+ "std::shared_ptr<T>::operator[] is only valid when T is an array type.");
+ return __ptr_[__i];
+ }
#endif
-template<class _Tp>
-template <class _Yp, class _Dp>
-shared_ptr<_Tp>::shared_ptr(unique_ptr<_Yp, _Dp>&& __r,
- typename enable_if
- <
- !is_lvalue_reference<_Dp>::value &&
- is_convertible<typename unique_ptr<_Yp, _Dp>::pointer, element_type*>::value,
- __nat
- >::type)
- : __ptr_(__r.get())
-{
-#if _LIBCPP_STD_VER > 11
- if (__ptr_ == nullptr)
- __cntrl_ = nullptr;
- else
-#endif
+#ifndef _LIBCPP_NO_RTTI
+ template <class _Dp>
+ _LIBCPP_HIDE_FROM_ABI
+ _Dp* __get_deleter() const _NOEXCEPT
{
- typedef typename __shared_ptr_default_allocator<_Yp>::type _AllocT;
- typedef __shared_ptr_pointer<typename unique_ptr<_Yp, _Dp>::pointer, _Dp, _AllocT > _CntrlBlk;
- __cntrl_ = new _CntrlBlk(__r.get(), __r.get_deleter(), _AllocT());
- __enable_weak_this(__r.get(), __r.get());
+ return static_cast<_Dp*>(__cntrl_
+ ? const_cast<void *>(__cntrl_->__get_deleter(typeid(_Dp)))
+ : nullptr);
}
- __r.release();
-}
+#endif // _LIBCPP_NO_RTTI
-template<class _Tp>
-template <class _Yp, class _Dp>
-shared_ptr<_Tp>::shared_ptr(unique_ptr<_Yp, _Dp>&& __r,
- typename enable_if
- <
- is_lvalue_reference<_Dp>::value &&
- is_convertible<typename unique_ptr<_Yp, _Dp>::pointer, element_type*>::value,
- __nat
- >::type)
- : __ptr_(__r.get())
-{
-#if _LIBCPP_STD_VER > 11
- if (__ptr_ == nullptr)
- __cntrl_ = nullptr;
- else
-#endif
+ template<class _Yp, class _CntrlBlk>
+ _LIBCPP_HIDE_FROM_ABI
+ static shared_ptr<_Tp> __create_with_control_block(_Yp* __p, _CntrlBlk* __cntrl) _NOEXCEPT
{
- typedef typename __shared_ptr_default_allocator<_Yp>::type _AllocT;
- typedef __shared_ptr_pointer<typename unique_ptr<_Yp, _Dp>::pointer,
- reference_wrapper<typename remove_reference<_Dp>::type>,
- _AllocT > _CntrlBlk;
- __cntrl_ = new _CntrlBlk(__r.get(), _VSTD::ref(__r.get_deleter()), _AllocT());
- __enable_weak_this(__r.get(), __r.get());
+ shared_ptr<_Tp> __r;
+ __r.__ptr_ = __p;
+ __r.__cntrl_ = __cntrl;
+ __r.__enable_weak_this(__r.__ptr_, __r.__ptr_);
+ return __r;
}
- __r.release();
-}
-
-template<class _Tp>
-shared_ptr<_Tp>::~shared_ptr()
-{
- if (__cntrl_)
- __cntrl_->__release_shared();
-}
-
-template<class _Tp>
-inline
-shared_ptr<_Tp>&
-shared_ptr<_Tp>::operator=(const shared_ptr& __r) _NOEXCEPT
-{
- shared_ptr(__r).swap(*this);
- return *this;
-}
-
-template<class _Tp>
-template<class _Yp>
-inline
-typename enable_if
-<
- __compatible_with<_Yp, typename shared_ptr<_Tp>::element_type>::value,
- shared_ptr<_Tp>&
->::type
-shared_ptr<_Tp>::operator=(const shared_ptr<_Yp>& __r) _NOEXCEPT
-{
- shared_ptr(__r).swap(*this);
- return *this;
-}
-template<class _Tp>
-inline
-shared_ptr<_Tp>&
-shared_ptr<_Tp>::operator=(shared_ptr&& __r) _NOEXCEPT
-{
- shared_ptr(_VSTD::move(__r)).swap(*this);
- return *this;
-}
+private:
+ template <class _Yp, bool = is_function<_Yp>::value>
+ struct __shared_ptr_default_allocator
+ {
+ typedef allocator<_Yp> type;
+ };
-template<class _Tp>
-template<class _Yp>
-inline
-typename enable_if
-<
- __compatible_with<_Yp, typename shared_ptr<_Tp>::element_type>::value,
- shared_ptr<_Tp>&
->::type
-shared_ptr<_Tp>::operator=(shared_ptr<_Yp>&& __r)
-{
- shared_ptr(_VSTD::move(__r)).swap(*this);
- return *this;
-}
+ template <class _Yp>
+ struct __shared_ptr_default_allocator<_Yp, true>
+ {
+ typedef allocator<__shared_ptr_dummy_rebind_allocator_type> type;
+ };
-#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR)
-template<class _Tp>
-template<class _Yp>
-inline
-typename enable_if
-<
- !is_array<_Yp>::value &&
- is_convertible<_Yp*, typename shared_ptr<_Tp>::element_type*>::value,
- shared_ptr<_Tp>
->::type&
-shared_ptr<_Tp>::operator=(auto_ptr<_Yp>&& __r)
-{
- shared_ptr(_VSTD::move(__r)).swap(*this);
- return *this;
-}
-#endif
+ template <class _Yp, class _OrigPtr, class = __enable_if_t<
+ is_convertible<_OrigPtr*, const enable_shared_from_this<_Yp>*>::value
+ > >
+ _LIBCPP_HIDE_FROM_ABI
+ void __enable_weak_this(const enable_shared_from_this<_Yp>* __e, _OrigPtr* __ptr) _NOEXCEPT
+ {
+ typedef typename remove_cv<_Yp>::type _RawYp;
+ if (__e && __e->__weak_this_.expired())
+ {
+ __e->__weak_this_ = shared_ptr<_RawYp>(*this,
+ const_cast<_RawYp*>(static_cast<const _Yp*>(__ptr)));
+ }
+ }
-template<class _Tp>
-template <class _Yp, class _Dp>
-inline
-typename enable_if
-<
- is_convertible<typename unique_ptr<_Yp, _Dp>::pointer,
- typename shared_ptr<_Tp>::element_type*>::value,
- shared_ptr<_Tp>&
->::type
-shared_ptr<_Tp>::operator=(unique_ptr<_Yp, _Dp>&& __r)
-{
- shared_ptr(_VSTD::move(__r)).swap(*this);
- return *this;
-}
+ _LIBCPP_HIDE_FROM_ABI void __enable_weak_this(...) _NOEXCEPT { }
-template<class _Tp>
-inline
-void
-shared_ptr<_Tp>::swap(shared_ptr& __r) _NOEXCEPT
-{
- _VSTD::swap(__ptr_, __r.__ptr_);
- _VSTD::swap(__cntrl_, __r.__cntrl_);
-}
+ template <class, class _Yp>
+ struct __shared_ptr_default_delete
+ : default_delete<_Yp>
+ { };
-template<class _Tp>
-inline
-void
-shared_ptr<_Tp>::reset() _NOEXCEPT
-{
- shared_ptr().swap(*this);
-}
+ template <class _Yp, class _Un, size_t _Sz>
+ struct __shared_ptr_default_delete<_Yp[_Sz], _Un>
+ : default_delete<_Yp[]>
+ { };
-template<class _Tp>
-template<class _Yp>
-inline
-typename enable_if
-<
- __compatible_with<_Yp, typename shared_ptr<_Tp>::element_type>::value,
- void
->::type
-shared_ptr<_Tp>::reset(_Yp* __p)
-{
- shared_ptr(__p).swap(*this);
-}
+ template <class _Yp, class _Un>
+ struct __shared_ptr_default_delete<_Yp[], _Un>
+ : default_delete<_Yp[]>
+ { };
-template<class _Tp>
-template<class _Yp, class _Dp>
-inline
-typename enable_if
-<
- __compatible_with<_Yp, typename shared_ptr<_Tp>::element_type>::value,
- void
->::type
-shared_ptr<_Tp>::reset(_Yp* __p, _Dp __d)
-{
- shared_ptr(__p, __d).swap(*this);
-}
+ template <class _Up> friend class _LIBCPP_TEMPLATE_VIS shared_ptr;
+ template <class _Up> friend class _LIBCPP_TEMPLATE_VIS weak_ptr;
+};
+#if _LIBCPP_STD_VER > 14
template<class _Tp>
-template<class _Yp, class _Dp, class _Alloc>
-inline
-typename enable_if
-<
- __compatible_with<_Yp, typename shared_ptr<_Tp>::element_type>::value,
- void
->::type
-shared_ptr<_Tp>::reset(_Yp* __p, _Dp __d, _Alloc __a)
-{
- shared_ptr(__p, __d, __a).swap(*this);
-}
+shared_ptr(weak_ptr<_Tp>) -> shared_ptr<_Tp>;
+template<class _Tp, class _Dp>
+shared_ptr(unique_ptr<_Tp, _Dp>) -> shared_ptr<_Tp>;
+#endif
//
// std::allocate_shared and std::make_shared
@@ -1352,7 +1202,12 @@ template<class _Tp>
class _LIBCPP_SHARED_PTR_TRIVIAL_ABI _LIBCPP_TEMPLATE_VIS weak_ptr
{
public:
+#if _LIBCPP_STD_VER > 14
+ typedef remove_extent_t<_Tp> element_type;
+#else
typedef _Tp element_type;
+#endif
+
private:
element_type* __ptr_;
__shared_weak_count* __cntrl_;
@@ -1361,18 +1216,18 @@ public:
_LIBCPP_INLINE_VISIBILITY
_LIBCPP_CONSTEXPR weak_ptr() _NOEXCEPT;
template<class _Yp> _LIBCPP_INLINE_VISIBILITY weak_ptr(shared_ptr<_Yp> const& __r,
- typename enable_if<is_convertible<_Yp*, _Tp*>::value, __nat*>::type = 0)
+ typename enable_if<__compatible_with<_Yp, _Tp>::value, __nat*>::type = 0)
_NOEXCEPT;
_LIBCPP_INLINE_VISIBILITY
weak_ptr(weak_ptr const& __r) _NOEXCEPT;
template<class _Yp> _LIBCPP_INLINE_VISIBILITY weak_ptr(weak_ptr<_Yp> const& __r,
- typename enable_if<is_convertible<_Yp*, _Tp*>::value, __nat*>::type = 0)
+ typename enable_if<__compatible_with<_Yp, _Tp>::value, __nat*>::type = 0)
_NOEXCEPT;
_LIBCPP_INLINE_VISIBILITY
weak_ptr(weak_ptr&& __r) _NOEXCEPT;
template<class _Yp> _LIBCPP_INLINE_VISIBILITY weak_ptr(weak_ptr<_Yp>&& __r,
- typename enable_if<is_convertible<_Yp*, _Tp*>::value, __nat*>::type = 0)
+ typename enable_if<__compatible_with<_Yp, _Tp>::value, __nat*>::type = 0)
_NOEXCEPT;
~weak_ptr();
@@ -1381,7 +1236,7 @@ public:
template<class _Yp>
typename enable_if
<
- is_convertible<_Yp*, element_type*>::value,
+ __compatible_with<_Yp, _Tp>::value,
weak_ptr&
>::type
_LIBCPP_INLINE_VISIBILITY
@@ -1392,7 +1247,7 @@ public:
template<class _Yp>
typename enable_if
<
- is_convertible<_Yp*, element_type*>::value,
+ __compatible_with<_Yp, _Tp>::value,
weak_ptr&
>::type
_LIBCPP_INLINE_VISIBILITY
@@ -1401,7 +1256,7 @@ public:
template<class _Yp>
typename enable_if
<
- is_convertible<_Yp*, element_type*>::value,
+ __compatible_with<_Yp, _Tp>::value,
weak_ptr&
>::type
_LIBCPP_INLINE_VISIBILITY
@@ -1432,7 +1287,7 @@ public:
template <class _Up> friend class _LIBCPP_TEMPLATE_VIS shared_ptr;
};
-#if _LIBCPP_STD_VER >= 17
+#if _LIBCPP_STD_VER > 14
template<class _Tp>
weak_ptr(shared_ptr<_Tp>) -> weak_ptr<_Tp>;
#endif
@@ -1460,7 +1315,7 @@ template<class _Tp>
template<class _Yp>
inline
weak_ptr<_Tp>::weak_ptr(shared_ptr<_Yp> const& __r,
- typename enable_if<is_convertible<_Yp*, _Tp*>::value, __nat*>::type)
+ typename enable_if<__compatible_with<_Yp, _Tp>::value, __nat*>::type)
_NOEXCEPT
: __ptr_(__r.__ptr_),
__cntrl_(__r.__cntrl_)
@@ -1473,7 +1328,7 @@ template<class _Tp>
template<class _Yp>
inline
weak_ptr<_Tp>::weak_ptr(weak_ptr<_Yp> const& __r,
- typename enable_if<is_convertible<_Yp*, _Tp*>::value, __nat*>::type)
+ typename enable_if<__compatible_with<_Yp, _Tp>::value, __nat*>::type)
_NOEXCEPT
: __ptr_(__r.__ptr_),
__cntrl_(__r.__cntrl_)
@@ -1496,7 +1351,7 @@ template<class _Tp>
template<class _Yp>
inline
weak_ptr<_Tp>::weak_ptr(weak_ptr<_Yp>&& __r,
- typename enable_if<is_convertible<_Yp*, _Tp*>::value, __nat*>::type)
+ typename enable_if<__compatible_with<_Yp, _Tp>::value, __nat*>::type)
_NOEXCEPT
: __ptr_(__r.__ptr_),
__cntrl_(__r.__cntrl_)
@@ -1526,7 +1381,7 @@ template<class _Yp>
inline
typename enable_if
<
- is_convertible<_Yp*, _Tp*>::value,
+ __compatible_with<_Yp, _Tp>::value,
weak_ptr<_Tp>&
>::type
weak_ptr<_Tp>::operator=(weak_ptr<_Yp> const& __r) _NOEXCEPT
@@ -1549,7 +1404,7 @@ template<class _Yp>
inline
typename enable_if
<
- is_convertible<_Yp*, _Tp*>::value,
+ __compatible_with<_Yp, _Tp>::value,
weak_ptr<_Tp>&
>::type
weak_ptr<_Tp>::operator=(weak_ptr<_Yp>&& __r) _NOEXCEPT
@@ -1563,7 +1418,7 @@ template<class _Yp>
inline
typename enable_if
<
- is_convertible<_Yp*, _Tp*>::value,
+ __compatible_with<_Yp, _Tp>::value,
weak_ptr<_Tp>&
>::type
weak_ptr<_Tp>::operator=(shared_ptr<_Yp> const& __r) _NOEXCEPT
@@ -1598,17 +1453,6 @@ weak_ptr<_Tp>::reset() _NOEXCEPT
}
template<class _Tp>
-template<class _Yp>
-shared_ptr<_Tp>::shared_ptr(const weak_ptr<_Yp>& __r,
- typename enable_if<is_convertible<_Yp*, element_type*>::value, __nat>::type)
- : __ptr_(__r.__ptr_),
- __cntrl_(__r.__cntrl_ ? __r.__cntrl_->lock() : __r.__cntrl_)
-{
- if (__cntrl_ == nullptr)
- __throw_bad_weak_ptr();
-}
-
-template<class _Tp>
shared_ptr<_Tp>
weak_ptr<_Tp>::lock() const _NOEXCEPT
{
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/reverse_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/reverse_view.h
index ad88dc7138..618be80457 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/reverse_view.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/reverse_view.h
@@ -19,8 +19,11 @@
#include <__ranges/concepts.h>
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/non_propagating_cache.h>
+#include <__ranges/range_adaptor.h>
#include <__ranges/size.h>
+#include <__ranges/subrange.h>
#include <__ranges/view_interface.h>
+#include <__utility/forward.h>
#include <__utility/move.h>
#include <type_traits>
@@ -104,6 +107,80 @@ namespace ranges {
template<class _Tp>
inline constexpr bool enable_borrowed_range<reverse_view<_Tp>> = enable_borrowed_range<_Tp>;
+
+ namespace views {
+ namespace __reverse {
+ template<class _Tp>
+ constexpr bool __is_reverse_view = false;
+
+ template<class _Tp>
+ constexpr bool __is_reverse_view<reverse_view<_Tp>> = true;
+
+ template<class _Tp>
+ constexpr bool __is_sized_reverse_subrange = false;
+
+ template<class _Iter>
+ constexpr bool __is_sized_reverse_subrange<subrange<reverse_iterator<_Iter>, reverse_iterator<_Iter>, subrange_kind::sized>> = true;
+
+ template<class _Tp>
+ constexpr bool __is_unsized_reverse_subrange = false;
+
+ template<class _Iter, subrange_kind _Kind>
+ constexpr bool __is_unsized_reverse_subrange<subrange<reverse_iterator<_Iter>, reverse_iterator<_Iter>, _Kind>> = _Kind == subrange_kind::unsized;
+
+ template<class _Tp>
+ struct __unwrapped_reverse_subrange {
+ using type = void; // avoid SFINAE-ing out the overload below -- let the concept requirements do it for better diagnostics
+ };
+
+ template<class _Iter, subrange_kind _Kind>
+ struct __unwrapped_reverse_subrange<subrange<reverse_iterator<_Iter>, reverse_iterator<_Iter>, _Kind>> {
+ using type = subrange<_Iter, _Iter, _Kind>;
+ };
+
+ struct __fn : __range_adaptor_closure<__fn> {
+ template<class _Range>
+ requires __is_reverse_view<remove_cvref_t<_Range>>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range) const
+ noexcept(noexcept(_VSTD::forward<_Range>(__range).base()))
+ -> decltype( _VSTD::forward<_Range>(__range).base())
+ { return _VSTD::forward<_Range>(__range).base(); }
+
+ template<class _Range,
+ class _UnwrappedSubrange = typename __unwrapped_reverse_subrange<remove_cvref_t<_Range>>::type>
+ requires __is_sized_reverse_subrange<remove_cvref_t<_Range>>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range) const
+ noexcept(noexcept(_UnwrappedSubrange(__range.end().base(), __range.begin().base(), __range.size())))
+ -> decltype( _UnwrappedSubrange(__range.end().base(), __range.begin().base(), __range.size()))
+ { return _UnwrappedSubrange(__range.end().base(), __range.begin().base(), __range.size()); }
+
+ template<class _Range,
+ class _UnwrappedSubrange = typename __unwrapped_reverse_subrange<remove_cvref_t<_Range>>::type>
+ requires __is_unsized_reverse_subrange<remove_cvref_t<_Range>>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range) const
+ noexcept(noexcept(_UnwrappedSubrange(__range.end().base(), __range.begin().base())))
+ -> decltype( _UnwrappedSubrange(__range.end().base(), __range.begin().base()))
+ { return _UnwrappedSubrange(__range.end().base(), __range.begin().base()); }
+
+ template<class _Range>
+ requires (!__is_reverse_view<remove_cvref_t<_Range>> &&
+ !__is_sized_reverse_subrange<remove_cvref_t<_Range>> &&
+ !__is_unsized_reverse_subrange<remove_cvref_t<_Range>>)
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range) const
+ noexcept(noexcept(reverse_view{_VSTD::forward<_Range>(__range)}))
+ -> decltype( reverse_view{_VSTD::forward<_Range>(__range)})
+ { return reverse_view{_VSTD::forward<_Range>(__range)}; }
+ };
+ }
+
+ inline namespace __cpo {
+ inline constexpr auto reverse = __reverse::__fn{};
+ }
+ } // namespace views
} // namespace ranges
#endif // !defined(_LIBCPP_HAS_NO_RANGES)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h
index 1c66dadfa1..8a1f5d8c92 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h
@@ -43,11 +43,13 @@ template<class _Derived>
class view_interface : public view_base {
_LIBCPP_HIDE_FROM_ABI
constexpr _Derived& __derived() noexcept {
+ static_assert(sizeof(_Derived) && derived_from<_Derived, view_interface> && view<_Derived>);
return static_cast<_Derived&>(*this);
}
_LIBCPP_HIDE_FROM_ABI
constexpr _Derived const& __derived() const noexcept {
+ static_assert(sizeof(_Derived) && derived_from<_Derived, view_interface> && view<_Derived>);
return static_cast<_Derived const&>(*this);
}
diff --git a/contrib/libs/cxxsupp/libcxx/include/__threading_support b/contrib/libs/cxxsupp/libcxx/include/__threading_support
index 9b0de00dfc..7bf2363d20 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__threading_support
+++ b/contrib/libs/cxxsupp/libcxx/include/__threading_support
@@ -31,16 +31,9 @@
# undef _LIBCPP_EXTERNAL_THREADING
#elif !defined(_LIBCPP_HAS_NO_THREADS)
-#if defined(__APPLE__) || defined(__MVS__)
-# define _LIBCPP_NO_NATIVE_SEMAPHORES
-#endif
-
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
# include <pthread.h>
# include <sched.h>
-# ifndef _LIBCPP_NO_NATIVE_SEMAPHORES
-# include <semaphore.h>
-# endif
#elif defined(_LIBCPP_HAS_THREAD_API_C11)
# include <threads.h>
#endif
@@ -80,12 +73,6 @@ typedef pthread_mutex_t __libcpp_recursive_mutex_t;
typedef pthread_cond_t __libcpp_condvar_t;
#define _LIBCPP_CONDVAR_INITIALIZER PTHREAD_COND_INITIALIZER
-#ifndef _LIBCPP_NO_NATIVE_SEMAPHORES
-// Semaphore
-typedef sem_t __libcpp_semaphore_t;
-# define _LIBCPP_SEMAPHORE_MAX SEM_VALUE_MAX
-#endif
-
// Execute once
typedef pthread_once_t __libcpp_exec_once_flag;
#define _LIBCPP_EXEC_ONCE_INITIALIZER PTHREAD_ONCE_INIT
@@ -151,12 +138,6 @@ typedef void* __libcpp_recursive_mutex_t[5];
typedef void* __libcpp_condvar_t;
#define _LIBCPP_CONDVAR_INITIALIZER 0
-// Semaphore
-typedef void* __libcpp_semaphore_t;
-#if defined(_LIBCPP_HAS_THREAD_API_WIN32)
-# define _LIBCPP_SEMAPHORE_MAX (::std::numeric_limits<long>::max())
-#endif
-
// Execute Once
typedef void* __libcpp_exec_once_flag;
#define _LIBCPP_EXEC_ONCE_INITIALIZER 0
@@ -221,26 +202,6 @@ int __libcpp_condvar_timedwait(__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m,
_LIBCPP_THREAD_ABI_VISIBILITY
int __libcpp_condvar_destroy(__libcpp_condvar_t* __cv);
-#ifndef _LIBCPP_NO_NATIVE_SEMAPHORES
-
-// Semaphore
-_LIBCPP_THREAD_ABI_VISIBILITY
-bool __libcpp_semaphore_init(__libcpp_semaphore_t* __sem, int __init);
-
-_LIBCPP_THREAD_ABI_VISIBILITY
-bool __libcpp_semaphore_destroy(__libcpp_semaphore_t* __sem);
-
-_LIBCPP_THREAD_ABI_VISIBILITY
-bool __libcpp_semaphore_post(__libcpp_semaphore_t* __sem);
-
-_LIBCPP_THREAD_ABI_VISIBILITY
-bool __libcpp_semaphore_wait(__libcpp_semaphore_t* __sem);
-
-_LIBCPP_THREAD_ABI_VISIBILITY
-bool __libcpp_semaphore_wait_timed(__libcpp_semaphore_t* __sem, chrono::nanoseconds const& __ns);
-
-#endif // _LIBCPP_NO_NATIVE_SEMAPHORES
-
// Execute once
_LIBCPP_THREAD_ABI_VISIBILITY
int __libcpp_execute_once(__libcpp_exec_once_flag *flag,
@@ -454,38 +415,6 @@ int __libcpp_condvar_destroy(__libcpp_condvar_t *__cv)
return pthread_cond_destroy(__cv);
}
-#ifndef _LIBCPP_NO_NATIVE_SEMAPHORES
-
-// Semaphore
-bool __libcpp_semaphore_init(__libcpp_semaphore_t* __sem, int __init)
-{
- return sem_init(__sem, 0, __init) == 0;
-}
-
-bool __libcpp_semaphore_destroy(__libcpp_semaphore_t* __sem)
-{
- return sem_destroy(__sem) == 0;
-}
-
-bool __libcpp_semaphore_post(__libcpp_semaphore_t* __sem)
-{
- return sem_post(__sem) == 0;
-}
-
-bool __libcpp_semaphore_wait(__libcpp_semaphore_t* __sem)
-{
- return sem_wait(__sem) == 0;
-}
-
-bool __libcpp_semaphore_wait_timed(__libcpp_semaphore_t* __sem, chrono::nanoseconds const& __ns)
-{
- auto const __abs_time = chrono::system_clock::now().time_since_epoch() + __ns;
- __libcpp_timespec_t __ts = __thread_detail::__convert_to_timespec(__abs_time);
- return sem_timedwait(__sem, &__ts) == 0;
-}
-
-#endif //_LIBCPP_NO_NATIVE_SEMAPHORES
-
// Execute once
int __libcpp_execute_once(__libcpp_exec_once_flag *flag,
void (*init_routine)()) {
diff --git a/contrib/libs/cxxsupp/libcxx/include/__utility/decay_copy.h b/contrib/libs/cxxsupp/libcxx/include/__utility/decay_copy.h
index 1a7b399d91..5c9716a892 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__utility/decay_copy.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__utility/decay_copy.h
@@ -21,9 +21,10 @@
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY typename decay<_Tp>::type __decay_copy(_Tp&& __t)
+_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR
+typename decay<_Tp>::type __decay_copy(_Tp&& __t)
#if _LIBCPP_STD_VER > 17
- noexcept(is_nothrow_convertible_v<_Tp, remove_reference_t<_Tp> >)
+ noexcept(is_nothrow_convertible_v<_Tp, remove_reference_t<_Tp>>)
#endif
{
return _VSTD::forward<_Tp>(__t);
diff --git a/contrib/libs/cxxsupp/libcxx/include/charconv b/contrib/libs/cxxsupp/libcxx/include/charconv
index 2fdab7f007..447cef97a2 100644
--- a/contrib/libs/cxxsupp/libcxx/include/charconv
+++ b/contrib/libs/cxxsupp/libcxx/include/charconv
@@ -31,6 +31,8 @@ namespace std {
to_chars_result to_chars(char* first, char* last, see below value,
int base = 10);
+ to_chars_result to_chars(char* first, char* last, bool value,
+ int base = 10) = delete;
to_chars_result to_chars(char* first, char* last, float value);
to_chars_result to_chars(char* first, char* last, double value);
diff --git a/contrib/libs/cxxsupp/libcxx/include/chrono b/contrib/libs/cxxsupp/libcxx/include/chrono
index db186a4fba..c36c8f9e72 100644
--- a/contrib/libs/cxxsupp/libcxx/include/chrono
+++ b/contrib/libs/cxxsupp/libcxx/include/chrono
@@ -148,11 +148,6 @@ template <class Clock, class Duration1, class Duration2>
namespace chrono {
-
-template<class T> struct is_clock; // C++20
-template<class T> inline constexpr bool is_clock_v = is_clock<T>::value; // C++20
-
-
// duration arithmetic
template <class Rep1, class Period1, class Rep2, class Period2>
constexpr
@@ -281,19 +276,23 @@ template <class Duration>
using sys_seconds = sys_time<seconds>; // C++20
using sys_days = sys_time<days>; // C++20
-class utc_clock; // C++20
-
-template <class Duration>
- using utc_time = time_point<utc_clock, Duration>; // C++20
-using utc_seconds = utc_time<seconds>; // C++20
+class file_clock // C++20
+{
+public:
+ typedef see-below rep;
+ typedef nano period;
+ typedef chrono::duration<rep, period> duration;
+ typedef chrono::time_point<file_clock> time_point;
+ static constexpr bool is_steady = false;
-class tai_clock; // C++20
+ static time_point now() noexcept;
-template <class Duration>
- using tai_time = time_point<tai_clock, Duration>; // C++20
-using tai_seconds = tai_time<seconds>; // C++20
+ template<class Duration>
+ static sys_time<see-below> to_sys(const file_time<Duration>&);
-class file_clock; // C++20
+ template<class Duration>
+ static file_time<see-below> from_sys(const sys_time<Duration>&);
+};
template<class Duration>
using file_time = time_point<file_clock, Duration>; // C++20
@@ -319,12 +318,6 @@ template<class Duration>
using local_seconds = local_time<seconds>;
using local_days = local_time<days>;
-// 25.7.9, time_point conversions template<class DestClock, class SourceClock> // C++20
-struct clock_time_conversion;
-
-template<class DestClock, class SourceClock, class Duration>
- auto clock_cast(const time_point<SourceClock, Duration>& t);
-
// 25.8.2, class last_spec // C++20
struct last_spec;
@@ -639,39 +632,12 @@ public:
constexpr precision to_duration() const noexcept;
};
-template <class charT, class traits, class Duration>
- basic_ostream<charT, traits>&
- operator<<(basic_ostream<charT, traits>& os, hh_mm_ss<Duration> const& hms);
-
// 26.10, 12/24 hour functions
constexpr bool is_am(hours const& h) noexcept;
constexpr bool is_pm(hours const& h) noexcept;
constexpr hours make12(const hours& h) noexcept;
constexpr hours make24(const hours& h, bool is_pm) noexcept;
-
-// 25.10.2, time zone database // C++20
-struct tzdb;
-class tzdb_list;
-
-// 25.10.2.3, time zone database access // C++20
-const tzdb& get_tzdb();
-tzdb_list& get_tzdb_list();
-const time_zone* locate_zone(string_view tz_name);
-const time_zone* current_zone();
-
-// 25.10.2.4, remote time zone database support // C++20
-const tzdb& reload_tzdb();
-string remote_version();
-
-// 25.10.3, exception classes // C++20
-class nonexistent_local_time;
-class ambiguous_local_time;
-
-// 25.10.4, information classes // C++20
-struct sys_info;
-struct local_info;
-
// 25.10.5, class time_zone // C++20
enum class choose {earliest, latest};
class time_zone;
@@ -682,101 +648,6 @@ bool operator>(const time_zone& x, const time_zone& y) noexcept;
bool operator<=(const time_zone& x, const time_zone& y) noexcept;
bool operator>=(const time_zone& x, const time_zone& y) noexcept;
-// 25.10.6, class template zoned_traits // C++20
-template<class T> struct zoned_traits;
-
-// 25.10.7, class template zoned_time // C++20
-template<class Duration, class TimeZonePtr = const time_zone*> class zoned_time;
-using zoned_seconds = zoned_time<seconds>;
-
-template<class Duration1, class Duration2, class TimeZonePtr>
- bool operator==(const zoned_time<Duration1, TimeZonePtr>& x,
- const zoned_time<Duration2, TimeZonePtr>& y);
-template<class Duration1, class Duration2, class TimeZonePtr>
- bool operator!=(const zoned_time<Duration1, TimeZonePtr>& x,
- const zoned_time<Duration2, TimeZonePtr>& y);
-
-// 25.10.8, leap second support // C++20
-class leap;
-
-bool operator==(const leap& x, const leap& y);
-bool operator!=(const leap& x, const leap& y);
-bool operator< (const leap& x, const leap& y);
-bool operator> (const leap& x, const leap& y);
-bool operator<=(const leap& x, const leap& y);
-bool operator>=(const leap& x, const leap& y);
-template<class Duration>
- bool operator==(const leap& x, const sys_time<Duration>& y);
-template<class Duration>
- bool operator==(const sys_time<Duration>& x, const leap& y);
-template<class Duration>
- bool operator!=(const leap& x, const sys_time<Duration>& y);
-template<class Duration>
- bool operator!=(const sys_time<Duration>& x, const leap& y);
-template<class Duration>
- bool operator< (const leap& x, const sys_time<Duration>& y);
-template<class Duration>
- bool operator< (const sys_time<Duration>& x, const leap& y);
-template<class Duration>
- bool operator> (const leap& x, const sys_time<Duration>& y);
-template<class Duration>
- bool operator> (const sys_time<Duration>& x, const leap& y);
-template<class Duration>
- bool operator<=(const leap& x, const sys_time<Duration>& y);
-template<class Duration>
- bool operator<=(const sys_time<Duration>& x, const leap& y);
-template<class Duration>
- bool operator>=(const leap& x, const sys_time<Duration>& y);
-template<class Duration>
- bool operator>=(const sys_time<Duration>& x, const leap& y);
-
-// 25.10.9, class link // C++20
-class link;
-bool operator==(const link& x, const link& y);
-bool operator!=(const link& x, const link& y);
-bool operator< (const link& x, const link& y);
-bool operator> (const link& x, const link& y);
-bool operator<=(const link& x, const link& y);
-bool operator>=(const link& x, const link& y);
-
-// 25.11, formatting // C++20
-template<class charT, class Streamable>
- basic_string<charT>
- format(const charT* fmt, const Streamable& s);
-
-template<class charT, class Streamable>
- basic_string<charT>
- format(const locale& loc, const charT* fmt, const Streamable& s);
-
-template<class charT, class traits, class Alloc, class Streamable>
- basic_string<charT, traits, Alloc>
- format(const basic_string<charT, traits, Alloc>& fmt, const Streamable& s);
-
-template<class charT, class traits, class Alloc, class Streamable>
- basic_string<charT, traits, Alloc>
- format(const locale& loc, const basic_string<charT, traits, Alloc>& fmt,
- const Streamable& s);
-
-// 25.12, parsing // C++20
-template<class charT, class traits, class Alloc, class Parsable>
-unspecified
- parse(const basic_string<charT, traits, Alloc>& format, Parsable& tp);
-
-template<class charT, class traits, class Alloc, class Parsable>
-unspecified
- parse(const basic_string<charT, traits, Alloc>& format, Parsable& tp,
- basic_string<charT, traits, Alloc>& abbrev);
-
-template<class charT, class traits, class Alloc, class Parsable>
-unspecified
- parse(const basic_string<charT, traits, Alloc>& format, Parsable& tp,
- minutes& offset);
-
-template<class charT, class traits, class Alloc, class Parsable>
-unspecified
- parse(const basic_string<charT, traits, Alloc>& format, Parsable& tp,
- basic_string<charT, traits, Alloc>& abbrev, minutes& offset);
-
// calendrical constants
inline constexpr last_spec last{}; // C++20
inline constexpr chrono::weekday Sunday{0}; // C++20
@@ -1844,6 +1715,7 @@ class weekday_last;
class weekday {
private:
unsigned char __wd;
+ static constexpr unsigned char __weekday_from_days(int __days) noexcept;
public:
weekday() = default;
inline explicit constexpr weekday(unsigned __val) noexcept : __wd(static_cast<unsigned char>(__val == 7 ? 0 : __val)) {}
@@ -1863,9 +1735,6 @@ public:
inline constexpr bool ok() const noexcept { return __wd <= 6; }
constexpr weekday_indexed operator[](unsigned __index) const noexcept;
constexpr weekday_last operator[](last_spec) const noexcept;
-
- // TODO: Make private?
- static constexpr unsigned char __weekday_from_days(int __days) noexcept;
};
@@ -2956,18 +2825,19 @@ struct _FilesystemClock {
_LIBCPP_AVAILABILITY_FILESYSTEM _LIBCPP_FUNC_VIS static time_point now() noexcept;
- _LIBCPP_INLINE_VISIBILITY
- static time_t to_time_t(const time_point& __t) noexcept {
- typedef chrono::duration<rep> __secs;
- return time_t(
- chrono::duration_cast<__secs>(__t.time_since_epoch()).count());
+#if _LIBCPP_STD_VER > 17
+ template <class _Duration>
+ _LIBCPP_HIDE_FROM_ABI
+ static chrono::sys_time<_Duration> to_sys(const chrono::file_time<_Duration>& __t) {
+ return chrono::sys_time<_Duration>(__t.time_since_epoch());
}
- _LIBCPP_INLINE_VISIBILITY
- static time_point from_time_t(time_t __t) noexcept {
- typedef chrono::duration<rep> __secs;
- return time_point(__secs(__t));
+ template <class _Duration>
+ _LIBCPP_HIDE_FROM_ABI
+ static chrono::file_time<_Duration> from_sys(const chrono::sys_time<_Duration>& __t) {
+ return chrono::file_time<_Duration>(__t.time_since_epoch());
}
+#endif // _LIBCPP_STD_VER > 17
};
_LIBCPP_END_NAMESPACE_FILESYSTEM
#endif // !_LIBCPP_CXX03_LANG
diff --git a/contrib/libs/cxxsupp/libcxx/include/complex b/contrib/libs/cxxsupp/libcxx/include/complex
index e4c59193bc..e6443791f3 100644
--- a/contrib/libs/cxxsupp/libcxx/include/complex
+++ b/contrib/libs/cxxsupp/libcxx/include/complex
@@ -1056,6 +1056,9 @@ complex<_Tp>
exp(const complex<_Tp>& __x)
{
_Tp __i = __x.imag();
+ if (__i == 0) {
+ return complex<_Tp>(exp(__x.real()), copysign(_Tp(0), __x.imag()));
+ }
if (__libcpp_isinf_or_builtin(__x.real()))
{
if (__x.real() < _Tp(0))
@@ -1070,8 +1073,6 @@ exp(const complex<_Tp>& __x)
return complex<_Tp>(__x.real(), __i);
}
}
- else if (__libcpp_isnan_or_builtin(__x.real()) && __x.imag() == 0)
- return __x;
_Tp __e = exp(__x.real());
return complex<_Tp>(__e * cos(__i), __e * sin(__i));
}
@@ -1269,8 +1270,8 @@ tanh(const complex<_Tp>& __x)
if (__libcpp_isinf_or_builtin(__x.real()))
{
if (!__libcpp_isfinite_or_builtin(__x.imag()))
- return complex<_Tp>(_Tp(1), _Tp(0));
- return complex<_Tp>(_Tp(1), copysign(_Tp(0), sin(_Tp(2) * __x.imag())));
+ return complex<_Tp>(copysign(_Tp(1), __x.real()), _Tp(0));
+ return complex<_Tp>(copysign(_Tp(1), __x.real()), copysign(_Tp(0), sin(_Tp(2) * __x.imag())));
}
if (__libcpp_isnan_or_builtin(__x.real()) && __x.imag() == 0)
return __x;
diff --git a/contrib/libs/cxxsupp/libcxx/include/deque b/contrib/libs/cxxsupp/libcxx/include/deque
index 67cd6654f1..dd47fb124d 100644
--- a/contrib/libs/cxxsupp/libcxx/include/deque
+++ b/contrib/libs/cxxsupp/libcxx/include/deque
@@ -129,7 +129,7 @@ public:
template <class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
deque(InputIterator, InputIterator, Allocator = Allocator())
- -> deque<typename iterator_traits<InputIterator>::value_type, Allocator>;
+ -> deque<typename iterator_traits<InputIterator>::value_type, Allocator>; // C++17
template <class T, class Allocator>
bool operator==(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
@@ -162,6 +162,7 @@ template <class T, class Allocator, class Predicate>
#include <__config>
#include <__debug>
+#include <__iterator/iterator_traits.h>
#include <__split_buffer>
#include <__utility/forward.h>
#include <algorithm>
@@ -1260,20 +1261,20 @@ public:
static_assert((is_same<typename allocator_type::value_type, value_type>::value),
"Allocator::value_type must be same type as value_type");
- typedef __deque_base<value_type, allocator_type> __base;
+ typedef __deque_base<value_type, allocator_type> __base;
- typedef typename __base::__alloc_traits __alloc_traits;
- typedef typename __base::reference reference;
- typedef typename __base::const_reference const_reference;
- typedef typename __base::iterator iterator;
- typedef typename __base::const_iterator const_iterator;
- typedef typename __base::size_type size_type;
- typedef typename __base::difference_type difference_type;
+ typedef typename __base::__alloc_traits __alloc_traits;
+ typedef typename __base::reference reference;
+ typedef typename __base::const_reference const_reference;
+ typedef typename __base::iterator iterator;
+ typedef typename __base::const_iterator const_iterator;
+ typedef typename __allocator_traits<allocator_type>::size_type size_type;
+ typedef typename __base::difference_type difference_type;
- typedef typename __base::pointer pointer;
- typedef typename __base::const_pointer const_pointer;
- typedef _VSTD::reverse_iterator<iterator> reverse_iterator;
- typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef typename __base::pointer pointer;
+ typedef typename __base::const_pointer const_pointer;
+ typedef _VSTD::reverse_iterator<iterator> reverse_iterator;
+ typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator;
using typename __base::__deque_range;
using typename __base::__deque_block_range;
@@ -1570,6 +1571,7 @@ public:
#if _LIBCPP_STD_VER >= 17
template<class _InputIterator,
class _Alloc = allocator<__iter_value_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Alloc>::value>
>
deque(_InputIterator, _InputIterator)
@@ -1577,13 +1579,13 @@ deque(_InputIterator, _InputIterator)
template<class _InputIterator,
class _Alloc,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Alloc>::value>
>
deque(_InputIterator, _InputIterator, _Alloc)
-> deque<__iter_value_type<_InputIterator>, _Alloc>;
#endif
-
template <class _Tp, class _Allocator>
deque<_Tp, _Allocator>::deque(size_type __n)
{
diff --git a/contrib/libs/cxxsupp/libcxx/include/experimental/memory_resource b/contrib/libs/cxxsupp/libcxx/include/experimental/memory_resource
index 816d21f513..75e502d78c 100644
--- a/contrib/libs/cxxsupp/libcxx/include/experimental/memory_resource
+++ b/contrib/libs/cxxsupp/libcxx/include/experimental/memory_resource
@@ -183,11 +183,8 @@ public:
// 8.6.3, memory.polymorphic.allocator.mem
_LIBCPP_INLINE_VISIBILITY
_ValueType* allocate(size_t __n) {
- if (__n > __max_size()) {
- __throw_length_error(
- "std::experimental::pmr::polymorphic_allocator<T>::allocate(size_t n)"
- " 'n' exceeds maximum supported size");
- }
+ if (__n > __max_size())
+ __throw_bad_array_new_length();
return static_cast<_ValueType*>(
__res_->allocate(__n * sizeof(_ValueType), _LIBCPP_ALIGNOF(_ValueType))
);
@@ -384,11 +381,8 @@ public:
private:
virtual void * do_allocate(size_t __bytes, size_t)
{
- if (__bytes > __max_size()) {
- __throw_length_error(
- "std::experimental::pmr::resource_adaptor<T>::do_allocate(size_t bytes, size_t align)"
- " 'bytes' exceeds maximum supported size");
- }
+ if (__bytes > __max_size())
+ __throw_bad_array_new_length();
size_t __s = __aligned_allocation_size(__bytes, _MaxAlign) / _MaxAlign;
return __alloc_.allocate(__s);
}
diff --git a/contrib/libs/cxxsupp/libcxx/include/filesystem b/contrib/libs/cxxsupp/libcxx/include/filesystem
index f503343f87..8c75d88c87 100644
--- a/contrib/libs/cxxsupp/libcxx/include/filesystem
+++ b/contrib/libs/cxxsupp/libcxx/include/filesystem
@@ -11,7 +11,7 @@
/*
filesystem synopsis
- namespace std { namespace filesystem {
+ namespace std::filesystem {
class path;
@@ -48,13 +48,13 @@
// enable directory_iterator range-based for statements
directory_iterator begin(directory_iterator iter) noexcept;
- directory_iterator end(const directory_iterator&) noexcept;
+ directory_iterator end(directory_iterator) noexcept;
class recursive_directory_iterator;
// enable recursive_directory_iterator range-based for statements
recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept;
- recursive_directory_iterator end(const recursive_directory_iterator&) noexcept;
+ recursive_directory_iterator end(recursive_directory_iterator) noexcept;
class file_status;
@@ -224,14 +224,25 @@
path weakly_canonical(path const& p);
path weakly_canonical(path const& p, error_code& ec);
+} // namespace std::filesystem
-} } // namespaces std::filesystem
+template <>
+inline constexpr bool std::ranges::enable_borrowed_range<std::filesystem::directory_iterator> = true;
+template <>
+inline constexpr bool std::ranges::enable_borrowed_range<std::filesystem::recursive_directory_iterator> = true;
+
+template <>
+inline constexpr bool std::ranges::enable_view<std::filesystem::directory_iterator> = true;
+template <>
+inline constexpr bool std::ranges::enable_view<std::filesystem::recursive_directory_iterator> = true;
*/
#include <__availability>
#include <__config>
#include <__debug>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/enable_view.h>
#include <__utility/forward.h>
#include <chrono>
#include <compare>
@@ -961,6 +972,7 @@ public:
_PathCVT<_ItVal>::__append_range(__pn_, __first, __last);
}
+/*
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
// TODO Implement locale conversions.
template <class _Source, class = _EnableIfPathable<_Source, void> >
@@ -969,6 +981,7 @@ public:
path(_InputIt __first, _InputIt _last, const locale& __loc,
format = format::auto_format);
#endif
+*/
_LIBCPP_INLINE_VISIBILITY
~path() = default;
@@ -2875,7 +2888,7 @@ begin(directory_iterator __iter) noexcept {
}
inline _LIBCPP_INLINE_VISIBILITY directory_iterator
-end(const directory_iterator&) noexcept {
+end(directory_iterator) noexcept {
return directory_iterator();
}
@@ -3007,7 +3020,7 @@ begin(recursive_directory_iterator __iter) noexcept {
}
inline _LIBCPP_INLINE_VISIBILITY recursive_directory_iterator
-end(const recursive_directory_iterator&) noexcept {
+end(recursive_directory_iterator) noexcept {
return recursive_directory_iterator();
}
@@ -3015,6 +3028,18 @@ _LIBCPP_AVAILABILITY_FILESYSTEM_POP
_LIBCPP_END_NAMESPACE_FILESYSTEM
+#if !defined(_LIBCPP_HAS_NO_RANGES)
+template <>
+inline constexpr bool _VSTD::ranges::enable_borrowed_range<_VSTD_FS::directory_iterator> = true;
+template <>
+inline constexpr bool _VSTD::ranges::enable_borrowed_range<_VSTD_FS::recursive_directory_iterator> = true;
+
+template <>
+inline constexpr bool _VSTD::ranges::enable_view<_VSTD_FS::directory_iterator> = true;
+template <>
+inline constexpr bool _VSTD::ranges::enable_view<_VSTD_FS::recursive_directory_iterator> = true;
+#endif
+
#endif // !_LIBCPP_CXX03_LANG
#ifdef _LIBCPP_COMPILER_MSVC
diff --git a/contrib/libs/cxxsupp/libcxx/include/forward_list b/contrib/libs/cxxsupp/libcxx/include/forward_list
index 3454a784a1..41059a5878 100644
--- a/contrib/libs/cxxsupp/libcxx/include/forward_list
+++ b/contrib/libs/cxxsupp/libcxx/include/forward_list
@@ -647,7 +647,7 @@ public:
typedef const value_type& const_reference;
typedef typename allocator_traits<allocator_type>::pointer pointer;
typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
- typedef typename allocator_traits<allocator_type>::size_type size_type;
+ typedef typename __allocator_traits<allocator_type>::size_type size_type;
typedef typename allocator_traits<allocator_type>::difference_type difference_type;
typedef typename base::iterator iterator;
@@ -873,6 +873,7 @@ private:
#if _LIBCPP_STD_VER >= 17
template<class _InputIterator,
class _Alloc = allocator<__iter_value_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Alloc>::value>
>
forward_list(_InputIterator, _InputIterator)
@@ -880,6 +881,7 @@ forward_list(_InputIterator, _InputIterator)
template<class _InputIterator,
class _Alloc,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Alloc>::value>
>
forward_list(_InputIterator, _InputIterator, _Alloc)
@@ -1585,7 +1587,7 @@ template <class _Compare>
void
forward_list<_Tp, _Alloc>::merge(forward_list& __x, _Compare __comp)
{
- if (this != &__x)
+ if (this != _VSTD::addressof(__x))
{
base::__before_begin()->__next_ = __merge(base::__before_begin()->__next_,
__x.__before_begin()->__next_,
diff --git a/contrib/libs/cxxsupp/libcxx/include/list b/contrib/libs/cxxsupp/libcxx/include/list
index 71406c6743..54bc5902f8 100644
--- a/contrib/libs/cxxsupp/libcxx/include/list
+++ b/contrib/libs/cxxsupp/libcxx/include/list
@@ -470,9 +470,9 @@ public:
_LIBCPP_INLINE_VISIBILITY
__list_const_iterator& operator=(const __list_const_iterator& __p)
{
- if (this != &__p)
+ if (this != _VSTD::addressof(__p))
{
- __get_db()->__iterator_copy(this, &__p);
+ __get_db()->__iterator_copy(this, _VSTD::addressof(__p));
__ptr_ = __p.__ptr_;
}
return *this;
@@ -797,7 +797,7 @@ __list_imp<_Tp, _Alloc>::swap(__list_imp& __c)
#if _LIBCPP_DEBUG_LEVEL == 2
__libcpp_db* __db = __get_db();
__c_node* __cn1 = __db->__find_c_and_lock(this);
- __c_node* __cn2 = __db->__find_c(&__c);
+ __c_node* __cn2 = __db->__find_c(_VSTD::addressof(__c));
_VSTD::swap(__cn1->beg_, __cn2->beg_);
_VSTD::swap(__cn1->end_, __cn2->end_);
_VSTD::swap(__cn1->cap_, __cn2->cap_);
@@ -845,24 +845,24 @@ class _LIBCPP_TEMPLATE_VIS list
typedef typename base::__link_pointer __link_pointer;
public:
- typedef _Tp value_type;
- typedef _Alloc allocator_type;
+ typedef _Tp value_type;
+ typedef _Alloc allocator_type;
static_assert((is_same<value_type, typename allocator_type::value_type>::value),
"Invalid allocator::value_type");
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef typename base::pointer pointer;
- typedef typename base::const_pointer const_pointer;
- typedef typename base::size_type size_type;
- typedef typename base::difference_type difference_type;
- typedef typename base::iterator iterator;
- typedef typename base::const_iterator const_iterator;
- typedef _VSTD::reverse_iterator<iterator> reverse_iterator;
- typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef typename base::pointer pointer;
+ typedef typename base::const_pointer const_pointer;
+ typedef typename __allocator_traits<allocator_type>::size_type size_type;
+ typedef typename base::difference_type difference_type;
+ typedef typename base::iterator iterator;
+ typedef typename base::const_iterator const_iterator;
+ typedef _VSTD::reverse_iterator<iterator> reverse_iterator;
+ typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator;
#if _LIBCPP_STD_VER > 17
- typedef size_type __remove_return_type;
+ typedef size_type __remove_return_type;
#else
- typedef void __remove_return_type;
+ typedef void __remove_return_type;
#endif
_LIBCPP_INLINE_VISIBILITY
@@ -1144,6 +1144,7 @@ private:
#if _LIBCPP_STD_VER >= 17
template<class _InputIterator,
class _Alloc = allocator<__iter_value_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Alloc>::value>
>
list(_InputIterator, _InputIterator)
@@ -1151,6 +1152,7 @@ list(_InputIterator, _InputIterator)
template<class _InputIterator,
class _Alloc,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Alloc>::value>
>
list(_InputIterator, _InputIterator, _Alloc)
@@ -1449,7 +1451,7 @@ typename list<_Tp, _Alloc>::iterator
list<_Tp, _Alloc>::insert(const_iterator __p, const value_type& __x)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__p) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__p)) == this,
"list::insert(iterator, x) called with an iterator not"
" referring to this list");
#endif
@@ -1470,7 +1472,7 @@ typename list<_Tp, _Alloc>::iterator
list<_Tp, _Alloc>::insert(const_iterator __p, size_type __n, const value_type& __x)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__p) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__p)) == this,
"list::insert(iterator, n, x) called with an iterator not"
" referring to this list");
iterator __r(__p.__ptr_, this);
@@ -1695,7 +1697,7 @@ typename list<_Tp, _Alloc>::iterator
list<_Tp, _Alloc>::emplace(const_iterator __p, _Args&&... __args)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__p) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__p)) == this,
"list::emplace(iterator, args...) called with an iterator not"
" referring to this list");
#endif
@@ -1718,7 +1720,7 @@ typename list<_Tp, _Alloc>::iterator
list<_Tp, _Alloc>::insert(const_iterator __p, value_type&& __x)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__p) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__p)) == this,
"list::insert(iterator, x) called with an iterator not"
" referring to this list");
#endif
@@ -1801,7 +1803,7 @@ typename list<_Tp, _Alloc>::iterator
list<_Tp, _Alloc>::erase(const_iterator __p)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__p) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__p)) == this,
"list::erase(iterator) called with an iterator not"
" referring to this list");
#endif
@@ -2004,10 +2006,10 @@ template <class _Tp, class _Alloc>
void
list<_Tp, _Alloc>::splice(const_iterator __p, list& __c)
{
- _LIBCPP_ASSERT(this != &__c,
+ _LIBCPP_ASSERT(this != _VSTD::addressof(__c),
"list::splice(iterator, list) called with this == &list");
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__p) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__p)) == this,
"list::splice(iterator, list) called with an iterator not"
" referring to this list");
#endif
@@ -2020,10 +2022,10 @@ list<_Tp, _Alloc>::splice(const_iterator __p, list& __c)
base::__sz() += __c.__sz();
__c.__sz() = 0;
#if _LIBCPP_DEBUG_LEVEL == 2
- if (&__c != this) {
+ if (_VSTD::addressof(__c) != this) {
__libcpp_db* __db = __get_db();
__c_node* __cn1 = __db->__find_c_and_lock(this);
- __c_node* __cn2 = __db->__find_c(&__c);
+ __c_node* __cn2 = __db->__find_c(_VSTD::addressof(__c));
for (__i_node** __ip = __cn2->end_; __ip != __cn2->beg_;)
{
--__ip;
@@ -2047,13 +2049,13 @@ void
list<_Tp, _Alloc>::splice(const_iterator __p, list& __c, const_iterator __i)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__p) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__p)) == this,
"list::splice(iterator, list, iterator) called with the first iterator"
" not referring to this list");
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__i) == &__c,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__i)) == _VSTD::addressof(__c),
"list::splice(iterator, list, iterator) called with the second iterator"
" not referring to the list argument");
- _LIBCPP_ASSERT(__get_const_db()->__dereferenceable(&__i),
+ _LIBCPP_ASSERT(__get_const_db()->__dereferenceable(_VSTD::addressof(__i)),
"list::splice(iterator, list, iterator) called with the second iterator"
" not dereferenceable");
#endif
@@ -2065,10 +2067,10 @@ list<_Tp, _Alloc>::splice(const_iterator __p, list& __c, const_iterator __i)
--__c.__sz();
++base::__sz();
#if _LIBCPP_DEBUG_LEVEL == 2
- if (&__c != this) {
+ if (_VSTD::addressof(__c) != this) {
__libcpp_db* __db = __get_db();
__c_node* __cn1 = __db->__find_c_and_lock(this);
- __c_node* __cn2 = __db->__find_c(&__c);
+ __c_node* __cn2 = __db->__find_c(_VSTD::addressof(__c));
for (__i_node** __ip = __cn2->end_; __ip != __cn2->beg_;)
{
--__ip;
@@ -2092,16 +2094,16 @@ void
list<_Tp, _Alloc>::splice(const_iterator __p, list& __c, const_iterator __f, const_iterator __l)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__p) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__p)) == this,
"list::splice(iterator, list, iterator, iterator) called with first iterator not"
" referring to this list");
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__f) == &__c,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__f)) == _VSTD::addressof(__c),
"list::splice(iterator, list, iterator, iterator) called with second iterator not"
" referring to the list argument");
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__l) == &__c,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__l)) == _VSTD::addressof(__c),
"list::splice(iterator, list, iterator, iterator) called with third iterator not"
" referring to the list argument");
- if (this == &__c)
+ if (this == _VSTD::addressof(__c))
{
for (const_iterator __i = __f; __i != __l; ++__i)
_LIBCPP_ASSERT(__i != __p,
@@ -2115,7 +2117,7 @@ list<_Tp, _Alloc>::splice(const_iterator __p, list& __c, const_iterator __f, con
__link_pointer __first = __f.__ptr_;
--__l;
__link_pointer __last = __l.__ptr_;
- if (this != &__c)
+ if (this != _VSTD::addressof(__c))
{
size_type __s = _VSTD::distance(__f, __l) + 1;
__c.__sz() -= __s;
@@ -2124,10 +2126,10 @@ list<_Tp, _Alloc>::splice(const_iterator __p, list& __c, const_iterator __f, con
base::__unlink_nodes(__first, __last);
__link_nodes(__p.__ptr_, __first, __last);
#if _LIBCPP_DEBUG_LEVEL == 2
- if (&__c != this) {
+ if (_VSTD::addressof(__c) != this) {
__libcpp_db* __db = __get_db();
__c_node* __cn1 = __db->__find_c_and_lock(this);
- __c_node* __cn2 = __db->__find_c(&__c);
+ __c_node* __cn2 = __db->__find_c(_VSTD::addressof(__c));
for (__i_node** __ip = __cn2->end_; __ip != __cn2->beg_;)
{
--__ip;
@@ -2263,7 +2265,7 @@ list<_Tp, _Alloc>::merge(list& __c, _Comp __comp)
#if _LIBCPP_DEBUG_LEVEL == 2
__libcpp_db* __db = __get_db();
__c_node* __cn1 = __db->__find_c_and_lock(this);
- __c_node* __cn2 = __db->__find_c(&__c);
+ __c_node* __cn2 = __db->__find_c(_VSTD::addressof(__c));
for (__i_node** __p = __cn2->end_; __p != __cn2->beg_;)
{
--__p;
diff --git a/contrib/libs/cxxsupp/libcxx/include/locale b/contrib/libs/cxxsupp/libcxx/include/locale
index 242790a9d4..549b0af25b 100644
--- a/contrib/libs/cxxsupp/libcxx/include/locale
+++ b/contrib/libs/cxxsupp/libcxx/include/locale
@@ -1360,6 +1360,18 @@ protected:
long double __v) const;
virtual iter_type do_put(iter_type __s, ios_base& __iob, char_type __fl,
const void* __v) const;
+
+ template <class _Integral>
+ _LIBCPP_HIDE_FROM_ABI inline
+ _OutputIterator __do_put_integral(iter_type __s, ios_base& __iob,
+ char_type __fl, _Integral __v,
+ char const* __len) const;
+
+ template <class _Float>
+ _LIBCPP_HIDE_FROM_ABI inline
+ _OutputIterator __do_put_floating_point(iter_type __s, ios_base& __iob,
+ char_type __fl, _Float __v,
+ char const* __len) const;
};
template <class _CharT, class _OutputIterator>
@@ -1456,22 +1468,32 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
}
template <class _CharT, class _OutputIterator>
+template <class _Integral>
+_LIBCPP_HIDE_FROM_ABI inline
_OutputIterator
-num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
- char_type __fl, long __v) const
+num_put<_CharT, _OutputIterator>::__do_put_integral(iter_type __s, ios_base& __iob,
+ char_type __fl, _Integral __v,
+ char const* __len) const
{
// Stage 1 - Get number in narrow char
- char __fmt[6] = {'%', 0};
- const char* __len = "l";
- this->__format_int(__fmt+1, __len, true, __iob.flags());
+ char __fmt[8] = {'%', 0};
+ this->__format_int(__fmt+1, __len, is_signed<_Integral>::value, __iob.flags());
// Worst case is octal, with showbase enabled. Note that octal is always
// printed as an unsigned value.
+ using _Unsigned = typename make_unsigned<_Integral>::type;
_LIBCPP_CONSTEXPR const unsigned __nbuf
- = (numeric_limits<unsigned long>::digits / 3) // 1 char per 3 bits
- + ((numeric_limits<unsigned long>::digits % 3) != 0) // round up
+ = (numeric_limits<_Unsigned>::digits / 3) // 1 char per 3 bits
+ + ((numeric_limits<_Unsigned>::digits % 3) != 0) // round up
+ 2; // base prefix + terminating null character // terminating null character
char __nar[__nbuf];
+#ifdef _LIBCPP_COMPILER_CLANG_BASED
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wformat-nonliteral"
+#endif
int __nc = __libcpp_snprintf_l(__nar, sizeof(__nar), _LIBCPP_GET_C_LOCALE, __fmt, __v);
+#ifdef _LIBCPP_COMPILER_CLANG_BASED
+#pragma clang diagnostic pop
+#endif
char* __ne = __nar + __nc;
char* __np = this->__identify_padding(__nar, __ne, __iob);
// Stage 2 - Widen __nar while adding thousands separators
@@ -1487,30 +1509,17 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
template <class _CharT, class _OutputIterator>
_OutputIterator
num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
+ char_type __fl, long __v) const
+{
+ return this->__do_put_integral(__s, __iob, __fl, __v, "l");
+}
+
+template <class _CharT, class _OutputIterator>
+_OutputIterator
+num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
char_type __fl, long long __v) const
{
- // Stage 1 - Get number in narrow char
- char __fmt[8] = {'%', 0};
- const char* __len = "ll";
- this->__format_int(__fmt+1, __len, true, __iob.flags());
- // Worst case is octal, with showbase enabled. Note that octal is always
- // printed as an unsigned value.
- _LIBCPP_CONSTEXPR const unsigned __nbuf
- = (numeric_limits<unsigned long long>::digits / 3) // 1 char per 3 bits
- + ((numeric_limits<unsigned long long>::digits % 3) != 0) // round up
- + 2; // base prefix + terminating null character // terminating null character
- char __nar[__nbuf];
- int __nc = __libcpp_snprintf_l(__nar, sizeof(__nar), _LIBCPP_GET_C_LOCALE, __fmt, __v);
- char* __ne = __nar + __nc;
- char* __np = this->__identify_padding(__nar, __ne, __iob);
- // Stage 2 - Widen __nar while adding thousands separators
- char_type __o[2*(__nbuf-1) - 1];
- char_type* __op; // pad here
- char_type* __oe; // end of output
- this->__widen_and_group_int(__nar, __np, __ne, __o, __op, __oe, __iob.getloc());
- // [__o, __oe) contains thousands_sep'd wide number
- // Stage 3 & 4
- return __pad_and_output(__s, __o, __op, __oe, __iob, __fl);
+ return this->__do_put_integral(__s, __iob, __fl, __v, "ll");
}
template <class _CharT, class _OutputIterator>
@@ -1518,27 +1527,7 @@ _OutputIterator
num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
char_type __fl, unsigned long __v) const
{
- // Stage 1 - Get number in narrow char
- char __fmt[6] = {'%', 0};
- const char* __len = "l";
- this->__format_int(__fmt+1, __len, false, __iob.flags());
- // Worst case is octal, with showbase enabled.
- _LIBCPP_CONSTEXPR const unsigned __nbuf
- = (numeric_limits<unsigned long>::digits / 3) // 1 char per 3 bits
- + ((numeric_limits<unsigned long>::digits % 3) != 0) // round up
- + 2; // base prefix + terminating null character
- char __nar[__nbuf];
- int __nc = __libcpp_snprintf_l(__nar, sizeof(__nar), _LIBCPP_GET_C_LOCALE, __fmt, __v);
- char* __ne = __nar + __nc;
- char* __np = this->__identify_padding(__nar, __ne, __iob);
- // Stage 2 - Widen __nar while adding thousands separators
- char_type __o[2*(__nbuf-1) - 1];
- char_type* __op; // pad here
- char_type* __oe; // end of output
- this->__widen_and_group_int(__nar, __np, __ne, __o, __op, __oe, __iob.getloc());
- // [__o, __oe) contains thousands_sep'd wide number
- // Stage 3 & 4
- return __pad_and_output(__s, __o, __op, __oe, __iob, __fl);
+ return this->__do_put_integral(__s, __iob, __fl, __v, "l");
}
template <class _CharT, class _OutputIterator>
@@ -1546,42 +1535,28 @@ _OutputIterator
num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
char_type __fl, unsigned long long __v) const
{
- // Stage 1 - Get number in narrow char
- char __fmt[8] = {'%', 0};
- const char* __len = "ll";
- this->__format_int(__fmt+1, __len, false, __iob.flags());
- // Worst case is octal, with showbase enabled.
- _LIBCPP_CONSTEXPR const unsigned __nbuf
- = (numeric_limits<unsigned long long>::digits / 3) // 1 char per 3 bits
- + ((numeric_limits<unsigned long long>::digits % 3) != 0) // round up
- + 2; // base prefix + terminating null character
- char __nar[__nbuf];
- int __nc = __libcpp_snprintf_l(__nar, sizeof(__nar), _LIBCPP_GET_C_LOCALE, __fmt, __v);
- char* __ne = __nar + __nc;
- char* __np = this->__identify_padding(__nar, __ne, __iob);
- // Stage 2 - Widen __nar while adding thousands separators
- char_type __o[2*(__nbuf-1) - 1];
- char_type* __op; // pad here
- char_type* __oe; // end of output
- this->__widen_and_group_int(__nar, __np, __ne, __o, __op, __oe, __iob.getloc());
- // [__o, __oe) contains thousands_sep'd wide number
- // Stage 3 & 4
- return __pad_and_output(__s, __o, __op, __oe, __iob, __fl);
+ return this->__do_put_integral(__s, __iob, __fl, __v, "ll");
}
template <class _CharT, class _OutputIterator>
+template <class _Float>
+_LIBCPP_HIDE_FROM_ABI inline
_OutputIterator
-num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
- char_type __fl, double __v) const
+num_put<_CharT, _OutputIterator>::__do_put_floating_point(iter_type __s, ios_base& __iob,
+ char_type __fl, _Float __v,
+ char const* __len) const
{
// Stage 1 - Get number in narrow char
char __fmt[8] = {'%', 0};
- const char* __len = "";
bool __specify_precision = this->__format_float(__fmt+1, __len, __iob.flags());
const unsigned __nbuf = 30;
char __nar[__nbuf];
char* __nb = __nar;
int __nc;
+#ifdef _LIBCPP_COMPILER_CLANG_BASED
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wformat-nonliteral"
+#endif
if (__specify_precision)
__nc = __libcpp_snprintf_l(__nb, __nbuf, _LIBCPP_GET_C_LOCALE, __fmt,
(int)__iob.precision(), __v);
@@ -1598,6 +1573,9 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
__throw_bad_alloc();
__nbh.reset(__nb);
}
+#ifdef _LIBCPP_COMPILER_CLANG_BASED
+#pragma clang diagnostic pop
+#endif
char* __ne = __nb + __nc;
char* __np = this->__identify_padding(__nb, __ne, __iob);
// Stage 2 - Widen __nar while adding thousands separators
@@ -1623,52 +1601,17 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
template <class _CharT, class _OutputIterator>
_OutputIterator
num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
+ char_type __fl, double __v) const
+{
+ return this->__do_put_floating_point(__s, __iob, __fl, __v, "");
+}
+
+template <class _CharT, class _OutputIterator>
+_OutputIterator
+num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
char_type __fl, long double __v) const
{
- // Stage 1 - Get number in narrow char
- char __fmt[8] = {'%', 0};
- const char* __len = "L";
- bool __specify_precision = this->__format_float(__fmt+1, __len, __iob.flags());
- const unsigned __nbuf = 30;
- char __nar[__nbuf];
- char* __nb = __nar;
- int __nc;
- if (__specify_precision)
- __nc = __libcpp_snprintf_l(__nb, __nbuf, _LIBCPP_GET_C_LOCALE, __fmt,
- (int)__iob.precision(), __v);
- else
- __nc = __libcpp_snprintf_l(__nb, __nbuf, _LIBCPP_GET_C_LOCALE, __fmt, __v);
- unique_ptr<char, void(*)(void*)> __nbh(nullptr, free);
- if (__nc > static_cast<int>(__nbuf-1))
- {
- if (__specify_precision)
- __nc = __libcpp_asprintf_l(&__nb, _LIBCPP_GET_C_LOCALE, __fmt, (int)__iob.precision(), __v);
- else
- __nc = __libcpp_asprintf_l(&__nb, _LIBCPP_GET_C_LOCALE, __fmt, __v);
- if (__nc == -1)
- __throw_bad_alloc();
- __nbh.reset(__nb);
- }
- char* __ne = __nb + __nc;
- char* __np = this->__identify_padding(__nb, __ne, __iob);
- // Stage 2 - Widen __nar while adding thousands separators
- char_type __o[2*(__nbuf-1) - 1];
- char_type* __ob = __o;
- unique_ptr<char_type, void(*)(void*)> __obh(0, free);
- if (__nb != __nar)
- {
- __ob = (char_type*)malloc(2*static_cast<size_t>(__nc)*sizeof(char_type));
- if (__ob == 0)
- __throw_bad_alloc();
- __obh.reset(__ob);
- }
- char_type* __op; // pad here
- char_type* __oe; // end of output
- this->__widen_and_group_float(__nb, __np, __ne, __ob, __op, __oe, __iob.getloc());
- // [__o, __oe) contains thousands_sep'd wide number
- // Stage 3 & 4
- __s = __pad_and_output(__s, __ob, __op, __oe, __iob, __fl);
- return __s;
+ return this->__do_put_floating_point(__s, __iob, __fl, __v, "L");
}
template <class _CharT, class _OutputIterator>
@@ -1677,10 +1620,9 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob,
char_type __fl, const void* __v) const
{
// Stage 1 - Get pointer in narrow char
- char __fmt[6] = "%p";
const unsigned __nbuf = 20;
char __nar[__nbuf];
- int __nc = __libcpp_snprintf_l(__nar, sizeof(__nar), _LIBCPP_GET_C_LOCALE, __fmt, __v);
+ int __nc = __libcpp_snprintf_l(__nar, sizeof(__nar), _LIBCPP_GET_C_LOCALE, "%p", __v);
char* __ne = __nar + __nc;
char* __np = this->__identify_padding(__nar, __ne, __iob);
// Stage 2 - Widen __nar
@@ -2978,51 +2920,31 @@ money_get<_CharT, _InputIterator>::__do_get(iter_type& __b, iter_type __e,
}
break;
case money_base::sign:
- if (__psn.size() + __nsn.size() > 0)
+ if (__psn.size() > 0 && *__b == __psn[0])
{
- if (__psn.size() == 0 || __nsn.size() == 0)
- { // sign is optional
- if (__psn.size() > 0)
- { // __nsn.size() == 0
- if (*__b == __psn[0])
- {
- ++__b;
- if (__psn.size() > 1)
- __trailing_sign = &__psn;
- }
- else
- __neg = true;
- }
- else if (*__b == __nsn[0]) // __nsn.size() > 0 && __psn.size() == 0
- {
- ++__b;
- __neg = true;
- if (__nsn.size() > 1)
- __trailing_sign = &__nsn;
- }
- }
- else // sign is required
- {
- if (*__b == __psn[0])
- {
- ++__b;
- if (__psn.size() > 1)
- __trailing_sign = &__psn;
- }
- else if (*__b == __nsn[0])
- {
- ++__b;
- __neg = true;
- if (__nsn.size() > 1)
- __trailing_sign = &__nsn;
- }
- else
- {
- __err |= ios_base::failbit;
- return false;
- }
- }
+ ++__b;
+ __neg = false;
+ if (__psn.size() > 1)
+ __trailing_sign = &__psn;
+ break;
+ }
+ if (__nsn.size() > 0 && *__b == __nsn[0])
+ {
+ ++__b;
+ __neg = true;
+ if (__nsn.size() > 1)
+ __trailing_sign = &__nsn;
+ break;
}
+ if (__psn.size() > 0 && __nsn.size() > 0)
+ { // sign is required
+ __err |= ios_base::failbit;
+ return false;
+ }
+ if (__psn.size() == 0 && __nsn.size() == 0)
+ // locale has no way of specifying a sign. Use the initial value of __neg as a default
+ break;
+ __neg = (__nsn.size() == 0);
break;
case money_base::symbol:
{
diff --git a/contrib/libs/cxxsupp/libcxx/include/map b/contrib/libs/cxxsupp/libcxx/include/map
index c78a7ee31a..7f060d0a89 100644
--- a/contrib/libs/cxxsupp/libcxx/include/map
+++ b/contrib/libs/cxxsupp/libcxx/include/map
@@ -223,6 +223,25 @@ public:
pair<const_iterator,const_iterator> equal_range(const K& x) const; // C++14
};
+template <class InputIterator,
+ class Compare = less<iter_key_t<InputIterator>>,
+ class Allocator = allocator<iter_to_alloc_t<InputIterator>>>
+map(InputIterator, InputIterator, Compare = Compare(), Allocator = Allocator())
+ -> map<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Compare, Allocator>; // C++17
+
+template<class Key, class T, class Compare = less<Key>,
+ class Allocator = allocator<pair<const Key, T>>>
+map(initializer_list<pair<const Key, T>>, Compare = Compare(), Allocator = Allocator())
+ -> map<Key, T, Compare, Allocator>; // C++17
+
+template <class InputIterator, class Allocator>
+map(InputIterator, InputIterator, Allocator)
+ -> map<iter_key_t<InputIterator>, iter_val_t<InputIterator>, less<iter_key_t<InputIterator>>,
+ Allocator>; // C++17
+
+template<class Key, class T, class Allocator>
+map(initializer_list<pair<const Key, T>>, Allocator) -> map<Key, T, less<Key>, Allocator>; // C++17
+
template <class Key, class T, class Compare, class Allocator>
bool
operator==(const map<Key, T, Compare, Allocator>& x,
@@ -444,6 +463,26 @@ public:
pair<const_iterator,const_iterator> equal_range(const K& x) const; // C++14
};
+template <class InputIterator,
+ class Compare = less<iter_key_t<InputIterator>>,
+ class Allocator = allocator<iter_to_alloc_t<InputIterator>>>
+multimap(InputIterator, InputIterator, Compare = Compare(), Allocator = Allocator())
+ -> multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Compare, Allocator>; // C++17
+
+template<class Key, class T, class Compare = less<Key>,
+ class Allocator = allocator<pair<const Key, T>>>
+multimap(initializer_list<pair<const Key, T>>, Compare = Compare(), Allocator = Allocator())
+ -> multimap<Key, T, Compare, Allocator>; // C++17
+
+template <class InputIterator, class Allocator>
+multimap(InputIterator, InputIterator, Allocator)
+ -> multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
+ less<iter_key_t<InputIterator>>, Allocator>; // C++17
+
+template<class Key, class T, class Allocator>
+multimap(initializer_list<pair<const Key, T>>, Allocator)
+ -> multimap<Key, T, less<Key>, Allocator>; // C++17
+
template <class Key, class T, class Compare, class Allocator>
bool
operator==(const multimap<Key, T, Compare, Allocator>& x,
@@ -492,6 +531,7 @@ erase_if(multimap<Key, T, Compare, Allocator>& c, Predicate pred); // C++20
#include <__config>
#include <__debug>
#include <__functional/is_transparent.h>
+#include <__iterator/iterator_traits.h>
#include <__node_handle>
#include <__tree>
#include <__utility/forward.h>
@@ -1501,6 +1541,7 @@ private:
#if _LIBCPP_STD_VER >= 17
template<class _InputIterator, class _Compare = less<__iter_key_type<_InputIterator>>,
class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>,
class = enable_if_t<!__is_allocator<_Compare>::value, void>,
class = enable_if_t<__is_allocator<_Allocator>::value, void>>
map(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
@@ -1514,6 +1555,7 @@ map(initializer_list<pair<_Key, _Tp>>, _Compare = _Compare(), _Allocator = _Allo
-> map<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
template<class _InputIterator, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>,
class = enable_if_t<__is_allocator<_Allocator>::value, void>>
map(_InputIterator, _InputIterator, _Allocator)
-> map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>,
@@ -2174,6 +2216,7 @@ private:
#if _LIBCPP_STD_VER >= 17
template<class _InputIterator, class _Compare = less<__iter_key_type<_InputIterator>>,
class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>,
class = enable_if_t<!__is_allocator<_Compare>::value, void>,
class = enable_if_t<__is_allocator<_Allocator>::value, void>>
multimap(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
@@ -2187,6 +2230,7 @@ multimap(initializer_list<pair<_Key, _Tp>>, _Compare = _Compare(), _Allocator =
-> multimap<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
template<class _InputIterator, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>,
class = enable_if_t<__is_allocator<_Allocator>::value, void>>
multimap(_InputIterator, _InputIterator, _Allocator)
-> multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>,
diff --git a/contrib/libs/cxxsupp/libcxx/include/memory b/contrib/libs/cxxsupp/libcxx/include/memory
index 1975092ba0..7f6665e846 100644
--- a/contrib/libs/cxxsupp/libcxx/include/memory
+++ b/contrib/libs/cxxsupp/libcxx/include/memory
@@ -405,7 +405,8 @@ template<class T>
class shared_ptr
{
public:
- typedef T element_type;
+ typedef T element_type; // until C++17
+ typedef remove_extent_t<T> element_type; // since C++17
typedef weak_ptr<T> weak_type; // C++17
// constructors:
@@ -525,7 +526,8 @@ template<class T>
class weak_ptr
{
public:
- typedef T element_type;
+ typedef T element_type; // until C++17
+ typedef remove_extent_t<T> element_type; // since C++17
// constructors
constexpr weak_ptr() noexcept;
@@ -653,14 +655,6 @@ template <class T> struct hash<shared_ptr<T> >;
template <class T, class Alloc>
inline constexpr bool uses_allocator_v = uses_allocator<T, Alloc>::value;
-// Pointer safety
-enum class pointer_safety { relaxed, preferred, strict }; // since C++11
-void declare_reachable(void *p); // since C++11
-template <class T> T *undeclare_reachable(T *p); // since C++11
-void declare_no_pointers(char *p, size_t n); // since C++11
-void undeclare_no_pointers(char *p, size_t n); // since C++11
-pointer_safety get_pointer_safety() noexcept; // since C++11
-
void* align(size_t alignment, size_t size, void*& ptr, size_t& space);
} // std
@@ -676,7 +670,6 @@ void* align(size_t alignment, size_t size, void*& ptr, size_t& space);
#include <__memory/allocator_traits.h>
#include <__memory/compressed_pair.h>
#include <__memory/construct_at.h>
-#include <__memory/pointer_safety.h>
#include <__memory/pointer_traits.h>
#include <__memory/raw_storage_iterator.h>
#include <__memory/shared_ptr.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/module.modulemap b/contrib/libs/cxxsupp/libcxx/include/module.modulemap
index 80cdfe323f..2f96f9aa96 100644
--- a/contrib/libs/cxxsupp/libcxx/include/module.modulemap
+++ b/contrib/libs/cxxsupp/libcxx/include/module.modulemap
@@ -620,7 +620,6 @@ module std [system] {
module auto_ptr { private header "__memory/auto_ptr.h" }
module compressed_pair { private header "__memory/compressed_pair.h" }
module construct_at { private header "__memory/construct_at.h" }
- module pointer_safety { private header "__memory/pointer_safety.h" }
module pointer_traits { private header "__memory/pointer_traits.h" }
module raw_storage_iterator { private header "__memory/raw_storage_iterator.h" }
module shared_ptr { private header "__memory/shared_ptr.h" }
diff --git a/contrib/libs/cxxsupp/libcxx/include/mutex b/contrib/libs/cxxsupp/libcxx/include/mutex
index e815dda502..c96d7b14a8 100644
--- a/contrib/libs/cxxsupp/libcxx/include/mutex
+++ b/contrib/libs/cxxsupp/libcxx/include/mutex
@@ -112,7 +112,7 @@ template <class... MutexTypes>
class scoped_lock // C++17
{
public:
- using mutex_type = Mutex; // If MutexTypes... consists of the single type Mutex
+ using mutex_type = Mutex; // Only if sizeof...(MutexTypes) == 1
explicit scoped_lock(MutexTypes&... m);
scoped_lock(adopt_lock_t, MutexTypes&... m);
diff --git a/contrib/libs/cxxsupp/libcxx/include/new b/contrib/libs/cxxsupp/libcxx/include/new
index 2d1417a975..711b3ccd22 100644
--- a/contrib/libs/cxxsupp/libcxx/include/new
+++ b/contrib/libs/cxxsupp/libcxx/include/new
@@ -149,6 +149,16 @@ _LIBCPP_FUNC_VIS new_handler get_new_handler() _NOEXCEPT;
_LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_bad_alloc(); // not in C++ spec
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
+void __throw_bad_array_new_length()
+{
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ throw bad_array_new_length();
+#else
+ _VSTD::abort();
+#endif
+}
+
#if !defined(_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION) && \
!defined(_LIBCPP_ABI_VCRUNTIME)
#ifndef _LIBCPP_CXX03_LANG
diff --git a/contrib/libs/cxxsupp/libcxx/include/ostream b/contrib/libs/cxxsupp/libcxx/include/ostream
index e0aa18fa48..1b3dd54799 100644
--- a/contrib/libs/cxxsupp/libcxx/include/ostream
+++ b/contrib/libs/cxxsupp/libcxx/include/ostream
@@ -55,6 +55,7 @@ public:
basic_ostream& operator<<(double f);
basic_ostream& operator<<(long double f);
basic_ostream& operator<<(const void* p);
+ basic_ostream& operator<<(const volatile void* val); // C++23
basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb);
basic_ostream& operator<<(nullptr_t);
@@ -210,6 +211,14 @@ public:
basic_ostream& operator<<(double __f);
basic_ostream& operator<<(long double __f);
basic_ostream& operator<<(const void* __p);
+
+#if _LIBCPP_STD_VER > 20
+ _LIBCPP_HIDE_FROM_ABI
+ basic_ostream& operator<<(const volatile void* __p) {
+ return operator<<(const_cast<const void*>(__p));
+ }
+#endif
+
basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb);
_LIBCPP_INLINE_VISIBILITY
diff --git a/contrib/libs/cxxsupp/libcxx/include/queue b/contrib/libs/cxxsupp/libcxx/include/queue
index cbd07140a7..2c5fa3237f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/queue
+++ b/contrib/libs/cxxsupp/libcxx/include/queue
@@ -185,16 +185,16 @@ template<class InputIterator, class Allocator>
priority_queue(InputIterator, InputIterator, Allocator)
-> priority_queue<iter-value-type<InputIterator>,
vector<iter-value-type<InputIterator>, Allocator>,
- less<iter-value-type<InputIterator>>>;
+ less<iter-value-type<InputIterator>>>; // C++17
template<class InputIterator, class Compare, class Allocator>
priority_queue(InputIterator, InputIterator, Compare, Allocator)
-> priority_queue<iter-value-type<InputIterator>,
- vector<iter-value-type<InputIterator>, Allocator>, Compare>;
+ vector<iter-value-type<InputIterator>, Allocator>, Compare>; // C++17
template<class InputIterator, class Compare, class Container, class Allocator>
priority_queue(InputIterator, InputIterator, Compare, Container, Allocator)
- -> priority_queue<typename Container::value_type, Container, Compare>;
+ -> priority_queue<typename Container::value_type, Container, Compare>; // C++17
template <class T, class Container, class Compare>
void swap(priority_queue<T, Container, Compare>& x,
diff --git a/contrib/libs/cxxsupp/libcxx/include/scoped_allocator b/contrib/libs/cxxsupp/libcxx/include/scoped_allocator
index dc24d30b51..5c2aeb7cf7 100644
--- a/contrib/libs/cxxsupp/libcxx/include/scoped_allocator
+++ b/contrib/libs/cxxsupp/libcxx/include/scoped_allocator
@@ -91,6 +91,10 @@ public:
scoped_allocator_adaptor select_on_container_copy_construction() const noexcept;
};
+template<class OuterAlloc, class... InnerAllocs>
+ scoped_allocator_adaptor(OuterAlloc, InnerAllocs...)
+ -> scoped_allocator_adaptor<OuterAlloc, InnerAllocs...>;
+
template <class OuterA1, class OuterA2, class... InnerAllocs>
bool
operator==(const scoped_allocator_adaptor<OuterA1, InnerAllocs...>& a,
@@ -649,6 +653,12 @@ private:
template <class...> friend class __scoped_allocator_storage;
};
+#if _LIBCPP_STD_VER > 14
+template<class _OuterAlloc, class... _InnerAllocs>
+ scoped_allocator_adaptor(_OuterAlloc, _InnerAllocs...)
+ -> scoped_allocator_adaptor<_OuterAlloc, _InnerAllocs...>;
+#endif
+
template <class _OuterA1, class _OuterA2>
inline _LIBCPP_INLINE_VISIBILITY
bool
diff --git a/contrib/libs/cxxsupp/libcxx/include/semaphore b/contrib/libs/cxxsupp/libcxx/include/semaphore
index 4f9ecd0461..db03fb967e 100644
--- a/contrib/libs/cxxsupp/libcxx/include/semaphore
+++ b/contrib/libs/cxxsupp/libcxx/include/semaphore
@@ -67,10 +67,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
/*
-__atomic_semaphore_base is the general-case implementation, to be used for
-user-requested least-max values that exceed the OS implementation support
-(incl. when the OS has no support of its own) and for binary semaphores.
-
+__atomic_semaphore_base is the general-case implementation.
It is a typical Dijkstra semaphore algorithm over atomics, wait and notify
functions. It avoids contention against users' own use of those facilities.
@@ -108,81 +105,30 @@ public:
_LIBCPP_AVAILABILITY_SYNC _LIBCPP_INLINE_VISIBILITY
bool try_acquire_for(chrono::duration<Rep, Period> const& __rel_time)
{
- auto const __test_fn = [this]() -> bool {
- auto __old = __a.load(memory_order_acquire);
- while(1) {
- if (__old == 0)
- return false;
- if(__a.compare_exchange_strong(__old, __old - 1, memory_order_acquire, memory_order_relaxed))
- return true;
- }
- };
+ if (__rel_time == chrono::duration<Rep, Period>::zero())
+ return try_acquire();
+ auto const __test_fn = [this]() { return try_acquire(); };
return __libcpp_thread_poll_with_backoff(__test_fn, __libcpp_timed_backoff_policy(), __rel_time);
}
-};
-
-#ifndef _LIBCPP_NO_NATIVE_SEMAPHORES
-
-/*
-
-__platform_semaphore_base a simple wrapper for the OS semaphore type. That
-is, every call is routed to the OS in the most direct manner possible.
-
-*/
-
-class __platform_semaphore_base
-{
- __libcpp_semaphore_t __semaphore;
-
-public:
- _LIBCPP_INLINE_VISIBILITY
- explicit __platform_semaphore_base(ptrdiff_t __count) :
- __semaphore()
- {
- __libcpp_semaphore_init(&__semaphore, __count);
- }
- _LIBCPP_INLINE_VISIBILITY
- ~__platform_semaphore_base() {
- __libcpp_semaphore_destroy(&__semaphore);
- }
- _LIBCPP_INLINE_VISIBILITY
- void release(ptrdiff_t __update)
- {
- for(; __update; --__update)
- __libcpp_semaphore_post(&__semaphore);
- }
- _LIBCPP_INLINE_VISIBILITY
- void acquire()
- {
- __libcpp_semaphore_wait(&__semaphore);
- }
- _LIBCPP_INLINE_VISIBILITY
- bool try_acquire_for(chrono::nanoseconds __rel_time)
+ _LIBCPP_AVAILABILITY_SYNC _LIBCPP_INLINE_VISIBILITY
+ bool try_acquire()
{
- return __libcpp_semaphore_wait_timed(&__semaphore, __rel_time);
+ auto __old = __a.load(memory_order_acquire);
+ while (true) {
+ if (__old == 0)
+ return false;
+ if (__a.compare_exchange_strong(__old, __old - 1, memory_order_acquire, memory_order_relaxed))
+ return true;
+ }
}
};
-template<ptrdiff_t __least_max_value>
-using __semaphore_base =
- typename conditional<(__least_max_value > 1 && __least_max_value <= _LIBCPP_SEMAPHORE_MAX),
- __platform_semaphore_base,
- __atomic_semaphore_base>::type;
-
-#else
-
-template<ptrdiff_t __least_max_value>
-using __semaphore_base =
- __atomic_semaphore_base;
-
#define _LIBCPP_SEMAPHORE_MAX (numeric_limits<ptrdiff_t>::max())
-#endif //_LIBCPP_NO_NATIVE_SEMAPHORES
-
template<ptrdiff_t __least_max_value = _LIBCPP_SEMAPHORE_MAX>
class counting_semaphore
{
- __semaphore_base<__least_max_value> __semaphore;
+ __atomic_semaphore_base __semaphore;
public:
static constexpr ptrdiff_t max() noexcept {
@@ -215,14 +161,14 @@ public:
_LIBCPP_AVAILABILITY_SYNC _LIBCPP_INLINE_VISIBILITY
bool try_acquire()
{
- return try_acquire_for(chrono::nanoseconds::zero());
+ return __semaphore.try_acquire();
}
template <class Clock, class Duration>
_LIBCPP_AVAILABILITY_SYNC _LIBCPP_INLINE_VISIBILITY
bool try_acquire_until(chrono::time_point<Clock, Duration> const& __abs_time)
{
auto const current = Clock::now();
- if(current >= __abs_time)
+ if (current >= __abs_time)
return try_acquire();
else
return try_acquire_for(__abs_time - current);
diff --git a/contrib/libs/cxxsupp/libcxx/include/set b/contrib/libs/cxxsupp/libcxx/include/set
index 46b515ba53..1718a644d4 100644
--- a/contrib/libs/cxxsupp/libcxx/include/set
+++ b/contrib/libs/cxxsupp/libcxx/include/set
@@ -183,6 +183,25 @@ public:
pair<const_iterator,const_iterator> equal_range(const K& x) const; // C++14
};
+template <class InputIterator,
+ class Compare = less<typename iterator_traits<InputIterator>::value_type>,
+ class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
+set(InputIterator, InputIterator,
+ Compare = Compare(), Allocator = Allocator())
+ -> set<typename iterator_traits<InputIterator>::value_type, Compare, Allocator>; // C++17
+
+template<class Key, class Compare = less<Key>, class Allocator = allocator<Key>>
+set(initializer_list<Key>, Compare = Compare(), Allocator = Allocator())
+ -> set<Key, Compare, Allocator>; // C++17
+
+template<class InputIterator, class Allocator>
+set(InputIterator, InputIterator, Allocator)
+ -> set<typename iterator_traits<InputIterator>::value_type,
+ less<typename iterator_traits<InputIterator>::value_type>, Allocator>; // C++17
+
+template<class Key, class Allocator>
+set(initializer_list<Key>, Allocator) -> set<Key, less<Key>, Allocator>; // C++17
+
template <class Key, class Compare, class Allocator>
bool
operator==(const set<Key, Compare, Allocator>& x,
@@ -389,6 +408,25 @@ public:
pair<const_iterator,const_iterator> equal_range(const K& x) const; // C++14
};
+template <class InputIterator,
+ class Compare = less<typename iterator_traits<InputIterator>::value_type>,
+ class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
+multiset(InputIterator, InputIterator,
+ Compare = Compare(), Allocator = Allocator())
+ -> multiset<typename iterator_traits<InputIterator>::value_type, Compare, Allocator>; // C++17
+
+template<class Key, class Compare = less<Key>, class Allocator = allocator<Key>>
+multiset(initializer_list<Key>, Compare = Compare(), Allocator = Allocator())
+ -> multiset<Key, Compare, Allocator>; // C++17
+
+template<class InputIterator, class Allocator>
+multiset(InputIterator, InputIterator, Allocator)
+ -> multiset<typename iterator_traits<InputIterator>::value_type,
+ less<typename iterator_traits<InputIterator>::value_type>, Allocator>; // C++17
+
+template<class Key, class Allocator>
+multiset(initializer_list<Key>, Allocator) -> multiset<Key, less<Key>, Allocator>; // C++17
+
template <class Key, class Compare, class Allocator>
bool
operator==(const multiset<Key, Compare, Allocator>& x,
@@ -436,6 +474,7 @@ erase_if(multiset<Key, Compare, Allocator>& c, Predicate pred); // C++20
#include <__config>
#include <__debug>
#include <__functional/is_transparent.h>
+#include <__iterator/iterator_traits.h>
#include <__node_handle>
#include <__tree>
#include <__utility/forward.h>
@@ -462,7 +501,7 @@ public:
// types:
typedef _Key key_type;
typedef key_type value_type;
- typedef _Compare key_compare;
+ typedef __identity_t<_Compare> key_compare;
typedef key_compare value_compare;
typedef __identity_t<_Allocator> allocator_type;
typedef value_type& reference;
@@ -474,7 +513,6 @@ public:
private:
typedef __tree<value_type, value_compare, allocator_type> __base;
typedef allocator_traits<allocator_type> __alloc_traits;
- typedef typename __base::__node_holder __node_holder;
__base __tree_;
@@ -872,6 +910,7 @@ public:
template<class _InputIterator,
class _Compare = less<__iter_value_type<_InputIterator>>,
class _Allocator = allocator<__iter_value_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>,
class = enable_if_t<__is_allocator<_Allocator>::value, void>,
class = enable_if_t<!__is_allocator<_Compare>::value, void>>
set(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
@@ -879,12 +918,13 @@ set(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocat
template<class _Key, class _Compare = less<_Key>,
class _Allocator = allocator<_Key>,
- class = enable_if_t<__is_allocator<_Allocator>::value, void>,
- class = enable_if_t<!__is_allocator<_Compare>::value, void>>
+ class = enable_if_t<!__is_allocator<_Compare>::value, void>,
+ class = enable_if_t<__is_allocator<_Allocator>::value, void>>
set(initializer_list<_Key>, _Compare = _Compare(), _Allocator = _Allocator())
-> set<_Key, _Compare, _Allocator>;
template<class _InputIterator, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>,
class = enable_if_t<__is_allocator<_Allocator>::value, void>>
set(_InputIterator, _InputIterator, _Allocator)
-> set<__iter_value_type<_InputIterator>,
@@ -992,9 +1032,9 @@ class _LIBCPP_TEMPLATE_VIS multiset
{
public:
// types:
- typedef _Key key_type;
+ typedef _Key key_type;
typedef key_type value_type;
- typedef _Compare key_compare;
+ typedef __identity_t<_Compare> key_compare;
typedef key_compare value_compare;
typedef __identity_t<_Allocator> allocator_type;
typedef value_type& reference;
@@ -1006,7 +1046,6 @@ public:
private:
typedef __tree<value_type, value_compare, allocator_type> __base;
typedef allocator_traits<allocator_type> __alloc_traits;
- typedef typename __base::__node_holder __node_holder;
__base __tree_;
@@ -1403,6 +1442,7 @@ public:
template<class _InputIterator,
class _Compare = less<__iter_value_type<_InputIterator>>,
class _Allocator = allocator<__iter_value_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>,
class = enable_if_t<__is_allocator<_Allocator>::value, void>,
class = enable_if_t<!__is_allocator<_Compare>::value, void>>
multiset(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
@@ -1416,6 +1456,7 @@ multiset(initializer_list<_Key>, _Compare = _Compare(), _Allocator = _Allocator(
-> multiset<_Key, _Compare, _Allocator>;
template<class _InputIterator, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value, void>,
class = enable_if_t<__is_allocator<_Allocator>::value, void>>
multiset(_InputIterator, _InputIterator, _Allocator)
-> multiset<__iter_value_type<_InputIterator>,
diff --git a/contrib/libs/cxxsupp/libcxx/include/span b/contrib/libs/cxxsupp/libcxx/include/span
index 5d57bd693c..d10cb73805 100644
--- a/contrib/libs/cxxsupp/libcxx/include/span
+++ b/contrib/libs/cxxsupp/libcxx/include/span
@@ -61,7 +61,7 @@ public:
template <class It, class End>
constexpr explicit(Extent != dynamic_extent) span(It first, End last);
template <size_t N>
- constexpr span(element_type (&arr)[N]) noexcept;
+ constexpr span(type_identity_t<element_type> (&arr)[N]) noexcept;
template <size_t N>
constexpr span(array<value_type, N>& arr) noexcept;
template <size_t N>
@@ -89,7 +89,7 @@ public:
// [span.obs], span observers
constexpr size_type size() const noexcept;
constexpr size_type size_bytes() const noexcept;
- constexpr bool empty() const noexcept;
+ [[nodiscard]] constexpr bool empty() const noexcept;
// [span.elem], span element access
constexpr reference operator[](size_type idx) const;
@@ -264,7 +264,7 @@ public:
{ (void)__l; _LIBCPP_ASSERT(_Extent == distance(__f, __l), "size mismatch in span's constructor (ptr, ptr)"); }
#endif
- _LIBCPP_INLINE_VISIBILITY constexpr span(element_type (&__arr)[_Extent]) noexcept : __data{__arr} {}
+ _LIBCPP_INLINE_VISIBILITY constexpr span(type_identity_t<element_type> (&__arr)[_Extent]) noexcept : __data{__arr} {}
template <class _OtherElementType,
enable_if_t<is_convertible_v<_OtherElementType(*)[], element_type (*)[]>, nullptr_t> = nullptr>
@@ -374,9 +374,9 @@ public:
return {data() + __offset, __count};
}
- _LIBCPP_INLINE_VISIBILITY constexpr size_type size() const noexcept { return _Extent; }
- _LIBCPP_INLINE_VISIBILITY constexpr size_type size_bytes() const noexcept { return _Extent * sizeof(element_type); }
- _LIBCPP_INLINE_VISIBILITY constexpr bool empty() const noexcept { return _Extent == 0; }
+ _LIBCPP_INLINE_VISIBILITY constexpr size_type size() const noexcept { return _Extent; }
+ _LIBCPP_INLINE_VISIBILITY constexpr size_type size_bytes() const noexcept { return _Extent * sizeof(element_type); }
+ [[nodiscard]] _LIBCPP_INLINE_VISIBILITY constexpr bool empty() const noexcept { return _Extent == 0; }
_LIBCPP_INLINE_VISIBILITY constexpr reference operator[](size_type __idx) const noexcept
{
@@ -469,7 +469,7 @@ public:
template <size_t _Sz>
_LIBCPP_INLINE_VISIBILITY
- constexpr span(element_type (&__arr)[_Sz]) noexcept : __data{__arr}, __size{_Sz} {}
+ constexpr span(type_identity_t<element_type> (&__arr)[_Sz]) noexcept : __data{__arr}, __size{_Sz} {}
template <class _OtherElementType, size_t _Sz,
enable_if_t<is_convertible_v<_OtherElementType(*)[], element_type (*)[]>, nullptr_t> = nullptr>
@@ -560,9 +560,9 @@ public:
return {data() + __offset, __count};
}
- _LIBCPP_INLINE_VISIBILITY constexpr size_type size() const noexcept { return __size; }
- _LIBCPP_INLINE_VISIBILITY constexpr size_type size_bytes() const noexcept { return __size * sizeof(element_type); }
- _LIBCPP_INLINE_VISIBILITY constexpr bool empty() const noexcept { return __size == 0; }
+ _LIBCPP_INLINE_VISIBILITY constexpr size_type size() const noexcept { return __size; }
+ _LIBCPP_INLINE_VISIBILITY constexpr size_type size_bytes() const noexcept { return __size * sizeof(element_type); }
+ [[nodiscard]] _LIBCPP_INLINE_VISIBILITY constexpr bool empty() const noexcept { return __size == 0; }
_LIBCPP_INLINE_VISIBILITY constexpr reference operator[](size_type __idx) const noexcept
{
diff --git a/contrib/libs/cxxsupp/libcxx/include/system_error b/contrib/libs/cxxsupp/libcxx/include/system_error
index 7e6d3c1cc5..365f024ca6 100644
--- a/contrib/libs/cxxsupp/libcxx/include/system_error
+++ b/contrib/libs/cxxsupp/libcxx/include/system_error
@@ -46,10 +46,10 @@ template <class T> struct is_error_condition_enum
: public false_type {};
template <class _Tp>
-inline constexpr size_t is_error_condition_enum_v = is_error_condition_enum<_Tp>::value; // C++17
+inline constexpr bool is_error_condition_enum_v = is_error_condition_enum<_Tp>::value; // C++17
template <class _Tp>
-inline constexpr size_t is_error_code_enum_v = is_error_code_enum<_Tp>::value; // C++17
+inline constexpr bool is_error_code_enum_v = is_error_code_enum<_Tp>::value; // C++17
class error_code
{
@@ -165,7 +165,7 @@ struct _LIBCPP_TEMPLATE_VIS is_error_code_enum
#if _LIBCPP_STD_VER > 14
template <class _Tp>
-inline constexpr size_t is_error_code_enum_v = is_error_code_enum<_Tp>::value;
+inline constexpr bool is_error_code_enum_v = is_error_code_enum<_Tp>::value;
#endif
// is_error_condition_enum
@@ -176,7 +176,7 @@ struct _LIBCPP_TEMPLATE_VIS is_error_condition_enum
#if _LIBCPP_STD_VER > 14
template <class _Tp>
-inline constexpr size_t is_error_condition_enum_v = is_error_condition_enum<_Tp>::value;
+inline constexpr bool is_error_condition_enum_v = is_error_condition_enum<_Tp>::value;
#endif
template <>
diff --git a/contrib/libs/cxxsupp/libcxx/include/type_traits b/contrib/libs/cxxsupp/libcxx/include/type_traits
index 8c91522074..add71a380f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/type_traits
+++ b/contrib/libs/cxxsupp/libcxx/include/type_traits
@@ -879,9 +879,8 @@ inline constexpr bool is_array_v = is_array<_Tp>::value;
// is_pointer
-// Before Clang 11 / AppleClang 12.0.5, __is_pointer didn't work for Objective-C types.
+// Before AppleClang 12.0.5, __is_pointer didn't work for Objective-C types.
#if __has_keyword(__is_pointer) && \
- !(defined(_LIBCPP_CLANG_VER) && _LIBCPP_CLANG_VER < 1100) && \
!(defined(_LIBCPP_APPLE_CLANG_VER) && _LIBCPP_APPLE_CLANG_VER < 1205) && \
!defined(__CUDACC__)
diff --git a/contrib/libs/cxxsupp/libcxx/include/unordered_map b/contrib/libs/cxxsupp/libcxx/include/unordered_map
index 417180a530..c6d4137b21 100644
--- a/contrib/libs/cxxsupp/libcxx/include/unordered_map
+++ b/contrib/libs/cxxsupp/libcxx/include/unordered_map
@@ -216,6 +216,47 @@ public:
void reserve(size_type n);
};
+template<class InputIterator,
+ class Hash = hash<iter_key_t<InputIterator>>, class Pred = equal_to<iter_key_t<InputIterator>>,
+ class Allocator = allocator<iter_to_alloc_t<InputIterator>>>
+unordered_map(InputIterator, InputIterator, typename see below::size_type = see below,
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
+ -> unordered_map<iter_key_t<InputIterator>, iter_value_t<InputIterator>, Hash, Pred,
+ Allocator>; // C++17
+
+template<class Key, class T, class Hash = hash<Key>,
+ class Pred = equal_to<Key>, class Allocator = allocator<pair<const Key, T>>>
+unordered_map(initializer_list<pair<const Key, T>>, typename see below::size_type = see below,
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
+ -> unordered_map<Key, T, Hash, Pred, Allocator>; // C++17
+
+template<class InputIterator, class Allocator>
+unordered_map(InputIterator, InputIterator, typename see below::size_type, Allocator)
+ -> unordered_map<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
+ hash<iter_key_t<InputIterator>>, equal_to<iter_key_t<InputIterator>>, Allocator>; // C++17
+
+template<class InputIterator, class Allocator>
+unordered_map(InputIterator, InputIterator, Allocator)
+ -> unordered_map<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
+ hash<iter_key_t<InputIterator>>, equal_to<iter_key_t<InputIterator>>, Allocator>; // C++17
+
+template<class InputIterator, class Hash, class Allocator>
+unordered_map(InputIterator, InputIterator, typename see below::size_type, Hash, Allocator)
+ -> unordered_map<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Hash,
+ equal_to<iter_key_t<InputIterator>>, Allocator>; // C++17
+
+template<class Key, class T, typename Allocator>
+unordered_map(initializer_list<pair<const Key, T>>, typename see below::size_type, Allocator)
+ -> unordered_map<Key, T, hash<Key>, equal_to<Key>, Allocator>; // C++17
+
+template<class Key, class T, typename Allocator>
+unordered_map(initializer_list<pair<const Key, T>>, Allocator)
+ -> unordered_map<Key, T, hash<Key>, equal_to<Key>, Allocator>; // C++17
+
+template<class Key, class T, class Hash, class Allocator>
+unordered_map(initializer_list<pair<const Key, T>>, typename see below::size_type, Hash, Allocator)
+ -> unordered_map<Key, T, Hash, equal_to<Key>, Allocator>; // C++17
+
template <class Key, class T, class Hash, class Pred, class Alloc>
void swap(unordered_map<Key, T, Hash, Pred, Alloc>& x,
unordered_map<Key, T, Hash, Pred, Alloc>& y)
@@ -404,6 +445,48 @@ public:
void reserve(size_type n);
};
+template<class InputIterator,
+ class Hash = hash<iter_key_t<InputIterator>>, class Pred = equal_to<iter_key_t<InputIterator>>,
+ class Allocator = allocator<iter_to_alloc_t<InputIterator>>>
+unordered_multimap(InputIterator, InputIterator, typename see below::size_type = see below,
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
+ -> unordered_multimap<iter_key_t<InputIterator>, iter_value_t<InputIterator>, Hash, Pred,
+ Allocator>; // C++17
+
+template<class Key, class T, class Hash = hash<Key>,
+ class Pred = equal_to<Key>, class Allocator = allocator<pair<const Key, T>>>
+unordered_multimap(initializer_list<pair<const Key, T>>, typename see below::size_type = see below,
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
+ -> unordered_multimap<Key, T, Hash, Pred, Allocator>; // C++17
+
+template<class InputIterator, class Allocator>
+unordered_multimap(InputIterator, InputIterator, typename see below::size_type, Allocator)
+ -> unordered_multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
+ hash<iter_key_t<InputIterator>>, equal_to<iter_key_t<InputIterator>>, Allocator>; // C++17
+
+template<class InputIterator, class Allocator>
+unordered_multimap(InputIterator, InputIterator, Allocator)
+ -> unordered_multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
+ hash<iter_key_t<InputIterator>>, equal_to<iter_key_t<InputIterator>>, Allocator>; // C++17
+
+template<class InputIterator, class Hash, class Allocator>
+unordered_multimap(InputIterator, InputIterator, typename see below::size_type, Hash, Allocator)
+ -> unordered_multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Hash,
+ equal_to<iter_key_t<InputIterator>>, Allocator>; // C++17
+
+template<class Key, class T, typename Allocator>
+unordered_multimap(initializer_list<pair<const Key, T>>, typename see below::size_type, Allocator)
+ -> unordered_multimap<Key, T, hash<Key>, equal_to<Key>, Allocator>; // C++17
+
+template<class Key, class T, typename Allocator>
+unordered_multimap(initializer_list<pair<const Key, T>>, Allocator)
+ -> unordered_multimap<Key, T, hash<Key>, equal_to<Key>, Allocator>; // C++17
+
+template<class Key, class T, class Hash, class Allocator>
+unordered_multimap(initializer_list<pair<const Key, T>>, typename see below::size_type, Hash,
+ Allocator)
+ -> unordered_multimap<Key, T, Hash, equal_to<Key>, Allocator>; // C++17
+
template <class Key, class T, class Hash, class Pred, class Alloc>
void swap(unordered_multimap<Key, T, Hash, Pred, Alloc>& x,
unordered_multimap<Key, T, Hash, Pred, Alloc>& y)
@@ -434,6 +517,7 @@ template <class Key, class T, class Hash, class Pred, class Alloc>
#include <__config>
#include <__debug>
#include <__functional/is_transparent.h>
+#include <__iterator/iterator_traits.h>
#include <__hash_table>
#include <__node_handle>
#include <__utility/forward.h>
@@ -1470,6 +1554,7 @@ template<class _InputIterator,
class _Hash = hash<__iter_key_type<_InputIterator>>,
class _Pred = equal_to<__iter_key_type<_InputIterator>>,
class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
class = enable_if_t<!__is_allocator<_Pred>::value>,
@@ -1490,18 +1575,21 @@ unordered_map(initializer_list<pair<_Key, _Tp>>, typename allocator_traits<_Allo
-> unordered_map<remove_const_t<_Key>, _Tp, _Hash, _Pred, _Allocator>;
template<class _InputIterator, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_map(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Allocator)
-> unordered_map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>,
hash<__iter_key_type<_InputIterator>>, equal_to<__iter_key_type<_InputIterator>>, _Allocator>;
template<class _InputIterator, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_map(_InputIterator, _InputIterator, _Allocator)
-> unordered_map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>,
hash<__iter_key_type<_InputIterator>>, equal_to<__iter_key_type<_InputIterator>>, _Allocator>;
template<class _InputIterator, class _Hash, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
@@ -2268,6 +2356,7 @@ template<class _InputIterator,
class _Hash = hash<__iter_key_type<_InputIterator>>,
class _Pred = equal_to<__iter_key_type<_InputIterator>>,
class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
class = enable_if_t<!__is_allocator<_Pred>::value>,
@@ -2288,18 +2377,21 @@ unordered_multimap(initializer_list<pair<_Key, _Tp>>, typename allocator_traits<
-> unordered_multimap<remove_const_t<_Key>, _Tp, _Hash, _Pred, _Allocator>;
template<class _InputIterator, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_multimap(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Allocator)
-> unordered_multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>,
hash<__iter_key_type<_InputIterator>>, equal_to<__iter_key_type<_InputIterator>>, _Allocator>;
template<class _InputIterator, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_multimap(_InputIterator, _InputIterator, _Allocator)
-> unordered_multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>,
hash<__iter_key_type<_InputIterator>>, equal_to<__iter_key_type<_InputIterator>>, _Allocator>;
template<class _InputIterator, class _Hash, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
diff --git a/contrib/libs/cxxsupp/libcxx/include/unordered_set b/contrib/libs/cxxsupp/libcxx/include/unordered_set
index 5856e4bc40..33b54d957f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/unordered_set
+++ b/contrib/libs/cxxsupp/libcxx/include/unordered_set
@@ -182,6 +182,43 @@ public:
void reserve(size_type n);
};
+template<class InputIterator,
+ class Hash = hash<typename iterator_traits<InputIterator>::value_type>,
+ class Pred = equal_to<typename iterator_traits<InputIterator>::value_type>,
+ class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
+unordered_set(InputIterator, InputIterator, typename see below::size_type = see below,
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
+ -> unordered_set<typename iterator_traits<InputIterator>::value_type,
+ Hash, Pred, Allocator>; // C++17
+
+template<class T, class Hash = hash<T>,
+ class Pred = equal_to<T>, class Allocator = allocator<T>>
+unordered_set(initializer_list<T>, typename see below::size_type = see below,
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
+ -> unordered_set<T, Hash, Pred, Allocator>; // C++17
+
+template<class InputIterator, class Allocator>
+unordered_set(InputIterator, InputIterator, typename see below::size_type, Allocator)
+ -> unordered_set<typename iterator_traits<InputIterator>::value_type,
+ hash<typename iterator_traits<InputIterator>::value_type>,
+ equal_to<typename iterator_traits<InputIterator>::value_type>,
+ Allocator>; // C++17
+
+template<class InputIterator, class Hash, class Allocator>
+unordered_set(InputIterator, InputIterator, typename see below::size_type,
+ Hash, Allocator)
+ -> unordered_set<typename iterator_traits<InputIterator>::value_type, Hash,
+ equal_to<typename iterator_traits<InputIterator>::value_type>,
+ Allocator>; // C++17
+
+template<class T, class Allocator>
+unordered_set(initializer_list<T>, typename see below::size_type, Allocator)
+ -> unordered_set<T, hash<T>, equal_to<T>, Allocator>; // C++17
+
+template<class T, class Hash, class Allocator>
+unordered_set(initializer_list<T>, typename see below::size_type, Hash, Allocator)
+ -> unordered_set<T, Hash, equal_to<T>, Allocator>; // C++17
+
template <class Value, class Hash, class Pred, class Alloc>
void swap(unordered_set<Value, Hash, Pred, Alloc>& x,
unordered_set<Value, Hash, Pred, Alloc>& y)
@@ -359,6 +396,42 @@ public:
void reserve(size_type n);
};
+template<class InputIterator,
+ class Hash = hash<typename iterator_traits<InputIterator>::value_type>,
+ class Pred = equal_to<typename iterator_traits<InputIterator>::value_type>,
+ class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
+unordered_multiset(InputIterator, InputIterator, see below::size_type = see below,
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
+ -> unordered_multiset<typename iterator_traits<InputIterator>::value_type,
+ Hash, Pred, Allocator>; // C++17
+
+template<class T, class Hash = hash<T>,
+ class Pred = equal_to<T>, class Allocator = allocator<T>>
+unordered_multiset(initializer_list<T>, typename see below::size_type = see below,
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
+ -> unordered_multiset<T, Hash, Pred, Allocator>; // C++17
+
+template<class InputIterator, class Allocator>
+unordered_multiset(InputIterator, InputIterator, typename see below::size_type, Allocator)
+ -> unordered_multiset<typename iterator_traits<InputIterator>::value_type,
+ hash<typename iterator_traits<InputIterator>::value_type>,
+ equal_to<typename iterator_traits<InputIterator>::value_type>,
+ Allocator>; // C++17
+
+template<class InputIterator, class Hash, class Allocator>
+unordered_multiset(InputIterator, InputIterator, typename see below::size_type,
+ Hash, Allocator)
+ -> unordered_multiset<typename iterator_traits<InputIterator>::value_type, Hash,
+ equal_to<typename iterator_traits<InputIterator>::value_type>, Allocator>; // C++17
+
+template<class T, class Allocator>
+unordered_multiset(initializer_list<T>, typename see below::size_type, Allocator)
+ -> unordered_multiset<T, hash<T>, equal_to<T>, Allocator>; // C++17
+
+template<class T, class Hash, class Allocator>
+unordered_multiset(initializer_list<T>, typename see below::size_type, Hash, Allocator)
+ -> unordered_multiset<T, Hash, equal_to<T>, Allocator>; // C++17
+
template <class Value, class Hash, class Pred, class Alloc>
void swap(unordered_multiset<Value, Hash, Pred, Alloc>& x,
unordered_multiset<Value, Hash, Pred, Alloc>& y)
@@ -803,6 +876,7 @@ template<class _InputIterator,
class _Hash = hash<__iter_value_type<_InputIterator>>,
class _Pred = equal_to<__iter_value_type<_InputIterator>>,
class _Allocator = allocator<__iter_value_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
class = enable_if_t<!__is_allocator<_Pred>::value>,
@@ -823,6 +897,7 @@ unordered_set(initializer_list<_Tp>, typename allocator_traits<_Allocator>::size
-> unordered_set<_Tp, _Hash, _Pred, _Allocator>;
template<class _InputIterator, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_set(_InputIterator, _InputIterator,
typename allocator_traits<_Allocator>::size_type, _Allocator)
@@ -832,6 +907,7 @@ unordered_set(_InputIterator, _InputIterator,
_Allocator>;
template<class _InputIterator, class _Hash, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
@@ -1468,6 +1544,7 @@ template<class _InputIterator,
class _Hash = hash<__iter_value_type<_InputIterator>>,
class _Pred = equal_to<__iter_value_type<_InputIterator>>,
class _Allocator = allocator<__iter_value_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
class = enable_if_t<!__is_allocator<_Pred>::value>,
@@ -1487,6 +1564,7 @@ unordered_multiset(initializer_list<_Tp>, typename allocator_traits<_Allocator>:
-> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>;
template<class _InputIterator, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_multiset(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Allocator)
-> unordered_multiset<__iter_value_type<_InputIterator>,
@@ -1495,6 +1573,7 @@ unordered_multiset(_InputIterator, _InputIterator, typename allocator_traits<_Al
_Allocator>;
template<class _InputIterator, class _Hash, class _Allocator,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
diff --git a/contrib/libs/cxxsupp/libcxx/include/utility b/contrib/libs/cxxsupp/libcxx/include/utility
index 7d021d9580..f8b954fc45 100644
--- a/contrib/libs/cxxsupp/libcxx/include/utility
+++ b/contrib/libs/cxxsupp/libcxx/include/utility
@@ -95,6 +95,8 @@ struct pair
is_nothrow_swappable_v<T2>); // constexpr in C++20
};
+template<class T1, class T2> pair(T1, T2) -> pair<T1, T2>;
+
template <class T1, class T2> bool operator==(const pair<T1,T2>&, const pair<T1,T2>&); // constexpr in C++14
template <class T1, class T2> bool operator!=(const pair<T1,T2>&, const pair<T1,T2>&); // constexpr in C++14, removed in C++20
template <class T1, class T2> bool operator< (const pair<T1,T2>&, const pair<T1,T2>&); // constexpr in C++14, removed in C++20
diff --git a/contrib/libs/cxxsupp/libcxx/include/valarray b/contrib/libs/cxxsupp/libcxx/include/valarray
index 0a828885d2..2e895d59fd 100644
--- a/contrib/libs/cxxsupp/libcxx/include/valarray
+++ b/contrib/libs/cxxsupp/libcxx/include/valarray
@@ -105,6 +105,8 @@ public:
void resize(size_t n, value_type x = value_type());
};
+template<class T, size_t cnt> valarray(const T(&)[cnt], size_t) -> valarray<T>;
+
class slice
{
public:
@@ -1081,6 +1083,11 @@ private:
valarray& __assign_range(const value_type* __f, const value_type* __l);
};
+#if _LIBCPP_STD_VER > 14
+template<class _Tp, size_t _Size>
+valarray(const _Tp(&)[_Size], size_t) -> valarray<_Tp>;
+#endif
+
_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS void valarray<size_t>::resize(size_t, size_t))
template <class _Op, class _Tp>
diff --git a/contrib/libs/cxxsupp/libcxx/include/vector b/contrib/libs/cxxsupp/libcxx/include/vector
index c02253c751..ce52a88570 100644
--- a/contrib/libs/cxxsupp/libcxx/include/vector
+++ b/contrib/libs/cxxsupp/libcxx/include/vector
@@ -245,7 +245,7 @@ public:
template <class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
vector(InputIterator, InputIterator, Allocator = Allocator())
- -> vector<typename iterator_traits<InputIterator>::value_type, Allocator>;
+ -> vector<typename iterator_traits<InputIterator>::value_type, Allocator>; // C++17
template <class Allocator> struct hash<std::vector<bool, Allocator>>;
@@ -275,6 +275,7 @@ erase_if(vector<T, Allocator>& c, Predicate pred); // C++20
#include <__bit_reference>
#include <__debug>
#include <__functional_base>
+#include <__iterator/iterator_traits.h>
#include <__iterator/wrap_iter.h>
#include <__split_buffer>
#include <__utility/forward.h>
@@ -315,192 +316,60 @@ template <class _Tp, class _Allocator>
class __vector_base
: protected __vector_base_common<true> // This base class is historical, but it needs to remain for ABI compatibility
{
-public:
- typedef _Allocator allocator_type;
- typedef allocator_traits<allocator_type> __alloc_traits;
- typedef typename __alloc_traits::size_type size_type;
+ typedef _Allocator allocator_type;
+ typedef typename allocator_traits<allocator_type>::pointer pointer;
protected:
- typedef _Tp value_type;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef typename __alloc_traits::difference_type difference_type;
- typedef typename __alloc_traits::pointer pointer;
- typedef typename __alloc_traits::const_pointer const_pointer;
- typedef pointer iterator;
- typedef const_pointer const_iterator;
-
- pointer __begin_;
- pointer __end_;
- __compressed_pair<pointer, allocator_type> __end_cap_;
-
- _LIBCPP_INLINE_VISIBILITY
- allocator_type& __alloc() _NOEXCEPT
- {return __end_cap_.second();}
- _LIBCPP_INLINE_VISIBILITY
- const allocator_type& __alloc() const _NOEXCEPT
- {return __end_cap_.second();}
- _LIBCPP_INLINE_VISIBILITY
- pointer& __end_cap() _NOEXCEPT
- {return __end_cap_.first();}
- _LIBCPP_INLINE_VISIBILITY
- const pointer& __end_cap() const _NOEXCEPT
- {return __end_cap_.first();}
+ pointer __begin_;
+ pointer __end_;
+ __compressed_pair<pointer, allocator_type> __end_cap_;
_LIBCPP_INLINE_VISIBILITY
__vector_base()
- _NOEXCEPT_(is_nothrow_default_constructible<allocator_type>::value);
- _LIBCPP_INLINE_VISIBILITY __vector_base(const allocator_type& __a);
-#ifndef _LIBCPP_CXX03_LANG
- _LIBCPP_INLINE_VISIBILITY __vector_base(allocator_type&& __a) _NOEXCEPT;
-#endif
- ~__vector_base();
+ : __begin_(nullptr),
+ __end_(nullptr),
+ __end_cap_(nullptr, __default_init_tag()) {}
- _LIBCPP_INLINE_VISIBILITY
- void clear() _NOEXCEPT {__destruct_at_end(__begin_);}
- _LIBCPP_INLINE_VISIBILITY
- size_type capacity() const _NOEXCEPT
- {return static_cast<size_type>(__end_cap() - __begin_);}
-
- _LIBCPP_INLINE_VISIBILITY
- void __destruct_at_end(pointer __new_last) _NOEXCEPT;
-
- _LIBCPP_INLINE_VISIBILITY
- void __copy_assign_alloc(const __vector_base& __c)
- {__copy_assign_alloc(__c, integral_constant<bool,
- __alloc_traits::propagate_on_container_copy_assignment::value>());}
-
- _LIBCPP_INLINE_VISIBILITY
- void __move_assign_alloc(__vector_base& __c)
- _NOEXCEPT_(
- !__alloc_traits::propagate_on_container_move_assignment::value ||
- is_nothrow_move_assignable<allocator_type>::value)
- {__move_assign_alloc(__c, integral_constant<bool,
- __alloc_traits::propagate_on_container_move_assignment::value>());}
-
- _LIBCPP_NORETURN _LIBCPP_HIDE_FROM_ABI
- void __throw_length_error() const {
-#ifndef _LIBCPP_NO_EXCEPTIONS
- __vector_base_common<true>::__throw_length_error();
-#else
- _VSTD::abort();
-#endif
- }
-
- _LIBCPP_NORETURN _LIBCPP_HIDE_FROM_ABI
- void __throw_out_of_range() const {
-#ifndef _LIBCPP_NO_EXCEPTIONS
- __vector_base_common<true>::__throw_out_of_range();
-#else
- _VSTD::abort();
-#endif
- }
-
-private:
- _LIBCPP_INLINE_VISIBILITY
- void __copy_assign_alloc(const __vector_base& __c, true_type)
- {
- if (__alloc() != __c.__alloc())
- {
- clear();
- __alloc_traits::deallocate(__alloc(), __begin_, capacity());
- __begin_ = __end_ = __end_cap() = nullptr;
- }
- __alloc() = __c.__alloc();
- }
-
- _LIBCPP_INLINE_VISIBILITY
- void __copy_assign_alloc(const __vector_base&, false_type)
- {}
-
- _LIBCPP_INLINE_VISIBILITY
- void __move_assign_alloc(__vector_base& __c, true_type)
- _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value)
- {
- __alloc() = _VSTD::move(__c.__alloc());
- }
-
- _LIBCPP_INLINE_VISIBILITY
- void __move_assign_alloc(__vector_base&, false_type)
- _NOEXCEPT
- {}
-};
-
-template <class _Tp, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__vector_base<_Tp, _Allocator>::__destruct_at_end(pointer __new_last) _NOEXCEPT
-{
- pointer __soon_to_be_end = __end_;
- while (__new_last != __soon_to_be_end)
- __alloc_traits::destroy(__alloc(), _VSTD::__to_address(--__soon_to_be_end));
- __end_ = __new_last;
-}
-
-template <class _Tp, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-__vector_base<_Tp, _Allocator>::__vector_base()
- _NOEXCEPT_(is_nothrow_default_constructible<allocator_type>::value)
- : __begin_(nullptr),
- __end_(nullptr),
- __end_cap_(nullptr, __default_init_tag())
-{
-}
-
-template <class _Tp, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-__vector_base<_Tp, _Allocator>::__vector_base(const allocator_type& __a)
- : __begin_(nullptr),
- __end_(nullptr),
- __end_cap_(nullptr, __a)
-{
-}
+ _LIBCPP_INLINE_VISIBILITY __vector_base(const allocator_type& __a)
+ : __begin_(nullptr),
+ __end_(nullptr),
+ __end_cap_(nullptr, __a) {}
#ifndef _LIBCPP_CXX03_LANG
-template <class _Tp, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-__vector_base<_Tp, _Allocator>::__vector_base(allocator_type&& __a) _NOEXCEPT
- : __begin_(nullptr),
- __end_(nullptr),
- __end_cap_(nullptr, _VSTD::move(__a)) {}
+ _LIBCPP_INLINE_VISIBILITY __vector_base(allocator_type&& __a) _NOEXCEPT
+ : __begin_(nullptr),
+ __end_(nullptr),
+ __end_cap_(nullptr, _VSTD::move(__a)) {}
#endif
-
-template <class _Tp, class _Allocator>
-__vector_base<_Tp, _Allocator>::~__vector_base()
-{
- if (__begin_ != nullptr)
- {
- clear();
- __alloc_traits::deallocate(__alloc(), __begin_, capacity());
- }
-}
+};
template <class _Tp, class _Allocator /* = allocator<_Tp> */>
class _LIBCPP_TEMPLATE_VIS vector
+ // This base class is historical, but it needs to remain for ABI compatibility.
: private __vector_base<_Tp, _Allocator>
{
private:
- typedef __vector_base<_Tp, _Allocator> __base;
- typedef allocator<_Tp> __default_allocator_type;
+ typedef __vector_base<_Tp, _Allocator> __base;
+ typedef allocator<_Tp> __default_allocator_type;
public:
- typedef vector __self;
- typedef _Tp value_type;
- typedef _Allocator allocator_type;
- typedef typename __base::__alloc_traits __alloc_traits;
- typedef typename __base::reference reference;
- typedef typename __base::const_reference const_reference;
- typedef typename __base::size_type size_type;
- typedef typename __base::difference_type difference_type;
- typedef typename __base::pointer pointer;
- typedef typename __base::const_pointer const_pointer;
+ typedef vector __self;
+ typedef _Tp value_type;
+ typedef _Allocator allocator_type;
+ typedef allocator_traits<allocator_type> __alloc_traits;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef typename __allocator_traits<allocator_type>::size_type size_type;
+ typedef typename __alloc_traits::difference_type difference_type;
+ typedef typename __alloc_traits::pointer pointer;
+ typedef typename __alloc_traits::const_pointer const_pointer;
#if _YNDX_LIBCPP_MAKE_VECTOR_ITERATOR_POINTERS == 1
- typedef typename __base::pointer iterator;
- typedef typename __base::const_pointer const_iterator;
+ typedef pointer iterator;
+ typedef const_pointer const_iterator;
#else
- typedef __wrap_iter<pointer> iterator;
- typedef __wrap_iter<const_pointer> const_iterator;
+ typedef __wrap_iter<pointer> iterator;
+ typedef __wrap_iter<const_pointer> const_iterator;
#endif
- typedef _VSTD::reverse_iterator<iterator> reverse_iterator;
- typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef _VSTD::reverse_iterator<iterator> reverse_iterator;
+ typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator;
static_assert((is_same<typename allocator_type::value_type, value_type>::value),
"Allocator::value_type must be same type as value_type");
@@ -562,10 +431,16 @@ public:
_LIBCPP_INLINE_VISIBILITY
~vector()
{
- __annotate_delete();
+ __annotate_delete();
#if _LIBCPP_DEBUG_LEVEL == 2
- __get_db()->__erase_c(this);
+ __get_db()->__erase_c(this);
#endif
+
+ if (this->__begin_ != nullptr)
+ {
+ __clear();
+ __alloc_traits::deallocate(__alloc(), this->__begin_, capacity());
+ }
}
vector(const vector& __x);
@@ -670,7 +545,7 @@ public:
{return static_cast<size_type>(this->__end_ - this->__begin_);}
_LIBCPP_INLINE_VISIBILITY
size_type capacity() const _NOEXCEPT
- {return __base::capacity();}
+ {return static_cast<size_type>(__end_cap() - this->__begin_);}
_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY
bool empty() const _NOEXCEPT
{return this->__begin_ == this->__end_;}
@@ -783,7 +658,7 @@ public:
void clear() _NOEXCEPT
{
size_type __old_size = size();
- __base::clear();
+ __clear();
__annotate_shrink(__old_size);
__invalidate_all_iterators();
}
@@ -849,7 +724,7 @@ private:
{
__invalidate_iterators_past(__new_last);
size_type __old_size = size();
- __base::__destruct_at_end(__new_last);
+ __base_destruct_at_end(__new_last);
__annotate_shrink(__old_size);
}
@@ -921,7 +796,7 @@ private:
struct _ConstructTransaction {
explicit _ConstructTransaction(vector &__v, size_type __n)
- : __v_(__v), __pos_(__v.__end_), __new_end_(__v.__end_ + __n) {
+ : __v_(__v), __pos_(__v.__end_), __new_end_(__v.__end_ + __n) {
#ifndef _LIBCPP_HAS_NO_ASAN
__v_.__annotate_increase(__n);
#endif
@@ -952,11 +827,95 @@ private:
_VSTD::forward<_Args>(__args)...);
++__tx.__pos_;
}
+
+ _LIBCPP_INLINE_VISIBILITY
+ allocator_type& __alloc() _NOEXCEPT
+ {return this->__end_cap_.second();}
+ _LIBCPP_INLINE_VISIBILITY
+ const allocator_type& __alloc() const _NOEXCEPT
+ {return this->__end_cap_.second();}
+ _LIBCPP_INLINE_VISIBILITY
+ pointer& __end_cap() _NOEXCEPT
+ {return this->__end_cap_.first();}
+ _LIBCPP_INLINE_VISIBILITY
+ const pointer& __end_cap() const _NOEXCEPT
+ {return this->__end_cap_.first();}
+
+ _LIBCPP_INLINE_VISIBILITY
+ void __clear() _NOEXCEPT {__base_destruct_at_end(this->__begin_);}
+
+ _LIBCPP_INLINE_VISIBILITY
+ void __base_destruct_at_end(pointer __new_last) _NOEXCEPT {
+ pointer __soon_to_be_end = this->__end_;
+ while (__new_last != __soon_to_be_end)
+ __alloc_traits::destroy(__alloc(), _VSTD::__to_address(--__soon_to_be_end));
+ this->__end_ = __new_last;
+ }
+
+ _LIBCPP_INLINE_VISIBILITY
+ void __copy_assign_alloc(const vector& __c)
+ {__copy_assign_alloc(__c, integral_constant<bool,
+ __alloc_traits::propagate_on_container_copy_assignment::value>());}
+
+ _LIBCPP_INLINE_VISIBILITY
+ void __move_assign_alloc(vector& __c)
+ _NOEXCEPT_(
+ !__alloc_traits::propagate_on_container_move_assignment::value ||
+ is_nothrow_move_assignable<allocator_type>::value)
+ {__move_assign_alloc(__c, integral_constant<bool,
+ __alloc_traits::propagate_on_container_move_assignment::value>());}
+
+ _LIBCPP_NORETURN _LIBCPP_HIDE_FROM_ABI
+ void __throw_length_error() const {
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ __vector_base_common<true>::__throw_length_error();
+#else
+ _VSTD::abort();
+#endif
+ }
+
+ _LIBCPP_NORETURN _LIBCPP_HIDE_FROM_ABI
+ void __throw_out_of_range() const {
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ __vector_base_common<true>::__throw_out_of_range();
+#else
+ _VSTD::abort();
+#endif
+ }
+
+ _LIBCPP_INLINE_VISIBILITY
+ void __copy_assign_alloc(const vector& __c, true_type)
+ {
+ if (__alloc() != __c.__alloc())
+ {
+ __clear();
+ __alloc_traits::deallocate(__alloc(), this->__begin_, capacity());
+ this->__begin_ = this->__end_ = __end_cap() = nullptr;
+ }
+ __alloc() = __c.__alloc();
+ }
+
+ _LIBCPP_INLINE_VISIBILITY
+ void __copy_assign_alloc(const vector&, false_type)
+ {}
+
+ _LIBCPP_INLINE_VISIBILITY
+ void __move_assign_alloc(vector& __c, true_type)
+ _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value)
+ {
+ __alloc() = _VSTD::move(__c.__alloc());
+ }
+
+ _LIBCPP_INLINE_VISIBILITY
+ void __move_assign_alloc(vector&, false_type)
+ _NOEXCEPT
+ {}
};
#if _LIBCPP_STD_VER >= 17
template<class _InputIterator,
class _Alloc = allocator<__iter_value_type<_InputIterator>>,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Alloc>::value>
>
vector(_InputIterator, _InputIterator)
@@ -964,6 +923,7 @@ vector(_InputIterator, _InputIterator)
template<class _InputIterator,
class _Alloc,
+ class = enable_if_t<__is_cpp17_input_iterator<_InputIterator>::value>,
class = enable_if_t<__is_allocator<_Alloc>::value>
>
vector(_InputIterator, _InputIterator, _Alloc)
@@ -1331,7 +1291,7 @@ vector<_Tp, _Allocator>::vector(vector&& __x)
{
#if _LIBCPP_DEBUG_LEVEL == 2
__get_db()->__insert_c(this);
- __get_db()->swap(this, &__x);
+ __get_db()->swap(this, _VSTD::addressof(__x));
#endif
this->__begin_ = __x.__begin_;
this->__end_ = __x.__end_;
@@ -1354,7 +1314,7 @@ vector<_Tp, _Allocator>::vector(vector&& __x, const __identity_t<allocator_type>
this->__end_cap() = __x.__end_cap();
__x.__begin_ = __x.__end_ = __x.__end_cap() = nullptr;
#if _LIBCPP_DEBUG_LEVEL == 2
- __get_db()->swap(this, &__x);
+ __get_db()->swap(this, _VSTD::addressof(__x));
#endif
}
else
@@ -1409,7 +1369,7 @@ void
vector<_Tp, _Allocator>::__move_assign(vector& __c, false_type)
_NOEXCEPT_(__alloc_traits::is_always_equal::value)
{
- if (__base::__alloc() != __c.__alloc())
+ if (__alloc() != __c.__alloc())
{
typedef move_iterator<iterator> _Ip;
assign(_Ip(__c.begin()), _Ip(__c.end()));
@@ -1424,13 +1384,13 @@ vector<_Tp, _Allocator>::__move_assign(vector& __c, true_type)
_NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value)
{
__vdeallocate();
- __base::__move_assign_alloc(__c); // this can throw
+ __move_assign_alloc(__c); // this can throw
this->__begin_ = __c.__begin_;
this->__end_ = __c.__end_;
this->__end_cap() = __c.__end_cap();
__c.__begin_ = __c.__end_ = __c.__end_cap() = nullptr;
#if _LIBCPP_DEBUG_LEVEL == 2
- __get_db()->swap(this, &__c);
+ __get_db()->swap(this, _VSTD::addressof(__c));
#endif
}
@@ -1443,7 +1403,7 @@ vector<_Tp, _Allocator>::operator=(const vector& __x)
{
if (this != _VSTD::addressof(__x))
{
- __base::__copy_assign_alloc(__x);
+ __copy_assign_alloc(__x);
assign(__x.__begin_, __x.__end_);
}
return *this;
@@ -1625,6 +1585,8 @@ vector<_Tp, _Allocator>::reserve(size_type __n)
{
if (__n > capacity())
{
+ if (__n > max_size())
+ this->__throw_length_error();
allocator_type& __a = this->__alloc();
__split_buffer<value_type, allocator_type&> __v(__n, size(), __a);
__swap_out_circular_buffer(__v);
@@ -1749,7 +1711,7 @@ typename vector<_Tp, _Allocator>::iterator
vector<_Tp, _Allocator>::erase(const_iterator __position)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__position) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__position)) == this,
"vector::erase(iterator) called with an iterator not"
" referring to this vector");
#endif
@@ -1768,11 +1730,11 @@ typename vector<_Tp, _Allocator>::iterator
vector<_Tp, _Allocator>::erase(const_iterator __first, const_iterator __last)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__first) == this,
- "vector::erase(iterator, iterator) called with an iterator not"
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__first)) == this,
+ "vector::erase(iterator, iterator) called with an iterator not"
" referring to this vector");
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__last) == this,
- "vector::erase(iterator, iterator) called with an iterator not"
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__last)) == this,
+ "vector::erase(iterator, iterator) called with an iterator not"
" referring to this vector");
#endif
_LIBCPP_ASSERT(__first <= __last, "vector::erase(first, last) called with invalid range");
@@ -1809,7 +1771,7 @@ typename vector<_Tp, _Allocator>::iterator
vector<_Tp, _Allocator>::insert(const_iterator __position, const_reference __x)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__position) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__position)) == this,
"vector::insert(iterator, x) called with an iterator not"
" referring to this vector");
#endif
@@ -1846,7 +1808,7 @@ typename vector<_Tp, _Allocator>::iterator
vector<_Tp, _Allocator>::insert(const_iterator __position, value_type&& __x)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__position) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__position)) == this,
"vector::insert(iterator, x) called with an iterator not"
" referring to this vector");
#endif
@@ -1879,7 +1841,7 @@ typename vector<_Tp, _Allocator>::iterator
vector<_Tp, _Allocator>::emplace(const_iterator __position, _Args&&... __args)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__position) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__position)) == this,
"vector::emplace(iterator, x) called with an iterator not"
" referring to this vector");
#endif
@@ -1914,7 +1876,7 @@ typename vector<_Tp, _Allocator>::iterator
vector<_Tp, _Allocator>::insert(const_iterator __position, size_type __n, const_reference __x)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__position) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__position)) == this,
"vector::insert(iterator, n, x) called with an iterator not"
" referring to this vector");
#endif
@@ -1965,7 +1927,7 @@ typename enable_if
vector<_Tp, _Allocator>::insert(const_iterator __position, _InputIterator __first, _InputIterator __last)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__position) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__position)) == this,
"vector::insert(iterator, range) called with an iterator not"
" referring to this vector");
#endif
@@ -2018,7 +1980,7 @@ typename enable_if
vector<_Tp, _Allocator>::insert(const_iterator __position, _ForwardIterator __first, _ForwardIterator __last)
{
#if _LIBCPP_DEBUG_LEVEL == 2
- _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(&__position) == this,
+ _LIBCPP_ASSERT(__get_const_db()->__find_c_from_i(_VSTD::addressof(__position)) == this,
"vector::insert(iterator, range) called with an iterator not"
" referring to this vector");
#endif
@@ -2116,7 +2078,7 @@ vector<_Tp, _Allocator>::swap(vector& __x)
_VSTD::__swap_allocator(this->__alloc(), __x.__alloc(),
integral_constant<bool,__alloc_traits::propagate_on_container_swap::value>());
#if _LIBCPP_DEBUG_LEVEL == 2
- __get_db()->swap(this, &__x);
+ __get_db()->swap(this, _VSTD::addressof(__x));
#endif
}
@@ -3016,7 +2978,7 @@ vector<bool, _Allocator>::assign(size_type __n, const value_type& __x)
__size_ = __n;
else
{
- vector __v(__alloc());
+ vector __v(get_allocator());
__v.reserve(__recommend(__n));
__v.__size_ = __n;
swap(__v);
@@ -3071,7 +3033,9 @@ vector<bool, _Allocator>::reserve(size_type __n)
{
if (__n > capacity())
{
- vector __v(this->__alloc());
+ if (__n > max_size())
+ this->__throw_length_error();
+ vector __v(this->get_allocator());
__v.__vallocate(__n);
__v.__construct_at_end(this->begin(), this->end());
swap(__v);
@@ -3141,7 +3105,7 @@ vector<bool, _Allocator>::insert(const_iterator __position, const value_type& __
}
else
{
- vector __v(__alloc());
+ vector __v(get_allocator());
__v.reserve(__recommend(__size_ + 1));
__v.__size_ = __size_ + 1;
__r = _VSTD::copy(cbegin(), __position, __v.begin());
@@ -3167,7 +3131,7 @@ vector<bool, _Allocator>::insert(const_iterator __position, size_type __n, const
}
else
{
- vector __v(__alloc());
+ vector __v(get_allocator());
__v.reserve(__recommend(__size_ + __n));
__v.__size_ = __size_ + __n;
__r = _VSTD::copy(cbegin(), __position, __v.begin());
@@ -3196,7 +3160,7 @@ vector<bool, _Allocator>::insert(const_iterator __position, _InputIterator __fir
++this->__size_;
back() = *__first;
}
- vector __v(__alloc());
+ vector __v(get_allocator());
if (__first != __last)
{
#ifndef _LIBCPP_NO_EXCEPTIONS
@@ -3246,7 +3210,7 @@ vector<bool, _Allocator>::insert(const_iterator __position, _ForwardIterator __f
}
else
{
- vector __v(__alloc());
+ vector __v(get_allocator());
__v.reserve(__recommend(__size_ + __n));
__v.__size_ = __size_ + __n;
__r = _VSTD::copy(cbegin(), __position, __v.begin());
@@ -3313,7 +3277,7 @@ vector<bool, _Allocator>::resize(size_type __sz, value_type __x)
}
else
{
- vector __v(__alloc());
+ vector __v(get_allocator());
__v.reserve(__recommend(__size_ + __n));
__v.__size_ = __size_ + __n;
__r = _VSTD::copy(cbegin(), cend(), __v.begin());
diff --git a/contrib/libs/cxxsupp/libcxx/src/locale.cpp b/contrib/libs/cxxsupp/libcxx/src/locale.cpp
index 42b5641b43..ec8a811262 100644
--- a/contrib/libs/cxxsupp/libcxx/src/locale.cpp
+++ b/contrib/libs/cxxsupp/libcxx/src/locale.cpp
@@ -4561,6 +4561,18 @@ static bool checked_string_to_wchar_convert(wchar_t& dest,
}
#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
+#ifdef _LIBCPP_HAS_NO_WIDE_CHARACTERS
+static bool is_narrow_non_breaking_space(const char* ptr) {
+ // https://www.fileformat.info/info/unicode/char/202f/index.htm
+ return ptr[0] == '\xe2' && ptr[1] == '\x80' && ptr[2] == '\xaf';
+}
+
+static bool is_non_breaking_space(const char* ptr) {
+ // https://www.fileformat.info/info/unicode/char/0a/index.htm
+ return ptr[0] == '\xc2' && ptr[1] == '\xa0';
+}
+#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
+
static bool checked_string_to_char_convert(char& dest,
const char* ptr,
locale_t __loc) {
@@ -4593,6 +4605,13 @@ static bool checked_string_to_char_convert(char& dest,
return false;
}
#else // _LIBCPP_HAS_NO_WIDE_CHARACTERS
+ // FIXME: Work around specific multibyte sequences that we can reasonably
+ // translate into a different single byte.
+ if (is_narrow_non_breaking_space(ptr) || is_non_breaking_space(ptr)) {
+ dest = ' ';
+ return true;
+ }
+
return false;
#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
_LIBCPP_UNREACHABLE();
diff --git a/contrib/libs/cxxsupp/libcxx/src/memory.cpp b/contrib/libs/cxxsupp/libcxx/src/memory.cpp
index f9e8d44842..29b3c1da76 100644
--- a/contrib/libs/cxxsupp/libcxx/src/memory.cpp
+++ b/contrib/libs/cxxsupp/libcxx/src/memory.cpp
@@ -215,27 +215,6 @@ __get_sp_mut(const void* p)
#endif // !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
-void
-declare_reachable(void*)
-{
-}
-
-void
-declare_no_pointers(char*, size_t)
-{
-}
-
-void
-undeclare_no_pointers(char*, size_t)
-{
-}
-
-void*
-__undeclare_reachable(void* p)
-{
- return p;
-}
-
void*
align(size_t alignment, size_t size, void*& ptr, size_t& space)
{
diff --git a/contrib/libs/cxxsupp/libcxx/src/support/win32/thread_win32.cpp b/contrib/libs/cxxsupp/libcxx/src/support/win32/thread_win32.cpp
index 9506822da8..f2072b1435 100644
--- a/contrib/libs/cxxsupp/libcxx/src/support/win32/thread_win32.cpp
+++ b/contrib/libs/cxxsupp/libcxx/src/support/win32/thread_win32.cpp
@@ -38,9 +38,6 @@ static_assert(alignof(__libcpp_thread_t) == alignof(HANDLE), "");
static_assert(sizeof(__libcpp_tls_key) == sizeof(DWORD), "");
static_assert(alignof(__libcpp_tls_key) == alignof(DWORD), "");
-static_assert(sizeof(__libcpp_semaphore_t) == sizeof(HANDLE), "");
-static_assert(alignof(__libcpp_semaphore_t) == alignof(HANDLE), "");
-
// Mutex
int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t *__m)
{
@@ -274,37 +271,4 @@ int __libcpp_tls_set(__libcpp_tls_key __key, void *__p)
return 0;
}
-// Semaphores
-bool __libcpp_semaphore_init(__libcpp_semaphore_t* __sem, int __init)
-{
- *(PHANDLE)__sem = CreateSemaphoreEx(nullptr, __init, _LIBCPP_SEMAPHORE_MAX,
- nullptr, 0, SEMAPHORE_ALL_ACCESS);
- return *__sem != nullptr;
-}
-
-bool __libcpp_semaphore_destroy(__libcpp_semaphore_t* __sem)
-{
- CloseHandle(*(PHANDLE)__sem);
- return true;
-}
-
-bool __libcpp_semaphore_post(__libcpp_semaphore_t* __sem)
-{
- return ReleaseSemaphore(*(PHANDLE)__sem, 1, nullptr);
-}
-
-bool __libcpp_semaphore_wait(__libcpp_semaphore_t* __sem)
-{
- return WaitForSingleObjectEx(*(PHANDLE)__sem, INFINITE, false) ==
- WAIT_OBJECT_0;
-}
-
-bool __libcpp_semaphore_wait_timed(__libcpp_semaphore_t* __sem,
- chrono::nanoseconds const& __ns)
-{
- chrono::milliseconds __ms = chrono::ceil<chrono::milliseconds>(__ns);
- return WaitForSingleObjectEx(*(PHANDLE)__sem, __ms.count(), false) ==
- WAIT_OBJECT_0;
-}
-
_LIBCPP_END_NAMESPACE_STD
diff --git a/contrib/libs/lzmasdk/7zStream.c b/contrib/libs/lzmasdk/7zStream.c
index 6b5aa1621d..579741fadc 100644
--- a/contrib/libs/lzmasdk/7zStream.c
+++ b/contrib/libs/lzmasdk/7zStream.c
@@ -1,176 +1,176 @@
-/* 7zStream.c -- 7z Stream functions
-2017-04-03 : Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include <string.h>
-
-#include "7zTypes.h"
-
-SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType)
-{
- while (size != 0)
- {
- size_t processed = size;
- RINOK(ISeqInStream_Read(stream, buf, &processed));
- if (processed == 0)
- return errorType;
- buf = (void *)((Byte *)buf + processed);
- size -= processed;
- }
- return SZ_OK;
-}
-
-SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size)
-{
- return SeqInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF);
-}
-
-SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf)
-{
- size_t processed = 1;
- RINOK(ISeqInStream_Read(stream, buf, &processed));
- return (processed == 1) ? SZ_OK : SZ_ERROR_INPUT_EOF;
-}
-
-
-
-SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset)
-{
- Int64 t = offset;
- return ILookInStream_Seek(stream, &t, SZ_SEEK_SET);
-}
-
-SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size)
-{
- const void *lookBuf;
- if (*size == 0)
- return SZ_OK;
- RINOK(ILookInStream_Look(stream, &lookBuf, size));
- memcpy(buf, lookBuf, *size);
- return ILookInStream_Skip(stream, *size);
-}
-
-SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType)
-{
- while (size != 0)
- {
- size_t processed = size;
- RINOK(ILookInStream_Read(stream, buf, &processed));
- if (processed == 0)
- return errorType;
- buf = (void *)((Byte *)buf + processed);
- size -= processed;
- }
- return SZ_OK;
-}
-
-SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size)
-{
- return LookInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF);
-}
-
-
-
-#define GET_LookToRead2 CLookToRead2 *p = CONTAINER_FROM_VTBL(pp, CLookToRead2, vt);
-
-static SRes LookToRead2_Look_Lookahead(const ILookInStream *pp, const void **buf, size_t *size)
-{
- SRes res = SZ_OK;
- GET_LookToRead2
- size_t size2 = p->size - p->pos;
- if (size2 == 0 && *size != 0)
- {
- p->pos = 0;
- p->size = 0;
- size2 = p->bufSize;
- res = ISeekInStream_Read(p->realStream, p->buf, &size2);
- p->size = size2;
- }
- if (*size > size2)
- *size = size2;
- *buf = p->buf + p->pos;
- return res;
-}
-
-static SRes LookToRead2_Look_Exact(const ILookInStream *pp, const void **buf, size_t *size)
-{
- SRes res = SZ_OK;
- GET_LookToRead2
- size_t size2 = p->size - p->pos;
- if (size2 == 0 && *size != 0)
- {
- p->pos = 0;
- p->size = 0;
- if (*size > p->bufSize)
- *size = p->bufSize;
- res = ISeekInStream_Read(p->realStream, p->buf, size);
- size2 = p->size = *size;
- }
- if (*size > size2)
- *size = size2;
- *buf = p->buf + p->pos;
- return res;
-}
-
-static SRes LookToRead2_Skip(const ILookInStream *pp, size_t offset)
-{
- GET_LookToRead2
- p->pos += offset;
- return SZ_OK;
-}
-
-static SRes LookToRead2_Read(const ILookInStream *pp, void *buf, size_t *size)
-{
- GET_LookToRead2
- size_t rem = p->size - p->pos;
- if (rem == 0)
- return ISeekInStream_Read(p->realStream, buf, size);
- if (rem > *size)
- rem = *size;
- memcpy(buf, p->buf + p->pos, rem);
- p->pos += rem;
- *size = rem;
- return SZ_OK;
-}
-
-static SRes LookToRead2_Seek(const ILookInStream *pp, Int64 *pos, ESzSeek origin)
-{
- GET_LookToRead2
- p->pos = p->size = 0;
- return ISeekInStream_Seek(p->realStream, pos, origin);
-}
-
-void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead)
-{
- p->vt.Look = lookahead ?
- LookToRead2_Look_Lookahead :
- LookToRead2_Look_Exact;
- p->vt.Skip = LookToRead2_Skip;
- p->vt.Read = LookToRead2_Read;
- p->vt.Seek = LookToRead2_Seek;
-}
-
-
-
-static SRes SecToLook_Read(const ISeqInStream *pp, void *buf, size_t *size)
-{
- CSecToLook *p = CONTAINER_FROM_VTBL(pp, CSecToLook, vt);
- return LookInStream_LookRead(p->realStream, buf, size);
-}
-
-void SecToLook_CreateVTable(CSecToLook *p)
-{
- p->vt.Read = SecToLook_Read;
-}
-
-static SRes SecToRead_Read(const ISeqInStream *pp, void *buf, size_t *size)
-{
- CSecToRead *p = CONTAINER_FROM_VTBL(pp, CSecToRead, vt);
- return ILookInStream_Read(p->realStream, buf, size);
-}
-
-void SecToRead_CreateVTable(CSecToRead *p)
-{
- p->vt.Read = SecToRead_Read;
-}
+/* 7zStream.c -- 7z Stream functions
+2017-04-03 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include <string.h>
+
+#include "7zTypes.h"
+
+SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType)
+{
+ while (size != 0)
+ {
+ size_t processed = size;
+ RINOK(ISeqInStream_Read(stream, buf, &processed));
+ if (processed == 0)
+ return errorType;
+ buf = (void *)((Byte *)buf + processed);
+ size -= processed;
+ }
+ return SZ_OK;
+}
+
+SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size)
+{
+ return SeqInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF);
+}
+
+SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf)
+{
+ size_t processed = 1;
+ RINOK(ISeqInStream_Read(stream, buf, &processed));
+ return (processed == 1) ? SZ_OK : SZ_ERROR_INPUT_EOF;
+}
+
+
+
+SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset)
+{
+ Int64 t = offset;
+ return ILookInStream_Seek(stream, &t, SZ_SEEK_SET);
+}
+
+SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size)
+{
+ const void *lookBuf;
+ if (*size == 0)
+ return SZ_OK;
+ RINOK(ILookInStream_Look(stream, &lookBuf, size));
+ memcpy(buf, lookBuf, *size);
+ return ILookInStream_Skip(stream, *size);
+}
+
+SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType)
+{
+ while (size != 0)
+ {
+ size_t processed = size;
+ RINOK(ILookInStream_Read(stream, buf, &processed));
+ if (processed == 0)
+ return errorType;
+ buf = (void *)((Byte *)buf + processed);
+ size -= processed;
+ }
+ return SZ_OK;
+}
+
+SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size)
+{
+ return LookInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF);
+}
+
+
+
+#define GET_LookToRead2 CLookToRead2 *p = CONTAINER_FROM_VTBL(pp, CLookToRead2, vt);
+
+static SRes LookToRead2_Look_Lookahead(const ILookInStream *pp, const void **buf, size_t *size)
+{
+ SRes res = SZ_OK;
+ GET_LookToRead2
+ size_t size2 = p->size - p->pos;
+ if (size2 == 0 && *size != 0)
+ {
+ p->pos = 0;
+ p->size = 0;
+ size2 = p->bufSize;
+ res = ISeekInStream_Read(p->realStream, p->buf, &size2);
+ p->size = size2;
+ }
+ if (*size > size2)
+ *size = size2;
+ *buf = p->buf + p->pos;
+ return res;
+}
+
+static SRes LookToRead2_Look_Exact(const ILookInStream *pp, const void **buf, size_t *size)
+{
+ SRes res = SZ_OK;
+ GET_LookToRead2
+ size_t size2 = p->size - p->pos;
+ if (size2 == 0 && *size != 0)
+ {
+ p->pos = 0;
+ p->size = 0;
+ if (*size > p->bufSize)
+ *size = p->bufSize;
+ res = ISeekInStream_Read(p->realStream, p->buf, size);
+ size2 = p->size = *size;
+ }
+ if (*size > size2)
+ *size = size2;
+ *buf = p->buf + p->pos;
+ return res;
+}
+
+static SRes LookToRead2_Skip(const ILookInStream *pp, size_t offset)
+{
+ GET_LookToRead2
+ p->pos += offset;
+ return SZ_OK;
+}
+
+static SRes LookToRead2_Read(const ILookInStream *pp, void *buf, size_t *size)
+{
+ GET_LookToRead2
+ size_t rem = p->size - p->pos;
+ if (rem == 0)
+ return ISeekInStream_Read(p->realStream, buf, size);
+ if (rem > *size)
+ rem = *size;
+ memcpy(buf, p->buf + p->pos, rem);
+ p->pos += rem;
+ *size = rem;
+ return SZ_OK;
+}
+
+static SRes LookToRead2_Seek(const ILookInStream *pp, Int64 *pos, ESzSeek origin)
+{
+ GET_LookToRead2
+ p->pos = p->size = 0;
+ return ISeekInStream_Seek(p->realStream, pos, origin);
+}
+
+void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead)
+{
+ p->vt.Look = lookahead ?
+ LookToRead2_Look_Lookahead :
+ LookToRead2_Look_Exact;
+ p->vt.Skip = LookToRead2_Skip;
+ p->vt.Read = LookToRead2_Read;
+ p->vt.Seek = LookToRead2_Seek;
+}
+
+
+
+static SRes SecToLook_Read(const ISeqInStream *pp, void *buf, size_t *size)
+{
+ CSecToLook *p = CONTAINER_FROM_VTBL(pp, CSecToLook, vt);
+ return LookInStream_LookRead(p->realStream, buf, size);
+}
+
+void SecToLook_CreateVTable(CSecToLook *p)
+{
+ p->vt.Read = SecToLook_Read;
+}
+
+static SRes SecToRead_Read(const ISeqInStream *pp, void *buf, size_t *size)
+{
+ CSecToRead *p = CONTAINER_FROM_VTBL(pp, CSecToRead, vt);
+ return ILookInStream_Read(p->realStream, buf, size);
+}
+
+void SecToRead_CreateVTable(CSecToRead *p)
+{
+ p->vt.Read = SecToRead_Read;
+}
diff --git a/contrib/libs/lzmasdk/7zTypes.h b/contrib/libs/lzmasdk/7zTypes.h
index 65b3af63c7..593f5aa259 100644
--- a/contrib/libs/lzmasdk/7zTypes.h
+++ b/contrib/libs/lzmasdk/7zTypes.h
@@ -1,375 +1,375 @@
-/* 7zTypes.h -- Basic types
-2018-08-04 : Igor Pavlov : Public domain */
-
-#ifndef __7Z_TYPES_H
-#define __7Z_TYPES_H
-
-#ifdef _WIN32
-/* #include <windows.h> */
-#endif
-
-#include <stddef.h>
-
-#ifndef EXTERN_C_BEGIN
-#ifdef __cplusplus
-#define EXTERN_C_BEGIN extern "C" {
-#define EXTERN_C_END }
-#else
-#define EXTERN_C_BEGIN
-#define EXTERN_C_END
-#endif
-#endif
-
-EXTERN_C_BEGIN
-
-#define SZ_OK 0
-
-#define SZ_ERROR_DATA 1
-#define SZ_ERROR_MEM 2
-#define SZ_ERROR_CRC 3
-#define SZ_ERROR_UNSUPPORTED 4
-#define SZ_ERROR_PARAM 5
-#define SZ_ERROR_INPUT_EOF 6
-#define SZ_ERROR_OUTPUT_EOF 7
-#define SZ_ERROR_READ 8
-#define SZ_ERROR_WRITE 9
-#define SZ_ERROR_PROGRESS 10
-#define SZ_ERROR_FAIL 11
-#define SZ_ERROR_THREAD 12
-
-#define SZ_ERROR_ARCHIVE 16
-#define SZ_ERROR_NO_ARCHIVE 17
-
-typedef int SRes;
-
-
-#ifdef _WIN32
-
-/* typedef DWORD WRes; */
-typedef unsigned WRes;
-#define MY_SRes_HRESULT_FROM_WRes(x) HRESULT_FROM_WIN32(x)
-
-#else
-
-typedef int WRes;
-#define MY__FACILITY_WIN32 7
-#define MY__FACILITY__WRes MY__FACILITY_WIN32
-#define MY_SRes_HRESULT_FROM_WRes(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (MY__FACILITY__WRes << 16) | 0x80000000)))
-
-#endif
-
-
-#ifndef RINOK
-#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }
-#endif
-
-typedef unsigned char Byte;
-typedef short Int16;
-typedef unsigned short UInt16;
-
-#ifdef _LZMA_UINT32_IS_ULONG
-typedef long Int32;
-typedef unsigned long UInt32;
-#else
-typedef int Int32;
-typedef unsigned int UInt32;
-#endif
-
-#ifdef _SZ_NO_INT_64
-
-/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
- NOTES: Some code will work incorrectly in that case! */
-
-typedef long Int64;
-typedef unsigned long UInt64;
-
-#else
-
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-typedef __int64 Int64;
-typedef unsigned __int64 UInt64;
-#define UINT64_CONST(n) n
-#else
-typedef long long int Int64;
-typedef unsigned long long int UInt64;
-#define UINT64_CONST(n) n ## ULL
-#endif
-
-#endif
-
-#ifdef _LZMA_NO_SYSTEM_SIZE_T
-typedef UInt32 SizeT;
-#else
-typedef size_t SizeT;
-#endif
-
-typedef int BoolInt;
-/* typedef BoolInt Bool; */
-#define True 1
-#define False 0
-
-
-#ifdef _WIN32
-#define MY_STD_CALL __stdcall
-#else
-#define MY_STD_CALL
-#endif
-
-#ifdef _MSC_VER
-
-#if _MSC_VER >= 1300
-#define MY_NO_INLINE __declspec(noinline)
-#else
-#define MY_NO_INLINE
-#endif
-
-#define MY_FORCE_INLINE __forceinline
-
-#define MY_CDECL __cdecl
-#define MY_FAST_CALL __fastcall
-
-#else
-
-#define MY_NO_INLINE
-#define MY_FORCE_INLINE
-#define MY_CDECL
-#define MY_FAST_CALL
-
-/* inline keyword : for C++ / C99 */
-
-/* GCC, clang: */
-/*
-#if defined (__GNUC__) && (__GNUC__ >= 4)
-#define MY_FORCE_INLINE __attribute__((always_inline))
-#define MY_NO_INLINE __attribute__((noinline))
-#endif
-*/
-
-#endif
-
-
-/* The following interfaces use first parameter as pointer to structure */
-
-typedef struct IByteIn IByteIn;
-struct IByteIn
-{
- Byte (*Read)(const IByteIn *p); /* reads one byte, returns 0 in case of EOF or error */
-};
-#define IByteIn_Read(p) (p)->Read(p)
-
-
-typedef struct IByteOut IByteOut;
-struct IByteOut
-{
- void (*Write)(const IByteOut *p, Byte b);
-};
-#define IByteOut_Write(p, b) (p)->Write(p, b)
-
-
-typedef struct ISeqInStream ISeqInStream;
-struct ISeqInStream
-{
- SRes (*Read)(const ISeqInStream *p, void *buf, size_t *size);
- /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
- (output(*size) < input(*size)) is allowed */
-};
-#define ISeqInStream_Read(p, buf, size) (p)->Read(p, buf, size)
-
-/* it can return SZ_ERROR_INPUT_EOF */
-SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size);
-SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType);
-SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf);
-
-
-typedef struct ISeqOutStream ISeqOutStream;
-struct ISeqOutStream
-{
- size_t (*Write)(const ISeqOutStream *p, const void *buf, size_t size);
- /* Returns: result - the number of actually written bytes.
- (result < size) means error */
-};
-#define ISeqOutStream_Write(p, buf, size) (p)->Write(p, buf, size)
-
-typedef enum
-{
- SZ_SEEK_SET = 0,
- SZ_SEEK_CUR = 1,
- SZ_SEEK_END = 2
-} ESzSeek;
-
-
-typedef struct ISeekInStream ISeekInStream;
-struct ISeekInStream
-{
- SRes (*Read)(const ISeekInStream *p, void *buf, size_t *size); /* same as ISeqInStream::Read */
- SRes (*Seek)(const ISeekInStream *p, Int64 *pos, ESzSeek origin);
-};
-#define ISeekInStream_Read(p, buf, size) (p)->Read(p, buf, size)
-#define ISeekInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)
-
-
-typedef struct ILookInStream ILookInStream;
-struct ILookInStream
-{
- SRes (*Look)(const ILookInStream *p, const void **buf, size_t *size);
- /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
- (output(*size) > input(*size)) is not allowed
- (output(*size) < input(*size)) is allowed */
- SRes (*Skip)(const ILookInStream *p, size_t offset);
- /* offset must be <= output(*size) of Look */
-
- SRes (*Read)(const ILookInStream *p, void *buf, size_t *size);
- /* reads directly (without buffer). It's same as ISeqInStream::Read */
- SRes (*Seek)(const ILookInStream *p, Int64 *pos, ESzSeek origin);
-};
-
-#define ILookInStream_Look(p, buf, size) (p)->Look(p, buf, size)
-#define ILookInStream_Skip(p, offset) (p)->Skip(p, offset)
-#define ILookInStream_Read(p, buf, size) (p)->Read(p, buf, size)
-#define ILookInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)
-
-
-SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size);
-SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset);
-
-/* reads via ILookInStream::Read */
-SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType);
-SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size);
-
-
-
-typedef struct
-{
- ILookInStream vt;
- const ISeekInStream *realStream;
-
- size_t pos;
- size_t size; /* it's data size */
-
- /* the following variables must be set outside */
- Byte *buf;
- size_t bufSize;
-} CLookToRead2;
-
-void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead);
-
-#define LookToRead2_Init(p) { (p)->pos = (p)->size = 0; }
-
-
-typedef struct
-{
- ISeqInStream vt;
- const ILookInStream *realStream;
-} CSecToLook;
-
-void SecToLook_CreateVTable(CSecToLook *p);
-
-
-
-typedef struct
-{
- ISeqInStream vt;
- const ILookInStream *realStream;
-} CSecToRead;
-
-void SecToRead_CreateVTable(CSecToRead *p);
-
-
-typedef struct ICompressProgress ICompressProgress;
-
-struct ICompressProgress
-{
- SRes (*Progress)(const ICompressProgress *p, UInt64 inSize, UInt64 outSize);
- /* Returns: result. (result != SZ_OK) means break.
- Value (UInt64)(Int64)-1 for size means unknown value. */
-};
-#define ICompressProgress_Progress(p, inSize, outSize) (p)->Progress(p, inSize, outSize)
-
-
-
-typedef struct ISzAlloc ISzAlloc;
-typedef const ISzAlloc * ISzAllocPtr;
-
-struct ISzAlloc
-{
- void *(*Alloc)(ISzAllocPtr p, size_t size);
- void (*Free)(ISzAllocPtr p, void *address); /* address can be 0 */
-};
-
-#define ISzAlloc_Alloc(p, size) (p)->Alloc(p, size)
-#define ISzAlloc_Free(p, a) (p)->Free(p, a)
-
-/* deprecated */
-#define IAlloc_Alloc(p, size) ISzAlloc_Alloc(p, size)
-#define IAlloc_Free(p, a) ISzAlloc_Free(p, a)
-
-
-
-
-
-#ifndef MY_offsetof
- #ifdef offsetof
- #define MY_offsetof(type, m) offsetof(type, m)
- /*
- #define MY_offsetof(type, m) FIELD_OFFSET(type, m)
- */
- #else
- #define MY_offsetof(type, m) ((size_t)&(((type *)0)->m))
- #endif
-#endif
-
-
-
-#ifndef MY_container_of
-
-/*
-#define MY_container_of(ptr, type, m) container_of(ptr, type, m)
-#define MY_container_of(ptr, type, m) CONTAINING_RECORD(ptr, type, m)
-#define MY_container_of(ptr, type, m) ((type *)((char *)(ptr) - offsetof(type, m)))
-#define MY_container_of(ptr, type, m) (&((type *)0)->m == (ptr), ((type *)(((char *)(ptr)) - MY_offsetof(type, m))))
-*/
-
-/*
- GCC shows warning: "perhaps the 'offsetof' macro was used incorrectly"
- GCC 3.4.4 : classes with constructor
- GCC 4.8.1 : classes with non-public variable members"
-*/
-
-#define MY_container_of(ptr, type, m) ((type *)((char *)(1 ? (ptr) : &((type *)0)->m) - MY_offsetof(type, m)))
-
-
-#endif
-
-#define CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ((type *)(ptr))
-
-/*
-#define CONTAINER_FROM_VTBL(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)
-*/
-#define CONTAINER_FROM_VTBL(ptr, type, m) MY_container_of(ptr, type, m)
-
-#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)
-/*
-#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL(ptr, type, m)
-*/
-
-
-
-#ifdef _WIN32
-
-#define CHAR_PATH_SEPARATOR '\\'
-#define WCHAR_PATH_SEPARATOR L'\\'
-#define STRING_PATH_SEPARATOR "\\"
-#define WSTRING_PATH_SEPARATOR L"\\"
-
-#else
-
-#define CHAR_PATH_SEPARATOR '/'
-#define WCHAR_PATH_SEPARATOR L'/'
-#define STRING_PATH_SEPARATOR "/"
-#define WSTRING_PATH_SEPARATOR L"/"
-
-#endif
-
-EXTERN_C_END
-
-#endif
+/* 7zTypes.h -- Basic types
+2018-08-04 : Igor Pavlov : Public domain */
+
+#ifndef __7Z_TYPES_H
+#define __7Z_TYPES_H
+
+#ifdef _WIN32
+/* #include <windows.h> */
+#endif
+
+#include <stddef.h>
+
+#ifndef EXTERN_C_BEGIN
+#ifdef __cplusplus
+#define EXTERN_C_BEGIN extern "C" {
+#define EXTERN_C_END }
+#else
+#define EXTERN_C_BEGIN
+#define EXTERN_C_END
+#endif
+#endif
+
+EXTERN_C_BEGIN
+
+#define SZ_OK 0
+
+#define SZ_ERROR_DATA 1
+#define SZ_ERROR_MEM 2
+#define SZ_ERROR_CRC 3
+#define SZ_ERROR_UNSUPPORTED 4
+#define SZ_ERROR_PARAM 5
+#define SZ_ERROR_INPUT_EOF 6
+#define SZ_ERROR_OUTPUT_EOF 7
+#define SZ_ERROR_READ 8
+#define SZ_ERROR_WRITE 9
+#define SZ_ERROR_PROGRESS 10
+#define SZ_ERROR_FAIL 11
+#define SZ_ERROR_THREAD 12
+
+#define SZ_ERROR_ARCHIVE 16
+#define SZ_ERROR_NO_ARCHIVE 17
+
+typedef int SRes;
+
+
+#ifdef _WIN32
+
+/* typedef DWORD WRes; */
+typedef unsigned WRes;
+#define MY_SRes_HRESULT_FROM_WRes(x) HRESULT_FROM_WIN32(x)
+
+#else
+
+typedef int WRes;
+#define MY__FACILITY_WIN32 7
+#define MY__FACILITY__WRes MY__FACILITY_WIN32
+#define MY_SRes_HRESULT_FROM_WRes(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (MY__FACILITY__WRes << 16) | 0x80000000)))
+
+#endif
+
+
+#ifndef RINOK
+#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; }
+#endif
+
+typedef unsigned char Byte;
+typedef short Int16;
+typedef unsigned short UInt16;
+
+#ifdef _LZMA_UINT32_IS_ULONG
+typedef long Int32;
+typedef unsigned long UInt32;
+#else
+typedef int Int32;
+typedef unsigned int UInt32;
+#endif
+
+#ifdef _SZ_NO_INT_64
+
+/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers.
+ NOTES: Some code will work incorrectly in that case! */
+
+typedef long Int64;
+typedef unsigned long UInt64;
+
+#else
+
+#if defined(_MSC_VER) || defined(__BORLANDC__)
+typedef __int64 Int64;
+typedef unsigned __int64 UInt64;
+#define UINT64_CONST(n) n
+#else
+typedef long long int Int64;
+typedef unsigned long long int UInt64;
+#define UINT64_CONST(n) n ## ULL
+#endif
+
+#endif
+
+#ifdef _LZMA_NO_SYSTEM_SIZE_T
+typedef UInt32 SizeT;
+#else
+typedef size_t SizeT;
+#endif
+
+typedef int BoolInt;
+/* typedef BoolInt Bool; */
+#define True 1
+#define False 0
+
+
+#ifdef _WIN32
+#define MY_STD_CALL __stdcall
+#else
+#define MY_STD_CALL
+#endif
+
+#ifdef _MSC_VER
+
+#if _MSC_VER >= 1300
+#define MY_NO_INLINE __declspec(noinline)
+#else
+#define MY_NO_INLINE
+#endif
+
+#define MY_FORCE_INLINE __forceinline
+
+#define MY_CDECL __cdecl
+#define MY_FAST_CALL __fastcall
+
+#else
+
+#define MY_NO_INLINE
+#define MY_FORCE_INLINE
+#define MY_CDECL
+#define MY_FAST_CALL
+
+/* inline keyword : for C++ / C99 */
+
+/* GCC, clang: */
+/*
+#if defined (__GNUC__) && (__GNUC__ >= 4)
+#define MY_FORCE_INLINE __attribute__((always_inline))
+#define MY_NO_INLINE __attribute__((noinline))
+#endif
+*/
+
+#endif
+
+
+/* The following interfaces use first parameter as pointer to structure */
+
+typedef struct IByteIn IByteIn;
+struct IByteIn
+{
+ Byte (*Read)(const IByteIn *p); /* reads one byte, returns 0 in case of EOF or error */
+};
+#define IByteIn_Read(p) (p)->Read(p)
+
+
+typedef struct IByteOut IByteOut;
+struct IByteOut
+{
+ void (*Write)(const IByteOut *p, Byte b);
+};
+#define IByteOut_Write(p, b) (p)->Write(p, b)
+
+
+typedef struct ISeqInStream ISeqInStream;
+struct ISeqInStream
+{
+ SRes (*Read)(const ISeqInStream *p, void *buf, size_t *size);
+ /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
+ (output(*size) < input(*size)) is allowed */
+};
+#define ISeqInStream_Read(p, buf, size) (p)->Read(p, buf, size)
+
+/* it can return SZ_ERROR_INPUT_EOF */
+SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size);
+SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType);
+SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf);
+
+
+typedef struct ISeqOutStream ISeqOutStream;
+struct ISeqOutStream
+{
+ size_t (*Write)(const ISeqOutStream *p, const void *buf, size_t size);
+ /* Returns: result - the number of actually written bytes.
+ (result < size) means error */
+};
+#define ISeqOutStream_Write(p, buf, size) (p)->Write(p, buf, size)
+
+typedef enum
+{
+ SZ_SEEK_SET = 0,
+ SZ_SEEK_CUR = 1,
+ SZ_SEEK_END = 2
+} ESzSeek;
+
+
+typedef struct ISeekInStream ISeekInStream;
+struct ISeekInStream
+{
+ SRes (*Read)(const ISeekInStream *p, void *buf, size_t *size); /* same as ISeqInStream::Read */
+ SRes (*Seek)(const ISeekInStream *p, Int64 *pos, ESzSeek origin);
+};
+#define ISeekInStream_Read(p, buf, size) (p)->Read(p, buf, size)
+#define ISeekInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)
+
+
+typedef struct ILookInStream ILookInStream;
+struct ILookInStream
+{
+ SRes (*Look)(const ILookInStream *p, const void **buf, size_t *size);
+ /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream.
+ (output(*size) > input(*size)) is not allowed
+ (output(*size) < input(*size)) is allowed */
+ SRes (*Skip)(const ILookInStream *p, size_t offset);
+ /* offset must be <= output(*size) of Look */
+
+ SRes (*Read)(const ILookInStream *p, void *buf, size_t *size);
+ /* reads directly (without buffer). It's same as ISeqInStream::Read */
+ SRes (*Seek)(const ILookInStream *p, Int64 *pos, ESzSeek origin);
+};
+
+#define ILookInStream_Look(p, buf, size) (p)->Look(p, buf, size)
+#define ILookInStream_Skip(p, offset) (p)->Skip(p, offset)
+#define ILookInStream_Read(p, buf, size) (p)->Read(p, buf, size)
+#define ILookInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin)
+
+
+SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size);
+SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset);
+
+/* reads via ILookInStream::Read */
+SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType);
+SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size);
+
+
+
+typedef struct
+{
+ ILookInStream vt;
+ const ISeekInStream *realStream;
+
+ size_t pos;
+ size_t size; /* it's data size */
+
+ /* the following variables must be set outside */
+ Byte *buf;
+ size_t bufSize;
+} CLookToRead2;
+
+void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead);
+
+#define LookToRead2_Init(p) { (p)->pos = (p)->size = 0; }
+
+
+typedef struct
+{
+ ISeqInStream vt;
+ const ILookInStream *realStream;
+} CSecToLook;
+
+void SecToLook_CreateVTable(CSecToLook *p);
+
+
+
+typedef struct
+{
+ ISeqInStream vt;
+ const ILookInStream *realStream;
+} CSecToRead;
+
+void SecToRead_CreateVTable(CSecToRead *p);
+
+
+typedef struct ICompressProgress ICompressProgress;
+
+struct ICompressProgress
+{
+ SRes (*Progress)(const ICompressProgress *p, UInt64 inSize, UInt64 outSize);
+ /* Returns: result. (result != SZ_OK) means break.
+ Value (UInt64)(Int64)-1 for size means unknown value. */
+};
+#define ICompressProgress_Progress(p, inSize, outSize) (p)->Progress(p, inSize, outSize)
+
+
+
+typedef struct ISzAlloc ISzAlloc;
+typedef const ISzAlloc * ISzAllocPtr;
+
+struct ISzAlloc
+{
+ void *(*Alloc)(ISzAllocPtr p, size_t size);
+ void (*Free)(ISzAllocPtr p, void *address); /* address can be 0 */
+};
+
+#define ISzAlloc_Alloc(p, size) (p)->Alloc(p, size)
+#define ISzAlloc_Free(p, a) (p)->Free(p, a)
+
+/* deprecated */
+#define IAlloc_Alloc(p, size) ISzAlloc_Alloc(p, size)
+#define IAlloc_Free(p, a) ISzAlloc_Free(p, a)
+
+
+
+
+
+#ifndef MY_offsetof
+ #ifdef offsetof
+ #define MY_offsetof(type, m) offsetof(type, m)
+ /*
+ #define MY_offsetof(type, m) FIELD_OFFSET(type, m)
+ */
+ #else
+ #define MY_offsetof(type, m) ((size_t)&(((type *)0)->m))
+ #endif
+#endif
+
+
+
+#ifndef MY_container_of
+
+/*
+#define MY_container_of(ptr, type, m) container_of(ptr, type, m)
+#define MY_container_of(ptr, type, m) CONTAINING_RECORD(ptr, type, m)
+#define MY_container_of(ptr, type, m) ((type *)((char *)(ptr) - offsetof(type, m)))
+#define MY_container_of(ptr, type, m) (&((type *)0)->m == (ptr), ((type *)(((char *)(ptr)) - MY_offsetof(type, m))))
+*/
+
+/*
+ GCC shows warning: "perhaps the 'offsetof' macro was used incorrectly"
+ GCC 3.4.4 : classes with constructor
+ GCC 4.8.1 : classes with non-public variable members"
+*/
+
+#define MY_container_of(ptr, type, m) ((type *)((char *)(1 ? (ptr) : &((type *)0)->m) - MY_offsetof(type, m)))
+
+
+#endif
+
+#define CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ((type *)(ptr))
+
+/*
+#define CONTAINER_FROM_VTBL(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)
+*/
+#define CONTAINER_FROM_VTBL(ptr, type, m) MY_container_of(ptr, type, m)
+
+#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m)
+/*
+#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL(ptr, type, m)
+*/
+
+
+
+#ifdef _WIN32
+
+#define CHAR_PATH_SEPARATOR '\\'
+#define WCHAR_PATH_SEPARATOR L'\\'
+#define STRING_PATH_SEPARATOR "\\"
+#define WSTRING_PATH_SEPARATOR L"\\"
+
+#else
+
+#define CHAR_PATH_SEPARATOR '/'
+#define WCHAR_PATH_SEPARATOR L'/'
+#define STRING_PATH_SEPARATOR "/"
+#define WSTRING_PATH_SEPARATOR L"/"
+
+#endif
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/7zVersion.h b/contrib/libs/lzmasdk/7zVersion.h
index c176823a4d..0074c64be9 100644
--- a/contrib/libs/lzmasdk/7zVersion.h
+++ b/contrib/libs/lzmasdk/7zVersion.h
@@ -1,27 +1,27 @@
-#define MY_VER_MAJOR 19
-#define MY_VER_MINOR 00
-#define MY_VER_BUILD 0
-#define MY_VERSION_NUMBERS "19.00"
-#define MY_VERSION MY_VERSION_NUMBERS
-
-#ifdef MY_CPU_NAME
- #define MY_VERSION_CPU MY_VERSION " (" MY_CPU_NAME ")"
-#else
- #define MY_VERSION_CPU MY_VERSION
-#endif
-
-#define MY_DATE "2019-02-21"
-#undef MY_COPYRIGHT
-#undef MY_VERSION_COPYRIGHT_DATE
-#define MY_AUTHOR_NAME "Igor Pavlov"
-#define MY_COPYRIGHT_PD "Igor Pavlov : Public domain"
-#define MY_COPYRIGHT_CR "Copyright (c) 1999-2018 Igor Pavlov"
-
-#ifdef USE_COPYRIGHT_CR
- #define MY_COPYRIGHT MY_COPYRIGHT_CR
-#else
- #define MY_COPYRIGHT MY_COPYRIGHT_PD
-#endif
-
-#define MY_COPYRIGHT_DATE MY_COPYRIGHT " : " MY_DATE
-#define MY_VERSION_COPYRIGHT_DATE MY_VERSION_CPU " : " MY_COPYRIGHT " : " MY_DATE
+#define MY_VER_MAJOR 19
+#define MY_VER_MINOR 00
+#define MY_VER_BUILD 0
+#define MY_VERSION_NUMBERS "19.00"
+#define MY_VERSION MY_VERSION_NUMBERS
+
+#ifdef MY_CPU_NAME
+ #define MY_VERSION_CPU MY_VERSION " (" MY_CPU_NAME ")"
+#else
+ #define MY_VERSION_CPU MY_VERSION
+#endif
+
+#define MY_DATE "2019-02-21"
+#undef MY_COPYRIGHT
+#undef MY_VERSION_COPYRIGHT_DATE
+#define MY_AUTHOR_NAME "Igor Pavlov"
+#define MY_COPYRIGHT_PD "Igor Pavlov : Public domain"
+#define MY_COPYRIGHT_CR "Copyright (c) 1999-2018 Igor Pavlov"
+
+#ifdef USE_COPYRIGHT_CR
+ #define MY_COPYRIGHT MY_COPYRIGHT_CR
+#else
+ #define MY_COPYRIGHT MY_COPYRIGHT_PD
+#endif
+
+#define MY_COPYRIGHT_DATE MY_COPYRIGHT " : " MY_DATE
+#define MY_VERSION_COPYRIGHT_DATE MY_VERSION_CPU " : " MY_COPYRIGHT " : " MY_DATE
diff --git a/contrib/libs/lzmasdk/Aes.c b/contrib/libs/lzmasdk/Aes.c
index 1cdd0e787b..8f7d50ea24 100644
--- a/contrib/libs/lzmasdk/Aes.c
+++ b/contrib/libs/lzmasdk/Aes.c
@@ -1,306 +1,306 @@
-/* Aes.c -- AES encryption / decryption
-2017-01-24 : Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include "Aes.h"
-#include "CpuArch.h"
-
-static UInt32 T[256 * 4];
-static const Byte Sbox[256] = {
- 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
- 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
- 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
- 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
- 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
- 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
- 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
- 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
- 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
- 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
- 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
- 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
- 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
- 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
- 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
- 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16};
-
-void MY_FAST_CALL AesCbc_Encode(UInt32 *ivAes, Byte *data, size_t numBlocks);
-void MY_FAST_CALL AesCbc_Decode(UInt32 *ivAes, Byte *data, size_t numBlocks);
-void MY_FAST_CALL AesCtr_Code(UInt32 *ivAes, Byte *data, size_t numBlocks);
-
-void MY_FAST_CALL AesCbc_Encode_Intel(UInt32 *ivAes, Byte *data, size_t numBlocks);
-void MY_FAST_CALL AesCbc_Decode_Intel(UInt32 *ivAes, Byte *data, size_t numBlocks);
-void MY_FAST_CALL AesCtr_Code_Intel(UInt32 *ivAes, Byte *data, size_t numBlocks);
-
-AES_CODE_FUNC g_AesCbc_Encode;
-AES_CODE_FUNC g_AesCbc_Decode;
-AES_CODE_FUNC g_AesCtr_Code;
-
-static UInt32 D[256 * 4];
-static Byte InvS[256];
-
-static const Byte Rcon[11] = { 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 };
-
-#define xtime(x) ((((x) << 1) ^ (((x) & 0x80) != 0 ? 0x1B : 0)) & 0xFF)
-
-#define Ui32(a0, a1, a2, a3) ((UInt32)(a0) | ((UInt32)(a1) << 8) | ((UInt32)(a2) << 16) | ((UInt32)(a3) << 24))
-
-#define gb0(x) ( (x) & 0xFF)
-#define gb1(x) (((x) >> ( 8)) & 0xFF)
-#define gb2(x) (((x) >> (16)) & 0xFF)
-#define gb3(x) (((x) >> (24)))
-
-#define gb(n, x) gb ## n(x)
-
-#define TT(x) (T + (x << 8))
-#define DD(x) (D + (x << 8))
-
-
-void AesGenTables(void)
-{
- unsigned i;
- for (i = 0; i < 256; i++)
- InvS[Sbox[i]] = (Byte)i;
-
- for (i = 0; i < 256; i++)
- {
- {
- UInt32 a1 = Sbox[i];
- UInt32 a2 = xtime(a1);
- UInt32 a3 = a2 ^ a1;
- TT(0)[i] = Ui32(a2, a1, a1, a3);
- TT(1)[i] = Ui32(a3, a2, a1, a1);
- TT(2)[i] = Ui32(a1, a3, a2, a1);
- TT(3)[i] = Ui32(a1, a1, a3, a2);
- }
- {
- UInt32 a1 = InvS[i];
- UInt32 a2 = xtime(a1);
- UInt32 a4 = xtime(a2);
- UInt32 a8 = xtime(a4);
- UInt32 a9 = a8 ^ a1;
- UInt32 aB = a8 ^ a2 ^ a1;
- UInt32 aD = a8 ^ a4 ^ a1;
- UInt32 aE = a8 ^ a4 ^ a2;
- DD(0)[i] = Ui32(aE, a9, aD, aB);
- DD(1)[i] = Ui32(aB, aE, a9, aD);
- DD(2)[i] = Ui32(aD, aB, aE, a9);
- DD(3)[i] = Ui32(a9, aD, aB, aE);
- }
- }
-
- g_AesCbc_Encode = AesCbc_Encode;
- g_AesCbc_Decode = AesCbc_Decode;
- g_AesCtr_Code = AesCtr_Code;
-
- #ifdef MY_CPU_X86_OR_AMD64
- if (CPU_Is_Aes_Supported())
- {
- g_AesCbc_Encode = AesCbc_Encode_Intel;
- g_AesCbc_Decode = AesCbc_Decode_Intel;
- g_AesCtr_Code = AesCtr_Code_Intel;
- }
- #endif
-}
-
-
-#define HT(i, x, s) TT(x)[gb(x, s[(i + x) & 3])]
-
-#define HT4(m, i, s, p) m[i] = \
- HT(i, 0, s) ^ \
- HT(i, 1, s) ^ \
- HT(i, 2, s) ^ \
- HT(i, 3, s) ^ w[p + i]
-
-#define HT16(m, s, p) \
- HT4(m, 0, s, p); \
- HT4(m, 1, s, p); \
- HT4(m, 2, s, p); \
- HT4(m, 3, s, p); \
-
-#define FT(i, x) Sbox[gb(x, m[(i + x) & 3])]
-#define FT4(i) dest[i] = Ui32(FT(i, 0), FT(i, 1), FT(i, 2), FT(i, 3)) ^ w[i];
-
-
-#define HD(i, x, s) DD(x)[gb(x, s[(i - x) & 3])]
-
-#define HD4(m, i, s, p) m[i] = \
- HD(i, 0, s) ^ \
- HD(i, 1, s) ^ \
- HD(i, 2, s) ^ \
- HD(i, 3, s) ^ w[p + i];
-
-#define HD16(m, s, p) \
- HD4(m, 0, s, p); \
- HD4(m, 1, s, p); \
- HD4(m, 2, s, p); \
- HD4(m, 3, s, p); \
-
-#define FD(i, x) InvS[gb(x, m[(i - x) & 3])]
-#define FD4(i) dest[i] = Ui32(FD(i, 0), FD(i, 1), FD(i, 2), FD(i, 3)) ^ w[i];
-
-void MY_FAST_CALL Aes_SetKey_Enc(UInt32 *w, const Byte *key, unsigned keySize)
-{
- unsigned i, wSize;
- wSize = keySize + 28;
- keySize /= 4;
- w[0] = ((UInt32)keySize / 2) + 3;
- w += 4;
-
- for (i = 0; i < keySize; i++, key += 4)
- w[i] = GetUi32(key);
-
- for (; i < wSize; i++)
- {
- UInt32 t = w[(size_t)i - 1];
- unsigned rem = i % keySize;
- if (rem == 0)
- t = Ui32(Sbox[gb1(t)] ^ Rcon[i / keySize], Sbox[gb2(t)], Sbox[gb3(t)], Sbox[gb0(t)]);
- else if (keySize > 6 && rem == 4)
- t = Ui32(Sbox[gb0(t)], Sbox[gb1(t)], Sbox[gb2(t)], Sbox[gb3(t)]);
- w[i] = w[i - keySize] ^ t;
- }
-}
-
-void MY_FAST_CALL Aes_SetKey_Dec(UInt32 *w, const Byte *key, unsigned keySize)
-{
- unsigned i, num;
- Aes_SetKey_Enc(w, key, keySize);
- num = keySize + 20;
- w += 8;
- for (i = 0; i < num; i++)
- {
- UInt32 r = w[i];
- w[i] =
- DD(0)[Sbox[gb0(r)]] ^
- DD(1)[Sbox[gb1(r)]] ^
- DD(2)[Sbox[gb2(r)]] ^
- DD(3)[Sbox[gb3(r)]];
- }
-}
-
-/* Aes_Encode and Aes_Decode functions work with little-endian words.
- src and dest are pointers to 4 UInt32 words.
- src and dest can point to same block */
-
-static void Aes_Encode(const UInt32 *w, UInt32 *dest, const UInt32 *src)
-{
- UInt32 s[4];
- UInt32 m[4];
- UInt32 numRounds2 = w[0];
- w += 4;
- s[0] = src[0] ^ w[0];
- s[1] = src[1] ^ w[1];
- s[2] = src[2] ^ w[2];
- s[3] = src[3] ^ w[3];
- w += 4;
- for (;;)
- {
- HT16(m, s, 0);
- if (--numRounds2 == 0)
- break;
- HT16(s, m, 4);
- w += 8;
- }
- w += 4;
- FT4(0); FT4(1); FT4(2); FT4(3);
-}
-
-static void Aes_Decode(const UInt32 *w, UInt32 *dest, const UInt32 *src)
-{
- UInt32 s[4];
- UInt32 m[4];
- UInt32 numRounds2 = w[0];
- w += 4 + numRounds2 * 8;
- s[0] = src[0] ^ w[0];
- s[1] = src[1] ^ w[1];
- s[2] = src[2] ^ w[2];
- s[3] = src[3] ^ w[3];
- for (;;)
- {
- w -= 8;
- HD16(m, s, 4);
- if (--numRounds2 == 0)
- break;
- HD16(s, m, 0);
- }
- FD4(0); FD4(1); FD4(2); FD4(3);
-}
-
-void AesCbc_Init(UInt32 *p, const Byte *iv)
-{
- unsigned i;
- for (i = 0; i < 4; i++)
- p[i] = GetUi32(iv + i * 4);
-}
-
-void MY_FAST_CALL AesCbc_Encode(UInt32 *p, Byte *data, size_t numBlocks)
-{
- for (; numBlocks != 0; numBlocks--, data += AES_BLOCK_SIZE)
- {
- p[0] ^= GetUi32(data);
- p[1] ^= GetUi32(data + 4);
- p[2] ^= GetUi32(data + 8);
- p[3] ^= GetUi32(data + 12);
-
- Aes_Encode(p + 4, p, p);
-
- SetUi32(data, p[0]);
- SetUi32(data + 4, p[1]);
- SetUi32(data + 8, p[2]);
- SetUi32(data + 12, p[3]);
- }
-}
-
-void MY_FAST_CALL AesCbc_Decode(UInt32 *p, Byte *data, size_t numBlocks)
-{
- UInt32 in[4], out[4];
- for (; numBlocks != 0; numBlocks--, data += AES_BLOCK_SIZE)
- {
- in[0] = GetUi32(data);
- in[1] = GetUi32(data + 4);
- in[2] = GetUi32(data + 8);
- in[3] = GetUi32(data + 12);
-
- Aes_Decode(p + 4, out, in);
-
- SetUi32(data, p[0] ^ out[0]);
- SetUi32(data + 4, p[1] ^ out[1]);
- SetUi32(data + 8, p[2] ^ out[2]);
- SetUi32(data + 12, p[3] ^ out[3]);
-
- p[0] = in[0];
- p[1] = in[1];
- p[2] = in[2];
- p[3] = in[3];
- }
-}
-
-void MY_FAST_CALL AesCtr_Code(UInt32 *p, Byte *data, size_t numBlocks)
-{
- for (; numBlocks != 0; numBlocks--)
- {
- UInt32 temp[4];
- unsigned i;
-
- if (++p[0] == 0)
- p[1]++;
-
- Aes_Encode(p + 4, temp, p);
-
- for (i = 0; i < 4; i++, data += 4)
- {
- UInt32 t = temp[i];
-
- #ifdef MY_CPU_LE_UNALIGN
- *((UInt32 *)data) ^= t;
- #else
- data[0] ^= (t & 0xFF);
- data[1] ^= ((t >> 8) & 0xFF);
- data[2] ^= ((t >> 16) & 0xFF);
- data[3] ^= ((t >> 24));
- #endif
- }
- }
-}
+/* Aes.c -- AES encryption / decryption
+2017-01-24 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include "Aes.h"
+#include "CpuArch.h"
+
+static UInt32 T[256 * 4];
+static const Byte Sbox[256] = {
+ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
+ 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
+ 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
+ 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
+ 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
+ 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
+ 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
+ 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
+ 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
+ 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
+ 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16};
+
+void MY_FAST_CALL AesCbc_Encode(UInt32 *ivAes, Byte *data, size_t numBlocks);
+void MY_FAST_CALL AesCbc_Decode(UInt32 *ivAes, Byte *data, size_t numBlocks);
+void MY_FAST_CALL AesCtr_Code(UInt32 *ivAes, Byte *data, size_t numBlocks);
+
+void MY_FAST_CALL AesCbc_Encode_Intel(UInt32 *ivAes, Byte *data, size_t numBlocks);
+void MY_FAST_CALL AesCbc_Decode_Intel(UInt32 *ivAes, Byte *data, size_t numBlocks);
+void MY_FAST_CALL AesCtr_Code_Intel(UInt32 *ivAes, Byte *data, size_t numBlocks);
+
+AES_CODE_FUNC g_AesCbc_Encode;
+AES_CODE_FUNC g_AesCbc_Decode;
+AES_CODE_FUNC g_AesCtr_Code;
+
+static UInt32 D[256 * 4];
+static Byte InvS[256];
+
+static const Byte Rcon[11] = { 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 };
+
+#define xtime(x) ((((x) << 1) ^ (((x) & 0x80) != 0 ? 0x1B : 0)) & 0xFF)
+
+#define Ui32(a0, a1, a2, a3) ((UInt32)(a0) | ((UInt32)(a1) << 8) | ((UInt32)(a2) << 16) | ((UInt32)(a3) << 24))
+
+#define gb0(x) ( (x) & 0xFF)
+#define gb1(x) (((x) >> ( 8)) & 0xFF)
+#define gb2(x) (((x) >> (16)) & 0xFF)
+#define gb3(x) (((x) >> (24)))
+
+#define gb(n, x) gb ## n(x)
+
+#define TT(x) (T + (x << 8))
+#define DD(x) (D + (x << 8))
+
+
+void AesGenTables(void)
+{
+ unsigned i;
+ for (i = 0; i < 256; i++)
+ InvS[Sbox[i]] = (Byte)i;
+
+ for (i = 0; i < 256; i++)
+ {
+ {
+ UInt32 a1 = Sbox[i];
+ UInt32 a2 = xtime(a1);
+ UInt32 a3 = a2 ^ a1;
+ TT(0)[i] = Ui32(a2, a1, a1, a3);
+ TT(1)[i] = Ui32(a3, a2, a1, a1);
+ TT(2)[i] = Ui32(a1, a3, a2, a1);
+ TT(3)[i] = Ui32(a1, a1, a3, a2);
+ }
+ {
+ UInt32 a1 = InvS[i];
+ UInt32 a2 = xtime(a1);
+ UInt32 a4 = xtime(a2);
+ UInt32 a8 = xtime(a4);
+ UInt32 a9 = a8 ^ a1;
+ UInt32 aB = a8 ^ a2 ^ a1;
+ UInt32 aD = a8 ^ a4 ^ a1;
+ UInt32 aE = a8 ^ a4 ^ a2;
+ DD(0)[i] = Ui32(aE, a9, aD, aB);
+ DD(1)[i] = Ui32(aB, aE, a9, aD);
+ DD(2)[i] = Ui32(aD, aB, aE, a9);
+ DD(3)[i] = Ui32(a9, aD, aB, aE);
+ }
+ }
+
+ g_AesCbc_Encode = AesCbc_Encode;
+ g_AesCbc_Decode = AesCbc_Decode;
+ g_AesCtr_Code = AesCtr_Code;
+
+ #ifdef MY_CPU_X86_OR_AMD64
+ if (CPU_Is_Aes_Supported())
+ {
+ g_AesCbc_Encode = AesCbc_Encode_Intel;
+ g_AesCbc_Decode = AesCbc_Decode_Intel;
+ g_AesCtr_Code = AesCtr_Code_Intel;
+ }
+ #endif
+}
+
+
+#define HT(i, x, s) TT(x)[gb(x, s[(i + x) & 3])]
+
+#define HT4(m, i, s, p) m[i] = \
+ HT(i, 0, s) ^ \
+ HT(i, 1, s) ^ \
+ HT(i, 2, s) ^ \
+ HT(i, 3, s) ^ w[p + i]
+
+#define HT16(m, s, p) \
+ HT4(m, 0, s, p); \
+ HT4(m, 1, s, p); \
+ HT4(m, 2, s, p); \
+ HT4(m, 3, s, p); \
+
+#define FT(i, x) Sbox[gb(x, m[(i + x) & 3])]
+#define FT4(i) dest[i] = Ui32(FT(i, 0), FT(i, 1), FT(i, 2), FT(i, 3)) ^ w[i];
+
+
+#define HD(i, x, s) DD(x)[gb(x, s[(i - x) & 3])]
+
+#define HD4(m, i, s, p) m[i] = \
+ HD(i, 0, s) ^ \
+ HD(i, 1, s) ^ \
+ HD(i, 2, s) ^ \
+ HD(i, 3, s) ^ w[p + i];
+
+#define HD16(m, s, p) \
+ HD4(m, 0, s, p); \
+ HD4(m, 1, s, p); \
+ HD4(m, 2, s, p); \
+ HD4(m, 3, s, p); \
+
+#define FD(i, x) InvS[gb(x, m[(i - x) & 3])]
+#define FD4(i) dest[i] = Ui32(FD(i, 0), FD(i, 1), FD(i, 2), FD(i, 3)) ^ w[i];
+
+void MY_FAST_CALL Aes_SetKey_Enc(UInt32 *w, const Byte *key, unsigned keySize)
+{
+ unsigned i, wSize;
+ wSize = keySize + 28;
+ keySize /= 4;
+ w[0] = ((UInt32)keySize / 2) + 3;
+ w += 4;
+
+ for (i = 0; i < keySize; i++, key += 4)
+ w[i] = GetUi32(key);
+
+ for (; i < wSize; i++)
+ {
+ UInt32 t = w[(size_t)i - 1];
+ unsigned rem = i % keySize;
+ if (rem == 0)
+ t = Ui32(Sbox[gb1(t)] ^ Rcon[i / keySize], Sbox[gb2(t)], Sbox[gb3(t)], Sbox[gb0(t)]);
+ else if (keySize > 6 && rem == 4)
+ t = Ui32(Sbox[gb0(t)], Sbox[gb1(t)], Sbox[gb2(t)], Sbox[gb3(t)]);
+ w[i] = w[i - keySize] ^ t;
+ }
+}
+
+void MY_FAST_CALL Aes_SetKey_Dec(UInt32 *w, const Byte *key, unsigned keySize)
+{
+ unsigned i, num;
+ Aes_SetKey_Enc(w, key, keySize);
+ num = keySize + 20;
+ w += 8;
+ for (i = 0; i < num; i++)
+ {
+ UInt32 r = w[i];
+ w[i] =
+ DD(0)[Sbox[gb0(r)]] ^
+ DD(1)[Sbox[gb1(r)]] ^
+ DD(2)[Sbox[gb2(r)]] ^
+ DD(3)[Sbox[gb3(r)]];
+ }
+}
+
+/* Aes_Encode and Aes_Decode functions work with little-endian words.
+ src and dest are pointers to 4 UInt32 words.
+ src and dest can point to same block */
+
+static void Aes_Encode(const UInt32 *w, UInt32 *dest, const UInt32 *src)
+{
+ UInt32 s[4];
+ UInt32 m[4];
+ UInt32 numRounds2 = w[0];
+ w += 4;
+ s[0] = src[0] ^ w[0];
+ s[1] = src[1] ^ w[1];
+ s[2] = src[2] ^ w[2];
+ s[3] = src[3] ^ w[3];
+ w += 4;
+ for (;;)
+ {
+ HT16(m, s, 0);
+ if (--numRounds2 == 0)
+ break;
+ HT16(s, m, 4);
+ w += 8;
+ }
+ w += 4;
+ FT4(0); FT4(1); FT4(2); FT4(3);
+}
+
+static void Aes_Decode(const UInt32 *w, UInt32 *dest, const UInt32 *src)
+{
+ UInt32 s[4];
+ UInt32 m[4];
+ UInt32 numRounds2 = w[0];
+ w += 4 + numRounds2 * 8;
+ s[0] = src[0] ^ w[0];
+ s[1] = src[1] ^ w[1];
+ s[2] = src[2] ^ w[2];
+ s[3] = src[3] ^ w[3];
+ for (;;)
+ {
+ w -= 8;
+ HD16(m, s, 4);
+ if (--numRounds2 == 0)
+ break;
+ HD16(s, m, 0);
+ }
+ FD4(0); FD4(1); FD4(2); FD4(3);
+}
+
+void AesCbc_Init(UInt32 *p, const Byte *iv)
+{
+ unsigned i;
+ for (i = 0; i < 4; i++)
+ p[i] = GetUi32(iv + i * 4);
+}
+
+void MY_FAST_CALL AesCbc_Encode(UInt32 *p, Byte *data, size_t numBlocks)
+{
+ for (; numBlocks != 0; numBlocks--, data += AES_BLOCK_SIZE)
+ {
+ p[0] ^= GetUi32(data);
+ p[1] ^= GetUi32(data + 4);
+ p[2] ^= GetUi32(data + 8);
+ p[3] ^= GetUi32(data + 12);
+
+ Aes_Encode(p + 4, p, p);
+
+ SetUi32(data, p[0]);
+ SetUi32(data + 4, p[1]);
+ SetUi32(data + 8, p[2]);
+ SetUi32(data + 12, p[3]);
+ }
+}
+
+void MY_FAST_CALL AesCbc_Decode(UInt32 *p, Byte *data, size_t numBlocks)
+{
+ UInt32 in[4], out[4];
+ for (; numBlocks != 0; numBlocks--, data += AES_BLOCK_SIZE)
+ {
+ in[0] = GetUi32(data);
+ in[1] = GetUi32(data + 4);
+ in[2] = GetUi32(data + 8);
+ in[3] = GetUi32(data + 12);
+
+ Aes_Decode(p + 4, out, in);
+
+ SetUi32(data, p[0] ^ out[0]);
+ SetUi32(data + 4, p[1] ^ out[1]);
+ SetUi32(data + 8, p[2] ^ out[2]);
+ SetUi32(data + 12, p[3] ^ out[3]);
+
+ p[0] = in[0];
+ p[1] = in[1];
+ p[2] = in[2];
+ p[3] = in[3];
+ }
+}
+
+void MY_FAST_CALL AesCtr_Code(UInt32 *p, Byte *data, size_t numBlocks)
+{
+ for (; numBlocks != 0; numBlocks--)
+ {
+ UInt32 temp[4];
+ unsigned i;
+
+ if (++p[0] == 0)
+ p[1]++;
+
+ Aes_Encode(p + 4, temp, p);
+
+ for (i = 0; i < 4; i++, data += 4)
+ {
+ UInt32 t = temp[i];
+
+ #ifdef MY_CPU_LE_UNALIGN
+ *((UInt32 *)data) ^= t;
+ #else
+ data[0] ^= (t & 0xFF);
+ data[1] ^= ((t >> 8) & 0xFF);
+ data[2] ^= ((t >> 16) & 0xFF);
+ data[3] ^= ((t >> 24));
+ #endif
+ }
+ }
+}
diff --git a/contrib/libs/lzmasdk/Aes.h b/contrib/libs/lzmasdk/Aes.h
index 64979b5bcb..381e979d1b 100644
--- a/contrib/libs/lzmasdk/Aes.h
+++ b/contrib/libs/lzmasdk/Aes.h
@@ -1,38 +1,38 @@
-/* Aes.h -- AES encryption / decryption
-2013-01-18 : Igor Pavlov : Public domain */
-
-#ifndef __AES_H
-#define __AES_H
-
-#include "7zTypes.h"
-
-EXTERN_C_BEGIN
-
-#define AES_BLOCK_SIZE 16
-
-/* Call AesGenTables one time before other AES functions */
-void AesGenTables(void);
-
-/* UInt32 pointers must be 16-byte aligned */
-
-/* 16-byte (4 * 32-bit words) blocks: 1 (IV) + 1 (keyMode) + 15 (AES-256 roundKeys) */
-#define AES_NUM_IVMRK_WORDS ((1 + 1 + 15) * 4)
-
-/* aes - 16-byte aligned pointer to keyMode+roundKeys sequence */
-/* keySize = 16 or 24 or 32 (bytes) */
-typedef void (MY_FAST_CALL *AES_SET_KEY_FUNC)(UInt32 *aes, const Byte *key, unsigned keySize);
-void MY_FAST_CALL Aes_SetKey_Enc(UInt32 *aes, const Byte *key, unsigned keySize);
-void MY_FAST_CALL Aes_SetKey_Dec(UInt32 *aes, const Byte *key, unsigned keySize);
-
-/* ivAes - 16-byte aligned pointer to iv+keyMode+roundKeys sequence: UInt32[AES_NUM_IVMRK_WORDS] */
-void AesCbc_Init(UInt32 *ivAes, const Byte *iv); /* iv size is AES_BLOCK_SIZE */
-/* data - 16-byte aligned pointer to data */
-/* numBlocks - the number of 16-byte blocks in data array */
-typedef void (MY_FAST_CALL *AES_CODE_FUNC)(UInt32 *ivAes, Byte *data, size_t numBlocks);
-extern AES_CODE_FUNC g_AesCbc_Encode;
-extern AES_CODE_FUNC g_AesCbc_Decode;
-extern AES_CODE_FUNC g_AesCtr_Code;
-
-EXTERN_C_END
-
-#endif
+/* Aes.h -- AES encryption / decryption
+2013-01-18 : Igor Pavlov : Public domain */
+
+#ifndef __AES_H
+#define __AES_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+#define AES_BLOCK_SIZE 16
+
+/* Call AesGenTables one time before other AES functions */
+void AesGenTables(void);
+
+/* UInt32 pointers must be 16-byte aligned */
+
+/* 16-byte (4 * 32-bit words) blocks: 1 (IV) + 1 (keyMode) + 15 (AES-256 roundKeys) */
+#define AES_NUM_IVMRK_WORDS ((1 + 1 + 15) * 4)
+
+/* aes - 16-byte aligned pointer to keyMode+roundKeys sequence */
+/* keySize = 16 or 24 or 32 (bytes) */
+typedef void (MY_FAST_CALL *AES_SET_KEY_FUNC)(UInt32 *aes, const Byte *key, unsigned keySize);
+void MY_FAST_CALL Aes_SetKey_Enc(UInt32 *aes, const Byte *key, unsigned keySize);
+void MY_FAST_CALL Aes_SetKey_Dec(UInt32 *aes, const Byte *key, unsigned keySize);
+
+/* ivAes - 16-byte aligned pointer to iv+keyMode+roundKeys sequence: UInt32[AES_NUM_IVMRK_WORDS] */
+void AesCbc_Init(UInt32 *ivAes, const Byte *iv); /* iv size is AES_BLOCK_SIZE */
+/* data - 16-byte aligned pointer to data */
+/* numBlocks - the number of 16-byte blocks in data array */
+typedef void (MY_FAST_CALL *AES_CODE_FUNC)(UInt32 *ivAes, Byte *data, size_t numBlocks);
+extern AES_CODE_FUNC g_AesCbc_Encode;
+extern AES_CODE_FUNC g_AesCbc_Decode;
+extern AES_CODE_FUNC g_AesCtr_Code;
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/AesOpt.c b/contrib/libs/lzmasdk/AesOpt.c
index 00291288ba..65936a414f 100644
--- a/contrib/libs/lzmasdk/AesOpt.c
+++ b/contrib/libs/lzmasdk/AesOpt.c
@@ -1,188 +1,188 @@
-/* AesOpt.c -- Intel's AES
-2017-06-08 : Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include "CpuArch.h"
-
-#ifdef MY_CPU_X86_OR_AMD64
-#if (_MSC_VER > 1500) || (_MSC_FULL_VER >= 150030729)
-#define USE_INTEL_AES
-#endif
-#endif
-
-#ifdef USE_INTEL_AES
-
-#if defined(__clang__)
-#define TARGET_AES __attribute__((__target__("aes")))
-#else
-#define TARGET_AES
-#endif
-
-#include <wmmintrin.h>
-
-void TARGET_AES MY_FAST_CALL AesCbc_Encode_Intel(__m128i *p, __m128i *data, size_t numBlocks)
-{
- __m128i m = *p;
- for (; numBlocks != 0; numBlocks--, data++)
- {
- UInt32 numRounds2 = *(const UInt32 *)(p + 1) - 1;
- const __m128i *w = p + 3;
- m = _mm_xor_si128(m, *data);
- m = _mm_xor_si128(m, p[2]);
- do
- {
- m = _mm_aesenc_si128(m, w[0]);
- m = _mm_aesenc_si128(m, w[1]);
- w += 2;
- }
- while (--numRounds2 != 0);
- m = _mm_aesenc_si128(m, w[0]);
- m = _mm_aesenclast_si128(m, w[1]);
- *data = m;
- }
- *p = m;
-}
-
-#define NUM_WAYS 3
-
-#define AES_OP_W(op, n) { \
- const __m128i t = w[n]; \
- m0 = op(m0, t); \
- m1 = op(m1, t); \
- m2 = op(m2, t); \
- }
-
-#define AES_DEC(n) AES_OP_W(_mm_aesdec_si128, n)
-#define AES_DEC_LAST(n) AES_OP_W(_mm_aesdeclast_si128, n)
-#define AES_ENC(n) AES_OP_W(_mm_aesenc_si128, n)
-#define AES_ENC_LAST(n) AES_OP_W(_mm_aesenclast_si128, n)
-
-void TARGET_AES MY_FAST_CALL AesCbc_Decode_Intel(__m128i *p, __m128i *data, size_t numBlocks)
-{
- __m128i iv = *p;
- for (; numBlocks >= NUM_WAYS; numBlocks -= NUM_WAYS, data += NUM_WAYS)
- {
- UInt32 numRounds2 = *(const UInt32 *)(p + 1);
- const __m128i *w = p + numRounds2 * 2;
- __m128i m0, m1, m2;
- {
- const __m128i t = w[2];
- m0 = _mm_xor_si128(t, data[0]);
- m1 = _mm_xor_si128(t, data[1]);
- m2 = _mm_xor_si128(t, data[2]);
- }
- numRounds2--;
- do
- {
- AES_DEC(1)
- AES_DEC(0)
- w -= 2;
- }
- while (--numRounds2 != 0);
- AES_DEC(1)
- AES_DEC_LAST(0)
-
- {
- __m128i t;
- t = _mm_xor_si128(m0, iv); iv = data[0]; data[0] = t;
- t = _mm_xor_si128(m1, iv); iv = data[1]; data[1] = t;
- t = _mm_xor_si128(m2, iv); iv = data[2]; data[2] = t;
- }
- }
- for (; numBlocks != 0; numBlocks--, data++)
- {
- UInt32 numRounds2 = *(const UInt32 *)(p + 1);
- const __m128i *w = p + numRounds2 * 2;
- __m128i m = _mm_xor_si128(w[2], *data);
- numRounds2--;
- do
- {
- m = _mm_aesdec_si128(m, w[1]);
- m = _mm_aesdec_si128(m, w[0]);
- w -= 2;
- }
- while (--numRounds2 != 0);
- m = _mm_aesdec_si128(m, w[1]);
- m = _mm_aesdeclast_si128(m, w[0]);
-
- m = _mm_xor_si128(m, iv);
- iv = *data;
- *data = m;
- }
- *p = iv;
-}
-
-void TARGET_AES MY_FAST_CALL AesCtr_Code_Intel(__m128i *p, __m128i *data, size_t numBlocks)
-{
- __m128i ctr = *p;
- __m128i one = _mm_set_epi64x(1, 0);
- for (; numBlocks >= NUM_WAYS; numBlocks -= NUM_WAYS, data += NUM_WAYS)
- {
- UInt32 numRounds2 = *(const UInt32 *)(p + 1) - 1;
- const __m128i *w = p;
- __m128i m0, m1, m2;
- {
- const __m128i t = w[2];
- ctr = _mm_add_epi64(ctr, one); m0 = _mm_xor_si128(ctr, t);
- ctr = _mm_add_epi64(ctr, one); m1 = _mm_xor_si128(ctr, t);
- ctr = _mm_add_epi64(ctr, one); m2 = _mm_xor_si128(ctr, t);
- }
- w += 3;
- do
- {
- AES_ENC(0)
- AES_ENC(1)
- w += 2;
- }
- while (--numRounds2 != 0);
- AES_ENC(0)
- AES_ENC_LAST(1)
- data[0] = _mm_xor_si128(data[0], m0);
- data[1] = _mm_xor_si128(data[1], m1);
- data[2] = _mm_xor_si128(data[2], m2);
- }
- for (; numBlocks != 0; numBlocks--, data++)
- {
- UInt32 numRounds2 = *(const UInt32 *)(p + 1) - 1;
- const __m128i *w = p;
- __m128i m;
- ctr = _mm_add_epi64(ctr, one);
- m = _mm_xor_si128(ctr, p[2]);
- w += 3;
- do
- {
- m = _mm_aesenc_si128(m, w[0]);
- m = _mm_aesenc_si128(m, w[1]);
- w += 2;
- }
- while (--numRounds2 != 0);
- m = _mm_aesenc_si128(m, w[0]);
- m = _mm_aesenclast_si128(m, w[1]);
- *data = _mm_xor_si128(*data, m);
- }
- *p = ctr;
-}
-
-#else
-
-void MY_FAST_CALL AesCbc_Encode(UInt32 *ivAes, Byte *data, size_t numBlocks);
-void MY_FAST_CALL AesCbc_Decode(UInt32 *ivAes, Byte *data, size_t numBlocks);
-void MY_FAST_CALL AesCtr_Code(UInt32 *ivAes, Byte *data, size_t numBlocks);
-
-void MY_FAST_CALL AesCbc_Encode_Intel(UInt32 *p, Byte *data, size_t numBlocks)
-{
- AesCbc_Encode(p, data, numBlocks);
-}
-
-void MY_FAST_CALL AesCbc_Decode_Intel(UInt32 *p, Byte *data, size_t numBlocks)
-{
- AesCbc_Decode(p, data, numBlocks);
-}
-
-void MY_FAST_CALL AesCtr_Code_Intel(UInt32 *p, Byte *data, size_t numBlocks)
-{
- AesCtr_Code(p, data, numBlocks);
-}
-
-#endif
+/* AesOpt.c -- Intel's AES
+2017-06-08 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include "CpuArch.h"
+
+#ifdef MY_CPU_X86_OR_AMD64
+#if (_MSC_VER > 1500) || (_MSC_FULL_VER >= 150030729)
+#define USE_INTEL_AES
+#endif
+#endif
+
+#ifdef USE_INTEL_AES
+
+#if defined(__clang__)
+#define TARGET_AES __attribute__((__target__("aes")))
+#else
+#define TARGET_AES
+#endif
+
+#include <wmmintrin.h>
+
+void TARGET_AES MY_FAST_CALL AesCbc_Encode_Intel(__m128i *p, __m128i *data, size_t numBlocks)
+{
+ __m128i m = *p;
+ for (; numBlocks != 0; numBlocks--, data++)
+ {
+ UInt32 numRounds2 = *(const UInt32 *)(p + 1) - 1;
+ const __m128i *w = p + 3;
+ m = _mm_xor_si128(m, *data);
+ m = _mm_xor_si128(m, p[2]);
+ do
+ {
+ m = _mm_aesenc_si128(m, w[0]);
+ m = _mm_aesenc_si128(m, w[1]);
+ w += 2;
+ }
+ while (--numRounds2 != 0);
+ m = _mm_aesenc_si128(m, w[0]);
+ m = _mm_aesenclast_si128(m, w[1]);
+ *data = m;
+ }
+ *p = m;
+}
+
+#define NUM_WAYS 3
+
+#define AES_OP_W(op, n) { \
+ const __m128i t = w[n]; \
+ m0 = op(m0, t); \
+ m1 = op(m1, t); \
+ m2 = op(m2, t); \
+ }
+
+#define AES_DEC(n) AES_OP_W(_mm_aesdec_si128, n)
+#define AES_DEC_LAST(n) AES_OP_W(_mm_aesdeclast_si128, n)
+#define AES_ENC(n) AES_OP_W(_mm_aesenc_si128, n)
+#define AES_ENC_LAST(n) AES_OP_W(_mm_aesenclast_si128, n)
+
+void TARGET_AES MY_FAST_CALL AesCbc_Decode_Intel(__m128i *p, __m128i *data, size_t numBlocks)
+{
+ __m128i iv = *p;
+ for (; numBlocks >= NUM_WAYS; numBlocks -= NUM_WAYS, data += NUM_WAYS)
+ {
+ UInt32 numRounds2 = *(const UInt32 *)(p + 1);
+ const __m128i *w = p + numRounds2 * 2;
+ __m128i m0, m1, m2;
+ {
+ const __m128i t = w[2];
+ m0 = _mm_xor_si128(t, data[0]);
+ m1 = _mm_xor_si128(t, data[1]);
+ m2 = _mm_xor_si128(t, data[2]);
+ }
+ numRounds2--;
+ do
+ {
+ AES_DEC(1)
+ AES_DEC(0)
+ w -= 2;
+ }
+ while (--numRounds2 != 0);
+ AES_DEC(1)
+ AES_DEC_LAST(0)
+
+ {
+ __m128i t;
+ t = _mm_xor_si128(m0, iv); iv = data[0]; data[0] = t;
+ t = _mm_xor_si128(m1, iv); iv = data[1]; data[1] = t;
+ t = _mm_xor_si128(m2, iv); iv = data[2]; data[2] = t;
+ }
+ }
+ for (; numBlocks != 0; numBlocks--, data++)
+ {
+ UInt32 numRounds2 = *(const UInt32 *)(p + 1);
+ const __m128i *w = p + numRounds2 * 2;
+ __m128i m = _mm_xor_si128(w[2], *data);
+ numRounds2--;
+ do
+ {
+ m = _mm_aesdec_si128(m, w[1]);
+ m = _mm_aesdec_si128(m, w[0]);
+ w -= 2;
+ }
+ while (--numRounds2 != 0);
+ m = _mm_aesdec_si128(m, w[1]);
+ m = _mm_aesdeclast_si128(m, w[0]);
+
+ m = _mm_xor_si128(m, iv);
+ iv = *data;
+ *data = m;
+ }
+ *p = iv;
+}
+
+void TARGET_AES MY_FAST_CALL AesCtr_Code_Intel(__m128i *p, __m128i *data, size_t numBlocks)
+{
+ __m128i ctr = *p;
+ __m128i one = _mm_set_epi64x(1, 0);
+ for (; numBlocks >= NUM_WAYS; numBlocks -= NUM_WAYS, data += NUM_WAYS)
+ {
+ UInt32 numRounds2 = *(const UInt32 *)(p + 1) - 1;
+ const __m128i *w = p;
+ __m128i m0, m1, m2;
+ {
+ const __m128i t = w[2];
+ ctr = _mm_add_epi64(ctr, one); m0 = _mm_xor_si128(ctr, t);
+ ctr = _mm_add_epi64(ctr, one); m1 = _mm_xor_si128(ctr, t);
+ ctr = _mm_add_epi64(ctr, one); m2 = _mm_xor_si128(ctr, t);
+ }
+ w += 3;
+ do
+ {
+ AES_ENC(0)
+ AES_ENC(1)
+ w += 2;
+ }
+ while (--numRounds2 != 0);
+ AES_ENC(0)
+ AES_ENC_LAST(1)
+ data[0] = _mm_xor_si128(data[0], m0);
+ data[1] = _mm_xor_si128(data[1], m1);
+ data[2] = _mm_xor_si128(data[2], m2);
+ }
+ for (; numBlocks != 0; numBlocks--, data++)
+ {
+ UInt32 numRounds2 = *(const UInt32 *)(p + 1) - 1;
+ const __m128i *w = p;
+ __m128i m;
+ ctr = _mm_add_epi64(ctr, one);
+ m = _mm_xor_si128(ctr, p[2]);
+ w += 3;
+ do
+ {
+ m = _mm_aesenc_si128(m, w[0]);
+ m = _mm_aesenc_si128(m, w[1]);
+ w += 2;
+ }
+ while (--numRounds2 != 0);
+ m = _mm_aesenc_si128(m, w[0]);
+ m = _mm_aesenclast_si128(m, w[1]);
+ *data = _mm_xor_si128(*data, m);
+ }
+ *p = ctr;
+}
+
+#else
+
+void MY_FAST_CALL AesCbc_Encode(UInt32 *ivAes, Byte *data, size_t numBlocks);
+void MY_FAST_CALL AesCbc_Decode(UInt32 *ivAes, Byte *data, size_t numBlocks);
+void MY_FAST_CALL AesCtr_Code(UInt32 *ivAes, Byte *data, size_t numBlocks);
+
+void MY_FAST_CALL AesCbc_Encode_Intel(UInt32 *p, Byte *data, size_t numBlocks)
+{
+ AesCbc_Encode(p, data, numBlocks);
+}
+
+void MY_FAST_CALL AesCbc_Decode_Intel(UInt32 *p, Byte *data, size_t numBlocks)
+{
+ AesCbc_Decode(p, data, numBlocks);
+}
+
+void MY_FAST_CALL AesCtr_Code_Intel(UInt32 *p, Byte *data, size_t numBlocks)
+{
+ AesCtr_Code(p, data, numBlocks);
+}
+
+#endif
diff --git a/contrib/libs/lzmasdk/Alloc.c b/contrib/libs/lzmasdk/Alloc.c
index bcede4b856..30b499e5ff 100644
--- a/contrib/libs/lzmasdk/Alloc.c
+++ b/contrib/libs/lzmasdk/Alloc.c
@@ -1,455 +1,455 @@
-/* Alloc.c -- Memory allocation functions
-2018-04-27 : Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include <stdio.h>
-
-#ifdef _WIN32
-#include <windows.h>
-#endif
-#include <stdlib.h>
-
-#include "Alloc.h"
-
-/* #define _SZ_ALLOC_DEBUG */
-
-/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */
-#ifdef _SZ_ALLOC_DEBUG
-
-#include <stdio.h>
-int g_allocCount = 0;
-int g_allocCountMid = 0;
-int g_allocCountBig = 0;
-
-
-#define CONVERT_INT_TO_STR(charType, tempSize) \
- unsigned char temp[tempSize]; unsigned i = 0; \
- while (val >= 10) { temp[i++] = (unsigned char)('0' + (unsigned)(val % 10)); val /= 10; } \
- *s++ = (charType)('0' + (unsigned)val); \
- while (i != 0) { i--; *s++ = temp[i]; } \
- *s = 0;
-
-static void ConvertUInt64ToString(UInt64 val, char *s)
-{
- CONVERT_INT_TO_STR(char, 24);
-}
-
-#define GET_HEX_CHAR(t) ((char)(((t < 10) ? ('0' + t) : ('A' + (t - 10)))))
-
-static void ConvertUInt64ToHex(UInt64 val, char *s)
-{
- UInt64 v = val;
- unsigned i;
- for (i = 1;; i++)
- {
- v >>= 4;
- if (v == 0)
- break;
- }
- s[i] = 0;
- do
- {
- unsigned t = (unsigned)(val & 0xF);
- val >>= 4;
- s[--i] = GET_HEX_CHAR(t);
- }
- while (i);
-}
-
-#define DEBUG_OUT_STREAM stderr
-
-static void Print(const char *s)
-{
- fputs(s, DEBUG_OUT_STREAM);
-}
-
-static void PrintAligned(const char *s, size_t align)
-{
- size_t len = strlen(s);
- for(;;)
- {
- fputc(' ', DEBUG_OUT_STREAM);
- if (len >= align)
- break;
- ++len;
- }
- Print(s);
-}
-
-static void PrintLn()
-{
- Print("\n");
-}
-
-static void PrintHex(UInt64 v, size_t align)
-{
- char s[32];
- ConvertUInt64ToHex(v, s);
- PrintAligned(s, align);
-}
-
-static void PrintDec(UInt64 v, size_t align)
-{
- char s[32];
- ConvertUInt64ToString(v, s);
- PrintAligned(s, align);
-}
-
-static void PrintAddr(void *p)
-{
- PrintHex((UInt64)(size_t)(ptrdiff_t)p, 12);
-}
-
-
-#define PRINT_ALLOC(name, cnt, size, ptr) \
- Print(name " "); \
- PrintDec(cnt++, 10); \
- PrintHex(size, 10); \
- PrintAddr(ptr); \
- PrintLn();
-
-#define PRINT_FREE(name, cnt, ptr) if (ptr) { \
- Print(name " "); \
- PrintDec(--cnt, 10); \
- PrintAddr(ptr); \
- PrintLn(); }
-
-#else
-
-#define PRINT_ALLOC(name, cnt, size, ptr)
-#define PRINT_FREE(name, cnt, ptr)
-#define Print(s)
-#define PrintLn()
-#define PrintHex(v, align)
-#define PrintDec(v, align)
-#define PrintAddr(p)
-
-#endif
-
-
-
-void *MyAlloc(size_t size)
-{
- if (size == 0)
- return NULL;
- #ifdef _SZ_ALLOC_DEBUG
- {
- void *p = malloc(size);
- PRINT_ALLOC("Alloc ", g_allocCount, size, p);
- return p;
- }
- #else
- return malloc(size);
- #endif
-}
-
-void MyFree(void *address)
-{
- PRINT_FREE("Free ", g_allocCount, address);
-
- free(address);
-}
-
-#ifdef _WIN32
-
-void *MidAlloc(size_t size)
-{
- if (size == 0)
- return NULL;
-
- PRINT_ALLOC("Alloc-Mid", g_allocCountMid, size, NULL);
-
- return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
-}
-
-void MidFree(void *address)
-{
- PRINT_FREE("Free-Mid", g_allocCountMid, address);
-
- if (!address)
- return;
- VirtualFree(address, 0, MEM_RELEASE);
-}
-
-#ifndef MEM_LARGE_PAGES
-#undef _7ZIP_LARGE_PAGES
-#endif
-
-#ifdef _7ZIP_LARGE_PAGES
-SIZE_T g_LargePageSize = 0;
-typedef SIZE_T (WINAPI *GetLargePageMinimumP)();
-#endif
-
-void SetLargePageSize()
-{
- #ifdef _7ZIP_LARGE_PAGES
- SIZE_T size;
- GetLargePageMinimumP largePageMinimum = (GetLargePageMinimumP)
- GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetLargePageMinimum");
- if (!largePageMinimum)
- return;
- size = largePageMinimum();
- if (size == 0 || (size & (size - 1)) != 0)
- return;
- g_LargePageSize = size;
- #endif
-}
-
-
-void *BigAlloc(size_t size)
-{
- if (size == 0)
- return NULL;
-
- PRINT_ALLOC("Alloc-Big", g_allocCountBig, size, NULL);
-
- #ifdef _7ZIP_LARGE_PAGES
- {
- SIZE_T ps = g_LargePageSize;
- if (ps != 0 && ps <= (1 << 30) && size > (ps / 2))
- {
- size_t size2;
- ps--;
- size2 = (size + ps) & ~ps;
- if (size2 >= size)
- {
- void *res = VirtualAlloc(NULL, size2, MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE);
- if (res)
- return res;
- }
- }
- }
- #endif
-
- return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
-}
-
-void BigFree(void *address)
-{
- PRINT_FREE("Free-Big", g_allocCountBig, address);
-
- if (!address)
- return;
- VirtualFree(address, 0, MEM_RELEASE);
-}
-
-#endif
-
-
-static void *SzAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return MyAlloc(size); }
-static void SzFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); MyFree(address); }
-const ISzAlloc g_Alloc = { SzAlloc, SzFree };
-
-static void *SzMidAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return MidAlloc(size); }
-static void SzMidFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); MidFree(address); }
-const ISzAlloc g_MidAlloc = { SzMidAlloc, SzMidFree };
-
-static void *SzBigAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return BigAlloc(size); }
-static void SzBigFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); BigFree(address); }
-const ISzAlloc g_BigAlloc = { SzBigAlloc, SzBigFree };
-
-
-/*
- uintptr_t : <stdint.h> C99 (optional)
- : unsupported in VS6
-*/
-
-#ifdef _WIN32
- typedef UINT_PTR UIntPtr;
-#else
- /*
- typedef uintptr_t UIntPtr;
- */
- typedef ptrdiff_t UIntPtr;
-#endif
-
-
-#define ADJUST_ALLOC_SIZE 0
-/*
-#define ADJUST_ALLOC_SIZE (sizeof(void *) - 1)
-*/
-/*
- Use (ADJUST_ALLOC_SIZE = (sizeof(void *) - 1)), if
- MyAlloc() can return address that is NOT multiple of sizeof(void *).
-*/
-
-
-/*
-#define MY_ALIGN_PTR_DOWN(p, align) ((void *)((char *)(p) - ((size_t)(UIntPtr)(p) & ((align) - 1))))
-*/
-#define MY_ALIGN_PTR_DOWN(p, align) ((void *)((((UIntPtr)(p)) & ~((UIntPtr)(align) - 1))))
-
-#define MY_ALIGN_PTR_UP_PLUS(p, align) MY_ALIGN_PTR_DOWN(((char *)(p) + (align) + ADJUST_ALLOC_SIZE), align)
-
-
-#if (_POSIX_C_SOURCE >= 200112L) && !defined(_WIN32)
- #define USE_posix_memalign
-#endif
-
-/*
- This posix_memalign() is for test purposes only.
- We also need special Free() function instead of free(),
- if this posix_memalign() is used.
-*/
-
-/*
-static int posix_memalign(void **ptr, size_t align, size_t size)
-{
- size_t newSize = size + align;
- void *p;
- void *pAligned;
- *ptr = NULL;
- if (newSize < size)
- return 12; // ENOMEM
- p = MyAlloc(newSize);
- if (!p)
- return 12; // ENOMEM
- pAligned = MY_ALIGN_PTR_UP_PLUS(p, align);
- ((void **)pAligned)[-1] = p;
- *ptr = pAligned;
- return 0;
-}
-*/
-
-/*
- ALLOC_ALIGN_SIZE >= sizeof(void *)
- ALLOC_ALIGN_SIZE >= cache_line_size
-*/
-
-#define ALLOC_ALIGN_SIZE ((size_t)1 << 7)
-
-static void *SzAlignedAlloc(ISzAllocPtr pp, size_t size)
-{
- #ifndef USE_posix_memalign
-
- void *p;
- void *pAligned;
- size_t newSize;
- UNUSED_VAR(pp);
-
- /* also we can allocate additional dummy ALLOC_ALIGN_SIZE bytes after aligned
- block to prevent cache line sharing with another allocated blocks */
-
- newSize = size + ALLOC_ALIGN_SIZE * 1 + ADJUST_ALLOC_SIZE;
- if (newSize < size)
- return NULL;
-
- p = MyAlloc(newSize);
-
- if (!p)
- return NULL;
- pAligned = MY_ALIGN_PTR_UP_PLUS(p, ALLOC_ALIGN_SIZE);
-
- Print(" size="); PrintHex(size, 8);
- Print(" a_size="); PrintHex(newSize, 8);
- Print(" ptr="); PrintAddr(p);
- Print(" a_ptr="); PrintAddr(pAligned);
- PrintLn();
-
- ((void **)pAligned)[-1] = p;
-
- return pAligned;
-
- #else
-
- void *p;
- UNUSED_VAR(pp);
- if (posix_memalign(&p, ALLOC_ALIGN_SIZE, size))
- return NULL;
-
- Print(" posix_memalign="); PrintAddr(p);
- PrintLn();
-
- return p;
-
- #endif
-}
-
-
-static void SzAlignedFree(ISzAllocPtr pp, void *address)
-{
- UNUSED_VAR(pp);
- #ifndef USE_posix_memalign
- if (address)
- MyFree(((void **)address)[-1]);
- #else
- free(address);
- #endif
-}
-
-
-const ISzAlloc g_AlignedAlloc = { SzAlignedAlloc, SzAlignedFree };
-
-
-
-#define MY_ALIGN_PTR_DOWN_1(p) MY_ALIGN_PTR_DOWN(p, sizeof(void *))
-
-/* we align ptr to support cases where CAlignOffsetAlloc::offset is not multiply of sizeof(void *) */
-#define REAL_BLOCK_PTR_VAR(p) ((void **)MY_ALIGN_PTR_DOWN_1(p))[-1]
-/*
-#define REAL_BLOCK_PTR_VAR(p) ((void **)(p))[-1]
-*/
-
-static void *AlignOffsetAlloc_Alloc(ISzAllocPtr pp, size_t size)
-{
- CAlignOffsetAlloc *p = CONTAINER_FROM_VTBL(pp, CAlignOffsetAlloc, vt);
- void *adr;
- void *pAligned;
- size_t newSize;
- size_t extra;
- size_t alignSize = (size_t)1 << p->numAlignBits;
-
- if (alignSize < sizeof(void *))
- alignSize = sizeof(void *);
-
- if (p->offset >= alignSize)
- return NULL;
-
- /* also we can allocate additional dummy ALLOC_ALIGN_SIZE bytes after aligned
- block to prevent cache line sharing with another allocated blocks */
- extra = p->offset & (sizeof(void *) - 1);
- newSize = size + alignSize + extra + ADJUST_ALLOC_SIZE;
- if (newSize < size)
- return NULL;
-
- adr = ISzAlloc_Alloc(p->baseAlloc, newSize);
-
- if (!adr)
- return NULL;
-
- pAligned = (char *)MY_ALIGN_PTR_DOWN((char *)adr +
- alignSize - p->offset + extra + ADJUST_ALLOC_SIZE, alignSize) + p->offset;
-
- PrintLn();
- Print("- Aligned: ");
- Print(" size="); PrintHex(size, 8);
- Print(" a_size="); PrintHex(newSize, 8);
- Print(" ptr="); PrintAddr(adr);
- Print(" a_ptr="); PrintAddr(pAligned);
- PrintLn();
-
- REAL_BLOCK_PTR_VAR(pAligned) = adr;
-
- return pAligned;
-}
-
-
-static void AlignOffsetAlloc_Free(ISzAllocPtr pp, void *address)
-{
- if (address)
- {
- CAlignOffsetAlloc *p = CONTAINER_FROM_VTBL(pp, CAlignOffsetAlloc, vt);
- PrintLn();
- Print("- Aligned Free: ");
- PrintLn();
- ISzAlloc_Free(p->baseAlloc, REAL_BLOCK_PTR_VAR(address));
- }
-}
-
-
-void AlignOffsetAlloc_CreateVTable(CAlignOffsetAlloc *p)
-{
- p->vt.Alloc = AlignOffsetAlloc_Alloc;
- p->vt.Free = AlignOffsetAlloc_Free;
-}
+/* Alloc.c -- Memory allocation functions
+2018-04-27 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include <stdio.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+#include <stdlib.h>
+
+#include "Alloc.h"
+
+/* #define _SZ_ALLOC_DEBUG */
+
+/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */
+#ifdef _SZ_ALLOC_DEBUG
+
+#include <stdio.h>
+int g_allocCount = 0;
+int g_allocCountMid = 0;
+int g_allocCountBig = 0;
+
+
+#define CONVERT_INT_TO_STR(charType, tempSize) \
+ unsigned char temp[tempSize]; unsigned i = 0; \
+ while (val >= 10) { temp[i++] = (unsigned char)('0' + (unsigned)(val % 10)); val /= 10; } \
+ *s++ = (charType)('0' + (unsigned)val); \
+ while (i != 0) { i--; *s++ = temp[i]; } \
+ *s = 0;
+
+static void ConvertUInt64ToString(UInt64 val, char *s)
+{
+ CONVERT_INT_TO_STR(char, 24);
+}
+
+#define GET_HEX_CHAR(t) ((char)(((t < 10) ? ('0' + t) : ('A' + (t - 10)))))
+
+static void ConvertUInt64ToHex(UInt64 val, char *s)
+{
+ UInt64 v = val;
+ unsigned i;
+ for (i = 1;; i++)
+ {
+ v >>= 4;
+ if (v == 0)
+ break;
+ }
+ s[i] = 0;
+ do
+ {
+ unsigned t = (unsigned)(val & 0xF);
+ val >>= 4;
+ s[--i] = GET_HEX_CHAR(t);
+ }
+ while (i);
+}
+
+#define DEBUG_OUT_STREAM stderr
+
+static void Print(const char *s)
+{
+ fputs(s, DEBUG_OUT_STREAM);
+}
+
+static void PrintAligned(const char *s, size_t align)
+{
+ size_t len = strlen(s);
+ for(;;)
+ {
+ fputc(' ', DEBUG_OUT_STREAM);
+ if (len >= align)
+ break;
+ ++len;
+ }
+ Print(s);
+}
+
+static void PrintLn()
+{
+ Print("\n");
+}
+
+static void PrintHex(UInt64 v, size_t align)
+{
+ char s[32];
+ ConvertUInt64ToHex(v, s);
+ PrintAligned(s, align);
+}
+
+static void PrintDec(UInt64 v, size_t align)
+{
+ char s[32];
+ ConvertUInt64ToString(v, s);
+ PrintAligned(s, align);
+}
+
+static void PrintAddr(void *p)
+{
+ PrintHex((UInt64)(size_t)(ptrdiff_t)p, 12);
+}
+
+
+#define PRINT_ALLOC(name, cnt, size, ptr) \
+ Print(name " "); \
+ PrintDec(cnt++, 10); \
+ PrintHex(size, 10); \
+ PrintAddr(ptr); \
+ PrintLn();
+
+#define PRINT_FREE(name, cnt, ptr) if (ptr) { \
+ Print(name " "); \
+ PrintDec(--cnt, 10); \
+ PrintAddr(ptr); \
+ PrintLn(); }
+
+#else
+
+#define PRINT_ALLOC(name, cnt, size, ptr)
+#define PRINT_FREE(name, cnt, ptr)
+#define Print(s)
+#define PrintLn()
+#define PrintHex(v, align)
+#define PrintDec(v, align)
+#define PrintAddr(p)
+
+#endif
+
+
+
+void *MyAlloc(size_t size)
+{
+ if (size == 0)
+ return NULL;
+ #ifdef _SZ_ALLOC_DEBUG
+ {
+ void *p = malloc(size);
+ PRINT_ALLOC("Alloc ", g_allocCount, size, p);
+ return p;
+ }
+ #else
+ return malloc(size);
+ #endif
+}
+
+void MyFree(void *address)
+{
+ PRINT_FREE("Free ", g_allocCount, address);
+
+ free(address);
+}
+
+#ifdef _WIN32
+
+void *MidAlloc(size_t size)
+{
+ if (size == 0)
+ return NULL;
+
+ PRINT_ALLOC("Alloc-Mid", g_allocCountMid, size, NULL);
+
+ return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
+}
+
+void MidFree(void *address)
+{
+ PRINT_FREE("Free-Mid", g_allocCountMid, address);
+
+ if (!address)
+ return;
+ VirtualFree(address, 0, MEM_RELEASE);
+}
+
+#ifndef MEM_LARGE_PAGES
+#undef _7ZIP_LARGE_PAGES
+#endif
+
+#ifdef _7ZIP_LARGE_PAGES
+SIZE_T g_LargePageSize = 0;
+typedef SIZE_T (WINAPI *GetLargePageMinimumP)();
+#endif
+
+void SetLargePageSize()
+{
+ #ifdef _7ZIP_LARGE_PAGES
+ SIZE_T size;
+ GetLargePageMinimumP largePageMinimum = (GetLargePageMinimumP)
+ GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetLargePageMinimum");
+ if (!largePageMinimum)
+ return;
+ size = largePageMinimum();
+ if (size == 0 || (size & (size - 1)) != 0)
+ return;
+ g_LargePageSize = size;
+ #endif
+}
+
+
+void *BigAlloc(size_t size)
+{
+ if (size == 0)
+ return NULL;
+
+ PRINT_ALLOC("Alloc-Big", g_allocCountBig, size, NULL);
+
+ #ifdef _7ZIP_LARGE_PAGES
+ {
+ SIZE_T ps = g_LargePageSize;
+ if (ps != 0 && ps <= (1 << 30) && size > (ps / 2))
+ {
+ size_t size2;
+ ps--;
+ size2 = (size + ps) & ~ps;
+ if (size2 >= size)
+ {
+ void *res = VirtualAlloc(NULL, size2, MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE);
+ if (res)
+ return res;
+ }
+ }
+ }
+ #endif
+
+ return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
+}
+
+void BigFree(void *address)
+{
+ PRINT_FREE("Free-Big", g_allocCountBig, address);
+
+ if (!address)
+ return;
+ VirtualFree(address, 0, MEM_RELEASE);
+}
+
+#endif
+
+
+static void *SzAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return MyAlloc(size); }
+static void SzFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); MyFree(address); }
+const ISzAlloc g_Alloc = { SzAlloc, SzFree };
+
+static void *SzMidAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return MidAlloc(size); }
+static void SzMidFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); MidFree(address); }
+const ISzAlloc g_MidAlloc = { SzMidAlloc, SzMidFree };
+
+static void *SzBigAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return BigAlloc(size); }
+static void SzBigFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); BigFree(address); }
+const ISzAlloc g_BigAlloc = { SzBigAlloc, SzBigFree };
+
+
+/*
+ uintptr_t : <stdint.h> C99 (optional)
+ : unsupported in VS6
+*/
+
+#ifdef _WIN32
+ typedef UINT_PTR UIntPtr;
+#else
+ /*
+ typedef uintptr_t UIntPtr;
+ */
+ typedef ptrdiff_t UIntPtr;
+#endif
+
+
+#define ADJUST_ALLOC_SIZE 0
+/*
+#define ADJUST_ALLOC_SIZE (sizeof(void *) - 1)
+*/
+/*
+ Use (ADJUST_ALLOC_SIZE = (sizeof(void *) - 1)), if
+ MyAlloc() can return address that is NOT multiple of sizeof(void *).
+*/
+
+
+/*
+#define MY_ALIGN_PTR_DOWN(p, align) ((void *)((char *)(p) - ((size_t)(UIntPtr)(p) & ((align) - 1))))
+*/
+#define MY_ALIGN_PTR_DOWN(p, align) ((void *)((((UIntPtr)(p)) & ~((UIntPtr)(align) - 1))))
+
+#define MY_ALIGN_PTR_UP_PLUS(p, align) MY_ALIGN_PTR_DOWN(((char *)(p) + (align) + ADJUST_ALLOC_SIZE), align)
+
+
+#if (_POSIX_C_SOURCE >= 200112L) && !defined(_WIN32)
+ #define USE_posix_memalign
+#endif
+
+/*
+ This posix_memalign() is for test purposes only.
+ We also need special Free() function instead of free(),
+ if this posix_memalign() is used.
+*/
+
+/*
+static int posix_memalign(void **ptr, size_t align, size_t size)
+{
+ size_t newSize = size + align;
+ void *p;
+ void *pAligned;
+ *ptr = NULL;
+ if (newSize < size)
+ return 12; // ENOMEM
+ p = MyAlloc(newSize);
+ if (!p)
+ return 12; // ENOMEM
+ pAligned = MY_ALIGN_PTR_UP_PLUS(p, align);
+ ((void **)pAligned)[-1] = p;
+ *ptr = pAligned;
+ return 0;
+}
+*/
+
+/*
+ ALLOC_ALIGN_SIZE >= sizeof(void *)
+ ALLOC_ALIGN_SIZE >= cache_line_size
+*/
+
+#define ALLOC_ALIGN_SIZE ((size_t)1 << 7)
+
+static void *SzAlignedAlloc(ISzAllocPtr pp, size_t size)
+{
+ #ifndef USE_posix_memalign
+
+ void *p;
+ void *pAligned;
+ size_t newSize;
+ UNUSED_VAR(pp);
+
+ /* also we can allocate additional dummy ALLOC_ALIGN_SIZE bytes after aligned
+ block to prevent cache line sharing with another allocated blocks */
+
+ newSize = size + ALLOC_ALIGN_SIZE * 1 + ADJUST_ALLOC_SIZE;
+ if (newSize < size)
+ return NULL;
+
+ p = MyAlloc(newSize);
+
+ if (!p)
+ return NULL;
+ pAligned = MY_ALIGN_PTR_UP_PLUS(p, ALLOC_ALIGN_SIZE);
+
+ Print(" size="); PrintHex(size, 8);
+ Print(" a_size="); PrintHex(newSize, 8);
+ Print(" ptr="); PrintAddr(p);
+ Print(" a_ptr="); PrintAddr(pAligned);
+ PrintLn();
+
+ ((void **)pAligned)[-1] = p;
+
+ return pAligned;
+
+ #else
+
+ void *p;
+ UNUSED_VAR(pp);
+ if (posix_memalign(&p, ALLOC_ALIGN_SIZE, size))
+ return NULL;
+
+ Print(" posix_memalign="); PrintAddr(p);
+ PrintLn();
+
+ return p;
+
+ #endif
+}
+
+
+static void SzAlignedFree(ISzAllocPtr pp, void *address)
+{
+ UNUSED_VAR(pp);
+ #ifndef USE_posix_memalign
+ if (address)
+ MyFree(((void **)address)[-1]);
+ #else
+ free(address);
+ #endif
+}
+
+
+const ISzAlloc g_AlignedAlloc = { SzAlignedAlloc, SzAlignedFree };
+
+
+
+#define MY_ALIGN_PTR_DOWN_1(p) MY_ALIGN_PTR_DOWN(p, sizeof(void *))
+
+/* we align ptr to support cases where CAlignOffsetAlloc::offset is not multiply of sizeof(void *) */
+#define REAL_BLOCK_PTR_VAR(p) ((void **)MY_ALIGN_PTR_DOWN_1(p))[-1]
+/*
+#define REAL_BLOCK_PTR_VAR(p) ((void **)(p))[-1]
+*/
+
+static void *AlignOffsetAlloc_Alloc(ISzAllocPtr pp, size_t size)
+{
+ CAlignOffsetAlloc *p = CONTAINER_FROM_VTBL(pp, CAlignOffsetAlloc, vt);
+ void *adr;
+ void *pAligned;
+ size_t newSize;
+ size_t extra;
+ size_t alignSize = (size_t)1 << p->numAlignBits;
+
+ if (alignSize < sizeof(void *))
+ alignSize = sizeof(void *);
+
+ if (p->offset >= alignSize)
+ return NULL;
+
+ /* also we can allocate additional dummy ALLOC_ALIGN_SIZE bytes after aligned
+ block to prevent cache line sharing with another allocated blocks */
+ extra = p->offset & (sizeof(void *) - 1);
+ newSize = size + alignSize + extra + ADJUST_ALLOC_SIZE;
+ if (newSize < size)
+ return NULL;
+
+ adr = ISzAlloc_Alloc(p->baseAlloc, newSize);
+
+ if (!adr)
+ return NULL;
+
+ pAligned = (char *)MY_ALIGN_PTR_DOWN((char *)adr +
+ alignSize - p->offset + extra + ADJUST_ALLOC_SIZE, alignSize) + p->offset;
+
+ PrintLn();
+ Print("- Aligned: ");
+ Print(" size="); PrintHex(size, 8);
+ Print(" a_size="); PrintHex(newSize, 8);
+ Print(" ptr="); PrintAddr(adr);
+ Print(" a_ptr="); PrintAddr(pAligned);
+ PrintLn();
+
+ REAL_BLOCK_PTR_VAR(pAligned) = adr;
+
+ return pAligned;
+}
+
+
+static void AlignOffsetAlloc_Free(ISzAllocPtr pp, void *address)
+{
+ if (address)
+ {
+ CAlignOffsetAlloc *p = CONTAINER_FROM_VTBL(pp, CAlignOffsetAlloc, vt);
+ PrintLn();
+ Print("- Aligned Free: ");
+ PrintLn();
+ ISzAlloc_Free(p->baseAlloc, REAL_BLOCK_PTR_VAR(address));
+ }
+}
+
+
+void AlignOffsetAlloc_CreateVTable(CAlignOffsetAlloc *p)
+{
+ p->vt.Alloc = AlignOffsetAlloc_Alloc;
+ p->vt.Free = AlignOffsetAlloc_Free;
+}
diff --git a/contrib/libs/lzmasdk/Alloc.h b/contrib/libs/lzmasdk/Alloc.h
index 648237646f..3d796e5eee 100644
--- a/contrib/libs/lzmasdk/Alloc.h
+++ b/contrib/libs/lzmasdk/Alloc.h
@@ -1,51 +1,51 @@
-/* Alloc.h -- Memory allocation functions
-2018-02-19 : Igor Pavlov : Public domain */
-
-#ifndef __COMMON_ALLOC_H
-#define __COMMON_ALLOC_H
-
-#include "7zTypes.h"
-
-EXTERN_C_BEGIN
-
-void *MyAlloc(size_t size);
-void MyFree(void *address);
-
-#ifdef _WIN32
-
-void SetLargePageSize();
-
-void *MidAlloc(size_t size);
-void MidFree(void *address);
-void *BigAlloc(size_t size);
-void BigFree(void *address);
-
-#else
-
-#define MidAlloc(size) MyAlloc(size)
-#define MidFree(address) MyFree(address)
-#define BigAlloc(size) MyAlloc(size)
-#define BigFree(address) MyFree(address)
-
-#endif
-
-extern const ISzAlloc g_Alloc;
-extern const ISzAlloc g_BigAlloc;
-extern const ISzAlloc g_MidAlloc;
-extern const ISzAlloc g_AlignedAlloc;
-
-
-typedef struct
-{
- ISzAlloc vt;
- ISzAllocPtr baseAlloc;
- unsigned numAlignBits; /* ((1 << numAlignBits) >= sizeof(void *)) */
- size_t offset; /* (offset == (k * sizeof(void *)) && offset < (1 << numAlignBits) */
-} CAlignOffsetAlloc;
-
-void AlignOffsetAlloc_CreateVTable(CAlignOffsetAlloc *p);
-
-
-EXTERN_C_END
-
-#endif
+/* Alloc.h -- Memory allocation functions
+2018-02-19 : Igor Pavlov : Public domain */
+
+#ifndef __COMMON_ALLOC_H
+#define __COMMON_ALLOC_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+void *MyAlloc(size_t size);
+void MyFree(void *address);
+
+#ifdef _WIN32
+
+void SetLargePageSize();
+
+void *MidAlloc(size_t size);
+void MidFree(void *address);
+void *BigAlloc(size_t size);
+void BigFree(void *address);
+
+#else
+
+#define MidAlloc(size) MyAlloc(size)
+#define MidFree(address) MyFree(address)
+#define BigAlloc(size) MyAlloc(size)
+#define BigFree(address) MyFree(address)
+
+#endif
+
+extern const ISzAlloc g_Alloc;
+extern const ISzAlloc g_BigAlloc;
+extern const ISzAlloc g_MidAlloc;
+extern const ISzAlloc g_AlignedAlloc;
+
+
+typedef struct
+{
+ ISzAlloc vt;
+ ISzAllocPtr baseAlloc;
+ unsigned numAlignBits; /* ((1 << numAlignBits) >= sizeof(void *)) */
+ size_t offset; /* (offset == (k * sizeof(void *)) && offset < (1 << numAlignBits) */
+} CAlignOffsetAlloc;
+
+void AlignOffsetAlloc_CreateVTable(CAlignOffsetAlloc *p);
+
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/Bra.c b/contrib/libs/lzmasdk/Bra.c
index aed17e330d..cbdcb290df 100644
--- a/contrib/libs/lzmasdk/Bra.c
+++ b/contrib/libs/lzmasdk/Bra.c
@@ -1,230 +1,230 @@
-/* Bra.c -- Converters for RISC code
-2017-04-04 : Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include "CpuArch.h"
-#include "Bra.h"
-
-SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
-{
- Byte *p;
- const Byte *lim;
- size &= ~(size_t)3;
- ip += 4;
- p = data;
- lim = data + size;
-
- if (encoding)
-
- for (;;)
- {
- for (;;)
- {
- if (p >= lim)
- return p - data;
- p += 4;
- if (p[-1] == 0xEB)
- break;
- }
- {
- UInt32 v = GetUi32(p - 4);
- v <<= 2;
- v += ip + (UInt32)(p - data);
- v >>= 2;
- v &= 0x00FFFFFF;
- v |= 0xEB000000;
- SetUi32(p - 4, v);
- }
- }
-
- for (;;)
- {
- for (;;)
- {
- if (p >= lim)
- return p - data;
- p += 4;
- if (p[-1] == 0xEB)
- break;
- }
- {
- UInt32 v = GetUi32(p - 4);
- v <<= 2;
- v -= ip + (UInt32)(p - data);
- v >>= 2;
- v &= 0x00FFFFFF;
- v |= 0xEB000000;
- SetUi32(p - 4, v);
- }
- }
-}
-
-
-SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
-{
- Byte *p;
- const Byte *lim;
- size &= ~(size_t)1;
- p = data;
- lim = data + size - 4;
-
- if (encoding)
-
- for (;;)
- {
- UInt32 b1;
- for (;;)
- {
- UInt32 b3;
- if (p > lim)
- return p - data;
- b1 = p[1];
- b3 = p[3];
- p += 2;
- b1 ^= 8;
- if ((b3 & b1) >= 0xF8)
- break;
- }
- {
- UInt32 v =
- ((UInt32)b1 << 19)
- + (((UInt32)p[1] & 0x7) << 8)
- + (((UInt32)p[-2] << 11))
- + (p[0]);
-
- p += 2;
- {
- UInt32 cur = (ip + (UInt32)(p - data)) >> 1;
- v += cur;
- }
-
- p[-4] = (Byte)(v >> 11);
- p[-3] = (Byte)(0xF0 | ((v >> 19) & 0x7));
- p[-2] = (Byte)v;
- p[-1] = (Byte)(0xF8 | (v >> 8));
- }
- }
-
- for (;;)
- {
- UInt32 b1;
- for (;;)
- {
- UInt32 b3;
- if (p > lim)
- return p - data;
- b1 = p[1];
- b3 = p[3];
- p += 2;
- b1 ^= 8;
- if ((b3 & b1) >= 0xF8)
- break;
- }
- {
- UInt32 v =
- ((UInt32)b1 << 19)
- + (((UInt32)p[1] & 0x7) << 8)
- + (((UInt32)p[-2] << 11))
- + (p[0]);
-
- p += 2;
- {
- UInt32 cur = (ip + (UInt32)(p - data)) >> 1;
- v -= cur;
- }
-
- /*
- SetUi16(p - 4, (UInt16)(((v >> 11) & 0x7FF) | 0xF000));
- SetUi16(p - 2, (UInt16)(v | 0xF800));
- */
-
- p[-4] = (Byte)(v >> 11);
- p[-3] = (Byte)(0xF0 | ((v >> 19) & 0x7));
- p[-2] = (Byte)v;
- p[-1] = (Byte)(0xF8 | (v >> 8));
- }
- }
-}
-
-
-SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
-{
- Byte *p;
- const Byte *lim;
- size &= ~(size_t)3;
- ip -= 4;
- p = data;
- lim = data + size;
-
- for (;;)
- {
- for (;;)
- {
- if (p >= lim)
- return p - data;
- p += 4;
- /* if ((v & 0xFC000003) == 0x48000001) */
- if ((p[-4] & 0xFC) == 0x48 && (p[-1] & 3) == 1)
- break;
- }
- {
- UInt32 v = GetBe32(p - 4);
- if (encoding)
- v += ip + (UInt32)(p - data);
- else
- v -= ip + (UInt32)(p - data);
- v &= 0x03FFFFFF;
- v |= 0x48000000;
- SetBe32(p - 4, v);
- }
- }
-}
-
-
-SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
-{
- Byte *p;
- const Byte *lim;
- size &= ~(size_t)3;
- ip -= 4;
- p = data;
- lim = data + size;
-
- for (;;)
- {
- for (;;)
- {
- if (p >= lim)
- return p - data;
- /*
- v = GetBe32(p);
- p += 4;
- m = v + ((UInt32)5 << 29);
- m ^= (UInt32)7 << 29;
- m += (UInt32)1 << 22;
- if ((m & ((UInt32)0x1FF << 23)) == 0)
- break;
- */
- p += 4;
- if ((p[-4] == 0x40 && (p[-3] & 0xC0) == 0) ||
- (p[-4] == 0x7F && (p[-3] >= 0xC0)))
- break;
- }
- {
- UInt32 v = GetBe32(p - 4);
- v <<= 2;
- if (encoding)
- v += ip + (UInt32)(p - data);
- else
- v -= ip + (UInt32)(p - data);
-
- v &= 0x01FFFFFF;
- v -= (UInt32)1 << 24;
- v ^= 0xFF000000;
- v >>= 2;
- v |= 0x40000000;
- SetBe32(p - 4, v);
- }
- }
-}
+/* Bra.c -- Converters for RISC code
+2017-04-04 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include "CpuArch.h"
+#include "Bra.h"
+
+SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
+{
+ Byte *p;
+ const Byte *lim;
+ size &= ~(size_t)3;
+ ip += 4;
+ p = data;
+ lim = data + size;
+
+ if (encoding)
+
+ for (;;)
+ {
+ for (;;)
+ {
+ if (p >= lim)
+ return p - data;
+ p += 4;
+ if (p[-1] == 0xEB)
+ break;
+ }
+ {
+ UInt32 v = GetUi32(p - 4);
+ v <<= 2;
+ v += ip + (UInt32)(p - data);
+ v >>= 2;
+ v &= 0x00FFFFFF;
+ v |= 0xEB000000;
+ SetUi32(p - 4, v);
+ }
+ }
+
+ for (;;)
+ {
+ for (;;)
+ {
+ if (p >= lim)
+ return p - data;
+ p += 4;
+ if (p[-1] == 0xEB)
+ break;
+ }
+ {
+ UInt32 v = GetUi32(p - 4);
+ v <<= 2;
+ v -= ip + (UInt32)(p - data);
+ v >>= 2;
+ v &= 0x00FFFFFF;
+ v |= 0xEB000000;
+ SetUi32(p - 4, v);
+ }
+ }
+}
+
+
+SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
+{
+ Byte *p;
+ const Byte *lim;
+ size &= ~(size_t)1;
+ p = data;
+ lim = data + size - 4;
+
+ if (encoding)
+
+ for (;;)
+ {
+ UInt32 b1;
+ for (;;)
+ {
+ UInt32 b3;
+ if (p > lim)
+ return p - data;
+ b1 = p[1];
+ b3 = p[3];
+ p += 2;
+ b1 ^= 8;
+ if ((b3 & b1) >= 0xF8)
+ break;
+ }
+ {
+ UInt32 v =
+ ((UInt32)b1 << 19)
+ + (((UInt32)p[1] & 0x7) << 8)
+ + (((UInt32)p[-2] << 11))
+ + (p[0]);
+
+ p += 2;
+ {
+ UInt32 cur = (ip + (UInt32)(p - data)) >> 1;
+ v += cur;
+ }
+
+ p[-4] = (Byte)(v >> 11);
+ p[-3] = (Byte)(0xF0 | ((v >> 19) & 0x7));
+ p[-2] = (Byte)v;
+ p[-1] = (Byte)(0xF8 | (v >> 8));
+ }
+ }
+
+ for (;;)
+ {
+ UInt32 b1;
+ for (;;)
+ {
+ UInt32 b3;
+ if (p > lim)
+ return p - data;
+ b1 = p[1];
+ b3 = p[3];
+ p += 2;
+ b1 ^= 8;
+ if ((b3 & b1) >= 0xF8)
+ break;
+ }
+ {
+ UInt32 v =
+ ((UInt32)b1 << 19)
+ + (((UInt32)p[1] & 0x7) << 8)
+ + (((UInt32)p[-2] << 11))
+ + (p[0]);
+
+ p += 2;
+ {
+ UInt32 cur = (ip + (UInt32)(p - data)) >> 1;
+ v -= cur;
+ }
+
+ /*
+ SetUi16(p - 4, (UInt16)(((v >> 11) & 0x7FF) | 0xF000));
+ SetUi16(p - 2, (UInt16)(v | 0xF800));
+ */
+
+ p[-4] = (Byte)(v >> 11);
+ p[-3] = (Byte)(0xF0 | ((v >> 19) & 0x7));
+ p[-2] = (Byte)v;
+ p[-1] = (Byte)(0xF8 | (v >> 8));
+ }
+ }
+}
+
+
+SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
+{
+ Byte *p;
+ const Byte *lim;
+ size &= ~(size_t)3;
+ ip -= 4;
+ p = data;
+ lim = data + size;
+
+ for (;;)
+ {
+ for (;;)
+ {
+ if (p >= lim)
+ return p - data;
+ p += 4;
+ /* if ((v & 0xFC000003) == 0x48000001) */
+ if ((p[-4] & 0xFC) == 0x48 && (p[-1] & 3) == 1)
+ break;
+ }
+ {
+ UInt32 v = GetBe32(p - 4);
+ if (encoding)
+ v += ip + (UInt32)(p - data);
+ else
+ v -= ip + (UInt32)(p - data);
+ v &= 0x03FFFFFF;
+ v |= 0x48000000;
+ SetBe32(p - 4, v);
+ }
+ }
+}
+
+
+SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
+{
+ Byte *p;
+ const Byte *lim;
+ size &= ~(size_t)3;
+ ip -= 4;
+ p = data;
+ lim = data + size;
+
+ for (;;)
+ {
+ for (;;)
+ {
+ if (p >= lim)
+ return p - data;
+ /*
+ v = GetBe32(p);
+ p += 4;
+ m = v + ((UInt32)5 << 29);
+ m ^= (UInt32)7 << 29;
+ m += (UInt32)1 << 22;
+ if ((m & ((UInt32)0x1FF << 23)) == 0)
+ break;
+ */
+ p += 4;
+ if ((p[-4] == 0x40 && (p[-3] & 0xC0) == 0) ||
+ (p[-4] == 0x7F && (p[-3] >= 0xC0)))
+ break;
+ }
+ {
+ UInt32 v = GetBe32(p - 4);
+ v <<= 2;
+ if (encoding)
+ v += ip + (UInt32)(p - data);
+ else
+ v -= ip + (UInt32)(p - data);
+
+ v &= 0x01FFFFFF;
+ v -= (UInt32)1 << 24;
+ v ^= 0xFF000000;
+ v >>= 2;
+ v |= 0x40000000;
+ SetBe32(p - 4, v);
+ }
+ }
+}
diff --git a/contrib/libs/lzmasdk/Bra.h b/contrib/libs/lzmasdk/Bra.h
index 855e37a6b5..aba8dce14f 100644
--- a/contrib/libs/lzmasdk/Bra.h
+++ b/contrib/libs/lzmasdk/Bra.h
@@ -1,64 +1,64 @@
-/* Bra.h -- Branch converters for executables
-2013-01-18 : Igor Pavlov : Public domain */
-
-#ifndef __BRA_H
-#define __BRA_H
-
-#include "7zTypes.h"
-
-EXTERN_C_BEGIN
-
-/*
-These functions convert relative addresses to absolute addresses
-in CALL instructions to increase the compression ratio.
-
- In:
- data - data buffer
- size - size of data
- ip - current virtual Instruction Pinter (IP) value
- state - state variable for x86 converter
- encoding - 0 (for decoding), 1 (for encoding)
-
- Out:
- state - state variable for x86 converter
-
- Returns:
- The number of processed bytes. If you call these functions with multiple calls,
- you must start next call with first byte after block of processed bytes.
-
- Type Endian Alignment LookAhead
-
- x86 little 1 4
- ARMT little 2 2
- ARM little 4 0
- PPC big 4 0
- SPARC big 4 0
- IA64 little 16 0
-
- size must be >= Alignment + LookAhead, if it's not last block.
- If (size < Alignment + LookAhead), converter returns 0.
-
- Example:
-
- UInt32 ip = 0;
- for ()
- {
- ; size must be >= Alignment + LookAhead, if it's not last block
- SizeT processed = Convert(data, size, ip, 1);
- data += processed;
- size -= processed;
- ip += processed;
- }
-*/
-
-#define x86_Convert_Init(state) { state = 0; }
-SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding);
-SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
-SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
-SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
-SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
-SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
-
-EXTERN_C_END
-
-#endif
+/* Bra.h -- Branch converters for executables
+2013-01-18 : Igor Pavlov : Public domain */
+
+#ifndef __BRA_H
+#define __BRA_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+/*
+These functions convert relative addresses to absolute addresses
+in CALL instructions to increase the compression ratio.
+
+ In:
+ data - data buffer
+ size - size of data
+ ip - current virtual Instruction Pinter (IP) value
+ state - state variable for x86 converter
+ encoding - 0 (for decoding), 1 (for encoding)
+
+ Out:
+ state - state variable for x86 converter
+
+ Returns:
+ The number of processed bytes. If you call these functions with multiple calls,
+ you must start next call with first byte after block of processed bytes.
+
+ Type Endian Alignment LookAhead
+
+ x86 little 1 4
+ ARMT little 2 2
+ ARM little 4 0
+ PPC big 4 0
+ SPARC big 4 0
+ IA64 little 16 0
+
+ size must be >= Alignment + LookAhead, if it's not last block.
+ If (size < Alignment + LookAhead), converter returns 0.
+
+ Example:
+
+ UInt32 ip = 0;
+ for ()
+ {
+ ; size must be >= Alignment + LookAhead, if it's not last block
+ SizeT processed = Convert(data, size, ip, 1);
+ data += processed;
+ size -= processed;
+ ip += processed;
+ }
+*/
+
+#define x86_Convert_Init(state) { state = 0; }
+SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding);
+SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
+SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
+SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
+SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
+SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/Bra86.c b/contrib/libs/lzmasdk/Bra86.c
index 93ed4d762b..a6463c63ba 100644
--- a/contrib/libs/lzmasdk/Bra86.c
+++ b/contrib/libs/lzmasdk/Bra86.c
@@ -1,82 +1,82 @@
-/* Bra86.c -- Converter for x86 code (BCJ)
-2017-04-03 : Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include "Bra.h"
-
-#define Test86MSByte(b) ((((b) + 1) & 0xFE) == 0)
-
-SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding)
-{
- SizeT pos = 0;
- UInt32 mask = *state & 7;
- if (size < 5)
- return 0;
- size -= 4;
- ip += 5;
-
- for (;;)
- {
- Byte *p = data + pos;
- const Byte *limit = data + size;
- for (; p < limit; p++)
- if ((*p & 0xFE) == 0xE8)
- break;
-
- {
- SizeT d = (SizeT)(p - data - pos);
- pos = (SizeT)(p - data);
- if (p >= limit)
- {
- *state = (d > 2 ? 0 : mask >> (unsigned)d);
- return pos;
- }
- if (d > 2)
- mask = 0;
- else
- {
- mask >>= (unsigned)d;
- if (mask != 0 && (mask > 4 || mask == 3 || Test86MSByte(p[(size_t)(mask >> 1) + 1])))
- {
- mask = (mask >> 1) | 4;
- pos++;
- continue;
- }
- }
- }
-
- if (Test86MSByte(p[4]))
- {
- UInt32 v = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]);
- UInt32 cur = ip + (UInt32)pos;
- pos += 5;
- if (encoding)
- v += cur;
- else
- v -= cur;
- if (mask != 0)
- {
- unsigned sh = (mask & 6) << 2;
- if (Test86MSByte((Byte)(v >> sh)))
- {
- v ^= (((UInt32)0x100 << sh) - 1);
- if (encoding)
- v += cur;
- else
- v -= cur;
- }
- mask = 0;
- }
- p[1] = (Byte)v;
- p[2] = (Byte)(v >> 8);
- p[3] = (Byte)(v >> 16);
- p[4] = (Byte)(0 - ((v >> 24) & 1));
- }
- else
- {
- mask = (mask >> 1) | 4;
- pos++;
- }
- }
-}
+/* Bra86.c -- Converter for x86 code (BCJ)
+2017-04-03 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include "Bra.h"
+
+#define Test86MSByte(b) ((((b) + 1) & 0xFE) == 0)
+
+SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding)
+{
+ SizeT pos = 0;
+ UInt32 mask = *state & 7;
+ if (size < 5)
+ return 0;
+ size -= 4;
+ ip += 5;
+
+ for (;;)
+ {
+ Byte *p = data + pos;
+ const Byte *limit = data + size;
+ for (; p < limit; p++)
+ if ((*p & 0xFE) == 0xE8)
+ break;
+
+ {
+ SizeT d = (SizeT)(p - data - pos);
+ pos = (SizeT)(p - data);
+ if (p >= limit)
+ {
+ *state = (d > 2 ? 0 : mask >> (unsigned)d);
+ return pos;
+ }
+ if (d > 2)
+ mask = 0;
+ else
+ {
+ mask >>= (unsigned)d;
+ if (mask != 0 && (mask > 4 || mask == 3 || Test86MSByte(p[(size_t)(mask >> 1) + 1])))
+ {
+ mask = (mask >> 1) | 4;
+ pos++;
+ continue;
+ }
+ }
+ }
+
+ if (Test86MSByte(p[4]))
+ {
+ UInt32 v = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]);
+ UInt32 cur = ip + (UInt32)pos;
+ pos += 5;
+ if (encoding)
+ v += cur;
+ else
+ v -= cur;
+ if (mask != 0)
+ {
+ unsigned sh = (mask & 6) << 2;
+ if (Test86MSByte((Byte)(v >> sh)))
+ {
+ v ^= (((UInt32)0x100 << sh) - 1);
+ if (encoding)
+ v += cur;
+ else
+ v -= cur;
+ }
+ mask = 0;
+ }
+ p[1] = (Byte)v;
+ p[2] = (Byte)(v >> 8);
+ p[3] = (Byte)(v >> 16);
+ p[4] = (Byte)(0 - ((v >> 24) & 1));
+ }
+ else
+ {
+ mask = (mask >> 1) | 4;
+ pos++;
+ }
+ }
+}
diff --git a/contrib/libs/lzmasdk/BraIA64.c b/contrib/libs/lzmasdk/BraIA64.c
index d1dbc62c55..2656907a0b 100644
--- a/contrib/libs/lzmasdk/BraIA64.c
+++ b/contrib/libs/lzmasdk/BraIA64.c
@@ -1,53 +1,53 @@
-/* BraIA64.c -- Converter for IA-64 code
-2017-01-26 : Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include "CpuArch.h"
-#include "Bra.h"
-
-SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
-{
- SizeT i;
- if (size < 16)
- return 0;
- size -= 16;
- i = 0;
- do
- {
- unsigned m = ((UInt32)0x334B0000 >> (data[i] & 0x1E)) & 3;
- if (m)
- {
- m++;
- do
- {
- Byte *p = data + (i + (size_t)m * 5 - 8);
- if (((p[3] >> m) & 15) == 5
- && (((p[-1] | ((UInt32)p[0] << 8)) >> m) & 0x70) == 0)
- {
- unsigned raw = GetUi32(p);
- unsigned v = raw >> m;
- v = (v & 0xFFFFF) | ((v & (1 << 23)) >> 3);
-
- v <<= 4;
- if (encoding)
- v += ip + (UInt32)i;
- else
- v -= ip + (UInt32)i;
- v >>= 4;
-
- v &= 0x1FFFFF;
- v += 0x700000;
- v &= 0x8FFFFF;
- raw &= ~((UInt32)0x8FFFFF << m);
- raw |= (v << m);
- SetUi32(p, raw);
- }
- }
- while (++m <= 4);
- }
- i += 16;
- }
- while (i <= size);
- return i;
-}
+/* BraIA64.c -- Converter for IA-64 code
+2017-01-26 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include "CpuArch.h"
+#include "Bra.h"
+
+SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
+{
+ SizeT i;
+ if (size < 16)
+ return 0;
+ size -= 16;
+ i = 0;
+ do
+ {
+ unsigned m = ((UInt32)0x334B0000 >> (data[i] & 0x1E)) & 3;
+ if (m)
+ {
+ m++;
+ do
+ {
+ Byte *p = data + (i + (size_t)m * 5 - 8);
+ if (((p[3] >> m) & 15) == 5
+ && (((p[-1] | ((UInt32)p[0] << 8)) >> m) & 0x70) == 0)
+ {
+ unsigned raw = GetUi32(p);
+ unsigned v = raw >> m;
+ v = (v & 0xFFFFF) | ((v & (1 << 23)) >> 3);
+
+ v <<= 4;
+ if (encoding)
+ v += ip + (UInt32)i;
+ else
+ v -= ip + (UInt32)i;
+ v >>= 4;
+
+ v &= 0x1FFFFF;
+ v += 0x700000;
+ v &= 0x8FFFFF;
+ raw &= ~((UInt32)0x8FFFFF << m);
+ raw |= (v << m);
+ SetUi32(p, raw);
+ }
+ }
+ while (++m <= 4);
+ }
+ i += 16;
+ }
+ while (i <= size);
+ return i;
+}
diff --git a/contrib/libs/lzmasdk/Compiler.h b/contrib/libs/lzmasdk/Compiler.h
index 0cc409d8a8..c788648cd2 100644
--- a/contrib/libs/lzmasdk/Compiler.h
+++ b/contrib/libs/lzmasdk/Compiler.h
@@ -1,33 +1,33 @@
-/* Compiler.h
-2017-04-03 : Igor Pavlov : Public domain */
-
-#ifndef __7Z_COMPILER_H
-#define __7Z_COMPILER_H
-
-#ifdef _MSC_VER
-
- #ifdef UNDER_CE
- #define RPC_NO_WINDOWS_H
- /* #pragma warning(disable : 4115) // '_RPC_ASYNC_STATE' : named type definition in parentheses */
- #pragma warning(disable : 4201) // nonstandard extension used : nameless struct/union
- #pragma warning(disable : 4214) // nonstandard extension used : bit field types other than int
- #endif
-
- #if _MSC_VER >= 1300
- #pragma warning(disable : 4996) // This function or variable may be unsafe
- #else
- #pragma warning(disable : 4511) // copy constructor could not be generated
- #pragma warning(disable : 4512) // assignment operator could not be generated
- #pragma warning(disable : 4514) // unreferenced inline function has been removed
- #pragma warning(disable : 4702) // unreachable code
- #pragma warning(disable : 4710) // not inlined
- #pragma warning(disable : 4714) // function marked as __forceinline not inlined
- #pragma warning(disable : 4786) // identifier was truncated to '255' characters in the debug information
- #endif
-
-#endif
-
-#define UNUSED_VAR(x) (void)x;
-/* #define UNUSED_VAR(x) x=x; */
-
-#endif
+/* Compiler.h
+2017-04-03 : Igor Pavlov : Public domain */
+
+#ifndef __7Z_COMPILER_H
+#define __7Z_COMPILER_H
+
+#ifdef _MSC_VER
+
+ #ifdef UNDER_CE
+ #define RPC_NO_WINDOWS_H
+ /* #pragma warning(disable : 4115) // '_RPC_ASYNC_STATE' : named type definition in parentheses */
+ #pragma warning(disable : 4201) // nonstandard extension used : nameless struct/union
+ #pragma warning(disable : 4214) // nonstandard extension used : bit field types other than int
+ #endif
+
+ #if _MSC_VER >= 1300
+ #pragma warning(disable : 4996) // This function or variable may be unsafe
+ #else
+ #pragma warning(disable : 4511) // copy constructor could not be generated
+ #pragma warning(disable : 4512) // assignment operator could not be generated
+ #pragma warning(disable : 4514) // unreferenced inline function has been removed
+ #pragma warning(disable : 4702) // unreachable code
+ #pragma warning(disable : 4710) // not inlined
+ #pragma warning(disable : 4714) // function marked as __forceinline not inlined
+ #pragma warning(disable : 4786) // identifier was truncated to '255' characters in the debug information
+ #endif
+
+#endif
+
+#define UNUSED_VAR(x) (void)x;
+/* #define UNUSED_VAR(x) x=x; */
+
+#endif
diff --git a/contrib/libs/lzmasdk/CpuArch.c b/contrib/libs/lzmasdk/CpuArch.c
index 02e482e088..ff1890e7fe 100644
--- a/contrib/libs/lzmasdk/CpuArch.c
+++ b/contrib/libs/lzmasdk/CpuArch.c
@@ -1,218 +1,218 @@
-/* CpuArch.c -- CPU specific code
-2018-02-18: Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include "CpuArch.h"
-
-#ifdef MY_CPU_X86_OR_AMD64
-
-#if (defined(_MSC_VER) && !defined(MY_CPU_AMD64)) || defined(__GNUC__)
-#define USE_ASM
-#endif
-
-#if !defined(USE_ASM) && _MSC_VER >= 1500
-#include <intrin.h>
-#endif
-
-#if defined(USE_ASM) && !defined(MY_CPU_AMD64)
-static UInt32 CheckFlag(UInt32 flag)
-{
- #ifdef _MSC_VER
- __asm pushfd;
- __asm pop EAX;
- __asm mov EDX, EAX;
- __asm xor EAX, flag;
- __asm push EAX;
- __asm popfd;
- __asm pushfd;
- __asm pop EAX;
- __asm xor EAX, EDX;
- __asm push EDX;
- __asm popfd;
- __asm and flag, EAX;
- #else
- __asm__ __volatile__ (
- "pushf\n\t"
- "pop %%EAX\n\t"
- "movl %%EAX,%%EDX\n\t"
- "xorl %0,%%EAX\n\t"
- "push %%EAX\n\t"
- "popf\n\t"
- "pushf\n\t"
- "pop %%EAX\n\t"
- "xorl %%EDX,%%EAX\n\t"
- "push %%EDX\n\t"
- "popf\n\t"
- "andl %%EAX, %0\n\t":
- "=c" (flag) : "c" (flag) :
- "%eax", "%edx");
- #endif
- return flag;
-}
-#define CHECK_CPUID_IS_SUPPORTED if (CheckFlag(1 << 18) == 0 || CheckFlag(1 << 21) == 0) return False;
-#else
-#define CHECK_CPUID_IS_SUPPORTED
-#endif
-
-void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d)
-{
- #ifdef USE_ASM
-
- #ifdef _MSC_VER
-
- UInt32 a2, b2, c2, d2;
- __asm xor EBX, EBX;
- __asm xor ECX, ECX;
- __asm xor EDX, EDX;
- __asm mov EAX, function;
- __asm cpuid;
- __asm mov a2, EAX;
- __asm mov b2, EBX;
- __asm mov c2, ECX;
- __asm mov d2, EDX;
-
- *a = a2;
- *b = b2;
- *c = c2;
- *d = d2;
-
- #else
-
- __asm__ __volatile__ (
- #if defined(MY_CPU_AMD64) && defined(__PIC__)
- "mov %%rbx, %%rdi;"
- "cpuid;"
- "xchg %%rbx, %%rdi;"
- : "=a" (*a) ,
- "=D" (*b) ,
- #elif defined(MY_CPU_X86) && defined(__PIC__)
- "mov %%ebx, %%edi;"
- "cpuid;"
- "xchgl %%ebx, %%edi;"
- : "=a" (*a) ,
- "=D" (*b) ,
- #else
- "cpuid"
- : "=a" (*a) ,
- "=b" (*b) ,
- #endif
- "=c" (*c) ,
- "=d" (*d)
- : "0" (function)) ;
-
- #endif
-
- #else
-
- int CPUInfo[4];
- __cpuid(CPUInfo, function);
- *a = CPUInfo[0];
- *b = CPUInfo[1];
- *c = CPUInfo[2];
- *d = CPUInfo[3];
-
- #endif
-}
-
-BoolInt x86cpuid_CheckAndRead(Cx86cpuid *p)
-{
- CHECK_CPUID_IS_SUPPORTED
- MyCPUID(0, &p->maxFunc, &p->vendor[0], &p->vendor[2], &p->vendor[1]);
- MyCPUID(1, &p->ver, &p->b, &p->c, &p->d);
- return True;
-}
-
-static const UInt32 kVendors[][3] =
-{
- { 0x756E6547, 0x49656E69, 0x6C65746E},
- { 0x68747541, 0x69746E65, 0x444D4163},
- { 0x746E6543, 0x48727561, 0x736C7561}
-};
-
-int x86cpuid_GetFirm(const Cx86cpuid *p)
-{
- unsigned i;
- for (i = 0; i < sizeof(kVendors) / sizeof(kVendors[i]); i++)
- {
- const UInt32 *v = kVendors[i];
- if (v[0] == p->vendor[0] &&
- v[1] == p->vendor[1] &&
- v[2] == p->vendor[2])
- return (int)i;
- }
- return -1;
-}
-
-BoolInt CPU_Is_InOrder()
-{
- Cx86cpuid p;
- int firm;
- UInt32 family, model;
- if (!x86cpuid_CheckAndRead(&p))
- return True;
-
- family = x86cpuid_GetFamily(p.ver);
- model = x86cpuid_GetModel(p.ver);
-
- firm = x86cpuid_GetFirm(&p);
-
- switch (firm)
- {
- case CPU_FIRM_INTEL: return (family < 6 || (family == 6 && (
- /* In-Order Atom CPU */
- model == 0x1C /* 45 nm, N4xx, D4xx, N5xx, D5xx, 230, 330 */
- || model == 0x26 /* 45 nm, Z6xx */
- || model == 0x27 /* 32 nm, Z2460 */
- || model == 0x35 /* 32 nm, Z2760 */
- || model == 0x36 /* 32 nm, N2xxx, D2xxx */
- )));
- case CPU_FIRM_AMD: return (family < 5 || (family == 5 && (model < 6 || model == 0xA)));
- case CPU_FIRM_VIA: return (family < 6 || (family == 6 && model < 0xF));
- }
- return True;
-}
-
-#if !defined(MY_CPU_AMD64) && defined(_WIN32)
-#include <windows.h>
-static BoolInt CPU_Sys_Is_SSE_Supported()
-{
- OSVERSIONINFO vi;
- vi.dwOSVersionInfoSize = sizeof(vi);
- if (!GetVersionEx(&vi))
- return False;
- return (vi.dwMajorVersion >= 5);
-}
-#define CHECK_SYS_SSE_SUPPORT if (!CPU_Sys_Is_SSE_Supported()) return False;
-#else
-#define CHECK_SYS_SSE_SUPPORT
-#endif
-
-BoolInt CPU_Is_Aes_Supported()
-{
- Cx86cpuid p;
- CHECK_SYS_SSE_SUPPORT
- if (!x86cpuid_CheckAndRead(&p))
- return False;
- return (p.c >> 25) & 1;
-}
-
-BoolInt CPU_IsSupported_PageGB()
-{
- Cx86cpuid cpuid;
- if (!x86cpuid_CheckAndRead(&cpuid))
- return False;
- {
- UInt32 d[4] = { 0 };
- MyCPUID(0x80000000, &d[0], &d[1], &d[2], &d[3]);
- if (d[0] < 0x80000001)
- return False;
- }
- {
- UInt32 d[4] = { 0 };
- MyCPUID(0x80000001, &d[0], &d[1], &d[2], &d[3]);
- return (d[3] >> 26) & 1;
- }
-}
-
-#endif
+/* CpuArch.c -- CPU specific code
+2018-02-18: Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include "CpuArch.h"
+
+#ifdef MY_CPU_X86_OR_AMD64
+
+#if (defined(_MSC_VER) && !defined(MY_CPU_AMD64)) || defined(__GNUC__)
+#define USE_ASM
+#endif
+
+#if !defined(USE_ASM) && _MSC_VER >= 1500
+#include <intrin.h>
+#endif
+
+#if defined(USE_ASM) && !defined(MY_CPU_AMD64)
+static UInt32 CheckFlag(UInt32 flag)
+{
+ #ifdef _MSC_VER
+ __asm pushfd;
+ __asm pop EAX;
+ __asm mov EDX, EAX;
+ __asm xor EAX, flag;
+ __asm push EAX;
+ __asm popfd;
+ __asm pushfd;
+ __asm pop EAX;
+ __asm xor EAX, EDX;
+ __asm push EDX;
+ __asm popfd;
+ __asm and flag, EAX;
+ #else
+ __asm__ __volatile__ (
+ "pushf\n\t"
+ "pop %%EAX\n\t"
+ "movl %%EAX,%%EDX\n\t"
+ "xorl %0,%%EAX\n\t"
+ "push %%EAX\n\t"
+ "popf\n\t"
+ "pushf\n\t"
+ "pop %%EAX\n\t"
+ "xorl %%EDX,%%EAX\n\t"
+ "push %%EDX\n\t"
+ "popf\n\t"
+ "andl %%EAX, %0\n\t":
+ "=c" (flag) : "c" (flag) :
+ "%eax", "%edx");
+ #endif
+ return flag;
+}
+#define CHECK_CPUID_IS_SUPPORTED if (CheckFlag(1 << 18) == 0 || CheckFlag(1 << 21) == 0) return False;
+#else
+#define CHECK_CPUID_IS_SUPPORTED
+#endif
+
+void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d)
+{
+ #ifdef USE_ASM
+
+ #ifdef _MSC_VER
+
+ UInt32 a2, b2, c2, d2;
+ __asm xor EBX, EBX;
+ __asm xor ECX, ECX;
+ __asm xor EDX, EDX;
+ __asm mov EAX, function;
+ __asm cpuid;
+ __asm mov a2, EAX;
+ __asm mov b2, EBX;
+ __asm mov c2, ECX;
+ __asm mov d2, EDX;
+
+ *a = a2;
+ *b = b2;
+ *c = c2;
+ *d = d2;
+
+ #else
+
+ __asm__ __volatile__ (
+ #if defined(MY_CPU_AMD64) && defined(__PIC__)
+ "mov %%rbx, %%rdi;"
+ "cpuid;"
+ "xchg %%rbx, %%rdi;"
+ : "=a" (*a) ,
+ "=D" (*b) ,
+ #elif defined(MY_CPU_X86) && defined(__PIC__)
+ "mov %%ebx, %%edi;"
+ "cpuid;"
+ "xchgl %%ebx, %%edi;"
+ : "=a" (*a) ,
+ "=D" (*b) ,
+ #else
+ "cpuid"
+ : "=a" (*a) ,
+ "=b" (*b) ,
+ #endif
+ "=c" (*c) ,
+ "=d" (*d)
+ : "0" (function)) ;
+
+ #endif
+
+ #else
+
+ int CPUInfo[4];
+ __cpuid(CPUInfo, function);
+ *a = CPUInfo[0];
+ *b = CPUInfo[1];
+ *c = CPUInfo[2];
+ *d = CPUInfo[3];
+
+ #endif
+}
+
+BoolInt x86cpuid_CheckAndRead(Cx86cpuid *p)
+{
+ CHECK_CPUID_IS_SUPPORTED
+ MyCPUID(0, &p->maxFunc, &p->vendor[0], &p->vendor[2], &p->vendor[1]);
+ MyCPUID(1, &p->ver, &p->b, &p->c, &p->d);
+ return True;
+}
+
+static const UInt32 kVendors[][3] =
+{
+ { 0x756E6547, 0x49656E69, 0x6C65746E},
+ { 0x68747541, 0x69746E65, 0x444D4163},
+ { 0x746E6543, 0x48727561, 0x736C7561}
+};
+
+int x86cpuid_GetFirm(const Cx86cpuid *p)
+{
+ unsigned i;
+ for (i = 0; i < sizeof(kVendors) / sizeof(kVendors[i]); i++)
+ {
+ const UInt32 *v = kVendors[i];
+ if (v[0] == p->vendor[0] &&
+ v[1] == p->vendor[1] &&
+ v[2] == p->vendor[2])
+ return (int)i;
+ }
+ return -1;
+}
+
+BoolInt CPU_Is_InOrder()
+{
+ Cx86cpuid p;
+ int firm;
+ UInt32 family, model;
+ if (!x86cpuid_CheckAndRead(&p))
+ return True;
+
+ family = x86cpuid_GetFamily(p.ver);
+ model = x86cpuid_GetModel(p.ver);
+
+ firm = x86cpuid_GetFirm(&p);
+
+ switch (firm)
+ {
+ case CPU_FIRM_INTEL: return (family < 6 || (family == 6 && (
+ /* In-Order Atom CPU */
+ model == 0x1C /* 45 nm, N4xx, D4xx, N5xx, D5xx, 230, 330 */
+ || model == 0x26 /* 45 nm, Z6xx */
+ || model == 0x27 /* 32 nm, Z2460 */
+ || model == 0x35 /* 32 nm, Z2760 */
+ || model == 0x36 /* 32 nm, N2xxx, D2xxx */
+ )));
+ case CPU_FIRM_AMD: return (family < 5 || (family == 5 && (model < 6 || model == 0xA)));
+ case CPU_FIRM_VIA: return (family < 6 || (family == 6 && model < 0xF));
+ }
+ return True;
+}
+
+#if !defined(MY_CPU_AMD64) && defined(_WIN32)
+#include <windows.h>
+static BoolInt CPU_Sys_Is_SSE_Supported()
+{
+ OSVERSIONINFO vi;
+ vi.dwOSVersionInfoSize = sizeof(vi);
+ if (!GetVersionEx(&vi))
+ return False;
+ return (vi.dwMajorVersion >= 5);
+}
+#define CHECK_SYS_SSE_SUPPORT if (!CPU_Sys_Is_SSE_Supported()) return False;
+#else
+#define CHECK_SYS_SSE_SUPPORT
+#endif
+
+BoolInt CPU_Is_Aes_Supported()
+{
+ Cx86cpuid p;
+ CHECK_SYS_SSE_SUPPORT
+ if (!x86cpuid_CheckAndRead(&p))
+ return False;
+ return (p.c >> 25) & 1;
+}
+
+BoolInt CPU_IsSupported_PageGB()
+{
+ Cx86cpuid cpuid;
+ if (!x86cpuid_CheckAndRead(&cpuid))
+ return False;
+ {
+ UInt32 d[4] = { 0 };
+ MyCPUID(0x80000000, &d[0], &d[1], &d[2], &d[3]);
+ if (d[0] < 0x80000001)
+ return False;
+ }
+ {
+ UInt32 d[4] = { 0 };
+ MyCPUID(0x80000001, &d[0], &d[1], &d[2], &d[3]);
+ return (d[3] >> 26) & 1;
+ }
+}
+
+#endif
diff --git a/contrib/libs/lzmasdk/CpuArch.h b/contrib/libs/lzmasdk/CpuArch.h
index bd42938802..5f74c1c0cb 100644
--- a/contrib/libs/lzmasdk/CpuArch.h
+++ b/contrib/libs/lzmasdk/CpuArch.h
@@ -1,336 +1,336 @@
-/* CpuArch.h -- CPU specific code
-2018-02-18 : Igor Pavlov : Public domain */
-
-#ifndef __CPU_ARCH_H
-#define __CPU_ARCH_H
-
-#include "7zTypes.h"
-
-EXTERN_C_BEGIN
-
-/*
-MY_CPU_LE means that CPU is LITTLE ENDIAN.
-MY_CPU_BE means that CPU is BIG ENDIAN.
-If MY_CPU_LE and MY_CPU_BE are not defined, we don't know about ENDIANNESS of platform.
-
-MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and CPU supports unaligned memory accesses.
-*/
-
-#if defined(_M_X64) \
- || defined(_M_AMD64) \
- || defined(__x86_64__) \
- || defined(__AMD64__) \
- || defined(__amd64__)
- #define MY_CPU_AMD64
- #ifdef __ILP32__
- #define MY_CPU_NAME "x32"
- #else
- #define MY_CPU_NAME "x64"
- #endif
- #define MY_CPU_64BIT
-#endif
-
-
-#if defined(_M_IX86) \
- || defined(__i386__)
- #define MY_CPU_X86
- #define MY_CPU_NAME "x86"
- #define MY_CPU_32BIT
-#endif
-
-
-#if defined(_M_ARM64) \
- || defined(__AARCH64EL__) \
- || defined(__AARCH64EB__) \
- || defined(__aarch64__)
- #define MY_CPU_ARM64
- #define MY_CPU_NAME "arm64"
- #define MY_CPU_64BIT
-#endif
-
-
-#if defined(_M_ARM) \
- || defined(_M_ARM_NT) \
- || defined(_M_ARMT) \
- || defined(__arm__) \
- || defined(__thumb__) \
- || defined(__ARMEL__) \
- || defined(__ARMEB__) \
- || defined(__THUMBEL__) \
- || defined(__THUMBEB__)
- #define MY_CPU_ARM
- #define MY_CPU_NAME "arm"
- #define MY_CPU_32BIT
-#endif
-
-
-#if defined(_M_IA64) \
- || defined(__ia64__)
- #define MY_CPU_IA64
- #define MY_CPU_NAME "ia64"
- #define MY_CPU_64BIT
-#endif
-
-
-#if defined(__mips64) \
- || defined(__mips64__) \
- || (defined(__mips) && (__mips == 64 || __mips == 4 || __mips == 3))
- #define MY_CPU_NAME "mips64"
- #define MY_CPU_64BIT
-#elif defined(__mips__)
- #define MY_CPU_NAME "mips"
- /* #define MY_CPU_32BIT */
-#endif
-
-
-#if defined(__ppc64__) \
- || defined(__powerpc64__)
- #ifdef __ILP32__
- #define MY_CPU_NAME "ppc64-32"
- #else
- #define MY_CPU_NAME "ppc64"
- #endif
- #define MY_CPU_64BIT
-#elif defined(__ppc__) \
- || defined(__powerpc__)
- #define MY_CPU_NAME "ppc"
- #define MY_CPU_32BIT
-#endif
-
-
-#if defined(__sparc64__)
- #define MY_CPU_NAME "sparc64"
- #define MY_CPU_64BIT
-#elif defined(__sparc__)
- #define MY_CPU_NAME "sparc"
- /* #define MY_CPU_32BIT */
-#endif
-
-
-#if defined(MY_CPU_X86) || defined(MY_CPU_AMD64)
-#define MY_CPU_X86_OR_AMD64
-#endif
-
-
-#ifdef _WIN32
-
- #ifdef MY_CPU_ARM
- #define MY_CPU_ARM_LE
- #endif
-
- #ifdef MY_CPU_ARM64
- #define MY_CPU_ARM64_LE
- #endif
-
- #ifdef _M_IA64
- #define MY_CPU_IA64_LE
- #endif
-
-#endif
-
-
-#if defined(MY_CPU_X86_OR_AMD64) \
- || defined(MY_CPU_ARM_LE) \
- || defined(MY_CPU_ARM64_LE) \
- || defined(MY_CPU_IA64_LE) \
- || defined(__LITTLE_ENDIAN__) \
- || defined(__ARMEL__) \
- || defined(__THUMBEL__) \
- || defined(__AARCH64EL__) \
- || defined(__MIPSEL__) \
- || defined(__MIPSEL) \
- || defined(_MIPSEL) \
- || defined(__BFIN__) \
- || (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
- #define MY_CPU_LE
-#endif
-
-#if defined(__BIG_ENDIAN__) \
- || defined(__ARMEB__) \
- || defined(__THUMBEB__) \
- || defined(__AARCH64EB__) \
- || defined(__MIPSEB__) \
- || defined(__MIPSEB) \
- || defined(_MIPSEB) \
- || defined(__m68k__) \
- || defined(__s390__) \
- || defined(__s390x__) \
- || defined(__zarch__) \
- || (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__))
- #define MY_CPU_BE
-#endif
-
-
-#if defined(MY_CPU_LE) && defined(MY_CPU_BE)
- #error Stop_Compiling_Bad_Endian
-#endif
-
-
-#if defined(MY_CPU_32BIT) && defined(MY_CPU_64BIT)
- #error Stop_Compiling_Bad_32_64_BIT
-#endif
-
-
-#ifndef MY_CPU_NAME
- #ifdef MY_CPU_LE
- #define MY_CPU_NAME "LE"
- #elif defined(MY_CPU_BE)
- #define MY_CPU_NAME "BE"
- #else
- /*
- #define MY_CPU_NAME ""
- */
- #endif
-#endif
-
-
-
-
-
-#ifdef MY_CPU_LE
- #if defined(MY_CPU_X86_OR_AMD64) \
- || defined(MY_CPU_ARM64) \
- || defined(__ARM_FEATURE_UNALIGNED)
- #define MY_CPU_LE_UNALIGN
- #endif
-#endif
-
-
-#ifdef MY_CPU_LE_UNALIGN
-
-#define GetUi16(p) (*(const UInt16 *)(const void *)(p))
-#define GetUi32(p) (*(const UInt32 *)(const void *)(p))
-#define GetUi64(p) (*(const UInt64 *)(const void *)(p))
-
-#define SetUi16(p, v) { *(UInt16 *)(p) = (v); }
-#define SetUi32(p, v) { *(UInt32 *)(p) = (v); }
-#define SetUi64(p, v) { *(UInt64 *)(p) = (v); }
-
-#else
-
-#define GetUi16(p) ( (UInt16) ( \
- ((const Byte *)(p))[0] | \
- ((UInt16)((const Byte *)(p))[1] << 8) ))
-
-#define GetUi32(p) ( \
- ((const Byte *)(p))[0] | \
- ((UInt32)((const Byte *)(p))[1] << 8) | \
- ((UInt32)((const Byte *)(p))[2] << 16) | \
- ((UInt32)((const Byte *)(p))[3] << 24))
-
-#define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte *)(p)) + 4) << 32))
-
-#define SetUi16(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
- _ppp_[0] = (Byte)_vvv_; \
- _ppp_[1] = (Byte)(_vvv_ >> 8); }
-
-#define SetUi32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
- _ppp_[0] = (Byte)_vvv_; \
- _ppp_[1] = (Byte)(_vvv_ >> 8); \
- _ppp_[2] = (Byte)(_vvv_ >> 16); \
- _ppp_[3] = (Byte)(_vvv_ >> 24); }
-
-#define SetUi64(p, v) { Byte *_ppp2_ = (Byte *)(p); UInt64 _vvv2_ = (v); \
- SetUi32(_ppp2_ , (UInt32)_vvv2_); \
- SetUi32(_ppp2_ + 4, (UInt32)(_vvv2_ >> 32)); }
-
-#endif
-
-#ifdef __has_builtin
- #define MY__has_builtin(x) __has_builtin(x)
-#else
- #define MY__has_builtin(x) 0
-#endif
-
-#if defined(MY_CPU_LE_UNALIGN) && /* defined(_WIN64) && */ (_MSC_VER >= 1300)
-
-/* Note: we use bswap instruction, that is unsupported in 386 cpu */
-
-#include <stdlib.h>
-
-#pragma intrinsic(_byteswap_ushort)
-#pragma intrinsic(_byteswap_ulong)
-#pragma intrinsic(_byteswap_uint64)
-
-/* #define GetBe16(p) _byteswap_ushort(*(const UInt16 *)(const Byte *)(p)) */
-#define GetBe32(p) _byteswap_ulong(*(const UInt32 *)(const Byte *)(p))
-#define GetBe64(p) _byteswap_uint64(*(const UInt64 *)(const Byte *)(p))
-
-#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = _byteswap_ulong(v)
-
-#elif defined(MY_CPU_LE_UNALIGN) && ( \
- (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) \
- || (defined(__clang__) && MY__has_builtin(__builtin_bswap16)) )
-
-/* #define GetBe16(p) __builtin_bswap16(*(const UInt16 *)(const Byte *)(p)) */
-#define GetBe32(p) __builtin_bswap32(*(const UInt32 *)(const Byte *)(p))
-#define GetBe64(p) __builtin_bswap64(*(const UInt64 *)(const Byte *)(p))
-
-#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = __builtin_bswap32(v)
-
-#else
-
-#define GetBe32(p) ( \
- ((UInt32)((const Byte *)(p))[0] << 24) | \
- ((UInt32)((const Byte *)(p))[1] << 16) | \
- ((UInt32)((const Byte *)(p))[2] << 8) | \
- ((const Byte *)(p))[3] )
-
-#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4))
-
-#define SetBe32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
- _ppp_[0] = (Byte)(_vvv_ >> 24); \
- _ppp_[1] = (Byte)(_vvv_ >> 16); \
- _ppp_[2] = (Byte)(_vvv_ >> 8); \
- _ppp_[3] = (Byte)_vvv_; }
-
-#endif
-
-
-#ifndef GetBe16
-
-#define GetBe16(p) ( (UInt16) ( \
- ((UInt16)((const Byte *)(p))[0] << 8) | \
- ((const Byte *)(p))[1] ))
-
-#endif
-
-
-
-#ifdef MY_CPU_X86_OR_AMD64
-
-typedef struct
-{
- UInt32 maxFunc;
- UInt32 vendor[3];
- UInt32 ver;
- UInt32 b;
- UInt32 c;
- UInt32 d;
-} Cx86cpuid;
-
-enum
-{
- CPU_FIRM_INTEL,
- CPU_FIRM_AMD,
- CPU_FIRM_VIA
-};
-
-void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d);
-
-BoolInt x86cpuid_CheckAndRead(Cx86cpuid *p);
-int x86cpuid_GetFirm(const Cx86cpuid *p);
-
-#define x86cpuid_GetFamily(ver) (((ver >> 16) & 0xFF0) | ((ver >> 8) & 0xF))
-#define x86cpuid_GetModel(ver) (((ver >> 12) & 0xF0) | ((ver >> 4) & 0xF))
-#define x86cpuid_GetStepping(ver) (ver & 0xF)
-
-BoolInt CPU_Is_InOrder();
-BoolInt CPU_Is_Aes_Supported();
-BoolInt CPU_IsSupported_PageGB();
-
-#endif
-
-EXTERN_C_END
-
-#endif
+/* CpuArch.h -- CPU specific code
+2018-02-18 : Igor Pavlov : Public domain */
+
+#ifndef __CPU_ARCH_H
+#define __CPU_ARCH_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+/*
+MY_CPU_LE means that CPU is LITTLE ENDIAN.
+MY_CPU_BE means that CPU is BIG ENDIAN.
+If MY_CPU_LE and MY_CPU_BE are not defined, we don't know about ENDIANNESS of platform.
+
+MY_CPU_LE_UNALIGN means that CPU is LITTLE ENDIAN and CPU supports unaligned memory accesses.
+*/
+
+#if defined(_M_X64) \
+ || defined(_M_AMD64) \
+ || defined(__x86_64__) \
+ || defined(__AMD64__) \
+ || defined(__amd64__)
+ #define MY_CPU_AMD64
+ #ifdef __ILP32__
+ #define MY_CPU_NAME "x32"
+ #else
+ #define MY_CPU_NAME "x64"
+ #endif
+ #define MY_CPU_64BIT
+#endif
+
+
+#if defined(_M_IX86) \
+ || defined(__i386__)
+ #define MY_CPU_X86
+ #define MY_CPU_NAME "x86"
+ #define MY_CPU_32BIT
+#endif
+
+
+#if defined(_M_ARM64) \
+ || defined(__AARCH64EL__) \
+ || defined(__AARCH64EB__) \
+ || defined(__aarch64__)
+ #define MY_CPU_ARM64
+ #define MY_CPU_NAME "arm64"
+ #define MY_CPU_64BIT
+#endif
+
+
+#if defined(_M_ARM) \
+ || defined(_M_ARM_NT) \
+ || defined(_M_ARMT) \
+ || defined(__arm__) \
+ || defined(__thumb__) \
+ || defined(__ARMEL__) \
+ || defined(__ARMEB__) \
+ || defined(__THUMBEL__) \
+ || defined(__THUMBEB__)
+ #define MY_CPU_ARM
+ #define MY_CPU_NAME "arm"
+ #define MY_CPU_32BIT
+#endif
+
+
+#if defined(_M_IA64) \
+ || defined(__ia64__)
+ #define MY_CPU_IA64
+ #define MY_CPU_NAME "ia64"
+ #define MY_CPU_64BIT
+#endif
+
+
+#if defined(__mips64) \
+ || defined(__mips64__) \
+ || (defined(__mips) && (__mips == 64 || __mips == 4 || __mips == 3))
+ #define MY_CPU_NAME "mips64"
+ #define MY_CPU_64BIT
+#elif defined(__mips__)
+ #define MY_CPU_NAME "mips"
+ /* #define MY_CPU_32BIT */
+#endif
+
+
+#if defined(__ppc64__) \
+ || defined(__powerpc64__)
+ #ifdef __ILP32__
+ #define MY_CPU_NAME "ppc64-32"
+ #else
+ #define MY_CPU_NAME "ppc64"
+ #endif
+ #define MY_CPU_64BIT
+#elif defined(__ppc__) \
+ || defined(__powerpc__)
+ #define MY_CPU_NAME "ppc"
+ #define MY_CPU_32BIT
+#endif
+
+
+#if defined(__sparc64__)
+ #define MY_CPU_NAME "sparc64"
+ #define MY_CPU_64BIT
+#elif defined(__sparc__)
+ #define MY_CPU_NAME "sparc"
+ /* #define MY_CPU_32BIT */
+#endif
+
+
+#if defined(MY_CPU_X86) || defined(MY_CPU_AMD64)
+#define MY_CPU_X86_OR_AMD64
+#endif
+
+
+#ifdef _WIN32
+
+ #ifdef MY_CPU_ARM
+ #define MY_CPU_ARM_LE
+ #endif
+
+ #ifdef MY_CPU_ARM64
+ #define MY_CPU_ARM64_LE
+ #endif
+
+ #ifdef _M_IA64
+ #define MY_CPU_IA64_LE
+ #endif
+
+#endif
+
+
+#if defined(MY_CPU_X86_OR_AMD64) \
+ || defined(MY_CPU_ARM_LE) \
+ || defined(MY_CPU_ARM64_LE) \
+ || defined(MY_CPU_IA64_LE) \
+ || defined(__LITTLE_ENDIAN__) \
+ || defined(__ARMEL__) \
+ || defined(__THUMBEL__) \
+ || defined(__AARCH64EL__) \
+ || defined(__MIPSEL__) \
+ || defined(__MIPSEL) \
+ || defined(_MIPSEL) \
+ || defined(__BFIN__) \
+ || (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
+ #define MY_CPU_LE
+#endif
+
+#if defined(__BIG_ENDIAN__) \
+ || defined(__ARMEB__) \
+ || defined(__THUMBEB__) \
+ || defined(__AARCH64EB__) \
+ || defined(__MIPSEB__) \
+ || defined(__MIPSEB) \
+ || defined(_MIPSEB) \
+ || defined(__m68k__) \
+ || defined(__s390__) \
+ || defined(__s390x__) \
+ || defined(__zarch__) \
+ || (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__))
+ #define MY_CPU_BE
+#endif
+
+
+#if defined(MY_CPU_LE) && defined(MY_CPU_BE)
+ #error Stop_Compiling_Bad_Endian
+#endif
+
+
+#if defined(MY_CPU_32BIT) && defined(MY_CPU_64BIT)
+ #error Stop_Compiling_Bad_32_64_BIT
+#endif
+
+
+#ifndef MY_CPU_NAME
+ #ifdef MY_CPU_LE
+ #define MY_CPU_NAME "LE"
+ #elif defined(MY_CPU_BE)
+ #define MY_CPU_NAME "BE"
+ #else
+ /*
+ #define MY_CPU_NAME ""
+ */
+ #endif
+#endif
+
+
+
+
+
+#ifdef MY_CPU_LE
+ #if defined(MY_CPU_X86_OR_AMD64) \
+ || defined(MY_CPU_ARM64) \
+ || defined(__ARM_FEATURE_UNALIGNED)
+ #define MY_CPU_LE_UNALIGN
+ #endif
+#endif
+
+
+#ifdef MY_CPU_LE_UNALIGN
+
+#define GetUi16(p) (*(const UInt16 *)(const void *)(p))
+#define GetUi32(p) (*(const UInt32 *)(const void *)(p))
+#define GetUi64(p) (*(const UInt64 *)(const void *)(p))
+
+#define SetUi16(p, v) { *(UInt16 *)(p) = (v); }
+#define SetUi32(p, v) { *(UInt32 *)(p) = (v); }
+#define SetUi64(p, v) { *(UInt64 *)(p) = (v); }
+
+#else
+
+#define GetUi16(p) ( (UInt16) ( \
+ ((const Byte *)(p))[0] | \
+ ((UInt16)((const Byte *)(p))[1] << 8) ))
+
+#define GetUi32(p) ( \
+ ((const Byte *)(p))[0] | \
+ ((UInt32)((const Byte *)(p))[1] << 8) | \
+ ((UInt32)((const Byte *)(p))[2] << 16) | \
+ ((UInt32)((const Byte *)(p))[3] << 24))
+
+#define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte *)(p)) + 4) << 32))
+
+#define SetUi16(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
+ _ppp_[0] = (Byte)_vvv_; \
+ _ppp_[1] = (Byte)(_vvv_ >> 8); }
+
+#define SetUi32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
+ _ppp_[0] = (Byte)_vvv_; \
+ _ppp_[1] = (Byte)(_vvv_ >> 8); \
+ _ppp_[2] = (Byte)(_vvv_ >> 16); \
+ _ppp_[3] = (Byte)(_vvv_ >> 24); }
+
+#define SetUi64(p, v) { Byte *_ppp2_ = (Byte *)(p); UInt64 _vvv2_ = (v); \
+ SetUi32(_ppp2_ , (UInt32)_vvv2_); \
+ SetUi32(_ppp2_ + 4, (UInt32)(_vvv2_ >> 32)); }
+
+#endif
+
+#ifdef __has_builtin
+ #define MY__has_builtin(x) __has_builtin(x)
+#else
+ #define MY__has_builtin(x) 0
+#endif
+
+#if defined(MY_CPU_LE_UNALIGN) && /* defined(_WIN64) && */ (_MSC_VER >= 1300)
+
+/* Note: we use bswap instruction, that is unsupported in 386 cpu */
+
+#include <stdlib.h>
+
+#pragma intrinsic(_byteswap_ushort)
+#pragma intrinsic(_byteswap_ulong)
+#pragma intrinsic(_byteswap_uint64)
+
+/* #define GetBe16(p) _byteswap_ushort(*(const UInt16 *)(const Byte *)(p)) */
+#define GetBe32(p) _byteswap_ulong(*(const UInt32 *)(const Byte *)(p))
+#define GetBe64(p) _byteswap_uint64(*(const UInt64 *)(const Byte *)(p))
+
+#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = _byteswap_ulong(v)
+
+#elif defined(MY_CPU_LE_UNALIGN) && ( \
+ (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) \
+ || (defined(__clang__) && MY__has_builtin(__builtin_bswap16)) )
+
+/* #define GetBe16(p) __builtin_bswap16(*(const UInt16 *)(const Byte *)(p)) */
+#define GetBe32(p) __builtin_bswap32(*(const UInt32 *)(const Byte *)(p))
+#define GetBe64(p) __builtin_bswap64(*(const UInt64 *)(const Byte *)(p))
+
+#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = __builtin_bswap32(v)
+
+#else
+
+#define GetBe32(p) ( \
+ ((UInt32)((const Byte *)(p))[0] << 24) | \
+ ((UInt32)((const Byte *)(p))[1] << 16) | \
+ ((UInt32)((const Byte *)(p))[2] << 8) | \
+ ((const Byte *)(p))[3] )
+
+#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4))
+
+#define SetBe32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \
+ _ppp_[0] = (Byte)(_vvv_ >> 24); \
+ _ppp_[1] = (Byte)(_vvv_ >> 16); \
+ _ppp_[2] = (Byte)(_vvv_ >> 8); \
+ _ppp_[3] = (Byte)_vvv_; }
+
+#endif
+
+
+#ifndef GetBe16
+
+#define GetBe16(p) ( (UInt16) ( \
+ ((UInt16)((const Byte *)(p))[0] << 8) | \
+ ((const Byte *)(p))[1] ))
+
+#endif
+
+
+
+#ifdef MY_CPU_X86_OR_AMD64
+
+typedef struct
+{
+ UInt32 maxFunc;
+ UInt32 vendor[3];
+ UInt32 ver;
+ UInt32 b;
+ UInt32 c;
+ UInt32 d;
+} Cx86cpuid;
+
+enum
+{
+ CPU_FIRM_INTEL,
+ CPU_FIRM_AMD,
+ CPU_FIRM_VIA
+};
+
+void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d);
+
+BoolInt x86cpuid_CheckAndRead(Cx86cpuid *p);
+int x86cpuid_GetFirm(const Cx86cpuid *p);
+
+#define x86cpuid_GetFamily(ver) (((ver >> 16) & 0xFF0) | ((ver >> 8) & 0xF))
+#define x86cpuid_GetModel(ver) (((ver >> 12) & 0xF0) | ((ver >> 4) & 0xF))
+#define x86cpuid_GetStepping(ver) (ver & 0xF)
+
+BoolInt CPU_Is_InOrder();
+BoolInt CPU_Is_Aes_Supported();
+BoolInt CPU_IsSupported_PageGB();
+
+#endif
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/LzFind.c b/contrib/libs/lzmasdk/LzFind.c
index df55e86c14..4eefc17dd2 100644
--- a/contrib/libs/lzmasdk/LzFind.c
+++ b/contrib/libs/lzmasdk/LzFind.c
@@ -1,1127 +1,1127 @@
-/* LzFind.c -- Match finder for LZ algorithms
-2018-07-08 : Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include <string.h>
-
-#include "LzFind.h"
-#include "LzHash.h"
-
-#define kEmptyHashValue 0
-#define kMaxValForNormalize ((UInt32)0xFFFFFFFF)
-#define kNormalizeStepMin (1 << 10) /* it must be power of 2 */
-#define kNormalizeMask (~(UInt32)(kNormalizeStepMin - 1))
-#define kMaxHistorySize ((UInt32)7 << 29)
-
-#define kStartMaxLen 3
-
-static void LzInWindow_Free(CMatchFinder *p, ISzAllocPtr alloc)
-{
- if (!p->directInput)
- {
- ISzAlloc_Free(alloc, p->bufferBase);
- p->bufferBase = NULL;
- }
-}
-
-/* keepSizeBefore + keepSizeAfter + keepSizeReserv must be < 4G) */
-
-static int LzInWindow_Create(CMatchFinder *p, UInt32 keepSizeReserv, ISzAllocPtr alloc)
-{
- UInt32 blockSize = p->keepSizeBefore + p->keepSizeAfter + keepSizeReserv;
- if (p->directInput)
- {
- p->blockSize = blockSize;
- return 1;
- }
- if (!p->bufferBase || p->blockSize != blockSize)
- {
- LzInWindow_Free(p, alloc);
- p->blockSize = blockSize;
- p->bufferBase = (Byte *)ISzAlloc_Alloc(alloc, (size_t)blockSize);
- }
- return (p->bufferBase != NULL);
-}
-
-Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return p->buffer; }
-
-UInt32 MatchFinder_GetNumAvailableBytes(CMatchFinder *p) { return p->streamPos - p->pos; }
-
-void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue)
-{
- p->posLimit -= subValue;
- p->pos -= subValue;
- p->streamPos -= subValue;
-}
-
-static void MatchFinder_ReadBlock(CMatchFinder *p)
-{
- if (p->streamEndWasReached || p->result != SZ_OK)
- return;
-
- /* We use (p->streamPos - p->pos) value. (p->streamPos < p->pos) is allowed. */
-
- if (p->directInput)
- {
- UInt32 curSize = 0xFFFFFFFF - (p->streamPos - p->pos);
- if (curSize > p->directInputRem)
- curSize = (UInt32)p->directInputRem;
- p->directInputRem -= curSize;
- p->streamPos += curSize;
- if (p->directInputRem == 0)
- p->streamEndWasReached = 1;
- return;
- }
-
- for (;;)
- {
- Byte *dest = p->buffer + (p->streamPos - p->pos);
- size_t size = (p->bufferBase + p->blockSize - dest);
- if (size == 0)
- return;
-
- p->result = ISeqInStream_Read(p->stream, dest, &size);
- if (p->result != SZ_OK)
- return;
- if (size == 0)
- {
- p->streamEndWasReached = 1;
- return;
- }
- p->streamPos += (UInt32)size;
- if (p->streamPos - p->pos > p->keepSizeAfter)
- return;
- }
-}
-
-void MatchFinder_MoveBlock(CMatchFinder *p)
-{
- memmove(p->bufferBase,
- p->buffer - p->keepSizeBefore,
- (size_t)(p->streamPos - p->pos) + p->keepSizeBefore);
- p->buffer = p->bufferBase + p->keepSizeBefore;
-}
-
-int MatchFinder_NeedMove(CMatchFinder *p)
-{
- if (p->directInput)
- return 0;
- /* if (p->streamEndWasReached) return 0; */
- return ((size_t)(p->bufferBase + p->blockSize - p->buffer) <= p->keepSizeAfter);
-}
-
-void MatchFinder_ReadIfRequired(CMatchFinder *p)
-{
- if (p->streamEndWasReached)
- return;
- if (p->keepSizeAfter >= p->streamPos - p->pos)
- MatchFinder_ReadBlock(p);
-}
-
-static void MatchFinder_CheckAndMoveAndRead(CMatchFinder *p)
-{
- if (MatchFinder_NeedMove(p))
- MatchFinder_MoveBlock(p);
- MatchFinder_ReadBlock(p);
-}
-
-static void MatchFinder_SetDefaultSettings(CMatchFinder *p)
-{
- p->cutValue = 32;
- p->btMode = 1;
- p->numHashBytes = 4;
- p->bigHash = 0;
-}
-
-#define kCrcPoly 0xEDB88320
-
-void MatchFinder_Construct(CMatchFinder *p)
-{
- unsigned i;
- p->bufferBase = NULL;
- p->directInput = 0;
- p->hash = NULL;
- p->expectedDataSize = (UInt64)(Int64)-1;
- MatchFinder_SetDefaultSettings(p);
-
- for (i = 0; i < 256; i++)
- {
- UInt32 r = (UInt32)i;
- unsigned j;
- for (j = 0; j < 8; j++)
- r = (r >> 1) ^ (kCrcPoly & ((UInt32)0 - (r & 1)));
- p->crc[i] = r;
- }
-}
-
-static void MatchFinder_FreeThisClassMemory(CMatchFinder *p, ISzAllocPtr alloc)
-{
- ISzAlloc_Free(alloc, p->hash);
- p->hash = NULL;
-}
-
-void MatchFinder_Free(CMatchFinder *p, ISzAllocPtr alloc)
-{
- MatchFinder_FreeThisClassMemory(p, alloc);
- LzInWindow_Free(p, alloc);
-}
-
-static CLzRef* AllocRefs(size_t num, ISzAllocPtr alloc)
-{
- size_t sizeInBytes = (size_t)num * sizeof(CLzRef);
- if (sizeInBytes / sizeof(CLzRef) != num)
- return NULL;
- return (CLzRef *)ISzAlloc_Alloc(alloc, sizeInBytes);
-}
-
-int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
- UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter,
- ISzAllocPtr alloc)
-{
- UInt32 sizeReserv;
-
- if (historySize > kMaxHistorySize)
- {
- MatchFinder_Free(p, alloc);
- return 0;
- }
-
- sizeReserv = historySize >> 1;
- if (historySize >= ((UInt32)3 << 30)) sizeReserv = historySize >> 3;
- else if (historySize >= ((UInt32)2 << 30)) sizeReserv = historySize >> 2;
-
- sizeReserv += (keepAddBufferBefore + matchMaxLen + keepAddBufferAfter) / 2 + (1 << 19);
-
- p->keepSizeBefore = historySize + keepAddBufferBefore + 1;
- p->keepSizeAfter = matchMaxLen + keepAddBufferAfter;
-
- /* we need one additional byte, since we use MoveBlock after pos++ and before dictionary using */
-
- if (LzInWindow_Create(p, sizeReserv, alloc))
- {
- UInt32 newCyclicBufferSize = historySize + 1;
- UInt32 hs;
- p->matchMaxLen = matchMaxLen;
- {
- p->fixedHashSize = 0;
- if (p->numHashBytes == 2)
- hs = (1 << 16) - 1;
- else
- {
- hs = historySize;
- if (hs > p->expectedDataSize)
- hs = (UInt32)p->expectedDataSize;
- if (hs != 0)
- hs--;
- hs |= (hs >> 1);
- hs |= (hs >> 2);
- hs |= (hs >> 4);
- hs |= (hs >> 8);
- hs >>= 1;
- hs |= 0xFFFF; /* don't change it! It's required for Deflate */
- if (hs > (1 << 24))
- {
- if (p->numHashBytes == 3)
- hs = (1 << 24) - 1;
- else
- hs >>= 1;
- /* if (bigHash) mode, GetHeads4b() in LzFindMt.c needs (hs >= ((1 << 24) - 1))) */
- }
- }
- p->hashMask = hs;
- hs++;
- if (p->numHashBytes > 2) p->fixedHashSize += kHash2Size;
- if (p->numHashBytes > 3) p->fixedHashSize += kHash3Size;
- if (p->numHashBytes > 4) p->fixedHashSize += kHash4Size;
- hs += p->fixedHashSize;
- }
-
- {
- size_t newSize;
- size_t numSons;
- p->historySize = historySize;
- p->hashSizeSum = hs;
- p->cyclicBufferSize = newCyclicBufferSize;
-
- numSons = newCyclicBufferSize;
- if (p->btMode)
- numSons <<= 1;
- newSize = hs + numSons;
-
- if (p->hash && p->numRefs == newSize)
- return 1;
-
- MatchFinder_FreeThisClassMemory(p, alloc);
- p->numRefs = newSize;
- p->hash = AllocRefs(newSize, alloc);
-
- if (p->hash)
- {
- p->son = p->hash + p->hashSizeSum;
- return 1;
- }
- }
- }
-
- MatchFinder_Free(p, alloc);
- return 0;
-}
-
-static void MatchFinder_SetLimits(CMatchFinder *p)
-{
- UInt32 limit = kMaxValForNormalize - p->pos;
- UInt32 limit2 = p->cyclicBufferSize - p->cyclicBufferPos;
-
- if (limit2 < limit)
- limit = limit2;
- limit2 = p->streamPos - p->pos;
-
- if (limit2 <= p->keepSizeAfter)
- {
- if (limit2 > 0)
- limit2 = 1;
- }
- else
- limit2 -= p->keepSizeAfter;
-
- if (limit2 < limit)
- limit = limit2;
-
- {
- UInt32 lenLimit = p->streamPos - p->pos;
- if (lenLimit > p->matchMaxLen)
- lenLimit = p->matchMaxLen;
- p->lenLimit = lenLimit;
- }
- p->posLimit = p->pos + limit;
-}
-
-
-void MatchFinder_Init_LowHash(CMatchFinder *p)
-{
- size_t i;
- CLzRef *items = p->hash;
- size_t numItems = p->fixedHashSize;
- for (i = 0; i < numItems; i++)
- items[i] = kEmptyHashValue;
-}
-
-
-void MatchFinder_Init_HighHash(CMatchFinder *p)
-{
- size_t i;
- CLzRef *items = p->hash + p->fixedHashSize;
- size_t numItems = (size_t)p->hashMask + 1;
- for (i = 0; i < numItems; i++)
- items[i] = kEmptyHashValue;
-}
-
-
-void MatchFinder_Init_3(CMatchFinder *p, int readData)
-{
- p->cyclicBufferPos = 0;
- p->buffer = p->bufferBase;
- p->pos =
- p->streamPos = p->cyclicBufferSize;
- p->result = SZ_OK;
- p->streamEndWasReached = 0;
-
- if (readData)
- MatchFinder_ReadBlock(p);
-
- MatchFinder_SetLimits(p);
-}
-
-
-void MatchFinder_Init(CMatchFinder *p)
-{
- MatchFinder_Init_HighHash(p);
- MatchFinder_Init_LowHash(p);
- MatchFinder_Init_3(p, True);
-}
-
-
-static UInt32 MatchFinder_GetSubValue(CMatchFinder *p)
-{
- return (p->pos - p->historySize - 1) & kNormalizeMask;
-}
-
-void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems)
-{
- size_t i;
- for (i = 0; i < numItems; i++)
- {
- UInt32 value = items[i];
- if (value <= subValue)
- value = kEmptyHashValue;
- else
- value -= subValue;
- items[i] = value;
- }
-}
-
-static void MatchFinder_Normalize(CMatchFinder *p)
-{
- UInt32 subValue = MatchFinder_GetSubValue(p);
- MatchFinder_Normalize3(subValue, p->hash, p->numRefs);
- MatchFinder_ReduceOffsets(p, subValue);
-}
-
-
-MY_NO_INLINE
-static void MatchFinder_CheckLimits(CMatchFinder *p)
-{
- if (p->pos == kMaxValForNormalize)
- MatchFinder_Normalize(p);
- if (!p->streamEndWasReached && p->keepSizeAfter == p->streamPos - p->pos)
- MatchFinder_CheckAndMoveAndRead(p);
- if (p->cyclicBufferPos == p->cyclicBufferSize)
- p->cyclicBufferPos = 0;
- MatchFinder_SetLimits(p);
-}
-
-
-/*
- (lenLimit > maxLen)
-*/
-MY_FORCE_INLINE
-static UInt32 * Hc_GetMatchesSpec(unsigned lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son,
- UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue,
- UInt32 *distances, unsigned maxLen)
-{
- /*
- son[_cyclicBufferPos] = curMatch;
- for (;;)
- {
- UInt32 delta = pos - curMatch;
- if (cutValue-- == 0 || delta >= _cyclicBufferSize)
- return distances;
- {
- const Byte *pb = cur - delta;
- curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)];
- if (pb[maxLen] == cur[maxLen] && *pb == *cur)
- {
- UInt32 len = 0;
- while (++len != lenLimit)
- if (pb[len] != cur[len])
- break;
- if (maxLen < len)
- {
- maxLen = len;
- *distances++ = len;
- *distances++ = delta - 1;
- if (len == lenLimit)
- return distances;
- }
- }
- }
- }
- */
-
- const Byte *lim = cur + lenLimit;
- son[_cyclicBufferPos] = curMatch;
- do
- {
- UInt32 delta = pos - curMatch;
- if (delta >= _cyclicBufferSize)
- break;
- {
- ptrdiff_t diff;
- curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)];
- diff = (ptrdiff_t)0 - delta;
- if (cur[maxLen] == cur[maxLen + diff])
- {
- const Byte *c = cur;
- while (*c == c[diff])
- {
- if (++c == lim)
- {
- distances[0] = (UInt32)(lim - cur);
- distances[1] = delta - 1;
- return distances + 2;
- }
- }
- {
- unsigned len = (unsigned)(c - cur);
- if (maxLen < len)
- {
- maxLen = len;
- distances[0] = (UInt32)len;
- distances[1] = delta - 1;
- distances += 2;
- }
- }
- }
- }
- }
- while (--cutValue);
-
- return distances;
-}
-
-
-MY_FORCE_INLINE
-UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son,
- UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue,
- UInt32 *distances, UInt32 maxLen)
-{
- CLzRef *ptr0 = son + ((size_t)_cyclicBufferPos << 1) + 1;
- CLzRef *ptr1 = son + ((size_t)_cyclicBufferPos << 1);
- unsigned len0 = 0, len1 = 0;
- for (;;)
- {
- UInt32 delta = pos - curMatch;
- if (cutValue-- == 0 || delta >= _cyclicBufferSize)
- {
- *ptr0 = *ptr1 = kEmptyHashValue;
- return distances;
- }
- {
- CLzRef *pair = son + ((size_t)(_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1);
- const Byte *pb = cur - delta;
- unsigned len = (len0 < len1 ? len0 : len1);
- UInt32 pair0 = pair[0];
- if (pb[len] == cur[len])
- {
- if (++len != lenLimit && pb[len] == cur[len])
- while (++len != lenLimit)
- if (pb[len] != cur[len])
- break;
- if (maxLen < len)
- {
- maxLen = (UInt32)len;
- *distances++ = (UInt32)len;
- *distances++ = delta - 1;
- if (len == lenLimit)
- {
- *ptr1 = pair0;
- *ptr0 = pair[1];
- return distances;
- }
- }
- }
- if (pb[len] < cur[len])
- {
- *ptr1 = curMatch;
- ptr1 = pair + 1;
- curMatch = *ptr1;
- len1 = len;
- }
- else
- {
- *ptr0 = curMatch;
- ptr0 = pair;
- curMatch = *ptr0;
- len0 = len;
- }
- }
- }
-}
-
-static void SkipMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son,
- UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue)
-{
- CLzRef *ptr0 = son + ((size_t)_cyclicBufferPos << 1) + 1;
- CLzRef *ptr1 = son + ((size_t)_cyclicBufferPos << 1);
- unsigned len0 = 0, len1 = 0;
- for (;;)
- {
- UInt32 delta = pos - curMatch;
- if (cutValue-- == 0 || delta >= _cyclicBufferSize)
- {
- *ptr0 = *ptr1 = kEmptyHashValue;
- return;
- }
- {
- CLzRef *pair = son + ((size_t)(_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1);
- const Byte *pb = cur - delta;
- unsigned len = (len0 < len1 ? len0 : len1);
- if (pb[len] == cur[len])
- {
- while (++len != lenLimit)
- if (pb[len] != cur[len])
- break;
- {
- if (len == lenLimit)
- {
- *ptr1 = pair[0];
- *ptr0 = pair[1];
- return;
- }
- }
- }
- if (pb[len] < cur[len])
- {
- *ptr1 = curMatch;
- ptr1 = pair + 1;
- curMatch = *ptr1;
- len1 = len;
- }
- else
- {
- *ptr0 = curMatch;
- ptr0 = pair;
- curMatch = *ptr0;
- len0 = len;
- }
- }
- }
-}
-
-#define MOVE_POS \
- ++p->cyclicBufferPos; \
- p->buffer++; \
- if (++p->pos == p->posLimit) MatchFinder_CheckLimits(p);
-
-#define MOVE_POS_RET MOVE_POS return (UInt32)offset;
-
-static void MatchFinder_MovePos(CMatchFinder *p) { MOVE_POS; }
-
-#define GET_MATCHES_HEADER2(minLen, ret_op) \
- unsigned lenLimit; UInt32 hv; const Byte *cur; UInt32 curMatch; \
- lenLimit = (unsigned)p->lenLimit; { if (lenLimit < minLen) { MatchFinder_MovePos(p); ret_op; }} \
- cur = p->buffer;
-
-#define GET_MATCHES_HEADER(minLen) GET_MATCHES_HEADER2(minLen, return 0)
-#define SKIP_HEADER(minLen) GET_MATCHES_HEADER2(minLen, continue)
-
-#define MF_PARAMS(p) p->pos, p->buffer, p->son, p->cyclicBufferPos, p->cyclicBufferSize, p->cutValue
-
-#define GET_MATCHES_FOOTER(offset, maxLen) \
- offset = (unsigned)(GetMatchesSpec1((UInt32)lenLimit, curMatch, MF_PARAMS(p), \
- distances + offset, (UInt32)maxLen) - distances); MOVE_POS_RET;
-
-#define SKIP_FOOTER \
- SkipMatchesSpec((UInt32)lenLimit, curMatch, MF_PARAMS(p)); MOVE_POS;
-
-#define UPDATE_maxLen { \
- ptrdiff_t diff = (ptrdiff_t)0 - d2; \
- const Byte *c = cur + maxLen; \
- const Byte *lim = cur + lenLimit; \
- for (; c != lim; c++) if (*(c + diff) != *c) break; \
- maxLen = (unsigned)(c - cur); }
-
-static UInt32 Bt2_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
-{
- unsigned offset;
- GET_MATCHES_HEADER(2)
- HASH2_CALC;
- curMatch = p->hash[hv];
- p->hash[hv] = p->pos;
- offset = 0;
- GET_MATCHES_FOOTER(offset, 1)
-}
-
-UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
-{
- unsigned offset;
- GET_MATCHES_HEADER(3)
- HASH_ZIP_CALC;
- curMatch = p->hash[hv];
- p->hash[hv] = p->pos;
- offset = 0;
- GET_MATCHES_FOOTER(offset, 2)
-}
-
-static UInt32 Bt3_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
-{
- UInt32 h2, d2, pos;
- unsigned maxLen, offset;
- UInt32 *hash;
- GET_MATCHES_HEADER(3)
-
- HASH3_CALC;
-
- hash = p->hash;
- pos = p->pos;
-
- d2 = pos - hash[h2];
-
- curMatch = (hash + kFix3HashSize)[hv];
-
- hash[h2] = pos;
- (hash + kFix3HashSize)[hv] = pos;
-
- maxLen = 2;
- offset = 0;
-
- if (d2 < p->cyclicBufferSize && *(cur - d2) == *cur)
- {
- UPDATE_maxLen
- distances[0] = (UInt32)maxLen;
- distances[1] = d2 - 1;
- offset = 2;
- if (maxLen == lenLimit)
- {
- SkipMatchesSpec((UInt32)lenLimit, curMatch, MF_PARAMS(p));
- MOVE_POS_RET;
- }
- }
-
- GET_MATCHES_FOOTER(offset, maxLen)
-}
-
-static UInt32 Bt4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
-{
- UInt32 h2, h3, d2, d3, pos;
- unsigned maxLen, offset;
- UInt32 *hash;
- GET_MATCHES_HEADER(4)
-
- HASH4_CALC;
-
- hash = p->hash;
- pos = p->pos;
-
- d2 = pos - hash [h2];
- d3 = pos - (hash + kFix3HashSize)[h3];
-
- curMatch = (hash + kFix4HashSize)[hv];
-
- hash [h2] = pos;
- (hash + kFix3HashSize)[h3] = pos;
- (hash + kFix4HashSize)[hv] = pos;
-
- maxLen = 0;
- offset = 0;
-
- if (d2 < p->cyclicBufferSize && *(cur - d2) == *cur)
- {
- maxLen = 2;
- distances[0] = 2;
- distances[1] = d2 - 1;
- offset = 2;
- }
-
- if (d2 != d3 && d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
- {
- maxLen = 3;
- distances[(size_t)offset + 1] = d3 - 1;
- offset += 2;
- d2 = d3;
- }
-
- if (offset != 0)
- {
- UPDATE_maxLen
- distances[(size_t)offset - 2] = (UInt32)maxLen;
- if (maxLen == lenLimit)
- {
- SkipMatchesSpec((UInt32)lenLimit, curMatch, MF_PARAMS(p));
- MOVE_POS_RET;
- }
- }
-
- if (maxLen < 3)
- maxLen = 3;
-
- GET_MATCHES_FOOTER(offset, maxLen)
-}
-
-/*
-static UInt32 Bt5_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
-{
- UInt32 h2, h3, h4, d2, d3, d4, maxLen, offset, pos;
- UInt32 *hash;
- GET_MATCHES_HEADER(5)
-
- HASH5_CALC;
-
- hash = p->hash;
- pos = p->pos;
-
- d2 = pos - hash [h2];
- d3 = pos - (hash + kFix3HashSize)[h3];
- d4 = pos - (hash + kFix4HashSize)[h4];
-
- curMatch = (hash + kFix5HashSize)[hv];
-
- hash [h2] = pos;
- (hash + kFix3HashSize)[h3] = pos;
- (hash + kFix4HashSize)[h4] = pos;
- (hash + kFix5HashSize)[hv] = pos;
-
- maxLen = 0;
- offset = 0;
-
- if (d2 < p->cyclicBufferSize && *(cur - d2) == *cur)
- {
- distances[0] = maxLen = 2;
- distances[1] = d2 - 1;
- offset = 2;
- if (*(cur - d2 + 2) == cur[2])
- distances[0] = maxLen = 3;
- else if (d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
- {
- distances[2] = maxLen = 3;
- distances[3] = d3 - 1;
- offset = 4;
- d2 = d3;
- }
- }
- else if (d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
- {
- distances[0] = maxLen = 3;
- distances[1] = d3 - 1;
- offset = 2;
- d2 = d3;
- }
-
- if (d2 != d4 && d4 < p->cyclicBufferSize
- && *(cur - d4) == *cur
- && *(cur - d4 + 3) == *(cur + 3))
- {
- maxLen = 4;
- distances[(size_t)offset + 1] = d4 - 1;
- offset += 2;
- d2 = d4;
- }
-
- if (offset != 0)
- {
- UPDATE_maxLen
- distances[(size_t)offset - 2] = maxLen;
- if (maxLen == lenLimit)
- {
- SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p));
- MOVE_POS_RET;
- }
- }
-
- if (maxLen < 4)
- maxLen = 4;
-
- GET_MATCHES_FOOTER(offset, maxLen)
-}
-*/
-
-static UInt32 Hc4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
-{
- UInt32 h2, h3, d2, d3, pos;
- unsigned maxLen, offset;
- UInt32 *hash;
- GET_MATCHES_HEADER(4)
-
- HASH4_CALC;
-
- hash = p->hash;
- pos = p->pos;
-
- d2 = pos - hash [h2];
- d3 = pos - (hash + kFix3HashSize)[h3];
- curMatch = (hash + kFix4HashSize)[hv];
-
- hash [h2] = pos;
- (hash + kFix3HashSize)[h3] = pos;
- (hash + kFix4HashSize)[hv] = pos;
-
- maxLen = 0;
- offset = 0;
-
- if (d2 < p->cyclicBufferSize && *(cur - d2) == *cur)
- {
- maxLen = 2;
- distances[0] = 2;
- distances[1] = d2 - 1;
- offset = 2;
- }
-
- if (d2 != d3 && d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
- {
- maxLen = 3;
- distances[(size_t)offset + 1] = d3 - 1;
- offset += 2;
- d2 = d3;
- }
-
- if (offset != 0)
- {
- UPDATE_maxLen
- distances[(size_t)offset - 2] = (UInt32)maxLen;
- if (maxLen == lenLimit)
- {
- p->son[p->cyclicBufferPos] = curMatch;
- MOVE_POS_RET;
- }
- }
-
- if (maxLen < 3)
- maxLen = 3;
-
- offset = (unsigned)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p),
- distances + offset, maxLen) - (distances));
- MOVE_POS_RET
-}
-
-/*
-static UInt32 Hc5_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
-{
- UInt32 h2, h3, h4, d2, d3, d4, maxLen, offset, pos
- UInt32 *hash;
- GET_MATCHES_HEADER(5)
-
- HASH5_CALC;
-
- hash = p->hash;
- pos = p->pos;
-
- d2 = pos - hash [h2];
- d3 = pos - (hash + kFix3HashSize)[h3];
- d4 = pos - (hash + kFix4HashSize)[h4];
-
- curMatch = (hash + kFix5HashSize)[hv];
-
- hash [h2] = pos;
- (hash + kFix3HashSize)[h3] = pos;
- (hash + kFix4HashSize)[h4] = pos;
- (hash + kFix5HashSize)[hv] = pos;
-
- maxLen = 0;
- offset = 0;
-
- if (d2 < p->cyclicBufferSize && *(cur - d2) == *cur)
- {
- distances[0] = maxLen = 2;
- distances[1] = d2 - 1;
- offset = 2;
- if (*(cur - d2 + 2) == cur[2])
- distances[0] = maxLen = 3;
- else if (d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
- {
- distances[2] = maxLen = 3;
- distances[3] = d3 - 1;
- offset = 4;
- d2 = d3;
- }
- }
- else if (d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
- {
- distances[0] = maxLen = 3;
- distances[1] = d3 - 1;
- offset = 2;
- d2 = d3;
- }
-
- if (d2 != d4 && d4 < p->cyclicBufferSize
- && *(cur - d4) == *cur
- && *(cur - d4 + 3) == *(cur + 3))
- {
- maxLen = 4;
- distances[(size_t)offset + 1] = d4 - 1;
- offset += 2;
- d2 = d4;
- }
-
- if (offset != 0)
- {
- UPDATE_maxLen
- distances[(size_t)offset - 2] = maxLen;
- if (maxLen == lenLimit)
- {
- p->son[p->cyclicBufferPos] = curMatch;
- MOVE_POS_RET;
- }
- }
-
- if (maxLen < 4)
- maxLen = 4;
-
- offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p),
- distances + offset, maxLen) - (distances));
- MOVE_POS_RET
-}
-*/
-
-UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
-{
- unsigned offset;
- GET_MATCHES_HEADER(3)
- HASH_ZIP_CALC;
- curMatch = p->hash[hv];
- p->hash[hv] = p->pos;
- offset = (unsigned)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p),
- distances, 2) - (distances));
- MOVE_POS_RET
-}
-
-static void Bt2_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
-{
- do
- {
- SKIP_HEADER(2)
- HASH2_CALC;
- curMatch = p->hash[hv];
- p->hash[hv] = p->pos;
- SKIP_FOOTER
- }
- while (--num != 0);
-}
-
-void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
-{
- do
- {
- SKIP_HEADER(3)
- HASH_ZIP_CALC;
- curMatch = p->hash[hv];
- p->hash[hv] = p->pos;
- SKIP_FOOTER
- }
- while (--num != 0);
-}
-
-static void Bt3_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
-{
- do
- {
- UInt32 h2;
- UInt32 *hash;
- SKIP_HEADER(3)
- HASH3_CALC;
- hash = p->hash;
- curMatch = (hash + kFix3HashSize)[hv];
- hash[h2] =
- (hash + kFix3HashSize)[hv] = p->pos;
- SKIP_FOOTER
- }
- while (--num != 0);
-}
-
-static void Bt4_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
-{
- do
- {
- UInt32 h2, h3;
- UInt32 *hash;
- SKIP_HEADER(4)
- HASH4_CALC;
- hash = p->hash;
- curMatch = (hash + kFix4HashSize)[hv];
- hash [h2] =
- (hash + kFix3HashSize)[h3] =
- (hash + kFix4HashSize)[hv] = p->pos;
- SKIP_FOOTER
- }
- while (--num != 0);
-}
-
-/*
-static void Bt5_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
-{
- do
- {
- UInt32 h2, h3, h4;
- UInt32 *hash;
- SKIP_HEADER(5)
- HASH5_CALC;
- hash = p->hash;
- curMatch = (hash + kFix5HashSize)[hv];
- hash [h2] =
- (hash + kFix3HashSize)[h3] =
- (hash + kFix4HashSize)[h4] =
- (hash + kFix5HashSize)[hv] = p->pos;
- SKIP_FOOTER
- }
- while (--num != 0);
-}
-*/
-
-static void Hc4_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
-{
- do
- {
- UInt32 h2, h3;
- UInt32 *hash;
- SKIP_HEADER(4)
- HASH4_CALC;
- hash = p->hash;
- curMatch = (hash + kFix4HashSize)[hv];
- hash [h2] =
- (hash + kFix3HashSize)[h3] =
- (hash + kFix4HashSize)[hv] = p->pos;
- p->son[p->cyclicBufferPos] = curMatch;
- MOVE_POS
- }
- while (--num != 0);
-}
-
-/*
-static void Hc5_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
-{
- do
- {
- UInt32 h2, h3, h4;
- UInt32 *hash;
- SKIP_HEADER(5)
- HASH5_CALC;
- hash = p->hash;
- curMatch = hash + kFix5HashSize)[hv];
- hash [h2] =
- (hash + kFix3HashSize)[h3] =
- (hash + kFix4HashSize)[h4] =
- (hash + kFix5HashSize)[hv] = p->pos;
- p->son[p->cyclicBufferPos] = curMatch;
- MOVE_POS
- }
- while (--num != 0);
-}
-*/
-
-void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
-{
- do
- {
- SKIP_HEADER(3)
- HASH_ZIP_CALC;
- curMatch = p->hash[hv];
- p->hash[hv] = p->pos;
- p->son[p->cyclicBufferPos] = curMatch;
- MOVE_POS
- }
- while (--num != 0);
-}
-
-void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable)
-{
- vTable->Init = (Mf_Init_Func)MatchFinder_Init;
- vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinder_GetNumAvailableBytes;
- vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinder_GetPointerToCurrentPos;
- if (!p->btMode)
- {
- /* if (p->numHashBytes <= 4) */
- {
- vTable->GetMatches = (Mf_GetMatches_Func)Hc4_MatchFinder_GetMatches;
- vTable->Skip = (Mf_Skip_Func)Hc4_MatchFinder_Skip;
- }
- /*
- else
- {
- vTable->GetMatches = (Mf_GetMatches_Func)Hc5_MatchFinder_GetMatches;
- vTable->Skip = (Mf_Skip_Func)Hc5_MatchFinder_Skip;
- }
- */
- }
- else if (p->numHashBytes == 2)
- {
- vTable->GetMatches = (Mf_GetMatches_Func)Bt2_MatchFinder_GetMatches;
- vTable->Skip = (Mf_Skip_Func)Bt2_MatchFinder_Skip;
- }
- else if (p->numHashBytes == 3)
- {
- vTable->GetMatches = (Mf_GetMatches_Func)Bt3_MatchFinder_GetMatches;
- vTable->Skip = (Mf_Skip_Func)Bt3_MatchFinder_Skip;
- }
- else /* if (p->numHashBytes == 4) */
- {
- vTable->GetMatches = (Mf_GetMatches_Func)Bt4_MatchFinder_GetMatches;
- vTable->Skip = (Mf_Skip_Func)Bt4_MatchFinder_Skip;
- }
- /*
- else
- {
- vTable->GetMatches = (Mf_GetMatches_Func)Bt5_MatchFinder_GetMatches;
- vTable->Skip = (Mf_Skip_Func)Bt5_MatchFinder_Skip;
- }
- */
-}
+/* LzFind.c -- Match finder for LZ algorithms
+2018-07-08 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include <string.h>
+
+#include "LzFind.h"
+#include "LzHash.h"
+
+#define kEmptyHashValue 0
+#define kMaxValForNormalize ((UInt32)0xFFFFFFFF)
+#define kNormalizeStepMin (1 << 10) /* it must be power of 2 */
+#define kNormalizeMask (~(UInt32)(kNormalizeStepMin - 1))
+#define kMaxHistorySize ((UInt32)7 << 29)
+
+#define kStartMaxLen 3
+
+static void LzInWindow_Free(CMatchFinder *p, ISzAllocPtr alloc)
+{
+ if (!p->directInput)
+ {
+ ISzAlloc_Free(alloc, p->bufferBase);
+ p->bufferBase = NULL;
+ }
+}
+
+/* keepSizeBefore + keepSizeAfter + keepSizeReserv must be < 4G) */
+
+static int LzInWindow_Create(CMatchFinder *p, UInt32 keepSizeReserv, ISzAllocPtr alloc)
+{
+ UInt32 blockSize = p->keepSizeBefore + p->keepSizeAfter + keepSizeReserv;
+ if (p->directInput)
+ {
+ p->blockSize = blockSize;
+ return 1;
+ }
+ if (!p->bufferBase || p->blockSize != blockSize)
+ {
+ LzInWindow_Free(p, alloc);
+ p->blockSize = blockSize;
+ p->bufferBase = (Byte *)ISzAlloc_Alloc(alloc, (size_t)blockSize);
+ }
+ return (p->bufferBase != NULL);
+}
+
+Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return p->buffer; }
+
+UInt32 MatchFinder_GetNumAvailableBytes(CMatchFinder *p) { return p->streamPos - p->pos; }
+
+void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue)
+{
+ p->posLimit -= subValue;
+ p->pos -= subValue;
+ p->streamPos -= subValue;
+}
+
+static void MatchFinder_ReadBlock(CMatchFinder *p)
+{
+ if (p->streamEndWasReached || p->result != SZ_OK)
+ return;
+
+ /* We use (p->streamPos - p->pos) value. (p->streamPos < p->pos) is allowed. */
+
+ if (p->directInput)
+ {
+ UInt32 curSize = 0xFFFFFFFF - (p->streamPos - p->pos);
+ if (curSize > p->directInputRem)
+ curSize = (UInt32)p->directInputRem;
+ p->directInputRem -= curSize;
+ p->streamPos += curSize;
+ if (p->directInputRem == 0)
+ p->streamEndWasReached = 1;
+ return;
+ }
+
+ for (;;)
+ {
+ Byte *dest = p->buffer + (p->streamPos - p->pos);
+ size_t size = (p->bufferBase + p->blockSize - dest);
+ if (size == 0)
+ return;
+
+ p->result = ISeqInStream_Read(p->stream, dest, &size);
+ if (p->result != SZ_OK)
+ return;
+ if (size == 0)
+ {
+ p->streamEndWasReached = 1;
+ return;
+ }
+ p->streamPos += (UInt32)size;
+ if (p->streamPos - p->pos > p->keepSizeAfter)
+ return;
+ }
+}
+
+void MatchFinder_MoveBlock(CMatchFinder *p)
+{
+ memmove(p->bufferBase,
+ p->buffer - p->keepSizeBefore,
+ (size_t)(p->streamPos - p->pos) + p->keepSizeBefore);
+ p->buffer = p->bufferBase + p->keepSizeBefore;
+}
+
+int MatchFinder_NeedMove(CMatchFinder *p)
+{
+ if (p->directInput)
+ return 0;
+ /* if (p->streamEndWasReached) return 0; */
+ return ((size_t)(p->bufferBase + p->blockSize - p->buffer) <= p->keepSizeAfter);
+}
+
+void MatchFinder_ReadIfRequired(CMatchFinder *p)
+{
+ if (p->streamEndWasReached)
+ return;
+ if (p->keepSizeAfter >= p->streamPos - p->pos)
+ MatchFinder_ReadBlock(p);
+}
+
+static void MatchFinder_CheckAndMoveAndRead(CMatchFinder *p)
+{
+ if (MatchFinder_NeedMove(p))
+ MatchFinder_MoveBlock(p);
+ MatchFinder_ReadBlock(p);
+}
+
+static void MatchFinder_SetDefaultSettings(CMatchFinder *p)
+{
+ p->cutValue = 32;
+ p->btMode = 1;
+ p->numHashBytes = 4;
+ p->bigHash = 0;
+}
+
+#define kCrcPoly 0xEDB88320
+
+void MatchFinder_Construct(CMatchFinder *p)
+{
+ unsigned i;
+ p->bufferBase = NULL;
+ p->directInput = 0;
+ p->hash = NULL;
+ p->expectedDataSize = (UInt64)(Int64)-1;
+ MatchFinder_SetDefaultSettings(p);
+
+ for (i = 0; i < 256; i++)
+ {
+ UInt32 r = (UInt32)i;
+ unsigned j;
+ for (j = 0; j < 8; j++)
+ r = (r >> 1) ^ (kCrcPoly & ((UInt32)0 - (r & 1)));
+ p->crc[i] = r;
+ }
+}
+
+static void MatchFinder_FreeThisClassMemory(CMatchFinder *p, ISzAllocPtr alloc)
+{
+ ISzAlloc_Free(alloc, p->hash);
+ p->hash = NULL;
+}
+
+void MatchFinder_Free(CMatchFinder *p, ISzAllocPtr alloc)
+{
+ MatchFinder_FreeThisClassMemory(p, alloc);
+ LzInWindow_Free(p, alloc);
+}
+
+static CLzRef* AllocRefs(size_t num, ISzAllocPtr alloc)
+{
+ size_t sizeInBytes = (size_t)num * sizeof(CLzRef);
+ if (sizeInBytes / sizeof(CLzRef) != num)
+ return NULL;
+ return (CLzRef *)ISzAlloc_Alloc(alloc, sizeInBytes);
+}
+
+int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
+ UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter,
+ ISzAllocPtr alloc)
+{
+ UInt32 sizeReserv;
+
+ if (historySize > kMaxHistorySize)
+ {
+ MatchFinder_Free(p, alloc);
+ return 0;
+ }
+
+ sizeReserv = historySize >> 1;
+ if (historySize >= ((UInt32)3 << 30)) sizeReserv = historySize >> 3;
+ else if (historySize >= ((UInt32)2 << 30)) sizeReserv = historySize >> 2;
+
+ sizeReserv += (keepAddBufferBefore + matchMaxLen + keepAddBufferAfter) / 2 + (1 << 19);
+
+ p->keepSizeBefore = historySize + keepAddBufferBefore + 1;
+ p->keepSizeAfter = matchMaxLen + keepAddBufferAfter;
+
+ /* we need one additional byte, since we use MoveBlock after pos++ and before dictionary using */
+
+ if (LzInWindow_Create(p, sizeReserv, alloc))
+ {
+ UInt32 newCyclicBufferSize = historySize + 1;
+ UInt32 hs;
+ p->matchMaxLen = matchMaxLen;
+ {
+ p->fixedHashSize = 0;
+ if (p->numHashBytes == 2)
+ hs = (1 << 16) - 1;
+ else
+ {
+ hs = historySize;
+ if (hs > p->expectedDataSize)
+ hs = (UInt32)p->expectedDataSize;
+ if (hs != 0)
+ hs--;
+ hs |= (hs >> 1);
+ hs |= (hs >> 2);
+ hs |= (hs >> 4);
+ hs |= (hs >> 8);
+ hs >>= 1;
+ hs |= 0xFFFF; /* don't change it! It's required for Deflate */
+ if (hs > (1 << 24))
+ {
+ if (p->numHashBytes == 3)
+ hs = (1 << 24) - 1;
+ else
+ hs >>= 1;
+ /* if (bigHash) mode, GetHeads4b() in LzFindMt.c needs (hs >= ((1 << 24) - 1))) */
+ }
+ }
+ p->hashMask = hs;
+ hs++;
+ if (p->numHashBytes > 2) p->fixedHashSize += kHash2Size;
+ if (p->numHashBytes > 3) p->fixedHashSize += kHash3Size;
+ if (p->numHashBytes > 4) p->fixedHashSize += kHash4Size;
+ hs += p->fixedHashSize;
+ }
+
+ {
+ size_t newSize;
+ size_t numSons;
+ p->historySize = historySize;
+ p->hashSizeSum = hs;
+ p->cyclicBufferSize = newCyclicBufferSize;
+
+ numSons = newCyclicBufferSize;
+ if (p->btMode)
+ numSons <<= 1;
+ newSize = hs + numSons;
+
+ if (p->hash && p->numRefs == newSize)
+ return 1;
+
+ MatchFinder_FreeThisClassMemory(p, alloc);
+ p->numRefs = newSize;
+ p->hash = AllocRefs(newSize, alloc);
+
+ if (p->hash)
+ {
+ p->son = p->hash + p->hashSizeSum;
+ return 1;
+ }
+ }
+ }
+
+ MatchFinder_Free(p, alloc);
+ return 0;
+}
+
+static void MatchFinder_SetLimits(CMatchFinder *p)
+{
+ UInt32 limit = kMaxValForNormalize - p->pos;
+ UInt32 limit2 = p->cyclicBufferSize - p->cyclicBufferPos;
+
+ if (limit2 < limit)
+ limit = limit2;
+ limit2 = p->streamPos - p->pos;
+
+ if (limit2 <= p->keepSizeAfter)
+ {
+ if (limit2 > 0)
+ limit2 = 1;
+ }
+ else
+ limit2 -= p->keepSizeAfter;
+
+ if (limit2 < limit)
+ limit = limit2;
+
+ {
+ UInt32 lenLimit = p->streamPos - p->pos;
+ if (lenLimit > p->matchMaxLen)
+ lenLimit = p->matchMaxLen;
+ p->lenLimit = lenLimit;
+ }
+ p->posLimit = p->pos + limit;
+}
+
+
+void MatchFinder_Init_LowHash(CMatchFinder *p)
+{
+ size_t i;
+ CLzRef *items = p->hash;
+ size_t numItems = p->fixedHashSize;
+ for (i = 0; i < numItems; i++)
+ items[i] = kEmptyHashValue;
+}
+
+
+void MatchFinder_Init_HighHash(CMatchFinder *p)
+{
+ size_t i;
+ CLzRef *items = p->hash + p->fixedHashSize;
+ size_t numItems = (size_t)p->hashMask + 1;
+ for (i = 0; i < numItems; i++)
+ items[i] = kEmptyHashValue;
+}
+
+
+void MatchFinder_Init_3(CMatchFinder *p, int readData)
+{
+ p->cyclicBufferPos = 0;
+ p->buffer = p->bufferBase;
+ p->pos =
+ p->streamPos = p->cyclicBufferSize;
+ p->result = SZ_OK;
+ p->streamEndWasReached = 0;
+
+ if (readData)
+ MatchFinder_ReadBlock(p);
+
+ MatchFinder_SetLimits(p);
+}
+
+
+void MatchFinder_Init(CMatchFinder *p)
+{
+ MatchFinder_Init_HighHash(p);
+ MatchFinder_Init_LowHash(p);
+ MatchFinder_Init_3(p, True);
+}
+
+
+static UInt32 MatchFinder_GetSubValue(CMatchFinder *p)
+{
+ return (p->pos - p->historySize - 1) & kNormalizeMask;
+}
+
+void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems)
+{
+ size_t i;
+ for (i = 0; i < numItems; i++)
+ {
+ UInt32 value = items[i];
+ if (value <= subValue)
+ value = kEmptyHashValue;
+ else
+ value -= subValue;
+ items[i] = value;
+ }
+}
+
+static void MatchFinder_Normalize(CMatchFinder *p)
+{
+ UInt32 subValue = MatchFinder_GetSubValue(p);
+ MatchFinder_Normalize3(subValue, p->hash, p->numRefs);
+ MatchFinder_ReduceOffsets(p, subValue);
+}
+
+
+MY_NO_INLINE
+static void MatchFinder_CheckLimits(CMatchFinder *p)
+{
+ if (p->pos == kMaxValForNormalize)
+ MatchFinder_Normalize(p);
+ if (!p->streamEndWasReached && p->keepSizeAfter == p->streamPos - p->pos)
+ MatchFinder_CheckAndMoveAndRead(p);
+ if (p->cyclicBufferPos == p->cyclicBufferSize)
+ p->cyclicBufferPos = 0;
+ MatchFinder_SetLimits(p);
+}
+
+
+/*
+ (lenLimit > maxLen)
+*/
+MY_FORCE_INLINE
+static UInt32 * Hc_GetMatchesSpec(unsigned lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son,
+ UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue,
+ UInt32 *distances, unsigned maxLen)
+{
+ /*
+ son[_cyclicBufferPos] = curMatch;
+ for (;;)
+ {
+ UInt32 delta = pos - curMatch;
+ if (cutValue-- == 0 || delta >= _cyclicBufferSize)
+ return distances;
+ {
+ const Byte *pb = cur - delta;
+ curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)];
+ if (pb[maxLen] == cur[maxLen] && *pb == *cur)
+ {
+ UInt32 len = 0;
+ while (++len != lenLimit)
+ if (pb[len] != cur[len])
+ break;
+ if (maxLen < len)
+ {
+ maxLen = len;
+ *distances++ = len;
+ *distances++ = delta - 1;
+ if (len == lenLimit)
+ return distances;
+ }
+ }
+ }
+ }
+ */
+
+ const Byte *lim = cur + lenLimit;
+ son[_cyclicBufferPos] = curMatch;
+ do
+ {
+ UInt32 delta = pos - curMatch;
+ if (delta >= _cyclicBufferSize)
+ break;
+ {
+ ptrdiff_t diff;
+ curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)];
+ diff = (ptrdiff_t)0 - delta;
+ if (cur[maxLen] == cur[maxLen + diff])
+ {
+ const Byte *c = cur;
+ while (*c == c[diff])
+ {
+ if (++c == lim)
+ {
+ distances[0] = (UInt32)(lim - cur);
+ distances[1] = delta - 1;
+ return distances + 2;
+ }
+ }
+ {
+ unsigned len = (unsigned)(c - cur);
+ if (maxLen < len)
+ {
+ maxLen = len;
+ distances[0] = (UInt32)len;
+ distances[1] = delta - 1;
+ distances += 2;
+ }
+ }
+ }
+ }
+ }
+ while (--cutValue);
+
+ return distances;
+}
+
+
+MY_FORCE_INLINE
+UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son,
+ UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue,
+ UInt32 *distances, UInt32 maxLen)
+{
+ CLzRef *ptr0 = son + ((size_t)_cyclicBufferPos << 1) + 1;
+ CLzRef *ptr1 = son + ((size_t)_cyclicBufferPos << 1);
+ unsigned len0 = 0, len1 = 0;
+ for (;;)
+ {
+ UInt32 delta = pos - curMatch;
+ if (cutValue-- == 0 || delta >= _cyclicBufferSize)
+ {
+ *ptr0 = *ptr1 = kEmptyHashValue;
+ return distances;
+ }
+ {
+ CLzRef *pair = son + ((size_t)(_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1);
+ const Byte *pb = cur - delta;
+ unsigned len = (len0 < len1 ? len0 : len1);
+ UInt32 pair0 = pair[0];
+ if (pb[len] == cur[len])
+ {
+ if (++len != lenLimit && pb[len] == cur[len])
+ while (++len != lenLimit)
+ if (pb[len] != cur[len])
+ break;
+ if (maxLen < len)
+ {
+ maxLen = (UInt32)len;
+ *distances++ = (UInt32)len;
+ *distances++ = delta - 1;
+ if (len == lenLimit)
+ {
+ *ptr1 = pair0;
+ *ptr0 = pair[1];
+ return distances;
+ }
+ }
+ }
+ if (pb[len] < cur[len])
+ {
+ *ptr1 = curMatch;
+ ptr1 = pair + 1;
+ curMatch = *ptr1;
+ len1 = len;
+ }
+ else
+ {
+ *ptr0 = curMatch;
+ ptr0 = pair;
+ curMatch = *ptr0;
+ len0 = len;
+ }
+ }
+ }
+}
+
+static void SkipMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son,
+ UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue)
+{
+ CLzRef *ptr0 = son + ((size_t)_cyclicBufferPos << 1) + 1;
+ CLzRef *ptr1 = son + ((size_t)_cyclicBufferPos << 1);
+ unsigned len0 = 0, len1 = 0;
+ for (;;)
+ {
+ UInt32 delta = pos - curMatch;
+ if (cutValue-- == 0 || delta >= _cyclicBufferSize)
+ {
+ *ptr0 = *ptr1 = kEmptyHashValue;
+ return;
+ }
+ {
+ CLzRef *pair = son + ((size_t)(_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1);
+ const Byte *pb = cur - delta;
+ unsigned len = (len0 < len1 ? len0 : len1);
+ if (pb[len] == cur[len])
+ {
+ while (++len != lenLimit)
+ if (pb[len] != cur[len])
+ break;
+ {
+ if (len == lenLimit)
+ {
+ *ptr1 = pair[0];
+ *ptr0 = pair[1];
+ return;
+ }
+ }
+ }
+ if (pb[len] < cur[len])
+ {
+ *ptr1 = curMatch;
+ ptr1 = pair + 1;
+ curMatch = *ptr1;
+ len1 = len;
+ }
+ else
+ {
+ *ptr0 = curMatch;
+ ptr0 = pair;
+ curMatch = *ptr0;
+ len0 = len;
+ }
+ }
+ }
+}
+
+#define MOVE_POS \
+ ++p->cyclicBufferPos; \
+ p->buffer++; \
+ if (++p->pos == p->posLimit) MatchFinder_CheckLimits(p);
+
+#define MOVE_POS_RET MOVE_POS return (UInt32)offset;
+
+static void MatchFinder_MovePos(CMatchFinder *p) { MOVE_POS; }
+
+#define GET_MATCHES_HEADER2(minLen, ret_op) \
+ unsigned lenLimit; UInt32 hv; const Byte *cur; UInt32 curMatch; \
+ lenLimit = (unsigned)p->lenLimit; { if (lenLimit < minLen) { MatchFinder_MovePos(p); ret_op; }} \
+ cur = p->buffer;
+
+#define GET_MATCHES_HEADER(minLen) GET_MATCHES_HEADER2(minLen, return 0)
+#define SKIP_HEADER(minLen) GET_MATCHES_HEADER2(minLen, continue)
+
+#define MF_PARAMS(p) p->pos, p->buffer, p->son, p->cyclicBufferPos, p->cyclicBufferSize, p->cutValue
+
+#define GET_MATCHES_FOOTER(offset, maxLen) \
+ offset = (unsigned)(GetMatchesSpec1((UInt32)lenLimit, curMatch, MF_PARAMS(p), \
+ distances + offset, (UInt32)maxLen) - distances); MOVE_POS_RET;
+
+#define SKIP_FOOTER \
+ SkipMatchesSpec((UInt32)lenLimit, curMatch, MF_PARAMS(p)); MOVE_POS;
+
+#define UPDATE_maxLen { \
+ ptrdiff_t diff = (ptrdiff_t)0 - d2; \
+ const Byte *c = cur + maxLen; \
+ const Byte *lim = cur + lenLimit; \
+ for (; c != lim; c++) if (*(c + diff) != *c) break; \
+ maxLen = (unsigned)(c - cur); }
+
+static UInt32 Bt2_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
+{
+ unsigned offset;
+ GET_MATCHES_HEADER(2)
+ HASH2_CALC;
+ curMatch = p->hash[hv];
+ p->hash[hv] = p->pos;
+ offset = 0;
+ GET_MATCHES_FOOTER(offset, 1)
+}
+
+UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
+{
+ unsigned offset;
+ GET_MATCHES_HEADER(3)
+ HASH_ZIP_CALC;
+ curMatch = p->hash[hv];
+ p->hash[hv] = p->pos;
+ offset = 0;
+ GET_MATCHES_FOOTER(offset, 2)
+}
+
+static UInt32 Bt3_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
+{
+ UInt32 h2, d2, pos;
+ unsigned maxLen, offset;
+ UInt32 *hash;
+ GET_MATCHES_HEADER(3)
+
+ HASH3_CALC;
+
+ hash = p->hash;
+ pos = p->pos;
+
+ d2 = pos - hash[h2];
+
+ curMatch = (hash + kFix3HashSize)[hv];
+
+ hash[h2] = pos;
+ (hash + kFix3HashSize)[hv] = pos;
+
+ maxLen = 2;
+ offset = 0;
+
+ if (d2 < p->cyclicBufferSize && *(cur - d2) == *cur)
+ {
+ UPDATE_maxLen
+ distances[0] = (UInt32)maxLen;
+ distances[1] = d2 - 1;
+ offset = 2;
+ if (maxLen == lenLimit)
+ {
+ SkipMatchesSpec((UInt32)lenLimit, curMatch, MF_PARAMS(p));
+ MOVE_POS_RET;
+ }
+ }
+
+ GET_MATCHES_FOOTER(offset, maxLen)
+}
+
+static UInt32 Bt4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
+{
+ UInt32 h2, h3, d2, d3, pos;
+ unsigned maxLen, offset;
+ UInt32 *hash;
+ GET_MATCHES_HEADER(4)
+
+ HASH4_CALC;
+
+ hash = p->hash;
+ pos = p->pos;
+
+ d2 = pos - hash [h2];
+ d3 = pos - (hash + kFix3HashSize)[h3];
+
+ curMatch = (hash + kFix4HashSize)[hv];
+
+ hash [h2] = pos;
+ (hash + kFix3HashSize)[h3] = pos;
+ (hash + kFix4HashSize)[hv] = pos;
+
+ maxLen = 0;
+ offset = 0;
+
+ if (d2 < p->cyclicBufferSize && *(cur - d2) == *cur)
+ {
+ maxLen = 2;
+ distances[0] = 2;
+ distances[1] = d2 - 1;
+ offset = 2;
+ }
+
+ if (d2 != d3 && d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
+ {
+ maxLen = 3;
+ distances[(size_t)offset + 1] = d3 - 1;
+ offset += 2;
+ d2 = d3;
+ }
+
+ if (offset != 0)
+ {
+ UPDATE_maxLen
+ distances[(size_t)offset - 2] = (UInt32)maxLen;
+ if (maxLen == lenLimit)
+ {
+ SkipMatchesSpec((UInt32)lenLimit, curMatch, MF_PARAMS(p));
+ MOVE_POS_RET;
+ }
+ }
+
+ if (maxLen < 3)
+ maxLen = 3;
+
+ GET_MATCHES_FOOTER(offset, maxLen)
+}
+
+/*
+static UInt32 Bt5_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
+{
+ UInt32 h2, h3, h4, d2, d3, d4, maxLen, offset, pos;
+ UInt32 *hash;
+ GET_MATCHES_HEADER(5)
+
+ HASH5_CALC;
+
+ hash = p->hash;
+ pos = p->pos;
+
+ d2 = pos - hash [h2];
+ d3 = pos - (hash + kFix3HashSize)[h3];
+ d4 = pos - (hash + kFix4HashSize)[h4];
+
+ curMatch = (hash + kFix5HashSize)[hv];
+
+ hash [h2] = pos;
+ (hash + kFix3HashSize)[h3] = pos;
+ (hash + kFix4HashSize)[h4] = pos;
+ (hash + kFix5HashSize)[hv] = pos;
+
+ maxLen = 0;
+ offset = 0;
+
+ if (d2 < p->cyclicBufferSize && *(cur - d2) == *cur)
+ {
+ distances[0] = maxLen = 2;
+ distances[1] = d2 - 1;
+ offset = 2;
+ if (*(cur - d2 + 2) == cur[2])
+ distances[0] = maxLen = 3;
+ else if (d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
+ {
+ distances[2] = maxLen = 3;
+ distances[3] = d3 - 1;
+ offset = 4;
+ d2 = d3;
+ }
+ }
+ else if (d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
+ {
+ distances[0] = maxLen = 3;
+ distances[1] = d3 - 1;
+ offset = 2;
+ d2 = d3;
+ }
+
+ if (d2 != d4 && d4 < p->cyclicBufferSize
+ && *(cur - d4) == *cur
+ && *(cur - d4 + 3) == *(cur + 3))
+ {
+ maxLen = 4;
+ distances[(size_t)offset + 1] = d4 - 1;
+ offset += 2;
+ d2 = d4;
+ }
+
+ if (offset != 0)
+ {
+ UPDATE_maxLen
+ distances[(size_t)offset - 2] = maxLen;
+ if (maxLen == lenLimit)
+ {
+ SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p));
+ MOVE_POS_RET;
+ }
+ }
+
+ if (maxLen < 4)
+ maxLen = 4;
+
+ GET_MATCHES_FOOTER(offset, maxLen)
+}
+*/
+
+static UInt32 Hc4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
+{
+ UInt32 h2, h3, d2, d3, pos;
+ unsigned maxLen, offset;
+ UInt32 *hash;
+ GET_MATCHES_HEADER(4)
+
+ HASH4_CALC;
+
+ hash = p->hash;
+ pos = p->pos;
+
+ d2 = pos - hash [h2];
+ d3 = pos - (hash + kFix3HashSize)[h3];
+ curMatch = (hash + kFix4HashSize)[hv];
+
+ hash [h2] = pos;
+ (hash + kFix3HashSize)[h3] = pos;
+ (hash + kFix4HashSize)[hv] = pos;
+
+ maxLen = 0;
+ offset = 0;
+
+ if (d2 < p->cyclicBufferSize && *(cur - d2) == *cur)
+ {
+ maxLen = 2;
+ distances[0] = 2;
+ distances[1] = d2 - 1;
+ offset = 2;
+ }
+
+ if (d2 != d3 && d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
+ {
+ maxLen = 3;
+ distances[(size_t)offset + 1] = d3 - 1;
+ offset += 2;
+ d2 = d3;
+ }
+
+ if (offset != 0)
+ {
+ UPDATE_maxLen
+ distances[(size_t)offset - 2] = (UInt32)maxLen;
+ if (maxLen == lenLimit)
+ {
+ p->son[p->cyclicBufferPos] = curMatch;
+ MOVE_POS_RET;
+ }
+ }
+
+ if (maxLen < 3)
+ maxLen = 3;
+
+ offset = (unsigned)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p),
+ distances + offset, maxLen) - (distances));
+ MOVE_POS_RET
+}
+
+/*
+static UInt32 Hc5_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
+{
+ UInt32 h2, h3, h4, d2, d3, d4, maxLen, offset, pos
+ UInt32 *hash;
+ GET_MATCHES_HEADER(5)
+
+ HASH5_CALC;
+
+ hash = p->hash;
+ pos = p->pos;
+
+ d2 = pos - hash [h2];
+ d3 = pos - (hash + kFix3HashSize)[h3];
+ d4 = pos - (hash + kFix4HashSize)[h4];
+
+ curMatch = (hash + kFix5HashSize)[hv];
+
+ hash [h2] = pos;
+ (hash + kFix3HashSize)[h3] = pos;
+ (hash + kFix4HashSize)[h4] = pos;
+ (hash + kFix5HashSize)[hv] = pos;
+
+ maxLen = 0;
+ offset = 0;
+
+ if (d2 < p->cyclicBufferSize && *(cur - d2) == *cur)
+ {
+ distances[0] = maxLen = 2;
+ distances[1] = d2 - 1;
+ offset = 2;
+ if (*(cur - d2 + 2) == cur[2])
+ distances[0] = maxLen = 3;
+ else if (d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
+ {
+ distances[2] = maxLen = 3;
+ distances[3] = d3 - 1;
+ offset = 4;
+ d2 = d3;
+ }
+ }
+ else if (d3 < p->cyclicBufferSize && *(cur - d3) == *cur)
+ {
+ distances[0] = maxLen = 3;
+ distances[1] = d3 - 1;
+ offset = 2;
+ d2 = d3;
+ }
+
+ if (d2 != d4 && d4 < p->cyclicBufferSize
+ && *(cur - d4) == *cur
+ && *(cur - d4 + 3) == *(cur + 3))
+ {
+ maxLen = 4;
+ distances[(size_t)offset + 1] = d4 - 1;
+ offset += 2;
+ d2 = d4;
+ }
+
+ if (offset != 0)
+ {
+ UPDATE_maxLen
+ distances[(size_t)offset - 2] = maxLen;
+ if (maxLen == lenLimit)
+ {
+ p->son[p->cyclicBufferPos] = curMatch;
+ MOVE_POS_RET;
+ }
+ }
+
+ if (maxLen < 4)
+ maxLen = 4;
+
+ offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p),
+ distances + offset, maxLen) - (distances));
+ MOVE_POS_RET
+}
+*/
+
+UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances)
+{
+ unsigned offset;
+ GET_MATCHES_HEADER(3)
+ HASH_ZIP_CALC;
+ curMatch = p->hash[hv];
+ p->hash[hv] = p->pos;
+ offset = (unsigned)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p),
+ distances, 2) - (distances));
+ MOVE_POS_RET
+}
+
+static void Bt2_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
+{
+ do
+ {
+ SKIP_HEADER(2)
+ HASH2_CALC;
+ curMatch = p->hash[hv];
+ p->hash[hv] = p->pos;
+ SKIP_FOOTER
+ }
+ while (--num != 0);
+}
+
+void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
+{
+ do
+ {
+ SKIP_HEADER(3)
+ HASH_ZIP_CALC;
+ curMatch = p->hash[hv];
+ p->hash[hv] = p->pos;
+ SKIP_FOOTER
+ }
+ while (--num != 0);
+}
+
+static void Bt3_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
+{
+ do
+ {
+ UInt32 h2;
+ UInt32 *hash;
+ SKIP_HEADER(3)
+ HASH3_CALC;
+ hash = p->hash;
+ curMatch = (hash + kFix3HashSize)[hv];
+ hash[h2] =
+ (hash + kFix3HashSize)[hv] = p->pos;
+ SKIP_FOOTER
+ }
+ while (--num != 0);
+}
+
+static void Bt4_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
+{
+ do
+ {
+ UInt32 h2, h3;
+ UInt32 *hash;
+ SKIP_HEADER(4)
+ HASH4_CALC;
+ hash = p->hash;
+ curMatch = (hash + kFix4HashSize)[hv];
+ hash [h2] =
+ (hash + kFix3HashSize)[h3] =
+ (hash + kFix4HashSize)[hv] = p->pos;
+ SKIP_FOOTER
+ }
+ while (--num != 0);
+}
+
+/*
+static void Bt5_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
+{
+ do
+ {
+ UInt32 h2, h3, h4;
+ UInt32 *hash;
+ SKIP_HEADER(5)
+ HASH5_CALC;
+ hash = p->hash;
+ curMatch = (hash + kFix5HashSize)[hv];
+ hash [h2] =
+ (hash + kFix3HashSize)[h3] =
+ (hash + kFix4HashSize)[h4] =
+ (hash + kFix5HashSize)[hv] = p->pos;
+ SKIP_FOOTER
+ }
+ while (--num != 0);
+}
+*/
+
+static void Hc4_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
+{
+ do
+ {
+ UInt32 h2, h3;
+ UInt32 *hash;
+ SKIP_HEADER(4)
+ HASH4_CALC;
+ hash = p->hash;
+ curMatch = (hash + kFix4HashSize)[hv];
+ hash [h2] =
+ (hash + kFix3HashSize)[h3] =
+ (hash + kFix4HashSize)[hv] = p->pos;
+ p->son[p->cyclicBufferPos] = curMatch;
+ MOVE_POS
+ }
+ while (--num != 0);
+}
+
+/*
+static void Hc5_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
+{
+ do
+ {
+ UInt32 h2, h3, h4;
+ UInt32 *hash;
+ SKIP_HEADER(5)
+ HASH5_CALC;
+ hash = p->hash;
+ curMatch = hash + kFix5HashSize)[hv];
+ hash [h2] =
+ (hash + kFix3HashSize)[h3] =
+ (hash + kFix4HashSize)[h4] =
+ (hash + kFix5HashSize)[hv] = p->pos;
+ p->son[p->cyclicBufferPos] = curMatch;
+ MOVE_POS
+ }
+ while (--num != 0);
+}
+*/
+
+void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num)
+{
+ do
+ {
+ SKIP_HEADER(3)
+ HASH_ZIP_CALC;
+ curMatch = p->hash[hv];
+ p->hash[hv] = p->pos;
+ p->son[p->cyclicBufferPos] = curMatch;
+ MOVE_POS
+ }
+ while (--num != 0);
+}
+
+void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable)
+{
+ vTable->Init = (Mf_Init_Func)MatchFinder_Init;
+ vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinder_GetNumAvailableBytes;
+ vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinder_GetPointerToCurrentPos;
+ if (!p->btMode)
+ {
+ /* if (p->numHashBytes <= 4) */
+ {
+ vTable->GetMatches = (Mf_GetMatches_Func)Hc4_MatchFinder_GetMatches;
+ vTable->Skip = (Mf_Skip_Func)Hc4_MatchFinder_Skip;
+ }
+ /*
+ else
+ {
+ vTable->GetMatches = (Mf_GetMatches_Func)Hc5_MatchFinder_GetMatches;
+ vTable->Skip = (Mf_Skip_Func)Hc5_MatchFinder_Skip;
+ }
+ */
+ }
+ else if (p->numHashBytes == 2)
+ {
+ vTable->GetMatches = (Mf_GetMatches_Func)Bt2_MatchFinder_GetMatches;
+ vTable->Skip = (Mf_Skip_Func)Bt2_MatchFinder_Skip;
+ }
+ else if (p->numHashBytes == 3)
+ {
+ vTable->GetMatches = (Mf_GetMatches_Func)Bt3_MatchFinder_GetMatches;
+ vTable->Skip = (Mf_Skip_Func)Bt3_MatchFinder_Skip;
+ }
+ else /* if (p->numHashBytes == 4) */
+ {
+ vTable->GetMatches = (Mf_GetMatches_Func)Bt4_MatchFinder_GetMatches;
+ vTable->Skip = (Mf_Skip_Func)Bt4_MatchFinder_Skip;
+ }
+ /*
+ else
+ {
+ vTable->GetMatches = (Mf_GetMatches_Func)Bt5_MatchFinder_GetMatches;
+ vTable->Skip = (Mf_Skip_Func)Bt5_MatchFinder_Skip;
+ }
+ */
+}
diff --git a/contrib/libs/lzmasdk/LzFind.h b/contrib/libs/lzmasdk/LzFind.h
index 42c13be157..c77added7b 100644
--- a/contrib/libs/lzmasdk/LzFind.h
+++ b/contrib/libs/lzmasdk/LzFind.h
@@ -1,121 +1,121 @@
-/* LzFind.h -- Match finder for LZ algorithms
-2017-06-10 : Igor Pavlov : Public domain */
-
-#ifndef __LZ_FIND_H
-#define __LZ_FIND_H
-
-#include "7zTypes.h"
-
-EXTERN_C_BEGIN
-
-typedef UInt32 CLzRef;
-
-typedef struct _CMatchFinder
-{
- Byte *buffer;
- UInt32 pos;
- UInt32 posLimit;
- UInt32 streamPos;
- UInt32 lenLimit;
-
- UInt32 cyclicBufferPos;
- UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */
-
- Byte streamEndWasReached;
- Byte btMode;
- Byte bigHash;
- Byte directInput;
-
- UInt32 matchMaxLen;
- CLzRef *hash;
- CLzRef *son;
- UInt32 hashMask;
- UInt32 cutValue;
-
- Byte *bufferBase;
- ISeqInStream *stream;
-
- UInt32 blockSize;
- UInt32 keepSizeBefore;
- UInt32 keepSizeAfter;
-
- UInt32 numHashBytes;
- size_t directInputRem;
- UInt32 historySize;
- UInt32 fixedHashSize;
- UInt32 hashSizeSum;
- SRes result;
- UInt32 crc[256];
- size_t numRefs;
-
- UInt64 expectedDataSize;
-} CMatchFinder;
-
-#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer)
-
-#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos)
-
-#define Inline_MatchFinder_IsFinishedOK(p) \
- ((p)->streamEndWasReached \
- && (p)->streamPos == (p)->pos \
- && (!(p)->directInput || (p)->directInputRem == 0))
-
-int MatchFinder_NeedMove(CMatchFinder *p);
-Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p);
-void MatchFinder_MoveBlock(CMatchFinder *p);
-void MatchFinder_ReadIfRequired(CMatchFinder *p);
-
-void MatchFinder_Construct(CMatchFinder *p);
-
-/* Conditions:
- historySize <= 3 GB
- keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB
-*/
-int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
- UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter,
- ISzAllocPtr alloc);
-void MatchFinder_Free(CMatchFinder *p, ISzAllocPtr alloc);
-void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems);
-void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue);
-
-UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son,
- UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue,
- UInt32 *distances, UInt32 maxLen);
-
-/*
-Conditions:
- Mf_GetNumAvailableBytes_Func must be called before each Mf_GetMatchLen_Func.
- Mf_GetPointerToCurrentPos_Func's result must be used only before any other function
-*/
-
-typedef void (*Mf_Init_Func)(void *object);
-typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object);
-typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object);
-typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances);
-typedef void (*Mf_Skip_Func)(void *object, UInt32);
-
-typedef struct _IMatchFinder
-{
- Mf_Init_Func Init;
- Mf_GetNumAvailableBytes_Func GetNumAvailableBytes;
- Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos;
- Mf_GetMatches_Func GetMatches;
- Mf_Skip_Func Skip;
-} IMatchFinder;
-
-void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable);
-
-void MatchFinder_Init_LowHash(CMatchFinder *p);
-void MatchFinder_Init_HighHash(CMatchFinder *p);
-void MatchFinder_Init_3(CMatchFinder *p, int readData);
-void MatchFinder_Init(CMatchFinder *p);
-
-UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
-UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
-
-void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
-void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
-
-EXTERN_C_END
-
-#endif
+/* LzFind.h -- Match finder for LZ algorithms
+2017-06-10 : Igor Pavlov : Public domain */
+
+#ifndef __LZ_FIND_H
+#define __LZ_FIND_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+typedef UInt32 CLzRef;
+
+typedef struct _CMatchFinder
+{
+ Byte *buffer;
+ UInt32 pos;
+ UInt32 posLimit;
+ UInt32 streamPos;
+ UInt32 lenLimit;
+
+ UInt32 cyclicBufferPos;
+ UInt32 cyclicBufferSize; /* it must be = (historySize + 1) */
+
+ Byte streamEndWasReached;
+ Byte btMode;
+ Byte bigHash;
+ Byte directInput;
+
+ UInt32 matchMaxLen;
+ CLzRef *hash;
+ CLzRef *son;
+ UInt32 hashMask;
+ UInt32 cutValue;
+
+ Byte *bufferBase;
+ ISeqInStream *stream;
+
+ UInt32 blockSize;
+ UInt32 keepSizeBefore;
+ UInt32 keepSizeAfter;
+
+ UInt32 numHashBytes;
+ size_t directInputRem;
+ UInt32 historySize;
+ UInt32 fixedHashSize;
+ UInt32 hashSizeSum;
+ SRes result;
+ UInt32 crc[256];
+ size_t numRefs;
+
+ UInt64 expectedDataSize;
+} CMatchFinder;
+
+#define Inline_MatchFinder_GetPointerToCurrentPos(p) ((p)->buffer)
+
+#define Inline_MatchFinder_GetNumAvailableBytes(p) ((p)->streamPos - (p)->pos)
+
+#define Inline_MatchFinder_IsFinishedOK(p) \
+ ((p)->streamEndWasReached \
+ && (p)->streamPos == (p)->pos \
+ && (!(p)->directInput || (p)->directInputRem == 0))
+
+int MatchFinder_NeedMove(CMatchFinder *p);
+Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p);
+void MatchFinder_MoveBlock(CMatchFinder *p);
+void MatchFinder_ReadIfRequired(CMatchFinder *p);
+
+void MatchFinder_Construct(CMatchFinder *p);
+
+/* Conditions:
+ historySize <= 3 GB
+ keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB
+*/
+int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
+ UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter,
+ ISzAllocPtr alloc);
+void MatchFinder_Free(CMatchFinder *p, ISzAllocPtr alloc);
+void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems);
+void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue);
+
+UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *buffer, CLzRef *son,
+ UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 _cutValue,
+ UInt32 *distances, UInt32 maxLen);
+
+/*
+Conditions:
+ Mf_GetNumAvailableBytes_Func must be called before each Mf_GetMatchLen_Func.
+ Mf_GetPointerToCurrentPos_Func's result must be used only before any other function
+*/
+
+typedef void (*Mf_Init_Func)(void *object);
+typedef UInt32 (*Mf_GetNumAvailableBytes_Func)(void *object);
+typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object);
+typedef UInt32 (*Mf_GetMatches_Func)(void *object, UInt32 *distances);
+typedef void (*Mf_Skip_Func)(void *object, UInt32);
+
+typedef struct _IMatchFinder
+{
+ Mf_Init_Func Init;
+ Mf_GetNumAvailableBytes_Func GetNumAvailableBytes;
+ Mf_GetPointerToCurrentPos_Func GetPointerToCurrentPos;
+ Mf_GetMatches_Func GetMatches;
+ Mf_Skip_Func Skip;
+} IMatchFinder;
+
+void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable);
+
+void MatchFinder_Init_LowHash(CMatchFinder *p);
+void MatchFinder_Init_HighHash(CMatchFinder *p);
+void MatchFinder_Init_3(CMatchFinder *p, int readData);
+void MatchFinder_Init(CMatchFinder *p);
+
+UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
+UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances);
+
+void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
+void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num);
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/LzHash.h b/contrib/libs/lzmasdk/LzHash.h
index e7c942303d..2191444072 100644
--- a/contrib/libs/lzmasdk/LzHash.h
+++ b/contrib/libs/lzmasdk/LzHash.h
@@ -1,57 +1,57 @@
-/* LzHash.h -- HASH functions for LZ algorithms
-2015-04-12 : Igor Pavlov : Public domain */
-
-#ifndef __LZ_HASH_H
-#define __LZ_HASH_H
-
-#define kHash2Size (1 << 10)
-#define kHash3Size (1 << 16)
-#define kHash4Size (1 << 20)
-
-#define kFix3HashSize (kHash2Size)
-#define kFix4HashSize (kHash2Size + kHash3Size)
-#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size)
-
-#define HASH2_CALC hv = cur[0] | ((UInt32)cur[1] << 8);
-
-#define HASH3_CALC { \
- UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
- h2 = temp & (kHash2Size - 1); \
- hv = (temp ^ ((UInt32)cur[2] << 8)) & p->hashMask; }
-
-#define HASH4_CALC { \
- UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
- h2 = temp & (kHash2Size - 1); \
- temp ^= ((UInt32)cur[2] << 8); \
- h3 = temp & (kHash3Size - 1); \
- hv = (temp ^ (p->crc[cur[3]] << 5)) & p->hashMask; }
-
-#define HASH5_CALC { \
- UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
- h2 = temp & (kHash2Size - 1); \
- temp ^= ((UInt32)cur[2] << 8); \
- h3 = temp & (kHash3Size - 1); \
- temp ^= (p->crc[cur[3]] << 5); \
- h4 = temp & (kHash4Size - 1); \
- hv = (temp ^ (p->crc[cur[4]] << 3)) & p->hashMask; }
-
-/* #define HASH_ZIP_CALC hv = ((cur[0] | ((UInt32)cur[1] << 8)) ^ p->crc[cur[2]]) & 0xFFFF; */
-#define HASH_ZIP_CALC hv = ((cur[2] | ((UInt32)cur[0] << 8)) ^ p->crc[cur[1]]) & 0xFFFF;
-
-
-#define MT_HASH2_CALC \
- h2 = (p->crc[cur[0]] ^ cur[1]) & (kHash2Size - 1);
-
-#define MT_HASH3_CALC { \
- UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
- h2 = temp & (kHash2Size - 1); \
- h3 = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); }
-
-#define MT_HASH4_CALC { \
- UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
- h2 = temp & (kHash2Size - 1); \
- temp ^= ((UInt32)cur[2] << 8); \
- h3 = temp & (kHash3Size - 1); \
- h4 = (temp ^ (p->crc[cur[3]] << 5)) & (kHash4Size - 1); }
-
-#endif
+/* LzHash.h -- HASH functions for LZ algorithms
+2015-04-12 : Igor Pavlov : Public domain */
+
+#ifndef __LZ_HASH_H
+#define __LZ_HASH_H
+
+#define kHash2Size (1 << 10)
+#define kHash3Size (1 << 16)
+#define kHash4Size (1 << 20)
+
+#define kFix3HashSize (kHash2Size)
+#define kFix4HashSize (kHash2Size + kHash3Size)
+#define kFix5HashSize (kHash2Size + kHash3Size + kHash4Size)
+
+#define HASH2_CALC hv = cur[0] | ((UInt32)cur[1] << 8);
+
+#define HASH3_CALC { \
+ UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
+ h2 = temp & (kHash2Size - 1); \
+ hv = (temp ^ ((UInt32)cur[2] << 8)) & p->hashMask; }
+
+#define HASH4_CALC { \
+ UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
+ h2 = temp & (kHash2Size - 1); \
+ temp ^= ((UInt32)cur[2] << 8); \
+ h3 = temp & (kHash3Size - 1); \
+ hv = (temp ^ (p->crc[cur[3]] << 5)) & p->hashMask; }
+
+#define HASH5_CALC { \
+ UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
+ h2 = temp & (kHash2Size - 1); \
+ temp ^= ((UInt32)cur[2] << 8); \
+ h3 = temp & (kHash3Size - 1); \
+ temp ^= (p->crc[cur[3]] << 5); \
+ h4 = temp & (kHash4Size - 1); \
+ hv = (temp ^ (p->crc[cur[4]] << 3)) & p->hashMask; }
+
+/* #define HASH_ZIP_CALC hv = ((cur[0] | ((UInt32)cur[1] << 8)) ^ p->crc[cur[2]]) & 0xFFFF; */
+#define HASH_ZIP_CALC hv = ((cur[2] | ((UInt32)cur[0] << 8)) ^ p->crc[cur[1]]) & 0xFFFF;
+
+
+#define MT_HASH2_CALC \
+ h2 = (p->crc[cur[0]] ^ cur[1]) & (kHash2Size - 1);
+
+#define MT_HASH3_CALC { \
+ UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
+ h2 = temp & (kHash2Size - 1); \
+ h3 = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); }
+
+#define MT_HASH4_CALC { \
+ UInt32 temp = p->crc[cur[0]] ^ cur[1]; \
+ h2 = temp & (kHash2Size - 1); \
+ temp ^= ((UInt32)cur[2] << 8); \
+ h3 = temp & (kHash3Size - 1); \
+ h4 = (temp ^ (p->crc[cur[3]] << 5)) & (kHash4Size - 1); }
+
+#endif
diff --git a/contrib/libs/lzmasdk/Lzma2Dec.c b/contrib/libs/lzmasdk/Lzma2Dec.c
index 4e138a4aef..2e631051ba 100644
--- a/contrib/libs/lzmasdk/Lzma2Dec.c
+++ b/contrib/libs/lzmasdk/Lzma2Dec.c
@@ -1,488 +1,488 @@
-/* Lzma2Dec.c -- LZMA2 Decoder
-2019-02-02 : Igor Pavlov : Public domain */
-
-/* #define SHOW_DEBUG_INFO */
-
-#include "Precomp.h"
-
-#ifdef SHOW_DEBUG_INFO
-#include <stdio.h>
-#endif
-
-#include <string.h>
-
-#include "Lzma2Dec.h"
-
-/*
-00000000 - End of data
-00000001 U U - Uncompressed, reset dic, need reset state and set new prop
-00000010 U U - Uncompressed, no reset
-100uuuuu U U P P - LZMA, no reset
-101uuuuu U U P P - LZMA, reset state
-110uuuuu U U P P S - LZMA, reset state + set new prop
-111uuuuu U U P P S - LZMA, reset state + set new prop, reset dic
-
- u, U - Unpack Size
- P - Pack Size
- S - Props
-*/
-
-#define LZMA2_CONTROL_COPY_RESET_DIC 1
-
-#define LZMA2_IS_UNCOMPRESSED_STATE(p) (((p)->control & (1 << 7)) == 0)
-
-#define LZMA2_LCLP_MAX 4
-#define LZMA2_DIC_SIZE_FROM_PROP(p) (((UInt32)2 | ((p) & 1)) << ((p) / 2 + 11))
-
-#ifdef SHOW_DEBUG_INFO
-#define PRF(x) x
-#else
-#define PRF(x)
-#endif
-
-typedef enum
-{
- LZMA2_STATE_CONTROL,
- LZMA2_STATE_UNPACK0,
- LZMA2_STATE_UNPACK1,
- LZMA2_STATE_PACK0,
- LZMA2_STATE_PACK1,
- LZMA2_STATE_PROP,
- LZMA2_STATE_DATA,
- LZMA2_STATE_DATA_CONT,
- LZMA2_STATE_FINISHED,
- LZMA2_STATE_ERROR
-} ELzma2State;
-
-static SRes Lzma2Dec_GetOldProps(Byte prop, Byte *props)
-{
- UInt32 dicSize;
- if (prop > 40)
- return SZ_ERROR_UNSUPPORTED;
- dicSize = (prop == 40) ? 0xFFFFFFFF : LZMA2_DIC_SIZE_FROM_PROP(prop);
- props[0] = (Byte)LZMA2_LCLP_MAX;
- props[1] = (Byte)(dicSize);
- props[2] = (Byte)(dicSize >> 8);
- props[3] = (Byte)(dicSize >> 16);
- props[4] = (Byte)(dicSize >> 24);
- return SZ_OK;
-}
-
-SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc)
-{
- Byte props[LZMA_PROPS_SIZE];
- RINOK(Lzma2Dec_GetOldProps(prop, props));
- return LzmaDec_AllocateProbs(&p->decoder, props, LZMA_PROPS_SIZE, alloc);
-}
-
-SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc)
-{
- Byte props[LZMA_PROPS_SIZE];
- RINOK(Lzma2Dec_GetOldProps(prop, props));
- return LzmaDec_Allocate(&p->decoder, props, LZMA_PROPS_SIZE, alloc);
-}
-
-void Lzma2Dec_Init(CLzma2Dec *p)
-{
- p->state = LZMA2_STATE_CONTROL;
- p->needInitLevel = 0xE0;
- p->isExtraMode = False;
- p->unpackSize = 0;
-
- // p->decoder.dicPos = 0; // we can use it instead of full init
- LzmaDec_Init(&p->decoder);
-}
-
-static ELzma2State Lzma2Dec_UpdateState(CLzma2Dec *p, Byte b)
-{
- switch (p->state)
- {
- case LZMA2_STATE_CONTROL:
- p->isExtraMode = False;
- p->control = b;
- PRF(printf("\n %8X", (unsigned)p->decoder.dicPos));
- PRF(printf(" %02X", (unsigned)b));
- if (b == 0)
- return LZMA2_STATE_FINISHED;
- if (LZMA2_IS_UNCOMPRESSED_STATE(p))
- {
- if (b == LZMA2_CONTROL_COPY_RESET_DIC)
- p->needInitLevel = 0xC0;
- else if (b > 2 || p->needInitLevel == 0xE0)
- return LZMA2_STATE_ERROR;
- }
- else
- {
- if (b < p->needInitLevel)
- return LZMA2_STATE_ERROR;
- p->needInitLevel = 0;
- p->unpackSize = (UInt32)(b & 0x1F) << 16;
- }
- return LZMA2_STATE_UNPACK0;
-
- case LZMA2_STATE_UNPACK0:
- p->unpackSize |= (UInt32)b << 8;
- return LZMA2_STATE_UNPACK1;
-
- case LZMA2_STATE_UNPACK1:
- p->unpackSize |= (UInt32)b;
- p->unpackSize++;
- PRF(printf(" %7u", (unsigned)p->unpackSize));
- return LZMA2_IS_UNCOMPRESSED_STATE(p) ? LZMA2_STATE_DATA : LZMA2_STATE_PACK0;
-
- case LZMA2_STATE_PACK0:
- p->packSize = (UInt32)b << 8;
- return LZMA2_STATE_PACK1;
-
- case LZMA2_STATE_PACK1:
- p->packSize |= (UInt32)b;
- p->packSize++;
- // if (p->packSize < 5) return LZMA2_STATE_ERROR;
- PRF(printf(" %5u", (unsigned)p->packSize));
- return (p->control & 0x40) ? LZMA2_STATE_PROP : LZMA2_STATE_DATA;
-
- case LZMA2_STATE_PROP:
- {
- unsigned lc, lp;
- if (b >= (9 * 5 * 5))
- return LZMA2_STATE_ERROR;
- lc = b % 9;
- b /= 9;
- p->decoder.prop.pb = (Byte)(b / 5);
- lp = b % 5;
- if (lc + lp > LZMA2_LCLP_MAX)
- return LZMA2_STATE_ERROR;
- p->decoder.prop.lc = (Byte)lc;
- p->decoder.prop.lp = (Byte)lp;
- return LZMA2_STATE_DATA;
- }
- }
- return LZMA2_STATE_ERROR;
-}
-
-static void LzmaDec_UpdateWithUncompressed(CLzmaDec *p, const Byte *src, SizeT size)
-{
- memcpy(p->dic + p->dicPos, src, size);
- p->dicPos += size;
- if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= size)
- p->checkDicSize = p->prop.dicSize;
- p->processedPos += (UInt32)size;
-}
-
-void LzmaDec_InitDicAndState(CLzmaDec *p, BoolInt initDic, BoolInt initState);
-
-
-SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit,
- const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status)
-{
- SizeT inSize = *srcLen;
- *srcLen = 0;
- *status = LZMA_STATUS_NOT_SPECIFIED;
-
- while (p->state != LZMA2_STATE_ERROR)
- {
- SizeT dicPos;
-
- if (p->state == LZMA2_STATE_FINISHED)
- {
- *status = LZMA_STATUS_FINISHED_WITH_MARK;
- return SZ_OK;
- }
-
- dicPos = p->decoder.dicPos;
-
- if (dicPos == dicLimit && finishMode == LZMA_FINISH_ANY)
- {
- *status = LZMA_STATUS_NOT_FINISHED;
- return SZ_OK;
- }
-
- if (p->state != LZMA2_STATE_DATA && p->state != LZMA2_STATE_DATA_CONT)
- {
- if (*srcLen == inSize)
- {
- *status = LZMA_STATUS_NEEDS_MORE_INPUT;
- return SZ_OK;
- }
- (*srcLen)++;
- p->state = Lzma2Dec_UpdateState(p, *src++);
- if (dicPos == dicLimit && p->state != LZMA2_STATE_FINISHED)
- break;
- continue;
- }
-
- {
- SizeT inCur = inSize - *srcLen;
- SizeT outCur = dicLimit - dicPos;
- ELzmaFinishMode curFinishMode = LZMA_FINISH_ANY;
-
- if (outCur >= p->unpackSize)
- {
- outCur = (SizeT)p->unpackSize;
- curFinishMode = LZMA_FINISH_END;
- }
-
- if (LZMA2_IS_UNCOMPRESSED_STATE(p))
- {
- if (inCur == 0)
- {
- *status = LZMA_STATUS_NEEDS_MORE_INPUT;
- return SZ_OK;
- }
-
- if (p->state == LZMA2_STATE_DATA)
- {
- BoolInt initDic = (p->control == LZMA2_CONTROL_COPY_RESET_DIC);
- LzmaDec_InitDicAndState(&p->decoder, initDic, False);
- }
-
- if (inCur > outCur)
- inCur = outCur;
- if (inCur == 0)
- break;
-
- LzmaDec_UpdateWithUncompressed(&p->decoder, src, inCur);
-
- src += inCur;
- *srcLen += inCur;
- p->unpackSize -= (UInt32)inCur;
- p->state = (p->unpackSize == 0) ? LZMA2_STATE_CONTROL : LZMA2_STATE_DATA_CONT;
- }
- else
- {
- SRes res;
-
- if (p->state == LZMA2_STATE_DATA)
- {
- BoolInt initDic = (p->control >= 0xE0);
- BoolInt initState = (p->control >= 0xA0);
- LzmaDec_InitDicAndState(&p->decoder, initDic, initState);
- p->state = LZMA2_STATE_DATA_CONT;
- }
-
- if (inCur > p->packSize)
- inCur = (SizeT)p->packSize;
-
- res = LzmaDec_DecodeToDic(&p->decoder, dicPos + outCur, src, &inCur, curFinishMode, status);
-
- src += inCur;
- *srcLen += inCur;
- p->packSize -= (UInt32)inCur;
- outCur = p->decoder.dicPos - dicPos;
- p->unpackSize -= (UInt32)outCur;
-
- if (res != 0)
- break;
-
- if (*status == LZMA_STATUS_NEEDS_MORE_INPUT)
- {
- if (p->packSize == 0)
- break;
- return SZ_OK;
- }
-
- if (inCur == 0 && outCur == 0)
- {
- if (*status != LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
- || p->unpackSize != 0
- || p->packSize != 0)
- break;
- p->state = LZMA2_STATE_CONTROL;
- }
-
- *status = LZMA_STATUS_NOT_SPECIFIED;
- }
- }
- }
-
- *status = LZMA_STATUS_NOT_SPECIFIED;
- p->state = LZMA2_STATE_ERROR;
- return SZ_ERROR_DATA;
-}
-
-
-
-
-ELzma2ParseStatus Lzma2Dec_Parse(CLzma2Dec *p,
- SizeT outSize,
- const Byte *src, SizeT *srcLen,
- int checkFinishBlock)
-{
- SizeT inSize = *srcLen;
- *srcLen = 0;
-
- while (p->state != LZMA2_STATE_ERROR)
- {
- if (p->state == LZMA2_STATE_FINISHED)
- return (ELzma2ParseStatus)LZMA_STATUS_FINISHED_WITH_MARK;
-
- if (outSize == 0 && !checkFinishBlock)
- return (ELzma2ParseStatus)LZMA_STATUS_NOT_FINISHED;
-
- if (p->state != LZMA2_STATE_DATA && p->state != LZMA2_STATE_DATA_CONT)
- {
- if (*srcLen == inSize)
- return (ELzma2ParseStatus)LZMA_STATUS_NEEDS_MORE_INPUT;
- (*srcLen)++;
-
- p->state = Lzma2Dec_UpdateState(p, *src++);
-
- if (p->state == LZMA2_STATE_UNPACK0)
- {
- // if (p->decoder.dicPos != 0)
- if (p->control == LZMA2_CONTROL_COPY_RESET_DIC || p->control >= 0xE0)
- return LZMA2_PARSE_STATUS_NEW_BLOCK;
- // if (outSize == 0) return LZMA_STATUS_NOT_FINISHED;
- }
-
- // The following code can be commented.
- // It's not big problem, if we read additional input bytes.
- // It will be stopped later in LZMA2_STATE_DATA / LZMA2_STATE_DATA_CONT state.
-
- if (outSize == 0 && p->state != LZMA2_STATE_FINISHED)
- {
- // checkFinishBlock is true. So we expect that block must be finished,
- // We can return LZMA_STATUS_NOT_SPECIFIED or LZMA_STATUS_NOT_FINISHED here
- // break;
- return (ELzma2ParseStatus)LZMA_STATUS_NOT_FINISHED;
- }
-
- if (p->state == LZMA2_STATE_DATA)
- return LZMA2_PARSE_STATUS_NEW_CHUNK;
-
- continue;
- }
-
- if (outSize == 0)
- return (ELzma2ParseStatus)LZMA_STATUS_NOT_FINISHED;
-
- {
- SizeT inCur = inSize - *srcLen;
-
- if (LZMA2_IS_UNCOMPRESSED_STATE(p))
- {
- if (inCur == 0)
- return (ELzma2ParseStatus)LZMA_STATUS_NEEDS_MORE_INPUT;
- if (inCur > p->unpackSize)
- inCur = p->unpackSize;
- if (inCur > outSize)
- inCur = outSize;
- p->decoder.dicPos += inCur;
- src += inCur;
- *srcLen += inCur;
- outSize -= inCur;
- p->unpackSize -= (UInt32)inCur;
- p->state = (p->unpackSize == 0) ? LZMA2_STATE_CONTROL : LZMA2_STATE_DATA_CONT;
- }
- else
- {
- p->isExtraMode = True;
-
- if (inCur == 0)
- {
- if (p->packSize != 0)
- return (ELzma2ParseStatus)LZMA_STATUS_NEEDS_MORE_INPUT;
- }
- else if (p->state == LZMA2_STATE_DATA)
- {
- p->state = LZMA2_STATE_DATA_CONT;
- if (*src != 0)
- {
- // first byte of lzma chunk must be Zero
- *srcLen += 1;
- p->packSize--;
- break;
- }
- }
-
- if (inCur > p->packSize)
- inCur = (SizeT)p->packSize;
-
- src += inCur;
- *srcLen += inCur;
- p->packSize -= (UInt32)inCur;
-
- if (p->packSize == 0)
- {
- SizeT rem = outSize;
- if (rem > p->unpackSize)
- rem = p->unpackSize;
- p->decoder.dicPos += rem;
- p->unpackSize -= (UInt32)rem;
- outSize -= rem;
- if (p->unpackSize == 0)
- p->state = LZMA2_STATE_CONTROL;
- }
- }
- }
- }
-
- p->state = LZMA2_STATE_ERROR;
- return (ELzma2ParseStatus)LZMA_STATUS_NOT_SPECIFIED;
-}
-
-
-
-
-SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status)
-{
- SizeT outSize = *destLen, inSize = *srcLen;
- *srcLen = *destLen = 0;
-
- for (;;)
- {
- SizeT inCur = inSize, outCur, dicPos;
- ELzmaFinishMode curFinishMode;
- SRes res;
-
- if (p->decoder.dicPos == p->decoder.dicBufSize)
- p->decoder.dicPos = 0;
- dicPos = p->decoder.dicPos;
- curFinishMode = LZMA_FINISH_ANY;
- outCur = p->decoder.dicBufSize - dicPos;
-
- if (outCur >= outSize)
- {
- outCur = outSize;
- curFinishMode = finishMode;
- }
-
- res = Lzma2Dec_DecodeToDic(p, dicPos + outCur, src, &inCur, curFinishMode, status);
-
- src += inCur;
- inSize -= inCur;
- *srcLen += inCur;
- outCur = p->decoder.dicPos - dicPos;
- memcpy(dest, p->decoder.dic + dicPos, outCur);
- dest += outCur;
- outSize -= outCur;
- *destLen += outCur;
- if (res != 0)
- return res;
- if (outCur == 0 || outSize == 0)
- return SZ_OK;
- }
-}
-
-
-SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
- Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAllocPtr alloc)
-{
- CLzma2Dec p;
- SRes res;
- SizeT outSize = *destLen, inSize = *srcLen;
- *destLen = *srcLen = 0;
- *status = LZMA_STATUS_NOT_SPECIFIED;
- Lzma2Dec_Construct(&p);
- RINOK(Lzma2Dec_AllocateProbs(&p, prop, alloc));
- p.decoder.dic = dest;
- p.decoder.dicBufSize = outSize;
- Lzma2Dec_Init(&p);
- *srcLen = inSize;
- res = Lzma2Dec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status);
- *destLen = p.decoder.dicPos;
- if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT)
- res = SZ_ERROR_INPUT_EOF;
- Lzma2Dec_FreeProbs(&p, alloc);
- return res;
-}
+/* Lzma2Dec.c -- LZMA2 Decoder
+2019-02-02 : Igor Pavlov : Public domain */
+
+/* #define SHOW_DEBUG_INFO */
+
+#include "Precomp.h"
+
+#ifdef SHOW_DEBUG_INFO
+#include <stdio.h>
+#endif
+
+#include <string.h>
+
+#include "Lzma2Dec.h"
+
+/*
+00000000 - End of data
+00000001 U U - Uncompressed, reset dic, need reset state and set new prop
+00000010 U U - Uncompressed, no reset
+100uuuuu U U P P - LZMA, no reset
+101uuuuu U U P P - LZMA, reset state
+110uuuuu U U P P S - LZMA, reset state + set new prop
+111uuuuu U U P P S - LZMA, reset state + set new prop, reset dic
+
+ u, U - Unpack Size
+ P - Pack Size
+ S - Props
+*/
+
+#define LZMA2_CONTROL_COPY_RESET_DIC 1
+
+#define LZMA2_IS_UNCOMPRESSED_STATE(p) (((p)->control & (1 << 7)) == 0)
+
+#define LZMA2_LCLP_MAX 4
+#define LZMA2_DIC_SIZE_FROM_PROP(p) (((UInt32)2 | ((p) & 1)) << ((p) / 2 + 11))
+
+#ifdef SHOW_DEBUG_INFO
+#define PRF(x) x
+#else
+#define PRF(x)
+#endif
+
+typedef enum
+{
+ LZMA2_STATE_CONTROL,
+ LZMA2_STATE_UNPACK0,
+ LZMA2_STATE_UNPACK1,
+ LZMA2_STATE_PACK0,
+ LZMA2_STATE_PACK1,
+ LZMA2_STATE_PROP,
+ LZMA2_STATE_DATA,
+ LZMA2_STATE_DATA_CONT,
+ LZMA2_STATE_FINISHED,
+ LZMA2_STATE_ERROR
+} ELzma2State;
+
+static SRes Lzma2Dec_GetOldProps(Byte prop, Byte *props)
+{
+ UInt32 dicSize;
+ if (prop > 40)
+ return SZ_ERROR_UNSUPPORTED;
+ dicSize = (prop == 40) ? 0xFFFFFFFF : LZMA2_DIC_SIZE_FROM_PROP(prop);
+ props[0] = (Byte)LZMA2_LCLP_MAX;
+ props[1] = (Byte)(dicSize);
+ props[2] = (Byte)(dicSize >> 8);
+ props[3] = (Byte)(dicSize >> 16);
+ props[4] = (Byte)(dicSize >> 24);
+ return SZ_OK;
+}
+
+SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc)
+{
+ Byte props[LZMA_PROPS_SIZE];
+ RINOK(Lzma2Dec_GetOldProps(prop, props));
+ return LzmaDec_AllocateProbs(&p->decoder, props, LZMA_PROPS_SIZE, alloc);
+}
+
+SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc)
+{
+ Byte props[LZMA_PROPS_SIZE];
+ RINOK(Lzma2Dec_GetOldProps(prop, props));
+ return LzmaDec_Allocate(&p->decoder, props, LZMA_PROPS_SIZE, alloc);
+}
+
+void Lzma2Dec_Init(CLzma2Dec *p)
+{
+ p->state = LZMA2_STATE_CONTROL;
+ p->needInitLevel = 0xE0;
+ p->isExtraMode = False;
+ p->unpackSize = 0;
+
+ // p->decoder.dicPos = 0; // we can use it instead of full init
+ LzmaDec_Init(&p->decoder);
+}
+
+static ELzma2State Lzma2Dec_UpdateState(CLzma2Dec *p, Byte b)
+{
+ switch (p->state)
+ {
+ case LZMA2_STATE_CONTROL:
+ p->isExtraMode = False;
+ p->control = b;
+ PRF(printf("\n %8X", (unsigned)p->decoder.dicPos));
+ PRF(printf(" %02X", (unsigned)b));
+ if (b == 0)
+ return LZMA2_STATE_FINISHED;
+ if (LZMA2_IS_UNCOMPRESSED_STATE(p))
+ {
+ if (b == LZMA2_CONTROL_COPY_RESET_DIC)
+ p->needInitLevel = 0xC0;
+ else if (b > 2 || p->needInitLevel == 0xE0)
+ return LZMA2_STATE_ERROR;
+ }
+ else
+ {
+ if (b < p->needInitLevel)
+ return LZMA2_STATE_ERROR;
+ p->needInitLevel = 0;
+ p->unpackSize = (UInt32)(b & 0x1F) << 16;
+ }
+ return LZMA2_STATE_UNPACK0;
+
+ case LZMA2_STATE_UNPACK0:
+ p->unpackSize |= (UInt32)b << 8;
+ return LZMA2_STATE_UNPACK1;
+
+ case LZMA2_STATE_UNPACK1:
+ p->unpackSize |= (UInt32)b;
+ p->unpackSize++;
+ PRF(printf(" %7u", (unsigned)p->unpackSize));
+ return LZMA2_IS_UNCOMPRESSED_STATE(p) ? LZMA2_STATE_DATA : LZMA2_STATE_PACK0;
+
+ case LZMA2_STATE_PACK0:
+ p->packSize = (UInt32)b << 8;
+ return LZMA2_STATE_PACK1;
+
+ case LZMA2_STATE_PACK1:
+ p->packSize |= (UInt32)b;
+ p->packSize++;
+ // if (p->packSize < 5) return LZMA2_STATE_ERROR;
+ PRF(printf(" %5u", (unsigned)p->packSize));
+ return (p->control & 0x40) ? LZMA2_STATE_PROP : LZMA2_STATE_DATA;
+
+ case LZMA2_STATE_PROP:
+ {
+ unsigned lc, lp;
+ if (b >= (9 * 5 * 5))
+ return LZMA2_STATE_ERROR;
+ lc = b % 9;
+ b /= 9;
+ p->decoder.prop.pb = (Byte)(b / 5);
+ lp = b % 5;
+ if (lc + lp > LZMA2_LCLP_MAX)
+ return LZMA2_STATE_ERROR;
+ p->decoder.prop.lc = (Byte)lc;
+ p->decoder.prop.lp = (Byte)lp;
+ return LZMA2_STATE_DATA;
+ }
+ }
+ return LZMA2_STATE_ERROR;
+}
+
+static void LzmaDec_UpdateWithUncompressed(CLzmaDec *p, const Byte *src, SizeT size)
+{
+ memcpy(p->dic + p->dicPos, src, size);
+ p->dicPos += size;
+ if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= size)
+ p->checkDicSize = p->prop.dicSize;
+ p->processedPos += (UInt32)size;
+}
+
+void LzmaDec_InitDicAndState(CLzmaDec *p, BoolInt initDic, BoolInt initState);
+
+
+SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit,
+ const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status)
+{
+ SizeT inSize = *srcLen;
+ *srcLen = 0;
+ *status = LZMA_STATUS_NOT_SPECIFIED;
+
+ while (p->state != LZMA2_STATE_ERROR)
+ {
+ SizeT dicPos;
+
+ if (p->state == LZMA2_STATE_FINISHED)
+ {
+ *status = LZMA_STATUS_FINISHED_WITH_MARK;
+ return SZ_OK;
+ }
+
+ dicPos = p->decoder.dicPos;
+
+ if (dicPos == dicLimit && finishMode == LZMA_FINISH_ANY)
+ {
+ *status = LZMA_STATUS_NOT_FINISHED;
+ return SZ_OK;
+ }
+
+ if (p->state != LZMA2_STATE_DATA && p->state != LZMA2_STATE_DATA_CONT)
+ {
+ if (*srcLen == inSize)
+ {
+ *status = LZMA_STATUS_NEEDS_MORE_INPUT;
+ return SZ_OK;
+ }
+ (*srcLen)++;
+ p->state = Lzma2Dec_UpdateState(p, *src++);
+ if (dicPos == dicLimit && p->state != LZMA2_STATE_FINISHED)
+ break;
+ continue;
+ }
+
+ {
+ SizeT inCur = inSize - *srcLen;
+ SizeT outCur = dicLimit - dicPos;
+ ELzmaFinishMode curFinishMode = LZMA_FINISH_ANY;
+
+ if (outCur >= p->unpackSize)
+ {
+ outCur = (SizeT)p->unpackSize;
+ curFinishMode = LZMA_FINISH_END;
+ }
+
+ if (LZMA2_IS_UNCOMPRESSED_STATE(p))
+ {
+ if (inCur == 0)
+ {
+ *status = LZMA_STATUS_NEEDS_MORE_INPUT;
+ return SZ_OK;
+ }
+
+ if (p->state == LZMA2_STATE_DATA)
+ {
+ BoolInt initDic = (p->control == LZMA2_CONTROL_COPY_RESET_DIC);
+ LzmaDec_InitDicAndState(&p->decoder, initDic, False);
+ }
+
+ if (inCur > outCur)
+ inCur = outCur;
+ if (inCur == 0)
+ break;
+
+ LzmaDec_UpdateWithUncompressed(&p->decoder, src, inCur);
+
+ src += inCur;
+ *srcLen += inCur;
+ p->unpackSize -= (UInt32)inCur;
+ p->state = (p->unpackSize == 0) ? LZMA2_STATE_CONTROL : LZMA2_STATE_DATA_CONT;
+ }
+ else
+ {
+ SRes res;
+
+ if (p->state == LZMA2_STATE_DATA)
+ {
+ BoolInt initDic = (p->control >= 0xE0);
+ BoolInt initState = (p->control >= 0xA0);
+ LzmaDec_InitDicAndState(&p->decoder, initDic, initState);
+ p->state = LZMA2_STATE_DATA_CONT;
+ }
+
+ if (inCur > p->packSize)
+ inCur = (SizeT)p->packSize;
+
+ res = LzmaDec_DecodeToDic(&p->decoder, dicPos + outCur, src, &inCur, curFinishMode, status);
+
+ src += inCur;
+ *srcLen += inCur;
+ p->packSize -= (UInt32)inCur;
+ outCur = p->decoder.dicPos - dicPos;
+ p->unpackSize -= (UInt32)outCur;
+
+ if (res != 0)
+ break;
+
+ if (*status == LZMA_STATUS_NEEDS_MORE_INPUT)
+ {
+ if (p->packSize == 0)
+ break;
+ return SZ_OK;
+ }
+
+ if (inCur == 0 && outCur == 0)
+ {
+ if (*status != LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
+ || p->unpackSize != 0
+ || p->packSize != 0)
+ break;
+ p->state = LZMA2_STATE_CONTROL;
+ }
+
+ *status = LZMA_STATUS_NOT_SPECIFIED;
+ }
+ }
+ }
+
+ *status = LZMA_STATUS_NOT_SPECIFIED;
+ p->state = LZMA2_STATE_ERROR;
+ return SZ_ERROR_DATA;
+}
+
+
+
+
+ELzma2ParseStatus Lzma2Dec_Parse(CLzma2Dec *p,
+ SizeT outSize,
+ const Byte *src, SizeT *srcLen,
+ int checkFinishBlock)
+{
+ SizeT inSize = *srcLen;
+ *srcLen = 0;
+
+ while (p->state != LZMA2_STATE_ERROR)
+ {
+ if (p->state == LZMA2_STATE_FINISHED)
+ return (ELzma2ParseStatus)LZMA_STATUS_FINISHED_WITH_MARK;
+
+ if (outSize == 0 && !checkFinishBlock)
+ return (ELzma2ParseStatus)LZMA_STATUS_NOT_FINISHED;
+
+ if (p->state != LZMA2_STATE_DATA && p->state != LZMA2_STATE_DATA_CONT)
+ {
+ if (*srcLen == inSize)
+ return (ELzma2ParseStatus)LZMA_STATUS_NEEDS_MORE_INPUT;
+ (*srcLen)++;
+
+ p->state = Lzma2Dec_UpdateState(p, *src++);
+
+ if (p->state == LZMA2_STATE_UNPACK0)
+ {
+ // if (p->decoder.dicPos != 0)
+ if (p->control == LZMA2_CONTROL_COPY_RESET_DIC || p->control >= 0xE0)
+ return LZMA2_PARSE_STATUS_NEW_BLOCK;
+ // if (outSize == 0) return LZMA_STATUS_NOT_FINISHED;
+ }
+
+ // The following code can be commented.
+ // It's not big problem, if we read additional input bytes.
+ // It will be stopped later in LZMA2_STATE_DATA / LZMA2_STATE_DATA_CONT state.
+
+ if (outSize == 0 && p->state != LZMA2_STATE_FINISHED)
+ {
+ // checkFinishBlock is true. So we expect that block must be finished,
+ // We can return LZMA_STATUS_NOT_SPECIFIED or LZMA_STATUS_NOT_FINISHED here
+ // break;
+ return (ELzma2ParseStatus)LZMA_STATUS_NOT_FINISHED;
+ }
+
+ if (p->state == LZMA2_STATE_DATA)
+ return LZMA2_PARSE_STATUS_NEW_CHUNK;
+
+ continue;
+ }
+
+ if (outSize == 0)
+ return (ELzma2ParseStatus)LZMA_STATUS_NOT_FINISHED;
+
+ {
+ SizeT inCur = inSize - *srcLen;
+
+ if (LZMA2_IS_UNCOMPRESSED_STATE(p))
+ {
+ if (inCur == 0)
+ return (ELzma2ParseStatus)LZMA_STATUS_NEEDS_MORE_INPUT;
+ if (inCur > p->unpackSize)
+ inCur = p->unpackSize;
+ if (inCur > outSize)
+ inCur = outSize;
+ p->decoder.dicPos += inCur;
+ src += inCur;
+ *srcLen += inCur;
+ outSize -= inCur;
+ p->unpackSize -= (UInt32)inCur;
+ p->state = (p->unpackSize == 0) ? LZMA2_STATE_CONTROL : LZMA2_STATE_DATA_CONT;
+ }
+ else
+ {
+ p->isExtraMode = True;
+
+ if (inCur == 0)
+ {
+ if (p->packSize != 0)
+ return (ELzma2ParseStatus)LZMA_STATUS_NEEDS_MORE_INPUT;
+ }
+ else if (p->state == LZMA2_STATE_DATA)
+ {
+ p->state = LZMA2_STATE_DATA_CONT;
+ if (*src != 0)
+ {
+ // first byte of lzma chunk must be Zero
+ *srcLen += 1;
+ p->packSize--;
+ break;
+ }
+ }
+
+ if (inCur > p->packSize)
+ inCur = (SizeT)p->packSize;
+
+ src += inCur;
+ *srcLen += inCur;
+ p->packSize -= (UInt32)inCur;
+
+ if (p->packSize == 0)
+ {
+ SizeT rem = outSize;
+ if (rem > p->unpackSize)
+ rem = p->unpackSize;
+ p->decoder.dicPos += rem;
+ p->unpackSize -= (UInt32)rem;
+ outSize -= rem;
+ if (p->unpackSize == 0)
+ p->state = LZMA2_STATE_CONTROL;
+ }
+ }
+ }
+ }
+
+ p->state = LZMA2_STATE_ERROR;
+ return (ELzma2ParseStatus)LZMA_STATUS_NOT_SPECIFIED;
+}
+
+
+
+
+SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status)
+{
+ SizeT outSize = *destLen, inSize = *srcLen;
+ *srcLen = *destLen = 0;
+
+ for (;;)
+ {
+ SizeT inCur = inSize, outCur, dicPos;
+ ELzmaFinishMode curFinishMode;
+ SRes res;
+
+ if (p->decoder.dicPos == p->decoder.dicBufSize)
+ p->decoder.dicPos = 0;
+ dicPos = p->decoder.dicPos;
+ curFinishMode = LZMA_FINISH_ANY;
+ outCur = p->decoder.dicBufSize - dicPos;
+
+ if (outCur >= outSize)
+ {
+ outCur = outSize;
+ curFinishMode = finishMode;
+ }
+
+ res = Lzma2Dec_DecodeToDic(p, dicPos + outCur, src, &inCur, curFinishMode, status);
+
+ src += inCur;
+ inSize -= inCur;
+ *srcLen += inCur;
+ outCur = p->decoder.dicPos - dicPos;
+ memcpy(dest, p->decoder.dic + dicPos, outCur);
+ dest += outCur;
+ outSize -= outCur;
+ *destLen += outCur;
+ if (res != 0)
+ return res;
+ if (outCur == 0 || outSize == 0)
+ return SZ_OK;
+ }
+}
+
+
+SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
+ Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAllocPtr alloc)
+{
+ CLzma2Dec p;
+ SRes res;
+ SizeT outSize = *destLen, inSize = *srcLen;
+ *destLen = *srcLen = 0;
+ *status = LZMA_STATUS_NOT_SPECIFIED;
+ Lzma2Dec_Construct(&p);
+ RINOK(Lzma2Dec_AllocateProbs(&p, prop, alloc));
+ p.decoder.dic = dest;
+ p.decoder.dicBufSize = outSize;
+ Lzma2Dec_Init(&p);
+ *srcLen = inSize;
+ res = Lzma2Dec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status);
+ *destLen = p.decoder.dicPos;
+ if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT)
+ res = SZ_ERROR_INPUT_EOF;
+ Lzma2Dec_FreeProbs(&p, alloc);
+ return res;
+}
diff --git a/contrib/libs/lzmasdk/Lzma2Dec.h b/contrib/libs/lzmasdk/Lzma2Dec.h
index b8ddeac890..da50387250 100644
--- a/contrib/libs/lzmasdk/Lzma2Dec.h
+++ b/contrib/libs/lzmasdk/Lzma2Dec.h
@@ -1,120 +1,120 @@
-/* Lzma2Dec.h -- LZMA2 Decoder
-2018-02-19 : Igor Pavlov : Public domain */
-
-#ifndef __LZMA2_DEC_H
-#define __LZMA2_DEC_H
-
-#include "LzmaDec.h"
-
-EXTERN_C_BEGIN
-
-/* ---------- State Interface ---------- */
-
-typedef struct
-{
- unsigned state;
- Byte control;
- Byte needInitLevel;
- Byte isExtraMode;
- Byte _pad_;
- UInt32 packSize;
- UInt32 unpackSize;
- CLzmaDec decoder;
-} CLzma2Dec;
-
-#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder)
-#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc)
-#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc)
-
-SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc);
-SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc);
-void Lzma2Dec_Init(CLzma2Dec *p);
-
-/*
-finishMode:
- It has meaning only if the decoding reaches output limit (*destLen or dicLimit).
- LZMA_FINISH_ANY - use smallest number of input bytes
- LZMA_FINISH_END - read EndOfStream marker after decoding
-
-Returns:
- SZ_OK
- status:
- LZMA_STATUS_FINISHED_WITH_MARK
- LZMA_STATUS_NOT_FINISHED
- LZMA_STATUS_NEEDS_MORE_INPUT
- SZ_ERROR_DATA - Data error
-*/
-
-SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit,
- const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
-
-SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen,
- const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
-
-
-/* ---------- LZMA2 block and chunk parsing ---------- */
-
-/*
-Lzma2Dec_Parse() parses compressed data stream up to next independent block or next chunk data.
-It can return LZMA_STATUS_* code or LZMA2_PARSE_STATUS_* code:
- - LZMA2_PARSE_STATUS_NEW_BLOCK - there is new block, and 1 additional byte (control byte of next block header) was read from input.
- - LZMA2_PARSE_STATUS_NEW_CHUNK - there is new chunk, and only lzma2 header of new chunk was read.
- CLzma2Dec::unpackSize contains unpack size of that chunk
-*/
-
-typedef enum
-{
-/*
- LZMA_STATUS_NOT_SPECIFIED // data error
- LZMA_STATUS_FINISHED_WITH_MARK
- LZMA_STATUS_NOT_FINISHED //
- LZMA_STATUS_NEEDS_MORE_INPUT
- LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK // unused
-*/
- LZMA2_PARSE_STATUS_NEW_BLOCK = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + 1,
- LZMA2_PARSE_STATUS_NEW_CHUNK
-} ELzma2ParseStatus;
-
-ELzma2ParseStatus Lzma2Dec_Parse(CLzma2Dec *p,
- SizeT outSize, // output size
- const Byte *src, SizeT *srcLen,
- int checkFinishBlock // set (checkFinishBlock = 1), if it must read full input data, if decoder.dicPos reaches blockMax position.
- );
-
-/*
-LZMA2 parser doesn't decode LZMA chunks, so we must read
- full input LZMA chunk to decode some part of LZMA chunk.
-
-Lzma2Dec_GetUnpackExtra() returns the value that shows
- max possible number of output bytes that can be output by decoder
- at current input positon.
-*/
-
-#define Lzma2Dec_GetUnpackExtra(p) ((p)->isExtraMode ? (p)->unpackSize : 0);
-
-
-/* ---------- One Call Interface ---------- */
-
-/*
-finishMode:
- It has meaning only if the decoding reaches output limit (*destLen).
- LZMA_FINISH_ANY - use smallest number of input bytes
- LZMA_FINISH_END - read EndOfStream marker after decoding
-
-Returns:
- SZ_OK
- status:
- LZMA_STATUS_FINISHED_WITH_MARK
- LZMA_STATUS_NOT_FINISHED
- SZ_ERROR_DATA - Data error
- SZ_ERROR_MEM - Memory allocation error
- SZ_ERROR_UNSUPPORTED - Unsupported properties
- SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
-*/
-
-SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
- Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAllocPtr alloc);
-
-EXTERN_C_END
-
-#endif
+/* Lzma2Dec.h -- LZMA2 Decoder
+2018-02-19 : Igor Pavlov : Public domain */
+
+#ifndef __LZMA2_DEC_H
+#define __LZMA2_DEC_H
+
+#include "LzmaDec.h"
+
+EXTERN_C_BEGIN
+
+/* ---------- State Interface ---------- */
+
+typedef struct
+{
+ unsigned state;
+ Byte control;
+ Byte needInitLevel;
+ Byte isExtraMode;
+ Byte _pad_;
+ UInt32 packSize;
+ UInt32 unpackSize;
+ CLzmaDec decoder;
+} CLzma2Dec;
+
+#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder)
+#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc)
+#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc)
+
+SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc);
+SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc);
+void Lzma2Dec_Init(CLzma2Dec *p);
+
+/*
+finishMode:
+ It has meaning only if the decoding reaches output limit (*destLen or dicLimit).
+ LZMA_FINISH_ANY - use smallest number of input bytes
+ LZMA_FINISH_END - read EndOfStream marker after decoding
+
+Returns:
+ SZ_OK
+ status:
+ LZMA_STATUS_FINISHED_WITH_MARK
+ LZMA_STATUS_NOT_FINISHED
+ LZMA_STATUS_NEEDS_MORE_INPUT
+ SZ_ERROR_DATA - Data error
+*/
+
+SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit,
+ const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
+
+SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen,
+ const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
+
+
+/* ---------- LZMA2 block and chunk parsing ---------- */
+
+/*
+Lzma2Dec_Parse() parses compressed data stream up to next independent block or next chunk data.
+It can return LZMA_STATUS_* code or LZMA2_PARSE_STATUS_* code:
+ - LZMA2_PARSE_STATUS_NEW_BLOCK - there is new block, and 1 additional byte (control byte of next block header) was read from input.
+ - LZMA2_PARSE_STATUS_NEW_CHUNK - there is new chunk, and only lzma2 header of new chunk was read.
+ CLzma2Dec::unpackSize contains unpack size of that chunk
+*/
+
+typedef enum
+{
+/*
+ LZMA_STATUS_NOT_SPECIFIED // data error
+ LZMA_STATUS_FINISHED_WITH_MARK
+ LZMA_STATUS_NOT_FINISHED //
+ LZMA_STATUS_NEEDS_MORE_INPUT
+ LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK // unused
+*/
+ LZMA2_PARSE_STATUS_NEW_BLOCK = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK + 1,
+ LZMA2_PARSE_STATUS_NEW_CHUNK
+} ELzma2ParseStatus;
+
+ELzma2ParseStatus Lzma2Dec_Parse(CLzma2Dec *p,
+ SizeT outSize, // output size
+ const Byte *src, SizeT *srcLen,
+ int checkFinishBlock // set (checkFinishBlock = 1), if it must read full input data, if decoder.dicPos reaches blockMax position.
+ );
+
+/*
+LZMA2 parser doesn't decode LZMA chunks, so we must read
+ full input LZMA chunk to decode some part of LZMA chunk.
+
+Lzma2Dec_GetUnpackExtra() returns the value that shows
+ max possible number of output bytes that can be output by decoder
+ at current input positon.
+*/
+
+#define Lzma2Dec_GetUnpackExtra(p) ((p)->isExtraMode ? (p)->unpackSize : 0);
+
+
+/* ---------- One Call Interface ---------- */
+
+/*
+finishMode:
+ It has meaning only if the decoding reaches output limit (*destLen).
+ LZMA_FINISH_ANY - use smallest number of input bytes
+ LZMA_FINISH_END - read EndOfStream marker after decoding
+
+Returns:
+ SZ_OK
+ status:
+ LZMA_STATUS_FINISHED_WITH_MARK
+ LZMA_STATUS_NOT_FINISHED
+ SZ_ERROR_DATA - Data error
+ SZ_ERROR_MEM - Memory allocation error
+ SZ_ERROR_UNSUPPORTED - Unsupported properties
+ SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
+*/
+
+SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
+ Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAllocPtr alloc);
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/Lzma2Enc.c b/contrib/libs/lzmasdk/Lzma2Enc.c
index 5c1ad49312..d541477527 100644
--- a/contrib/libs/lzmasdk/Lzma2Enc.c
+++ b/contrib/libs/lzmasdk/Lzma2Enc.c
@@ -1,803 +1,803 @@
-/* Lzma2Enc.c -- LZMA2 Encoder
-2018-07-04 : Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include <string.h>
-
-/* #define _7ZIP_ST */
-
-#include "Lzma2Enc.h"
-
-#ifndef _7ZIP_ST
-#include "MtCoder.h"
-#else
-#define MTCODER__THREADS_MAX 1
-#endif
-
-#define LZMA2_CONTROL_LZMA (1 << 7)
-#define LZMA2_CONTROL_COPY_NO_RESET 2
-#define LZMA2_CONTROL_COPY_RESET_DIC 1
-#define LZMA2_CONTROL_EOF 0
-
-#define LZMA2_LCLP_MAX 4
-
-#define LZMA2_DIC_SIZE_FROM_PROP(p) (((UInt32)2 | ((p) & 1)) << ((p) / 2 + 11))
-
-#define LZMA2_PACK_SIZE_MAX (1 << 16)
-#define LZMA2_COPY_CHUNK_SIZE LZMA2_PACK_SIZE_MAX
-#define LZMA2_UNPACK_SIZE_MAX (1 << 21)
-#define LZMA2_KEEP_WINDOW_SIZE LZMA2_UNPACK_SIZE_MAX
-
-#define LZMA2_CHUNK_SIZE_COMPRESSED_MAX ((1 << 16) + 16)
-
-
-#define PRF(x) /* x */
-
-
-/* ---------- CLimitedSeqInStream ---------- */
-
-typedef struct
-{
- ISeqInStream vt;
- ISeqInStream *realStream;
- UInt64 limit;
- UInt64 processed;
- int finished;
-} CLimitedSeqInStream;
-
-static void LimitedSeqInStream_Init(CLimitedSeqInStream *p)
-{
- p->limit = (UInt64)(Int64)-1;
- p->processed = 0;
- p->finished = 0;
-}
-
-static SRes LimitedSeqInStream_Read(const ISeqInStream *pp, void *data, size_t *size)
-{
- CLimitedSeqInStream *p = CONTAINER_FROM_VTBL(pp, CLimitedSeqInStream, vt);
- size_t size2 = *size;
- SRes res = SZ_OK;
-
- if (p->limit != (UInt64)(Int64)-1)
- {
- UInt64 rem = p->limit - p->processed;
- if (size2 > rem)
- size2 = (size_t)rem;
- }
- if (size2 != 0)
- {
- res = ISeqInStream_Read(p->realStream, data, &size2);
- p->finished = (size2 == 0 ? 1 : 0);
- p->processed += size2;
- }
- *size = size2;
- return res;
-}
-
-
-/* ---------- CLzma2EncInt ---------- */
-
-typedef struct
-{
- CLzmaEncHandle enc;
- Byte propsAreSet;
- Byte propsByte;
- Byte needInitState;
- Byte needInitProp;
- UInt64 srcPos;
-} CLzma2EncInt;
-
-
-static SRes Lzma2EncInt_InitStream(CLzma2EncInt *p, const CLzma2EncProps *props)
-{
- if (!p->propsAreSet)
- {
- SizeT propsSize = LZMA_PROPS_SIZE;
- Byte propsEncoded[LZMA_PROPS_SIZE];
- RINOK(LzmaEnc_SetProps(p->enc, &props->lzmaProps));
- RINOK(LzmaEnc_WriteProperties(p->enc, propsEncoded, &propsSize));
- p->propsByte = propsEncoded[0];
- p->propsAreSet = True;
- }
- return SZ_OK;
-}
-
-static void Lzma2EncInt_InitBlock(CLzma2EncInt *p)
-{
- p->srcPos = 0;
- p->needInitState = True;
- p->needInitProp = True;
-}
-
-
-SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp, ISeqInStream *inStream, UInt32 keepWindowSize,
- ISzAllocPtr alloc, ISzAllocPtr allocBig);
-SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen,
- UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig);
-SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit,
- Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize);
-const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp);
-void LzmaEnc_Finish(CLzmaEncHandle pp);
-void LzmaEnc_SaveState(CLzmaEncHandle pp);
-void LzmaEnc_RestoreState(CLzmaEncHandle pp);
-
-/*
-UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp);
-*/
-
-static SRes Lzma2EncInt_EncodeSubblock(CLzma2EncInt *p, Byte *outBuf,
- size_t *packSizeRes, ISeqOutStream *outStream)
-{
- size_t packSizeLimit = *packSizeRes;
- size_t packSize = packSizeLimit;
- UInt32 unpackSize = LZMA2_UNPACK_SIZE_MAX;
- unsigned lzHeaderSize = 5 + (p->needInitProp ? 1 : 0);
- BoolInt useCopyBlock;
- SRes res;
-
- *packSizeRes = 0;
- if (packSize < lzHeaderSize)
- return SZ_ERROR_OUTPUT_EOF;
- packSize -= lzHeaderSize;
-
- LzmaEnc_SaveState(p->enc);
- res = LzmaEnc_CodeOneMemBlock(p->enc, p->needInitState,
- outBuf + lzHeaderSize, &packSize, LZMA2_PACK_SIZE_MAX, &unpackSize);
-
- PRF(printf("\npackSize = %7d unpackSize = %7d ", packSize, unpackSize));
-
- if (unpackSize == 0)
- return res;
-
- if (res == SZ_OK)
- useCopyBlock = (packSize + 2 >= unpackSize || packSize > (1 << 16));
- else
- {
- if (res != SZ_ERROR_OUTPUT_EOF)
- return res;
- res = SZ_OK;
- useCopyBlock = True;
- }
-
- if (useCopyBlock)
- {
- size_t destPos = 0;
- PRF(printf("################# COPY "));
-
- while (unpackSize > 0)
- {
- UInt32 u = (unpackSize < LZMA2_COPY_CHUNK_SIZE) ? unpackSize : LZMA2_COPY_CHUNK_SIZE;
- if (packSizeLimit - destPos < u + 3)
- return SZ_ERROR_OUTPUT_EOF;
- outBuf[destPos++] = (Byte)(p->srcPos == 0 ? LZMA2_CONTROL_COPY_RESET_DIC : LZMA2_CONTROL_COPY_NO_RESET);
- outBuf[destPos++] = (Byte)((u - 1) >> 8);
- outBuf[destPos++] = (Byte)(u - 1);
- memcpy(outBuf + destPos, LzmaEnc_GetCurBuf(p->enc) - unpackSize, u);
- unpackSize -= u;
- destPos += u;
- p->srcPos += u;
-
- if (outStream)
- {
- *packSizeRes += destPos;
- if (ISeqOutStream_Write(outStream, outBuf, destPos) != destPos)
- return SZ_ERROR_WRITE;
- destPos = 0;
- }
- else
- *packSizeRes = destPos;
- /* needInitState = True; */
- }
-
- LzmaEnc_RestoreState(p->enc);
- return SZ_OK;
- }
-
- {
- size_t destPos = 0;
- UInt32 u = unpackSize - 1;
- UInt32 pm = (UInt32)(packSize - 1);
- unsigned mode = (p->srcPos == 0) ? 3 : (p->needInitState ? (p->needInitProp ? 2 : 1) : 0);
-
- PRF(printf(" "));
-
- outBuf[destPos++] = (Byte)(LZMA2_CONTROL_LZMA | (mode << 5) | ((u >> 16) & 0x1F));
- outBuf[destPos++] = (Byte)(u >> 8);
- outBuf[destPos++] = (Byte)u;
- outBuf[destPos++] = (Byte)(pm >> 8);
- outBuf[destPos++] = (Byte)pm;
-
- if (p->needInitProp)
- outBuf[destPos++] = p->propsByte;
-
- p->needInitProp = False;
- p->needInitState = False;
- destPos += packSize;
- p->srcPos += unpackSize;
-
- if (outStream)
- if (ISeqOutStream_Write(outStream, outBuf, destPos) != destPos)
- return SZ_ERROR_WRITE;
-
- *packSizeRes = destPos;
- return SZ_OK;
- }
-}
-
-
-/* ---------- Lzma2 Props ---------- */
-
-void Lzma2EncProps_Init(CLzma2EncProps *p)
-{
- LzmaEncProps_Init(&p->lzmaProps);
- p->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO;
- p->numBlockThreads_Reduced = -1;
- p->numBlockThreads_Max = -1;
- p->numTotalThreads = -1;
-}
-
-void Lzma2EncProps_Normalize(CLzma2EncProps *p)
-{
- UInt64 fileSize;
- int t1, t1n, t2, t2r, t3;
- {
- CLzmaEncProps lzmaProps = p->lzmaProps;
- LzmaEncProps_Normalize(&lzmaProps);
- t1n = lzmaProps.numThreads;
- }
-
- t1 = p->lzmaProps.numThreads;
- t2 = p->numBlockThreads_Max;
- t3 = p->numTotalThreads;
-
- if (t2 > MTCODER__THREADS_MAX)
- t2 = MTCODER__THREADS_MAX;
-
- if (t3 <= 0)
- {
- if (t2 <= 0)
- t2 = 1;
- t3 = t1n * t2;
- }
- else if (t2 <= 0)
- {
- t2 = t3 / t1n;
- if (t2 == 0)
- {
- t1 = 1;
- t2 = t3;
- }
- if (t2 > MTCODER__THREADS_MAX)
- t2 = MTCODER__THREADS_MAX;
- }
- else if (t1 <= 0)
- {
- t1 = t3 / t2;
- if (t1 == 0)
- t1 = 1;
- }
- else
- t3 = t1n * t2;
-
- p->lzmaProps.numThreads = t1;
-
- t2r = t2;
-
- fileSize = p->lzmaProps.reduceSize;
-
- if ( p->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID
- && p->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO
- && (p->blockSize < fileSize || fileSize == (UInt64)(Int64)-1))
- p->lzmaProps.reduceSize = p->blockSize;
-
- LzmaEncProps_Normalize(&p->lzmaProps);
-
- p->lzmaProps.reduceSize = fileSize;
-
- t1 = p->lzmaProps.numThreads;
-
- if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID)
- {
- t2r = t2 = 1;
- t3 = t1;
- }
- else if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO && t2 <= 1)
- {
- /* if there is no block multi-threading, we use SOLID block */
- p->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID;
- }
- else
- {
- if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO)
- {
- const UInt32 kMinSize = (UInt32)1 << 20;
- const UInt32 kMaxSize = (UInt32)1 << 28;
- const UInt32 dictSize = p->lzmaProps.dictSize;
- UInt64 blockSize = (UInt64)dictSize << 2;
- if (blockSize < kMinSize) blockSize = kMinSize;
- if (blockSize > kMaxSize) blockSize = kMaxSize;
- if (blockSize < dictSize) blockSize = dictSize;
- blockSize += (kMinSize - 1);
- blockSize &= ~(UInt64)(kMinSize - 1);
- p->blockSize = blockSize;
- }
-
- if (t2 > 1 && fileSize != (UInt64)(Int64)-1)
- {
- UInt64 numBlocks = fileSize / p->blockSize;
- if (numBlocks * p->blockSize != fileSize)
- numBlocks++;
- if (numBlocks < (unsigned)t2)
- {
- t2r = (unsigned)numBlocks;
- if (t2r == 0)
- t2r = 1;
- t3 = t1 * t2r;
- }
- }
- }
-
- p->numBlockThreads_Max = t2;
- p->numBlockThreads_Reduced = t2r;
- p->numTotalThreads = t3;
-}
-
-
-static SRes Progress(ICompressProgress *p, UInt64 inSize, UInt64 outSize)
-{
- return (p && ICompressProgress_Progress(p, inSize, outSize) != SZ_OK) ? SZ_ERROR_PROGRESS : SZ_OK;
-}
-
-
-/* ---------- Lzma2 ---------- */
-
-typedef struct
-{
- Byte propEncoded;
- CLzma2EncProps props;
- UInt64 expectedDataSize;
-
- Byte *tempBufLzma;
-
- ISzAllocPtr alloc;
- ISzAllocPtr allocBig;
-
- CLzma2EncInt coders[MTCODER__THREADS_MAX];
-
- #ifndef _7ZIP_ST
-
- ISeqOutStream *outStream;
- Byte *outBuf;
- size_t outBuf_Rem; /* remainder in outBuf */
-
- size_t outBufSize; /* size of allocated outBufs[i] */
- size_t outBufsDataSizes[MTCODER__BLOCKS_MAX];
- BoolInt mtCoder_WasConstructed;
- CMtCoder mtCoder;
- Byte *outBufs[MTCODER__BLOCKS_MAX];
-
- #endif
-
-} CLzma2Enc;
-
-
-
-CLzma2EncHandle Lzma2Enc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- CLzma2Enc *p = (CLzma2Enc *)ISzAlloc_Alloc(alloc, sizeof(CLzma2Enc));
- if (!p)
- return NULL;
- Lzma2EncProps_Init(&p->props);
- Lzma2EncProps_Normalize(&p->props);
- p->expectedDataSize = (UInt64)(Int64)-1;
- p->tempBufLzma = NULL;
- p->alloc = alloc;
- p->allocBig = allocBig;
- {
- unsigned i;
- for (i = 0; i < MTCODER__THREADS_MAX; i++)
- p->coders[i].enc = NULL;
- }
-
- #ifndef _7ZIP_ST
- p->mtCoder_WasConstructed = False;
- {
- unsigned i;
- for (i = 0; i < MTCODER__BLOCKS_MAX; i++)
- p->outBufs[i] = NULL;
- p->outBufSize = 0;
- }
- #endif
-
- return p;
-}
-
-
-#ifndef _7ZIP_ST
-
-static void Lzma2Enc_FreeOutBufs(CLzma2Enc *p)
-{
- unsigned i;
- for (i = 0; i < MTCODER__BLOCKS_MAX; i++)
- if (p->outBufs[i])
- {
- ISzAlloc_Free(p->alloc, p->outBufs[i]);
- p->outBufs[i] = NULL;
- }
- p->outBufSize = 0;
-}
-
-#endif
-
-
-void Lzma2Enc_Destroy(CLzma2EncHandle pp)
-{
- CLzma2Enc *p = (CLzma2Enc *)pp;
- unsigned i;
- for (i = 0; i < MTCODER__THREADS_MAX; i++)
- {
- CLzma2EncInt *t = &p->coders[i];
- if (t->enc)
- {
- LzmaEnc_Destroy(t->enc, p->alloc, p->allocBig);
- t->enc = NULL;
- }
- }
-
-
- #ifndef _7ZIP_ST
- if (p->mtCoder_WasConstructed)
- {
- MtCoder_Destruct(&p->mtCoder);
- p->mtCoder_WasConstructed = False;
- }
- Lzma2Enc_FreeOutBufs(p);
- #endif
-
- ISzAlloc_Free(p->alloc, p->tempBufLzma);
- p->tempBufLzma = NULL;
-
- ISzAlloc_Free(p->alloc, pp);
-}
-
-
-SRes Lzma2Enc_SetProps(CLzma2EncHandle pp, const CLzma2EncProps *props)
-{
- CLzma2Enc *p = (CLzma2Enc *)pp;
- CLzmaEncProps lzmaProps = props->lzmaProps;
- LzmaEncProps_Normalize(&lzmaProps);
- if (lzmaProps.lc + lzmaProps.lp > LZMA2_LCLP_MAX)
- return SZ_ERROR_PARAM;
- p->props = *props;
- Lzma2EncProps_Normalize(&p->props);
- return SZ_OK;
-}
-
-
-void Lzma2Enc_SetDataSize(CLzmaEncHandle pp, UInt64 expectedDataSiize)
-{
- CLzma2Enc *p = (CLzma2Enc *)pp;
- p->expectedDataSize = expectedDataSiize;
-}
-
-
-Byte Lzma2Enc_WriteProperties(CLzma2EncHandle pp)
-{
- CLzma2Enc *p = (CLzma2Enc *)pp;
- unsigned i;
- UInt32 dicSize = LzmaEncProps_GetDictSize(&p->props.lzmaProps);
- for (i = 0; i < 40; i++)
- if (dicSize <= LZMA2_DIC_SIZE_FROM_PROP(i))
- break;
- return (Byte)i;
-}
-
-
-static SRes Lzma2Enc_EncodeMt1(
- CLzma2Enc *me,
- CLzma2EncInt *p,
- ISeqOutStream *outStream,
- Byte *outBuf, size_t *outBufSize,
- ISeqInStream *inStream,
- const Byte *inData, size_t inDataSize,
- int finished,
- ICompressProgress *progress)
-{
- UInt64 unpackTotal = 0;
- UInt64 packTotal = 0;
- size_t outLim = 0;
- CLimitedSeqInStream limitedInStream;
-
- if (outBuf)
- {
- outLim = *outBufSize;
- *outBufSize = 0;
- }
-
- if (!p->enc)
- {
- p->propsAreSet = False;
- p->enc = LzmaEnc_Create(me->alloc);
- if (!p->enc)
- return SZ_ERROR_MEM;
- }
-
- limitedInStream.realStream = inStream;
- if (inStream)
- {
- limitedInStream.vt.Read = LimitedSeqInStream_Read;
- }
-
- if (!outBuf)
- {
- // outStream version works only in one thread. So we use CLzma2Enc::tempBufLzma
- if (!me->tempBufLzma)
- {
- me->tempBufLzma = (Byte *)ISzAlloc_Alloc(me->alloc, LZMA2_CHUNK_SIZE_COMPRESSED_MAX);
- if (!me->tempBufLzma)
- return SZ_ERROR_MEM;
- }
- }
-
- RINOK(Lzma2EncInt_InitStream(p, &me->props));
-
- for (;;)
- {
- SRes res = SZ_OK;
- size_t inSizeCur = 0;
-
- Lzma2EncInt_InitBlock(p);
-
- LimitedSeqInStream_Init(&limitedInStream);
- limitedInStream.limit = me->props.blockSize;
-
- if (inStream)
- {
- UInt64 expected = (UInt64)(Int64)-1;
- // inStream version works only in one thread. So we use CLzma2Enc::expectedDataSize
- if (me->expectedDataSize != (UInt64)(Int64)-1
- && me->expectedDataSize >= unpackTotal)
- expected = me->expectedDataSize - unpackTotal;
- if (me->props.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID
- && expected > me->props.blockSize)
- expected = (size_t)me->props.blockSize;
-
- LzmaEnc_SetDataSize(p->enc, expected);
-
- RINOK(LzmaEnc_PrepareForLzma2(p->enc,
- &limitedInStream.vt,
- LZMA2_KEEP_WINDOW_SIZE,
- me->alloc,
- me->allocBig));
- }
- else
- {
- inSizeCur = inDataSize - (size_t)unpackTotal;
- if (me->props.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID
- && inSizeCur > me->props.blockSize)
- inSizeCur = (size_t)me->props.blockSize;
-
- // LzmaEnc_SetDataSize(p->enc, inSizeCur);
-
- RINOK(LzmaEnc_MemPrepare(p->enc,
- inData + (size_t)unpackTotal, inSizeCur,
- LZMA2_KEEP_WINDOW_SIZE,
- me->alloc,
- me->allocBig));
- }
-
- for (;;)
- {
- size_t packSize = LZMA2_CHUNK_SIZE_COMPRESSED_MAX;
- if (outBuf)
- packSize = outLim - (size_t)packTotal;
-
- res = Lzma2EncInt_EncodeSubblock(p,
- outBuf ? outBuf + (size_t)packTotal : me->tempBufLzma, &packSize,
- outBuf ? NULL : outStream);
-
- if (res != SZ_OK)
- break;
-
- packTotal += packSize;
- if (outBuf)
- *outBufSize = (size_t)packTotal;
-
- res = Progress(progress, unpackTotal + p->srcPos, packTotal);
- if (res != SZ_OK)
- break;
-
- /*
- if (LzmaEnc_GetNumAvailableBytes(p->enc) == 0)
- break;
- */
-
- if (packSize == 0)
- break;
- }
-
- LzmaEnc_Finish(p->enc);
-
- unpackTotal += p->srcPos;
-
- RINOK(res);
-
- if (p->srcPos != (inStream ? limitedInStream.processed : inSizeCur))
- return SZ_ERROR_FAIL;
-
- if (inStream ? limitedInStream.finished : (unpackTotal == inDataSize))
- {
- if (finished)
- {
- if (outBuf)
- {
- size_t destPos = *outBufSize;
- if (destPos >= outLim)
- return SZ_ERROR_OUTPUT_EOF;
- outBuf[destPos] = 0;
- *outBufSize = destPos + 1;
- }
- else
- {
- Byte b = 0;
- if (ISeqOutStream_Write(outStream, &b, 1) != 1)
- return SZ_ERROR_WRITE;
- }
- }
- return SZ_OK;
- }
- }
-}
-
-
-
-#ifndef _7ZIP_ST
-
-static SRes Lzma2Enc_MtCallback_Code(void *pp, unsigned coderIndex, unsigned outBufIndex,
- const Byte *src, size_t srcSize, int finished)
-{
- CLzma2Enc *me = (CLzma2Enc *)pp;
- size_t destSize = me->outBufSize;
- SRes res;
- CMtProgressThunk progressThunk;
-
- Byte *dest = me->outBufs[outBufIndex];
-
- me->outBufsDataSizes[outBufIndex] = 0;
-
- if (!dest)
- {
- dest = (Byte *)ISzAlloc_Alloc(me->alloc, me->outBufSize);
- if (!dest)
- return SZ_ERROR_MEM;
- me->outBufs[outBufIndex] = dest;
- }
-
- MtProgressThunk_CreateVTable(&progressThunk);
- progressThunk.mtProgress = &me->mtCoder.mtProgress;
- progressThunk.inSize = 0;
- progressThunk.outSize = 0;
-
- res = Lzma2Enc_EncodeMt1(me,
- &me->coders[coderIndex],
- NULL, dest, &destSize,
- NULL, src, srcSize,
- finished,
- &progressThunk.vt);
-
- me->outBufsDataSizes[outBufIndex] = destSize;
-
- return res;
-}
-
-
-static SRes Lzma2Enc_MtCallback_Write(void *pp, unsigned outBufIndex)
-{
- CLzma2Enc *me = (CLzma2Enc *)pp;
- size_t size = me->outBufsDataSizes[outBufIndex];
- const Byte *data = me->outBufs[outBufIndex];
-
- if (me->outStream)
- return ISeqOutStream_Write(me->outStream, data, size) == size ? SZ_OK : SZ_ERROR_WRITE;
-
- if (size > me->outBuf_Rem)
- return SZ_ERROR_OUTPUT_EOF;
- memcpy(me->outBuf, data, size);
- me->outBuf_Rem -= size;
- me->outBuf += size;
- return SZ_OK;
-}
-
-#endif
-
-
-
-SRes Lzma2Enc_Encode2(CLzma2EncHandle pp,
- ISeqOutStream *outStream,
- Byte *outBuf, size_t *outBufSize,
- ISeqInStream *inStream,
- const Byte *inData, size_t inDataSize,
- ICompressProgress *progress)
-{
- CLzma2Enc *p = (CLzma2Enc *)pp;
-
- if (inStream && inData)
- return SZ_ERROR_PARAM;
-
- if (outStream && outBuf)
- return SZ_ERROR_PARAM;
-
- {
- unsigned i;
- for (i = 0; i < MTCODER__THREADS_MAX; i++)
- p->coders[i].propsAreSet = False;
- }
-
- #ifndef _7ZIP_ST
-
- if (p->props.numBlockThreads_Reduced > 1)
- {
- IMtCoderCallback2 vt;
-
- if (!p->mtCoder_WasConstructed)
- {
- p->mtCoder_WasConstructed = True;
- MtCoder_Construct(&p->mtCoder);
- }
-
- vt.Code = Lzma2Enc_MtCallback_Code;
- vt.Write = Lzma2Enc_MtCallback_Write;
-
- p->outStream = outStream;
- p->outBuf = NULL;
- p->outBuf_Rem = 0;
- if (!outStream)
- {
- p->outBuf = outBuf;
- p->outBuf_Rem = *outBufSize;
- *outBufSize = 0;
- }
-
- p->mtCoder.allocBig = p->allocBig;
- p->mtCoder.progress = progress;
- p->mtCoder.inStream = inStream;
- p->mtCoder.inData = inData;
- p->mtCoder.inDataSize = inDataSize;
- p->mtCoder.mtCallback = &vt;
- p->mtCoder.mtCallbackObject = p;
-
- p->mtCoder.blockSize = (size_t)p->props.blockSize;
- if (p->mtCoder.blockSize != p->props.blockSize)
- return SZ_ERROR_PARAM; /* SZ_ERROR_MEM */
-
- {
- size_t destBlockSize = p->mtCoder.blockSize + (p->mtCoder.blockSize >> 10) + 16;
- if (destBlockSize < p->mtCoder.blockSize)
- return SZ_ERROR_PARAM;
- if (p->outBufSize != destBlockSize)
- Lzma2Enc_FreeOutBufs(p);
- p->outBufSize = destBlockSize;
- }
-
- p->mtCoder.numThreadsMax = p->props.numBlockThreads_Max;
- p->mtCoder.expectedDataSize = p->expectedDataSize;
-
- {
- SRes res = MtCoder_Code(&p->mtCoder);
- if (!outStream)
- *outBufSize = p->outBuf - outBuf;
- return res;
- }
- }
-
- #endif
-
-
- return Lzma2Enc_EncodeMt1(p,
- &p->coders[0],
- outStream, outBuf, outBufSize,
- inStream, inData, inDataSize,
- True, /* finished */
- progress);
-}
+/* Lzma2Enc.c -- LZMA2 Encoder
+2018-07-04 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include <string.h>
+
+/* #define _7ZIP_ST */
+
+#include "Lzma2Enc.h"
+
+#ifndef _7ZIP_ST
+#include "MtCoder.h"
+#else
+#define MTCODER__THREADS_MAX 1
+#endif
+
+#define LZMA2_CONTROL_LZMA (1 << 7)
+#define LZMA2_CONTROL_COPY_NO_RESET 2
+#define LZMA2_CONTROL_COPY_RESET_DIC 1
+#define LZMA2_CONTROL_EOF 0
+
+#define LZMA2_LCLP_MAX 4
+
+#define LZMA2_DIC_SIZE_FROM_PROP(p) (((UInt32)2 | ((p) & 1)) << ((p) / 2 + 11))
+
+#define LZMA2_PACK_SIZE_MAX (1 << 16)
+#define LZMA2_COPY_CHUNK_SIZE LZMA2_PACK_SIZE_MAX
+#define LZMA2_UNPACK_SIZE_MAX (1 << 21)
+#define LZMA2_KEEP_WINDOW_SIZE LZMA2_UNPACK_SIZE_MAX
+
+#define LZMA2_CHUNK_SIZE_COMPRESSED_MAX ((1 << 16) + 16)
+
+
+#define PRF(x) /* x */
+
+
+/* ---------- CLimitedSeqInStream ---------- */
+
+typedef struct
+{
+ ISeqInStream vt;
+ ISeqInStream *realStream;
+ UInt64 limit;
+ UInt64 processed;
+ int finished;
+} CLimitedSeqInStream;
+
+static void LimitedSeqInStream_Init(CLimitedSeqInStream *p)
+{
+ p->limit = (UInt64)(Int64)-1;
+ p->processed = 0;
+ p->finished = 0;
+}
+
+static SRes LimitedSeqInStream_Read(const ISeqInStream *pp, void *data, size_t *size)
+{
+ CLimitedSeqInStream *p = CONTAINER_FROM_VTBL(pp, CLimitedSeqInStream, vt);
+ size_t size2 = *size;
+ SRes res = SZ_OK;
+
+ if (p->limit != (UInt64)(Int64)-1)
+ {
+ UInt64 rem = p->limit - p->processed;
+ if (size2 > rem)
+ size2 = (size_t)rem;
+ }
+ if (size2 != 0)
+ {
+ res = ISeqInStream_Read(p->realStream, data, &size2);
+ p->finished = (size2 == 0 ? 1 : 0);
+ p->processed += size2;
+ }
+ *size = size2;
+ return res;
+}
+
+
+/* ---------- CLzma2EncInt ---------- */
+
+typedef struct
+{
+ CLzmaEncHandle enc;
+ Byte propsAreSet;
+ Byte propsByte;
+ Byte needInitState;
+ Byte needInitProp;
+ UInt64 srcPos;
+} CLzma2EncInt;
+
+
+static SRes Lzma2EncInt_InitStream(CLzma2EncInt *p, const CLzma2EncProps *props)
+{
+ if (!p->propsAreSet)
+ {
+ SizeT propsSize = LZMA_PROPS_SIZE;
+ Byte propsEncoded[LZMA_PROPS_SIZE];
+ RINOK(LzmaEnc_SetProps(p->enc, &props->lzmaProps));
+ RINOK(LzmaEnc_WriteProperties(p->enc, propsEncoded, &propsSize));
+ p->propsByte = propsEncoded[0];
+ p->propsAreSet = True;
+ }
+ return SZ_OK;
+}
+
+static void Lzma2EncInt_InitBlock(CLzma2EncInt *p)
+{
+ p->srcPos = 0;
+ p->needInitState = True;
+ p->needInitProp = True;
+}
+
+
+SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp, ISeqInStream *inStream, UInt32 keepWindowSize,
+ ISzAllocPtr alloc, ISzAllocPtr allocBig);
+SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen,
+ UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig);
+SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit,
+ Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize);
+const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp);
+void LzmaEnc_Finish(CLzmaEncHandle pp);
+void LzmaEnc_SaveState(CLzmaEncHandle pp);
+void LzmaEnc_RestoreState(CLzmaEncHandle pp);
+
+/*
+UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp);
+*/
+
+static SRes Lzma2EncInt_EncodeSubblock(CLzma2EncInt *p, Byte *outBuf,
+ size_t *packSizeRes, ISeqOutStream *outStream)
+{
+ size_t packSizeLimit = *packSizeRes;
+ size_t packSize = packSizeLimit;
+ UInt32 unpackSize = LZMA2_UNPACK_SIZE_MAX;
+ unsigned lzHeaderSize = 5 + (p->needInitProp ? 1 : 0);
+ BoolInt useCopyBlock;
+ SRes res;
+
+ *packSizeRes = 0;
+ if (packSize < lzHeaderSize)
+ return SZ_ERROR_OUTPUT_EOF;
+ packSize -= lzHeaderSize;
+
+ LzmaEnc_SaveState(p->enc);
+ res = LzmaEnc_CodeOneMemBlock(p->enc, p->needInitState,
+ outBuf + lzHeaderSize, &packSize, LZMA2_PACK_SIZE_MAX, &unpackSize);
+
+ PRF(printf("\npackSize = %7d unpackSize = %7d ", packSize, unpackSize));
+
+ if (unpackSize == 0)
+ return res;
+
+ if (res == SZ_OK)
+ useCopyBlock = (packSize + 2 >= unpackSize || packSize > (1 << 16));
+ else
+ {
+ if (res != SZ_ERROR_OUTPUT_EOF)
+ return res;
+ res = SZ_OK;
+ useCopyBlock = True;
+ }
+
+ if (useCopyBlock)
+ {
+ size_t destPos = 0;
+ PRF(printf("################# COPY "));
+
+ while (unpackSize > 0)
+ {
+ UInt32 u = (unpackSize < LZMA2_COPY_CHUNK_SIZE) ? unpackSize : LZMA2_COPY_CHUNK_SIZE;
+ if (packSizeLimit - destPos < u + 3)
+ return SZ_ERROR_OUTPUT_EOF;
+ outBuf[destPos++] = (Byte)(p->srcPos == 0 ? LZMA2_CONTROL_COPY_RESET_DIC : LZMA2_CONTROL_COPY_NO_RESET);
+ outBuf[destPos++] = (Byte)((u - 1) >> 8);
+ outBuf[destPos++] = (Byte)(u - 1);
+ memcpy(outBuf + destPos, LzmaEnc_GetCurBuf(p->enc) - unpackSize, u);
+ unpackSize -= u;
+ destPos += u;
+ p->srcPos += u;
+
+ if (outStream)
+ {
+ *packSizeRes += destPos;
+ if (ISeqOutStream_Write(outStream, outBuf, destPos) != destPos)
+ return SZ_ERROR_WRITE;
+ destPos = 0;
+ }
+ else
+ *packSizeRes = destPos;
+ /* needInitState = True; */
+ }
+
+ LzmaEnc_RestoreState(p->enc);
+ return SZ_OK;
+ }
+
+ {
+ size_t destPos = 0;
+ UInt32 u = unpackSize - 1;
+ UInt32 pm = (UInt32)(packSize - 1);
+ unsigned mode = (p->srcPos == 0) ? 3 : (p->needInitState ? (p->needInitProp ? 2 : 1) : 0);
+
+ PRF(printf(" "));
+
+ outBuf[destPos++] = (Byte)(LZMA2_CONTROL_LZMA | (mode << 5) | ((u >> 16) & 0x1F));
+ outBuf[destPos++] = (Byte)(u >> 8);
+ outBuf[destPos++] = (Byte)u;
+ outBuf[destPos++] = (Byte)(pm >> 8);
+ outBuf[destPos++] = (Byte)pm;
+
+ if (p->needInitProp)
+ outBuf[destPos++] = p->propsByte;
+
+ p->needInitProp = False;
+ p->needInitState = False;
+ destPos += packSize;
+ p->srcPos += unpackSize;
+
+ if (outStream)
+ if (ISeqOutStream_Write(outStream, outBuf, destPos) != destPos)
+ return SZ_ERROR_WRITE;
+
+ *packSizeRes = destPos;
+ return SZ_OK;
+ }
+}
+
+
+/* ---------- Lzma2 Props ---------- */
+
+void Lzma2EncProps_Init(CLzma2EncProps *p)
+{
+ LzmaEncProps_Init(&p->lzmaProps);
+ p->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO;
+ p->numBlockThreads_Reduced = -1;
+ p->numBlockThreads_Max = -1;
+ p->numTotalThreads = -1;
+}
+
+void Lzma2EncProps_Normalize(CLzma2EncProps *p)
+{
+ UInt64 fileSize;
+ int t1, t1n, t2, t2r, t3;
+ {
+ CLzmaEncProps lzmaProps = p->lzmaProps;
+ LzmaEncProps_Normalize(&lzmaProps);
+ t1n = lzmaProps.numThreads;
+ }
+
+ t1 = p->lzmaProps.numThreads;
+ t2 = p->numBlockThreads_Max;
+ t3 = p->numTotalThreads;
+
+ if (t2 > MTCODER__THREADS_MAX)
+ t2 = MTCODER__THREADS_MAX;
+
+ if (t3 <= 0)
+ {
+ if (t2 <= 0)
+ t2 = 1;
+ t3 = t1n * t2;
+ }
+ else if (t2 <= 0)
+ {
+ t2 = t3 / t1n;
+ if (t2 == 0)
+ {
+ t1 = 1;
+ t2 = t3;
+ }
+ if (t2 > MTCODER__THREADS_MAX)
+ t2 = MTCODER__THREADS_MAX;
+ }
+ else if (t1 <= 0)
+ {
+ t1 = t3 / t2;
+ if (t1 == 0)
+ t1 = 1;
+ }
+ else
+ t3 = t1n * t2;
+
+ p->lzmaProps.numThreads = t1;
+
+ t2r = t2;
+
+ fileSize = p->lzmaProps.reduceSize;
+
+ if ( p->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID
+ && p->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO
+ && (p->blockSize < fileSize || fileSize == (UInt64)(Int64)-1))
+ p->lzmaProps.reduceSize = p->blockSize;
+
+ LzmaEncProps_Normalize(&p->lzmaProps);
+
+ p->lzmaProps.reduceSize = fileSize;
+
+ t1 = p->lzmaProps.numThreads;
+
+ if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID)
+ {
+ t2r = t2 = 1;
+ t3 = t1;
+ }
+ else if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO && t2 <= 1)
+ {
+ /* if there is no block multi-threading, we use SOLID block */
+ p->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID;
+ }
+ else
+ {
+ if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO)
+ {
+ const UInt32 kMinSize = (UInt32)1 << 20;
+ const UInt32 kMaxSize = (UInt32)1 << 28;
+ const UInt32 dictSize = p->lzmaProps.dictSize;
+ UInt64 blockSize = (UInt64)dictSize << 2;
+ if (blockSize < kMinSize) blockSize = kMinSize;
+ if (blockSize > kMaxSize) blockSize = kMaxSize;
+ if (blockSize < dictSize) blockSize = dictSize;
+ blockSize += (kMinSize - 1);
+ blockSize &= ~(UInt64)(kMinSize - 1);
+ p->blockSize = blockSize;
+ }
+
+ if (t2 > 1 && fileSize != (UInt64)(Int64)-1)
+ {
+ UInt64 numBlocks = fileSize / p->blockSize;
+ if (numBlocks * p->blockSize != fileSize)
+ numBlocks++;
+ if (numBlocks < (unsigned)t2)
+ {
+ t2r = (unsigned)numBlocks;
+ if (t2r == 0)
+ t2r = 1;
+ t3 = t1 * t2r;
+ }
+ }
+ }
+
+ p->numBlockThreads_Max = t2;
+ p->numBlockThreads_Reduced = t2r;
+ p->numTotalThreads = t3;
+}
+
+
+static SRes Progress(ICompressProgress *p, UInt64 inSize, UInt64 outSize)
+{
+ return (p && ICompressProgress_Progress(p, inSize, outSize) != SZ_OK) ? SZ_ERROR_PROGRESS : SZ_OK;
+}
+
+
+/* ---------- Lzma2 ---------- */
+
+typedef struct
+{
+ Byte propEncoded;
+ CLzma2EncProps props;
+ UInt64 expectedDataSize;
+
+ Byte *tempBufLzma;
+
+ ISzAllocPtr alloc;
+ ISzAllocPtr allocBig;
+
+ CLzma2EncInt coders[MTCODER__THREADS_MAX];
+
+ #ifndef _7ZIP_ST
+
+ ISeqOutStream *outStream;
+ Byte *outBuf;
+ size_t outBuf_Rem; /* remainder in outBuf */
+
+ size_t outBufSize; /* size of allocated outBufs[i] */
+ size_t outBufsDataSizes[MTCODER__BLOCKS_MAX];
+ BoolInt mtCoder_WasConstructed;
+ CMtCoder mtCoder;
+ Byte *outBufs[MTCODER__BLOCKS_MAX];
+
+ #endif
+
+} CLzma2Enc;
+
+
+
+CLzma2EncHandle Lzma2Enc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ CLzma2Enc *p = (CLzma2Enc *)ISzAlloc_Alloc(alloc, sizeof(CLzma2Enc));
+ if (!p)
+ return NULL;
+ Lzma2EncProps_Init(&p->props);
+ Lzma2EncProps_Normalize(&p->props);
+ p->expectedDataSize = (UInt64)(Int64)-1;
+ p->tempBufLzma = NULL;
+ p->alloc = alloc;
+ p->allocBig = allocBig;
+ {
+ unsigned i;
+ for (i = 0; i < MTCODER__THREADS_MAX; i++)
+ p->coders[i].enc = NULL;
+ }
+
+ #ifndef _7ZIP_ST
+ p->mtCoder_WasConstructed = False;
+ {
+ unsigned i;
+ for (i = 0; i < MTCODER__BLOCKS_MAX; i++)
+ p->outBufs[i] = NULL;
+ p->outBufSize = 0;
+ }
+ #endif
+
+ return p;
+}
+
+
+#ifndef _7ZIP_ST
+
+static void Lzma2Enc_FreeOutBufs(CLzma2Enc *p)
+{
+ unsigned i;
+ for (i = 0; i < MTCODER__BLOCKS_MAX; i++)
+ if (p->outBufs[i])
+ {
+ ISzAlloc_Free(p->alloc, p->outBufs[i]);
+ p->outBufs[i] = NULL;
+ }
+ p->outBufSize = 0;
+}
+
+#endif
+
+
+void Lzma2Enc_Destroy(CLzma2EncHandle pp)
+{
+ CLzma2Enc *p = (CLzma2Enc *)pp;
+ unsigned i;
+ for (i = 0; i < MTCODER__THREADS_MAX; i++)
+ {
+ CLzma2EncInt *t = &p->coders[i];
+ if (t->enc)
+ {
+ LzmaEnc_Destroy(t->enc, p->alloc, p->allocBig);
+ t->enc = NULL;
+ }
+ }
+
+
+ #ifndef _7ZIP_ST
+ if (p->mtCoder_WasConstructed)
+ {
+ MtCoder_Destruct(&p->mtCoder);
+ p->mtCoder_WasConstructed = False;
+ }
+ Lzma2Enc_FreeOutBufs(p);
+ #endif
+
+ ISzAlloc_Free(p->alloc, p->tempBufLzma);
+ p->tempBufLzma = NULL;
+
+ ISzAlloc_Free(p->alloc, pp);
+}
+
+
+SRes Lzma2Enc_SetProps(CLzma2EncHandle pp, const CLzma2EncProps *props)
+{
+ CLzma2Enc *p = (CLzma2Enc *)pp;
+ CLzmaEncProps lzmaProps = props->lzmaProps;
+ LzmaEncProps_Normalize(&lzmaProps);
+ if (lzmaProps.lc + lzmaProps.lp > LZMA2_LCLP_MAX)
+ return SZ_ERROR_PARAM;
+ p->props = *props;
+ Lzma2EncProps_Normalize(&p->props);
+ return SZ_OK;
+}
+
+
+void Lzma2Enc_SetDataSize(CLzmaEncHandle pp, UInt64 expectedDataSiize)
+{
+ CLzma2Enc *p = (CLzma2Enc *)pp;
+ p->expectedDataSize = expectedDataSiize;
+}
+
+
+Byte Lzma2Enc_WriteProperties(CLzma2EncHandle pp)
+{
+ CLzma2Enc *p = (CLzma2Enc *)pp;
+ unsigned i;
+ UInt32 dicSize = LzmaEncProps_GetDictSize(&p->props.lzmaProps);
+ for (i = 0; i < 40; i++)
+ if (dicSize <= LZMA2_DIC_SIZE_FROM_PROP(i))
+ break;
+ return (Byte)i;
+}
+
+
+static SRes Lzma2Enc_EncodeMt1(
+ CLzma2Enc *me,
+ CLzma2EncInt *p,
+ ISeqOutStream *outStream,
+ Byte *outBuf, size_t *outBufSize,
+ ISeqInStream *inStream,
+ const Byte *inData, size_t inDataSize,
+ int finished,
+ ICompressProgress *progress)
+{
+ UInt64 unpackTotal = 0;
+ UInt64 packTotal = 0;
+ size_t outLim = 0;
+ CLimitedSeqInStream limitedInStream;
+
+ if (outBuf)
+ {
+ outLim = *outBufSize;
+ *outBufSize = 0;
+ }
+
+ if (!p->enc)
+ {
+ p->propsAreSet = False;
+ p->enc = LzmaEnc_Create(me->alloc);
+ if (!p->enc)
+ return SZ_ERROR_MEM;
+ }
+
+ limitedInStream.realStream = inStream;
+ if (inStream)
+ {
+ limitedInStream.vt.Read = LimitedSeqInStream_Read;
+ }
+
+ if (!outBuf)
+ {
+ // outStream version works only in one thread. So we use CLzma2Enc::tempBufLzma
+ if (!me->tempBufLzma)
+ {
+ me->tempBufLzma = (Byte *)ISzAlloc_Alloc(me->alloc, LZMA2_CHUNK_SIZE_COMPRESSED_MAX);
+ if (!me->tempBufLzma)
+ return SZ_ERROR_MEM;
+ }
+ }
+
+ RINOK(Lzma2EncInt_InitStream(p, &me->props));
+
+ for (;;)
+ {
+ SRes res = SZ_OK;
+ size_t inSizeCur = 0;
+
+ Lzma2EncInt_InitBlock(p);
+
+ LimitedSeqInStream_Init(&limitedInStream);
+ limitedInStream.limit = me->props.blockSize;
+
+ if (inStream)
+ {
+ UInt64 expected = (UInt64)(Int64)-1;
+ // inStream version works only in one thread. So we use CLzma2Enc::expectedDataSize
+ if (me->expectedDataSize != (UInt64)(Int64)-1
+ && me->expectedDataSize >= unpackTotal)
+ expected = me->expectedDataSize - unpackTotal;
+ if (me->props.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID
+ && expected > me->props.blockSize)
+ expected = (size_t)me->props.blockSize;
+
+ LzmaEnc_SetDataSize(p->enc, expected);
+
+ RINOK(LzmaEnc_PrepareForLzma2(p->enc,
+ &limitedInStream.vt,
+ LZMA2_KEEP_WINDOW_SIZE,
+ me->alloc,
+ me->allocBig));
+ }
+ else
+ {
+ inSizeCur = inDataSize - (size_t)unpackTotal;
+ if (me->props.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID
+ && inSizeCur > me->props.blockSize)
+ inSizeCur = (size_t)me->props.blockSize;
+
+ // LzmaEnc_SetDataSize(p->enc, inSizeCur);
+
+ RINOK(LzmaEnc_MemPrepare(p->enc,
+ inData + (size_t)unpackTotal, inSizeCur,
+ LZMA2_KEEP_WINDOW_SIZE,
+ me->alloc,
+ me->allocBig));
+ }
+
+ for (;;)
+ {
+ size_t packSize = LZMA2_CHUNK_SIZE_COMPRESSED_MAX;
+ if (outBuf)
+ packSize = outLim - (size_t)packTotal;
+
+ res = Lzma2EncInt_EncodeSubblock(p,
+ outBuf ? outBuf + (size_t)packTotal : me->tempBufLzma, &packSize,
+ outBuf ? NULL : outStream);
+
+ if (res != SZ_OK)
+ break;
+
+ packTotal += packSize;
+ if (outBuf)
+ *outBufSize = (size_t)packTotal;
+
+ res = Progress(progress, unpackTotal + p->srcPos, packTotal);
+ if (res != SZ_OK)
+ break;
+
+ /*
+ if (LzmaEnc_GetNumAvailableBytes(p->enc) == 0)
+ break;
+ */
+
+ if (packSize == 0)
+ break;
+ }
+
+ LzmaEnc_Finish(p->enc);
+
+ unpackTotal += p->srcPos;
+
+ RINOK(res);
+
+ if (p->srcPos != (inStream ? limitedInStream.processed : inSizeCur))
+ return SZ_ERROR_FAIL;
+
+ if (inStream ? limitedInStream.finished : (unpackTotal == inDataSize))
+ {
+ if (finished)
+ {
+ if (outBuf)
+ {
+ size_t destPos = *outBufSize;
+ if (destPos >= outLim)
+ return SZ_ERROR_OUTPUT_EOF;
+ outBuf[destPos] = 0;
+ *outBufSize = destPos + 1;
+ }
+ else
+ {
+ Byte b = 0;
+ if (ISeqOutStream_Write(outStream, &b, 1) != 1)
+ return SZ_ERROR_WRITE;
+ }
+ }
+ return SZ_OK;
+ }
+ }
+}
+
+
+
+#ifndef _7ZIP_ST
+
+static SRes Lzma2Enc_MtCallback_Code(void *pp, unsigned coderIndex, unsigned outBufIndex,
+ const Byte *src, size_t srcSize, int finished)
+{
+ CLzma2Enc *me = (CLzma2Enc *)pp;
+ size_t destSize = me->outBufSize;
+ SRes res;
+ CMtProgressThunk progressThunk;
+
+ Byte *dest = me->outBufs[outBufIndex];
+
+ me->outBufsDataSizes[outBufIndex] = 0;
+
+ if (!dest)
+ {
+ dest = (Byte *)ISzAlloc_Alloc(me->alloc, me->outBufSize);
+ if (!dest)
+ return SZ_ERROR_MEM;
+ me->outBufs[outBufIndex] = dest;
+ }
+
+ MtProgressThunk_CreateVTable(&progressThunk);
+ progressThunk.mtProgress = &me->mtCoder.mtProgress;
+ progressThunk.inSize = 0;
+ progressThunk.outSize = 0;
+
+ res = Lzma2Enc_EncodeMt1(me,
+ &me->coders[coderIndex],
+ NULL, dest, &destSize,
+ NULL, src, srcSize,
+ finished,
+ &progressThunk.vt);
+
+ me->outBufsDataSizes[outBufIndex] = destSize;
+
+ return res;
+}
+
+
+static SRes Lzma2Enc_MtCallback_Write(void *pp, unsigned outBufIndex)
+{
+ CLzma2Enc *me = (CLzma2Enc *)pp;
+ size_t size = me->outBufsDataSizes[outBufIndex];
+ const Byte *data = me->outBufs[outBufIndex];
+
+ if (me->outStream)
+ return ISeqOutStream_Write(me->outStream, data, size) == size ? SZ_OK : SZ_ERROR_WRITE;
+
+ if (size > me->outBuf_Rem)
+ return SZ_ERROR_OUTPUT_EOF;
+ memcpy(me->outBuf, data, size);
+ me->outBuf_Rem -= size;
+ me->outBuf += size;
+ return SZ_OK;
+}
+
+#endif
+
+
+
+SRes Lzma2Enc_Encode2(CLzma2EncHandle pp,
+ ISeqOutStream *outStream,
+ Byte *outBuf, size_t *outBufSize,
+ ISeqInStream *inStream,
+ const Byte *inData, size_t inDataSize,
+ ICompressProgress *progress)
+{
+ CLzma2Enc *p = (CLzma2Enc *)pp;
+
+ if (inStream && inData)
+ return SZ_ERROR_PARAM;
+
+ if (outStream && outBuf)
+ return SZ_ERROR_PARAM;
+
+ {
+ unsigned i;
+ for (i = 0; i < MTCODER__THREADS_MAX; i++)
+ p->coders[i].propsAreSet = False;
+ }
+
+ #ifndef _7ZIP_ST
+
+ if (p->props.numBlockThreads_Reduced > 1)
+ {
+ IMtCoderCallback2 vt;
+
+ if (!p->mtCoder_WasConstructed)
+ {
+ p->mtCoder_WasConstructed = True;
+ MtCoder_Construct(&p->mtCoder);
+ }
+
+ vt.Code = Lzma2Enc_MtCallback_Code;
+ vt.Write = Lzma2Enc_MtCallback_Write;
+
+ p->outStream = outStream;
+ p->outBuf = NULL;
+ p->outBuf_Rem = 0;
+ if (!outStream)
+ {
+ p->outBuf = outBuf;
+ p->outBuf_Rem = *outBufSize;
+ *outBufSize = 0;
+ }
+
+ p->mtCoder.allocBig = p->allocBig;
+ p->mtCoder.progress = progress;
+ p->mtCoder.inStream = inStream;
+ p->mtCoder.inData = inData;
+ p->mtCoder.inDataSize = inDataSize;
+ p->mtCoder.mtCallback = &vt;
+ p->mtCoder.mtCallbackObject = p;
+
+ p->mtCoder.blockSize = (size_t)p->props.blockSize;
+ if (p->mtCoder.blockSize != p->props.blockSize)
+ return SZ_ERROR_PARAM; /* SZ_ERROR_MEM */
+
+ {
+ size_t destBlockSize = p->mtCoder.blockSize + (p->mtCoder.blockSize >> 10) + 16;
+ if (destBlockSize < p->mtCoder.blockSize)
+ return SZ_ERROR_PARAM;
+ if (p->outBufSize != destBlockSize)
+ Lzma2Enc_FreeOutBufs(p);
+ p->outBufSize = destBlockSize;
+ }
+
+ p->mtCoder.numThreadsMax = p->props.numBlockThreads_Max;
+ p->mtCoder.expectedDataSize = p->expectedDataSize;
+
+ {
+ SRes res = MtCoder_Code(&p->mtCoder);
+ if (!outStream)
+ *outBufSize = p->outBuf - outBuf;
+ return res;
+ }
+ }
+
+ #endif
+
+
+ return Lzma2Enc_EncodeMt1(p,
+ &p->coders[0],
+ outStream, outBuf, outBufSize,
+ inStream, inData, inDataSize,
+ True, /* finished */
+ progress);
+}
diff --git a/contrib/libs/lzmasdk/Lzma2Enc.h b/contrib/libs/lzmasdk/Lzma2Enc.h
index 6a6110ff7e..65f2dd145d 100644
--- a/contrib/libs/lzmasdk/Lzma2Enc.h
+++ b/contrib/libs/lzmasdk/Lzma2Enc.h
@@ -1,55 +1,55 @@
-/* Lzma2Enc.h -- LZMA2 Encoder
-2017-07-27 : Igor Pavlov : Public domain */
-
-#ifndef __LZMA2_ENC_H
-#define __LZMA2_ENC_H
-
-#include "LzmaEnc.h"
-
-EXTERN_C_BEGIN
-
-#define LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO 0
-#define LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID ((UInt64)(Int64)-1)
-
-typedef struct
-{
- CLzmaEncProps lzmaProps;
- UInt64 blockSize;
- int numBlockThreads_Reduced;
- int numBlockThreads_Max;
- int numTotalThreads;
-} CLzma2EncProps;
-
-void Lzma2EncProps_Init(CLzma2EncProps *p);
-void Lzma2EncProps_Normalize(CLzma2EncProps *p);
-
-/* ---------- CLzmaEnc2Handle Interface ---------- */
-
-/* Lzma2Enc_* functions can return the following exit codes:
-SRes:
- SZ_OK - OK
- SZ_ERROR_MEM - Memory allocation error
- SZ_ERROR_PARAM - Incorrect paramater in props
- SZ_ERROR_WRITE - ISeqOutStream write callback error
- SZ_ERROR_OUTPUT_EOF - output buffer overflow - version with (Byte *) output
- SZ_ERROR_PROGRESS - some break from progress callback
- SZ_ERROR_THREAD - error in multithreading functions (only for Mt version)
-*/
-
-typedef void * CLzma2EncHandle;
-
-CLzma2EncHandle Lzma2Enc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig);
-void Lzma2Enc_Destroy(CLzma2EncHandle p);
-SRes Lzma2Enc_SetProps(CLzma2EncHandle p, const CLzma2EncProps *props);
-void Lzma2Enc_SetDataSize(CLzma2EncHandle p, UInt64 expectedDataSiize);
-Byte Lzma2Enc_WriteProperties(CLzma2EncHandle p);
-SRes Lzma2Enc_Encode2(CLzma2EncHandle p,
- ISeqOutStream *outStream,
- Byte *outBuf, size_t *outBufSize,
- ISeqInStream *inStream,
- const Byte *inData, size_t inDataSize,
- ICompressProgress *progress);
-
-EXTERN_C_END
-
-#endif
+/* Lzma2Enc.h -- LZMA2 Encoder
+2017-07-27 : Igor Pavlov : Public domain */
+
+#ifndef __LZMA2_ENC_H
+#define __LZMA2_ENC_H
+
+#include "LzmaEnc.h"
+
+EXTERN_C_BEGIN
+
+#define LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO 0
+#define LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID ((UInt64)(Int64)-1)
+
+typedef struct
+{
+ CLzmaEncProps lzmaProps;
+ UInt64 blockSize;
+ int numBlockThreads_Reduced;
+ int numBlockThreads_Max;
+ int numTotalThreads;
+} CLzma2EncProps;
+
+void Lzma2EncProps_Init(CLzma2EncProps *p);
+void Lzma2EncProps_Normalize(CLzma2EncProps *p);
+
+/* ---------- CLzmaEnc2Handle Interface ---------- */
+
+/* Lzma2Enc_* functions can return the following exit codes:
+SRes:
+ SZ_OK - OK
+ SZ_ERROR_MEM - Memory allocation error
+ SZ_ERROR_PARAM - Incorrect paramater in props
+ SZ_ERROR_WRITE - ISeqOutStream write callback error
+ SZ_ERROR_OUTPUT_EOF - output buffer overflow - version with (Byte *) output
+ SZ_ERROR_PROGRESS - some break from progress callback
+ SZ_ERROR_THREAD - error in multithreading functions (only for Mt version)
+*/
+
+typedef void * CLzma2EncHandle;
+
+CLzma2EncHandle Lzma2Enc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig);
+void Lzma2Enc_Destroy(CLzma2EncHandle p);
+SRes Lzma2Enc_SetProps(CLzma2EncHandle p, const CLzma2EncProps *props);
+void Lzma2Enc_SetDataSize(CLzma2EncHandle p, UInt64 expectedDataSiize);
+Byte Lzma2Enc_WriteProperties(CLzma2EncHandle p);
+SRes Lzma2Enc_Encode2(CLzma2EncHandle p,
+ ISeqOutStream *outStream,
+ Byte *outBuf, size_t *outBufSize,
+ ISeqInStream *inStream,
+ const Byte *inData, size_t inDataSize,
+ ICompressProgress *progress);
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/LzmaDec.c b/contrib/libs/lzmasdk/LzmaDec.c
index ba3e1dd50e..4d1576419f 100644
--- a/contrib/libs/lzmasdk/LzmaDec.c
+++ b/contrib/libs/lzmasdk/LzmaDec.c
@@ -1,1185 +1,1185 @@
-/* LzmaDec.c -- LZMA Decoder
-2018-07-04 : Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include <string.h>
-
-/* #include "CpuArch.h" */
-#include "LzmaDec.h"
-
-#define kNumTopBits 24
-#define kTopValue ((UInt32)1 << kNumTopBits)
-
-#define kNumBitModelTotalBits 11
-#define kBitModelTotal (1 << kNumBitModelTotalBits)
-#define kNumMoveBits 5
-
-#define RC_INIT_SIZE 5
-
-#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); }
-
-#define IF_BIT_0(p) ttt = *(p); NORMALIZE; bound = (range >> kNumBitModelTotalBits) * (UInt32)ttt; if (code < bound)
-#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits));
-#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits));
-#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \
- { UPDATE_0(p); i = (i + i); A0; } else \
- { UPDATE_1(p); i = (i + i) + 1; A1; }
-
-#define TREE_GET_BIT(probs, i) { GET_BIT2(probs + i, i, ;, ;); }
-
-#define REV_BIT(p, i, A0, A1) IF_BIT_0(p + i) \
- { UPDATE_0(p + i); A0; } else \
- { UPDATE_1(p + i); A1; }
-#define REV_BIT_VAR( p, i, m) REV_BIT(p, i, i += m; m += m, m += m; i += m; )
-#define REV_BIT_CONST(p, i, m) REV_BIT(p, i, i += m; , i += m * 2; )
-#define REV_BIT_LAST( p, i, m) REV_BIT(p, i, i -= m , ; )
-
-#define TREE_DECODE(probs, limit, i) \
- { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; }
-
-/* #define _LZMA_SIZE_OPT */
-
-#ifdef _LZMA_SIZE_OPT
-#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i)
-#else
-#define TREE_6_DECODE(probs, i) \
- { i = 1; \
- TREE_GET_BIT(probs, i); \
- TREE_GET_BIT(probs, i); \
- TREE_GET_BIT(probs, i); \
- TREE_GET_BIT(probs, i); \
- TREE_GET_BIT(probs, i); \
- TREE_GET_BIT(probs, i); \
- i -= 0x40; }
-#endif
-
-#define NORMAL_LITER_DEC TREE_GET_BIT(prob, symbol)
-#define MATCHED_LITER_DEC \
- matchByte += matchByte; \
- bit = offs; \
- offs &= matchByte; \
- probLit = prob + (offs + bit + symbol); \
- GET_BIT2(probLit, symbol, offs ^= bit; , ;)
-
-
-
-#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_ERROR; range <<= 8; code = (code << 8) | (*buf++); }
-
-#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * (UInt32)ttt; if (code < bound)
-#define UPDATE_0_CHECK range = bound;
-#define UPDATE_1_CHECK range -= bound; code -= bound;
-#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \
- { UPDATE_0_CHECK; i = (i + i); A0; } else \
- { UPDATE_1_CHECK; i = (i + i) + 1; A1; }
-#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;)
-#define TREE_DECODE_CHECK(probs, limit, i) \
- { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; }
-
-
-#define REV_BIT_CHECK(p, i, m) IF_BIT_0_CHECK(p + i) \
- { UPDATE_0_CHECK; i += m; m += m; } else \
- { UPDATE_1_CHECK; m += m; i += m; }
-
-
-#define kNumPosBitsMax 4
-#define kNumPosStatesMax (1 << kNumPosBitsMax)
-
-#define kLenNumLowBits 3
-#define kLenNumLowSymbols (1 << kLenNumLowBits)
-#define kLenNumHighBits 8
-#define kLenNumHighSymbols (1 << kLenNumHighBits)
-
-#define LenLow 0
-#define LenHigh (LenLow + 2 * (kNumPosStatesMax << kLenNumLowBits))
-#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
-
-#define LenChoice LenLow
-#define LenChoice2 (LenLow + (1 << kLenNumLowBits))
-
-#define kNumStates 12
-#define kNumStates2 16
-#define kNumLitStates 7
-
-#define kStartPosModelIndex 4
-#define kEndPosModelIndex 14
-#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
-
-#define kNumPosSlotBits 6
-#define kNumLenToPosStates 4
-
-#define kNumAlignBits 4
-#define kAlignTableSize (1 << kNumAlignBits)
-
-#define kMatchMinLen 2
-#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols * 2 + kLenNumHighSymbols)
-
-/* External ASM code needs same CLzmaProb array layout. So don't change it. */
-
-/* (probs_1664) is faster and better for code size at some platforms */
-/*
-#ifdef MY_CPU_X86_OR_AMD64
-*/
-#define kStartOffset 1664
-#define GET_PROBS p->probs_1664
-/*
-#define GET_PROBS p->probs + kStartOffset
-#else
-#define kStartOffset 0
-#define GET_PROBS p->probs
-#endif
-*/
-
-#define SpecPos (-kStartOffset)
-#define IsRep0Long (SpecPos + kNumFullDistances)
-#define RepLenCoder (IsRep0Long + (kNumStates2 << kNumPosBitsMax))
-#define LenCoder (RepLenCoder + kNumLenProbs)
-#define IsMatch (LenCoder + kNumLenProbs)
-#define Align (IsMatch + (kNumStates2 << kNumPosBitsMax))
-#define IsRep (Align + kAlignTableSize)
-#define IsRepG0 (IsRep + kNumStates)
-#define IsRepG1 (IsRepG0 + kNumStates)
-#define IsRepG2 (IsRepG1 + kNumStates)
-#define PosSlot (IsRepG2 + kNumStates)
-#define Literal (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
-#define NUM_BASE_PROBS (Literal + kStartOffset)
-
-#if Align != 0 && kStartOffset != 0
- #error Stop_Compiling_Bad_LZMA_kAlign
-#endif
-
-#if NUM_BASE_PROBS != 1984
- #error Stop_Compiling_Bad_LZMA_PROBS
-#endif
-
-
-#define LZMA_LIT_SIZE 0x300
-
-#define LzmaProps_GetNumProbs(p) (NUM_BASE_PROBS + ((UInt32)LZMA_LIT_SIZE << ((p)->lc + (p)->lp)))
-
-
-#define CALC_POS_STATE(processedPos, pbMask) (((processedPos) & (pbMask)) << 4)
-#define COMBINED_PS_STATE (posState + state)
-#define GET_LEN_STATE (posState)
-
-#define LZMA_DIC_MIN (1 << 12)
-
-/*
-p->remainLen : shows status of LZMA decoder:
- < kMatchSpecLenStart : normal remain
- = kMatchSpecLenStart : finished
- = kMatchSpecLenStart + 1 : need init range coder
- = kMatchSpecLenStart + 2 : need init range coder and state
-*/
-
-/* ---------- LZMA_DECODE_REAL ---------- */
-/*
-LzmaDec_DecodeReal_3() can be implemented in external ASM file.
-3 - is the code compatibility version of that function for check at link time.
-*/
-
-#define LZMA_DECODE_REAL LzmaDec_DecodeReal_3
-
-/*
-LZMA_DECODE_REAL()
-In:
- RangeCoder is normalized
- if (p->dicPos == limit)
- {
- LzmaDec_TryDummy() was called before to exclude LITERAL and MATCH-REP cases.
- So first symbol can be only MATCH-NON-REP. And if that MATCH-NON-REP symbol
- is not END_OF_PAYALOAD_MARKER, then function returns error code.
- }
-
-Processing:
- first LZMA symbol will be decoded in any case
- All checks for limits are at the end of main loop,
- It will decode new LZMA-symbols while (p->buf < bufLimit && dicPos < limit),
- RangeCoder is still without last normalization when (p->buf < bufLimit) is being checked.
-
-Out:
- RangeCoder is normalized
- Result:
- SZ_OK - OK
- SZ_ERROR_DATA - Error
- p->remainLen:
- < kMatchSpecLenStart : normal remain
- = kMatchSpecLenStart : finished
-*/
-
-
-#ifdef _LZMA_DEC_OPT
-
-int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit);
-
-#else
-
-static
-int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit)
-{
- CLzmaProb *probs = GET_PROBS;
- unsigned state = (unsigned)p->state;
- UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3];
- unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1;
- unsigned lc = p->prop.lc;
- unsigned lpMask = ((unsigned)0x100 << p->prop.lp) - ((unsigned)0x100 >> lc);
-
- Byte *dic = p->dic;
- SizeT dicBufSize = p->dicBufSize;
- SizeT dicPos = p->dicPos;
-
- UInt32 processedPos = p->processedPos;
- UInt32 checkDicSize = p->checkDicSize;
- unsigned len = 0;
-
- const Byte *buf = p->buf;
- UInt32 range = p->range;
- UInt32 code = p->code;
-
- do
- {
- CLzmaProb *prob;
- UInt32 bound;
- unsigned ttt;
- unsigned posState = CALC_POS_STATE(processedPos, pbMask);
-
- prob = probs + IsMatch + COMBINED_PS_STATE;
- IF_BIT_0(prob)
- {
- unsigned symbol;
- UPDATE_0(prob);
- prob = probs + Literal;
- if (processedPos != 0 || checkDicSize != 0)
- prob += (UInt32)3 * ((((processedPos << 8) + dic[(dicPos == 0 ? dicBufSize : dicPos) - 1]) & lpMask) << lc);
- processedPos++;
-
- if (state < kNumLitStates)
- {
- state -= (state < 4) ? state : 3;
- symbol = 1;
- #ifdef _LZMA_SIZE_OPT
- do { NORMAL_LITER_DEC } while (symbol < 0x100);
- #else
- NORMAL_LITER_DEC
- NORMAL_LITER_DEC
- NORMAL_LITER_DEC
- NORMAL_LITER_DEC
- NORMAL_LITER_DEC
- NORMAL_LITER_DEC
- NORMAL_LITER_DEC
- NORMAL_LITER_DEC
- #endif
- }
- else
- {
- unsigned matchByte = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)];
- unsigned offs = 0x100;
- state -= (state < 10) ? 3 : 6;
- symbol = 1;
- #ifdef _LZMA_SIZE_OPT
- do
- {
- unsigned bit;
- CLzmaProb *probLit;
- MATCHED_LITER_DEC
- }
- while (symbol < 0x100);
- #else
- {
- unsigned bit;
- CLzmaProb *probLit;
- MATCHED_LITER_DEC
- MATCHED_LITER_DEC
- MATCHED_LITER_DEC
- MATCHED_LITER_DEC
- MATCHED_LITER_DEC
- MATCHED_LITER_DEC
- MATCHED_LITER_DEC
- MATCHED_LITER_DEC
- }
- #endif
- }
-
- dic[dicPos++] = (Byte)symbol;
- continue;
- }
-
- {
- UPDATE_1(prob);
- prob = probs + IsRep + state;
- IF_BIT_0(prob)
- {
- UPDATE_0(prob);
- state += kNumStates;
- prob = probs + LenCoder;
- }
- else
- {
- UPDATE_1(prob);
- /*
- // that case was checked before with kBadRepCode
- if (checkDicSize == 0 && processedPos == 0)
- return SZ_ERROR_DATA;
- */
- prob = probs + IsRepG0 + state;
- IF_BIT_0(prob)
- {
- UPDATE_0(prob);
- prob = probs + IsRep0Long + COMBINED_PS_STATE;
- IF_BIT_0(prob)
- {
- UPDATE_0(prob);
- dic[dicPos] = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)];
- dicPos++;
- processedPos++;
- state = state < kNumLitStates ? 9 : 11;
- continue;
- }
- UPDATE_1(prob);
- }
- else
- {
- UInt32 distance;
- UPDATE_1(prob);
- prob = probs + IsRepG1 + state;
- IF_BIT_0(prob)
- {
- UPDATE_0(prob);
- distance = rep1;
- }
- else
- {
- UPDATE_1(prob);
- prob = probs + IsRepG2 + state;
- IF_BIT_0(prob)
- {
- UPDATE_0(prob);
- distance = rep2;
- }
- else
- {
- UPDATE_1(prob);
- distance = rep3;
- rep3 = rep2;
- }
- rep2 = rep1;
- }
- rep1 = rep0;
- rep0 = distance;
- }
- state = state < kNumLitStates ? 8 : 11;
- prob = probs + RepLenCoder;
- }
-
- #ifdef _LZMA_SIZE_OPT
- {
- unsigned lim, offset;
- CLzmaProb *probLen = prob + LenChoice;
- IF_BIT_0(probLen)
- {
- UPDATE_0(probLen);
- probLen = prob + LenLow + GET_LEN_STATE;
- offset = 0;
- lim = (1 << kLenNumLowBits);
- }
- else
- {
- UPDATE_1(probLen);
- probLen = prob + LenChoice2;
- IF_BIT_0(probLen)
- {
- UPDATE_0(probLen);
- probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits);
- offset = kLenNumLowSymbols;
- lim = (1 << kLenNumLowBits);
- }
- else
- {
- UPDATE_1(probLen);
- probLen = prob + LenHigh;
- offset = kLenNumLowSymbols * 2;
- lim = (1 << kLenNumHighBits);
- }
- }
- TREE_DECODE(probLen, lim, len);
- len += offset;
- }
- #else
- {
- CLzmaProb *probLen = prob + LenChoice;
- IF_BIT_0(probLen)
- {
- UPDATE_0(probLen);
- probLen = prob + LenLow + GET_LEN_STATE;
- len = 1;
- TREE_GET_BIT(probLen, len);
- TREE_GET_BIT(probLen, len);
- TREE_GET_BIT(probLen, len);
- len -= 8;
- }
- else
- {
- UPDATE_1(probLen);
- probLen = prob + LenChoice2;
- IF_BIT_0(probLen)
- {
- UPDATE_0(probLen);
- probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits);
- len = 1;
- TREE_GET_BIT(probLen, len);
- TREE_GET_BIT(probLen, len);
- TREE_GET_BIT(probLen, len);
- }
- else
- {
- UPDATE_1(probLen);
- probLen = prob + LenHigh;
- TREE_DECODE(probLen, (1 << kLenNumHighBits), len);
- len += kLenNumLowSymbols * 2;
- }
- }
- }
- #endif
-
- if (state >= kNumStates)
- {
- UInt32 distance;
- prob = probs + PosSlot +
- ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits);
- TREE_6_DECODE(prob, distance);
- if (distance >= kStartPosModelIndex)
- {
- unsigned posSlot = (unsigned)distance;
- unsigned numDirectBits = (unsigned)(((distance >> 1) - 1));
- distance = (2 | (distance & 1));
- if (posSlot < kEndPosModelIndex)
- {
- distance <<= numDirectBits;
- prob = probs + SpecPos;
- {
- UInt32 m = 1;
- distance++;
- do
- {
- REV_BIT_VAR(prob, distance, m);
- }
- while (--numDirectBits);
- distance -= m;
- }
- }
- else
- {
- numDirectBits -= kNumAlignBits;
- do
- {
- NORMALIZE
- range >>= 1;
-
- {
- UInt32 t;
- code -= range;
- t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */
- distance = (distance << 1) + (t + 1);
- code += range & t;
- }
- /*
- distance <<= 1;
- if (code >= range)
- {
- code -= range;
- distance |= 1;
- }
- */
- }
- while (--numDirectBits);
- prob = probs + Align;
- distance <<= kNumAlignBits;
- {
- unsigned i = 1;
- REV_BIT_CONST(prob, i, 1);
- REV_BIT_CONST(prob, i, 2);
- REV_BIT_CONST(prob, i, 4);
- REV_BIT_LAST (prob, i, 8);
- distance |= i;
- }
- if (distance == (UInt32)0xFFFFFFFF)
- {
- len = kMatchSpecLenStart;
- state -= kNumStates;
- break;
- }
- }
- }
-
- rep3 = rep2;
- rep2 = rep1;
- rep1 = rep0;
- rep0 = distance + 1;
- state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3;
- if (distance >= (checkDicSize == 0 ? processedPos: checkDicSize))
- {
- p->dicPos = dicPos;
- return SZ_ERROR_DATA;
- }
- }
-
- len += kMatchMinLen;
-
- {
- SizeT rem;
- unsigned curLen;
- SizeT pos;
-
- if ((rem = limit - dicPos) == 0)
- {
- p->dicPos = dicPos;
- return SZ_ERROR_DATA;
- }
-
- curLen = ((rem < len) ? (unsigned)rem : len);
- pos = dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0);
-
- processedPos += (UInt32)curLen;
-
- len -= curLen;
- if (curLen <= dicBufSize - pos)
- {
- Byte *dest = dic + dicPos;
- ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos;
- const Byte *lim = dest + curLen;
- dicPos += (SizeT)curLen;
- do
- *(dest) = (Byte)*(dest + src);
- while (++dest != lim);
- }
- else
- {
- do
- {
- dic[dicPos++] = dic[pos];
- if (++pos == dicBufSize)
- pos = 0;
- }
- while (--curLen != 0);
- }
- }
- }
- }
- while (dicPos < limit && buf < bufLimit);
-
- NORMALIZE;
-
- p->buf = buf;
- p->range = range;
- p->code = code;
- p->remainLen = (UInt32)len;
- p->dicPos = dicPos;
- p->processedPos = processedPos;
- p->reps[0] = rep0;
- p->reps[1] = rep1;
- p->reps[2] = rep2;
- p->reps[3] = rep3;
- p->state = (UInt32)state;
-
- return SZ_OK;
-}
-#endif
-
-static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit)
-{
- if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart)
- {
- Byte *dic = p->dic;
- SizeT dicPos = p->dicPos;
- SizeT dicBufSize = p->dicBufSize;
- unsigned len = (unsigned)p->remainLen;
- SizeT rep0 = p->reps[0]; /* we use SizeT to avoid the BUG of VC14 for AMD64 */
- SizeT rem = limit - dicPos;
- if (rem < len)
- len = (unsigned)(rem);
-
- if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len)
- p->checkDicSize = p->prop.dicSize;
-
- p->processedPos += (UInt32)len;
- p->remainLen -= (UInt32)len;
- while (len != 0)
- {
- len--;
- dic[dicPos] = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)];
- dicPos++;
- }
- p->dicPos = dicPos;
- }
-}
-
-
-#define kRange0 0xFFFFFFFF
-#define kBound0 ((kRange0 >> kNumBitModelTotalBits) << (kNumBitModelTotalBits - 1))
-#define kBadRepCode (kBound0 + (((kRange0 - kBound0) >> kNumBitModelTotalBits) << (kNumBitModelTotalBits - 1)))
-#if kBadRepCode != (0xC0000000 - 0x400)
- #error Stop_Compiling_Bad_LZMA_Check
-#endif
-
-static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit)
-{
- do
- {
- SizeT limit2 = limit;
- if (p->checkDicSize == 0)
- {
- UInt32 rem = p->prop.dicSize - p->processedPos;
- if (limit - p->dicPos > rem)
- limit2 = p->dicPos + rem;
-
- if (p->processedPos == 0)
- if (p->code >= kBadRepCode)
- return SZ_ERROR_DATA;
- }
-
- RINOK(LZMA_DECODE_REAL(p, limit2, bufLimit));
-
- if (p->checkDicSize == 0 && p->processedPos >= p->prop.dicSize)
- p->checkDicSize = p->prop.dicSize;
-
- LzmaDec_WriteRem(p, limit);
- }
- while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart);
-
- return 0;
-}
-
-typedef enum
-{
- DUMMY_ERROR, /* unexpected end of input stream */
- DUMMY_LIT,
- DUMMY_MATCH,
- DUMMY_REP
-} ELzmaDummy;
-
-static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, SizeT inSize)
-{
- UInt32 range = p->range;
- UInt32 code = p->code;
- const Byte *bufLimit = buf + inSize;
- const CLzmaProb *probs = GET_PROBS;
- unsigned state = (unsigned)p->state;
- ELzmaDummy res;
-
- {
- const CLzmaProb *prob;
- UInt32 bound;
- unsigned ttt;
- unsigned posState = CALC_POS_STATE(p->processedPos, (1 << p->prop.pb) - 1);
-
- prob = probs + IsMatch + COMBINED_PS_STATE;
- IF_BIT_0_CHECK(prob)
- {
- UPDATE_0_CHECK
-
- /* if (bufLimit - buf >= 7) return DUMMY_LIT; */
-
- prob = probs + Literal;
- if (p->checkDicSize != 0 || p->processedPos != 0)
- prob += ((UInt32)LZMA_LIT_SIZE *
- ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) +
- (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc))));
-
- if (state < kNumLitStates)
- {
- unsigned symbol = 1;
- do { GET_BIT_CHECK(prob + symbol, symbol) } while (symbol < 0x100);
- }
- else
- {
- unsigned matchByte = p->dic[p->dicPos - p->reps[0] +
- (p->dicPos < p->reps[0] ? p->dicBufSize : 0)];
- unsigned offs = 0x100;
- unsigned symbol = 1;
- do
- {
- unsigned bit;
- const CLzmaProb *probLit;
- matchByte += matchByte;
- bit = offs;
- offs &= matchByte;
- probLit = prob + (offs + bit + symbol);
- GET_BIT2_CHECK(probLit, symbol, offs ^= bit; , ; )
- }
- while (symbol < 0x100);
- }
- res = DUMMY_LIT;
- }
- else
- {
- unsigned len;
- UPDATE_1_CHECK;
-
- prob = probs + IsRep + state;
- IF_BIT_0_CHECK(prob)
- {
- UPDATE_0_CHECK;
- state = 0;
- prob = probs + LenCoder;
- res = DUMMY_MATCH;
- }
- else
- {
- UPDATE_1_CHECK;
- res = DUMMY_REP;
- prob = probs + IsRepG0 + state;
- IF_BIT_0_CHECK(prob)
- {
- UPDATE_0_CHECK;
- prob = probs + IsRep0Long + COMBINED_PS_STATE;
- IF_BIT_0_CHECK(prob)
- {
- UPDATE_0_CHECK;
- NORMALIZE_CHECK;
- return DUMMY_REP;
- }
- else
- {
- UPDATE_1_CHECK;
- }
- }
- else
- {
- UPDATE_1_CHECK;
- prob = probs + IsRepG1 + state;
- IF_BIT_0_CHECK(prob)
- {
- UPDATE_0_CHECK;
- }
- else
- {
- UPDATE_1_CHECK;
- prob = probs + IsRepG2 + state;
- IF_BIT_0_CHECK(prob)
- {
- UPDATE_0_CHECK;
- }
- else
- {
- UPDATE_1_CHECK;
- }
- }
- }
- state = kNumStates;
- prob = probs + RepLenCoder;
- }
- {
- unsigned limit, offset;
- const CLzmaProb *probLen = prob + LenChoice;
- IF_BIT_0_CHECK(probLen)
- {
- UPDATE_0_CHECK;
- probLen = prob + LenLow + GET_LEN_STATE;
- offset = 0;
- limit = 1 << kLenNumLowBits;
- }
- else
- {
- UPDATE_1_CHECK;
- probLen = prob + LenChoice2;
- IF_BIT_0_CHECK(probLen)
- {
- UPDATE_0_CHECK;
- probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits);
- offset = kLenNumLowSymbols;
- limit = 1 << kLenNumLowBits;
- }
- else
- {
- UPDATE_1_CHECK;
- probLen = prob + LenHigh;
- offset = kLenNumLowSymbols * 2;
- limit = 1 << kLenNumHighBits;
- }
- }
- TREE_DECODE_CHECK(probLen, limit, len);
- len += offset;
- }
-
- if (state < 4)
- {
- unsigned posSlot;
- prob = probs + PosSlot +
- ((len < kNumLenToPosStates - 1 ? len : kNumLenToPosStates - 1) <<
- kNumPosSlotBits);
- TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot);
- if (posSlot >= kStartPosModelIndex)
- {
- unsigned numDirectBits = ((posSlot >> 1) - 1);
-
- /* if (bufLimit - buf >= 8) return DUMMY_MATCH; */
-
- if (posSlot < kEndPosModelIndex)
- {
- prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits);
- }
- else
- {
- numDirectBits -= kNumAlignBits;
- do
- {
- NORMALIZE_CHECK
- range >>= 1;
- code -= range & (((code - range) >> 31) - 1);
- /* if (code >= range) code -= range; */
- }
- while (--numDirectBits);
- prob = probs + Align;
- numDirectBits = kNumAlignBits;
- }
- {
- unsigned i = 1;
- unsigned m = 1;
- do
- {
- REV_BIT_CHECK(prob, i, m);
- }
- while (--numDirectBits);
- }
- }
- }
- }
- }
- NORMALIZE_CHECK;
- return res;
-}
-
-
-void LzmaDec_InitDicAndState(CLzmaDec *p, BoolInt initDic, BoolInt initState)
-{
- p->remainLen = kMatchSpecLenStart + 1;
- p->tempBufSize = 0;
-
- if (initDic)
- {
- p->processedPos = 0;
- p->checkDicSize = 0;
- p->remainLen = kMatchSpecLenStart + 2;
- }
- if (initState)
- p->remainLen = kMatchSpecLenStart + 2;
-}
-
-void LzmaDec_Init(CLzmaDec *p)
-{
- p->dicPos = 0;
- LzmaDec_InitDicAndState(p, True, True);
-}
-
-
-SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen,
- ELzmaFinishMode finishMode, ELzmaStatus *status)
-{
- SizeT inSize = *srcLen;
- (*srcLen) = 0;
-
- *status = LZMA_STATUS_NOT_SPECIFIED;
-
- if (p->remainLen > kMatchSpecLenStart)
- {
- for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--)
- p->tempBuf[p->tempBufSize++] = *src++;
- if (p->tempBufSize != 0 && p->tempBuf[0] != 0)
- return SZ_ERROR_DATA;
- if (p->tempBufSize < RC_INIT_SIZE)
- {
- *status = LZMA_STATUS_NEEDS_MORE_INPUT;
- return SZ_OK;
- }
- p->code =
- ((UInt32)p->tempBuf[1] << 24)
- | ((UInt32)p->tempBuf[2] << 16)
- | ((UInt32)p->tempBuf[3] << 8)
- | ((UInt32)p->tempBuf[4]);
- p->range = 0xFFFFFFFF;
- p->tempBufSize = 0;
-
- if (p->remainLen > kMatchSpecLenStart + 1)
- {
- SizeT numProbs = LzmaProps_GetNumProbs(&p->prop);
- SizeT i;
- CLzmaProb *probs = p->probs;
- for (i = 0; i < numProbs; i++)
- probs[i] = kBitModelTotal >> 1;
- p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1;
- p->state = 0;
- }
-
- p->remainLen = 0;
- }
-
- LzmaDec_WriteRem(p, dicLimit);
-
- while (p->remainLen != kMatchSpecLenStart)
- {
- int checkEndMarkNow = 0;
-
- if (p->dicPos >= dicLimit)
- {
- if (p->remainLen == 0 && p->code == 0)
- {
- *status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK;
- return SZ_OK;
- }
- if (finishMode == LZMA_FINISH_ANY)
- {
- *status = LZMA_STATUS_NOT_FINISHED;
- return SZ_OK;
- }
- if (p->remainLen != 0)
- {
- *status = LZMA_STATUS_NOT_FINISHED;
- return SZ_ERROR_DATA;
- }
- checkEndMarkNow = 1;
- }
-
- if (p->tempBufSize == 0)
- {
- SizeT processed;
- const Byte *bufLimit;
- if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow)
- {
- int dummyRes = LzmaDec_TryDummy(p, src, inSize);
- if (dummyRes == DUMMY_ERROR)
- {
- memcpy(p->tempBuf, src, inSize);
- p->tempBufSize = (unsigned)inSize;
- (*srcLen) += inSize;
- *status = LZMA_STATUS_NEEDS_MORE_INPUT;
- return SZ_OK;
- }
- if (checkEndMarkNow && dummyRes != DUMMY_MATCH)
- {
- *status = LZMA_STATUS_NOT_FINISHED;
- return SZ_ERROR_DATA;
- }
- bufLimit = src;
- }
- else
- bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX;
- p->buf = src;
- if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0)
- return SZ_ERROR_DATA;
- processed = (SizeT)(p->buf - src);
- (*srcLen) += processed;
- src += processed;
- inSize -= processed;
- }
- else
- {
- unsigned rem = p->tempBufSize, lookAhead = 0;
- while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize)
- p->tempBuf[rem++] = src[lookAhead++];
- p->tempBufSize = rem;
- if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow)
- {
- int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, (SizeT)rem);
- if (dummyRes == DUMMY_ERROR)
- {
- (*srcLen) += (SizeT)lookAhead;
- *status = LZMA_STATUS_NEEDS_MORE_INPUT;
- return SZ_OK;
- }
- if (checkEndMarkNow && dummyRes != DUMMY_MATCH)
- {
- *status = LZMA_STATUS_NOT_FINISHED;
- return SZ_ERROR_DATA;
- }
- }
- p->buf = p->tempBuf;
- if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0)
- return SZ_ERROR_DATA;
-
- {
- unsigned kkk = (unsigned)(p->buf - p->tempBuf);
- if (rem < kkk)
- return SZ_ERROR_FAIL; /* some internal error */
- rem -= kkk;
- if (lookAhead < rem)
- return SZ_ERROR_FAIL; /* some internal error */
- lookAhead -= rem;
- }
- (*srcLen) += (SizeT)lookAhead;
- src += lookAhead;
- inSize -= (SizeT)lookAhead;
- p->tempBufSize = 0;
- }
- }
-
- if (p->code != 0)
- return SZ_ERROR_DATA;
- *status = LZMA_STATUS_FINISHED_WITH_MARK;
- return SZ_OK;
-}
-
-
-SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status)
-{
- SizeT outSize = *destLen;
- SizeT inSize = *srcLen;
- *srcLen = *destLen = 0;
- for (;;)
- {
- SizeT inSizeCur = inSize, outSizeCur, dicPos;
- ELzmaFinishMode curFinishMode;
- SRes res;
- if (p->dicPos == p->dicBufSize)
- p->dicPos = 0;
- dicPos = p->dicPos;
- if (outSize > p->dicBufSize - dicPos)
- {
- outSizeCur = p->dicBufSize;
- curFinishMode = LZMA_FINISH_ANY;
- }
- else
- {
- outSizeCur = dicPos + outSize;
- curFinishMode = finishMode;
- }
-
- res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status);
- src += inSizeCur;
- inSize -= inSizeCur;
- *srcLen += inSizeCur;
- outSizeCur = p->dicPos - dicPos;
- memcpy(dest, p->dic + dicPos, outSizeCur);
- dest += outSizeCur;
- outSize -= outSizeCur;
- *destLen += outSizeCur;
- if (res != 0)
- return res;
- if (outSizeCur == 0 || outSize == 0)
- return SZ_OK;
- }
-}
-
-void LzmaDec_FreeProbs(CLzmaDec *p, ISzAllocPtr alloc)
-{
- ISzAlloc_Free(alloc, p->probs);
- p->probs = NULL;
-}
-
-static void LzmaDec_FreeDict(CLzmaDec *p, ISzAllocPtr alloc)
-{
- ISzAlloc_Free(alloc, p->dic);
- p->dic = NULL;
-}
-
-void LzmaDec_Free(CLzmaDec *p, ISzAllocPtr alloc)
-{
- LzmaDec_FreeProbs(p, alloc);
- LzmaDec_FreeDict(p, alloc);
-}
-
-SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size)
-{
- UInt32 dicSize;
- Byte d;
-
- if (size < LZMA_PROPS_SIZE)
- return SZ_ERROR_UNSUPPORTED;
- else
- dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24);
-
- if (dicSize < LZMA_DIC_MIN)
- dicSize = LZMA_DIC_MIN;
- p->dicSize = dicSize;
-
- d = data[0];
- if (d >= (9 * 5 * 5))
- return SZ_ERROR_UNSUPPORTED;
-
- p->lc = (Byte)(d % 9);
- d /= 9;
- p->pb = (Byte)(d / 5);
- p->lp = (Byte)(d % 5);
-
- return SZ_OK;
-}
-
-static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAllocPtr alloc)
-{
- UInt32 numProbs = LzmaProps_GetNumProbs(propNew);
- if (!p->probs || numProbs != p->numProbs)
- {
- LzmaDec_FreeProbs(p, alloc);
- p->probs = (CLzmaProb *)ISzAlloc_Alloc(alloc, numProbs * sizeof(CLzmaProb));
- if (!p->probs)
- return SZ_ERROR_MEM;
- p->probs_1664 = p->probs + 1664;
- p->numProbs = numProbs;
- }
- return SZ_OK;
-}
-
-SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc)
-{
- CLzmaProps propNew;
- RINOK(LzmaProps_Decode(&propNew, props, propsSize));
- RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
- p->prop = propNew;
- return SZ_OK;
-}
-
-SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc)
-{
- CLzmaProps propNew;
- SizeT dicBufSize;
- RINOK(LzmaProps_Decode(&propNew, props, propsSize));
- RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
-
- {
- UInt32 dictSize = propNew.dicSize;
- SizeT mask = ((UInt32)1 << 12) - 1;
- if (dictSize >= ((UInt32)1 << 30)) mask = ((UInt32)1 << 22) - 1;
- else if (dictSize >= ((UInt32)1 << 22)) mask = ((UInt32)1 << 20) - 1;;
- dicBufSize = ((SizeT)dictSize + mask) & ~mask;
- if (dicBufSize < dictSize)
- dicBufSize = dictSize;
- }
-
- if (!p->dic || dicBufSize != p->dicBufSize)
- {
- LzmaDec_FreeDict(p, alloc);
- p->dic = (Byte *)ISzAlloc_Alloc(alloc, dicBufSize);
- if (!p->dic)
- {
- LzmaDec_FreeProbs(p, alloc);
- return SZ_ERROR_MEM;
- }
- }
- p->dicBufSize = dicBufSize;
- p->prop = propNew;
- return SZ_OK;
-}
-
-SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
- const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode,
- ELzmaStatus *status, ISzAllocPtr alloc)
-{
- CLzmaDec p;
- SRes res;
- SizeT outSize = *destLen, inSize = *srcLen;
- *destLen = *srcLen = 0;
- *status = LZMA_STATUS_NOT_SPECIFIED;
- if (inSize < RC_INIT_SIZE)
- return SZ_ERROR_INPUT_EOF;
- LzmaDec_Construct(&p);
- RINOK(LzmaDec_AllocateProbs(&p, propData, propSize, alloc));
- p.dic = dest;
- p.dicBufSize = outSize;
- LzmaDec_Init(&p);
- *srcLen = inSize;
- res = LzmaDec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status);
- *destLen = p.dicPos;
- if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT)
- res = SZ_ERROR_INPUT_EOF;
- LzmaDec_FreeProbs(&p, alloc);
- return res;
-}
+/* LzmaDec.c -- LZMA Decoder
+2018-07-04 : Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include <string.h>
+
+/* #include "CpuArch.h" */
+#include "LzmaDec.h"
+
+#define kNumTopBits 24
+#define kTopValue ((UInt32)1 << kNumTopBits)
+
+#define kNumBitModelTotalBits 11
+#define kBitModelTotal (1 << kNumBitModelTotalBits)
+#define kNumMoveBits 5
+
+#define RC_INIT_SIZE 5
+
+#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); }
+
+#define IF_BIT_0(p) ttt = *(p); NORMALIZE; bound = (range >> kNumBitModelTotalBits) * (UInt32)ttt; if (code < bound)
+#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits));
+#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits));
+#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \
+ { UPDATE_0(p); i = (i + i); A0; } else \
+ { UPDATE_1(p); i = (i + i) + 1; A1; }
+
+#define TREE_GET_BIT(probs, i) { GET_BIT2(probs + i, i, ;, ;); }
+
+#define REV_BIT(p, i, A0, A1) IF_BIT_0(p + i) \
+ { UPDATE_0(p + i); A0; } else \
+ { UPDATE_1(p + i); A1; }
+#define REV_BIT_VAR( p, i, m) REV_BIT(p, i, i += m; m += m, m += m; i += m; )
+#define REV_BIT_CONST(p, i, m) REV_BIT(p, i, i += m; , i += m * 2; )
+#define REV_BIT_LAST( p, i, m) REV_BIT(p, i, i -= m , ; )
+
+#define TREE_DECODE(probs, limit, i) \
+ { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; }
+
+/* #define _LZMA_SIZE_OPT */
+
+#ifdef _LZMA_SIZE_OPT
+#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i)
+#else
+#define TREE_6_DECODE(probs, i) \
+ { i = 1; \
+ TREE_GET_BIT(probs, i); \
+ TREE_GET_BIT(probs, i); \
+ TREE_GET_BIT(probs, i); \
+ TREE_GET_BIT(probs, i); \
+ TREE_GET_BIT(probs, i); \
+ TREE_GET_BIT(probs, i); \
+ i -= 0x40; }
+#endif
+
+#define NORMAL_LITER_DEC TREE_GET_BIT(prob, symbol)
+#define MATCHED_LITER_DEC \
+ matchByte += matchByte; \
+ bit = offs; \
+ offs &= matchByte; \
+ probLit = prob + (offs + bit + symbol); \
+ GET_BIT2(probLit, symbol, offs ^= bit; , ;)
+
+
+
+#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_ERROR; range <<= 8; code = (code << 8) | (*buf++); }
+
+#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * (UInt32)ttt; if (code < bound)
+#define UPDATE_0_CHECK range = bound;
+#define UPDATE_1_CHECK range -= bound; code -= bound;
+#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \
+ { UPDATE_0_CHECK; i = (i + i); A0; } else \
+ { UPDATE_1_CHECK; i = (i + i) + 1; A1; }
+#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;)
+#define TREE_DECODE_CHECK(probs, limit, i) \
+ { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; }
+
+
+#define REV_BIT_CHECK(p, i, m) IF_BIT_0_CHECK(p + i) \
+ { UPDATE_0_CHECK; i += m; m += m; } else \
+ { UPDATE_1_CHECK; m += m; i += m; }
+
+
+#define kNumPosBitsMax 4
+#define kNumPosStatesMax (1 << kNumPosBitsMax)
+
+#define kLenNumLowBits 3
+#define kLenNumLowSymbols (1 << kLenNumLowBits)
+#define kLenNumHighBits 8
+#define kLenNumHighSymbols (1 << kLenNumHighBits)
+
+#define LenLow 0
+#define LenHigh (LenLow + 2 * (kNumPosStatesMax << kLenNumLowBits))
+#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
+
+#define LenChoice LenLow
+#define LenChoice2 (LenLow + (1 << kLenNumLowBits))
+
+#define kNumStates 12
+#define kNumStates2 16
+#define kNumLitStates 7
+
+#define kStartPosModelIndex 4
+#define kEndPosModelIndex 14
+#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
+
+#define kNumPosSlotBits 6
+#define kNumLenToPosStates 4
+
+#define kNumAlignBits 4
+#define kAlignTableSize (1 << kNumAlignBits)
+
+#define kMatchMinLen 2
+#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols * 2 + kLenNumHighSymbols)
+
+/* External ASM code needs same CLzmaProb array layout. So don't change it. */
+
+/* (probs_1664) is faster and better for code size at some platforms */
+/*
+#ifdef MY_CPU_X86_OR_AMD64
+*/
+#define kStartOffset 1664
+#define GET_PROBS p->probs_1664
+/*
+#define GET_PROBS p->probs + kStartOffset
+#else
+#define kStartOffset 0
+#define GET_PROBS p->probs
+#endif
+*/
+
+#define SpecPos (-kStartOffset)
+#define IsRep0Long (SpecPos + kNumFullDistances)
+#define RepLenCoder (IsRep0Long + (kNumStates2 << kNumPosBitsMax))
+#define LenCoder (RepLenCoder + kNumLenProbs)
+#define IsMatch (LenCoder + kNumLenProbs)
+#define Align (IsMatch + (kNumStates2 << kNumPosBitsMax))
+#define IsRep (Align + kAlignTableSize)
+#define IsRepG0 (IsRep + kNumStates)
+#define IsRepG1 (IsRepG0 + kNumStates)
+#define IsRepG2 (IsRepG1 + kNumStates)
+#define PosSlot (IsRepG2 + kNumStates)
+#define Literal (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
+#define NUM_BASE_PROBS (Literal + kStartOffset)
+
+#if Align != 0 && kStartOffset != 0
+ #error Stop_Compiling_Bad_LZMA_kAlign
+#endif
+
+#if NUM_BASE_PROBS != 1984
+ #error Stop_Compiling_Bad_LZMA_PROBS
+#endif
+
+
+#define LZMA_LIT_SIZE 0x300
+
+#define LzmaProps_GetNumProbs(p) (NUM_BASE_PROBS + ((UInt32)LZMA_LIT_SIZE << ((p)->lc + (p)->lp)))
+
+
+#define CALC_POS_STATE(processedPos, pbMask) (((processedPos) & (pbMask)) << 4)
+#define COMBINED_PS_STATE (posState + state)
+#define GET_LEN_STATE (posState)
+
+#define LZMA_DIC_MIN (1 << 12)
+
+/*
+p->remainLen : shows status of LZMA decoder:
+ < kMatchSpecLenStart : normal remain
+ = kMatchSpecLenStart : finished
+ = kMatchSpecLenStart + 1 : need init range coder
+ = kMatchSpecLenStart + 2 : need init range coder and state
+*/
+
+/* ---------- LZMA_DECODE_REAL ---------- */
+/*
+LzmaDec_DecodeReal_3() can be implemented in external ASM file.
+3 - is the code compatibility version of that function for check at link time.
+*/
+
+#define LZMA_DECODE_REAL LzmaDec_DecodeReal_3
+
+/*
+LZMA_DECODE_REAL()
+In:
+ RangeCoder is normalized
+ if (p->dicPos == limit)
+ {
+ LzmaDec_TryDummy() was called before to exclude LITERAL and MATCH-REP cases.
+ So first symbol can be only MATCH-NON-REP. And if that MATCH-NON-REP symbol
+ is not END_OF_PAYALOAD_MARKER, then function returns error code.
+ }
+
+Processing:
+ first LZMA symbol will be decoded in any case
+ All checks for limits are at the end of main loop,
+ It will decode new LZMA-symbols while (p->buf < bufLimit && dicPos < limit),
+ RangeCoder is still without last normalization when (p->buf < bufLimit) is being checked.
+
+Out:
+ RangeCoder is normalized
+ Result:
+ SZ_OK - OK
+ SZ_ERROR_DATA - Error
+ p->remainLen:
+ < kMatchSpecLenStart : normal remain
+ = kMatchSpecLenStart : finished
+*/
+
+
+#ifdef _LZMA_DEC_OPT
+
+int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit);
+
+#else
+
+static
+int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit)
+{
+ CLzmaProb *probs = GET_PROBS;
+ unsigned state = (unsigned)p->state;
+ UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3];
+ unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1;
+ unsigned lc = p->prop.lc;
+ unsigned lpMask = ((unsigned)0x100 << p->prop.lp) - ((unsigned)0x100 >> lc);
+
+ Byte *dic = p->dic;
+ SizeT dicBufSize = p->dicBufSize;
+ SizeT dicPos = p->dicPos;
+
+ UInt32 processedPos = p->processedPos;
+ UInt32 checkDicSize = p->checkDicSize;
+ unsigned len = 0;
+
+ const Byte *buf = p->buf;
+ UInt32 range = p->range;
+ UInt32 code = p->code;
+
+ do
+ {
+ CLzmaProb *prob;
+ UInt32 bound;
+ unsigned ttt;
+ unsigned posState = CALC_POS_STATE(processedPos, pbMask);
+
+ prob = probs + IsMatch + COMBINED_PS_STATE;
+ IF_BIT_0(prob)
+ {
+ unsigned symbol;
+ UPDATE_0(prob);
+ prob = probs + Literal;
+ if (processedPos != 0 || checkDicSize != 0)
+ prob += (UInt32)3 * ((((processedPos << 8) + dic[(dicPos == 0 ? dicBufSize : dicPos) - 1]) & lpMask) << lc);
+ processedPos++;
+
+ if (state < kNumLitStates)
+ {
+ state -= (state < 4) ? state : 3;
+ symbol = 1;
+ #ifdef _LZMA_SIZE_OPT
+ do { NORMAL_LITER_DEC } while (symbol < 0x100);
+ #else
+ NORMAL_LITER_DEC
+ NORMAL_LITER_DEC
+ NORMAL_LITER_DEC
+ NORMAL_LITER_DEC
+ NORMAL_LITER_DEC
+ NORMAL_LITER_DEC
+ NORMAL_LITER_DEC
+ NORMAL_LITER_DEC
+ #endif
+ }
+ else
+ {
+ unsigned matchByte = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)];
+ unsigned offs = 0x100;
+ state -= (state < 10) ? 3 : 6;
+ symbol = 1;
+ #ifdef _LZMA_SIZE_OPT
+ do
+ {
+ unsigned bit;
+ CLzmaProb *probLit;
+ MATCHED_LITER_DEC
+ }
+ while (symbol < 0x100);
+ #else
+ {
+ unsigned bit;
+ CLzmaProb *probLit;
+ MATCHED_LITER_DEC
+ MATCHED_LITER_DEC
+ MATCHED_LITER_DEC
+ MATCHED_LITER_DEC
+ MATCHED_LITER_DEC
+ MATCHED_LITER_DEC
+ MATCHED_LITER_DEC
+ MATCHED_LITER_DEC
+ }
+ #endif
+ }
+
+ dic[dicPos++] = (Byte)symbol;
+ continue;
+ }
+
+ {
+ UPDATE_1(prob);
+ prob = probs + IsRep + state;
+ IF_BIT_0(prob)
+ {
+ UPDATE_0(prob);
+ state += kNumStates;
+ prob = probs + LenCoder;
+ }
+ else
+ {
+ UPDATE_1(prob);
+ /*
+ // that case was checked before with kBadRepCode
+ if (checkDicSize == 0 && processedPos == 0)
+ return SZ_ERROR_DATA;
+ */
+ prob = probs + IsRepG0 + state;
+ IF_BIT_0(prob)
+ {
+ UPDATE_0(prob);
+ prob = probs + IsRep0Long + COMBINED_PS_STATE;
+ IF_BIT_0(prob)
+ {
+ UPDATE_0(prob);
+ dic[dicPos] = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)];
+ dicPos++;
+ processedPos++;
+ state = state < kNumLitStates ? 9 : 11;
+ continue;
+ }
+ UPDATE_1(prob);
+ }
+ else
+ {
+ UInt32 distance;
+ UPDATE_1(prob);
+ prob = probs + IsRepG1 + state;
+ IF_BIT_0(prob)
+ {
+ UPDATE_0(prob);
+ distance = rep1;
+ }
+ else
+ {
+ UPDATE_1(prob);
+ prob = probs + IsRepG2 + state;
+ IF_BIT_0(prob)
+ {
+ UPDATE_0(prob);
+ distance = rep2;
+ }
+ else
+ {
+ UPDATE_1(prob);
+ distance = rep3;
+ rep3 = rep2;
+ }
+ rep2 = rep1;
+ }
+ rep1 = rep0;
+ rep0 = distance;
+ }
+ state = state < kNumLitStates ? 8 : 11;
+ prob = probs + RepLenCoder;
+ }
+
+ #ifdef _LZMA_SIZE_OPT
+ {
+ unsigned lim, offset;
+ CLzmaProb *probLen = prob + LenChoice;
+ IF_BIT_0(probLen)
+ {
+ UPDATE_0(probLen);
+ probLen = prob + LenLow + GET_LEN_STATE;
+ offset = 0;
+ lim = (1 << kLenNumLowBits);
+ }
+ else
+ {
+ UPDATE_1(probLen);
+ probLen = prob + LenChoice2;
+ IF_BIT_0(probLen)
+ {
+ UPDATE_0(probLen);
+ probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits);
+ offset = kLenNumLowSymbols;
+ lim = (1 << kLenNumLowBits);
+ }
+ else
+ {
+ UPDATE_1(probLen);
+ probLen = prob + LenHigh;
+ offset = kLenNumLowSymbols * 2;
+ lim = (1 << kLenNumHighBits);
+ }
+ }
+ TREE_DECODE(probLen, lim, len);
+ len += offset;
+ }
+ #else
+ {
+ CLzmaProb *probLen = prob + LenChoice;
+ IF_BIT_0(probLen)
+ {
+ UPDATE_0(probLen);
+ probLen = prob + LenLow + GET_LEN_STATE;
+ len = 1;
+ TREE_GET_BIT(probLen, len);
+ TREE_GET_BIT(probLen, len);
+ TREE_GET_BIT(probLen, len);
+ len -= 8;
+ }
+ else
+ {
+ UPDATE_1(probLen);
+ probLen = prob + LenChoice2;
+ IF_BIT_0(probLen)
+ {
+ UPDATE_0(probLen);
+ probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits);
+ len = 1;
+ TREE_GET_BIT(probLen, len);
+ TREE_GET_BIT(probLen, len);
+ TREE_GET_BIT(probLen, len);
+ }
+ else
+ {
+ UPDATE_1(probLen);
+ probLen = prob + LenHigh;
+ TREE_DECODE(probLen, (1 << kLenNumHighBits), len);
+ len += kLenNumLowSymbols * 2;
+ }
+ }
+ }
+ #endif
+
+ if (state >= kNumStates)
+ {
+ UInt32 distance;
+ prob = probs + PosSlot +
+ ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits);
+ TREE_6_DECODE(prob, distance);
+ if (distance >= kStartPosModelIndex)
+ {
+ unsigned posSlot = (unsigned)distance;
+ unsigned numDirectBits = (unsigned)(((distance >> 1) - 1));
+ distance = (2 | (distance & 1));
+ if (posSlot < kEndPosModelIndex)
+ {
+ distance <<= numDirectBits;
+ prob = probs + SpecPos;
+ {
+ UInt32 m = 1;
+ distance++;
+ do
+ {
+ REV_BIT_VAR(prob, distance, m);
+ }
+ while (--numDirectBits);
+ distance -= m;
+ }
+ }
+ else
+ {
+ numDirectBits -= kNumAlignBits;
+ do
+ {
+ NORMALIZE
+ range >>= 1;
+
+ {
+ UInt32 t;
+ code -= range;
+ t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */
+ distance = (distance << 1) + (t + 1);
+ code += range & t;
+ }
+ /*
+ distance <<= 1;
+ if (code >= range)
+ {
+ code -= range;
+ distance |= 1;
+ }
+ */
+ }
+ while (--numDirectBits);
+ prob = probs + Align;
+ distance <<= kNumAlignBits;
+ {
+ unsigned i = 1;
+ REV_BIT_CONST(prob, i, 1);
+ REV_BIT_CONST(prob, i, 2);
+ REV_BIT_CONST(prob, i, 4);
+ REV_BIT_LAST (prob, i, 8);
+ distance |= i;
+ }
+ if (distance == (UInt32)0xFFFFFFFF)
+ {
+ len = kMatchSpecLenStart;
+ state -= kNumStates;
+ break;
+ }
+ }
+ }
+
+ rep3 = rep2;
+ rep2 = rep1;
+ rep1 = rep0;
+ rep0 = distance + 1;
+ state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3;
+ if (distance >= (checkDicSize == 0 ? processedPos: checkDicSize))
+ {
+ p->dicPos = dicPos;
+ return SZ_ERROR_DATA;
+ }
+ }
+
+ len += kMatchMinLen;
+
+ {
+ SizeT rem;
+ unsigned curLen;
+ SizeT pos;
+
+ if ((rem = limit - dicPos) == 0)
+ {
+ p->dicPos = dicPos;
+ return SZ_ERROR_DATA;
+ }
+
+ curLen = ((rem < len) ? (unsigned)rem : len);
+ pos = dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0);
+
+ processedPos += (UInt32)curLen;
+
+ len -= curLen;
+ if (curLen <= dicBufSize - pos)
+ {
+ Byte *dest = dic + dicPos;
+ ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos;
+ const Byte *lim = dest + curLen;
+ dicPos += (SizeT)curLen;
+ do
+ *(dest) = (Byte)*(dest + src);
+ while (++dest != lim);
+ }
+ else
+ {
+ do
+ {
+ dic[dicPos++] = dic[pos];
+ if (++pos == dicBufSize)
+ pos = 0;
+ }
+ while (--curLen != 0);
+ }
+ }
+ }
+ }
+ while (dicPos < limit && buf < bufLimit);
+
+ NORMALIZE;
+
+ p->buf = buf;
+ p->range = range;
+ p->code = code;
+ p->remainLen = (UInt32)len;
+ p->dicPos = dicPos;
+ p->processedPos = processedPos;
+ p->reps[0] = rep0;
+ p->reps[1] = rep1;
+ p->reps[2] = rep2;
+ p->reps[3] = rep3;
+ p->state = (UInt32)state;
+
+ return SZ_OK;
+}
+#endif
+
+static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit)
+{
+ if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart)
+ {
+ Byte *dic = p->dic;
+ SizeT dicPos = p->dicPos;
+ SizeT dicBufSize = p->dicBufSize;
+ unsigned len = (unsigned)p->remainLen;
+ SizeT rep0 = p->reps[0]; /* we use SizeT to avoid the BUG of VC14 for AMD64 */
+ SizeT rem = limit - dicPos;
+ if (rem < len)
+ len = (unsigned)(rem);
+
+ if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len)
+ p->checkDicSize = p->prop.dicSize;
+
+ p->processedPos += (UInt32)len;
+ p->remainLen -= (UInt32)len;
+ while (len != 0)
+ {
+ len--;
+ dic[dicPos] = dic[dicPos - rep0 + (dicPos < rep0 ? dicBufSize : 0)];
+ dicPos++;
+ }
+ p->dicPos = dicPos;
+ }
+}
+
+
+#define kRange0 0xFFFFFFFF
+#define kBound0 ((kRange0 >> kNumBitModelTotalBits) << (kNumBitModelTotalBits - 1))
+#define kBadRepCode (kBound0 + (((kRange0 - kBound0) >> kNumBitModelTotalBits) << (kNumBitModelTotalBits - 1)))
+#if kBadRepCode != (0xC0000000 - 0x400)
+ #error Stop_Compiling_Bad_LZMA_Check
+#endif
+
+static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit)
+{
+ do
+ {
+ SizeT limit2 = limit;
+ if (p->checkDicSize == 0)
+ {
+ UInt32 rem = p->prop.dicSize - p->processedPos;
+ if (limit - p->dicPos > rem)
+ limit2 = p->dicPos + rem;
+
+ if (p->processedPos == 0)
+ if (p->code >= kBadRepCode)
+ return SZ_ERROR_DATA;
+ }
+
+ RINOK(LZMA_DECODE_REAL(p, limit2, bufLimit));
+
+ if (p->checkDicSize == 0 && p->processedPos >= p->prop.dicSize)
+ p->checkDicSize = p->prop.dicSize;
+
+ LzmaDec_WriteRem(p, limit);
+ }
+ while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart);
+
+ return 0;
+}
+
+typedef enum
+{
+ DUMMY_ERROR, /* unexpected end of input stream */
+ DUMMY_LIT,
+ DUMMY_MATCH,
+ DUMMY_REP
+} ELzmaDummy;
+
+static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, SizeT inSize)
+{
+ UInt32 range = p->range;
+ UInt32 code = p->code;
+ const Byte *bufLimit = buf + inSize;
+ const CLzmaProb *probs = GET_PROBS;
+ unsigned state = (unsigned)p->state;
+ ELzmaDummy res;
+
+ {
+ const CLzmaProb *prob;
+ UInt32 bound;
+ unsigned ttt;
+ unsigned posState = CALC_POS_STATE(p->processedPos, (1 << p->prop.pb) - 1);
+
+ prob = probs + IsMatch + COMBINED_PS_STATE;
+ IF_BIT_0_CHECK(prob)
+ {
+ UPDATE_0_CHECK
+
+ /* if (bufLimit - buf >= 7) return DUMMY_LIT; */
+
+ prob = probs + Literal;
+ if (p->checkDicSize != 0 || p->processedPos != 0)
+ prob += ((UInt32)LZMA_LIT_SIZE *
+ ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) +
+ (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc))));
+
+ if (state < kNumLitStates)
+ {
+ unsigned symbol = 1;
+ do { GET_BIT_CHECK(prob + symbol, symbol) } while (symbol < 0x100);
+ }
+ else
+ {
+ unsigned matchByte = p->dic[p->dicPos - p->reps[0] +
+ (p->dicPos < p->reps[0] ? p->dicBufSize : 0)];
+ unsigned offs = 0x100;
+ unsigned symbol = 1;
+ do
+ {
+ unsigned bit;
+ const CLzmaProb *probLit;
+ matchByte += matchByte;
+ bit = offs;
+ offs &= matchByte;
+ probLit = prob + (offs + bit + symbol);
+ GET_BIT2_CHECK(probLit, symbol, offs ^= bit; , ; )
+ }
+ while (symbol < 0x100);
+ }
+ res = DUMMY_LIT;
+ }
+ else
+ {
+ unsigned len;
+ UPDATE_1_CHECK;
+
+ prob = probs + IsRep + state;
+ IF_BIT_0_CHECK(prob)
+ {
+ UPDATE_0_CHECK;
+ state = 0;
+ prob = probs + LenCoder;
+ res = DUMMY_MATCH;
+ }
+ else
+ {
+ UPDATE_1_CHECK;
+ res = DUMMY_REP;
+ prob = probs + IsRepG0 + state;
+ IF_BIT_0_CHECK(prob)
+ {
+ UPDATE_0_CHECK;
+ prob = probs + IsRep0Long + COMBINED_PS_STATE;
+ IF_BIT_0_CHECK(prob)
+ {
+ UPDATE_0_CHECK;
+ NORMALIZE_CHECK;
+ return DUMMY_REP;
+ }
+ else
+ {
+ UPDATE_1_CHECK;
+ }
+ }
+ else
+ {
+ UPDATE_1_CHECK;
+ prob = probs + IsRepG1 + state;
+ IF_BIT_0_CHECK(prob)
+ {
+ UPDATE_0_CHECK;
+ }
+ else
+ {
+ UPDATE_1_CHECK;
+ prob = probs + IsRepG2 + state;
+ IF_BIT_0_CHECK(prob)
+ {
+ UPDATE_0_CHECK;
+ }
+ else
+ {
+ UPDATE_1_CHECK;
+ }
+ }
+ }
+ state = kNumStates;
+ prob = probs + RepLenCoder;
+ }
+ {
+ unsigned limit, offset;
+ const CLzmaProb *probLen = prob + LenChoice;
+ IF_BIT_0_CHECK(probLen)
+ {
+ UPDATE_0_CHECK;
+ probLen = prob + LenLow + GET_LEN_STATE;
+ offset = 0;
+ limit = 1 << kLenNumLowBits;
+ }
+ else
+ {
+ UPDATE_1_CHECK;
+ probLen = prob + LenChoice2;
+ IF_BIT_0_CHECK(probLen)
+ {
+ UPDATE_0_CHECK;
+ probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits);
+ offset = kLenNumLowSymbols;
+ limit = 1 << kLenNumLowBits;
+ }
+ else
+ {
+ UPDATE_1_CHECK;
+ probLen = prob + LenHigh;
+ offset = kLenNumLowSymbols * 2;
+ limit = 1 << kLenNumHighBits;
+ }
+ }
+ TREE_DECODE_CHECK(probLen, limit, len);
+ len += offset;
+ }
+
+ if (state < 4)
+ {
+ unsigned posSlot;
+ prob = probs + PosSlot +
+ ((len < kNumLenToPosStates - 1 ? len : kNumLenToPosStates - 1) <<
+ kNumPosSlotBits);
+ TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot);
+ if (posSlot >= kStartPosModelIndex)
+ {
+ unsigned numDirectBits = ((posSlot >> 1) - 1);
+
+ /* if (bufLimit - buf >= 8) return DUMMY_MATCH; */
+
+ if (posSlot < kEndPosModelIndex)
+ {
+ prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits);
+ }
+ else
+ {
+ numDirectBits -= kNumAlignBits;
+ do
+ {
+ NORMALIZE_CHECK
+ range >>= 1;
+ code -= range & (((code - range) >> 31) - 1);
+ /* if (code >= range) code -= range; */
+ }
+ while (--numDirectBits);
+ prob = probs + Align;
+ numDirectBits = kNumAlignBits;
+ }
+ {
+ unsigned i = 1;
+ unsigned m = 1;
+ do
+ {
+ REV_BIT_CHECK(prob, i, m);
+ }
+ while (--numDirectBits);
+ }
+ }
+ }
+ }
+ }
+ NORMALIZE_CHECK;
+ return res;
+}
+
+
+void LzmaDec_InitDicAndState(CLzmaDec *p, BoolInt initDic, BoolInt initState)
+{
+ p->remainLen = kMatchSpecLenStart + 1;
+ p->tempBufSize = 0;
+
+ if (initDic)
+ {
+ p->processedPos = 0;
+ p->checkDicSize = 0;
+ p->remainLen = kMatchSpecLenStart + 2;
+ }
+ if (initState)
+ p->remainLen = kMatchSpecLenStart + 2;
+}
+
+void LzmaDec_Init(CLzmaDec *p)
+{
+ p->dicPos = 0;
+ LzmaDec_InitDicAndState(p, True, True);
+}
+
+
+SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen,
+ ELzmaFinishMode finishMode, ELzmaStatus *status)
+{
+ SizeT inSize = *srcLen;
+ (*srcLen) = 0;
+
+ *status = LZMA_STATUS_NOT_SPECIFIED;
+
+ if (p->remainLen > kMatchSpecLenStart)
+ {
+ for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--)
+ p->tempBuf[p->tempBufSize++] = *src++;
+ if (p->tempBufSize != 0 && p->tempBuf[0] != 0)
+ return SZ_ERROR_DATA;
+ if (p->tempBufSize < RC_INIT_SIZE)
+ {
+ *status = LZMA_STATUS_NEEDS_MORE_INPUT;
+ return SZ_OK;
+ }
+ p->code =
+ ((UInt32)p->tempBuf[1] << 24)
+ | ((UInt32)p->tempBuf[2] << 16)
+ | ((UInt32)p->tempBuf[3] << 8)
+ | ((UInt32)p->tempBuf[4]);
+ p->range = 0xFFFFFFFF;
+ p->tempBufSize = 0;
+
+ if (p->remainLen > kMatchSpecLenStart + 1)
+ {
+ SizeT numProbs = LzmaProps_GetNumProbs(&p->prop);
+ SizeT i;
+ CLzmaProb *probs = p->probs;
+ for (i = 0; i < numProbs; i++)
+ probs[i] = kBitModelTotal >> 1;
+ p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1;
+ p->state = 0;
+ }
+
+ p->remainLen = 0;
+ }
+
+ LzmaDec_WriteRem(p, dicLimit);
+
+ while (p->remainLen != kMatchSpecLenStart)
+ {
+ int checkEndMarkNow = 0;
+
+ if (p->dicPos >= dicLimit)
+ {
+ if (p->remainLen == 0 && p->code == 0)
+ {
+ *status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK;
+ return SZ_OK;
+ }
+ if (finishMode == LZMA_FINISH_ANY)
+ {
+ *status = LZMA_STATUS_NOT_FINISHED;
+ return SZ_OK;
+ }
+ if (p->remainLen != 0)
+ {
+ *status = LZMA_STATUS_NOT_FINISHED;
+ return SZ_ERROR_DATA;
+ }
+ checkEndMarkNow = 1;
+ }
+
+ if (p->tempBufSize == 0)
+ {
+ SizeT processed;
+ const Byte *bufLimit;
+ if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow)
+ {
+ int dummyRes = LzmaDec_TryDummy(p, src, inSize);
+ if (dummyRes == DUMMY_ERROR)
+ {
+ memcpy(p->tempBuf, src, inSize);
+ p->tempBufSize = (unsigned)inSize;
+ (*srcLen) += inSize;
+ *status = LZMA_STATUS_NEEDS_MORE_INPUT;
+ return SZ_OK;
+ }
+ if (checkEndMarkNow && dummyRes != DUMMY_MATCH)
+ {
+ *status = LZMA_STATUS_NOT_FINISHED;
+ return SZ_ERROR_DATA;
+ }
+ bufLimit = src;
+ }
+ else
+ bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX;
+ p->buf = src;
+ if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0)
+ return SZ_ERROR_DATA;
+ processed = (SizeT)(p->buf - src);
+ (*srcLen) += processed;
+ src += processed;
+ inSize -= processed;
+ }
+ else
+ {
+ unsigned rem = p->tempBufSize, lookAhead = 0;
+ while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize)
+ p->tempBuf[rem++] = src[lookAhead++];
+ p->tempBufSize = rem;
+ if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow)
+ {
+ int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, (SizeT)rem);
+ if (dummyRes == DUMMY_ERROR)
+ {
+ (*srcLen) += (SizeT)lookAhead;
+ *status = LZMA_STATUS_NEEDS_MORE_INPUT;
+ return SZ_OK;
+ }
+ if (checkEndMarkNow && dummyRes != DUMMY_MATCH)
+ {
+ *status = LZMA_STATUS_NOT_FINISHED;
+ return SZ_ERROR_DATA;
+ }
+ }
+ p->buf = p->tempBuf;
+ if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0)
+ return SZ_ERROR_DATA;
+
+ {
+ unsigned kkk = (unsigned)(p->buf - p->tempBuf);
+ if (rem < kkk)
+ return SZ_ERROR_FAIL; /* some internal error */
+ rem -= kkk;
+ if (lookAhead < rem)
+ return SZ_ERROR_FAIL; /* some internal error */
+ lookAhead -= rem;
+ }
+ (*srcLen) += (SizeT)lookAhead;
+ src += lookAhead;
+ inSize -= (SizeT)lookAhead;
+ p->tempBufSize = 0;
+ }
+ }
+
+ if (p->code != 0)
+ return SZ_ERROR_DATA;
+ *status = LZMA_STATUS_FINISHED_WITH_MARK;
+ return SZ_OK;
+}
+
+
+SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status)
+{
+ SizeT outSize = *destLen;
+ SizeT inSize = *srcLen;
+ *srcLen = *destLen = 0;
+ for (;;)
+ {
+ SizeT inSizeCur = inSize, outSizeCur, dicPos;
+ ELzmaFinishMode curFinishMode;
+ SRes res;
+ if (p->dicPos == p->dicBufSize)
+ p->dicPos = 0;
+ dicPos = p->dicPos;
+ if (outSize > p->dicBufSize - dicPos)
+ {
+ outSizeCur = p->dicBufSize;
+ curFinishMode = LZMA_FINISH_ANY;
+ }
+ else
+ {
+ outSizeCur = dicPos + outSize;
+ curFinishMode = finishMode;
+ }
+
+ res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status);
+ src += inSizeCur;
+ inSize -= inSizeCur;
+ *srcLen += inSizeCur;
+ outSizeCur = p->dicPos - dicPos;
+ memcpy(dest, p->dic + dicPos, outSizeCur);
+ dest += outSizeCur;
+ outSize -= outSizeCur;
+ *destLen += outSizeCur;
+ if (res != 0)
+ return res;
+ if (outSizeCur == 0 || outSize == 0)
+ return SZ_OK;
+ }
+}
+
+void LzmaDec_FreeProbs(CLzmaDec *p, ISzAllocPtr alloc)
+{
+ ISzAlloc_Free(alloc, p->probs);
+ p->probs = NULL;
+}
+
+static void LzmaDec_FreeDict(CLzmaDec *p, ISzAllocPtr alloc)
+{
+ ISzAlloc_Free(alloc, p->dic);
+ p->dic = NULL;
+}
+
+void LzmaDec_Free(CLzmaDec *p, ISzAllocPtr alloc)
+{
+ LzmaDec_FreeProbs(p, alloc);
+ LzmaDec_FreeDict(p, alloc);
+}
+
+SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size)
+{
+ UInt32 dicSize;
+ Byte d;
+
+ if (size < LZMA_PROPS_SIZE)
+ return SZ_ERROR_UNSUPPORTED;
+ else
+ dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24);
+
+ if (dicSize < LZMA_DIC_MIN)
+ dicSize = LZMA_DIC_MIN;
+ p->dicSize = dicSize;
+
+ d = data[0];
+ if (d >= (9 * 5 * 5))
+ return SZ_ERROR_UNSUPPORTED;
+
+ p->lc = (Byte)(d % 9);
+ d /= 9;
+ p->pb = (Byte)(d / 5);
+ p->lp = (Byte)(d % 5);
+
+ return SZ_OK;
+}
+
+static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAllocPtr alloc)
+{
+ UInt32 numProbs = LzmaProps_GetNumProbs(propNew);
+ if (!p->probs || numProbs != p->numProbs)
+ {
+ LzmaDec_FreeProbs(p, alloc);
+ p->probs = (CLzmaProb *)ISzAlloc_Alloc(alloc, numProbs * sizeof(CLzmaProb));
+ if (!p->probs)
+ return SZ_ERROR_MEM;
+ p->probs_1664 = p->probs + 1664;
+ p->numProbs = numProbs;
+ }
+ return SZ_OK;
+}
+
+SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc)
+{
+ CLzmaProps propNew;
+ RINOK(LzmaProps_Decode(&propNew, props, propsSize));
+ RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
+ p->prop = propNew;
+ return SZ_OK;
+}
+
+SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc)
+{
+ CLzmaProps propNew;
+ SizeT dicBufSize;
+ RINOK(LzmaProps_Decode(&propNew, props, propsSize));
+ RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc));
+
+ {
+ UInt32 dictSize = propNew.dicSize;
+ SizeT mask = ((UInt32)1 << 12) - 1;
+ if (dictSize >= ((UInt32)1 << 30)) mask = ((UInt32)1 << 22) - 1;
+ else if (dictSize >= ((UInt32)1 << 22)) mask = ((UInt32)1 << 20) - 1;;
+ dicBufSize = ((SizeT)dictSize + mask) & ~mask;
+ if (dicBufSize < dictSize)
+ dicBufSize = dictSize;
+ }
+
+ if (!p->dic || dicBufSize != p->dicBufSize)
+ {
+ LzmaDec_FreeDict(p, alloc);
+ p->dic = (Byte *)ISzAlloc_Alloc(alloc, dicBufSize);
+ if (!p->dic)
+ {
+ LzmaDec_FreeProbs(p, alloc);
+ return SZ_ERROR_MEM;
+ }
+ }
+ p->dicBufSize = dicBufSize;
+ p->prop = propNew;
+ return SZ_OK;
+}
+
+SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
+ const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode,
+ ELzmaStatus *status, ISzAllocPtr alloc)
+{
+ CLzmaDec p;
+ SRes res;
+ SizeT outSize = *destLen, inSize = *srcLen;
+ *destLen = *srcLen = 0;
+ *status = LZMA_STATUS_NOT_SPECIFIED;
+ if (inSize < RC_INIT_SIZE)
+ return SZ_ERROR_INPUT_EOF;
+ LzmaDec_Construct(&p);
+ RINOK(LzmaDec_AllocateProbs(&p, propData, propSize, alloc));
+ p.dic = dest;
+ p.dicBufSize = outSize;
+ LzmaDec_Init(&p);
+ *srcLen = inSize;
+ res = LzmaDec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status);
+ *destLen = p.dicPos;
+ if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT)
+ res = SZ_ERROR_INPUT_EOF;
+ LzmaDec_FreeProbs(&p, alloc);
+ return res;
+}
diff --git a/contrib/libs/lzmasdk/LzmaDec.h b/contrib/libs/lzmasdk/LzmaDec.h
index 1f0927ab13..28ce60c3ea 100644
--- a/contrib/libs/lzmasdk/LzmaDec.h
+++ b/contrib/libs/lzmasdk/LzmaDec.h
@@ -1,234 +1,234 @@
-/* LzmaDec.h -- LZMA Decoder
-2018-04-21 : Igor Pavlov : Public domain */
-
-#ifndef __LZMA_DEC_H
-#define __LZMA_DEC_H
-
-#include "7zTypes.h"
-
-EXTERN_C_BEGIN
-
-/* #define _LZMA_PROB32 */
-/* _LZMA_PROB32 can increase the speed on some CPUs,
- but memory usage for CLzmaDec::probs will be doubled in that case */
-
-typedef
-#ifdef _LZMA_PROB32
- UInt32
-#else
- UInt16
-#endif
- CLzmaProb;
-
-
-/* ---------- LZMA Properties ---------- */
-
-#define LZMA_PROPS_SIZE 5
-
-typedef struct _CLzmaProps
-{
- Byte lc;
- Byte lp;
- Byte pb;
- Byte _pad_;
- UInt32 dicSize;
-} CLzmaProps;
-
-/* LzmaProps_Decode - decodes properties
-Returns:
- SZ_OK
- SZ_ERROR_UNSUPPORTED - Unsupported properties
-*/
-
-SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size);
-
-
-/* ---------- LZMA Decoder state ---------- */
-
-/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case.
- Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */
-
-#define LZMA_REQUIRED_INPUT_MAX 20
-
-typedef struct
-{
- /* Don't change this structure. ASM code can use it. */
- CLzmaProps prop;
- CLzmaProb *probs;
- CLzmaProb *probs_1664;
- Byte *dic;
- SizeT dicBufSize;
- SizeT dicPos;
- const Byte *buf;
- UInt32 range;
- UInt32 code;
- UInt32 processedPos;
- UInt32 checkDicSize;
- UInt32 reps[4];
- UInt32 state;
- UInt32 remainLen;
-
- UInt32 numProbs;
- unsigned tempBufSize;
- Byte tempBuf[LZMA_REQUIRED_INPUT_MAX];
-} CLzmaDec;
-
-#define LzmaDec_Construct(p) { (p)->dic = NULL; (p)->probs = NULL; }
-
-void LzmaDec_Init(CLzmaDec *p);
-
-/* There are two types of LZMA streams:
- - Stream with end mark. That end mark adds about 6 bytes to compressed size.
- - Stream without end mark. You must know exact uncompressed size to decompress such stream. */
-
-typedef enum
-{
- LZMA_FINISH_ANY, /* finish at any point */
- LZMA_FINISH_END /* block must be finished at the end */
-} ELzmaFinishMode;
-
-/* ELzmaFinishMode has meaning only if the decoding reaches output limit !!!
-
- You must use LZMA_FINISH_END, when you know that current output buffer
- covers last bytes of block. In other cases you must use LZMA_FINISH_ANY.
-
- If LZMA decoder sees end marker before reaching output limit, it returns SZ_OK,
- and output value of destLen will be less than output buffer size limit.
- You can check status result also.
-
- You can use multiple checks to test data integrity after full decompression:
- 1) Check Result and "status" variable.
- 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize.
- 3) Check that output(srcLen) = compressedSize, if you know real compressedSize.
- You must use correct finish mode in that case. */
-
-typedef enum
-{
- LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */
- LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */
- LZMA_STATUS_NOT_FINISHED, /* stream was not finished */
- LZMA_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */
- LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK /* there is probability that stream was finished without end mark */
-} ELzmaStatus;
-
-/* ELzmaStatus is used only as output value for function call */
-
-
-/* ---------- Interfaces ---------- */
-
-/* There are 3 levels of interfaces:
- 1) Dictionary Interface
- 2) Buffer Interface
- 3) One Call Interface
- You can select any of these interfaces, but don't mix functions from different
- groups for same object. */
-
-
-/* There are two variants to allocate state for Dictionary Interface:
- 1) LzmaDec_Allocate / LzmaDec_Free
- 2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs
- You can use variant 2, if you set dictionary buffer manually.
- For Buffer Interface you must always use variant 1.
-
-LzmaDec_Allocate* can return:
- SZ_OK
- SZ_ERROR_MEM - Memory allocation error
- SZ_ERROR_UNSUPPORTED - Unsupported properties
-*/
-
-SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc);
-void LzmaDec_FreeProbs(CLzmaDec *p, ISzAllocPtr alloc);
-
-SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc);
-void LzmaDec_Free(CLzmaDec *p, ISzAllocPtr alloc);
-
-/* ---------- Dictionary Interface ---------- */
-
-/* You can use it, if you want to eliminate the overhead for data copying from
- dictionary to some other external buffer.
- You must work with CLzmaDec variables directly in this interface.
-
- STEPS:
- LzmaDec_Construct()
- LzmaDec_Allocate()
- for (each new stream)
- {
- LzmaDec_Init()
- while (it needs more decompression)
- {
- LzmaDec_DecodeToDic()
- use data from CLzmaDec::dic and update CLzmaDec::dicPos
- }
- }
- LzmaDec_Free()
-*/
-
-/* LzmaDec_DecodeToDic
-
- The decoding to internal dictionary buffer (CLzmaDec::dic).
- You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!!
-
-finishMode:
- It has meaning only if the decoding reaches output limit (dicLimit).
- LZMA_FINISH_ANY - Decode just dicLimit bytes.
- LZMA_FINISH_END - Stream must be finished after dicLimit.
-
-Returns:
- SZ_OK
- status:
- LZMA_STATUS_FINISHED_WITH_MARK
- LZMA_STATUS_NOT_FINISHED
- LZMA_STATUS_NEEDS_MORE_INPUT
- LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
- SZ_ERROR_DATA - Data error
-*/
-
-SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit,
- const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
-
-
-/* ---------- Buffer Interface ---------- */
-
-/* It's zlib-like interface.
- See LzmaDec_DecodeToDic description for information about STEPS and return results,
- but you must use LzmaDec_DecodeToBuf instead of LzmaDec_DecodeToDic and you don't need
- to work with CLzmaDec variables manually.
-
-finishMode:
- It has meaning only if the decoding reaches output limit (*destLen).
- LZMA_FINISH_ANY - Decode just destLen bytes.
- LZMA_FINISH_END - Stream must be finished after (*destLen).
-*/
-
-SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen,
- const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
-
-
-/* ---------- One Call Interface ---------- */
-
-/* LzmaDecode
-
-finishMode:
- It has meaning only if the decoding reaches output limit (*destLen).
- LZMA_FINISH_ANY - Decode just destLen bytes.
- LZMA_FINISH_END - Stream must be finished after (*destLen).
-
-Returns:
- SZ_OK
- status:
- LZMA_STATUS_FINISHED_WITH_MARK
- LZMA_STATUS_NOT_FINISHED
- LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
- SZ_ERROR_DATA - Data error
- SZ_ERROR_MEM - Memory allocation error
- SZ_ERROR_UNSUPPORTED - Unsupported properties
- SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
-*/
-
-SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
- const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode,
- ELzmaStatus *status, ISzAllocPtr alloc);
-
-EXTERN_C_END
-
-#endif
+/* LzmaDec.h -- LZMA Decoder
+2018-04-21 : Igor Pavlov : Public domain */
+
+#ifndef __LZMA_DEC_H
+#define __LZMA_DEC_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+/* #define _LZMA_PROB32 */
+/* _LZMA_PROB32 can increase the speed on some CPUs,
+ but memory usage for CLzmaDec::probs will be doubled in that case */
+
+typedef
+#ifdef _LZMA_PROB32
+ UInt32
+#else
+ UInt16
+#endif
+ CLzmaProb;
+
+
+/* ---------- LZMA Properties ---------- */
+
+#define LZMA_PROPS_SIZE 5
+
+typedef struct _CLzmaProps
+{
+ Byte lc;
+ Byte lp;
+ Byte pb;
+ Byte _pad_;
+ UInt32 dicSize;
+} CLzmaProps;
+
+/* LzmaProps_Decode - decodes properties
+Returns:
+ SZ_OK
+ SZ_ERROR_UNSUPPORTED - Unsupported properties
+*/
+
+SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size);
+
+
+/* ---------- LZMA Decoder state ---------- */
+
+/* LZMA_REQUIRED_INPUT_MAX = number of required input bytes for worst case.
+ Num bits = log2((2^11 / 31) ^ 22) + 26 < 134 + 26 = 160; */
+
+#define LZMA_REQUIRED_INPUT_MAX 20
+
+typedef struct
+{
+ /* Don't change this structure. ASM code can use it. */
+ CLzmaProps prop;
+ CLzmaProb *probs;
+ CLzmaProb *probs_1664;
+ Byte *dic;
+ SizeT dicBufSize;
+ SizeT dicPos;
+ const Byte *buf;
+ UInt32 range;
+ UInt32 code;
+ UInt32 processedPos;
+ UInt32 checkDicSize;
+ UInt32 reps[4];
+ UInt32 state;
+ UInt32 remainLen;
+
+ UInt32 numProbs;
+ unsigned tempBufSize;
+ Byte tempBuf[LZMA_REQUIRED_INPUT_MAX];
+} CLzmaDec;
+
+#define LzmaDec_Construct(p) { (p)->dic = NULL; (p)->probs = NULL; }
+
+void LzmaDec_Init(CLzmaDec *p);
+
+/* There are two types of LZMA streams:
+ - Stream with end mark. That end mark adds about 6 bytes to compressed size.
+ - Stream without end mark. You must know exact uncompressed size to decompress such stream. */
+
+typedef enum
+{
+ LZMA_FINISH_ANY, /* finish at any point */
+ LZMA_FINISH_END /* block must be finished at the end */
+} ELzmaFinishMode;
+
+/* ELzmaFinishMode has meaning only if the decoding reaches output limit !!!
+
+ You must use LZMA_FINISH_END, when you know that current output buffer
+ covers last bytes of block. In other cases you must use LZMA_FINISH_ANY.
+
+ If LZMA decoder sees end marker before reaching output limit, it returns SZ_OK,
+ and output value of destLen will be less than output buffer size limit.
+ You can check status result also.
+
+ You can use multiple checks to test data integrity after full decompression:
+ 1) Check Result and "status" variable.
+ 2) Check that output(destLen) = uncompressedSize, if you know real uncompressedSize.
+ 3) Check that output(srcLen) = compressedSize, if you know real compressedSize.
+ You must use correct finish mode in that case. */
+
+typedef enum
+{
+ LZMA_STATUS_NOT_SPECIFIED, /* use main error code instead */
+ LZMA_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */
+ LZMA_STATUS_NOT_FINISHED, /* stream was not finished */
+ LZMA_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */
+ LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK /* there is probability that stream was finished without end mark */
+} ELzmaStatus;
+
+/* ELzmaStatus is used only as output value for function call */
+
+
+/* ---------- Interfaces ---------- */
+
+/* There are 3 levels of interfaces:
+ 1) Dictionary Interface
+ 2) Buffer Interface
+ 3) One Call Interface
+ You can select any of these interfaces, but don't mix functions from different
+ groups for same object. */
+
+
+/* There are two variants to allocate state for Dictionary Interface:
+ 1) LzmaDec_Allocate / LzmaDec_Free
+ 2) LzmaDec_AllocateProbs / LzmaDec_FreeProbs
+ You can use variant 2, if you set dictionary buffer manually.
+ For Buffer Interface you must always use variant 1.
+
+LzmaDec_Allocate* can return:
+ SZ_OK
+ SZ_ERROR_MEM - Memory allocation error
+ SZ_ERROR_UNSUPPORTED - Unsupported properties
+*/
+
+SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc);
+void LzmaDec_FreeProbs(CLzmaDec *p, ISzAllocPtr alloc);
+
+SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc);
+void LzmaDec_Free(CLzmaDec *p, ISzAllocPtr alloc);
+
+/* ---------- Dictionary Interface ---------- */
+
+/* You can use it, if you want to eliminate the overhead for data copying from
+ dictionary to some other external buffer.
+ You must work with CLzmaDec variables directly in this interface.
+
+ STEPS:
+ LzmaDec_Construct()
+ LzmaDec_Allocate()
+ for (each new stream)
+ {
+ LzmaDec_Init()
+ while (it needs more decompression)
+ {
+ LzmaDec_DecodeToDic()
+ use data from CLzmaDec::dic and update CLzmaDec::dicPos
+ }
+ }
+ LzmaDec_Free()
+*/
+
+/* LzmaDec_DecodeToDic
+
+ The decoding to internal dictionary buffer (CLzmaDec::dic).
+ You must manually update CLzmaDec::dicPos, if it reaches CLzmaDec::dicBufSize !!!
+
+finishMode:
+ It has meaning only if the decoding reaches output limit (dicLimit).
+ LZMA_FINISH_ANY - Decode just dicLimit bytes.
+ LZMA_FINISH_END - Stream must be finished after dicLimit.
+
+Returns:
+ SZ_OK
+ status:
+ LZMA_STATUS_FINISHED_WITH_MARK
+ LZMA_STATUS_NOT_FINISHED
+ LZMA_STATUS_NEEDS_MORE_INPUT
+ LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
+ SZ_ERROR_DATA - Data error
+*/
+
+SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit,
+ const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
+
+
+/* ---------- Buffer Interface ---------- */
+
+/* It's zlib-like interface.
+ See LzmaDec_DecodeToDic description for information about STEPS and return results,
+ but you must use LzmaDec_DecodeToBuf instead of LzmaDec_DecodeToDic and you don't need
+ to work with CLzmaDec variables manually.
+
+finishMode:
+ It has meaning only if the decoding reaches output limit (*destLen).
+ LZMA_FINISH_ANY - Decode just destLen bytes.
+ LZMA_FINISH_END - Stream must be finished after (*destLen).
+*/
+
+SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen,
+ const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
+
+
+/* ---------- One Call Interface ---------- */
+
+/* LzmaDecode
+
+finishMode:
+ It has meaning only if the decoding reaches output limit (*destLen).
+ LZMA_FINISH_ANY - Decode just destLen bytes.
+ LZMA_FINISH_END - Stream must be finished after (*destLen).
+
+Returns:
+ SZ_OK
+ status:
+ LZMA_STATUS_FINISHED_WITH_MARK
+ LZMA_STATUS_NOT_FINISHED
+ LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK
+ SZ_ERROR_DATA - Data error
+ SZ_ERROR_MEM - Memory allocation error
+ SZ_ERROR_UNSUPPORTED - Unsupported properties
+ SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
+*/
+
+SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
+ const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode,
+ ELzmaStatus *status, ISzAllocPtr alloc);
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/LzmaEnc.c b/contrib/libs/lzmasdk/LzmaEnc.c
index 0ee2922390..a5a087f556 100644
--- a/contrib/libs/lzmasdk/LzmaEnc.c
+++ b/contrib/libs/lzmasdk/LzmaEnc.c
@@ -1,2984 +1,2984 @@
-/* LzmaEnc.c -- LZMA Encoder
-2019-01-10: Igor Pavlov : Public domain */
-
-#include "Precomp.h"
-
-#include <string.h>
-
-/* #define SHOW_STAT */
-/* #define SHOW_STAT2 */
-
-#if defined(SHOW_STAT) || defined(SHOW_STAT2)
-#include <stdio.h>
-#endif
-
-#include "LzmaEnc.h"
-
-#include "LzFind.h"
-#ifndef _7ZIP_ST
-#include "LzFindMt.h"
-#endif
-
-#ifdef SHOW_STAT
-static unsigned g_STAT_OFFSET = 0;
-#endif
-
-#define kLzmaMaxHistorySize ((UInt32)3 << 29)
-/* #define kLzmaMaxHistorySize ((UInt32)7 << 29) */
-
-#define kNumTopBits 24
-#define kTopValue ((UInt32)1 << kNumTopBits)
-
-#define kNumBitModelTotalBits 11
-#define kBitModelTotal (1 << kNumBitModelTotalBits)
-#define kNumMoveBits 5
-#define kProbInitValue (kBitModelTotal >> 1)
-
-#define kNumMoveReducingBits 4
-#define kNumBitPriceShiftBits 4
-#define kBitPrice (1 << kNumBitPriceShiftBits)
-
-#define REP_LEN_COUNT 64
-
-void LzmaEncProps_Init(CLzmaEncProps *p)
-{
- p->level = 5;
- p->dictSize = p->mc = 0;
- p->reduceSize = (UInt64)(Int64)-1;
- p->lc = p->lp = p->pb = p->algo = p->fb = p->btMode = p->numHashBytes = p->numThreads = -1;
- p->writeEndMark = 0;
-}
-
-void LzmaEncProps_Normalize(CLzmaEncProps *p)
-{
- int level = p->level;
- if (level < 0) level = 5;
- p->level = level;
-
- if (p->dictSize == 0) p->dictSize = (level <= 5 ? (1 << (level * 2 + 14)) : (level <= 7 ? (1 << 25) : (1 << 26)));
- if (p->dictSize > p->reduceSize)
- {
- unsigned i;
- UInt32 reduceSize = (UInt32)p->reduceSize;
- for (i = 11; i <= 30; i++)
- {
- if (reduceSize <= ((UInt32)2 << i)) { p->dictSize = ((UInt32)2 << i); break; }
- if (reduceSize <= ((UInt32)3 << i)) { p->dictSize = ((UInt32)3 << i); break; }
- }
- }
-
- if (p->lc < 0) p->lc = 3;
- if (p->lp < 0) p->lp = 0;
- if (p->pb < 0) p->pb = 2;
-
- if (p->algo < 0) p->algo = (level < 5 ? 0 : 1);
- if (p->fb < 0) p->fb = (level < 7 ? 32 : 64);
- if (p->btMode < 0) p->btMode = (p->algo == 0 ? 0 : 1);
- if (p->numHashBytes < 0) p->numHashBytes = 4;
- if (p->mc == 0) p->mc = (16 + (p->fb >> 1)) >> (p->btMode ? 0 : 1);
-
- if (p->numThreads < 0)
- p->numThreads =
- #ifndef _7ZIP_ST
- ((p->btMode && p->algo) ? 2 : 1);
- #else
- 1;
- #endif
-}
-
-UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2)
-{
- CLzmaEncProps props = *props2;
- LzmaEncProps_Normalize(&props);
- return props.dictSize;
-}
-
-#if (_MSC_VER >= 1400)
-/* BSR code is fast for some new CPUs */
-/* #define LZMA_LOG_BSR */
-#endif
-
-#ifdef LZMA_LOG_BSR
-
-#define kDicLogSizeMaxCompress 32
-
-#define BSR2_RET(pos, res) { unsigned long zz; _BitScanReverse(&zz, (pos)); res = (zz + zz) + ((pos >> (zz - 1)) & 1); }
-
-static unsigned GetPosSlot1(UInt32 pos)
-{
- unsigned res;
- BSR2_RET(pos, res);
- return res;
-}
-#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); }
-#define GetPosSlot(pos, res) { if (pos < 2) res = pos; else BSR2_RET(pos, res); }
-
-#else
-
-#define kNumLogBits (9 + sizeof(size_t) / 2)
-/* #define kNumLogBits (11 + sizeof(size_t) / 8 * 3) */
-
-#define kDicLogSizeMaxCompress ((kNumLogBits - 1) * 2 + 7)
-
-static void LzmaEnc_FastPosInit(Byte *g_FastPos)
-{
- unsigned slot;
- g_FastPos[0] = 0;
- g_FastPos[1] = 1;
- g_FastPos += 2;
-
- for (slot = 2; slot < kNumLogBits * 2; slot++)
- {
- size_t k = ((size_t)1 << ((slot >> 1) - 1));
- size_t j;
- for (j = 0; j < k; j++)
- g_FastPos[j] = (Byte)slot;
- g_FastPos += k;
- }
-}
-
-/* we can use ((limit - pos) >> 31) only if (pos < ((UInt32)1 << 31)) */
-/*
-#define BSR2_RET(pos, res) { unsigned zz = 6 + ((kNumLogBits - 1) & \
- (0 - (((((UInt32)1 << (kNumLogBits + 6)) - 1) - pos) >> 31))); \
- res = p->g_FastPos[pos >> zz] + (zz * 2); }
-*/
-
-/*
-#define BSR2_RET(pos, res) { unsigned zz = 6 + ((kNumLogBits - 1) & \
- (0 - (((((UInt32)1 << (kNumLogBits)) - 1) - (pos >> 6)) >> 31))); \
- res = p->g_FastPos[pos >> zz] + (zz * 2); }
-*/
-
-#define BSR2_RET(pos, res) { unsigned zz = (pos < (1 << (kNumLogBits + 6))) ? 6 : 6 + kNumLogBits - 1; \
- res = p->g_FastPos[pos >> zz] + (zz * 2); }
-
-/*
-#define BSR2_RET(pos, res) { res = (pos < (1 << (kNumLogBits + 6))) ? \
- p->g_FastPos[pos >> 6] + 12 : \
- p->g_FastPos[pos >> (6 + kNumLogBits - 1)] + (6 + (kNumLogBits - 1)) * 2; }
-*/
-
-#define GetPosSlot1(pos) p->g_FastPos[pos]
-#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); }
-#define GetPosSlot(pos, res) { if (pos < kNumFullDistances) res = p->g_FastPos[pos & (kNumFullDistances - 1)]; else BSR2_RET(pos, res); }
-
-#endif
-
-
-#define LZMA_NUM_REPS 4
-
-typedef UInt16 CState;
-typedef UInt16 CExtra;
-
-typedef struct
-{
- UInt32 price;
- CState state;
- CExtra extra;
- // 0 : normal
- // 1 : LIT : MATCH
- // > 1 : MATCH (extra-1) : LIT : REP0 (len)
- UInt32 len;
- UInt32 dist;
- UInt32 reps[LZMA_NUM_REPS];
-} COptimal;
-
-
-// 18.06
-#define kNumOpts (1 << 11)
-#define kPackReserve (kNumOpts * 8)
-// #define kNumOpts (1 << 12)
-// #define kPackReserve (1 + kNumOpts * 2)
-
-#define kNumLenToPosStates 4
-#define kNumPosSlotBits 6
-#define kDicLogSizeMin 0
-#define kDicLogSizeMax 32
-#define kDistTableSizeMax (kDicLogSizeMax * 2)
-
-#define kNumAlignBits 4
-#define kAlignTableSize (1 << kNumAlignBits)
-#define kAlignMask (kAlignTableSize - 1)
-
-#define kStartPosModelIndex 4
-#define kEndPosModelIndex 14
-#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
-
-typedef
-#ifdef _LZMA_PROB32
- UInt32
-#else
- UInt16
-#endif
- CLzmaProb;
-
-#define LZMA_PB_MAX 4
-#define LZMA_LC_MAX 8
-#define LZMA_LP_MAX 4
-
-#define LZMA_NUM_PB_STATES_MAX (1 << LZMA_PB_MAX)
-
-#define kLenNumLowBits 3
-#define kLenNumLowSymbols (1 << kLenNumLowBits)
-#define kLenNumHighBits 8
-#define kLenNumHighSymbols (1 << kLenNumHighBits)
-#define kLenNumSymbolsTotal (kLenNumLowSymbols * 2 + kLenNumHighSymbols)
-
-#define LZMA_MATCH_LEN_MIN 2
-#define LZMA_MATCH_LEN_MAX (LZMA_MATCH_LEN_MIN + kLenNumSymbolsTotal - 1)
-
-#define kNumStates 12
-
-
-typedef struct
-{
- CLzmaProb low[LZMA_NUM_PB_STATES_MAX << (kLenNumLowBits + 1)];
- CLzmaProb high[kLenNumHighSymbols];
-} CLenEnc;
-
-
-typedef struct
-{
- unsigned tableSize;
- UInt32 prices[LZMA_NUM_PB_STATES_MAX][kLenNumSymbolsTotal];
- // UInt32 prices1[LZMA_NUM_PB_STATES_MAX][kLenNumLowSymbols * 2];
- // UInt32 prices2[kLenNumSymbolsTotal];
-} CLenPriceEnc;
-
-#define GET_PRICE_LEN(p, posState, len) \
- ((p)->prices[posState][(size_t)(len) - LZMA_MATCH_LEN_MIN])
-
-/*
-#define GET_PRICE_LEN(p, posState, len) \
- ((p)->prices2[(size_t)(len) - 2] + ((p)->prices1[posState][((len) - 2) & (kLenNumLowSymbols * 2 - 1)] & (((len) - 2 - kLenNumLowSymbols * 2) >> 9)))
-*/
-
-typedef struct
-{
- UInt32 range;
- unsigned cache;
- UInt64 low;
- UInt64 cacheSize;
- Byte *buf;
- Byte *bufLim;
- Byte *bufBase;
- ISeqOutStream *outStream;
- UInt64 processed;
- SRes res;
-} CRangeEnc;
-
-
-typedef struct
-{
- CLzmaProb *litProbs;
-
- unsigned state;
- UInt32 reps[LZMA_NUM_REPS];
-
- CLzmaProb posAlignEncoder[1 << kNumAlignBits];
- CLzmaProb isRep[kNumStates];
- CLzmaProb isRepG0[kNumStates];
- CLzmaProb isRepG1[kNumStates];
- CLzmaProb isRepG2[kNumStates];
- CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX];
- CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX];
-
- CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits];
- CLzmaProb posEncoders[kNumFullDistances];
-
- CLenEnc lenProbs;
- CLenEnc repLenProbs;
-
-} CSaveState;
-
-
-typedef UInt32 CProbPrice;
-
-
-typedef struct
-{
- void *matchFinderObj;
- IMatchFinder matchFinder;
-
- unsigned optCur;
- unsigned optEnd;
-
- unsigned longestMatchLen;
- unsigned numPairs;
- UInt32 numAvail;
-
- unsigned state;
- unsigned numFastBytes;
- unsigned additionalOffset;
- UInt32 reps[LZMA_NUM_REPS];
- unsigned lpMask, pbMask;
- CLzmaProb *litProbs;
- CRangeEnc rc;
-
- UInt32 backRes;
-
- unsigned lc, lp, pb;
- unsigned lclp;
-
- BoolInt fastMode;
- BoolInt writeEndMark;
- BoolInt finished;
- BoolInt multiThread;
- BoolInt needInit;
- // BoolInt _maxMode;
-
- UInt64 nowPos64;
-
- unsigned matchPriceCount;
- // unsigned alignPriceCount;
- int repLenEncCounter;
-
- unsigned distTableSize;
-
- UInt32 dictSize;
- SRes result;
-
- #ifndef _7ZIP_ST
- BoolInt mtMode;
- // begin of CMatchFinderMt is used in LZ thread
- CMatchFinderMt matchFinderMt;
- // end of CMatchFinderMt is used in BT and HASH threads
- #endif
-
- CMatchFinder matchFinderBase;
-
- #ifndef _7ZIP_ST
- Byte pad[128];
- #endif
-
- // LZ thread
- CProbPrice ProbPrices[kBitModelTotal >> kNumMoveReducingBits];
-
- UInt32 matches[LZMA_MATCH_LEN_MAX * 2 + 2 + 1];
-
- UInt32 alignPrices[kAlignTableSize];
- UInt32 posSlotPrices[kNumLenToPosStates][kDistTableSizeMax];
- UInt32 distancesPrices[kNumLenToPosStates][kNumFullDistances];
-
- CLzmaProb posAlignEncoder[1 << kNumAlignBits];
- CLzmaProb isRep[kNumStates];
- CLzmaProb isRepG0[kNumStates];
- CLzmaProb isRepG1[kNumStates];
- CLzmaProb isRepG2[kNumStates];
- CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX];
- CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX];
- CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits];
- CLzmaProb posEncoders[kNumFullDistances];
-
- CLenEnc lenProbs;
- CLenEnc repLenProbs;
-
- #ifndef LZMA_LOG_BSR
- Byte g_FastPos[1 << kNumLogBits];
- #endif
-
- CLenPriceEnc lenEnc;
- CLenPriceEnc repLenEnc;
-
- COptimal opt[kNumOpts];
-
- CSaveState saveState;
-
- #ifndef _7ZIP_ST
- Byte pad2[128];
- #endif
-} CLzmaEnc;
-
-
-
-#define COPY_ARR(dest, src, arr) memcpy(dest->arr, src->arr, sizeof(src->arr));
-
-void LzmaEnc_SaveState(CLzmaEncHandle pp)
-{
- CLzmaEnc *p = (CLzmaEnc *)pp;
- CSaveState *dest = &p->saveState;
-
- dest->state = p->state;
-
- dest->lenProbs = p->lenProbs;
- dest->repLenProbs = p->repLenProbs;
-
- COPY_ARR(dest, p, reps);
-
- COPY_ARR(dest, p, posAlignEncoder);
- COPY_ARR(dest, p, isRep);
- COPY_ARR(dest, p, isRepG0);
- COPY_ARR(dest, p, isRepG1);
- COPY_ARR(dest, p, isRepG2);
- COPY_ARR(dest, p, isMatch);
- COPY_ARR(dest, p, isRep0Long);
- COPY_ARR(dest, p, posSlotEncoder);
- COPY_ARR(dest, p, posEncoders);
-
- memcpy(dest->litProbs, p->litProbs, ((UInt32)0x300 << p->lclp) * sizeof(CLzmaProb));
-}
-
-
-void LzmaEnc_RestoreState(CLzmaEncHandle pp)
-{
- CLzmaEnc *dest = (CLzmaEnc *)pp;
- const CSaveState *p = &dest->saveState;
-
- dest->state = p->state;
-
- dest->lenProbs = p->lenProbs;
- dest->repLenProbs = p->repLenProbs;
-
- COPY_ARR(dest, p, reps);
-
- COPY_ARR(dest, p, posAlignEncoder);
- COPY_ARR(dest, p, isRep);
- COPY_ARR(dest, p, isRepG0);
- COPY_ARR(dest, p, isRepG1);
- COPY_ARR(dest, p, isRepG2);
- COPY_ARR(dest, p, isMatch);
- COPY_ARR(dest, p, isRep0Long);
- COPY_ARR(dest, p, posSlotEncoder);
- COPY_ARR(dest, p, posEncoders);
-
- memcpy(dest->litProbs, p->litProbs, ((UInt32)0x300 << dest->lclp) * sizeof(CLzmaProb));
-}
-
-
-
-SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2)
-{
- CLzmaEnc *p = (CLzmaEnc *)pp;
- CLzmaEncProps props = *props2;
- LzmaEncProps_Normalize(&props);
-
- if (props.lc > LZMA_LC_MAX
- || props.lp > LZMA_LP_MAX
- || props.pb > LZMA_PB_MAX
- || props.dictSize > ((UInt64)1 << kDicLogSizeMaxCompress)
- || props.dictSize > kLzmaMaxHistorySize)
- return SZ_ERROR_PARAM;
-
- p->dictSize = props.dictSize;
- {
- unsigned fb = props.fb;
- if (fb < 5)
- fb = 5;
- if (fb > LZMA_MATCH_LEN_MAX)
- fb = LZMA_MATCH_LEN_MAX;
- p->numFastBytes = fb;
- }
- p->lc = props.lc;
- p->lp = props.lp;
- p->pb = props.pb;
- p->fastMode = (props.algo == 0);
- // p->_maxMode = True;
- p->matchFinderBase.btMode = (Byte)(props.btMode ? 1 : 0);
- {
- unsigned numHashBytes = 4;
- if (props.btMode)
- {
- if (props.numHashBytes < 2)
- numHashBytes = 2;
- else if (props.numHashBytes < 4)
- numHashBytes = props.numHashBytes;
- }
- p->matchFinderBase.numHashBytes = numHashBytes;
- }
-
- p->matchFinderBase.cutValue = props.mc;
-
- p->writeEndMark = props.writeEndMark;
-
- #ifndef _7ZIP_ST
- /*
- if (newMultiThread != _multiThread)
- {
- ReleaseMatchFinder();
- _multiThread = newMultiThread;
- }
- */
- p->multiThread = (props.numThreads > 1);
- #endif
-
- return SZ_OK;
-}
-
-
-void LzmaEnc_SetDataSize(CLzmaEncHandle pp, UInt64 expectedDataSiize)
-{
- CLzmaEnc *p = (CLzmaEnc *)pp;
- p->matchFinderBase.expectedDataSize = expectedDataSiize;
-}
-
-
-#define kState_Start 0
-#define kState_LitAfterMatch 4
-#define kState_LitAfterRep 5
-#define kState_MatchAfterLit 7
-#define kState_RepAfterLit 8
-
-static const Byte kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5};
-static const Byte kMatchNextStates[kNumStates] = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10};
-static const Byte kRepNextStates[kNumStates] = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11};
-static const Byte kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11};
-
-#define IsLitState(s) ((s) < 7)
-#define GetLenToPosState2(len) (((len) < kNumLenToPosStates - 1) ? (len) : kNumLenToPosStates - 1)
-#define GetLenToPosState(len) (((len) < kNumLenToPosStates + 1) ? (len) - 2 : kNumLenToPosStates - 1)
-
-#define kInfinityPrice (1 << 30)
-
-static void RangeEnc_Construct(CRangeEnc *p)
-{
- p->outStream = NULL;
- p->bufBase = NULL;
-}
-
-#define RangeEnc_GetProcessed(p) ((p)->processed + ((p)->buf - (p)->bufBase) + (p)->cacheSize)
-#define RangeEnc_GetProcessed_sizet(p) ((size_t)(p)->processed + ((p)->buf - (p)->bufBase) + (size_t)(p)->cacheSize)
-
-#define RC_BUF_SIZE (1 << 16)
-
-static int RangeEnc_Alloc(CRangeEnc *p, ISzAllocPtr alloc)
-{
- if (!p->bufBase)
- {
- p->bufBase = (Byte *)ISzAlloc_Alloc(alloc, RC_BUF_SIZE);
- if (!p->bufBase)
- return 0;
- p->bufLim = p->bufBase + RC_BUF_SIZE;
- }
- return 1;
-}
-
-static void RangeEnc_Free(CRangeEnc *p, ISzAllocPtr alloc)
-{
- ISzAlloc_Free(alloc, p->bufBase);
- p->bufBase = 0;
-}
-
-static void RangeEnc_Init(CRangeEnc *p)
-{
- /* Stream.Init(); */
- p->range = 0xFFFFFFFF;
- p->cache = 0;
- p->low = 0;
- p->cacheSize = 0;
-
- p->buf = p->bufBase;
-
- p->processed = 0;
- p->res = SZ_OK;
-}
-
-MY_NO_INLINE static void RangeEnc_FlushStream(CRangeEnc *p)
-{
- size_t num;
- if (p->res != SZ_OK)
- return;
- num = p->buf - p->bufBase;
- if (num != ISeqOutStream_Write(p->outStream, p->bufBase, num))
- p->res = SZ_ERROR_WRITE;
- p->processed += num;
- p->buf = p->bufBase;
-}
-
-MY_NO_INLINE static void MY_FAST_CALL RangeEnc_ShiftLow(CRangeEnc *p)
-{
- UInt32 low = (UInt32)p->low;
- unsigned high = (unsigned)(p->low >> 32);
- p->low = (UInt32)(low << 8);
- if (low < (UInt32)0xFF000000 || high != 0)
- {
- {
- Byte *buf = p->buf;
- *buf++ = (Byte)(p->cache + high);
- p->cache = (unsigned)(low >> 24);
- p->buf = buf;
- if (buf == p->bufLim)
- RangeEnc_FlushStream(p);
- if (p->cacheSize == 0)
- return;
- }
- high += 0xFF;
- for (;;)
- {
- Byte *buf = p->buf;
- *buf++ = (Byte)(high);
- p->buf = buf;
- if (buf == p->bufLim)
- RangeEnc_FlushStream(p);
- if (--p->cacheSize == 0)
- return;
- }
- }
- p->cacheSize++;
-}
-
-static void RangeEnc_FlushData(CRangeEnc *p)
-{
- int i;
- for (i = 0; i < 5; i++)
- RangeEnc_ShiftLow(p);
-}
-
-#define RC_NORM(p) if (range < kTopValue) { range <<= 8; RangeEnc_ShiftLow(p); }
-
-#define RC_BIT_PRE(p, prob) \
- ttt = *(prob); \
- newBound = (range >> kNumBitModelTotalBits) * ttt;
-
-// #define _LZMA_ENC_USE_BRANCH
-
-#ifdef _LZMA_ENC_USE_BRANCH
-
-#define RC_BIT(p, prob, bit) { \
- RC_BIT_PRE(p, prob) \
- if (bit == 0) { range = newBound; ttt += (kBitModelTotal - ttt) >> kNumMoveBits; } \
- else { (p)->low += newBound; range -= newBound; ttt -= ttt >> kNumMoveBits; } \
- *(prob) = (CLzmaProb)ttt; \
- RC_NORM(p) \
- }
-
-#else
-
-#define RC_BIT(p, prob, bit) { \
- UInt32 mask; \
- RC_BIT_PRE(p, prob) \
- mask = 0 - (UInt32)bit; \
- range &= mask; \
- mask &= newBound; \
- range -= mask; \
- (p)->low += mask; \
- mask = (UInt32)bit - 1; \
- range += newBound & mask; \
- mask &= (kBitModelTotal - ((1 << kNumMoveBits) - 1)); \
- mask += ((1 << kNumMoveBits) - 1); \
- ttt += (Int32)(mask - ttt) >> kNumMoveBits; \
- *(prob) = (CLzmaProb)ttt; \
- RC_NORM(p) \
- }
-
-#endif
-
-
-
-
-#define RC_BIT_0_BASE(p, prob) \
- range = newBound; *(prob) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits));
-
-#define RC_BIT_1_BASE(p, prob) \
- range -= newBound; (p)->low += newBound; *(prob) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); \
-
-#define RC_BIT_0(p, prob) \
- RC_BIT_0_BASE(p, prob) \
- RC_NORM(p)
-
-#define RC_BIT_1(p, prob) \
- RC_BIT_1_BASE(p, prob) \
- RC_NORM(p)
-
-static void RangeEnc_EncodeBit_0(CRangeEnc *p, CLzmaProb *prob)
-{
- UInt32 range, ttt, newBound;
- range = p->range;
- RC_BIT_PRE(p, prob)
- RC_BIT_0(p, prob)
- p->range = range;
-}
-
-static void LitEnc_Encode(CRangeEnc *p, CLzmaProb *probs, UInt32 sym)
-{
- UInt32 range = p->range;
- sym |= 0x100;
- do
- {
- UInt32 ttt, newBound;
- // RangeEnc_EncodeBit(p, probs + (sym >> 8), (sym >> 7) & 1);
- CLzmaProb *prob = probs + (sym >> 8);
- UInt32 bit = (sym >> 7) & 1;
- sym <<= 1;
- RC_BIT(p, prob, bit);
- }
- while (sym < 0x10000);
- p->range = range;
-}
-
-static void LitEnc_EncodeMatched(CRangeEnc *p, CLzmaProb *probs, UInt32 sym, UInt32 matchByte)
-{
- UInt32 range = p->range;
- UInt32 offs = 0x100;
- sym |= 0x100;
- do
- {
- UInt32 ttt, newBound;
- CLzmaProb *prob;
- UInt32 bit;
- matchByte <<= 1;
- // RangeEnc_EncodeBit(p, probs + (offs + (matchByte & offs) + (sym >> 8)), (sym >> 7) & 1);
- prob = probs + (offs + (matchByte & offs) + (sym >> 8));
- bit = (sym >> 7) & 1;
- sym <<= 1;
- offs &= ~(matchByte ^ sym);
- RC_BIT(p, prob, bit);
- }
- while (sym < 0x10000);
- p->range = range;
-}
-
-
-
-static void LzmaEnc_InitPriceTables(CProbPrice *ProbPrices)
-{
- UInt32 i;
- for (i = 0; i < (kBitModelTotal >> kNumMoveReducingBits); i++)
- {
- const unsigned kCyclesBits = kNumBitPriceShiftBits;
- UInt32 w = (i << kNumMoveReducingBits) + (1 << (kNumMoveReducingBits - 1));
- unsigned bitCount = 0;
- unsigned j;
- for (j = 0; j < kCyclesBits; j++)
- {
- w = w * w;
- bitCount <<= 1;
- while (w >= ((UInt32)1 << 16))
- {
- w >>= 1;
- bitCount++;
- }
- }
- ProbPrices[i] = (CProbPrice)((kNumBitModelTotalBits << kCyclesBits) - 15 - bitCount);
- // printf("\n%3d: %5d", i, ProbPrices[i]);
- }
-}
-
-
-#define GET_PRICE(prob, bit) \
- p->ProbPrices[((prob) ^ (unsigned)(((-(int)(bit))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits];
-
-#define GET_PRICEa(prob, bit) \
- ProbPrices[((prob) ^ (unsigned)((-((int)(bit))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits];
-
-#define GET_PRICE_0(prob) p->ProbPrices[(prob) >> kNumMoveReducingBits]
-#define GET_PRICE_1(prob) p->ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits]
-
-#define GET_PRICEa_0(prob) ProbPrices[(prob) >> kNumMoveReducingBits]
-#define GET_PRICEa_1(prob) ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits]
-
-
-static UInt32 LitEnc_GetPrice(const CLzmaProb *probs, UInt32 sym, const CProbPrice *ProbPrices)
-{
- UInt32 price = 0;
- sym |= 0x100;
- do
- {
- unsigned bit = sym & 1;
- sym >>= 1;
- price += GET_PRICEa(probs[sym], bit);
- }
- while (sym >= 2);
- return price;
-}
-
-
-static UInt32 LitEnc_Matched_GetPrice(const CLzmaProb *probs, UInt32 sym, UInt32 matchByte, const CProbPrice *ProbPrices)
-{
- UInt32 price = 0;
- UInt32 offs = 0x100;
- sym |= 0x100;
- do
- {
- matchByte <<= 1;
- price += GET_PRICEa(probs[offs + (matchByte & offs) + (sym >> 8)], (sym >> 7) & 1);
- sym <<= 1;
- offs &= ~(matchByte ^ sym);
- }
- while (sym < 0x10000);
- return price;
-}
-
-
-static void RcTree_ReverseEncode(CRangeEnc *rc, CLzmaProb *probs, unsigned numBits, unsigned sym)
-{
- UInt32 range = rc->range;
- unsigned m = 1;
- do
- {
- UInt32 ttt, newBound;
- unsigned bit = sym & 1;
- // RangeEnc_EncodeBit(rc, probs + m, bit);
- sym >>= 1;
- RC_BIT(rc, probs + m, bit);
- m = (m << 1) | bit;
- }
- while (--numBits);
- rc->range = range;
-}
-
-
-
-static void LenEnc_Init(CLenEnc *p)
-{
- unsigned i;
- for (i = 0; i < (LZMA_NUM_PB_STATES_MAX << (kLenNumLowBits + 1)); i++)
- p->low[i] = kProbInitValue;
- for (i = 0; i < kLenNumHighSymbols; i++)
- p->high[i] = kProbInitValue;
-}
-
-static void LenEnc_Encode(CLenEnc *p, CRangeEnc *rc, unsigned sym, unsigned posState)
-{
- UInt32 range, ttt, newBound;
- CLzmaProb *probs = p->low;
- range = rc->range;
- RC_BIT_PRE(rc, probs);
- if (sym >= kLenNumLowSymbols)
- {
- RC_BIT_1(rc, probs);
- probs += kLenNumLowSymbols;
- RC_BIT_PRE(rc, probs);
- if (sym >= kLenNumLowSymbols * 2)
- {
- RC_BIT_1(rc, probs);
- rc->range = range;
- // RcTree_Encode(rc, p->high, kLenNumHighBits, sym - kLenNumLowSymbols * 2);
- LitEnc_Encode(rc, p->high, sym - kLenNumLowSymbols * 2);
- return;
- }
- sym -= kLenNumLowSymbols;
- }
-
- // RcTree_Encode(rc, probs + (posState << kLenNumLowBits), kLenNumLowBits, sym);
- {
- unsigned m;
- unsigned bit;
- RC_BIT_0(rc, probs);
- probs += (posState << (1 + kLenNumLowBits));
- bit = (sym >> 2) ; RC_BIT(rc, probs + 1, bit); m = (1 << 1) + bit;
- bit = (sym >> 1) & 1; RC_BIT(rc, probs + m, bit); m = (m << 1) + bit;
- bit = sym & 1; RC_BIT(rc, probs + m, bit);
- rc->range = range;
- }
-}
-
-static void SetPrices_3(const CLzmaProb *probs, UInt32 startPrice, UInt32 *prices, const CProbPrice *ProbPrices)
-{
- unsigned i;
- for (i = 0; i < 8; i += 2)
- {
- UInt32 price = startPrice;
- UInt32 prob;
- price += GET_PRICEa(probs[1 ], (i >> 2));
- price += GET_PRICEa(probs[2 + (i >> 2)], (i >> 1) & 1);
- prob = probs[4 + (i >> 1)];
- prices[i ] = price + GET_PRICEa_0(prob);
- prices[i + 1] = price + GET_PRICEa_1(prob);
- }
-}
-
-
-MY_NO_INLINE static void MY_FAST_CALL LenPriceEnc_UpdateTables(
- CLenPriceEnc *p,
- unsigned numPosStates,
- const CLenEnc *enc,
- const CProbPrice *ProbPrices)
-{
- UInt32 b;
-
- {
- unsigned prob = enc->low[0];
- UInt32 a, c;
- unsigned posState;
- b = GET_PRICEa_1(prob);
- a = GET_PRICEa_0(prob);
- c = b + GET_PRICEa_0(enc->low[kLenNumLowSymbols]);
- for (posState = 0; posState < numPosStates; posState++)
- {
- UInt32 *prices = p->prices[posState];
- const CLzmaProb *probs = enc->low + (posState << (1 + kLenNumLowBits));
- SetPrices_3(probs, a, prices, ProbPrices);
- SetPrices_3(probs + kLenNumLowSymbols, c, prices + kLenNumLowSymbols, ProbPrices);
- }
- }
-
- /*
- {
- unsigned i;
- UInt32 b;
- a = GET_PRICEa_0(enc->low[0]);
- for (i = 0; i < kLenNumLowSymbols; i++)
- p->prices2[i] = a;
- a = GET_PRICEa_1(enc->low[0]);
- b = a + GET_PRICEa_0(enc->low[kLenNumLowSymbols]);
- for (i = kLenNumLowSymbols; i < kLenNumLowSymbols * 2; i++)
- p->prices2[i] = b;
- a += GET_PRICEa_1(enc->low[kLenNumLowSymbols]);
- }
- */
-
- // p->counter = numSymbols;
- // p->counter = 64;
-
- {
- unsigned i = p->tableSize;
-
- if (i > kLenNumLowSymbols * 2)
- {
- const CLzmaProb *probs = enc->high;
- UInt32 *prices = p->prices[0] + kLenNumLowSymbols * 2;
- i -= kLenNumLowSymbols * 2 - 1;
- i >>= 1;
- b += GET_PRICEa_1(enc->low[kLenNumLowSymbols]);
- do
- {
- /*
- p->prices2[i] = a +
- // RcTree_GetPrice(enc->high, kLenNumHighBits, i - kLenNumLowSymbols * 2, ProbPrices);
- LitEnc_GetPrice(probs, i - kLenNumLowSymbols * 2, ProbPrices);
- */
- // UInt32 price = a + RcTree_GetPrice(probs, kLenNumHighBits - 1, sym, ProbPrices);
- unsigned sym = --i + (1 << (kLenNumHighBits - 1));
- UInt32 price = b;
- do
- {
- unsigned bit = sym & 1;
- sym >>= 1;
- price += GET_PRICEa(probs[sym], bit);
- }
- while (sym >= 2);
-
- {
- unsigned prob = probs[(size_t)i + (1 << (kLenNumHighBits - 1))];
- prices[(size_t)i * 2 ] = price + GET_PRICEa_0(prob);
- prices[(size_t)i * 2 + 1] = price + GET_PRICEa_1(prob);
- }
- }
- while (i);
-
- {
- unsigned posState;
- size_t num = (p->tableSize - kLenNumLowSymbols * 2) * sizeof(p->prices[0][0]);
- for (posState = 1; posState < numPosStates; posState++)
- memcpy(p->prices[posState] + kLenNumLowSymbols * 2, p->prices[0] + kLenNumLowSymbols * 2, num);
- }
- }
- }
-}
-
-/*
- #ifdef SHOW_STAT
- g_STAT_OFFSET += num;
- printf("\n MovePos %u", num);
- #endif
-*/
-
-#define MOVE_POS(p, num) { \
- p->additionalOffset += (num); \
- p->matchFinder.Skip(p->matchFinderObj, (UInt32)(num)); }
-
-
-static unsigned ReadMatchDistances(CLzmaEnc *p, unsigned *numPairsRes)
-{
- unsigned numPairs;
-
- p->additionalOffset++;
- p->numAvail = p->matchFinder.GetNumAvailableBytes(p->matchFinderObj);
- numPairs = p->matchFinder.GetMatches(p->matchFinderObj, p->matches);
- *numPairsRes = numPairs;
-
- #ifdef SHOW_STAT
- printf("\n i = %u numPairs = %u ", g_STAT_OFFSET, numPairs / 2);
- g_STAT_OFFSET++;
- {
- unsigned i;
- for (i = 0; i < numPairs; i += 2)
- printf("%2u %6u | ", p->matches[i], p->matches[i + 1]);
- }
- #endif
-
- if (numPairs == 0)
- return 0;
- {
- unsigned len = p->matches[(size_t)numPairs - 2];
- if (len != p->numFastBytes)
- return len;
- {
- UInt32 numAvail = p->numAvail;
- if (numAvail > LZMA_MATCH_LEN_MAX)
- numAvail = LZMA_MATCH_LEN_MAX;
- {
- const Byte *p1 = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1;
- const Byte *p2 = p1 + len;
- ptrdiff_t dif = (ptrdiff_t)-1 - p->matches[(size_t)numPairs - 1];
- const Byte *lim = p1 + numAvail;
- for (; p2 != lim && *p2 == p2[dif]; p2++)
- {}
- return (unsigned)(p2 - p1);
- }
- }
- }
-}
-
-#define MARK_LIT ((UInt32)(Int32)-1)
-
-#define MakeAs_Lit(p) { (p)->dist = MARK_LIT; (p)->extra = 0; }
-#define MakeAs_ShortRep(p) { (p)->dist = 0; (p)->extra = 0; }
-#define IsShortRep(p) ((p)->dist == 0)
-
-
-#define GetPrice_ShortRep(p, state, posState) \
- ( GET_PRICE_0(p->isRepG0[state]) + GET_PRICE_0(p->isRep0Long[state][posState]))
-
-#define GetPrice_Rep_0(p, state, posState) ( \
- GET_PRICE_1(p->isMatch[state][posState]) \
- + GET_PRICE_1(p->isRep0Long[state][posState])) \
- + GET_PRICE_1(p->isRep[state]) \
- + GET_PRICE_0(p->isRepG0[state])
-
-MY_FORCE_INLINE
-static UInt32 GetPrice_PureRep(const CLzmaEnc *p, unsigned repIndex, size_t state, size_t posState)
-{
- UInt32 price;
- UInt32 prob = p->isRepG0[state];
- if (repIndex == 0)
- {
- price = GET_PRICE_0(prob);
- price += GET_PRICE_1(p->isRep0Long[state][posState]);
- }
- else
- {
- price = GET_PRICE_1(prob);
- prob = p->isRepG1[state];
- if (repIndex == 1)
- price += GET_PRICE_0(prob);
- else
- {
- price += GET_PRICE_1(prob);
- price += GET_PRICE(p->isRepG2[state], repIndex - 2);
- }
- }
- return price;
-}
-
-
-static unsigned Backward(CLzmaEnc *p, unsigned cur)
-{
- unsigned wr = cur + 1;
- p->optEnd = wr;
-
- for (;;)
- {
- UInt32 dist = p->opt[cur].dist;
- unsigned len = (unsigned)p->opt[cur].len;
- unsigned extra = (unsigned)p->opt[cur].extra;
- cur -= len;
-
- if (extra)
- {
- wr--;
- p->opt[wr].len = (UInt32)len;
- cur -= extra;
- len = extra;
- if (extra == 1)
- {
- p->opt[wr].dist = dist;
- dist = MARK_LIT;
- }
- else
- {
- p->opt[wr].dist = 0;
- len--;
- wr--;
- p->opt[wr].dist = MARK_LIT;
- p->opt[wr].len = 1;
- }
- }
-
- if (cur == 0)
- {
- p->backRes = dist;
- p->optCur = wr;
- return len;
- }
-
- wr--;
- p->opt[wr].dist = dist;
- p->opt[wr].len = (UInt32)len;
- }
-}
-
-
-
-#define LIT_PROBS(pos, prevByte) \
- (p->litProbs + (UInt32)3 * (((((pos) << 8) + (prevByte)) & p->lpMask) << p->lc))
-
-
-static unsigned GetOptimum(CLzmaEnc *p, UInt32 position)
-{
- unsigned last, cur;
- UInt32 reps[LZMA_NUM_REPS];
- unsigned repLens[LZMA_NUM_REPS];
- UInt32 *matches;
-
- {
- UInt32 numAvail;
- unsigned numPairs, mainLen, repMaxIndex, i, posState;
- UInt32 matchPrice, repMatchPrice;
- const Byte *data;
- Byte curByte, matchByte;
-
- p->optCur = p->optEnd = 0;
-
- if (p->additionalOffset == 0)
- mainLen = ReadMatchDistances(p, &numPairs);
- else
- {
- mainLen = p->longestMatchLen;
- numPairs = p->numPairs;
- }
-
- numAvail = p->numAvail;
- if (numAvail < 2)
- {
- p->backRes = MARK_LIT;
- return 1;
- }
- if (numAvail > LZMA_MATCH_LEN_MAX)
- numAvail = LZMA_MATCH_LEN_MAX;
-
- data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1;
- repMaxIndex = 0;
-
- for (i = 0; i < LZMA_NUM_REPS; i++)
- {
- unsigned len;
- const Byte *data2;
- reps[i] = p->reps[i];
- data2 = data - reps[i];
- if (data[0] != data2[0] || data[1] != data2[1])
- {
- repLens[i] = 0;
- continue;
- }
- for (len = 2; len < numAvail && data[len] == data2[len]; len++)
- {}
- repLens[i] = len;
- if (len > repLens[repMaxIndex])
- repMaxIndex = i;
- }
-
- if (repLens[repMaxIndex] >= p->numFastBytes)
- {
- unsigned len;
- p->backRes = (UInt32)repMaxIndex;
- len = repLens[repMaxIndex];
- MOVE_POS(p, len - 1)
- return len;
- }
-
- matches = p->matches;
-
- if (mainLen >= p->numFastBytes)
- {
- p->backRes = matches[(size_t)numPairs - 1] + LZMA_NUM_REPS;
- MOVE_POS(p, mainLen - 1)
- return mainLen;
- }
-
- curByte = *data;
- matchByte = *(data - reps[0]);
-
- last = repLens[repMaxIndex];
- if (last <= mainLen)
- last = mainLen;
-
- if (last < 2 && curByte != matchByte)
- {
- p->backRes = MARK_LIT;
- return 1;
- }
-
- p->opt[0].state = (CState)p->state;
-
- posState = (position & p->pbMask);
-
- {
- const CLzmaProb *probs = LIT_PROBS(position, *(data - 1));
- p->opt[1].price = GET_PRICE_0(p->isMatch[p->state][posState]) +
- (!IsLitState(p->state) ?
- LitEnc_Matched_GetPrice(probs, curByte, matchByte, p->ProbPrices) :
- LitEnc_GetPrice(probs, curByte, p->ProbPrices));
- }
-
- MakeAs_Lit(&p->opt[1]);
-
- matchPrice = GET_PRICE_1(p->isMatch[p->state][posState]);
- repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[p->state]);
-
- // 18.06
- if (matchByte == curByte && repLens[0] == 0)
- {
- UInt32 shortRepPrice = repMatchPrice + GetPrice_ShortRep(p, p->state, posState);
- if (shortRepPrice < p->opt[1].price)
- {
- p->opt[1].price = shortRepPrice;
- MakeAs_ShortRep(&p->opt[1]);
- }
- if (last < 2)
- {
- p->backRes = p->opt[1].dist;
- return 1;
- }
- }
-
- p->opt[1].len = 1;
-
- p->opt[0].reps[0] = reps[0];
- p->opt[0].reps[1] = reps[1];
- p->opt[0].reps[2] = reps[2];
- p->opt[0].reps[3] = reps[3];
-
- // ---------- REP ----------
-
- for (i = 0; i < LZMA_NUM_REPS; i++)
- {
- unsigned repLen = repLens[i];
- UInt32 price;
- if (repLen < 2)
- continue;
- price = repMatchPrice + GetPrice_PureRep(p, i, p->state, posState);
- do
- {
- UInt32 price2 = price + GET_PRICE_LEN(&p->repLenEnc, posState, repLen);
- COptimal *opt = &p->opt[repLen];
- if (price2 < opt->price)
- {
- opt->price = price2;
- opt->len = (UInt32)repLen;
- opt->dist = (UInt32)i;
- opt->extra = 0;
- }
- }
- while (--repLen >= 2);
- }
-
-
- // ---------- MATCH ----------
- {
- unsigned len = repLens[0] + 1;
- if (len <= mainLen)
- {
- unsigned offs = 0;
- UInt32 normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[p->state]);
-
- if (len < 2)
- len = 2;
- else
- while (len > matches[offs])
- offs += 2;
-
- for (; ; len++)
- {
- COptimal *opt;
- UInt32 dist = matches[(size_t)offs + 1];
- UInt32 price = normalMatchPrice + GET_PRICE_LEN(&p->lenEnc, posState, len);
- unsigned lenToPosState = GetLenToPosState(len);
-
- if (dist < kNumFullDistances)
- price += p->distancesPrices[lenToPosState][dist & (kNumFullDistances - 1)];
- else
- {
- unsigned slot;
- GetPosSlot2(dist, slot);
- price += p->alignPrices[dist & kAlignMask];
- price += p->posSlotPrices[lenToPosState][slot];
- }
-
- opt = &p->opt[len];
-
- if (price < opt->price)
- {
- opt->price = price;
- opt->len = (UInt32)len;
- opt->dist = dist + LZMA_NUM_REPS;
- opt->extra = 0;
- }
-
- if (len == matches[offs])
- {
- offs += 2;
- if (offs == numPairs)
- break;
- }
- }
- }
- }
-
-
- cur = 0;
-
- #ifdef SHOW_STAT2
- /* if (position >= 0) */
- {
- unsigned i;
- printf("\n pos = %4X", position);
- for (i = cur; i <= last; i++)
- printf("\nprice[%4X] = %u", position - cur + i, p->opt[i].price);
- }
- #endif
- }
-
-
-
- // ---------- Optimal Parsing ----------
-
- for (;;)
- {
- unsigned numAvail;
- UInt32 numAvailFull;
- unsigned newLen, numPairs, prev, state, posState, startLen;
- UInt32 litPrice, matchPrice, repMatchPrice;
- BoolInt nextIsLit;
- Byte curByte, matchByte;
- const Byte *data;
- COptimal *curOpt, *nextOpt;
-
- if (++cur == last)
- break;
-
- // 18.06
- if (cur >= kNumOpts - 64)
- {
- unsigned j, best;
- UInt32 price = p->opt[cur].price;
- best = cur;
- for (j = cur + 1; j <= last; j++)
- {
- UInt32 price2 = p->opt[j].price;
- if (price >= price2)
- {
- price = price2;
- best = j;
- }
- }
- {
- unsigned delta = best - cur;
- if (delta != 0)
- {
- MOVE_POS(p, delta);
- }
- }
- cur = best;
- break;
- }
-
- newLen = ReadMatchDistances(p, &numPairs);
-
- if (newLen >= p->numFastBytes)
- {
- p->numPairs = numPairs;
- p->longestMatchLen = newLen;
- break;
- }
-
- curOpt = &p->opt[cur];
-
- position++;
-
- // we need that check here, if skip_items in p->opt are possible
- /*
- if (curOpt->price >= kInfinityPrice)
- continue;
- */
-
- prev = cur - curOpt->len;
-
- if (curOpt->len == 1)
- {
- state = (unsigned)p->opt[prev].state;
- if (IsShortRep(curOpt))
- state = kShortRepNextStates[state];
- else
- state = kLiteralNextStates[state];
- }
- else
- {
- const COptimal *prevOpt;
- UInt32 b0;
- UInt32 dist = curOpt->dist;
-
- if (curOpt->extra)
- {
- prev -= (unsigned)curOpt->extra;
- state = kState_RepAfterLit;
- if (curOpt->extra == 1)
- state = (dist < LZMA_NUM_REPS ? kState_RepAfterLit : kState_MatchAfterLit);
- }
- else
- {
- state = (unsigned)p->opt[prev].state;
- if (dist < LZMA_NUM_REPS)
- state = kRepNextStates[state];
- else
- state = kMatchNextStates[state];
- }
-
- prevOpt = &p->opt[prev];
- b0 = prevOpt->reps[0];
-
- if (dist < LZMA_NUM_REPS)
- {
- if (dist == 0)
- {
- reps[0] = b0;
- reps[1] = prevOpt->reps[1];
- reps[2] = prevOpt->reps[2];
- reps[3] = prevOpt->reps[3];
- }
- else
- {
- reps[1] = b0;
- b0 = prevOpt->reps[1];
- if (dist == 1)
- {
- reps[0] = b0;
- reps[2] = prevOpt->reps[2];
- reps[3] = prevOpt->reps[3];
- }
- else
- {
- reps[2] = b0;
- reps[0] = prevOpt->reps[dist];
- reps[3] = prevOpt->reps[dist ^ 1];
- }
- }
- }
- else
- {
- reps[0] = (dist - LZMA_NUM_REPS + 1);
- reps[1] = b0;
- reps[2] = prevOpt->reps[1];
- reps[3] = prevOpt->reps[2];
- }
- }
-
- curOpt->state = (CState)state;
- curOpt->reps[0] = reps[0];
- curOpt->reps[1] = reps[1];
- curOpt->reps[2] = reps[2];
- curOpt->reps[3] = reps[3];
-
- data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1;
- curByte = *data;
- matchByte = *(data - reps[0]);
-
- posState = (position & p->pbMask);
-
- /*
- The order of Price checks:
- < LIT
- <= SHORT_REP
- < LIT : REP_0
- < REP [ : LIT : REP_0 ]
- < MATCH [ : LIT : REP_0 ]
- */
-
- {
- UInt32 curPrice = curOpt->price;
- unsigned prob = p->isMatch[state][posState];
- matchPrice = curPrice + GET_PRICE_1(prob);
- litPrice = curPrice + GET_PRICE_0(prob);
- }
-
- nextOpt = &p->opt[(size_t)cur + 1];
- nextIsLit = False;
-
- // here we can allow skip_items in p->opt, if we don't check (nextOpt->price < kInfinityPrice)
- // 18.new.06
- if ((nextOpt->price < kInfinityPrice
- // && !IsLitState(state)
- && matchByte == curByte)
- || litPrice > nextOpt->price
- )
- litPrice = 0;
- else
- {
- const CLzmaProb *probs = LIT_PROBS(position, *(data - 1));
- litPrice += (!IsLitState(state) ?
- LitEnc_Matched_GetPrice(probs, curByte, matchByte, p->ProbPrices) :
- LitEnc_GetPrice(probs, curByte, p->ProbPrices));
-
- if (litPrice < nextOpt->price)
- {
- nextOpt->price = litPrice;
- nextOpt->len = 1;
- MakeAs_Lit(nextOpt);
- nextIsLit = True;
- }
- }
-
- repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[state]);
-
- numAvailFull = p->numAvail;
- {
- unsigned temp = kNumOpts - 1 - cur;
- if (numAvailFull > temp)
- numAvailFull = (UInt32)temp;
- }
-
- // 18.06
- // ---------- SHORT_REP ----------
- if (IsLitState(state)) // 18.new
- if (matchByte == curByte)
- if (repMatchPrice < nextOpt->price) // 18.new
- // if (numAvailFull < 2 || data[1] != *(data - reps[0] + 1))
- if (
- // nextOpt->price >= kInfinityPrice ||
- nextOpt->len < 2 // we can check nextOpt->len, if skip items are not allowed in p->opt
- || (nextOpt->dist != 0
- // && nextOpt->extra <= 1 // 17.old
- )
- )
- {
- UInt32 shortRepPrice = repMatchPrice + GetPrice_ShortRep(p, state, posState);
- // if (shortRepPrice <= nextOpt->price) // 17.old
- if (shortRepPrice < nextOpt->price) // 18.new
- {
- nextOpt->price = shortRepPrice;
- nextOpt->len = 1;
- MakeAs_ShortRep(nextOpt);
- nextIsLit = False;
- }
- }
-
- if (numAvailFull < 2)
- continue;
- numAvail = (numAvailFull <= p->numFastBytes ? numAvailFull : p->numFastBytes);
-
- // numAvail <= p->numFastBytes
-
- // ---------- LIT : REP_0 ----------
-
- if (!nextIsLit
- && litPrice != 0 // 18.new
- && matchByte != curByte
- && numAvailFull > 2)
- {
- const Byte *data2 = data - reps[0];
- if (data[1] == data2[1] && data[2] == data2[2])
- {
- unsigned len;
- unsigned limit = p->numFastBytes + 1;
- if (limit > numAvailFull)
- limit = numAvailFull;
- for (len = 3; len < limit && data[len] == data2[len]; len++)
- {}
-
- {
- unsigned state2 = kLiteralNextStates[state];
- unsigned posState2 = (position + 1) & p->pbMask;
- UInt32 price = litPrice + GetPrice_Rep_0(p, state2, posState2);
- {
- unsigned offset = cur + len;
-
- if (last < offset)
- last = offset;
-
- // do
- {
- UInt32 price2;
- COptimal *opt;
- len--;
- // price2 = price + GetPrice_Len_Rep_0(p, len, state2, posState2);
- price2 = price + GET_PRICE_LEN(&p->repLenEnc, posState2, len);
-
- opt = &p->opt[offset];
- // offset--;
- if (price2 < opt->price)
- {
- opt->price = price2;
- opt->len = (UInt32)len;
- opt->dist = 0;
- opt->extra = 1;
- }
- }
- // while (len >= 3);
- }
- }
- }
- }
-
- startLen = 2; /* speed optimization */
-
- {
- // ---------- REP ----------
- unsigned repIndex = 0; // 17.old
- // unsigned repIndex = IsLitState(state) ? 0 : 1; // 18.notused
- for (; repIndex < LZMA_NUM_REPS; repIndex++)
- {
- unsigned len;
- UInt32 price;
- const Byte *data2 = data - reps[repIndex];
- if (data[0] != data2[0] || data[1] != data2[1])
- continue;
-
- for (len = 2; len < numAvail && data[len] == data2[len]; len++)
- {}
-
- // if (len < startLen) continue; // 18.new: speed optimization
-
- {
- unsigned offset = cur + len;
- if (last < offset)
- last = offset;
- }
- {
- unsigned len2 = len;
- price = repMatchPrice + GetPrice_PureRep(p, repIndex, state, posState);
- do
- {
- UInt32 price2 = price + GET_PRICE_LEN(&p->repLenEnc, posState, len2);
- COptimal *opt = &p->opt[cur + len2];
- if (price2 < opt->price)
- {
- opt->price = price2;
- opt->len = (UInt32)len2;
- opt->dist = (UInt32)repIndex;
- opt->extra = 0;
- }
- }
- while (--len2 >= 2);
- }
-
- if (repIndex == 0) startLen = len + 1; // 17.old
- // startLen = len + 1; // 18.new
-
- /* if (_maxMode) */
- {
- // ---------- REP : LIT : REP_0 ----------
- // numFastBytes + 1 + numFastBytes
-
- unsigned len2 = len + 1;
- unsigned limit = len2 + p->numFastBytes;
- if (limit > numAvailFull)
- limit = numAvailFull;
-
- len2 += 2;
- if (len2 <= limit)
- if (data[len2 - 2] == data2[len2 - 2])
- if (data[len2 - 1] == data2[len2 - 1])
- {
- unsigned state2 = kRepNextStates[state];
- unsigned posState2 = (position + len) & p->pbMask;
- price += GET_PRICE_LEN(&p->repLenEnc, posState, len)
- + GET_PRICE_0(p->isMatch[state2][posState2])
- + LitEnc_Matched_GetPrice(LIT_PROBS(position + len, data[(size_t)len - 1]),
- data[len], data2[len], p->ProbPrices);
-
- // state2 = kLiteralNextStates[state2];
- state2 = kState_LitAfterRep;
- posState2 = (posState2 + 1) & p->pbMask;
-
-
- price += GetPrice_Rep_0(p, state2, posState2);
-
- for (; len2 < limit && data[len2] == data2[len2]; len2++)
- {}
-
- len2 -= len;
- // if (len2 >= 3)
- {
- {
- unsigned offset = cur + len + len2;
-
- if (last < offset)
- last = offset;
- // do
- {
- UInt32 price2;
- COptimal *opt;
- len2--;
- // price2 = price + GetPrice_Len_Rep_0(p, len2, state2, posState2);
- price2 = price + GET_PRICE_LEN(&p->repLenEnc, posState2, len2);
-
- opt = &p->opt[offset];
- // offset--;
- if (price2 < opt->price)
- {
- opt->price = price2;
- opt->len = (UInt32)len2;
- opt->extra = (CExtra)(len + 1);
- opt->dist = (UInt32)repIndex;
- }
- }
- // while (len2 >= 3);
- }
- }
- }
- }
- }
- }
-
-
- // ---------- MATCH ----------
- /* for (unsigned len = 2; len <= newLen; len++) */
- if (newLen > numAvail)
- {
- newLen = numAvail;
- for (numPairs = 0; newLen > matches[numPairs]; numPairs += 2);
- matches[numPairs] = (UInt32)newLen;
- numPairs += 2;
- }
-
- // startLen = 2; /* speed optimization */
-
- if (newLen >= startLen)
- {
- UInt32 normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[state]);
- UInt32 dist;
- unsigned offs, posSlot, len;
-
- {
- unsigned offset = cur + newLen;
- if (last < offset)
- last = offset;
- }
-
- offs = 0;
- while (startLen > matches[offs])
- offs += 2;
- dist = matches[(size_t)offs + 1];
-
- // if (dist >= kNumFullDistances)
- GetPosSlot2(dist, posSlot);
-
- for (len = /*2*/ startLen; ; len++)
- {
- UInt32 price = normalMatchPrice + GET_PRICE_LEN(&p->lenEnc, posState, len);
- {
- COptimal *opt;
- unsigned lenNorm = len - 2;
- lenNorm = GetLenToPosState2(lenNorm);
- if (dist < kNumFullDistances)
- price += p->distancesPrices[lenNorm][dist & (kNumFullDistances - 1)];
- else
- price += p->posSlotPrices[lenNorm][posSlot] + p->alignPrices[dist & kAlignMask];
-
- opt = &p->opt[cur + len];
- if (price < opt->price)
- {
- opt->price = price;
- opt->len = (UInt32)len;
- opt->dist = dist + LZMA_NUM_REPS;
- opt->extra = 0;
- }
- }
-
- if (len == matches[offs])
- {
- // if (p->_maxMode) {
- // MATCH : LIT : REP_0
-
- const Byte *data2 = data - dist - 1;
- unsigned len2 = len + 1;
- unsigned limit = len2 + p->numFastBytes;
- if (limit > numAvailFull)
- limit = numAvailFull;
-
- len2 += 2;
- if (len2 <= limit)
- if (data[len2 - 2] == data2[len2 - 2])
- if (data[len2 - 1] == data2[len2 - 1])
- {
- for (; len2 < limit && data[len2] == data2[len2]; len2++)
- {}
-
- len2 -= len;
-
- // if (len2 >= 3)
- {
- unsigned state2 = kMatchNextStates[state];
- unsigned posState2 = (position + len) & p->pbMask;
- unsigned offset;
- price += GET_PRICE_0(p->isMatch[state2][posState2]);
- price += LitEnc_Matched_GetPrice(LIT_PROBS(position + len, data[(size_t)len - 1]),
- data[len], data2[len], p->ProbPrices);
-
- // state2 = kLiteralNextStates[state2];
- state2 = kState_LitAfterMatch;
-
- posState2 = (posState2 + 1) & p->pbMask;
- price += GetPrice_Rep_0(p, state2, posState2);
-
- offset = cur + len + len2;
-
- if (last < offset)
- last = offset;
- // do
- {
- UInt32 price2;
- COptimal *opt;
- len2--;
- // price2 = price + GetPrice_Len_Rep_0(p, len2, state2, posState2);
- price2 = price + GET_PRICE_LEN(&p->repLenEnc, posState2, len2);
- opt = &p->opt[offset];
- // offset--;
- if (price2 < opt->price)
- {
- opt->price = price2;
- opt->len = (UInt32)len2;
- opt->extra = (CExtra)(len + 1);
- opt->dist = dist + LZMA_NUM_REPS;
- }
- }
- // while (len2 >= 3);
- }
-
- }
-
- offs += 2;
- if (offs == numPairs)
- break;
- dist = matches[(size_t)offs + 1];
- // if (dist >= kNumFullDistances)
- GetPosSlot2(dist, posSlot);
- }
- }
- }
- }
-
- do
- p->opt[last].price = kInfinityPrice;
- while (--last);
-
- return Backward(p, cur);
-}
-
-
-
-#define ChangePair(smallDist, bigDist) (((bigDist) >> 7) > (smallDist))
-
-
-
-static unsigned GetOptimumFast(CLzmaEnc *p)
-{
- UInt32 numAvail, mainDist;
- unsigned mainLen, numPairs, repIndex, repLen, i;
- const Byte *data;
-
- if (p->additionalOffset == 0)
- mainLen = ReadMatchDistances(p, &numPairs);
- else
- {
- mainLen = p->longestMatchLen;
- numPairs = p->numPairs;
- }
-
- numAvail = p->numAvail;
- p->backRes = MARK_LIT;
- if (numAvail < 2)
- return 1;
- // if (mainLen < 2 && p->state == 0) return 1; // 18.06.notused
- if (numAvail > LZMA_MATCH_LEN_MAX)
- numAvail = LZMA_MATCH_LEN_MAX;
- data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1;
- repLen = repIndex = 0;
-
- for (i = 0; i < LZMA_NUM_REPS; i++)
- {
- unsigned len;
- const Byte *data2 = data - p->reps[i];
- if (data[0] != data2[0] || data[1] != data2[1])
- continue;
- for (len = 2; len < numAvail && data[len] == data2[len]; len++)
- {}
- if (len >= p->numFastBytes)
- {
- p->backRes = (UInt32)i;
- MOVE_POS(p, len - 1)
- return len;
- }
- if (len > repLen)
- {
- repIndex = i;
- repLen = len;
- }
- }
-
- if (mainLen >= p->numFastBytes)
- {
- p->backRes = p->matches[(size_t)numPairs - 1] + LZMA_NUM_REPS;
- MOVE_POS(p, mainLen - 1)
- return mainLen;
- }
-
- mainDist = 0; /* for GCC */
-
- if (mainLen >= 2)
- {
- mainDist = p->matches[(size_t)numPairs - 1];
- while (numPairs > 2)
- {
- UInt32 dist2;
- if (mainLen != p->matches[(size_t)numPairs - 4] + 1)
- break;
- dist2 = p->matches[(size_t)numPairs - 3];
- if (!ChangePair(dist2, mainDist))
- break;
- numPairs -= 2;
- mainLen--;
- mainDist = dist2;
- }
- if (mainLen == 2 && mainDist >= 0x80)
- mainLen = 1;
- }
-
- if (repLen >= 2)
- if ( repLen + 1 >= mainLen
- || (repLen + 2 >= mainLen && mainDist >= (1 << 9))
- || (repLen + 3 >= mainLen && mainDist >= (1 << 15)))
- {
- p->backRes = (UInt32)repIndex;
- MOVE_POS(p, repLen - 1)
- return repLen;
- }
-
- if (mainLen < 2 || numAvail <= 2)
- return 1;
-
- {
- unsigned len1 = ReadMatchDistances(p, &p->numPairs);
- p->longestMatchLen = len1;
-
- if (len1 >= 2)
- {
- UInt32 newDist = p->matches[(size_t)p->numPairs - 1];
- if ( (len1 >= mainLen && newDist < mainDist)
- || (len1 == mainLen + 1 && !ChangePair(mainDist, newDist))
- || (len1 > mainLen + 1)
- || (len1 + 1 >= mainLen && mainLen >= 3 && ChangePair(newDist, mainDist)))
- return 1;
- }
- }
-
- data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1;
-
- for (i = 0; i < LZMA_NUM_REPS; i++)
- {
- unsigned len, limit;
- const Byte *data2 = data - p->reps[i];
- if (data[0] != data2[0] || data[1] != data2[1])
- continue;
- limit = mainLen - 1;
- for (len = 2;; len++)
- {
- if (len >= limit)
- return 1;
- if (data[len] != data2[len])
- break;
- }
- }
-
- p->backRes = mainDist + LZMA_NUM_REPS;
- if (mainLen != 2)
- {
- MOVE_POS(p, mainLen - 2)
- }
- return mainLen;
-}
-
-
-
-
-static void WriteEndMarker(CLzmaEnc *p, unsigned posState)
-{
- UInt32 range;
- range = p->rc.range;
- {
- UInt32 ttt, newBound;
- CLzmaProb *prob = &p->isMatch[p->state][posState];
- RC_BIT_PRE(&p->rc, prob)
- RC_BIT_1(&p->rc, prob)
- prob = &p->isRep[p->state];
- RC_BIT_PRE(&p->rc, prob)
- RC_BIT_0(&p->rc, prob)
- }
- p->state = kMatchNextStates[p->state];
-
- p->rc.range = range;
- LenEnc_Encode(&p->lenProbs, &p->rc, 0, posState);
- range = p->rc.range;
-
- {
- // RcTree_Encode_PosSlot(&p->rc, p->posSlotEncoder[0], (1 << kNumPosSlotBits) - 1);
- CLzmaProb *probs = p->posSlotEncoder[0];
- unsigned m = 1;
- do
- {
- UInt32 ttt, newBound;
- RC_BIT_PRE(p, probs + m)
- RC_BIT_1(&p->rc, probs + m);
- m = (m << 1) + 1;
- }
- while (m < (1 << kNumPosSlotBits));
- }
- {
- // RangeEnc_EncodeDirectBits(&p->rc, ((UInt32)1 << (30 - kNumAlignBits)) - 1, 30 - kNumAlignBits); UInt32 range = p->range;
- unsigned numBits = 30 - kNumAlignBits;
- do
- {
- range >>= 1;
- p->rc.low += range;
- RC_NORM(&p->rc)
- }
- while (--numBits);
- }
-
- {
- // RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, kAlignMask);
- CLzmaProb *probs = p->posAlignEncoder;
- unsigned m = 1;
- do
- {
- UInt32 ttt, newBound;
- RC_BIT_PRE(p, probs + m)
- RC_BIT_1(&p->rc, probs + m);
- m = (m << 1) + 1;
- }
- while (m < kAlignTableSize);
- }
- p->rc.range = range;
-}
-
-
-static SRes CheckErrors(CLzmaEnc *p)
-{
- if (p->result != SZ_OK)
- return p->result;
- if (p->rc.res != SZ_OK)
- p->result = SZ_ERROR_WRITE;
- if (p->matchFinderBase.result != SZ_OK)
- p->result = SZ_ERROR_READ;
- if (p->result != SZ_OK)
- p->finished = True;
- return p->result;
-}
-
-
-MY_NO_INLINE static SRes Flush(CLzmaEnc *p, UInt32 nowPos)
-{
- /* ReleaseMFStream(); */
- p->finished = True;
- if (p->writeEndMark)
- WriteEndMarker(p, nowPos & p->pbMask);
- RangeEnc_FlushData(&p->rc);
- RangeEnc_FlushStream(&p->rc);
- return CheckErrors(p);
-}
-
-
-MY_NO_INLINE static void FillAlignPrices(CLzmaEnc *p)
-{
- unsigned i;
- const CProbPrice *ProbPrices = p->ProbPrices;
- const CLzmaProb *probs = p->posAlignEncoder;
- // p->alignPriceCount = 0;
- for (i = 0; i < kAlignTableSize / 2; i++)
- {
- UInt32 price = 0;
- unsigned sym = i;
- unsigned m = 1;
- unsigned bit;
- UInt32 prob;
- bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[m], bit); m = (m << 1) + bit;
- bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[m], bit); m = (m << 1) + bit;
- bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[m], bit); m = (m << 1) + bit;
- prob = probs[m];
- p->alignPrices[i ] = price + GET_PRICEa_0(prob);
- p->alignPrices[i + 8] = price + GET_PRICEa_1(prob);
- // p->alignPrices[i] = RcTree_ReverseGetPrice(p->posAlignEncoder, kNumAlignBits, i, p->ProbPrices);
- }
-}
-
-
-MY_NO_INLINE static void FillDistancesPrices(CLzmaEnc *p)
-{
- // int y; for (y = 0; y < 100; y++) {
-
- UInt32 tempPrices[kNumFullDistances];
- unsigned i, lps;
-
- const CProbPrice *ProbPrices = p->ProbPrices;
- p->matchPriceCount = 0;
-
- for (i = kStartPosModelIndex / 2; i < kNumFullDistances / 2; i++)
- {
- unsigned posSlot = GetPosSlot1(i);
- unsigned footerBits = (posSlot >> 1) - 1;
- unsigned base = ((2 | (posSlot & 1)) << footerBits);
- const CLzmaProb *probs = p->posEncoders + (size_t)base * 2;
- // tempPrices[i] = RcTree_ReverseGetPrice(p->posEncoders + base, footerBits, i - base, p->ProbPrices);
- UInt32 price = 0;
- unsigned m = 1;
- unsigned sym = i;
- unsigned offset = (unsigned)1 << footerBits;
- base += i;
-
- if (footerBits)
- do
- {
- unsigned bit = sym & 1;
- sym >>= 1;
- price += GET_PRICEa(probs[m], bit);
- m = (m << 1) + bit;
- }
- while (--footerBits);
-
- {
- unsigned prob = probs[m];
- tempPrices[base ] = price + GET_PRICEa_0(prob);
- tempPrices[base + offset] = price + GET_PRICEa_1(prob);
- }
- }
-
- for (lps = 0; lps < kNumLenToPosStates; lps++)
- {
- unsigned slot;
- unsigned distTableSize2 = (p->distTableSize + 1) >> 1;
- UInt32 *posSlotPrices = p->posSlotPrices[lps];
- const CLzmaProb *probs = p->posSlotEncoder[lps];
-
- for (slot = 0; slot < distTableSize2; slot++)
- {
- // posSlotPrices[slot] = RcTree_GetPrice(encoder, kNumPosSlotBits, slot, p->ProbPrices);
- UInt32 price;
- unsigned bit;
- unsigned sym = slot + (1 << (kNumPosSlotBits - 1));
- unsigned prob;
- bit = sym & 1; sym >>= 1; price = GET_PRICEa(probs[sym], bit);
- bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[sym], bit);
- bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[sym], bit);
- bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[sym], bit);
- bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[sym], bit);
- prob = probs[(size_t)slot + (1 << (kNumPosSlotBits - 1))];
- posSlotPrices[(size_t)slot * 2 ] = price + GET_PRICEa_0(prob);
- posSlotPrices[(size_t)slot * 2 + 1] = price + GET_PRICEa_1(prob);
- }
-
- {
- UInt32 delta = ((UInt32)((kEndPosModelIndex / 2 - 1) - kNumAlignBits) << kNumBitPriceShiftBits);
- for (slot = kEndPosModelIndex / 2; slot < distTableSize2; slot++)
- {
- posSlotPrices[(size_t)slot * 2 ] += delta;
- posSlotPrices[(size_t)slot * 2 + 1] += delta;
- delta += ((UInt32)1 << kNumBitPriceShiftBits);
- }
- }
-
- {
- UInt32 *dp = p->distancesPrices[lps];
-
- dp[0] = posSlotPrices[0];
- dp[1] = posSlotPrices[1];
- dp[2] = posSlotPrices[2];
- dp[3] = posSlotPrices[3];
-
- for (i = 4; i < kNumFullDistances; i += 2)
- {
- UInt32 slotPrice = posSlotPrices[GetPosSlot1(i)];
- dp[i ] = slotPrice + tempPrices[i];
- dp[i + 1] = slotPrice + tempPrices[i + 1];
- }
- }
- }
- // }
-}
-
-
-
-void LzmaEnc_Construct(CLzmaEnc *p)
-{
- RangeEnc_Construct(&p->rc);
- MatchFinder_Construct(&p->matchFinderBase);
-
- #ifndef _7ZIP_ST
- MatchFinderMt_Construct(&p->matchFinderMt);
- p->matchFinderMt.MatchFinder = &p->matchFinderBase;
- #endif
-
- {
- CLzmaEncProps props;
- LzmaEncProps_Init(&props);
- LzmaEnc_SetProps(p, &props);
- }
-
- #ifndef LZMA_LOG_BSR
- LzmaEnc_FastPosInit(p->g_FastPos);
- #endif
-
- LzmaEnc_InitPriceTables(p->ProbPrices);
- p->litProbs = NULL;
- p->saveState.litProbs = NULL;
-
-}
-
-CLzmaEncHandle LzmaEnc_Create(ISzAllocPtr alloc)
-{
- void *p;
- p = ISzAlloc_Alloc(alloc, sizeof(CLzmaEnc));
- if (p)
- LzmaEnc_Construct((CLzmaEnc *)p);
- return p;
-}
-
-void LzmaEnc_FreeLits(CLzmaEnc *p, ISzAllocPtr alloc)
-{
- ISzAlloc_Free(alloc, p->litProbs);
- ISzAlloc_Free(alloc, p->saveState.litProbs);
- p->litProbs = NULL;
- p->saveState.litProbs = NULL;
-}
-
-void LzmaEnc_Destruct(CLzmaEnc *p, ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- #ifndef _7ZIP_ST
- MatchFinderMt_Destruct(&p->matchFinderMt, allocBig);
- #endif
-
- MatchFinder_Free(&p->matchFinderBase, allocBig);
- LzmaEnc_FreeLits(p, alloc);
- RangeEnc_Free(&p->rc, alloc);
-}
-
-void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- LzmaEnc_Destruct((CLzmaEnc *)p, alloc, allocBig);
- ISzAlloc_Free(alloc, p);
-}
-
-
-SRes LzmaEnc_CodeOneBlock(CLzmaEncHandle pp, UInt32 maxPackSize, UInt32 maxUnpackSize)
-{
- CLzmaEnc *p = (CLzmaEnc *) pp;
- UInt32 nowPos32, startPos32;
- if (p->needInit)
- {
- p->matchFinder.Init(p->matchFinderObj);
- p->needInit = 0;
- }
-
- if (p->finished)
- return p->result;
- RINOK(CheckErrors(p));
-
- nowPos32 = (UInt32)p->nowPos64;
- startPos32 = nowPos32;
-
- if (p->nowPos64 == 0)
- {
- unsigned numPairs;
- Byte curByte;
- if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0)
- return Flush(p, nowPos32);
- ReadMatchDistances(p, &numPairs);
- RangeEnc_EncodeBit_0(&p->rc, &p->isMatch[kState_Start][0]);
- // p->state = kLiteralNextStates[p->state];
- curByte = *(p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset);
- LitEnc_Encode(&p->rc, p->litProbs, curByte);
- p->additionalOffset--;
- nowPos32++;
- }
-
- if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) != 0)
-
- for (;;)
- {
- UInt32 dist;
- unsigned len, posState;
- UInt32 range, ttt, newBound;
- CLzmaProb *probs;
-
- if (p->fastMode)
- len = GetOptimumFast(p);
- else
- {
- unsigned oci = p->optCur;
- if (p->optEnd == oci)
- len = GetOptimum(p, nowPos32);
- else
- {
- const COptimal *opt = &p->opt[oci];
- len = opt->len;
- p->backRes = opt->dist;
- p->optCur = oci + 1;
- }
- }
-
- posState = (unsigned)nowPos32 & p->pbMask;
- range = p->rc.range;
- probs = &p->isMatch[p->state][posState];
-
- RC_BIT_PRE(&p->rc, probs)
-
- dist = p->backRes;
-
- #ifdef SHOW_STAT2
- printf("\n pos = %6X, len = %3u pos = %6u", nowPos32, len, dist);
- #endif
-
- if (dist == MARK_LIT)
- {
- Byte curByte;
- const Byte *data;
- unsigned state;
-
- RC_BIT_0(&p->rc, probs);
- p->rc.range = range;
- data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset;
- probs = LIT_PROBS(nowPos32, *(data - 1));
- curByte = *data;
- state = p->state;
- p->state = kLiteralNextStates[state];
- if (IsLitState(state))
- LitEnc_Encode(&p->rc, probs, curByte);
- else
- LitEnc_EncodeMatched(&p->rc, probs, curByte, *(data - p->reps[0]));
- }
- else
- {
- RC_BIT_1(&p->rc, probs);
- probs = &p->isRep[p->state];
- RC_BIT_PRE(&p->rc, probs)
-
- if (dist < LZMA_NUM_REPS)
- {
- RC_BIT_1(&p->rc, probs);
- probs = &p->isRepG0[p->state];
- RC_BIT_PRE(&p->rc, probs)
- if (dist == 0)
- {
- RC_BIT_0(&p->rc, probs);
- probs = &p->isRep0Long[p->state][posState];
- RC_BIT_PRE(&p->rc, probs)
- if (len != 1)
- {
- RC_BIT_1_BASE(&p->rc, probs);
- }
- else
- {
- RC_BIT_0_BASE(&p->rc, probs);
- p->state = kShortRepNextStates[p->state];
- }
- }
- else
- {
- RC_BIT_1(&p->rc, probs);
- probs = &p->isRepG1[p->state];
- RC_BIT_PRE(&p->rc, probs)
- if (dist == 1)
- {
- RC_BIT_0_BASE(&p->rc, probs);
- dist = p->reps[1];
- }
- else
- {
- RC_BIT_1(&p->rc, probs);
- probs = &p->isRepG2[p->state];
- RC_BIT_PRE(&p->rc, probs)
- if (dist == 2)
- {
- RC_BIT_0_BASE(&p->rc, probs);
- dist = p->reps[2];
- }
- else
- {
- RC_BIT_1_BASE(&p->rc, probs);
- dist = p->reps[3];
- p->reps[3] = p->reps[2];
- }
- p->reps[2] = p->reps[1];
- }
- p->reps[1] = p->reps[0];
- p->reps[0] = dist;
- }
-
- RC_NORM(&p->rc)
-
- p->rc.range = range;
-
- if (len != 1)
- {
- LenEnc_Encode(&p->repLenProbs, &p->rc, len - LZMA_MATCH_LEN_MIN, posState);
- --p->repLenEncCounter;
- p->state = kRepNextStates[p->state];
- }
- }
- else
- {
- unsigned posSlot;
- RC_BIT_0(&p->rc, probs);
- p->rc.range = range;
- p->state = kMatchNextStates[p->state];
-
- LenEnc_Encode(&p->lenProbs, &p->rc, len - LZMA_MATCH_LEN_MIN, posState);
- // --p->lenEnc.counter;
-
- dist -= LZMA_NUM_REPS;
- p->reps[3] = p->reps[2];
- p->reps[2] = p->reps[1];
- p->reps[1] = p->reps[0];
- p->reps[0] = dist + 1;
-
- p->matchPriceCount++;
- GetPosSlot(dist, posSlot);
- // RcTree_Encode_PosSlot(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], posSlot);
- {
- UInt32 sym = (UInt32)posSlot + (1 << kNumPosSlotBits);
- range = p->rc.range;
- probs = p->posSlotEncoder[GetLenToPosState(len)];
- do
- {
- CLzmaProb *prob = probs + (sym >> kNumPosSlotBits);
- UInt32 bit = (sym >> (kNumPosSlotBits - 1)) & 1;
- sym <<= 1;
- RC_BIT(&p->rc, prob, bit);
- }
- while (sym < (1 << kNumPosSlotBits * 2));
- p->rc.range = range;
- }
-
- if (dist >= kStartPosModelIndex)
- {
- unsigned footerBits = ((posSlot >> 1) - 1);
-
- if (dist < kNumFullDistances)
- {
- unsigned base = ((2 | (posSlot & 1)) << footerBits);
- RcTree_ReverseEncode(&p->rc, p->posEncoders + base, footerBits, (unsigned)(dist /* - base */));
- }
- else
- {
- UInt32 pos2 = (dist | 0xF) << (32 - footerBits);
- range = p->rc.range;
- // RangeEnc_EncodeDirectBits(&p->rc, posReduced >> kNumAlignBits, footerBits - kNumAlignBits);
- /*
- do
- {
- range >>= 1;
- p->rc.low += range & (0 - ((dist >> --footerBits) & 1));
- RC_NORM(&p->rc)
- }
- while (footerBits > kNumAlignBits);
- */
- do
- {
- range >>= 1;
- p->rc.low += range & (0 - (pos2 >> 31));
- pos2 += pos2;
- RC_NORM(&p->rc)
- }
- while (pos2 != 0xF0000000);
-
-
- // RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, posReduced & kAlignMask);
-
- {
- unsigned m = 1;
- unsigned bit;
- bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit); m = (m << 1) + bit;
- bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit); m = (m << 1) + bit;
- bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit); m = (m << 1) + bit;
- bit = dist & 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit);
- p->rc.range = range;
- // p->alignPriceCount++;
- }
- }
- }
- }
- }
-
- nowPos32 += (UInt32)len;
- p->additionalOffset -= len;
-
- if (p->additionalOffset == 0)
- {
- UInt32 processed;
-
- if (!p->fastMode)
- {
- /*
- if (p->alignPriceCount >= 16) // kAlignTableSize
- FillAlignPrices(p);
- if (p->matchPriceCount >= 128)
- FillDistancesPrices(p);
- if (p->lenEnc.counter <= 0)
- LenPriceEnc_UpdateTables(&p->lenEnc, 1 << p->pb, &p->lenProbs, p->ProbPrices);
- */
- if (p->matchPriceCount >= 64)
- {
- FillAlignPrices(p);
- // { int y; for (y = 0; y < 100; y++) {
- FillDistancesPrices(p);
- // }}
- LenPriceEnc_UpdateTables(&p->lenEnc, 1 << p->pb, &p->lenProbs, p->ProbPrices);
- }
- if (p->repLenEncCounter <= 0)
- {
- p->repLenEncCounter = REP_LEN_COUNT;
- LenPriceEnc_UpdateTables(&p->repLenEnc, 1 << p->pb, &p->repLenProbs, p->ProbPrices);
- }
- }
-
- if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0)
- break;
- processed = nowPos32 - startPos32;
-
- if (maxPackSize)
- {
- if (processed + kNumOpts + 300 >= maxUnpackSize
- || RangeEnc_GetProcessed_sizet(&p->rc) + kPackReserve >= maxPackSize)
- break;
- }
- else if (processed >= (1 << 17))
- {
- p->nowPos64 += nowPos32 - startPos32;
- return CheckErrors(p);
- }
- }
- }
-
- p->nowPos64 += nowPos32 - startPos32;
- return Flush(p, nowPos32);
-}
-
-
-
-#define kBigHashDicLimit ((UInt32)1 << 24)
-
-static SRes LzmaEnc_Alloc(CLzmaEnc *p, UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- UInt32 beforeSize = kNumOpts;
- if (!RangeEnc_Alloc(&p->rc, alloc))
- return SZ_ERROR_MEM;
-
- #ifndef _7ZIP_ST
- p->mtMode = (p->multiThread && !p->fastMode && (p->matchFinderBase.btMode != 0));
- #endif
-
- {
- unsigned lclp = p->lc + p->lp;
- if (!p->litProbs || !p->saveState.litProbs || p->lclp != lclp)
- {
- LzmaEnc_FreeLits(p, alloc);
- p->litProbs = (CLzmaProb *)ISzAlloc_Alloc(alloc, ((UInt32)0x300 << lclp) * sizeof(CLzmaProb));
- p->saveState.litProbs = (CLzmaProb *)ISzAlloc_Alloc(alloc, ((UInt32)0x300 << lclp) * sizeof(CLzmaProb));
- if (!p->litProbs || !p->saveState.litProbs)
- {
- LzmaEnc_FreeLits(p, alloc);
- return SZ_ERROR_MEM;
- }
- p->lclp = lclp;
- }
- }
-
- p->matchFinderBase.bigHash = (Byte)(p->dictSize > kBigHashDicLimit ? 1 : 0);
-
- if (beforeSize + p->dictSize < keepWindowSize)
- beforeSize = keepWindowSize - p->dictSize;
-
- #ifndef _7ZIP_ST
- if (p->mtMode)
- {
- RINOK(MatchFinderMt_Create(&p->matchFinderMt, p->dictSize, beforeSize, p->numFastBytes,
- LZMA_MATCH_LEN_MAX
- + 1 /* 18.04 */
- , allocBig));
- p->matchFinderObj = &p->matchFinderMt;
- p->matchFinderBase.bigHash = (Byte)(
- (p->dictSize > kBigHashDicLimit && p->matchFinderBase.hashMask >= 0xFFFFFF) ? 1 : 0);
- MatchFinderMt_CreateVTable(&p->matchFinderMt, &p->matchFinder);
- }
- else
- #endif
- {
- if (!MatchFinder_Create(&p->matchFinderBase, p->dictSize, beforeSize, p->numFastBytes, LZMA_MATCH_LEN_MAX, allocBig))
- return SZ_ERROR_MEM;
- p->matchFinderObj = &p->matchFinderBase;
- MatchFinder_CreateVTable(&p->matchFinderBase, &p->matchFinder);
- }
-
- return SZ_OK;
-}
-
-void LzmaEnc_Init(CLzmaEnc *p)
-{
- unsigned i;
- p->state = 0;
- p->reps[0] =
- p->reps[1] =
- p->reps[2] =
- p->reps[3] = 1;
-
- RangeEnc_Init(&p->rc);
-
- for (i = 0; i < (1 << kNumAlignBits); i++)
- p->posAlignEncoder[i] = kProbInitValue;
-
- for (i = 0; i < kNumStates; i++)
- {
- unsigned j;
- for (j = 0; j < LZMA_NUM_PB_STATES_MAX; j++)
- {
- p->isMatch[i][j] = kProbInitValue;
- p->isRep0Long[i][j] = kProbInitValue;
- }
- p->isRep[i] = kProbInitValue;
- p->isRepG0[i] = kProbInitValue;
- p->isRepG1[i] = kProbInitValue;
- p->isRepG2[i] = kProbInitValue;
- }
-
- {
- for (i = 0; i < kNumLenToPosStates; i++)
- {
- CLzmaProb *probs = p->posSlotEncoder[i];
- unsigned j;
- for (j = 0; j < (1 << kNumPosSlotBits); j++)
- probs[j] = kProbInitValue;
- }
- }
- {
- for (i = 0; i < kNumFullDistances; i++)
- p->posEncoders[i] = kProbInitValue;
- }
-
- {
- UInt32 num = (UInt32)0x300 << (p->lp + p->lc);
- UInt32 k;
- CLzmaProb *probs = p->litProbs;
- for (k = 0; k < num; k++)
- probs[k] = kProbInitValue;
- }
-
-
- LenEnc_Init(&p->lenProbs);
- LenEnc_Init(&p->repLenProbs);
-
- p->optEnd = 0;
- p->optCur = 0;
-
- {
- for (i = 0; i < kNumOpts; i++)
- p->opt[i].price = kInfinityPrice;
- }
-
- p->additionalOffset = 0;
-
- p->pbMask = (1 << p->pb) - 1;
- p->lpMask = ((UInt32)0x100 << p->lp) - ((unsigned)0x100 >> p->lc);
-}
-
-
-void LzmaEnc_InitPrices(CLzmaEnc *p)
-{
- if (!p->fastMode)
- {
- FillDistancesPrices(p);
- FillAlignPrices(p);
- }
-
- p->lenEnc.tableSize =
- p->repLenEnc.tableSize =
- p->numFastBytes + 1 - LZMA_MATCH_LEN_MIN;
-
- p->repLenEncCounter = REP_LEN_COUNT;
-
- LenPriceEnc_UpdateTables(&p->lenEnc, 1 << p->pb, &p->lenProbs, p->ProbPrices);
- LenPriceEnc_UpdateTables(&p->repLenEnc, 1 << p->pb, &p->repLenProbs, p->ProbPrices);
-}
-
-static SRes LzmaEnc_AllocAndInit(CLzmaEnc *p, UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- unsigned i;
- for (i = kEndPosModelIndex / 2; i < kDicLogSizeMax; i++)
- if (p->dictSize <= ((UInt32)1 << i))
- break;
- p->distTableSize = i * 2;
-
- p->finished = False;
- p->result = SZ_OK;
- RINOK(LzmaEnc_Alloc(p, keepWindowSize, alloc, allocBig));
- LzmaEnc_Init(p);
- LzmaEnc_InitPrices(p);
- p->nowPos64 = 0;
- return SZ_OK;
-}
-
-SRes LzmaEnc_Prepare(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream,
- ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- CLzmaEnc *p = (CLzmaEnc *)pp;
- p->matchFinderBase.stream = inStream;
- p->needInit = 1;
- p->rc.outStream = outStream;
- return LzmaEnc_AllocAndInit(p, 0, alloc, allocBig);
-}
-
-SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp,
- ISeqInStream *inStream, UInt32 keepWindowSize,
- ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- CLzmaEnc *p = (CLzmaEnc *)pp;
- p->matchFinderBase.stream = inStream;
- p->needInit = 1;
- return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig);
-}
-
-static void LzmaEnc_SetInputBuf(CLzmaEnc *p, const Byte *src, SizeT srcLen)
-{
- p->matchFinderBase.directInput = 1;
- p->matchFinderBase.bufferBase = (Byte *)src;
- p->matchFinderBase.directInputRem = srcLen;
-}
-
-SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen,
- UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- CLzmaEnc *p = (CLzmaEnc *)pp;
- LzmaEnc_SetInputBuf(p, src, srcLen);
- p->needInit = 1;
-
- LzmaEnc_SetDataSize(pp, srcLen);
- return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig);
-}
-
-void LzmaEnc_Finish(CLzmaEncHandle pp)
-{
- #ifndef _7ZIP_ST
- CLzmaEnc *p = (CLzmaEnc *)pp;
- if (p->mtMode)
- MatchFinderMt_ReleaseStream(&p->matchFinderMt);
- #else
- UNUSED_VAR(pp);
- #endif
-}
-
-
-typedef struct
-{
- ISeqOutStream vt;
- Byte *data;
- SizeT rem;
- BoolInt overflow;
-} CLzmaEnc_SeqOutStreamBuf;
-
-static size_t SeqOutStreamBuf_Write(const ISeqOutStream *pp, const void *data, size_t size)
-{
- CLzmaEnc_SeqOutStreamBuf *p = CONTAINER_FROM_VTBL(pp, CLzmaEnc_SeqOutStreamBuf, vt);
- if (p->rem < size)
- {
- size = p->rem;
- p->overflow = True;
- }
- memcpy(p->data, data, size);
- p->rem -= size;
- p->data += size;
- return size;
-}
-
-
-UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp)
-{
- const CLzmaEnc *p = (CLzmaEnc *)pp;
- return p->matchFinder.GetNumAvailableBytes(p->matchFinderObj);
-}
-
-
-const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp)
-{
- const CLzmaEnc *p = (CLzmaEnc *)pp;
- return p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset;
-}
-
-
-SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit,
- Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize)
-{
- CLzmaEnc *p = (CLzmaEnc *)pp;
- UInt64 nowPos64;
- SRes res;
- CLzmaEnc_SeqOutStreamBuf outStream;
-
- outStream.vt.Write = SeqOutStreamBuf_Write;
- outStream.data = dest;
- outStream.rem = *destLen;
- outStream.overflow = False;
-
- p->writeEndMark = False;
- p->finished = False;
- p->result = SZ_OK;
-
- if (reInit)
- LzmaEnc_Init(p);
- LzmaEnc_InitPrices(p);
-
- nowPos64 = p->nowPos64;
- RangeEnc_Init(&p->rc);
- p->rc.outStream = &outStream.vt;
-
- if (desiredPackSize == 0)
- return SZ_ERROR_OUTPUT_EOF;
-
- res = LzmaEnc_CodeOneBlock(p, desiredPackSize, *unpackSize);
-
- *unpackSize = (UInt32)(p->nowPos64 - nowPos64);
- *destLen -= outStream.rem;
- if (outStream.overflow)
- return SZ_ERROR_OUTPUT_EOF;
-
- return res;
-}
-
-
-static SRes LzmaEnc_Encode2(CLzmaEnc *p, ICompressProgress *progress)
-{
- SRes res = SZ_OK;
-
- #ifndef _7ZIP_ST
- Byte allocaDummy[0x300];
- allocaDummy[0] = 0;
- allocaDummy[1] = allocaDummy[0];
- #endif
-
- for (;;)
- {
- res = LzmaEnc_CodeOneBlock(p, 0, 0);
- if (res != SZ_OK || p->finished)
- break;
- if (progress)
- {
- res = ICompressProgress_Progress(progress, p->nowPos64, RangeEnc_GetProcessed(&p->rc));
- if (res != SZ_OK)
- {
- res = SZ_ERROR_PROGRESS;
- break;
- }
- }
- }
-
- LzmaEnc_Finish(p);
-
- /*
- if (res == SZ_OK && !Inline_MatchFinder_IsFinishedOK(&p->matchFinderBase))
- res = SZ_ERROR_FAIL;
- }
- */
-
- return res;
-}
-
-
-SRes LzmaEnc_Encode(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress,
- ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- RINOK(LzmaEnc_Prepare(pp, outStream, inStream, alloc, allocBig));
- return LzmaEnc_Encode2((CLzmaEnc *)pp, progress);
-}
-
-
-SRes LzmaEnc_WriteProperties(CLzmaEncHandle pp, Byte *props, SizeT *size)
-{
- CLzmaEnc *p = (CLzmaEnc *)pp;
- unsigned i;
- UInt32 dictSize = p->dictSize;
- if (*size < LZMA_PROPS_SIZE)
- return SZ_ERROR_PARAM;
- *size = LZMA_PROPS_SIZE;
- props[0] = (Byte)((p->pb * 5 + p->lp) * 9 + p->lc);
-
- if (dictSize >= ((UInt32)1 << 22))
- {
- UInt32 kDictMask = ((UInt32)1 << 20) - 1;
- if (dictSize < (UInt32)0xFFFFFFFF - kDictMask)
- dictSize = (dictSize + kDictMask) & ~kDictMask;
- }
- else for (i = 11; i <= 30; i++)
- {
- if (dictSize <= ((UInt32)2 << i)) { dictSize = (2 << i); break; }
- if (dictSize <= ((UInt32)3 << i)) { dictSize = (3 << i); break; }
- }
-
- for (i = 0; i < 4; i++)
- props[1 + i] = (Byte)(dictSize >> (8 * i));
- return SZ_OK;
-}
-
-
-unsigned LzmaEnc_IsWriteEndMark(CLzmaEncHandle pp)
-{
- return ((CLzmaEnc *)pp)->writeEndMark;
-}
-
-
-SRes LzmaEnc_MemEncode(CLzmaEncHandle pp, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
- int writeEndMark, ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- SRes res;
- CLzmaEnc *p = (CLzmaEnc *)pp;
-
- CLzmaEnc_SeqOutStreamBuf outStream;
-
- outStream.vt.Write = SeqOutStreamBuf_Write;
- outStream.data = dest;
- outStream.rem = *destLen;
- outStream.overflow = False;
-
- p->writeEndMark = writeEndMark;
- p->rc.outStream = &outStream.vt;
-
- res = LzmaEnc_MemPrepare(pp, src, srcLen, 0, alloc, allocBig);
-
- if (res == SZ_OK)
- {
- res = LzmaEnc_Encode2(p, progress);
- if (res == SZ_OK && p->nowPos64 != srcLen)
- res = SZ_ERROR_FAIL;
- }
-
- *destLen -= outStream.rem;
- if (outStream.overflow)
- return SZ_ERROR_OUTPUT_EOF;
- return res;
-}
-
-
-SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
- const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark,
- ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig)
-{
- CLzmaEnc *p = (CLzmaEnc *)LzmaEnc_Create(alloc);
- SRes res;
- if (!p)
- return SZ_ERROR_MEM;
-
- res = LzmaEnc_SetProps(p, props);
- if (res == SZ_OK)
- {
- res = LzmaEnc_WriteProperties(p, propsEncoded, propsSize);
- if (res == SZ_OK)
- res = LzmaEnc_MemEncode(p, dest, destLen, src, srcLen,
- writeEndMark, progress, alloc, allocBig);
- }
-
- LzmaEnc_Destroy(p, alloc, allocBig);
- return res;
-}
-
-BoolInt LzmaEnc_IsFinished(CLzmaEncHandle pp)
-{
- CLzmaEnc *p = (CLzmaEnc *)pp;
- return p->finished;
-}
-
+/* LzmaEnc.c -- LZMA Encoder
+2019-01-10: Igor Pavlov : Public domain */
+
+#include "Precomp.h"
+
+#include <string.h>
+
+/* #define SHOW_STAT */
+/* #define SHOW_STAT2 */
+
+#if defined(SHOW_STAT) || defined(SHOW_STAT2)
+#include <stdio.h>
+#endif
+
+#include "LzmaEnc.h"
+
+#include "LzFind.h"
+#ifndef _7ZIP_ST
+#include "LzFindMt.h"
+#endif
+
+#ifdef SHOW_STAT
+static unsigned g_STAT_OFFSET = 0;
+#endif
+
+#define kLzmaMaxHistorySize ((UInt32)3 << 29)
+/* #define kLzmaMaxHistorySize ((UInt32)7 << 29) */
+
+#define kNumTopBits 24
+#define kTopValue ((UInt32)1 << kNumTopBits)
+
+#define kNumBitModelTotalBits 11
+#define kBitModelTotal (1 << kNumBitModelTotalBits)
+#define kNumMoveBits 5
+#define kProbInitValue (kBitModelTotal >> 1)
+
+#define kNumMoveReducingBits 4
+#define kNumBitPriceShiftBits 4
+#define kBitPrice (1 << kNumBitPriceShiftBits)
+
+#define REP_LEN_COUNT 64
+
+void LzmaEncProps_Init(CLzmaEncProps *p)
+{
+ p->level = 5;
+ p->dictSize = p->mc = 0;
+ p->reduceSize = (UInt64)(Int64)-1;
+ p->lc = p->lp = p->pb = p->algo = p->fb = p->btMode = p->numHashBytes = p->numThreads = -1;
+ p->writeEndMark = 0;
+}
+
+void LzmaEncProps_Normalize(CLzmaEncProps *p)
+{
+ int level = p->level;
+ if (level < 0) level = 5;
+ p->level = level;
+
+ if (p->dictSize == 0) p->dictSize = (level <= 5 ? (1 << (level * 2 + 14)) : (level <= 7 ? (1 << 25) : (1 << 26)));
+ if (p->dictSize > p->reduceSize)
+ {
+ unsigned i;
+ UInt32 reduceSize = (UInt32)p->reduceSize;
+ for (i = 11; i <= 30; i++)
+ {
+ if (reduceSize <= ((UInt32)2 << i)) { p->dictSize = ((UInt32)2 << i); break; }
+ if (reduceSize <= ((UInt32)3 << i)) { p->dictSize = ((UInt32)3 << i); break; }
+ }
+ }
+
+ if (p->lc < 0) p->lc = 3;
+ if (p->lp < 0) p->lp = 0;
+ if (p->pb < 0) p->pb = 2;
+
+ if (p->algo < 0) p->algo = (level < 5 ? 0 : 1);
+ if (p->fb < 0) p->fb = (level < 7 ? 32 : 64);
+ if (p->btMode < 0) p->btMode = (p->algo == 0 ? 0 : 1);
+ if (p->numHashBytes < 0) p->numHashBytes = 4;
+ if (p->mc == 0) p->mc = (16 + (p->fb >> 1)) >> (p->btMode ? 0 : 1);
+
+ if (p->numThreads < 0)
+ p->numThreads =
+ #ifndef _7ZIP_ST
+ ((p->btMode && p->algo) ? 2 : 1);
+ #else
+ 1;
+ #endif
+}
+
+UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2)
+{
+ CLzmaEncProps props = *props2;
+ LzmaEncProps_Normalize(&props);
+ return props.dictSize;
+}
+
+#if (_MSC_VER >= 1400)
+/* BSR code is fast for some new CPUs */
+/* #define LZMA_LOG_BSR */
+#endif
+
+#ifdef LZMA_LOG_BSR
+
+#define kDicLogSizeMaxCompress 32
+
+#define BSR2_RET(pos, res) { unsigned long zz; _BitScanReverse(&zz, (pos)); res = (zz + zz) + ((pos >> (zz - 1)) & 1); }
+
+static unsigned GetPosSlot1(UInt32 pos)
+{
+ unsigned res;
+ BSR2_RET(pos, res);
+ return res;
+}
+#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); }
+#define GetPosSlot(pos, res) { if (pos < 2) res = pos; else BSR2_RET(pos, res); }
+
+#else
+
+#define kNumLogBits (9 + sizeof(size_t) / 2)
+/* #define kNumLogBits (11 + sizeof(size_t) / 8 * 3) */
+
+#define kDicLogSizeMaxCompress ((kNumLogBits - 1) * 2 + 7)
+
+static void LzmaEnc_FastPosInit(Byte *g_FastPos)
+{
+ unsigned slot;
+ g_FastPos[0] = 0;
+ g_FastPos[1] = 1;
+ g_FastPos += 2;
+
+ for (slot = 2; slot < kNumLogBits * 2; slot++)
+ {
+ size_t k = ((size_t)1 << ((slot >> 1) - 1));
+ size_t j;
+ for (j = 0; j < k; j++)
+ g_FastPos[j] = (Byte)slot;
+ g_FastPos += k;
+ }
+}
+
+/* we can use ((limit - pos) >> 31) only if (pos < ((UInt32)1 << 31)) */
+/*
+#define BSR2_RET(pos, res) { unsigned zz = 6 + ((kNumLogBits - 1) & \
+ (0 - (((((UInt32)1 << (kNumLogBits + 6)) - 1) - pos) >> 31))); \
+ res = p->g_FastPos[pos >> zz] + (zz * 2); }
+*/
+
+/*
+#define BSR2_RET(pos, res) { unsigned zz = 6 + ((kNumLogBits - 1) & \
+ (0 - (((((UInt32)1 << (kNumLogBits)) - 1) - (pos >> 6)) >> 31))); \
+ res = p->g_FastPos[pos >> zz] + (zz * 2); }
+*/
+
+#define BSR2_RET(pos, res) { unsigned zz = (pos < (1 << (kNumLogBits + 6))) ? 6 : 6 + kNumLogBits - 1; \
+ res = p->g_FastPos[pos >> zz] + (zz * 2); }
+
+/*
+#define BSR2_RET(pos, res) { res = (pos < (1 << (kNumLogBits + 6))) ? \
+ p->g_FastPos[pos >> 6] + 12 : \
+ p->g_FastPos[pos >> (6 + kNumLogBits - 1)] + (6 + (kNumLogBits - 1)) * 2; }
+*/
+
+#define GetPosSlot1(pos) p->g_FastPos[pos]
+#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); }
+#define GetPosSlot(pos, res) { if (pos < kNumFullDistances) res = p->g_FastPos[pos & (kNumFullDistances - 1)]; else BSR2_RET(pos, res); }
+
+#endif
+
+
+#define LZMA_NUM_REPS 4
+
+typedef UInt16 CState;
+typedef UInt16 CExtra;
+
+typedef struct
+{
+ UInt32 price;
+ CState state;
+ CExtra extra;
+ // 0 : normal
+ // 1 : LIT : MATCH
+ // > 1 : MATCH (extra-1) : LIT : REP0 (len)
+ UInt32 len;
+ UInt32 dist;
+ UInt32 reps[LZMA_NUM_REPS];
+} COptimal;
+
+
+// 18.06
+#define kNumOpts (1 << 11)
+#define kPackReserve (kNumOpts * 8)
+// #define kNumOpts (1 << 12)
+// #define kPackReserve (1 + kNumOpts * 2)
+
+#define kNumLenToPosStates 4
+#define kNumPosSlotBits 6
+#define kDicLogSizeMin 0
+#define kDicLogSizeMax 32
+#define kDistTableSizeMax (kDicLogSizeMax * 2)
+
+#define kNumAlignBits 4
+#define kAlignTableSize (1 << kNumAlignBits)
+#define kAlignMask (kAlignTableSize - 1)
+
+#define kStartPosModelIndex 4
+#define kEndPosModelIndex 14
+#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
+
+typedef
+#ifdef _LZMA_PROB32
+ UInt32
+#else
+ UInt16
+#endif
+ CLzmaProb;
+
+#define LZMA_PB_MAX 4
+#define LZMA_LC_MAX 8
+#define LZMA_LP_MAX 4
+
+#define LZMA_NUM_PB_STATES_MAX (1 << LZMA_PB_MAX)
+
+#define kLenNumLowBits 3
+#define kLenNumLowSymbols (1 << kLenNumLowBits)
+#define kLenNumHighBits 8
+#define kLenNumHighSymbols (1 << kLenNumHighBits)
+#define kLenNumSymbolsTotal (kLenNumLowSymbols * 2 + kLenNumHighSymbols)
+
+#define LZMA_MATCH_LEN_MIN 2
+#define LZMA_MATCH_LEN_MAX (LZMA_MATCH_LEN_MIN + kLenNumSymbolsTotal - 1)
+
+#define kNumStates 12
+
+
+typedef struct
+{
+ CLzmaProb low[LZMA_NUM_PB_STATES_MAX << (kLenNumLowBits + 1)];
+ CLzmaProb high[kLenNumHighSymbols];
+} CLenEnc;
+
+
+typedef struct
+{
+ unsigned tableSize;
+ UInt32 prices[LZMA_NUM_PB_STATES_MAX][kLenNumSymbolsTotal];
+ // UInt32 prices1[LZMA_NUM_PB_STATES_MAX][kLenNumLowSymbols * 2];
+ // UInt32 prices2[kLenNumSymbolsTotal];
+} CLenPriceEnc;
+
+#define GET_PRICE_LEN(p, posState, len) \
+ ((p)->prices[posState][(size_t)(len) - LZMA_MATCH_LEN_MIN])
+
+/*
+#define GET_PRICE_LEN(p, posState, len) \
+ ((p)->prices2[(size_t)(len) - 2] + ((p)->prices1[posState][((len) - 2) & (kLenNumLowSymbols * 2 - 1)] & (((len) - 2 - kLenNumLowSymbols * 2) >> 9)))
+*/
+
+typedef struct
+{
+ UInt32 range;
+ unsigned cache;
+ UInt64 low;
+ UInt64 cacheSize;
+ Byte *buf;
+ Byte *bufLim;
+ Byte *bufBase;
+ ISeqOutStream *outStream;
+ UInt64 processed;
+ SRes res;
+} CRangeEnc;
+
+
+typedef struct
+{
+ CLzmaProb *litProbs;
+
+ unsigned state;
+ UInt32 reps[LZMA_NUM_REPS];
+
+ CLzmaProb posAlignEncoder[1 << kNumAlignBits];
+ CLzmaProb isRep[kNumStates];
+ CLzmaProb isRepG0[kNumStates];
+ CLzmaProb isRepG1[kNumStates];
+ CLzmaProb isRepG2[kNumStates];
+ CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX];
+ CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX];
+
+ CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits];
+ CLzmaProb posEncoders[kNumFullDistances];
+
+ CLenEnc lenProbs;
+ CLenEnc repLenProbs;
+
+} CSaveState;
+
+
+typedef UInt32 CProbPrice;
+
+
+typedef struct
+{
+ void *matchFinderObj;
+ IMatchFinder matchFinder;
+
+ unsigned optCur;
+ unsigned optEnd;
+
+ unsigned longestMatchLen;
+ unsigned numPairs;
+ UInt32 numAvail;
+
+ unsigned state;
+ unsigned numFastBytes;
+ unsigned additionalOffset;
+ UInt32 reps[LZMA_NUM_REPS];
+ unsigned lpMask, pbMask;
+ CLzmaProb *litProbs;
+ CRangeEnc rc;
+
+ UInt32 backRes;
+
+ unsigned lc, lp, pb;
+ unsigned lclp;
+
+ BoolInt fastMode;
+ BoolInt writeEndMark;
+ BoolInt finished;
+ BoolInt multiThread;
+ BoolInt needInit;
+ // BoolInt _maxMode;
+
+ UInt64 nowPos64;
+
+ unsigned matchPriceCount;
+ // unsigned alignPriceCount;
+ int repLenEncCounter;
+
+ unsigned distTableSize;
+
+ UInt32 dictSize;
+ SRes result;
+
+ #ifndef _7ZIP_ST
+ BoolInt mtMode;
+ // begin of CMatchFinderMt is used in LZ thread
+ CMatchFinderMt matchFinderMt;
+ // end of CMatchFinderMt is used in BT and HASH threads
+ #endif
+
+ CMatchFinder matchFinderBase;
+
+ #ifndef _7ZIP_ST
+ Byte pad[128];
+ #endif
+
+ // LZ thread
+ CProbPrice ProbPrices[kBitModelTotal >> kNumMoveReducingBits];
+
+ UInt32 matches[LZMA_MATCH_LEN_MAX * 2 + 2 + 1];
+
+ UInt32 alignPrices[kAlignTableSize];
+ UInt32 posSlotPrices[kNumLenToPosStates][kDistTableSizeMax];
+ UInt32 distancesPrices[kNumLenToPosStates][kNumFullDistances];
+
+ CLzmaProb posAlignEncoder[1 << kNumAlignBits];
+ CLzmaProb isRep[kNumStates];
+ CLzmaProb isRepG0[kNumStates];
+ CLzmaProb isRepG1[kNumStates];
+ CLzmaProb isRepG2[kNumStates];
+ CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX];
+ CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX];
+ CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits];
+ CLzmaProb posEncoders[kNumFullDistances];
+
+ CLenEnc lenProbs;
+ CLenEnc repLenProbs;
+
+ #ifndef LZMA_LOG_BSR
+ Byte g_FastPos[1 << kNumLogBits];
+ #endif
+
+ CLenPriceEnc lenEnc;
+ CLenPriceEnc repLenEnc;
+
+ COptimal opt[kNumOpts];
+
+ CSaveState saveState;
+
+ #ifndef _7ZIP_ST
+ Byte pad2[128];
+ #endif
+} CLzmaEnc;
+
+
+
+#define COPY_ARR(dest, src, arr) memcpy(dest->arr, src->arr, sizeof(src->arr));
+
+void LzmaEnc_SaveState(CLzmaEncHandle pp)
+{
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+ CSaveState *dest = &p->saveState;
+
+ dest->state = p->state;
+
+ dest->lenProbs = p->lenProbs;
+ dest->repLenProbs = p->repLenProbs;
+
+ COPY_ARR(dest, p, reps);
+
+ COPY_ARR(dest, p, posAlignEncoder);
+ COPY_ARR(dest, p, isRep);
+ COPY_ARR(dest, p, isRepG0);
+ COPY_ARR(dest, p, isRepG1);
+ COPY_ARR(dest, p, isRepG2);
+ COPY_ARR(dest, p, isMatch);
+ COPY_ARR(dest, p, isRep0Long);
+ COPY_ARR(dest, p, posSlotEncoder);
+ COPY_ARR(dest, p, posEncoders);
+
+ memcpy(dest->litProbs, p->litProbs, ((UInt32)0x300 << p->lclp) * sizeof(CLzmaProb));
+}
+
+
+void LzmaEnc_RestoreState(CLzmaEncHandle pp)
+{
+ CLzmaEnc *dest = (CLzmaEnc *)pp;
+ const CSaveState *p = &dest->saveState;
+
+ dest->state = p->state;
+
+ dest->lenProbs = p->lenProbs;
+ dest->repLenProbs = p->repLenProbs;
+
+ COPY_ARR(dest, p, reps);
+
+ COPY_ARR(dest, p, posAlignEncoder);
+ COPY_ARR(dest, p, isRep);
+ COPY_ARR(dest, p, isRepG0);
+ COPY_ARR(dest, p, isRepG1);
+ COPY_ARR(dest, p, isRepG2);
+ COPY_ARR(dest, p, isMatch);
+ COPY_ARR(dest, p, isRep0Long);
+ COPY_ARR(dest, p, posSlotEncoder);
+ COPY_ARR(dest, p, posEncoders);
+
+ memcpy(dest->litProbs, p->litProbs, ((UInt32)0x300 << dest->lclp) * sizeof(CLzmaProb));
+}
+
+
+
+SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2)
+{
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+ CLzmaEncProps props = *props2;
+ LzmaEncProps_Normalize(&props);
+
+ if (props.lc > LZMA_LC_MAX
+ || props.lp > LZMA_LP_MAX
+ || props.pb > LZMA_PB_MAX
+ || props.dictSize > ((UInt64)1 << kDicLogSizeMaxCompress)
+ || props.dictSize > kLzmaMaxHistorySize)
+ return SZ_ERROR_PARAM;
+
+ p->dictSize = props.dictSize;
+ {
+ unsigned fb = props.fb;
+ if (fb < 5)
+ fb = 5;
+ if (fb > LZMA_MATCH_LEN_MAX)
+ fb = LZMA_MATCH_LEN_MAX;
+ p->numFastBytes = fb;
+ }
+ p->lc = props.lc;
+ p->lp = props.lp;
+ p->pb = props.pb;
+ p->fastMode = (props.algo == 0);
+ // p->_maxMode = True;
+ p->matchFinderBase.btMode = (Byte)(props.btMode ? 1 : 0);
+ {
+ unsigned numHashBytes = 4;
+ if (props.btMode)
+ {
+ if (props.numHashBytes < 2)
+ numHashBytes = 2;
+ else if (props.numHashBytes < 4)
+ numHashBytes = props.numHashBytes;
+ }
+ p->matchFinderBase.numHashBytes = numHashBytes;
+ }
+
+ p->matchFinderBase.cutValue = props.mc;
+
+ p->writeEndMark = props.writeEndMark;
+
+ #ifndef _7ZIP_ST
+ /*
+ if (newMultiThread != _multiThread)
+ {
+ ReleaseMatchFinder();
+ _multiThread = newMultiThread;
+ }
+ */
+ p->multiThread = (props.numThreads > 1);
+ #endif
+
+ return SZ_OK;
+}
+
+
+void LzmaEnc_SetDataSize(CLzmaEncHandle pp, UInt64 expectedDataSiize)
+{
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+ p->matchFinderBase.expectedDataSize = expectedDataSiize;
+}
+
+
+#define kState_Start 0
+#define kState_LitAfterMatch 4
+#define kState_LitAfterRep 5
+#define kState_MatchAfterLit 7
+#define kState_RepAfterLit 8
+
+static const Byte kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5};
+static const Byte kMatchNextStates[kNumStates] = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10};
+static const Byte kRepNextStates[kNumStates] = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11};
+static const Byte kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11};
+
+#define IsLitState(s) ((s) < 7)
+#define GetLenToPosState2(len) (((len) < kNumLenToPosStates - 1) ? (len) : kNumLenToPosStates - 1)
+#define GetLenToPosState(len) (((len) < kNumLenToPosStates + 1) ? (len) - 2 : kNumLenToPosStates - 1)
+
+#define kInfinityPrice (1 << 30)
+
+static void RangeEnc_Construct(CRangeEnc *p)
+{
+ p->outStream = NULL;
+ p->bufBase = NULL;
+}
+
+#define RangeEnc_GetProcessed(p) ((p)->processed + ((p)->buf - (p)->bufBase) + (p)->cacheSize)
+#define RangeEnc_GetProcessed_sizet(p) ((size_t)(p)->processed + ((p)->buf - (p)->bufBase) + (size_t)(p)->cacheSize)
+
+#define RC_BUF_SIZE (1 << 16)
+
+static int RangeEnc_Alloc(CRangeEnc *p, ISzAllocPtr alloc)
+{
+ if (!p->bufBase)
+ {
+ p->bufBase = (Byte *)ISzAlloc_Alloc(alloc, RC_BUF_SIZE);
+ if (!p->bufBase)
+ return 0;
+ p->bufLim = p->bufBase + RC_BUF_SIZE;
+ }
+ return 1;
+}
+
+static void RangeEnc_Free(CRangeEnc *p, ISzAllocPtr alloc)
+{
+ ISzAlloc_Free(alloc, p->bufBase);
+ p->bufBase = 0;
+}
+
+static void RangeEnc_Init(CRangeEnc *p)
+{
+ /* Stream.Init(); */
+ p->range = 0xFFFFFFFF;
+ p->cache = 0;
+ p->low = 0;
+ p->cacheSize = 0;
+
+ p->buf = p->bufBase;
+
+ p->processed = 0;
+ p->res = SZ_OK;
+}
+
+MY_NO_INLINE static void RangeEnc_FlushStream(CRangeEnc *p)
+{
+ size_t num;
+ if (p->res != SZ_OK)
+ return;
+ num = p->buf - p->bufBase;
+ if (num != ISeqOutStream_Write(p->outStream, p->bufBase, num))
+ p->res = SZ_ERROR_WRITE;
+ p->processed += num;
+ p->buf = p->bufBase;
+}
+
+MY_NO_INLINE static void MY_FAST_CALL RangeEnc_ShiftLow(CRangeEnc *p)
+{
+ UInt32 low = (UInt32)p->low;
+ unsigned high = (unsigned)(p->low >> 32);
+ p->low = (UInt32)(low << 8);
+ if (low < (UInt32)0xFF000000 || high != 0)
+ {
+ {
+ Byte *buf = p->buf;
+ *buf++ = (Byte)(p->cache + high);
+ p->cache = (unsigned)(low >> 24);
+ p->buf = buf;
+ if (buf == p->bufLim)
+ RangeEnc_FlushStream(p);
+ if (p->cacheSize == 0)
+ return;
+ }
+ high += 0xFF;
+ for (;;)
+ {
+ Byte *buf = p->buf;
+ *buf++ = (Byte)(high);
+ p->buf = buf;
+ if (buf == p->bufLim)
+ RangeEnc_FlushStream(p);
+ if (--p->cacheSize == 0)
+ return;
+ }
+ }
+ p->cacheSize++;
+}
+
+static void RangeEnc_FlushData(CRangeEnc *p)
+{
+ int i;
+ for (i = 0; i < 5; i++)
+ RangeEnc_ShiftLow(p);
+}
+
+#define RC_NORM(p) if (range < kTopValue) { range <<= 8; RangeEnc_ShiftLow(p); }
+
+#define RC_BIT_PRE(p, prob) \
+ ttt = *(prob); \
+ newBound = (range >> kNumBitModelTotalBits) * ttt;
+
+// #define _LZMA_ENC_USE_BRANCH
+
+#ifdef _LZMA_ENC_USE_BRANCH
+
+#define RC_BIT(p, prob, bit) { \
+ RC_BIT_PRE(p, prob) \
+ if (bit == 0) { range = newBound; ttt += (kBitModelTotal - ttt) >> kNumMoveBits; } \
+ else { (p)->low += newBound; range -= newBound; ttt -= ttt >> kNumMoveBits; } \
+ *(prob) = (CLzmaProb)ttt; \
+ RC_NORM(p) \
+ }
+
+#else
+
+#define RC_BIT(p, prob, bit) { \
+ UInt32 mask; \
+ RC_BIT_PRE(p, prob) \
+ mask = 0 - (UInt32)bit; \
+ range &= mask; \
+ mask &= newBound; \
+ range -= mask; \
+ (p)->low += mask; \
+ mask = (UInt32)bit - 1; \
+ range += newBound & mask; \
+ mask &= (kBitModelTotal - ((1 << kNumMoveBits) - 1)); \
+ mask += ((1 << kNumMoveBits) - 1); \
+ ttt += (Int32)(mask - ttt) >> kNumMoveBits; \
+ *(prob) = (CLzmaProb)ttt; \
+ RC_NORM(p) \
+ }
+
+#endif
+
+
+
+
+#define RC_BIT_0_BASE(p, prob) \
+ range = newBound; *(prob) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits));
+
+#define RC_BIT_1_BASE(p, prob) \
+ range -= newBound; (p)->low += newBound; *(prob) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); \
+
+#define RC_BIT_0(p, prob) \
+ RC_BIT_0_BASE(p, prob) \
+ RC_NORM(p)
+
+#define RC_BIT_1(p, prob) \
+ RC_BIT_1_BASE(p, prob) \
+ RC_NORM(p)
+
+static void RangeEnc_EncodeBit_0(CRangeEnc *p, CLzmaProb *prob)
+{
+ UInt32 range, ttt, newBound;
+ range = p->range;
+ RC_BIT_PRE(p, prob)
+ RC_BIT_0(p, prob)
+ p->range = range;
+}
+
+static void LitEnc_Encode(CRangeEnc *p, CLzmaProb *probs, UInt32 sym)
+{
+ UInt32 range = p->range;
+ sym |= 0x100;
+ do
+ {
+ UInt32 ttt, newBound;
+ // RangeEnc_EncodeBit(p, probs + (sym >> 8), (sym >> 7) & 1);
+ CLzmaProb *prob = probs + (sym >> 8);
+ UInt32 bit = (sym >> 7) & 1;
+ sym <<= 1;
+ RC_BIT(p, prob, bit);
+ }
+ while (sym < 0x10000);
+ p->range = range;
+}
+
+static void LitEnc_EncodeMatched(CRangeEnc *p, CLzmaProb *probs, UInt32 sym, UInt32 matchByte)
+{
+ UInt32 range = p->range;
+ UInt32 offs = 0x100;
+ sym |= 0x100;
+ do
+ {
+ UInt32 ttt, newBound;
+ CLzmaProb *prob;
+ UInt32 bit;
+ matchByte <<= 1;
+ // RangeEnc_EncodeBit(p, probs + (offs + (matchByte & offs) + (sym >> 8)), (sym >> 7) & 1);
+ prob = probs + (offs + (matchByte & offs) + (sym >> 8));
+ bit = (sym >> 7) & 1;
+ sym <<= 1;
+ offs &= ~(matchByte ^ sym);
+ RC_BIT(p, prob, bit);
+ }
+ while (sym < 0x10000);
+ p->range = range;
+}
+
+
+
+static void LzmaEnc_InitPriceTables(CProbPrice *ProbPrices)
+{
+ UInt32 i;
+ for (i = 0; i < (kBitModelTotal >> kNumMoveReducingBits); i++)
+ {
+ const unsigned kCyclesBits = kNumBitPriceShiftBits;
+ UInt32 w = (i << kNumMoveReducingBits) + (1 << (kNumMoveReducingBits - 1));
+ unsigned bitCount = 0;
+ unsigned j;
+ for (j = 0; j < kCyclesBits; j++)
+ {
+ w = w * w;
+ bitCount <<= 1;
+ while (w >= ((UInt32)1 << 16))
+ {
+ w >>= 1;
+ bitCount++;
+ }
+ }
+ ProbPrices[i] = (CProbPrice)((kNumBitModelTotalBits << kCyclesBits) - 15 - bitCount);
+ // printf("\n%3d: %5d", i, ProbPrices[i]);
+ }
+}
+
+
+#define GET_PRICE(prob, bit) \
+ p->ProbPrices[((prob) ^ (unsigned)(((-(int)(bit))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits];
+
+#define GET_PRICEa(prob, bit) \
+ ProbPrices[((prob) ^ (unsigned)((-((int)(bit))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits];
+
+#define GET_PRICE_0(prob) p->ProbPrices[(prob) >> kNumMoveReducingBits]
+#define GET_PRICE_1(prob) p->ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits]
+
+#define GET_PRICEa_0(prob) ProbPrices[(prob) >> kNumMoveReducingBits]
+#define GET_PRICEa_1(prob) ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits]
+
+
+static UInt32 LitEnc_GetPrice(const CLzmaProb *probs, UInt32 sym, const CProbPrice *ProbPrices)
+{
+ UInt32 price = 0;
+ sym |= 0x100;
+ do
+ {
+ unsigned bit = sym & 1;
+ sym >>= 1;
+ price += GET_PRICEa(probs[sym], bit);
+ }
+ while (sym >= 2);
+ return price;
+}
+
+
+static UInt32 LitEnc_Matched_GetPrice(const CLzmaProb *probs, UInt32 sym, UInt32 matchByte, const CProbPrice *ProbPrices)
+{
+ UInt32 price = 0;
+ UInt32 offs = 0x100;
+ sym |= 0x100;
+ do
+ {
+ matchByte <<= 1;
+ price += GET_PRICEa(probs[offs + (matchByte & offs) + (sym >> 8)], (sym >> 7) & 1);
+ sym <<= 1;
+ offs &= ~(matchByte ^ sym);
+ }
+ while (sym < 0x10000);
+ return price;
+}
+
+
+static void RcTree_ReverseEncode(CRangeEnc *rc, CLzmaProb *probs, unsigned numBits, unsigned sym)
+{
+ UInt32 range = rc->range;
+ unsigned m = 1;
+ do
+ {
+ UInt32 ttt, newBound;
+ unsigned bit = sym & 1;
+ // RangeEnc_EncodeBit(rc, probs + m, bit);
+ sym >>= 1;
+ RC_BIT(rc, probs + m, bit);
+ m = (m << 1) | bit;
+ }
+ while (--numBits);
+ rc->range = range;
+}
+
+
+
+static void LenEnc_Init(CLenEnc *p)
+{
+ unsigned i;
+ for (i = 0; i < (LZMA_NUM_PB_STATES_MAX << (kLenNumLowBits + 1)); i++)
+ p->low[i] = kProbInitValue;
+ for (i = 0; i < kLenNumHighSymbols; i++)
+ p->high[i] = kProbInitValue;
+}
+
+static void LenEnc_Encode(CLenEnc *p, CRangeEnc *rc, unsigned sym, unsigned posState)
+{
+ UInt32 range, ttt, newBound;
+ CLzmaProb *probs = p->low;
+ range = rc->range;
+ RC_BIT_PRE(rc, probs);
+ if (sym >= kLenNumLowSymbols)
+ {
+ RC_BIT_1(rc, probs);
+ probs += kLenNumLowSymbols;
+ RC_BIT_PRE(rc, probs);
+ if (sym >= kLenNumLowSymbols * 2)
+ {
+ RC_BIT_1(rc, probs);
+ rc->range = range;
+ // RcTree_Encode(rc, p->high, kLenNumHighBits, sym - kLenNumLowSymbols * 2);
+ LitEnc_Encode(rc, p->high, sym - kLenNumLowSymbols * 2);
+ return;
+ }
+ sym -= kLenNumLowSymbols;
+ }
+
+ // RcTree_Encode(rc, probs + (posState << kLenNumLowBits), kLenNumLowBits, sym);
+ {
+ unsigned m;
+ unsigned bit;
+ RC_BIT_0(rc, probs);
+ probs += (posState << (1 + kLenNumLowBits));
+ bit = (sym >> 2) ; RC_BIT(rc, probs + 1, bit); m = (1 << 1) + bit;
+ bit = (sym >> 1) & 1; RC_BIT(rc, probs + m, bit); m = (m << 1) + bit;
+ bit = sym & 1; RC_BIT(rc, probs + m, bit);
+ rc->range = range;
+ }
+}
+
+static void SetPrices_3(const CLzmaProb *probs, UInt32 startPrice, UInt32 *prices, const CProbPrice *ProbPrices)
+{
+ unsigned i;
+ for (i = 0; i < 8; i += 2)
+ {
+ UInt32 price = startPrice;
+ UInt32 prob;
+ price += GET_PRICEa(probs[1 ], (i >> 2));
+ price += GET_PRICEa(probs[2 + (i >> 2)], (i >> 1) & 1);
+ prob = probs[4 + (i >> 1)];
+ prices[i ] = price + GET_PRICEa_0(prob);
+ prices[i + 1] = price + GET_PRICEa_1(prob);
+ }
+}
+
+
+MY_NO_INLINE static void MY_FAST_CALL LenPriceEnc_UpdateTables(
+ CLenPriceEnc *p,
+ unsigned numPosStates,
+ const CLenEnc *enc,
+ const CProbPrice *ProbPrices)
+{
+ UInt32 b;
+
+ {
+ unsigned prob = enc->low[0];
+ UInt32 a, c;
+ unsigned posState;
+ b = GET_PRICEa_1(prob);
+ a = GET_PRICEa_0(prob);
+ c = b + GET_PRICEa_0(enc->low[kLenNumLowSymbols]);
+ for (posState = 0; posState < numPosStates; posState++)
+ {
+ UInt32 *prices = p->prices[posState];
+ const CLzmaProb *probs = enc->low + (posState << (1 + kLenNumLowBits));
+ SetPrices_3(probs, a, prices, ProbPrices);
+ SetPrices_3(probs + kLenNumLowSymbols, c, prices + kLenNumLowSymbols, ProbPrices);
+ }
+ }
+
+ /*
+ {
+ unsigned i;
+ UInt32 b;
+ a = GET_PRICEa_0(enc->low[0]);
+ for (i = 0; i < kLenNumLowSymbols; i++)
+ p->prices2[i] = a;
+ a = GET_PRICEa_1(enc->low[0]);
+ b = a + GET_PRICEa_0(enc->low[kLenNumLowSymbols]);
+ for (i = kLenNumLowSymbols; i < kLenNumLowSymbols * 2; i++)
+ p->prices2[i] = b;
+ a += GET_PRICEa_1(enc->low[kLenNumLowSymbols]);
+ }
+ */
+
+ // p->counter = numSymbols;
+ // p->counter = 64;
+
+ {
+ unsigned i = p->tableSize;
+
+ if (i > kLenNumLowSymbols * 2)
+ {
+ const CLzmaProb *probs = enc->high;
+ UInt32 *prices = p->prices[0] + kLenNumLowSymbols * 2;
+ i -= kLenNumLowSymbols * 2 - 1;
+ i >>= 1;
+ b += GET_PRICEa_1(enc->low[kLenNumLowSymbols]);
+ do
+ {
+ /*
+ p->prices2[i] = a +
+ // RcTree_GetPrice(enc->high, kLenNumHighBits, i - kLenNumLowSymbols * 2, ProbPrices);
+ LitEnc_GetPrice(probs, i - kLenNumLowSymbols * 2, ProbPrices);
+ */
+ // UInt32 price = a + RcTree_GetPrice(probs, kLenNumHighBits - 1, sym, ProbPrices);
+ unsigned sym = --i + (1 << (kLenNumHighBits - 1));
+ UInt32 price = b;
+ do
+ {
+ unsigned bit = sym & 1;
+ sym >>= 1;
+ price += GET_PRICEa(probs[sym], bit);
+ }
+ while (sym >= 2);
+
+ {
+ unsigned prob = probs[(size_t)i + (1 << (kLenNumHighBits - 1))];
+ prices[(size_t)i * 2 ] = price + GET_PRICEa_0(prob);
+ prices[(size_t)i * 2 + 1] = price + GET_PRICEa_1(prob);
+ }
+ }
+ while (i);
+
+ {
+ unsigned posState;
+ size_t num = (p->tableSize - kLenNumLowSymbols * 2) * sizeof(p->prices[0][0]);
+ for (posState = 1; posState < numPosStates; posState++)
+ memcpy(p->prices[posState] + kLenNumLowSymbols * 2, p->prices[0] + kLenNumLowSymbols * 2, num);
+ }
+ }
+ }
+}
+
+/*
+ #ifdef SHOW_STAT
+ g_STAT_OFFSET += num;
+ printf("\n MovePos %u", num);
+ #endif
+*/
+
+#define MOVE_POS(p, num) { \
+ p->additionalOffset += (num); \
+ p->matchFinder.Skip(p->matchFinderObj, (UInt32)(num)); }
+
+
+static unsigned ReadMatchDistances(CLzmaEnc *p, unsigned *numPairsRes)
+{
+ unsigned numPairs;
+
+ p->additionalOffset++;
+ p->numAvail = p->matchFinder.GetNumAvailableBytes(p->matchFinderObj);
+ numPairs = p->matchFinder.GetMatches(p->matchFinderObj, p->matches);
+ *numPairsRes = numPairs;
+
+ #ifdef SHOW_STAT
+ printf("\n i = %u numPairs = %u ", g_STAT_OFFSET, numPairs / 2);
+ g_STAT_OFFSET++;
+ {
+ unsigned i;
+ for (i = 0; i < numPairs; i += 2)
+ printf("%2u %6u | ", p->matches[i], p->matches[i + 1]);
+ }
+ #endif
+
+ if (numPairs == 0)
+ return 0;
+ {
+ unsigned len = p->matches[(size_t)numPairs - 2];
+ if (len != p->numFastBytes)
+ return len;
+ {
+ UInt32 numAvail = p->numAvail;
+ if (numAvail > LZMA_MATCH_LEN_MAX)
+ numAvail = LZMA_MATCH_LEN_MAX;
+ {
+ const Byte *p1 = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1;
+ const Byte *p2 = p1 + len;
+ ptrdiff_t dif = (ptrdiff_t)-1 - p->matches[(size_t)numPairs - 1];
+ const Byte *lim = p1 + numAvail;
+ for (; p2 != lim && *p2 == p2[dif]; p2++)
+ {}
+ return (unsigned)(p2 - p1);
+ }
+ }
+ }
+}
+
+#define MARK_LIT ((UInt32)(Int32)-1)
+
+#define MakeAs_Lit(p) { (p)->dist = MARK_LIT; (p)->extra = 0; }
+#define MakeAs_ShortRep(p) { (p)->dist = 0; (p)->extra = 0; }
+#define IsShortRep(p) ((p)->dist == 0)
+
+
+#define GetPrice_ShortRep(p, state, posState) \
+ ( GET_PRICE_0(p->isRepG0[state]) + GET_PRICE_0(p->isRep0Long[state][posState]))
+
+#define GetPrice_Rep_0(p, state, posState) ( \
+ GET_PRICE_1(p->isMatch[state][posState]) \
+ + GET_PRICE_1(p->isRep0Long[state][posState])) \
+ + GET_PRICE_1(p->isRep[state]) \
+ + GET_PRICE_0(p->isRepG0[state])
+
+MY_FORCE_INLINE
+static UInt32 GetPrice_PureRep(const CLzmaEnc *p, unsigned repIndex, size_t state, size_t posState)
+{
+ UInt32 price;
+ UInt32 prob = p->isRepG0[state];
+ if (repIndex == 0)
+ {
+ price = GET_PRICE_0(prob);
+ price += GET_PRICE_1(p->isRep0Long[state][posState]);
+ }
+ else
+ {
+ price = GET_PRICE_1(prob);
+ prob = p->isRepG1[state];
+ if (repIndex == 1)
+ price += GET_PRICE_0(prob);
+ else
+ {
+ price += GET_PRICE_1(prob);
+ price += GET_PRICE(p->isRepG2[state], repIndex - 2);
+ }
+ }
+ return price;
+}
+
+
+static unsigned Backward(CLzmaEnc *p, unsigned cur)
+{
+ unsigned wr = cur + 1;
+ p->optEnd = wr;
+
+ for (;;)
+ {
+ UInt32 dist = p->opt[cur].dist;
+ unsigned len = (unsigned)p->opt[cur].len;
+ unsigned extra = (unsigned)p->opt[cur].extra;
+ cur -= len;
+
+ if (extra)
+ {
+ wr--;
+ p->opt[wr].len = (UInt32)len;
+ cur -= extra;
+ len = extra;
+ if (extra == 1)
+ {
+ p->opt[wr].dist = dist;
+ dist = MARK_LIT;
+ }
+ else
+ {
+ p->opt[wr].dist = 0;
+ len--;
+ wr--;
+ p->opt[wr].dist = MARK_LIT;
+ p->opt[wr].len = 1;
+ }
+ }
+
+ if (cur == 0)
+ {
+ p->backRes = dist;
+ p->optCur = wr;
+ return len;
+ }
+
+ wr--;
+ p->opt[wr].dist = dist;
+ p->opt[wr].len = (UInt32)len;
+ }
+}
+
+
+
+#define LIT_PROBS(pos, prevByte) \
+ (p->litProbs + (UInt32)3 * (((((pos) << 8) + (prevByte)) & p->lpMask) << p->lc))
+
+
+static unsigned GetOptimum(CLzmaEnc *p, UInt32 position)
+{
+ unsigned last, cur;
+ UInt32 reps[LZMA_NUM_REPS];
+ unsigned repLens[LZMA_NUM_REPS];
+ UInt32 *matches;
+
+ {
+ UInt32 numAvail;
+ unsigned numPairs, mainLen, repMaxIndex, i, posState;
+ UInt32 matchPrice, repMatchPrice;
+ const Byte *data;
+ Byte curByte, matchByte;
+
+ p->optCur = p->optEnd = 0;
+
+ if (p->additionalOffset == 0)
+ mainLen = ReadMatchDistances(p, &numPairs);
+ else
+ {
+ mainLen = p->longestMatchLen;
+ numPairs = p->numPairs;
+ }
+
+ numAvail = p->numAvail;
+ if (numAvail < 2)
+ {
+ p->backRes = MARK_LIT;
+ return 1;
+ }
+ if (numAvail > LZMA_MATCH_LEN_MAX)
+ numAvail = LZMA_MATCH_LEN_MAX;
+
+ data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1;
+ repMaxIndex = 0;
+
+ for (i = 0; i < LZMA_NUM_REPS; i++)
+ {
+ unsigned len;
+ const Byte *data2;
+ reps[i] = p->reps[i];
+ data2 = data - reps[i];
+ if (data[0] != data2[0] || data[1] != data2[1])
+ {
+ repLens[i] = 0;
+ continue;
+ }
+ for (len = 2; len < numAvail && data[len] == data2[len]; len++)
+ {}
+ repLens[i] = len;
+ if (len > repLens[repMaxIndex])
+ repMaxIndex = i;
+ }
+
+ if (repLens[repMaxIndex] >= p->numFastBytes)
+ {
+ unsigned len;
+ p->backRes = (UInt32)repMaxIndex;
+ len = repLens[repMaxIndex];
+ MOVE_POS(p, len - 1)
+ return len;
+ }
+
+ matches = p->matches;
+
+ if (mainLen >= p->numFastBytes)
+ {
+ p->backRes = matches[(size_t)numPairs - 1] + LZMA_NUM_REPS;
+ MOVE_POS(p, mainLen - 1)
+ return mainLen;
+ }
+
+ curByte = *data;
+ matchByte = *(data - reps[0]);
+
+ last = repLens[repMaxIndex];
+ if (last <= mainLen)
+ last = mainLen;
+
+ if (last < 2 && curByte != matchByte)
+ {
+ p->backRes = MARK_LIT;
+ return 1;
+ }
+
+ p->opt[0].state = (CState)p->state;
+
+ posState = (position & p->pbMask);
+
+ {
+ const CLzmaProb *probs = LIT_PROBS(position, *(data - 1));
+ p->opt[1].price = GET_PRICE_0(p->isMatch[p->state][posState]) +
+ (!IsLitState(p->state) ?
+ LitEnc_Matched_GetPrice(probs, curByte, matchByte, p->ProbPrices) :
+ LitEnc_GetPrice(probs, curByte, p->ProbPrices));
+ }
+
+ MakeAs_Lit(&p->opt[1]);
+
+ matchPrice = GET_PRICE_1(p->isMatch[p->state][posState]);
+ repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[p->state]);
+
+ // 18.06
+ if (matchByte == curByte && repLens[0] == 0)
+ {
+ UInt32 shortRepPrice = repMatchPrice + GetPrice_ShortRep(p, p->state, posState);
+ if (shortRepPrice < p->opt[1].price)
+ {
+ p->opt[1].price = shortRepPrice;
+ MakeAs_ShortRep(&p->opt[1]);
+ }
+ if (last < 2)
+ {
+ p->backRes = p->opt[1].dist;
+ return 1;
+ }
+ }
+
+ p->opt[1].len = 1;
+
+ p->opt[0].reps[0] = reps[0];
+ p->opt[0].reps[1] = reps[1];
+ p->opt[0].reps[2] = reps[2];
+ p->opt[0].reps[3] = reps[3];
+
+ // ---------- REP ----------
+
+ for (i = 0; i < LZMA_NUM_REPS; i++)
+ {
+ unsigned repLen = repLens[i];
+ UInt32 price;
+ if (repLen < 2)
+ continue;
+ price = repMatchPrice + GetPrice_PureRep(p, i, p->state, posState);
+ do
+ {
+ UInt32 price2 = price + GET_PRICE_LEN(&p->repLenEnc, posState, repLen);
+ COptimal *opt = &p->opt[repLen];
+ if (price2 < opt->price)
+ {
+ opt->price = price2;
+ opt->len = (UInt32)repLen;
+ opt->dist = (UInt32)i;
+ opt->extra = 0;
+ }
+ }
+ while (--repLen >= 2);
+ }
+
+
+ // ---------- MATCH ----------
+ {
+ unsigned len = repLens[0] + 1;
+ if (len <= mainLen)
+ {
+ unsigned offs = 0;
+ UInt32 normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[p->state]);
+
+ if (len < 2)
+ len = 2;
+ else
+ while (len > matches[offs])
+ offs += 2;
+
+ for (; ; len++)
+ {
+ COptimal *opt;
+ UInt32 dist = matches[(size_t)offs + 1];
+ UInt32 price = normalMatchPrice + GET_PRICE_LEN(&p->lenEnc, posState, len);
+ unsigned lenToPosState = GetLenToPosState(len);
+
+ if (dist < kNumFullDistances)
+ price += p->distancesPrices[lenToPosState][dist & (kNumFullDistances - 1)];
+ else
+ {
+ unsigned slot;
+ GetPosSlot2(dist, slot);
+ price += p->alignPrices[dist & kAlignMask];
+ price += p->posSlotPrices[lenToPosState][slot];
+ }
+
+ opt = &p->opt[len];
+
+ if (price < opt->price)
+ {
+ opt->price = price;
+ opt->len = (UInt32)len;
+ opt->dist = dist + LZMA_NUM_REPS;
+ opt->extra = 0;
+ }
+
+ if (len == matches[offs])
+ {
+ offs += 2;
+ if (offs == numPairs)
+ break;
+ }
+ }
+ }
+ }
+
+
+ cur = 0;
+
+ #ifdef SHOW_STAT2
+ /* if (position >= 0) */
+ {
+ unsigned i;
+ printf("\n pos = %4X", position);
+ for (i = cur; i <= last; i++)
+ printf("\nprice[%4X] = %u", position - cur + i, p->opt[i].price);
+ }
+ #endif
+ }
+
+
+
+ // ---------- Optimal Parsing ----------
+
+ for (;;)
+ {
+ unsigned numAvail;
+ UInt32 numAvailFull;
+ unsigned newLen, numPairs, prev, state, posState, startLen;
+ UInt32 litPrice, matchPrice, repMatchPrice;
+ BoolInt nextIsLit;
+ Byte curByte, matchByte;
+ const Byte *data;
+ COptimal *curOpt, *nextOpt;
+
+ if (++cur == last)
+ break;
+
+ // 18.06
+ if (cur >= kNumOpts - 64)
+ {
+ unsigned j, best;
+ UInt32 price = p->opt[cur].price;
+ best = cur;
+ for (j = cur + 1; j <= last; j++)
+ {
+ UInt32 price2 = p->opt[j].price;
+ if (price >= price2)
+ {
+ price = price2;
+ best = j;
+ }
+ }
+ {
+ unsigned delta = best - cur;
+ if (delta != 0)
+ {
+ MOVE_POS(p, delta);
+ }
+ }
+ cur = best;
+ break;
+ }
+
+ newLen = ReadMatchDistances(p, &numPairs);
+
+ if (newLen >= p->numFastBytes)
+ {
+ p->numPairs = numPairs;
+ p->longestMatchLen = newLen;
+ break;
+ }
+
+ curOpt = &p->opt[cur];
+
+ position++;
+
+ // we need that check here, if skip_items in p->opt are possible
+ /*
+ if (curOpt->price >= kInfinityPrice)
+ continue;
+ */
+
+ prev = cur - curOpt->len;
+
+ if (curOpt->len == 1)
+ {
+ state = (unsigned)p->opt[prev].state;
+ if (IsShortRep(curOpt))
+ state = kShortRepNextStates[state];
+ else
+ state = kLiteralNextStates[state];
+ }
+ else
+ {
+ const COptimal *prevOpt;
+ UInt32 b0;
+ UInt32 dist = curOpt->dist;
+
+ if (curOpt->extra)
+ {
+ prev -= (unsigned)curOpt->extra;
+ state = kState_RepAfterLit;
+ if (curOpt->extra == 1)
+ state = (dist < LZMA_NUM_REPS ? kState_RepAfterLit : kState_MatchAfterLit);
+ }
+ else
+ {
+ state = (unsigned)p->opt[prev].state;
+ if (dist < LZMA_NUM_REPS)
+ state = kRepNextStates[state];
+ else
+ state = kMatchNextStates[state];
+ }
+
+ prevOpt = &p->opt[prev];
+ b0 = prevOpt->reps[0];
+
+ if (dist < LZMA_NUM_REPS)
+ {
+ if (dist == 0)
+ {
+ reps[0] = b0;
+ reps[1] = prevOpt->reps[1];
+ reps[2] = prevOpt->reps[2];
+ reps[3] = prevOpt->reps[3];
+ }
+ else
+ {
+ reps[1] = b0;
+ b0 = prevOpt->reps[1];
+ if (dist == 1)
+ {
+ reps[0] = b0;
+ reps[2] = prevOpt->reps[2];
+ reps[3] = prevOpt->reps[3];
+ }
+ else
+ {
+ reps[2] = b0;
+ reps[0] = prevOpt->reps[dist];
+ reps[3] = prevOpt->reps[dist ^ 1];
+ }
+ }
+ }
+ else
+ {
+ reps[0] = (dist - LZMA_NUM_REPS + 1);
+ reps[1] = b0;
+ reps[2] = prevOpt->reps[1];
+ reps[3] = prevOpt->reps[2];
+ }
+ }
+
+ curOpt->state = (CState)state;
+ curOpt->reps[0] = reps[0];
+ curOpt->reps[1] = reps[1];
+ curOpt->reps[2] = reps[2];
+ curOpt->reps[3] = reps[3];
+
+ data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1;
+ curByte = *data;
+ matchByte = *(data - reps[0]);
+
+ posState = (position & p->pbMask);
+
+ /*
+ The order of Price checks:
+ < LIT
+ <= SHORT_REP
+ < LIT : REP_0
+ < REP [ : LIT : REP_0 ]
+ < MATCH [ : LIT : REP_0 ]
+ */
+
+ {
+ UInt32 curPrice = curOpt->price;
+ unsigned prob = p->isMatch[state][posState];
+ matchPrice = curPrice + GET_PRICE_1(prob);
+ litPrice = curPrice + GET_PRICE_0(prob);
+ }
+
+ nextOpt = &p->opt[(size_t)cur + 1];
+ nextIsLit = False;
+
+ // here we can allow skip_items in p->opt, if we don't check (nextOpt->price < kInfinityPrice)
+ // 18.new.06
+ if ((nextOpt->price < kInfinityPrice
+ // && !IsLitState(state)
+ && matchByte == curByte)
+ || litPrice > nextOpt->price
+ )
+ litPrice = 0;
+ else
+ {
+ const CLzmaProb *probs = LIT_PROBS(position, *(data - 1));
+ litPrice += (!IsLitState(state) ?
+ LitEnc_Matched_GetPrice(probs, curByte, matchByte, p->ProbPrices) :
+ LitEnc_GetPrice(probs, curByte, p->ProbPrices));
+
+ if (litPrice < nextOpt->price)
+ {
+ nextOpt->price = litPrice;
+ nextOpt->len = 1;
+ MakeAs_Lit(nextOpt);
+ nextIsLit = True;
+ }
+ }
+
+ repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[state]);
+
+ numAvailFull = p->numAvail;
+ {
+ unsigned temp = kNumOpts - 1 - cur;
+ if (numAvailFull > temp)
+ numAvailFull = (UInt32)temp;
+ }
+
+ // 18.06
+ // ---------- SHORT_REP ----------
+ if (IsLitState(state)) // 18.new
+ if (matchByte == curByte)
+ if (repMatchPrice < nextOpt->price) // 18.new
+ // if (numAvailFull < 2 || data[1] != *(data - reps[0] + 1))
+ if (
+ // nextOpt->price >= kInfinityPrice ||
+ nextOpt->len < 2 // we can check nextOpt->len, if skip items are not allowed in p->opt
+ || (nextOpt->dist != 0
+ // && nextOpt->extra <= 1 // 17.old
+ )
+ )
+ {
+ UInt32 shortRepPrice = repMatchPrice + GetPrice_ShortRep(p, state, posState);
+ // if (shortRepPrice <= nextOpt->price) // 17.old
+ if (shortRepPrice < nextOpt->price) // 18.new
+ {
+ nextOpt->price = shortRepPrice;
+ nextOpt->len = 1;
+ MakeAs_ShortRep(nextOpt);
+ nextIsLit = False;
+ }
+ }
+
+ if (numAvailFull < 2)
+ continue;
+ numAvail = (numAvailFull <= p->numFastBytes ? numAvailFull : p->numFastBytes);
+
+ // numAvail <= p->numFastBytes
+
+ // ---------- LIT : REP_0 ----------
+
+ if (!nextIsLit
+ && litPrice != 0 // 18.new
+ && matchByte != curByte
+ && numAvailFull > 2)
+ {
+ const Byte *data2 = data - reps[0];
+ if (data[1] == data2[1] && data[2] == data2[2])
+ {
+ unsigned len;
+ unsigned limit = p->numFastBytes + 1;
+ if (limit > numAvailFull)
+ limit = numAvailFull;
+ for (len = 3; len < limit && data[len] == data2[len]; len++)
+ {}
+
+ {
+ unsigned state2 = kLiteralNextStates[state];
+ unsigned posState2 = (position + 1) & p->pbMask;
+ UInt32 price = litPrice + GetPrice_Rep_0(p, state2, posState2);
+ {
+ unsigned offset = cur + len;
+
+ if (last < offset)
+ last = offset;
+
+ // do
+ {
+ UInt32 price2;
+ COptimal *opt;
+ len--;
+ // price2 = price + GetPrice_Len_Rep_0(p, len, state2, posState2);
+ price2 = price + GET_PRICE_LEN(&p->repLenEnc, posState2, len);
+
+ opt = &p->opt[offset];
+ // offset--;
+ if (price2 < opt->price)
+ {
+ opt->price = price2;
+ opt->len = (UInt32)len;
+ opt->dist = 0;
+ opt->extra = 1;
+ }
+ }
+ // while (len >= 3);
+ }
+ }
+ }
+ }
+
+ startLen = 2; /* speed optimization */
+
+ {
+ // ---------- REP ----------
+ unsigned repIndex = 0; // 17.old
+ // unsigned repIndex = IsLitState(state) ? 0 : 1; // 18.notused
+ for (; repIndex < LZMA_NUM_REPS; repIndex++)
+ {
+ unsigned len;
+ UInt32 price;
+ const Byte *data2 = data - reps[repIndex];
+ if (data[0] != data2[0] || data[1] != data2[1])
+ continue;
+
+ for (len = 2; len < numAvail && data[len] == data2[len]; len++)
+ {}
+
+ // if (len < startLen) continue; // 18.new: speed optimization
+
+ {
+ unsigned offset = cur + len;
+ if (last < offset)
+ last = offset;
+ }
+ {
+ unsigned len2 = len;
+ price = repMatchPrice + GetPrice_PureRep(p, repIndex, state, posState);
+ do
+ {
+ UInt32 price2 = price + GET_PRICE_LEN(&p->repLenEnc, posState, len2);
+ COptimal *opt = &p->opt[cur + len2];
+ if (price2 < opt->price)
+ {
+ opt->price = price2;
+ opt->len = (UInt32)len2;
+ opt->dist = (UInt32)repIndex;
+ opt->extra = 0;
+ }
+ }
+ while (--len2 >= 2);
+ }
+
+ if (repIndex == 0) startLen = len + 1; // 17.old
+ // startLen = len + 1; // 18.new
+
+ /* if (_maxMode) */
+ {
+ // ---------- REP : LIT : REP_0 ----------
+ // numFastBytes + 1 + numFastBytes
+
+ unsigned len2 = len + 1;
+ unsigned limit = len2 + p->numFastBytes;
+ if (limit > numAvailFull)
+ limit = numAvailFull;
+
+ len2 += 2;
+ if (len2 <= limit)
+ if (data[len2 - 2] == data2[len2 - 2])
+ if (data[len2 - 1] == data2[len2 - 1])
+ {
+ unsigned state2 = kRepNextStates[state];
+ unsigned posState2 = (position + len) & p->pbMask;
+ price += GET_PRICE_LEN(&p->repLenEnc, posState, len)
+ + GET_PRICE_0(p->isMatch[state2][posState2])
+ + LitEnc_Matched_GetPrice(LIT_PROBS(position + len, data[(size_t)len - 1]),
+ data[len], data2[len], p->ProbPrices);
+
+ // state2 = kLiteralNextStates[state2];
+ state2 = kState_LitAfterRep;
+ posState2 = (posState2 + 1) & p->pbMask;
+
+
+ price += GetPrice_Rep_0(p, state2, posState2);
+
+ for (; len2 < limit && data[len2] == data2[len2]; len2++)
+ {}
+
+ len2 -= len;
+ // if (len2 >= 3)
+ {
+ {
+ unsigned offset = cur + len + len2;
+
+ if (last < offset)
+ last = offset;
+ // do
+ {
+ UInt32 price2;
+ COptimal *opt;
+ len2--;
+ // price2 = price + GetPrice_Len_Rep_0(p, len2, state2, posState2);
+ price2 = price + GET_PRICE_LEN(&p->repLenEnc, posState2, len2);
+
+ opt = &p->opt[offset];
+ // offset--;
+ if (price2 < opt->price)
+ {
+ opt->price = price2;
+ opt->len = (UInt32)len2;
+ opt->extra = (CExtra)(len + 1);
+ opt->dist = (UInt32)repIndex;
+ }
+ }
+ // while (len2 >= 3);
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+ // ---------- MATCH ----------
+ /* for (unsigned len = 2; len <= newLen; len++) */
+ if (newLen > numAvail)
+ {
+ newLen = numAvail;
+ for (numPairs = 0; newLen > matches[numPairs]; numPairs += 2);
+ matches[numPairs] = (UInt32)newLen;
+ numPairs += 2;
+ }
+
+ // startLen = 2; /* speed optimization */
+
+ if (newLen >= startLen)
+ {
+ UInt32 normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[state]);
+ UInt32 dist;
+ unsigned offs, posSlot, len;
+
+ {
+ unsigned offset = cur + newLen;
+ if (last < offset)
+ last = offset;
+ }
+
+ offs = 0;
+ while (startLen > matches[offs])
+ offs += 2;
+ dist = matches[(size_t)offs + 1];
+
+ // if (dist >= kNumFullDistances)
+ GetPosSlot2(dist, posSlot);
+
+ for (len = /*2*/ startLen; ; len++)
+ {
+ UInt32 price = normalMatchPrice + GET_PRICE_LEN(&p->lenEnc, posState, len);
+ {
+ COptimal *opt;
+ unsigned lenNorm = len - 2;
+ lenNorm = GetLenToPosState2(lenNorm);
+ if (dist < kNumFullDistances)
+ price += p->distancesPrices[lenNorm][dist & (kNumFullDistances - 1)];
+ else
+ price += p->posSlotPrices[lenNorm][posSlot] + p->alignPrices[dist & kAlignMask];
+
+ opt = &p->opt[cur + len];
+ if (price < opt->price)
+ {
+ opt->price = price;
+ opt->len = (UInt32)len;
+ opt->dist = dist + LZMA_NUM_REPS;
+ opt->extra = 0;
+ }
+ }
+
+ if (len == matches[offs])
+ {
+ // if (p->_maxMode) {
+ // MATCH : LIT : REP_0
+
+ const Byte *data2 = data - dist - 1;
+ unsigned len2 = len + 1;
+ unsigned limit = len2 + p->numFastBytes;
+ if (limit > numAvailFull)
+ limit = numAvailFull;
+
+ len2 += 2;
+ if (len2 <= limit)
+ if (data[len2 - 2] == data2[len2 - 2])
+ if (data[len2 - 1] == data2[len2 - 1])
+ {
+ for (; len2 < limit && data[len2] == data2[len2]; len2++)
+ {}
+
+ len2 -= len;
+
+ // if (len2 >= 3)
+ {
+ unsigned state2 = kMatchNextStates[state];
+ unsigned posState2 = (position + len) & p->pbMask;
+ unsigned offset;
+ price += GET_PRICE_0(p->isMatch[state2][posState2]);
+ price += LitEnc_Matched_GetPrice(LIT_PROBS(position + len, data[(size_t)len - 1]),
+ data[len], data2[len], p->ProbPrices);
+
+ // state2 = kLiteralNextStates[state2];
+ state2 = kState_LitAfterMatch;
+
+ posState2 = (posState2 + 1) & p->pbMask;
+ price += GetPrice_Rep_0(p, state2, posState2);
+
+ offset = cur + len + len2;
+
+ if (last < offset)
+ last = offset;
+ // do
+ {
+ UInt32 price2;
+ COptimal *opt;
+ len2--;
+ // price2 = price + GetPrice_Len_Rep_0(p, len2, state2, posState2);
+ price2 = price + GET_PRICE_LEN(&p->repLenEnc, posState2, len2);
+ opt = &p->opt[offset];
+ // offset--;
+ if (price2 < opt->price)
+ {
+ opt->price = price2;
+ opt->len = (UInt32)len2;
+ opt->extra = (CExtra)(len + 1);
+ opt->dist = dist + LZMA_NUM_REPS;
+ }
+ }
+ // while (len2 >= 3);
+ }
+
+ }
+
+ offs += 2;
+ if (offs == numPairs)
+ break;
+ dist = matches[(size_t)offs + 1];
+ // if (dist >= kNumFullDistances)
+ GetPosSlot2(dist, posSlot);
+ }
+ }
+ }
+ }
+
+ do
+ p->opt[last].price = kInfinityPrice;
+ while (--last);
+
+ return Backward(p, cur);
+}
+
+
+
+#define ChangePair(smallDist, bigDist) (((bigDist) >> 7) > (smallDist))
+
+
+
+static unsigned GetOptimumFast(CLzmaEnc *p)
+{
+ UInt32 numAvail, mainDist;
+ unsigned mainLen, numPairs, repIndex, repLen, i;
+ const Byte *data;
+
+ if (p->additionalOffset == 0)
+ mainLen = ReadMatchDistances(p, &numPairs);
+ else
+ {
+ mainLen = p->longestMatchLen;
+ numPairs = p->numPairs;
+ }
+
+ numAvail = p->numAvail;
+ p->backRes = MARK_LIT;
+ if (numAvail < 2)
+ return 1;
+ // if (mainLen < 2 && p->state == 0) return 1; // 18.06.notused
+ if (numAvail > LZMA_MATCH_LEN_MAX)
+ numAvail = LZMA_MATCH_LEN_MAX;
+ data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1;
+ repLen = repIndex = 0;
+
+ for (i = 0; i < LZMA_NUM_REPS; i++)
+ {
+ unsigned len;
+ const Byte *data2 = data - p->reps[i];
+ if (data[0] != data2[0] || data[1] != data2[1])
+ continue;
+ for (len = 2; len < numAvail && data[len] == data2[len]; len++)
+ {}
+ if (len >= p->numFastBytes)
+ {
+ p->backRes = (UInt32)i;
+ MOVE_POS(p, len - 1)
+ return len;
+ }
+ if (len > repLen)
+ {
+ repIndex = i;
+ repLen = len;
+ }
+ }
+
+ if (mainLen >= p->numFastBytes)
+ {
+ p->backRes = p->matches[(size_t)numPairs - 1] + LZMA_NUM_REPS;
+ MOVE_POS(p, mainLen - 1)
+ return mainLen;
+ }
+
+ mainDist = 0; /* for GCC */
+
+ if (mainLen >= 2)
+ {
+ mainDist = p->matches[(size_t)numPairs - 1];
+ while (numPairs > 2)
+ {
+ UInt32 dist2;
+ if (mainLen != p->matches[(size_t)numPairs - 4] + 1)
+ break;
+ dist2 = p->matches[(size_t)numPairs - 3];
+ if (!ChangePair(dist2, mainDist))
+ break;
+ numPairs -= 2;
+ mainLen--;
+ mainDist = dist2;
+ }
+ if (mainLen == 2 && mainDist >= 0x80)
+ mainLen = 1;
+ }
+
+ if (repLen >= 2)
+ if ( repLen + 1 >= mainLen
+ || (repLen + 2 >= mainLen && mainDist >= (1 << 9))
+ || (repLen + 3 >= mainLen && mainDist >= (1 << 15)))
+ {
+ p->backRes = (UInt32)repIndex;
+ MOVE_POS(p, repLen - 1)
+ return repLen;
+ }
+
+ if (mainLen < 2 || numAvail <= 2)
+ return 1;
+
+ {
+ unsigned len1 = ReadMatchDistances(p, &p->numPairs);
+ p->longestMatchLen = len1;
+
+ if (len1 >= 2)
+ {
+ UInt32 newDist = p->matches[(size_t)p->numPairs - 1];
+ if ( (len1 >= mainLen && newDist < mainDist)
+ || (len1 == mainLen + 1 && !ChangePair(mainDist, newDist))
+ || (len1 > mainLen + 1)
+ || (len1 + 1 >= mainLen && mainLen >= 3 && ChangePair(newDist, mainDist)))
+ return 1;
+ }
+ }
+
+ data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1;
+
+ for (i = 0; i < LZMA_NUM_REPS; i++)
+ {
+ unsigned len, limit;
+ const Byte *data2 = data - p->reps[i];
+ if (data[0] != data2[0] || data[1] != data2[1])
+ continue;
+ limit = mainLen - 1;
+ for (len = 2;; len++)
+ {
+ if (len >= limit)
+ return 1;
+ if (data[len] != data2[len])
+ break;
+ }
+ }
+
+ p->backRes = mainDist + LZMA_NUM_REPS;
+ if (mainLen != 2)
+ {
+ MOVE_POS(p, mainLen - 2)
+ }
+ return mainLen;
+}
+
+
+
+
+static void WriteEndMarker(CLzmaEnc *p, unsigned posState)
+{
+ UInt32 range;
+ range = p->rc.range;
+ {
+ UInt32 ttt, newBound;
+ CLzmaProb *prob = &p->isMatch[p->state][posState];
+ RC_BIT_PRE(&p->rc, prob)
+ RC_BIT_1(&p->rc, prob)
+ prob = &p->isRep[p->state];
+ RC_BIT_PRE(&p->rc, prob)
+ RC_BIT_0(&p->rc, prob)
+ }
+ p->state = kMatchNextStates[p->state];
+
+ p->rc.range = range;
+ LenEnc_Encode(&p->lenProbs, &p->rc, 0, posState);
+ range = p->rc.range;
+
+ {
+ // RcTree_Encode_PosSlot(&p->rc, p->posSlotEncoder[0], (1 << kNumPosSlotBits) - 1);
+ CLzmaProb *probs = p->posSlotEncoder[0];
+ unsigned m = 1;
+ do
+ {
+ UInt32 ttt, newBound;
+ RC_BIT_PRE(p, probs + m)
+ RC_BIT_1(&p->rc, probs + m);
+ m = (m << 1) + 1;
+ }
+ while (m < (1 << kNumPosSlotBits));
+ }
+ {
+ // RangeEnc_EncodeDirectBits(&p->rc, ((UInt32)1 << (30 - kNumAlignBits)) - 1, 30 - kNumAlignBits); UInt32 range = p->range;
+ unsigned numBits = 30 - kNumAlignBits;
+ do
+ {
+ range >>= 1;
+ p->rc.low += range;
+ RC_NORM(&p->rc)
+ }
+ while (--numBits);
+ }
+
+ {
+ // RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, kAlignMask);
+ CLzmaProb *probs = p->posAlignEncoder;
+ unsigned m = 1;
+ do
+ {
+ UInt32 ttt, newBound;
+ RC_BIT_PRE(p, probs + m)
+ RC_BIT_1(&p->rc, probs + m);
+ m = (m << 1) + 1;
+ }
+ while (m < kAlignTableSize);
+ }
+ p->rc.range = range;
+}
+
+
+static SRes CheckErrors(CLzmaEnc *p)
+{
+ if (p->result != SZ_OK)
+ return p->result;
+ if (p->rc.res != SZ_OK)
+ p->result = SZ_ERROR_WRITE;
+ if (p->matchFinderBase.result != SZ_OK)
+ p->result = SZ_ERROR_READ;
+ if (p->result != SZ_OK)
+ p->finished = True;
+ return p->result;
+}
+
+
+MY_NO_INLINE static SRes Flush(CLzmaEnc *p, UInt32 nowPos)
+{
+ /* ReleaseMFStream(); */
+ p->finished = True;
+ if (p->writeEndMark)
+ WriteEndMarker(p, nowPos & p->pbMask);
+ RangeEnc_FlushData(&p->rc);
+ RangeEnc_FlushStream(&p->rc);
+ return CheckErrors(p);
+}
+
+
+MY_NO_INLINE static void FillAlignPrices(CLzmaEnc *p)
+{
+ unsigned i;
+ const CProbPrice *ProbPrices = p->ProbPrices;
+ const CLzmaProb *probs = p->posAlignEncoder;
+ // p->alignPriceCount = 0;
+ for (i = 0; i < kAlignTableSize / 2; i++)
+ {
+ UInt32 price = 0;
+ unsigned sym = i;
+ unsigned m = 1;
+ unsigned bit;
+ UInt32 prob;
+ bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[m], bit); m = (m << 1) + bit;
+ bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[m], bit); m = (m << 1) + bit;
+ bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[m], bit); m = (m << 1) + bit;
+ prob = probs[m];
+ p->alignPrices[i ] = price + GET_PRICEa_0(prob);
+ p->alignPrices[i + 8] = price + GET_PRICEa_1(prob);
+ // p->alignPrices[i] = RcTree_ReverseGetPrice(p->posAlignEncoder, kNumAlignBits, i, p->ProbPrices);
+ }
+}
+
+
+MY_NO_INLINE static void FillDistancesPrices(CLzmaEnc *p)
+{
+ // int y; for (y = 0; y < 100; y++) {
+
+ UInt32 tempPrices[kNumFullDistances];
+ unsigned i, lps;
+
+ const CProbPrice *ProbPrices = p->ProbPrices;
+ p->matchPriceCount = 0;
+
+ for (i = kStartPosModelIndex / 2; i < kNumFullDistances / 2; i++)
+ {
+ unsigned posSlot = GetPosSlot1(i);
+ unsigned footerBits = (posSlot >> 1) - 1;
+ unsigned base = ((2 | (posSlot & 1)) << footerBits);
+ const CLzmaProb *probs = p->posEncoders + (size_t)base * 2;
+ // tempPrices[i] = RcTree_ReverseGetPrice(p->posEncoders + base, footerBits, i - base, p->ProbPrices);
+ UInt32 price = 0;
+ unsigned m = 1;
+ unsigned sym = i;
+ unsigned offset = (unsigned)1 << footerBits;
+ base += i;
+
+ if (footerBits)
+ do
+ {
+ unsigned bit = sym & 1;
+ sym >>= 1;
+ price += GET_PRICEa(probs[m], bit);
+ m = (m << 1) + bit;
+ }
+ while (--footerBits);
+
+ {
+ unsigned prob = probs[m];
+ tempPrices[base ] = price + GET_PRICEa_0(prob);
+ tempPrices[base + offset] = price + GET_PRICEa_1(prob);
+ }
+ }
+
+ for (lps = 0; lps < kNumLenToPosStates; lps++)
+ {
+ unsigned slot;
+ unsigned distTableSize2 = (p->distTableSize + 1) >> 1;
+ UInt32 *posSlotPrices = p->posSlotPrices[lps];
+ const CLzmaProb *probs = p->posSlotEncoder[lps];
+
+ for (slot = 0; slot < distTableSize2; slot++)
+ {
+ // posSlotPrices[slot] = RcTree_GetPrice(encoder, kNumPosSlotBits, slot, p->ProbPrices);
+ UInt32 price;
+ unsigned bit;
+ unsigned sym = slot + (1 << (kNumPosSlotBits - 1));
+ unsigned prob;
+ bit = sym & 1; sym >>= 1; price = GET_PRICEa(probs[sym], bit);
+ bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[sym], bit);
+ bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[sym], bit);
+ bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[sym], bit);
+ bit = sym & 1; sym >>= 1; price += GET_PRICEa(probs[sym], bit);
+ prob = probs[(size_t)slot + (1 << (kNumPosSlotBits - 1))];
+ posSlotPrices[(size_t)slot * 2 ] = price + GET_PRICEa_0(prob);
+ posSlotPrices[(size_t)slot * 2 + 1] = price + GET_PRICEa_1(prob);
+ }
+
+ {
+ UInt32 delta = ((UInt32)((kEndPosModelIndex / 2 - 1) - kNumAlignBits) << kNumBitPriceShiftBits);
+ for (slot = kEndPosModelIndex / 2; slot < distTableSize2; slot++)
+ {
+ posSlotPrices[(size_t)slot * 2 ] += delta;
+ posSlotPrices[(size_t)slot * 2 + 1] += delta;
+ delta += ((UInt32)1 << kNumBitPriceShiftBits);
+ }
+ }
+
+ {
+ UInt32 *dp = p->distancesPrices[lps];
+
+ dp[0] = posSlotPrices[0];
+ dp[1] = posSlotPrices[1];
+ dp[2] = posSlotPrices[2];
+ dp[3] = posSlotPrices[3];
+
+ for (i = 4; i < kNumFullDistances; i += 2)
+ {
+ UInt32 slotPrice = posSlotPrices[GetPosSlot1(i)];
+ dp[i ] = slotPrice + tempPrices[i];
+ dp[i + 1] = slotPrice + tempPrices[i + 1];
+ }
+ }
+ }
+ // }
+}
+
+
+
+void LzmaEnc_Construct(CLzmaEnc *p)
+{
+ RangeEnc_Construct(&p->rc);
+ MatchFinder_Construct(&p->matchFinderBase);
+
+ #ifndef _7ZIP_ST
+ MatchFinderMt_Construct(&p->matchFinderMt);
+ p->matchFinderMt.MatchFinder = &p->matchFinderBase;
+ #endif
+
+ {
+ CLzmaEncProps props;
+ LzmaEncProps_Init(&props);
+ LzmaEnc_SetProps(p, &props);
+ }
+
+ #ifndef LZMA_LOG_BSR
+ LzmaEnc_FastPosInit(p->g_FastPos);
+ #endif
+
+ LzmaEnc_InitPriceTables(p->ProbPrices);
+ p->litProbs = NULL;
+ p->saveState.litProbs = NULL;
+
+}
+
+CLzmaEncHandle LzmaEnc_Create(ISzAllocPtr alloc)
+{
+ void *p;
+ p = ISzAlloc_Alloc(alloc, sizeof(CLzmaEnc));
+ if (p)
+ LzmaEnc_Construct((CLzmaEnc *)p);
+ return p;
+}
+
+void LzmaEnc_FreeLits(CLzmaEnc *p, ISzAllocPtr alloc)
+{
+ ISzAlloc_Free(alloc, p->litProbs);
+ ISzAlloc_Free(alloc, p->saveState.litProbs);
+ p->litProbs = NULL;
+ p->saveState.litProbs = NULL;
+}
+
+void LzmaEnc_Destruct(CLzmaEnc *p, ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ #ifndef _7ZIP_ST
+ MatchFinderMt_Destruct(&p->matchFinderMt, allocBig);
+ #endif
+
+ MatchFinder_Free(&p->matchFinderBase, allocBig);
+ LzmaEnc_FreeLits(p, alloc);
+ RangeEnc_Free(&p->rc, alloc);
+}
+
+void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ LzmaEnc_Destruct((CLzmaEnc *)p, alloc, allocBig);
+ ISzAlloc_Free(alloc, p);
+}
+
+
+SRes LzmaEnc_CodeOneBlock(CLzmaEncHandle pp, UInt32 maxPackSize, UInt32 maxUnpackSize)
+{
+ CLzmaEnc *p = (CLzmaEnc *) pp;
+ UInt32 nowPos32, startPos32;
+ if (p->needInit)
+ {
+ p->matchFinder.Init(p->matchFinderObj);
+ p->needInit = 0;
+ }
+
+ if (p->finished)
+ return p->result;
+ RINOK(CheckErrors(p));
+
+ nowPos32 = (UInt32)p->nowPos64;
+ startPos32 = nowPos32;
+
+ if (p->nowPos64 == 0)
+ {
+ unsigned numPairs;
+ Byte curByte;
+ if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0)
+ return Flush(p, nowPos32);
+ ReadMatchDistances(p, &numPairs);
+ RangeEnc_EncodeBit_0(&p->rc, &p->isMatch[kState_Start][0]);
+ // p->state = kLiteralNextStates[p->state];
+ curByte = *(p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset);
+ LitEnc_Encode(&p->rc, p->litProbs, curByte);
+ p->additionalOffset--;
+ nowPos32++;
+ }
+
+ if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) != 0)
+
+ for (;;)
+ {
+ UInt32 dist;
+ unsigned len, posState;
+ UInt32 range, ttt, newBound;
+ CLzmaProb *probs;
+
+ if (p->fastMode)
+ len = GetOptimumFast(p);
+ else
+ {
+ unsigned oci = p->optCur;
+ if (p->optEnd == oci)
+ len = GetOptimum(p, nowPos32);
+ else
+ {
+ const COptimal *opt = &p->opt[oci];
+ len = opt->len;
+ p->backRes = opt->dist;
+ p->optCur = oci + 1;
+ }
+ }
+
+ posState = (unsigned)nowPos32 & p->pbMask;
+ range = p->rc.range;
+ probs = &p->isMatch[p->state][posState];
+
+ RC_BIT_PRE(&p->rc, probs)
+
+ dist = p->backRes;
+
+ #ifdef SHOW_STAT2
+ printf("\n pos = %6X, len = %3u pos = %6u", nowPos32, len, dist);
+ #endif
+
+ if (dist == MARK_LIT)
+ {
+ Byte curByte;
+ const Byte *data;
+ unsigned state;
+
+ RC_BIT_0(&p->rc, probs);
+ p->rc.range = range;
+ data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset;
+ probs = LIT_PROBS(nowPos32, *(data - 1));
+ curByte = *data;
+ state = p->state;
+ p->state = kLiteralNextStates[state];
+ if (IsLitState(state))
+ LitEnc_Encode(&p->rc, probs, curByte);
+ else
+ LitEnc_EncodeMatched(&p->rc, probs, curByte, *(data - p->reps[0]));
+ }
+ else
+ {
+ RC_BIT_1(&p->rc, probs);
+ probs = &p->isRep[p->state];
+ RC_BIT_PRE(&p->rc, probs)
+
+ if (dist < LZMA_NUM_REPS)
+ {
+ RC_BIT_1(&p->rc, probs);
+ probs = &p->isRepG0[p->state];
+ RC_BIT_PRE(&p->rc, probs)
+ if (dist == 0)
+ {
+ RC_BIT_0(&p->rc, probs);
+ probs = &p->isRep0Long[p->state][posState];
+ RC_BIT_PRE(&p->rc, probs)
+ if (len != 1)
+ {
+ RC_BIT_1_BASE(&p->rc, probs);
+ }
+ else
+ {
+ RC_BIT_0_BASE(&p->rc, probs);
+ p->state = kShortRepNextStates[p->state];
+ }
+ }
+ else
+ {
+ RC_BIT_1(&p->rc, probs);
+ probs = &p->isRepG1[p->state];
+ RC_BIT_PRE(&p->rc, probs)
+ if (dist == 1)
+ {
+ RC_BIT_0_BASE(&p->rc, probs);
+ dist = p->reps[1];
+ }
+ else
+ {
+ RC_BIT_1(&p->rc, probs);
+ probs = &p->isRepG2[p->state];
+ RC_BIT_PRE(&p->rc, probs)
+ if (dist == 2)
+ {
+ RC_BIT_0_BASE(&p->rc, probs);
+ dist = p->reps[2];
+ }
+ else
+ {
+ RC_BIT_1_BASE(&p->rc, probs);
+ dist = p->reps[3];
+ p->reps[3] = p->reps[2];
+ }
+ p->reps[2] = p->reps[1];
+ }
+ p->reps[1] = p->reps[0];
+ p->reps[0] = dist;
+ }
+
+ RC_NORM(&p->rc)
+
+ p->rc.range = range;
+
+ if (len != 1)
+ {
+ LenEnc_Encode(&p->repLenProbs, &p->rc, len - LZMA_MATCH_LEN_MIN, posState);
+ --p->repLenEncCounter;
+ p->state = kRepNextStates[p->state];
+ }
+ }
+ else
+ {
+ unsigned posSlot;
+ RC_BIT_0(&p->rc, probs);
+ p->rc.range = range;
+ p->state = kMatchNextStates[p->state];
+
+ LenEnc_Encode(&p->lenProbs, &p->rc, len - LZMA_MATCH_LEN_MIN, posState);
+ // --p->lenEnc.counter;
+
+ dist -= LZMA_NUM_REPS;
+ p->reps[3] = p->reps[2];
+ p->reps[2] = p->reps[1];
+ p->reps[1] = p->reps[0];
+ p->reps[0] = dist + 1;
+
+ p->matchPriceCount++;
+ GetPosSlot(dist, posSlot);
+ // RcTree_Encode_PosSlot(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], posSlot);
+ {
+ UInt32 sym = (UInt32)posSlot + (1 << kNumPosSlotBits);
+ range = p->rc.range;
+ probs = p->posSlotEncoder[GetLenToPosState(len)];
+ do
+ {
+ CLzmaProb *prob = probs + (sym >> kNumPosSlotBits);
+ UInt32 bit = (sym >> (kNumPosSlotBits - 1)) & 1;
+ sym <<= 1;
+ RC_BIT(&p->rc, prob, bit);
+ }
+ while (sym < (1 << kNumPosSlotBits * 2));
+ p->rc.range = range;
+ }
+
+ if (dist >= kStartPosModelIndex)
+ {
+ unsigned footerBits = ((posSlot >> 1) - 1);
+
+ if (dist < kNumFullDistances)
+ {
+ unsigned base = ((2 | (posSlot & 1)) << footerBits);
+ RcTree_ReverseEncode(&p->rc, p->posEncoders + base, footerBits, (unsigned)(dist /* - base */));
+ }
+ else
+ {
+ UInt32 pos2 = (dist | 0xF) << (32 - footerBits);
+ range = p->rc.range;
+ // RangeEnc_EncodeDirectBits(&p->rc, posReduced >> kNumAlignBits, footerBits - kNumAlignBits);
+ /*
+ do
+ {
+ range >>= 1;
+ p->rc.low += range & (0 - ((dist >> --footerBits) & 1));
+ RC_NORM(&p->rc)
+ }
+ while (footerBits > kNumAlignBits);
+ */
+ do
+ {
+ range >>= 1;
+ p->rc.low += range & (0 - (pos2 >> 31));
+ pos2 += pos2;
+ RC_NORM(&p->rc)
+ }
+ while (pos2 != 0xF0000000);
+
+
+ // RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, posReduced & kAlignMask);
+
+ {
+ unsigned m = 1;
+ unsigned bit;
+ bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit); m = (m << 1) + bit;
+ bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit); m = (m << 1) + bit;
+ bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit); m = (m << 1) + bit;
+ bit = dist & 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit);
+ p->rc.range = range;
+ // p->alignPriceCount++;
+ }
+ }
+ }
+ }
+ }
+
+ nowPos32 += (UInt32)len;
+ p->additionalOffset -= len;
+
+ if (p->additionalOffset == 0)
+ {
+ UInt32 processed;
+
+ if (!p->fastMode)
+ {
+ /*
+ if (p->alignPriceCount >= 16) // kAlignTableSize
+ FillAlignPrices(p);
+ if (p->matchPriceCount >= 128)
+ FillDistancesPrices(p);
+ if (p->lenEnc.counter <= 0)
+ LenPriceEnc_UpdateTables(&p->lenEnc, 1 << p->pb, &p->lenProbs, p->ProbPrices);
+ */
+ if (p->matchPriceCount >= 64)
+ {
+ FillAlignPrices(p);
+ // { int y; for (y = 0; y < 100; y++) {
+ FillDistancesPrices(p);
+ // }}
+ LenPriceEnc_UpdateTables(&p->lenEnc, 1 << p->pb, &p->lenProbs, p->ProbPrices);
+ }
+ if (p->repLenEncCounter <= 0)
+ {
+ p->repLenEncCounter = REP_LEN_COUNT;
+ LenPriceEnc_UpdateTables(&p->repLenEnc, 1 << p->pb, &p->repLenProbs, p->ProbPrices);
+ }
+ }
+
+ if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0)
+ break;
+ processed = nowPos32 - startPos32;
+
+ if (maxPackSize)
+ {
+ if (processed + kNumOpts + 300 >= maxUnpackSize
+ || RangeEnc_GetProcessed_sizet(&p->rc) + kPackReserve >= maxPackSize)
+ break;
+ }
+ else if (processed >= (1 << 17))
+ {
+ p->nowPos64 += nowPos32 - startPos32;
+ return CheckErrors(p);
+ }
+ }
+ }
+
+ p->nowPos64 += nowPos32 - startPos32;
+ return Flush(p, nowPos32);
+}
+
+
+
+#define kBigHashDicLimit ((UInt32)1 << 24)
+
+static SRes LzmaEnc_Alloc(CLzmaEnc *p, UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ UInt32 beforeSize = kNumOpts;
+ if (!RangeEnc_Alloc(&p->rc, alloc))
+ return SZ_ERROR_MEM;
+
+ #ifndef _7ZIP_ST
+ p->mtMode = (p->multiThread && !p->fastMode && (p->matchFinderBase.btMode != 0));
+ #endif
+
+ {
+ unsigned lclp = p->lc + p->lp;
+ if (!p->litProbs || !p->saveState.litProbs || p->lclp != lclp)
+ {
+ LzmaEnc_FreeLits(p, alloc);
+ p->litProbs = (CLzmaProb *)ISzAlloc_Alloc(alloc, ((UInt32)0x300 << lclp) * sizeof(CLzmaProb));
+ p->saveState.litProbs = (CLzmaProb *)ISzAlloc_Alloc(alloc, ((UInt32)0x300 << lclp) * sizeof(CLzmaProb));
+ if (!p->litProbs || !p->saveState.litProbs)
+ {
+ LzmaEnc_FreeLits(p, alloc);
+ return SZ_ERROR_MEM;
+ }
+ p->lclp = lclp;
+ }
+ }
+
+ p->matchFinderBase.bigHash = (Byte)(p->dictSize > kBigHashDicLimit ? 1 : 0);
+
+ if (beforeSize + p->dictSize < keepWindowSize)
+ beforeSize = keepWindowSize - p->dictSize;
+
+ #ifndef _7ZIP_ST
+ if (p->mtMode)
+ {
+ RINOK(MatchFinderMt_Create(&p->matchFinderMt, p->dictSize, beforeSize, p->numFastBytes,
+ LZMA_MATCH_LEN_MAX
+ + 1 /* 18.04 */
+ , allocBig));
+ p->matchFinderObj = &p->matchFinderMt;
+ p->matchFinderBase.bigHash = (Byte)(
+ (p->dictSize > kBigHashDicLimit && p->matchFinderBase.hashMask >= 0xFFFFFF) ? 1 : 0);
+ MatchFinderMt_CreateVTable(&p->matchFinderMt, &p->matchFinder);
+ }
+ else
+ #endif
+ {
+ if (!MatchFinder_Create(&p->matchFinderBase, p->dictSize, beforeSize, p->numFastBytes, LZMA_MATCH_LEN_MAX, allocBig))
+ return SZ_ERROR_MEM;
+ p->matchFinderObj = &p->matchFinderBase;
+ MatchFinder_CreateVTable(&p->matchFinderBase, &p->matchFinder);
+ }
+
+ return SZ_OK;
+}
+
+void LzmaEnc_Init(CLzmaEnc *p)
+{
+ unsigned i;
+ p->state = 0;
+ p->reps[0] =
+ p->reps[1] =
+ p->reps[2] =
+ p->reps[3] = 1;
+
+ RangeEnc_Init(&p->rc);
+
+ for (i = 0; i < (1 << kNumAlignBits); i++)
+ p->posAlignEncoder[i] = kProbInitValue;
+
+ for (i = 0; i < kNumStates; i++)
+ {
+ unsigned j;
+ for (j = 0; j < LZMA_NUM_PB_STATES_MAX; j++)
+ {
+ p->isMatch[i][j] = kProbInitValue;
+ p->isRep0Long[i][j] = kProbInitValue;
+ }
+ p->isRep[i] = kProbInitValue;
+ p->isRepG0[i] = kProbInitValue;
+ p->isRepG1[i] = kProbInitValue;
+ p->isRepG2[i] = kProbInitValue;
+ }
+
+ {
+ for (i = 0; i < kNumLenToPosStates; i++)
+ {
+ CLzmaProb *probs = p->posSlotEncoder[i];
+ unsigned j;
+ for (j = 0; j < (1 << kNumPosSlotBits); j++)
+ probs[j] = kProbInitValue;
+ }
+ }
+ {
+ for (i = 0; i < kNumFullDistances; i++)
+ p->posEncoders[i] = kProbInitValue;
+ }
+
+ {
+ UInt32 num = (UInt32)0x300 << (p->lp + p->lc);
+ UInt32 k;
+ CLzmaProb *probs = p->litProbs;
+ for (k = 0; k < num; k++)
+ probs[k] = kProbInitValue;
+ }
+
+
+ LenEnc_Init(&p->lenProbs);
+ LenEnc_Init(&p->repLenProbs);
+
+ p->optEnd = 0;
+ p->optCur = 0;
+
+ {
+ for (i = 0; i < kNumOpts; i++)
+ p->opt[i].price = kInfinityPrice;
+ }
+
+ p->additionalOffset = 0;
+
+ p->pbMask = (1 << p->pb) - 1;
+ p->lpMask = ((UInt32)0x100 << p->lp) - ((unsigned)0x100 >> p->lc);
+}
+
+
+void LzmaEnc_InitPrices(CLzmaEnc *p)
+{
+ if (!p->fastMode)
+ {
+ FillDistancesPrices(p);
+ FillAlignPrices(p);
+ }
+
+ p->lenEnc.tableSize =
+ p->repLenEnc.tableSize =
+ p->numFastBytes + 1 - LZMA_MATCH_LEN_MIN;
+
+ p->repLenEncCounter = REP_LEN_COUNT;
+
+ LenPriceEnc_UpdateTables(&p->lenEnc, 1 << p->pb, &p->lenProbs, p->ProbPrices);
+ LenPriceEnc_UpdateTables(&p->repLenEnc, 1 << p->pb, &p->repLenProbs, p->ProbPrices);
+}
+
+static SRes LzmaEnc_AllocAndInit(CLzmaEnc *p, UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ unsigned i;
+ for (i = kEndPosModelIndex / 2; i < kDicLogSizeMax; i++)
+ if (p->dictSize <= ((UInt32)1 << i))
+ break;
+ p->distTableSize = i * 2;
+
+ p->finished = False;
+ p->result = SZ_OK;
+ RINOK(LzmaEnc_Alloc(p, keepWindowSize, alloc, allocBig));
+ LzmaEnc_Init(p);
+ LzmaEnc_InitPrices(p);
+ p->nowPos64 = 0;
+ return SZ_OK;
+}
+
+SRes LzmaEnc_Prepare(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream,
+ ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+ p->matchFinderBase.stream = inStream;
+ p->needInit = 1;
+ p->rc.outStream = outStream;
+ return LzmaEnc_AllocAndInit(p, 0, alloc, allocBig);
+}
+
+SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp,
+ ISeqInStream *inStream, UInt32 keepWindowSize,
+ ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+ p->matchFinderBase.stream = inStream;
+ p->needInit = 1;
+ return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig);
+}
+
+static void LzmaEnc_SetInputBuf(CLzmaEnc *p, const Byte *src, SizeT srcLen)
+{
+ p->matchFinderBase.directInput = 1;
+ p->matchFinderBase.bufferBase = (Byte *)src;
+ p->matchFinderBase.directInputRem = srcLen;
+}
+
+SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen,
+ UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+ LzmaEnc_SetInputBuf(p, src, srcLen);
+ p->needInit = 1;
+
+ LzmaEnc_SetDataSize(pp, srcLen);
+ return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig);
+}
+
+void LzmaEnc_Finish(CLzmaEncHandle pp)
+{
+ #ifndef _7ZIP_ST
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+ if (p->mtMode)
+ MatchFinderMt_ReleaseStream(&p->matchFinderMt);
+ #else
+ UNUSED_VAR(pp);
+ #endif
+}
+
+
+typedef struct
+{
+ ISeqOutStream vt;
+ Byte *data;
+ SizeT rem;
+ BoolInt overflow;
+} CLzmaEnc_SeqOutStreamBuf;
+
+static size_t SeqOutStreamBuf_Write(const ISeqOutStream *pp, const void *data, size_t size)
+{
+ CLzmaEnc_SeqOutStreamBuf *p = CONTAINER_FROM_VTBL(pp, CLzmaEnc_SeqOutStreamBuf, vt);
+ if (p->rem < size)
+ {
+ size = p->rem;
+ p->overflow = True;
+ }
+ memcpy(p->data, data, size);
+ p->rem -= size;
+ p->data += size;
+ return size;
+}
+
+
+UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp)
+{
+ const CLzmaEnc *p = (CLzmaEnc *)pp;
+ return p->matchFinder.GetNumAvailableBytes(p->matchFinderObj);
+}
+
+
+const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp)
+{
+ const CLzmaEnc *p = (CLzmaEnc *)pp;
+ return p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset;
+}
+
+
+SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit,
+ Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize)
+{
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+ UInt64 nowPos64;
+ SRes res;
+ CLzmaEnc_SeqOutStreamBuf outStream;
+
+ outStream.vt.Write = SeqOutStreamBuf_Write;
+ outStream.data = dest;
+ outStream.rem = *destLen;
+ outStream.overflow = False;
+
+ p->writeEndMark = False;
+ p->finished = False;
+ p->result = SZ_OK;
+
+ if (reInit)
+ LzmaEnc_Init(p);
+ LzmaEnc_InitPrices(p);
+
+ nowPos64 = p->nowPos64;
+ RangeEnc_Init(&p->rc);
+ p->rc.outStream = &outStream.vt;
+
+ if (desiredPackSize == 0)
+ return SZ_ERROR_OUTPUT_EOF;
+
+ res = LzmaEnc_CodeOneBlock(p, desiredPackSize, *unpackSize);
+
+ *unpackSize = (UInt32)(p->nowPos64 - nowPos64);
+ *destLen -= outStream.rem;
+ if (outStream.overflow)
+ return SZ_ERROR_OUTPUT_EOF;
+
+ return res;
+}
+
+
+static SRes LzmaEnc_Encode2(CLzmaEnc *p, ICompressProgress *progress)
+{
+ SRes res = SZ_OK;
+
+ #ifndef _7ZIP_ST
+ Byte allocaDummy[0x300];
+ allocaDummy[0] = 0;
+ allocaDummy[1] = allocaDummy[0];
+ #endif
+
+ for (;;)
+ {
+ res = LzmaEnc_CodeOneBlock(p, 0, 0);
+ if (res != SZ_OK || p->finished)
+ break;
+ if (progress)
+ {
+ res = ICompressProgress_Progress(progress, p->nowPos64, RangeEnc_GetProcessed(&p->rc));
+ if (res != SZ_OK)
+ {
+ res = SZ_ERROR_PROGRESS;
+ break;
+ }
+ }
+ }
+
+ LzmaEnc_Finish(p);
+
+ /*
+ if (res == SZ_OK && !Inline_MatchFinder_IsFinishedOK(&p->matchFinderBase))
+ res = SZ_ERROR_FAIL;
+ }
+ */
+
+ return res;
+}
+
+
+SRes LzmaEnc_Encode(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress,
+ ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ RINOK(LzmaEnc_Prepare(pp, outStream, inStream, alloc, allocBig));
+ return LzmaEnc_Encode2((CLzmaEnc *)pp, progress);
+}
+
+
+SRes LzmaEnc_WriteProperties(CLzmaEncHandle pp, Byte *props, SizeT *size)
+{
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+ unsigned i;
+ UInt32 dictSize = p->dictSize;
+ if (*size < LZMA_PROPS_SIZE)
+ return SZ_ERROR_PARAM;
+ *size = LZMA_PROPS_SIZE;
+ props[0] = (Byte)((p->pb * 5 + p->lp) * 9 + p->lc);
+
+ if (dictSize >= ((UInt32)1 << 22))
+ {
+ UInt32 kDictMask = ((UInt32)1 << 20) - 1;
+ if (dictSize < (UInt32)0xFFFFFFFF - kDictMask)
+ dictSize = (dictSize + kDictMask) & ~kDictMask;
+ }
+ else for (i = 11; i <= 30; i++)
+ {
+ if (dictSize <= ((UInt32)2 << i)) { dictSize = (2 << i); break; }
+ if (dictSize <= ((UInt32)3 << i)) { dictSize = (3 << i); break; }
+ }
+
+ for (i = 0; i < 4; i++)
+ props[1 + i] = (Byte)(dictSize >> (8 * i));
+ return SZ_OK;
+}
+
+
+unsigned LzmaEnc_IsWriteEndMark(CLzmaEncHandle pp)
+{
+ return ((CLzmaEnc *)pp)->writeEndMark;
+}
+
+
+SRes LzmaEnc_MemEncode(CLzmaEncHandle pp, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
+ int writeEndMark, ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ SRes res;
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+
+ CLzmaEnc_SeqOutStreamBuf outStream;
+
+ outStream.vt.Write = SeqOutStreamBuf_Write;
+ outStream.data = dest;
+ outStream.rem = *destLen;
+ outStream.overflow = False;
+
+ p->writeEndMark = writeEndMark;
+ p->rc.outStream = &outStream.vt;
+
+ res = LzmaEnc_MemPrepare(pp, src, srcLen, 0, alloc, allocBig);
+
+ if (res == SZ_OK)
+ {
+ res = LzmaEnc_Encode2(p, progress);
+ if (res == SZ_OK && p->nowPos64 != srcLen)
+ res = SZ_ERROR_FAIL;
+ }
+
+ *destLen -= outStream.rem;
+ if (outStream.overflow)
+ return SZ_ERROR_OUTPUT_EOF;
+ return res;
+}
+
+
+SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
+ const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark,
+ ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig)
+{
+ CLzmaEnc *p = (CLzmaEnc *)LzmaEnc_Create(alloc);
+ SRes res;
+ if (!p)
+ return SZ_ERROR_MEM;
+
+ res = LzmaEnc_SetProps(p, props);
+ if (res == SZ_OK)
+ {
+ res = LzmaEnc_WriteProperties(p, propsEncoded, propsSize);
+ if (res == SZ_OK)
+ res = LzmaEnc_MemEncode(p, dest, destLen, src, srcLen,
+ writeEndMark, progress, alloc, allocBig);
+ }
+
+ LzmaEnc_Destroy(p, alloc, allocBig);
+ return res;
+}
+
+BoolInt LzmaEnc_IsFinished(CLzmaEncHandle pp)
+{
+ CLzmaEnc *p = (CLzmaEnc *)pp;
+ return p->finished;
+}
+ \ No newline at end of file
diff --git a/contrib/libs/lzmasdk/LzmaEnc.h b/contrib/libs/lzmasdk/LzmaEnc.h
index 37a0906c7e..b7d9dd2055 100644
--- a/contrib/libs/lzmasdk/LzmaEnc.h
+++ b/contrib/libs/lzmasdk/LzmaEnc.h
@@ -1,83 +1,83 @@
-/* LzmaEnc.h -- LZMA Encoder
-2017-07-27 : Igor Pavlov : Public domain */
-
-#ifndef __LZMA_ENC_H
-#define __LZMA_ENC_H
-
-#include "7zTypes.h"
-
-EXTERN_C_BEGIN
-
-#define LZMA_PROPS_SIZE 5
-
-typedef struct _CLzmaEncProps
-{
- int level; /* 0 <= level <= 9 */
- UInt32 dictSize; /* (1 << 12) <= dictSize <= (1 << 27) for 32-bit version
- (1 << 12) <= dictSize <= (3 << 29) for 64-bit version
- default = (1 << 24) */
- int lc; /* 0 <= lc <= 8, default = 3 */
- int lp; /* 0 <= lp <= 4, default = 0 */
- int pb; /* 0 <= pb <= 4, default = 2 */
- int algo; /* 0 - fast, 1 - normal, default = 1 */
- int fb; /* 5 <= fb <= 273, default = 32 */
- int btMode; /* 0 - hashChain Mode, 1 - binTree mode - normal, default = 1 */
- int numHashBytes; /* 2, 3 or 4, default = 4 */
- UInt32 mc; /* 1 <= mc <= (1 << 30), default = 32 */
- unsigned writeEndMark; /* 0 - do not write EOPM, 1 - write EOPM, default = 0 */
- int numThreads; /* 1 or 2, default = 2 */
-
- UInt64 reduceSize; /* estimated size of data that will be compressed. default = (UInt64)(Int64)-1.
- Encoder uses this value to reduce dictionary size */
-} CLzmaEncProps;
-
-void LzmaEncProps_Init(CLzmaEncProps *p);
-void LzmaEncProps_Normalize(CLzmaEncProps *p);
-UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2);
-
-
-/* ---------- CLzmaEncHandle Interface ---------- */
-
-/* LzmaEnc* functions can return the following exit codes:
-SRes:
- SZ_OK - OK
- SZ_ERROR_MEM - Memory allocation error
- SZ_ERROR_PARAM - Incorrect paramater in props
- SZ_ERROR_WRITE - ISeqOutStream write callback error
- SZ_ERROR_OUTPUT_EOF - output buffer overflow - version with (Byte *) output
- SZ_ERROR_PROGRESS - some break from progress callback
- SZ_ERROR_THREAD - error in multithreading functions (only for Mt version)
-*/
-
-typedef void * CLzmaEncHandle;
-
-CLzmaEncHandle LzmaEnc_Create(ISzAllocPtr alloc);
-void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAllocPtr alloc, ISzAllocPtr allocBig);
-
-SRes LzmaEnc_SetProps(CLzmaEncHandle p, const CLzmaEncProps *props);
-void LzmaEnc_SetDataSize(CLzmaEncHandle p, UInt64 expectedDataSiize);
-SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *properties, SizeT *size);
-unsigned LzmaEnc_IsWriteEndMark(CLzmaEncHandle p);
-
-SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream,
- ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig);
-SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
- int writeEndMark, ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig);
-
-
-/* ---------- One Call Interface ---------- */
-
-SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
- const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark,
- ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig);
-
-EXTERN_C_END
-
-/* ---------- Streaming Interface ---------- */
-
-SRes LzmaEnc_Prepare(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ISzAllocPtr alloc, ISzAllocPtr allocBig);
-SRes LzmaEnc_CodeOneBlock(CLzmaEncHandle pp, UInt32 maxPackSize, UInt32 maxUnpackSize);
-BoolInt LzmaEnc_IsFinished(CLzmaEncHandle pp);
-void LzmaEnc_Finish(CLzmaEncHandle pp);
-
-#endif
+/* LzmaEnc.h -- LZMA Encoder
+2017-07-27 : Igor Pavlov : Public domain */
+
+#ifndef __LZMA_ENC_H
+#define __LZMA_ENC_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+#define LZMA_PROPS_SIZE 5
+
+typedef struct _CLzmaEncProps
+{
+ int level; /* 0 <= level <= 9 */
+ UInt32 dictSize; /* (1 << 12) <= dictSize <= (1 << 27) for 32-bit version
+ (1 << 12) <= dictSize <= (3 << 29) for 64-bit version
+ default = (1 << 24) */
+ int lc; /* 0 <= lc <= 8, default = 3 */
+ int lp; /* 0 <= lp <= 4, default = 0 */
+ int pb; /* 0 <= pb <= 4, default = 2 */
+ int algo; /* 0 - fast, 1 - normal, default = 1 */
+ int fb; /* 5 <= fb <= 273, default = 32 */
+ int btMode; /* 0 - hashChain Mode, 1 - binTree mode - normal, default = 1 */
+ int numHashBytes; /* 2, 3 or 4, default = 4 */
+ UInt32 mc; /* 1 <= mc <= (1 << 30), default = 32 */
+ unsigned writeEndMark; /* 0 - do not write EOPM, 1 - write EOPM, default = 0 */
+ int numThreads; /* 1 or 2, default = 2 */
+
+ UInt64 reduceSize; /* estimated size of data that will be compressed. default = (UInt64)(Int64)-1.
+ Encoder uses this value to reduce dictionary size */
+} CLzmaEncProps;
+
+void LzmaEncProps_Init(CLzmaEncProps *p);
+void LzmaEncProps_Normalize(CLzmaEncProps *p);
+UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2);
+
+
+/* ---------- CLzmaEncHandle Interface ---------- */
+
+/* LzmaEnc* functions can return the following exit codes:
+SRes:
+ SZ_OK - OK
+ SZ_ERROR_MEM - Memory allocation error
+ SZ_ERROR_PARAM - Incorrect paramater in props
+ SZ_ERROR_WRITE - ISeqOutStream write callback error
+ SZ_ERROR_OUTPUT_EOF - output buffer overflow - version with (Byte *) output
+ SZ_ERROR_PROGRESS - some break from progress callback
+ SZ_ERROR_THREAD - error in multithreading functions (only for Mt version)
+*/
+
+typedef void * CLzmaEncHandle;
+
+CLzmaEncHandle LzmaEnc_Create(ISzAllocPtr alloc);
+void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAllocPtr alloc, ISzAllocPtr allocBig);
+
+SRes LzmaEnc_SetProps(CLzmaEncHandle p, const CLzmaEncProps *props);
+void LzmaEnc_SetDataSize(CLzmaEncHandle p, UInt64 expectedDataSiize);
+SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *properties, SizeT *size);
+unsigned LzmaEnc_IsWriteEndMark(CLzmaEncHandle p);
+
+SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream,
+ ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig);
+SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
+ int writeEndMark, ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig);
+
+
+/* ---------- One Call Interface ---------- */
+
+SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
+ const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark,
+ ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig);
+
+EXTERN_C_END
+
+/* ---------- Streaming Interface ---------- */
+
+SRes LzmaEnc_Prepare(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ISzAllocPtr alloc, ISzAllocPtr allocBig);
+SRes LzmaEnc_CodeOneBlock(CLzmaEncHandle pp, UInt32 maxPackSize, UInt32 maxUnpackSize);
+BoolInt LzmaEnc_IsFinished(CLzmaEncHandle pp);
+void LzmaEnc_Finish(CLzmaEncHandle pp);
+
+#endif
diff --git a/contrib/libs/lzmasdk/LzmaLib.c b/contrib/libs/lzmasdk/LzmaLib.c
index 706e9e58cd..c10cf1a0f2 100644
--- a/contrib/libs/lzmasdk/LzmaLib.c
+++ b/contrib/libs/lzmasdk/LzmaLib.c
@@ -1,40 +1,40 @@
-/* LzmaLib.c -- LZMA library wrapper
-2015-06-13 : Igor Pavlov : Public domain */
-
-#include "Alloc.h"
-#include "LzmaDec.h"
-#include "LzmaEnc.h"
-#include "LzmaLib.h"
-
-MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen,
- unsigned char *outProps, size_t *outPropsSize,
- int level, /* 0 <= level <= 9, default = 5 */
- unsigned dictSize, /* use (1 << N) or (3 << N). 4 KB < dictSize <= 128 MB */
- int lc, /* 0 <= lc <= 8, default = 3 */
- int lp, /* 0 <= lp <= 4, default = 0 */
- int pb, /* 0 <= pb <= 4, default = 2 */
- int fb, /* 5 <= fb <= 273, default = 32 */
- int numThreads /* 1 or 2, default = 2 */
-)
-{
- CLzmaEncProps props;
- LzmaEncProps_Init(&props);
- props.level = level;
- props.dictSize = dictSize;
- props.lc = lc;
- props.lp = lp;
- props.pb = pb;
- props.fb = fb;
- props.numThreads = numThreads;
-
- return LzmaEncode(dest, destLen, src, srcLen, &props, outProps, outPropsSize, 0,
- NULL, &g_Alloc, &g_Alloc);
-}
-
-
-MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t *srcLen,
- const unsigned char *props, size_t propsSize)
-{
- ELzmaStatus status;
- return LzmaDecode(dest, destLen, src, srcLen, props, (unsigned)propsSize, LZMA_FINISH_ANY, &status, &g_Alloc);
-}
+/* LzmaLib.c -- LZMA library wrapper
+2015-06-13 : Igor Pavlov : Public domain */
+
+#include "Alloc.h"
+#include "LzmaDec.h"
+#include "LzmaEnc.h"
+#include "LzmaLib.h"
+
+MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen,
+ unsigned char *outProps, size_t *outPropsSize,
+ int level, /* 0 <= level <= 9, default = 5 */
+ unsigned dictSize, /* use (1 << N) or (3 << N). 4 KB < dictSize <= 128 MB */
+ int lc, /* 0 <= lc <= 8, default = 3 */
+ int lp, /* 0 <= lp <= 4, default = 0 */
+ int pb, /* 0 <= pb <= 4, default = 2 */
+ int fb, /* 5 <= fb <= 273, default = 32 */
+ int numThreads /* 1 or 2, default = 2 */
+)
+{
+ CLzmaEncProps props;
+ LzmaEncProps_Init(&props);
+ props.level = level;
+ props.dictSize = dictSize;
+ props.lc = lc;
+ props.lp = lp;
+ props.pb = pb;
+ props.fb = fb;
+ props.numThreads = numThreads;
+
+ return LzmaEncode(dest, destLen, src, srcLen, &props, outProps, outPropsSize, 0,
+ NULL, &g_Alloc, &g_Alloc);
+}
+
+
+MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t *srcLen,
+ const unsigned char *props, size_t propsSize)
+{
+ ELzmaStatus status;
+ return LzmaDecode(dest, destLen, src, srcLen, props, (unsigned)propsSize, LZMA_FINISH_ANY, &status, &g_Alloc);
+}
diff --git a/contrib/libs/lzmasdk/LzmaLib.h b/contrib/libs/lzmasdk/LzmaLib.h
index 88fa87d350..5c35e53654 100644
--- a/contrib/libs/lzmasdk/LzmaLib.h
+++ b/contrib/libs/lzmasdk/LzmaLib.h
@@ -1,131 +1,131 @@
-/* LzmaLib.h -- LZMA library interface
-2013-01-18 : Igor Pavlov : Public domain */
-
-#ifndef __LZMA_LIB_H
-#define __LZMA_LIB_H
-
-#include "7zTypes.h"
-
-EXTERN_C_BEGIN
-
-#define MY_STDAPI int MY_STD_CALL
-
-#define LZMA_PROPS_SIZE 5
-
-/*
-RAM requirements for LZMA:
- for compression: (dictSize * 11.5 + 6 MB) + state_size
- for decompression: dictSize + state_size
- state_size = (4 + (1.5 << (lc + lp))) KB
- by default (lc=3, lp=0), state_size = 16 KB.
-
-LZMA properties (5 bytes) format
- Offset Size Description
- 0 1 lc, lp and pb in encoded form.
- 1 4 dictSize (little endian).
-*/
-
-/*
-LzmaCompress
-------------
-
-outPropsSize -
- In: the pointer to the size of outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5.
- Out: the pointer to the size of written properties in outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5.
-
- LZMA Encoder will use defult values for any parameter, if it is
- -1 for any from: level, loc, lp, pb, fb, numThreads
- 0 for dictSize
-
-level - compression level: 0 <= level <= 9;
-
- level dictSize algo fb
- 0: 16 KB 0 32
- 1: 64 KB 0 32
- 2: 256 KB 0 32
- 3: 1 MB 0 32
- 4: 4 MB 0 32
- 5: 16 MB 1 32
- 6: 32 MB 1 32
- 7+: 64 MB 1 64
-
- The default value for "level" is 5.
-
- algo = 0 means fast method
- algo = 1 means normal method
-
-dictSize - The dictionary size in bytes. The maximum value is
- 128 MB = (1 << 27) bytes for 32-bit version
- 1 GB = (1 << 30) bytes for 64-bit version
- The default value is 16 MB = (1 << 24) bytes.
- It's recommended to use the dictionary that is larger than 4 KB and
- that can be calculated as (1 << N) or (3 << N) sizes.
-
-lc - The number of literal context bits (high bits of previous literal).
- It can be in the range from 0 to 8. The default value is 3.
- Sometimes lc=4 gives the gain for big files.
-
-lp - The number of literal pos bits (low bits of current position for literals).
- It can be in the range from 0 to 4. The default value is 0.
- The lp switch is intended for periodical data when the period is equal to 2^lp.
- For example, for 32-bit (4 bytes) periodical data you can use lp=2. Often it's
- better to set lc=0, if you change lp switch.
-
-pb - The number of pos bits (low bits of current position).
- It can be in the range from 0 to 4. The default value is 2.
- The pb switch is intended for periodical data when the period is equal 2^pb.
-
-fb - Word size (the number of fast bytes).
- It can be in the range from 5 to 273. The default value is 32.
- Usually, a big number gives a little bit better compression ratio and
- slower compression process.
-
-numThreads - The number of thereads. 1 or 2. The default value is 2.
- Fast mode (algo = 0) can use only 1 thread.
-
-Out:
- destLen - processed output size
-Returns:
- SZ_OK - OK
- SZ_ERROR_MEM - Memory allocation error
- SZ_ERROR_PARAM - Incorrect paramater
- SZ_ERROR_OUTPUT_EOF - output buffer overflow
- SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version)
-*/
-
-MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen,
- unsigned char *outProps, size_t *outPropsSize, /* *outPropsSize must be = 5 */
- int level, /* 0 <= level <= 9, default = 5 */
- unsigned dictSize, /* default = (1 << 24) */
- int lc, /* 0 <= lc <= 8, default = 3 */
- int lp, /* 0 <= lp <= 4, default = 0 */
- int pb, /* 0 <= pb <= 4, default = 2 */
- int fb, /* 5 <= fb <= 273, default = 32 */
- int numThreads /* 1 or 2, default = 2 */
- );
-
-/*
-LzmaUncompress
---------------
-In:
- dest - output data
- destLen - output data size
- src - input data
- srcLen - input data size
-Out:
- destLen - processed output size
- srcLen - processed input size
-Returns:
- SZ_OK - OK
- SZ_ERROR_DATA - Data error
- SZ_ERROR_MEM - Memory allocation arror
- SZ_ERROR_UNSUPPORTED - Unsupported properties
- SZ_ERROR_INPUT_EOF - it needs more bytes in input buffer (src)
-*/
-
-MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, SizeT *srcLen,
- const unsigned char *props, size_t propsSize);
-
-EXTERN_C_END
-
-#endif
+/* LzmaLib.h -- LZMA library interface
+2013-01-18 : Igor Pavlov : Public domain */
+
+#ifndef __LZMA_LIB_H
+#define __LZMA_LIB_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+#define MY_STDAPI int MY_STD_CALL
+
+#define LZMA_PROPS_SIZE 5
+
+/*
+RAM requirements for LZMA:
+ for compression: (dictSize * 11.5 + 6 MB) + state_size
+ for decompression: dictSize + state_size
+ state_size = (4 + (1.5 << (lc + lp))) KB
+ by default (lc=3, lp=0), state_size = 16 KB.
+
+LZMA properties (5 bytes) format
+ Offset Size Description
+ 0 1 lc, lp and pb in encoded form.
+ 1 4 dictSize (little endian).
+*/
+
+/*
+LzmaCompress
+------------
+
+outPropsSize -
+ In: the pointer to the size of outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5.
+ Out: the pointer to the size of written properties in outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5.
+
+ LZMA Encoder will use defult values for any parameter, if it is
+ -1 for any from: level, loc, lp, pb, fb, numThreads
+ 0 for dictSize
+
+level - compression level: 0 <= level <= 9;
+
+ level dictSize algo fb
+ 0: 16 KB 0 32
+ 1: 64 KB 0 32
+ 2: 256 KB 0 32
+ 3: 1 MB 0 32
+ 4: 4 MB 0 32
+ 5: 16 MB 1 32
+ 6: 32 MB 1 32
+ 7+: 64 MB 1 64
+
+ The default value for "level" is 5.
+
+ algo = 0 means fast method
+ algo = 1 means normal method
+
+dictSize - The dictionary size in bytes. The maximum value is
+ 128 MB = (1 << 27) bytes for 32-bit version
+ 1 GB = (1 << 30) bytes for 64-bit version
+ The default value is 16 MB = (1 << 24) bytes.
+ It's recommended to use the dictionary that is larger than 4 KB and
+ that can be calculated as (1 << N) or (3 << N) sizes.
+
+lc - The number of literal context bits (high bits of previous literal).
+ It can be in the range from 0 to 8. The default value is 3.
+ Sometimes lc=4 gives the gain for big files.
+
+lp - The number of literal pos bits (low bits of current position for literals).
+ It can be in the range from 0 to 4. The default value is 0.
+ The lp switch is intended for periodical data when the period is equal to 2^lp.
+ For example, for 32-bit (4 bytes) periodical data you can use lp=2. Often it's
+ better to set lc=0, if you change lp switch.
+
+pb - The number of pos bits (low bits of current position).
+ It can be in the range from 0 to 4. The default value is 2.
+ The pb switch is intended for periodical data when the period is equal 2^pb.
+
+fb - Word size (the number of fast bytes).
+ It can be in the range from 5 to 273. The default value is 32.
+ Usually, a big number gives a little bit better compression ratio and
+ slower compression process.
+
+numThreads - The number of thereads. 1 or 2. The default value is 2.
+ Fast mode (algo = 0) can use only 1 thread.
+
+Out:
+ destLen - processed output size
+Returns:
+ SZ_OK - OK
+ SZ_ERROR_MEM - Memory allocation error
+ SZ_ERROR_PARAM - Incorrect paramater
+ SZ_ERROR_OUTPUT_EOF - output buffer overflow
+ SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version)
+*/
+
+MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen,
+ unsigned char *outProps, size_t *outPropsSize, /* *outPropsSize must be = 5 */
+ int level, /* 0 <= level <= 9, default = 5 */
+ unsigned dictSize, /* default = (1 << 24) */
+ int lc, /* 0 <= lc <= 8, default = 3 */
+ int lp, /* 0 <= lp <= 4, default = 0 */
+ int pb, /* 0 <= pb <= 4, default = 2 */
+ int fb, /* 5 <= fb <= 273, default = 32 */
+ int numThreads /* 1 or 2, default = 2 */
+ );
+
+/*
+LzmaUncompress
+--------------
+In:
+ dest - output data
+ destLen - output data size
+ src - input data
+ srcLen - input data size
+Out:
+ destLen - processed output size
+ srcLen - processed input size
+Returns:
+ SZ_OK - OK
+ SZ_ERROR_DATA - Data error
+ SZ_ERROR_MEM - Memory allocation arror
+ SZ_ERROR_UNSUPPORTED - Unsupported properties
+ SZ_ERROR_INPUT_EOF - it needs more bytes in input buffer (src)
+*/
+
+MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, SizeT *srcLen,
+ const unsigned char *props, size_t propsSize);
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/MtCoder.h b/contrib/libs/lzmasdk/MtCoder.h
index 5a5f4d11b9..603329d367 100644
--- a/contrib/libs/lzmasdk/MtCoder.h
+++ b/contrib/libs/lzmasdk/MtCoder.h
@@ -1,141 +1,141 @@
-/* MtCoder.h -- Multi-thread Coder
-2018-07-04 : Igor Pavlov : Public domain */
-
-#ifndef __MT_CODER_H
-#define __MT_CODER_H
-
-#include "MtDec.h"
-
-EXTERN_C_BEGIN
-
-/*
- if ( defined MTCODER__USE_WRITE_THREAD) : main thread writes all data blocks to output stream
- if (not defined MTCODER__USE_WRITE_THREAD) : any coder thread can write data blocks to output stream
-*/
-/* #define MTCODER__USE_WRITE_THREAD */
-
-#ifndef _7ZIP_ST
- #define MTCODER__GET_NUM_BLOCKS_FROM_THREADS(numThreads) ((numThreads) + (numThreads) / 8 + 1)
- #define MTCODER__THREADS_MAX 64
- #define MTCODER__BLOCKS_MAX (MTCODER__GET_NUM_BLOCKS_FROM_THREADS(MTCODER__THREADS_MAX) + 3)
-#else
- #define MTCODER__THREADS_MAX 1
- #define MTCODER__BLOCKS_MAX 1
-#endif
-
-
-#ifndef _7ZIP_ST
-
-
-typedef struct
-{
- ICompressProgress vt;
- CMtProgress *mtProgress;
- UInt64 inSize;
- UInt64 outSize;
-} CMtProgressThunk;
-
-void MtProgressThunk_CreateVTable(CMtProgressThunk *p);
-
-#define MtProgressThunk_Init(p) { (p)->inSize = 0; (p)->outSize = 0; }
-
-
-struct _CMtCoder;
-
-
-typedef struct
-{
- struct _CMtCoder *mtCoder;
- unsigned index;
- int stop;
- Byte *inBuf;
-
- CAutoResetEvent startEvent;
- CThread thread;
-} CMtCoderThread;
-
-
-typedef struct
-{
- SRes (*Code)(void *p, unsigned coderIndex, unsigned outBufIndex,
- const Byte *src, size_t srcSize, int finished);
- SRes (*Write)(void *p, unsigned outBufIndex);
-} IMtCoderCallback2;
-
-
-typedef struct
-{
- SRes res;
- unsigned bufIndex;
- BoolInt finished;
-} CMtCoderBlock;
-
-
-typedef struct _CMtCoder
-{
- /* input variables */
-
- size_t blockSize; /* size of input block */
- unsigned numThreadsMax;
- UInt64 expectedDataSize;
-
- ISeqInStream *inStream;
- const Byte *inData;
- size_t inDataSize;
-
- ICompressProgress *progress;
- ISzAllocPtr allocBig;
-
- IMtCoderCallback2 *mtCallback;
- void *mtCallbackObject;
-
-
- /* internal variables */
-
- size_t allocatedBufsSize;
-
- CAutoResetEvent readEvent;
- CSemaphore blocksSemaphore;
-
- BoolInt stopReading;
- SRes readRes;
-
- #ifdef MTCODER__USE_WRITE_THREAD
- CAutoResetEvent writeEvents[MTCODER__BLOCKS_MAX];
- #else
- CAutoResetEvent finishedEvent;
- SRes writeRes;
- unsigned writeIndex;
- Byte ReadyBlocks[MTCODER__BLOCKS_MAX];
- LONG numFinishedThreads;
- #endif
-
- unsigned numStartedThreadsLimit;
- unsigned numStartedThreads;
-
- unsigned numBlocksMax;
- unsigned blockIndex;
- UInt64 readProcessed;
-
- CCriticalSection cs;
-
- unsigned freeBlockHead;
- unsigned freeBlockList[MTCODER__BLOCKS_MAX];
-
- CMtProgress mtProgress;
- CMtCoderBlock blocks[MTCODER__BLOCKS_MAX];
- CMtCoderThread threads[MTCODER__THREADS_MAX];
-} CMtCoder;
-
-
-void MtCoder_Construct(CMtCoder *p);
-void MtCoder_Destruct(CMtCoder *p);
-SRes MtCoder_Code(CMtCoder *p);
-
-
-#endif
-
-
-EXTERN_C_END
-
-#endif
+/* MtCoder.h -- Multi-thread Coder
+2018-07-04 : Igor Pavlov : Public domain */
+
+#ifndef __MT_CODER_H
+#define __MT_CODER_H
+
+#include "MtDec.h"
+
+EXTERN_C_BEGIN
+
+/*
+ if ( defined MTCODER__USE_WRITE_THREAD) : main thread writes all data blocks to output stream
+ if (not defined MTCODER__USE_WRITE_THREAD) : any coder thread can write data blocks to output stream
+*/
+/* #define MTCODER__USE_WRITE_THREAD */
+
+#ifndef _7ZIP_ST
+ #define MTCODER__GET_NUM_BLOCKS_FROM_THREADS(numThreads) ((numThreads) + (numThreads) / 8 + 1)
+ #define MTCODER__THREADS_MAX 64
+ #define MTCODER__BLOCKS_MAX (MTCODER__GET_NUM_BLOCKS_FROM_THREADS(MTCODER__THREADS_MAX) + 3)
+#else
+ #define MTCODER__THREADS_MAX 1
+ #define MTCODER__BLOCKS_MAX 1
+#endif
+
+
+#ifndef _7ZIP_ST
+
+
+typedef struct
+{
+ ICompressProgress vt;
+ CMtProgress *mtProgress;
+ UInt64 inSize;
+ UInt64 outSize;
+} CMtProgressThunk;
+
+void MtProgressThunk_CreateVTable(CMtProgressThunk *p);
+
+#define MtProgressThunk_Init(p) { (p)->inSize = 0; (p)->outSize = 0; }
+
+
+struct _CMtCoder;
+
+
+typedef struct
+{
+ struct _CMtCoder *mtCoder;
+ unsigned index;
+ int stop;
+ Byte *inBuf;
+
+ CAutoResetEvent startEvent;
+ CThread thread;
+} CMtCoderThread;
+
+
+typedef struct
+{
+ SRes (*Code)(void *p, unsigned coderIndex, unsigned outBufIndex,
+ const Byte *src, size_t srcSize, int finished);
+ SRes (*Write)(void *p, unsigned outBufIndex);
+} IMtCoderCallback2;
+
+
+typedef struct
+{
+ SRes res;
+ unsigned bufIndex;
+ BoolInt finished;
+} CMtCoderBlock;
+
+
+typedef struct _CMtCoder
+{
+ /* input variables */
+
+ size_t blockSize; /* size of input block */
+ unsigned numThreadsMax;
+ UInt64 expectedDataSize;
+
+ ISeqInStream *inStream;
+ const Byte *inData;
+ size_t inDataSize;
+
+ ICompressProgress *progress;
+ ISzAllocPtr allocBig;
+
+ IMtCoderCallback2 *mtCallback;
+ void *mtCallbackObject;
+
+
+ /* internal variables */
+
+ size_t allocatedBufsSize;
+
+ CAutoResetEvent readEvent;
+ CSemaphore blocksSemaphore;
+
+ BoolInt stopReading;
+ SRes readRes;
+
+ #ifdef MTCODER__USE_WRITE_THREAD
+ CAutoResetEvent writeEvents[MTCODER__BLOCKS_MAX];
+ #else
+ CAutoResetEvent finishedEvent;
+ SRes writeRes;
+ unsigned writeIndex;
+ Byte ReadyBlocks[MTCODER__BLOCKS_MAX];
+ LONG numFinishedThreads;
+ #endif
+
+ unsigned numStartedThreadsLimit;
+ unsigned numStartedThreads;
+
+ unsigned numBlocksMax;
+ unsigned blockIndex;
+ UInt64 readProcessed;
+
+ CCriticalSection cs;
+
+ unsigned freeBlockHead;
+ unsigned freeBlockList[MTCODER__BLOCKS_MAX];
+
+ CMtProgress mtProgress;
+ CMtCoderBlock blocks[MTCODER__BLOCKS_MAX];
+ CMtCoderThread threads[MTCODER__THREADS_MAX];
+} CMtCoder;
+
+
+void MtCoder_Construct(CMtCoder *p);
+void MtCoder_Destruct(CMtCoder *p);
+SRes MtCoder_Code(CMtCoder *p);
+
+
+#endif
+
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/MtDec.h b/contrib/libs/lzmasdk/MtDec.h
index 9b57766724..9864cc8741 100644
--- a/contrib/libs/lzmasdk/MtDec.h
+++ b/contrib/libs/lzmasdk/MtDec.h
@@ -1,201 +1,201 @@
-/* MtDec.h -- Multi-thread Decoder
-2018-07-04 : Igor Pavlov : Public domain */
-
-#ifndef __MT_DEC_H
-#define __MT_DEC_H
-
-#include "7zTypes.h"
-
-#ifndef _7ZIP_ST
-#include "Threads.h"
-#endif
-
-EXTERN_C_BEGIN
-
-#ifndef _7ZIP_ST
-
-#ifndef _7ZIP_ST
- #define MTDEC__THREADS_MAX 32
-#else
- #define MTDEC__THREADS_MAX 1
-#endif
-
-
-typedef struct
-{
- ICompressProgress *progress;
- SRes res;
- UInt64 totalInSize;
- UInt64 totalOutSize;
- CCriticalSection cs;
-} CMtProgress;
-
-void MtProgress_Init(CMtProgress *p, ICompressProgress *progress);
-SRes MtProgress_Progress_ST(CMtProgress *p);
-SRes MtProgress_ProgressAdd(CMtProgress *p, UInt64 inSize, UInt64 outSize);
-SRes MtProgress_GetError(CMtProgress *p);
-void MtProgress_SetError(CMtProgress *p, SRes res);
-
-struct _CMtDec;
-
-typedef struct
-{
- struct _CMtDec *mtDec;
- unsigned index;
- void *inBuf;
-
- size_t inDataSize_Start; // size of input data in start block
- UInt64 inDataSize; // total size of input data in all blocks
-
- CThread thread;
- CAutoResetEvent canRead;
- CAutoResetEvent canWrite;
- void *allocaPtr;
-} CMtDecThread;
-
-void MtDecThread_FreeInBufs(CMtDecThread *t);
-
-
-typedef enum
-{
- MTDEC_PARSE_CONTINUE, // continue this block with more input data
- MTDEC_PARSE_OVERFLOW, // MT buffers overflow, need switch to single-thread
- MTDEC_PARSE_NEW, // new block
- MTDEC_PARSE_END // end of block threading. But we still can return to threading after Write(&needContinue)
-} EMtDecParseState;
-
-typedef struct
-{
- // in
- int startCall;
- const Byte *src;
- size_t srcSize;
- // in : (srcSize == 0) is allowed
- // out : it's allowed to return less that actually was used ?
- int srcFinished;
-
- // out
- EMtDecParseState state;
- BoolInt canCreateNewThread;
- UInt64 outPos; // check it (size_t)
-} CMtDecCallbackInfo;
-
-
-typedef struct
-{
- void (*Parse)(void *p, unsigned coderIndex, CMtDecCallbackInfo *ci);
-
- // PreCode() and Code():
- // (SRes_return_result != SZ_OK) means stop decoding, no need another blocks
- SRes (*PreCode)(void *p, unsigned coderIndex);
- SRes (*Code)(void *p, unsigned coderIndex,
- const Byte *src, size_t srcSize, int srcFinished,
- UInt64 *inCodePos, UInt64 *outCodePos, int *stop);
- // stop - means stop another Code calls
-
-
- /* Write() must be called, if Parse() was called
- set (needWrite) if
- {
- && (was not interrupted by progress)
- && (was not interrupted in previous block)
- }
-
- out:
- if (*needContinue), decoder still need to continue decoding with new iteration,
- even after MTDEC_PARSE_END
- if (*canRecode), we didn't flush current block data, so we still can decode current block later.
- */
- SRes (*Write)(void *p, unsigned coderIndex,
- BoolInt needWriteToStream,
- const Byte *src, size_t srcSize,
- // int srcFinished,
- BoolInt *needContinue,
- BoolInt *canRecode);
-} IMtDecCallback;
-
-
-
-typedef struct _CMtDec
-{
- /* input variables */
-
- size_t inBufSize; /* size of input block */
- unsigned numThreadsMax;
- // size_t inBlockMax;
- unsigned numThreadsMax_2;
-
- ISeqInStream *inStream;
- // const Byte *inData;
- // size_t inDataSize;
-
- ICompressProgress *progress;
- ISzAllocPtr alloc;
-
- IMtDecCallback *mtCallback;
- void *mtCallbackObject;
-
-
- /* internal variables */
-
- size_t allocatedBufsSize;
-
- BoolInt exitThread;
- WRes exitThreadWRes;
-
- UInt64 blockIndex;
- BoolInt isAllocError;
- BoolInt overflow;
- SRes threadingErrorSRes;
-
- BoolInt needContinue;
-
- // CAutoResetEvent finishedEvent;
-
- SRes readRes;
- SRes codeRes;
-
- BoolInt wasInterrupted;
-
- unsigned numStartedThreads_Limit;
- unsigned numStartedThreads;
-
- Byte *crossBlock;
- size_t crossStart;
- size_t crossEnd;
- UInt64 readProcessed;
- BoolInt readWasFinished;
- UInt64 inProcessed;
-
- unsigned filledThreadStart;
- unsigned numFilledThreads;
-
- #ifndef _7ZIP_ST
- BoolInt needInterrupt;
- UInt64 interruptIndex;
- CMtProgress mtProgress;
- CMtDecThread threads[MTDEC__THREADS_MAX];
- #endif
-} CMtDec;
-
-
-void MtDec_Construct(CMtDec *p);
-void MtDec_Destruct(CMtDec *p);
-
-/*
-MtDec_Code() returns:
- SZ_OK - in most cases
- MY_SRes_HRESULT_FROM_WRes(WRes_error) - in case of unexpected error in threading function
-*/
-
-SRes MtDec_Code(CMtDec *p);
-Byte *MtDec_GetCrossBuff(CMtDec *p);
-
-int MtDec_PrepareRead(CMtDec *p);
-const Byte *MtDec_Read(CMtDec *p, size_t *inLim);
-
-#endif
-
-EXTERN_C_END
-
-#endif
+/* MtDec.h -- Multi-thread Decoder
+2018-07-04 : Igor Pavlov : Public domain */
+
+#ifndef __MT_DEC_H
+#define __MT_DEC_H
+
+#include "7zTypes.h"
+
+#ifndef _7ZIP_ST
+#include "Threads.h"
+#endif
+
+EXTERN_C_BEGIN
+
+#ifndef _7ZIP_ST
+
+#ifndef _7ZIP_ST
+ #define MTDEC__THREADS_MAX 32
+#else
+ #define MTDEC__THREADS_MAX 1
+#endif
+
+
+typedef struct
+{
+ ICompressProgress *progress;
+ SRes res;
+ UInt64 totalInSize;
+ UInt64 totalOutSize;
+ CCriticalSection cs;
+} CMtProgress;
+
+void MtProgress_Init(CMtProgress *p, ICompressProgress *progress);
+SRes MtProgress_Progress_ST(CMtProgress *p);
+SRes MtProgress_ProgressAdd(CMtProgress *p, UInt64 inSize, UInt64 outSize);
+SRes MtProgress_GetError(CMtProgress *p);
+void MtProgress_SetError(CMtProgress *p, SRes res);
+
+struct _CMtDec;
+
+typedef struct
+{
+ struct _CMtDec *mtDec;
+ unsigned index;
+ void *inBuf;
+
+ size_t inDataSize_Start; // size of input data in start block
+ UInt64 inDataSize; // total size of input data in all blocks
+
+ CThread thread;
+ CAutoResetEvent canRead;
+ CAutoResetEvent canWrite;
+ void *allocaPtr;
+} CMtDecThread;
+
+void MtDecThread_FreeInBufs(CMtDecThread *t);
+
+
+typedef enum
+{
+ MTDEC_PARSE_CONTINUE, // continue this block with more input data
+ MTDEC_PARSE_OVERFLOW, // MT buffers overflow, need switch to single-thread
+ MTDEC_PARSE_NEW, // new block
+ MTDEC_PARSE_END // end of block threading. But we still can return to threading after Write(&needContinue)
+} EMtDecParseState;
+
+typedef struct
+{
+ // in
+ int startCall;
+ const Byte *src;
+ size_t srcSize;
+ // in : (srcSize == 0) is allowed
+ // out : it's allowed to return less that actually was used ?
+ int srcFinished;
+
+ // out
+ EMtDecParseState state;
+ BoolInt canCreateNewThread;
+ UInt64 outPos; // check it (size_t)
+} CMtDecCallbackInfo;
+
+
+typedef struct
+{
+ void (*Parse)(void *p, unsigned coderIndex, CMtDecCallbackInfo *ci);
+
+ // PreCode() and Code():
+ // (SRes_return_result != SZ_OK) means stop decoding, no need another blocks
+ SRes (*PreCode)(void *p, unsigned coderIndex);
+ SRes (*Code)(void *p, unsigned coderIndex,
+ const Byte *src, size_t srcSize, int srcFinished,
+ UInt64 *inCodePos, UInt64 *outCodePos, int *stop);
+ // stop - means stop another Code calls
+
+
+ /* Write() must be called, if Parse() was called
+ set (needWrite) if
+ {
+ && (was not interrupted by progress)
+ && (was not interrupted in previous block)
+ }
+
+ out:
+ if (*needContinue), decoder still need to continue decoding with new iteration,
+ even after MTDEC_PARSE_END
+ if (*canRecode), we didn't flush current block data, so we still can decode current block later.
+ */
+ SRes (*Write)(void *p, unsigned coderIndex,
+ BoolInt needWriteToStream,
+ const Byte *src, size_t srcSize,
+ // int srcFinished,
+ BoolInt *needContinue,
+ BoolInt *canRecode);
+} IMtDecCallback;
+
+
+
+typedef struct _CMtDec
+{
+ /* input variables */
+
+ size_t inBufSize; /* size of input block */
+ unsigned numThreadsMax;
+ // size_t inBlockMax;
+ unsigned numThreadsMax_2;
+
+ ISeqInStream *inStream;
+ // const Byte *inData;
+ // size_t inDataSize;
+
+ ICompressProgress *progress;
+ ISzAllocPtr alloc;
+
+ IMtDecCallback *mtCallback;
+ void *mtCallbackObject;
+
+
+ /* internal variables */
+
+ size_t allocatedBufsSize;
+
+ BoolInt exitThread;
+ WRes exitThreadWRes;
+
+ UInt64 blockIndex;
+ BoolInt isAllocError;
+ BoolInt overflow;
+ SRes threadingErrorSRes;
+
+ BoolInt needContinue;
+
+ // CAutoResetEvent finishedEvent;
+
+ SRes readRes;
+ SRes codeRes;
+
+ BoolInt wasInterrupted;
+
+ unsigned numStartedThreads_Limit;
+ unsigned numStartedThreads;
+
+ Byte *crossBlock;
+ size_t crossStart;
+ size_t crossEnd;
+ UInt64 readProcessed;
+ BoolInt readWasFinished;
+ UInt64 inProcessed;
+
+ unsigned filledThreadStart;
+ unsigned numFilledThreads;
+
+ #ifndef _7ZIP_ST
+ BoolInt needInterrupt;
+ UInt64 interruptIndex;
+ CMtProgress mtProgress;
+ CMtDecThread threads[MTDEC__THREADS_MAX];
+ #endif
+} CMtDec;
+
+
+void MtDec_Construct(CMtDec *p);
+void MtDec_Destruct(CMtDec *p);
+
+/*
+MtDec_Code() returns:
+ SZ_OK - in most cases
+ MY_SRes_HRESULT_FROM_WRes(WRes_error) - in case of unexpected error in threading function
+*/
+
+SRes MtDec_Code(CMtDec *p);
+Byte *MtDec_GetCrossBuff(CMtDec *p);
+
+int MtDec_PrepareRead(CMtDec *p);
+const Byte *MtDec_Read(CMtDec *p, size_t *inLim);
+
+#endif
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/Precomp.h b/contrib/libs/lzmasdk/Precomp.h
index e8ff8b40e8..edb5814439 100644
--- a/contrib/libs/lzmasdk/Precomp.h
+++ b/contrib/libs/lzmasdk/Precomp.h
@@ -1,10 +1,10 @@
-/* Precomp.h -- StdAfx
-2013-11-12 : Igor Pavlov : Public domain */
-
-#ifndef __7Z_PRECOMP_H
-#define __7Z_PRECOMP_H
-
-#include "Compiler.h"
-/* #include "7zTypes.h" */
-
-#endif
+/* Precomp.h -- StdAfx
+2013-11-12 : Igor Pavlov : Public domain */
+
+#ifndef __7Z_PRECOMP_H
+#define __7Z_PRECOMP_H
+
+#include "Compiler.h"
+/* #include "7zTypes.h" */
+
+#endif
diff --git a/contrib/libs/lzmasdk/RotateDefs.h b/contrib/libs/lzmasdk/RotateDefs.h
index 8f01d1a6c5..6c790e791e 100644
--- a/contrib/libs/lzmasdk/RotateDefs.h
+++ b/contrib/libs/lzmasdk/RotateDefs.h
@@ -1,30 +1,30 @@
-/* RotateDefs.h -- Rotate functions
-2015-03-25 : Igor Pavlov : Public domain */
-
-#ifndef __ROTATE_DEFS_H
-#define __ROTATE_DEFS_H
-
-#ifdef _MSC_VER
-
-#include <stdlib.h>
-
-/* don't use _rotl with MINGW. It can insert slow call to function. */
-
-/* #if (_MSC_VER >= 1200) */
-#pragma intrinsic(_rotl)
-#pragma intrinsic(_rotr)
-/* #endif */
-
-#define rotlFixed(x, n) _rotl((x), (n))
-#define rotrFixed(x, n) _rotr((x), (n))
-
-#else
-
-/* new compilers can translate these macros to fast commands. */
-
-#define rotlFixed(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
-#define rotrFixed(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
-
-#endif
-
-#endif
+/* RotateDefs.h -- Rotate functions
+2015-03-25 : Igor Pavlov : Public domain */
+
+#ifndef __ROTATE_DEFS_H
+#define __ROTATE_DEFS_H
+
+#ifdef _MSC_VER
+
+#include <stdlib.h>
+
+/* don't use _rotl with MINGW. It can insert slow call to function. */
+
+/* #if (_MSC_VER >= 1200) */
+#pragma intrinsic(_rotl)
+#pragma intrinsic(_rotr)
+/* #endif */
+
+#define rotlFixed(x, n) _rotl((x), (n))
+#define rotrFixed(x, n) _rotr((x), (n))
+
+#else
+
+/* new compilers can translate these macros to fast commands. */
+
+#define rotlFixed(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
+#define rotrFixed(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
+
+#endif
+
+#endif
diff --git a/contrib/libs/lzmasdk/Sha256.c b/contrib/libs/lzmasdk/Sha256.c
index 04b688c6bd..90994e5abb 100644
--- a/contrib/libs/lzmasdk/Sha256.c
+++ b/contrib/libs/lzmasdk/Sha256.c
@@ -1,248 +1,248 @@
-/* Crypto/Sha256.c -- SHA-256 Hash
-2017-04-03 : Igor Pavlov : Public domain
-This code is based on public domain code from Wei Dai's Crypto++ library. */
-
-#include "Precomp.h"
-
-#include <string.h>
-
-#include "CpuArch.h"
-#include "RotateDefs.h"
-#include "Sha256.h"
-
-/* define it for speed optimization */
-#ifndef _SFX
-#define _SHA256_UNROLL
-#define _SHA256_UNROLL2
-#endif
-
-/* #define _SHA256_UNROLL2 */
-
-void Sha256_Init(CSha256 *p)
-{
- p->state[0] = 0x6a09e667;
- p->state[1] = 0xbb67ae85;
- p->state[2] = 0x3c6ef372;
- p->state[3] = 0xa54ff53a;
- p->state[4] = 0x510e527f;
- p->state[5] = 0x9b05688c;
- p->state[6] = 0x1f83d9ab;
- p->state[7] = 0x5be0cd19;
- p->count = 0;
-}
-
-#define S0(x) (rotrFixed(x, 2) ^ rotrFixed(x,13) ^ rotrFixed(x, 22))
-#define S1(x) (rotrFixed(x, 6) ^ rotrFixed(x,11) ^ rotrFixed(x, 25))
-#define s0(x) (rotrFixed(x, 7) ^ rotrFixed(x,18) ^ (x >> 3))
-#define s1(x) (rotrFixed(x,17) ^ rotrFixed(x,19) ^ (x >> 10))
-
-#define blk0(i) (W[i])
-#define blk2(i) (W[i] += s1(W[((i)-2)&15]) + W[((i)-7)&15] + s0(W[((i)-15)&15]))
-
-#define Ch(x,y,z) (z^(x&(y^z)))
-#define Maj(x,y,z) ((x&y)|(z&(x|y)))
-
-#ifdef _SHA256_UNROLL2
-
-#define R(a,b,c,d,e,f,g,h, i) \
- h += S1(e) + Ch(e,f,g) + K[(i)+(size_t)(j)] + (j ? blk2(i) : blk0(i)); \
- d += h; \
- h += S0(a) + Maj(a, b, c)
-
-#define RX_8(i) \
- R(a,b,c,d,e,f,g,h, i); \
- R(h,a,b,c,d,e,f,g, i+1); \
- R(g,h,a,b,c,d,e,f, i+2); \
- R(f,g,h,a,b,c,d,e, i+3); \
- R(e,f,g,h,a,b,c,d, i+4); \
- R(d,e,f,g,h,a,b,c, i+5); \
- R(c,d,e,f,g,h,a,b, i+6); \
- R(b,c,d,e,f,g,h,a, i+7)
-
-#define RX_16 RX_8(0); RX_8(8);
-
-#else
-
-#define a(i) T[(0-(i))&7]
-#define b(i) T[(1-(i))&7]
-#define c(i) T[(2-(i))&7]
-#define d(i) T[(3-(i))&7]
-#define e(i) T[(4-(i))&7]
-#define f(i) T[(5-(i))&7]
-#define g(i) T[(6-(i))&7]
-#define h(i) T[(7-(i))&7]
-
-#define R(i) \
- h(i) += S1(e(i)) + Ch(e(i),f(i),g(i)) + K[(i)+(size_t)(j)] + (j ? blk2(i) : blk0(i)); \
- d(i) += h(i); \
- h(i) += S0(a(i)) + Maj(a(i), b(i), c(i)) \
-
-#ifdef _SHA256_UNROLL
-
-#define RX_8(i) R(i+0); R(i+1); R(i+2); R(i+3); R(i+4); R(i+5); R(i+6); R(i+7);
-#define RX_16 RX_8(0); RX_8(8);
-
-#else
-
-#define RX_16 unsigned i; for (i = 0; i < 16; i++) { R(i); }
-
-#endif
-
-#endif
-
-static const UInt32 K[64] = {
- 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
- 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
- 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
- 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
- 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
- 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
- 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
- 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
- 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
- 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
- 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
- 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
- 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
- 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
- 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
- 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
-};
-
-static void Sha256_WriteByteBlock(CSha256 *p)
-{
- UInt32 W[16];
- unsigned j;
- UInt32 *state;
-
- #ifdef _SHA256_UNROLL2
- UInt32 a,b,c,d,e,f,g,h;
- #else
- UInt32 T[8];
- #endif
-
- for (j = 0; j < 16; j += 4)
- {
- const Byte *ccc = p->buffer + j * 4;
- W[j ] = GetBe32(ccc);
- W[j + 1] = GetBe32(ccc + 4);
- W[j + 2] = GetBe32(ccc + 8);
- W[j + 3] = GetBe32(ccc + 12);
- }
-
- state = p->state;
-
- #ifdef _SHA256_UNROLL2
- a = state[0];
- b = state[1];
- c = state[2];
- d = state[3];
- e = state[4];
- f = state[5];
- g = state[6];
- h = state[7];
- #else
- for (j = 0; j < 8; j++)
- T[j] = state[j];
- #endif
-
- for (j = 0; j < 64; j += 16)
- {
- RX_16
- }
-
- #ifdef _SHA256_UNROLL2
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
- state[4] += e;
- state[5] += f;
- state[6] += g;
- state[7] += h;
- #else
- for (j = 0; j < 8; j++)
- state[j] += T[j];
- #endif
-
- /* Wipe variables */
- /* memset(W, 0, sizeof(W)); */
- /* memset(T, 0, sizeof(T)); */
-}
-
-#undef S0
-#undef S1
-#undef s0
-#undef s1
-
-void Sha256_Update(CSha256 *p, const Byte *data, size_t size)
-{
- if (size == 0)
- return;
-
- {
- unsigned pos = (unsigned)p->count & 0x3F;
- unsigned num;
-
- p->count += size;
-
- num = 64 - pos;
- if (num > size)
- {
- memcpy(p->buffer + pos, data, size);
- return;
- }
-
- size -= num;
- memcpy(p->buffer + pos, data, num);
- data += num;
- }
-
- for (;;)
- {
- Sha256_WriteByteBlock(p);
- if (size < 64)
- break;
- size -= 64;
- memcpy(p->buffer, data, 64);
- data += 64;
- }
-
- if (size != 0)
- memcpy(p->buffer, data, size);
-}
-
-void Sha256_Final(CSha256 *p, Byte *digest)
-{
- unsigned pos = (unsigned)p->count & 0x3F;
- unsigned i;
-
- p->buffer[pos++] = 0x80;
-
- while (pos != (64 - 8))
- {
- pos &= 0x3F;
- if (pos == 0)
- Sha256_WriteByteBlock(p);
- p->buffer[pos++] = 0;
- }
-
- {
- UInt64 numBits = (p->count << 3);
- SetBe32(p->buffer + 64 - 8, (UInt32)(numBits >> 32));
- SetBe32(p->buffer + 64 - 4, (UInt32)(numBits));
- }
-
- Sha256_WriteByteBlock(p);
-
- for (i = 0; i < 8; i += 2)
- {
- UInt32 v0 = p->state[i];
- UInt32 v1 = p->state[i + 1];
- SetBe32(digest , v0);
- SetBe32(digest + 4, v1);
- digest += 8;
- }
-
- Sha256_Init(p);
-}
+/* Crypto/Sha256.c -- SHA-256 Hash
+2017-04-03 : Igor Pavlov : Public domain
+This code is based on public domain code from Wei Dai's Crypto++ library. */
+
+#include "Precomp.h"
+
+#include <string.h>
+
+#include "CpuArch.h"
+#include "RotateDefs.h"
+#include "Sha256.h"
+
+/* define it for speed optimization */
+#ifndef _SFX
+#define _SHA256_UNROLL
+#define _SHA256_UNROLL2
+#endif
+
+/* #define _SHA256_UNROLL2 */
+
+void Sha256_Init(CSha256 *p)
+{
+ p->state[0] = 0x6a09e667;
+ p->state[1] = 0xbb67ae85;
+ p->state[2] = 0x3c6ef372;
+ p->state[3] = 0xa54ff53a;
+ p->state[4] = 0x510e527f;
+ p->state[5] = 0x9b05688c;
+ p->state[6] = 0x1f83d9ab;
+ p->state[7] = 0x5be0cd19;
+ p->count = 0;
+}
+
+#define S0(x) (rotrFixed(x, 2) ^ rotrFixed(x,13) ^ rotrFixed(x, 22))
+#define S1(x) (rotrFixed(x, 6) ^ rotrFixed(x,11) ^ rotrFixed(x, 25))
+#define s0(x) (rotrFixed(x, 7) ^ rotrFixed(x,18) ^ (x >> 3))
+#define s1(x) (rotrFixed(x,17) ^ rotrFixed(x,19) ^ (x >> 10))
+
+#define blk0(i) (W[i])
+#define blk2(i) (W[i] += s1(W[((i)-2)&15]) + W[((i)-7)&15] + s0(W[((i)-15)&15]))
+
+#define Ch(x,y,z) (z^(x&(y^z)))
+#define Maj(x,y,z) ((x&y)|(z&(x|y)))
+
+#ifdef _SHA256_UNROLL2
+
+#define R(a,b,c,d,e,f,g,h, i) \
+ h += S1(e) + Ch(e,f,g) + K[(i)+(size_t)(j)] + (j ? blk2(i) : blk0(i)); \
+ d += h; \
+ h += S0(a) + Maj(a, b, c)
+
+#define RX_8(i) \
+ R(a,b,c,d,e,f,g,h, i); \
+ R(h,a,b,c,d,e,f,g, i+1); \
+ R(g,h,a,b,c,d,e,f, i+2); \
+ R(f,g,h,a,b,c,d,e, i+3); \
+ R(e,f,g,h,a,b,c,d, i+4); \
+ R(d,e,f,g,h,a,b,c, i+5); \
+ R(c,d,e,f,g,h,a,b, i+6); \
+ R(b,c,d,e,f,g,h,a, i+7)
+
+#define RX_16 RX_8(0); RX_8(8);
+
+#else
+
+#define a(i) T[(0-(i))&7]
+#define b(i) T[(1-(i))&7]
+#define c(i) T[(2-(i))&7]
+#define d(i) T[(3-(i))&7]
+#define e(i) T[(4-(i))&7]
+#define f(i) T[(5-(i))&7]
+#define g(i) T[(6-(i))&7]
+#define h(i) T[(7-(i))&7]
+
+#define R(i) \
+ h(i) += S1(e(i)) + Ch(e(i),f(i),g(i)) + K[(i)+(size_t)(j)] + (j ? blk2(i) : blk0(i)); \
+ d(i) += h(i); \
+ h(i) += S0(a(i)) + Maj(a(i), b(i), c(i)) \
+
+#ifdef _SHA256_UNROLL
+
+#define RX_8(i) R(i+0); R(i+1); R(i+2); R(i+3); R(i+4); R(i+5); R(i+6); R(i+7);
+#define RX_16 RX_8(0); RX_8(8);
+
+#else
+
+#define RX_16 unsigned i; for (i = 0; i < 16; i++) { R(i); }
+
+#endif
+
+#endif
+
+static const UInt32 K[64] = {
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
+ 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
+ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
+ 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
+ 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
+ 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
+ 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
+};
+
+static void Sha256_WriteByteBlock(CSha256 *p)
+{
+ UInt32 W[16];
+ unsigned j;
+ UInt32 *state;
+
+ #ifdef _SHA256_UNROLL2
+ UInt32 a,b,c,d,e,f,g,h;
+ #else
+ UInt32 T[8];
+ #endif
+
+ for (j = 0; j < 16; j += 4)
+ {
+ const Byte *ccc = p->buffer + j * 4;
+ W[j ] = GetBe32(ccc);
+ W[j + 1] = GetBe32(ccc + 4);
+ W[j + 2] = GetBe32(ccc + 8);
+ W[j + 3] = GetBe32(ccc + 12);
+ }
+
+ state = p->state;
+
+ #ifdef _SHA256_UNROLL2
+ a = state[0];
+ b = state[1];
+ c = state[2];
+ d = state[3];
+ e = state[4];
+ f = state[5];
+ g = state[6];
+ h = state[7];
+ #else
+ for (j = 0; j < 8; j++)
+ T[j] = state[j];
+ #endif
+
+ for (j = 0; j < 64; j += 16)
+ {
+ RX_16
+ }
+
+ #ifdef _SHA256_UNROLL2
+ state[0] += a;
+ state[1] += b;
+ state[2] += c;
+ state[3] += d;
+ state[4] += e;
+ state[5] += f;
+ state[6] += g;
+ state[7] += h;
+ #else
+ for (j = 0; j < 8; j++)
+ state[j] += T[j];
+ #endif
+
+ /* Wipe variables */
+ /* memset(W, 0, sizeof(W)); */
+ /* memset(T, 0, sizeof(T)); */
+}
+
+#undef S0
+#undef S1
+#undef s0
+#undef s1
+
+void Sha256_Update(CSha256 *p, const Byte *data, size_t size)
+{
+ if (size == 0)
+ return;
+
+ {
+ unsigned pos = (unsigned)p->count & 0x3F;
+ unsigned num;
+
+ p->count += size;
+
+ num = 64 - pos;
+ if (num > size)
+ {
+ memcpy(p->buffer + pos, data, size);
+ return;
+ }
+
+ size -= num;
+ memcpy(p->buffer + pos, data, num);
+ data += num;
+ }
+
+ for (;;)
+ {
+ Sha256_WriteByteBlock(p);
+ if (size < 64)
+ break;
+ size -= 64;
+ memcpy(p->buffer, data, 64);
+ data += 64;
+ }
+
+ if (size != 0)
+ memcpy(p->buffer, data, size);
+}
+
+void Sha256_Final(CSha256 *p, Byte *digest)
+{
+ unsigned pos = (unsigned)p->count & 0x3F;
+ unsigned i;
+
+ p->buffer[pos++] = 0x80;
+
+ while (pos != (64 - 8))
+ {
+ pos &= 0x3F;
+ if (pos == 0)
+ Sha256_WriteByteBlock(p);
+ p->buffer[pos++] = 0;
+ }
+
+ {
+ UInt64 numBits = (p->count << 3);
+ SetBe32(p->buffer + 64 - 8, (UInt32)(numBits >> 32));
+ SetBe32(p->buffer + 64 - 4, (UInt32)(numBits));
+ }
+
+ Sha256_WriteByteBlock(p);
+
+ for (i = 0; i < 8; i += 2)
+ {
+ UInt32 v0 = p->state[i];
+ UInt32 v1 = p->state[i + 1];
+ SetBe32(digest , v0);
+ SetBe32(digest + 4, v1);
+ digest += 8;
+ }
+
+ Sha256_Init(p);
+}
diff --git a/contrib/libs/lzmasdk/Sha256.h b/contrib/libs/lzmasdk/Sha256.h
index 3f455dbc0d..7f17ccf9c9 100644
--- a/contrib/libs/lzmasdk/Sha256.h
+++ b/contrib/libs/lzmasdk/Sha256.h
@@ -1,26 +1,26 @@
-/* Sha256.h -- SHA-256 Hash
-2013-01-18 : Igor Pavlov : Public domain */
-
-#ifndef __CRYPTO_SHA256_H
-#define __CRYPTO_SHA256_H
-
-#include "7zTypes.h"
-
-EXTERN_C_BEGIN
-
-#define SHA256_DIGEST_SIZE 32
-
-typedef struct
-{
- UInt32 state[8];
- UInt64 count;
- Byte buffer[64];
-} CSha256;
-
-void Sha256_Init(CSha256 *p);
-void Sha256_Update(CSha256 *p, const Byte *data, size_t size);
-void Sha256_Final(CSha256 *p, Byte *digest);
-
-EXTERN_C_END
-
-#endif
+/* Sha256.h -- SHA-256 Hash
+2013-01-18 : Igor Pavlov : Public domain */
+
+#ifndef __CRYPTO_SHA256_H
+#define __CRYPTO_SHA256_H
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+#define SHA256_DIGEST_SIZE 32
+
+typedef struct
+{
+ UInt32 state[8];
+ UInt64 count;
+ Byte buffer[64];
+} CSha256;
+
+void Sha256_Init(CSha256 *p);
+void Sha256_Update(CSha256 *p, const Byte *data, size_t size);
+void Sha256_Final(CSha256 *p, Byte *digest);
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/lzmasdk/Threads.h b/contrib/libs/lzmasdk/Threads.h
index e53ace4356..f913241aea 100644
--- a/contrib/libs/lzmasdk/Threads.h
+++ b/contrib/libs/lzmasdk/Threads.h
@@ -1,68 +1,68 @@
-/* Threads.h -- multithreading library
-2017-06-18 : Igor Pavlov : Public domain */
-
-#ifndef __7Z_THREADS_H
-#define __7Z_THREADS_H
-
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
-#include "7zTypes.h"
-
-EXTERN_C_BEGIN
-
-WRes HandlePtr_Close(HANDLE *h);
-WRes Handle_WaitObject(HANDLE h);
-
-typedef HANDLE CThread;
-#define Thread_Construct(p) *(p) = NULL
-#define Thread_WasCreated(p) (*(p) != NULL)
-#define Thread_Close(p) HandlePtr_Close(p)
-#define Thread_Wait(p) Handle_WaitObject(*(p))
-
-typedef
-#ifdef UNDER_CE
- DWORD
-#else
- unsigned
-#endif
- THREAD_FUNC_RET_TYPE;
-
-#define THREAD_FUNC_CALL_TYPE MY_STD_CALL
-#define THREAD_FUNC_DECL THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE
-typedef THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE * THREAD_FUNC_TYPE)(void *);
-WRes Thread_Create(CThread *p, THREAD_FUNC_TYPE func, LPVOID param);
-
-typedef HANDLE CEvent;
-typedef CEvent CAutoResetEvent;
-typedef CEvent CManualResetEvent;
-#define Event_Construct(p) *(p) = NULL
-#define Event_IsCreated(p) (*(p) != NULL)
-#define Event_Close(p) HandlePtr_Close(p)
-#define Event_Wait(p) Handle_WaitObject(*(p))
-WRes Event_Set(CEvent *p);
-WRes Event_Reset(CEvent *p);
-WRes ManualResetEvent_Create(CManualResetEvent *p, int signaled);
-WRes ManualResetEvent_CreateNotSignaled(CManualResetEvent *p);
-WRes AutoResetEvent_Create(CAutoResetEvent *p, int signaled);
-WRes AutoResetEvent_CreateNotSignaled(CAutoResetEvent *p);
-
-typedef HANDLE CSemaphore;
-#define Semaphore_Construct(p) *(p) = NULL
-#define Semaphore_IsCreated(p) (*(p) != NULL)
-#define Semaphore_Close(p) HandlePtr_Close(p)
-#define Semaphore_Wait(p) Handle_WaitObject(*(p))
-WRes Semaphore_Create(CSemaphore *p, UInt32 initCount, UInt32 maxCount);
-WRes Semaphore_ReleaseN(CSemaphore *p, UInt32 num);
-WRes Semaphore_Release1(CSemaphore *p);
-
-typedef CRITICAL_SECTION CCriticalSection;
-WRes CriticalSection_Init(CCriticalSection *p);
-#define CriticalSection_Delete(p) DeleteCriticalSection(p)
-#define CriticalSection_Enter(p) EnterCriticalSection(p)
-#define CriticalSection_Leave(p) LeaveCriticalSection(p)
-
-EXTERN_C_END
-
-#endif
+/* Threads.h -- multithreading library
+2017-06-18 : Igor Pavlov : Public domain */
+
+#ifndef __7Z_THREADS_H
+#define __7Z_THREADS_H
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+#include "7zTypes.h"
+
+EXTERN_C_BEGIN
+
+WRes HandlePtr_Close(HANDLE *h);
+WRes Handle_WaitObject(HANDLE h);
+
+typedef HANDLE CThread;
+#define Thread_Construct(p) *(p) = NULL
+#define Thread_WasCreated(p) (*(p) != NULL)
+#define Thread_Close(p) HandlePtr_Close(p)
+#define Thread_Wait(p) Handle_WaitObject(*(p))
+
+typedef
+#ifdef UNDER_CE
+ DWORD
+#else
+ unsigned
+#endif
+ THREAD_FUNC_RET_TYPE;
+
+#define THREAD_FUNC_CALL_TYPE MY_STD_CALL
+#define THREAD_FUNC_DECL THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE
+typedef THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE * THREAD_FUNC_TYPE)(void *);
+WRes Thread_Create(CThread *p, THREAD_FUNC_TYPE func, LPVOID param);
+
+typedef HANDLE CEvent;
+typedef CEvent CAutoResetEvent;
+typedef CEvent CManualResetEvent;
+#define Event_Construct(p) *(p) = NULL
+#define Event_IsCreated(p) (*(p) != NULL)
+#define Event_Close(p) HandlePtr_Close(p)
+#define Event_Wait(p) Handle_WaitObject(*(p))
+WRes Event_Set(CEvent *p);
+WRes Event_Reset(CEvent *p);
+WRes ManualResetEvent_Create(CManualResetEvent *p, int signaled);
+WRes ManualResetEvent_CreateNotSignaled(CManualResetEvent *p);
+WRes AutoResetEvent_Create(CAutoResetEvent *p, int signaled);
+WRes AutoResetEvent_CreateNotSignaled(CAutoResetEvent *p);
+
+typedef HANDLE CSemaphore;
+#define Semaphore_Construct(p) *(p) = NULL
+#define Semaphore_IsCreated(p) (*(p) != NULL)
+#define Semaphore_Close(p) HandlePtr_Close(p)
+#define Semaphore_Wait(p) Handle_WaitObject(*(p))
+WRes Semaphore_Create(CSemaphore *p, UInt32 initCount, UInt32 maxCount);
+WRes Semaphore_ReleaseN(CSemaphore *p, UInt32 num);
+WRes Semaphore_Release1(CSemaphore *p);
+
+typedef CRITICAL_SECTION CCriticalSection;
+WRes CriticalSection_Init(CCriticalSection *p);
+#define CriticalSection_Delete(p) DeleteCriticalSection(p)
+#define CriticalSection_Enter(p) EnterCriticalSection(p)
+#define CriticalSection_Leave(p) LeaveCriticalSection(p)
+
+EXTERN_C_END
+
+#endif
diff --git a/contrib/libs/openssl/apps/progs-win.h b/contrib/libs/openssl/apps/progs-win.h
index 9b3d270e20..f9c28b0969 100644
--- a/contrib/libs/openssl/apps/progs-win.h
+++ b/contrib/libs/openssl/apps/progs-win.h
@@ -1,507 +1,507 @@
-/*
- * WARNING: do not edit!
- * Generated by apps/progs.pl
- *
- * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the OpenSSL license (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-typedef enum FUNC_TYPE {
- FT_none, FT_general, FT_md, FT_cipher, FT_pkey,
- FT_md_alg, FT_cipher_alg
-} FUNC_TYPE;
-
-typedef struct function_st {
- FUNC_TYPE type;
- const char *name;
- int (*func)(int argc, char *argv[]);
- const OPTIONS *help;
-} FUNCTION;
-
-DEFINE_LHASH_OF(FUNCTION);
-
-extern int asn1parse_main(int argc, char *argv[]);
-extern int ca_main(int argc, char *argv[]);
-extern int ciphers_main(int argc, char *argv[]);
-extern int cms_main(int argc, char *argv[]);
-extern int crl_main(int argc, char *argv[]);
-extern int crl2pkcs7_main(int argc, char *argv[]);
-extern int dgst_main(int argc, char *argv[]);
-extern int dhparam_main(int argc, char *argv[]);
-extern int dsa_main(int argc, char *argv[]);
-extern int dsaparam_main(int argc, char *argv[]);
-extern int ec_main(int argc, char *argv[]);
-extern int ecparam_main(int argc, char *argv[]);
-extern int enc_main(int argc, char *argv[]);
-extern int engine_main(int argc, char *argv[]);
-extern int errstr_main(int argc, char *argv[]);
-extern int gendsa_main(int argc, char *argv[]);
-extern int genpkey_main(int argc, char *argv[]);
-extern int genrsa_main(int argc, char *argv[]);
-extern int help_main(int argc, char *argv[]);
-extern int list_main(int argc, char *argv[]);
-extern int nseq_main(int argc, char *argv[]);
-extern int ocsp_main(int argc, char *argv[]);
-extern int passwd_main(int argc, char *argv[]);
-extern int pkcs12_main(int argc, char *argv[]);
-extern int pkcs7_main(int argc, char *argv[]);
-extern int pkcs8_main(int argc, char *argv[]);
-extern int pkey_main(int argc, char *argv[]);
-extern int pkeyparam_main(int argc, char *argv[]);
-extern int pkeyutl_main(int argc, char *argv[]);
-extern int prime_main(int argc, char *argv[]);
-extern int rand_main(int argc, char *argv[]);
-extern int rehash_main(int argc, char *argv[]);
-extern int req_main(int argc, char *argv[]);
-extern int rsa_main(int argc, char *argv[]);
-extern int rsautl_main(int argc, char *argv[]);
-extern int s_client_main(int argc, char *argv[]);
-extern int s_server_main(int argc, char *argv[]);
-extern int s_time_main(int argc, char *argv[]);
-extern int sess_id_main(int argc, char *argv[]);
-extern int smime_main(int argc, char *argv[]);
-extern int speed_main(int argc, char *argv[]);
-extern int spkac_main(int argc, char *argv[]);
-extern int srp_main(int argc, char *argv[]);
-extern int storeutl_main(int argc, char *argv[]);
-extern int ts_main(int argc, char *argv[]);
-extern int verify_main(int argc, char *argv[]);
-extern int version_main(int argc, char *argv[]);
-extern int x509_main(int argc, char *argv[]);
-
-extern const OPTIONS asn1parse_options[];
-extern const OPTIONS ca_options[];
-extern const OPTIONS ciphers_options[];
-extern const OPTIONS cms_options[];
-extern const OPTIONS crl_options[];
-extern const OPTIONS crl2pkcs7_options[];
-extern const OPTIONS dgst_options[];
-extern const OPTIONS dhparam_options[];
-extern const OPTIONS dsa_options[];
-extern const OPTIONS dsaparam_options[];
-extern const OPTIONS ec_options[];
-extern const OPTIONS ecparam_options[];
-extern const OPTIONS enc_options[];
-extern const OPTIONS engine_options[];
-extern const OPTIONS errstr_options[];
-extern const OPTIONS gendsa_options[];
-extern const OPTIONS genpkey_options[];
-extern const OPTIONS genrsa_options[];
-extern const OPTIONS help_options[];
-extern const OPTIONS list_options[];
-extern const OPTIONS nseq_options[];
-extern const OPTIONS ocsp_options[];
-extern const OPTIONS passwd_options[];
-extern const OPTIONS pkcs12_options[];
-extern const OPTIONS pkcs7_options[];
-extern const OPTIONS pkcs8_options[];
-extern const OPTIONS pkey_options[];
-extern const OPTIONS pkeyparam_options[];
-extern const OPTIONS pkeyutl_options[];
-extern const OPTIONS prime_options[];
-extern const OPTIONS rand_options[];
-extern const OPTIONS rehash_options[];
-extern const OPTIONS req_options[];
-extern const OPTIONS rsa_options[];
-extern const OPTIONS rsautl_options[];
-extern const OPTIONS s_client_options[];
-extern const OPTIONS s_server_options[];
-extern const OPTIONS s_time_options[];
-extern const OPTIONS sess_id_options[];
-extern const OPTIONS smime_options[];
-extern const OPTIONS speed_options[];
-extern const OPTIONS spkac_options[];
-extern const OPTIONS srp_options[];
-extern const OPTIONS storeutl_options[];
-extern const OPTIONS ts_options[];
-extern const OPTIONS verify_options[];
-extern const OPTIONS version_options[];
-extern const OPTIONS x509_options[];
-
-#ifdef INCLUDE_FUNCTION_TABLE
-static FUNCTION functions[] = {
- {FT_general, "asn1parse", asn1parse_main, asn1parse_options},
- {FT_general, "ca", ca_main, ca_options},
-#ifndef OPENSSL_NO_SOCK
- {FT_general, "ciphers", ciphers_main, ciphers_options},
-#endif
-#ifndef OPENSSL_NO_CMS
- {FT_general, "cms", cms_main, cms_options},
-#endif
- {FT_general, "crl", crl_main, crl_options},
- {FT_general, "crl2pkcs7", crl2pkcs7_main, crl2pkcs7_options},
- {FT_general, "dgst", dgst_main, dgst_options},
-#ifndef OPENSSL_NO_DH
- {FT_general, "dhparam", dhparam_main, dhparam_options},
-#endif
-#ifndef OPENSSL_NO_DSA
- {FT_general, "dsa", dsa_main, dsa_options},
-#endif
-#ifndef OPENSSL_NO_DSA
- {FT_general, "dsaparam", dsaparam_main, dsaparam_options},
-#endif
-#ifndef OPENSSL_NO_EC
- {FT_general, "ec", ec_main, ec_options},
-#endif
-#ifndef OPENSSL_NO_EC
- {FT_general, "ecparam", ecparam_main, ecparam_options},
-#endif
- {FT_general, "enc", enc_main, enc_options},
-#ifndef OPENSSL_NO_ENGINE
- {FT_general, "engine", engine_main, engine_options},
-#endif
- {FT_general, "errstr", errstr_main, errstr_options},
-#ifndef OPENSSL_NO_DSA
- {FT_general, "gendsa", gendsa_main, gendsa_options},
-#endif
- {FT_general, "genpkey", genpkey_main, genpkey_options},
-#ifndef OPENSSL_NO_RSA
- {FT_general, "genrsa", genrsa_main, genrsa_options},
-#endif
- {FT_general, "help", help_main, help_options},
- {FT_general, "list", list_main, list_options},
- {FT_general, "nseq", nseq_main, nseq_options},
-#ifndef OPENSSL_NO_OCSP
- {FT_general, "ocsp", ocsp_main, ocsp_options},
-#endif
- {FT_general, "passwd", passwd_main, passwd_options},
-#ifndef OPENSSL_NO_DES
- {FT_general, "pkcs12", pkcs12_main, pkcs12_options},
-#endif
- {FT_general, "pkcs7", pkcs7_main, pkcs7_options},
- {FT_general, "pkcs8", pkcs8_main, pkcs8_options},
- {FT_general, "pkey", pkey_main, pkey_options},
- {FT_general, "pkeyparam", pkeyparam_main, pkeyparam_options},
- {FT_general, "pkeyutl", pkeyutl_main, pkeyutl_options},
- {FT_general, "prime", prime_main, prime_options},
- {FT_general, "rand", rand_main, rand_options},
- {FT_general, "rehash", rehash_main, rehash_options},
- {FT_general, "req", req_main, req_options},
- {FT_general, "rsa", rsa_main, rsa_options},
-#ifndef OPENSSL_NO_RSA
- {FT_general, "rsautl", rsautl_main, rsautl_options},
-#endif
-#ifndef OPENSSL_NO_SOCK
- {FT_general, "s_client", s_client_main, s_client_options},
-#endif
-#ifndef OPENSSL_NO_SOCK
- {FT_general, "s_server", s_server_main, s_server_options},
-#endif
-#ifndef OPENSSL_NO_SOCK
- {FT_general, "s_time", s_time_main, s_time_options},
-#endif
- {FT_general, "sess_id", sess_id_main, sess_id_options},
- {FT_general, "smime", smime_main, smime_options},
- {FT_general, "speed", speed_main, speed_options},
- {FT_general, "spkac", spkac_main, spkac_options},
-#ifndef OPENSSL_NO_SRP
- {FT_general, "srp", srp_main, srp_options},
-#endif
- {FT_general, "storeutl", storeutl_main, storeutl_options},
-#ifndef OPENSSL_NO_TS
- {FT_general, "ts", ts_main, ts_options},
-#endif
- {FT_general, "verify", verify_main, verify_options},
- {FT_general, "version", version_main, version_options},
- {FT_general, "x509", x509_main, x509_options},
-#ifndef OPENSSL_NO_MD2
- {FT_md, "md2", dgst_main},
-#endif
-#ifndef OPENSSL_NO_MD4
- {FT_md, "md4", dgst_main},
-#endif
- {FT_md, "md5", dgst_main},
-#ifndef OPENSSL_NO_GOST
- {FT_md, "gost", dgst_main},
-#endif
- {FT_md, "sha1", dgst_main},
- {FT_md, "sha224", dgst_main},
- {FT_md, "sha256", dgst_main},
- {FT_md, "sha384", dgst_main},
- {FT_md, "sha512", dgst_main},
- {FT_md, "sha512-224", dgst_main},
- {FT_md, "sha512-256", dgst_main},
- {FT_md, "sha3-224", dgst_main},
- {FT_md, "sha3-256", dgst_main},
- {FT_md, "sha3-384", dgst_main},
- {FT_md, "sha3-512", dgst_main},
- {FT_md, "shake128", dgst_main},
- {FT_md, "shake256", dgst_main},
-#ifndef OPENSSL_NO_MDC2
- {FT_md, "mdc2", dgst_main},
-#endif
-#ifndef OPENSSL_NO_RMD160
- {FT_md, "rmd160", dgst_main},
-#endif
-#ifndef OPENSSL_NO_BLAKE2
- {FT_md, "blake2b512", dgst_main},
-#endif
-#ifndef OPENSSL_NO_BLAKE2
- {FT_md, "blake2s256", dgst_main},
-#endif
-#ifndef OPENSSL_NO_SM3
- {FT_md, "sm3", dgst_main},
-#endif
- {FT_cipher, "aes-128-cbc", enc_main, enc_options},
- {FT_cipher, "aes-128-ecb", enc_main, enc_options},
- {FT_cipher, "aes-192-cbc", enc_main, enc_options},
- {FT_cipher, "aes-192-ecb", enc_main, enc_options},
- {FT_cipher, "aes-256-cbc", enc_main, enc_options},
- {FT_cipher, "aes-256-ecb", enc_main, enc_options},
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-128-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-128-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-128-ctr", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-128-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-128-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-128-cfb1", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-128-cfb8", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-192-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-192-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-192-ctr", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-192-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-192-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-192-cfb1", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-192-cfb8", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-256-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-256-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-256-ctr", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-256-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-256-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-256-cfb1", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_ARIA
- {FT_cipher, "aria-256-cfb8", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAMELLIA
- {FT_cipher, "camellia-128-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAMELLIA
- {FT_cipher, "camellia-128-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAMELLIA
- {FT_cipher, "camellia-192-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAMELLIA
- {FT_cipher, "camellia-192-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAMELLIA
- {FT_cipher, "camellia-256-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAMELLIA
- {FT_cipher, "camellia-256-ecb", enc_main, enc_options},
-#endif
- {FT_cipher, "base64", enc_main, enc_options},
-#ifdef ZLIB
- {FT_cipher, "zlib", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des3", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "desx", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_IDEA
- {FT_cipher, "idea", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_SEED
- {FT_cipher, "seed", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC4
- {FT_cipher, "rc4", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC4
- {FT_cipher, "rc4-40", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC2
- {FT_cipher, "rc2", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_BF
- {FT_cipher, "bf", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAST
- {FT_cipher, "cast", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC5
- {FT_cipher, "rc5", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-ede", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-ede3", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-ede-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-ede3-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-ede-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-ede3-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-ede-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_DES
- {FT_cipher, "des-ede3-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_IDEA
- {FT_cipher, "idea-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_IDEA
- {FT_cipher, "idea-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_IDEA
- {FT_cipher, "idea-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_IDEA
- {FT_cipher, "idea-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_SEED
- {FT_cipher, "seed-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_SEED
- {FT_cipher, "seed-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_SEED
- {FT_cipher, "seed-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_SEED
- {FT_cipher, "seed-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC2
- {FT_cipher, "rc2-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC2
- {FT_cipher, "rc2-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC2
- {FT_cipher, "rc2-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC2
- {FT_cipher, "rc2-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC2
- {FT_cipher, "rc2-64-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC2
- {FT_cipher, "rc2-40-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_BF
- {FT_cipher, "bf-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_BF
- {FT_cipher, "bf-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_BF
- {FT_cipher, "bf-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_BF
- {FT_cipher, "bf-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAST
- {FT_cipher, "cast5-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAST
- {FT_cipher, "cast5-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAST
- {FT_cipher, "cast5-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAST
- {FT_cipher, "cast5-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_CAST
- {FT_cipher, "cast-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC5
- {FT_cipher, "rc5-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC5
- {FT_cipher, "rc5-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC5
- {FT_cipher, "rc5-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_RC5
- {FT_cipher, "rc5-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_SM4
- {FT_cipher, "sm4-cbc", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_SM4
- {FT_cipher, "sm4-ecb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_SM4
- {FT_cipher, "sm4-cfb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_SM4
- {FT_cipher, "sm4-ofb", enc_main, enc_options},
-#endif
-#ifndef OPENSSL_NO_SM4
- {FT_cipher, "sm4-ctr", enc_main, enc_options},
-#endif
- {0, NULL, NULL}
-};
-#endif
+/*
+ * WARNING: do not edit!
+ * Generated by apps/progs.pl
+ *
+ * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+typedef enum FUNC_TYPE {
+ FT_none, FT_general, FT_md, FT_cipher, FT_pkey,
+ FT_md_alg, FT_cipher_alg
+} FUNC_TYPE;
+
+typedef struct function_st {
+ FUNC_TYPE type;
+ const char *name;
+ int (*func)(int argc, char *argv[]);
+ const OPTIONS *help;
+} FUNCTION;
+
+DEFINE_LHASH_OF(FUNCTION);
+
+extern int asn1parse_main(int argc, char *argv[]);
+extern int ca_main(int argc, char *argv[]);
+extern int ciphers_main(int argc, char *argv[]);
+extern int cms_main(int argc, char *argv[]);
+extern int crl_main(int argc, char *argv[]);
+extern int crl2pkcs7_main(int argc, char *argv[]);
+extern int dgst_main(int argc, char *argv[]);
+extern int dhparam_main(int argc, char *argv[]);
+extern int dsa_main(int argc, char *argv[]);
+extern int dsaparam_main(int argc, char *argv[]);
+extern int ec_main(int argc, char *argv[]);
+extern int ecparam_main(int argc, char *argv[]);
+extern int enc_main(int argc, char *argv[]);
+extern int engine_main(int argc, char *argv[]);
+extern int errstr_main(int argc, char *argv[]);
+extern int gendsa_main(int argc, char *argv[]);
+extern int genpkey_main(int argc, char *argv[]);
+extern int genrsa_main(int argc, char *argv[]);
+extern int help_main(int argc, char *argv[]);
+extern int list_main(int argc, char *argv[]);
+extern int nseq_main(int argc, char *argv[]);
+extern int ocsp_main(int argc, char *argv[]);
+extern int passwd_main(int argc, char *argv[]);
+extern int pkcs12_main(int argc, char *argv[]);
+extern int pkcs7_main(int argc, char *argv[]);
+extern int pkcs8_main(int argc, char *argv[]);
+extern int pkey_main(int argc, char *argv[]);
+extern int pkeyparam_main(int argc, char *argv[]);
+extern int pkeyutl_main(int argc, char *argv[]);
+extern int prime_main(int argc, char *argv[]);
+extern int rand_main(int argc, char *argv[]);
+extern int rehash_main(int argc, char *argv[]);
+extern int req_main(int argc, char *argv[]);
+extern int rsa_main(int argc, char *argv[]);
+extern int rsautl_main(int argc, char *argv[]);
+extern int s_client_main(int argc, char *argv[]);
+extern int s_server_main(int argc, char *argv[]);
+extern int s_time_main(int argc, char *argv[]);
+extern int sess_id_main(int argc, char *argv[]);
+extern int smime_main(int argc, char *argv[]);
+extern int speed_main(int argc, char *argv[]);
+extern int spkac_main(int argc, char *argv[]);
+extern int srp_main(int argc, char *argv[]);
+extern int storeutl_main(int argc, char *argv[]);
+extern int ts_main(int argc, char *argv[]);
+extern int verify_main(int argc, char *argv[]);
+extern int version_main(int argc, char *argv[]);
+extern int x509_main(int argc, char *argv[]);
+
+extern const OPTIONS asn1parse_options[];
+extern const OPTIONS ca_options[];
+extern const OPTIONS ciphers_options[];
+extern const OPTIONS cms_options[];
+extern const OPTIONS crl_options[];
+extern const OPTIONS crl2pkcs7_options[];
+extern const OPTIONS dgst_options[];
+extern const OPTIONS dhparam_options[];
+extern const OPTIONS dsa_options[];
+extern const OPTIONS dsaparam_options[];
+extern const OPTIONS ec_options[];
+extern const OPTIONS ecparam_options[];
+extern const OPTIONS enc_options[];
+extern const OPTIONS engine_options[];
+extern const OPTIONS errstr_options[];
+extern const OPTIONS gendsa_options[];
+extern const OPTIONS genpkey_options[];
+extern const OPTIONS genrsa_options[];
+extern const OPTIONS help_options[];
+extern const OPTIONS list_options[];
+extern const OPTIONS nseq_options[];
+extern const OPTIONS ocsp_options[];
+extern const OPTIONS passwd_options[];
+extern const OPTIONS pkcs12_options[];
+extern const OPTIONS pkcs7_options[];
+extern const OPTIONS pkcs8_options[];
+extern const OPTIONS pkey_options[];
+extern const OPTIONS pkeyparam_options[];
+extern const OPTIONS pkeyutl_options[];
+extern const OPTIONS prime_options[];
+extern const OPTIONS rand_options[];
+extern const OPTIONS rehash_options[];
+extern const OPTIONS req_options[];
+extern const OPTIONS rsa_options[];
+extern const OPTIONS rsautl_options[];
+extern const OPTIONS s_client_options[];
+extern const OPTIONS s_server_options[];
+extern const OPTIONS s_time_options[];
+extern const OPTIONS sess_id_options[];
+extern const OPTIONS smime_options[];
+extern const OPTIONS speed_options[];
+extern const OPTIONS spkac_options[];
+extern const OPTIONS srp_options[];
+extern const OPTIONS storeutl_options[];
+extern const OPTIONS ts_options[];
+extern const OPTIONS verify_options[];
+extern const OPTIONS version_options[];
+extern const OPTIONS x509_options[];
+
+#ifdef INCLUDE_FUNCTION_TABLE
+static FUNCTION functions[] = {
+ {FT_general, "asn1parse", asn1parse_main, asn1parse_options},
+ {FT_general, "ca", ca_main, ca_options},
+#ifndef OPENSSL_NO_SOCK
+ {FT_general, "ciphers", ciphers_main, ciphers_options},
+#endif
+#ifndef OPENSSL_NO_CMS
+ {FT_general, "cms", cms_main, cms_options},
+#endif
+ {FT_general, "crl", crl_main, crl_options},
+ {FT_general, "crl2pkcs7", crl2pkcs7_main, crl2pkcs7_options},
+ {FT_general, "dgst", dgst_main, dgst_options},
+#ifndef OPENSSL_NO_DH
+ {FT_general, "dhparam", dhparam_main, dhparam_options},
+#endif
+#ifndef OPENSSL_NO_DSA
+ {FT_general, "dsa", dsa_main, dsa_options},
+#endif
+#ifndef OPENSSL_NO_DSA
+ {FT_general, "dsaparam", dsaparam_main, dsaparam_options},
+#endif
+#ifndef OPENSSL_NO_EC
+ {FT_general, "ec", ec_main, ec_options},
+#endif
+#ifndef OPENSSL_NO_EC
+ {FT_general, "ecparam", ecparam_main, ecparam_options},
+#endif
+ {FT_general, "enc", enc_main, enc_options},
+#ifndef OPENSSL_NO_ENGINE
+ {FT_general, "engine", engine_main, engine_options},
+#endif
+ {FT_general, "errstr", errstr_main, errstr_options},
+#ifndef OPENSSL_NO_DSA
+ {FT_general, "gendsa", gendsa_main, gendsa_options},
+#endif
+ {FT_general, "genpkey", genpkey_main, genpkey_options},
+#ifndef OPENSSL_NO_RSA
+ {FT_general, "genrsa", genrsa_main, genrsa_options},
+#endif
+ {FT_general, "help", help_main, help_options},
+ {FT_general, "list", list_main, list_options},
+ {FT_general, "nseq", nseq_main, nseq_options},
+#ifndef OPENSSL_NO_OCSP
+ {FT_general, "ocsp", ocsp_main, ocsp_options},
+#endif
+ {FT_general, "passwd", passwd_main, passwd_options},
+#ifndef OPENSSL_NO_DES
+ {FT_general, "pkcs12", pkcs12_main, pkcs12_options},
+#endif
+ {FT_general, "pkcs7", pkcs7_main, pkcs7_options},
+ {FT_general, "pkcs8", pkcs8_main, pkcs8_options},
+ {FT_general, "pkey", pkey_main, pkey_options},
+ {FT_general, "pkeyparam", pkeyparam_main, pkeyparam_options},
+ {FT_general, "pkeyutl", pkeyutl_main, pkeyutl_options},
+ {FT_general, "prime", prime_main, prime_options},
+ {FT_general, "rand", rand_main, rand_options},
+ {FT_general, "rehash", rehash_main, rehash_options},
+ {FT_general, "req", req_main, req_options},
+ {FT_general, "rsa", rsa_main, rsa_options},
+#ifndef OPENSSL_NO_RSA
+ {FT_general, "rsautl", rsautl_main, rsautl_options},
+#endif
+#ifndef OPENSSL_NO_SOCK
+ {FT_general, "s_client", s_client_main, s_client_options},
+#endif
+#ifndef OPENSSL_NO_SOCK
+ {FT_general, "s_server", s_server_main, s_server_options},
+#endif
+#ifndef OPENSSL_NO_SOCK
+ {FT_general, "s_time", s_time_main, s_time_options},
+#endif
+ {FT_general, "sess_id", sess_id_main, sess_id_options},
+ {FT_general, "smime", smime_main, smime_options},
+ {FT_general, "speed", speed_main, speed_options},
+ {FT_general, "spkac", spkac_main, spkac_options},
+#ifndef OPENSSL_NO_SRP
+ {FT_general, "srp", srp_main, srp_options},
+#endif
+ {FT_general, "storeutl", storeutl_main, storeutl_options},
+#ifndef OPENSSL_NO_TS
+ {FT_general, "ts", ts_main, ts_options},
+#endif
+ {FT_general, "verify", verify_main, verify_options},
+ {FT_general, "version", version_main, version_options},
+ {FT_general, "x509", x509_main, x509_options},
+#ifndef OPENSSL_NO_MD2
+ {FT_md, "md2", dgst_main},
+#endif
+#ifndef OPENSSL_NO_MD4
+ {FT_md, "md4", dgst_main},
+#endif
+ {FT_md, "md5", dgst_main},
+#ifndef OPENSSL_NO_GOST
+ {FT_md, "gost", dgst_main},
+#endif
+ {FT_md, "sha1", dgst_main},
+ {FT_md, "sha224", dgst_main},
+ {FT_md, "sha256", dgst_main},
+ {FT_md, "sha384", dgst_main},
+ {FT_md, "sha512", dgst_main},
+ {FT_md, "sha512-224", dgst_main},
+ {FT_md, "sha512-256", dgst_main},
+ {FT_md, "sha3-224", dgst_main},
+ {FT_md, "sha3-256", dgst_main},
+ {FT_md, "sha3-384", dgst_main},
+ {FT_md, "sha3-512", dgst_main},
+ {FT_md, "shake128", dgst_main},
+ {FT_md, "shake256", dgst_main},
+#ifndef OPENSSL_NO_MDC2
+ {FT_md, "mdc2", dgst_main},
+#endif
+#ifndef OPENSSL_NO_RMD160
+ {FT_md, "rmd160", dgst_main},
+#endif
+#ifndef OPENSSL_NO_BLAKE2
+ {FT_md, "blake2b512", dgst_main},
+#endif
+#ifndef OPENSSL_NO_BLAKE2
+ {FT_md, "blake2s256", dgst_main},
+#endif
+#ifndef OPENSSL_NO_SM3
+ {FT_md, "sm3", dgst_main},
+#endif
+ {FT_cipher, "aes-128-cbc", enc_main, enc_options},
+ {FT_cipher, "aes-128-ecb", enc_main, enc_options},
+ {FT_cipher, "aes-192-cbc", enc_main, enc_options},
+ {FT_cipher, "aes-192-ecb", enc_main, enc_options},
+ {FT_cipher, "aes-256-cbc", enc_main, enc_options},
+ {FT_cipher, "aes-256-ecb", enc_main, enc_options},
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-128-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-128-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-128-ctr", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-128-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-128-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-128-cfb1", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-128-cfb8", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-192-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-192-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-192-ctr", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-192-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-192-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-192-cfb1", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-192-cfb8", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-256-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-256-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-256-ctr", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-256-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-256-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-256-cfb1", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_ARIA
+ {FT_cipher, "aria-256-cfb8", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAMELLIA
+ {FT_cipher, "camellia-128-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAMELLIA
+ {FT_cipher, "camellia-128-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAMELLIA
+ {FT_cipher, "camellia-192-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAMELLIA
+ {FT_cipher, "camellia-192-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAMELLIA
+ {FT_cipher, "camellia-256-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAMELLIA
+ {FT_cipher, "camellia-256-ecb", enc_main, enc_options},
+#endif
+ {FT_cipher, "base64", enc_main, enc_options},
+#ifdef ZLIB
+ {FT_cipher, "zlib", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des3", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "desx", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_IDEA
+ {FT_cipher, "idea", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_SEED
+ {FT_cipher, "seed", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC4
+ {FT_cipher, "rc4", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC4
+ {FT_cipher, "rc4-40", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC2
+ {FT_cipher, "rc2", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_BF
+ {FT_cipher, "bf", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAST
+ {FT_cipher, "cast", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC5
+ {FT_cipher, "rc5", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-ede", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-ede3", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-ede-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-ede3-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-ede-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-ede3-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-ede-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_DES
+ {FT_cipher, "des-ede3-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_IDEA
+ {FT_cipher, "idea-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_IDEA
+ {FT_cipher, "idea-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_IDEA
+ {FT_cipher, "idea-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_IDEA
+ {FT_cipher, "idea-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_SEED
+ {FT_cipher, "seed-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_SEED
+ {FT_cipher, "seed-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_SEED
+ {FT_cipher, "seed-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_SEED
+ {FT_cipher, "seed-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC2
+ {FT_cipher, "rc2-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC2
+ {FT_cipher, "rc2-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC2
+ {FT_cipher, "rc2-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC2
+ {FT_cipher, "rc2-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC2
+ {FT_cipher, "rc2-64-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC2
+ {FT_cipher, "rc2-40-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_BF
+ {FT_cipher, "bf-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_BF
+ {FT_cipher, "bf-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_BF
+ {FT_cipher, "bf-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_BF
+ {FT_cipher, "bf-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAST
+ {FT_cipher, "cast5-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAST
+ {FT_cipher, "cast5-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAST
+ {FT_cipher, "cast5-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAST
+ {FT_cipher, "cast5-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_CAST
+ {FT_cipher, "cast-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC5
+ {FT_cipher, "rc5-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC5
+ {FT_cipher, "rc5-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC5
+ {FT_cipher, "rc5-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_RC5
+ {FT_cipher, "rc5-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_SM4
+ {FT_cipher, "sm4-cbc", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_SM4
+ {FT_cipher, "sm4-ecb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_SM4
+ {FT_cipher, "sm4-cfb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_SM4
+ {FT_cipher, "sm4-ofb", enc_main, enc_options},
+#endif
+#ifndef OPENSSL_NO_SM4
+ {FT_cipher, "sm4-ctr", enc_main, enc_options},
+#endif
+ {0, NULL, NULL}
+};
+#endif
diff --git a/contrib/libs/openssl/asm/windows/crypto/aes/aesni-mb-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/aes/aesni-mb-x86_64.masm
index cf3ff84649..66976317f4 100644
--- a/contrib/libs/openssl/asm/windows/crypto/aes/aesni-mb-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/aes/aesni-mb-x86_64.masm
@@ -1,1770 +1,1770 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC aesni_multi_cbc_encrypt
-
-ALIGN 32
-aesni_multi_cbc_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_multi_cbc_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- cmp edx,2
- jb $L$enc_non_avx
- mov ecx,DWORD PTR[((OPENSSL_ia32cap_P+4))]
- test ecx,268435456
- jnz _avx_cbc_enc_shortcut
- jmp $L$enc_non_avx
-ALIGN 16
-$L$enc_non_avx::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[64+rsp],xmm10
- movaps XMMWORD PTR[80+rsp],xmm11
- movaps XMMWORD PTR[96+rsp],xmm12
- movaps XMMWORD PTR[(-104)+rax],xmm13
- movaps XMMWORD PTR[(-88)+rax],xmm14
- movaps XMMWORD PTR[(-72)+rax],xmm15
-
-
-
-
-
-
- sub rsp,48
- and rsp,-64
- mov QWORD PTR[16+rsp],rax
-
-
-$L$enc4x_body::
- movdqu xmm12,XMMWORD PTR[rsi]
- lea rsi,QWORD PTR[120+rsi]
- lea rdi,QWORD PTR[80+rdi]
-
-$L$enc4x_loop_grande::
- mov DWORD PTR[24+rsp],edx
- xor edx,edx
- mov ecx,DWORD PTR[((-64))+rdi]
- mov r8,QWORD PTR[((-80))+rdi]
- cmp ecx,edx
- mov r12,QWORD PTR[((-72))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- movdqu xmm2,XMMWORD PTR[((-56))+rdi]
- mov DWORD PTR[32+rsp],ecx
- cmovle r8,rsp
- mov ecx,DWORD PTR[((-24))+rdi]
- mov r9,QWORD PTR[((-40))+rdi]
- cmp ecx,edx
- mov r13,QWORD PTR[((-32))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- movdqu xmm3,XMMWORD PTR[((-16))+rdi]
- mov DWORD PTR[36+rsp],ecx
- cmovle r9,rsp
- mov ecx,DWORD PTR[16+rdi]
- mov r10,QWORD PTR[rdi]
- cmp ecx,edx
- mov r14,QWORD PTR[8+rdi]
- cmovg edx,ecx
- test ecx,ecx
- movdqu xmm4,XMMWORD PTR[24+rdi]
- mov DWORD PTR[40+rsp],ecx
- cmovle r10,rsp
- mov ecx,DWORD PTR[56+rdi]
- mov r11,QWORD PTR[40+rdi]
- cmp ecx,edx
- mov r15,QWORD PTR[48+rdi]
- cmovg edx,ecx
- test ecx,ecx
- movdqu xmm5,XMMWORD PTR[64+rdi]
- mov DWORD PTR[44+rsp],ecx
- cmovle r11,rsp
- test edx,edx
- jz $L$enc4x_done
-
- movups xmm1,XMMWORD PTR[((16-120))+rsi]
- pxor xmm2,xmm12
- movups xmm0,XMMWORD PTR[((32-120))+rsi]
- pxor xmm3,xmm12
- mov eax,DWORD PTR[((240-120))+rsi]
- pxor xmm4,xmm12
- movdqu xmm6,XMMWORD PTR[r8]
- pxor xmm5,xmm12
- movdqu xmm7,XMMWORD PTR[r9]
- pxor xmm2,xmm6
- movdqu xmm8,XMMWORD PTR[r10]
- pxor xmm3,xmm7
- movdqu xmm9,XMMWORD PTR[r11]
- pxor xmm4,xmm8
- pxor xmm5,xmm9
- movdqa xmm10,XMMWORD PTR[32+rsp]
- xor rbx,rbx
- jmp $L$oop_enc4x
-
-ALIGN 32
-$L$oop_enc4x::
- add rbx,16
- lea rbp,QWORD PTR[16+rsp]
- mov ecx,1
- sub rbp,rbx
-
-DB 102,15,56,220,209
- prefetcht0 [31+rbx*1+r8]
- prefetcht0 [31+rbx*1+r9]
-DB 102,15,56,220,217
- prefetcht0 [31+rbx*1+r10]
- prefetcht0 [31+rbx*1+r10]
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[((48-120))+rsi]
- cmp ecx,DWORD PTR[32+rsp]
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
- cmovge r8,rbp
- cmovg r12,rbp
-DB 102,15,56,220,232
- movups xmm0,XMMWORD PTR[((-56))+rsi]
- cmp ecx,DWORD PTR[36+rsp]
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
- cmovge r9,rbp
- cmovg r13,rbp
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[((-40))+rsi]
- cmp ecx,DWORD PTR[40+rsp]
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
- cmovge r10,rbp
- cmovg r14,rbp
-DB 102,15,56,220,232
- movups xmm0,XMMWORD PTR[((-24))+rsi]
- cmp ecx,DWORD PTR[44+rsp]
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
- cmovge r11,rbp
- cmovg r15,rbp
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[((-8))+rsi]
- movdqa xmm11,xmm10
-DB 102,15,56,220,208
- prefetcht0 [15+rbx*1+r12]
- prefetcht0 [15+rbx*1+r13]
-DB 102,15,56,220,216
- prefetcht0 [15+rbx*1+r14]
- prefetcht0 [15+rbx*1+r15]
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- movups xmm0,XMMWORD PTR[((128-120))+rsi]
- pxor xmm12,xmm12
-
-DB 102,15,56,220,209
- pcmpgtd xmm11,xmm12
- movdqu xmm12,XMMWORD PTR[((-120))+rsi]
-DB 102,15,56,220,217
- paddd xmm10,xmm11
- movdqa XMMWORD PTR[32+rsp],xmm10
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[((144-120))+rsi]
-
- cmp eax,11
-
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- movups xmm0,XMMWORD PTR[((160-120))+rsi]
-
- jb $L$enc4x_tail
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[((176-120))+rsi]
-
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- movups xmm0,XMMWORD PTR[((192-120))+rsi]
-
- je $L$enc4x_tail
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[((208-120))+rsi]
-
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- movups xmm0,XMMWORD PTR[((224-120))+rsi]
- jmp $L$enc4x_tail
-
-ALIGN 32
-$L$enc4x_tail::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movdqu xmm6,XMMWORD PTR[rbx*1+r8]
- movdqu xmm1,XMMWORD PTR[((16-120))+rsi]
-
-DB 102,15,56,221,208
- movdqu xmm7,XMMWORD PTR[rbx*1+r9]
- pxor xmm6,xmm12
-DB 102,15,56,221,216
- movdqu xmm8,XMMWORD PTR[rbx*1+r10]
- pxor xmm7,xmm12
-DB 102,15,56,221,224
- movdqu xmm9,XMMWORD PTR[rbx*1+r11]
- pxor xmm8,xmm12
-DB 102,15,56,221,232
- movdqu xmm0,XMMWORD PTR[((32-120))+rsi]
- pxor xmm9,xmm12
-
- movups XMMWORD PTR[(-16)+rbx*1+r12],xmm2
- pxor xmm2,xmm6
- movups XMMWORD PTR[(-16)+rbx*1+r13],xmm3
- pxor xmm3,xmm7
- movups XMMWORD PTR[(-16)+rbx*1+r14],xmm4
- pxor xmm4,xmm8
- movups XMMWORD PTR[(-16)+rbx*1+r15],xmm5
- pxor xmm5,xmm9
-
- dec edx
- jnz $L$oop_enc4x
-
- mov rax,QWORD PTR[16+rsp]
-
- mov edx,DWORD PTR[24+rsp]
-
-
-
-
-
-
-
-
-
-
- lea rdi,QWORD PTR[160+rdi]
- dec edx
- jnz $L$enc4x_loop_grande
-
-$L$enc4x_done::
- movaps xmm6,XMMWORD PTR[((-216))+rax]
- movaps xmm7,XMMWORD PTR[((-200))+rax]
- movaps xmm8,XMMWORD PTR[((-184))+rax]
- movaps xmm9,XMMWORD PTR[((-168))+rax]
- movaps xmm10,XMMWORD PTR[((-152))+rax]
- movaps xmm11,XMMWORD PTR[((-136))+rax]
- movaps xmm12,XMMWORD PTR[((-120))+rax]
-
-
-
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$enc4x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_multi_cbc_encrypt::
-aesni_multi_cbc_encrypt ENDP
-
-PUBLIC aesni_multi_cbc_decrypt
-
-ALIGN 32
-aesni_multi_cbc_decrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_multi_cbc_decrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- cmp edx,2
- jb $L$dec_non_avx
- mov ecx,DWORD PTR[((OPENSSL_ia32cap_P+4))]
- test ecx,268435456
- jnz _avx_cbc_dec_shortcut
- jmp $L$dec_non_avx
-ALIGN 16
-$L$dec_non_avx::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[64+rsp],xmm10
- movaps XMMWORD PTR[80+rsp],xmm11
- movaps XMMWORD PTR[96+rsp],xmm12
- movaps XMMWORD PTR[(-104)+rax],xmm13
- movaps XMMWORD PTR[(-88)+rax],xmm14
- movaps XMMWORD PTR[(-72)+rax],xmm15
-
-
-
-
-
-
- sub rsp,48
- and rsp,-64
- mov QWORD PTR[16+rsp],rax
-
-
-$L$dec4x_body::
- movdqu xmm12,XMMWORD PTR[rsi]
- lea rsi,QWORD PTR[120+rsi]
- lea rdi,QWORD PTR[80+rdi]
-
-$L$dec4x_loop_grande::
- mov DWORD PTR[24+rsp],edx
- xor edx,edx
- mov ecx,DWORD PTR[((-64))+rdi]
- mov r8,QWORD PTR[((-80))+rdi]
- cmp ecx,edx
- mov r12,QWORD PTR[((-72))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- movdqu xmm6,XMMWORD PTR[((-56))+rdi]
- mov DWORD PTR[32+rsp],ecx
- cmovle r8,rsp
- mov ecx,DWORD PTR[((-24))+rdi]
- mov r9,QWORD PTR[((-40))+rdi]
- cmp ecx,edx
- mov r13,QWORD PTR[((-32))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- movdqu xmm7,XMMWORD PTR[((-16))+rdi]
- mov DWORD PTR[36+rsp],ecx
- cmovle r9,rsp
- mov ecx,DWORD PTR[16+rdi]
- mov r10,QWORD PTR[rdi]
- cmp ecx,edx
- mov r14,QWORD PTR[8+rdi]
- cmovg edx,ecx
- test ecx,ecx
- movdqu xmm8,XMMWORD PTR[24+rdi]
- mov DWORD PTR[40+rsp],ecx
- cmovle r10,rsp
- mov ecx,DWORD PTR[56+rdi]
- mov r11,QWORD PTR[40+rdi]
- cmp ecx,edx
- mov r15,QWORD PTR[48+rdi]
- cmovg edx,ecx
- test ecx,ecx
- movdqu xmm9,XMMWORD PTR[64+rdi]
- mov DWORD PTR[44+rsp],ecx
- cmovle r11,rsp
- test edx,edx
- jz $L$dec4x_done
-
- movups xmm1,XMMWORD PTR[((16-120))+rsi]
- movups xmm0,XMMWORD PTR[((32-120))+rsi]
- mov eax,DWORD PTR[((240-120))+rsi]
- movdqu xmm2,XMMWORD PTR[r8]
- movdqu xmm3,XMMWORD PTR[r9]
- pxor xmm2,xmm12
- movdqu xmm4,XMMWORD PTR[r10]
- pxor xmm3,xmm12
- movdqu xmm5,XMMWORD PTR[r11]
- pxor xmm4,xmm12
- pxor xmm5,xmm12
- movdqa xmm10,XMMWORD PTR[32+rsp]
- xor rbx,rbx
- jmp $L$oop_dec4x
-
-ALIGN 32
-$L$oop_dec4x::
- add rbx,16
- lea rbp,QWORD PTR[16+rsp]
- mov ecx,1
- sub rbp,rbx
-
-DB 102,15,56,222,209
- prefetcht0 [31+rbx*1+r8]
- prefetcht0 [31+rbx*1+r9]
-DB 102,15,56,222,217
- prefetcht0 [31+rbx*1+r10]
- prefetcht0 [31+rbx*1+r11]
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR[((48-120))+rsi]
- cmp ecx,DWORD PTR[32+rsp]
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
- cmovge r8,rbp
- cmovg r12,rbp
-DB 102,15,56,222,232
- movups xmm0,XMMWORD PTR[((-56))+rsi]
- cmp ecx,DWORD PTR[36+rsp]
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
- cmovge r9,rbp
- cmovg r13,rbp
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR[((-40))+rsi]
- cmp ecx,DWORD PTR[40+rsp]
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
- cmovge r10,rbp
- cmovg r14,rbp
-DB 102,15,56,222,232
- movups xmm0,XMMWORD PTR[((-24))+rsi]
- cmp ecx,DWORD PTR[44+rsp]
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
- cmovge r11,rbp
- cmovg r15,rbp
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR[((-8))+rsi]
- movdqa xmm11,xmm10
-DB 102,15,56,222,208
- prefetcht0 [15+rbx*1+r12]
- prefetcht0 [15+rbx*1+r13]
-DB 102,15,56,222,216
- prefetcht0 [15+rbx*1+r14]
- prefetcht0 [15+rbx*1+r15]
-DB 102,15,56,222,224
-DB 102,15,56,222,232
- movups xmm0,XMMWORD PTR[((128-120))+rsi]
- pxor xmm12,xmm12
-
-DB 102,15,56,222,209
- pcmpgtd xmm11,xmm12
- movdqu xmm12,XMMWORD PTR[((-120))+rsi]
-DB 102,15,56,222,217
- paddd xmm10,xmm11
- movdqa XMMWORD PTR[32+rsp],xmm10
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR[((144-120))+rsi]
-
- cmp eax,11
-
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
- movups xmm0,XMMWORD PTR[((160-120))+rsi]
-
- jb $L$dec4x_tail
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR[((176-120))+rsi]
-
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
- movups xmm0,XMMWORD PTR[((192-120))+rsi]
-
- je $L$dec4x_tail
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR[((208-120))+rsi]
-
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
- movups xmm0,XMMWORD PTR[((224-120))+rsi]
- jmp $L$dec4x_tail
-
-ALIGN 32
-$L$dec4x_tail::
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
- pxor xmm6,xmm0
- pxor xmm7,xmm0
-DB 102,15,56,222,233
- movdqu xmm1,XMMWORD PTR[((16-120))+rsi]
- pxor xmm8,xmm0
- pxor xmm9,xmm0
- movdqu xmm0,XMMWORD PTR[((32-120))+rsi]
-
-DB 102,15,56,223,214
-DB 102,15,56,223,223
- movdqu xmm6,XMMWORD PTR[((-16))+rbx*1+r8]
- movdqu xmm7,XMMWORD PTR[((-16))+rbx*1+r9]
-DB 102,65,15,56,223,224
-DB 102,65,15,56,223,233
- movdqu xmm8,XMMWORD PTR[((-16))+rbx*1+r10]
- movdqu xmm9,XMMWORD PTR[((-16))+rbx*1+r11]
-
- movups XMMWORD PTR[(-16)+rbx*1+r12],xmm2
- movdqu xmm2,XMMWORD PTR[rbx*1+r8]
- movups XMMWORD PTR[(-16)+rbx*1+r13],xmm3
- movdqu xmm3,XMMWORD PTR[rbx*1+r9]
- pxor xmm2,xmm12
- movups XMMWORD PTR[(-16)+rbx*1+r14],xmm4
- movdqu xmm4,XMMWORD PTR[rbx*1+r10]
- pxor xmm3,xmm12
- movups XMMWORD PTR[(-16)+rbx*1+r15],xmm5
- movdqu xmm5,XMMWORD PTR[rbx*1+r11]
- pxor xmm4,xmm12
- pxor xmm5,xmm12
-
- dec edx
- jnz $L$oop_dec4x
-
- mov rax,QWORD PTR[16+rsp]
-
- mov edx,DWORD PTR[24+rsp]
-
- lea rdi,QWORD PTR[160+rdi]
- dec edx
- jnz $L$dec4x_loop_grande
-
-$L$dec4x_done::
- movaps xmm6,XMMWORD PTR[((-216))+rax]
- movaps xmm7,XMMWORD PTR[((-200))+rax]
- movaps xmm8,XMMWORD PTR[((-184))+rax]
- movaps xmm9,XMMWORD PTR[((-168))+rax]
- movaps xmm10,XMMWORD PTR[((-152))+rax]
- movaps xmm11,XMMWORD PTR[((-136))+rax]
- movaps xmm12,XMMWORD PTR[((-120))+rax]
-
-
-
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$dec4x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_multi_cbc_decrypt::
-aesni_multi_cbc_decrypt ENDP
-
-ALIGN 32
-aesni_multi_cbc_encrypt_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_multi_cbc_encrypt_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-_avx_cbc_enc_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[64+rsp],xmm10
- movaps XMMWORD PTR[80+rsp],xmm11
- movaps XMMWORD PTR[(-120)+rax],xmm12
- movaps XMMWORD PTR[(-104)+rax],xmm13
- movaps XMMWORD PTR[(-88)+rax],xmm14
- movaps XMMWORD PTR[(-72)+rax],xmm15
-
-
-
-
-
-
-
-
- sub rsp,192
- and rsp,-128
- mov QWORD PTR[16+rsp],rax
-
-
-$L$enc8x_body::
- vzeroupper
- vmovdqu xmm15,XMMWORD PTR[rsi]
- lea rsi,QWORD PTR[120+rsi]
- lea rdi,QWORD PTR[160+rdi]
- shr edx,1
-
-$L$enc8x_loop_grande::
-
- xor edx,edx
- mov ecx,DWORD PTR[((-144))+rdi]
- mov r8,QWORD PTR[((-160))+rdi]
- cmp ecx,edx
- mov rbx,QWORD PTR[((-152))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm2,XMMWORD PTR[((-136))+rdi]
- mov DWORD PTR[32+rsp],ecx
- cmovle r8,rsp
- sub rbx,r8
- mov QWORD PTR[64+rsp],rbx
- mov ecx,DWORD PTR[((-104))+rdi]
- mov r9,QWORD PTR[((-120))+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[((-112))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm3,XMMWORD PTR[((-96))+rdi]
- mov DWORD PTR[36+rsp],ecx
- cmovle r9,rsp
- sub rbp,r9
- mov QWORD PTR[72+rsp],rbp
- mov ecx,DWORD PTR[((-64))+rdi]
- mov r10,QWORD PTR[((-80))+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[((-72))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm4,XMMWORD PTR[((-56))+rdi]
- mov DWORD PTR[40+rsp],ecx
- cmovle r10,rsp
- sub rbp,r10
- mov QWORD PTR[80+rsp],rbp
- mov ecx,DWORD PTR[((-24))+rdi]
- mov r11,QWORD PTR[((-40))+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[((-32))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm5,XMMWORD PTR[((-16))+rdi]
- mov DWORD PTR[44+rsp],ecx
- cmovle r11,rsp
- sub rbp,r11
- mov QWORD PTR[88+rsp],rbp
- mov ecx,DWORD PTR[16+rdi]
- mov r12,QWORD PTR[rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[8+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm6,XMMWORD PTR[24+rdi]
- mov DWORD PTR[48+rsp],ecx
- cmovle r12,rsp
- sub rbp,r12
- mov QWORD PTR[96+rsp],rbp
- mov ecx,DWORD PTR[56+rdi]
- mov r13,QWORD PTR[40+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[48+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm7,XMMWORD PTR[64+rdi]
- mov DWORD PTR[52+rsp],ecx
- cmovle r13,rsp
- sub rbp,r13
- mov QWORD PTR[104+rsp],rbp
- mov ecx,DWORD PTR[96+rdi]
- mov r14,QWORD PTR[80+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[88+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm8,XMMWORD PTR[104+rdi]
- mov DWORD PTR[56+rsp],ecx
- cmovle r14,rsp
- sub rbp,r14
- mov QWORD PTR[112+rsp],rbp
- mov ecx,DWORD PTR[136+rdi]
- mov r15,QWORD PTR[120+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[128+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm9,XMMWORD PTR[144+rdi]
- mov DWORD PTR[60+rsp],ecx
- cmovle r15,rsp
- sub rbp,r15
- mov QWORD PTR[120+rsp],rbp
- test edx,edx
- jz $L$enc8x_done
-
- vmovups xmm1,XMMWORD PTR[((16-120))+rsi]
- vmovups xmm0,XMMWORD PTR[((32-120))+rsi]
- mov eax,DWORD PTR[((240-120))+rsi]
-
- vpxor xmm10,xmm15,XMMWORD PTR[r8]
- lea rbp,QWORD PTR[128+rsp]
- vpxor xmm11,xmm15,XMMWORD PTR[r9]
- vpxor xmm12,xmm15,XMMWORD PTR[r10]
- vpxor xmm13,xmm15,XMMWORD PTR[r11]
- vpxor xmm2,xmm2,xmm10
- vpxor xmm10,xmm15,XMMWORD PTR[r12]
- vpxor xmm3,xmm3,xmm11
- vpxor xmm11,xmm15,XMMWORD PTR[r13]
- vpxor xmm4,xmm4,xmm12
- vpxor xmm12,xmm15,XMMWORD PTR[r14]
- vpxor xmm5,xmm5,xmm13
- vpxor xmm13,xmm15,XMMWORD PTR[r15]
- vpxor xmm6,xmm6,xmm10
- mov ecx,1
- vpxor xmm7,xmm7,xmm11
- vpxor xmm8,xmm8,xmm12
- vpxor xmm9,xmm9,xmm13
- jmp $L$oop_enc8x
-
-ALIGN 32
-$L$oop_enc8x::
- vaesenc xmm2,xmm2,xmm1
- cmp ecx,DWORD PTR[((32+0))+rsp]
- vaesenc xmm3,xmm3,xmm1
- prefetcht0 [31+r8]
- vaesenc xmm4,xmm4,xmm1
- vaesenc xmm5,xmm5,xmm1
- lea rbx,QWORD PTR[rbx*1+r8]
- cmovge r8,rsp
- vaesenc xmm6,xmm6,xmm1
- cmovg rbx,rsp
- vaesenc xmm7,xmm7,xmm1
- sub rbx,r8
- vaesenc xmm8,xmm8,xmm1
- vpxor xmm10,xmm15,XMMWORD PTR[16+r8]
- mov QWORD PTR[((64+0))+rsp],rbx
- vaesenc xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((-72))+rsi]
- lea r8,QWORD PTR[16+rbx*1+r8]
- vmovdqu XMMWORD PTR[rbp],xmm10
- vaesenc xmm2,xmm2,xmm0
- cmp ecx,DWORD PTR[((32+4))+rsp]
- mov rbx,QWORD PTR[((64+8))+rsp]
- vaesenc xmm3,xmm3,xmm0
- prefetcht0 [31+r9]
- vaesenc xmm4,xmm4,xmm0
- vaesenc xmm5,xmm5,xmm0
- lea rbx,QWORD PTR[rbx*1+r9]
- cmovge r9,rsp
- vaesenc xmm6,xmm6,xmm0
- cmovg rbx,rsp
- vaesenc xmm7,xmm7,xmm0
- sub rbx,r9
- vaesenc xmm8,xmm8,xmm0
- vpxor xmm11,xmm15,XMMWORD PTR[16+r9]
- mov QWORD PTR[((64+8))+rsp],rbx
- vaesenc xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[((-56))+rsi]
- lea r9,QWORD PTR[16+rbx*1+r9]
- vmovdqu XMMWORD PTR[16+rbp],xmm11
- vaesenc xmm2,xmm2,xmm1
- cmp ecx,DWORD PTR[((32+8))+rsp]
- mov rbx,QWORD PTR[((64+16))+rsp]
- vaesenc xmm3,xmm3,xmm1
- prefetcht0 [31+r10]
- vaesenc xmm4,xmm4,xmm1
- prefetcht0 [15+r8]
- vaesenc xmm5,xmm5,xmm1
- lea rbx,QWORD PTR[rbx*1+r10]
- cmovge r10,rsp
- vaesenc xmm6,xmm6,xmm1
- cmovg rbx,rsp
- vaesenc xmm7,xmm7,xmm1
- sub rbx,r10
- vaesenc xmm8,xmm8,xmm1
- vpxor xmm12,xmm15,XMMWORD PTR[16+r10]
- mov QWORD PTR[((64+16))+rsp],rbx
- vaesenc xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((-40))+rsi]
- lea r10,QWORD PTR[16+rbx*1+r10]
- vmovdqu XMMWORD PTR[32+rbp],xmm12
- vaesenc xmm2,xmm2,xmm0
- cmp ecx,DWORD PTR[((32+12))+rsp]
- mov rbx,QWORD PTR[((64+24))+rsp]
- vaesenc xmm3,xmm3,xmm0
- prefetcht0 [31+r11]
- vaesenc xmm4,xmm4,xmm0
- prefetcht0 [15+r9]
- vaesenc xmm5,xmm5,xmm0
- lea rbx,QWORD PTR[rbx*1+r11]
- cmovge r11,rsp
- vaesenc xmm6,xmm6,xmm0
- cmovg rbx,rsp
- vaesenc xmm7,xmm7,xmm0
- sub rbx,r11
- vaesenc xmm8,xmm8,xmm0
- vpxor xmm13,xmm15,XMMWORD PTR[16+r11]
- mov QWORD PTR[((64+24))+rsp],rbx
- vaesenc xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[((-24))+rsi]
- lea r11,QWORD PTR[16+rbx*1+r11]
- vmovdqu XMMWORD PTR[48+rbp],xmm13
- vaesenc xmm2,xmm2,xmm1
- cmp ecx,DWORD PTR[((32+16))+rsp]
- mov rbx,QWORD PTR[((64+32))+rsp]
- vaesenc xmm3,xmm3,xmm1
- prefetcht0 [31+r12]
- vaesenc xmm4,xmm4,xmm1
- prefetcht0 [15+r10]
- vaesenc xmm5,xmm5,xmm1
- lea rbx,QWORD PTR[rbx*1+r12]
- cmovge r12,rsp
- vaesenc xmm6,xmm6,xmm1
- cmovg rbx,rsp
- vaesenc xmm7,xmm7,xmm1
- sub rbx,r12
- vaesenc xmm8,xmm8,xmm1
- vpxor xmm10,xmm15,XMMWORD PTR[16+r12]
- mov QWORD PTR[((64+32))+rsp],rbx
- vaesenc xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((-8))+rsi]
- lea r12,QWORD PTR[16+rbx*1+r12]
- vaesenc xmm2,xmm2,xmm0
- cmp ecx,DWORD PTR[((32+20))+rsp]
- mov rbx,QWORD PTR[((64+40))+rsp]
- vaesenc xmm3,xmm3,xmm0
- prefetcht0 [31+r13]
- vaesenc xmm4,xmm4,xmm0
- prefetcht0 [15+r11]
- vaesenc xmm5,xmm5,xmm0
- lea rbx,QWORD PTR[r13*1+rbx]
- cmovge r13,rsp
- vaesenc xmm6,xmm6,xmm0
- cmovg rbx,rsp
- vaesenc xmm7,xmm7,xmm0
- sub rbx,r13
- vaesenc xmm8,xmm8,xmm0
- vpxor xmm11,xmm15,XMMWORD PTR[16+r13]
- mov QWORD PTR[((64+40))+rsp],rbx
- vaesenc xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[8+rsi]
- lea r13,QWORD PTR[16+rbx*1+r13]
- vaesenc xmm2,xmm2,xmm1
- cmp ecx,DWORD PTR[((32+24))+rsp]
- mov rbx,QWORD PTR[((64+48))+rsp]
- vaesenc xmm3,xmm3,xmm1
- prefetcht0 [31+r14]
- vaesenc xmm4,xmm4,xmm1
- prefetcht0 [15+r12]
- vaesenc xmm5,xmm5,xmm1
- lea rbx,QWORD PTR[rbx*1+r14]
- cmovge r14,rsp
- vaesenc xmm6,xmm6,xmm1
- cmovg rbx,rsp
- vaesenc xmm7,xmm7,xmm1
- sub rbx,r14
- vaesenc xmm8,xmm8,xmm1
- vpxor xmm12,xmm15,XMMWORD PTR[16+r14]
- mov QWORD PTR[((64+48))+rsp],rbx
- vaesenc xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[24+rsi]
- lea r14,QWORD PTR[16+rbx*1+r14]
- vaesenc xmm2,xmm2,xmm0
- cmp ecx,DWORD PTR[((32+28))+rsp]
- mov rbx,QWORD PTR[((64+56))+rsp]
- vaesenc xmm3,xmm3,xmm0
- prefetcht0 [31+r15]
- vaesenc xmm4,xmm4,xmm0
- prefetcht0 [15+r13]
- vaesenc xmm5,xmm5,xmm0
- lea rbx,QWORD PTR[rbx*1+r15]
- cmovge r15,rsp
- vaesenc xmm6,xmm6,xmm0
- cmovg rbx,rsp
- vaesenc xmm7,xmm7,xmm0
- sub rbx,r15
- vaesenc xmm8,xmm8,xmm0
- vpxor xmm13,xmm15,XMMWORD PTR[16+r15]
- mov QWORD PTR[((64+56))+rsp],rbx
- vaesenc xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[40+rsi]
- lea r15,QWORD PTR[16+rbx*1+r15]
- vmovdqu xmm14,XMMWORD PTR[32+rsp]
- prefetcht0 [15+r14]
- prefetcht0 [15+r15]
- cmp eax,11
- jb $L$enc8x_tail
-
- vaesenc xmm2,xmm2,xmm1
- vaesenc xmm3,xmm3,xmm1
- vaesenc xmm4,xmm4,xmm1
- vaesenc xmm5,xmm5,xmm1
- vaesenc xmm6,xmm6,xmm1
- vaesenc xmm7,xmm7,xmm1
- vaesenc xmm8,xmm8,xmm1
- vaesenc xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((176-120))+rsi]
-
- vaesenc xmm2,xmm2,xmm0
- vaesenc xmm3,xmm3,xmm0
- vaesenc xmm4,xmm4,xmm0
- vaesenc xmm5,xmm5,xmm0
- vaesenc xmm6,xmm6,xmm0
- vaesenc xmm7,xmm7,xmm0
- vaesenc xmm8,xmm8,xmm0
- vaesenc xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[((192-120))+rsi]
- je $L$enc8x_tail
-
- vaesenc xmm2,xmm2,xmm1
- vaesenc xmm3,xmm3,xmm1
- vaesenc xmm4,xmm4,xmm1
- vaesenc xmm5,xmm5,xmm1
- vaesenc xmm6,xmm6,xmm1
- vaesenc xmm7,xmm7,xmm1
- vaesenc xmm8,xmm8,xmm1
- vaesenc xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((208-120))+rsi]
-
- vaesenc xmm2,xmm2,xmm0
- vaesenc xmm3,xmm3,xmm0
- vaesenc xmm4,xmm4,xmm0
- vaesenc xmm5,xmm5,xmm0
- vaesenc xmm6,xmm6,xmm0
- vaesenc xmm7,xmm7,xmm0
- vaesenc xmm8,xmm8,xmm0
- vaesenc xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[((224-120))+rsi]
-
-$L$enc8x_tail::
- vaesenc xmm2,xmm2,xmm1
- vpxor xmm15,xmm15,xmm15
- vaesenc xmm3,xmm3,xmm1
- vaesenc xmm4,xmm4,xmm1
- vpcmpgtd xmm15,xmm14,xmm15
- vaesenc xmm5,xmm5,xmm1
- vaesenc xmm6,xmm6,xmm1
- vpaddd xmm15,xmm15,xmm14
- vmovdqu xmm14,XMMWORD PTR[48+rsp]
- vaesenc xmm7,xmm7,xmm1
- mov rbx,QWORD PTR[64+rsp]
- vaesenc xmm8,xmm8,xmm1
- vaesenc xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((16-120))+rsi]
-
- vaesenclast xmm2,xmm2,xmm0
- vmovdqa XMMWORD PTR[32+rsp],xmm15
- vpxor xmm15,xmm15,xmm15
- vaesenclast xmm3,xmm3,xmm0
- vaesenclast xmm4,xmm4,xmm0
- vpcmpgtd xmm15,xmm14,xmm15
- vaesenclast xmm5,xmm5,xmm0
- vaesenclast xmm6,xmm6,xmm0
- vpaddd xmm14,xmm14,xmm15
- vmovdqu xmm15,XMMWORD PTR[((-120))+rsi]
- vaesenclast xmm7,xmm7,xmm0
- vaesenclast xmm8,xmm8,xmm0
- vmovdqa XMMWORD PTR[48+rsp],xmm14
- vaesenclast xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[((32-120))+rsi]
-
- vmovups XMMWORD PTR[(-16)+r8],xmm2
- sub r8,rbx
- vpxor xmm2,xmm2,XMMWORD PTR[rbp]
- vmovups XMMWORD PTR[(-16)+r9],xmm3
- sub r9,QWORD PTR[72+rsp]
- vpxor xmm3,xmm3,XMMWORD PTR[16+rbp]
- vmovups XMMWORD PTR[(-16)+r10],xmm4
- sub r10,QWORD PTR[80+rsp]
- vpxor xmm4,xmm4,XMMWORD PTR[32+rbp]
- vmovups XMMWORD PTR[(-16)+r11],xmm5
- sub r11,QWORD PTR[88+rsp]
- vpxor xmm5,xmm5,XMMWORD PTR[48+rbp]
- vmovups XMMWORD PTR[(-16)+r12],xmm6
- sub r12,QWORD PTR[96+rsp]
- vpxor xmm6,xmm6,xmm10
- vmovups XMMWORD PTR[(-16)+r13],xmm7
- sub r13,QWORD PTR[104+rsp]
- vpxor xmm7,xmm7,xmm11
- vmovups XMMWORD PTR[(-16)+r14],xmm8
- sub r14,QWORD PTR[112+rsp]
- vpxor xmm8,xmm8,xmm12
- vmovups XMMWORD PTR[(-16)+r15],xmm9
- sub r15,QWORD PTR[120+rsp]
- vpxor xmm9,xmm9,xmm13
-
- dec edx
- jnz $L$oop_enc8x
-
- mov rax,QWORD PTR[16+rsp]
-
-
-
-
-
-
-$L$enc8x_done::
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-216))+rax]
- movaps xmm7,XMMWORD PTR[((-200))+rax]
- movaps xmm8,XMMWORD PTR[((-184))+rax]
- movaps xmm9,XMMWORD PTR[((-168))+rax]
- movaps xmm10,XMMWORD PTR[((-152))+rax]
- movaps xmm11,XMMWORD PTR[((-136))+rax]
- movaps xmm12,XMMWORD PTR[((-120))+rax]
- movaps xmm13,XMMWORD PTR[((-104))+rax]
- movaps xmm14,XMMWORD PTR[((-88))+rax]
- movaps xmm15,XMMWORD PTR[((-72))+rax]
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$enc8x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_multi_cbc_encrypt_avx::
-aesni_multi_cbc_encrypt_avx ENDP
-
-
-ALIGN 32
-aesni_multi_cbc_decrypt_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_multi_cbc_decrypt_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-_avx_cbc_dec_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[64+rsp],xmm10
- movaps XMMWORD PTR[80+rsp],xmm11
- movaps XMMWORD PTR[(-120)+rax],xmm12
- movaps XMMWORD PTR[(-104)+rax],xmm13
- movaps XMMWORD PTR[(-88)+rax],xmm14
- movaps XMMWORD PTR[(-72)+rax],xmm15
-
-
-
-
-
-
-
-
-
- sub rsp,256
- and rsp,-256
- sub rsp,192
- mov QWORD PTR[16+rsp],rax
-
-
-$L$dec8x_body::
- vzeroupper
- vmovdqu xmm15,XMMWORD PTR[rsi]
- lea rsi,QWORD PTR[120+rsi]
- lea rdi,QWORD PTR[160+rdi]
- shr edx,1
-
-$L$dec8x_loop_grande::
-
- xor edx,edx
- mov ecx,DWORD PTR[((-144))+rdi]
- mov r8,QWORD PTR[((-160))+rdi]
- cmp ecx,edx
- mov rbx,QWORD PTR[((-152))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm2,XMMWORD PTR[((-136))+rdi]
- mov DWORD PTR[32+rsp],ecx
- cmovle r8,rsp
- sub rbx,r8
- mov QWORD PTR[64+rsp],rbx
- vmovdqu XMMWORD PTR[192+rsp],xmm2
- mov ecx,DWORD PTR[((-104))+rdi]
- mov r9,QWORD PTR[((-120))+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[((-112))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm3,XMMWORD PTR[((-96))+rdi]
- mov DWORD PTR[36+rsp],ecx
- cmovle r9,rsp
- sub rbp,r9
- mov QWORD PTR[72+rsp],rbp
- vmovdqu XMMWORD PTR[208+rsp],xmm3
- mov ecx,DWORD PTR[((-64))+rdi]
- mov r10,QWORD PTR[((-80))+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[((-72))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm4,XMMWORD PTR[((-56))+rdi]
- mov DWORD PTR[40+rsp],ecx
- cmovle r10,rsp
- sub rbp,r10
- mov QWORD PTR[80+rsp],rbp
- vmovdqu XMMWORD PTR[224+rsp],xmm4
- mov ecx,DWORD PTR[((-24))+rdi]
- mov r11,QWORD PTR[((-40))+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[((-32))+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm5,XMMWORD PTR[((-16))+rdi]
- mov DWORD PTR[44+rsp],ecx
- cmovle r11,rsp
- sub rbp,r11
- mov QWORD PTR[88+rsp],rbp
- vmovdqu XMMWORD PTR[240+rsp],xmm5
- mov ecx,DWORD PTR[16+rdi]
- mov r12,QWORD PTR[rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[8+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm6,XMMWORD PTR[24+rdi]
- mov DWORD PTR[48+rsp],ecx
- cmovle r12,rsp
- sub rbp,r12
- mov QWORD PTR[96+rsp],rbp
- vmovdqu XMMWORD PTR[256+rsp],xmm6
- mov ecx,DWORD PTR[56+rdi]
- mov r13,QWORD PTR[40+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[48+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm7,XMMWORD PTR[64+rdi]
- mov DWORD PTR[52+rsp],ecx
- cmovle r13,rsp
- sub rbp,r13
- mov QWORD PTR[104+rsp],rbp
- vmovdqu XMMWORD PTR[272+rsp],xmm7
- mov ecx,DWORD PTR[96+rdi]
- mov r14,QWORD PTR[80+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[88+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm8,XMMWORD PTR[104+rdi]
- mov DWORD PTR[56+rsp],ecx
- cmovle r14,rsp
- sub rbp,r14
- mov QWORD PTR[112+rsp],rbp
- vmovdqu XMMWORD PTR[288+rsp],xmm8
- mov ecx,DWORD PTR[136+rdi]
- mov r15,QWORD PTR[120+rdi]
- cmp ecx,edx
- mov rbp,QWORD PTR[128+rdi]
- cmovg edx,ecx
- test ecx,ecx
- vmovdqu xmm9,XMMWORD PTR[144+rdi]
- mov DWORD PTR[60+rsp],ecx
- cmovle r15,rsp
- sub rbp,r15
- mov QWORD PTR[120+rsp],rbp
- vmovdqu XMMWORD PTR[304+rsp],xmm9
- test edx,edx
- jz $L$dec8x_done
-
- vmovups xmm1,XMMWORD PTR[((16-120))+rsi]
- vmovups xmm0,XMMWORD PTR[((32-120))+rsi]
- mov eax,DWORD PTR[((240-120))+rsi]
- lea rbp,QWORD PTR[((192+128))+rsp]
-
- vmovdqu xmm2,XMMWORD PTR[r8]
- vmovdqu xmm3,XMMWORD PTR[r9]
- vmovdqu xmm4,XMMWORD PTR[r10]
- vmovdqu xmm5,XMMWORD PTR[r11]
- vmovdqu xmm6,XMMWORD PTR[r12]
- vmovdqu xmm7,XMMWORD PTR[r13]
- vmovdqu xmm8,XMMWORD PTR[r14]
- vmovdqu xmm9,XMMWORD PTR[r15]
- vmovdqu XMMWORD PTR[rbp],xmm2
- vpxor xmm2,xmm2,xmm15
- vmovdqu XMMWORD PTR[16+rbp],xmm3
- vpxor xmm3,xmm3,xmm15
- vmovdqu XMMWORD PTR[32+rbp],xmm4
- vpxor xmm4,xmm4,xmm15
- vmovdqu XMMWORD PTR[48+rbp],xmm5
- vpxor xmm5,xmm5,xmm15
- vmovdqu XMMWORD PTR[64+rbp],xmm6
- vpxor xmm6,xmm6,xmm15
- vmovdqu XMMWORD PTR[80+rbp],xmm7
- vpxor xmm7,xmm7,xmm15
- vmovdqu XMMWORD PTR[96+rbp],xmm8
- vpxor xmm8,xmm8,xmm15
- vmovdqu XMMWORD PTR[112+rbp],xmm9
- vpxor xmm9,xmm9,xmm15
- xor rbp,080h
- mov ecx,1
- jmp $L$oop_dec8x
-
-ALIGN 32
-$L$oop_dec8x::
- vaesdec xmm2,xmm2,xmm1
- cmp ecx,DWORD PTR[((32+0))+rsp]
- vaesdec xmm3,xmm3,xmm1
- prefetcht0 [31+r8]
- vaesdec xmm4,xmm4,xmm1
- vaesdec xmm5,xmm5,xmm1
- lea rbx,QWORD PTR[rbx*1+r8]
- cmovge r8,rsp
- vaesdec xmm6,xmm6,xmm1
- cmovg rbx,rsp
- vaesdec xmm7,xmm7,xmm1
- sub rbx,r8
- vaesdec xmm8,xmm8,xmm1
- vmovdqu xmm10,XMMWORD PTR[16+r8]
- mov QWORD PTR[((64+0))+rsp],rbx
- vaesdec xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((-72))+rsi]
- lea r8,QWORD PTR[16+rbx*1+r8]
- vmovdqu XMMWORD PTR[128+rsp],xmm10
- vaesdec xmm2,xmm2,xmm0
- cmp ecx,DWORD PTR[((32+4))+rsp]
- mov rbx,QWORD PTR[((64+8))+rsp]
- vaesdec xmm3,xmm3,xmm0
- prefetcht0 [31+r9]
- vaesdec xmm4,xmm4,xmm0
- vaesdec xmm5,xmm5,xmm0
- lea rbx,QWORD PTR[rbx*1+r9]
- cmovge r9,rsp
- vaesdec xmm6,xmm6,xmm0
- cmovg rbx,rsp
- vaesdec xmm7,xmm7,xmm0
- sub rbx,r9
- vaesdec xmm8,xmm8,xmm0
- vmovdqu xmm11,XMMWORD PTR[16+r9]
- mov QWORD PTR[((64+8))+rsp],rbx
- vaesdec xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[((-56))+rsi]
- lea r9,QWORD PTR[16+rbx*1+r9]
- vmovdqu XMMWORD PTR[144+rsp],xmm11
- vaesdec xmm2,xmm2,xmm1
- cmp ecx,DWORD PTR[((32+8))+rsp]
- mov rbx,QWORD PTR[((64+16))+rsp]
- vaesdec xmm3,xmm3,xmm1
- prefetcht0 [31+r10]
- vaesdec xmm4,xmm4,xmm1
- prefetcht0 [15+r8]
- vaesdec xmm5,xmm5,xmm1
- lea rbx,QWORD PTR[rbx*1+r10]
- cmovge r10,rsp
- vaesdec xmm6,xmm6,xmm1
- cmovg rbx,rsp
- vaesdec xmm7,xmm7,xmm1
- sub rbx,r10
- vaesdec xmm8,xmm8,xmm1
- vmovdqu xmm12,XMMWORD PTR[16+r10]
- mov QWORD PTR[((64+16))+rsp],rbx
- vaesdec xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((-40))+rsi]
- lea r10,QWORD PTR[16+rbx*1+r10]
- vmovdqu XMMWORD PTR[160+rsp],xmm12
- vaesdec xmm2,xmm2,xmm0
- cmp ecx,DWORD PTR[((32+12))+rsp]
- mov rbx,QWORD PTR[((64+24))+rsp]
- vaesdec xmm3,xmm3,xmm0
- prefetcht0 [31+r11]
- vaesdec xmm4,xmm4,xmm0
- prefetcht0 [15+r9]
- vaesdec xmm5,xmm5,xmm0
- lea rbx,QWORD PTR[rbx*1+r11]
- cmovge r11,rsp
- vaesdec xmm6,xmm6,xmm0
- cmovg rbx,rsp
- vaesdec xmm7,xmm7,xmm0
- sub rbx,r11
- vaesdec xmm8,xmm8,xmm0
- vmovdqu xmm13,XMMWORD PTR[16+r11]
- mov QWORD PTR[((64+24))+rsp],rbx
- vaesdec xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[((-24))+rsi]
- lea r11,QWORD PTR[16+rbx*1+r11]
- vmovdqu XMMWORD PTR[176+rsp],xmm13
- vaesdec xmm2,xmm2,xmm1
- cmp ecx,DWORD PTR[((32+16))+rsp]
- mov rbx,QWORD PTR[((64+32))+rsp]
- vaesdec xmm3,xmm3,xmm1
- prefetcht0 [31+r12]
- vaesdec xmm4,xmm4,xmm1
- prefetcht0 [15+r10]
- vaesdec xmm5,xmm5,xmm1
- lea rbx,QWORD PTR[rbx*1+r12]
- cmovge r12,rsp
- vaesdec xmm6,xmm6,xmm1
- cmovg rbx,rsp
- vaesdec xmm7,xmm7,xmm1
- sub rbx,r12
- vaesdec xmm8,xmm8,xmm1
- vmovdqu xmm10,XMMWORD PTR[16+r12]
- mov QWORD PTR[((64+32))+rsp],rbx
- vaesdec xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((-8))+rsi]
- lea r12,QWORD PTR[16+rbx*1+r12]
- vaesdec xmm2,xmm2,xmm0
- cmp ecx,DWORD PTR[((32+20))+rsp]
- mov rbx,QWORD PTR[((64+40))+rsp]
- vaesdec xmm3,xmm3,xmm0
- prefetcht0 [31+r13]
- vaesdec xmm4,xmm4,xmm0
- prefetcht0 [15+r11]
- vaesdec xmm5,xmm5,xmm0
- lea rbx,QWORD PTR[r13*1+rbx]
- cmovge r13,rsp
- vaesdec xmm6,xmm6,xmm0
- cmovg rbx,rsp
- vaesdec xmm7,xmm7,xmm0
- sub rbx,r13
- vaesdec xmm8,xmm8,xmm0
- vmovdqu xmm11,XMMWORD PTR[16+r13]
- mov QWORD PTR[((64+40))+rsp],rbx
- vaesdec xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[8+rsi]
- lea r13,QWORD PTR[16+rbx*1+r13]
- vaesdec xmm2,xmm2,xmm1
- cmp ecx,DWORD PTR[((32+24))+rsp]
- mov rbx,QWORD PTR[((64+48))+rsp]
- vaesdec xmm3,xmm3,xmm1
- prefetcht0 [31+r14]
- vaesdec xmm4,xmm4,xmm1
- prefetcht0 [15+r12]
- vaesdec xmm5,xmm5,xmm1
- lea rbx,QWORD PTR[rbx*1+r14]
- cmovge r14,rsp
- vaesdec xmm6,xmm6,xmm1
- cmovg rbx,rsp
- vaesdec xmm7,xmm7,xmm1
- sub rbx,r14
- vaesdec xmm8,xmm8,xmm1
- vmovdqu xmm12,XMMWORD PTR[16+r14]
- mov QWORD PTR[((64+48))+rsp],rbx
- vaesdec xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[24+rsi]
- lea r14,QWORD PTR[16+rbx*1+r14]
- vaesdec xmm2,xmm2,xmm0
- cmp ecx,DWORD PTR[((32+28))+rsp]
- mov rbx,QWORD PTR[((64+56))+rsp]
- vaesdec xmm3,xmm3,xmm0
- prefetcht0 [31+r15]
- vaesdec xmm4,xmm4,xmm0
- prefetcht0 [15+r13]
- vaesdec xmm5,xmm5,xmm0
- lea rbx,QWORD PTR[rbx*1+r15]
- cmovge r15,rsp
- vaesdec xmm6,xmm6,xmm0
- cmovg rbx,rsp
- vaesdec xmm7,xmm7,xmm0
- sub rbx,r15
- vaesdec xmm8,xmm8,xmm0
- vmovdqu xmm13,XMMWORD PTR[16+r15]
- mov QWORD PTR[((64+56))+rsp],rbx
- vaesdec xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[40+rsi]
- lea r15,QWORD PTR[16+rbx*1+r15]
- vmovdqu xmm14,XMMWORD PTR[32+rsp]
- prefetcht0 [15+r14]
- prefetcht0 [15+r15]
- cmp eax,11
- jb $L$dec8x_tail
-
- vaesdec xmm2,xmm2,xmm1
- vaesdec xmm3,xmm3,xmm1
- vaesdec xmm4,xmm4,xmm1
- vaesdec xmm5,xmm5,xmm1
- vaesdec xmm6,xmm6,xmm1
- vaesdec xmm7,xmm7,xmm1
- vaesdec xmm8,xmm8,xmm1
- vaesdec xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((176-120))+rsi]
-
- vaesdec xmm2,xmm2,xmm0
- vaesdec xmm3,xmm3,xmm0
- vaesdec xmm4,xmm4,xmm0
- vaesdec xmm5,xmm5,xmm0
- vaesdec xmm6,xmm6,xmm0
- vaesdec xmm7,xmm7,xmm0
- vaesdec xmm8,xmm8,xmm0
- vaesdec xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[((192-120))+rsi]
- je $L$dec8x_tail
-
- vaesdec xmm2,xmm2,xmm1
- vaesdec xmm3,xmm3,xmm1
- vaesdec xmm4,xmm4,xmm1
- vaesdec xmm5,xmm5,xmm1
- vaesdec xmm6,xmm6,xmm1
- vaesdec xmm7,xmm7,xmm1
- vaesdec xmm8,xmm8,xmm1
- vaesdec xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((208-120))+rsi]
-
- vaesdec xmm2,xmm2,xmm0
- vaesdec xmm3,xmm3,xmm0
- vaesdec xmm4,xmm4,xmm0
- vaesdec xmm5,xmm5,xmm0
- vaesdec xmm6,xmm6,xmm0
- vaesdec xmm7,xmm7,xmm0
- vaesdec xmm8,xmm8,xmm0
- vaesdec xmm9,xmm9,xmm0
- vmovups xmm0,XMMWORD PTR[((224-120))+rsi]
-
-$L$dec8x_tail::
- vaesdec xmm2,xmm2,xmm1
- vpxor xmm15,xmm15,xmm15
- vaesdec xmm3,xmm3,xmm1
- vaesdec xmm4,xmm4,xmm1
- vpcmpgtd xmm15,xmm14,xmm15
- vaesdec xmm5,xmm5,xmm1
- vaesdec xmm6,xmm6,xmm1
- vpaddd xmm15,xmm15,xmm14
- vmovdqu xmm14,XMMWORD PTR[48+rsp]
- vaesdec xmm7,xmm7,xmm1
- mov rbx,QWORD PTR[64+rsp]
- vaesdec xmm8,xmm8,xmm1
- vaesdec xmm9,xmm9,xmm1
- vmovups xmm1,XMMWORD PTR[((16-120))+rsi]
-
- vaesdeclast xmm2,xmm2,xmm0
- vmovdqa XMMWORD PTR[32+rsp],xmm15
- vpxor xmm15,xmm15,xmm15
- vaesdeclast xmm3,xmm3,xmm0
- vpxor xmm2,xmm2,XMMWORD PTR[rbp]
- vaesdeclast xmm4,xmm4,xmm0
- vpxor xmm3,xmm3,XMMWORD PTR[16+rbp]
- vpcmpgtd xmm15,xmm14,xmm15
- vaesdeclast xmm5,xmm5,xmm0
- vpxor xmm4,xmm4,XMMWORD PTR[32+rbp]
- vaesdeclast xmm6,xmm6,xmm0
- vpxor xmm5,xmm5,XMMWORD PTR[48+rbp]
- vpaddd xmm14,xmm14,xmm15
- vmovdqu xmm15,XMMWORD PTR[((-120))+rsi]
- vaesdeclast xmm7,xmm7,xmm0
- vpxor xmm6,xmm6,XMMWORD PTR[64+rbp]
- vaesdeclast xmm8,xmm8,xmm0
- vpxor xmm7,xmm7,XMMWORD PTR[80+rbp]
- vmovdqa XMMWORD PTR[48+rsp],xmm14
- vaesdeclast xmm9,xmm9,xmm0
- vpxor xmm8,xmm8,XMMWORD PTR[96+rbp]
- vmovups xmm0,XMMWORD PTR[((32-120))+rsi]
-
- vmovups XMMWORD PTR[(-16)+r8],xmm2
- sub r8,rbx
- vmovdqu xmm2,XMMWORD PTR[((128+0))+rsp]
- vpxor xmm9,xmm9,XMMWORD PTR[112+rbp]
- vmovups XMMWORD PTR[(-16)+r9],xmm3
- sub r9,QWORD PTR[72+rsp]
- vmovdqu XMMWORD PTR[rbp],xmm2
- vpxor xmm2,xmm2,xmm15
- vmovdqu xmm3,XMMWORD PTR[((128+16))+rsp]
- vmovups XMMWORD PTR[(-16)+r10],xmm4
- sub r10,QWORD PTR[80+rsp]
- vmovdqu XMMWORD PTR[16+rbp],xmm3
- vpxor xmm3,xmm3,xmm15
- vmovdqu xmm4,XMMWORD PTR[((128+32))+rsp]
- vmovups XMMWORD PTR[(-16)+r11],xmm5
- sub r11,QWORD PTR[88+rsp]
- vmovdqu XMMWORD PTR[32+rbp],xmm4
- vpxor xmm4,xmm4,xmm15
- vmovdqu xmm5,XMMWORD PTR[((128+48))+rsp]
- vmovups XMMWORD PTR[(-16)+r12],xmm6
- sub r12,QWORD PTR[96+rsp]
- vmovdqu XMMWORD PTR[48+rbp],xmm5
- vpxor xmm5,xmm5,xmm15
- vmovdqu XMMWORD PTR[64+rbp],xmm10
- vpxor xmm6,xmm15,xmm10
- vmovups XMMWORD PTR[(-16)+r13],xmm7
- sub r13,QWORD PTR[104+rsp]
- vmovdqu XMMWORD PTR[80+rbp],xmm11
- vpxor xmm7,xmm15,xmm11
- vmovups XMMWORD PTR[(-16)+r14],xmm8
- sub r14,QWORD PTR[112+rsp]
- vmovdqu XMMWORD PTR[96+rbp],xmm12
- vpxor xmm8,xmm15,xmm12
- vmovups XMMWORD PTR[(-16)+r15],xmm9
- sub r15,QWORD PTR[120+rsp]
- vmovdqu XMMWORD PTR[112+rbp],xmm13
- vpxor xmm9,xmm15,xmm13
-
- xor rbp,128
- dec edx
- jnz $L$oop_dec8x
-
- mov rax,QWORD PTR[16+rsp]
-
-
-
-
-
-
-$L$dec8x_done::
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-216))+rax]
- movaps xmm7,XMMWORD PTR[((-200))+rax]
- movaps xmm8,XMMWORD PTR[((-184))+rax]
- movaps xmm9,XMMWORD PTR[((-168))+rax]
- movaps xmm10,XMMWORD PTR[((-152))+rax]
- movaps xmm11,XMMWORD PTR[((-136))+rax]
- movaps xmm12,XMMWORD PTR[((-120))+rax]
- movaps xmm13,XMMWORD PTR[((-104))+rax]
- movaps xmm14,XMMWORD PTR[((-88))+rax]
- movaps xmm15,XMMWORD PTR[((-72))+rax]
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$dec8x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_multi_cbc_decrypt_avx::
-aesni_multi_cbc_decrypt_avx ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
-
- mov rax,QWORD PTR[16+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
- lea rsi,QWORD PTR[((-56-160))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_aesni_multi_cbc_encrypt
- DD imagerel $L$SEH_end_aesni_multi_cbc_encrypt
- DD imagerel $L$SEH_info_aesni_multi_cbc_encrypt
- DD imagerel $L$SEH_begin_aesni_multi_cbc_decrypt
- DD imagerel $L$SEH_end_aesni_multi_cbc_decrypt
- DD imagerel $L$SEH_info_aesni_multi_cbc_decrypt
- DD imagerel $L$SEH_begin_aesni_multi_cbc_encrypt_avx
- DD imagerel $L$SEH_end_aesni_multi_cbc_encrypt_avx
- DD imagerel $L$SEH_info_aesni_multi_cbc_encrypt_avx
- DD imagerel $L$SEH_begin_aesni_multi_cbc_decrypt_avx
- DD imagerel $L$SEH_end_aesni_multi_cbc_decrypt_avx
- DD imagerel $L$SEH_info_aesni_multi_cbc_decrypt_avx
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_aesni_multi_cbc_encrypt::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$enc4x_body,imagerel $L$enc4x_epilogue
-$L$SEH_info_aesni_multi_cbc_decrypt::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$dec4x_body,imagerel $L$dec4x_epilogue
-$L$SEH_info_aesni_multi_cbc_encrypt_avx::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$enc8x_body,imagerel $L$enc8x_epilogue
-$L$SEH_info_aesni_multi_cbc_decrypt_avx::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$dec8x_body,imagerel $L$dec8x_epilogue
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC aesni_multi_cbc_encrypt
+
+ALIGN 32
+aesni_multi_cbc_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_multi_cbc_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ cmp edx,2
+ jb $L$enc_non_avx
+ mov ecx,DWORD PTR[((OPENSSL_ia32cap_P+4))]
+ test ecx,268435456
+ jnz _avx_cbc_enc_shortcut
+ jmp $L$enc_non_avx
+ALIGN 16
+$L$enc_non_avx::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[64+rsp],xmm10
+ movaps XMMWORD PTR[80+rsp],xmm11
+ movaps XMMWORD PTR[96+rsp],xmm12
+ movaps XMMWORD PTR[(-104)+rax],xmm13
+ movaps XMMWORD PTR[(-88)+rax],xmm14
+ movaps XMMWORD PTR[(-72)+rax],xmm15
+
+
+
+
+
+
+ sub rsp,48
+ and rsp,-64
+ mov QWORD PTR[16+rsp],rax
+
+
+$L$enc4x_body::
+ movdqu xmm12,XMMWORD PTR[rsi]
+ lea rsi,QWORD PTR[120+rsi]
+ lea rdi,QWORD PTR[80+rdi]
+
+$L$enc4x_loop_grande::
+ mov DWORD PTR[24+rsp],edx
+ xor edx,edx
+ mov ecx,DWORD PTR[((-64))+rdi]
+ mov r8,QWORD PTR[((-80))+rdi]
+ cmp ecx,edx
+ mov r12,QWORD PTR[((-72))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ movdqu xmm2,XMMWORD PTR[((-56))+rdi]
+ mov DWORD PTR[32+rsp],ecx
+ cmovle r8,rsp
+ mov ecx,DWORD PTR[((-24))+rdi]
+ mov r9,QWORD PTR[((-40))+rdi]
+ cmp ecx,edx
+ mov r13,QWORD PTR[((-32))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ movdqu xmm3,XMMWORD PTR[((-16))+rdi]
+ mov DWORD PTR[36+rsp],ecx
+ cmovle r9,rsp
+ mov ecx,DWORD PTR[16+rdi]
+ mov r10,QWORD PTR[rdi]
+ cmp ecx,edx
+ mov r14,QWORD PTR[8+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ movdqu xmm4,XMMWORD PTR[24+rdi]
+ mov DWORD PTR[40+rsp],ecx
+ cmovle r10,rsp
+ mov ecx,DWORD PTR[56+rdi]
+ mov r11,QWORD PTR[40+rdi]
+ cmp ecx,edx
+ mov r15,QWORD PTR[48+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ movdqu xmm5,XMMWORD PTR[64+rdi]
+ mov DWORD PTR[44+rsp],ecx
+ cmovle r11,rsp
+ test edx,edx
+ jz $L$enc4x_done
+
+ movups xmm1,XMMWORD PTR[((16-120))+rsi]
+ pxor xmm2,xmm12
+ movups xmm0,XMMWORD PTR[((32-120))+rsi]
+ pxor xmm3,xmm12
+ mov eax,DWORD PTR[((240-120))+rsi]
+ pxor xmm4,xmm12
+ movdqu xmm6,XMMWORD PTR[r8]
+ pxor xmm5,xmm12
+ movdqu xmm7,XMMWORD PTR[r9]
+ pxor xmm2,xmm6
+ movdqu xmm8,XMMWORD PTR[r10]
+ pxor xmm3,xmm7
+ movdqu xmm9,XMMWORD PTR[r11]
+ pxor xmm4,xmm8
+ pxor xmm5,xmm9
+ movdqa xmm10,XMMWORD PTR[32+rsp]
+ xor rbx,rbx
+ jmp $L$oop_enc4x
+
+ALIGN 32
+$L$oop_enc4x::
+ add rbx,16
+ lea rbp,QWORD PTR[16+rsp]
+ mov ecx,1
+ sub rbp,rbx
+
+DB 102,15,56,220,209
+ prefetcht0 [31+rbx*1+r8]
+ prefetcht0 [31+rbx*1+r9]
+DB 102,15,56,220,217
+ prefetcht0 [31+rbx*1+r10]
+ prefetcht0 [31+rbx*1+r10]
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[((48-120))+rsi]
+ cmp ecx,DWORD PTR[32+rsp]
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+ cmovge r8,rbp
+ cmovg r12,rbp
+DB 102,15,56,220,232
+ movups xmm0,XMMWORD PTR[((-56))+rsi]
+ cmp ecx,DWORD PTR[36+rsp]
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+ cmovge r9,rbp
+ cmovg r13,rbp
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[((-40))+rsi]
+ cmp ecx,DWORD PTR[40+rsp]
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+ cmovge r10,rbp
+ cmovg r14,rbp
+DB 102,15,56,220,232
+ movups xmm0,XMMWORD PTR[((-24))+rsi]
+ cmp ecx,DWORD PTR[44+rsp]
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+ cmovge r11,rbp
+ cmovg r15,rbp
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[((-8))+rsi]
+ movdqa xmm11,xmm10
+DB 102,15,56,220,208
+ prefetcht0 [15+rbx*1+r12]
+ prefetcht0 [15+rbx*1+r13]
+DB 102,15,56,220,216
+ prefetcht0 [15+rbx*1+r14]
+ prefetcht0 [15+rbx*1+r15]
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ movups xmm0,XMMWORD PTR[((128-120))+rsi]
+ pxor xmm12,xmm12
+
+DB 102,15,56,220,209
+ pcmpgtd xmm11,xmm12
+ movdqu xmm12,XMMWORD PTR[((-120))+rsi]
+DB 102,15,56,220,217
+ paddd xmm10,xmm11
+ movdqa XMMWORD PTR[32+rsp],xmm10
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[((144-120))+rsi]
+
+ cmp eax,11
+
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ movups xmm0,XMMWORD PTR[((160-120))+rsi]
+
+ jb $L$enc4x_tail
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[((176-120))+rsi]
+
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ movups xmm0,XMMWORD PTR[((192-120))+rsi]
+
+ je $L$enc4x_tail
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[((208-120))+rsi]
+
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ movups xmm0,XMMWORD PTR[((224-120))+rsi]
+ jmp $L$enc4x_tail
+
+ALIGN 32
+$L$enc4x_tail::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movdqu xmm6,XMMWORD PTR[rbx*1+r8]
+ movdqu xmm1,XMMWORD PTR[((16-120))+rsi]
+
+DB 102,15,56,221,208
+ movdqu xmm7,XMMWORD PTR[rbx*1+r9]
+ pxor xmm6,xmm12
+DB 102,15,56,221,216
+ movdqu xmm8,XMMWORD PTR[rbx*1+r10]
+ pxor xmm7,xmm12
+DB 102,15,56,221,224
+ movdqu xmm9,XMMWORD PTR[rbx*1+r11]
+ pxor xmm8,xmm12
+DB 102,15,56,221,232
+ movdqu xmm0,XMMWORD PTR[((32-120))+rsi]
+ pxor xmm9,xmm12
+
+ movups XMMWORD PTR[(-16)+rbx*1+r12],xmm2
+ pxor xmm2,xmm6
+ movups XMMWORD PTR[(-16)+rbx*1+r13],xmm3
+ pxor xmm3,xmm7
+ movups XMMWORD PTR[(-16)+rbx*1+r14],xmm4
+ pxor xmm4,xmm8
+ movups XMMWORD PTR[(-16)+rbx*1+r15],xmm5
+ pxor xmm5,xmm9
+
+ dec edx
+ jnz $L$oop_enc4x
+
+ mov rax,QWORD PTR[16+rsp]
+
+ mov edx,DWORD PTR[24+rsp]
+
+
+
+
+
+
+
+
+
+
+ lea rdi,QWORD PTR[160+rdi]
+ dec edx
+ jnz $L$enc4x_loop_grande
+
+$L$enc4x_done::
+ movaps xmm6,XMMWORD PTR[((-216))+rax]
+ movaps xmm7,XMMWORD PTR[((-200))+rax]
+ movaps xmm8,XMMWORD PTR[((-184))+rax]
+ movaps xmm9,XMMWORD PTR[((-168))+rax]
+ movaps xmm10,XMMWORD PTR[((-152))+rax]
+ movaps xmm11,XMMWORD PTR[((-136))+rax]
+ movaps xmm12,XMMWORD PTR[((-120))+rax]
+
+
+
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$enc4x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_multi_cbc_encrypt::
+aesni_multi_cbc_encrypt ENDP
+
+PUBLIC aesni_multi_cbc_decrypt
+
+ALIGN 32
+aesni_multi_cbc_decrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_multi_cbc_decrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ cmp edx,2
+ jb $L$dec_non_avx
+ mov ecx,DWORD PTR[((OPENSSL_ia32cap_P+4))]
+ test ecx,268435456
+ jnz _avx_cbc_dec_shortcut
+ jmp $L$dec_non_avx
+ALIGN 16
+$L$dec_non_avx::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[64+rsp],xmm10
+ movaps XMMWORD PTR[80+rsp],xmm11
+ movaps XMMWORD PTR[96+rsp],xmm12
+ movaps XMMWORD PTR[(-104)+rax],xmm13
+ movaps XMMWORD PTR[(-88)+rax],xmm14
+ movaps XMMWORD PTR[(-72)+rax],xmm15
+
+
+
+
+
+
+ sub rsp,48
+ and rsp,-64
+ mov QWORD PTR[16+rsp],rax
+
+
+$L$dec4x_body::
+ movdqu xmm12,XMMWORD PTR[rsi]
+ lea rsi,QWORD PTR[120+rsi]
+ lea rdi,QWORD PTR[80+rdi]
+
+$L$dec4x_loop_grande::
+ mov DWORD PTR[24+rsp],edx
+ xor edx,edx
+ mov ecx,DWORD PTR[((-64))+rdi]
+ mov r8,QWORD PTR[((-80))+rdi]
+ cmp ecx,edx
+ mov r12,QWORD PTR[((-72))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ movdqu xmm6,XMMWORD PTR[((-56))+rdi]
+ mov DWORD PTR[32+rsp],ecx
+ cmovle r8,rsp
+ mov ecx,DWORD PTR[((-24))+rdi]
+ mov r9,QWORD PTR[((-40))+rdi]
+ cmp ecx,edx
+ mov r13,QWORD PTR[((-32))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ movdqu xmm7,XMMWORD PTR[((-16))+rdi]
+ mov DWORD PTR[36+rsp],ecx
+ cmovle r9,rsp
+ mov ecx,DWORD PTR[16+rdi]
+ mov r10,QWORD PTR[rdi]
+ cmp ecx,edx
+ mov r14,QWORD PTR[8+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ movdqu xmm8,XMMWORD PTR[24+rdi]
+ mov DWORD PTR[40+rsp],ecx
+ cmovle r10,rsp
+ mov ecx,DWORD PTR[56+rdi]
+ mov r11,QWORD PTR[40+rdi]
+ cmp ecx,edx
+ mov r15,QWORD PTR[48+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ movdqu xmm9,XMMWORD PTR[64+rdi]
+ mov DWORD PTR[44+rsp],ecx
+ cmovle r11,rsp
+ test edx,edx
+ jz $L$dec4x_done
+
+ movups xmm1,XMMWORD PTR[((16-120))+rsi]
+ movups xmm0,XMMWORD PTR[((32-120))+rsi]
+ mov eax,DWORD PTR[((240-120))+rsi]
+ movdqu xmm2,XMMWORD PTR[r8]
+ movdqu xmm3,XMMWORD PTR[r9]
+ pxor xmm2,xmm12
+ movdqu xmm4,XMMWORD PTR[r10]
+ pxor xmm3,xmm12
+ movdqu xmm5,XMMWORD PTR[r11]
+ pxor xmm4,xmm12
+ pxor xmm5,xmm12
+ movdqa xmm10,XMMWORD PTR[32+rsp]
+ xor rbx,rbx
+ jmp $L$oop_dec4x
+
+ALIGN 32
+$L$oop_dec4x::
+ add rbx,16
+ lea rbp,QWORD PTR[16+rsp]
+ mov ecx,1
+ sub rbp,rbx
+
+DB 102,15,56,222,209
+ prefetcht0 [31+rbx*1+r8]
+ prefetcht0 [31+rbx*1+r9]
+DB 102,15,56,222,217
+ prefetcht0 [31+rbx*1+r10]
+ prefetcht0 [31+rbx*1+r11]
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR[((48-120))+rsi]
+ cmp ecx,DWORD PTR[32+rsp]
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+ cmovge r8,rbp
+ cmovg r12,rbp
+DB 102,15,56,222,232
+ movups xmm0,XMMWORD PTR[((-56))+rsi]
+ cmp ecx,DWORD PTR[36+rsp]
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+ cmovge r9,rbp
+ cmovg r13,rbp
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR[((-40))+rsi]
+ cmp ecx,DWORD PTR[40+rsp]
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+ cmovge r10,rbp
+ cmovg r14,rbp
+DB 102,15,56,222,232
+ movups xmm0,XMMWORD PTR[((-24))+rsi]
+ cmp ecx,DWORD PTR[44+rsp]
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+ cmovge r11,rbp
+ cmovg r15,rbp
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR[((-8))+rsi]
+ movdqa xmm11,xmm10
+DB 102,15,56,222,208
+ prefetcht0 [15+rbx*1+r12]
+ prefetcht0 [15+rbx*1+r13]
+DB 102,15,56,222,216
+ prefetcht0 [15+rbx*1+r14]
+ prefetcht0 [15+rbx*1+r15]
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+ movups xmm0,XMMWORD PTR[((128-120))+rsi]
+ pxor xmm12,xmm12
+
+DB 102,15,56,222,209
+ pcmpgtd xmm11,xmm12
+ movdqu xmm12,XMMWORD PTR[((-120))+rsi]
+DB 102,15,56,222,217
+ paddd xmm10,xmm11
+ movdqa XMMWORD PTR[32+rsp],xmm10
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR[((144-120))+rsi]
+
+ cmp eax,11
+
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+ movups xmm0,XMMWORD PTR[((160-120))+rsi]
+
+ jb $L$dec4x_tail
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR[((176-120))+rsi]
+
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+ movups xmm0,XMMWORD PTR[((192-120))+rsi]
+
+ je $L$dec4x_tail
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR[((208-120))+rsi]
+
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+ movups xmm0,XMMWORD PTR[((224-120))+rsi]
+ jmp $L$dec4x_tail
+
+ALIGN 32
+$L$dec4x_tail::
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+ pxor xmm6,xmm0
+ pxor xmm7,xmm0
+DB 102,15,56,222,233
+ movdqu xmm1,XMMWORD PTR[((16-120))+rsi]
+ pxor xmm8,xmm0
+ pxor xmm9,xmm0
+ movdqu xmm0,XMMWORD PTR[((32-120))+rsi]
+
+DB 102,15,56,223,214
+DB 102,15,56,223,223
+ movdqu xmm6,XMMWORD PTR[((-16))+rbx*1+r8]
+ movdqu xmm7,XMMWORD PTR[((-16))+rbx*1+r9]
+DB 102,65,15,56,223,224
+DB 102,65,15,56,223,233
+ movdqu xmm8,XMMWORD PTR[((-16))+rbx*1+r10]
+ movdqu xmm9,XMMWORD PTR[((-16))+rbx*1+r11]
+
+ movups XMMWORD PTR[(-16)+rbx*1+r12],xmm2
+ movdqu xmm2,XMMWORD PTR[rbx*1+r8]
+ movups XMMWORD PTR[(-16)+rbx*1+r13],xmm3
+ movdqu xmm3,XMMWORD PTR[rbx*1+r9]
+ pxor xmm2,xmm12
+ movups XMMWORD PTR[(-16)+rbx*1+r14],xmm4
+ movdqu xmm4,XMMWORD PTR[rbx*1+r10]
+ pxor xmm3,xmm12
+ movups XMMWORD PTR[(-16)+rbx*1+r15],xmm5
+ movdqu xmm5,XMMWORD PTR[rbx*1+r11]
+ pxor xmm4,xmm12
+ pxor xmm5,xmm12
+
+ dec edx
+ jnz $L$oop_dec4x
+
+ mov rax,QWORD PTR[16+rsp]
+
+ mov edx,DWORD PTR[24+rsp]
+
+ lea rdi,QWORD PTR[160+rdi]
+ dec edx
+ jnz $L$dec4x_loop_grande
+
+$L$dec4x_done::
+ movaps xmm6,XMMWORD PTR[((-216))+rax]
+ movaps xmm7,XMMWORD PTR[((-200))+rax]
+ movaps xmm8,XMMWORD PTR[((-184))+rax]
+ movaps xmm9,XMMWORD PTR[((-168))+rax]
+ movaps xmm10,XMMWORD PTR[((-152))+rax]
+ movaps xmm11,XMMWORD PTR[((-136))+rax]
+ movaps xmm12,XMMWORD PTR[((-120))+rax]
+
+
+
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$dec4x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_multi_cbc_decrypt::
+aesni_multi_cbc_decrypt ENDP
+
+ALIGN 32
+aesni_multi_cbc_encrypt_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_multi_cbc_encrypt_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+_avx_cbc_enc_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[64+rsp],xmm10
+ movaps XMMWORD PTR[80+rsp],xmm11
+ movaps XMMWORD PTR[(-120)+rax],xmm12
+ movaps XMMWORD PTR[(-104)+rax],xmm13
+ movaps XMMWORD PTR[(-88)+rax],xmm14
+ movaps XMMWORD PTR[(-72)+rax],xmm15
+
+
+
+
+
+
+
+
+ sub rsp,192
+ and rsp,-128
+ mov QWORD PTR[16+rsp],rax
+
+
+$L$enc8x_body::
+ vzeroupper
+ vmovdqu xmm15,XMMWORD PTR[rsi]
+ lea rsi,QWORD PTR[120+rsi]
+ lea rdi,QWORD PTR[160+rdi]
+ shr edx,1
+
+$L$enc8x_loop_grande::
+
+ xor edx,edx
+ mov ecx,DWORD PTR[((-144))+rdi]
+ mov r8,QWORD PTR[((-160))+rdi]
+ cmp ecx,edx
+ mov rbx,QWORD PTR[((-152))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm2,XMMWORD PTR[((-136))+rdi]
+ mov DWORD PTR[32+rsp],ecx
+ cmovle r8,rsp
+ sub rbx,r8
+ mov QWORD PTR[64+rsp],rbx
+ mov ecx,DWORD PTR[((-104))+rdi]
+ mov r9,QWORD PTR[((-120))+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[((-112))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm3,XMMWORD PTR[((-96))+rdi]
+ mov DWORD PTR[36+rsp],ecx
+ cmovle r9,rsp
+ sub rbp,r9
+ mov QWORD PTR[72+rsp],rbp
+ mov ecx,DWORD PTR[((-64))+rdi]
+ mov r10,QWORD PTR[((-80))+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[((-72))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm4,XMMWORD PTR[((-56))+rdi]
+ mov DWORD PTR[40+rsp],ecx
+ cmovle r10,rsp
+ sub rbp,r10
+ mov QWORD PTR[80+rsp],rbp
+ mov ecx,DWORD PTR[((-24))+rdi]
+ mov r11,QWORD PTR[((-40))+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[((-32))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm5,XMMWORD PTR[((-16))+rdi]
+ mov DWORD PTR[44+rsp],ecx
+ cmovle r11,rsp
+ sub rbp,r11
+ mov QWORD PTR[88+rsp],rbp
+ mov ecx,DWORD PTR[16+rdi]
+ mov r12,QWORD PTR[rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[8+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm6,XMMWORD PTR[24+rdi]
+ mov DWORD PTR[48+rsp],ecx
+ cmovle r12,rsp
+ sub rbp,r12
+ mov QWORD PTR[96+rsp],rbp
+ mov ecx,DWORD PTR[56+rdi]
+ mov r13,QWORD PTR[40+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[48+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm7,XMMWORD PTR[64+rdi]
+ mov DWORD PTR[52+rsp],ecx
+ cmovle r13,rsp
+ sub rbp,r13
+ mov QWORD PTR[104+rsp],rbp
+ mov ecx,DWORD PTR[96+rdi]
+ mov r14,QWORD PTR[80+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[88+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm8,XMMWORD PTR[104+rdi]
+ mov DWORD PTR[56+rsp],ecx
+ cmovle r14,rsp
+ sub rbp,r14
+ mov QWORD PTR[112+rsp],rbp
+ mov ecx,DWORD PTR[136+rdi]
+ mov r15,QWORD PTR[120+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[128+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm9,XMMWORD PTR[144+rdi]
+ mov DWORD PTR[60+rsp],ecx
+ cmovle r15,rsp
+ sub rbp,r15
+ mov QWORD PTR[120+rsp],rbp
+ test edx,edx
+ jz $L$enc8x_done
+
+ vmovups xmm1,XMMWORD PTR[((16-120))+rsi]
+ vmovups xmm0,XMMWORD PTR[((32-120))+rsi]
+ mov eax,DWORD PTR[((240-120))+rsi]
+
+ vpxor xmm10,xmm15,XMMWORD PTR[r8]
+ lea rbp,QWORD PTR[128+rsp]
+ vpxor xmm11,xmm15,XMMWORD PTR[r9]
+ vpxor xmm12,xmm15,XMMWORD PTR[r10]
+ vpxor xmm13,xmm15,XMMWORD PTR[r11]
+ vpxor xmm2,xmm2,xmm10
+ vpxor xmm10,xmm15,XMMWORD PTR[r12]
+ vpxor xmm3,xmm3,xmm11
+ vpxor xmm11,xmm15,XMMWORD PTR[r13]
+ vpxor xmm4,xmm4,xmm12
+ vpxor xmm12,xmm15,XMMWORD PTR[r14]
+ vpxor xmm5,xmm5,xmm13
+ vpxor xmm13,xmm15,XMMWORD PTR[r15]
+ vpxor xmm6,xmm6,xmm10
+ mov ecx,1
+ vpxor xmm7,xmm7,xmm11
+ vpxor xmm8,xmm8,xmm12
+ vpxor xmm9,xmm9,xmm13
+ jmp $L$oop_enc8x
+
+ALIGN 32
+$L$oop_enc8x::
+ vaesenc xmm2,xmm2,xmm1
+ cmp ecx,DWORD PTR[((32+0))+rsp]
+ vaesenc xmm3,xmm3,xmm1
+ prefetcht0 [31+r8]
+ vaesenc xmm4,xmm4,xmm1
+ vaesenc xmm5,xmm5,xmm1
+ lea rbx,QWORD PTR[rbx*1+r8]
+ cmovge r8,rsp
+ vaesenc xmm6,xmm6,xmm1
+ cmovg rbx,rsp
+ vaesenc xmm7,xmm7,xmm1
+ sub rbx,r8
+ vaesenc xmm8,xmm8,xmm1
+ vpxor xmm10,xmm15,XMMWORD PTR[16+r8]
+ mov QWORD PTR[((64+0))+rsp],rbx
+ vaesenc xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((-72))+rsi]
+ lea r8,QWORD PTR[16+rbx*1+r8]
+ vmovdqu XMMWORD PTR[rbp],xmm10
+ vaesenc xmm2,xmm2,xmm0
+ cmp ecx,DWORD PTR[((32+4))+rsp]
+ mov rbx,QWORD PTR[((64+8))+rsp]
+ vaesenc xmm3,xmm3,xmm0
+ prefetcht0 [31+r9]
+ vaesenc xmm4,xmm4,xmm0
+ vaesenc xmm5,xmm5,xmm0
+ lea rbx,QWORD PTR[rbx*1+r9]
+ cmovge r9,rsp
+ vaesenc xmm6,xmm6,xmm0
+ cmovg rbx,rsp
+ vaesenc xmm7,xmm7,xmm0
+ sub rbx,r9
+ vaesenc xmm8,xmm8,xmm0
+ vpxor xmm11,xmm15,XMMWORD PTR[16+r9]
+ mov QWORD PTR[((64+8))+rsp],rbx
+ vaesenc xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[((-56))+rsi]
+ lea r9,QWORD PTR[16+rbx*1+r9]
+ vmovdqu XMMWORD PTR[16+rbp],xmm11
+ vaesenc xmm2,xmm2,xmm1
+ cmp ecx,DWORD PTR[((32+8))+rsp]
+ mov rbx,QWORD PTR[((64+16))+rsp]
+ vaesenc xmm3,xmm3,xmm1
+ prefetcht0 [31+r10]
+ vaesenc xmm4,xmm4,xmm1
+ prefetcht0 [15+r8]
+ vaesenc xmm5,xmm5,xmm1
+ lea rbx,QWORD PTR[rbx*1+r10]
+ cmovge r10,rsp
+ vaesenc xmm6,xmm6,xmm1
+ cmovg rbx,rsp
+ vaesenc xmm7,xmm7,xmm1
+ sub rbx,r10
+ vaesenc xmm8,xmm8,xmm1
+ vpxor xmm12,xmm15,XMMWORD PTR[16+r10]
+ mov QWORD PTR[((64+16))+rsp],rbx
+ vaesenc xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((-40))+rsi]
+ lea r10,QWORD PTR[16+rbx*1+r10]
+ vmovdqu XMMWORD PTR[32+rbp],xmm12
+ vaesenc xmm2,xmm2,xmm0
+ cmp ecx,DWORD PTR[((32+12))+rsp]
+ mov rbx,QWORD PTR[((64+24))+rsp]
+ vaesenc xmm3,xmm3,xmm0
+ prefetcht0 [31+r11]
+ vaesenc xmm4,xmm4,xmm0
+ prefetcht0 [15+r9]
+ vaesenc xmm5,xmm5,xmm0
+ lea rbx,QWORD PTR[rbx*1+r11]
+ cmovge r11,rsp
+ vaesenc xmm6,xmm6,xmm0
+ cmovg rbx,rsp
+ vaesenc xmm7,xmm7,xmm0
+ sub rbx,r11
+ vaesenc xmm8,xmm8,xmm0
+ vpxor xmm13,xmm15,XMMWORD PTR[16+r11]
+ mov QWORD PTR[((64+24))+rsp],rbx
+ vaesenc xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[((-24))+rsi]
+ lea r11,QWORD PTR[16+rbx*1+r11]
+ vmovdqu XMMWORD PTR[48+rbp],xmm13
+ vaesenc xmm2,xmm2,xmm1
+ cmp ecx,DWORD PTR[((32+16))+rsp]
+ mov rbx,QWORD PTR[((64+32))+rsp]
+ vaesenc xmm3,xmm3,xmm1
+ prefetcht0 [31+r12]
+ vaesenc xmm4,xmm4,xmm1
+ prefetcht0 [15+r10]
+ vaesenc xmm5,xmm5,xmm1
+ lea rbx,QWORD PTR[rbx*1+r12]
+ cmovge r12,rsp
+ vaesenc xmm6,xmm6,xmm1
+ cmovg rbx,rsp
+ vaesenc xmm7,xmm7,xmm1
+ sub rbx,r12
+ vaesenc xmm8,xmm8,xmm1
+ vpxor xmm10,xmm15,XMMWORD PTR[16+r12]
+ mov QWORD PTR[((64+32))+rsp],rbx
+ vaesenc xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((-8))+rsi]
+ lea r12,QWORD PTR[16+rbx*1+r12]
+ vaesenc xmm2,xmm2,xmm0
+ cmp ecx,DWORD PTR[((32+20))+rsp]
+ mov rbx,QWORD PTR[((64+40))+rsp]
+ vaesenc xmm3,xmm3,xmm0
+ prefetcht0 [31+r13]
+ vaesenc xmm4,xmm4,xmm0
+ prefetcht0 [15+r11]
+ vaesenc xmm5,xmm5,xmm0
+ lea rbx,QWORD PTR[r13*1+rbx]
+ cmovge r13,rsp
+ vaesenc xmm6,xmm6,xmm0
+ cmovg rbx,rsp
+ vaesenc xmm7,xmm7,xmm0
+ sub rbx,r13
+ vaesenc xmm8,xmm8,xmm0
+ vpxor xmm11,xmm15,XMMWORD PTR[16+r13]
+ mov QWORD PTR[((64+40))+rsp],rbx
+ vaesenc xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[8+rsi]
+ lea r13,QWORD PTR[16+rbx*1+r13]
+ vaesenc xmm2,xmm2,xmm1
+ cmp ecx,DWORD PTR[((32+24))+rsp]
+ mov rbx,QWORD PTR[((64+48))+rsp]
+ vaesenc xmm3,xmm3,xmm1
+ prefetcht0 [31+r14]
+ vaesenc xmm4,xmm4,xmm1
+ prefetcht0 [15+r12]
+ vaesenc xmm5,xmm5,xmm1
+ lea rbx,QWORD PTR[rbx*1+r14]
+ cmovge r14,rsp
+ vaesenc xmm6,xmm6,xmm1
+ cmovg rbx,rsp
+ vaesenc xmm7,xmm7,xmm1
+ sub rbx,r14
+ vaesenc xmm8,xmm8,xmm1
+ vpxor xmm12,xmm15,XMMWORD PTR[16+r14]
+ mov QWORD PTR[((64+48))+rsp],rbx
+ vaesenc xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[24+rsi]
+ lea r14,QWORD PTR[16+rbx*1+r14]
+ vaesenc xmm2,xmm2,xmm0
+ cmp ecx,DWORD PTR[((32+28))+rsp]
+ mov rbx,QWORD PTR[((64+56))+rsp]
+ vaesenc xmm3,xmm3,xmm0
+ prefetcht0 [31+r15]
+ vaesenc xmm4,xmm4,xmm0
+ prefetcht0 [15+r13]
+ vaesenc xmm5,xmm5,xmm0
+ lea rbx,QWORD PTR[rbx*1+r15]
+ cmovge r15,rsp
+ vaesenc xmm6,xmm6,xmm0
+ cmovg rbx,rsp
+ vaesenc xmm7,xmm7,xmm0
+ sub rbx,r15
+ vaesenc xmm8,xmm8,xmm0
+ vpxor xmm13,xmm15,XMMWORD PTR[16+r15]
+ mov QWORD PTR[((64+56))+rsp],rbx
+ vaesenc xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[40+rsi]
+ lea r15,QWORD PTR[16+rbx*1+r15]
+ vmovdqu xmm14,XMMWORD PTR[32+rsp]
+ prefetcht0 [15+r14]
+ prefetcht0 [15+r15]
+ cmp eax,11
+ jb $L$enc8x_tail
+
+ vaesenc xmm2,xmm2,xmm1
+ vaesenc xmm3,xmm3,xmm1
+ vaesenc xmm4,xmm4,xmm1
+ vaesenc xmm5,xmm5,xmm1
+ vaesenc xmm6,xmm6,xmm1
+ vaesenc xmm7,xmm7,xmm1
+ vaesenc xmm8,xmm8,xmm1
+ vaesenc xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((176-120))+rsi]
+
+ vaesenc xmm2,xmm2,xmm0
+ vaesenc xmm3,xmm3,xmm0
+ vaesenc xmm4,xmm4,xmm0
+ vaesenc xmm5,xmm5,xmm0
+ vaesenc xmm6,xmm6,xmm0
+ vaesenc xmm7,xmm7,xmm0
+ vaesenc xmm8,xmm8,xmm0
+ vaesenc xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[((192-120))+rsi]
+ je $L$enc8x_tail
+
+ vaesenc xmm2,xmm2,xmm1
+ vaesenc xmm3,xmm3,xmm1
+ vaesenc xmm4,xmm4,xmm1
+ vaesenc xmm5,xmm5,xmm1
+ vaesenc xmm6,xmm6,xmm1
+ vaesenc xmm7,xmm7,xmm1
+ vaesenc xmm8,xmm8,xmm1
+ vaesenc xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((208-120))+rsi]
+
+ vaesenc xmm2,xmm2,xmm0
+ vaesenc xmm3,xmm3,xmm0
+ vaesenc xmm4,xmm4,xmm0
+ vaesenc xmm5,xmm5,xmm0
+ vaesenc xmm6,xmm6,xmm0
+ vaesenc xmm7,xmm7,xmm0
+ vaesenc xmm8,xmm8,xmm0
+ vaesenc xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[((224-120))+rsi]
+
+$L$enc8x_tail::
+ vaesenc xmm2,xmm2,xmm1
+ vpxor xmm15,xmm15,xmm15
+ vaesenc xmm3,xmm3,xmm1
+ vaesenc xmm4,xmm4,xmm1
+ vpcmpgtd xmm15,xmm14,xmm15
+ vaesenc xmm5,xmm5,xmm1
+ vaesenc xmm6,xmm6,xmm1
+ vpaddd xmm15,xmm15,xmm14
+ vmovdqu xmm14,XMMWORD PTR[48+rsp]
+ vaesenc xmm7,xmm7,xmm1
+ mov rbx,QWORD PTR[64+rsp]
+ vaesenc xmm8,xmm8,xmm1
+ vaesenc xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((16-120))+rsi]
+
+ vaesenclast xmm2,xmm2,xmm0
+ vmovdqa XMMWORD PTR[32+rsp],xmm15
+ vpxor xmm15,xmm15,xmm15
+ vaesenclast xmm3,xmm3,xmm0
+ vaesenclast xmm4,xmm4,xmm0
+ vpcmpgtd xmm15,xmm14,xmm15
+ vaesenclast xmm5,xmm5,xmm0
+ vaesenclast xmm6,xmm6,xmm0
+ vpaddd xmm14,xmm14,xmm15
+ vmovdqu xmm15,XMMWORD PTR[((-120))+rsi]
+ vaesenclast xmm7,xmm7,xmm0
+ vaesenclast xmm8,xmm8,xmm0
+ vmovdqa XMMWORD PTR[48+rsp],xmm14
+ vaesenclast xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[((32-120))+rsi]
+
+ vmovups XMMWORD PTR[(-16)+r8],xmm2
+ sub r8,rbx
+ vpxor xmm2,xmm2,XMMWORD PTR[rbp]
+ vmovups XMMWORD PTR[(-16)+r9],xmm3
+ sub r9,QWORD PTR[72+rsp]
+ vpxor xmm3,xmm3,XMMWORD PTR[16+rbp]
+ vmovups XMMWORD PTR[(-16)+r10],xmm4
+ sub r10,QWORD PTR[80+rsp]
+ vpxor xmm4,xmm4,XMMWORD PTR[32+rbp]
+ vmovups XMMWORD PTR[(-16)+r11],xmm5
+ sub r11,QWORD PTR[88+rsp]
+ vpxor xmm5,xmm5,XMMWORD PTR[48+rbp]
+ vmovups XMMWORD PTR[(-16)+r12],xmm6
+ sub r12,QWORD PTR[96+rsp]
+ vpxor xmm6,xmm6,xmm10
+ vmovups XMMWORD PTR[(-16)+r13],xmm7
+ sub r13,QWORD PTR[104+rsp]
+ vpxor xmm7,xmm7,xmm11
+ vmovups XMMWORD PTR[(-16)+r14],xmm8
+ sub r14,QWORD PTR[112+rsp]
+ vpxor xmm8,xmm8,xmm12
+ vmovups XMMWORD PTR[(-16)+r15],xmm9
+ sub r15,QWORD PTR[120+rsp]
+ vpxor xmm9,xmm9,xmm13
+
+ dec edx
+ jnz $L$oop_enc8x
+
+ mov rax,QWORD PTR[16+rsp]
+
+
+
+
+
+
+$L$enc8x_done::
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-216))+rax]
+ movaps xmm7,XMMWORD PTR[((-200))+rax]
+ movaps xmm8,XMMWORD PTR[((-184))+rax]
+ movaps xmm9,XMMWORD PTR[((-168))+rax]
+ movaps xmm10,XMMWORD PTR[((-152))+rax]
+ movaps xmm11,XMMWORD PTR[((-136))+rax]
+ movaps xmm12,XMMWORD PTR[((-120))+rax]
+ movaps xmm13,XMMWORD PTR[((-104))+rax]
+ movaps xmm14,XMMWORD PTR[((-88))+rax]
+ movaps xmm15,XMMWORD PTR[((-72))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$enc8x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_multi_cbc_encrypt_avx::
+aesni_multi_cbc_encrypt_avx ENDP
+
+
+ALIGN 32
+aesni_multi_cbc_decrypt_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_multi_cbc_decrypt_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+_avx_cbc_dec_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[64+rsp],xmm10
+ movaps XMMWORD PTR[80+rsp],xmm11
+ movaps XMMWORD PTR[(-120)+rax],xmm12
+ movaps XMMWORD PTR[(-104)+rax],xmm13
+ movaps XMMWORD PTR[(-88)+rax],xmm14
+ movaps XMMWORD PTR[(-72)+rax],xmm15
+
+
+
+
+
+
+
+
+
+ sub rsp,256
+ and rsp,-256
+ sub rsp,192
+ mov QWORD PTR[16+rsp],rax
+
+
+$L$dec8x_body::
+ vzeroupper
+ vmovdqu xmm15,XMMWORD PTR[rsi]
+ lea rsi,QWORD PTR[120+rsi]
+ lea rdi,QWORD PTR[160+rdi]
+ shr edx,1
+
+$L$dec8x_loop_grande::
+
+ xor edx,edx
+ mov ecx,DWORD PTR[((-144))+rdi]
+ mov r8,QWORD PTR[((-160))+rdi]
+ cmp ecx,edx
+ mov rbx,QWORD PTR[((-152))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm2,XMMWORD PTR[((-136))+rdi]
+ mov DWORD PTR[32+rsp],ecx
+ cmovle r8,rsp
+ sub rbx,r8
+ mov QWORD PTR[64+rsp],rbx
+ vmovdqu XMMWORD PTR[192+rsp],xmm2
+ mov ecx,DWORD PTR[((-104))+rdi]
+ mov r9,QWORD PTR[((-120))+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[((-112))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm3,XMMWORD PTR[((-96))+rdi]
+ mov DWORD PTR[36+rsp],ecx
+ cmovle r9,rsp
+ sub rbp,r9
+ mov QWORD PTR[72+rsp],rbp
+ vmovdqu XMMWORD PTR[208+rsp],xmm3
+ mov ecx,DWORD PTR[((-64))+rdi]
+ mov r10,QWORD PTR[((-80))+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[((-72))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm4,XMMWORD PTR[((-56))+rdi]
+ mov DWORD PTR[40+rsp],ecx
+ cmovle r10,rsp
+ sub rbp,r10
+ mov QWORD PTR[80+rsp],rbp
+ vmovdqu XMMWORD PTR[224+rsp],xmm4
+ mov ecx,DWORD PTR[((-24))+rdi]
+ mov r11,QWORD PTR[((-40))+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[((-32))+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm5,XMMWORD PTR[((-16))+rdi]
+ mov DWORD PTR[44+rsp],ecx
+ cmovle r11,rsp
+ sub rbp,r11
+ mov QWORD PTR[88+rsp],rbp
+ vmovdqu XMMWORD PTR[240+rsp],xmm5
+ mov ecx,DWORD PTR[16+rdi]
+ mov r12,QWORD PTR[rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[8+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm6,XMMWORD PTR[24+rdi]
+ mov DWORD PTR[48+rsp],ecx
+ cmovle r12,rsp
+ sub rbp,r12
+ mov QWORD PTR[96+rsp],rbp
+ vmovdqu XMMWORD PTR[256+rsp],xmm6
+ mov ecx,DWORD PTR[56+rdi]
+ mov r13,QWORD PTR[40+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[48+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm7,XMMWORD PTR[64+rdi]
+ mov DWORD PTR[52+rsp],ecx
+ cmovle r13,rsp
+ sub rbp,r13
+ mov QWORD PTR[104+rsp],rbp
+ vmovdqu XMMWORD PTR[272+rsp],xmm7
+ mov ecx,DWORD PTR[96+rdi]
+ mov r14,QWORD PTR[80+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[88+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm8,XMMWORD PTR[104+rdi]
+ mov DWORD PTR[56+rsp],ecx
+ cmovle r14,rsp
+ sub rbp,r14
+ mov QWORD PTR[112+rsp],rbp
+ vmovdqu XMMWORD PTR[288+rsp],xmm8
+ mov ecx,DWORD PTR[136+rdi]
+ mov r15,QWORD PTR[120+rdi]
+ cmp ecx,edx
+ mov rbp,QWORD PTR[128+rdi]
+ cmovg edx,ecx
+ test ecx,ecx
+ vmovdqu xmm9,XMMWORD PTR[144+rdi]
+ mov DWORD PTR[60+rsp],ecx
+ cmovle r15,rsp
+ sub rbp,r15
+ mov QWORD PTR[120+rsp],rbp
+ vmovdqu XMMWORD PTR[304+rsp],xmm9
+ test edx,edx
+ jz $L$dec8x_done
+
+ vmovups xmm1,XMMWORD PTR[((16-120))+rsi]
+ vmovups xmm0,XMMWORD PTR[((32-120))+rsi]
+ mov eax,DWORD PTR[((240-120))+rsi]
+ lea rbp,QWORD PTR[((192+128))+rsp]
+
+ vmovdqu xmm2,XMMWORD PTR[r8]
+ vmovdqu xmm3,XMMWORD PTR[r9]
+ vmovdqu xmm4,XMMWORD PTR[r10]
+ vmovdqu xmm5,XMMWORD PTR[r11]
+ vmovdqu xmm6,XMMWORD PTR[r12]
+ vmovdqu xmm7,XMMWORD PTR[r13]
+ vmovdqu xmm8,XMMWORD PTR[r14]
+ vmovdqu xmm9,XMMWORD PTR[r15]
+ vmovdqu XMMWORD PTR[rbp],xmm2
+ vpxor xmm2,xmm2,xmm15
+ vmovdqu XMMWORD PTR[16+rbp],xmm3
+ vpxor xmm3,xmm3,xmm15
+ vmovdqu XMMWORD PTR[32+rbp],xmm4
+ vpxor xmm4,xmm4,xmm15
+ vmovdqu XMMWORD PTR[48+rbp],xmm5
+ vpxor xmm5,xmm5,xmm15
+ vmovdqu XMMWORD PTR[64+rbp],xmm6
+ vpxor xmm6,xmm6,xmm15
+ vmovdqu XMMWORD PTR[80+rbp],xmm7
+ vpxor xmm7,xmm7,xmm15
+ vmovdqu XMMWORD PTR[96+rbp],xmm8
+ vpxor xmm8,xmm8,xmm15
+ vmovdqu XMMWORD PTR[112+rbp],xmm9
+ vpxor xmm9,xmm9,xmm15
+ xor rbp,080h
+ mov ecx,1
+ jmp $L$oop_dec8x
+
+ALIGN 32
+$L$oop_dec8x::
+ vaesdec xmm2,xmm2,xmm1
+ cmp ecx,DWORD PTR[((32+0))+rsp]
+ vaesdec xmm3,xmm3,xmm1
+ prefetcht0 [31+r8]
+ vaesdec xmm4,xmm4,xmm1
+ vaesdec xmm5,xmm5,xmm1
+ lea rbx,QWORD PTR[rbx*1+r8]
+ cmovge r8,rsp
+ vaesdec xmm6,xmm6,xmm1
+ cmovg rbx,rsp
+ vaesdec xmm7,xmm7,xmm1
+ sub rbx,r8
+ vaesdec xmm8,xmm8,xmm1
+ vmovdqu xmm10,XMMWORD PTR[16+r8]
+ mov QWORD PTR[((64+0))+rsp],rbx
+ vaesdec xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((-72))+rsi]
+ lea r8,QWORD PTR[16+rbx*1+r8]
+ vmovdqu XMMWORD PTR[128+rsp],xmm10
+ vaesdec xmm2,xmm2,xmm0
+ cmp ecx,DWORD PTR[((32+4))+rsp]
+ mov rbx,QWORD PTR[((64+8))+rsp]
+ vaesdec xmm3,xmm3,xmm0
+ prefetcht0 [31+r9]
+ vaesdec xmm4,xmm4,xmm0
+ vaesdec xmm5,xmm5,xmm0
+ lea rbx,QWORD PTR[rbx*1+r9]
+ cmovge r9,rsp
+ vaesdec xmm6,xmm6,xmm0
+ cmovg rbx,rsp
+ vaesdec xmm7,xmm7,xmm0
+ sub rbx,r9
+ vaesdec xmm8,xmm8,xmm0
+ vmovdqu xmm11,XMMWORD PTR[16+r9]
+ mov QWORD PTR[((64+8))+rsp],rbx
+ vaesdec xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[((-56))+rsi]
+ lea r9,QWORD PTR[16+rbx*1+r9]
+ vmovdqu XMMWORD PTR[144+rsp],xmm11
+ vaesdec xmm2,xmm2,xmm1
+ cmp ecx,DWORD PTR[((32+8))+rsp]
+ mov rbx,QWORD PTR[((64+16))+rsp]
+ vaesdec xmm3,xmm3,xmm1
+ prefetcht0 [31+r10]
+ vaesdec xmm4,xmm4,xmm1
+ prefetcht0 [15+r8]
+ vaesdec xmm5,xmm5,xmm1
+ lea rbx,QWORD PTR[rbx*1+r10]
+ cmovge r10,rsp
+ vaesdec xmm6,xmm6,xmm1
+ cmovg rbx,rsp
+ vaesdec xmm7,xmm7,xmm1
+ sub rbx,r10
+ vaesdec xmm8,xmm8,xmm1
+ vmovdqu xmm12,XMMWORD PTR[16+r10]
+ mov QWORD PTR[((64+16))+rsp],rbx
+ vaesdec xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((-40))+rsi]
+ lea r10,QWORD PTR[16+rbx*1+r10]
+ vmovdqu XMMWORD PTR[160+rsp],xmm12
+ vaesdec xmm2,xmm2,xmm0
+ cmp ecx,DWORD PTR[((32+12))+rsp]
+ mov rbx,QWORD PTR[((64+24))+rsp]
+ vaesdec xmm3,xmm3,xmm0
+ prefetcht0 [31+r11]
+ vaesdec xmm4,xmm4,xmm0
+ prefetcht0 [15+r9]
+ vaesdec xmm5,xmm5,xmm0
+ lea rbx,QWORD PTR[rbx*1+r11]
+ cmovge r11,rsp
+ vaesdec xmm6,xmm6,xmm0
+ cmovg rbx,rsp
+ vaesdec xmm7,xmm7,xmm0
+ sub rbx,r11
+ vaesdec xmm8,xmm8,xmm0
+ vmovdqu xmm13,XMMWORD PTR[16+r11]
+ mov QWORD PTR[((64+24))+rsp],rbx
+ vaesdec xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[((-24))+rsi]
+ lea r11,QWORD PTR[16+rbx*1+r11]
+ vmovdqu XMMWORD PTR[176+rsp],xmm13
+ vaesdec xmm2,xmm2,xmm1
+ cmp ecx,DWORD PTR[((32+16))+rsp]
+ mov rbx,QWORD PTR[((64+32))+rsp]
+ vaesdec xmm3,xmm3,xmm1
+ prefetcht0 [31+r12]
+ vaesdec xmm4,xmm4,xmm1
+ prefetcht0 [15+r10]
+ vaesdec xmm5,xmm5,xmm1
+ lea rbx,QWORD PTR[rbx*1+r12]
+ cmovge r12,rsp
+ vaesdec xmm6,xmm6,xmm1
+ cmovg rbx,rsp
+ vaesdec xmm7,xmm7,xmm1
+ sub rbx,r12
+ vaesdec xmm8,xmm8,xmm1
+ vmovdqu xmm10,XMMWORD PTR[16+r12]
+ mov QWORD PTR[((64+32))+rsp],rbx
+ vaesdec xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((-8))+rsi]
+ lea r12,QWORD PTR[16+rbx*1+r12]
+ vaesdec xmm2,xmm2,xmm0
+ cmp ecx,DWORD PTR[((32+20))+rsp]
+ mov rbx,QWORD PTR[((64+40))+rsp]
+ vaesdec xmm3,xmm3,xmm0
+ prefetcht0 [31+r13]
+ vaesdec xmm4,xmm4,xmm0
+ prefetcht0 [15+r11]
+ vaesdec xmm5,xmm5,xmm0
+ lea rbx,QWORD PTR[r13*1+rbx]
+ cmovge r13,rsp
+ vaesdec xmm6,xmm6,xmm0
+ cmovg rbx,rsp
+ vaesdec xmm7,xmm7,xmm0
+ sub rbx,r13
+ vaesdec xmm8,xmm8,xmm0
+ vmovdqu xmm11,XMMWORD PTR[16+r13]
+ mov QWORD PTR[((64+40))+rsp],rbx
+ vaesdec xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[8+rsi]
+ lea r13,QWORD PTR[16+rbx*1+r13]
+ vaesdec xmm2,xmm2,xmm1
+ cmp ecx,DWORD PTR[((32+24))+rsp]
+ mov rbx,QWORD PTR[((64+48))+rsp]
+ vaesdec xmm3,xmm3,xmm1
+ prefetcht0 [31+r14]
+ vaesdec xmm4,xmm4,xmm1
+ prefetcht0 [15+r12]
+ vaesdec xmm5,xmm5,xmm1
+ lea rbx,QWORD PTR[rbx*1+r14]
+ cmovge r14,rsp
+ vaesdec xmm6,xmm6,xmm1
+ cmovg rbx,rsp
+ vaesdec xmm7,xmm7,xmm1
+ sub rbx,r14
+ vaesdec xmm8,xmm8,xmm1
+ vmovdqu xmm12,XMMWORD PTR[16+r14]
+ mov QWORD PTR[((64+48))+rsp],rbx
+ vaesdec xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[24+rsi]
+ lea r14,QWORD PTR[16+rbx*1+r14]
+ vaesdec xmm2,xmm2,xmm0
+ cmp ecx,DWORD PTR[((32+28))+rsp]
+ mov rbx,QWORD PTR[((64+56))+rsp]
+ vaesdec xmm3,xmm3,xmm0
+ prefetcht0 [31+r15]
+ vaesdec xmm4,xmm4,xmm0
+ prefetcht0 [15+r13]
+ vaesdec xmm5,xmm5,xmm0
+ lea rbx,QWORD PTR[rbx*1+r15]
+ cmovge r15,rsp
+ vaesdec xmm6,xmm6,xmm0
+ cmovg rbx,rsp
+ vaesdec xmm7,xmm7,xmm0
+ sub rbx,r15
+ vaesdec xmm8,xmm8,xmm0
+ vmovdqu xmm13,XMMWORD PTR[16+r15]
+ mov QWORD PTR[((64+56))+rsp],rbx
+ vaesdec xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[40+rsi]
+ lea r15,QWORD PTR[16+rbx*1+r15]
+ vmovdqu xmm14,XMMWORD PTR[32+rsp]
+ prefetcht0 [15+r14]
+ prefetcht0 [15+r15]
+ cmp eax,11
+ jb $L$dec8x_tail
+
+ vaesdec xmm2,xmm2,xmm1
+ vaesdec xmm3,xmm3,xmm1
+ vaesdec xmm4,xmm4,xmm1
+ vaesdec xmm5,xmm5,xmm1
+ vaesdec xmm6,xmm6,xmm1
+ vaesdec xmm7,xmm7,xmm1
+ vaesdec xmm8,xmm8,xmm1
+ vaesdec xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((176-120))+rsi]
+
+ vaesdec xmm2,xmm2,xmm0
+ vaesdec xmm3,xmm3,xmm0
+ vaesdec xmm4,xmm4,xmm0
+ vaesdec xmm5,xmm5,xmm0
+ vaesdec xmm6,xmm6,xmm0
+ vaesdec xmm7,xmm7,xmm0
+ vaesdec xmm8,xmm8,xmm0
+ vaesdec xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[((192-120))+rsi]
+ je $L$dec8x_tail
+
+ vaesdec xmm2,xmm2,xmm1
+ vaesdec xmm3,xmm3,xmm1
+ vaesdec xmm4,xmm4,xmm1
+ vaesdec xmm5,xmm5,xmm1
+ vaesdec xmm6,xmm6,xmm1
+ vaesdec xmm7,xmm7,xmm1
+ vaesdec xmm8,xmm8,xmm1
+ vaesdec xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((208-120))+rsi]
+
+ vaesdec xmm2,xmm2,xmm0
+ vaesdec xmm3,xmm3,xmm0
+ vaesdec xmm4,xmm4,xmm0
+ vaesdec xmm5,xmm5,xmm0
+ vaesdec xmm6,xmm6,xmm0
+ vaesdec xmm7,xmm7,xmm0
+ vaesdec xmm8,xmm8,xmm0
+ vaesdec xmm9,xmm9,xmm0
+ vmovups xmm0,XMMWORD PTR[((224-120))+rsi]
+
+$L$dec8x_tail::
+ vaesdec xmm2,xmm2,xmm1
+ vpxor xmm15,xmm15,xmm15
+ vaesdec xmm3,xmm3,xmm1
+ vaesdec xmm4,xmm4,xmm1
+ vpcmpgtd xmm15,xmm14,xmm15
+ vaesdec xmm5,xmm5,xmm1
+ vaesdec xmm6,xmm6,xmm1
+ vpaddd xmm15,xmm15,xmm14
+ vmovdqu xmm14,XMMWORD PTR[48+rsp]
+ vaesdec xmm7,xmm7,xmm1
+ mov rbx,QWORD PTR[64+rsp]
+ vaesdec xmm8,xmm8,xmm1
+ vaesdec xmm9,xmm9,xmm1
+ vmovups xmm1,XMMWORD PTR[((16-120))+rsi]
+
+ vaesdeclast xmm2,xmm2,xmm0
+ vmovdqa XMMWORD PTR[32+rsp],xmm15
+ vpxor xmm15,xmm15,xmm15
+ vaesdeclast xmm3,xmm3,xmm0
+ vpxor xmm2,xmm2,XMMWORD PTR[rbp]
+ vaesdeclast xmm4,xmm4,xmm0
+ vpxor xmm3,xmm3,XMMWORD PTR[16+rbp]
+ vpcmpgtd xmm15,xmm14,xmm15
+ vaesdeclast xmm5,xmm5,xmm0
+ vpxor xmm4,xmm4,XMMWORD PTR[32+rbp]
+ vaesdeclast xmm6,xmm6,xmm0
+ vpxor xmm5,xmm5,XMMWORD PTR[48+rbp]
+ vpaddd xmm14,xmm14,xmm15
+ vmovdqu xmm15,XMMWORD PTR[((-120))+rsi]
+ vaesdeclast xmm7,xmm7,xmm0
+ vpxor xmm6,xmm6,XMMWORD PTR[64+rbp]
+ vaesdeclast xmm8,xmm8,xmm0
+ vpxor xmm7,xmm7,XMMWORD PTR[80+rbp]
+ vmovdqa XMMWORD PTR[48+rsp],xmm14
+ vaesdeclast xmm9,xmm9,xmm0
+ vpxor xmm8,xmm8,XMMWORD PTR[96+rbp]
+ vmovups xmm0,XMMWORD PTR[((32-120))+rsi]
+
+ vmovups XMMWORD PTR[(-16)+r8],xmm2
+ sub r8,rbx
+ vmovdqu xmm2,XMMWORD PTR[((128+0))+rsp]
+ vpxor xmm9,xmm9,XMMWORD PTR[112+rbp]
+ vmovups XMMWORD PTR[(-16)+r9],xmm3
+ sub r9,QWORD PTR[72+rsp]
+ vmovdqu XMMWORD PTR[rbp],xmm2
+ vpxor xmm2,xmm2,xmm15
+ vmovdqu xmm3,XMMWORD PTR[((128+16))+rsp]
+ vmovups XMMWORD PTR[(-16)+r10],xmm4
+ sub r10,QWORD PTR[80+rsp]
+ vmovdqu XMMWORD PTR[16+rbp],xmm3
+ vpxor xmm3,xmm3,xmm15
+ vmovdqu xmm4,XMMWORD PTR[((128+32))+rsp]
+ vmovups XMMWORD PTR[(-16)+r11],xmm5
+ sub r11,QWORD PTR[88+rsp]
+ vmovdqu XMMWORD PTR[32+rbp],xmm4
+ vpxor xmm4,xmm4,xmm15
+ vmovdqu xmm5,XMMWORD PTR[((128+48))+rsp]
+ vmovups XMMWORD PTR[(-16)+r12],xmm6
+ sub r12,QWORD PTR[96+rsp]
+ vmovdqu XMMWORD PTR[48+rbp],xmm5
+ vpxor xmm5,xmm5,xmm15
+ vmovdqu XMMWORD PTR[64+rbp],xmm10
+ vpxor xmm6,xmm15,xmm10
+ vmovups XMMWORD PTR[(-16)+r13],xmm7
+ sub r13,QWORD PTR[104+rsp]
+ vmovdqu XMMWORD PTR[80+rbp],xmm11
+ vpxor xmm7,xmm15,xmm11
+ vmovups XMMWORD PTR[(-16)+r14],xmm8
+ sub r14,QWORD PTR[112+rsp]
+ vmovdqu XMMWORD PTR[96+rbp],xmm12
+ vpxor xmm8,xmm15,xmm12
+ vmovups XMMWORD PTR[(-16)+r15],xmm9
+ sub r15,QWORD PTR[120+rsp]
+ vmovdqu XMMWORD PTR[112+rbp],xmm13
+ vpxor xmm9,xmm15,xmm13
+
+ xor rbp,128
+ dec edx
+ jnz $L$oop_dec8x
+
+ mov rax,QWORD PTR[16+rsp]
+
+
+
+
+
+
+$L$dec8x_done::
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-216))+rax]
+ movaps xmm7,XMMWORD PTR[((-200))+rax]
+ movaps xmm8,XMMWORD PTR[((-184))+rax]
+ movaps xmm9,XMMWORD PTR[((-168))+rax]
+ movaps xmm10,XMMWORD PTR[((-152))+rax]
+ movaps xmm11,XMMWORD PTR[((-136))+rax]
+ movaps xmm12,XMMWORD PTR[((-120))+rax]
+ movaps xmm13,XMMWORD PTR[((-104))+rax]
+ movaps xmm14,XMMWORD PTR[((-88))+rax]
+ movaps xmm15,XMMWORD PTR[((-72))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$dec8x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_multi_cbc_decrypt_avx::
+aesni_multi_cbc_decrypt_avx ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ mov rax,QWORD PTR[16+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+ lea rsi,QWORD PTR[((-56-160))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_aesni_multi_cbc_encrypt
+ DD imagerel $L$SEH_end_aesni_multi_cbc_encrypt
+ DD imagerel $L$SEH_info_aesni_multi_cbc_encrypt
+ DD imagerel $L$SEH_begin_aesni_multi_cbc_decrypt
+ DD imagerel $L$SEH_end_aesni_multi_cbc_decrypt
+ DD imagerel $L$SEH_info_aesni_multi_cbc_decrypt
+ DD imagerel $L$SEH_begin_aesni_multi_cbc_encrypt_avx
+ DD imagerel $L$SEH_end_aesni_multi_cbc_encrypt_avx
+ DD imagerel $L$SEH_info_aesni_multi_cbc_encrypt_avx
+ DD imagerel $L$SEH_begin_aesni_multi_cbc_decrypt_avx
+ DD imagerel $L$SEH_end_aesni_multi_cbc_decrypt_avx
+ DD imagerel $L$SEH_info_aesni_multi_cbc_decrypt_avx
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_aesni_multi_cbc_encrypt::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$enc4x_body,imagerel $L$enc4x_epilogue
+$L$SEH_info_aesni_multi_cbc_decrypt::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$dec4x_body,imagerel $L$dec4x_epilogue
+$L$SEH_info_aesni_multi_cbc_encrypt_avx::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$enc8x_body,imagerel $L$enc8x_epilogue
+$L$SEH_info_aesni_multi_cbc_decrypt_avx::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$dec8x_body,imagerel $L$dec8x_epilogue
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/aes/aesni-sha1-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/aes/aesni-sha1-x86_64.masm
index 561cd6b447..5724c6e609 100644
--- a/contrib/libs/openssl/asm/windows/crypto/aes/aesni-sha1-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/aes/aesni-sha1-x86_64.masm
@@ -1,3272 +1,3272 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC aesni_cbc_sha1_enc
-
-ALIGN 32
-aesni_cbc_sha1_enc PROC PUBLIC
-
-
- mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+0))]
- mov r11,QWORD PTR[((OPENSSL_ia32cap_P+4))]
- bt r11,61
- jc aesni_cbc_sha1_enc_shaext
- and r11d,268435456
- and r10d,1073741824
- or r10d,r11d
- cmp r10d,1342177280
- je aesni_cbc_sha1_enc_avx
- jmp aesni_cbc_sha1_enc_ssse3
- DB 0F3h,0C3h ;repret
-
-aesni_cbc_sha1_enc ENDP
-
-ALIGN 32
-aesni_cbc_sha1_enc_ssse3 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_cbc_sha1_enc_ssse3::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov r10,QWORD PTR[56+rsp]
-
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-264))+rsp]
-
-
-
- movaps XMMWORD PTR[(96+0)+rsp],xmm6
- movaps XMMWORD PTR[(96+16)+rsp],xmm7
- movaps XMMWORD PTR[(96+32)+rsp],xmm8
- movaps XMMWORD PTR[(96+48)+rsp],xmm9
- movaps XMMWORD PTR[(96+64)+rsp],xmm10
- movaps XMMWORD PTR[(96+80)+rsp],xmm11
- movaps XMMWORD PTR[(96+96)+rsp],xmm12
- movaps XMMWORD PTR[(96+112)+rsp],xmm13
- movaps XMMWORD PTR[(96+128)+rsp],xmm14
- movaps XMMWORD PTR[(96+144)+rsp],xmm15
-$L$prologue_ssse3::
- mov r12,rdi
- mov r13,rsi
- mov r14,rdx
- lea r15,QWORD PTR[112+rcx]
- movdqu xmm2,XMMWORD PTR[r8]
- mov QWORD PTR[88+rsp],r8
- shl r14,6
- sub r13,r12
- mov r8d,DWORD PTR[((240-112))+r15]
- add r14,r10
-
- lea r11,QWORD PTR[K_XX_XX]
- mov eax,DWORD PTR[r9]
- mov ebx,DWORD PTR[4+r9]
- mov ecx,DWORD PTR[8+r9]
- mov edx,DWORD PTR[12+r9]
- mov esi,ebx
- mov ebp,DWORD PTR[16+r9]
- mov edi,ecx
- xor edi,edx
- and esi,edi
-
- movdqa xmm3,XMMWORD PTR[64+r11]
- movdqa xmm13,XMMWORD PTR[r11]
- movdqu xmm4,XMMWORD PTR[r10]
- movdqu xmm5,XMMWORD PTR[16+r10]
- movdqu xmm6,XMMWORD PTR[32+r10]
- movdqu xmm7,XMMWORD PTR[48+r10]
-DB 102,15,56,0,227
-DB 102,15,56,0,235
-DB 102,15,56,0,243
- add r10,64
- paddd xmm4,xmm13
-DB 102,15,56,0,251
- paddd xmm5,xmm13
- paddd xmm6,xmm13
- movdqa XMMWORD PTR[rsp],xmm4
- psubd xmm4,xmm13
- movdqa XMMWORD PTR[16+rsp],xmm5
- psubd xmm5,xmm13
- movdqa XMMWORD PTR[32+rsp],xmm6
- psubd xmm6,xmm13
- movups xmm15,XMMWORD PTR[((-112))+r15]
- movups xmm0,XMMWORD PTR[((16-112))+r15]
- jmp $L$oop_ssse3
-ALIGN 32
-$L$oop_ssse3::
- ror ebx,2
- movups xmm14,XMMWORD PTR[r12]
- xorps xmm14,xmm15
- xorps xmm2,xmm14
- movups xmm1,XMMWORD PTR[((-80))+r15]
-DB 102,15,56,220,208
- pshufd xmm8,xmm4,238
- xor esi,edx
- movdqa xmm12,xmm7
- paddd xmm13,xmm7
- mov edi,eax
- add ebp,DWORD PTR[rsp]
- punpcklqdq xmm8,xmm5
- xor ebx,ecx
- rol eax,5
- add ebp,esi
- psrldq xmm12,4
- and edi,ebx
- xor ebx,ecx
- pxor xmm8,xmm4
- add ebp,eax
- ror eax,7
- pxor xmm12,xmm6
- xor edi,ecx
- mov esi,ebp
- add edx,DWORD PTR[4+rsp]
- pxor xmm8,xmm12
- xor eax,ebx
- rol ebp,5
- movdqa XMMWORD PTR[48+rsp],xmm13
- add edx,edi
- movups xmm0,XMMWORD PTR[((-64))+r15]
-DB 102,15,56,220,209
- and esi,eax
- movdqa xmm3,xmm8
- xor eax,ebx
- add edx,ebp
- ror ebp,7
- movdqa xmm12,xmm8
- xor esi,ebx
- pslldq xmm3,12
- paddd xmm8,xmm8
- mov edi,edx
- add ecx,DWORD PTR[8+rsp]
- psrld xmm12,31
- xor ebp,eax
- rol edx,5
- add ecx,esi
- movdqa xmm13,xmm3
- and edi,ebp
- xor ebp,eax
- psrld xmm3,30
- add ecx,edx
- ror edx,7
- por xmm8,xmm12
- xor edi,eax
- mov esi,ecx
- add ebx,DWORD PTR[12+rsp]
- movups xmm1,XMMWORD PTR[((-48))+r15]
-DB 102,15,56,220,208
- pslld xmm13,2
- pxor xmm8,xmm3
- xor edx,ebp
- movdqa xmm3,XMMWORD PTR[r11]
- rol ecx,5
- add ebx,edi
- and esi,edx
- pxor xmm8,xmm13
- xor edx,ebp
- add ebx,ecx
- ror ecx,7
- pshufd xmm9,xmm5,238
- xor esi,ebp
- movdqa xmm13,xmm8
- paddd xmm3,xmm8
- mov edi,ebx
- add eax,DWORD PTR[16+rsp]
- punpcklqdq xmm9,xmm6
- xor ecx,edx
- rol ebx,5
- add eax,esi
- psrldq xmm13,4
- and edi,ecx
- xor ecx,edx
- pxor xmm9,xmm5
- add eax,ebx
- ror ebx,7
- movups xmm0,XMMWORD PTR[((-32))+r15]
-DB 102,15,56,220,209
- pxor xmm13,xmm7
- xor edi,edx
- mov esi,eax
- add ebp,DWORD PTR[20+rsp]
- pxor xmm9,xmm13
- xor ebx,ecx
- rol eax,5
- movdqa XMMWORD PTR[rsp],xmm3
- add ebp,edi
- and esi,ebx
- movdqa xmm12,xmm9
- xor ebx,ecx
- add ebp,eax
- ror eax,7
- movdqa xmm13,xmm9
- xor esi,ecx
- pslldq xmm12,12
- paddd xmm9,xmm9
- mov edi,ebp
- add edx,DWORD PTR[24+rsp]
- psrld xmm13,31
- xor eax,ebx
- rol ebp,5
- add edx,esi
- movups xmm1,XMMWORD PTR[((-16))+r15]
-DB 102,15,56,220,208
- movdqa xmm3,xmm12
- and edi,eax
- xor eax,ebx
- psrld xmm12,30
- add edx,ebp
- ror ebp,7
- por xmm9,xmm13
- xor edi,ebx
- mov esi,edx
- add ecx,DWORD PTR[28+rsp]
- pslld xmm3,2
- pxor xmm9,xmm12
- xor ebp,eax
- movdqa xmm12,XMMWORD PTR[16+r11]
- rol edx,5
- add ecx,edi
- and esi,ebp
- pxor xmm9,xmm3
- xor ebp,eax
- add ecx,edx
- ror edx,7
- pshufd xmm10,xmm6,238
- xor esi,eax
- movdqa xmm3,xmm9
- paddd xmm12,xmm9
- mov edi,ecx
- add ebx,DWORD PTR[32+rsp]
- movups xmm0,XMMWORD PTR[r15]
-DB 102,15,56,220,209
- punpcklqdq xmm10,xmm7
- xor edx,ebp
- rol ecx,5
- add ebx,esi
- psrldq xmm3,4
- and edi,edx
- xor edx,ebp
- pxor xmm10,xmm6
- add ebx,ecx
- ror ecx,7
- pxor xmm3,xmm8
- xor edi,ebp
- mov esi,ebx
- add eax,DWORD PTR[36+rsp]
- pxor xmm10,xmm3
- xor ecx,edx
- rol ebx,5
- movdqa XMMWORD PTR[16+rsp],xmm12
- add eax,edi
- and esi,ecx
- movdqa xmm13,xmm10
- xor ecx,edx
- add eax,ebx
- ror ebx,7
- movups xmm1,XMMWORD PTR[16+r15]
-DB 102,15,56,220,208
- movdqa xmm3,xmm10
- xor esi,edx
- pslldq xmm13,12
- paddd xmm10,xmm10
- mov edi,eax
- add ebp,DWORD PTR[40+rsp]
- psrld xmm3,31
- xor ebx,ecx
- rol eax,5
- add ebp,esi
- movdqa xmm12,xmm13
- and edi,ebx
- xor ebx,ecx
- psrld xmm13,30
- add ebp,eax
- ror eax,7
- por xmm10,xmm3
- xor edi,ecx
- mov esi,ebp
- add edx,DWORD PTR[44+rsp]
- pslld xmm12,2
- pxor xmm10,xmm13
- xor eax,ebx
- movdqa xmm13,XMMWORD PTR[16+r11]
- rol ebp,5
- add edx,edi
- movups xmm0,XMMWORD PTR[32+r15]
-DB 102,15,56,220,209
- and esi,eax
- pxor xmm10,xmm12
- xor eax,ebx
- add edx,ebp
- ror ebp,7
- pshufd xmm11,xmm7,238
- xor esi,ebx
- movdqa xmm12,xmm10
- paddd xmm13,xmm10
- mov edi,edx
- add ecx,DWORD PTR[48+rsp]
- punpcklqdq xmm11,xmm8
- xor ebp,eax
- rol edx,5
- add ecx,esi
- psrldq xmm12,4
- and edi,ebp
- xor ebp,eax
- pxor xmm11,xmm7
- add ecx,edx
- ror edx,7
- pxor xmm12,xmm9
- xor edi,eax
- mov esi,ecx
- add ebx,DWORD PTR[52+rsp]
- movups xmm1,XMMWORD PTR[48+r15]
-DB 102,15,56,220,208
- pxor xmm11,xmm12
- xor edx,ebp
- rol ecx,5
- movdqa XMMWORD PTR[32+rsp],xmm13
- add ebx,edi
- and esi,edx
- movdqa xmm3,xmm11
- xor edx,ebp
- add ebx,ecx
- ror ecx,7
- movdqa xmm12,xmm11
- xor esi,ebp
- pslldq xmm3,12
- paddd xmm11,xmm11
- mov edi,ebx
- add eax,DWORD PTR[56+rsp]
- psrld xmm12,31
- xor ecx,edx
- rol ebx,5
- add eax,esi
- movdqa xmm13,xmm3
- and edi,ecx
- xor ecx,edx
- psrld xmm3,30
- add eax,ebx
- ror ebx,7
- cmp r8d,11
- jb $L$aesenclast1
- movups xmm0,XMMWORD PTR[64+r15]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[80+r15]
-DB 102,15,56,220,208
- je $L$aesenclast1
- movups xmm0,XMMWORD PTR[96+r15]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[112+r15]
-DB 102,15,56,220,208
-$L$aesenclast1::
-DB 102,15,56,221,209
- movups xmm0,XMMWORD PTR[((16-112))+r15]
- por xmm11,xmm12
- xor edi,edx
- mov esi,eax
- add ebp,DWORD PTR[60+rsp]
- pslld xmm13,2
- pxor xmm11,xmm3
- xor ebx,ecx
- movdqa xmm3,XMMWORD PTR[16+r11]
- rol eax,5
- add ebp,edi
- and esi,ebx
- pxor xmm11,xmm13
- pshufd xmm13,xmm10,238
- xor ebx,ecx
- add ebp,eax
- ror eax,7
- pxor xmm4,xmm8
- xor esi,ecx
- mov edi,ebp
- add edx,DWORD PTR[rsp]
- punpcklqdq xmm13,xmm11
- xor eax,ebx
- rol ebp,5
- pxor xmm4,xmm5
- add edx,esi
- movups xmm14,XMMWORD PTR[16+r12]
- xorps xmm14,xmm15
- movups XMMWORD PTR[r13*1+r12],xmm2
- xorps xmm2,xmm14
- movups xmm1,XMMWORD PTR[((-80))+r15]
-DB 102,15,56,220,208
- and edi,eax
- movdqa xmm12,xmm3
- xor eax,ebx
- paddd xmm3,xmm11
- add edx,ebp
- pxor xmm4,xmm13
- ror ebp,7
- xor edi,ebx
- mov esi,edx
- add ecx,DWORD PTR[4+rsp]
- movdqa xmm13,xmm4
- xor ebp,eax
- rol edx,5
- movdqa XMMWORD PTR[48+rsp],xmm3
- add ecx,edi
- and esi,ebp
- xor ebp,eax
- pslld xmm4,2
- add ecx,edx
- ror edx,7
- psrld xmm13,30
- xor esi,eax
- mov edi,ecx
- add ebx,DWORD PTR[8+rsp]
- movups xmm0,XMMWORD PTR[((-64))+r15]
-DB 102,15,56,220,209
- por xmm4,xmm13
- xor edx,ebp
- rol ecx,5
- pshufd xmm3,xmm11,238
- add ebx,esi
- and edi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[12+rsp]
- xor edi,ebp
- mov esi,ebx
- rol ebx,5
- add eax,edi
- xor esi,edx
- ror ecx,7
- add eax,ebx
- pxor xmm5,xmm9
- add ebp,DWORD PTR[16+rsp]
- movups xmm1,XMMWORD PTR[((-48))+r15]
-DB 102,15,56,220,208
- xor esi,ecx
- punpcklqdq xmm3,xmm4
- mov edi,eax
- rol eax,5
- pxor xmm5,xmm6
- add ebp,esi
- xor edi,ecx
- movdqa xmm13,xmm12
- ror ebx,7
- paddd xmm12,xmm4
- add ebp,eax
- pxor xmm5,xmm3
- add edx,DWORD PTR[20+rsp]
- xor edi,ebx
- mov esi,ebp
- rol ebp,5
- movdqa xmm3,xmm5
- add edx,edi
- xor esi,ebx
- movdqa XMMWORD PTR[rsp],xmm12
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[24+rsp]
- pslld xmm5,2
- xor esi,eax
- mov edi,edx
- psrld xmm3,30
- rol edx,5
- add ecx,esi
- movups xmm0,XMMWORD PTR[((-32))+r15]
-DB 102,15,56,220,209
- xor edi,eax
- ror ebp,7
- por xmm5,xmm3
- add ecx,edx
- add ebx,DWORD PTR[28+rsp]
- pshufd xmm12,xmm4,238
- xor edi,ebp
- mov esi,ecx
- rol ecx,5
- add ebx,edi
- xor esi,ebp
- ror edx,7
- add ebx,ecx
- pxor xmm6,xmm10
- add eax,DWORD PTR[32+rsp]
- xor esi,edx
- punpcklqdq xmm12,xmm5
- mov edi,ebx
- rol ebx,5
- pxor xmm6,xmm7
- add eax,esi
- xor edi,edx
- movdqa xmm3,XMMWORD PTR[32+r11]
- ror ecx,7
- paddd xmm13,xmm5
- add eax,ebx
- pxor xmm6,xmm12
- add ebp,DWORD PTR[36+rsp]
- movups xmm1,XMMWORD PTR[((-16))+r15]
-DB 102,15,56,220,208
- xor edi,ecx
- mov esi,eax
- rol eax,5
- movdqa xmm12,xmm6
- add ebp,edi
- xor esi,ecx
- movdqa XMMWORD PTR[16+rsp],xmm13
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[40+rsp]
- pslld xmm6,2
- xor esi,ebx
- mov edi,ebp
- psrld xmm12,30
- rol ebp,5
- add edx,esi
- xor edi,ebx
- ror eax,7
- por xmm6,xmm12
- add edx,ebp
- add ecx,DWORD PTR[44+rsp]
- pshufd xmm13,xmm5,238
- xor edi,eax
- mov esi,edx
- rol edx,5
- add ecx,edi
- movups xmm0,XMMWORD PTR[r15]
-DB 102,15,56,220,209
- xor esi,eax
- ror ebp,7
- add ecx,edx
- pxor xmm7,xmm11
- add ebx,DWORD PTR[48+rsp]
- xor esi,ebp
- punpcklqdq xmm13,xmm6
- mov edi,ecx
- rol ecx,5
- pxor xmm7,xmm8
- add ebx,esi
- xor edi,ebp
- movdqa xmm12,xmm3
- ror edx,7
- paddd xmm3,xmm6
- add ebx,ecx
- pxor xmm7,xmm13
- add eax,DWORD PTR[52+rsp]
- xor edi,edx
- mov esi,ebx
- rol ebx,5
- movdqa xmm13,xmm7
- add eax,edi
- xor esi,edx
- movdqa XMMWORD PTR[32+rsp],xmm3
- ror ecx,7
- add eax,ebx
- add ebp,DWORD PTR[56+rsp]
- movups xmm1,XMMWORD PTR[16+r15]
-DB 102,15,56,220,208
- pslld xmm7,2
- xor esi,ecx
- mov edi,eax
- psrld xmm13,30
- rol eax,5
- add ebp,esi
- xor edi,ecx
- ror ebx,7
- por xmm7,xmm13
- add ebp,eax
- add edx,DWORD PTR[60+rsp]
- pshufd xmm3,xmm6,238
- xor edi,ebx
- mov esi,ebp
- rol ebp,5
- add edx,edi
- xor esi,ebx
- ror eax,7
- add edx,ebp
- pxor xmm8,xmm4
- add ecx,DWORD PTR[rsp]
- xor esi,eax
- punpcklqdq xmm3,xmm7
- mov edi,edx
- rol edx,5
- pxor xmm8,xmm9
- add ecx,esi
- movups xmm0,XMMWORD PTR[32+r15]
-DB 102,15,56,220,209
- xor edi,eax
- movdqa xmm13,xmm12
- ror ebp,7
- paddd xmm12,xmm7
- add ecx,edx
- pxor xmm8,xmm3
- add ebx,DWORD PTR[4+rsp]
- xor edi,ebp
- mov esi,ecx
- rol ecx,5
- movdqa xmm3,xmm8
- add ebx,edi
- xor esi,ebp
- movdqa XMMWORD PTR[48+rsp],xmm12
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[8+rsp]
- pslld xmm8,2
- xor esi,edx
- mov edi,ebx
- psrld xmm3,30
- rol ebx,5
- add eax,esi
- xor edi,edx
- ror ecx,7
- por xmm8,xmm3
- add eax,ebx
- add ebp,DWORD PTR[12+rsp]
- movups xmm1,XMMWORD PTR[48+r15]
-DB 102,15,56,220,208
- pshufd xmm12,xmm7,238
- xor edi,ecx
- mov esi,eax
- rol eax,5
- add ebp,edi
- xor esi,ecx
- ror ebx,7
- add ebp,eax
- pxor xmm9,xmm5
- add edx,DWORD PTR[16+rsp]
- xor esi,ebx
- punpcklqdq xmm12,xmm8
- mov edi,ebp
- rol ebp,5
- pxor xmm9,xmm10
- add edx,esi
- xor edi,ebx
- movdqa xmm3,xmm13
- ror eax,7
- paddd xmm13,xmm8
- add edx,ebp
- pxor xmm9,xmm12
- add ecx,DWORD PTR[20+rsp]
- xor edi,eax
- mov esi,edx
- rol edx,5
- movdqa xmm12,xmm9
- add ecx,edi
- cmp r8d,11
- jb $L$aesenclast2
- movups xmm0,XMMWORD PTR[64+r15]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[80+r15]
-DB 102,15,56,220,208
- je $L$aesenclast2
- movups xmm0,XMMWORD PTR[96+r15]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[112+r15]
-DB 102,15,56,220,208
-$L$aesenclast2::
-DB 102,15,56,221,209
- movups xmm0,XMMWORD PTR[((16-112))+r15]
- xor esi,eax
- movdqa XMMWORD PTR[rsp],xmm13
- ror ebp,7
- add ecx,edx
- add ebx,DWORD PTR[24+rsp]
- pslld xmm9,2
- xor esi,ebp
- mov edi,ecx
- psrld xmm12,30
- rol ecx,5
- add ebx,esi
- xor edi,ebp
- ror edx,7
- por xmm9,xmm12
- add ebx,ecx
- add eax,DWORD PTR[28+rsp]
- pshufd xmm13,xmm8,238
- ror ecx,7
- mov esi,ebx
- xor edi,edx
- rol ebx,5
- add eax,edi
- xor esi,ecx
- xor ecx,edx
- add eax,ebx
- pxor xmm10,xmm6
- add ebp,DWORD PTR[32+rsp]
- movups xmm14,XMMWORD PTR[32+r12]
- xorps xmm14,xmm15
- movups XMMWORD PTR[16+r12*1+r13],xmm2
- xorps xmm2,xmm14
- movups xmm1,XMMWORD PTR[((-80))+r15]
-DB 102,15,56,220,208
- and esi,ecx
- xor ecx,edx
- ror ebx,7
- punpcklqdq xmm13,xmm9
- mov edi,eax
- xor esi,ecx
- pxor xmm10,xmm11
- rol eax,5
- add ebp,esi
- movdqa xmm12,xmm3
- xor edi,ebx
- paddd xmm3,xmm9
- xor ebx,ecx
- pxor xmm10,xmm13
- add ebp,eax
- add edx,DWORD PTR[36+rsp]
- and edi,ebx
- xor ebx,ecx
- ror eax,7
- movdqa xmm13,xmm10
- mov esi,ebp
- xor edi,ebx
- movdqa XMMWORD PTR[16+rsp],xmm3
- rol ebp,5
- add edx,edi
- movups xmm0,XMMWORD PTR[((-64))+r15]
-DB 102,15,56,220,209
- xor esi,eax
- pslld xmm10,2
- xor eax,ebx
- add edx,ebp
- psrld xmm13,30
- add ecx,DWORD PTR[40+rsp]
- and esi,eax
- xor eax,ebx
- por xmm10,xmm13
- ror ebp,7
- mov edi,edx
- xor esi,eax
- rol edx,5
- pshufd xmm3,xmm9,238
- add ecx,esi
- xor edi,ebp
- xor ebp,eax
- add ecx,edx
- add ebx,DWORD PTR[44+rsp]
- and edi,ebp
- xor ebp,eax
- ror edx,7
- movups xmm1,XMMWORD PTR[((-48))+r15]
-DB 102,15,56,220,208
- mov esi,ecx
- xor edi,ebp
- rol ecx,5
- add ebx,edi
- xor esi,edx
- xor edx,ebp
- add ebx,ecx
- pxor xmm11,xmm7
- add eax,DWORD PTR[48+rsp]
- and esi,edx
- xor edx,ebp
- ror ecx,7
- punpcklqdq xmm3,xmm10
- mov edi,ebx
- xor esi,edx
- pxor xmm11,xmm4
- rol ebx,5
- add eax,esi
- movdqa xmm13,XMMWORD PTR[48+r11]
- xor edi,ecx
- paddd xmm12,xmm10
- xor ecx,edx
- pxor xmm11,xmm3
- add eax,ebx
- add ebp,DWORD PTR[52+rsp]
- movups xmm0,XMMWORD PTR[((-32))+r15]
-DB 102,15,56,220,209
- and edi,ecx
- xor ecx,edx
- ror ebx,7
- movdqa xmm3,xmm11
- mov esi,eax
- xor edi,ecx
- movdqa XMMWORD PTR[32+rsp],xmm12
- rol eax,5
- add ebp,edi
- xor esi,ebx
- pslld xmm11,2
- xor ebx,ecx
- add ebp,eax
- psrld xmm3,30
- add edx,DWORD PTR[56+rsp]
- and esi,ebx
- xor ebx,ecx
- por xmm11,xmm3
- ror eax,7
- mov edi,ebp
- xor esi,ebx
- rol ebp,5
- pshufd xmm12,xmm10,238
- add edx,esi
- movups xmm1,XMMWORD PTR[((-16))+r15]
-DB 102,15,56,220,208
- xor edi,eax
- xor eax,ebx
- add edx,ebp
- add ecx,DWORD PTR[60+rsp]
- and edi,eax
- xor eax,ebx
- ror ebp,7
- mov esi,edx
- xor edi,eax
- rol edx,5
- add ecx,edi
- xor esi,ebp
- xor ebp,eax
- add ecx,edx
- pxor xmm4,xmm8
- add ebx,DWORD PTR[rsp]
- and esi,ebp
- xor ebp,eax
- ror edx,7
- movups xmm0,XMMWORD PTR[r15]
-DB 102,15,56,220,209
- punpcklqdq xmm12,xmm11
- mov edi,ecx
- xor esi,ebp
- pxor xmm4,xmm5
- rol ecx,5
- add ebx,esi
- movdqa xmm3,xmm13
- xor edi,edx
- paddd xmm13,xmm11
- xor edx,ebp
- pxor xmm4,xmm12
- add ebx,ecx
- add eax,DWORD PTR[4+rsp]
- and edi,edx
- xor edx,ebp
- ror ecx,7
- movdqa xmm12,xmm4
- mov esi,ebx
- xor edi,edx
- movdqa XMMWORD PTR[48+rsp],xmm13
- rol ebx,5
- add eax,edi
- xor esi,ecx
- pslld xmm4,2
- xor ecx,edx
- add eax,ebx
- psrld xmm12,30
- add ebp,DWORD PTR[8+rsp]
- movups xmm1,XMMWORD PTR[16+r15]
-DB 102,15,56,220,208
- and esi,ecx
- xor ecx,edx
- por xmm4,xmm12
- ror ebx,7
- mov edi,eax
- xor esi,ecx
- rol eax,5
- pshufd xmm13,xmm11,238
- add ebp,esi
- xor edi,ebx
- xor ebx,ecx
- add ebp,eax
- add edx,DWORD PTR[12+rsp]
- and edi,ebx
- xor ebx,ecx
- ror eax,7
- mov esi,ebp
- xor edi,ebx
- rol ebp,5
- add edx,edi
- movups xmm0,XMMWORD PTR[32+r15]
-DB 102,15,56,220,209
- xor esi,eax
- xor eax,ebx
- add edx,ebp
- pxor xmm5,xmm9
- add ecx,DWORD PTR[16+rsp]
- and esi,eax
- xor eax,ebx
- ror ebp,7
- punpcklqdq xmm13,xmm4
- mov edi,edx
- xor esi,eax
- pxor xmm5,xmm6
- rol edx,5
- add ecx,esi
- movdqa xmm12,xmm3
- xor edi,ebp
- paddd xmm3,xmm4
- xor ebp,eax
- pxor xmm5,xmm13
- add ecx,edx
- add ebx,DWORD PTR[20+rsp]
- and edi,ebp
- xor ebp,eax
- ror edx,7
- movups xmm1,XMMWORD PTR[48+r15]
-DB 102,15,56,220,208
- movdqa xmm13,xmm5
- mov esi,ecx
- xor edi,ebp
- movdqa XMMWORD PTR[rsp],xmm3
- rol ecx,5
- add ebx,edi
- xor esi,edx
- pslld xmm5,2
- xor edx,ebp
- add ebx,ecx
- psrld xmm13,30
- add eax,DWORD PTR[24+rsp]
- and esi,edx
- xor edx,ebp
- por xmm5,xmm13
- ror ecx,7
- mov edi,ebx
- xor esi,edx
- rol ebx,5
- pshufd xmm3,xmm4,238
- add eax,esi
- xor edi,ecx
- xor ecx,edx
- add eax,ebx
- add ebp,DWORD PTR[28+rsp]
- cmp r8d,11
- jb $L$aesenclast3
- movups xmm0,XMMWORD PTR[64+r15]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[80+r15]
-DB 102,15,56,220,208
- je $L$aesenclast3
- movups xmm0,XMMWORD PTR[96+r15]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[112+r15]
-DB 102,15,56,220,208
-$L$aesenclast3::
-DB 102,15,56,221,209
- movups xmm0,XMMWORD PTR[((16-112))+r15]
- and edi,ecx
- xor ecx,edx
- ror ebx,7
- mov esi,eax
- xor edi,ecx
- rol eax,5
- add ebp,edi
- xor esi,ebx
- xor ebx,ecx
- add ebp,eax
- pxor xmm6,xmm10
- add edx,DWORD PTR[32+rsp]
- and esi,ebx
- xor ebx,ecx
- ror eax,7
- punpcklqdq xmm3,xmm5
- mov edi,ebp
- xor esi,ebx
- pxor xmm6,xmm7
- rol ebp,5
- add edx,esi
- movups xmm14,XMMWORD PTR[48+r12]
- xorps xmm14,xmm15
- movups XMMWORD PTR[32+r12*1+r13],xmm2
- xorps xmm2,xmm14
- movups xmm1,XMMWORD PTR[((-80))+r15]
-DB 102,15,56,220,208
- movdqa xmm13,xmm12
- xor edi,eax
- paddd xmm12,xmm5
- xor eax,ebx
- pxor xmm6,xmm3
- add edx,ebp
- add ecx,DWORD PTR[36+rsp]
- and edi,eax
- xor eax,ebx
- ror ebp,7
- movdqa xmm3,xmm6
- mov esi,edx
- xor edi,eax
- movdqa XMMWORD PTR[16+rsp],xmm12
- rol edx,5
- add ecx,edi
- xor esi,ebp
- pslld xmm6,2
- xor ebp,eax
- add ecx,edx
- psrld xmm3,30
- add ebx,DWORD PTR[40+rsp]
- and esi,ebp
- xor ebp,eax
- por xmm6,xmm3
- ror edx,7
- movups xmm0,XMMWORD PTR[((-64))+r15]
-DB 102,15,56,220,209
- mov edi,ecx
- xor esi,ebp
- rol ecx,5
- pshufd xmm12,xmm5,238
- add ebx,esi
- xor edi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[44+rsp]
- and edi,edx
- xor edx,ebp
- ror ecx,7
- mov esi,ebx
- xor edi,edx
- rol ebx,5
- add eax,edi
- xor esi,edx
- add eax,ebx
- pxor xmm7,xmm11
- add ebp,DWORD PTR[48+rsp]
- movups xmm1,XMMWORD PTR[((-48))+r15]
-DB 102,15,56,220,208
- xor esi,ecx
- punpcklqdq xmm12,xmm6
- mov edi,eax
- rol eax,5
- pxor xmm7,xmm8
- add ebp,esi
- xor edi,ecx
- movdqa xmm3,xmm13
- ror ebx,7
- paddd xmm13,xmm6
- add ebp,eax
- pxor xmm7,xmm12
- add edx,DWORD PTR[52+rsp]
- xor edi,ebx
- mov esi,ebp
- rol ebp,5
- movdqa xmm12,xmm7
- add edx,edi
- xor esi,ebx
- movdqa XMMWORD PTR[32+rsp],xmm13
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[56+rsp]
- pslld xmm7,2
- xor esi,eax
- mov edi,edx
- psrld xmm12,30
- rol edx,5
- add ecx,esi
- movups xmm0,XMMWORD PTR[((-32))+r15]
-DB 102,15,56,220,209
- xor edi,eax
- ror ebp,7
- por xmm7,xmm12
- add ecx,edx
- add ebx,DWORD PTR[60+rsp]
- xor edi,ebp
- mov esi,ecx
- rol ecx,5
- add ebx,edi
- xor esi,ebp
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[rsp]
- xor esi,edx
- mov edi,ebx
- rol ebx,5
- paddd xmm3,xmm7
- add eax,esi
- xor edi,edx
- movdqa XMMWORD PTR[48+rsp],xmm3
- ror ecx,7
- add eax,ebx
- add ebp,DWORD PTR[4+rsp]
- movups xmm1,XMMWORD PTR[((-16))+r15]
-DB 102,15,56,220,208
- xor edi,ecx
- mov esi,eax
- rol eax,5
- add ebp,edi
- xor esi,ecx
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[8+rsp]
- xor esi,ebx
- mov edi,ebp
- rol ebp,5
- add edx,esi
- xor edi,ebx
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[12+rsp]
- xor edi,eax
- mov esi,edx
- rol edx,5
- add ecx,edi
- movups xmm0,XMMWORD PTR[r15]
-DB 102,15,56,220,209
- xor esi,eax
- ror ebp,7
- add ecx,edx
- cmp r10,r14
- je $L$done_ssse3
- movdqa xmm3,XMMWORD PTR[64+r11]
- movdqa xmm13,XMMWORD PTR[r11]
- movdqu xmm4,XMMWORD PTR[r10]
- movdqu xmm5,XMMWORD PTR[16+r10]
- movdqu xmm6,XMMWORD PTR[32+r10]
- movdqu xmm7,XMMWORD PTR[48+r10]
-DB 102,15,56,0,227
- add r10,64
- add ebx,DWORD PTR[16+rsp]
- xor esi,ebp
- mov edi,ecx
-DB 102,15,56,0,235
- rol ecx,5
- add ebx,esi
- xor edi,ebp
- ror edx,7
- paddd xmm4,xmm13
- add ebx,ecx
- add eax,DWORD PTR[20+rsp]
- xor edi,edx
- mov esi,ebx
- movdqa XMMWORD PTR[rsp],xmm4
- rol ebx,5
- add eax,edi
- xor esi,edx
- ror ecx,7
- psubd xmm4,xmm13
- add eax,ebx
- add ebp,DWORD PTR[24+rsp]
- movups xmm1,XMMWORD PTR[16+r15]
-DB 102,15,56,220,208
- xor esi,ecx
- mov edi,eax
- rol eax,5
- add ebp,esi
- xor edi,ecx
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[28+rsp]
- xor edi,ebx
- mov esi,ebp
- rol ebp,5
- add edx,edi
- xor esi,ebx
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[32+rsp]
- xor esi,eax
- mov edi,edx
-DB 102,15,56,0,243
- rol edx,5
- add ecx,esi
- movups xmm0,XMMWORD PTR[32+r15]
-DB 102,15,56,220,209
- xor edi,eax
- ror ebp,7
- paddd xmm5,xmm13
- add ecx,edx
- add ebx,DWORD PTR[36+rsp]
- xor edi,ebp
- mov esi,ecx
- movdqa XMMWORD PTR[16+rsp],xmm5
- rol ecx,5
- add ebx,edi
- xor esi,ebp
- ror edx,7
- psubd xmm5,xmm13
- add ebx,ecx
- add eax,DWORD PTR[40+rsp]
- xor esi,edx
- mov edi,ebx
- rol ebx,5
- add eax,esi
- xor edi,edx
- ror ecx,7
- add eax,ebx
- add ebp,DWORD PTR[44+rsp]
- movups xmm1,XMMWORD PTR[48+r15]
-DB 102,15,56,220,208
- xor edi,ecx
- mov esi,eax
- rol eax,5
- add ebp,edi
- xor esi,ecx
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[48+rsp]
- xor esi,ebx
- mov edi,ebp
-DB 102,15,56,0,251
- rol ebp,5
- add edx,esi
- xor edi,ebx
- ror eax,7
- paddd xmm6,xmm13
- add edx,ebp
- add ecx,DWORD PTR[52+rsp]
- xor edi,eax
- mov esi,edx
- movdqa XMMWORD PTR[32+rsp],xmm6
- rol edx,5
- add ecx,edi
- cmp r8d,11
- jb $L$aesenclast4
- movups xmm0,XMMWORD PTR[64+r15]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[80+r15]
-DB 102,15,56,220,208
- je $L$aesenclast4
- movups xmm0,XMMWORD PTR[96+r15]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[112+r15]
-DB 102,15,56,220,208
-$L$aesenclast4::
-DB 102,15,56,221,209
- movups xmm0,XMMWORD PTR[((16-112))+r15]
- xor esi,eax
- ror ebp,7
- psubd xmm6,xmm13
- add ecx,edx
- add ebx,DWORD PTR[56+rsp]
- xor esi,ebp
- mov edi,ecx
- rol ecx,5
- add ebx,esi
- xor edi,ebp
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[60+rsp]
- xor edi,edx
- mov esi,ebx
- rol ebx,5
- add eax,edi
- ror ecx,7
- add eax,ebx
- movups XMMWORD PTR[48+r12*1+r13],xmm2
- lea r12,QWORD PTR[64+r12]
-
- add eax,DWORD PTR[r9]
- add esi,DWORD PTR[4+r9]
- add ecx,DWORD PTR[8+r9]
- add edx,DWORD PTR[12+r9]
- mov DWORD PTR[r9],eax
- add ebp,DWORD PTR[16+r9]
- mov DWORD PTR[4+r9],esi
- mov ebx,esi
- mov DWORD PTR[8+r9],ecx
- mov edi,ecx
- mov DWORD PTR[12+r9],edx
- xor edi,edx
- mov DWORD PTR[16+r9],ebp
- and esi,edi
- jmp $L$oop_ssse3
-
-$L$done_ssse3::
- add ebx,DWORD PTR[16+rsp]
- xor esi,ebp
- mov edi,ecx
- rol ecx,5
- add ebx,esi
- xor edi,ebp
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[20+rsp]
- xor edi,edx
- mov esi,ebx
- rol ebx,5
- add eax,edi
- xor esi,edx
- ror ecx,7
- add eax,ebx
- add ebp,DWORD PTR[24+rsp]
- movups xmm1,XMMWORD PTR[16+r15]
-DB 102,15,56,220,208
- xor esi,ecx
- mov edi,eax
- rol eax,5
- add ebp,esi
- xor edi,ecx
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[28+rsp]
- xor edi,ebx
- mov esi,ebp
- rol ebp,5
- add edx,edi
- xor esi,ebx
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[32+rsp]
- xor esi,eax
- mov edi,edx
- rol edx,5
- add ecx,esi
- movups xmm0,XMMWORD PTR[32+r15]
-DB 102,15,56,220,209
- xor edi,eax
- ror ebp,7
- add ecx,edx
- add ebx,DWORD PTR[36+rsp]
- xor edi,ebp
- mov esi,ecx
- rol ecx,5
- add ebx,edi
- xor esi,ebp
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[40+rsp]
- xor esi,edx
- mov edi,ebx
- rol ebx,5
- add eax,esi
- xor edi,edx
- ror ecx,7
- add eax,ebx
- add ebp,DWORD PTR[44+rsp]
- movups xmm1,XMMWORD PTR[48+r15]
-DB 102,15,56,220,208
- xor edi,ecx
- mov esi,eax
- rol eax,5
- add ebp,edi
- xor esi,ecx
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[48+rsp]
- xor esi,ebx
- mov edi,ebp
- rol ebp,5
- add edx,esi
- xor edi,ebx
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[52+rsp]
- xor edi,eax
- mov esi,edx
- rol edx,5
- add ecx,edi
- cmp r8d,11
- jb $L$aesenclast5
- movups xmm0,XMMWORD PTR[64+r15]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[80+r15]
-DB 102,15,56,220,208
- je $L$aesenclast5
- movups xmm0,XMMWORD PTR[96+r15]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[112+r15]
-DB 102,15,56,220,208
-$L$aesenclast5::
-DB 102,15,56,221,209
- movups xmm0,XMMWORD PTR[((16-112))+r15]
- xor esi,eax
- ror ebp,7
- add ecx,edx
- add ebx,DWORD PTR[56+rsp]
- xor esi,ebp
- mov edi,ecx
- rol ecx,5
- add ebx,esi
- xor edi,ebp
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[60+rsp]
- xor edi,edx
- mov esi,ebx
- rol ebx,5
- add eax,edi
- ror ecx,7
- add eax,ebx
- movups XMMWORD PTR[48+r12*1+r13],xmm2
- mov r8,QWORD PTR[88+rsp]
-
- add eax,DWORD PTR[r9]
- add esi,DWORD PTR[4+r9]
- add ecx,DWORD PTR[8+r9]
- mov DWORD PTR[r9],eax
- add edx,DWORD PTR[12+r9]
- mov DWORD PTR[4+r9],esi
- add ebp,DWORD PTR[16+r9]
- mov DWORD PTR[8+r9],ecx
- mov DWORD PTR[12+r9],edx
- mov DWORD PTR[16+r9],ebp
- movups XMMWORD PTR[r8],xmm2
- movaps xmm6,XMMWORD PTR[((96+0))+rsp]
- movaps xmm7,XMMWORD PTR[((96+16))+rsp]
- movaps xmm8,XMMWORD PTR[((96+32))+rsp]
- movaps xmm9,XMMWORD PTR[((96+48))+rsp]
- movaps xmm10,XMMWORD PTR[((96+64))+rsp]
- movaps xmm11,XMMWORD PTR[((96+80))+rsp]
- movaps xmm12,XMMWORD PTR[((96+96))+rsp]
- movaps xmm13,XMMWORD PTR[((96+112))+rsp]
- movaps xmm14,XMMWORD PTR[((96+128))+rsp]
- movaps xmm15,XMMWORD PTR[((96+144))+rsp]
- lea rsi,QWORD PTR[264+rsp]
-
- mov r15,QWORD PTR[rsi]
-
- mov r14,QWORD PTR[8+rsi]
-
- mov r13,QWORD PTR[16+rsi]
-
- mov r12,QWORD PTR[24+rsi]
-
- mov rbp,QWORD PTR[32+rsi]
-
- mov rbx,QWORD PTR[40+rsi]
-
- lea rsp,QWORD PTR[48+rsi]
-
-$L$epilogue_ssse3::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_cbc_sha1_enc_ssse3::
-aesni_cbc_sha1_enc_ssse3 ENDP
-
-ALIGN 32
-aesni_cbc_sha1_enc_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_cbc_sha1_enc_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov r10,QWORD PTR[56+rsp]
-
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-264))+rsp]
-
-
-
- movaps XMMWORD PTR[(96+0)+rsp],xmm6
- movaps XMMWORD PTR[(96+16)+rsp],xmm7
- movaps XMMWORD PTR[(96+32)+rsp],xmm8
- movaps XMMWORD PTR[(96+48)+rsp],xmm9
- movaps XMMWORD PTR[(96+64)+rsp],xmm10
- movaps XMMWORD PTR[(96+80)+rsp],xmm11
- movaps XMMWORD PTR[(96+96)+rsp],xmm12
- movaps XMMWORD PTR[(96+112)+rsp],xmm13
- movaps XMMWORD PTR[(96+128)+rsp],xmm14
- movaps XMMWORD PTR[(96+144)+rsp],xmm15
-$L$prologue_avx::
- vzeroall
- mov r12,rdi
- mov r13,rsi
- mov r14,rdx
- lea r15,QWORD PTR[112+rcx]
- vmovdqu xmm12,XMMWORD PTR[r8]
- mov QWORD PTR[88+rsp],r8
- shl r14,6
- sub r13,r12
- mov r8d,DWORD PTR[((240-112))+r15]
- add r14,r10
-
- lea r11,QWORD PTR[K_XX_XX]
- mov eax,DWORD PTR[r9]
- mov ebx,DWORD PTR[4+r9]
- mov ecx,DWORD PTR[8+r9]
- mov edx,DWORD PTR[12+r9]
- mov esi,ebx
- mov ebp,DWORD PTR[16+r9]
- mov edi,ecx
- xor edi,edx
- and esi,edi
-
- vmovdqa xmm6,XMMWORD PTR[64+r11]
- vmovdqa xmm10,XMMWORD PTR[r11]
- vmovdqu xmm0,XMMWORD PTR[r10]
- vmovdqu xmm1,XMMWORD PTR[16+r10]
- vmovdqu xmm2,XMMWORD PTR[32+r10]
- vmovdqu xmm3,XMMWORD PTR[48+r10]
- vpshufb xmm0,xmm0,xmm6
- add r10,64
- vpshufb xmm1,xmm1,xmm6
- vpshufb xmm2,xmm2,xmm6
- vpshufb xmm3,xmm3,xmm6
- vpaddd xmm4,xmm0,xmm10
- vpaddd xmm5,xmm1,xmm10
- vpaddd xmm6,xmm2,xmm10
- vmovdqa XMMWORD PTR[rsp],xmm4
- vmovdqa XMMWORD PTR[16+rsp],xmm5
- vmovdqa XMMWORD PTR[32+rsp],xmm6
- vmovups xmm15,XMMWORD PTR[((-112))+r15]
- vmovups xmm14,XMMWORD PTR[((16-112))+r15]
- jmp $L$oop_avx
-ALIGN 32
-$L$oop_avx::
- shrd ebx,ebx,2
- vmovdqu xmm13,XMMWORD PTR[r12]
- vpxor xmm13,xmm13,xmm15
- vpxor xmm12,xmm12,xmm13
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-80))+r15]
- xor esi,edx
- vpalignr xmm4,xmm1,xmm0,8
- mov edi,eax
- add ebp,DWORD PTR[rsp]
- vpaddd xmm9,xmm10,xmm3
- xor ebx,ecx
- shld eax,eax,5
- vpsrldq xmm8,xmm3,4
- add ebp,esi
- and edi,ebx
- vpxor xmm4,xmm4,xmm0
- xor ebx,ecx
- add ebp,eax
- vpxor xmm8,xmm8,xmm2
- shrd eax,eax,7
- xor edi,ecx
- mov esi,ebp
- add edx,DWORD PTR[4+rsp]
- vpxor xmm4,xmm4,xmm8
- xor eax,ebx
- shld ebp,ebp,5
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- add edx,edi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[((-64))+r15]
- and esi,eax
- vpsrld xmm8,xmm4,31
- xor eax,ebx
- add edx,ebp
- shrd ebp,ebp,7
- xor esi,ebx
- vpslldq xmm9,xmm4,12
- vpaddd xmm4,xmm4,xmm4
- mov edi,edx
- add ecx,DWORD PTR[8+rsp]
- xor ebp,eax
- shld edx,edx,5
- vpor xmm4,xmm4,xmm8
- vpsrld xmm8,xmm9,30
- add ecx,esi
- and edi,ebp
- xor ebp,eax
- add ecx,edx
- vpslld xmm9,xmm9,2
- vpxor xmm4,xmm4,xmm8
- shrd edx,edx,7
- xor edi,eax
- mov esi,ecx
- add ebx,DWORD PTR[12+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-48))+r15]
- vpxor xmm4,xmm4,xmm9
- xor edx,ebp
- shld ecx,ecx,5
- add ebx,edi
- and esi,edx
- xor edx,ebp
- add ebx,ecx
- shrd ecx,ecx,7
- xor esi,ebp
- vpalignr xmm5,xmm2,xmm1,8
- mov edi,ebx
- add eax,DWORD PTR[16+rsp]
- vpaddd xmm9,xmm10,xmm4
- xor ecx,edx
- shld ebx,ebx,5
- vpsrldq xmm8,xmm4,4
- add eax,esi
- and edi,ecx
- vpxor xmm5,xmm5,xmm1
- xor ecx,edx
- add eax,ebx
- vpxor xmm8,xmm8,xmm3
- shrd ebx,ebx,7
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[((-32))+r15]
- xor edi,edx
- mov esi,eax
- add ebp,DWORD PTR[20+rsp]
- vpxor xmm5,xmm5,xmm8
- xor ebx,ecx
- shld eax,eax,5
- vmovdqa XMMWORD PTR[rsp],xmm9
- add ebp,edi
- and esi,ebx
- vpsrld xmm8,xmm5,31
- xor ebx,ecx
- add ebp,eax
- shrd eax,eax,7
- xor esi,ecx
- vpslldq xmm9,xmm5,12
- vpaddd xmm5,xmm5,xmm5
- mov edi,ebp
- add edx,DWORD PTR[24+rsp]
- xor eax,ebx
- shld ebp,ebp,5
- vpor xmm5,xmm5,xmm8
- vpsrld xmm8,xmm9,30
- add edx,esi
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-16))+r15]
- and edi,eax
- xor eax,ebx
- add edx,ebp
- vpslld xmm9,xmm9,2
- vpxor xmm5,xmm5,xmm8
- shrd ebp,ebp,7
- xor edi,ebx
- mov esi,edx
- add ecx,DWORD PTR[28+rsp]
- vpxor xmm5,xmm5,xmm9
- xor ebp,eax
- shld edx,edx,5
- vmovdqa xmm10,XMMWORD PTR[16+r11]
- add ecx,edi
- and esi,ebp
- xor ebp,eax
- add ecx,edx
- shrd edx,edx,7
- xor esi,eax
- vpalignr xmm6,xmm3,xmm2,8
- mov edi,ecx
- add ebx,DWORD PTR[32+rsp]
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[r15]
- vpaddd xmm9,xmm10,xmm5
- xor edx,ebp
- shld ecx,ecx,5
- vpsrldq xmm8,xmm5,4
- add ebx,esi
- and edi,edx
- vpxor xmm6,xmm6,xmm2
- xor edx,ebp
- add ebx,ecx
- vpxor xmm8,xmm8,xmm4
- shrd ecx,ecx,7
- xor edi,ebp
- mov esi,ebx
- add eax,DWORD PTR[36+rsp]
- vpxor xmm6,xmm6,xmm8
- xor ecx,edx
- shld ebx,ebx,5
- vmovdqa XMMWORD PTR[16+rsp],xmm9
- add eax,edi
- and esi,ecx
- vpsrld xmm8,xmm6,31
- xor ecx,edx
- add eax,ebx
- shrd ebx,ebx,7
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[16+r15]
- xor esi,edx
- vpslldq xmm9,xmm6,12
- vpaddd xmm6,xmm6,xmm6
- mov edi,eax
- add ebp,DWORD PTR[40+rsp]
- xor ebx,ecx
- shld eax,eax,5
- vpor xmm6,xmm6,xmm8
- vpsrld xmm8,xmm9,30
- add ebp,esi
- and edi,ebx
- xor ebx,ecx
- add ebp,eax
- vpslld xmm9,xmm9,2
- vpxor xmm6,xmm6,xmm8
- shrd eax,eax,7
- xor edi,ecx
- mov esi,ebp
- add edx,DWORD PTR[44+rsp]
- vpxor xmm6,xmm6,xmm9
- xor eax,ebx
- shld ebp,ebp,5
- add edx,edi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[32+r15]
- and esi,eax
- xor eax,ebx
- add edx,ebp
- shrd ebp,ebp,7
- xor esi,ebx
- vpalignr xmm7,xmm4,xmm3,8
- mov edi,edx
- add ecx,DWORD PTR[48+rsp]
- vpaddd xmm9,xmm10,xmm6
- xor ebp,eax
- shld edx,edx,5
- vpsrldq xmm8,xmm6,4
- add ecx,esi
- and edi,ebp
- vpxor xmm7,xmm7,xmm3
- xor ebp,eax
- add ecx,edx
- vpxor xmm8,xmm8,xmm5
- shrd edx,edx,7
- xor edi,eax
- mov esi,ecx
- add ebx,DWORD PTR[52+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[48+r15]
- vpxor xmm7,xmm7,xmm8
- xor edx,ebp
- shld ecx,ecx,5
- vmovdqa XMMWORD PTR[32+rsp],xmm9
- add ebx,edi
- and esi,edx
- vpsrld xmm8,xmm7,31
- xor edx,ebp
- add ebx,ecx
- shrd ecx,ecx,7
- xor esi,ebp
- vpslldq xmm9,xmm7,12
- vpaddd xmm7,xmm7,xmm7
- mov edi,ebx
- add eax,DWORD PTR[56+rsp]
- xor ecx,edx
- shld ebx,ebx,5
- vpor xmm7,xmm7,xmm8
- vpsrld xmm8,xmm9,30
- add eax,esi
- and edi,ecx
- xor ecx,edx
- add eax,ebx
- vpslld xmm9,xmm9,2
- vpxor xmm7,xmm7,xmm8
- shrd ebx,ebx,7
- cmp r8d,11
- jb $L$vaesenclast6
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[64+r15]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[80+r15]
- je $L$vaesenclast6
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[96+r15]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[112+r15]
-$L$vaesenclast6::
- vaesenclast xmm12,xmm12,xmm15
- vmovups xmm15,XMMWORD PTR[((-112))+r15]
- vmovups xmm14,XMMWORD PTR[((16-112))+r15]
- xor edi,edx
- mov esi,eax
- add ebp,DWORD PTR[60+rsp]
- vpxor xmm7,xmm7,xmm9
- xor ebx,ecx
- shld eax,eax,5
- add ebp,edi
- and esi,ebx
- xor ebx,ecx
- add ebp,eax
- vpalignr xmm8,xmm7,xmm6,8
- vpxor xmm0,xmm0,xmm4
- shrd eax,eax,7
- xor esi,ecx
- mov edi,ebp
- add edx,DWORD PTR[rsp]
- vpxor xmm0,xmm0,xmm1
- xor eax,ebx
- shld ebp,ebp,5
- vpaddd xmm9,xmm10,xmm7
- add edx,esi
- vmovdqu xmm13,XMMWORD PTR[16+r12]
- vpxor xmm13,xmm13,xmm15
- vmovups XMMWORD PTR[r13*1+r12],xmm12
- vpxor xmm12,xmm12,xmm13
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-80))+r15]
- and edi,eax
- vpxor xmm0,xmm0,xmm8
- xor eax,ebx
- add edx,ebp
- shrd ebp,ebp,7
- xor edi,ebx
- vpsrld xmm8,xmm0,30
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- mov esi,edx
- add ecx,DWORD PTR[4+rsp]
- xor ebp,eax
- shld edx,edx,5
- vpslld xmm0,xmm0,2
- add ecx,edi
- and esi,ebp
- xor ebp,eax
- add ecx,edx
- shrd edx,edx,7
- xor esi,eax
- mov edi,ecx
- add ebx,DWORD PTR[8+rsp]
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[((-64))+r15]
- vpor xmm0,xmm0,xmm8
- xor edx,ebp
- shld ecx,ecx,5
- add ebx,esi
- and edi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[12+rsp]
- xor edi,ebp
- mov esi,ebx
- shld ebx,ebx,5
- add eax,edi
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- vpalignr xmm8,xmm0,xmm7,8
- vpxor xmm1,xmm1,xmm5
- add ebp,DWORD PTR[16+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-48))+r15]
- xor esi,ecx
- mov edi,eax
- shld eax,eax,5
- vpxor xmm1,xmm1,xmm2
- add ebp,esi
- xor edi,ecx
- vpaddd xmm9,xmm10,xmm0
- shrd ebx,ebx,7
- add ebp,eax
- vpxor xmm1,xmm1,xmm8
- add edx,DWORD PTR[20+rsp]
- xor edi,ebx
- mov esi,ebp
- shld ebp,ebp,5
- vpsrld xmm8,xmm1,30
- vmovdqa XMMWORD PTR[rsp],xmm9
- add edx,edi
- xor esi,ebx
- shrd eax,eax,7
- add edx,ebp
- vpslld xmm1,xmm1,2
- add ecx,DWORD PTR[24+rsp]
- xor esi,eax
- mov edi,edx
- shld edx,edx,5
- add ecx,esi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[((-32))+r15]
- xor edi,eax
- shrd ebp,ebp,7
- add ecx,edx
- vpor xmm1,xmm1,xmm8
- add ebx,DWORD PTR[28+rsp]
- xor edi,ebp
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,edi
- xor esi,ebp
- shrd edx,edx,7
- add ebx,ecx
- vpalignr xmm8,xmm1,xmm0,8
- vpxor xmm2,xmm2,xmm6
- add eax,DWORD PTR[32+rsp]
- xor esi,edx
- mov edi,ebx
- shld ebx,ebx,5
- vpxor xmm2,xmm2,xmm3
- add eax,esi
- xor edi,edx
- vpaddd xmm9,xmm10,xmm1
- vmovdqa xmm10,XMMWORD PTR[32+r11]
- shrd ecx,ecx,7
- add eax,ebx
- vpxor xmm2,xmm2,xmm8
- add ebp,DWORD PTR[36+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-16))+r15]
- xor edi,ecx
- mov esi,eax
- shld eax,eax,5
- vpsrld xmm8,xmm2,30
- vmovdqa XMMWORD PTR[16+rsp],xmm9
- add ebp,edi
- xor esi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- vpslld xmm2,xmm2,2
- add edx,DWORD PTR[40+rsp]
- xor esi,ebx
- mov edi,ebp
- shld ebp,ebp,5
- add edx,esi
- xor edi,ebx
- shrd eax,eax,7
- add edx,ebp
- vpor xmm2,xmm2,xmm8
- add ecx,DWORD PTR[44+rsp]
- xor edi,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,edi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[r15]
- xor esi,eax
- shrd ebp,ebp,7
- add ecx,edx
- vpalignr xmm8,xmm2,xmm1,8
- vpxor xmm3,xmm3,xmm7
- add ebx,DWORD PTR[48+rsp]
- xor esi,ebp
- mov edi,ecx
- shld ecx,ecx,5
- vpxor xmm3,xmm3,xmm4
- add ebx,esi
- xor edi,ebp
- vpaddd xmm9,xmm10,xmm2
- shrd edx,edx,7
- add ebx,ecx
- vpxor xmm3,xmm3,xmm8
- add eax,DWORD PTR[52+rsp]
- xor edi,edx
- mov esi,ebx
- shld ebx,ebx,5
- vpsrld xmm8,xmm3,30
- vmovdqa XMMWORD PTR[32+rsp],xmm9
- add eax,edi
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- vpslld xmm3,xmm3,2
- add ebp,DWORD PTR[56+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[16+r15]
- xor esi,ecx
- mov edi,eax
- shld eax,eax,5
- add ebp,esi
- xor edi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- vpor xmm3,xmm3,xmm8
- add edx,DWORD PTR[60+rsp]
- xor edi,ebx
- mov esi,ebp
- shld ebp,ebp,5
- add edx,edi
- xor esi,ebx
- shrd eax,eax,7
- add edx,ebp
- vpalignr xmm8,xmm3,xmm2,8
- vpxor xmm4,xmm4,xmm0
- add ecx,DWORD PTR[rsp]
- xor esi,eax
- mov edi,edx
- shld edx,edx,5
- vpxor xmm4,xmm4,xmm5
- add ecx,esi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[32+r15]
- xor edi,eax
- vpaddd xmm9,xmm10,xmm3
- shrd ebp,ebp,7
- add ecx,edx
- vpxor xmm4,xmm4,xmm8
- add ebx,DWORD PTR[4+rsp]
- xor edi,ebp
- mov esi,ecx
- shld ecx,ecx,5
- vpsrld xmm8,xmm4,30
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- add ebx,edi
- xor esi,ebp
- shrd edx,edx,7
- add ebx,ecx
- vpslld xmm4,xmm4,2
- add eax,DWORD PTR[8+rsp]
- xor esi,edx
- mov edi,ebx
- shld ebx,ebx,5
- add eax,esi
- xor edi,edx
- shrd ecx,ecx,7
- add eax,ebx
- vpor xmm4,xmm4,xmm8
- add ebp,DWORD PTR[12+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[48+r15]
- xor edi,ecx
- mov esi,eax
- shld eax,eax,5
- add ebp,edi
- xor esi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- vpalignr xmm8,xmm4,xmm3,8
- vpxor xmm5,xmm5,xmm1
- add edx,DWORD PTR[16+rsp]
- xor esi,ebx
- mov edi,ebp
- shld ebp,ebp,5
- vpxor xmm5,xmm5,xmm6
- add edx,esi
- xor edi,ebx
- vpaddd xmm9,xmm10,xmm4
- shrd eax,eax,7
- add edx,ebp
- vpxor xmm5,xmm5,xmm8
- add ecx,DWORD PTR[20+rsp]
- xor edi,eax
- mov esi,edx
- shld edx,edx,5
- vpsrld xmm8,xmm5,30
- vmovdqa XMMWORD PTR[rsp],xmm9
- add ecx,edi
- cmp r8d,11
- jb $L$vaesenclast7
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[64+r15]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[80+r15]
- je $L$vaesenclast7
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[96+r15]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[112+r15]
-$L$vaesenclast7::
- vaesenclast xmm12,xmm12,xmm15
- vmovups xmm15,XMMWORD PTR[((-112))+r15]
- vmovups xmm14,XMMWORD PTR[((16-112))+r15]
- xor esi,eax
- shrd ebp,ebp,7
- add ecx,edx
- vpslld xmm5,xmm5,2
- add ebx,DWORD PTR[24+rsp]
- xor esi,ebp
- mov edi,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor edi,ebp
- shrd edx,edx,7
- add ebx,ecx
- vpor xmm5,xmm5,xmm8
- add eax,DWORD PTR[28+rsp]
- shrd ecx,ecx,7
- mov esi,ebx
- xor edi,edx
- shld ebx,ebx,5
- add eax,edi
- xor esi,ecx
- xor ecx,edx
- add eax,ebx
- vpalignr xmm8,xmm5,xmm4,8
- vpxor xmm6,xmm6,xmm2
- add ebp,DWORD PTR[32+rsp]
- vmovdqu xmm13,XMMWORD PTR[32+r12]
- vpxor xmm13,xmm13,xmm15
- vmovups XMMWORD PTR[16+r12*1+r13],xmm12
- vpxor xmm12,xmm12,xmm13
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-80))+r15]
- and esi,ecx
- xor ecx,edx
- shrd ebx,ebx,7
- vpxor xmm6,xmm6,xmm7
- mov edi,eax
- xor esi,ecx
- vpaddd xmm9,xmm10,xmm5
- shld eax,eax,5
- add ebp,esi
- vpxor xmm6,xmm6,xmm8
- xor edi,ebx
- xor ebx,ecx
- add ebp,eax
- add edx,DWORD PTR[36+rsp]
- vpsrld xmm8,xmm6,30
- vmovdqa XMMWORD PTR[16+rsp],xmm9
- and edi,ebx
- xor ebx,ecx
- shrd eax,eax,7
- mov esi,ebp
- vpslld xmm6,xmm6,2
- xor edi,ebx
- shld ebp,ebp,5
- add edx,edi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[((-64))+r15]
- xor esi,eax
- xor eax,ebx
- add edx,ebp
- add ecx,DWORD PTR[40+rsp]
- and esi,eax
- vpor xmm6,xmm6,xmm8
- xor eax,ebx
- shrd ebp,ebp,7
- mov edi,edx
- xor esi,eax
- shld edx,edx,5
- add ecx,esi
- xor edi,ebp
- xor ebp,eax
- add ecx,edx
- add ebx,DWORD PTR[44+rsp]
- and edi,ebp
- xor ebp,eax
- shrd edx,edx,7
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-48))+r15]
- mov esi,ecx
- xor edi,ebp
- shld ecx,ecx,5
- add ebx,edi
- xor esi,edx
- xor edx,ebp
- add ebx,ecx
- vpalignr xmm8,xmm6,xmm5,8
- vpxor xmm7,xmm7,xmm3
- add eax,DWORD PTR[48+rsp]
- and esi,edx
- xor edx,ebp
- shrd ecx,ecx,7
- vpxor xmm7,xmm7,xmm0
- mov edi,ebx
- xor esi,edx
- vpaddd xmm9,xmm10,xmm6
- vmovdqa xmm10,XMMWORD PTR[48+r11]
- shld ebx,ebx,5
- add eax,esi
- vpxor xmm7,xmm7,xmm8
- xor edi,ecx
- xor ecx,edx
- add eax,ebx
- add ebp,DWORD PTR[52+rsp]
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[((-32))+r15]
- vpsrld xmm8,xmm7,30
- vmovdqa XMMWORD PTR[32+rsp],xmm9
- and edi,ecx
- xor ecx,edx
- shrd ebx,ebx,7
- mov esi,eax
- vpslld xmm7,xmm7,2
- xor edi,ecx
- shld eax,eax,5
- add ebp,edi
- xor esi,ebx
- xor ebx,ecx
- add ebp,eax
- add edx,DWORD PTR[56+rsp]
- and esi,ebx
- vpor xmm7,xmm7,xmm8
- xor ebx,ecx
- shrd eax,eax,7
- mov edi,ebp
- xor esi,ebx
- shld ebp,ebp,5
- add edx,esi
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-16))+r15]
- xor edi,eax
- xor eax,ebx
- add edx,ebp
- add ecx,DWORD PTR[60+rsp]
- and edi,eax
- xor eax,ebx
- shrd ebp,ebp,7
- mov esi,edx
- xor edi,eax
- shld edx,edx,5
- add ecx,edi
- xor esi,ebp
- xor ebp,eax
- add ecx,edx
- vpalignr xmm8,xmm7,xmm6,8
- vpxor xmm0,xmm0,xmm4
- add ebx,DWORD PTR[rsp]
- and esi,ebp
- xor ebp,eax
- shrd edx,edx,7
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[r15]
- vpxor xmm0,xmm0,xmm1
- mov edi,ecx
- xor esi,ebp
- vpaddd xmm9,xmm10,xmm7
- shld ecx,ecx,5
- add ebx,esi
- vpxor xmm0,xmm0,xmm8
- xor edi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[4+rsp]
- vpsrld xmm8,xmm0,30
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- and edi,edx
- xor edx,ebp
- shrd ecx,ecx,7
- mov esi,ebx
- vpslld xmm0,xmm0,2
- xor edi,edx
- shld ebx,ebx,5
- add eax,edi
- xor esi,ecx
- xor ecx,edx
- add eax,ebx
- add ebp,DWORD PTR[8+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[16+r15]
- and esi,ecx
- vpor xmm0,xmm0,xmm8
- xor ecx,edx
- shrd ebx,ebx,7
- mov edi,eax
- xor esi,ecx
- shld eax,eax,5
- add ebp,esi
- xor edi,ebx
- xor ebx,ecx
- add ebp,eax
- add edx,DWORD PTR[12+rsp]
- and edi,ebx
- xor ebx,ecx
- shrd eax,eax,7
- mov esi,ebp
- xor edi,ebx
- shld ebp,ebp,5
- add edx,edi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[32+r15]
- xor esi,eax
- xor eax,ebx
- add edx,ebp
- vpalignr xmm8,xmm0,xmm7,8
- vpxor xmm1,xmm1,xmm5
- add ecx,DWORD PTR[16+rsp]
- and esi,eax
- xor eax,ebx
- shrd ebp,ebp,7
- vpxor xmm1,xmm1,xmm2
- mov edi,edx
- xor esi,eax
- vpaddd xmm9,xmm10,xmm0
- shld edx,edx,5
- add ecx,esi
- vpxor xmm1,xmm1,xmm8
- xor edi,ebp
- xor ebp,eax
- add ecx,edx
- add ebx,DWORD PTR[20+rsp]
- vpsrld xmm8,xmm1,30
- vmovdqa XMMWORD PTR[rsp],xmm9
- and edi,ebp
- xor ebp,eax
- shrd edx,edx,7
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[48+r15]
- mov esi,ecx
- vpslld xmm1,xmm1,2
- xor edi,ebp
- shld ecx,ecx,5
- add ebx,edi
- xor esi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[24+rsp]
- and esi,edx
- vpor xmm1,xmm1,xmm8
- xor edx,ebp
- shrd ecx,ecx,7
- mov edi,ebx
- xor esi,edx
- shld ebx,ebx,5
- add eax,esi
- xor edi,ecx
- xor ecx,edx
- add eax,ebx
- add ebp,DWORD PTR[28+rsp]
- cmp r8d,11
- jb $L$vaesenclast8
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[64+r15]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[80+r15]
- je $L$vaesenclast8
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[96+r15]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[112+r15]
-$L$vaesenclast8::
- vaesenclast xmm12,xmm12,xmm15
- vmovups xmm15,XMMWORD PTR[((-112))+r15]
- vmovups xmm14,XMMWORD PTR[((16-112))+r15]
- and edi,ecx
- xor ecx,edx
- shrd ebx,ebx,7
- mov esi,eax
- xor edi,ecx
- shld eax,eax,5
- add ebp,edi
- xor esi,ebx
- xor ebx,ecx
- add ebp,eax
- vpalignr xmm8,xmm1,xmm0,8
- vpxor xmm2,xmm2,xmm6
- add edx,DWORD PTR[32+rsp]
- and esi,ebx
- xor ebx,ecx
- shrd eax,eax,7
- vpxor xmm2,xmm2,xmm3
- mov edi,ebp
- xor esi,ebx
- vpaddd xmm9,xmm10,xmm1
- shld ebp,ebp,5
- add edx,esi
- vmovdqu xmm13,XMMWORD PTR[48+r12]
- vpxor xmm13,xmm13,xmm15
- vmovups XMMWORD PTR[32+r12*1+r13],xmm12
- vpxor xmm12,xmm12,xmm13
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-80))+r15]
- vpxor xmm2,xmm2,xmm8
- xor edi,eax
- xor eax,ebx
- add edx,ebp
- add ecx,DWORD PTR[36+rsp]
- vpsrld xmm8,xmm2,30
- vmovdqa XMMWORD PTR[16+rsp],xmm9
- and edi,eax
- xor eax,ebx
- shrd ebp,ebp,7
- mov esi,edx
- vpslld xmm2,xmm2,2
- xor edi,eax
- shld edx,edx,5
- add ecx,edi
- xor esi,ebp
- xor ebp,eax
- add ecx,edx
- add ebx,DWORD PTR[40+rsp]
- and esi,ebp
- vpor xmm2,xmm2,xmm8
- xor ebp,eax
- shrd edx,edx,7
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[((-64))+r15]
- mov edi,ecx
- xor esi,ebp
- shld ecx,ecx,5
- add ebx,esi
- xor edi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[44+rsp]
- and edi,edx
- xor edx,ebp
- shrd ecx,ecx,7
- mov esi,ebx
- xor edi,edx
- shld ebx,ebx,5
- add eax,edi
- xor esi,edx
- add eax,ebx
- vpalignr xmm8,xmm2,xmm1,8
- vpxor xmm3,xmm3,xmm7
- add ebp,DWORD PTR[48+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-48))+r15]
- xor esi,ecx
- mov edi,eax
- shld eax,eax,5
- vpxor xmm3,xmm3,xmm4
- add ebp,esi
- xor edi,ecx
- vpaddd xmm9,xmm10,xmm2
- shrd ebx,ebx,7
- add ebp,eax
- vpxor xmm3,xmm3,xmm8
- add edx,DWORD PTR[52+rsp]
- xor edi,ebx
- mov esi,ebp
- shld ebp,ebp,5
- vpsrld xmm8,xmm3,30
- vmovdqa XMMWORD PTR[32+rsp],xmm9
- add edx,edi
- xor esi,ebx
- shrd eax,eax,7
- add edx,ebp
- vpslld xmm3,xmm3,2
- add ecx,DWORD PTR[56+rsp]
- xor esi,eax
- mov edi,edx
- shld edx,edx,5
- add ecx,esi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[((-32))+r15]
- xor edi,eax
- shrd ebp,ebp,7
- add ecx,edx
- vpor xmm3,xmm3,xmm8
- add ebx,DWORD PTR[60+rsp]
- xor edi,ebp
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,edi
- xor esi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[rsp]
- vpaddd xmm9,xmm10,xmm3
- xor esi,edx
- mov edi,ebx
- shld ebx,ebx,5
- add eax,esi
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- xor edi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add ebp,DWORD PTR[4+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[((-16))+r15]
- xor edi,ecx
- mov esi,eax
- shld eax,eax,5
- add ebp,edi
- xor esi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- add edx,DWORD PTR[8+rsp]
- xor esi,ebx
- mov edi,ebp
- shld ebp,ebp,5
- add edx,esi
- xor edi,ebx
- shrd eax,eax,7
- add edx,ebp
- add ecx,DWORD PTR[12+rsp]
- xor edi,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,edi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[r15]
- xor esi,eax
- shrd ebp,ebp,7
- add ecx,edx
- cmp r10,r14
- je $L$done_avx
- vmovdqa xmm9,XMMWORD PTR[64+r11]
- vmovdqa xmm10,XMMWORD PTR[r11]
- vmovdqu xmm0,XMMWORD PTR[r10]
- vmovdqu xmm1,XMMWORD PTR[16+r10]
- vmovdqu xmm2,XMMWORD PTR[32+r10]
- vmovdqu xmm3,XMMWORD PTR[48+r10]
- vpshufb xmm0,xmm0,xmm9
- add r10,64
- add ebx,DWORD PTR[16+rsp]
- xor esi,ebp
- vpshufb xmm1,xmm1,xmm9
- mov edi,ecx
- shld ecx,ecx,5
- vpaddd xmm8,xmm0,xmm10
- add ebx,esi
- xor edi,ebp
- shrd edx,edx,7
- add ebx,ecx
- vmovdqa XMMWORD PTR[rsp],xmm8
- add eax,DWORD PTR[20+rsp]
- xor edi,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,edi
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add ebp,DWORD PTR[24+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[16+r15]
- xor esi,ecx
- mov edi,eax
- shld eax,eax,5
- add ebp,esi
- xor edi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- add edx,DWORD PTR[28+rsp]
- xor edi,ebx
- mov esi,ebp
- shld ebp,ebp,5
- add edx,edi
- xor esi,ebx
- shrd eax,eax,7
- add edx,ebp
- add ecx,DWORD PTR[32+rsp]
- xor esi,eax
- vpshufb xmm2,xmm2,xmm9
- mov edi,edx
- shld edx,edx,5
- vpaddd xmm8,xmm1,xmm10
- add ecx,esi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[32+r15]
- xor edi,eax
- shrd ebp,ebp,7
- add ecx,edx
- vmovdqa XMMWORD PTR[16+rsp],xmm8
- add ebx,DWORD PTR[36+rsp]
- xor edi,ebp
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,edi
- xor esi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[40+rsp]
- xor esi,edx
- mov edi,ebx
- shld ebx,ebx,5
- add eax,esi
- xor edi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add ebp,DWORD PTR[44+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[48+r15]
- xor edi,ecx
- mov esi,eax
- shld eax,eax,5
- add ebp,edi
- xor esi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- add edx,DWORD PTR[48+rsp]
- xor esi,ebx
- vpshufb xmm3,xmm3,xmm9
- mov edi,ebp
- shld ebp,ebp,5
- vpaddd xmm8,xmm2,xmm10
- add edx,esi
- xor edi,ebx
- shrd eax,eax,7
- add edx,ebp
- vmovdqa XMMWORD PTR[32+rsp],xmm8
- add ecx,DWORD PTR[52+rsp]
- xor edi,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,edi
- cmp r8d,11
- jb $L$vaesenclast9
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[64+r15]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[80+r15]
- je $L$vaesenclast9
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[96+r15]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[112+r15]
-$L$vaesenclast9::
- vaesenclast xmm12,xmm12,xmm15
- vmovups xmm15,XMMWORD PTR[((-112))+r15]
- vmovups xmm14,XMMWORD PTR[((16-112))+r15]
- xor esi,eax
- shrd ebp,ebp,7
- add ecx,edx
- add ebx,DWORD PTR[56+rsp]
- xor esi,ebp
- mov edi,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor edi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[60+rsp]
- xor edi,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,edi
- shrd ecx,ecx,7
- add eax,ebx
- vmovups XMMWORD PTR[48+r12*1+r13],xmm12
- lea r12,QWORD PTR[64+r12]
-
- add eax,DWORD PTR[r9]
- add esi,DWORD PTR[4+r9]
- add ecx,DWORD PTR[8+r9]
- add edx,DWORD PTR[12+r9]
- mov DWORD PTR[r9],eax
- add ebp,DWORD PTR[16+r9]
- mov DWORD PTR[4+r9],esi
- mov ebx,esi
- mov DWORD PTR[8+r9],ecx
- mov edi,ecx
- mov DWORD PTR[12+r9],edx
- xor edi,edx
- mov DWORD PTR[16+r9],ebp
- and esi,edi
- jmp $L$oop_avx
-
-$L$done_avx::
- add ebx,DWORD PTR[16+rsp]
- xor esi,ebp
- mov edi,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor edi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[20+rsp]
- xor edi,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,edi
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add ebp,DWORD PTR[24+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[16+r15]
- xor esi,ecx
- mov edi,eax
- shld eax,eax,5
- add ebp,esi
- xor edi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- add edx,DWORD PTR[28+rsp]
- xor edi,ebx
- mov esi,ebp
- shld ebp,ebp,5
- add edx,edi
- xor esi,ebx
- shrd eax,eax,7
- add edx,ebp
- add ecx,DWORD PTR[32+rsp]
- xor esi,eax
- mov edi,edx
- shld edx,edx,5
- add ecx,esi
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[32+r15]
- xor edi,eax
- shrd ebp,ebp,7
- add ecx,edx
- add ebx,DWORD PTR[36+rsp]
- xor edi,ebp
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,edi
- xor esi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[40+rsp]
- xor esi,edx
- mov edi,ebx
- shld ebx,ebx,5
- add eax,esi
- xor edi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add ebp,DWORD PTR[44+rsp]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[48+r15]
- xor edi,ecx
- mov esi,eax
- shld eax,eax,5
- add ebp,edi
- xor esi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- add edx,DWORD PTR[48+rsp]
- xor esi,ebx
- mov edi,ebp
- shld ebp,ebp,5
- add edx,esi
- xor edi,ebx
- shrd eax,eax,7
- add edx,ebp
- add ecx,DWORD PTR[52+rsp]
- xor edi,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,edi
- cmp r8d,11
- jb $L$vaesenclast10
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[64+r15]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[80+r15]
- je $L$vaesenclast10
- vaesenc xmm12,xmm12,xmm15
- vmovups xmm14,XMMWORD PTR[96+r15]
- vaesenc xmm12,xmm12,xmm14
- vmovups xmm15,XMMWORD PTR[112+r15]
-$L$vaesenclast10::
- vaesenclast xmm12,xmm12,xmm15
- vmovups xmm15,XMMWORD PTR[((-112))+r15]
- vmovups xmm14,XMMWORD PTR[((16-112))+r15]
- xor esi,eax
- shrd ebp,ebp,7
- add ecx,edx
- add ebx,DWORD PTR[56+rsp]
- xor esi,ebp
- mov edi,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor edi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[60+rsp]
- xor edi,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,edi
- shrd ecx,ecx,7
- add eax,ebx
- vmovups XMMWORD PTR[48+r12*1+r13],xmm12
- mov r8,QWORD PTR[88+rsp]
-
- add eax,DWORD PTR[r9]
- add esi,DWORD PTR[4+r9]
- add ecx,DWORD PTR[8+r9]
- mov DWORD PTR[r9],eax
- add edx,DWORD PTR[12+r9]
- mov DWORD PTR[4+r9],esi
- add ebp,DWORD PTR[16+r9]
- mov DWORD PTR[8+r9],ecx
- mov DWORD PTR[12+r9],edx
- mov DWORD PTR[16+r9],ebp
- vmovups XMMWORD PTR[r8],xmm12
- vzeroall
- movaps xmm6,XMMWORD PTR[((96+0))+rsp]
- movaps xmm7,XMMWORD PTR[((96+16))+rsp]
- movaps xmm8,XMMWORD PTR[((96+32))+rsp]
- movaps xmm9,XMMWORD PTR[((96+48))+rsp]
- movaps xmm10,XMMWORD PTR[((96+64))+rsp]
- movaps xmm11,XMMWORD PTR[((96+80))+rsp]
- movaps xmm12,XMMWORD PTR[((96+96))+rsp]
- movaps xmm13,XMMWORD PTR[((96+112))+rsp]
- movaps xmm14,XMMWORD PTR[((96+128))+rsp]
- movaps xmm15,XMMWORD PTR[((96+144))+rsp]
- lea rsi,QWORD PTR[264+rsp]
-
- mov r15,QWORD PTR[rsi]
-
- mov r14,QWORD PTR[8+rsi]
-
- mov r13,QWORD PTR[16+rsi]
-
- mov r12,QWORD PTR[24+rsi]
-
- mov rbp,QWORD PTR[32+rsi]
-
- mov rbx,QWORD PTR[40+rsi]
-
- lea rsp,QWORD PTR[48+rsi]
-
-$L$epilogue_avx::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_cbc_sha1_enc_avx::
-aesni_cbc_sha1_enc_avx ENDP
-ALIGN 64
-K_XX_XX::
- DD 05a827999h,05a827999h,05a827999h,05a827999h
- DD 06ed9eba1h,06ed9eba1h,06ed9eba1h,06ed9eba1h
- DD 08f1bbcdch,08f1bbcdch,08f1bbcdch,08f1bbcdch
- DD 0ca62c1d6h,0ca62c1d6h,0ca62c1d6h,0ca62c1d6h
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
-DB 0fh,0eh,0dh,0ch,0bh,0ah,09h,08h,07h,06h,05h,04h,03h,02h,01h,00h
-
-DB 65,69,83,78,73,45,67,66,67,43,83,72,65,49,32,115
-DB 116,105,116,99,104,32,102,111,114,32,120,56,54,95,54,52
-DB 44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
-DB 60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
-DB 114,103,62,0
-ALIGN 64
-
-ALIGN 32
-aesni_cbc_sha1_enc_shaext PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_cbc_sha1_enc_shaext::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov r10,QWORD PTR[56+rsp]
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[(-8-160)+rax],xmm6
- movaps XMMWORD PTR[(-8-144)+rax],xmm7
- movaps XMMWORD PTR[(-8-128)+rax],xmm8
- movaps XMMWORD PTR[(-8-112)+rax],xmm9
- movaps XMMWORD PTR[(-8-96)+rax],xmm10
- movaps XMMWORD PTR[(-8-80)+rax],xmm11
- movaps XMMWORD PTR[(-8-64)+rax],xmm12
- movaps XMMWORD PTR[(-8-48)+rax],xmm13
- movaps XMMWORD PTR[(-8-32)+rax],xmm14
- movaps XMMWORD PTR[(-8-16)+rax],xmm15
-$L$prologue_shaext::
- movdqu xmm8,XMMWORD PTR[r9]
- movd xmm9,DWORD PTR[16+r9]
- movdqa xmm7,XMMWORD PTR[((K_XX_XX+80))]
-
- mov r11d,DWORD PTR[240+rcx]
- sub rsi,rdi
- movups xmm15,XMMWORD PTR[rcx]
- movups xmm2,XMMWORD PTR[r8]
- movups xmm0,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[112+rcx]
-
- pshufd xmm8,xmm8,27
- pshufd xmm9,xmm9,27
- jmp $L$oop_shaext
-
-ALIGN 16
-$L$oop_shaext::
- movups xmm14,XMMWORD PTR[rdi]
- xorps xmm14,xmm15
- xorps xmm2,xmm14
- movups xmm1,XMMWORD PTR[((-80))+rcx]
-DB 102,15,56,220,208
- movdqu xmm3,XMMWORD PTR[r10]
- movdqa xmm12,xmm9
-DB 102,15,56,0,223
- movdqu xmm4,XMMWORD PTR[16+r10]
- movdqa xmm11,xmm8
- movups xmm0,XMMWORD PTR[((-64))+rcx]
-DB 102,15,56,220,209
-DB 102,15,56,0,231
-
- paddd xmm9,xmm3
- movdqu xmm5,XMMWORD PTR[32+r10]
- lea r10,QWORD PTR[64+r10]
- pxor xmm3,xmm12
- movups xmm1,XMMWORD PTR[((-48))+rcx]
-DB 102,15,56,220,208
- pxor xmm3,xmm12
- movdqa xmm10,xmm8
-DB 102,15,56,0,239
-DB 69,15,58,204,193,0
-DB 68,15,56,200,212
- movups xmm0,XMMWORD PTR[((-32))+rcx]
-DB 102,15,56,220,209
-DB 15,56,201,220
- movdqu xmm6,XMMWORD PTR[((-16))+r10]
- movdqa xmm9,xmm8
-DB 102,15,56,0,247
- movups xmm1,XMMWORD PTR[((-16))+rcx]
-DB 102,15,56,220,208
-DB 69,15,58,204,194,0
-DB 68,15,56,200,205
- pxor xmm3,xmm5
-DB 15,56,201,229
- movups xmm0,XMMWORD PTR[rcx]
-DB 102,15,56,220,209
- movdqa xmm10,xmm8
-DB 69,15,58,204,193,0
-DB 68,15,56,200,214
- movups xmm1,XMMWORD PTR[16+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,222
- pxor xmm4,xmm6
-DB 15,56,201,238
- movups xmm0,XMMWORD PTR[32+rcx]
-DB 102,15,56,220,209
- movdqa xmm9,xmm8
-DB 69,15,58,204,194,0
-DB 68,15,56,200,203
- movups xmm1,XMMWORD PTR[48+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,227
- pxor xmm5,xmm3
-DB 15,56,201,243
- cmp r11d,11
- jb $L$aesenclast11
- movups xmm0,XMMWORD PTR[64+rcx]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[80+rcx]
-DB 102,15,56,220,208
- je $L$aesenclast11
- movups xmm0,XMMWORD PTR[96+rcx]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[112+rcx]
-DB 102,15,56,220,208
-$L$aesenclast11::
-DB 102,15,56,221,209
- movups xmm0,XMMWORD PTR[((16-112))+rcx]
- movdqa xmm10,xmm8
-DB 69,15,58,204,193,0
-DB 68,15,56,200,212
- movups xmm14,XMMWORD PTR[16+rdi]
- xorps xmm14,xmm15
- movups XMMWORD PTR[rdi*1+rsi],xmm2
- xorps xmm2,xmm14
- movups xmm1,XMMWORD PTR[((-80))+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,236
- pxor xmm6,xmm4
-DB 15,56,201,220
- movups xmm0,XMMWORD PTR[((-64))+rcx]
-DB 102,15,56,220,209
- movdqa xmm9,xmm8
-DB 69,15,58,204,194,1
-DB 68,15,56,200,205
- movups xmm1,XMMWORD PTR[((-48))+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,245
- pxor xmm3,xmm5
-DB 15,56,201,229
- movups xmm0,XMMWORD PTR[((-32))+rcx]
-DB 102,15,56,220,209
- movdqa xmm10,xmm8
-DB 69,15,58,204,193,1
-DB 68,15,56,200,214
- movups xmm1,XMMWORD PTR[((-16))+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,222
- pxor xmm4,xmm6
-DB 15,56,201,238
- movups xmm0,XMMWORD PTR[rcx]
-DB 102,15,56,220,209
- movdqa xmm9,xmm8
-DB 69,15,58,204,194,1
-DB 68,15,56,200,203
- movups xmm1,XMMWORD PTR[16+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,227
- pxor xmm5,xmm3
-DB 15,56,201,243
- movups xmm0,XMMWORD PTR[32+rcx]
-DB 102,15,56,220,209
- movdqa xmm10,xmm8
-DB 69,15,58,204,193,1
-DB 68,15,56,200,212
- movups xmm1,XMMWORD PTR[48+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,236
- pxor xmm6,xmm4
-DB 15,56,201,220
- cmp r11d,11
- jb $L$aesenclast12
- movups xmm0,XMMWORD PTR[64+rcx]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[80+rcx]
-DB 102,15,56,220,208
- je $L$aesenclast12
- movups xmm0,XMMWORD PTR[96+rcx]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[112+rcx]
-DB 102,15,56,220,208
-$L$aesenclast12::
-DB 102,15,56,221,209
- movups xmm0,XMMWORD PTR[((16-112))+rcx]
- movdqa xmm9,xmm8
-DB 69,15,58,204,194,1
-DB 68,15,56,200,205
- movups xmm14,XMMWORD PTR[32+rdi]
- xorps xmm14,xmm15
- movups XMMWORD PTR[16+rdi*1+rsi],xmm2
- xorps xmm2,xmm14
- movups xmm1,XMMWORD PTR[((-80))+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,245
- pxor xmm3,xmm5
-DB 15,56,201,229
- movups xmm0,XMMWORD PTR[((-64))+rcx]
-DB 102,15,56,220,209
- movdqa xmm10,xmm8
-DB 69,15,58,204,193,2
-DB 68,15,56,200,214
- movups xmm1,XMMWORD PTR[((-48))+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,222
- pxor xmm4,xmm6
-DB 15,56,201,238
- movups xmm0,XMMWORD PTR[((-32))+rcx]
-DB 102,15,56,220,209
- movdqa xmm9,xmm8
-DB 69,15,58,204,194,2
-DB 68,15,56,200,203
- movups xmm1,XMMWORD PTR[((-16))+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,227
- pxor xmm5,xmm3
-DB 15,56,201,243
- movups xmm0,XMMWORD PTR[rcx]
-DB 102,15,56,220,209
- movdqa xmm10,xmm8
-DB 69,15,58,204,193,2
-DB 68,15,56,200,212
- movups xmm1,XMMWORD PTR[16+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,236
- pxor xmm6,xmm4
-DB 15,56,201,220
- movups xmm0,XMMWORD PTR[32+rcx]
-DB 102,15,56,220,209
- movdqa xmm9,xmm8
-DB 69,15,58,204,194,2
-DB 68,15,56,200,205
- movups xmm1,XMMWORD PTR[48+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,245
- pxor xmm3,xmm5
-DB 15,56,201,229
- cmp r11d,11
- jb $L$aesenclast13
- movups xmm0,XMMWORD PTR[64+rcx]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[80+rcx]
-DB 102,15,56,220,208
- je $L$aesenclast13
- movups xmm0,XMMWORD PTR[96+rcx]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[112+rcx]
-DB 102,15,56,220,208
-$L$aesenclast13::
-DB 102,15,56,221,209
- movups xmm0,XMMWORD PTR[((16-112))+rcx]
- movdqa xmm10,xmm8
-DB 69,15,58,204,193,2
-DB 68,15,56,200,214
- movups xmm14,XMMWORD PTR[48+rdi]
- xorps xmm14,xmm15
- movups XMMWORD PTR[32+rdi*1+rsi],xmm2
- xorps xmm2,xmm14
- movups xmm1,XMMWORD PTR[((-80))+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,222
- pxor xmm4,xmm6
-DB 15,56,201,238
- movups xmm0,XMMWORD PTR[((-64))+rcx]
-DB 102,15,56,220,209
- movdqa xmm9,xmm8
-DB 69,15,58,204,194,3
-DB 68,15,56,200,203
- movups xmm1,XMMWORD PTR[((-48))+rcx]
-DB 102,15,56,220,208
-DB 15,56,202,227
- pxor xmm5,xmm3
-DB 15,56,201,243
- movups xmm0,XMMWORD PTR[((-32))+rcx]
-DB 102,15,56,220,209
- movdqa xmm10,xmm8
-DB 69,15,58,204,193,3
-DB 68,15,56,200,212
-DB 15,56,202,236
- pxor xmm6,xmm4
- movups xmm1,XMMWORD PTR[((-16))+rcx]
-DB 102,15,56,220,208
- movdqa xmm9,xmm8
-DB 69,15,58,204,194,3
-DB 68,15,56,200,205
-DB 15,56,202,245
- movups xmm0,XMMWORD PTR[rcx]
-DB 102,15,56,220,209
- movdqa xmm5,xmm12
- movdqa xmm10,xmm8
-DB 69,15,58,204,193,3
-DB 68,15,56,200,214
- movups xmm1,XMMWORD PTR[16+rcx]
-DB 102,15,56,220,208
- movdqa xmm9,xmm8
-DB 69,15,58,204,194,3
-DB 68,15,56,200,205
- movups xmm0,XMMWORD PTR[32+rcx]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[48+rcx]
-DB 102,15,56,220,208
- cmp r11d,11
- jb $L$aesenclast14
- movups xmm0,XMMWORD PTR[64+rcx]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[80+rcx]
-DB 102,15,56,220,208
- je $L$aesenclast14
- movups xmm0,XMMWORD PTR[96+rcx]
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[112+rcx]
-DB 102,15,56,220,208
-$L$aesenclast14::
-DB 102,15,56,221,209
- movups xmm0,XMMWORD PTR[((16-112))+rcx]
- dec rdx
-
- paddd xmm8,xmm11
- movups XMMWORD PTR[48+rdi*1+rsi],xmm2
- lea rdi,QWORD PTR[64+rdi]
- jnz $L$oop_shaext
-
- pshufd xmm8,xmm8,27
- pshufd xmm9,xmm9,27
- movups XMMWORD PTR[r8],xmm2
- movdqu XMMWORD PTR[r9],xmm8
- movd DWORD PTR[16+r9],xmm9
- movaps xmm6,XMMWORD PTR[((-8-160))+rax]
- movaps xmm7,XMMWORD PTR[((-8-144))+rax]
- movaps xmm8,XMMWORD PTR[((-8-128))+rax]
- movaps xmm9,XMMWORD PTR[((-8-112))+rax]
- movaps xmm10,XMMWORD PTR[((-8-96))+rax]
- movaps xmm11,XMMWORD PTR[((-8-80))+rax]
- movaps xmm12,XMMWORD PTR[((-8-64))+rax]
- movaps xmm13,XMMWORD PTR[((-8-48))+rax]
- movaps xmm14,XMMWORD PTR[((-8-32))+rax]
- movaps xmm15,XMMWORD PTR[((-8-16))+rax]
- mov rsp,rax
-$L$epilogue_shaext::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_cbc_sha1_enc_shaext::
-aesni_cbc_sha1_enc_shaext ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-ssse3_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
- lea r10,QWORD PTR[aesni_cbc_sha1_enc_shaext]
- cmp rbx,r10
- jb $L$seh_no_shaext
-
- lea rsi,QWORD PTR[rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
- lea rax,QWORD PTR[168+rax]
- jmp $L$common_seh_tail
-$L$seh_no_shaext::
- lea rsi,QWORD PTR[96+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
- lea rax,QWORD PTR[264+rax]
-
- mov r15,QWORD PTR[rax]
- mov r14,QWORD PTR[8+rax]
- mov r13,QWORD PTR[16+rax]
- mov r12,QWORD PTR[24+rax]
- mov rbp,QWORD PTR[32+rax]
- mov rbx,QWORD PTR[40+rax]
- lea rax,QWORD PTR[48+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-ssse3_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_aesni_cbc_sha1_enc_ssse3
- DD imagerel $L$SEH_end_aesni_cbc_sha1_enc_ssse3
- DD imagerel $L$SEH_info_aesni_cbc_sha1_enc_ssse3
- DD imagerel $L$SEH_begin_aesni_cbc_sha1_enc_avx
- DD imagerel $L$SEH_end_aesni_cbc_sha1_enc_avx
- DD imagerel $L$SEH_info_aesni_cbc_sha1_enc_avx
- DD imagerel $L$SEH_begin_aesni_cbc_sha1_enc_shaext
- DD imagerel $L$SEH_end_aesni_cbc_sha1_enc_shaext
- DD imagerel $L$SEH_info_aesni_cbc_sha1_enc_shaext
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_aesni_cbc_sha1_enc_ssse3::
-DB 9,0,0,0
- DD imagerel ssse3_handler
- DD imagerel $L$prologue_ssse3,imagerel $L$epilogue_ssse3
-$L$SEH_info_aesni_cbc_sha1_enc_avx::
-DB 9,0,0,0
- DD imagerel ssse3_handler
- DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
-$L$SEH_info_aesni_cbc_sha1_enc_shaext::
-DB 9,0,0,0
- DD imagerel ssse3_handler
- DD imagerel $L$prologue_shaext,imagerel $L$epilogue_shaext
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC aesni_cbc_sha1_enc
+
+ALIGN 32
+aesni_cbc_sha1_enc PROC PUBLIC
+
+
+ mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+0))]
+ mov r11,QWORD PTR[((OPENSSL_ia32cap_P+4))]
+ bt r11,61
+ jc aesni_cbc_sha1_enc_shaext
+ and r11d,268435456
+ and r10d,1073741824
+ or r10d,r11d
+ cmp r10d,1342177280
+ je aesni_cbc_sha1_enc_avx
+ jmp aesni_cbc_sha1_enc_ssse3
+ DB 0F3h,0C3h ;repret
+
+aesni_cbc_sha1_enc ENDP
+
+ALIGN 32
+aesni_cbc_sha1_enc_ssse3 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_cbc_sha1_enc_ssse3::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov r10,QWORD PTR[56+rsp]
+
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-264))+rsp]
+
+
+
+ movaps XMMWORD PTR[(96+0)+rsp],xmm6
+ movaps XMMWORD PTR[(96+16)+rsp],xmm7
+ movaps XMMWORD PTR[(96+32)+rsp],xmm8
+ movaps XMMWORD PTR[(96+48)+rsp],xmm9
+ movaps XMMWORD PTR[(96+64)+rsp],xmm10
+ movaps XMMWORD PTR[(96+80)+rsp],xmm11
+ movaps XMMWORD PTR[(96+96)+rsp],xmm12
+ movaps XMMWORD PTR[(96+112)+rsp],xmm13
+ movaps XMMWORD PTR[(96+128)+rsp],xmm14
+ movaps XMMWORD PTR[(96+144)+rsp],xmm15
+$L$prologue_ssse3::
+ mov r12,rdi
+ mov r13,rsi
+ mov r14,rdx
+ lea r15,QWORD PTR[112+rcx]
+ movdqu xmm2,XMMWORD PTR[r8]
+ mov QWORD PTR[88+rsp],r8
+ shl r14,6
+ sub r13,r12
+ mov r8d,DWORD PTR[((240-112))+r15]
+ add r14,r10
+
+ lea r11,QWORD PTR[K_XX_XX]
+ mov eax,DWORD PTR[r9]
+ mov ebx,DWORD PTR[4+r9]
+ mov ecx,DWORD PTR[8+r9]
+ mov edx,DWORD PTR[12+r9]
+ mov esi,ebx
+ mov ebp,DWORD PTR[16+r9]
+ mov edi,ecx
+ xor edi,edx
+ and esi,edi
+
+ movdqa xmm3,XMMWORD PTR[64+r11]
+ movdqa xmm13,XMMWORD PTR[r11]
+ movdqu xmm4,XMMWORD PTR[r10]
+ movdqu xmm5,XMMWORD PTR[16+r10]
+ movdqu xmm6,XMMWORD PTR[32+r10]
+ movdqu xmm7,XMMWORD PTR[48+r10]
+DB 102,15,56,0,227
+DB 102,15,56,0,235
+DB 102,15,56,0,243
+ add r10,64
+ paddd xmm4,xmm13
+DB 102,15,56,0,251
+ paddd xmm5,xmm13
+ paddd xmm6,xmm13
+ movdqa XMMWORD PTR[rsp],xmm4
+ psubd xmm4,xmm13
+ movdqa XMMWORD PTR[16+rsp],xmm5
+ psubd xmm5,xmm13
+ movdqa XMMWORD PTR[32+rsp],xmm6
+ psubd xmm6,xmm13
+ movups xmm15,XMMWORD PTR[((-112))+r15]
+ movups xmm0,XMMWORD PTR[((16-112))+r15]
+ jmp $L$oop_ssse3
+ALIGN 32
+$L$oop_ssse3::
+ ror ebx,2
+ movups xmm14,XMMWORD PTR[r12]
+ xorps xmm14,xmm15
+ xorps xmm2,xmm14
+ movups xmm1,XMMWORD PTR[((-80))+r15]
+DB 102,15,56,220,208
+ pshufd xmm8,xmm4,238
+ xor esi,edx
+ movdqa xmm12,xmm7
+ paddd xmm13,xmm7
+ mov edi,eax
+ add ebp,DWORD PTR[rsp]
+ punpcklqdq xmm8,xmm5
+ xor ebx,ecx
+ rol eax,5
+ add ebp,esi
+ psrldq xmm12,4
+ and edi,ebx
+ xor ebx,ecx
+ pxor xmm8,xmm4
+ add ebp,eax
+ ror eax,7
+ pxor xmm12,xmm6
+ xor edi,ecx
+ mov esi,ebp
+ add edx,DWORD PTR[4+rsp]
+ pxor xmm8,xmm12
+ xor eax,ebx
+ rol ebp,5
+ movdqa XMMWORD PTR[48+rsp],xmm13
+ add edx,edi
+ movups xmm0,XMMWORD PTR[((-64))+r15]
+DB 102,15,56,220,209
+ and esi,eax
+ movdqa xmm3,xmm8
+ xor eax,ebx
+ add edx,ebp
+ ror ebp,7
+ movdqa xmm12,xmm8
+ xor esi,ebx
+ pslldq xmm3,12
+ paddd xmm8,xmm8
+ mov edi,edx
+ add ecx,DWORD PTR[8+rsp]
+ psrld xmm12,31
+ xor ebp,eax
+ rol edx,5
+ add ecx,esi
+ movdqa xmm13,xmm3
+ and edi,ebp
+ xor ebp,eax
+ psrld xmm3,30
+ add ecx,edx
+ ror edx,7
+ por xmm8,xmm12
+ xor edi,eax
+ mov esi,ecx
+ add ebx,DWORD PTR[12+rsp]
+ movups xmm1,XMMWORD PTR[((-48))+r15]
+DB 102,15,56,220,208
+ pslld xmm13,2
+ pxor xmm8,xmm3
+ xor edx,ebp
+ movdqa xmm3,XMMWORD PTR[r11]
+ rol ecx,5
+ add ebx,edi
+ and esi,edx
+ pxor xmm8,xmm13
+ xor edx,ebp
+ add ebx,ecx
+ ror ecx,7
+ pshufd xmm9,xmm5,238
+ xor esi,ebp
+ movdqa xmm13,xmm8
+ paddd xmm3,xmm8
+ mov edi,ebx
+ add eax,DWORD PTR[16+rsp]
+ punpcklqdq xmm9,xmm6
+ xor ecx,edx
+ rol ebx,5
+ add eax,esi
+ psrldq xmm13,4
+ and edi,ecx
+ xor ecx,edx
+ pxor xmm9,xmm5
+ add eax,ebx
+ ror ebx,7
+ movups xmm0,XMMWORD PTR[((-32))+r15]
+DB 102,15,56,220,209
+ pxor xmm13,xmm7
+ xor edi,edx
+ mov esi,eax
+ add ebp,DWORD PTR[20+rsp]
+ pxor xmm9,xmm13
+ xor ebx,ecx
+ rol eax,5
+ movdqa XMMWORD PTR[rsp],xmm3
+ add ebp,edi
+ and esi,ebx
+ movdqa xmm12,xmm9
+ xor ebx,ecx
+ add ebp,eax
+ ror eax,7
+ movdqa xmm13,xmm9
+ xor esi,ecx
+ pslldq xmm12,12
+ paddd xmm9,xmm9
+ mov edi,ebp
+ add edx,DWORD PTR[24+rsp]
+ psrld xmm13,31
+ xor eax,ebx
+ rol ebp,5
+ add edx,esi
+ movups xmm1,XMMWORD PTR[((-16))+r15]
+DB 102,15,56,220,208
+ movdqa xmm3,xmm12
+ and edi,eax
+ xor eax,ebx
+ psrld xmm12,30
+ add edx,ebp
+ ror ebp,7
+ por xmm9,xmm13
+ xor edi,ebx
+ mov esi,edx
+ add ecx,DWORD PTR[28+rsp]
+ pslld xmm3,2
+ pxor xmm9,xmm12
+ xor ebp,eax
+ movdqa xmm12,XMMWORD PTR[16+r11]
+ rol edx,5
+ add ecx,edi
+ and esi,ebp
+ pxor xmm9,xmm3
+ xor ebp,eax
+ add ecx,edx
+ ror edx,7
+ pshufd xmm10,xmm6,238
+ xor esi,eax
+ movdqa xmm3,xmm9
+ paddd xmm12,xmm9
+ mov edi,ecx
+ add ebx,DWORD PTR[32+rsp]
+ movups xmm0,XMMWORD PTR[r15]
+DB 102,15,56,220,209
+ punpcklqdq xmm10,xmm7
+ xor edx,ebp
+ rol ecx,5
+ add ebx,esi
+ psrldq xmm3,4
+ and edi,edx
+ xor edx,ebp
+ pxor xmm10,xmm6
+ add ebx,ecx
+ ror ecx,7
+ pxor xmm3,xmm8
+ xor edi,ebp
+ mov esi,ebx
+ add eax,DWORD PTR[36+rsp]
+ pxor xmm10,xmm3
+ xor ecx,edx
+ rol ebx,5
+ movdqa XMMWORD PTR[16+rsp],xmm12
+ add eax,edi
+ and esi,ecx
+ movdqa xmm13,xmm10
+ xor ecx,edx
+ add eax,ebx
+ ror ebx,7
+ movups xmm1,XMMWORD PTR[16+r15]
+DB 102,15,56,220,208
+ movdqa xmm3,xmm10
+ xor esi,edx
+ pslldq xmm13,12
+ paddd xmm10,xmm10
+ mov edi,eax
+ add ebp,DWORD PTR[40+rsp]
+ psrld xmm3,31
+ xor ebx,ecx
+ rol eax,5
+ add ebp,esi
+ movdqa xmm12,xmm13
+ and edi,ebx
+ xor ebx,ecx
+ psrld xmm13,30
+ add ebp,eax
+ ror eax,7
+ por xmm10,xmm3
+ xor edi,ecx
+ mov esi,ebp
+ add edx,DWORD PTR[44+rsp]
+ pslld xmm12,2
+ pxor xmm10,xmm13
+ xor eax,ebx
+ movdqa xmm13,XMMWORD PTR[16+r11]
+ rol ebp,5
+ add edx,edi
+ movups xmm0,XMMWORD PTR[32+r15]
+DB 102,15,56,220,209
+ and esi,eax
+ pxor xmm10,xmm12
+ xor eax,ebx
+ add edx,ebp
+ ror ebp,7
+ pshufd xmm11,xmm7,238
+ xor esi,ebx
+ movdqa xmm12,xmm10
+ paddd xmm13,xmm10
+ mov edi,edx
+ add ecx,DWORD PTR[48+rsp]
+ punpcklqdq xmm11,xmm8
+ xor ebp,eax
+ rol edx,5
+ add ecx,esi
+ psrldq xmm12,4
+ and edi,ebp
+ xor ebp,eax
+ pxor xmm11,xmm7
+ add ecx,edx
+ ror edx,7
+ pxor xmm12,xmm9
+ xor edi,eax
+ mov esi,ecx
+ add ebx,DWORD PTR[52+rsp]
+ movups xmm1,XMMWORD PTR[48+r15]
+DB 102,15,56,220,208
+ pxor xmm11,xmm12
+ xor edx,ebp
+ rol ecx,5
+ movdqa XMMWORD PTR[32+rsp],xmm13
+ add ebx,edi
+ and esi,edx
+ movdqa xmm3,xmm11
+ xor edx,ebp
+ add ebx,ecx
+ ror ecx,7
+ movdqa xmm12,xmm11
+ xor esi,ebp
+ pslldq xmm3,12
+ paddd xmm11,xmm11
+ mov edi,ebx
+ add eax,DWORD PTR[56+rsp]
+ psrld xmm12,31
+ xor ecx,edx
+ rol ebx,5
+ add eax,esi
+ movdqa xmm13,xmm3
+ and edi,ecx
+ xor ecx,edx
+ psrld xmm3,30
+ add eax,ebx
+ ror ebx,7
+ cmp r8d,11
+ jb $L$aesenclast1
+ movups xmm0,XMMWORD PTR[64+r15]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[80+r15]
+DB 102,15,56,220,208
+ je $L$aesenclast1
+ movups xmm0,XMMWORD PTR[96+r15]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[112+r15]
+DB 102,15,56,220,208
+$L$aesenclast1::
+DB 102,15,56,221,209
+ movups xmm0,XMMWORD PTR[((16-112))+r15]
+ por xmm11,xmm12
+ xor edi,edx
+ mov esi,eax
+ add ebp,DWORD PTR[60+rsp]
+ pslld xmm13,2
+ pxor xmm11,xmm3
+ xor ebx,ecx
+ movdqa xmm3,XMMWORD PTR[16+r11]
+ rol eax,5
+ add ebp,edi
+ and esi,ebx
+ pxor xmm11,xmm13
+ pshufd xmm13,xmm10,238
+ xor ebx,ecx
+ add ebp,eax
+ ror eax,7
+ pxor xmm4,xmm8
+ xor esi,ecx
+ mov edi,ebp
+ add edx,DWORD PTR[rsp]
+ punpcklqdq xmm13,xmm11
+ xor eax,ebx
+ rol ebp,5
+ pxor xmm4,xmm5
+ add edx,esi
+ movups xmm14,XMMWORD PTR[16+r12]
+ xorps xmm14,xmm15
+ movups XMMWORD PTR[r13*1+r12],xmm2
+ xorps xmm2,xmm14
+ movups xmm1,XMMWORD PTR[((-80))+r15]
+DB 102,15,56,220,208
+ and edi,eax
+ movdqa xmm12,xmm3
+ xor eax,ebx
+ paddd xmm3,xmm11
+ add edx,ebp
+ pxor xmm4,xmm13
+ ror ebp,7
+ xor edi,ebx
+ mov esi,edx
+ add ecx,DWORD PTR[4+rsp]
+ movdqa xmm13,xmm4
+ xor ebp,eax
+ rol edx,5
+ movdqa XMMWORD PTR[48+rsp],xmm3
+ add ecx,edi
+ and esi,ebp
+ xor ebp,eax
+ pslld xmm4,2
+ add ecx,edx
+ ror edx,7
+ psrld xmm13,30
+ xor esi,eax
+ mov edi,ecx
+ add ebx,DWORD PTR[8+rsp]
+ movups xmm0,XMMWORD PTR[((-64))+r15]
+DB 102,15,56,220,209
+ por xmm4,xmm13
+ xor edx,ebp
+ rol ecx,5
+ pshufd xmm3,xmm11,238
+ add ebx,esi
+ and edi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[12+rsp]
+ xor edi,ebp
+ mov esi,ebx
+ rol ebx,5
+ add eax,edi
+ xor esi,edx
+ ror ecx,7
+ add eax,ebx
+ pxor xmm5,xmm9
+ add ebp,DWORD PTR[16+rsp]
+ movups xmm1,XMMWORD PTR[((-48))+r15]
+DB 102,15,56,220,208
+ xor esi,ecx
+ punpcklqdq xmm3,xmm4
+ mov edi,eax
+ rol eax,5
+ pxor xmm5,xmm6
+ add ebp,esi
+ xor edi,ecx
+ movdqa xmm13,xmm12
+ ror ebx,7
+ paddd xmm12,xmm4
+ add ebp,eax
+ pxor xmm5,xmm3
+ add edx,DWORD PTR[20+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ movdqa xmm3,xmm5
+ add edx,edi
+ xor esi,ebx
+ movdqa XMMWORD PTR[rsp],xmm12
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[24+rsp]
+ pslld xmm5,2
+ xor esi,eax
+ mov edi,edx
+ psrld xmm3,30
+ rol edx,5
+ add ecx,esi
+ movups xmm0,XMMWORD PTR[((-32))+r15]
+DB 102,15,56,220,209
+ xor edi,eax
+ ror ebp,7
+ por xmm5,xmm3
+ add ecx,edx
+ add ebx,DWORD PTR[28+rsp]
+ pshufd xmm12,xmm4,238
+ xor edi,ebp
+ mov esi,ecx
+ rol ecx,5
+ add ebx,edi
+ xor esi,ebp
+ ror edx,7
+ add ebx,ecx
+ pxor xmm6,xmm10
+ add eax,DWORD PTR[32+rsp]
+ xor esi,edx
+ punpcklqdq xmm12,xmm5
+ mov edi,ebx
+ rol ebx,5
+ pxor xmm6,xmm7
+ add eax,esi
+ xor edi,edx
+ movdqa xmm3,XMMWORD PTR[32+r11]
+ ror ecx,7
+ paddd xmm13,xmm5
+ add eax,ebx
+ pxor xmm6,xmm12
+ add ebp,DWORD PTR[36+rsp]
+ movups xmm1,XMMWORD PTR[((-16))+r15]
+DB 102,15,56,220,208
+ xor edi,ecx
+ mov esi,eax
+ rol eax,5
+ movdqa xmm12,xmm6
+ add ebp,edi
+ xor esi,ecx
+ movdqa XMMWORD PTR[16+rsp],xmm13
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[40+rsp]
+ pslld xmm6,2
+ xor esi,ebx
+ mov edi,ebp
+ psrld xmm12,30
+ rol ebp,5
+ add edx,esi
+ xor edi,ebx
+ ror eax,7
+ por xmm6,xmm12
+ add edx,ebp
+ add ecx,DWORD PTR[44+rsp]
+ pshufd xmm13,xmm5,238
+ xor edi,eax
+ mov esi,edx
+ rol edx,5
+ add ecx,edi
+ movups xmm0,XMMWORD PTR[r15]
+DB 102,15,56,220,209
+ xor esi,eax
+ ror ebp,7
+ add ecx,edx
+ pxor xmm7,xmm11
+ add ebx,DWORD PTR[48+rsp]
+ xor esi,ebp
+ punpcklqdq xmm13,xmm6
+ mov edi,ecx
+ rol ecx,5
+ pxor xmm7,xmm8
+ add ebx,esi
+ xor edi,ebp
+ movdqa xmm12,xmm3
+ ror edx,7
+ paddd xmm3,xmm6
+ add ebx,ecx
+ pxor xmm7,xmm13
+ add eax,DWORD PTR[52+rsp]
+ xor edi,edx
+ mov esi,ebx
+ rol ebx,5
+ movdqa xmm13,xmm7
+ add eax,edi
+ xor esi,edx
+ movdqa XMMWORD PTR[32+rsp],xmm3
+ ror ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[56+rsp]
+ movups xmm1,XMMWORD PTR[16+r15]
+DB 102,15,56,220,208
+ pslld xmm7,2
+ xor esi,ecx
+ mov edi,eax
+ psrld xmm13,30
+ rol eax,5
+ add ebp,esi
+ xor edi,ecx
+ ror ebx,7
+ por xmm7,xmm13
+ add ebp,eax
+ add edx,DWORD PTR[60+rsp]
+ pshufd xmm3,xmm6,238
+ xor edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ add edx,edi
+ xor esi,ebx
+ ror eax,7
+ add edx,ebp
+ pxor xmm8,xmm4
+ add ecx,DWORD PTR[rsp]
+ xor esi,eax
+ punpcklqdq xmm3,xmm7
+ mov edi,edx
+ rol edx,5
+ pxor xmm8,xmm9
+ add ecx,esi
+ movups xmm0,XMMWORD PTR[32+r15]
+DB 102,15,56,220,209
+ xor edi,eax
+ movdqa xmm13,xmm12
+ ror ebp,7
+ paddd xmm12,xmm7
+ add ecx,edx
+ pxor xmm8,xmm3
+ add ebx,DWORD PTR[4+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ rol ecx,5
+ movdqa xmm3,xmm8
+ add ebx,edi
+ xor esi,ebp
+ movdqa XMMWORD PTR[48+rsp],xmm12
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[8+rsp]
+ pslld xmm8,2
+ xor esi,edx
+ mov edi,ebx
+ psrld xmm3,30
+ rol ebx,5
+ add eax,esi
+ xor edi,edx
+ ror ecx,7
+ por xmm8,xmm3
+ add eax,ebx
+ add ebp,DWORD PTR[12+rsp]
+ movups xmm1,XMMWORD PTR[48+r15]
+DB 102,15,56,220,208
+ pshufd xmm12,xmm7,238
+ xor edi,ecx
+ mov esi,eax
+ rol eax,5
+ add ebp,edi
+ xor esi,ecx
+ ror ebx,7
+ add ebp,eax
+ pxor xmm9,xmm5
+ add edx,DWORD PTR[16+rsp]
+ xor esi,ebx
+ punpcklqdq xmm12,xmm8
+ mov edi,ebp
+ rol ebp,5
+ pxor xmm9,xmm10
+ add edx,esi
+ xor edi,ebx
+ movdqa xmm3,xmm13
+ ror eax,7
+ paddd xmm13,xmm8
+ add edx,ebp
+ pxor xmm9,xmm12
+ add ecx,DWORD PTR[20+rsp]
+ xor edi,eax
+ mov esi,edx
+ rol edx,5
+ movdqa xmm12,xmm9
+ add ecx,edi
+ cmp r8d,11
+ jb $L$aesenclast2
+ movups xmm0,XMMWORD PTR[64+r15]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[80+r15]
+DB 102,15,56,220,208
+ je $L$aesenclast2
+ movups xmm0,XMMWORD PTR[96+r15]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[112+r15]
+DB 102,15,56,220,208
+$L$aesenclast2::
+DB 102,15,56,221,209
+ movups xmm0,XMMWORD PTR[((16-112))+r15]
+ xor esi,eax
+ movdqa XMMWORD PTR[rsp],xmm13
+ ror ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[24+rsp]
+ pslld xmm9,2
+ xor esi,ebp
+ mov edi,ecx
+ psrld xmm12,30
+ rol ecx,5
+ add ebx,esi
+ xor edi,ebp
+ ror edx,7
+ por xmm9,xmm12
+ add ebx,ecx
+ add eax,DWORD PTR[28+rsp]
+ pshufd xmm13,xmm8,238
+ ror ecx,7
+ mov esi,ebx
+ xor edi,edx
+ rol ebx,5
+ add eax,edi
+ xor esi,ecx
+ xor ecx,edx
+ add eax,ebx
+ pxor xmm10,xmm6
+ add ebp,DWORD PTR[32+rsp]
+ movups xmm14,XMMWORD PTR[32+r12]
+ xorps xmm14,xmm15
+ movups XMMWORD PTR[16+r12*1+r13],xmm2
+ xorps xmm2,xmm14
+ movups xmm1,XMMWORD PTR[((-80))+r15]
+DB 102,15,56,220,208
+ and esi,ecx
+ xor ecx,edx
+ ror ebx,7
+ punpcklqdq xmm13,xmm9
+ mov edi,eax
+ xor esi,ecx
+ pxor xmm10,xmm11
+ rol eax,5
+ add ebp,esi
+ movdqa xmm12,xmm3
+ xor edi,ebx
+ paddd xmm3,xmm9
+ xor ebx,ecx
+ pxor xmm10,xmm13
+ add ebp,eax
+ add edx,DWORD PTR[36+rsp]
+ and edi,ebx
+ xor ebx,ecx
+ ror eax,7
+ movdqa xmm13,xmm10
+ mov esi,ebp
+ xor edi,ebx
+ movdqa XMMWORD PTR[16+rsp],xmm3
+ rol ebp,5
+ add edx,edi
+ movups xmm0,XMMWORD PTR[((-64))+r15]
+DB 102,15,56,220,209
+ xor esi,eax
+ pslld xmm10,2
+ xor eax,ebx
+ add edx,ebp
+ psrld xmm13,30
+ add ecx,DWORD PTR[40+rsp]
+ and esi,eax
+ xor eax,ebx
+ por xmm10,xmm13
+ ror ebp,7
+ mov edi,edx
+ xor esi,eax
+ rol edx,5
+ pshufd xmm3,xmm9,238
+ add ecx,esi
+ xor edi,ebp
+ xor ebp,eax
+ add ecx,edx
+ add ebx,DWORD PTR[44+rsp]
+ and edi,ebp
+ xor ebp,eax
+ ror edx,7
+ movups xmm1,XMMWORD PTR[((-48))+r15]
+DB 102,15,56,220,208
+ mov esi,ecx
+ xor edi,ebp
+ rol ecx,5
+ add ebx,edi
+ xor esi,edx
+ xor edx,ebp
+ add ebx,ecx
+ pxor xmm11,xmm7
+ add eax,DWORD PTR[48+rsp]
+ and esi,edx
+ xor edx,ebp
+ ror ecx,7
+ punpcklqdq xmm3,xmm10
+ mov edi,ebx
+ xor esi,edx
+ pxor xmm11,xmm4
+ rol ebx,5
+ add eax,esi
+ movdqa xmm13,XMMWORD PTR[48+r11]
+ xor edi,ecx
+ paddd xmm12,xmm10
+ xor ecx,edx
+ pxor xmm11,xmm3
+ add eax,ebx
+ add ebp,DWORD PTR[52+rsp]
+ movups xmm0,XMMWORD PTR[((-32))+r15]
+DB 102,15,56,220,209
+ and edi,ecx
+ xor ecx,edx
+ ror ebx,7
+ movdqa xmm3,xmm11
+ mov esi,eax
+ xor edi,ecx
+ movdqa XMMWORD PTR[32+rsp],xmm12
+ rol eax,5
+ add ebp,edi
+ xor esi,ebx
+ pslld xmm11,2
+ xor ebx,ecx
+ add ebp,eax
+ psrld xmm3,30
+ add edx,DWORD PTR[56+rsp]
+ and esi,ebx
+ xor ebx,ecx
+ por xmm11,xmm3
+ ror eax,7
+ mov edi,ebp
+ xor esi,ebx
+ rol ebp,5
+ pshufd xmm12,xmm10,238
+ add edx,esi
+ movups xmm1,XMMWORD PTR[((-16))+r15]
+DB 102,15,56,220,208
+ xor edi,eax
+ xor eax,ebx
+ add edx,ebp
+ add ecx,DWORD PTR[60+rsp]
+ and edi,eax
+ xor eax,ebx
+ ror ebp,7
+ mov esi,edx
+ xor edi,eax
+ rol edx,5
+ add ecx,edi
+ xor esi,ebp
+ xor ebp,eax
+ add ecx,edx
+ pxor xmm4,xmm8
+ add ebx,DWORD PTR[rsp]
+ and esi,ebp
+ xor ebp,eax
+ ror edx,7
+ movups xmm0,XMMWORD PTR[r15]
+DB 102,15,56,220,209
+ punpcklqdq xmm12,xmm11
+ mov edi,ecx
+ xor esi,ebp
+ pxor xmm4,xmm5
+ rol ecx,5
+ add ebx,esi
+ movdqa xmm3,xmm13
+ xor edi,edx
+ paddd xmm13,xmm11
+ xor edx,ebp
+ pxor xmm4,xmm12
+ add ebx,ecx
+ add eax,DWORD PTR[4+rsp]
+ and edi,edx
+ xor edx,ebp
+ ror ecx,7
+ movdqa xmm12,xmm4
+ mov esi,ebx
+ xor edi,edx
+ movdqa XMMWORD PTR[48+rsp],xmm13
+ rol ebx,5
+ add eax,edi
+ xor esi,ecx
+ pslld xmm4,2
+ xor ecx,edx
+ add eax,ebx
+ psrld xmm12,30
+ add ebp,DWORD PTR[8+rsp]
+ movups xmm1,XMMWORD PTR[16+r15]
+DB 102,15,56,220,208
+ and esi,ecx
+ xor ecx,edx
+ por xmm4,xmm12
+ ror ebx,7
+ mov edi,eax
+ xor esi,ecx
+ rol eax,5
+ pshufd xmm13,xmm11,238
+ add ebp,esi
+ xor edi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ add edx,DWORD PTR[12+rsp]
+ and edi,ebx
+ xor ebx,ecx
+ ror eax,7
+ mov esi,ebp
+ xor edi,ebx
+ rol ebp,5
+ add edx,edi
+ movups xmm0,XMMWORD PTR[32+r15]
+DB 102,15,56,220,209
+ xor esi,eax
+ xor eax,ebx
+ add edx,ebp
+ pxor xmm5,xmm9
+ add ecx,DWORD PTR[16+rsp]
+ and esi,eax
+ xor eax,ebx
+ ror ebp,7
+ punpcklqdq xmm13,xmm4
+ mov edi,edx
+ xor esi,eax
+ pxor xmm5,xmm6
+ rol edx,5
+ add ecx,esi
+ movdqa xmm12,xmm3
+ xor edi,ebp
+ paddd xmm3,xmm4
+ xor ebp,eax
+ pxor xmm5,xmm13
+ add ecx,edx
+ add ebx,DWORD PTR[20+rsp]
+ and edi,ebp
+ xor ebp,eax
+ ror edx,7
+ movups xmm1,XMMWORD PTR[48+r15]
+DB 102,15,56,220,208
+ movdqa xmm13,xmm5
+ mov esi,ecx
+ xor edi,ebp
+ movdqa XMMWORD PTR[rsp],xmm3
+ rol ecx,5
+ add ebx,edi
+ xor esi,edx
+ pslld xmm5,2
+ xor edx,ebp
+ add ebx,ecx
+ psrld xmm13,30
+ add eax,DWORD PTR[24+rsp]
+ and esi,edx
+ xor edx,ebp
+ por xmm5,xmm13
+ ror ecx,7
+ mov edi,ebx
+ xor esi,edx
+ rol ebx,5
+ pshufd xmm3,xmm4,238
+ add eax,esi
+ xor edi,ecx
+ xor ecx,edx
+ add eax,ebx
+ add ebp,DWORD PTR[28+rsp]
+ cmp r8d,11
+ jb $L$aesenclast3
+ movups xmm0,XMMWORD PTR[64+r15]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[80+r15]
+DB 102,15,56,220,208
+ je $L$aesenclast3
+ movups xmm0,XMMWORD PTR[96+r15]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[112+r15]
+DB 102,15,56,220,208
+$L$aesenclast3::
+DB 102,15,56,221,209
+ movups xmm0,XMMWORD PTR[((16-112))+r15]
+ and edi,ecx
+ xor ecx,edx
+ ror ebx,7
+ mov esi,eax
+ xor edi,ecx
+ rol eax,5
+ add ebp,edi
+ xor esi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ pxor xmm6,xmm10
+ add edx,DWORD PTR[32+rsp]
+ and esi,ebx
+ xor ebx,ecx
+ ror eax,7
+ punpcklqdq xmm3,xmm5
+ mov edi,ebp
+ xor esi,ebx
+ pxor xmm6,xmm7
+ rol ebp,5
+ add edx,esi
+ movups xmm14,XMMWORD PTR[48+r12]
+ xorps xmm14,xmm15
+ movups XMMWORD PTR[32+r12*1+r13],xmm2
+ xorps xmm2,xmm14
+ movups xmm1,XMMWORD PTR[((-80))+r15]
+DB 102,15,56,220,208
+ movdqa xmm13,xmm12
+ xor edi,eax
+ paddd xmm12,xmm5
+ xor eax,ebx
+ pxor xmm6,xmm3
+ add edx,ebp
+ add ecx,DWORD PTR[36+rsp]
+ and edi,eax
+ xor eax,ebx
+ ror ebp,7
+ movdqa xmm3,xmm6
+ mov esi,edx
+ xor edi,eax
+ movdqa XMMWORD PTR[16+rsp],xmm12
+ rol edx,5
+ add ecx,edi
+ xor esi,ebp
+ pslld xmm6,2
+ xor ebp,eax
+ add ecx,edx
+ psrld xmm3,30
+ add ebx,DWORD PTR[40+rsp]
+ and esi,ebp
+ xor ebp,eax
+ por xmm6,xmm3
+ ror edx,7
+ movups xmm0,XMMWORD PTR[((-64))+r15]
+DB 102,15,56,220,209
+ mov edi,ecx
+ xor esi,ebp
+ rol ecx,5
+ pshufd xmm12,xmm5,238
+ add ebx,esi
+ xor edi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[44+rsp]
+ and edi,edx
+ xor edx,ebp
+ ror ecx,7
+ mov esi,ebx
+ xor edi,edx
+ rol ebx,5
+ add eax,edi
+ xor esi,edx
+ add eax,ebx
+ pxor xmm7,xmm11
+ add ebp,DWORD PTR[48+rsp]
+ movups xmm1,XMMWORD PTR[((-48))+r15]
+DB 102,15,56,220,208
+ xor esi,ecx
+ punpcklqdq xmm12,xmm6
+ mov edi,eax
+ rol eax,5
+ pxor xmm7,xmm8
+ add ebp,esi
+ xor edi,ecx
+ movdqa xmm3,xmm13
+ ror ebx,7
+ paddd xmm13,xmm6
+ add ebp,eax
+ pxor xmm7,xmm12
+ add edx,DWORD PTR[52+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ movdqa xmm12,xmm7
+ add edx,edi
+ xor esi,ebx
+ movdqa XMMWORD PTR[32+rsp],xmm13
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[56+rsp]
+ pslld xmm7,2
+ xor esi,eax
+ mov edi,edx
+ psrld xmm12,30
+ rol edx,5
+ add ecx,esi
+ movups xmm0,XMMWORD PTR[((-32))+r15]
+DB 102,15,56,220,209
+ xor edi,eax
+ ror ebp,7
+ por xmm7,xmm12
+ add ecx,edx
+ add ebx,DWORD PTR[60+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ rol ecx,5
+ add ebx,edi
+ xor esi,ebp
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[rsp]
+ xor esi,edx
+ mov edi,ebx
+ rol ebx,5
+ paddd xmm3,xmm7
+ add eax,esi
+ xor edi,edx
+ movdqa XMMWORD PTR[48+rsp],xmm3
+ ror ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[4+rsp]
+ movups xmm1,XMMWORD PTR[((-16))+r15]
+DB 102,15,56,220,208
+ xor edi,ecx
+ mov esi,eax
+ rol eax,5
+ add ebp,edi
+ xor esi,ecx
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[8+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ rol ebp,5
+ add edx,esi
+ xor edi,ebx
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[12+rsp]
+ xor edi,eax
+ mov esi,edx
+ rol edx,5
+ add ecx,edi
+ movups xmm0,XMMWORD PTR[r15]
+DB 102,15,56,220,209
+ xor esi,eax
+ ror ebp,7
+ add ecx,edx
+ cmp r10,r14
+ je $L$done_ssse3
+ movdqa xmm3,XMMWORD PTR[64+r11]
+ movdqa xmm13,XMMWORD PTR[r11]
+ movdqu xmm4,XMMWORD PTR[r10]
+ movdqu xmm5,XMMWORD PTR[16+r10]
+ movdqu xmm6,XMMWORD PTR[32+r10]
+ movdqu xmm7,XMMWORD PTR[48+r10]
+DB 102,15,56,0,227
+ add r10,64
+ add ebx,DWORD PTR[16+rsp]
+ xor esi,ebp
+ mov edi,ecx
+DB 102,15,56,0,235
+ rol ecx,5
+ add ebx,esi
+ xor edi,ebp
+ ror edx,7
+ paddd xmm4,xmm13
+ add ebx,ecx
+ add eax,DWORD PTR[20+rsp]
+ xor edi,edx
+ mov esi,ebx
+ movdqa XMMWORD PTR[rsp],xmm4
+ rol ebx,5
+ add eax,edi
+ xor esi,edx
+ ror ecx,7
+ psubd xmm4,xmm13
+ add eax,ebx
+ add ebp,DWORD PTR[24+rsp]
+ movups xmm1,XMMWORD PTR[16+r15]
+DB 102,15,56,220,208
+ xor esi,ecx
+ mov edi,eax
+ rol eax,5
+ add ebp,esi
+ xor edi,ecx
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[28+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ add edx,edi
+ xor esi,ebx
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[32+rsp]
+ xor esi,eax
+ mov edi,edx
+DB 102,15,56,0,243
+ rol edx,5
+ add ecx,esi
+ movups xmm0,XMMWORD PTR[32+r15]
+DB 102,15,56,220,209
+ xor edi,eax
+ ror ebp,7
+ paddd xmm5,xmm13
+ add ecx,edx
+ add ebx,DWORD PTR[36+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ movdqa XMMWORD PTR[16+rsp],xmm5
+ rol ecx,5
+ add ebx,edi
+ xor esi,ebp
+ ror edx,7
+ psubd xmm5,xmm13
+ add ebx,ecx
+ add eax,DWORD PTR[40+rsp]
+ xor esi,edx
+ mov edi,ebx
+ rol ebx,5
+ add eax,esi
+ xor edi,edx
+ ror ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[44+rsp]
+ movups xmm1,XMMWORD PTR[48+r15]
+DB 102,15,56,220,208
+ xor edi,ecx
+ mov esi,eax
+ rol eax,5
+ add ebp,edi
+ xor esi,ecx
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[48+rsp]
+ xor esi,ebx
+ mov edi,ebp
+DB 102,15,56,0,251
+ rol ebp,5
+ add edx,esi
+ xor edi,ebx
+ ror eax,7
+ paddd xmm6,xmm13
+ add edx,ebp
+ add ecx,DWORD PTR[52+rsp]
+ xor edi,eax
+ mov esi,edx
+ movdqa XMMWORD PTR[32+rsp],xmm6
+ rol edx,5
+ add ecx,edi
+ cmp r8d,11
+ jb $L$aesenclast4
+ movups xmm0,XMMWORD PTR[64+r15]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[80+r15]
+DB 102,15,56,220,208
+ je $L$aesenclast4
+ movups xmm0,XMMWORD PTR[96+r15]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[112+r15]
+DB 102,15,56,220,208
+$L$aesenclast4::
+DB 102,15,56,221,209
+ movups xmm0,XMMWORD PTR[((16-112))+r15]
+ xor esi,eax
+ ror ebp,7
+ psubd xmm6,xmm13
+ add ecx,edx
+ add ebx,DWORD PTR[56+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ rol ecx,5
+ add ebx,esi
+ xor edi,ebp
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[60+rsp]
+ xor edi,edx
+ mov esi,ebx
+ rol ebx,5
+ add eax,edi
+ ror ecx,7
+ add eax,ebx
+ movups XMMWORD PTR[48+r12*1+r13],xmm2
+ lea r12,QWORD PTR[64+r12]
+
+ add eax,DWORD PTR[r9]
+ add esi,DWORD PTR[4+r9]
+ add ecx,DWORD PTR[8+r9]
+ add edx,DWORD PTR[12+r9]
+ mov DWORD PTR[r9],eax
+ add ebp,DWORD PTR[16+r9]
+ mov DWORD PTR[4+r9],esi
+ mov ebx,esi
+ mov DWORD PTR[8+r9],ecx
+ mov edi,ecx
+ mov DWORD PTR[12+r9],edx
+ xor edi,edx
+ mov DWORD PTR[16+r9],ebp
+ and esi,edi
+ jmp $L$oop_ssse3
+
+$L$done_ssse3::
+ add ebx,DWORD PTR[16+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ rol ecx,5
+ add ebx,esi
+ xor edi,ebp
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[20+rsp]
+ xor edi,edx
+ mov esi,ebx
+ rol ebx,5
+ add eax,edi
+ xor esi,edx
+ ror ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[24+rsp]
+ movups xmm1,XMMWORD PTR[16+r15]
+DB 102,15,56,220,208
+ xor esi,ecx
+ mov edi,eax
+ rol eax,5
+ add ebp,esi
+ xor edi,ecx
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[28+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ add edx,edi
+ xor esi,ebx
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[32+rsp]
+ xor esi,eax
+ mov edi,edx
+ rol edx,5
+ add ecx,esi
+ movups xmm0,XMMWORD PTR[32+r15]
+DB 102,15,56,220,209
+ xor edi,eax
+ ror ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[36+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ rol ecx,5
+ add ebx,edi
+ xor esi,ebp
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[40+rsp]
+ xor esi,edx
+ mov edi,ebx
+ rol ebx,5
+ add eax,esi
+ xor edi,edx
+ ror ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[44+rsp]
+ movups xmm1,XMMWORD PTR[48+r15]
+DB 102,15,56,220,208
+ xor edi,ecx
+ mov esi,eax
+ rol eax,5
+ add ebp,edi
+ xor esi,ecx
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[48+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ rol ebp,5
+ add edx,esi
+ xor edi,ebx
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[52+rsp]
+ xor edi,eax
+ mov esi,edx
+ rol edx,5
+ add ecx,edi
+ cmp r8d,11
+ jb $L$aesenclast5
+ movups xmm0,XMMWORD PTR[64+r15]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[80+r15]
+DB 102,15,56,220,208
+ je $L$aesenclast5
+ movups xmm0,XMMWORD PTR[96+r15]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[112+r15]
+DB 102,15,56,220,208
+$L$aesenclast5::
+DB 102,15,56,221,209
+ movups xmm0,XMMWORD PTR[((16-112))+r15]
+ xor esi,eax
+ ror ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[56+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ rol ecx,5
+ add ebx,esi
+ xor edi,ebp
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[60+rsp]
+ xor edi,edx
+ mov esi,ebx
+ rol ebx,5
+ add eax,edi
+ ror ecx,7
+ add eax,ebx
+ movups XMMWORD PTR[48+r12*1+r13],xmm2
+ mov r8,QWORD PTR[88+rsp]
+
+ add eax,DWORD PTR[r9]
+ add esi,DWORD PTR[4+r9]
+ add ecx,DWORD PTR[8+r9]
+ mov DWORD PTR[r9],eax
+ add edx,DWORD PTR[12+r9]
+ mov DWORD PTR[4+r9],esi
+ add ebp,DWORD PTR[16+r9]
+ mov DWORD PTR[8+r9],ecx
+ mov DWORD PTR[12+r9],edx
+ mov DWORD PTR[16+r9],ebp
+ movups XMMWORD PTR[r8],xmm2
+ movaps xmm6,XMMWORD PTR[((96+0))+rsp]
+ movaps xmm7,XMMWORD PTR[((96+16))+rsp]
+ movaps xmm8,XMMWORD PTR[((96+32))+rsp]
+ movaps xmm9,XMMWORD PTR[((96+48))+rsp]
+ movaps xmm10,XMMWORD PTR[((96+64))+rsp]
+ movaps xmm11,XMMWORD PTR[((96+80))+rsp]
+ movaps xmm12,XMMWORD PTR[((96+96))+rsp]
+ movaps xmm13,XMMWORD PTR[((96+112))+rsp]
+ movaps xmm14,XMMWORD PTR[((96+128))+rsp]
+ movaps xmm15,XMMWORD PTR[((96+144))+rsp]
+ lea rsi,QWORD PTR[264+rsp]
+
+ mov r15,QWORD PTR[rsi]
+
+ mov r14,QWORD PTR[8+rsi]
+
+ mov r13,QWORD PTR[16+rsi]
+
+ mov r12,QWORD PTR[24+rsi]
+
+ mov rbp,QWORD PTR[32+rsi]
+
+ mov rbx,QWORD PTR[40+rsi]
+
+ lea rsp,QWORD PTR[48+rsi]
+
+$L$epilogue_ssse3::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_cbc_sha1_enc_ssse3::
+aesni_cbc_sha1_enc_ssse3 ENDP
+
+ALIGN 32
+aesni_cbc_sha1_enc_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_cbc_sha1_enc_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov r10,QWORD PTR[56+rsp]
+
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-264))+rsp]
+
+
+
+ movaps XMMWORD PTR[(96+0)+rsp],xmm6
+ movaps XMMWORD PTR[(96+16)+rsp],xmm7
+ movaps XMMWORD PTR[(96+32)+rsp],xmm8
+ movaps XMMWORD PTR[(96+48)+rsp],xmm9
+ movaps XMMWORD PTR[(96+64)+rsp],xmm10
+ movaps XMMWORD PTR[(96+80)+rsp],xmm11
+ movaps XMMWORD PTR[(96+96)+rsp],xmm12
+ movaps XMMWORD PTR[(96+112)+rsp],xmm13
+ movaps XMMWORD PTR[(96+128)+rsp],xmm14
+ movaps XMMWORD PTR[(96+144)+rsp],xmm15
+$L$prologue_avx::
+ vzeroall
+ mov r12,rdi
+ mov r13,rsi
+ mov r14,rdx
+ lea r15,QWORD PTR[112+rcx]
+ vmovdqu xmm12,XMMWORD PTR[r8]
+ mov QWORD PTR[88+rsp],r8
+ shl r14,6
+ sub r13,r12
+ mov r8d,DWORD PTR[((240-112))+r15]
+ add r14,r10
+
+ lea r11,QWORD PTR[K_XX_XX]
+ mov eax,DWORD PTR[r9]
+ mov ebx,DWORD PTR[4+r9]
+ mov ecx,DWORD PTR[8+r9]
+ mov edx,DWORD PTR[12+r9]
+ mov esi,ebx
+ mov ebp,DWORD PTR[16+r9]
+ mov edi,ecx
+ xor edi,edx
+ and esi,edi
+
+ vmovdqa xmm6,XMMWORD PTR[64+r11]
+ vmovdqa xmm10,XMMWORD PTR[r11]
+ vmovdqu xmm0,XMMWORD PTR[r10]
+ vmovdqu xmm1,XMMWORD PTR[16+r10]
+ vmovdqu xmm2,XMMWORD PTR[32+r10]
+ vmovdqu xmm3,XMMWORD PTR[48+r10]
+ vpshufb xmm0,xmm0,xmm6
+ add r10,64
+ vpshufb xmm1,xmm1,xmm6
+ vpshufb xmm2,xmm2,xmm6
+ vpshufb xmm3,xmm3,xmm6
+ vpaddd xmm4,xmm0,xmm10
+ vpaddd xmm5,xmm1,xmm10
+ vpaddd xmm6,xmm2,xmm10
+ vmovdqa XMMWORD PTR[rsp],xmm4
+ vmovdqa XMMWORD PTR[16+rsp],xmm5
+ vmovdqa XMMWORD PTR[32+rsp],xmm6
+ vmovups xmm15,XMMWORD PTR[((-112))+r15]
+ vmovups xmm14,XMMWORD PTR[((16-112))+r15]
+ jmp $L$oop_avx
+ALIGN 32
+$L$oop_avx::
+ shrd ebx,ebx,2
+ vmovdqu xmm13,XMMWORD PTR[r12]
+ vpxor xmm13,xmm13,xmm15
+ vpxor xmm12,xmm12,xmm13
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-80))+r15]
+ xor esi,edx
+ vpalignr xmm4,xmm1,xmm0,8
+ mov edi,eax
+ add ebp,DWORD PTR[rsp]
+ vpaddd xmm9,xmm10,xmm3
+ xor ebx,ecx
+ shld eax,eax,5
+ vpsrldq xmm8,xmm3,4
+ add ebp,esi
+ and edi,ebx
+ vpxor xmm4,xmm4,xmm0
+ xor ebx,ecx
+ add ebp,eax
+ vpxor xmm8,xmm8,xmm2
+ shrd eax,eax,7
+ xor edi,ecx
+ mov esi,ebp
+ add edx,DWORD PTR[4+rsp]
+ vpxor xmm4,xmm4,xmm8
+ xor eax,ebx
+ shld ebp,ebp,5
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ add edx,edi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[((-64))+r15]
+ and esi,eax
+ vpsrld xmm8,xmm4,31
+ xor eax,ebx
+ add edx,ebp
+ shrd ebp,ebp,7
+ xor esi,ebx
+ vpslldq xmm9,xmm4,12
+ vpaddd xmm4,xmm4,xmm4
+ mov edi,edx
+ add ecx,DWORD PTR[8+rsp]
+ xor ebp,eax
+ shld edx,edx,5
+ vpor xmm4,xmm4,xmm8
+ vpsrld xmm8,xmm9,30
+ add ecx,esi
+ and edi,ebp
+ xor ebp,eax
+ add ecx,edx
+ vpslld xmm9,xmm9,2
+ vpxor xmm4,xmm4,xmm8
+ shrd edx,edx,7
+ xor edi,eax
+ mov esi,ecx
+ add ebx,DWORD PTR[12+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-48))+r15]
+ vpxor xmm4,xmm4,xmm9
+ xor edx,ebp
+ shld ecx,ecx,5
+ add ebx,edi
+ and esi,edx
+ xor edx,ebp
+ add ebx,ecx
+ shrd ecx,ecx,7
+ xor esi,ebp
+ vpalignr xmm5,xmm2,xmm1,8
+ mov edi,ebx
+ add eax,DWORD PTR[16+rsp]
+ vpaddd xmm9,xmm10,xmm4
+ xor ecx,edx
+ shld ebx,ebx,5
+ vpsrldq xmm8,xmm4,4
+ add eax,esi
+ and edi,ecx
+ vpxor xmm5,xmm5,xmm1
+ xor ecx,edx
+ add eax,ebx
+ vpxor xmm8,xmm8,xmm3
+ shrd ebx,ebx,7
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[((-32))+r15]
+ xor edi,edx
+ mov esi,eax
+ add ebp,DWORD PTR[20+rsp]
+ vpxor xmm5,xmm5,xmm8
+ xor ebx,ecx
+ shld eax,eax,5
+ vmovdqa XMMWORD PTR[rsp],xmm9
+ add ebp,edi
+ and esi,ebx
+ vpsrld xmm8,xmm5,31
+ xor ebx,ecx
+ add ebp,eax
+ shrd eax,eax,7
+ xor esi,ecx
+ vpslldq xmm9,xmm5,12
+ vpaddd xmm5,xmm5,xmm5
+ mov edi,ebp
+ add edx,DWORD PTR[24+rsp]
+ xor eax,ebx
+ shld ebp,ebp,5
+ vpor xmm5,xmm5,xmm8
+ vpsrld xmm8,xmm9,30
+ add edx,esi
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-16))+r15]
+ and edi,eax
+ xor eax,ebx
+ add edx,ebp
+ vpslld xmm9,xmm9,2
+ vpxor xmm5,xmm5,xmm8
+ shrd ebp,ebp,7
+ xor edi,ebx
+ mov esi,edx
+ add ecx,DWORD PTR[28+rsp]
+ vpxor xmm5,xmm5,xmm9
+ xor ebp,eax
+ shld edx,edx,5
+ vmovdqa xmm10,XMMWORD PTR[16+r11]
+ add ecx,edi
+ and esi,ebp
+ xor ebp,eax
+ add ecx,edx
+ shrd edx,edx,7
+ xor esi,eax
+ vpalignr xmm6,xmm3,xmm2,8
+ mov edi,ecx
+ add ebx,DWORD PTR[32+rsp]
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[r15]
+ vpaddd xmm9,xmm10,xmm5
+ xor edx,ebp
+ shld ecx,ecx,5
+ vpsrldq xmm8,xmm5,4
+ add ebx,esi
+ and edi,edx
+ vpxor xmm6,xmm6,xmm2
+ xor edx,ebp
+ add ebx,ecx
+ vpxor xmm8,xmm8,xmm4
+ shrd ecx,ecx,7
+ xor edi,ebp
+ mov esi,ebx
+ add eax,DWORD PTR[36+rsp]
+ vpxor xmm6,xmm6,xmm8
+ xor ecx,edx
+ shld ebx,ebx,5
+ vmovdqa XMMWORD PTR[16+rsp],xmm9
+ add eax,edi
+ and esi,ecx
+ vpsrld xmm8,xmm6,31
+ xor ecx,edx
+ add eax,ebx
+ shrd ebx,ebx,7
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[16+r15]
+ xor esi,edx
+ vpslldq xmm9,xmm6,12
+ vpaddd xmm6,xmm6,xmm6
+ mov edi,eax
+ add ebp,DWORD PTR[40+rsp]
+ xor ebx,ecx
+ shld eax,eax,5
+ vpor xmm6,xmm6,xmm8
+ vpsrld xmm8,xmm9,30
+ add ebp,esi
+ and edi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ vpslld xmm9,xmm9,2
+ vpxor xmm6,xmm6,xmm8
+ shrd eax,eax,7
+ xor edi,ecx
+ mov esi,ebp
+ add edx,DWORD PTR[44+rsp]
+ vpxor xmm6,xmm6,xmm9
+ xor eax,ebx
+ shld ebp,ebp,5
+ add edx,edi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[32+r15]
+ and esi,eax
+ xor eax,ebx
+ add edx,ebp
+ shrd ebp,ebp,7
+ xor esi,ebx
+ vpalignr xmm7,xmm4,xmm3,8
+ mov edi,edx
+ add ecx,DWORD PTR[48+rsp]
+ vpaddd xmm9,xmm10,xmm6
+ xor ebp,eax
+ shld edx,edx,5
+ vpsrldq xmm8,xmm6,4
+ add ecx,esi
+ and edi,ebp
+ vpxor xmm7,xmm7,xmm3
+ xor ebp,eax
+ add ecx,edx
+ vpxor xmm8,xmm8,xmm5
+ shrd edx,edx,7
+ xor edi,eax
+ mov esi,ecx
+ add ebx,DWORD PTR[52+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[48+r15]
+ vpxor xmm7,xmm7,xmm8
+ xor edx,ebp
+ shld ecx,ecx,5
+ vmovdqa XMMWORD PTR[32+rsp],xmm9
+ add ebx,edi
+ and esi,edx
+ vpsrld xmm8,xmm7,31
+ xor edx,ebp
+ add ebx,ecx
+ shrd ecx,ecx,7
+ xor esi,ebp
+ vpslldq xmm9,xmm7,12
+ vpaddd xmm7,xmm7,xmm7
+ mov edi,ebx
+ add eax,DWORD PTR[56+rsp]
+ xor ecx,edx
+ shld ebx,ebx,5
+ vpor xmm7,xmm7,xmm8
+ vpsrld xmm8,xmm9,30
+ add eax,esi
+ and edi,ecx
+ xor ecx,edx
+ add eax,ebx
+ vpslld xmm9,xmm9,2
+ vpxor xmm7,xmm7,xmm8
+ shrd ebx,ebx,7
+ cmp r8d,11
+ jb $L$vaesenclast6
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[64+r15]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[80+r15]
+ je $L$vaesenclast6
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[96+r15]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[112+r15]
+$L$vaesenclast6::
+ vaesenclast xmm12,xmm12,xmm15
+ vmovups xmm15,XMMWORD PTR[((-112))+r15]
+ vmovups xmm14,XMMWORD PTR[((16-112))+r15]
+ xor edi,edx
+ mov esi,eax
+ add ebp,DWORD PTR[60+rsp]
+ vpxor xmm7,xmm7,xmm9
+ xor ebx,ecx
+ shld eax,eax,5
+ add ebp,edi
+ and esi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ vpalignr xmm8,xmm7,xmm6,8
+ vpxor xmm0,xmm0,xmm4
+ shrd eax,eax,7
+ xor esi,ecx
+ mov edi,ebp
+ add edx,DWORD PTR[rsp]
+ vpxor xmm0,xmm0,xmm1
+ xor eax,ebx
+ shld ebp,ebp,5
+ vpaddd xmm9,xmm10,xmm7
+ add edx,esi
+ vmovdqu xmm13,XMMWORD PTR[16+r12]
+ vpxor xmm13,xmm13,xmm15
+ vmovups XMMWORD PTR[r13*1+r12],xmm12
+ vpxor xmm12,xmm12,xmm13
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-80))+r15]
+ and edi,eax
+ vpxor xmm0,xmm0,xmm8
+ xor eax,ebx
+ add edx,ebp
+ shrd ebp,ebp,7
+ xor edi,ebx
+ vpsrld xmm8,xmm0,30
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ mov esi,edx
+ add ecx,DWORD PTR[4+rsp]
+ xor ebp,eax
+ shld edx,edx,5
+ vpslld xmm0,xmm0,2
+ add ecx,edi
+ and esi,ebp
+ xor ebp,eax
+ add ecx,edx
+ shrd edx,edx,7
+ xor esi,eax
+ mov edi,ecx
+ add ebx,DWORD PTR[8+rsp]
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[((-64))+r15]
+ vpor xmm0,xmm0,xmm8
+ xor edx,ebp
+ shld ecx,ecx,5
+ add ebx,esi
+ and edi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[12+rsp]
+ xor edi,ebp
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpalignr xmm8,xmm0,xmm7,8
+ vpxor xmm1,xmm1,xmm5
+ add ebp,DWORD PTR[16+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-48))+r15]
+ xor esi,ecx
+ mov edi,eax
+ shld eax,eax,5
+ vpxor xmm1,xmm1,xmm2
+ add ebp,esi
+ xor edi,ecx
+ vpaddd xmm9,xmm10,xmm0
+ shrd ebx,ebx,7
+ add ebp,eax
+ vpxor xmm1,xmm1,xmm8
+ add edx,DWORD PTR[20+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ shld ebp,ebp,5
+ vpsrld xmm8,xmm1,30
+ vmovdqa XMMWORD PTR[rsp],xmm9
+ add edx,edi
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ vpslld xmm1,xmm1,2
+ add ecx,DWORD PTR[24+rsp]
+ xor esi,eax
+ mov edi,edx
+ shld edx,edx,5
+ add ecx,esi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[((-32))+r15]
+ xor edi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ vpor xmm1,xmm1,xmm8
+ add ebx,DWORD PTR[28+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ vpalignr xmm8,xmm1,xmm0,8
+ vpxor xmm2,xmm2,xmm6
+ add eax,DWORD PTR[32+rsp]
+ xor esi,edx
+ mov edi,ebx
+ shld ebx,ebx,5
+ vpxor xmm2,xmm2,xmm3
+ add eax,esi
+ xor edi,edx
+ vpaddd xmm9,xmm10,xmm1
+ vmovdqa xmm10,XMMWORD PTR[32+r11]
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpxor xmm2,xmm2,xmm8
+ add ebp,DWORD PTR[36+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-16))+r15]
+ xor edi,ecx
+ mov esi,eax
+ shld eax,eax,5
+ vpsrld xmm8,xmm2,30
+ vmovdqa XMMWORD PTR[16+rsp],xmm9
+ add ebp,edi
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ vpslld xmm2,xmm2,2
+ add edx,DWORD PTR[40+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ shld ebp,ebp,5
+ add edx,esi
+ xor edi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ vpor xmm2,xmm2,xmm8
+ add ecx,DWORD PTR[44+rsp]
+ xor edi,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,edi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[r15]
+ xor esi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ vpalignr xmm8,xmm2,xmm1,8
+ vpxor xmm3,xmm3,xmm7
+ add ebx,DWORD PTR[48+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ shld ecx,ecx,5
+ vpxor xmm3,xmm3,xmm4
+ add ebx,esi
+ xor edi,ebp
+ vpaddd xmm9,xmm10,xmm2
+ shrd edx,edx,7
+ add ebx,ecx
+ vpxor xmm3,xmm3,xmm8
+ add eax,DWORD PTR[52+rsp]
+ xor edi,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ vpsrld xmm8,xmm3,30
+ vmovdqa XMMWORD PTR[32+rsp],xmm9
+ add eax,edi
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpslld xmm3,xmm3,2
+ add ebp,DWORD PTR[56+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[16+r15]
+ xor esi,ecx
+ mov edi,eax
+ shld eax,eax,5
+ add ebp,esi
+ xor edi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ vpor xmm3,xmm3,xmm8
+ add edx,DWORD PTR[60+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ shld ebp,ebp,5
+ add edx,edi
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ vpalignr xmm8,xmm3,xmm2,8
+ vpxor xmm4,xmm4,xmm0
+ add ecx,DWORD PTR[rsp]
+ xor esi,eax
+ mov edi,edx
+ shld edx,edx,5
+ vpxor xmm4,xmm4,xmm5
+ add ecx,esi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[32+r15]
+ xor edi,eax
+ vpaddd xmm9,xmm10,xmm3
+ shrd ebp,ebp,7
+ add ecx,edx
+ vpxor xmm4,xmm4,xmm8
+ add ebx,DWORD PTR[4+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ shld ecx,ecx,5
+ vpsrld xmm8,xmm4,30
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ add ebx,edi
+ xor esi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ vpslld xmm4,xmm4,2
+ add eax,DWORD PTR[8+rsp]
+ xor esi,edx
+ mov edi,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ xor edi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpor xmm4,xmm4,xmm8
+ add ebp,DWORD PTR[12+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[48+r15]
+ xor edi,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ vpalignr xmm8,xmm4,xmm3,8
+ vpxor xmm5,xmm5,xmm1
+ add edx,DWORD PTR[16+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ shld ebp,ebp,5
+ vpxor xmm5,xmm5,xmm6
+ add edx,esi
+ xor edi,ebx
+ vpaddd xmm9,xmm10,xmm4
+ shrd eax,eax,7
+ add edx,ebp
+ vpxor xmm5,xmm5,xmm8
+ add ecx,DWORD PTR[20+rsp]
+ xor edi,eax
+ mov esi,edx
+ shld edx,edx,5
+ vpsrld xmm8,xmm5,30
+ vmovdqa XMMWORD PTR[rsp],xmm9
+ add ecx,edi
+ cmp r8d,11
+ jb $L$vaesenclast7
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[64+r15]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[80+r15]
+ je $L$vaesenclast7
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[96+r15]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[112+r15]
+$L$vaesenclast7::
+ vaesenclast xmm12,xmm12,xmm15
+ vmovups xmm15,XMMWORD PTR[((-112))+r15]
+ vmovups xmm14,XMMWORD PTR[((16-112))+r15]
+ xor esi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ vpslld xmm5,xmm5,2
+ add ebx,DWORD PTR[24+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor edi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ vpor xmm5,xmm5,xmm8
+ add eax,DWORD PTR[28+rsp]
+ shrd ecx,ecx,7
+ mov esi,ebx
+ xor edi,edx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,ecx
+ xor ecx,edx
+ add eax,ebx
+ vpalignr xmm8,xmm5,xmm4,8
+ vpxor xmm6,xmm6,xmm2
+ add ebp,DWORD PTR[32+rsp]
+ vmovdqu xmm13,XMMWORD PTR[32+r12]
+ vpxor xmm13,xmm13,xmm15
+ vmovups XMMWORD PTR[16+r12*1+r13],xmm12
+ vpxor xmm12,xmm12,xmm13
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-80))+r15]
+ and esi,ecx
+ xor ecx,edx
+ shrd ebx,ebx,7
+ vpxor xmm6,xmm6,xmm7
+ mov edi,eax
+ xor esi,ecx
+ vpaddd xmm9,xmm10,xmm5
+ shld eax,eax,5
+ add ebp,esi
+ vpxor xmm6,xmm6,xmm8
+ xor edi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ add edx,DWORD PTR[36+rsp]
+ vpsrld xmm8,xmm6,30
+ vmovdqa XMMWORD PTR[16+rsp],xmm9
+ and edi,ebx
+ xor ebx,ecx
+ shrd eax,eax,7
+ mov esi,ebp
+ vpslld xmm6,xmm6,2
+ xor edi,ebx
+ shld ebp,ebp,5
+ add edx,edi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[((-64))+r15]
+ xor esi,eax
+ xor eax,ebx
+ add edx,ebp
+ add ecx,DWORD PTR[40+rsp]
+ and esi,eax
+ vpor xmm6,xmm6,xmm8
+ xor eax,ebx
+ shrd ebp,ebp,7
+ mov edi,edx
+ xor esi,eax
+ shld edx,edx,5
+ add ecx,esi
+ xor edi,ebp
+ xor ebp,eax
+ add ecx,edx
+ add ebx,DWORD PTR[44+rsp]
+ and edi,ebp
+ xor ebp,eax
+ shrd edx,edx,7
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-48))+r15]
+ mov esi,ecx
+ xor edi,ebp
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,edx
+ xor edx,ebp
+ add ebx,ecx
+ vpalignr xmm8,xmm6,xmm5,8
+ vpxor xmm7,xmm7,xmm3
+ add eax,DWORD PTR[48+rsp]
+ and esi,edx
+ xor edx,ebp
+ shrd ecx,ecx,7
+ vpxor xmm7,xmm7,xmm0
+ mov edi,ebx
+ xor esi,edx
+ vpaddd xmm9,xmm10,xmm6
+ vmovdqa xmm10,XMMWORD PTR[48+r11]
+ shld ebx,ebx,5
+ add eax,esi
+ vpxor xmm7,xmm7,xmm8
+ xor edi,ecx
+ xor ecx,edx
+ add eax,ebx
+ add ebp,DWORD PTR[52+rsp]
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[((-32))+r15]
+ vpsrld xmm8,xmm7,30
+ vmovdqa XMMWORD PTR[32+rsp],xmm9
+ and edi,ecx
+ xor ecx,edx
+ shrd ebx,ebx,7
+ mov esi,eax
+ vpslld xmm7,xmm7,2
+ xor edi,ecx
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ add edx,DWORD PTR[56+rsp]
+ and esi,ebx
+ vpor xmm7,xmm7,xmm8
+ xor ebx,ecx
+ shrd eax,eax,7
+ mov edi,ebp
+ xor esi,ebx
+ shld ebp,ebp,5
+ add edx,esi
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-16))+r15]
+ xor edi,eax
+ xor eax,ebx
+ add edx,ebp
+ add ecx,DWORD PTR[60+rsp]
+ and edi,eax
+ xor eax,ebx
+ shrd ebp,ebp,7
+ mov esi,edx
+ xor edi,eax
+ shld edx,edx,5
+ add ecx,edi
+ xor esi,ebp
+ xor ebp,eax
+ add ecx,edx
+ vpalignr xmm8,xmm7,xmm6,8
+ vpxor xmm0,xmm0,xmm4
+ add ebx,DWORD PTR[rsp]
+ and esi,ebp
+ xor ebp,eax
+ shrd edx,edx,7
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[r15]
+ vpxor xmm0,xmm0,xmm1
+ mov edi,ecx
+ xor esi,ebp
+ vpaddd xmm9,xmm10,xmm7
+ shld ecx,ecx,5
+ add ebx,esi
+ vpxor xmm0,xmm0,xmm8
+ xor edi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[4+rsp]
+ vpsrld xmm8,xmm0,30
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ and edi,edx
+ xor edx,ebp
+ shrd ecx,ecx,7
+ mov esi,ebx
+ vpslld xmm0,xmm0,2
+ xor edi,edx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,ecx
+ xor ecx,edx
+ add eax,ebx
+ add ebp,DWORD PTR[8+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[16+r15]
+ and esi,ecx
+ vpor xmm0,xmm0,xmm8
+ xor ecx,edx
+ shrd ebx,ebx,7
+ mov edi,eax
+ xor esi,ecx
+ shld eax,eax,5
+ add ebp,esi
+ xor edi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ add edx,DWORD PTR[12+rsp]
+ and edi,ebx
+ xor ebx,ecx
+ shrd eax,eax,7
+ mov esi,ebp
+ xor edi,ebx
+ shld ebp,ebp,5
+ add edx,edi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[32+r15]
+ xor esi,eax
+ xor eax,ebx
+ add edx,ebp
+ vpalignr xmm8,xmm0,xmm7,8
+ vpxor xmm1,xmm1,xmm5
+ add ecx,DWORD PTR[16+rsp]
+ and esi,eax
+ xor eax,ebx
+ shrd ebp,ebp,7
+ vpxor xmm1,xmm1,xmm2
+ mov edi,edx
+ xor esi,eax
+ vpaddd xmm9,xmm10,xmm0
+ shld edx,edx,5
+ add ecx,esi
+ vpxor xmm1,xmm1,xmm8
+ xor edi,ebp
+ xor ebp,eax
+ add ecx,edx
+ add ebx,DWORD PTR[20+rsp]
+ vpsrld xmm8,xmm1,30
+ vmovdqa XMMWORD PTR[rsp],xmm9
+ and edi,ebp
+ xor ebp,eax
+ shrd edx,edx,7
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[48+r15]
+ mov esi,ecx
+ vpslld xmm1,xmm1,2
+ xor edi,ebp
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[24+rsp]
+ and esi,edx
+ vpor xmm1,xmm1,xmm8
+ xor edx,ebp
+ shrd ecx,ecx,7
+ mov edi,ebx
+ xor esi,edx
+ shld ebx,ebx,5
+ add eax,esi
+ xor edi,ecx
+ xor ecx,edx
+ add eax,ebx
+ add ebp,DWORD PTR[28+rsp]
+ cmp r8d,11
+ jb $L$vaesenclast8
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[64+r15]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[80+r15]
+ je $L$vaesenclast8
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[96+r15]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[112+r15]
+$L$vaesenclast8::
+ vaesenclast xmm12,xmm12,xmm15
+ vmovups xmm15,XMMWORD PTR[((-112))+r15]
+ vmovups xmm14,XMMWORD PTR[((16-112))+r15]
+ and edi,ecx
+ xor ecx,edx
+ shrd ebx,ebx,7
+ mov esi,eax
+ xor edi,ecx
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ vpalignr xmm8,xmm1,xmm0,8
+ vpxor xmm2,xmm2,xmm6
+ add edx,DWORD PTR[32+rsp]
+ and esi,ebx
+ xor ebx,ecx
+ shrd eax,eax,7
+ vpxor xmm2,xmm2,xmm3
+ mov edi,ebp
+ xor esi,ebx
+ vpaddd xmm9,xmm10,xmm1
+ shld ebp,ebp,5
+ add edx,esi
+ vmovdqu xmm13,XMMWORD PTR[48+r12]
+ vpxor xmm13,xmm13,xmm15
+ vmovups XMMWORD PTR[32+r12*1+r13],xmm12
+ vpxor xmm12,xmm12,xmm13
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-80))+r15]
+ vpxor xmm2,xmm2,xmm8
+ xor edi,eax
+ xor eax,ebx
+ add edx,ebp
+ add ecx,DWORD PTR[36+rsp]
+ vpsrld xmm8,xmm2,30
+ vmovdqa XMMWORD PTR[16+rsp],xmm9
+ and edi,eax
+ xor eax,ebx
+ shrd ebp,ebp,7
+ mov esi,edx
+ vpslld xmm2,xmm2,2
+ xor edi,eax
+ shld edx,edx,5
+ add ecx,edi
+ xor esi,ebp
+ xor ebp,eax
+ add ecx,edx
+ add ebx,DWORD PTR[40+rsp]
+ and esi,ebp
+ vpor xmm2,xmm2,xmm8
+ xor ebp,eax
+ shrd edx,edx,7
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[((-64))+r15]
+ mov edi,ecx
+ xor esi,ebp
+ shld ecx,ecx,5
+ add ebx,esi
+ xor edi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[44+rsp]
+ and edi,edx
+ xor edx,ebp
+ shrd ecx,ecx,7
+ mov esi,ebx
+ xor edi,edx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,edx
+ add eax,ebx
+ vpalignr xmm8,xmm2,xmm1,8
+ vpxor xmm3,xmm3,xmm7
+ add ebp,DWORD PTR[48+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-48))+r15]
+ xor esi,ecx
+ mov edi,eax
+ shld eax,eax,5
+ vpxor xmm3,xmm3,xmm4
+ add ebp,esi
+ xor edi,ecx
+ vpaddd xmm9,xmm10,xmm2
+ shrd ebx,ebx,7
+ add ebp,eax
+ vpxor xmm3,xmm3,xmm8
+ add edx,DWORD PTR[52+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ shld ebp,ebp,5
+ vpsrld xmm8,xmm3,30
+ vmovdqa XMMWORD PTR[32+rsp],xmm9
+ add edx,edi
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ vpslld xmm3,xmm3,2
+ add ecx,DWORD PTR[56+rsp]
+ xor esi,eax
+ mov edi,edx
+ shld edx,edx,5
+ add ecx,esi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[((-32))+r15]
+ xor edi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ vpor xmm3,xmm3,xmm8
+ add ebx,DWORD PTR[60+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[rsp]
+ vpaddd xmm9,xmm10,xmm3
+ xor esi,edx
+ mov edi,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ xor edi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[4+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[((-16))+r15]
+ xor edi,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[8+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ shld ebp,ebp,5
+ add edx,esi
+ xor edi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[12+rsp]
+ xor edi,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,edi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[r15]
+ xor esi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ cmp r10,r14
+ je $L$done_avx
+ vmovdqa xmm9,XMMWORD PTR[64+r11]
+ vmovdqa xmm10,XMMWORD PTR[r11]
+ vmovdqu xmm0,XMMWORD PTR[r10]
+ vmovdqu xmm1,XMMWORD PTR[16+r10]
+ vmovdqu xmm2,XMMWORD PTR[32+r10]
+ vmovdqu xmm3,XMMWORD PTR[48+r10]
+ vpshufb xmm0,xmm0,xmm9
+ add r10,64
+ add ebx,DWORD PTR[16+rsp]
+ xor esi,ebp
+ vpshufb xmm1,xmm1,xmm9
+ mov edi,ecx
+ shld ecx,ecx,5
+ vpaddd xmm8,xmm0,xmm10
+ add ebx,esi
+ xor edi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ vmovdqa XMMWORD PTR[rsp],xmm8
+ add eax,DWORD PTR[20+rsp]
+ xor edi,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[24+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[16+r15]
+ xor esi,ecx
+ mov edi,eax
+ shld eax,eax,5
+ add ebp,esi
+ xor edi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[28+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ shld ebp,ebp,5
+ add edx,edi
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[32+rsp]
+ xor esi,eax
+ vpshufb xmm2,xmm2,xmm9
+ mov edi,edx
+ shld edx,edx,5
+ vpaddd xmm8,xmm1,xmm10
+ add ecx,esi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[32+r15]
+ xor edi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ vmovdqa XMMWORD PTR[16+rsp],xmm8
+ add ebx,DWORD PTR[36+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[40+rsp]
+ xor esi,edx
+ mov edi,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ xor edi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[44+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[48+r15]
+ xor edi,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[48+rsp]
+ xor esi,ebx
+ vpshufb xmm3,xmm3,xmm9
+ mov edi,ebp
+ shld ebp,ebp,5
+ vpaddd xmm8,xmm2,xmm10
+ add edx,esi
+ xor edi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ vmovdqa XMMWORD PTR[32+rsp],xmm8
+ add ecx,DWORD PTR[52+rsp]
+ xor edi,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,edi
+ cmp r8d,11
+ jb $L$vaesenclast9
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[64+r15]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[80+r15]
+ je $L$vaesenclast9
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[96+r15]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[112+r15]
+$L$vaesenclast9::
+ vaesenclast xmm12,xmm12,xmm15
+ vmovups xmm15,XMMWORD PTR[((-112))+r15]
+ vmovups xmm14,XMMWORD PTR[((16-112))+r15]
+ xor esi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[56+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor edi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[60+rsp]
+ xor edi,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,edi
+ shrd ecx,ecx,7
+ add eax,ebx
+ vmovups XMMWORD PTR[48+r12*1+r13],xmm12
+ lea r12,QWORD PTR[64+r12]
+
+ add eax,DWORD PTR[r9]
+ add esi,DWORD PTR[4+r9]
+ add ecx,DWORD PTR[8+r9]
+ add edx,DWORD PTR[12+r9]
+ mov DWORD PTR[r9],eax
+ add ebp,DWORD PTR[16+r9]
+ mov DWORD PTR[4+r9],esi
+ mov ebx,esi
+ mov DWORD PTR[8+r9],ecx
+ mov edi,ecx
+ mov DWORD PTR[12+r9],edx
+ xor edi,edx
+ mov DWORD PTR[16+r9],ebp
+ and esi,edi
+ jmp $L$oop_avx
+
+$L$done_avx::
+ add ebx,DWORD PTR[16+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor edi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[20+rsp]
+ xor edi,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[24+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[16+r15]
+ xor esi,ecx
+ mov edi,eax
+ shld eax,eax,5
+ add ebp,esi
+ xor edi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[28+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ shld ebp,ebp,5
+ add edx,edi
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[32+rsp]
+ xor esi,eax
+ mov edi,edx
+ shld edx,edx,5
+ add ecx,esi
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[32+r15]
+ xor edi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[36+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[40+rsp]
+ xor esi,edx
+ mov edi,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ xor edi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[44+rsp]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[48+r15]
+ xor edi,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[48+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ shld ebp,ebp,5
+ add edx,esi
+ xor edi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[52+rsp]
+ xor edi,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,edi
+ cmp r8d,11
+ jb $L$vaesenclast10
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[64+r15]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[80+r15]
+ je $L$vaesenclast10
+ vaesenc xmm12,xmm12,xmm15
+ vmovups xmm14,XMMWORD PTR[96+r15]
+ vaesenc xmm12,xmm12,xmm14
+ vmovups xmm15,XMMWORD PTR[112+r15]
+$L$vaesenclast10::
+ vaesenclast xmm12,xmm12,xmm15
+ vmovups xmm15,XMMWORD PTR[((-112))+r15]
+ vmovups xmm14,XMMWORD PTR[((16-112))+r15]
+ xor esi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[56+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor edi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[60+rsp]
+ xor edi,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,edi
+ shrd ecx,ecx,7
+ add eax,ebx
+ vmovups XMMWORD PTR[48+r12*1+r13],xmm12
+ mov r8,QWORD PTR[88+rsp]
+
+ add eax,DWORD PTR[r9]
+ add esi,DWORD PTR[4+r9]
+ add ecx,DWORD PTR[8+r9]
+ mov DWORD PTR[r9],eax
+ add edx,DWORD PTR[12+r9]
+ mov DWORD PTR[4+r9],esi
+ add ebp,DWORD PTR[16+r9]
+ mov DWORD PTR[8+r9],ecx
+ mov DWORD PTR[12+r9],edx
+ mov DWORD PTR[16+r9],ebp
+ vmovups XMMWORD PTR[r8],xmm12
+ vzeroall
+ movaps xmm6,XMMWORD PTR[((96+0))+rsp]
+ movaps xmm7,XMMWORD PTR[((96+16))+rsp]
+ movaps xmm8,XMMWORD PTR[((96+32))+rsp]
+ movaps xmm9,XMMWORD PTR[((96+48))+rsp]
+ movaps xmm10,XMMWORD PTR[((96+64))+rsp]
+ movaps xmm11,XMMWORD PTR[((96+80))+rsp]
+ movaps xmm12,XMMWORD PTR[((96+96))+rsp]
+ movaps xmm13,XMMWORD PTR[((96+112))+rsp]
+ movaps xmm14,XMMWORD PTR[((96+128))+rsp]
+ movaps xmm15,XMMWORD PTR[((96+144))+rsp]
+ lea rsi,QWORD PTR[264+rsp]
+
+ mov r15,QWORD PTR[rsi]
+
+ mov r14,QWORD PTR[8+rsi]
+
+ mov r13,QWORD PTR[16+rsi]
+
+ mov r12,QWORD PTR[24+rsi]
+
+ mov rbp,QWORD PTR[32+rsi]
+
+ mov rbx,QWORD PTR[40+rsi]
+
+ lea rsp,QWORD PTR[48+rsi]
+
+$L$epilogue_avx::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_cbc_sha1_enc_avx::
+aesni_cbc_sha1_enc_avx ENDP
+ALIGN 64
+K_XX_XX::
+ DD 05a827999h,05a827999h,05a827999h,05a827999h
+ DD 06ed9eba1h,06ed9eba1h,06ed9eba1h,06ed9eba1h
+ DD 08f1bbcdch,08f1bbcdch,08f1bbcdch,08f1bbcdch
+ DD 0ca62c1d6h,0ca62c1d6h,0ca62c1d6h,0ca62c1d6h
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+DB 0fh,0eh,0dh,0ch,0bh,0ah,09h,08h,07h,06h,05h,04h,03h,02h,01h,00h
+
+DB 65,69,83,78,73,45,67,66,67,43,83,72,65,49,32,115
+DB 116,105,116,99,104,32,102,111,114,32,120,56,54,95,54,52
+DB 44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
+DB 60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
+DB 114,103,62,0
+ALIGN 64
+
+ALIGN 32
+aesni_cbc_sha1_enc_shaext PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_cbc_sha1_enc_shaext::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov r10,QWORD PTR[56+rsp]
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[(-8-160)+rax],xmm6
+ movaps XMMWORD PTR[(-8-144)+rax],xmm7
+ movaps XMMWORD PTR[(-8-128)+rax],xmm8
+ movaps XMMWORD PTR[(-8-112)+rax],xmm9
+ movaps XMMWORD PTR[(-8-96)+rax],xmm10
+ movaps XMMWORD PTR[(-8-80)+rax],xmm11
+ movaps XMMWORD PTR[(-8-64)+rax],xmm12
+ movaps XMMWORD PTR[(-8-48)+rax],xmm13
+ movaps XMMWORD PTR[(-8-32)+rax],xmm14
+ movaps XMMWORD PTR[(-8-16)+rax],xmm15
+$L$prologue_shaext::
+ movdqu xmm8,XMMWORD PTR[r9]
+ movd xmm9,DWORD PTR[16+r9]
+ movdqa xmm7,XMMWORD PTR[((K_XX_XX+80))]
+
+ mov r11d,DWORD PTR[240+rcx]
+ sub rsi,rdi
+ movups xmm15,XMMWORD PTR[rcx]
+ movups xmm2,XMMWORD PTR[r8]
+ movups xmm0,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[112+rcx]
+
+ pshufd xmm8,xmm8,27
+ pshufd xmm9,xmm9,27
+ jmp $L$oop_shaext
+
+ALIGN 16
+$L$oop_shaext::
+ movups xmm14,XMMWORD PTR[rdi]
+ xorps xmm14,xmm15
+ xorps xmm2,xmm14
+ movups xmm1,XMMWORD PTR[((-80))+rcx]
+DB 102,15,56,220,208
+ movdqu xmm3,XMMWORD PTR[r10]
+ movdqa xmm12,xmm9
+DB 102,15,56,0,223
+ movdqu xmm4,XMMWORD PTR[16+r10]
+ movdqa xmm11,xmm8
+ movups xmm0,XMMWORD PTR[((-64))+rcx]
+DB 102,15,56,220,209
+DB 102,15,56,0,231
+
+ paddd xmm9,xmm3
+ movdqu xmm5,XMMWORD PTR[32+r10]
+ lea r10,QWORD PTR[64+r10]
+ pxor xmm3,xmm12
+ movups xmm1,XMMWORD PTR[((-48))+rcx]
+DB 102,15,56,220,208
+ pxor xmm3,xmm12
+ movdqa xmm10,xmm8
+DB 102,15,56,0,239
+DB 69,15,58,204,193,0
+DB 68,15,56,200,212
+ movups xmm0,XMMWORD PTR[((-32))+rcx]
+DB 102,15,56,220,209
+DB 15,56,201,220
+ movdqu xmm6,XMMWORD PTR[((-16))+r10]
+ movdqa xmm9,xmm8
+DB 102,15,56,0,247
+ movups xmm1,XMMWORD PTR[((-16))+rcx]
+DB 102,15,56,220,208
+DB 69,15,58,204,194,0
+DB 68,15,56,200,205
+ pxor xmm3,xmm5
+DB 15,56,201,229
+ movups xmm0,XMMWORD PTR[rcx]
+DB 102,15,56,220,209
+ movdqa xmm10,xmm8
+DB 69,15,58,204,193,0
+DB 68,15,56,200,214
+ movups xmm1,XMMWORD PTR[16+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,222
+ pxor xmm4,xmm6
+DB 15,56,201,238
+ movups xmm0,XMMWORD PTR[32+rcx]
+DB 102,15,56,220,209
+ movdqa xmm9,xmm8
+DB 69,15,58,204,194,0
+DB 68,15,56,200,203
+ movups xmm1,XMMWORD PTR[48+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,227
+ pxor xmm5,xmm3
+DB 15,56,201,243
+ cmp r11d,11
+ jb $L$aesenclast11
+ movups xmm0,XMMWORD PTR[64+rcx]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[80+rcx]
+DB 102,15,56,220,208
+ je $L$aesenclast11
+ movups xmm0,XMMWORD PTR[96+rcx]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[112+rcx]
+DB 102,15,56,220,208
+$L$aesenclast11::
+DB 102,15,56,221,209
+ movups xmm0,XMMWORD PTR[((16-112))+rcx]
+ movdqa xmm10,xmm8
+DB 69,15,58,204,193,0
+DB 68,15,56,200,212
+ movups xmm14,XMMWORD PTR[16+rdi]
+ xorps xmm14,xmm15
+ movups XMMWORD PTR[rdi*1+rsi],xmm2
+ xorps xmm2,xmm14
+ movups xmm1,XMMWORD PTR[((-80))+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,236
+ pxor xmm6,xmm4
+DB 15,56,201,220
+ movups xmm0,XMMWORD PTR[((-64))+rcx]
+DB 102,15,56,220,209
+ movdqa xmm9,xmm8
+DB 69,15,58,204,194,1
+DB 68,15,56,200,205
+ movups xmm1,XMMWORD PTR[((-48))+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,245
+ pxor xmm3,xmm5
+DB 15,56,201,229
+ movups xmm0,XMMWORD PTR[((-32))+rcx]
+DB 102,15,56,220,209
+ movdqa xmm10,xmm8
+DB 69,15,58,204,193,1
+DB 68,15,56,200,214
+ movups xmm1,XMMWORD PTR[((-16))+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,222
+ pxor xmm4,xmm6
+DB 15,56,201,238
+ movups xmm0,XMMWORD PTR[rcx]
+DB 102,15,56,220,209
+ movdqa xmm9,xmm8
+DB 69,15,58,204,194,1
+DB 68,15,56,200,203
+ movups xmm1,XMMWORD PTR[16+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,227
+ pxor xmm5,xmm3
+DB 15,56,201,243
+ movups xmm0,XMMWORD PTR[32+rcx]
+DB 102,15,56,220,209
+ movdqa xmm10,xmm8
+DB 69,15,58,204,193,1
+DB 68,15,56,200,212
+ movups xmm1,XMMWORD PTR[48+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,236
+ pxor xmm6,xmm4
+DB 15,56,201,220
+ cmp r11d,11
+ jb $L$aesenclast12
+ movups xmm0,XMMWORD PTR[64+rcx]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[80+rcx]
+DB 102,15,56,220,208
+ je $L$aesenclast12
+ movups xmm0,XMMWORD PTR[96+rcx]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[112+rcx]
+DB 102,15,56,220,208
+$L$aesenclast12::
+DB 102,15,56,221,209
+ movups xmm0,XMMWORD PTR[((16-112))+rcx]
+ movdqa xmm9,xmm8
+DB 69,15,58,204,194,1
+DB 68,15,56,200,205
+ movups xmm14,XMMWORD PTR[32+rdi]
+ xorps xmm14,xmm15
+ movups XMMWORD PTR[16+rdi*1+rsi],xmm2
+ xorps xmm2,xmm14
+ movups xmm1,XMMWORD PTR[((-80))+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,245
+ pxor xmm3,xmm5
+DB 15,56,201,229
+ movups xmm0,XMMWORD PTR[((-64))+rcx]
+DB 102,15,56,220,209
+ movdqa xmm10,xmm8
+DB 69,15,58,204,193,2
+DB 68,15,56,200,214
+ movups xmm1,XMMWORD PTR[((-48))+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,222
+ pxor xmm4,xmm6
+DB 15,56,201,238
+ movups xmm0,XMMWORD PTR[((-32))+rcx]
+DB 102,15,56,220,209
+ movdqa xmm9,xmm8
+DB 69,15,58,204,194,2
+DB 68,15,56,200,203
+ movups xmm1,XMMWORD PTR[((-16))+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,227
+ pxor xmm5,xmm3
+DB 15,56,201,243
+ movups xmm0,XMMWORD PTR[rcx]
+DB 102,15,56,220,209
+ movdqa xmm10,xmm8
+DB 69,15,58,204,193,2
+DB 68,15,56,200,212
+ movups xmm1,XMMWORD PTR[16+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,236
+ pxor xmm6,xmm4
+DB 15,56,201,220
+ movups xmm0,XMMWORD PTR[32+rcx]
+DB 102,15,56,220,209
+ movdqa xmm9,xmm8
+DB 69,15,58,204,194,2
+DB 68,15,56,200,205
+ movups xmm1,XMMWORD PTR[48+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,245
+ pxor xmm3,xmm5
+DB 15,56,201,229
+ cmp r11d,11
+ jb $L$aesenclast13
+ movups xmm0,XMMWORD PTR[64+rcx]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[80+rcx]
+DB 102,15,56,220,208
+ je $L$aesenclast13
+ movups xmm0,XMMWORD PTR[96+rcx]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[112+rcx]
+DB 102,15,56,220,208
+$L$aesenclast13::
+DB 102,15,56,221,209
+ movups xmm0,XMMWORD PTR[((16-112))+rcx]
+ movdqa xmm10,xmm8
+DB 69,15,58,204,193,2
+DB 68,15,56,200,214
+ movups xmm14,XMMWORD PTR[48+rdi]
+ xorps xmm14,xmm15
+ movups XMMWORD PTR[32+rdi*1+rsi],xmm2
+ xorps xmm2,xmm14
+ movups xmm1,XMMWORD PTR[((-80))+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,222
+ pxor xmm4,xmm6
+DB 15,56,201,238
+ movups xmm0,XMMWORD PTR[((-64))+rcx]
+DB 102,15,56,220,209
+ movdqa xmm9,xmm8
+DB 69,15,58,204,194,3
+DB 68,15,56,200,203
+ movups xmm1,XMMWORD PTR[((-48))+rcx]
+DB 102,15,56,220,208
+DB 15,56,202,227
+ pxor xmm5,xmm3
+DB 15,56,201,243
+ movups xmm0,XMMWORD PTR[((-32))+rcx]
+DB 102,15,56,220,209
+ movdqa xmm10,xmm8
+DB 69,15,58,204,193,3
+DB 68,15,56,200,212
+DB 15,56,202,236
+ pxor xmm6,xmm4
+ movups xmm1,XMMWORD PTR[((-16))+rcx]
+DB 102,15,56,220,208
+ movdqa xmm9,xmm8
+DB 69,15,58,204,194,3
+DB 68,15,56,200,205
+DB 15,56,202,245
+ movups xmm0,XMMWORD PTR[rcx]
+DB 102,15,56,220,209
+ movdqa xmm5,xmm12
+ movdqa xmm10,xmm8
+DB 69,15,58,204,193,3
+DB 68,15,56,200,214
+ movups xmm1,XMMWORD PTR[16+rcx]
+DB 102,15,56,220,208
+ movdqa xmm9,xmm8
+DB 69,15,58,204,194,3
+DB 68,15,56,200,205
+ movups xmm0,XMMWORD PTR[32+rcx]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[48+rcx]
+DB 102,15,56,220,208
+ cmp r11d,11
+ jb $L$aesenclast14
+ movups xmm0,XMMWORD PTR[64+rcx]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[80+rcx]
+DB 102,15,56,220,208
+ je $L$aesenclast14
+ movups xmm0,XMMWORD PTR[96+rcx]
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[112+rcx]
+DB 102,15,56,220,208
+$L$aesenclast14::
+DB 102,15,56,221,209
+ movups xmm0,XMMWORD PTR[((16-112))+rcx]
+ dec rdx
+
+ paddd xmm8,xmm11
+ movups XMMWORD PTR[48+rdi*1+rsi],xmm2
+ lea rdi,QWORD PTR[64+rdi]
+ jnz $L$oop_shaext
+
+ pshufd xmm8,xmm8,27
+ pshufd xmm9,xmm9,27
+ movups XMMWORD PTR[r8],xmm2
+ movdqu XMMWORD PTR[r9],xmm8
+ movd DWORD PTR[16+r9],xmm9
+ movaps xmm6,XMMWORD PTR[((-8-160))+rax]
+ movaps xmm7,XMMWORD PTR[((-8-144))+rax]
+ movaps xmm8,XMMWORD PTR[((-8-128))+rax]
+ movaps xmm9,XMMWORD PTR[((-8-112))+rax]
+ movaps xmm10,XMMWORD PTR[((-8-96))+rax]
+ movaps xmm11,XMMWORD PTR[((-8-80))+rax]
+ movaps xmm12,XMMWORD PTR[((-8-64))+rax]
+ movaps xmm13,XMMWORD PTR[((-8-48))+rax]
+ movaps xmm14,XMMWORD PTR[((-8-32))+rax]
+ movaps xmm15,XMMWORD PTR[((-8-16))+rax]
+ mov rsp,rax
+$L$epilogue_shaext::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_cbc_sha1_enc_shaext::
+aesni_cbc_sha1_enc_shaext ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+ssse3_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+ lea r10,QWORD PTR[aesni_cbc_sha1_enc_shaext]
+ cmp rbx,r10
+ jb $L$seh_no_shaext
+
+ lea rsi,QWORD PTR[rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+ lea rax,QWORD PTR[168+rax]
+ jmp $L$common_seh_tail
+$L$seh_no_shaext::
+ lea rsi,QWORD PTR[96+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+ lea rax,QWORD PTR[264+rax]
+
+ mov r15,QWORD PTR[rax]
+ mov r14,QWORD PTR[8+rax]
+ mov r13,QWORD PTR[16+rax]
+ mov r12,QWORD PTR[24+rax]
+ mov rbp,QWORD PTR[32+rax]
+ mov rbx,QWORD PTR[40+rax]
+ lea rax,QWORD PTR[48+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+ssse3_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_aesni_cbc_sha1_enc_ssse3
+ DD imagerel $L$SEH_end_aesni_cbc_sha1_enc_ssse3
+ DD imagerel $L$SEH_info_aesni_cbc_sha1_enc_ssse3
+ DD imagerel $L$SEH_begin_aesni_cbc_sha1_enc_avx
+ DD imagerel $L$SEH_end_aesni_cbc_sha1_enc_avx
+ DD imagerel $L$SEH_info_aesni_cbc_sha1_enc_avx
+ DD imagerel $L$SEH_begin_aesni_cbc_sha1_enc_shaext
+ DD imagerel $L$SEH_end_aesni_cbc_sha1_enc_shaext
+ DD imagerel $L$SEH_info_aesni_cbc_sha1_enc_shaext
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_aesni_cbc_sha1_enc_ssse3::
+DB 9,0,0,0
+ DD imagerel ssse3_handler
+ DD imagerel $L$prologue_ssse3,imagerel $L$epilogue_ssse3
+$L$SEH_info_aesni_cbc_sha1_enc_avx::
+DB 9,0,0,0
+ DD imagerel ssse3_handler
+ DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
+$L$SEH_info_aesni_cbc_sha1_enc_shaext::
+DB 9,0,0,0
+ DD imagerel ssse3_handler
+ DD imagerel $L$prologue_shaext,imagerel $L$epilogue_shaext
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/aes/aesni-sha256-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/aes/aesni-sha256-x86_64.masm
index 857aafba4f..d36b48a361 100644
--- a/contrib/libs/openssl/asm/windows/crypto/aes/aesni-sha256-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/aes/aesni-sha256-x86_64.masm
@@ -1,4713 +1,4713 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-PUBLIC aesni_cbc_sha256_enc
-
-ALIGN 16
-aesni_cbc_sha256_enc PROC PUBLIC
-
- lea r11,QWORD PTR[OPENSSL_ia32cap_P]
- mov eax,1
- cmp rcx,0
- je $L$probe
- mov eax,DWORD PTR[r11]
- mov r10,QWORD PTR[4+r11]
- bt r10,61
- jc aesni_cbc_sha256_enc_shaext
- mov r11,r10
- shr r11,32
-
- test r10d,2048
- jnz aesni_cbc_sha256_enc_xop
- and r11d,296
- cmp r11d,296
- je aesni_cbc_sha256_enc_avx2
- and r10d,268435456
- jnz aesni_cbc_sha256_enc_avx
- ud2
- xor eax,eax
- cmp rcx,0
- je $L$probe
- ud2
-$L$probe::
- DB 0F3h,0C3h ;repret
-
-aesni_cbc_sha256_enc ENDP
-
-ALIGN 64
-
-K256::
- DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
- DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
- DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
- DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
- DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
- DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
- DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
- DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
- DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
- DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
- DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
- DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
- DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
- DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
- DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
- DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
- DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
- DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
- DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
- DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
- DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
- DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
- DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
- DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
- DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
- DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
- DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
- DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
- DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
- DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
- DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
- DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
-
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
- DD 0,0,0,0,0,0,0,0,-1,-1,-1,-1
- DD 0,0,0,0,0,0,0,0
-DB 65,69,83,78,73,45,67,66,67,43,83,72,65,50,53,54
-DB 32,115,116,105,116,99,104,32,102,111,114,32,120,56,54,95
-DB 54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98
-DB 121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108
-DB 46,111,114,103,62,0
-ALIGN 64
-
-ALIGN 64
-aesni_cbc_sha256_enc_xop PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_cbc_sha256_enc_xop::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
-$L$xop_shortcut::
- mov r10,QWORD PTR[56+rsp]
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,288
- and rsp,-64
-
- shl rdx,6
- sub rsi,rdi
- sub r10,rdi
- add rdx,rdi
-
-
- mov QWORD PTR[((64+8))+rsp],rsi
- mov QWORD PTR[((64+16))+rsp],rdx
-
- mov QWORD PTR[((64+32))+rsp],r8
- mov QWORD PTR[((64+40))+rsp],r9
- mov QWORD PTR[((64+48))+rsp],r10
- mov QWORD PTR[120+rsp],rax
-
- movaps XMMWORD PTR[128+rsp],xmm6
- movaps XMMWORD PTR[144+rsp],xmm7
- movaps XMMWORD PTR[160+rsp],xmm8
- movaps XMMWORD PTR[176+rsp],xmm9
- movaps XMMWORD PTR[192+rsp],xmm10
- movaps XMMWORD PTR[208+rsp],xmm11
- movaps XMMWORD PTR[224+rsp],xmm12
- movaps XMMWORD PTR[240+rsp],xmm13
- movaps XMMWORD PTR[256+rsp],xmm14
- movaps XMMWORD PTR[272+rsp],xmm15
-$L$prologue_xop::
- vzeroall
-
- mov r12,rdi
- lea rdi,QWORD PTR[128+rcx]
- lea r13,QWORD PTR[((K256+544))]
- mov r14d,DWORD PTR[((240-128))+rdi]
- mov r15,r9
- mov rsi,r10
- vmovdqu xmm8,XMMWORD PTR[r8]
- sub r14,9
-
- mov eax,DWORD PTR[r15]
- mov ebx,DWORD PTR[4+r15]
- mov ecx,DWORD PTR[8+r15]
- mov edx,DWORD PTR[12+r15]
- mov r8d,DWORD PTR[16+r15]
- mov r9d,DWORD PTR[20+r15]
- mov r10d,DWORD PTR[24+r15]
- mov r11d,DWORD PTR[28+r15]
-
- vmovdqa xmm14,XMMWORD PTR[r14*8+r13]
- vmovdqa xmm13,XMMWORD PTR[16+r14*8+r13]
- vmovdqa xmm12,XMMWORD PTR[32+r14*8+r13]
- vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
- jmp $L$loop_xop
-ALIGN 16
-$L$loop_xop::
- vmovdqa xmm7,XMMWORD PTR[((K256+512))]
- vmovdqu xmm0,XMMWORD PTR[r12*1+rsi]
- vmovdqu xmm1,XMMWORD PTR[16+r12*1+rsi]
- vmovdqu xmm2,XMMWORD PTR[32+r12*1+rsi]
- vmovdqu xmm3,XMMWORD PTR[48+r12*1+rsi]
- vpshufb xmm0,xmm0,xmm7
- lea rbp,QWORD PTR[K256]
- vpshufb xmm1,xmm1,xmm7
- vpshufb xmm2,xmm2,xmm7
- vpaddd xmm4,xmm0,XMMWORD PTR[rbp]
- vpshufb xmm3,xmm3,xmm7
- vpaddd xmm5,xmm1,XMMWORD PTR[32+rbp]
- vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
- vpaddd xmm7,xmm3,XMMWORD PTR[96+rbp]
- vmovdqa XMMWORD PTR[rsp],xmm4
- mov r14d,eax
- vmovdqa XMMWORD PTR[16+rsp],xmm5
- mov esi,ebx
- vmovdqa XMMWORD PTR[32+rsp],xmm6
- xor esi,ecx
- vmovdqa XMMWORD PTR[48+rsp],xmm7
- mov r13d,r8d
- jmp $L$xop_00_47
-
-ALIGN 16
-$L$xop_00_47::
- sub rbp,-16*2*4
- vmovdqu xmm9,XMMWORD PTR[r12]
- mov QWORD PTR[((64+0))+rsp],r12
- vpalignr xmm4,xmm1,xmm0,4
- ror r13d,14
- mov eax,r14d
- vpalignr xmm7,xmm3,xmm2,4
- mov r12d,r9d
- xor r13d,r8d
-DB 143,232,120,194,236,14
- ror r14d,9
- xor r12d,r10d
- vpsrld xmm4,xmm4,3
- ror r13d,5
- xor r14d,eax
- vpaddd xmm0,xmm0,xmm7
- and r12d,r8d
- vpxor xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
- xor r13d,r8d
- add r11d,DWORD PTR[rsp]
- mov r15d,eax
-DB 143,232,120,194,245,11
- ror r14d,11
- xor r12d,r10d
- vpxor xmm4,xmm4,xmm5
- xor r15d,ebx
- ror r13d,6
- add r11d,r12d
- and esi,r15d
-DB 143,232,120,194,251,13
- xor r14d,eax
- add r11d,r13d
- vpxor xmm4,xmm4,xmm6
- xor esi,ebx
- add edx,r11d
- vpsrld xmm6,xmm3,10
- ror r14d,2
- add r11d,esi
- vpaddd xmm0,xmm0,xmm4
- mov r13d,edx
- add r14d,r11d
-DB 143,232,120,194,239,2
- ror r13d,14
- mov r11d,r14d
- vpxor xmm7,xmm7,xmm6
- mov r12d,r8d
- xor r13d,edx
- ror r14d,9
- xor r12d,r9d
- vpxor xmm7,xmm7,xmm5
- ror r13d,5
- xor r14d,r11d
- and r12d,edx
- vpxor xmm9,xmm9,xmm8
- xor r13d,edx
- vpsrldq xmm7,xmm7,8
- add r10d,DWORD PTR[4+rsp]
- mov esi,r11d
- ror r14d,11
- xor r12d,r9d
- vpaddd xmm0,xmm0,xmm7
- xor esi,eax
- ror r13d,6
- add r10d,r12d
- and r15d,esi
-DB 143,232,120,194,248,13
- xor r14d,r11d
- add r10d,r13d
- vpsrld xmm6,xmm0,10
- xor r15d,eax
- add ecx,r10d
-DB 143,232,120,194,239,2
- ror r14d,2
- add r10d,r15d
- vpxor xmm7,xmm7,xmm6
- mov r13d,ecx
- add r14d,r10d
- ror r13d,14
- mov r10d,r14d
- vpxor xmm7,xmm7,xmm5
- mov r12d,edx
- xor r13d,ecx
- ror r14d,9
- xor r12d,r8d
- vpslldq xmm7,xmm7,8
- ror r13d,5
- xor r14d,r10d
- and r12d,ecx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
- xor r13d,ecx
- vpaddd xmm0,xmm0,xmm7
- add r9d,DWORD PTR[8+rsp]
- mov r15d,r10d
- ror r14d,11
- xor r12d,r8d
- vpaddd xmm6,xmm0,XMMWORD PTR[rbp]
- xor r15d,r11d
- ror r13d,6
- add r9d,r12d
- and esi,r15d
- xor r14d,r10d
- add r9d,r13d
- xor esi,r11d
- add ebx,r9d
- ror r14d,2
- add r9d,esi
- mov r13d,ebx
- add r14d,r9d
- ror r13d,14
- mov r9d,r14d
- mov r12d,ecx
- xor r13d,ebx
- ror r14d,9
- xor r12d,edx
- ror r13d,5
- xor r14d,r9d
- and r12d,ebx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
- xor r13d,ebx
- add r8d,DWORD PTR[12+rsp]
- mov esi,r9d
- ror r14d,11
- xor r12d,edx
- xor esi,r10d
- ror r13d,6
- add r8d,r12d
- and r15d,esi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- add eax,r8d
- ror r14d,2
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- vmovdqa XMMWORD PTR[rsp],xmm6
- vpalignr xmm4,xmm2,xmm1,4
- ror r13d,14
- mov r8d,r14d
- vpalignr xmm7,xmm0,xmm3,4
- mov r12d,ebx
- xor r13d,eax
-DB 143,232,120,194,236,14
- ror r14d,9
- xor r12d,ecx
- vpsrld xmm4,xmm4,3
- ror r13d,5
- xor r14d,r8d
- vpaddd xmm1,xmm1,xmm7
- and r12d,eax
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
- xor r13d,eax
- add edx,DWORD PTR[16+rsp]
- mov r15d,r8d
-DB 143,232,120,194,245,11
- ror r14d,11
- xor r12d,ecx
- vpxor xmm4,xmm4,xmm5
- xor r15d,r9d
- ror r13d,6
- add edx,r12d
- and esi,r15d
-DB 143,232,120,194,248,13
- xor r14d,r8d
- add edx,r13d
- vpxor xmm4,xmm4,xmm6
- xor esi,r9d
- add r11d,edx
- vpsrld xmm6,xmm0,10
- ror r14d,2
- add edx,esi
- vpaddd xmm1,xmm1,xmm4
- mov r13d,r11d
- add r14d,edx
-DB 143,232,120,194,239,2
- ror r13d,14
- mov edx,r14d
- vpxor xmm7,xmm7,xmm6
- mov r12d,eax
- xor r13d,r11d
- ror r14d,9
- xor r12d,ebx
- vpxor xmm7,xmm7,xmm5
- ror r13d,5
- xor r14d,edx
- and r12d,r11d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
- xor r13d,r11d
- vpsrldq xmm7,xmm7,8
- add ecx,DWORD PTR[20+rsp]
- mov esi,edx
- ror r14d,11
- xor r12d,ebx
- vpaddd xmm1,xmm1,xmm7
- xor esi,r8d
- ror r13d,6
- add ecx,r12d
- and r15d,esi
-DB 143,232,120,194,249,13
- xor r14d,edx
- add ecx,r13d
- vpsrld xmm6,xmm1,10
- xor r15d,r8d
- add r10d,ecx
-DB 143,232,120,194,239,2
- ror r14d,2
- add ecx,r15d
- vpxor xmm7,xmm7,xmm6
- mov r13d,r10d
- add r14d,ecx
- ror r13d,14
- mov ecx,r14d
- vpxor xmm7,xmm7,xmm5
- mov r12d,r11d
- xor r13d,r10d
- ror r14d,9
- xor r12d,eax
- vpslldq xmm7,xmm7,8
- ror r13d,5
- xor r14d,ecx
- and r12d,r10d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
- xor r13d,r10d
- vpaddd xmm1,xmm1,xmm7
- add ebx,DWORD PTR[24+rsp]
- mov r15d,ecx
- ror r14d,11
- xor r12d,eax
- vpaddd xmm6,xmm1,XMMWORD PTR[32+rbp]
- xor r15d,edx
- ror r13d,6
- add ebx,r12d
- and esi,r15d
- xor r14d,ecx
- add ebx,r13d
- xor esi,edx
- add r9d,ebx
- ror r14d,2
- add ebx,esi
- mov r13d,r9d
- add r14d,ebx
- ror r13d,14
- mov ebx,r14d
- mov r12d,r10d
- xor r13d,r9d
- ror r14d,9
- xor r12d,r11d
- ror r13d,5
- xor r14d,ebx
- and r12d,r9d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
- xor r13d,r9d
- add eax,DWORD PTR[28+rsp]
- mov esi,ebx
- ror r14d,11
- xor r12d,r11d
- xor esi,ecx
- ror r13d,6
- add eax,r12d
- and r15d,esi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- add r8d,eax
- ror r14d,2
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- vmovdqa XMMWORD PTR[16+rsp],xmm6
- vpalignr xmm4,xmm3,xmm2,4
- ror r13d,14
- mov eax,r14d
- vpalignr xmm7,xmm1,xmm0,4
- mov r12d,r9d
- xor r13d,r8d
-DB 143,232,120,194,236,14
- ror r14d,9
- xor r12d,r10d
- vpsrld xmm4,xmm4,3
- ror r13d,5
- xor r14d,eax
- vpaddd xmm2,xmm2,xmm7
- and r12d,r8d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
- xor r13d,r8d
- add r11d,DWORD PTR[32+rsp]
- mov r15d,eax
-DB 143,232,120,194,245,11
- ror r14d,11
- xor r12d,r10d
- vpxor xmm4,xmm4,xmm5
- xor r15d,ebx
- ror r13d,6
- add r11d,r12d
- and esi,r15d
-DB 143,232,120,194,249,13
- xor r14d,eax
- add r11d,r13d
- vpxor xmm4,xmm4,xmm6
- xor esi,ebx
- add edx,r11d
- vpsrld xmm6,xmm1,10
- ror r14d,2
- add r11d,esi
- vpaddd xmm2,xmm2,xmm4
- mov r13d,edx
- add r14d,r11d
-DB 143,232,120,194,239,2
- ror r13d,14
- mov r11d,r14d
- vpxor xmm7,xmm7,xmm6
- mov r12d,r8d
- xor r13d,edx
- ror r14d,9
- xor r12d,r9d
- vpxor xmm7,xmm7,xmm5
- ror r13d,5
- xor r14d,r11d
- and r12d,edx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
- xor r13d,edx
- vpsrldq xmm7,xmm7,8
- add r10d,DWORD PTR[36+rsp]
- mov esi,r11d
- ror r14d,11
- xor r12d,r9d
- vpaddd xmm2,xmm2,xmm7
- xor esi,eax
- ror r13d,6
- add r10d,r12d
- and r15d,esi
-DB 143,232,120,194,250,13
- xor r14d,r11d
- add r10d,r13d
- vpsrld xmm6,xmm2,10
- xor r15d,eax
- add ecx,r10d
-DB 143,232,120,194,239,2
- ror r14d,2
- add r10d,r15d
- vpxor xmm7,xmm7,xmm6
- mov r13d,ecx
- add r14d,r10d
- ror r13d,14
- mov r10d,r14d
- vpxor xmm7,xmm7,xmm5
- mov r12d,edx
- xor r13d,ecx
- ror r14d,9
- xor r12d,r8d
- vpslldq xmm7,xmm7,8
- ror r13d,5
- xor r14d,r10d
- and r12d,ecx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
- xor r13d,ecx
- vpaddd xmm2,xmm2,xmm7
- add r9d,DWORD PTR[40+rsp]
- mov r15d,r10d
- ror r14d,11
- xor r12d,r8d
- vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
- xor r15d,r11d
- ror r13d,6
- add r9d,r12d
- and esi,r15d
- xor r14d,r10d
- add r9d,r13d
- xor esi,r11d
- add ebx,r9d
- ror r14d,2
- add r9d,esi
- mov r13d,ebx
- add r14d,r9d
- ror r13d,14
- mov r9d,r14d
- mov r12d,ecx
- xor r13d,ebx
- ror r14d,9
- xor r12d,edx
- ror r13d,5
- xor r14d,r9d
- and r12d,ebx
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
- xor r13d,ebx
- add r8d,DWORD PTR[44+rsp]
- mov esi,r9d
- ror r14d,11
- xor r12d,edx
- xor esi,r10d
- ror r13d,6
- add r8d,r12d
- and r15d,esi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- add eax,r8d
- ror r14d,2
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- vmovdqa XMMWORD PTR[32+rsp],xmm6
- vpalignr xmm4,xmm0,xmm3,4
- ror r13d,14
- mov r8d,r14d
- vpalignr xmm7,xmm2,xmm1,4
- mov r12d,ebx
- xor r13d,eax
-DB 143,232,120,194,236,14
- ror r14d,9
- xor r12d,ecx
- vpsrld xmm4,xmm4,3
- ror r13d,5
- xor r14d,r8d
- vpaddd xmm3,xmm3,xmm7
- and r12d,eax
- vpand xmm8,xmm11,xmm12
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
- xor r13d,eax
- add edx,DWORD PTR[48+rsp]
- mov r15d,r8d
-DB 143,232,120,194,245,11
- ror r14d,11
- xor r12d,ecx
- vpxor xmm4,xmm4,xmm5
- xor r15d,r9d
- ror r13d,6
- add edx,r12d
- and esi,r15d
-DB 143,232,120,194,250,13
- xor r14d,r8d
- add edx,r13d
- vpxor xmm4,xmm4,xmm6
- xor esi,r9d
- add r11d,edx
- vpsrld xmm6,xmm2,10
- ror r14d,2
- add edx,esi
- vpaddd xmm3,xmm3,xmm4
- mov r13d,r11d
- add r14d,edx
-DB 143,232,120,194,239,2
- ror r13d,14
- mov edx,r14d
- vpxor xmm7,xmm7,xmm6
- mov r12d,eax
- xor r13d,r11d
- ror r14d,9
- xor r12d,ebx
- vpxor xmm7,xmm7,xmm5
- ror r13d,5
- xor r14d,edx
- and r12d,r11d
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
- xor r13d,r11d
- vpsrldq xmm7,xmm7,8
- add ecx,DWORD PTR[52+rsp]
- mov esi,edx
- ror r14d,11
- xor r12d,ebx
- vpaddd xmm3,xmm3,xmm7
- xor esi,r8d
- ror r13d,6
- add ecx,r12d
- and r15d,esi
-DB 143,232,120,194,251,13
- xor r14d,edx
- add ecx,r13d
- vpsrld xmm6,xmm3,10
- xor r15d,r8d
- add r10d,ecx
-DB 143,232,120,194,239,2
- ror r14d,2
- add ecx,r15d
- vpxor xmm7,xmm7,xmm6
- mov r13d,r10d
- add r14d,ecx
- ror r13d,14
- mov ecx,r14d
- vpxor xmm7,xmm7,xmm5
- mov r12d,r11d
- xor r13d,r10d
- ror r14d,9
- xor r12d,eax
- vpslldq xmm7,xmm7,8
- ror r13d,5
- xor r14d,ecx
- and r12d,r10d
- vpand xmm11,xmm11,xmm13
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
- xor r13d,r10d
- vpaddd xmm3,xmm3,xmm7
- add ebx,DWORD PTR[56+rsp]
- mov r15d,ecx
- ror r14d,11
- xor r12d,eax
- vpaddd xmm6,xmm3,XMMWORD PTR[96+rbp]
- xor r15d,edx
- ror r13d,6
- add ebx,r12d
- and esi,r15d
- xor r14d,ecx
- add ebx,r13d
- xor esi,edx
- add r9d,ebx
- ror r14d,2
- add ebx,esi
- mov r13d,r9d
- add r14d,ebx
- ror r13d,14
- mov ebx,r14d
- mov r12d,r10d
- xor r13d,r9d
- ror r14d,9
- xor r12d,r11d
- ror r13d,5
- xor r14d,ebx
- and r12d,r9d
- vpor xmm8,xmm8,xmm11
- vaesenclast xmm11,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
- xor r13d,r9d
- add eax,DWORD PTR[60+rsp]
- mov esi,ebx
- ror r14d,11
- xor r12d,r11d
- xor esi,ecx
- ror r13d,6
- add eax,r12d
- and r15d,esi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- add r8d,eax
- ror r14d,2
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- vmovdqa XMMWORD PTR[48+rsp],xmm6
- mov r12,QWORD PTR[((64+0))+rsp]
- vpand xmm11,xmm11,xmm14
- mov r15,QWORD PTR[((64+8))+rsp]
- vpor xmm8,xmm8,xmm11
- vmovdqu XMMWORD PTR[r12*1+r15],xmm8
- lea r12,QWORD PTR[16+r12]
- cmp BYTE PTR[131+rbp],0
- jne $L$xop_00_47
- vmovdqu xmm9,XMMWORD PTR[r12]
- mov QWORD PTR[((64+0))+rsp],r12
- ror r13d,14
- mov eax,r14d
- mov r12d,r9d
- xor r13d,r8d
- ror r14d,9
- xor r12d,r10d
- ror r13d,5
- xor r14d,eax
- and r12d,r8d
- vpxor xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
- xor r13d,r8d
- add r11d,DWORD PTR[rsp]
- mov r15d,eax
- ror r14d,11
- xor r12d,r10d
- xor r15d,ebx
- ror r13d,6
- add r11d,r12d
- and esi,r15d
- xor r14d,eax
- add r11d,r13d
- xor esi,ebx
- add edx,r11d
- ror r14d,2
- add r11d,esi
- mov r13d,edx
- add r14d,r11d
- ror r13d,14
- mov r11d,r14d
- mov r12d,r8d
- xor r13d,edx
- ror r14d,9
- xor r12d,r9d
- ror r13d,5
- xor r14d,r11d
- and r12d,edx
- vpxor xmm9,xmm9,xmm8
- xor r13d,edx
- add r10d,DWORD PTR[4+rsp]
- mov esi,r11d
- ror r14d,11
- xor r12d,r9d
- xor esi,eax
- ror r13d,6
- add r10d,r12d
- and r15d,esi
- xor r14d,r11d
- add r10d,r13d
- xor r15d,eax
- add ecx,r10d
- ror r14d,2
- add r10d,r15d
- mov r13d,ecx
- add r14d,r10d
- ror r13d,14
- mov r10d,r14d
- mov r12d,edx
- xor r13d,ecx
- ror r14d,9
- xor r12d,r8d
- ror r13d,5
- xor r14d,r10d
- and r12d,ecx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
- xor r13d,ecx
- add r9d,DWORD PTR[8+rsp]
- mov r15d,r10d
- ror r14d,11
- xor r12d,r8d
- xor r15d,r11d
- ror r13d,6
- add r9d,r12d
- and esi,r15d
- xor r14d,r10d
- add r9d,r13d
- xor esi,r11d
- add ebx,r9d
- ror r14d,2
- add r9d,esi
- mov r13d,ebx
- add r14d,r9d
- ror r13d,14
- mov r9d,r14d
- mov r12d,ecx
- xor r13d,ebx
- ror r14d,9
- xor r12d,edx
- ror r13d,5
- xor r14d,r9d
- and r12d,ebx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
- xor r13d,ebx
- add r8d,DWORD PTR[12+rsp]
- mov esi,r9d
- ror r14d,11
- xor r12d,edx
- xor esi,r10d
- ror r13d,6
- add r8d,r12d
- and r15d,esi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- add eax,r8d
- ror r14d,2
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- ror r13d,14
- mov r8d,r14d
- mov r12d,ebx
- xor r13d,eax
- ror r14d,9
- xor r12d,ecx
- ror r13d,5
- xor r14d,r8d
- and r12d,eax
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
- xor r13d,eax
- add edx,DWORD PTR[16+rsp]
- mov r15d,r8d
- ror r14d,11
- xor r12d,ecx
- xor r15d,r9d
- ror r13d,6
- add edx,r12d
- and esi,r15d
- xor r14d,r8d
- add edx,r13d
- xor esi,r9d
- add r11d,edx
- ror r14d,2
- add edx,esi
- mov r13d,r11d
- add r14d,edx
- ror r13d,14
- mov edx,r14d
- mov r12d,eax
- xor r13d,r11d
- ror r14d,9
- xor r12d,ebx
- ror r13d,5
- xor r14d,edx
- and r12d,r11d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
- xor r13d,r11d
- add ecx,DWORD PTR[20+rsp]
- mov esi,edx
- ror r14d,11
- xor r12d,ebx
- xor esi,r8d
- ror r13d,6
- add ecx,r12d
- and r15d,esi
- xor r14d,edx
- add ecx,r13d
- xor r15d,r8d
- add r10d,ecx
- ror r14d,2
- add ecx,r15d
- mov r13d,r10d
- add r14d,ecx
- ror r13d,14
- mov ecx,r14d
- mov r12d,r11d
- xor r13d,r10d
- ror r14d,9
- xor r12d,eax
- ror r13d,5
- xor r14d,ecx
- and r12d,r10d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
- xor r13d,r10d
- add ebx,DWORD PTR[24+rsp]
- mov r15d,ecx
- ror r14d,11
- xor r12d,eax
- xor r15d,edx
- ror r13d,6
- add ebx,r12d
- and esi,r15d
- xor r14d,ecx
- add ebx,r13d
- xor esi,edx
- add r9d,ebx
- ror r14d,2
- add ebx,esi
- mov r13d,r9d
- add r14d,ebx
- ror r13d,14
- mov ebx,r14d
- mov r12d,r10d
- xor r13d,r9d
- ror r14d,9
- xor r12d,r11d
- ror r13d,5
- xor r14d,ebx
- and r12d,r9d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
- xor r13d,r9d
- add eax,DWORD PTR[28+rsp]
- mov esi,ebx
- ror r14d,11
- xor r12d,r11d
- xor esi,ecx
- ror r13d,6
- add eax,r12d
- and r15d,esi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- add r8d,eax
- ror r14d,2
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- ror r13d,14
- mov eax,r14d
- mov r12d,r9d
- xor r13d,r8d
- ror r14d,9
- xor r12d,r10d
- ror r13d,5
- xor r14d,eax
- and r12d,r8d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
- xor r13d,r8d
- add r11d,DWORD PTR[32+rsp]
- mov r15d,eax
- ror r14d,11
- xor r12d,r10d
- xor r15d,ebx
- ror r13d,6
- add r11d,r12d
- and esi,r15d
- xor r14d,eax
- add r11d,r13d
- xor esi,ebx
- add edx,r11d
- ror r14d,2
- add r11d,esi
- mov r13d,edx
- add r14d,r11d
- ror r13d,14
- mov r11d,r14d
- mov r12d,r8d
- xor r13d,edx
- ror r14d,9
- xor r12d,r9d
- ror r13d,5
- xor r14d,r11d
- and r12d,edx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
- xor r13d,edx
- add r10d,DWORD PTR[36+rsp]
- mov esi,r11d
- ror r14d,11
- xor r12d,r9d
- xor esi,eax
- ror r13d,6
- add r10d,r12d
- and r15d,esi
- xor r14d,r11d
- add r10d,r13d
- xor r15d,eax
- add ecx,r10d
- ror r14d,2
- add r10d,r15d
- mov r13d,ecx
- add r14d,r10d
- ror r13d,14
- mov r10d,r14d
- mov r12d,edx
- xor r13d,ecx
- ror r14d,9
- xor r12d,r8d
- ror r13d,5
- xor r14d,r10d
- and r12d,ecx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
- xor r13d,ecx
- add r9d,DWORD PTR[40+rsp]
- mov r15d,r10d
- ror r14d,11
- xor r12d,r8d
- xor r15d,r11d
- ror r13d,6
- add r9d,r12d
- and esi,r15d
- xor r14d,r10d
- add r9d,r13d
- xor esi,r11d
- add ebx,r9d
- ror r14d,2
- add r9d,esi
- mov r13d,ebx
- add r14d,r9d
- ror r13d,14
- mov r9d,r14d
- mov r12d,ecx
- xor r13d,ebx
- ror r14d,9
- xor r12d,edx
- ror r13d,5
- xor r14d,r9d
- and r12d,ebx
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
- xor r13d,ebx
- add r8d,DWORD PTR[44+rsp]
- mov esi,r9d
- ror r14d,11
- xor r12d,edx
- xor esi,r10d
- ror r13d,6
- add r8d,r12d
- and r15d,esi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- add eax,r8d
- ror r14d,2
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- ror r13d,14
- mov r8d,r14d
- mov r12d,ebx
- xor r13d,eax
- ror r14d,9
- xor r12d,ecx
- ror r13d,5
- xor r14d,r8d
- and r12d,eax
- vpand xmm8,xmm11,xmm12
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
- xor r13d,eax
- add edx,DWORD PTR[48+rsp]
- mov r15d,r8d
- ror r14d,11
- xor r12d,ecx
- xor r15d,r9d
- ror r13d,6
- add edx,r12d
- and esi,r15d
- xor r14d,r8d
- add edx,r13d
- xor esi,r9d
- add r11d,edx
- ror r14d,2
- add edx,esi
- mov r13d,r11d
- add r14d,edx
- ror r13d,14
- mov edx,r14d
- mov r12d,eax
- xor r13d,r11d
- ror r14d,9
- xor r12d,ebx
- ror r13d,5
- xor r14d,edx
- and r12d,r11d
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
- xor r13d,r11d
- add ecx,DWORD PTR[52+rsp]
- mov esi,edx
- ror r14d,11
- xor r12d,ebx
- xor esi,r8d
- ror r13d,6
- add ecx,r12d
- and r15d,esi
- xor r14d,edx
- add ecx,r13d
- xor r15d,r8d
- add r10d,ecx
- ror r14d,2
- add ecx,r15d
- mov r13d,r10d
- add r14d,ecx
- ror r13d,14
- mov ecx,r14d
- mov r12d,r11d
- xor r13d,r10d
- ror r14d,9
- xor r12d,eax
- ror r13d,5
- xor r14d,ecx
- and r12d,r10d
- vpand xmm11,xmm11,xmm13
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
- xor r13d,r10d
- add ebx,DWORD PTR[56+rsp]
- mov r15d,ecx
- ror r14d,11
- xor r12d,eax
- xor r15d,edx
- ror r13d,6
- add ebx,r12d
- and esi,r15d
- xor r14d,ecx
- add ebx,r13d
- xor esi,edx
- add r9d,ebx
- ror r14d,2
- add ebx,esi
- mov r13d,r9d
- add r14d,ebx
- ror r13d,14
- mov ebx,r14d
- mov r12d,r10d
- xor r13d,r9d
- ror r14d,9
- xor r12d,r11d
- ror r13d,5
- xor r14d,ebx
- and r12d,r9d
- vpor xmm8,xmm8,xmm11
- vaesenclast xmm11,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
- xor r13d,r9d
- add eax,DWORD PTR[60+rsp]
- mov esi,ebx
- ror r14d,11
- xor r12d,r11d
- xor esi,ecx
- ror r13d,6
- add eax,r12d
- and r15d,esi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- add r8d,eax
- ror r14d,2
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- mov r12,QWORD PTR[((64+0))+rsp]
- mov r13,QWORD PTR[((64+8))+rsp]
- mov r15,QWORD PTR[((64+40))+rsp]
- mov rsi,QWORD PTR[((64+48))+rsp]
-
- vpand xmm11,xmm11,xmm14
- mov eax,r14d
- vpor xmm8,xmm8,xmm11
- vmovdqu XMMWORD PTR[r13*1+r12],xmm8
- lea r12,QWORD PTR[16+r12]
-
- add eax,DWORD PTR[r15]
- add ebx,DWORD PTR[4+r15]
- add ecx,DWORD PTR[8+r15]
- add edx,DWORD PTR[12+r15]
- add r8d,DWORD PTR[16+r15]
- add r9d,DWORD PTR[20+r15]
- add r10d,DWORD PTR[24+r15]
- add r11d,DWORD PTR[28+r15]
-
- cmp r12,QWORD PTR[((64+16))+rsp]
-
- mov DWORD PTR[r15],eax
- mov DWORD PTR[4+r15],ebx
- mov DWORD PTR[8+r15],ecx
- mov DWORD PTR[12+r15],edx
- mov DWORD PTR[16+r15],r8d
- mov DWORD PTR[20+r15],r9d
- mov DWORD PTR[24+r15],r10d
- mov DWORD PTR[28+r15],r11d
-
- jb $L$loop_xop
-
- mov r8,QWORD PTR[((64+32))+rsp]
- mov rsi,QWORD PTR[120+rsp]
-
- vmovdqu XMMWORD PTR[r8],xmm8
- vzeroall
- movaps xmm6,XMMWORD PTR[128+rsp]
- movaps xmm7,XMMWORD PTR[144+rsp]
- movaps xmm8,XMMWORD PTR[160+rsp]
- movaps xmm9,XMMWORD PTR[176+rsp]
- movaps xmm10,XMMWORD PTR[192+rsp]
- movaps xmm11,XMMWORD PTR[208+rsp]
- movaps xmm12,XMMWORD PTR[224+rsp]
- movaps xmm13,XMMWORD PTR[240+rsp]
- movaps xmm14,XMMWORD PTR[256+rsp]
- movaps xmm15,XMMWORD PTR[272+rsp]
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue_xop::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_cbc_sha256_enc_xop::
-aesni_cbc_sha256_enc_xop ENDP
-
-ALIGN 64
-aesni_cbc_sha256_enc_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_cbc_sha256_enc_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
-$L$avx_shortcut::
- mov r10,QWORD PTR[56+rsp]
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,288
- and rsp,-64
-
- shl rdx,6
- sub rsi,rdi
- sub r10,rdi
- add rdx,rdi
-
-
- mov QWORD PTR[((64+8))+rsp],rsi
- mov QWORD PTR[((64+16))+rsp],rdx
-
- mov QWORD PTR[((64+32))+rsp],r8
- mov QWORD PTR[((64+40))+rsp],r9
- mov QWORD PTR[((64+48))+rsp],r10
- mov QWORD PTR[120+rsp],rax
-
- movaps XMMWORD PTR[128+rsp],xmm6
- movaps XMMWORD PTR[144+rsp],xmm7
- movaps XMMWORD PTR[160+rsp],xmm8
- movaps XMMWORD PTR[176+rsp],xmm9
- movaps XMMWORD PTR[192+rsp],xmm10
- movaps XMMWORD PTR[208+rsp],xmm11
- movaps XMMWORD PTR[224+rsp],xmm12
- movaps XMMWORD PTR[240+rsp],xmm13
- movaps XMMWORD PTR[256+rsp],xmm14
- movaps XMMWORD PTR[272+rsp],xmm15
-$L$prologue_avx::
- vzeroall
-
- mov r12,rdi
- lea rdi,QWORD PTR[128+rcx]
- lea r13,QWORD PTR[((K256+544))]
- mov r14d,DWORD PTR[((240-128))+rdi]
- mov r15,r9
- mov rsi,r10
- vmovdqu xmm8,XMMWORD PTR[r8]
- sub r14,9
-
- mov eax,DWORD PTR[r15]
- mov ebx,DWORD PTR[4+r15]
- mov ecx,DWORD PTR[8+r15]
- mov edx,DWORD PTR[12+r15]
- mov r8d,DWORD PTR[16+r15]
- mov r9d,DWORD PTR[20+r15]
- mov r10d,DWORD PTR[24+r15]
- mov r11d,DWORD PTR[28+r15]
-
- vmovdqa xmm14,XMMWORD PTR[r14*8+r13]
- vmovdqa xmm13,XMMWORD PTR[16+r14*8+r13]
- vmovdqa xmm12,XMMWORD PTR[32+r14*8+r13]
- vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
- jmp $L$loop_avx
-ALIGN 16
-$L$loop_avx::
- vmovdqa xmm7,XMMWORD PTR[((K256+512))]
- vmovdqu xmm0,XMMWORD PTR[r12*1+rsi]
- vmovdqu xmm1,XMMWORD PTR[16+r12*1+rsi]
- vmovdqu xmm2,XMMWORD PTR[32+r12*1+rsi]
- vmovdqu xmm3,XMMWORD PTR[48+r12*1+rsi]
- vpshufb xmm0,xmm0,xmm7
- lea rbp,QWORD PTR[K256]
- vpshufb xmm1,xmm1,xmm7
- vpshufb xmm2,xmm2,xmm7
- vpaddd xmm4,xmm0,XMMWORD PTR[rbp]
- vpshufb xmm3,xmm3,xmm7
- vpaddd xmm5,xmm1,XMMWORD PTR[32+rbp]
- vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
- vpaddd xmm7,xmm3,XMMWORD PTR[96+rbp]
- vmovdqa XMMWORD PTR[rsp],xmm4
- mov r14d,eax
- vmovdqa XMMWORD PTR[16+rsp],xmm5
- mov esi,ebx
- vmovdqa XMMWORD PTR[32+rsp],xmm6
- xor esi,ecx
- vmovdqa XMMWORD PTR[48+rsp],xmm7
- mov r13d,r8d
- jmp $L$avx_00_47
-
-ALIGN 16
-$L$avx_00_47::
- sub rbp,-16*2*4
- vmovdqu xmm9,XMMWORD PTR[r12]
- mov QWORD PTR[((64+0))+rsp],r12
- vpalignr xmm4,xmm1,xmm0,4
- shrd r13d,r13d,14
- mov eax,r14d
- mov r12d,r9d
- vpalignr xmm7,xmm3,xmm2,4
- xor r13d,r8d
- shrd r14d,r14d,9
- xor r12d,r10d
- vpsrld xmm6,xmm4,7
- shrd r13d,r13d,5
- xor r14d,eax
- and r12d,r8d
- vpaddd xmm0,xmm0,xmm7
- vpxor xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
- xor r13d,r8d
- add r11d,DWORD PTR[rsp]
- mov r15d,eax
- vpsrld xmm7,xmm4,3
- shrd r14d,r14d,11
- xor r12d,r10d
- xor r15d,ebx
- vpslld xmm5,xmm4,14
- shrd r13d,r13d,6
- add r11d,r12d
- and esi,r15d
- vpxor xmm4,xmm7,xmm6
- xor r14d,eax
- add r11d,r13d
- xor esi,ebx
- vpshufd xmm7,xmm3,250
- add edx,r11d
- shrd r14d,r14d,2
- add r11d,esi
- vpsrld xmm6,xmm6,11
- mov r13d,edx
- add r14d,r11d
- shrd r13d,r13d,14
- vpxor xmm4,xmm4,xmm5
- mov r11d,r14d
- mov r12d,r8d
- xor r13d,edx
- vpslld xmm5,xmm5,11
- shrd r14d,r14d,9
- xor r12d,r9d
- shrd r13d,r13d,5
- vpxor xmm4,xmm4,xmm6
- xor r14d,r11d
- and r12d,edx
- vpxor xmm9,xmm9,xmm8
- xor r13d,edx
- vpsrld xmm6,xmm7,10
- add r10d,DWORD PTR[4+rsp]
- mov esi,r11d
- shrd r14d,r14d,11
- vpxor xmm4,xmm4,xmm5
- xor r12d,r9d
- xor esi,eax
- shrd r13d,r13d,6
- vpsrlq xmm7,xmm7,17
- add r10d,r12d
- and r15d,esi
- xor r14d,r11d
- vpaddd xmm0,xmm0,xmm4
- add r10d,r13d
- xor r15d,eax
- add ecx,r10d
- vpxor xmm6,xmm6,xmm7
- shrd r14d,r14d,2
- add r10d,r15d
- mov r13d,ecx
- vpsrlq xmm7,xmm7,2
- add r14d,r10d
- shrd r13d,r13d,14
- mov r10d,r14d
- vpxor xmm6,xmm6,xmm7
- mov r12d,edx
- xor r13d,ecx
- shrd r14d,r14d,9
- vpshufd xmm6,xmm6,132
- xor r12d,r8d
- shrd r13d,r13d,5
- xor r14d,r10d
- vpsrldq xmm6,xmm6,8
- and r12d,ecx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
- xor r13d,ecx
- add r9d,DWORD PTR[8+rsp]
- vpaddd xmm0,xmm0,xmm6
- mov r15d,r10d
- shrd r14d,r14d,11
- xor r12d,r8d
- vpshufd xmm7,xmm0,80
- xor r15d,r11d
- shrd r13d,r13d,6
- add r9d,r12d
- vpsrld xmm6,xmm7,10
- and esi,r15d
- xor r14d,r10d
- add r9d,r13d
- vpsrlq xmm7,xmm7,17
- xor esi,r11d
- add ebx,r9d
- shrd r14d,r14d,2
- vpxor xmm6,xmm6,xmm7
- add r9d,esi
- mov r13d,ebx
- add r14d,r9d
- vpsrlq xmm7,xmm7,2
- shrd r13d,r13d,14
- mov r9d,r14d
- mov r12d,ecx
- vpxor xmm6,xmm6,xmm7
- xor r13d,ebx
- shrd r14d,r14d,9
- xor r12d,edx
- vpshufd xmm6,xmm6,232
- shrd r13d,r13d,5
- xor r14d,r9d
- and r12d,ebx
- vpslldq xmm6,xmm6,8
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
- xor r13d,ebx
- add r8d,DWORD PTR[12+rsp]
- mov esi,r9d
- vpaddd xmm0,xmm0,xmm6
- shrd r14d,r14d,11
- xor r12d,edx
- xor esi,r10d
- vpaddd xmm6,xmm0,XMMWORD PTR[rbp]
- shrd r13d,r13d,6
- add r8d,r12d
- and r15d,esi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- add eax,r8d
- shrd r14d,r14d,2
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- vmovdqa XMMWORD PTR[rsp],xmm6
- vpalignr xmm4,xmm2,xmm1,4
- shrd r13d,r13d,14
- mov r8d,r14d
- mov r12d,ebx
- vpalignr xmm7,xmm0,xmm3,4
- xor r13d,eax
- shrd r14d,r14d,9
- xor r12d,ecx
- vpsrld xmm6,xmm4,7
- shrd r13d,r13d,5
- xor r14d,r8d
- and r12d,eax
- vpaddd xmm1,xmm1,xmm7
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
- xor r13d,eax
- add edx,DWORD PTR[16+rsp]
- mov r15d,r8d
- vpsrld xmm7,xmm4,3
- shrd r14d,r14d,11
- xor r12d,ecx
- xor r15d,r9d
- vpslld xmm5,xmm4,14
- shrd r13d,r13d,6
- add edx,r12d
- and esi,r15d
- vpxor xmm4,xmm7,xmm6
- xor r14d,r8d
- add edx,r13d
- xor esi,r9d
- vpshufd xmm7,xmm0,250
- add r11d,edx
- shrd r14d,r14d,2
- add edx,esi
- vpsrld xmm6,xmm6,11
- mov r13d,r11d
- add r14d,edx
- shrd r13d,r13d,14
- vpxor xmm4,xmm4,xmm5
- mov edx,r14d
- mov r12d,eax
- xor r13d,r11d
- vpslld xmm5,xmm5,11
- shrd r14d,r14d,9
- xor r12d,ebx
- shrd r13d,r13d,5
- vpxor xmm4,xmm4,xmm6
- xor r14d,edx
- and r12d,r11d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
- xor r13d,r11d
- vpsrld xmm6,xmm7,10
- add ecx,DWORD PTR[20+rsp]
- mov esi,edx
- shrd r14d,r14d,11
- vpxor xmm4,xmm4,xmm5
- xor r12d,ebx
- xor esi,r8d
- shrd r13d,r13d,6
- vpsrlq xmm7,xmm7,17
- add ecx,r12d
- and r15d,esi
- xor r14d,edx
- vpaddd xmm1,xmm1,xmm4
- add ecx,r13d
- xor r15d,r8d
- add r10d,ecx
- vpxor xmm6,xmm6,xmm7
- shrd r14d,r14d,2
- add ecx,r15d
- mov r13d,r10d
- vpsrlq xmm7,xmm7,2
- add r14d,ecx
- shrd r13d,r13d,14
- mov ecx,r14d
- vpxor xmm6,xmm6,xmm7
- mov r12d,r11d
- xor r13d,r10d
- shrd r14d,r14d,9
- vpshufd xmm6,xmm6,132
- xor r12d,eax
- shrd r13d,r13d,5
- xor r14d,ecx
- vpsrldq xmm6,xmm6,8
- and r12d,r10d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
- xor r13d,r10d
- add ebx,DWORD PTR[24+rsp]
- vpaddd xmm1,xmm1,xmm6
- mov r15d,ecx
- shrd r14d,r14d,11
- xor r12d,eax
- vpshufd xmm7,xmm1,80
- xor r15d,edx
- shrd r13d,r13d,6
- add ebx,r12d
- vpsrld xmm6,xmm7,10
- and esi,r15d
- xor r14d,ecx
- add ebx,r13d
- vpsrlq xmm7,xmm7,17
- xor esi,edx
- add r9d,ebx
- shrd r14d,r14d,2
- vpxor xmm6,xmm6,xmm7
- add ebx,esi
- mov r13d,r9d
- add r14d,ebx
- vpsrlq xmm7,xmm7,2
- shrd r13d,r13d,14
- mov ebx,r14d
- mov r12d,r10d
- vpxor xmm6,xmm6,xmm7
- xor r13d,r9d
- shrd r14d,r14d,9
- xor r12d,r11d
- vpshufd xmm6,xmm6,232
- shrd r13d,r13d,5
- xor r14d,ebx
- and r12d,r9d
- vpslldq xmm6,xmm6,8
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
- xor r13d,r9d
- add eax,DWORD PTR[28+rsp]
- mov esi,ebx
- vpaddd xmm1,xmm1,xmm6
- shrd r14d,r14d,11
- xor r12d,r11d
- xor esi,ecx
- vpaddd xmm6,xmm1,XMMWORD PTR[32+rbp]
- shrd r13d,r13d,6
- add eax,r12d
- and r15d,esi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- add r8d,eax
- shrd r14d,r14d,2
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- vmovdqa XMMWORD PTR[16+rsp],xmm6
- vpalignr xmm4,xmm3,xmm2,4
- shrd r13d,r13d,14
- mov eax,r14d
- mov r12d,r9d
- vpalignr xmm7,xmm1,xmm0,4
- xor r13d,r8d
- shrd r14d,r14d,9
- xor r12d,r10d
- vpsrld xmm6,xmm4,7
- shrd r13d,r13d,5
- xor r14d,eax
- and r12d,r8d
- vpaddd xmm2,xmm2,xmm7
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
- xor r13d,r8d
- add r11d,DWORD PTR[32+rsp]
- mov r15d,eax
- vpsrld xmm7,xmm4,3
- shrd r14d,r14d,11
- xor r12d,r10d
- xor r15d,ebx
- vpslld xmm5,xmm4,14
- shrd r13d,r13d,6
- add r11d,r12d
- and esi,r15d
- vpxor xmm4,xmm7,xmm6
- xor r14d,eax
- add r11d,r13d
- xor esi,ebx
- vpshufd xmm7,xmm1,250
- add edx,r11d
- shrd r14d,r14d,2
- add r11d,esi
- vpsrld xmm6,xmm6,11
- mov r13d,edx
- add r14d,r11d
- shrd r13d,r13d,14
- vpxor xmm4,xmm4,xmm5
- mov r11d,r14d
- mov r12d,r8d
- xor r13d,edx
- vpslld xmm5,xmm5,11
- shrd r14d,r14d,9
- xor r12d,r9d
- shrd r13d,r13d,5
- vpxor xmm4,xmm4,xmm6
- xor r14d,r11d
- and r12d,edx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
- xor r13d,edx
- vpsrld xmm6,xmm7,10
- add r10d,DWORD PTR[36+rsp]
- mov esi,r11d
- shrd r14d,r14d,11
- vpxor xmm4,xmm4,xmm5
- xor r12d,r9d
- xor esi,eax
- shrd r13d,r13d,6
- vpsrlq xmm7,xmm7,17
- add r10d,r12d
- and r15d,esi
- xor r14d,r11d
- vpaddd xmm2,xmm2,xmm4
- add r10d,r13d
- xor r15d,eax
- add ecx,r10d
- vpxor xmm6,xmm6,xmm7
- shrd r14d,r14d,2
- add r10d,r15d
- mov r13d,ecx
- vpsrlq xmm7,xmm7,2
- add r14d,r10d
- shrd r13d,r13d,14
- mov r10d,r14d
- vpxor xmm6,xmm6,xmm7
- mov r12d,edx
- xor r13d,ecx
- shrd r14d,r14d,9
- vpshufd xmm6,xmm6,132
- xor r12d,r8d
- shrd r13d,r13d,5
- xor r14d,r10d
- vpsrldq xmm6,xmm6,8
- and r12d,ecx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
- xor r13d,ecx
- add r9d,DWORD PTR[40+rsp]
- vpaddd xmm2,xmm2,xmm6
- mov r15d,r10d
- shrd r14d,r14d,11
- xor r12d,r8d
- vpshufd xmm7,xmm2,80
- xor r15d,r11d
- shrd r13d,r13d,6
- add r9d,r12d
- vpsrld xmm6,xmm7,10
- and esi,r15d
- xor r14d,r10d
- add r9d,r13d
- vpsrlq xmm7,xmm7,17
- xor esi,r11d
- add ebx,r9d
- shrd r14d,r14d,2
- vpxor xmm6,xmm6,xmm7
- add r9d,esi
- mov r13d,ebx
- add r14d,r9d
- vpsrlq xmm7,xmm7,2
- shrd r13d,r13d,14
- mov r9d,r14d
- mov r12d,ecx
- vpxor xmm6,xmm6,xmm7
- xor r13d,ebx
- shrd r14d,r14d,9
- xor r12d,edx
- vpshufd xmm6,xmm6,232
- shrd r13d,r13d,5
- xor r14d,r9d
- and r12d,ebx
- vpslldq xmm6,xmm6,8
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
- xor r13d,ebx
- add r8d,DWORD PTR[44+rsp]
- mov esi,r9d
- vpaddd xmm2,xmm2,xmm6
- shrd r14d,r14d,11
- xor r12d,edx
- xor esi,r10d
- vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
- shrd r13d,r13d,6
- add r8d,r12d
- and r15d,esi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- add eax,r8d
- shrd r14d,r14d,2
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- vmovdqa XMMWORD PTR[32+rsp],xmm6
- vpalignr xmm4,xmm0,xmm3,4
- shrd r13d,r13d,14
- mov r8d,r14d
- mov r12d,ebx
- vpalignr xmm7,xmm2,xmm1,4
- xor r13d,eax
- shrd r14d,r14d,9
- xor r12d,ecx
- vpsrld xmm6,xmm4,7
- shrd r13d,r13d,5
- xor r14d,r8d
- and r12d,eax
- vpaddd xmm3,xmm3,xmm7
- vpand xmm8,xmm11,xmm12
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
- xor r13d,eax
- add edx,DWORD PTR[48+rsp]
- mov r15d,r8d
- vpsrld xmm7,xmm4,3
- shrd r14d,r14d,11
- xor r12d,ecx
- xor r15d,r9d
- vpslld xmm5,xmm4,14
- shrd r13d,r13d,6
- add edx,r12d
- and esi,r15d
- vpxor xmm4,xmm7,xmm6
- xor r14d,r8d
- add edx,r13d
- xor esi,r9d
- vpshufd xmm7,xmm2,250
- add r11d,edx
- shrd r14d,r14d,2
- add edx,esi
- vpsrld xmm6,xmm6,11
- mov r13d,r11d
- add r14d,edx
- shrd r13d,r13d,14
- vpxor xmm4,xmm4,xmm5
- mov edx,r14d
- mov r12d,eax
- xor r13d,r11d
- vpslld xmm5,xmm5,11
- shrd r14d,r14d,9
- xor r12d,ebx
- shrd r13d,r13d,5
- vpxor xmm4,xmm4,xmm6
- xor r14d,edx
- and r12d,r11d
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
- xor r13d,r11d
- vpsrld xmm6,xmm7,10
- add ecx,DWORD PTR[52+rsp]
- mov esi,edx
- shrd r14d,r14d,11
- vpxor xmm4,xmm4,xmm5
- xor r12d,ebx
- xor esi,r8d
- shrd r13d,r13d,6
- vpsrlq xmm7,xmm7,17
- add ecx,r12d
- and r15d,esi
- xor r14d,edx
- vpaddd xmm3,xmm3,xmm4
- add ecx,r13d
- xor r15d,r8d
- add r10d,ecx
- vpxor xmm6,xmm6,xmm7
- shrd r14d,r14d,2
- add ecx,r15d
- mov r13d,r10d
- vpsrlq xmm7,xmm7,2
- add r14d,ecx
- shrd r13d,r13d,14
- mov ecx,r14d
- vpxor xmm6,xmm6,xmm7
- mov r12d,r11d
- xor r13d,r10d
- shrd r14d,r14d,9
- vpshufd xmm6,xmm6,132
- xor r12d,eax
- shrd r13d,r13d,5
- xor r14d,ecx
- vpsrldq xmm6,xmm6,8
- and r12d,r10d
- vpand xmm11,xmm11,xmm13
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
- xor r13d,r10d
- add ebx,DWORD PTR[56+rsp]
- vpaddd xmm3,xmm3,xmm6
- mov r15d,ecx
- shrd r14d,r14d,11
- xor r12d,eax
- vpshufd xmm7,xmm3,80
- xor r15d,edx
- shrd r13d,r13d,6
- add ebx,r12d
- vpsrld xmm6,xmm7,10
- and esi,r15d
- xor r14d,ecx
- add ebx,r13d
- vpsrlq xmm7,xmm7,17
- xor esi,edx
- add r9d,ebx
- shrd r14d,r14d,2
- vpxor xmm6,xmm6,xmm7
- add ebx,esi
- mov r13d,r9d
- add r14d,ebx
- vpsrlq xmm7,xmm7,2
- shrd r13d,r13d,14
- mov ebx,r14d
- mov r12d,r10d
- vpxor xmm6,xmm6,xmm7
- xor r13d,r9d
- shrd r14d,r14d,9
- xor r12d,r11d
- vpshufd xmm6,xmm6,232
- shrd r13d,r13d,5
- xor r14d,ebx
- and r12d,r9d
- vpslldq xmm6,xmm6,8
- vpor xmm8,xmm8,xmm11
- vaesenclast xmm11,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
- xor r13d,r9d
- add eax,DWORD PTR[60+rsp]
- mov esi,ebx
- vpaddd xmm3,xmm3,xmm6
- shrd r14d,r14d,11
- xor r12d,r11d
- xor esi,ecx
- vpaddd xmm6,xmm3,XMMWORD PTR[96+rbp]
- shrd r13d,r13d,6
- add eax,r12d
- and r15d,esi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- add r8d,eax
- shrd r14d,r14d,2
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- vmovdqa XMMWORD PTR[48+rsp],xmm6
- mov r12,QWORD PTR[((64+0))+rsp]
- vpand xmm11,xmm11,xmm14
- mov r15,QWORD PTR[((64+8))+rsp]
- vpor xmm8,xmm8,xmm11
- vmovdqu XMMWORD PTR[r12*1+r15],xmm8
- lea r12,QWORD PTR[16+r12]
- cmp BYTE PTR[131+rbp],0
- jne $L$avx_00_47
- vmovdqu xmm9,XMMWORD PTR[r12]
- mov QWORD PTR[((64+0))+rsp],r12
- shrd r13d,r13d,14
- mov eax,r14d
- mov r12d,r9d
- xor r13d,r8d
- shrd r14d,r14d,9
- xor r12d,r10d
- shrd r13d,r13d,5
- xor r14d,eax
- and r12d,r8d
- vpxor xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
- xor r13d,r8d
- add r11d,DWORD PTR[rsp]
- mov r15d,eax
- shrd r14d,r14d,11
- xor r12d,r10d
- xor r15d,ebx
- shrd r13d,r13d,6
- add r11d,r12d
- and esi,r15d
- xor r14d,eax
- add r11d,r13d
- xor esi,ebx
- add edx,r11d
- shrd r14d,r14d,2
- add r11d,esi
- mov r13d,edx
- add r14d,r11d
- shrd r13d,r13d,14
- mov r11d,r14d
- mov r12d,r8d
- xor r13d,edx
- shrd r14d,r14d,9
- xor r12d,r9d
- shrd r13d,r13d,5
- xor r14d,r11d
- and r12d,edx
- vpxor xmm9,xmm9,xmm8
- xor r13d,edx
- add r10d,DWORD PTR[4+rsp]
- mov esi,r11d
- shrd r14d,r14d,11
- xor r12d,r9d
- xor esi,eax
- shrd r13d,r13d,6
- add r10d,r12d
- and r15d,esi
- xor r14d,r11d
- add r10d,r13d
- xor r15d,eax
- add ecx,r10d
- shrd r14d,r14d,2
- add r10d,r15d
- mov r13d,ecx
- add r14d,r10d
- shrd r13d,r13d,14
- mov r10d,r14d
- mov r12d,edx
- xor r13d,ecx
- shrd r14d,r14d,9
- xor r12d,r8d
- shrd r13d,r13d,5
- xor r14d,r10d
- and r12d,ecx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
- xor r13d,ecx
- add r9d,DWORD PTR[8+rsp]
- mov r15d,r10d
- shrd r14d,r14d,11
- xor r12d,r8d
- xor r15d,r11d
- shrd r13d,r13d,6
- add r9d,r12d
- and esi,r15d
- xor r14d,r10d
- add r9d,r13d
- xor esi,r11d
- add ebx,r9d
- shrd r14d,r14d,2
- add r9d,esi
- mov r13d,ebx
- add r14d,r9d
- shrd r13d,r13d,14
- mov r9d,r14d
- mov r12d,ecx
- xor r13d,ebx
- shrd r14d,r14d,9
- xor r12d,edx
- shrd r13d,r13d,5
- xor r14d,r9d
- and r12d,ebx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
- xor r13d,ebx
- add r8d,DWORD PTR[12+rsp]
- mov esi,r9d
- shrd r14d,r14d,11
- xor r12d,edx
- xor esi,r10d
- shrd r13d,r13d,6
- add r8d,r12d
- and r15d,esi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- add eax,r8d
- shrd r14d,r14d,2
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- shrd r13d,r13d,14
- mov r8d,r14d
- mov r12d,ebx
- xor r13d,eax
- shrd r14d,r14d,9
- xor r12d,ecx
- shrd r13d,r13d,5
- xor r14d,r8d
- and r12d,eax
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
- xor r13d,eax
- add edx,DWORD PTR[16+rsp]
- mov r15d,r8d
- shrd r14d,r14d,11
- xor r12d,ecx
- xor r15d,r9d
- shrd r13d,r13d,6
- add edx,r12d
- and esi,r15d
- xor r14d,r8d
- add edx,r13d
- xor esi,r9d
- add r11d,edx
- shrd r14d,r14d,2
- add edx,esi
- mov r13d,r11d
- add r14d,edx
- shrd r13d,r13d,14
- mov edx,r14d
- mov r12d,eax
- xor r13d,r11d
- shrd r14d,r14d,9
- xor r12d,ebx
- shrd r13d,r13d,5
- xor r14d,edx
- and r12d,r11d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
- xor r13d,r11d
- add ecx,DWORD PTR[20+rsp]
- mov esi,edx
- shrd r14d,r14d,11
- xor r12d,ebx
- xor esi,r8d
- shrd r13d,r13d,6
- add ecx,r12d
- and r15d,esi
- xor r14d,edx
- add ecx,r13d
- xor r15d,r8d
- add r10d,ecx
- shrd r14d,r14d,2
- add ecx,r15d
- mov r13d,r10d
- add r14d,ecx
- shrd r13d,r13d,14
- mov ecx,r14d
- mov r12d,r11d
- xor r13d,r10d
- shrd r14d,r14d,9
- xor r12d,eax
- shrd r13d,r13d,5
- xor r14d,ecx
- and r12d,r10d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
- xor r13d,r10d
- add ebx,DWORD PTR[24+rsp]
- mov r15d,ecx
- shrd r14d,r14d,11
- xor r12d,eax
- xor r15d,edx
- shrd r13d,r13d,6
- add ebx,r12d
- and esi,r15d
- xor r14d,ecx
- add ebx,r13d
- xor esi,edx
- add r9d,ebx
- shrd r14d,r14d,2
- add ebx,esi
- mov r13d,r9d
- add r14d,ebx
- shrd r13d,r13d,14
- mov ebx,r14d
- mov r12d,r10d
- xor r13d,r9d
- shrd r14d,r14d,9
- xor r12d,r11d
- shrd r13d,r13d,5
- xor r14d,ebx
- and r12d,r9d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
- xor r13d,r9d
- add eax,DWORD PTR[28+rsp]
- mov esi,ebx
- shrd r14d,r14d,11
- xor r12d,r11d
- xor esi,ecx
- shrd r13d,r13d,6
- add eax,r12d
- and r15d,esi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- add r8d,eax
- shrd r14d,r14d,2
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- shrd r13d,r13d,14
- mov eax,r14d
- mov r12d,r9d
- xor r13d,r8d
- shrd r14d,r14d,9
- xor r12d,r10d
- shrd r13d,r13d,5
- xor r14d,eax
- and r12d,r8d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
- xor r13d,r8d
- add r11d,DWORD PTR[32+rsp]
- mov r15d,eax
- shrd r14d,r14d,11
- xor r12d,r10d
- xor r15d,ebx
- shrd r13d,r13d,6
- add r11d,r12d
- and esi,r15d
- xor r14d,eax
- add r11d,r13d
- xor esi,ebx
- add edx,r11d
- shrd r14d,r14d,2
- add r11d,esi
- mov r13d,edx
- add r14d,r11d
- shrd r13d,r13d,14
- mov r11d,r14d
- mov r12d,r8d
- xor r13d,edx
- shrd r14d,r14d,9
- xor r12d,r9d
- shrd r13d,r13d,5
- xor r14d,r11d
- and r12d,edx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
- xor r13d,edx
- add r10d,DWORD PTR[36+rsp]
- mov esi,r11d
- shrd r14d,r14d,11
- xor r12d,r9d
- xor esi,eax
- shrd r13d,r13d,6
- add r10d,r12d
- and r15d,esi
- xor r14d,r11d
- add r10d,r13d
- xor r15d,eax
- add ecx,r10d
- shrd r14d,r14d,2
- add r10d,r15d
- mov r13d,ecx
- add r14d,r10d
- shrd r13d,r13d,14
- mov r10d,r14d
- mov r12d,edx
- xor r13d,ecx
- shrd r14d,r14d,9
- xor r12d,r8d
- shrd r13d,r13d,5
- xor r14d,r10d
- and r12d,ecx
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
- xor r13d,ecx
- add r9d,DWORD PTR[40+rsp]
- mov r15d,r10d
- shrd r14d,r14d,11
- xor r12d,r8d
- xor r15d,r11d
- shrd r13d,r13d,6
- add r9d,r12d
- and esi,r15d
- xor r14d,r10d
- add r9d,r13d
- xor esi,r11d
- add ebx,r9d
- shrd r14d,r14d,2
- add r9d,esi
- mov r13d,ebx
- add r14d,r9d
- shrd r13d,r13d,14
- mov r9d,r14d
- mov r12d,ecx
- xor r13d,ebx
- shrd r14d,r14d,9
- xor r12d,edx
- shrd r13d,r13d,5
- xor r14d,r9d
- and r12d,ebx
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
- xor r13d,ebx
- add r8d,DWORD PTR[44+rsp]
- mov esi,r9d
- shrd r14d,r14d,11
- xor r12d,edx
- xor esi,r10d
- shrd r13d,r13d,6
- add r8d,r12d
- and r15d,esi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- add eax,r8d
- shrd r14d,r14d,2
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- shrd r13d,r13d,14
- mov r8d,r14d
- mov r12d,ebx
- xor r13d,eax
- shrd r14d,r14d,9
- xor r12d,ecx
- shrd r13d,r13d,5
- xor r14d,r8d
- and r12d,eax
- vpand xmm8,xmm11,xmm12
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
- xor r13d,eax
- add edx,DWORD PTR[48+rsp]
- mov r15d,r8d
- shrd r14d,r14d,11
- xor r12d,ecx
- xor r15d,r9d
- shrd r13d,r13d,6
- add edx,r12d
- and esi,r15d
- xor r14d,r8d
- add edx,r13d
- xor esi,r9d
- add r11d,edx
- shrd r14d,r14d,2
- add edx,esi
- mov r13d,r11d
- add r14d,edx
- shrd r13d,r13d,14
- mov edx,r14d
- mov r12d,eax
- xor r13d,r11d
- shrd r14d,r14d,9
- xor r12d,ebx
- shrd r13d,r13d,5
- xor r14d,edx
- and r12d,r11d
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
- xor r13d,r11d
- add ecx,DWORD PTR[52+rsp]
- mov esi,edx
- shrd r14d,r14d,11
- xor r12d,ebx
- xor esi,r8d
- shrd r13d,r13d,6
- add ecx,r12d
- and r15d,esi
- xor r14d,edx
- add ecx,r13d
- xor r15d,r8d
- add r10d,ecx
- shrd r14d,r14d,2
- add ecx,r15d
- mov r13d,r10d
- add r14d,ecx
- shrd r13d,r13d,14
- mov ecx,r14d
- mov r12d,r11d
- xor r13d,r10d
- shrd r14d,r14d,9
- xor r12d,eax
- shrd r13d,r13d,5
- xor r14d,ecx
- and r12d,r10d
- vpand xmm11,xmm11,xmm13
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
- xor r13d,r10d
- add ebx,DWORD PTR[56+rsp]
- mov r15d,ecx
- shrd r14d,r14d,11
- xor r12d,eax
- xor r15d,edx
- shrd r13d,r13d,6
- add ebx,r12d
- and esi,r15d
- xor r14d,ecx
- add ebx,r13d
- xor esi,edx
- add r9d,ebx
- shrd r14d,r14d,2
- add ebx,esi
- mov r13d,r9d
- add r14d,ebx
- shrd r13d,r13d,14
- mov ebx,r14d
- mov r12d,r10d
- xor r13d,r9d
- shrd r14d,r14d,9
- xor r12d,r11d
- shrd r13d,r13d,5
- xor r14d,ebx
- and r12d,r9d
- vpor xmm8,xmm8,xmm11
- vaesenclast xmm11,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
- xor r13d,r9d
- add eax,DWORD PTR[60+rsp]
- mov esi,ebx
- shrd r14d,r14d,11
- xor r12d,r11d
- xor esi,ecx
- shrd r13d,r13d,6
- add eax,r12d
- and r15d,esi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- add r8d,eax
- shrd r14d,r14d,2
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- mov r12,QWORD PTR[((64+0))+rsp]
- mov r13,QWORD PTR[((64+8))+rsp]
- mov r15,QWORD PTR[((64+40))+rsp]
- mov rsi,QWORD PTR[((64+48))+rsp]
-
- vpand xmm11,xmm11,xmm14
- mov eax,r14d
- vpor xmm8,xmm8,xmm11
- vmovdqu XMMWORD PTR[r13*1+r12],xmm8
- lea r12,QWORD PTR[16+r12]
-
- add eax,DWORD PTR[r15]
- add ebx,DWORD PTR[4+r15]
- add ecx,DWORD PTR[8+r15]
- add edx,DWORD PTR[12+r15]
- add r8d,DWORD PTR[16+r15]
- add r9d,DWORD PTR[20+r15]
- add r10d,DWORD PTR[24+r15]
- add r11d,DWORD PTR[28+r15]
-
- cmp r12,QWORD PTR[((64+16))+rsp]
-
- mov DWORD PTR[r15],eax
- mov DWORD PTR[4+r15],ebx
- mov DWORD PTR[8+r15],ecx
- mov DWORD PTR[12+r15],edx
- mov DWORD PTR[16+r15],r8d
- mov DWORD PTR[20+r15],r9d
- mov DWORD PTR[24+r15],r10d
- mov DWORD PTR[28+r15],r11d
- jb $L$loop_avx
-
- mov r8,QWORD PTR[((64+32))+rsp]
- mov rsi,QWORD PTR[120+rsp]
-
- vmovdqu XMMWORD PTR[r8],xmm8
- vzeroall
- movaps xmm6,XMMWORD PTR[128+rsp]
- movaps xmm7,XMMWORD PTR[144+rsp]
- movaps xmm8,XMMWORD PTR[160+rsp]
- movaps xmm9,XMMWORD PTR[176+rsp]
- movaps xmm10,XMMWORD PTR[192+rsp]
- movaps xmm11,XMMWORD PTR[208+rsp]
- movaps xmm12,XMMWORD PTR[224+rsp]
- movaps xmm13,XMMWORD PTR[240+rsp]
- movaps xmm14,XMMWORD PTR[256+rsp]
- movaps xmm15,XMMWORD PTR[272+rsp]
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue_avx::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_cbc_sha256_enc_avx::
-aesni_cbc_sha256_enc_avx ENDP
-
-ALIGN 64
-aesni_cbc_sha256_enc_avx2 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_cbc_sha256_enc_avx2::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
-$L$avx2_shortcut::
- mov r10,QWORD PTR[56+rsp]
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,736
- and rsp,-256*4
- add rsp,448
-
- shl rdx,6
- sub rsi,rdi
- sub r10,rdi
- add rdx,rdi
-
-
-
- mov QWORD PTR[((64+16))+rsp],rdx
-
- mov QWORD PTR[((64+32))+rsp],r8
- mov QWORD PTR[((64+40))+rsp],r9
- mov QWORD PTR[((64+48))+rsp],r10
- mov QWORD PTR[120+rsp],rax
-
- movaps XMMWORD PTR[128+rsp],xmm6
- movaps XMMWORD PTR[144+rsp],xmm7
- movaps XMMWORD PTR[160+rsp],xmm8
- movaps XMMWORD PTR[176+rsp],xmm9
- movaps XMMWORD PTR[192+rsp],xmm10
- movaps XMMWORD PTR[208+rsp],xmm11
- movaps XMMWORD PTR[224+rsp],xmm12
- movaps XMMWORD PTR[240+rsp],xmm13
- movaps XMMWORD PTR[256+rsp],xmm14
- movaps XMMWORD PTR[272+rsp],xmm15
-$L$prologue_avx2::
- vzeroall
-
- mov r13,rdi
- vpinsrq xmm15,xmm15,rsi,1
- lea rdi,QWORD PTR[128+rcx]
- lea r12,QWORD PTR[((K256+544))]
- mov r14d,DWORD PTR[((240-128))+rdi]
- mov r15,r9
- mov rsi,r10
- vmovdqu xmm8,XMMWORD PTR[r8]
- lea r14,QWORD PTR[((-9))+r14]
-
- vmovdqa xmm14,XMMWORD PTR[r14*8+r12]
- vmovdqa xmm13,XMMWORD PTR[16+r14*8+r12]
- vmovdqa xmm12,XMMWORD PTR[32+r14*8+r12]
-
- sub r13,-16*4
- mov eax,DWORD PTR[r15]
- lea r12,QWORD PTR[r13*1+rsi]
- mov ebx,DWORD PTR[4+r15]
- cmp r13,rdx
- mov ecx,DWORD PTR[8+r15]
- cmove r12,rsp
- mov edx,DWORD PTR[12+r15]
- mov r8d,DWORD PTR[16+r15]
- mov r9d,DWORD PTR[20+r15]
- mov r10d,DWORD PTR[24+r15]
- mov r11d,DWORD PTR[28+r15]
- vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
- jmp $L$oop_avx2
-ALIGN 16
-$L$oop_avx2::
- vmovdqa ymm7,YMMWORD PTR[((K256+512))]
- vmovdqu xmm0,XMMWORD PTR[((-64+0))+r13*1+rsi]
- vmovdqu xmm1,XMMWORD PTR[((-64+16))+r13*1+rsi]
- vmovdqu xmm2,XMMWORD PTR[((-64+32))+r13*1+rsi]
- vmovdqu xmm3,XMMWORD PTR[((-64+48))+r13*1+rsi]
-
- vinserti128 ymm0,ymm0,XMMWORD PTR[r12],1
- vinserti128 ymm1,ymm1,XMMWORD PTR[16+r12],1
- vpshufb ymm0,ymm0,ymm7
- vinserti128 ymm2,ymm2,XMMWORD PTR[32+r12],1
- vpshufb ymm1,ymm1,ymm7
- vinserti128 ymm3,ymm3,XMMWORD PTR[48+r12],1
-
- lea rbp,QWORD PTR[K256]
- vpshufb ymm2,ymm2,ymm7
- lea r13,QWORD PTR[((-64))+r13]
- vpaddd ymm4,ymm0,YMMWORD PTR[rbp]
- vpshufb ymm3,ymm3,ymm7
- vpaddd ymm5,ymm1,YMMWORD PTR[32+rbp]
- vpaddd ymm6,ymm2,YMMWORD PTR[64+rbp]
- vpaddd ymm7,ymm3,YMMWORD PTR[96+rbp]
- vmovdqa YMMWORD PTR[rsp],ymm4
- xor r14d,r14d
- vmovdqa YMMWORD PTR[32+rsp],ymm5
- lea rsp,QWORD PTR[((-64))+rsp]
- mov esi,ebx
- vmovdqa YMMWORD PTR[rsp],ymm6
- xor esi,ecx
- vmovdqa YMMWORD PTR[32+rsp],ymm7
- mov r12d,r9d
- sub rbp,-16*2*4
- jmp $L$avx2_00_47
-
-ALIGN 16
-$L$avx2_00_47::
- vmovdqu xmm9,XMMWORD PTR[r13]
- vpinsrq xmm15,xmm15,r13,0
- lea rsp,QWORD PTR[((-64))+rsp]
- vpalignr ymm4,ymm1,ymm0,4
- add r11d,DWORD PTR[((0+128))+rsp]
- and r12d,r8d
- rorx r13d,r8d,25
- vpalignr ymm7,ymm3,ymm2,4
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- vpsrld ymm6,ymm4,7
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- vpaddd ymm0,ymm0,ymm7
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- vpsrld ymm7,ymm4,3
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- vpslld ymm5,ymm4,14
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- vpxor ymm4,ymm7,ymm6
- and esi,r15d
- vpxor xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
- xor r14d,r12d
- xor esi,ebx
- vpshufd ymm7,ymm3,250
- xor r14d,r13d
- lea r11d,DWORD PTR[rsi*1+r11]
- mov r12d,r8d
- vpsrld ymm6,ymm6,11
- add r10d,DWORD PTR[((4+128))+rsp]
- and r12d,edx
- rorx r13d,edx,25
- vpxor ymm4,ymm4,ymm5
- rorx esi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- vpslld ymm5,ymm5,11
- andn r12d,edx,r9d
- xor r13d,esi
- rorx r14d,edx,6
- vpxor ymm4,ymm4,ymm6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov esi,r11d
- vpsrld ymm6,ymm7,10
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor esi,eax
- vpxor ymm4,ymm4,ymm5
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- vpsrlq ymm7,ymm7,17
- and r15d,esi
- vpxor xmm9,xmm9,xmm8
- xor r14d,r12d
- xor r15d,eax
- vpaddd ymm0,ymm0,ymm4
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- vpxor ymm6,ymm6,ymm7
- add r9d,DWORD PTR[((8+128))+rsp]
- and r12d,ecx
- rorx r13d,ecx,25
- vpsrlq ymm7,ymm7,2
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- vpxor ymm6,ymm6,ymm7
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- vpshufd ymm6,ymm6,132
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- vpsrldq ymm6,ymm6,8
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- vpaddd ymm0,ymm0,ymm6
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- vpshufd ymm7,ymm0,80
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
- xor r14d,r12d
- xor esi,r11d
- vpsrld ymm6,ymm7,10
- xor r14d,r13d
- lea r9d,DWORD PTR[rsi*1+r9]
- mov r12d,ecx
- vpsrlq ymm7,ymm7,17
- add r8d,DWORD PTR[((12+128))+rsp]
- and r12d,ebx
- rorx r13d,ebx,25
- vpxor ymm6,ymm6,ymm7
- rorx esi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- vpsrlq ymm7,ymm7,2
- andn r12d,ebx,edx
- xor r13d,esi
- rorx r14d,ebx,6
- vpxor ymm6,ymm6,ymm7
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov esi,r9d
- vpshufd ymm6,ymm6,232
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor esi,r10d
- vpslldq ymm6,ymm6,8
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- vpaddd ymm0,ymm0,ymm6
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
- xor r14d,r12d
- xor r15d,r10d
- vpaddd ymm6,ymm0,YMMWORD PTR[rbp]
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- vmovdqa YMMWORD PTR[rsp],ymm6
- vpalignr ymm4,ymm2,ymm1,4
- add edx,DWORD PTR[((32+128))+rsp]
- and r12d,eax
- rorx r13d,eax,25
- vpalignr ymm7,ymm0,ymm3,4
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- vpsrld ymm6,ymm4,7
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- vpaddd ymm1,ymm1,ymm7
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- vpsrld ymm7,ymm4,3
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- vpslld ymm5,ymm4,14
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- vpxor ymm4,ymm7,ymm6
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
- xor r14d,r12d
- xor esi,r9d
- vpshufd ymm7,ymm0,250
- xor r14d,r13d
- lea edx,DWORD PTR[rsi*1+rdx]
- mov r12d,eax
- vpsrld ymm6,ymm6,11
- add ecx,DWORD PTR[((36+128))+rsp]
- and r12d,r11d
- rorx r13d,r11d,25
- vpxor ymm4,ymm4,ymm5
- rorx esi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- vpslld ymm5,ymm5,11
- andn r12d,r11d,ebx
- xor r13d,esi
- rorx r14d,r11d,6
- vpxor ymm4,ymm4,ymm6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov esi,edx
- vpsrld ymm6,ymm7,10
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor esi,r8d
- vpxor ymm4,ymm4,ymm5
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- vpsrlq ymm7,ymm7,17
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
- xor r14d,r12d
- xor r15d,r8d
- vpaddd ymm1,ymm1,ymm4
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- vpxor ymm6,ymm6,ymm7
- add ebx,DWORD PTR[((40+128))+rsp]
- and r12d,r10d
- rorx r13d,r10d,25
- vpsrlq ymm7,ymm7,2
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- vpxor ymm6,ymm6,ymm7
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- vpshufd ymm6,ymm6,132
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- vpsrldq ymm6,ymm6,8
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- vpaddd ymm1,ymm1,ymm6
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- vpshufd ymm7,ymm1,80
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
- xor r14d,r12d
- xor esi,edx
- vpsrld ymm6,ymm7,10
- xor r14d,r13d
- lea ebx,DWORD PTR[rsi*1+rbx]
- mov r12d,r10d
- vpsrlq ymm7,ymm7,17
- add eax,DWORD PTR[((44+128))+rsp]
- and r12d,r9d
- rorx r13d,r9d,25
- vpxor ymm6,ymm6,ymm7
- rorx esi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- vpsrlq ymm7,ymm7,2
- andn r12d,r9d,r11d
- xor r13d,esi
- rorx r14d,r9d,6
- vpxor ymm6,ymm6,ymm7
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov esi,ebx
- vpshufd ymm6,ymm6,232
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor esi,ecx
- vpslldq ymm6,ymm6,8
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- vpaddd ymm1,ymm1,ymm6
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
- xor r14d,r12d
- xor r15d,ecx
- vpaddd ymm6,ymm1,YMMWORD PTR[32+rbp]
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- vmovdqa YMMWORD PTR[32+rsp],ymm6
- lea rsp,QWORD PTR[((-64))+rsp]
- vpalignr ymm4,ymm3,ymm2,4
- add r11d,DWORD PTR[((0+128))+rsp]
- and r12d,r8d
- rorx r13d,r8d,25
- vpalignr ymm7,ymm1,ymm0,4
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- vpsrld ymm6,ymm4,7
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- vpaddd ymm2,ymm2,ymm7
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- vpsrld ymm7,ymm4,3
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- vpslld ymm5,ymm4,14
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- vpxor ymm4,ymm7,ymm6
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
- xor r14d,r12d
- xor esi,ebx
- vpshufd ymm7,ymm1,250
- xor r14d,r13d
- lea r11d,DWORD PTR[rsi*1+r11]
- mov r12d,r8d
- vpsrld ymm6,ymm6,11
- add r10d,DWORD PTR[((4+128))+rsp]
- and r12d,edx
- rorx r13d,edx,25
- vpxor ymm4,ymm4,ymm5
- rorx esi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- vpslld ymm5,ymm5,11
- andn r12d,edx,r9d
- xor r13d,esi
- rorx r14d,edx,6
- vpxor ymm4,ymm4,ymm6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov esi,r11d
- vpsrld ymm6,ymm7,10
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor esi,eax
- vpxor ymm4,ymm4,ymm5
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- vpsrlq ymm7,ymm7,17
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
- xor r14d,r12d
- xor r15d,eax
- vpaddd ymm2,ymm2,ymm4
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- vpxor ymm6,ymm6,ymm7
- add r9d,DWORD PTR[((8+128))+rsp]
- and r12d,ecx
- rorx r13d,ecx,25
- vpsrlq ymm7,ymm7,2
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- vpxor ymm6,ymm6,ymm7
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- vpshufd ymm6,ymm6,132
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- vpsrldq ymm6,ymm6,8
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- vpaddd ymm2,ymm2,ymm6
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- vpshufd ymm7,ymm2,80
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
- xor r14d,r12d
- xor esi,r11d
- vpsrld ymm6,ymm7,10
- xor r14d,r13d
- lea r9d,DWORD PTR[rsi*1+r9]
- mov r12d,ecx
- vpsrlq ymm7,ymm7,17
- add r8d,DWORD PTR[((12+128))+rsp]
- and r12d,ebx
- rorx r13d,ebx,25
- vpxor ymm6,ymm6,ymm7
- rorx esi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- vpsrlq ymm7,ymm7,2
- andn r12d,ebx,edx
- xor r13d,esi
- rorx r14d,ebx,6
- vpxor ymm6,ymm6,ymm7
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov esi,r9d
- vpshufd ymm6,ymm6,232
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor esi,r10d
- vpslldq ymm6,ymm6,8
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- vpaddd ymm2,ymm2,ymm6
- and r15d,esi
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
- xor r14d,r12d
- xor r15d,r10d
- vpaddd ymm6,ymm2,YMMWORD PTR[64+rbp]
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- vmovdqa YMMWORD PTR[rsp],ymm6
- vpalignr ymm4,ymm0,ymm3,4
- add edx,DWORD PTR[((32+128))+rsp]
- and r12d,eax
- rorx r13d,eax,25
- vpalignr ymm7,ymm2,ymm1,4
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- vpsrld ymm6,ymm4,7
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- vpaddd ymm3,ymm3,ymm7
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- vpsrld ymm7,ymm4,3
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- vpslld ymm5,ymm4,14
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- vpxor ymm4,ymm7,ymm6
- and esi,r15d
- vpand xmm8,xmm11,xmm12
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
- xor r14d,r12d
- xor esi,r9d
- vpshufd ymm7,ymm2,250
- xor r14d,r13d
- lea edx,DWORD PTR[rsi*1+rdx]
- mov r12d,eax
- vpsrld ymm6,ymm6,11
- add ecx,DWORD PTR[((36+128))+rsp]
- and r12d,r11d
- rorx r13d,r11d,25
- vpxor ymm4,ymm4,ymm5
- rorx esi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- vpslld ymm5,ymm5,11
- andn r12d,r11d,ebx
- xor r13d,esi
- rorx r14d,r11d,6
- vpxor ymm4,ymm4,ymm6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov esi,edx
- vpsrld ymm6,ymm7,10
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor esi,r8d
- vpxor ymm4,ymm4,ymm5
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- vpsrlq ymm7,ymm7,17
- and r15d,esi
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
- xor r14d,r12d
- xor r15d,r8d
- vpaddd ymm3,ymm3,ymm4
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- vpxor ymm6,ymm6,ymm7
- add ebx,DWORD PTR[((40+128))+rsp]
- and r12d,r10d
- rorx r13d,r10d,25
- vpsrlq ymm7,ymm7,2
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- vpxor ymm6,ymm6,ymm7
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- vpshufd ymm6,ymm6,132
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- vpsrldq ymm6,ymm6,8
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- vpaddd ymm3,ymm3,ymm6
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- vpshufd ymm7,ymm3,80
- and esi,r15d
- vpand xmm11,xmm11,xmm13
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
- xor r14d,r12d
- xor esi,edx
- vpsrld ymm6,ymm7,10
- xor r14d,r13d
- lea ebx,DWORD PTR[rsi*1+rbx]
- mov r12d,r10d
- vpsrlq ymm7,ymm7,17
- add eax,DWORD PTR[((44+128))+rsp]
- and r12d,r9d
- rorx r13d,r9d,25
- vpxor ymm6,ymm6,ymm7
- rorx esi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- vpsrlq ymm7,ymm7,2
- andn r12d,r9d,r11d
- xor r13d,esi
- rorx r14d,r9d,6
- vpxor ymm6,ymm6,ymm7
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov esi,ebx
- vpshufd ymm6,ymm6,232
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor esi,ecx
- vpslldq ymm6,ymm6,8
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- vpaddd ymm3,ymm3,ymm6
- and r15d,esi
- vpor xmm8,xmm8,xmm11
- vaesenclast xmm11,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
- xor r14d,r12d
- xor r15d,ecx
- vpaddd ymm6,ymm3,YMMWORD PTR[96+rbp]
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- vmovdqa YMMWORD PTR[32+rsp],ymm6
- vmovq r13,xmm15
- vpextrq r15,xmm15,1
- vpand xmm11,xmm11,xmm14
- vpor xmm8,xmm8,xmm11
- vmovdqu XMMWORD PTR[r13*1+r15],xmm8
- lea r13,QWORD PTR[16+r13]
- lea rbp,QWORD PTR[128+rbp]
- cmp BYTE PTR[3+rbp],0
- jne $L$avx2_00_47
- vmovdqu xmm9,XMMWORD PTR[r13]
- vpinsrq xmm15,xmm15,r13,0
- add r11d,DWORD PTR[((0+64))+rsp]
- and r12d,r8d
- rorx r13d,r8d,25
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- and esi,r15d
- vpxor xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
- xor r14d,r12d
- xor esi,ebx
- xor r14d,r13d
- lea r11d,DWORD PTR[rsi*1+r11]
- mov r12d,r8d
- add r10d,DWORD PTR[((4+64))+rsp]
- and r12d,edx
- rorx r13d,edx,25
- rorx esi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- andn r12d,edx,r9d
- xor r13d,esi
- rorx r14d,edx,6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov esi,r11d
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor esi,eax
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- and r15d,esi
- vpxor xmm9,xmm9,xmm8
- xor r14d,r12d
- xor r15d,eax
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- add r9d,DWORD PTR[((8+64))+rsp]
- and r12d,ecx
- rorx r13d,ecx,25
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
- xor r14d,r12d
- xor esi,r11d
- xor r14d,r13d
- lea r9d,DWORD PTR[rsi*1+r9]
- mov r12d,ecx
- add r8d,DWORD PTR[((12+64))+rsp]
- and r12d,ebx
- rorx r13d,ebx,25
- rorx esi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- andn r12d,ebx,edx
- xor r13d,esi
- rorx r14d,ebx,6
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov esi,r9d
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor esi,r10d
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
- xor r14d,r12d
- xor r15d,r10d
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- add edx,DWORD PTR[((32+64))+rsp]
- and r12d,eax
- rorx r13d,eax,25
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
- xor r14d,r12d
- xor esi,r9d
- xor r14d,r13d
- lea edx,DWORD PTR[rsi*1+rdx]
- mov r12d,eax
- add ecx,DWORD PTR[((36+64))+rsp]
- and r12d,r11d
- rorx r13d,r11d,25
- rorx esi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- andn r12d,r11d,ebx
- xor r13d,esi
- rorx r14d,r11d,6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov esi,edx
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor esi,r8d
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
- xor r14d,r12d
- xor r15d,r8d
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- add ebx,DWORD PTR[((40+64))+rsp]
- and r12d,r10d
- rorx r13d,r10d,25
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
- xor r14d,r12d
- xor esi,edx
- xor r14d,r13d
- lea ebx,DWORD PTR[rsi*1+rbx]
- mov r12d,r10d
- add eax,DWORD PTR[((44+64))+rsp]
- and r12d,r9d
- rorx r13d,r9d,25
- rorx esi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- andn r12d,r9d,r11d
- xor r13d,esi
- rorx r14d,r9d,6
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov esi,ebx
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor esi,ecx
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
- xor r14d,r12d
- xor r15d,ecx
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- add r11d,DWORD PTR[rsp]
- and r12d,r8d
- rorx r13d,r8d,25
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
- xor r14d,r12d
- xor esi,ebx
- xor r14d,r13d
- lea r11d,DWORD PTR[rsi*1+r11]
- mov r12d,r8d
- add r10d,DWORD PTR[4+rsp]
- and r12d,edx
- rorx r13d,edx,25
- rorx esi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- andn r12d,edx,r9d
- xor r13d,esi
- rorx r14d,edx,6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov esi,r11d
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor esi,eax
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
- xor r14d,r12d
- xor r15d,eax
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- add r9d,DWORD PTR[8+rsp]
- and r12d,ecx
- rorx r13d,ecx,25
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
- xor r14d,r12d
- xor esi,r11d
- xor r14d,r13d
- lea r9d,DWORD PTR[rsi*1+r9]
- mov r12d,ecx
- add r8d,DWORD PTR[12+rsp]
- and r12d,ebx
- rorx r13d,ebx,25
- rorx esi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- andn r12d,ebx,edx
- xor r13d,esi
- rorx r14d,ebx,6
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov esi,r9d
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor esi,r10d
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- and r15d,esi
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
- xor r14d,r12d
- xor r15d,r10d
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- add edx,DWORD PTR[32+rsp]
- and r12d,eax
- rorx r13d,eax,25
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- and esi,r15d
- vpand xmm8,xmm11,xmm12
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
- xor r14d,r12d
- xor esi,r9d
- xor r14d,r13d
- lea edx,DWORD PTR[rsi*1+rdx]
- mov r12d,eax
- add ecx,DWORD PTR[36+rsp]
- and r12d,r11d
- rorx r13d,r11d,25
- rorx esi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- andn r12d,r11d,ebx
- xor r13d,esi
- rorx r14d,r11d,6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov esi,edx
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor esi,r8d
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- and r15d,esi
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
- xor r14d,r12d
- xor r15d,r8d
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- add ebx,DWORD PTR[40+rsp]
- and r12d,r10d
- rorx r13d,r10d,25
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- and esi,r15d
- vpand xmm11,xmm11,xmm13
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
- xor r14d,r12d
- xor esi,edx
- xor r14d,r13d
- lea ebx,DWORD PTR[rsi*1+rbx]
- mov r12d,r10d
- add eax,DWORD PTR[44+rsp]
- and r12d,r9d
- rorx r13d,r9d,25
- rorx esi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- andn r12d,r9d,r11d
- xor r13d,esi
- rorx r14d,r9d,6
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov esi,ebx
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor esi,ecx
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- and r15d,esi
- vpor xmm8,xmm8,xmm11
- vaesenclast xmm11,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
- xor r14d,r12d
- xor r15d,ecx
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- vpextrq r12,xmm15,1
- vmovq r13,xmm15
- mov r15,QWORD PTR[552+rsp]
- add eax,r14d
- lea rbp,QWORD PTR[448+rsp]
-
- vpand xmm11,xmm11,xmm14
- vpor xmm8,xmm8,xmm11
- vmovdqu XMMWORD PTR[r13*1+r12],xmm8
- lea r13,QWORD PTR[16+r13]
-
- add eax,DWORD PTR[r15]
- add ebx,DWORD PTR[4+r15]
- add ecx,DWORD PTR[8+r15]
- add edx,DWORD PTR[12+r15]
- add r8d,DWORD PTR[16+r15]
- add r9d,DWORD PTR[20+r15]
- add r10d,DWORD PTR[24+r15]
- add r11d,DWORD PTR[28+r15]
-
- mov DWORD PTR[r15],eax
- mov DWORD PTR[4+r15],ebx
- mov DWORD PTR[8+r15],ecx
- mov DWORD PTR[12+r15],edx
- mov DWORD PTR[16+r15],r8d
- mov DWORD PTR[20+r15],r9d
- mov DWORD PTR[24+r15],r10d
- mov DWORD PTR[28+r15],r11d
-
- cmp r13,QWORD PTR[80+rbp]
- je $L$done_avx2
-
- xor r14d,r14d
- mov esi,ebx
- mov r12d,r9d
- xor esi,ecx
- jmp $L$ower_avx2
-ALIGN 16
-$L$ower_avx2::
- vmovdqu xmm9,XMMWORD PTR[r13]
- vpinsrq xmm15,xmm15,r13,0
- add r11d,DWORD PTR[((0+16))+rbp]
- and r12d,r8d
- rorx r13d,r8d,25
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- and esi,r15d
- vpxor xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
- xor r14d,r12d
- xor esi,ebx
- xor r14d,r13d
- lea r11d,DWORD PTR[rsi*1+r11]
- mov r12d,r8d
- add r10d,DWORD PTR[((4+16))+rbp]
- and r12d,edx
- rorx r13d,edx,25
- rorx esi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- andn r12d,edx,r9d
- xor r13d,esi
- rorx r14d,edx,6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov esi,r11d
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor esi,eax
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- and r15d,esi
- vpxor xmm9,xmm9,xmm8
- xor r14d,r12d
- xor r15d,eax
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- add r9d,DWORD PTR[((8+16))+rbp]
- and r12d,ecx
- rorx r13d,ecx,25
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
- xor r14d,r12d
- xor esi,r11d
- xor r14d,r13d
- lea r9d,DWORD PTR[rsi*1+r9]
- mov r12d,ecx
- add r8d,DWORD PTR[((12+16))+rbp]
- and r12d,ebx
- rorx r13d,ebx,25
- rorx esi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- andn r12d,ebx,edx
- xor r13d,esi
- rorx r14d,ebx,6
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov esi,r9d
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor esi,r10d
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
- xor r14d,r12d
- xor r15d,r10d
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- add edx,DWORD PTR[((32+16))+rbp]
- and r12d,eax
- rorx r13d,eax,25
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
- xor r14d,r12d
- xor esi,r9d
- xor r14d,r13d
- lea edx,DWORD PTR[rsi*1+rdx]
- mov r12d,eax
- add ecx,DWORD PTR[((36+16))+rbp]
- and r12d,r11d
- rorx r13d,r11d,25
- rorx esi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- andn r12d,r11d,ebx
- xor r13d,esi
- rorx r14d,r11d,6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov esi,edx
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor esi,r8d
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
- xor r14d,r12d
- xor r15d,r8d
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- add ebx,DWORD PTR[((40+16))+rbp]
- and r12d,r10d
- rorx r13d,r10d,25
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
- xor r14d,r12d
- xor esi,edx
- xor r14d,r13d
- lea ebx,DWORD PTR[rsi*1+rbx]
- mov r12d,r10d
- add eax,DWORD PTR[((44+16))+rbp]
- and r12d,r9d
- rorx r13d,r9d,25
- rorx esi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- andn r12d,r9d,r11d
- xor r13d,esi
- rorx r14d,r9d,6
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov esi,ebx
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor esi,ecx
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
- xor r14d,r12d
- xor r15d,ecx
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- lea rbp,QWORD PTR[((-64))+rbp]
- add r11d,DWORD PTR[((0+16))+rbp]
- and r12d,r8d
- rorx r13d,r8d,25
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
- xor r14d,r12d
- xor esi,ebx
- xor r14d,r13d
- lea r11d,DWORD PTR[rsi*1+r11]
- mov r12d,r8d
- add r10d,DWORD PTR[((4+16))+rbp]
- and r12d,edx
- rorx r13d,edx,25
- rorx esi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- andn r12d,edx,r9d
- xor r13d,esi
- rorx r14d,edx,6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov esi,r11d
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor esi,eax
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- and r15d,esi
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
- xor r14d,r12d
- xor r15d,eax
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- add r9d,DWORD PTR[((8+16))+rbp]
- and r12d,ecx
- rorx r13d,ecx,25
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- and esi,r15d
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
- xor r14d,r12d
- xor esi,r11d
- xor r14d,r13d
- lea r9d,DWORD PTR[rsi*1+r9]
- mov r12d,ecx
- add r8d,DWORD PTR[((12+16))+rbp]
- and r12d,ebx
- rorx r13d,ebx,25
- rorx esi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- andn r12d,ebx,edx
- xor r13d,esi
- rorx r14d,ebx,6
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov esi,r9d
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor esi,r10d
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- and r15d,esi
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
- xor r14d,r12d
- xor r15d,r10d
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- add edx,DWORD PTR[((32+16))+rbp]
- and r12d,eax
- rorx r13d,eax,25
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- and esi,r15d
- vpand xmm8,xmm11,xmm12
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
- xor r14d,r12d
- xor esi,r9d
- xor r14d,r13d
- lea edx,DWORD PTR[rsi*1+rdx]
- mov r12d,eax
- add ecx,DWORD PTR[((36+16))+rbp]
- and r12d,r11d
- rorx r13d,r11d,25
- rorx esi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- andn r12d,r11d,ebx
- xor r13d,esi
- rorx r14d,r11d,6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov esi,edx
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor esi,r8d
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- and r15d,esi
- vaesenclast xmm11,xmm9,xmm10
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
- xor r14d,r12d
- xor r15d,r8d
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- add ebx,DWORD PTR[((40+16))+rbp]
- and r12d,r10d
- rorx r13d,r10d,25
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- and esi,r15d
- vpand xmm11,xmm11,xmm13
- vaesenc xmm9,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
- xor r14d,r12d
- xor esi,edx
- xor r14d,r13d
- lea ebx,DWORD PTR[rsi*1+rbx]
- mov r12d,r10d
- add eax,DWORD PTR[((44+16))+rbp]
- and r12d,r9d
- rorx r13d,r9d,25
- rorx esi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- andn r12d,r9d,r11d
- xor r13d,esi
- rorx r14d,r9d,6
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov esi,ebx
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor esi,ecx
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- and r15d,esi
- vpor xmm8,xmm8,xmm11
- vaesenclast xmm11,xmm9,xmm10
- vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
- xor r14d,r12d
- xor r15d,ecx
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- vmovq r13,xmm15
- vpextrq r15,xmm15,1
- vpand xmm11,xmm11,xmm14
- vpor xmm8,xmm8,xmm11
- lea rbp,QWORD PTR[((-64))+rbp]
- vmovdqu XMMWORD PTR[r13*1+r15],xmm8
- lea r13,QWORD PTR[16+r13]
- cmp rbp,rsp
- jae $L$ower_avx2
-
- mov r15,QWORD PTR[552+rsp]
- lea r13,QWORD PTR[64+r13]
- mov rsi,QWORD PTR[560+rsp]
- add eax,r14d
- lea rsp,QWORD PTR[448+rsp]
-
- add eax,DWORD PTR[r15]
- add ebx,DWORD PTR[4+r15]
- add ecx,DWORD PTR[8+r15]
- add edx,DWORD PTR[12+r15]
- add r8d,DWORD PTR[16+r15]
- add r9d,DWORD PTR[20+r15]
- add r10d,DWORD PTR[24+r15]
- lea r12,QWORD PTR[r13*1+rsi]
- add r11d,DWORD PTR[28+r15]
-
- cmp r13,QWORD PTR[((64+16))+rsp]
-
- mov DWORD PTR[r15],eax
- cmove r12,rsp
- mov DWORD PTR[4+r15],ebx
- mov DWORD PTR[8+r15],ecx
- mov DWORD PTR[12+r15],edx
- mov DWORD PTR[16+r15],r8d
- mov DWORD PTR[20+r15],r9d
- mov DWORD PTR[24+r15],r10d
- mov DWORD PTR[28+r15],r11d
-
- jbe $L$oop_avx2
- lea rbp,QWORD PTR[rsp]
-
-
-
-
-$L$done_avx2::
- mov r8,QWORD PTR[((64+32))+rbp]
- mov rsi,QWORD PTR[((64+56))+rbp]
-
- vmovdqu XMMWORD PTR[r8],xmm8
- vzeroall
- movaps xmm6,XMMWORD PTR[128+rbp]
- movaps xmm7,XMMWORD PTR[144+rbp]
- movaps xmm8,XMMWORD PTR[160+rbp]
- movaps xmm9,XMMWORD PTR[176+rbp]
- movaps xmm10,XMMWORD PTR[192+rbp]
- movaps xmm11,XMMWORD PTR[208+rbp]
- movaps xmm12,XMMWORD PTR[224+rbp]
- movaps xmm13,XMMWORD PTR[240+rbp]
- movaps xmm14,XMMWORD PTR[256+rbp]
- movaps xmm15,XMMWORD PTR[272+rbp]
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue_avx2::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_cbc_sha256_enc_avx2::
-aesni_cbc_sha256_enc_avx2 ENDP
-
-ALIGN 32
-aesni_cbc_sha256_enc_shaext PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_cbc_sha256_enc_shaext::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov r10,QWORD PTR[56+rsp]
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[(-8-160)+rax],xmm6
- movaps XMMWORD PTR[(-8-144)+rax],xmm7
- movaps XMMWORD PTR[(-8-128)+rax],xmm8
- movaps XMMWORD PTR[(-8-112)+rax],xmm9
- movaps XMMWORD PTR[(-8-96)+rax],xmm10
- movaps XMMWORD PTR[(-8-80)+rax],xmm11
- movaps XMMWORD PTR[(-8-64)+rax],xmm12
- movaps XMMWORD PTR[(-8-48)+rax],xmm13
- movaps XMMWORD PTR[(-8-32)+rax],xmm14
- movaps XMMWORD PTR[(-8-16)+rax],xmm15
-$L$prologue_shaext::
- lea rax,QWORD PTR[((K256+128))]
- movdqu xmm1,XMMWORD PTR[r9]
- movdqu xmm2,XMMWORD PTR[16+r9]
- movdqa xmm3,XMMWORD PTR[((512-128))+rax]
-
- mov r11d,DWORD PTR[240+rcx]
- sub rsi,rdi
- movups xmm15,XMMWORD PTR[rcx]
- movups xmm6,XMMWORD PTR[r8]
- movups xmm4,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[112+rcx]
-
- pshufd xmm0,xmm1,01bh
- pshufd xmm1,xmm1,0b1h
- pshufd xmm2,xmm2,01bh
- movdqa xmm7,xmm3
-DB 102,15,58,15,202,8
- punpcklqdq xmm2,xmm0
-
- jmp $L$oop_shaext
-
-ALIGN 16
-$L$oop_shaext::
- movdqu xmm10,XMMWORD PTR[r10]
- movdqu xmm11,XMMWORD PTR[16+r10]
- movdqu xmm12,XMMWORD PTR[32+r10]
-DB 102,68,15,56,0,211
- movdqu xmm13,XMMWORD PTR[48+r10]
-
- movdqa xmm0,XMMWORD PTR[((0-128))+rax]
- paddd xmm0,xmm10
-DB 102,68,15,56,0,219
- movdqa xmm9,xmm2
- movdqa xmm8,xmm1
- movups xmm14,XMMWORD PTR[rdi]
- xorps xmm14,xmm15
- xorps xmm6,xmm14
- movups xmm5,XMMWORD PTR[((-80))+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movups xmm4,XMMWORD PTR[((-64))+rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,202
-
- movdqa xmm0,XMMWORD PTR[((32-128))+rax]
- paddd xmm0,xmm11
-DB 102,68,15,56,0,227
- lea r10,QWORD PTR[64+r10]
- movups xmm5,XMMWORD PTR[((-48))+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movups xmm4,XMMWORD PTR[((-32))+rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,202
-
- movdqa xmm0,XMMWORD PTR[((64-128))+rax]
- paddd xmm0,xmm12
-DB 102,68,15,56,0,235
-DB 69,15,56,204,211
- movups xmm5,XMMWORD PTR[((-16))+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm13
-DB 102,65,15,58,15,220,4
- paddd xmm10,xmm3
- movups xmm4,XMMWORD PTR[rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,202
-
- movdqa xmm0,XMMWORD PTR[((96-128))+rax]
- paddd xmm0,xmm13
-DB 69,15,56,205,213
-DB 69,15,56,204,220
- movups xmm5,XMMWORD PTR[16+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movups xmm4,XMMWORD PTR[32+rcx]
- aesenc xmm6,xmm5
- movdqa xmm3,xmm10
-DB 102,65,15,58,15,221,4
- paddd xmm11,xmm3
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((128-128))+rax]
- paddd xmm0,xmm10
-DB 69,15,56,205,218
-DB 69,15,56,204,229
- movups xmm5,XMMWORD PTR[48+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm11
-DB 102,65,15,58,15,218,4
- paddd xmm12,xmm3
- cmp r11d,11
- jb $L$aesenclast1
- movups xmm4,XMMWORD PTR[64+rcx]
- aesenc xmm6,xmm5
- movups xmm5,XMMWORD PTR[80+rcx]
- aesenc xmm6,xmm4
- je $L$aesenclast1
- movups xmm4,XMMWORD PTR[96+rcx]
- aesenc xmm6,xmm5
- movups xmm5,XMMWORD PTR[112+rcx]
- aesenc xmm6,xmm4
-$L$aesenclast1::
- aesenclast xmm6,xmm5
- movups xmm4,XMMWORD PTR[((16-112))+rcx]
- nop
-DB 15,56,203,202
- movups xmm14,XMMWORD PTR[16+rdi]
- xorps xmm14,xmm15
- movups XMMWORD PTR[rdi*1+rsi],xmm6
- xorps xmm6,xmm14
- movups xmm5,XMMWORD PTR[((-80))+rcx]
- aesenc xmm6,xmm4
- movdqa xmm0,XMMWORD PTR[((160-128))+rax]
- paddd xmm0,xmm11
-DB 69,15,56,205,227
-DB 69,15,56,204,234
- movups xmm4,XMMWORD PTR[((-64))+rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm12
-DB 102,65,15,58,15,219,4
- paddd xmm13,xmm3
- movups xmm5,XMMWORD PTR[((-48))+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((192-128))+rax]
- paddd xmm0,xmm12
-DB 69,15,56,205,236
-DB 69,15,56,204,211
- movups xmm4,XMMWORD PTR[((-32))+rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm13
-DB 102,65,15,58,15,220,4
- paddd xmm10,xmm3
- movups xmm5,XMMWORD PTR[((-16))+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((224-128))+rax]
- paddd xmm0,xmm13
-DB 69,15,56,205,213
-DB 69,15,56,204,220
- movups xmm4,XMMWORD PTR[rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm10
-DB 102,65,15,58,15,221,4
- paddd xmm11,xmm3
- movups xmm5,XMMWORD PTR[16+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((256-128))+rax]
- paddd xmm0,xmm10
-DB 69,15,56,205,218
-DB 69,15,56,204,229
- movups xmm4,XMMWORD PTR[32+rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm11
-DB 102,65,15,58,15,218,4
- paddd xmm12,xmm3
- movups xmm5,XMMWORD PTR[48+rcx]
- aesenc xmm6,xmm4
- cmp r11d,11
- jb $L$aesenclast2
- movups xmm4,XMMWORD PTR[64+rcx]
- aesenc xmm6,xmm5
- movups xmm5,XMMWORD PTR[80+rcx]
- aesenc xmm6,xmm4
- je $L$aesenclast2
- movups xmm4,XMMWORD PTR[96+rcx]
- aesenc xmm6,xmm5
- movups xmm5,XMMWORD PTR[112+rcx]
- aesenc xmm6,xmm4
-$L$aesenclast2::
- aesenclast xmm6,xmm5
- movups xmm4,XMMWORD PTR[((16-112))+rcx]
- nop
-DB 15,56,203,202
- movups xmm14,XMMWORD PTR[32+rdi]
- xorps xmm14,xmm15
- movups XMMWORD PTR[16+rdi*1+rsi],xmm6
- xorps xmm6,xmm14
- movups xmm5,XMMWORD PTR[((-80))+rcx]
- aesenc xmm6,xmm4
- movdqa xmm0,XMMWORD PTR[((288-128))+rax]
- paddd xmm0,xmm11
-DB 69,15,56,205,227
-DB 69,15,56,204,234
- movups xmm4,XMMWORD PTR[((-64))+rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm12
-DB 102,65,15,58,15,219,4
- paddd xmm13,xmm3
- movups xmm5,XMMWORD PTR[((-48))+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((320-128))+rax]
- paddd xmm0,xmm12
-DB 69,15,56,205,236
-DB 69,15,56,204,211
- movups xmm4,XMMWORD PTR[((-32))+rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm13
-DB 102,65,15,58,15,220,4
- paddd xmm10,xmm3
- movups xmm5,XMMWORD PTR[((-16))+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((352-128))+rax]
- paddd xmm0,xmm13
-DB 69,15,56,205,213
-DB 69,15,56,204,220
- movups xmm4,XMMWORD PTR[rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm10
-DB 102,65,15,58,15,221,4
- paddd xmm11,xmm3
- movups xmm5,XMMWORD PTR[16+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((384-128))+rax]
- paddd xmm0,xmm10
-DB 69,15,56,205,218
-DB 69,15,56,204,229
- movups xmm4,XMMWORD PTR[32+rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm11
-DB 102,65,15,58,15,218,4
- paddd xmm12,xmm3
- movups xmm5,XMMWORD PTR[48+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((416-128))+rax]
- paddd xmm0,xmm11
-DB 69,15,56,205,227
-DB 69,15,56,204,234
- cmp r11d,11
- jb $L$aesenclast3
- movups xmm4,XMMWORD PTR[64+rcx]
- aesenc xmm6,xmm5
- movups xmm5,XMMWORD PTR[80+rcx]
- aesenc xmm6,xmm4
- je $L$aesenclast3
- movups xmm4,XMMWORD PTR[96+rcx]
- aesenc xmm6,xmm5
- movups xmm5,XMMWORD PTR[112+rcx]
- aesenc xmm6,xmm4
-$L$aesenclast3::
- aesenclast xmm6,xmm5
- movups xmm4,XMMWORD PTR[((16-112))+rcx]
- nop
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm3,xmm12
-DB 102,65,15,58,15,219,4
- paddd xmm13,xmm3
- movups xmm14,XMMWORD PTR[48+rdi]
- xorps xmm14,xmm15
- movups XMMWORD PTR[32+rdi*1+rsi],xmm6
- xorps xmm6,xmm14
- movups xmm5,XMMWORD PTR[((-80))+rcx]
- aesenc xmm6,xmm4
- movups xmm4,XMMWORD PTR[((-64))+rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,202
-
- movdqa xmm0,XMMWORD PTR[((448-128))+rax]
- paddd xmm0,xmm12
-DB 69,15,56,205,236
- movdqa xmm3,xmm7
- movups xmm5,XMMWORD PTR[((-48))+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movups xmm4,XMMWORD PTR[((-32))+rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,202
-
- movdqa xmm0,XMMWORD PTR[((480-128))+rax]
- paddd xmm0,xmm13
- movups xmm5,XMMWORD PTR[((-16))+rcx]
- aesenc xmm6,xmm4
- movups xmm4,XMMWORD PTR[rcx]
- aesenc xmm6,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movups xmm5,XMMWORD PTR[16+rcx]
- aesenc xmm6,xmm4
-DB 15,56,203,202
-
- movups xmm4,XMMWORD PTR[32+rcx]
- aesenc xmm6,xmm5
- movups xmm5,XMMWORD PTR[48+rcx]
- aesenc xmm6,xmm4
- cmp r11d,11
- jb $L$aesenclast4
- movups xmm4,XMMWORD PTR[64+rcx]
- aesenc xmm6,xmm5
- movups xmm5,XMMWORD PTR[80+rcx]
- aesenc xmm6,xmm4
- je $L$aesenclast4
- movups xmm4,XMMWORD PTR[96+rcx]
- aesenc xmm6,xmm5
- movups xmm5,XMMWORD PTR[112+rcx]
- aesenc xmm6,xmm4
-$L$aesenclast4::
- aesenclast xmm6,xmm5
- movups xmm4,XMMWORD PTR[((16-112))+rcx]
- nop
-
- paddd xmm2,xmm9
- paddd xmm1,xmm8
-
- dec rdx
- movups XMMWORD PTR[48+rdi*1+rsi],xmm6
- lea rdi,QWORD PTR[64+rdi]
- jnz $L$oop_shaext
-
- pshufd xmm2,xmm2,0b1h
- pshufd xmm3,xmm1,01bh
- pshufd xmm1,xmm1,0b1h
- punpckhqdq xmm1,xmm2
-DB 102,15,58,15,211,8
-
- movups XMMWORD PTR[r8],xmm6
- movdqu XMMWORD PTR[r9],xmm1
- movdqu XMMWORD PTR[16+r9],xmm2
- movaps xmm6,XMMWORD PTR[rsp]
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps xmm10,XMMWORD PTR[64+rsp]
- movaps xmm11,XMMWORD PTR[80+rsp]
- movaps xmm12,XMMWORD PTR[96+rsp]
- movaps xmm13,XMMWORD PTR[112+rsp]
- movaps xmm14,XMMWORD PTR[128+rsp]
- movaps xmm15,XMMWORD PTR[144+rsp]
- lea rsp,QWORD PTR[((8+160))+rsp]
-$L$epilogue_shaext::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_cbc_sha256_enc_shaext::
-aesni_cbc_sha256_enc_shaext ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
- lea r10,QWORD PTR[aesni_cbc_sha256_enc_shaext]
- cmp rbx,r10
- jb $L$not_in_shaext
-
- lea rsi,QWORD PTR[rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
- lea rax,QWORD PTR[168+rax]
- jmp $L$in_prologue
-$L$not_in_shaext::
- lea r10,QWORD PTR[$L$avx2_shortcut]
- cmp rbx,r10
- jb $L$not_in_avx2
-
- and rax,-256*4
- add rax,448
-$L$not_in_avx2::
- mov rsi,rax
- mov rax,QWORD PTR[((64+56))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
- lea rsi,QWORD PTR[((64+64))+rsi]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
- DD imagerel $L$SEH_begin_aesni_cbc_sha256_enc_xop
- DD imagerel $L$SEH_end_aesni_cbc_sha256_enc_xop
- DD imagerel $L$SEH_info_aesni_cbc_sha256_enc_xop
-
- DD imagerel $L$SEH_begin_aesni_cbc_sha256_enc_avx
- DD imagerel $L$SEH_end_aesni_cbc_sha256_enc_avx
- DD imagerel $L$SEH_info_aesni_cbc_sha256_enc_avx
- DD imagerel $L$SEH_begin_aesni_cbc_sha256_enc_avx2
- DD imagerel $L$SEH_end_aesni_cbc_sha256_enc_avx2
- DD imagerel $L$SEH_info_aesni_cbc_sha256_enc_avx2
- DD imagerel $L$SEH_begin_aesni_cbc_sha256_enc_shaext
- DD imagerel $L$SEH_end_aesni_cbc_sha256_enc_shaext
- DD imagerel $L$SEH_info_aesni_cbc_sha256_enc_shaext
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_aesni_cbc_sha256_enc_xop::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue_xop,imagerel $L$epilogue_xop
-
-$L$SEH_info_aesni_cbc_sha256_enc_avx::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
-$L$SEH_info_aesni_cbc_sha256_enc_avx2::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue_avx2,imagerel $L$epilogue_avx2
-$L$SEH_info_aesni_cbc_sha256_enc_shaext::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue_shaext,imagerel $L$epilogue_shaext
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+PUBLIC aesni_cbc_sha256_enc
+
+ALIGN 16
+aesni_cbc_sha256_enc PROC PUBLIC
+
+ lea r11,QWORD PTR[OPENSSL_ia32cap_P]
+ mov eax,1
+ cmp rcx,0
+ je $L$probe
+ mov eax,DWORD PTR[r11]
+ mov r10,QWORD PTR[4+r11]
+ bt r10,61
+ jc aesni_cbc_sha256_enc_shaext
+ mov r11,r10
+ shr r11,32
+
+ test r10d,2048
+ jnz aesni_cbc_sha256_enc_xop
+ and r11d,296
+ cmp r11d,296
+ je aesni_cbc_sha256_enc_avx2
+ and r10d,268435456
+ jnz aesni_cbc_sha256_enc_avx
+ ud2
+ xor eax,eax
+ cmp rcx,0
+ je $L$probe
+ ud2
+$L$probe::
+ DB 0F3h,0C3h ;repret
+
+aesni_cbc_sha256_enc ENDP
+
+ALIGN 64
+
+K256::
+ DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
+ DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
+ DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
+ DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
+ DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
+ DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
+ DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
+ DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
+ DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
+ DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
+ DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
+ DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
+ DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
+ DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
+ DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
+ DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
+ DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
+ DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
+ DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
+ DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
+ DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
+ DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
+ DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
+ DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
+ DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
+ DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
+ DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
+ DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
+ DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
+ DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
+ DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
+ DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
+
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+ DD 0,0,0,0,0,0,0,0,-1,-1,-1,-1
+ DD 0,0,0,0,0,0,0,0
+DB 65,69,83,78,73,45,67,66,67,43,83,72,65,50,53,54
+DB 32,115,116,105,116,99,104,32,102,111,114,32,120,56,54,95
+DB 54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98
+DB 121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108
+DB 46,111,114,103,62,0
+ALIGN 64
+
+ALIGN 64
+aesni_cbc_sha256_enc_xop PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_cbc_sha256_enc_xop::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+$L$xop_shortcut::
+ mov r10,QWORD PTR[56+rsp]
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,288
+ and rsp,-64
+
+ shl rdx,6
+ sub rsi,rdi
+ sub r10,rdi
+ add rdx,rdi
+
+
+ mov QWORD PTR[((64+8))+rsp],rsi
+ mov QWORD PTR[((64+16))+rsp],rdx
+
+ mov QWORD PTR[((64+32))+rsp],r8
+ mov QWORD PTR[((64+40))+rsp],r9
+ mov QWORD PTR[((64+48))+rsp],r10
+ mov QWORD PTR[120+rsp],rax
+
+ movaps XMMWORD PTR[128+rsp],xmm6
+ movaps XMMWORD PTR[144+rsp],xmm7
+ movaps XMMWORD PTR[160+rsp],xmm8
+ movaps XMMWORD PTR[176+rsp],xmm9
+ movaps XMMWORD PTR[192+rsp],xmm10
+ movaps XMMWORD PTR[208+rsp],xmm11
+ movaps XMMWORD PTR[224+rsp],xmm12
+ movaps XMMWORD PTR[240+rsp],xmm13
+ movaps XMMWORD PTR[256+rsp],xmm14
+ movaps XMMWORD PTR[272+rsp],xmm15
+$L$prologue_xop::
+ vzeroall
+
+ mov r12,rdi
+ lea rdi,QWORD PTR[128+rcx]
+ lea r13,QWORD PTR[((K256+544))]
+ mov r14d,DWORD PTR[((240-128))+rdi]
+ mov r15,r9
+ mov rsi,r10
+ vmovdqu xmm8,XMMWORD PTR[r8]
+ sub r14,9
+
+ mov eax,DWORD PTR[r15]
+ mov ebx,DWORD PTR[4+r15]
+ mov ecx,DWORD PTR[8+r15]
+ mov edx,DWORD PTR[12+r15]
+ mov r8d,DWORD PTR[16+r15]
+ mov r9d,DWORD PTR[20+r15]
+ mov r10d,DWORD PTR[24+r15]
+ mov r11d,DWORD PTR[28+r15]
+
+ vmovdqa xmm14,XMMWORD PTR[r14*8+r13]
+ vmovdqa xmm13,XMMWORD PTR[16+r14*8+r13]
+ vmovdqa xmm12,XMMWORD PTR[32+r14*8+r13]
+ vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
+ jmp $L$loop_xop
+ALIGN 16
+$L$loop_xop::
+ vmovdqa xmm7,XMMWORD PTR[((K256+512))]
+ vmovdqu xmm0,XMMWORD PTR[r12*1+rsi]
+ vmovdqu xmm1,XMMWORD PTR[16+r12*1+rsi]
+ vmovdqu xmm2,XMMWORD PTR[32+r12*1+rsi]
+ vmovdqu xmm3,XMMWORD PTR[48+r12*1+rsi]
+ vpshufb xmm0,xmm0,xmm7
+ lea rbp,QWORD PTR[K256]
+ vpshufb xmm1,xmm1,xmm7
+ vpshufb xmm2,xmm2,xmm7
+ vpaddd xmm4,xmm0,XMMWORD PTR[rbp]
+ vpshufb xmm3,xmm3,xmm7
+ vpaddd xmm5,xmm1,XMMWORD PTR[32+rbp]
+ vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
+ vpaddd xmm7,xmm3,XMMWORD PTR[96+rbp]
+ vmovdqa XMMWORD PTR[rsp],xmm4
+ mov r14d,eax
+ vmovdqa XMMWORD PTR[16+rsp],xmm5
+ mov esi,ebx
+ vmovdqa XMMWORD PTR[32+rsp],xmm6
+ xor esi,ecx
+ vmovdqa XMMWORD PTR[48+rsp],xmm7
+ mov r13d,r8d
+ jmp $L$xop_00_47
+
+ALIGN 16
+$L$xop_00_47::
+ sub rbp,-16*2*4
+ vmovdqu xmm9,XMMWORD PTR[r12]
+ mov QWORD PTR[((64+0))+rsp],r12
+ vpalignr xmm4,xmm1,xmm0,4
+ ror r13d,14
+ mov eax,r14d
+ vpalignr xmm7,xmm3,xmm2,4
+ mov r12d,r9d
+ xor r13d,r8d
+DB 143,232,120,194,236,14
+ ror r14d,9
+ xor r12d,r10d
+ vpsrld xmm4,xmm4,3
+ ror r13d,5
+ xor r14d,eax
+ vpaddd xmm0,xmm0,xmm7
+ and r12d,r8d
+ vpxor xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
+ xor r13d,r8d
+ add r11d,DWORD PTR[rsp]
+ mov r15d,eax
+DB 143,232,120,194,245,11
+ ror r14d,11
+ xor r12d,r10d
+ vpxor xmm4,xmm4,xmm5
+ xor r15d,ebx
+ ror r13d,6
+ add r11d,r12d
+ and esi,r15d
+DB 143,232,120,194,251,13
+ xor r14d,eax
+ add r11d,r13d
+ vpxor xmm4,xmm4,xmm6
+ xor esi,ebx
+ add edx,r11d
+ vpsrld xmm6,xmm3,10
+ ror r14d,2
+ add r11d,esi
+ vpaddd xmm0,xmm0,xmm4
+ mov r13d,edx
+ add r14d,r11d
+DB 143,232,120,194,239,2
+ ror r13d,14
+ mov r11d,r14d
+ vpxor xmm7,xmm7,xmm6
+ mov r12d,r8d
+ xor r13d,edx
+ ror r14d,9
+ xor r12d,r9d
+ vpxor xmm7,xmm7,xmm5
+ ror r13d,5
+ xor r14d,r11d
+ and r12d,edx
+ vpxor xmm9,xmm9,xmm8
+ xor r13d,edx
+ vpsrldq xmm7,xmm7,8
+ add r10d,DWORD PTR[4+rsp]
+ mov esi,r11d
+ ror r14d,11
+ xor r12d,r9d
+ vpaddd xmm0,xmm0,xmm7
+ xor esi,eax
+ ror r13d,6
+ add r10d,r12d
+ and r15d,esi
+DB 143,232,120,194,248,13
+ xor r14d,r11d
+ add r10d,r13d
+ vpsrld xmm6,xmm0,10
+ xor r15d,eax
+ add ecx,r10d
+DB 143,232,120,194,239,2
+ ror r14d,2
+ add r10d,r15d
+ vpxor xmm7,xmm7,xmm6
+ mov r13d,ecx
+ add r14d,r10d
+ ror r13d,14
+ mov r10d,r14d
+ vpxor xmm7,xmm7,xmm5
+ mov r12d,edx
+ xor r13d,ecx
+ ror r14d,9
+ xor r12d,r8d
+ vpslldq xmm7,xmm7,8
+ ror r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
+ xor r13d,ecx
+ vpaddd xmm0,xmm0,xmm7
+ add r9d,DWORD PTR[8+rsp]
+ mov r15d,r10d
+ ror r14d,11
+ xor r12d,r8d
+ vpaddd xmm6,xmm0,XMMWORD PTR[rbp]
+ xor r15d,r11d
+ ror r13d,6
+ add r9d,r12d
+ and esi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ xor esi,r11d
+ add ebx,r9d
+ ror r14d,2
+ add r9d,esi
+ mov r13d,ebx
+ add r14d,r9d
+ ror r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ xor r13d,ebx
+ ror r14d,9
+ xor r12d,edx
+ ror r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
+ xor r13d,ebx
+ add r8d,DWORD PTR[12+rsp]
+ mov esi,r9d
+ ror r14d,11
+ xor r12d,edx
+ xor esi,r10d
+ ror r13d,6
+ add r8d,r12d
+ and r15d,esi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ add eax,r8d
+ ror r14d,2
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ vmovdqa XMMWORD PTR[rsp],xmm6
+ vpalignr xmm4,xmm2,xmm1,4
+ ror r13d,14
+ mov r8d,r14d
+ vpalignr xmm7,xmm0,xmm3,4
+ mov r12d,ebx
+ xor r13d,eax
+DB 143,232,120,194,236,14
+ ror r14d,9
+ xor r12d,ecx
+ vpsrld xmm4,xmm4,3
+ ror r13d,5
+ xor r14d,r8d
+ vpaddd xmm1,xmm1,xmm7
+ and r12d,eax
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
+ xor r13d,eax
+ add edx,DWORD PTR[16+rsp]
+ mov r15d,r8d
+DB 143,232,120,194,245,11
+ ror r14d,11
+ xor r12d,ecx
+ vpxor xmm4,xmm4,xmm5
+ xor r15d,r9d
+ ror r13d,6
+ add edx,r12d
+ and esi,r15d
+DB 143,232,120,194,248,13
+ xor r14d,r8d
+ add edx,r13d
+ vpxor xmm4,xmm4,xmm6
+ xor esi,r9d
+ add r11d,edx
+ vpsrld xmm6,xmm0,10
+ ror r14d,2
+ add edx,esi
+ vpaddd xmm1,xmm1,xmm4
+ mov r13d,r11d
+ add r14d,edx
+DB 143,232,120,194,239,2
+ ror r13d,14
+ mov edx,r14d
+ vpxor xmm7,xmm7,xmm6
+ mov r12d,eax
+ xor r13d,r11d
+ ror r14d,9
+ xor r12d,ebx
+ vpxor xmm7,xmm7,xmm5
+ ror r13d,5
+ xor r14d,edx
+ and r12d,r11d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
+ xor r13d,r11d
+ vpsrldq xmm7,xmm7,8
+ add ecx,DWORD PTR[20+rsp]
+ mov esi,edx
+ ror r14d,11
+ xor r12d,ebx
+ vpaddd xmm1,xmm1,xmm7
+ xor esi,r8d
+ ror r13d,6
+ add ecx,r12d
+ and r15d,esi
+DB 143,232,120,194,249,13
+ xor r14d,edx
+ add ecx,r13d
+ vpsrld xmm6,xmm1,10
+ xor r15d,r8d
+ add r10d,ecx
+DB 143,232,120,194,239,2
+ ror r14d,2
+ add ecx,r15d
+ vpxor xmm7,xmm7,xmm6
+ mov r13d,r10d
+ add r14d,ecx
+ ror r13d,14
+ mov ecx,r14d
+ vpxor xmm7,xmm7,xmm5
+ mov r12d,r11d
+ xor r13d,r10d
+ ror r14d,9
+ xor r12d,eax
+ vpslldq xmm7,xmm7,8
+ ror r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
+ xor r13d,r10d
+ vpaddd xmm1,xmm1,xmm7
+ add ebx,DWORD PTR[24+rsp]
+ mov r15d,ecx
+ ror r14d,11
+ xor r12d,eax
+ vpaddd xmm6,xmm1,XMMWORD PTR[32+rbp]
+ xor r15d,edx
+ ror r13d,6
+ add ebx,r12d
+ and esi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ xor esi,edx
+ add r9d,ebx
+ ror r14d,2
+ add ebx,esi
+ mov r13d,r9d
+ add r14d,ebx
+ ror r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ xor r13d,r9d
+ ror r14d,9
+ xor r12d,r11d
+ ror r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
+ xor r13d,r9d
+ add eax,DWORD PTR[28+rsp]
+ mov esi,ebx
+ ror r14d,11
+ xor r12d,r11d
+ xor esi,ecx
+ ror r13d,6
+ add eax,r12d
+ and r15d,esi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ add r8d,eax
+ ror r14d,2
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ vmovdqa XMMWORD PTR[16+rsp],xmm6
+ vpalignr xmm4,xmm3,xmm2,4
+ ror r13d,14
+ mov eax,r14d
+ vpalignr xmm7,xmm1,xmm0,4
+ mov r12d,r9d
+ xor r13d,r8d
+DB 143,232,120,194,236,14
+ ror r14d,9
+ xor r12d,r10d
+ vpsrld xmm4,xmm4,3
+ ror r13d,5
+ xor r14d,eax
+ vpaddd xmm2,xmm2,xmm7
+ and r12d,r8d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
+ xor r13d,r8d
+ add r11d,DWORD PTR[32+rsp]
+ mov r15d,eax
+DB 143,232,120,194,245,11
+ ror r14d,11
+ xor r12d,r10d
+ vpxor xmm4,xmm4,xmm5
+ xor r15d,ebx
+ ror r13d,6
+ add r11d,r12d
+ and esi,r15d
+DB 143,232,120,194,249,13
+ xor r14d,eax
+ add r11d,r13d
+ vpxor xmm4,xmm4,xmm6
+ xor esi,ebx
+ add edx,r11d
+ vpsrld xmm6,xmm1,10
+ ror r14d,2
+ add r11d,esi
+ vpaddd xmm2,xmm2,xmm4
+ mov r13d,edx
+ add r14d,r11d
+DB 143,232,120,194,239,2
+ ror r13d,14
+ mov r11d,r14d
+ vpxor xmm7,xmm7,xmm6
+ mov r12d,r8d
+ xor r13d,edx
+ ror r14d,9
+ xor r12d,r9d
+ vpxor xmm7,xmm7,xmm5
+ ror r13d,5
+ xor r14d,r11d
+ and r12d,edx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
+ xor r13d,edx
+ vpsrldq xmm7,xmm7,8
+ add r10d,DWORD PTR[36+rsp]
+ mov esi,r11d
+ ror r14d,11
+ xor r12d,r9d
+ vpaddd xmm2,xmm2,xmm7
+ xor esi,eax
+ ror r13d,6
+ add r10d,r12d
+ and r15d,esi
+DB 143,232,120,194,250,13
+ xor r14d,r11d
+ add r10d,r13d
+ vpsrld xmm6,xmm2,10
+ xor r15d,eax
+ add ecx,r10d
+DB 143,232,120,194,239,2
+ ror r14d,2
+ add r10d,r15d
+ vpxor xmm7,xmm7,xmm6
+ mov r13d,ecx
+ add r14d,r10d
+ ror r13d,14
+ mov r10d,r14d
+ vpxor xmm7,xmm7,xmm5
+ mov r12d,edx
+ xor r13d,ecx
+ ror r14d,9
+ xor r12d,r8d
+ vpslldq xmm7,xmm7,8
+ ror r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
+ xor r13d,ecx
+ vpaddd xmm2,xmm2,xmm7
+ add r9d,DWORD PTR[40+rsp]
+ mov r15d,r10d
+ ror r14d,11
+ xor r12d,r8d
+ vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
+ xor r15d,r11d
+ ror r13d,6
+ add r9d,r12d
+ and esi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ xor esi,r11d
+ add ebx,r9d
+ ror r14d,2
+ add r9d,esi
+ mov r13d,ebx
+ add r14d,r9d
+ ror r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ xor r13d,ebx
+ ror r14d,9
+ xor r12d,edx
+ ror r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
+ xor r13d,ebx
+ add r8d,DWORD PTR[44+rsp]
+ mov esi,r9d
+ ror r14d,11
+ xor r12d,edx
+ xor esi,r10d
+ ror r13d,6
+ add r8d,r12d
+ and r15d,esi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ add eax,r8d
+ ror r14d,2
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ vmovdqa XMMWORD PTR[32+rsp],xmm6
+ vpalignr xmm4,xmm0,xmm3,4
+ ror r13d,14
+ mov r8d,r14d
+ vpalignr xmm7,xmm2,xmm1,4
+ mov r12d,ebx
+ xor r13d,eax
+DB 143,232,120,194,236,14
+ ror r14d,9
+ xor r12d,ecx
+ vpsrld xmm4,xmm4,3
+ ror r13d,5
+ xor r14d,r8d
+ vpaddd xmm3,xmm3,xmm7
+ and r12d,eax
+ vpand xmm8,xmm11,xmm12
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
+ xor r13d,eax
+ add edx,DWORD PTR[48+rsp]
+ mov r15d,r8d
+DB 143,232,120,194,245,11
+ ror r14d,11
+ xor r12d,ecx
+ vpxor xmm4,xmm4,xmm5
+ xor r15d,r9d
+ ror r13d,6
+ add edx,r12d
+ and esi,r15d
+DB 143,232,120,194,250,13
+ xor r14d,r8d
+ add edx,r13d
+ vpxor xmm4,xmm4,xmm6
+ xor esi,r9d
+ add r11d,edx
+ vpsrld xmm6,xmm2,10
+ ror r14d,2
+ add edx,esi
+ vpaddd xmm3,xmm3,xmm4
+ mov r13d,r11d
+ add r14d,edx
+DB 143,232,120,194,239,2
+ ror r13d,14
+ mov edx,r14d
+ vpxor xmm7,xmm7,xmm6
+ mov r12d,eax
+ xor r13d,r11d
+ ror r14d,9
+ xor r12d,ebx
+ vpxor xmm7,xmm7,xmm5
+ ror r13d,5
+ xor r14d,edx
+ and r12d,r11d
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
+ xor r13d,r11d
+ vpsrldq xmm7,xmm7,8
+ add ecx,DWORD PTR[52+rsp]
+ mov esi,edx
+ ror r14d,11
+ xor r12d,ebx
+ vpaddd xmm3,xmm3,xmm7
+ xor esi,r8d
+ ror r13d,6
+ add ecx,r12d
+ and r15d,esi
+DB 143,232,120,194,251,13
+ xor r14d,edx
+ add ecx,r13d
+ vpsrld xmm6,xmm3,10
+ xor r15d,r8d
+ add r10d,ecx
+DB 143,232,120,194,239,2
+ ror r14d,2
+ add ecx,r15d
+ vpxor xmm7,xmm7,xmm6
+ mov r13d,r10d
+ add r14d,ecx
+ ror r13d,14
+ mov ecx,r14d
+ vpxor xmm7,xmm7,xmm5
+ mov r12d,r11d
+ xor r13d,r10d
+ ror r14d,9
+ xor r12d,eax
+ vpslldq xmm7,xmm7,8
+ ror r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ vpand xmm11,xmm11,xmm13
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
+ xor r13d,r10d
+ vpaddd xmm3,xmm3,xmm7
+ add ebx,DWORD PTR[56+rsp]
+ mov r15d,ecx
+ ror r14d,11
+ xor r12d,eax
+ vpaddd xmm6,xmm3,XMMWORD PTR[96+rbp]
+ xor r15d,edx
+ ror r13d,6
+ add ebx,r12d
+ and esi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ xor esi,edx
+ add r9d,ebx
+ ror r14d,2
+ add ebx,esi
+ mov r13d,r9d
+ add r14d,ebx
+ ror r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ xor r13d,r9d
+ ror r14d,9
+ xor r12d,r11d
+ ror r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ vpor xmm8,xmm8,xmm11
+ vaesenclast xmm11,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
+ xor r13d,r9d
+ add eax,DWORD PTR[60+rsp]
+ mov esi,ebx
+ ror r14d,11
+ xor r12d,r11d
+ xor esi,ecx
+ ror r13d,6
+ add eax,r12d
+ and r15d,esi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ add r8d,eax
+ ror r14d,2
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ vmovdqa XMMWORD PTR[48+rsp],xmm6
+ mov r12,QWORD PTR[((64+0))+rsp]
+ vpand xmm11,xmm11,xmm14
+ mov r15,QWORD PTR[((64+8))+rsp]
+ vpor xmm8,xmm8,xmm11
+ vmovdqu XMMWORD PTR[r12*1+r15],xmm8
+ lea r12,QWORD PTR[16+r12]
+ cmp BYTE PTR[131+rbp],0
+ jne $L$xop_00_47
+ vmovdqu xmm9,XMMWORD PTR[r12]
+ mov QWORD PTR[((64+0))+rsp],r12
+ ror r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ xor r13d,r8d
+ ror r14d,9
+ xor r12d,r10d
+ ror r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ vpxor xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
+ xor r13d,r8d
+ add r11d,DWORD PTR[rsp]
+ mov r15d,eax
+ ror r14d,11
+ xor r12d,r10d
+ xor r15d,ebx
+ ror r13d,6
+ add r11d,r12d
+ and esi,r15d
+ xor r14d,eax
+ add r11d,r13d
+ xor esi,ebx
+ add edx,r11d
+ ror r14d,2
+ add r11d,esi
+ mov r13d,edx
+ add r14d,r11d
+ ror r13d,14
+ mov r11d,r14d
+ mov r12d,r8d
+ xor r13d,edx
+ ror r14d,9
+ xor r12d,r9d
+ ror r13d,5
+ xor r14d,r11d
+ and r12d,edx
+ vpxor xmm9,xmm9,xmm8
+ xor r13d,edx
+ add r10d,DWORD PTR[4+rsp]
+ mov esi,r11d
+ ror r14d,11
+ xor r12d,r9d
+ xor esi,eax
+ ror r13d,6
+ add r10d,r12d
+ and r15d,esi
+ xor r14d,r11d
+ add r10d,r13d
+ xor r15d,eax
+ add ecx,r10d
+ ror r14d,2
+ add r10d,r15d
+ mov r13d,ecx
+ add r14d,r10d
+ ror r13d,14
+ mov r10d,r14d
+ mov r12d,edx
+ xor r13d,ecx
+ ror r14d,9
+ xor r12d,r8d
+ ror r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
+ xor r13d,ecx
+ add r9d,DWORD PTR[8+rsp]
+ mov r15d,r10d
+ ror r14d,11
+ xor r12d,r8d
+ xor r15d,r11d
+ ror r13d,6
+ add r9d,r12d
+ and esi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ xor esi,r11d
+ add ebx,r9d
+ ror r14d,2
+ add r9d,esi
+ mov r13d,ebx
+ add r14d,r9d
+ ror r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ xor r13d,ebx
+ ror r14d,9
+ xor r12d,edx
+ ror r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
+ xor r13d,ebx
+ add r8d,DWORD PTR[12+rsp]
+ mov esi,r9d
+ ror r14d,11
+ xor r12d,edx
+ xor esi,r10d
+ ror r13d,6
+ add r8d,r12d
+ and r15d,esi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ add eax,r8d
+ ror r14d,2
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ ror r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ xor r13d,eax
+ ror r14d,9
+ xor r12d,ecx
+ ror r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
+ xor r13d,eax
+ add edx,DWORD PTR[16+rsp]
+ mov r15d,r8d
+ ror r14d,11
+ xor r12d,ecx
+ xor r15d,r9d
+ ror r13d,6
+ add edx,r12d
+ and esi,r15d
+ xor r14d,r8d
+ add edx,r13d
+ xor esi,r9d
+ add r11d,edx
+ ror r14d,2
+ add edx,esi
+ mov r13d,r11d
+ add r14d,edx
+ ror r13d,14
+ mov edx,r14d
+ mov r12d,eax
+ xor r13d,r11d
+ ror r14d,9
+ xor r12d,ebx
+ ror r13d,5
+ xor r14d,edx
+ and r12d,r11d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
+ xor r13d,r11d
+ add ecx,DWORD PTR[20+rsp]
+ mov esi,edx
+ ror r14d,11
+ xor r12d,ebx
+ xor esi,r8d
+ ror r13d,6
+ add ecx,r12d
+ and r15d,esi
+ xor r14d,edx
+ add ecx,r13d
+ xor r15d,r8d
+ add r10d,ecx
+ ror r14d,2
+ add ecx,r15d
+ mov r13d,r10d
+ add r14d,ecx
+ ror r13d,14
+ mov ecx,r14d
+ mov r12d,r11d
+ xor r13d,r10d
+ ror r14d,9
+ xor r12d,eax
+ ror r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
+ xor r13d,r10d
+ add ebx,DWORD PTR[24+rsp]
+ mov r15d,ecx
+ ror r14d,11
+ xor r12d,eax
+ xor r15d,edx
+ ror r13d,6
+ add ebx,r12d
+ and esi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ xor esi,edx
+ add r9d,ebx
+ ror r14d,2
+ add ebx,esi
+ mov r13d,r9d
+ add r14d,ebx
+ ror r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ xor r13d,r9d
+ ror r14d,9
+ xor r12d,r11d
+ ror r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
+ xor r13d,r9d
+ add eax,DWORD PTR[28+rsp]
+ mov esi,ebx
+ ror r14d,11
+ xor r12d,r11d
+ xor esi,ecx
+ ror r13d,6
+ add eax,r12d
+ and r15d,esi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ add r8d,eax
+ ror r14d,2
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ ror r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ xor r13d,r8d
+ ror r14d,9
+ xor r12d,r10d
+ ror r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
+ xor r13d,r8d
+ add r11d,DWORD PTR[32+rsp]
+ mov r15d,eax
+ ror r14d,11
+ xor r12d,r10d
+ xor r15d,ebx
+ ror r13d,6
+ add r11d,r12d
+ and esi,r15d
+ xor r14d,eax
+ add r11d,r13d
+ xor esi,ebx
+ add edx,r11d
+ ror r14d,2
+ add r11d,esi
+ mov r13d,edx
+ add r14d,r11d
+ ror r13d,14
+ mov r11d,r14d
+ mov r12d,r8d
+ xor r13d,edx
+ ror r14d,9
+ xor r12d,r9d
+ ror r13d,5
+ xor r14d,r11d
+ and r12d,edx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
+ xor r13d,edx
+ add r10d,DWORD PTR[36+rsp]
+ mov esi,r11d
+ ror r14d,11
+ xor r12d,r9d
+ xor esi,eax
+ ror r13d,6
+ add r10d,r12d
+ and r15d,esi
+ xor r14d,r11d
+ add r10d,r13d
+ xor r15d,eax
+ add ecx,r10d
+ ror r14d,2
+ add r10d,r15d
+ mov r13d,ecx
+ add r14d,r10d
+ ror r13d,14
+ mov r10d,r14d
+ mov r12d,edx
+ xor r13d,ecx
+ ror r14d,9
+ xor r12d,r8d
+ ror r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
+ xor r13d,ecx
+ add r9d,DWORD PTR[40+rsp]
+ mov r15d,r10d
+ ror r14d,11
+ xor r12d,r8d
+ xor r15d,r11d
+ ror r13d,6
+ add r9d,r12d
+ and esi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ xor esi,r11d
+ add ebx,r9d
+ ror r14d,2
+ add r9d,esi
+ mov r13d,ebx
+ add r14d,r9d
+ ror r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ xor r13d,ebx
+ ror r14d,9
+ xor r12d,edx
+ ror r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
+ xor r13d,ebx
+ add r8d,DWORD PTR[44+rsp]
+ mov esi,r9d
+ ror r14d,11
+ xor r12d,edx
+ xor esi,r10d
+ ror r13d,6
+ add r8d,r12d
+ and r15d,esi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ add eax,r8d
+ ror r14d,2
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ ror r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ xor r13d,eax
+ ror r14d,9
+ xor r12d,ecx
+ ror r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ vpand xmm8,xmm11,xmm12
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
+ xor r13d,eax
+ add edx,DWORD PTR[48+rsp]
+ mov r15d,r8d
+ ror r14d,11
+ xor r12d,ecx
+ xor r15d,r9d
+ ror r13d,6
+ add edx,r12d
+ and esi,r15d
+ xor r14d,r8d
+ add edx,r13d
+ xor esi,r9d
+ add r11d,edx
+ ror r14d,2
+ add edx,esi
+ mov r13d,r11d
+ add r14d,edx
+ ror r13d,14
+ mov edx,r14d
+ mov r12d,eax
+ xor r13d,r11d
+ ror r14d,9
+ xor r12d,ebx
+ ror r13d,5
+ xor r14d,edx
+ and r12d,r11d
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
+ xor r13d,r11d
+ add ecx,DWORD PTR[52+rsp]
+ mov esi,edx
+ ror r14d,11
+ xor r12d,ebx
+ xor esi,r8d
+ ror r13d,6
+ add ecx,r12d
+ and r15d,esi
+ xor r14d,edx
+ add ecx,r13d
+ xor r15d,r8d
+ add r10d,ecx
+ ror r14d,2
+ add ecx,r15d
+ mov r13d,r10d
+ add r14d,ecx
+ ror r13d,14
+ mov ecx,r14d
+ mov r12d,r11d
+ xor r13d,r10d
+ ror r14d,9
+ xor r12d,eax
+ ror r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ vpand xmm11,xmm11,xmm13
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
+ xor r13d,r10d
+ add ebx,DWORD PTR[56+rsp]
+ mov r15d,ecx
+ ror r14d,11
+ xor r12d,eax
+ xor r15d,edx
+ ror r13d,6
+ add ebx,r12d
+ and esi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ xor esi,edx
+ add r9d,ebx
+ ror r14d,2
+ add ebx,esi
+ mov r13d,r9d
+ add r14d,ebx
+ ror r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ xor r13d,r9d
+ ror r14d,9
+ xor r12d,r11d
+ ror r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ vpor xmm8,xmm8,xmm11
+ vaesenclast xmm11,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
+ xor r13d,r9d
+ add eax,DWORD PTR[60+rsp]
+ mov esi,ebx
+ ror r14d,11
+ xor r12d,r11d
+ xor esi,ecx
+ ror r13d,6
+ add eax,r12d
+ and r15d,esi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ add r8d,eax
+ ror r14d,2
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ mov r12,QWORD PTR[((64+0))+rsp]
+ mov r13,QWORD PTR[((64+8))+rsp]
+ mov r15,QWORD PTR[((64+40))+rsp]
+ mov rsi,QWORD PTR[((64+48))+rsp]
+
+ vpand xmm11,xmm11,xmm14
+ mov eax,r14d
+ vpor xmm8,xmm8,xmm11
+ vmovdqu XMMWORD PTR[r13*1+r12],xmm8
+ lea r12,QWORD PTR[16+r12]
+
+ add eax,DWORD PTR[r15]
+ add ebx,DWORD PTR[4+r15]
+ add ecx,DWORD PTR[8+r15]
+ add edx,DWORD PTR[12+r15]
+ add r8d,DWORD PTR[16+r15]
+ add r9d,DWORD PTR[20+r15]
+ add r10d,DWORD PTR[24+r15]
+ add r11d,DWORD PTR[28+r15]
+
+ cmp r12,QWORD PTR[((64+16))+rsp]
+
+ mov DWORD PTR[r15],eax
+ mov DWORD PTR[4+r15],ebx
+ mov DWORD PTR[8+r15],ecx
+ mov DWORD PTR[12+r15],edx
+ mov DWORD PTR[16+r15],r8d
+ mov DWORD PTR[20+r15],r9d
+ mov DWORD PTR[24+r15],r10d
+ mov DWORD PTR[28+r15],r11d
+
+ jb $L$loop_xop
+
+ mov r8,QWORD PTR[((64+32))+rsp]
+ mov rsi,QWORD PTR[120+rsp]
+
+ vmovdqu XMMWORD PTR[r8],xmm8
+ vzeroall
+ movaps xmm6,XMMWORD PTR[128+rsp]
+ movaps xmm7,XMMWORD PTR[144+rsp]
+ movaps xmm8,XMMWORD PTR[160+rsp]
+ movaps xmm9,XMMWORD PTR[176+rsp]
+ movaps xmm10,XMMWORD PTR[192+rsp]
+ movaps xmm11,XMMWORD PTR[208+rsp]
+ movaps xmm12,XMMWORD PTR[224+rsp]
+ movaps xmm13,XMMWORD PTR[240+rsp]
+ movaps xmm14,XMMWORD PTR[256+rsp]
+ movaps xmm15,XMMWORD PTR[272+rsp]
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue_xop::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_cbc_sha256_enc_xop::
+aesni_cbc_sha256_enc_xop ENDP
+
+ALIGN 64
+aesni_cbc_sha256_enc_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_cbc_sha256_enc_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+$L$avx_shortcut::
+ mov r10,QWORD PTR[56+rsp]
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,288
+ and rsp,-64
+
+ shl rdx,6
+ sub rsi,rdi
+ sub r10,rdi
+ add rdx,rdi
+
+
+ mov QWORD PTR[((64+8))+rsp],rsi
+ mov QWORD PTR[((64+16))+rsp],rdx
+
+ mov QWORD PTR[((64+32))+rsp],r8
+ mov QWORD PTR[((64+40))+rsp],r9
+ mov QWORD PTR[((64+48))+rsp],r10
+ mov QWORD PTR[120+rsp],rax
+
+ movaps XMMWORD PTR[128+rsp],xmm6
+ movaps XMMWORD PTR[144+rsp],xmm7
+ movaps XMMWORD PTR[160+rsp],xmm8
+ movaps XMMWORD PTR[176+rsp],xmm9
+ movaps XMMWORD PTR[192+rsp],xmm10
+ movaps XMMWORD PTR[208+rsp],xmm11
+ movaps XMMWORD PTR[224+rsp],xmm12
+ movaps XMMWORD PTR[240+rsp],xmm13
+ movaps XMMWORD PTR[256+rsp],xmm14
+ movaps XMMWORD PTR[272+rsp],xmm15
+$L$prologue_avx::
+ vzeroall
+
+ mov r12,rdi
+ lea rdi,QWORD PTR[128+rcx]
+ lea r13,QWORD PTR[((K256+544))]
+ mov r14d,DWORD PTR[((240-128))+rdi]
+ mov r15,r9
+ mov rsi,r10
+ vmovdqu xmm8,XMMWORD PTR[r8]
+ sub r14,9
+
+ mov eax,DWORD PTR[r15]
+ mov ebx,DWORD PTR[4+r15]
+ mov ecx,DWORD PTR[8+r15]
+ mov edx,DWORD PTR[12+r15]
+ mov r8d,DWORD PTR[16+r15]
+ mov r9d,DWORD PTR[20+r15]
+ mov r10d,DWORD PTR[24+r15]
+ mov r11d,DWORD PTR[28+r15]
+
+ vmovdqa xmm14,XMMWORD PTR[r14*8+r13]
+ vmovdqa xmm13,XMMWORD PTR[16+r14*8+r13]
+ vmovdqa xmm12,XMMWORD PTR[32+r14*8+r13]
+ vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
+ jmp $L$loop_avx
+ALIGN 16
+$L$loop_avx::
+ vmovdqa xmm7,XMMWORD PTR[((K256+512))]
+ vmovdqu xmm0,XMMWORD PTR[r12*1+rsi]
+ vmovdqu xmm1,XMMWORD PTR[16+r12*1+rsi]
+ vmovdqu xmm2,XMMWORD PTR[32+r12*1+rsi]
+ vmovdqu xmm3,XMMWORD PTR[48+r12*1+rsi]
+ vpshufb xmm0,xmm0,xmm7
+ lea rbp,QWORD PTR[K256]
+ vpshufb xmm1,xmm1,xmm7
+ vpshufb xmm2,xmm2,xmm7
+ vpaddd xmm4,xmm0,XMMWORD PTR[rbp]
+ vpshufb xmm3,xmm3,xmm7
+ vpaddd xmm5,xmm1,XMMWORD PTR[32+rbp]
+ vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
+ vpaddd xmm7,xmm3,XMMWORD PTR[96+rbp]
+ vmovdqa XMMWORD PTR[rsp],xmm4
+ mov r14d,eax
+ vmovdqa XMMWORD PTR[16+rsp],xmm5
+ mov esi,ebx
+ vmovdqa XMMWORD PTR[32+rsp],xmm6
+ xor esi,ecx
+ vmovdqa XMMWORD PTR[48+rsp],xmm7
+ mov r13d,r8d
+ jmp $L$avx_00_47
+
+ALIGN 16
+$L$avx_00_47::
+ sub rbp,-16*2*4
+ vmovdqu xmm9,XMMWORD PTR[r12]
+ mov QWORD PTR[((64+0))+rsp],r12
+ vpalignr xmm4,xmm1,xmm0,4
+ shrd r13d,r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ vpalignr xmm7,xmm3,xmm2,4
+ xor r13d,r8d
+ shrd r14d,r14d,9
+ xor r12d,r10d
+ vpsrld xmm6,xmm4,7
+ shrd r13d,r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ vpaddd xmm0,xmm0,xmm7
+ vpxor xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
+ xor r13d,r8d
+ add r11d,DWORD PTR[rsp]
+ mov r15d,eax
+ vpsrld xmm7,xmm4,3
+ shrd r14d,r14d,11
+ xor r12d,r10d
+ xor r15d,ebx
+ vpslld xmm5,xmm4,14
+ shrd r13d,r13d,6
+ add r11d,r12d
+ and esi,r15d
+ vpxor xmm4,xmm7,xmm6
+ xor r14d,eax
+ add r11d,r13d
+ xor esi,ebx
+ vpshufd xmm7,xmm3,250
+ add edx,r11d
+ shrd r14d,r14d,2
+ add r11d,esi
+ vpsrld xmm6,xmm6,11
+ mov r13d,edx
+ add r14d,r11d
+ shrd r13d,r13d,14
+ vpxor xmm4,xmm4,xmm5
+ mov r11d,r14d
+ mov r12d,r8d
+ xor r13d,edx
+ vpslld xmm5,xmm5,11
+ shrd r14d,r14d,9
+ xor r12d,r9d
+ shrd r13d,r13d,5
+ vpxor xmm4,xmm4,xmm6
+ xor r14d,r11d
+ and r12d,edx
+ vpxor xmm9,xmm9,xmm8
+ xor r13d,edx
+ vpsrld xmm6,xmm7,10
+ add r10d,DWORD PTR[4+rsp]
+ mov esi,r11d
+ shrd r14d,r14d,11
+ vpxor xmm4,xmm4,xmm5
+ xor r12d,r9d
+ xor esi,eax
+ shrd r13d,r13d,6
+ vpsrlq xmm7,xmm7,17
+ add r10d,r12d
+ and r15d,esi
+ xor r14d,r11d
+ vpaddd xmm0,xmm0,xmm4
+ add r10d,r13d
+ xor r15d,eax
+ add ecx,r10d
+ vpxor xmm6,xmm6,xmm7
+ shrd r14d,r14d,2
+ add r10d,r15d
+ mov r13d,ecx
+ vpsrlq xmm7,xmm7,2
+ add r14d,r10d
+ shrd r13d,r13d,14
+ mov r10d,r14d
+ vpxor xmm6,xmm6,xmm7
+ mov r12d,edx
+ xor r13d,ecx
+ shrd r14d,r14d,9
+ vpshufd xmm6,xmm6,132
+ xor r12d,r8d
+ shrd r13d,r13d,5
+ xor r14d,r10d
+ vpsrldq xmm6,xmm6,8
+ and r12d,ecx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
+ xor r13d,ecx
+ add r9d,DWORD PTR[8+rsp]
+ vpaddd xmm0,xmm0,xmm6
+ mov r15d,r10d
+ shrd r14d,r14d,11
+ xor r12d,r8d
+ vpshufd xmm7,xmm0,80
+ xor r15d,r11d
+ shrd r13d,r13d,6
+ add r9d,r12d
+ vpsrld xmm6,xmm7,10
+ and esi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ vpsrlq xmm7,xmm7,17
+ xor esi,r11d
+ add ebx,r9d
+ shrd r14d,r14d,2
+ vpxor xmm6,xmm6,xmm7
+ add r9d,esi
+ mov r13d,ebx
+ add r14d,r9d
+ vpsrlq xmm7,xmm7,2
+ shrd r13d,r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ vpxor xmm6,xmm6,xmm7
+ xor r13d,ebx
+ shrd r14d,r14d,9
+ xor r12d,edx
+ vpshufd xmm6,xmm6,232
+ shrd r13d,r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ vpslldq xmm6,xmm6,8
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
+ xor r13d,ebx
+ add r8d,DWORD PTR[12+rsp]
+ mov esi,r9d
+ vpaddd xmm0,xmm0,xmm6
+ shrd r14d,r14d,11
+ xor r12d,edx
+ xor esi,r10d
+ vpaddd xmm6,xmm0,XMMWORD PTR[rbp]
+ shrd r13d,r13d,6
+ add r8d,r12d
+ and r15d,esi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ add eax,r8d
+ shrd r14d,r14d,2
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ vmovdqa XMMWORD PTR[rsp],xmm6
+ vpalignr xmm4,xmm2,xmm1,4
+ shrd r13d,r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ vpalignr xmm7,xmm0,xmm3,4
+ xor r13d,eax
+ shrd r14d,r14d,9
+ xor r12d,ecx
+ vpsrld xmm6,xmm4,7
+ shrd r13d,r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ vpaddd xmm1,xmm1,xmm7
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
+ xor r13d,eax
+ add edx,DWORD PTR[16+rsp]
+ mov r15d,r8d
+ vpsrld xmm7,xmm4,3
+ shrd r14d,r14d,11
+ xor r12d,ecx
+ xor r15d,r9d
+ vpslld xmm5,xmm4,14
+ shrd r13d,r13d,6
+ add edx,r12d
+ and esi,r15d
+ vpxor xmm4,xmm7,xmm6
+ xor r14d,r8d
+ add edx,r13d
+ xor esi,r9d
+ vpshufd xmm7,xmm0,250
+ add r11d,edx
+ shrd r14d,r14d,2
+ add edx,esi
+ vpsrld xmm6,xmm6,11
+ mov r13d,r11d
+ add r14d,edx
+ shrd r13d,r13d,14
+ vpxor xmm4,xmm4,xmm5
+ mov edx,r14d
+ mov r12d,eax
+ xor r13d,r11d
+ vpslld xmm5,xmm5,11
+ shrd r14d,r14d,9
+ xor r12d,ebx
+ shrd r13d,r13d,5
+ vpxor xmm4,xmm4,xmm6
+ xor r14d,edx
+ and r12d,r11d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
+ xor r13d,r11d
+ vpsrld xmm6,xmm7,10
+ add ecx,DWORD PTR[20+rsp]
+ mov esi,edx
+ shrd r14d,r14d,11
+ vpxor xmm4,xmm4,xmm5
+ xor r12d,ebx
+ xor esi,r8d
+ shrd r13d,r13d,6
+ vpsrlq xmm7,xmm7,17
+ add ecx,r12d
+ and r15d,esi
+ xor r14d,edx
+ vpaddd xmm1,xmm1,xmm4
+ add ecx,r13d
+ xor r15d,r8d
+ add r10d,ecx
+ vpxor xmm6,xmm6,xmm7
+ shrd r14d,r14d,2
+ add ecx,r15d
+ mov r13d,r10d
+ vpsrlq xmm7,xmm7,2
+ add r14d,ecx
+ shrd r13d,r13d,14
+ mov ecx,r14d
+ vpxor xmm6,xmm6,xmm7
+ mov r12d,r11d
+ xor r13d,r10d
+ shrd r14d,r14d,9
+ vpshufd xmm6,xmm6,132
+ xor r12d,eax
+ shrd r13d,r13d,5
+ xor r14d,ecx
+ vpsrldq xmm6,xmm6,8
+ and r12d,r10d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
+ xor r13d,r10d
+ add ebx,DWORD PTR[24+rsp]
+ vpaddd xmm1,xmm1,xmm6
+ mov r15d,ecx
+ shrd r14d,r14d,11
+ xor r12d,eax
+ vpshufd xmm7,xmm1,80
+ xor r15d,edx
+ shrd r13d,r13d,6
+ add ebx,r12d
+ vpsrld xmm6,xmm7,10
+ and esi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ vpsrlq xmm7,xmm7,17
+ xor esi,edx
+ add r9d,ebx
+ shrd r14d,r14d,2
+ vpxor xmm6,xmm6,xmm7
+ add ebx,esi
+ mov r13d,r9d
+ add r14d,ebx
+ vpsrlq xmm7,xmm7,2
+ shrd r13d,r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ vpxor xmm6,xmm6,xmm7
+ xor r13d,r9d
+ shrd r14d,r14d,9
+ xor r12d,r11d
+ vpshufd xmm6,xmm6,232
+ shrd r13d,r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ vpslldq xmm6,xmm6,8
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
+ xor r13d,r9d
+ add eax,DWORD PTR[28+rsp]
+ mov esi,ebx
+ vpaddd xmm1,xmm1,xmm6
+ shrd r14d,r14d,11
+ xor r12d,r11d
+ xor esi,ecx
+ vpaddd xmm6,xmm1,XMMWORD PTR[32+rbp]
+ shrd r13d,r13d,6
+ add eax,r12d
+ and r15d,esi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ add r8d,eax
+ shrd r14d,r14d,2
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ vmovdqa XMMWORD PTR[16+rsp],xmm6
+ vpalignr xmm4,xmm3,xmm2,4
+ shrd r13d,r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ vpalignr xmm7,xmm1,xmm0,4
+ xor r13d,r8d
+ shrd r14d,r14d,9
+ xor r12d,r10d
+ vpsrld xmm6,xmm4,7
+ shrd r13d,r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ vpaddd xmm2,xmm2,xmm7
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
+ xor r13d,r8d
+ add r11d,DWORD PTR[32+rsp]
+ mov r15d,eax
+ vpsrld xmm7,xmm4,3
+ shrd r14d,r14d,11
+ xor r12d,r10d
+ xor r15d,ebx
+ vpslld xmm5,xmm4,14
+ shrd r13d,r13d,6
+ add r11d,r12d
+ and esi,r15d
+ vpxor xmm4,xmm7,xmm6
+ xor r14d,eax
+ add r11d,r13d
+ xor esi,ebx
+ vpshufd xmm7,xmm1,250
+ add edx,r11d
+ shrd r14d,r14d,2
+ add r11d,esi
+ vpsrld xmm6,xmm6,11
+ mov r13d,edx
+ add r14d,r11d
+ shrd r13d,r13d,14
+ vpxor xmm4,xmm4,xmm5
+ mov r11d,r14d
+ mov r12d,r8d
+ xor r13d,edx
+ vpslld xmm5,xmm5,11
+ shrd r14d,r14d,9
+ xor r12d,r9d
+ shrd r13d,r13d,5
+ vpxor xmm4,xmm4,xmm6
+ xor r14d,r11d
+ and r12d,edx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
+ xor r13d,edx
+ vpsrld xmm6,xmm7,10
+ add r10d,DWORD PTR[36+rsp]
+ mov esi,r11d
+ shrd r14d,r14d,11
+ vpxor xmm4,xmm4,xmm5
+ xor r12d,r9d
+ xor esi,eax
+ shrd r13d,r13d,6
+ vpsrlq xmm7,xmm7,17
+ add r10d,r12d
+ and r15d,esi
+ xor r14d,r11d
+ vpaddd xmm2,xmm2,xmm4
+ add r10d,r13d
+ xor r15d,eax
+ add ecx,r10d
+ vpxor xmm6,xmm6,xmm7
+ shrd r14d,r14d,2
+ add r10d,r15d
+ mov r13d,ecx
+ vpsrlq xmm7,xmm7,2
+ add r14d,r10d
+ shrd r13d,r13d,14
+ mov r10d,r14d
+ vpxor xmm6,xmm6,xmm7
+ mov r12d,edx
+ xor r13d,ecx
+ shrd r14d,r14d,9
+ vpshufd xmm6,xmm6,132
+ xor r12d,r8d
+ shrd r13d,r13d,5
+ xor r14d,r10d
+ vpsrldq xmm6,xmm6,8
+ and r12d,ecx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
+ xor r13d,ecx
+ add r9d,DWORD PTR[40+rsp]
+ vpaddd xmm2,xmm2,xmm6
+ mov r15d,r10d
+ shrd r14d,r14d,11
+ xor r12d,r8d
+ vpshufd xmm7,xmm2,80
+ xor r15d,r11d
+ shrd r13d,r13d,6
+ add r9d,r12d
+ vpsrld xmm6,xmm7,10
+ and esi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ vpsrlq xmm7,xmm7,17
+ xor esi,r11d
+ add ebx,r9d
+ shrd r14d,r14d,2
+ vpxor xmm6,xmm6,xmm7
+ add r9d,esi
+ mov r13d,ebx
+ add r14d,r9d
+ vpsrlq xmm7,xmm7,2
+ shrd r13d,r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ vpxor xmm6,xmm6,xmm7
+ xor r13d,ebx
+ shrd r14d,r14d,9
+ xor r12d,edx
+ vpshufd xmm6,xmm6,232
+ shrd r13d,r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ vpslldq xmm6,xmm6,8
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
+ xor r13d,ebx
+ add r8d,DWORD PTR[44+rsp]
+ mov esi,r9d
+ vpaddd xmm2,xmm2,xmm6
+ shrd r14d,r14d,11
+ xor r12d,edx
+ xor esi,r10d
+ vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
+ shrd r13d,r13d,6
+ add r8d,r12d
+ and r15d,esi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ add eax,r8d
+ shrd r14d,r14d,2
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ vmovdqa XMMWORD PTR[32+rsp],xmm6
+ vpalignr xmm4,xmm0,xmm3,4
+ shrd r13d,r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ vpalignr xmm7,xmm2,xmm1,4
+ xor r13d,eax
+ shrd r14d,r14d,9
+ xor r12d,ecx
+ vpsrld xmm6,xmm4,7
+ shrd r13d,r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ vpaddd xmm3,xmm3,xmm7
+ vpand xmm8,xmm11,xmm12
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
+ xor r13d,eax
+ add edx,DWORD PTR[48+rsp]
+ mov r15d,r8d
+ vpsrld xmm7,xmm4,3
+ shrd r14d,r14d,11
+ xor r12d,ecx
+ xor r15d,r9d
+ vpslld xmm5,xmm4,14
+ shrd r13d,r13d,6
+ add edx,r12d
+ and esi,r15d
+ vpxor xmm4,xmm7,xmm6
+ xor r14d,r8d
+ add edx,r13d
+ xor esi,r9d
+ vpshufd xmm7,xmm2,250
+ add r11d,edx
+ shrd r14d,r14d,2
+ add edx,esi
+ vpsrld xmm6,xmm6,11
+ mov r13d,r11d
+ add r14d,edx
+ shrd r13d,r13d,14
+ vpxor xmm4,xmm4,xmm5
+ mov edx,r14d
+ mov r12d,eax
+ xor r13d,r11d
+ vpslld xmm5,xmm5,11
+ shrd r14d,r14d,9
+ xor r12d,ebx
+ shrd r13d,r13d,5
+ vpxor xmm4,xmm4,xmm6
+ xor r14d,edx
+ and r12d,r11d
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
+ xor r13d,r11d
+ vpsrld xmm6,xmm7,10
+ add ecx,DWORD PTR[52+rsp]
+ mov esi,edx
+ shrd r14d,r14d,11
+ vpxor xmm4,xmm4,xmm5
+ xor r12d,ebx
+ xor esi,r8d
+ shrd r13d,r13d,6
+ vpsrlq xmm7,xmm7,17
+ add ecx,r12d
+ and r15d,esi
+ xor r14d,edx
+ vpaddd xmm3,xmm3,xmm4
+ add ecx,r13d
+ xor r15d,r8d
+ add r10d,ecx
+ vpxor xmm6,xmm6,xmm7
+ shrd r14d,r14d,2
+ add ecx,r15d
+ mov r13d,r10d
+ vpsrlq xmm7,xmm7,2
+ add r14d,ecx
+ shrd r13d,r13d,14
+ mov ecx,r14d
+ vpxor xmm6,xmm6,xmm7
+ mov r12d,r11d
+ xor r13d,r10d
+ shrd r14d,r14d,9
+ vpshufd xmm6,xmm6,132
+ xor r12d,eax
+ shrd r13d,r13d,5
+ xor r14d,ecx
+ vpsrldq xmm6,xmm6,8
+ and r12d,r10d
+ vpand xmm11,xmm11,xmm13
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
+ xor r13d,r10d
+ add ebx,DWORD PTR[56+rsp]
+ vpaddd xmm3,xmm3,xmm6
+ mov r15d,ecx
+ shrd r14d,r14d,11
+ xor r12d,eax
+ vpshufd xmm7,xmm3,80
+ xor r15d,edx
+ shrd r13d,r13d,6
+ add ebx,r12d
+ vpsrld xmm6,xmm7,10
+ and esi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ vpsrlq xmm7,xmm7,17
+ xor esi,edx
+ add r9d,ebx
+ shrd r14d,r14d,2
+ vpxor xmm6,xmm6,xmm7
+ add ebx,esi
+ mov r13d,r9d
+ add r14d,ebx
+ vpsrlq xmm7,xmm7,2
+ shrd r13d,r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ vpxor xmm6,xmm6,xmm7
+ xor r13d,r9d
+ shrd r14d,r14d,9
+ xor r12d,r11d
+ vpshufd xmm6,xmm6,232
+ shrd r13d,r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ vpslldq xmm6,xmm6,8
+ vpor xmm8,xmm8,xmm11
+ vaesenclast xmm11,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
+ xor r13d,r9d
+ add eax,DWORD PTR[60+rsp]
+ mov esi,ebx
+ vpaddd xmm3,xmm3,xmm6
+ shrd r14d,r14d,11
+ xor r12d,r11d
+ xor esi,ecx
+ vpaddd xmm6,xmm3,XMMWORD PTR[96+rbp]
+ shrd r13d,r13d,6
+ add eax,r12d
+ and r15d,esi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ add r8d,eax
+ shrd r14d,r14d,2
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ vmovdqa XMMWORD PTR[48+rsp],xmm6
+ mov r12,QWORD PTR[((64+0))+rsp]
+ vpand xmm11,xmm11,xmm14
+ mov r15,QWORD PTR[((64+8))+rsp]
+ vpor xmm8,xmm8,xmm11
+ vmovdqu XMMWORD PTR[r12*1+r15],xmm8
+ lea r12,QWORD PTR[16+r12]
+ cmp BYTE PTR[131+rbp],0
+ jne $L$avx_00_47
+ vmovdqu xmm9,XMMWORD PTR[r12]
+ mov QWORD PTR[((64+0))+rsp],r12
+ shrd r13d,r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ xor r13d,r8d
+ shrd r14d,r14d,9
+ xor r12d,r10d
+ shrd r13d,r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ vpxor xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
+ xor r13d,r8d
+ add r11d,DWORD PTR[rsp]
+ mov r15d,eax
+ shrd r14d,r14d,11
+ xor r12d,r10d
+ xor r15d,ebx
+ shrd r13d,r13d,6
+ add r11d,r12d
+ and esi,r15d
+ xor r14d,eax
+ add r11d,r13d
+ xor esi,ebx
+ add edx,r11d
+ shrd r14d,r14d,2
+ add r11d,esi
+ mov r13d,edx
+ add r14d,r11d
+ shrd r13d,r13d,14
+ mov r11d,r14d
+ mov r12d,r8d
+ xor r13d,edx
+ shrd r14d,r14d,9
+ xor r12d,r9d
+ shrd r13d,r13d,5
+ xor r14d,r11d
+ and r12d,edx
+ vpxor xmm9,xmm9,xmm8
+ xor r13d,edx
+ add r10d,DWORD PTR[4+rsp]
+ mov esi,r11d
+ shrd r14d,r14d,11
+ xor r12d,r9d
+ xor esi,eax
+ shrd r13d,r13d,6
+ add r10d,r12d
+ and r15d,esi
+ xor r14d,r11d
+ add r10d,r13d
+ xor r15d,eax
+ add ecx,r10d
+ shrd r14d,r14d,2
+ add r10d,r15d
+ mov r13d,ecx
+ add r14d,r10d
+ shrd r13d,r13d,14
+ mov r10d,r14d
+ mov r12d,edx
+ xor r13d,ecx
+ shrd r14d,r14d,9
+ xor r12d,r8d
+ shrd r13d,r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
+ xor r13d,ecx
+ add r9d,DWORD PTR[8+rsp]
+ mov r15d,r10d
+ shrd r14d,r14d,11
+ xor r12d,r8d
+ xor r15d,r11d
+ shrd r13d,r13d,6
+ add r9d,r12d
+ and esi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ xor esi,r11d
+ add ebx,r9d
+ shrd r14d,r14d,2
+ add r9d,esi
+ mov r13d,ebx
+ add r14d,r9d
+ shrd r13d,r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ xor r13d,ebx
+ shrd r14d,r14d,9
+ xor r12d,edx
+ shrd r13d,r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
+ xor r13d,ebx
+ add r8d,DWORD PTR[12+rsp]
+ mov esi,r9d
+ shrd r14d,r14d,11
+ xor r12d,edx
+ xor esi,r10d
+ shrd r13d,r13d,6
+ add r8d,r12d
+ and r15d,esi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ add eax,r8d
+ shrd r14d,r14d,2
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ shrd r13d,r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ xor r13d,eax
+ shrd r14d,r14d,9
+ xor r12d,ecx
+ shrd r13d,r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
+ xor r13d,eax
+ add edx,DWORD PTR[16+rsp]
+ mov r15d,r8d
+ shrd r14d,r14d,11
+ xor r12d,ecx
+ xor r15d,r9d
+ shrd r13d,r13d,6
+ add edx,r12d
+ and esi,r15d
+ xor r14d,r8d
+ add edx,r13d
+ xor esi,r9d
+ add r11d,edx
+ shrd r14d,r14d,2
+ add edx,esi
+ mov r13d,r11d
+ add r14d,edx
+ shrd r13d,r13d,14
+ mov edx,r14d
+ mov r12d,eax
+ xor r13d,r11d
+ shrd r14d,r14d,9
+ xor r12d,ebx
+ shrd r13d,r13d,5
+ xor r14d,edx
+ and r12d,r11d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
+ xor r13d,r11d
+ add ecx,DWORD PTR[20+rsp]
+ mov esi,edx
+ shrd r14d,r14d,11
+ xor r12d,ebx
+ xor esi,r8d
+ shrd r13d,r13d,6
+ add ecx,r12d
+ and r15d,esi
+ xor r14d,edx
+ add ecx,r13d
+ xor r15d,r8d
+ add r10d,ecx
+ shrd r14d,r14d,2
+ add ecx,r15d
+ mov r13d,r10d
+ add r14d,ecx
+ shrd r13d,r13d,14
+ mov ecx,r14d
+ mov r12d,r11d
+ xor r13d,r10d
+ shrd r14d,r14d,9
+ xor r12d,eax
+ shrd r13d,r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
+ xor r13d,r10d
+ add ebx,DWORD PTR[24+rsp]
+ mov r15d,ecx
+ shrd r14d,r14d,11
+ xor r12d,eax
+ xor r15d,edx
+ shrd r13d,r13d,6
+ add ebx,r12d
+ and esi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ xor esi,edx
+ add r9d,ebx
+ shrd r14d,r14d,2
+ add ebx,esi
+ mov r13d,r9d
+ add r14d,ebx
+ shrd r13d,r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ xor r13d,r9d
+ shrd r14d,r14d,9
+ xor r12d,r11d
+ shrd r13d,r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
+ xor r13d,r9d
+ add eax,DWORD PTR[28+rsp]
+ mov esi,ebx
+ shrd r14d,r14d,11
+ xor r12d,r11d
+ xor esi,ecx
+ shrd r13d,r13d,6
+ add eax,r12d
+ and r15d,esi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ add r8d,eax
+ shrd r14d,r14d,2
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ shrd r13d,r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ xor r13d,r8d
+ shrd r14d,r14d,9
+ xor r12d,r10d
+ shrd r13d,r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
+ xor r13d,r8d
+ add r11d,DWORD PTR[32+rsp]
+ mov r15d,eax
+ shrd r14d,r14d,11
+ xor r12d,r10d
+ xor r15d,ebx
+ shrd r13d,r13d,6
+ add r11d,r12d
+ and esi,r15d
+ xor r14d,eax
+ add r11d,r13d
+ xor esi,ebx
+ add edx,r11d
+ shrd r14d,r14d,2
+ add r11d,esi
+ mov r13d,edx
+ add r14d,r11d
+ shrd r13d,r13d,14
+ mov r11d,r14d
+ mov r12d,r8d
+ xor r13d,edx
+ shrd r14d,r14d,9
+ xor r12d,r9d
+ shrd r13d,r13d,5
+ xor r14d,r11d
+ and r12d,edx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
+ xor r13d,edx
+ add r10d,DWORD PTR[36+rsp]
+ mov esi,r11d
+ shrd r14d,r14d,11
+ xor r12d,r9d
+ xor esi,eax
+ shrd r13d,r13d,6
+ add r10d,r12d
+ and r15d,esi
+ xor r14d,r11d
+ add r10d,r13d
+ xor r15d,eax
+ add ecx,r10d
+ shrd r14d,r14d,2
+ add r10d,r15d
+ mov r13d,ecx
+ add r14d,r10d
+ shrd r13d,r13d,14
+ mov r10d,r14d
+ mov r12d,edx
+ xor r13d,ecx
+ shrd r14d,r14d,9
+ xor r12d,r8d
+ shrd r13d,r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
+ xor r13d,ecx
+ add r9d,DWORD PTR[40+rsp]
+ mov r15d,r10d
+ shrd r14d,r14d,11
+ xor r12d,r8d
+ xor r15d,r11d
+ shrd r13d,r13d,6
+ add r9d,r12d
+ and esi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ xor esi,r11d
+ add ebx,r9d
+ shrd r14d,r14d,2
+ add r9d,esi
+ mov r13d,ebx
+ add r14d,r9d
+ shrd r13d,r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ xor r13d,ebx
+ shrd r14d,r14d,9
+ xor r12d,edx
+ shrd r13d,r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
+ xor r13d,ebx
+ add r8d,DWORD PTR[44+rsp]
+ mov esi,r9d
+ shrd r14d,r14d,11
+ xor r12d,edx
+ xor esi,r10d
+ shrd r13d,r13d,6
+ add r8d,r12d
+ and r15d,esi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ add eax,r8d
+ shrd r14d,r14d,2
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ shrd r13d,r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ xor r13d,eax
+ shrd r14d,r14d,9
+ xor r12d,ecx
+ shrd r13d,r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ vpand xmm8,xmm11,xmm12
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
+ xor r13d,eax
+ add edx,DWORD PTR[48+rsp]
+ mov r15d,r8d
+ shrd r14d,r14d,11
+ xor r12d,ecx
+ xor r15d,r9d
+ shrd r13d,r13d,6
+ add edx,r12d
+ and esi,r15d
+ xor r14d,r8d
+ add edx,r13d
+ xor esi,r9d
+ add r11d,edx
+ shrd r14d,r14d,2
+ add edx,esi
+ mov r13d,r11d
+ add r14d,edx
+ shrd r13d,r13d,14
+ mov edx,r14d
+ mov r12d,eax
+ xor r13d,r11d
+ shrd r14d,r14d,9
+ xor r12d,ebx
+ shrd r13d,r13d,5
+ xor r14d,edx
+ and r12d,r11d
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
+ xor r13d,r11d
+ add ecx,DWORD PTR[52+rsp]
+ mov esi,edx
+ shrd r14d,r14d,11
+ xor r12d,ebx
+ xor esi,r8d
+ shrd r13d,r13d,6
+ add ecx,r12d
+ and r15d,esi
+ xor r14d,edx
+ add ecx,r13d
+ xor r15d,r8d
+ add r10d,ecx
+ shrd r14d,r14d,2
+ add ecx,r15d
+ mov r13d,r10d
+ add r14d,ecx
+ shrd r13d,r13d,14
+ mov ecx,r14d
+ mov r12d,r11d
+ xor r13d,r10d
+ shrd r14d,r14d,9
+ xor r12d,eax
+ shrd r13d,r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ vpand xmm11,xmm11,xmm13
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
+ xor r13d,r10d
+ add ebx,DWORD PTR[56+rsp]
+ mov r15d,ecx
+ shrd r14d,r14d,11
+ xor r12d,eax
+ xor r15d,edx
+ shrd r13d,r13d,6
+ add ebx,r12d
+ and esi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ xor esi,edx
+ add r9d,ebx
+ shrd r14d,r14d,2
+ add ebx,esi
+ mov r13d,r9d
+ add r14d,ebx
+ shrd r13d,r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ xor r13d,r9d
+ shrd r14d,r14d,9
+ xor r12d,r11d
+ shrd r13d,r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ vpor xmm8,xmm8,xmm11
+ vaesenclast xmm11,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
+ xor r13d,r9d
+ add eax,DWORD PTR[60+rsp]
+ mov esi,ebx
+ shrd r14d,r14d,11
+ xor r12d,r11d
+ xor esi,ecx
+ shrd r13d,r13d,6
+ add eax,r12d
+ and r15d,esi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ add r8d,eax
+ shrd r14d,r14d,2
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ mov r12,QWORD PTR[((64+0))+rsp]
+ mov r13,QWORD PTR[((64+8))+rsp]
+ mov r15,QWORD PTR[((64+40))+rsp]
+ mov rsi,QWORD PTR[((64+48))+rsp]
+
+ vpand xmm11,xmm11,xmm14
+ mov eax,r14d
+ vpor xmm8,xmm8,xmm11
+ vmovdqu XMMWORD PTR[r13*1+r12],xmm8
+ lea r12,QWORD PTR[16+r12]
+
+ add eax,DWORD PTR[r15]
+ add ebx,DWORD PTR[4+r15]
+ add ecx,DWORD PTR[8+r15]
+ add edx,DWORD PTR[12+r15]
+ add r8d,DWORD PTR[16+r15]
+ add r9d,DWORD PTR[20+r15]
+ add r10d,DWORD PTR[24+r15]
+ add r11d,DWORD PTR[28+r15]
+
+ cmp r12,QWORD PTR[((64+16))+rsp]
+
+ mov DWORD PTR[r15],eax
+ mov DWORD PTR[4+r15],ebx
+ mov DWORD PTR[8+r15],ecx
+ mov DWORD PTR[12+r15],edx
+ mov DWORD PTR[16+r15],r8d
+ mov DWORD PTR[20+r15],r9d
+ mov DWORD PTR[24+r15],r10d
+ mov DWORD PTR[28+r15],r11d
+ jb $L$loop_avx
+
+ mov r8,QWORD PTR[((64+32))+rsp]
+ mov rsi,QWORD PTR[120+rsp]
+
+ vmovdqu XMMWORD PTR[r8],xmm8
+ vzeroall
+ movaps xmm6,XMMWORD PTR[128+rsp]
+ movaps xmm7,XMMWORD PTR[144+rsp]
+ movaps xmm8,XMMWORD PTR[160+rsp]
+ movaps xmm9,XMMWORD PTR[176+rsp]
+ movaps xmm10,XMMWORD PTR[192+rsp]
+ movaps xmm11,XMMWORD PTR[208+rsp]
+ movaps xmm12,XMMWORD PTR[224+rsp]
+ movaps xmm13,XMMWORD PTR[240+rsp]
+ movaps xmm14,XMMWORD PTR[256+rsp]
+ movaps xmm15,XMMWORD PTR[272+rsp]
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue_avx::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_cbc_sha256_enc_avx::
+aesni_cbc_sha256_enc_avx ENDP
+
+ALIGN 64
+aesni_cbc_sha256_enc_avx2 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_cbc_sha256_enc_avx2::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+$L$avx2_shortcut::
+ mov r10,QWORD PTR[56+rsp]
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,736
+ and rsp,-256*4
+ add rsp,448
+
+ shl rdx,6
+ sub rsi,rdi
+ sub r10,rdi
+ add rdx,rdi
+
+
+
+ mov QWORD PTR[((64+16))+rsp],rdx
+
+ mov QWORD PTR[((64+32))+rsp],r8
+ mov QWORD PTR[((64+40))+rsp],r9
+ mov QWORD PTR[((64+48))+rsp],r10
+ mov QWORD PTR[120+rsp],rax
+
+ movaps XMMWORD PTR[128+rsp],xmm6
+ movaps XMMWORD PTR[144+rsp],xmm7
+ movaps XMMWORD PTR[160+rsp],xmm8
+ movaps XMMWORD PTR[176+rsp],xmm9
+ movaps XMMWORD PTR[192+rsp],xmm10
+ movaps XMMWORD PTR[208+rsp],xmm11
+ movaps XMMWORD PTR[224+rsp],xmm12
+ movaps XMMWORD PTR[240+rsp],xmm13
+ movaps XMMWORD PTR[256+rsp],xmm14
+ movaps XMMWORD PTR[272+rsp],xmm15
+$L$prologue_avx2::
+ vzeroall
+
+ mov r13,rdi
+ vpinsrq xmm15,xmm15,rsi,1
+ lea rdi,QWORD PTR[128+rcx]
+ lea r12,QWORD PTR[((K256+544))]
+ mov r14d,DWORD PTR[((240-128))+rdi]
+ mov r15,r9
+ mov rsi,r10
+ vmovdqu xmm8,XMMWORD PTR[r8]
+ lea r14,QWORD PTR[((-9))+r14]
+
+ vmovdqa xmm14,XMMWORD PTR[r14*8+r12]
+ vmovdqa xmm13,XMMWORD PTR[16+r14*8+r12]
+ vmovdqa xmm12,XMMWORD PTR[32+r14*8+r12]
+
+ sub r13,-16*4
+ mov eax,DWORD PTR[r15]
+ lea r12,QWORD PTR[r13*1+rsi]
+ mov ebx,DWORD PTR[4+r15]
+ cmp r13,rdx
+ mov ecx,DWORD PTR[8+r15]
+ cmove r12,rsp
+ mov edx,DWORD PTR[12+r15]
+ mov r8d,DWORD PTR[16+r15]
+ mov r9d,DWORD PTR[20+r15]
+ mov r10d,DWORD PTR[24+r15]
+ mov r11d,DWORD PTR[28+r15]
+ vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
+ jmp $L$oop_avx2
+ALIGN 16
+$L$oop_avx2::
+ vmovdqa ymm7,YMMWORD PTR[((K256+512))]
+ vmovdqu xmm0,XMMWORD PTR[((-64+0))+r13*1+rsi]
+ vmovdqu xmm1,XMMWORD PTR[((-64+16))+r13*1+rsi]
+ vmovdqu xmm2,XMMWORD PTR[((-64+32))+r13*1+rsi]
+ vmovdqu xmm3,XMMWORD PTR[((-64+48))+r13*1+rsi]
+
+ vinserti128 ymm0,ymm0,XMMWORD PTR[r12],1
+ vinserti128 ymm1,ymm1,XMMWORD PTR[16+r12],1
+ vpshufb ymm0,ymm0,ymm7
+ vinserti128 ymm2,ymm2,XMMWORD PTR[32+r12],1
+ vpshufb ymm1,ymm1,ymm7
+ vinserti128 ymm3,ymm3,XMMWORD PTR[48+r12],1
+
+ lea rbp,QWORD PTR[K256]
+ vpshufb ymm2,ymm2,ymm7
+ lea r13,QWORD PTR[((-64))+r13]
+ vpaddd ymm4,ymm0,YMMWORD PTR[rbp]
+ vpshufb ymm3,ymm3,ymm7
+ vpaddd ymm5,ymm1,YMMWORD PTR[32+rbp]
+ vpaddd ymm6,ymm2,YMMWORD PTR[64+rbp]
+ vpaddd ymm7,ymm3,YMMWORD PTR[96+rbp]
+ vmovdqa YMMWORD PTR[rsp],ymm4
+ xor r14d,r14d
+ vmovdqa YMMWORD PTR[32+rsp],ymm5
+ lea rsp,QWORD PTR[((-64))+rsp]
+ mov esi,ebx
+ vmovdqa YMMWORD PTR[rsp],ymm6
+ xor esi,ecx
+ vmovdqa YMMWORD PTR[32+rsp],ymm7
+ mov r12d,r9d
+ sub rbp,-16*2*4
+ jmp $L$avx2_00_47
+
+ALIGN 16
+$L$avx2_00_47::
+ vmovdqu xmm9,XMMWORD PTR[r13]
+ vpinsrq xmm15,xmm15,r13,0
+ lea rsp,QWORD PTR[((-64))+rsp]
+ vpalignr ymm4,ymm1,ymm0,4
+ add r11d,DWORD PTR[((0+128))+rsp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ vpalignr ymm7,ymm3,ymm2,4
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ vpsrld ymm6,ymm4,7
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ vpaddd ymm0,ymm0,ymm7
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ vpsrld ymm7,ymm4,3
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ vpslld ymm5,ymm4,14
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ vpxor ymm4,ymm7,ymm6
+ and esi,r15d
+ vpxor xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
+ xor r14d,r12d
+ xor esi,ebx
+ vpshufd ymm7,ymm3,250
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rsi*1+r11]
+ mov r12d,r8d
+ vpsrld ymm6,ymm6,11
+ add r10d,DWORD PTR[((4+128))+rsp]
+ and r12d,edx
+ rorx r13d,edx,25
+ vpxor ymm4,ymm4,ymm5
+ rorx esi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ vpslld ymm5,ymm5,11
+ andn r12d,edx,r9d
+ xor r13d,esi
+ rorx r14d,edx,6
+ vpxor ymm4,ymm4,ymm6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov esi,r11d
+ vpsrld ymm6,ymm7,10
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor esi,eax
+ vpxor ymm4,ymm4,ymm5
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ vpsrlq ymm7,ymm7,17
+ and r15d,esi
+ vpxor xmm9,xmm9,xmm8
+ xor r14d,r12d
+ xor r15d,eax
+ vpaddd ymm0,ymm0,ymm4
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ vpxor ymm6,ymm6,ymm7
+ add r9d,DWORD PTR[((8+128))+rsp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ vpsrlq ymm7,ymm7,2
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ vpshufd ymm6,ymm6,132
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ vpsrldq ymm6,ymm6,8
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ vpaddd ymm0,ymm0,ymm6
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ vpshufd ymm7,ymm0,80
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
+ xor r14d,r12d
+ xor esi,r11d
+ vpsrld ymm6,ymm7,10
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rsi*1+r9]
+ mov r12d,ecx
+ vpsrlq ymm7,ymm7,17
+ add r8d,DWORD PTR[((12+128))+rsp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ vpxor ymm6,ymm6,ymm7
+ rorx esi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ vpsrlq ymm7,ymm7,2
+ andn r12d,ebx,edx
+ xor r13d,esi
+ rorx r14d,ebx,6
+ vpxor ymm6,ymm6,ymm7
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov esi,r9d
+ vpshufd ymm6,ymm6,232
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor esi,r10d
+ vpslldq ymm6,ymm6,8
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ vpaddd ymm0,ymm0,ymm6
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r10d
+ vpaddd ymm6,ymm0,YMMWORD PTR[rbp]
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ vmovdqa YMMWORD PTR[rsp],ymm6
+ vpalignr ymm4,ymm2,ymm1,4
+ add edx,DWORD PTR[((32+128))+rsp]
+ and r12d,eax
+ rorx r13d,eax,25
+ vpalignr ymm7,ymm0,ymm3,4
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ vpsrld ymm6,ymm4,7
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ vpaddd ymm1,ymm1,ymm7
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ vpsrld ymm7,ymm4,3
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ vpslld ymm5,ymm4,14
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ vpxor ymm4,ymm7,ymm6
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
+ xor r14d,r12d
+ xor esi,r9d
+ vpshufd ymm7,ymm0,250
+ xor r14d,r13d
+ lea edx,DWORD PTR[rsi*1+rdx]
+ mov r12d,eax
+ vpsrld ymm6,ymm6,11
+ add ecx,DWORD PTR[((36+128))+rsp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ vpxor ymm4,ymm4,ymm5
+ rorx esi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ vpslld ymm5,ymm5,11
+ andn r12d,r11d,ebx
+ xor r13d,esi
+ rorx r14d,r11d,6
+ vpxor ymm4,ymm4,ymm6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov esi,edx
+ vpsrld ymm6,ymm7,10
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor esi,r8d
+ vpxor ymm4,ymm4,ymm5
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ vpsrlq ymm7,ymm7,17
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r8d
+ vpaddd ymm1,ymm1,ymm4
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ vpxor ymm6,ymm6,ymm7
+ add ebx,DWORD PTR[((40+128))+rsp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ vpsrlq ymm7,ymm7,2
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ vpshufd ymm6,ymm6,132
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ vpsrldq ymm6,ymm6,8
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ vpaddd ymm1,ymm1,ymm6
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ vpshufd ymm7,ymm1,80
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
+ xor r14d,r12d
+ xor esi,edx
+ vpsrld ymm6,ymm7,10
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rsi*1+rbx]
+ mov r12d,r10d
+ vpsrlq ymm7,ymm7,17
+ add eax,DWORD PTR[((44+128))+rsp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ vpxor ymm6,ymm6,ymm7
+ rorx esi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ vpsrlq ymm7,ymm7,2
+ andn r12d,r9d,r11d
+ xor r13d,esi
+ rorx r14d,r9d,6
+ vpxor ymm6,ymm6,ymm7
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov esi,ebx
+ vpshufd ymm6,ymm6,232
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor esi,ecx
+ vpslldq ymm6,ymm6,8
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ vpaddd ymm1,ymm1,ymm6
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
+ xor r14d,r12d
+ xor r15d,ecx
+ vpaddd ymm6,ymm1,YMMWORD PTR[32+rbp]
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ vmovdqa YMMWORD PTR[32+rsp],ymm6
+ lea rsp,QWORD PTR[((-64))+rsp]
+ vpalignr ymm4,ymm3,ymm2,4
+ add r11d,DWORD PTR[((0+128))+rsp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ vpalignr ymm7,ymm1,ymm0,4
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ vpsrld ymm6,ymm4,7
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ vpaddd ymm2,ymm2,ymm7
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ vpsrld ymm7,ymm4,3
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ vpslld ymm5,ymm4,14
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ vpxor ymm4,ymm7,ymm6
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
+ xor r14d,r12d
+ xor esi,ebx
+ vpshufd ymm7,ymm1,250
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rsi*1+r11]
+ mov r12d,r8d
+ vpsrld ymm6,ymm6,11
+ add r10d,DWORD PTR[((4+128))+rsp]
+ and r12d,edx
+ rorx r13d,edx,25
+ vpxor ymm4,ymm4,ymm5
+ rorx esi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ vpslld ymm5,ymm5,11
+ andn r12d,edx,r9d
+ xor r13d,esi
+ rorx r14d,edx,6
+ vpxor ymm4,ymm4,ymm6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov esi,r11d
+ vpsrld ymm6,ymm7,10
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor esi,eax
+ vpxor ymm4,ymm4,ymm5
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ vpsrlq ymm7,ymm7,17
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
+ xor r14d,r12d
+ xor r15d,eax
+ vpaddd ymm2,ymm2,ymm4
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ vpxor ymm6,ymm6,ymm7
+ add r9d,DWORD PTR[((8+128))+rsp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ vpsrlq ymm7,ymm7,2
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ vpshufd ymm6,ymm6,132
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ vpsrldq ymm6,ymm6,8
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ vpaddd ymm2,ymm2,ymm6
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ vpshufd ymm7,ymm2,80
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
+ xor r14d,r12d
+ xor esi,r11d
+ vpsrld ymm6,ymm7,10
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rsi*1+r9]
+ mov r12d,ecx
+ vpsrlq ymm7,ymm7,17
+ add r8d,DWORD PTR[((12+128))+rsp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ vpxor ymm6,ymm6,ymm7
+ rorx esi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ vpsrlq ymm7,ymm7,2
+ andn r12d,ebx,edx
+ xor r13d,esi
+ rorx r14d,ebx,6
+ vpxor ymm6,ymm6,ymm7
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov esi,r9d
+ vpshufd ymm6,ymm6,232
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor esi,r10d
+ vpslldq ymm6,ymm6,8
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ vpaddd ymm2,ymm2,ymm6
+ and r15d,esi
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r10d
+ vpaddd ymm6,ymm2,YMMWORD PTR[64+rbp]
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ vmovdqa YMMWORD PTR[rsp],ymm6
+ vpalignr ymm4,ymm0,ymm3,4
+ add edx,DWORD PTR[((32+128))+rsp]
+ and r12d,eax
+ rorx r13d,eax,25
+ vpalignr ymm7,ymm2,ymm1,4
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ vpsrld ymm6,ymm4,7
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ vpaddd ymm3,ymm3,ymm7
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ vpsrld ymm7,ymm4,3
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ vpslld ymm5,ymm4,14
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ vpxor ymm4,ymm7,ymm6
+ and esi,r15d
+ vpand xmm8,xmm11,xmm12
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
+ xor r14d,r12d
+ xor esi,r9d
+ vpshufd ymm7,ymm2,250
+ xor r14d,r13d
+ lea edx,DWORD PTR[rsi*1+rdx]
+ mov r12d,eax
+ vpsrld ymm6,ymm6,11
+ add ecx,DWORD PTR[((36+128))+rsp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ vpxor ymm4,ymm4,ymm5
+ rorx esi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ vpslld ymm5,ymm5,11
+ andn r12d,r11d,ebx
+ xor r13d,esi
+ rorx r14d,r11d,6
+ vpxor ymm4,ymm4,ymm6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov esi,edx
+ vpsrld ymm6,ymm7,10
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor esi,r8d
+ vpxor ymm4,ymm4,ymm5
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ vpsrlq ymm7,ymm7,17
+ and r15d,esi
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r8d
+ vpaddd ymm3,ymm3,ymm4
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ vpxor ymm6,ymm6,ymm7
+ add ebx,DWORD PTR[((40+128))+rsp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ vpsrlq ymm7,ymm7,2
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ vpshufd ymm6,ymm6,132
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ vpsrldq ymm6,ymm6,8
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ vpaddd ymm3,ymm3,ymm6
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ vpshufd ymm7,ymm3,80
+ and esi,r15d
+ vpand xmm11,xmm11,xmm13
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
+ xor r14d,r12d
+ xor esi,edx
+ vpsrld ymm6,ymm7,10
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rsi*1+rbx]
+ mov r12d,r10d
+ vpsrlq ymm7,ymm7,17
+ add eax,DWORD PTR[((44+128))+rsp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ vpxor ymm6,ymm6,ymm7
+ rorx esi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ vpsrlq ymm7,ymm7,2
+ andn r12d,r9d,r11d
+ xor r13d,esi
+ rorx r14d,r9d,6
+ vpxor ymm6,ymm6,ymm7
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov esi,ebx
+ vpshufd ymm6,ymm6,232
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor esi,ecx
+ vpslldq ymm6,ymm6,8
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ vpaddd ymm3,ymm3,ymm6
+ and r15d,esi
+ vpor xmm8,xmm8,xmm11
+ vaesenclast xmm11,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
+ xor r14d,r12d
+ xor r15d,ecx
+ vpaddd ymm6,ymm3,YMMWORD PTR[96+rbp]
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ vmovdqa YMMWORD PTR[32+rsp],ymm6
+ vmovq r13,xmm15
+ vpextrq r15,xmm15,1
+ vpand xmm11,xmm11,xmm14
+ vpor xmm8,xmm8,xmm11
+ vmovdqu XMMWORD PTR[r13*1+r15],xmm8
+ lea r13,QWORD PTR[16+r13]
+ lea rbp,QWORD PTR[128+rbp]
+ cmp BYTE PTR[3+rbp],0
+ jne $L$avx2_00_47
+ vmovdqu xmm9,XMMWORD PTR[r13]
+ vpinsrq xmm15,xmm15,r13,0
+ add r11d,DWORD PTR[((0+64))+rsp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ and esi,r15d
+ vpxor xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
+ xor r14d,r12d
+ xor esi,ebx
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rsi*1+r11]
+ mov r12d,r8d
+ add r10d,DWORD PTR[((4+64))+rsp]
+ and r12d,edx
+ rorx r13d,edx,25
+ rorx esi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ andn r12d,edx,r9d
+ xor r13d,esi
+ rorx r14d,edx,6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov esi,r11d
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor esi,eax
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ and r15d,esi
+ vpxor xmm9,xmm9,xmm8
+ xor r14d,r12d
+ xor r15d,eax
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ add r9d,DWORD PTR[((8+64))+rsp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
+ xor r14d,r12d
+ xor esi,r11d
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rsi*1+r9]
+ mov r12d,ecx
+ add r8d,DWORD PTR[((12+64))+rsp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ rorx esi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ andn r12d,ebx,edx
+ xor r13d,esi
+ rorx r14d,ebx,6
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov esi,r9d
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor esi,r10d
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r10d
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ add edx,DWORD PTR[((32+64))+rsp]
+ and r12d,eax
+ rorx r13d,eax,25
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
+ xor r14d,r12d
+ xor esi,r9d
+ xor r14d,r13d
+ lea edx,DWORD PTR[rsi*1+rdx]
+ mov r12d,eax
+ add ecx,DWORD PTR[((36+64))+rsp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ rorx esi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ andn r12d,r11d,ebx
+ xor r13d,esi
+ rorx r14d,r11d,6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov esi,edx
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor esi,r8d
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r8d
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ add ebx,DWORD PTR[((40+64))+rsp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
+ xor r14d,r12d
+ xor esi,edx
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rsi*1+rbx]
+ mov r12d,r10d
+ add eax,DWORD PTR[((44+64))+rsp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ rorx esi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ andn r12d,r9d,r11d
+ xor r13d,esi
+ rorx r14d,r9d,6
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov esi,ebx
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor esi,ecx
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
+ xor r14d,r12d
+ xor r15d,ecx
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ add r11d,DWORD PTR[rsp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
+ xor r14d,r12d
+ xor esi,ebx
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rsi*1+r11]
+ mov r12d,r8d
+ add r10d,DWORD PTR[4+rsp]
+ and r12d,edx
+ rorx r13d,edx,25
+ rorx esi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ andn r12d,edx,r9d
+ xor r13d,esi
+ rorx r14d,edx,6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov esi,r11d
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor esi,eax
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
+ xor r14d,r12d
+ xor r15d,eax
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ add r9d,DWORD PTR[8+rsp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
+ xor r14d,r12d
+ xor esi,r11d
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rsi*1+r9]
+ mov r12d,ecx
+ add r8d,DWORD PTR[12+rsp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ rorx esi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ andn r12d,ebx,edx
+ xor r13d,esi
+ rorx r14d,ebx,6
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov esi,r9d
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor esi,r10d
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ and r15d,esi
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r10d
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ add edx,DWORD PTR[32+rsp]
+ and r12d,eax
+ rorx r13d,eax,25
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ and esi,r15d
+ vpand xmm8,xmm11,xmm12
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
+ xor r14d,r12d
+ xor esi,r9d
+ xor r14d,r13d
+ lea edx,DWORD PTR[rsi*1+rdx]
+ mov r12d,eax
+ add ecx,DWORD PTR[36+rsp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ rorx esi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ andn r12d,r11d,ebx
+ xor r13d,esi
+ rorx r14d,r11d,6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov esi,edx
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor esi,r8d
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ and r15d,esi
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r8d
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ add ebx,DWORD PTR[40+rsp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ and esi,r15d
+ vpand xmm11,xmm11,xmm13
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
+ xor r14d,r12d
+ xor esi,edx
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rsi*1+rbx]
+ mov r12d,r10d
+ add eax,DWORD PTR[44+rsp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ rorx esi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ andn r12d,r9d,r11d
+ xor r13d,esi
+ rorx r14d,r9d,6
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov esi,ebx
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor esi,ecx
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ and r15d,esi
+ vpor xmm8,xmm8,xmm11
+ vaesenclast xmm11,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
+ xor r14d,r12d
+ xor r15d,ecx
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ vpextrq r12,xmm15,1
+ vmovq r13,xmm15
+ mov r15,QWORD PTR[552+rsp]
+ add eax,r14d
+ lea rbp,QWORD PTR[448+rsp]
+
+ vpand xmm11,xmm11,xmm14
+ vpor xmm8,xmm8,xmm11
+ vmovdqu XMMWORD PTR[r13*1+r12],xmm8
+ lea r13,QWORD PTR[16+r13]
+
+ add eax,DWORD PTR[r15]
+ add ebx,DWORD PTR[4+r15]
+ add ecx,DWORD PTR[8+r15]
+ add edx,DWORD PTR[12+r15]
+ add r8d,DWORD PTR[16+r15]
+ add r9d,DWORD PTR[20+r15]
+ add r10d,DWORD PTR[24+r15]
+ add r11d,DWORD PTR[28+r15]
+
+ mov DWORD PTR[r15],eax
+ mov DWORD PTR[4+r15],ebx
+ mov DWORD PTR[8+r15],ecx
+ mov DWORD PTR[12+r15],edx
+ mov DWORD PTR[16+r15],r8d
+ mov DWORD PTR[20+r15],r9d
+ mov DWORD PTR[24+r15],r10d
+ mov DWORD PTR[28+r15],r11d
+
+ cmp r13,QWORD PTR[80+rbp]
+ je $L$done_avx2
+
+ xor r14d,r14d
+ mov esi,ebx
+ mov r12d,r9d
+ xor esi,ecx
+ jmp $L$ower_avx2
+ALIGN 16
+$L$ower_avx2::
+ vmovdqu xmm9,XMMWORD PTR[r13]
+ vpinsrq xmm15,xmm15,r13,0
+ add r11d,DWORD PTR[((0+16))+rbp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ and esi,r15d
+ vpxor xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((16-128))+rdi]
+ xor r14d,r12d
+ xor esi,ebx
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rsi*1+r11]
+ mov r12d,r8d
+ add r10d,DWORD PTR[((4+16))+rbp]
+ and r12d,edx
+ rorx r13d,edx,25
+ rorx esi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ andn r12d,edx,r9d
+ xor r13d,esi
+ rorx r14d,edx,6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov esi,r11d
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor esi,eax
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ and r15d,esi
+ vpxor xmm9,xmm9,xmm8
+ xor r14d,r12d
+ xor r15d,eax
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ add r9d,DWORD PTR[((8+16))+rbp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((32-128))+rdi]
+ xor r14d,r12d
+ xor esi,r11d
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rsi*1+r9]
+ mov r12d,ecx
+ add r8d,DWORD PTR[((12+16))+rbp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ rorx esi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ andn r12d,ebx,edx
+ xor r13d,esi
+ rorx r14d,ebx,6
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov esi,r9d
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor esi,r10d
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((48-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r10d
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ add edx,DWORD PTR[((32+16))+rbp]
+ and r12d,eax
+ rorx r13d,eax,25
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
+ xor r14d,r12d
+ xor esi,r9d
+ xor r14d,r13d
+ lea edx,DWORD PTR[rsi*1+rdx]
+ mov r12d,eax
+ add ecx,DWORD PTR[((36+16))+rbp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ rorx esi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ andn r12d,r11d,ebx
+ xor r13d,esi
+ rorx r14d,r11d,6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov esi,edx
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor esi,r8d
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((80-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r8d
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ add ebx,DWORD PTR[((40+16))+rbp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((96-128))+rdi]
+ xor r14d,r12d
+ xor esi,edx
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rsi*1+rbx]
+ mov r12d,r10d
+ add eax,DWORD PTR[((44+16))+rbp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ rorx esi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ andn r12d,r9d,r11d
+ xor r13d,esi
+ rorx r14d,r9d,6
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov esi,ebx
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor esi,ecx
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((112-128))+rdi]
+ xor r14d,r12d
+ xor r15d,ecx
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ lea rbp,QWORD PTR[((-64))+rbp]
+ add r11d,DWORD PTR[((0+16))+rbp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((128-128))+rdi]
+ xor r14d,r12d
+ xor esi,ebx
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rsi*1+r11]
+ mov r12d,r8d
+ add r10d,DWORD PTR[((4+16))+rbp]
+ and r12d,edx
+ rorx r13d,edx,25
+ rorx esi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ andn r12d,edx,r9d
+ xor r13d,esi
+ rorx r14d,edx,6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov esi,r11d
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor esi,eax
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ and r15d,esi
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((144-128))+rdi]
+ xor r14d,r12d
+ xor r15d,eax
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ add r9d,DWORD PTR[((8+16))+rbp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ and esi,r15d
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((160-128))+rdi]
+ xor r14d,r12d
+ xor esi,r11d
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rsi*1+r9]
+ mov r12d,ecx
+ add r8d,DWORD PTR[((12+16))+rbp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ rorx esi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ andn r12d,ebx,edx
+ xor r13d,esi
+ rorx r14d,ebx,6
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov esi,r9d
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor esi,r10d
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ and r15d,esi
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((176-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r10d
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ add edx,DWORD PTR[((32+16))+rbp]
+ and r12d,eax
+ rorx r13d,eax,25
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ and esi,r15d
+ vpand xmm8,xmm11,xmm12
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((192-128))+rdi]
+ xor r14d,r12d
+ xor esi,r9d
+ xor r14d,r13d
+ lea edx,DWORD PTR[rsi*1+rdx]
+ mov r12d,eax
+ add ecx,DWORD PTR[((36+16))+rbp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ rorx esi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ andn r12d,r11d,ebx
+ xor r13d,esi
+ rorx r14d,r11d,6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov esi,edx
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor esi,r8d
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ and r15d,esi
+ vaesenclast xmm11,xmm9,xmm10
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((208-128))+rdi]
+ xor r14d,r12d
+ xor r15d,r8d
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ add ebx,DWORD PTR[((40+16))+rbp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ and esi,r15d
+ vpand xmm11,xmm11,xmm13
+ vaesenc xmm9,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((224-128))+rdi]
+ xor r14d,r12d
+ xor esi,edx
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rsi*1+rbx]
+ mov r12d,r10d
+ add eax,DWORD PTR[((44+16))+rbp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ rorx esi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ andn r12d,r9d,r11d
+ xor r13d,esi
+ rorx r14d,r9d,6
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov esi,ebx
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor esi,ecx
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ and r15d,esi
+ vpor xmm8,xmm8,xmm11
+ vaesenclast xmm11,xmm9,xmm10
+ vmovdqu xmm10,XMMWORD PTR[((0-128))+rdi]
+ xor r14d,r12d
+ xor r15d,ecx
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ vmovq r13,xmm15
+ vpextrq r15,xmm15,1
+ vpand xmm11,xmm11,xmm14
+ vpor xmm8,xmm8,xmm11
+ lea rbp,QWORD PTR[((-64))+rbp]
+ vmovdqu XMMWORD PTR[r13*1+r15],xmm8
+ lea r13,QWORD PTR[16+r13]
+ cmp rbp,rsp
+ jae $L$ower_avx2
+
+ mov r15,QWORD PTR[552+rsp]
+ lea r13,QWORD PTR[64+r13]
+ mov rsi,QWORD PTR[560+rsp]
+ add eax,r14d
+ lea rsp,QWORD PTR[448+rsp]
+
+ add eax,DWORD PTR[r15]
+ add ebx,DWORD PTR[4+r15]
+ add ecx,DWORD PTR[8+r15]
+ add edx,DWORD PTR[12+r15]
+ add r8d,DWORD PTR[16+r15]
+ add r9d,DWORD PTR[20+r15]
+ add r10d,DWORD PTR[24+r15]
+ lea r12,QWORD PTR[r13*1+rsi]
+ add r11d,DWORD PTR[28+r15]
+
+ cmp r13,QWORD PTR[((64+16))+rsp]
+
+ mov DWORD PTR[r15],eax
+ cmove r12,rsp
+ mov DWORD PTR[4+r15],ebx
+ mov DWORD PTR[8+r15],ecx
+ mov DWORD PTR[12+r15],edx
+ mov DWORD PTR[16+r15],r8d
+ mov DWORD PTR[20+r15],r9d
+ mov DWORD PTR[24+r15],r10d
+ mov DWORD PTR[28+r15],r11d
+
+ jbe $L$oop_avx2
+ lea rbp,QWORD PTR[rsp]
+
+
+
+
+$L$done_avx2::
+ mov r8,QWORD PTR[((64+32))+rbp]
+ mov rsi,QWORD PTR[((64+56))+rbp]
+
+ vmovdqu XMMWORD PTR[r8],xmm8
+ vzeroall
+ movaps xmm6,XMMWORD PTR[128+rbp]
+ movaps xmm7,XMMWORD PTR[144+rbp]
+ movaps xmm8,XMMWORD PTR[160+rbp]
+ movaps xmm9,XMMWORD PTR[176+rbp]
+ movaps xmm10,XMMWORD PTR[192+rbp]
+ movaps xmm11,XMMWORD PTR[208+rbp]
+ movaps xmm12,XMMWORD PTR[224+rbp]
+ movaps xmm13,XMMWORD PTR[240+rbp]
+ movaps xmm14,XMMWORD PTR[256+rbp]
+ movaps xmm15,XMMWORD PTR[272+rbp]
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue_avx2::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_cbc_sha256_enc_avx2::
+aesni_cbc_sha256_enc_avx2 ENDP
+
+ALIGN 32
+aesni_cbc_sha256_enc_shaext PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_cbc_sha256_enc_shaext::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov r10,QWORD PTR[56+rsp]
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[(-8-160)+rax],xmm6
+ movaps XMMWORD PTR[(-8-144)+rax],xmm7
+ movaps XMMWORD PTR[(-8-128)+rax],xmm8
+ movaps XMMWORD PTR[(-8-112)+rax],xmm9
+ movaps XMMWORD PTR[(-8-96)+rax],xmm10
+ movaps XMMWORD PTR[(-8-80)+rax],xmm11
+ movaps XMMWORD PTR[(-8-64)+rax],xmm12
+ movaps XMMWORD PTR[(-8-48)+rax],xmm13
+ movaps XMMWORD PTR[(-8-32)+rax],xmm14
+ movaps XMMWORD PTR[(-8-16)+rax],xmm15
+$L$prologue_shaext::
+ lea rax,QWORD PTR[((K256+128))]
+ movdqu xmm1,XMMWORD PTR[r9]
+ movdqu xmm2,XMMWORD PTR[16+r9]
+ movdqa xmm3,XMMWORD PTR[((512-128))+rax]
+
+ mov r11d,DWORD PTR[240+rcx]
+ sub rsi,rdi
+ movups xmm15,XMMWORD PTR[rcx]
+ movups xmm6,XMMWORD PTR[r8]
+ movups xmm4,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[112+rcx]
+
+ pshufd xmm0,xmm1,01bh
+ pshufd xmm1,xmm1,0b1h
+ pshufd xmm2,xmm2,01bh
+ movdqa xmm7,xmm3
+DB 102,15,58,15,202,8
+ punpcklqdq xmm2,xmm0
+
+ jmp $L$oop_shaext
+
+ALIGN 16
+$L$oop_shaext::
+ movdqu xmm10,XMMWORD PTR[r10]
+ movdqu xmm11,XMMWORD PTR[16+r10]
+ movdqu xmm12,XMMWORD PTR[32+r10]
+DB 102,68,15,56,0,211
+ movdqu xmm13,XMMWORD PTR[48+r10]
+
+ movdqa xmm0,XMMWORD PTR[((0-128))+rax]
+ paddd xmm0,xmm10
+DB 102,68,15,56,0,219
+ movdqa xmm9,xmm2
+ movdqa xmm8,xmm1
+ movups xmm14,XMMWORD PTR[rdi]
+ xorps xmm14,xmm15
+ xorps xmm6,xmm14
+ movups xmm5,XMMWORD PTR[((-80))+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movups xmm4,XMMWORD PTR[((-64))+rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,202
+
+ movdqa xmm0,XMMWORD PTR[((32-128))+rax]
+ paddd xmm0,xmm11
+DB 102,68,15,56,0,227
+ lea r10,QWORD PTR[64+r10]
+ movups xmm5,XMMWORD PTR[((-48))+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movups xmm4,XMMWORD PTR[((-32))+rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,202
+
+ movdqa xmm0,XMMWORD PTR[((64-128))+rax]
+ paddd xmm0,xmm12
+DB 102,68,15,56,0,235
+DB 69,15,56,204,211
+ movups xmm5,XMMWORD PTR[((-16))+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm13
+DB 102,65,15,58,15,220,4
+ paddd xmm10,xmm3
+ movups xmm4,XMMWORD PTR[rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,202
+
+ movdqa xmm0,XMMWORD PTR[((96-128))+rax]
+ paddd xmm0,xmm13
+DB 69,15,56,205,213
+DB 69,15,56,204,220
+ movups xmm5,XMMWORD PTR[16+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movups xmm4,XMMWORD PTR[32+rcx]
+ aesenc xmm6,xmm5
+ movdqa xmm3,xmm10
+DB 102,65,15,58,15,221,4
+ paddd xmm11,xmm3
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((128-128))+rax]
+ paddd xmm0,xmm10
+DB 69,15,56,205,218
+DB 69,15,56,204,229
+ movups xmm5,XMMWORD PTR[48+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm11
+DB 102,65,15,58,15,218,4
+ paddd xmm12,xmm3
+ cmp r11d,11
+ jb $L$aesenclast1
+ movups xmm4,XMMWORD PTR[64+rcx]
+ aesenc xmm6,xmm5
+ movups xmm5,XMMWORD PTR[80+rcx]
+ aesenc xmm6,xmm4
+ je $L$aesenclast1
+ movups xmm4,XMMWORD PTR[96+rcx]
+ aesenc xmm6,xmm5
+ movups xmm5,XMMWORD PTR[112+rcx]
+ aesenc xmm6,xmm4
+$L$aesenclast1::
+ aesenclast xmm6,xmm5
+ movups xmm4,XMMWORD PTR[((16-112))+rcx]
+ nop
+DB 15,56,203,202
+ movups xmm14,XMMWORD PTR[16+rdi]
+ xorps xmm14,xmm15
+ movups XMMWORD PTR[rdi*1+rsi],xmm6
+ xorps xmm6,xmm14
+ movups xmm5,XMMWORD PTR[((-80))+rcx]
+ aesenc xmm6,xmm4
+ movdqa xmm0,XMMWORD PTR[((160-128))+rax]
+ paddd xmm0,xmm11
+DB 69,15,56,205,227
+DB 69,15,56,204,234
+ movups xmm4,XMMWORD PTR[((-64))+rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm12
+DB 102,65,15,58,15,219,4
+ paddd xmm13,xmm3
+ movups xmm5,XMMWORD PTR[((-48))+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((192-128))+rax]
+ paddd xmm0,xmm12
+DB 69,15,56,205,236
+DB 69,15,56,204,211
+ movups xmm4,XMMWORD PTR[((-32))+rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm13
+DB 102,65,15,58,15,220,4
+ paddd xmm10,xmm3
+ movups xmm5,XMMWORD PTR[((-16))+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((224-128))+rax]
+ paddd xmm0,xmm13
+DB 69,15,56,205,213
+DB 69,15,56,204,220
+ movups xmm4,XMMWORD PTR[rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm10
+DB 102,65,15,58,15,221,4
+ paddd xmm11,xmm3
+ movups xmm5,XMMWORD PTR[16+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((256-128))+rax]
+ paddd xmm0,xmm10
+DB 69,15,56,205,218
+DB 69,15,56,204,229
+ movups xmm4,XMMWORD PTR[32+rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm11
+DB 102,65,15,58,15,218,4
+ paddd xmm12,xmm3
+ movups xmm5,XMMWORD PTR[48+rcx]
+ aesenc xmm6,xmm4
+ cmp r11d,11
+ jb $L$aesenclast2
+ movups xmm4,XMMWORD PTR[64+rcx]
+ aesenc xmm6,xmm5
+ movups xmm5,XMMWORD PTR[80+rcx]
+ aesenc xmm6,xmm4
+ je $L$aesenclast2
+ movups xmm4,XMMWORD PTR[96+rcx]
+ aesenc xmm6,xmm5
+ movups xmm5,XMMWORD PTR[112+rcx]
+ aesenc xmm6,xmm4
+$L$aesenclast2::
+ aesenclast xmm6,xmm5
+ movups xmm4,XMMWORD PTR[((16-112))+rcx]
+ nop
+DB 15,56,203,202
+ movups xmm14,XMMWORD PTR[32+rdi]
+ xorps xmm14,xmm15
+ movups XMMWORD PTR[16+rdi*1+rsi],xmm6
+ xorps xmm6,xmm14
+ movups xmm5,XMMWORD PTR[((-80))+rcx]
+ aesenc xmm6,xmm4
+ movdqa xmm0,XMMWORD PTR[((288-128))+rax]
+ paddd xmm0,xmm11
+DB 69,15,56,205,227
+DB 69,15,56,204,234
+ movups xmm4,XMMWORD PTR[((-64))+rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm12
+DB 102,65,15,58,15,219,4
+ paddd xmm13,xmm3
+ movups xmm5,XMMWORD PTR[((-48))+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((320-128))+rax]
+ paddd xmm0,xmm12
+DB 69,15,56,205,236
+DB 69,15,56,204,211
+ movups xmm4,XMMWORD PTR[((-32))+rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm13
+DB 102,65,15,58,15,220,4
+ paddd xmm10,xmm3
+ movups xmm5,XMMWORD PTR[((-16))+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((352-128))+rax]
+ paddd xmm0,xmm13
+DB 69,15,56,205,213
+DB 69,15,56,204,220
+ movups xmm4,XMMWORD PTR[rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm10
+DB 102,65,15,58,15,221,4
+ paddd xmm11,xmm3
+ movups xmm5,XMMWORD PTR[16+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((384-128))+rax]
+ paddd xmm0,xmm10
+DB 69,15,56,205,218
+DB 69,15,56,204,229
+ movups xmm4,XMMWORD PTR[32+rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm11
+DB 102,65,15,58,15,218,4
+ paddd xmm12,xmm3
+ movups xmm5,XMMWORD PTR[48+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((416-128))+rax]
+ paddd xmm0,xmm11
+DB 69,15,56,205,227
+DB 69,15,56,204,234
+ cmp r11d,11
+ jb $L$aesenclast3
+ movups xmm4,XMMWORD PTR[64+rcx]
+ aesenc xmm6,xmm5
+ movups xmm5,XMMWORD PTR[80+rcx]
+ aesenc xmm6,xmm4
+ je $L$aesenclast3
+ movups xmm4,XMMWORD PTR[96+rcx]
+ aesenc xmm6,xmm5
+ movups xmm5,XMMWORD PTR[112+rcx]
+ aesenc xmm6,xmm4
+$L$aesenclast3::
+ aesenclast xmm6,xmm5
+ movups xmm4,XMMWORD PTR[((16-112))+rcx]
+ nop
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm3,xmm12
+DB 102,65,15,58,15,219,4
+ paddd xmm13,xmm3
+ movups xmm14,XMMWORD PTR[48+rdi]
+ xorps xmm14,xmm15
+ movups XMMWORD PTR[32+rdi*1+rsi],xmm6
+ xorps xmm6,xmm14
+ movups xmm5,XMMWORD PTR[((-80))+rcx]
+ aesenc xmm6,xmm4
+ movups xmm4,XMMWORD PTR[((-64))+rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,202
+
+ movdqa xmm0,XMMWORD PTR[((448-128))+rax]
+ paddd xmm0,xmm12
+DB 69,15,56,205,236
+ movdqa xmm3,xmm7
+ movups xmm5,XMMWORD PTR[((-48))+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movups xmm4,XMMWORD PTR[((-32))+rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,202
+
+ movdqa xmm0,XMMWORD PTR[((480-128))+rax]
+ paddd xmm0,xmm13
+ movups xmm5,XMMWORD PTR[((-16))+rcx]
+ aesenc xmm6,xmm4
+ movups xmm4,XMMWORD PTR[rcx]
+ aesenc xmm6,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movups xmm5,XMMWORD PTR[16+rcx]
+ aesenc xmm6,xmm4
+DB 15,56,203,202
+
+ movups xmm4,XMMWORD PTR[32+rcx]
+ aesenc xmm6,xmm5
+ movups xmm5,XMMWORD PTR[48+rcx]
+ aesenc xmm6,xmm4
+ cmp r11d,11
+ jb $L$aesenclast4
+ movups xmm4,XMMWORD PTR[64+rcx]
+ aesenc xmm6,xmm5
+ movups xmm5,XMMWORD PTR[80+rcx]
+ aesenc xmm6,xmm4
+ je $L$aesenclast4
+ movups xmm4,XMMWORD PTR[96+rcx]
+ aesenc xmm6,xmm5
+ movups xmm5,XMMWORD PTR[112+rcx]
+ aesenc xmm6,xmm4
+$L$aesenclast4::
+ aesenclast xmm6,xmm5
+ movups xmm4,XMMWORD PTR[((16-112))+rcx]
+ nop
+
+ paddd xmm2,xmm9
+ paddd xmm1,xmm8
+
+ dec rdx
+ movups XMMWORD PTR[48+rdi*1+rsi],xmm6
+ lea rdi,QWORD PTR[64+rdi]
+ jnz $L$oop_shaext
+
+ pshufd xmm2,xmm2,0b1h
+ pshufd xmm3,xmm1,01bh
+ pshufd xmm1,xmm1,0b1h
+ punpckhqdq xmm1,xmm2
+DB 102,15,58,15,211,8
+
+ movups XMMWORD PTR[r8],xmm6
+ movdqu XMMWORD PTR[r9],xmm1
+ movdqu XMMWORD PTR[16+r9],xmm2
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps xmm10,XMMWORD PTR[64+rsp]
+ movaps xmm11,XMMWORD PTR[80+rsp]
+ movaps xmm12,XMMWORD PTR[96+rsp]
+ movaps xmm13,XMMWORD PTR[112+rsp]
+ movaps xmm14,XMMWORD PTR[128+rsp]
+ movaps xmm15,XMMWORD PTR[144+rsp]
+ lea rsp,QWORD PTR[((8+160))+rsp]
+$L$epilogue_shaext::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_cbc_sha256_enc_shaext::
+aesni_cbc_sha256_enc_shaext ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+ lea r10,QWORD PTR[aesni_cbc_sha256_enc_shaext]
+ cmp rbx,r10
+ jb $L$not_in_shaext
+
+ lea rsi,QWORD PTR[rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+ lea rax,QWORD PTR[168+rax]
+ jmp $L$in_prologue
+$L$not_in_shaext::
+ lea r10,QWORD PTR[$L$avx2_shortcut]
+ cmp rbx,r10
+ jb $L$not_in_avx2
+
+ and rax,-256*4
+ add rax,448
+$L$not_in_avx2::
+ mov rsi,rax
+ mov rax,QWORD PTR[((64+56))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+ lea rsi,QWORD PTR[((64+64))+rsi]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ DD imagerel $L$SEH_begin_aesni_cbc_sha256_enc_xop
+ DD imagerel $L$SEH_end_aesni_cbc_sha256_enc_xop
+ DD imagerel $L$SEH_info_aesni_cbc_sha256_enc_xop
+
+ DD imagerel $L$SEH_begin_aesni_cbc_sha256_enc_avx
+ DD imagerel $L$SEH_end_aesni_cbc_sha256_enc_avx
+ DD imagerel $L$SEH_info_aesni_cbc_sha256_enc_avx
+ DD imagerel $L$SEH_begin_aesni_cbc_sha256_enc_avx2
+ DD imagerel $L$SEH_end_aesni_cbc_sha256_enc_avx2
+ DD imagerel $L$SEH_info_aesni_cbc_sha256_enc_avx2
+ DD imagerel $L$SEH_begin_aesni_cbc_sha256_enc_shaext
+ DD imagerel $L$SEH_end_aesni_cbc_sha256_enc_shaext
+ DD imagerel $L$SEH_info_aesni_cbc_sha256_enc_shaext
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_aesni_cbc_sha256_enc_xop::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue_xop,imagerel $L$epilogue_xop
+
+$L$SEH_info_aesni_cbc_sha256_enc_avx::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
+$L$SEH_info_aesni_cbc_sha256_enc_avx2::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue_avx2,imagerel $L$epilogue_avx2
+$L$SEH_info_aesni_cbc_sha256_enc_shaext::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue_shaext,imagerel $L$epilogue_shaext
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86.masm b/contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86.masm
index b490904440..160f536ffa 100644
--- a/contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86.masm
@@ -1,3224 +1,3224 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-;EXTERN _OPENSSL_ia32cap_P:NEAR
-ALIGN 16
-_aesni_encrypt PROC PUBLIC
-$L_aesni_encrypt_begin::
- mov eax,DWORD PTR 4[esp]
- mov edx,DWORD PTR 12[esp]
- movups xmm2,XMMWORD PTR [eax]
- mov ecx,DWORD PTR 240[edx]
- mov eax,DWORD PTR 8[esp]
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L000enc1_loop_1:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L000enc1_loop_1
-DB 102,15,56,221,209
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- movups XMMWORD PTR [eax],xmm2
- pxor xmm2,xmm2
- ret
-_aesni_encrypt ENDP
-ALIGN 16
-_aesni_decrypt PROC PUBLIC
-$L_aesni_decrypt_begin::
- mov eax,DWORD PTR 4[esp]
- mov edx,DWORD PTR 12[esp]
- movups xmm2,XMMWORD PTR [eax]
- mov ecx,DWORD PTR 240[edx]
- mov eax,DWORD PTR 8[esp]
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L001dec1_loop_2:
-DB 102,15,56,222,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L001dec1_loop_2
-DB 102,15,56,223,209
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- movups XMMWORD PTR [eax],xmm2
- pxor xmm2,xmm2
- ret
-_aesni_decrypt ENDP
-ALIGN 16
-__aesni_encrypt2 PROC PRIVATE
- movups xmm0,XMMWORD PTR [edx]
- shl ecx,4
- movups xmm1,XMMWORD PTR 16[edx]
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- movups xmm0,XMMWORD PTR 32[edx]
- lea edx,DWORD PTR 32[ecx*1+edx]
- neg ecx
- add ecx,16
-$L002enc2_loop:
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- movups xmm1,XMMWORD PTR [ecx*1+edx]
- add ecx,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
- jnz $L002enc2_loop
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,221,208
-DB 102,15,56,221,216
- ret
-__aesni_encrypt2 ENDP
-ALIGN 16
-__aesni_decrypt2 PROC PRIVATE
- movups xmm0,XMMWORD PTR [edx]
- shl ecx,4
- movups xmm1,XMMWORD PTR 16[edx]
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- movups xmm0,XMMWORD PTR 32[edx]
- lea edx,DWORD PTR 32[ecx*1+edx]
- neg ecx
- add ecx,16
-$L003dec2_loop:
-DB 102,15,56,222,209
-DB 102,15,56,222,217
- movups xmm1,XMMWORD PTR [ecx*1+edx]
- add ecx,32
-DB 102,15,56,222,208
-DB 102,15,56,222,216
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
- jnz $L003dec2_loop
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,223,208
-DB 102,15,56,223,216
- ret
-__aesni_decrypt2 ENDP
-ALIGN 16
-__aesni_encrypt3 PROC PRIVATE
- movups xmm0,XMMWORD PTR [edx]
- shl ecx,4
- movups xmm1,XMMWORD PTR 16[edx]
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
- movups xmm0,XMMWORD PTR 32[edx]
- lea edx,DWORD PTR 32[ecx*1+edx]
- neg ecx
- add ecx,16
-$L004enc3_loop:
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
- movups xmm1,XMMWORD PTR [ecx*1+edx]
- add ecx,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
- jnz $L004enc3_loop
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,221,208
-DB 102,15,56,221,216
-DB 102,15,56,221,224
- ret
-__aesni_encrypt3 ENDP
-ALIGN 16
-__aesni_decrypt3 PROC PRIVATE
- movups xmm0,XMMWORD PTR [edx]
- shl ecx,4
- movups xmm1,XMMWORD PTR 16[edx]
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
- movups xmm0,XMMWORD PTR 32[edx]
- lea edx,DWORD PTR 32[ecx*1+edx]
- neg ecx
- add ecx,16
-$L005dec3_loop:
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
- movups xmm1,XMMWORD PTR [ecx*1+edx]
- add ecx,32
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
- jnz $L005dec3_loop
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,223,208
-DB 102,15,56,223,216
-DB 102,15,56,223,224
- ret
-__aesni_decrypt3 ENDP
-ALIGN 16
-__aesni_encrypt4 PROC PRIVATE
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- shl ecx,4
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
- pxor xmm5,xmm0
- movups xmm0,XMMWORD PTR 32[edx]
- lea edx,DWORD PTR 32[ecx*1+edx]
- neg ecx
-DB 15,31,64,0
- add ecx,16
-$L006enc4_loop:
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR [ecx*1+edx]
- add ecx,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
- jnz $L006enc4_loop
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,221,208
-DB 102,15,56,221,216
-DB 102,15,56,221,224
-DB 102,15,56,221,232
- ret
-__aesni_encrypt4 ENDP
-ALIGN 16
-__aesni_decrypt4 PROC PRIVATE
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- shl ecx,4
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
- pxor xmm5,xmm0
- movups xmm0,XMMWORD PTR 32[edx]
- lea edx,DWORD PTR 32[ecx*1+edx]
- neg ecx
-DB 15,31,64,0
- add ecx,16
-$L007dec4_loop:
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR [ecx*1+edx]
- add ecx,32
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
- jnz $L007dec4_loop
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,223,208
-DB 102,15,56,223,216
-DB 102,15,56,223,224
-DB 102,15,56,223,232
- ret
-__aesni_decrypt4 ENDP
-ALIGN 16
-__aesni_encrypt6 PROC PRIVATE
- movups xmm0,XMMWORD PTR [edx]
- shl ecx,4
- movups xmm1,XMMWORD PTR 16[edx]
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
-DB 102,15,56,220,209
- pxor xmm5,xmm0
- pxor xmm6,xmm0
-DB 102,15,56,220,217
- lea edx,DWORD PTR 32[ecx*1+edx]
- neg ecx
-DB 102,15,56,220,225
- pxor xmm7,xmm0
- movups xmm0,XMMWORD PTR [ecx*1+edx]
- add ecx,16
- jmp $L008_aesni_encrypt6_inner
-ALIGN 16
-$L009enc6_loop:
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-$L008_aesni_encrypt6_inner:
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-$L_aesni_encrypt6_enter::
- movups xmm1,XMMWORD PTR [ecx*1+edx]
- add ecx,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
-DB 102,15,56,220,240
-DB 102,15,56,220,248
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
- jnz $L009enc6_loop
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,15,56,221,208
-DB 102,15,56,221,216
-DB 102,15,56,221,224
-DB 102,15,56,221,232
-DB 102,15,56,221,240
-DB 102,15,56,221,248
- ret
-__aesni_encrypt6 ENDP
-ALIGN 16
-__aesni_decrypt6 PROC PRIVATE
- movups xmm0,XMMWORD PTR [edx]
- shl ecx,4
- movups xmm1,XMMWORD PTR 16[edx]
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
-DB 102,15,56,222,209
- pxor xmm5,xmm0
- pxor xmm6,xmm0
-DB 102,15,56,222,217
- lea edx,DWORD PTR 32[ecx*1+edx]
- neg ecx
-DB 102,15,56,222,225
- pxor xmm7,xmm0
- movups xmm0,XMMWORD PTR [ecx*1+edx]
- add ecx,16
- jmp $L010_aesni_decrypt6_inner
-ALIGN 16
-$L011dec6_loop:
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-$L010_aesni_decrypt6_inner:
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-$L_aesni_decrypt6_enter::
- movups xmm1,XMMWORD PTR [ecx*1+edx]
- add ecx,32
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
- jnz $L011dec6_loop
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-DB 102,15,56,223,208
-DB 102,15,56,223,216
-DB 102,15,56,223,224
-DB 102,15,56,223,232
-DB 102,15,56,223,240
-DB 102,15,56,223,248
- ret
-__aesni_decrypt6 ENDP
-ALIGN 16
-_aesni_ecb_encrypt PROC PUBLIC
-$L_aesni_ecb_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- mov ebx,DWORD PTR 36[esp]
- and eax,-16
- jz $L012ecb_ret
- mov ecx,DWORD PTR 240[edx]
- test ebx,ebx
- jz $L013ecb_decrypt
- mov ebp,edx
- mov ebx,ecx
- cmp eax,96
- jb $L014ecb_enc_tail
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- movdqu xmm5,XMMWORD PTR 48[esi]
- movdqu xmm6,XMMWORD PTR 64[esi]
- movdqu xmm7,XMMWORD PTR 80[esi]
- lea esi,DWORD PTR 96[esi]
- sub eax,96
- jmp $L015ecb_enc_loop6_enter
-ALIGN 16
-$L016ecb_enc_loop6:
- movups XMMWORD PTR [edi],xmm2
- movdqu xmm2,XMMWORD PTR [esi]
- movups XMMWORD PTR 16[edi],xmm3
- movdqu xmm3,XMMWORD PTR 16[esi]
- movups XMMWORD PTR 32[edi],xmm4
- movdqu xmm4,XMMWORD PTR 32[esi]
- movups XMMWORD PTR 48[edi],xmm5
- movdqu xmm5,XMMWORD PTR 48[esi]
- movups XMMWORD PTR 64[edi],xmm6
- movdqu xmm6,XMMWORD PTR 64[esi]
- movups XMMWORD PTR 80[edi],xmm7
- lea edi,DWORD PTR 96[edi]
- movdqu xmm7,XMMWORD PTR 80[esi]
- lea esi,DWORD PTR 96[esi]
-$L015ecb_enc_loop6_enter:
- call __aesni_encrypt6
- mov edx,ebp
- mov ecx,ebx
- sub eax,96
- jnc $L016ecb_enc_loop6
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
- movups XMMWORD PTR 64[edi],xmm6
- movups XMMWORD PTR 80[edi],xmm7
- lea edi,DWORD PTR 96[edi]
- add eax,96
- jz $L012ecb_ret
-$L014ecb_enc_tail:
- movups xmm2,XMMWORD PTR [esi]
- cmp eax,32
- jb $L017ecb_enc_one
- movups xmm3,XMMWORD PTR 16[esi]
- je $L018ecb_enc_two
- movups xmm4,XMMWORD PTR 32[esi]
- cmp eax,64
- jb $L019ecb_enc_three
- movups xmm5,XMMWORD PTR 48[esi]
- je $L020ecb_enc_four
- movups xmm6,XMMWORD PTR 64[esi]
- xorps xmm7,xmm7
- call __aesni_encrypt6
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
- movups XMMWORD PTR 64[edi],xmm6
- jmp $L012ecb_ret
-ALIGN 16
-$L017ecb_enc_one:
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L021enc1_loop_3:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L021enc1_loop_3
-DB 102,15,56,221,209
- movups XMMWORD PTR [edi],xmm2
- jmp $L012ecb_ret
-ALIGN 16
-$L018ecb_enc_two:
- call __aesni_encrypt2
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- jmp $L012ecb_ret
-ALIGN 16
-$L019ecb_enc_three:
- call __aesni_encrypt3
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- jmp $L012ecb_ret
-ALIGN 16
-$L020ecb_enc_four:
- call __aesni_encrypt4
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
- jmp $L012ecb_ret
-ALIGN 16
-$L013ecb_decrypt:
- mov ebp,edx
- mov ebx,ecx
- cmp eax,96
- jb $L022ecb_dec_tail
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- movdqu xmm5,XMMWORD PTR 48[esi]
- movdqu xmm6,XMMWORD PTR 64[esi]
- movdqu xmm7,XMMWORD PTR 80[esi]
- lea esi,DWORD PTR 96[esi]
- sub eax,96
- jmp $L023ecb_dec_loop6_enter
-ALIGN 16
-$L024ecb_dec_loop6:
- movups XMMWORD PTR [edi],xmm2
- movdqu xmm2,XMMWORD PTR [esi]
- movups XMMWORD PTR 16[edi],xmm3
- movdqu xmm3,XMMWORD PTR 16[esi]
- movups XMMWORD PTR 32[edi],xmm4
- movdqu xmm4,XMMWORD PTR 32[esi]
- movups XMMWORD PTR 48[edi],xmm5
- movdqu xmm5,XMMWORD PTR 48[esi]
- movups XMMWORD PTR 64[edi],xmm6
- movdqu xmm6,XMMWORD PTR 64[esi]
- movups XMMWORD PTR 80[edi],xmm7
- lea edi,DWORD PTR 96[edi]
- movdqu xmm7,XMMWORD PTR 80[esi]
- lea esi,DWORD PTR 96[esi]
-$L023ecb_dec_loop6_enter:
- call __aesni_decrypt6
- mov edx,ebp
- mov ecx,ebx
- sub eax,96
- jnc $L024ecb_dec_loop6
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
- movups XMMWORD PTR 64[edi],xmm6
- movups XMMWORD PTR 80[edi],xmm7
- lea edi,DWORD PTR 96[edi]
- add eax,96
- jz $L012ecb_ret
-$L022ecb_dec_tail:
- movups xmm2,XMMWORD PTR [esi]
- cmp eax,32
- jb $L025ecb_dec_one
- movups xmm3,XMMWORD PTR 16[esi]
- je $L026ecb_dec_two
- movups xmm4,XMMWORD PTR 32[esi]
- cmp eax,64
- jb $L027ecb_dec_three
- movups xmm5,XMMWORD PTR 48[esi]
- je $L028ecb_dec_four
- movups xmm6,XMMWORD PTR 64[esi]
- xorps xmm7,xmm7
- call __aesni_decrypt6
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
- movups XMMWORD PTR 64[edi],xmm6
- jmp $L012ecb_ret
-ALIGN 16
-$L025ecb_dec_one:
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L029dec1_loop_4:
-DB 102,15,56,222,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L029dec1_loop_4
-DB 102,15,56,223,209
- movups XMMWORD PTR [edi],xmm2
- jmp $L012ecb_ret
-ALIGN 16
-$L026ecb_dec_two:
- call __aesni_decrypt2
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- jmp $L012ecb_ret
-ALIGN 16
-$L027ecb_dec_three:
- call __aesni_decrypt3
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- jmp $L012ecb_ret
-ALIGN 16
-$L028ecb_dec_four:
- call __aesni_decrypt4
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
-$L012ecb_ret:
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- pxor xmm6,xmm6
- pxor xmm7,xmm7
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_aesni_ecb_encrypt ENDP
-ALIGN 16
-_aesni_ccm64_encrypt_blocks PROC PUBLIC
-$L_aesni_ccm64_encrypt_blocks_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- mov ebx,DWORD PTR 36[esp]
- mov ecx,DWORD PTR 40[esp]
- mov ebp,esp
- sub esp,60
- and esp,-16
- mov DWORD PTR 48[esp],ebp
- movdqu xmm7,XMMWORD PTR [ebx]
- movdqu xmm3,XMMWORD PTR [ecx]
- mov ecx,DWORD PTR 240[edx]
- mov DWORD PTR [esp],202182159
- mov DWORD PTR 4[esp],134810123
- mov DWORD PTR 8[esp],67438087
- mov DWORD PTR 12[esp],66051
- mov ebx,1
- xor ebp,ebp
- mov DWORD PTR 16[esp],ebx
- mov DWORD PTR 20[esp],ebp
- mov DWORD PTR 24[esp],ebp
- mov DWORD PTR 28[esp],ebp
- shl ecx,4
- mov ebx,16
- lea ebp,DWORD PTR [edx]
- movdqa xmm5,XMMWORD PTR [esp]
- movdqa xmm2,xmm7
- lea edx,DWORD PTR 32[ecx*1+edx]
- sub ebx,ecx
-DB 102,15,56,0,253
-$L030ccm64_enc_outer:
- movups xmm0,XMMWORD PTR [ebp]
- mov ecx,ebx
- movups xmm6,XMMWORD PTR [esi]
- xorps xmm2,xmm0
- movups xmm1,XMMWORD PTR 16[ebp]
- xorps xmm0,xmm6
- xorps xmm3,xmm0
- movups xmm0,XMMWORD PTR 32[ebp]
-$L031ccm64_enc2_loop:
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- movups xmm1,XMMWORD PTR [ecx*1+edx]
- add ecx,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
- jnz $L031ccm64_enc2_loop
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- paddq xmm7,XMMWORD PTR 16[esp]
- dec eax
-DB 102,15,56,221,208
-DB 102,15,56,221,216
- lea esi,DWORD PTR 16[esi]
- xorps xmm6,xmm2
- movdqa xmm2,xmm7
- movups XMMWORD PTR [edi],xmm6
-DB 102,15,56,0,213
- lea edi,DWORD PTR 16[edi]
- jnz $L030ccm64_enc_outer
- mov esp,DWORD PTR 48[esp]
- mov edi,DWORD PTR 40[esp]
- movups XMMWORD PTR [edi],xmm3
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- pxor xmm6,xmm6
- pxor xmm7,xmm7
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_aesni_ccm64_encrypt_blocks ENDP
-ALIGN 16
-_aesni_ccm64_decrypt_blocks PROC PUBLIC
-$L_aesni_ccm64_decrypt_blocks_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- mov ebx,DWORD PTR 36[esp]
- mov ecx,DWORD PTR 40[esp]
- mov ebp,esp
- sub esp,60
- and esp,-16
- mov DWORD PTR 48[esp],ebp
- movdqu xmm7,XMMWORD PTR [ebx]
- movdqu xmm3,XMMWORD PTR [ecx]
- mov ecx,DWORD PTR 240[edx]
- mov DWORD PTR [esp],202182159
- mov DWORD PTR 4[esp],134810123
- mov DWORD PTR 8[esp],67438087
- mov DWORD PTR 12[esp],66051
- mov ebx,1
- xor ebp,ebp
- mov DWORD PTR 16[esp],ebx
- mov DWORD PTR 20[esp],ebp
- mov DWORD PTR 24[esp],ebp
- mov DWORD PTR 28[esp],ebp
- movdqa xmm5,XMMWORD PTR [esp]
- movdqa xmm2,xmm7
- mov ebp,edx
- mov ebx,ecx
-DB 102,15,56,0,253
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L032enc1_loop_5:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L032enc1_loop_5
-DB 102,15,56,221,209
- shl ebx,4
- mov ecx,16
- movups xmm6,XMMWORD PTR [esi]
- paddq xmm7,XMMWORD PTR 16[esp]
- lea esi,QWORD PTR 16[esi]
- sub ecx,ebx
- lea edx,DWORD PTR 32[ebx*1+ebp]
- mov ebx,ecx
- jmp $L033ccm64_dec_outer
-ALIGN 16
-$L033ccm64_dec_outer:
- xorps xmm6,xmm2
- movdqa xmm2,xmm7
- movups XMMWORD PTR [edi],xmm6
- lea edi,DWORD PTR 16[edi]
-DB 102,15,56,0,213
- sub eax,1
- jz $L034ccm64_dec_break
- movups xmm0,XMMWORD PTR [ebp]
- mov ecx,ebx
- movups xmm1,XMMWORD PTR 16[ebp]
- xorps xmm6,xmm0
- xorps xmm2,xmm0
- xorps xmm3,xmm6
- movups xmm0,XMMWORD PTR 32[ebp]
-$L035ccm64_dec2_loop:
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- movups xmm1,XMMWORD PTR [ecx*1+edx]
- add ecx,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
- jnz $L035ccm64_dec2_loop
- movups xmm6,XMMWORD PTR [esi]
- paddq xmm7,XMMWORD PTR 16[esp]
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,221,208
-DB 102,15,56,221,216
- lea esi,QWORD PTR 16[esi]
- jmp $L033ccm64_dec_outer
-ALIGN 16
-$L034ccm64_dec_break:
- mov ecx,DWORD PTR 240[ebp]
- mov edx,ebp
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- xorps xmm6,xmm0
- lea edx,DWORD PTR 32[edx]
- xorps xmm3,xmm6
-$L036enc1_loop_6:
-DB 102,15,56,220,217
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L036enc1_loop_6
-DB 102,15,56,221,217
- mov esp,DWORD PTR 48[esp]
- mov edi,DWORD PTR 40[esp]
- movups XMMWORD PTR [edi],xmm3
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- pxor xmm6,xmm6
- pxor xmm7,xmm7
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_aesni_ccm64_decrypt_blocks ENDP
-ALIGN 16
-_aesni_ctr32_encrypt_blocks PROC PUBLIC
-$L_aesni_ctr32_encrypt_blocks_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- mov ebx,DWORD PTR 36[esp]
- mov ebp,esp
- sub esp,88
- and esp,-16
- mov DWORD PTR 80[esp],ebp
- cmp eax,1
- je $L037ctr32_one_shortcut
- movdqu xmm7,XMMWORD PTR [ebx]
- mov DWORD PTR [esp],202182159
- mov DWORD PTR 4[esp],134810123
- mov DWORD PTR 8[esp],67438087
- mov DWORD PTR 12[esp],66051
- mov ecx,6
- xor ebp,ebp
- mov DWORD PTR 16[esp],ecx
- mov DWORD PTR 20[esp],ecx
- mov DWORD PTR 24[esp],ecx
- mov DWORD PTR 28[esp],ebp
-DB 102,15,58,22,251,3
-DB 102,15,58,34,253,3
- mov ecx,DWORD PTR 240[edx]
- bswap ebx
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- movdqa xmm2,XMMWORD PTR [esp]
-DB 102,15,58,34,195,0
- lea ebp,DWORD PTR 3[ebx]
-DB 102,15,58,34,205,0
- inc ebx
-DB 102,15,58,34,195,1
- inc ebp
-DB 102,15,58,34,205,1
- inc ebx
-DB 102,15,58,34,195,2
- inc ebp
-DB 102,15,58,34,205,2
- movdqa XMMWORD PTR 48[esp],xmm0
-DB 102,15,56,0,194
- movdqu xmm6,XMMWORD PTR [edx]
- movdqa XMMWORD PTR 64[esp],xmm1
-DB 102,15,56,0,202
- pshufd xmm2,xmm0,192
- pshufd xmm3,xmm0,128
- cmp eax,6
- jb $L038ctr32_tail
- pxor xmm7,xmm6
- shl ecx,4
- mov ebx,16
- movdqa XMMWORD PTR 32[esp],xmm7
- mov ebp,edx
- sub ebx,ecx
- lea edx,DWORD PTR 32[ecx*1+edx]
- sub eax,6
- jmp $L039ctr32_loop6
-ALIGN 16
-$L039ctr32_loop6:
- pshufd xmm4,xmm0,64
- movdqa xmm0,XMMWORD PTR 32[esp]
- pshufd xmm5,xmm1,192
- pxor xmm2,xmm0
- pshufd xmm6,xmm1,128
- pxor xmm3,xmm0
- pshufd xmm7,xmm1,64
- movups xmm1,XMMWORD PTR 16[ebp]
- pxor xmm4,xmm0
- pxor xmm5,xmm0
-DB 102,15,56,220,209
- pxor xmm6,xmm0
- pxor xmm7,xmm0
-DB 102,15,56,220,217
- movups xmm0,XMMWORD PTR 32[ebp]
- mov ecx,ebx
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
- call $L_aesni_encrypt6_enter
- movups xmm1,XMMWORD PTR [esi]
- movups xmm0,XMMWORD PTR 16[esi]
- xorps xmm2,xmm1
- movups xmm1,XMMWORD PTR 32[esi]
- xorps xmm3,xmm0
- movups XMMWORD PTR [edi],xmm2
- movdqa xmm0,XMMWORD PTR 16[esp]
- xorps xmm4,xmm1
- movdqa xmm1,XMMWORD PTR 64[esp]
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- paddd xmm1,xmm0
- paddd xmm0,XMMWORD PTR 48[esp]
- movdqa xmm2,XMMWORD PTR [esp]
- movups xmm3,XMMWORD PTR 48[esi]
- movups xmm4,XMMWORD PTR 64[esi]
- xorps xmm5,xmm3
- movups xmm3,XMMWORD PTR 80[esi]
- lea esi,DWORD PTR 96[esi]
- movdqa XMMWORD PTR 48[esp],xmm0
-DB 102,15,56,0,194
- xorps xmm6,xmm4
- movups XMMWORD PTR 48[edi],xmm5
- xorps xmm7,xmm3
- movdqa XMMWORD PTR 64[esp],xmm1
-DB 102,15,56,0,202
- movups XMMWORD PTR 64[edi],xmm6
- pshufd xmm2,xmm0,192
- movups XMMWORD PTR 80[edi],xmm7
- lea edi,DWORD PTR 96[edi]
- pshufd xmm3,xmm0,128
- sub eax,6
- jnc $L039ctr32_loop6
- add eax,6
- jz $L040ctr32_ret
- movdqu xmm7,XMMWORD PTR [ebp]
- mov edx,ebp
- pxor xmm7,XMMWORD PTR 32[esp]
- mov ecx,DWORD PTR 240[ebp]
-$L038ctr32_tail:
- por xmm2,xmm7
- cmp eax,2
- jb $L041ctr32_one
- pshufd xmm4,xmm0,64
- por xmm3,xmm7
- je $L042ctr32_two
- pshufd xmm5,xmm1,192
- por xmm4,xmm7
- cmp eax,4
- jb $L043ctr32_three
- pshufd xmm6,xmm1,128
- por xmm5,xmm7
- je $L044ctr32_four
- por xmm6,xmm7
- call __aesni_encrypt6
- movups xmm1,XMMWORD PTR [esi]
- movups xmm0,XMMWORD PTR 16[esi]
- xorps xmm2,xmm1
- movups xmm1,XMMWORD PTR 32[esi]
- xorps xmm3,xmm0
- movups xmm0,XMMWORD PTR 48[esi]
- xorps xmm4,xmm1
- movups xmm1,XMMWORD PTR 64[esi]
- xorps xmm5,xmm0
- movups XMMWORD PTR [edi],xmm2
- xorps xmm6,xmm1
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
- movups XMMWORD PTR 64[edi],xmm6
- jmp $L040ctr32_ret
-ALIGN 16
-$L037ctr32_one_shortcut:
- movups xmm2,XMMWORD PTR [ebx]
- mov ecx,DWORD PTR 240[edx]
-$L041ctr32_one:
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L045enc1_loop_7:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L045enc1_loop_7
-DB 102,15,56,221,209
- movups xmm6,XMMWORD PTR [esi]
- xorps xmm6,xmm2
- movups XMMWORD PTR [edi],xmm6
- jmp $L040ctr32_ret
-ALIGN 16
-$L042ctr32_two:
- call __aesni_encrypt2
- movups xmm5,XMMWORD PTR [esi]
- movups xmm6,XMMWORD PTR 16[esi]
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- jmp $L040ctr32_ret
-ALIGN 16
-$L043ctr32_three:
- call __aesni_encrypt3
- movups xmm5,XMMWORD PTR [esi]
- movups xmm6,XMMWORD PTR 16[esi]
- xorps xmm2,xmm5
- movups xmm7,XMMWORD PTR 32[esi]
- xorps xmm3,xmm6
- movups XMMWORD PTR [edi],xmm2
- xorps xmm4,xmm7
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- jmp $L040ctr32_ret
-ALIGN 16
-$L044ctr32_four:
- call __aesni_encrypt4
- movups xmm6,XMMWORD PTR [esi]
- movups xmm7,XMMWORD PTR 16[esi]
- movups xmm1,XMMWORD PTR 32[esi]
- xorps xmm2,xmm6
- movups xmm0,XMMWORD PTR 48[esi]
- xorps xmm3,xmm7
- movups XMMWORD PTR [edi],xmm2
- xorps xmm4,xmm1
- movups XMMWORD PTR 16[edi],xmm3
- xorps xmm5,xmm0
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
-$L040ctr32_ret:
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- movdqa XMMWORD PTR 32[esp],xmm0
- pxor xmm5,xmm5
- movdqa XMMWORD PTR 48[esp],xmm0
- pxor xmm6,xmm6
- movdqa XMMWORD PTR 64[esp],xmm0
- pxor xmm7,xmm7
- mov esp,DWORD PTR 80[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_aesni_ctr32_encrypt_blocks ENDP
-ALIGN 16
-_aesni_xts_encrypt PROC PUBLIC
-$L_aesni_xts_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov edx,DWORD PTR 36[esp]
- mov esi,DWORD PTR 40[esp]
- mov ecx,DWORD PTR 240[edx]
- movups xmm2,XMMWORD PTR [esi]
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L046enc1_loop_8:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L046enc1_loop_8
-DB 102,15,56,221,209
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- mov ebp,esp
- sub esp,120
- mov ecx,DWORD PTR 240[edx]
- and esp,-16
- mov DWORD PTR 96[esp],135
- mov DWORD PTR 100[esp],0
- mov DWORD PTR 104[esp],1
- mov DWORD PTR 108[esp],0
- mov DWORD PTR 112[esp],eax
- mov DWORD PTR 116[esp],ebp
- movdqa xmm1,xmm2
- pxor xmm0,xmm0
- movdqa xmm3,XMMWORD PTR 96[esp]
- pcmpgtd xmm0,xmm1
- and eax,-16
- mov ebp,edx
- mov ebx,ecx
- sub eax,96
- jc $L047xts_enc_short
- shl ecx,4
- mov ebx,16
- sub ebx,ecx
- lea edx,DWORD PTR 32[ecx*1+edx]
- jmp $L048xts_enc_loop6
-ALIGN 16
-$L048xts_enc_loop6:
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa XMMWORD PTR [esp],xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa XMMWORD PTR 16[esp],xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa XMMWORD PTR 32[esp],xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa XMMWORD PTR 48[esp],xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- pshufd xmm7,xmm0,19
- movdqa XMMWORD PTR 64[esp],xmm1
- paddq xmm1,xmm1
- movups xmm0,XMMWORD PTR [ebp]
- pand xmm7,xmm3
- movups xmm2,XMMWORD PTR [esi]
- pxor xmm7,xmm1
- mov ecx,ebx
- movdqu xmm3,XMMWORD PTR 16[esi]
- xorps xmm2,xmm0
- movdqu xmm4,XMMWORD PTR 32[esi]
- pxor xmm3,xmm0
- movdqu xmm5,XMMWORD PTR 48[esi]
- pxor xmm4,xmm0
- movdqu xmm6,XMMWORD PTR 64[esi]
- pxor xmm5,xmm0
- movdqu xmm1,XMMWORD PTR 80[esi]
- pxor xmm6,xmm0
- lea esi,DWORD PTR 96[esi]
- pxor xmm2,XMMWORD PTR [esp]
- movdqa XMMWORD PTR 80[esp],xmm7
- pxor xmm7,xmm1
- movups xmm1,XMMWORD PTR 16[ebp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,XMMWORD PTR 32[esp]
-DB 102,15,56,220,209
- pxor xmm5,XMMWORD PTR 48[esp]
- pxor xmm6,XMMWORD PTR 64[esp]
-DB 102,15,56,220,217
- pxor xmm7,xmm0
- movups xmm0,XMMWORD PTR 32[ebp]
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
- call $L_aesni_encrypt6_enter
- movdqa xmm1,XMMWORD PTR 80[esp]
- pxor xmm0,xmm0
- xorps xmm2,XMMWORD PTR [esp]
- pcmpgtd xmm0,xmm1
- xorps xmm3,XMMWORD PTR 16[esp]
- movups XMMWORD PTR [edi],xmm2
- xorps xmm4,XMMWORD PTR 32[esp]
- movups XMMWORD PTR 16[edi],xmm3
- xorps xmm5,XMMWORD PTR 48[esp]
- movups XMMWORD PTR 32[edi],xmm4
- xorps xmm6,XMMWORD PTR 64[esp]
- movups XMMWORD PTR 48[edi],xmm5
- xorps xmm7,xmm1
- movups XMMWORD PTR 64[edi],xmm6
- pshufd xmm2,xmm0,19
- movups XMMWORD PTR 80[edi],xmm7
- lea edi,DWORD PTR 96[edi]
- movdqa xmm3,XMMWORD PTR 96[esp]
- pxor xmm0,xmm0
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- sub eax,96
- jnc $L048xts_enc_loop6
- mov ecx,DWORD PTR 240[ebp]
- mov edx,ebp
- mov ebx,ecx
-$L047xts_enc_short:
- add eax,96
- jz $L049xts_enc_done6x
- movdqa xmm5,xmm1
- cmp eax,32
- jb $L050xts_enc_one
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- je $L051xts_enc_two
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa xmm6,xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- cmp eax,64
- jb $L052xts_enc_three
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa xmm7,xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- movdqa XMMWORD PTR [esp],xmm5
- movdqa XMMWORD PTR 16[esp],xmm6
- je $L053xts_enc_four
- movdqa XMMWORD PTR 32[esp],xmm7
- pshufd xmm7,xmm0,19
- movdqa XMMWORD PTR 48[esp],xmm1
- paddq xmm1,xmm1
- pand xmm7,xmm3
- pxor xmm7,xmm1
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- pxor xmm2,XMMWORD PTR [esp]
- movdqu xmm5,XMMWORD PTR 48[esi]
- pxor xmm3,XMMWORD PTR 16[esp]
- movdqu xmm6,XMMWORD PTR 64[esi]
- pxor xmm4,XMMWORD PTR 32[esp]
- lea esi,DWORD PTR 80[esi]
- pxor xmm5,XMMWORD PTR 48[esp]
- movdqa XMMWORD PTR 64[esp],xmm7
- pxor xmm6,xmm7
- call __aesni_encrypt6
- movaps xmm1,XMMWORD PTR 64[esp]
- xorps xmm2,XMMWORD PTR [esp]
- xorps xmm3,XMMWORD PTR 16[esp]
- xorps xmm4,XMMWORD PTR 32[esp]
- movups XMMWORD PTR [edi],xmm2
- xorps xmm5,XMMWORD PTR 48[esp]
- movups XMMWORD PTR 16[edi],xmm3
- xorps xmm6,xmm1
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
- movups XMMWORD PTR 64[edi],xmm6
- lea edi,DWORD PTR 80[edi]
- jmp $L054xts_enc_done
-ALIGN 16
-$L050xts_enc_one:
- movups xmm2,XMMWORD PTR [esi]
- lea esi,DWORD PTR 16[esi]
- xorps xmm2,xmm5
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L055enc1_loop_9:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L055enc1_loop_9
-DB 102,15,56,221,209
- xorps xmm2,xmm5
- movups XMMWORD PTR [edi],xmm2
- lea edi,DWORD PTR 16[edi]
- movdqa xmm1,xmm5
- jmp $L054xts_enc_done
-ALIGN 16
-$L051xts_enc_two:
- movaps xmm6,xmm1
- movups xmm2,XMMWORD PTR [esi]
- movups xmm3,XMMWORD PTR 16[esi]
- lea esi,DWORD PTR 32[esi]
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- call __aesni_encrypt2
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- lea edi,DWORD PTR 32[edi]
- movdqa xmm1,xmm6
- jmp $L054xts_enc_done
-ALIGN 16
-$L052xts_enc_three:
- movaps xmm7,xmm1
- movups xmm2,XMMWORD PTR [esi]
- movups xmm3,XMMWORD PTR 16[esi]
- movups xmm4,XMMWORD PTR 32[esi]
- lea esi,DWORD PTR 48[esi]
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- xorps xmm4,xmm7
- call __aesni_encrypt3
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- xorps xmm4,xmm7
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- lea edi,DWORD PTR 48[edi]
- movdqa xmm1,xmm7
- jmp $L054xts_enc_done
-ALIGN 16
-$L053xts_enc_four:
- movaps xmm6,xmm1
- movups xmm2,XMMWORD PTR [esi]
- movups xmm3,XMMWORD PTR 16[esi]
- movups xmm4,XMMWORD PTR 32[esi]
- xorps xmm2,XMMWORD PTR [esp]
- movups xmm5,XMMWORD PTR 48[esi]
- lea esi,DWORD PTR 64[esi]
- xorps xmm3,XMMWORD PTR 16[esp]
- xorps xmm4,xmm7
- xorps xmm5,xmm6
- call __aesni_encrypt4
- xorps xmm2,XMMWORD PTR [esp]
- xorps xmm3,XMMWORD PTR 16[esp]
- xorps xmm4,xmm7
- movups XMMWORD PTR [edi],xmm2
- xorps xmm5,xmm6
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
- lea edi,DWORD PTR 64[edi]
- movdqa xmm1,xmm6
- jmp $L054xts_enc_done
-ALIGN 16
-$L049xts_enc_done6x:
- mov eax,DWORD PTR 112[esp]
- and eax,15
- jz $L056xts_enc_ret
- movdqa xmm5,xmm1
- mov DWORD PTR 112[esp],eax
- jmp $L057xts_enc_steal
-ALIGN 16
-$L054xts_enc_done:
- mov eax,DWORD PTR 112[esp]
- pxor xmm0,xmm0
- and eax,15
- jz $L056xts_enc_ret
- pcmpgtd xmm0,xmm1
- mov DWORD PTR 112[esp],eax
- pshufd xmm5,xmm0,19
- paddq xmm1,xmm1
- pand xmm5,XMMWORD PTR 96[esp]
- pxor xmm5,xmm1
-$L057xts_enc_steal:
- movzx ecx,BYTE PTR [esi]
- movzx edx,BYTE PTR [edi-16]
- lea esi,DWORD PTR 1[esi]
- mov BYTE PTR [edi-16],cl
- mov BYTE PTR [edi],dl
- lea edi,DWORD PTR 1[edi]
- sub eax,1
- jnz $L057xts_enc_steal
- sub edi,DWORD PTR 112[esp]
- mov edx,ebp
- mov ecx,ebx
- movups xmm2,XMMWORD PTR [edi-16]
- xorps xmm2,xmm5
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L058enc1_loop_10:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L058enc1_loop_10
-DB 102,15,56,221,209
- xorps xmm2,xmm5
- movups XMMWORD PTR [edi-16],xmm2
-$L056xts_enc_ret:
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- movdqa XMMWORD PTR [esp],xmm0
- pxor xmm3,xmm3
- movdqa XMMWORD PTR 16[esp],xmm0
- pxor xmm4,xmm4
- movdqa XMMWORD PTR 32[esp],xmm0
- pxor xmm5,xmm5
- movdqa XMMWORD PTR 48[esp],xmm0
- pxor xmm6,xmm6
- movdqa XMMWORD PTR 64[esp],xmm0
- pxor xmm7,xmm7
- movdqa XMMWORD PTR 80[esp],xmm0
- mov esp,DWORD PTR 116[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_aesni_xts_encrypt ENDP
-ALIGN 16
-_aesni_xts_decrypt PROC PUBLIC
-$L_aesni_xts_decrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov edx,DWORD PTR 36[esp]
- mov esi,DWORD PTR 40[esp]
- mov ecx,DWORD PTR 240[edx]
- movups xmm2,XMMWORD PTR [esi]
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L059enc1_loop_11:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L059enc1_loop_11
-DB 102,15,56,221,209
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- mov ebp,esp
- sub esp,120
- and esp,-16
- xor ebx,ebx
- test eax,15
- setnz bl
- shl ebx,4
- sub eax,ebx
- mov DWORD PTR 96[esp],135
- mov DWORD PTR 100[esp],0
- mov DWORD PTR 104[esp],1
- mov DWORD PTR 108[esp],0
- mov DWORD PTR 112[esp],eax
- mov DWORD PTR 116[esp],ebp
- mov ecx,DWORD PTR 240[edx]
- mov ebp,edx
- mov ebx,ecx
- movdqa xmm1,xmm2
- pxor xmm0,xmm0
- movdqa xmm3,XMMWORD PTR 96[esp]
- pcmpgtd xmm0,xmm1
- and eax,-16
- sub eax,96
- jc $L060xts_dec_short
- shl ecx,4
- mov ebx,16
- sub ebx,ecx
- lea edx,DWORD PTR 32[ecx*1+edx]
- jmp $L061xts_dec_loop6
-ALIGN 16
-$L061xts_dec_loop6:
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa XMMWORD PTR [esp],xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa XMMWORD PTR 16[esp],xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa XMMWORD PTR 32[esp],xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa XMMWORD PTR 48[esp],xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- pshufd xmm7,xmm0,19
- movdqa XMMWORD PTR 64[esp],xmm1
- paddq xmm1,xmm1
- movups xmm0,XMMWORD PTR [ebp]
- pand xmm7,xmm3
- movups xmm2,XMMWORD PTR [esi]
- pxor xmm7,xmm1
- mov ecx,ebx
- movdqu xmm3,XMMWORD PTR 16[esi]
- xorps xmm2,xmm0
- movdqu xmm4,XMMWORD PTR 32[esi]
- pxor xmm3,xmm0
- movdqu xmm5,XMMWORD PTR 48[esi]
- pxor xmm4,xmm0
- movdqu xmm6,XMMWORD PTR 64[esi]
- pxor xmm5,xmm0
- movdqu xmm1,XMMWORD PTR 80[esi]
- pxor xmm6,xmm0
- lea esi,DWORD PTR 96[esi]
- pxor xmm2,XMMWORD PTR [esp]
- movdqa XMMWORD PTR 80[esp],xmm7
- pxor xmm7,xmm1
- movups xmm1,XMMWORD PTR 16[ebp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,XMMWORD PTR 32[esp]
-DB 102,15,56,222,209
- pxor xmm5,XMMWORD PTR 48[esp]
- pxor xmm6,XMMWORD PTR 64[esp]
-DB 102,15,56,222,217
- pxor xmm7,xmm0
- movups xmm0,XMMWORD PTR 32[ebp]
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
- call $L_aesni_decrypt6_enter
- movdqa xmm1,XMMWORD PTR 80[esp]
- pxor xmm0,xmm0
- xorps xmm2,XMMWORD PTR [esp]
- pcmpgtd xmm0,xmm1
- xorps xmm3,XMMWORD PTR 16[esp]
- movups XMMWORD PTR [edi],xmm2
- xorps xmm4,XMMWORD PTR 32[esp]
- movups XMMWORD PTR 16[edi],xmm3
- xorps xmm5,XMMWORD PTR 48[esp]
- movups XMMWORD PTR 32[edi],xmm4
- xorps xmm6,XMMWORD PTR 64[esp]
- movups XMMWORD PTR 48[edi],xmm5
- xorps xmm7,xmm1
- movups XMMWORD PTR 64[edi],xmm6
- pshufd xmm2,xmm0,19
- movups XMMWORD PTR 80[edi],xmm7
- lea edi,DWORD PTR 96[edi]
- movdqa xmm3,XMMWORD PTR 96[esp]
- pxor xmm0,xmm0
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- sub eax,96
- jnc $L061xts_dec_loop6
- mov ecx,DWORD PTR 240[ebp]
- mov edx,ebp
- mov ebx,ecx
-$L060xts_dec_short:
- add eax,96
- jz $L062xts_dec_done6x
- movdqa xmm5,xmm1
- cmp eax,32
- jb $L063xts_dec_one
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- je $L064xts_dec_two
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa xmm6,xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- cmp eax,64
- jb $L065xts_dec_three
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa xmm7,xmm1
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
- movdqa XMMWORD PTR [esp],xmm5
- movdqa XMMWORD PTR 16[esp],xmm6
- je $L066xts_dec_four
- movdqa XMMWORD PTR 32[esp],xmm7
- pshufd xmm7,xmm0,19
- movdqa XMMWORD PTR 48[esp],xmm1
- paddq xmm1,xmm1
- pand xmm7,xmm3
- pxor xmm7,xmm1
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- pxor xmm2,XMMWORD PTR [esp]
- movdqu xmm5,XMMWORD PTR 48[esi]
- pxor xmm3,XMMWORD PTR 16[esp]
- movdqu xmm6,XMMWORD PTR 64[esi]
- pxor xmm4,XMMWORD PTR 32[esp]
- lea esi,DWORD PTR 80[esi]
- pxor xmm5,XMMWORD PTR 48[esp]
- movdqa XMMWORD PTR 64[esp],xmm7
- pxor xmm6,xmm7
- call __aesni_decrypt6
- movaps xmm1,XMMWORD PTR 64[esp]
- xorps xmm2,XMMWORD PTR [esp]
- xorps xmm3,XMMWORD PTR 16[esp]
- xorps xmm4,XMMWORD PTR 32[esp]
- movups XMMWORD PTR [edi],xmm2
- xorps xmm5,XMMWORD PTR 48[esp]
- movups XMMWORD PTR 16[edi],xmm3
- xorps xmm6,xmm1
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
- movups XMMWORD PTR 64[edi],xmm6
- lea edi,DWORD PTR 80[edi]
- jmp $L067xts_dec_done
-ALIGN 16
-$L063xts_dec_one:
- movups xmm2,XMMWORD PTR [esi]
- lea esi,DWORD PTR 16[esi]
- xorps xmm2,xmm5
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L068dec1_loop_12:
-DB 102,15,56,222,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L068dec1_loop_12
-DB 102,15,56,223,209
- xorps xmm2,xmm5
- movups XMMWORD PTR [edi],xmm2
- lea edi,DWORD PTR 16[edi]
- movdqa xmm1,xmm5
- jmp $L067xts_dec_done
-ALIGN 16
-$L064xts_dec_two:
- movaps xmm6,xmm1
- movups xmm2,XMMWORD PTR [esi]
- movups xmm3,XMMWORD PTR 16[esi]
- lea esi,DWORD PTR 32[esi]
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- call __aesni_decrypt2
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- lea edi,DWORD PTR 32[edi]
- movdqa xmm1,xmm6
- jmp $L067xts_dec_done
-ALIGN 16
-$L065xts_dec_three:
- movaps xmm7,xmm1
- movups xmm2,XMMWORD PTR [esi]
- movups xmm3,XMMWORD PTR 16[esi]
- movups xmm4,XMMWORD PTR 32[esi]
- lea esi,DWORD PTR 48[esi]
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- xorps xmm4,xmm7
- call __aesni_decrypt3
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- xorps xmm4,xmm7
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- lea edi,DWORD PTR 48[edi]
- movdqa xmm1,xmm7
- jmp $L067xts_dec_done
-ALIGN 16
-$L066xts_dec_four:
- movaps xmm6,xmm1
- movups xmm2,XMMWORD PTR [esi]
- movups xmm3,XMMWORD PTR 16[esi]
- movups xmm4,XMMWORD PTR 32[esi]
- xorps xmm2,XMMWORD PTR [esp]
- movups xmm5,XMMWORD PTR 48[esi]
- lea esi,DWORD PTR 64[esi]
- xorps xmm3,XMMWORD PTR 16[esp]
- xorps xmm4,xmm7
- xorps xmm5,xmm6
- call __aesni_decrypt4
- xorps xmm2,XMMWORD PTR [esp]
- xorps xmm3,XMMWORD PTR 16[esp]
- xorps xmm4,xmm7
- movups XMMWORD PTR [edi],xmm2
- xorps xmm5,xmm6
- movups XMMWORD PTR 16[edi],xmm3
- movups XMMWORD PTR 32[edi],xmm4
- movups XMMWORD PTR 48[edi],xmm5
- lea edi,DWORD PTR 64[edi]
- movdqa xmm1,xmm6
- jmp $L067xts_dec_done
-ALIGN 16
-$L062xts_dec_done6x:
- mov eax,DWORD PTR 112[esp]
- and eax,15
- jz $L069xts_dec_ret
- mov DWORD PTR 112[esp],eax
- jmp $L070xts_dec_only_one_more
-ALIGN 16
-$L067xts_dec_done:
- mov eax,DWORD PTR 112[esp]
- pxor xmm0,xmm0
- and eax,15
- jz $L069xts_dec_ret
- pcmpgtd xmm0,xmm1
- mov DWORD PTR 112[esp],eax
- pshufd xmm2,xmm0,19
- pxor xmm0,xmm0
- movdqa xmm3,XMMWORD PTR 96[esp]
- paddq xmm1,xmm1
- pand xmm2,xmm3
- pcmpgtd xmm0,xmm1
- pxor xmm1,xmm2
-$L070xts_dec_only_one_more:
- pshufd xmm5,xmm0,19
- movdqa xmm6,xmm1
- paddq xmm1,xmm1
- pand xmm5,xmm3
- pxor xmm5,xmm1
- mov edx,ebp
- mov ecx,ebx
- movups xmm2,XMMWORD PTR [esi]
- xorps xmm2,xmm5
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L071dec1_loop_13:
-DB 102,15,56,222,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L071dec1_loop_13
-DB 102,15,56,223,209
- xorps xmm2,xmm5
- movups XMMWORD PTR [edi],xmm2
-$L072xts_dec_steal:
- movzx ecx,BYTE PTR 16[esi]
- movzx edx,BYTE PTR [edi]
- lea esi,DWORD PTR 1[esi]
- mov BYTE PTR [edi],cl
- mov BYTE PTR 16[edi],dl
- lea edi,DWORD PTR 1[edi]
- sub eax,1
- jnz $L072xts_dec_steal
- sub edi,DWORD PTR 112[esp]
- mov edx,ebp
- mov ecx,ebx
- movups xmm2,XMMWORD PTR [edi]
- xorps xmm2,xmm6
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L073dec1_loop_14:
-DB 102,15,56,222,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L073dec1_loop_14
-DB 102,15,56,223,209
- xorps xmm2,xmm6
- movups XMMWORD PTR [edi],xmm2
-$L069xts_dec_ret:
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- movdqa XMMWORD PTR [esp],xmm0
- pxor xmm3,xmm3
- movdqa XMMWORD PTR 16[esp],xmm0
- pxor xmm4,xmm4
- movdqa XMMWORD PTR 32[esp],xmm0
- pxor xmm5,xmm5
- movdqa XMMWORD PTR 48[esp],xmm0
- pxor xmm6,xmm6
- movdqa XMMWORD PTR 64[esp],xmm0
- pxor xmm7,xmm7
- movdqa XMMWORD PTR 80[esp],xmm0
- mov esp,DWORD PTR 116[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_aesni_xts_decrypt ENDP
-ALIGN 16
-_aesni_ocb_encrypt PROC PUBLIC
-$L_aesni_ocb_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov ecx,DWORD PTR 40[esp]
- mov ebx,DWORD PTR 48[esp]
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- movdqu xmm0,XMMWORD PTR [ecx]
- mov ebp,DWORD PTR 36[esp]
- movdqu xmm1,XMMWORD PTR [ebx]
- mov ebx,DWORD PTR 44[esp]
- mov ecx,esp
- sub esp,132
- and esp,-16
- sub edi,esi
- shl eax,4
- lea eax,DWORD PTR [eax*1+esi-96]
- mov DWORD PTR 120[esp],edi
- mov DWORD PTR 124[esp],eax
- mov DWORD PTR 128[esp],ecx
- mov ecx,DWORD PTR 240[edx]
- test ebp,1
- jnz $L074odd
- bsf eax,ebp
- add ebp,1
- shl eax,4
- movdqu xmm7,XMMWORD PTR [eax*1+ebx]
- mov eax,edx
- movdqu xmm2,XMMWORD PTR [esi]
- lea esi,DWORD PTR 16[esi]
- pxor xmm7,xmm0
- pxor xmm1,xmm2
- pxor xmm2,xmm7
- movdqa xmm6,xmm1
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L075enc1_loop_15:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L075enc1_loop_15
-DB 102,15,56,221,209
- xorps xmm2,xmm7
- movdqa xmm0,xmm7
- movdqa xmm1,xmm6
- movups XMMWORD PTR [esi*1+edi-16],xmm2
- mov ecx,DWORD PTR 240[eax]
- mov edx,eax
- mov eax,DWORD PTR 124[esp]
-$L074odd:
- shl ecx,4
- mov edi,16
- sub edi,ecx
- mov DWORD PTR 112[esp],edx
- lea edx,DWORD PTR 32[ecx*1+edx]
- mov DWORD PTR 116[esp],edi
- cmp esi,eax
- ja $L076short
- jmp $L077grandloop
-ALIGN 32
-$L077grandloop:
- lea ecx,DWORD PTR 1[ebp]
- lea eax,DWORD PTR 3[ebp]
- lea edi,DWORD PTR 5[ebp]
- add ebp,6
- bsf ecx,ecx
- bsf eax,eax
- bsf edi,edi
- shl ecx,4
- shl eax,4
- shl edi,4
- movdqu xmm2,XMMWORD PTR [ebx]
- movdqu xmm3,XMMWORD PTR [ecx*1+ebx]
- mov ecx,DWORD PTR 116[esp]
- movdqa xmm4,xmm2
- movdqu xmm5,XMMWORD PTR [eax*1+ebx]
- movdqa xmm6,xmm2
- movdqu xmm7,XMMWORD PTR [edi*1+ebx]
- pxor xmm2,xmm0
- pxor xmm3,xmm2
- movdqa XMMWORD PTR [esp],xmm2
- pxor xmm4,xmm3
- movdqa XMMWORD PTR 16[esp],xmm3
- pxor xmm5,xmm4
- movdqa XMMWORD PTR 32[esp],xmm4
- pxor xmm6,xmm5
- movdqa XMMWORD PTR 48[esp],xmm5
- pxor xmm7,xmm6
- movdqa XMMWORD PTR 64[esp],xmm6
- movdqa XMMWORD PTR 80[esp],xmm7
- movups xmm0,XMMWORD PTR [ecx*1+edx-48]
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- movdqu xmm5,XMMWORD PTR 48[esi]
- movdqu xmm6,XMMWORD PTR 64[esi]
- movdqu xmm7,XMMWORD PTR 80[esi]
- lea esi,DWORD PTR 96[esi]
- pxor xmm1,xmm2
- pxor xmm2,xmm0
- pxor xmm1,xmm3
- pxor xmm3,xmm0
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- pxor xmm1,xmm5
- pxor xmm5,xmm0
- pxor xmm1,xmm6
- pxor xmm6,xmm0
- pxor xmm1,xmm7
- pxor xmm7,xmm0
- movdqa XMMWORD PTR 96[esp],xmm1
- movups xmm1,XMMWORD PTR [ecx*1+edx-32]
- pxor xmm2,XMMWORD PTR [esp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,XMMWORD PTR 32[esp]
- pxor xmm5,XMMWORD PTR 48[esp]
- pxor xmm6,XMMWORD PTR 64[esp]
- pxor xmm7,XMMWORD PTR 80[esp]
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
- mov edi,DWORD PTR 120[esp]
- mov eax,DWORD PTR 124[esp]
- call $L_aesni_encrypt6_enter
- movdqa xmm0,XMMWORD PTR 80[esp]
- pxor xmm2,XMMWORD PTR [esp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,XMMWORD PTR 32[esp]
- pxor xmm5,XMMWORD PTR 48[esp]
- pxor xmm6,XMMWORD PTR 64[esp]
- pxor xmm7,xmm0
- movdqa xmm1,XMMWORD PTR 96[esp]
- movdqu XMMWORD PTR [esi*1+edi-96],xmm2
- movdqu XMMWORD PTR [esi*1+edi-80],xmm3
- movdqu XMMWORD PTR [esi*1+edi-64],xmm4
- movdqu XMMWORD PTR [esi*1+edi-48],xmm5
- movdqu XMMWORD PTR [esi*1+edi-32],xmm6
- movdqu XMMWORD PTR [esi*1+edi-16],xmm7
- cmp esi,eax
- jb $L077grandloop
-$L076short:
- add eax,96
- sub eax,esi
- jz $L078done
- cmp eax,32
- jb $L079one
- je $L080two
- cmp eax,64
- jb $L081three
- je $L082four
- lea ecx,DWORD PTR 1[ebp]
- lea eax,DWORD PTR 3[ebp]
- bsf ecx,ecx
- bsf eax,eax
- shl ecx,4
- shl eax,4
- movdqu xmm2,XMMWORD PTR [ebx]
- movdqu xmm3,XMMWORD PTR [ecx*1+ebx]
- mov ecx,DWORD PTR 116[esp]
- movdqa xmm4,xmm2
- movdqu xmm5,XMMWORD PTR [eax*1+ebx]
- movdqa xmm6,xmm2
- pxor xmm2,xmm0
- pxor xmm3,xmm2
- movdqa XMMWORD PTR [esp],xmm2
- pxor xmm4,xmm3
- movdqa XMMWORD PTR 16[esp],xmm3
- pxor xmm5,xmm4
- movdqa XMMWORD PTR 32[esp],xmm4
- pxor xmm6,xmm5
- movdqa XMMWORD PTR 48[esp],xmm5
- pxor xmm7,xmm6
- movdqa XMMWORD PTR 64[esp],xmm6
- movups xmm0,XMMWORD PTR [ecx*1+edx-48]
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- movdqu xmm5,XMMWORD PTR 48[esi]
- movdqu xmm6,XMMWORD PTR 64[esi]
- pxor xmm7,xmm7
- pxor xmm1,xmm2
- pxor xmm2,xmm0
- pxor xmm1,xmm3
- pxor xmm3,xmm0
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- pxor xmm1,xmm5
- pxor xmm5,xmm0
- pxor xmm1,xmm6
- pxor xmm6,xmm0
- movdqa XMMWORD PTR 96[esp],xmm1
- movups xmm1,XMMWORD PTR [ecx*1+edx-32]
- pxor xmm2,XMMWORD PTR [esp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,XMMWORD PTR 32[esp]
- pxor xmm5,XMMWORD PTR 48[esp]
- pxor xmm6,XMMWORD PTR 64[esp]
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
- mov edi,DWORD PTR 120[esp]
- call $L_aesni_encrypt6_enter
- movdqa xmm0,XMMWORD PTR 64[esp]
- pxor xmm2,XMMWORD PTR [esp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,XMMWORD PTR 32[esp]
- pxor xmm5,XMMWORD PTR 48[esp]
- pxor xmm6,xmm0
- movdqa xmm1,XMMWORD PTR 96[esp]
- movdqu XMMWORD PTR [esi*1+edi],xmm2
- movdqu XMMWORD PTR 16[esi*1+edi],xmm3
- movdqu XMMWORD PTR 32[esi*1+edi],xmm4
- movdqu XMMWORD PTR 48[esi*1+edi],xmm5
- movdqu XMMWORD PTR 64[esi*1+edi],xmm6
- jmp $L078done
-ALIGN 16
-$L079one:
- movdqu xmm7,XMMWORD PTR [ebx]
- mov edx,DWORD PTR 112[esp]
- movdqu xmm2,XMMWORD PTR [esi]
- mov ecx,DWORD PTR 240[edx]
- pxor xmm7,xmm0
- pxor xmm1,xmm2
- pxor xmm2,xmm7
- movdqa xmm6,xmm1
- mov edi,DWORD PTR 120[esp]
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L083enc1_loop_16:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L083enc1_loop_16
-DB 102,15,56,221,209
- xorps xmm2,xmm7
- movdqa xmm0,xmm7
- movdqa xmm1,xmm6
- movups XMMWORD PTR [esi*1+edi],xmm2
- jmp $L078done
-ALIGN 16
-$L080two:
- lea ecx,DWORD PTR 1[ebp]
- mov edx,DWORD PTR 112[esp]
- bsf ecx,ecx
- shl ecx,4
- movdqu xmm6,XMMWORD PTR [ebx]
- movdqu xmm7,XMMWORD PTR [ecx*1+ebx]
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- mov ecx,DWORD PTR 240[edx]
- pxor xmm6,xmm0
- pxor xmm7,xmm6
- pxor xmm1,xmm2
- pxor xmm2,xmm6
- pxor xmm1,xmm3
- pxor xmm3,xmm7
- movdqa xmm5,xmm1
- mov edi,DWORD PTR 120[esp]
- call __aesni_encrypt2
- xorps xmm2,xmm6
- xorps xmm3,xmm7
- movdqa xmm0,xmm7
- movdqa xmm1,xmm5
- movups XMMWORD PTR [esi*1+edi],xmm2
- movups XMMWORD PTR 16[esi*1+edi],xmm3
- jmp $L078done
-ALIGN 16
-$L081three:
- lea ecx,DWORD PTR 1[ebp]
- mov edx,DWORD PTR 112[esp]
- bsf ecx,ecx
- shl ecx,4
- movdqu xmm5,XMMWORD PTR [ebx]
- movdqu xmm6,XMMWORD PTR [ecx*1+ebx]
- movdqa xmm7,xmm5
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- mov ecx,DWORD PTR 240[edx]
- pxor xmm5,xmm0
- pxor xmm6,xmm5
- pxor xmm7,xmm6
- pxor xmm1,xmm2
- pxor xmm2,xmm5
- pxor xmm1,xmm3
- pxor xmm3,xmm6
- pxor xmm1,xmm4
- pxor xmm4,xmm7
- movdqa XMMWORD PTR 96[esp],xmm1
- mov edi,DWORD PTR 120[esp]
- call __aesni_encrypt3
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- xorps xmm4,xmm7
- movdqa xmm0,xmm7
- movdqa xmm1,XMMWORD PTR 96[esp]
- movups XMMWORD PTR [esi*1+edi],xmm2
- movups XMMWORD PTR 16[esi*1+edi],xmm3
- movups XMMWORD PTR 32[esi*1+edi],xmm4
- jmp $L078done
-ALIGN 16
-$L082four:
- lea ecx,DWORD PTR 1[ebp]
- lea eax,DWORD PTR 3[ebp]
- bsf ecx,ecx
- bsf eax,eax
- mov edx,DWORD PTR 112[esp]
- shl ecx,4
- shl eax,4
- movdqu xmm4,XMMWORD PTR [ebx]
- movdqu xmm5,XMMWORD PTR [ecx*1+ebx]
- movdqa xmm6,xmm4
- movdqu xmm7,XMMWORD PTR [eax*1+ebx]
- pxor xmm4,xmm0
- movdqu xmm2,XMMWORD PTR [esi]
- pxor xmm5,xmm4
- movdqu xmm3,XMMWORD PTR 16[esi]
- pxor xmm6,xmm5
- movdqa XMMWORD PTR [esp],xmm4
- pxor xmm7,xmm6
- movdqa XMMWORD PTR 16[esp],xmm5
- movdqu xmm4,XMMWORD PTR 32[esi]
- movdqu xmm5,XMMWORD PTR 48[esi]
- mov ecx,DWORD PTR 240[edx]
- pxor xmm1,xmm2
- pxor xmm2,XMMWORD PTR [esp]
- pxor xmm1,xmm3
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm1,xmm4
- pxor xmm4,xmm6
- pxor xmm1,xmm5
- pxor xmm5,xmm7
- movdqa XMMWORD PTR 96[esp],xmm1
- mov edi,DWORD PTR 120[esp]
- call __aesni_encrypt4
- xorps xmm2,XMMWORD PTR [esp]
- xorps xmm3,XMMWORD PTR 16[esp]
- xorps xmm4,xmm6
- movups XMMWORD PTR [esi*1+edi],xmm2
- xorps xmm5,xmm7
- movups XMMWORD PTR 16[esi*1+edi],xmm3
- movdqa xmm0,xmm7
- movups XMMWORD PTR 32[esi*1+edi],xmm4
- movdqa xmm1,XMMWORD PTR 96[esp]
- movups XMMWORD PTR 48[esi*1+edi],xmm5
-$L078done:
- mov edx,DWORD PTR 128[esp]
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- movdqa XMMWORD PTR [esp],xmm2
- pxor xmm4,xmm4
- movdqa XMMWORD PTR 16[esp],xmm2
- pxor xmm5,xmm5
- movdqa XMMWORD PTR 32[esp],xmm2
- pxor xmm6,xmm6
- movdqa XMMWORD PTR 48[esp],xmm2
- pxor xmm7,xmm7
- movdqa XMMWORD PTR 64[esp],xmm2
- movdqa XMMWORD PTR 80[esp],xmm2
- movdqa XMMWORD PTR 96[esp],xmm2
- lea esp,DWORD PTR [edx]
- mov ecx,DWORD PTR 40[esp]
- mov ebx,DWORD PTR 48[esp]
- movdqu XMMWORD PTR [ecx],xmm0
- pxor xmm0,xmm0
- movdqu XMMWORD PTR [ebx],xmm1
- pxor xmm1,xmm1
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_aesni_ocb_encrypt ENDP
-ALIGN 16
-_aesni_ocb_decrypt PROC PUBLIC
-$L_aesni_ocb_decrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov ecx,DWORD PTR 40[esp]
- mov ebx,DWORD PTR 48[esp]
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- movdqu xmm0,XMMWORD PTR [ecx]
- mov ebp,DWORD PTR 36[esp]
- movdqu xmm1,XMMWORD PTR [ebx]
- mov ebx,DWORD PTR 44[esp]
- mov ecx,esp
- sub esp,132
- and esp,-16
- sub edi,esi
- shl eax,4
- lea eax,DWORD PTR [eax*1+esi-96]
- mov DWORD PTR 120[esp],edi
- mov DWORD PTR 124[esp],eax
- mov DWORD PTR 128[esp],ecx
- mov ecx,DWORD PTR 240[edx]
- test ebp,1
- jnz $L084odd
- bsf eax,ebp
- add ebp,1
- shl eax,4
- movdqu xmm7,XMMWORD PTR [eax*1+ebx]
- mov eax,edx
- movdqu xmm2,XMMWORD PTR [esi]
- lea esi,DWORD PTR 16[esi]
- pxor xmm7,xmm0
- pxor xmm2,xmm7
- movdqa xmm6,xmm1
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L085dec1_loop_17:
-DB 102,15,56,222,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L085dec1_loop_17
-DB 102,15,56,223,209
- xorps xmm2,xmm7
- movaps xmm1,xmm6
- movdqa xmm0,xmm7
- xorps xmm1,xmm2
- movups XMMWORD PTR [esi*1+edi-16],xmm2
- mov ecx,DWORD PTR 240[eax]
- mov edx,eax
- mov eax,DWORD PTR 124[esp]
-$L084odd:
- shl ecx,4
- mov edi,16
- sub edi,ecx
- mov DWORD PTR 112[esp],edx
- lea edx,DWORD PTR 32[ecx*1+edx]
- mov DWORD PTR 116[esp],edi
- cmp esi,eax
- ja $L086short
- jmp $L087grandloop
-ALIGN 32
-$L087grandloop:
- lea ecx,DWORD PTR 1[ebp]
- lea eax,DWORD PTR 3[ebp]
- lea edi,DWORD PTR 5[ebp]
- add ebp,6
- bsf ecx,ecx
- bsf eax,eax
- bsf edi,edi
- shl ecx,4
- shl eax,4
- shl edi,4
- movdqu xmm2,XMMWORD PTR [ebx]
- movdqu xmm3,XMMWORD PTR [ecx*1+ebx]
- mov ecx,DWORD PTR 116[esp]
- movdqa xmm4,xmm2
- movdqu xmm5,XMMWORD PTR [eax*1+ebx]
- movdqa xmm6,xmm2
- movdqu xmm7,XMMWORD PTR [edi*1+ebx]
- pxor xmm2,xmm0
- pxor xmm3,xmm2
- movdqa XMMWORD PTR [esp],xmm2
- pxor xmm4,xmm3
- movdqa XMMWORD PTR 16[esp],xmm3
- pxor xmm5,xmm4
- movdqa XMMWORD PTR 32[esp],xmm4
- pxor xmm6,xmm5
- movdqa XMMWORD PTR 48[esp],xmm5
- pxor xmm7,xmm6
- movdqa XMMWORD PTR 64[esp],xmm6
- movdqa XMMWORD PTR 80[esp],xmm7
- movups xmm0,XMMWORD PTR [ecx*1+edx-48]
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- movdqu xmm5,XMMWORD PTR 48[esi]
- movdqu xmm6,XMMWORD PTR 64[esi]
- movdqu xmm7,XMMWORD PTR 80[esi]
- lea esi,DWORD PTR 96[esi]
- movdqa XMMWORD PTR 96[esp],xmm1
- pxor xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
- pxor xmm5,xmm0
- pxor xmm6,xmm0
- pxor xmm7,xmm0
- movups xmm1,XMMWORD PTR [ecx*1+edx-32]
- pxor xmm2,XMMWORD PTR [esp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,XMMWORD PTR 32[esp]
- pxor xmm5,XMMWORD PTR 48[esp]
- pxor xmm6,XMMWORD PTR 64[esp]
- pxor xmm7,XMMWORD PTR 80[esp]
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
- mov edi,DWORD PTR 120[esp]
- mov eax,DWORD PTR 124[esp]
- call $L_aesni_decrypt6_enter
- movdqa xmm0,XMMWORD PTR 80[esp]
- pxor xmm2,XMMWORD PTR [esp]
- movdqa xmm1,XMMWORD PTR 96[esp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,XMMWORD PTR 32[esp]
- pxor xmm5,XMMWORD PTR 48[esp]
- pxor xmm6,XMMWORD PTR 64[esp]
- pxor xmm7,xmm0
- pxor xmm1,xmm2
- movdqu XMMWORD PTR [esi*1+edi-96],xmm2
- pxor xmm1,xmm3
- movdqu XMMWORD PTR [esi*1+edi-80],xmm3
- pxor xmm1,xmm4
- movdqu XMMWORD PTR [esi*1+edi-64],xmm4
- pxor xmm1,xmm5
- movdqu XMMWORD PTR [esi*1+edi-48],xmm5
- pxor xmm1,xmm6
- movdqu XMMWORD PTR [esi*1+edi-32],xmm6
- pxor xmm1,xmm7
- movdqu XMMWORD PTR [esi*1+edi-16],xmm7
- cmp esi,eax
- jb $L087grandloop
-$L086short:
- add eax,96
- sub eax,esi
- jz $L088done
- cmp eax,32
- jb $L089one
- je $L090two
- cmp eax,64
- jb $L091three
- je $L092four
- lea ecx,DWORD PTR 1[ebp]
- lea eax,DWORD PTR 3[ebp]
- bsf ecx,ecx
- bsf eax,eax
- shl ecx,4
- shl eax,4
- movdqu xmm2,XMMWORD PTR [ebx]
- movdqu xmm3,XMMWORD PTR [ecx*1+ebx]
- mov ecx,DWORD PTR 116[esp]
- movdqa xmm4,xmm2
- movdqu xmm5,XMMWORD PTR [eax*1+ebx]
- movdqa xmm6,xmm2
- pxor xmm2,xmm0
- pxor xmm3,xmm2
- movdqa XMMWORD PTR [esp],xmm2
- pxor xmm4,xmm3
- movdqa XMMWORD PTR 16[esp],xmm3
- pxor xmm5,xmm4
- movdqa XMMWORD PTR 32[esp],xmm4
- pxor xmm6,xmm5
- movdqa XMMWORD PTR 48[esp],xmm5
- pxor xmm7,xmm6
- movdqa XMMWORD PTR 64[esp],xmm6
- movups xmm0,XMMWORD PTR [ecx*1+edx-48]
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- movdqu xmm5,XMMWORD PTR 48[esi]
- movdqu xmm6,XMMWORD PTR 64[esi]
- pxor xmm7,xmm7
- movdqa XMMWORD PTR 96[esp],xmm1
- pxor xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
- pxor xmm5,xmm0
- pxor xmm6,xmm0
- movups xmm1,XMMWORD PTR [ecx*1+edx-32]
- pxor xmm2,XMMWORD PTR [esp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,XMMWORD PTR 32[esp]
- pxor xmm5,XMMWORD PTR 48[esp]
- pxor xmm6,XMMWORD PTR 64[esp]
- movups xmm0,XMMWORD PTR [ecx*1+edx-16]
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
- mov edi,DWORD PTR 120[esp]
- call $L_aesni_decrypt6_enter
- movdqa xmm0,XMMWORD PTR 64[esp]
- pxor xmm2,XMMWORD PTR [esp]
- movdqa xmm1,XMMWORD PTR 96[esp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,XMMWORD PTR 32[esp]
- pxor xmm5,XMMWORD PTR 48[esp]
- pxor xmm6,xmm0
- pxor xmm1,xmm2
- movdqu XMMWORD PTR [esi*1+edi],xmm2
- pxor xmm1,xmm3
- movdqu XMMWORD PTR 16[esi*1+edi],xmm3
- pxor xmm1,xmm4
- movdqu XMMWORD PTR 32[esi*1+edi],xmm4
- pxor xmm1,xmm5
- movdqu XMMWORD PTR 48[esi*1+edi],xmm5
- pxor xmm1,xmm6
- movdqu XMMWORD PTR 64[esi*1+edi],xmm6
- jmp $L088done
-ALIGN 16
-$L089one:
- movdqu xmm7,XMMWORD PTR [ebx]
- mov edx,DWORD PTR 112[esp]
- movdqu xmm2,XMMWORD PTR [esi]
- mov ecx,DWORD PTR 240[edx]
- pxor xmm7,xmm0
- pxor xmm2,xmm7
- movdqa xmm6,xmm1
- mov edi,DWORD PTR 120[esp]
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L093dec1_loop_18:
-DB 102,15,56,222,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L093dec1_loop_18
-DB 102,15,56,223,209
- xorps xmm2,xmm7
- movaps xmm1,xmm6
- movdqa xmm0,xmm7
- xorps xmm1,xmm2
- movups XMMWORD PTR [esi*1+edi],xmm2
- jmp $L088done
-ALIGN 16
-$L090two:
- lea ecx,DWORD PTR 1[ebp]
- mov edx,DWORD PTR 112[esp]
- bsf ecx,ecx
- shl ecx,4
- movdqu xmm6,XMMWORD PTR [ebx]
- movdqu xmm7,XMMWORD PTR [ecx*1+ebx]
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- mov ecx,DWORD PTR 240[edx]
- movdqa xmm5,xmm1
- pxor xmm6,xmm0
- pxor xmm7,xmm6
- pxor xmm2,xmm6
- pxor xmm3,xmm7
- mov edi,DWORD PTR 120[esp]
- call __aesni_decrypt2
- xorps xmm2,xmm6
- xorps xmm3,xmm7
- movdqa xmm0,xmm7
- xorps xmm5,xmm2
- movups XMMWORD PTR [esi*1+edi],xmm2
- xorps xmm5,xmm3
- movups XMMWORD PTR 16[esi*1+edi],xmm3
- movaps xmm1,xmm5
- jmp $L088done
-ALIGN 16
-$L091three:
- lea ecx,DWORD PTR 1[ebp]
- mov edx,DWORD PTR 112[esp]
- bsf ecx,ecx
- shl ecx,4
- movdqu xmm5,XMMWORD PTR [ebx]
- movdqu xmm6,XMMWORD PTR [ecx*1+ebx]
- movdqa xmm7,xmm5
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- mov ecx,DWORD PTR 240[edx]
- movdqa XMMWORD PTR 96[esp],xmm1
- pxor xmm5,xmm0
- pxor xmm6,xmm5
- pxor xmm7,xmm6
- pxor xmm2,xmm5
- pxor xmm3,xmm6
- pxor xmm4,xmm7
- mov edi,DWORD PTR 120[esp]
- call __aesni_decrypt3
- movdqa xmm1,XMMWORD PTR 96[esp]
- xorps xmm2,xmm5
- xorps xmm3,xmm6
- xorps xmm4,xmm7
- movups XMMWORD PTR [esi*1+edi],xmm2
- pxor xmm1,xmm2
- movdqa xmm0,xmm7
- movups XMMWORD PTR 16[esi*1+edi],xmm3
- pxor xmm1,xmm3
- movups XMMWORD PTR 32[esi*1+edi],xmm4
- pxor xmm1,xmm4
- jmp $L088done
-ALIGN 16
-$L092four:
- lea ecx,DWORD PTR 1[ebp]
- lea eax,DWORD PTR 3[ebp]
- bsf ecx,ecx
- bsf eax,eax
- mov edx,DWORD PTR 112[esp]
- shl ecx,4
- shl eax,4
- movdqu xmm4,XMMWORD PTR [ebx]
- movdqu xmm5,XMMWORD PTR [ecx*1+ebx]
- movdqa xmm6,xmm4
- movdqu xmm7,XMMWORD PTR [eax*1+ebx]
- pxor xmm4,xmm0
- movdqu xmm2,XMMWORD PTR [esi]
- pxor xmm5,xmm4
- movdqu xmm3,XMMWORD PTR 16[esi]
- pxor xmm6,xmm5
- movdqa XMMWORD PTR [esp],xmm4
- pxor xmm7,xmm6
- movdqa XMMWORD PTR 16[esp],xmm5
- movdqu xmm4,XMMWORD PTR 32[esi]
- movdqu xmm5,XMMWORD PTR 48[esi]
- mov ecx,DWORD PTR 240[edx]
- movdqa XMMWORD PTR 96[esp],xmm1
- pxor xmm2,XMMWORD PTR [esp]
- pxor xmm3,XMMWORD PTR 16[esp]
- pxor xmm4,xmm6
- pxor xmm5,xmm7
- mov edi,DWORD PTR 120[esp]
- call __aesni_decrypt4
- movdqa xmm1,XMMWORD PTR 96[esp]
- xorps xmm2,XMMWORD PTR [esp]
- xorps xmm3,XMMWORD PTR 16[esp]
- xorps xmm4,xmm6
- movups XMMWORD PTR [esi*1+edi],xmm2
- pxor xmm1,xmm2
- xorps xmm5,xmm7
- movups XMMWORD PTR 16[esi*1+edi],xmm3
- pxor xmm1,xmm3
- movdqa xmm0,xmm7
- movups XMMWORD PTR 32[esi*1+edi],xmm4
- pxor xmm1,xmm4
- movups XMMWORD PTR 48[esi*1+edi],xmm5
- pxor xmm1,xmm5
-$L088done:
- mov edx,DWORD PTR 128[esp]
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- movdqa XMMWORD PTR [esp],xmm2
- pxor xmm4,xmm4
- movdqa XMMWORD PTR 16[esp],xmm2
- pxor xmm5,xmm5
- movdqa XMMWORD PTR 32[esp],xmm2
- pxor xmm6,xmm6
- movdqa XMMWORD PTR 48[esp],xmm2
- pxor xmm7,xmm7
- movdqa XMMWORD PTR 64[esp],xmm2
- movdqa XMMWORD PTR 80[esp],xmm2
- movdqa XMMWORD PTR 96[esp],xmm2
- lea esp,DWORD PTR [edx]
- mov ecx,DWORD PTR 40[esp]
- mov ebx,DWORD PTR 48[esp]
- movdqu XMMWORD PTR [ecx],xmm0
- pxor xmm0,xmm0
- movdqu XMMWORD PTR [ebx],xmm1
- pxor xmm1,xmm1
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_aesni_ocb_decrypt ENDP
-ALIGN 16
-_aesni_cbc_encrypt PROC PUBLIC
-$L_aesni_cbc_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- mov ebx,esp
- mov edi,DWORD PTR 24[esp]
- sub ebx,24
- mov eax,DWORD PTR 28[esp]
- and ebx,-16
- mov edx,DWORD PTR 32[esp]
- mov ebp,DWORD PTR 36[esp]
- test eax,eax
- jz $L094cbc_abort
- cmp DWORD PTR 40[esp],0
- xchg ebx,esp
- movups xmm7,XMMWORD PTR [ebp]
- mov ecx,DWORD PTR 240[edx]
- mov ebp,edx
- mov DWORD PTR 16[esp],ebx
- mov ebx,ecx
- je $L095cbc_decrypt
- movaps xmm2,xmm7
- cmp eax,16
- jb $L096cbc_enc_tail
- sub eax,16
- jmp $L097cbc_enc_loop
-ALIGN 16
-$L097cbc_enc_loop:
- movups xmm7,XMMWORD PTR [esi]
- lea esi,DWORD PTR 16[esi]
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- xorps xmm7,xmm0
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm7
-$L098enc1_loop_19:
-DB 102,15,56,220,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L098enc1_loop_19
-DB 102,15,56,221,209
- mov ecx,ebx
- mov edx,ebp
- movups XMMWORD PTR [edi],xmm2
- lea edi,DWORD PTR 16[edi]
- sub eax,16
- jnc $L097cbc_enc_loop
- add eax,16
- jnz $L096cbc_enc_tail
- movaps xmm7,xmm2
- pxor xmm2,xmm2
- jmp $L099cbc_ret
-$L096cbc_enc_tail:
- mov ecx,eax
-DD 2767451785
- mov ecx,16
- sub ecx,eax
- xor eax,eax
-DD 2868115081
- lea edi,DWORD PTR [edi-16]
- mov ecx,ebx
- mov esi,edi
- mov edx,ebp
- jmp $L097cbc_enc_loop
-ALIGN 16
-$L095cbc_decrypt:
- cmp eax,80
- jbe $L100cbc_dec_tail
- movaps XMMWORD PTR [esp],xmm7
- sub eax,80
- jmp $L101cbc_dec_loop6_enter
-ALIGN 16
-$L102cbc_dec_loop6:
- movaps XMMWORD PTR [esp],xmm0
- movups XMMWORD PTR [edi],xmm7
- lea edi,DWORD PTR 16[edi]
-$L101cbc_dec_loop6_enter:
- movdqu xmm2,XMMWORD PTR [esi]
- movdqu xmm3,XMMWORD PTR 16[esi]
- movdqu xmm4,XMMWORD PTR 32[esi]
- movdqu xmm5,XMMWORD PTR 48[esi]
- movdqu xmm6,XMMWORD PTR 64[esi]
- movdqu xmm7,XMMWORD PTR 80[esi]
- call __aesni_decrypt6
- movups xmm1,XMMWORD PTR [esi]
- movups xmm0,XMMWORD PTR 16[esi]
- xorps xmm2,XMMWORD PTR [esp]
- xorps xmm3,xmm1
- movups xmm1,XMMWORD PTR 32[esi]
- xorps xmm4,xmm0
- movups xmm0,XMMWORD PTR 48[esi]
- xorps xmm5,xmm1
- movups xmm1,XMMWORD PTR 64[esi]
- xorps xmm6,xmm0
- movups xmm0,XMMWORD PTR 80[esi]
- xorps xmm7,xmm1
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- lea esi,DWORD PTR 96[esi]
- movups XMMWORD PTR 32[edi],xmm4
- mov ecx,ebx
- movups XMMWORD PTR 48[edi],xmm5
- mov edx,ebp
- movups XMMWORD PTR 64[edi],xmm6
- lea edi,DWORD PTR 80[edi]
- sub eax,96
- ja $L102cbc_dec_loop6
- movaps xmm2,xmm7
- movaps xmm7,xmm0
- add eax,80
- jle $L103cbc_dec_clear_tail_collected
- movups XMMWORD PTR [edi],xmm2
- lea edi,DWORD PTR 16[edi]
-$L100cbc_dec_tail:
- movups xmm2,XMMWORD PTR [esi]
- movaps xmm6,xmm2
- cmp eax,16
- jbe $L104cbc_dec_one
- movups xmm3,XMMWORD PTR 16[esi]
- movaps xmm5,xmm3
- cmp eax,32
- jbe $L105cbc_dec_two
- movups xmm4,XMMWORD PTR 32[esi]
- cmp eax,48
- jbe $L106cbc_dec_three
- movups xmm5,XMMWORD PTR 48[esi]
- cmp eax,64
- jbe $L107cbc_dec_four
- movups xmm6,XMMWORD PTR 64[esi]
- movaps XMMWORD PTR [esp],xmm7
- movups xmm2,XMMWORD PTR [esi]
- xorps xmm7,xmm7
- call __aesni_decrypt6
- movups xmm1,XMMWORD PTR [esi]
- movups xmm0,XMMWORD PTR 16[esi]
- xorps xmm2,XMMWORD PTR [esp]
- xorps xmm3,xmm1
- movups xmm1,XMMWORD PTR 32[esi]
- xorps xmm4,xmm0
- movups xmm0,XMMWORD PTR 48[esi]
- xorps xmm5,xmm1
- movups xmm7,XMMWORD PTR 64[esi]
- xorps xmm6,xmm0
- movups XMMWORD PTR [edi],xmm2
- movups XMMWORD PTR 16[edi],xmm3
- pxor xmm3,xmm3
- movups XMMWORD PTR 32[edi],xmm4
- pxor xmm4,xmm4
- movups XMMWORD PTR 48[edi],xmm5
- pxor xmm5,xmm5
- lea edi,DWORD PTR 64[edi]
- movaps xmm2,xmm6
- pxor xmm6,xmm6
- sub eax,80
- jmp $L108cbc_dec_tail_collected
-ALIGN 16
-$L104cbc_dec_one:
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR 16[edx]
- lea edx,DWORD PTR 32[edx]
- xorps xmm2,xmm0
-$L109dec1_loop_20:
-DB 102,15,56,222,209
- dec ecx
- movups xmm1,XMMWORD PTR [edx]
- lea edx,DWORD PTR 16[edx]
- jnz $L109dec1_loop_20
-DB 102,15,56,223,209
- xorps xmm2,xmm7
- movaps xmm7,xmm6
- sub eax,16
- jmp $L108cbc_dec_tail_collected
-ALIGN 16
-$L105cbc_dec_two:
- call __aesni_decrypt2
- xorps xmm2,xmm7
- xorps xmm3,xmm6
- movups XMMWORD PTR [edi],xmm2
- movaps xmm2,xmm3
- pxor xmm3,xmm3
- lea edi,DWORD PTR 16[edi]
- movaps xmm7,xmm5
- sub eax,32
- jmp $L108cbc_dec_tail_collected
-ALIGN 16
-$L106cbc_dec_three:
- call __aesni_decrypt3
- xorps xmm2,xmm7
- xorps xmm3,xmm6
- xorps xmm4,xmm5
- movups XMMWORD PTR [edi],xmm2
- movaps xmm2,xmm4
- pxor xmm4,xmm4
- movups XMMWORD PTR 16[edi],xmm3
- pxor xmm3,xmm3
- lea edi,DWORD PTR 32[edi]
- movups xmm7,XMMWORD PTR 32[esi]
- sub eax,48
- jmp $L108cbc_dec_tail_collected
-ALIGN 16
-$L107cbc_dec_four:
- call __aesni_decrypt4
- movups xmm1,XMMWORD PTR 16[esi]
- movups xmm0,XMMWORD PTR 32[esi]
- xorps xmm2,xmm7
- movups xmm7,XMMWORD PTR 48[esi]
- xorps xmm3,xmm6
- movups XMMWORD PTR [edi],xmm2
- xorps xmm4,xmm1
- movups XMMWORD PTR 16[edi],xmm3
- pxor xmm3,xmm3
- xorps xmm5,xmm0
- movups XMMWORD PTR 32[edi],xmm4
- pxor xmm4,xmm4
- lea edi,DWORD PTR 48[edi]
- movaps xmm2,xmm5
- pxor xmm5,xmm5
- sub eax,64
- jmp $L108cbc_dec_tail_collected
-ALIGN 16
-$L103cbc_dec_clear_tail_collected:
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- pxor xmm6,xmm6
-$L108cbc_dec_tail_collected:
- and eax,15
- jnz $L110cbc_dec_tail_partial
- movups XMMWORD PTR [edi],xmm2
- pxor xmm0,xmm0
- jmp $L099cbc_ret
-ALIGN 16
-$L110cbc_dec_tail_partial:
- movaps XMMWORD PTR [esp],xmm2
- pxor xmm0,xmm0
- mov ecx,16
- mov esi,esp
- sub ecx,eax
-DD 2767451785
- movdqa XMMWORD PTR [esp],xmm2
-$L099cbc_ret:
- mov esp,DWORD PTR 16[esp]
- mov ebp,DWORD PTR 36[esp]
- pxor xmm2,xmm2
- pxor xmm1,xmm1
- movups XMMWORD PTR [ebp],xmm7
- pxor xmm7,xmm7
-$L094cbc_abort:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_aesni_cbc_encrypt ENDP
-ALIGN 16
-__aesni_set_encrypt_key PROC PRIVATE
- push ebp
- push ebx
- test eax,eax
- jz $L111bad_pointer
- test edx,edx
- jz $L111bad_pointer
- call $L112pic
-$L112pic:
- pop ebx
- lea ebx,DWORD PTR ($Lkey_const-$L112pic)[ebx]
- lea ebp,DWORD PTR _OPENSSL_ia32cap_P
- movups xmm0,XMMWORD PTR [eax]
- xorps xmm4,xmm4
- mov ebp,DWORD PTR 4[ebp]
- lea edx,DWORD PTR 16[edx]
- and ebp,268437504
- cmp ecx,256
- je $L11314rounds
- cmp ecx,192
- je $L11412rounds
- cmp ecx,128
- jne $L115bad_keybits
-ALIGN 16
-$L11610rounds:
- cmp ebp,268435456
- je $L11710rounds_alt
- mov ecx,9
- movups XMMWORD PTR [edx-16],xmm0
-DB 102,15,58,223,200,1
- call $L118key_128_cold
-DB 102,15,58,223,200,2
- call $L119key_128
-DB 102,15,58,223,200,4
- call $L119key_128
-DB 102,15,58,223,200,8
- call $L119key_128
-DB 102,15,58,223,200,16
- call $L119key_128
-DB 102,15,58,223,200,32
- call $L119key_128
-DB 102,15,58,223,200,64
- call $L119key_128
-DB 102,15,58,223,200,128
- call $L119key_128
-DB 102,15,58,223,200,27
- call $L119key_128
-DB 102,15,58,223,200,54
- call $L119key_128
- movups XMMWORD PTR [edx],xmm0
- mov DWORD PTR 80[edx],ecx
- jmp $L120good_key
-ALIGN 16
-$L119key_128:
- movups XMMWORD PTR [edx],xmm0
- lea edx,DWORD PTR 16[edx]
-$L118key_128_cold:
- shufps xmm4,xmm0,16
- xorps xmm0,xmm4
- shufps xmm4,xmm0,140
- xorps xmm0,xmm4
- shufps xmm1,xmm1,255
- xorps xmm0,xmm1
- ret
-ALIGN 16
-$L11710rounds_alt:
- movdqa xmm5,XMMWORD PTR [ebx]
- mov ecx,8
- movdqa xmm4,XMMWORD PTR 32[ebx]
- movdqa xmm2,xmm0
- movdqu XMMWORD PTR [edx-16],xmm0
-$L121loop_key128:
-DB 102,15,56,0,197
-DB 102,15,56,221,196
- pslld xmm4,1
- lea edx,DWORD PTR 16[edx]
- movdqa xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm2,xmm3
- pxor xmm0,xmm2
- movdqu XMMWORD PTR [edx-16],xmm0
- movdqa xmm2,xmm0
- dec ecx
- jnz $L121loop_key128
- movdqa xmm4,XMMWORD PTR 48[ebx]
-DB 102,15,56,0,197
-DB 102,15,56,221,196
- pslld xmm4,1
- movdqa xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm2,xmm3
- pxor xmm0,xmm2
- movdqu XMMWORD PTR [edx],xmm0
- movdqa xmm2,xmm0
-DB 102,15,56,0,197
-DB 102,15,56,221,196
- movdqa xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm2,xmm3
- pxor xmm0,xmm2
- movdqu XMMWORD PTR 16[edx],xmm0
- mov ecx,9
- mov DWORD PTR 96[edx],ecx
- jmp $L120good_key
-ALIGN 16
-$L11412rounds:
- movq xmm2,QWORD PTR 16[eax]
- cmp ebp,268435456
- je $L12212rounds_alt
- mov ecx,11
- movups XMMWORD PTR [edx-16],xmm0
-DB 102,15,58,223,202,1
- call $L123key_192a_cold
-DB 102,15,58,223,202,2
- call $L124key_192b
-DB 102,15,58,223,202,4
- call $L125key_192a
-DB 102,15,58,223,202,8
- call $L124key_192b
-DB 102,15,58,223,202,16
- call $L125key_192a
-DB 102,15,58,223,202,32
- call $L124key_192b
-DB 102,15,58,223,202,64
- call $L125key_192a
-DB 102,15,58,223,202,128
- call $L124key_192b
- movups XMMWORD PTR [edx],xmm0
- mov DWORD PTR 48[edx],ecx
- jmp $L120good_key
-ALIGN 16
-$L125key_192a:
- movups XMMWORD PTR [edx],xmm0
- lea edx,DWORD PTR 16[edx]
-ALIGN 16
-$L123key_192a_cold:
- movaps xmm5,xmm2
-$L126key_192b_warm:
- shufps xmm4,xmm0,16
- movdqa xmm3,xmm2
- xorps xmm0,xmm4
- shufps xmm4,xmm0,140
- pslldq xmm3,4
- xorps xmm0,xmm4
- pshufd xmm1,xmm1,85
- pxor xmm2,xmm3
- pxor xmm0,xmm1
- pshufd xmm3,xmm0,255
- pxor xmm2,xmm3
- ret
-ALIGN 16
-$L124key_192b:
- movaps xmm3,xmm0
- shufps xmm5,xmm0,68
- movups XMMWORD PTR [edx],xmm5
- shufps xmm3,xmm2,78
- movups XMMWORD PTR 16[edx],xmm3
- lea edx,DWORD PTR 32[edx]
- jmp $L126key_192b_warm
-ALIGN 16
-$L12212rounds_alt:
- movdqa xmm5,XMMWORD PTR 16[ebx]
- movdqa xmm4,XMMWORD PTR 32[ebx]
- mov ecx,8
- movdqu XMMWORD PTR [edx-16],xmm0
-$L127loop_key192:
- movq QWORD PTR [edx],xmm2
- movdqa xmm1,xmm2
-DB 102,15,56,0,213
-DB 102,15,56,221,212
- pslld xmm4,1
- lea edx,DWORD PTR 24[edx]
- movdqa xmm3,xmm0
- pslldq xmm0,4
- pxor xmm3,xmm0
- pslldq xmm0,4
- pxor xmm3,xmm0
- pslldq xmm0,4
- pxor xmm0,xmm3
- pshufd xmm3,xmm0,255
- pxor xmm3,xmm1
- pslldq xmm1,4
- pxor xmm3,xmm1
- pxor xmm0,xmm2
- pxor xmm2,xmm3
- movdqu XMMWORD PTR [edx-16],xmm0
- dec ecx
- jnz $L127loop_key192
- mov ecx,11
- mov DWORD PTR 32[edx],ecx
- jmp $L120good_key
-ALIGN 16
-$L11314rounds:
- movups xmm2,XMMWORD PTR 16[eax]
- lea edx,DWORD PTR 16[edx]
- cmp ebp,268435456
- je $L12814rounds_alt
- mov ecx,13
- movups XMMWORD PTR [edx-32],xmm0
- movups XMMWORD PTR [edx-16],xmm2
-DB 102,15,58,223,202,1
- call $L129key_256a_cold
-DB 102,15,58,223,200,1
- call $L130key_256b
-DB 102,15,58,223,202,2
- call $L131key_256a
-DB 102,15,58,223,200,2
- call $L130key_256b
-DB 102,15,58,223,202,4
- call $L131key_256a
-DB 102,15,58,223,200,4
- call $L130key_256b
-DB 102,15,58,223,202,8
- call $L131key_256a
-DB 102,15,58,223,200,8
- call $L130key_256b
-DB 102,15,58,223,202,16
- call $L131key_256a
-DB 102,15,58,223,200,16
- call $L130key_256b
-DB 102,15,58,223,202,32
- call $L131key_256a
-DB 102,15,58,223,200,32
- call $L130key_256b
-DB 102,15,58,223,202,64
- call $L131key_256a
- movups XMMWORD PTR [edx],xmm0
- mov DWORD PTR 16[edx],ecx
- xor eax,eax
- jmp $L120good_key
-ALIGN 16
-$L131key_256a:
- movups XMMWORD PTR [edx],xmm2
- lea edx,DWORD PTR 16[edx]
-$L129key_256a_cold:
- shufps xmm4,xmm0,16
- xorps xmm0,xmm4
- shufps xmm4,xmm0,140
- xorps xmm0,xmm4
- shufps xmm1,xmm1,255
- xorps xmm0,xmm1
- ret
-ALIGN 16
-$L130key_256b:
- movups XMMWORD PTR [edx],xmm0
- lea edx,DWORD PTR 16[edx]
- shufps xmm4,xmm2,16
- xorps xmm2,xmm4
- shufps xmm4,xmm2,140
- xorps xmm2,xmm4
- shufps xmm1,xmm1,170
- xorps xmm2,xmm1
- ret
-ALIGN 16
-$L12814rounds_alt:
- movdqa xmm5,XMMWORD PTR [ebx]
- movdqa xmm4,XMMWORD PTR 32[ebx]
- mov ecx,7
- movdqu XMMWORD PTR [edx-32],xmm0
- movdqa xmm1,xmm2
- movdqu XMMWORD PTR [edx-16],xmm2
-$L132loop_key256:
-DB 102,15,56,0,213
-DB 102,15,56,221,212
- movdqa xmm3,xmm0
- pslldq xmm0,4
- pxor xmm3,xmm0
- pslldq xmm0,4
- pxor xmm3,xmm0
- pslldq xmm0,4
- pxor xmm0,xmm3
- pslld xmm4,1
- pxor xmm0,xmm2
- movdqu XMMWORD PTR [edx],xmm0
- dec ecx
- jz $L133done_key256
- pshufd xmm2,xmm0,255
- pxor xmm3,xmm3
-DB 102,15,56,221,211
- movdqa xmm3,xmm1
- pslldq xmm1,4
- pxor xmm3,xmm1
- pslldq xmm1,4
- pxor xmm3,xmm1
- pslldq xmm1,4
- pxor xmm1,xmm3
- pxor xmm2,xmm1
- movdqu XMMWORD PTR 16[edx],xmm2
- lea edx,DWORD PTR 32[edx]
- movdqa xmm1,xmm2
- jmp $L132loop_key256
-$L133done_key256:
- mov ecx,13
- mov DWORD PTR 16[edx],ecx
-$L120good_key:
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- xor eax,eax
- pop ebx
- pop ebp
- ret
-ALIGN 4
-$L111bad_pointer:
- mov eax,-1
- pop ebx
- pop ebp
- ret
-ALIGN 4
-$L115bad_keybits:
- pxor xmm0,xmm0
- mov eax,-2
- pop ebx
- pop ebp
- ret
-__aesni_set_encrypt_key ENDP
-ALIGN 16
-_aesni_set_encrypt_key PROC PUBLIC
-$L_aesni_set_encrypt_key_begin::
- mov eax,DWORD PTR 4[esp]
- mov ecx,DWORD PTR 8[esp]
- mov edx,DWORD PTR 12[esp]
- call __aesni_set_encrypt_key
- ret
-_aesni_set_encrypt_key ENDP
-ALIGN 16
-_aesni_set_decrypt_key PROC PUBLIC
-$L_aesni_set_decrypt_key_begin::
- mov eax,DWORD PTR 4[esp]
- mov ecx,DWORD PTR 8[esp]
- mov edx,DWORD PTR 12[esp]
- call __aesni_set_encrypt_key
- mov edx,DWORD PTR 12[esp]
- shl ecx,4
- test eax,eax
- jnz $L134dec_key_ret
- lea eax,DWORD PTR 16[ecx*1+edx]
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR [eax]
- movups XMMWORD PTR [eax],xmm0
- movups XMMWORD PTR [edx],xmm1
- lea edx,DWORD PTR 16[edx]
- lea eax,DWORD PTR [eax-16]
-$L135dec_key_inverse:
- movups xmm0,XMMWORD PTR [edx]
- movups xmm1,XMMWORD PTR [eax]
-DB 102,15,56,219,192
-DB 102,15,56,219,201
- lea edx,DWORD PTR 16[edx]
- lea eax,DWORD PTR [eax-16]
- movups XMMWORD PTR 16[eax],xmm0
- movups XMMWORD PTR [edx-16],xmm1
- cmp eax,edx
- ja $L135dec_key_inverse
- movups xmm0,XMMWORD PTR [edx]
-DB 102,15,56,219,192
- movups XMMWORD PTR [edx],xmm0
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- xor eax,eax
-$L134dec_key_ret:
- ret
-_aesni_set_decrypt_key ENDP
-ALIGN 64
-$Lkey_const::
-DD 202313229,202313229,202313229,202313229
-DD 67569157,67569157,67569157,67569157
-DD 1,1,1,1
-DD 27,27,27,27
-DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
-DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
-DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
-DB 115,108,46,111,114,103,62,0
-.text$ ENDS
-.bss SEGMENT 'BSS'
-COMM _OPENSSL_ia32cap_P:DWORD:4
-.bss ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+;EXTERN _OPENSSL_ia32cap_P:NEAR
+ALIGN 16
+_aesni_encrypt PROC PUBLIC
+$L_aesni_encrypt_begin::
+ mov eax,DWORD PTR 4[esp]
+ mov edx,DWORD PTR 12[esp]
+ movups xmm2,XMMWORD PTR [eax]
+ mov ecx,DWORD PTR 240[edx]
+ mov eax,DWORD PTR 8[esp]
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L000enc1_loop_1:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L000enc1_loop_1
+DB 102,15,56,221,209
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ movups XMMWORD PTR [eax],xmm2
+ pxor xmm2,xmm2
+ ret
+_aesni_encrypt ENDP
+ALIGN 16
+_aesni_decrypt PROC PUBLIC
+$L_aesni_decrypt_begin::
+ mov eax,DWORD PTR 4[esp]
+ mov edx,DWORD PTR 12[esp]
+ movups xmm2,XMMWORD PTR [eax]
+ mov ecx,DWORD PTR 240[edx]
+ mov eax,DWORD PTR 8[esp]
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L001dec1_loop_2:
+DB 102,15,56,222,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L001dec1_loop_2
+DB 102,15,56,223,209
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ movups XMMWORD PTR [eax],xmm2
+ pxor xmm2,xmm2
+ ret
+_aesni_decrypt ENDP
+ALIGN 16
+__aesni_encrypt2 PROC PRIVATE
+ movups xmm0,XMMWORD PTR [edx]
+ shl ecx,4
+ movups xmm1,XMMWORD PTR 16[edx]
+ xorps xmm2,xmm0
+ pxor xmm3,xmm0
+ movups xmm0,XMMWORD PTR 32[edx]
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ neg ecx
+ add ecx,16
+$L002enc2_loop:
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ movups xmm1,XMMWORD PTR [ecx*1+edx]
+ add ecx,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+ jnz $L002enc2_loop
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+ ret
+__aesni_encrypt2 ENDP
+ALIGN 16
+__aesni_decrypt2 PROC PRIVATE
+ movups xmm0,XMMWORD PTR [edx]
+ shl ecx,4
+ movups xmm1,XMMWORD PTR 16[edx]
+ xorps xmm2,xmm0
+ pxor xmm3,xmm0
+ movups xmm0,XMMWORD PTR 32[edx]
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ neg ecx
+ add ecx,16
+$L003dec2_loop:
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+ movups xmm1,XMMWORD PTR [ecx*1+edx]
+ add ecx,32
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+ jnz $L003dec2_loop
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,223,208
+DB 102,15,56,223,216
+ ret
+__aesni_decrypt2 ENDP
+ALIGN 16
+__aesni_encrypt3 PROC PRIVATE
+ movups xmm0,XMMWORD PTR [edx]
+ shl ecx,4
+ movups xmm1,XMMWORD PTR 16[edx]
+ xorps xmm2,xmm0
+ pxor xmm3,xmm0
+ pxor xmm4,xmm0
+ movups xmm0,XMMWORD PTR 32[edx]
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ neg ecx
+ add ecx,16
+$L004enc3_loop:
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+ movups xmm1,XMMWORD PTR [ecx*1+edx]
+ add ecx,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+ jnz $L004enc3_loop
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+DB 102,15,56,221,224
+ ret
+__aesni_encrypt3 ENDP
+ALIGN 16
+__aesni_decrypt3 PROC PRIVATE
+ movups xmm0,XMMWORD PTR [edx]
+ shl ecx,4
+ movups xmm1,XMMWORD PTR 16[edx]
+ xorps xmm2,xmm0
+ pxor xmm3,xmm0
+ pxor xmm4,xmm0
+ movups xmm0,XMMWORD PTR 32[edx]
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ neg ecx
+ add ecx,16
+$L005dec3_loop:
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+ movups xmm1,XMMWORD PTR [ecx*1+edx]
+ add ecx,32
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+ jnz $L005dec3_loop
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,223,208
+DB 102,15,56,223,216
+DB 102,15,56,223,224
+ ret
+__aesni_decrypt3 ENDP
+ALIGN 16
+__aesni_encrypt4 PROC PRIVATE
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ shl ecx,4
+ xorps xmm2,xmm0
+ pxor xmm3,xmm0
+ pxor xmm4,xmm0
+ pxor xmm5,xmm0
+ movups xmm0,XMMWORD PTR 32[edx]
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ neg ecx
+DB 15,31,64,0
+ add ecx,16
+$L006enc4_loop:
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR [ecx*1+edx]
+ add ecx,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+ jnz $L006enc4_loop
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+DB 102,15,56,221,224
+DB 102,15,56,221,232
+ ret
+__aesni_encrypt4 ENDP
+ALIGN 16
+__aesni_decrypt4 PROC PRIVATE
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ shl ecx,4
+ xorps xmm2,xmm0
+ pxor xmm3,xmm0
+ pxor xmm4,xmm0
+ pxor xmm5,xmm0
+ movups xmm0,XMMWORD PTR 32[edx]
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ neg ecx
+DB 15,31,64,0
+ add ecx,16
+$L007dec4_loop:
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR [ecx*1+edx]
+ add ecx,32
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+ jnz $L007dec4_loop
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,223,208
+DB 102,15,56,223,216
+DB 102,15,56,223,224
+DB 102,15,56,223,232
+ ret
+__aesni_decrypt4 ENDP
+ALIGN 16
+__aesni_encrypt6 PROC PRIVATE
+ movups xmm0,XMMWORD PTR [edx]
+ shl ecx,4
+ movups xmm1,XMMWORD PTR 16[edx]
+ xorps xmm2,xmm0
+ pxor xmm3,xmm0
+ pxor xmm4,xmm0
+DB 102,15,56,220,209
+ pxor xmm5,xmm0
+ pxor xmm6,xmm0
+DB 102,15,56,220,217
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ neg ecx
+DB 102,15,56,220,225
+ pxor xmm7,xmm0
+ movups xmm0,XMMWORD PTR [ecx*1+edx]
+ add ecx,16
+ jmp $L008_aesni_encrypt6_inner
+ALIGN 16
+$L009enc6_loop:
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+$L008_aesni_encrypt6_inner:
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+$L_aesni_encrypt6_enter::
+ movups xmm1,XMMWORD PTR [ecx*1+edx]
+ add ecx,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+ jnz $L009enc6_loop
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+DB 102,15,56,221,224
+DB 102,15,56,221,232
+DB 102,15,56,221,240
+DB 102,15,56,221,248
+ ret
+__aesni_encrypt6 ENDP
+ALIGN 16
+__aesni_decrypt6 PROC PRIVATE
+ movups xmm0,XMMWORD PTR [edx]
+ shl ecx,4
+ movups xmm1,XMMWORD PTR 16[edx]
+ xorps xmm2,xmm0
+ pxor xmm3,xmm0
+ pxor xmm4,xmm0
+DB 102,15,56,222,209
+ pxor xmm5,xmm0
+ pxor xmm6,xmm0
+DB 102,15,56,222,217
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ neg ecx
+DB 102,15,56,222,225
+ pxor xmm7,xmm0
+ movups xmm0,XMMWORD PTR [ecx*1+edx]
+ add ecx,16
+ jmp $L010_aesni_decrypt6_inner
+ALIGN 16
+$L011dec6_loop:
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+$L010_aesni_decrypt6_inner:
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+$L_aesni_decrypt6_enter::
+ movups xmm1,XMMWORD PTR [ecx*1+edx]
+ add ecx,32
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+ jnz $L011dec6_loop
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+DB 102,15,56,223,208
+DB 102,15,56,223,216
+DB 102,15,56,223,224
+DB 102,15,56,223,232
+DB 102,15,56,223,240
+DB 102,15,56,223,248
+ ret
+__aesni_decrypt6 ENDP
+ALIGN 16
+_aesni_ecb_encrypt PROC PUBLIC
+$L_aesni_ecb_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ mov ebx,DWORD PTR 36[esp]
+ and eax,-16
+ jz $L012ecb_ret
+ mov ecx,DWORD PTR 240[edx]
+ test ebx,ebx
+ jz $L013ecb_decrypt
+ mov ebp,edx
+ mov ebx,ecx
+ cmp eax,96
+ jb $L014ecb_enc_tail
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ movdqu xmm7,XMMWORD PTR 80[esi]
+ lea esi,DWORD PTR 96[esi]
+ sub eax,96
+ jmp $L015ecb_enc_loop6_enter
+ALIGN 16
+$L016ecb_enc_loop6:
+ movups XMMWORD PTR [edi],xmm2
+ movdqu xmm2,XMMWORD PTR [esi]
+ movups XMMWORD PTR 16[edi],xmm3
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movups XMMWORD PTR 32[edi],xmm4
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movups XMMWORD PTR 48[edi],xmm5
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ movups XMMWORD PTR 64[edi],xmm6
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ movups XMMWORD PTR 80[edi],xmm7
+ lea edi,DWORD PTR 96[edi]
+ movdqu xmm7,XMMWORD PTR 80[esi]
+ lea esi,DWORD PTR 96[esi]
+$L015ecb_enc_loop6_enter:
+ call __aesni_encrypt6
+ mov edx,ebp
+ mov ecx,ebx
+ sub eax,96
+ jnc $L016ecb_enc_loop6
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ movups XMMWORD PTR 64[edi],xmm6
+ movups XMMWORD PTR 80[edi],xmm7
+ lea edi,DWORD PTR 96[edi]
+ add eax,96
+ jz $L012ecb_ret
+$L014ecb_enc_tail:
+ movups xmm2,XMMWORD PTR [esi]
+ cmp eax,32
+ jb $L017ecb_enc_one
+ movups xmm3,XMMWORD PTR 16[esi]
+ je $L018ecb_enc_two
+ movups xmm4,XMMWORD PTR 32[esi]
+ cmp eax,64
+ jb $L019ecb_enc_three
+ movups xmm5,XMMWORD PTR 48[esi]
+ je $L020ecb_enc_four
+ movups xmm6,XMMWORD PTR 64[esi]
+ xorps xmm7,xmm7
+ call __aesni_encrypt6
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ movups XMMWORD PTR 64[edi],xmm6
+ jmp $L012ecb_ret
+ALIGN 16
+$L017ecb_enc_one:
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L021enc1_loop_3:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L021enc1_loop_3
+DB 102,15,56,221,209
+ movups XMMWORD PTR [edi],xmm2
+ jmp $L012ecb_ret
+ALIGN 16
+$L018ecb_enc_two:
+ call __aesni_encrypt2
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ jmp $L012ecb_ret
+ALIGN 16
+$L019ecb_enc_three:
+ call __aesni_encrypt3
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ jmp $L012ecb_ret
+ALIGN 16
+$L020ecb_enc_four:
+ call __aesni_encrypt4
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ jmp $L012ecb_ret
+ALIGN 16
+$L013ecb_decrypt:
+ mov ebp,edx
+ mov ebx,ecx
+ cmp eax,96
+ jb $L022ecb_dec_tail
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ movdqu xmm7,XMMWORD PTR 80[esi]
+ lea esi,DWORD PTR 96[esi]
+ sub eax,96
+ jmp $L023ecb_dec_loop6_enter
+ALIGN 16
+$L024ecb_dec_loop6:
+ movups XMMWORD PTR [edi],xmm2
+ movdqu xmm2,XMMWORD PTR [esi]
+ movups XMMWORD PTR 16[edi],xmm3
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movups XMMWORD PTR 32[edi],xmm4
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movups XMMWORD PTR 48[edi],xmm5
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ movups XMMWORD PTR 64[edi],xmm6
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ movups XMMWORD PTR 80[edi],xmm7
+ lea edi,DWORD PTR 96[edi]
+ movdqu xmm7,XMMWORD PTR 80[esi]
+ lea esi,DWORD PTR 96[esi]
+$L023ecb_dec_loop6_enter:
+ call __aesni_decrypt6
+ mov edx,ebp
+ mov ecx,ebx
+ sub eax,96
+ jnc $L024ecb_dec_loop6
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ movups XMMWORD PTR 64[edi],xmm6
+ movups XMMWORD PTR 80[edi],xmm7
+ lea edi,DWORD PTR 96[edi]
+ add eax,96
+ jz $L012ecb_ret
+$L022ecb_dec_tail:
+ movups xmm2,XMMWORD PTR [esi]
+ cmp eax,32
+ jb $L025ecb_dec_one
+ movups xmm3,XMMWORD PTR 16[esi]
+ je $L026ecb_dec_two
+ movups xmm4,XMMWORD PTR 32[esi]
+ cmp eax,64
+ jb $L027ecb_dec_three
+ movups xmm5,XMMWORD PTR 48[esi]
+ je $L028ecb_dec_four
+ movups xmm6,XMMWORD PTR 64[esi]
+ xorps xmm7,xmm7
+ call __aesni_decrypt6
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ movups XMMWORD PTR 64[edi],xmm6
+ jmp $L012ecb_ret
+ALIGN 16
+$L025ecb_dec_one:
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L029dec1_loop_4:
+DB 102,15,56,222,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L029dec1_loop_4
+DB 102,15,56,223,209
+ movups XMMWORD PTR [edi],xmm2
+ jmp $L012ecb_ret
+ALIGN 16
+$L026ecb_dec_two:
+ call __aesni_decrypt2
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ jmp $L012ecb_ret
+ALIGN 16
+$L027ecb_dec_three:
+ call __aesni_decrypt3
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ jmp $L012ecb_ret
+ALIGN 16
+$L028ecb_dec_four:
+ call __aesni_decrypt4
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+$L012ecb_ret:
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ pxor xmm6,xmm6
+ pxor xmm7,xmm7
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_aesni_ecb_encrypt ENDP
+ALIGN 16
+_aesni_ccm64_encrypt_blocks PROC PUBLIC
+$L_aesni_ccm64_encrypt_blocks_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ mov ebx,DWORD PTR 36[esp]
+ mov ecx,DWORD PTR 40[esp]
+ mov ebp,esp
+ sub esp,60
+ and esp,-16
+ mov DWORD PTR 48[esp],ebp
+ movdqu xmm7,XMMWORD PTR [ebx]
+ movdqu xmm3,XMMWORD PTR [ecx]
+ mov ecx,DWORD PTR 240[edx]
+ mov DWORD PTR [esp],202182159
+ mov DWORD PTR 4[esp],134810123
+ mov DWORD PTR 8[esp],67438087
+ mov DWORD PTR 12[esp],66051
+ mov ebx,1
+ xor ebp,ebp
+ mov DWORD PTR 16[esp],ebx
+ mov DWORD PTR 20[esp],ebp
+ mov DWORD PTR 24[esp],ebp
+ mov DWORD PTR 28[esp],ebp
+ shl ecx,4
+ mov ebx,16
+ lea ebp,DWORD PTR [edx]
+ movdqa xmm5,XMMWORD PTR [esp]
+ movdqa xmm2,xmm7
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ sub ebx,ecx
+DB 102,15,56,0,253
+$L030ccm64_enc_outer:
+ movups xmm0,XMMWORD PTR [ebp]
+ mov ecx,ebx
+ movups xmm6,XMMWORD PTR [esi]
+ xorps xmm2,xmm0
+ movups xmm1,XMMWORD PTR 16[ebp]
+ xorps xmm0,xmm6
+ xorps xmm3,xmm0
+ movups xmm0,XMMWORD PTR 32[ebp]
+$L031ccm64_enc2_loop:
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ movups xmm1,XMMWORD PTR [ecx*1+edx]
+ add ecx,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+ jnz $L031ccm64_enc2_loop
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ paddq xmm7,XMMWORD PTR 16[esp]
+ dec eax
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+ lea esi,DWORD PTR 16[esi]
+ xorps xmm6,xmm2
+ movdqa xmm2,xmm7
+ movups XMMWORD PTR [edi],xmm6
+DB 102,15,56,0,213
+ lea edi,DWORD PTR 16[edi]
+ jnz $L030ccm64_enc_outer
+ mov esp,DWORD PTR 48[esp]
+ mov edi,DWORD PTR 40[esp]
+ movups XMMWORD PTR [edi],xmm3
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ pxor xmm6,xmm6
+ pxor xmm7,xmm7
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_aesni_ccm64_encrypt_blocks ENDP
+ALIGN 16
+_aesni_ccm64_decrypt_blocks PROC PUBLIC
+$L_aesni_ccm64_decrypt_blocks_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ mov ebx,DWORD PTR 36[esp]
+ mov ecx,DWORD PTR 40[esp]
+ mov ebp,esp
+ sub esp,60
+ and esp,-16
+ mov DWORD PTR 48[esp],ebp
+ movdqu xmm7,XMMWORD PTR [ebx]
+ movdqu xmm3,XMMWORD PTR [ecx]
+ mov ecx,DWORD PTR 240[edx]
+ mov DWORD PTR [esp],202182159
+ mov DWORD PTR 4[esp],134810123
+ mov DWORD PTR 8[esp],67438087
+ mov DWORD PTR 12[esp],66051
+ mov ebx,1
+ xor ebp,ebp
+ mov DWORD PTR 16[esp],ebx
+ mov DWORD PTR 20[esp],ebp
+ mov DWORD PTR 24[esp],ebp
+ mov DWORD PTR 28[esp],ebp
+ movdqa xmm5,XMMWORD PTR [esp]
+ movdqa xmm2,xmm7
+ mov ebp,edx
+ mov ebx,ecx
+DB 102,15,56,0,253
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L032enc1_loop_5:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L032enc1_loop_5
+DB 102,15,56,221,209
+ shl ebx,4
+ mov ecx,16
+ movups xmm6,XMMWORD PTR [esi]
+ paddq xmm7,XMMWORD PTR 16[esp]
+ lea esi,QWORD PTR 16[esi]
+ sub ecx,ebx
+ lea edx,DWORD PTR 32[ebx*1+ebp]
+ mov ebx,ecx
+ jmp $L033ccm64_dec_outer
+ALIGN 16
+$L033ccm64_dec_outer:
+ xorps xmm6,xmm2
+ movdqa xmm2,xmm7
+ movups XMMWORD PTR [edi],xmm6
+ lea edi,DWORD PTR 16[edi]
+DB 102,15,56,0,213
+ sub eax,1
+ jz $L034ccm64_dec_break
+ movups xmm0,XMMWORD PTR [ebp]
+ mov ecx,ebx
+ movups xmm1,XMMWORD PTR 16[ebp]
+ xorps xmm6,xmm0
+ xorps xmm2,xmm0
+ xorps xmm3,xmm6
+ movups xmm0,XMMWORD PTR 32[ebp]
+$L035ccm64_dec2_loop:
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ movups xmm1,XMMWORD PTR [ecx*1+edx]
+ add ecx,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+ jnz $L035ccm64_dec2_loop
+ movups xmm6,XMMWORD PTR [esi]
+ paddq xmm7,XMMWORD PTR 16[esp]
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+ lea esi,QWORD PTR 16[esi]
+ jmp $L033ccm64_dec_outer
+ALIGN 16
+$L034ccm64_dec_break:
+ mov ecx,DWORD PTR 240[ebp]
+ mov edx,ebp
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ xorps xmm6,xmm0
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm3,xmm6
+$L036enc1_loop_6:
+DB 102,15,56,220,217
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L036enc1_loop_6
+DB 102,15,56,221,217
+ mov esp,DWORD PTR 48[esp]
+ mov edi,DWORD PTR 40[esp]
+ movups XMMWORD PTR [edi],xmm3
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ pxor xmm6,xmm6
+ pxor xmm7,xmm7
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_aesni_ccm64_decrypt_blocks ENDP
+ALIGN 16
+_aesni_ctr32_encrypt_blocks PROC PUBLIC
+$L_aesni_ctr32_encrypt_blocks_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ mov ebx,DWORD PTR 36[esp]
+ mov ebp,esp
+ sub esp,88
+ and esp,-16
+ mov DWORD PTR 80[esp],ebp
+ cmp eax,1
+ je $L037ctr32_one_shortcut
+ movdqu xmm7,XMMWORD PTR [ebx]
+ mov DWORD PTR [esp],202182159
+ mov DWORD PTR 4[esp],134810123
+ mov DWORD PTR 8[esp],67438087
+ mov DWORD PTR 12[esp],66051
+ mov ecx,6
+ xor ebp,ebp
+ mov DWORD PTR 16[esp],ecx
+ mov DWORD PTR 20[esp],ecx
+ mov DWORD PTR 24[esp],ecx
+ mov DWORD PTR 28[esp],ebp
+DB 102,15,58,22,251,3
+DB 102,15,58,34,253,3
+ mov ecx,DWORD PTR 240[edx]
+ bswap ebx
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ movdqa xmm2,XMMWORD PTR [esp]
+DB 102,15,58,34,195,0
+ lea ebp,DWORD PTR 3[ebx]
+DB 102,15,58,34,205,0
+ inc ebx
+DB 102,15,58,34,195,1
+ inc ebp
+DB 102,15,58,34,205,1
+ inc ebx
+DB 102,15,58,34,195,2
+ inc ebp
+DB 102,15,58,34,205,2
+ movdqa XMMWORD PTR 48[esp],xmm0
+DB 102,15,56,0,194
+ movdqu xmm6,XMMWORD PTR [edx]
+ movdqa XMMWORD PTR 64[esp],xmm1
+DB 102,15,56,0,202
+ pshufd xmm2,xmm0,192
+ pshufd xmm3,xmm0,128
+ cmp eax,6
+ jb $L038ctr32_tail
+ pxor xmm7,xmm6
+ shl ecx,4
+ mov ebx,16
+ movdqa XMMWORD PTR 32[esp],xmm7
+ mov ebp,edx
+ sub ebx,ecx
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ sub eax,6
+ jmp $L039ctr32_loop6
+ALIGN 16
+$L039ctr32_loop6:
+ pshufd xmm4,xmm0,64
+ movdqa xmm0,XMMWORD PTR 32[esp]
+ pshufd xmm5,xmm1,192
+ pxor xmm2,xmm0
+ pshufd xmm6,xmm1,128
+ pxor xmm3,xmm0
+ pshufd xmm7,xmm1,64
+ movups xmm1,XMMWORD PTR 16[ebp]
+ pxor xmm4,xmm0
+ pxor xmm5,xmm0
+DB 102,15,56,220,209
+ pxor xmm6,xmm0
+ pxor xmm7,xmm0
+DB 102,15,56,220,217
+ movups xmm0,XMMWORD PTR 32[ebp]
+ mov ecx,ebx
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+ call $L_aesni_encrypt6_enter
+ movups xmm1,XMMWORD PTR [esi]
+ movups xmm0,XMMWORD PTR 16[esi]
+ xorps xmm2,xmm1
+ movups xmm1,XMMWORD PTR 32[esi]
+ xorps xmm3,xmm0
+ movups XMMWORD PTR [edi],xmm2
+ movdqa xmm0,XMMWORD PTR 16[esp]
+ xorps xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR 64[esp]
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ paddd xmm1,xmm0
+ paddd xmm0,XMMWORD PTR 48[esp]
+ movdqa xmm2,XMMWORD PTR [esp]
+ movups xmm3,XMMWORD PTR 48[esi]
+ movups xmm4,XMMWORD PTR 64[esi]
+ xorps xmm5,xmm3
+ movups xmm3,XMMWORD PTR 80[esi]
+ lea esi,DWORD PTR 96[esi]
+ movdqa XMMWORD PTR 48[esp],xmm0
+DB 102,15,56,0,194
+ xorps xmm6,xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ xorps xmm7,xmm3
+ movdqa XMMWORD PTR 64[esp],xmm1
+DB 102,15,56,0,202
+ movups XMMWORD PTR 64[edi],xmm6
+ pshufd xmm2,xmm0,192
+ movups XMMWORD PTR 80[edi],xmm7
+ lea edi,DWORD PTR 96[edi]
+ pshufd xmm3,xmm0,128
+ sub eax,6
+ jnc $L039ctr32_loop6
+ add eax,6
+ jz $L040ctr32_ret
+ movdqu xmm7,XMMWORD PTR [ebp]
+ mov edx,ebp
+ pxor xmm7,XMMWORD PTR 32[esp]
+ mov ecx,DWORD PTR 240[ebp]
+$L038ctr32_tail:
+ por xmm2,xmm7
+ cmp eax,2
+ jb $L041ctr32_one
+ pshufd xmm4,xmm0,64
+ por xmm3,xmm7
+ je $L042ctr32_two
+ pshufd xmm5,xmm1,192
+ por xmm4,xmm7
+ cmp eax,4
+ jb $L043ctr32_three
+ pshufd xmm6,xmm1,128
+ por xmm5,xmm7
+ je $L044ctr32_four
+ por xmm6,xmm7
+ call __aesni_encrypt6
+ movups xmm1,XMMWORD PTR [esi]
+ movups xmm0,XMMWORD PTR 16[esi]
+ xorps xmm2,xmm1
+ movups xmm1,XMMWORD PTR 32[esi]
+ xorps xmm3,xmm0
+ movups xmm0,XMMWORD PTR 48[esi]
+ xorps xmm4,xmm1
+ movups xmm1,XMMWORD PTR 64[esi]
+ xorps xmm5,xmm0
+ movups XMMWORD PTR [edi],xmm2
+ xorps xmm6,xmm1
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ movups XMMWORD PTR 64[edi],xmm6
+ jmp $L040ctr32_ret
+ALIGN 16
+$L037ctr32_one_shortcut:
+ movups xmm2,XMMWORD PTR [ebx]
+ mov ecx,DWORD PTR 240[edx]
+$L041ctr32_one:
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L045enc1_loop_7:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L045enc1_loop_7
+DB 102,15,56,221,209
+ movups xmm6,XMMWORD PTR [esi]
+ xorps xmm6,xmm2
+ movups XMMWORD PTR [edi],xmm6
+ jmp $L040ctr32_ret
+ALIGN 16
+$L042ctr32_two:
+ call __aesni_encrypt2
+ movups xmm5,XMMWORD PTR [esi]
+ movups xmm6,XMMWORD PTR 16[esi]
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ jmp $L040ctr32_ret
+ALIGN 16
+$L043ctr32_three:
+ call __aesni_encrypt3
+ movups xmm5,XMMWORD PTR [esi]
+ movups xmm6,XMMWORD PTR 16[esi]
+ xorps xmm2,xmm5
+ movups xmm7,XMMWORD PTR 32[esi]
+ xorps xmm3,xmm6
+ movups XMMWORD PTR [edi],xmm2
+ xorps xmm4,xmm7
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ jmp $L040ctr32_ret
+ALIGN 16
+$L044ctr32_four:
+ call __aesni_encrypt4
+ movups xmm6,XMMWORD PTR [esi]
+ movups xmm7,XMMWORD PTR 16[esi]
+ movups xmm1,XMMWORD PTR 32[esi]
+ xorps xmm2,xmm6
+ movups xmm0,XMMWORD PTR 48[esi]
+ xorps xmm3,xmm7
+ movups XMMWORD PTR [edi],xmm2
+ xorps xmm4,xmm1
+ movups XMMWORD PTR 16[edi],xmm3
+ xorps xmm5,xmm0
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+$L040ctr32_ret:
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ movdqa XMMWORD PTR 32[esp],xmm0
+ pxor xmm5,xmm5
+ movdqa XMMWORD PTR 48[esp],xmm0
+ pxor xmm6,xmm6
+ movdqa XMMWORD PTR 64[esp],xmm0
+ pxor xmm7,xmm7
+ mov esp,DWORD PTR 80[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_aesni_ctr32_encrypt_blocks ENDP
+ALIGN 16
+_aesni_xts_encrypt PROC PUBLIC
+$L_aesni_xts_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edx,DWORD PTR 36[esp]
+ mov esi,DWORD PTR 40[esp]
+ mov ecx,DWORD PTR 240[edx]
+ movups xmm2,XMMWORD PTR [esi]
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L046enc1_loop_8:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L046enc1_loop_8
+DB 102,15,56,221,209
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ mov ebp,esp
+ sub esp,120
+ mov ecx,DWORD PTR 240[edx]
+ and esp,-16
+ mov DWORD PTR 96[esp],135
+ mov DWORD PTR 100[esp],0
+ mov DWORD PTR 104[esp],1
+ mov DWORD PTR 108[esp],0
+ mov DWORD PTR 112[esp],eax
+ mov DWORD PTR 116[esp],ebp
+ movdqa xmm1,xmm2
+ pxor xmm0,xmm0
+ movdqa xmm3,XMMWORD PTR 96[esp]
+ pcmpgtd xmm0,xmm1
+ and eax,-16
+ mov ebp,edx
+ mov ebx,ecx
+ sub eax,96
+ jc $L047xts_enc_short
+ shl ecx,4
+ mov ebx,16
+ sub ebx,ecx
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ jmp $L048xts_enc_loop6
+ALIGN 16
+$L048xts_enc_loop6:
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa XMMWORD PTR [esp],xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa XMMWORD PTR 16[esp],xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa XMMWORD PTR 32[esp],xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa XMMWORD PTR 48[esp],xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ pshufd xmm7,xmm0,19
+ movdqa XMMWORD PTR 64[esp],xmm1
+ paddq xmm1,xmm1
+ movups xmm0,XMMWORD PTR [ebp]
+ pand xmm7,xmm3
+ movups xmm2,XMMWORD PTR [esi]
+ pxor xmm7,xmm1
+ mov ecx,ebx
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ xorps xmm2,xmm0
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ pxor xmm3,xmm0
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ pxor xmm4,xmm0
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ pxor xmm5,xmm0
+ movdqu xmm1,XMMWORD PTR 80[esi]
+ pxor xmm6,xmm0
+ lea esi,DWORD PTR 96[esi]
+ pxor xmm2,XMMWORD PTR [esp]
+ movdqa XMMWORD PTR 80[esp],xmm7
+ pxor xmm7,xmm1
+ movups xmm1,XMMWORD PTR 16[ebp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,XMMWORD PTR 32[esp]
+DB 102,15,56,220,209
+ pxor xmm5,XMMWORD PTR 48[esp]
+ pxor xmm6,XMMWORD PTR 64[esp]
+DB 102,15,56,220,217
+ pxor xmm7,xmm0
+ movups xmm0,XMMWORD PTR 32[ebp]
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+ call $L_aesni_encrypt6_enter
+ movdqa xmm1,XMMWORD PTR 80[esp]
+ pxor xmm0,xmm0
+ xorps xmm2,XMMWORD PTR [esp]
+ pcmpgtd xmm0,xmm1
+ xorps xmm3,XMMWORD PTR 16[esp]
+ movups XMMWORD PTR [edi],xmm2
+ xorps xmm4,XMMWORD PTR 32[esp]
+ movups XMMWORD PTR 16[edi],xmm3
+ xorps xmm5,XMMWORD PTR 48[esp]
+ movups XMMWORD PTR 32[edi],xmm4
+ xorps xmm6,XMMWORD PTR 64[esp]
+ movups XMMWORD PTR 48[edi],xmm5
+ xorps xmm7,xmm1
+ movups XMMWORD PTR 64[edi],xmm6
+ pshufd xmm2,xmm0,19
+ movups XMMWORD PTR 80[edi],xmm7
+ lea edi,DWORD PTR 96[edi]
+ movdqa xmm3,XMMWORD PTR 96[esp]
+ pxor xmm0,xmm0
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ sub eax,96
+ jnc $L048xts_enc_loop6
+ mov ecx,DWORD PTR 240[ebp]
+ mov edx,ebp
+ mov ebx,ecx
+$L047xts_enc_short:
+ add eax,96
+ jz $L049xts_enc_done6x
+ movdqa xmm5,xmm1
+ cmp eax,32
+ jb $L050xts_enc_one
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ je $L051xts_enc_two
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa xmm6,xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ cmp eax,64
+ jb $L052xts_enc_three
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa xmm7,xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ movdqa XMMWORD PTR [esp],xmm5
+ movdqa XMMWORD PTR 16[esp],xmm6
+ je $L053xts_enc_four
+ movdqa XMMWORD PTR 32[esp],xmm7
+ pshufd xmm7,xmm0,19
+ movdqa XMMWORD PTR 48[esp],xmm1
+ paddq xmm1,xmm1
+ pand xmm7,xmm3
+ pxor xmm7,xmm1
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ pxor xmm2,XMMWORD PTR [esp]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ pxor xmm4,XMMWORD PTR 32[esp]
+ lea esi,DWORD PTR 80[esi]
+ pxor xmm5,XMMWORD PTR 48[esp]
+ movdqa XMMWORD PTR 64[esp],xmm7
+ pxor xmm6,xmm7
+ call __aesni_encrypt6
+ movaps xmm1,XMMWORD PTR 64[esp]
+ xorps xmm2,XMMWORD PTR [esp]
+ xorps xmm3,XMMWORD PTR 16[esp]
+ xorps xmm4,XMMWORD PTR 32[esp]
+ movups XMMWORD PTR [edi],xmm2
+ xorps xmm5,XMMWORD PTR 48[esp]
+ movups XMMWORD PTR 16[edi],xmm3
+ xorps xmm6,xmm1
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ movups XMMWORD PTR 64[edi],xmm6
+ lea edi,DWORD PTR 80[edi]
+ jmp $L054xts_enc_done
+ALIGN 16
+$L050xts_enc_one:
+ movups xmm2,XMMWORD PTR [esi]
+ lea esi,DWORD PTR 16[esi]
+ xorps xmm2,xmm5
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L055enc1_loop_9:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L055enc1_loop_9
+DB 102,15,56,221,209
+ xorps xmm2,xmm5
+ movups XMMWORD PTR [edi],xmm2
+ lea edi,DWORD PTR 16[edi]
+ movdqa xmm1,xmm5
+ jmp $L054xts_enc_done
+ALIGN 16
+$L051xts_enc_two:
+ movaps xmm6,xmm1
+ movups xmm2,XMMWORD PTR [esi]
+ movups xmm3,XMMWORD PTR 16[esi]
+ lea esi,DWORD PTR 32[esi]
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ call __aesni_encrypt2
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ lea edi,DWORD PTR 32[edi]
+ movdqa xmm1,xmm6
+ jmp $L054xts_enc_done
+ALIGN 16
+$L052xts_enc_three:
+ movaps xmm7,xmm1
+ movups xmm2,XMMWORD PTR [esi]
+ movups xmm3,XMMWORD PTR 16[esi]
+ movups xmm4,XMMWORD PTR 32[esi]
+ lea esi,DWORD PTR 48[esi]
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ xorps xmm4,xmm7
+ call __aesni_encrypt3
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ xorps xmm4,xmm7
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ lea edi,DWORD PTR 48[edi]
+ movdqa xmm1,xmm7
+ jmp $L054xts_enc_done
+ALIGN 16
+$L053xts_enc_four:
+ movaps xmm6,xmm1
+ movups xmm2,XMMWORD PTR [esi]
+ movups xmm3,XMMWORD PTR 16[esi]
+ movups xmm4,XMMWORD PTR 32[esi]
+ xorps xmm2,XMMWORD PTR [esp]
+ movups xmm5,XMMWORD PTR 48[esi]
+ lea esi,DWORD PTR 64[esi]
+ xorps xmm3,XMMWORD PTR 16[esp]
+ xorps xmm4,xmm7
+ xorps xmm5,xmm6
+ call __aesni_encrypt4
+ xorps xmm2,XMMWORD PTR [esp]
+ xorps xmm3,XMMWORD PTR 16[esp]
+ xorps xmm4,xmm7
+ movups XMMWORD PTR [edi],xmm2
+ xorps xmm5,xmm6
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ lea edi,DWORD PTR 64[edi]
+ movdqa xmm1,xmm6
+ jmp $L054xts_enc_done
+ALIGN 16
+$L049xts_enc_done6x:
+ mov eax,DWORD PTR 112[esp]
+ and eax,15
+ jz $L056xts_enc_ret
+ movdqa xmm5,xmm1
+ mov DWORD PTR 112[esp],eax
+ jmp $L057xts_enc_steal
+ALIGN 16
+$L054xts_enc_done:
+ mov eax,DWORD PTR 112[esp]
+ pxor xmm0,xmm0
+ and eax,15
+ jz $L056xts_enc_ret
+ pcmpgtd xmm0,xmm1
+ mov DWORD PTR 112[esp],eax
+ pshufd xmm5,xmm0,19
+ paddq xmm1,xmm1
+ pand xmm5,XMMWORD PTR 96[esp]
+ pxor xmm5,xmm1
+$L057xts_enc_steal:
+ movzx ecx,BYTE PTR [esi]
+ movzx edx,BYTE PTR [edi-16]
+ lea esi,DWORD PTR 1[esi]
+ mov BYTE PTR [edi-16],cl
+ mov BYTE PTR [edi],dl
+ lea edi,DWORD PTR 1[edi]
+ sub eax,1
+ jnz $L057xts_enc_steal
+ sub edi,DWORD PTR 112[esp]
+ mov edx,ebp
+ mov ecx,ebx
+ movups xmm2,XMMWORD PTR [edi-16]
+ xorps xmm2,xmm5
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L058enc1_loop_10:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L058enc1_loop_10
+DB 102,15,56,221,209
+ xorps xmm2,xmm5
+ movups XMMWORD PTR [edi-16],xmm2
+$L056xts_enc_ret:
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ movdqa XMMWORD PTR [esp],xmm0
+ pxor xmm3,xmm3
+ movdqa XMMWORD PTR 16[esp],xmm0
+ pxor xmm4,xmm4
+ movdqa XMMWORD PTR 32[esp],xmm0
+ pxor xmm5,xmm5
+ movdqa XMMWORD PTR 48[esp],xmm0
+ pxor xmm6,xmm6
+ movdqa XMMWORD PTR 64[esp],xmm0
+ pxor xmm7,xmm7
+ movdqa XMMWORD PTR 80[esp],xmm0
+ mov esp,DWORD PTR 116[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_aesni_xts_encrypt ENDP
+ALIGN 16
+_aesni_xts_decrypt PROC PUBLIC
+$L_aesni_xts_decrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edx,DWORD PTR 36[esp]
+ mov esi,DWORD PTR 40[esp]
+ mov ecx,DWORD PTR 240[edx]
+ movups xmm2,XMMWORD PTR [esi]
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L059enc1_loop_11:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L059enc1_loop_11
+DB 102,15,56,221,209
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ mov ebp,esp
+ sub esp,120
+ and esp,-16
+ xor ebx,ebx
+ test eax,15
+ setnz bl
+ shl ebx,4
+ sub eax,ebx
+ mov DWORD PTR 96[esp],135
+ mov DWORD PTR 100[esp],0
+ mov DWORD PTR 104[esp],1
+ mov DWORD PTR 108[esp],0
+ mov DWORD PTR 112[esp],eax
+ mov DWORD PTR 116[esp],ebp
+ mov ecx,DWORD PTR 240[edx]
+ mov ebp,edx
+ mov ebx,ecx
+ movdqa xmm1,xmm2
+ pxor xmm0,xmm0
+ movdqa xmm3,XMMWORD PTR 96[esp]
+ pcmpgtd xmm0,xmm1
+ and eax,-16
+ sub eax,96
+ jc $L060xts_dec_short
+ shl ecx,4
+ mov ebx,16
+ sub ebx,ecx
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ jmp $L061xts_dec_loop6
+ALIGN 16
+$L061xts_dec_loop6:
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa XMMWORD PTR [esp],xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa XMMWORD PTR 16[esp],xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa XMMWORD PTR 32[esp],xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa XMMWORD PTR 48[esp],xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ pshufd xmm7,xmm0,19
+ movdqa XMMWORD PTR 64[esp],xmm1
+ paddq xmm1,xmm1
+ movups xmm0,XMMWORD PTR [ebp]
+ pand xmm7,xmm3
+ movups xmm2,XMMWORD PTR [esi]
+ pxor xmm7,xmm1
+ mov ecx,ebx
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ xorps xmm2,xmm0
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ pxor xmm3,xmm0
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ pxor xmm4,xmm0
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ pxor xmm5,xmm0
+ movdqu xmm1,XMMWORD PTR 80[esi]
+ pxor xmm6,xmm0
+ lea esi,DWORD PTR 96[esi]
+ pxor xmm2,XMMWORD PTR [esp]
+ movdqa XMMWORD PTR 80[esp],xmm7
+ pxor xmm7,xmm1
+ movups xmm1,XMMWORD PTR 16[ebp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,XMMWORD PTR 32[esp]
+DB 102,15,56,222,209
+ pxor xmm5,XMMWORD PTR 48[esp]
+ pxor xmm6,XMMWORD PTR 64[esp]
+DB 102,15,56,222,217
+ pxor xmm7,xmm0
+ movups xmm0,XMMWORD PTR 32[ebp]
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+ call $L_aesni_decrypt6_enter
+ movdqa xmm1,XMMWORD PTR 80[esp]
+ pxor xmm0,xmm0
+ xorps xmm2,XMMWORD PTR [esp]
+ pcmpgtd xmm0,xmm1
+ xorps xmm3,XMMWORD PTR 16[esp]
+ movups XMMWORD PTR [edi],xmm2
+ xorps xmm4,XMMWORD PTR 32[esp]
+ movups XMMWORD PTR 16[edi],xmm3
+ xorps xmm5,XMMWORD PTR 48[esp]
+ movups XMMWORD PTR 32[edi],xmm4
+ xorps xmm6,XMMWORD PTR 64[esp]
+ movups XMMWORD PTR 48[edi],xmm5
+ xorps xmm7,xmm1
+ movups XMMWORD PTR 64[edi],xmm6
+ pshufd xmm2,xmm0,19
+ movups XMMWORD PTR 80[edi],xmm7
+ lea edi,DWORD PTR 96[edi]
+ movdqa xmm3,XMMWORD PTR 96[esp]
+ pxor xmm0,xmm0
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ sub eax,96
+ jnc $L061xts_dec_loop6
+ mov ecx,DWORD PTR 240[ebp]
+ mov edx,ebp
+ mov ebx,ecx
+$L060xts_dec_short:
+ add eax,96
+ jz $L062xts_dec_done6x
+ movdqa xmm5,xmm1
+ cmp eax,32
+ jb $L063xts_dec_one
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ je $L064xts_dec_two
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa xmm6,xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ cmp eax,64
+ jb $L065xts_dec_three
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa xmm7,xmm1
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+ movdqa XMMWORD PTR [esp],xmm5
+ movdqa XMMWORD PTR 16[esp],xmm6
+ je $L066xts_dec_four
+ movdqa XMMWORD PTR 32[esp],xmm7
+ pshufd xmm7,xmm0,19
+ movdqa XMMWORD PTR 48[esp],xmm1
+ paddq xmm1,xmm1
+ pand xmm7,xmm3
+ pxor xmm7,xmm1
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ pxor xmm2,XMMWORD PTR [esp]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ pxor xmm4,XMMWORD PTR 32[esp]
+ lea esi,DWORD PTR 80[esi]
+ pxor xmm5,XMMWORD PTR 48[esp]
+ movdqa XMMWORD PTR 64[esp],xmm7
+ pxor xmm6,xmm7
+ call __aesni_decrypt6
+ movaps xmm1,XMMWORD PTR 64[esp]
+ xorps xmm2,XMMWORD PTR [esp]
+ xorps xmm3,XMMWORD PTR 16[esp]
+ xorps xmm4,XMMWORD PTR 32[esp]
+ movups XMMWORD PTR [edi],xmm2
+ xorps xmm5,XMMWORD PTR 48[esp]
+ movups XMMWORD PTR 16[edi],xmm3
+ xorps xmm6,xmm1
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ movups XMMWORD PTR 64[edi],xmm6
+ lea edi,DWORD PTR 80[edi]
+ jmp $L067xts_dec_done
+ALIGN 16
+$L063xts_dec_one:
+ movups xmm2,XMMWORD PTR [esi]
+ lea esi,DWORD PTR 16[esi]
+ xorps xmm2,xmm5
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L068dec1_loop_12:
+DB 102,15,56,222,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L068dec1_loop_12
+DB 102,15,56,223,209
+ xorps xmm2,xmm5
+ movups XMMWORD PTR [edi],xmm2
+ lea edi,DWORD PTR 16[edi]
+ movdqa xmm1,xmm5
+ jmp $L067xts_dec_done
+ALIGN 16
+$L064xts_dec_two:
+ movaps xmm6,xmm1
+ movups xmm2,XMMWORD PTR [esi]
+ movups xmm3,XMMWORD PTR 16[esi]
+ lea esi,DWORD PTR 32[esi]
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ call __aesni_decrypt2
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ lea edi,DWORD PTR 32[edi]
+ movdqa xmm1,xmm6
+ jmp $L067xts_dec_done
+ALIGN 16
+$L065xts_dec_three:
+ movaps xmm7,xmm1
+ movups xmm2,XMMWORD PTR [esi]
+ movups xmm3,XMMWORD PTR 16[esi]
+ movups xmm4,XMMWORD PTR 32[esi]
+ lea esi,DWORD PTR 48[esi]
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ xorps xmm4,xmm7
+ call __aesni_decrypt3
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ xorps xmm4,xmm7
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ lea edi,DWORD PTR 48[edi]
+ movdqa xmm1,xmm7
+ jmp $L067xts_dec_done
+ALIGN 16
+$L066xts_dec_four:
+ movaps xmm6,xmm1
+ movups xmm2,XMMWORD PTR [esi]
+ movups xmm3,XMMWORD PTR 16[esi]
+ movups xmm4,XMMWORD PTR 32[esi]
+ xorps xmm2,XMMWORD PTR [esp]
+ movups xmm5,XMMWORD PTR 48[esi]
+ lea esi,DWORD PTR 64[esi]
+ xorps xmm3,XMMWORD PTR 16[esp]
+ xorps xmm4,xmm7
+ xorps xmm5,xmm6
+ call __aesni_decrypt4
+ xorps xmm2,XMMWORD PTR [esp]
+ xorps xmm3,XMMWORD PTR 16[esp]
+ xorps xmm4,xmm7
+ movups XMMWORD PTR [edi],xmm2
+ xorps xmm5,xmm6
+ movups XMMWORD PTR 16[edi],xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ lea edi,DWORD PTR 64[edi]
+ movdqa xmm1,xmm6
+ jmp $L067xts_dec_done
+ALIGN 16
+$L062xts_dec_done6x:
+ mov eax,DWORD PTR 112[esp]
+ and eax,15
+ jz $L069xts_dec_ret
+ mov DWORD PTR 112[esp],eax
+ jmp $L070xts_dec_only_one_more
+ALIGN 16
+$L067xts_dec_done:
+ mov eax,DWORD PTR 112[esp]
+ pxor xmm0,xmm0
+ and eax,15
+ jz $L069xts_dec_ret
+ pcmpgtd xmm0,xmm1
+ mov DWORD PTR 112[esp],eax
+ pshufd xmm2,xmm0,19
+ pxor xmm0,xmm0
+ movdqa xmm3,XMMWORD PTR 96[esp]
+ paddq xmm1,xmm1
+ pand xmm2,xmm3
+ pcmpgtd xmm0,xmm1
+ pxor xmm1,xmm2
+$L070xts_dec_only_one_more:
+ pshufd xmm5,xmm0,19
+ movdqa xmm6,xmm1
+ paddq xmm1,xmm1
+ pand xmm5,xmm3
+ pxor xmm5,xmm1
+ mov edx,ebp
+ mov ecx,ebx
+ movups xmm2,XMMWORD PTR [esi]
+ xorps xmm2,xmm5
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L071dec1_loop_13:
+DB 102,15,56,222,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L071dec1_loop_13
+DB 102,15,56,223,209
+ xorps xmm2,xmm5
+ movups XMMWORD PTR [edi],xmm2
+$L072xts_dec_steal:
+ movzx ecx,BYTE PTR 16[esi]
+ movzx edx,BYTE PTR [edi]
+ lea esi,DWORD PTR 1[esi]
+ mov BYTE PTR [edi],cl
+ mov BYTE PTR 16[edi],dl
+ lea edi,DWORD PTR 1[edi]
+ sub eax,1
+ jnz $L072xts_dec_steal
+ sub edi,DWORD PTR 112[esp]
+ mov edx,ebp
+ mov ecx,ebx
+ movups xmm2,XMMWORD PTR [edi]
+ xorps xmm2,xmm6
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L073dec1_loop_14:
+DB 102,15,56,222,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L073dec1_loop_14
+DB 102,15,56,223,209
+ xorps xmm2,xmm6
+ movups XMMWORD PTR [edi],xmm2
+$L069xts_dec_ret:
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ movdqa XMMWORD PTR [esp],xmm0
+ pxor xmm3,xmm3
+ movdqa XMMWORD PTR 16[esp],xmm0
+ pxor xmm4,xmm4
+ movdqa XMMWORD PTR 32[esp],xmm0
+ pxor xmm5,xmm5
+ movdqa XMMWORD PTR 48[esp],xmm0
+ pxor xmm6,xmm6
+ movdqa XMMWORD PTR 64[esp],xmm0
+ pxor xmm7,xmm7
+ movdqa XMMWORD PTR 80[esp],xmm0
+ mov esp,DWORD PTR 116[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_aesni_xts_decrypt ENDP
+ALIGN 16
+_aesni_ocb_encrypt PROC PUBLIC
+$L_aesni_ocb_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov ecx,DWORD PTR 40[esp]
+ mov ebx,DWORD PTR 48[esp]
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ movdqu xmm0,XMMWORD PTR [ecx]
+ mov ebp,DWORD PTR 36[esp]
+ movdqu xmm1,XMMWORD PTR [ebx]
+ mov ebx,DWORD PTR 44[esp]
+ mov ecx,esp
+ sub esp,132
+ and esp,-16
+ sub edi,esi
+ shl eax,4
+ lea eax,DWORD PTR [eax*1+esi-96]
+ mov DWORD PTR 120[esp],edi
+ mov DWORD PTR 124[esp],eax
+ mov DWORD PTR 128[esp],ecx
+ mov ecx,DWORD PTR 240[edx]
+ test ebp,1
+ jnz $L074odd
+ bsf eax,ebp
+ add ebp,1
+ shl eax,4
+ movdqu xmm7,XMMWORD PTR [eax*1+ebx]
+ mov eax,edx
+ movdqu xmm2,XMMWORD PTR [esi]
+ lea esi,DWORD PTR 16[esi]
+ pxor xmm7,xmm0
+ pxor xmm1,xmm2
+ pxor xmm2,xmm7
+ movdqa xmm6,xmm1
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L075enc1_loop_15:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L075enc1_loop_15
+DB 102,15,56,221,209
+ xorps xmm2,xmm7
+ movdqa xmm0,xmm7
+ movdqa xmm1,xmm6
+ movups XMMWORD PTR [esi*1+edi-16],xmm2
+ mov ecx,DWORD PTR 240[eax]
+ mov edx,eax
+ mov eax,DWORD PTR 124[esp]
+$L074odd:
+ shl ecx,4
+ mov edi,16
+ sub edi,ecx
+ mov DWORD PTR 112[esp],edx
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ mov DWORD PTR 116[esp],edi
+ cmp esi,eax
+ ja $L076short
+ jmp $L077grandloop
+ALIGN 32
+$L077grandloop:
+ lea ecx,DWORD PTR 1[ebp]
+ lea eax,DWORD PTR 3[ebp]
+ lea edi,DWORD PTR 5[ebp]
+ add ebp,6
+ bsf ecx,ecx
+ bsf eax,eax
+ bsf edi,edi
+ shl ecx,4
+ shl eax,4
+ shl edi,4
+ movdqu xmm2,XMMWORD PTR [ebx]
+ movdqu xmm3,XMMWORD PTR [ecx*1+ebx]
+ mov ecx,DWORD PTR 116[esp]
+ movdqa xmm4,xmm2
+ movdqu xmm5,XMMWORD PTR [eax*1+ebx]
+ movdqa xmm6,xmm2
+ movdqu xmm7,XMMWORD PTR [edi*1+ebx]
+ pxor xmm2,xmm0
+ pxor xmm3,xmm2
+ movdqa XMMWORD PTR [esp],xmm2
+ pxor xmm4,xmm3
+ movdqa XMMWORD PTR 16[esp],xmm3
+ pxor xmm5,xmm4
+ movdqa XMMWORD PTR 32[esp],xmm4
+ pxor xmm6,xmm5
+ movdqa XMMWORD PTR 48[esp],xmm5
+ pxor xmm7,xmm6
+ movdqa XMMWORD PTR 64[esp],xmm6
+ movdqa XMMWORD PTR 80[esp],xmm7
+ movups xmm0,XMMWORD PTR [ecx*1+edx-48]
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ movdqu xmm7,XMMWORD PTR 80[esi]
+ lea esi,DWORD PTR 96[esi]
+ pxor xmm1,xmm2
+ pxor xmm2,xmm0
+ pxor xmm1,xmm3
+ pxor xmm3,xmm0
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ pxor xmm1,xmm5
+ pxor xmm5,xmm0
+ pxor xmm1,xmm6
+ pxor xmm6,xmm0
+ pxor xmm1,xmm7
+ pxor xmm7,xmm0
+ movdqa XMMWORD PTR 96[esp],xmm1
+ movups xmm1,XMMWORD PTR [ecx*1+edx-32]
+ pxor xmm2,XMMWORD PTR [esp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,XMMWORD PTR 32[esp]
+ pxor xmm5,XMMWORD PTR 48[esp]
+ pxor xmm6,XMMWORD PTR 64[esp]
+ pxor xmm7,XMMWORD PTR 80[esp]
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+ mov edi,DWORD PTR 120[esp]
+ mov eax,DWORD PTR 124[esp]
+ call $L_aesni_encrypt6_enter
+ movdqa xmm0,XMMWORD PTR 80[esp]
+ pxor xmm2,XMMWORD PTR [esp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,XMMWORD PTR 32[esp]
+ pxor xmm5,XMMWORD PTR 48[esp]
+ pxor xmm6,XMMWORD PTR 64[esp]
+ pxor xmm7,xmm0
+ movdqa xmm1,XMMWORD PTR 96[esp]
+ movdqu XMMWORD PTR [esi*1+edi-96],xmm2
+ movdqu XMMWORD PTR [esi*1+edi-80],xmm3
+ movdqu XMMWORD PTR [esi*1+edi-64],xmm4
+ movdqu XMMWORD PTR [esi*1+edi-48],xmm5
+ movdqu XMMWORD PTR [esi*1+edi-32],xmm6
+ movdqu XMMWORD PTR [esi*1+edi-16],xmm7
+ cmp esi,eax
+ jb $L077grandloop
+$L076short:
+ add eax,96
+ sub eax,esi
+ jz $L078done
+ cmp eax,32
+ jb $L079one
+ je $L080two
+ cmp eax,64
+ jb $L081three
+ je $L082four
+ lea ecx,DWORD PTR 1[ebp]
+ lea eax,DWORD PTR 3[ebp]
+ bsf ecx,ecx
+ bsf eax,eax
+ shl ecx,4
+ shl eax,4
+ movdqu xmm2,XMMWORD PTR [ebx]
+ movdqu xmm3,XMMWORD PTR [ecx*1+ebx]
+ mov ecx,DWORD PTR 116[esp]
+ movdqa xmm4,xmm2
+ movdqu xmm5,XMMWORD PTR [eax*1+ebx]
+ movdqa xmm6,xmm2
+ pxor xmm2,xmm0
+ pxor xmm3,xmm2
+ movdqa XMMWORD PTR [esp],xmm2
+ pxor xmm4,xmm3
+ movdqa XMMWORD PTR 16[esp],xmm3
+ pxor xmm5,xmm4
+ movdqa XMMWORD PTR 32[esp],xmm4
+ pxor xmm6,xmm5
+ movdqa XMMWORD PTR 48[esp],xmm5
+ pxor xmm7,xmm6
+ movdqa XMMWORD PTR 64[esp],xmm6
+ movups xmm0,XMMWORD PTR [ecx*1+edx-48]
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ pxor xmm7,xmm7
+ pxor xmm1,xmm2
+ pxor xmm2,xmm0
+ pxor xmm1,xmm3
+ pxor xmm3,xmm0
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ pxor xmm1,xmm5
+ pxor xmm5,xmm0
+ pxor xmm1,xmm6
+ pxor xmm6,xmm0
+ movdqa XMMWORD PTR 96[esp],xmm1
+ movups xmm1,XMMWORD PTR [ecx*1+edx-32]
+ pxor xmm2,XMMWORD PTR [esp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,XMMWORD PTR 32[esp]
+ pxor xmm5,XMMWORD PTR 48[esp]
+ pxor xmm6,XMMWORD PTR 64[esp]
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+ mov edi,DWORD PTR 120[esp]
+ call $L_aesni_encrypt6_enter
+ movdqa xmm0,XMMWORD PTR 64[esp]
+ pxor xmm2,XMMWORD PTR [esp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,XMMWORD PTR 32[esp]
+ pxor xmm5,XMMWORD PTR 48[esp]
+ pxor xmm6,xmm0
+ movdqa xmm1,XMMWORD PTR 96[esp]
+ movdqu XMMWORD PTR [esi*1+edi],xmm2
+ movdqu XMMWORD PTR 16[esi*1+edi],xmm3
+ movdqu XMMWORD PTR 32[esi*1+edi],xmm4
+ movdqu XMMWORD PTR 48[esi*1+edi],xmm5
+ movdqu XMMWORD PTR 64[esi*1+edi],xmm6
+ jmp $L078done
+ALIGN 16
+$L079one:
+ movdqu xmm7,XMMWORD PTR [ebx]
+ mov edx,DWORD PTR 112[esp]
+ movdqu xmm2,XMMWORD PTR [esi]
+ mov ecx,DWORD PTR 240[edx]
+ pxor xmm7,xmm0
+ pxor xmm1,xmm2
+ pxor xmm2,xmm7
+ movdqa xmm6,xmm1
+ mov edi,DWORD PTR 120[esp]
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L083enc1_loop_16:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L083enc1_loop_16
+DB 102,15,56,221,209
+ xorps xmm2,xmm7
+ movdqa xmm0,xmm7
+ movdqa xmm1,xmm6
+ movups XMMWORD PTR [esi*1+edi],xmm2
+ jmp $L078done
+ALIGN 16
+$L080two:
+ lea ecx,DWORD PTR 1[ebp]
+ mov edx,DWORD PTR 112[esp]
+ bsf ecx,ecx
+ shl ecx,4
+ movdqu xmm6,XMMWORD PTR [ebx]
+ movdqu xmm7,XMMWORD PTR [ecx*1+ebx]
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ mov ecx,DWORD PTR 240[edx]
+ pxor xmm6,xmm0
+ pxor xmm7,xmm6
+ pxor xmm1,xmm2
+ pxor xmm2,xmm6
+ pxor xmm1,xmm3
+ pxor xmm3,xmm7
+ movdqa xmm5,xmm1
+ mov edi,DWORD PTR 120[esp]
+ call __aesni_encrypt2
+ xorps xmm2,xmm6
+ xorps xmm3,xmm7
+ movdqa xmm0,xmm7
+ movdqa xmm1,xmm5
+ movups XMMWORD PTR [esi*1+edi],xmm2
+ movups XMMWORD PTR 16[esi*1+edi],xmm3
+ jmp $L078done
+ALIGN 16
+$L081three:
+ lea ecx,DWORD PTR 1[ebp]
+ mov edx,DWORD PTR 112[esp]
+ bsf ecx,ecx
+ shl ecx,4
+ movdqu xmm5,XMMWORD PTR [ebx]
+ movdqu xmm6,XMMWORD PTR [ecx*1+ebx]
+ movdqa xmm7,xmm5
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ mov ecx,DWORD PTR 240[edx]
+ pxor xmm5,xmm0
+ pxor xmm6,xmm5
+ pxor xmm7,xmm6
+ pxor xmm1,xmm2
+ pxor xmm2,xmm5
+ pxor xmm1,xmm3
+ pxor xmm3,xmm6
+ pxor xmm1,xmm4
+ pxor xmm4,xmm7
+ movdqa XMMWORD PTR 96[esp],xmm1
+ mov edi,DWORD PTR 120[esp]
+ call __aesni_encrypt3
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ xorps xmm4,xmm7
+ movdqa xmm0,xmm7
+ movdqa xmm1,XMMWORD PTR 96[esp]
+ movups XMMWORD PTR [esi*1+edi],xmm2
+ movups XMMWORD PTR 16[esi*1+edi],xmm3
+ movups XMMWORD PTR 32[esi*1+edi],xmm4
+ jmp $L078done
+ALIGN 16
+$L082four:
+ lea ecx,DWORD PTR 1[ebp]
+ lea eax,DWORD PTR 3[ebp]
+ bsf ecx,ecx
+ bsf eax,eax
+ mov edx,DWORD PTR 112[esp]
+ shl ecx,4
+ shl eax,4
+ movdqu xmm4,XMMWORD PTR [ebx]
+ movdqu xmm5,XMMWORD PTR [ecx*1+ebx]
+ movdqa xmm6,xmm4
+ movdqu xmm7,XMMWORD PTR [eax*1+ebx]
+ pxor xmm4,xmm0
+ movdqu xmm2,XMMWORD PTR [esi]
+ pxor xmm5,xmm4
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ pxor xmm6,xmm5
+ movdqa XMMWORD PTR [esp],xmm4
+ pxor xmm7,xmm6
+ movdqa XMMWORD PTR 16[esp],xmm5
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ mov ecx,DWORD PTR 240[edx]
+ pxor xmm1,xmm2
+ pxor xmm2,XMMWORD PTR [esp]
+ pxor xmm1,xmm3
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm1,xmm4
+ pxor xmm4,xmm6
+ pxor xmm1,xmm5
+ pxor xmm5,xmm7
+ movdqa XMMWORD PTR 96[esp],xmm1
+ mov edi,DWORD PTR 120[esp]
+ call __aesni_encrypt4
+ xorps xmm2,XMMWORD PTR [esp]
+ xorps xmm3,XMMWORD PTR 16[esp]
+ xorps xmm4,xmm6
+ movups XMMWORD PTR [esi*1+edi],xmm2
+ xorps xmm5,xmm7
+ movups XMMWORD PTR 16[esi*1+edi],xmm3
+ movdqa xmm0,xmm7
+ movups XMMWORD PTR 32[esi*1+edi],xmm4
+ movdqa xmm1,XMMWORD PTR 96[esp]
+ movups XMMWORD PTR 48[esi*1+edi],xmm5
+$L078done:
+ mov edx,DWORD PTR 128[esp]
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ movdqa XMMWORD PTR [esp],xmm2
+ pxor xmm4,xmm4
+ movdqa XMMWORD PTR 16[esp],xmm2
+ pxor xmm5,xmm5
+ movdqa XMMWORD PTR 32[esp],xmm2
+ pxor xmm6,xmm6
+ movdqa XMMWORD PTR 48[esp],xmm2
+ pxor xmm7,xmm7
+ movdqa XMMWORD PTR 64[esp],xmm2
+ movdqa XMMWORD PTR 80[esp],xmm2
+ movdqa XMMWORD PTR 96[esp],xmm2
+ lea esp,DWORD PTR [edx]
+ mov ecx,DWORD PTR 40[esp]
+ mov ebx,DWORD PTR 48[esp]
+ movdqu XMMWORD PTR [ecx],xmm0
+ pxor xmm0,xmm0
+ movdqu XMMWORD PTR [ebx],xmm1
+ pxor xmm1,xmm1
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_aesni_ocb_encrypt ENDP
+ALIGN 16
+_aesni_ocb_decrypt PROC PUBLIC
+$L_aesni_ocb_decrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov ecx,DWORD PTR 40[esp]
+ mov ebx,DWORD PTR 48[esp]
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ movdqu xmm0,XMMWORD PTR [ecx]
+ mov ebp,DWORD PTR 36[esp]
+ movdqu xmm1,XMMWORD PTR [ebx]
+ mov ebx,DWORD PTR 44[esp]
+ mov ecx,esp
+ sub esp,132
+ and esp,-16
+ sub edi,esi
+ shl eax,4
+ lea eax,DWORD PTR [eax*1+esi-96]
+ mov DWORD PTR 120[esp],edi
+ mov DWORD PTR 124[esp],eax
+ mov DWORD PTR 128[esp],ecx
+ mov ecx,DWORD PTR 240[edx]
+ test ebp,1
+ jnz $L084odd
+ bsf eax,ebp
+ add ebp,1
+ shl eax,4
+ movdqu xmm7,XMMWORD PTR [eax*1+ebx]
+ mov eax,edx
+ movdqu xmm2,XMMWORD PTR [esi]
+ lea esi,DWORD PTR 16[esi]
+ pxor xmm7,xmm0
+ pxor xmm2,xmm7
+ movdqa xmm6,xmm1
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L085dec1_loop_17:
+DB 102,15,56,222,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L085dec1_loop_17
+DB 102,15,56,223,209
+ xorps xmm2,xmm7
+ movaps xmm1,xmm6
+ movdqa xmm0,xmm7
+ xorps xmm1,xmm2
+ movups XMMWORD PTR [esi*1+edi-16],xmm2
+ mov ecx,DWORD PTR 240[eax]
+ mov edx,eax
+ mov eax,DWORD PTR 124[esp]
+$L084odd:
+ shl ecx,4
+ mov edi,16
+ sub edi,ecx
+ mov DWORD PTR 112[esp],edx
+ lea edx,DWORD PTR 32[ecx*1+edx]
+ mov DWORD PTR 116[esp],edi
+ cmp esi,eax
+ ja $L086short
+ jmp $L087grandloop
+ALIGN 32
+$L087grandloop:
+ lea ecx,DWORD PTR 1[ebp]
+ lea eax,DWORD PTR 3[ebp]
+ lea edi,DWORD PTR 5[ebp]
+ add ebp,6
+ bsf ecx,ecx
+ bsf eax,eax
+ bsf edi,edi
+ shl ecx,4
+ shl eax,4
+ shl edi,4
+ movdqu xmm2,XMMWORD PTR [ebx]
+ movdqu xmm3,XMMWORD PTR [ecx*1+ebx]
+ mov ecx,DWORD PTR 116[esp]
+ movdqa xmm4,xmm2
+ movdqu xmm5,XMMWORD PTR [eax*1+ebx]
+ movdqa xmm6,xmm2
+ movdqu xmm7,XMMWORD PTR [edi*1+ebx]
+ pxor xmm2,xmm0
+ pxor xmm3,xmm2
+ movdqa XMMWORD PTR [esp],xmm2
+ pxor xmm4,xmm3
+ movdqa XMMWORD PTR 16[esp],xmm3
+ pxor xmm5,xmm4
+ movdqa XMMWORD PTR 32[esp],xmm4
+ pxor xmm6,xmm5
+ movdqa XMMWORD PTR 48[esp],xmm5
+ pxor xmm7,xmm6
+ movdqa XMMWORD PTR 64[esp],xmm6
+ movdqa XMMWORD PTR 80[esp],xmm7
+ movups xmm0,XMMWORD PTR [ecx*1+edx-48]
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ movdqu xmm7,XMMWORD PTR 80[esi]
+ lea esi,DWORD PTR 96[esi]
+ movdqa XMMWORD PTR 96[esp],xmm1
+ pxor xmm2,xmm0
+ pxor xmm3,xmm0
+ pxor xmm4,xmm0
+ pxor xmm5,xmm0
+ pxor xmm6,xmm0
+ pxor xmm7,xmm0
+ movups xmm1,XMMWORD PTR [ecx*1+edx-32]
+ pxor xmm2,XMMWORD PTR [esp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,XMMWORD PTR 32[esp]
+ pxor xmm5,XMMWORD PTR 48[esp]
+ pxor xmm6,XMMWORD PTR 64[esp]
+ pxor xmm7,XMMWORD PTR 80[esp]
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+ mov edi,DWORD PTR 120[esp]
+ mov eax,DWORD PTR 124[esp]
+ call $L_aesni_decrypt6_enter
+ movdqa xmm0,XMMWORD PTR 80[esp]
+ pxor xmm2,XMMWORD PTR [esp]
+ movdqa xmm1,XMMWORD PTR 96[esp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,XMMWORD PTR 32[esp]
+ pxor xmm5,XMMWORD PTR 48[esp]
+ pxor xmm6,XMMWORD PTR 64[esp]
+ pxor xmm7,xmm0
+ pxor xmm1,xmm2
+ movdqu XMMWORD PTR [esi*1+edi-96],xmm2
+ pxor xmm1,xmm3
+ movdqu XMMWORD PTR [esi*1+edi-80],xmm3
+ pxor xmm1,xmm4
+ movdqu XMMWORD PTR [esi*1+edi-64],xmm4
+ pxor xmm1,xmm5
+ movdqu XMMWORD PTR [esi*1+edi-48],xmm5
+ pxor xmm1,xmm6
+ movdqu XMMWORD PTR [esi*1+edi-32],xmm6
+ pxor xmm1,xmm7
+ movdqu XMMWORD PTR [esi*1+edi-16],xmm7
+ cmp esi,eax
+ jb $L087grandloop
+$L086short:
+ add eax,96
+ sub eax,esi
+ jz $L088done
+ cmp eax,32
+ jb $L089one
+ je $L090two
+ cmp eax,64
+ jb $L091three
+ je $L092four
+ lea ecx,DWORD PTR 1[ebp]
+ lea eax,DWORD PTR 3[ebp]
+ bsf ecx,ecx
+ bsf eax,eax
+ shl ecx,4
+ shl eax,4
+ movdqu xmm2,XMMWORD PTR [ebx]
+ movdqu xmm3,XMMWORD PTR [ecx*1+ebx]
+ mov ecx,DWORD PTR 116[esp]
+ movdqa xmm4,xmm2
+ movdqu xmm5,XMMWORD PTR [eax*1+ebx]
+ movdqa xmm6,xmm2
+ pxor xmm2,xmm0
+ pxor xmm3,xmm2
+ movdqa XMMWORD PTR [esp],xmm2
+ pxor xmm4,xmm3
+ movdqa XMMWORD PTR 16[esp],xmm3
+ pxor xmm5,xmm4
+ movdqa XMMWORD PTR 32[esp],xmm4
+ pxor xmm6,xmm5
+ movdqa XMMWORD PTR 48[esp],xmm5
+ pxor xmm7,xmm6
+ movdqa XMMWORD PTR 64[esp],xmm6
+ movups xmm0,XMMWORD PTR [ecx*1+edx-48]
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ pxor xmm7,xmm7
+ movdqa XMMWORD PTR 96[esp],xmm1
+ pxor xmm2,xmm0
+ pxor xmm3,xmm0
+ pxor xmm4,xmm0
+ pxor xmm5,xmm0
+ pxor xmm6,xmm0
+ movups xmm1,XMMWORD PTR [ecx*1+edx-32]
+ pxor xmm2,XMMWORD PTR [esp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,XMMWORD PTR 32[esp]
+ pxor xmm5,XMMWORD PTR 48[esp]
+ pxor xmm6,XMMWORD PTR 64[esp]
+ movups xmm0,XMMWORD PTR [ecx*1+edx-16]
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+ mov edi,DWORD PTR 120[esp]
+ call $L_aesni_decrypt6_enter
+ movdqa xmm0,XMMWORD PTR 64[esp]
+ pxor xmm2,XMMWORD PTR [esp]
+ movdqa xmm1,XMMWORD PTR 96[esp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,XMMWORD PTR 32[esp]
+ pxor xmm5,XMMWORD PTR 48[esp]
+ pxor xmm6,xmm0
+ pxor xmm1,xmm2
+ movdqu XMMWORD PTR [esi*1+edi],xmm2
+ pxor xmm1,xmm3
+ movdqu XMMWORD PTR 16[esi*1+edi],xmm3
+ pxor xmm1,xmm4
+ movdqu XMMWORD PTR 32[esi*1+edi],xmm4
+ pxor xmm1,xmm5
+ movdqu XMMWORD PTR 48[esi*1+edi],xmm5
+ pxor xmm1,xmm6
+ movdqu XMMWORD PTR 64[esi*1+edi],xmm6
+ jmp $L088done
+ALIGN 16
+$L089one:
+ movdqu xmm7,XMMWORD PTR [ebx]
+ mov edx,DWORD PTR 112[esp]
+ movdqu xmm2,XMMWORD PTR [esi]
+ mov ecx,DWORD PTR 240[edx]
+ pxor xmm7,xmm0
+ pxor xmm2,xmm7
+ movdqa xmm6,xmm1
+ mov edi,DWORD PTR 120[esp]
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L093dec1_loop_18:
+DB 102,15,56,222,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L093dec1_loop_18
+DB 102,15,56,223,209
+ xorps xmm2,xmm7
+ movaps xmm1,xmm6
+ movdqa xmm0,xmm7
+ xorps xmm1,xmm2
+ movups XMMWORD PTR [esi*1+edi],xmm2
+ jmp $L088done
+ALIGN 16
+$L090two:
+ lea ecx,DWORD PTR 1[ebp]
+ mov edx,DWORD PTR 112[esp]
+ bsf ecx,ecx
+ shl ecx,4
+ movdqu xmm6,XMMWORD PTR [ebx]
+ movdqu xmm7,XMMWORD PTR [ecx*1+ebx]
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ mov ecx,DWORD PTR 240[edx]
+ movdqa xmm5,xmm1
+ pxor xmm6,xmm0
+ pxor xmm7,xmm6
+ pxor xmm2,xmm6
+ pxor xmm3,xmm7
+ mov edi,DWORD PTR 120[esp]
+ call __aesni_decrypt2
+ xorps xmm2,xmm6
+ xorps xmm3,xmm7
+ movdqa xmm0,xmm7
+ xorps xmm5,xmm2
+ movups XMMWORD PTR [esi*1+edi],xmm2
+ xorps xmm5,xmm3
+ movups XMMWORD PTR 16[esi*1+edi],xmm3
+ movaps xmm1,xmm5
+ jmp $L088done
+ALIGN 16
+$L091three:
+ lea ecx,DWORD PTR 1[ebp]
+ mov edx,DWORD PTR 112[esp]
+ bsf ecx,ecx
+ shl ecx,4
+ movdqu xmm5,XMMWORD PTR [ebx]
+ movdqu xmm6,XMMWORD PTR [ecx*1+ebx]
+ movdqa xmm7,xmm5
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ mov ecx,DWORD PTR 240[edx]
+ movdqa XMMWORD PTR 96[esp],xmm1
+ pxor xmm5,xmm0
+ pxor xmm6,xmm5
+ pxor xmm7,xmm6
+ pxor xmm2,xmm5
+ pxor xmm3,xmm6
+ pxor xmm4,xmm7
+ mov edi,DWORD PTR 120[esp]
+ call __aesni_decrypt3
+ movdqa xmm1,XMMWORD PTR 96[esp]
+ xorps xmm2,xmm5
+ xorps xmm3,xmm6
+ xorps xmm4,xmm7
+ movups XMMWORD PTR [esi*1+edi],xmm2
+ pxor xmm1,xmm2
+ movdqa xmm0,xmm7
+ movups XMMWORD PTR 16[esi*1+edi],xmm3
+ pxor xmm1,xmm3
+ movups XMMWORD PTR 32[esi*1+edi],xmm4
+ pxor xmm1,xmm4
+ jmp $L088done
+ALIGN 16
+$L092four:
+ lea ecx,DWORD PTR 1[ebp]
+ lea eax,DWORD PTR 3[ebp]
+ bsf ecx,ecx
+ bsf eax,eax
+ mov edx,DWORD PTR 112[esp]
+ shl ecx,4
+ shl eax,4
+ movdqu xmm4,XMMWORD PTR [ebx]
+ movdqu xmm5,XMMWORD PTR [ecx*1+ebx]
+ movdqa xmm6,xmm4
+ movdqu xmm7,XMMWORD PTR [eax*1+ebx]
+ pxor xmm4,xmm0
+ movdqu xmm2,XMMWORD PTR [esi]
+ pxor xmm5,xmm4
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ pxor xmm6,xmm5
+ movdqa XMMWORD PTR [esp],xmm4
+ pxor xmm7,xmm6
+ movdqa XMMWORD PTR 16[esp],xmm5
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ mov ecx,DWORD PTR 240[edx]
+ movdqa XMMWORD PTR 96[esp],xmm1
+ pxor xmm2,XMMWORD PTR [esp]
+ pxor xmm3,XMMWORD PTR 16[esp]
+ pxor xmm4,xmm6
+ pxor xmm5,xmm7
+ mov edi,DWORD PTR 120[esp]
+ call __aesni_decrypt4
+ movdqa xmm1,XMMWORD PTR 96[esp]
+ xorps xmm2,XMMWORD PTR [esp]
+ xorps xmm3,XMMWORD PTR 16[esp]
+ xorps xmm4,xmm6
+ movups XMMWORD PTR [esi*1+edi],xmm2
+ pxor xmm1,xmm2
+ xorps xmm5,xmm7
+ movups XMMWORD PTR 16[esi*1+edi],xmm3
+ pxor xmm1,xmm3
+ movdqa xmm0,xmm7
+ movups XMMWORD PTR 32[esi*1+edi],xmm4
+ pxor xmm1,xmm4
+ movups XMMWORD PTR 48[esi*1+edi],xmm5
+ pxor xmm1,xmm5
+$L088done:
+ mov edx,DWORD PTR 128[esp]
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ movdqa XMMWORD PTR [esp],xmm2
+ pxor xmm4,xmm4
+ movdqa XMMWORD PTR 16[esp],xmm2
+ pxor xmm5,xmm5
+ movdqa XMMWORD PTR 32[esp],xmm2
+ pxor xmm6,xmm6
+ movdqa XMMWORD PTR 48[esp],xmm2
+ pxor xmm7,xmm7
+ movdqa XMMWORD PTR 64[esp],xmm2
+ movdqa XMMWORD PTR 80[esp],xmm2
+ movdqa XMMWORD PTR 96[esp],xmm2
+ lea esp,DWORD PTR [edx]
+ mov ecx,DWORD PTR 40[esp]
+ mov ebx,DWORD PTR 48[esp]
+ movdqu XMMWORD PTR [ecx],xmm0
+ pxor xmm0,xmm0
+ movdqu XMMWORD PTR [ebx],xmm1
+ pxor xmm1,xmm1
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_aesni_ocb_decrypt ENDP
+ALIGN 16
+_aesni_cbc_encrypt PROC PUBLIC
+$L_aesni_cbc_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ mov ebx,esp
+ mov edi,DWORD PTR 24[esp]
+ sub ebx,24
+ mov eax,DWORD PTR 28[esp]
+ and ebx,-16
+ mov edx,DWORD PTR 32[esp]
+ mov ebp,DWORD PTR 36[esp]
+ test eax,eax
+ jz $L094cbc_abort
+ cmp DWORD PTR 40[esp],0
+ xchg ebx,esp
+ movups xmm7,XMMWORD PTR [ebp]
+ mov ecx,DWORD PTR 240[edx]
+ mov ebp,edx
+ mov DWORD PTR 16[esp],ebx
+ mov ebx,ecx
+ je $L095cbc_decrypt
+ movaps xmm2,xmm7
+ cmp eax,16
+ jb $L096cbc_enc_tail
+ sub eax,16
+ jmp $L097cbc_enc_loop
+ALIGN 16
+$L097cbc_enc_loop:
+ movups xmm7,XMMWORD PTR [esi]
+ lea esi,DWORD PTR 16[esi]
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ xorps xmm7,xmm0
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm7
+$L098enc1_loop_19:
+DB 102,15,56,220,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L098enc1_loop_19
+DB 102,15,56,221,209
+ mov ecx,ebx
+ mov edx,ebp
+ movups XMMWORD PTR [edi],xmm2
+ lea edi,DWORD PTR 16[edi]
+ sub eax,16
+ jnc $L097cbc_enc_loop
+ add eax,16
+ jnz $L096cbc_enc_tail
+ movaps xmm7,xmm2
+ pxor xmm2,xmm2
+ jmp $L099cbc_ret
+$L096cbc_enc_tail:
+ mov ecx,eax
+DD 2767451785
+ mov ecx,16
+ sub ecx,eax
+ xor eax,eax
+DD 2868115081
+ lea edi,DWORD PTR [edi-16]
+ mov ecx,ebx
+ mov esi,edi
+ mov edx,ebp
+ jmp $L097cbc_enc_loop
+ALIGN 16
+$L095cbc_decrypt:
+ cmp eax,80
+ jbe $L100cbc_dec_tail
+ movaps XMMWORD PTR [esp],xmm7
+ sub eax,80
+ jmp $L101cbc_dec_loop6_enter
+ALIGN 16
+$L102cbc_dec_loop6:
+ movaps XMMWORD PTR [esp],xmm0
+ movups XMMWORD PTR [edi],xmm7
+ lea edi,DWORD PTR 16[edi]
+$L101cbc_dec_loop6_enter:
+ movdqu xmm2,XMMWORD PTR [esi]
+ movdqu xmm3,XMMWORD PTR 16[esi]
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ movdqu xmm6,XMMWORD PTR 64[esi]
+ movdqu xmm7,XMMWORD PTR 80[esi]
+ call __aesni_decrypt6
+ movups xmm1,XMMWORD PTR [esi]
+ movups xmm0,XMMWORD PTR 16[esi]
+ xorps xmm2,XMMWORD PTR [esp]
+ xorps xmm3,xmm1
+ movups xmm1,XMMWORD PTR 32[esi]
+ xorps xmm4,xmm0
+ movups xmm0,XMMWORD PTR 48[esi]
+ xorps xmm5,xmm1
+ movups xmm1,XMMWORD PTR 64[esi]
+ xorps xmm6,xmm0
+ movups xmm0,XMMWORD PTR 80[esi]
+ xorps xmm7,xmm1
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ lea esi,DWORD PTR 96[esi]
+ movups XMMWORD PTR 32[edi],xmm4
+ mov ecx,ebx
+ movups XMMWORD PTR 48[edi],xmm5
+ mov edx,ebp
+ movups XMMWORD PTR 64[edi],xmm6
+ lea edi,DWORD PTR 80[edi]
+ sub eax,96
+ ja $L102cbc_dec_loop6
+ movaps xmm2,xmm7
+ movaps xmm7,xmm0
+ add eax,80
+ jle $L103cbc_dec_clear_tail_collected
+ movups XMMWORD PTR [edi],xmm2
+ lea edi,DWORD PTR 16[edi]
+$L100cbc_dec_tail:
+ movups xmm2,XMMWORD PTR [esi]
+ movaps xmm6,xmm2
+ cmp eax,16
+ jbe $L104cbc_dec_one
+ movups xmm3,XMMWORD PTR 16[esi]
+ movaps xmm5,xmm3
+ cmp eax,32
+ jbe $L105cbc_dec_two
+ movups xmm4,XMMWORD PTR 32[esi]
+ cmp eax,48
+ jbe $L106cbc_dec_three
+ movups xmm5,XMMWORD PTR 48[esi]
+ cmp eax,64
+ jbe $L107cbc_dec_four
+ movups xmm6,XMMWORD PTR 64[esi]
+ movaps XMMWORD PTR [esp],xmm7
+ movups xmm2,XMMWORD PTR [esi]
+ xorps xmm7,xmm7
+ call __aesni_decrypt6
+ movups xmm1,XMMWORD PTR [esi]
+ movups xmm0,XMMWORD PTR 16[esi]
+ xorps xmm2,XMMWORD PTR [esp]
+ xorps xmm3,xmm1
+ movups xmm1,XMMWORD PTR 32[esi]
+ xorps xmm4,xmm0
+ movups xmm0,XMMWORD PTR 48[esi]
+ xorps xmm5,xmm1
+ movups xmm7,XMMWORD PTR 64[esi]
+ xorps xmm6,xmm0
+ movups XMMWORD PTR [edi],xmm2
+ movups XMMWORD PTR 16[edi],xmm3
+ pxor xmm3,xmm3
+ movups XMMWORD PTR 32[edi],xmm4
+ pxor xmm4,xmm4
+ movups XMMWORD PTR 48[edi],xmm5
+ pxor xmm5,xmm5
+ lea edi,DWORD PTR 64[edi]
+ movaps xmm2,xmm6
+ pxor xmm6,xmm6
+ sub eax,80
+ jmp $L108cbc_dec_tail_collected
+ALIGN 16
+$L104cbc_dec_one:
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR 16[edx]
+ lea edx,DWORD PTR 32[edx]
+ xorps xmm2,xmm0
+$L109dec1_loop_20:
+DB 102,15,56,222,209
+ dec ecx
+ movups xmm1,XMMWORD PTR [edx]
+ lea edx,DWORD PTR 16[edx]
+ jnz $L109dec1_loop_20
+DB 102,15,56,223,209
+ xorps xmm2,xmm7
+ movaps xmm7,xmm6
+ sub eax,16
+ jmp $L108cbc_dec_tail_collected
+ALIGN 16
+$L105cbc_dec_two:
+ call __aesni_decrypt2
+ xorps xmm2,xmm7
+ xorps xmm3,xmm6
+ movups XMMWORD PTR [edi],xmm2
+ movaps xmm2,xmm3
+ pxor xmm3,xmm3
+ lea edi,DWORD PTR 16[edi]
+ movaps xmm7,xmm5
+ sub eax,32
+ jmp $L108cbc_dec_tail_collected
+ALIGN 16
+$L106cbc_dec_three:
+ call __aesni_decrypt3
+ xorps xmm2,xmm7
+ xorps xmm3,xmm6
+ xorps xmm4,xmm5
+ movups XMMWORD PTR [edi],xmm2
+ movaps xmm2,xmm4
+ pxor xmm4,xmm4
+ movups XMMWORD PTR 16[edi],xmm3
+ pxor xmm3,xmm3
+ lea edi,DWORD PTR 32[edi]
+ movups xmm7,XMMWORD PTR 32[esi]
+ sub eax,48
+ jmp $L108cbc_dec_tail_collected
+ALIGN 16
+$L107cbc_dec_four:
+ call __aesni_decrypt4
+ movups xmm1,XMMWORD PTR 16[esi]
+ movups xmm0,XMMWORD PTR 32[esi]
+ xorps xmm2,xmm7
+ movups xmm7,XMMWORD PTR 48[esi]
+ xorps xmm3,xmm6
+ movups XMMWORD PTR [edi],xmm2
+ xorps xmm4,xmm1
+ movups XMMWORD PTR 16[edi],xmm3
+ pxor xmm3,xmm3
+ xorps xmm5,xmm0
+ movups XMMWORD PTR 32[edi],xmm4
+ pxor xmm4,xmm4
+ lea edi,DWORD PTR 48[edi]
+ movaps xmm2,xmm5
+ pxor xmm5,xmm5
+ sub eax,64
+ jmp $L108cbc_dec_tail_collected
+ALIGN 16
+$L103cbc_dec_clear_tail_collected:
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ pxor xmm6,xmm6
+$L108cbc_dec_tail_collected:
+ and eax,15
+ jnz $L110cbc_dec_tail_partial
+ movups XMMWORD PTR [edi],xmm2
+ pxor xmm0,xmm0
+ jmp $L099cbc_ret
+ALIGN 16
+$L110cbc_dec_tail_partial:
+ movaps XMMWORD PTR [esp],xmm2
+ pxor xmm0,xmm0
+ mov ecx,16
+ mov esi,esp
+ sub ecx,eax
+DD 2767451785
+ movdqa XMMWORD PTR [esp],xmm2
+$L099cbc_ret:
+ mov esp,DWORD PTR 16[esp]
+ mov ebp,DWORD PTR 36[esp]
+ pxor xmm2,xmm2
+ pxor xmm1,xmm1
+ movups XMMWORD PTR [ebp],xmm7
+ pxor xmm7,xmm7
+$L094cbc_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_aesni_cbc_encrypt ENDP
+ALIGN 16
+__aesni_set_encrypt_key PROC PRIVATE
+ push ebp
+ push ebx
+ test eax,eax
+ jz $L111bad_pointer
+ test edx,edx
+ jz $L111bad_pointer
+ call $L112pic
+$L112pic:
+ pop ebx
+ lea ebx,DWORD PTR ($Lkey_const-$L112pic)[ebx]
+ lea ebp,DWORD PTR _OPENSSL_ia32cap_P
+ movups xmm0,XMMWORD PTR [eax]
+ xorps xmm4,xmm4
+ mov ebp,DWORD PTR 4[ebp]
+ lea edx,DWORD PTR 16[edx]
+ and ebp,268437504
+ cmp ecx,256
+ je $L11314rounds
+ cmp ecx,192
+ je $L11412rounds
+ cmp ecx,128
+ jne $L115bad_keybits
+ALIGN 16
+$L11610rounds:
+ cmp ebp,268435456
+ je $L11710rounds_alt
+ mov ecx,9
+ movups XMMWORD PTR [edx-16],xmm0
+DB 102,15,58,223,200,1
+ call $L118key_128_cold
+DB 102,15,58,223,200,2
+ call $L119key_128
+DB 102,15,58,223,200,4
+ call $L119key_128
+DB 102,15,58,223,200,8
+ call $L119key_128
+DB 102,15,58,223,200,16
+ call $L119key_128
+DB 102,15,58,223,200,32
+ call $L119key_128
+DB 102,15,58,223,200,64
+ call $L119key_128
+DB 102,15,58,223,200,128
+ call $L119key_128
+DB 102,15,58,223,200,27
+ call $L119key_128
+DB 102,15,58,223,200,54
+ call $L119key_128
+ movups XMMWORD PTR [edx],xmm0
+ mov DWORD PTR 80[edx],ecx
+ jmp $L120good_key
+ALIGN 16
+$L119key_128:
+ movups XMMWORD PTR [edx],xmm0
+ lea edx,DWORD PTR 16[edx]
+$L118key_128_cold:
+ shufps xmm4,xmm0,16
+ xorps xmm0,xmm4
+ shufps xmm4,xmm0,140
+ xorps xmm0,xmm4
+ shufps xmm1,xmm1,255
+ xorps xmm0,xmm1
+ ret
+ALIGN 16
+$L11710rounds_alt:
+ movdqa xmm5,XMMWORD PTR [ebx]
+ mov ecx,8
+ movdqa xmm4,XMMWORD PTR 32[ebx]
+ movdqa xmm2,xmm0
+ movdqu XMMWORD PTR [edx-16],xmm0
+$L121loop_key128:
+DB 102,15,56,0,197
+DB 102,15,56,221,196
+ pslld xmm4,1
+ lea edx,DWORD PTR 16[edx]
+ movdqa xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm2,xmm3
+ pxor xmm0,xmm2
+ movdqu XMMWORD PTR [edx-16],xmm0
+ movdqa xmm2,xmm0
+ dec ecx
+ jnz $L121loop_key128
+ movdqa xmm4,XMMWORD PTR 48[ebx]
+DB 102,15,56,0,197
+DB 102,15,56,221,196
+ pslld xmm4,1
+ movdqa xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm2,xmm3
+ pxor xmm0,xmm2
+ movdqu XMMWORD PTR [edx],xmm0
+ movdqa xmm2,xmm0
+DB 102,15,56,0,197
+DB 102,15,56,221,196
+ movdqa xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm2,xmm3
+ pxor xmm0,xmm2
+ movdqu XMMWORD PTR 16[edx],xmm0
+ mov ecx,9
+ mov DWORD PTR 96[edx],ecx
+ jmp $L120good_key
+ALIGN 16
+$L11412rounds:
+ movq xmm2,QWORD PTR 16[eax]
+ cmp ebp,268435456
+ je $L12212rounds_alt
+ mov ecx,11
+ movups XMMWORD PTR [edx-16],xmm0
+DB 102,15,58,223,202,1
+ call $L123key_192a_cold
+DB 102,15,58,223,202,2
+ call $L124key_192b
+DB 102,15,58,223,202,4
+ call $L125key_192a
+DB 102,15,58,223,202,8
+ call $L124key_192b
+DB 102,15,58,223,202,16
+ call $L125key_192a
+DB 102,15,58,223,202,32
+ call $L124key_192b
+DB 102,15,58,223,202,64
+ call $L125key_192a
+DB 102,15,58,223,202,128
+ call $L124key_192b
+ movups XMMWORD PTR [edx],xmm0
+ mov DWORD PTR 48[edx],ecx
+ jmp $L120good_key
+ALIGN 16
+$L125key_192a:
+ movups XMMWORD PTR [edx],xmm0
+ lea edx,DWORD PTR 16[edx]
+ALIGN 16
+$L123key_192a_cold:
+ movaps xmm5,xmm2
+$L126key_192b_warm:
+ shufps xmm4,xmm0,16
+ movdqa xmm3,xmm2
+ xorps xmm0,xmm4
+ shufps xmm4,xmm0,140
+ pslldq xmm3,4
+ xorps xmm0,xmm4
+ pshufd xmm1,xmm1,85
+ pxor xmm2,xmm3
+ pxor xmm0,xmm1
+ pshufd xmm3,xmm0,255
+ pxor xmm2,xmm3
+ ret
+ALIGN 16
+$L124key_192b:
+ movaps xmm3,xmm0
+ shufps xmm5,xmm0,68
+ movups XMMWORD PTR [edx],xmm5
+ shufps xmm3,xmm2,78
+ movups XMMWORD PTR 16[edx],xmm3
+ lea edx,DWORD PTR 32[edx]
+ jmp $L126key_192b_warm
+ALIGN 16
+$L12212rounds_alt:
+ movdqa xmm5,XMMWORD PTR 16[ebx]
+ movdqa xmm4,XMMWORD PTR 32[ebx]
+ mov ecx,8
+ movdqu XMMWORD PTR [edx-16],xmm0
+$L127loop_key192:
+ movq QWORD PTR [edx],xmm2
+ movdqa xmm1,xmm2
+DB 102,15,56,0,213
+DB 102,15,56,221,212
+ pslld xmm4,1
+ lea edx,DWORD PTR 24[edx]
+ movdqa xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm0,xmm3
+ pshufd xmm3,xmm0,255
+ pxor xmm3,xmm1
+ pslldq xmm1,4
+ pxor xmm3,xmm1
+ pxor xmm0,xmm2
+ pxor xmm2,xmm3
+ movdqu XMMWORD PTR [edx-16],xmm0
+ dec ecx
+ jnz $L127loop_key192
+ mov ecx,11
+ mov DWORD PTR 32[edx],ecx
+ jmp $L120good_key
+ALIGN 16
+$L11314rounds:
+ movups xmm2,XMMWORD PTR 16[eax]
+ lea edx,DWORD PTR 16[edx]
+ cmp ebp,268435456
+ je $L12814rounds_alt
+ mov ecx,13
+ movups XMMWORD PTR [edx-32],xmm0
+ movups XMMWORD PTR [edx-16],xmm2
+DB 102,15,58,223,202,1
+ call $L129key_256a_cold
+DB 102,15,58,223,200,1
+ call $L130key_256b
+DB 102,15,58,223,202,2
+ call $L131key_256a
+DB 102,15,58,223,200,2
+ call $L130key_256b
+DB 102,15,58,223,202,4
+ call $L131key_256a
+DB 102,15,58,223,200,4
+ call $L130key_256b
+DB 102,15,58,223,202,8
+ call $L131key_256a
+DB 102,15,58,223,200,8
+ call $L130key_256b
+DB 102,15,58,223,202,16
+ call $L131key_256a
+DB 102,15,58,223,200,16
+ call $L130key_256b
+DB 102,15,58,223,202,32
+ call $L131key_256a
+DB 102,15,58,223,200,32
+ call $L130key_256b
+DB 102,15,58,223,202,64
+ call $L131key_256a
+ movups XMMWORD PTR [edx],xmm0
+ mov DWORD PTR 16[edx],ecx
+ xor eax,eax
+ jmp $L120good_key
+ALIGN 16
+$L131key_256a:
+ movups XMMWORD PTR [edx],xmm2
+ lea edx,DWORD PTR 16[edx]
+$L129key_256a_cold:
+ shufps xmm4,xmm0,16
+ xorps xmm0,xmm4
+ shufps xmm4,xmm0,140
+ xorps xmm0,xmm4
+ shufps xmm1,xmm1,255
+ xorps xmm0,xmm1
+ ret
+ALIGN 16
+$L130key_256b:
+ movups XMMWORD PTR [edx],xmm0
+ lea edx,DWORD PTR 16[edx]
+ shufps xmm4,xmm2,16
+ xorps xmm2,xmm4
+ shufps xmm4,xmm2,140
+ xorps xmm2,xmm4
+ shufps xmm1,xmm1,170
+ xorps xmm2,xmm1
+ ret
+ALIGN 16
+$L12814rounds_alt:
+ movdqa xmm5,XMMWORD PTR [ebx]
+ movdqa xmm4,XMMWORD PTR 32[ebx]
+ mov ecx,7
+ movdqu XMMWORD PTR [edx-32],xmm0
+ movdqa xmm1,xmm2
+ movdqu XMMWORD PTR [edx-16],xmm2
+$L132loop_key256:
+DB 102,15,56,0,213
+DB 102,15,56,221,212
+ movdqa xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm0,xmm3
+ pslld xmm4,1
+ pxor xmm0,xmm2
+ movdqu XMMWORD PTR [edx],xmm0
+ dec ecx
+ jz $L133done_key256
+ pshufd xmm2,xmm0,255
+ pxor xmm3,xmm3
+DB 102,15,56,221,211
+ movdqa xmm3,xmm1
+ pslldq xmm1,4
+ pxor xmm3,xmm1
+ pslldq xmm1,4
+ pxor xmm3,xmm1
+ pslldq xmm1,4
+ pxor xmm1,xmm3
+ pxor xmm2,xmm1
+ movdqu XMMWORD PTR 16[edx],xmm2
+ lea edx,DWORD PTR 32[edx]
+ movdqa xmm1,xmm2
+ jmp $L132loop_key256
+$L133done_key256:
+ mov ecx,13
+ mov DWORD PTR 16[edx],ecx
+$L120good_key:
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ xor eax,eax
+ pop ebx
+ pop ebp
+ ret
+ALIGN 4
+$L111bad_pointer:
+ mov eax,-1
+ pop ebx
+ pop ebp
+ ret
+ALIGN 4
+$L115bad_keybits:
+ pxor xmm0,xmm0
+ mov eax,-2
+ pop ebx
+ pop ebp
+ ret
+__aesni_set_encrypt_key ENDP
+ALIGN 16
+_aesni_set_encrypt_key PROC PUBLIC
+$L_aesni_set_encrypt_key_begin::
+ mov eax,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+ call __aesni_set_encrypt_key
+ ret
+_aesni_set_encrypt_key ENDP
+ALIGN 16
+_aesni_set_decrypt_key PROC PUBLIC
+$L_aesni_set_decrypt_key_begin::
+ mov eax,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+ call __aesni_set_encrypt_key
+ mov edx,DWORD PTR 12[esp]
+ shl ecx,4
+ test eax,eax
+ jnz $L134dec_key_ret
+ lea eax,DWORD PTR 16[ecx*1+edx]
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR [eax]
+ movups XMMWORD PTR [eax],xmm0
+ movups XMMWORD PTR [edx],xmm1
+ lea edx,DWORD PTR 16[edx]
+ lea eax,DWORD PTR [eax-16]
+$L135dec_key_inverse:
+ movups xmm0,XMMWORD PTR [edx]
+ movups xmm1,XMMWORD PTR [eax]
+DB 102,15,56,219,192
+DB 102,15,56,219,201
+ lea edx,DWORD PTR 16[edx]
+ lea eax,DWORD PTR [eax-16]
+ movups XMMWORD PTR 16[eax],xmm0
+ movups XMMWORD PTR [edx-16],xmm1
+ cmp eax,edx
+ ja $L135dec_key_inverse
+ movups xmm0,XMMWORD PTR [edx]
+DB 102,15,56,219,192
+ movups XMMWORD PTR [edx],xmm0
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ xor eax,eax
+$L134dec_key_ret:
+ ret
+_aesni_set_decrypt_key ENDP
+ALIGN 64
+$Lkey_const::
+DD 202313229,202313229,202313229,202313229
+DD 67569157,67569157,67569157,67569157
+DD 1,1,1,1
+DD 27,27,27,27
+DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
+DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
+DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
+DB 115,108,46,111,114,103,62,0
+.text$ ENDS
+.bss SEGMENT 'BSS'
+COMM _OPENSSL_ia32cap_P:DWORD:4
+.bss ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86_64.masm
index 2f03773eba..3bc553d47f 100644
--- a/contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/aes/aesni-x86_64.masm
@@ -1,5103 +1,5103 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-EXTERN OPENSSL_ia32cap_P:NEAR
-PUBLIC aesni_encrypt
-
-ALIGN 16
-aesni_encrypt PROC PUBLIC
-
- movups xmm2,XMMWORD PTR[rcx]
- mov eax,DWORD PTR[240+r8]
- movups xmm0,XMMWORD PTR[r8]
- movups xmm1,XMMWORD PTR[16+r8]
- lea r8,QWORD PTR[32+r8]
- xorps xmm2,xmm0
-$L$oop_enc1_1::
-DB 102,15,56,220,209
- dec eax
- movups xmm1,XMMWORD PTR[r8]
- lea r8,QWORD PTR[16+r8]
- jnz $L$oop_enc1_1
-DB 102,15,56,221,209
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- movups XMMWORD PTR[rdx],xmm2
- pxor xmm2,xmm2
- DB 0F3h,0C3h ;repret
-
-aesni_encrypt ENDP
-
-PUBLIC aesni_decrypt
-
-ALIGN 16
-aesni_decrypt PROC PUBLIC
-
- movups xmm2,XMMWORD PTR[rcx]
- mov eax,DWORD PTR[240+r8]
- movups xmm0,XMMWORD PTR[r8]
- movups xmm1,XMMWORD PTR[16+r8]
- lea r8,QWORD PTR[32+r8]
- xorps xmm2,xmm0
-$L$oop_dec1_2::
-DB 102,15,56,222,209
- dec eax
- movups xmm1,XMMWORD PTR[r8]
- lea r8,QWORD PTR[16+r8]
- jnz $L$oop_dec1_2
-DB 102,15,56,223,209
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- movups XMMWORD PTR[rdx],xmm2
- pxor xmm2,xmm2
- DB 0F3h,0C3h ;repret
-
-aesni_decrypt ENDP
-
-ALIGN 16
-_aesni_encrypt2 PROC PRIVATE
-
- movups xmm0,XMMWORD PTR[rcx]
- shl eax,4
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- movups xmm0,XMMWORD PTR[32+rcx]
- lea rcx,QWORD PTR[32+rax*1+rcx]
- neg rax
- add rax,16
-
-$L$enc_loop2::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$enc_loop2
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,221,208
-DB 102,15,56,221,216
- DB 0F3h,0C3h ;repret
-
-_aesni_encrypt2 ENDP
-
-ALIGN 16
-_aesni_decrypt2 PROC PRIVATE
-
- movups xmm0,XMMWORD PTR[rcx]
- shl eax,4
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- movups xmm0,XMMWORD PTR[32+rcx]
- lea rcx,QWORD PTR[32+rax*1+rcx]
- neg rax
- add rax,16
-
-$L$dec_loop2::
-DB 102,15,56,222,209
-DB 102,15,56,222,217
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,222,208
-DB 102,15,56,222,216
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$dec_loop2
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,223,208
-DB 102,15,56,223,216
- DB 0F3h,0C3h ;repret
-
-_aesni_decrypt2 ENDP
-
-ALIGN 16
-_aesni_encrypt3 PROC PRIVATE
-
- movups xmm0,XMMWORD PTR[rcx]
- shl eax,4
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- xorps xmm4,xmm0
- movups xmm0,XMMWORD PTR[32+rcx]
- lea rcx,QWORD PTR[32+rax*1+rcx]
- neg rax
- add rax,16
-
-$L$enc_loop3::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$enc_loop3
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,221,208
-DB 102,15,56,221,216
-DB 102,15,56,221,224
- DB 0F3h,0C3h ;repret
-
-_aesni_encrypt3 ENDP
-
-ALIGN 16
-_aesni_decrypt3 PROC PRIVATE
-
- movups xmm0,XMMWORD PTR[rcx]
- shl eax,4
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- xorps xmm4,xmm0
- movups xmm0,XMMWORD PTR[32+rcx]
- lea rcx,QWORD PTR[32+rax*1+rcx]
- neg rax
- add rax,16
-
-$L$dec_loop3::
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$dec_loop3
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,223,208
-DB 102,15,56,223,216
-DB 102,15,56,223,224
- DB 0F3h,0C3h ;repret
-
-_aesni_decrypt3 ENDP
-
-ALIGN 16
-_aesni_encrypt4 PROC PRIVATE
-
- movups xmm0,XMMWORD PTR[rcx]
- shl eax,4
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- xorps xmm4,xmm0
- xorps xmm5,xmm0
- movups xmm0,XMMWORD PTR[32+rcx]
- lea rcx,QWORD PTR[32+rax*1+rcx]
- neg rax
-DB 00fh,01fh,000h
- add rax,16
-
-$L$enc_loop4::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$enc_loop4
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,221,208
-DB 102,15,56,221,216
-DB 102,15,56,221,224
-DB 102,15,56,221,232
- DB 0F3h,0C3h ;repret
-
-_aesni_encrypt4 ENDP
-
-ALIGN 16
-_aesni_decrypt4 PROC PRIVATE
-
- movups xmm0,XMMWORD PTR[rcx]
- shl eax,4
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- xorps xmm4,xmm0
- xorps xmm5,xmm0
- movups xmm0,XMMWORD PTR[32+rcx]
- lea rcx,QWORD PTR[32+rax*1+rcx]
- neg rax
-DB 00fh,01fh,000h
- add rax,16
-
-$L$dec_loop4::
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$dec_loop4
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,223,208
-DB 102,15,56,223,216
-DB 102,15,56,223,224
-DB 102,15,56,223,232
- DB 0F3h,0C3h ;repret
-
-_aesni_decrypt4 ENDP
-
-ALIGN 16
-_aesni_encrypt6 PROC PRIVATE
-
- movups xmm0,XMMWORD PTR[rcx]
- shl eax,4
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
-DB 102,15,56,220,209
- lea rcx,QWORD PTR[32+rax*1+rcx]
- neg rax
-DB 102,15,56,220,217
- pxor xmm5,xmm0
- pxor xmm6,xmm0
-DB 102,15,56,220,225
- pxor xmm7,xmm0
- movups xmm0,XMMWORD PTR[rax*1+rcx]
- add rax,16
- jmp $L$enc_loop6_enter
-ALIGN 16
-$L$enc_loop6::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-$L$enc_loop6_enter::
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
-DB 102,15,56,220,240
-DB 102,15,56,220,248
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$enc_loop6
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,15,56,221,208
-DB 102,15,56,221,216
-DB 102,15,56,221,224
-DB 102,15,56,221,232
-DB 102,15,56,221,240
-DB 102,15,56,221,248
- DB 0F3h,0C3h ;repret
-
-_aesni_encrypt6 ENDP
-
-ALIGN 16
-_aesni_decrypt6 PROC PRIVATE
-
- movups xmm0,XMMWORD PTR[rcx]
- shl eax,4
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm2,xmm0
- pxor xmm3,xmm0
- pxor xmm4,xmm0
-DB 102,15,56,222,209
- lea rcx,QWORD PTR[32+rax*1+rcx]
- neg rax
-DB 102,15,56,222,217
- pxor xmm5,xmm0
- pxor xmm6,xmm0
-DB 102,15,56,222,225
- pxor xmm7,xmm0
- movups xmm0,XMMWORD PTR[rax*1+rcx]
- add rax,16
- jmp $L$dec_loop6_enter
-ALIGN 16
-$L$dec_loop6::
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-$L$dec_loop6_enter::
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$dec_loop6
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-DB 102,15,56,223,208
-DB 102,15,56,223,216
-DB 102,15,56,223,224
-DB 102,15,56,223,232
-DB 102,15,56,223,240
-DB 102,15,56,223,248
- DB 0F3h,0C3h ;repret
-
-_aesni_decrypt6 ENDP
-
-ALIGN 16
-_aesni_encrypt8 PROC PRIVATE
-
- movups xmm0,XMMWORD PTR[rcx]
- shl eax,4
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- pxor xmm4,xmm0
- pxor xmm5,xmm0
- pxor xmm6,xmm0
- lea rcx,QWORD PTR[32+rax*1+rcx]
- neg rax
-DB 102,15,56,220,209
- pxor xmm7,xmm0
- pxor xmm8,xmm0
-DB 102,15,56,220,217
- pxor xmm9,xmm0
- movups xmm0,XMMWORD PTR[rax*1+rcx]
- add rax,16
- jmp $L$enc_loop8_inner
-ALIGN 16
-$L$enc_loop8::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-$L$enc_loop8_inner::
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,68,15,56,220,193
-DB 102,68,15,56,220,201
-$L$enc_loop8_enter::
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
-DB 102,15,56,220,240
-DB 102,15,56,220,248
-DB 102,68,15,56,220,192
-DB 102,68,15,56,220,200
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$enc_loop8
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,68,15,56,220,193
-DB 102,68,15,56,220,201
-DB 102,15,56,221,208
-DB 102,15,56,221,216
-DB 102,15,56,221,224
-DB 102,15,56,221,232
-DB 102,15,56,221,240
-DB 102,15,56,221,248
-DB 102,68,15,56,221,192
-DB 102,68,15,56,221,200
- DB 0F3h,0C3h ;repret
-
-_aesni_encrypt8 ENDP
-
-ALIGN 16
-_aesni_decrypt8 PROC PRIVATE
-
- movups xmm0,XMMWORD PTR[rcx]
- shl eax,4
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm2,xmm0
- xorps xmm3,xmm0
- pxor xmm4,xmm0
- pxor xmm5,xmm0
- pxor xmm6,xmm0
- lea rcx,QWORD PTR[32+rax*1+rcx]
- neg rax
-DB 102,15,56,222,209
- pxor xmm7,xmm0
- pxor xmm8,xmm0
-DB 102,15,56,222,217
- pxor xmm9,xmm0
- movups xmm0,XMMWORD PTR[rax*1+rcx]
- add rax,16
- jmp $L$dec_loop8_inner
-ALIGN 16
-$L$dec_loop8::
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-$L$dec_loop8_inner::
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-DB 102,68,15,56,222,193
-DB 102,68,15,56,222,201
-$L$dec_loop8_enter::
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
-DB 102,68,15,56,222,192
-DB 102,68,15,56,222,200
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$dec_loop8
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-DB 102,68,15,56,222,193
-DB 102,68,15,56,222,201
-DB 102,15,56,223,208
-DB 102,15,56,223,216
-DB 102,15,56,223,224
-DB 102,15,56,223,232
-DB 102,15,56,223,240
-DB 102,15,56,223,248
-DB 102,68,15,56,223,192
-DB 102,68,15,56,223,200
- DB 0F3h,0C3h ;repret
-
-_aesni_decrypt8 ENDP
-PUBLIC aesni_ecb_encrypt
-
-ALIGN 16
-aesni_ecb_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_ecb_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
- lea rsp,QWORD PTR[((-88))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
-$L$ecb_enc_body::
- and rdx,-16
- jz $L$ecb_ret
-
- mov eax,DWORD PTR[240+rcx]
- movups xmm0,XMMWORD PTR[rcx]
- mov r11,rcx
- mov r10d,eax
- test r8d,r8d
- jz $L$ecb_decrypt
-
- cmp rdx,080h
- jb $L$ecb_enc_tail
-
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqu xmm3,XMMWORD PTR[16+rdi]
- movdqu xmm4,XMMWORD PTR[32+rdi]
- movdqu xmm5,XMMWORD PTR[48+rdi]
- movdqu xmm6,XMMWORD PTR[64+rdi]
- movdqu xmm7,XMMWORD PTR[80+rdi]
- movdqu xmm8,XMMWORD PTR[96+rdi]
- movdqu xmm9,XMMWORD PTR[112+rdi]
- lea rdi,QWORD PTR[128+rdi]
- sub rdx,080h
- jmp $L$ecb_enc_loop8_enter
-ALIGN 16
-$L$ecb_enc_loop8::
- movups XMMWORD PTR[rsi],xmm2
- mov rcx,r11
- movdqu xmm2,XMMWORD PTR[rdi]
- mov eax,r10d
- movups XMMWORD PTR[16+rsi],xmm3
- movdqu xmm3,XMMWORD PTR[16+rdi]
- movups XMMWORD PTR[32+rsi],xmm4
- movdqu xmm4,XMMWORD PTR[32+rdi]
- movups XMMWORD PTR[48+rsi],xmm5
- movdqu xmm5,XMMWORD PTR[48+rdi]
- movups XMMWORD PTR[64+rsi],xmm6
- movdqu xmm6,XMMWORD PTR[64+rdi]
- movups XMMWORD PTR[80+rsi],xmm7
- movdqu xmm7,XMMWORD PTR[80+rdi]
- movups XMMWORD PTR[96+rsi],xmm8
- movdqu xmm8,XMMWORD PTR[96+rdi]
- movups XMMWORD PTR[112+rsi],xmm9
- lea rsi,QWORD PTR[128+rsi]
- movdqu xmm9,XMMWORD PTR[112+rdi]
- lea rdi,QWORD PTR[128+rdi]
-$L$ecb_enc_loop8_enter::
-
- call _aesni_encrypt8
-
- sub rdx,080h
- jnc $L$ecb_enc_loop8
-
- movups XMMWORD PTR[rsi],xmm2
- mov rcx,r11
- movups XMMWORD PTR[16+rsi],xmm3
- mov eax,r10d
- movups XMMWORD PTR[32+rsi],xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- movups XMMWORD PTR[80+rsi],xmm7
- movups XMMWORD PTR[96+rsi],xmm8
- movups XMMWORD PTR[112+rsi],xmm9
- lea rsi,QWORD PTR[128+rsi]
- add rdx,080h
- jz $L$ecb_ret
-
-$L$ecb_enc_tail::
- movups xmm2,XMMWORD PTR[rdi]
- cmp rdx,020h
- jb $L$ecb_enc_one
- movups xmm3,XMMWORD PTR[16+rdi]
- je $L$ecb_enc_two
- movups xmm4,XMMWORD PTR[32+rdi]
- cmp rdx,040h
- jb $L$ecb_enc_three
- movups xmm5,XMMWORD PTR[48+rdi]
- je $L$ecb_enc_four
- movups xmm6,XMMWORD PTR[64+rdi]
- cmp rdx,060h
- jb $L$ecb_enc_five
- movups xmm7,XMMWORD PTR[80+rdi]
- je $L$ecb_enc_six
- movdqu xmm8,XMMWORD PTR[96+rdi]
- xorps xmm9,xmm9
- call _aesni_encrypt8
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- movups XMMWORD PTR[80+rsi],xmm7
- movups XMMWORD PTR[96+rsi],xmm8
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_enc_one::
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_enc1_3::
-DB 102,15,56,220,209
- dec eax
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_enc1_3
-DB 102,15,56,221,209
- movups XMMWORD PTR[rsi],xmm2
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_enc_two::
- call _aesni_encrypt2
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_enc_three::
- call _aesni_encrypt3
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_enc_four::
- call _aesni_encrypt4
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_enc_five::
- xorps xmm7,xmm7
- call _aesni_encrypt6
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_enc_six::
- call _aesni_encrypt6
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- movups XMMWORD PTR[80+rsi],xmm7
- jmp $L$ecb_ret
-
-ALIGN 16
-$L$ecb_decrypt::
- cmp rdx,080h
- jb $L$ecb_dec_tail
-
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqu xmm3,XMMWORD PTR[16+rdi]
- movdqu xmm4,XMMWORD PTR[32+rdi]
- movdqu xmm5,XMMWORD PTR[48+rdi]
- movdqu xmm6,XMMWORD PTR[64+rdi]
- movdqu xmm7,XMMWORD PTR[80+rdi]
- movdqu xmm8,XMMWORD PTR[96+rdi]
- movdqu xmm9,XMMWORD PTR[112+rdi]
- lea rdi,QWORD PTR[128+rdi]
- sub rdx,080h
- jmp $L$ecb_dec_loop8_enter
-ALIGN 16
-$L$ecb_dec_loop8::
- movups XMMWORD PTR[rsi],xmm2
- mov rcx,r11
- movdqu xmm2,XMMWORD PTR[rdi]
- mov eax,r10d
- movups XMMWORD PTR[16+rsi],xmm3
- movdqu xmm3,XMMWORD PTR[16+rdi]
- movups XMMWORD PTR[32+rsi],xmm4
- movdqu xmm4,XMMWORD PTR[32+rdi]
- movups XMMWORD PTR[48+rsi],xmm5
- movdqu xmm5,XMMWORD PTR[48+rdi]
- movups XMMWORD PTR[64+rsi],xmm6
- movdqu xmm6,XMMWORD PTR[64+rdi]
- movups XMMWORD PTR[80+rsi],xmm7
- movdqu xmm7,XMMWORD PTR[80+rdi]
- movups XMMWORD PTR[96+rsi],xmm8
- movdqu xmm8,XMMWORD PTR[96+rdi]
- movups XMMWORD PTR[112+rsi],xmm9
- lea rsi,QWORD PTR[128+rsi]
- movdqu xmm9,XMMWORD PTR[112+rdi]
- lea rdi,QWORD PTR[128+rdi]
-$L$ecb_dec_loop8_enter::
-
- call _aesni_decrypt8
-
- movups xmm0,XMMWORD PTR[r11]
- sub rdx,080h
- jnc $L$ecb_dec_loop8
-
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm2,xmm2
- mov rcx,r11
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- mov eax,r10d
- movups XMMWORD PTR[32+rsi],xmm4
- pxor xmm4,xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- pxor xmm5,xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- pxor xmm6,xmm6
- movups XMMWORD PTR[80+rsi],xmm7
- pxor xmm7,xmm7
- movups XMMWORD PTR[96+rsi],xmm8
- pxor xmm8,xmm8
- movups XMMWORD PTR[112+rsi],xmm9
- pxor xmm9,xmm9
- lea rsi,QWORD PTR[128+rsi]
- add rdx,080h
- jz $L$ecb_ret
-
-$L$ecb_dec_tail::
- movups xmm2,XMMWORD PTR[rdi]
- cmp rdx,020h
- jb $L$ecb_dec_one
- movups xmm3,XMMWORD PTR[16+rdi]
- je $L$ecb_dec_two
- movups xmm4,XMMWORD PTR[32+rdi]
- cmp rdx,040h
- jb $L$ecb_dec_three
- movups xmm5,XMMWORD PTR[48+rdi]
- je $L$ecb_dec_four
- movups xmm6,XMMWORD PTR[64+rdi]
- cmp rdx,060h
- jb $L$ecb_dec_five
- movups xmm7,XMMWORD PTR[80+rdi]
- je $L$ecb_dec_six
- movups xmm8,XMMWORD PTR[96+rdi]
- movups xmm0,XMMWORD PTR[rcx]
- xorps xmm9,xmm9
- call _aesni_decrypt8
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm2,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- pxor xmm4,xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- pxor xmm5,xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- pxor xmm6,xmm6
- movups XMMWORD PTR[80+rsi],xmm7
- pxor xmm7,xmm7
- movups XMMWORD PTR[96+rsi],xmm8
- pxor xmm8,xmm8
- pxor xmm9,xmm9
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_dec_one::
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_dec1_4::
-DB 102,15,56,222,209
- dec eax
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_dec1_4
-DB 102,15,56,223,209
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm2,xmm2
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_dec_two::
- call _aesni_decrypt2
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm2,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_dec_three::
- call _aesni_decrypt3
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm2,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- pxor xmm4,xmm4
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_dec_four::
- call _aesni_decrypt4
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm2,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- pxor xmm4,xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- pxor xmm5,xmm5
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_dec_five::
- xorps xmm7,xmm7
- call _aesni_decrypt6
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm2,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- pxor xmm4,xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- pxor xmm5,xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- pxor xmm6,xmm6
- pxor xmm7,xmm7
- jmp $L$ecb_ret
-ALIGN 16
-$L$ecb_dec_six::
- call _aesni_decrypt6
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm2,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- pxor xmm4,xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- pxor xmm5,xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- pxor xmm6,xmm6
- movups XMMWORD PTR[80+rsi],xmm7
- pxor xmm7,xmm7
-
-$L$ecb_ret::
- xorps xmm0,xmm0
- pxor xmm1,xmm1
- movaps xmm6,XMMWORD PTR[rsp]
- movaps XMMWORD PTR[rsp],xmm0
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps XMMWORD PTR[16+rsp],xmm0
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps XMMWORD PTR[32+rsp],xmm0
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps XMMWORD PTR[48+rsp],xmm0
- lea rsp,QWORD PTR[88+rsp]
-$L$ecb_enc_ret::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_ecb_encrypt::
-aesni_ecb_encrypt ENDP
-PUBLIC aesni_ccm64_encrypt_blocks
-
-ALIGN 16
-aesni_ccm64_encrypt_blocks PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_ccm64_encrypt_blocks::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- lea rsp,QWORD PTR[((-88))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
-$L$ccm64_enc_body::
- mov eax,DWORD PTR[240+rcx]
- movdqu xmm6,XMMWORD PTR[r8]
- movdqa xmm9,XMMWORD PTR[$L$increment64]
- movdqa xmm7,XMMWORD PTR[$L$bswap_mask]
-
- shl eax,4
- mov r10d,16
- lea r11,QWORD PTR[rcx]
- movdqu xmm3,XMMWORD PTR[r9]
- movdqa xmm2,xmm6
- lea rcx,QWORD PTR[32+rax*1+rcx]
-DB 102,15,56,0,247
- sub r10,rax
- jmp $L$ccm64_enc_outer
-ALIGN 16
-$L$ccm64_enc_outer::
- movups xmm0,XMMWORD PTR[r11]
- mov rax,r10
- movups xmm8,XMMWORD PTR[rdi]
-
- xorps xmm2,xmm0
- movups xmm1,XMMWORD PTR[16+r11]
- xorps xmm0,xmm8
- xorps xmm3,xmm0
- movups xmm0,XMMWORD PTR[32+r11]
-
-$L$ccm64_enc2_loop::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$ccm64_enc2_loop
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- paddq xmm6,xmm9
- dec rdx
-DB 102,15,56,221,208
-DB 102,15,56,221,216
-
- lea rdi,QWORD PTR[16+rdi]
- xorps xmm8,xmm2
- movdqa xmm2,xmm6
- movups XMMWORD PTR[rsi],xmm8
-DB 102,15,56,0,215
- lea rsi,QWORD PTR[16+rsi]
- jnz $L$ccm64_enc_outer
-
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- movups XMMWORD PTR[r9],xmm3
- pxor xmm3,xmm3
- pxor xmm8,xmm8
- pxor xmm6,xmm6
- movaps xmm6,XMMWORD PTR[rsp]
- movaps XMMWORD PTR[rsp],xmm0
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps XMMWORD PTR[16+rsp],xmm0
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps XMMWORD PTR[32+rsp],xmm0
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps XMMWORD PTR[48+rsp],xmm0
- lea rsp,QWORD PTR[88+rsp]
-$L$ccm64_enc_ret::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_ccm64_encrypt_blocks::
-aesni_ccm64_encrypt_blocks ENDP
-PUBLIC aesni_ccm64_decrypt_blocks
-
-ALIGN 16
-aesni_ccm64_decrypt_blocks PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_ccm64_decrypt_blocks::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- lea rsp,QWORD PTR[((-88))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
-$L$ccm64_dec_body::
- mov eax,DWORD PTR[240+rcx]
- movups xmm6,XMMWORD PTR[r8]
- movdqu xmm3,XMMWORD PTR[r9]
- movdqa xmm9,XMMWORD PTR[$L$increment64]
- movdqa xmm7,XMMWORD PTR[$L$bswap_mask]
-
- movaps xmm2,xmm6
- mov r10d,eax
- mov r11,rcx
-DB 102,15,56,0,247
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_enc1_5::
-DB 102,15,56,220,209
- dec eax
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_enc1_5
-DB 102,15,56,221,209
- shl r10d,4
- mov eax,16
- movups xmm8,XMMWORD PTR[rdi]
- paddq xmm6,xmm9
- lea rdi,QWORD PTR[16+rdi]
- sub rax,r10
- lea rcx,QWORD PTR[32+r10*1+r11]
- mov r10,rax
- jmp $L$ccm64_dec_outer
-ALIGN 16
-$L$ccm64_dec_outer::
- xorps xmm8,xmm2
- movdqa xmm2,xmm6
- movups XMMWORD PTR[rsi],xmm8
- lea rsi,QWORD PTR[16+rsi]
-DB 102,15,56,0,215
-
- sub rdx,1
- jz $L$ccm64_dec_break
-
- movups xmm0,XMMWORD PTR[r11]
- mov rax,r10
- movups xmm1,XMMWORD PTR[16+r11]
- xorps xmm8,xmm0
- xorps xmm2,xmm0
- xorps xmm3,xmm8
- movups xmm0,XMMWORD PTR[32+r11]
- jmp $L$ccm64_dec2_loop
-ALIGN 16
-$L$ccm64_dec2_loop::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-DB 102,15,56,220,208
-DB 102,15,56,220,216
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$ccm64_dec2_loop
- movups xmm8,XMMWORD PTR[rdi]
- paddq xmm6,xmm9
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,221,208
-DB 102,15,56,221,216
- lea rdi,QWORD PTR[16+rdi]
- jmp $L$ccm64_dec_outer
-
-ALIGN 16
-$L$ccm64_dec_break::
-
- mov eax,DWORD PTR[240+r11]
- movups xmm0,XMMWORD PTR[r11]
- movups xmm1,XMMWORD PTR[16+r11]
- xorps xmm8,xmm0
- lea r11,QWORD PTR[32+r11]
- xorps xmm3,xmm8
-$L$oop_enc1_6::
-DB 102,15,56,220,217
- dec eax
- movups xmm1,XMMWORD PTR[r11]
- lea r11,QWORD PTR[16+r11]
- jnz $L$oop_enc1_6
-DB 102,15,56,221,217
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- movups XMMWORD PTR[r9],xmm3
- pxor xmm3,xmm3
- pxor xmm8,xmm8
- pxor xmm6,xmm6
- movaps xmm6,XMMWORD PTR[rsp]
- movaps XMMWORD PTR[rsp],xmm0
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps XMMWORD PTR[16+rsp],xmm0
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps XMMWORD PTR[32+rsp],xmm0
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps XMMWORD PTR[48+rsp],xmm0
- lea rsp,QWORD PTR[88+rsp]
-$L$ccm64_dec_ret::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_ccm64_decrypt_blocks::
-aesni_ccm64_decrypt_blocks ENDP
-PUBLIC aesni_ctr32_encrypt_blocks
-
-ALIGN 16
-aesni_ctr32_encrypt_blocks PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_ctr32_encrypt_blocks::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
- cmp rdx,1
- jne $L$ctr32_bulk
-
-
-
- movups xmm2,XMMWORD PTR[r8]
- movups xmm3,XMMWORD PTR[rdi]
- mov edx,DWORD PTR[240+rcx]
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_enc1_7::
-DB 102,15,56,220,209
- dec edx
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_enc1_7
-DB 102,15,56,221,209
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- xorps xmm2,xmm3
- pxor xmm3,xmm3
- movups XMMWORD PTR[rsi],xmm2
- xorps xmm2,xmm2
- jmp $L$ctr32_epilogue
-
-ALIGN 16
-$L$ctr32_bulk::
- lea r11,QWORD PTR[rsp]
-
- push rbp
-
- sub rsp,288
- and rsp,-16
- movaps XMMWORD PTR[(-168)+r11],xmm6
- movaps XMMWORD PTR[(-152)+r11],xmm7
- movaps XMMWORD PTR[(-136)+r11],xmm8
- movaps XMMWORD PTR[(-120)+r11],xmm9
- movaps XMMWORD PTR[(-104)+r11],xmm10
- movaps XMMWORD PTR[(-88)+r11],xmm11
- movaps XMMWORD PTR[(-72)+r11],xmm12
- movaps XMMWORD PTR[(-56)+r11],xmm13
- movaps XMMWORD PTR[(-40)+r11],xmm14
- movaps XMMWORD PTR[(-24)+r11],xmm15
-$L$ctr32_body::
-
-
-
-
- movdqu xmm2,XMMWORD PTR[r8]
- movdqu xmm0,XMMWORD PTR[rcx]
- mov r8d,DWORD PTR[12+r8]
- pxor xmm2,xmm0
- mov ebp,DWORD PTR[12+rcx]
- movdqa XMMWORD PTR[rsp],xmm2
- bswap r8d
- movdqa xmm3,xmm2
- movdqa xmm4,xmm2
- movdqa xmm5,xmm2
- movdqa XMMWORD PTR[64+rsp],xmm2
- movdqa XMMWORD PTR[80+rsp],xmm2
- movdqa XMMWORD PTR[96+rsp],xmm2
- mov r10,rdx
- movdqa XMMWORD PTR[112+rsp],xmm2
-
- lea rax,QWORD PTR[1+r8]
- lea rdx,QWORD PTR[2+r8]
- bswap eax
- bswap edx
- xor eax,ebp
- xor edx,ebp
-DB 102,15,58,34,216,3
- lea rax,QWORD PTR[3+r8]
- movdqa XMMWORD PTR[16+rsp],xmm3
-DB 102,15,58,34,226,3
- bswap eax
- mov rdx,r10
- lea r10,QWORD PTR[4+r8]
- movdqa XMMWORD PTR[32+rsp],xmm4
- xor eax,ebp
- bswap r10d
-DB 102,15,58,34,232,3
- xor r10d,ebp
- movdqa XMMWORD PTR[48+rsp],xmm5
- lea r9,QWORD PTR[5+r8]
- mov DWORD PTR[((64+12))+rsp],r10d
- bswap r9d
- lea r10,QWORD PTR[6+r8]
- mov eax,DWORD PTR[240+rcx]
- xor r9d,ebp
- bswap r10d
- mov DWORD PTR[((80+12))+rsp],r9d
- xor r10d,ebp
- lea r9,QWORD PTR[7+r8]
- mov DWORD PTR[((96+12))+rsp],r10d
- bswap r9d
- mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
- xor r9d,ebp
- and r10d,71303168
- mov DWORD PTR[((112+12))+rsp],r9d
-
- movups xmm1,XMMWORD PTR[16+rcx]
-
- movdqa xmm6,XMMWORD PTR[64+rsp]
- movdqa xmm7,XMMWORD PTR[80+rsp]
-
- cmp rdx,8
- jb $L$ctr32_tail
-
- sub rdx,6
- cmp r10d,4194304
- je $L$ctr32_6x
-
- lea rcx,QWORD PTR[128+rcx]
- sub rdx,2
- jmp $L$ctr32_loop8
-
-ALIGN 16
-$L$ctr32_6x::
- shl eax,4
- mov r10d,48
- bswap ebp
- lea rcx,QWORD PTR[32+rax*1+rcx]
- sub r10,rax
- jmp $L$ctr32_loop6
-
-ALIGN 16
-$L$ctr32_loop6::
- add r8d,6
- movups xmm0,XMMWORD PTR[((-48))+r10*1+rcx]
-DB 102,15,56,220,209
- mov eax,r8d
- xor eax,ebp
-DB 102,15,56,220,217
-DB 00fh,038h,0f1h,044h,024h,12
- lea eax,DWORD PTR[1+r8]
-DB 102,15,56,220,225
- xor eax,ebp
-DB 00fh,038h,0f1h,044h,024h,28
-DB 102,15,56,220,233
- lea eax,DWORD PTR[2+r8]
- xor eax,ebp
-DB 102,15,56,220,241
-DB 00fh,038h,0f1h,044h,024h,44
- lea eax,DWORD PTR[3+r8]
-DB 102,15,56,220,249
- movups xmm1,XMMWORD PTR[((-32))+r10*1+rcx]
- xor eax,ebp
-
-DB 102,15,56,220,208
-DB 00fh,038h,0f1h,044h,024h,60
- lea eax,DWORD PTR[4+r8]
-DB 102,15,56,220,216
- xor eax,ebp
-DB 00fh,038h,0f1h,044h,024h,76
-DB 102,15,56,220,224
- lea eax,DWORD PTR[5+r8]
- xor eax,ebp
-DB 102,15,56,220,232
-DB 00fh,038h,0f1h,044h,024h,92
- mov rax,r10
-DB 102,15,56,220,240
-DB 102,15,56,220,248
- movups xmm0,XMMWORD PTR[((-16))+r10*1+rcx]
-
- call $L$enc_loop6
-
- movdqu xmm8,XMMWORD PTR[rdi]
- movdqu xmm9,XMMWORD PTR[16+rdi]
- movdqu xmm10,XMMWORD PTR[32+rdi]
- movdqu xmm11,XMMWORD PTR[48+rdi]
- movdqu xmm12,XMMWORD PTR[64+rdi]
- movdqu xmm13,XMMWORD PTR[80+rdi]
- lea rdi,QWORD PTR[96+rdi]
- movups xmm1,XMMWORD PTR[((-64))+r10*1+rcx]
- pxor xmm8,xmm2
- movaps xmm2,XMMWORD PTR[rsp]
- pxor xmm9,xmm3
- movaps xmm3,XMMWORD PTR[16+rsp]
- pxor xmm10,xmm4
- movaps xmm4,XMMWORD PTR[32+rsp]
- pxor xmm11,xmm5
- movaps xmm5,XMMWORD PTR[48+rsp]
- pxor xmm12,xmm6
- movaps xmm6,XMMWORD PTR[64+rsp]
- pxor xmm13,xmm7
- movaps xmm7,XMMWORD PTR[80+rsp]
- movdqu XMMWORD PTR[rsi],xmm8
- movdqu XMMWORD PTR[16+rsi],xmm9
- movdqu XMMWORD PTR[32+rsi],xmm10
- movdqu XMMWORD PTR[48+rsi],xmm11
- movdqu XMMWORD PTR[64+rsi],xmm12
- movdqu XMMWORD PTR[80+rsi],xmm13
- lea rsi,QWORD PTR[96+rsi]
-
- sub rdx,6
- jnc $L$ctr32_loop6
-
- add rdx,6
- jz $L$ctr32_done
-
- lea eax,DWORD PTR[((-48))+r10]
- lea rcx,QWORD PTR[((-80))+r10*1+rcx]
- neg eax
- shr eax,4
- jmp $L$ctr32_tail
-
-ALIGN 32
-$L$ctr32_loop8::
- add r8d,8
- movdqa xmm8,XMMWORD PTR[96+rsp]
-DB 102,15,56,220,209
- mov r9d,r8d
- movdqa xmm9,XMMWORD PTR[112+rsp]
-DB 102,15,56,220,217
- bswap r9d
- movups xmm0,XMMWORD PTR[((32-128))+rcx]
-DB 102,15,56,220,225
- xor r9d,ebp
- nop
-DB 102,15,56,220,233
- mov DWORD PTR[((0+12))+rsp],r9d
- lea r9,QWORD PTR[1+r8]
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,68,15,56,220,193
-DB 102,68,15,56,220,201
- movups xmm1,XMMWORD PTR[((48-128))+rcx]
- bswap r9d
-DB 102,15,56,220,208
-DB 102,15,56,220,216
- xor r9d,ebp
-DB 066h,090h
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- mov DWORD PTR[((16+12))+rsp],r9d
- lea r9,QWORD PTR[2+r8]
-DB 102,15,56,220,240
-DB 102,15,56,220,248
-DB 102,68,15,56,220,192
-DB 102,68,15,56,220,200
- movups xmm0,XMMWORD PTR[((64-128))+rcx]
- bswap r9d
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- xor r9d,ebp
-DB 066h,090h
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- mov DWORD PTR[((32+12))+rsp],r9d
- lea r9,QWORD PTR[3+r8]
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,68,15,56,220,193
-DB 102,68,15,56,220,201
- movups xmm1,XMMWORD PTR[((80-128))+rcx]
- bswap r9d
-DB 102,15,56,220,208
-DB 102,15,56,220,216
- xor r9d,ebp
-DB 066h,090h
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- mov DWORD PTR[((48+12))+rsp],r9d
- lea r9,QWORD PTR[4+r8]
-DB 102,15,56,220,240
-DB 102,15,56,220,248
-DB 102,68,15,56,220,192
-DB 102,68,15,56,220,200
- movups xmm0,XMMWORD PTR[((96-128))+rcx]
- bswap r9d
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- xor r9d,ebp
-DB 066h,090h
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- mov DWORD PTR[((64+12))+rsp],r9d
- lea r9,QWORD PTR[5+r8]
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,68,15,56,220,193
-DB 102,68,15,56,220,201
- movups xmm1,XMMWORD PTR[((112-128))+rcx]
- bswap r9d
-DB 102,15,56,220,208
-DB 102,15,56,220,216
- xor r9d,ebp
-DB 066h,090h
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- mov DWORD PTR[((80+12))+rsp],r9d
- lea r9,QWORD PTR[6+r8]
-DB 102,15,56,220,240
-DB 102,15,56,220,248
-DB 102,68,15,56,220,192
-DB 102,68,15,56,220,200
- movups xmm0,XMMWORD PTR[((128-128))+rcx]
- bswap r9d
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- xor r9d,ebp
-DB 066h,090h
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- mov DWORD PTR[((96+12))+rsp],r9d
- lea r9,QWORD PTR[7+r8]
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,68,15,56,220,193
-DB 102,68,15,56,220,201
- movups xmm1,XMMWORD PTR[((144-128))+rcx]
- bswap r9d
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
- xor r9d,ebp
- movdqu xmm10,XMMWORD PTR[rdi]
-DB 102,15,56,220,232
- mov DWORD PTR[((112+12))+rsp],r9d
- cmp eax,11
-DB 102,15,56,220,240
-DB 102,15,56,220,248
-DB 102,68,15,56,220,192
-DB 102,68,15,56,220,200
- movups xmm0,XMMWORD PTR[((160-128))+rcx]
-
- jb $L$ctr32_enc_done
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,68,15,56,220,193
-DB 102,68,15,56,220,201
- movups xmm1,XMMWORD PTR[((176-128))+rcx]
-
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
-DB 102,15,56,220,240
-DB 102,15,56,220,248
-DB 102,68,15,56,220,192
-DB 102,68,15,56,220,200
- movups xmm0,XMMWORD PTR[((192-128))+rcx]
- je $L$ctr32_enc_done
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,68,15,56,220,193
-DB 102,68,15,56,220,201
- movups xmm1,XMMWORD PTR[((208-128))+rcx]
-
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
-DB 102,15,56,220,240
-DB 102,15,56,220,248
-DB 102,68,15,56,220,192
-DB 102,68,15,56,220,200
- movups xmm0,XMMWORD PTR[((224-128))+rcx]
- jmp $L$ctr32_enc_done
-
-ALIGN 16
-$L$ctr32_enc_done::
- movdqu xmm11,XMMWORD PTR[16+rdi]
- pxor xmm10,xmm0
- movdqu xmm12,XMMWORD PTR[32+rdi]
- pxor xmm11,xmm0
- movdqu xmm13,XMMWORD PTR[48+rdi]
- pxor xmm12,xmm0
- movdqu xmm14,XMMWORD PTR[64+rdi]
- pxor xmm13,xmm0
- movdqu xmm15,XMMWORD PTR[80+rdi]
- pxor xmm14,xmm0
- pxor xmm15,xmm0
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
-DB 102,68,15,56,220,193
-DB 102,68,15,56,220,201
- movdqu xmm1,XMMWORD PTR[96+rdi]
- lea rdi,QWORD PTR[128+rdi]
-
-DB 102,65,15,56,221,210
- pxor xmm1,xmm0
- movdqu xmm10,XMMWORD PTR[((112-128))+rdi]
-DB 102,65,15,56,221,219
- pxor xmm10,xmm0
- movdqa xmm11,XMMWORD PTR[rsp]
-DB 102,65,15,56,221,228
-DB 102,65,15,56,221,237
- movdqa xmm12,XMMWORD PTR[16+rsp]
- movdqa xmm13,XMMWORD PTR[32+rsp]
-DB 102,65,15,56,221,246
-DB 102,65,15,56,221,255
- movdqa xmm14,XMMWORD PTR[48+rsp]
- movdqa xmm15,XMMWORD PTR[64+rsp]
-DB 102,68,15,56,221,193
- movdqa xmm0,XMMWORD PTR[80+rsp]
- movups xmm1,XMMWORD PTR[((16-128))+rcx]
-DB 102,69,15,56,221,202
-
- movups XMMWORD PTR[rsi],xmm2
- movdqa xmm2,xmm11
- movups XMMWORD PTR[16+rsi],xmm3
- movdqa xmm3,xmm12
- movups XMMWORD PTR[32+rsi],xmm4
- movdqa xmm4,xmm13
- movups XMMWORD PTR[48+rsi],xmm5
- movdqa xmm5,xmm14
- movups XMMWORD PTR[64+rsi],xmm6
- movdqa xmm6,xmm15
- movups XMMWORD PTR[80+rsi],xmm7
- movdqa xmm7,xmm0
- movups XMMWORD PTR[96+rsi],xmm8
- movups XMMWORD PTR[112+rsi],xmm9
- lea rsi,QWORD PTR[128+rsi]
-
- sub rdx,8
- jnc $L$ctr32_loop8
-
- add rdx,8
- jz $L$ctr32_done
- lea rcx,QWORD PTR[((-128))+rcx]
-
-$L$ctr32_tail::
-
-
- lea rcx,QWORD PTR[16+rcx]
- cmp rdx,4
- jb $L$ctr32_loop3
- je $L$ctr32_loop4
-
-
- shl eax,4
- movdqa xmm8,XMMWORD PTR[96+rsp]
- pxor xmm9,xmm9
-
- movups xmm0,XMMWORD PTR[16+rcx]
-DB 102,15,56,220,209
-DB 102,15,56,220,217
- lea rcx,QWORD PTR[((32-16))+rax*1+rcx]
- neg rax
-DB 102,15,56,220,225
- add rax,16
- movups xmm10,XMMWORD PTR[rdi]
-DB 102,15,56,220,233
-DB 102,15,56,220,241
- movups xmm11,XMMWORD PTR[16+rdi]
- movups xmm12,XMMWORD PTR[32+rdi]
-DB 102,15,56,220,249
-DB 102,68,15,56,220,193
-
- call $L$enc_loop8_enter
-
- movdqu xmm13,XMMWORD PTR[48+rdi]
- pxor xmm2,xmm10
- movdqu xmm10,XMMWORD PTR[64+rdi]
- pxor xmm3,xmm11
- movdqu XMMWORD PTR[rsi],xmm2
- pxor xmm4,xmm12
- movdqu XMMWORD PTR[16+rsi],xmm3
- pxor xmm5,xmm13
- movdqu XMMWORD PTR[32+rsi],xmm4
- pxor xmm6,xmm10
- movdqu XMMWORD PTR[48+rsi],xmm5
- movdqu XMMWORD PTR[64+rsi],xmm6
- cmp rdx,6
- jb $L$ctr32_done
-
- movups xmm11,XMMWORD PTR[80+rdi]
- xorps xmm7,xmm11
- movups XMMWORD PTR[80+rsi],xmm7
- je $L$ctr32_done
-
- movups xmm12,XMMWORD PTR[96+rdi]
- xorps xmm8,xmm12
- movups XMMWORD PTR[96+rsi],xmm8
- jmp $L$ctr32_done
-
-ALIGN 32
-$L$ctr32_loop4::
-DB 102,15,56,220,209
- lea rcx,QWORD PTR[16+rcx]
- dec eax
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[rcx]
- jnz $L$ctr32_loop4
-DB 102,15,56,221,209
-DB 102,15,56,221,217
- movups xmm10,XMMWORD PTR[rdi]
- movups xmm11,XMMWORD PTR[16+rdi]
-DB 102,15,56,221,225
-DB 102,15,56,221,233
- movups xmm12,XMMWORD PTR[32+rdi]
- movups xmm13,XMMWORD PTR[48+rdi]
-
- xorps xmm2,xmm10
- movups XMMWORD PTR[rsi],xmm2
- xorps xmm3,xmm11
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm4,xmm12
- movdqu XMMWORD PTR[32+rsi],xmm4
- pxor xmm5,xmm13
- movdqu XMMWORD PTR[48+rsi],xmm5
- jmp $L$ctr32_done
-
-ALIGN 32
-$L$ctr32_loop3::
-DB 102,15,56,220,209
- lea rcx,QWORD PTR[16+rcx]
- dec eax
-DB 102,15,56,220,217
-DB 102,15,56,220,225
- movups xmm1,XMMWORD PTR[rcx]
- jnz $L$ctr32_loop3
-DB 102,15,56,221,209
-DB 102,15,56,221,217
-DB 102,15,56,221,225
-
- movups xmm10,XMMWORD PTR[rdi]
- xorps xmm2,xmm10
- movups XMMWORD PTR[rsi],xmm2
- cmp rdx,2
- jb $L$ctr32_done
-
- movups xmm11,XMMWORD PTR[16+rdi]
- xorps xmm3,xmm11
- movups XMMWORD PTR[16+rsi],xmm3
- je $L$ctr32_done
-
- movups xmm12,XMMWORD PTR[32+rdi]
- xorps xmm4,xmm12
- movups XMMWORD PTR[32+rsi],xmm4
-
-$L$ctr32_done::
- xorps xmm0,xmm0
- xor ebp,ebp
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- movaps xmm6,XMMWORD PTR[((-168))+r11]
- movaps XMMWORD PTR[(-168)+r11],xmm0
- movaps xmm7,XMMWORD PTR[((-152))+r11]
- movaps XMMWORD PTR[(-152)+r11],xmm0
- movaps xmm8,XMMWORD PTR[((-136))+r11]
- movaps XMMWORD PTR[(-136)+r11],xmm0
- movaps xmm9,XMMWORD PTR[((-120))+r11]
- movaps XMMWORD PTR[(-120)+r11],xmm0
- movaps xmm10,XMMWORD PTR[((-104))+r11]
- movaps XMMWORD PTR[(-104)+r11],xmm0
- movaps xmm11,XMMWORD PTR[((-88))+r11]
- movaps XMMWORD PTR[(-88)+r11],xmm0
- movaps xmm12,XMMWORD PTR[((-72))+r11]
- movaps XMMWORD PTR[(-72)+r11],xmm0
- movaps xmm13,XMMWORD PTR[((-56))+r11]
- movaps XMMWORD PTR[(-56)+r11],xmm0
- movaps xmm14,XMMWORD PTR[((-40))+r11]
- movaps XMMWORD PTR[(-40)+r11],xmm0
- movaps xmm15,XMMWORD PTR[((-24))+r11]
- movaps XMMWORD PTR[(-24)+r11],xmm0
- movaps XMMWORD PTR[rsp],xmm0
- movaps XMMWORD PTR[16+rsp],xmm0
- movaps XMMWORD PTR[32+rsp],xmm0
- movaps XMMWORD PTR[48+rsp],xmm0
- movaps XMMWORD PTR[64+rsp],xmm0
- movaps XMMWORD PTR[80+rsp],xmm0
- movaps XMMWORD PTR[96+rsp],xmm0
- movaps XMMWORD PTR[112+rsp],xmm0
- mov rbp,QWORD PTR[((-8))+r11]
-
- lea rsp,QWORD PTR[r11]
-
-$L$ctr32_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_ctr32_encrypt_blocks::
-aesni_ctr32_encrypt_blocks ENDP
-PUBLIC aesni_xts_encrypt
-
-ALIGN 16
-aesni_xts_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_xts_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- lea r11,QWORD PTR[rsp]
-
- push rbp
-
- sub rsp,272
- and rsp,-16
- movaps XMMWORD PTR[(-168)+r11],xmm6
- movaps XMMWORD PTR[(-152)+r11],xmm7
- movaps XMMWORD PTR[(-136)+r11],xmm8
- movaps XMMWORD PTR[(-120)+r11],xmm9
- movaps XMMWORD PTR[(-104)+r11],xmm10
- movaps XMMWORD PTR[(-88)+r11],xmm11
- movaps XMMWORD PTR[(-72)+r11],xmm12
- movaps XMMWORD PTR[(-56)+r11],xmm13
- movaps XMMWORD PTR[(-40)+r11],xmm14
- movaps XMMWORD PTR[(-24)+r11],xmm15
-$L$xts_enc_body::
- movups xmm2,XMMWORD PTR[r9]
- mov eax,DWORD PTR[240+r8]
- mov r10d,DWORD PTR[240+rcx]
- movups xmm0,XMMWORD PTR[r8]
- movups xmm1,XMMWORD PTR[16+r8]
- lea r8,QWORD PTR[32+r8]
- xorps xmm2,xmm0
-$L$oop_enc1_8::
-DB 102,15,56,220,209
- dec eax
- movups xmm1,XMMWORD PTR[r8]
- lea r8,QWORD PTR[16+r8]
- jnz $L$oop_enc1_8
-DB 102,15,56,221,209
- movups xmm0,XMMWORD PTR[rcx]
- mov rbp,rcx
- mov eax,r10d
- shl r10d,4
- mov r9,rdx
- and rdx,-16
-
- movups xmm1,XMMWORD PTR[16+r10*1+rcx]
-
- movdqa xmm8,XMMWORD PTR[$L$xts_magic]
- movdqa xmm15,xmm2
- pshufd xmm9,xmm2,05fh
- pxor xmm1,xmm0
- movdqa xmm14,xmm9
- paddd xmm9,xmm9
- movdqa xmm10,xmm15
- psrad xmm14,31
- paddq xmm15,xmm15
- pand xmm14,xmm8
- pxor xmm10,xmm0
- pxor xmm15,xmm14
- movdqa xmm14,xmm9
- paddd xmm9,xmm9
- movdqa xmm11,xmm15
- psrad xmm14,31
- paddq xmm15,xmm15
- pand xmm14,xmm8
- pxor xmm11,xmm0
- pxor xmm15,xmm14
- movdqa xmm14,xmm9
- paddd xmm9,xmm9
- movdqa xmm12,xmm15
- psrad xmm14,31
- paddq xmm15,xmm15
- pand xmm14,xmm8
- pxor xmm12,xmm0
- pxor xmm15,xmm14
- movdqa xmm14,xmm9
- paddd xmm9,xmm9
- movdqa xmm13,xmm15
- psrad xmm14,31
- paddq xmm15,xmm15
- pand xmm14,xmm8
- pxor xmm13,xmm0
- pxor xmm15,xmm14
- movdqa xmm14,xmm15
- psrad xmm9,31
- paddq xmm15,xmm15
- pand xmm9,xmm8
- pxor xmm14,xmm0
- pxor xmm15,xmm9
- movaps XMMWORD PTR[96+rsp],xmm1
-
- sub rdx,16*6
- jc $L$xts_enc_short
-
- mov eax,16+96
- lea rcx,QWORD PTR[32+r10*1+rbp]
- sub rax,r10
- movups xmm1,XMMWORD PTR[16+rbp]
- mov r10,rax
- lea r8,QWORD PTR[$L$xts_magic]
- jmp $L$xts_enc_grandloop
-
-ALIGN 32
-$L$xts_enc_grandloop::
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqa xmm8,xmm0
- movdqu xmm3,XMMWORD PTR[16+rdi]
- pxor xmm2,xmm10
- movdqu xmm4,XMMWORD PTR[32+rdi]
- pxor xmm3,xmm11
-DB 102,15,56,220,209
- movdqu xmm5,XMMWORD PTR[48+rdi]
- pxor xmm4,xmm12
-DB 102,15,56,220,217
- movdqu xmm6,XMMWORD PTR[64+rdi]
- pxor xmm5,xmm13
-DB 102,15,56,220,225
- movdqu xmm7,XMMWORD PTR[80+rdi]
- pxor xmm8,xmm15
- movdqa xmm9,XMMWORD PTR[96+rsp]
- pxor xmm6,xmm14
-DB 102,15,56,220,233
- movups xmm0,XMMWORD PTR[32+rbp]
- lea rdi,QWORD PTR[96+rdi]
- pxor xmm7,xmm8
-
- pxor xmm10,xmm9
-DB 102,15,56,220,241
- pxor xmm11,xmm9
- movdqa XMMWORD PTR[rsp],xmm10
-DB 102,15,56,220,249
- movups xmm1,XMMWORD PTR[48+rbp]
- pxor xmm12,xmm9
-
-DB 102,15,56,220,208
- pxor xmm13,xmm9
- movdqa XMMWORD PTR[16+rsp],xmm11
-DB 102,15,56,220,216
- pxor xmm14,xmm9
- movdqa XMMWORD PTR[32+rsp],xmm12
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- pxor xmm8,xmm9
- movdqa XMMWORD PTR[64+rsp],xmm14
-DB 102,15,56,220,240
-DB 102,15,56,220,248
- movups xmm0,XMMWORD PTR[64+rbp]
- movdqa XMMWORD PTR[80+rsp],xmm8
- pshufd xmm9,xmm15,05fh
- jmp $L$xts_enc_loop6
-ALIGN 32
-$L$xts_enc_loop6::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
- movups xmm1,XMMWORD PTR[((-64))+rax*1+rcx]
- add rax,32
-
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
-DB 102,15,56,220,240
-DB 102,15,56,220,248
- movups xmm0,XMMWORD PTR[((-80))+rax*1+rcx]
- jnz $L$xts_enc_loop6
-
- movdqa xmm8,XMMWORD PTR[r8]
- movdqa xmm14,xmm9
- paddd xmm9,xmm9
-DB 102,15,56,220,209
- paddq xmm15,xmm15
- psrad xmm14,31
-DB 102,15,56,220,217
- pand xmm14,xmm8
- movups xmm10,XMMWORD PTR[rbp]
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
- pxor xmm15,xmm14
- movaps xmm11,xmm10
-DB 102,15,56,220,249
- movups xmm1,XMMWORD PTR[((-64))+rcx]
-
- movdqa xmm14,xmm9
-DB 102,15,56,220,208
- paddd xmm9,xmm9
- pxor xmm10,xmm15
-DB 102,15,56,220,216
- psrad xmm14,31
- paddq xmm15,xmm15
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- pand xmm14,xmm8
- movaps xmm12,xmm11
-DB 102,15,56,220,240
- pxor xmm15,xmm14
- movdqa xmm14,xmm9
-DB 102,15,56,220,248
- movups xmm0,XMMWORD PTR[((-48))+rcx]
-
- paddd xmm9,xmm9
-DB 102,15,56,220,209
- pxor xmm11,xmm15
- psrad xmm14,31
-DB 102,15,56,220,217
- paddq xmm15,xmm15
- pand xmm14,xmm8
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movdqa XMMWORD PTR[48+rsp],xmm13
- pxor xmm15,xmm14
-DB 102,15,56,220,241
- movaps xmm13,xmm12
- movdqa xmm14,xmm9
-DB 102,15,56,220,249
- movups xmm1,XMMWORD PTR[((-32))+rcx]
-
- paddd xmm9,xmm9
-DB 102,15,56,220,208
- pxor xmm12,xmm15
- psrad xmm14,31
-DB 102,15,56,220,216
- paddq xmm15,xmm15
- pand xmm14,xmm8
-DB 102,15,56,220,224
-DB 102,15,56,220,232
-DB 102,15,56,220,240
- pxor xmm15,xmm14
- movaps xmm14,xmm13
-DB 102,15,56,220,248
-
- movdqa xmm0,xmm9
- paddd xmm9,xmm9
-DB 102,15,56,220,209
- pxor xmm13,xmm15
- psrad xmm0,31
-DB 102,15,56,220,217
- paddq xmm15,xmm15
- pand xmm0,xmm8
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- pxor xmm15,xmm0
- movups xmm0,XMMWORD PTR[rbp]
-DB 102,15,56,220,241
-DB 102,15,56,220,249
- movups xmm1,XMMWORD PTR[16+rbp]
-
- pxor xmm14,xmm15
-DB 102,15,56,221,84,36,0
- psrad xmm9,31
- paddq xmm15,xmm15
-DB 102,15,56,221,92,36,16
-DB 102,15,56,221,100,36,32
- pand xmm9,xmm8
- mov rax,r10
-DB 102,15,56,221,108,36,48
-DB 102,15,56,221,116,36,64
-DB 102,15,56,221,124,36,80
- pxor xmm15,xmm9
-
- lea rsi,QWORD PTR[96+rsi]
- movups XMMWORD PTR[(-96)+rsi],xmm2
- movups XMMWORD PTR[(-80)+rsi],xmm3
- movups XMMWORD PTR[(-64)+rsi],xmm4
- movups XMMWORD PTR[(-48)+rsi],xmm5
- movups XMMWORD PTR[(-32)+rsi],xmm6
- movups XMMWORD PTR[(-16)+rsi],xmm7
- sub rdx,16*6
- jnc $L$xts_enc_grandloop
-
- mov eax,16+96
- sub eax,r10d
- mov rcx,rbp
- shr eax,4
-
-$L$xts_enc_short::
-
- mov r10d,eax
- pxor xmm10,xmm0
- add rdx,16*6
- jz $L$xts_enc_done
-
- pxor xmm11,xmm0
- cmp rdx,020h
- jb $L$xts_enc_one
- pxor xmm12,xmm0
- je $L$xts_enc_two
-
- pxor xmm13,xmm0
- cmp rdx,040h
- jb $L$xts_enc_three
- pxor xmm14,xmm0
- je $L$xts_enc_four
-
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqu xmm3,XMMWORD PTR[16+rdi]
- movdqu xmm4,XMMWORD PTR[32+rdi]
- pxor xmm2,xmm10
- movdqu xmm5,XMMWORD PTR[48+rdi]
- pxor xmm3,xmm11
- movdqu xmm6,XMMWORD PTR[64+rdi]
- lea rdi,QWORD PTR[80+rdi]
- pxor xmm4,xmm12
- pxor xmm5,xmm13
- pxor xmm6,xmm14
- pxor xmm7,xmm7
-
- call _aesni_encrypt6
-
- xorps xmm2,xmm10
- movdqa xmm10,xmm15
- xorps xmm3,xmm11
- xorps xmm4,xmm12
- movdqu XMMWORD PTR[rsi],xmm2
- xorps xmm5,xmm13
- movdqu XMMWORD PTR[16+rsi],xmm3
- xorps xmm6,xmm14
- movdqu XMMWORD PTR[32+rsi],xmm4
- movdqu XMMWORD PTR[48+rsi],xmm5
- movdqu XMMWORD PTR[64+rsi],xmm6
- lea rsi,QWORD PTR[80+rsi]
- jmp $L$xts_enc_done
-
-ALIGN 16
-$L$xts_enc_one::
- movups xmm2,XMMWORD PTR[rdi]
- lea rdi,QWORD PTR[16+rdi]
- xorps xmm2,xmm10
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_enc1_9::
-DB 102,15,56,220,209
- dec eax
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_enc1_9
-DB 102,15,56,221,209
- xorps xmm2,xmm10
- movdqa xmm10,xmm11
- movups XMMWORD PTR[rsi],xmm2
- lea rsi,QWORD PTR[16+rsi]
- jmp $L$xts_enc_done
-
-ALIGN 16
-$L$xts_enc_two::
- movups xmm2,XMMWORD PTR[rdi]
- movups xmm3,XMMWORD PTR[16+rdi]
- lea rdi,QWORD PTR[32+rdi]
- xorps xmm2,xmm10
- xorps xmm3,xmm11
-
- call _aesni_encrypt2
-
- xorps xmm2,xmm10
- movdqa xmm10,xmm12
- xorps xmm3,xmm11
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- lea rsi,QWORD PTR[32+rsi]
- jmp $L$xts_enc_done
-
-ALIGN 16
-$L$xts_enc_three::
- movups xmm2,XMMWORD PTR[rdi]
- movups xmm3,XMMWORD PTR[16+rdi]
- movups xmm4,XMMWORD PTR[32+rdi]
- lea rdi,QWORD PTR[48+rdi]
- xorps xmm2,xmm10
- xorps xmm3,xmm11
- xorps xmm4,xmm12
-
- call _aesni_encrypt3
-
- xorps xmm2,xmm10
- movdqa xmm10,xmm13
- xorps xmm3,xmm11
- xorps xmm4,xmm12
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- lea rsi,QWORD PTR[48+rsi]
- jmp $L$xts_enc_done
-
-ALIGN 16
-$L$xts_enc_four::
- movups xmm2,XMMWORD PTR[rdi]
- movups xmm3,XMMWORD PTR[16+rdi]
- movups xmm4,XMMWORD PTR[32+rdi]
- xorps xmm2,xmm10
- movups xmm5,XMMWORD PTR[48+rdi]
- lea rdi,QWORD PTR[64+rdi]
- xorps xmm3,xmm11
- xorps xmm4,xmm12
- xorps xmm5,xmm13
-
- call _aesni_encrypt4
-
- pxor xmm2,xmm10
- movdqa xmm10,xmm14
- pxor xmm3,xmm11
- pxor xmm4,xmm12
- movdqu XMMWORD PTR[rsi],xmm2
- pxor xmm5,xmm13
- movdqu XMMWORD PTR[16+rsi],xmm3
- movdqu XMMWORD PTR[32+rsi],xmm4
- movdqu XMMWORD PTR[48+rsi],xmm5
- lea rsi,QWORD PTR[64+rsi]
- jmp $L$xts_enc_done
-
-ALIGN 16
-$L$xts_enc_done::
- and r9,15
- jz $L$xts_enc_ret
- mov rdx,r9
-
-$L$xts_enc_steal::
- movzx eax,BYTE PTR[rdi]
- movzx ecx,BYTE PTR[((-16))+rsi]
- lea rdi,QWORD PTR[1+rdi]
- mov BYTE PTR[((-16))+rsi],al
- mov BYTE PTR[rsi],cl
- lea rsi,QWORD PTR[1+rsi]
- sub rdx,1
- jnz $L$xts_enc_steal
-
- sub rsi,r9
- mov rcx,rbp
- mov eax,r10d
-
- movups xmm2,XMMWORD PTR[((-16))+rsi]
- xorps xmm2,xmm10
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_enc1_10::
-DB 102,15,56,220,209
- dec eax
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_enc1_10
-DB 102,15,56,221,209
- xorps xmm2,xmm10
- movups XMMWORD PTR[(-16)+rsi],xmm2
-
-$L$xts_enc_ret::
- xorps xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- movaps xmm6,XMMWORD PTR[((-168))+r11]
- movaps XMMWORD PTR[(-168)+r11],xmm0
- movaps xmm7,XMMWORD PTR[((-152))+r11]
- movaps XMMWORD PTR[(-152)+r11],xmm0
- movaps xmm8,XMMWORD PTR[((-136))+r11]
- movaps XMMWORD PTR[(-136)+r11],xmm0
- movaps xmm9,XMMWORD PTR[((-120))+r11]
- movaps XMMWORD PTR[(-120)+r11],xmm0
- movaps xmm10,XMMWORD PTR[((-104))+r11]
- movaps XMMWORD PTR[(-104)+r11],xmm0
- movaps xmm11,XMMWORD PTR[((-88))+r11]
- movaps XMMWORD PTR[(-88)+r11],xmm0
- movaps xmm12,XMMWORD PTR[((-72))+r11]
- movaps XMMWORD PTR[(-72)+r11],xmm0
- movaps xmm13,XMMWORD PTR[((-56))+r11]
- movaps XMMWORD PTR[(-56)+r11],xmm0
- movaps xmm14,XMMWORD PTR[((-40))+r11]
- movaps XMMWORD PTR[(-40)+r11],xmm0
- movaps xmm15,XMMWORD PTR[((-24))+r11]
- movaps XMMWORD PTR[(-24)+r11],xmm0
- movaps XMMWORD PTR[rsp],xmm0
- movaps XMMWORD PTR[16+rsp],xmm0
- movaps XMMWORD PTR[32+rsp],xmm0
- movaps XMMWORD PTR[48+rsp],xmm0
- movaps XMMWORD PTR[64+rsp],xmm0
- movaps XMMWORD PTR[80+rsp],xmm0
- movaps XMMWORD PTR[96+rsp],xmm0
- mov rbp,QWORD PTR[((-8))+r11]
-
- lea rsp,QWORD PTR[r11]
-
-$L$xts_enc_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_xts_encrypt::
-aesni_xts_encrypt ENDP
-PUBLIC aesni_xts_decrypt
-
-ALIGN 16
-aesni_xts_decrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_xts_decrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- lea r11,QWORD PTR[rsp]
-
- push rbp
-
- sub rsp,272
- and rsp,-16
- movaps XMMWORD PTR[(-168)+r11],xmm6
- movaps XMMWORD PTR[(-152)+r11],xmm7
- movaps XMMWORD PTR[(-136)+r11],xmm8
- movaps XMMWORD PTR[(-120)+r11],xmm9
- movaps XMMWORD PTR[(-104)+r11],xmm10
- movaps XMMWORD PTR[(-88)+r11],xmm11
- movaps XMMWORD PTR[(-72)+r11],xmm12
- movaps XMMWORD PTR[(-56)+r11],xmm13
- movaps XMMWORD PTR[(-40)+r11],xmm14
- movaps XMMWORD PTR[(-24)+r11],xmm15
-$L$xts_dec_body::
- movups xmm2,XMMWORD PTR[r9]
- mov eax,DWORD PTR[240+r8]
- mov r10d,DWORD PTR[240+rcx]
- movups xmm0,XMMWORD PTR[r8]
- movups xmm1,XMMWORD PTR[16+r8]
- lea r8,QWORD PTR[32+r8]
- xorps xmm2,xmm0
-$L$oop_enc1_11::
-DB 102,15,56,220,209
- dec eax
- movups xmm1,XMMWORD PTR[r8]
- lea r8,QWORD PTR[16+r8]
- jnz $L$oop_enc1_11
-DB 102,15,56,221,209
- xor eax,eax
- test rdx,15
- setnz al
- shl rax,4
- sub rdx,rax
-
- movups xmm0,XMMWORD PTR[rcx]
- mov rbp,rcx
- mov eax,r10d
- shl r10d,4
- mov r9,rdx
- and rdx,-16
-
- movups xmm1,XMMWORD PTR[16+r10*1+rcx]
-
- movdqa xmm8,XMMWORD PTR[$L$xts_magic]
- movdqa xmm15,xmm2
- pshufd xmm9,xmm2,05fh
- pxor xmm1,xmm0
- movdqa xmm14,xmm9
- paddd xmm9,xmm9
- movdqa xmm10,xmm15
- psrad xmm14,31
- paddq xmm15,xmm15
- pand xmm14,xmm8
- pxor xmm10,xmm0
- pxor xmm15,xmm14
- movdqa xmm14,xmm9
- paddd xmm9,xmm9
- movdqa xmm11,xmm15
- psrad xmm14,31
- paddq xmm15,xmm15
- pand xmm14,xmm8
- pxor xmm11,xmm0
- pxor xmm15,xmm14
- movdqa xmm14,xmm9
- paddd xmm9,xmm9
- movdqa xmm12,xmm15
- psrad xmm14,31
- paddq xmm15,xmm15
- pand xmm14,xmm8
- pxor xmm12,xmm0
- pxor xmm15,xmm14
- movdqa xmm14,xmm9
- paddd xmm9,xmm9
- movdqa xmm13,xmm15
- psrad xmm14,31
- paddq xmm15,xmm15
- pand xmm14,xmm8
- pxor xmm13,xmm0
- pxor xmm15,xmm14
- movdqa xmm14,xmm15
- psrad xmm9,31
- paddq xmm15,xmm15
- pand xmm9,xmm8
- pxor xmm14,xmm0
- pxor xmm15,xmm9
- movaps XMMWORD PTR[96+rsp],xmm1
-
- sub rdx,16*6
- jc $L$xts_dec_short
-
- mov eax,16+96
- lea rcx,QWORD PTR[32+r10*1+rbp]
- sub rax,r10
- movups xmm1,XMMWORD PTR[16+rbp]
- mov r10,rax
- lea r8,QWORD PTR[$L$xts_magic]
- jmp $L$xts_dec_grandloop
-
-ALIGN 32
-$L$xts_dec_grandloop::
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqa xmm8,xmm0
- movdqu xmm3,XMMWORD PTR[16+rdi]
- pxor xmm2,xmm10
- movdqu xmm4,XMMWORD PTR[32+rdi]
- pxor xmm3,xmm11
-DB 102,15,56,222,209
- movdqu xmm5,XMMWORD PTR[48+rdi]
- pxor xmm4,xmm12
-DB 102,15,56,222,217
- movdqu xmm6,XMMWORD PTR[64+rdi]
- pxor xmm5,xmm13
-DB 102,15,56,222,225
- movdqu xmm7,XMMWORD PTR[80+rdi]
- pxor xmm8,xmm15
- movdqa xmm9,XMMWORD PTR[96+rsp]
- pxor xmm6,xmm14
-DB 102,15,56,222,233
- movups xmm0,XMMWORD PTR[32+rbp]
- lea rdi,QWORD PTR[96+rdi]
- pxor xmm7,xmm8
-
- pxor xmm10,xmm9
-DB 102,15,56,222,241
- pxor xmm11,xmm9
- movdqa XMMWORD PTR[rsp],xmm10
-DB 102,15,56,222,249
- movups xmm1,XMMWORD PTR[48+rbp]
- pxor xmm12,xmm9
-
-DB 102,15,56,222,208
- pxor xmm13,xmm9
- movdqa XMMWORD PTR[16+rsp],xmm11
-DB 102,15,56,222,216
- pxor xmm14,xmm9
- movdqa XMMWORD PTR[32+rsp],xmm12
-DB 102,15,56,222,224
-DB 102,15,56,222,232
- pxor xmm8,xmm9
- movdqa XMMWORD PTR[64+rsp],xmm14
-DB 102,15,56,222,240
-DB 102,15,56,222,248
- movups xmm0,XMMWORD PTR[64+rbp]
- movdqa XMMWORD PTR[80+rsp],xmm8
- pshufd xmm9,xmm15,05fh
- jmp $L$xts_dec_loop6
-ALIGN 32
-$L$xts_dec_loop6::
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
- movups xmm1,XMMWORD PTR[((-64))+rax*1+rcx]
- add rax,32
-
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
- movups xmm0,XMMWORD PTR[((-80))+rax*1+rcx]
- jnz $L$xts_dec_loop6
-
- movdqa xmm8,XMMWORD PTR[r8]
- movdqa xmm14,xmm9
- paddd xmm9,xmm9
-DB 102,15,56,222,209
- paddq xmm15,xmm15
- psrad xmm14,31
-DB 102,15,56,222,217
- pand xmm14,xmm8
- movups xmm10,XMMWORD PTR[rbp]
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
- pxor xmm15,xmm14
- movaps xmm11,xmm10
-DB 102,15,56,222,249
- movups xmm1,XMMWORD PTR[((-64))+rcx]
-
- movdqa xmm14,xmm9
-DB 102,15,56,222,208
- paddd xmm9,xmm9
- pxor xmm10,xmm15
-DB 102,15,56,222,216
- psrad xmm14,31
- paddq xmm15,xmm15
-DB 102,15,56,222,224
-DB 102,15,56,222,232
- pand xmm14,xmm8
- movaps xmm12,xmm11
-DB 102,15,56,222,240
- pxor xmm15,xmm14
- movdqa xmm14,xmm9
-DB 102,15,56,222,248
- movups xmm0,XMMWORD PTR[((-48))+rcx]
-
- paddd xmm9,xmm9
-DB 102,15,56,222,209
- pxor xmm11,xmm15
- psrad xmm14,31
-DB 102,15,56,222,217
- paddq xmm15,xmm15
- pand xmm14,xmm8
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- movdqa XMMWORD PTR[48+rsp],xmm13
- pxor xmm15,xmm14
-DB 102,15,56,222,241
- movaps xmm13,xmm12
- movdqa xmm14,xmm9
-DB 102,15,56,222,249
- movups xmm1,XMMWORD PTR[((-32))+rcx]
-
- paddd xmm9,xmm9
-DB 102,15,56,222,208
- pxor xmm12,xmm15
- psrad xmm14,31
-DB 102,15,56,222,216
- paddq xmm15,xmm15
- pand xmm14,xmm8
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
- pxor xmm15,xmm14
- movaps xmm14,xmm13
-DB 102,15,56,222,248
-
- movdqa xmm0,xmm9
- paddd xmm9,xmm9
-DB 102,15,56,222,209
- pxor xmm13,xmm15
- psrad xmm0,31
-DB 102,15,56,222,217
- paddq xmm15,xmm15
- pand xmm0,xmm8
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- pxor xmm15,xmm0
- movups xmm0,XMMWORD PTR[rbp]
-DB 102,15,56,222,241
-DB 102,15,56,222,249
- movups xmm1,XMMWORD PTR[16+rbp]
-
- pxor xmm14,xmm15
-DB 102,15,56,223,84,36,0
- psrad xmm9,31
- paddq xmm15,xmm15
-DB 102,15,56,223,92,36,16
-DB 102,15,56,223,100,36,32
- pand xmm9,xmm8
- mov rax,r10
-DB 102,15,56,223,108,36,48
-DB 102,15,56,223,116,36,64
-DB 102,15,56,223,124,36,80
- pxor xmm15,xmm9
-
- lea rsi,QWORD PTR[96+rsi]
- movups XMMWORD PTR[(-96)+rsi],xmm2
- movups XMMWORD PTR[(-80)+rsi],xmm3
- movups XMMWORD PTR[(-64)+rsi],xmm4
- movups XMMWORD PTR[(-48)+rsi],xmm5
- movups XMMWORD PTR[(-32)+rsi],xmm6
- movups XMMWORD PTR[(-16)+rsi],xmm7
- sub rdx,16*6
- jnc $L$xts_dec_grandloop
-
- mov eax,16+96
- sub eax,r10d
- mov rcx,rbp
- shr eax,4
-
-$L$xts_dec_short::
-
- mov r10d,eax
- pxor xmm10,xmm0
- pxor xmm11,xmm0
- add rdx,16*6
- jz $L$xts_dec_done
-
- pxor xmm12,xmm0
- cmp rdx,020h
- jb $L$xts_dec_one
- pxor xmm13,xmm0
- je $L$xts_dec_two
-
- pxor xmm14,xmm0
- cmp rdx,040h
- jb $L$xts_dec_three
- je $L$xts_dec_four
-
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqu xmm3,XMMWORD PTR[16+rdi]
- movdqu xmm4,XMMWORD PTR[32+rdi]
- pxor xmm2,xmm10
- movdqu xmm5,XMMWORD PTR[48+rdi]
- pxor xmm3,xmm11
- movdqu xmm6,XMMWORD PTR[64+rdi]
- lea rdi,QWORD PTR[80+rdi]
- pxor xmm4,xmm12
- pxor xmm5,xmm13
- pxor xmm6,xmm14
-
- call _aesni_decrypt6
-
- xorps xmm2,xmm10
- xorps xmm3,xmm11
- xorps xmm4,xmm12
- movdqu XMMWORD PTR[rsi],xmm2
- xorps xmm5,xmm13
- movdqu XMMWORD PTR[16+rsi],xmm3
- xorps xmm6,xmm14
- movdqu XMMWORD PTR[32+rsi],xmm4
- pxor xmm14,xmm14
- movdqu XMMWORD PTR[48+rsi],xmm5
- pcmpgtd xmm14,xmm15
- movdqu XMMWORD PTR[64+rsi],xmm6
- lea rsi,QWORD PTR[80+rsi]
- pshufd xmm11,xmm14,013h
- and r9,15
- jz $L$xts_dec_ret
-
- movdqa xmm10,xmm15
- paddq xmm15,xmm15
- pand xmm11,xmm8
- pxor xmm11,xmm15
- jmp $L$xts_dec_done2
-
-ALIGN 16
-$L$xts_dec_one::
- movups xmm2,XMMWORD PTR[rdi]
- lea rdi,QWORD PTR[16+rdi]
- xorps xmm2,xmm10
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_dec1_12::
-DB 102,15,56,222,209
- dec eax
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_dec1_12
-DB 102,15,56,223,209
- xorps xmm2,xmm10
- movdqa xmm10,xmm11
- movups XMMWORD PTR[rsi],xmm2
- movdqa xmm11,xmm12
- lea rsi,QWORD PTR[16+rsi]
- jmp $L$xts_dec_done
-
-ALIGN 16
-$L$xts_dec_two::
- movups xmm2,XMMWORD PTR[rdi]
- movups xmm3,XMMWORD PTR[16+rdi]
- lea rdi,QWORD PTR[32+rdi]
- xorps xmm2,xmm10
- xorps xmm3,xmm11
-
- call _aesni_decrypt2
-
- xorps xmm2,xmm10
- movdqa xmm10,xmm12
- xorps xmm3,xmm11
- movdqa xmm11,xmm13
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- lea rsi,QWORD PTR[32+rsi]
- jmp $L$xts_dec_done
-
-ALIGN 16
-$L$xts_dec_three::
- movups xmm2,XMMWORD PTR[rdi]
- movups xmm3,XMMWORD PTR[16+rdi]
- movups xmm4,XMMWORD PTR[32+rdi]
- lea rdi,QWORD PTR[48+rdi]
- xorps xmm2,xmm10
- xorps xmm3,xmm11
- xorps xmm4,xmm12
-
- call _aesni_decrypt3
-
- xorps xmm2,xmm10
- movdqa xmm10,xmm13
- xorps xmm3,xmm11
- movdqa xmm11,xmm14
- xorps xmm4,xmm12
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- lea rsi,QWORD PTR[48+rsi]
- jmp $L$xts_dec_done
-
-ALIGN 16
-$L$xts_dec_four::
- movups xmm2,XMMWORD PTR[rdi]
- movups xmm3,XMMWORD PTR[16+rdi]
- movups xmm4,XMMWORD PTR[32+rdi]
- xorps xmm2,xmm10
- movups xmm5,XMMWORD PTR[48+rdi]
- lea rdi,QWORD PTR[64+rdi]
- xorps xmm3,xmm11
- xorps xmm4,xmm12
- xorps xmm5,xmm13
-
- call _aesni_decrypt4
-
- pxor xmm2,xmm10
- movdqa xmm10,xmm14
- pxor xmm3,xmm11
- movdqa xmm11,xmm15
- pxor xmm4,xmm12
- movdqu XMMWORD PTR[rsi],xmm2
- pxor xmm5,xmm13
- movdqu XMMWORD PTR[16+rsi],xmm3
- movdqu XMMWORD PTR[32+rsi],xmm4
- movdqu XMMWORD PTR[48+rsi],xmm5
- lea rsi,QWORD PTR[64+rsi]
- jmp $L$xts_dec_done
-
-ALIGN 16
-$L$xts_dec_done::
- and r9,15
- jz $L$xts_dec_ret
-$L$xts_dec_done2::
- mov rdx,r9
- mov rcx,rbp
- mov eax,r10d
-
- movups xmm2,XMMWORD PTR[rdi]
- xorps xmm2,xmm11
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_dec1_13::
-DB 102,15,56,222,209
- dec eax
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_dec1_13
-DB 102,15,56,223,209
- xorps xmm2,xmm11
- movups XMMWORD PTR[rsi],xmm2
-
-$L$xts_dec_steal::
- movzx eax,BYTE PTR[16+rdi]
- movzx ecx,BYTE PTR[rsi]
- lea rdi,QWORD PTR[1+rdi]
- mov BYTE PTR[rsi],al
- mov BYTE PTR[16+rsi],cl
- lea rsi,QWORD PTR[1+rsi]
- sub rdx,1
- jnz $L$xts_dec_steal
-
- sub rsi,r9
- mov rcx,rbp
- mov eax,r10d
-
- movups xmm2,XMMWORD PTR[rsi]
- xorps xmm2,xmm10
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_dec1_14::
-DB 102,15,56,222,209
- dec eax
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_dec1_14
-DB 102,15,56,223,209
- xorps xmm2,xmm10
- movups XMMWORD PTR[rsi],xmm2
-
-$L$xts_dec_ret::
- xorps xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- movaps xmm6,XMMWORD PTR[((-168))+r11]
- movaps XMMWORD PTR[(-168)+r11],xmm0
- movaps xmm7,XMMWORD PTR[((-152))+r11]
- movaps XMMWORD PTR[(-152)+r11],xmm0
- movaps xmm8,XMMWORD PTR[((-136))+r11]
- movaps XMMWORD PTR[(-136)+r11],xmm0
- movaps xmm9,XMMWORD PTR[((-120))+r11]
- movaps XMMWORD PTR[(-120)+r11],xmm0
- movaps xmm10,XMMWORD PTR[((-104))+r11]
- movaps XMMWORD PTR[(-104)+r11],xmm0
- movaps xmm11,XMMWORD PTR[((-88))+r11]
- movaps XMMWORD PTR[(-88)+r11],xmm0
- movaps xmm12,XMMWORD PTR[((-72))+r11]
- movaps XMMWORD PTR[(-72)+r11],xmm0
- movaps xmm13,XMMWORD PTR[((-56))+r11]
- movaps XMMWORD PTR[(-56)+r11],xmm0
- movaps xmm14,XMMWORD PTR[((-40))+r11]
- movaps XMMWORD PTR[(-40)+r11],xmm0
- movaps xmm15,XMMWORD PTR[((-24))+r11]
- movaps XMMWORD PTR[(-24)+r11],xmm0
- movaps XMMWORD PTR[rsp],xmm0
- movaps XMMWORD PTR[16+rsp],xmm0
- movaps XMMWORD PTR[32+rsp],xmm0
- movaps XMMWORD PTR[48+rsp],xmm0
- movaps XMMWORD PTR[64+rsp],xmm0
- movaps XMMWORD PTR[80+rsp],xmm0
- movaps XMMWORD PTR[96+rsp],xmm0
- mov rbp,QWORD PTR[((-8))+r11]
-
- lea rsp,QWORD PTR[r11]
-
-$L$xts_dec_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_xts_decrypt::
-aesni_xts_decrypt ENDP
-PUBLIC aesni_ocb_encrypt
-
-ALIGN 32
-aesni_ocb_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_ocb_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- lea rax,QWORD PTR[rsp]
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- lea rsp,QWORD PTR[((-160))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[64+rsp],xmm10
- movaps XMMWORD PTR[80+rsp],xmm11
- movaps XMMWORD PTR[96+rsp],xmm12
- movaps XMMWORD PTR[112+rsp],xmm13
- movaps XMMWORD PTR[128+rsp],xmm14
- movaps XMMWORD PTR[144+rsp],xmm15
-$L$ocb_enc_body::
- mov rbx,QWORD PTR[56+rax]
- mov rbp,QWORD PTR[((56+8))+rax]
-
- mov r10d,DWORD PTR[240+rcx]
- mov r11,rcx
- shl r10d,4
- movups xmm9,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+r10*1+rcx]
-
- movdqu xmm15,XMMWORD PTR[r9]
- pxor xmm9,xmm1
- pxor xmm15,xmm1
-
- mov eax,16+32
- lea rcx,QWORD PTR[32+r10*1+r11]
- movups xmm1,XMMWORD PTR[16+r11]
- sub rax,r10
- mov r10,rax
-
- movdqu xmm10,XMMWORD PTR[rbx]
- movdqu xmm8,XMMWORD PTR[rbp]
-
- test r8,1
- jnz $L$ocb_enc_odd
-
- bsf r12,r8
- add r8,1
- shl r12,4
- movdqu xmm7,XMMWORD PTR[r12*1+rbx]
- movdqu xmm2,XMMWORD PTR[rdi]
- lea rdi,QWORD PTR[16+rdi]
-
- call __ocb_encrypt1
-
- movdqa xmm15,xmm7
- movups XMMWORD PTR[rsi],xmm2
- lea rsi,QWORD PTR[16+rsi]
- sub rdx,1
- jz $L$ocb_enc_done
-
-$L$ocb_enc_odd::
- lea r12,QWORD PTR[1+r8]
- lea r13,QWORD PTR[3+r8]
- lea r14,QWORD PTR[5+r8]
- lea r8,QWORD PTR[6+r8]
- bsf r12,r12
- bsf r13,r13
- bsf r14,r14
- shl r12,4
- shl r13,4
- shl r14,4
-
- sub rdx,6
- jc $L$ocb_enc_short
- jmp $L$ocb_enc_grandloop
-
-ALIGN 32
-$L$ocb_enc_grandloop::
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqu xmm3,XMMWORD PTR[16+rdi]
- movdqu xmm4,XMMWORD PTR[32+rdi]
- movdqu xmm5,XMMWORD PTR[48+rdi]
- movdqu xmm6,XMMWORD PTR[64+rdi]
- movdqu xmm7,XMMWORD PTR[80+rdi]
- lea rdi,QWORD PTR[96+rdi]
-
- call __ocb_encrypt6
-
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- movups XMMWORD PTR[80+rsi],xmm7
- lea rsi,QWORD PTR[96+rsi]
- sub rdx,6
- jnc $L$ocb_enc_grandloop
-
-$L$ocb_enc_short::
- add rdx,6
- jz $L$ocb_enc_done
-
- movdqu xmm2,XMMWORD PTR[rdi]
- cmp rdx,2
- jb $L$ocb_enc_one
- movdqu xmm3,XMMWORD PTR[16+rdi]
- je $L$ocb_enc_two
-
- movdqu xmm4,XMMWORD PTR[32+rdi]
- cmp rdx,4
- jb $L$ocb_enc_three
- movdqu xmm5,XMMWORD PTR[48+rdi]
- je $L$ocb_enc_four
-
- movdqu xmm6,XMMWORD PTR[64+rdi]
- pxor xmm7,xmm7
-
- call __ocb_encrypt6
-
- movdqa xmm15,xmm14
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- movups XMMWORD PTR[64+rsi],xmm6
-
- jmp $L$ocb_enc_done
-
-ALIGN 16
-$L$ocb_enc_one::
- movdqa xmm7,xmm10
-
- call __ocb_encrypt1
-
- movdqa xmm15,xmm7
- movups XMMWORD PTR[rsi],xmm2
- jmp $L$ocb_enc_done
-
-ALIGN 16
-$L$ocb_enc_two::
- pxor xmm4,xmm4
- pxor xmm5,xmm5
-
- call __ocb_encrypt4
-
- movdqa xmm15,xmm11
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
-
- jmp $L$ocb_enc_done
-
-ALIGN 16
-$L$ocb_enc_three::
- pxor xmm5,xmm5
-
- call __ocb_encrypt4
-
- movdqa xmm15,xmm12
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
-
- jmp $L$ocb_enc_done
-
-ALIGN 16
-$L$ocb_enc_four::
- call __ocb_encrypt4
-
- movdqa xmm15,xmm13
- movups XMMWORD PTR[rsi],xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- movups XMMWORD PTR[48+rsi],xmm5
-
-$L$ocb_enc_done::
- pxor xmm15,xmm0
- movdqu XMMWORD PTR[rbp],xmm8
- movdqu XMMWORD PTR[r9],xmm15
-
- xorps xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- movaps xmm6,XMMWORD PTR[rsp]
- movaps XMMWORD PTR[rsp],xmm0
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps XMMWORD PTR[16+rsp],xmm0
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps XMMWORD PTR[32+rsp],xmm0
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps XMMWORD PTR[48+rsp],xmm0
- movaps xmm10,XMMWORD PTR[64+rsp]
- movaps XMMWORD PTR[64+rsp],xmm0
- movaps xmm11,XMMWORD PTR[80+rsp]
- movaps XMMWORD PTR[80+rsp],xmm0
- movaps xmm12,XMMWORD PTR[96+rsp]
- movaps XMMWORD PTR[96+rsp],xmm0
- movaps xmm13,XMMWORD PTR[112+rsp]
- movaps XMMWORD PTR[112+rsp],xmm0
- movaps xmm14,XMMWORD PTR[128+rsp]
- movaps XMMWORD PTR[128+rsp],xmm0
- movaps xmm15,XMMWORD PTR[144+rsp]
- movaps XMMWORD PTR[144+rsp],xmm0
- lea rax,QWORD PTR[((160+40))+rsp]
-$L$ocb_enc_pop::
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$ocb_enc_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_ocb_encrypt::
-aesni_ocb_encrypt ENDP
-
-
-ALIGN 32
-__ocb_encrypt6 PROC PRIVATE
-
- pxor xmm15,xmm9
- movdqu xmm11,XMMWORD PTR[r12*1+rbx]
- movdqa xmm12,xmm10
- movdqu xmm13,XMMWORD PTR[r13*1+rbx]
- movdqa xmm14,xmm10
- pxor xmm10,xmm15
- movdqu xmm15,XMMWORD PTR[r14*1+rbx]
- pxor xmm11,xmm10
- pxor xmm8,xmm2
- pxor xmm2,xmm10
- pxor xmm12,xmm11
- pxor xmm8,xmm3
- pxor xmm3,xmm11
- pxor xmm13,xmm12
- pxor xmm8,xmm4
- pxor xmm4,xmm12
- pxor xmm14,xmm13
- pxor xmm8,xmm5
- pxor xmm5,xmm13
- pxor xmm15,xmm14
- pxor xmm8,xmm6
- pxor xmm6,xmm14
- pxor xmm8,xmm7
- pxor xmm7,xmm15
- movups xmm0,XMMWORD PTR[32+r11]
-
- lea r12,QWORD PTR[1+r8]
- lea r13,QWORD PTR[3+r8]
- lea r14,QWORD PTR[5+r8]
- add r8,6
- pxor xmm10,xmm9
- bsf r12,r12
- bsf r13,r13
- bsf r14,r14
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- pxor xmm11,xmm9
- pxor xmm12,xmm9
-DB 102,15,56,220,241
- pxor xmm13,xmm9
- pxor xmm14,xmm9
-DB 102,15,56,220,249
- movups xmm1,XMMWORD PTR[48+r11]
- pxor xmm15,xmm9
-
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
-DB 102,15,56,220,240
-DB 102,15,56,220,248
- movups xmm0,XMMWORD PTR[64+r11]
- shl r12,4
- shl r13,4
- jmp $L$ocb_enc_loop6
-
-ALIGN 32
-$L$ocb_enc_loop6::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
-DB 102,15,56,220,240
-DB 102,15,56,220,248
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$ocb_enc_loop6
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
-DB 102,15,56,220,241
-DB 102,15,56,220,249
- movups xmm1,XMMWORD PTR[16+r11]
- shl r14,4
-
-DB 102,65,15,56,221,210
- movdqu xmm10,XMMWORD PTR[rbx]
- mov rax,r10
-DB 102,65,15,56,221,219
-DB 102,65,15,56,221,228
-DB 102,65,15,56,221,237
-DB 102,65,15,56,221,246
-DB 102,65,15,56,221,255
- DB 0F3h,0C3h ;repret
-
-__ocb_encrypt6 ENDP
-
-
-ALIGN 32
-__ocb_encrypt4 PROC PRIVATE
-
- pxor xmm15,xmm9
- movdqu xmm11,XMMWORD PTR[r12*1+rbx]
- movdqa xmm12,xmm10
- movdqu xmm13,XMMWORD PTR[r13*1+rbx]
- pxor xmm10,xmm15
- pxor xmm11,xmm10
- pxor xmm8,xmm2
- pxor xmm2,xmm10
- pxor xmm12,xmm11
- pxor xmm8,xmm3
- pxor xmm3,xmm11
- pxor xmm13,xmm12
- pxor xmm8,xmm4
- pxor xmm4,xmm12
- pxor xmm8,xmm5
- pxor xmm5,xmm13
- movups xmm0,XMMWORD PTR[32+r11]
-
- pxor xmm10,xmm9
- pxor xmm11,xmm9
- pxor xmm12,xmm9
- pxor xmm13,xmm9
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[48+r11]
-
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- movups xmm0,XMMWORD PTR[64+r11]
- jmp $L$ocb_enc_loop4
-
-ALIGN 32
-$L$ocb_enc_loop4::
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-
-DB 102,15,56,220,208
-DB 102,15,56,220,216
-DB 102,15,56,220,224
-DB 102,15,56,220,232
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$ocb_enc_loop4
-
-DB 102,15,56,220,209
-DB 102,15,56,220,217
-DB 102,15,56,220,225
-DB 102,15,56,220,233
- movups xmm1,XMMWORD PTR[16+r11]
- mov rax,r10
-
-DB 102,65,15,56,221,210
-DB 102,65,15,56,221,219
-DB 102,65,15,56,221,228
-DB 102,65,15,56,221,237
- DB 0F3h,0C3h ;repret
-
-__ocb_encrypt4 ENDP
-
-
-ALIGN 32
-__ocb_encrypt1 PROC PRIVATE
-
- pxor xmm7,xmm15
- pxor xmm7,xmm9
- pxor xmm8,xmm2
- pxor xmm2,xmm7
- movups xmm0,XMMWORD PTR[32+r11]
-
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[48+r11]
- pxor xmm7,xmm9
-
-DB 102,15,56,220,208
- movups xmm0,XMMWORD PTR[64+r11]
- jmp $L$ocb_enc_loop1
-
-ALIGN 32
-$L$ocb_enc_loop1::
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-
-DB 102,15,56,220,208
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$ocb_enc_loop1
-
-DB 102,15,56,220,209
- movups xmm1,XMMWORD PTR[16+r11]
- mov rax,r10
-
-DB 102,15,56,221,215
- DB 0F3h,0C3h ;repret
-
-__ocb_encrypt1 ENDP
-
-PUBLIC aesni_ocb_decrypt
-
-ALIGN 32
-aesni_ocb_decrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_ocb_decrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- lea rax,QWORD PTR[rsp]
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- lea rsp,QWORD PTR[((-160))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[64+rsp],xmm10
- movaps XMMWORD PTR[80+rsp],xmm11
- movaps XMMWORD PTR[96+rsp],xmm12
- movaps XMMWORD PTR[112+rsp],xmm13
- movaps XMMWORD PTR[128+rsp],xmm14
- movaps XMMWORD PTR[144+rsp],xmm15
-$L$ocb_dec_body::
- mov rbx,QWORD PTR[56+rax]
- mov rbp,QWORD PTR[((56+8))+rax]
-
- mov r10d,DWORD PTR[240+rcx]
- mov r11,rcx
- shl r10d,4
- movups xmm9,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+r10*1+rcx]
-
- movdqu xmm15,XMMWORD PTR[r9]
- pxor xmm9,xmm1
- pxor xmm15,xmm1
-
- mov eax,16+32
- lea rcx,QWORD PTR[32+r10*1+r11]
- movups xmm1,XMMWORD PTR[16+r11]
- sub rax,r10
- mov r10,rax
-
- movdqu xmm10,XMMWORD PTR[rbx]
- movdqu xmm8,XMMWORD PTR[rbp]
-
- test r8,1
- jnz $L$ocb_dec_odd
-
- bsf r12,r8
- add r8,1
- shl r12,4
- movdqu xmm7,XMMWORD PTR[r12*1+rbx]
- movdqu xmm2,XMMWORD PTR[rdi]
- lea rdi,QWORD PTR[16+rdi]
-
- call __ocb_decrypt1
-
- movdqa xmm15,xmm7
- movups XMMWORD PTR[rsi],xmm2
- xorps xmm8,xmm2
- lea rsi,QWORD PTR[16+rsi]
- sub rdx,1
- jz $L$ocb_dec_done
-
-$L$ocb_dec_odd::
- lea r12,QWORD PTR[1+r8]
- lea r13,QWORD PTR[3+r8]
- lea r14,QWORD PTR[5+r8]
- lea r8,QWORD PTR[6+r8]
- bsf r12,r12
- bsf r13,r13
- bsf r14,r14
- shl r12,4
- shl r13,4
- shl r14,4
-
- sub rdx,6
- jc $L$ocb_dec_short
- jmp $L$ocb_dec_grandloop
-
-ALIGN 32
-$L$ocb_dec_grandloop::
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqu xmm3,XMMWORD PTR[16+rdi]
- movdqu xmm4,XMMWORD PTR[32+rdi]
- movdqu xmm5,XMMWORD PTR[48+rdi]
- movdqu xmm6,XMMWORD PTR[64+rdi]
- movdqu xmm7,XMMWORD PTR[80+rdi]
- lea rdi,QWORD PTR[96+rdi]
-
- call __ocb_decrypt6
-
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm8,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm8,xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- pxor xmm8,xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- pxor xmm8,xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- pxor xmm8,xmm6
- movups XMMWORD PTR[80+rsi],xmm7
- pxor xmm8,xmm7
- lea rsi,QWORD PTR[96+rsi]
- sub rdx,6
- jnc $L$ocb_dec_grandloop
-
-$L$ocb_dec_short::
- add rdx,6
- jz $L$ocb_dec_done
-
- movdqu xmm2,XMMWORD PTR[rdi]
- cmp rdx,2
- jb $L$ocb_dec_one
- movdqu xmm3,XMMWORD PTR[16+rdi]
- je $L$ocb_dec_two
-
- movdqu xmm4,XMMWORD PTR[32+rdi]
- cmp rdx,4
- jb $L$ocb_dec_three
- movdqu xmm5,XMMWORD PTR[48+rdi]
- je $L$ocb_dec_four
-
- movdqu xmm6,XMMWORD PTR[64+rdi]
- pxor xmm7,xmm7
-
- call __ocb_decrypt6
-
- movdqa xmm15,xmm14
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm8,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm8,xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- pxor xmm8,xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- pxor xmm8,xmm5
- movups XMMWORD PTR[64+rsi],xmm6
- pxor xmm8,xmm6
-
- jmp $L$ocb_dec_done
-
-ALIGN 16
-$L$ocb_dec_one::
- movdqa xmm7,xmm10
-
- call __ocb_decrypt1
-
- movdqa xmm15,xmm7
- movups XMMWORD PTR[rsi],xmm2
- xorps xmm8,xmm2
- jmp $L$ocb_dec_done
-
-ALIGN 16
-$L$ocb_dec_two::
- pxor xmm4,xmm4
- pxor xmm5,xmm5
-
- call __ocb_decrypt4
-
- movdqa xmm15,xmm11
- movups XMMWORD PTR[rsi],xmm2
- xorps xmm8,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- xorps xmm8,xmm3
-
- jmp $L$ocb_dec_done
-
-ALIGN 16
-$L$ocb_dec_three::
- pxor xmm5,xmm5
-
- call __ocb_decrypt4
-
- movdqa xmm15,xmm12
- movups XMMWORD PTR[rsi],xmm2
- xorps xmm8,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- xorps xmm8,xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- xorps xmm8,xmm4
-
- jmp $L$ocb_dec_done
-
-ALIGN 16
-$L$ocb_dec_four::
- call __ocb_decrypt4
-
- movdqa xmm15,xmm13
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm8,xmm2
- movups XMMWORD PTR[16+rsi],xmm3
- pxor xmm8,xmm3
- movups XMMWORD PTR[32+rsi],xmm4
- pxor xmm8,xmm4
- movups XMMWORD PTR[48+rsi],xmm5
- pxor xmm8,xmm5
-
-$L$ocb_dec_done::
- pxor xmm15,xmm0
- movdqu XMMWORD PTR[rbp],xmm8
- movdqu XMMWORD PTR[r9],xmm15
-
- xorps xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- movaps xmm6,XMMWORD PTR[rsp]
- movaps XMMWORD PTR[rsp],xmm0
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps XMMWORD PTR[16+rsp],xmm0
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps XMMWORD PTR[32+rsp],xmm0
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps XMMWORD PTR[48+rsp],xmm0
- movaps xmm10,XMMWORD PTR[64+rsp]
- movaps XMMWORD PTR[64+rsp],xmm0
- movaps xmm11,XMMWORD PTR[80+rsp]
- movaps XMMWORD PTR[80+rsp],xmm0
- movaps xmm12,XMMWORD PTR[96+rsp]
- movaps XMMWORD PTR[96+rsp],xmm0
- movaps xmm13,XMMWORD PTR[112+rsp]
- movaps XMMWORD PTR[112+rsp],xmm0
- movaps xmm14,XMMWORD PTR[128+rsp]
- movaps XMMWORD PTR[128+rsp],xmm0
- movaps xmm15,XMMWORD PTR[144+rsp]
- movaps XMMWORD PTR[144+rsp],xmm0
- lea rax,QWORD PTR[((160+40))+rsp]
-$L$ocb_dec_pop::
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$ocb_dec_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_ocb_decrypt::
-aesni_ocb_decrypt ENDP
-
-
-ALIGN 32
-__ocb_decrypt6 PROC PRIVATE
-
- pxor xmm15,xmm9
- movdqu xmm11,XMMWORD PTR[r12*1+rbx]
- movdqa xmm12,xmm10
- movdqu xmm13,XMMWORD PTR[r13*1+rbx]
- movdqa xmm14,xmm10
- pxor xmm10,xmm15
- movdqu xmm15,XMMWORD PTR[r14*1+rbx]
- pxor xmm11,xmm10
- pxor xmm2,xmm10
- pxor xmm12,xmm11
- pxor xmm3,xmm11
- pxor xmm13,xmm12
- pxor xmm4,xmm12
- pxor xmm14,xmm13
- pxor xmm5,xmm13
- pxor xmm15,xmm14
- pxor xmm6,xmm14
- pxor xmm7,xmm15
- movups xmm0,XMMWORD PTR[32+r11]
-
- lea r12,QWORD PTR[1+r8]
- lea r13,QWORD PTR[3+r8]
- lea r14,QWORD PTR[5+r8]
- add r8,6
- pxor xmm10,xmm9
- bsf r12,r12
- bsf r13,r13
- bsf r14,r14
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- pxor xmm11,xmm9
- pxor xmm12,xmm9
-DB 102,15,56,222,241
- pxor xmm13,xmm9
- pxor xmm14,xmm9
-DB 102,15,56,222,249
- movups xmm1,XMMWORD PTR[48+r11]
- pxor xmm15,xmm9
-
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
- movups xmm0,XMMWORD PTR[64+r11]
- shl r12,4
- shl r13,4
- jmp $L$ocb_dec_loop6
-
-ALIGN 32
-$L$ocb_dec_loop6::
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$ocb_dec_loop6
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
- movups xmm1,XMMWORD PTR[16+r11]
- shl r14,4
-
-DB 102,65,15,56,223,210
- movdqu xmm10,XMMWORD PTR[rbx]
- mov rax,r10
-DB 102,65,15,56,223,219
-DB 102,65,15,56,223,228
-DB 102,65,15,56,223,237
-DB 102,65,15,56,223,246
-DB 102,65,15,56,223,255
- DB 0F3h,0C3h ;repret
-
-__ocb_decrypt6 ENDP
-
-
-ALIGN 32
-__ocb_decrypt4 PROC PRIVATE
-
- pxor xmm15,xmm9
- movdqu xmm11,XMMWORD PTR[r12*1+rbx]
- movdqa xmm12,xmm10
- movdqu xmm13,XMMWORD PTR[r13*1+rbx]
- pxor xmm10,xmm15
- pxor xmm11,xmm10
- pxor xmm2,xmm10
- pxor xmm12,xmm11
- pxor xmm3,xmm11
- pxor xmm13,xmm12
- pxor xmm4,xmm12
- pxor xmm5,xmm13
- movups xmm0,XMMWORD PTR[32+r11]
-
- pxor xmm10,xmm9
- pxor xmm11,xmm9
- pxor xmm12,xmm9
- pxor xmm13,xmm9
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR[48+r11]
-
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
- movups xmm0,XMMWORD PTR[64+r11]
- jmp $L$ocb_dec_loop4
-
-ALIGN 32
-$L$ocb_dec_loop4::
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$ocb_dec_loop4
-
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- movups xmm1,XMMWORD PTR[16+r11]
- mov rax,r10
-
-DB 102,65,15,56,223,210
-DB 102,65,15,56,223,219
-DB 102,65,15,56,223,228
-DB 102,65,15,56,223,237
- DB 0F3h,0C3h ;repret
-
-__ocb_decrypt4 ENDP
-
-
-ALIGN 32
-__ocb_decrypt1 PROC PRIVATE
-
- pxor xmm7,xmm15
- pxor xmm7,xmm9
- pxor xmm2,xmm7
- movups xmm0,XMMWORD PTR[32+r11]
-
-DB 102,15,56,222,209
- movups xmm1,XMMWORD PTR[48+r11]
- pxor xmm7,xmm9
-
-DB 102,15,56,222,208
- movups xmm0,XMMWORD PTR[64+r11]
- jmp $L$ocb_dec_loop1
-
-ALIGN 32
-$L$ocb_dec_loop1::
-DB 102,15,56,222,209
- movups xmm1,XMMWORD PTR[rax*1+rcx]
- add rax,32
-
-DB 102,15,56,222,208
- movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
- jnz $L$ocb_dec_loop1
-
-DB 102,15,56,222,209
- movups xmm1,XMMWORD PTR[16+r11]
- mov rax,r10
-
-DB 102,15,56,223,215
- DB 0F3h,0C3h ;repret
-
-__ocb_decrypt1 ENDP
-PUBLIC aesni_cbc_encrypt
-
-ALIGN 16
-aesni_cbc_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_cbc_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- test rdx,rdx
- jz $L$cbc_ret
-
- mov r10d,DWORD PTR[240+rcx]
- mov r11,rcx
- test r9d,r9d
- jz $L$cbc_decrypt
-
- movups xmm2,XMMWORD PTR[r8]
- mov eax,r10d
- cmp rdx,16
- jb $L$cbc_enc_tail
- sub rdx,16
- jmp $L$cbc_enc_loop
-ALIGN 16
-$L$cbc_enc_loop::
- movups xmm3,XMMWORD PTR[rdi]
- lea rdi,QWORD PTR[16+rdi]
-
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- xorps xmm3,xmm0
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm3
-$L$oop_enc1_15::
-DB 102,15,56,220,209
- dec eax
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_enc1_15
-DB 102,15,56,221,209
- mov eax,r10d
- mov rcx,r11
- movups XMMWORD PTR[rsi],xmm2
- lea rsi,QWORD PTR[16+rsi]
- sub rdx,16
- jnc $L$cbc_enc_loop
- add rdx,16
- jnz $L$cbc_enc_tail
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- movups XMMWORD PTR[r8],xmm2
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- jmp $L$cbc_ret
-
-$L$cbc_enc_tail::
- mov rcx,rdx
- xchg rsi,rdi
- DD 09066A4F3h
- mov ecx,16
- sub rcx,rdx
- xor eax,eax
- DD 09066AAF3h
- lea rdi,QWORD PTR[((-16))+rdi]
- mov eax,r10d
- mov rsi,rdi
- mov rcx,r11
- xor rdx,rdx
- jmp $L$cbc_enc_loop
-
-ALIGN 16
-$L$cbc_decrypt::
- cmp rdx,16
- jne $L$cbc_decrypt_bulk
-
-
-
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqu xmm3,XMMWORD PTR[r8]
- movdqa xmm4,xmm2
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_dec1_16::
-DB 102,15,56,222,209
- dec r10d
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_dec1_16
-DB 102,15,56,223,209
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- movdqu XMMWORD PTR[r8],xmm4
- xorps xmm2,xmm3
- pxor xmm3,xmm3
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm2,xmm2
- jmp $L$cbc_ret
-ALIGN 16
-$L$cbc_decrypt_bulk::
- lea r11,QWORD PTR[rsp]
-
- push rbp
-
- sub rsp,176
- and rsp,-16
- movaps XMMWORD PTR[16+rsp],xmm6
- movaps XMMWORD PTR[32+rsp],xmm7
- movaps XMMWORD PTR[48+rsp],xmm8
- movaps XMMWORD PTR[64+rsp],xmm9
- movaps XMMWORD PTR[80+rsp],xmm10
- movaps XMMWORD PTR[96+rsp],xmm11
- movaps XMMWORD PTR[112+rsp],xmm12
- movaps XMMWORD PTR[128+rsp],xmm13
- movaps XMMWORD PTR[144+rsp],xmm14
- movaps XMMWORD PTR[160+rsp],xmm15
-$L$cbc_decrypt_body::
- mov rbp,rcx
- movups xmm10,XMMWORD PTR[r8]
- mov eax,r10d
- cmp rdx,050h
- jbe $L$cbc_dec_tail
-
- movups xmm0,XMMWORD PTR[rcx]
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqu xmm3,XMMWORD PTR[16+rdi]
- movdqa xmm11,xmm2
- movdqu xmm4,XMMWORD PTR[32+rdi]
- movdqa xmm12,xmm3
- movdqu xmm5,XMMWORD PTR[48+rdi]
- movdqa xmm13,xmm4
- movdqu xmm6,XMMWORD PTR[64+rdi]
- movdqa xmm14,xmm5
- movdqu xmm7,XMMWORD PTR[80+rdi]
- movdqa xmm15,xmm6
- mov r9d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
- cmp rdx,070h
- jbe $L$cbc_dec_six_or_seven
-
- and r9d,71303168
- sub rdx,050h
- cmp r9d,4194304
- je $L$cbc_dec_loop6_enter
- sub rdx,020h
- lea rcx,QWORD PTR[112+rcx]
- jmp $L$cbc_dec_loop8_enter
-ALIGN 16
-$L$cbc_dec_loop8::
- movups XMMWORD PTR[rsi],xmm9
- lea rsi,QWORD PTR[16+rsi]
-$L$cbc_dec_loop8_enter::
- movdqu xmm8,XMMWORD PTR[96+rdi]
- pxor xmm2,xmm0
- movdqu xmm9,XMMWORD PTR[112+rdi]
- pxor xmm3,xmm0
- movups xmm1,XMMWORD PTR[((16-112))+rcx]
- pxor xmm4,xmm0
- mov rbp,-1
- cmp rdx,070h
- pxor xmm5,xmm0
- pxor xmm6,xmm0
- pxor xmm7,xmm0
- pxor xmm8,xmm0
-
-DB 102,15,56,222,209
- pxor xmm9,xmm0
- movups xmm0,XMMWORD PTR[((32-112))+rcx]
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-DB 102,68,15,56,222,193
- adc rbp,0
- and rbp,128
-DB 102,68,15,56,222,201
- add rbp,rdi
- movups xmm1,XMMWORD PTR[((48-112))+rcx]
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
-DB 102,68,15,56,222,192
-DB 102,68,15,56,222,200
- movups xmm0,XMMWORD PTR[((64-112))+rcx]
- nop
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-DB 102,68,15,56,222,193
-DB 102,68,15,56,222,201
- movups xmm1,XMMWORD PTR[((80-112))+rcx]
- nop
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
-DB 102,68,15,56,222,192
-DB 102,68,15,56,222,200
- movups xmm0,XMMWORD PTR[((96-112))+rcx]
- nop
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-DB 102,68,15,56,222,193
-DB 102,68,15,56,222,201
- movups xmm1,XMMWORD PTR[((112-112))+rcx]
- nop
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
-DB 102,68,15,56,222,192
-DB 102,68,15,56,222,200
- movups xmm0,XMMWORD PTR[((128-112))+rcx]
- nop
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-DB 102,68,15,56,222,193
-DB 102,68,15,56,222,201
- movups xmm1,XMMWORD PTR[((144-112))+rcx]
- cmp eax,11
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
-DB 102,68,15,56,222,192
-DB 102,68,15,56,222,200
- movups xmm0,XMMWORD PTR[((160-112))+rcx]
- jb $L$cbc_dec_done
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-DB 102,68,15,56,222,193
-DB 102,68,15,56,222,201
- movups xmm1,XMMWORD PTR[((176-112))+rcx]
- nop
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
-DB 102,68,15,56,222,192
-DB 102,68,15,56,222,200
- movups xmm0,XMMWORD PTR[((192-112))+rcx]
- je $L$cbc_dec_done
-DB 102,15,56,222,209
-DB 102,15,56,222,217
-DB 102,15,56,222,225
-DB 102,15,56,222,233
-DB 102,15,56,222,241
-DB 102,15,56,222,249
-DB 102,68,15,56,222,193
-DB 102,68,15,56,222,201
- movups xmm1,XMMWORD PTR[((208-112))+rcx]
- nop
-DB 102,15,56,222,208
-DB 102,15,56,222,216
-DB 102,15,56,222,224
-DB 102,15,56,222,232
-DB 102,15,56,222,240
-DB 102,15,56,222,248
-DB 102,68,15,56,222,192
-DB 102,68,15,56,222,200
- movups xmm0,XMMWORD PTR[((224-112))+rcx]
- jmp $L$cbc_dec_done
-ALIGN 16
-$L$cbc_dec_done::
-DB 102,15,56,222,209
-DB 102,15,56,222,217
- pxor xmm10,xmm0
- pxor xmm11,xmm0
-DB 102,15,56,222,225
-DB 102,15,56,222,233
- pxor xmm12,xmm0
- pxor xmm13,xmm0
-DB 102,15,56,222,241
-DB 102,15,56,222,249
- pxor xmm14,xmm0
- pxor xmm15,xmm0
-DB 102,68,15,56,222,193
-DB 102,68,15,56,222,201
- movdqu xmm1,XMMWORD PTR[80+rdi]
-
-DB 102,65,15,56,223,210
- movdqu xmm10,XMMWORD PTR[96+rdi]
- pxor xmm1,xmm0
-DB 102,65,15,56,223,219
- pxor xmm10,xmm0
- movdqu xmm0,XMMWORD PTR[112+rdi]
-DB 102,65,15,56,223,228
- lea rdi,QWORD PTR[128+rdi]
- movdqu xmm11,XMMWORD PTR[rbp]
-DB 102,65,15,56,223,237
-DB 102,65,15,56,223,246
- movdqu xmm12,XMMWORD PTR[16+rbp]
- movdqu xmm13,XMMWORD PTR[32+rbp]
-DB 102,65,15,56,223,255
-DB 102,68,15,56,223,193
- movdqu xmm14,XMMWORD PTR[48+rbp]
- movdqu xmm15,XMMWORD PTR[64+rbp]
-DB 102,69,15,56,223,202
- movdqa xmm10,xmm0
- movdqu xmm1,XMMWORD PTR[80+rbp]
- movups xmm0,XMMWORD PTR[((-112))+rcx]
-
- movups XMMWORD PTR[rsi],xmm2
- movdqa xmm2,xmm11
- movups XMMWORD PTR[16+rsi],xmm3
- movdqa xmm3,xmm12
- movups XMMWORD PTR[32+rsi],xmm4
- movdqa xmm4,xmm13
- movups XMMWORD PTR[48+rsi],xmm5
- movdqa xmm5,xmm14
- movups XMMWORD PTR[64+rsi],xmm6
- movdqa xmm6,xmm15
- movups XMMWORD PTR[80+rsi],xmm7
- movdqa xmm7,xmm1
- movups XMMWORD PTR[96+rsi],xmm8
- lea rsi,QWORD PTR[112+rsi]
-
- sub rdx,080h
- ja $L$cbc_dec_loop8
-
- movaps xmm2,xmm9
- lea rcx,QWORD PTR[((-112))+rcx]
- add rdx,070h
- jle $L$cbc_dec_clear_tail_collected
- movups XMMWORD PTR[rsi],xmm9
- lea rsi,QWORD PTR[16+rsi]
- cmp rdx,050h
- jbe $L$cbc_dec_tail
-
- movaps xmm2,xmm11
-$L$cbc_dec_six_or_seven::
- cmp rdx,060h
- ja $L$cbc_dec_seven
-
- movaps xmm8,xmm7
- call _aesni_decrypt6
- pxor xmm2,xmm10
- movaps xmm10,xmm8
- pxor xmm3,xmm11
- movdqu XMMWORD PTR[rsi],xmm2
- pxor xmm4,xmm12
- movdqu XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- pxor xmm5,xmm13
- movdqu XMMWORD PTR[32+rsi],xmm4
- pxor xmm4,xmm4
- pxor xmm6,xmm14
- movdqu XMMWORD PTR[48+rsi],xmm5
- pxor xmm5,xmm5
- pxor xmm7,xmm15
- movdqu XMMWORD PTR[64+rsi],xmm6
- pxor xmm6,xmm6
- lea rsi,QWORD PTR[80+rsi]
- movdqa xmm2,xmm7
- pxor xmm7,xmm7
- jmp $L$cbc_dec_tail_collected
-
-ALIGN 16
-$L$cbc_dec_seven::
- movups xmm8,XMMWORD PTR[96+rdi]
- xorps xmm9,xmm9
- call _aesni_decrypt8
- movups xmm9,XMMWORD PTR[80+rdi]
- pxor xmm2,xmm10
- movups xmm10,XMMWORD PTR[96+rdi]
- pxor xmm3,xmm11
- movdqu XMMWORD PTR[rsi],xmm2
- pxor xmm4,xmm12
- movdqu XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- pxor xmm5,xmm13
- movdqu XMMWORD PTR[32+rsi],xmm4
- pxor xmm4,xmm4
- pxor xmm6,xmm14
- movdqu XMMWORD PTR[48+rsi],xmm5
- pxor xmm5,xmm5
- pxor xmm7,xmm15
- movdqu XMMWORD PTR[64+rsi],xmm6
- pxor xmm6,xmm6
- pxor xmm8,xmm9
- movdqu XMMWORD PTR[80+rsi],xmm7
- pxor xmm7,xmm7
- lea rsi,QWORD PTR[96+rsi]
- movdqa xmm2,xmm8
- pxor xmm8,xmm8
- pxor xmm9,xmm9
- jmp $L$cbc_dec_tail_collected
-
-ALIGN 16
-$L$cbc_dec_loop6::
- movups XMMWORD PTR[rsi],xmm7
- lea rsi,QWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[rdi]
- movdqu xmm3,XMMWORD PTR[16+rdi]
- movdqa xmm11,xmm2
- movdqu xmm4,XMMWORD PTR[32+rdi]
- movdqa xmm12,xmm3
- movdqu xmm5,XMMWORD PTR[48+rdi]
- movdqa xmm13,xmm4
- movdqu xmm6,XMMWORD PTR[64+rdi]
- movdqa xmm14,xmm5
- movdqu xmm7,XMMWORD PTR[80+rdi]
- movdqa xmm15,xmm6
-$L$cbc_dec_loop6_enter::
- lea rdi,QWORD PTR[96+rdi]
- movdqa xmm8,xmm7
-
- call _aesni_decrypt6
-
- pxor xmm2,xmm10
- movdqa xmm10,xmm8
- pxor xmm3,xmm11
- movdqu XMMWORD PTR[rsi],xmm2
- pxor xmm4,xmm12
- movdqu XMMWORD PTR[16+rsi],xmm3
- pxor xmm5,xmm13
- movdqu XMMWORD PTR[32+rsi],xmm4
- pxor xmm6,xmm14
- mov rcx,rbp
- movdqu XMMWORD PTR[48+rsi],xmm5
- pxor xmm7,xmm15
- mov eax,r10d
- movdqu XMMWORD PTR[64+rsi],xmm6
- lea rsi,QWORD PTR[80+rsi]
- sub rdx,060h
- ja $L$cbc_dec_loop6
-
- movdqa xmm2,xmm7
- add rdx,050h
- jle $L$cbc_dec_clear_tail_collected
- movups XMMWORD PTR[rsi],xmm7
- lea rsi,QWORD PTR[16+rsi]
-
-$L$cbc_dec_tail::
- movups xmm2,XMMWORD PTR[rdi]
- sub rdx,010h
- jbe $L$cbc_dec_one
-
- movups xmm3,XMMWORD PTR[16+rdi]
- movaps xmm11,xmm2
- sub rdx,010h
- jbe $L$cbc_dec_two
-
- movups xmm4,XMMWORD PTR[32+rdi]
- movaps xmm12,xmm3
- sub rdx,010h
- jbe $L$cbc_dec_three
-
- movups xmm5,XMMWORD PTR[48+rdi]
- movaps xmm13,xmm4
- sub rdx,010h
- jbe $L$cbc_dec_four
-
- movups xmm6,XMMWORD PTR[64+rdi]
- movaps xmm14,xmm5
- movaps xmm15,xmm6
- xorps xmm7,xmm7
- call _aesni_decrypt6
- pxor xmm2,xmm10
- movaps xmm10,xmm15
- pxor xmm3,xmm11
- movdqu XMMWORD PTR[rsi],xmm2
- pxor xmm4,xmm12
- movdqu XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- pxor xmm5,xmm13
- movdqu XMMWORD PTR[32+rsi],xmm4
- pxor xmm4,xmm4
- pxor xmm6,xmm14
- movdqu XMMWORD PTR[48+rsi],xmm5
- pxor xmm5,xmm5
- lea rsi,QWORD PTR[64+rsi]
- movdqa xmm2,xmm6
- pxor xmm6,xmm6
- pxor xmm7,xmm7
- sub rdx,010h
- jmp $L$cbc_dec_tail_collected
-
-ALIGN 16
-$L$cbc_dec_one::
- movaps xmm11,xmm2
- movups xmm0,XMMWORD PTR[rcx]
- movups xmm1,XMMWORD PTR[16+rcx]
- lea rcx,QWORD PTR[32+rcx]
- xorps xmm2,xmm0
-$L$oop_dec1_17::
-DB 102,15,56,222,209
- dec eax
- movups xmm1,XMMWORD PTR[rcx]
- lea rcx,QWORD PTR[16+rcx]
- jnz $L$oop_dec1_17
-DB 102,15,56,223,209
- xorps xmm2,xmm10
- movaps xmm10,xmm11
- jmp $L$cbc_dec_tail_collected
-ALIGN 16
-$L$cbc_dec_two::
- movaps xmm12,xmm3
- call _aesni_decrypt2
- pxor xmm2,xmm10
- movaps xmm10,xmm12
- pxor xmm3,xmm11
- movdqu XMMWORD PTR[rsi],xmm2
- movdqa xmm2,xmm3
- pxor xmm3,xmm3
- lea rsi,QWORD PTR[16+rsi]
- jmp $L$cbc_dec_tail_collected
-ALIGN 16
-$L$cbc_dec_three::
- movaps xmm13,xmm4
- call _aesni_decrypt3
- pxor xmm2,xmm10
- movaps xmm10,xmm13
- pxor xmm3,xmm11
- movdqu XMMWORD PTR[rsi],xmm2
- pxor xmm4,xmm12
- movdqu XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- movdqa xmm2,xmm4
- pxor xmm4,xmm4
- lea rsi,QWORD PTR[32+rsi]
- jmp $L$cbc_dec_tail_collected
-ALIGN 16
-$L$cbc_dec_four::
- movaps xmm14,xmm5
- call _aesni_decrypt4
- pxor xmm2,xmm10
- movaps xmm10,xmm14
- pxor xmm3,xmm11
- movdqu XMMWORD PTR[rsi],xmm2
- pxor xmm4,xmm12
- movdqu XMMWORD PTR[16+rsi],xmm3
- pxor xmm3,xmm3
- pxor xmm5,xmm13
- movdqu XMMWORD PTR[32+rsi],xmm4
- pxor xmm4,xmm4
- movdqa xmm2,xmm5
- pxor xmm5,xmm5
- lea rsi,QWORD PTR[48+rsi]
- jmp $L$cbc_dec_tail_collected
-
-ALIGN 16
-$L$cbc_dec_clear_tail_collected::
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
-$L$cbc_dec_tail_collected::
- movups XMMWORD PTR[r8],xmm10
- and rdx,15
- jnz $L$cbc_dec_tail_partial
- movups XMMWORD PTR[rsi],xmm2
- pxor xmm2,xmm2
- jmp $L$cbc_dec_ret
-ALIGN 16
-$L$cbc_dec_tail_partial::
- movaps XMMWORD PTR[rsp],xmm2
- pxor xmm2,xmm2
- mov rcx,16
- mov rdi,rsi
- sub rcx,rdx
- lea rsi,QWORD PTR[rsp]
- DD 09066A4F3h
- movdqa XMMWORD PTR[rsp],xmm2
-
-$L$cbc_dec_ret::
- xorps xmm0,xmm0
- pxor xmm1,xmm1
- movaps xmm6,XMMWORD PTR[16+rsp]
- movaps XMMWORD PTR[16+rsp],xmm0
- movaps xmm7,XMMWORD PTR[32+rsp]
- movaps XMMWORD PTR[32+rsp],xmm0
- movaps xmm8,XMMWORD PTR[48+rsp]
- movaps XMMWORD PTR[48+rsp],xmm0
- movaps xmm9,XMMWORD PTR[64+rsp]
- movaps XMMWORD PTR[64+rsp],xmm0
- movaps xmm10,XMMWORD PTR[80+rsp]
- movaps XMMWORD PTR[80+rsp],xmm0
- movaps xmm11,XMMWORD PTR[96+rsp]
- movaps XMMWORD PTR[96+rsp],xmm0
- movaps xmm12,XMMWORD PTR[112+rsp]
- movaps XMMWORD PTR[112+rsp],xmm0
- movaps xmm13,XMMWORD PTR[128+rsp]
- movaps XMMWORD PTR[128+rsp],xmm0
- movaps xmm14,XMMWORD PTR[144+rsp]
- movaps XMMWORD PTR[144+rsp],xmm0
- movaps xmm15,XMMWORD PTR[160+rsp]
- movaps XMMWORD PTR[160+rsp],xmm0
- mov rbp,QWORD PTR[((-8))+r11]
-
- lea rsp,QWORD PTR[r11]
-
-$L$cbc_ret::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_cbc_encrypt::
-aesni_cbc_encrypt ENDP
-PUBLIC aesni_set_decrypt_key
-
-ALIGN 16
-aesni_set_decrypt_key PROC PUBLIC
-
-DB 048h,083h,0ECh,008h
-
- call __aesni_set_encrypt_key
- shl edx,4
- test eax,eax
- jnz $L$dec_key_ret
- lea rcx,QWORD PTR[16+rdx*1+r8]
-
- movups xmm0,XMMWORD PTR[r8]
- movups xmm1,XMMWORD PTR[rcx]
- movups XMMWORD PTR[rcx],xmm0
- movups XMMWORD PTR[r8],xmm1
- lea r8,QWORD PTR[16+r8]
- lea rcx,QWORD PTR[((-16))+rcx]
-
-$L$dec_key_inverse::
- movups xmm0,XMMWORD PTR[r8]
- movups xmm1,XMMWORD PTR[rcx]
-DB 102,15,56,219,192
-DB 102,15,56,219,201
- lea r8,QWORD PTR[16+r8]
- lea rcx,QWORD PTR[((-16))+rcx]
- movups XMMWORD PTR[16+rcx],xmm0
- movups XMMWORD PTR[(-16)+r8],xmm1
- cmp rcx,r8
- ja $L$dec_key_inverse
-
- movups xmm0,XMMWORD PTR[r8]
-DB 102,15,56,219,192
- pxor xmm1,xmm1
- movups XMMWORD PTR[rcx],xmm0
- pxor xmm0,xmm0
-$L$dec_key_ret::
- add rsp,8
-
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_set_decrypt_key::
-aesni_set_decrypt_key ENDP
-PUBLIC aesni_set_encrypt_key
-
-ALIGN 16
-aesni_set_encrypt_key PROC PUBLIC
-__aesni_set_encrypt_key::
-
-DB 048h,083h,0ECh,008h
-
- mov rax,-1
- test rcx,rcx
- jz $L$enc_key_ret
- test r8,r8
- jz $L$enc_key_ret
-
- mov r10d,268437504
- movups xmm0,XMMWORD PTR[rcx]
- xorps xmm4,xmm4
- and r10d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
- lea rax,QWORD PTR[16+r8]
- cmp edx,256
- je $L$14rounds
- cmp edx,192
- je $L$12rounds
- cmp edx,128
- jne $L$bad_keybits
-
-$L$10rounds::
- mov edx,9
- cmp r10d,268435456
- je $L$10rounds_alt
-
- movups XMMWORD PTR[r8],xmm0
-DB 102,15,58,223,200,1
- call $L$key_expansion_128_cold
-DB 102,15,58,223,200,2
- call $L$key_expansion_128
-DB 102,15,58,223,200,4
- call $L$key_expansion_128
-DB 102,15,58,223,200,8
- call $L$key_expansion_128
-DB 102,15,58,223,200,16
- call $L$key_expansion_128
-DB 102,15,58,223,200,32
- call $L$key_expansion_128
-DB 102,15,58,223,200,64
- call $L$key_expansion_128
-DB 102,15,58,223,200,128
- call $L$key_expansion_128
-DB 102,15,58,223,200,27
- call $L$key_expansion_128
-DB 102,15,58,223,200,54
- call $L$key_expansion_128
- movups XMMWORD PTR[rax],xmm0
- mov DWORD PTR[80+rax],edx
- xor eax,eax
- jmp $L$enc_key_ret
-
-ALIGN 16
-$L$10rounds_alt::
- movdqa xmm5,XMMWORD PTR[$L$key_rotate]
- mov r10d,8
- movdqa xmm4,XMMWORD PTR[$L$key_rcon1]
- movdqa xmm2,xmm0
- movdqu XMMWORD PTR[r8],xmm0
- jmp $L$oop_key128
-
-ALIGN 16
-$L$oop_key128::
-DB 102,15,56,0,197
-DB 102,15,56,221,196
- pslld xmm4,1
- lea rax,QWORD PTR[16+rax]
-
- movdqa xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm2,xmm3
-
- pxor xmm0,xmm2
- movdqu XMMWORD PTR[(-16)+rax],xmm0
- movdqa xmm2,xmm0
-
- dec r10d
- jnz $L$oop_key128
-
- movdqa xmm4,XMMWORD PTR[$L$key_rcon1b]
-
-DB 102,15,56,0,197
-DB 102,15,56,221,196
- pslld xmm4,1
-
- movdqa xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm2,xmm3
-
- pxor xmm0,xmm2
- movdqu XMMWORD PTR[rax],xmm0
-
- movdqa xmm2,xmm0
-DB 102,15,56,0,197
-DB 102,15,56,221,196
-
- movdqa xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm3,xmm2
- pslldq xmm2,4
- pxor xmm2,xmm3
-
- pxor xmm0,xmm2
- movdqu XMMWORD PTR[16+rax],xmm0
-
- mov DWORD PTR[96+rax],edx
- xor eax,eax
- jmp $L$enc_key_ret
-
-ALIGN 16
-$L$12rounds::
- movq xmm2,QWORD PTR[16+rcx]
- mov edx,11
- cmp r10d,268435456
- je $L$12rounds_alt
-
- movups XMMWORD PTR[r8],xmm0
-DB 102,15,58,223,202,1
- call $L$key_expansion_192a_cold
-DB 102,15,58,223,202,2
- call $L$key_expansion_192b
-DB 102,15,58,223,202,4
- call $L$key_expansion_192a
-DB 102,15,58,223,202,8
- call $L$key_expansion_192b
-DB 102,15,58,223,202,16
- call $L$key_expansion_192a
-DB 102,15,58,223,202,32
- call $L$key_expansion_192b
-DB 102,15,58,223,202,64
- call $L$key_expansion_192a
-DB 102,15,58,223,202,128
- call $L$key_expansion_192b
- movups XMMWORD PTR[rax],xmm0
- mov DWORD PTR[48+rax],edx
- xor rax,rax
- jmp $L$enc_key_ret
-
-ALIGN 16
-$L$12rounds_alt::
- movdqa xmm5,XMMWORD PTR[$L$key_rotate192]
- movdqa xmm4,XMMWORD PTR[$L$key_rcon1]
- mov r10d,8
- movdqu XMMWORD PTR[r8],xmm0
- jmp $L$oop_key192
-
-ALIGN 16
-$L$oop_key192::
- movq QWORD PTR[rax],xmm2
- movdqa xmm1,xmm2
-DB 102,15,56,0,213
-DB 102,15,56,221,212
- pslld xmm4,1
- lea rax,QWORD PTR[24+rax]
-
- movdqa xmm3,xmm0
- pslldq xmm0,4
- pxor xmm3,xmm0
- pslldq xmm0,4
- pxor xmm3,xmm0
- pslldq xmm0,4
- pxor xmm0,xmm3
-
- pshufd xmm3,xmm0,0ffh
- pxor xmm3,xmm1
- pslldq xmm1,4
- pxor xmm3,xmm1
-
- pxor xmm0,xmm2
- pxor xmm2,xmm3
- movdqu XMMWORD PTR[(-16)+rax],xmm0
-
- dec r10d
- jnz $L$oop_key192
-
- mov DWORD PTR[32+rax],edx
- xor eax,eax
- jmp $L$enc_key_ret
-
-ALIGN 16
-$L$14rounds::
- movups xmm2,XMMWORD PTR[16+rcx]
- mov edx,13
- lea rax,QWORD PTR[16+rax]
- cmp r10d,268435456
- je $L$14rounds_alt
-
- movups XMMWORD PTR[r8],xmm0
- movups XMMWORD PTR[16+r8],xmm2
-DB 102,15,58,223,202,1
- call $L$key_expansion_256a_cold
-DB 102,15,58,223,200,1
- call $L$key_expansion_256b
-DB 102,15,58,223,202,2
- call $L$key_expansion_256a
-DB 102,15,58,223,200,2
- call $L$key_expansion_256b
-DB 102,15,58,223,202,4
- call $L$key_expansion_256a
-DB 102,15,58,223,200,4
- call $L$key_expansion_256b
-DB 102,15,58,223,202,8
- call $L$key_expansion_256a
-DB 102,15,58,223,200,8
- call $L$key_expansion_256b
-DB 102,15,58,223,202,16
- call $L$key_expansion_256a
-DB 102,15,58,223,200,16
- call $L$key_expansion_256b
-DB 102,15,58,223,202,32
- call $L$key_expansion_256a
-DB 102,15,58,223,200,32
- call $L$key_expansion_256b
-DB 102,15,58,223,202,64
- call $L$key_expansion_256a
- movups XMMWORD PTR[rax],xmm0
- mov DWORD PTR[16+rax],edx
- xor rax,rax
- jmp $L$enc_key_ret
-
-ALIGN 16
-$L$14rounds_alt::
- movdqa xmm5,XMMWORD PTR[$L$key_rotate]
- movdqa xmm4,XMMWORD PTR[$L$key_rcon1]
- mov r10d,7
- movdqu XMMWORD PTR[r8],xmm0
- movdqa xmm1,xmm2
- movdqu XMMWORD PTR[16+r8],xmm2
- jmp $L$oop_key256
-
-ALIGN 16
-$L$oop_key256::
-DB 102,15,56,0,213
-DB 102,15,56,221,212
-
- movdqa xmm3,xmm0
- pslldq xmm0,4
- pxor xmm3,xmm0
- pslldq xmm0,4
- pxor xmm3,xmm0
- pslldq xmm0,4
- pxor xmm0,xmm3
- pslld xmm4,1
-
- pxor xmm0,xmm2
- movdqu XMMWORD PTR[rax],xmm0
-
- dec r10d
- jz $L$done_key256
-
- pshufd xmm2,xmm0,0ffh
- pxor xmm3,xmm3
-DB 102,15,56,221,211
-
- movdqa xmm3,xmm1
- pslldq xmm1,4
- pxor xmm3,xmm1
- pslldq xmm1,4
- pxor xmm3,xmm1
- pslldq xmm1,4
- pxor xmm1,xmm3
-
- pxor xmm2,xmm1
- movdqu XMMWORD PTR[16+rax],xmm2
- lea rax,QWORD PTR[32+rax]
- movdqa xmm1,xmm2
-
- jmp $L$oop_key256
-
-$L$done_key256::
- mov DWORD PTR[16+rax],edx
- xor eax,eax
- jmp $L$enc_key_ret
-
-ALIGN 16
-$L$bad_keybits::
- mov rax,-2
-$L$enc_key_ret::
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- add rsp,8
-
- DB 0F3h,0C3h ;repret
-$L$SEH_end_set_encrypt_key::
-
-ALIGN 16
-$L$key_expansion_128::
- movups XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
-$L$key_expansion_128_cold::
- shufps xmm4,xmm0,16
- xorps xmm0,xmm4
- shufps xmm4,xmm0,140
- xorps xmm0,xmm4
- shufps xmm1,xmm1,255
- xorps xmm0,xmm1
- DB 0F3h,0C3h ;repret
-
-ALIGN 16
-$L$key_expansion_192a::
- movups XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
-$L$key_expansion_192a_cold::
- movaps xmm5,xmm2
-$L$key_expansion_192b_warm::
- shufps xmm4,xmm0,16
- movdqa xmm3,xmm2
- xorps xmm0,xmm4
- shufps xmm4,xmm0,140
- pslldq xmm3,4
- xorps xmm0,xmm4
- pshufd xmm1,xmm1,85
- pxor xmm2,xmm3
- pxor xmm0,xmm1
- pshufd xmm3,xmm0,255
- pxor xmm2,xmm3
- DB 0F3h,0C3h ;repret
-
-ALIGN 16
-$L$key_expansion_192b::
- movaps xmm3,xmm0
- shufps xmm5,xmm0,68
- movups XMMWORD PTR[rax],xmm5
- shufps xmm3,xmm2,78
- movups XMMWORD PTR[16+rax],xmm3
- lea rax,QWORD PTR[32+rax]
- jmp $L$key_expansion_192b_warm
-
-ALIGN 16
-$L$key_expansion_256a::
- movups XMMWORD PTR[rax],xmm2
- lea rax,QWORD PTR[16+rax]
-$L$key_expansion_256a_cold::
- shufps xmm4,xmm0,16
- xorps xmm0,xmm4
- shufps xmm4,xmm0,140
- xorps xmm0,xmm4
- shufps xmm1,xmm1,255
- xorps xmm0,xmm1
- DB 0F3h,0C3h ;repret
-
-ALIGN 16
-$L$key_expansion_256b::
- movups XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
-
- shufps xmm4,xmm2,16
- xorps xmm2,xmm4
- shufps xmm4,xmm2,140
- xorps xmm2,xmm4
- shufps xmm1,xmm1,170
- xorps xmm2,xmm1
- DB 0F3h,0C3h ;repret
-
-aesni_set_encrypt_key ENDP
-
-ALIGN 64
-$L$bswap_mask::
-DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
-$L$increment32::
- DD 6,6,6,0
-$L$increment64::
- DD 1,0,0,0
-$L$xts_magic::
- DD 087h,0,1,0
-$L$increment1::
-DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
-$L$key_rotate::
- DD 00c0f0e0dh,00c0f0e0dh,00c0f0e0dh,00c0f0e0dh
-$L$key_rotate192::
- DD 004070605h,004070605h,004070605h,004070605h
-$L$key_rcon1::
- DD 1,1,1,1
-$L$key_rcon1b::
- DD 01bh,01bh,01bh,01bh
-
-DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
-DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
-DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
-DB 115,108,46,111,114,103,62,0
-ALIGN 64
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-ecb_ccm64_se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- lea rsi,QWORD PTR[rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,8
- DD 0a548f3fch
- lea rax,QWORD PTR[88+rax]
-
- jmp $L$common_seh_tail
-ecb_ccm64_se_handler ENDP
-
-
-ALIGN 16
-ctr_xts_se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- mov rax,QWORD PTR[208+r8]
-
- lea rsi,QWORD PTR[((-168))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
- mov rbp,QWORD PTR[((-8))+rax]
- mov QWORD PTR[160+r8],rbp
- jmp $L$common_seh_tail
-ctr_xts_se_handler ENDP
-
-
-ALIGN 16
-ocb_se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- mov r10d,DWORD PTR[8+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$ocb_no_xmm
-
- mov rax,QWORD PTR[152+r8]
-
- lea rsi,QWORD PTR[rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
- lea rax,QWORD PTR[((160+40))+rax]
-
-$L$ocb_no_xmm::
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
-
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
-
- jmp $L$common_seh_tail
-ocb_se_handler ENDP
-
-ALIGN 16
-cbc_se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[152+r8]
- mov rbx,QWORD PTR[248+r8]
-
- lea r10,QWORD PTR[$L$cbc_decrypt_bulk]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[120+r8]
-
- lea r10,QWORD PTR[$L$cbc_decrypt_body]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- lea r10,QWORD PTR[$L$cbc_ret]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- lea rsi,QWORD PTR[16+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
- mov rax,QWORD PTR[208+r8]
-
- mov rbp,QWORD PTR[((-8))+rax]
- mov QWORD PTR[160+r8],rbp
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-cbc_se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_aesni_ecb_encrypt
- DD imagerel $L$SEH_end_aesni_ecb_encrypt
- DD imagerel $L$SEH_info_ecb
-
- DD imagerel $L$SEH_begin_aesni_ccm64_encrypt_blocks
- DD imagerel $L$SEH_end_aesni_ccm64_encrypt_blocks
- DD imagerel $L$SEH_info_ccm64_enc
-
- DD imagerel $L$SEH_begin_aesni_ccm64_decrypt_blocks
- DD imagerel $L$SEH_end_aesni_ccm64_decrypt_blocks
- DD imagerel $L$SEH_info_ccm64_dec
-
- DD imagerel $L$SEH_begin_aesni_ctr32_encrypt_blocks
- DD imagerel $L$SEH_end_aesni_ctr32_encrypt_blocks
- DD imagerel $L$SEH_info_ctr32
-
- DD imagerel $L$SEH_begin_aesni_xts_encrypt
- DD imagerel $L$SEH_end_aesni_xts_encrypt
- DD imagerel $L$SEH_info_xts_enc
-
- DD imagerel $L$SEH_begin_aesni_xts_decrypt
- DD imagerel $L$SEH_end_aesni_xts_decrypt
- DD imagerel $L$SEH_info_xts_dec
-
- DD imagerel $L$SEH_begin_aesni_ocb_encrypt
- DD imagerel $L$SEH_end_aesni_ocb_encrypt
- DD imagerel $L$SEH_info_ocb_enc
-
- DD imagerel $L$SEH_begin_aesni_ocb_decrypt
- DD imagerel $L$SEH_end_aesni_ocb_decrypt
- DD imagerel $L$SEH_info_ocb_dec
- DD imagerel $L$SEH_begin_aesni_cbc_encrypt
- DD imagerel $L$SEH_end_aesni_cbc_encrypt
- DD imagerel $L$SEH_info_cbc
-
- DD imagerel aesni_set_decrypt_key
- DD imagerel $L$SEH_end_set_decrypt_key
- DD imagerel $L$SEH_info_key
-
- DD imagerel aesni_set_encrypt_key
- DD imagerel $L$SEH_end_set_encrypt_key
- DD imagerel $L$SEH_info_key
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_ecb::
-DB 9,0,0,0
- DD imagerel ecb_ccm64_se_handler
- DD imagerel $L$ecb_enc_body,imagerel $L$ecb_enc_ret
-$L$SEH_info_ccm64_enc::
-DB 9,0,0,0
- DD imagerel ecb_ccm64_se_handler
- DD imagerel $L$ccm64_enc_body,imagerel $L$ccm64_enc_ret
-$L$SEH_info_ccm64_dec::
-DB 9,0,0,0
- DD imagerel ecb_ccm64_se_handler
- DD imagerel $L$ccm64_dec_body,imagerel $L$ccm64_dec_ret
-$L$SEH_info_ctr32::
-DB 9,0,0,0
- DD imagerel ctr_xts_se_handler
- DD imagerel $L$ctr32_body,imagerel $L$ctr32_epilogue
-$L$SEH_info_xts_enc::
-DB 9,0,0,0
- DD imagerel ctr_xts_se_handler
- DD imagerel $L$xts_enc_body,imagerel $L$xts_enc_epilogue
-$L$SEH_info_xts_dec::
-DB 9,0,0,0
- DD imagerel ctr_xts_se_handler
- DD imagerel $L$xts_dec_body,imagerel $L$xts_dec_epilogue
-$L$SEH_info_ocb_enc::
-DB 9,0,0,0
- DD imagerel ocb_se_handler
- DD imagerel $L$ocb_enc_body,imagerel $L$ocb_enc_epilogue
- DD imagerel $L$ocb_enc_pop
- DD 0
-$L$SEH_info_ocb_dec::
-DB 9,0,0,0
- DD imagerel ocb_se_handler
- DD imagerel $L$ocb_dec_body,imagerel $L$ocb_dec_epilogue
- DD imagerel $L$ocb_dec_pop
- DD 0
-$L$SEH_info_cbc::
-DB 9,0,0,0
- DD imagerel cbc_se_handler
-$L$SEH_info_key::
-DB 001h,004h,001h,000h
-DB 004h,002h,000h,000h
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+EXTERN OPENSSL_ia32cap_P:NEAR
+PUBLIC aesni_encrypt
+
+ALIGN 16
+aesni_encrypt PROC PUBLIC
+
+ movups xmm2,XMMWORD PTR[rcx]
+ mov eax,DWORD PTR[240+r8]
+ movups xmm0,XMMWORD PTR[r8]
+ movups xmm1,XMMWORD PTR[16+r8]
+ lea r8,QWORD PTR[32+r8]
+ xorps xmm2,xmm0
+$L$oop_enc1_1::
+DB 102,15,56,220,209
+ dec eax
+ movups xmm1,XMMWORD PTR[r8]
+ lea r8,QWORD PTR[16+r8]
+ jnz $L$oop_enc1_1
+DB 102,15,56,221,209
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ movups XMMWORD PTR[rdx],xmm2
+ pxor xmm2,xmm2
+ DB 0F3h,0C3h ;repret
+
+aesni_encrypt ENDP
+
+PUBLIC aesni_decrypt
+
+ALIGN 16
+aesni_decrypt PROC PUBLIC
+
+ movups xmm2,XMMWORD PTR[rcx]
+ mov eax,DWORD PTR[240+r8]
+ movups xmm0,XMMWORD PTR[r8]
+ movups xmm1,XMMWORD PTR[16+r8]
+ lea r8,QWORD PTR[32+r8]
+ xorps xmm2,xmm0
+$L$oop_dec1_2::
+DB 102,15,56,222,209
+ dec eax
+ movups xmm1,XMMWORD PTR[r8]
+ lea r8,QWORD PTR[16+r8]
+ jnz $L$oop_dec1_2
+DB 102,15,56,223,209
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ movups XMMWORD PTR[rdx],xmm2
+ pxor xmm2,xmm2
+ DB 0F3h,0C3h ;repret
+
+aesni_decrypt ENDP
+
+ALIGN 16
+_aesni_encrypt2 PROC PRIVATE
+
+ movups xmm0,XMMWORD PTR[rcx]
+ shl eax,4
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm2,xmm0
+ xorps xmm3,xmm0
+ movups xmm0,XMMWORD PTR[32+rcx]
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ neg rax
+ add rax,16
+
+$L$enc_loop2::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$enc_loop2
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+ DB 0F3h,0C3h ;repret
+
+_aesni_encrypt2 ENDP
+
+ALIGN 16
+_aesni_decrypt2 PROC PRIVATE
+
+ movups xmm0,XMMWORD PTR[rcx]
+ shl eax,4
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm2,xmm0
+ xorps xmm3,xmm0
+ movups xmm0,XMMWORD PTR[32+rcx]
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ neg rax
+ add rax,16
+
+$L$dec_loop2::
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$dec_loop2
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,223,208
+DB 102,15,56,223,216
+ DB 0F3h,0C3h ;repret
+
+_aesni_decrypt2 ENDP
+
+ALIGN 16
+_aesni_encrypt3 PROC PRIVATE
+
+ movups xmm0,XMMWORD PTR[rcx]
+ shl eax,4
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm2,xmm0
+ xorps xmm3,xmm0
+ xorps xmm4,xmm0
+ movups xmm0,XMMWORD PTR[32+rcx]
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ neg rax
+ add rax,16
+
+$L$enc_loop3::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$enc_loop3
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+DB 102,15,56,221,224
+ DB 0F3h,0C3h ;repret
+
+_aesni_encrypt3 ENDP
+
+ALIGN 16
+_aesni_decrypt3 PROC PRIVATE
+
+ movups xmm0,XMMWORD PTR[rcx]
+ shl eax,4
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm2,xmm0
+ xorps xmm3,xmm0
+ xorps xmm4,xmm0
+ movups xmm0,XMMWORD PTR[32+rcx]
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ neg rax
+ add rax,16
+
+$L$dec_loop3::
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$dec_loop3
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,223,208
+DB 102,15,56,223,216
+DB 102,15,56,223,224
+ DB 0F3h,0C3h ;repret
+
+_aesni_decrypt3 ENDP
+
+ALIGN 16
+_aesni_encrypt4 PROC PRIVATE
+
+ movups xmm0,XMMWORD PTR[rcx]
+ shl eax,4
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm2,xmm0
+ xorps xmm3,xmm0
+ xorps xmm4,xmm0
+ xorps xmm5,xmm0
+ movups xmm0,XMMWORD PTR[32+rcx]
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ neg rax
+DB 00fh,01fh,000h
+ add rax,16
+
+$L$enc_loop4::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$enc_loop4
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+DB 102,15,56,221,224
+DB 102,15,56,221,232
+ DB 0F3h,0C3h ;repret
+
+_aesni_encrypt4 ENDP
+
+ALIGN 16
+_aesni_decrypt4 PROC PRIVATE
+
+ movups xmm0,XMMWORD PTR[rcx]
+ shl eax,4
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm2,xmm0
+ xorps xmm3,xmm0
+ xorps xmm4,xmm0
+ xorps xmm5,xmm0
+ movups xmm0,XMMWORD PTR[32+rcx]
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ neg rax
+DB 00fh,01fh,000h
+ add rax,16
+
+$L$dec_loop4::
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$dec_loop4
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,223,208
+DB 102,15,56,223,216
+DB 102,15,56,223,224
+DB 102,15,56,223,232
+ DB 0F3h,0C3h ;repret
+
+_aesni_decrypt4 ENDP
+
+ALIGN 16
+_aesni_encrypt6 PROC PRIVATE
+
+ movups xmm0,XMMWORD PTR[rcx]
+ shl eax,4
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm2,xmm0
+ pxor xmm3,xmm0
+ pxor xmm4,xmm0
+DB 102,15,56,220,209
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ neg rax
+DB 102,15,56,220,217
+ pxor xmm5,xmm0
+ pxor xmm6,xmm0
+DB 102,15,56,220,225
+ pxor xmm7,xmm0
+ movups xmm0,XMMWORD PTR[rax*1+rcx]
+ add rax,16
+ jmp $L$enc_loop6_enter
+ALIGN 16
+$L$enc_loop6::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+$L$enc_loop6_enter::
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$enc_loop6
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+DB 102,15,56,221,224
+DB 102,15,56,221,232
+DB 102,15,56,221,240
+DB 102,15,56,221,248
+ DB 0F3h,0C3h ;repret
+
+_aesni_encrypt6 ENDP
+
+ALIGN 16
+_aesni_decrypt6 PROC PRIVATE
+
+ movups xmm0,XMMWORD PTR[rcx]
+ shl eax,4
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm2,xmm0
+ pxor xmm3,xmm0
+ pxor xmm4,xmm0
+DB 102,15,56,222,209
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ neg rax
+DB 102,15,56,222,217
+ pxor xmm5,xmm0
+ pxor xmm6,xmm0
+DB 102,15,56,222,225
+ pxor xmm7,xmm0
+ movups xmm0,XMMWORD PTR[rax*1+rcx]
+ add rax,16
+ jmp $L$dec_loop6_enter
+ALIGN 16
+$L$dec_loop6::
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+$L$dec_loop6_enter::
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$dec_loop6
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+DB 102,15,56,223,208
+DB 102,15,56,223,216
+DB 102,15,56,223,224
+DB 102,15,56,223,232
+DB 102,15,56,223,240
+DB 102,15,56,223,248
+ DB 0F3h,0C3h ;repret
+
+_aesni_decrypt6 ENDP
+
+ALIGN 16
+_aesni_encrypt8 PROC PRIVATE
+
+ movups xmm0,XMMWORD PTR[rcx]
+ shl eax,4
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm2,xmm0
+ xorps xmm3,xmm0
+ pxor xmm4,xmm0
+ pxor xmm5,xmm0
+ pxor xmm6,xmm0
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ neg rax
+DB 102,15,56,220,209
+ pxor xmm7,xmm0
+ pxor xmm8,xmm0
+DB 102,15,56,220,217
+ pxor xmm9,xmm0
+ movups xmm0,XMMWORD PTR[rax*1+rcx]
+ add rax,16
+ jmp $L$enc_loop8_inner
+ALIGN 16
+$L$enc_loop8::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+$L$enc_loop8_inner::
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,68,15,56,220,193
+DB 102,68,15,56,220,201
+$L$enc_loop8_enter::
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+DB 102,68,15,56,220,192
+DB 102,68,15,56,220,200
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$enc_loop8
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,68,15,56,220,193
+DB 102,68,15,56,220,201
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+DB 102,15,56,221,224
+DB 102,15,56,221,232
+DB 102,15,56,221,240
+DB 102,15,56,221,248
+DB 102,68,15,56,221,192
+DB 102,68,15,56,221,200
+ DB 0F3h,0C3h ;repret
+
+_aesni_encrypt8 ENDP
+
+ALIGN 16
+_aesni_decrypt8 PROC PRIVATE
+
+ movups xmm0,XMMWORD PTR[rcx]
+ shl eax,4
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm2,xmm0
+ xorps xmm3,xmm0
+ pxor xmm4,xmm0
+ pxor xmm5,xmm0
+ pxor xmm6,xmm0
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ neg rax
+DB 102,15,56,222,209
+ pxor xmm7,xmm0
+ pxor xmm8,xmm0
+DB 102,15,56,222,217
+ pxor xmm9,xmm0
+ movups xmm0,XMMWORD PTR[rax*1+rcx]
+ add rax,16
+ jmp $L$dec_loop8_inner
+ALIGN 16
+$L$dec_loop8::
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+$L$dec_loop8_inner::
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+DB 102,68,15,56,222,193
+DB 102,68,15,56,222,201
+$L$dec_loop8_enter::
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+DB 102,68,15,56,222,192
+DB 102,68,15,56,222,200
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$dec_loop8
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+DB 102,68,15,56,222,193
+DB 102,68,15,56,222,201
+DB 102,15,56,223,208
+DB 102,15,56,223,216
+DB 102,15,56,223,224
+DB 102,15,56,223,232
+DB 102,15,56,223,240
+DB 102,15,56,223,248
+DB 102,68,15,56,223,192
+DB 102,68,15,56,223,200
+ DB 0F3h,0C3h ;repret
+
+_aesni_decrypt8 ENDP
+PUBLIC aesni_ecb_encrypt
+
+ALIGN 16
+aesni_ecb_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_ecb_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+ lea rsp,QWORD PTR[((-88))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+$L$ecb_enc_body::
+ and rdx,-16
+ jz $L$ecb_ret
+
+ mov eax,DWORD PTR[240+rcx]
+ movups xmm0,XMMWORD PTR[rcx]
+ mov r11,rcx
+ mov r10d,eax
+ test r8d,r8d
+ jz $L$ecb_decrypt
+
+ cmp rdx,080h
+ jb $L$ecb_enc_tail
+
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ movdqu xmm7,XMMWORD PTR[80+rdi]
+ movdqu xmm8,XMMWORD PTR[96+rdi]
+ movdqu xmm9,XMMWORD PTR[112+rdi]
+ lea rdi,QWORD PTR[128+rdi]
+ sub rdx,080h
+ jmp $L$ecb_enc_loop8_enter
+ALIGN 16
+$L$ecb_enc_loop8::
+ movups XMMWORD PTR[rsi],xmm2
+ mov rcx,r11
+ movdqu xmm2,XMMWORD PTR[rdi]
+ mov eax,r10d
+ movups XMMWORD PTR[16+rsi],xmm3
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ movups XMMWORD PTR[32+rsi],xmm4
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ movups XMMWORD PTR[48+rsi],xmm5
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ movups XMMWORD PTR[64+rsi],xmm6
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ movups XMMWORD PTR[80+rsi],xmm7
+ movdqu xmm7,XMMWORD PTR[80+rdi]
+ movups XMMWORD PTR[96+rsi],xmm8
+ movdqu xmm8,XMMWORD PTR[96+rdi]
+ movups XMMWORD PTR[112+rsi],xmm9
+ lea rsi,QWORD PTR[128+rsi]
+ movdqu xmm9,XMMWORD PTR[112+rdi]
+ lea rdi,QWORD PTR[128+rdi]
+$L$ecb_enc_loop8_enter::
+
+ call _aesni_encrypt8
+
+ sub rdx,080h
+ jnc $L$ecb_enc_loop8
+
+ movups XMMWORD PTR[rsi],xmm2
+ mov rcx,r11
+ movups XMMWORD PTR[16+rsi],xmm3
+ mov eax,r10d
+ movups XMMWORD PTR[32+rsi],xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ movups XMMWORD PTR[80+rsi],xmm7
+ movups XMMWORD PTR[96+rsi],xmm8
+ movups XMMWORD PTR[112+rsi],xmm9
+ lea rsi,QWORD PTR[128+rsi]
+ add rdx,080h
+ jz $L$ecb_ret
+
+$L$ecb_enc_tail::
+ movups xmm2,XMMWORD PTR[rdi]
+ cmp rdx,020h
+ jb $L$ecb_enc_one
+ movups xmm3,XMMWORD PTR[16+rdi]
+ je $L$ecb_enc_two
+ movups xmm4,XMMWORD PTR[32+rdi]
+ cmp rdx,040h
+ jb $L$ecb_enc_three
+ movups xmm5,XMMWORD PTR[48+rdi]
+ je $L$ecb_enc_four
+ movups xmm6,XMMWORD PTR[64+rdi]
+ cmp rdx,060h
+ jb $L$ecb_enc_five
+ movups xmm7,XMMWORD PTR[80+rdi]
+ je $L$ecb_enc_six
+ movdqu xmm8,XMMWORD PTR[96+rdi]
+ xorps xmm9,xmm9
+ call _aesni_encrypt8
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ movups XMMWORD PTR[80+rsi],xmm7
+ movups XMMWORD PTR[96+rsi],xmm8
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_enc_one::
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_enc1_3::
+DB 102,15,56,220,209
+ dec eax
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_enc1_3
+DB 102,15,56,221,209
+ movups XMMWORD PTR[rsi],xmm2
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_enc_two::
+ call _aesni_encrypt2
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_enc_three::
+ call _aesni_encrypt3
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_enc_four::
+ call _aesni_encrypt4
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_enc_five::
+ xorps xmm7,xmm7
+ call _aesni_encrypt6
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_enc_six::
+ call _aesni_encrypt6
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ movups XMMWORD PTR[80+rsi],xmm7
+ jmp $L$ecb_ret
+
+ALIGN 16
+$L$ecb_decrypt::
+ cmp rdx,080h
+ jb $L$ecb_dec_tail
+
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ movdqu xmm7,XMMWORD PTR[80+rdi]
+ movdqu xmm8,XMMWORD PTR[96+rdi]
+ movdqu xmm9,XMMWORD PTR[112+rdi]
+ lea rdi,QWORD PTR[128+rdi]
+ sub rdx,080h
+ jmp $L$ecb_dec_loop8_enter
+ALIGN 16
+$L$ecb_dec_loop8::
+ movups XMMWORD PTR[rsi],xmm2
+ mov rcx,r11
+ movdqu xmm2,XMMWORD PTR[rdi]
+ mov eax,r10d
+ movups XMMWORD PTR[16+rsi],xmm3
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ movups XMMWORD PTR[32+rsi],xmm4
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ movups XMMWORD PTR[48+rsi],xmm5
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ movups XMMWORD PTR[64+rsi],xmm6
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ movups XMMWORD PTR[80+rsi],xmm7
+ movdqu xmm7,XMMWORD PTR[80+rdi]
+ movups XMMWORD PTR[96+rsi],xmm8
+ movdqu xmm8,XMMWORD PTR[96+rdi]
+ movups XMMWORD PTR[112+rsi],xmm9
+ lea rsi,QWORD PTR[128+rsi]
+ movdqu xmm9,XMMWORD PTR[112+rdi]
+ lea rdi,QWORD PTR[128+rdi]
+$L$ecb_dec_loop8_enter::
+
+ call _aesni_decrypt8
+
+ movups xmm0,XMMWORD PTR[r11]
+ sub rdx,080h
+ jnc $L$ecb_dec_loop8
+
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm2,xmm2
+ mov rcx,r11
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ mov eax,r10d
+ movups XMMWORD PTR[32+rsi],xmm4
+ pxor xmm4,xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ pxor xmm5,xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ pxor xmm6,xmm6
+ movups XMMWORD PTR[80+rsi],xmm7
+ pxor xmm7,xmm7
+ movups XMMWORD PTR[96+rsi],xmm8
+ pxor xmm8,xmm8
+ movups XMMWORD PTR[112+rsi],xmm9
+ pxor xmm9,xmm9
+ lea rsi,QWORD PTR[128+rsi]
+ add rdx,080h
+ jz $L$ecb_ret
+
+$L$ecb_dec_tail::
+ movups xmm2,XMMWORD PTR[rdi]
+ cmp rdx,020h
+ jb $L$ecb_dec_one
+ movups xmm3,XMMWORD PTR[16+rdi]
+ je $L$ecb_dec_two
+ movups xmm4,XMMWORD PTR[32+rdi]
+ cmp rdx,040h
+ jb $L$ecb_dec_three
+ movups xmm5,XMMWORD PTR[48+rdi]
+ je $L$ecb_dec_four
+ movups xmm6,XMMWORD PTR[64+rdi]
+ cmp rdx,060h
+ jb $L$ecb_dec_five
+ movups xmm7,XMMWORD PTR[80+rdi]
+ je $L$ecb_dec_six
+ movups xmm8,XMMWORD PTR[96+rdi]
+ movups xmm0,XMMWORD PTR[rcx]
+ xorps xmm9,xmm9
+ call _aesni_decrypt8
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm2,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ pxor xmm4,xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ pxor xmm5,xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ pxor xmm6,xmm6
+ movups XMMWORD PTR[80+rsi],xmm7
+ pxor xmm7,xmm7
+ movups XMMWORD PTR[96+rsi],xmm8
+ pxor xmm8,xmm8
+ pxor xmm9,xmm9
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_dec_one::
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_dec1_4::
+DB 102,15,56,222,209
+ dec eax
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_dec1_4
+DB 102,15,56,223,209
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm2,xmm2
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_dec_two::
+ call _aesni_decrypt2
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm2,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_dec_three::
+ call _aesni_decrypt3
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm2,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ pxor xmm4,xmm4
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_dec_four::
+ call _aesni_decrypt4
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm2,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ pxor xmm4,xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ pxor xmm5,xmm5
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_dec_five::
+ xorps xmm7,xmm7
+ call _aesni_decrypt6
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm2,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ pxor xmm4,xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ pxor xmm5,xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ pxor xmm6,xmm6
+ pxor xmm7,xmm7
+ jmp $L$ecb_ret
+ALIGN 16
+$L$ecb_dec_six::
+ call _aesni_decrypt6
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm2,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ pxor xmm4,xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ pxor xmm5,xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ pxor xmm6,xmm6
+ movups XMMWORD PTR[80+rsi],xmm7
+ pxor xmm7,xmm7
+
+$L$ecb_ret::
+ xorps xmm0,xmm0
+ pxor xmm1,xmm1
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps XMMWORD PTR[rsp],xmm0
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm0
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps XMMWORD PTR[32+rsp],xmm0
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps XMMWORD PTR[48+rsp],xmm0
+ lea rsp,QWORD PTR[88+rsp]
+$L$ecb_enc_ret::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_ecb_encrypt::
+aesni_ecb_encrypt ENDP
+PUBLIC aesni_ccm64_encrypt_blocks
+
+ALIGN 16
+aesni_ccm64_encrypt_blocks PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_ccm64_encrypt_blocks::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ lea rsp,QWORD PTR[((-88))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+$L$ccm64_enc_body::
+ mov eax,DWORD PTR[240+rcx]
+ movdqu xmm6,XMMWORD PTR[r8]
+ movdqa xmm9,XMMWORD PTR[$L$increment64]
+ movdqa xmm7,XMMWORD PTR[$L$bswap_mask]
+
+ shl eax,4
+ mov r10d,16
+ lea r11,QWORD PTR[rcx]
+ movdqu xmm3,XMMWORD PTR[r9]
+ movdqa xmm2,xmm6
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+DB 102,15,56,0,247
+ sub r10,rax
+ jmp $L$ccm64_enc_outer
+ALIGN 16
+$L$ccm64_enc_outer::
+ movups xmm0,XMMWORD PTR[r11]
+ mov rax,r10
+ movups xmm8,XMMWORD PTR[rdi]
+
+ xorps xmm2,xmm0
+ movups xmm1,XMMWORD PTR[16+r11]
+ xorps xmm0,xmm8
+ xorps xmm3,xmm0
+ movups xmm0,XMMWORD PTR[32+r11]
+
+$L$ccm64_enc2_loop::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$ccm64_enc2_loop
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ paddq xmm6,xmm9
+ dec rdx
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+
+ lea rdi,QWORD PTR[16+rdi]
+ xorps xmm8,xmm2
+ movdqa xmm2,xmm6
+ movups XMMWORD PTR[rsi],xmm8
+DB 102,15,56,0,215
+ lea rsi,QWORD PTR[16+rsi]
+ jnz $L$ccm64_enc_outer
+
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ movups XMMWORD PTR[r9],xmm3
+ pxor xmm3,xmm3
+ pxor xmm8,xmm8
+ pxor xmm6,xmm6
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps XMMWORD PTR[rsp],xmm0
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm0
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps XMMWORD PTR[32+rsp],xmm0
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps XMMWORD PTR[48+rsp],xmm0
+ lea rsp,QWORD PTR[88+rsp]
+$L$ccm64_enc_ret::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_ccm64_encrypt_blocks::
+aesni_ccm64_encrypt_blocks ENDP
+PUBLIC aesni_ccm64_decrypt_blocks
+
+ALIGN 16
+aesni_ccm64_decrypt_blocks PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_ccm64_decrypt_blocks::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ lea rsp,QWORD PTR[((-88))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+$L$ccm64_dec_body::
+ mov eax,DWORD PTR[240+rcx]
+ movups xmm6,XMMWORD PTR[r8]
+ movdqu xmm3,XMMWORD PTR[r9]
+ movdqa xmm9,XMMWORD PTR[$L$increment64]
+ movdqa xmm7,XMMWORD PTR[$L$bswap_mask]
+
+ movaps xmm2,xmm6
+ mov r10d,eax
+ mov r11,rcx
+DB 102,15,56,0,247
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_enc1_5::
+DB 102,15,56,220,209
+ dec eax
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_enc1_5
+DB 102,15,56,221,209
+ shl r10d,4
+ mov eax,16
+ movups xmm8,XMMWORD PTR[rdi]
+ paddq xmm6,xmm9
+ lea rdi,QWORD PTR[16+rdi]
+ sub rax,r10
+ lea rcx,QWORD PTR[32+r10*1+r11]
+ mov r10,rax
+ jmp $L$ccm64_dec_outer
+ALIGN 16
+$L$ccm64_dec_outer::
+ xorps xmm8,xmm2
+ movdqa xmm2,xmm6
+ movups XMMWORD PTR[rsi],xmm8
+ lea rsi,QWORD PTR[16+rsi]
+DB 102,15,56,0,215
+
+ sub rdx,1
+ jz $L$ccm64_dec_break
+
+ movups xmm0,XMMWORD PTR[r11]
+ mov rax,r10
+ movups xmm1,XMMWORD PTR[16+r11]
+ xorps xmm8,xmm0
+ xorps xmm2,xmm0
+ xorps xmm3,xmm8
+ movups xmm0,XMMWORD PTR[32+r11]
+ jmp $L$ccm64_dec2_loop
+ALIGN 16
+$L$ccm64_dec2_loop::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$ccm64_dec2_loop
+ movups xmm8,XMMWORD PTR[rdi]
+ paddq xmm6,xmm9
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,221,208
+DB 102,15,56,221,216
+ lea rdi,QWORD PTR[16+rdi]
+ jmp $L$ccm64_dec_outer
+
+ALIGN 16
+$L$ccm64_dec_break::
+
+ mov eax,DWORD PTR[240+r11]
+ movups xmm0,XMMWORD PTR[r11]
+ movups xmm1,XMMWORD PTR[16+r11]
+ xorps xmm8,xmm0
+ lea r11,QWORD PTR[32+r11]
+ xorps xmm3,xmm8
+$L$oop_enc1_6::
+DB 102,15,56,220,217
+ dec eax
+ movups xmm1,XMMWORD PTR[r11]
+ lea r11,QWORD PTR[16+r11]
+ jnz $L$oop_enc1_6
+DB 102,15,56,221,217
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ movups XMMWORD PTR[r9],xmm3
+ pxor xmm3,xmm3
+ pxor xmm8,xmm8
+ pxor xmm6,xmm6
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps XMMWORD PTR[rsp],xmm0
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm0
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps XMMWORD PTR[32+rsp],xmm0
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps XMMWORD PTR[48+rsp],xmm0
+ lea rsp,QWORD PTR[88+rsp]
+$L$ccm64_dec_ret::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_ccm64_decrypt_blocks::
+aesni_ccm64_decrypt_blocks ENDP
+PUBLIC aesni_ctr32_encrypt_blocks
+
+ALIGN 16
+aesni_ctr32_encrypt_blocks PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_ctr32_encrypt_blocks::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+ cmp rdx,1
+ jne $L$ctr32_bulk
+
+
+
+ movups xmm2,XMMWORD PTR[r8]
+ movups xmm3,XMMWORD PTR[rdi]
+ mov edx,DWORD PTR[240+rcx]
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_enc1_7::
+DB 102,15,56,220,209
+ dec edx
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_enc1_7
+DB 102,15,56,221,209
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ xorps xmm2,xmm3
+ pxor xmm3,xmm3
+ movups XMMWORD PTR[rsi],xmm2
+ xorps xmm2,xmm2
+ jmp $L$ctr32_epilogue
+
+ALIGN 16
+$L$ctr32_bulk::
+ lea r11,QWORD PTR[rsp]
+
+ push rbp
+
+ sub rsp,288
+ and rsp,-16
+ movaps XMMWORD PTR[(-168)+r11],xmm6
+ movaps XMMWORD PTR[(-152)+r11],xmm7
+ movaps XMMWORD PTR[(-136)+r11],xmm8
+ movaps XMMWORD PTR[(-120)+r11],xmm9
+ movaps XMMWORD PTR[(-104)+r11],xmm10
+ movaps XMMWORD PTR[(-88)+r11],xmm11
+ movaps XMMWORD PTR[(-72)+r11],xmm12
+ movaps XMMWORD PTR[(-56)+r11],xmm13
+ movaps XMMWORD PTR[(-40)+r11],xmm14
+ movaps XMMWORD PTR[(-24)+r11],xmm15
+$L$ctr32_body::
+
+
+
+
+ movdqu xmm2,XMMWORD PTR[r8]
+ movdqu xmm0,XMMWORD PTR[rcx]
+ mov r8d,DWORD PTR[12+r8]
+ pxor xmm2,xmm0
+ mov ebp,DWORD PTR[12+rcx]
+ movdqa XMMWORD PTR[rsp],xmm2
+ bswap r8d
+ movdqa xmm3,xmm2
+ movdqa xmm4,xmm2
+ movdqa xmm5,xmm2
+ movdqa XMMWORD PTR[64+rsp],xmm2
+ movdqa XMMWORD PTR[80+rsp],xmm2
+ movdqa XMMWORD PTR[96+rsp],xmm2
+ mov r10,rdx
+ movdqa XMMWORD PTR[112+rsp],xmm2
+
+ lea rax,QWORD PTR[1+r8]
+ lea rdx,QWORD PTR[2+r8]
+ bswap eax
+ bswap edx
+ xor eax,ebp
+ xor edx,ebp
+DB 102,15,58,34,216,3
+ lea rax,QWORD PTR[3+r8]
+ movdqa XMMWORD PTR[16+rsp],xmm3
+DB 102,15,58,34,226,3
+ bswap eax
+ mov rdx,r10
+ lea r10,QWORD PTR[4+r8]
+ movdqa XMMWORD PTR[32+rsp],xmm4
+ xor eax,ebp
+ bswap r10d
+DB 102,15,58,34,232,3
+ xor r10d,ebp
+ movdqa XMMWORD PTR[48+rsp],xmm5
+ lea r9,QWORD PTR[5+r8]
+ mov DWORD PTR[((64+12))+rsp],r10d
+ bswap r9d
+ lea r10,QWORD PTR[6+r8]
+ mov eax,DWORD PTR[240+rcx]
+ xor r9d,ebp
+ bswap r10d
+ mov DWORD PTR[((80+12))+rsp],r9d
+ xor r10d,ebp
+ lea r9,QWORD PTR[7+r8]
+ mov DWORD PTR[((96+12))+rsp],r10d
+ bswap r9d
+ mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
+ xor r9d,ebp
+ and r10d,71303168
+ mov DWORD PTR[((112+12))+rsp],r9d
+
+ movups xmm1,XMMWORD PTR[16+rcx]
+
+ movdqa xmm6,XMMWORD PTR[64+rsp]
+ movdqa xmm7,XMMWORD PTR[80+rsp]
+
+ cmp rdx,8
+ jb $L$ctr32_tail
+
+ sub rdx,6
+ cmp r10d,4194304
+ je $L$ctr32_6x
+
+ lea rcx,QWORD PTR[128+rcx]
+ sub rdx,2
+ jmp $L$ctr32_loop8
+
+ALIGN 16
+$L$ctr32_6x::
+ shl eax,4
+ mov r10d,48
+ bswap ebp
+ lea rcx,QWORD PTR[32+rax*1+rcx]
+ sub r10,rax
+ jmp $L$ctr32_loop6
+
+ALIGN 16
+$L$ctr32_loop6::
+ add r8d,6
+ movups xmm0,XMMWORD PTR[((-48))+r10*1+rcx]
+DB 102,15,56,220,209
+ mov eax,r8d
+ xor eax,ebp
+DB 102,15,56,220,217
+DB 00fh,038h,0f1h,044h,024h,12
+ lea eax,DWORD PTR[1+r8]
+DB 102,15,56,220,225
+ xor eax,ebp
+DB 00fh,038h,0f1h,044h,024h,28
+DB 102,15,56,220,233
+ lea eax,DWORD PTR[2+r8]
+ xor eax,ebp
+DB 102,15,56,220,241
+DB 00fh,038h,0f1h,044h,024h,44
+ lea eax,DWORD PTR[3+r8]
+DB 102,15,56,220,249
+ movups xmm1,XMMWORD PTR[((-32))+r10*1+rcx]
+ xor eax,ebp
+
+DB 102,15,56,220,208
+DB 00fh,038h,0f1h,044h,024h,60
+ lea eax,DWORD PTR[4+r8]
+DB 102,15,56,220,216
+ xor eax,ebp
+DB 00fh,038h,0f1h,044h,024h,76
+DB 102,15,56,220,224
+ lea eax,DWORD PTR[5+r8]
+ xor eax,ebp
+DB 102,15,56,220,232
+DB 00fh,038h,0f1h,044h,024h,92
+ mov rax,r10
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+ movups xmm0,XMMWORD PTR[((-16))+r10*1+rcx]
+
+ call $L$enc_loop6
+
+ movdqu xmm8,XMMWORD PTR[rdi]
+ movdqu xmm9,XMMWORD PTR[16+rdi]
+ movdqu xmm10,XMMWORD PTR[32+rdi]
+ movdqu xmm11,XMMWORD PTR[48+rdi]
+ movdqu xmm12,XMMWORD PTR[64+rdi]
+ movdqu xmm13,XMMWORD PTR[80+rdi]
+ lea rdi,QWORD PTR[96+rdi]
+ movups xmm1,XMMWORD PTR[((-64))+r10*1+rcx]
+ pxor xmm8,xmm2
+ movaps xmm2,XMMWORD PTR[rsp]
+ pxor xmm9,xmm3
+ movaps xmm3,XMMWORD PTR[16+rsp]
+ pxor xmm10,xmm4
+ movaps xmm4,XMMWORD PTR[32+rsp]
+ pxor xmm11,xmm5
+ movaps xmm5,XMMWORD PTR[48+rsp]
+ pxor xmm12,xmm6
+ movaps xmm6,XMMWORD PTR[64+rsp]
+ pxor xmm13,xmm7
+ movaps xmm7,XMMWORD PTR[80+rsp]
+ movdqu XMMWORD PTR[rsi],xmm8
+ movdqu XMMWORD PTR[16+rsi],xmm9
+ movdqu XMMWORD PTR[32+rsi],xmm10
+ movdqu XMMWORD PTR[48+rsi],xmm11
+ movdqu XMMWORD PTR[64+rsi],xmm12
+ movdqu XMMWORD PTR[80+rsi],xmm13
+ lea rsi,QWORD PTR[96+rsi]
+
+ sub rdx,6
+ jnc $L$ctr32_loop6
+
+ add rdx,6
+ jz $L$ctr32_done
+
+ lea eax,DWORD PTR[((-48))+r10]
+ lea rcx,QWORD PTR[((-80))+r10*1+rcx]
+ neg eax
+ shr eax,4
+ jmp $L$ctr32_tail
+
+ALIGN 32
+$L$ctr32_loop8::
+ add r8d,8
+ movdqa xmm8,XMMWORD PTR[96+rsp]
+DB 102,15,56,220,209
+ mov r9d,r8d
+ movdqa xmm9,XMMWORD PTR[112+rsp]
+DB 102,15,56,220,217
+ bswap r9d
+ movups xmm0,XMMWORD PTR[((32-128))+rcx]
+DB 102,15,56,220,225
+ xor r9d,ebp
+ nop
+DB 102,15,56,220,233
+ mov DWORD PTR[((0+12))+rsp],r9d
+ lea r9,QWORD PTR[1+r8]
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,68,15,56,220,193
+DB 102,68,15,56,220,201
+ movups xmm1,XMMWORD PTR[((48-128))+rcx]
+ bswap r9d
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+ xor r9d,ebp
+DB 066h,090h
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ mov DWORD PTR[((16+12))+rsp],r9d
+ lea r9,QWORD PTR[2+r8]
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+DB 102,68,15,56,220,192
+DB 102,68,15,56,220,200
+ movups xmm0,XMMWORD PTR[((64-128))+rcx]
+ bswap r9d
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ xor r9d,ebp
+DB 066h,090h
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ mov DWORD PTR[((32+12))+rsp],r9d
+ lea r9,QWORD PTR[3+r8]
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,68,15,56,220,193
+DB 102,68,15,56,220,201
+ movups xmm1,XMMWORD PTR[((80-128))+rcx]
+ bswap r9d
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+ xor r9d,ebp
+DB 066h,090h
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ mov DWORD PTR[((48+12))+rsp],r9d
+ lea r9,QWORD PTR[4+r8]
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+DB 102,68,15,56,220,192
+DB 102,68,15,56,220,200
+ movups xmm0,XMMWORD PTR[((96-128))+rcx]
+ bswap r9d
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ xor r9d,ebp
+DB 066h,090h
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ mov DWORD PTR[((64+12))+rsp],r9d
+ lea r9,QWORD PTR[5+r8]
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,68,15,56,220,193
+DB 102,68,15,56,220,201
+ movups xmm1,XMMWORD PTR[((112-128))+rcx]
+ bswap r9d
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+ xor r9d,ebp
+DB 066h,090h
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ mov DWORD PTR[((80+12))+rsp],r9d
+ lea r9,QWORD PTR[6+r8]
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+DB 102,68,15,56,220,192
+DB 102,68,15,56,220,200
+ movups xmm0,XMMWORD PTR[((128-128))+rcx]
+ bswap r9d
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ xor r9d,ebp
+DB 066h,090h
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ mov DWORD PTR[((96+12))+rsp],r9d
+ lea r9,QWORD PTR[7+r8]
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,68,15,56,220,193
+DB 102,68,15,56,220,201
+ movups xmm1,XMMWORD PTR[((144-128))+rcx]
+ bswap r9d
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+ xor r9d,ebp
+ movdqu xmm10,XMMWORD PTR[rdi]
+DB 102,15,56,220,232
+ mov DWORD PTR[((112+12))+rsp],r9d
+ cmp eax,11
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+DB 102,68,15,56,220,192
+DB 102,68,15,56,220,200
+ movups xmm0,XMMWORD PTR[((160-128))+rcx]
+
+ jb $L$ctr32_enc_done
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,68,15,56,220,193
+DB 102,68,15,56,220,201
+ movups xmm1,XMMWORD PTR[((176-128))+rcx]
+
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+DB 102,68,15,56,220,192
+DB 102,68,15,56,220,200
+ movups xmm0,XMMWORD PTR[((192-128))+rcx]
+ je $L$ctr32_enc_done
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,68,15,56,220,193
+DB 102,68,15,56,220,201
+ movups xmm1,XMMWORD PTR[((208-128))+rcx]
+
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+DB 102,68,15,56,220,192
+DB 102,68,15,56,220,200
+ movups xmm0,XMMWORD PTR[((224-128))+rcx]
+ jmp $L$ctr32_enc_done
+
+ALIGN 16
+$L$ctr32_enc_done::
+ movdqu xmm11,XMMWORD PTR[16+rdi]
+ pxor xmm10,xmm0
+ movdqu xmm12,XMMWORD PTR[32+rdi]
+ pxor xmm11,xmm0
+ movdqu xmm13,XMMWORD PTR[48+rdi]
+ pxor xmm12,xmm0
+ movdqu xmm14,XMMWORD PTR[64+rdi]
+ pxor xmm13,xmm0
+ movdqu xmm15,XMMWORD PTR[80+rdi]
+ pxor xmm14,xmm0
+ pxor xmm15,xmm0
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+DB 102,68,15,56,220,193
+DB 102,68,15,56,220,201
+ movdqu xmm1,XMMWORD PTR[96+rdi]
+ lea rdi,QWORD PTR[128+rdi]
+
+DB 102,65,15,56,221,210
+ pxor xmm1,xmm0
+ movdqu xmm10,XMMWORD PTR[((112-128))+rdi]
+DB 102,65,15,56,221,219
+ pxor xmm10,xmm0
+ movdqa xmm11,XMMWORD PTR[rsp]
+DB 102,65,15,56,221,228
+DB 102,65,15,56,221,237
+ movdqa xmm12,XMMWORD PTR[16+rsp]
+ movdqa xmm13,XMMWORD PTR[32+rsp]
+DB 102,65,15,56,221,246
+DB 102,65,15,56,221,255
+ movdqa xmm14,XMMWORD PTR[48+rsp]
+ movdqa xmm15,XMMWORD PTR[64+rsp]
+DB 102,68,15,56,221,193
+ movdqa xmm0,XMMWORD PTR[80+rsp]
+ movups xmm1,XMMWORD PTR[((16-128))+rcx]
+DB 102,69,15,56,221,202
+
+ movups XMMWORD PTR[rsi],xmm2
+ movdqa xmm2,xmm11
+ movups XMMWORD PTR[16+rsi],xmm3
+ movdqa xmm3,xmm12
+ movups XMMWORD PTR[32+rsi],xmm4
+ movdqa xmm4,xmm13
+ movups XMMWORD PTR[48+rsi],xmm5
+ movdqa xmm5,xmm14
+ movups XMMWORD PTR[64+rsi],xmm6
+ movdqa xmm6,xmm15
+ movups XMMWORD PTR[80+rsi],xmm7
+ movdqa xmm7,xmm0
+ movups XMMWORD PTR[96+rsi],xmm8
+ movups XMMWORD PTR[112+rsi],xmm9
+ lea rsi,QWORD PTR[128+rsi]
+
+ sub rdx,8
+ jnc $L$ctr32_loop8
+
+ add rdx,8
+ jz $L$ctr32_done
+ lea rcx,QWORD PTR[((-128))+rcx]
+
+$L$ctr32_tail::
+
+
+ lea rcx,QWORD PTR[16+rcx]
+ cmp rdx,4
+ jb $L$ctr32_loop3
+ je $L$ctr32_loop4
+
+
+ shl eax,4
+ movdqa xmm8,XMMWORD PTR[96+rsp]
+ pxor xmm9,xmm9
+
+ movups xmm0,XMMWORD PTR[16+rcx]
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+ lea rcx,QWORD PTR[((32-16))+rax*1+rcx]
+ neg rax
+DB 102,15,56,220,225
+ add rax,16
+ movups xmm10,XMMWORD PTR[rdi]
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+ movups xmm11,XMMWORD PTR[16+rdi]
+ movups xmm12,XMMWORD PTR[32+rdi]
+DB 102,15,56,220,249
+DB 102,68,15,56,220,193
+
+ call $L$enc_loop8_enter
+
+ movdqu xmm13,XMMWORD PTR[48+rdi]
+ pxor xmm2,xmm10
+ movdqu xmm10,XMMWORD PTR[64+rdi]
+ pxor xmm3,xmm11
+ movdqu XMMWORD PTR[rsi],xmm2
+ pxor xmm4,xmm12
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ pxor xmm5,xmm13
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ pxor xmm6,xmm10
+ movdqu XMMWORD PTR[48+rsi],xmm5
+ movdqu XMMWORD PTR[64+rsi],xmm6
+ cmp rdx,6
+ jb $L$ctr32_done
+
+ movups xmm11,XMMWORD PTR[80+rdi]
+ xorps xmm7,xmm11
+ movups XMMWORD PTR[80+rsi],xmm7
+ je $L$ctr32_done
+
+ movups xmm12,XMMWORD PTR[96+rdi]
+ xorps xmm8,xmm12
+ movups XMMWORD PTR[96+rsi],xmm8
+ jmp $L$ctr32_done
+
+ALIGN 32
+$L$ctr32_loop4::
+DB 102,15,56,220,209
+ lea rcx,QWORD PTR[16+rcx]
+ dec eax
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[rcx]
+ jnz $L$ctr32_loop4
+DB 102,15,56,221,209
+DB 102,15,56,221,217
+ movups xmm10,XMMWORD PTR[rdi]
+ movups xmm11,XMMWORD PTR[16+rdi]
+DB 102,15,56,221,225
+DB 102,15,56,221,233
+ movups xmm12,XMMWORD PTR[32+rdi]
+ movups xmm13,XMMWORD PTR[48+rdi]
+
+ xorps xmm2,xmm10
+ movups XMMWORD PTR[rsi],xmm2
+ xorps xmm3,xmm11
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm4,xmm12
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ pxor xmm5,xmm13
+ movdqu XMMWORD PTR[48+rsi],xmm5
+ jmp $L$ctr32_done
+
+ALIGN 32
+$L$ctr32_loop3::
+DB 102,15,56,220,209
+ lea rcx,QWORD PTR[16+rcx]
+ dec eax
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+ movups xmm1,XMMWORD PTR[rcx]
+ jnz $L$ctr32_loop3
+DB 102,15,56,221,209
+DB 102,15,56,221,217
+DB 102,15,56,221,225
+
+ movups xmm10,XMMWORD PTR[rdi]
+ xorps xmm2,xmm10
+ movups XMMWORD PTR[rsi],xmm2
+ cmp rdx,2
+ jb $L$ctr32_done
+
+ movups xmm11,XMMWORD PTR[16+rdi]
+ xorps xmm3,xmm11
+ movups XMMWORD PTR[16+rsi],xmm3
+ je $L$ctr32_done
+
+ movups xmm12,XMMWORD PTR[32+rdi]
+ xorps xmm4,xmm12
+ movups XMMWORD PTR[32+rsi],xmm4
+
+$L$ctr32_done::
+ xorps xmm0,xmm0
+ xor ebp,ebp
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ movaps xmm6,XMMWORD PTR[((-168))+r11]
+ movaps XMMWORD PTR[(-168)+r11],xmm0
+ movaps xmm7,XMMWORD PTR[((-152))+r11]
+ movaps XMMWORD PTR[(-152)+r11],xmm0
+ movaps xmm8,XMMWORD PTR[((-136))+r11]
+ movaps XMMWORD PTR[(-136)+r11],xmm0
+ movaps xmm9,XMMWORD PTR[((-120))+r11]
+ movaps XMMWORD PTR[(-120)+r11],xmm0
+ movaps xmm10,XMMWORD PTR[((-104))+r11]
+ movaps XMMWORD PTR[(-104)+r11],xmm0
+ movaps xmm11,XMMWORD PTR[((-88))+r11]
+ movaps XMMWORD PTR[(-88)+r11],xmm0
+ movaps xmm12,XMMWORD PTR[((-72))+r11]
+ movaps XMMWORD PTR[(-72)+r11],xmm0
+ movaps xmm13,XMMWORD PTR[((-56))+r11]
+ movaps XMMWORD PTR[(-56)+r11],xmm0
+ movaps xmm14,XMMWORD PTR[((-40))+r11]
+ movaps XMMWORD PTR[(-40)+r11],xmm0
+ movaps xmm15,XMMWORD PTR[((-24))+r11]
+ movaps XMMWORD PTR[(-24)+r11],xmm0
+ movaps XMMWORD PTR[rsp],xmm0
+ movaps XMMWORD PTR[16+rsp],xmm0
+ movaps XMMWORD PTR[32+rsp],xmm0
+ movaps XMMWORD PTR[48+rsp],xmm0
+ movaps XMMWORD PTR[64+rsp],xmm0
+ movaps XMMWORD PTR[80+rsp],xmm0
+ movaps XMMWORD PTR[96+rsp],xmm0
+ movaps XMMWORD PTR[112+rsp],xmm0
+ mov rbp,QWORD PTR[((-8))+r11]
+
+ lea rsp,QWORD PTR[r11]
+
+$L$ctr32_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_ctr32_encrypt_blocks::
+aesni_ctr32_encrypt_blocks ENDP
+PUBLIC aesni_xts_encrypt
+
+ALIGN 16
+aesni_xts_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_xts_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ lea r11,QWORD PTR[rsp]
+
+ push rbp
+
+ sub rsp,272
+ and rsp,-16
+ movaps XMMWORD PTR[(-168)+r11],xmm6
+ movaps XMMWORD PTR[(-152)+r11],xmm7
+ movaps XMMWORD PTR[(-136)+r11],xmm8
+ movaps XMMWORD PTR[(-120)+r11],xmm9
+ movaps XMMWORD PTR[(-104)+r11],xmm10
+ movaps XMMWORD PTR[(-88)+r11],xmm11
+ movaps XMMWORD PTR[(-72)+r11],xmm12
+ movaps XMMWORD PTR[(-56)+r11],xmm13
+ movaps XMMWORD PTR[(-40)+r11],xmm14
+ movaps XMMWORD PTR[(-24)+r11],xmm15
+$L$xts_enc_body::
+ movups xmm2,XMMWORD PTR[r9]
+ mov eax,DWORD PTR[240+r8]
+ mov r10d,DWORD PTR[240+rcx]
+ movups xmm0,XMMWORD PTR[r8]
+ movups xmm1,XMMWORD PTR[16+r8]
+ lea r8,QWORD PTR[32+r8]
+ xorps xmm2,xmm0
+$L$oop_enc1_8::
+DB 102,15,56,220,209
+ dec eax
+ movups xmm1,XMMWORD PTR[r8]
+ lea r8,QWORD PTR[16+r8]
+ jnz $L$oop_enc1_8
+DB 102,15,56,221,209
+ movups xmm0,XMMWORD PTR[rcx]
+ mov rbp,rcx
+ mov eax,r10d
+ shl r10d,4
+ mov r9,rdx
+ and rdx,-16
+
+ movups xmm1,XMMWORD PTR[16+r10*1+rcx]
+
+ movdqa xmm8,XMMWORD PTR[$L$xts_magic]
+ movdqa xmm15,xmm2
+ pshufd xmm9,xmm2,05fh
+ pxor xmm1,xmm0
+ movdqa xmm14,xmm9
+ paddd xmm9,xmm9
+ movdqa xmm10,xmm15
+ psrad xmm14,31
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+ pxor xmm10,xmm0
+ pxor xmm15,xmm14
+ movdqa xmm14,xmm9
+ paddd xmm9,xmm9
+ movdqa xmm11,xmm15
+ psrad xmm14,31
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+ pxor xmm11,xmm0
+ pxor xmm15,xmm14
+ movdqa xmm14,xmm9
+ paddd xmm9,xmm9
+ movdqa xmm12,xmm15
+ psrad xmm14,31
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+ pxor xmm12,xmm0
+ pxor xmm15,xmm14
+ movdqa xmm14,xmm9
+ paddd xmm9,xmm9
+ movdqa xmm13,xmm15
+ psrad xmm14,31
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+ pxor xmm13,xmm0
+ pxor xmm15,xmm14
+ movdqa xmm14,xmm15
+ psrad xmm9,31
+ paddq xmm15,xmm15
+ pand xmm9,xmm8
+ pxor xmm14,xmm0
+ pxor xmm15,xmm9
+ movaps XMMWORD PTR[96+rsp],xmm1
+
+ sub rdx,16*6
+ jc $L$xts_enc_short
+
+ mov eax,16+96
+ lea rcx,QWORD PTR[32+r10*1+rbp]
+ sub rax,r10
+ movups xmm1,XMMWORD PTR[16+rbp]
+ mov r10,rax
+ lea r8,QWORD PTR[$L$xts_magic]
+ jmp $L$xts_enc_grandloop
+
+ALIGN 32
+$L$xts_enc_grandloop::
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqa xmm8,xmm0
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ pxor xmm2,xmm10
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ pxor xmm3,xmm11
+DB 102,15,56,220,209
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ pxor xmm4,xmm12
+DB 102,15,56,220,217
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ pxor xmm5,xmm13
+DB 102,15,56,220,225
+ movdqu xmm7,XMMWORD PTR[80+rdi]
+ pxor xmm8,xmm15
+ movdqa xmm9,XMMWORD PTR[96+rsp]
+ pxor xmm6,xmm14
+DB 102,15,56,220,233
+ movups xmm0,XMMWORD PTR[32+rbp]
+ lea rdi,QWORD PTR[96+rdi]
+ pxor xmm7,xmm8
+
+ pxor xmm10,xmm9
+DB 102,15,56,220,241
+ pxor xmm11,xmm9
+ movdqa XMMWORD PTR[rsp],xmm10
+DB 102,15,56,220,249
+ movups xmm1,XMMWORD PTR[48+rbp]
+ pxor xmm12,xmm9
+
+DB 102,15,56,220,208
+ pxor xmm13,xmm9
+ movdqa XMMWORD PTR[16+rsp],xmm11
+DB 102,15,56,220,216
+ pxor xmm14,xmm9
+ movdqa XMMWORD PTR[32+rsp],xmm12
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ pxor xmm8,xmm9
+ movdqa XMMWORD PTR[64+rsp],xmm14
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+ movups xmm0,XMMWORD PTR[64+rbp]
+ movdqa XMMWORD PTR[80+rsp],xmm8
+ pshufd xmm9,xmm15,05fh
+ jmp $L$xts_enc_loop6
+ALIGN 32
+$L$xts_enc_loop6::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+ movups xmm1,XMMWORD PTR[((-64))+rax*1+rcx]
+ add rax,32
+
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+ movups xmm0,XMMWORD PTR[((-80))+rax*1+rcx]
+ jnz $L$xts_enc_loop6
+
+ movdqa xmm8,XMMWORD PTR[r8]
+ movdqa xmm14,xmm9
+ paddd xmm9,xmm9
+DB 102,15,56,220,209
+ paddq xmm15,xmm15
+ psrad xmm14,31
+DB 102,15,56,220,217
+ pand xmm14,xmm8
+ movups xmm10,XMMWORD PTR[rbp]
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+ pxor xmm15,xmm14
+ movaps xmm11,xmm10
+DB 102,15,56,220,249
+ movups xmm1,XMMWORD PTR[((-64))+rcx]
+
+ movdqa xmm14,xmm9
+DB 102,15,56,220,208
+ paddd xmm9,xmm9
+ pxor xmm10,xmm15
+DB 102,15,56,220,216
+ psrad xmm14,31
+ paddq xmm15,xmm15
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ pand xmm14,xmm8
+ movaps xmm12,xmm11
+DB 102,15,56,220,240
+ pxor xmm15,xmm14
+ movdqa xmm14,xmm9
+DB 102,15,56,220,248
+ movups xmm0,XMMWORD PTR[((-48))+rcx]
+
+ paddd xmm9,xmm9
+DB 102,15,56,220,209
+ pxor xmm11,xmm15
+ psrad xmm14,31
+DB 102,15,56,220,217
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movdqa XMMWORD PTR[48+rsp],xmm13
+ pxor xmm15,xmm14
+DB 102,15,56,220,241
+ movaps xmm13,xmm12
+ movdqa xmm14,xmm9
+DB 102,15,56,220,249
+ movups xmm1,XMMWORD PTR[((-32))+rcx]
+
+ paddd xmm9,xmm9
+DB 102,15,56,220,208
+ pxor xmm12,xmm15
+ psrad xmm14,31
+DB 102,15,56,220,216
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+DB 102,15,56,220,240
+ pxor xmm15,xmm14
+ movaps xmm14,xmm13
+DB 102,15,56,220,248
+
+ movdqa xmm0,xmm9
+ paddd xmm9,xmm9
+DB 102,15,56,220,209
+ pxor xmm13,xmm15
+ psrad xmm0,31
+DB 102,15,56,220,217
+ paddq xmm15,xmm15
+ pand xmm0,xmm8
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ pxor xmm15,xmm0
+ movups xmm0,XMMWORD PTR[rbp]
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+ movups xmm1,XMMWORD PTR[16+rbp]
+
+ pxor xmm14,xmm15
+DB 102,15,56,221,84,36,0
+ psrad xmm9,31
+ paddq xmm15,xmm15
+DB 102,15,56,221,92,36,16
+DB 102,15,56,221,100,36,32
+ pand xmm9,xmm8
+ mov rax,r10
+DB 102,15,56,221,108,36,48
+DB 102,15,56,221,116,36,64
+DB 102,15,56,221,124,36,80
+ pxor xmm15,xmm9
+
+ lea rsi,QWORD PTR[96+rsi]
+ movups XMMWORD PTR[(-96)+rsi],xmm2
+ movups XMMWORD PTR[(-80)+rsi],xmm3
+ movups XMMWORD PTR[(-64)+rsi],xmm4
+ movups XMMWORD PTR[(-48)+rsi],xmm5
+ movups XMMWORD PTR[(-32)+rsi],xmm6
+ movups XMMWORD PTR[(-16)+rsi],xmm7
+ sub rdx,16*6
+ jnc $L$xts_enc_grandloop
+
+ mov eax,16+96
+ sub eax,r10d
+ mov rcx,rbp
+ shr eax,4
+
+$L$xts_enc_short::
+
+ mov r10d,eax
+ pxor xmm10,xmm0
+ add rdx,16*6
+ jz $L$xts_enc_done
+
+ pxor xmm11,xmm0
+ cmp rdx,020h
+ jb $L$xts_enc_one
+ pxor xmm12,xmm0
+ je $L$xts_enc_two
+
+ pxor xmm13,xmm0
+ cmp rdx,040h
+ jb $L$xts_enc_three
+ pxor xmm14,xmm0
+ je $L$xts_enc_four
+
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ pxor xmm2,xmm10
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ pxor xmm3,xmm11
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ lea rdi,QWORD PTR[80+rdi]
+ pxor xmm4,xmm12
+ pxor xmm5,xmm13
+ pxor xmm6,xmm14
+ pxor xmm7,xmm7
+
+ call _aesni_encrypt6
+
+ xorps xmm2,xmm10
+ movdqa xmm10,xmm15
+ xorps xmm3,xmm11
+ xorps xmm4,xmm12
+ movdqu XMMWORD PTR[rsi],xmm2
+ xorps xmm5,xmm13
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ xorps xmm6,xmm14
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ movdqu XMMWORD PTR[48+rsi],xmm5
+ movdqu XMMWORD PTR[64+rsi],xmm6
+ lea rsi,QWORD PTR[80+rsi]
+ jmp $L$xts_enc_done
+
+ALIGN 16
+$L$xts_enc_one::
+ movups xmm2,XMMWORD PTR[rdi]
+ lea rdi,QWORD PTR[16+rdi]
+ xorps xmm2,xmm10
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_enc1_9::
+DB 102,15,56,220,209
+ dec eax
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_enc1_9
+DB 102,15,56,221,209
+ xorps xmm2,xmm10
+ movdqa xmm10,xmm11
+ movups XMMWORD PTR[rsi],xmm2
+ lea rsi,QWORD PTR[16+rsi]
+ jmp $L$xts_enc_done
+
+ALIGN 16
+$L$xts_enc_two::
+ movups xmm2,XMMWORD PTR[rdi]
+ movups xmm3,XMMWORD PTR[16+rdi]
+ lea rdi,QWORD PTR[32+rdi]
+ xorps xmm2,xmm10
+ xorps xmm3,xmm11
+
+ call _aesni_encrypt2
+
+ xorps xmm2,xmm10
+ movdqa xmm10,xmm12
+ xorps xmm3,xmm11
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ lea rsi,QWORD PTR[32+rsi]
+ jmp $L$xts_enc_done
+
+ALIGN 16
+$L$xts_enc_three::
+ movups xmm2,XMMWORD PTR[rdi]
+ movups xmm3,XMMWORD PTR[16+rdi]
+ movups xmm4,XMMWORD PTR[32+rdi]
+ lea rdi,QWORD PTR[48+rdi]
+ xorps xmm2,xmm10
+ xorps xmm3,xmm11
+ xorps xmm4,xmm12
+
+ call _aesni_encrypt3
+
+ xorps xmm2,xmm10
+ movdqa xmm10,xmm13
+ xorps xmm3,xmm11
+ xorps xmm4,xmm12
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ lea rsi,QWORD PTR[48+rsi]
+ jmp $L$xts_enc_done
+
+ALIGN 16
+$L$xts_enc_four::
+ movups xmm2,XMMWORD PTR[rdi]
+ movups xmm3,XMMWORD PTR[16+rdi]
+ movups xmm4,XMMWORD PTR[32+rdi]
+ xorps xmm2,xmm10
+ movups xmm5,XMMWORD PTR[48+rdi]
+ lea rdi,QWORD PTR[64+rdi]
+ xorps xmm3,xmm11
+ xorps xmm4,xmm12
+ xorps xmm5,xmm13
+
+ call _aesni_encrypt4
+
+ pxor xmm2,xmm10
+ movdqa xmm10,xmm14
+ pxor xmm3,xmm11
+ pxor xmm4,xmm12
+ movdqu XMMWORD PTR[rsi],xmm2
+ pxor xmm5,xmm13
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ movdqu XMMWORD PTR[48+rsi],xmm5
+ lea rsi,QWORD PTR[64+rsi]
+ jmp $L$xts_enc_done
+
+ALIGN 16
+$L$xts_enc_done::
+ and r9,15
+ jz $L$xts_enc_ret
+ mov rdx,r9
+
+$L$xts_enc_steal::
+ movzx eax,BYTE PTR[rdi]
+ movzx ecx,BYTE PTR[((-16))+rsi]
+ lea rdi,QWORD PTR[1+rdi]
+ mov BYTE PTR[((-16))+rsi],al
+ mov BYTE PTR[rsi],cl
+ lea rsi,QWORD PTR[1+rsi]
+ sub rdx,1
+ jnz $L$xts_enc_steal
+
+ sub rsi,r9
+ mov rcx,rbp
+ mov eax,r10d
+
+ movups xmm2,XMMWORD PTR[((-16))+rsi]
+ xorps xmm2,xmm10
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_enc1_10::
+DB 102,15,56,220,209
+ dec eax
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_enc1_10
+DB 102,15,56,221,209
+ xorps xmm2,xmm10
+ movups XMMWORD PTR[(-16)+rsi],xmm2
+
+$L$xts_enc_ret::
+ xorps xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ movaps xmm6,XMMWORD PTR[((-168))+r11]
+ movaps XMMWORD PTR[(-168)+r11],xmm0
+ movaps xmm7,XMMWORD PTR[((-152))+r11]
+ movaps XMMWORD PTR[(-152)+r11],xmm0
+ movaps xmm8,XMMWORD PTR[((-136))+r11]
+ movaps XMMWORD PTR[(-136)+r11],xmm0
+ movaps xmm9,XMMWORD PTR[((-120))+r11]
+ movaps XMMWORD PTR[(-120)+r11],xmm0
+ movaps xmm10,XMMWORD PTR[((-104))+r11]
+ movaps XMMWORD PTR[(-104)+r11],xmm0
+ movaps xmm11,XMMWORD PTR[((-88))+r11]
+ movaps XMMWORD PTR[(-88)+r11],xmm0
+ movaps xmm12,XMMWORD PTR[((-72))+r11]
+ movaps XMMWORD PTR[(-72)+r11],xmm0
+ movaps xmm13,XMMWORD PTR[((-56))+r11]
+ movaps XMMWORD PTR[(-56)+r11],xmm0
+ movaps xmm14,XMMWORD PTR[((-40))+r11]
+ movaps XMMWORD PTR[(-40)+r11],xmm0
+ movaps xmm15,XMMWORD PTR[((-24))+r11]
+ movaps XMMWORD PTR[(-24)+r11],xmm0
+ movaps XMMWORD PTR[rsp],xmm0
+ movaps XMMWORD PTR[16+rsp],xmm0
+ movaps XMMWORD PTR[32+rsp],xmm0
+ movaps XMMWORD PTR[48+rsp],xmm0
+ movaps XMMWORD PTR[64+rsp],xmm0
+ movaps XMMWORD PTR[80+rsp],xmm0
+ movaps XMMWORD PTR[96+rsp],xmm0
+ mov rbp,QWORD PTR[((-8))+r11]
+
+ lea rsp,QWORD PTR[r11]
+
+$L$xts_enc_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_xts_encrypt::
+aesni_xts_encrypt ENDP
+PUBLIC aesni_xts_decrypt
+
+ALIGN 16
+aesni_xts_decrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_xts_decrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ lea r11,QWORD PTR[rsp]
+
+ push rbp
+
+ sub rsp,272
+ and rsp,-16
+ movaps XMMWORD PTR[(-168)+r11],xmm6
+ movaps XMMWORD PTR[(-152)+r11],xmm7
+ movaps XMMWORD PTR[(-136)+r11],xmm8
+ movaps XMMWORD PTR[(-120)+r11],xmm9
+ movaps XMMWORD PTR[(-104)+r11],xmm10
+ movaps XMMWORD PTR[(-88)+r11],xmm11
+ movaps XMMWORD PTR[(-72)+r11],xmm12
+ movaps XMMWORD PTR[(-56)+r11],xmm13
+ movaps XMMWORD PTR[(-40)+r11],xmm14
+ movaps XMMWORD PTR[(-24)+r11],xmm15
+$L$xts_dec_body::
+ movups xmm2,XMMWORD PTR[r9]
+ mov eax,DWORD PTR[240+r8]
+ mov r10d,DWORD PTR[240+rcx]
+ movups xmm0,XMMWORD PTR[r8]
+ movups xmm1,XMMWORD PTR[16+r8]
+ lea r8,QWORD PTR[32+r8]
+ xorps xmm2,xmm0
+$L$oop_enc1_11::
+DB 102,15,56,220,209
+ dec eax
+ movups xmm1,XMMWORD PTR[r8]
+ lea r8,QWORD PTR[16+r8]
+ jnz $L$oop_enc1_11
+DB 102,15,56,221,209
+ xor eax,eax
+ test rdx,15
+ setnz al
+ shl rax,4
+ sub rdx,rax
+
+ movups xmm0,XMMWORD PTR[rcx]
+ mov rbp,rcx
+ mov eax,r10d
+ shl r10d,4
+ mov r9,rdx
+ and rdx,-16
+
+ movups xmm1,XMMWORD PTR[16+r10*1+rcx]
+
+ movdqa xmm8,XMMWORD PTR[$L$xts_magic]
+ movdqa xmm15,xmm2
+ pshufd xmm9,xmm2,05fh
+ pxor xmm1,xmm0
+ movdqa xmm14,xmm9
+ paddd xmm9,xmm9
+ movdqa xmm10,xmm15
+ psrad xmm14,31
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+ pxor xmm10,xmm0
+ pxor xmm15,xmm14
+ movdqa xmm14,xmm9
+ paddd xmm9,xmm9
+ movdqa xmm11,xmm15
+ psrad xmm14,31
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+ pxor xmm11,xmm0
+ pxor xmm15,xmm14
+ movdqa xmm14,xmm9
+ paddd xmm9,xmm9
+ movdqa xmm12,xmm15
+ psrad xmm14,31
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+ pxor xmm12,xmm0
+ pxor xmm15,xmm14
+ movdqa xmm14,xmm9
+ paddd xmm9,xmm9
+ movdqa xmm13,xmm15
+ psrad xmm14,31
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+ pxor xmm13,xmm0
+ pxor xmm15,xmm14
+ movdqa xmm14,xmm15
+ psrad xmm9,31
+ paddq xmm15,xmm15
+ pand xmm9,xmm8
+ pxor xmm14,xmm0
+ pxor xmm15,xmm9
+ movaps XMMWORD PTR[96+rsp],xmm1
+
+ sub rdx,16*6
+ jc $L$xts_dec_short
+
+ mov eax,16+96
+ lea rcx,QWORD PTR[32+r10*1+rbp]
+ sub rax,r10
+ movups xmm1,XMMWORD PTR[16+rbp]
+ mov r10,rax
+ lea r8,QWORD PTR[$L$xts_magic]
+ jmp $L$xts_dec_grandloop
+
+ALIGN 32
+$L$xts_dec_grandloop::
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqa xmm8,xmm0
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ pxor xmm2,xmm10
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ pxor xmm3,xmm11
+DB 102,15,56,222,209
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ pxor xmm4,xmm12
+DB 102,15,56,222,217
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ pxor xmm5,xmm13
+DB 102,15,56,222,225
+ movdqu xmm7,XMMWORD PTR[80+rdi]
+ pxor xmm8,xmm15
+ movdqa xmm9,XMMWORD PTR[96+rsp]
+ pxor xmm6,xmm14
+DB 102,15,56,222,233
+ movups xmm0,XMMWORD PTR[32+rbp]
+ lea rdi,QWORD PTR[96+rdi]
+ pxor xmm7,xmm8
+
+ pxor xmm10,xmm9
+DB 102,15,56,222,241
+ pxor xmm11,xmm9
+ movdqa XMMWORD PTR[rsp],xmm10
+DB 102,15,56,222,249
+ movups xmm1,XMMWORD PTR[48+rbp]
+ pxor xmm12,xmm9
+
+DB 102,15,56,222,208
+ pxor xmm13,xmm9
+ movdqa XMMWORD PTR[16+rsp],xmm11
+DB 102,15,56,222,216
+ pxor xmm14,xmm9
+ movdqa XMMWORD PTR[32+rsp],xmm12
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+ pxor xmm8,xmm9
+ movdqa XMMWORD PTR[64+rsp],xmm14
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+ movups xmm0,XMMWORD PTR[64+rbp]
+ movdqa XMMWORD PTR[80+rsp],xmm8
+ pshufd xmm9,xmm15,05fh
+ jmp $L$xts_dec_loop6
+ALIGN 32
+$L$xts_dec_loop6::
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+ movups xmm1,XMMWORD PTR[((-64))+rax*1+rcx]
+ add rax,32
+
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+ movups xmm0,XMMWORD PTR[((-80))+rax*1+rcx]
+ jnz $L$xts_dec_loop6
+
+ movdqa xmm8,XMMWORD PTR[r8]
+ movdqa xmm14,xmm9
+ paddd xmm9,xmm9
+DB 102,15,56,222,209
+ paddq xmm15,xmm15
+ psrad xmm14,31
+DB 102,15,56,222,217
+ pand xmm14,xmm8
+ movups xmm10,XMMWORD PTR[rbp]
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+ pxor xmm15,xmm14
+ movaps xmm11,xmm10
+DB 102,15,56,222,249
+ movups xmm1,XMMWORD PTR[((-64))+rcx]
+
+ movdqa xmm14,xmm9
+DB 102,15,56,222,208
+ paddd xmm9,xmm9
+ pxor xmm10,xmm15
+DB 102,15,56,222,216
+ psrad xmm14,31
+ paddq xmm15,xmm15
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+ pand xmm14,xmm8
+ movaps xmm12,xmm11
+DB 102,15,56,222,240
+ pxor xmm15,xmm14
+ movdqa xmm14,xmm9
+DB 102,15,56,222,248
+ movups xmm0,XMMWORD PTR[((-48))+rcx]
+
+ paddd xmm9,xmm9
+DB 102,15,56,222,209
+ pxor xmm11,xmm15
+ psrad xmm14,31
+DB 102,15,56,222,217
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ movdqa XMMWORD PTR[48+rsp],xmm13
+ pxor xmm15,xmm14
+DB 102,15,56,222,241
+ movaps xmm13,xmm12
+ movdqa xmm14,xmm9
+DB 102,15,56,222,249
+ movups xmm1,XMMWORD PTR[((-32))+rcx]
+
+ paddd xmm9,xmm9
+DB 102,15,56,222,208
+ pxor xmm12,xmm15
+ psrad xmm14,31
+DB 102,15,56,222,216
+ paddq xmm15,xmm15
+ pand xmm14,xmm8
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+ pxor xmm15,xmm14
+ movaps xmm14,xmm13
+DB 102,15,56,222,248
+
+ movdqa xmm0,xmm9
+ paddd xmm9,xmm9
+DB 102,15,56,222,209
+ pxor xmm13,xmm15
+ psrad xmm0,31
+DB 102,15,56,222,217
+ paddq xmm15,xmm15
+ pand xmm0,xmm8
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ pxor xmm15,xmm0
+ movups xmm0,XMMWORD PTR[rbp]
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+ movups xmm1,XMMWORD PTR[16+rbp]
+
+ pxor xmm14,xmm15
+DB 102,15,56,223,84,36,0
+ psrad xmm9,31
+ paddq xmm15,xmm15
+DB 102,15,56,223,92,36,16
+DB 102,15,56,223,100,36,32
+ pand xmm9,xmm8
+ mov rax,r10
+DB 102,15,56,223,108,36,48
+DB 102,15,56,223,116,36,64
+DB 102,15,56,223,124,36,80
+ pxor xmm15,xmm9
+
+ lea rsi,QWORD PTR[96+rsi]
+ movups XMMWORD PTR[(-96)+rsi],xmm2
+ movups XMMWORD PTR[(-80)+rsi],xmm3
+ movups XMMWORD PTR[(-64)+rsi],xmm4
+ movups XMMWORD PTR[(-48)+rsi],xmm5
+ movups XMMWORD PTR[(-32)+rsi],xmm6
+ movups XMMWORD PTR[(-16)+rsi],xmm7
+ sub rdx,16*6
+ jnc $L$xts_dec_grandloop
+
+ mov eax,16+96
+ sub eax,r10d
+ mov rcx,rbp
+ shr eax,4
+
+$L$xts_dec_short::
+
+ mov r10d,eax
+ pxor xmm10,xmm0
+ pxor xmm11,xmm0
+ add rdx,16*6
+ jz $L$xts_dec_done
+
+ pxor xmm12,xmm0
+ cmp rdx,020h
+ jb $L$xts_dec_one
+ pxor xmm13,xmm0
+ je $L$xts_dec_two
+
+ pxor xmm14,xmm0
+ cmp rdx,040h
+ jb $L$xts_dec_three
+ je $L$xts_dec_four
+
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ pxor xmm2,xmm10
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ pxor xmm3,xmm11
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ lea rdi,QWORD PTR[80+rdi]
+ pxor xmm4,xmm12
+ pxor xmm5,xmm13
+ pxor xmm6,xmm14
+
+ call _aesni_decrypt6
+
+ xorps xmm2,xmm10
+ xorps xmm3,xmm11
+ xorps xmm4,xmm12
+ movdqu XMMWORD PTR[rsi],xmm2
+ xorps xmm5,xmm13
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ xorps xmm6,xmm14
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ pxor xmm14,xmm14
+ movdqu XMMWORD PTR[48+rsi],xmm5
+ pcmpgtd xmm14,xmm15
+ movdqu XMMWORD PTR[64+rsi],xmm6
+ lea rsi,QWORD PTR[80+rsi]
+ pshufd xmm11,xmm14,013h
+ and r9,15
+ jz $L$xts_dec_ret
+
+ movdqa xmm10,xmm15
+ paddq xmm15,xmm15
+ pand xmm11,xmm8
+ pxor xmm11,xmm15
+ jmp $L$xts_dec_done2
+
+ALIGN 16
+$L$xts_dec_one::
+ movups xmm2,XMMWORD PTR[rdi]
+ lea rdi,QWORD PTR[16+rdi]
+ xorps xmm2,xmm10
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_dec1_12::
+DB 102,15,56,222,209
+ dec eax
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_dec1_12
+DB 102,15,56,223,209
+ xorps xmm2,xmm10
+ movdqa xmm10,xmm11
+ movups XMMWORD PTR[rsi],xmm2
+ movdqa xmm11,xmm12
+ lea rsi,QWORD PTR[16+rsi]
+ jmp $L$xts_dec_done
+
+ALIGN 16
+$L$xts_dec_two::
+ movups xmm2,XMMWORD PTR[rdi]
+ movups xmm3,XMMWORD PTR[16+rdi]
+ lea rdi,QWORD PTR[32+rdi]
+ xorps xmm2,xmm10
+ xorps xmm3,xmm11
+
+ call _aesni_decrypt2
+
+ xorps xmm2,xmm10
+ movdqa xmm10,xmm12
+ xorps xmm3,xmm11
+ movdqa xmm11,xmm13
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ lea rsi,QWORD PTR[32+rsi]
+ jmp $L$xts_dec_done
+
+ALIGN 16
+$L$xts_dec_three::
+ movups xmm2,XMMWORD PTR[rdi]
+ movups xmm3,XMMWORD PTR[16+rdi]
+ movups xmm4,XMMWORD PTR[32+rdi]
+ lea rdi,QWORD PTR[48+rdi]
+ xorps xmm2,xmm10
+ xorps xmm3,xmm11
+ xorps xmm4,xmm12
+
+ call _aesni_decrypt3
+
+ xorps xmm2,xmm10
+ movdqa xmm10,xmm13
+ xorps xmm3,xmm11
+ movdqa xmm11,xmm14
+ xorps xmm4,xmm12
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ lea rsi,QWORD PTR[48+rsi]
+ jmp $L$xts_dec_done
+
+ALIGN 16
+$L$xts_dec_four::
+ movups xmm2,XMMWORD PTR[rdi]
+ movups xmm3,XMMWORD PTR[16+rdi]
+ movups xmm4,XMMWORD PTR[32+rdi]
+ xorps xmm2,xmm10
+ movups xmm5,XMMWORD PTR[48+rdi]
+ lea rdi,QWORD PTR[64+rdi]
+ xorps xmm3,xmm11
+ xorps xmm4,xmm12
+ xorps xmm5,xmm13
+
+ call _aesni_decrypt4
+
+ pxor xmm2,xmm10
+ movdqa xmm10,xmm14
+ pxor xmm3,xmm11
+ movdqa xmm11,xmm15
+ pxor xmm4,xmm12
+ movdqu XMMWORD PTR[rsi],xmm2
+ pxor xmm5,xmm13
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ movdqu XMMWORD PTR[48+rsi],xmm5
+ lea rsi,QWORD PTR[64+rsi]
+ jmp $L$xts_dec_done
+
+ALIGN 16
+$L$xts_dec_done::
+ and r9,15
+ jz $L$xts_dec_ret
+$L$xts_dec_done2::
+ mov rdx,r9
+ mov rcx,rbp
+ mov eax,r10d
+
+ movups xmm2,XMMWORD PTR[rdi]
+ xorps xmm2,xmm11
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_dec1_13::
+DB 102,15,56,222,209
+ dec eax
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_dec1_13
+DB 102,15,56,223,209
+ xorps xmm2,xmm11
+ movups XMMWORD PTR[rsi],xmm2
+
+$L$xts_dec_steal::
+ movzx eax,BYTE PTR[16+rdi]
+ movzx ecx,BYTE PTR[rsi]
+ lea rdi,QWORD PTR[1+rdi]
+ mov BYTE PTR[rsi],al
+ mov BYTE PTR[16+rsi],cl
+ lea rsi,QWORD PTR[1+rsi]
+ sub rdx,1
+ jnz $L$xts_dec_steal
+
+ sub rsi,r9
+ mov rcx,rbp
+ mov eax,r10d
+
+ movups xmm2,XMMWORD PTR[rsi]
+ xorps xmm2,xmm10
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_dec1_14::
+DB 102,15,56,222,209
+ dec eax
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_dec1_14
+DB 102,15,56,223,209
+ xorps xmm2,xmm10
+ movups XMMWORD PTR[rsi],xmm2
+
+$L$xts_dec_ret::
+ xorps xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ movaps xmm6,XMMWORD PTR[((-168))+r11]
+ movaps XMMWORD PTR[(-168)+r11],xmm0
+ movaps xmm7,XMMWORD PTR[((-152))+r11]
+ movaps XMMWORD PTR[(-152)+r11],xmm0
+ movaps xmm8,XMMWORD PTR[((-136))+r11]
+ movaps XMMWORD PTR[(-136)+r11],xmm0
+ movaps xmm9,XMMWORD PTR[((-120))+r11]
+ movaps XMMWORD PTR[(-120)+r11],xmm0
+ movaps xmm10,XMMWORD PTR[((-104))+r11]
+ movaps XMMWORD PTR[(-104)+r11],xmm0
+ movaps xmm11,XMMWORD PTR[((-88))+r11]
+ movaps XMMWORD PTR[(-88)+r11],xmm0
+ movaps xmm12,XMMWORD PTR[((-72))+r11]
+ movaps XMMWORD PTR[(-72)+r11],xmm0
+ movaps xmm13,XMMWORD PTR[((-56))+r11]
+ movaps XMMWORD PTR[(-56)+r11],xmm0
+ movaps xmm14,XMMWORD PTR[((-40))+r11]
+ movaps XMMWORD PTR[(-40)+r11],xmm0
+ movaps xmm15,XMMWORD PTR[((-24))+r11]
+ movaps XMMWORD PTR[(-24)+r11],xmm0
+ movaps XMMWORD PTR[rsp],xmm0
+ movaps XMMWORD PTR[16+rsp],xmm0
+ movaps XMMWORD PTR[32+rsp],xmm0
+ movaps XMMWORD PTR[48+rsp],xmm0
+ movaps XMMWORD PTR[64+rsp],xmm0
+ movaps XMMWORD PTR[80+rsp],xmm0
+ movaps XMMWORD PTR[96+rsp],xmm0
+ mov rbp,QWORD PTR[((-8))+r11]
+
+ lea rsp,QWORD PTR[r11]
+
+$L$xts_dec_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_xts_decrypt::
+aesni_xts_decrypt ENDP
+PUBLIC aesni_ocb_encrypt
+
+ALIGN 32
+aesni_ocb_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_ocb_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ lea rax,QWORD PTR[rsp]
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ lea rsp,QWORD PTR[((-160))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[64+rsp],xmm10
+ movaps XMMWORD PTR[80+rsp],xmm11
+ movaps XMMWORD PTR[96+rsp],xmm12
+ movaps XMMWORD PTR[112+rsp],xmm13
+ movaps XMMWORD PTR[128+rsp],xmm14
+ movaps XMMWORD PTR[144+rsp],xmm15
+$L$ocb_enc_body::
+ mov rbx,QWORD PTR[56+rax]
+ mov rbp,QWORD PTR[((56+8))+rax]
+
+ mov r10d,DWORD PTR[240+rcx]
+ mov r11,rcx
+ shl r10d,4
+ movups xmm9,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+r10*1+rcx]
+
+ movdqu xmm15,XMMWORD PTR[r9]
+ pxor xmm9,xmm1
+ pxor xmm15,xmm1
+
+ mov eax,16+32
+ lea rcx,QWORD PTR[32+r10*1+r11]
+ movups xmm1,XMMWORD PTR[16+r11]
+ sub rax,r10
+ mov r10,rax
+
+ movdqu xmm10,XMMWORD PTR[rbx]
+ movdqu xmm8,XMMWORD PTR[rbp]
+
+ test r8,1
+ jnz $L$ocb_enc_odd
+
+ bsf r12,r8
+ add r8,1
+ shl r12,4
+ movdqu xmm7,XMMWORD PTR[r12*1+rbx]
+ movdqu xmm2,XMMWORD PTR[rdi]
+ lea rdi,QWORD PTR[16+rdi]
+
+ call __ocb_encrypt1
+
+ movdqa xmm15,xmm7
+ movups XMMWORD PTR[rsi],xmm2
+ lea rsi,QWORD PTR[16+rsi]
+ sub rdx,1
+ jz $L$ocb_enc_done
+
+$L$ocb_enc_odd::
+ lea r12,QWORD PTR[1+r8]
+ lea r13,QWORD PTR[3+r8]
+ lea r14,QWORD PTR[5+r8]
+ lea r8,QWORD PTR[6+r8]
+ bsf r12,r12
+ bsf r13,r13
+ bsf r14,r14
+ shl r12,4
+ shl r13,4
+ shl r14,4
+
+ sub rdx,6
+ jc $L$ocb_enc_short
+ jmp $L$ocb_enc_grandloop
+
+ALIGN 32
+$L$ocb_enc_grandloop::
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ movdqu xmm7,XMMWORD PTR[80+rdi]
+ lea rdi,QWORD PTR[96+rdi]
+
+ call __ocb_encrypt6
+
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ movups XMMWORD PTR[80+rsi],xmm7
+ lea rsi,QWORD PTR[96+rsi]
+ sub rdx,6
+ jnc $L$ocb_enc_grandloop
+
+$L$ocb_enc_short::
+ add rdx,6
+ jz $L$ocb_enc_done
+
+ movdqu xmm2,XMMWORD PTR[rdi]
+ cmp rdx,2
+ jb $L$ocb_enc_one
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ je $L$ocb_enc_two
+
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ cmp rdx,4
+ jb $L$ocb_enc_three
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ je $L$ocb_enc_four
+
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ pxor xmm7,xmm7
+
+ call __ocb_encrypt6
+
+ movdqa xmm15,xmm14
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+
+ jmp $L$ocb_enc_done
+
+ALIGN 16
+$L$ocb_enc_one::
+ movdqa xmm7,xmm10
+
+ call __ocb_encrypt1
+
+ movdqa xmm15,xmm7
+ movups XMMWORD PTR[rsi],xmm2
+ jmp $L$ocb_enc_done
+
+ALIGN 16
+$L$ocb_enc_two::
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+
+ call __ocb_encrypt4
+
+ movdqa xmm15,xmm11
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+
+ jmp $L$ocb_enc_done
+
+ALIGN 16
+$L$ocb_enc_three::
+ pxor xmm5,xmm5
+
+ call __ocb_encrypt4
+
+ movdqa xmm15,xmm12
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+
+ jmp $L$ocb_enc_done
+
+ALIGN 16
+$L$ocb_enc_four::
+ call __ocb_encrypt4
+
+ movdqa xmm15,xmm13
+ movups XMMWORD PTR[rsi],xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+
+$L$ocb_enc_done::
+ pxor xmm15,xmm0
+ movdqu XMMWORD PTR[rbp],xmm8
+ movdqu XMMWORD PTR[r9],xmm15
+
+ xorps xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps XMMWORD PTR[rsp],xmm0
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm0
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps XMMWORD PTR[32+rsp],xmm0
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps XMMWORD PTR[48+rsp],xmm0
+ movaps xmm10,XMMWORD PTR[64+rsp]
+ movaps XMMWORD PTR[64+rsp],xmm0
+ movaps xmm11,XMMWORD PTR[80+rsp]
+ movaps XMMWORD PTR[80+rsp],xmm0
+ movaps xmm12,XMMWORD PTR[96+rsp]
+ movaps XMMWORD PTR[96+rsp],xmm0
+ movaps xmm13,XMMWORD PTR[112+rsp]
+ movaps XMMWORD PTR[112+rsp],xmm0
+ movaps xmm14,XMMWORD PTR[128+rsp]
+ movaps XMMWORD PTR[128+rsp],xmm0
+ movaps xmm15,XMMWORD PTR[144+rsp]
+ movaps XMMWORD PTR[144+rsp],xmm0
+ lea rax,QWORD PTR[((160+40))+rsp]
+$L$ocb_enc_pop::
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$ocb_enc_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_ocb_encrypt::
+aesni_ocb_encrypt ENDP
+
+
+ALIGN 32
+__ocb_encrypt6 PROC PRIVATE
+
+ pxor xmm15,xmm9
+ movdqu xmm11,XMMWORD PTR[r12*1+rbx]
+ movdqa xmm12,xmm10
+ movdqu xmm13,XMMWORD PTR[r13*1+rbx]
+ movdqa xmm14,xmm10
+ pxor xmm10,xmm15
+ movdqu xmm15,XMMWORD PTR[r14*1+rbx]
+ pxor xmm11,xmm10
+ pxor xmm8,xmm2
+ pxor xmm2,xmm10
+ pxor xmm12,xmm11
+ pxor xmm8,xmm3
+ pxor xmm3,xmm11
+ pxor xmm13,xmm12
+ pxor xmm8,xmm4
+ pxor xmm4,xmm12
+ pxor xmm14,xmm13
+ pxor xmm8,xmm5
+ pxor xmm5,xmm13
+ pxor xmm15,xmm14
+ pxor xmm8,xmm6
+ pxor xmm6,xmm14
+ pxor xmm8,xmm7
+ pxor xmm7,xmm15
+ movups xmm0,XMMWORD PTR[32+r11]
+
+ lea r12,QWORD PTR[1+r8]
+ lea r13,QWORD PTR[3+r8]
+ lea r14,QWORD PTR[5+r8]
+ add r8,6
+ pxor xmm10,xmm9
+ bsf r12,r12
+ bsf r13,r13
+ bsf r14,r14
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ pxor xmm11,xmm9
+ pxor xmm12,xmm9
+DB 102,15,56,220,241
+ pxor xmm13,xmm9
+ pxor xmm14,xmm9
+DB 102,15,56,220,249
+ movups xmm1,XMMWORD PTR[48+r11]
+ pxor xmm15,xmm9
+
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+ movups xmm0,XMMWORD PTR[64+r11]
+ shl r12,4
+ shl r13,4
+ jmp $L$ocb_enc_loop6
+
+ALIGN 32
+$L$ocb_enc_loop6::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+DB 102,15,56,220,240
+DB 102,15,56,220,248
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$ocb_enc_loop6
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+DB 102,15,56,220,241
+DB 102,15,56,220,249
+ movups xmm1,XMMWORD PTR[16+r11]
+ shl r14,4
+
+DB 102,65,15,56,221,210
+ movdqu xmm10,XMMWORD PTR[rbx]
+ mov rax,r10
+DB 102,65,15,56,221,219
+DB 102,65,15,56,221,228
+DB 102,65,15,56,221,237
+DB 102,65,15,56,221,246
+DB 102,65,15,56,221,255
+ DB 0F3h,0C3h ;repret
+
+__ocb_encrypt6 ENDP
+
+
+ALIGN 32
+__ocb_encrypt4 PROC PRIVATE
+
+ pxor xmm15,xmm9
+ movdqu xmm11,XMMWORD PTR[r12*1+rbx]
+ movdqa xmm12,xmm10
+ movdqu xmm13,XMMWORD PTR[r13*1+rbx]
+ pxor xmm10,xmm15
+ pxor xmm11,xmm10
+ pxor xmm8,xmm2
+ pxor xmm2,xmm10
+ pxor xmm12,xmm11
+ pxor xmm8,xmm3
+ pxor xmm3,xmm11
+ pxor xmm13,xmm12
+ pxor xmm8,xmm4
+ pxor xmm4,xmm12
+ pxor xmm8,xmm5
+ pxor xmm5,xmm13
+ movups xmm0,XMMWORD PTR[32+r11]
+
+ pxor xmm10,xmm9
+ pxor xmm11,xmm9
+ pxor xmm12,xmm9
+ pxor xmm13,xmm9
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[48+r11]
+
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ movups xmm0,XMMWORD PTR[64+r11]
+ jmp $L$ocb_enc_loop4
+
+ALIGN 32
+$L$ocb_enc_loop4::
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+
+DB 102,15,56,220,208
+DB 102,15,56,220,216
+DB 102,15,56,220,224
+DB 102,15,56,220,232
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$ocb_enc_loop4
+
+DB 102,15,56,220,209
+DB 102,15,56,220,217
+DB 102,15,56,220,225
+DB 102,15,56,220,233
+ movups xmm1,XMMWORD PTR[16+r11]
+ mov rax,r10
+
+DB 102,65,15,56,221,210
+DB 102,65,15,56,221,219
+DB 102,65,15,56,221,228
+DB 102,65,15,56,221,237
+ DB 0F3h,0C3h ;repret
+
+__ocb_encrypt4 ENDP
+
+
+ALIGN 32
+__ocb_encrypt1 PROC PRIVATE
+
+ pxor xmm7,xmm15
+ pxor xmm7,xmm9
+ pxor xmm8,xmm2
+ pxor xmm2,xmm7
+ movups xmm0,XMMWORD PTR[32+r11]
+
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[48+r11]
+ pxor xmm7,xmm9
+
+DB 102,15,56,220,208
+ movups xmm0,XMMWORD PTR[64+r11]
+ jmp $L$ocb_enc_loop1
+
+ALIGN 32
+$L$ocb_enc_loop1::
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+
+DB 102,15,56,220,208
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$ocb_enc_loop1
+
+DB 102,15,56,220,209
+ movups xmm1,XMMWORD PTR[16+r11]
+ mov rax,r10
+
+DB 102,15,56,221,215
+ DB 0F3h,0C3h ;repret
+
+__ocb_encrypt1 ENDP
+
+PUBLIC aesni_ocb_decrypt
+
+ALIGN 32
+aesni_ocb_decrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_ocb_decrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ lea rax,QWORD PTR[rsp]
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ lea rsp,QWORD PTR[((-160))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[64+rsp],xmm10
+ movaps XMMWORD PTR[80+rsp],xmm11
+ movaps XMMWORD PTR[96+rsp],xmm12
+ movaps XMMWORD PTR[112+rsp],xmm13
+ movaps XMMWORD PTR[128+rsp],xmm14
+ movaps XMMWORD PTR[144+rsp],xmm15
+$L$ocb_dec_body::
+ mov rbx,QWORD PTR[56+rax]
+ mov rbp,QWORD PTR[((56+8))+rax]
+
+ mov r10d,DWORD PTR[240+rcx]
+ mov r11,rcx
+ shl r10d,4
+ movups xmm9,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+r10*1+rcx]
+
+ movdqu xmm15,XMMWORD PTR[r9]
+ pxor xmm9,xmm1
+ pxor xmm15,xmm1
+
+ mov eax,16+32
+ lea rcx,QWORD PTR[32+r10*1+r11]
+ movups xmm1,XMMWORD PTR[16+r11]
+ sub rax,r10
+ mov r10,rax
+
+ movdqu xmm10,XMMWORD PTR[rbx]
+ movdqu xmm8,XMMWORD PTR[rbp]
+
+ test r8,1
+ jnz $L$ocb_dec_odd
+
+ bsf r12,r8
+ add r8,1
+ shl r12,4
+ movdqu xmm7,XMMWORD PTR[r12*1+rbx]
+ movdqu xmm2,XMMWORD PTR[rdi]
+ lea rdi,QWORD PTR[16+rdi]
+
+ call __ocb_decrypt1
+
+ movdqa xmm15,xmm7
+ movups XMMWORD PTR[rsi],xmm2
+ xorps xmm8,xmm2
+ lea rsi,QWORD PTR[16+rsi]
+ sub rdx,1
+ jz $L$ocb_dec_done
+
+$L$ocb_dec_odd::
+ lea r12,QWORD PTR[1+r8]
+ lea r13,QWORD PTR[3+r8]
+ lea r14,QWORD PTR[5+r8]
+ lea r8,QWORD PTR[6+r8]
+ bsf r12,r12
+ bsf r13,r13
+ bsf r14,r14
+ shl r12,4
+ shl r13,4
+ shl r14,4
+
+ sub rdx,6
+ jc $L$ocb_dec_short
+ jmp $L$ocb_dec_grandloop
+
+ALIGN 32
+$L$ocb_dec_grandloop::
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ movdqu xmm7,XMMWORD PTR[80+rdi]
+ lea rdi,QWORD PTR[96+rdi]
+
+ call __ocb_decrypt6
+
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm8,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm8,xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ pxor xmm8,xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ pxor xmm8,xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ pxor xmm8,xmm6
+ movups XMMWORD PTR[80+rsi],xmm7
+ pxor xmm8,xmm7
+ lea rsi,QWORD PTR[96+rsi]
+ sub rdx,6
+ jnc $L$ocb_dec_grandloop
+
+$L$ocb_dec_short::
+ add rdx,6
+ jz $L$ocb_dec_done
+
+ movdqu xmm2,XMMWORD PTR[rdi]
+ cmp rdx,2
+ jb $L$ocb_dec_one
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ je $L$ocb_dec_two
+
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ cmp rdx,4
+ jb $L$ocb_dec_three
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ je $L$ocb_dec_four
+
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ pxor xmm7,xmm7
+
+ call __ocb_decrypt6
+
+ movdqa xmm15,xmm14
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm8,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm8,xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ pxor xmm8,xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ pxor xmm8,xmm5
+ movups XMMWORD PTR[64+rsi],xmm6
+ pxor xmm8,xmm6
+
+ jmp $L$ocb_dec_done
+
+ALIGN 16
+$L$ocb_dec_one::
+ movdqa xmm7,xmm10
+
+ call __ocb_decrypt1
+
+ movdqa xmm15,xmm7
+ movups XMMWORD PTR[rsi],xmm2
+ xorps xmm8,xmm2
+ jmp $L$ocb_dec_done
+
+ALIGN 16
+$L$ocb_dec_two::
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+
+ call __ocb_decrypt4
+
+ movdqa xmm15,xmm11
+ movups XMMWORD PTR[rsi],xmm2
+ xorps xmm8,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ xorps xmm8,xmm3
+
+ jmp $L$ocb_dec_done
+
+ALIGN 16
+$L$ocb_dec_three::
+ pxor xmm5,xmm5
+
+ call __ocb_decrypt4
+
+ movdqa xmm15,xmm12
+ movups XMMWORD PTR[rsi],xmm2
+ xorps xmm8,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ xorps xmm8,xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ xorps xmm8,xmm4
+
+ jmp $L$ocb_dec_done
+
+ALIGN 16
+$L$ocb_dec_four::
+ call __ocb_decrypt4
+
+ movdqa xmm15,xmm13
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm8,xmm2
+ movups XMMWORD PTR[16+rsi],xmm3
+ pxor xmm8,xmm3
+ movups XMMWORD PTR[32+rsi],xmm4
+ pxor xmm8,xmm4
+ movups XMMWORD PTR[48+rsi],xmm5
+ pxor xmm8,xmm5
+
+$L$ocb_dec_done::
+ pxor xmm15,xmm0
+ movdqu XMMWORD PTR[rbp],xmm8
+ movdqu XMMWORD PTR[r9],xmm15
+
+ xorps xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps XMMWORD PTR[rsp],xmm0
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm0
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps XMMWORD PTR[32+rsp],xmm0
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps XMMWORD PTR[48+rsp],xmm0
+ movaps xmm10,XMMWORD PTR[64+rsp]
+ movaps XMMWORD PTR[64+rsp],xmm0
+ movaps xmm11,XMMWORD PTR[80+rsp]
+ movaps XMMWORD PTR[80+rsp],xmm0
+ movaps xmm12,XMMWORD PTR[96+rsp]
+ movaps XMMWORD PTR[96+rsp],xmm0
+ movaps xmm13,XMMWORD PTR[112+rsp]
+ movaps XMMWORD PTR[112+rsp],xmm0
+ movaps xmm14,XMMWORD PTR[128+rsp]
+ movaps XMMWORD PTR[128+rsp],xmm0
+ movaps xmm15,XMMWORD PTR[144+rsp]
+ movaps XMMWORD PTR[144+rsp],xmm0
+ lea rax,QWORD PTR[((160+40))+rsp]
+$L$ocb_dec_pop::
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$ocb_dec_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_ocb_decrypt::
+aesni_ocb_decrypt ENDP
+
+
+ALIGN 32
+__ocb_decrypt6 PROC PRIVATE
+
+ pxor xmm15,xmm9
+ movdqu xmm11,XMMWORD PTR[r12*1+rbx]
+ movdqa xmm12,xmm10
+ movdqu xmm13,XMMWORD PTR[r13*1+rbx]
+ movdqa xmm14,xmm10
+ pxor xmm10,xmm15
+ movdqu xmm15,XMMWORD PTR[r14*1+rbx]
+ pxor xmm11,xmm10
+ pxor xmm2,xmm10
+ pxor xmm12,xmm11
+ pxor xmm3,xmm11
+ pxor xmm13,xmm12
+ pxor xmm4,xmm12
+ pxor xmm14,xmm13
+ pxor xmm5,xmm13
+ pxor xmm15,xmm14
+ pxor xmm6,xmm14
+ pxor xmm7,xmm15
+ movups xmm0,XMMWORD PTR[32+r11]
+
+ lea r12,QWORD PTR[1+r8]
+ lea r13,QWORD PTR[3+r8]
+ lea r14,QWORD PTR[5+r8]
+ add r8,6
+ pxor xmm10,xmm9
+ bsf r12,r12
+ bsf r13,r13
+ bsf r14,r14
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ pxor xmm11,xmm9
+ pxor xmm12,xmm9
+DB 102,15,56,222,241
+ pxor xmm13,xmm9
+ pxor xmm14,xmm9
+DB 102,15,56,222,249
+ movups xmm1,XMMWORD PTR[48+r11]
+ pxor xmm15,xmm9
+
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+ movups xmm0,XMMWORD PTR[64+r11]
+ shl r12,4
+ shl r13,4
+ jmp $L$ocb_dec_loop6
+
+ALIGN 32
+$L$ocb_dec_loop6::
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$ocb_dec_loop6
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+ movups xmm1,XMMWORD PTR[16+r11]
+ shl r14,4
+
+DB 102,65,15,56,223,210
+ movdqu xmm10,XMMWORD PTR[rbx]
+ mov rax,r10
+DB 102,65,15,56,223,219
+DB 102,65,15,56,223,228
+DB 102,65,15,56,223,237
+DB 102,65,15,56,223,246
+DB 102,65,15,56,223,255
+ DB 0F3h,0C3h ;repret
+
+__ocb_decrypt6 ENDP
+
+
+ALIGN 32
+__ocb_decrypt4 PROC PRIVATE
+
+ pxor xmm15,xmm9
+ movdqu xmm11,XMMWORD PTR[r12*1+rbx]
+ movdqa xmm12,xmm10
+ movdqu xmm13,XMMWORD PTR[r13*1+rbx]
+ pxor xmm10,xmm15
+ pxor xmm11,xmm10
+ pxor xmm2,xmm10
+ pxor xmm12,xmm11
+ pxor xmm3,xmm11
+ pxor xmm13,xmm12
+ pxor xmm4,xmm12
+ pxor xmm5,xmm13
+ movups xmm0,XMMWORD PTR[32+r11]
+
+ pxor xmm10,xmm9
+ pxor xmm11,xmm9
+ pxor xmm12,xmm9
+ pxor xmm13,xmm9
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR[48+r11]
+
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+ movups xmm0,XMMWORD PTR[64+r11]
+ jmp $L$ocb_dec_loop4
+
+ALIGN 32
+$L$ocb_dec_loop4::
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$ocb_dec_loop4
+
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ movups xmm1,XMMWORD PTR[16+r11]
+ mov rax,r10
+
+DB 102,65,15,56,223,210
+DB 102,65,15,56,223,219
+DB 102,65,15,56,223,228
+DB 102,65,15,56,223,237
+ DB 0F3h,0C3h ;repret
+
+__ocb_decrypt4 ENDP
+
+
+ALIGN 32
+__ocb_decrypt1 PROC PRIVATE
+
+ pxor xmm7,xmm15
+ pxor xmm7,xmm9
+ pxor xmm2,xmm7
+ movups xmm0,XMMWORD PTR[32+r11]
+
+DB 102,15,56,222,209
+ movups xmm1,XMMWORD PTR[48+r11]
+ pxor xmm7,xmm9
+
+DB 102,15,56,222,208
+ movups xmm0,XMMWORD PTR[64+r11]
+ jmp $L$ocb_dec_loop1
+
+ALIGN 32
+$L$ocb_dec_loop1::
+DB 102,15,56,222,209
+ movups xmm1,XMMWORD PTR[rax*1+rcx]
+ add rax,32
+
+DB 102,15,56,222,208
+ movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
+ jnz $L$ocb_dec_loop1
+
+DB 102,15,56,222,209
+ movups xmm1,XMMWORD PTR[16+r11]
+ mov rax,r10
+
+DB 102,15,56,223,215
+ DB 0F3h,0C3h ;repret
+
+__ocb_decrypt1 ENDP
+PUBLIC aesni_cbc_encrypt
+
+ALIGN 16
+aesni_cbc_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_cbc_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ test rdx,rdx
+ jz $L$cbc_ret
+
+ mov r10d,DWORD PTR[240+rcx]
+ mov r11,rcx
+ test r9d,r9d
+ jz $L$cbc_decrypt
+
+ movups xmm2,XMMWORD PTR[r8]
+ mov eax,r10d
+ cmp rdx,16
+ jb $L$cbc_enc_tail
+ sub rdx,16
+ jmp $L$cbc_enc_loop
+ALIGN 16
+$L$cbc_enc_loop::
+ movups xmm3,XMMWORD PTR[rdi]
+ lea rdi,QWORD PTR[16+rdi]
+
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ xorps xmm3,xmm0
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm3
+$L$oop_enc1_15::
+DB 102,15,56,220,209
+ dec eax
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_enc1_15
+DB 102,15,56,221,209
+ mov eax,r10d
+ mov rcx,r11
+ movups XMMWORD PTR[rsi],xmm2
+ lea rsi,QWORD PTR[16+rsi]
+ sub rdx,16
+ jnc $L$cbc_enc_loop
+ add rdx,16
+ jnz $L$cbc_enc_tail
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ movups XMMWORD PTR[r8],xmm2
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ jmp $L$cbc_ret
+
+$L$cbc_enc_tail::
+ mov rcx,rdx
+ xchg rsi,rdi
+ DD 09066A4F3h
+ mov ecx,16
+ sub rcx,rdx
+ xor eax,eax
+ DD 09066AAF3h
+ lea rdi,QWORD PTR[((-16))+rdi]
+ mov eax,r10d
+ mov rsi,rdi
+ mov rcx,r11
+ xor rdx,rdx
+ jmp $L$cbc_enc_loop
+
+ALIGN 16
+$L$cbc_decrypt::
+ cmp rdx,16
+ jne $L$cbc_decrypt_bulk
+
+
+
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqu xmm3,XMMWORD PTR[r8]
+ movdqa xmm4,xmm2
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_dec1_16::
+DB 102,15,56,222,209
+ dec r10d
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_dec1_16
+DB 102,15,56,223,209
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ movdqu XMMWORD PTR[r8],xmm4
+ xorps xmm2,xmm3
+ pxor xmm3,xmm3
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm2,xmm2
+ jmp $L$cbc_ret
+ALIGN 16
+$L$cbc_decrypt_bulk::
+ lea r11,QWORD PTR[rsp]
+
+ push rbp
+
+ sub rsp,176
+ and rsp,-16
+ movaps XMMWORD PTR[16+rsp],xmm6
+ movaps XMMWORD PTR[32+rsp],xmm7
+ movaps XMMWORD PTR[48+rsp],xmm8
+ movaps XMMWORD PTR[64+rsp],xmm9
+ movaps XMMWORD PTR[80+rsp],xmm10
+ movaps XMMWORD PTR[96+rsp],xmm11
+ movaps XMMWORD PTR[112+rsp],xmm12
+ movaps XMMWORD PTR[128+rsp],xmm13
+ movaps XMMWORD PTR[144+rsp],xmm14
+ movaps XMMWORD PTR[160+rsp],xmm15
+$L$cbc_decrypt_body::
+ mov rbp,rcx
+ movups xmm10,XMMWORD PTR[r8]
+ mov eax,r10d
+ cmp rdx,050h
+ jbe $L$cbc_dec_tail
+
+ movups xmm0,XMMWORD PTR[rcx]
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ movdqa xmm11,xmm2
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ movdqa xmm12,xmm3
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ movdqa xmm13,xmm4
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ movdqa xmm14,xmm5
+ movdqu xmm7,XMMWORD PTR[80+rdi]
+ movdqa xmm15,xmm6
+ mov r9d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
+ cmp rdx,070h
+ jbe $L$cbc_dec_six_or_seven
+
+ and r9d,71303168
+ sub rdx,050h
+ cmp r9d,4194304
+ je $L$cbc_dec_loop6_enter
+ sub rdx,020h
+ lea rcx,QWORD PTR[112+rcx]
+ jmp $L$cbc_dec_loop8_enter
+ALIGN 16
+$L$cbc_dec_loop8::
+ movups XMMWORD PTR[rsi],xmm9
+ lea rsi,QWORD PTR[16+rsi]
+$L$cbc_dec_loop8_enter::
+ movdqu xmm8,XMMWORD PTR[96+rdi]
+ pxor xmm2,xmm0
+ movdqu xmm9,XMMWORD PTR[112+rdi]
+ pxor xmm3,xmm0
+ movups xmm1,XMMWORD PTR[((16-112))+rcx]
+ pxor xmm4,xmm0
+ mov rbp,-1
+ cmp rdx,070h
+ pxor xmm5,xmm0
+ pxor xmm6,xmm0
+ pxor xmm7,xmm0
+ pxor xmm8,xmm0
+
+DB 102,15,56,222,209
+ pxor xmm9,xmm0
+ movups xmm0,XMMWORD PTR[((32-112))+rcx]
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+DB 102,68,15,56,222,193
+ adc rbp,0
+ and rbp,128
+DB 102,68,15,56,222,201
+ add rbp,rdi
+ movups xmm1,XMMWORD PTR[((48-112))+rcx]
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+DB 102,68,15,56,222,192
+DB 102,68,15,56,222,200
+ movups xmm0,XMMWORD PTR[((64-112))+rcx]
+ nop
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+DB 102,68,15,56,222,193
+DB 102,68,15,56,222,201
+ movups xmm1,XMMWORD PTR[((80-112))+rcx]
+ nop
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+DB 102,68,15,56,222,192
+DB 102,68,15,56,222,200
+ movups xmm0,XMMWORD PTR[((96-112))+rcx]
+ nop
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+DB 102,68,15,56,222,193
+DB 102,68,15,56,222,201
+ movups xmm1,XMMWORD PTR[((112-112))+rcx]
+ nop
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+DB 102,68,15,56,222,192
+DB 102,68,15,56,222,200
+ movups xmm0,XMMWORD PTR[((128-112))+rcx]
+ nop
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+DB 102,68,15,56,222,193
+DB 102,68,15,56,222,201
+ movups xmm1,XMMWORD PTR[((144-112))+rcx]
+ cmp eax,11
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+DB 102,68,15,56,222,192
+DB 102,68,15,56,222,200
+ movups xmm0,XMMWORD PTR[((160-112))+rcx]
+ jb $L$cbc_dec_done
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+DB 102,68,15,56,222,193
+DB 102,68,15,56,222,201
+ movups xmm1,XMMWORD PTR[((176-112))+rcx]
+ nop
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+DB 102,68,15,56,222,192
+DB 102,68,15,56,222,200
+ movups xmm0,XMMWORD PTR[((192-112))+rcx]
+ je $L$cbc_dec_done
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+DB 102,68,15,56,222,193
+DB 102,68,15,56,222,201
+ movups xmm1,XMMWORD PTR[((208-112))+rcx]
+ nop
+DB 102,15,56,222,208
+DB 102,15,56,222,216
+DB 102,15,56,222,224
+DB 102,15,56,222,232
+DB 102,15,56,222,240
+DB 102,15,56,222,248
+DB 102,68,15,56,222,192
+DB 102,68,15,56,222,200
+ movups xmm0,XMMWORD PTR[((224-112))+rcx]
+ jmp $L$cbc_dec_done
+ALIGN 16
+$L$cbc_dec_done::
+DB 102,15,56,222,209
+DB 102,15,56,222,217
+ pxor xmm10,xmm0
+ pxor xmm11,xmm0
+DB 102,15,56,222,225
+DB 102,15,56,222,233
+ pxor xmm12,xmm0
+ pxor xmm13,xmm0
+DB 102,15,56,222,241
+DB 102,15,56,222,249
+ pxor xmm14,xmm0
+ pxor xmm15,xmm0
+DB 102,68,15,56,222,193
+DB 102,68,15,56,222,201
+ movdqu xmm1,XMMWORD PTR[80+rdi]
+
+DB 102,65,15,56,223,210
+ movdqu xmm10,XMMWORD PTR[96+rdi]
+ pxor xmm1,xmm0
+DB 102,65,15,56,223,219
+ pxor xmm10,xmm0
+ movdqu xmm0,XMMWORD PTR[112+rdi]
+DB 102,65,15,56,223,228
+ lea rdi,QWORD PTR[128+rdi]
+ movdqu xmm11,XMMWORD PTR[rbp]
+DB 102,65,15,56,223,237
+DB 102,65,15,56,223,246
+ movdqu xmm12,XMMWORD PTR[16+rbp]
+ movdqu xmm13,XMMWORD PTR[32+rbp]
+DB 102,65,15,56,223,255
+DB 102,68,15,56,223,193
+ movdqu xmm14,XMMWORD PTR[48+rbp]
+ movdqu xmm15,XMMWORD PTR[64+rbp]
+DB 102,69,15,56,223,202
+ movdqa xmm10,xmm0
+ movdqu xmm1,XMMWORD PTR[80+rbp]
+ movups xmm0,XMMWORD PTR[((-112))+rcx]
+
+ movups XMMWORD PTR[rsi],xmm2
+ movdqa xmm2,xmm11
+ movups XMMWORD PTR[16+rsi],xmm3
+ movdqa xmm3,xmm12
+ movups XMMWORD PTR[32+rsi],xmm4
+ movdqa xmm4,xmm13
+ movups XMMWORD PTR[48+rsi],xmm5
+ movdqa xmm5,xmm14
+ movups XMMWORD PTR[64+rsi],xmm6
+ movdqa xmm6,xmm15
+ movups XMMWORD PTR[80+rsi],xmm7
+ movdqa xmm7,xmm1
+ movups XMMWORD PTR[96+rsi],xmm8
+ lea rsi,QWORD PTR[112+rsi]
+
+ sub rdx,080h
+ ja $L$cbc_dec_loop8
+
+ movaps xmm2,xmm9
+ lea rcx,QWORD PTR[((-112))+rcx]
+ add rdx,070h
+ jle $L$cbc_dec_clear_tail_collected
+ movups XMMWORD PTR[rsi],xmm9
+ lea rsi,QWORD PTR[16+rsi]
+ cmp rdx,050h
+ jbe $L$cbc_dec_tail
+
+ movaps xmm2,xmm11
+$L$cbc_dec_six_or_seven::
+ cmp rdx,060h
+ ja $L$cbc_dec_seven
+
+ movaps xmm8,xmm7
+ call _aesni_decrypt6
+ pxor xmm2,xmm10
+ movaps xmm10,xmm8
+ pxor xmm3,xmm11
+ movdqu XMMWORD PTR[rsi],xmm2
+ pxor xmm4,xmm12
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ pxor xmm5,xmm13
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ pxor xmm4,xmm4
+ pxor xmm6,xmm14
+ movdqu XMMWORD PTR[48+rsi],xmm5
+ pxor xmm5,xmm5
+ pxor xmm7,xmm15
+ movdqu XMMWORD PTR[64+rsi],xmm6
+ pxor xmm6,xmm6
+ lea rsi,QWORD PTR[80+rsi]
+ movdqa xmm2,xmm7
+ pxor xmm7,xmm7
+ jmp $L$cbc_dec_tail_collected
+
+ALIGN 16
+$L$cbc_dec_seven::
+ movups xmm8,XMMWORD PTR[96+rdi]
+ xorps xmm9,xmm9
+ call _aesni_decrypt8
+ movups xmm9,XMMWORD PTR[80+rdi]
+ pxor xmm2,xmm10
+ movups xmm10,XMMWORD PTR[96+rdi]
+ pxor xmm3,xmm11
+ movdqu XMMWORD PTR[rsi],xmm2
+ pxor xmm4,xmm12
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ pxor xmm5,xmm13
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ pxor xmm4,xmm4
+ pxor xmm6,xmm14
+ movdqu XMMWORD PTR[48+rsi],xmm5
+ pxor xmm5,xmm5
+ pxor xmm7,xmm15
+ movdqu XMMWORD PTR[64+rsi],xmm6
+ pxor xmm6,xmm6
+ pxor xmm8,xmm9
+ movdqu XMMWORD PTR[80+rsi],xmm7
+ pxor xmm7,xmm7
+ lea rsi,QWORD PTR[96+rsi]
+ movdqa xmm2,xmm8
+ pxor xmm8,xmm8
+ pxor xmm9,xmm9
+ jmp $L$cbc_dec_tail_collected
+
+ALIGN 16
+$L$cbc_dec_loop6::
+ movups XMMWORD PTR[rsi],xmm7
+ lea rsi,QWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[rdi]
+ movdqu xmm3,XMMWORD PTR[16+rdi]
+ movdqa xmm11,xmm2
+ movdqu xmm4,XMMWORD PTR[32+rdi]
+ movdqa xmm12,xmm3
+ movdqu xmm5,XMMWORD PTR[48+rdi]
+ movdqa xmm13,xmm4
+ movdqu xmm6,XMMWORD PTR[64+rdi]
+ movdqa xmm14,xmm5
+ movdqu xmm7,XMMWORD PTR[80+rdi]
+ movdqa xmm15,xmm6
+$L$cbc_dec_loop6_enter::
+ lea rdi,QWORD PTR[96+rdi]
+ movdqa xmm8,xmm7
+
+ call _aesni_decrypt6
+
+ pxor xmm2,xmm10
+ movdqa xmm10,xmm8
+ pxor xmm3,xmm11
+ movdqu XMMWORD PTR[rsi],xmm2
+ pxor xmm4,xmm12
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ pxor xmm5,xmm13
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ pxor xmm6,xmm14
+ mov rcx,rbp
+ movdqu XMMWORD PTR[48+rsi],xmm5
+ pxor xmm7,xmm15
+ mov eax,r10d
+ movdqu XMMWORD PTR[64+rsi],xmm6
+ lea rsi,QWORD PTR[80+rsi]
+ sub rdx,060h
+ ja $L$cbc_dec_loop6
+
+ movdqa xmm2,xmm7
+ add rdx,050h
+ jle $L$cbc_dec_clear_tail_collected
+ movups XMMWORD PTR[rsi],xmm7
+ lea rsi,QWORD PTR[16+rsi]
+
+$L$cbc_dec_tail::
+ movups xmm2,XMMWORD PTR[rdi]
+ sub rdx,010h
+ jbe $L$cbc_dec_one
+
+ movups xmm3,XMMWORD PTR[16+rdi]
+ movaps xmm11,xmm2
+ sub rdx,010h
+ jbe $L$cbc_dec_two
+
+ movups xmm4,XMMWORD PTR[32+rdi]
+ movaps xmm12,xmm3
+ sub rdx,010h
+ jbe $L$cbc_dec_three
+
+ movups xmm5,XMMWORD PTR[48+rdi]
+ movaps xmm13,xmm4
+ sub rdx,010h
+ jbe $L$cbc_dec_four
+
+ movups xmm6,XMMWORD PTR[64+rdi]
+ movaps xmm14,xmm5
+ movaps xmm15,xmm6
+ xorps xmm7,xmm7
+ call _aesni_decrypt6
+ pxor xmm2,xmm10
+ movaps xmm10,xmm15
+ pxor xmm3,xmm11
+ movdqu XMMWORD PTR[rsi],xmm2
+ pxor xmm4,xmm12
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ pxor xmm5,xmm13
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ pxor xmm4,xmm4
+ pxor xmm6,xmm14
+ movdqu XMMWORD PTR[48+rsi],xmm5
+ pxor xmm5,xmm5
+ lea rsi,QWORD PTR[64+rsi]
+ movdqa xmm2,xmm6
+ pxor xmm6,xmm6
+ pxor xmm7,xmm7
+ sub rdx,010h
+ jmp $L$cbc_dec_tail_collected
+
+ALIGN 16
+$L$cbc_dec_one::
+ movaps xmm11,xmm2
+ movups xmm0,XMMWORD PTR[rcx]
+ movups xmm1,XMMWORD PTR[16+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ xorps xmm2,xmm0
+$L$oop_dec1_17::
+DB 102,15,56,222,209
+ dec eax
+ movups xmm1,XMMWORD PTR[rcx]
+ lea rcx,QWORD PTR[16+rcx]
+ jnz $L$oop_dec1_17
+DB 102,15,56,223,209
+ xorps xmm2,xmm10
+ movaps xmm10,xmm11
+ jmp $L$cbc_dec_tail_collected
+ALIGN 16
+$L$cbc_dec_two::
+ movaps xmm12,xmm3
+ call _aesni_decrypt2
+ pxor xmm2,xmm10
+ movaps xmm10,xmm12
+ pxor xmm3,xmm11
+ movdqu XMMWORD PTR[rsi],xmm2
+ movdqa xmm2,xmm3
+ pxor xmm3,xmm3
+ lea rsi,QWORD PTR[16+rsi]
+ jmp $L$cbc_dec_tail_collected
+ALIGN 16
+$L$cbc_dec_three::
+ movaps xmm13,xmm4
+ call _aesni_decrypt3
+ pxor xmm2,xmm10
+ movaps xmm10,xmm13
+ pxor xmm3,xmm11
+ movdqu XMMWORD PTR[rsi],xmm2
+ pxor xmm4,xmm12
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ movdqa xmm2,xmm4
+ pxor xmm4,xmm4
+ lea rsi,QWORD PTR[32+rsi]
+ jmp $L$cbc_dec_tail_collected
+ALIGN 16
+$L$cbc_dec_four::
+ movaps xmm14,xmm5
+ call _aesni_decrypt4
+ pxor xmm2,xmm10
+ movaps xmm10,xmm14
+ pxor xmm3,xmm11
+ movdqu XMMWORD PTR[rsi],xmm2
+ pxor xmm4,xmm12
+ movdqu XMMWORD PTR[16+rsi],xmm3
+ pxor xmm3,xmm3
+ pxor xmm5,xmm13
+ movdqu XMMWORD PTR[32+rsi],xmm4
+ pxor xmm4,xmm4
+ movdqa xmm2,xmm5
+ pxor xmm5,xmm5
+ lea rsi,QWORD PTR[48+rsi]
+ jmp $L$cbc_dec_tail_collected
+
+ALIGN 16
+$L$cbc_dec_clear_tail_collected::
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+$L$cbc_dec_tail_collected::
+ movups XMMWORD PTR[r8],xmm10
+ and rdx,15
+ jnz $L$cbc_dec_tail_partial
+ movups XMMWORD PTR[rsi],xmm2
+ pxor xmm2,xmm2
+ jmp $L$cbc_dec_ret
+ALIGN 16
+$L$cbc_dec_tail_partial::
+ movaps XMMWORD PTR[rsp],xmm2
+ pxor xmm2,xmm2
+ mov rcx,16
+ mov rdi,rsi
+ sub rcx,rdx
+ lea rsi,QWORD PTR[rsp]
+ DD 09066A4F3h
+ movdqa XMMWORD PTR[rsp],xmm2
+
+$L$cbc_dec_ret::
+ xorps xmm0,xmm0
+ pxor xmm1,xmm1
+ movaps xmm6,XMMWORD PTR[16+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm0
+ movaps xmm7,XMMWORD PTR[32+rsp]
+ movaps XMMWORD PTR[32+rsp],xmm0
+ movaps xmm8,XMMWORD PTR[48+rsp]
+ movaps XMMWORD PTR[48+rsp],xmm0
+ movaps xmm9,XMMWORD PTR[64+rsp]
+ movaps XMMWORD PTR[64+rsp],xmm0
+ movaps xmm10,XMMWORD PTR[80+rsp]
+ movaps XMMWORD PTR[80+rsp],xmm0
+ movaps xmm11,XMMWORD PTR[96+rsp]
+ movaps XMMWORD PTR[96+rsp],xmm0
+ movaps xmm12,XMMWORD PTR[112+rsp]
+ movaps XMMWORD PTR[112+rsp],xmm0
+ movaps xmm13,XMMWORD PTR[128+rsp]
+ movaps XMMWORD PTR[128+rsp],xmm0
+ movaps xmm14,XMMWORD PTR[144+rsp]
+ movaps XMMWORD PTR[144+rsp],xmm0
+ movaps xmm15,XMMWORD PTR[160+rsp]
+ movaps XMMWORD PTR[160+rsp],xmm0
+ mov rbp,QWORD PTR[((-8))+r11]
+
+ lea rsp,QWORD PTR[r11]
+
+$L$cbc_ret::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_cbc_encrypt::
+aesni_cbc_encrypt ENDP
+PUBLIC aesni_set_decrypt_key
+
+ALIGN 16
+aesni_set_decrypt_key PROC PUBLIC
+
+DB 048h,083h,0ECh,008h
+
+ call __aesni_set_encrypt_key
+ shl edx,4
+ test eax,eax
+ jnz $L$dec_key_ret
+ lea rcx,QWORD PTR[16+rdx*1+r8]
+
+ movups xmm0,XMMWORD PTR[r8]
+ movups xmm1,XMMWORD PTR[rcx]
+ movups XMMWORD PTR[rcx],xmm0
+ movups XMMWORD PTR[r8],xmm1
+ lea r8,QWORD PTR[16+r8]
+ lea rcx,QWORD PTR[((-16))+rcx]
+
+$L$dec_key_inverse::
+ movups xmm0,XMMWORD PTR[r8]
+ movups xmm1,XMMWORD PTR[rcx]
+DB 102,15,56,219,192
+DB 102,15,56,219,201
+ lea r8,QWORD PTR[16+r8]
+ lea rcx,QWORD PTR[((-16))+rcx]
+ movups XMMWORD PTR[16+rcx],xmm0
+ movups XMMWORD PTR[(-16)+r8],xmm1
+ cmp rcx,r8
+ ja $L$dec_key_inverse
+
+ movups xmm0,XMMWORD PTR[r8]
+DB 102,15,56,219,192
+ pxor xmm1,xmm1
+ movups XMMWORD PTR[rcx],xmm0
+ pxor xmm0,xmm0
+$L$dec_key_ret::
+ add rsp,8
+
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_set_decrypt_key::
+aesni_set_decrypt_key ENDP
+PUBLIC aesni_set_encrypt_key
+
+ALIGN 16
+aesni_set_encrypt_key PROC PUBLIC
+__aesni_set_encrypt_key::
+
+DB 048h,083h,0ECh,008h
+
+ mov rax,-1
+ test rcx,rcx
+ jz $L$enc_key_ret
+ test r8,r8
+ jz $L$enc_key_ret
+
+ mov r10d,268437504
+ movups xmm0,XMMWORD PTR[rcx]
+ xorps xmm4,xmm4
+ and r10d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
+ lea rax,QWORD PTR[16+r8]
+ cmp edx,256
+ je $L$14rounds
+ cmp edx,192
+ je $L$12rounds
+ cmp edx,128
+ jne $L$bad_keybits
+
+$L$10rounds::
+ mov edx,9
+ cmp r10d,268435456
+ je $L$10rounds_alt
+
+ movups XMMWORD PTR[r8],xmm0
+DB 102,15,58,223,200,1
+ call $L$key_expansion_128_cold
+DB 102,15,58,223,200,2
+ call $L$key_expansion_128
+DB 102,15,58,223,200,4
+ call $L$key_expansion_128
+DB 102,15,58,223,200,8
+ call $L$key_expansion_128
+DB 102,15,58,223,200,16
+ call $L$key_expansion_128
+DB 102,15,58,223,200,32
+ call $L$key_expansion_128
+DB 102,15,58,223,200,64
+ call $L$key_expansion_128
+DB 102,15,58,223,200,128
+ call $L$key_expansion_128
+DB 102,15,58,223,200,27
+ call $L$key_expansion_128
+DB 102,15,58,223,200,54
+ call $L$key_expansion_128
+ movups XMMWORD PTR[rax],xmm0
+ mov DWORD PTR[80+rax],edx
+ xor eax,eax
+ jmp $L$enc_key_ret
+
+ALIGN 16
+$L$10rounds_alt::
+ movdqa xmm5,XMMWORD PTR[$L$key_rotate]
+ mov r10d,8
+ movdqa xmm4,XMMWORD PTR[$L$key_rcon1]
+ movdqa xmm2,xmm0
+ movdqu XMMWORD PTR[r8],xmm0
+ jmp $L$oop_key128
+
+ALIGN 16
+$L$oop_key128::
+DB 102,15,56,0,197
+DB 102,15,56,221,196
+ pslld xmm4,1
+ lea rax,QWORD PTR[16+rax]
+
+ movdqa xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm2,xmm3
+
+ pxor xmm0,xmm2
+ movdqu XMMWORD PTR[(-16)+rax],xmm0
+ movdqa xmm2,xmm0
+
+ dec r10d
+ jnz $L$oop_key128
+
+ movdqa xmm4,XMMWORD PTR[$L$key_rcon1b]
+
+DB 102,15,56,0,197
+DB 102,15,56,221,196
+ pslld xmm4,1
+
+ movdqa xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm2,xmm3
+
+ pxor xmm0,xmm2
+ movdqu XMMWORD PTR[rax],xmm0
+
+ movdqa xmm2,xmm0
+DB 102,15,56,0,197
+DB 102,15,56,221,196
+
+ movdqa xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm3,xmm2
+ pslldq xmm2,4
+ pxor xmm2,xmm3
+
+ pxor xmm0,xmm2
+ movdqu XMMWORD PTR[16+rax],xmm0
+
+ mov DWORD PTR[96+rax],edx
+ xor eax,eax
+ jmp $L$enc_key_ret
+
+ALIGN 16
+$L$12rounds::
+ movq xmm2,QWORD PTR[16+rcx]
+ mov edx,11
+ cmp r10d,268435456
+ je $L$12rounds_alt
+
+ movups XMMWORD PTR[r8],xmm0
+DB 102,15,58,223,202,1
+ call $L$key_expansion_192a_cold
+DB 102,15,58,223,202,2
+ call $L$key_expansion_192b
+DB 102,15,58,223,202,4
+ call $L$key_expansion_192a
+DB 102,15,58,223,202,8
+ call $L$key_expansion_192b
+DB 102,15,58,223,202,16
+ call $L$key_expansion_192a
+DB 102,15,58,223,202,32
+ call $L$key_expansion_192b
+DB 102,15,58,223,202,64
+ call $L$key_expansion_192a
+DB 102,15,58,223,202,128
+ call $L$key_expansion_192b
+ movups XMMWORD PTR[rax],xmm0
+ mov DWORD PTR[48+rax],edx
+ xor rax,rax
+ jmp $L$enc_key_ret
+
+ALIGN 16
+$L$12rounds_alt::
+ movdqa xmm5,XMMWORD PTR[$L$key_rotate192]
+ movdqa xmm4,XMMWORD PTR[$L$key_rcon1]
+ mov r10d,8
+ movdqu XMMWORD PTR[r8],xmm0
+ jmp $L$oop_key192
+
+ALIGN 16
+$L$oop_key192::
+ movq QWORD PTR[rax],xmm2
+ movdqa xmm1,xmm2
+DB 102,15,56,0,213
+DB 102,15,56,221,212
+ pslld xmm4,1
+ lea rax,QWORD PTR[24+rax]
+
+ movdqa xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm0,xmm3
+
+ pshufd xmm3,xmm0,0ffh
+ pxor xmm3,xmm1
+ pslldq xmm1,4
+ pxor xmm3,xmm1
+
+ pxor xmm0,xmm2
+ pxor xmm2,xmm3
+ movdqu XMMWORD PTR[(-16)+rax],xmm0
+
+ dec r10d
+ jnz $L$oop_key192
+
+ mov DWORD PTR[32+rax],edx
+ xor eax,eax
+ jmp $L$enc_key_ret
+
+ALIGN 16
+$L$14rounds::
+ movups xmm2,XMMWORD PTR[16+rcx]
+ mov edx,13
+ lea rax,QWORD PTR[16+rax]
+ cmp r10d,268435456
+ je $L$14rounds_alt
+
+ movups XMMWORD PTR[r8],xmm0
+ movups XMMWORD PTR[16+r8],xmm2
+DB 102,15,58,223,202,1
+ call $L$key_expansion_256a_cold
+DB 102,15,58,223,200,1
+ call $L$key_expansion_256b
+DB 102,15,58,223,202,2
+ call $L$key_expansion_256a
+DB 102,15,58,223,200,2
+ call $L$key_expansion_256b
+DB 102,15,58,223,202,4
+ call $L$key_expansion_256a
+DB 102,15,58,223,200,4
+ call $L$key_expansion_256b
+DB 102,15,58,223,202,8
+ call $L$key_expansion_256a
+DB 102,15,58,223,200,8
+ call $L$key_expansion_256b
+DB 102,15,58,223,202,16
+ call $L$key_expansion_256a
+DB 102,15,58,223,200,16
+ call $L$key_expansion_256b
+DB 102,15,58,223,202,32
+ call $L$key_expansion_256a
+DB 102,15,58,223,200,32
+ call $L$key_expansion_256b
+DB 102,15,58,223,202,64
+ call $L$key_expansion_256a
+ movups XMMWORD PTR[rax],xmm0
+ mov DWORD PTR[16+rax],edx
+ xor rax,rax
+ jmp $L$enc_key_ret
+
+ALIGN 16
+$L$14rounds_alt::
+ movdqa xmm5,XMMWORD PTR[$L$key_rotate]
+ movdqa xmm4,XMMWORD PTR[$L$key_rcon1]
+ mov r10d,7
+ movdqu XMMWORD PTR[r8],xmm0
+ movdqa xmm1,xmm2
+ movdqu XMMWORD PTR[16+r8],xmm2
+ jmp $L$oop_key256
+
+ALIGN 16
+$L$oop_key256::
+DB 102,15,56,0,213
+DB 102,15,56,221,212
+
+ movdqa xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm3,xmm0
+ pslldq xmm0,4
+ pxor xmm0,xmm3
+ pslld xmm4,1
+
+ pxor xmm0,xmm2
+ movdqu XMMWORD PTR[rax],xmm0
+
+ dec r10d
+ jz $L$done_key256
+
+ pshufd xmm2,xmm0,0ffh
+ pxor xmm3,xmm3
+DB 102,15,56,221,211
+
+ movdqa xmm3,xmm1
+ pslldq xmm1,4
+ pxor xmm3,xmm1
+ pslldq xmm1,4
+ pxor xmm3,xmm1
+ pslldq xmm1,4
+ pxor xmm1,xmm3
+
+ pxor xmm2,xmm1
+ movdqu XMMWORD PTR[16+rax],xmm2
+ lea rax,QWORD PTR[32+rax]
+ movdqa xmm1,xmm2
+
+ jmp $L$oop_key256
+
+$L$done_key256::
+ mov DWORD PTR[16+rax],edx
+ xor eax,eax
+ jmp $L$enc_key_ret
+
+ALIGN 16
+$L$bad_keybits::
+ mov rax,-2
+$L$enc_key_ret::
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ add rsp,8
+
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_set_encrypt_key::
+
+ALIGN 16
+$L$key_expansion_128::
+ movups XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+$L$key_expansion_128_cold::
+ shufps xmm4,xmm0,16
+ xorps xmm0,xmm4
+ shufps xmm4,xmm0,140
+ xorps xmm0,xmm4
+ shufps xmm1,xmm1,255
+ xorps xmm0,xmm1
+ DB 0F3h,0C3h ;repret
+
+ALIGN 16
+$L$key_expansion_192a::
+ movups XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+$L$key_expansion_192a_cold::
+ movaps xmm5,xmm2
+$L$key_expansion_192b_warm::
+ shufps xmm4,xmm0,16
+ movdqa xmm3,xmm2
+ xorps xmm0,xmm4
+ shufps xmm4,xmm0,140
+ pslldq xmm3,4
+ xorps xmm0,xmm4
+ pshufd xmm1,xmm1,85
+ pxor xmm2,xmm3
+ pxor xmm0,xmm1
+ pshufd xmm3,xmm0,255
+ pxor xmm2,xmm3
+ DB 0F3h,0C3h ;repret
+
+ALIGN 16
+$L$key_expansion_192b::
+ movaps xmm3,xmm0
+ shufps xmm5,xmm0,68
+ movups XMMWORD PTR[rax],xmm5
+ shufps xmm3,xmm2,78
+ movups XMMWORD PTR[16+rax],xmm3
+ lea rax,QWORD PTR[32+rax]
+ jmp $L$key_expansion_192b_warm
+
+ALIGN 16
+$L$key_expansion_256a::
+ movups XMMWORD PTR[rax],xmm2
+ lea rax,QWORD PTR[16+rax]
+$L$key_expansion_256a_cold::
+ shufps xmm4,xmm0,16
+ xorps xmm0,xmm4
+ shufps xmm4,xmm0,140
+ xorps xmm0,xmm4
+ shufps xmm1,xmm1,255
+ xorps xmm0,xmm1
+ DB 0F3h,0C3h ;repret
+
+ALIGN 16
+$L$key_expansion_256b::
+ movups XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+
+ shufps xmm4,xmm2,16
+ xorps xmm2,xmm4
+ shufps xmm4,xmm2,140
+ xorps xmm2,xmm4
+ shufps xmm1,xmm1,170
+ xorps xmm2,xmm1
+ DB 0F3h,0C3h ;repret
+
+aesni_set_encrypt_key ENDP
+
+ALIGN 64
+$L$bswap_mask::
+DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+$L$increment32::
+ DD 6,6,6,0
+$L$increment64::
+ DD 1,0,0,0
+$L$xts_magic::
+ DD 087h,0,1,0
+$L$increment1::
+DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+$L$key_rotate::
+ DD 00c0f0e0dh,00c0f0e0dh,00c0f0e0dh,00c0f0e0dh
+$L$key_rotate192::
+ DD 004070605h,004070605h,004070605h,004070605h
+$L$key_rcon1::
+ DD 1,1,1,1
+$L$key_rcon1b::
+ DD 01bh,01bh,01bh,01bh
+
+DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
+DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
+DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
+DB 115,108,46,111,114,103,62,0
+ALIGN 64
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+ecb_ccm64_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ lea rsi,QWORD PTR[rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,8
+ DD 0a548f3fch
+ lea rax,QWORD PTR[88+rax]
+
+ jmp $L$common_seh_tail
+ecb_ccm64_se_handler ENDP
+
+
+ALIGN 16
+ctr_xts_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ mov rax,QWORD PTR[208+r8]
+
+ lea rsi,QWORD PTR[((-168))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+ mov rbp,QWORD PTR[((-8))+rax]
+ mov QWORD PTR[160+r8],rbp
+ jmp $L$common_seh_tail
+ctr_xts_se_handler ENDP
+
+
+ALIGN 16
+ocb_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ mov r10d,DWORD PTR[8+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$ocb_no_xmm
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea rsi,QWORD PTR[rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+ lea rax,QWORD PTR[((160+40))+rax]
+
+$L$ocb_no_xmm::
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+
+ jmp $L$common_seh_tail
+ocb_se_handler ENDP
+
+ALIGN 16
+cbc_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[152+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$cbc_decrypt_bulk]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[120+r8]
+
+ lea r10,QWORD PTR[$L$cbc_decrypt_body]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea r10,QWORD PTR[$L$cbc_ret]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ lea rsi,QWORD PTR[16+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+ mov rax,QWORD PTR[208+r8]
+
+ mov rbp,QWORD PTR[((-8))+rax]
+ mov QWORD PTR[160+r8],rbp
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+cbc_se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_aesni_ecb_encrypt
+ DD imagerel $L$SEH_end_aesni_ecb_encrypt
+ DD imagerel $L$SEH_info_ecb
+
+ DD imagerel $L$SEH_begin_aesni_ccm64_encrypt_blocks
+ DD imagerel $L$SEH_end_aesni_ccm64_encrypt_blocks
+ DD imagerel $L$SEH_info_ccm64_enc
+
+ DD imagerel $L$SEH_begin_aesni_ccm64_decrypt_blocks
+ DD imagerel $L$SEH_end_aesni_ccm64_decrypt_blocks
+ DD imagerel $L$SEH_info_ccm64_dec
+
+ DD imagerel $L$SEH_begin_aesni_ctr32_encrypt_blocks
+ DD imagerel $L$SEH_end_aesni_ctr32_encrypt_blocks
+ DD imagerel $L$SEH_info_ctr32
+
+ DD imagerel $L$SEH_begin_aesni_xts_encrypt
+ DD imagerel $L$SEH_end_aesni_xts_encrypt
+ DD imagerel $L$SEH_info_xts_enc
+
+ DD imagerel $L$SEH_begin_aesni_xts_decrypt
+ DD imagerel $L$SEH_end_aesni_xts_decrypt
+ DD imagerel $L$SEH_info_xts_dec
+
+ DD imagerel $L$SEH_begin_aesni_ocb_encrypt
+ DD imagerel $L$SEH_end_aesni_ocb_encrypt
+ DD imagerel $L$SEH_info_ocb_enc
+
+ DD imagerel $L$SEH_begin_aesni_ocb_decrypt
+ DD imagerel $L$SEH_end_aesni_ocb_decrypt
+ DD imagerel $L$SEH_info_ocb_dec
+ DD imagerel $L$SEH_begin_aesni_cbc_encrypt
+ DD imagerel $L$SEH_end_aesni_cbc_encrypt
+ DD imagerel $L$SEH_info_cbc
+
+ DD imagerel aesni_set_decrypt_key
+ DD imagerel $L$SEH_end_set_decrypt_key
+ DD imagerel $L$SEH_info_key
+
+ DD imagerel aesni_set_encrypt_key
+ DD imagerel $L$SEH_end_set_encrypt_key
+ DD imagerel $L$SEH_info_key
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_ecb::
+DB 9,0,0,0
+ DD imagerel ecb_ccm64_se_handler
+ DD imagerel $L$ecb_enc_body,imagerel $L$ecb_enc_ret
+$L$SEH_info_ccm64_enc::
+DB 9,0,0,0
+ DD imagerel ecb_ccm64_se_handler
+ DD imagerel $L$ccm64_enc_body,imagerel $L$ccm64_enc_ret
+$L$SEH_info_ccm64_dec::
+DB 9,0,0,0
+ DD imagerel ecb_ccm64_se_handler
+ DD imagerel $L$ccm64_dec_body,imagerel $L$ccm64_dec_ret
+$L$SEH_info_ctr32::
+DB 9,0,0,0
+ DD imagerel ctr_xts_se_handler
+ DD imagerel $L$ctr32_body,imagerel $L$ctr32_epilogue
+$L$SEH_info_xts_enc::
+DB 9,0,0,0
+ DD imagerel ctr_xts_se_handler
+ DD imagerel $L$xts_enc_body,imagerel $L$xts_enc_epilogue
+$L$SEH_info_xts_dec::
+DB 9,0,0,0
+ DD imagerel ctr_xts_se_handler
+ DD imagerel $L$xts_dec_body,imagerel $L$xts_dec_epilogue
+$L$SEH_info_ocb_enc::
+DB 9,0,0,0
+ DD imagerel ocb_se_handler
+ DD imagerel $L$ocb_enc_body,imagerel $L$ocb_enc_epilogue
+ DD imagerel $L$ocb_enc_pop
+ DD 0
+$L$SEH_info_ocb_dec::
+DB 9,0,0,0
+ DD imagerel ocb_se_handler
+ DD imagerel $L$ocb_dec_body,imagerel $L$ocb_dec_epilogue
+ DD imagerel $L$ocb_dec_pop
+ DD 0
+$L$SEH_info_cbc::
+DB 9,0,0,0
+ DD imagerel cbc_se_handler
+$L$SEH_info_key::
+DB 001h,004h,001h,000h
+DB 004h,002h,000h,000h
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86.masm b/contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86.masm
index 060b0b1c50..e242a0c5df 100644
--- a/contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86.masm
@@ -1,661 +1,661 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-ALIGN 64
-$L_vpaes_consts::
-DD 218628480,235210255,168496130,67568393
-DD 252381056,17041926,33884169,51187212
-DD 252645135,252645135,252645135,252645135
-DD 1512730624,3266504856,1377990664,3401244816
-DD 830229760,1275146365,2969422977,3447763452
-DD 3411033600,2979783055,338359620,2782886510
-DD 4209124096,907596821,221174255,1006095553
-DD 191964160,3799684038,3164090317,1589111125
-DD 182528256,1777043520,2877432650,3265356744
-DD 1874708224,3503451415,3305285752,363511674
-DD 1606117888,3487855781,1093350906,2384367825
-DD 197121,67569157,134941193,202313229
-DD 67569157,134941193,202313229,197121
-DD 134941193,202313229,197121,67569157
-DD 202313229,197121,67569157,134941193
-DD 33619971,100992007,168364043,235736079
-DD 235736079,33619971,100992007,168364043
-DD 168364043,235736079,33619971,100992007
-DD 100992007,168364043,235736079,33619971
-DD 50462976,117835012,185207048,252579084
-DD 252314880,51251460,117574920,184942860
-DD 184682752,252054788,50987272,118359308
-DD 118099200,185467140,251790600,50727180
-DD 2946363062,528716217,1300004225,1881839624
-DD 1532713819,1532713819,1532713819,1532713819
-DD 3602276352,4288629033,3737020424,4153884961
-DD 1354558464,32357713,2958822624,3775749553
-DD 1201988352,132424512,1572796698,503232858
-DD 2213177600,1597421020,4103937655,675398315
-DD 2749646592,4273543773,1511898873,121693092
-DD 3040248576,1103263732,2871565598,1608280554
-DD 2236667136,2588920351,482954393,64377734
-DD 3069987328,291237287,2117370568,3650299247
-DD 533321216,3573750986,2572112006,1401264716
-DD 1339849704,2721158661,548607111,3445553514
-DD 2128193280,3054596040,2183486460,1257083700
-DD 655635200,1165381986,3923443150,2344132524
-DD 190078720,256924420,290342170,357187870
-DD 1610966272,2263057382,4103205268,309794674
-DD 2592527872,2233205587,1335446729,3402964816
-DD 3973531904,3225098121,3002836325,1918774430
-DD 3870401024,2102906079,2284471353,4117666579
-DD 617007872,1021508343,366931923,691083277
-DD 2528395776,3491914898,2968704004,1613121270
-DD 3445188352,3247741094,844474987,4093578302
-DD 651481088,1190302358,1689581232,574775300
-DD 4289380608,206939853,2555985458,2489840491
-DD 2130264064,327674451,3566485037,3349835193
-DD 2470714624,316102159,3636825756,3393945945
-DB 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
-DB 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
-DB 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
-DB 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
-DB 118,101,114,115,105,116,121,41,0
-ALIGN 64
-ALIGN 16
-__vpaes_preheat PROC PRIVATE
- add ebp,DWORD PTR [esp]
- movdqa xmm7,XMMWORD PTR [ebp-48]
- movdqa xmm6,XMMWORD PTR [ebp-16]
- ret
-__vpaes_preheat ENDP
-ALIGN 16
-__vpaes_encrypt_core PROC PRIVATE
- mov ecx,16
- mov eax,DWORD PTR 240[edx]
- movdqa xmm1,xmm6
- movdqa xmm2,XMMWORD PTR [ebp]
- pandn xmm1,xmm0
- pand xmm0,xmm6
- movdqu xmm5,XMMWORD PTR [edx]
-DB 102,15,56,0,208
- movdqa xmm0,XMMWORD PTR 16[ebp]
- pxor xmm2,xmm5
- psrld xmm1,4
- add edx,16
-DB 102,15,56,0,193
- lea ebx,DWORD PTR 192[ebp]
- pxor xmm0,xmm2
- jmp $L000enc_entry
-ALIGN 16
-$L001enc_loop:
- movdqa xmm4,XMMWORD PTR 32[ebp]
- movdqa xmm0,XMMWORD PTR 48[ebp]
-DB 102,15,56,0,226
-DB 102,15,56,0,195
- pxor xmm4,xmm5
- movdqa xmm5,XMMWORD PTR 64[ebp]
- pxor xmm0,xmm4
- movdqa xmm1,XMMWORD PTR [ecx*1+ebx-64]
-DB 102,15,56,0,234
- movdqa xmm2,XMMWORD PTR 80[ebp]
- movdqa xmm4,XMMWORD PTR [ecx*1+ebx]
-DB 102,15,56,0,211
- movdqa xmm3,xmm0
- pxor xmm2,xmm5
-DB 102,15,56,0,193
- add edx,16
- pxor xmm0,xmm2
-DB 102,15,56,0,220
- add ecx,16
- pxor xmm3,xmm0
-DB 102,15,56,0,193
- and ecx,48
- sub eax,1
- pxor xmm0,xmm3
-$L000enc_entry:
- movdqa xmm1,xmm6
- movdqa xmm5,XMMWORD PTR [ebp-32]
- pandn xmm1,xmm0
- psrld xmm1,4
- pand xmm0,xmm6
-DB 102,15,56,0,232
- movdqa xmm3,xmm7
- pxor xmm0,xmm1
-DB 102,15,56,0,217
- movdqa xmm4,xmm7
- pxor xmm3,xmm5
-DB 102,15,56,0,224
- movdqa xmm2,xmm7
- pxor xmm4,xmm5
-DB 102,15,56,0,211
- movdqa xmm3,xmm7
- pxor xmm2,xmm0
-DB 102,15,56,0,220
- movdqu xmm5,XMMWORD PTR [edx]
- pxor xmm3,xmm1
- jnz $L001enc_loop
- movdqa xmm4,XMMWORD PTR 96[ebp]
- movdqa xmm0,XMMWORD PTR 112[ebp]
-DB 102,15,56,0,226
- pxor xmm4,xmm5
-DB 102,15,56,0,195
- movdqa xmm1,XMMWORD PTR 64[ecx*1+ebx]
- pxor xmm0,xmm4
-DB 102,15,56,0,193
- ret
-__vpaes_encrypt_core ENDP
-ALIGN 16
-__vpaes_decrypt_core PROC PRIVATE
- lea ebx,DWORD PTR 608[ebp]
- mov eax,DWORD PTR 240[edx]
- movdqa xmm1,xmm6
- movdqa xmm2,XMMWORD PTR [ebx-64]
- pandn xmm1,xmm0
- mov ecx,eax
- psrld xmm1,4
- movdqu xmm5,XMMWORD PTR [edx]
- shl ecx,4
- pand xmm0,xmm6
-DB 102,15,56,0,208
- movdqa xmm0,XMMWORD PTR [ebx-48]
- xor ecx,48
-DB 102,15,56,0,193
- and ecx,48
- pxor xmm2,xmm5
- movdqa xmm5,XMMWORD PTR 176[ebp]
- pxor xmm0,xmm2
- add edx,16
- lea ecx,DWORD PTR [ecx*1+ebx-352]
- jmp $L002dec_entry
-ALIGN 16
-$L003dec_loop:
- movdqa xmm4,XMMWORD PTR [ebx-32]
- movdqa xmm1,XMMWORD PTR [ebx-16]
-DB 102,15,56,0,226
-DB 102,15,56,0,203
- pxor xmm0,xmm4
- movdqa xmm4,XMMWORD PTR [ebx]
- pxor xmm0,xmm1
- movdqa xmm1,XMMWORD PTR 16[ebx]
-DB 102,15,56,0,226
-DB 102,15,56,0,197
-DB 102,15,56,0,203
- pxor xmm0,xmm4
- movdqa xmm4,XMMWORD PTR 32[ebx]
- pxor xmm0,xmm1
- movdqa xmm1,XMMWORD PTR 48[ebx]
-DB 102,15,56,0,226
-DB 102,15,56,0,197
-DB 102,15,56,0,203
- pxor xmm0,xmm4
- movdqa xmm4,XMMWORD PTR 64[ebx]
- pxor xmm0,xmm1
- movdqa xmm1,XMMWORD PTR 80[ebx]
-DB 102,15,56,0,226
-DB 102,15,56,0,197
-DB 102,15,56,0,203
- pxor xmm0,xmm4
- add edx,16
-DB 102,15,58,15,237,12
- pxor xmm0,xmm1
- sub eax,1
-$L002dec_entry:
- movdqa xmm1,xmm6
- movdqa xmm2,XMMWORD PTR [ebp-32]
- pandn xmm1,xmm0
- pand xmm0,xmm6
- psrld xmm1,4
-DB 102,15,56,0,208
- movdqa xmm3,xmm7
- pxor xmm0,xmm1
-DB 102,15,56,0,217
- movdqa xmm4,xmm7
- pxor xmm3,xmm2
-DB 102,15,56,0,224
- pxor xmm4,xmm2
- movdqa xmm2,xmm7
-DB 102,15,56,0,211
- movdqa xmm3,xmm7
- pxor xmm2,xmm0
-DB 102,15,56,0,220
- movdqu xmm0,XMMWORD PTR [edx]
- pxor xmm3,xmm1
- jnz $L003dec_loop
- movdqa xmm4,XMMWORD PTR 96[ebx]
-DB 102,15,56,0,226
- pxor xmm4,xmm0
- movdqa xmm0,XMMWORD PTR 112[ebx]
- movdqa xmm2,XMMWORD PTR [ecx]
-DB 102,15,56,0,195
- pxor xmm0,xmm4
-DB 102,15,56,0,194
- ret
-__vpaes_decrypt_core ENDP
-ALIGN 16
-__vpaes_schedule_core PROC PRIVATE
- add ebp,DWORD PTR [esp]
- movdqu xmm0,XMMWORD PTR [esi]
- movdqa xmm2,XMMWORD PTR 320[ebp]
- movdqa xmm3,xmm0
- lea ebx,DWORD PTR [ebp]
- movdqa XMMWORD PTR 4[esp],xmm2
- call __vpaes_schedule_transform
- movdqa xmm7,xmm0
- test edi,edi
- jnz $L004schedule_am_decrypting
- movdqu XMMWORD PTR [edx],xmm0
- jmp $L005schedule_go
-$L004schedule_am_decrypting:
- movdqa xmm1,XMMWORD PTR 256[ecx*1+ebp]
-DB 102,15,56,0,217
- movdqu XMMWORD PTR [edx],xmm3
- xor ecx,48
-$L005schedule_go:
- cmp eax,192
- ja $L006schedule_256
- je $L007schedule_192
-$L008schedule_128:
- mov eax,10
-$L009loop_schedule_128:
- call __vpaes_schedule_round
- dec eax
- jz $L010schedule_mangle_last
- call __vpaes_schedule_mangle
- jmp $L009loop_schedule_128
-ALIGN 16
-$L007schedule_192:
- movdqu xmm0,XMMWORD PTR 8[esi]
- call __vpaes_schedule_transform
- movdqa xmm6,xmm0
- pxor xmm4,xmm4
- movhlps xmm6,xmm4
- mov eax,4
-$L011loop_schedule_192:
- call __vpaes_schedule_round
-DB 102,15,58,15,198,8
- call __vpaes_schedule_mangle
- call __vpaes_schedule_192_smear
- call __vpaes_schedule_mangle
- call __vpaes_schedule_round
- dec eax
- jz $L010schedule_mangle_last
- call __vpaes_schedule_mangle
- call __vpaes_schedule_192_smear
- jmp $L011loop_schedule_192
-ALIGN 16
-$L006schedule_256:
- movdqu xmm0,XMMWORD PTR 16[esi]
- call __vpaes_schedule_transform
- mov eax,7
-$L012loop_schedule_256:
- call __vpaes_schedule_mangle
- movdqa xmm6,xmm0
- call __vpaes_schedule_round
- dec eax
- jz $L010schedule_mangle_last
- call __vpaes_schedule_mangle
- pshufd xmm0,xmm0,255
- movdqa XMMWORD PTR 20[esp],xmm7
- movdqa xmm7,xmm6
- call $L_vpaes_schedule_low_round
- movdqa xmm7,XMMWORD PTR 20[esp]
- jmp $L012loop_schedule_256
-ALIGN 16
-$L010schedule_mangle_last:
- lea ebx,DWORD PTR 384[ebp]
- test edi,edi
- jnz $L013schedule_mangle_last_dec
- movdqa xmm1,XMMWORD PTR 256[ecx*1+ebp]
-DB 102,15,56,0,193
- lea ebx,DWORD PTR 352[ebp]
- add edx,32
-$L013schedule_mangle_last_dec:
- add edx,-16
- pxor xmm0,XMMWORD PTR 336[ebp]
- call __vpaes_schedule_transform
- movdqu XMMWORD PTR [edx],xmm0
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- pxor xmm6,xmm6
- pxor xmm7,xmm7
- ret
-__vpaes_schedule_core ENDP
-ALIGN 16
-__vpaes_schedule_192_smear PROC PRIVATE
- pshufd xmm1,xmm6,128
- pshufd xmm0,xmm7,254
- pxor xmm6,xmm1
- pxor xmm1,xmm1
- pxor xmm6,xmm0
- movdqa xmm0,xmm6
- movhlps xmm6,xmm1
- ret
-__vpaes_schedule_192_smear ENDP
-ALIGN 16
-__vpaes_schedule_round PROC PRIVATE
- movdqa xmm2,XMMWORD PTR 8[esp]
- pxor xmm1,xmm1
-DB 102,15,58,15,202,15
-DB 102,15,58,15,210,15
- pxor xmm7,xmm1
- pshufd xmm0,xmm0,255
-DB 102,15,58,15,192,1
- movdqa XMMWORD PTR 8[esp],xmm2
-$L_vpaes_schedule_low_round::
- movdqa xmm1,xmm7
- pslldq xmm7,4
- pxor xmm7,xmm1
- movdqa xmm1,xmm7
- pslldq xmm7,8
- pxor xmm7,xmm1
- pxor xmm7,XMMWORD PTR 336[ebp]
- movdqa xmm4,XMMWORD PTR [ebp-16]
- movdqa xmm5,XMMWORD PTR [ebp-48]
- movdqa xmm1,xmm4
- pandn xmm1,xmm0
- psrld xmm1,4
- pand xmm0,xmm4
- movdqa xmm2,XMMWORD PTR [ebp-32]
-DB 102,15,56,0,208
- pxor xmm0,xmm1
- movdqa xmm3,xmm5
-DB 102,15,56,0,217
- pxor xmm3,xmm2
- movdqa xmm4,xmm5
-DB 102,15,56,0,224
- pxor xmm4,xmm2
- movdqa xmm2,xmm5
-DB 102,15,56,0,211
- pxor xmm2,xmm0
- movdqa xmm3,xmm5
-DB 102,15,56,0,220
- pxor xmm3,xmm1
- movdqa xmm4,XMMWORD PTR 32[ebp]
-DB 102,15,56,0,226
- movdqa xmm0,XMMWORD PTR 48[ebp]
-DB 102,15,56,0,195
- pxor xmm0,xmm4
- pxor xmm0,xmm7
- movdqa xmm7,xmm0
- ret
-__vpaes_schedule_round ENDP
-ALIGN 16
-__vpaes_schedule_transform PROC PRIVATE
- movdqa xmm2,XMMWORD PTR [ebp-16]
- movdqa xmm1,xmm2
- pandn xmm1,xmm0
- psrld xmm1,4
- pand xmm0,xmm2
- movdqa xmm2,XMMWORD PTR [ebx]
-DB 102,15,56,0,208
- movdqa xmm0,XMMWORD PTR 16[ebx]
-DB 102,15,56,0,193
- pxor xmm0,xmm2
- ret
-__vpaes_schedule_transform ENDP
-ALIGN 16
-__vpaes_schedule_mangle PROC PRIVATE
- movdqa xmm4,xmm0
- movdqa xmm5,XMMWORD PTR 128[ebp]
- test edi,edi
- jnz $L014schedule_mangle_dec
- add edx,16
- pxor xmm4,XMMWORD PTR 336[ebp]
-DB 102,15,56,0,229
- movdqa xmm3,xmm4
-DB 102,15,56,0,229
- pxor xmm3,xmm4
-DB 102,15,56,0,229
- pxor xmm3,xmm4
- jmp $L015schedule_mangle_both
-ALIGN 16
-$L014schedule_mangle_dec:
- movdqa xmm2,XMMWORD PTR [ebp-16]
- lea esi,DWORD PTR 416[ebp]
- movdqa xmm1,xmm2
- pandn xmm1,xmm4
- psrld xmm1,4
- pand xmm4,xmm2
- movdqa xmm2,XMMWORD PTR [esi]
-DB 102,15,56,0,212
- movdqa xmm3,XMMWORD PTR 16[esi]
-DB 102,15,56,0,217
- pxor xmm3,xmm2
-DB 102,15,56,0,221
- movdqa xmm2,XMMWORD PTR 32[esi]
-DB 102,15,56,0,212
- pxor xmm2,xmm3
- movdqa xmm3,XMMWORD PTR 48[esi]
-DB 102,15,56,0,217
- pxor xmm3,xmm2
-DB 102,15,56,0,221
- movdqa xmm2,XMMWORD PTR 64[esi]
-DB 102,15,56,0,212
- pxor xmm2,xmm3
- movdqa xmm3,XMMWORD PTR 80[esi]
-DB 102,15,56,0,217
- pxor xmm3,xmm2
-DB 102,15,56,0,221
- movdqa xmm2,XMMWORD PTR 96[esi]
-DB 102,15,56,0,212
- pxor xmm2,xmm3
- movdqa xmm3,XMMWORD PTR 112[esi]
-DB 102,15,56,0,217
- pxor xmm3,xmm2
- add edx,-16
-$L015schedule_mangle_both:
- movdqa xmm1,XMMWORD PTR 256[ecx*1+ebp]
-DB 102,15,56,0,217
- add ecx,-16
- and ecx,48
- movdqu XMMWORD PTR [edx],xmm3
- ret
-__vpaes_schedule_mangle ENDP
-ALIGN 16
-_vpaes_set_encrypt_key PROC PUBLIC
-$L_vpaes_set_encrypt_key_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- lea ebx,DWORD PTR [esp-56]
- mov eax,DWORD PTR 24[esp]
- and ebx,-16
- mov edx,DWORD PTR 28[esp]
- xchg ebx,esp
- mov DWORD PTR 48[esp],ebx
- mov ebx,eax
- shr ebx,5
- add ebx,5
- mov DWORD PTR 240[edx],ebx
- mov ecx,48
- mov edi,0
- mov ebp,OFFSET ($L_vpaes_consts+030h-$L016pic_point)
- call __vpaes_schedule_core
-$L016pic_point:
- mov esp,DWORD PTR 48[esp]
- xor eax,eax
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_vpaes_set_encrypt_key ENDP
-ALIGN 16
-_vpaes_set_decrypt_key PROC PUBLIC
-$L_vpaes_set_decrypt_key_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- lea ebx,DWORD PTR [esp-56]
- mov eax,DWORD PTR 24[esp]
- and ebx,-16
- mov edx,DWORD PTR 28[esp]
- xchg ebx,esp
- mov DWORD PTR 48[esp],ebx
- mov ebx,eax
- shr ebx,5
- add ebx,5
- mov DWORD PTR 240[edx],ebx
- shl ebx,4
- lea edx,DWORD PTR 16[ebx*1+edx]
- mov edi,1
- mov ecx,eax
- shr ecx,1
- and ecx,32
- xor ecx,32
- mov ebp,OFFSET ($L_vpaes_consts+030h-$L017pic_point)
- call __vpaes_schedule_core
-$L017pic_point:
- mov esp,DWORD PTR 48[esp]
- xor eax,eax
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_vpaes_set_decrypt_key ENDP
-ALIGN 16
-_vpaes_encrypt PROC PUBLIC
-$L_vpaes_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov ebp,OFFSET ($L_vpaes_consts+030h-$L018pic_point)
- call __vpaes_preheat
-$L018pic_point:
- mov esi,DWORD PTR 20[esp]
- lea ebx,DWORD PTR [esp-56]
- mov edi,DWORD PTR 24[esp]
- and ebx,-16
- mov edx,DWORD PTR 28[esp]
- xchg ebx,esp
- mov DWORD PTR 48[esp],ebx
- movdqu xmm0,XMMWORD PTR [esi]
- call __vpaes_encrypt_core
- movdqu XMMWORD PTR [edi],xmm0
- mov esp,DWORD PTR 48[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_vpaes_encrypt ENDP
-ALIGN 16
-_vpaes_decrypt PROC PUBLIC
-$L_vpaes_decrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov ebp,OFFSET ($L_vpaes_consts+030h-$L019pic_point)
- call __vpaes_preheat
-$L019pic_point:
- mov esi,DWORD PTR 20[esp]
- lea ebx,DWORD PTR [esp-56]
- mov edi,DWORD PTR 24[esp]
- and ebx,-16
- mov edx,DWORD PTR 28[esp]
- xchg ebx,esp
- mov DWORD PTR 48[esp],ebx
- movdqu xmm0,XMMWORD PTR [esi]
- call __vpaes_decrypt_core
- movdqu XMMWORD PTR [edi],xmm0
- mov esp,DWORD PTR 48[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_vpaes_decrypt ENDP
-ALIGN 16
-_vpaes_cbc_encrypt PROC PUBLIC
-$L_vpaes_cbc_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- sub eax,16
- jc $L020cbc_abort
- lea ebx,DWORD PTR [esp-56]
- mov ebp,DWORD PTR 36[esp]
- and ebx,-16
- mov ecx,DWORD PTR 40[esp]
- xchg ebx,esp
- movdqu xmm1,XMMWORD PTR [ebp]
- sub edi,esi
- mov DWORD PTR 48[esp],ebx
- mov DWORD PTR [esp],edi
- mov DWORD PTR 4[esp],edx
- mov DWORD PTR 8[esp],ebp
- mov edi,eax
- mov ebp,OFFSET ($L_vpaes_consts+030h-$L021pic_point)
- call __vpaes_preheat
-$L021pic_point:
- cmp ecx,0
- je $L022cbc_dec_loop
- jmp $L023cbc_enc_loop
-ALIGN 16
-$L023cbc_enc_loop:
- movdqu xmm0,XMMWORD PTR [esi]
- pxor xmm0,xmm1
- call __vpaes_encrypt_core
- mov ebx,DWORD PTR [esp]
- mov edx,DWORD PTR 4[esp]
- movdqa xmm1,xmm0
- movdqu XMMWORD PTR [esi*1+ebx],xmm0
- lea esi,DWORD PTR 16[esi]
- sub edi,16
- jnc $L023cbc_enc_loop
- jmp $L024cbc_done
-ALIGN 16
-$L022cbc_dec_loop:
- movdqu xmm0,XMMWORD PTR [esi]
- movdqa XMMWORD PTR 16[esp],xmm1
- movdqa XMMWORD PTR 32[esp],xmm0
- call __vpaes_decrypt_core
- mov ebx,DWORD PTR [esp]
- mov edx,DWORD PTR 4[esp]
- pxor xmm0,XMMWORD PTR 16[esp]
- movdqa xmm1,XMMWORD PTR 32[esp]
- movdqu XMMWORD PTR [esi*1+ebx],xmm0
- lea esi,DWORD PTR 16[esi]
- sub edi,16
- jnc $L022cbc_dec_loop
-$L024cbc_done:
- mov ebx,DWORD PTR 8[esp]
- mov esp,DWORD PTR 48[esp]
- movdqu XMMWORD PTR [ebx],xmm1
-$L020cbc_abort:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_vpaes_cbc_encrypt ENDP
-.text$ ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN 64
+$L_vpaes_consts::
+DD 218628480,235210255,168496130,67568393
+DD 252381056,17041926,33884169,51187212
+DD 252645135,252645135,252645135,252645135
+DD 1512730624,3266504856,1377990664,3401244816
+DD 830229760,1275146365,2969422977,3447763452
+DD 3411033600,2979783055,338359620,2782886510
+DD 4209124096,907596821,221174255,1006095553
+DD 191964160,3799684038,3164090317,1589111125
+DD 182528256,1777043520,2877432650,3265356744
+DD 1874708224,3503451415,3305285752,363511674
+DD 1606117888,3487855781,1093350906,2384367825
+DD 197121,67569157,134941193,202313229
+DD 67569157,134941193,202313229,197121
+DD 134941193,202313229,197121,67569157
+DD 202313229,197121,67569157,134941193
+DD 33619971,100992007,168364043,235736079
+DD 235736079,33619971,100992007,168364043
+DD 168364043,235736079,33619971,100992007
+DD 100992007,168364043,235736079,33619971
+DD 50462976,117835012,185207048,252579084
+DD 252314880,51251460,117574920,184942860
+DD 184682752,252054788,50987272,118359308
+DD 118099200,185467140,251790600,50727180
+DD 2946363062,528716217,1300004225,1881839624
+DD 1532713819,1532713819,1532713819,1532713819
+DD 3602276352,4288629033,3737020424,4153884961
+DD 1354558464,32357713,2958822624,3775749553
+DD 1201988352,132424512,1572796698,503232858
+DD 2213177600,1597421020,4103937655,675398315
+DD 2749646592,4273543773,1511898873,121693092
+DD 3040248576,1103263732,2871565598,1608280554
+DD 2236667136,2588920351,482954393,64377734
+DD 3069987328,291237287,2117370568,3650299247
+DD 533321216,3573750986,2572112006,1401264716
+DD 1339849704,2721158661,548607111,3445553514
+DD 2128193280,3054596040,2183486460,1257083700
+DD 655635200,1165381986,3923443150,2344132524
+DD 190078720,256924420,290342170,357187870
+DD 1610966272,2263057382,4103205268,309794674
+DD 2592527872,2233205587,1335446729,3402964816
+DD 3973531904,3225098121,3002836325,1918774430
+DD 3870401024,2102906079,2284471353,4117666579
+DD 617007872,1021508343,366931923,691083277
+DD 2528395776,3491914898,2968704004,1613121270
+DD 3445188352,3247741094,844474987,4093578302
+DD 651481088,1190302358,1689581232,574775300
+DD 4289380608,206939853,2555985458,2489840491
+DD 2130264064,327674451,3566485037,3349835193
+DD 2470714624,316102159,3636825756,3393945945
+DB 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
+DB 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
+DB 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
+DB 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
+DB 118,101,114,115,105,116,121,41,0
+ALIGN 64
+ALIGN 16
+__vpaes_preheat PROC PRIVATE
+ add ebp,DWORD PTR [esp]
+ movdqa xmm7,XMMWORD PTR [ebp-48]
+ movdqa xmm6,XMMWORD PTR [ebp-16]
+ ret
+__vpaes_preheat ENDP
+ALIGN 16
+__vpaes_encrypt_core PROC PRIVATE
+ mov ecx,16
+ mov eax,DWORD PTR 240[edx]
+ movdqa xmm1,xmm6
+ movdqa xmm2,XMMWORD PTR [ebp]
+ pandn xmm1,xmm0
+ pand xmm0,xmm6
+ movdqu xmm5,XMMWORD PTR [edx]
+DB 102,15,56,0,208
+ movdqa xmm0,XMMWORD PTR 16[ebp]
+ pxor xmm2,xmm5
+ psrld xmm1,4
+ add edx,16
+DB 102,15,56,0,193
+ lea ebx,DWORD PTR 192[ebp]
+ pxor xmm0,xmm2
+ jmp $L000enc_entry
+ALIGN 16
+$L001enc_loop:
+ movdqa xmm4,XMMWORD PTR 32[ebp]
+ movdqa xmm0,XMMWORD PTR 48[ebp]
+DB 102,15,56,0,226
+DB 102,15,56,0,195
+ pxor xmm4,xmm5
+ movdqa xmm5,XMMWORD PTR 64[ebp]
+ pxor xmm0,xmm4
+ movdqa xmm1,XMMWORD PTR [ecx*1+ebx-64]
+DB 102,15,56,0,234
+ movdqa xmm2,XMMWORD PTR 80[ebp]
+ movdqa xmm4,XMMWORD PTR [ecx*1+ebx]
+DB 102,15,56,0,211
+ movdqa xmm3,xmm0
+ pxor xmm2,xmm5
+DB 102,15,56,0,193
+ add edx,16
+ pxor xmm0,xmm2
+DB 102,15,56,0,220
+ add ecx,16
+ pxor xmm3,xmm0
+DB 102,15,56,0,193
+ and ecx,48
+ sub eax,1
+ pxor xmm0,xmm3
+$L000enc_entry:
+ movdqa xmm1,xmm6
+ movdqa xmm5,XMMWORD PTR [ebp-32]
+ pandn xmm1,xmm0
+ psrld xmm1,4
+ pand xmm0,xmm6
+DB 102,15,56,0,232
+ movdqa xmm3,xmm7
+ pxor xmm0,xmm1
+DB 102,15,56,0,217
+ movdqa xmm4,xmm7
+ pxor xmm3,xmm5
+DB 102,15,56,0,224
+ movdqa xmm2,xmm7
+ pxor xmm4,xmm5
+DB 102,15,56,0,211
+ movdqa xmm3,xmm7
+ pxor xmm2,xmm0
+DB 102,15,56,0,220
+ movdqu xmm5,XMMWORD PTR [edx]
+ pxor xmm3,xmm1
+ jnz $L001enc_loop
+ movdqa xmm4,XMMWORD PTR 96[ebp]
+ movdqa xmm0,XMMWORD PTR 112[ebp]
+DB 102,15,56,0,226
+ pxor xmm4,xmm5
+DB 102,15,56,0,195
+ movdqa xmm1,XMMWORD PTR 64[ecx*1+ebx]
+ pxor xmm0,xmm4
+DB 102,15,56,0,193
+ ret
+__vpaes_encrypt_core ENDP
+ALIGN 16
+__vpaes_decrypt_core PROC PRIVATE
+ lea ebx,DWORD PTR 608[ebp]
+ mov eax,DWORD PTR 240[edx]
+ movdqa xmm1,xmm6
+ movdqa xmm2,XMMWORD PTR [ebx-64]
+ pandn xmm1,xmm0
+ mov ecx,eax
+ psrld xmm1,4
+ movdqu xmm5,XMMWORD PTR [edx]
+ shl ecx,4
+ pand xmm0,xmm6
+DB 102,15,56,0,208
+ movdqa xmm0,XMMWORD PTR [ebx-48]
+ xor ecx,48
+DB 102,15,56,0,193
+ and ecx,48
+ pxor xmm2,xmm5
+ movdqa xmm5,XMMWORD PTR 176[ebp]
+ pxor xmm0,xmm2
+ add edx,16
+ lea ecx,DWORD PTR [ecx*1+ebx-352]
+ jmp $L002dec_entry
+ALIGN 16
+$L003dec_loop:
+ movdqa xmm4,XMMWORD PTR [ebx-32]
+ movdqa xmm1,XMMWORD PTR [ebx-16]
+DB 102,15,56,0,226
+DB 102,15,56,0,203
+ pxor xmm0,xmm4
+ movdqa xmm4,XMMWORD PTR [ebx]
+ pxor xmm0,xmm1
+ movdqa xmm1,XMMWORD PTR 16[ebx]
+DB 102,15,56,0,226
+DB 102,15,56,0,197
+DB 102,15,56,0,203
+ pxor xmm0,xmm4
+ movdqa xmm4,XMMWORD PTR 32[ebx]
+ pxor xmm0,xmm1
+ movdqa xmm1,XMMWORD PTR 48[ebx]
+DB 102,15,56,0,226
+DB 102,15,56,0,197
+DB 102,15,56,0,203
+ pxor xmm0,xmm4
+ movdqa xmm4,XMMWORD PTR 64[ebx]
+ pxor xmm0,xmm1
+ movdqa xmm1,XMMWORD PTR 80[ebx]
+DB 102,15,56,0,226
+DB 102,15,56,0,197
+DB 102,15,56,0,203
+ pxor xmm0,xmm4
+ add edx,16
+DB 102,15,58,15,237,12
+ pxor xmm0,xmm1
+ sub eax,1
+$L002dec_entry:
+ movdqa xmm1,xmm6
+ movdqa xmm2,XMMWORD PTR [ebp-32]
+ pandn xmm1,xmm0
+ pand xmm0,xmm6
+ psrld xmm1,4
+DB 102,15,56,0,208
+ movdqa xmm3,xmm7
+ pxor xmm0,xmm1
+DB 102,15,56,0,217
+ movdqa xmm4,xmm7
+ pxor xmm3,xmm2
+DB 102,15,56,0,224
+ pxor xmm4,xmm2
+ movdqa xmm2,xmm7
+DB 102,15,56,0,211
+ movdqa xmm3,xmm7
+ pxor xmm2,xmm0
+DB 102,15,56,0,220
+ movdqu xmm0,XMMWORD PTR [edx]
+ pxor xmm3,xmm1
+ jnz $L003dec_loop
+ movdqa xmm4,XMMWORD PTR 96[ebx]
+DB 102,15,56,0,226
+ pxor xmm4,xmm0
+ movdqa xmm0,XMMWORD PTR 112[ebx]
+ movdqa xmm2,XMMWORD PTR [ecx]
+DB 102,15,56,0,195
+ pxor xmm0,xmm4
+DB 102,15,56,0,194
+ ret
+__vpaes_decrypt_core ENDP
+ALIGN 16
+__vpaes_schedule_core PROC PRIVATE
+ add ebp,DWORD PTR [esp]
+ movdqu xmm0,XMMWORD PTR [esi]
+ movdqa xmm2,XMMWORD PTR 320[ebp]
+ movdqa xmm3,xmm0
+ lea ebx,DWORD PTR [ebp]
+ movdqa XMMWORD PTR 4[esp],xmm2
+ call __vpaes_schedule_transform
+ movdqa xmm7,xmm0
+ test edi,edi
+ jnz $L004schedule_am_decrypting
+ movdqu XMMWORD PTR [edx],xmm0
+ jmp $L005schedule_go
+$L004schedule_am_decrypting:
+ movdqa xmm1,XMMWORD PTR 256[ecx*1+ebp]
+DB 102,15,56,0,217
+ movdqu XMMWORD PTR [edx],xmm3
+ xor ecx,48
+$L005schedule_go:
+ cmp eax,192
+ ja $L006schedule_256
+ je $L007schedule_192
+$L008schedule_128:
+ mov eax,10
+$L009loop_schedule_128:
+ call __vpaes_schedule_round
+ dec eax
+ jz $L010schedule_mangle_last
+ call __vpaes_schedule_mangle
+ jmp $L009loop_schedule_128
+ALIGN 16
+$L007schedule_192:
+ movdqu xmm0,XMMWORD PTR 8[esi]
+ call __vpaes_schedule_transform
+ movdqa xmm6,xmm0
+ pxor xmm4,xmm4
+ movhlps xmm6,xmm4
+ mov eax,4
+$L011loop_schedule_192:
+ call __vpaes_schedule_round
+DB 102,15,58,15,198,8
+ call __vpaes_schedule_mangle
+ call __vpaes_schedule_192_smear
+ call __vpaes_schedule_mangle
+ call __vpaes_schedule_round
+ dec eax
+ jz $L010schedule_mangle_last
+ call __vpaes_schedule_mangle
+ call __vpaes_schedule_192_smear
+ jmp $L011loop_schedule_192
+ALIGN 16
+$L006schedule_256:
+ movdqu xmm0,XMMWORD PTR 16[esi]
+ call __vpaes_schedule_transform
+ mov eax,7
+$L012loop_schedule_256:
+ call __vpaes_schedule_mangle
+ movdqa xmm6,xmm0
+ call __vpaes_schedule_round
+ dec eax
+ jz $L010schedule_mangle_last
+ call __vpaes_schedule_mangle
+ pshufd xmm0,xmm0,255
+ movdqa XMMWORD PTR 20[esp],xmm7
+ movdqa xmm7,xmm6
+ call $L_vpaes_schedule_low_round
+ movdqa xmm7,XMMWORD PTR 20[esp]
+ jmp $L012loop_schedule_256
+ALIGN 16
+$L010schedule_mangle_last:
+ lea ebx,DWORD PTR 384[ebp]
+ test edi,edi
+ jnz $L013schedule_mangle_last_dec
+ movdqa xmm1,XMMWORD PTR 256[ecx*1+ebp]
+DB 102,15,56,0,193
+ lea ebx,DWORD PTR 352[ebp]
+ add edx,32
+$L013schedule_mangle_last_dec:
+ add edx,-16
+ pxor xmm0,XMMWORD PTR 336[ebp]
+ call __vpaes_schedule_transform
+ movdqu XMMWORD PTR [edx],xmm0
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ pxor xmm6,xmm6
+ pxor xmm7,xmm7
+ ret
+__vpaes_schedule_core ENDP
+ALIGN 16
+__vpaes_schedule_192_smear PROC PRIVATE
+ pshufd xmm1,xmm6,128
+ pshufd xmm0,xmm7,254
+ pxor xmm6,xmm1
+ pxor xmm1,xmm1
+ pxor xmm6,xmm0
+ movdqa xmm0,xmm6
+ movhlps xmm6,xmm1
+ ret
+__vpaes_schedule_192_smear ENDP
+ALIGN 16
+__vpaes_schedule_round PROC PRIVATE
+ movdqa xmm2,XMMWORD PTR 8[esp]
+ pxor xmm1,xmm1
+DB 102,15,58,15,202,15
+DB 102,15,58,15,210,15
+ pxor xmm7,xmm1
+ pshufd xmm0,xmm0,255
+DB 102,15,58,15,192,1
+ movdqa XMMWORD PTR 8[esp],xmm2
+$L_vpaes_schedule_low_round::
+ movdqa xmm1,xmm7
+ pslldq xmm7,4
+ pxor xmm7,xmm1
+ movdqa xmm1,xmm7
+ pslldq xmm7,8
+ pxor xmm7,xmm1
+ pxor xmm7,XMMWORD PTR 336[ebp]
+ movdqa xmm4,XMMWORD PTR [ebp-16]
+ movdqa xmm5,XMMWORD PTR [ebp-48]
+ movdqa xmm1,xmm4
+ pandn xmm1,xmm0
+ psrld xmm1,4
+ pand xmm0,xmm4
+ movdqa xmm2,XMMWORD PTR [ebp-32]
+DB 102,15,56,0,208
+ pxor xmm0,xmm1
+ movdqa xmm3,xmm5
+DB 102,15,56,0,217
+ pxor xmm3,xmm2
+ movdqa xmm4,xmm5
+DB 102,15,56,0,224
+ pxor xmm4,xmm2
+ movdqa xmm2,xmm5
+DB 102,15,56,0,211
+ pxor xmm2,xmm0
+ movdqa xmm3,xmm5
+DB 102,15,56,0,220
+ pxor xmm3,xmm1
+ movdqa xmm4,XMMWORD PTR 32[ebp]
+DB 102,15,56,0,226
+ movdqa xmm0,XMMWORD PTR 48[ebp]
+DB 102,15,56,0,195
+ pxor xmm0,xmm4
+ pxor xmm0,xmm7
+ movdqa xmm7,xmm0
+ ret
+__vpaes_schedule_round ENDP
+ALIGN 16
+__vpaes_schedule_transform PROC PRIVATE
+ movdqa xmm2,XMMWORD PTR [ebp-16]
+ movdqa xmm1,xmm2
+ pandn xmm1,xmm0
+ psrld xmm1,4
+ pand xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR [ebx]
+DB 102,15,56,0,208
+ movdqa xmm0,XMMWORD PTR 16[ebx]
+DB 102,15,56,0,193
+ pxor xmm0,xmm2
+ ret
+__vpaes_schedule_transform ENDP
+ALIGN 16
+__vpaes_schedule_mangle PROC PRIVATE
+ movdqa xmm4,xmm0
+ movdqa xmm5,XMMWORD PTR 128[ebp]
+ test edi,edi
+ jnz $L014schedule_mangle_dec
+ add edx,16
+ pxor xmm4,XMMWORD PTR 336[ebp]
+DB 102,15,56,0,229
+ movdqa xmm3,xmm4
+DB 102,15,56,0,229
+ pxor xmm3,xmm4
+DB 102,15,56,0,229
+ pxor xmm3,xmm4
+ jmp $L015schedule_mangle_both
+ALIGN 16
+$L014schedule_mangle_dec:
+ movdqa xmm2,XMMWORD PTR [ebp-16]
+ lea esi,DWORD PTR 416[ebp]
+ movdqa xmm1,xmm2
+ pandn xmm1,xmm4
+ psrld xmm1,4
+ pand xmm4,xmm2
+ movdqa xmm2,XMMWORD PTR [esi]
+DB 102,15,56,0,212
+ movdqa xmm3,XMMWORD PTR 16[esi]
+DB 102,15,56,0,217
+ pxor xmm3,xmm2
+DB 102,15,56,0,221
+ movdqa xmm2,XMMWORD PTR 32[esi]
+DB 102,15,56,0,212
+ pxor xmm2,xmm3
+ movdqa xmm3,XMMWORD PTR 48[esi]
+DB 102,15,56,0,217
+ pxor xmm3,xmm2
+DB 102,15,56,0,221
+ movdqa xmm2,XMMWORD PTR 64[esi]
+DB 102,15,56,0,212
+ pxor xmm2,xmm3
+ movdqa xmm3,XMMWORD PTR 80[esi]
+DB 102,15,56,0,217
+ pxor xmm3,xmm2
+DB 102,15,56,0,221
+ movdqa xmm2,XMMWORD PTR 96[esi]
+DB 102,15,56,0,212
+ pxor xmm2,xmm3
+ movdqa xmm3,XMMWORD PTR 112[esi]
+DB 102,15,56,0,217
+ pxor xmm3,xmm2
+ add edx,-16
+$L015schedule_mangle_both:
+ movdqa xmm1,XMMWORD PTR 256[ecx*1+ebp]
+DB 102,15,56,0,217
+ add ecx,-16
+ and ecx,48
+ movdqu XMMWORD PTR [edx],xmm3
+ ret
+__vpaes_schedule_mangle ENDP
+ALIGN 16
+_vpaes_set_encrypt_key PROC PUBLIC
+$L_vpaes_set_encrypt_key_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ lea ebx,DWORD PTR [esp-56]
+ mov eax,DWORD PTR 24[esp]
+ and ebx,-16
+ mov edx,DWORD PTR 28[esp]
+ xchg ebx,esp
+ mov DWORD PTR 48[esp],ebx
+ mov ebx,eax
+ shr ebx,5
+ add ebx,5
+ mov DWORD PTR 240[edx],ebx
+ mov ecx,48
+ mov edi,0
+ mov ebp,OFFSET ($L_vpaes_consts+030h-$L016pic_point)
+ call __vpaes_schedule_core
+$L016pic_point:
+ mov esp,DWORD PTR 48[esp]
+ xor eax,eax
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_vpaes_set_encrypt_key ENDP
+ALIGN 16
+_vpaes_set_decrypt_key PROC PUBLIC
+$L_vpaes_set_decrypt_key_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ lea ebx,DWORD PTR [esp-56]
+ mov eax,DWORD PTR 24[esp]
+ and ebx,-16
+ mov edx,DWORD PTR 28[esp]
+ xchg ebx,esp
+ mov DWORD PTR 48[esp],ebx
+ mov ebx,eax
+ shr ebx,5
+ add ebx,5
+ mov DWORD PTR 240[edx],ebx
+ shl ebx,4
+ lea edx,DWORD PTR 16[ebx*1+edx]
+ mov edi,1
+ mov ecx,eax
+ shr ecx,1
+ and ecx,32
+ xor ecx,32
+ mov ebp,OFFSET ($L_vpaes_consts+030h-$L017pic_point)
+ call __vpaes_schedule_core
+$L017pic_point:
+ mov esp,DWORD PTR 48[esp]
+ xor eax,eax
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_vpaes_set_decrypt_key ENDP
+ALIGN 16
+_vpaes_encrypt PROC PUBLIC
+$L_vpaes_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov ebp,OFFSET ($L_vpaes_consts+030h-$L018pic_point)
+ call __vpaes_preheat
+$L018pic_point:
+ mov esi,DWORD PTR 20[esp]
+ lea ebx,DWORD PTR [esp-56]
+ mov edi,DWORD PTR 24[esp]
+ and ebx,-16
+ mov edx,DWORD PTR 28[esp]
+ xchg ebx,esp
+ mov DWORD PTR 48[esp],ebx
+ movdqu xmm0,XMMWORD PTR [esi]
+ call __vpaes_encrypt_core
+ movdqu XMMWORD PTR [edi],xmm0
+ mov esp,DWORD PTR 48[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_vpaes_encrypt ENDP
+ALIGN 16
+_vpaes_decrypt PROC PUBLIC
+$L_vpaes_decrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov ebp,OFFSET ($L_vpaes_consts+030h-$L019pic_point)
+ call __vpaes_preheat
+$L019pic_point:
+ mov esi,DWORD PTR 20[esp]
+ lea ebx,DWORD PTR [esp-56]
+ mov edi,DWORD PTR 24[esp]
+ and ebx,-16
+ mov edx,DWORD PTR 28[esp]
+ xchg ebx,esp
+ mov DWORD PTR 48[esp],ebx
+ movdqu xmm0,XMMWORD PTR [esi]
+ call __vpaes_decrypt_core
+ movdqu XMMWORD PTR [edi],xmm0
+ mov esp,DWORD PTR 48[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_vpaes_decrypt ENDP
+ALIGN 16
+_vpaes_cbc_encrypt PROC PUBLIC
+$L_vpaes_cbc_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ sub eax,16
+ jc $L020cbc_abort
+ lea ebx,DWORD PTR [esp-56]
+ mov ebp,DWORD PTR 36[esp]
+ and ebx,-16
+ mov ecx,DWORD PTR 40[esp]
+ xchg ebx,esp
+ movdqu xmm1,XMMWORD PTR [ebp]
+ sub edi,esi
+ mov DWORD PTR 48[esp],ebx
+ mov DWORD PTR [esp],edi
+ mov DWORD PTR 4[esp],edx
+ mov DWORD PTR 8[esp],ebp
+ mov edi,eax
+ mov ebp,OFFSET ($L_vpaes_consts+030h-$L021pic_point)
+ call __vpaes_preheat
+$L021pic_point:
+ cmp ecx,0
+ je $L022cbc_dec_loop
+ jmp $L023cbc_enc_loop
+ALIGN 16
+$L023cbc_enc_loop:
+ movdqu xmm0,XMMWORD PTR [esi]
+ pxor xmm0,xmm1
+ call __vpaes_encrypt_core
+ mov ebx,DWORD PTR [esp]
+ mov edx,DWORD PTR 4[esp]
+ movdqa xmm1,xmm0
+ movdqu XMMWORD PTR [esi*1+ebx],xmm0
+ lea esi,DWORD PTR 16[esi]
+ sub edi,16
+ jnc $L023cbc_enc_loop
+ jmp $L024cbc_done
+ALIGN 16
+$L022cbc_dec_loop:
+ movdqu xmm0,XMMWORD PTR [esi]
+ movdqa XMMWORD PTR 16[esp],xmm1
+ movdqa XMMWORD PTR 32[esp],xmm0
+ call __vpaes_decrypt_core
+ mov ebx,DWORD PTR [esp]
+ mov edx,DWORD PTR 4[esp]
+ pxor xmm0,XMMWORD PTR 16[esp]
+ movdqa xmm1,XMMWORD PTR 32[esp]
+ movdqu XMMWORD PTR [esi*1+ebx],xmm0
+ lea esi,DWORD PTR 16[esi]
+ sub edi,16
+ jnc $L022cbc_dec_loop
+$L024cbc_done:
+ mov ebx,DWORD PTR 8[esp]
+ mov esp,DWORD PTR 48[esp]
+ movdqu XMMWORD PTR [ebx],xmm1
+$L020cbc_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_vpaes_cbc_encrypt ENDP
+.text$ ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86_64.masm
index 47bd6e08be..51dc1e955d 100644
--- a/contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/aes/vpaes-x86_64.masm
@@ -1,1169 +1,1169 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ALIGN 16
-_vpaes_encrypt_core PROC PRIVATE
-
- mov r9,rdx
- mov r11,16
- mov eax,DWORD PTR[240+rdx]
- movdqa xmm1,xmm9
- movdqa xmm2,XMMWORD PTR[$L$k_ipt]
- pandn xmm1,xmm0
- movdqu xmm5,XMMWORD PTR[r9]
- psrld xmm1,4
- pand xmm0,xmm9
-DB 102,15,56,0,208
- movdqa xmm0,XMMWORD PTR[(($L$k_ipt+16))]
-DB 102,15,56,0,193
- pxor xmm2,xmm5
- add r9,16
- pxor xmm0,xmm2
- lea r10,QWORD PTR[$L$k_mc_backward]
- jmp $L$enc_entry
-
-ALIGN 16
-$L$enc_loop::
-
- movdqa xmm4,xmm13
- movdqa xmm0,xmm12
-DB 102,15,56,0,226
-DB 102,15,56,0,195
- pxor xmm4,xmm5
- movdqa xmm5,xmm15
- pxor xmm0,xmm4
- movdqa xmm1,XMMWORD PTR[((-64))+r10*1+r11]
-DB 102,15,56,0,234
- movdqa xmm4,XMMWORD PTR[r10*1+r11]
- movdqa xmm2,xmm14
-DB 102,15,56,0,211
- movdqa xmm3,xmm0
- pxor xmm2,xmm5
-DB 102,15,56,0,193
- add r9,16
- pxor xmm0,xmm2
-DB 102,15,56,0,220
- add r11,16
- pxor xmm3,xmm0
-DB 102,15,56,0,193
- and r11,030h
- sub rax,1
- pxor xmm0,xmm3
-
-$L$enc_entry::
-
- movdqa xmm1,xmm9
- movdqa xmm5,xmm11
- pandn xmm1,xmm0
- psrld xmm1,4
- pand xmm0,xmm9
-DB 102,15,56,0,232
- movdqa xmm3,xmm10
- pxor xmm0,xmm1
-DB 102,15,56,0,217
- movdqa xmm4,xmm10
- pxor xmm3,xmm5
-DB 102,15,56,0,224
- movdqa xmm2,xmm10
- pxor xmm4,xmm5
-DB 102,15,56,0,211
- movdqa xmm3,xmm10
- pxor xmm2,xmm0
-DB 102,15,56,0,220
- movdqu xmm5,XMMWORD PTR[r9]
- pxor xmm3,xmm1
- jnz $L$enc_loop
-
-
- movdqa xmm4,XMMWORD PTR[((-96))+r10]
- movdqa xmm0,XMMWORD PTR[((-80))+r10]
-DB 102,15,56,0,226
- pxor xmm4,xmm5
-DB 102,15,56,0,195
- movdqa xmm1,XMMWORD PTR[64+r10*1+r11]
- pxor xmm0,xmm4
-DB 102,15,56,0,193
- DB 0F3h,0C3h ;repret
-
-_vpaes_encrypt_core ENDP
-
-
-
-
-
-
-
-ALIGN 16
-_vpaes_decrypt_core PROC PRIVATE
-
- mov r9,rdx
- mov eax,DWORD PTR[240+rdx]
- movdqa xmm1,xmm9
- movdqa xmm2,XMMWORD PTR[$L$k_dipt]
- pandn xmm1,xmm0
- mov r11,rax
- psrld xmm1,4
- movdqu xmm5,XMMWORD PTR[r9]
- shl r11,4
- pand xmm0,xmm9
-DB 102,15,56,0,208
- movdqa xmm0,XMMWORD PTR[(($L$k_dipt+16))]
- xor r11,030h
- lea r10,QWORD PTR[$L$k_dsbd]
-DB 102,15,56,0,193
- and r11,030h
- pxor xmm2,xmm5
- movdqa xmm5,XMMWORD PTR[(($L$k_mc_forward+48))]
- pxor xmm0,xmm2
- add r9,16
- add r11,r10
- jmp $L$dec_entry
-
-ALIGN 16
-$L$dec_loop::
-
-
-
- movdqa xmm4,XMMWORD PTR[((-32))+r10]
- movdqa xmm1,XMMWORD PTR[((-16))+r10]
-DB 102,15,56,0,226
-DB 102,15,56,0,203
- pxor xmm0,xmm4
- movdqa xmm4,XMMWORD PTR[r10]
- pxor xmm0,xmm1
- movdqa xmm1,XMMWORD PTR[16+r10]
-
-DB 102,15,56,0,226
-DB 102,15,56,0,197
-DB 102,15,56,0,203
- pxor xmm0,xmm4
- movdqa xmm4,XMMWORD PTR[32+r10]
- pxor xmm0,xmm1
- movdqa xmm1,XMMWORD PTR[48+r10]
-
-DB 102,15,56,0,226
-DB 102,15,56,0,197
-DB 102,15,56,0,203
- pxor xmm0,xmm4
- movdqa xmm4,XMMWORD PTR[64+r10]
- pxor xmm0,xmm1
- movdqa xmm1,XMMWORD PTR[80+r10]
-
-DB 102,15,56,0,226
-DB 102,15,56,0,197
-DB 102,15,56,0,203
- pxor xmm0,xmm4
- add r9,16
-DB 102,15,58,15,237,12
- pxor xmm0,xmm1
- sub rax,1
-
-$L$dec_entry::
-
- movdqa xmm1,xmm9
- pandn xmm1,xmm0
- movdqa xmm2,xmm11
- psrld xmm1,4
- pand xmm0,xmm9
-DB 102,15,56,0,208
- movdqa xmm3,xmm10
- pxor xmm0,xmm1
-DB 102,15,56,0,217
- movdqa xmm4,xmm10
- pxor xmm3,xmm2
-DB 102,15,56,0,224
- pxor xmm4,xmm2
- movdqa xmm2,xmm10
-DB 102,15,56,0,211
- movdqa xmm3,xmm10
- pxor xmm2,xmm0
-DB 102,15,56,0,220
- movdqu xmm0,XMMWORD PTR[r9]
- pxor xmm3,xmm1
- jnz $L$dec_loop
-
-
- movdqa xmm4,XMMWORD PTR[96+r10]
-DB 102,15,56,0,226
- pxor xmm4,xmm0
- movdqa xmm0,XMMWORD PTR[112+r10]
- movdqa xmm2,XMMWORD PTR[((-352))+r11]
-DB 102,15,56,0,195
- pxor xmm0,xmm4
-DB 102,15,56,0,194
- DB 0F3h,0C3h ;repret
-
-_vpaes_decrypt_core ENDP
-
-
-
-
-
-
-
-ALIGN 16
-_vpaes_schedule_core PROC PRIVATE
-
-
-
-
-
-
- call _vpaes_preheat
- movdqa xmm8,XMMWORD PTR[$L$k_rcon]
- movdqu xmm0,XMMWORD PTR[rdi]
-
-
- movdqa xmm3,xmm0
- lea r11,QWORD PTR[$L$k_ipt]
- call _vpaes_schedule_transform
- movdqa xmm7,xmm0
-
- lea r10,QWORD PTR[$L$k_sr]
- test rcx,rcx
- jnz $L$schedule_am_decrypting
-
-
- movdqu XMMWORD PTR[rdx],xmm0
- jmp $L$schedule_go
-
-$L$schedule_am_decrypting::
-
- movdqa xmm1,XMMWORD PTR[r10*1+r8]
-DB 102,15,56,0,217
- movdqu XMMWORD PTR[rdx],xmm3
- xor r8,030h
-
-$L$schedule_go::
- cmp esi,192
- ja $L$schedule_256
- je $L$schedule_192
-
-
-
-
-
-
-
-
-
-
-$L$schedule_128::
- mov esi,10
-
-$L$oop_schedule_128::
- call _vpaes_schedule_round
- dec rsi
- jz $L$schedule_mangle_last
- call _vpaes_schedule_mangle
- jmp $L$oop_schedule_128
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ALIGN 16
-$L$schedule_192::
- movdqu xmm0,XMMWORD PTR[8+rdi]
- call _vpaes_schedule_transform
- movdqa xmm6,xmm0
- pxor xmm4,xmm4
- movhlps xmm6,xmm4
- mov esi,4
-
-$L$oop_schedule_192::
- call _vpaes_schedule_round
-DB 102,15,58,15,198,8
- call _vpaes_schedule_mangle
- call _vpaes_schedule_192_smear
- call _vpaes_schedule_mangle
- call _vpaes_schedule_round
- dec rsi
- jz $L$schedule_mangle_last
- call _vpaes_schedule_mangle
- call _vpaes_schedule_192_smear
- jmp $L$oop_schedule_192
-
-
-
-
-
-
-
-
-
-
-
-ALIGN 16
-$L$schedule_256::
- movdqu xmm0,XMMWORD PTR[16+rdi]
- call _vpaes_schedule_transform
- mov esi,7
-
-$L$oop_schedule_256::
- call _vpaes_schedule_mangle
- movdqa xmm6,xmm0
-
-
- call _vpaes_schedule_round
- dec rsi
- jz $L$schedule_mangle_last
- call _vpaes_schedule_mangle
-
-
- pshufd xmm0,xmm0,0FFh
- movdqa xmm5,xmm7
- movdqa xmm7,xmm6
- call _vpaes_schedule_low_round
- movdqa xmm7,xmm5
-
- jmp $L$oop_schedule_256
-
-
-
-
-
-
-
-
-
-
-
-
-ALIGN 16
-$L$schedule_mangle_last::
-
- lea r11,QWORD PTR[$L$k_deskew]
- test rcx,rcx
- jnz $L$schedule_mangle_last_dec
-
-
- movdqa xmm1,XMMWORD PTR[r10*1+r8]
-DB 102,15,56,0,193
- lea r11,QWORD PTR[$L$k_opt]
- add rdx,32
-
-$L$schedule_mangle_last_dec::
- add rdx,-16
- pxor xmm0,XMMWORD PTR[$L$k_s63]
- call _vpaes_schedule_transform
- movdqu XMMWORD PTR[rdx],xmm0
-
-
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- pxor xmm6,xmm6
- pxor xmm7,xmm7
- DB 0F3h,0C3h ;repret
-
-_vpaes_schedule_core ENDP
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ALIGN 16
-_vpaes_schedule_192_smear PROC PRIVATE
-
- pshufd xmm1,xmm6,080h
- pshufd xmm0,xmm7,0FEh
- pxor xmm6,xmm1
- pxor xmm1,xmm1
- pxor xmm6,xmm0
- movdqa xmm0,xmm6
- movhlps xmm6,xmm1
- DB 0F3h,0C3h ;repret
-
-_vpaes_schedule_192_smear ENDP
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ALIGN 16
-_vpaes_schedule_round PROC PRIVATE
-
-
- pxor xmm1,xmm1
-DB 102,65,15,58,15,200,15
-DB 102,69,15,58,15,192,15
- pxor xmm7,xmm1
-
-
- pshufd xmm0,xmm0,0FFh
-DB 102,15,58,15,192,1
-
-
-
-
-_vpaes_schedule_low_round::
-
- movdqa xmm1,xmm7
- pslldq xmm7,4
- pxor xmm7,xmm1
- movdqa xmm1,xmm7
- pslldq xmm7,8
- pxor xmm7,xmm1
- pxor xmm7,XMMWORD PTR[$L$k_s63]
-
-
- movdqa xmm1,xmm9
- pandn xmm1,xmm0
- psrld xmm1,4
- pand xmm0,xmm9
- movdqa xmm2,xmm11
-DB 102,15,56,0,208
- pxor xmm0,xmm1
- movdqa xmm3,xmm10
-DB 102,15,56,0,217
- pxor xmm3,xmm2
- movdqa xmm4,xmm10
-DB 102,15,56,0,224
- pxor xmm4,xmm2
- movdqa xmm2,xmm10
-DB 102,15,56,0,211
- pxor xmm2,xmm0
- movdqa xmm3,xmm10
-DB 102,15,56,0,220
- pxor xmm3,xmm1
- movdqa xmm4,xmm13
-DB 102,15,56,0,226
- movdqa xmm0,xmm12
-DB 102,15,56,0,195
- pxor xmm0,xmm4
-
-
- pxor xmm0,xmm7
- movdqa xmm7,xmm0
- DB 0F3h,0C3h ;repret
-
-_vpaes_schedule_round ENDP
-
-
-
-
-
-
-
-
-
-
-
-ALIGN 16
-_vpaes_schedule_transform PROC PRIVATE
-
- movdqa xmm1,xmm9
- pandn xmm1,xmm0
- psrld xmm1,4
- pand xmm0,xmm9
- movdqa xmm2,XMMWORD PTR[r11]
-DB 102,15,56,0,208
- movdqa xmm0,XMMWORD PTR[16+r11]
-DB 102,15,56,0,193
- pxor xmm0,xmm2
- DB 0F3h,0C3h ;repret
-
-_vpaes_schedule_transform ENDP
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ALIGN 16
-_vpaes_schedule_mangle PROC PRIVATE
-
- movdqa xmm4,xmm0
- movdqa xmm5,XMMWORD PTR[$L$k_mc_forward]
- test rcx,rcx
- jnz $L$schedule_mangle_dec
-
-
- add rdx,16
- pxor xmm4,XMMWORD PTR[$L$k_s63]
-DB 102,15,56,0,229
- movdqa xmm3,xmm4
-DB 102,15,56,0,229
- pxor xmm3,xmm4
-DB 102,15,56,0,229
- pxor xmm3,xmm4
-
- jmp $L$schedule_mangle_both
-ALIGN 16
-$L$schedule_mangle_dec::
-
- lea r11,QWORD PTR[$L$k_dksd]
- movdqa xmm1,xmm9
- pandn xmm1,xmm4
- psrld xmm1,4
- pand xmm4,xmm9
-
- movdqa xmm2,XMMWORD PTR[r11]
-DB 102,15,56,0,212
- movdqa xmm3,XMMWORD PTR[16+r11]
-DB 102,15,56,0,217
- pxor xmm3,xmm2
-DB 102,15,56,0,221
-
- movdqa xmm2,XMMWORD PTR[32+r11]
-DB 102,15,56,0,212
- pxor xmm2,xmm3
- movdqa xmm3,XMMWORD PTR[48+r11]
-DB 102,15,56,0,217
- pxor xmm3,xmm2
-DB 102,15,56,0,221
-
- movdqa xmm2,XMMWORD PTR[64+r11]
-DB 102,15,56,0,212
- pxor xmm2,xmm3
- movdqa xmm3,XMMWORD PTR[80+r11]
-DB 102,15,56,0,217
- pxor xmm3,xmm2
-DB 102,15,56,0,221
-
- movdqa xmm2,XMMWORD PTR[96+r11]
-DB 102,15,56,0,212
- pxor xmm2,xmm3
- movdqa xmm3,XMMWORD PTR[112+r11]
-DB 102,15,56,0,217
- pxor xmm3,xmm2
-
- add rdx,-16
-
-$L$schedule_mangle_both::
- movdqa xmm1,XMMWORD PTR[r10*1+r8]
-DB 102,15,56,0,217
- add r8,-16
- and r8,030h
- movdqu XMMWORD PTR[rdx],xmm3
- DB 0F3h,0C3h ;repret
-
-_vpaes_schedule_mangle ENDP
-
-
-
-
-PUBLIC vpaes_set_encrypt_key
-
-ALIGN 16
-vpaes_set_encrypt_key PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_vpaes_set_encrypt_key::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- lea rsp,QWORD PTR[((-184))+rsp]
- movaps XMMWORD PTR[16+rsp],xmm6
- movaps XMMWORD PTR[32+rsp],xmm7
- movaps XMMWORD PTR[48+rsp],xmm8
- movaps XMMWORD PTR[64+rsp],xmm9
- movaps XMMWORD PTR[80+rsp],xmm10
- movaps XMMWORD PTR[96+rsp],xmm11
- movaps XMMWORD PTR[112+rsp],xmm12
- movaps XMMWORD PTR[128+rsp],xmm13
- movaps XMMWORD PTR[144+rsp],xmm14
- movaps XMMWORD PTR[160+rsp],xmm15
-$L$enc_key_body::
- mov eax,esi
- shr eax,5
- add eax,5
- mov DWORD PTR[240+rdx],eax
-
- mov ecx,0
- mov r8d,030h
- call _vpaes_schedule_core
- movaps xmm6,XMMWORD PTR[16+rsp]
- movaps xmm7,XMMWORD PTR[32+rsp]
- movaps xmm8,XMMWORD PTR[48+rsp]
- movaps xmm9,XMMWORD PTR[64+rsp]
- movaps xmm10,XMMWORD PTR[80+rsp]
- movaps xmm11,XMMWORD PTR[96+rsp]
- movaps xmm12,XMMWORD PTR[112+rsp]
- movaps xmm13,XMMWORD PTR[128+rsp]
- movaps xmm14,XMMWORD PTR[144+rsp]
- movaps xmm15,XMMWORD PTR[160+rsp]
- lea rsp,QWORD PTR[184+rsp]
-$L$enc_key_epilogue::
- xor eax,eax
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_vpaes_set_encrypt_key::
-vpaes_set_encrypt_key ENDP
-
-PUBLIC vpaes_set_decrypt_key
-
-ALIGN 16
-vpaes_set_decrypt_key PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_vpaes_set_decrypt_key::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- lea rsp,QWORD PTR[((-184))+rsp]
- movaps XMMWORD PTR[16+rsp],xmm6
- movaps XMMWORD PTR[32+rsp],xmm7
- movaps XMMWORD PTR[48+rsp],xmm8
- movaps XMMWORD PTR[64+rsp],xmm9
- movaps XMMWORD PTR[80+rsp],xmm10
- movaps XMMWORD PTR[96+rsp],xmm11
- movaps XMMWORD PTR[112+rsp],xmm12
- movaps XMMWORD PTR[128+rsp],xmm13
- movaps XMMWORD PTR[144+rsp],xmm14
- movaps XMMWORD PTR[160+rsp],xmm15
-$L$dec_key_body::
- mov eax,esi
- shr eax,5
- add eax,5
- mov DWORD PTR[240+rdx],eax
- shl eax,4
- lea rdx,QWORD PTR[16+rax*1+rdx]
-
- mov ecx,1
- mov r8d,esi
- shr r8d,1
- and r8d,32
- xor r8d,32
- call _vpaes_schedule_core
- movaps xmm6,XMMWORD PTR[16+rsp]
- movaps xmm7,XMMWORD PTR[32+rsp]
- movaps xmm8,XMMWORD PTR[48+rsp]
- movaps xmm9,XMMWORD PTR[64+rsp]
- movaps xmm10,XMMWORD PTR[80+rsp]
- movaps xmm11,XMMWORD PTR[96+rsp]
- movaps xmm12,XMMWORD PTR[112+rsp]
- movaps xmm13,XMMWORD PTR[128+rsp]
- movaps xmm14,XMMWORD PTR[144+rsp]
- movaps xmm15,XMMWORD PTR[160+rsp]
- lea rsp,QWORD PTR[184+rsp]
-$L$dec_key_epilogue::
- xor eax,eax
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_vpaes_set_decrypt_key::
-vpaes_set_decrypt_key ENDP
-
-PUBLIC vpaes_encrypt
-
-ALIGN 16
-vpaes_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_vpaes_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- lea rsp,QWORD PTR[((-184))+rsp]
- movaps XMMWORD PTR[16+rsp],xmm6
- movaps XMMWORD PTR[32+rsp],xmm7
- movaps XMMWORD PTR[48+rsp],xmm8
- movaps XMMWORD PTR[64+rsp],xmm9
- movaps XMMWORD PTR[80+rsp],xmm10
- movaps XMMWORD PTR[96+rsp],xmm11
- movaps XMMWORD PTR[112+rsp],xmm12
- movaps XMMWORD PTR[128+rsp],xmm13
- movaps XMMWORD PTR[144+rsp],xmm14
- movaps XMMWORD PTR[160+rsp],xmm15
-$L$enc_body::
- movdqu xmm0,XMMWORD PTR[rdi]
- call _vpaes_preheat
- call _vpaes_encrypt_core
- movdqu XMMWORD PTR[rsi],xmm0
- movaps xmm6,XMMWORD PTR[16+rsp]
- movaps xmm7,XMMWORD PTR[32+rsp]
- movaps xmm8,XMMWORD PTR[48+rsp]
- movaps xmm9,XMMWORD PTR[64+rsp]
- movaps xmm10,XMMWORD PTR[80+rsp]
- movaps xmm11,XMMWORD PTR[96+rsp]
- movaps xmm12,XMMWORD PTR[112+rsp]
- movaps xmm13,XMMWORD PTR[128+rsp]
- movaps xmm14,XMMWORD PTR[144+rsp]
- movaps xmm15,XMMWORD PTR[160+rsp]
- lea rsp,QWORD PTR[184+rsp]
-$L$enc_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_vpaes_encrypt::
-vpaes_encrypt ENDP
-
-PUBLIC vpaes_decrypt
-
-ALIGN 16
-vpaes_decrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_vpaes_decrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- lea rsp,QWORD PTR[((-184))+rsp]
- movaps XMMWORD PTR[16+rsp],xmm6
- movaps XMMWORD PTR[32+rsp],xmm7
- movaps XMMWORD PTR[48+rsp],xmm8
- movaps XMMWORD PTR[64+rsp],xmm9
- movaps XMMWORD PTR[80+rsp],xmm10
- movaps XMMWORD PTR[96+rsp],xmm11
- movaps XMMWORD PTR[112+rsp],xmm12
- movaps XMMWORD PTR[128+rsp],xmm13
- movaps XMMWORD PTR[144+rsp],xmm14
- movaps XMMWORD PTR[160+rsp],xmm15
-$L$dec_body::
- movdqu xmm0,XMMWORD PTR[rdi]
- call _vpaes_preheat
- call _vpaes_decrypt_core
- movdqu XMMWORD PTR[rsi],xmm0
- movaps xmm6,XMMWORD PTR[16+rsp]
- movaps xmm7,XMMWORD PTR[32+rsp]
- movaps xmm8,XMMWORD PTR[48+rsp]
- movaps xmm9,XMMWORD PTR[64+rsp]
- movaps xmm10,XMMWORD PTR[80+rsp]
- movaps xmm11,XMMWORD PTR[96+rsp]
- movaps xmm12,XMMWORD PTR[112+rsp]
- movaps xmm13,XMMWORD PTR[128+rsp]
- movaps xmm14,XMMWORD PTR[144+rsp]
- movaps xmm15,XMMWORD PTR[160+rsp]
- lea rsp,QWORD PTR[184+rsp]
-$L$dec_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_vpaes_decrypt::
-vpaes_decrypt ENDP
-PUBLIC vpaes_cbc_encrypt
-
-ALIGN 16
-vpaes_cbc_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_vpaes_cbc_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- xchg rdx,rcx
- sub rcx,16
- jc $L$cbc_abort
- lea rsp,QWORD PTR[((-184))+rsp]
- movaps XMMWORD PTR[16+rsp],xmm6
- movaps XMMWORD PTR[32+rsp],xmm7
- movaps XMMWORD PTR[48+rsp],xmm8
- movaps XMMWORD PTR[64+rsp],xmm9
- movaps XMMWORD PTR[80+rsp],xmm10
- movaps XMMWORD PTR[96+rsp],xmm11
- movaps XMMWORD PTR[112+rsp],xmm12
- movaps XMMWORD PTR[128+rsp],xmm13
- movaps XMMWORD PTR[144+rsp],xmm14
- movaps XMMWORD PTR[160+rsp],xmm15
-$L$cbc_body::
- movdqu xmm6,XMMWORD PTR[r8]
- sub rsi,rdi
- call _vpaes_preheat
- cmp r9d,0
- je $L$cbc_dec_loop
- jmp $L$cbc_enc_loop
-ALIGN 16
-$L$cbc_enc_loop::
- movdqu xmm0,XMMWORD PTR[rdi]
- pxor xmm0,xmm6
- call _vpaes_encrypt_core
- movdqa xmm6,xmm0
- movdqu XMMWORD PTR[rdi*1+rsi],xmm0
- lea rdi,QWORD PTR[16+rdi]
- sub rcx,16
- jnc $L$cbc_enc_loop
- jmp $L$cbc_done
-ALIGN 16
-$L$cbc_dec_loop::
- movdqu xmm0,XMMWORD PTR[rdi]
- movdqa xmm7,xmm0
- call _vpaes_decrypt_core
- pxor xmm0,xmm6
- movdqa xmm6,xmm7
- movdqu XMMWORD PTR[rdi*1+rsi],xmm0
- lea rdi,QWORD PTR[16+rdi]
- sub rcx,16
- jnc $L$cbc_dec_loop
-$L$cbc_done::
- movdqu XMMWORD PTR[r8],xmm6
- movaps xmm6,XMMWORD PTR[16+rsp]
- movaps xmm7,XMMWORD PTR[32+rsp]
- movaps xmm8,XMMWORD PTR[48+rsp]
- movaps xmm9,XMMWORD PTR[64+rsp]
- movaps xmm10,XMMWORD PTR[80+rsp]
- movaps xmm11,XMMWORD PTR[96+rsp]
- movaps xmm12,XMMWORD PTR[112+rsp]
- movaps xmm13,XMMWORD PTR[128+rsp]
- movaps xmm14,XMMWORD PTR[144+rsp]
- movaps xmm15,XMMWORD PTR[160+rsp]
- lea rsp,QWORD PTR[184+rsp]
-$L$cbc_epilogue::
-$L$cbc_abort::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_vpaes_cbc_encrypt::
-vpaes_cbc_encrypt ENDP
-
-
-
-
-
-
-
-ALIGN 16
-_vpaes_preheat PROC PRIVATE
-
- lea r10,QWORD PTR[$L$k_s0F]
- movdqa xmm10,XMMWORD PTR[((-32))+r10]
- movdqa xmm11,XMMWORD PTR[((-16))+r10]
- movdqa xmm9,XMMWORD PTR[r10]
- movdqa xmm13,XMMWORD PTR[48+r10]
- movdqa xmm12,XMMWORD PTR[64+r10]
- movdqa xmm15,XMMWORD PTR[80+r10]
- movdqa xmm14,XMMWORD PTR[96+r10]
- DB 0F3h,0C3h ;repret
-
-_vpaes_preheat ENDP
-
-
-
-
-
-
-ALIGN 64
-_vpaes_consts::
-$L$k_inv::
- DQ 00E05060F0D080180h,0040703090A0B0C02h
- DQ 001040A060F0B0780h,0030D0E0C02050809h
-
-$L$k_s0F::
- DQ 00F0F0F0F0F0F0F0Fh,00F0F0F0F0F0F0F0Fh
-
-$L$k_ipt::
- DQ 0C2B2E8985A2A7000h,0CABAE09052227808h
- DQ 04C01307D317C4D00h,0CD80B1FCB0FDCC81h
-
-$L$k_sb1::
- DQ 0B19BE18FCB503E00h,0A5DF7A6E142AF544h
- DQ 03618D415FAE22300h,03BF7CCC10D2ED9EFh
-$L$k_sb2::
- DQ 0E27A93C60B712400h,05EB7E955BC982FCDh
- DQ 069EB88400AE12900h,0C2A163C8AB82234Ah
-$L$k_sbo::
- DQ 0D0D26D176FBDC700h,015AABF7AC502A878h
- DQ 0CFE474A55FBB6A00h,08E1E90D1412B35FAh
-
-$L$k_mc_forward::
- DQ 00407060500030201h,00C0F0E0D080B0A09h
- DQ 0080B0A0904070605h,0000302010C0F0E0Dh
- DQ 00C0F0E0D080B0A09h,00407060500030201h
- DQ 0000302010C0F0E0Dh,0080B0A0904070605h
-
-$L$k_mc_backward::
- DQ 00605040702010003h,00E0D0C0F0A09080Bh
- DQ 0020100030E0D0C0Fh,00A09080B06050407h
- DQ 00E0D0C0F0A09080Bh,00605040702010003h
- DQ 00A09080B06050407h,0020100030E0D0C0Fh
-
-$L$k_sr::
- DQ 00706050403020100h,00F0E0D0C0B0A0908h
- DQ 0030E09040F0A0500h,00B06010C07020D08h
- DQ 00F060D040B020900h,0070E050C030A0108h
- DQ 00B0E0104070A0D00h,00306090C0F020508h
-
-$L$k_rcon::
- DQ 01F8391B9AF9DEEB6h,0702A98084D7C7D81h
-
-$L$k_s63::
- DQ 05B5B5B5B5B5B5B5Bh,05B5B5B5B5B5B5B5Bh
-
-$L$k_opt::
- DQ 0FF9F4929D6B66000h,0F7974121DEBE6808h
- DQ 001EDBD5150BCEC00h,0E10D5DB1B05C0CE0h
-
-$L$k_deskew::
- DQ 007E4A34047A4E300h,01DFEB95A5DBEF91Ah
- DQ 05F36B5DC83EA6900h,02841C2ABF49D1E77h
-
-
-
-
-
-$L$k_dksd::
- DQ 0FEB91A5DA3E44700h,00740E3A45A1DBEF9h
- DQ 041C277F4B5368300h,05FDC69EAAB289D1Eh
-$L$k_dksb::
- DQ 09A4FCA1F8550D500h,003D653861CC94C99h
- DQ 0115BEDA7B6FC4A00h,0D993256F7E3482C8h
-$L$k_dkse::
- DQ 0D5031CCA1FC9D600h,053859A4C994F5086h
- DQ 0A23196054FDC7BE8h,0CD5EF96A20B31487h
-$L$k_dks9::
- DQ 0B6116FC87ED9A700h,04AED933482255BFCh
- DQ 04576516227143300h,08BB89FACE9DAFDCEh
-
-
-
-
-
-$L$k_dipt::
- DQ 00F505B040B545F00h,0154A411E114E451Ah
- DQ 086E383E660056500h,012771772F491F194h
-
-$L$k_dsb9::
- DQ 0851C03539A86D600h,0CAD51F504F994CC9h
- DQ 0C03B1789ECD74900h,0725E2C9EB2FBA565h
-$L$k_dsbd::
- DQ 07D57CCDFE6B1A200h,0F56E9B13882A4439h
- DQ 03CE2FAF724C6CB00h,02931180D15DEEFD3h
-$L$k_dsbb::
- DQ 0D022649296B44200h,0602646F6B0F2D404h
- DQ 0C19498A6CD596700h,0F3FF0C3E3255AA6Bh
-$L$k_dsbe::
- DQ 046F2929626D4D000h,02242600464B4F6B0h
- DQ 00C55A6CDFFAAC100h,09467F36B98593E32h
-$L$k_dsbo::
- DQ 01387EA537EF94000h,0C7AA6DB9D4943E2Dh
- DQ 012D7560F93441D00h,0CA4B8159D8C58E9Ch
-DB 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
-DB 111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54
-DB 52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97
-DB 109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32
-DB 85,110,105,118,101,114,115,105,116,121,41,0
-ALIGN 64
-
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
-
- lea rsi,QWORD PTR[16+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
- lea rax,QWORD PTR[184+rax]
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_vpaes_set_encrypt_key
- DD imagerel $L$SEH_end_vpaes_set_encrypt_key
- DD imagerel $L$SEH_info_vpaes_set_encrypt_key
-
- DD imagerel $L$SEH_begin_vpaes_set_decrypt_key
- DD imagerel $L$SEH_end_vpaes_set_decrypt_key
- DD imagerel $L$SEH_info_vpaes_set_decrypt_key
-
- DD imagerel $L$SEH_begin_vpaes_encrypt
- DD imagerel $L$SEH_end_vpaes_encrypt
- DD imagerel $L$SEH_info_vpaes_encrypt
-
- DD imagerel $L$SEH_begin_vpaes_decrypt
- DD imagerel $L$SEH_end_vpaes_decrypt
- DD imagerel $L$SEH_info_vpaes_decrypt
-
- DD imagerel $L$SEH_begin_vpaes_cbc_encrypt
- DD imagerel $L$SEH_end_vpaes_cbc_encrypt
- DD imagerel $L$SEH_info_vpaes_cbc_encrypt
-
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_vpaes_set_encrypt_key::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$enc_key_body,imagerel $L$enc_key_epilogue
-$L$SEH_info_vpaes_set_decrypt_key::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$dec_key_body,imagerel $L$dec_key_epilogue
-$L$SEH_info_vpaes_encrypt::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$enc_body,imagerel $L$enc_epilogue
-$L$SEH_info_vpaes_decrypt::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$dec_body,imagerel $L$dec_epilogue
-$L$SEH_info_vpaes_cbc_encrypt::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$cbc_body,imagerel $L$cbc_epilogue
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ALIGN 16
+_vpaes_encrypt_core PROC PRIVATE
+
+ mov r9,rdx
+ mov r11,16
+ mov eax,DWORD PTR[240+rdx]
+ movdqa xmm1,xmm9
+ movdqa xmm2,XMMWORD PTR[$L$k_ipt]
+ pandn xmm1,xmm0
+ movdqu xmm5,XMMWORD PTR[r9]
+ psrld xmm1,4
+ pand xmm0,xmm9
+DB 102,15,56,0,208
+ movdqa xmm0,XMMWORD PTR[(($L$k_ipt+16))]
+DB 102,15,56,0,193
+ pxor xmm2,xmm5
+ add r9,16
+ pxor xmm0,xmm2
+ lea r10,QWORD PTR[$L$k_mc_backward]
+ jmp $L$enc_entry
+
+ALIGN 16
+$L$enc_loop::
+
+ movdqa xmm4,xmm13
+ movdqa xmm0,xmm12
+DB 102,15,56,0,226
+DB 102,15,56,0,195
+ pxor xmm4,xmm5
+ movdqa xmm5,xmm15
+ pxor xmm0,xmm4
+ movdqa xmm1,XMMWORD PTR[((-64))+r10*1+r11]
+DB 102,15,56,0,234
+ movdqa xmm4,XMMWORD PTR[r10*1+r11]
+ movdqa xmm2,xmm14
+DB 102,15,56,0,211
+ movdqa xmm3,xmm0
+ pxor xmm2,xmm5
+DB 102,15,56,0,193
+ add r9,16
+ pxor xmm0,xmm2
+DB 102,15,56,0,220
+ add r11,16
+ pxor xmm3,xmm0
+DB 102,15,56,0,193
+ and r11,030h
+ sub rax,1
+ pxor xmm0,xmm3
+
+$L$enc_entry::
+
+ movdqa xmm1,xmm9
+ movdqa xmm5,xmm11
+ pandn xmm1,xmm0
+ psrld xmm1,4
+ pand xmm0,xmm9
+DB 102,15,56,0,232
+ movdqa xmm3,xmm10
+ pxor xmm0,xmm1
+DB 102,15,56,0,217
+ movdqa xmm4,xmm10
+ pxor xmm3,xmm5
+DB 102,15,56,0,224
+ movdqa xmm2,xmm10
+ pxor xmm4,xmm5
+DB 102,15,56,0,211
+ movdqa xmm3,xmm10
+ pxor xmm2,xmm0
+DB 102,15,56,0,220
+ movdqu xmm5,XMMWORD PTR[r9]
+ pxor xmm3,xmm1
+ jnz $L$enc_loop
+
+
+ movdqa xmm4,XMMWORD PTR[((-96))+r10]
+ movdqa xmm0,XMMWORD PTR[((-80))+r10]
+DB 102,15,56,0,226
+ pxor xmm4,xmm5
+DB 102,15,56,0,195
+ movdqa xmm1,XMMWORD PTR[64+r10*1+r11]
+ pxor xmm0,xmm4
+DB 102,15,56,0,193
+ DB 0F3h,0C3h ;repret
+
+_vpaes_encrypt_core ENDP
+
+
+
+
+
+
+
+ALIGN 16
+_vpaes_decrypt_core PROC PRIVATE
+
+ mov r9,rdx
+ mov eax,DWORD PTR[240+rdx]
+ movdqa xmm1,xmm9
+ movdqa xmm2,XMMWORD PTR[$L$k_dipt]
+ pandn xmm1,xmm0
+ mov r11,rax
+ psrld xmm1,4
+ movdqu xmm5,XMMWORD PTR[r9]
+ shl r11,4
+ pand xmm0,xmm9
+DB 102,15,56,0,208
+ movdqa xmm0,XMMWORD PTR[(($L$k_dipt+16))]
+ xor r11,030h
+ lea r10,QWORD PTR[$L$k_dsbd]
+DB 102,15,56,0,193
+ and r11,030h
+ pxor xmm2,xmm5
+ movdqa xmm5,XMMWORD PTR[(($L$k_mc_forward+48))]
+ pxor xmm0,xmm2
+ add r9,16
+ add r11,r10
+ jmp $L$dec_entry
+
+ALIGN 16
+$L$dec_loop::
+
+
+
+ movdqa xmm4,XMMWORD PTR[((-32))+r10]
+ movdqa xmm1,XMMWORD PTR[((-16))+r10]
+DB 102,15,56,0,226
+DB 102,15,56,0,203
+ pxor xmm0,xmm4
+ movdqa xmm4,XMMWORD PTR[r10]
+ pxor xmm0,xmm1
+ movdqa xmm1,XMMWORD PTR[16+r10]
+
+DB 102,15,56,0,226
+DB 102,15,56,0,197
+DB 102,15,56,0,203
+ pxor xmm0,xmm4
+ movdqa xmm4,XMMWORD PTR[32+r10]
+ pxor xmm0,xmm1
+ movdqa xmm1,XMMWORD PTR[48+r10]
+
+DB 102,15,56,0,226
+DB 102,15,56,0,197
+DB 102,15,56,0,203
+ pxor xmm0,xmm4
+ movdqa xmm4,XMMWORD PTR[64+r10]
+ pxor xmm0,xmm1
+ movdqa xmm1,XMMWORD PTR[80+r10]
+
+DB 102,15,56,0,226
+DB 102,15,56,0,197
+DB 102,15,56,0,203
+ pxor xmm0,xmm4
+ add r9,16
+DB 102,15,58,15,237,12
+ pxor xmm0,xmm1
+ sub rax,1
+
+$L$dec_entry::
+
+ movdqa xmm1,xmm9
+ pandn xmm1,xmm0
+ movdqa xmm2,xmm11
+ psrld xmm1,4
+ pand xmm0,xmm9
+DB 102,15,56,0,208
+ movdqa xmm3,xmm10
+ pxor xmm0,xmm1
+DB 102,15,56,0,217
+ movdqa xmm4,xmm10
+ pxor xmm3,xmm2
+DB 102,15,56,0,224
+ pxor xmm4,xmm2
+ movdqa xmm2,xmm10
+DB 102,15,56,0,211
+ movdqa xmm3,xmm10
+ pxor xmm2,xmm0
+DB 102,15,56,0,220
+ movdqu xmm0,XMMWORD PTR[r9]
+ pxor xmm3,xmm1
+ jnz $L$dec_loop
+
+
+ movdqa xmm4,XMMWORD PTR[96+r10]
+DB 102,15,56,0,226
+ pxor xmm4,xmm0
+ movdqa xmm0,XMMWORD PTR[112+r10]
+ movdqa xmm2,XMMWORD PTR[((-352))+r11]
+DB 102,15,56,0,195
+ pxor xmm0,xmm4
+DB 102,15,56,0,194
+ DB 0F3h,0C3h ;repret
+
+_vpaes_decrypt_core ENDP
+
+
+
+
+
+
+
+ALIGN 16
+_vpaes_schedule_core PROC PRIVATE
+
+
+
+
+
+
+ call _vpaes_preheat
+ movdqa xmm8,XMMWORD PTR[$L$k_rcon]
+ movdqu xmm0,XMMWORD PTR[rdi]
+
+
+ movdqa xmm3,xmm0
+ lea r11,QWORD PTR[$L$k_ipt]
+ call _vpaes_schedule_transform
+ movdqa xmm7,xmm0
+
+ lea r10,QWORD PTR[$L$k_sr]
+ test rcx,rcx
+ jnz $L$schedule_am_decrypting
+
+
+ movdqu XMMWORD PTR[rdx],xmm0
+ jmp $L$schedule_go
+
+$L$schedule_am_decrypting::
+
+ movdqa xmm1,XMMWORD PTR[r10*1+r8]
+DB 102,15,56,0,217
+ movdqu XMMWORD PTR[rdx],xmm3
+ xor r8,030h
+
+$L$schedule_go::
+ cmp esi,192
+ ja $L$schedule_256
+ je $L$schedule_192
+
+
+
+
+
+
+
+
+
+
+$L$schedule_128::
+ mov esi,10
+
+$L$oop_schedule_128::
+ call _vpaes_schedule_round
+ dec rsi
+ jz $L$schedule_mangle_last
+ call _vpaes_schedule_mangle
+ jmp $L$oop_schedule_128
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ALIGN 16
+$L$schedule_192::
+ movdqu xmm0,XMMWORD PTR[8+rdi]
+ call _vpaes_schedule_transform
+ movdqa xmm6,xmm0
+ pxor xmm4,xmm4
+ movhlps xmm6,xmm4
+ mov esi,4
+
+$L$oop_schedule_192::
+ call _vpaes_schedule_round
+DB 102,15,58,15,198,8
+ call _vpaes_schedule_mangle
+ call _vpaes_schedule_192_smear
+ call _vpaes_schedule_mangle
+ call _vpaes_schedule_round
+ dec rsi
+ jz $L$schedule_mangle_last
+ call _vpaes_schedule_mangle
+ call _vpaes_schedule_192_smear
+ jmp $L$oop_schedule_192
+
+
+
+
+
+
+
+
+
+
+
+ALIGN 16
+$L$schedule_256::
+ movdqu xmm0,XMMWORD PTR[16+rdi]
+ call _vpaes_schedule_transform
+ mov esi,7
+
+$L$oop_schedule_256::
+ call _vpaes_schedule_mangle
+ movdqa xmm6,xmm0
+
+
+ call _vpaes_schedule_round
+ dec rsi
+ jz $L$schedule_mangle_last
+ call _vpaes_schedule_mangle
+
+
+ pshufd xmm0,xmm0,0FFh
+ movdqa xmm5,xmm7
+ movdqa xmm7,xmm6
+ call _vpaes_schedule_low_round
+ movdqa xmm7,xmm5
+
+ jmp $L$oop_schedule_256
+
+
+
+
+
+
+
+
+
+
+
+
+ALIGN 16
+$L$schedule_mangle_last::
+
+ lea r11,QWORD PTR[$L$k_deskew]
+ test rcx,rcx
+ jnz $L$schedule_mangle_last_dec
+
+
+ movdqa xmm1,XMMWORD PTR[r10*1+r8]
+DB 102,15,56,0,193
+ lea r11,QWORD PTR[$L$k_opt]
+ add rdx,32
+
+$L$schedule_mangle_last_dec::
+ add rdx,-16
+ pxor xmm0,XMMWORD PTR[$L$k_s63]
+ call _vpaes_schedule_transform
+ movdqu XMMWORD PTR[rdx],xmm0
+
+
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ pxor xmm6,xmm6
+ pxor xmm7,xmm7
+ DB 0F3h,0C3h ;repret
+
+_vpaes_schedule_core ENDP
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ALIGN 16
+_vpaes_schedule_192_smear PROC PRIVATE
+
+ pshufd xmm1,xmm6,080h
+ pshufd xmm0,xmm7,0FEh
+ pxor xmm6,xmm1
+ pxor xmm1,xmm1
+ pxor xmm6,xmm0
+ movdqa xmm0,xmm6
+ movhlps xmm6,xmm1
+ DB 0F3h,0C3h ;repret
+
+_vpaes_schedule_192_smear ENDP
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ALIGN 16
+_vpaes_schedule_round PROC PRIVATE
+
+
+ pxor xmm1,xmm1
+DB 102,65,15,58,15,200,15
+DB 102,69,15,58,15,192,15
+ pxor xmm7,xmm1
+
+
+ pshufd xmm0,xmm0,0FFh
+DB 102,15,58,15,192,1
+
+
+
+
+_vpaes_schedule_low_round::
+
+ movdqa xmm1,xmm7
+ pslldq xmm7,4
+ pxor xmm7,xmm1
+ movdqa xmm1,xmm7
+ pslldq xmm7,8
+ pxor xmm7,xmm1
+ pxor xmm7,XMMWORD PTR[$L$k_s63]
+
+
+ movdqa xmm1,xmm9
+ pandn xmm1,xmm0
+ psrld xmm1,4
+ pand xmm0,xmm9
+ movdqa xmm2,xmm11
+DB 102,15,56,0,208
+ pxor xmm0,xmm1
+ movdqa xmm3,xmm10
+DB 102,15,56,0,217
+ pxor xmm3,xmm2
+ movdqa xmm4,xmm10
+DB 102,15,56,0,224
+ pxor xmm4,xmm2
+ movdqa xmm2,xmm10
+DB 102,15,56,0,211
+ pxor xmm2,xmm0
+ movdqa xmm3,xmm10
+DB 102,15,56,0,220
+ pxor xmm3,xmm1
+ movdqa xmm4,xmm13
+DB 102,15,56,0,226
+ movdqa xmm0,xmm12
+DB 102,15,56,0,195
+ pxor xmm0,xmm4
+
+
+ pxor xmm0,xmm7
+ movdqa xmm7,xmm0
+ DB 0F3h,0C3h ;repret
+
+_vpaes_schedule_round ENDP
+
+
+
+
+
+
+
+
+
+
+
+ALIGN 16
+_vpaes_schedule_transform PROC PRIVATE
+
+ movdqa xmm1,xmm9
+ pandn xmm1,xmm0
+ psrld xmm1,4
+ pand xmm0,xmm9
+ movdqa xmm2,XMMWORD PTR[r11]
+DB 102,15,56,0,208
+ movdqa xmm0,XMMWORD PTR[16+r11]
+DB 102,15,56,0,193
+ pxor xmm0,xmm2
+ DB 0F3h,0C3h ;repret
+
+_vpaes_schedule_transform ENDP
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ALIGN 16
+_vpaes_schedule_mangle PROC PRIVATE
+
+ movdqa xmm4,xmm0
+ movdqa xmm5,XMMWORD PTR[$L$k_mc_forward]
+ test rcx,rcx
+ jnz $L$schedule_mangle_dec
+
+
+ add rdx,16
+ pxor xmm4,XMMWORD PTR[$L$k_s63]
+DB 102,15,56,0,229
+ movdqa xmm3,xmm4
+DB 102,15,56,0,229
+ pxor xmm3,xmm4
+DB 102,15,56,0,229
+ pxor xmm3,xmm4
+
+ jmp $L$schedule_mangle_both
+ALIGN 16
+$L$schedule_mangle_dec::
+
+ lea r11,QWORD PTR[$L$k_dksd]
+ movdqa xmm1,xmm9
+ pandn xmm1,xmm4
+ psrld xmm1,4
+ pand xmm4,xmm9
+
+ movdqa xmm2,XMMWORD PTR[r11]
+DB 102,15,56,0,212
+ movdqa xmm3,XMMWORD PTR[16+r11]
+DB 102,15,56,0,217
+ pxor xmm3,xmm2
+DB 102,15,56,0,221
+
+ movdqa xmm2,XMMWORD PTR[32+r11]
+DB 102,15,56,0,212
+ pxor xmm2,xmm3
+ movdqa xmm3,XMMWORD PTR[48+r11]
+DB 102,15,56,0,217
+ pxor xmm3,xmm2
+DB 102,15,56,0,221
+
+ movdqa xmm2,XMMWORD PTR[64+r11]
+DB 102,15,56,0,212
+ pxor xmm2,xmm3
+ movdqa xmm3,XMMWORD PTR[80+r11]
+DB 102,15,56,0,217
+ pxor xmm3,xmm2
+DB 102,15,56,0,221
+
+ movdqa xmm2,XMMWORD PTR[96+r11]
+DB 102,15,56,0,212
+ pxor xmm2,xmm3
+ movdqa xmm3,XMMWORD PTR[112+r11]
+DB 102,15,56,0,217
+ pxor xmm3,xmm2
+
+ add rdx,-16
+
+$L$schedule_mangle_both::
+ movdqa xmm1,XMMWORD PTR[r10*1+r8]
+DB 102,15,56,0,217
+ add r8,-16
+ and r8,030h
+ movdqu XMMWORD PTR[rdx],xmm3
+ DB 0F3h,0C3h ;repret
+
+_vpaes_schedule_mangle ENDP
+
+
+
+
+PUBLIC vpaes_set_encrypt_key
+
+ALIGN 16
+vpaes_set_encrypt_key PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_vpaes_set_encrypt_key::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ lea rsp,QWORD PTR[((-184))+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm6
+ movaps XMMWORD PTR[32+rsp],xmm7
+ movaps XMMWORD PTR[48+rsp],xmm8
+ movaps XMMWORD PTR[64+rsp],xmm9
+ movaps XMMWORD PTR[80+rsp],xmm10
+ movaps XMMWORD PTR[96+rsp],xmm11
+ movaps XMMWORD PTR[112+rsp],xmm12
+ movaps XMMWORD PTR[128+rsp],xmm13
+ movaps XMMWORD PTR[144+rsp],xmm14
+ movaps XMMWORD PTR[160+rsp],xmm15
+$L$enc_key_body::
+ mov eax,esi
+ shr eax,5
+ add eax,5
+ mov DWORD PTR[240+rdx],eax
+
+ mov ecx,0
+ mov r8d,030h
+ call _vpaes_schedule_core
+ movaps xmm6,XMMWORD PTR[16+rsp]
+ movaps xmm7,XMMWORD PTR[32+rsp]
+ movaps xmm8,XMMWORD PTR[48+rsp]
+ movaps xmm9,XMMWORD PTR[64+rsp]
+ movaps xmm10,XMMWORD PTR[80+rsp]
+ movaps xmm11,XMMWORD PTR[96+rsp]
+ movaps xmm12,XMMWORD PTR[112+rsp]
+ movaps xmm13,XMMWORD PTR[128+rsp]
+ movaps xmm14,XMMWORD PTR[144+rsp]
+ movaps xmm15,XMMWORD PTR[160+rsp]
+ lea rsp,QWORD PTR[184+rsp]
+$L$enc_key_epilogue::
+ xor eax,eax
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_vpaes_set_encrypt_key::
+vpaes_set_encrypt_key ENDP
+
+PUBLIC vpaes_set_decrypt_key
+
+ALIGN 16
+vpaes_set_decrypt_key PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_vpaes_set_decrypt_key::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ lea rsp,QWORD PTR[((-184))+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm6
+ movaps XMMWORD PTR[32+rsp],xmm7
+ movaps XMMWORD PTR[48+rsp],xmm8
+ movaps XMMWORD PTR[64+rsp],xmm9
+ movaps XMMWORD PTR[80+rsp],xmm10
+ movaps XMMWORD PTR[96+rsp],xmm11
+ movaps XMMWORD PTR[112+rsp],xmm12
+ movaps XMMWORD PTR[128+rsp],xmm13
+ movaps XMMWORD PTR[144+rsp],xmm14
+ movaps XMMWORD PTR[160+rsp],xmm15
+$L$dec_key_body::
+ mov eax,esi
+ shr eax,5
+ add eax,5
+ mov DWORD PTR[240+rdx],eax
+ shl eax,4
+ lea rdx,QWORD PTR[16+rax*1+rdx]
+
+ mov ecx,1
+ mov r8d,esi
+ shr r8d,1
+ and r8d,32
+ xor r8d,32
+ call _vpaes_schedule_core
+ movaps xmm6,XMMWORD PTR[16+rsp]
+ movaps xmm7,XMMWORD PTR[32+rsp]
+ movaps xmm8,XMMWORD PTR[48+rsp]
+ movaps xmm9,XMMWORD PTR[64+rsp]
+ movaps xmm10,XMMWORD PTR[80+rsp]
+ movaps xmm11,XMMWORD PTR[96+rsp]
+ movaps xmm12,XMMWORD PTR[112+rsp]
+ movaps xmm13,XMMWORD PTR[128+rsp]
+ movaps xmm14,XMMWORD PTR[144+rsp]
+ movaps xmm15,XMMWORD PTR[160+rsp]
+ lea rsp,QWORD PTR[184+rsp]
+$L$dec_key_epilogue::
+ xor eax,eax
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_vpaes_set_decrypt_key::
+vpaes_set_decrypt_key ENDP
+
+PUBLIC vpaes_encrypt
+
+ALIGN 16
+vpaes_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_vpaes_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ lea rsp,QWORD PTR[((-184))+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm6
+ movaps XMMWORD PTR[32+rsp],xmm7
+ movaps XMMWORD PTR[48+rsp],xmm8
+ movaps XMMWORD PTR[64+rsp],xmm9
+ movaps XMMWORD PTR[80+rsp],xmm10
+ movaps XMMWORD PTR[96+rsp],xmm11
+ movaps XMMWORD PTR[112+rsp],xmm12
+ movaps XMMWORD PTR[128+rsp],xmm13
+ movaps XMMWORD PTR[144+rsp],xmm14
+ movaps XMMWORD PTR[160+rsp],xmm15
+$L$enc_body::
+ movdqu xmm0,XMMWORD PTR[rdi]
+ call _vpaes_preheat
+ call _vpaes_encrypt_core
+ movdqu XMMWORD PTR[rsi],xmm0
+ movaps xmm6,XMMWORD PTR[16+rsp]
+ movaps xmm7,XMMWORD PTR[32+rsp]
+ movaps xmm8,XMMWORD PTR[48+rsp]
+ movaps xmm9,XMMWORD PTR[64+rsp]
+ movaps xmm10,XMMWORD PTR[80+rsp]
+ movaps xmm11,XMMWORD PTR[96+rsp]
+ movaps xmm12,XMMWORD PTR[112+rsp]
+ movaps xmm13,XMMWORD PTR[128+rsp]
+ movaps xmm14,XMMWORD PTR[144+rsp]
+ movaps xmm15,XMMWORD PTR[160+rsp]
+ lea rsp,QWORD PTR[184+rsp]
+$L$enc_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_vpaes_encrypt::
+vpaes_encrypt ENDP
+
+PUBLIC vpaes_decrypt
+
+ALIGN 16
+vpaes_decrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_vpaes_decrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ lea rsp,QWORD PTR[((-184))+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm6
+ movaps XMMWORD PTR[32+rsp],xmm7
+ movaps XMMWORD PTR[48+rsp],xmm8
+ movaps XMMWORD PTR[64+rsp],xmm9
+ movaps XMMWORD PTR[80+rsp],xmm10
+ movaps XMMWORD PTR[96+rsp],xmm11
+ movaps XMMWORD PTR[112+rsp],xmm12
+ movaps XMMWORD PTR[128+rsp],xmm13
+ movaps XMMWORD PTR[144+rsp],xmm14
+ movaps XMMWORD PTR[160+rsp],xmm15
+$L$dec_body::
+ movdqu xmm0,XMMWORD PTR[rdi]
+ call _vpaes_preheat
+ call _vpaes_decrypt_core
+ movdqu XMMWORD PTR[rsi],xmm0
+ movaps xmm6,XMMWORD PTR[16+rsp]
+ movaps xmm7,XMMWORD PTR[32+rsp]
+ movaps xmm8,XMMWORD PTR[48+rsp]
+ movaps xmm9,XMMWORD PTR[64+rsp]
+ movaps xmm10,XMMWORD PTR[80+rsp]
+ movaps xmm11,XMMWORD PTR[96+rsp]
+ movaps xmm12,XMMWORD PTR[112+rsp]
+ movaps xmm13,XMMWORD PTR[128+rsp]
+ movaps xmm14,XMMWORD PTR[144+rsp]
+ movaps xmm15,XMMWORD PTR[160+rsp]
+ lea rsp,QWORD PTR[184+rsp]
+$L$dec_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_vpaes_decrypt::
+vpaes_decrypt ENDP
+PUBLIC vpaes_cbc_encrypt
+
+ALIGN 16
+vpaes_cbc_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_vpaes_cbc_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ xchg rdx,rcx
+ sub rcx,16
+ jc $L$cbc_abort
+ lea rsp,QWORD PTR[((-184))+rsp]
+ movaps XMMWORD PTR[16+rsp],xmm6
+ movaps XMMWORD PTR[32+rsp],xmm7
+ movaps XMMWORD PTR[48+rsp],xmm8
+ movaps XMMWORD PTR[64+rsp],xmm9
+ movaps XMMWORD PTR[80+rsp],xmm10
+ movaps XMMWORD PTR[96+rsp],xmm11
+ movaps XMMWORD PTR[112+rsp],xmm12
+ movaps XMMWORD PTR[128+rsp],xmm13
+ movaps XMMWORD PTR[144+rsp],xmm14
+ movaps XMMWORD PTR[160+rsp],xmm15
+$L$cbc_body::
+ movdqu xmm6,XMMWORD PTR[r8]
+ sub rsi,rdi
+ call _vpaes_preheat
+ cmp r9d,0
+ je $L$cbc_dec_loop
+ jmp $L$cbc_enc_loop
+ALIGN 16
+$L$cbc_enc_loop::
+ movdqu xmm0,XMMWORD PTR[rdi]
+ pxor xmm0,xmm6
+ call _vpaes_encrypt_core
+ movdqa xmm6,xmm0
+ movdqu XMMWORD PTR[rdi*1+rsi],xmm0
+ lea rdi,QWORD PTR[16+rdi]
+ sub rcx,16
+ jnc $L$cbc_enc_loop
+ jmp $L$cbc_done
+ALIGN 16
+$L$cbc_dec_loop::
+ movdqu xmm0,XMMWORD PTR[rdi]
+ movdqa xmm7,xmm0
+ call _vpaes_decrypt_core
+ pxor xmm0,xmm6
+ movdqa xmm6,xmm7
+ movdqu XMMWORD PTR[rdi*1+rsi],xmm0
+ lea rdi,QWORD PTR[16+rdi]
+ sub rcx,16
+ jnc $L$cbc_dec_loop
+$L$cbc_done::
+ movdqu XMMWORD PTR[r8],xmm6
+ movaps xmm6,XMMWORD PTR[16+rsp]
+ movaps xmm7,XMMWORD PTR[32+rsp]
+ movaps xmm8,XMMWORD PTR[48+rsp]
+ movaps xmm9,XMMWORD PTR[64+rsp]
+ movaps xmm10,XMMWORD PTR[80+rsp]
+ movaps xmm11,XMMWORD PTR[96+rsp]
+ movaps xmm12,XMMWORD PTR[112+rsp]
+ movaps xmm13,XMMWORD PTR[128+rsp]
+ movaps xmm14,XMMWORD PTR[144+rsp]
+ movaps xmm15,XMMWORD PTR[160+rsp]
+ lea rsp,QWORD PTR[184+rsp]
+$L$cbc_epilogue::
+$L$cbc_abort::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_vpaes_cbc_encrypt::
+vpaes_cbc_encrypt ENDP
+
+
+
+
+
+
+
+ALIGN 16
+_vpaes_preheat PROC PRIVATE
+
+ lea r10,QWORD PTR[$L$k_s0F]
+ movdqa xmm10,XMMWORD PTR[((-32))+r10]
+ movdqa xmm11,XMMWORD PTR[((-16))+r10]
+ movdqa xmm9,XMMWORD PTR[r10]
+ movdqa xmm13,XMMWORD PTR[48+r10]
+ movdqa xmm12,XMMWORD PTR[64+r10]
+ movdqa xmm15,XMMWORD PTR[80+r10]
+ movdqa xmm14,XMMWORD PTR[96+r10]
+ DB 0F3h,0C3h ;repret
+
+_vpaes_preheat ENDP
+
+
+
+
+
+
+ALIGN 64
+_vpaes_consts::
+$L$k_inv::
+ DQ 00E05060F0D080180h,0040703090A0B0C02h
+ DQ 001040A060F0B0780h,0030D0E0C02050809h
+
+$L$k_s0F::
+ DQ 00F0F0F0F0F0F0F0Fh,00F0F0F0F0F0F0F0Fh
+
+$L$k_ipt::
+ DQ 0C2B2E8985A2A7000h,0CABAE09052227808h
+ DQ 04C01307D317C4D00h,0CD80B1FCB0FDCC81h
+
+$L$k_sb1::
+ DQ 0B19BE18FCB503E00h,0A5DF7A6E142AF544h
+ DQ 03618D415FAE22300h,03BF7CCC10D2ED9EFh
+$L$k_sb2::
+ DQ 0E27A93C60B712400h,05EB7E955BC982FCDh
+ DQ 069EB88400AE12900h,0C2A163C8AB82234Ah
+$L$k_sbo::
+ DQ 0D0D26D176FBDC700h,015AABF7AC502A878h
+ DQ 0CFE474A55FBB6A00h,08E1E90D1412B35FAh
+
+$L$k_mc_forward::
+ DQ 00407060500030201h,00C0F0E0D080B0A09h
+ DQ 0080B0A0904070605h,0000302010C0F0E0Dh
+ DQ 00C0F0E0D080B0A09h,00407060500030201h
+ DQ 0000302010C0F0E0Dh,0080B0A0904070605h
+
+$L$k_mc_backward::
+ DQ 00605040702010003h,00E0D0C0F0A09080Bh
+ DQ 0020100030E0D0C0Fh,00A09080B06050407h
+ DQ 00E0D0C0F0A09080Bh,00605040702010003h
+ DQ 00A09080B06050407h,0020100030E0D0C0Fh
+
+$L$k_sr::
+ DQ 00706050403020100h,00F0E0D0C0B0A0908h
+ DQ 0030E09040F0A0500h,00B06010C07020D08h
+ DQ 00F060D040B020900h,0070E050C030A0108h
+ DQ 00B0E0104070A0D00h,00306090C0F020508h
+
+$L$k_rcon::
+ DQ 01F8391B9AF9DEEB6h,0702A98084D7C7D81h
+
+$L$k_s63::
+ DQ 05B5B5B5B5B5B5B5Bh,05B5B5B5B5B5B5B5Bh
+
+$L$k_opt::
+ DQ 0FF9F4929D6B66000h,0F7974121DEBE6808h
+ DQ 001EDBD5150BCEC00h,0E10D5DB1B05C0CE0h
+
+$L$k_deskew::
+ DQ 007E4A34047A4E300h,01DFEB95A5DBEF91Ah
+ DQ 05F36B5DC83EA6900h,02841C2ABF49D1E77h
+
+
+
+
+
+$L$k_dksd::
+ DQ 0FEB91A5DA3E44700h,00740E3A45A1DBEF9h
+ DQ 041C277F4B5368300h,05FDC69EAAB289D1Eh
+$L$k_dksb::
+ DQ 09A4FCA1F8550D500h,003D653861CC94C99h
+ DQ 0115BEDA7B6FC4A00h,0D993256F7E3482C8h
+$L$k_dkse::
+ DQ 0D5031CCA1FC9D600h,053859A4C994F5086h
+ DQ 0A23196054FDC7BE8h,0CD5EF96A20B31487h
+$L$k_dks9::
+ DQ 0B6116FC87ED9A700h,04AED933482255BFCh
+ DQ 04576516227143300h,08BB89FACE9DAFDCEh
+
+
+
+
+
+$L$k_dipt::
+ DQ 00F505B040B545F00h,0154A411E114E451Ah
+ DQ 086E383E660056500h,012771772F491F194h
+
+$L$k_dsb9::
+ DQ 0851C03539A86D600h,0CAD51F504F994CC9h
+ DQ 0C03B1789ECD74900h,0725E2C9EB2FBA565h
+$L$k_dsbd::
+ DQ 07D57CCDFE6B1A200h,0F56E9B13882A4439h
+ DQ 03CE2FAF724C6CB00h,02931180D15DEEFD3h
+$L$k_dsbb::
+ DQ 0D022649296B44200h,0602646F6B0F2D404h
+ DQ 0C19498A6CD596700h,0F3FF0C3E3255AA6Bh
+$L$k_dsbe::
+ DQ 046F2929626D4D000h,02242600464B4F6B0h
+ DQ 00C55A6CDFFAAC100h,09467F36B98593E32h
+$L$k_dsbo::
+ DQ 01387EA537EF94000h,0C7AA6DB9D4943E2Dh
+ DQ 012D7560F93441D00h,0CA4B8159D8C58E9Ch
+DB 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
+DB 111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54
+DB 52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97
+DB 109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32
+DB 85,110,105,118,101,114,115,105,116,121,41,0
+ALIGN 64
+
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ lea rsi,QWORD PTR[16+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+ lea rax,QWORD PTR[184+rax]
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_vpaes_set_encrypt_key
+ DD imagerel $L$SEH_end_vpaes_set_encrypt_key
+ DD imagerel $L$SEH_info_vpaes_set_encrypt_key
+
+ DD imagerel $L$SEH_begin_vpaes_set_decrypt_key
+ DD imagerel $L$SEH_end_vpaes_set_decrypt_key
+ DD imagerel $L$SEH_info_vpaes_set_decrypt_key
+
+ DD imagerel $L$SEH_begin_vpaes_encrypt
+ DD imagerel $L$SEH_end_vpaes_encrypt
+ DD imagerel $L$SEH_info_vpaes_encrypt
+
+ DD imagerel $L$SEH_begin_vpaes_decrypt
+ DD imagerel $L$SEH_end_vpaes_decrypt
+ DD imagerel $L$SEH_info_vpaes_decrypt
+
+ DD imagerel $L$SEH_begin_vpaes_cbc_encrypt
+ DD imagerel $L$SEH_end_vpaes_cbc_encrypt
+ DD imagerel $L$SEH_info_vpaes_cbc_encrypt
+
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_vpaes_set_encrypt_key::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$enc_key_body,imagerel $L$enc_key_epilogue
+$L$SEH_info_vpaes_set_decrypt_key::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$dec_key_body,imagerel $L$dec_key_epilogue
+$L$SEH_info_vpaes_encrypt::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$enc_body,imagerel $L$enc_epilogue
+$L$SEH_info_vpaes_decrypt::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$dec_body,imagerel $L$dec_epilogue
+$L$SEH_info_vpaes_cbc_encrypt::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$cbc_body,imagerel $L$cbc_epilogue
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/bn/rsaz-avx2.masm b/contrib/libs/openssl/asm/windows/crypto/bn/rsaz-avx2.masm
index cba3712283..db68b40bc5 100644
--- a/contrib/libs/openssl/asm/windows/crypto/bn/rsaz-avx2.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/bn/rsaz-avx2.masm
@@ -1,1984 +1,1984 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-PUBLIC rsaz_1024_sqr_avx2
-
-ALIGN 64
-rsaz_1024_sqr_avx2 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_rsaz_1024_sqr_avx2::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
- lea rax,QWORD PTR[rsp]
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- vzeroupper
- lea rsp,QWORD PTR[((-168))+rsp]
- vmovaps XMMWORD PTR[(-216)+rax],xmm6
- vmovaps XMMWORD PTR[(-200)+rax],xmm7
- vmovaps XMMWORD PTR[(-184)+rax],xmm8
- vmovaps XMMWORD PTR[(-168)+rax],xmm9
- vmovaps XMMWORD PTR[(-152)+rax],xmm10
- vmovaps XMMWORD PTR[(-136)+rax],xmm11
- vmovaps XMMWORD PTR[(-120)+rax],xmm12
- vmovaps XMMWORD PTR[(-104)+rax],xmm13
- vmovaps XMMWORD PTR[(-88)+rax],xmm14
- vmovaps XMMWORD PTR[(-72)+rax],xmm15
-$L$sqr_1024_body::
- mov rbp,rax
-
- mov r13,rdx
- sub rsp,832
- mov r15,r13
- sub rdi,-128
- sub rsi,-128
- sub r13,-128
-
- and r15,4095
- add r15,32*10
- shr r15,12
- vpxor ymm9,ymm9,ymm9
- jz $L$sqr_1024_no_n_copy
-
-
-
-
-
- sub rsp,32*10
- vmovdqu ymm0,YMMWORD PTR[((0-128))+r13]
- and rsp,-2048
- vmovdqu ymm1,YMMWORD PTR[((32-128))+r13]
- vmovdqu ymm2,YMMWORD PTR[((64-128))+r13]
- vmovdqu ymm3,YMMWORD PTR[((96-128))+r13]
- vmovdqu ymm4,YMMWORD PTR[((128-128))+r13]
- vmovdqu ymm5,YMMWORD PTR[((160-128))+r13]
- vmovdqu ymm6,YMMWORD PTR[((192-128))+r13]
- vmovdqu ymm7,YMMWORD PTR[((224-128))+r13]
- vmovdqu ymm8,YMMWORD PTR[((256-128))+r13]
- lea r13,QWORD PTR[((832+128))+rsp]
- vmovdqu YMMWORD PTR[(0-128)+r13],ymm0
- vmovdqu YMMWORD PTR[(32-128)+r13],ymm1
- vmovdqu YMMWORD PTR[(64-128)+r13],ymm2
- vmovdqu YMMWORD PTR[(96-128)+r13],ymm3
- vmovdqu YMMWORD PTR[(128-128)+r13],ymm4
- vmovdqu YMMWORD PTR[(160-128)+r13],ymm5
- vmovdqu YMMWORD PTR[(192-128)+r13],ymm6
- vmovdqu YMMWORD PTR[(224-128)+r13],ymm7
- vmovdqu YMMWORD PTR[(256-128)+r13],ymm8
- vmovdqu YMMWORD PTR[(288-128)+r13],ymm9
-
-$L$sqr_1024_no_n_copy::
- and rsp,-1024
-
- vmovdqu ymm1,YMMWORD PTR[((32-128))+rsi]
- vmovdqu ymm2,YMMWORD PTR[((64-128))+rsi]
- vmovdqu ymm3,YMMWORD PTR[((96-128))+rsi]
- vmovdqu ymm4,YMMWORD PTR[((128-128))+rsi]
- vmovdqu ymm5,YMMWORD PTR[((160-128))+rsi]
- vmovdqu ymm6,YMMWORD PTR[((192-128))+rsi]
- vmovdqu ymm7,YMMWORD PTR[((224-128))+rsi]
- vmovdqu ymm8,YMMWORD PTR[((256-128))+rsi]
-
- lea rbx,QWORD PTR[192+rsp]
- vmovdqu ymm15,YMMWORD PTR[$L$and_mask]
- jmp $L$OOP_GRANDE_SQR_1024
-
-ALIGN 32
-$L$OOP_GRANDE_SQR_1024::
- lea r9,QWORD PTR[((576+128))+rsp]
- lea r12,QWORD PTR[448+rsp]
-
-
-
-
- vpaddq ymm1,ymm1,ymm1
- vpbroadcastq ymm10,QWORD PTR[((0-128))+rsi]
- vpaddq ymm2,ymm2,ymm2
- vmovdqa YMMWORD PTR[(0-128)+r9],ymm1
- vpaddq ymm3,ymm3,ymm3
- vmovdqa YMMWORD PTR[(32-128)+r9],ymm2
- vpaddq ymm4,ymm4,ymm4
- vmovdqa YMMWORD PTR[(64-128)+r9],ymm3
- vpaddq ymm5,ymm5,ymm5
- vmovdqa YMMWORD PTR[(96-128)+r9],ymm4
- vpaddq ymm6,ymm6,ymm6
- vmovdqa YMMWORD PTR[(128-128)+r9],ymm5
- vpaddq ymm7,ymm7,ymm7
- vmovdqa YMMWORD PTR[(160-128)+r9],ymm6
- vpaddq ymm8,ymm8,ymm8
- vmovdqa YMMWORD PTR[(192-128)+r9],ymm7
- vpxor ymm9,ymm9,ymm9
- vmovdqa YMMWORD PTR[(224-128)+r9],ymm8
-
- vpmuludq ymm0,ymm10,YMMWORD PTR[((0-128))+rsi]
- vpbroadcastq ymm11,QWORD PTR[((32-128))+rsi]
- vmovdqu YMMWORD PTR[(288-192)+rbx],ymm9
- vpmuludq ymm1,ymm1,ymm10
- vmovdqu YMMWORD PTR[(320-448)+r12],ymm9
- vpmuludq ymm2,ymm2,ymm10
- vmovdqu YMMWORD PTR[(352-448)+r12],ymm9
- vpmuludq ymm3,ymm3,ymm10
- vmovdqu YMMWORD PTR[(384-448)+r12],ymm9
- vpmuludq ymm4,ymm4,ymm10
- vmovdqu YMMWORD PTR[(416-448)+r12],ymm9
- vpmuludq ymm5,ymm5,ymm10
- vmovdqu YMMWORD PTR[(448-448)+r12],ymm9
- vpmuludq ymm6,ymm6,ymm10
- vmovdqu YMMWORD PTR[(480-448)+r12],ymm9
- vpmuludq ymm7,ymm7,ymm10
- vmovdqu YMMWORD PTR[(512-448)+r12],ymm9
- vpmuludq ymm8,ymm8,ymm10
- vpbroadcastq ymm10,QWORD PTR[((64-128))+rsi]
- vmovdqu YMMWORD PTR[(544-448)+r12],ymm9
-
- mov r15,rsi
- mov r14d,4
- jmp $L$sqr_entry_1024
-ALIGN 32
-$L$OOP_SQR_1024::
- vpbroadcastq ymm11,QWORD PTR[((32-128))+r15]
- vpmuludq ymm0,ymm10,YMMWORD PTR[((0-128))+rsi]
- vpaddq ymm0,ymm0,YMMWORD PTR[((0-192))+rbx]
- vpmuludq ymm1,ymm10,YMMWORD PTR[((0-128))+r9]
- vpaddq ymm1,ymm1,YMMWORD PTR[((32-192))+rbx]
- vpmuludq ymm2,ymm10,YMMWORD PTR[((32-128))+r9]
- vpaddq ymm2,ymm2,YMMWORD PTR[((64-192))+rbx]
- vpmuludq ymm3,ymm10,YMMWORD PTR[((64-128))+r9]
- vpaddq ymm3,ymm3,YMMWORD PTR[((96-192))+rbx]
- vpmuludq ymm4,ymm10,YMMWORD PTR[((96-128))+r9]
- vpaddq ymm4,ymm4,YMMWORD PTR[((128-192))+rbx]
- vpmuludq ymm5,ymm10,YMMWORD PTR[((128-128))+r9]
- vpaddq ymm5,ymm5,YMMWORD PTR[((160-192))+rbx]
- vpmuludq ymm6,ymm10,YMMWORD PTR[((160-128))+r9]
- vpaddq ymm6,ymm6,YMMWORD PTR[((192-192))+rbx]
- vpmuludq ymm7,ymm10,YMMWORD PTR[((192-128))+r9]
- vpaddq ymm7,ymm7,YMMWORD PTR[((224-192))+rbx]
- vpmuludq ymm8,ymm10,YMMWORD PTR[((224-128))+r9]
- vpbroadcastq ymm10,QWORD PTR[((64-128))+r15]
- vpaddq ymm8,ymm8,YMMWORD PTR[((256-192))+rbx]
-$L$sqr_entry_1024::
- vmovdqu YMMWORD PTR[(0-192)+rbx],ymm0
- vmovdqu YMMWORD PTR[(32-192)+rbx],ymm1
-
- vpmuludq ymm12,ymm11,YMMWORD PTR[((32-128))+rsi]
- vpaddq ymm2,ymm2,ymm12
- vpmuludq ymm14,ymm11,YMMWORD PTR[((32-128))+r9]
- vpaddq ymm3,ymm3,ymm14
- vpmuludq ymm13,ymm11,YMMWORD PTR[((64-128))+r9]
- vpaddq ymm4,ymm4,ymm13
- vpmuludq ymm12,ymm11,YMMWORD PTR[((96-128))+r9]
- vpaddq ymm5,ymm5,ymm12
- vpmuludq ymm14,ymm11,YMMWORD PTR[((128-128))+r9]
- vpaddq ymm6,ymm6,ymm14
- vpmuludq ymm13,ymm11,YMMWORD PTR[((160-128))+r9]
- vpaddq ymm7,ymm7,ymm13
- vpmuludq ymm12,ymm11,YMMWORD PTR[((192-128))+r9]
- vpaddq ymm8,ymm8,ymm12
- vpmuludq ymm0,ymm11,YMMWORD PTR[((224-128))+r9]
- vpbroadcastq ymm11,QWORD PTR[((96-128))+r15]
- vpaddq ymm0,ymm0,YMMWORD PTR[((288-192))+rbx]
-
- vmovdqu YMMWORD PTR[(64-192)+rbx],ymm2
- vmovdqu YMMWORD PTR[(96-192)+rbx],ymm3
-
- vpmuludq ymm13,ymm10,YMMWORD PTR[((64-128))+rsi]
- vpaddq ymm4,ymm4,ymm13
- vpmuludq ymm12,ymm10,YMMWORD PTR[((64-128))+r9]
- vpaddq ymm5,ymm5,ymm12
- vpmuludq ymm14,ymm10,YMMWORD PTR[((96-128))+r9]
- vpaddq ymm6,ymm6,ymm14
- vpmuludq ymm13,ymm10,YMMWORD PTR[((128-128))+r9]
- vpaddq ymm7,ymm7,ymm13
- vpmuludq ymm12,ymm10,YMMWORD PTR[((160-128))+r9]
- vpaddq ymm8,ymm8,ymm12
- vpmuludq ymm14,ymm10,YMMWORD PTR[((192-128))+r9]
- vpaddq ymm0,ymm0,ymm14
- vpmuludq ymm1,ymm10,YMMWORD PTR[((224-128))+r9]
- vpbroadcastq ymm10,QWORD PTR[((128-128))+r15]
- vpaddq ymm1,ymm1,YMMWORD PTR[((320-448))+r12]
-
- vmovdqu YMMWORD PTR[(128-192)+rbx],ymm4
- vmovdqu YMMWORD PTR[(160-192)+rbx],ymm5
-
- vpmuludq ymm12,ymm11,YMMWORD PTR[((96-128))+rsi]
- vpaddq ymm6,ymm6,ymm12
- vpmuludq ymm14,ymm11,YMMWORD PTR[((96-128))+r9]
- vpaddq ymm7,ymm7,ymm14
- vpmuludq ymm13,ymm11,YMMWORD PTR[((128-128))+r9]
- vpaddq ymm8,ymm8,ymm13
- vpmuludq ymm12,ymm11,YMMWORD PTR[((160-128))+r9]
- vpaddq ymm0,ymm0,ymm12
- vpmuludq ymm14,ymm11,YMMWORD PTR[((192-128))+r9]
- vpaddq ymm1,ymm1,ymm14
- vpmuludq ymm2,ymm11,YMMWORD PTR[((224-128))+r9]
- vpbroadcastq ymm11,QWORD PTR[((160-128))+r15]
- vpaddq ymm2,ymm2,YMMWORD PTR[((352-448))+r12]
-
- vmovdqu YMMWORD PTR[(192-192)+rbx],ymm6
- vmovdqu YMMWORD PTR[(224-192)+rbx],ymm7
-
- vpmuludq ymm12,ymm10,YMMWORD PTR[((128-128))+rsi]
- vpaddq ymm8,ymm8,ymm12
- vpmuludq ymm14,ymm10,YMMWORD PTR[((128-128))+r9]
- vpaddq ymm0,ymm0,ymm14
- vpmuludq ymm13,ymm10,YMMWORD PTR[((160-128))+r9]
- vpaddq ymm1,ymm1,ymm13
- vpmuludq ymm12,ymm10,YMMWORD PTR[((192-128))+r9]
- vpaddq ymm2,ymm2,ymm12
- vpmuludq ymm3,ymm10,YMMWORD PTR[((224-128))+r9]
- vpbroadcastq ymm10,QWORD PTR[((192-128))+r15]
- vpaddq ymm3,ymm3,YMMWORD PTR[((384-448))+r12]
-
- vmovdqu YMMWORD PTR[(256-192)+rbx],ymm8
- vmovdqu YMMWORD PTR[(288-192)+rbx],ymm0
- lea rbx,QWORD PTR[8+rbx]
-
- vpmuludq ymm13,ymm11,YMMWORD PTR[((160-128))+rsi]
- vpaddq ymm1,ymm1,ymm13
- vpmuludq ymm12,ymm11,YMMWORD PTR[((160-128))+r9]
- vpaddq ymm2,ymm2,ymm12
- vpmuludq ymm14,ymm11,YMMWORD PTR[((192-128))+r9]
- vpaddq ymm3,ymm3,ymm14
- vpmuludq ymm4,ymm11,YMMWORD PTR[((224-128))+r9]
- vpbroadcastq ymm11,QWORD PTR[((224-128))+r15]
- vpaddq ymm4,ymm4,YMMWORD PTR[((416-448))+r12]
-
- vmovdqu YMMWORD PTR[(320-448)+r12],ymm1
- vmovdqu YMMWORD PTR[(352-448)+r12],ymm2
-
- vpmuludq ymm12,ymm10,YMMWORD PTR[((192-128))+rsi]
- vpaddq ymm3,ymm3,ymm12
- vpmuludq ymm14,ymm10,YMMWORD PTR[((192-128))+r9]
- vpbroadcastq ymm0,QWORD PTR[((256-128))+r15]
- vpaddq ymm4,ymm4,ymm14
- vpmuludq ymm5,ymm10,YMMWORD PTR[((224-128))+r9]
- vpbroadcastq ymm10,QWORD PTR[((0+8-128))+r15]
- vpaddq ymm5,ymm5,YMMWORD PTR[((448-448))+r12]
-
- vmovdqu YMMWORD PTR[(384-448)+r12],ymm3
- vmovdqu YMMWORD PTR[(416-448)+r12],ymm4
- lea r15,QWORD PTR[8+r15]
-
- vpmuludq ymm12,ymm11,YMMWORD PTR[((224-128))+rsi]
- vpaddq ymm5,ymm5,ymm12
- vpmuludq ymm6,ymm11,YMMWORD PTR[((224-128))+r9]
- vpaddq ymm6,ymm6,YMMWORD PTR[((480-448))+r12]
-
- vpmuludq ymm7,ymm0,YMMWORD PTR[((256-128))+rsi]
- vmovdqu YMMWORD PTR[(448-448)+r12],ymm5
- vpaddq ymm7,ymm7,YMMWORD PTR[((512-448))+r12]
- vmovdqu YMMWORD PTR[(480-448)+r12],ymm6
- vmovdqu YMMWORD PTR[(512-448)+r12],ymm7
- lea r12,QWORD PTR[8+r12]
-
- dec r14d
- jnz $L$OOP_SQR_1024
-
- vmovdqu ymm8,YMMWORD PTR[256+rsp]
- vmovdqu ymm1,YMMWORD PTR[288+rsp]
- vmovdqu ymm2,YMMWORD PTR[320+rsp]
- lea rbx,QWORD PTR[192+rsp]
-
- vpsrlq ymm14,ymm8,29
- vpand ymm8,ymm8,ymm15
- vpsrlq ymm11,ymm1,29
- vpand ymm1,ymm1,ymm15
-
- vpermq ymm14,ymm14,093h
- vpxor ymm9,ymm9,ymm9
- vpermq ymm11,ymm11,093h
-
- vpblendd ymm10,ymm14,ymm9,3
- vpblendd ymm14,ymm11,ymm14,3
- vpaddq ymm8,ymm8,ymm10
- vpblendd ymm11,ymm9,ymm11,3
- vpaddq ymm1,ymm1,ymm14
- vpaddq ymm2,ymm2,ymm11
- vmovdqu YMMWORD PTR[(288-192)+rbx],ymm1
- vmovdqu YMMWORD PTR[(320-192)+rbx],ymm2
-
- mov rax,QWORD PTR[rsp]
- mov r10,QWORD PTR[8+rsp]
- mov r11,QWORD PTR[16+rsp]
- mov r12,QWORD PTR[24+rsp]
- vmovdqu ymm1,YMMWORD PTR[32+rsp]
- vmovdqu ymm2,YMMWORD PTR[((64-192))+rbx]
- vmovdqu ymm3,YMMWORD PTR[((96-192))+rbx]
- vmovdqu ymm4,YMMWORD PTR[((128-192))+rbx]
- vmovdqu ymm5,YMMWORD PTR[((160-192))+rbx]
- vmovdqu ymm6,YMMWORD PTR[((192-192))+rbx]
- vmovdqu ymm7,YMMWORD PTR[((224-192))+rbx]
-
- mov r9,rax
- imul eax,ecx
- and eax,01fffffffh
- vmovd xmm12,eax
-
- mov rdx,rax
- imul rax,QWORD PTR[((-128))+r13]
- vpbroadcastq ymm12,xmm12
- add r9,rax
- mov rax,rdx
- imul rax,QWORD PTR[((8-128))+r13]
- shr r9,29
- add r10,rax
- mov rax,rdx
- imul rax,QWORD PTR[((16-128))+r13]
- add r10,r9
- add r11,rax
- imul rdx,QWORD PTR[((24-128))+r13]
- add r12,rdx
-
- mov rax,r10
- imul eax,ecx
- and eax,01fffffffh
-
- mov r14d,9
- jmp $L$OOP_REDUCE_1024
-
-ALIGN 32
-$L$OOP_REDUCE_1024::
- vmovd xmm13,eax
- vpbroadcastq ymm13,xmm13
-
- vpmuludq ymm10,ymm12,YMMWORD PTR[((32-128))+r13]
- mov rdx,rax
- imul rax,QWORD PTR[((-128))+r13]
- vpaddq ymm1,ymm1,ymm10
- add r10,rax
- vpmuludq ymm14,ymm12,YMMWORD PTR[((64-128))+r13]
- mov rax,rdx
- imul rax,QWORD PTR[((8-128))+r13]
- vpaddq ymm2,ymm2,ymm14
- vpmuludq ymm11,ymm12,YMMWORD PTR[((96-128))+r13]
-DB 067h
- add r11,rax
-DB 067h
- mov rax,rdx
- imul rax,QWORD PTR[((16-128))+r13]
- shr r10,29
- vpaddq ymm3,ymm3,ymm11
- vpmuludq ymm10,ymm12,YMMWORD PTR[((128-128))+r13]
- add r12,rax
- add r11,r10
- vpaddq ymm4,ymm4,ymm10
- vpmuludq ymm14,ymm12,YMMWORD PTR[((160-128))+r13]
- mov rax,r11
- imul eax,ecx
- vpaddq ymm5,ymm5,ymm14
- vpmuludq ymm11,ymm12,YMMWORD PTR[((192-128))+r13]
- and eax,01fffffffh
- vpaddq ymm6,ymm6,ymm11
- vpmuludq ymm10,ymm12,YMMWORD PTR[((224-128))+r13]
- vpaddq ymm7,ymm7,ymm10
- vpmuludq ymm14,ymm12,YMMWORD PTR[((256-128))+r13]
- vmovd xmm12,eax
-
- vpaddq ymm8,ymm8,ymm14
-
- vpbroadcastq ymm12,xmm12
-
- vpmuludq ymm11,ymm13,YMMWORD PTR[((32-8-128))+r13]
- vmovdqu ymm14,YMMWORD PTR[((96-8-128))+r13]
- mov rdx,rax
- imul rax,QWORD PTR[((-128))+r13]
- vpaddq ymm1,ymm1,ymm11
- vpmuludq ymm10,ymm13,YMMWORD PTR[((64-8-128))+r13]
- vmovdqu ymm11,YMMWORD PTR[((128-8-128))+r13]
- add r11,rax
- mov rax,rdx
- imul rax,QWORD PTR[((8-128))+r13]
- vpaddq ymm2,ymm2,ymm10
- add rax,r12
- shr r11,29
- vpmuludq ymm14,ymm14,ymm13
- vmovdqu ymm10,YMMWORD PTR[((160-8-128))+r13]
- add rax,r11
- vpaddq ymm3,ymm3,ymm14
- vpmuludq ymm11,ymm11,ymm13
- vmovdqu ymm14,YMMWORD PTR[((192-8-128))+r13]
-DB 067h
- mov r12,rax
- imul eax,ecx
- vpaddq ymm4,ymm4,ymm11
- vpmuludq ymm10,ymm10,ymm13
-DB 0c4h,041h,07eh,06fh,09dh,058h,000h,000h,000h
- and eax,01fffffffh
- vpaddq ymm5,ymm5,ymm10
- vpmuludq ymm14,ymm14,ymm13
- vmovdqu ymm10,YMMWORD PTR[((256-8-128))+r13]
- vpaddq ymm6,ymm6,ymm14
- vpmuludq ymm11,ymm11,ymm13
- vmovdqu ymm9,YMMWORD PTR[((288-8-128))+r13]
- vmovd xmm0,eax
- imul rax,QWORD PTR[((-128))+r13]
- vpaddq ymm7,ymm7,ymm11
- vpmuludq ymm10,ymm10,ymm13
- vmovdqu ymm14,YMMWORD PTR[((32-16-128))+r13]
- vpbroadcastq ymm0,xmm0
- vpaddq ymm8,ymm8,ymm10
- vpmuludq ymm9,ymm9,ymm13
- vmovdqu ymm11,YMMWORD PTR[((64-16-128))+r13]
- add r12,rax
-
- vmovdqu ymm13,YMMWORD PTR[((32-24-128))+r13]
- vpmuludq ymm14,ymm14,ymm12
- vmovdqu ymm10,YMMWORD PTR[((96-16-128))+r13]
- vpaddq ymm1,ymm1,ymm14
- vpmuludq ymm13,ymm13,ymm0
- vpmuludq ymm11,ymm11,ymm12
-DB 0c4h,041h,07eh,06fh,0b5h,0f0h,0ffh,0ffh,0ffh
- vpaddq ymm13,ymm13,ymm1
- vpaddq ymm2,ymm2,ymm11
- vpmuludq ymm10,ymm10,ymm12
- vmovdqu ymm11,YMMWORD PTR[((160-16-128))+r13]
-DB 067h
- vmovq rax,xmm13
- vmovdqu YMMWORD PTR[rsp],ymm13
- vpaddq ymm3,ymm3,ymm10
- vpmuludq ymm14,ymm14,ymm12
- vmovdqu ymm10,YMMWORD PTR[((192-16-128))+r13]
- vpaddq ymm4,ymm4,ymm14
- vpmuludq ymm11,ymm11,ymm12
- vmovdqu ymm14,YMMWORD PTR[((224-16-128))+r13]
- vpaddq ymm5,ymm5,ymm11
- vpmuludq ymm10,ymm10,ymm12
- vmovdqu ymm11,YMMWORD PTR[((256-16-128))+r13]
- vpaddq ymm6,ymm6,ymm10
- vpmuludq ymm14,ymm14,ymm12
- shr r12,29
- vmovdqu ymm10,YMMWORD PTR[((288-16-128))+r13]
- add rax,r12
- vpaddq ymm7,ymm7,ymm14
- vpmuludq ymm11,ymm11,ymm12
-
- mov r9,rax
- imul eax,ecx
- vpaddq ymm8,ymm8,ymm11
- vpmuludq ymm10,ymm10,ymm12
- and eax,01fffffffh
- vmovd xmm12,eax
- vmovdqu ymm11,YMMWORD PTR[((96-24-128))+r13]
-DB 067h
- vpaddq ymm9,ymm9,ymm10
- vpbroadcastq ymm12,xmm12
-
- vpmuludq ymm14,ymm0,YMMWORD PTR[((64-24-128))+r13]
- vmovdqu ymm10,YMMWORD PTR[((128-24-128))+r13]
- mov rdx,rax
- imul rax,QWORD PTR[((-128))+r13]
- mov r10,QWORD PTR[8+rsp]
- vpaddq ymm1,ymm2,ymm14
- vpmuludq ymm11,ymm11,ymm0
- vmovdqu ymm14,YMMWORD PTR[((160-24-128))+r13]
- add r9,rax
- mov rax,rdx
- imul rax,QWORD PTR[((8-128))+r13]
-DB 067h
- shr r9,29
- mov r11,QWORD PTR[16+rsp]
- vpaddq ymm2,ymm3,ymm11
- vpmuludq ymm10,ymm10,ymm0
- vmovdqu ymm11,YMMWORD PTR[((192-24-128))+r13]
- add r10,rax
- mov rax,rdx
- imul rax,QWORD PTR[((16-128))+r13]
- vpaddq ymm3,ymm4,ymm10
- vpmuludq ymm14,ymm14,ymm0
- vmovdqu ymm10,YMMWORD PTR[((224-24-128))+r13]
- imul rdx,QWORD PTR[((24-128))+r13]
- add r11,rax
- lea rax,QWORD PTR[r10*1+r9]
- vpaddq ymm4,ymm5,ymm14
- vpmuludq ymm11,ymm11,ymm0
- vmovdqu ymm14,YMMWORD PTR[((256-24-128))+r13]
- mov r10,rax
- imul eax,ecx
- vpmuludq ymm10,ymm10,ymm0
- vpaddq ymm5,ymm6,ymm11
- vmovdqu ymm11,YMMWORD PTR[((288-24-128))+r13]
- and eax,01fffffffh
- vpaddq ymm6,ymm7,ymm10
- vpmuludq ymm14,ymm14,ymm0
- add rdx,QWORD PTR[24+rsp]
- vpaddq ymm7,ymm8,ymm14
- vpmuludq ymm11,ymm11,ymm0
- vpaddq ymm8,ymm9,ymm11
- vmovq xmm9,r12
- mov r12,rdx
-
- dec r14d
- jnz $L$OOP_REDUCE_1024
- lea r12,QWORD PTR[448+rsp]
- vpaddq ymm0,ymm13,ymm9
- vpxor ymm9,ymm9,ymm9
-
- vpaddq ymm0,ymm0,YMMWORD PTR[((288-192))+rbx]
- vpaddq ymm1,ymm1,YMMWORD PTR[((320-448))+r12]
- vpaddq ymm2,ymm2,YMMWORD PTR[((352-448))+r12]
- vpaddq ymm3,ymm3,YMMWORD PTR[((384-448))+r12]
- vpaddq ymm4,ymm4,YMMWORD PTR[((416-448))+r12]
- vpaddq ymm5,ymm5,YMMWORD PTR[((448-448))+r12]
- vpaddq ymm6,ymm6,YMMWORD PTR[((480-448))+r12]
- vpaddq ymm7,ymm7,YMMWORD PTR[((512-448))+r12]
- vpaddq ymm8,ymm8,YMMWORD PTR[((544-448))+r12]
-
- vpsrlq ymm14,ymm0,29
- vpand ymm0,ymm0,ymm15
- vpsrlq ymm11,ymm1,29
- vpand ymm1,ymm1,ymm15
- vpsrlq ymm12,ymm2,29
- vpermq ymm14,ymm14,093h
- vpand ymm2,ymm2,ymm15
- vpsrlq ymm13,ymm3,29
- vpermq ymm11,ymm11,093h
- vpand ymm3,ymm3,ymm15
- vpermq ymm12,ymm12,093h
-
- vpblendd ymm10,ymm14,ymm9,3
- vpermq ymm13,ymm13,093h
- vpblendd ymm14,ymm11,ymm14,3
- vpaddq ymm0,ymm0,ymm10
- vpblendd ymm11,ymm12,ymm11,3
- vpaddq ymm1,ymm1,ymm14
- vpblendd ymm12,ymm13,ymm12,3
- vpaddq ymm2,ymm2,ymm11
- vpblendd ymm13,ymm9,ymm13,3
- vpaddq ymm3,ymm3,ymm12
- vpaddq ymm4,ymm4,ymm13
-
- vpsrlq ymm14,ymm0,29
- vpand ymm0,ymm0,ymm15
- vpsrlq ymm11,ymm1,29
- vpand ymm1,ymm1,ymm15
- vpsrlq ymm12,ymm2,29
- vpermq ymm14,ymm14,093h
- vpand ymm2,ymm2,ymm15
- vpsrlq ymm13,ymm3,29
- vpermq ymm11,ymm11,093h
- vpand ymm3,ymm3,ymm15
- vpermq ymm12,ymm12,093h
-
- vpblendd ymm10,ymm14,ymm9,3
- vpermq ymm13,ymm13,093h
- vpblendd ymm14,ymm11,ymm14,3
- vpaddq ymm0,ymm0,ymm10
- vpblendd ymm11,ymm12,ymm11,3
- vpaddq ymm1,ymm1,ymm14
- vmovdqu YMMWORD PTR[(0-128)+rdi],ymm0
- vpblendd ymm12,ymm13,ymm12,3
- vpaddq ymm2,ymm2,ymm11
- vmovdqu YMMWORD PTR[(32-128)+rdi],ymm1
- vpblendd ymm13,ymm9,ymm13,3
- vpaddq ymm3,ymm3,ymm12
- vmovdqu YMMWORD PTR[(64-128)+rdi],ymm2
- vpaddq ymm4,ymm4,ymm13
- vmovdqu YMMWORD PTR[(96-128)+rdi],ymm3
- vpsrlq ymm14,ymm4,29
- vpand ymm4,ymm4,ymm15
- vpsrlq ymm11,ymm5,29
- vpand ymm5,ymm5,ymm15
- vpsrlq ymm12,ymm6,29
- vpermq ymm14,ymm14,093h
- vpand ymm6,ymm6,ymm15
- vpsrlq ymm13,ymm7,29
- vpermq ymm11,ymm11,093h
- vpand ymm7,ymm7,ymm15
- vpsrlq ymm0,ymm8,29
- vpermq ymm12,ymm12,093h
- vpand ymm8,ymm8,ymm15
- vpermq ymm13,ymm13,093h
-
- vpblendd ymm10,ymm14,ymm9,3
- vpermq ymm0,ymm0,093h
- vpblendd ymm14,ymm11,ymm14,3
- vpaddq ymm4,ymm4,ymm10
- vpblendd ymm11,ymm12,ymm11,3
- vpaddq ymm5,ymm5,ymm14
- vpblendd ymm12,ymm13,ymm12,3
- vpaddq ymm6,ymm6,ymm11
- vpblendd ymm13,ymm0,ymm13,3
- vpaddq ymm7,ymm7,ymm12
- vpaddq ymm8,ymm8,ymm13
-
- vpsrlq ymm14,ymm4,29
- vpand ymm4,ymm4,ymm15
- vpsrlq ymm11,ymm5,29
- vpand ymm5,ymm5,ymm15
- vpsrlq ymm12,ymm6,29
- vpermq ymm14,ymm14,093h
- vpand ymm6,ymm6,ymm15
- vpsrlq ymm13,ymm7,29
- vpermq ymm11,ymm11,093h
- vpand ymm7,ymm7,ymm15
- vpsrlq ymm0,ymm8,29
- vpermq ymm12,ymm12,093h
- vpand ymm8,ymm8,ymm15
- vpermq ymm13,ymm13,093h
-
- vpblendd ymm10,ymm14,ymm9,3
- vpermq ymm0,ymm0,093h
- vpblendd ymm14,ymm11,ymm14,3
- vpaddq ymm4,ymm4,ymm10
- vpblendd ymm11,ymm12,ymm11,3
- vpaddq ymm5,ymm5,ymm14
- vmovdqu YMMWORD PTR[(128-128)+rdi],ymm4
- vpblendd ymm12,ymm13,ymm12,3
- vpaddq ymm6,ymm6,ymm11
- vmovdqu YMMWORD PTR[(160-128)+rdi],ymm5
- vpblendd ymm13,ymm0,ymm13,3
- vpaddq ymm7,ymm7,ymm12
- vmovdqu YMMWORD PTR[(192-128)+rdi],ymm6
- vpaddq ymm8,ymm8,ymm13
- vmovdqu YMMWORD PTR[(224-128)+rdi],ymm7
- vmovdqu YMMWORD PTR[(256-128)+rdi],ymm8
-
- mov rsi,rdi
- dec r8d
- jne $L$OOP_GRANDE_SQR_1024
-
- vzeroall
- mov rax,rbp
-
-$L$sqr_1024_in_tail::
- movaps xmm6,XMMWORD PTR[((-216))+rax]
- movaps xmm7,XMMWORD PTR[((-200))+rax]
- movaps xmm8,XMMWORD PTR[((-184))+rax]
- movaps xmm9,XMMWORD PTR[((-168))+rax]
- movaps xmm10,XMMWORD PTR[((-152))+rax]
- movaps xmm11,XMMWORD PTR[((-136))+rax]
- movaps xmm12,XMMWORD PTR[((-120))+rax]
- movaps xmm13,XMMWORD PTR[((-104))+rax]
- movaps xmm14,XMMWORD PTR[((-88))+rax]
- movaps xmm15,XMMWORD PTR[((-72))+rax]
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$sqr_1024_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_rsaz_1024_sqr_avx2::
-rsaz_1024_sqr_avx2 ENDP
-PUBLIC rsaz_1024_mul_avx2
-
-ALIGN 64
-rsaz_1024_mul_avx2 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_rsaz_1024_mul_avx2::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
- lea rax,QWORD PTR[rsp]
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- vzeroupper
- lea rsp,QWORD PTR[((-168))+rsp]
- vmovaps XMMWORD PTR[(-216)+rax],xmm6
- vmovaps XMMWORD PTR[(-200)+rax],xmm7
- vmovaps XMMWORD PTR[(-184)+rax],xmm8
- vmovaps XMMWORD PTR[(-168)+rax],xmm9
- vmovaps XMMWORD PTR[(-152)+rax],xmm10
- vmovaps XMMWORD PTR[(-136)+rax],xmm11
- vmovaps XMMWORD PTR[(-120)+rax],xmm12
- vmovaps XMMWORD PTR[(-104)+rax],xmm13
- vmovaps XMMWORD PTR[(-88)+rax],xmm14
- vmovaps XMMWORD PTR[(-72)+rax],xmm15
-$L$mul_1024_body::
- mov rbp,rax
-
- vzeroall
- mov r13,rdx
- sub rsp,64
-
-
-
-
-
-
-DB 067h,067h
- mov r15,rsi
- and r15,4095
- add r15,32*10
- shr r15,12
- mov r15,rsi
- cmovnz rsi,r13
- cmovnz r13,r15
-
- mov r15,rcx
- sub rsi,-128
- sub rcx,-128
- sub rdi,-128
-
- and r15,4095
- add r15,32*10
-DB 067h,067h
- shr r15,12
- jz $L$mul_1024_no_n_copy
-
-
-
-
-
- sub rsp,32*10
- vmovdqu ymm0,YMMWORD PTR[((0-128))+rcx]
- and rsp,-512
- vmovdqu ymm1,YMMWORD PTR[((32-128))+rcx]
- vmovdqu ymm2,YMMWORD PTR[((64-128))+rcx]
- vmovdqu ymm3,YMMWORD PTR[((96-128))+rcx]
- vmovdqu ymm4,YMMWORD PTR[((128-128))+rcx]
- vmovdqu ymm5,YMMWORD PTR[((160-128))+rcx]
- vmovdqu ymm6,YMMWORD PTR[((192-128))+rcx]
- vmovdqu ymm7,YMMWORD PTR[((224-128))+rcx]
- vmovdqu ymm8,YMMWORD PTR[((256-128))+rcx]
- lea rcx,QWORD PTR[((64+128))+rsp]
- vmovdqu YMMWORD PTR[(0-128)+rcx],ymm0
- vpxor ymm0,ymm0,ymm0
- vmovdqu YMMWORD PTR[(32-128)+rcx],ymm1
- vpxor ymm1,ymm1,ymm1
- vmovdqu YMMWORD PTR[(64-128)+rcx],ymm2
- vpxor ymm2,ymm2,ymm2
- vmovdqu YMMWORD PTR[(96-128)+rcx],ymm3
- vpxor ymm3,ymm3,ymm3
- vmovdqu YMMWORD PTR[(128-128)+rcx],ymm4
- vpxor ymm4,ymm4,ymm4
- vmovdqu YMMWORD PTR[(160-128)+rcx],ymm5
- vpxor ymm5,ymm5,ymm5
- vmovdqu YMMWORD PTR[(192-128)+rcx],ymm6
- vpxor ymm6,ymm6,ymm6
- vmovdqu YMMWORD PTR[(224-128)+rcx],ymm7
- vpxor ymm7,ymm7,ymm7
- vmovdqu YMMWORD PTR[(256-128)+rcx],ymm8
- vmovdqa ymm8,ymm0
- vmovdqu YMMWORD PTR[(288-128)+rcx],ymm9
-$L$mul_1024_no_n_copy::
- and rsp,-64
-
- mov rbx,QWORD PTR[r13]
- vpbroadcastq ymm10,QWORD PTR[r13]
- vmovdqu YMMWORD PTR[rsp],ymm0
- xor r9,r9
-DB 067h
- xor r10,r10
- xor r11,r11
- xor r12,r12
-
- vmovdqu ymm15,YMMWORD PTR[$L$and_mask]
- mov r14d,9
- vmovdqu YMMWORD PTR[(288-128)+rdi],ymm9
- jmp $L$oop_mul_1024
-
-ALIGN 32
-$L$oop_mul_1024::
- vpsrlq ymm9,ymm3,29
- mov rax,rbx
- imul rax,QWORD PTR[((-128))+rsi]
- add rax,r9
- mov r10,rbx
- imul r10,QWORD PTR[((8-128))+rsi]
- add r10,QWORD PTR[8+rsp]
-
- mov r9,rax
- imul eax,r8d
- and eax,01fffffffh
-
- mov r11,rbx
- imul r11,QWORD PTR[((16-128))+rsi]
- add r11,QWORD PTR[16+rsp]
-
- mov r12,rbx
- imul r12,QWORD PTR[((24-128))+rsi]
- add r12,QWORD PTR[24+rsp]
- vpmuludq ymm0,ymm10,YMMWORD PTR[((32-128))+rsi]
- vmovd xmm11,eax
- vpaddq ymm1,ymm1,ymm0
- vpmuludq ymm12,ymm10,YMMWORD PTR[((64-128))+rsi]
- vpbroadcastq ymm11,xmm11
- vpaddq ymm2,ymm2,ymm12
- vpmuludq ymm13,ymm10,YMMWORD PTR[((96-128))+rsi]
- vpand ymm3,ymm3,ymm15
- vpaddq ymm3,ymm3,ymm13
- vpmuludq ymm0,ymm10,YMMWORD PTR[((128-128))+rsi]
- vpaddq ymm4,ymm4,ymm0
- vpmuludq ymm12,ymm10,YMMWORD PTR[((160-128))+rsi]
- vpaddq ymm5,ymm5,ymm12
- vpmuludq ymm13,ymm10,YMMWORD PTR[((192-128))+rsi]
- vpaddq ymm6,ymm6,ymm13
- vpmuludq ymm0,ymm10,YMMWORD PTR[((224-128))+rsi]
- vpermq ymm9,ymm9,093h
- vpaddq ymm7,ymm7,ymm0
- vpmuludq ymm12,ymm10,YMMWORD PTR[((256-128))+rsi]
- vpbroadcastq ymm10,QWORD PTR[8+r13]
- vpaddq ymm8,ymm8,ymm12
-
- mov rdx,rax
- imul rax,QWORD PTR[((-128))+rcx]
- add r9,rax
- mov rax,rdx
- imul rax,QWORD PTR[((8-128))+rcx]
- add r10,rax
- mov rax,rdx
- imul rax,QWORD PTR[((16-128))+rcx]
- add r11,rax
- shr r9,29
- imul rdx,QWORD PTR[((24-128))+rcx]
- add r12,rdx
- add r10,r9
-
- vpmuludq ymm13,ymm11,YMMWORD PTR[((32-128))+rcx]
- vmovq rbx,xmm10
- vpaddq ymm1,ymm1,ymm13
- vpmuludq ymm0,ymm11,YMMWORD PTR[((64-128))+rcx]
- vpaddq ymm2,ymm2,ymm0
- vpmuludq ymm12,ymm11,YMMWORD PTR[((96-128))+rcx]
- vpaddq ymm3,ymm3,ymm12
- vpmuludq ymm13,ymm11,YMMWORD PTR[((128-128))+rcx]
- vpaddq ymm4,ymm4,ymm13
- vpmuludq ymm0,ymm11,YMMWORD PTR[((160-128))+rcx]
- vpaddq ymm5,ymm5,ymm0
- vpmuludq ymm12,ymm11,YMMWORD PTR[((192-128))+rcx]
- vpaddq ymm6,ymm6,ymm12
- vpmuludq ymm13,ymm11,YMMWORD PTR[((224-128))+rcx]
- vpblendd ymm12,ymm9,ymm14,3
- vpaddq ymm7,ymm7,ymm13
- vpmuludq ymm0,ymm11,YMMWORD PTR[((256-128))+rcx]
- vpaddq ymm3,ymm3,ymm12
- vpaddq ymm8,ymm8,ymm0
-
- mov rax,rbx
- imul rax,QWORD PTR[((-128))+rsi]
- add r10,rax
- vmovdqu ymm12,YMMWORD PTR[((-8+32-128))+rsi]
- mov rax,rbx
- imul rax,QWORD PTR[((8-128))+rsi]
- add r11,rax
- vmovdqu ymm13,YMMWORD PTR[((-8+64-128))+rsi]
-
- mov rax,r10
- vpblendd ymm9,ymm9,ymm14,0fch
- imul eax,r8d
- vpaddq ymm4,ymm4,ymm9
- and eax,01fffffffh
-
- imul rbx,QWORD PTR[((16-128))+rsi]
- add r12,rbx
- vpmuludq ymm12,ymm12,ymm10
- vmovd xmm11,eax
- vmovdqu ymm0,YMMWORD PTR[((-8+96-128))+rsi]
- vpaddq ymm1,ymm1,ymm12
- vpmuludq ymm13,ymm13,ymm10
- vpbroadcastq ymm11,xmm11
- vmovdqu ymm12,YMMWORD PTR[((-8+128-128))+rsi]
- vpaddq ymm2,ymm2,ymm13
- vpmuludq ymm0,ymm0,ymm10
- vmovdqu ymm13,YMMWORD PTR[((-8+160-128))+rsi]
- vpaddq ymm3,ymm3,ymm0
- vpmuludq ymm12,ymm12,ymm10
- vmovdqu ymm0,YMMWORD PTR[((-8+192-128))+rsi]
- vpaddq ymm4,ymm4,ymm12
- vpmuludq ymm13,ymm13,ymm10
- vmovdqu ymm12,YMMWORD PTR[((-8+224-128))+rsi]
- vpaddq ymm5,ymm5,ymm13
- vpmuludq ymm0,ymm0,ymm10
- vmovdqu ymm13,YMMWORD PTR[((-8+256-128))+rsi]
- vpaddq ymm6,ymm6,ymm0
- vpmuludq ymm12,ymm12,ymm10
- vmovdqu ymm9,YMMWORD PTR[((-8+288-128))+rsi]
- vpaddq ymm7,ymm7,ymm12
- vpmuludq ymm13,ymm13,ymm10
- vpaddq ymm8,ymm8,ymm13
- vpmuludq ymm9,ymm9,ymm10
- vpbroadcastq ymm10,QWORD PTR[16+r13]
-
- mov rdx,rax
- imul rax,QWORD PTR[((-128))+rcx]
- add r10,rax
- vmovdqu ymm0,YMMWORD PTR[((-8+32-128))+rcx]
- mov rax,rdx
- imul rax,QWORD PTR[((8-128))+rcx]
- add r11,rax
- vmovdqu ymm12,YMMWORD PTR[((-8+64-128))+rcx]
- shr r10,29
- imul rdx,QWORD PTR[((16-128))+rcx]
- add r12,rdx
- add r11,r10
-
- vpmuludq ymm0,ymm0,ymm11
- vmovq rbx,xmm10
- vmovdqu ymm13,YMMWORD PTR[((-8+96-128))+rcx]
- vpaddq ymm1,ymm1,ymm0
- vpmuludq ymm12,ymm12,ymm11
- vmovdqu ymm0,YMMWORD PTR[((-8+128-128))+rcx]
- vpaddq ymm2,ymm2,ymm12
- vpmuludq ymm13,ymm13,ymm11
- vmovdqu ymm12,YMMWORD PTR[((-8+160-128))+rcx]
- vpaddq ymm3,ymm3,ymm13
- vpmuludq ymm0,ymm0,ymm11
- vmovdqu ymm13,YMMWORD PTR[((-8+192-128))+rcx]
- vpaddq ymm4,ymm4,ymm0
- vpmuludq ymm12,ymm12,ymm11
- vmovdqu ymm0,YMMWORD PTR[((-8+224-128))+rcx]
- vpaddq ymm5,ymm5,ymm12
- vpmuludq ymm13,ymm13,ymm11
- vmovdqu ymm12,YMMWORD PTR[((-8+256-128))+rcx]
- vpaddq ymm6,ymm6,ymm13
- vpmuludq ymm0,ymm0,ymm11
- vmovdqu ymm13,YMMWORD PTR[((-8+288-128))+rcx]
- vpaddq ymm7,ymm7,ymm0
- vpmuludq ymm12,ymm12,ymm11
- vpaddq ymm8,ymm8,ymm12
- vpmuludq ymm13,ymm13,ymm11
- vpaddq ymm9,ymm9,ymm13
-
- vmovdqu ymm0,YMMWORD PTR[((-16+32-128))+rsi]
- mov rax,rbx
- imul rax,QWORD PTR[((-128))+rsi]
- add rax,r11
-
- vmovdqu ymm12,YMMWORD PTR[((-16+64-128))+rsi]
- mov r11,rax
- imul eax,r8d
- and eax,01fffffffh
-
- imul rbx,QWORD PTR[((8-128))+rsi]
- add r12,rbx
- vpmuludq ymm0,ymm0,ymm10
- vmovd xmm11,eax
- vmovdqu ymm13,YMMWORD PTR[((-16+96-128))+rsi]
- vpaddq ymm1,ymm1,ymm0
- vpmuludq ymm12,ymm12,ymm10
- vpbroadcastq ymm11,xmm11
- vmovdqu ymm0,YMMWORD PTR[((-16+128-128))+rsi]
- vpaddq ymm2,ymm2,ymm12
- vpmuludq ymm13,ymm13,ymm10
- vmovdqu ymm12,YMMWORD PTR[((-16+160-128))+rsi]
- vpaddq ymm3,ymm3,ymm13
- vpmuludq ymm0,ymm0,ymm10
- vmovdqu ymm13,YMMWORD PTR[((-16+192-128))+rsi]
- vpaddq ymm4,ymm4,ymm0
- vpmuludq ymm12,ymm12,ymm10
- vmovdqu ymm0,YMMWORD PTR[((-16+224-128))+rsi]
- vpaddq ymm5,ymm5,ymm12
- vpmuludq ymm13,ymm13,ymm10
- vmovdqu ymm12,YMMWORD PTR[((-16+256-128))+rsi]
- vpaddq ymm6,ymm6,ymm13
- vpmuludq ymm0,ymm0,ymm10
- vmovdqu ymm13,YMMWORD PTR[((-16+288-128))+rsi]
- vpaddq ymm7,ymm7,ymm0
- vpmuludq ymm12,ymm12,ymm10
- vpaddq ymm8,ymm8,ymm12
- vpmuludq ymm13,ymm13,ymm10
- vpbroadcastq ymm10,QWORD PTR[24+r13]
- vpaddq ymm9,ymm9,ymm13
-
- vmovdqu ymm0,YMMWORD PTR[((-16+32-128))+rcx]
- mov rdx,rax
- imul rax,QWORD PTR[((-128))+rcx]
- add r11,rax
- vmovdqu ymm12,YMMWORD PTR[((-16+64-128))+rcx]
- imul rdx,QWORD PTR[((8-128))+rcx]
- add r12,rdx
- shr r11,29
-
- vpmuludq ymm0,ymm0,ymm11
- vmovq rbx,xmm10
- vmovdqu ymm13,YMMWORD PTR[((-16+96-128))+rcx]
- vpaddq ymm1,ymm1,ymm0
- vpmuludq ymm12,ymm12,ymm11
- vmovdqu ymm0,YMMWORD PTR[((-16+128-128))+rcx]
- vpaddq ymm2,ymm2,ymm12
- vpmuludq ymm13,ymm13,ymm11
- vmovdqu ymm12,YMMWORD PTR[((-16+160-128))+rcx]
- vpaddq ymm3,ymm3,ymm13
- vpmuludq ymm0,ymm0,ymm11
- vmovdqu ymm13,YMMWORD PTR[((-16+192-128))+rcx]
- vpaddq ymm4,ymm4,ymm0
- vpmuludq ymm12,ymm12,ymm11
- vmovdqu ymm0,YMMWORD PTR[((-16+224-128))+rcx]
- vpaddq ymm5,ymm5,ymm12
- vpmuludq ymm13,ymm13,ymm11
- vmovdqu ymm12,YMMWORD PTR[((-16+256-128))+rcx]
- vpaddq ymm6,ymm6,ymm13
- vpmuludq ymm0,ymm0,ymm11
- vmovdqu ymm13,YMMWORD PTR[((-16+288-128))+rcx]
- vpaddq ymm7,ymm7,ymm0
- vpmuludq ymm12,ymm12,ymm11
- vmovdqu ymm0,YMMWORD PTR[((-24+32-128))+rsi]
- vpaddq ymm8,ymm8,ymm12
- vpmuludq ymm13,ymm13,ymm11
- vmovdqu ymm12,YMMWORD PTR[((-24+64-128))+rsi]
- vpaddq ymm9,ymm9,ymm13
-
- add r12,r11
- imul rbx,QWORD PTR[((-128))+rsi]
- add r12,rbx
-
- mov rax,r12
- imul eax,r8d
- and eax,01fffffffh
-
- vpmuludq ymm0,ymm0,ymm10
- vmovd xmm11,eax
- vmovdqu ymm13,YMMWORD PTR[((-24+96-128))+rsi]
- vpaddq ymm1,ymm1,ymm0
- vpmuludq ymm12,ymm12,ymm10
- vpbroadcastq ymm11,xmm11
- vmovdqu ymm0,YMMWORD PTR[((-24+128-128))+rsi]
- vpaddq ymm2,ymm2,ymm12
- vpmuludq ymm13,ymm13,ymm10
- vmovdqu ymm12,YMMWORD PTR[((-24+160-128))+rsi]
- vpaddq ymm3,ymm3,ymm13
- vpmuludq ymm0,ymm0,ymm10
- vmovdqu ymm13,YMMWORD PTR[((-24+192-128))+rsi]
- vpaddq ymm4,ymm4,ymm0
- vpmuludq ymm12,ymm12,ymm10
- vmovdqu ymm0,YMMWORD PTR[((-24+224-128))+rsi]
- vpaddq ymm5,ymm5,ymm12
- vpmuludq ymm13,ymm13,ymm10
- vmovdqu ymm12,YMMWORD PTR[((-24+256-128))+rsi]
- vpaddq ymm6,ymm6,ymm13
- vpmuludq ymm0,ymm0,ymm10
- vmovdqu ymm13,YMMWORD PTR[((-24+288-128))+rsi]
- vpaddq ymm7,ymm7,ymm0
- vpmuludq ymm12,ymm12,ymm10
- vpaddq ymm8,ymm8,ymm12
- vpmuludq ymm13,ymm13,ymm10
- vpbroadcastq ymm10,QWORD PTR[32+r13]
- vpaddq ymm9,ymm9,ymm13
- add r13,32
-
- vmovdqu ymm0,YMMWORD PTR[((-24+32-128))+rcx]
- imul rax,QWORD PTR[((-128))+rcx]
- add r12,rax
- shr r12,29
-
- vmovdqu ymm12,YMMWORD PTR[((-24+64-128))+rcx]
- vpmuludq ymm0,ymm0,ymm11
- vmovq rbx,xmm10
- vmovdqu ymm13,YMMWORD PTR[((-24+96-128))+rcx]
- vpaddq ymm0,ymm1,ymm0
- vpmuludq ymm12,ymm12,ymm11
- vmovdqu YMMWORD PTR[rsp],ymm0
- vpaddq ymm1,ymm2,ymm12
- vmovdqu ymm0,YMMWORD PTR[((-24+128-128))+rcx]
- vpmuludq ymm13,ymm13,ymm11
- vmovdqu ymm12,YMMWORD PTR[((-24+160-128))+rcx]
- vpaddq ymm2,ymm3,ymm13
- vpmuludq ymm0,ymm0,ymm11
- vmovdqu ymm13,YMMWORD PTR[((-24+192-128))+rcx]
- vpaddq ymm3,ymm4,ymm0
- vpmuludq ymm12,ymm12,ymm11
- vmovdqu ymm0,YMMWORD PTR[((-24+224-128))+rcx]
- vpaddq ymm4,ymm5,ymm12
- vpmuludq ymm13,ymm13,ymm11
- vmovdqu ymm12,YMMWORD PTR[((-24+256-128))+rcx]
- vpaddq ymm5,ymm6,ymm13
- vpmuludq ymm0,ymm0,ymm11
- vmovdqu ymm13,YMMWORD PTR[((-24+288-128))+rcx]
- mov r9,r12
- vpaddq ymm6,ymm7,ymm0
- vpmuludq ymm12,ymm12,ymm11
- add r9,QWORD PTR[rsp]
- vpaddq ymm7,ymm8,ymm12
- vpmuludq ymm13,ymm13,ymm11
- vmovq xmm12,r12
- vpaddq ymm8,ymm9,ymm13
-
- dec r14d
- jnz $L$oop_mul_1024
- vpaddq ymm0,ymm12,YMMWORD PTR[rsp]
-
- vpsrlq ymm12,ymm0,29
- vpand ymm0,ymm0,ymm15
- vpsrlq ymm13,ymm1,29
- vpand ymm1,ymm1,ymm15
- vpsrlq ymm10,ymm2,29
- vpermq ymm12,ymm12,093h
- vpand ymm2,ymm2,ymm15
- vpsrlq ymm11,ymm3,29
- vpermq ymm13,ymm13,093h
- vpand ymm3,ymm3,ymm15
-
- vpblendd ymm9,ymm12,ymm14,3
- vpermq ymm10,ymm10,093h
- vpblendd ymm12,ymm13,ymm12,3
- vpermq ymm11,ymm11,093h
- vpaddq ymm0,ymm0,ymm9
- vpblendd ymm13,ymm10,ymm13,3
- vpaddq ymm1,ymm1,ymm12
- vpblendd ymm10,ymm11,ymm10,3
- vpaddq ymm2,ymm2,ymm13
- vpblendd ymm11,ymm14,ymm11,3
- vpaddq ymm3,ymm3,ymm10
- vpaddq ymm4,ymm4,ymm11
-
- vpsrlq ymm12,ymm0,29
- vpand ymm0,ymm0,ymm15
- vpsrlq ymm13,ymm1,29
- vpand ymm1,ymm1,ymm15
- vpsrlq ymm10,ymm2,29
- vpermq ymm12,ymm12,093h
- vpand ymm2,ymm2,ymm15
- vpsrlq ymm11,ymm3,29
- vpermq ymm13,ymm13,093h
- vpand ymm3,ymm3,ymm15
- vpermq ymm10,ymm10,093h
-
- vpblendd ymm9,ymm12,ymm14,3
- vpermq ymm11,ymm11,093h
- vpblendd ymm12,ymm13,ymm12,3
- vpaddq ymm0,ymm0,ymm9
- vpblendd ymm13,ymm10,ymm13,3
- vpaddq ymm1,ymm1,ymm12
- vpblendd ymm10,ymm11,ymm10,3
- vpaddq ymm2,ymm2,ymm13
- vpblendd ymm11,ymm14,ymm11,3
- vpaddq ymm3,ymm3,ymm10
- vpaddq ymm4,ymm4,ymm11
-
- vmovdqu YMMWORD PTR[(0-128)+rdi],ymm0
- vmovdqu YMMWORD PTR[(32-128)+rdi],ymm1
- vmovdqu YMMWORD PTR[(64-128)+rdi],ymm2
- vmovdqu YMMWORD PTR[(96-128)+rdi],ymm3
- vpsrlq ymm12,ymm4,29
- vpand ymm4,ymm4,ymm15
- vpsrlq ymm13,ymm5,29
- vpand ymm5,ymm5,ymm15
- vpsrlq ymm10,ymm6,29
- vpermq ymm12,ymm12,093h
- vpand ymm6,ymm6,ymm15
- vpsrlq ymm11,ymm7,29
- vpermq ymm13,ymm13,093h
- vpand ymm7,ymm7,ymm15
- vpsrlq ymm0,ymm8,29
- vpermq ymm10,ymm10,093h
- vpand ymm8,ymm8,ymm15
- vpermq ymm11,ymm11,093h
-
- vpblendd ymm9,ymm12,ymm14,3
- vpermq ymm0,ymm0,093h
- vpblendd ymm12,ymm13,ymm12,3
- vpaddq ymm4,ymm4,ymm9
- vpblendd ymm13,ymm10,ymm13,3
- vpaddq ymm5,ymm5,ymm12
- vpblendd ymm10,ymm11,ymm10,3
- vpaddq ymm6,ymm6,ymm13
- vpblendd ymm11,ymm0,ymm11,3
- vpaddq ymm7,ymm7,ymm10
- vpaddq ymm8,ymm8,ymm11
-
- vpsrlq ymm12,ymm4,29
- vpand ymm4,ymm4,ymm15
- vpsrlq ymm13,ymm5,29
- vpand ymm5,ymm5,ymm15
- vpsrlq ymm10,ymm6,29
- vpermq ymm12,ymm12,093h
- vpand ymm6,ymm6,ymm15
- vpsrlq ymm11,ymm7,29
- vpermq ymm13,ymm13,093h
- vpand ymm7,ymm7,ymm15
- vpsrlq ymm0,ymm8,29
- vpermq ymm10,ymm10,093h
- vpand ymm8,ymm8,ymm15
- vpermq ymm11,ymm11,093h
-
- vpblendd ymm9,ymm12,ymm14,3
- vpermq ymm0,ymm0,093h
- vpblendd ymm12,ymm13,ymm12,3
- vpaddq ymm4,ymm4,ymm9
- vpblendd ymm13,ymm10,ymm13,3
- vpaddq ymm5,ymm5,ymm12
- vpblendd ymm10,ymm11,ymm10,3
- vpaddq ymm6,ymm6,ymm13
- vpblendd ymm11,ymm0,ymm11,3
- vpaddq ymm7,ymm7,ymm10
- vpaddq ymm8,ymm8,ymm11
-
- vmovdqu YMMWORD PTR[(128-128)+rdi],ymm4
- vmovdqu YMMWORD PTR[(160-128)+rdi],ymm5
- vmovdqu YMMWORD PTR[(192-128)+rdi],ymm6
- vmovdqu YMMWORD PTR[(224-128)+rdi],ymm7
- vmovdqu YMMWORD PTR[(256-128)+rdi],ymm8
- vzeroupper
-
- mov rax,rbp
-
-$L$mul_1024_in_tail::
- movaps xmm6,XMMWORD PTR[((-216))+rax]
- movaps xmm7,XMMWORD PTR[((-200))+rax]
- movaps xmm8,XMMWORD PTR[((-184))+rax]
- movaps xmm9,XMMWORD PTR[((-168))+rax]
- movaps xmm10,XMMWORD PTR[((-152))+rax]
- movaps xmm11,XMMWORD PTR[((-136))+rax]
- movaps xmm12,XMMWORD PTR[((-120))+rax]
- movaps xmm13,XMMWORD PTR[((-104))+rax]
- movaps xmm14,XMMWORD PTR[((-88))+rax]
- movaps xmm15,XMMWORD PTR[((-72))+rax]
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$mul_1024_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_rsaz_1024_mul_avx2::
-rsaz_1024_mul_avx2 ENDP
-PUBLIC rsaz_1024_red2norm_avx2
-
-ALIGN 32
-rsaz_1024_red2norm_avx2 PROC PUBLIC
-
- sub rdx,-128
- xor rax,rax
- mov r8,QWORD PTR[((-128))+rdx]
- mov r9,QWORD PTR[((-120))+rdx]
- mov r10,QWORD PTR[((-112))+rdx]
- shl r8,0
- shl r9,29
- mov r11,r10
- shl r10,58
- shr r11,6
- add rax,r8
- add rax,r9
- add rax,r10
- adc r11,0
- mov QWORD PTR[rcx],rax
- mov rax,r11
- mov r8,QWORD PTR[((-104))+rdx]
- mov r9,QWORD PTR[((-96))+rdx]
- shl r8,23
- mov r10,r9
- shl r9,52
- shr r10,12
- add rax,r8
- add rax,r9
- adc r10,0
- mov QWORD PTR[8+rcx],rax
- mov rax,r10
- mov r11,QWORD PTR[((-88))+rdx]
- mov r8,QWORD PTR[((-80))+rdx]
- shl r11,17
- mov r9,r8
- shl r8,46
- shr r9,18
- add rax,r11
- add rax,r8
- adc r9,0
- mov QWORD PTR[16+rcx],rax
- mov rax,r9
- mov r10,QWORD PTR[((-72))+rdx]
- mov r11,QWORD PTR[((-64))+rdx]
- shl r10,11
- mov r8,r11
- shl r11,40
- shr r8,24
- add rax,r10
- add rax,r11
- adc r8,0
- mov QWORD PTR[24+rcx],rax
- mov rax,r8
- mov r9,QWORD PTR[((-56))+rdx]
- mov r10,QWORD PTR[((-48))+rdx]
- mov r11,QWORD PTR[((-40))+rdx]
- shl r9,5
- shl r10,34
- mov r8,r11
- shl r11,63
- shr r8,1
- add rax,r9
- add rax,r10
- add rax,r11
- adc r8,0
- mov QWORD PTR[32+rcx],rax
- mov rax,r8
- mov r9,QWORD PTR[((-32))+rdx]
- mov r10,QWORD PTR[((-24))+rdx]
- shl r9,28
- mov r11,r10
- shl r10,57
- shr r11,7
- add rax,r9
- add rax,r10
- adc r11,0
- mov QWORD PTR[40+rcx],rax
- mov rax,r11
- mov r8,QWORD PTR[((-16))+rdx]
- mov r9,QWORD PTR[((-8))+rdx]
- shl r8,22
- mov r10,r9
- shl r9,51
- shr r10,13
- add rax,r8
- add rax,r9
- adc r10,0
- mov QWORD PTR[48+rcx],rax
- mov rax,r10
- mov r11,QWORD PTR[rdx]
- mov r8,QWORD PTR[8+rdx]
- shl r11,16
- mov r9,r8
- shl r8,45
- shr r9,19
- add rax,r11
- add rax,r8
- adc r9,0
- mov QWORD PTR[56+rcx],rax
- mov rax,r9
- mov r10,QWORD PTR[16+rdx]
- mov r11,QWORD PTR[24+rdx]
- shl r10,10
- mov r8,r11
- shl r11,39
- shr r8,25
- add rax,r10
- add rax,r11
- adc r8,0
- mov QWORD PTR[64+rcx],rax
- mov rax,r8
- mov r9,QWORD PTR[32+rdx]
- mov r10,QWORD PTR[40+rdx]
- mov r11,QWORD PTR[48+rdx]
- shl r9,4
- shl r10,33
- mov r8,r11
- shl r11,62
- shr r8,2
- add rax,r9
- add rax,r10
- add rax,r11
- adc r8,0
- mov QWORD PTR[72+rcx],rax
- mov rax,r8
- mov r9,QWORD PTR[56+rdx]
- mov r10,QWORD PTR[64+rdx]
- shl r9,27
- mov r11,r10
- shl r10,56
- shr r11,8
- add rax,r9
- add rax,r10
- adc r11,0
- mov QWORD PTR[80+rcx],rax
- mov rax,r11
- mov r8,QWORD PTR[72+rdx]
- mov r9,QWORD PTR[80+rdx]
- shl r8,21
- mov r10,r9
- shl r9,50
- shr r10,14
- add rax,r8
- add rax,r9
- adc r10,0
- mov QWORD PTR[88+rcx],rax
- mov rax,r10
- mov r11,QWORD PTR[88+rdx]
- mov r8,QWORD PTR[96+rdx]
- shl r11,15
- mov r9,r8
- shl r8,44
- shr r9,20
- add rax,r11
- add rax,r8
- adc r9,0
- mov QWORD PTR[96+rcx],rax
- mov rax,r9
- mov r10,QWORD PTR[104+rdx]
- mov r11,QWORD PTR[112+rdx]
- shl r10,9
- mov r8,r11
- shl r11,38
- shr r8,26
- add rax,r10
- add rax,r11
- adc r8,0
- mov QWORD PTR[104+rcx],rax
- mov rax,r8
- mov r9,QWORD PTR[120+rdx]
- mov r10,QWORD PTR[128+rdx]
- mov r11,QWORD PTR[136+rdx]
- shl r9,3
- shl r10,32
- mov r8,r11
- shl r11,61
- shr r8,3
- add rax,r9
- add rax,r10
- add rax,r11
- adc r8,0
- mov QWORD PTR[112+rcx],rax
- mov rax,r8
- mov r9,QWORD PTR[144+rdx]
- mov r10,QWORD PTR[152+rdx]
- shl r9,26
- mov r11,r10
- shl r10,55
- shr r11,9
- add rax,r9
- add rax,r10
- adc r11,0
- mov QWORD PTR[120+rcx],rax
- mov rax,r11
- DB 0F3h,0C3h ;repret
-
-rsaz_1024_red2norm_avx2 ENDP
-
-PUBLIC rsaz_1024_norm2red_avx2
-
-ALIGN 32
-rsaz_1024_norm2red_avx2 PROC PUBLIC
-
- sub rcx,-128
- mov r8,QWORD PTR[rdx]
- mov eax,01fffffffh
- mov r9,QWORD PTR[8+rdx]
- mov r11,r8
- shr r11,0
- and r11,rax
- mov QWORD PTR[((-128))+rcx],r11
- mov r10,r8
- shr r10,29
- and r10,rax
- mov QWORD PTR[((-120))+rcx],r10
- shrd r8,r9,58
- and r8,rax
- mov QWORD PTR[((-112))+rcx],r8
- mov r10,QWORD PTR[16+rdx]
- mov r8,r9
- shr r8,23
- and r8,rax
- mov QWORD PTR[((-104))+rcx],r8
- shrd r9,r10,52
- and r9,rax
- mov QWORD PTR[((-96))+rcx],r9
- mov r11,QWORD PTR[24+rdx]
- mov r9,r10
- shr r9,17
- and r9,rax
- mov QWORD PTR[((-88))+rcx],r9
- shrd r10,r11,46
- and r10,rax
- mov QWORD PTR[((-80))+rcx],r10
- mov r8,QWORD PTR[32+rdx]
- mov r10,r11
- shr r10,11
- and r10,rax
- mov QWORD PTR[((-72))+rcx],r10
- shrd r11,r8,40
- and r11,rax
- mov QWORD PTR[((-64))+rcx],r11
- mov r9,QWORD PTR[40+rdx]
- mov r11,r8
- shr r11,5
- and r11,rax
- mov QWORD PTR[((-56))+rcx],r11
- mov r10,r8
- shr r10,34
- and r10,rax
- mov QWORD PTR[((-48))+rcx],r10
- shrd r8,r9,63
- and r8,rax
- mov QWORD PTR[((-40))+rcx],r8
- mov r10,QWORD PTR[48+rdx]
- mov r8,r9
- shr r8,28
- and r8,rax
- mov QWORD PTR[((-32))+rcx],r8
- shrd r9,r10,57
- and r9,rax
- mov QWORD PTR[((-24))+rcx],r9
- mov r11,QWORD PTR[56+rdx]
- mov r9,r10
- shr r9,22
- and r9,rax
- mov QWORD PTR[((-16))+rcx],r9
- shrd r10,r11,51
- and r10,rax
- mov QWORD PTR[((-8))+rcx],r10
- mov r8,QWORD PTR[64+rdx]
- mov r10,r11
- shr r10,16
- and r10,rax
- mov QWORD PTR[rcx],r10
- shrd r11,r8,45
- and r11,rax
- mov QWORD PTR[8+rcx],r11
- mov r9,QWORD PTR[72+rdx]
- mov r11,r8
- shr r11,10
- and r11,rax
- mov QWORD PTR[16+rcx],r11
- shrd r8,r9,39
- and r8,rax
- mov QWORD PTR[24+rcx],r8
- mov r10,QWORD PTR[80+rdx]
- mov r8,r9
- shr r8,4
- and r8,rax
- mov QWORD PTR[32+rcx],r8
- mov r11,r9
- shr r11,33
- and r11,rax
- mov QWORD PTR[40+rcx],r11
- shrd r9,r10,62
- and r9,rax
- mov QWORD PTR[48+rcx],r9
- mov r11,QWORD PTR[88+rdx]
- mov r9,r10
- shr r9,27
- and r9,rax
- mov QWORD PTR[56+rcx],r9
- shrd r10,r11,56
- and r10,rax
- mov QWORD PTR[64+rcx],r10
- mov r8,QWORD PTR[96+rdx]
- mov r10,r11
- shr r10,21
- and r10,rax
- mov QWORD PTR[72+rcx],r10
- shrd r11,r8,50
- and r11,rax
- mov QWORD PTR[80+rcx],r11
- mov r9,QWORD PTR[104+rdx]
- mov r11,r8
- shr r11,15
- and r11,rax
- mov QWORD PTR[88+rcx],r11
- shrd r8,r9,44
- and r8,rax
- mov QWORD PTR[96+rcx],r8
- mov r10,QWORD PTR[112+rdx]
- mov r8,r9
- shr r8,9
- and r8,rax
- mov QWORD PTR[104+rcx],r8
- shrd r9,r10,38
- and r9,rax
- mov QWORD PTR[112+rcx],r9
- mov r11,QWORD PTR[120+rdx]
- mov r9,r10
- shr r9,3
- and r9,rax
- mov QWORD PTR[120+rcx],r9
- mov r8,r10
- shr r8,32
- and r8,rax
- mov QWORD PTR[128+rcx],r8
- shrd r10,r11,61
- and r10,rax
- mov QWORD PTR[136+rcx],r10
- xor r8,r8
- mov r10,r11
- shr r10,26
- and r10,rax
- mov QWORD PTR[144+rcx],r10
- shrd r11,r8,55
- and r11,rax
- mov QWORD PTR[152+rcx],r11
- mov QWORD PTR[160+rcx],r8
- mov QWORD PTR[168+rcx],r8
- mov QWORD PTR[176+rcx],r8
- mov QWORD PTR[184+rcx],r8
- DB 0F3h,0C3h ;repret
-
-rsaz_1024_norm2red_avx2 ENDP
-PUBLIC rsaz_1024_scatter5_avx2
-
-ALIGN 32
-rsaz_1024_scatter5_avx2 PROC PUBLIC
-
- vzeroupper
- vmovdqu ymm5,YMMWORD PTR[$L$scatter_permd]
- shl r8d,4
- lea rcx,QWORD PTR[r8*1+rcx]
- mov eax,9
- jmp $L$oop_scatter_1024
-
-ALIGN 32
-$L$oop_scatter_1024::
- vmovdqu ymm0,YMMWORD PTR[rdx]
- lea rdx,QWORD PTR[32+rdx]
- vpermd ymm0,ymm5,ymm0
- vmovdqu XMMWORD PTR[rcx],xmm0
- lea rcx,QWORD PTR[512+rcx]
- dec eax
- jnz $L$oop_scatter_1024
-
- vzeroupper
- DB 0F3h,0C3h ;repret
-
-rsaz_1024_scatter5_avx2 ENDP
-
-PUBLIC rsaz_1024_gather5_avx2
-
-ALIGN 32
-rsaz_1024_gather5_avx2 PROC PUBLIC
-
- vzeroupper
- mov r11,rsp
-
- lea rax,QWORD PTR[((-136))+rsp]
-$L$SEH_begin_rsaz_1024_gather5::
-
-DB 048h,08dh,060h,0e0h
-DB 0c5h,0f8h,029h,070h,0e0h
-DB 0c5h,0f8h,029h,078h,0f0h
-DB 0c5h,078h,029h,040h,000h
-DB 0c5h,078h,029h,048h,010h
-DB 0c5h,078h,029h,050h,020h
-DB 0c5h,078h,029h,058h,030h
-DB 0c5h,078h,029h,060h,040h
-DB 0c5h,078h,029h,068h,050h
-DB 0c5h,078h,029h,070h,060h
-DB 0c5h,078h,029h,078h,070h
- lea rsp,QWORD PTR[((-256))+rsp]
- and rsp,-32
- lea r10,QWORD PTR[$L$inc]
- lea rax,QWORD PTR[((-128))+rsp]
-
- vmovd xmm4,r8d
- vmovdqa ymm0,YMMWORD PTR[r10]
- vmovdqa ymm1,YMMWORD PTR[32+r10]
- vmovdqa ymm5,YMMWORD PTR[64+r10]
- vpbroadcastd ymm4,xmm4
-
- vpaddd ymm2,ymm0,ymm5
- vpcmpeqd ymm0,ymm0,ymm4
- vpaddd ymm3,ymm1,ymm5
- vpcmpeqd ymm1,ymm1,ymm4
- vmovdqa YMMWORD PTR[(0+128)+rax],ymm0
- vpaddd ymm0,ymm2,ymm5
- vpcmpeqd ymm2,ymm2,ymm4
- vmovdqa YMMWORD PTR[(32+128)+rax],ymm1
- vpaddd ymm1,ymm3,ymm5
- vpcmpeqd ymm3,ymm3,ymm4
- vmovdqa YMMWORD PTR[(64+128)+rax],ymm2
- vpaddd ymm2,ymm0,ymm5
- vpcmpeqd ymm0,ymm0,ymm4
- vmovdqa YMMWORD PTR[(96+128)+rax],ymm3
- vpaddd ymm3,ymm1,ymm5
- vpcmpeqd ymm1,ymm1,ymm4
- vmovdqa YMMWORD PTR[(128+128)+rax],ymm0
- vpaddd ymm8,ymm2,ymm5
- vpcmpeqd ymm2,ymm2,ymm4
- vmovdqa YMMWORD PTR[(160+128)+rax],ymm1
- vpaddd ymm9,ymm3,ymm5
- vpcmpeqd ymm3,ymm3,ymm4
- vmovdqa YMMWORD PTR[(192+128)+rax],ymm2
- vpaddd ymm10,ymm8,ymm5
- vpcmpeqd ymm8,ymm8,ymm4
- vmovdqa YMMWORD PTR[(224+128)+rax],ymm3
- vpaddd ymm11,ymm9,ymm5
- vpcmpeqd ymm9,ymm9,ymm4
- vpaddd ymm12,ymm10,ymm5
- vpcmpeqd ymm10,ymm10,ymm4
- vpaddd ymm13,ymm11,ymm5
- vpcmpeqd ymm11,ymm11,ymm4
- vpaddd ymm14,ymm12,ymm5
- vpcmpeqd ymm12,ymm12,ymm4
- vpaddd ymm15,ymm13,ymm5
- vpcmpeqd ymm13,ymm13,ymm4
- vpcmpeqd ymm14,ymm14,ymm4
- vpcmpeqd ymm15,ymm15,ymm4
-
- vmovdqa ymm7,YMMWORD PTR[((-32))+r10]
- lea rdx,QWORD PTR[128+rdx]
- mov r8d,9
-
-$L$oop_gather_1024::
- vmovdqa ymm0,YMMWORD PTR[((0-128))+rdx]
- vmovdqa ymm1,YMMWORD PTR[((32-128))+rdx]
- vmovdqa ymm2,YMMWORD PTR[((64-128))+rdx]
- vmovdqa ymm3,YMMWORD PTR[((96-128))+rdx]
- vpand ymm0,ymm0,YMMWORD PTR[((0+128))+rax]
- vpand ymm1,ymm1,YMMWORD PTR[((32+128))+rax]
- vpand ymm2,ymm2,YMMWORD PTR[((64+128))+rax]
- vpor ymm4,ymm1,ymm0
- vpand ymm3,ymm3,YMMWORD PTR[((96+128))+rax]
- vmovdqa ymm0,YMMWORD PTR[((128-128))+rdx]
- vmovdqa ymm1,YMMWORD PTR[((160-128))+rdx]
- vpor ymm5,ymm3,ymm2
- vmovdqa ymm2,YMMWORD PTR[((192-128))+rdx]
- vmovdqa ymm3,YMMWORD PTR[((224-128))+rdx]
- vpand ymm0,ymm0,YMMWORD PTR[((128+128))+rax]
- vpand ymm1,ymm1,YMMWORD PTR[((160+128))+rax]
- vpand ymm2,ymm2,YMMWORD PTR[((192+128))+rax]
- vpor ymm4,ymm4,ymm0
- vpand ymm3,ymm3,YMMWORD PTR[((224+128))+rax]
- vpand ymm0,ymm8,YMMWORD PTR[((256-128))+rdx]
- vpor ymm5,ymm5,ymm1
- vpand ymm1,ymm9,YMMWORD PTR[((288-128))+rdx]
- vpor ymm4,ymm4,ymm2
- vpand ymm2,ymm10,YMMWORD PTR[((320-128))+rdx]
- vpor ymm5,ymm5,ymm3
- vpand ymm3,ymm11,YMMWORD PTR[((352-128))+rdx]
- vpor ymm4,ymm4,ymm0
- vpand ymm0,ymm12,YMMWORD PTR[((384-128))+rdx]
- vpor ymm5,ymm5,ymm1
- vpand ymm1,ymm13,YMMWORD PTR[((416-128))+rdx]
- vpor ymm4,ymm4,ymm2
- vpand ymm2,ymm14,YMMWORD PTR[((448-128))+rdx]
- vpor ymm5,ymm5,ymm3
- vpand ymm3,ymm15,YMMWORD PTR[((480-128))+rdx]
- lea rdx,QWORD PTR[512+rdx]
- vpor ymm4,ymm4,ymm0
- vpor ymm5,ymm5,ymm1
- vpor ymm4,ymm4,ymm2
- vpor ymm5,ymm5,ymm3
-
- vpor ymm4,ymm4,ymm5
- vextracti128 xmm5,ymm4,1
- vpor xmm5,xmm5,xmm4
- vpermd ymm5,ymm7,ymm5
- vmovdqu YMMWORD PTR[rcx],ymm5
- lea rcx,QWORD PTR[32+rcx]
- dec r8d
- jnz $L$oop_gather_1024
-
- vpxor ymm0,ymm0,ymm0
- vmovdqu YMMWORD PTR[rcx],ymm0
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-168))+r11]
- movaps xmm7,XMMWORD PTR[((-152))+r11]
- movaps xmm8,XMMWORD PTR[((-136))+r11]
- movaps xmm9,XMMWORD PTR[((-120))+r11]
- movaps xmm10,XMMWORD PTR[((-104))+r11]
- movaps xmm11,XMMWORD PTR[((-88))+r11]
- movaps xmm12,XMMWORD PTR[((-72))+r11]
- movaps xmm13,XMMWORD PTR[((-56))+r11]
- movaps xmm14,XMMWORD PTR[((-40))+r11]
- movaps xmm15,XMMWORD PTR[((-24))+r11]
- lea rsp,QWORD PTR[r11]
-
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_rsaz_1024_gather5::
-rsaz_1024_gather5_avx2 ENDP
-EXTERN OPENSSL_ia32cap_P:NEAR
-PUBLIC rsaz_avx2_eligible
-
-ALIGN 32
-rsaz_avx2_eligible PROC PUBLIC
- mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- mov ecx,524544
- mov edx,0
- and ecx,eax
- cmp ecx,524544
- cmove eax,edx
- and eax,32
- shr eax,5
- DB 0F3h,0C3h ;repret
-rsaz_avx2_eligible ENDP
-
-ALIGN 64
-$L$and_mask::
- DQ 01fffffffh,01fffffffh,01fffffffh,01fffffffh
-$L$scatter_permd::
- DD 0,2,4,6,7,7,7,7
-$L$gather_permd::
- DD 0,7,1,7,2,7,3,7
-$L$inc::
- DD 0,0,0,0,1,1,1,1
- DD 2,2,2,2,3,3,3,3
- DD 4,4,4,4,4,4,4,4
-ALIGN 64
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-rsaz_se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- mov rbp,QWORD PTR[160+r8]
-
- mov r10d,DWORD PTR[8+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- cmovc rax,rbp
-
- mov r15,QWORD PTR[((-48))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov rbx,QWORD PTR[((-8))+rax]
- mov QWORD PTR[240+r8],r15
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[144+r8],rbx
-
- lea rsi,QWORD PTR[((-216))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-rsaz_se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_rsaz_1024_sqr_avx2
- DD imagerel $L$SEH_end_rsaz_1024_sqr_avx2
- DD imagerel $L$SEH_info_rsaz_1024_sqr_avx2
-
- DD imagerel $L$SEH_begin_rsaz_1024_mul_avx2
- DD imagerel $L$SEH_end_rsaz_1024_mul_avx2
- DD imagerel $L$SEH_info_rsaz_1024_mul_avx2
-
- DD imagerel $L$SEH_begin_rsaz_1024_gather5
- DD imagerel $L$SEH_end_rsaz_1024_gather5
- DD imagerel $L$SEH_info_rsaz_1024_gather5
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_rsaz_1024_sqr_avx2::
-DB 9,0,0,0
- DD imagerel rsaz_se_handler
- DD imagerel $L$sqr_1024_body,imagerel $L$sqr_1024_epilogue,imagerel $L$sqr_1024_in_tail
- DD 0
-$L$SEH_info_rsaz_1024_mul_avx2::
-DB 9,0,0,0
- DD imagerel rsaz_se_handler
- DD imagerel $L$mul_1024_body,imagerel $L$mul_1024_epilogue,imagerel $L$mul_1024_in_tail
- DD 0
-$L$SEH_info_rsaz_1024_gather5::
-DB 001h,036h,017h,00bh
-DB 036h,0f8h,009h,000h
-DB 031h,0e8h,008h,000h
-DB 02ch,0d8h,007h,000h
-DB 027h,0c8h,006h,000h
-DB 022h,0b8h,005h,000h
-DB 01dh,0a8h,004h,000h
-DB 018h,098h,003h,000h
-DB 013h,088h,002h,000h
-DB 00eh,078h,001h,000h
-DB 009h,068h,000h,000h
-DB 004h,001h,015h,000h
-DB 000h,0b3h,000h,000h
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+PUBLIC rsaz_1024_sqr_avx2
+
+ALIGN 64
+rsaz_1024_sqr_avx2 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_rsaz_1024_sqr_avx2::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+ lea rax,QWORD PTR[rsp]
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ vzeroupper
+ lea rsp,QWORD PTR[((-168))+rsp]
+ vmovaps XMMWORD PTR[(-216)+rax],xmm6
+ vmovaps XMMWORD PTR[(-200)+rax],xmm7
+ vmovaps XMMWORD PTR[(-184)+rax],xmm8
+ vmovaps XMMWORD PTR[(-168)+rax],xmm9
+ vmovaps XMMWORD PTR[(-152)+rax],xmm10
+ vmovaps XMMWORD PTR[(-136)+rax],xmm11
+ vmovaps XMMWORD PTR[(-120)+rax],xmm12
+ vmovaps XMMWORD PTR[(-104)+rax],xmm13
+ vmovaps XMMWORD PTR[(-88)+rax],xmm14
+ vmovaps XMMWORD PTR[(-72)+rax],xmm15
+$L$sqr_1024_body::
+ mov rbp,rax
+
+ mov r13,rdx
+ sub rsp,832
+ mov r15,r13
+ sub rdi,-128
+ sub rsi,-128
+ sub r13,-128
+
+ and r15,4095
+ add r15,32*10
+ shr r15,12
+ vpxor ymm9,ymm9,ymm9
+ jz $L$sqr_1024_no_n_copy
+
+
+
+
+
+ sub rsp,32*10
+ vmovdqu ymm0,YMMWORD PTR[((0-128))+r13]
+ and rsp,-2048
+ vmovdqu ymm1,YMMWORD PTR[((32-128))+r13]
+ vmovdqu ymm2,YMMWORD PTR[((64-128))+r13]
+ vmovdqu ymm3,YMMWORD PTR[((96-128))+r13]
+ vmovdqu ymm4,YMMWORD PTR[((128-128))+r13]
+ vmovdqu ymm5,YMMWORD PTR[((160-128))+r13]
+ vmovdqu ymm6,YMMWORD PTR[((192-128))+r13]
+ vmovdqu ymm7,YMMWORD PTR[((224-128))+r13]
+ vmovdqu ymm8,YMMWORD PTR[((256-128))+r13]
+ lea r13,QWORD PTR[((832+128))+rsp]
+ vmovdqu YMMWORD PTR[(0-128)+r13],ymm0
+ vmovdqu YMMWORD PTR[(32-128)+r13],ymm1
+ vmovdqu YMMWORD PTR[(64-128)+r13],ymm2
+ vmovdqu YMMWORD PTR[(96-128)+r13],ymm3
+ vmovdqu YMMWORD PTR[(128-128)+r13],ymm4
+ vmovdqu YMMWORD PTR[(160-128)+r13],ymm5
+ vmovdqu YMMWORD PTR[(192-128)+r13],ymm6
+ vmovdqu YMMWORD PTR[(224-128)+r13],ymm7
+ vmovdqu YMMWORD PTR[(256-128)+r13],ymm8
+ vmovdqu YMMWORD PTR[(288-128)+r13],ymm9
+
+$L$sqr_1024_no_n_copy::
+ and rsp,-1024
+
+ vmovdqu ymm1,YMMWORD PTR[((32-128))+rsi]
+ vmovdqu ymm2,YMMWORD PTR[((64-128))+rsi]
+ vmovdqu ymm3,YMMWORD PTR[((96-128))+rsi]
+ vmovdqu ymm4,YMMWORD PTR[((128-128))+rsi]
+ vmovdqu ymm5,YMMWORD PTR[((160-128))+rsi]
+ vmovdqu ymm6,YMMWORD PTR[((192-128))+rsi]
+ vmovdqu ymm7,YMMWORD PTR[((224-128))+rsi]
+ vmovdqu ymm8,YMMWORD PTR[((256-128))+rsi]
+
+ lea rbx,QWORD PTR[192+rsp]
+ vmovdqu ymm15,YMMWORD PTR[$L$and_mask]
+ jmp $L$OOP_GRANDE_SQR_1024
+
+ALIGN 32
+$L$OOP_GRANDE_SQR_1024::
+ lea r9,QWORD PTR[((576+128))+rsp]
+ lea r12,QWORD PTR[448+rsp]
+
+
+
+
+ vpaddq ymm1,ymm1,ymm1
+ vpbroadcastq ymm10,QWORD PTR[((0-128))+rsi]
+ vpaddq ymm2,ymm2,ymm2
+ vmovdqa YMMWORD PTR[(0-128)+r9],ymm1
+ vpaddq ymm3,ymm3,ymm3
+ vmovdqa YMMWORD PTR[(32-128)+r9],ymm2
+ vpaddq ymm4,ymm4,ymm4
+ vmovdqa YMMWORD PTR[(64-128)+r9],ymm3
+ vpaddq ymm5,ymm5,ymm5
+ vmovdqa YMMWORD PTR[(96-128)+r9],ymm4
+ vpaddq ymm6,ymm6,ymm6
+ vmovdqa YMMWORD PTR[(128-128)+r9],ymm5
+ vpaddq ymm7,ymm7,ymm7
+ vmovdqa YMMWORD PTR[(160-128)+r9],ymm6
+ vpaddq ymm8,ymm8,ymm8
+ vmovdqa YMMWORD PTR[(192-128)+r9],ymm7
+ vpxor ymm9,ymm9,ymm9
+ vmovdqa YMMWORD PTR[(224-128)+r9],ymm8
+
+ vpmuludq ymm0,ymm10,YMMWORD PTR[((0-128))+rsi]
+ vpbroadcastq ymm11,QWORD PTR[((32-128))+rsi]
+ vmovdqu YMMWORD PTR[(288-192)+rbx],ymm9
+ vpmuludq ymm1,ymm1,ymm10
+ vmovdqu YMMWORD PTR[(320-448)+r12],ymm9
+ vpmuludq ymm2,ymm2,ymm10
+ vmovdqu YMMWORD PTR[(352-448)+r12],ymm9
+ vpmuludq ymm3,ymm3,ymm10
+ vmovdqu YMMWORD PTR[(384-448)+r12],ymm9
+ vpmuludq ymm4,ymm4,ymm10
+ vmovdqu YMMWORD PTR[(416-448)+r12],ymm9
+ vpmuludq ymm5,ymm5,ymm10
+ vmovdqu YMMWORD PTR[(448-448)+r12],ymm9
+ vpmuludq ymm6,ymm6,ymm10
+ vmovdqu YMMWORD PTR[(480-448)+r12],ymm9
+ vpmuludq ymm7,ymm7,ymm10
+ vmovdqu YMMWORD PTR[(512-448)+r12],ymm9
+ vpmuludq ymm8,ymm8,ymm10
+ vpbroadcastq ymm10,QWORD PTR[((64-128))+rsi]
+ vmovdqu YMMWORD PTR[(544-448)+r12],ymm9
+
+ mov r15,rsi
+ mov r14d,4
+ jmp $L$sqr_entry_1024
+ALIGN 32
+$L$OOP_SQR_1024::
+ vpbroadcastq ymm11,QWORD PTR[((32-128))+r15]
+ vpmuludq ymm0,ymm10,YMMWORD PTR[((0-128))+rsi]
+ vpaddq ymm0,ymm0,YMMWORD PTR[((0-192))+rbx]
+ vpmuludq ymm1,ymm10,YMMWORD PTR[((0-128))+r9]
+ vpaddq ymm1,ymm1,YMMWORD PTR[((32-192))+rbx]
+ vpmuludq ymm2,ymm10,YMMWORD PTR[((32-128))+r9]
+ vpaddq ymm2,ymm2,YMMWORD PTR[((64-192))+rbx]
+ vpmuludq ymm3,ymm10,YMMWORD PTR[((64-128))+r9]
+ vpaddq ymm3,ymm3,YMMWORD PTR[((96-192))+rbx]
+ vpmuludq ymm4,ymm10,YMMWORD PTR[((96-128))+r9]
+ vpaddq ymm4,ymm4,YMMWORD PTR[((128-192))+rbx]
+ vpmuludq ymm5,ymm10,YMMWORD PTR[((128-128))+r9]
+ vpaddq ymm5,ymm5,YMMWORD PTR[((160-192))+rbx]
+ vpmuludq ymm6,ymm10,YMMWORD PTR[((160-128))+r9]
+ vpaddq ymm6,ymm6,YMMWORD PTR[((192-192))+rbx]
+ vpmuludq ymm7,ymm10,YMMWORD PTR[((192-128))+r9]
+ vpaddq ymm7,ymm7,YMMWORD PTR[((224-192))+rbx]
+ vpmuludq ymm8,ymm10,YMMWORD PTR[((224-128))+r9]
+ vpbroadcastq ymm10,QWORD PTR[((64-128))+r15]
+ vpaddq ymm8,ymm8,YMMWORD PTR[((256-192))+rbx]
+$L$sqr_entry_1024::
+ vmovdqu YMMWORD PTR[(0-192)+rbx],ymm0
+ vmovdqu YMMWORD PTR[(32-192)+rbx],ymm1
+
+ vpmuludq ymm12,ymm11,YMMWORD PTR[((32-128))+rsi]
+ vpaddq ymm2,ymm2,ymm12
+ vpmuludq ymm14,ymm11,YMMWORD PTR[((32-128))+r9]
+ vpaddq ymm3,ymm3,ymm14
+ vpmuludq ymm13,ymm11,YMMWORD PTR[((64-128))+r9]
+ vpaddq ymm4,ymm4,ymm13
+ vpmuludq ymm12,ymm11,YMMWORD PTR[((96-128))+r9]
+ vpaddq ymm5,ymm5,ymm12
+ vpmuludq ymm14,ymm11,YMMWORD PTR[((128-128))+r9]
+ vpaddq ymm6,ymm6,ymm14
+ vpmuludq ymm13,ymm11,YMMWORD PTR[((160-128))+r9]
+ vpaddq ymm7,ymm7,ymm13
+ vpmuludq ymm12,ymm11,YMMWORD PTR[((192-128))+r9]
+ vpaddq ymm8,ymm8,ymm12
+ vpmuludq ymm0,ymm11,YMMWORD PTR[((224-128))+r9]
+ vpbroadcastq ymm11,QWORD PTR[((96-128))+r15]
+ vpaddq ymm0,ymm0,YMMWORD PTR[((288-192))+rbx]
+
+ vmovdqu YMMWORD PTR[(64-192)+rbx],ymm2
+ vmovdqu YMMWORD PTR[(96-192)+rbx],ymm3
+
+ vpmuludq ymm13,ymm10,YMMWORD PTR[((64-128))+rsi]
+ vpaddq ymm4,ymm4,ymm13
+ vpmuludq ymm12,ymm10,YMMWORD PTR[((64-128))+r9]
+ vpaddq ymm5,ymm5,ymm12
+ vpmuludq ymm14,ymm10,YMMWORD PTR[((96-128))+r9]
+ vpaddq ymm6,ymm6,ymm14
+ vpmuludq ymm13,ymm10,YMMWORD PTR[((128-128))+r9]
+ vpaddq ymm7,ymm7,ymm13
+ vpmuludq ymm12,ymm10,YMMWORD PTR[((160-128))+r9]
+ vpaddq ymm8,ymm8,ymm12
+ vpmuludq ymm14,ymm10,YMMWORD PTR[((192-128))+r9]
+ vpaddq ymm0,ymm0,ymm14
+ vpmuludq ymm1,ymm10,YMMWORD PTR[((224-128))+r9]
+ vpbroadcastq ymm10,QWORD PTR[((128-128))+r15]
+ vpaddq ymm1,ymm1,YMMWORD PTR[((320-448))+r12]
+
+ vmovdqu YMMWORD PTR[(128-192)+rbx],ymm4
+ vmovdqu YMMWORD PTR[(160-192)+rbx],ymm5
+
+ vpmuludq ymm12,ymm11,YMMWORD PTR[((96-128))+rsi]
+ vpaddq ymm6,ymm6,ymm12
+ vpmuludq ymm14,ymm11,YMMWORD PTR[((96-128))+r9]
+ vpaddq ymm7,ymm7,ymm14
+ vpmuludq ymm13,ymm11,YMMWORD PTR[((128-128))+r9]
+ vpaddq ymm8,ymm8,ymm13
+ vpmuludq ymm12,ymm11,YMMWORD PTR[((160-128))+r9]
+ vpaddq ymm0,ymm0,ymm12
+ vpmuludq ymm14,ymm11,YMMWORD PTR[((192-128))+r9]
+ vpaddq ymm1,ymm1,ymm14
+ vpmuludq ymm2,ymm11,YMMWORD PTR[((224-128))+r9]
+ vpbroadcastq ymm11,QWORD PTR[((160-128))+r15]
+ vpaddq ymm2,ymm2,YMMWORD PTR[((352-448))+r12]
+
+ vmovdqu YMMWORD PTR[(192-192)+rbx],ymm6
+ vmovdqu YMMWORD PTR[(224-192)+rbx],ymm7
+
+ vpmuludq ymm12,ymm10,YMMWORD PTR[((128-128))+rsi]
+ vpaddq ymm8,ymm8,ymm12
+ vpmuludq ymm14,ymm10,YMMWORD PTR[((128-128))+r9]
+ vpaddq ymm0,ymm0,ymm14
+ vpmuludq ymm13,ymm10,YMMWORD PTR[((160-128))+r9]
+ vpaddq ymm1,ymm1,ymm13
+ vpmuludq ymm12,ymm10,YMMWORD PTR[((192-128))+r9]
+ vpaddq ymm2,ymm2,ymm12
+ vpmuludq ymm3,ymm10,YMMWORD PTR[((224-128))+r9]
+ vpbroadcastq ymm10,QWORD PTR[((192-128))+r15]
+ vpaddq ymm3,ymm3,YMMWORD PTR[((384-448))+r12]
+
+ vmovdqu YMMWORD PTR[(256-192)+rbx],ymm8
+ vmovdqu YMMWORD PTR[(288-192)+rbx],ymm0
+ lea rbx,QWORD PTR[8+rbx]
+
+ vpmuludq ymm13,ymm11,YMMWORD PTR[((160-128))+rsi]
+ vpaddq ymm1,ymm1,ymm13
+ vpmuludq ymm12,ymm11,YMMWORD PTR[((160-128))+r9]
+ vpaddq ymm2,ymm2,ymm12
+ vpmuludq ymm14,ymm11,YMMWORD PTR[((192-128))+r9]
+ vpaddq ymm3,ymm3,ymm14
+ vpmuludq ymm4,ymm11,YMMWORD PTR[((224-128))+r9]
+ vpbroadcastq ymm11,QWORD PTR[((224-128))+r15]
+ vpaddq ymm4,ymm4,YMMWORD PTR[((416-448))+r12]
+
+ vmovdqu YMMWORD PTR[(320-448)+r12],ymm1
+ vmovdqu YMMWORD PTR[(352-448)+r12],ymm2
+
+ vpmuludq ymm12,ymm10,YMMWORD PTR[((192-128))+rsi]
+ vpaddq ymm3,ymm3,ymm12
+ vpmuludq ymm14,ymm10,YMMWORD PTR[((192-128))+r9]
+ vpbroadcastq ymm0,QWORD PTR[((256-128))+r15]
+ vpaddq ymm4,ymm4,ymm14
+ vpmuludq ymm5,ymm10,YMMWORD PTR[((224-128))+r9]
+ vpbroadcastq ymm10,QWORD PTR[((0+8-128))+r15]
+ vpaddq ymm5,ymm5,YMMWORD PTR[((448-448))+r12]
+
+ vmovdqu YMMWORD PTR[(384-448)+r12],ymm3
+ vmovdqu YMMWORD PTR[(416-448)+r12],ymm4
+ lea r15,QWORD PTR[8+r15]
+
+ vpmuludq ymm12,ymm11,YMMWORD PTR[((224-128))+rsi]
+ vpaddq ymm5,ymm5,ymm12
+ vpmuludq ymm6,ymm11,YMMWORD PTR[((224-128))+r9]
+ vpaddq ymm6,ymm6,YMMWORD PTR[((480-448))+r12]
+
+ vpmuludq ymm7,ymm0,YMMWORD PTR[((256-128))+rsi]
+ vmovdqu YMMWORD PTR[(448-448)+r12],ymm5
+ vpaddq ymm7,ymm7,YMMWORD PTR[((512-448))+r12]
+ vmovdqu YMMWORD PTR[(480-448)+r12],ymm6
+ vmovdqu YMMWORD PTR[(512-448)+r12],ymm7
+ lea r12,QWORD PTR[8+r12]
+
+ dec r14d
+ jnz $L$OOP_SQR_1024
+
+ vmovdqu ymm8,YMMWORD PTR[256+rsp]
+ vmovdqu ymm1,YMMWORD PTR[288+rsp]
+ vmovdqu ymm2,YMMWORD PTR[320+rsp]
+ lea rbx,QWORD PTR[192+rsp]
+
+ vpsrlq ymm14,ymm8,29
+ vpand ymm8,ymm8,ymm15
+ vpsrlq ymm11,ymm1,29
+ vpand ymm1,ymm1,ymm15
+
+ vpermq ymm14,ymm14,093h
+ vpxor ymm9,ymm9,ymm9
+ vpermq ymm11,ymm11,093h
+
+ vpblendd ymm10,ymm14,ymm9,3
+ vpblendd ymm14,ymm11,ymm14,3
+ vpaddq ymm8,ymm8,ymm10
+ vpblendd ymm11,ymm9,ymm11,3
+ vpaddq ymm1,ymm1,ymm14
+ vpaddq ymm2,ymm2,ymm11
+ vmovdqu YMMWORD PTR[(288-192)+rbx],ymm1
+ vmovdqu YMMWORD PTR[(320-192)+rbx],ymm2
+
+ mov rax,QWORD PTR[rsp]
+ mov r10,QWORD PTR[8+rsp]
+ mov r11,QWORD PTR[16+rsp]
+ mov r12,QWORD PTR[24+rsp]
+ vmovdqu ymm1,YMMWORD PTR[32+rsp]
+ vmovdqu ymm2,YMMWORD PTR[((64-192))+rbx]
+ vmovdqu ymm3,YMMWORD PTR[((96-192))+rbx]
+ vmovdqu ymm4,YMMWORD PTR[((128-192))+rbx]
+ vmovdqu ymm5,YMMWORD PTR[((160-192))+rbx]
+ vmovdqu ymm6,YMMWORD PTR[((192-192))+rbx]
+ vmovdqu ymm7,YMMWORD PTR[((224-192))+rbx]
+
+ mov r9,rax
+ imul eax,ecx
+ and eax,01fffffffh
+ vmovd xmm12,eax
+
+ mov rdx,rax
+ imul rax,QWORD PTR[((-128))+r13]
+ vpbroadcastq ymm12,xmm12
+ add r9,rax
+ mov rax,rdx
+ imul rax,QWORD PTR[((8-128))+r13]
+ shr r9,29
+ add r10,rax
+ mov rax,rdx
+ imul rax,QWORD PTR[((16-128))+r13]
+ add r10,r9
+ add r11,rax
+ imul rdx,QWORD PTR[((24-128))+r13]
+ add r12,rdx
+
+ mov rax,r10
+ imul eax,ecx
+ and eax,01fffffffh
+
+ mov r14d,9
+ jmp $L$OOP_REDUCE_1024
+
+ALIGN 32
+$L$OOP_REDUCE_1024::
+ vmovd xmm13,eax
+ vpbroadcastq ymm13,xmm13
+
+ vpmuludq ymm10,ymm12,YMMWORD PTR[((32-128))+r13]
+ mov rdx,rax
+ imul rax,QWORD PTR[((-128))+r13]
+ vpaddq ymm1,ymm1,ymm10
+ add r10,rax
+ vpmuludq ymm14,ymm12,YMMWORD PTR[((64-128))+r13]
+ mov rax,rdx
+ imul rax,QWORD PTR[((8-128))+r13]
+ vpaddq ymm2,ymm2,ymm14
+ vpmuludq ymm11,ymm12,YMMWORD PTR[((96-128))+r13]
+DB 067h
+ add r11,rax
+DB 067h
+ mov rax,rdx
+ imul rax,QWORD PTR[((16-128))+r13]
+ shr r10,29
+ vpaddq ymm3,ymm3,ymm11
+ vpmuludq ymm10,ymm12,YMMWORD PTR[((128-128))+r13]
+ add r12,rax
+ add r11,r10
+ vpaddq ymm4,ymm4,ymm10
+ vpmuludq ymm14,ymm12,YMMWORD PTR[((160-128))+r13]
+ mov rax,r11
+ imul eax,ecx
+ vpaddq ymm5,ymm5,ymm14
+ vpmuludq ymm11,ymm12,YMMWORD PTR[((192-128))+r13]
+ and eax,01fffffffh
+ vpaddq ymm6,ymm6,ymm11
+ vpmuludq ymm10,ymm12,YMMWORD PTR[((224-128))+r13]
+ vpaddq ymm7,ymm7,ymm10
+ vpmuludq ymm14,ymm12,YMMWORD PTR[((256-128))+r13]
+ vmovd xmm12,eax
+
+ vpaddq ymm8,ymm8,ymm14
+
+ vpbroadcastq ymm12,xmm12
+
+ vpmuludq ymm11,ymm13,YMMWORD PTR[((32-8-128))+r13]
+ vmovdqu ymm14,YMMWORD PTR[((96-8-128))+r13]
+ mov rdx,rax
+ imul rax,QWORD PTR[((-128))+r13]
+ vpaddq ymm1,ymm1,ymm11
+ vpmuludq ymm10,ymm13,YMMWORD PTR[((64-8-128))+r13]
+ vmovdqu ymm11,YMMWORD PTR[((128-8-128))+r13]
+ add r11,rax
+ mov rax,rdx
+ imul rax,QWORD PTR[((8-128))+r13]
+ vpaddq ymm2,ymm2,ymm10
+ add rax,r12
+ shr r11,29
+ vpmuludq ymm14,ymm14,ymm13
+ vmovdqu ymm10,YMMWORD PTR[((160-8-128))+r13]
+ add rax,r11
+ vpaddq ymm3,ymm3,ymm14
+ vpmuludq ymm11,ymm11,ymm13
+ vmovdqu ymm14,YMMWORD PTR[((192-8-128))+r13]
+DB 067h
+ mov r12,rax
+ imul eax,ecx
+ vpaddq ymm4,ymm4,ymm11
+ vpmuludq ymm10,ymm10,ymm13
+DB 0c4h,041h,07eh,06fh,09dh,058h,000h,000h,000h
+ and eax,01fffffffh
+ vpaddq ymm5,ymm5,ymm10
+ vpmuludq ymm14,ymm14,ymm13
+ vmovdqu ymm10,YMMWORD PTR[((256-8-128))+r13]
+ vpaddq ymm6,ymm6,ymm14
+ vpmuludq ymm11,ymm11,ymm13
+ vmovdqu ymm9,YMMWORD PTR[((288-8-128))+r13]
+ vmovd xmm0,eax
+ imul rax,QWORD PTR[((-128))+r13]
+ vpaddq ymm7,ymm7,ymm11
+ vpmuludq ymm10,ymm10,ymm13
+ vmovdqu ymm14,YMMWORD PTR[((32-16-128))+r13]
+ vpbroadcastq ymm0,xmm0
+ vpaddq ymm8,ymm8,ymm10
+ vpmuludq ymm9,ymm9,ymm13
+ vmovdqu ymm11,YMMWORD PTR[((64-16-128))+r13]
+ add r12,rax
+
+ vmovdqu ymm13,YMMWORD PTR[((32-24-128))+r13]
+ vpmuludq ymm14,ymm14,ymm12
+ vmovdqu ymm10,YMMWORD PTR[((96-16-128))+r13]
+ vpaddq ymm1,ymm1,ymm14
+ vpmuludq ymm13,ymm13,ymm0
+ vpmuludq ymm11,ymm11,ymm12
+DB 0c4h,041h,07eh,06fh,0b5h,0f0h,0ffh,0ffh,0ffh
+ vpaddq ymm13,ymm13,ymm1
+ vpaddq ymm2,ymm2,ymm11
+ vpmuludq ymm10,ymm10,ymm12
+ vmovdqu ymm11,YMMWORD PTR[((160-16-128))+r13]
+DB 067h
+ vmovq rax,xmm13
+ vmovdqu YMMWORD PTR[rsp],ymm13
+ vpaddq ymm3,ymm3,ymm10
+ vpmuludq ymm14,ymm14,ymm12
+ vmovdqu ymm10,YMMWORD PTR[((192-16-128))+r13]
+ vpaddq ymm4,ymm4,ymm14
+ vpmuludq ymm11,ymm11,ymm12
+ vmovdqu ymm14,YMMWORD PTR[((224-16-128))+r13]
+ vpaddq ymm5,ymm5,ymm11
+ vpmuludq ymm10,ymm10,ymm12
+ vmovdqu ymm11,YMMWORD PTR[((256-16-128))+r13]
+ vpaddq ymm6,ymm6,ymm10
+ vpmuludq ymm14,ymm14,ymm12
+ shr r12,29
+ vmovdqu ymm10,YMMWORD PTR[((288-16-128))+r13]
+ add rax,r12
+ vpaddq ymm7,ymm7,ymm14
+ vpmuludq ymm11,ymm11,ymm12
+
+ mov r9,rax
+ imul eax,ecx
+ vpaddq ymm8,ymm8,ymm11
+ vpmuludq ymm10,ymm10,ymm12
+ and eax,01fffffffh
+ vmovd xmm12,eax
+ vmovdqu ymm11,YMMWORD PTR[((96-24-128))+r13]
+DB 067h
+ vpaddq ymm9,ymm9,ymm10
+ vpbroadcastq ymm12,xmm12
+
+ vpmuludq ymm14,ymm0,YMMWORD PTR[((64-24-128))+r13]
+ vmovdqu ymm10,YMMWORD PTR[((128-24-128))+r13]
+ mov rdx,rax
+ imul rax,QWORD PTR[((-128))+r13]
+ mov r10,QWORD PTR[8+rsp]
+ vpaddq ymm1,ymm2,ymm14
+ vpmuludq ymm11,ymm11,ymm0
+ vmovdqu ymm14,YMMWORD PTR[((160-24-128))+r13]
+ add r9,rax
+ mov rax,rdx
+ imul rax,QWORD PTR[((8-128))+r13]
+DB 067h
+ shr r9,29
+ mov r11,QWORD PTR[16+rsp]
+ vpaddq ymm2,ymm3,ymm11
+ vpmuludq ymm10,ymm10,ymm0
+ vmovdqu ymm11,YMMWORD PTR[((192-24-128))+r13]
+ add r10,rax
+ mov rax,rdx
+ imul rax,QWORD PTR[((16-128))+r13]
+ vpaddq ymm3,ymm4,ymm10
+ vpmuludq ymm14,ymm14,ymm0
+ vmovdqu ymm10,YMMWORD PTR[((224-24-128))+r13]
+ imul rdx,QWORD PTR[((24-128))+r13]
+ add r11,rax
+ lea rax,QWORD PTR[r10*1+r9]
+ vpaddq ymm4,ymm5,ymm14
+ vpmuludq ymm11,ymm11,ymm0
+ vmovdqu ymm14,YMMWORD PTR[((256-24-128))+r13]
+ mov r10,rax
+ imul eax,ecx
+ vpmuludq ymm10,ymm10,ymm0
+ vpaddq ymm5,ymm6,ymm11
+ vmovdqu ymm11,YMMWORD PTR[((288-24-128))+r13]
+ and eax,01fffffffh
+ vpaddq ymm6,ymm7,ymm10
+ vpmuludq ymm14,ymm14,ymm0
+ add rdx,QWORD PTR[24+rsp]
+ vpaddq ymm7,ymm8,ymm14
+ vpmuludq ymm11,ymm11,ymm0
+ vpaddq ymm8,ymm9,ymm11
+ vmovq xmm9,r12
+ mov r12,rdx
+
+ dec r14d
+ jnz $L$OOP_REDUCE_1024
+ lea r12,QWORD PTR[448+rsp]
+ vpaddq ymm0,ymm13,ymm9
+ vpxor ymm9,ymm9,ymm9
+
+ vpaddq ymm0,ymm0,YMMWORD PTR[((288-192))+rbx]
+ vpaddq ymm1,ymm1,YMMWORD PTR[((320-448))+r12]
+ vpaddq ymm2,ymm2,YMMWORD PTR[((352-448))+r12]
+ vpaddq ymm3,ymm3,YMMWORD PTR[((384-448))+r12]
+ vpaddq ymm4,ymm4,YMMWORD PTR[((416-448))+r12]
+ vpaddq ymm5,ymm5,YMMWORD PTR[((448-448))+r12]
+ vpaddq ymm6,ymm6,YMMWORD PTR[((480-448))+r12]
+ vpaddq ymm7,ymm7,YMMWORD PTR[((512-448))+r12]
+ vpaddq ymm8,ymm8,YMMWORD PTR[((544-448))+r12]
+
+ vpsrlq ymm14,ymm0,29
+ vpand ymm0,ymm0,ymm15
+ vpsrlq ymm11,ymm1,29
+ vpand ymm1,ymm1,ymm15
+ vpsrlq ymm12,ymm2,29
+ vpermq ymm14,ymm14,093h
+ vpand ymm2,ymm2,ymm15
+ vpsrlq ymm13,ymm3,29
+ vpermq ymm11,ymm11,093h
+ vpand ymm3,ymm3,ymm15
+ vpermq ymm12,ymm12,093h
+
+ vpblendd ymm10,ymm14,ymm9,3
+ vpermq ymm13,ymm13,093h
+ vpblendd ymm14,ymm11,ymm14,3
+ vpaddq ymm0,ymm0,ymm10
+ vpblendd ymm11,ymm12,ymm11,3
+ vpaddq ymm1,ymm1,ymm14
+ vpblendd ymm12,ymm13,ymm12,3
+ vpaddq ymm2,ymm2,ymm11
+ vpblendd ymm13,ymm9,ymm13,3
+ vpaddq ymm3,ymm3,ymm12
+ vpaddq ymm4,ymm4,ymm13
+
+ vpsrlq ymm14,ymm0,29
+ vpand ymm0,ymm0,ymm15
+ vpsrlq ymm11,ymm1,29
+ vpand ymm1,ymm1,ymm15
+ vpsrlq ymm12,ymm2,29
+ vpermq ymm14,ymm14,093h
+ vpand ymm2,ymm2,ymm15
+ vpsrlq ymm13,ymm3,29
+ vpermq ymm11,ymm11,093h
+ vpand ymm3,ymm3,ymm15
+ vpermq ymm12,ymm12,093h
+
+ vpblendd ymm10,ymm14,ymm9,3
+ vpermq ymm13,ymm13,093h
+ vpblendd ymm14,ymm11,ymm14,3
+ vpaddq ymm0,ymm0,ymm10
+ vpblendd ymm11,ymm12,ymm11,3
+ vpaddq ymm1,ymm1,ymm14
+ vmovdqu YMMWORD PTR[(0-128)+rdi],ymm0
+ vpblendd ymm12,ymm13,ymm12,3
+ vpaddq ymm2,ymm2,ymm11
+ vmovdqu YMMWORD PTR[(32-128)+rdi],ymm1
+ vpblendd ymm13,ymm9,ymm13,3
+ vpaddq ymm3,ymm3,ymm12
+ vmovdqu YMMWORD PTR[(64-128)+rdi],ymm2
+ vpaddq ymm4,ymm4,ymm13
+ vmovdqu YMMWORD PTR[(96-128)+rdi],ymm3
+ vpsrlq ymm14,ymm4,29
+ vpand ymm4,ymm4,ymm15
+ vpsrlq ymm11,ymm5,29
+ vpand ymm5,ymm5,ymm15
+ vpsrlq ymm12,ymm6,29
+ vpermq ymm14,ymm14,093h
+ vpand ymm6,ymm6,ymm15
+ vpsrlq ymm13,ymm7,29
+ vpermq ymm11,ymm11,093h
+ vpand ymm7,ymm7,ymm15
+ vpsrlq ymm0,ymm8,29
+ vpermq ymm12,ymm12,093h
+ vpand ymm8,ymm8,ymm15
+ vpermq ymm13,ymm13,093h
+
+ vpblendd ymm10,ymm14,ymm9,3
+ vpermq ymm0,ymm0,093h
+ vpblendd ymm14,ymm11,ymm14,3
+ vpaddq ymm4,ymm4,ymm10
+ vpblendd ymm11,ymm12,ymm11,3
+ vpaddq ymm5,ymm5,ymm14
+ vpblendd ymm12,ymm13,ymm12,3
+ vpaddq ymm6,ymm6,ymm11
+ vpblendd ymm13,ymm0,ymm13,3
+ vpaddq ymm7,ymm7,ymm12
+ vpaddq ymm8,ymm8,ymm13
+
+ vpsrlq ymm14,ymm4,29
+ vpand ymm4,ymm4,ymm15
+ vpsrlq ymm11,ymm5,29
+ vpand ymm5,ymm5,ymm15
+ vpsrlq ymm12,ymm6,29
+ vpermq ymm14,ymm14,093h
+ vpand ymm6,ymm6,ymm15
+ vpsrlq ymm13,ymm7,29
+ vpermq ymm11,ymm11,093h
+ vpand ymm7,ymm7,ymm15
+ vpsrlq ymm0,ymm8,29
+ vpermq ymm12,ymm12,093h
+ vpand ymm8,ymm8,ymm15
+ vpermq ymm13,ymm13,093h
+
+ vpblendd ymm10,ymm14,ymm9,3
+ vpermq ymm0,ymm0,093h
+ vpblendd ymm14,ymm11,ymm14,3
+ vpaddq ymm4,ymm4,ymm10
+ vpblendd ymm11,ymm12,ymm11,3
+ vpaddq ymm5,ymm5,ymm14
+ vmovdqu YMMWORD PTR[(128-128)+rdi],ymm4
+ vpblendd ymm12,ymm13,ymm12,3
+ vpaddq ymm6,ymm6,ymm11
+ vmovdqu YMMWORD PTR[(160-128)+rdi],ymm5
+ vpblendd ymm13,ymm0,ymm13,3
+ vpaddq ymm7,ymm7,ymm12
+ vmovdqu YMMWORD PTR[(192-128)+rdi],ymm6
+ vpaddq ymm8,ymm8,ymm13
+ vmovdqu YMMWORD PTR[(224-128)+rdi],ymm7
+ vmovdqu YMMWORD PTR[(256-128)+rdi],ymm8
+
+ mov rsi,rdi
+ dec r8d
+ jne $L$OOP_GRANDE_SQR_1024
+
+ vzeroall
+ mov rax,rbp
+
+$L$sqr_1024_in_tail::
+ movaps xmm6,XMMWORD PTR[((-216))+rax]
+ movaps xmm7,XMMWORD PTR[((-200))+rax]
+ movaps xmm8,XMMWORD PTR[((-184))+rax]
+ movaps xmm9,XMMWORD PTR[((-168))+rax]
+ movaps xmm10,XMMWORD PTR[((-152))+rax]
+ movaps xmm11,XMMWORD PTR[((-136))+rax]
+ movaps xmm12,XMMWORD PTR[((-120))+rax]
+ movaps xmm13,XMMWORD PTR[((-104))+rax]
+ movaps xmm14,XMMWORD PTR[((-88))+rax]
+ movaps xmm15,XMMWORD PTR[((-72))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$sqr_1024_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_rsaz_1024_sqr_avx2::
+rsaz_1024_sqr_avx2 ENDP
+PUBLIC rsaz_1024_mul_avx2
+
+ALIGN 64
+rsaz_1024_mul_avx2 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_rsaz_1024_mul_avx2::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+ lea rax,QWORD PTR[rsp]
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ vzeroupper
+ lea rsp,QWORD PTR[((-168))+rsp]
+ vmovaps XMMWORD PTR[(-216)+rax],xmm6
+ vmovaps XMMWORD PTR[(-200)+rax],xmm7
+ vmovaps XMMWORD PTR[(-184)+rax],xmm8
+ vmovaps XMMWORD PTR[(-168)+rax],xmm9
+ vmovaps XMMWORD PTR[(-152)+rax],xmm10
+ vmovaps XMMWORD PTR[(-136)+rax],xmm11
+ vmovaps XMMWORD PTR[(-120)+rax],xmm12
+ vmovaps XMMWORD PTR[(-104)+rax],xmm13
+ vmovaps XMMWORD PTR[(-88)+rax],xmm14
+ vmovaps XMMWORD PTR[(-72)+rax],xmm15
+$L$mul_1024_body::
+ mov rbp,rax
+
+ vzeroall
+ mov r13,rdx
+ sub rsp,64
+
+
+
+
+
+
+DB 067h,067h
+ mov r15,rsi
+ and r15,4095
+ add r15,32*10
+ shr r15,12
+ mov r15,rsi
+ cmovnz rsi,r13
+ cmovnz r13,r15
+
+ mov r15,rcx
+ sub rsi,-128
+ sub rcx,-128
+ sub rdi,-128
+
+ and r15,4095
+ add r15,32*10
+DB 067h,067h
+ shr r15,12
+ jz $L$mul_1024_no_n_copy
+
+
+
+
+
+ sub rsp,32*10
+ vmovdqu ymm0,YMMWORD PTR[((0-128))+rcx]
+ and rsp,-512
+ vmovdqu ymm1,YMMWORD PTR[((32-128))+rcx]
+ vmovdqu ymm2,YMMWORD PTR[((64-128))+rcx]
+ vmovdqu ymm3,YMMWORD PTR[((96-128))+rcx]
+ vmovdqu ymm4,YMMWORD PTR[((128-128))+rcx]
+ vmovdqu ymm5,YMMWORD PTR[((160-128))+rcx]
+ vmovdqu ymm6,YMMWORD PTR[((192-128))+rcx]
+ vmovdqu ymm7,YMMWORD PTR[((224-128))+rcx]
+ vmovdqu ymm8,YMMWORD PTR[((256-128))+rcx]
+ lea rcx,QWORD PTR[((64+128))+rsp]
+ vmovdqu YMMWORD PTR[(0-128)+rcx],ymm0
+ vpxor ymm0,ymm0,ymm0
+ vmovdqu YMMWORD PTR[(32-128)+rcx],ymm1
+ vpxor ymm1,ymm1,ymm1
+ vmovdqu YMMWORD PTR[(64-128)+rcx],ymm2
+ vpxor ymm2,ymm2,ymm2
+ vmovdqu YMMWORD PTR[(96-128)+rcx],ymm3
+ vpxor ymm3,ymm3,ymm3
+ vmovdqu YMMWORD PTR[(128-128)+rcx],ymm4
+ vpxor ymm4,ymm4,ymm4
+ vmovdqu YMMWORD PTR[(160-128)+rcx],ymm5
+ vpxor ymm5,ymm5,ymm5
+ vmovdqu YMMWORD PTR[(192-128)+rcx],ymm6
+ vpxor ymm6,ymm6,ymm6
+ vmovdqu YMMWORD PTR[(224-128)+rcx],ymm7
+ vpxor ymm7,ymm7,ymm7
+ vmovdqu YMMWORD PTR[(256-128)+rcx],ymm8
+ vmovdqa ymm8,ymm0
+ vmovdqu YMMWORD PTR[(288-128)+rcx],ymm9
+$L$mul_1024_no_n_copy::
+ and rsp,-64
+
+ mov rbx,QWORD PTR[r13]
+ vpbroadcastq ymm10,QWORD PTR[r13]
+ vmovdqu YMMWORD PTR[rsp],ymm0
+ xor r9,r9
+DB 067h
+ xor r10,r10
+ xor r11,r11
+ xor r12,r12
+
+ vmovdqu ymm15,YMMWORD PTR[$L$and_mask]
+ mov r14d,9
+ vmovdqu YMMWORD PTR[(288-128)+rdi],ymm9
+ jmp $L$oop_mul_1024
+
+ALIGN 32
+$L$oop_mul_1024::
+ vpsrlq ymm9,ymm3,29
+ mov rax,rbx
+ imul rax,QWORD PTR[((-128))+rsi]
+ add rax,r9
+ mov r10,rbx
+ imul r10,QWORD PTR[((8-128))+rsi]
+ add r10,QWORD PTR[8+rsp]
+
+ mov r9,rax
+ imul eax,r8d
+ and eax,01fffffffh
+
+ mov r11,rbx
+ imul r11,QWORD PTR[((16-128))+rsi]
+ add r11,QWORD PTR[16+rsp]
+
+ mov r12,rbx
+ imul r12,QWORD PTR[((24-128))+rsi]
+ add r12,QWORD PTR[24+rsp]
+ vpmuludq ymm0,ymm10,YMMWORD PTR[((32-128))+rsi]
+ vmovd xmm11,eax
+ vpaddq ymm1,ymm1,ymm0
+ vpmuludq ymm12,ymm10,YMMWORD PTR[((64-128))+rsi]
+ vpbroadcastq ymm11,xmm11
+ vpaddq ymm2,ymm2,ymm12
+ vpmuludq ymm13,ymm10,YMMWORD PTR[((96-128))+rsi]
+ vpand ymm3,ymm3,ymm15
+ vpaddq ymm3,ymm3,ymm13
+ vpmuludq ymm0,ymm10,YMMWORD PTR[((128-128))+rsi]
+ vpaddq ymm4,ymm4,ymm0
+ vpmuludq ymm12,ymm10,YMMWORD PTR[((160-128))+rsi]
+ vpaddq ymm5,ymm5,ymm12
+ vpmuludq ymm13,ymm10,YMMWORD PTR[((192-128))+rsi]
+ vpaddq ymm6,ymm6,ymm13
+ vpmuludq ymm0,ymm10,YMMWORD PTR[((224-128))+rsi]
+ vpermq ymm9,ymm9,093h
+ vpaddq ymm7,ymm7,ymm0
+ vpmuludq ymm12,ymm10,YMMWORD PTR[((256-128))+rsi]
+ vpbroadcastq ymm10,QWORD PTR[8+r13]
+ vpaddq ymm8,ymm8,ymm12
+
+ mov rdx,rax
+ imul rax,QWORD PTR[((-128))+rcx]
+ add r9,rax
+ mov rax,rdx
+ imul rax,QWORD PTR[((8-128))+rcx]
+ add r10,rax
+ mov rax,rdx
+ imul rax,QWORD PTR[((16-128))+rcx]
+ add r11,rax
+ shr r9,29
+ imul rdx,QWORD PTR[((24-128))+rcx]
+ add r12,rdx
+ add r10,r9
+
+ vpmuludq ymm13,ymm11,YMMWORD PTR[((32-128))+rcx]
+ vmovq rbx,xmm10
+ vpaddq ymm1,ymm1,ymm13
+ vpmuludq ymm0,ymm11,YMMWORD PTR[((64-128))+rcx]
+ vpaddq ymm2,ymm2,ymm0
+ vpmuludq ymm12,ymm11,YMMWORD PTR[((96-128))+rcx]
+ vpaddq ymm3,ymm3,ymm12
+ vpmuludq ymm13,ymm11,YMMWORD PTR[((128-128))+rcx]
+ vpaddq ymm4,ymm4,ymm13
+ vpmuludq ymm0,ymm11,YMMWORD PTR[((160-128))+rcx]
+ vpaddq ymm5,ymm5,ymm0
+ vpmuludq ymm12,ymm11,YMMWORD PTR[((192-128))+rcx]
+ vpaddq ymm6,ymm6,ymm12
+ vpmuludq ymm13,ymm11,YMMWORD PTR[((224-128))+rcx]
+ vpblendd ymm12,ymm9,ymm14,3
+ vpaddq ymm7,ymm7,ymm13
+ vpmuludq ymm0,ymm11,YMMWORD PTR[((256-128))+rcx]
+ vpaddq ymm3,ymm3,ymm12
+ vpaddq ymm8,ymm8,ymm0
+
+ mov rax,rbx
+ imul rax,QWORD PTR[((-128))+rsi]
+ add r10,rax
+ vmovdqu ymm12,YMMWORD PTR[((-8+32-128))+rsi]
+ mov rax,rbx
+ imul rax,QWORD PTR[((8-128))+rsi]
+ add r11,rax
+ vmovdqu ymm13,YMMWORD PTR[((-8+64-128))+rsi]
+
+ mov rax,r10
+ vpblendd ymm9,ymm9,ymm14,0fch
+ imul eax,r8d
+ vpaddq ymm4,ymm4,ymm9
+ and eax,01fffffffh
+
+ imul rbx,QWORD PTR[((16-128))+rsi]
+ add r12,rbx
+ vpmuludq ymm12,ymm12,ymm10
+ vmovd xmm11,eax
+ vmovdqu ymm0,YMMWORD PTR[((-8+96-128))+rsi]
+ vpaddq ymm1,ymm1,ymm12
+ vpmuludq ymm13,ymm13,ymm10
+ vpbroadcastq ymm11,xmm11
+ vmovdqu ymm12,YMMWORD PTR[((-8+128-128))+rsi]
+ vpaddq ymm2,ymm2,ymm13
+ vpmuludq ymm0,ymm0,ymm10
+ vmovdqu ymm13,YMMWORD PTR[((-8+160-128))+rsi]
+ vpaddq ymm3,ymm3,ymm0
+ vpmuludq ymm12,ymm12,ymm10
+ vmovdqu ymm0,YMMWORD PTR[((-8+192-128))+rsi]
+ vpaddq ymm4,ymm4,ymm12
+ vpmuludq ymm13,ymm13,ymm10
+ vmovdqu ymm12,YMMWORD PTR[((-8+224-128))+rsi]
+ vpaddq ymm5,ymm5,ymm13
+ vpmuludq ymm0,ymm0,ymm10
+ vmovdqu ymm13,YMMWORD PTR[((-8+256-128))+rsi]
+ vpaddq ymm6,ymm6,ymm0
+ vpmuludq ymm12,ymm12,ymm10
+ vmovdqu ymm9,YMMWORD PTR[((-8+288-128))+rsi]
+ vpaddq ymm7,ymm7,ymm12
+ vpmuludq ymm13,ymm13,ymm10
+ vpaddq ymm8,ymm8,ymm13
+ vpmuludq ymm9,ymm9,ymm10
+ vpbroadcastq ymm10,QWORD PTR[16+r13]
+
+ mov rdx,rax
+ imul rax,QWORD PTR[((-128))+rcx]
+ add r10,rax
+ vmovdqu ymm0,YMMWORD PTR[((-8+32-128))+rcx]
+ mov rax,rdx
+ imul rax,QWORD PTR[((8-128))+rcx]
+ add r11,rax
+ vmovdqu ymm12,YMMWORD PTR[((-8+64-128))+rcx]
+ shr r10,29
+ imul rdx,QWORD PTR[((16-128))+rcx]
+ add r12,rdx
+ add r11,r10
+
+ vpmuludq ymm0,ymm0,ymm11
+ vmovq rbx,xmm10
+ vmovdqu ymm13,YMMWORD PTR[((-8+96-128))+rcx]
+ vpaddq ymm1,ymm1,ymm0
+ vpmuludq ymm12,ymm12,ymm11
+ vmovdqu ymm0,YMMWORD PTR[((-8+128-128))+rcx]
+ vpaddq ymm2,ymm2,ymm12
+ vpmuludq ymm13,ymm13,ymm11
+ vmovdqu ymm12,YMMWORD PTR[((-8+160-128))+rcx]
+ vpaddq ymm3,ymm3,ymm13
+ vpmuludq ymm0,ymm0,ymm11
+ vmovdqu ymm13,YMMWORD PTR[((-8+192-128))+rcx]
+ vpaddq ymm4,ymm4,ymm0
+ vpmuludq ymm12,ymm12,ymm11
+ vmovdqu ymm0,YMMWORD PTR[((-8+224-128))+rcx]
+ vpaddq ymm5,ymm5,ymm12
+ vpmuludq ymm13,ymm13,ymm11
+ vmovdqu ymm12,YMMWORD PTR[((-8+256-128))+rcx]
+ vpaddq ymm6,ymm6,ymm13
+ vpmuludq ymm0,ymm0,ymm11
+ vmovdqu ymm13,YMMWORD PTR[((-8+288-128))+rcx]
+ vpaddq ymm7,ymm7,ymm0
+ vpmuludq ymm12,ymm12,ymm11
+ vpaddq ymm8,ymm8,ymm12
+ vpmuludq ymm13,ymm13,ymm11
+ vpaddq ymm9,ymm9,ymm13
+
+ vmovdqu ymm0,YMMWORD PTR[((-16+32-128))+rsi]
+ mov rax,rbx
+ imul rax,QWORD PTR[((-128))+rsi]
+ add rax,r11
+
+ vmovdqu ymm12,YMMWORD PTR[((-16+64-128))+rsi]
+ mov r11,rax
+ imul eax,r8d
+ and eax,01fffffffh
+
+ imul rbx,QWORD PTR[((8-128))+rsi]
+ add r12,rbx
+ vpmuludq ymm0,ymm0,ymm10
+ vmovd xmm11,eax
+ vmovdqu ymm13,YMMWORD PTR[((-16+96-128))+rsi]
+ vpaddq ymm1,ymm1,ymm0
+ vpmuludq ymm12,ymm12,ymm10
+ vpbroadcastq ymm11,xmm11
+ vmovdqu ymm0,YMMWORD PTR[((-16+128-128))+rsi]
+ vpaddq ymm2,ymm2,ymm12
+ vpmuludq ymm13,ymm13,ymm10
+ vmovdqu ymm12,YMMWORD PTR[((-16+160-128))+rsi]
+ vpaddq ymm3,ymm3,ymm13
+ vpmuludq ymm0,ymm0,ymm10
+ vmovdqu ymm13,YMMWORD PTR[((-16+192-128))+rsi]
+ vpaddq ymm4,ymm4,ymm0
+ vpmuludq ymm12,ymm12,ymm10
+ vmovdqu ymm0,YMMWORD PTR[((-16+224-128))+rsi]
+ vpaddq ymm5,ymm5,ymm12
+ vpmuludq ymm13,ymm13,ymm10
+ vmovdqu ymm12,YMMWORD PTR[((-16+256-128))+rsi]
+ vpaddq ymm6,ymm6,ymm13
+ vpmuludq ymm0,ymm0,ymm10
+ vmovdqu ymm13,YMMWORD PTR[((-16+288-128))+rsi]
+ vpaddq ymm7,ymm7,ymm0
+ vpmuludq ymm12,ymm12,ymm10
+ vpaddq ymm8,ymm8,ymm12
+ vpmuludq ymm13,ymm13,ymm10
+ vpbroadcastq ymm10,QWORD PTR[24+r13]
+ vpaddq ymm9,ymm9,ymm13
+
+ vmovdqu ymm0,YMMWORD PTR[((-16+32-128))+rcx]
+ mov rdx,rax
+ imul rax,QWORD PTR[((-128))+rcx]
+ add r11,rax
+ vmovdqu ymm12,YMMWORD PTR[((-16+64-128))+rcx]
+ imul rdx,QWORD PTR[((8-128))+rcx]
+ add r12,rdx
+ shr r11,29
+
+ vpmuludq ymm0,ymm0,ymm11
+ vmovq rbx,xmm10
+ vmovdqu ymm13,YMMWORD PTR[((-16+96-128))+rcx]
+ vpaddq ymm1,ymm1,ymm0
+ vpmuludq ymm12,ymm12,ymm11
+ vmovdqu ymm0,YMMWORD PTR[((-16+128-128))+rcx]
+ vpaddq ymm2,ymm2,ymm12
+ vpmuludq ymm13,ymm13,ymm11
+ vmovdqu ymm12,YMMWORD PTR[((-16+160-128))+rcx]
+ vpaddq ymm3,ymm3,ymm13
+ vpmuludq ymm0,ymm0,ymm11
+ vmovdqu ymm13,YMMWORD PTR[((-16+192-128))+rcx]
+ vpaddq ymm4,ymm4,ymm0
+ vpmuludq ymm12,ymm12,ymm11
+ vmovdqu ymm0,YMMWORD PTR[((-16+224-128))+rcx]
+ vpaddq ymm5,ymm5,ymm12
+ vpmuludq ymm13,ymm13,ymm11
+ vmovdqu ymm12,YMMWORD PTR[((-16+256-128))+rcx]
+ vpaddq ymm6,ymm6,ymm13
+ vpmuludq ymm0,ymm0,ymm11
+ vmovdqu ymm13,YMMWORD PTR[((-16+288-128))+rcx]
+ vpaddq ymm7,ymm7,ymm0
+ vpmuludq ymm12,ymm12,ymm11
+ vmovdqu ymm0,YMMWORD PTR[((-24+32-128))+rsi]
+ vpaddq ymm8,ymm8,ymm12
+ vpmuludq ymm13,ymm13,ymm11
+ vmovdqu ymm12,YMMWORD PTR[((-24+64-128))+rsi]
+ vpaddq ymm9,ymm9,ymm13
+
+ add r12,r11
+ imul rbx,QWORD PTR[((-128))+rsi]
+ add r12,rbx
+
+ mov rax,r12
+ imul eax,r8d
+ and eax,01fffffffh
+
+ vpmuludq ymm0,ymm0,ymm10
+ vmovd xmm11,eax
+ vmovdqu ymm13,YMMWORD PTR[((-24+96-128))+rsi]
+ vpaddq ymm1,ymm1,ymm0
+ vpmuludq ymm12,ymm12,ymm10
+ vpbroadcastq ymm11,xmm11
+ vmovdqu ymm0,YMMWORD PTR[((-24+128-128))+rsi]
+ vpaddq ymm2,ymm2,ymm12
+ vpmuludq ymm13,ymm13,ymm10
+ vmovdqu ymm12,YMMWORD PTR[((-24+160-128))+rsi]
+ vpaddq ymm3,ymm3,ymm13
+ vpmuludq ymm0,ymm0,ymm10
+ vmovdqu ymm13,YMMWORD PTR[((-24+192-128))+rsi]
+ vpaddq ymm4,ymm4,ymm0
+ vpmuludq ymm12,ymm12,ymm10
+ vmovdqu ymm0,YMMWORD PTR[((-24+224-128))+rsi]
+ vpaddq ymm5,ymm5,ymm12
+ vpmuludq ymm13,ymm13,ymm10
+ vmovdqu ymm12,YMMWORD PTR[((-24+256-128))+rsi]
+ vpaddq ymm6,ymm6,ymm13
+ vpmuludq ymm0,ymm0,ymm10
+ vmovdqu ymm13,YMMWORD PTR[((-24+288-128))+rsi]
+ vpaddq ymm7,ymm7,ymm0
+ vpmuludq ymm12,ymm12,ymm10
+ vpaddq ymm8,ymm8,ymm12
+ vpmuludq ymm13,ymm13,ymm10
+ vpbroadcastq ymm10,QWORD PTR[32+r13]
+ vpaddq ymm9,ymm9,ymm13
+ add r13,32
+
+ vmovdqu ymm0,YMMWORD PTR[((-24+32-128))+rcx]
+ imul rax,QWORD PTR[((-128))+rcx]
+ add r12,rax
+ shr r12,29
+
+ vmovdqu ymm12,YMMWORD PTR[((-24+64-128))+rcx]
+ vpmuludq ymm0,ymm0,ymm11
+ vmovq rbx,xmm10
+ vmovdqu ymm13,YMMWORD PTR[((-24+96-128))+rcx]
+ vpaddq ymm0,ymm1,ymm0
+ vpmuludq ymm12,ymm12,ymm11
+ vmovdqu YMMWORD PTR[rsp],ymm0
+ vpaddq ymm1,ymm2,ymm12
+ vmovdqu ymm0,YMMWORD PTR[((-24+128-128))+rcx]
+ vpmuludq ymm13,ymm13,ymm11
+ vmovdqu ymm12,YMMWORD PTR[((-24+160-128))+rcx]
+ vpaddq ymm2,ymm3,ymm13
+ vpmuludq ymm0,ymm0,ymm11
+ vmovdqu ymm13,YMMWORD PTR[((-24+192-128))+rcx]
+ vpaddq ymm3,ymm4,ymm0
+ vpmuludq ymm12,ymm12,ymm11
+ vmovdqu ymm0,YMMWORD PTR[((-24+224-128))+rcx]
+ vpaddq ymm4,ymm5,ymm12
+ vpmuludq ymm13,ymm13,ymm11
+ vmovdqu ymm12,YMMWORD PTR[((-24+256-128))+rcx]
+ vpaddq ymm5,ymm6,ymm13
+ vpmuludq ymm0,ymm0,ymm11
+ vmovdqu ymm13,YMMWORD PTR[((-24+288-128))+rcx]
+ mov r9,r12
+ vpaddq ymm6,ymm7,ymm0
+ vpmuludq ymm12,ymm12,ymm11
+ add r9,QWORD PTR[rsp]
+ vpaddq ymm7,ymm8,ymm12
+ vpmuludq ymm13,ymm13,ymm11
+ vmovq xmm12,r12
+ vpaddq ymm8,ymm9,ymm13
+
+ dec r14d
+ jnz $L$oop_mul_1024
+ vpaddq ymm0,ymm12,YMMWORD PTR[rsp]
+
+ vpsrlq ymm12,ymm0,29
+ vpand ymm0,ymm0,ymm15
+ vpsrlq ymm13,ymm1,29
+ vpand ymm1,ymm1,ymm15
+ vpsrlq ymm10,ymm2,29
+ vpermq ymm12,ymm12,093h
+ vpand ymm2,ymm2,ymm15
+ vpsrlq ymm11,ymm3,29
+ vpermq ymm13,ymm13,093h
+ vpand ymm3,ymm3,ymm15
+
+ vpblendd ymm9,ymm12,ymm14,3
+ vpermq ymm10,ymm10,093h
+ vpblendd ymm12,ymm13,ymm12,3
+ vpermq ymm11,ymm11,093h
+ vpaddq ymm0,ymm0,ymm9
+ vpblendd ymm13,ymm10,ymm13,3
+ vpaddq ymm1,ymm1,ymm12
+ vpblendd ymm10,ymm11,ymm10,3
+ vpaddq ymm2,ymm2,ymm13
+ vpblendd ymm11,ymm14,ymm11,3
+ vpaddq ymm3,ymm3,ymm10
+ vpaddq ymm4,ymm4,ymm11
+
+ vpsrlq ymm12,ymm0,29
+ vpand ymm0,ymm0,ymm15
+ vpsrlq ymm13,ymm1,29
+ vpand ymm1,ymm1,ymm15
+ vpsrlq ymm10,ymm2,29
+ vpermq ymm12,ymm12,093h
+ vpand ymm2,ymm2,ymm15
+ vpsrlq ymm11,ymm3,29
+ vpermq ymm13,ymm13,093h
+ vpand ymm3,ymm3,ymm15
+ vpermq ymm10,ymm10,093h
+
+ vpblendd ymm9,ymm12,ymm14,3
+ vpermq ymm11,ymm11,093h
+ vpblendd ymm12,ymm13,ymm12,3
+ vpaddq ymm0,ymm0,ymm9
+ vpblendd ymm13,ymm10,ymm13,3
+ vpaddq ymm1,ymm1,ymm12
+ vpblendd ymm10,ymm11,ymm10,3
+ vpaddq ymm2,ymm2,ymm13
+ vpblendd ymm11,ymm14,ymm11,3
+ vpaddq ymm3,ymm3,ymm10
+ vpaddq ymm4,ymm4,ymm11
+
+ vmovdqu YMMWORD PTR[(0-128)+rdi],ymm0
+ vmovdqu YMMWORD PTR[(32-128)+rdi],ymm1
+ vmovdqu YMMWORD PTR[(64-128)+rdi],ymm2
+ vmovdqu YMMWORD PTR[(96-128)+rdi],ymm3
+ vpsrlq ymm12,ymm4,29
+ vpand ymm4,ymm4,ymm15
+ vpsrlq ymm13,ymm5,29
+ vpand ymm5,ymm5,ymm15
+ vpsrlq ymm10,ymm6,29
+ vpermq ymm12,ymm12,093h
+ vpand ymm6,ymm6,ymm15
+ vpsrlq ymm11,ymm7,29
+ vpermq ymm13,ymm13,093h
+ vpand ymm7,ymm7,ymm15
+ vpsrlq ymm0,ymm8,29
+ vpermq ymm10,ymm10,093h
+ vpand ymm8,ymm8,ymm15
+ vpermq ymm11,ymm11,093h
+
+ vpblendd ymm9,ymm12,ymm14,3
+ vpermq ymm0,ymm0,093h
+ vpblendd ymm12,ymm13,ymm12,3
+ vpaddq ymm4,ymm4,ymm9
+ vpblendd ymm13,ymm10,ymm13,3
+ vpaddq ymm5,ymm5,ymm12
+ vpblendd ymm10,ymm11,ymm10,3
+ vpaddq ymm6,ymm6,ymm13
+ vpblendd ymm11,ymm0,ymm11,3
+ vpaddq ymm7,ymm7,ymm10
+ vpaddq ymm8,ymm8,ymm11
+
+ vpsrlq ymm12,ymm4,29
+ vpand ymm4,ymm4,ymm15
+ vpsrlq ymm13,ymm5,29
+ vpand ymm5,ymm5,ymm15
+ vpsrlq ymm10,ymm6,29
+ vpermq ymm12,ymm12,093h
+ vpand ymm6,ymm6,ymm15
+ vpsrlq ymm11,ymm7,29
+ vpermq ymm13,ymm13,093h
+ vpand ymm7,ymm7,ymm15
+ vpsrlq ymm0,ymm8,29
+ vpermq ymm10,ymm10,093h
+ vpand ymm8,ymm8,ymm15
+ vpermq ymm11,ymm11,093h
+
+ vpblendd ymm9,ymm12,ymm14,3
+ vpermq ymm0,ymm0,093h
+ vpblendd ymm12,ymm13,ymm12,3
+ vpaddq ymm4,ymm4,ymm9
+ vpblendd ymm13,ymm10,ymm13,3
+ vpaddq ymm5,ymm5,ymm12
+ vpblendd ymm10,ymm11,ymm10,3
+ vpaddq ymm6,ymm6,ymm13
+ vpblendd ymm11,ymm0,ymm11,3
+ vpaddq ymm7,ymm7,ymm10
+ vpaddq ymm8,ymm8,ymm11
+
+ vmovdqu YMMWORD PTR[(128-128)+rdi],ymm4
+ vmovdqu YMMWORD PTR[(160-128)+rdi],ymm5
+ vmovdqu YMMWORD PTR[(192-128)+rdi],ymm6
+ vmovdqu YMMWORD PTR[(224-128)+rdi],ymm7
+ vmovdqu YMMWORD PTR[(256-128)+rdi],ymm8
+ vzeroupper
+
+ mov rax,rbp
+
+$L$mul_1024_in_tail::
+ movaps xmm6,XMMWORD PTR[((-216))+rax]
+ movaps xmm7,XMMWORD PTR[((-200))+rax]
+ movaps xmm8,XMMWORD PTR[((-184))+rax]
+ movaps xmm9,XMMWORD PTR[((-168))+rax]
+ movaps xmm10,XMMWORD PTR[((-152))+rax]
+ movaps xmm11,XMMWORD PTR[((-136))+rax]
+ movaps xmm12,XMMWORD PTR[((-120))+rax]
+ movaps xmm13,XMMWORD PTR[((-104))+rax]
+ movaps xmm14,XMMWORD PTR[((-88))+rax]
+ movaps xmm15,XMMWORD PTR[((-72))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$mul_1024_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_rsaz_1024_mul_avx2::
+rsaz_1024_mul_avx2 ENDP
+PUBLIC rsaz_1024_red2norm_avx2
+
+ALIGN 32
+rsaz_1024_red2norm_avx2 PROC PUBLIC
+
+ sub rdx,-128
+ xor rax,rax
+ mov r8,QWORD PTR[((-128))+rdx]
+ mov r9,QWORD PTR[((-120))+rdx]
+ mov r10,QWORD PTR[((-112))+rdx]
+ shl r8,0
+ shl r9,29
+ mov r11,r10
+ shl r10,58
+ shr r11,6
+ add rax,r8
+ add rax,r9
+ add rax,r10
+ adc r11,0
+ mov QWORD PTR[rcx],rax
+ mov rax,r11
+ mov r8,QWORD PTR[((-104))+rdx]
+ mov r9,QWORD PTR[((-96))+rdx]
+ shl r8,23
+ mov r10,r9
+ shl r9,52
+ shr r10,12
+ add rax,r8
+ add rax,r9
+ adc r10,0
+ mov QWORD PTR[8+rcx],rax
+ mov rax,r10
+ mov r11,QWORD PTR[((-88))+rdx]
+ mov r8,QWORD PTR[((-80))+rdx]
+ shl r11,17
+ mov r9,r8
+ shl r8,46
+ shr r9,18
+ add rax,r11
+ add rax,r8
+ adc r9,0
+ mov QWORD PTR[16+rcx],rax
+ mov rax,r9
+ mov r10,QWORD PTR[((-72))+rdx]
+ mov r11,QWORD PTR[((-64))+rdx]
+ shl r10,11
+ mov r8,r11
+ shl r11,40
+ shr r8,24
+ add rax,r10
+ add rax,r11
+ adc r8,0
+ mov QWORD PTR[24+rcx],rax
+ mov rax,r8
+ mov r9,QWORD PTR[((-56))+rdx]
+ mov r10,QWORD PTR[((-48))+rdx]
+ mov r11,QWORD PTR[((-40))+rdx]
+ shl r9,5
+ shl r10,34
+ mov r8,r11
+ shl r11,63
+ shr r8,1
+ add rax,r9
+ add rax,r10
+ add rax,r11
+ adc r8,0
+ mov QWORD PTR[32+rcx],rax
+ mov rax,r8
+ mov r9,QWORD PTR[((-32))+rdx]
+ mov r10,QWORD PTR[((-24))+rdx]
+ shl r9,28
+ mov r11,r10
+ shl r10,57
+ shr r11,7
+ add rax,r9
+ add rax,r10
+ adc r11,0
+ mov QWORD PTR[40+rcx],rax
+ mov rax,r11
+ mov r8,QWORD PTR[((-16))+rdx]
+ mov r9,QWORD PTR[((-8))+rdx]
+ shl r8,22
+ mov r10,r9
+ shl r9,51
+ shr r10,13
+ add rax,r8
+ add rax,r9
+ adc r10,0
+ mov QWORD PTR[48+rcx],rax
+ mov rax,r10
+ mov r11,QWORD PTR[rdx]
+ mov r8,QWORD PTR[8+rdx]
+ shl r11,16
+ mov r9,r8
+ shl r8,45
+ shr r9,19
+ add rax,r11
+ add rax,r8
+ adc r9,0
+ mov QWORD PTR[56+rcx],rax
+ mov rax,r9
+ mov r10,QWORD PTR[16+rdx]
+ mov r11,QWORD PTR[24+rdx]
+ shl r10,10
+ mov r8,r11
+ shl r11,39
+ shr r8,25
+ add rax,r10
+ add rax,r11
+ adc r8,0
+ mov QWORD PTR[64+rcx],rax
+ mov rax,r8
+ mov r9,QWORD PTR[32+rdx]
+ mov r10,QWORD PTR[40+rdx]
+ mov r11,QWORD PTR[48+rdx]
+ shl r9,4
+ shl r10,33
+ mov r8,r11
+ shl r11,62
+ shr r8,2
+ add rax,r9
+ add rax,r10
+ add rax,r11
+ adc r8,0
+ mov QWORD PTR[72+rcx],rax
+ mov rax,r8
+ mov r9,QWORD PTR[56+rdx]
+ mov r10,QWORD PTR[64+rdx]
+ shl r9,27
+ mov r11,r10
+ shl r10,56
+ shr r11,8
+ add rax,r9
+ add rax,r10
+ adc r11,0
+ mov QWORD PTR[80+rcx],rax
+ mov rax,r11
+ mov r8,QWORD PTR[72+rdx]
+ mov r9,QWORD PTR[80+rdx]
+ shl r8,21
+ mov r10,r9
+ shl r9,50
+ shr r10,14
+ add rax,r8
+ add rax,r9
+ adc r10,0
+ mov QWORD PTR[88+rcx],rax
+ mov rax,r10
+ mov r11,QWORD PTR[88+rdx]
+ mov r8,QWORD PTR[96+rdx]
+ shl r11,15
+ mov r9,r8
+ shl r8,44
+ shr r9,20
+ add rax,r11
+ add rax,r8
+ adc r9,0
+ mov QWORD PTR[96+rcx],rax
+ mov rax,r9
+ mov r10,QWORD PTR[104+rdx]
+ mov r11,QWORD PTR[112+rdx]
+ shl r10,9
+ mov r8,r11
+ shl r11,38
+ shr r8,26
+ add rax,r10
+ add rax,r11
+ adc r8,0
+ mov QWORD PTR[104+rcx],rax
+ mov rax,r8
+ mov r9,QWORD PTR[120+rdx]
+ mov r10,QWORD PTR[128+rdx]
+ mov r11,QWORD PTR[136+rdx]
+ shl r9,3
+ shl r10,32
+ mov r8,r11
+ shl r11,61
+ shr r8,3
+ add rax,r9
+ add rax,r10
+ add rax,r11
+ adc r8,0
+ mov QWORD PTR[112+rcx],rax
+ mov rax,r8
+ mov r9,QWORD PTR[144+rdx]
+ mov r10,QWORD PTR[152+rdx]
+ shl r9,26
+ mov r11,r10
+ shl r10,55
+ shr r11,9
+ add rax,r9
+ add rax,r10
+ adc r11,0
+ mov QWORD PTR[120+rcx],rax
+ mov rax,r11
+ DB 0F3h,0C3h ;repret
+
+rsaz_1024_red2norm_avx2 ENDP
+
+PUBLIC rsaz_1024_norm2red_avx2
+
+ALIGN 32
+rsaz_1024_norm2red_avx2 PROC PUBLIC
+
+ sub rcx,-128
+ mov r8,QWORD PTR[rdx]
+ mov eax,01fffffffh
+ mov r9,QWORD PTR[8+rdx]
+ mov r11,r8
+ shr r11,0
+ and r11,rax
+ mov QWORD PTR[((-128))+rcx],r11
+ mov r10,r8
+ shr r10,29
+ and r10,rax
+ mov QWORD PTR[((-120))+rcx],r10
+ shrd r8,r9,58
+ and r8,rax
+ mov QWORD PTR[((-112))+rcx],r8
+ mov r10,QWORD PTR[16+rdx]
+ mov r8,r9
+ shr r8,23
+ and r8,rax
+ mov QWORD PTR[((-104))+rcx],r8
+ shrd r9,r10,52
+ and r9,rax
+ mov QWORD PTR[((-96))+rcx],r9
+ mov r11,QWORD PTR[24+rdx]
+ mov r9,r10
+ shr r9,17
+ and r9,rax
+ mov QWORD PTR[((-88))+rcx],r9
+ shrd r10,r11,46
+ and r10,rax
+ mov QWORD PTR[((-80))+rcx],r10
+ mov r8,QWORD PTR[32+rdx]
+ mov r10,r11
+ shr r10,11
+ and r10,rax
+ mov QWORD PTR[((-72))+rcx],r10
+ shrd r11,r8,40
+ and r11,rax
+ mov QWORD PTR[((-64))+rcx],r11
+ mov r9,QWORD PTR[40+rdx]
+ mov r11,r8
+ shr r11,5
+ and r11,rax
+ mov QWORD PTR[((-56))+rcx],r11
+ mov r10,r8
+ shr r10,34
+ and r10,rax
+ mov QWORD PTR[((-48))+rcx],r10
+ shrd r8,r9,63
+ and r8,rax
+ mov QWORD PTR[((-40))+rcx],r8
+ mov r10,QWORD PTR[48+rdx]
+ mov r8,r9
+ shr r8,28
+ and r8,rax
+ mov QWORD PTR[((-32))+rcx],r8
+ shrd r9,r10,57
+ and r9,rax
+ mov QWORD PTR[((-24))+rcx],r9
+ mov r11,QWORD PTR[56+rdx]
+ mov r9,r10
+ shr r9,22
+ and r9,rax
+ mov QWORD PTR[((-16))+rcx],r9
+ shrd r10,r11,51
+ and r10,rax
+ mov QWORD PTR[((-8))+rcx],r10
+ mov r8,QWORD PTR[64+rdx]
+ mov r10,r11
+ shr r10,16
+ and r10,rax
+ mov QWORD PTR[rcx],r10
+ shrd r11,r8,45
+ and r11,rax
+ mov QWORD PTR[8+rcx],r11
+ mov r9,QWORD PTR[72+rdx]
+ mov r11,r8
+ shr r11,10
+ and r11,rax
+ mov QWORD PTR[16+rcx],r11
+ shrd r8,r9,39
+ and r8,rax
+ mov QWORD PTR[24+rcx],r8
+ mov r10,QWORD PTR[80+rdx]
+ mov r8,r9
+ shr r8,4
+ and r8,rax
+ mov QWORD PTR[32+rcx],r8
+ mov r11,r9
+ shr r11,33
+ and r11,rax
+ mov QWORD PTR[40+rcx],r11
+ shrd r9,r10,62
+ and r9,rax
+ mov QWORD PTR[48+rcx],r9
+ mov r11,QWORD PTR[88+rdx]
+ mov r9,r10
+ shr r9,27
+ and r9,rax
+ mov QWORD PTR[56+rcx],r9
+ shrd r10,r11,56
+ and r10,rax
+ mov QWORD PTR[64+rcx],r10
+ mov r8,QWORD PTR[96+rdx]
+ mov r10,r11
+ shr r10,21
+ and r10,rax
+ mov QWORD PTR[72+rcx],r10
+ shrd r11,r8,50
+ and r11,rax
+ mov QWORD PTR[80+rcx],r11
+ mov r9,QWORD PTR[104+rdx]
+ mov r11,r8
+ shr r11,15
+ and r11,rax
+ mov QWORD PTR[88+rcx],r11
+ shrd r8,r9,44
+ and r8,rax
+ mov QWORD PTR[96+rcx],r8
+ mov r10,QWORD PTR[112+rdx]
+ mov r8,r9
+ shr r8,9
+ and r8,rax
+ mov QWORD PTR[104+rcx],r8
+ shrd r9,r10,38
+ and r9,rax
+ mov QWORD PTR[112+rcx],r9
+ mov r11,QWORD PTR[120+rdx]
+ mov r9,r10
+ shr r9,3
+ and r9,rax
+ mov QWORD PTR[120+rcx],r9
+ mov r8,r10
+ shr r8,32
+ and r8,rax
+ mov QWORD PTR[128+rcx],r8
+ shrd r10,r11,61
+ and r10,rax
+ mov QWORD PTR[136+rcx],r10
+ xor r8,r8
+ mov r10,r11
+ shr r10,26
+ and r10,rax
+ mov QWORD PTR[144+rcx],r10
+ shrd r11,r8,55
+ and r11,rax
+ mov QWORD PTR[152+rcx],r11
+ mov QWORD PTR[160+rcx],r8
+ mov QWORD PTR[168+rcx],r8
+ mov QWORD PTR[176+rcx],r8
+ mov QWORD PTR[184+rcx],r8
+ DB 0F3h,0C3h ;repret
+
+rsaz_1024_norm2red_avx2 ENDP
+PUBLIC rsaz_1024_scatter5_avx2
+
+ALIGN 32
+rsaz_1024_scatter5_avx2 PROC PUBLIC
+
+ vzeroupper
+ vmovdqu ymm5,YMMWORD PTR[$L$scatter_permd]
+ shl r8d,4
+ lea rcx,QWORD PTR[r8*1+rcx]
+ mov eax,9
+ jmp $L$oop_scatter_1024
+
+ALIGN 32
+$L$oop_scatter_1024::
+ vmovdqu ymm0,YMMWORD PTR[rdx]
+ lea rdx,QWORD PTR[32+rdx]
+ vpermd ymm0,ymm5,ymm0
+ vmovdqu XMMWORD PTR[rcx],xmm0
+ lea rcx,QWORD PTR[512+rcx]
+ dec eax
+ jnz $L$oop_scatter_1024
+
+ vzeroupper
+ DB 0F3h,0C3h ;repret
+
+rsaz_1024_scatter5_avx2 ENDP
+
+PUBLIC rsaz_1024_gather5_avx2
+
+ALIGN 32
+rsaz_1024_gather5_avx2 PROC PUBLIC
+
+ vzeroupper
+ mov r11,rsp
+
+ lea rax,QWORD PTR[((-136))+rsp]
+$L$SEH_begin_rsaz_1024_gather5::
+
+DB 048h,08dh,060h,0e0h
+DB 0c5h,0f8h,029h,070h,0e0h
+DB 0c5h,0f8h,029h,078h,0f0h
+DB 0c5h,078h,029h,040h,000h
+DB 0c5h,078h,029h,048h,010h
+DB 0c5h,078h,029h,050h,020h
+DB 0c5h,078h,029h,058h,030h
+DB 0c5h,078h,029h,060h,040h
+DB 0c5h,078h,029h,068h,050h
+DB 0c5h,078h,029h,070h,060h
+DB 0c5h,078h,029h,078h,070h
+ lea rsp,QWORD PTR[((-256))+rsp]
+ and rsp,-32
+ lea r10,QWORD PTR[$L$inc]
+ lea rax,QWORD PTR[((-128))+rsp]
+
+ vmovd xmm4,r8d
+ vmovdqa ymm0,YMMWORD PTR[r10]
+ vmovdqa ymm1,YMMWORD PTR[32+r10]
+ vmovdqa ymm5,YMMWORD PTR[64+r10]
+ vpbroadcastd ymm4,xmm4
+
+ vpaddd ymm2,ymm0,ymm5
+ vpcmpeqd ymm0,ymm0,ymm4
+ vpaddd ymm3,ymm1,ymm5
+ vpcmpeqd ymm1,ymm1,ymm4
+ vmovdqa YMMWORD PTR[(0+128)+rax],ymm0
+ vpaddd ymm0,ymm2,ymm5
+ vpcmpeqd ymm2,ymm2,ymm4
+ vmovdqa YMMWORD PTR[(32+128)+rax],ymm1
+ vpaddd ymm1,ymm3,ymm5
+ vpcmpeqd ymm3,ymm3,ymm4
+ vmovdqa YMMWORD PTR[(64+128)+rax],ymm2
+ vpaddd ymm2,ymm0,ymm5
+ vpcmpeqd ymm0,ymm0,ymm4
+ vmovdqa YMMWORD PTR[(96+128)+rax],ymm3
+ vpaddd ymm3,ymm1,ymm5
+ vpcmpeqd ymm1,ymm1,ymm4
+ vmovdqa YMMWORD PTR[(128+128)+rax],ymm0
+ vpaddd ymm8,ymm2,ymm5
+ vpcmpeqd ymm2,ymm2,ymm4
+ vmovdqa YMMWORD PTR[(160+128)+rax],ymm1
+ vpaddd ymm9,ymm3,ymm5
+ vpcmpeqd ymm3,ymm3,ymm4
+ vmovdqa YMMWORD PTR[(192+128)+rax],ymm2
+ vpaddd ymm10,ymm8,ymm5
+ vpcmpeqd ymm8,ymm8,ymm4
+ vmovdqa YMMWORD PTR[(224+128)+rax],ymm3
+ vpaddd ymm11,ymm9,ymm5
+ vpcmpeqd ymm9,ymm9,ymm4
+ vpaddd ymm12,ymm10,ymm5
+ vpcmpeqd ymm10,ymm10,ymm4
+ vpaddd ymm13,ymm11,ymm5
+ vpcmpeqd ymm11,ymm11,ymm4
+ vpaddd ymm14,ymm12,ymm5
+ vpcmpeqd ymm12,ymm12,ymm4
+ vpaddd ymm15,ymm13,ymm5
+ vpcmpeqd ymm13,ymm13,ymm4
+ vpcmpeqd ymm14,ymm14,ymm4
+ vpcmpeqd ymm15,ymm15,ymm4
+
+ vmovdqa ymm7,YMMWORD PTR[((-32))+r10]
+ lea rdx,QWORD PTR[128+rdx]
+ mov r8d,9
+
+$L$oop_gather_1024::
+ vmovdqa ymm0,YMMWORD PTR[((0-128))+rdx]
+ vmovdqa ymm1,YMMWORD PTR[((32-128))+rdx]
+ vmovdqa ymm2,YMMWORD PTR[((64-128))+rdx]
+ vmovdqa ymm3,YMMWORD PTR[((96-128))+rdx]
+ vpand ymm0,ymm0,YMMWORD PTR[((0+128))+rax]
+ vpand ymm1,ymm1,YMMWORD PTR[((32+128))+rax]
+ vpand ymm2,ymm2,YMMWORD PTR[((64+128))+rax]
+ vpor ymm4,ymm1,ymm0
+ vpand ymm3,ymm3,YMMWORD PTR[((96+128))+rax]
+ vmovdqa ymm0,YMMWORD PTR[((128-128))+rdx]
+ vmovdqa ymm1,YMMWORD PTR[((160-128))+rdx]
+ vpor ymm5,ymm3,ymm2
+ vmovdqa ymm2,YMMWORD PTR[((192-128))+rdx]
+ vmovdqa ymm3,YMMWORD PTR[((224-128))+rdx]
+ vpand ymm0,ymm0,YMMWORD PTR[((128+128))+rax]
+ vpand ymm1,ymm1,YMMWORD PTR[((160+128))+rax]
+ vpand ymm2,ymm2,YMMWORD PTR[((192+128))+rax]
+ vpor ymm4,ymm4,ymm0
+ vpand ymm3,ymm3,YMMWORD PTR[((224+128))+rax]
+ vpand ymm0,ymm8,YMMWORD PTR[((256-128))+rdx]
+ vpor ymm5,ymm5,ymm1
+ vpand ymm1,ymm9,YMMWORD PTR[((288-128))+rdx]
+ vpor ymm4,ymm4,ymm2
+ vpand ymm2,ymm10,YMMWORD PTR[((320-128))+rdx]
+ vpor ymm5,ymm5,ymm3
+ vpand ymm3,ymm11,YMMWORD PTR[((352-128))+rdx]
+ vpor ymm4,ymm4,ymm0
+ vpand ymm0,ymm12,YMMWORD PTR[((384-128))+rdx]
+ vpor ymm5,ymm5,ymm1
+ vpand ymm1,ymm13,YMMWORD PTR[((416-128))+rdx]
+ vpor ymm4,ymm4,ymm2
+ vpand ymm2,ymm14,YMMWORD PTR[((448-128))+rdx]
+ vpor ymm5,ymm5,ymm3
+ vpand ymm3,ymm15,YMMWORD PTR[((480-128))+rdx]
+ lea rdx,QWORD PTR[512+rdx]
+ vpor ymm4,ymm4,ymm0
+ vpor ymm5,ymm5,ymm1
+ vpor ymm4,ymm4,ymm2
+ vpor ymm5,ymm5,ymm3
+
+ vpor ymm4,ymm4,ymm5
+ vextracti128 xmm5,ymm4,1
+ vpor xmm5,xmm5,xmm4
+ vpermd ymm5,ymm7,ymm5
+ vmovdqu YMMWORD PTR[rcx],ymm5
+ lea rcx,QWORD PTR[32+rcx]
+ dec r8d
+ jnz $L$oop_gather_1024
+
+ vpxor ymm0,ymm0,ymm0
+ vmovdqu YMMWORD PTR[rcx],ymm0
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-168))+r11]
+ movaps xmm7,XMMWORD PTR[((-152))+r11]
+ movaps xmm8,XMMWORD PTR[((-136))+r11]
+ movaps xmm9,XMMWORD PTR[((-120))+r11]
+ movaps xmm10,XMMWORD PTR[((-104))+r11]
+ movaps xmm11,XMMWORD PTR[((-88))+r11]
+ movaps xmm12,XMMWORD PTR[((-72))+r11]
+ movaps xmm13,XMMWORD PTR[((-56))+r11]
+ movaps xmm14,XMMWORD PTR[((-40))+r11]
+ movaps xmm15,XMMWORD PTR[((-24))+r11]
+ lea rsp,QWORD PTR[r11]
+
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_rsaz_1024_gather5::
+rsaz_1024_gather5_avx2 ENDP
+EXTERN OPENSSL_ia32cap_P:NEAR
+PUBLIC rsaz_avx2_eligible
+
+ALIGN 32
+rsaz_avx2_eligible PROC PUBLIC
+ mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ mov ecx,524544
+ mov edx,0
+ and ecx,eax
+ cmp ecx,524544
+ cmove eax,edx
+ and eax,32
+ shr eax,5
+ DB 0F3h,0C3h ;repret
+rsaz_avx2_eligible ENDP
+
+ALIGN 64
+$L$and_mask::
+ DQ 01fffffffh,01fffffffh,01fffffffh,01fffffffh
+$L$scatter_permd::
+ DD 0,2,4,6,7,7,7,7
+$L$gather_permd::
+ DD 0,7,1,7,2,7,3,7
+$L$inc::
+ DD 0,0,0,0,1,1,1,1
+ DD 2,2,2,2,3,3,3,3
+ DD 4,4,4,4,4,4,4,4
+ALIGN 64
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+rsaz_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ mov rbp,QWORD PTR[160+r8]
+
+ mov r10d,DWORD PTR[8+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ cmovc rax,rbp
+
+ mov r15,QWORD PTR[((-48))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov QWORD PTR[240+r8],r15
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[144+r8],rbx
+
+ lea rsi,QWORD PTR[((-216))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+rsaz_se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_rsaz_1024_sqr_avx2
+ DD imagerel $L$SEH_end_rsaz_1024_sqr_avx2
+ DD imagerel $L$SEH_info_rsaz_1024_sqr_avx2
+
+ DD imagerel $L$SEH_begin_rsaz_1024_mul_avx2
+ DD imagerel $L$SEH_end_rsaz_1024_mul_avx2
+ DD imagerel $L$SEH_info_rsaz_1024_mul_avx2
+
+ DD imagerel $L$SEH_begin_rsaz_1024_gather5
+ DD imagerel $L$SEH_end_rsaz_1024_gather5
+ DD imagerel $L$SEH_info_rsaz_1024_gather5
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_rsaz_1024_sqr_avx2::
+DB 9,0,0,0
+ DD imagerel rsaz_se_handler
+ DD imagerel $L$sqr_1024_body,imagerel $L$sqr_1024_epilogue,imagerel $L$sqr_1024_in_tail
+ DD 0
+$L$SEH_info_rsaz_1024_mul_avx2::
+DB 9,0,0,0
+ DD imagerel rsaz_se_handler
+ DD imagerel $L$mul_1024_body,imagerel $L$mul_1024_epilogue,imagerel $L$mul_1024_in_tail
+ DD 0
+$L$SEH_info_rsaz_1024_gather5::
+DB 001h,036h,017h,00bh
+DB 036h,0f8h,009h,000h
+DB 031h,0e8h,008h,000h
+DB 02ch,0d8h,007h,000h
+DB 027h,0c8h,006h,000h
+DB 022h,0b8h,005h,000h
+DB 01dh,0a8h,004h,000h
+DB 018h,098h,003h,000h
+DB 013h,088h,002h,000h
+DB 00eh,078h,001h,000h
+DB 009h,068h,000h,000h
+DB 004h,001h,015h,000h
+DB 000h,0b3h,000h,000h
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/bn/rsaz-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/bn/rsaz-x86_64.masm
index 9dc8c8e1b1..c6758dd3bd 100644
--- a/contrib/libs/openssl/asm/windows/crypto/bn/rsaz-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/bn/rsaz-x86_64.masm
@@ -1,2267 +1,2267 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC rsaz_512_sqr
-
-ALIGN 32
-rsaz_512_sqr PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_rsaz_512_sqr::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- sub rsp,128+24
-
-$L$sqr_body::
-DB 102,72,15,110,202
- mov rdx,QWORD PTR[rsi]
- mov rax,QWORD PTR[8+rsi]
- mov QWORD PTR[128+rsp],rcx
- mov r11d,080100h
- and r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- cmp r11d,080100h
- je $L$oop_sqrx
- jmp $L$oop_sqr
-
-ALIGN 32
-$L$oop_sqr::
- mov DWORD PTR[((128+8))+rsp],r8d
-
- mov rbx,rdx
- mov rbp,rax
- mul rdx
- mov r8,rax
- mov rax,QWORD PTR[16+rsi]
- mov r9,rdx
-
- mul rbx
- add r9,rax
- mov rax,QWORD PTR[24+rsi]
- mov r10,rdx
- adc r10,0
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[32+rsi]
- mov r11,rdx
- adc r11,0
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[40+rsi]
- mov r12,rdx
- adc r12,0
-
- mul rbx
- add r12,rax
- mov rax,QWORD PTR[48+rsi]
- mov r13,rdx
- adc r13,0
-
- mul rbx
- add r13,rax
- mov rax,QWORD PTR[56+rsi]
- mov r14,rdx
- adc r14,0
-
- mul rbx
- add r14,rax
- mov rax,rbx
- adc rdx,0
-
- xor rcx,rcx
- add r8,r8
- mov r15,rdx
- adc rcx,0
-
- mul rax
- add rdx,r8
- adc rcx,0
-
- mov QWORD PTR[rsp],rax
- mov QWORD PTR[8+rsp],rdx
-
-
- mov rax,QWORD PTR[16+rsi]
- mul rbp
- add r10,rax
- mov rax,QWORD PTR[24+rsi]
- mov rbx,rdx
- adc rbx,0
-
- mul rbp
- add r11,rax
- mov rax,QWORD PTR[32+rsi]
- adc rdx,0
- add r11,rbx
- mov rbx,rdx
- adc rbx,0
-
- mul rbp
- add r12,rax
- mov rax,QWORD PTR[40+rsi]
- adc rdx,0
- add r12,rbx
- mov rbx,rdx
- adc rbx,0
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[48+rsi]
- adc rdx,0
- add r13,rbx
- mov rbx,rdx
- adc rbx,0
-
- mul rbp
- add r14,rax
- mov rax,QWORD PTR[56+rsi]
- adc rdx,0
- add r14,rbx
- mov rbx,rdx
- adc rbx,0
-
- mul rbp
- add r15,rax
- mov rax,rbp
- adc rdx,0
- add r15,rbx
- adc rdx,0
-
- xor rbx,rbx
- add r9,r9
- mov r8,rdx
- adc r10,r10
- adc rbx,0
-
- mul rax
-
- add rax,rcx
- mov rbp,QWORD PTR[16+rsi]
- add r9,rax
- mov rax,QWORD PTR[24+rsi]
- adc r10,rdx
- adc rbx,0
-
- mov QWORD PTR[16+rsp],r9
- mov QWORD PTR[24+rsp],r10
-
-
- mul rbp
- add r12,rax
- mov rax,QWORD PTR[32+rsi]
- mov rcx,rdx
- adc rcx,0
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[40+rsi]
- adc rdx,0
- add r13,rcx
- mov rcx,rdx
- adc rcx,0
-
- mul rbp
- add r14,rax
- mov rax,QWORD PTR[48+rsi]
- adc rdx,0
- add r14,rcx
- mov rcx,rdx
- adc rcx,0
-
- mul rbp
- add r15,rax
- mov rax,QWORD PTR[56+rsi]
- adc rdx,0
- add r15,rcx
- mov rcx,rdx
- adc rcx,0
-
- mul rbp
- add r8,rax
- mov rax,rbp
- adc rdx,0
- add r8,rcx
- adc rdx,0
-
- xor rcx,rcx
- add r11,r11
- mov r9,rdx
- adc r12,r12
- adc rcx,0
-
- mul rax
-
- add rax,rbx
- mov r10,QWORD PTR[24+rsi]
- add r11,rax
- mov rax,QWORD PTR[32+rsi]
- adc r12,rdx
- adc rcx,0
-
- mov QWORD PTR[32+rsp],r11
- mov QWORD PTR[40+rsp],r12
-
-
- mov r11,rax
- mul r10
- add r14,rax
- mov rax,QWORD PTR[40+rsi]
- mov rbx,rdx
- adc rbx,0
-
- mov r12,rax
- mul r10
- add r15,rax
- mov rax,QWORD PTR[48+rsi]
- adc rdx,0
- add r15,rbx
- mov rbx,rdx
- adc rbx,0
-
- mov rbp,rax
- mul r10
- add r8,rax
- mov rax,QWORD PTR[56+rsi]
- adc rdx,0
- add r8,rbx
- mov rbx,rdx
- adc rbx,0
-
- mul r10
- add r9,rax
- mov rax,r10
- adc rdx,0
- add r9,rbx
- adc rdx,0
-
- xor rbx,rbx
- add r13,r13
- mov r10,rdx
- adc r14,r14
- adc rbx,0
-
- mul rax
-
- add rax,rcx
- add r13,rax
- mov rax,r12
- adc r14,rdx
- adc rbx,0
-
- mov QWORD PTR[48+rsp],r13
- mov QWORD PTR[56+rsp],r14
-
-
- mul r11
- add r8,rax
- mov rax,rbp
- mov rcx,rdx
- adc rcx,0
-
- mul r11
- add r9,rax
- mov rax,QWORD PTR[56+rsi]
- adc rdx,0
- add r9,rcx
- mov rcx,rdx
- adc rcx,0
-
- mov r14,rax
- mul r11
- add r10,rax
- mov rax,r11
- adc rdx,0
- add r10,rcx
- adc rdx,0
-
- xor rcx,rcx
- add r15,r15
- mov r11,rdx
- adc r8,r8
- adc rcx,0
-
- mul rax
-
- add rax,rbx
- add r15,rax
- mov rax,rbp
- adc r8,rdx
- adc rcx,0
-
- mov QWORD PTR[64+rsp],r15
- mov QWORD PTR[72+rsp],r8
-
-
- mul r12
- add r10,rax
- mov rax,r14
- mov rbx,rdx
- adc rbx,0
-
- mul r12
- add r11,rax
- mov rax,r12
- adc rdx,0
- add r11,rbx
- adc rdx,0
-
- xor rbx,rbx
- add r9,r9
- mov r12,rdx
- adc r10,r10
- adc rbx,0
-
- mul rax
-
- add rax,rcx
- add r9,rax
- mov rax,r14
- adc r10,rdx
- adc rbx,0
-
- mov QWORD PTR[80+rsp],r9
- mov QWORD PTR[88+rsp],r10
-
-
- mul rbp
- add r12,rax
- mov rax,rbp
- adc rdx,0
-
- xor rcx,rcx
- add r11,r11
- mov r13,rdx
- adc r12,r12
- adc rcx,0
-
- mul rax
-
- add rax,rbx
- add r11,rax
- mov rax,r14
- adc r12,rdx
- adc rcx,0
-
- mov QWORD PTR[96+rsp],r11
- mov QWORD PTR[104+rsp],r12
-
-
- xor rbx,rbx
- add r13,r13
- adc rbx,0
-
- mul rax
-
- add rax,rcx
- add rax,r13
- adc rdx,rbx
-
- mov r8,QWORD PTR[rsp]
- mov r9,QWORD PTR[8+rsp]
- mov r10,QWORD PTR[16+rsp]
- mov r11,QWORD PTR[24+rsp]
- mov r12,QWORD PTR[32+rsp]
- mov r13,QWORD PTR[40+rsp]
- mov r14,QWORD PTR[48+rsp]
- mov r15,QWORD PTR[56+rsp]
-DB 102,72,15,126,205
-
- mov QWORD PTR[112+rsp],rax
- mov QWORD PTR[120+rsp],rdx
-
- call __rsaz_512_reduce
-
- add r8,QWORD PTR[64+rsp]
- adc r9,QWORD PTR[72+rsp]
- adc r10,QWORD PTR[80+rsp]
- adc r11,QWORD PTR[88+rsp]
- adc r12,QWORD PTR[96+rsp]
- adc r13,QWORD PTR[104+rsp]
- adc r14,QWORD PTR[112+rsp]
- adc r15,QWORD PTR[120+rsp]
- sbb rcx,rcx
-
- call __rsaz_512_subtract
-
- mov rdx,r8
- mov rax,r9
- mov r8d,DWORD PTR[((128+8))+rsp]
- mov rsi,rdi
-
- dec r8d
- jnz $L$oop_sqr
- jmp $L$sqr_tail
-
-ALIGN 32
-$L$oop_sqrx::
- mov DWORD PTR[((128+8))+rsp],r8d
-DB 102,72,15,110,199
-
- mulx r9,r8,rax
- mov rbx,rax
-
- mulx r10,rcx,QWORD PTR[16+rsi]
- xor rbp,rbp
-
- mulx r11,rax,QWORD PTR[24+rsi]
- adcx r9,rcx
-
-DB 0c4h,062h,0f3h,0f6h,0a6h,020h,000h,000h,000h
- adcx r10,rax
-
-DB 0c4h,062h,0fbh,0f6h,0aeh,028h,000h,000h,000h
- adcx r11,rcx
-
- mulx r14,rcx,QWORD PTR[48+rsi]
- adcx r12,rax
- adcx r13,rcx
-
- mulx r15,rax,QWORD PTR[56+rsi]
- adcx r14,rax
- adcx r15,rbp
-
- mulx rdi,rax,rdx
- mov rdx,rbx
- xor rcx,rcx
- adox r8,r8
- adcx r8,rdi
- adox rcx,rbp
- adcx rcx,rbp
-
- mov QWORD PTR[rsp],rax
- mov QWORD PTR[8+rsp],r8
-
-
-DB 0c4h,0e2h,0fbh,0f6h,09eh,010h,000h,000h,000h
- adox r10,rax
- adcx r11,rbx
-
- mulx r8,rdi,QWORD PTR[24+rsi]
- adox r11,rdi
-DB 066h
- adcx r12,r8
-
- mulx rbx,rax,QWORD PTR[32+rsi]
- adox r12,rax
- adcx r13,rbx
-
- mulx r8,rdi,QWORD PTR[40+rsi]
- adox r13,rdi
- adcx r14,r8
-
-DB 0c4h,0e2h,0fbh,0f6h,09eh,030h,000h,000h,000h
- adox r14,rax
- adcx r15,rbx
-
-DB 0c4h,062h,0c3h,0f6h,086h,038h,000h,000h,000h
- adox r15,rdi
- adcx r8,rbp
- mulx rdi,rax,rdx
- adox r8,rbp
-DB 048h,08bh,096h,010h,000h,000h,000h
-
- xor rbx,rbx
- adox r9,r9
-
- adcx rax,rcx
- adox r10,r10
- adcx r9,rax
- adox rbx,rbp
- adcx r10,rdi
- adcx rbx,rbp
-
- mov QWORD PTR[16+rsp],r9
-DB 04ch,089h,094h,024h,018h,000h,000h,000h
-
-
- mulx r9,rdi,QWORD PTR[24+rsi]
- adox r12,rdi
- adcx r13,r9
-
- mulx rcx,rax,QWORD PTR[32+rsi]
- adox r13,rax
- adcx r14,rcx
-
-DB 0c4h,062h,0c3h,0f6h,08eh,028h,000h,000h,000h
- adox r14,rdi
- adcx r15,r9
-
-DB 0c4h,0e2h,0fbh,0f6h,08eh,030h,000h,000h,000h
- adox r15,rax
- adcx r8,rcx
-
- mulx r9,rdi,QWORD PTR[56+rsi]
- adox r8,rdi
- adcx r9,rbp
- mulx rdi,rax,rdx
- adox r9,rbp
- mov rdx,QWORD PTR[24+rsi]
-
- xor rcx,rcx
- adox r11,r11
-
- adcx rax,rbx
- adox r12,r12
- adcx r11,rax
- adox rcx,rbp
- adcx r12,rdi
- adcx rcx,rbp
-
- mov QWORD PTR[32+rsp],r11
- mov QWORD PTR[40+rsp],r12
-
-
- mulx rbx,rax,QWORD PTR[32+rsi]
- adox r14,rax
- adcx r15,rbx
-
- mulx r10,rdi,QWORD PTR[40+rsi]
- adox r15,rdi
- adcx r8,r10
-
- mulx rbx,rax,QWORD PTR[48+rsi]
- adox r8,rax
- adcx r9,rbx
-
- mulx r10,rdi,QWORD PTR[56+rsi]
- adox r9,rdi
- adcx r10,rbp
- mulx rdi,rax,rdx
- adox r10,rbp
- mov rdx,QWORD PTR[32+rsi]
-
- xor rbx,rbx
- adox r13,r13
-
- adcx rax,rcx
- adox r14,r14
- adcx r13,rax
- adox rbx,rbp
- adcx r14,rdi
- adcx rbx,rbp
-
- mov QWORD PTR[48+rsp],r13
- mov QWORD PTR[56+rsp],r14
-
-
- mulx r11,rdi,QWORD PTR[40+rsi]
- adox r8,rdi
- adcx r9,r11
-
- mulx rcx,rax,QWORD PTR[48+rsi]
- adox r9,rax
- adcx r10,rcx
-
- mulx r11,rdi,QWORD PTR[56+rsi]
- adox r10,rdi
- adcx r11,rbp
- mulx rdi,rax,rdx
- mov rdx,QWORD PTR[40+rsi]
- adox r11,rbp
-
- xor rcx,rcx
- adox r15,r15
-
- adcx rax,rbx
- adox r8,r8
- adcx r15,rax
- adox rcx,rbp
- adcx r8,rdi
- adcx rcx,rbp
-
- mov QWORD PTR[64+rsp],r15
- mov QWORD PTR[72+rsp],r8
-
-
-DB 0c4h,0e2h,0fbh,0f6h,09eh,030h,000h,000h,000h
- adox r10,rax
- adcx r11,rbx
-
-DB 0c4h,062h,0c3h,0f6h,0a6h,038h,000h,000h,000h
- adox r11,rdi
- adcx r12,rbp
- mulx rdi,rax,rdx
- adox r12,rbp
- mov rdx,QWORD PTR[48+rsi]
-
- xor rbx,rbx
- adox r9,r9
-
- adcx rax,rcx
- adox r10,r10
- adcx r9,rax
- adcx r10,rdi
- adox rbx,rbp
- adcx rbx,rbp
-
- mov QWORD PTR[80+rsp],r9
- mov QWORD PTR[88+rsp],r10
-
-
-DB 0c4h,062h,0fbh,0f6h,0aeh,038h,000h,000h,000h
- adox r12,rax
- adox r13,rbp
-
- mulx rdi,rax,rdx
- xor rcx,rcx
- mov rdx,QWORD PTR[56+rsi]
- adox r11,r11
-
- adcx rax,rbx
- adox r12,r12
- adcx r11,rax
- adox rcx,rbp
- adcx r12,rdi
- adcx rcx,rbp
-
-DB 04ch,089h,09ch,024h,060h,000h,000h,000h
-DB 04ch,089h,0a4h,024h,068h,000h,000h,000h
-
-
- mulx rdx,rax,rdx
- xor rbx,rbx
- adox r13,r13
-
- adcx rax,rcx
- adox rbx,rbp
- adcx rax,r13
- adcx rbx,rdx
-
-DB 102,72,15,126,199
-DB 102,72,15,126,205
-
- mov rdx,QWORD PTR[128+rsp]
- mov r8,QWORD PTR[rsp]
- mov r9,QWORD PTR[8+rsp]
- mov r10,QWORD PTR[16+rsp]
- mov r11,QWORD PTR[24+rsp]
- mov r12,QWORD PTR[32+rsp]
- mov r13,QWORD PTR[40+rsp]
- mov r14,QWORD PTR[48+rsp]
- mov r15,QWORD PTR[56+rsp]
-
- mov QWORD PTR[112+rsp],rax
- mov QWORD PTR[120+rsp],rbx
-
- call __rsaz_512_reducex
-
- add r8,QWORD PTR[64+rsp]
- adc r9,QWORD PTR[72+rsp]
- adc r10,QWORD PTR[80+rsp]
- adc r11,QWORD PTR[88+rsp]
- adc r12,QWORD PTR[96+rsp]
- adc r13,QWORD PTR[104+rsp]
- adc r14,QWORD PTR[112+rsp]
- adc r15,QWORD PTR[120+rsp]
- sbb rcx,rcx
-
- call __rsaz_512_subtract
-
- mov rdx,r8
- mov rax,r9
- mov r8d,DWORD PTR[((128+8))+rsp]
- mov rsi,rdi
-
- dec r8d
- jnz $L$oop_sqrx
-
-$L$sqr_tail::
-
- lea rax,QWORD PTR[((128+24+48))+rsp]
-
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$sqr_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_rsaz_512_sqr::
-rsaz_512_sqr ENDP
-PUBLIC rsaz_512_mul
-
-ALIGN 32
-rsaz_512_mul PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_rsaz_512_mul::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- sub rsp,128+24
-
-$L$mul_body::
-DB 102,72,15,110,199
-DB 102,72,15,110,201
- mov QWORD PTR[128+rsp],r8
- mov r11d,080100h
- and r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- cmp r11d,080100h
- je $L$mulx
- mov rbx,QWORD PTR[rdx]
- mov rbp,rdx
- call __rsaz_512_mul
-
-DB 102,72,15,126,199
-DB 102,72,15,126,205
-
- mov r8,QWORD PTR[rsp]
- mov r9,QWORD PTR[8+rsp]
- mov r10,QWORD PTR[16+rsp]
- mov r11,QWORD PTR[24+rsp]
- mov r12,QWORD PTR[32+rsp]
- mov r13,QWORD PTR[40+rsp]
- mov r14,QWORD PTR[48+rsp]
- mov r15,QWORD PTR[56+rsp]
-
- call __rsaz_512_reduce
- jmp $L$mul_tail
-
-ALIGN 32
-$L$mulx::
- mov rbp,rdx
- mov rdx,QWORD PTR[rdx]
- call __rsaz_512_mulx
-
-DB 102,72,15,126,199
-DB 102,72,15,126,205
-
- mov rdx,QWORD PTR[128+rsp]
- mov r8,QWORD PTR[rsp]
- mov r9,QWORD PTR[8+rsp]
- mov r10,QWORD PTR[16+rsp]
- mov r11,QWORD PTR[24+rsp]
- mov r12,QWORD PTR[32+rsp]
- mov r13,QWORD PTR[40+rsp]
- mov r14,QWORD PTR[48+rsp]
- mov r15,QWORD PTR[56+rsp]
-
- call __rsaz_512_reducex
-$L$mul_tail::
- add r8,QWORD PTR[64+rsp]
- adc r9,QWORD PTR[72+rsp]
- adc r10,QWORD PTR[80+rsp]
- adc r11,QWORD PTR[88+rsp]
- adc r12,QWORD PTR[96+rsp]
- adc r13,QWORD PTR[104+rsp]
- adc r14,QWORD PTR[112+rsp]
- adc r15,QWORD PTR[120+rsp]
- sbb rcx,rcx
-
- call __rsaz_512_subtract
-
- lea rax,QWORD PTR[((128+24+48))+rsp]
-
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$mul_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_rsaz_512_mul::
-rsaz_512_mul ENDP
-PUBLIC rsaz_512_mul_gather4
-
-ALIGN 32
-rsaz_512_mul_gather4 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_rsaz_512_mul_gather4::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- sub rsp,328
-
- movaps XMMWORD PTR[160+rsp],xmm6
- movaps XMMWORD PTR[176+rsp],xmm7
- movaps XMMWORD PTR[192+rsp],xmm8
- movaps XMMWORD PTR[208+rsp],xmm9
- movaps XMMWORD PTR[224+rsp],xmm10
- movaps XMMWORD PTR[240+rsp],xmm11
- movaps XMMWORD PTR[256+rsp],xmm12
- movaps XMMWORD PTR[272+rsp],xmm13
- movaps XMMWORD PTR[288+rsp],xmm14
- movaps XMMWORD PTR[304+rsp],xmm15
-$L$mul_gather4_body::
- movd xmm8,r9d
- movdqa xmm1,XMMWORD PTR[(($L$inc+16))]
- movdqa xmm0,XMMWORD PTR[$L$inc]
-
- pshufd xmm8,xmm8,0
- movdqa xmm7,xmm1
- movdqa xmm2,xmm1
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm8
- movdqa xmm3,xmm7
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm8
- movdqa xmm4,xmm7
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm8
- movdqa xmm5,xmm7
- paddd xmm4,xmm3
- pcmpeqd xmm3,xmm8
- movdqa xmm6,xmm7
- paddd xmm5,xmm4
- pcmpeqd xmm4,xmm8
- paddd xmm6,xmm5
- pcmpeqd xmm5,xmm8
- paddd xmm7,xmm6
- pcmpeqd xmm6,xmm8
- pcmpeqd xmm7,xmm8
-
- movdqa xmm8,XMMWORD PTR[rdx]
- movdqa xmm9,XMMWORD PTR[16+rdx]
- movdqa xmm10,XMMWORD PTR[32+rdx]
- movdqa xmm11,XMMWORD PTR[48+rdx]
- pand xmm8,xmm0
- movdqa xmm12,XMMWORD PTR[64+rdx]
- pand xmm9,xmm1
- movdqa xmm13,XMMWORD PTR[80+rdx]
- pand xmm10,xmm2
- movdqa xmm14,XMMWORD PTR[96+rdx]
- pand xmm11,xmm3
- movdqa xmm15,XMMWORD PTR[112+rdx]
- lea rbp,QWORD PTR[128+rdx]
- pand xmm12,xmm4
- pand xmm13,xmm5
- pand xmm14,xmm6
- pand xmm15,xmm7
- por xmm8,xmm10
- por xmm9,xmm11
- por xmm8,xmm12
- por xmm9,xmm13
- por xmm8,xmm14
- por xmm9,xmm15
-
- por xmm8,xmm9
- pshufd xmm9,xmm8,04eh
- por xmm8,xmm9
- mov r11d,080100h
- and r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- cmp r11d,080100h
- je $L$mulx_gather
-DB 102,76,15,126,195
-
- mov QWORD PTR[128+rsp],r8
- mov QWORD PTR[((128+8))+rsp],rdi
- mov QWORD PTR[((128+16))+rsp],rcx
-
- mov rax,QWORD PTR[rsi]
- mov rcx,QWORD PTR[8+rsi]
- mul rbx
- mov QWORD PTR[rsp],rax
- mov rax,rcx
- mov r8,rdx
-
- mul rbx
- add r8,rax
- mov rax,QWORD PTR[16+rsi]
- mov r9,rdx
- adc r9,0
-
- mul rbx
- add r9,rax
- mov rax,QWORD PTR[24+rsi]
- mov r10,rdx
- adc r10,0
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[32+rsi]
- mov r11,rdx
- adc r11,0
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[40+rsi]
- mov r12,rdx
- adc r12,0
-
- mul rbx
- add r12,rax
- mov rax,QWORD PTR[48+rsi]
- mov r13,rdx
- adc r13,0
-
- mul rbx
- add r13,rax
- mov rax,QWORD PTR[56+rsi]
- mov r14,rdx
- adc r14,0
-
- mul rbx
- add r14,rax
- mov rax,QWORD PTR[rsi]
- mov r15,rdx
- adc r15,0
-
- lea rdi,QWORD PTR[8+rsp]
- mov ecx,7
- jmp $L$oop_mul_gather
-
-ALIGN 32
-$L$oop_mul_gather::
- movdqa xmm8,XMMWORD PTR[rbp]
- movdqa xmm9,XMMWORD PTR[16+rbp]
- movdqa xmm10,XMMWORD PTR[32+rbp]
- movdqa xmm11,XMMWORD PTR[48+rbp]
- pand xmm8,xmm0
- movdqa xmm12,XMMWORD PTR[64+rbp]
- pand xmm9,xmm1
- movdqa xmm13,XMMWORD PTR[80+rbp]
- pand xmm10,xmm2
- movdqa xmm14,XMMWORD PTR[96+rbp]
- pand xmm11,xmm3
- movdqa xmm15,XMMWORD PTR[112+rbp]
- lea rbp,QWORD PTR[128+rbp]
- pand xmm12,xmm4
- pand xmm13,xmm5
- pand xmm14,xmm6
- pand xmm15,xmm7
- por xmm8,xmm10
- por xmm9,xmm11
- por xmm8,xmm12
- por xmm9,xmm13
- por xmm8,xmm14
- por xmm9,xmm15
-
- por xmm8,xmm9
- pshufd xmm9,xmm8,04eh
- por xmm8,xmm9
-DB 102,76,15,126,195
-
- mul rbx
- add r8,rax
- mov rax,QWORD PTR[8+rsi]
- mov QWORD PTR[rdi],r8
- mov r8,rdx
- adc r8,0
-
- mul rbx
- add r9,rax
- mov rax,QWORD PTR[16+rsi]
- adc rdx,0
- add r8,r9
- mov r9,rdx
- adc r9,0
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[24+rsi]
- adc rdx,0
- add r9,r10
- mov r10,rdx
- adc r10,0
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[32+rsi]
- adc rdx,0
- add r10,r11
- mov r11,rdx
- adc r11,0
-
- mul rbx
- add r12,rax
- mov rax,QWORD PTR[40+rsi]
- adc rdx,0
- add r11,r12
- mov r12,rdx
- adc r12,0
-
- mul rbx
- add r13,rax
- mov rax,QWORD PTR[48+rsi]
- adc rdx,0
- add r12,r13
- mov r13,rdx
- adc r13,0
-
- mul rbx
- add r14,rax
- mov rax,QWORD PTR[56+rsi]
- adc rdx,0
- add r13,r14
- mov r14,rdx
- adc r14,0
-
- mul rbx
- add r15,rax
- mov rax,QWORD PTR[rsi]
- adc rdx,0
- add r14,r15
- mov r15,rdx
- adc r15,0
-
- lea rdi,QWORD PTR[8+rdi]
-
- dec ecx
- jnz $L$oop_mul_gather
-
- mov QWORD PTR[rdi],r8
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
- mov QWORD PTR[32+rdi],r12
- mov QWORD PTR[40+rdi],r13
- mov QWORD PTR[48+rdi],r14
- mov QWORD PTR[56+rdi],r15
-
- mov rdi,QWORD PTR[((128+8))+rsp]
- mov rbp,QWORD PTR[((128+16))+rsp]
-
- mov r8,QWORD PTR[rsp]
- mov r9,QWORD PTR[8+rsp]
- mov r10,QWORD PTR[16+rsp]
- mov r11,QWORD PTR[24+rsp]
- mov r12,QWORD PTR[32+rsp]
- mov r13,QWORD PTR[40+rsp]
- mov r14,QWORD PTR[48+rsp]
- mov r15,QWORD PTR[56+rsp]
-
- call __rsaz_512_reduce
- jmp $L$mul_gather_tail
-
-ALIGN 32
-$L$mulx_gather::
-DB 102,76,15,126,194
-
- mov QWORD PTR[128+rsp],r8
- mov QWORD PTR[((128+8))+rsp],rdi
- mov QWORD PTR[((128+16))+rsp],rcx
-
- mulx r8,rbx,QWORD PTR[rsi]
- mov QWORD PTR[rsp],rbx
- xor edi,edi
-
- mulx r9,rax,QWORD PTR[8+rsi]
-
- mulx r10,rbx,QWORD PTR[16+rsi]
- adcx r8,rax
-
- mulx r11,rax,QWORD PTR[24+rsi]
- adcx r9,rbx
-
- mulx r12,rbx,QWORD PTR[32+rsi]
- adcx r10,rax
-
- mulx r13,rax,QWORD PTR[40+rsi]
- adcx r11,rbx
-
- mulx r14,rbx,QWORD PTR[48+rsi]
- adcx r12,rax
-
- mulx r15,rax,QWORD PTR[56+rsi]
- adcx r13,rbx
- adcx r14,rax
-DB 067h
- mov rbx,r8
- adcx r15,rdi
-
- mov rcx,-7
- jmp $L$oop_mulx_gather
-
-ALIGN 32
-$L$oop_mulx_gather::
- movdqa xmm8,XMMWORD PTR[rbp]
- movdqa xmm9,XMMWORD PTR[16+rbp]
- movdqa xmm10,XMMWORD PTR[32+rbp]
- movdqa xmm11,XMMWORD PTR[48+rbp]
- pand xmm8,xmm0
- movdqa xmm12,XMMWORD PTR[64+rbp]
- pand xmm9,xmm1
- movdqa xmm13,XMMWORD PTR[80+rbp]
- pand xmm10,xmm2
- movdqa xmm14,XMMWORD PTR[96+rbp]
- pand xmm11,xmm3
- movdqa xmm15,XMMWORD PTR[112+rbp]
- lea rbp,QWORD PTR[128+rbp]
- pand xmm12,xmm4
- pand xmm13,xmm5
- pand xmm14,xmm6
- pand xmm15,xmm7
- por xmm8,xmm10
- por xmm9,xmm11
- por xmm8,xmm12
- por xmm9,xmm13
- por xmm8,xmm14
- por xmm9,xmm15
-
- por xmm8,xmm9
- pshufd xmm9,xmm8,04eh
- por xmm8,xmm9
-DB 102,76,15,126,194
-
-DB 0c4h,062h,0fbh,0f6h,086h,000h,000h,000h,000h
- adcx rbx,rax
- adox r8,r9
-
- mulx r9,rax,QWORD PTR[8+rsi]
- adcx r8,rax
- adox r9,r10
-
- mulx r10,rax,QWORD PTR[16+rsi]
- adcx r9,rax
- adox r10,r11
-
-DB 0c4h,062h,0fbh,0f6h,09eh,018h,000h,000h,000h
- adcx r10,rax
- adox r11,r12
-
- mulx r12,rax,QWORD PTR[32+rsi]
- adcx r11,rax
- adox r12,r13
-
- mulx r13,rax,QWORD PTR[40+rsi]
- adcx r12,rax
- adox r13,r14
-
-DB 0c4h,062h,0fbh,0f6h,0b6h,030h,000h,000h,000h
- adcx r13,rax
-DB 067h
- adox r14,r15
-
- mulx r15,rax,QWORD PTR[56+rsi]
- mov QWORD PTR[64+rcx*8+rsp],rbx
- adcx r14,rax
- adox r15,rdi
- mov rbx,r8
- adcx r15,rdi
-
- inc rcx
- jnz $L$oop_mulx_gather
-
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[((64+8))+rsp],r9
- mov QWORD PTR[((64+16))+rsp],r10
- mov QWORD PTR[((64+24))+rsp],r11
- mov QWORD PTR[((64+32))+rsp],r12
- mov QWORD PTR[((64+40))+rsp],r13
- mov QWORD PTR[((64+48))+rsp],r14
- mov QWORD PTR[((64+56))+rsp],r15
-
- mov rdx,QWORD PTR[128+rsp]
- mov rdi,QWORD PTR[((128+8))+rsp]
- mov rbp,QWORD PTR[((128+16))+rsp]
-
- mov r8,QWORD PTR[rsp]
- mov r9,QWORD PTR[8+rsp]
- mov r10,QWORD PTR[16+rsp]
- mov r11,QWORD PTR[24+rsp]
- mov r12,QWORD PTR[32+rsp]
- mov r13,QWORD PTR[40+rsp]
- mov r14,QWORD PTR[48+rsp]
- mov r15,QWORD PTR[56+rsp]
-
- call __rsaz_512_reducex
-
-$L$mul_gather_tail::
- add r8,QWORD PTR[64+rsp]
- adc r9,QWORD PTR[72+rsp]
- adc r10,QWORD PTR[80+rsp]
- adc r11,QWORD PTR[88+rsp]
- adc r12,QWORD PTR[96+rsp]
- adc r13,QWORD PTR[104+rsp]
- adc r14,QWORD PTR[112+rsp]
- adc r15,QWORD PTR[120+rsp]
- sbb rcx,rcx
-
- call __rsaz_512_subtract
-
- lea rax,QWORD PTR[((128+24+48))+rsp]
- movaps xmm6,XMMWORD PTR[((160-200))+rax]
- movaps xmm7,XMMWORD PTR[((176-200))+rax]
- movaps xmm8,XMMWORD PTR[((192-200))+rax]
- movaps xmm9,XMMWORD PTR[((208-200))+rax]
- movaps xmm10,XMMWORD PTR[((224-200))+rax]
- movaps xmm11,XMMWORD PTR[((240-200))+rax]
- movaps xmm12,XMMWORD PTR[((256-200))+rax]
- movaps xmm13,XMMWORD PTR[((272-200))+rax]
- movaps xmm14,XMMWORD PTR[((288-200))+rax]
- movaps xmm15,XMMWORD PTR[((304-200))+rax]
- lea rax,QWORD PTR[176+rax]
-
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$mul_gather4_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_rsaz_512_mul_gather4::
-rsaz_512_mul_gather4 ENDP
-PUBLIC rsaz_512_mul_scatter4
-
-ALIGN 32
-rsaz_512_mul_scatter4 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_rsaz_512_mul_scatter4::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- mov r9d,r9d
- sub rsp,128+24
-
-$L$mul_scatter4_body::
- lea r8,QWORD PTR[r9*8+r8]
-DB 102,72,15,110,199
-DB 102,72,15,110,202
-DB 102,73,15,110,208
- mov QWORD PTR[128+rsp],rcx
-
- mov rbp,rdi
- mov r11d,080100h
- and r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- cmp r11d,080100h
- je $L$mulx_scatter
- mov rbx,QWORD PTR[rdi]
- call __rsaz_512_mul
-
-DB 102,72,15,126,199
-DB 102,72,15,126,205
-
- mov r8,QWORD PTR[rsp]
- mov r9,QWORD PTR[8+rsp]
- mov r10,QWORD PTR[16+rsp]
- mov r11,QWORD PTR[24+rsp]
- mov r12,QWORD PTR[32+rsp]
- mov r13,QWORD PTR[40+rsp]
- mov r14,QWORD PTR[48+rsp]
- mov r15,QWORD PTR[56+rsp]
-
- call __rsaz_512_reduce
- jmp $L$mul_scatter_tail
-
-ALIGN 32
-$L$mulx_scatter::
- mov rdx,QWORD PTR[rdi]
- call __rsaz_512_mulx
-
-DB 102,72,15,126,199
-DB 102,72,15,126,205
-
- mov rdx,QWORD PTR[128+rsp]
- mov r8,QWORD PTR[rsp]
- mov r9,QWORD PTR[8+rsp]
- mov r10,QWORD PTR[16+rsp]
- mov r11,QWORD PTR[24+rsp]
- mov r12,QWORD PTR[32+rsp]
- mov r13,QWORD PTR[40+rsp]
- mov r14,QWORD PTR[48+rsp]
- mov r15,QWORD PTR[56+rsp]
-
- call __rsaz_512_reducex
-
-$L$mul_scatter_tail::
- add r8,QWORD PTR[64+rsp]
- adc r9,QWORD PTR[72+rsp]
- adc r10,QWORD PTR[80+rsp]
- adc r11,QWORD PTR[88+rsp]
- adc r12,QWORD PTR[96+rsp]
- adc r13,QWORD PTR[104+rsp]
- adc r14,QWORD PTR[112+rsp]
- adc r15,QWORD PTR[120+rsp]
-DB 102,72,15,126,214
- sbb rcx,rcx
-
- call __rsaz_512_subtract
-
- mov QWORD PTR[rsi],r8
- mov QWORD PTR[128+rsi],r9
- mov QWORD PTR[256+rsi],r10
- mov QWORD PTR[384+rsi],r11
- mov QWORD PTR[512+rsi],r12
- mov QWORD PTR[640+rsi],r13
- mov QWORD PTR[768+rsi],r14
- mov QWORD PTR[896+rsi],r15
-
- lea rax,QWORD PTR[((128+24+48))+rsp]
-
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$mul_scatter4_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_rsaz_512_mul_scatter4::
-rsaz_512_mul_scatter4 ENDP
-PUBLIC rsaz_512_mul_by_one
-
-ALIGN 32
-rsaz_512_mul_by_one PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_rsaz_512_mul_by_one::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- sub rsp,128+24
-
-$L$mul_by_one_body::
- mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- mov rbp,rdx
- mov QWORD PTR[128+rsp],rcx
-
- mov r8,QWORD PTR[rsi]
- pxor xmm0,xmm0
- mov r9,QWORD PTR[8+rsi]
- mov r10,QWORD PTR[16+rsi]
- mov r11,QWORD PTR[24+rsi]
- mov r12,QWORD PTR[32+rsi]
- mov r13,QWORD PTR[40+rsi]
- mov r14,QWORD PTR[48+rsi]
- mov r15,QWORD PTR[56+rsi]
-
- movdqa XMMWORD PTR[rsp],xmm0
- movdqa XMMWORD PTR[16+rsp],xmm0
- movdqa XMMWORD PTR[32+rsp],xmm0
- movdqa XMMWORD PTR[48+rsp],xmm0
- movdqa XMMWORD PTR[64+rsp],xmm0
- movdqa XMMWORD PTR[80+rsp],xmm0
- movdqa XMMWORD PTR[96+rsp],xmm0
- and eax,080100h
- cmp eax,080100h
- je $L$by_one_callx
- call __rsaz_512_reduce
- jmp $L$by_one_tail
-ALIGN 32
-$L$by_one_callx::
- mov rdx,QWORD PTR[128+rsp]
- call __rsaz_512_reducex
-$L$by_one_tail::
- mov QWORD PTR[rdi],r8
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
- mov QWORD PTR[32+rdi],r12
- mov QWORD PTR[40+rdi],r13
- mov QWORD PTR[48+rdi],r14
- mov QWORD PTR[56+rdi],r15
-
- lea rax,QWORD PTR[((128+24+48))+rsp]
-
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$mul_by_one_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_rsaz_512_mul_by_one::
-rsaz_512_mul_by_one ENDP
-
-ALIGN 32
-__rsaz_512_reduce PROC PRIVATE
-
- mov rbx,r8
- imul rbx,QWORD PTR[((128+8))+rsp]
- mov rax,QWORD PTR[rbp]
- mov ecx,8
- jmp $L$reduction_loop
-
-ALIGN 32
-$L$reduction_loop::
- mul rbx
- mov rax,QWORD PTR[8+rbp]
- neg r8
- mov r8,rdx
- adc r8,0
-
- mul rbx
- add r9,rax
- mov rax,QWORD PTR[16+rbp]
- adc rdx,0
- add r8,r9
- mov r9,rdx
- adc r9,0
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[24+rbp]
- adc rdx,0
- add r9,r10
- mov r10,rdx
- adc r10,0
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[32+rbp]
- adc rdx,0
- add r10,r11
- mov rsi,QWORD PTR[((128+8))+rsp]
-
-
- adc rdx,0
- mov r11,rdx
-
- mul rbx
- add r12,rax
- mov rax,QWORD PTR[40+rbp]
- adc rdx,0
- imul rsi,r8
- add r11,r12
- mov r12,rdx
- adc r12,0
-
- mul rbx
- add r13,rax
- mov rax,QWORD PTR[48+rbp]
- adc rdx,0
- add r12,r13
- mov r13,rdx
- adc r13,0
-
- mul rbx
- add r14,rax
- mov rax,QWORD PTR[56+rbp]
- adc rdx,0
- add r13,r14
- mov r14,rdx
- adc r14,0
-
- mul rbx
- mov rbx,rsi
- add r15,rax
- mov rax,QWORD PTR[rbp]
- adc rdx,0
- add r14,r15
- mov r15,rdx
- adc r15,0
-
- dec ecx
- jne $L$reduction_loop
-
- DB 0F3h,0C3h ;repret
-
-__rsaz_512_reduce ENDP
-
-ALIGN 32
-__rsaz_512_reducex PROC PRIVATE
-
-
- imul rdx,r8
- xor rsi,rsi
- mov ecx,8
- jmp $L$reduction_loopx
-
-ALIGN 32
-$L$reduction_loopx::
- mov rbx,r8
- mulx r8,rax,QWORD PTR[rbp]
- adcx rax,rbx
- adox r8,r9
-
- mulx r9,rax,QWORD PTR[8+rbp]
- adcx r8,rax
- adox r9,r10
-
- mulx r10,rbx,QWORD PTR[16+rbp]
- adcx r9,rbx
- adox r10,r11
-
- mulx r11,rbx,QWORD PTR[24+rbp]
- adcx r10,rbx
- adox r11,r12
-
-DB 0c4h,062h,0e3h,0f6h,0a5h,020h,000h,000h,000h
- mov rax,rdx
- mov rdx,r8
- adcx r11,rbx
- adox r12,r13
-
- mulx rdx,rbx,QWORD PTR[((128+8))+rsp]
- mov rdx,rax
-
- mulx r13,rax,QWORD PTR[40+rbp]
- adcx r12,rax
- adox r13,r14
-
-DB 0c4h,062h,0fbh,0f6h,0b5h,030h,000h,000h,000h
- adcx r13,rax
- adox r14,r15
-
- mulx r15,rax,QWORD PTR[56+rbp]
- mov rdx,rbx
- adcx r14,rax
- adox r15,rsi
- adcx r15,rsi
-
- dec ecx
- jne $L$reduction_loopx
-
- DB 0F3h,0C3h ;repret
-
-__rsaz_512_reducex ENDP
-
-ALIGN 32
-__rsaz_512_subtract PROC PRIVATE
-
- mov QWORD PTR[rdi],r8
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
- mov QWORD PTR[32+rdi],r12
- mov QWORD PTR[40+rdi],r13
- mov QWORD PTR[48+rdi],r14
- mov QWORD PTR[56+rdi],r15
-
- mov r8,QWORD PTR[rbp]
- mov r9,QWORD PTR[8+rbp]
- neg r8
- not r9
- and r8,rcx
- mov r10,QWORD PTR[16+rbp]
- and r9,rcx
- not r10
- mov r11,QWORD PTR[24+rbp]
- and r10,rcx
- not r11
- mov r12,QWORD PTR[32+rbp]
- and r11,rcx
- not r12
- mov r13,QWORD PTR[40+rbp]
- and r12,rcx
- not r13
- mov r14,QWORD PTR[48+rbp]
- and r13,rcx
- not r14
- mov r15,QWORD PTR[56+rbp]
- and r14,rcx
- not r15
- and r15,rcx
-
- add r8,QWORD PTR[rdi]
- adc r9,QWORD PTR[8+rdi]
- adc r10,QWORD PTR[16+rdi]
- adc r11,QWORD PTR[24+rdi]
- adc r12,QWORD PTR[32+rdi]
- adc r13,QWORD PTR[40+rdi]
- adc r14,QWORD PTR[48+rdi]
- adc r15,QWORD PTR[56+rdi]
-
- mov QWORD PTR[rdi],r8
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
- mov QWORD PTR[32+rdi],r12
- mov QWORD PTR[40+rdi],r13
- mov QWORD PTR[48+rdi],r14
- mov QWORD PTR[56+rdi],r15
-
- DB 0F3h,0C3h ;repret
-
-__rsaz_512_subtract ENDP
-
-ALIGN 32
-__rsaz_512_mul PROC PRIVATE
-
- lea rdi,QWORD PTR[8+rsp]
-
- mov rax,QWORD PTR[rsi]
- mul rbx
- mov QWORD PTR[rdi],rax
- mov rax,QWORD PTR[8+rsi]
- mov r8,rdx
-
- mul rbx
- add r8,rax
- mov rax,QWORD PTR[16+rsi]
- mov r9,rdx
- adc r9,0
-
- mul rbx
- add r9,rax
- mov rax,QWORD PTR[24+rsi]
- mov r10,rdx
- adc r10,0
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[32+rsi]
- mov r11,rdx
- adc r11,0
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[40+rsi]
- mov r12,rdx
- adc r12,0
-
- mul rbx
- add r12,rax
- mov rax,QWORD PTR[48+rsi]
- mov r13,rdx
- adc r13,0
-
- mul rbx
- add r13,rax
- mov rax,QWORD PTR[56+rsi]
- mov r14,rdx
- adc r14,0
-
- mul rbx
- add r14,rax
- mov rax,QWORD PTR[rsi]
- mov r15,rdx
- adc r15,0
-
- lea rbp,QWORD PTR[8+rbp]
- lea rdi,QWORD PTR[8+rdi]
-
- mov ecx,7
- jmp $L$oop_mul
-
-ALIGN 32
-$L$oop_mul::
- mov rbx,QWORD PTR[rbp]
- mul rbx
- add r8,rax
- mov rax,QWORD PTR[8+rsi]
- mov QWORD PTR[rdi],r8
- mov r8,rdx
- adc r8,0
-
- mul rbx
- add r9,rax
- mov rax,QWORD PTR[16+rsi]
- adc rdx,0
- add r8,r9
- mov r9,rdx
- adc r9,0
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[24+rsi]
- adc rdx,0
- add r9,r10
- mov r10,rdx
- adc r10,0
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[32+rsi]
- adc rdx,0
- add r10,r11
- mov r11,rdx
- adc r11,0
-
- mul rbx
- add r12,rax
- mov rax,QWORD PTR[40+rsi]
- adc rdx,0
- add r11,r12
- mov r12,rdx
- adc r12,0
-
- mul rbx
- add r13,rax
- mov rax,QWORD PTR[48+rsi]
- adc rdx,0
- add r12,r13
- mov r13,rdx
- adc r13,0
-
- mul rbx
- add r14,rax
- mov rax,QWORD PTR[56+rsi]
- adc rdx,0
- add r13,r14
- mov r14,rdx
- lea rbp,QWORD PTR[8+rbp]
- adc r14,0
-
- mul rbx
- add r15,rax
- mov rax,QWORD PTR[rsi]
- adc rdx,0
- add r14,r15
- mov r15,rdx
- adc r15,0
-
- lea rdi,QWORD PTR[8+rdi]
-
- dec ecx
- jnz $L$oop_mul
-
- mov QWORD PTR[rdi],r8
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
- mov QWORD PTR[32+rdi],r12
- mov QWORD PTR[40+rdi],r13
- mov QWORD PTR[48+rdi],r14
- mov QWORD PTR[56+rdi],r15
-
- DB 0F3h,0C3h ;repret
-
-__rsaz_512_mul ENDP
-
-ALIGN 32
-__rsaz_512_mulx PROC PRIVATE
-
- mulx r8,rbx,QWORD PTR[rsi]
- mov rcx,-6
-
- mulx r9,rax,QWORD PTR[8+rsi]
- mov QWORD PTR[8+rsp],rbx
-
- mulx r10,rbx,QWORD PTR[16+rsi]
- adc r8,rax
-
- mulx r11,rax,QWORD PTR[24+rsi]
- adc r9,rbx
-
- mulx r12,rbx,QWORD PTR[32+rsi]
- adc r10,rax
-
- mulx r13,rax,QWORD PTR[40+rsi]
- adc r11,rbx
-
- mulx r14,rbx,QWORD PTR[48+rsi]
- adc r12,rax
-
- mulx r15,rax,QWORD PTR[56+rsi]
- mov rdx,QWORD PTR[8+rbp]
- adc r13,rbx
- adc r14,rax
- adc r15,0
-
- xor rdi,rdi
- jmp $L$oop_mulx
-
-ALIGN 32
-$L$oop_mulx::
- mov rbx,r8
- mulx r8,rax,QWORD PTR[rsi]
- adcx rbx,rax
- adox r8,r9
-
- mulx r9,rax,QWORD PTR[8+rsi]
- adcx r8,rax
- adox r9,r10
-
- mulx r10,rax,QWORD PTR[16+rsi]
- adcx r9,rax
- adox r10,r11
-
- mulx r11,rax,QWORD PTR[24+rsi]
- adcx r10,rax
- adox r11,r12
-
-DB 03eh,0c4h,062h,0fbh,0f6h,0a6h,020h,000h,000h,000h
- adcx r11,rax
- adox r12,r13
-
- mulx r13,rax,QWORD PTR[40+rsi]
- adcx r12,rax
- adox r13,r14
-
- mulx r14,rax,QWORD PTR[48+rsi]
- adcx r13,rax
- adox r14,r15
-
- mulx r15,rax,QWORD PTR[56+rsi]
- mov rdx,QWORD PTR[64+rcx*8+rbp]
- mov QWORD PTR[((8+64-8))+rcx*8+rsp],rbx
- adcx r14,rax
- adox r15,rdi
- adcx r15,rdi
-
- inc rcx
- jnz $L$oop_mulx
-
- mov rbx,r8
- mulx r8,rax,QWORD PTR[rsi]
- adcx rbx,rax
- adox r8,r9
-
-DB 0c4h,062h,0fbh,0f6h,08eh,008h,000h,000h,000h
- adcx r8,rax
- adox r9,r10
-
-DB 0c4h,062h,0fbh,0f6h,096h,010h,000h,000h,000h
- adcx r9,rax
- adox r10,r11
-
- mulx r11,rax,QWORD PTR[24+rsi]
- adcx r10,rax
- adox r11,r12
-
- mulx r12,rax,QWORD PTR[32+rsi]
- adcx r11,rax
- adox r12,r13
-
- mulx r13,rax,QWORD PTR[40+rsi]
- adcx r12,rax
- adox r13,r14
-
-DB 0c4h,062h,0fbh,0f6h,0b6h,030h,000h,000h,000h
- adcx r13,rax
- adox r14,r15
-
-DB 0c4h,062h,0fbh,0f6h,0beh,038h,000h,000h,000h
- adcx r14,rax
- adox r15,rdi
- adcx r15,rdi
-
- mov QWORD PTR[((8+64-8))+rsp],rbx
- mov QWORD PTR[((8+64))+rsp],r8
- mov QWORD PTR[((8+64+8))+rsp],r9
- mov QWORD PTR[((8+64+16))+rsp],r10
- mov QWORD PTR[((8+64+24))+rsp],r11
- mov QWORD PTR[((8+64+32))+rsp],r12
- mov QWORD PTR[((8+64+40))+rsp],r13
- mov QWORD PTR[((8+64+48))+rsp],r14
- mov QWORD PTR[((8+64+56))+rsp],r15
-
- DB 0F3h,0C3h ;repret
-
-__rsaz_512_mulx ENDP
-PUBLIC rsaz_512_scatter4
-
-ALIGN 16
-rsaz_512_scatter4 PROC PUBLIC
-
- lea rcx,QWORD PTR[r8*8+rcx]
- mov r9d,8
- jmp $L$oop_scatter
-ALIGN 16
-$L$oop_scatter::
- mov rax,QWORD PTR[rdx]
- lea rdx,QWORD PTR[8+rdx]
- mov QWORD PTR[rcx],rax
- lea rcx,QWORD PTR[128+rcx]
- dec r9d
- jnz $L$oop_scatter
- DB 0F3h,0C3h ;repret
-
-rsaz_512_scatter4 ENDP
-
-PUBLIC rsaz_512_gather4
-
-ALIGN 16
-rsaz_512_gather4 PROC PUBLIC
-
-$L$SEH_begin_rsaz_512_gather4::
-DB 048h,081h,0ech,0a8h,000h,000h,000h
-DB 00fh,029h,034h,024h
-DB 00fh,029h,07ch,024h,010h
-DB 044h,00fh,029h,044h,024h,020h
-DB 044h,00fh,029h,04ch,024h,030h
-DB 044h,00fh,029h,054h,024h,040h
-DB 044h,00fh,029h,05ch,024h,050h
-DB 044h,00fh,029h,064h,024h,060h
-DB 044h,00fh,029h,06ch,024h,070h
-DB 044h,00fh,029h,0b4h,024h,080h,0,0,0
-DB 044h,00fh,029h,0bch,024h,090h,0,0,0
- movd xmm8,r8d
- movdqa xmm1,XMMWORD PTR[(($L$inc+16))]
- movdqa xmm0,XMMWORD PTR[$L$inc]
-
- pshufd xmm8,xmm8,0
- movdqa xmm7,xmm1
- movdqa xmm2,xmm1
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm8
- movdqa xmm3,xmm7
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm8
- movdqa xmm4,xmm7
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm8
- movdqa xmm5,xmm7
- paddd xmm4,xmm3
- pcmpeqd xmm3,xmm8
- movdqa xmm6,xmm7
- paddd xmm5,xmm4
- pcmpeqd xmm4,xmm8
- paddd xmm6,xmm5
- pcmpeqd xmm5,xmm8
- paddd xmm7,xmm6
- pcmpeqd xmm6,xmm8
- pcmpeqd xmm7,xmm8
- mov r9d,8
- jmp $L$oop_gather
-ALIGN 16
-$L$oop_gather::
- movdqa xmm8,XMMWORD PTR[rdx]
- movdqa xmm9,XMMWORD PTR[16+rdx]
- movdqa xmm10,XMMWORD PTR[32+rdx]
- movdqa xmm11,XMMWORD PTR[48+rdx]
- pand xmm8,xmm0
- movdqa xmm12,XMMWORD PTR[64+rdx]
- pand xmm9,xmm1
- movdqa xmm13,XMMWORD PTR[80+rdx]
- pand xmm10,xmm2
- movdqa xmm14,XMMWORD PTR[96+rdx]
- pand xmm11,xmm3
- movdqa xmm15,XMMWORD PTR[112+rdx]
- lea rdx,QWORD PTR[128+rdx]
- pand xmm12,xmm4
- pand xmm13,xmm5
- pand xmm14,xmm6
- pand xmm15,xmm7
- por xmm8,xmm10
- por xmm9,xmm11
- por xmm8,xmm12
- por xmm9,xmm13
- por xmm8,xmm14
- por xmm9,xmm15
-
- por xmm8,xmm9
- pshufd xmm9,xmm8,04eh
- por xmm8,xmm9
- movq QWORD PTR[rcx],xmm8
- lea rcx,QWORD PTR[8+rcx]
- dec r9d
- jnz $L$oop_gather
- movaps xmm6,XMMWORD PTR[rsp]
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps xmm10,XMMWORD PTR[64+rsp]
- movaps xmm11,XMMWORD PTR[80+rsp]
- movaps xmm12,XMMWORD PTR[96+rsp]
- movaps xmm13,XMMWORD PTR[112+rsp]
- movaps xmm14,XMMWORD PTR[128+rsp]
- movaps xmm15,XMMWORD PTR[144+rsp]
- add rsp,0a8h
- DB 0F3h,0C3h ;repret
-$L$SEH_end_rsaz_512_gather4::
-
-rsaz_512_gather4 ENDP
-
-ALIGN 64
-$L$inc::
- DD 0,0,1,1
- DD 2,2,2,2
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- lea rax,QWORD PTR[((128+24+48))+rax]
-
- lea rbx,QWORD PTR[$L$mul_gather4_epilogue]
- cmp rbx,r10
- jne $L$se_not_in_mul_gather4
-
- lea rax,QWORD PTR[176+rax]
-
- lea rsi,QWORD PTR[((-48-168))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
-$L$se_not_in_mul_gather4::
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_rsaz_512_sqr
- DD imagerel $L$SEH_end_rsaz_512_sqr
- DD imagerel $L$SEH_info_rsaz_512_sqr
-
- DD imagerel $L$SEH_begin_rsaz_512_mul
- DD imagerel $L$SEH_end_rsaz_512_mul
- DD imagerel $L$SEH_info_rsaz_512_mul
-
- DD imagerel $L$SEH_begin_rsaz_512_mul_gather4
- DD imagerel $L$SEH_end_rsaz_512_mul_gather4
- DD imagerel $L$SEH_info_rsaz_512_mul_gather4
-
- DD imagerel $L$SEH_begin_rsaz_512_mul_scatter4
- DD imagerel $L$SEH_end_rsaz_512_mul_scatter4
- DD imagerel $L$SEH_info_rsaz_512_mul_scatter4
-
- DD imagerel $L$SEH_begin_rsaz_512_mul_by_one
- DD imagerel $L$SEH_end_rsaz_512_mul_by_one
- DD imagerel $L$SEH_info_rsaz_512_mul_by_one
-
- DD imagerel $L$SEH_begin_rsaz_512_gather4
- DD imagerel $L$SEH_end_rsaz_512_gather4
- DD imagerel $L$SEH_info_rsaz_512_gather4
-
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_rsaz_512_sqr::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$sqr_body,imagerel $L$sqr_epilogue
-$L$SEH_info_rsaz_512_mul::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$mul_body,imagerel $L$mul_epilogue
-$L$SEH_info_rsaz_512_mul_gather4::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$mul_gather4_body,imagerel $L$mul_gather4_epilogue
-$L$SEH_info_rsaz_512_mul_scatter4::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$mul_scatter4_body,imagerel $L$mul_scatter4_epilogue
-$L$SEH_info_rsaz_512_mul_by_one::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$mul_by_one_body,imagerel $L$mul_by_one_epilogue
-$L$SEH_info_rsaz_512_gather4::
-DB 001h,046h,016h,000h
-DB 046h,0f8h,009h,000h
-DB 03dh,0e8h,008h,000h
-DB 034h,0d8h,007h,000h
-DB 02eh,0c8h,006h,000h
-DB 028h,0b8h,005h,000h
-DB 022h,0a8h,004h,000h
-DB 01ch,098h,003h,000h
-DB 016h,088h,002h,000h
-DB 010h,078h,001h,000h
-DB 00bh,068h,000h,000h
-DB 007h,001h,015h,000h
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC rsaz_512_sqr
+
+ALIGN 32
+rsaz_512_sqr PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_rsaz_512_sqr::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ sub rsp,128+24
+
+$L$sqr_body::
+DB 102,72,15,110,202
+ mov rdx,QWORD PTR[rsi]
+ mov rax,QWORD PTR[8+rsi]
+ mov QWORD PTR[128+rsp],rcx
+ mov r11d,080100h
+ and r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ cmp r11d,080100h
+ je $L$oop_sqrx
+ jmp $L$oop_sqr
+
+ALIGN 32
+$L$oop_sqr::
+ mov DWORD PTR[((128+8))+rsp],r8d
+
+ mov rbx,rdx
+ mov rbp,rax
+ mul rdx
+ mov r8,rax
+ mov rax,QWORD PTR[16+rsi]
+ mov r9,rdx
+
+ mul rbx
+ add r9,rax
+ mov rax,QWORD PTR[24+rsi]
+ mov r10,rdx
+ adc r10,0
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[32+rsi]
+ mov r11,rdx
+ adc r11,0
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[40+rsi]
+ mov r12,rdx
+ adc r12,0
+
+ mul rbx
+ add r12,rax
+ mov rax,QWORD PTR[48+rsi]
+ mov r13,rdx
+ adc r13,0
+
+ mul rbx
+ add r13,rax
+ mov rax,QWORD PTR[56+rsi]
+ mov r14,rdx
+ adc r14,0
+
+ mul rbx
+ add r14,rax
+ mov rax,rbx
+ adc rdx,0
+
+ xor rcx,rcx
+ add r8,r8
+ mov r15,rdx
+ adc rcx,0
+
+ mul rax
+ add rdx,r8
+ adc rcx,0
+
+ mov QWORD PTR[rsp],rax
+ mov QWORD PTR[8+rsp],rdx
+
+
+ mov rax,QWORD PTR[16+rsi]
+ mul rbp
+ add r10,rax
+ mov rax,QWORD PTR[24+rsi]
+ mov rbx,rdx
+ adc rbx,0
+
+ mul rbp
+ add r11,rax
+ mov rax,QWORD PTR[32+rsi]
+ adc rdx,0
+ add r11,rbx
+ mov rbx,rdx
+ adc rbx,0
+
+ mul rbp
+ add r12,rax
+ mov rax,QWORD PTR[40+rsi]
+ adc rdx,0
+ add r12,rbx
+ mov rbx,rdx
+ adc rbx,0
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[48+rsi]
+ adc rdx,0
+ add r13,rbx
+ mov rbx,rdx
+ adc rbx,0
+
+ mul rbp
+ add r14,rax
+ mov rax,QWORD PTR[56+rsi]
+ adc rdx,0
+ add r14,rbx
+ mov rbx,rdx
+ adc rbx,0
+
+ mul rbp
+ add r15,rax
+ mov rax,rbp
+ adc rdx,0
+ add r15,rbx
+ adc rdx,0
+
+ xor rbx,rbx
+ add r9,r9
+ mov r8,rdx
+ adc r10,r10
+ adc rbx,0
+
+ mul rax
+
+ add rax,rcx
+ mov rbp,QWORD PTR[16+rsi]
+ add r9,rax
+ mov rax,QWORD PTR[24+rsi]
+ adc r10,rdx
+ adc rbx,0
+
+ mov QWORD PTR[16+rsp],r9
+ mov QWORD PTR[24+rsp],r10
+
+
+ mul rbp
+ add r12,rax
+ mov rax,QWORD PTR[32+rsi]
+ mov rcx,rdx
+ adc rcx,0
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[40+rsi]
+ adc rdx,0
+ add r13,rcx
+ mov rcx,rdx
+ adc rcx,0
+
+ mul rbp
+ add r14,rax
+ mov rax,QWORD PTR[48+rsi]
+ adc rdx,0
+ add r14,rcx
+ mov rcx,rdx
+ adc rcx,0
+
+ mul rbp
+ add r15,rax
+ mov rax,QWORD PTR[56+rsi]
+ adc rdx,0
+ add r15,rcx
+ mov rcx,rdx
+ adc rcx,0
+
+ mul rbp
+ add r8,rax
+ mov rax,rbp
+ adc rdx,0
+ add r8,rcx
+ adc rdx,0
+
+ xor rcx,rcx
+ add r11,r11
+ mov r9,rdx
+ adc r12,r12
+ adc rcx,0
+
+ mul rax
+
+ add rax,rbx
+ mov r10,QWORD PTR[24+rsi]
+ add r11,rax
+ mov rax,QWORD PTR[32+rsi]
+ adc r12,rdx
+ adc rcx,0
+
+ mov QWORD PTR[32+rsp],r11
+ mov QWORD PTR[40+rsp],r12
+
+
+ mov r11,rax
+ mul r10
+ add r14,rax
+ mov rax,QWORD PTR[40+rsi]
+ mov rbx,rdx
+ adc rbx,0
+
+ mov r12,rax
+ mul r10
+ add r15,rax
+ mov rax,QWORD PTR[48+rsi]
+ adc rdx,0
+ add r15,rbx
+ mov rbx,rdx
+ adc rbx,0
+
+ mov rbp,rax
+ mul r10
+ add r8,rax
+ mov rax,QWORD PTR[56+rsi]
+ adc rdx,0
+ add r8,rbx
+ mov rbx,rdx
+ adc rbx,0
+
+ mul r10
+ add r9,rax
+ mov rax,r10
+ adc rdx,0
+ add r9,rbx
+ adc rdx,0
+
+ xor rbx,rbx
+ add r13,r13
+ mov r10,rdx
+ adc r14,r14
+ adc rbx,0
+
+ mul rax
+
+ add rax,rcx
+ add r13,rax
+ mov rax,r12
+ adc r14,rdx
+ adc rbx,0
+
+ mov QWORD PTR[48+rsp],r13
+ mov QWORD PTR[56+rsp],r14
+
+
+ mul r11
+ add r8,rax
+ mov rax,rbp
+ mov rcx,rdx
+ adc rcx,0
+
+ mul r11
+ add r9,rax
+ mov rax,QWORD PTR[56+rsi]
+ adc rdx,0
+ add r9,rcx
+ mov rcx,rdx
+ adc rcx,0
+
+ mov r14,rax
+ mul r11
+ add r10,rax
+ mov rax,r11
+ adc rdx,0
+ add r10,rcx
+ adc rdx,0
+
+ xor rcx,rcx
+ add r15,r15
+ mov r11,rdx
+ adc r8,r8
+ adc rcx,0
+
+ mul rax
+
+ add rax,rbx
+ add r15,rax
+ mov rax,rbp
+ adc r8,rdx
+ adc rcx,0
+
+ mov QWORD PTR[64+rsp],r15
+ mov QWORD PTR[72+rsp],r8
+
+
+ mul r12
+ add r10,rax
+ mov rax,r14
+ mov rbx,rdx
+ adc rbx,0
+
+ mul r12
+ add r11,rax
+ mov rax,r12
+ adc rdx,0
+ add r11,rbx
+ adc rdx,0
+
+ xor rbx,rbx
+ add r9,r9
+ mov r12,rdx
+ adc r10,r10
+ adc rbx,0
+
+ mul rax
+
+ add rax,rcx
+ add r9,rax
+ mov rax,r14
+ adc r10,rdx
+ adc rbx,0
+
+ mov QWORD PTR[80+rsp],r9
+ mov QWORD PTR[88+rsp],r10
+
+
+ mul rbp
+ add r12,rax
+ mov rax,rbp
+ adc rdx,0
+
+ xor rcx,rcx
+ add r11,r11
+ mov r13,rdx
+ adc r12,r12
+ adc rcx,0
+
+ mul rax
+
+ add rax,rbx
+ add r11,rax
+ mov rax,r14
+ adc r12,rdx
+ adc rcx,0
+
+ mov QWORD PTR[96+rsp],r11
+ mov QWORD PTR[104+rsp],r12
+
+
+ xor rbx,rbx
+ add r13,r13
+ adc rbx,0
+
+ mul rax
+
+ add rax,rcx
+ add rax,r13
+ adc rdx,rbx
+
+ mov r8,QWORD PTR[rsp]
+ mov r9,QWORD PTR[8+rsp]
+ mov r10,QWORD PTR[16+rsp]
+ mov r11,QWORD PTR[24+rsp]
+ mov r12,QWORD PTR[32+rsp]
+ mov r13,QWORD PTR[40+rsp]
+ mov r14,QWORD PTR[48+rsp]
+ mov r15,QWORD PTR[56+rsp]
+DB 102,72,15,126,205
+
+ mov QWORD PTR[112+rsp],rax
+ mov QWORD PTR[120+rsp],rdx
+
+ call __rsaz_512_reduce
+
+ add r8,QWORD PTR[64+rsp]
+ adc r9,QWORD PTR[72+rsp]
+ adc r10,QWORD PTR[80+rsp]
+ adc r11,QWORD PTR[88+rsp]
+ adc r12,QWORD PTR[96+rsp]
+ adc r13,QWORD PTR[104+rsp]
+ adc r14,QWORD PTR[112+rsp]
+ adc r15,QWORD PTR[120+rsp]
+ sbb rcx,rcx
+
+ call __rsaz_512_subtract
+
+ mov rdx,r8
+ mov rax,r9
+ mov r8d,DWORD PTR[((128+8))+rsp]
+ mov rsi,rdi
+
+ dec r8d
+ jnz $L$oop_sqr
+ jmp $L$sqr_tail
+
+ALIGN 32
+$L$oop_sqrx::
+ mov DWORD PTR[((128+8))+rsp],r8d
+DB 102,72,15,110,199
+
+ mulx r9,r8,rax
+ mov rbx,rax
+
+ mulx r10,rcx,QWORD PTR[16+rsi]
+ xor rbp,rbp
+
+ mulx r11,rax,QWORD PTR[24+rsi]
+ adcx r9,rcx
+
+DB 0c4h,062h,0f3h,0f6h,0a6h,020h,000h,000h,000h
+ adcx r10,rax
+
+DB 0c4h,062h,0fbh,0f6h,0aeh,028h,000h,000h,000h
+ adcx r11,rcx
+
+ mulx r14,rcx,QWORD PTR[48+rsi]
+ adcx r12,rax
+ adcx r13,rcx
+
+ mulx r15,rax,QWORD PTR[56+rsi]
+ adcx r14,rax
+ adcx r15,rbp
+
+ mulx rdi,rax,rdx
+ mov rdx,rbx
+ xor rcx,rcx
+ adox r8,r8
+ adcx r8,rdi
+ adox rcx,rbp
+ adcx rcx,rbp
+
+ mov QWORD PTR[rsp],rax
+ mov QWORD PTR[8+rsp],r8
+
+
+DB 0c4h,0e2h,0fbh,0f6h,09eh,010h,000h,000h,000h
+ adox r10,rax
+ adcx r11,rbx
+
+ mulx r8,rdi,QWORD PTR[24+rsi]
+ adox r11,rdi
+DB 066h
+ adcx r12,r8
+
+ mulx rbx,rax,QWORD PTR[32+rsi]
+ adox r12,rax
+ adcx r13,rbx
+
+ mulx r8,rdi,QWORD PTR[40+rsi]
+ adox r13,rdi
+ adcx r14,r8
+
+DB 0c4h,0e2h,0fbh,0f6h,09eh,030h,000h,000h,000h
+ adox r14,rax
+ adcx r15,rbx
+
+DB 0c4h,062h,0c3h,0f6h,086h,038h,000h,000h,000h
+ adox r15,rdi
+ adcx r8,rbp
+ mulx rdi,rax,rdx
+ adox r8,rbp
+DB 048h,08bh,096h,010h,000h,000h,000h
+
+ xor rbx,rbx
+ adox r9,r9
+
+ adcx rax,rcx
+ adox r10,r10
+ adcx r9,rax
+ adox rbx,rbp
+ adcx r10,rdi
+ adcx rbx,rbp
+
+ mov QWORD PTR[16+rsp],r9
+DB 04ch,089h,094h,024h,018h,000h,000h,000h
+
+
+ mulx r9,rdi,QWORD PTR[24+rsi]
+ adox r12,rdi
+ adcx r13,r9
+
+ mulx rcx,rax,QWORD PTR[32+rsi]
+ adox r13,rax
+ adcx r14,rcx
+
+DB 0c4h,062h,0c3h,0f6h,08eh,028h,000h,000h,000h
+ adox r14,rdi
+ adcx r15,r9
+
+DB 0c4h,0e2h,0fbh,0f6h,08eh,030h,000h,000h,000h
+ adox r15,rax
+ adcx r8,rcx
+
+ mulx r9,rdi,QWORD PTR[56+rsi]
+ adox r8,rdi
+ adcx r9,rbp
+ mulx rdi,rax,rdx
+ adox r9,rbp
+ mov rdx,QWORD PTR[24+rsi]
+
+ xor rcx,rcx
+ adox r11,r11
+
+ adcx rax,rbx
+ adox r12,r12
+ adcx r11,rax
+ adox rcx,rbp
+ adcx r12,rdi
+ adcx rcx,rbp
+
+ mov QWORD PTR[32+rsp],r11
+ mov QWORD PTR[40+rsp],r12
+
+
+ mulx rbx,rax,QWORD PTR[32+rsi]
+ adox r14,rax
+ adcx r15,rbx
+
+ mulx r10,rdi,QWORD PTR[40+rsi]
+ adox r15,rdi
+ adcx r8,r10
+
+ mulx rbx,rax,QWORD PTR[48+rsi]
+ adox r8,rax
+ adcx r9,rbx
+
+ mulx r10,rdi,QWORD PTR[56+rsi]
+ adox r9,rdi
+ adcx r10,rbp
+ mulx rdi,rax,rdx
+ adox r10,rbp
+ mov rdx,QWORD PTR[32+rsi]
+
+ xor rbx,rbx
+ adox r13,r13
+
+ adcx rax,rcx
+ adox r14,r14
+ adcx r13,rax
+ adox rbx,rbp
+ adcx r14,rdi
+ adcx rbx,rbp
+
+ mov QWORD PTR[48+rsp],r13
+ mov QWORD PTR[56+rsp],r14
+
+
+ mulx r11,rdi,QWORD PTR[40+rsi]
+ adox r8,rdi
+ adcx r9,r11
+
+ mulx rcx,rax,QWORD PTR[48+rsi]
+ adox r9,rax
+ adcx r10,rcx
+
+ mulx r11,rdi,QWORD PTR[56+rsi]
+ adox r10,rdi
+ adcx r11,rbp
+ mulx rdi,rax,rdx
+ mov rdx,QWORD PTR[40+rsi]
+ adox r11,rbp
+
+ xor rcx,rcx
+ adox r15,r15
+
+ adcx rax,rbx
+ adox r8,r8
+ adcx r15,rax
+ adox rcx,rbp
+ adcx r8,rdi
+ adcx rcx,rbp
+
+ mov QWORD PTR[64+rsp],r15
+ mov QWORD PTR[72+rsp],r8
+
+
+DB 0c4h,0e2h,0fbh,0f6h,09eh,030h,000h,000h,000h
+ adox r10,rax
+ adcx r11,rbx
+
+DB 0c4h,062h,0c3h,0f6h,0a6h,038h,000h,000h,000h
+ adox r11,rdi
+ adcx r12,rbp
+ mulx rdi,rax,rdx
+ adox r12,rbp
+ mov rdx,QWORD PTR[48+rsi]
+
+ xor rbx,rbx
+ adox r9,r9
+
+ adcx rax,rcx
+ adox r10,r10
+ adcx r9,rax
+ adcx r10,rdi
+ adox rbx,rbp
+ adcx rbx,rbp
+
+ mov QWORD PTR[80+rsp],r9
+ mov QWORD PTR[88+rsp],r10
+
+
+DB 0c4h,062h,0fbh,0f6h,0aeh,038h,000h,000h,000h
+ adox r12,rax
+ adox r13,rbp
+
+ mulx rdi,rax,rdx
+ xor rcx,rcx
+ mov rdx,QWORD PTR[56+rsi]
+ adox r11,r11
+
+ adcx rax,rbx
+ adox r12,r12
+ adcx r11,rax
+ adox rcx,rbp
+ adcx r12,rdi
+ adcx rcx,rbp
+
+DB 04ch,089h,09ch,024h,060h,000h,000h,000h
+DB 04ch,089h,0a4h,024h,068h,000h,000h,000h
+
+
+ mulx rdx,rax,rdx
+ xor rbx,rbx
+ adox r13,r13
+
+ adcx rax,rcx
+ adox rbx,rbp
+ adcx rax,r13
+ adcx rbx,rdx
+
+DB 102,72,15,126,199
+DB 102,72,15,126,205
+
+ mov rdx,QWORD PTR[128+rsp]
+ mov r8,QWORD PTR[rsp]
+ mov r9,QWORD PTR[8+rsp]
+ mov r10,QWORD PTR[16+rsp]
+ mov r11,QWORD PTR[24+rsp]
+ mov r12,QWORD PTR[32+rsp]
+ mov r13,QWORD PTR[40+rsp]
+ mov r14,QWORD PTR[48+rsp]
+ mov r15,QWORD PTR[56+rsp]
+
+ mov QWORD PTR[112+rsp],rax
+ mov QWORD PTR[120+rsp],rbx
+
+ call __rsaz_512_reducex
+
+ add r8,QWORD PTR[64+rsp]
+ adc r9,QWORD PTR[72+rsp]
+ adc r10,QWORD PTR[80+rsp]
+ adc r11,QWORD PTR[88+rsp]
+ adc r12,QWORD PTR[96+rsp]
+ adc r13,QWORD PTR[104+rsp]
+ adc r14,QWORD PTR[112+rsp]
+ adc r15,QWORD PTR[120+rsp]
+ sbb rcx,rcx
+
+ call __rsaz_512_subtract
+
+ mov rdx,r8
+ mov rax,r9
+ mov r8d,DWORD PTR[((128+8))+rsp]
+ mov rsi,rdi
+
+ dec r8d
+ jnz $L$oop_sqrx
+
+$L$sqr_tail::
+
+ lea rax,QWORD PTR[((128+24+48))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$sqr_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_rsaz_512_sqr::
+rsaz_512_sqr ENDP
+PUBLIC rsaz_512_mul
+
+ALIGN 32
+rsaz_512_mul PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_rsaz_512_mul::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ sub rsp,128+24
+
+$L$mul_body::
+DB 102,72,15,110,199
+DB 102,72,15,110,201
+ mov QWORD PTR[128+rsp],r8
+ mov r11d,080100h
+ and r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ cmp r11d,080100h
+ je $L$mulx
+ mov rbx,QWORD PTR[rdx]
+ mov rbp,rdx
+ call __rsaz_512_mul
+
+DB 102,72,15,126,199
+DB 102,72,15,126,205
+
+ mov r8,QWORD PTR[rsp]
+ mov r9,QWORD PTR[8+rsp]
+ mov r10,QWORD PTR[16+rsp]
+ mov r11,QWORD PTR[24+rsp]
+ mov r12,QWORD PTR[32+rsp]
+ mov r13,QWORD PTR[40+rsp]
+ mov r14,QWORD PTR[48+rsp]
+ mov r15,QWORD PTR[56+rsp]
+
+ call __rsaz_512_reduce
+ jmp $L$mul_tail
+
+ALIGN 32
+$L$mulx::
+ mov rbp,rdx
+ mov rdx,QWORD PTR[rdx]
+ call __rsaz_512_mulx
+
+DB 102,72,15,126,199
+DB 102,72,15,126,205
+
+ mov rdx,QWORD PTR[128+rsp]
+ mov r8,QWORD PTR[rsp]
+ mov r9,QWORD PTR[8+rsp]
+ mov r10,QWORD PTR[16+rsp]
+ mov r11,QWORD PTR[24+rsp]
+ mov r12,QWORD PTR[32+rsp]
+ mov r13,QWORD PTR[40+rsp]
+ mov r14,QWORD PTR[48+rsp]
+ mov r15,QWORD PTR[56+rsp]
+
+ call __rsaz_512_reducex
+$L$mul_tail::
+ add r8,QWORD PTR[64+rsp]
+ adc r9,QWORD PTR[72+rsp]
+ adc r10,QWORD PTR[80+rsp]
+ adc r11,QWORD PTR[88+rsp]
+ adc r12,QWORD PTR[96+rsp]
+ adc r13,QWORD PTR[104+rsp]
+ adc r14,QWORD PTR[112+rsp]
+ adc r15,QWORD PTR[120+rsp]
+ sbb rcx,rcx
+
+ call __rsaz_512_subtract
+
+ lea rax,QWORD PTR[((128+24+48))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$mul_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_rsaz_512_mul::
+rsaz_512_mul ENDP
+PUBLIC rsaz_512_mul_gather4
+
+ALIGN 32
+rsaz_512_mul_gather4 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_rsaz_512_mul_gather4::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ sub rsp,328
+
+ movaps XMMWORD PTR[160+rsp],xmm6
+ movaps XMMWORD PTR[176+rsp],xmm7
+ movaps XMMWORD PTR[192+rsp],xmm8
+ movaps XMMWORD PTR[208+rsp],xmm9
+ movaps XMMWORD PTR[224+rsp],xmm10
+ movaps XMMWORD PTR[240+rsp],xmm11
+ movaps XMMWORD PTR[256+rsp],xmm12
+ movaps XMMWORD PTR[272+rsp],xmm13
+ movaps XMMWORD PTR[288+rsp],xmm14
+ movaps XMMWORD PTR[304+rsp],xmm15
+$L$mul_gather4_body::
+ movd xmm8,r9d
+ movdqa xmm1,XMMWORD PTR[(($L$inc+16))]
+ movdqa xmm0,XMMWORD PTR[$L$inc]
+
+ pshufd xmm8,xmm8,0
+ movdqa xmm7,xmm1
+ movdqa xmm2,xmm1
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm8
+ movdqa xmm3,xmm7
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm8
+ movdqa xmm4,xmm7
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm8
+ movdqa xmm5,xmm7
+ paddd xmm4,xmm3
+ pcmpeqd xmm3,xmm8
+ movdqa xmm6,xmm7
+ paddd xmm5,xmm4
+ pcmpeqd xmm4,xmm8
+ paddd xmm6,xmm5
+ pcmpeqd xmm5,xmm8
+ paddd xmm7,xmm6
+ pcmpeqd xmm6,xmm8
+ pcmpeqd xmm7,xmm8
+
+ movdqa xmm8,XMMWORD PTR[rdx]
+ movdqa xmm9,XMMWORD PTR[16+rdx]
+ movdqa xmm10,XMMWORD PTR[32+rdx]
+ movdqa xmm11,XMMWORD PTR[48+rdx]
+ pand xmm8,xmm0
+ movdqa xmm12,XMMWORD PTR[64+rdx]
+ pand xmm9,xmm1
+ movdqa xmm13,XMMWORD PTR[80+rdx]
+ pand xmm10,xmm2
+ movdqa xmm14,XMMWORD PTR[96+rdx]
+ pand xmm11,xmm3
+ movdqa xmm15,XMMWORD PTR[112+rdx]
+ lea rbp,QWORD PTR[128+rdx]
+ pand xmm12,xmm4
+ pand xmm13,xmm5
+ pand xmm14,xmm6
+ pand xmm15,xmm7
+ por xmm8,xmm10
+ por xmm9,xmm11
+ por xmm8,xmm12
+ por xmm9,xmm13
+ por xmm8,xmm14
+ por xmm9,xmm15
+
+ por xmm8,xmm9
+ pshufd xmm9,xmm8,04eh
+ por xmm8,xmm9
+ mov r11d,080100h
+ and r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ cmp r11d,080100h
+ je $L$mulx_gather
+DB 102,76,15,126,195
+
+ mov QWORD PTR[128+rsp],r8
+ mov QWORD PTR[((128+8))+rsp],rdi
+ mov QWORD PTR[((128+16))+rsp],rcx
+
+ mov rax,QWORD PTR[rsi]
+ mov rcx,QWORD PTR[8+rsi]
+ mul rbx
+ mov QWORD PTR[rsp],rax
+ mov rax,rcx
+ mov r8,rdx
+
+ mul rbx
+ add r8,rax
+ mov rax,QWORD PTR[16+rsi]
+ mov r9,rdx
+ adc r9,0
+
+ mul rbx
+ add r9,rax
+ mov rax,QWORD PTR[24+rsi]
+ mov r10,rdx
+ adc r10,0
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[32+rsi]
+ mov r11,rdx
+ adc r11,0
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[40+rsi]
+ mov r12,rdx
+ adc r12,0
+
+ mul rbx
+ add r12,rax
+ mov rax,QWORD PTR[48+rsi]
+ mov r13,rdx
+ adc r13,0
+
+ mul rbx
+ add r13,rax
+ mov rax,QWORD PTR[56+rsi]
+ mov r14,rdx
+ adc r14,0
+
+ mul rbx
+ add r14,rax
+ mov rax,QWORD PTR[rsi]
+ mov r15,rdx
+ adc r15,0
+
+ lea rdi,QWORD PTR[8+rsp]
+ mov ecx,7
+ jmp $L$oop_mul_gather
+
+ALIGN 32
+$L$oop_mul_gather::
+ movdqa xmm8,XMMWORD PTR[rbp]
+ movdqa xmm9,XMMWORD PTR[16+rbp]
+ movdqa xmm10,XMMWORD PTR[32+rbp]
+ movdqa xmm11,XMMWORD PTR[48+rbp]
+ pand xmm8,xmm0
+ movdqa xmm12,XMMWORD PTR[64+rbp]
+ pand xmm9,xmm1
+ movdqa xmm13,XMMWORD PTR[80+rbp]
+ pand xmm10,xmm2
+ movdqa xmm14,XMMWORD PTR[96+rbp]
+ pand xmm11,xmm3
+ movdqa xmm15,XMMWORD PTR[112+rbp]
+ lea rbp,QWORD PTR[128+rbp]
+ pand xmm12,xmm4
+ pand xmm13,xmm5
+ pand xmm14,xmm6
+ pand xmm15,xmm7
+ por xmm8,xmm10
+ por xmm9,xmm11
+ por xmm8,xmm12
+ por xmm9,xmm13
+ por xmm8,xmm14
+ por xmm9,xmm15
+
+ por xmm8,xmm9
+ pshufd xmm9,xmm8,04eh
+ por xmm8,xmm9
+DB 102,76,15,126,195
+
+ mul rbx
+ add r8,rax
+ mov rax,QWORD PTR[8+rsi]
+ mov QWORD PTR[rdi],r8
+ mov r8,rdx
+ adc r8,0
+
+ mul rbx
+ add r9,rax
+ mov rax,QWORD PTR[16+rsi]
+ adc rdx,0
+ add r8,r9
+ mov r9,rdx
+ adc r9,0
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[24+rsi]
+ adc rdx,0
+ add r9,r10
+ mov r10,rdx
+ adc r10,0
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[32+rsi]
+ adc rdx,0
+ add r10,r11
+ mov r11,rdx
+ adc r11,0
+
+ mul rbx
+ add r12,rax
+ mov rax,QWORD PTR[40+rsi]
+ adc rdx,0
+ add r11,r12
+ mov r12,rdx
+ adc r12,0
+
+ mul rbx
+ add r13,rax
+ mov rax,QWORD PTR[48+rsi]
+ adc rdx,0
+ add r12,r13
+ mov r13,rdx
+ adc r13,0
+
+ mul rbx
+ add r14,rax
+ mov rax,QWORD PTR[56+rsi]
+ adc rdx,0
+ add r13,r14
+ mov r14,rdx
+ adc r14,0
+
+ mul rbx
+ add r15,rax
+ mov rax,QWORD PTR[rsi]
+ adc rdx,0
+ add r14,r15
+ mov r15,rdx
+ adc r15,0
+
+ lea rdi,QWORD PTR[8+rdi]
+
+ dec ecx
+ jnz $L$oop_mul_gather
+
+ mov QWORD PTR[rdi],r8
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+ mov QWORD PTR[32+rdi],r12
+ mov QWORD PTR[40+rdi],r13
+ mov QWORD PTR[48+rdi],r14
+ mov QWORD PTR[56+rdi],r15
+
+ mov rdi,QWORD PTR[((128+8))+rsp]
+ mov rbp,QWORD PTR[((128+16))+rsp]
+
+ mov r8,QWORD PTR[rsp]
+ mov r9,QWORD PTR[8+rsp]
+ mov r10,QWORD PTR[16+rsp]
+ mov r11,QWORD PTR[24+rsp]
+ mov r12,QWORD PTR[32+rsp]
+ mov r13,QWORD PTR[40+rsp]
+ mov r14,QWORD PTR[48+rsp]
+ mov r15,QWORD PTR[56+rsp]
+
+ call __rsaz_512_reduce
+ jmp $L$mul_gather_tail
+
+ALIGN 32
+$L$mulx_gather::
+DB 102,76,15,126,194
+
+ mov QWORD PTR[128+rsp],r8
+ mov QWORD PTR[((128+8))+rsp],rdi
+ mov QWORD PTR[((128+16))+rsp],rcx
+
+ mulx r8,rbx,QWORD PTR[rsi]
+ mov QWORD PTR[rsp],rbx
+ xor edi,edi
+
+ mulx r9,rax,QWORD PTR[8+rsi]
+
+ mulx r10,rbx,QWORD PTR[16+rsi]
+ adcx r8,rax
+
+ mulx r11,rax,QWORD PTR[24+rsi]
+ adcx r9,rbx
+
+ mulx r12,rbx,QWORD PTR[32+rsi]
+ adcx r10,rax
+
+ mulx r13,rax,QWORD PTR[40+rsi]
+ adcx r11,rbx
+
+ mulx r14,rbx,QWORD PTR[48+rsi]
+ adcx r12,rax
+
+ mulx r15,rax,QWORD PTR[56+rsi]
+ adcx r13,rbx
+ adcx r14,rax
+DB 067h
+ mov rbx,r8
+ adcx r15,rdi
+
+ mov rcx,-7
+ jmp $L$oop_mulx_gather
+
+ALIGN 32
+$L$oop_mulx_gather::
+ movdqa xmm8,XMMWORD PTR[rbp]
+ movdqa xmm9,XMMWORD PTR[16+rbp]
+ movdqa xmm10,XMMWORD PTR[32+rbp]
+ movdqa xmm11,XMMWORD PTR[48+rbp]
+ pand xmm8,xmm0
+ movdqa xmm12,XMMWORD PTR[64+rbp]
+ pand xmm9,xmm1
+ movdqa xmm13,XMMWORD PTR[80+rbp]
+ pand xmm10,xmm2
+ movdqa xmm14,XMMWORD PTR[96+rbp]
+ pand xmm11,xmm3
+ movdqa xmm15,XMMWORD PTR[112+rbp]
+ lea rbp,QWORD PTR[128+rbp]
+ pand xmm12,xmm4
+ pand xmm13,xmm5
+ pand xmm14,xmm6
+ pand xmm15,xmm7
+ por xmm8,xmm10
+ por xmm9,xmm11
+ por xmm8,xmm12
+ por xmm9,xmm13
+ por xmm8,xmm14
+ por xmm9,xmm15
+
+ por xmm8,xmm9
+ pshufd xmm9,xmm8,04eh
+ por xmm8,xmm9
+DB 102,76,15,126,194
+
+DB 0c4h,062h,0fbh,0f6h,086h,000h,000h,000h,000h
+ adcx rbx,rax
+ adox r8,r9
+
+ mulx r9,rax,QWORD PTR[8+rsi]
+ adcx r8,rax
+ adox r9,r10
+
+ mulx r10,rax,QWORD PTR[16+rsi]
+ adcx r9,rax
+ adox r10,r11
+
+DB 0c4h,062h,0fbh,0f6h,09eh,018h,000h,000h,000h
+ adcx r10,rax
+ adox r11,r12
+
+ mulx r12,rax,QWORD PTR[32+rsi]
+ adcx r11,rax
+ adox r12,r13
+
+ mulx r13,rax,QWORD PTR[40+rsi]
+ adcx r12,rax
+ adox r13,r14
+
+DB 0c4h,062h,0fbh,0f6h,0b6h,030h,000h,000h,000h
+ adcx r13,rax
+DB 067h
+ adox r14,r15
+
+ mulx r15,rax,QWORD PTR[56+rsi]
+ mov QWORD PTR[64+rcx*8+rsp],rbx
+ adcx r14,rax
+ adox r15,rdi
+ mov rbx,r8
+ adcx r15,rdi
+
+ inc rcx
+ jnz $L$oop_mulx_gather
+
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[((64+8))+rsp],r9
+ mov QWORD PTR[((64+16))+rsp],r10
+ mov QWORD PTR[((64+24))+rsp],r11
+ mov QWORD PTR[((64+32))+rsp],r12
+ mov QWORD PTR[((64+40))+rsp],r13
+ mov QWORD PTR[((64+48))+rsp],r14
+ mov QWORD PTR[((64+56))+rsp],r15
+
+ mov rdx,QWORD PTR[128+rsp]
+ mov rdi,QWORD PTR[((128+8))+rsp]
+ mov rbp,QWORD PTR[((128+16))+rsp]
+
+ mov r8,QWORD PTR[rsp]
+ mov r9,QWORD PTR[8+rsp]
+ mov r10,QWORD PTR[16+rsp]
+ mov r11,QWORD PTR[24+rsp]
+ mov r12,QWORD PTR[32+rsp]
+ mov r13,QWORD PTR[40+rsp]
+ mov r14,QWORD PTR[48+rsp]
+ mov r15,QWORD PTR[56+rsp]
+
+ call __rsaz_512_reducex
+
+$L$mul_gather_tail::
+ add r8,QWORD PTR[64+rsp]
+ adc r9,QWORD PTR[72+rsp]
+ adc r10,QWORD PTR[80+rsp]
+ adc r11,QWORD PTR[88+rsp]
+ adc r12,QWORD PTR[96+rsp]
+ adc r13,QWORD PTR[104+rsp]
+ adc r14,QWORD PTR[112+rsp]
+ adc r15,QWORD PTR[120+rsp]
+ sbb rcx,rcx
+
+ call __rsaz_512_subtract
+
+ lea rax,QWORD PTR[((128+24+48))+rsp]
+ movaps xmm6,XMMWORD PTR[((160-200))+rax]
+ movaps xmm7,XMMWORD PTR[((176-200))+rax]
+ movaps xmm8,XMMWORD PTR[((192-200))+rax]
+ movaps xmm9,XMMWORD PTR[((208-200))+rax]
+ movaps xmm10,XMMWORD PTR[((224-200))+rax]
+ movaps xmm11,XMMWORD PTR[((240-200))+rax]
+ movaps xmm12,XMMWORD PTR[((256-200))+rax]
+ movaps xmm13,XMMWORD PTR[((272-200))+rax]
+ movaps xmm14,XMMWORD PTR[((288-200))+rax]
+ movaps xmm15,XMMWORD PTR[((304-200))+rax]
+ lea rax,QWORD PTR[176+rax]
+
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$mul_gather4_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_rsaz_512_mul_gather4::
+rsaz_512_mul_gather4 ENDP
+PUBLIC rsaz_512_mul_scatter4
+
+ALIGN 32
+rsaz_512_mul_scatter4 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_rsaz_512_mul_scatter4::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ mov r9d,r9d
+ sub rsp,128+24
+
+$L$mul_scatter4_body::
+ lea r8,QWORD PTR[r9*8+r8]
+DB 102,72,15,110,199
+DB 102,72,15,110,202
+DB 102,73,15,110,208
+ mov QWORD PTR[128+rsp],rcx
+
+ mov rbp,rdi
+ mov r11d,080100h
+ and r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ cmp r11d,080100h
+ je $L$mulx_scatter
+ mov rbx,QWORD PTR[rdi]
+ call __rsaz_512_mul
+
+DB 102,72,15,126,199
+DB 102,72,15,126,205
+
+ mov r8,QWORD PTR[rsp]
+ mov r9,QWORD PTR[8+rsp]
+ mov r10,QWORD PTR[16+rsp]
+ mov r11,QWORD PTR[24+rsp]
+ mov r12,QWORD PTR[32+rsp]
+ mov r13,QWORD PTR[40+rsp]
+ mov r14,QWORD PTR[48+rsp]
+ mov r15,QWORD PTR[56+rsp]
+
+ call __rsaz_512_reduce
+ jmp $L$mul_scatter_tail
+
+ALIGN 32
+$L$mulx_scatter::
+ mov rdx,QWORD PTR[rdi]
+ call __rsaz_512_mulx
+
+DB 102,72,15,126,199
+DB 102,72,15,126,205
+
+ mov rdx,QWORD PTR[128+rsp]
+ mov r8,QWORD PTR[rsp]
+ mov r9,QWORD PTR[8+rsp]
+ mov r10,QWORD PTR[16+rsp]
+ mov r11,QWORD PTR[24+rsp]
+ mov r12,QWORD PTR[32+rsp]
+ mov r13,QWORD PTR[40+rsp]
+ mov r14,QWORD PTR[48+rsp]
+ mov r15,QWORD PTR[56+rsp]
+
+ call __rsaz_512_reducex
+
+$L$mul_scatter_tail::
+ add r8,QWORD PTR[64+rsp]
+ adc r9,QWORD PTR[72+rsp]
+ adc r10,QWORD PTR[80+rsp]
+ adc r11,QWORD PTR[88+rsp]
+ adc r12,QWORD PTR[96+rsp]
+ adc r13,QWORD PTR[104+rsp]
+ adc r14,QWORD PTR[112+rsp]
+ adc r15,QWORD PTR[120+rsp]
+DB 102,72,15,126,214
+ sbb rcx,rcx
+
+ call __rsaz_512_subtract
+
+ mov QWORD PTR[rsi],r8
+ mov QWORD PTR[128+rsi],r9
+ mov QWORD PTR[256+rsi],r10
+ mov QWORD PTR[384+rsi],r11
+ mov QWORD PTR[512+rsi],r12
+ mov QWORD PTR[640+rsi],r13
+ mov QWORD PTR[768+rsi],r14
+ mov QWORD PTR[896+rsi],r15
+
+ lea rax,QWORD PTR[((128+24+48))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$mul_scatter4_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_rsaz_512_mul_scatter4::
+rsaz_512_mul_scatter4 ENDP
+PUBLIC rsaz_512_mul_by_one
+
+ALIGN 32
+rsaz_512_mul_by_one PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_rsaz_512_mul_by_one::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ sub rsp,128+24
+
+$L$mul_by_one_body::
+ mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ mov rbp,rdx
+ mov QWORD PTR[128+rsp],rcx
+
+ mov r8,QWORD PTR[rsi]
+ pxor xmm0,xmm0
+ mov r9,QWORD PTR[8+rsi]
+ mov r10,QWORD PTR[16+rsi]
+ mov r11,QWORD PTR[24+rsi]
+ mov r12,QWORD PTR[32+rsi]
+ mov r13,QWORD PTR[40+rsi]
+ mov r14,QWORD PTR[48+rsi]
+ mov r15,QWORD PTR[56+rsi]
+
+ movdqa XMMWORD PTR[rsp],xmm0
+ movdqa XMMWORD PTR[16+rsp],xmm0
+ movdqa XMMWORD PTR[32+rsp],xmm0
+ movdqa XMMWORD PTR[48+rsp],xmm0
+ movdqa XMMWORD PTR[64+rsp],xmm0
+ movdqa XMMWORD PTR[80+rsp],xmm0
+ movdqa XMMWORD PTR[96+rsp],xmm0
+ and eax,080100h
+ cmp eax,080100h
+ je $L$by_one_callx
+ call __rsaz_512_reduce
+ jmp $L$by_one_tail
+ALIGN 32
+$L$by_one_callx::
+ mov rdx,QWORD PTR[128+rsp]
+ call __rsaz_512_reducex
+$L$by_one_tail::
+ mov QWORD PTR[rdi],r8
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+ mov QWORD PTR[32+rdi],r12
+ mov QWORD PTR[40+rdi],r13
+ mov QWORD PTR[48+rdi],r14
+ mov QWORD PTR[56+rdi],r15
+
+ lea rax,QWORD PTR[((128+24+48))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$mul_by_one_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_rsaz_512_mul_by_one::
+rsaz_512_mul_by_one ENDP
+
+ALIGN 32
+__rsaz_512_reduce PROC PRIVATE
+
+ mov rbx,r8
+ imul rbx,QWORD PTR[((128+8))+rsp]
+ mov rax,QWORD PTR[rbp]
+ mov ecx,8
+ jmp $L$reduction_loop
+
+ALIGN 32
+$L$reduction_loop::
+ mul rbx
+ mov rax,QWORD PTR[8+rbp]
+ neg r8
+ mov r8,rdx
+ adc r8,0
+
+ mul rbx
+ add r9,rax
+ mov rax,QWORD PTR[16+rbp]
+ adc rdx,0
+ add r8,r9
+ mov r9,rdx
+ adc r9,0
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[24+rbp]
+ adc rdx,0
+ add r9,r10
+ mov r10,rdx
+ adc r10,0
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[32+rbp]
+ adc rdx,0
+ add r10,r11
+ mov rsi,QWORD PTR[((128+8))+rsp]
+
+
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbx
+ add r12,rax
+ mov rax,QWORD PTR[40+rbp]
+ adc rdx,0
+ imul rsi,r8
+ add r11,r12
+ mov r12,rdx
+ adc r12,0
+
+ mul rbx
+ add r13,rax
+ mov rax,QWORD PTR[48+rbp]
+ adc rdx,0
+ add r12,r13
+ mov r13,rdx
+ adc r13,0
+
+ mul rbx
+ add r14,rax
+ mov rax,QWORD PTR[56+rbp]
+ adc rdx,0
+ add r13,r14
+ mov r14,rdx
+ adc r14,0
+
+ mul rbx
+ mov rbx,rsi
+ add r15,rax
+ mov rax,QWORD PTR[rbp]
+ adc rdx,0
+ add r14,r15
+ mov r15,rdx
+ adc r15,0
+
+ dec ecx
+ jne $L$reduction_loop
+
+ DB 0F3h,0C3h ;repret
+
+__rsaz_512_reduce ENDP
+
+ALIGN 32
+__rsaz_512_reducex PROC PRIVATE
+
+
+ imul rdx,r8
+ xor rsi,rsi
+ mov ecx,8
+ jmp $L$reduction_loopx
+
+ALIGN 32
+$L$reduction_loopx::
+ mov rbx,r8
+ mulx r8,rax,QWORD PTR[rbp]
+ adcx rax,rbx
+ adox r8,r9
+
+ mulx r9,rax,QWORD PTR[8+rbp]
+ adcx r8,rax
+ adox r9,r10
+
+ mulx r10,rbx,QWORD PTR[16+rbp]
+ adcx r9,rbx
+ adox r10,r11
+
+ mulx r11,rbx,QWORD PTR[24+rbp]
+ adcx r10,rbx
+ adox r11,r12
+
+DB 0c4h,062h,0e3h,0f6h,0a5h,020h,000h,000h,000h
+ mov rax,rdx
+ mov rdx,r8
+ adcx r11,rbx
+ adox r12,r13
+
+ mulx rdx,rbx,QWORD PTR[((128+8))+rsp]
+ mov rdx,rax
+
+ mulx r13,rax,QWORD PTR[40+rbp]
+ adcx r12,rax
+ adox r13,r14
+
+DB 0c4h,062h,0fbh,0f6h,0b5h,030h,000h,000h,000h
+ adcx r13,rax
+ adox r14,r15
+
+ mulx r15,rax,QWORD PTR[56+rbp]
+ mov rdx,rbx
+ adcx r14,rax
+ adox r15,rsi
+ adcx r15,rsi
+
+ dec ecx
+ jne $L$reduction_loopx
+
+ DB 0F3h,0C3h ;repret
+
+__rsaz_512_reducex ENDP
+
+ALIGN 32
+__rsaz_512_subtract PROC PRIVATE
+
+ mov QWORD PTR[rdi],r8
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+ mov QWORD PTR[32+rdi],r12
+ mov QWORD PTR[40+rdi],r13
+ mov QWORD PTR[48+rdi],r14
+ mov QWORD PTR[56+rdi],r15
+
+ mov r8,QWORD PTR[rbp]
+ mov r9,QWORD PTR[8+rbp]
+ neg r8
+ not r9
+ and r8,rcx
+ mov r10,QWORD PTR[16+rbp]
+ and r9,rcx
+ not r10
+ mov r11,QWORD PTR[24+rbp]
+ and r10,rcx
+ not r11
+ mov r12,QWORD PTR[32+rbp]
+ and r11,rcx
+ not r12
+ mov r13,QWORD PTR[40+rbp]
+ and r12,rcx
+ not r13
+ mov r14,QWORD PTR[48+rbp]
+ and r13,rcx
+ not r14
+ mov r15,QWORD PTR[56+rbp]
+ and r14,rcx
+ not r15
+ and r15,rcx
+
+ add r8,QWORD PTR[rdi]
+ adc r9,QWORD PTR[8+rdi]
+ adc r10,QWORD PTR[16+rdi]
+ adc r11,QWORD PTR[24+rdi]
+ adc r12,QWORD PTR[32+rdi]
+ adc r13,QWORD PTR[40+rdi]
+ adc r14,QWORD PTR[48+rdi]
+ adc r15,QWORD PTR[56+rdi]
+
+ mov QWORD PTR[rdi],r8
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+ mov QWORD PTR[32+rdi],r12
+ mov QWORD PTR[40+rdi],r13
+ mov QWORD PTR[48+rdi],r14
+ mov QWORD PTR[56+rdi],r15
+
+ DB 0F3h,0C3h ;repret
+
+__rsaz_512_subtract ENDP
+
+ALIGN 32
+__rsaz_512_mul PROC PRIVATE
+
+ lea rdi,QWORD PTR[8+rsp]
+
+ mov rax,QWORD PTR[rsi]
+ mul rbx
+ mov QWORD PTR[rdi],rax
+ mov rax,QWORD PTR[8+rsi]
+ mov r8,rdx
+
+ mul rbx
+ add r8,rax
+ mov rax,QWORD PTR[16+rsi]
+ mov r9,rdx
+ adc r9,0
+
+ mul rbx
+ add r9,rax
+ mov rax,QWORD PTR[24+rsi]
+ mov r10,rdx
+ adc r10,0
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[32+rsi]
+ mov r11,rdx
+ adc r11,0
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[40+rsi]
+ mov r12,rdx
+ adc r12,0
+
+ mul rbx
+ add r12,rax
+ mov rax,QWORD PTR[48+rsi]
+ mov r13,rdx
+ adc r13,0
+
+ mul rbx
+ add r13,rax
+ mov rax,QWORD PTR[56+rsi]
+ mov r14,rdx
+ adc r14,0
+
+ mul rbx
+ add r14,rax
+ mov rax,QWORD PTR[rsi]
+ mov r15,rdx
+ adc r15,0
+
+ lea rbp,QWORD PTR[8+rbp]
+ lea rdi,QWORD PTR[8+rdi]
+
+ mov ecx,7
+ jmp $L$oop_mul
+
+ALIGN 32
+$L$oop_mul::
+ mov rbx,QWORD PTR[rbp]
+ mul rbx
+ add r8,rax
+ mov rax,QWORD PTR[8+rsi]
+ mov QWORD PTR[rdi],r8
+ mov r8,rdx
+ adc r8,0
+
+ mul rbx
+ add r9,rax
+ mov rax,QWORD PTR[16+rsi]
+ adc rdx,0
+ add r8,r9
+ mov r9,rdx
+ adc r9,0
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[24+rsi]
+ adc rdx,0
+ add r9,r10
+ mov r10,rdx
+ adc r10,0
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[32+rsi]
+ adc rdx,0
+ add r10,r11
+ mov r11,rdx
+ adc r11,0
+
+ mul rbx
+ add r12,rax
+ mov rax,QWORD PTR[40+rsi]
+ adc rdx,0
+ add r11,r12
+ mov r12,rdx
+ adc r12,0
+
+ mul rbx
+ add r13,rax
+ mov rax,QWORD PTR[48+rsi]
+ adc rdx,0
+ add r12,r13
+ mov r13,rdx
+ adc r13,0
+
+ mul rbx
+ add r14,rax
+ mov rax,QWORD PTR[56+rsi]
+ adc rdx,0
+ add r13,r14
+ mov r14,rdx
+ lea rbp,QWORD PTR[8+rbp]
+ adc r14,0
+
+ mul rbx
+ add r15,rax
+ mov rax,QWORD PTR[rsi]
+ adc rdx,0
+ add r14,r15
+ mov r15,rdx
+ adc r15,0
+
+ lea rdi,QWORD PTR[8+rdi]
+
+ dec ecx
+ jnz $L$oop_mul
+
+ mov QWORD PTR[rdi],r8
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+ mov QWORD PTR[32+rdi],r12
+ mov QWORD PTR[40+rdi],r13
+ mov QWORD PTR[48+rdi],r14
+ mov QWORD PTR[56+rdi],r15
+
+ DB 0F3h,0C3h ;repret
+
+__rsaz_512_mul ENDP
+
+ALIGN 32
+__rsaz_512_mulx PROC PRIVATE
+
+ mulx r8,rbx,QWORD PTR[rsi]
+ mov rcx,-6
+
+ mulx r9,rax,QWORD PTR[8+rsi]
+ mov QWORD PTR[8+rsp],rbx
+
+ mulx r10,rbx,QWORD PTR[16+rsi]
+ adc r8,rax
+
+ mulx r11,rax,QWORD PTR[24+rsi]
+ adc r9,rbx
+
+ mulx r12,rbx,QWORD PTR[32+rsi]
+ adc r10,rax
+
+ mulx r13,rax,QWORD PTR[40+rsi]
+ adc r11,rbx
+
+ mulx r14,rbx,QWORD PTR[48+rsi]
+ adc r12,rax
+
+ mulx r15,rax,QWORD PTR[56+rsi]
+ mov rdx,QWORD PTR[8+rbp]
+ adc r13,rbx
+ adc r14,rax
+ adc r15,0
+
+ xor rdi,rdi
+ jmp $L$oop_mulx
+
+ALIGN 32
+$L$oop_mulx::
+ mov rbx,r8
+ mulx r8,rax,QWORD PTR[rsi]
+ adcx rbx,rax
+ adox r8,r9
+
+ mulx r9,rax,QWORD PTR[8+rsi]
+ adcx r8,rax
+ adox r9,r10
+
+ mulx r10,rax,QWORD PTR[16+rsi]
+ adcx r9,rax
+ adox r10,r11
+
+ mulx r11,rax,QWORD PTR[24+rsi]
+ adcx r10,rax
+ adox r11,r12
+
+DB 03eh,0c4h,062h,0fbh,0f6h,0a6h,020h,000h,000h,000h
+ adcx r11,rax
+ adox r12,r13
+
+ mulx r13,rax,QWORD PTR[40+rsi]
+ adcx r12,rax
+ adox r13,r14
+
+ mulx r14,rax,QWORD PTR[48+rsi]
+ adcx r13,rax
+ adox r14,r15
+
+ mulx r15,rax,QWORD PTR[56+rsi]
+ mov rdx,QWORD PTR[64+rcx*8+rbp]
+ mov QWORD PTR[((8+64-8))+rcx*8+rsp],rbx
+ adcx r14,rax
+ adox r15,rdi
+ adcx r15,rdi
+
+ inc rcx
+ jnz $L$oop_mulx
+
+ mov rbx,r8
+ mulx r8,rax,QWORD PTR[rsi]
+ adcx rbx,rax
+ adox r8,r9
+
+DB 0c4h,062h,0fbh,0f6h,08eh,008h,000h,000h,000h
+ adcx r8,rax
+ adox r9,r10
+
+DB 0c4h,062h,0fbh,0f6h,096h,010h,000h,000h,000h
+ adcx r9,rax
+ adox r10,r11
+
+ mulx r11,rax,QWORD PTR[24+rsi]
+ adcx r10,rax
+ adox r11,r12
+
+ mulx r12,rax,QWORD PTR[32+rsi]
+ adcx r11,rax
+ adox r12,r13
+
+ mulx r13,rax,QWORD PTR[40+rsi]
+ adcx r12,rax
+ adox r13,r14
+
+DB 0c4h,062h,0fbh,0f6h,0b6h,030h,000h,000h,000h
+ adcx r13,rax
+ adox r14,r15
+
+DB 0c4h,062h,0fbh,0f6h,0beh,038h,000h,000h,000h
+ adcx r14,rax
+ adox r15,rdi
+ adcx r15,rdi
+
+ mov QWORD PTR[((8+64-8))+rsp],rbx
+ mov QWORD PTR[((8+64))+rsp],r8
+ mov QWORD PTR[((8+64+8))+rsp],r9
+ mov QWORD PTR[((8+64+16))+rsp],r10
+ mov QWORD PTR[((8+64+24))+rsp],r11
+ mov QWORD PTR[((8+64+32))+rsp],r12
+ mov QWORD PTR[((8+64+40))+rsp],r13
+ mov QWORD PTR[((8+64+48))+rsp],r14
+ mov QWORD PTR[((8+64+56))+rsp],r15
+
+ DB 0F3h,0C3h ;repret
+
+__rsaz_512_mulx ENDP
+PUBLIC rsaz_512_scatter4
+
+ALIGN 16
+rsaz_512_scatter4 PROC PUBLIC
+
+ lea rcx,QWORD PTR[r8*8+rcx]
+ mov r9d,8
+ jmp $L$oop_scatter
+ALIGN 16
+$L$oop_scatter::
+ mov rax,QWORD PTR[rdx]
+ lea rdx,QWORD PTR[8+rdx]
+ mov QWORD PTR[rcx],rax
+ lea rcx,QWORD PTR[128+rcx]
+ dec r9d
+ jnz $L$oop_scatter
+ DB 0F3h,0C3h ;repret
+
+rsaz_512_scatter4 ENDP
+
+PUBLIC rsaz_512_gather4
+
+ALIGN 16
+rsaz_512_gather4 PROC PUBLIC
+
+$L$SEH_begin_rsaz_512_gather4::
+DB 048h,081h,0ech,0a8h,000h,000h,000h
+DB 00fh,029h,034h,024h
+DB 00fh,029h,07ch,024h,010h
+DB 044h,00fh,029h,044h,024h,020h
+DB 044h,00fh,029h,04ch,024h,030h
+DB 044h,00fh,029h,054h,024h,040h
+DB 044h,00fh,029h,05ch,024h,050h
+DB 044h,00fh,029h,064h,024h,060h
+DB 044h,00fh,029h,06ch,024h,070h
+DB 044h,00fh,029h,0b4h,024h,080h,0,0,0
+DB 044h,00fh,029h,0bch,024h,090h,0,0,0
+ movd xmm8,r8d
+ movdqa xmm1,XMMWORD PTR[(($L$inc+16))]
+ movdqa xmm0,XMMWORD PTR[$L$inc]
+
+ pshufd xmm8,xmm8,0
+ movdqa xmm7,xmm1
+ movdqa xmm2,xmm1
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm8
+ movdqa xmm3,xmm7
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm8
+ movdqa xmm4,xmm7
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm8
+ movdqa xmm5,xmm7
+ paddd xmm4,xmm3
+ pcmpeqd xmm3,xmm8
+ movdqa xmm6,xmm7
+ paddd xmm5,xmm4
+ pcmpeqd xmm4,xmm8
+ paddd xmm6,xmm5
+ pcmpeqd xmm5,xmm8
+ paddd xmm7,xmm6
+ pcmpeqd xmm6,xmm8
+ pcmpeqd xmm7,xmm8
+ mov r9d,8
+ jmp $L$oop_gather
+ALIGN 16
+$L$oop_gather::
+ movdqa xmm8,XMMWORD PTR[rdx]
+ movdqa xmm9,XMMWORD PTR[16+rdx]
+ movdqa xmm10,XMMWORD PTR[32+rdx]
+ movdqa xmm11,XMMWORD PTR[48+rdx]
+ pand xmm8,xmm0
+ movdqa xmm12,XMMWORD PTR[64+rdx]
+ pand xmm9,xmm1
+ movdqa xmm13,XMMWORD PTR[80+rdx]
+ pand xmm10,xmm2
+ movdqa xmm14,XMMWORD PTR[96+rdx]
+ pand xmm11,xmm3
+ movdqa xmm15,XMMWORD PTR[112+rdx]
+ lea rdx,QWORD PTR[128+rdx]
+ pand xmm12,xmm4
+ pand xmm13,xmm5
+ pand xmm14,xmm6
+ pand xmm15,xmm7
+ por xmm8,xmm10
+ por xmm9,xmm11
+ por xmm8,xmm12
+ por xmm9,xmm13
+ por xmm8,xmm14
+ por xmm9,xmm15
+
+ por xmm8,xmm9
+ pshufd xmm9,xmm8,04eh
+ por xmm8,xmm9
+ movq QWORD PTR[rcx],xmm8
+ lea rcx,QWORD PTR[8+rcx]
+ dec r9d
+ jnz $L$oop_gather
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps xmm10,XMMWORD PTR[64+rsp]
+ movaps xmm11,XMMWORD PTR[80+rsp]
+ movaps xmm12,XMMWORD PTR[96+rsp]
+ movaps xmm13,XMMWORD PTR[112+rsp]
+ movaps xmm14,XMMWORD PTR[128+rsp]
+ movaps xmm15,XMMWORD PTR[144+rsp]
+ add rsp,0a8h
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_rsaz_512_gather4::
+
+rsaz_512_gather4 ENDP
+
+ALIGN 64
+$L$inc::
+ DD 0,0,1,1
+ DD 2,2,2,2
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ lea rax,QWORD PTR[((128+24+48))+rax]
+
+ lea rbx,QWORD PTR[$L$mul_gather4_epilogue]
+ cmp rbx,r10
+ jne $L$se_not_in_mul_gather4
+
+ lea rax,QWORD PTR[176+rax]
+
+ lea rsi,QWORD PTR[((-48-168))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+$L$se_not_in_mul_gather4::
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_rsaz_512_sqr
+ DD imagerel $L$SEH_end_rsaz_512_sqr
+ DD imagerel $L$SEH_info_rsaz_512_sqr
+
+ DD imagerel $L$SEH_begin_rsaz_512_mul
+ DD imagerel $L$SEH_end_rsaz_512_mul
+ DD imagerel $L$SEH_info_rsaz_512_mul
+
+ DD imagerel $L$SEH_begin_rsaz_512_mul_gather4
+ DD imagerel $L$SEH_end_rsaz_512_mul_gather4
+ DD imagerel $L$SEH_info_rsaz_512_mul_gather4
+
+ DD imagerel $L$SEH_begin_rsaz_512_mul_scatter4
+ DD imagerel $L$SEH_end_rsaz_512_mul_scatter4
+ DD imagerel $L$SEH_info_rsaz_512_mul_scatter4
+
+ DD imagerel $L$SEH_begin_rsaz_512_mul_by_one
+ DD imagerel $L$SEH_end_rsaz_512_mul_by_one
+ DD imagerel $L$SEH_info_rsaz_512_mul_by_one
+
+ DD imagerel $L$SEH_begin_rsaz_512_gather4
+ DD imagerel $L$SEH_end_rsaz_512_gather4
+ DD imagerel $L$SEH_info_rsaz_512_gather4
+
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_rsaz_512_sqr::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$sqr_body,imagerel $L$sqr_epilogue
+$L$SEH_info_rsaz_512_mul::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$mul_body,imagerel $L$mul_epilogue
+$L$SEH_info_rsaz_512_mul_gather4::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$mul_gather4_body,imagerel $L$mul_gather4_epilogue
+$L$SEH_info_rsaz_512_mul_scatter4::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$mul_scatter4_body,imagerel $L$mul_scatter4_epilogue
+$L$SEH_info_rsaz_512_mul_by_one::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$mul_by_one_body,imagerel $L$mul_by_one_epilogue
+$L$SEH_info_rsaz_512_gather4::
+DB 001h,046h,016h,000h
+DB 046h,0f8h,009h,000h
+DB 03dh,0e8h,008h,000h
+DB 034h,0d8h,007h,000h
+DB 02eh,0c8h,006h,000h
+DB 028h,0b8h,005h,000h
+DB 022h,0a8h,004h,000h
+DB 01ch,098h,003h,000h
+DB 016h,088h,002h,000h
+DB 010h,078h,001h,000h
+DB 00bh,068h,000h,000h
+DB 007h,001h,015h,000h
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/bn/x86-gf2m.masm b/contrib/libs/openssl/asm/windows/crypto/bn/x86-gf2m.masm
index 7ef239f732..7a42c0259b 100644
--- a/contrib/libs/openssl/asm/windows/crypto/bn/x86-gf2m.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/bn/x86-gf2m.masm
@@ -1,360 +1,360 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-;EXTERN _OPENSSL_ia32cap_P:NEAR
-ALIGN 16
-__mul_1x1_mmx PROC PRIVATE
- sub esp,36
- mov ecx,eax
- lea edx,DWORD PTR [eax*1+eax]
- and ecx,1073741823
- lea ebp,DWORD PTR [edx*1+edx]
- mov DWORD PTR [esp],0
- and edx,2147483647
- movd mm2,eax
- movd mm3,ebx
- mov DWORD PTR 4[esp],ecx
- xor ecx,edx
- pxor mm5,mm5
- pxor mm4,mm4
- mov DWORD PTR 8[esp],edx
- xor edx,ebp
- mov DWORD PTR 12[esp],ecx
- pcmpgtd mm5,mm2
- paddd mm2,mm2
- xor ecx,edx
- mov DWORD PTR 16[esp],ebp
- xor ebp,edx
- pand mm5,mm3
- pcmpgtd mm4,mm2
- mov DWORD PTR 20[esp],ecx
- xor ebp,ecx
- psllq mm5,31
- pand mm4,mm3
- mov DWORD PTR 24[esp],edx
- mov esi,7
- mov DWORD PTR 28[esp],ebp
- mov ebp,esi
- and esi,ebx
- shr ebx,3
- mov edi,ebp
- psllq mm4,30
- and edi,ebx
- shr ebx,3
- movd mm0,DWORD PTR [esi*4+esp]
- mov esi,ebp
- and esi,ebx
- shr ebx,3
- movd mm2,DWORD PTR [edi*4+esp]
- mov edi,ebp
- psllq mm2,3
- and edi,ebx
- shr ebx,3
- pxor mm0,mm2
- movd mm1,DWORD PTR [esi*4+esp]
- mov esi,ebp
- psllq mm1,6
- and esi,ebx
- shr ebx,3
- pxor mm0,mm1
- movd mm2,DWORD PTR [edi*4+esp]
- mov edi,ebp
- psllq mm2,9
- and edi,ebx
- shr ebx,3
- pxor mm0,mm2
- movd mm1,DWORD PTR [esi*4+esp]
- mov esi,ebp
- psllq mm1,12
- and esi,ebx
- shr ebx,3
- pxor mm0,mm1
- movd mm2,DWORD PTR [edi*4+esp]
- mov edi,ebp
- psllq mm2,15
- and edi,ebx
- shr ebx,3
- pxor mm0,mm2
- movd mm1,DWORD PTR [esi*4+esp]
- mov esi,ebp
- psllq mm1,18
- and esi,ebx
- shr ebx,3
- pxor mm0,mm1
- movd mm2,DWORD PTR [edi*4+esp]
- mov edi,ebp
- psllq mm2,21
- and edi,ebx
- shr ebx,3
- pxor mm0,mm2
- movd mm1,DWORD PTR [esi*4+esp]
- mov esi,ebp
- psllq mm1,24
- and esi,ebx
- shr ebx,3
- pxor mm0,mm1
- movd mm2,DWORD PTR [edi*4+esp]
- pxor mm0,mm4
- psllq mm2,27
- pxor mm0,mm2
- movd mm1,DWORD PTR [esi*4+esp]
- pxor mm0,mm5
- psllq mm1,30
- add esp,36
- pxor mm0,mm1
- ret
-__mul_1x1_mmx ENDP
-ALIGN 16
-__mul_1x1_ialu PROC PRIVATE
- sub esp,36
- mov ecx,eax
- lea edx,DWORD PTR [eax*1+eax]
- lea ebp,DWORD PTR [eax*4]
- and ecx,1073741823
- lea edi,DWORD PTR [eax*1+eax]
- sar eax,31
- mov DWORD PTR [esp],0
- and edx,2147483647
- mov DWORD PTR 4[esp],ecx
- xor ecx,edx
- mov DWORD PTR 8[esp],edx
- xor edx,ebp
- mov DWORD PTR 12[esp],ecx
- xor ecx,edx
- mov DWORD PTR 16[esp],ebp
- xor ebp,edx
- mov DWORD PTR 20[esp],ecx
- xor ebp,ecx
- sar edi,31
- and eax,ebx
- mov DWORD PTR 24[esp],edx
- and edi,ebx
- mov DWORD PTR 28[esp],ebp
- mov edx,eax
- shl eax,31
- mov ecx,edi
- shr edx,1
- mov esi,7
- shl edi,30
- and esi,ebx
- shr ecx,2
- xor eax,edi
- shr ebx,3
- mov edi,7
- and edi,ebx
- shr ebx,3
- xor edx,ecx
- xor eax,DWORD PTR [esi*4+esp]
- mov esi,7
- and esi,ebx
- shr ebx,3
- mov ebp,DWORD PTR [edi*4+esp]
- mov edi,7
- mov ecx,ebp
- shl ebp,3
- and edi,ebx
- shr ecx,29
- xor eax,ebp
- shr ebx,3
- xor edx,ecx
- mov ecx,DWORD PTR [esi*4+esp]
- mov esi,7
- mov ebp,ecx
- shl ecx,6
- and esi,ebx
- shr ebp,26
- xor eax,ecx
- shr ebx,3
- xor edx,ebp
- mov ebp,DWORD PTR [edi*4+esp]
- mov edi,7
- mov ecx,ebp
- shl ebp,9
- and edi,ebx
- shr ecx,23
- xor eax,ebp
- shr ebx,3
- xor edx,ecx
- mov ecx,DWORD PTR [esi*4+esp]
- mov esi,7
- mov ebp,ecx
- shl ecx,12
- and esi,ebx
- shr ebp,20
- xor eax,ecx
- shr ebx,3
- xor edx,ebp
- mov ebp,DWORD PTR [edi*4+esp]
- mov edi,7
- mov ecx,ebp
- shl ebp,15
- and edi,ebx
- shr ecx,17
- xor eax,ebp
- shr ebx,3
- xor edx,ecx
- mov ecx,DWORD PTR [esi*4+esp]
- mov esi,7
- mov ebp,ecx
- shl ecx,18
- and esi,ebx
- shr ebp,14
- xor eax,ecx
- shr ebx,3
- xor edx,ebp
- mov ebp,DWORD PTR [edi*4+esp]
- mov edi,7
- mov ecx,ebp
- shl ebp,21
- and edi,ebx
- shr ecx,11
- xor eax,ebp
- shr ebx,3
- xor edx,ecx
- mov ecx,DWORD PTR [esi*4+esp]
- mov esi,7
- mov ebp,ecx
- shl ecx,24
- and esi,ebx
- shr ebp,8
- xor eax,ecx
- shr ebx,3
- xor edx,ebp
- mov ebp,DWORD PTR [edi*4+esp]
- mov ecx,ebp
- shl ebp,27
- mov edi,DWORD PTR [esi*4+esp]
- shr ecx,5
- mov esi,edi
- xor eax,ebp
- shl edi,30
- xor edx,ecx
- shr esi,2
- xor eax,edi
- xor edx,esi
- add esp,36
- ret
-__mul_1x1_ialu ENDP
-ALIGN 16
-_bn_GF2m_mul_2x2 PROC PUBLIC
-$L_bn_GF2m_mul_2x2_begin::
- lea edx,DWORD PTR _OPENSSL_ia32cap_P
- mov eax,DWORD PTR [edx]
- mov edx,DWORD PTR 4[edx]
- test eax,8388608
- jz $L000ialu
- test eax,16777216
- jz $L001mmx
- test edx,2
- jz $L001mmx
- movups xmm0,XMMWORD PTR 8[esp]
- shufps xmm0,xmm0,177
-DB 102,15,58,68,192,1
- mov eax,DWORD PTR 4[esp]
- movups XMMWORD PTR [eax],xmm0
- ret
-ALIGN 16
-$L001mmx:
- push ebp
- push ebx
- push esi
- push edi
- mov eax,DWORD PTR 24[esp]
- mov ebx,DWORD PTR 32[esp]
- call __mul_1x1_mmx
- movq mm7,mm0
- mov eax,DWORD PTR 28[esp]
- mov ebx,DWORD PTR 36[esp]
- call __mul_1x1_mmx
- movq mm6,mm0
- mov eax,DWORD PTR 24[esp]
- mov ebx,DWORD PTR 32[esp]
- xor eax,DWORD PTR 28[esp]
- xor ebx,DWORD PTR 36[esp]
- call __mul_1x1_mmx
- pxor mm0,mm7
- mov eax,DWORD PTR 20[esp]
- pxor mm0,mm6
- movq mm2,mm0
- psllq mm0,32
- pop edi
- psrlq mm2,32
- pop esi
- pxor mm0,mm6
- pop ebx
- pxor mm2,mm7
- movq QWORD PTR [eax],mm0
- pop ebp
- movq QWORD PTR 8[eax],mm2
- emms
- ret
-ALIGN 16
-$L000ialu:
- push ebp
- push ebx
- push esi
- push edi
- sub esp,20
- mov eax,DWORD PTR 44[esp]
- mov ebx,DWORD PTR 52[esp]
- call __mul_1x1_ialu
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],edx
- mov eax,DWORD PTR 48[esp]
- mov ebx,DWORD PTR 56[esp]
- call __mul_1x1_ialu
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],edx
- mov eax,DWORD PTR 44[esp]
- mov ebx,DWORD PTR 52[esp]
- xor eax,DWORD PTR 48[esp]
- xor ebx,DWORD PTR 56[esp]
- call __mul_1x1_ialu
- mov ebp,DWORD PTR 40[esp]
- mov ebx,DWORD PTR [esp]
- mov ecx,DWORD PTR 4[esp]
- mov edi,DWORD PTR 8[esp]
- mov esi,DWORD PTR 12[esp]
- xor eax,edx
- xor edx,ecx
- xor eax,ebx
- mov DWORD PTR [ebp],ebx
- xor edx,edi
- mov DWORD PTR 12[ebp],esi
- xor eax,esi
- add esp,20
- xor edx,esi
- pop edi
- xor eax,edx
- pop esi
- mov DWORD PTR 8[ebp],edx
- pop ebx
- mov DWORD PTR 4[ebp],eax
- pop ebp
- ret
-_bn_GF2m_mul_2x2 ENDP
-DB 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
-DB 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32
-DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
-DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
-DB 62,0
-.text$ ENDS
-.bss SEGMENT 'BSS'
-COMM _OPENSSL_ia32cap_P:DWORD:4
-.bss ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+;EXTERN _OPENSSL_ia32cap_P:NEAR
+ALIGN 16
+__mul_1x1_mmx PROC PRIVATE
+ sub esp,36
+ mov ecx,eax
+ lea edx,DWORD PTR [eax*1+eax]
+ and ecx,1073741823
+ lea ebp,DWORD PTR [edx*1+edx]
+ mov DWORD PTR [esp],0
+ and edx,2147483647
+ movd mm2,eax
+ movd mm3,ebx
+ mov DWORD PTR 4[esp],ecx
+ xor ecx,edx
+ pxor mm5,mm5
+ pxor mm4,mm4
+ mov DWORD PTR 8[esp],edx
+ xor edx,ebp
+ mov DWORD PTR 12[esp],ecx
+ pcmpgtd mm5,mm2
+ paddd mm2,mm2
+ xor ecx,edx
+ mov DWORD PTR 16[esp],ebp
+ xor ebp,edx
+ pand mm5,mm3
+ pcmpgtd mm4,mm2
+ mov DWORD PTR 20[esp],ecx
+ xor ebp,ecx
+ psllq mm5,31
+ pand mm4,mm3
+ mov DWORD PTR 24[esp],edx
+ mov esi,7
+ mov DWORD PTR 28[esp],ebp
+ mov ebp,esi
+ and esi,ebx
+ shr ebx,3
+ mov edi,ebp
+ psllq mm4,30
+ and edi,ebx
+ shr ebx,3
+ movd mm0,DWORD PTR [esi*4+esp]
+ mov esi,ebp
+ and esi,ebx
+ shr ebx,3
+ movd mm2,DWORD PTR [edi*4+esp]
+ mov edi,ebp
+ psllq mm2,3
+ and edi,ebx
+ shr ebx,3
+ pxor mm0,mm2
+ movd mm1,DWORD PTR [esi*4+esp]
+ mov esi,ebp
+ psllq mm1,6
+ and esi,ebx
+ shr ebx,3
+ pxor mm0,mm1
+ movd mm2,DWORD PTR [edi*4+esp]
+ mov edi,ebp
+ psllq mm2,9
+ and edi,ebx
+ shr ebx,3
+ pxor mm0,mm2
+ movd mm1,DWORD PTR [esi*4+esp]
+ mov esi,ebp
+ psllq mm1,12
+ and esi,ebx
+ shr ebx,3
+ pxor mm0,mm1
+ movd mm2,DWORD PTR [edi*4+esp]
+ mov edi,ebp
+ psllq mm2,15
+ and edi,ebx
+ shr ebx,3
+ pxor mm0,mm2
+ movd mm1,DWORD PTR [esi*4+esp]
+ mov esi,ebp
+ psllq mm1,18
+ and esi,ebx
+ shr ebx,3
+ pxor mm0,mm1
+ movd mm2,DWORD PTR [edi*4+esp]
+ mov edi,ebp
+ psllq mm2,21
+ and edi,ebx
+ shr ebx,3
+ pxor mm0,mm2
+ movd mm1,DWORD PTR [esi*4+esp]
+ mov esi,ebp
+ psllq mm1,24
+ and esi,ebx
+ shr ebx,3
+ pxor mm0,mm1
+ movd mm2,DWORD PTR [edi*4+esp]
+ pxor mm0,mm4
+ psllq mm2,27
+ pxor mm0,mm2
+ movd mm1,DWORD PTR [esi*4+esp]
+ pxor mm0,mm5
+ psllq mm1,30
+ add esp,36
+ pxor mm0,mm1
+ ret
+__mul_1x1_mmx ENDP
+ALIGN 16
+__mul_1x1_ialu PROC PRIVATE
+ sub esp,36
+ mov ecx,eax
+ lea edx,DWORD PTR [eax*1+eax]
+ lea ebp,DWORD PTR [eax*4]
+ and ecx,1073741823
+ lea edi,DWORD PTR [eax*1+eax]
+ sar eax,31
+ mov DWORD PTR [esp],0
+ and edx,2147483647
+ mov DWORD PTR 4[esp],ecx
+ xor ecx,edx
+ mov DWORD PTR 8[esp],edx
+ xor edx,ebp
+ mov DWORD PTR 12[esp],ecx
+ xor ecx,edx
+ mov DWORD PTR 16[esp],ebp
+ xor ebp,edx
+ mov DWORD PTR 20[esp],ecx
+ xor ebp,ecx
+ sar edi,31
+ and eax,ebx
+ mov DWORD PTR 24[esp],edx
+ and edi,ebx
+ mov DWORD PTR 28[esp],ebp
+ mov edx,eax
+ shl eax,31
+ mov ecx,edi
+ shr edx,1
+ mov esi,7
+ shl edi,30
+ and esi,ebx
+ shr ecx,2
+ xor eax,edi
+ shr ebx,3
+ mov edi,7
+ and edi,ebx
+ shr ebx,3
+ xor edx,ecx
+ xor eax,DWORD PTR [esi*4+esp]
+ mov esi,7
+ and esi,ebx
+ shr ebx,3
+ mov ebp,DWORD PTR [edi*4+esp]
+ mov edi,7
+ mov ecx,ebp
+ shl ebp,3
+ and edi,ebx
+ shr ecx,29
+ xor eax,ebp
+ shr ebx,3
+ xor edx,ecx
+ mov ecx,DWORD PTR [esi*4+esp]
+ mov esi,7
+ mov ebp,ecx
+ shl ecx,6
+ and esi,ebx
+ shr ebp,26
+ xor eax,ecx
+ shr ebx,3
+ xor edx,ebp
+ mov ebp,DWORD PTR [edi*4+esp]
+ mov edi,7
+ mov ecx,ebp
+ shl ebp,9
+ and edi,ebx
+ shr ecx,23
+ xor eax,ebp
+ shr ebx,3
+ xor edx,ecx
+ mov ecx,DWORD PTR [esi*4+esp]
+ mov esi,7
+ mov ebp,ecx
+ shl ecx,12
+ and esi,ebx
+ shr ebp,20
+ xor eax,ecx
+ shr ebx,3
+ xor edx,ebp
+ mov ebp,DWORD PTR [edi*4+esp]
+ mov edi,7
+ mov ecx,ebp
+ shl ebp,15
+ and edi,ebx
+ shr ecx,17
+ xor eax,ebp
+ shr ebx,3
+ xor edx,ecx
+ mov ecx,DWORD PTR [esi*4+esp]
+ mov esi,7
+ mov ebp,ecx
+ shl ecx,18
+ and esi,ebx
+ shr ebp,14
+ xor eax,ecx
+ shr ebx,3
+ xor edx,ebp
+ mov ebp,DWORD PTR [edi*4+esp]
+ mov edi,7
+ mov ecx,ebp
+ shl ebp,21
+ and edi,ebx
+ shr ecx,11
+ xor eax,ebp
+ shr ebx,3
+ xor edx,ecx
+ mov ecx,DWORD PTR [esi*4+esp]
+ mov esi,7
+ mov ebp,ecx
+ shl ecx,24
+ and esi,ebx
+ shr ebp,8
+ xor eax,ecx
+ shr ebx,3
+ xor edx,ebp
+ mov ebp,DWORD PTR [edi*4+esp]
+ mov ecx,ebp
+ shl ebp,27
+ mov edi,DWORD PTR [esi*4+esp]
+ shr ecx,5
+ mov esi,edi
+ xor eax,ebp
+ shl edi,30
+ xor edx,ecx
+ shr esi,2
+ xor eax,edi
+ xor edx,esi
+ add esp,36
+ ret
+__mul_1x1_ialu ENDP
+ALIGN 16
+_bn_GF2m_mul_2x2 PROC PUBLIC
+$L_bn_GF2m_mul_2x2_begin::
+ lea edx,DWORD PTR _OPENSSL_ia32cap_P
+ mov eax,DWORD PTR [edx]
+ mov edx,DWORD PTR 4[edx]
+ test eax,8388608
+ jz $L000ialu
+ test eax,16777216
+ jz $L001mmx
+ test edx,2
+ jz $L001mmx
+ movups xmm0,XMMWORD PTR 8[esp]
+ shufps xmm0,xmm0,177
+DB 102,15,58,68,192,1
+ mov eax,DWORD PTR 4[esp]
+ movups XMMWORD PTR [eax],xmm0
+ ret
+ALIGN 16
+$L001mmx:
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov eax,DWORD PTR 24[esp]
+ mov ebx,DWORD PTR 32[esp]
+ call __mul_1x1_mmx
+ movq mm7,mm0
+ mov eax,DWORD PTR 28[esp]
+ mov ebx,DWORD PTR 36[esp]
+ call __mul_1x1_mmx
+ movq mm6,mm0
+ mov eax,DWORD PTR 24[esp]
+ mov ebx,DWORD PTR 32[esp]
+ xor eax,DWORD PTR 28[esp]
+ xor ebx,DWORD PTR 36[esp]
+ call __mul_1x1_mmx
+ pxor mm0,mm7
+ mov eax,DWORD PTR 20[esp]
+ pxor mm0,mm6
+ movq mm2,mm0
+ psllq mm0,32
+ pop edi
+ psrlq mm2,32
+ pop esi
+ pxor mm0,mm6
+ pop ebx
+ pxor mm2,mm7
+ movq QWORD PTR [eax],mm0
+ pop ebp
+ movq QWORD PTR 8[eax],mm2
+ emms
+ ret
+ALIGN 16
+$L000ialu:
+ push ebp
+ push ebx
+ push esi
+ push edi
+ sub esp,20
+ mov eax,DWORD PTR 44[esp]
+ mov ebx,DWORD PTR 52[esp]
+ call __mul_1x1_ialu
+ mov DWORD PTR 8[esp],eax
+ mov DWORD PTR 12[esp],edx
+ mov eax,DWORD PTR 48[esp]
+ mov ebx,DWORD PTR 56[esp]
+ call __mul_1x1_ialu
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],edx
+ mov eax,DWORD PTR 44[esp]
+ mov ebx,DWORD PTR 52[esp]
+ xor eax,DWORD PTR 48[esp]
+ xor ebx,DWORD PTR 56[esp]
+ call __mul_1x1_ialu
+ mov ebp,DWORD PTR 40[esp]
+ mov ebx,DWORD PTR [esp]
+ mov ecx,DWORD PTR 4[esp]
+ mov edi,DWORD PTR 8[esp]
+ mov esi,DWORD PTR 12[esp]
+ xor eax,edx
+ xor edx,ecx
+ xor eax,ebx
+ mov DWORD PTR [ebp],ebx
+ xor edx,edi
+ mov DWORD PTR 12[ebp],esi
+ xor eax,esi
+ add esp,20
+ xor edx,esi
+ pop edi
+ xor eax,edx
+ pop esi
+ mov DWORD PTR 8[ebp],edx
+ pop ebx
+ mov DWORD PTR 4[ebp],eax
+ pop ebp
+ ret
+_bn_GF2m_mul_2x2 ENDP
+DB 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
+DB 99,97,116,105,111,110,32,102,111,114,32,120,56,54,44,32
+DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
+DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
+DB 62,0
+.text$ ENDS
+.bss SEGMENT 'BSS'
+COMM _OPENSSL_ia32cap_P:DWORD:4
+.bss ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/bn/x86-mont.masm b/contrib/libs/openssl/asm/windows/crypto/bn/x86-mont.masm
index 531d23280a..23c6825567 100644
--- a/contrib/libs/openssl/asm/windows/crypto/bn/x86-mont.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/bn/x86-mont.masm
@@ -1,492 +1,492 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-;EXTERN _OPENSSL_ia32cap_P:NEAR
-ALIGN 16
-_bn_mul_mont PROC PUBLIC
-$L_bn_mul_mont_begin::
- push ebp
- push ebx
- push esi
- push edi
- xor eax,eax
- mov edi,DWORD PTR 40[esp]
- cmp edi,4
- jl $L000just_leave
- lea esi,DWORD PTR 20[esp]
- lea edx,DWORD PTR 24[esp]
- add edi,2
- neg edi
- lea ebp,DWORD PTR [edi*4+esp-32]
- neg edi
- mov eax,ebp
- sub eax,edx
- and eax,2047
- sub ebp,eax
- xor edx,ebp
- and edx,2048
- xor edx,2048
- sub ebp,edx
- and ebp,-64
- mov eax,esp
- sub eax,ebp
- and eax,-4096
- mov edx,esp
- lea esp,DWORD PTR [eax*1+ebp]
- mov eax,DWORD PTR [esp]
- cmp esp,ebp
- ja $L001page_walk
- jmp $L002page_walk_done
-ALIGN 16
-$L001page_walk:
- lea esp,DWORD PTR [esp-4096]
- mov eax,DWORD PTR [esp]
- cmp esp,ebp
- ja $L001page_walk
-$L002page_walk_done:
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov ebp,DWORD PTR 12[esi]
- mov esi,DWORD PTR 16[esi]
- mov esi,DWORD PTR [esi]
- mov DWORD PTR 4[esp],eax
- mov DWORD PTR 8[esp],ebx
- mov DWORD PTR 12[esp],ecx
- mov DWORD PTR 16[esp],ebp
- mov DWORD PTR 20[esp],esi
- lea ebx,DWORD PTR [edi-3]
- mov DWORD PTR 24[esp],edx
- lea eax,DWORD PTR _OPENSSL_ia32cap_P
- bt DWORD PTR [eax],26
- jnc $L003non_sse2
- mov eax,-1
- movd mm7,eax
- mov esi,DWORD PTR 8[esp]
- mov edi,DWORD PTR 12[esp]
- mov ebp,DWORD PTR 16[esp]
- xor edx,edx
- xor ecx,ecx
- movd mm4,DWORD PTR [edi]
- movd mm5,DWORD PTR [esi]
- movd mm3,DWORD PTR [ebp]
- pmuludq mm5,mm4
- movq mm2,mm5
- movq mm0,mm5
- pand mm0,mm7
- pmuludq mm5,QWORD PTR 20[esp]
- pmuludq mm3,mm5
- paddq mm3,mm0
- movd mm1,DWORD PTR 4[ebp]
- movd mm0,DWORD PTR 4[esi]
- psrlq mm2,32
- psrlq mm3,32
- inc ecx
-ALIGN 16
-$L0041st:
- pmuludq mm0,mm4
- pmuludq mm1,mm5
- paddq mm2,mm0
- paddq mm3,mm1
- movq mm0,mm2
- pand mm0,mm7
- movd mm1,DWORD PTR 4[ecx*4+ebp]
- paddq mm3,mm0
- movd mm0,DWORD PTR 4[ecx*4+esi]
- psrlq mm2,32
- movd DWORD PTR 28[ecx*4+esp],mm3
- psrlq mm3,32
- lea ecx,DWORD PTR 1[ecx]
- cmp ecx,ebx
- jl $L0041st
- pmuludq mm0,mm4
- pmuludq mm1,mm5
- paddq mm2,mm0
- paddq mm3,mm1
- movq mm0,mm2
- pand mm0,mm7
- paddq mm3,mm0
- movd DWORD PTR 28[ecx*4+esp],mm3
- psrlq mm2,32
- psrlq mm3,32
- paddq mm3,mm2
- movq QWORD PTR 32[ebx*4+esp],mm3
- inc edx
-$L005outer:
- xor ecx,ecx
- movd mm4,DWORD PTR [edx*4+edi]
- movd mm5,DWORD PTR [esi]
- movd mm6,DWORD PTR 32[esp]
- movd mm3,DWORD PTR [ebp]
- pmuludq mm5,mm4
- paddq mm5,mm6
- movq mm0,mm5
- movq mm2,mm5
- pand mm0,mm7
- pmuludq mm5,QWORD PTR 20[esp]
- pmuludq mm3,mm5
- paddq mm3,mm0
- movd mm6,DWORD PTR 36[esp]
- movd mm1,DWORD PTR 4[ebp]
- movd mm0,DWORD PTR 4[esi]
- psrlq mm2,32
- psrlq mm3,32
- paddq mm2,mm6
- inc ecx
- dec ebx
-$L006inner:
- pmuludq mm0,mm4
- pmuludq mm1,mm5
- paddq mm2,mm0
- paddq mm3,mm1
- movq mm0,mm2
- movd mm6,DWORD PTR 36[ecx*4+esp]
- pand mm0,mm7
- movd mm1,DWORD PTR 4[ecx*4+ebp]
- paddq mm3,mm0
- movd mm0,DWORD PTR 4[ecx*4+esi]
- psrlq mm2,32
- movd DWORD PTR 28[ecx*4+esp],mm3
- psrlq mm3,32
- paddq mm2,mm6
- dec ebx
- lea ecx,DWORD PTR 1[ecx]
- jnz $L006inner
- mov ebx,ecx
- pmuludq mm0,mm4
- pmuludq mm1,mm5
- paddq mm2,mm0
- paddq mm3,mm1
- movq mm0,mm2
- pand mm0,mm7
- paddq mm3,mm0
- movd DWORD PTR 28[ecx*4+esp],mm3
- psrlq mm2,32
- psrlq mm3,32
- movd mm6,DWORD PTR 36[ebx*4+esp]
- paddq mm3,mm2
- paddq mm3,mm6
- movq QWORD PTR 32[ebx*4+esp],mm3
- lea edx,DWORD PTR 1[edx]
- cmp edx,ebx
- jle $L005outer
- emms
- jmp $L007common_tail
-ALIGN 16
-$L003non_sse2:
- mov esi,DWORD PTR 8[esp]
- lea ebp,DWORD PTR 1[ebx]
- mov edi,DWORD PTR 12[esp]
- xor ecx,ecx
- mov edx,esi
- and ebp,1
- sub edx,edi
- lea eax,DWORD PTR 4[ebx*4+edi]
- or ebp,edx
- mov edi,DWORD PTR [edi]
- jz $L008bn_sqr_mont
- mov DWORD PTR 28[esp],eax
- mov eax,DWORD PTR [esi]
- xor edx,edx
-ALIGN 16
-$L009mull:
- mov ebp,edx
- mul edi
- add ebp,eax
- lea ecx,DWORD PTR 1[ecx]
- adc edx,0
- mov eax,DWORD PTR [ecx*4+esi]
- cmp ecx,ebx
- mov DWORD PTR 28[ecx*4+esp],ebp
- jl $L009mull
- mov ebp,edx
- mul edi
- mov edi,DWORD PTR 20[esp]
- add eax,ebp
- mov esi,DWORD PTR 16[esp]
- adc edx,0
- imul edi,DWORD PTR 32[esp]
- mov DWORD PTR 32[ebx*4+esp],eax
- xor ecx,ecx
- mov DWORD PTR 36[ebx*4+esp],edx
- mov DWORD PTR 40[ebx*4+esp],ecx
- mov eax,DWORD PTR [esi]
- mul edi
- add eax,DWORD PTR 32[esp]
- mov eax,DWORD PTR 4[esi]
- adc edx,0
- inc ecx
- jmp $L0102ndmadd
-ALIGN 16
-$L0111stmadd:
- mov ebp,edx
- mul edi
- add ebp,DWORD PTR 32[ecx*4+esp]
- lea ecx,DWORD PTR 1[ecx]
- adc edx,0
- add ebp,eax
- mov eax,DWORD PTR [ecx*4+esi]
- adc edx,0
- cmp ecx,ebx
- mov DWORD PTR 28[ecx*4+esp],ebp
- jl $L0111stmadd
- mov ebp,edx
- mul edi
- add eax,DWORD PTR 32[ebx*4+esp]
- mov edi,DWORD PTR 20[esp]
- adc edx,0
- mov esi,DWORD PTR 16[esp]
- add ebp,eax
- adc edx,0
- imul edi,DWORD PTR 32[esp]
- xor ecx,ecx
- add edx,DWORD PTR 36[ebx*4+esp]
- mov DWORD PTR 32[ebx*4+esp],ebp
- adc ecx,0
- mov eax,DWORD PTR [esi]
- mov DWORD PTR 36[ebx*4+esp],edx
- mov DWORD PTR 40[ebx*4+esp],ecx
- mul edi
- add eax,DWORD PTR 32[esp]
- mov eax,DWORD PTR 4[esi]
- adc edx,0
- mov ecx,1
-ALIGN 16
-$L0102ndmadd:
- mov ebp,edx
- mul edi
- add ebp,DWORD PTR 32[ecx*4+esp]
- lea ecx,DWORD PTR 1[ecx]
- adc edx,0
- add ebp,eax
- mov eax,DWORD PTR [ecx*4+esi]
- adc edx,0
- cmp ecx,ebx
- mov DWORD PTR 24[ecx*4+esp],ebp
- jl $L0102ndmadd
- mov ebp,edx
- mul edi
- add ebp,DWORD PTR 32[ebx*4+esp]
- adc edx,0
- add ebp,eax
- adc edx,0
- mov DWORD PTR 28[ebx*4+esp],ebp
- xor eax,eax
- mov ecx,DWORD PTR 12[esp]
- add edx,DWORD PTR 36[ebx*4+esp]
- adc eax,DWORD PTR 40[ebx*4+esp]
- lea ecx,DWORD PTR 4[ecx]
- mov DWORD PTR 32[ebx*4+esp],edx
- cmp ecx,DWORD PTR 28[esp]
- mov DWORD PTR 36[ebx*4+esp],eax
- je $L007common_tail
- mov edi,DWORD PTR [ecx]
- mov esi,DWORD PTR 8[esp]
- mov DWORD PTR 12[esp],ecx
- xor ecx,ecx
- xor edx,edx
- mov eax,DWORD PTR [esi]
- jmp $L0111stmadd
-ALIGN 16
-$L008bn_sqr_mont:
- mov DWORD PTR [esp],ebx
- mov DWORD PTR 12[esp],ecx
- mov eax,edi
- mul edi
- mov DWORD PTR 32[esp],eax
- mov ebx,edx
- shr edx,1
- and ebx,1
- inc ecx
-ALIGN 16
-$L012sqr:
- mov eax,DWORD PTR [ecx*4+esi]
- mov ebp,edx
- mul edi
- add eax,ebp
- lea ecx,DWORD PTR 1[ecx]
- adc edx,0
- lea ebp,DWORD PTR [eax*2+ebx]
- shr eax,31
- cmp ecx,DWORD PTR [esp]
- mov ebx,eax
- mov DWORD PTR 28[ecx*4+esp],ebp
- jl $L012sqr
- mov eax,DWORD PTR [ecx*4+esi]
- mov ebp,edx
- mul edi
- add eax,ebp
- mov edi,DWORD PTR 20[esp]
- adc edx,0
- mov esi,DWORD PTR 16[esp]
- lea ebp,DWORD PTR [eax*2+ebx]
- imul edi,DWORD PTR 32[esp]
- shr eax,31
- mov DWORD PTR 32[ecx*4+esp],ebp
- lea ebp,DWORD PTR [edx*2+eax]
- mov eax,DWORD PTR [esi]
- shr edx,31
- mov DWORD PTR 36[ecx*4+esp],ebp
- mov DWORD PTR 40[ecx*4+esp],edx
- mul edi
- add eax,DWORD PTR 32[esp]
- mov ebx,ecx
- adc edx,0
- mov eax,DWORD PTR 4[esi]
- mov ecx,1
-ALIGN 16
-$L0133rdmadd:
- mov ebp,edx
- mul edi
- add ebp,DWORD PTR 32[ecx*4+esp]
- adc edx,0
- add ebp,eax
- mov eax,DWORD PTR 4[ecx*4+esi]
- adc edx,0
- mov DWORD PTR 28[ecx*4+esp],ebp
- mov ebp,edx
- mul edi
- add ebp,DWORD PTR 36[ecx*4+esp]
- lea ecx,DWORD PTR 2[ecx]
- adc edx,0
- add ebp,eax
- mov eax,DWORD PTR [ecx*4+esi]
- adc edx,0
- cmp ecx,ebx
- mov DWORD PTR 24[ecx*4+esp],ebp
- jl $L0133rdmadd
- mov ebp,edx
- mul edi
- add ebp,DWORD PTR 32[ebx*4+esp]
- adc edx,0
- add ebp,eax
- adc edx,0
- mov DWORD PTR 28[ebx*4+esp],ebp
- mov ecx,DWORD PTR 12[esp]
- xor eax,eax
- mov esi,DWORD PTR 8[esp]
- add edx,DWORD PTR 36[ebx*4+esp]
- adc eax,DWORD PTR 40[ebx*4+esp]
- mov DWORD PTR 32[ebx*4+esp],edx
- cmp ecx,ebx
- mov DWORD PTR 36[ebx*4+esp],eax
- je $L007common_tail
- mov edi,DWORD PTR 4[ecx*4+esi]
- lea ecx,DWORD PTR 1[ecx]
- mov eax,edi
- mov DWORD PTR 12[esp],ecx
- mul edi
- add eax,DWORD PTR 32[ecx*4+esp]
- adc edx,0
- mov DWORD PTR 32[ecx*4+esp],eax
- xor ebp,ebp
- cmp ecx,ebx
- lea ecx,DWORD PTR 1[ecx]
- je $L014sqrlast
- mov ebx,edx
- shr edx,1
- and ebx,1
-ALIGN 16
-$L015sqradd:
- mov eax,DWORD PTR [ecx*4+esi]
- mov ebp,edx
- mul edi
- add eax,ebp
- lea ebp,DWORD PTR [eax*1+eax]
- adc edx,0
- shr eax,31
- add ebp,DWORD PTR 32[ecx*4+esp]
- lea ecx,DWORD PTR 1[ecx]
- adc eax,0
- add ebp,ebx
- adc eax,0
- cmp ecx,DWORD PTR [esp]
- mov DWORD PTR 28[ecx*4+esp],ebp
- mov ebx,eax
- jle $L015sqradd
- mov ebp,edx
- add edx,edx
- shr ebp,31
- add edx,ebx
- adc ebp,0
-$L014sqrlast:
- mov edi,DWORD PTR 20[esp]
- mov esi,DWORD PTR 16[esp]
- imul edi,DWORD PTR 32[esp]
- add edx,DWORD PTR 32[ecx*4+esp]
- mov eax,DWORD PTR [esi]
- adc ebp,0
- mov DWORD PTR 32[ecx*4+esp],edx
- mov DWORD PTR 36[ecx*4+esp],ebp
- mul edi
- add eax,DWORD PTR 32[esp]
- lea ebx,DWORD PTR [ecx-1]
- adc edx,0
- mov ecx,1
- mov eax,DWORD PTR 4[esi]
- jmp $L0133rdmadd
-ALIGN 16
-$L007common_tail:
- mov ebp,DWORD PTR 16[esp]
- mov edi,DWORD PTR 4[esp]
- lea esi,DWORD PTR 32[esp]
- mov eax,DWORD PTR [esi]
- mov ecx,ebx
- xor edx,edx
-ALIGN 16
-$L016sub:
- sbb eax,DWORD PTR [edx*4+ebp]
- mov DWORD PTR [edx*4+edi],eax
- dec ecx
- mov eax,DWORD PTR 4[edx*4+esi]
- lea edx,DWORD PTR 1[edx]
- jge $L016sub
- sbb eax,0
- mov edx,-1
- xor edx,eax
- jmp $L017copy
-ALIGN 16
-$L017copy:
- mov esi,DWORD PTR 32[ebx*4+esp]
- mov ebp,DWORD PTR [ebx*4+edi]
- mov DWORD PTR 32[ebx*4+esp],ecx
- and esi,eax
- and ebp,edx
- or ebp,esi
- mov DWORD PTR [ebx*4+edi],ebp
- dec ebx
- jge $L017copy
- mov esp,DWORD PTR 24[esp]
- mov eax,1
-$L000just_leave:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_bn_mul_mont ENDP
-DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
-DB 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
-DB 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
-DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
-DB 111,114,103,62,0
-.text$ ENDS
-.bss SEGMENT 'BSS'
-COMM _OPENSSL_ia32cap_P:DWORD:4
-.bss ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+;EXTERN _OPENSSL_ia32cap_P:NEAR
+ALIGN 16
+_bn_mul_mont PROC PUBLIC
+$L_bn_mul_mont_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ xor eax,eax
+ mov edi,DWORD PTR 40[esp]
+ cmp edi,4
+ jl $L000just_leave
+ lea esi,DWORD PTR 20[esp]
+ lea edx,DWORD PTR 24[esp]
+ add edi,2
+ neg edi
+ lea ebp,DWORD PTR [edi*4+esp-32]
+ neg edi
+ mov eax,ebp
+ sub eax,edx
+ and eax,2047
+ sub ebp,eax
+ xor edx,ebp
+ and edx,2048
+ xor edx,2048
+ sub ebp,edx
+ and ebp,-64
+ mov eax,esp
+ sub eax,ebp
+ and eax,-4096
+ mov edx,esp
+ lea esp,DWORD PTR [eax*1+ebp]
+ mov eax,DWORD PTR [esp]
+ cmp esp,ebp
+ ja $L001page_walk
+ jmp $L002page_walk_done
+ALIGN 16
+$L001page_walk:
+ lea esp,DWORD PTR [esp-4096]
+ mov eax,DWORD PTR [esp]
+ cmp esp,ebp
+ ja $L001page_walk
+$L002page_walk_done:
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov ebp,DWORD PTR 12[esi]
+ mov esi,DWORD PTR 16[esi]
+ mov esi,DWORD PTR [esi]
+ mov DWORD PTR 4[esp],eax
+ mov DWORD PTR 8[esp],ebx
+ mov DWORD PTR 12[esp],ecx
+ mov DWORD PTR 16[esp],ebp
+ mov DWORD PTR 20[esp],esi
+ lea ebx,DWORD PTR [edi-3]
+ mov DWORD PTR 24[esp],edx
+ lea eax,DWORD PTR _OPENSSL_ia32cap_P
+ bt DWORD PTR [eax],26
+ jnc $L003non_sse2
+ mov eax,-1
+ movd mm7,eax
+ mov esi,DWORD PTR 8[esp]
+ mov edi,DWORD PTR 12[esp]
+ mov ebp,DWORD PTR 16[esp]
+ xor edx,edx
+ xor ecx,ecx
+ movd mm4,DWORD PTR [edi]
+ movd mm5,DWORD PTR [esi]
+ movd mm3,DWORD PTR [ebp]
+ pmuludq mm5,mm4
+ movq mm2,mm5
+ movq mm0,mm5
+ pand mm0,mm7
+ pmuludq mm5,QWORD PTR 20[esp]
+ pmuludq mm3,mm5
+ paddq mm3,mm0
+ movd mm1,DWORD PTR 4[ebp]
+ movd mm0,DWORD PTR 4[esi]
+ psrlq mm2,32
+ psrlq mm3,32
+ inc ecx
+ALIGN 16
+$L0041st:
+ pmuludq mm0,mm4
+ pmuludq mm1,mm5
+ paddq mm2,mm0
+ paddq mm3,mm1
+ movq mm0,mm2
+ pand mm0,mm7
+ movd mm1,DWORD PTR 4[ecx*4+ebp]
+ paddq mm3,mm0
+ movd mm0,DWORD PTR 4[ecx*4+esi]
+ psrlq mm2,32
+ movd DWORD PTR 28[ecx*4+esp],mm3
+ psrlq mm3,32
+ lea ecx,DWORD PTR 1[ecx]
+ cmp ecx,ebx
+ jl $L0041st
+ pmuludq mm0,mm4
+ pmuludq mm1,mm5
+ paddq mm2,mm0
+ paddq mm3,mm1
+ movq mm0,mm2
+ pand mm0,mm7
+ paddq mm3,mm0
+ movd DWORD PTR 28[ecx*4+esp],mm3
+ psrlq mm2,32
+ psrlq mm3,32
+ paddq mm3,mm2
+ movq QWORD PTR 32[ebx*4+esp],mm3
+ inc edx
+$L005outer:
+ xor ecx,ecx
+ movd mm4,DWORD PTR [edx*4+edi]
+ movd mm5,DWORD PTR [esi]
+ movd mm6,DWORD PTR 32[esp]
+ movd mm3,DWORD PTR [ebp]
+ pmuludq mm5,mm4
+ paddq mm5,mm6
+ movq mm0,mm5
+ movq mm2,mm5
+ pand mm0,mm7
+ pmuludq mm5,QWORD PTR 20[esp]
+ pmuludq mm3,mm5
+ paddq mm3,mm0
+ movd mm6,DWORD PTR 36[esp]
+ movd mm1,DWORD PTR 4[ebp]
+ movd mm0,DWORD PTR 4[esi]
+ psrlq mm2,32
+ psrlq mm3,32
+ paddq mm2,mm6
+ inc ecx
+ dec ebx
+$L006inner:
+ pmuludq mm0,mm4
+ pmuludq mm1,mm5
+ paddq mm2,mm0
+ paddq mm3,mm1
+ movq mm0,mm2
+ movd mm6,DWORD PTR 36[ecx*4+esp]
+ pand mm0,mm7
+ movd mm1,DWORD PTR 4[ecx*4+ebp]
+ paddq mm3,mm0
+ movd mm0,DWORD PTR 4[ecx*4+esi]
+ psrlq mm2,32
+ movd DWORD PTR 28[ecx*4+esp],mm3
+ psrlq mm3,32
+ paddq mm2,mm6
+ dec ebx
+ lea ecx,DWORD PTR 1[ecx]
+ jnz $L006inner
+ mov ebx,ecx
+ pmuludq mm0,mm4
+ pmuludq mm1,mm5
+ paddq mm2,mm0
+ paddq mm3,mm1
+ movq mm0,mm2
+ pand mm0,mm7
+ paddq mm3,mm0
+ movd DWORD PTR 28[ecx*4+esp],mm3
+ psrlq mm2,32
+ psrlq mm3,32
+ movd mm6,DWORD PTR 36[ebx*4+esp]
+ paddq mm3,mm2
+ paddq mm3,mm6
+ movq QWORD PTR 32[ebx*4+esp],mm3
+ lea edx,DWORD PTR 1[edx]
+ cmp edx,ebx
+ jle $L005outer
+ emms
+ jmp $L007common_tail
+ALIGN 16
+$L003non_sse2:
+ mov esi,DWORD PTR 8[esp]
+ lea ebp,DWORD PTR 1[ebx]
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,ecx
+ mov edx,esi
+ and ebp,1
+ sub edx,edi
+ lea eax,DWORD PTR 4[ebx*4+edi]
+ or ebp,edx
+ mov edi,DWORD PTR [edi]
+ jz $L008bn_sqr_mont
+ mov DWORD PTR 28[esp],eax
+ mov eax,DWORD PTR [esi]
+ xor edx,edx
+ALIGN 16
+$L009mull:
+ mov ebp,edx
+ mul edi
+ add ebp,eax
+ lea ecx,DWORD PTR 1[ecx]
+ adc edx,0
+ mov eax,DWORD PTR [ecx*4+esi]
+ cmp ecx,ebx
+ mov DWORD PTR 28[ecx*4+esp],ebp
+ jl $L009mull
+ mov ebp,edx
+ mul edi
+ mov edi,DWORD PTR 20[esp]
+ add eax,ebp
+ mov esi,DWORD PTR 16[esp]
+ adc edx,0
+ imul edi,DWORD PTR 32[esp]
+ mov DWORD PTR 32[ebx*4+esp],eax
+ xor ecx,ecx
+ mov DWORD PTR 36[ebx*4+esp],edx
+ mov DWORD PTR 40[ebx*4+esp],ecx
+ mov eax,DWORD PTR [esi]
+ mul edi
+ add eax,DWORD PTR 32[esp]
+ mov eax,DWORD PTR 4[esi]
+ adc edx,0
+ inc ecx
+ jmp $L0102ndmadd
+ALIGN 16
+$L0111stmadd:
+ mov ebp,edx
+ mul edi
+ add ebp,DWORD PTR 32[ecx*4+esp]
+ lea ecx,DWORD PTR 1[ecx]
+ adc edx,0
+ add ebp,eax
+ mov eax,DWORD PTR [ecx*4+esi]
+ adc edx,0
+ cmp ecx,ebx
+ mov DWORD PTR 28[ecx*4+esp],ebp
+ jl $L0111stmadd
+ mov ebp,edx
+ mul edi
+ add eax,DWORD PTR 32[ebx*4+esp]
+ mov edi,DWORD PTR 20[esp]
+ adc edx,0
+ mov esi,DWORD PTR 16[esp]
+ add ebp,eax
+ adc edx,0
+ imul edi,DWORD PTR 32[esp]
+ xor ecx,ecx
+ add edx,DWORD PTR 36[ebx*4+esp]
+ mov DWORD PTR 32[ebx*4+esp],ebp
+ adc ecx,0
+ mov eax,DWORD PTR [esi]
+ mov DWORD PTR 36[ebx*4+esp],edx
+ mov DWORD PTR 40[ebx*4+esp],ecx
+ mul edi
+ add eax,DWORD PTR 32[esp]
+ mov eax,DWORD PTR 4[esi]
+ adc edx,0
+ mov ecx,1
+ALIGN 16
+$L0102ndmadd:
+ mov ebp,edx
+ mul edi
+ add ebp,DWORD PTR 32[ecx*4+esp]
+ lea ecx,DWORD PTR 1[ecx]
+ adc edx,0
+ add ebp,eax
+ mov eax,DWORD PTR [ecx*4+esi]
+ adc edx,0
+ cmp ecx,ebx
+ mov DWORD PTR 24[ecx*4+esp],ebp
+ jl $L0102ndmadd
+ mov ebp,edx
+ mul edi
+ add ebp,DWORD PTR 32[ebx*4+esp]
+ adc edx,0
+ add ebp,eax
+ adc edx,0
+ mov DWORD PTR 28[ebx*4+esp],ebp
+ xor eax,eax
+ mov ecx,DWORD PTR 12[esp]
+ add edx,DWORD PTR 36[ebx*4+esp]
+ adc eax,DWORD PTR 40[ebx*4+esp]
+ lea ecx,DWORD PTR 4[ecx]
+ mov DWORD PTR 32[ebx*4+esp],edx
+ cmp ecx,DWORD PTR 28[esp]
+ mov DWORD PTR 36[ebx*4+esp],eax
+ je $L007common_tail
+ mov edi,DWORD PTR [ecx]
+ mov esi,DWORD PTR 8[esp]
+ mov DWORD PTR 12[esp],ecx
+ xor ecx,ecx
+ xor edx,edx
+ mov eax,DWORD PTR [esi]
+ jmp $L0111stmadd
+ALIGN 16
+$L008bn_sqr_mont:
+ mov DWORD PTR [esp],ebx
+ mov DWORD PTR 12[esp],ecx
+ mov eax,edi
+ mul edi
+ mov DWORD PTR 32[esp],eax
+ mov ebx,edx
+ shr edx,1
+ and ebx,1
+ inc ecx
+ALIGN 16
+$L012sqr:
+ mov eax,DWORD PTR [ecx*4+esi]
+ mov ebp,edx
+ mul edi
+ add eax,ebp
+ lea ecx,DWORD PTR 1[ecx]
+ adc edx,0
+ lea ebp,DWORD PTR [eax*2+ebx]
+ shr eax,31
+ cmp ecx,DWORD PTR [esp]
+ mov ebx,eax
+ mov DWORD PTR 28[ecx*4+esp],ebp
+ jl $L012sqr
+ mov eax,DWORD PTR [ecx*4+esi]
+ mov ebp,edx
+ mul edi
+ add eax,ebp
+ mov edi,DWORD PTR 20[esp]
+ adc edx,0
+ mov esi,DWORD PTR 16[esp]
+ lea ebp,DWORD PTR [eax*2+ebx]
+ imul edi,DWORD PTR 32[esp]
+ shr eax,31
+ mov DWORD PTR 32[ecx*4+esp],ebp
+ lea ebp,DWORD PTR [edx*2+eax]
+ mov eax,DWORD PTR [esi]
+ shr edx,31
+ mov DWORD PTR 36[ecx*4+esp],ebp
+ mov DWORD PTR 40[ecx*4+esp],edx
+ mul edi
+ add eax,DWORD PTR 32[esp]
+ mov ebx,ecx
+ adc edx,0
+ mov eax,DWORD PTR 4[esi]
+ mov ecx,1
+ALIGN 16
+$L0133rdmadd:
+ mov ebp,edx
+ mul edi
+ add ebp,DWORD PTR 32[ecx*4+esp]
+ adc edx,0
+ add ebp,eax
+ mov eax,DWORD PTR 4[ecx*4+esi]
+ adc edx,0
+ mov DWORD PTR 28[ecx*4+esp],ebp
+ mov ebp,edx
+ mul edi
+ add ebp,DWORD PTR 36[ecx*4+esp]
+ lea ecx,DWORD PTR 2[ecx]
+ adc edx,0
+ add ebp,eax
+ mov eax,DWORD PTR [ecx*4+esi]
+ adc edx,0
+ cmp ecx,ebx
+ mov DWORD PTR 24[ecx*4+esp],ebp
+ jl $L0133rdmadd
+ mov ebp,edx
+ mul edi
+ add ebp,DWORD PTR 32[ebx*4+esp]
+ adc edx,0
+ add ebp,eax
+ adc edx,0
+ mov DWORD PTR 28[ebx*4+esp],ebp
+ mov ecx,DWORD PTR 12[esp]
+ xor eax,eax
+ mov esi,DWORD PTR 8[esp]
+ add edx,DWORD PTR 36[ebx*4+esp]
+ adc eax,DWORD PTR 40[ebx*4+esp]
+ mov DWORD PTR 32[ebx*4+esp],edx
+ cmp ecx,ebx
+ mov DWORD PTR 36[ebx*4+esp],eax
+ je $L007common_tail
+ mov edi,DWORD PTR 4[ecx*4+esi]
+ lea ecx,DWORD PTR 1[ecx]
+ mov eax,edi
+ mov DWORD PTR 12[esp],ecx
+ mul edi
+ add eax,DWORD PTR 32[ecx*4+esp]
+ adc edx,0
+ mov DWORD PTR 32[ecx*4+esp],eax
+ xor ebp,ebp
+ cmp ecx,ebx
+ lea ecx,DWORD PTR 1[ecx]
+ je $L014sqrlast
+ mov ebx,edx
+ shr edx,1
+ and ebx,1
+ALIGN 16
+$L015sqradd:
+ mov eax,DWORD PTR [ecx*4+esi]
+ mov ebp,edx
+ mul edi
+ add eax,ebp
+ lea ebp,DWORD PTR [eax*1+eax]
+ adc edx,0
+ shr eax,31
+ add ebp,DWORD PTR 32[ecx*4+esp]
+ lea ecx,DWORD PTR 1[ecx]
+ adc eax,0
+ add ebp,ebx
+ adc eax,0
+ cmp ecx,DWORD PTR [esp]
+ mov DWORD PTR 28[ecx*4+esp],ebp
+ mov ebx,eax
+ jle $L015sqradd
+ mov ebp,edx
+ add edx,edx
+ shr ebp,31
+ add edx,ebx
+ adc ebp,0
+$L014sqrlast:
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 16[esp]
+ imul edi,DWORD PTR 32[esp]
+ add edx,DWORD PTR 32[ecx*4+esp]
+ mov eax,DWORD PTR [esi]
+ adc ebp,0
+ mov DWORD PTR 32[ecx*4+esp],edx
+ mov DWORD PTR 36[ecx*4+esp],ebp
+ mul edi
+ add eax,DWORD PTR 32[esp]
+ lea ebx,DWORD PTR [ecx-1]
+ adc edx,0
+ mov ecx,1
+ mov eax,DWORD PTR 4[esi]
+ jmp $L0133rdmadd
+ALIGN 16
+$L007common_tail:
+ mov ebp,DWORD PTR 16[esp]
+ mov edi,DWORD PTR 4[esp]
+ lea esi,DWORD PTR 32[esp]
+ mov eax,DWORD PTR [esi]
+ mov ecx,ebx
+ xor edx,edx
+ALIGN 16
+$L016sub:
+ sbb eax,DWORD PTR [edx*4+ebp]
+ mov DWORD PTR [edx*4+edi],eax
+ dec ecx
+ mov eax,DWORD PTR 4[edx*4+esi]
+ lea edx,DWORD PTR 1[edx]
+ jge $L016sub
+ sbb eax,0
+ mov edx,-1
+ xor edx,eax
+ jmp $L017copy
+ALIGN 16
+$L017copy:
+ mov esi,DWORD PTR 32[ebx*4+esp]
+ mov ebp,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR 32[ebx*4+esp],ecx
+ and esi,eax
+ and ebp,edx
+ or ebp,esi
+ mov DWORD PTR [ebx*4+edi],ebp
+ dec ebx
+ jge $L017copy
+ mov esp,DWORD PTR 24[esp]
+ mov eax,1
+$L000just_leave:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_bn_mul_mont ENDP
+DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
+DB 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
+DB 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
+DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
+DB 111,114,103,62,0
+.text$ ENDS
+.bss SEGMENT 'BSS'
+COMM _OPENSSL_ia32cap_P:DWORD:4
+.bss ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-gf2m.masm b/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-gf2m.masm
index 1526fe2968..363ac2bc27 100644
--- a/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-gf2m.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-gf2m.masm
@@ -1,426 +1,426 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-
-ALIGN 16
-_mul_1x1 PROC PRIVATE
-
- sub rsp,128+8
-
- mov r9,-1
- lea rsi,QWORD PTR[rax*1+rax]
- shr r9,3
- lea rdi,QWORD PTR[rax*4]
- and r9,rax
- lea r12,QWORD PTR[rax*8]
- sar rax,63
- lea r10,QWORD PTR[r9*1+r9]
- sar rsi,63
- lea r11,QWORD PTR[r9*4]
- and rax,rbp
- sar rdi,63
- mov rdx,rax
- shl rax,63
- and rsi,rbp
- shr rdx,1
- mov rcx,rsi
- shl rsi,62
- and rdi,rbp
- shr rcx,2
- xor rax,rsi
- mov rbx,rdi
- shl rdi,61
- xor rdx,rcx
- shr rbx,3
- xor rax,rdi
- xor rdx,rbx
-
- mov r13,r9
- mov QWORD PTR[rsp],0
- xor r13,r10
- mov QWORD PTR[8+rsp],r9
- mov r14,r11
- mov QWORD PTR[16+rsp],r10
- xor r14,r12
- mov QWORD PTR[24+rsp],r13
-
- xor r9,r11
- mov QWORD PTR[32+rsp],r11
- xor r10,r11
- mov QWORD PTR[40+rsp],r9
- xor r13,r11
- mov QWORD PTR[48+rsp],r10
- xor r9,r14
- mov QWORD PTR[56+rsp],r13
- xor r10,r14
-
- mov QWORD PTR[64+rsp],r12
- xor r13,r14
- mov QWORD PTR[72+rsp],r9
- xor r9,r11
- mov QWORD PTR[80+rsp],r10
- xor r10,r11
- mov QWORD PTR[88+rsp],r13
-
- xor r13,r11
- mov QWORD PTR[96+rsp],r14
- mov rsi,r8
- mov QWORD PTR[104+rsp],r9
- and rsi,rbp
- mov QWORD PTR[112+rsp],r10
- shr rbp,4
- mov QWORD PTR[120+rsp],r13
- mov rdi,r8
- and rdi,rbp
- shr rbp,4
-
- movq xmm0,QWORD PTR[rsi*8+rsp]
- mov rsi,r8
- and rsi,rbp
- shr rbp,4
- mov rcx,QWORD PTR[rdi*8+rsp]
- mov rdi,r8
- mov rbx,rcx
- shl rcx,4
- and rdi,rbp
- movq xmm1,QWORD PTR[rsi*8+rsp]
- shr rbx,60
- xor rax,rcx
- pslldq xmm1,1
- mov rsi,r8
- shr rbp,4
- xor rdx,rbx
- and rsi,rbp
- shr rbp,4
- pxor xmm0,xmm1
- mov rcx,QWORD PTR[rdi*8+rsp]
- mov rdi,r8
- mov rbx,rcx
- shl rcx,12
- and rdi,rbp
- movq xmm1,QWORD PTR[rsi*8+rsp]
- shr rbx,52
- xor rax,rcx
- pslldq xmm1,2
- mov rsi,r8
- shr rbp,4
- xor rdx,rbx
- and rsi,rbp
- shr rbp,4
- pxor xmm0,xmm1
- mov rcx,QWORD PTR[rdi*8+rsp]
- mov rdi,r8
- mov rbx,rcx
- shl rcx,20
- and rdi,rbp
- movq xmm1,QWORD PTR[rsi*8+rsp]
- shr rbx,44
- xor rax,rcx
- pslldq xmm1,3
- mov rsi,r8
- shr rbp,4
- xor rdx,rbx
- and rsi,rbp
- shr rbp,4
- pxor xmm0,xmm1
- mov rcx,QWORD PTR[rdi*8+rsp]
- mov rdi,r8
- mov rbx,rcx
- shl rcx,28
- and rdi,rbp
- movq xmm1,QWORD PTR[rsi*8+rsp]
- shr rbx,36
- xor rax,rcx
- pslldq xmm1,4
- mov rsi,r8
- shr rbp,4
- xor rdx,rbx
- and rsi,rbp
- shr rbp,4
- pxor xmm0,xmm1
- mov rcx,QWORD PTR[rdi*8+rsp]
- mov rdi,r8
- mov rbx,rcx
- shl rcx,36
- and rdi,rbp
- movq xmm1,QWORD PTR[rsi*8+rsp]
- shr rbx,28
- xor rax,rcx
- pslldq xmm1,5
- mov rsi,r8
- shr rbp,4
- xor rdx,rbx
- and rsi,rbp
- shr rbp,4
- pxor xmm0,xmm1
- mov rcx,QWORD PTR[rdi*8+rsp]
- mov rdi,r8
- mov rbx,rcx
- shl rcx,44
- and rdi,rbp
- movq xmm1,QWORD PTR[rsi*8+rsp]
- shr rbx,20
- xor rax,rcx
- pslldq xmm1,6
- mov rsi,r8
- shr rbp,4
- xor rdx,rbx
- and rsi,rbp
- shr rbp,4
- pxor xmm0,xmm1
- mov rcx,QWORD PTR[rdi*8+rsp]
- mov rdi,r8
- mov rbx,rcx
- shl rcx,52
- and rdi,rbp
- movq xmm1,QWORD PTR[rsi*8+rsp]
- shr rbx,12
- xor rax,rcx
- pslldq xmm1,7
- mov rsi,r8
- shr rbp,4
- xor rdx,rbx
- and rsi,rbp
- shr rbp,4
- pxor xmm0,xmm1
- mov rcx,QWORD PTR[rdi*8+rsp]
- mov rbx,rcx
- shl rcx,60
-DB 102,72,15,126,198
- shr rbx,4
- xor rax,rcx
- psrldq xmm0,8
- xor rdx,rbx
-DB 102,72,15,126,199
- xor rax,rsi
- xor rdx,rdi
-
- add rsp,128+8
-
- DB 0F3h,0C3h ;repret
-$L$end_mul_1x1::
-
-_mul_1x1 ENDP
-EXTERN OPENSSL_ia32cap_P:NEAR
-PUBLIC bn_GF2m_mul_2x2
-
-ALIGN 16
-bn_GF2m_mul_2x2 PROC PUBLIC
-
- mov rax,rsp
- mov r10,QWORD PTR[OPENSSL_ia32cap_P]
- bt r10,33
- jnc $L$vanilla_mul_2x2
-
-DB 102,72,15,110,194
-DB 102,73,15,110,201
-DB 102,73,15,110,208
- movq xmm3,QWORD PTR[40+rsp]
- movdqa xmm4,xmm0
- movdqa xmm5,xmm1
-DB 102,15,58,68,193,0
- pxor xmm4,xmm2
- pxor xmm5,xmm3
-DB 102,15,58,68,211,0
-DB 102,15,58,68,229,0
- xorps xmm4,xmm0
- xorps xmm4,xmm2
- movdqa xmm5,xmm4
- pslldq xmm4,8
- psrldq xmm5,8
- pxor xmm2,xmm4
- pxor xmm0,xmm5
- movdqu XMMWORD PTR[rcx],xmm2
- movdqu XMMWORD PTR[16+rcx],xmm0
- DB 0F3h,0C3h ;repret
-
-ALIGN 16
-$L$vanilla_mul_2x2::
- lea rsp,QWORD PTR[((-136))+rsp]
-
- mov r10,QWORD PTR[176+rsp]
- mov QWORD PTR[120+rsp],rdi
- mov QWORD PTR[128+rsp],rsi
- mov QWORD PTR[80+rsp],r14
-
- mov QWORD PTR[88+rsp],r13
-
- mov QWORD PTR[96+rsp],r12
-
- mov QWORD PTR[104+rsp],rbp
-
- mov QWORD PTR[112+rsp],rbx
-
-$L$body_mul_2x2::
- mov QWORD PTR[32+rsp],rcx
- mov QWORD PTR[40+rsp],rdx
- mov QWORD PTR[48+rsp],r8
- mov QWORD PTR[56+rsp],r9
- mov QWORD PTR[64+rsp],r10
-
- mov r8,0fh
- mov rax,rdx
- mov rbp,r9
- call _mul_1x1
- mov QWORD PTR[16+rsp],rax
- mov QWORD PTR[24+rsp],rdx
-
- mov rax,QWORD PTR[48+rsp]
- mov rbp,QWORD PTR[64+rsp]
- call _mul_1x1
- mov QWORD PTR[rsp],rax
- mov QWORD PTR[8+rsp],rdx
-
- mov rax,QWORD PTR[40+rsp]
- mov rbp,QWORD PTR[56+rsp]
- xor rax,QWORD PTR[48+rsp]
- xor rbp,QWORD PTR[64+rsp]
- call _mul_1x1
- mov rbx,QWORD PTR[rsp]
- mov rcx,QWORD PTR[8+rsp]
- mov rdi,QWORD PTR[16+rsp]
- mov rsi,QWORD PTR[24+rsp]
- mov rbp,QWORD PTR[32+rsp]
-
- xor rax,rdx
- xor rdx,rcx
- xor rax,rbx
- mov QWORD PTR[rbp],rbx
- xor rdx,rdi
- mov QWORD PTR[24+rbp],rsi
- xor rax,rsi
- xor rdx,rsi
- xor rax,rdx
- mov QWORD PTR[16+rbp],rdx
- mov QWORD PTR[8+rbp],rax
-
- mov r14,QWORD PTR[80+rsp]
-
- mov r13,QWORD PTR[88+rsp]
-
- mov r12,QWORD PTR[96+rsp]
-
- mov rbp,QWORD PTR[104+rsp]
-
- mov rbx,QWORD PTR[112+rsp]
-
- mov rdi,QWORD PTR[120+rsp]
- mov rsi,QWORD PTR[128+rsp]
- lea rsp,QWORD PTR[136+rsp]
-
-$L$epilogue_mul_2x2::
- DB 0F3h,0C3h ;repret
-$L$end_mul_2x2::
-
-bn_GF2m_mul_2x2 ENDP
-DB 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
-DB 99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54
-DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
-DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
-DB 111,114,103,62,0
-ALIGN 16
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- lea r10,QWORD PTR[$L$body_mul_2x2]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- lea r10,QWORD PTR[$L$epilogue_mul_2x2]
- cmp rbx,r10
- jae $L$in_prologue
-
- mov r14,QWORD PTR[80+rax]
- mov r13,QWORD PTR[88+rax]
- mov r12,QWORD PTR[96+rax]
- mov rbp,QWORD PTR[104+rax]
- mov rbx,QWORD PTR[112+rax]
- mov rdi,QWORD PTR[120+rax]
- mov rsi,QWORD PTR[128+rax]
-
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
-
- lea rax,QWORD PTR[136+rax]
-
-$L$in_prologue::
- mov QWORD PTR[152+r8],rax
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel _mul_1x1
- DD imagerel $L$end_mul_1x1
- DD imagerel $L$SEH_info_1x1
-
- DD imagerel $L$vanilla_mul_2x2
- DD imagerel $L$end_mul_2x2
- DD imagerel $L$SEH_info_2x2
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_1x1::
-DB 001h,007h,002h,000h
-DB 007h,001h,011h,000h
-$L$SEH_info_2x2::
-DB 9,0,0,0
- DD imagerel se_handler
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+
+ALIGN 16
+_mul_1x1 PROC PRIVATE
+
+ sub rsp,128+8
+
+ mov r9,-1
+ lea rsi,QWORD PTR[rax*1+rax]
+ shr r9,3
+ lea rdi,QWORD PTR[rax*4]
+ and r9,rax
+ lea r12,QWORD PTR[rax*8]
+ sar rax,63
+ lea r10,QWORD PTR[r9*1+r9]
+ sar rsi,63
+ lea r11,QWORD PTR[r9*4]
+ and rax,rbp
+ sar rdi,63
+ mov rdx,rax
+ shl rax,63
+ and rsi,rbp
+ shr rdx,1
+ mov rcx,rsi
+ shl rsi,62
+ and rdi,rbp
+ shr rcx,2
+ xor rax,rsi
+ mov rbx,rdi
+ shl rdi,61
+ xor rdx,rcx
+ shr rbx,3
+ xor rax,rdi
+ xor rdx,rbx
+
+ mov r13,r9
+ mov QWORD PTR[rsp],0
+ xor r13,r10
+ mov QWORD PTR[8+rsp],r9
+ mov r14,r11
+ mov QWORD PTR[16+rsp],r10
+ xor r14,r12
+ mov QWORD PTR[24+rsp],r13
+
+ xor r9,r11
+ mov QWORD PTR[32+rsp],r11
+ xor r10,r11
+ mov QWORD PTR[40+rsp],r9
+ xor r13,r11
+ mov QWORD PTR[48+rsp],r10
+ xor r9,r14
+ mov QWORD PTR[56+rsp],r13
+ xor r10,r14
+
+ mov QWORD PTR[64+rsp],r12
+ xor r13,r14
+ mov QWORD PTR[72+rsp],r9
+ xor r9,r11
+ mov QWORD PTR[80+rsp],r10
+ xor r10,r11
+ mov QWORD PTR[88+rsp],r13
+
+ xor r13,r11
+ mov QWORD PTR[96+rsp],r14
+ mov rsi,r8
+ mov QWORD PTR[104+rsp],r9
+ and rsi,rbp
+ mov QWORD PTR[112+rsp],r10
+ shr rbp,4
+ mov QWORD PTR[120+rsp],r13
+ mov rdi,r8
+ and rdi,rbp
+ shr rbp,4
+
+ movq xmm0,QWORD PTR[rsi*8+rsp]
+ mov rsi,r8
+ and rsi,rbp
+ shr rbp,4
+ mov rcx,QWORD PTR[rdi*8+rsp]
+ mov rdi,r8
+ mov rbx,rcx
+ shl rcx,4
+ and rdi,rbp
+ movq xmm1,QWORD PTR[rsi*8+rsp]
+ shr rbx,60
+ xor rax,rcx
+ pslldq xmm1,1
+ mov rsi,r8
+ shr rbp,4
+ xor rdx,rbx
+ and rsi,rbp
+ shr rbp,4
+ pxor xmm0,xmm1
+ mov rcx,QWORD PTR[rdi*8+rsp]
+ mov rdi,r8
+ mov rbx,rcx
+ shl rcx,12
+ and rdi,rbp
+ movq xmm1,QWORD PTR[rsi*8+rsp]
+ shr rbx,52
+ xor rax,rcx
+ pslldq xmm1,2
+ mov rsi,r8
+ shr rbp,4
+ xor rdx,rbx
+ and rsi,rbp
+ shr rbp,4
+ pxor xmm0,xmm1
+ mov rcx,QWORD PTR[rdi*8+rsp]
+ mov rdi,r8
+ mov rbx,rcx
+ shl rcx,20
+ and rdi,rbp
+ movq xmm1,QWORD PTR[rsi*8+rsp]
+ shr rbx,44
+ xor rax,rcx
+ pslldq xmm1,3
+ mov rsi,r8
+ shr rbp,4
+ xor rdx,rbx
+ and rsi,rbp
+ shr rbp,4
+ pxor xmm0,xmm1
+ mov rcx,QWORD PTR[rdi*8+rsp]
+ mov rdi,r8
+ mov rbx,rcx
+ shl rcx,28
+ and rdi,rbp
+ movq xmm1,QWORD PTR[rsi*8+rsp]
+ shr rbx,36
+ xor rax,rcx
+ pslldq xmm1,4
+ mov rsi,r8
+ shr rbp,4
+ xor rdx,rbx
+ and rsi,rbp
+ shr rbp,4
+ pxor xmm0,xmm1
+ mov rcx,QWORD PTR[rdi*8+rsp]
+ mov rdi,r8
+ mov rbx,rcx
+ shl rcx,36
+ and rdi,rbp
+ movq xmm1,QWORD PTR[rsi*8+rsp]
+ shr rbx,28
+ xor rax,rcx
+ pslldq xmm1,5
+ mov rsi,r8
+ shr rbp,4
+ xor rdx,rbx
+ and rsi,rbp
+ shr rbp,4
+ pxor xmm0,xmm1
+ mov rcx,QWORD PTR[rdi*8+rsp]
+ mov rdi,r8
+ mov rbx,rcx
+ shl rcx,44
+ and rdi,rbp
+ movq xmm1,QWORD PTR[rsi*8+rsp]
+ shr rbx,20
+ xor rax,rcx
+ pslldq xmm1,6
+ mov rsi,r8
+ shr rbp,4
+ xor rdx,rbx
+ and rsi,rbp
+ shr rbp,4
+ pxor xmm0,xmm1
+ mov rcx,QWORD PTR[rdi*8+rsp]
+ mov rdi,r8
+ mov rbx,rcx
+ shl rcx,52
+ and rdi,rbp
+ movq xmm1,QWORD PTR[rsi*8+rsp]
+ shr rbx,12
+ xor rax,rcx
+ pslldq xmm1,7
+ mov rsi,r8
+ shr rbp,4
+ xor rdx,rbx
+ and rsi,rbp
+ shr rbp,4
+ pxor xmm0,xmm1
+ mov rcx,QWORD PTR[rdi*8+rsp]
+ mov rbx,rcx
+ shl rcx,60
+DB 102,72,15,126,198
+ shr rbx,4
+ xor rax,rcx
+ psrldq xmm0,8
+ xor rdx,rbx
+DB 102,72,15,126,199
+ xor rax,rsi
+ xor rdx,rdi
+
+ add rsp,128+8
+
+ DB 0F3h,0C3h ;repret
+$L$end_mul_1x1::
+
+_mul_1x1 ENDP
+EXTERN OPENSSL_ia32cap_P:NEAR
+PUBLIC bn_GF2m_mul_2x2
+
+ALIGN 16
+bn_GF2m_mul_2x2 PROC PUBLIC
+
+ mov rax,rsp
+ mov r10,QWORD PTR[OPENSSL_ia32cap_P]
+ bt r10,33
+ jnc $L$vanilla_mul_2x2
+
+DB 102,72,15,110,194
+DB 102,73,15,110,201
+DB 102,73,15,110,208
+ movq xmm3,QWORD PTR[40+rsp]
+ movdqa xmm4,xmm0
+ movdqa xmm5,xmm1
+DB 102,15,58,68,193,0
+ pxor xmm4,xmm2
+ pxor xmm5,xmm3
+DB 102,15,58,68,211,0
+DB 102,15,58,68,229,0
+ xorps xmm4,xmm0
+ xorps xmm4,xmm2
+ movdqa xmm5,xmm4
+ pslldq xmm4,8
+ psrldq xmm5,8
+ pxor xmm2,xmm4
+ pxor xmm0,xmm5
+ movdqu XMMWORD PTR[rcx],xmm2
+ movdqu XMMWORD PTR[16+rcx],xmm0
+ DB 0F3h,0C3h ;repret
+
+ALIGN 16
+$L$vanilla_mul_2x2::
+ lea rsp,QWORD PTR[((-136))+rsp]
+
+ mov r10,QWORD PTR[176+rsp]
+ mov QWORD PTR[120+rsp],rdi
+ mov QWORD PTR[128+rsp],rsi
+ mov QWORD PTR[80+rsp],r14
+
+ mov QWORD PTR[88+rsp],r13
+
+ mov QWORD PTR[96+rsp],r12
+
+ mov QWORD PTR[104+rsp],rbp
+
+ mov QWORD PTR[112+rsp],rbx
+
+$L$body_mul_2x2::
+ mov QWORD PTR[32+rsp],rcx
+ mov QWORD PTR[40+rsp],rdx
+ mov QWORD PTR[48+rsp],r8
+ mov QWORD PTR[56+rsp],r9
+ mov QWORD PTR[64+rsp],r10
+
+ mov r8,0fh
+ mov rax,rdx
+ mov rbp,r9
+ call _mul_1x1
+ mov QWORD PTR[16+rsp],rax
+ mov QWORD PTR[24+rsp],rdx
+
+ mov rax,QWORD PTR[48+rsp]
+ mov rbp,QWORD PTR[64+rsp]
+ call _mul_1x1
+ mov QWORD PTR[rsp],rax
+ mov QWORD PTR[8+rsp],rdx
+
+ mov rax,QWORD PTR[40+rsp]
+ mov rbp,QWORD PTR[56+rsp]
+ xor rax,QWORD PTR[48+rsp]
+ xor rbp,QWORD PTR[64+rsp]
+ call _mul_1x1
+ mov rbx,QWORD PTR[rsp]
+ mov rcx,QWORD PTR[8+rsp]
+ mov rdi,QWORD PTR[16+rsp]
+ mov rsi,QWORD PTR[24+rsp]
+ mov rbp,QWORD PTR[32+rsp]
+
+ xor rax,rdx
+ xor rdx,rcx
+ xor rax,rbx
+ mov QWORD PTR[rbp],rbx
+ xor rdx,rdi
+ mov QWORD PTR[24+rbp],rsi
+ xor rax,rsi
+ xor rdx,rsi
+ xor rax,rdx
+ mov QWORD PTR[16+rbp],rdx
+ mov QWORD PTR[8+rbp],rax
+
+ mov r14,QWORD PTR[80+rsp]
+
+ mov r13,QWORD PTR[88+rsp]
+
+ mov r12,QWORD PTR[96+rsp]
+
+ mov rbp,QWORD PTR[104+rsp]
+
+ mov rbx,QWORD PTR[112+rsp]
+
+ mov rdi,QWORD PTR[120+rsp]
+ mov rsi,QWORD PTR[128+rsp]
+ lea rsp,QWORD PTR[136+rsp]
+
+$L$epilogue_mul_2x2::
+ DB 0F3h,0C3h ;repret
+$L$end_mul_2x2::
+
+bn_GF2m_mul_2x2 ENDP
+DB 71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105
+DB 99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54
+DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
+DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
+DB 111,114,103,62,0
+ALIGN 16
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$body_mul_2x2]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea r10,QWORD PTR[$L$epilogue_mul_2x2]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ mov r14,QWORD PTR[80+rax]
+ mov r13,QWORD PTR[88+rax]
+ mov r12,QWORD PTR[96+rax]
+ mov rbp,QWORD PTR[104+rax]
+ mov rbx,QWORD PTR[112+rax]
+ mov rdi,QWORD PTR[120+rax]
+ mov rsi,QWORD PTR[128+rax]
+
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+
+ lea rax,QWORD PTR[136+rax]
+
+$L$in_prologue::
+ mov QWORD PTR[152+r8],rax
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel _mul_1x1
+ DD imagerel $L$end_mul_1x1
+ DD imagerel $L$SEH_info_1x1
+
+ DD imagerel $L$vanilla_mul_2x2
+ DD imagerel $L$end_mul_2x2
+ DD imagerel $L$SEH_info_2x2
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_1x1::
+DB 001h,007h,002h,000h
+DB 007h,001h,011h,000h
+$L$SEH_info_2x2::
+DB 9,0,0,0
+ DD imagerel se_handler
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-mont.masm b/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-mont.masm
index 67bb89e7e1..3843e28e1c 100644
--- a/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-mont.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-mont.masm
@@ -1,1477 +1,1477 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC bn_mul_mont
-
-ALIGN 16
-bn_mul_mont PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_bn_mul_mont::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov r9d,r9d
- mov rax,rsp
-
- test r9d,3
- jnz $L$mul_enter
- cmp r9d,8
- jb $L$mul_enter
- mov r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- cmp rdx,rsi
- jne $L$mul4x_enter
- test r9d,7
- jz $L$sqr8x_enter
- jmp $L$mul4x_enter
-
-ALIGN 16
-$L$mul_enter::
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- neg r9
- mov r11,rsp
- lea r10,QWORD PTR[((-16))+r9*8+rsp]
- neg r9
- and r10,-1024
-
-
-
-
-
-
-
-
-
- sub r11,r10
- and r11,-4096
- lea rsp,QWORD PTR[r11*1+r10]
- mov r11,QWORD PTR[rsp]
- cmp rsp,r10
- ja $L$mul_page_walk
- jmp $L$mul_page_walk_done
-
-ALIGN 16
-$L$mul_page_walk::
- lea rsp,QWORD PTR[((-4096))+rsp]
- mov r11,QWORD PTR[rsp]
- cmp rsp,r10
- ja $L$mul_page_walk
-$L$mul_page_walk_done::
-
- mov QWORD PTR[8+r9*8+rsp],rax
-
-$L$mul_body::
- mov r12,rdx
- mov r8,QWORD PTR[r8]
- mov rbx,QWORD PTR[r12]
- mov rax,QWORD PTR[rsi]
-
- xor r14,r14
- xor r15,r15
-
- mov rbp,r8
- mul rbx
- mov r10,rax
- mov rax,QWORD PTR[rcx]
-
- imul rbp,r10
- mov r11,rdx
-
- mul rbp
- add r10,rax
- mov rax,QWORD PTR[8+rsi]
- adc rdx,0
- mov r13,rdx
-
- lea r15,QWORD PTR[1+r15]
- jmp $L$1st_enter
-
-ALIGN 16
-$L$1st::
- add r13,rax
- mov rax,QWORD PTR[r15*8+rsi]
- adc rdx,0
- add r13,r11
- mov r11,r10
- adc rdx,0
- mov QWORD PTR[((-16))+r15*8+rsp],r13
- mov r13,rdx
-
-$L$1st_enter::
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[r15*8+rcx]
- adc rdx,0
- lea r15,QWORD PTR[1+r15]
- mov r10,rdx
-
- mul rbp
- cmp r15,r9
- jne $L$1st
-
- add r13,rax
- mov rax,QWORD PTR[rsi]
- adc rdx,0
- add r13,r11
- adc rdx,0
- mov QWORD PTR[((-16))+r15*8+rsp],r13
- mov r13,rdx
- mov r11,r10
-
- xor rdx,rdx
- add r13,r11
- adc rdx,0
- mov QWORD PTR[((-8))+r9*8+rsp],r13
- mov QWORD PTR[r9*8+rsp],rdx
-
- lea r14,QWORD PTR[1+r14]
- jmp $L$outer
-ALIGN 16
-$L$outer::
- mov rbx,QWORD PTR[r14*8+r12]
- xor r15,r15
- mov rbp,r8
- mov r10,QWORD PTR[rsp]
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[rcx]
- adc rdx,0
-
- imul rbp,r10
- mov r11,rdx
-
- mul rbp
- add r10,rax
- mov rax,QWORD PTR[8+rsi]
- adc rdx,0
- mov r10,QWORD PTR[8+rsp]
- mov r13,rdx
-
- lea r15,QWORD PTR[1+r15]
- jmp $L$inner_enter
-
-ALIGN 16
-$L$inner::
- add r13,rax
- mov rax,QWORD PTR[r15*8+rsi]
- adc rdx,0
- add r13,r10
- mov r10,QWORD PTR[r15*8+rsp]
- adc rdx,0
- mov QWORD PTR[((-16))+r15*8+rsp],r13
- mov r13,rdx
-
-$L$inner_enter::
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[r15*8+rcx]
- adc rdx,0
- add r10,r11
- mov r11,rdx
- adc r11,0
- lea r15,QWORD PTR[1+r15]
-
- mul rbp
- cmp r15,r9
- jne $L$inner
-
- add r13,rax
- mov rax,QWORD PTR[rsi]
- adc rdx,0
- add r13,r10
- mov r10,QWORD PTR[r15*8+rsp]
- adc rdx,0
- mov QWORD PTR[((-16))+r15*8+rsp],r13
- mov r13,rdx
-
- xor rdx,rdx
- add r13,r11
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-8))+r9*8+rsp],r13
- mov QWORD PTR[r9*8+rsp],rdx
-
- lea r14,QWORD PTR[1+r14]
- cmp r14,r9
- jb $L$outer
-
- xor r14,r14
- mov rax,QWORD PTR[rsp]
- mov r15,r9
-
-ALIGN 16
-$L$sub:: sbb rax,QWORD PTR[r14*8+rcx]
- mov QWORD PTR[r14*8+rdi],rax
- mov rax,QWORD PTR[8+r14*8+rsp]
- lea r14,QWORD PTR[1+r14]
- dec r15
- jnz $L$sub
-
- sbb rax,0
- mov rbx,-1
- xor rbx,rax
- xor r14,r14
- mov r15,r9
-
-$L$copy::
- mov rcx,QWORD PTR[r14*8+rdi]
- mov rdx,QWORD PTR[r14*8+rsp]
- and rcx,rbx
- and rdx,rax
- mov QWORD PTR[r14*8+rsp],r9
- or rdx,rcx
- mov QWORD PTR[r14*8+rdi],rdx
- lea r14,QWORD PTR[1+r14]
- sub r15,1
- jnz $L$copy
-
- mov rsi,QWORD PTR[8+r9*8+rsp]
-
- mov rax,1
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$mul_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_bn_mul_mont::
-bn_mul_mont ENDP
-
-ALIGN 16
-bn_mul4x_mont PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_bn_mul4x_mont::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov r9d,r9d
- mov rax,rsp
-
-$L$mul4x_enter::
- and r11d,080100h
- cmp r11d,080100h
- je $L$mulx4x_enter
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- neg r9
- mov r11,rsp
- lea r10,QWORD PTR[((-32))+r9*8+rsp]
- neg r9
- and r10,-1024
-
- sub r11,r10
- and r11,-4096
- lea rsp,QWORD PTR[r11*1+r10]
- mov r11,QWORD PTR[rsp]
- cmp rsp,r10
- ja $L$mul4x_page_walk
- jmp $L$mul4x_page_walk_done
-
-$L$mul4x_page_walk::
- lea rsp,QWORD PTR[((-4096))+rsp]
- mov r11,QWORD PTR[rsp]
- cmp rsp,r10
- ja $L$mul4x_page_walk
-$L$mul4x_page_walk_done::
-
- mov QWORD PTR[8+r9*8+rsp],rax
-
-$L$mul4x_body::
- mov QWORD PTR[16+r9*8+rsp],rdi
- mov r12,rdx
- mov r8,QWORD PTR[r8]
- mov rbx,QWORD PTR[r12]
- mov rax,QWORD PTR[rsi]
-
- xor r14,r14
- xor r15,r15
-
- mov rbp,r8
- mul rbx
- mov r10,rax
- mov rax,QWORD PTR[rcx]
-
- imul rbp,r10
- mov r11,rdx
-
- mul rbp
- add r10,rax
- mov rax,QWORD PTR[8+rsi]
- adc rdx,0
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[8+rcx]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[16+rsi]
- adc rdx,0
- add rdi,r11
- lea r15,QWORD PTR[4+r15]
- adc rdx,0
- mov QWORD PTR[rsp],rdi
- mov r13,rdx
- jmp $L$1st4x
-ALIGN 16
-$L$1st4x::
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[((-16))+r15*8+rcx]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[((-8))+r15*8+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-24))+r15*8+rsp],r13
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[((-8))+r15*8+rcx]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[r15*8+rsi]
- adc rdx,0
- add rdi,r11
- adc rdx,0
- mov QWORD PTR[((-16))+r15*8+rsp],rdi
- mov r13,rdx
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[r15*8+rcx]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[8+r15*8+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-8))+r15*8+rsp],r13
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[8+r15*8+rcx]
- adc rdx,0
- lea r15,QWORD PTR[4+r15]
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[((-16))+r15*8+rsi]
- adc rdx,0
- add rdi,r11
- adc rdx,0
- mov QWORD PTR[((-32))+r15*8+rsp],rdi
- mov r13,rdx
- cmp r15,r9
- jb $L$1st4x
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[((-16))+r15*8+rcx]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[((-8))+r15*8+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-24))+r15*8+rsp],r13
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[((-8))+r15*8+rcx]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[rsi]
- adc rdx,0
- add rdi,r11
- adc rdx,0
- mov QWORD PTR[((-16))+r15*8+rsp],rdi
- mov r13,rdx
-
- xor rdi,rdi
- add r13,r10
- adc rdi,0
- mov QWORD PTR[((-8))+r15*8+rsp],r13
- mov QWORD PTR[r15*8+rsp],rdi
-
- lea r14,QWORD PTR[1+r14]
-ALIGN 4
-$L$outer4x::
- mov rbx,QWORD PTR[r14*8+r12]
- xor r15,r15
- mov r10,QWORD PTR[rsp]
- mov rbp,r8
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[rcx]
- adc rdx,0
-
- imul rbp,r10
- mov r11,rdx
-
- mul rbp
- add r10,rax
- mov rax,QWORD PTR[8+rsi]
- adc rdx,0
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[8+rcx]
- adc rdx,0
- add r11,QWORD PTR[8+rsp]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[16+rsi]
- adc rdx,0
- add rdi,r11
- lea r15,QWORD PTR[4+r15]
- adc rdx,0
- mov QWORD PTR[rsp],rdi
- mov r13,rdx
- jmp $L$inner4x
-ALIGN 16
-$L$inner4x::
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[((-16))+r15*8+rcx]
- adc rdx,0
- add r10,QWORD PTR[((-16))+r15*8+rsp]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[((-8))+r15*8+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-24))+r15*8+rsp],r13
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[((-8))+r15*8+rcx]
- adc rdx,0
- add r11,QWORD PTR[((-8))+r15*8+rsp]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[r15*8+rsi]
- adc rdx,0
- add rdi,r11
- adc rdx,0
- mov QWORD PTR[((-16))+r15*8+rsp],rdi
- mov r13,rdx
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[r15*8+rcx]
- adc rdx,0
- add r10,QWORD PTR[r15*8+rsp]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[8+r15*8+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-8))+r15*8+rsp],r13
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[8+r15*8+rcx]
- adc rdx,0
- add r11,QWORD PTR[8+r15*8+rsp]
- adc rdx,0
- lea r15,QWORD PTR[4+r15]
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[((-16))+r15*8+rsi]
- adc rdx,0
- add rdi,r11
- adc rdx,0
- mov QWORD PTR[((-32))+r15*8+rsp],rdi
- mov r13,rdx
- cmp r15,r9
- jb $L$inner4x
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[((-16))+r15*8+rcx]
- adc rdx,0
- add r10,QWORD PTR[((-16))+r15*8+rsp]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[((-8))+r15*8+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-24))+r15*8+rsp],r13
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[((-8))+r15*8+rcx]
- adc rdx,0
- add r11,QWORD PTR[((-8))+r15*8+rsp]
- adc rdx,0
- lea r14,QWORD PTR[1+r14]
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[rsi]
- adc rdx,0
- add rdi,r11
- adc rdx,0
- mov QWORD PTR[((-16))+r15*8+rsp],rdi
- mov r13,rdx
-
- xor rdi,rdi
- add r13,r10
- adc rdi,0
- add r13,QWORD PTR[r9*8+rsp]
- adc rdi,0
- mov QWORD PTR[((-8))+r15*8+rsp],r13
- mov QWORD PTR[r15*8+rsp],rdi
-
- cmp r14,r9
- jb $L$outer4x
- mov rdi,QWORD PTR[16+r9*8+rsp]
- lea r15,QWORD PTR[((-4))+r9]
- mov rax,QWORD PTR[rsp]
- mov rdx,QWORD PTR[8+rsp]
- shr r15,2
- lea rsi,QWORD PTR[rsp]
- xor r14,r14
-
- sub rax,QWORD PTR[rcx]
- mov rbx,QWORD PTR[16+rsi]
- mov rbp,QWORD PTR[24+rsi]
- sbb rdx,QWORD PTR[8+rcx]
-
-$L$sub4x::
- mov QWORD PTR[r14*8+rdi],rax
- mov QWORD PTR[8+r14*8+rdi],rdx
- sbb rbx,QWORD PTR[16+r14*8+rcx]
- mov rax,QWORD PTR[32+r14*8+rsi]
- mov rdx,QWORD PTR[40+r14*8+rsi]
- sbb rbp,QWORD PTR[24+r14*8+rcx]
- mov QWORD PTR[16+r14*8+rdi],rbx
- mov QWORD PTR[24+r14*8+rdi],rbp
- sbb rax,QWORD PTR[32+r14*8+rcx]
- mov rbx,QWORD PTR[48+r14*8+rsi]
- mov rbp,QWORD PTR[56+r14*8+rsi]
- sbb rdx,QWORD PTR[40+r14*8+rcx]
- lea r14,QWORD PTR[4+r14]
- dec r15
- jnz $L$sub4x
-
- mov QWORD PTR[r14*8+rdi],rax
- mov rax,QWORD PTR[32+r14*8+rsi]
- sbb rbx,QWORD PTR[16+r14*8+rcx]
- mov QWORD PTR[8+r14*8+rdi],rdx
- sbb rbp,QWORD PTR[24+r14*8+rcx]
- mov QWORD PTR[16+r14*8+rdi],rbx
-
- sbb rax,0
- mov QWORD PTR[24+r14*8+rdi],rbp
- pxor xmm0,xmm0
-DB 102,72,15,110,224
- pcmpeqd xmm5,xmm5
- pshufd xmm4,xmm4,0
- mov r15,r9
- pxor xmm5,xmm4
- shr r15,2
- xor eax,eax
-
- jmp $L$copy4x
-ALIGN 16
-$L$copy4x::
- movdqa xmm1,XMMWORD PTR[rax*1+rsp]
- movdqu xmm2,XMMWORD PTR[rax*1+rdi]
- pand xmm1,xmm4
- pand xmm2,xmm5
- movdqa xmm3,XMMWORD PTR[16+rax*1+rsp]
- movdqa XMMWORD PTR[rax*1+rsp],xmm0
- por xmm1,xmm2
- movdqu xmm2,XMMWORD PTR[16+rax*1+rdi]
- movdqu XMMWORD PTR[rax*1+rdi],xmm1
- pand xmm3,xmm4
- pand xmm2,xmm5
- movdqa XMMWORD PTR[16+rax*1+rsp],xmm0
- por xmm3,xmm2
- movdqu XMMWORD PTR[16+rax*1+rdi],xmm3
- lea rax,QWORD PTR[32+rax]
- dec r15
- jnz $L$copy4x
- mov rsi,QWORD PTR[8+r9*8+rsp]
-
- mov rax,1
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$mul4x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_bn_mul4x_mont::
-bn_mul4x_mont ENDP
-EXTERN bn_sqrx8x_internal:NEAR
-EXTERN bn_sqr8x_internal:NEAR
-
-
-ALIGN 32
-bn_sqr8x_mont PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_bn_sqr8x_mont::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov rax,rsp
-
-$L$sqr8x_enter::
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$sqr8x_prologue::
-
- mov r10d,r9d
- shl r9d,3
- shl r10,3+2
- neg r9
-
-
-
-
-
-
- lea r11,QWORD PTR[((-64))+r9*2+rsp]
- mov rbp,rsp
- mov r8,QWORD PTR[r8]
- sub r11,rsi
- and r11,4095
- cmp r10,r11
- jb $L$sqr8x_sp_alt
- sub rbp,r11
- lea rbp,QWORD PTR[((-64))+r9*2+rbp]
- jmp $L$sqr8x_sp_done
-
-ALIGN 32
-$L$sqr8x_sp_alt::
- lea r10,QWORD PTR[((4096-64))+r9*2]
- lea rbp,QWORD PTR[((-64))+r9*2+rbp]
- sub r11,r10
- mov r10,0
- cmovc r11,r10
- sub rbp,r11
-$L$sqr8x_sp_done::
- and rbp,-64
- mov r11,rsp
- sub r11,rbp
- and r11,-4096
- lea rsp,QWORD PTR[rbp*1+r11]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$sqr8x_page_walk
- jmp $L$sqr8x_page_walk_done
-
-ALIGN 16
-$L$sqr8x_page_walk::
- lea rsp,QWORD PTR[((-4096))+rsp]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$sqr8x_page_walk
-$L$sqr8x_page_walk_done::
-
- mov r10,r9
- neg r9
-
- mov QWORD PTR[32+rsp],r8
- mov QWORD PTR[40+rsp],rax
-
-$L$sqr8x_body::
-
-DB 102,72,15,110,209
- pxor xmm0,xmm0
-DB 102,72,15,110,207
-DB 102,73,15,110,218
- mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- and eax,080100h
- cmp eax,080100h
- jne $L$sqr8x_nox
-
- call bn_sqrx8x_internal
-
-
-
-
- lea rbx,QWORD PTR[rcx*1+r8]
- mov r9,rcx
- mov rdx,rcx
-DB 102,72,15,126,207
- sar rcx,3+2
- jmp $L$sqr8x_sub
-
-ALIGN 32
-$L$sqr8x_nox::
- call bn_sqr8x_internal
-
-
-
-
- lea rbx,QWORD PTR[r9*1+rdi]
- mov rcx,r9
- mov rdx,r9
-DB 102,72,15,126,207
- sar rcx,3+2
- jmp $L$sqr8x_sub
-
-ALIGN 32
-$L$sqr8x_sub::
- mov r12,QWORD PTR[rbx]
- mov r13,QWORD PTR[8+rbx]
- mov r14,QWORD PTR[16+rbx]
- mov r15,QWORD PTR[24+rbx]
- lea rbx,QWORD PTR[32+rbx]
- sbb r12,QWORD PTR[rbp]
- sbb r13,QWORD PTR[8+rbp]
- sbb r14,QWORD PTR[16+rbp]
- sbb r15,QWORD PTR[24+rbp]
- lea rbp,QWORD PTR[32+rbp]
- mov QWORD PTR[rdi],r12
- mov QWORD PTR[8+rdi],r13
- mov QWORD PTR[16+rdi],r14
- mov QWORD PTR[24+rdi],r15
- lea rdi,QWORD PTR[32+rdi]
- inc rcx
- jnz $L$sqr8x_sub
-
- sbb rax,0
- lea rbx,QWORD PTR[r9*1+rbx]
- lea rdi,QWORD PTR[r9*1+rdi]
-
-DB 102,72,15,110,200
- pxor xmm0,xmm0
- pshufd xmm1,xmm1,0
- mov rsi,QWORD PTR[40+rsp]
-
- jmp $L$sqr8x_cond_copy
-
-ALIGN 32
-$L$sqr8x_cond_copy::
- movdqa xmm2,XMMWORD PTR[rbx]
- movdqa xmm3,XMMWORD PTR[16+rbx]
- lea rbx,QWORD PTR[32+rbx]
- movdqu xmm4,XMMWORD PTR[rdi]
- movdqu xmm5,XMMWORD PTR[16+rdi]
- lea rdi,QWORD PTR[32+rdi]
- movdqa XMMWORD PTR[(-32)+rbx],xmm0
- movdqa XMMWORD PTR[(-16)+rbx],xmm0
- movdqa XMMWORD PTR[(-32)+rdx*1+rbx],xmm0
- movdqa XMMWORD PTR[(-16)+rdx*1+rbx],xmm0
- pcmpeqd xmm0,xmm1
- pand xmm2,xmm1
- pand xmm3,xmm1
- pand xmm4,xmm0
- pand xmm5,xmm0
- pxor xmm0,xmm0
- por xmm4,xmm2
- por xmm5,xmm3
- movdqu XMMWORD PTR[(-32)+rdi],xmm4
- movdqu XMMWORD PTR[(-16)+rdi],xmm5
- add r9,32
- jnz $L$sqr8x_cond_copy
-
- mov rax,1
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$sqr8x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_bn_sqr8x_mont::
-bn_sqr8x_mont ENDP
-
-ALIGN 32
-bn_mulx4x_mont PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_bn_mulx4x_mont::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov rax,rsp
-
-$L$mulx4x_enter::
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$mulx4x_prologue::
-
- shl r9d,3
- xor r10,r10
- sub r10,r9
- mov r8,QWORD PTR[r8]
- lea rbp,QWORD PTR[((-72))+r10*1+rsp]
- and rbp,-128
- mov r11,rsp
- sub r11,rbp
- and r11,-4096
- lea rsp,QWORD PTR[rbp*1+r11]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$mulx4x_page_walk
- jmp $L$mulx4x_page_walk_done
-
-ALIGN 16
-$L$mulx4x_page_walk::
- lea rsp,QWORD PTR[((-4096))+rsp]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$mulx4x_page_walk
-$L$mulx4x_page_walk_done::
-
- lea r10,QWORD PTR[r9*1+rdx]
-
-
-
-
-
-
-
-
-
-
-
-
- mov QWORD PTR[rsp],r9
- shr r9,5
- mov QWORD PTR[16+rsp],r10
- sub r9,1
- mov QWORD PTR[24+rsp],r8
- mov QWORD PTR[32+rsp],rdi
- mov QWORD PTR[40+rsp],rax
-
- mov QWORD PTR[48+rsp],r9
- jmp $L$mulx4x_body
-
-ALIGN 32
-$L$mulx4x_body::
- lea rdi,QWORD PTR[8+rdx]
- mov rdx,QWORD PTR[rdx]
- lea rbx,QWORD PTR[((64+32))+rsp]
- mov r9,rdx
-
- mulx rax,r8,QWORD PTR[rsi]
- mulx r14,r11,QWORD PTR[8+rsi]
- add r11,rax
- mov QWORD PTR[8+rsp],rdi
- mulx r13,r12,QWORD PTR[16+rsi]
- adc r12,r14
- adc r13,0
-
- mov rdi,r8
- imul r8,QWORD PTR[24+rsp]
- xor rbp,rbp
-
- mulx r14,rax,QWORD PTR[24+rsi]
- mov rdx,r8
- lea rsi,QWORD PTR[32+rsi]
- adcx r13,rax
- adcx r14,rbp
-
- mulx r10,rax,QWORD PTR[rcx]
- adcx rdi,rax
- adox r10,r11
- mulx r11,rax,QWORD PTR[8+rcx]
- adcx r10,rax
- adox r11,r12
-DB 0c4h,062h,0fbh,0f6h,0a1h,010h,000h,000h,000h
- mov rdi,QWORD PTR[48+rsp]
- mov QWORD PTR[((-32))+rbx],r10
- adcx r11,rax
- adox r12,r13
- mulx r15,rax,QWORD PTR[24+rcx]
- mov rdx,r9
- mov QWORD PTR[((-24))+rbx],r11
- adcx r12,rax
- adox r15,rbp
- lea rcx,QWORD PTR[32+rcx]
- mov QWORD PTR[((-16))+rbx],r12
-
- jmp $L$mulx4x_1st
-
-ALIGN 32
-$L$mulx4x_1st::
- adcx r15,rbp
- mulx rax,r10,QWORD PTR[rsi]
- adcx r10,r14
- mulx r14,r11,QWORD PTR[8+rsi]
- adcx r11,rax
- mulx rax,r12,QWORD PTR[16+rsi]
- adcx r12,r14
- mulx r14,r13,QWORD PTR[24+rsi]
-DB 067h,067h
- mov rdx,r8
- adcx r13,rax
- adcx r14,rbp
- lea rsi,QWORD PTR[32+rsi]
- lea rbx,QWORD PTR[32+rbx]
-
- adox r10,r15
- mulx r15,rax,QWORD PTR[rcx]
- adcx r10,rax
- adox r11,r15
- mulx r15,rax,QWORD PTR[8+rcx]
- adcx r11,rax
- adox r12,r15
- mulx r15,rax,QWORD PTR[16+rcx]
- mov QWORD PTR[((-40))+rbx],r10
- adcx r12,rax
- mov QWORD PTR[((-32))+rbx],r11
- adox r13,r15
- mulx r15,rax,QWORD PTR[24+rcx]
- mov rdx,r9
- mov QWORD PTR[((-24))+rbx],r12
- adcx r13,rax
- adox r15,rbp
- lea rcx,QWORD PTR[32+rcx]
- mov QWORD PTR[((-16))+rbx],r13
-
- dec rdi
- jnz $L$mulx4x_1st
-
- mov rax,QWORD PTR[rsp]
- mov rdi,QWORD PTR[8+rsp]
- adc r15,rbp
- add r14,r15
- sbb r15,r15
- mov QWORD PTR[((-8))+rbx],r14
- jmp $L$mulx4x_outer
-
-ALIGN 32
-$L$mulx4x_outer::
- mov rdx,QWORD PTR[rdi]
- lea rdi,QWORD PTR[8+rdi]
- sub rsi,rax
- mov QWORD PTR[rbx],r15
- lea rbx,QWORD PTR[((64+32))+rsp]
- sub rcx,rax
-
- mulx r11,r8,QWORD PTR[rsi]
- xor ebp,ebp
- mov r9,rdx
- mulx r12,r14,QWORD PTR[8+rsi]
- adox r8,QWORD PTR[((-32))+rbx]
- adcx r11,r14
- mulx r13,r15,QWORD PTR[16+rsi]
- adox r11,QWORD PTR[((-24))+rbx]
- adcx r12,r15
- adox r12,QWORD PTR[((-16))+rbx]
- adcx r13,rbp
- adox r13,rbp
-
- mov QWORD PTR[8+rsp],rdi
- mov r15,r8
- imul r8,QWORD PTR[24+rsp]
- xor ebp,ebp
-
- mulx r14,rax,QWORD PTR[24+rsi]
- mov rdx,r8
- adcx r13,rax
- adox r13,QWORD PTR[((-8))+rbx]
- adcx r14,rbp
- lea rsi,QWORD PTR[32+rsi]
- adox r14,rbp
-
- mulx r10,rax,QWORD PTR[rcx]
- adcx r15,rax
- adox r10,r11
- mulx r11,rax,QWORD PTR[8+rcx]
- adcx r10,rax
- adox r11,r12
- mulx r12,rax,QWORD PTR[16+rcx]
- mov QWORD PTR[((-32))+rbx],r10
- adcx r11,rax
- adox r12,r13
- mulx r15,rax,QWORD PTR[24+rcx]
- mov rdx,r9
- mov QWORD PTR[((-24))+rbx],r11
- lea rcx,QWORD PTR[32+rcx]
- adcx r12,rax
- adox r15,rbp
- mov rdi,QWORD PTR[48+rsp]
- mov QWORD PTR[((-16))+rbx],r12
-
- jmp $L$mulx4x_inner
-
-ALIGN 32
-$L$mulx4x_inner::
- mulx rax,r10,QWORD PTR[rsi]
- adcx r15,rbp
- adox r10,r14
- mulx r14,r11,QWORD PTR[8+rsi]
- adcx r10,QWORD PTR[rbx]
- adox r11,rax
- mulx rax,r12,QWORD PTR[16+rsi]
- adcx r11,QWORD PTR[8+rbx]
- adox r12,r14
- mulx r14,r13,QWORD PTR[24+rsi]
- mov rdx,r8
- adcx r12,QWORD PTR[16+rbx]
- adox r13,rax
- adcx r13,QWORD PTR[24+rbx]
- adox r14,rbp
- lea rsi,QWORD PTR[32+rsi]
- lea rbx,QWORD PTR[32+rbx]
- adcx r14,rbp
-
- adox r10,r15
- mulx r15,rax,QWORD PTR[rcx]
- adcx r10,rax
- adox r11,r15
- mulx r15,rax,QWORD PTR[8+rcx]
- adcx r11,rax
- adox r12,r15
- mulx r15,rax,QWORD PTR[16+rcx]
- mov QWORD PTR[((-40))+rbx],r10
- adcx r12,rax
- adox r13,r15
- mulx r15,rax,QWORD PTR[24+rcx]
- mov rdx,r9
- mov QWORD PTR[((-32))+rbx],r11
- mov QWORD PTR[((-24))+rbx],r12
- adcx r13,rax
- adox r15,rbp
- lea rcx,QWORD PTR[32+rcx]
- mov QWORD PTR[((-16))+rbx],r13
-
- dec rdi
- jnz $L$mulx4x_inner
-
- mov rax,QWORD PTR[rsp]
- mov rdi,QWORD PTR[8+rsp]
- adc r15,rbp
- sub rbp,QWORD PTR[rbx]
- adc r14,r15
- sbb r15,r15
- mov QWORD PTR[((-8))+rbx],r14
-
- cmp rdi,QWORD PTR[16+rsp]
- jne $L$mulx4x_outer
-
- lea rbx,QWORD PTR[64+rsp]
- sub rcx,rax
- neg r15
- mov rdx,rax
- shr rax,3+2
- mov rdi,QWORD PTR[32+rsp]
- jmp $L$mulx4x_sub
-
-ALIGN 32
-$L$mulx4x_sub::
- mov r11,QWORD PTR[rbx]
- mov r12,QWORD PTR[8+rbx]
- mov r13,QWORD PTR[16+rbx]
- mov r14,QWORD PTR[24+rbx]
- lea rbx,QWORD PTR[32+rbx]
- sbb r11,QWORD PTR[rcx]
- sbb r12,QWORD PTR[8+rcx]
- sbb r13,QWORD PTR[16+rcx]
- sbb r14,QWORD PTR[24+rcx]
- lea rcx,QWORD PTR[32+rcx]
- mov QWORD PTR[rdi],r11
- mov QWORD PTR[8+rdi],r12
- mov QWORD PTR[16+rdi],r13
- mov QWORD PTR[24+rdi],r14
- lea rdi,QWORD PTR[32+rdi]
- dec rax
- jnz $L$mulx4x_sub
-
- sbb r15,0
- lea rbx,QWORD PTR[64+rsp]
- sub rdi,rdx
-
-DB 102,73,15,110,207
- pxor xmm0,xmm0
- pshufd xmm1,xmm1,0
- mov rsi,QWORD PTR[40+rsp]
-
- jmp $L$mulx4x_cond_copy
-
-ALIGN 32
-$L$mulx4x_cond_copy::
- movdqa xmm2,XMMWORD PTR[rbx]
- movdqa xmm3,XMMWORD PTR[16+rbx]
- lea rbx,QWORD PTR[32+rbx]
- movdqu xmm4,XMMWORD PTR[rdi]
- movdqu xmm5,XMMWORD PTR[16+rdi]
- lea rdi,QWORD PTR[32+rdi]
- movdqa XMMWORD PTR[(-32)+rbx],xmm0
- movdqa XMMWORD PTR[(-16)+rbx],xmm0
- pcmpeqd xmm0,xmm1
- pand xmm2,xmm1
- pand xmm3,xmm1
- pand xmm4,xmm0
- pand xmm5,xmm0
- pxor xmm0,xmm0
- por xmm4,xmm2
- por xmm5,xmm3
- movdqu XMMWORD PTR[(-32)+rdi],xmm4
- movdqu XMMWORD PTR[(-16)+rdi],xmm5
- sub rdx,32
- jnz $L$mulx4x_cond_copy
-
- mov QWORD PTR[rbx],rdx
-
- mov rax,1
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$mulx4x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_bn_mulx4x_mont::
-bn_mulx4x_mont ENDP
-DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
-DB 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
-DB 54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83
-DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
-DB 115,108,46,111,114,103,62,0
-ALIGN 16
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-mul_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- mov r10,QWORD PTR[192+r8]
- mov rax,QWORD PTR[8+r10*8+rax]
-
- jmp $L$common_pop_regs
-mul_handler ENDP
-
-
-ALIGN 16
-sqr_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_pop_regs
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[8+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- mov rax,QWORD PTR[40+rax]
-
-$L$common_pop_regs::
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-sqr_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_bn_mul_mont
- DD imagerel $L$SEH_end_bn_mul_mont
- DD imagerel $L$SEH_info_bn_mul_mont
-
- DD imagerel $L$SEH_begin_bn_mul4x_mont
- DD imagerel $L$SEH_end_bn_mul4x_mont
- DD imagerel $L$SEH_info_bn_mul4x_mont
-
- DD imagerel $L$SEH_begin_bn_sqr8x_mont
- DD imagerel $L$SEH_end_bn_sqr8x_mont
- DD imagerel $L$SEH_info_bn_sqr8x_mont
- DD imagerel $L$SEH_begin_bn_mulx4x_mont
- DD imagerel $L$SEH_end_bn_mulx4x_mont
- DD imagerel $L$SEH_info_bn_mulx4x_mont
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_bn_mul_mont::
-DB 9,0,0,0
- DD imagerel mul_handler
- DD imagerel $L$mul_body,imagerel $L$mul_epilogue
-$L$SEH_info_bn_mul4x_mont::
-DB 9,0,0,0
- DD imagerel mul_handler
- DD imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue
-$L$SEH_info_bn_sqr8x_mont::
-DB 9,0,0,0
- DD imagerel sqr_handler
- DD imagerel $L$sqr8x_prologue,imagerel $L$sqr8x_body,imagerel $L$sqr8x_epilogue
-ALIGN 8
-$L$SEH_info_bn_mulx4x_mont::
-DB 9,0,0,0
- DD imagerel sqr_handler
- DD imagerel $L$mulx4x_prologue,imagerel $L$mulx4x_body,imagerel $L$mulx4x_epilogue
-ALIGN 8
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC bn_mul_mont
+
+ALIGN 16
+bn_mul_mont PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_bn_mul_mont::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov r9d,r9d
+ mov rax,rsp
+
+ test r9d,3
+ jnz $L$mul_enter
+ cmp r9d,8
+ jb $L$mul_enter
+ mov r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ cmp rdx,rsi
+ jne $L$mul4x_enter
+ test r9d,7
+ jz $L$sqr8x_enter
+ jmp $L$mul4x_enter
+
+ALIGN 16
+$L$mul_enter::
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ neg r9
+ mov r11,rsp
+ lea r10,QWORD PTR[((-16))+r9*8+rsp]
+ neg r9
+ and r10,-1024
+
+
+
+
+
+
+
+
+
+ sub r11,r10
+ and r11,-4096
+ lea rsp,QWORD PTR[r11*1+r10]
+ mov r11,QWORD PTR[rsp]
+ cmp rsp,r10
+ ja $L$mul_page_walk
+ jmp $L$mul_page_walk_done
+
+ALIGN 16
+$L$mul_page_walk::
+ lea rsp,QWORD PTR[((-4096))+rsp]
+ mov r11,QWORD PTR[rsp]
+ cmp rsp,r10
+ ja $L$mul_page_walk
+$L$mul_page_walk_done::
+
+ mov QWORD PTR[8+r9*8+rsp],rax
+
+$L$mul_body::
+ mov r12,rdx
+ mov r8,QWORD PTR[r8]
+ mov rbx,QWORD PTR[r12]
+ mov rax,QWORD PTR[rsi]
+
+ xor r14,r14
+ xor r15,r15
+
+ mov rbp,r8
+ mul rbx
+ mov r10,rax
+ mov rax,QWORD PTR[rcx]
+
+ imul rbp,r10
+ mov r11,rdx
+
+ mul rbp
+ add r10,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rdx,0
+ mov r13,rdx
+
+ lea r15,QWORD PTR[1+r15]
+ jmp $L$1st_enter
+
+ALIGN 16
+$L$1st::
+ add r13,rax
+ mov rax,QWORD PTR[r15*8+rsi]
+ adc rdx,0
+ add r13,r11
+ mov r11,r10
+ adc rdx,0
+ mov QWORD PTR[((-16))+r15*8+rsp],r13
+ mov r13,rdx
+
+$L$1st_enter::
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[r15*8+rcx]
+ adc rdx,0
+ lea r15,QWORD PTR[1+r15]
+ mov r10,rdx
+
+ mul rbp
+ cmp r15,r9
+ jne $L$1st
+
+ add r13,rax
+ mov rax,QWORD PTR[rsi]
+ adc rdx,0
+ add r13,r11
+ adc rdx,0
+ mov QWORD PTR[((-16))+r15*8+rsp],r13
+ mov r13,rdx
+ mov r11,r10
+
+ xor rdx,rdx
+ add r13,r11
+ adc rdx,0
+ mov QWORD PTR[((-8))+r9*8+rsp],r13
+ mov QWORD PTR[r9*8+rsp],rdx
+
+ lea r14,QWORD PTR[1+r14]
+ jmp $L$outer
+ALIGN 16
+$L$outer::
+ mov rbx,QWORD PTR[r14*8+r12]
+ xor r15,r15
+ mov rbp,r8
+ mov r10,QWORD PTR[rsp]
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[rcx]
+ adc rdx,0
+
+ imul rbp,r10
+ mov r11,rdx
+
+ mul rbp
+ add r10,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rdx,0
+ mov r10,QWORD PTR[8+rsp]
+ mov r13,rdx
+
+ lea r15,QWORD PTR[1+r15]
+ jmp $L$inner_enter
+
+ALIGN 16
+$L$inner::
+ add r13,rax
+ mov rax,QWORD PTR[r15*8+rsi]
+ adc rdx,0
+ add r13,r10
+ mov r10,QWORD PTR[r15*8+rsp]
+ adc rdx,0
+ mov QWORD PTR[((-16))+r15*8+rsp],r13
+ mov r13,rdx
+
+$L$inner_enter::
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[r15*8+rcx]
+ adc rdx,0
+ add r10,r11
+ mov r11,rdx
+ adc r11,0
+ lea r15,QWORD PTR[1+r15]
+
+ mul rbp
+ cmp r15,r9
+ jne $L$inner
+
+ add r13,rax
+ mov rax,QWORD PTR[rsi]
+ adc rdx,0
+ add r13,r10
+ mov r10,QWORD PTR[r15*8+rsp]
+ adc rdx,0
+ mov QWORD PTR[((-16))+r15*8+rsp],r13
+ mov r13,rdx
+
+ xor rdx,rdx
+ add r13,r11
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-8))+r9*8+rsp],r13
+ mov QWORD PTR[r9*8+rsp],rdx
+
+ lea r14,QWORD PTR[1+r14]
+ cmp r14,r9
+ jb $L$outer
+
+ xor r14,r14
+ mov rax,QWORD PTR[rsp]
+ mov r15,r9
+
+ALIGN 16
+$L$sub:: sbb rax,QWORD PTR[r14*8+rcx]
+ mov QWORD PTR[r14*8+rdi],rax
+ mov rax,QWORD PTR[8+r14*8+rsp]
+ lea r14,QWORD PTR[1+r14]
+ dec r15
+ jnz $L$sub
+
+ sbb rax,0
+ mov rbx,-1
+ xor rbx,rax
+ xor r14,r14
+ mov r15,r9
+
+$L$copy::
+ mov rcx,QWORD PTR[r14*8+rdi]
+ mov rdx,QWORD PTR[r14*8+rsp]
+ and rcx,rbx
+ and rdx,rax
+ mov QWORD PTR[r14*8+rsp],r9
+ or rdx,rcx
+ mov QWORD PTR[r14*8+rdi],rdx
+ lea r14,QWORD PTR[1+r14]
+ sub r15,1
+ jnz $L$copy
+
+ mov rsi,QWORD PTR[8+r9*8+rsp]
+
+ mov rax,1
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$mul_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_bn_mul_mont::
+bn_mul_mont ENDP
+
+ALIGN 16
+bn_mul4x_mont PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_bn_mul4x_mont::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov r9d,r9d
+ mov rax,rsp
+
+$L$mul4x_enter::
+ and r11d,080100h
+ cmp r11d,080100h
+ je $L$mulx4x_enter
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ neg r9
+ mov r11,rsp
+ lea r10,QWORD PTR[((-32))+r9*8+rsp]
+ neg r9
+ and r10,-1024
+
+ sub r11,r10
+ and r11,-4096
+ lea rsp,QWORD PTR[r11*1+r10]
+ mov r11,QWORD PTR[rsp]
+ cmp rsp,r10
+ ja $L$mul4x_page_walk
+ jmp $L$mul4x_page_walk_done
+
+$L$mul4x_page_walk::
+ lea rsp,QWORD PTR[((-4096))+rsp]
+ mov r11,QWORD PTR[rsp]
+ cmp rsp,r10
+ ja $L$mul4x_page_walk
+$L$mul4x_page_walk_done::
+
+ mov QWORD PTR[8+r9*8+rsp],rax
+
+$L$mul4x_body::
+ mov QWORD PTR[16+r9*8+rsp],rdi
+ mov r12,rdx
+ mov r8,QWORD PTR[r8]
+ mov rbx,QWORD PTR[r12]
+ mov rax,QWORD PTR[rsi]
+
+ xor r14,r14
+ xor r15,r15
+
+ mov rbp,r8
+ mul rbx
+ mov r10,rax
+ mov rax,QWORD PTR[rcx]
+
+ imul rbp,r10
+ mov r11,rdx
+
+ mul rbp
+ add r10,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rdx,0
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[8+rcx]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[16+rsi]
+ adc rdx,0
+ add rdi,r11
+ lea r15,QWORD PTR[4+r15]
+ adc rdx,0
+ mov QWORD PTR[rsp],rdi
+ mov r13,rdx
+ jmp $L$1st4x
+ALIGN 16
+$L$1st4x::
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[((-16))+r15*8+rcx]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[((-8))+r15*8+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-24))+r15*8+rsp],r13
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[((-8))+r15*8+rcx]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[r15*8+rsi]
+ adc rdx,0
+ add rdi,r11
+ adc rdx,0
+ mov QWORD PTR[((-16))+r15*8+rsp],rdi
+ mov r13,rdx
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[r15*8+rcx]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[8+r15*8+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-8))+r15*8+rsp],r13
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[8+r15*8+rcx]
+ adc rdx,0
+ lea r15,QWORD PTR[4+r15]
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[((-16))+r15*8+rsi]
+ adc rdx,0
+ add rdi,r11
+ adc rdx,0
+ mov QWORD PTR[((-32))+r15*8+rsp],rdi
+ mov r13,rdx
+ cmp r15,r9
+ jb $L$1st4x
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[((-16))+r15*8+rcx]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[((-8))+r15*8+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-24))+r15*8+rsp],r13
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[((-8))+r15*8+rcx]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[rsi]
+ adc rdx,0
+ add rdi,r11
+ adc rdx,0
+ mov QWORD PTR[((-16))+r15*8+rsp],rdi
+ mov r13,rdx
+
+ xor rdi,rdi
+ add r13,r10
+ adc rdi,0
+ mov QWORD PTR[((-8))+r15*8+rsp],r13
+ mov QWORD PTR[r15*8+rsp],rdi
+
+ lea r14,QWORD PTR[1+r14]
+ALIGN 4
+$L$outer4x::
+ mov rbx,QWORD PTR[r14*8+r12]
+ xor r15,r15
+ mov r10,QWORD PTR[rsp]
+ mov rbp,r8
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[rcx]
+ adc rdx,0
+
+ imul rbp,r10
+ mov r11,rdx
+
+ mul rbp
+ add r10,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rdx,0
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[8+rcx]
+ adc rdx,0
+ add r11,QWORD PTR[8+rsp]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[16+rsi]
+ adc rdx,0
+ add rdi,r11
+ lea r15,QWORD PTR[4+r15]
+ adc rdx,0
+ mov QWORD PTR[rsp],rdi
+ mov r13,rdx
+ jmp $L$inner4x
+ALIGN 16
+$L$inner4x::
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[((-16))+r15*8+rcx]
+ adc rdx,0
+ add r10,QWORD PTR[((-16))+r15*8+rsp]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[((-8))+r15*8+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-24))+r15*8+rsp],r13
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[((-8))+r15*8+rcx]
+ adc rdx,0
+ add r11,QWORD PTR[((-8))+r15*8+rsp]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[r15*8+rsi]
+ adc rdx,0
+ add rdi,r11
+ adc rdx,0
+ mov QWORD PTR[((-16))+r15*8+rsp],rdi
+ mov r13,rdx
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[r15*8+rcx]
+ adc rdx,0
+ add r10,QWORD PTR[r15*8+rsp]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[8+r15*8+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-8))+r15*8+rsp],r13
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[8+r15*8+rcx]
+ adc rdx,0
+ add r11,QWORD PTR[8+r15*8+rsp]
+ adc rdx,0
+ lea r15,QWORD PTR[4+r15]
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[((-16))+r15*8+rsi]
+ adc rdx,0
+ add rdi,r11
+ adc rdx,0
+ mov QWORD PTR[((-32))+r15*8+rsp],rdi
+ mov r13,rdx
+ cmp r15,r9
+ jb $L$inner4x
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[((-16))+r15*8+rcx]
+ adc rdx,0
+ add r10,QWORD PTR[((-16))+r15*8+rsp]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[((-8))+r15*8+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-24))+r15*8+rsp],r13
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[((-8))+r15*8+rcx]
+ adc rdx,0
+ add r11,QWORD PTR[((-8))+r15*8+rsp]
+ adc rdx,0
+ lea r14,QWORD PTR[1+r14]
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[rsi]
+ adc rdx,0
+ add rdi,r11
+ adc rdx,0
+ mov QWORD PTR[((-16))+r15*8+rsp],rdi
+ mov r13,rdx
+
+ xor rdi,rdi
+ add r13,r10
+ adc rdi,0
+ add r13,QWORD PTR[r9*8+rsp]
+ adc rdi,0
+ mov QWORD PTR[((-8))+r15*8+rsp],r13
+ mov QWORD PTR[r15*8+rsp],rdi
+
+ cmp r14,r9
+ jb $L$outer4x
+ mov rdi,QWORD PTR[16+r9*8+rsp]
+ lea r15,QWORD PTR[((-4))+r9]
+ mov rax,QWORD PTR[rsp]
+ mov rdx,QWORD PTR[8+rsp]
+ shr r15,2
+ lea rsi,QWORD PTR[rsp]
+ xor r14,r14
+
+ sub rax,QWORD PTR[rcx]
+ mov rbx,QWORD PTR[16+rsi]
+ mov rbp,QWORD PTR[24+rsi]
+ sbb rdx,QWORD PTR[8+rcx]
+
+$L$sub4x::
+ mov QWORD PTR[r14*8+rdi],rax
+ mov QWORD PTR[8+r14*8+rdi],rdx
+ sbb rbx,QWORD PTR[16+r14*8+rcx]
+ mov rax,QWORD PTR[32+r14*8+rsi]
+ mov rdx,QWORD PTR[40+r14*8+rsi]
+ sbb rbp,QWORD PTR[24+r14*8+rcx]
+ mov QWORD PTR[16+r14*8+rdi],rbx
+ mov QWORD PTR[24+r14*8+rdi],rbp
+ sbb rax,QWORD PTR[32+r14*8+rcx]
+ mov rbx,QWORD PTR[48+r14*8+rsi]
+ mov rbp,QWORD PTR[56+r14*8+rsi]
+ sbb rdx,QWORD PTR[40+r14*8+rcx]
+ lea r14,QWORD PTR[4+r14]
+ dec r15
+ jnz $L$sub4x
+
+ mov QWORD PTR[r14*8+rdi],rax
+ mov rax,QWORD PTR[32+r14*8+rsi]
+ sbb rbx,QWORD PTR[16+r14*8+rcx]
+ mov QWORD PTR[8+r14*8+rdi],rdx
+ sbb rbp,QWORD PTR[24+r14*8+rcx]
+ mov QWORD PTR[16+r14*8+rdi],rbx
+
+ sbb rax,0
+ mov QWORD PTR[24+r14*8+rdi],rbp
+ pxor xmm0,xmm0
+DB 102,72,15,110,224
+ pcmpeqd xmm5,xmm5
+ pshufd xmm4,xmm4,0
+ mov r15,r9
+ pxor xmm5,xmm4
+ shr r15,2
+ xor eax,eax
+
+ jmp $L$copy4x
+ALIGN 16
+$L$copy4x::
+ movdqa xmm1,XMMWORD PTR[rax*1+rsp]
+ movdqu xmm2,XMMWORD PTR[rax*1+rdi]
+ pand xmm1,xmm4
+ pand xmm2,xmm5
+ movdqa xmm3,XMMWORD PTR[16+rax*1+rsp]
+ movdqa XMMWORD PTR[rax*1+rsp],xmm0
+ por xmm1,xmm2
+ movdqu xmm2,XMMWORD PTR[16+rax*1+rdi]
+ movdqu XMMWORD PTR[rax*1+rdi],xmm1
+ pand xmm3,xmm4
+ pand xmm2,xmm5
+ movdqa XMMWORD PTR[16+rax*1+rsp],xmm0
+ por xmm3,xmm2
+ movdqu XMMWORD PTR[16+rax*1+rdi],xmm3
+ lea rax,QWORD PTR[32+rax]
+ dec r15
+ jnz $L$copy4x
+ mov rsi,QWORD PTR[8+r9*8+rsp]
+
+ mov rax,1
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$mul4x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_bn_mul4x_mont::
+bn_mul4x_mont ENDP
+EXTERN bn_sqrx8x_internal:NEAR
+EXTERN bn_sqr8x_internal:NEAR
+
+
+ALIGN 32
+bn_sqr8x_mont PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_bn_sqr8x_mont::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov rax,rsp
+
+$L$sqr8x_enter::
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$sqr8x_prologue::
+
+ mov r10d,r9d
+ shl r9d,3
+ shl r10,3+2
+ neg r9
+
+
+
+
+
+
+ lea r11,QWORD PTR[((-64))+r9*2+rsp]
+ mov rbp,rsp
+ mov r8,QWORD PTR[r8]
+ sub r11,rsi
+ and r11,4095
+ cmp r10,r11
+ jb $L$sqr8x_sp_alt
+ sub rbp,r11
+ lea rbp,QWORD PTR[((-64))+r9*2+rbp]
+ jmp $L$sqr8x_sp_done
+
+ALIGN 32
+$L$sqr8x_sp_alt::
+ lea r10,QWORD PTR[((4096-64))+r9*2]
+ lea rbp,QWORD PTR[((-64))+r9*2+rbp]
+ sub r11,r10
+ mov r10,0
+ cmovc r11,r10
+ sub rbp,r11
+$L$sqr8x_sp_done::
+ and rbp,-64
+ mov r11,rsp
+ sub r11,rbp
+ and r11,-4096
+ lea rsp,QWORD PTR[rbp*1+r11]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$sqr8x_page_walk
+ jmp $L$sqr8x_page_walk_done
+
+ALIGN 16
+$L$sqr8x_page_walk::
+ lea rsp,QWORD PTR[((-4096))+rsp]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$sqr8x_page_walk
+$L$sqr8x_page_walk_done::
+
+ mov r10,r9
+ neg r9
+
+ mov QWORD PTR[32+rsp],r8
+ mov QWORD PTR[40+rsp],rax
+
+$L$sqr8x_body::
+
+DB 102,72,15,110,209
+ pxor xmm0,xmm0
+DB 102,72,15,110,207
+DB 102,73,15,110,218
+ mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ and eax,080100h
+ cmp eax,080100h
+ jne $L$sqr8x_nox
+
+ call bn_sqrx8x_internal
+
+
+
+
+ lea rbx,QWORD PTR[rcx*1+r8]
+ mov r9,rcx
+ mov rdx,rcx
+DB 102,72,15,126,207
+ sar rcx,3+2
+ jmp $L$sqr8x_sub
+
+ALIGN 32
+$L$sqr8x_nox::
+ call bn_sqr8x_internal
+
+
+
+
+ lea rbx,QWORD PTR[r9*1+rdi]
+ mov rcx,r9
+ mov rdx,r9
+DB 102,72,15,126,207
+ sar rcx,3+2
+ jmp $L$sqr8x_sub
+
+ALIGN 32
+$L$sqr8x_sub::
+ mov r12,QWORD PTR[rbx]
+ mov r13,QWORD PTR[8+rbx]
+ mov r14,QWORD PTR[16+rbx]
+ mov r15,QWORD PTR[24+rbx]
+ lea rbx,QWORD PTR[32+rbx]
+ sbb r12,QWORD PTR[rbp]
+ sbb r13,QWORD PTR[8+rbp]
+ sbb r14,QWORD PTR[16+rbp]
+ sbb r15,QWORD PTR[24+rbp]
+ lea rbp,QWORD PTR[32+rbp]
+ mov QWORD PTR[rdi],r12
+ mov QWORD PTR[8+rdi],r13
+ mov QWORD PTR[16+rdi],r14
+ mov QWORD PTR[24+rdi],r15
+ lea rdi,QWORD PTR[32+rdi]
+ inc rcx
+ jnz $L$sqr8x_sub
+
+ sbb rax,0
+ lea rbx,QWORD PTR[r9*1+rbx]
+ lea rdi,QWORD PTR[r9*1+rdi]
+
+DB 102,72,15,110,200
+ pxor xmm0,xmm0
+ pshufd xmm1,xmm1,0
+ mov rsi,QWORD PTR[40+rsp]
+
+ jmp $L$sqr8x_cond_copy
+
+ALIGN 32
+$L$sqr8x_cond_copy::
+ movdqa xmm2,XMMWORD PTR[rbx]
+ movdqa xmm3,XMMWORD PTR[16+rbx]
+ lea rbx,QWORD PTR[32+rbx]
+ movdqu xmm4,XMMWORD PTR[rdi]
+ movdqu xmm5,XMMWORD PTR[16+rdi]
+ lea rdi,QWORD PTR[32+rdi]
+ movdqa XMMWORD PTR[(-32)+rbx],xmm0
+ movdqa XMMWORD PTR[(-16)+rbx],xmm0
+ movdqa XMMWORD PTR[(-32)+rdx*1+rbx],xmm0
+ movdqa XMMWORD PTR[(-16)+rdx*1+rbx],xmm0
+ pcmpeqd xmm0,xmm1
+ pand xmm2,xmm1
+ pand xmm3,xmm1
+ pand xmm4,xmm0
+ pand xmm5,xmm0
+ pxor xmm0,xmm0
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqu XMMWORD PTR[(-32)+rdi],xmm4
+ movdqu XMMWORD PTR[(-16)+rdi],xmm5
+ add r9,32
+ jnz $L$sqr8x_cond_copy
+
+ mov rax,1
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$sqr8x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_bn_sqr8x_mont::
+bn_sqr8x_mont ENDP
+
+ALIGN 32
+bn_mulx4x_mont PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_bn_mulx4x_mont::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov rax,rsp
+
+$L$mulx4x_enter::
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$mulx4x_prologue::
+
+ shl r9d,3
+ xor r10,r10
+ sub r10,r9
+ mov r8,QWORD PTR[r8]
+ lea rbp,QWORD PTR[((-72))+r10*1+rsp]
+ and rbp,-128
+ mov r11,rsp
+ sub r11,rbp
+ and r11,-4096
+ lea rsp,QWORD PTR[rbp*1+r11]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$mulx4x_page_walk
+ jmp $L$mulx4x_page_walk_done
+
+ALIGN 16
+$L$mulx4x_page_walk::
+ lea rsp,QWORD PTR[((-4096))+rsp]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$mulx4x_page_walk
+$L$mulx4x_page_walk_done::
+
+ lea r10,QWORD PTR[r9*1+rdx]
+
+
+
+
+
+
+
+
+
+
+
+
+ mov QWORD PTR[rsp],r9
+ shr r9,5
+ mov QWORD PTR[16+rsp],r10
+ sub r9,1
+ mov QWORD PTR[24+rsp],r8
+ mov QWORD PTR[32+rsp],rdi
+ mov QWORD PTR[40+rsp],rax
+
+ mov QWORD PTR[48+rsp],r9
+ jmp $L$mulx4x_body
+
+ALIGN 32
+$L$mulx4x_body::
+ lea rdi,QWORD PTR[8+rdx]
+ mov rdx,QWORD PTR[rdx]
+ lea rbx,QWORD PTR[((64+32))+rsp]
+ mov r9,rdx
+
+ mulx rax,r8,QWORD PTR[rsi]
+ mulx r14,r11,QWORD PTR[8+rsi]
+ add r11,rax
+ mov QWORD PTR[8+rsp],rdi
+ mulx r13,r12,QWORD PTR[16+rsi]
+ adc r12,r14
+ adc r13,0
+
+ mov rdi,r8
+ imul r8,QWORD PTR[24+rsp]
+ xor rbp,rbp
+
+ mulx r14,rax,QWORD PTR[24+rsi]
+ mov rdx,r8
+ lea rsi,QWORD PTR[32+rsi]
+ adcx r13,rax
+ adcx r14,rbp
+
+ mulx r10,rax,QWORD PTR[rcx]
+ adcx rdi,rax
+ adox r10,r11
+ mulx r11,rax,QWORD PTR[8+rcx]
+ adcx r10,rax
+ adox r11,r12
+DB 0c4h,062h,0fbh,0f6h,0a1h,010h,000h,000h,000h
+ mov rdi,QWORD PTR[48+rsp]
+ mov QWORD PTR[((-32))+rbx],r10
+ adcx r11,rax
+ adox r12,r13
+ mulx r15,rax,QWORD PTR[24+rcx]
+ mov rdx,r9
+ mov QWORD PTR[((-24))+rbx],r11
+ adcx r12,rax
+ adox r15,rbp
+ lea rcx,QWORD PTR[32+rcx]
+ mov QWORD PTR[((-16))+rbx],r12
+
+ jmp $L$mulx4x_1st
+
+ALIGN 32
+$L$mulx4x_1st::
+ adcx r15,rbp
+ mulx rax,r10,QWORD PTR[rsi]
+ adcx r10,r14
+ mulx r14,r11,QWORD PTR[8+rsi]
+ adcx r11,rax
+ mulx rax,r12,QWORD PTR[16+rsi]
+ adcx r12,r14
+ mulx r14,r13,QWORD PTR[24+rsi]
+DB 067h,067h
+ mov rdx,r8
+ adcx r13,rax
+ adcx r14,rbp
+ lea rsi,QWORD PTR[32+rsi]
+ lea rbx,QWORD PTR[32+rbx]
+
+ adox r10,r15
+ mulx r15,rax,QWORD PTR[rcx]
+ adcx r10,rax
+ adox r11,r15
+ mulx r15,rax,QWORD PTR[8+rcx]
+ adcx r11,rax
+ adox r12,r15
+ mulx r15,rax,QWORD PTR[16+rcx]
+ mov QWORD PTR[((-40))+rbx],r10
+ adcx r12,rax
+ mov QWORD PTR[((-32))+rbx],r11
+ adox r13,r15
+ mulx r15,rax,QWORD PTR[24+rcx]
+ mov rdx,r9
+ mov QWORD PTR[((-24))+rbx],r12
+ adcx r13,rax
+ adox r15,rbp
+ lea rcx,QWORD PTR[32+rcx]
+ mov QWORD PTR[((-16))+rbx],r13
+
+ dec rdi
+ jnz $L$mulx4x_1st
+
+ mov rax,QWORD PTR[rsp]
+ mov rdi,QWORD PTR[8+rsp]
+ adc r15,rbp
+ add r14,r15
+ sbb r15,r15
+ mov QWORD PTR[((-8))+rbx],r14
+ jmp $L$mulx4x_outer
+
+ALIGN 32
+$L$mulx4x_outer::
+ mov rdx,QWORD PTR[rdi]
+ lea rdi,QWORD PTR[8+rdi]
+ sub rsi,rax
+ mov QWORD PTR[rbx],r15
+ lea rbx,QWORD PTR[((64+32))+rsp]
+ sub rcx,rax
+
+ mulx r11,r8,QWORD PTR[rsi]
+ xor ebp,ebp
+ mov r9,rdx
+ mulx r12,r14,QWORD PTR[8+rsi]
+ adox r8,QWORD PTR[((-32))+rbx]
+ adcx r11,r14
+ mulx r13,r15,QWORD PTR[16+rsi]
+ adox r11,QWORD PTR[((-24))+rbx]
+ adcx r12,r15
+ adox r12,QWORD PTR[((-16))+rbx]
+ adcx r13,rbp
+ adox r13,rbp
+
+ mov QWORD PTR[8+rsp],rdi
+ mov r15,r8
+ imul r8,QWORD PTR[24+rsp]
+ xor ebp,ebp
+
+ mulx r14,rax,QWORD PTR[24+rsi]
+ mov rdx,r8
+ adcx r13,rax
+ adox r13,QWORD PTR[((-8))+rbx]
+ adcx r14,rbp
+ lea rsi,QWORD PTR[32+rsi]
+ adox r14,rbp
+
+ mulx r10,rax,QWORD PTR[rcx]
+ adcx r15,rax
+ adox r10,r11
+ mulx r11,rax,QWORD PTR[8+rcx]
+ adcx r10,rax
+ adox r11,r12
+ mulx r12,rax,QWORD PTR[16+rcx]
+ mov QWORD PTR[((-32))+rbx],r10
+ adcx r11,rax
+ adox r12,r13
+ mulx r15,rax,QWORD PTR[24+rcx]
+ mov rdx,r9
+ mov QWORD PTR[((-24))+rbx],r11
+ lea rcx,QWORD PTR[32+rcx]
+ adcx r12,rax
+ adox r15,rbp
+ mov rdi,QWORD PTR[48+rsp]
+ mov QWORD PTR[((-16))+rbx],r12
+
+ jmp $L$mulx4x_inner
+
+ALIGN 32
+$L$mulx4x_inner::
+ mulx rax,r10,QWORD PTR[rsi]
+ adcx r15,rbp
+ adox r10,r14
+ mulx r14,r11,QWORD PTR[8+rsi]
+ adcx r10,QWORD PTR[rbx]
+ adox r11,rax
+ mulx rax,r12,QWORD PTR[16+rsi]
+ adcx r11,QWORD PTR[8+rbx]
+ adox r12,r14
+ mulx r14,r13,QWORD PTR[24+rsi]
+ mov rdx,r8
+ adcx r12,QWORD PTR[16+rbx]
+ adox r13,rax
+ adcx r13,QWORD PTR[24+rbx]
+ adox r14,rbp
+ lea rsi,QWORD PTR[32+rsi]
+ lea rbx,QWORD PTR[32+rbx]
+ adcx r14,rbp
+
+ adox r10,r15
+ mulx r15,rax,QWORD PTR[rcx]
+ adcx r10,rax
+ adox r11,r15
+ mulx r15,rax,QWORD PTR[8+rcx]
+ adcx r11,rax
+ adox r12,r15
+ mulx r15,rax,QWORD PTR[16+rcx]
+ mov QWORD PTR[((-40))+rbx],r10
+ adcx r12,rax
+ adox r13,r15
+ mulx r15,rax,QWORD PTR[24+rcx]
+ mov rdx,r9
+ mov QWORD PTR[((-32))+rbx],r11
+ mov QWORD PTR[((-24))+rbx],r12
+ adcx r13,rax
+ adox r15,rbp
+ lea rcx,QWORD PTR[32+rcx]
+ mov QWORD PTR[((-16))+rbx],r13
+
+ dec rdi
+ jnz $L$mulx4x_inner
+
+ mov rax,QWORD PTR[rsp]
+ mov rdi,QWORD PTR[8+rsp]
+ adc r15,rbp
+ sub rbp,QWORD PTR[rbx]
+ adc r14,r15
+ sbb r15,r15
+ mov QWORD PTR[((-8))+rbx],r14
+
+ cmp rdi,QWORD PTR[16+rsp]
+ jne $L$mulx4x_outer
+
+ lea rbx,QWORD PTR[64+rsp]
+ sub rcx,rax
+ neg r15
+ mov rdx,rax
+ shr rax,3+2
+ mov rdi,QWORD PTR[32+rsp]
+ jmp $L$mulx4x_sub
+
+ALIGN 32
+$L$mulx4x_sub::
+ mov r11,QWORD PTR[rbx]
+ mov r12,QWORD PTR[8+rbx]
+ mov r13,QWORD PTR[16+rbx]
+ mov r14,QWORD PTR[24+rbx]
+ lea rbx,QWORD PTR[32+rbx]
+ sbb r11,QWORD PTR[rcx]
+ sbb r12,QWORD PTR[8+rcx]
+ sbb r13,QWORD PTR[16+rcx]
+ sbb r14,QWORD PTR[24+rcx]
+ lea rcx,QWORD PTR[32+rcx]
+ mov QWORD PTR[rdi],r11
+ mov QWORD PTR[8+rdi],r12
+ mov QWORD PTR[16+rdi],r13
+ mov QWORD PTR[24+rdi],r14
+ lea rdi,QWORD PTR[32+rdi]
+ dec rax
+ jnz $L$mulx4x_sub
+
+ sbb r15,0
+ lea rbx,QWORD PTR[64+rsp]
+ sub rdi,rdx
+
+DB 102,73,15,110,207
+ pxor xmm0,xmm0
+ pshufd xmm1,xmm1,0
+ mov rsi,QWORD PTR[40+rsp]
+
+ jmp $L$mulx4x_cond_copy
+
+ALIGN 32
+$L$mulx4x_cond_copy::
+ movdqa xmm2,XMMWORD PTR[rbx]
+ movdqa xmm3,XMMWORD PTR[16+rbx]
+ lea rbx,QWORD PTR[32+rbx]
+ movdqu xmm4,XMMWORD PTR[rdi]
+ movdqu xmm5,XMMWORD PTR[16+rdi]
+ lea rdi,QWORD PTR[32+rdi]
+ movdqa XMMWORD PTR[(-32)+rbx],xmm0
+ movdqa XMMWORD PTR[(-16)+rbx],xmm0
+ pcmpeqd xmm0,xmm1
+ pand xmm2,xmm1
+ pand xmm3,xmm1
+ pand xmm4,xmm0
+ pand xmm5,xmm0
+ pxor xmm0,xmm0
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqu XMMWORD PTR[(-32)+rdi],xmm4
+ movdqu XMMWORD PTR[(-16)+rdi],xmm5
+ sub rdx,32
+ jnz $L$mulx4x_cond_copy
+
+ mov QWORD PTR[rbx],rdx
+
+ mov rax,1
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$mulx4x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_bn_mulx4x_mont::
+bn_mulx4x_mont ENDP
+DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
+DB 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
+DB 54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83
+DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
+DB 115,108,46,111,114,103,62,0
+ALIGN 16
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+mul_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ mov r10,QWORD PTR[192+r8]
+ mov rax,QWORD PTR[8+r10*8+rax]
+
+ jmp $L$common_pop_regs
+mul_handler ENDP
+
+
+ALIGN 16
+sqr_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_pop_regs
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[8+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ mov rax,QWORD PTR[40+rax]
+
+$L$common_pop_regs::
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+sqr_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_bn_mul_mont
+ DD imagerel $L$SEH_end_bn_mul_mont
+ DD imagerel $L$SEH_info_bn_mul_mont
+
+ DD imagerel $L$SEH_begin_bn_mul4x_mont
+ DD imagerel $L$SEH_end_bn_mul4x_mont
+ DD imagerel $L$SEH_info_bn_mul4x_mont
+
+ DD imagerel $L$SEH_begin_bn_sqr8x_mont
+ DD imagerel $L$SEH_end_bn_sqr8x_mont
+ DD imagerel $L$SEH_info_bn_sqr8x_mont
+ DD imagerel $L$SEH_begin_bn_mulx4x_mont
+ DD imagerel $L$SEH_end_bn_mulx4x_mont
+ DD imagerel $L$SEH_info_bn_mulx4x_mont
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_bn_mul_mont::
+DB 9,0,0,0
+ DD imagerel mul_handler
+ DD imagerel $L$mul_body,imagerel $L$mul_epilogue
+$L$SEH_info_bn_mul4x_mont::
+DB 9,0,0,0
+ DD imagerel mul_handler
+ DD imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue
+$L$SEH_info_bn_sqr8x_mont::
+DB 9,0,0,0
+ DD imagerel sqr_handler
+ DD imagerel $L$sqr8x_prologue,imagerel $L$sqr8x_body,imagerel $L$sqr8x_epilogue
+ALIGN 8
+$L$SEH_info_bn_mulx4x_mont::
+DB 9,0,0,0
+ DD imagerel sqr_handler
+ DD imagerel $L$mulx4x_prologue,imagerel $L$mulx4x_body,imagerel $L$mulx4x_epilogue
+ALIGN 8
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-mont5.masm b/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-mont5.masm
index 7b7715ff1b..0683c372ba 100644
--- a/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-mont5.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/bn/x86_64-mont5.masm
@@ -1,4051 +1,4051 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC bn_mul_mont_gather5
-
-ALIGN 64
-bn_mul_mont_gather5 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_bn_mul_mont_gather5::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov r9d,r9d
- mov rax,rsp
-
- test r9d,7
- jnz $L$mul_enter
- mov r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- jmp $L$mul4x_enter
-
-ALIGN 16
-$L$mul_enter::
- movd xmm5,DWORD PTR[56+rsp]
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- neg r9
- mov r11,rsp
- lea r10,QWORD PTR[((-280))+r9*8+rsp]
- neg r9
- and r10,-1024
-
-
-
-
-
-
-
-
-
- sub r11,r10
- and r11,-4096
- lea rsp,QWORD PTR[r11*1+r10]
- mov r11,QWORD PTR[rsp]
- cmp rsp,r10
- ja $L$mul_page_walk
- jmp $L$mul_page_walk_done
-
-$L$mul_page_walk::
- lea rsp,QWORD PTR[((-4096))+rsp]
- mov r11,QWORD PTR[rsp]
- cmp rsp,r10
- ja $L$mul_page_walk
-$L$mul_page_walk_done::
-
- lea r10,QWORD PTR[$L$inc]
- mov QWORD PTR[8+r9*8+rsp],rax
-
-$L$mul_body::
-
- lea r12,QWORD PTR[128+rdx]
- movdqa xmm0,XMMWORD PTR[r10]
- movdqa xmm1,XMMWORD PTR[16+r10]
- lea r10,QWORD PTR[((24-112))+r9*8+rsp]
- and r10,-16
-
- pshufd xmm5,xmm5,0
- movdqa xmm4,xmm1
- movdqa xmm2,xmm1
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
-DB 067h
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[112+r10],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[128+r10],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[144+r10],xmm2
- movdqa xmm2,xmm4
-
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[160+r10],xmm3
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[176+r10],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[192+r10],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[208+r10],xmm2
- movdqa xmm2,xmm4
-
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[224+r10],xmm3
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[240+r10],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[256+r10],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[272+r10],xmm2
- movdqa xmm2,xmm4
-
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[288+r10],xmm3
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[304+r10],xmm0
-
- paddd xmm3,xmm2
-DB 067h
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[320+r10],xmm1
-
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[336+r10],xmm2
- pand xmm0,XMMWORD PTR[64+r12]
-
- pand xmm1,XMMWORD PTR[80+r12]
- pand xmm2,XMMWORD PTR[96+r12]
- movdqa XMMWORD PTR[352+r10],xmm3
- pand xmm3,XMMWORD PTR[112+r12]
- por xmm0,xmm2
- por xmm1,xmm3
- movdqa xmm4,XMMWORD PTR[((-128))+r12]
- movdqa xmm5,XMMWORD PTR[((-112))+r12]
- movdqa xmm2,XMMWORD PTR[((-96))+r12]
- pand xmm4,XMMWORD PTR[112+r10]
- movdqa xmm3,XMMWORD PTR[((-80))+r12]
- pand xmm5,XMMWORD PTR[128+r10]
- por xmm0,xmm4
- pand xmm2,XMMWORD PTR[144+r10]
- por xmm1,xmm5
- pand xmm3,XMMWORD PTR[160+r10]
- por xmm0,xmm2
- por xmm1,xmm3
- movdqa xmm4,XMMWORD PTR[((-64))+r12]
- movdqa xmm5,XMMWORD PTR[((-48))+r12]
- movdqa xmm2,XMMWORD PTR[((-32))+r12]
- pand xmm4,XMMWORD PTR[176+r10]
- movdqa xmm3,XMMWORD PTR[((-16))+r12]
- pand xmm5,XMMWORD PTR[192+r10]
- por xmm0,xmm4
- pand xmm2,XMMWORD PTR[208+r10]
- por xmm1,xmm5
- pand xmm3,XMMWORD PTR[224+r10]
- por xmm0,xmm2
- por xmm1,xmm3
- movdqa xmm4,XMMWORD PTR[r12]
- movdqa xmm5,XMMWORD PTR[16+r12]
- movdqa xmm2,XMMWORD PTR[32+r12]
- pand xmm4,XMMWORD PTR[240+r10]
- movdqa xmm3,XMMWORD PTR[48+r12]
- pand xmm5,XMMWORD PTR[256+r10]
- por xmm0,xmm4
- pand xmm2,XMMWORD PTR[272+r10]
- por xmm1,xmm5
- pand xmm3,XMMWORD PTR[288+r10]
- por xmm0,xmm2
- por xmm1,xmm3
- por xmm0,xmm1
- pshufd xmm1,xmm0,04eh
- por xmm0,xmm1
- lea r12,QWORD PTR[256+r12]
-DB 102,72,15,126,195
-
- mov r8,QWORD PTR[r8]
- mov rax,QWORD PTR[rsi]
-
- xor r14,r14
- xor r15,r15
-
- mov rbp,r8
- mul rbx
- mov r10,rax
- mov rax,QWORD PTR[rcx]
-
- imul rbp,r10
- mov r11,rdx
-
- mul rbp
- add r10,rax
- mov rax,QWORD PTR[8+rsi]
- adc rdx,0
- mov r13,rdx
-
- lea r15,QWORD PTR[1+r15]
- jmp $L$1st_enter
-
-ALIGN 16
-$L$1st::
- add r13,rax
- mov rax,QWORD PTR[r15*8+rsi]
- adc rdx,0
- add r13,r11
- mov r11,r10
- adc rdx,0
- mov QWORD PTR[((-16))+r15*8+rsp],r13
- mov r13,rdx
-
-$L$1st_enter::
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[r15*8+rcx]
- adc rdx,0
- lea r15,QWORD PTR[1+r15]
- mov r10,rdx
-
- mul rbp
- cmp r15,r9
- jne $L$1st
-
-
- add r13,rax
- adc rdx,0
- add r13,r11
- adc rdx,0
- mov QWORD PTR[((-16))+r9*8+rsp],r13
- mov r13,rdx
- mov r11,r10
-
- xor rdx,rdx
- add r13,r11
- adc rdx,0
- mov QWORD PTR[((-8))+r9*8+rsp],r13
- mov QWORD PTR[r9*8+rsp],rdx
-
- lea r14,QWORD PTR[1+r14]
- jmp $L$outer
-ALIGN 16
-$L$outer::
- lea rdx,QWORD PTR[((24+128))+r9*8+rsp]
- and rdx,-16
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- movdqa xmm0,XMMWORD PTR[((-128))+r12]
- movdqa xmm1,XMMWORD PTR[((-112))+r12]
- movdqa xmm2,XMMWORD PTR[((-96))+r12]
- movdqa xmm3,XMMWORD PTR[((-80))+r12]
- pand xmm0,XMMWORD PTR[((-128))+rdx]
- pand xmm1,XMMWORD PTR[((-112))+rdx]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[((-96))+rdx]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[((-80))+rdx]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[((-64))+r12]
- movdqa xmm1,XMMWORD PTR[((-48))+r12]
- movdqa xmm2,XMMWORD PTR[((-32))+r12]
- movdqa xmm3,XMMWORD PTR[((-16))+r12]
- pand xmm0,XMMWORD PTR[((-64))+rdx]
- pand xmm1,XMMWORD PTR[((-48))+rdx]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[((-32))+rdx]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[((-16))+rdx]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[r12]
- movdqa xmm1,XMMWORD PTR[16+r12]
- movdqa xmm2,XMMWORD PTR[32+r12]
- movdqa xmm3,XMMWORD PTR[48+r12]
- pand xmm0,XMMWORD PTR[rdx]
- pand xmm1,XMMWORD PTR[16+rdx]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[32+rdx]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[48+rdx]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[64+r12]
- movdqa xmm1,XMMWORD PTR[80+r12]
- movdqa xmm2,XMMWORD PTR[96+r12]
- movdqa xmm3,XMMWORD PTR[112+r12]
- pand xmm0,XMMWORD PTR[64+rdx]
- pand xmm1,XMMWORD PTR[80+rdx]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[96+rdx]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[112+rdx]
- por xmm4,xmm2
- por xmm5,xmm3
- por xmm4,xmm5
- pshufd xmm0,xmm4,04eh
- por xmm0,xmm4
- lea r12,QWORD PTR[256+r12]
-
- mov rax,QWORD PTR[rsi]
-DB 102,72,15,126,195
-
- xor r15,r15
- mov rbp,r8
- mov r10,QWORD PTR[rsp]
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[rcx]
- adc rdx,0
-
- imul rbp,r10
- mov r11,rdx
-
- mul rbp
- add r10,rax
- mov rax,QWORD PTR[8+rsi]
- adc rdx,0
- mov r10,QWORD PTR[8+rsp]
- mov r13,rdx
-
- lea r15,QWORD PTR[1+r15]
- jmp $L$inner_enter
-
-ALIGN 16
-$L$inner::
- add r13,rax
- mov rax,QWORD PTR[r15*8+rsi]
- adc rdx,0
- add r13,r10
- mov r10,QWORD PTR[r15*8+rsp]
- adc rdx,0
- mov QWORD PTR[((-16))+r15*8+rsp],r13
- mov r13,rdx
-
-$L$inner_enter::
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[r15*8+rcx]
- adc rdx,0
- add r10,r11
- mov r11,rdx
- adc r11,0
- lea r15,QWORD PTR[1+r15]
-
- mul rbp
- cmp r15,r9
- jne $L$inner
-
- add r13,rax
- adc rdx,0
- add r13,r10
- mov r10,QWORD PTR[r9*8+rsp]
- adc rdx,0
- mov QWORD PTR[((-16))+r9*8+rsp],r13
- mov r13,rdx
-
- xor rdx,rdx
- add r13,r11
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-8))+r9*8+rsp],r13
- mov QWORD PTR[r9*8+rsp],rdx
-
- lea r14,QWORD PTR[1+r14]
- cmp r14,r9
- jb $L$outer
-
- xor r14,r14
- mov rax,QWORD PTR[rsp]
- lea rsi,QWORD PTR[rsp]
- mov r15,r9
- jmp $L$sub
-ALIGN 16
-$L$sub:: sbb rax,QWORD PTR[r14*8+rcx]
- mov QWORD PTR[r14*8+rdi],rax
- mov rax,QWORD PTR[8+r14*8+rsi]
- lea r14,QWORD PTR[1+r14]
- dec r15
- jnz $L$sub
-
- sbb rax,0
- mov rbx,-1
- xor rbx,rax
- xor r14,r14
- mov r15,r9
-
-$L$copy::
- mov rcx,QWORD PTR[r14*8+rdi]
- mov rdx,QWORD PTR[r14*8+rsp]
- and rcx,rbx
- and rdx,rax
- mov QWORD PTR[r14*8+rsp],r14
- or rdx,rcx
- mov QWORD PTR[r14*8+rdi],rdx
- lea r14,QWORD PTR[1+r14]
- sub r15,1
- jnz $L$copy
-
- mov rsi,QWORD PTR[8+r9*8+rsp]
-
- mov rax,1
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$mul_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_bn_mul_mont_gather5::
-bn_mul_mont_gather5 ENDP
-
-ALIGN 32
-bn_mul4x_mont_gather5 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_bn_mul4x_mont_gather5::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
-DB 067h
- mov rax,rsp
-
-$L$mul4x_enter::
- and r11d,080108h
- cmp r11d,080108h
- je $L$mulx4x_enter
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$mul4x_prologue::
-
-DB 067h
- shl r9d,3
- lea r10,QWORD PTR[r9*2+r9]
- neg r9
-
-
-
-
-
-
-
-
-
-
- lea r11,QWORD PTR[((-320))+r9*2+rsp]
- mov rbp,rsp
- sub r11,rdi
- and r11,4095
- cmp r10,r11
- jb $L$mul4xsp_alt
- sub rbp,r11
- lea rbp,QWORD PTR[((-320))+r9*2+rbp]
- jmp $L$mul4xsp_done
-
-ALIGN 32
-$L$mul4xsp_alt::
- lea r10,QWORD PTR[((4096-320))+r9*2]
- lea rbp,QWORD PTR[((-320))+r9*2+rbp]
- sub r11,r10
- mov r10,0
- cmovc r11,r10
- sub rbp,r11
-$L$mul4xsp_done::
- and rbp,-64
- mov r11,rsp
- sub r11,rbp
- and r11,-4096
- lea rsp,QWORD PTR[rbp*1+r11]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$mul4x_page_walk
- jmp $L$mul4x_page_walk_done
-
-$L$mul4x_page_walk::
- lea rsp,QWORD PTR[((-4096))+rsp]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$mul4x_page_walk
-$L$mul4x_page_walk_done::
-
- neg r9
-
- mov QWORD PTR[40+rsp],rax
-
-$L$mul4x_body::
-
- call mul4x_internal
-
- mov rsi,QWORD PTR[40+rsp]
-
- mov rax,1
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$mul4x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_bn_mul4x_mont_gather5::
-bn_mul4x_mont_gather5 ENDP
-
-
-ALIGN 32
-mul4x_internal PROC PRIVATE
-
- shl r9,5
- movd xmm5,DWORD PTR[56+rax]
- lea rax,QWORD PTR[$L$inc]
- lea r13,QWORD PTR[128+r9*1+rdx]
- shr r9,5
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa xmm1,XMMWORD PTR[16+rax]
- lea r10,QWORD PTR[((88-112))+r9*1+rsp]
- lea r12,QWORD PTR[128+rdx]
-
- pshufd xmm5,xmm5,0
- movdqa xmm4,xmm1
-DB 067h,067h
- movdqa xmm2,xmm1
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
-DB 067h
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[112+r10],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[128+r10],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[144+r10],xmm2
- movdqa xmm2,xmm4
-
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[160+r10],xmm3
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[176+r10],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[192+r10],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[208+r10],xmm2
- movdqa xmm2,xmm4
-
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[224+r10],xmm3
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[240+r10],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[256+r10],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[272+r10],xmm2
- movdqa xmm2,xmm4
-
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[288+r10],xmm3
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[304+r10],xmm0
-
- paddd xmm3,xmm2
-DB 067h
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[320+r10],xmm1
-
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[336+r10],xmm2
- pand xmm0,XMMWORD PTR[64+r12]
-
- pand xmm1,XMMWORD PTR[80+r12]
- pand xmm2,XMMWORD PTR[96+r12]
- movdqa XMMWORD PTR[352+r10],xmm3
- pand xmm3,XMMWORD PTR[112+r12]
- por xmm0,xmm2
- por xmm1,xmm3
- movdqa xmm4,XMMWORD PTR[((-128))+r12]
- movdqa xmm5,XMMWORD PTR[((-112))+r12]
- movdqa xmm2,XMMWORD PTR[((-96))+r12]
- pand xmm4,XMMWORD PTR[112+r10]
- movdqa xmm3,XMMWORD PTR[((-80))+r12]
- pand xmm5,XMMWORD PTR[128+r10]
- por xmm0,xmm4
- pand xmm2,XMMWORD PTR[144+r10]
- por xmm1,xmm5
- pand xmm3,XMMWORD PTR[160+r10]
- por xmm0,xmm2
- por xmm1,xmm3
- movdqa xmm4,XMMWORD PTR[((-64))+r12]
- movdqa xmm5,XMMWORD PTR[((-48))+r12]
- movdqa xmm2,XMMWORD PTR[((-32))+r12]
- pand xmm4,XMMWORD PTR[176+r10]
- movdqa xmm3,XMMWORD PTR[((-16))+r12]
- pand xmm5,XMMWORD PTR[192+r10]
- por xmm0,xmm4
- pand xmm2,XMMWORD PTR[208+r10]
- por xmm1,xmm5
- pand xmm3,XMMWORD PTR[224+r10]
- por xmm0,xmm2
- por xmm1,xmm3
- movdqa xmm4,XMMWORD PTR[r12]
- movdqa xmm5,XMMWORD PTR[16+r12]
- movdqa xmm2,XMMWORD PTR[32+r12]
- pand xmm4,XMMWORD PTR[240+r10]
- movdqa xmm3,XMMWORD PTR[48+r12]
- pand xmm5,XMMWORD PTR[256+r10]
- por xmm0,xmm4
- pand xmm2,XMMWORD PTR[272+r10]
- por xmm1,xmm5
- pand xmm3,XMMWORD PTR[288+r10]
- por xmm0,xmm2
- por xmm1,xmm3
- por xmm0,xmm1
- pshufd xmm1,xmm0,04eh
- por xmm0,xmm1
- lea r12,QWORD PTR[256+r12]
-DB 102,72,15,126,195
-
- mov QWORD PTR[((16+8))+rsp],r13
- mov QWORD PTR[((56+8))+rsp],rdi
-
- mov r8,QWORD PTR[r8]
- mov rax,QWORD PTR[rsi]
- lea rsi,QWORD PTR[r9*1+rsi]
- neg r9
-
- mov rbp,r8
- mul rbx
- mov r10,rax
- mov rax,QWORD PTR[rcx]
-
- imul rbp,r10
- lea r14,QWORD PTR[((64+8))+rsp]
- mov r11,rdx
-
- mul rbp
- add r10,rax
- mov rax,QWORD PTR[8+r9*1+rsi]
- adc rdx,0
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[8+rcx]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[16+r9*1+rsi]
- adc rdx,0
- add rdi,r11
- lea r15,QWORD PTR[32+r9]
- lea rcx,QWORD PTR[32+rcx]
- adc rdx,0
- mov QWORD PTR[r14],rdi
- mov r13,rdx
- jmp $L$1st4x
-
-ALIGN 32
-$L$1st4x::
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[((-16))+rcx]
- lea r14,QWORD PTR[32+r14]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[((-8))+r15*1+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-24))+r14],r13
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[((-8))+rcx]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[r15*1+rsi]
- adc rdx,0
- add rdi,r11
- adc rdx,0
- mov QWORD PTR[((-16))+r14],rdi
- mov r13,rdx
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[rcx]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[8+r15*1+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-8))+r14],r13
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[8+rcx]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[16+r15*1+rsi]
- adc rdx,0
- add rdi,r11
- lea rcx,QWORD PTR[32+rcx]
- adc rdx,0
- mov QWORD PTR[r14],rdi
- mov r13,rdx
-
- add r15,32
- jnz $L$1st4x
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[((-16))+rcx]
- lea r14,QWORD PTR[32+r14]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[((-8))+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-24))+r14],r13
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[((-8))+rcx]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[r9*1+rsi]
- adc rdx,0
- add rdi,r11
- adc rdx,0
- mov QWORD PTR[((-16))+r14],rdi
- mov r13,rdx
-
- lea rcx,QWORD PTR[r9*1+rcx]
-
- xor rdi,rdi
- add r13,r10
- adc rdi,0
- mov QWORD PTR[((-8))+r14],r13
-
- jmp $L$outer4x
-
-ALIGN 32
-$L$outer4x::
- lea rdx,QWORD PTR[((16+128))+r14]
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- movdqa xmm0,XMMWORD PTR[((-128))+r12]
- movdqa xmm1,XMMWORD PTR[((-112))+r12]
- movdqa xmm2,XMMWORD PTR[((-96))+r12]
- movdqa xmm3,XMMWORD PTR[((-80))+r12]
- pand xmm0,XMMWORD PTR[((-128))+rdx]
- pand xmm1,XMMWORD PTR[((-112))+rdx]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[((-96))+rdx]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[((-80))+rdx]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[((-64))+r12]
- movdqa xmm1,XMMWORD PTR[((-48))+r12]
- movdqa xmm2,XMMWORD PTR[((-32))+r12]
- movdqa xmm3,XMMWORD PTR[((-16))+r12]
- pand xmm0,XMMWORD PTR[((-64))+rdx]
- pand xmm1,XMMWORD PTR[((-48))+rdx]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[((-32))+rdx]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[((-16))+rdx]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[r12]
- movdqa xmm1,XMMWORD PTR[16+r12]
- movdqa xmm2,XMMWORD PTR[32+r12]
- movdqa xmm3,XMMWORD PTR[48+r12]
- pand xmm0,XMMWORD PTR[rdx]
- pand xmm1,XMMWORD PTR[16+rdx]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[32+rdx]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[48+rdx]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[64+r12]
- movdqa xmm1,XMMWORD PTR[80+r12]
- movdqa xmm2,XMMWORD PTR[96+r12]
- movdqa xmm3,XMMWORD PTR[112+r12]
- pand xmm0,XMMWORD PTR[64+rdx]
- pand xmm1,XMMWORD PTR[80+rdx]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[96+rdx]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[112+rdx]
- por xmm4,xmm2
- por xmm5,xmm3
- por xmm4,xmm5
- pshufd xmm0,xmm4,04eh
- por xmm0,xmm4
- lea r12,QWORD PTR[256+r12]
-DB 102,72,15,126,195
-
- mov r10,QWORD PTR[r9*1+r14]
- mov rbp,r8
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[rcx]
- adc rdx,0
-
- imul rbp,r10
- mov r11,rdx
- mov QWORD PTR[r14],rdi
-
- lea r14,QWORD PTR[r9*1+r14]
-
- mul rbp
- add r10,rax
- mov rax,QWORD PTR[8+r9*1+rsi]
- adc rdx,0
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[8+rcx]
- adc rdx,0
- add r11,QWORD PTR[8+r14]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[16+r9*1+rsi]
- adc rdx,0
- add rdi,r11
- lea r15,QWORD PTR[32+r9]
- lea rcx,QWORD PTR[32+rcx]
- adc rdx,0
- mov r13,rdx
- jmp $L$inner4x
-
-ALIGN 32
-$L$inner4x::
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[((-16))+rcx]
- adc rdx,0
- add r10,QWORD PTR[16+r14]
- lea r14,QWORD PTR[32+r14]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[((-8))+r15*1+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-32))+r14],rdi
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[((-8))+rcx]
- adc rdx,0
- add r11,QWORD PTR[((-8))+r14]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[r15*1+rsi]
- adc rdx,0
- add rdi,r11
- adc rdx,0
- mov QWORD PTR[((-24))+r14],r13
- mov r13,rdx
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[rcx]
- adc rdx,0
- add r10,QWORD PTR[r14]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[8+r15*1+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-16))+r14],rdi
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[8+rcx]
- adc rdx,0
- add r11,QWORD PTR[8+r14]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[16+r15*1+rsi]
- adc rdx,0
- add rdi,r11
- lea rcx,QWORD PTR[32+rcx]
- adc rdx,0
- mov QWORD PTR[((-8))+r14],r13
- mov r13,rdx
-
- add r15,32
- jnz $L$inner4x
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[((-16))+rcx]
- adc rdx,0
- add r10,QWORD PTR[16+r14]
- lea r14,QWORD PTR[32+r14]
- adc rdx,0
- mov r11,rdx
-
- mul rbp
- add r13,rax
- mov rax,QWORD PTR[((-8))+rsi]
- adc rdx,0
- add r13,r10
- adc rdx,0
- mov QWORD PTR[((-32))+r14],rdi
- mov rdi,rdx
-
- mul rbx
- add r11,rax
- mov rax,rbp
- mov rbp,QWORD PTR[((-8))+rcx]
- adc rdx,0
- add r11,QWORD PTR[((-8))+r14]
- adc rdx,0
- mov r10,rdx
-
- mul rbp
- add rdi,rax
- mov rax,QWORD PTR[r9*1+rsi]
- adc rdx,0
- add rdi,r11
- adc rdx,0
- mov QWORD PTR[((-24))+r14],r13
- mov r13,rdx
-
- mov QWORD PTR[((-16))+r14],rdi
- lea rcx,QWORD PTR[r9*1+rcx]
-
- xor rdi,rdi
- add r13,r10
- adc rdi,0
- add r13,QWORD PTR[r14]
- adc rdi,0
- mov QWORD PTR[((-8))+r14],r13
-
- cmp r12,QWORD PTR[((16+8))+rsp]
- jb $L$outer4x
- xor rax,rax
- sub rbp,r13
- adc r15,r15
- or rdi,r15
- sub rax,rdi
- lea rbx,QWORD PTR[r9*1+r14]
- mov r12,QWORD PTR[rcx]
- lea rbp,QWORD PTR[rcx]
- mov rcx,r9
- sar rcx,3+2
- mov rdi,QWORD PTR[((56+8))+rsp]
- dec r12
- xor r10,r10
- mov r13,QWORD PTR[8+rbp]
- mov r14,QWORD PTR[16+rbp]
- mov r15,QWORD PTR[24+rbp]
- jmp $L$sqr4x_sub_entry
-
-mul4x_internal ENDP
-PUBLIC bn_power5
-
-ALIGN 32
-bn_power5 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_bn_power5::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov rax,rsp
-
- mov r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- and r11d,080108h
- cmp r11d,080108h
- je $L$powerx5_enter
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$power5_prologue::
-
- shl r9d,3
- lea r10d,DWORD PTR[r9*2+r9]
- neg r9
- mov r8,QWORD PTR[r8]
-
-
-
-
-
-
-
-
- lea r11,QWORD PTR[((-320))+r9*2+rsp]
- mov rbp,rsp
- sub r11,rdi
- and r11,4095
- cmp r10,r11
- jb $L$pwr_sp_alt
- sub rbp,r11
- lea rbp,QWORD PTR[((-320))+r9*2+rbp]
- jmp $L$pwr_sp_done
-
-ALIGN 32
-$L$pwr_sp_alt::
- lea r10,QWORD PTR[((4096-320))+r9*2]
- lea rbp,QWORD PTR[((-320))+r9*2+rbp]
- sub r11,r10
- mov r10,0
- cmovc r11,r10
- sub rbp,r11
-$L$pwr_sp_done::
- and rbp,-64
- mov r11,rsp
- sub r11,rbp
- and r11,-4096
- lea rsp,QWORD PTR[rbp*1+r11]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$pwr_page_walk
- jmp $L$pwr_page_walk_done
-
-$L$pwr_page_walk::
- lea rsp,QWORD PTR[((-4096))+rsp]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$pwr_page_walk
-$L$pwr_page_walk_done::
-
- mov r10,r9
- neg r9
-
-
-
-
-
-
-
-
-
-
- mov QWORD PTR[32+rsp],r8
- mov QWORD PTR[40+rsp],rax
-
-$L$power5_body::
-DB 102,72,15,110,207
-DB 102,72,15,110,209
-DB 102,73,15,110,218
-DB 102,72,15,110,226
-
- call __bn_sqr8x_internal
- call __bn_post4x_internal
- call __bn_sqr8x_internal
- call __bn_post4x_internal
- call __bn_sqr8x_internal
- call __bn_post4x_internal
- call __bn_sqr8x_internal
- call __bn_post4x_internal
- call __bn_sqr8x_internal
- call __bn_post4x_internal
-
-DB 102,72,15,126,209
-DB 102,72,15,126,226
- mov rdi,rsi
- mov rax,QWORD PTR[40+rsp]
- lea r8,QWORD PTR[32+rsp]
-
- call mul4x_internal
-
- mov rsi,QWORD PTR[40+rsp]
-
- mov rax,1
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$power5_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_bn_power5::
-bn_power5 ENDP
-
-PUBLIC bn_sqr8x_internal
-
-
-ALIGN 32
-bn_sqr8x_internal PROC PUBLIC
-__bn_sqr8x_internal::
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- lea rbp,QWORD PTR[32+r10]
- lea rsi,QWORD PTR[r9*1+rsi]
-
- mov rcx,r9
-
-
- mov r14,QWORD PTR[((-32))+rbp*1+rsi]
- lea rdi,QWORD PTR[((48+8))+r9*2+rsp]
- mov rax,QWORD PTR[((-24))+rbp*1+rsi]
- lea rdi,QWORD PTR[((-32))+rbp*1+rdi]
- mov rbx,QWORD PTR[((-16))+rbp*1+rsi]
- mov r15,rax
-
- mul r14
- mov r10,rax
- mov rax,rbx
- mov r11,rdx
- mov QWORD PTR[((-24))+rbp*1+rdi],r10
-
- mul r14
- add r11,rax
- mov rax,rbx
- adc rdx,0
- mov QWORD PTR[((-16))+rbp*1+rdi],r11
- mov r10,rdx
-
-
- mov rbx,QWORD PTR[((-8))+rbp*1+rsi]
- mul r15
- mov r12,rax
- mov rax,rbx
- mov r13,rdx
-
- lea rcx,QWORD PTR[rbp]
- mul r14
- add r10,rax
- mov rax,rbx
- mov r11,rdx
- adc r11,0
- add r10,r12
- adc r11,0
- mov QWORD PTR[((-8))+rcx*1+rdi],r10
- jmp $L$sqr4x_1st
-
-ALIGN 32
-$L$sqr4x_1st::
- mov rbx,QWORD PTR[rcx*1+rsi]
- mul r15
- add r13,rax
- mov rax,rbx
- mov r12,rdx
- adc r12,0
-
- mul r14
- add r11,rax
- mov rax,rbx
- mov rbx,QWORD PTR[8+rcx*1+rsi]
- mov r10,rdx
- adc r10,0
- add r11,r13
- adc r10,0
-
-
- mul r15
- add r12,rax
- mov rax,rbx
- mov QWORD PTR[rcx*1+rdi],r11
- mov r13,rdx
- adc r13,0
-
- mul r14
- add r10,rax
- mov rax,rbx
- mov rbx,QWORD PTR[16+rcx*1+rsi]
- mov r11,rdx
- adc r11,0
- add r10,r12
- adc r11,0
-
- mul r15
- add r13,rax
- mov rax,rbx
- mov QWORD PTR[8+rcx*1+rdi],r10
- mov r12,rdx
- adc r12,0
-
- mul r14
- add r11,rax
- mov rax,rbx
- mov rbx,QWORD PTR[24+rcx*1+rsi]
- mov r10,rdx
- adc r10,0
- add r11,r13
- adc r10,0
-
-
- mul r15
- add r12,rax
- mov rax,rbx
- mov QWORD PTR[16+rcx*1+rdi],r11
- mov r13,rdx
- adc r13,0
- lea rcx,QWORD PTR[32+rcx]
-
- mul r14
- add r10,rax
- mov rax,rbx
- mov r11,rdx
- adc r11,0
- add r10,r12
- adc r11,0
- mov QWORD PTR[((-8))+rcx*1+rdi],r10
-
- cmp rcx,0
- jne $L$sqr4x_1st
-
- mul r15
- add r13,rax
- lea rbp,QWORD PTR[16+rbp]
- adc rdx,0
- add r13,r11
- adc rdx,0
-
- mov QWORD PTR[rdi],r13
- mov r12,rdx
- mov QWORD PTR[8+rdi],rdx
- jmp $L$sqr4x_outer
-
-ALIGN 32
-$L$sqr4x_outer::
- mov r14,QWORD PTR[((-32))+rbp*1+rsi]
- lea rdi,QWORD PTR[((48+8))+r9*2+rsp]
- mov rax,QWORD PTR[((-24))+rbp*1+rsi]
- lea rdi,QWORD PTR[((-32))+rbp*1+rdi]
- mov rbx,QWORD PTR[((-16))+rbp*1+rsi]
- mov r15,rax
-
- mul r14
- mov r10,QWORD PTR[((-24))+rbp*1+rdi]
- add r10,rax
- mov rax,rbx
- adc rdx,0
- mov QWORD PTR[((-24))+rbp*1+rdi],r10
- mov r11,rdx
-
- mul r14
- add r11,rax
- mov rax,rbx
- adc rdx,0
- add r11,QWORD PTR[((-16))+rbp*1+rdi]
- mov r10,rdx
- adc r10,0
- mov QWORD PTR[((-16))+rbp*1+rdi],r11
-
- xor r12,r12
-
- mov rbx,QWORD PTR[((-8))+rbp*1+rsi]
- mul r15
- add r12,rax
- mov rax,rbx
- adc rdx,0
- add r12,QWORD PTR[((-8))+rbp*1+rdi]
- mov r13,rdx
- adc r13,0
-
- mul r14
- add r10,rax
- mov rax,rbx
- adc rdx,0
- add r10,r12
- mov r11,rdx
- adc r11,0
- mov QWORD PTR[((-8))+rbp*1+rdi],r10
-
- lea rcx,QWORD PTR[rbp]
- jmp $L$sqr4x_inner
-
-ALIGN 32
-$L$sqr4x_inner::
- mov rbx,QWORD PTR[rcx*1+rsi]
- mul r15
- add r13,rax
- mov rax,rbx
- mov r12,rdx
- adc r12,0
- add r13,QWORD PTR[rcx*1+rdi]
- adc r12,0
-
-DB 067h
- mul r14
- add r11,rax
- mov rax,rbx
- mov rbx,QWORD PTR[8+rcx*1+rsi]
- mov r10,rdx
- adc r10,0
- add r11,r13
- adc r10,0
-
- mul r15
- add r12,rax
- mov QWORD PTR[rcx*1+rdi],r11
- mov rax,rbx
- mov r13,rdx
- adc r13,0
- add r12,QWORD PTR[8+rcx*1+rdi]
- lea rcx,QWORD PTR[16+rcx]
- adc r13,0
-
- mul r14
- add r10,rax
- mov rax,rbx
- adc rdx,0
- add r10,r12
- mov r11,rdx
- adc r11,0
- mov QWORD PTR[((-8))+rcx*1+rdi],r10
-
- cmp rcx,0
- jne $L$sqr4x_inner
-
-DB 067h
- mul r15
- add r13,rax
- adc rdx,0
- add r13,r11
- adc rdx,0
-
- mov QWORD PTR[rdi],r13
- mov r12,rdx
- mov QWORD PTR[8+rdi],rdx
-
- add rbp,16
- jnz $L$sqr4x_outer
-
-
- mov r14,QWORD PTR[((-32))+rsi]
- lea rdi,QWORD PTR[((48+8))+r9*2+rsp]
- mov rax,QWORD PTR[((-24))+rsi]
- lea rdi,QWORD PTR[((-32))+rbp*1+rdi]
- mov rbx,QWORD PTR[((-16))+rsi]
- mov r15,rax
-
- mul r14
- add r10,rax
- mov rax,rbx
- mov r11,rdx
- adc r11,0
-
- mul r14
- add r11,rax
- mov rax,rbx
- mov QWORD PTR[((-24))+rdi],r10
- mov r10,rdx
- adc r10,0
- add r11,r13
- mov rbx,QWORD PTR[((-8))+rsi]
- adc r10,0
-
- mul r15
- add r12,rax
- mov rax,rbx
- mov QWORD PTR[((-16))+rdi],r11
- mov r13,rdx
- adc r13,0
-
- mul r14
- add r10,rax
- mov rax,rbx
- mov r11,rdx
- adc r11,0
- add r10,r12
- adc r11,0
- mov QWORD PTR[((-8))+rdi],r10
-
- mul r15
- add r13,rax
- mov rax,QWORD PTR[((-16))+rsi]
- adc rdx,0
- add r13,r11
- adc rdx,0
-
- mov QWORD PTR[rdi],r13
- mov r12,rdx
- mov QWORD PTR[8+rdi],rdx
-
- mul rbx
- add rbp,16
- xor r14,r14
- sub rbp,r9
- xor r15,r15
-
- add rax,r12
- adc rdx,0
- mov QWORD PTR[8+rdi],rax
- mov QWORD PTR[16+rdi],rdx
- mov QWORD PTR[24+rdi],r15
-
- mov rax,QWORD PTR[((-16))+rbp*1+rsi]
- lea rdi,QWORD PTR[((48+8))+rsp]
- xor r10,r10
- mov r11,QWORD PTR[8+rdi]
-
- lea r12,QWORD PTR[r10*2+r14]
- shr r10,63
- lea r13,QWORD PTR[r11*2+rcx]
- shr r11,63
- or r13,r10
- mov r10,QWORD PTR[16+rdi]
- mov r14,r11
- mul rax
- neg r15
- mov r11,QWORD PTR[24+rdi]
- adc r12,rax
- mov rax,QWORD PTR[((-8))+rbp*1+rsi]
- mov QWORD PTR[rdi],r12
- adc r13,rdx
-
- lea rbx,QWORD PTR[r10*2+r14]
- mov QWORD PTR[8+rdi],r13
- sbb r15,r15
- shr r10,63
- lea r8,QWORD PTR[r11*2+rcx]
- shr r11,63
- or r8,r10
- mov r10,QWORD PTR[32+rdi]
- mov r14,r11
- mul rax
- neg r15
- mov r11,QWORD PTR[40+rdi]
- adc rbx,rax
- mov rax,QWORD PTR[rbp*1+rsi]
- mov QWORD PTR[16+rdi],rbx
- adc r8,rdx
- lea rbp,QWORD PTR[16+rbp]
- mov QWORD PTR[24+rdi],r8
- sbb r15,r15
- lea rdi,QWORD PTR[64+rdi]
- jmp $L$sqr4x_shift_n_add
-
-ALIGN 32
-$L$sqr4x_shift_n_add::
- lea r12,QWORD PTR[r10*2+r14]
- shr r10,63
- lea r13,QWORD PTR[r11*2+rcx]
- shr r11,63
- or r13,r10
- mov r10,QWORD PTR[((-16))+rdi]
- mov r14,r11
- mul rax
- neg r15
- mov r11,QWORD PTR[((-8))+rdi]
- adc r12,rax
- mov rax,QWORD PTR[((-8))+rbp*1+rsi]
- mov QWORD PTR[((-32))+rdi],r12
- adc r13,rdx
-
- lea rbx,QWORD PTR[r10*2+r14]
- mov QWORD PTR[((-24))+rdi],r13
- sbb r15,r15
- shr r10,63
- lea r8,QWORD PTR[r11*2+rcx]
- shr r11,63
- or r8,r10
- mov r10,QWORD PTR[rdi]
- mov r14,r11
- mul rax
- neg r15
- mov r11,QWORD PTR[8+rdi]
- adc rbx,rax
- mov rax,QWORD PTR[rbp*1+rsi]
- mov QWORD PTR[((-16))+rdi],rbx
- adc r8,rdx
-
- lea r12,QWORD PTR[r10*2+r14]
- mov QWORD PTR[((-8))+rdi],r8
- sbb r15,r15
- shr r10,63
- lea r13,QWORD PTR[r11*2+rcx]
- shr r11,63
- or r13,r10
- mov r10,QWORD PTR[16+rdi]
- mov r14,r11
- mul rax
- neg r15
- mov r11,QWORD PTR[24+rdi]
- adc r12,rax
- mov rax,QWORD PTR[8+rbp*1+rsi]
- mov QWORD PTR[rdi],r12
- adc r13,rdx
-
- lea rbx,QWORD PTR[r10*2+r14]
- mov QWORD PTR[8+rdi],r13
- sbb r15,r15
- shr r10,63
- lea r8,QWORD PTR[r11*2+rcx]
- shr r11,63
- or r8,r10
- mov r10,QWORD PTR[32+rdi]
- mov r14,r11
- mul rax
- neg r15
- mov r11,QWORD PTR[40+rdi]
- adc rbx,rax
- mov rax,QWORD PTR[16+rbp*1+rsi]
- mov QWORD PTR[16+rdi],rbx
- adc r8,rdx
- mov QWORD PTR[24+rdi],r8
- sbb r15,r15
- lea rdi,QWORD PTR[64+rdi]
- add rbp,32
- jnz $L$sqr4x_shift_n_add
-
- lea r12,QWORD PTR[r10*2+r14]
-DB 067h
- shr r10,63
- lea r13,QWORD PTR[r11*2+rcx]
- shr r11,63
- or r13,r10
- mov r10,QWORD PTR[((-16))+rdi]
- mov r14,r11
- mul rax
- neg r15
- mov r11,QWORD PTR[((-8))+rdi]
- adc r12,rax
- mov rax,QWORD PTR[((-8))+rsi]
- mov QWORD PTR[((-32))+rdi],r12
- adc r13,rdx
-
- lea rbx,QWORD PTR[r10*2+r14]
- mov QWORD PTR[((-24))+rdi],r13
- sbb r15,r15
- shr r10,63
- lea r8,QWORD PTR[r11*2+rcx]
- shr r11,63
- or r8,r10
- mul rax
- neg r15
- adc rbx,rax
- adc r8,rdx
- mov QWORD PTR[((-16))+rdi],rbx
- mov QWORD PTR[((-8))+rdi],r8
-DB 102,72,15,126,213
-__bn_sqr8x_reduction::
- xor rax,rax
- lea rcx,QWORD PTR[rbp*1+r9]
- lea rdx,QWORD PTR[((48+8))+r9*2+rsp]
- mov QWORD PTR[((0+8))+rsp],rcx
- lea rdi,QWORD PTR[((48+8))+r9*1+rsp]
- mov QWORD PTR[((8+8))+rsp],rdx
- neg r9
- jmp $L$8x_reduction_loop
-
-ALIGN 32
-$L$8x_reduction_loop::
- lea rdi,QWORD PTR[r9*1+rdi]
-DB 066h
- mov rbx,QWORD PTR[rdi]
- mov r9,QWORD PTR[8+rdi]
- mov r10,QWORD PTR[16+rdi]
- mov r11,QWORD PTR[24+rdi]
- mov r12,QWORD PTR[32+rdi]
- mov r13,QWORD PTR[40+rdi]
- mov r14,QWORD PTR[48+rdi]
- mov r15,QWORD PTR[56+rdi]
- mov QWORD PTR[rdx],rax
- lea rdi,QWORD PTR[64+rdi]
-
-DB 067h
- mov r8,rbx
- imul rbx,QWORD PTR[((32+8))+rsp]
- mov rax,QWORD PTR[rbp]
- mov ecx,8
- jmp $L$8x_reduce
-
-ALIGN 32
-$L$8x_reduce::
- mul rbx
- mov rax,QWORD PTR[8+rbp]
- neg r8
- mov r8,rdx
- adc r8,0
-
- mul rbx
- add r9,rax
- mov rax,QWORD PTR[16+rbp]
- adc rdx,0
- add r8,r9
- mov QWORD PTR[((48-8+8))+rcx*8+rsp],rbx
- mov r9,rdx
- adc r9,0
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[24+rbp]
- adc rdx,0
- add r9,r10
- mov rsi,QWORD PTR[((32+8))+rsp]
- mov r10,rdx
- adc r10,0
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[32+rbp]
- adc rdx,0
- imul rsi,r8
- add r10,r11
- mov r11,rdx
- adc r11,0
-
- mul rbx
- add r12,rax
- mov rax,QWORD PTR[40+rbp]
- adc rdx,0
- add r11,r12
- mov r12,rdx
- adc r12,0
-
- mul rbx
- add r13,rax
- mov rax,QWORD PTR[48+rbp]
- adc rdx,0
- add r12,r13
- mov r13,rdx
- adc r13,0
-
- mul rbx
- add r14,rax
- mov rax,QWORD PTR[56+rbp]
- adc rdx,0
- add r13,r14
- mov r14,rdx
- adc r14,0
-
- mul rbx
- mov rbx,rsi
- add r15,rax
- mov rax,QWORD PTR[rbp]
- adc rdx,0
- add r14,r15
- mov r15,rdx
- adc r15,0
-
- dec ecx
- jnz $L$8x_reduce
-
- lea rbp,QWORD PTR[64+rbp]
- xor rax,rax
- mov rdx,QWORD PTR[((8+8))+rsp]
- cmp rbp,QWORD PTR[((0+8))+rsp]
- jae $L$8x_no_tail
-
-DB 066h
- add r8,QWORD PTR[rdi]
- adc r9,QWORD PTR[8+rdi]
- adc r10,QWORD PTR[16+rdi]
- adc r11,QWORD PTR[24+rdi]
- adc r12,QWORD PTR[32+rdi]
- adc r13,QWORD PTR[40+rdi]
- adc r14,QWORD PTR[48+rdi]
- adc r15,QWORD PTR[56+rdi]
- sbb rsi,rsi
-
- mov rbx,QWORD PTR[((48+56+8))+rsp]
- mov ecx,8
- mov rax,QWORD PTR[rbp]
- jmp $L$8x_tail
-
-ALIGN 32
-$L$8x_tail::
- mul rbx
- add r8,rax
- mov rax,QWORD PTR[8+rbp]
- mov QWORD PTR[rdi],r8
- mov r8,rdx
- adc r8,0
-
- mul rbx
- add r9,rax
- mov rax,QWORD PTR[16+rbp]
- adc rdx,0
- add r8,r9
- lea rdi,QWORD PTR[8+rdi]
- mov r9,rdx
- adc r9,0
-
- mul rbx
- add r10,rax
- mov rax,QWORD PTR[24+rbp]
- adc rdx,0
- add r9,r10
- mov r10,rdx
- adc r10,0
-
- mul rbx
- add r11,rax
- mov rax,QWORD PTR[32+rbp]
- adc rdx,0
- add r10,r11
- mov r11,rdx
- adc r11,0
-
- mul rbx
- add r12,rax
- mov rax,QWORD PTR[40+rbp]
- adc rdx,0
- add r11,r12
- mov r12,rdx
- adc r12,0
-
- mul rbx
- add r13,rax
- mov rax,QWORD PTR[48+rbp]
- adc rdx,0
- add r12,r13
- mov r13,rdx
- adc r13,0
-
- mul rbx
- add r14,rax
- mov rax,QWORD PTR[56+rbp]
- adc rdx,0
- add r13,r14
- mov r14,rdx
- adc r14,0
-
- mul rbx
- mov rbx,QWORD PTR[((48-16+8))+rcx*8+rsp]
- add r15,rax
- adc rdx,0
- add r14,r15
- mov rax,QWORD PTR[rbp]
- mov r15,rdx
- adc r15,0
-
- dec ecx
- jnz $L$8x_tail
-
- lea rbp,QWORD PTR[64+rbp]
- mov rdx,QWORD PTR[((8+8))+rsp]
- cmp rbp,QWORD PTR[((0+8))+rsp]
- jae $L$8x_tail_done
-
- mov rbx,QWORD PTR[((48+56+8))+rsp]
- neg rsi
- mov rax,QWORD PTR[rbp]
- adc r8,QWORD PTR[rdi]
- adc r9,QWORD PTR[8+rdi]
- adc r10,QWORD PTR[16+rdi]
- adc r11,QWORD PTR[24+rdi]
- adc r12,QWORD PTR[32+rdi]
- adc r13,QWORD PTR[40+rdi]
- adc r14,QWORD PTR[48+rdi]
- adc r15,QWORD PTR[56+rdi]
- sbb rsi,rsi
-
- mov ecx,8
- jmp $L$8x_tail
-
-ALIGN 32
-$L$8x_tail_done::
- xor rax,rax
- add r8,QWORD PTR[rdx]
- adc r9,0
- adc r10,0
- adc r11,0
- adc r12,0
- adc r13,0
- adc r14,0
- adc r15,0
- adc rax,0
-
- neg rsi
-$L$8x_no_tail::
- adc r8,QWORD PTR[rdi]
- adc r9,QWORD PTR[8+rdi]
- adc r10,QWORD PTR[16+rdi]
- adc r11,QWORD PTR[24+rdi]
- adc r12,QWORD PTR[32+rdi]
- adc r13,QWORD PTR[40+rdi]
- adc r14,QWORD PTR[48+rdi]
- adc r15,QWORD PTR[56+rdi]
- adc rax,0
- mov rcx,QWORD PTR[((-8))+rbp]
- xor rsi,rsi
-
-DB 102,72,15,126,213
-
- mov QWORD PTR[rdi],r8
- mov QWORD PTR[8+rdi],r9
-DB 102,73,15,126,217
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
- mov QWORD PTR[32+rdi],r12
- mov QWORD PTR[40+rdi],r13
- mov QWORD PTR[48+rdi],r14
- mov QWORD PTR[56+rdi],r15
- lea rdi,QWORD PTR[64+rdi]
-
- cmp rdi,rdx
- jb $L$8x_reduction_loop
- DB 0F3h,0C3h ;repret
-
-bn_sqr8x_internal ENDP
-
-ALIGN 32
-__bn_post4x_internal PROC PRIVATE
-
- mov r12,QWORD PTR[rbp]
- lea rbx,QWORD PTR[r9*1+rdi]
- mov rcx,r9
-DB 102,72,15,126,207
- neg rax
-DB 102,72,15,126,206
- sar rcx,3+2
- dec r12
- xor r10,r10
- mov r13,QWORD PTR[8+rbp]
- mov r14,QWORD PTR[16+rbp]
- mov r15,QWORD PTR[24+rbp]
- jmp $L$sqr4x_sub_entry
-
-ALIGN 16
-$L$sqr4x_sub::
- mov r12,QWORD PTR[rbp]
- mov r13,QWORD PTR[8+rbp]
- mov r14,QWORD PTR[16+rbp]
- mov r15,QWORD PTR[24+rbp]
-$L$sqr4x_sub_entry::
- lea rbp,QWORD PTR[32+rbp]
- not r12
- not r13
- not r14
- not r15
- and r12,rax
- and r13,rax
- and r14,rax
- and r15,rax
-
- neg r10
- adc r12,QWORD PTR[rbx]
- adc r13,QWORD PTR[8+rbx]
- adc r14,QWORD PTR[16+rbx]
- adc r15,QWORD PTR[24+rbx]
- mov QWORD PTR[rdi],r12
- lea rbx,QWORD PTR[32+rbx]
- mov QWORD PTR[8+rdi],r13
- sbb r10,r10
- mov QWORD PTR[16+rdi],r14
- mov QWORD PTR[24+rdi],r15
- lea rdi,QWORD PTR[32+rdi]
-
- inc rcx
- jnz $L$sqr4x_sub
-
- mov r10,r9
- neg r9
- DB 0F3h,0C3h ;repret
-
-__bn_post4x_internal ENDP
-PUBLIC bn_from_montgomery
-
-ALIGN 32
-bn_from_montgomery PROC PUBLIC
-
- test DWORD PTR[48+rsp],7
- jz bn_from_mont8x
- xor eax,eax
- DB 0F3h,0C3h ;repret
-
-bn_from_montgomery ENDP
-
-
-ALIGN 32
-bn_from_mont8x PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_bn_from_mont8x::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
-DB 067h
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$from_prologue::
-
- shl r9d,3
- lea r10,QWORD PTR[r9*2+r9]
- neg r9
- mov r8,QWORD PTR[r8]
-
-
-
-
-
-
-
-
- lea r11,QWORD PTR[((-320))+r9*2+rsp]
- mov rbp,rsp
- sub r11,rdi
- and r11,4095
- cmp r10,r11
- jb $L$from_sp_alt
- sub rbp,r11
- lea rbp,QWORD PTR[((-320))+r9*2+rbp]
- jmp $L$from_sp_done
-
-ALIGN 32
-$L$from_sp_alt::
- lea r10,QWORD PTR[((4096-320))+r9*2]
- lea rbp,QWORD PTR[((-320))+r9*2+rbp]
- sub r11,r10
- mov r10,0
- cmovc r11,r10
- sub rbp,r11
-$L$from_sp_done::
- and rbp,-64
- mov r11,rsp
- sub r11,rbp
- and r11,-4096
- lea rsp,QWORD PTR[rbp*1+r11]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$from_page_walk
- jmp $L$from_page_walk_done
-
-$L$from_page_walk::
- lea rsp,QWORD PTR[((-4096))+rsp]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$from_page_walk
-$L$from_page_walk_done::
-
- mov r10,r9
- neg r9
-
-
-
-
-
-
-
-
-
-
- mov QWORD PTR[32+rsp],r8
- mov QWORD PTR[40+rsp],rax
-
-$L$from_body::
- mov r11,r9
- lea rax,QWORD PTR[48+rsp]
- pxor xmm0,xmm0
- jmp $L$mul_by_1
-
-ALIGN 32
-$L$mul_by_1::
- movdqu xmm1,XMMWORD PTR[rsi]
- movdqu xmm2,XMMWORD PTR[16+rsi]
- movdqu xmm3,XMMWORD PTR[32+rsi]
- movdqa XMMWORD PTR[r9*1+rax],xmm0
- movdqu xmm4,XMMWORD PTR[48+rsi]
- movdqa XMMWORD PTR[16+r9*1+rax],xmm0
-DB 048h,08dh,0b6h,040h,000h,000h,000h
- movdqa XMMWORD PTR[rax],xmm1
- movdqa XMMWORD PTR[32+r9*1+rax],xmm0
- movdqa XMMWORD PTR[16+rax],xmm2
- movdqa XMMWORD PTR[48+r9*1+rax],xmm0
- movdqa XMMWORD PTR[32+rax],xmm3
- movdqa XMMWORD PTR[48+rax],xmm4
- lea rax,QWORD PTR[64+rax]
- sub r11,64
- jnz $L$mul_by_1
-
-DB 102,72,15,110,207
-DB 102,72,15,110,209
-DB 067h
- mov rbp,rcx
-DB 102,73,15,110,218
- mov r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- and r11d,080108h
- cmp r11d,080108h
- jne $L$from_mont_nox
-
- lea rdi,QWORD PTR[r9*1+rax]
- call __bn_sqrx8x_reduction
- call __bn_postx4x_internal
-
- pxor xmm0,xmm0
- lea rax,QWORD PTR[48+rsp]
- jmp $L$from_mont_zero
-
-ALIGN 32
-$L$from_mont_nox::
- call __bn_sqr8x_reduction
- call __bn_post4x_internal
-
- pxor xmm0,xmm0
- lea rax,QWORD PTR[48+rsp]
- jmp $L$from_mont_zero
-
-ALIGN 32
-$L$from_mont_zero::
- mov rsi,QWORD PTR[40+rsp]
-
- movdqa XMMWORD PTR[rax],xmm0
- movdqa XMMWORD PTR[16+rax],xmm0
- movdqa XMMWORD PTR[32+rax],xmm0
- movdqa XMMWORD PTR[48+rax],xmm0
- lea rax,QWORD PTR[64+rax]
- sub r9,32
- jnz $L$from_mont_zero
-
- mov rax,1
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$from_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_bn_from_mont8x::
-bn_from_mont8x ENDP
-
-ALIGN 32
-bn_mulx4x_mont_gather5 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_bn_mulx4x_mont_gather5::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov rax,rsp
-
-$L$mulx4x_enter::
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$mulx4x_prologue::
-
- shl r9d,3
- lea r10,QWORD PTR[r9*2+r9]
- neg r9
- mov r8,QWORD PTR[r8]
-
-
-
-
-
-
-
-
-
-
- lea r11,QWORD PTR[((-320))+r9*2+rsp]
- mov rbp,rsp
- sub r11,rdi
- and r11,4095
- cmp r10,r11
- jb $L$mulx4xsp_alt
- sub rbp,r11
- lea rbp,QWORD PTR[((-320))+r9*2+rbp]
- jmp $L$mulx4xsp_done
-
-$L$mulx4xsp_alt::
- lea r10,QWORD PTR[((4096-320))+r9*2]
- lea rbp,QWORD PTR[((-320))+r9*2+rbp]
- sub r11,r10
- mov r10,0
- cmovc r11,r10
- sub rbp,r11
-$L$mulx4xsp_done::
- and rbp,-64
- mov r11,rsp
- sub r11,rbp
- and r11,-4096
- lea rsp,QWORD PTR[rbp*1+r11]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$mulx4x_page_walk
- jmp $L$mulx4x_page_walk_done
-
-$L$mulx4x_page_walk::
- lea rsp,QWORD PTR[((-4096))+rsp]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$mulx4x_page_walk
-$L$mulx4x_page_walk_done::
-
-
-
-
-
-
-
-
-
-
-
-
-
- mov QWORD PTR[32+rsp],r8
- mov QWORD PTR[40+rsp],rax
-
-$L$mulx4x_body::
- call mulx4x_internal
-
- mov rsi,QWORD PTR[40+rsp]
-
- mov rax,1
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$mulx4x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_bn_mulx4x_mont_gather5::
-bn_mulx4x_mont_gather5 ENDP
-
-
-ALIGN 32
-mulx4x_internal PROC PRIVATE
-
- mov QWORD PTR[8+rsp],r9
- mov r10,r9
- neg r9
- shl r9,5
- neg r10
- lea r13,QWORD PTR[128+r9*1+rdx]
- shr r9,5+5
- movd xmm5,DWORD PTR[56+rax]
- sub r9,1
- lea rax,QWORD PTR[$L$inc]
- mov QWORD PTR[((16+8))+rsp],r13
- mov QWORD PTR[((24+8))+rsp],r9
- mov QWORD PTR[((56+8))+rsp],rdi
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa xmm1,XMMWORD PTR[16+rax]
- lea r10,QWORD PTR[((88-112))+r10*1+rsp]
- lea rdi,QWORD PTR[128+rdx]
-
- pshufd xmm5,xmm5,0
- movdqa xmm4,xmm1
-DB 067h
- movdqa xmm2,xmm1
-DB 067h
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[112+r10],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[128+r10],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[144+r10],xmm2
- movdqa xmm2,xmm4
-
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[160+r10],xmm3
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[176+r10],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[192+r10],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[208+r10],xmm2
- movdqa xmm2,xmm4
-
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[224+r10],xmm3
- movdqa xmm3,xmm4
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[240+r10],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[256+r10],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[272+r10],xmm2
- movdqa xmm2,xmm4
-
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[288+r10],xmm3
- movdqa xmm3,xmm4
-DB 067h
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[304+r10],xmm0
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[320+r10],xmm1
-
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[336+r10],xmm2
-
- pand xmm0,XMMWORD PTR[64+rdi]
- pand xmm1,XMMWORD PTR[80+rdi]
- pand xmm2,XMMWORD PTR[96+rdi]
- movdqa XMMWORD PTR[352+r10],xmm3
- pand xmm3,XMMWORD PTR[112+rdi]
- por xmm0,xmm2
- por xmm1,xmm3
- movdqa xmm4,XMMWORD PTR[((-128))+rdi]
- movdqa xmm5,XMMWORD PTR[((-112))+rdi]
- movdqa xmm2,XMMWORD PTR[((-96))+rdi]
- pand xmm4,XMMWORD PTR[112+r10]
- movdqa xmm3,XMMWORD PTR[((-80))+rdi]
- pand xmm5,XMMWORD PTR[128+r10]
- por xmm0,xmm4
- pand xmm2,XMMWORD PTR[144+r10]
- por xmm1,xmm5
- pand xmm3,XMMWORD PTR[160+r10]
- por xmm0,xmm2
- por xmm1,xmm3
- movdqa xmm4,XMMWORD PTR[((-64))+rdi]
- movdqa xmm5,XMMWORD PTR[((-48))+rdi]
- movdqa xmm2,XMMWORD PTR[((-32))+rdi]
- pand xmm4,XMMWORD PTR[176+r10]
- movdqa xmm3,XMMWORD PTR[((-16))+rdi]
- pand xmm5,XMMWORD PTR[192+r10]
- por xmm0,xmm4
- pand xmm2,XMMWORD PTR[208+r10]
- por xmm1,xmm5
- pand xmm3,XMMWORD PTR[224+r10]
- por xmm0,xmm2
- por xmm1,xmm3
- movdqa xmm4,XMMWORD PTR[rdi]
- movdqa xmm5,XMMWORD PTR[16+rdi]
- movdqa xmm2,XMMWORD PTR[32+rdi]
- pand xmm4,XMMWORD PTR[240+r10]
- movdqa xmm3,XMMWORD PTR[48+rdi]
- pand xmm5,XMMWORD PTR[256+r10]
- por xmm0,xmm4
- pand xmm2,XMMWORD PTR[272+r10]
- por xmm1,xmm5
- pand xmm3,XMMWORD PTR[288+r10]
- por xmm0,xmm2
- por xmm1,xmm3
- pxor xmm0,xmm1
- pshufd xmm1,xmm0,04eh
- por xmm0,xmm1
- lea rdi,QWORD PTR[256+rdi]
-DB 102,72,15,126,194
- lea rbx,QWORD PTR[((64+32+8))+rsp]
-
- mov r9,rdx
- mulx rax,r8,QWORD PTR[rsi]
- mulx r12,r11,QWORD PTR[8+rsi]
- add r11,rax
- mulx r13,rax,QWORD PTR[16+rsi]
- adc r12,rax
- adc r13,0
- mulx r14,rax,QWORD PTR[24+rsi]
-
- mov r15,r8
- imul r8,QWORD PTR[((32+8))+rsp]
- xor rbp,rbp
- mov rdx,r8
-
- mov QWORD PTR[((8+8))+rsp],rdi
-
- lea rsi,QWORD PTR[32+rsi]
- adcx r13,rax
- adcx r14,rbp
-
- mulx r10,rax,QWORD PTR[rcx]
- adcx r15,rax
- adox r10,r11
- mulx r11,rax,QWORD PTR[8+rcx]
- adcx r10,rax
- adox r11,r12
- mulx r12,rax,QWORD PTR[16+rcx]
- mov rdi,QWORD PTR[((24+8))+rsp]
- mov QWORD PTR[((-32))+rbx],r10
- adcx r11,rax
- adox r12,r13
- mulx r15,rax,QWORD PTR[24+rcx]
- mov rdx,r9
- mov QWORD PTR[((-24))+rbx],r11
- adcx r12,rax
- adox r15,rbp
- lea rcx,QWORD PTR[32+rcx]
- mov QWORD PTR[((-16))+rbx],r12
- jmp $L$mulx4x_1st
-
-ALIGN 32
-$L$mulx4x_1st::
- adcx r15,rbp
- mulx rax,r10,QWORD PTR[rsi]
- adcx r10,r14
- mulx r14,r11,QWORD PTR[8+rsi]
- adcx r11,rax
- mulx rax,r12,QWORD PTR[16+rsi]
- adcx r12,r14
- mulx r14,r13,QWORD PTR[24+rsi]
-DB 067h,067h
- mov rdx,r8
- adcx r13,rax
- adcx r14,rbp
- lea rsi,QWORD PTR[32+rsi]
- lea rbx,QWORD PTR[32+rbx]
-
- adox r10,r15
- mulx r15,rax,QWORD PTR[rcx]
- adcx r10,rax
- adox r11,r15
- mulx r15,rax,QWORD PTR[8+rcx]
- adcx r11,rax
- adox r12,r15
- mulx r15,rax,QWORD PTR[16+rcx]
- mov QWORD PTR[((-40))+rbx],r10
- adcx r12,rax
- mov QWORD PTR[((-32))+rbx],r11
- adox r13,r15
- mulx r15,rax,QWORD PTR[24+rcx]
- mov rdx,r9
- mov QWORD PTR[((-24))+rbx],r12
- adcx r13,rax
- adox r15,rbp
- lea rcx,QWORD PTR[32+rcx]
- mov QWORD PTR[((-16))+rbx],r13
-
- dec rdi
- jnz $L$mulx4x_1st
-
- mov rax,QWORD PTR[8+rsp]
- adc r15,rbp
- lea rsi,QWORD PTR[rax*1+rsi]
- add r14,r15
- mov rdi,QWORD PTR[((8+8))+rsp]
- adc rbp,rbp
- mov QWORD PTR[((-8))+rbx],r14
- jmp $L$mulx4x_outer
-
-ALIGN 32
-$L$mulx4x_outer::
- lea r10,QWORD PTR[((16-256))+rbx]
- pxor xmm4,xmm4
-DB 067h,067h
- pxor xmm5,xmm5
- movdqa xmm0,XMMWORD PTR[((-128))+rdi]
- movdqa xmm1,XMMWORD PTR[((-112))+rdi]
- movdqa xmm2,XMMWORD PTR[((-96))+rdi]
- pand xmm0,XMMWORD PTR[256+r10]
- movdqa xmm3,XMMWORD PTR[((-80))+rdi]
- pand xmm1,XMMWORD PTR[272+r10]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[288+r10]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[304+r10]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[((-64))+rdi]
- movdqa xmm1,XMMWORD PTR[((-48))+rdi]
- movdqa xmm2,XMMWORD PTR[((-32))+rdi]
- pand xmm0,XMMWORD PTR[320+r10]
- movdqa xmm3,XMMWORD PTR[((-16))+rdi]
- pand xmm1,XMMWORD PTR[336+r10]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[352+r10]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[368+r10]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[rdi]
- movdqa xmm1,XMMWORD PTR[16+rdi]
- movdqa xmm2,XMMWORD PTR[32+rdi]
- pand xmm0,XMMWORD PTR[384+r10]
- movdqa xmm3,XMMWORD PTR[48+rdi]
- pand xmm1,XMMWORD PTR[400+r10]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[416+r10]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[432+r10]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[64+rdi]
- movdqa xmm1,XMMWORD PTR[80+rdi]
- movdqa xmm2,XMMWORD PTR[96+rdi]
- pand xmm0,XMMWORD PTR[448+r10]
- movdqa xmm3,XMMWORD PTR[112+rdi]
- pand xmm1,XMMWORD PTR[464+r10]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[480+r10]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[496+r10]
- por xmm4,xmm2
- por xmm5,xmm3
- por xmm4,xmm5
- pshufd xmm0,xmm4,04eh
- por xmm0,xmm4
- lea rdi,QWORD PTR[256+rdi]
-DB 102,72,15,126,194
-
- mov QWORD PTR[rbx],rbp
- lea rbx,QWORD PTR[32+rax*1+rbx]
- mulx r11,r8,QWORD PTR[rsi]
- xor rbp,rbp
- mov r9,rdx
- mulx r12,r14,QWORD PTR[8+rsi]
- adox r8,QWORD PTR[((-32))+rbx]
- adcx r11,r14
- mulx r13,r15,QWORD PTR[16+rsi]
- adox r11,QWORD PTR[((-24))+rbx]
- adcx r12,r15
- mulx r14,rdx,QWORD PTR[24+rsi]
- adox r12,QWORD PTR[((-16))+rbx]
- adcx r13,rdx
- lea rcx,QWORD PTR[rax*1+rcx]
- lea rsi,QWORD PTR[32+rsi]
- adox r13,QWORD PTR[((-8))+rbx]
- adcx r14,rbp
- adox r14,rbp
-
- mov r15,r8
- imul r8,QWORD PTR[((32+8))+rsp]
-
- mov rdx,r8
- xor rbp,rbp
- mov QWORD PTR[((8+8))+rsp],rdi
-
- mulx r10,rax,QWORD PTR[rcx]
- adcx r15,rax
- adox r10,r11
- mulx r11,rax,QWORD PTR[8+rcx]
- adcx r10,rax
- adox r11,r12
- mulx r12,rax,QWORD PTR[16+rcx]
- adcx r11,rax
- adox r12,r13
- mulx r15,rax,QWORD PTR[24+rcx]
- mov rdx,r9
- mov rdi,QWORD PTR[((24+8))+rsp]
- mov QWORD PTR[((-32))+rbx],r10
- adcx r12,rax
- mov QWORD PTR[((-24))+rbx],r11
- adox r15,rbp
- mov QWORD PTR[((-16))+rbx],r12
- lea rcx,QWORD PTR[32+rcx]
- jmp $L$mulx4x_inner
-
-ALIGN 32
-$L$mulx4x_inner::
- mulx rax,r10,QWORD PTR[rsi]
- adcx r15,rbp
- adox r10,r14
- mulx r14,r11,QWORD PTR[8+rsi]
- adcx r10,QWORD PTR[rbx]
- adox r11,rax
- mulx rax,r12,QWORD PTR[16+rsi]
- adcx r11,QWORD PTR[8+rbx]
- adox r12,r14
- mulx r14,r13,QWORD PTR[24+rsi]
- mov rdx,r8
- adcx r12,QWORD PTR[16+rbx]
- adox r13,rax
- adcx r13,QWORD PTR[24+rbx]
- adox r14,rbp
- lea rsi,QWORD PTR[32+rsi]
- lea rbx,QWORD PTR[32+rbx]
- adcx r14,rbp
-
- adox r10,r15
- mulx r15,rax,QWORD PTR[rcx]
- adcx r10,rax
- adox r11,r15
- mulx r15,rax,QWORD PTR[8+rcx]
- adcx r11,rax
- adox r12,r15
- mulx r15,rax,QWORD PTR[16+rcx]
- mov QWORD PTR[((-40))+rbx],r10
- adcx r12,rax
- adox r13,r15
- mov QWORD PTR[((-32))+rbx],r11
- mulx r15,rax,QWORD PTR[24+rcx]
- mov rdx,r9
- lea rcx,QWORD PTR[32+rcx]
- mov QWORD PTR[((-24))+rbx],r12
- adcx r13,rax
- adox r15,rbp
- mov QWORD PTR[((-16))+rbx],r13
-
- dec rdi
- jnz $L$mulx4x_inner
-
- mov rax,QWORD PTR[((0+8))+rsp]
- adc r15,rbp
- sub rdi,QWORD PTR[rbx]
- mov rdi,QWORD PTR[((8+8))+rsp]
- mov r10,QWORD PTR[((16+8))+rsp]
- adc r14,r15
- lea rsi,QWORD PTR[rax*1+rsi]
- adc rbp,rbp
- mov QWORD PTR[((-8))+rbx],r14
-
- cmp rdi,r10
- jb $L$mulx4x_outer
-
- mov r10,QWORD PTR[((-8))+rcx]
- mov r8,rbp
- mov r12,QWORD PTR[rax*1+rcx]
- lea rbp,QWORD PTR[rax*1+rcx]
- mov rcx,rax
- lea rdi,QWORD PTR[rax*1+rbx]
- xor eax,eax
- xor r15,r15
- sub r10,r14
- adc r15,r15
- or r8,r15
- sar rcx,3+2
- sub rax,r8
- mov rdx,QWORD PTR[((56+8))+rsp]
- dec r12
- mov r13,QWORD PTR[8+rbp]
- xor r8,r8
- mov r14,QWORD PTR[16+rbp]
- mov r15,QWORD PTR[24+rbp]
- jmp $L$sqrx4x_sub_entry
-
-mulx4x_internal ENDP
-
-ALIGN 32
-bn_powerx5 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_bn_powerx5::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- mov rax,rsp
-
-$L$powerx5_enter::
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$powerx5_prologue::
-
- shl r9d,3
- lea r10,QWORD PTR[r9*2+r9]
- neg r9
- mov r8,QWORD PTR[r8]
-
-
-
-
-
-
-
-
- lea r11,QWORD PTR[((-320))+r9*2+rsp]
- mov rbp,rsp
- sub r11,rdi
- and r11,4095
- cmp r10,r11
- jb $L$pwrx_sp_alt
- sub rbp,r11
- lea rbp,QWORD PTR[((-320))+r9*2+rbp]
- jmp $L$pwrx_sp_done
-
-ALIGN 32
-$L$pwrx_sp_alt::
- lea r10,QWORD PTR[((4096-320))+r9*2]
- lea rbp,QWORD PTR[((-320))+r9*2+rbp]
- sub r11,r10
- mov r10,0
- cmovc r11,r10
- sub rbp,r11
-$L$pwrx_sp_done::
- and rbp,-64
- mov r11,rsp
- sub r11,rbp
- and r11,-4096
- lea rsp,QWORD PTR[rbp*1+r11]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$pwrx_page_walk
- jmp $L$pwrx_page_walk_done
-
-$L$pwrx_page_walk::
- lea rsp,QWORD PTR[((-4096))+rsp]
- mov r10,QWORD PTR[rsp]
- cmp rsp,rbp
- ja $L$pwrx_page_walk
-$L$pwrx_page_walk_done::
-
- mov r10,r9
- neg r9
-
-
-
-
-
-
-
-
-
-
-
-
- pxor xmm0,xmm0
-DB 102,72,15,110,207
-DB 102,72,15,110,209
-DB 102,73,15,110,218
-DB 102,72,15,110,226
- mov QWORD PTR[32+rsp],r8
- mov QWORD PTR[40+rsp],rax
-
-$L$powerx5_body::
-
- call __bn_sqrx8x_internal
- call __bn_postx4x_internal
- call __bn_sqrx8x_internal
- call __bn_postx4x_internal
- call __bn_sqrx8x_internal
- call __bn_postx4x_internal
- call __bn_sqrx8x_internal
- call __bn_postx4x_internal
- call __bn_sqrx8x_internal
- call __bn_postx4x_internal
-
- mov r9,r10
- mov rdi,rsi
-DB 102,72,15,126,209
-DB 102,72,15,126,226
- mov rax,QWORD PTR[40+rsp]
-
- call mulx4x_internal
-
- mov rsi,QWORD PTR[40+rsp]
-
- mov rax,1
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$powerx5_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_bn_powerx5::
-bn_powerx5 ENDP
-
-PUBLIC bn_sqrx8x_internal
-
-
-ALIGN 32
-bn_sqrx8x_internal PROC PUBLIC
-__bn_sqrx8x_internal::
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- lea rdi,QWORD PTR[((48+8))+rsp]
- lea rbp,QWORD PTR[r9*1+rsi]
- mov QWORD PTR[((0+8))+rsp],r9
- mov QWORD PTR[((8+8))+rsp],rbp
- jmp $L$sqr8x_zero_start
-
-ALIGN 32
-DB 066h,066h,066h,02eh,00fh,01fh,084h,000h,000h,000h,000h,000h
-$L$sqrx8x_zero::
-DB 03eh
- movdqa XMMWORD PTR[rdi],xmm0
- movdqa XMMWORD PTR[16+rdi],xmm0
- movdqa XMMWORD PTR[32+rdi],xmm0
- movdqa XMMWORD PTR[48+rdi],xmm0
-$L$sqr8x_zero_start::
- movdqa XMMWORD PTR[64+rdi],xmm0
- movdqa XMMWORD PTR[80+rdi],xmm0
- movdqa XMMWORD PTR[96+rdi],xmm0
- movdqa XMMWORD PTR[112+rdi],xmm0
- lea rdi,QWORD PTR[128+rdi]
- sub r9,64
- jnz $L$sqrx8x_zero
-
- mov rdx,QWORD PTR[rsi]
-
- xor r10,r10
- xor r11,r11
- xor r12,r12
- xor r13,r13
- xor r14,r14
- xor r15,r15
- lea rdi,QWORD PTR[((48+8))+rsp]
- xor rbp,rbp
- jmp $L$sqrx8x_outer_loop
-
-ALIGN 32
-$L$sqrx8x_outer_loop::
- mulx rax,r8,QWORD PTR[8+rsi]
- adcx r8,r9
- adox r10,rax
- mulx rax,r9,QWORD PTR[16+rsi]
- adcx r9,r10
- adox r11,rax
-DB 0c4h,0e2h,0abh,0f6h,086h,018h,000h,000h,000h
- adcx r10,r11
- adox r12,rax
-DB 0c4h,0e2h,0a3h,0f6h,086h,020h,000h,000h,000h
- adcx r11,r12
- adox r13,rax
- mulx rax,r12,QWORD PTR[40+rsi]
- adcx r12,r13
- adox r14,rax
- mulx rax,r13,QWORD PTR[48+rsi]
- adcx r13,r14
- adox rax,r15
- mulx r15,r14,QWORD PTR[56+rsi]
- mov rdx,QWORD PTR[8+rsi]
- adcx r14,rax
- adox r15,rbp
- adc r15,QWORD PTR[64+rdi]
- mov QWORD PTR[8+rdi],r8
- mov QWORD PTR[16+rdi],r9
- sbb rcx,rcx
- xor rbp,rbp
-
-
- mulx rbx,r8,QWORD PTR[16+rsi]
- mulx rax,r9,QWORD PTR[24+rsi]
- adcx r8,r10
- adox r9,rbx
- mulx rbx,r10,QWORD PTR[32+rsi]
- adcx r9,r11
- adox r10,rax
-DB 0c4h,0e2h,0a3h,0f6h,086h,028h,000h,000h,000h
- adcx r10,r12
- adox r11,rbx
-DB 0c4h,0e2h,09bh,0f6h,09eh,030h,000h,000h,000h
- adcx r11,r13
- adox r12,r14
-DB 0c4h,062h,093h,0f6h,0b6h,038h,000h,000h,000h
- mov rdx,QWORD PTR[16+rsi]
- adcx r12,rax
- adox r13,rbx
- adcx r13,r15
- adox r14,rbp
- adcx r14,rbp
-
- mov QWORD PTR[24+rdi],r8
- mov QWORD PTR[32+rdi],r9
-
- mulx rbx,r8,QWORD PTR[24+rsi]
- mulx rax,r9,QWORD PTR[32+rsi]
- adcx r8,r10
- adox r9,rbx
- mulx rbx,r10,QWORD PTR[40+rsi]
- adcx r9,r11
- adox r10,rax
-DB 0c4h,0e2h,0a3h,0f6h,086h,030h,000h,000h,000h
- adcx r10,r12
- adox r11,r13
-DB 0c4h,062h,09bh,0f6h,0aeh,038h,000h,000h,000h
-DB 03eh
- mov rdx,QWORD PTR[24+rsi]
- adcx r11,rbx
- adox r12,rax
- adcx r12,r14
- mov QWORD PTR[40+rdi],r8
- mov QWORD PTR[48+rdi],r9
- mulx rax,r8,QWORD PTR[32+rsi]
- adox r13,rbp
- adcx r13,rbp
-
- mulx rbx,r9,QWORD PTR[40+rsi]
- adcx r8,r10
- adox r9,rax
- mulx rax,r10,QWORD PTR[48+rsi]
- adcx r9,r11
- adox r10,r12
- mulx r12,r11,QWORD PTR[56+rsi]
- mov rdx,QWORD PTR[32+rsi]
- mov r14,QWORD PTR[40+rsi]
- adcx r10,rbx
- adox r11,rax
- mov r15,QWORD PTR[48+rsi]
- adcx r11,r13
- adox r12,rbp
- adcx r12,rbp
-
- mov QWORD PTR[56+rdi],r8
- mov QWORD PTR[64+rdi],r9
-
- mulx rax,r9,r14
- mov r8,QWORD PTR[56+rsi]
- adcx r9,r10
- mulx rbx,r10,r15
- adox r10,rax
- adcx r10,r11
- mulx rax,r11,r8
- mov rdx,r14
- adox r11,rbx
- adcx r11,r12
-
- adcx rax,rbp
-
- mulx rbx,r14,r15
- mulx r13,r12,r8
- mov rdx,r15
- lea rsi,QWORD PTR[64+rsi]
- adcx r11,r14
- adox r12,rbx
- adcx r12,rax
- adox r13,rbp
-
-DB 067h,067h
- mulx r14,r8,r8
- adcx r13,r8
- adcx r14,rbp
-
- cmp rsi,QWORD PTR[((8+8))+rsp]
- je $L$sqrx8x_outer_break
-
- neg rcx
- mov rcx,-8
- mov r15,rbp
- mov r8,QWORD PTR[64+rdi]
- adcx r9,QWORD PTR[72+rdi]
- adcx r10,QWORD PTR[80+rdi]
- adcx r11,QWORD PTR[88+rdi]
- adc r12,QWORD PTR[96+rdi]
- adc r13,QWORD PTR[104+rdi]
- adc r14,QWORD PTR[112+rdi]
- adc r15,QWORD PTR[120+rdi]
- lea rbp,QWORD PTR[rsi]
- lea rdi,QWORD PTR[128+rdi]
- sbb rax,rax
-
- mov rdx,QWORD PTR[((-64))+rsi]
- mov QWORD PTR[((16+8))+rsp],rax
- mov QWORD PTR[((24+8))+rsp],rdi
-
-
- xor eax,eax
- jmp $L$sqrx8x_loop
-
-ALIGN 32
-$L$sqrx8x_loop::
- mov rbx,r8
- mulx r8,rax,QWORD PTR[rbp]
- adcx rbx,rax
- adox r8,r9
-
- mulx r9,rax,QWORD PTR[8+rbp]
- adcx r8,rax
- adox r9,r10
-
- mulx r10,rax,QWORD PTR[16+rbp]
- adcx r9,rax
- adox r10,r11
-
- mulx r11,rax,QWORD PTR[24+rbp]
- adcx r10,rax
- adox r11,r12
-
-DB 0c4h,062h,0fbh,0f6h,0a5h,020h,000h,000h,000h
- adcx r11,rax
- adox r12,r13
-
- mulx r13,rax,QWORD PTR[40+rbp]
- adcx r12,rax
- adox r13,r14
-
- mulx r14,rax,QWORD PTR[48+rbp]
- mov QWORD PTR[rcx*8+rdi],rbx
- mov ebx,0
- adcx r13,rax
- adox r14,r15
-
-DB 0c4h,062h,0fbh,0f6h,0bdh,038h,000h,000h,000h
- mov rdx,QWORD PTR[8+rcx*8+rsi]
- adcx r14,rax
- adox r15,rbx
- adcx r15,rbx
-
-DB 067h
- inc rcx
- jnz $L$sqrx8x_loop
-
- lea rbp,QWORD PTR[64+rbp]
- mov rcx,-8
- cmp rbp,QWORD PTR[((8+8))+rsp]
- je $L$sqrx8x_break
-
- sub rbx,QWORD PTR[((16+8))+rsp]
-DB 066h
- mov rdx,QWORD PTR[((-64))+rsi]
- adcx r8,QWORD PTR[rdi]
- adcx r9,QWORD PTR[8+rdi]
- adc r10,QWORD PTR[16+rdi]
- adc r11,QWORD PTR[24+rdi]
- adc r12,QWORD PTR[32+rdi]
- adc r13,QWORD PTR[40+rdi]
- adc r14,QWORD PTR[48+rdi]
- adc r15,QWORD PTR[56+rdi]
- lea rdi,QWORD PTR[64+rdi]
-DB 067h
- sbb rax,rax
- xor ebx,ebx
- mov QWORD PTR[((16+8))+rsp],rax
- jmp $L$sqrx8x_loop
-
-ALIGN 32
-$L$sqrx8x_break::
- xor rbp,rbp
- sub rbx,QWORD PTR[((16+8))+rsp]
- adcx r8,rbp
- mov rcx,QWORD PTR[((24+8))+rsp]
- adcx r9,rbp
- mov rdx,QWORD PTR[rsi]
- adc r10,0
- mov QWORD PTR[rdi],r8
- adc r11,0
- adc r12,0
- adc r13,0
- adc r14,0
- adc r15,0
- cmp rdi,rcx
- je $L$sqrx8x_outer_loop
-
- mov QWORD PTR[8+rdi],r9
- mov r9,QWORD PTR[8+rcx]
- mov QWORD PTR[16+rdi],r10
- mov r10,QWORD PTR[16+rcx]
- mov QWORD PTR[24+rdi],r11
- mov r11,QWORD PTR[24+rcx]
- mov QWORD PTR[32+rdi],r12
- mov r12,QWORD PTR[32+rcx]
- mov QWORD PTR[40+rdi],r13
- mov r13,QWORD PTR[40+rcx]
- mov QWORD PTR[48+rdi],r14
- mov r14,QWORD PTR[48+rcx]
- mov QWORD PTR[56+rdi],r15
- mov r15,QWORD PTR[56+rcx]
- mov rdi,rcx
- jmp $L$sqrx8x_outer_loop
-
-ALIGN 32
-$L$sqrx8x_outer_break::
- mov QWORD PTR[72+rdi],r9
-DB 102,72,15,126,217
- mov QWORD PTR[80+rdi],r10
- mov QWORD PTR[88+rdi],r11
- mov QWORD PTR[96+rdi],r12
- mov QWORD PTR[104+rdi],r13
- mov QWORD PTR[112+rdi],r14
- lea rdi,QWORD PTR[((48+8))+rsp]
- mov rdx,QWORD PTR[rcx*1+rsi]
-
- mov r11,QWORD PTR[8+rdi]
- xor r10,r10
- mov r9,QWORD PTR[((0+8))+rsp]
- adox r11,r11
- mov r12,QWORD PTR[16+rdi]
- mov r13,QWORD PTR[24+rdi]
-
-
-ALIGN 32
-$L$sqrx4x_shift_n_add::
- mulx rbx,rax,rdx
- adox r12,r12
- adcx rax,r10
-DB 048h,08bh,094h,00eh,008h,000h,000h,000h
-DB 04ch,08bh,097h,020h,000h,000h,000h
- adox r13,r13
- adcx rbx,r11
- mov r11,QWORD PTR[40+rdi]
- mov QWORD PTR[rdi],rax
- mov QWORD PTR[8+rdi],rbx
-
- mulx rbx,rax,rdx
- adox r10,r10
- adcx rax,r12
- mov rdx,QWORD PTR[16+rcx*1+rsi]
- mov r12,QWORD PTR[48+rdi]
- adox r11,r11
- adcx rbx,r13
- mov r13,QWORD PTR[56+rdi]
- mov QWORD PTR[16+rdi],rax
- mov QWORD PTR[24+rdi],rbx
-
- mulx rbx,rax,rdx
- adox r12,r12
- adcx rax,r10
- mov rdx,QWORD PTR[24+rcx*1+rsi]
- lea rcx,QWORD PTR[32+rcx]
- mov r10,QWORD PTR[64+rdi]
- adox r13,r13
- adcx rbx,r11
- mov r11,QWORD PTR[72+rdi]
- mov QWORD PTR[32+rdi],rax
- mov QWORD PTR[40+rdi],rbx
-
- mulx rbx,rax,rdx
- adox r10,r10
- adcx rax,r12
- jrcxz $L$sqrx4x_shift_n_add_break
-DB 048h,08bh,094h,00eh,000h,000h,000h,000h
- adox r11,r11
- adcx rbx,r13
- mov r12,QWORD PTR[80+rdi]
- mov r13,QWORD PTR[88+rdi]
- mov QWORD PTR[48+rdi],rax
- mov QWORD PTR[56+rdi],rbx
- lea rdi,QWORD PTR[64+rdi]
- nop
- jmp $L$sqrx4x_shift_n_add
-
-ALIGN 32
-$L$sqrx4x_shift_n_add_break::
- adcx rbx,r13
- mov QWORD PTR[48+rdi],rax
- mov QWORD PTR[56+rdi],rbx
- lea rdi,QWORD PTR[64+rdi]
-DB 102,72,15,126,213
-__bn_sqrx8x_reduction::
- xor eax,eax
- mov rbx,QWORD PTR[((32+8))+rsp]
- mov rdx,QWORD PTR[((48+8))+rsp]
- lea rcx,QWORD PTR[((-64))+r9*1+rbp]
-
- mov QWORD PTR[((0+8))+rsp],rcx
- mov QWORD PTR[((8+8))+rsp],rdi
-
- lea rdi,QWORD PTR[((48+8))+rsp]
- jmp $L$sqrx8x_reduction_loop
-
-ALIGN 32
-$L$sqrx8x_reduction_loop::
- mov r9,QWORD PTR[8+rdi]
- mov r10,QWORD PTR[16+rdi]
- mov r11,QWORD PTR[24+rdi]
- mov r12,QWORD PTR[32+rdi]
- mov r8,rdx
- imul rdx,rbx
- mov r13,QWORD PTR[40+rdi]
- mov r14,QWORD PTR[48+rdi]
- mov r15,QWORD PTR[56+rdi]
- mov QWORD PTR[((24+8))+rsp],rax
-
- lea rdi,QWORD PTR[64+rdi]
- xor rsi,rsi
- mov rcx,-8
- jmp $L$sqrx8x_reduce
-
-ALIGN 32
-$L$sqrx8x_reduce::
- mov rbx,r8
- mulx r8,rax,QWORD PTR[rbp]
- adcx rax,rbx
- adox r8,r9
-
- mulx r9,rbx,QWORD PTR[8+rbp]
- adcx r8,rbx
- adox r9,r10
-
- mulx r10,rbx,QWORD PTR[16+rbp]
- adcx r9,rbx
- adox r10,r11
-
- mulx r11,rbx,QWORD PTR[24+rbp]
- adcx r10,rbx
- adox r11,r12
-
-DB 0c4h,062h,0e3h,0f6h,0a5h,020h,000h,000h,000h
- mov rax,rdx
- mov rdx,r8
- adcx r11,rbx
- adox r12,r13
-
- mulx rdx,rbx,QWORD PTR[((32+8))+rsp]
- mov rdx,rax
- mov QWORD PTR[((64+48+8))+rcx*8+rsp],rax
-
- mulx r13,rax,QWORD PTR[40+rbp]
- adcx r12,rax
- adox r13,r14
-
- mulx r14,rax,QWORD PTR[48+rbp]
- adcx r13,rax
- adox r14,r15
-
- mulx r15,rax,QWORD PTR[56+rbp]
- mov rdx,rbx
- adcx r14,rax
- adox r15,rsi
- adcx r15,rsi
-
-DB 067h,067h,067h
- inc rcx
- jnz $L$sqrx8x_reduce
-
- mov rax,rsi
- cmp rbp,QWORD PTR[((0+8))+rsp]
- jae $L$sqrx8x_no_tail
-
- mov rdx,QWORD PTR[((48+8))+rsp]
- add r8,QWORD PTR[rdi]
- lea rbp,QWORD PTR[64+rbp]
- mov rcx,-8
- adcx r9,QWORD PTR[8+rdi]
- adcx r10,QWORD PTR[16+rdi]
- adc r11,QWORD PTR[24+rdi]
- adc r12,QWORD PTR[32+rdi]
- adc r13,QWORD PTR[40+rdi]
- adc r14,QWORD PTR[48+rdi]
- adc r15,QWORD PTR[56+rdi]
- lea rdi,QWORD PTR[64+rdi]
- sbb rax,rax
-
- xor rsi,rsi
- mov QWORD PTR[((16+8))+rsp],rax
- jmp $L$sqrx8x_tail
-
-ALIGN 32
-$L$sqrx8x_tail::
- mov rbx,r8
- mulx r8,rax,QWORD PTR[rbp]
- adcx rbx,rax
- adox r8,r9
-
- mulx r9,rax,QWORD PTR[8+rbp]
- adcx r8,rax
- adox r9,r10
-
- mulx r10,rax,QWORD PTR[16+rbp]
- adcx r9,rax
- adox r10,r11
-
- mulx r11,rax,QWORD PTR[24+rbp]
- adcx r10,rax
- adox r11,r12
-
-DB 0c4h,062h,0fbh,0f6h,0a5h,020h,000h,000h,000h
- adcx r11,rax
- adox r12,r13
-
- mulx r13,rax,QWORD PTR[40+rbp]
- adcx r12,rax
- adox r13,r14
-
- mulx r14,rax,QWORD PTR[48+rbp]
- adcx r13,rax
- adox r14,r15
-
- mulx r15,rax,QWORD PTR[56+rbp]
- mov rdx,QWORD PTR[((72+48+8))+rcx*8+rsp]
- adcx r14,rax
- adox r15,rsi
- mov QWORD PTR[rcx*8+rdi],rbx
- mov rbx,r8
- adcx r15,rsi
-
- inc rcx
- jnz $L$sqrx8x_tail
-
- cmp rbp,QWORD PTR[((0+8))+rsp]
- jae $L$sqrx8x_tail_done
-
- sub rsi,QWORD PTR[((16+8))+rsp]
- mov rdx,QWORD PTR[((48+8))+rsp]
- lea rbp,QWORD PTR[64+rbp]
- adc r8,QWORD PTR[rdi]
- adc r9,QWORD PTR[8+rdi]
- adc r10,QWORD PTR[16+rdi]
- adc r11,QWORD PTR[24+rdi]
- adc r12,QWORD PTR[32+rdi]
- adc r13,QWORD PTR[40+rdi]
- adc r14,QWORD PTR[48+rdi]
- adc r15,QWORD PTR[56+rdi]
- lea rdi,QWORD PTR[64+rdi]
- sbb rax,rax
- sub rcx,8
-
- xor rsi,rsi
- mov QWORD PTR[((16+8))+rsp],rax
- jmp $L$sqrx8x_tail
-
-ALIGN 32
-$L$sqrx8x_tail_done::
- xor rax,rax
- add r8,QWORD PTR[((24+8))+rsp]
- adc r9,0
- adc r10,0
- adc r11,0
- adc r12,0
- adc r13,0
- adc r14,0
- adc r15,0
- adc rax,0
-
- sub rsi,QWORD PTR[((16+8))+rsp]
-$L$sqrx8x_no_tail::
- adc r8,QWORD PTR[rdi]
-DB 102,72,15,126,217
- adc r9,QWORD PTR[8+rdi]
- mov rsi,QWORD PTR[56+rbp]
-DB 102,72,15,126,213
- adc r10,QWORD PTR[16+rdi]
- adc r11,QWORD PTR[24+rdi]
- adc r12,QWORD PTR[32+rdi]
- adc r13,QWORD PTR[40+rdi]
- adc r14,QWORD PTR[48+rdi]
- adc r15,QWORD PTR[56+rdi]
- adc rax,0
-
- mov rbx,QWORD PTR[((32+8))+rsp]
- mov rdx,QWORD PTR[64+rcx*1+rdi]
-
- mov QWORD PTR[rdi],r8
- lea r8,QWORD PTR[64+rdi]
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
- mov QWORD PTR[32+rdi],r12
- mov QWORD PTR[40+rdi],r13
- mov QWORD PTR[48+rdi],r14
- mov QWORD PTR[56+rdi],r15
-
- lea rdi,QWORD PTR[64+rcx*1+rdi]
- cmp r8,QWORD PTR[((8+8))+rsp]
- jb $L$sqrx8x_reduction_loop
- DB 0F3h,0C3h ;repret
-
-bn_sqrx8x_internal ENDP
-ALIGN 32
-__bn_postx4x_internal::
-
- mov r12,QWORD PTR[rbp]
- mov r10,rcx
- mov r9,rcx
- neg rax
- sar rcx,3+2
-
-DB 102,72,15,126,202
-DB 102,72,15,126,206
- dec r12
- mov r13,QWORD PTR[8+rbp]
- xor r8,r8
- mov r14,QWORD PTR[16+rbp]
- mov r15,QWORD PTR[24+rbp]
- jmp $L$sqrx4x_sub_entry
-
-ALIGN 16
-$L$sqrx4x_sub::
- mov r12,QWORD PTR[rbp]
- mov r13,QWORD PTR[8+rbp]
- mov r14,QWORD PTR[16+rbp]
- mov r15,QWORD PTR[24+rbp]
-$L$sqrx4x_sub_entry::
- andn r12,r12,rax
- lea rbp,QWORD PTR[32+rbp]
- andn r13,r13,rax
- andn r14,r14,rax
- andn r15,r15,rax
-
- neg r8
- adc r12,QWORD PTR[rdi]
- adc r13,QWORD PTR[8+rdi]
- adc r14,QWORD PTR[16+rdi]
- adc r15,QWORD PTR[24+rdi]
- mov QWORD PTR[rdx],r12
- lea rdi,QWORD PTR[32+rdi]
- mov QWORD PTR[8+rdx],r13
- sbb r8,r8
- mov QWORD PTR[16+rdx],r14
- mov QWORD PTR[24+rdx],r15
- lea rdx,QWORD PTR[32+rdx]
-
- inc rcx
- jnz $L$sqrx4x_sub
-
- neg r9
-
- DB 0F3h,0C3h ;repret
-
-
-PUBLIC bn_get_bits5
-
-ALIGN 16
-bn_get_bits5 PROC PUBLIC
-
- lea r10,QWORD PTR[rcx]
- lea r11,QWORD PTR[1+rcx]
- mov ecx,edx
- shr edx,4
- and ecx,15
- lea eax,DWORD PTR[((-8))+rcx]
- cmp ecx,11
- cmova r10,r11
- cmova ecx,eax
- movzx eax,WORD PTR[rdx*2+r10]
- shr eax,cl
- and eax,31
- DB 0F3h,0C3h ;repret
-
-bn_get_bits5 ENDP
-
-PUBLIC bn_scatter5
-
-ALIGN 16
-bn_scatter5 PROC PUBLIC
-
- cmp edx,0
- jz $L$scatter_epilogue
- lea r8,QWORD PTR[r9*8+r8]
-$L$scatter::
- mov rax,QWORD PTR[rcx]
- lea rcx,QWORD PTR[8+rcx]
- mov QWORD PTR[r8],rax
- lea r8,QWORD PTR[256+r8]
- sub edx,1
- jnz $L$scatter
-$L$scatter_epilogue::
- DB 0F3h,0C3h ;repret
-
-bn_scatter5 ENDP
-
-PUBLIC bn_gather5
-
-ALIGN 32
-bn_gather5 PROC PUBLIC
-$L$SEH_begin_bn_gather5::
-
-
-DB 04ch,08dh,014h,024h
-DB 048h,081h,0ech,008h,001h,000h,000h
- lea rax,QWORD PTR[$L$inc]
- and rsp,-16
-
- movd xmm5,r9d
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa xmm1,XMMWORD PTR[16+rax]
- lea r11,QWORD PTR[128+r8]
- lea rax,QWORD PTR[128+rsp]
-
- pshufd xmm5,xmm5,0
- movdqa xmm4,xmm1
- movdqa xmm2,xmm1
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa xmm3,xmm4
-
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[(-128)+rax],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[(-112)+rax],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[(-96)+rax],xmm2
- movdqa xmm2,xmm4
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[(-80)+rax],xmm3
- movdqa xmm3,xmm4
-
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[(-64)+rax],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[(-48)+rax],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[(-32)+rax],xmm2
- movdqa xmm2,xmm4
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[(-16)+rax],xmm3
- movdqa xmm3,xmm4
-
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[rax],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[16+rax],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[32+rax],xmm2
- movdqa xmm2,xmm4
- paddd xmm1,xmm0
- pcmpeqd xmm0,xmm5
- movdqa XMMWORD PTR[48+rax],xmm3
- movdqa xmm3,xmm4
-
- paddd xmm2,xmm1
- pcmpeqd xmm1,xmm5
- movdqa XMMWORD PTR[64+rax],xmm0
- movdqa xmm0,xmm4
-
- paddd xmm3,xmm2
- pcmpeqd xmm2,xmm5
- movdqa XMMWORD PTR[80+rax],xmm1
- movdqa xmm1,xmm4
-
- paddd xmm0,xmm3
- pcmpeqd xmm3,xmm5
- movdqa XMMWORD PTR[96+rax],xmm2
- movdqa xmm2,xmm4
- movdqa XMMWORD PTR[112+rax],xmm3
- jmp $L$gather
-
-ALIGN 32
-$L$gather::
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- movdqa xmm0,XMMWORD PTR[((-128))+r11]
- movdqa xmm1,XMMWORD PTR[((-112))+r11]
- movdqa xmm2,XMMWORD PTR[((-96))+r11]
- pand xmm0,XMMWORD PTR[((-128))+rax]
- movdqa xmm3,XMMWORD PTR[((-80))+r11]
- pand xmm1,XMMWORD PTR[((-112))+rax]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[((-96))+rax]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[((-80))+rax]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[((-64))+r11]
- movdqa xmm1,XMMWORD PTR[((-48))+r11]
- movdqa xmm2,XMMWORD PTR[((-32))+r11]
- pand xmm0,XMMWORD PTR[((-64))+rax]
- movdqa xmm3,XMMWORD PTR[((-16))+r11]
- pand xmm1,XMMWORD PTR[((-48))+rax]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[((-32))+rax]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[((-16))+rax]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[r11]
- movdqa xmm1,XMMWORD PTR[16+r11]
- movdqa xmm2,XMMWORD PTR[32+r11]
- pand xmm0,XMMWORD PTR[rax]
- movdqa xmm3,XMMWORD PTR[48+r11]
- pand xmm1,XMMWORD PTR[16+rax]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[32+rax]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[48+rax]
- por xmm4,xmm2
- por xmm5,xmm3
- movdqa xmm0,XMMWORD PTR[64+r11]
- movdqa xmm1,XMMWORD PTR[80+r11]
- movdqa xmm2,XMMWORD PTR[96+r11]
- pand xmm0,XMMWORD PTR[64+rax]
- movdqa xmm3,XMMWORD PTR[112+r11]
- pand xmm1,XMMWORD PTR[80+rax]
- por xmm4,xmm0
- pand xmm2,XMMWORD PTR[96+rax]
- por xmm5,xmm1
- pand xmm3,XMMWORD PTR[112+rax]
- por xmm4,xmm2
- por xmm5,xmm3
- por xmm4,xmm5
- lea r11,QWORD PTR[256+r11]
- pshufd xmm0,xmm4,04eh
- por xmm0,xmm4
- movq QWORD PTR[rcx],xmm0
- lea rcx,QWORD PTR[8+rcx]
- sub edx,1
- jnz $L$gather
-
- lea rsp,QWORD PTR[r10]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_bn_gather5::
-
-bn_gather5 ENDP
-ALIGN 64
-$L$inc::
- DD 0,0,1,1
- DD 2,2,2,2
-DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
-DB 112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115
-DB 99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111
-DB 114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79
-DB 71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111
-DB 112,101,110,115,115,108,46,111,114,103,62,0
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-mul_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_pop_regs
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[8+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- lea r10,QWORD PTR[$L$mul_epilogue]
- cmp rbx,r10
- ja $L$body_40
-
- mov r10,QWORD PTR[192+r8]
- mov rax,QWORD PTR[8+r10*8+rax]
-
- jmp $L$common_pop_regs
-
-$L$body_40::
- mov rax,QWORD PTR[40+rax]
-$L$common_pop_regs::
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-mul_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_bn_mul_mont_gather5
- DD imagerel $L$SEH_end_bn_mul_mont_gather5
- DD imagerel $L$SEH_info_bn_mul_mont_gather5
-
- DD imagerel $L$SEH_begin_bn_mul4x_mont_gather5
- DD imagerel $L$SEH_end_bn_mul4x_mont_gather5
- DD imagerel $L$SEH_info_bn_mul4x_mont_gather5
-
- DD imagerel $L$SEH_begin_bn_power5
- DD imagerel $L$SEH_end_bn_power5
- DD imagerel $L$SEH_info_bn_power5
-
- DD imagerel $L$SEH_begin_bn_from_mont8x
- DD imagerel $L$SEH_end_bn_from_mont8x
- DD imagerel $L$SEH_info_bn_from_mont8x
- DD imagerel $L$SEH_begin_bn_mulx4x_mont_gather5
- DD imagerel $L$SEH_end_bn_mulx4x_mont_gather5
- DD imagerel $L$SEH_info_bn_mulx4x_mont_gather5
-
- DD imagerel $L$SEH_begin_bn_powerx5
- DD imagerel $L$SEH_end_bn_powerx5
- DD imagerel $L$SEH_info_bn_powerx5
- DD imagerel $L$SEH_begin_bn_gather5
- DD imagerel $L$SEH_end_bn_gather5
- DD imagerel $L$SEH_info_bn_gather5
-
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_bn_mul_mont_gather5::
-DB 9,0,0,0
- DD imagerel mul_handler
- DD imagerel $L$mul_body,imagerel $L$mul_body,imagerel $L$mul_epilogue
-ALIGN 8
-$L$SEH_info_bn_mul4x_mont_gather5::
-DB 9,0,0,0
- DD imagerel mul_handler
- DD imagerel $L$mul4x_prologue,imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue
-ALIGN 8
-$L$SEH_info_bn_power5::
-DB 9,0,0,0
- DD imagerel mul_handler
- DD imagerel $L$power5_prologue,imagerel $L$power5_body,imagerel $L$power5_epilogue
-ALIGN 8
-$L$SEH_info_bn_from_mont8x::
-DB 9,0,0,0
- DD imagerel mul_handler
- DD imagerel $L$from_prologue,imagerel $L$from_body,imagerel $L$from_epilogue
-ALIGN 8
-$L$SEH_info_bn_mulx4x_mont_gather5::
-DB 9,0,0,0
- DD imagerel mul_handler
- DD imagerel $L$mulx4x_prologue,imagerel $L$mulx4x_body,imagerel $L$mulx4x_epilogue
-ALIGN 8
-$L$SEH_info_bn_powerx5::
-DB 9,0,0,0
- DD imagerel mul_handler
- DD imagerel $L$powerx5_prologue,imagerel $L$powerx5_body,imagerel $L$powerx5_epilogue
-ALIGN 8
-$L$SEH_info_bn_gather5::
-DB 001h,00bh,003h,00ah
-DB 00bh,001h,021h,000h
-DB 004h,0a3h,000h,000h
-ALIGN 8
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC bn_mul_mont_gather5
+
+ALIGN 64
+bn_mul_mont_gather5 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_bn_mul_mont_gather5::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov r9d,r9d
+ mov rax,rsp
+
+ test r9d,7
+ jnz $L$mul_enter
+ mov r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ jmp $L$mul4x_enter
+
+ALIGN 16
+$L$mul_enter::
+ movd xmm5,DWORD PTR[56+rsp]
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ neg r9
+ mov r11,rsp
+ lea r10,QWORD PTR[((-280))+r9*8+rsp]
+ neg r9
+ and r10,-1024
+
+
+
+
+
+
+
+
+
+ sub r11,r10
+ and r11,-4096
+ lea rsp,QWORD PTR[r11*1+r10]
+ mov r11,QWORD PTR[rsp]
+ cmp rsp,r10
+ ja $L$mul_page_walk
+ jmp $L$mul_page_walk_done
+
+$L$mul_page_walk::
+ lea rsp,QWORD PTR[((-4096))+rsp]
+ mov r11,QWORD PTR[rsp]
+ cmp rsp,r10
+ ja $L$mul_page_walk
+$L$mul_page_walk_done::
+
+ lea r10,QWORD PTR[$L$inc]
+ mov QWORD PTR[8+r9*8+rsp],rax
+
+$L$mul_body::
+
+ lea r12,QWORD PTR[128+rdx]
+ movdqa xmm0,XMMWORD PTR[r10]
+ movdqa xmm1,XMMWORD PTR[16+r10]
+ lea r10,QWORD PTR[((24-112))+r9*8+rsp]
+ and r10,-16
+
+ pshufd xmm5,xmm5,0
+ movdqa xmm4,xmm1
+ movdqa xmm2,xmm1
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+DB 067h
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[112+r10],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[128+r10],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[144+r10],xmm2
+ movdqa xmm2,xmm4
+
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[160+r10],xmm3
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[176+r10],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[192+r10],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[208+r10],xmm2
+ movdqa xmm2,xmm4
+
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[224+r10],xmm3
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[240+r10],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[256+r10],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[272+r10],xmm2
+ movdqa xmm2,xmm4
+
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[288+r10],xmm3
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[304+r10],xmm0
+
+ paddd xmm3,xmm2
+DB 067h
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[320+r10],xmm1
+
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[336+r10],xmm2
+ pand xmm0,XMMWORD PTR[64+r12]
+
+ pand xmm1,XMMWORD PTR[80+r12]
+ pand xmm2,XMMWORD PTR[96+r12]
+ movdqa XMMWORD PTR[352+r10],xmm3
+ pand xmm3,XMMWORD PTR[112+r12]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ movdqa xmm4,XMMWORD PTR[((-128))+r12]
+ movdqa xmm5,XMMWORD PTR[((-112))+r12]
+ movdqa xmm2,XMMWORD PTR[((-96))+r12]
+ pand xmm4,XMMWORD PTR[112+r10]
+ movdqa xmm3,XMMWORD PTR[((-80))+r12]
+ pand xmm5,XMMWORD PTR[128+r10]
+ por xmm0,xmm4
+ pand xmm2,XMMWORD PTR[144+r10]
+ por xmm1,xmm5
+ pand xmm3,XMMWORD PTR[160+r10]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ movdqa xmm4,XMMWORD PTR[((-64))+r12]
+ movdqa xmm5,XMMWORD PTR[((-48))+r12]
+ movdqa xmm2,XMMWORD PTR[((-32))+r12]
+ pand xmm4,XMMWORD PTR[176+r10]
+ movdqa xmm3,XMMWORD PTR[((-16))+r12]
+ pand xmm5,XMMWORD PTR[192+r10]
+ por xmm0,xmm4
+ pand xmm2,XMMWORD PTR[208+r10]
+ por xmm1,xmm5
+ pand xmm3,XMMWORD PTR[224+r10]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ movdqa xmm4,XMMWORD PTR[r12]
+ movdqa xmm5,XMMWORD PTR[16+r12]
+ movdqa xmm2,XMMWORD PTR[32+r12]
+ pand xmm4,XMMWORD PTR[240+r10]
+ movdqa xmm3,XMMWORD PTR[48+r12]
+ pand xmm5,XMMWORD PTR[256+r10]
+ por xmm0,xmm4
+ pand xmm2,XMMWORD PTR[272+r10]
+ por xmm1,xmm5
+ pand xmm3,XMMWORD PTR[288+r10]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ por xmm0,xmm1
+ pshufd xmm1,xmm0,04eh
+ por xmm0,xmm1
+ lea r12,QWORD PTR[256+r12]
+DB 102,72,15,126,195
+
+ mov r8,QWORD PTR[r8]
+ mov rax,QWORD PTR[rsi]
+
+ xor r14,r14
+ xor r15,r15
+
+ mov rbp,r8
+ mul rbx
+ mov r10,rax
+ mov rax,QWORD PTR[rcx]
+
+ imul rbp,r10
+ mov r11,rdx
+
+ mul rbp
+ add r10,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rdx,0
+ mov r13,rdx
+
+ lea r15,QWORD PTR[1+r15]
+ jmp $L$1st_enter
+
+ALIGN 16
+$L$1st::
+ add r13,rax
+ mov rax,QWORD PTR[r15*8+rsi]
+ adc rdx,0
+ add r13,r11
+ mov r11,r10
+ adc rdx,0
+ mov QWORD PTR[((-16))+r15*8+rsp],r13
+ mov r13,rdx
+
+$L$1st_enter::
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[r15*8+rcx]
+ adc rdx,0
+ lea r15,QWORD PTR[1+r15]
+ mov r10,rdx
+
+ mul rbp
+ cmp r15,r9
+ jne $L$1st
+
+
+ add r13,rax
+ adc rdx,0
+ add r13,r11
+ adc rdx,0
+ mov QWORD PTR[((-16))+r9*8+rsp],r13
+ mov r13,rdx
+ mov r11,r10
+
+ xor rdx,rdx
+ add r13,r11
+ adc rdx,0
+ mov QWORD PTR[((-8))+r9*8+rsp],r13
+ mov QWORD PTR[r9*8+rsp],rdx
+
+ lea r14,QWORD PTR[1+r14]
+ jmp $L$outer
+ALIGN 16
+$L$outer::
+ lea rdx,QWORD PTR[((24+128))+r9*8+rsp]
+ and rdx,-16
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ movdqa xmm0,XMMWORD PTR[((-128))+r12]
+ movdqa xmm1,XMMWORD PTR[((-112))+r12]
+ movdqa xmm2,XMMWORD PTR[((-96))+r12]
+ movdqa xmm3,XMMWORD PTR[((-80))+r12]
+ pand xmm0,XMMWORD PTR[((-128))+rdx]
+ pand xmm1,XMMWORD PTR[((-112))+rdx]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[((-96))+rdx]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[((-80))+rdx]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[((-64))+r12]
+ movdqa xmm1,XMMWORD PTR[((-48))+r12]
+ movdqa xmm2,XMMWORD PTR[((-32))+r12]
+ movdqa xmm3,XMMWORD PTR[((-16))+r12]
+ pand xmm0,XMMWORD PTR[((-64))+rdx]
+ pand xmm1,XMMWORD PTR[((-48))+rdx]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[((-32))+rdx]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[((-16))+rdx]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[r12]
+ movdqa xmm1,XMMWORD PTR[16+r12]
+ movdqa xmm2,XMMWORD PTR[32+r12]
+ movdqa xmm3,XMMWORD PTR[48+r12]
+ pand xmm0,XMMWORD PTR[rdx]
+ pand xmm1,XMMWORD PTR[16+rdx]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[32+rdx]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[48+rdx]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[64+r12]
+ movdqa xmm1,XMMWORD PTR[80+r12]
+ movdqa xmm2,XMMWORD PTR[96+r12]
+ movdqa xmm3,XMMWORD PTR[112+r12]
+ pand xmm0,XMMWORD PTR[64+rdx]
+ pand xmm1,XMMWORD PTR[80+rdx]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[96+rdx]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[112+rdx]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ por xmm4,xmm5
+ pshufd xmm0,xmm4,04eh
+ por xmm0,xmm4
+ lea r12,QWORD PTR[256+r12]
+
+ mov rax,QWORD PTR[rsi]
+DB 102,72,15,126,195
+
+ xor r15,r15
+ mov rbp,r8
+ mov r10,QWORD PTR[rsp]
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[rcx]
+ adc rdx,0
+
+ imul rbp,r10
+ mov r11,rdx
+
+ mul rbp
+ add r10,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rdx,0
+ mov r10,QWORD PTR[8+rsp]
+ mov r13,rdx
+
+ lea r15,QWORD PTR[1+r15]
+ jmp $L$inner_enter
+
+ALIGN 16
+$L$inner::
+ add r13,rax
+ mov rax,QWORD PTR[r15*8+rsi]
+ adc rdx,0
+ add r13,r10
+ mov r10,QWORD PTR[r15*8+rsp]
+ adc rdx,0
+ mov QWORD PTR[((-16))+r15*8+rsp],r13
+ mov r13,rdx
+
+$L$inner_enter::
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[r15*8+rcx]
+ adc rdx,0
+ add r10,r11
+ mov r11,rdx
+ adc r11,0
+ lea r15,QWORD PTR[1+r15]
+
+ mul rbp
+ cmp r15,r9
+ jne $L$inner
+
+ add r13,rax
+ adc rdx,0
+ add r13,r10
+ mov r10,QWORD PTR[r9*8+rsp]
+ adc rdx,0
+ mov QWORD PTR[((-16))+r9*8+rsp],r13
+ mov r13,rdx
+
+ xor rdx,rdx
+ add r13,r11
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-8))+r9*8+rsp],r13
+ mov QWORD PTR[r9*8+rsp],rdx
+
+ lea r14,QWORD PTR[1+r14]
+ cmp r14,r9
+ jb $L$outer
+
+ xor r14,r14
+ mov rax,QWORD PTR[rsp]
+ lea rsi,QWORD PTR[rsp]
+ mov r15,r9
+ jmp $L$sub
+ALIGN 16
+$L$sub:: sbb rax,QWORD PTR[r14*8+rcx]
+ mov QWORD PTR[r14*8+rdi],rax
+ mov rax,QWORD PTR[8+r14*8+rsi]
+ lea r14,QWORD PTR[1+r14]
+ dec r15
+ jnz $L$sub
+
+ sbb rax,0
+ mov rbx,-1
+ xor rbx,rax
+ xor r14,r14
+ mov r15,r9
+
+$L$copy::
+ mov rcx,QWORD PTR[r14*8+rdi]
+ mov rdx,QWORD PTR[r14*8+rsp]
+ and rcx,rbx
+ and rdx,rax
+ mov QWORD PTR[r14*8+rsp],r14
+ or rdx,rcx
+ mov QWORD PTR[r14*8+rdi],rdx
+ lea r14,QWORD PTR[1+r14]
+ sub r15,1
+ jnz $L$copy
+
+ mov rsi,QWORD PTR[8+r9*8+rsp]
+
+ mov rax,1
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$mul_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_bn_mul_mont_gather5::
+bn_mul_mont_gather5 ENDP
+
+ALIGN 32
+bn_mul4x_mont_gather5 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_bn_mul4x_mont_gather5::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+DB 067h
+ mov rax,rsp
+
+$L$mul4x_enter::
+ and r11d,080108h
+ cmp r11d,080108h
+ je $L$mulx4x_enter
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$mul4x_prologue::
+
+DB 067h
+ shl r9d,3
+ lea r10,QWORD PTR[r9*2+r9]
+ neg r9
+
+
+
+
+
+
+
+
+
+
+ lea r11,QWORD PTR[((-320))+r9*2+rsp]
+ mov rbp,rsp
+ sub r11,rdi
+ and r11,4095
+ cmp r10,r11
+ jb $L$mul4xsp_alt
+ sub rbp,r11
+ lea rbp,QWORD PTR[((-320))+r9*2+rbp]
+ jmp $L$mul4xsp_done
+
+ALIGN 32
+$L$mul4xsp_alt::
+ lea r10,QWORD PTR[((4096-320))+r9*2]
+ lea rbp,QWORD PTR[((-320))+r9*2+rbp]
+ sub r11,r10
+ mov r10,0
+ cmovc r11,r10
+ sub rbp,r11
+$L$mul4xsp_done::
+ and rbp,-64
+ mov r11,rsp
+ sub r11,rbp
+ and r11,-4096
+ lea rsp,QWORD PTR[rbp*1+r11]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$mul4x_page_walk
+ jmp $L$mul4x_page_walk_done
+
+$L$mul4x_page_walk::
+ lea rsp,QWORD PTR[((-4096))+rsp]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$mul4x_page_walk
+$L$mul4x_page_walk_done::
+
+ neg r9
+
+ mov QWORD PTR[40+rsp],rax
+
+$L$mul4x_body::
+
+ call mul4x_internal
+
+ mov rsi,QWORD PTR[40+rsp]
+
+ mov rax,1
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$mul4x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_bn_mul4x_mont_gather5::
+bn_mul4x_mont_gather5 ENDP
+
+
+ALIGN 32
+mul4x_internal PROC PRIVATE
+
+ shl r9,5
+ movd xmm5,DWORD PTR[56+rax]
+ lea rax,QWORD PTR[$L$inc]
+ lea r13,QWORD PTR[128+r9*1+rdx]
+ shr r9,5
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa xmm1,XMMWORD PTR[16+rax]
+ lea r10,QWORD PTR[((88-112))+r9*1+rsp]
+ lea r12,QWORD PTR[128+rdx]
+
+ pshufd xmm5,xmm5,0
+ movdqa xmm4,xmm1
+DB 067h,067h
+ movdqa xmm2,xmm1
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+DB 067h
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[112+r10],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[128+r10],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[144+r10],xmm2
+ movdqa xmm2,xmm4
+
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[160+r10],xmm3
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[176+r10],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[192+r10],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[208+r10],xmm2
+ movdqa xmm2,xmm4
+
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[224+r10],xmm3
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[240+r10],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[256+r10],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[272+r10],xmm2
+ movdqa xmm2,xmm4
+
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[288+r10],xmm3
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[304+r10],xmm0
+
+ paddd xmm3,xmm2
+DB 067h
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[320+r10],xmm1
+
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[336+r10],xmm2
+ pand xmm0,XMMWORD PTR[64+r12]
+
+ pand xmm1,XMMWORD PTR[80+r12]
+ pand xmm2,XMMWORD PTR[96+r12]
+ movdqa XMMWORD PTR[352+r10],xmm3
+ pand xmm3,XMMWORD PTR[112+r12]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ movdqa xmm4,XMMWORD PTR[((-128))+r12]
+ movdqa xmm5,XMMWORD PTR[((-112))+r12]
+ movdqa xmm2,XMMWORD PTR[((-96))+r12]
+ pand xmm4,XMMWORD PTR[112+r10]
+ movdqa xmm3,XMMWORD PTR[((-80))+r12]
+ pand xmm5,XMMWORD PTR[128+r10]
+ por xmm0,xmm4
+ pand xmm2,XMMWORD PTR[144+r10]
+ por xmm1,xmm5
+ pand xmm3,XMMWORD PTR[160+r10]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ movdqa xmm4,XMMWORD PTR[((-64))+r12]
+ movdqa xmm5,XMMWORD PTR[((-48))+r12]
+ movdqa xmm2,XMMWORD PTR[((-32))+r12]
+ pand xmm4,XMMWORD PTR[176+r10]
+ movdqa xmm3,XMMWORD PTR[((-16))+r12]
+ pand xmm5,XMMWORD PTR[192+r10]
+ por xmm0,xmm4
+ pand xmm2,XMMWORD PTR[208+r10]
+ por xmm1,xmm5
+ pand xmm3,XMMWORD PTR[224+r10]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ movdqa xmm4,XMMWORD PTR[r12]
+ movdqa xmm5,XMMWORD PTR[16+r12]
+ movdqa xmm2,XMMWORD PTR[32+r12]
+ pand xmm4,XMMWORD PTR[240+r10]
+ movdqa xmm3,XMMWORD PTR[48+r12]
+ pand xmm5,XMMWORD PTR[256+r10]
+ por xmm0,xmm4
+ pand xmm2,XMMWORD PTR[272+r10]
+ por xmm1,xmm5
+ pand xmm3,XMMWORD PTR[288+r10]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ por xmm0,xmm1
+ pshufd xmm1,xmm0,04eh
+ por xmm0,xmm1
+ lea r12,QWORD PTR[256+r12]
+DB 102,72,15,126,195
+
+ mov QWORD PTR[((16+8))+rsp],r13
+ mov QWORD PTR[((56+8))+rsp],rdi
+
+ mov r8,QWORD PTR[r8]
+ mov rax,QWORD PTR[rsi]
+ lea rsi,QWORD PTR[r9*1+rsi]
+ neg r9
+
+ mov rbp,r8
+ mul rbx
+ mov r10,rax
+ mov rax,QWORD PTR[rcx]
+
+ imul rbp,r10
+ lea r14,QWORD PTR[((64+8))+rsp]
+ mov r11,rdx
+
+ mul rbp
+ add r10,rax
+ mov rax,QWORD PTR[8+r9*1+rsi]
+ adc rdx,0
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[8+rcx]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[16+r9*1+rsi]
+ adc rdx,0
+ add rdi,r11
+ lea r15,QWORD PTR[32+r9]
+ lea rcx,QWORD PTR[32+rcx]
+ adc rdx,0
+ mov QWORD PTR[r14],rdi
+ mov r13,rdx
+ jmp $L$1st4x
+
+ALIGN 32
+$L$1st4x::
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[((-16))+rcx]
+ lea r14,QWORD PTR[32+r14]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[((-8))+r15*1+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-24))+r14],r13
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[((-8))+rcx]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[r15*1+rsi]
+ adc rdx,0
+ add rdi,r11
+ adc rdx,0
+ mov QWORD PTR[((-16))+r14],rdi
+ mov r13,rdx
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[rcx]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[8+r15*1+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-8))+r14],r13
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[8+rcx]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[16+r15*1+rsi]
+ adc rdx,0
+ add rdi,r11
+ lea rcx,QWORD PTR[32+rcx]
+ adc rdx,0
+ mov QWORD PTR[r14],rdi
+ mov r13,rdx
+
+ add r15,32
+ jnz $L$1st4x
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[((-16))+rcx]
+ lea r14,QWORD PTR[32+r14]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[((-8))+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-24))+r14],r13
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[((-8))+rcx]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[r9*1+rsi]
+ adc rdx,0
+ add rdi,r11
+ adc rdx,0
+ mov QWORD PTR[((-16))+r14],rdi
+ mov r13,rdx
+
+ lea rcx,QWORD PTR[r9*1+rcx]
+
+ xor rdi,rdi
+ add r13,r10
+ adc rdi,0
+ mov QWORD PTR[((-8))+r14],r13
+
+ jmp $L$outer4x
+
+ALIGN 32
+$L$outer4x::
+ lea rdx,QWORD PTR[((16+128))+r14]
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ movdqa xmm0,XMMWORD PTR[((-128))+r12]
+ movdqa xmm1,XMMWORD PTR[((-112))+r12]
+ movdqa xmm2,XMMWORD PTR[((-96))+r12]
+ movdqa xmm3,XMMWORD PTR[((-80))+r12]
+ pand xmm0,XMMWORD PTR[((-128))+rdx]
+ pand xmm1,XMMWORD PTR[((-112))+rdx]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[((-96))+rdx]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[((-80))+rdx]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[((-64))+r12]
+ movdqa xmm1,XMMWORD PTR[((-48))+r12]
+ movdqa xmm2,XMMWORD PTR[((-32))+r12]
+ movdqa xmm3,XMMWORD PTR[((-16))+r12]
+ pand xmm0,XMMWORD PTR[((-64))+rdx]
+ pand xmm1,XMMWORD PTR[((-48))+rdx]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[((-32))+rdx]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[((-16))+rdx]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[r12]
+ movdqa xmm1,XMMWORD PTR[16+r12]
+ movdqa xmm2,XMMWORD PTR[32+r12]
+ movdqa xmm3,XMMWORD PTR[48+r12]
+ pand xmm0,XMMWORD PTR[rdx]
+ pand xmm1,XMMWORD PTR[16+rdx]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[32+rdx]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[48+rdx]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[64+r12]
+ movdqa xmm1,XMMWORD PTR[80+r12]
+ movdqa xmm2,XMMWORD PTR[96+r12]
+ movdqa xmm3,XMMWORD PTR[112+r12]
+ pand xmm0,XMMWORD PTR[64+rdx]
+ pand xmm1,XMMWORD PTR[80+rdx]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[96+rdx]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[112+rdx]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ por xmm4,xmm5
+ pshufd xmm0,xmm4,04eh
+ por xmm0,xmm4
+ lea r12,QWORD PTR[256+r12]
+DB 102,72,15,126,195
+
+ mov r10,QWORD PTR[r9*1+r14]
+ mov rbp,r8
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[rcx]
+ adc rdx,0
+
+ imul rbp,r10
+ mov r11,rdx
+ mov QWORD PTR[r14],rdi
+
+ lea r14,QWORD PTR[r9*1+r14]
+
+ mul rbp
+ add r10,rax
+ mov rax,QWORD PTR[8+r9*1+rsi]
+ adc rdx,0
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[8+rcx]
+ adc rdx,0
+ add r11,QWORD PTR[8+r14]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[16+r9*1+rsi]
+ adc rdx,0
+ add rdi,r11
+ lea r15,QWORD PTR[32+r9]
+ lea rcx,QWORD PTR[32+rcx]
+ adc rdx,0
+ mov r13,rdx
+ jmp $L$inner4x
+
+ALIGN 32
+$L$inner4x::
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[((-16))+rcx]
+ adc rdx,0
+ add r10,QWORD PTR[16+r14]
+ lea r14,QWORD PTR[32+r14]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[((-8))+r15*1+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-32))+r14],rdi
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[((-8))+rcx]
+ adc rdx,0
+ add r11,QWORD PTR[((-8))+r14]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[r15*1+rsi]
+ adc rdx,0
+ add rdi,r11
+ adc rdx,0
+ mov QWORD PTR[((-24))+r14],r13
+ mov r13,rdx
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[rcx]
+ adc rdx,0
+ add r10,QWORD PTR[r14]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[8+r15*1+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-16))+r14],rdi
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[8+rcx]
+ adc rdx,0
+ add r11,QWORD PTR[8+r14]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[16+r15*1+rsi]
+ adc rdx,0
+ add rdi,r11
+ lea rcx,QWORD PTR[32+rcx]
+ adc rdx,0
+ mov QWORD PTR[((-8))+r14],r13
+ mov r13,rdx
+
+ add r15,32
+ jnz $L$inner4x
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[((-16))+rcx]
+ adc rdx,0
+ add r10,QWORD PTR[16+r14]
+ lea r14,QWORD PTR[32+r14]
+ adc rdx,0
+ mov r11,rdx
+
+ mul rbp
+ add r13,rax
+ mov rax,QWORD PTR[((-8))+rsi]
+ adc rdx,0
+ add r13,r10
+ adc rdx,0
+ mov QWORD PTR[((-32))+r14],rdi
+ mov rdi,rdx
+
+ mul rbx
+ add r11,rax
+ mov rax,rbp
+ mov rbp,QWORD PTR[((-8))+rcx]
+ adc rdx,0
+ add r11,QWORD PTR[((-8))+r14]
+ adc rdx,0
+ mov r10,rdx
+
+ mul rbp
+ add rdi,rax
+ mov rax,QWORD PTR[r9*1+rsi]
+ adc rdx,0
+ add rdi,r11
+ adc rdx,0
+ mov QWORD PTR[((-24))+r14],r13
+ mov r13,rdx
+
+ mov QWORD PTR[((-16))+r14],rdi
+ lea rcx,QWORD PTR[r9*1+rcx]
+
+ xor rdi,rdi
+ add r13,r10
+ adc rdi,0
+ add r13,QWORD PTR[r14]
+ adc rdi,0
+ mov QWORD PTR[((-8))+r14],r13
+
+ cmp r12,QWORD PTR[((16+8))+rsp]
+ jb $L$outer4x
+ xor rax,rax
+ sub rbp,r13
+ adc r15,r15
+ or rdi,r15
+ sub rax,rdi
+ lea rbx,QWORD PTR[r9*1+r14]
+ mov r12,QWORD PTR[rcx]
+ lea rbp,QWORD PTR[rcx]
+ mov rcx,r9
+ sar rcx,3+2
+ mov rdi,QWORD PTR[((56+8))+rsp]
+ dec r12
+ xor r10,r10
+ mov r13,QWORD PTR[8+rbp]
+ mov r14,QWORD PTR[16+rbp]
+ mov r15,QWORD PTR[24+rbp]
+ jmp $L$sqr4x_sub_entry
+
+mul4x_internal ENDP
+PUBLIC bn_power5
+
+ALIGN 32
+bn_power5 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_bn_power5::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov rax,rsp
+
+ mov r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ and r11d,080108h
+ cmp r11d,080108h
+ je $L$powerx5_enter
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$power5_prologue::
+
+ shl r9d,3
+ lea r10d,DWORD PTR[r9*2+r9]
+ neg r9
+ mov r8,QWORD PTR[r8]
+
+
+
+
+
+
+
+
+ lea r11,QWORD PTR[((-320))+r9*2+rsp]
+ mov rbp,rsp
+ sub r11,rdi
+ and r11,4095
+ cmp r10,r11
+ jb $L$pwr_sp_alt
+ sub rbp,r11
+ lea rbp,QWORD PTR[((-320))+r9*2+rbp]
+ jmp $L$pwr_sp_done
+
+ALIGN 32
+$L$pwr_sp_alt::
+ lea r10,QWORD PTR[((4096-320))+r9*2]
+ lea rbp,QWORD PTR[((-320))+r9*2+rbp]
+ sub r11,r10
+ mov r10,0
+ cmovc r11,r10
+ sub rbp,r11
+$L$pwr_sp_done::
+ and rbp,-64
+ mov r11,rsp
+ sub r11,rbp
+ and r11,-4096
+ lea rsp,QWORD PTR[rbp*1+r11]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$pwr_page_walk
+ jmp $L$pwr_page_walk_done
+
+$L$pwr_page_walk::
+ lea rsp,QWORD PTR[((-4096))+rsp]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$pwr_page_walk
+$L$pwr_page_walk_done::
+
+ mov r10,r9
+ neg r9
+
+
+
+
+
+
+
+
+
+
+ mov QWORD PTR[32+rsp],r8
+ mov QWORD PTR[40+rsp],rax
+
+$L$power5_body::
+DB 102,72,15,110,207
+DB 102,72,15,110,209
+DB 102,73,15,110,218
+DB 102,72,15,110,226
+
+ call __bn_sqr8x_internal
+ call __bn_post4x_internal
+ call __bn_sqr8x_internal
+ call __bn_post4x_internal
+ call __bn_sqr8x_internal
+ call __bn_post4x_internal
+ call __bn_sqr8x_internal
+ call __bn_post4x_internal
+ call __bn_sqr8x_internal
+ call __bn_post4x_internal
+
+DB 102,72,15,126,209
+DB 102,72,15,126,226
+ mov rdi,rsi
+ mov rax,QWORD PTR[40+rsp]
+ lea r8,QWORD PTR[32+rsp]
+
+ call mul4x_internal
+
+ mov rsi,QWORD PTR[40+rsp]
+
+ mov rax,1
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$power5_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_bn_power5::
+bn_power5 ENDP
+
+PUBLIC bn_sqr8x_internal
+
+
+ALIGN 32
+bn_sqr8x_internal PROC PUBLIC
+__bn_sqr8x_internal::
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ lea rbp,QWORD PTR[32+r10]
+ lea rsi,QWORD PTR[r9*1+rsi]
+
+ mov rcx,r9
+
+
+ mov r14,QWORD PTR[((-32))+rbp*1+rsi]
+ lea rdi,QWORD PTR[((48+8))+r9*2+rsp]
+ mov rax,QWORD PTR[((-24))+rbp*1+rsi]
+ lea rdi,QWORD PTR[((-32))+rbp*1+rdi]
+ mov rbx,QWORD PTR[((-16))+rbp*1+rsi]
+ mov r15,rax
+
+ mul r14
+ mov r10,rax
+ mov rax,rbx
+ mov r11,rdx
+ mov QWORD PTR[((-24))+rbp*1+rdi],r10
+
+ mul r14
+ add r11,rax
+ mov rax,rbx
+ adc rdx,0
+ mov QWORD PTR[((-16))+rbp*1+rdi],r11
+ mov r10,rdx
+
+
+ mov rbx,QWORD PTR[((-8))+rbp*1+rsi]
+ mul r15
+ mov r12,rax
+ mov rax,rbx
+ mov r13,rdx
+
+ lea rcx,QWORD PTR[rbp]
+ mul r14
+ add r10,rax
+ mov rax,rbx
+ mov r11,rdx
+ adc r11,0
+ add r10,r12
+ adc r11,0
+ mov QWORD PTR[((-8))+rcx*1+rdi],r10
+ jmp $L$sqr4x_1st
+
+ALIGN 32
+$L$sqr4x_1st::
+ mov rbx,QWORD PTR[rcx*1+rsi]
+ mul r15
+ add r13,rax
+ mov rax,rbx
+ mov r12,rdx
+ adc r12,0
+
+ mul r14
+ add r11,rax
+ mov rax,rbx
+ mov rbx,QWORD PTR[8+rcx*1+rsi]
+ mov r10,rdx
+ adc r10,0
+ add r11,r13
+ adc r10,0
+
+
+ mul r15
+ add r12,rax
+ mov rax,rbx
+ mov QWORD PTR[rcx*1+rdi],r11
+ mov r13,rdx
+ adc r13,0
+
+ mul r14
+ add r10,rax
+ mov rax,rbx
+ mov rbx,QWORD PTR[16+rcx*1+rsi]
+ mov r11,rdx
+ adc r11,0
+ add r10,r12
+ adc r11,0
+
+ mul r15
+ add r13,rax
+ mov rax,rbx
+ mov QWORD PTR[8+rcx*1+rdi],r10
+ mov r12,rdx
+ adc r12,0
+
+ mul r14
+ add r11,rax
+ mov rax,rbx
+ mov rbx,QWORD PTR[24+rcx*1+rsi]
+ mov r10,rdx
+ adc r10,0
+ add r11,r13
+ adc r10,0
+
+
+ mul r15
+ add r12,rax
+ mov rax,rbx
+ mov QWORD PTR[16+rcx*1+rdi],r11
+ mov r13,rdx
+ adc r13,0
+ lea rcx,QWORD PTR[32+rcx]
+
+ mul r14
+ add r10,rax
+ mov rax,rbx
+ mov r11,rdx
+ adc r11,0
+ add r10,r12
+ adc r11,0
+ mov QWORD PTR[((-8))+rcx*1+rdi],r10
+
+ cmp rcx,0
+ jne $L$sqr4x_1st
+
+ mul r15
+ add r13,rax
+ lea rbp,QWORD PTR[16+rbp]
+ adc rdx,0
+ add r13,r11
+ adc rdx,0
+
+ mov QWORD PTR[rdi],r13
+ mov r12,rdx
+ mov QWORD PTR[8+rdi],rdx
+ jmp $L$sqr4x_outer
+
+ALIGN 32
+$L$sqr4x_outer::
+ mov r14,QWORD PTR[((-32))+rbp*1+rsi]
+ lea rdi,QWORD PTR[((48+8))+r9*2+rsp]
+ mov rax,QWORD PTR[((-24))+rbp*1+rsi]
+ lea rdi,QWORD PTR[((-32))+rbp*1+rdi]
+ mov rbx,QWORD PTR[((-16))+rbp*1+rsi]
+ mov r15,rax
+
+ mul r14
+ mov r10,QWORD PTR[((-24))+rbp*1+rdi]
+ add r10,rax
+ mov rax,rbx
+ adc rdx,0
+ mov QWORD PTR[((-24))+rbp*1+rdi],r10
+ mov r11,rdx
+
+ mul r14
+ add r11,rax
+ mov rax,rbx
+ adc rdx,0
+ add r11,QWORD PTR[((-16))+rbp*1+rdi]
+ mov r10,rdx
+ adc r10,0
+ mov QWORD PTR[((-16))+rbp*1+rdi],r11
+
+ xor r12,r12
+
+ mov rbx,QWORD PTR[((-8))+rbp*1+rsi]
+ mul r15
+ add r12,rax
+ mov rax,rbx
+ adc rdx,0
+ add r12,QWORD PTR[((-8))+rbp*1+rdi]
+ mov r13,rdx
+ adc r13,0
+
+ mul r14
+ add r10,rax
+ mov rax,rbx
+ adc rdx,0
+ add r10,r12
+ mov r11,rdx
+ adc r11,0
+ mov QWORD PTR[((-8))+rbp*1+rdi],r10
+
+ lea rcx,QWORD PTR[rbp]
+ jmp $L$sqr4x_inner
+
+ALIGN 32
+$L$sqr4x_inner::
+ mov rbx,QWORD PTR[rcx*1+rsi]
+ mul r15
+ add r13,rax
+ mov rax,rbx
+ mov r12,rdx
+ adc r12,0
+ add r13,QWORD PTR[rcx*1+rdi]
+ adc r12,0
+
+DB 067h
+ mul r14
+ add r11,rax
+ mov rax,rbx
+ mov rbx,QWORD PTR[8+rcx*1+rsi]
+ mov r10,rdx
+ adc r10,0
+ add r11,r13
+ adc r10,0
+
+ mul r15
+ add r12,rax
+ mov QWORD PTR[rcx*1+rdi],r11
+ mov rax,rbx
+ mov r13,rdx
+ adc r13,0
+ add r12,QWORD PTR[8+rcx*1+rdi]
+ lea rcx,QWORD PTR[16+rcx]
+ adc r13,0
+
+ mul r14
+ add r10,rax
+ mov rax,rbx
+ adc rdx,0
+ add r10,r12
+ mov r11,rdx
+ adc r11,0
+ mov QWORD PTR[((-8))+rcx*1+rdi],r10
+
+ cmp rcx,0
+ jne $L$sqr4x_inner
+
+DB 067h
+ mul r15
+ add r13,rax
+ adc rdx,0
+ add r13,r11
+ adc rdx,0
+
+ mov QWORD PTR[rdi],r13
+ mov r12,rdx
+ mov QWORD PTR[8+rdi],rdx
+
+ add rbp,16
+ jnz $L$sqr4x_outer
+
+
+ mov r14,QWORD PTR[((-32))+rsi]
+ lea rdi,QWORD PTR[((48+8))+r9*2+rsp]
+ mov rax,QWORD PTR[((-24))+rsi]
+ lea rdi,QWORD PTR[((-32))+rbp*1+rdi]
+ mov rbx,QWORD PTR[((-16))+rsi]
+ mov r15,rax
+
+ mul r14
+ add r10,rax
+ mov rax,rbx
+ mov r11,rdx
+ adc r11,0
+
+ mul r14
+ add r11,rax
+ mov rax,rbx
+ mov QWORD PTR[((-24))+rdi],r10
+ mov r10,rdx
+ adc r10,0
+ add r11,r13
+ mov rbx,QWORD PTR[((-8))+rsi]
+ adc r10,0
+
+ mul r15
+ add r12,rax
+ mov rax,rbx
+ mov QWORD PTR[((-16))+rdi],r11
+ mov r13,rdx
+ adc r13,0
+
+ mul r14
+ add r10,rax
+ mov rax,rbx
+ mov r11,rdx
+ adc r11,0
+ add r10,r12
+ adc r11,0
+ mov QWORD PTR[((-8))+rdi],r10
+
+ mul r15
+ add r13,rax
+ mov rax,QWORD PTR[((-16))+rsi]
+ adc rdx,0
+ add r13,r11
+ adc rdx,0
+
+ mov QWORD PTR[rdi],r13
+ mov r12,rdx
+ mov QWORD PTR[8+rdi],rdx
+
+ mul rbx
+ add rbp,16
+ xor r14,r14
+ sub rbp,r9
+ xor r15,r15
+
+ add rax,r12
+ adc rdx,0
+ mov QWORD PTR[8+rdi],rax
+ mov QWORD PTR[16+rdi],rdx
+ mov QWORD PTR[24+rdi],r15
+
+ mov rax,QWORD PTR[((-16))+rbp*1+rsi]
+ lea rdi,QWORD PTR[((48+8))+rsp]
+ xor r10,r10
+ mov r11,QWORD PTR[8+rdi]
+
+ lea r12,QWORD PTR[r10*2+r14]
+ shr r10,63
+ lea r13,QWORD PTR[r11*2+rcx]
+ shr r11,63
+ or r13,r10
+ mov r10,QWORD PTR[16+rdi]
+ mov r14,r11
+ mul rax
+ neg r15
+ mov r11,QWORD PTR[24+rdi]
+ adc r12,rax
+ mov rax,QWORD PTR[((-8))+rbp*1+rsi]
+ mov QWORD PTR[rdi],r12
+ adc r13,rdx
+
+ lea rbx,QWORD PTR[r10*2+r14]
+ mov QWORD PTR[8+rdi],r13
+ sbb r15,r15
+ shr r10,63
+ lea r8,QWORD PTR[r11*2+rcx]
+ shr r11,63
+ or r8,r10
+ mov r10,QWORD PTR[32+rdi]
+ mov r14,r11
+ mul rax
+ neg r15
+ mov r11,QWORD PTR[40+rdi]
+ adc rbx,rax
+ mov rax,QWORD PTR[rbp*1+rsi]
+ mov QWORD PTR[16+rdi],rbx
+ adc r8,rdx
+ lea rbp,QWORD PTR[16+rbp]
+ mov QWORD PTR[24+rdi],r8
+ sbb r15,r15
+ lea rdi,QWORD PTR[64+rdi]
+ jmp $L$sqr4x_shift_n_add
+
+ALIGN 32
+$L$sqr4x_shift_n_add::
+ lea r12,QWORD PTR[r10*2+r14]
+ shr r10,63
+ lea r13,QWORD PTR[r11*2+rcx]
+ shr r11,63
+ or r13,r10
+ mov r10,QWORD PTR[((-16))+rdi]
+ mov r14,r11
+ mul rax
+ neg r15
+ mov r11,QWORD PTR[((-8))+rdi]
+ adc r12,rax
+ mov rax,QWORD PTR[((-8))+rbp*1+rsi]
+ mov QWORD PTR[((-32))+rdi],r12
+ adc r13,rdx
+
+ lea rbx,QWORD PTR[r10*2+r14]
+ mov QWORD PTR[((-24))+rdi],r13
+ sbb r15,r15
+ shr r10,63
+ lea r8,QWORD PTR[r11*2+rcx]
+ shr r11,63
+ or r8,r10
+ mov r10,QWORD PTR[rdi]
+ mov r14,r11
+ mul rax
+ neg r15
+ mov r11,QWORD PTR[8+rdi]
+ adc rbx,rax
+ mov rax,QWORD PTR[rbp*1+rsi]
+ mov QWORD PTR[((-16))+rdi],rbx
+ adc r8,rdx
+
+ lea r12,QWORD PTR[r10*2+r14]
+ mov QWORD PTR[((-8))+rdi],r8
+ sbb r15,r15
+ shr r10,63
+ lea r13,QWORD PTR[r11*2+rcx]
+ shr r11,63
+ or r13,r10
+ mov r10,QWORD PTR[16+rdi]
+ mov r14,r11
+ mul rax
+ neg r15
+ mov r11,QWORD PTR[24+rdi]
+ adc r12,rax
+ mov rax,QWORD PTR[8+rbp*1+rsi]
+ mov QWORD PTR[rdi],r12
+ adc r13,rdx
+
+ lea rbx,QWORD PTR[r10*2+r14]
+ mov QWORD PTR[8+rdi],r13
+ sbb r15,r15
+ shr r10,63
+ lea r8,QWORD PTR[r11*2+rcx]
+ shr r11,63
+ or r8,r10
+ mov r10,QWORD PTR[32+rdi]
+ mov r14,r11
+ mul rax
+ neg r15
+ mov r11,QWORD PTR[40+rdi]
+ adc rbx,rax
+ mov rax,QWORD PTR[16+rbp*1+rsi]
+ mov QWORD PTR[16+rdi],rbx
+ adc r8,rdx
+ mov QWORD PTR[24+rdi],r8
+ sbb r15,r15
+ lea rdi,QWORD PTR[64+rdi]
+ add rbp,32
+ jnz $L$sqr4x_shift_n_add
+
+ lea r12,QWORD PTR[r10*2+r14]
+DB 067h
+ shr r10,63
+ lea r13,QWORD PTR[r11*2+rcx]
+ shr r11,63
+ or r13,r10
+ mov r10,QWORD PTR[((-16))+rdi]
+ mov r14,r11
+ mul rax
+ neg r15
+ mov r11,QWORD PTR[((-8))+rdi]
+ adc r12,rax
+ mov rax,QWORD PTR[((-8))+rsi]
+ mov QWORD PTR[((-32))+rdi],r12
+ adc r13,rdx
+
+ lea rbx,QWORD PTR[r10*2+r14]
+ mov QWORD PTR[((-24))+rdi],r13
+ sbb r15,r15
+ shr r10,63
+ lea r8,QWORD PTR[r11*2+rcx]
+ shr r11,63
+ or r8,r10
+ mul rax
+ neg r15
+ adc rbx,rax
+ adc r8,rdx
+ mov QWORD PTR[((-16))+rdi],rbx
+ mov QWORD PTR[((-8))+rdi],r8
+DB 102,72,15,126,213
+__bn_sqr8x_reduction::
+ xor rax,rax
+ lea rcx,QWORD PTR[rbp*1+r9]
+ lea rdx,QWORD PTR[((48+8))+r9*2+rsp]
+ mov QWORD PTR[((0+8))+rsp],rcx
+ lea rdi,QWORD PTR[((48+8))+r9*1+rsp]
+ mov QWORD PTR[((8+8))+rsp],rdx
+ neg r9
+ jmp $L$8x_reduction_loop
+
+ALIGN 32
+$L$8x_reduction_loop::
+ lea rdi,QWORD PTR[r9*1+rdi]
+DB 066h
+ mov rbx,QWORD PTR[rdi]
+ mov r9,QWORD PTR[8+rdi]
+ mov r10,QWORD PTR[16+rdi]
+ mov r11,QWORD PTR[24+rdi]
+ mov r12,QWORD PTR[32+rdi]
+ mov r13,QWORD PTR[40+rdi]
+ mov r14,QWORD PTR[48+rdi]
+ mov r15,QWORD PTR[56+rdi]
+ mov QWORD PTR[rdx],rax
+ lea rdi,QWORD PTR[64+rdi]
+
+DB 067h
+ mov r8,rbx
+ imul rbx,QWORD PTR[((32+8))+rsp]
+ mov rax,QWORD PTR[rbp]
+ mov ecx,8
+ jmp $L$8x_reduce
+
+ALIGN 32
+$L$8x_reduce::
+ mul rbx
+ mov rax,QWORD PTR[8+rbp]
+ neg r8
+ mov r8,rdx
+ adc r8,0
+
+ mul rbx
+ add r9,rax
+ mov rax,QWORD PTR[16+rbp]
+ adc rdx,0
+ add r8,r9
+ mov QWORD PTR[((48-8+8))+rcx*8+rsp],rbx
+ mov r9,rdx
+ adc r9,0
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[24+rbp]
+ adc rdx,0
+ add r9,r10
+ mov rsi,QWORD PTR[((32+8))+rsp]
+ mov r10,rdx
+ adc r10,0
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[32+rbp]
+ adc rdx,0
+ imul rsi,r8
+ add r10,r11
+ mov r11,rdx
+ adc r11,0
+
+ mul rbx
+ add r12,rax
+ mov rax,QWORD PTR[40+rbp]
+ adc rdx,0
+ add r11,r12
+ mov r12,rdx
+ adc r12,0
+
+ mul rbx
+ add r13,rax
+ mov rax,QWORD PTR[48+rbp]
+ adc rdx,0
+ add r12,r13
+ mov r13,rdx
+ adc r13,0
+
+ mul rbx
+ add r14,rax
+ mov rax,QWORD PTR[56+rbp]
+ adc rdx,0
+ add r13,r14
+ mov r14,rdx
+ adc r14,0
+
+ mul rbx
+ mov rbx,rsi
+ add r15,rax
+ mov rax,QWORD PTR[rbp]
+ adc rdx,0
+ add r14,r15
+ mov r15,rdx
+ adc r15,0
+
+ dec ecx
+ jnz $L$8x_reduce
+
+ lea rbp,QWORD PTR[64+rbp]
+ xor rax,rax
+ mov rdx,QWORD PTR[((8+8))+rsp]
+ cmp rbp,QWORD PTR[((0+8))+rsp]
+ jae $L$8x_no_tail
+
+DB 066h
+ add r8,QWORD PTR[rdi]
+ adc r9,QWORD PTR[8+rdi]
+ adc r10,QWORD PTR[16+rdi]
+ adc r11,QWORD PTR[24+rdi]
+ adc r12,QWORD PTR[32+rdi]
+ adc r13,QWORD PTR[40+rdi]
+ adc r14,QWORD PTR[48+rdi]
+ adc r15,QWORD PTR[56+rdi]
+ sbb rsi,rsi
+
+ mov rbx,QWORD PTR[((48+56+8))+rsp]
+ mov ecx,8
+ mov rax,QWORD PTR[rbp]
+ jmp $L$8x_tail
+
+ALIGN 32
+$L$8x_tail::
+ mul rbx
+ add r8,rax
+ mov rax,QWORD PTR[8+rbp]
+ mov QWORD PTR[rdi],r8
+ mov r8,rdx
+ adc r8,0
+
+ mul rbx
+ add r9,rax
+ mov rax,QWORD PTR[16+rbp]
+ adc rdx,0
+ add r8,r9
+ lea rdi,QWORD PTR[8+rdi]
+ mov r9,rdx
+ adc r9,0
+
+ mul rbx
+ add r10,rax
+ mov rax,QWORD PTR[24+rbp]
+ adc rdx,0
+ add r9,r10
+ mov r10,rdx
+ adc r10,0
+
+ mul rbx
+ add r11,rax
+ mov rax,QWORD PTR[32+rbp]
+ adc rdx,0
+ add r10,r11
+ mov r11,rdx
+ adc r11,0
+
+ mul rbx
+ add r12,rax
+ mov rax,QWORD PTR[40+rbp]
+ adc rdx,0
+ add r11,r12
+ mov r12,rdx
+ adc r12,0
+
+ mul rbx
+ add r13,rax
+ mov rax,QWORD PTR[48+rbp]
+ adc rdx,0
+ add r12,r13
+ mov r13,rdx
+ adc r13,0
+
+ mul rbx
+ add r14,rax
+ mov rax,QWORD PTR[56+rbp]
+ adc rdx,0
+ add r13,r14
+ mov r14,rdx
+ adc r14,0
+
+ mul rbx
+ mov rbx,QWORD PTR[((48-16+8))+rcx*8+rsp]
+ add r15,rax
+ adc rdx,0
+ add r14,r15
+ mov rax,QWORD PTR[rbp]
+ mov r15,rdx
+ adc r15,0
+
+ dec ecx
+ jnz $L$8x_tail
+
+ lea rbp,QWORD PTR[64+rbp]
+ mov rdx,QWORD PTR[((8+8))+rsp]
+ cmp rbp,QWORD PTR[((0+8))+rsp]
+ jae $L$8x_tail_done
+
+ mov rbx,QWORD PTR[((48+56+8))+rsp]
+ neg rsi
+ mov rax,QWORD PTR[rbp]
+ adc r8,QWORD PTR[rdi]
+ adc r9,QWORD PTR[8+rdi]
+ adc r10,QWORD PTR[16+rdi]
+ adc r11,QWORD PTR[24+rdi]
+ adc r12,QWORD PTR[32+rdi]
+ adc r13,QWORD PTR[40+rdi]
+ adc r14,QWORD PTR[48+rdi]
+ adc r15,QWORD PTR[56+rdi]
+ sbb rsi,rsi
+
+ mov ecx,8
+ jmp $L$8x_tail
+
+ALIGN 32
+$L$8x_tail_done::
+ xor rax,rax
+ add r8,QWORD PTR[rdx]
+ adc r9,0
+ adc r10,0
+ adc r11,0
+ adc r12,0
+ adc r13,0
+ adc r14,0
+ adc r15,0
+ adc rax,0
+
+ neg rsi
+$L$8x_no_tail::
+ adc r8,QWORD PTR[rdi]
+ adc r9,QWORD PTR[8+rdi]
+ adc r10,QWORD PTR[16+rdi]
+ adc r11,QWORD PTR[24+rdi]
+ adc r12,QWORD PTR[32+rdi]
+ adc r13,QWORD PTR[40+rdi]
+ adc r14,QWORD PTR[48+rdi]
+ adc r15,QWORD PTR[56+rdi]
+ adc rax,0
+ mov rcx,QWORD PTR[((-8))+rbp]
+ xor rsi,rsi
+
+DB 102,72,15,126,213
+
+ mov QWORD PTR[rdi],r8
+ mov QWORD PTR[8+rdi],r9
+DB 102,73,15,126,217
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+ mov QWORD PTR[32+rdi],r12
+ mov QWORD PTR[40+rdi],r13
+ mov QWORD PTR[48+rdi],r14
+ mov QWORD PTR[56+rdi],r15
+ lea rdi,QWORD PTR[64+rdi]
+
+ cmp rdi,rdx
+ jb $L$8x_reduction_loop
+ DB 0F3h,0C3h ;repret
+
+bn_sqr8x_internal ENDP
+
+ALIGN 32
+__bn_post4x_internal PROC PRIVATE
+
+ mov r12,QWORD PTR[rbp]
+ lea rbx,QWORD PTR[r9*1+rdi]
+ mov rcx,r9
+DB 102,72,15,126,207
+ neg rax
+DB 102,72,15,126,206
+ sar rcx,3+2
+ dec r12
+ xor r10,r10
+ mov r13,QWORD PTR[8+rbp]
+ mov r14,QWORD PTR[16+rbp]
+ mov r15,QWORD PTR[24+rbp]
+ jmp $L$sqr4x_sub_entry
+
+ALIGN 16
+$L$sqr4x_sub::
+ mov r12,QWORD PTR[rbp]
+ mov r13,QWORD PTR[8+rbp]
+ mov r14,QWORD PTR[16+rbp]
+ mov r15,QWORD PTR[24+rbp]
+$L$sqr4x_sub_entry::
+ lea rbp,QWORD PTR[32+rbp]
+ not r12
+ not r13
+ not r14
+ not r15
+ and r12,rax
+ and r13,rax
+ and r14,rax
+ and r15,rax
+
+ neg r10
+ adc r12,QWORD PTR[rbx]
+ adc r13,QWORD PTR[8+rbx]
+ adc r14,QWORD PTR[16+rbx]
+ adc r15,QWORD PTR[24+rbx]
+ mov QWORD PTR[rdi],r12
+ lea rbx,QWORD PTR[32+rbx]
+ mov QWORD PTR[8+rdi],r13
+ sbb r10,r10
+ mov QWORD PTR[16+rdi],r14
+ mov QWORD PTR[24+rdi],r15
+ lea rdi,QWORD PTR[32+rdi]
+
+ inc rcx
+ jnz $L$sqr4x_sub
+
+ mov r10,r9
+ neg r9
+ DB 0F3h,0C3h ;repret
+
+__bn_post4x_internal ENDP
+PUBLIC bn_from_montgomery
+
+ALIGN 32
+bn_from_montgomery PROC PUBLIC
+
+ test DWORD PTR[48+rsp],7
+ jz bn_from_mont8x
+ xor eax,eax
+ DB 0F3h,0C3h ;repret
+
+bn_from_montgomery ENDP
+
+
+ALIGN 32
+bn_from_mont8x PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_bn_from_mont8x::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+DB 067h
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$from_prologue::
+
+ shl r9d,3
+ lea r10,QWORD PTR[r9*2+r9]
+ neg r9
+ mov r8,QWORD PTR[r8]
+
+
+
+
+
+
+
+
+ lea r11,QWORD PTR[((-320))+r9*2+rsp]
+ mov rbp,rsp
+ sub r11,rdi
+ and r11,4095
+ cmp r10,r11
+ jb $L$from_sp_alt
+ sub rbp,r11
+ lea rbp,QWORD PTR[((-320))+r9*2+rbp]
+ jmp $L$from_sp_done
+
+ALIGN 32
+$L$from_sp_alt::
+ lea r10,QWORD PTR[((4096-320))+r9*2]
+ lea rbp,QWORD PTR[((-320))+r9*2+rbp]
+ sub r11,r10
+ mov r10,0
+ cmovc r11,r10
+ sub rbp,r11
+$L$from_sp_done::
+ and rbp,-64
+ mov r11,rsp
+ sub r11,rbp
+ and r11,-4096
+ lea rsp,QWORD PTR[rbp*1+r11]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$from_page_walk
+ jmp $L$from_page_walk_done
+
+$L$from_page_walk::
+ lea rsp,QWORD PTR[((-4096))+rsp]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$from_page_walk
+$L$from_page_walk_done::
+
+ mov r10,r9
+ neg r9
+
+
+
+
+
+
+
+
+
+
+ mov QWORD PTR[32+rsp],r8
+ mov QWORD PTR[40+rsp],rax
+
+$L$from_body::
+ mov r11,r9
+ lea rax,QWORD PTR[48+rsp]
+ pxor xmm0,xmm0
+ jmp $L$mul_by_1
+
+ALIGN 32
+$L$mul_by_1::
+ movdqu xmm1,XMMWORD PTR[rsi]
+ movdqu xmm2,XMMWORD PTR[16+rsi]
+ movdqu xmm3,XMMWORD PTR[32+rsi]
+ movdqa XMMWORD PTR[r9*1+rax],xmm0
+ movdqu xmm4,XMMWORD PTR[48+rsi]
+ movdqa XMMWORD PTR[16+r9*1+rax],xmm0
+DB 048h,08dh,0b6h,040h,000h,000h,000h
+ movdqa XMMWORD PTR[rax],xmm1
+ movdqa XMMWORD PTR[32+r9*1+rax],xmm0
+ movdqa XMMWORD PTR[16+rax],xmm2
+ movdqa XMMWORD PTR[48+r9*1+rax],xmm0
+ movdqa XMMWORD PTR[32+rax],xmm3
+ movdqa XMMWORD PTR[48+rax],xmm4
+ lea rax,QWORD PTR[64+rax]
+ sub r11,64
+ jnz $L$mul_by_1
+
+DB 102,72,15,110,207
+DB 102,72,15,110,209
+DB 067h
+ mov rbp,rcx
+DB 102,73,15,110,218
+ mov r11d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ and r11d,080108h
+ cmp r11d,080108h
+ jne $L$from_mont_nox
+
+ lea rdi,QWORD PTR[r9*1+rax]
+ call __bn_sqrx8x_reduction
+ call __bn_postx4x_internal
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[48+rsp]
+ jmp $L$from_mont_zero
+
+ALIGN 32
+$L$from_mont_nox::
+ call __bn_sqr8x_reduction
+ call __bn_post4x_internal
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[48+rsp]
+ jmp $L$from_mont_zero
+
+ALIGN 32
+$L$from_mont_zero::
+ mov rsi,QWORD PTR[40+rsp]
+
+ movdqa XMMWORD PTR[rax],xmm0
+ movdqa XMMWORD PTR[16+rax],xmm0
+ movdqa XMMWORD PTR[32+rax],xmm0
+ movdqa XMMWORD PTR[48+rax],xmm0
+ lea rax,QWORD PTR[64+rax]
+ sub r9,32
+ jnz $L$from_mont_zero
+
+ mov rax,1
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$from_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_bn_from_mont8x::
+bn_from_mont8x ENDP
+
+ALIGN 32
+bn_mulx4x_mont_gather5 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_bn_mulx4x_mont_gather5::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov rax,rsp
+
+$L$mulx4x_enter::
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$mulx4x_prologue::
+
+ shl r9d,3
+ lea r10,QWORD PTR[r9*2+r9]
+ neg r9
+ mov r8,QWORD PTR[r8]
+
+
+
+
+
+
+
+
+
+
+ lea r11,QWORD PTR[((-320))+r9*2+rsp]
+ mov rbp,rsp
+ sub r11,rdi
+ and r11,4095
+ cmp r10,r11
+ jb $L$mulx4xsp_alt
+ sub rbp,r11
+ lea rbp,QWORD PTR[((-320))+r9*2+rbp]
+ jmp $L$mulx4xsp_done
+
+$L$mulx4xsp_alt::
+ lea r10,QWORD PTR[((4096-320))+r9*2]
+ lea rbp,QWORD PTR[((-320))+r9*2+rbp]
+ sub r11,r10
+ mov r10,0
+ cmovc r11,r10
+ sub rbp,r11
+$L$mulx4xsp_done::
+ and rbp,-64
+ mov r11,rsp
+ sub r11,rbp
+ and r11,-4096
+ lea rsp,QWORD PTR[rbp*1+r11]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$mulx4x_page_walk
+ jmp $L$mulx4x_page_walk_done
+
+$L$mulx4x_page_walk::
+ lea rsp,QWORD PTR[((-4096))+rsp]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$mulx4x_page_walk
+$L$mulx4x_page_walk_done::
+
+
+
+
+
+
+
+
+
+
+
+
+
+ mov QWORD PTR[32+rsp],r8
+ mov QWORD PTR[40+rsp],rax
+
+$L$mulx4x_body::
+ call mulx4x_internal
+
+ mov rsi,QWORD PTR[40+rsp]
+
+ mov rax,1
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$mulx4x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_bn_mulx4x_mont_gather5::
+bn_mulx4x_mont_gather5 ENDP
+
+
+ALIGN 32
+mulx4x_internal PROC PRIVATE
+
+ mov QWORD PTR[8+rsp],r9
+ mov r10,r9
+ neg r9
+ shl r9,5
+ neg r10
+ lea r13,QWORD PTR[128+r9*1+rdx]
+ shr r9,5+5
+ movd xmm5,DWORD PTR[56+rax]
+ sub r9,1
+ lea rax,QWORD PTR[$L$inc]
+ mov QWORD PTR[((16+8))+rsp],r13
+ mov QWORD PTR[((24+8))+rsp],r9
+ mov QWORD PTR[((56+8))+rsp],rdi
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa xmm1,XMMWORD PTR[16+rax]
+ lea r10,QWORD PTR[((88-112))+r10*1+rsp]
+ lea rdi,QWORD PTR[128+rdx]
+
+ pshufd xmm5,xmm5,0
+ movdqa xmm4,xmm1
+DB 067h
+ movdqa xmm2,xmm1
+DB 067h
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[112+r10],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[128+r10],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[144+r10],xmm2
+ movdqa xmm2,xmm4
+
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[160+r10],xmm3
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[176+r10],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[192+r10],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[208+r10],xmm2
+ movdqa xmm2,xmm4
+
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[224+r10],xmm3
+ movdqa xmm3,xmm4
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[240+r10],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[256+r10],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[272+r10],xmm2
+ movdqa xmm2,xmm4
+
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[288+r10],xmm3
+ movdqa xmm3,xmm4
+DB 067h
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[304+r10],xmm0
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[320+r10],xmm1
+
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[336+r10],xmm2
+
+ pand xmm0,XMMWORD PTR[64+rdi]
+ pand xmm1,XMMWORD PTR[80+rdi]
+ pand xmm2,XMMWORD PTR[96+rdi]
+ movdqa XMMWORD PTR[352+r10],xmm3
+ pand xmm3,XMMWORD PTR[112+rdi]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ movdqa xmm4,XMMWORD PTR[((-128))+rdi]
+ movdqa xmm5,XMMWORD PTR[((-112))+rdi]
+ movdqa xmm2,XMMWORD PTR[((-96))+rdi]
+ pand xmm4,XMMWORD PTR[112+r10]
+ movdqa xmm3,XMMWORD PTR[((-80))+rdi]
+ pand xmm5,XMMWORD PTR[128+r10]
+ por xmm0,xmm4
+ pand xmm2,XMMWORD PTR[144+r10]
+ por xmm1,xmm5
+ pand xmm3,XMMWORD PTR[160+r10]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ movdqa xmm4,XMMWORD PTR[((-64))+rdi]
+ movdqa xmm5,XMMWORD PTR[((-48))+rdi]
+ movdqa xmm2,XMMWORD PTR[((-32))+rdi]
+ pand xmm4,XMMWORD PTR[176+r10]
+ movdqa xmm3,XMMWORD PTR[((-16))+rdi]
+ pand xmm5,XMMWORD PTR[192+r10]
+ por xmm0,xmm4
+ pand xmm2,XMMWORD PTR[208+r10]
+ por xmm1,xmm5
+ pand xmm3,XMMWORD PTR[224+r10]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ movdqa xmm4,XMMWORD PTR[rdi]
+ movdqa xmm5,XMMWORD PTR[16+rdi]
+ movdqa xmm2,XMMWORD PTR[32+rdi]
+ pand xmm4,XMMWORD PTR[240+r10]
+ movdqa xmm3,XMMWORD PTR[48+rdi]
+ pand xmm5,XMMWORD PTR[256+r10]
+ por xmm0,xmm4
+ pand xmm2,XMMWORD PTR[272+r10]
+ por xmm1,xmm5
+ pand xmm3,XMMWORD PTR[288+r10]
+ por xmm0,xmm2
+ por xmm1,xmm3
+ pxor xmm0,xmm1
+ pshufd xmm1,xmm0,04eh
+ por xmm0,xmm1
+ lea rdi,QWORD PTR[256+rdi]
+DB 102,72,15,126,194
+ lea rbx,QWORD PTR[((64+32+8))+rsp]
+
+ mov r9,rdx
+ mulx rax,r8,QWORD PTR[rsi]
+ mulx r12,r11,QWORD PTR[8+rsi]
+ add r11,rax
+ mulx r13,rax,QWORD PTR[16+rsi]
+ adc r12,rax
+ adc r13,0
+ mulx r14,rax,QWORD PTR[24+rsi]
+
+ mov r15,r8
+ imul r8,QWORD PTR[((32+8))+rsp]
+ xor rbp,rbp
+ mov rdx,r8
+
+ mov QWORD PTR[((8+8))+rsp],rdi
+
+ lea rsi,QWORD PTR[32+rsi]
+ adcx r13,rax
+ adcx r14,rbp
+
+ mulx r10,rax,QWORD PTR[rcx]
+ adcx r15,rax
+ adox r10,r11
+ mulx r11,rax,QWORD PTR[8+rcx]
+ adcx r10,rax
+ adox r11,r12
+ mulx r12,rax,QWORD PTR[16+rcx]
+ mov rdi,QWORD PTR[((24+8))+rsp]
+ mov QWORD PTR[((-32))+rbx],r10
+ adcx r11,rax
+ adox r12,r13
+ mulx r15,rax,QWORD PTR[24+rcx]
+ mov rdx,r9
+ mov QWORD PTR[((-24))+rbx],r11
+ adcx r12,rax
+ adox r15,rbp
+ lea rcx,QWORD PTR[32+rcx]
+ mov QWORD PTR[((-16))+rbx],r12
+ jmp $L$mulx4x_1st
+
+ALIGN 32
+$L$mulx4x_1st::
+ adcx r15,rbp
+ mulx rax,r10,QWORD PTR[rsi]
+ adcx r10,r14
+ mulx r14,r11,QWORD PTR[8+rsi]
+ adcx r11,rax
+ mulx rax,r12,QWORD PTR[16+rsi]
+ adcx r12,r14
+ mulx r14,r13,QWORD PTR[24+rsi]
+DB 067h,067h
+ mov rdx,r8
+ adcx r13,rax
+ adcx r14,rbp
+ lea rsi,QWORD PTR[32+rsi]
+ lea rbx,QWORD PTR[32+rbx]
+
+ adox r10,r15
+ mulx r15,rax,QWORD PTR[rcx]
+ adcx r10,rax
+ adox r11,r15
+ mulx r15,rax,QWORD PTR[8+rcx]
+ adcx r11,rax
+ adox r12,r15
+ mulx r15,rax,QWORD PTR[16+rcx]
+ mov QWORD PTR[((-40))+rbx],r10
+ adcx r12,rax
+ mov QWORD PTR[((-32))+rbx],r11
+ adox r13,r15
+ mulx r15,rax,QWORD PTR[24+rcx]
+ mov rdx,r9
+ mov QWORD PTR[((-24))+rbx],r12
+ adcx r13,rax
+ adox r15,rbp
+ lea rcx,QWORD PTR[32+rcx]
+ mov QWORD PTR[((-16))+rbx],r13
+
+ dec rdi
+ jnz $L$mulx4x_1st
+
+ mov rax,QWORD PTR[8+rsp]
+ adc r15,rbp
+ lea rsi,QWORD PTR[rax*1+rsi]
+ add r14,r15
+ mov rdi,QWORD PTR[((8+8))+rsp]
+ adc rbp,rbp
+ mov QWORD PTR[((-8))+rbx],r14
+ jmp $L$mulx4x_outer
+
+ALIGN 32
+$L$mulx4x_outer::
+ lea r10,QWORD PTR[((16-256))+rbx]
+ pxor xmm4,xmm4
+DB 067h,067h
+ pxor xmm5,xmm5
+ movdqa xmm0,XMMWORD PTR[((-128))+rdi]
+ movdqa xmm1,XMMWORD PTR[((-112))+rdi]
+ movdqa xmm2,XMMWORD PTR[((-96))+rdi]
+ pand xmm0,XMMWORD PTR[256+r10]
+ movdqa xmm3,XMMWORD PTR[((-80))+rdi]
+ pand xmm1,XMMWORD PTR[272+r10]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[288+r10]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[304+r10]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[((-64))+rdi]
+ movdqa xmm1,XMMWORD PTR[((-48))+rdi]
+ movdqa xmm2,XMMWORD PTR[((-32))+rdi]
+ pand xmm0,XMMWORD PTR[320+r10]
+ movdqa xmm3,XMMWORD PTR[((-16))+rdi]
+ pand xmm1,XMMWORD PTR[336+r10]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[352+r10]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[368+r10]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[rdi]
+ movdqa xmm1,XMMWORD PTR[16+rdi]
+ movdqa xmm2,XMMWORD PTR[32+rdi]
+ pand xmm0,XMMWORD PTR[384+r10]
+ movdqa xmm3,XMMWORD PTR[48+rdi]
+ pand xmm1,XMMWORD PTR[400+r10]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[416+r10]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[432+r10]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[64+rdi]
+ movdqa xmm1,XMMWORD PTR[80+rdi]
+ movdqa xmm2,XMMWORD PTR[96+rdi]
+ pand xmm0,XMMWORD PTR[448+r10]
+ movdqa xmm3,XMMWORD PTR[112+rdi]
+ pand xmm1,XMMWORD PTR[464+r10]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[480+r10]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[496+r10]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ por xmm4,xmm5
+ pshufd xmm0,xmm4,04eh
+ por xmm0,xmm4
+ lea rdi,QWORD PTR[256+rdi]
+DB 102,72,15,126,194
+
+ mov QWORD PTR[rbx],rbp
+ lea rbx,QWORD PTR[32+rax*1+rbx]
+ mulx r11,r8,QWORD PTR[rsi]
+ xor rbp,rbp
+ mov r9,rdx
+ mulx r12,r14,QWORD PTR[8+rsi]
+ adox r8,QWORD PTR[((-32))+rbx]
+ adcx r11,r14
+ mulx r13,r15,QWORD PTR[16+rsi]
+ adox r11,QWORD PTR[((-24))+rbx]
+ adcx r12,r15
+ mulx r14,rdx,QWORD PTR[24+rsi]
+ adox r12,QWORD PTR[((-16))+rbx]
+ adcx r13,rdx
+ lea rcx,QWORD PTR[rax*1+rcx]
+ lea rsi,QWORD PTR[32+rsi]
+ adox r13,QWORD PTR[((-8))+rbx]
+ adcx r14,rbp
+ adox r14,rbp
+
+ mov r15,r8
+ imul r8,QWORD PTR[((32+8))+rsp]
+
+ mov rdx,r8
+ xor rbp,rbp
+ mov QWORD PTR[((8+8))+rsp],rdi
+
+ mulx r10,rax,QWORD PTR[rcx]
+ adcx r15,rax
+ adox r10,r11
+ mulx r11,rax,QWORD PTR[8+rcx]
+ adcx r10,rax
+ adox r11,r12
+ mulx r12,rax,QWORD PTR[16+rcx]
+ adcx r11,rax
+ adox r12,r13
+ mulx r15,rax,QWORD PTR[24+rcx]
+ mov rdx,r9
+ mov rdi,QWORD PTR[((24+8))+rsp]
+ mov QWORD PTR[((-32))+rbx],r10
+ adcx r12,rax
+ mov QWORD PTR[((-24))+rbx],r11
+ adox r15,rbp
+ mov QWORD PTR[((-16))+rbx],r12
+ lea rcx,QWORD PTR[32+rcx]
+ jmp $L$mulx4x_inner
+
+ALIGN 32
+$L$mulx4x_inner::
+ mulx rax,r10,QWORD PTR[rsi]
+ adcx r15,rbp
+ adox r10,r14
+ mulx r14,r11,QWORD PTR[8+rsi]
+ adcx r10,QWORD PTR[rbx]
+ adox r11,rax
+ mulx rax,r12,QWORD PTR[16+rsi]
+ adcx r11,QWORD PTR[8+rbx]
+ adox r12,r14
+ mulx r14,r13,QWORD PTR[24+rsi]
+ mov rdx,r8
+ adcx r12,QWORD PTR[16+rbx]
+ adox r13,rax
+ adcx r13,QWORD PTR[24+rbx]
+ adox r14,rbp
+ lea rsi,QWORD PTR[32+rsi]
+ lea rbx,QWORD PTR[32+rbx]
+ adcx r14,rbp
+
+ adox r10,r15
+ mulx r15,rax,QWORD PTR[rcx]
+ adcx r10,rax
+ adox r11,r15
+ mulx r15,rax,QWORD PTR[8+rcx]
+ adcx r11,rax
+ adox r12,r15
+ mulx r15,rax,QWORD PTR[16+rcx]
+ mov QWORD PTR[((-40))+rbx],r10
+ adcx r12,rax
+ adox r13,r15
+ mov QWORD PTR[((-32))+rbx],r11
+ mulx r15,rax,QWORD PTR[24+rcx]
+ mov rdx,r9
+ lea rcx,QWORD PTR[32+rcx]
+ mov QWORD PTR[((-24))+rbx],r12
+ adcx r13,rax
+ adox r15,rbp
+ mov QWORD PTR[((-16))+rbx],r13
+
+ dec rdi
+ jnz $L$mulx4x_inner
+
+ mov rax,QWORD PTR[((0+8))+rsp]
+ adc r15,rbp
+ sub rdi,QWORD PTR[rbx]
+ mov rdi,QWORD PTR[((8+8))+rsp]
+ mov r10,QWORD PTR[((16+8))+rsp]
+ adc r14,r15
+ lea rsi,QWORD PTR[rax*1+rsi]
+ adc rbp,rbp
+ mov QWORD PTR[((-8))+rbx],r14
+
+ cmp rdi,r10
+ jb $L$mulx4x_outer
+
+ mov r10,QWORD PTR[((-8))+rcx]
+ mov r8,rbp
+ mov r12,QWORD PTR[rax*1+rcx]
+ lea rbp,QWORD PTR[rax*1+rcx]
+ mov rcx,rax
+ lea rdi,QWORD PTR[rax*1+rbx]
+ xor eax,eax
+ xor r15,r15
+ sub r10,r14
+ adc r15,r15
+ or r8,r15
+ sar rcx,3+2
+ sub rax,r8
+ mov rdx,QWORD PTR[((56+8))+rsp]
+ dec r12
+ mov r13,QWORD PTR[8+rbp]
+ xor r8,r8
+ mov r14,QWORD PTR[16+rbp]
+ mov r15,QWORD PTR[24+rbp]
+ jmp $L$sqrx4x_sub_entry
+
+mulx4x_internal ENDP
+
+ALIGN 32
+bn_powerx5 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_bn_powerx5::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ mov rax,rsp
+
+$L$powerx5_enter::
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$powerx5_prologue::
+
+ shl r9d,3
+ lea r10,QWORD PTR[r9*2+r9]
+ neg r9
+ mov r8,QWORD PTR[r8]
+
+
+
+
+
+
+
+
+ lea r11,QWORD PTR[((-320))+r9*2+rsp]
+ mov rbp,rsp
+ sub r11,rdi
+ and r11,4095
+ cmp r10,r11
+ jb $L$pwrx_sp_alt
+ sub rbp,r11
+ lea rbp,QWORD PTR[((-320))+r9*2+rbp]
+ jmp $L$pwrx_sp_done
+
+ALIGN 32
+$L$pwrx_sp_alt::
+ lea r10,QWORD PTR[((4096-320))+r9*2]
+ lea rbp,QWORD PTR[((-320))+r9*2+rbp]
+ sub r11,r10
+ mov r10,0
+ cmovc r11,r10
+ sub rbp,r11
+$L$pwrx_sp_done::
+ and rbp,-64
+ mov r11,rsp
+ sub r11,rbp
+ and r11,-4096
+ lea rsp,QWORD PTR[rbp*1+r11]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$pwrx_page_walk
+ jmp $L$pwrx_page_walk_done
+
+$L$pwrx_page_walk::
+ lea rsp,QWORD PTR[((-4096))+rsp]
+ mov r10,QWORD PTR[rsp]
+ cmp rsp,rbp
+ ja $L$pwrx_page_walk
+$L$pwrx_page_walk_done::
+
+ mov r10,r9
+ neg r9
+
+
+
+
+
+
+
+
+
+
+
+
+ pxor xmm0,xmm0
+DB 102,72,15,110,207
+DB 102,72,15,110,209
+DB 102,73,15,110,218
+DB 102,72,15,110,226
+ mov QWORD PTR[32+rsp],r8
+ mov QWORD PTR[40+rsp],rax
+
+$L$powerx5_body::
+
+ call __bn_sqrx8x_internal
+ call __bn_postx4x_internal
+ call __bn_sqrx8x_internal
+ call __bn_postx4x_internal
+ call __bn_sqrx8x_internal
+ call __bn_postx4x_internal
+ call __bn_sqrx8x_internal
+ call __bn_postx4x_internal
+ call __bn_sqrx8x_internal
+ call __bn_postx4x_internal
+
+ mov r9,r10
+ mov rdi,rsi
+DB 102,72,15,126,209
+DB 102,72,15,126,226
+ mov rax,QWORD PTR[40+rsp]
+
+ call mulx4x_internal
+
+ mov rsi,QWORD PTR[40+rsp]
+
+ mov rax,1
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$powerx5_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_bn_powerx5::
+bn_powerx5 ENDP
+
+PUBLIC bn_sqrx8x_internal
+
+
+ALIGN 32
+bn_sqrx8x_internal PROC PUBLIC
+__bn_sqrx8x_internal::
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ lea rdi,QWORD PTR[((48+8))+rsp]
+ lea rbp,QWORD PTR[r9*1+rsi]
+ mov QWORD PTR[((0+8))+rsp],r9
+ mov QWORD PTR[((8+8))+rsp],rbp
+ jmp $L$sqr8x_zero_start
+
+ALIGN 32
+DB 066h,066h,066h,02eh,00fh,01fh,084h,000h,000h,000h,000h,000h
+$L$sqrx8x_zero::
+DB 03eh
+ movdqa XMMWORD PTR[rdi],xmm0
+ movdqa XMMWORD PTR[16+rdi],xmm0
+ movdqa XMMWORD PTR[32+rdi],xmm0
+ movdqa XMMWORD PTR[48+rdi],xmm0
+$L$sqr8x_zero_start::
+ movdqa XMMWORD PTR[64+rdi],xmm0
+ movdqa XMMWORD PTR[80+rdi],xmm0
+ movdqa XMMWORD PTR[96+rdi],xmm0
+ movdqa XMMWORD PTR[112+rdi],xmm0
+ lea rdi,QWORD PTR[128+rdi]
+ sub r9,64
+ jnz $L$sqrx8x_zero
+
+ mov rdx,QWORD PTR[rsi]
+
+ xor r10,r10
+ xor r11,r11
+ xor r12,r12
+ xor r13,r13
+ xor r14,r14
+ xor r15,r15
+ lea rdi,QWORD PTR[((48+8))+rsp]
+ xor rbp,rbp
+ jmp $L$sqrx8x_outer_loop
+
+ALIGN 32
+$L$sqrx8x_outer_loop::
+ mulx rax,r8,QWORD PTR[8+rsi]
+ adcx r8,r9
+ adox r10,rax
+ mulx rax,r9,QWORD PTR[16+rsi]
+ adcx r9,r10
+ adox r11,rax
+DB 0c4h,0e2h,0abh,0f6h,086h,018h,000h,000h,000h
+ adcx r10,r11
+ adox r12,rax
+DB 0c4h,0e2h,0a3h,0f6h,086h,020h,000h,000h,000h
+ adcx r11,r12
+ adox r13,rax
+ mulx rax,r12,QWORD PTR[40+rsi]
+ adcx r12,r13
+ adox r14,rax
+ mulx rax,r13,QWORD PTR[48+rsi]
+ adcx r13,r14
+ adox rax,r15
+ mulx r15,r14,QWORD PTR[56+rsi]
+ mov rdx,QWORD PTR[8+rsi]
+ adcx r14,rax
+ adox r15,rbp
+ adc r15,QWORD PTR[64+rdi]
+ mov QWORD PTR[8+rdi],r8
+ mov QWORD PTR[16+rdi],r9
+ sbb rcx,rcx
+ xor rbp,rbp
+
+
+ mulx rbx,r8,QWORD PTR[16+rsi]
+ mulx rax,r9,QWORD PTR[24+rsi]
+ adcx r8,r10
+ adox r9,rbx
+ mulx rbx,r10,QWORD PTR[32+rsi]
+ adcx r9,r11
+ adox r10,rax
+DB 0c4h,0e2h,0a3h,0f6h,086h,028h,000h,000h,000h
+ adcx r10,r12
+ adox r11,rbx
+DB 0c4h,0e2h,09bh,0f6h,09eh,030h,000h,000h,000h
+ adcx r11,r13
+ adox r12,r14
+DB 0c4h,062h,093h,0f6h,0b6h,038h,000h,000h,000h
+ mov rdx,QWORD PTR[16+rsi]
+ adcx r12,rax
+ adox r13,rbx
+ adcx r13,r15
+ adox r14,rbp
+ adcx r14,rbp
+
+ mov QWORD PTR[24+rdi],r8
+ mov QWORD PTR[32+rdi],r9
+
+ mulx rbx,r8,QWORD PTR[24+rsi]
+ mulx rax,r9,QWORD PTR[32+rsi]
+ adcx r8,r10
+ adox r9,rbx
+ mulx rbx,r10,QWORD PTR[40+rsi]
+ adcx r9,r11
+ adox r10,rax
+DB 0c4h,0e2h,0a3h,0f6h,086h,030h,000h,000h,000h
+ adcx r10,r12
+ adox r11,r13
+DB 0c4h,062h,09bh,0f6h,0aeh,038h,000h,000h,000h
+DB 03eh
+ mov rdx,QWORD PTR[24+rsi]
+ adcx r11,rbx
+ adox r12,rax
+ adcx r12,r14
+ mov QWORD PTR[40+rdi],r8
+ mov QWORD PTR[48+rdi],r9
+ mulx rax,r8,QWORD PTR[32+rsi]
+ adox r13,rbp
+ adcx r13,rbp
+
+ mulx rbx,r9,QWORD PTR[40+rsi]
+ adcx r8,r10
+ adox r9,rax
+ mulx rax,r10,QWORD PTR[48+rsi]
+ adcx r9,r11
+ adox r10,r12
+ mulx r12,r11,QWORD PTR[56+rsi]
+ mov rdx,QWORD PTR[32+rsi]
+ mov r14,QWORD PTR[40+rsi]
+ adcx r10,rbx
+ adox r11,rax
+ mov r15,QWORD PTR[48+rsi]
+ adcx r11,r13
+ adox r12,rbp
+ adcx r12,rbp
+
+ mov QWORD PTR[56+rdi],r8
+ mov QWORD PTR[64+rdi],r9
+
+ mulx rax,r9,r14
+ mov r8,QWORD PTR[56+rsi]
+ adcx r9,r10
+ mulx rbx,r10,r15
+ adox r10,rax
+ adcx r10,r11
+ mulx rax,r11,r8
+ mov rdx,r14
+ adox r11,rbx
+ adcx r11,r12
+
+ adcx rax,rbp
+
+ mulx rbx,r14,r15
+ mulx r13,r12,r8
+ mov rdx,r15
+ lea rsi,QWORD PTR[64+rsi]
+ adcx r11,r14
+ adox r12,rbx
+ adcx r12,rax
+ adox r13,rbp
+
+DB 067h,067h
+ mulx r14,r8,r8
+ adcx r13,r8
+ adcx r14,rbp
+
+ cmp rsi,QWORD PTR[((8+8))+rsp]
+ je $L$sqrx8x_outer_break
+
+ neg rcx
+ mov rcx,-8
+ mov r15,rbp
+ mov r8,QWORD PTR[64+rdi]
+ adcx r9,QWORD PTR[72+rdi]
+ adcx r10,QWORD PTR[80+rdi]
+ adcx r11,QWORD PTR[88+rdi]
+ adc r12,QWORD PTR[96+rdi]
+ adc r13,QWORD PTR[104+rdi]
+ adc r14,QWORD PTR[112+rdi]
+ adc r15,QWORD PTR[120+rdi]
+ lea rbp,QWORD PTR[rsi]
+ lea rdi,QWORD PTR[128+rdi]
+ sbb rax,rax
+
+ mov rdx,QWORD PTR[((-64))+rsi]
+ mov QWORD PTR[((16+8))+rsp],rax
+ mov QWORD PTR[((24+8))+rsp],rdi
+
+
+ xor eax,eax
+ jmp $L$sqrx8x_loop
+
+ALIGN 32
+$L$sqrx8x_loop::
+ mov rbx,r8
+ mulx r8,rax,QWORD PTR[rbp]
+ adcx rbx,rax
+ adox r8,r9
+
+ mulx r9,rax,QWORD PTR[8+rbp]
+ adcx r8,rax
+ adox r9,r10
+
+ mulx r10,rax,QWORD PTR[16+rbp]
+ adcx r9,rax
+ adox r10,r11
+
+ mulx r11,rax,QWORD PTR[24+rbp]
+ adcx r10,rax
+ adox r11,r12
+
+DB 0c4h,062h,0fbh,0f6h,0a5h,020h,000h,000h,000h
+ adcx r11,rax
+ adox r12,r13
+
+ mulx r13,rax,QWORD PTR[40+rbp]
+ adcx r12,rax
+ adox r13,r14
+
+ mulx r14,rax,QWORD PTR[48+rbp]
+ mov QWORD PTR[rcx*8+rdi],rbx
+ mov ebx,0
+ adcx r13,rax
+ adox r14,r15
+
+DB 0c4h,062h,0fbh,0f6h,0bdh,038h,000h,000h,000h
+ mov rdx,QWORD PTR[8+rcx*8+rsi]
+ adcx r14,rax
+ adox r15,rbx
+ adcx r15,rbx
+
+DB 067h
+ inc rcx
+ jnz $L$sqrx8x_loop
+
+ lea rbp,QWORD PTR[64+rbp]
+ mov rcx,-8
+ cmp rbp,QWORD PTR[((8+8))+rsp]
+ je $L$sqrx8x_break
+
+ sub rbx,QWORD PTR[((16+8))+rsp]
+DB 066h
+ mov rdx,QWORD PTR[((-64))+rsi]
+ adcx r8,QWORD PTR[rdi]
+ adcx r9,QWORD PTR[8+rdi]
+ adc r10,QWORD PTR[16+rdi]
+ adc r11,QWORD PTR[24+rdi]
+ adc r12,QWORD PTR[32+rdi]
+ adc r13,QWORD PTR[40+rdi]
+ adc r14,QWORD PTR[48+rdi]
+ adc r15,QWORD PTR[56+rdi]
+ lea rdi,QWORD PTR[64+rdi]
+DB 067h
+ sbb rax,rax
+ xor ebx,ebx
+ mov QWORD PTR[((16+8))+rsp],rax
+ jmp $L$sqrx8x_loop
+
+ALIGN 32
+$L$sqrx8x_break::
+ xor rbp,rbp
+ sub rbx,QWORD PTR[((16+8))+rsp]
+ adcx r8,rbp
+ mov rcx,QWORD PTR[((24+8))+rsp]
+ adcx r9,rbp
+ mov rdx,QWORD PTR[rsi]
+ adc r10,0
+ mov QWORD PTR[rdi],r8
+ adc r11,0
+ adc r12,0
+ adc r13,0
+ adc r14,0
+ adc r15,0
+ cmp rdi,rcx
+ je $L$sqrx8x_outer_loop
+
+ mov QWORD PTR[8+rdi],r9
+ mov r9,QWORD PTR[8+rcx]
+ mov QWORD PTR[16+rdi],r10
+ mov r10,QWORD PTR[16+rcx]
+ mov QWORD PTR[24+rdi],r11
+ mov r11,QWORD PTR[24+rcx]
+ mov QWORD PTR[32+rdi],r12
+ mov r12,QWORD PTR[32+rcx]
+ mov QWORD PTR[40+rdi],r13
+ mov r13,QWORD PTR[40+rcx]
+ mov QWORD PTR[48+rdi],r14
+ mov r14,QWORD PTR[48+rcx]
+ mov QWORD PTR[56+rdi],r15
+ mov r15,QWORD PTR[56+rcx]
+ mov rdi,rcx
+ jmp $L$sqrx8x_outer_loop
+
+ALIGN 32
+$L$sqrx8x_outer_break::
+ mov QWORD PTR[72+rdi],r9
+DB 102,72,15,126,217
+ mov QWORD PTR[80+rdi],r10
+ mov QWORD PTR[88+rdi],r11
+ mov QWORD PTR[96+rdi],r12
+ mov QWORD PTR[104+rdi],r13
+ mov QWORD PTR[112+rdi],r14
+ lea rdi,QWORD PTR[((48+8))+rsp]
+ mov rdx,QWORD PTR[rcx*1+rsi]
+
+ mov r11,QWORD PTR[8+rdi]
+ xor r10,r10
+ mov r9,QWORD PTR[((0+8))+rsp]
+ adox r11,r11
+ mov r12,QWORD PTR[16+rdi]
+ mov r13,QWORD PTR[24+rdi]
+
+
+ALIGN 32
+$L$sqrx4x_shift_n_add::
+ mulx rbx,rax,rdx
+ adox r12,r12
+ adcx rax,r10
+DB 048h,08bh,094h,00eh,008h,000h,000h,000h
+DB 04ch,08bh,097h,020h,000h,000h,000h
+ adox r13,r13
+ adcx rbx,r11
+ mov r11,QWORD PTR[40+rdi]
+ mov QWORD PTR[rdi],rax
+ mov QWORD PTR[8+rdi],rbx
+
+ mulx rbx,rax,rdx
+ adox r10,r10
+ adcx rax,r12
+ mov rdx,QWORD PTR[16+rcx*1+rsi]
+ mov r12,QWORD PTR[48+rdi]
+ adox r11,r11
+ adcx rbx,r13
+ mov r13,QWORD PTR[56+rdi]
+ mov QWORD PTR[16+rdi],rax
+ mov QWORD PTR[24+rdi],rbx
+
+ mulx rbx,rax,rdx
+ adox r12,r12
+ adcx rax,r10
+ mov rdx,QWORD PTR[24+rcx*1+rsi]
+ lea rcx,QWORD PTR[32+rcx]
+ mov r10,QWORD PTR[64+rdi]
+ adox r13,r13
+ adcx rbx,r11
+ mov r11,QWORD PTR[72+rdi]
+ mov QWORD PTR[32+rdi],rax
+ mov QWORD PTR[40+rdi],rbx
+
+ mulx rbx,rax,rdx
+ adox r10,r10
+ adcx rax,r12
+ jrcxz $L$sqrx4x_shift_n_add_break
+DB 048h,08bh,094h,00eh,000h,000h,000h,000h
+ adox r11,r11
+ adcx rbx,r13
+ mov r12,QWORD PTR[80+rdi]
+ mov r13,QWORD PTR[88+rdi]
+ mov QWORD PTR[48+rdi],rax
+ mov QWORD PTR[56+rdi],rbx
+ lea rdi,QWORD PTR[64+rdi]
+ nop
+ jmp $L$sqrx4x_shift_n_add
+
+ALIGN 32
+$L$sqrx4x_shift_n_add_break::
+ adcx rbx,r13
+ mov QWORD PTR[48+rdi],rax
+ mov QWORD PTR[56+rdi],rbx
+ lea rdi,QWORD PTR[64+rdi]
+DB 102,72,15,126,213
+__bn_sqrx8x_reduction::
+ xor eax,eax
+ mov rbx,QWORD PTR[((32+8))+rsp]
+ mov rdx,QWORD PTR[((48+8))+rsp]
+ lea rcx,QWORD PTR[((-64))+r9*1+rbp]
+
+ mov QWORD PTR[((0+8))+rsp],rcx
+ mov QWORD PTR[((8+8))+rsp],rdi
+
+ lea rdi,QWORD PTR[((48+8))+rsp]
+ jmp $L$sqrx8x_reduction_loop
+
+ALIGN 32
+$L$sqrx8x_reduction_loop::
+ mov r9,QWORD PTR[8+rdi]
+ mov r10,QWORD PTR[16+rdi]
+ mov r11,QWORD PTR[24+rdi]
+ mov r12,QWORD PTR[32+rdi]
+ mov r8,rdx
+ imul rdx,rbx
+ mov r13,QWORD PTR[40+rdi]
+ mov r14,QWORD PTR[48+rdi]
+ mov r15,QWORD PTR[56+rdi]
+ mov QWORD PTR[((24+8))+rsp],rax
+
+ lea rdi,QWORD PTR[64+rdi]
+ xor rsi,rsi
+ mov rcx,-8
+ jmp $L$sqrx8x_reduce
+
+ALIGN 32
+$L$sqrx8x_reduce::
+ mov rbx,r8
+ mulx r8,rax,QWORD PTR[rbp]
+ adcx rax,rbx
+ adox r8,r9
+
+ mulx r9,rbx,QWORD PTR[8+rbp]
+ adcx r8,rbx
+ adox r9,r10
+
+ mulx r10,rbx,QWORD PTR[16+rbp]
+ adcx r9,rbx
+ adox r10,r11
+
+ mulx r11,rbx,QWORD PTR[24+rbp]
+ adcx r10,rbx
+ adox r11,r12
+
+DB 0c4h,062h,0e3h,0f6h,0a5h,020h,000h,000h,000h
+ mov rax,rdx
+ mov rdx,r8
+ adcx r11,rbx
+ adox r12,r13
+
+ mulx rdx,rbx,QWORD PTR[((32+8))+rsp]
+ mov rdx,rax
+ mov QWORD PTR[((64+48+8))+rcx*8+rsp],rax
+
+ mulx r13,rax,QWORD PTR[40+rbp]
+ adcx r12,rax
+ adox r13,r14
+
+ mulx r14,rax,QWORD PTR[48+rbp]
+ adcx r13,rax
+ adox r14,r15
+
+ mulx r15,rax,QWORD PTR[56+rbp]
+ mov rdx,rbx
+ adcx r14,rax
+ adox r15,rsi
+ adcx r15,rsi
+
+DB 067h,067h,067h
+ inc rcx
+ jnz $L$sqrx8x_reduce
+
+ mov rax,rsi
+ cmp rbp,QWORD PTR[((0+8))+rsp]
+ jae $L$sqrx8x_no_tail
+
+ mov rdx,QWORD PTR[((48+8))+rsp]
+ add r8,QWORD PTR[rdi]
+ lea rbp,QWORD PTR[64+rbp]
+ mov rcx,-8
+ adcx r9,QWORD PTR[8+rdi]
+ adcx r10,QWORD PTR[16+rdi]
+ adc r11,QWORD PTR[24+rdi]
+ adc r12,QWORD PTR[32+rdi]
+ adc r13,QWORD PTR[40+rdi]
+ adc r14,QWORD PTR[48+rdi]
+ adc r15,QWORD PTR[56+rdi]
+ lea rdi,QWORD PTR[64+rdi]
+ sbb rax,rax
+
+ xor rsi,rsi
+ mov QWORD PTR[((16+8))+rsp],rax
+ jmp $L$sqrx8x_tail
+
+ALIGN 32
+$L$sqrx8x_tail::
+ mov rbx,r8
+ mulx r8,rax,QWORD PTR[rbp]
+ adcx rbx,rax
+ adox r8,r9
+
+ mulx r9,rax,QWORD PTR[8+rbp]
+ adcx r8,rax
+ adox r9,r10
+
+ mulx r10,rax,QWORD PTR[16+rbp]
+ adcx r9,rax
+ adox r10,r11
+
+ mulx r11,rax,QWORD PTR[24+rbp]
+ adcx r10,rax
+ adox r11,r12
+
+DB 0c4h,062h,0fbh,0f6h,0a5h,020h,000h,000h,000h
+ adcx r11,rax
+ adox r12,r13
+
+ mulx r13,rax,QWORD PTR[40+rbp]
+ adcx r12,rax
+ adox r13,r14
+
+ mulx r14,rax,QWORD PTR[48+rbp]
+ adcx r13,rax
+ adox r14,r15
+
+ mulx r15,rax,QWORD PTR[56+rbp]
+ mov rdx,QWORD PTR[((72+48+8))+rcx*8+rsp]
+ adcx r14,rax
+ adox r15,rsi
+ mov QWORD PTR[rcx*8+rdi],rbx
+ mov rbx,r8
+ adcx r15,rsi
+
+ inc rcx
+ jnz $L$sqrx8x_tail
+
+ cmp rbp,QWORD PTR[((0+8))+rsp]
+ jae $L$sqrx8x_tail_done
+
+ sub rsi,QWORD PTR[((16+8))+rsp]
+ mov rdx,QWORD PTR[((48+8))+rsp]
+ lea rbp,QWORD PTR[64+rbp]
+ adc r8,QWORD PTR[rdi]
+ adc r9,QWORD PTR[8+rdi]
+ adc r10,QWORD PTR[16+rdi]
+ adc r11,QWORD PTR[24+rdi]
+ adc r12,QWORD PTR[32+rdi]
+ adc r13,QWORD PTR[40+rdi]
+ adc r14,QWORD PTR[48+rdi]
+ adc r15,QWORD PTR[56+rdi]
+ lea rdi,QWORD PTR[64+rdi]
+ sbb rax,rax
+ sub rcx,8
+
+ xor rsi,rsi
+ mov QWORD PTR[((16+8))+rsp],rax
+ jmp $L$sqrx8x_tail
+
+ALIGN 32
+$L$sqrx8x_tail_done::
+ xor rax,rax
+ add r8,QWORD PTR[((24+8))+rsp]
+ adc r9,0
+ adc r10,0
+ adc r11,0
+ adc r12,0
+ adc r13,0
+ adc r14,0
+ adc r15,0
+ adc rax,0
+
+ sub rsi,QWORD PTR[((16+8))+rsp]
+$L$sqrx8x_no_tail::
+ adc r8,QWORD PTR[rdi]
+DB 102,72,15,126,217
+ adc r9,QWORD PTR[8+rdi]
+ mov rsi,QWORD PTR[56+rbp]
+DB 102,72,15,126,213
+ adc r10,QWORD PTR[16+rdi]
+ adc r11,QWORD PTR[24+rdi]
+ adc r12,QWORD PTR[32+rdi]
+ adc r13,QWORD PTR[40+rdi]
+ adc r14,QWORD PTR[48+rdi]
+ adc r15,QWORD PTR[56+rdi]
+ adc rax,0
+
+ mov rbx,QWORD PTR[((32+8))+rsp]
+ mov rdx,QWORD PTR[64+rcx*1+rdi]
+
+ mov QWORD PTR[rdi],r8
+ lea r8,QWORD PTR[64+rdi]
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+ mov QWORD PTR[32+rdi],r12
+ mov QWORD PTR[40+rdi],r13
+ mov QWORD PTR[48+rdi],r14
+ mov QWORD PTR[56+rdi],r15
+
+ lea rdi,QWORD PTR[64+rcx*1+rdi]
+ cmp r8,QWORD PTR[((8+8))+rsp]
+ jb $L$sqrx8x_reduction_loop
+ DB 0F3h,0C3h ;repret
+
+bn_sqrx8x_internal ENDP
+ALIGN 32
+__bn_postx4x_internal::
+
+ mov r12,QWORD PTR[rbp]
+ mov r10,rcx
+ mov r9,rcx
+ neg rax
+ sar rcx,3+2
+
+DB 102,72,15,126,202
+DB 102,72,15,126,206
+ dec r12
+ mov r13,QWORD PTR[8+rbp]
+ xor r8,r8
+ mov r14,QWORD PTR[16+rbp]
+ mov r15,QWORD PTR[24+rbp]
+ jmp $L$sqrx4x_sub_entry
+
+ALIGN 16
+$L$sqrx4x_sub::
+ mov r12,QWORD PTR[rbp]
+ mov r13,QWORD PTR[8+rbp]
+ mov r14,QWORD PTR[16+rbp]
+ mov r15,QWORD PTR[24+rbp]
+$L$sqrx4x_sub_entry::
+ andn r12,r12,rax
+ lea rbp,QWORD PTR[32+rbp]
+ andn r13,r13,rax
+ andn r14,r14,rax
+ andn r15,r15,rax
+
+ neg r8
+ adc r12,QWORD PTR[rdi]
+ adc r13,QWORD PTR[8+rdi]
+ adc r14,QWORD PTR[16+rdi]
+ adc r15,QWORD PTR[24+rdi]
+ mov QWORD PTR[rdx],r12
+ lea rdi,QWORD PTR[32+rdi]
+ mov QWORD PTR[8+rdx],r13
+ sbb r8,r8
+ mov QWORD PTR[16+rdx],r14
+ mov QWORD PTR[24+rdx],r15
+ lea rdx,QWORD PTR[32+rdx]
+
+ inc rcx
+ jnz $L$sqrx4x_sub
+
+ neg r9
+
+ DB 0F3h,0C3h ;repret
+
+
+PUBLIC bn_get_bits5
+
+ALIGN 16
+bn_get_bits5 PROC PUBLIC
+
+ lea r10,QWORD PTR[rcx]
+ lea r11,QWORD PTR[1+rcx]
+ mov ecx,edx
+ shr edx,4
+ and ecx,15
+ lea eax,DWORD PTR[((-8))+rcx]
+ cmp ecx,11
+ cmova r10,r11
+ cmova ecx,eax
+ movzx eax,WORD PTR[rdx*2+r10]
+ shr eax,cl
+ and eax,31
+ DB 0F3h,0C3h ;repret
+
+bn_get_bits5 ENDP
+
+PUBLIC bn_scatter5
+
+ALIGN 16
+bn_scatter5 PROC PUBLIC
+
+ cmp edx,0
+ jz $L$scatter_epilogue
+ lea r8,QWORD PTR[r9*8+r8]
+$L$scatter::
+ mov rax,QWORD PTR[rcx]
+ lea rcx,QWORD PTR[8+rcx]
+ mov QWORD PTR[r8],rax
+ lea r8,QWORD PTR[256+r8]
+ sub edx,1
+ jnz $L$scatter
+$L$scatter_epilogue::
+ DB 0F3h,0C3h ;repret
+
+bn_scatter5 ENDP
+
+PUBLIC bn_gather5
+
+ALIGN 32
+bn_gather5 PROC PUBLIC
+$L$SEH_begin_bn_gather5::
+
+
+DB 04ch,08dh,014h,024h
+DB 048h,081h,0ech,008h,001h,000h,000h
+ lea rax,QWORD PTR[$L$inc]
+ and rsp,-16
+
+ movd xmm5,r9d
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa xmm1,XMMWORD PTR[16+rax]
+ lea r11,QWORD PTR[128+r8]
+ lea rax,QWORD PTR[128+rsp]
+
+ pshufd xmm5,xmm5,0
+ movdqa xmm4,xmm1
+ movdqa xmm2,xmm1
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa xmm3,xmm4
+
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[(-128)+rax],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[(-112)+rax],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[(-96)+rax],xmm2
+ movdqa xmm2,xmm4
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[(-80)+rax],xmm3
+ movdqa xmm3,xmm4
+
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[(-64)+rax],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[(-48)+rax],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[(-32)+rax],xmm2
+ movdqa xmm2,xmm4
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[(-16)+rax],xmm3
+ movdqa xmm3,xmm4
+
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[rax],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[16+rax],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[32+rax],xmm2
+ movdqa xmm2,xmm4
+ paddd xmm1,xmm0
+ pcmpeqd xmm0,xmm5
+ movdqa XMMWORD PTR[48+rax],xmm3
+ movdqa xmm3,xmm4
+
+ paddd xmm2,xmm1
+ pcmpeqd xmm1,xmm5
+ movdqa XMMWORD PTR[64+rax],xmm0
+ movdqa xmm0,xmm4
+
+ paddd xmm3,xmm2
+ pcmpeqd xmm2,xmm5
+ movdqa XMMWORD PTR[80+rax],xmm1
+ movdqa xmm1,xmm4
+
+ paddd xmm0,xmm3
+ pcmpeqd xmm3,xmm5
+ movdqa XMMWORD PTR[96+rax],xmm2
+ movdqa xmm2,xmm4
+ movdqa XMMWORD PTR[112+rax],xmm3
+ jmp $L$gather
+
+ALIGN 32
+$L$gather::
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ movdqa xmm0,XMMWORD PTR[((-128))+r11]
+ movdqa xmm1,XMMWORD PTR[((-112))+r11]
+ movdqa xmm2,XMMWORD PTR[((-96))+r11]
+ pand xmm0,XMMWORD PTR[((-128))+rax]
+ movdqa xmm3,XMMWORD PTR[((-80))+r11]
+ pand xmm1,XMMWORD PTR[((-112))+rax]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[((-96))+rax]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[((-80))+rax]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[((-64))+r11]
+ movdqa xmm1,XMMWORD PTR[((-48))+r11]
+ movdqa xmm2,XMMWORD PTR[((-32))+r11]
+ pand xmm0,XMMWORD PTR[((-64))+rax]
+ movdqa xmm3,XMMWORD PTR[((-16))+r11]
+ pand xmm1,XMMWORD PTR[((-48))+rax]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[((-32))+rax]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[((-16))+rax]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[r11]
+ movdqa xmm1,XMMWORD PTR[16+r11]
+ movdqa xmm2,XMMWORD PTR[32+r11]
+ pand xmm0,XMMWORD PTR[rax]
+ movdqa xmm3,XMMWORD PTR[48+r11]
+ pand xmm1,XMMWORD PTR[16+rax]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[32+rax]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[48+rax]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ movdqa xmm0,XMMWORD PTR[64+r11]
+ movdqa xmm1,XMMWORD PTR[80+r11]
+ movdqa xmm2,XMMWORD PTR[96+r11]
+ pand xmm0,XMMWORD PTR[64+rax]
+ movdqa xmm3,XMMWORD PTR[112+r11]
+ pand xmm1,XMMWORD PTR[80+rax]
+ por xmm4,xmm0
+ pand xmm2,XMMWORD PTR[96+rax]
+ por xmm5,xmm1
+ pand xmm3,XMMWORD PTR[112+rax]
+ por xmm4,xmm2
+ por xmm5,xmm3
+ por xmm4,xmm5
+ lea r11,QWORD PTR[256+r11]
+ pshufd xmm0,xmm4,04eh
+ por xmm0,xmm4
+ movq QWORD PTR[rcx],xmm0
+ lea rcx,QWORD PTR[8+rcx]
+ sub edx,1
+ jnz $L$gather
+
+ lea rsp,QWORD PTR[r10]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_bn_gather5::
+
+bn_gather5 ENDP
+ALIGN 64
+$L$inc::
+ DD 0,0,1,1
+ DD 2,2,2,2
+DB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
+DB 112,108,105,99,97,116,105,111,110,32,119,105,116,104,32,115
+DB 99,97,116,116,101,114,47,103,97,116,104,101,114,32,102,111
+DB 114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79
+DB 71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111
+DB 112,101,110,115,115,108,46,111,114,103,62,0
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+mul_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_pop_regs
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[8+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ lea r10,QWORD PTR[$L$mul_epilogue]
+ cmp rbx,r10
+ ja $L$body_40
+
+ mov r10,QWORD PTR[192+r8]
+ mov rax,QWORD PTR[8+r10*8+rax]
+
+ jmp $L$common_pop_regs
+
+$L$body_40::
+ mov rax,QWORD PTR[40+rax]
+$L$common_pop_regs::
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+mul_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_bn_mul_mont_gather5
+ DD imagerel $L$SEH_end_bn_mul_mont_gather5
+ DD imagerel $L$SEH_info_bn_mul_mont_gather5
+
+ DD imagerel $L$SEH_begin_bn_mul4x_mont_gather5
+ DD imagerel $L$SEH_end_bn_mul4x_mont_gather5
+ DD imagerel $L$SEH_info_bn_mul4x_mont_gather5
+
+ DD imagerel $L$SEH_begin_bn_power5
+ DD imagerel $L$SEH_end_bn_power5
+ DD imagerel $L$SEH_info_bn_power5
+
+ DD imagerel $L$SEH_begin_bn_from_mont8x
+ DD imagerel $L$SEH_end_bn_from_mont8x
+ DD imagerel $L$SEH_info_bn_from_mont8x
+ DD imagerel $L$SEH_begin_bn_mulx4x_mont_gather5
+ DD imagerel $L$SEH_end_bn_mulx4x_mont_gather5
+ DD imagerel $L$SEH_info_bn_mulx4x_mont_gather5
+
+ DD imagerel $L$SEH_begin_bn_powerx5
+ DD imagerel $L$SEH_end_bn_powerx5
+ DD imagerel $L$SEH_info_bn_powerx5
+ DD imagerel $L$SEH_begin_bn_gather5
+ DD imagerel $L$SEH_end_bn_gather5
+ DD imagerel $L$SEH_info_bn_gather5
+
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_bn_mul_mont_gather5::
+DB 9,0,0,0
+ DD imagerel mul_handler
+ DD imagerel $L$mul_body,imagerel $L$mul_body,imagerel $L$mul_epilogue
+ALIGN 8
+$L$SEH_info_bn_mul4x_mont_gather5::
+DB 9,0,0,0
+ DD imagerel mul_handler
+ DD imagerel $L$mul4x_prologue,imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue
+ALIGN 8
+$L$SEH_info_bn_power5::
+DB 9,0,0,0
+ DD imagerel mul_handler
+ DD imagerel $L$power5_prologue,imagerel $L$power5_body,imagerel $L$power5_epilogue
+ALIGN 8
+$L$SEH_info_bn_from_mont8x::
+DB 9,0,0,0
+ DD imagerel mul_handler
+ DD imagerel $L$from_prologue,imagerel $L$from_body,imagerel $L$from_epilogue
+ALIGN 8
+$L$SEH_info_bn_mulx4x_mont_gather5::
+DB 9,0,0,0
+ DD imagerel mul_handler
+ DD imagerel $L$mulx4x_prologue,imagerel $L$mulx4x_body,imagerel $L$mulx4x_epilogue
+ALIGN 8
+$L$SEH_info_bn_powerx5::
+DB 9,0,0,0
+ DD imagerel mul_handler
+ DD imagerel $L$powerx5_prologue,imagerel $L$powerx5_body,imagerel $L$powerx5_epilogue
+ALIGN 8
+$L$SEH_info_bn_gather5::
+DB 001h,00bh,003h,00ah
+DB 00bh,001h,021h,000h
+DB 004h,0a3h,000h,000h
+ALIGN 8
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86.masm b/contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86.masm
index fbe0d82a15..47dc26439c 100644
--- a/contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86.masm
@@ -1,2369 +1,2369 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-ALIGN 16
-_Camellia_EncryptBlock_Rounds PROC PUBLIC
-$L_Camellia_EncryptBlock_Rounds_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov eax,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- mov edi,DWORD PTR 28[esp]
- mov ebx,esp
- sub esp,28
- and esp,-64
- lea ecx,DWORD PTR [edi-127]
- sub ecx,esp
- neg ecx
- and ecx,960
- sub esp,ecx
- add esp,4
- shl eax,6
- lea eax,DWORD PTR [eax*1+edi]
- mov DWORD PTR 20[esp],ebx
- mov DWORD PTR 16[esp],eax
- call $L000pic_point
-$L000pic_point:
- pop ebp
- lea ebp,DWORD PTR ($LCamellia_SBOX-$L000pic_point)[ebp]
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- bswap eax
- mov edx,DWORD PTR 12[esi]
- bswap ebx
- bswap ecx
- bswap edx
- call __x86_Camellia_encrypt
- mov esp,DWORD PTR 20[esp]
- bswap eax
- mov esi,DWORD PTR 32[esp]
- bswap ebx
- bswap ecx
- bswap edx
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],ecx
- mov DWORD PTR 12[esi],edx
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_Camellia_EncryptBlock_Rounds ENDP
-ALIGN 16
-_Camellia_EncryptBlock PROC PUBLIC
-$L_Camellia_EncryptBlock_begin::
- mov eax,128
- sub eax,DWORD PTR 4[esp]
- mov eax,3
- adc eax,0
- mov DWORD PTR 4[esp],eax
- jmp $L_Camellia_EncryptBlock_Rounds_begin
-_Camellia_EncryptBlock ENDP
-ALIGN 16
-_Camellia_encrypt PROC PUBLIC
-$L_Camellia_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 28[esp]
- mov ebx,esp
- sub esp,28
- and esp,-64
- mov eax,DWORD PTR 272[edi]
- lea ecx,DWORD PTR [edi-127]
- sub ecx,esp
- neg ecx
- and ecx,960
- sub esp,ecx
- add esp,4
- shl eax,6
- lea eax,DWORD PTR [eax*1+edi]
- mov DWORD PTR 20[esp],ebx
- mov DWORD PTR 16[esp],eax
- call $L001pic_point
-$L001pic_point:
- pop ebp
- lea ebp,DWORD PTR ($LCamellia_SBOX-$L001pic_point)[ebp]
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- bswap eax
- mov edx,DWORD PTR 12[esi]
- bswap ebx
- bswap ecx
- bswap edx
- call __x86_Camellia_encrypt
- mov esp,DWORD PTR 20[esp]
- bswap eax
- mov esi,DWORD PTR 24[esp]
- bswap ebx
- bswap ecx
- bswap edx
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],ecx
- mov DWORD PTR 12[esi],edx
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_Camellia_encrypt ENDP
-ALIGN 16
-__x86_Camellia_encrypt PROC PRIVATE
- xor eax,DWORD PTR [edi]
- xor ebx,DWORD PTR 4[edi]
- xor ecx,DWORD PTR 8[edi]
- xor edx,DWORD PTR 12[edi]
- mov esi,DWORD PTR 16[edi]
- mov DWORD PTR 4[esp],eax
- mov DWORD PTR 8[esp],ebx
- mov DWORD PTR 12[esp],ecx
- mov DWORD PTR 16[esp],edx
-ALIGN 16
-$L002loop:
- xor eax,esi
- xor ebx,DWORD PTR 20[edi]
- movzx esi,ah
- mov edx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,al
- xor edx,DWORD PTR 4[esi*8+ebp]
- shr eax,16
- movzx esi,bl
- mov ecx,DWORD PTR [esi*8+ebp]
- movzx esi,ah
- xor edx,DWORD PTR [esi*8+ebp]
- movzx esi,bh
- xor ecx,DWORD PTR 4[esi*8+ebp]
- shr ebx,16
- movzx eax,al
- xor edx,DWORD PTR 2048[eax*8+ebp]
- movzx esi,bh
- mov eax,DWORD PTR 16[esp]
- xor ecx,edx
- ror edx,8
- xor ecx,DWORD PTR 2048[esi*8+ebp]
- movzx esi,bl
- mov ebx,DWORD PTR 12[esp]
- xor edx,eax
- xor ecx,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 24[edi]
- xor edx,ecx
- mov DWORD PTR 16[esp],edx
- xor ecx,ebx
- mov DWORD PTR 12[esp],ecx
- xor ecx,esi
- xor edx,DWORD PTR 28[edi]
- movzx esi,ch
- mov ebx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,cl
- xor ebx,DWORD PTR 4[esi*8+ebp]
- shr ecx,16
- movzx esi,dl
- mov eax,DWORD PTR [esi*8+ebp]
- movzx esi,ch
- xor ebx,DWORD PTR [esi*8+ebp]
- movzx esi,dh
- xor eax,DWORD PTR 4[esi*8+ebp]
- shr edx,16
- movzx ecx,cl
- xor ebx,DWORD PTR 2048[ecx*8+ebp]
- movzx esi,dh
- mov ecx,DWORD PTR 8[esp]
- xor eax,ebx
- ror ebx,8
- xor eax,DWORD PTR 2048[esi*8+ebp]
- movzx esi,dl
- mov edx,DWORD PTR 4[esp]
- xor ebx,ecx
- xor eax,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 32[edi]
- xor ebx,eax
- mov DWORD PTR 8[esp],ebx
- xor eax,edx
- mov DWORD PTR 4[esp],eax
- xor eax,esi
- xor ebx,DWORD PTR 36[edi]
- movzx esi,ah
- mov edx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,al
- xor edx,DWORD PTR 4[esi*8+ebp]
- shr eax,16
- movzx esi,bl
- mov ecx,DWORD PTR [esi*8+ebp]
- movzx esi,ah
- xor edx,DWORD PTR [esi*8+ebp]
- movzx esi,bh
- xor ecx,DWORD PTR 4[esi*8+ebp]
- shr ebx,16
- movzx eax,al
- xor edx,DWORD PTR 2048[eax*8+ebp]
- movzx esi,bh
- mov eax,DWORD PTR 16[esp]
- xor ecx,edx
- ror edx,8
- xor ecx,DWORD PTR 2048[esi*8+ebp]
- movzx esi,bl
- mov ebx,DWORD PTR 12[esp]
- xor edx,eax
- xor ecx,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 40[edi]
- xor edx,ecx
- mov DWORD PTR 16[esp],edx
- xor ecx,ebx
- mov DWORD PTR 12[esp],ecx
- xor ecx,esi
- xor edx,DWORD PTR 44[edi]
- movzx esi,ch
- mov ebx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,cl
- xor ebx,DWORD PTR 4[esi*8+ebp]
- shr ecx,16
- movzx esi,dl
- mov eax,DWORD PTR [esi*8+ebp]
- movzx esi,ch
- xor ebx,DWORD PTR [esi*8+ebp]
- movzx esi,dh
- xor eax,DWORD PTR 4[esi*8+ebp]
- shr edx,16
- movzx ecx,cl
- xor ebx,DWORD PTR 2048[ecx*8+ebp]
- movzx esi,dh
- mov ecx,DWORD PTR 8[esp]
- xor eax,ebx
- ror ebx,8
- xor eax,DWORD PTR 2048[esi*8+ebp]
- movzx esi,dl
- mov edx,DWORD PTR 4[esp]
- xor ebx,ecx
- xor eax,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 48[edi]
- xor ebx,eax
- mov DWORD PTR 8[esp],ebx
- xor eax,edx
- mov DWORD PTR 4[esp],eax
- xor eax,esi
- xor ebx,DWORD PTR 52[edi]
- movzx esi,ah
- mov edx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,al
- xor edx,DWORD PTR 4[esi*8+ebp]
- shr eax,16
- movzx esi,bl
- mov ecx,DWORD PTR [esi*8+ebp]
- movzx esi,ah
- xor edx,DWORD PTR [esi*8+ebp]
- movzx esi,bh
- xor ecx,DWORD PTR 4[esi*8+ebp]
- shr ebx,16
- movzx eax,al
- xor edx,DWORD PTR 2048[eax*8+ebp]
- movzx esi,bh
- mov eax,DWORD PTR 16[esp]
- xor ecx,edx
- ror edx,8
- xor ecx,DWORD PTR 2048[esi*8+ebp]
- movzx esi,bl
- mov ebx,DWORD PTR 12[esp]
- xor edx,eax
- xor ecx,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 56[edi]
- xor edx,ecx
- mov DWORD PTR 16[esp],edx
- xor ecx,ebx
- mov DWORD PTR 12[esp],ecx
- xor ecx,esi
- xor edx,DWORD PTR 60[edi]
- movzx esi,ch
- mov ebx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,cl
- xor ebx,DWORD PTR 4[esi*8+ebp]
- shr ecx,16
- movzx esi,dl
- mov eax,DWORD PTR [esi*8+ebp]
- movzx esi,ch
- xor ebx,DWORD PTR [esi*8+ebp]
- movzx esi,dh
- xor eax,DWORD PTR 4[esi*8+ebp]
- shr edx,16
- movzx ecx,cl
- xor ebx,DWORD PTR 2048[ecx*8+ebp]
- movzx esi,dh
- mov ecx,DWORD PTR 8[esp]
- xor eax,ebx
- ror ebx,8
- xor eax,DWORD PTR 2048[esi*8+ebp]
- movzx esi,dl
- mov edx,DWORD PTR 4[esp]
- xor ebx,ecx
- xor eax,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 64[edi]
- xor ebx,eax
- mov DWORD PTR 8[esp],ebx
- xor eax,edx
- mov DWORD PTR 4[esp],eax
- add edi,64
- cmp edi,DWORD PTR 20[esp]
- je $L003done
- and esi,eax
- mov edx,DWORD PTR 16[esp]
- rol esi,1
- mov ecx,edx
- xor ebx,esi
- or ecx,DWORD PTR 12[edi]
- mov DWORD PTR 8[esp],ebx
- xor ecx,DWORD PTR 12[esp]
- mov esi,DWORD PTR 4[edi]
- mov DWORD PTR 12[esp],ecx
- or esi,ebx
- and ecx,DWORD PTR 8[edi]
- xor eax,esi
- rol ecx,1
- mov DWORD PTR 4[esp],eax
- xor edx,ecx
- mov esi,DWORD PTR 16[edi]
- mov DWORD PTR 16[esp],edx
- jmp $L002loop
-ALIGN 8
-$L003done:
- mov ecx,eax
- mov edx,ebx
- mov eax,DWORD PTR 12[esp]
- mov ebx,DWORD PTR 16[esp]
- xor eax,esi
- xor ebx,DWORD PTR 4[edi]
- xor ecx,DWORD PTR 8[edi]
- xor edx,DWORD PTR 12[edi]
- ret
-__x86_Camellia_encrypt ENDP
-ALIGN 16
-_Camellia_DecryptBlock_Rounds PROC PUBLIC
-$L_Camellia_DecryptBlock_Rounds_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov eax,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- mov edi,DWORD PTR 28[esp]
- mov ebx,esp
- sub esp,28
- and esp,-64
- lea ecx,DWORD PTR [edi-127]
- sub ecx,esp
- neg ecx
- and ecx,960
- sub esp,ecx
- add esp,4
- shl eax,6
- mov DWORD PTR 16[esp],edi
- lea edi,DWORD PTR [eax*1+edi]
- mov DWORD PTR 20[esp],ebx
- call $L004pic_point
-$L004pic_point:
- pop ebp
- lea ebp,DWORD PTR ($LCamellia_SBOX-$L004pic_point)[ebp]
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- bswap eax
- mov edx,DWORD PTR 12[esi]
- bswap ebx
- bswap ecx
- bswap edx
- call __x86_Camellia_decrypt
- mov esp,DWORD PTR 20[esp]
- bswap eax
- mov esi,DWORD PTR 32[esp]
- bswap ebx
- bswap ecx
- bswap edx
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],ecx
- mov DWORD PTR 12[esi],edx
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_Camellia_DecryptBlock_Rounds ENDP
-ALIGN 16
-_Camellia_DecryptBlock PROC PUBLIC
-$L_Camellia_DecryptBlock_begin::
- mov eax,128
- sub eax,DWORD PTR 4[esp]
- mov eax,3
- adc eax,0
- mov DWORD PTR 4[esp],eax
- jmp $L_Camellia_DecryptBlock_Rounds_begin
-_Camellia_DecryptBlock ENDP
-ALIGN 16
-_Camellia_decrypt PROC PUBLIC
-$L_Camellia_decrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 28[esp]
- mov ebx,esp
- sub esp,28
- and esp,-64
- mov eax,DWORD PTR 272[edi]
- lea ecx,DWORD PTR [edi-127]
- sub ecx,esp
- neg ecx
- and ecx,960
- sub esp,ecx
- add esp,4
- shl eax,6
- mov DWORD PTR 16[esp],edi
- lea edi,DWORD PTR [eax*1+edi]
- mov DWORD PTR 20[esp],ebx
- call $L005pic_point
-$L005pic_point:
- pop ebp
- lea ebp,DWORD PTR ($LCamellia_SBOX-$L005pic_point)[ebp]
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- bswap eax
- mov edx,DWORD PTR 12[esi]
- bswap ebx
- bswap ecx
- bswap edx
- call __x86_Camellia_decrypt
- mov esp,DWORD PTR 20[esp]
- bswap eax
- mov esi,DWORD PTR 24[esp]
- bswap ebx
- bswap ecx
- bswap edx
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],ecx
- mov DWORD PTR 12[esi],edx
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_Camellia_decrypt ENDP
-ALIGN 16
-__x86_Camellia_decrypt PROC PRIVATE
- xor eax,DWORD PTR [edi]
- xor ebx,DWORD PTR 4[edi]
- xor ecx,DWORD PTR 8[edi]
- xor edx,DWORD PTR 12[edi]
- mov esi,DWORD PTR [edi-8]
- mov DWORD PTR 4[esp],eax
- mov DWORD PTR 8[esp],ebx
- mov DWORD PTR 12[esp],ecx
- mov DWORD PTR 16[esp],edx
-ALIGN 16
-$L006loop:
- xor eax,esi
- xor ebx,DWORD PTR [edi-4]
- movzx esi,ah
- mov edx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,al
- xor edx,DWORD PTR 4[esi*8+ebp]
- shr eax,16
- movzx esi,bl
- mov ecx,DWORD PTR [esi*8+ebp]
- movzx esi,ah
- xor edx,DWORD PTR [esi*8+ebp]
- movzx esi,bh
- xor ecx,DWORD PTR 4[esi*8+ebp]
- shr ebx,16
- movzx eax,al
- xor edx,DWORD PTR 2048[eax*8+ebp]
- movzx esi,bh
- mov eax,DWORD PTR 16[esp]
- xor ecx,edx
- ror edx,8
- xor ecx,DWORD PTR 2048[esi*8+ebp]
- movzx esi,bl
- mov ebx,DWORD PTR 12[esp]
- xor edx,eax
- xor ecx,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR [edi-16]
- xor edx,ecx
- mov DWORD PTR 16[esp],edx
- xor ecx,ebx
- mov DWORD PTR 12[esp],ecx
- xor ecx,esi
- xor edx,DWORD PTR [edi-12]
- movzx esi,ch
- mov ebx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,cl
- xor ebx,DWORD PTR 4[esi*8+ebp]
- shr ecx,16
- movzx esi,dl
- mov eax,DWORD PTR [esi*8+ebp]
- movzx esi,ch
- xor ebx,DWORD PTR [esi*8+ebp]
- movzx esi,dh
- xor eax,DWORD PTR 4[esi*8+ebp]
- shr edx,16
- movzx ecx,cl
- xor ebx,DWORD PTR 2048[ecx*8+ebp]
- movzx esi,dh
- mov ecx,DWORD PTR 8[esp]
- xor eax,ebx
- ror ebx,8
- xor eax,DWORD PTR 2048[esi*8+ebp]
- movzx esi,dl
- mov edx,DWORD PTR 4[esp]
- xor ebx,ecx
- xor eax,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR [edi-24]
- xor ebx,eax
- mov DWORD PTR 8[esp],ebx
- xor eax,edx
- mov DWORD PTR 4[esp],eax
- xor eax,esi
- xor ebx,DWORD PTR [edi-20]
- movzx esi,ah
- mov edx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,al
- xor edx,DWORD PTR 4[esi*8+ebp]
- shr eax,16
- movzx esi,bl
- mov ecx,DWORD PTR [esi*8+ebp]
- movzx esi,ah
- xor edx,DWORD PTR [esi*8+ebp]
- movzx esi,bh
- xor ecx,DWORD PTR 4[esi*8+ebp]
- shr ebx,16
- movzx eax,al
- xor edx,DWORD PTR 2048[eax*8+ebp]
- movzx esi,bh
- mov eax,DWORD PTR 16[esp]
- xor ecx,edx
- ror edx,8
- xor ecx,DWORD PTR 2048[esi*8+ebp]
- movzx esi,bl
- mov ebx,DWORD PTR 12[esp]
- xor edx,eax
- xor ecx,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR [edi-32]
- xor edx,ecx
- mov DWORD PTR 16[esp],edx
- xor ecx,ebx
- mov DWORD PTR 12[esp],ecx
- xor ecx,esi
- xor edx,DWORD PTR [edi-28]
- movzx esi,ch
- mov ebx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,cl
- xor ebx,DWORD PTR 4[esi*8+ebp]
- shr ecx,16
- movzx esi,dl
- mov eax,DWORD PTR [esi*8+ebp]
- movzx esi,ch
- xor ebx,DWORD PTR [esi*8+ebp]
- movzx esi,dh
- xor eax,DWORD PTR 4[esi*8+ebp]
- shr edx,16
- movzx ecx,cl
- xor ebx,DWORD PTR 2048[ecx*8+ebp]
- movzx esi,dh
- mov ecx,DWORD PTR 8[esp]
- xor eax,ebx
- ror ebx,8
- xor eax,DWORD PTR 2048[esi*8+ebp]
- movzx esi,dl
- mov edx,DWORD PTR 4[esp]
- xor ebx,ecx
- xor eax,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR [edi-40]
- xor ebx,eax
- mov DWORD PTR 8[esp],ebx
- xor eax,edx
- mov DWORD PTR 4[esp],eax
- xor eax,esi
- xor ebx,DWORD PTR [edi-36]
- movzx esi,ah
- mov edx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,al
- xor edx,DWORD PTR 4[esi*8+ebp]
- shr eax,16
- movzx esi,bl
- mov ecx,DWORD PTR [esi*8+ebp]
- movzx esi,ah
- xor edx,DWORD PTR [esi*8+ebp]
- movzx esi,bh
- xor ecx,DWORD PTR 4[esi*8+ebp]
- shr ebx,16
- movzx eax,al
- xor edx,DWORD PTR 2048[eax*8+ebp]
- movzx esi,bh
- mov eax,DWORD PTR 16[esp]
- xor ecx,edx
- ror edx,8
- xor ecx,DWORD PTR 2048[esi*8+ebp]
- movzx esi,bl
- mov ebx,DWORD PTR 12[esp]
- xor edx,eax
- xor ecx,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR [edi-48]
- xor edx,ecx
- mov DWORD PTR 16[esp],edx
- xor ecx,ebx
- mov DWORD PTR 12[esp],ecx
- xor ecx,esi
- xor edx,DWORD PTR [edi-44]
- movzx esi,ch
- mov ebx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,cl
- xor ebx,DWORD PTR 4[esi*8+ebp]
- shr ecx,16
- movzx esi,dl
- mov eax,DWORD PTR [esi*8+ebp]
- movzx esi,ch
- xor ebx,DWORD PTR [esi*8+ebp]
- movzx esi,dh
- xor eax,DWORD PTR 4[esi*8+ebp]
- shr edx,16
- movzx ecx,cl
- xor ebx,DWORD PTR 2048[ecx*8+ebp]
- movzx esi,dh
- mov ecx,DWORD PTR 8[esp]
- xor eax,ebx
- ror ebx,8
- xor eax,DWORD PTR 2048[esi*8+ebp]
- movzx esi,dl
- mov edx,DWORD PTR 4[esp]
- xor ebx,ecx
- xor eax,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR [edi-56]
- xor ebx,eax
- mov DWORD PTR 8[esp],ebx
- xor eax,edx
- mov DWORD PTR 4[esp],eax
- sub edi,64
- cmp edi,DWORD PTR 20[esp]
- je $L007done
- and esi,eax
- mov edx,DWORD PTR 16[esp]
- rol esi,1
- mov ecx,edx
- xor ebx,esi
- or ecx,DWORD PTR 4[edi]
- mov DWORD PTR 8[esp],ebx
- xor ecx,DWORD PTR 12[esp]
- mov esi,DWORD PTR 12[edi]
- mov DWORD PTR 12[esp],ecx
- or esi,ebx
- and ecx,DWORD PTR [edi]
- xor eax,esi
- rol ecx,1
- mov DWORD PTR 4[esp],eax
- xor edx,ecx
- mov esi,DWORD PTR [edi-8]
- mov DWORD PTR 16[esp],edx
- jmp $L006loop
-ALIGN 8
-$L007done:
- mov ecx,eax
- mov edx,ebx
- mov eax,DWORD PTR 12[esp]
- mov ebx,DWORD PTR 16[esp]
- xor ecx,esi
- xor edx,DWORD PTR 12[edi]
- xor eax,DWORD PTR [edi]
- xor ebx,DWORD PTR 4[edi]
- ret
-__x86_Camellia_decrypt ENDP
-ALIGN 16
-_Camellia_Ekeygen PROC PUBLIC
-$L_Camellia_Ekeygen_begin::
- push ebp
- push ebx
- push esi
- push edi
- sub esp,16
- mov ebp,DWORD PTR 36[esp]
- mov esi,DWORD PTR 40[esp]
- mov edi,DWORD PTR 44[esp]
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov edx,DWORD PTR 12[esi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- mov DWORD PTR [edi],eax
- mov DWORD PTR 4[edi],ebx
- mov DWORD PTR 8[edi],ecx
- mov DWORD PTR 12[edi],edx
- cmp ebp,128
- je $L0081st128
- mov eax,DWORD PTR 16[esi]
- mov ebx,DWORD PTR 20[esi]
- cmp ebp,192
- je $L0091st192
- mov ecx,DWORD PTR 24[esi]
- mov edx,DWORD PTR 28[esi]
- jmp $L0101st256
-ALIGN 4
-$L0091st192:
- mov ecx,eax
- mov edx,ebx
- not ecx
- not edx
-ALIGN 4
-$L0101st256:
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- mov DWORD PTR 32[edi],eax
- mov DWORD PTR 36[edi],ebx
- mov DWORD PTR 40[edi],ecx
- mov DWORD PTR 44[edi],edx
- xor eax,DWORD PTR [edi]
- xor ebx,DWORD PTR 4[edi]
- xor ecx,DWORD PTR 8[edi]
- xor edx,DWORD PTR 12[edi]
-ALIGN 4
-$L0081st128:
- call $L011pic_point
-$L011pic_point:
- pop ebp
- lea ebp,DWORD PTR ($LCamellia_SBOX-$L011pic_point)[ebp]
- lea edi,DWORD PTR ($LCamellia_SIGMA-$LCamellia_SBOX)[ebp]
- mov esi,DWORD PTR [edi]
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],ebx
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 12[esp],edx
- xor eax,esi
- xor ebx,DWORD PTR 4[edi]
- movzx esi,ah
- mov edx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,al
- xor edx,DWORD PTR 4[esi*8+ebp]
- shr eax,16
- movzx esi,bl
- mov ecx,DWORD PTR [esi*8+ebp]
- movzx esi,ah
- xor edx,DWORD PTR [esi*8+ebp]
- movzx esi,bh
- xor ecx,DWORD PTR 4[esi*8+ebp]
- shr ebx,16
- movzx eax,al
- xor edx,DWORD PTR 2048[eax*8+ebp]
- movzx esi,bh
- mov eax,DWORD PTR 12[esp]
- xor ecx,edx
- ror edx,8
- xor ecx,DWORD PTR 2048[esi*8+ebp]
- movzx esi,bl
- mov ebx,DWORD PTR 8[esp]
- xor edx,eax
- xor ecx,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 8[edi]
- xor edx,ecx
- mov DWORD PTR 12[esp],edx
- xor ecx,ebx
- mov DWORD PTR 8[esp],ecx
- xor ecx,esi
- xor edx,DWORD PTR 12[edi]
- movzx esi,ch
- mov ebx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,cl
- xor ebx,DWORD PTR 4[esi*8+ebp]
- shr ecx,16
- movzx esi,dl
- mov eax,DWORD PTR [esi*8+ebp]
- movzx esi,ch
- xor ebx,DWORD PTR [esi*8+ebp]
- movzx esi,dh
- xor eax,DWORD PTR 4[esi*8+ebp]
- shr edx,16
- movzx ecx,cl
- xor ebx,DWORD PTR 2048[ecx*8+ebp]
- movzx esi,dh
- mov ecx,DWORD PTR 4[esp]
- xor eax,ebx
- ror ebx,8
- xor eax,DWORD PTR 2048[esi*8+ebp]
- movzx esi,dl
- mov edx,DWORD PTR [esp]
- xor ebx,ecx
- xor eax,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 16[edi]
- xor ebx,eax
- mov DWORD PTR 4[esp],ebx
- xor eax,edx
- mov DWORD PTR [esp],eax
- mov ecx,DWORD PTR 8[esp]
- mov edx,DWORD PTR 12[esp]
- mov esi,DWORD PTR 44[esp]
- xor eax,DWORD PTR [esi]
- xor ebx,DWORD PTR 4[esi]
- xor ecx,DWORD PTR 8[esi]
- xor edx,DWORD PTR 12[esi]
- mov esi,DWORD PTR 16[edi]
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],ebx
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 12[esp],edx
- xor eax,esi
- xor ebx,DWORD PTR 20[edi]
- movzx esi,ah
- mov edx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,al
- xor edx,DWORD PTR 4[esi*8+ebp]
- shr eax,16
- movzx esi,bl
- mov ecx,DWORD PTR [esi*8+ebp]
- movzx esi,ah
- xor edx,DWORD PTR [esi*8+ebp]
- movzx esi,bh
- xor ecx,DWORD PTR 4[esi*8+ebp]
- shr ebx,16
- movzx eax,al
- xor edx,DWORD PTR 2048[eax*8+ebp]
- movzx esi,bh
- mov eax,DWORD PTR 12[esp]
- xor ecx,edx
- ror edx,8
- xor ecx,DWORD PTR 2048[esi*8+ebp]
- movzx esi,bl
- mov ebx,DWORD PTR 8[esp]
- xor edx,eax
- xor ecx,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 24[edi]
- xor edx,ecx
- mov DWORD PTR 12[esp],edx
- xor ecx,ebx
- mov DWORD PTR 8[esp],ecx
- xor ecx,esi
- xor edx,DWORD PTR 28[edi]
- movzx esi,ch
- mov ebx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,cl
- xor ebx,DWORD PTR 4[esi*8+ebp]
- shr ecx,16
- movzx esi,dl
- mov eax,DWORD PTR [esi*8+ebp]
- movzx esi,ch
- xor ebx,DWORD PTR [esi*8+ebp]
- movzx esi,dh
- xor eax,DWORD PTR 4[esi*8+ebp]
- shr edx,16
- movzx ecx,cl
- xor ebx,DWORD PTR 2048[ecx*8+ebp]
- movzx esi,dh
- mov ecx,DWORD PTR 4[esp]
- xor eax,ebx
- ror ebx,8
- xor eax,DWORD PTR 2048[esi*8+ebp]
- movzx esi,dl
- mov edx,DWORD PTR [esp]
- xor ebx,ecx
- xor eax,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 32[edi]
- xor ebx,eax
- mov DWORD PTR 4[esp],ebx
- xor eax,edx
- mov DWORD PTR [esp],eax
- mov ecx,DWORD PTR 8[esp]
- mov edx,DWORD PTR 12[esp]
- mov esi,DWORD PTR 36[esp]
- cmp esi,128
- jne $L0122nd256
- mov edi,DWORD PTR 44[esp]
- lea edi,DWORD PTR 128[edi]
- mov DWORD PTR [edi-112],eax
- mov DWORD PTR [edi-108],ebx
- mov DWORD PTR [edi-104],ecx
- mov DWORD PTR [edi-100],edx
- mov ebp,eax
- shl eax,15
- mov esi,ebx
- shr esi,17
- shl ebx,15
- or eax,esi
- mov esi,ecx
- shl ecx,15
- mov DWORD PTR [edi-80],eax
- shr esi,17
- or ebx,esi
- shr ebp,17
- mov esi,edx
- shr esi,17
- mov DWORD PTR [edi-76],ebx
- shl edx,15
- or ecx,esi
- or edx,ebp
- mov DWORD PTR [edi-72],ecx
- mov DWORD PTR [edi-68],edx
- mov ebp,eax
- shl eax,15
- mov esi,ebx
- shr esi,17
- shl ebx,15
- or eax,esi
- mov esi,ecx
- shl ecx,15
- mov DWORD PTR [edi-64],eax
- shr esi,17
- or ebx,esi
- shr ebp,17
- mov esi,edx
- shr esi,17
- mov DWORD PTR [edi-60],ebx
- shl edx,15
- or ecx,esi
- or edx,ebp
- mov DWORD PTR [edi-56],ecx
- mov DWORD PTR [edi-52],edx
- mov ebp,eax
- shl eax,15
- mov esi,ebx
- shr esi,17
- shl ebx,15
- or eax,esi
- mov esi,ecx
- shl ecx,15
- mov DWORD PTR [edi-32],eax
- shr esi,17
- or ebx,esi
- shr ebp,17
- mov esi,edx
- shr esi,17
- mov DWORD PTR [edi-28],ebx
- shl edx,15
- or ecx,esi
- or edx,ebp
- mov ebp,eax
- shl eax,15
- mov esi,ebx
- shr esi,17
- shl ebx,15
- or eax,esi
- mov esi,ecx
- shl ecx,15
- mov DWORD PTR [edi-16],eax
- shr esi,17
- or ebx,esi
- shr ebp,17
- mov esi,edx
- shr esi,17
- mov DWORD PTR [edi-12],ebx
- shl edx,15
- or ecx,esi
- or edx,ebp
- mov DWORD PTR [edi-8],ecx
- mov DWORD PTR [edi-4],edx
- mov ebp,ebx
- shl ebx,2
- mov esi,ecx
- shr esi,30
- shl ecx,2
- or ebx,esi
- mov esi,edx
- shl edx,2
- mov DWORD PTR 32[edi],ebx
- shr esi,30
- or ecx,esi
- shr ebp,30
- mov esi,eax
- shr esi,30
- mov DWORD PTR 36[edi],ecx
- shl eax,2
- or edx,esi
- or eax,ebp
- mov DWORD PTR 40[edi],edx
- mov DWORD PTR 44[edi],eax
- mov ebp,ebx
- shl ebx,17
- mov esi,ecx
- shr esi,15
- shl ecx,17
- or ebx,esi
- mov esi,edx
- shl edx,17
- mov DWORD PTR 64[edi],ebx
- shr esi,15
- or ecx,esi
- shr ebp,15
- mov esi,eax
- shr esi,15
- mov DWORD PTR 68[edi],ecx
- shl eax,17
- or edx,esi
- or eax,ebp
- mov DWORD PTR 72[edi],edx
- mov DWORD PTR 76[edi],eax
- mov ebx,DWORD PTR [edi-128]
- mov ecx,DWORD PTR [edi-124]
- mov edx,DWORD PTR [edi-120]
- mov eax,DWORD PTR [edi-116]
- mov ebp,ebx
- shl ebx,15
- mov esi,ecx
- shr esi,17
- shl ecx,15
- or ebx,esi
- mov esi,edx
- shl edx,15
- mov DWORD PTR [edi-96],ebx
- shr esi,17
- or ecx,esi
- shr ebp,17
- mov esi,eax
- shr esi,17
- mov DWORD PTR [edi-92],ecx
- shl eax,15
- or edx,esi
- or eax,ebp
- mov DWORD PTR [edi-88],edx
- mov DWORD PTR [edi-84],eax
- mov ebp,ebx
- shl ebx,30
- mov esi,ecx
- shr esi,2
- shl ecx,30
- or ebx,esi
- mov esi,edx
- shl edx,30
- mov DWORD PTR [edi-48],ebx
- shr esi,2
- or ecx,esi
- shr ebp,2
- mov esi,eax
- shr esi,2
- mov DWORD PTR [edi-44],ecx
- shl eax,30
- or edx,esi
- or eax,ebp
- mov DWORD PTR [edi-40],edx
- mov DWORD PTR [edi-36],eax
- mov ebp,ebx
- shl ebx,15
- mov esi,ecx
- shr esi,17
- shl ecx,15
- or ebx,esi
- mov esi,edx
- shl edx,15
- shr esi,17
- or ecx,esi
- shr ebp,17
- mov esi,eax
- shr esi,17
- shl eax,15
- or edx,esi
- or eax,ebp
- mov DWORD PTR [edi-24],edx
- mov DWORD PTR [edi-20],eax
- mov ebp,ebx
- shl ebx,17
- mov esi,ecx
- shr esi,15
- shl ecx,17
- or ebx,esi
- mov esi,edx
- shl edx,17
- mov DWORD PTR [edi],ebx
- shr esi,15
- or ecx,esi
- shr ebp,15
- mov esi,eax
- shr esi,15
- mov DWORD PTR 4[edi],ecx
- shl eax,17
- or edx,esi
- or eax,ebp
- mov DWORD PTR 8[edi],edx
- mov DWORD PTR 12[edi],eax
- mov ebp,ebx
- shl ebx,17
- mov esi,ecx
- shr esi,15
- shl ecx,17
- or ebx,esi
- mov esi,edx
- shl edx,17
- mov DWORD PTR 16[edi],ebx
- shr esi,15
- or ecx,esi
- shr ebp,15
- mov esi,eax
- shr esi,15
- mov DWORD PTR 20[edi],ecx
- shl eax,17
- or edx,esi
- or eax,ebp
- mov DWORD PTR 24[edi],edx
- mov DWORD PTR 28[edi],eax
- mov ebp,ebx
- shl ebx,17
- mov esi,ecx
- shr esi,15
- shl ecx,17
- or ebx,esi
- mov esi,edx
- shl edx,17
- mov DWORD PTR 48[edi],ebx
- shr esi,15
- or ecx,esi
- shr ebp,15
- mov esi,eax
- shr esi,15
- mov DWORD PTR 52[edi],ecx
- shl eax,17
- or edx,esi
- or eax,ebp
- mov DWORD PTR 56[edi],edx
- mov DWORD PTR 60[edi],eax
- mov eax,3
- jmp $L013done
-ALIGN 16
-$L0122nd256:
- mov esi,DWORD PTR 44[esp]
- mov DWORD PTR 48[esi],eax
- mov DWORD PTR 52[esi],ebx
- mov DWORD PTR 56[esi],ecx
- mov DWORD PTR 60[esi],edx
- xor eax,DWORD PTR 32[esi]
- xor ebx,DWORD PTR 36[esi]
- xor ecx,DWORD PTR 40[esi]
- xor edx,DWORD PTR 44[esi]
- mov esi,DWORD PTR 32[edi]
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],ebx
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 12[esp],edx
- xor eax,esi
- xor ebx,DWORD PTR 36[edi]
- movzx esi,ah
- mov edx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,al
- xor edx,DWORD PTR 4[esi*8+ebp]
- shr eax,16
- movzx esi,bl
- mov ecx,DWORD PTR [esi*8+ebp]
- movzx esi,ah
- xor edx,DWORD PTR [esi*8+ebp]
- movzx esi,bh
- xor ecx,DWORD PTR 4[esi*8+ebp]
- shr ebx,16
- movzx eax,al
- xor edx,DWORD PTR 2048[eax*8+ebp]
- movzx esi,bh
- mov eax,DWORD PTR 12[esp]
- xor ecx,edx
- ror edx,8
- xor ecx,DWORD PTR 2048[esi*8+ebp]
- movzx esi,bl
- mov ebx,DWORD PTR 8[esp]
- xor edx,eax
- xor ecx,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 40[edi]
- xor edx,ecx
- mov DWORD PTR 12[esp],edx
- xor ecx,ebx
- mov DWORD PTR 8[esp],ecx
- xor ecx,esi
- xor edx,DWORD PTR 44[edi]
- movzx esi,ch
- mov ebx,DWORD PTR 2052[esi*8+ebp]
- movzx esi,cl
- xor ebx,DWORD PTR 4[esi*8+ebp]
- shr ecx,16
- movzx esi,dl
- mov eax,DWORD PTR [esi*8+ebp]
- movzx esi,ch
- xor ebx,DWORD PTR [esi*8+ebp]
- movzx esi,dh
- xor eax,DWORD PTR 4[esi*8+ebp]
- shr edx,16
- movzx ecx,cl
- xor ebx,DWORD PTR 2048[ecx*8+ebp]
- movzx esi,dh
- mov ecx,DWORD PTR 4[esp]
- xor eax,ebx
- ror ebx,8
- xor eax,DWORD PTR 2048[esi*8+ebp]
- movzx esi,dl
- mov edx,DWORD PTR [esp]
- xor ebx,ecx
- xor eax,DWORD PTR 2052[esi*8+ebp]
- mov esi,DWORD PTR 48[edi]
- xor ebx,eax
- mov DWORD PTR 4[esp],ebx
- xor eax,edx
- mov DWORD PTR [esp],eax
- mov ecx,DWORD PTR 8[esp]
- mov edx,DWORD PTR 12[esp]
- mov edi,DWORD PTR 44[esp]
- lea edi,DWORD PTR 128[edi]
- mov DWORD PTR [edi-112],eax
- mov DWORD PTR [edi-108],ebx
- mov DWORD PTR [edi-104],ecx
- mov DWORD PTR [edi-100],edx
- mov ebp,eax
- shl eax,30
- mov esi,ebx
- shr esi,2
- shl ebx,30
- or eax,esi
- mov esi,ecx
- shl ecx,30
- mov DWORD PTR [edi-48],eax
- shr esi,2
- or ebx,esi
- shr ebp,2
- mov esi,edx
- shr esi,2
- mov DWORD PTR [edi-44],ebx
- shl edx,30
- or ecx,esi
- or edx,ebp
- mov DWORD PTR [edi-40],ecx
- mov DWORD PTR [edi-36],edx
- mov ebp,eax
- shl eax,30
- mov esi,ebx
- shr esi,2
- shl ebx,30
- or eax,esi
- mov esi,ecx
- shl ecx,30
- mov DWORD PTR 32[edi],eax
- shr esi,2
- or ebx,esi
- shr ebp,2
- mov esi,edx
- shr esi,2
- mov DWORD PTR 36[edi],ebx
- shl edx,30
- or ecx,esi
- or edx,ebp
- mov DWORD PTR 40[edi],ecx
- mov DWORD PTR 44[edi],edx
- mov ebp,ebx
- shl ebx,19
- mov esi,ecx
- shr esi,13
- shl ecx,19
- or ebx,esi
- mov esi,edx
- shl edx,19
- mov DWORD PTR 128[edi],ebx
- shr esi,13
- or ecx,esi
- shr ebp,13
- mov esi,eax
- shr esi,13
- mov DWORD PTR 132[edi],ecx
- shl eax,19
- or edx,esi
- or eax,ebp
- mov DWORD PTR 136[edi],edx
- mov DWORD PTR 140[edi],eax
- mov ebx,DWORD PTR [edi-96]
- mov ecx,DWORD PTR [edi-92]
- mov edx,DWORD PTR [edi-88]
- mov eax,DWORD PTR [edi-84]
- mov ebp,ebx
- shl ebx,15
- mov esi,ecx
- shr esi,17
- shl ecx,15
- or ebx,esi
- mov esi,edx
- shl edx,15
- mov DWORD PTR [edi-96],ebx
- shr esi,17
- or ecx,esi
- shr ebp,17
- mov esi,eax
- shr esi,17
- mov DWORD PTR [edi-92],ecx
- shl eax,15
- or edx,esi
- or eax,ebp
- mov DWORD PTR [edi-88],edx
- mov DWORD PTR [edi-84],eax
- mov ebp,ebx
- shl ebx,15
- mov esi,ecx
- shr esi,17
- shl ecx,15
- or ebx,esi
- mov esi,edx
- shl edx,15
- mov DWORD PTR [edi-64],ebx
- shr esi,17
- or ecx,esi
- shr ebp,17
- mov esi,eax
- shr esi,17
- mov DWORD PTR [edi-60],ecx
- shl eax,15
- or edx,esi
- or eax,ebp
- mov DWORD PTR [edi-56],edx
- mov DWORD PTR [edi-52],eax
- mov ebp,ebx
- shl ebx,30
- mov esi,ecx
- shr esi,2
- shl ecx,30
- or ebx,esi
- mov esi,edx
- shl edx,30
- mov DWORD PTR 16[edi],ebx
- shr esi,2
- or ecx,esi
- shr ebp,2
- mov esi,eax
- shr esi,2
- mov DWORD PTR 20[edi],ecx
- shl eax,30
- or edx,esi
- or eax,ebp
- mov DWORD PTR 24[edi],edx
- mov DWORD PTR 28[edi],eax
- mov ebp,ecx
- shl ecx,2
- mov esi,edx
- shr esi,30
- shl edx,2
- or ecx,esi
- mov esi,eax
- shl eax,2
- mov DWORD PTR 80[edi],ecx
- shr esi,30
- or edx,esi
- shr ebp,30
- mov esi,ebx
- shr esi,30
- mov DWORD PTR 84[edi],edx
- shl ebx,2
- or eax,esi
- or ebx,ebp
- mov DWORD PTR 88[edi],eax
- mov DWORD PTR 92[edi],ebx
- mov ecx,DWORD PTR [edi-80]
- mov edx,DWORD PTR [edi-76]
- mov eax,DWORD PTR [edi-72]
- mov ebx,DWORD PTR [edi-68]
- mov ebp,ecx
- shl ecx,15
- mov esi,edx
- shr esi,17
- shl edx,15
- or ecx,esi
- mov esi,eax
- shl eax,15
- mov DWORD PTR [edi-80],ecx
- shr esi,17
- or edx,esi
- shr ebp,17
- mov esi,ebx
- shr esi,17
- mov DWORD PTR [edi-76],edx
- shl ebx,15
- or eax,esi
- or ebx,ebp
- mov DWORD PTR [edi-72],eax
- mov DWORD PTR [edi-68],ebx
- mov ebp,ecx
- shl ecx,30
- mov esi,edx
- shr esi,2
- shl edx,30
- or ecx,esi
- mov esi,eax
- shl eax,30
- mov DWORD PTR [edi-16],ecx
- shr esi,2
- or edx,esi
- shr ebp,2
- mov esi,ebx
- shr esi,2
- mov DWORD PTR [edi-12],edx
- shl ebx,30
- or eax,esi
- or ebx,ebp
- mov DWORD PTR [edi-8],eax
- mov DWORD PTR [edi-4],ebx
- mov DWORD PTR 64[edi],edx
- mov DWORD PTR 68[edi],eax
- mov DWORD PTR 72[edi],ebx
- mov DWORD PTR 76[edi],ecx
- mov ebp,edx
- shl edx,17
- mov esi,eax
- shr esi,15
- shl eax,17
- or edx,esi
- mov esi,ebx
- shl ebx,17
- mov DWORD PTR 96[edi],edx
- shr esi,15
- or eax,esi
- shr ebp,15
- mov esi,ecx
- shr esi,15
- mov DWORD PTR 100[edi],eax
- shl ecx,17
- or ebx,esi
- or ecx,ebp
- mov DWORD PTR 104[edi],ebx
- mov DWORD PTR 108[edi],ecx
- mov edx,DWORD PTR [edi-128]
- mov eax,DWORD PTR [edi-124]
- mov ebx,DWORD PTR [edi-120]
- mov ecx,DWORD PTR [edi-116]
- mov ebp,eax
- shl eax,13
- mov esi,ebx
- shr esi,19
- shl ebx,13
- or eax,esi
- mov esi,ecx
- shl ecx,13
- mov DWORD PTR [edi-32],eax
- shr esi,19
- or ebx,esi
- shr ebp,19
- mov esi,edx
- shr esi,19
- mov DWORD PTR [edi-28],ebx
- shl edx,13
- or ecx,esi
- or edx,ebp
- mov DWORD PTR [edi-24],ecx
- mov DWORD PTR [edi-20],edx
- mov ebp,eax
- shl eax,15
- mov esi,ebx
- shr esi,17
- shl ebx,15
- or eax,esi
- mov esi,ecx
- shl ecx,15
- mov DWORD PTR [edi],eax
- shr esi,17
- or ebx,esi
- shr ebp,17
- mov esi,edx
- shr esi,17
- mov DWORD PTR 4[edi],ebx
- shl edx,15
- or ecx,esi
- or edx,ebp
- mov DWORD PTR 8[edi],ecx
- mov DWORD PTR 12[edi],edx
- mov ebp,eax
- shl eax,17
- mov esi,ebx
- shr esi,15
- shl ebx,17
- or eax,esi
- mov esi,ecx
- shl ecx,17
- mov DWORD PTR 48[edi],eax
- shr esi,15
- or ebx,esi
- shr ebp,15
- mov esi,edx
- shr esi,15
- mov DWORD PTR 52[edi],ebx
- shl edx,17
- or ecx,esi
- or edx,ebp
- mov DWORD PTR 56[edi],ecx
- mov DWORD PTR 60[edi],edx
- mov ebp,ebx
- shl ebx,2
- mov esi,ecx
- shr esi,30
- shl ecx,2
- or ebx,esi
- mov esi,edx
- shl edx,2
- mov DWORD PTR 112[edi],ebx
- shr esi,30
- or ecx,esi
- shr ebp,30
- mov esi,eax
- shr esi,30
- mov DWORD PTR 116[edi],ecx
- shl eax,2
- or edx,esi
- or eax,ebp
- mov DWORD PTR 120[edi],edx
- mov DWORD PTR 124[edi],eax
- mov eax,4
-$L013done:
- lea edx,DWORD PTR 144[edi]
- add esp,16
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_Camellia_Ekeygen ENDP
-ALIGN 16
-_Camellia_set_key PROC PUBLIC
-$L_Camellia_set_key_begin::
- push ebx
- mov ecx,DWORD PTR 8[esp]
- mov ebx,DWORD PTR 12[esp]
- mov edx,DWORD PTR 16[esp]
- mov eax,-1
- test ecx,ecx
- jz $L014done
- test edx,edx
- jz $L014done
- mov eax,-2
- cmp ebx,256
- je $L015arg_ok
- cmp ebx,192
- je $L015arg_ok
- cmp ebx,128
- jne $L014done
-ALIGN 4
-$L015arg_ok:
- push edx
- push ecx
- push ebx
- call $L_Camellia_Ekeygen_begin
- add esp,12
- mov DWORD PTR [edx],eax
- xor eax,eax
-ALIGN 4
-$L014done:
- pop ebx
- ret
-_Camellia_set_key ENDP
-ALIGN 64
-$LCamellia_SIGMA::
-DD 2694735487,1003262091,3061508184,1286239154
-DD 3337565999,3914302142,1426019237,4057165596
-DD 283453434,3731369245,2958461122,3018244605
-DD 0,0,0,0
-ALIGN 64
-$LCamellia_SBOX::
-DD 1886416896,1886388336
-DD 2189591040,741081132
-DD 741092352,3014852787
-DD 3974949888,3233808576
-DD 3014898432,3840147684
-DD 656877312,1465319511
-DD 3233857536,3941204202
-DD 3857048832,2930639022
-DD 3840205824,589496355
-DD 2240120064,1802174571
-DD 1465341696,1162149957
-DD 892679424,2779054245
-DD 3941263872,3991732461
-DD 202116096,1330577487
-DD 2930683392,488439837
-DD 1094795520,2459041938
-DD 589505280,2256928902
-DD 4025478912,2947481775
-DD 1802201856,2088501372
-DD 2475922176,522125343
-DD 1162167552,1044250686
-DD 421075200,3705405660
-DD 2779096320,1583218782
-DD 555819264,185270283
-DD 3991792896,2795896998
-DD 235802112,960036921
-DD 1330597632,3587506389
-DD 1313754624,1566376029
-DD 488447232,3654877401
-DD 1701143808,1515847770
-DD 2459079168,1364262993
-DD 3183328512,1819017324
-DD 2256963072,2341142667
-DD 3099113472,2593783962
-DD 2947526400,4227531003
-DD 2408550144,2964324528
-DD 2088532992,1953759348
-DD 3958106880,724238379
-DD 522133248,4042260720
-DD 3469659648,2223243396
-DD 1044266496,3755933919
-DD 808464384,3419078859
-DD 3705461760,875823156
-DD 1600085760,1987444854
-DD 1583242752,1835860077
-DD 3318072576,2846425257
-DD 185273088,3520135377
-DD 437918208,67371012
-DD 2795939328,336855060
-DD 3789676800,976879674
-DD 960051456,3739091166
-DD 3402287616,286326801
-DD 3587560704,842137650
-DD 1195853568,2627469468
-DD 1566399744,1397948499
-DD 1027423488,4075946226
-DD 3654932736,4278059262
-DD 16843008,3486449871
-DD 1515870720,3284336835
-DD 3604403712,2054815866
-DD 1364283648,606339108
-DD 1448498688,3907518696
-DD 1819044864,1616904288
-DD 1296911616,1768489065
-DD 2341178112,2863268010
-DD 218959104,2694840480
-DD 2593823232,2711683233
-DD 1717986816,1650589794
-DD 4227595008,1414791252
-DD 3435973632,505282590
-DD 2964369408,3772776672
-DD 757935360,1684275300
-DD 1953788928,269484048
-DD 303174144,0
-DD 724249344,2745368739
-DD 538976256,1970602101
-DD 4042321920,2324299914
-DD 2981212416,3873833190
-DD 2223277056,151584777
-DD 2576980224,3722248413
-DD 3755990784,2273771655
-DD 1280068608,2206400643
-DD 3419130624,3452764365
-DD 3267543552,2425356432
-DD 875836416,1936916595
-DD 2122219008,4143317238
-DD 1987474944,2644312221
-DD 84215040,3216965823
-DD 1835887872,1381105746
-DD 3082270464,3638034648
-DD 2846468352,3368550600
-DD 825307392,3334865094
-DD 3520188672,2172715137
-DD 387389184,1869545583
-DD 67372032,320012307
-DD 3621246720,1667432547
-DD 336860160,3924361449
-DD 1482184704,2812739751
-DD 976894464,2677997727
-DD 1633771776,3166437564
-DD 3739147776,690552873
-DD 454761216,4193845497
-DD 286331136,791609391
-DD 471604224,3031695540
-DD 842150400,2021130360
-DD 252645120,101056518
-DD 2627509248,3890675943
-DD 370546176,1903231089
-DD 1397969664,3570663636
-DD 404232192,2880110763
-DD 4076007936,2290614408
-DD 572662272,2374828173
-DD 4278124032,1920073842
-DD 1145324544,3115909305
-DD 3486502656,4177002744
-DD 2998055424,2896953516
-DD 3284386560,909508662
-DD 3048584448,707395626
-DD 2054846976,1010565180
-DD 2442236160,4059103473
-DD 606348288,1077936192
-DD 134744064,3553820883
-DD 3907577856,3149594811
-DD 2829625344,1128464451
-DD 1616928768,353697813
-DD 4244438016,2913796269
-DD 1768515840,2004287607
-DD 1347440640,2155872384
-DD 2863311360,2189557890
-DD 3503345664,3974889708
-DD 2694881280,656867367
-DD 2105376000,3856990437
-DD 2711724288,2240086149
-DD 2307492096,892665909
-DD 1650614784,202113036
-DD 2543294208,1094778945
-DD 1414812672,4025417967
-DD 1532713728,2475884691
-DD 505290240,421068825
-DD 2509608192,555810849
-DD 3772833792,235798542
-DD 4294967040,1313734734
-DD 1684300800,1701118053
-DD 3537031680,3183280317
-DD 269488128,3099066552
-DD 3301229568,2408513679
-DD 0,3958046955
-DD 1212696576,3469607118
-DD 2745410304,808452144
-DD 4160222976,1600061535
-DD 1970631936,3318022341
-DD 3688618752,437911578
-DD 2324335104,3789619425
-DD 50529024,3402236106
-DD 3873891840,1195835463
-DD 3671775744,1027407933
-DD 151587072,16842753
-DD 1061109504,3604349142
-DD 3722304768,1448476758
-DD 2492765184,1296891981
-DD 2273806080,218955789
-DD 1549556736,1717960806
-DD 2206434048,3435921612
-DD 33686016,757923885
-DD 3452816640,303169554
-DD 1246382592,538968096
-DD 2425393152,2981167281
-DD 858993408,2576941209
-DD 1936945920,1280049228
-DD 1734829824,3267494082
-DD 4143379968,2122186878
-DD 4092850944,84213765
-DD 2644352256,3082223799
-DD 2139062016,825294897
-DD 3217014528,387383319
-DD 3806519808,3621191895
-DD 1381126656,1482162264
-DD 2610666240,1633747041
-DD 3638089728,454754331
-DD 640034304,471597084
-DD 3368601600,252641295
-DD 926365440,370540566
-DD 3334915584,404226072
-DD 993737472,572653602
-DD 2172748032,1145307204
-DD 2526451200,2998010034
-DD 1869573888,3048538293
-DD 1263225600,2442199185
-DD 320017152,134742024
-DD 3200171520,2829582504
-DD 1667457792,4244373756
-DD 774778368,1347420240
-DD 3924420864,3503292624
-DD 2038003968,2105344125
-DD 2812782336,2307457161
-DD 2358021120,2543255703
-DD 2678038272,1532690523
-DD 1852730880,2509570197
-DD 3166485504,4294902015
-DD 2391707136,3536978130
-DD 690563328,3301179588
-DD 4126536960,1212678216
-DD 4193908992,4160159991
-DD 3065427456,3688562907
-DD 791621376,50528259
-DD 4261281024,3671720154
-DD 3031741440,1061093439
-DD 1499027712,2492727444
-DD 2021160960,1549533276
-DD 2560137216,33685506
-DD 101058048,1246363722
-DD 1785358848,858980403
-DD 3890734848,1734803559
-DD 1179010560,4092788979
-DD 1903259904,2139029631
-DD 3132799488,3806462178
-DD 3570717696,2610626715
-DD 623191296,640024614
-DD 2880154368,926351415
-DD 1111638528,993722427
-DD 2290649088,2526412950
-DD 2728567296,1263206475
-DD 2374864128,3200123070
-DD 4210752000,774766638
-DD 1920102912,2037973113
-DD 117901056,2357985420
-DD 3115956480,1852702830
-DD 1431655680,2391670926
-DD 4177065984,4126474485
-DD 4008635904,3065381046
-DD 2896997376,4261216509
-DD 168430080,1499005017
-DD 909522432,2560098456
-DD 1229539584,1785331818
-DD 707406336,1178992710
-DD 1751672832,3132752058
-DD 1010580480,623181861
-DD 943208448,1111621698
-DD 4059164928,2728525986
-DD 2762253312,4210688250
-DD 1077952512,117899271
-DD 673720320,1431634005
-DD 3553874688,4008575214
-DD 2071689984,168427530
-DD 3149642496,1229520969
-DD 3385444608,1751646312
-DD 1128481536,943194168
-DD 3250700544,2762211492
-DD 353703168,673710120
-DD 3823362816,2071658619
-DD 2913840384,3385393353
-DD 4109693952,3250651329
-DD 2004317952,3823304931
-DD 3351758592,4109631732
-DD 2155905024,3351707847
-DD 2661195264,2661154974
-DD 14737632,939538488
-DD 328965,1090535745
-DD 5789784,369104406
-DD 14277081,1979741814
-DD 6776679,3640711641
-DD 5131854,2466288531
-DD 8487297,1610637408
-DD 13355979,4060148466
-DD 13224393,1912631922
-DD 723723,3254829762
-DD 11447982,2868947883
-DD 6974058,2583730842
-DD 14013909,1962964341
-DD 1579032,100664838
-DD 6118749,1459640151
-DD 8553090,2684395680
-DD 4605510,2432733585
-DD 14671839,4144035831
-DD 14079702,3036722613
-DD 2565927,3372272073
-DD 9079434,2717950626
-DD 3289650,2348846220
-DD 4934475,3523269330
-DD 4342338,2415956112
-DD 14408667,4127258358
-DD 1842204,117442311
-DD 10395294,2801837991
-DD 10263708,654321447
-DD 3815994,2382401166
-DD 13290186,2986390194
-DD 2434341,1224755529
-DD 8092539,3724599006
-DD 855309,1124090691
-DD 7434609,1543527516
-DD 6250335,3607156695
-DD 2039583,3338717127
-DD 16316664,1040203326
-DD 14145495,4110480885
-DD 4079166,2399178639
-DD 10329501,1728079719
-DD 8158332,520101663
-DD 6316128,402659352
-DD 12171705,1845522030
-DD 12500670,2936057775
-DD 12369084,788541231
-DD 9145227,3791708898
-DD 1447446,2231403909
-DD 3421236,218107149
-DD 5066061,1392530259
-DD 12829635,4026593520
-DD 7500402,2617285788
-DD 9803157,1694524773
-DD 11250603,3925928682
-DD 9342606,2734728099
-DD 12237498,2919280302
-DD 8026746,2650840734
-DD 11776947,3959483628
-DD 131586,2147516544
-DD 11842740,754986285
-DD 11382189,1795189611
-DD 10658466,2818615464
-DD 11316396,721431339
-DD 14211288,905983542
-DD 10132122,2785060518
-DD 1513239,3305162181
-DD 1710618,2248181382
-DD 3487029,1291865421
-DD 13421772,855651123
-DD 16250871,4244700669
-DD 10066329,1711302246
-DD 6381921,1476417624
-DD 5921370,2516620950
-DD 15263976,973093434
-DD 2368548,150997257
-DD 5658198,2499843477
-DD 4210752,268439568
-DD 14803425,2013296760
-DD 6513507,3623934168
-DD 592137,1107313218
-DD 3355443,3422604492
-DD 12566463,4009816047
-DD 10000536,637543974
-DD 9934743,3842041317
-DD 8750469,1627414881
-DD 6842472,436214298
-DD 16579836,1056980799
-DD 15527148,989870907
-DD 657930,2181071490
-DD 14342874,3053500086
-DD 7303023,3674266587
-DD 5460819,3556824276
-DD 6447714,2550175896
-DD 10724259,3892373736
-DD 3026478,2332068747
-DD 526344,33554946
-DD 11513775,3942706155
-DD 2631720,167774730
-DD 11579568,738208812
-DD 7631988,486546717
-DD 12763842,2952835248
-DD 12434877,1862299503
-DD 3552822,2365623693
-DD 2236962,2281736328
-DD 3684408,234884622
-DD 6579300,419436825
-DD 1973790,2264958855
-DD 3750201,1308642894
-DD 2894892,184552203
-DD 10921638,2835392937
-DD 3158064,201329676
-DD 15066597,2030074233
-DD 4473924,285217041
-DD 16645629,2130739071
-DD 8947848,570434082
-DD 10461087,3875596263
-DD 6645093,1493195097
-DD 8882055,3774931425
-DD 7039851,3657489114
-DD 16053492,1023425853
-DD 2302755,3355494600
-DD 4737096,301994514
-DD 1052688,67109892
-DD 13750737,1946186868
-DD 5329233,1409307732
-DD 12632256,805318704
-DD 16382457,2113961598
-DD 13816530,3019945140
-DD 10526880,671098920
-DD 5592405,1426085205
-DD 10592673,1744857192
-DD 4276545,1342197840
-DD 16448250,3187719870
-DD 4408131,3489714384
-DD 1250067,3288384708
-DD 12895428,822096177
-DD 3092271,3405827019
-DD 11053224,704653866
-DD 11974326,2902502829
-DD 3947580,251662095
-DD 2829099,3389049546
-DD 12698049,1879076976
-DD 16777215,4278255615
-DD 13158600,838873650
-DD 10855845,1761634665
-DD 2105376,134219784
-DD 9013641,1644192354
-DD 0,0
-DD 9474192,603989028
-DD 4671303,3506491857
-DD 15724527,4211145723
-DD 15395562,3120609978
-DD 12040119,3976261101
-DD 1381653,1157645637
-DD 394758,2164294017
-DD 13487565,1929409395
-DD 11908533,1828744557
-DD 1184274,2214626436
-DD 8289918,2667618207
-DD 12303291,3993038574
-DD 2697513,1241533002
-DD 986895,3271607235
-DD 12105912,771763758
-DD 460551,3238052289
-DD 263172,16777473
-DD 10197915,3858818790
-DD 9737364,620766501
-DD 2171169,1207978056
-DD 6710886,2566953369
-DD 15132390,3103832505
-DD 13553358,3003167667
-DD 15592941,2063629179
-DD 15198183,4177590777
-DD 3881787,3456159438
-DD 16711422,3204497343
-DD 8355711,3741376479
-DD 12961221,1895854449
-DD 10790052,687876393
-DD 3618615,3439381965
-DD 11645361,1811967084
-DD 5000268,318771987
-DD 9539985,1677747300
-DD 7237230,2600508315
-DD 9276813,1660969827
-DD 7763574,2634063261
-DD 197379,3221274816
-DD 2960685,1258310475
-DD 14606046,3070277559
-DD 9868950,2768283045
-DD 2500134,2298513801
-DD 8224125,1593859935
-DD 13027014,2969612721
-DD 6052956,385881879
-DD 13882323,4093703412
-DD 15921906,3154164924
-DD 5197647,3540046803
-DD 1644825,1174423110
-DD 4144959,3472936911
-DD 14474460,922761015
-DD 7960953,1577082462
-DD 1907997,1191200583
-DD 5395026,2483066004
-DD 15461355,4194368250
-DD 15987699,4227923196
-DD 7171437,1526750043
-DD 6184542,2533398423
-DD 16514043,4261478142
-DD 6908265,1509972570
-DD 11711154,2885725356
-DD 15790320,1006648380
-DD 3223857,1275087948
-DD 789516,50332419
-DD 13948116,889206069
-DD 13619151,4076925939
-DD 9211020,587211555
-DD 14869218,3087055032
-DD 7697781,1560304989
-DD 11119017,1778412138
-DD 4868682,2449511058
-DD 5723991,3573601749
-DD 8684676,553656609
-DD 1118481,1140868164
-DD 4539717,1358975313
-DD 1776411,3321939654
-DD 16119285,2097184125
-DD 15000804,956315961
-DD 921102,2197848963
-DD 7566195,3691044060
-DD 11184810,2852170410
-DD 15856113,2080406652
-DD 14540253,1996519287
-DD 5855577,1442862678
-DD 1315860,83887365
-DD 7105644,452991771
-DD 9605778,2751505572
-DD 5526612,352326933
-DD 13684944,872428596
-DD 7895160,503324190
-DD 7368816,469769244
-DD 14935011,4160813304
-DD 4802889,1375752786
-DD 8421504,536879136
-DD 5263440,335549460
-DD 10987431,3909151209
-DD 16185078,3170942397
-DD 7829367,3707821533
-DD 9671571,3825263844
-DD 8816262,2701173153
-DD 8618883,3758153952
-DD 2763306,2315291274
-DD 13092807,4043370993
-DD 5987163,3590379222
-DD 15329769,2046851706
-DD 15658734,3137387451
-DD 9408399,3808486371
-DD 65793,1073758272
-DD 4013373,1325420367
-ALIGN 16
-_Camellia_cbc_encrypt PROC PUBLIC
-$L_Camellia_cbc_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov ecx,DWORD PTR 28[esp]
- cmp ecx,0
- je $L016enc_out
- pushfd
- cld
- mov eax,DWORD PTR 24[esp]
- mov ebx,DWORD PTR 28[esp]
- mov edx,DWORD PTR 36[esp]
- mov ebp,DWORD PTR 40[esp]
- lea esi,DWORD PTR [esp-64]
- and esi,-64
- lea edi,DWORD PTR [edx-127]
- sub edi,esi
- neg edi
- and edi,960
- sub esi,edi
- mov edi,DWORD PTR 44[esp]
- xchg esp,esi
- add esp,4
- mov DWORD PTR 20[esp],esi
- mov DWORD PTR 24[esp],eax
- mov DWORD PTR 28[esp],ebx
- mov DWORD PTR 32[esp],ecx
- mov DWORD PTR 36[esp],edx
- mov DWORD PTR 40[esp],ebp
- call $L017pic_point
-$L017pic_point:
- pop ebp
- lea ebp,DWORD PTR ($LCamellia_SBOX-$L017pic_point)[ebp]
- mov esi,32
-ALIGN 4
-$L018prefetch_sbox:
- mov eax,DWORD PTR [ebp]
- mov ebx,DWORD PTR 32[ebp]
- mov ecx,DWORD PTR 64[ebp]
- mov edx,DWORD PTR 96[ebp]
- lea ebp,DWORD PTR 128[ebp]
- dec esi
- jnz $L018prefetch_sbox
- mov eax,DWORD PTR 36[esp]
- sub ebp,4096
- mov esi,DWORD PTR 24[esp]
- mov edx,DWORD PTR 272[eax]
- cmp edi,0
- je $L019DECRYPT
- mov ecx,DWORD PTR 32[esp]
- mov edi,DWORD PTR 40[esp]
- shl edx,6
- lea edx,DWORD PTR [edx*1+eax]
- mov DWORD PTR 16[esp],edx
- test ecx,4294967280
- jz $L020enc_tail
- mov eax,DWORD PTR [edi]
- mov ebx,DWORD PTR 4[edi]
-ALIGN 4
-$L021enc_loop:
- mov ecx,DWORD PTR 8[edi]
- mov edx,DWORD PTR 12[edi]
- xor eax,DWORD PTR [esi]
- xor ebx,DWORD PTR 4[esi]
- xor ecx,DWORD PTR 8[esi]
- bswap eax
- xor edx,DWORD PTR 12[esi]
- bswap ebx
- mov edi,DWORD PTR 36[esp]
- bswap ecx
- bswap edx
- call __x86_Camellia_encrypt
- mov esi,DWORD PTR 24[esp]
- mov edi,DWORD PTR 28[esp]
- bswap eax
- bswap ebx
- bswap ecx
- mov DWORD PTR [edi],eax
- bswap edx
- mov DWORD PTR 4[edi],ebx
- mov DWORD PTR 8[edi],ecx
- mov DWORD PTR 12[edi],edx
- mov ecx,DWORD PTR 32[esp]
- lea esi,DWORD PTR 16[esi]
- mov DWORD PTR 24[esp],esi
- lea edx,DWORD PTR 16[edi]
- mov DWORD PTR 28[esp],edx
- sub ecx,16
- test ecx,4294967280
- mov DWORD PTR 32[esp],ecx
- jnz $L021enc_loop
- test ecx,15
- jnz $L020enc_tail
- mov esi,DWORD PTR 40[esp]
- mov ecx,DWORD PTR 8[edi]
- mov edx,DWORD PTR 12[edi]
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],ecx
- mov DWORD PTR 12[esi],edx
- mov esp,DWORD PTR 20[esp]
- popfd
-$L016enc_out:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
- pushfd
-ALIGN 4
-$L020enc_tail:
- mov eax,edi
- mov edi,DWORD PTR 28[esp]
- push eax
- mov ebx,16
- sub ebx,ecx
- cmp edi,esi
- je $L022enc_in_place
-ALIGN 4
-DD 2767451785
- jmp $L023enc_skip_in_place
-$L022enc_in_place:
- lea edi,DWORD PTR [ecx*1+edi]
-$L023enc_skip_in_place:
- mov ecx,ebx
- xor eax,eax
-ALIGN 4
-DD 2868115081
- pop edi
- mov esi,DWORD PTR 28[esp]
- mov eax,DWORD PTR [edi]
- mov ebx,DWORD PTR 4[edi]
- mov DWORD PTR 32[esp],16
- jmp $L021enc_loop
-ALIGN 16
-$L019DECRYPT:
- shl edx,6
- lea edx,DWORD PTR [edx*1+eax]
- mov DWORD PTR 16[esp],eax
- mov DWORD PTR 36[esp],edx
- cmp esi,DWORD PTR 28[esp]
- je $L024dec_in_place
- mov edi,DWORD PTR 40[esp]
- mov DWORD PTR 44[esp],edi
-ALIGN 4
-$L025dec_loop:
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- bswap eax
- mov edx,DWORD PTR 12[esi]
- bswap ebx
- mov edi,DWORD PTR 36[esp]
- bswap ecx
- bswap edx
- call __x86_Camellia_decrypt
- mov edi,DWORD PTR 44[esp]
- mov esi,DWORD PTR 32[esp]
- bswap eax
- bswap ebx
- bswap ecx
- xor eax,DWORD PTR [edi]
- bswap edx
- xor ebx,DWORD PTR 4[edi]
- xor ecx,DWORD PTR 8[edi]
- xor edx,DWORD PTR 12[edi]
- sub esi,16
- jc $L026dec_partial
- mov DWORD PTR 32[esp],esi
- mov esi,DWORD PTR 24[esp]
- mov edi,DWORD PTR 28[esp]
- mov DWORD PTR [edi],eax
- mov DWORD PTR 4[edi],ebx
- mov DWORD PTR 8[edi],ecx
- mov DWORD PTR 12[edi],edx
- mov DWORD PTR 44[esp],esi
- lea esi,DWORD PTR 16[esi]
- mov DWORD PTR 24[esp],esi
- lea edi,DWORD PTR 16[edi]
- mov DWORD PTR 28[esp],edi
- jnz $L025dec_loop
- mov edi,DWORD PTR 44[esp]
-$L027dec_end:
- mov esi,DWORD PTR 40[esp]
- mov eax,DWORD PTR [edi]
- mov ebx,DWORD PTR 4[edi]
- mov ecx,DWORD PTR 8[edi]
- mov edx,DWORD PTR 12[edi]
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],ecx
- mov DWORD PTR 12[esi],edx
- jmp $L028dec_out
-ALIGN 4
-$L026dec_partial:
- lea edi,DWORD PTR 44[esp]
- mov DWORD PTR [edi],eax
- mov DWORD PTR 4[edi],ebx
- mov DWORD PTR 8[edi],ecx
- mov DWORD PTR 12[edi],edx
- lea ecx,DWORD PTR 16[esi]
- mov esi,edi
- mov edi,DWORD PTR 28[esp]
-DD 2767451785
- mov edi,DWORD PTR 24[esp]
- jmp $L027dec_end
-ALIGN 4
-$L024dec_in_place:
-$L029dec_in_place_loop:
- lea edi,DWORD PTR 44[esp]
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov edx,DWORD PTR 12[esi]
- mov DWORD PTR [edi],eax
- mov DWORD PTR 4[edi],ebx
- mov DWORD PTR 8[edi],ecx
- bswap eax
- mov DWORD PTR 12[edi],edx
- bswap ebx
- mov edi,DWORD PTR 36[esp]
- bswap ecx
- bswap edx
- call __x86_Camellia_decrypt
- mov edi,DWORD PTR 40[esp]
- mov esi,DWORD PTR 28[esp]
- bswap eax
- bswap ebx
- bswap ecx
- xor eax,DWORD PTR [edi]
- bswap edx
- xor ebx,DWORD PTR 4[edi]
- xor ecx,DWORD PTR 8[edi]
- xor edx,DWORD PTR 12[edi]
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],ecx
- mov DWORD PTR 12[esi],edx
- lea esi,DWORD PTR 16[esi]
- mov DWORD PTR 28[esp],esi
- lea esi,DWORD PTR 44[esp]
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov edx,DWORD PTR 12[esi]
- mov DWORD PTR [edi],eax
- mov DWORD PTR 4[edi],ebx
- mov DWORD PTR 8[edi],ecx
- mov DWORD PTR 12[edi],edx
- mov esi,DWORD PTR 24[esp]
- lea esi,DWORD PTR 16[esi]
- mov DWORD PTR 24[esp],esi
- mov ecx,DWORD PTR 32[esp]
- sub ecx,16
- jc $L030dec_in_place_partial
- mov DWORD PTR 32[esp],ecx
- jnz $L029dec_in_place_loop
- jmp $L028dec_out
-ALIGN 4
-$L030dec_in_place_partial:
- mov edi,DWORD PTR 28[esp]
- lea esi,DWORD PTR 44[esp]
- lea edi,DWORD PTR [ecx*1+edi]
- lea esi,DWORD PTR 16[ecx*1+esi]
- neg ecx
-DD 2767451785
-ALIGN 4
-$L028dec_out:
- mov esp,DWORD PTR 20[esp]
- popfd
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_Camellia_cbc_encrypt ENDP
-DB 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54
-DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
-DB 115,108,46,111,114,103,62,0
-.text$ ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN 16
+_Camellia_EncryptBlock_Rounds PROC PUBLIC
+$L_Camellia_EncryptBlock_Rounds_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov eax,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edi,DWORD PTR 28[esp]
+ mov ebx,esp
+ sub esp,28
+ and esp,-64
+ lea ecx,DWORD PTR [edi-127]
+ sub ecx,esp
+ neg ecx
+ and ecx,960
+ sub esp,ecx
+ add esp,4
+ shl eax,6
+ lea eax,DWORD PTR [eax*1+edi]
+ mov DWORD PTR 20[esp],ebx
+ mov DWORD PTR 16[esp],eax
+ call $L000pic_point
+$L000pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($LCamellia_SBOX-$L000pic_point)[ebp]
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ bswap eax
+ mov edx,DWORD PTR 12[esi]
+ bswap ebx
+ bswap ecx
+ bswap edx
+ call __x86_Camellia_encrypt
+ mov esp,DWORD PTR 20[esp]
+ bswap eax
+ mov esi,DWORD PTR 32[esp]
+ bswap ebx
+ bswap ecx
+ bswap edx
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],ecx
+ mov DWORD PTR 12[esi],edx
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_Camellia_EncryptBlock_Rounds ENDP
+ALIGN 16
+_Camellia_EncryptBlock PROC PUBLIC
+$L_Camellia_EncryptBlock_begin::
+ mov eax,128
+ sub eax,DWORD PTR 4[esp]
+ mov eax,3
+ adc eax,0
+ mov DWORD PTR 4[esp],eax
+ jmp $L_Camellia_EncryptBlock_Rounds_begin
+_Camellia_EncryptBlock ENDP
+ALIGN 16
+_Camellia_encrypt PROC PUBLIC
+$L_Camellia_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 28[esp]
+ mov ebx,esp
+ sub esp,28
+ and esp,-64
+ mov eax,DWORD PTR 272[edi]
+ lea ecx,DWORD PTR [edi-127]
+ sub ecx,esp
+ neg ecx
+ and ecx,960
+ sub esp,ecx
+ add esp,4
+ shl eax,6
+ lea eax,DWORD PTR [eax*1+edi]
+ mov DWORD PTR 20[esp],ebx
+ mov DWORD PTR 16[esp],eax
+ call $L001pic_point
+$L001pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($LCamellia_SBOX-$L001pic_point)[ebp]
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ bswap eax
+ mov edx,DWORD PTR 12[esi]
+ bswap ebx
+ bswap ecx
+ bswap edx
+ call __x86_Camellia_encrypt
+ mov esp,DWORD PTR 20[esp]
+ bswap eax
+ mov esi,DWORD PTR 24[esp]
+ bswap ebx
+ bswap ecx
+ bswap edx
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],ecx
+ mov DWORD PTR 12[esi],edx
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_Camellia_encrypt ENDP
+ALIGN 16
+__x86_Camellia_encrypt PROC PRIVATE
+ xor eax,DWORD PTR [edi]
+ xor ebx,DWORD PTR 4[edi]
+ xor ecx,DWORD PTR 8[edi]
+ xor edx,DWORD PTR 12[edi]
+ mov esi,DWORD PTR 16[edi]
+ mov DWORD PTR 4[esp],eax
+ mov DWORD PTR 8[esp],ebx
+ mov DWORD PTR 12[esp],ecx
+ mov DWORD PTR 16[esp],edx
+ALIGN 16
+$L002loop:
+ xor eax,esi
+ xor ebx,DWORD PTR 20[edi]
+ movzx esi,ah
+ mov edx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,al
+ xor edx,DWORD PTR 4[esi*8+ebp]
+ shr eax,16
+ movzx esi,bl
+ mov ecx,DWORD PTR [esi*8+ebp]
+ movzx esi,ah
+ xor edx,DWORD PTR [esi*8+ebp]
+ movzx esi,bh
+ xor ecx,DWORD PTR 4[esi*8+ebp]
+ shr ebx,16
+ movzx eax,al
+ xor edx,DWORD PTR 2048[eax*8+ebp]
+ movzx esi,bh
+ mov eax,DWORD PTR 16[esp]
+ xor ecx,edx
+ ror edx,8
+ xor ecx,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,bl
+ mov ebx,DWORD PTR 12[esp]
+ xor edx,eax
+ xor ecx,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 24[edi]
+ xor edx,ecx
+ mov DWORD PTR 16[esp],edx
+ xor ecx,ebx
+ mov DWORD PTR 12[esp],ecx
+ xor ecx,esi
+ xor edx,DWORD PTR 28[edi]
+ movzx esi,ch
+ mov ebx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,cl
+ xor ebx,DWORD PTR 4[esi*8+ebp]
+ shr ecx,16
+ movzx esi,dl
+ mov eax,DWORD PTR [esi*8+ebp]
+ movzx esi,ch
+ xor ebx,DWORD PTR [esi*8+ebp]
+ movzx esi,dh
+ xor eax,DWORD PTR 4[esi*8+ebp]
+ shr edx,16
+ movzx ecx,cl
+ xor ebx,DWORD PTR 2048[ecx*8+ebp]
+ movzx esi,dh
+ mov ecx,DWORD PTR 8[esp]
+ xor eax,ebx
+ ror ebx,8
+ xor eax,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,dl
+ mov edx,DWORD PTR 4[esp]
+ xor ebx,ecx
+ xor eax,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 32[edi]
+ xor ebx,eax
+ mov DWORD PTR 8[esp],ebx
+ xor eax,edx
+ mov DWORD PTR 4[esp],eax
+ xor eax,esi
+ xor ebx,DWORD PTR 36[edi]
+ movzx esi,ah
+ mov edx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,al
+ xor edx,DWORD PTR 4[esi*8+ebp]
+ shr eax,16
+ movzx esi,bl
+ mov ecx,DWORD PTR [esi*8+ebp]
+ movzx esi,ah
+ xor edx,DWORD PTR [esi*8+ebp]
+ movzx esi,bh
+ xor ecx,DWORD PTR 4[esi*8+ebp]
+ shr ebx,16
+ movzx eax,al
+ xor edx,DWORD PTR 2048[eax*8+ebp]
+ movzx esi,bh
+ mov eax,DWORD PTR 16[esp]
+ xor ecx,edx
+ ror edx,8
+ xor ecx,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,bl
+ mov ebx,DWORD PTR 12[esp]
+ xor edx,eax
+ xor ecx,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 40[edi]
+ xor edx,ecx
+ mov DWORD PTR 16[esp],edx
+ xor ecx,ebx
+ mov DWORD PTR 12[esp],ecx
+ xor ecx,esi
+ xor edx,DWORD PTR 44[edi]
+ movzx esi,ch
+ mov ebx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,cl
+ xor ebx,DWORD PTR 4[esi*8+ebp]
+ shr ecx,16
+ movzx esi,dl
+ mov eax,DWORD PTR [esi*8+ebp]
+ movzx esi,ch
+ xor ebx,DWORD PTR [esi*8+ebp]
+ movzx esi,dh
+ xor eax,DWORD PTR 4[esi*8+ebp]
+ shr edx,16
+ movzx ecx,cl
+ xor ebx,DWORD PTR 2048[ecx*8+ebp]
+ movzx esi,dh
+ mov ecx,DWORD PTR 8[esp]
+ xor eax,ebx
+ ror ebx,8
+ xor eax,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,dl
+ mov edx,DWORD PTR 4[esp]
+ xor ebx,ecx
+ xor eax,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 48[edi]
+ xor ebx,eax
+ mov DWORD PTR 8[esp],ebx
+ xor eax,edx
+ mov DWORD PTR 4[esp],eax
+ xor eax,esi
+ xor ebx,DWORD PTR 52[edi]
+ movzx esi,ah
+ mov edx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,al
+ xor edx,DWORD PTR 4[esi*8+ebp]
+ shr eax,16
+ movzx esi,bl
+ mov ecx,DWORD PTR [esi*8+ebp]
+ movzx esi,ah
+ xor edx,DWORD PTR [esi*8+ebp]
+ movzx esi,bh
+ xor ecx,DWORD PTR 4[esi*8+ebp]
+ shr ebx,16
+ movzx eax,al
+ xor edx,DWORD PTR 2048[eax*8+ebp]
+ movzx esi,bh
+ mov eax,DWORD PTR 16[esp]
+ xor ecx,edx
+ ror edx,8
+ xor ecx,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,bl
+ mov ebx,DWORD PTR 12[esp]
+ xor edx,eax
+ xor ecx,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 56[edi]
+ xor edx,ecx
+ mov DWORD PTR 16[esp],edx
+ xor ecx,ebx
+ mov DWORD PTR 12[esp],ecx
+ xor ecx,esi
+ xor edx,DWORD PTR 60[edi]
+ movzx esi,ch
+ mov ebx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,cl
+ xor ebx,DWORD PTR 4[esi*8+ebp]
+ shr ecx,16
+ movzx esi,dl
+ mov eax,DWORD PTR [esi*8+ebp]
+ movzx esi,ch
+ xor ebx,DWORD PTR [esi*8+ebp]
+ movzx esi,dh
+ xor eax,DWORD PTR 4[esi*8+ebp]
+ shr edx,16
+ movzx ecx,cl
+ xor ebx,DWORD PTR 2048[ecx*8+ebp]
+ movzx esi,dh
+ mov ecx,DWORD PTR 8[esp]
+ xor eax,ebx
+ ror ebx,8
+ xor eax,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,dl
+ mov edx,DWORD PTR 4[esp]
+ xor ebx,ecx
+ xor eax,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 64[edi]
+ xor ebx,eax
+ mov DWORD PTR 8[esp],ebx
+ xor eax,edx
+ mov DWORD PTR 4[esp],eax
+ add edi,64
+ cmp edi,DWORD PTR 20[esp]
+ je $L003done
+ and esi,eax
+ mov edx,DWORD PTR 16[esp]
+ rol esi,1
+ mov ecx,edx
+ xor ebx,esi
+ or ecx,DWORD PTR 12[edi]
+ mov DWORD PTR 8[esp],ebx
+ xor ecx,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 4[edi]
+ mov DWORD PTR 12[esp],ecx
+ or esi,ebx
+ and ecx,DWORD PTR 8[edi]
+ xor eax,esi
+ rol ecx,1
+ mov DWORD PTR 4[esp],eax
+ xor edx,ecx
+ mov esi,DWORD PTR 16[edi]
+ mov DWORD PTR 16[esp],edx
+ jmp $L002loop
+ALIGN 8
+$L003done:
+ mov ecx,eax
+ mov edx,ebx
+ mov eax,DWORD PTR 12[esp]
+ mov ebx,DWORD PTR 16[esp]
+ xor eax,esi
+ xor ebx,DWORD PTR 4[edi]
+ xor ecx,DWORD PTR 8[edi]
+ xor edx,DWORD PTR 12[edi]
+ ret
+__x86_Camellia_encrypt ENDP
+ALIGN 16
+_Camellia_DecryptBlock_Rounds PROC PUBLIC
+$L_Camellia_DecryptBlock_Rounds_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov eax,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edi,DWORD PTR 28[esp]
+ mov ebx,esp
+ sub esp,28
+ and esp,-64
+ lea ecx,DWORD PTR [edi-127]
+ sub ecx,esp
+ neg ecx
+ and ecx,960
+ sub esp,ecx
+ add esp,4
+ shl eax,6
+ mov DWORD PTR 16[esp],edi
+ lea edi,DWORD PTR [eax*1+edi]
+ mov DWORD PTR 20[esp],ebx
+ call $L004pic_point
+$L004pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($LCamellia_SBOX-$L004pic_point)[ebp]
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ bswap eax
+ mov edx,DWORD PTR 12[esi]
+ bswap ebx
+ bswap ecx
+ bswap edx
+ call __x86_Camellia_decrypt
+ mov esp,DWORD PTR 20[esp]
+ bswap eax
+ mov esi,DWORD PTR 32[esp]
+ bswap ebx
+ bswap ecx
+ bswap edx
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],ecx
+ mov DWORD PTR 12[esi],edx
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_Camellia_DecryptBlock_Rounds ENDP
+ALIGN 16
+_Camellia_DecryptBlock PROC PUBLIC
+$L_Camellia_DecryptBlock_begin::
+ mov eax,128
+ sub eax,DWORD PTR 4[esp]
+ mov eax,3
+ adc eax,0
+ mov DWORD PTR 4[esp],eax
+ jmp $L_Camellia_DecryptBlock_Rounds_begin
+_Camellia_DecryptBlock ENDP
+ALIGN 16
+_Camellia_decrypt PROC PUBLIC
+$L_Camellia_decrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 28[esp]
+ mov ebx,esp
+ sub esp,28
+ and esp,-64
+ mov eax,DWORD PTR 272[edi]
+ lea ecx,DWORD PTR [edi-127]
+ sub ecx,esp
+ neg ecx
+ and ecx,960
+ sub esp,ecx
+ add esp,4
+ shl eax,6
+ mov DWORD PTR 16[esp],edi
+ lea edi,DWORD PTR [eax*1+edi]
+ mov DWORD PTR 20[esp],ebx
+ call $L005pic_point
+$L005pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($LCamellia_SBOX-$L005pic_point)[ebp]
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ bswap eax
+ mov edx,DWORD PTR 12[esi]
+ bswap ebx
+ bswap ecx
+ bswap edx
+ call __x86_Camellia_decrypt
+ mov esp,DWORD PTR 20[esp]
+ bswap eax
+ mov esi,DWORD PTR 24[esp]
+ bswap ebx
+ bswap ecx
+ bswap edx
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],ecx
+ mov DWORD PTR 12[esi],edx
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_Camellia_decrypt ENDP
+ALIGN 16
+__x86_Camellia_decrypt PROC PRIVATE
+ xor eax,DWORD PTR [edi]
+ xor ebx,DWORD PTR 4[edi]
+ xor ecx,DWORD PTR 8[edi]
+ xor edx,DWORD PTR 12[edi]
+ mov esi,DWORD PTR [edi-8]
+ mov DWORD PTR 4[esp],eax
+ mov DWORD PTR 8[esp],ebx
+ mov DWORD PTR 12[esp],ecx
+ mov DWORD PTR 16[esp],edx
+ALIGN 16
+$L006loop:
+ xor eax,esi
+ xor ebx,DWORD PTR [edi-4]
+ movzx esi,ah
+ mov edx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,al
+ xor edx,DWORD PTR 4[esi*8+ebp]
+ shr eax,16
+ movzx esi,bl
+ mov ecx,DWORD PTR [esi*8+ebp]
+ movzx esi,ah
+ xor edx,DWORD PTR [esi*8+ebp]
+ movzx esi,bh
+ xor ecx,DWORD PTR 4[esi*8+ebp]
+ shr ebx,16
+ movzx eax,al
+ xor edx,DWORD PTR 2048[eax*8+ebp]
+ movzx esi,bh
+ mov eax,DWORD PTR 16[esp]
+ xor ecx,edx
+ ror edx,8
+ xor ecx,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,bl
+ mov ebx,DWORD PTR 12[esp]
+ xor edx,eax
+ xor ecx,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR [edi-16]
+ xor edx,ecx
+ mov DWORD PTR 16[esp],edx
+ xor ecx,ebx
+ mov DWORD PTR 12[esp],ecx
+ xor ecx,esi
+ xor edx,DWORD PTR [edi-12]
+ movzx esi,ch
+ mov ebx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,cl
+ xor ebx,DWORD PTR 4[esi*8+ebp]
+ shr ecx,16
+ movzx esi,dl
+ mov eax,DWORD PTR [esi*8+ebp]
+ movzx esi,ch
+ xor ebx,DWORD PTR [esi*8+ebp]
+ movzx esi,dh
+ xor eax,DWORD PTR 4[esi*8+ebp]
+ shr edx,16
+ movzx ecx,cl
+ xor ebx,DWORD PTR 2048[ecx*8+ebp]
+ movzx esi,dh
+ mov ecx,DWORD PTR 8[esp]
+ xor eax,ebx
+ ror ebx,8
+ xor eax,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,dl
+ mov edx,DWORD PTR 4[esp]
+ xor ebx,ecx
+ xor eax,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR [edi-24]
+ xor ebx,eax
+ mov DWORD PTR 8[esp],ebx
+ xor eax,edx
+ mov DWORD PTR 4[esp],eax
+ xor eax,esi
+ xor ebx,DWORD PTR [edi-20]
+ movzx esi,ah
+ mov edx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,al
+ xor edx,DWORD PTR 4[esi*8+ebp]
+ shr eax,16
+ movzx esi,bl
+ mov ecx,DWORD PTR [esi*8+ebp]
+ movzx esi,ah
+ xor edx,DWORD PTR [esi*8+ebp]
+ movzx esi,bh
+ xor ecx,DWORD PTR 4[esi*8+ebp]
+ shr ebx,16
+ movzx eax,al
+ xor edx,DWORD PTR 2048[eax*8+ebp]
+ movzx esi,bh
+ mov eax,DWORD PTR 16[esp]
+ xor ecx,edx
+ ror edx,8
+ xor ecx,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,bl
+ mov ebx,DWORD PTR 12[esp]
+ xor edx,eax
+ xor ecx,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR [edi-32]
+ xor edx,ecx
+ mov DWORD PTR 16[esp],edx
+ xor ecx,ebx
+ mov DWORD PTR 12[esp],ecx
+ xor ecx,esi
+ xor edx,DWORD PTR [edi-28]
+ movzx esi,ch
+ mov ebx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,cl
+ xor ebx,DWORD PTR 4[esi*8+ebp]
+ shr ecx,16
+ movzx esi,dl
+ mov eax,DWORD PTR [esi*8+ebp]
+ movzx esi,ch
+ xor ebx,DWORD PTR [esi*8+ebp]
+ movzx esi,dh
+ xor eax,DWORD PTR 4[esi*8+ebp]
+ shr edx,16
+ movzx ecx,cl
+ xor ebx,DWORD PTR 2048[ecx*8+ebp]
+ movzx esi,dh
+ mov ecx,DWORD PTR 8[esp]
+ xor eax,ebx
+ ror ebx,8
+ xor eax,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,dl
+ mov edx,DWORD PTR 4[esp]
+ xor ebx,ecx
+ xor eax,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR [edi-40]
+ xor ebx,eax
+ mov DWORD PTR 8[esp],ebx
+ xor eax,edx
+ mov DWORD PTR 4[esp],eax
+ xor eax,esi
+ xor ebx,DWORD PTR [edi-36]
+ movzx esi,ah
+ mov edx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,al
+ xor edx,DWORD PTR 4[esi*8+ebp]
+ shr eax,16
+ movzx esi,bl
+ mov ecx,DWORD PTR [esi*8+ebp]
+ movzx esi,ah
+ xor edx,DWORD PTR [esi*8+ebp]
+ movzx esi,bh
+ xor ecx,DWORD PTR 4[esi*8+ebp]
+ shr ebx,16
+ movzx eax,al
+ xor edx,DWORD PTR 2048[eax*8+ebp]
+ movzx esi,bh
+ mov eax,DWORD PTR 16[esp]
+ xor ecx,edx
+ ror edx,8
+ xor ecx,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,bl
+ mov ebx,DWORD PTR 12[esp]
+ xor edx,eax
+ xor ecx,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR [edi-48]
+ xor edx,ecx
+ mov DWORD PTR 16[esp],edx
+ xor ecx,ebx
+ mov DWORD PTR 12[esp],ecx
+ xor ecx,esi
+ xor edx,DWORD PTR [edi-44]
+ movzx esi,ch
+ mov ebx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,cl
+ xor ebx,DWORD PTR 4[esi*8+ebp]
+ shr ecx,16
+ movzx esi,dl
+ mov eax,DWORD PTR [esi*8+ebp]
+ movzx esi,ch
+ xor ebx,DWORD PTR [esi*8+ebp]
+ movzx esi,dh
+ xor eax,DWORD PTR 4[esi*8+ebp]
+ shr edx,16
+ movzx ecx,cl
+ xor ebx,DWORD PTR 2048[ecx*8+ebp]
+ movzx esi,dh
+ mov ecx,DWORD PTR 8[esp]
+ xor eax,ebx
+ ror ebx,8
+ xor eax,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,dl
+ mov edx,DWORD PTR 4[esp]
+ xor ebx,ecx
+ xor eax,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR [edi-56]
+ xor ebx,eax
+ mov DWORD PTR 8[esp],ebx
+ xor eax,edx
+ mov DWORD PTR 4[esp],eax
+ sub edi,64
+ cmp edi,DWORD PTR 20[esp]
+ je $L007done
+ and esi,eax
+ mov edx,DWORD PTR 16[esp]
+ rol esi,1
+ mov ecx,edx
+ xor ebx,esi
+ or ecx,DWORD PTR 4[edi]
+ mov DWORD PTR 8[esp],ebx
+ xor ecx,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 12[edi]
+ mov DWORD PTR 12[esp],ecx
+ or esi,ebx
+ and ecx,DWORD PTR [edi]
+ xor eax,esi
+ rol ecx,1
+ mov DWORD PTR 4[esp],eax
+ xor edx,ecx
+ mov esi,DWORD PTR [edi-8]
+ mov DWORD PTR 16[esp],edx
+ jmp $L006loop
+ALIGN 8
+$L007done:
+ mov ecx,eax
+ mov edx,ebx
+ mov eax,DWORD PTR 12[esp]
+ mov ebx,DWORD PTR 16[esp]
+ xor ecx,esi
+ xor edx,DWORD PTR 12[edi]
+ xor eax,DWORD PTR [edi]
+ xor ebx,DWORD PTR 4[edi]
+ ret
+__x86_Camellia_decrypt ENDP
+ALIGN 16
+_Camellia_Ekeygen PROC PUBLIC
+$L_Camellia_Ekeygen_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ sub esp,16
+ mov ebp,DWORD PTR 36[esp]
+ mov esi,DWORD PTR 40[esp]
+ mov edi,DWORD PTR 44[esp]
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov edx,DWORD PTR 12[esi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ mov DWORD PTR [edi],eax
+ mov DWORD PTR 4[edi],ebx
+ mov DWORD PTR 8[edi],ecx
+ mov DWORD PTR 12[edi],edx
+ cmp ebp,128
+ je $L0081st128
+ mov eax,DWORD PTR 16[esi]
+ mov ebx,DWORD PTR 20[esi]
+ cmp ebp,192
+ je $L0091st192
+ mov ecx,DWORD PTR 24[esi]
+ mov edx,DWORD PTR 28[esi]
+ jmp $L0101st256
+ALIGN 4
+$L0091st192:
+ mov ecx,eax
+ mov edx,ebx
+ not ecx
+ not edx
+ALIGN 4
+$L0101st256:
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ mov DWORD PTR 32[edi],eax
+ mov DWORD PTR 36[edi],ebx
+ mov DWORD PTR 40[edi],ecx
+ mov DWORD PTR 44[edi],edx
+ xor eax,DWORD PTR [edi]
+ xor ebx,DWORD PTR 4[edi]
+ xor ecx,DWORD PTR 8[edi]
+ xor edx,DWORD PTR 12[edi]
+ALIGN 4
+$L0081st128:
+ call $L011pic_point
+$L011pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($LCamellia_SBOX-$L011pic_point)[ebp]
+ lea edi,DWORD PTR ($LCamellia_SIGMA-$LCamellia_SBOX)[ebp]
+ mov esi,DWORD PTR [edi]
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ebx
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 12[esp],edx
+ xor eax,esi
+ xor ebx,DWORD PTR 4[edi]
+ movzx esi,ah
+ mov edx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,al
+ xor edx,DWORD PTR 4[esi*8+ebp]
+ shr eax,16
+ movzx esi,bl
+ mov ecx,DWORD PTR [esi*8+ebp]
+ movzx esi,ah
+ xor edx,DWORD PTR [esi*8+ebp]
+ movzx esi,bh
+ xor ecx,DWORD PTR 4[esi*8+ebp]
+ shr ebx,16
+ movzx eax,al
+ xor edx,DWORD PTR 2048[eax*8+ebp]
+ movzx esi,bh
+ mov eax,DWORD PTR 12[esp]
+ xor ecx,edx
+ ror edx,8
+ xor ecx,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,bl
+ mov ebx,DWORD PTR 8[esp]
+ xor edx,eax
+ xor ecx,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 8[edi]
+ xor edx,ecx
+ mov DWORD PTR 12[esp],edx
+ xor ecx,ebx
+ mov DWORD PTR 8[esp],ecx
+ xor ecx,esi
+ xor edx,DWORD PTR 12[edi]
+ movzx esi,ch
+ mov ebx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,cl
+ xor ebx,DWORD PTR 4[esi*8+ebp]
+ shr ecx,16
+ movzx esi,dl
+ mov eax,DWORD PTR [esi*8+ebp]
+ movzx esi,ch
+ xor ebx,DWORD PTR [esi*8+ebp]
+ movzx esi,dh
+ xor eax,DWORD PTR 4[esi*8+ebp]
+ shr edx,16
+ movzx ecx,cl
+ xor ebx,DWORD PTR 2048[ecx*8+ebp]
+ movzx esi,dh
+ mov ecx,DWORD PTR 4[esp]
+ xor eax,ebx
+ ror ebx,8
+ xor eax,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,dl
+ mov edx,DWORD PTR [esp]
+ xor ebx,ecx
+ xor eax,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 16[edi]
+ xor ebx,eax
+ mov DWORD PTR 4[esp],ebx
+ xor eax,edx
+ mov DWORD PTR [esp],eax
+ mov ecx,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 44[esp]
+ xor eax,DWORD PTR [esi]
+ xor ebx,DWORD PTR 4[esi]
+ xor ecx,DWORD PTR 8[esi]
+ xor edx,DWORD PTR 12[esi]
+ mov esi,DWORD PTR 16[edi]
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ebx
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 12[esp],edx
+ xor eax,esi
+ xor ebx,DWORD PTR 20[edi]
+ movzx esi,ah
+ mov edx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,al
+ xor edx,DWORD PTR 4[esi*8+ebp]
+ shr eax,16
+ movzx esi,bl
+ mov ecx,DWORD PTR [esi*8+ebp]
+ movzx esi,ah
+ xor edx,DWORD PTR [esi*8+ebp]
+ movzx esi,bh
+ xor ecx,DWORD PTR 4[esi*8+ebp]
+ shr ebx,16
+ movzx eax,al
+ xor edx,DWORD PTR 2048[eax*8+ebp]
+ movzx esi,bh
+ mov eax,DWORD PTR 12[esp]
+ xor ecx,edx
+ ror edx,8
+ xor ecx,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,bl
+ mov ebx,DWORD PTR 8[esp]
+ xor edx,eax
+ xor ecx,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 24[edi]
+ xor edx,ecx
+ mov DWORD PTR 12[esp],edx
+ xor ecx,ebx
+ mov DWORD PTR 8[esp],ecx
+ xor ecx,esi
+ xor edx,DWORD PTR 28[edi]
+ movzx esi,ch
+ mov ebx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,cl
+ xor ebx,DWORD PTR 4[esi*8+ebp]
+ shr ecx,16
+ movzx esi,dl
+ mov eax,DWORD PTR [esi*8+ebp]
+ movzx esi,ch
+ xor ebx,DWORD PTR [esi*8+ebp]
+ movzx esi,dh
+ xor eax,DWORD PTR 4[esi*8+ebp]
+ shr edx,16
+ movzx ecx,cl
+ xor ebx,DWORD PTR 2048[ecx*8+ebp]
+ movzx esi,dh
+ mov ecx,DWORD PTR 4[esp]
+ xor eax,ebx
+ ror ebx,8
+ xor eax,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,dl
+ mov edx,DWORD PTR [esp]
+ xor ebx,ecx
+ xor eax,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 32[edi]
+ xor ebx,eax
+ mov DWORD PTR 4[esp],ebx
+ xor eax,edx
+ mov DWORD PTR [esp],eax
+ mov ecx,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 36[esp]
+ cmp esi,128
+ jne $L0122nd256
+ mov edi,DWORD PTR 44[esp]
+ lea edi,DWORD PTR 128[edi]
+ mov DWORD PTR [edi-112],eax
+ mov DWORD PTR [edi-108],ebx
+ mov DWORD PTR [edi-104],ecx
+ mov DWORD PTR [edi-100],edx
+ mov ebp,eax
+ shl eax,15
+ mov esi,ebx
+ shr esi,17
+ shl ebx,15
+ or eax,esi
+ mov esi,ecx
+ shl ecx,15
+ mov DWORD PTR [edi-80],eax
+ shr esi,17
+ or ebx,esi
+ shr ebp,17
+ mov esi,edx
+ shr esi,17
+ mov DWORD PTR [edi-76],ebx
+ shl edx,15
+ or ecx,esi
+ or edx,ebp
+ mov DWORD PTR [edi-72],ecx
+ mov DWORD PTR [edi-68],edx
+ mov ebp,eax
+ shl eax,15
+ mov esi,ebx
+ shr esi,17
+ shl ebx,15
+ or eax,esi
+ mov esi,ecx
+ shl ecx,15
+ mov DWORD PTR [edi-64],eax
+ shr esi,17
+ or ebx,esi
+ shr ebp,17
+ mov esi,edx
+ shr esi,17
+ mov DWORD PTR [edi-60],ebx
+ shl edx,15
+ or ecx,esi
+ or edx,ebp
+ mov DWORD PTR [edi-56],ecx
+ mov DWORD PTR [edi-52],edx
+ mov ebp,eax
+ shl eax,15
+ mov esi,ebx
+ shr esi,17
+ shl ebx,15
+ or eax,esi
+ mov esi,ecx
+ shl ecx,15
+ mov DWORD PTR [edi-32],eax
+ shr esi,17
+ or ebx,esi
+ shr ebp,17
+ mov esi,edx
+ shr esi,17
+ mov DWORD PTR [edi-28],ebx
+ shl edx,15
+ or ecx,esi
+ or edx,ebp
+ mov ebp,eax
+ shl eax,15
+ mov esi,ebx
+ shr esi,17
+ shl ebx,15
+ or eax,esi
+ mov esi,ecx
+ shl ecx,15
+ mov DWORD PTR [edi-16],eax
+ shr esi,17
+ or ebx,esi
+ shr ebp,17
+ mov esi,edx
+ shr esi,17
+ mov DWORD PTR [edi-12],ebx
+ shl edx,15
+ or ecx,esi
+ or edx,ebp
+ mov DWORD PTR [edi-8],ecx
+ mov DWORD PTR [edi-4],edx
+ mov ebp,ebx
+ shl ebx,2
+ mov esi,ecx
+ shr esi,30
+ shl ecx,2
+ or ebx,esi
+ mov esi,edx
+ shl edx,2
+ mov DWORD PTR 32[edi],ebx
+ shr esi,30
+ or ecx,esi
+ shr ebp,30
+ mov esi,eax
+ shr esi,30
+ mov DWORD PTR 36[edi],ecx
+ shl eax,2
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR 40[edi],edx
+ mov DWORD PTR 44[edi],eax
+ mov ebp,ebx
+ shl ebx,17
+ mov esi,ecx
+ shr esi,15
+ shl ecx,17
+ or ebx,esi
+ mov esi,edx
+ shl edx,17
+ mov DWORD PTR 64[edi],ebx
+ shr esi,15
+ or ecx,esi
+ shr ebp,15
+ mov esi,eax
+ shr esi,15
+ mov DWORD PTR 68[edi],ecx
+ shl eax,17
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR 72[edi],edx
+ mov DWORD PTR 76[edi],eax
+ mov ebx,DWORD PTR [edi-128]
+ mov ecx,DWORD PTR [edi-124]
+ mov edx,DWORD PTR [edi-120]
+ mov eax,DWORD PTR [edi-116]
+ mov ebp,ebx
+ shl ebx,15
+ mov esi,ecx
+ shr esi,17
+ shl ecx,15
+ or ebx,esi
+ mov esi,edx
+ shl edx,15
+ mov DWORD PTR [edi-96],ebx
+ shr esi,17
+ or ecx,esi
+ shr ebp,17
+ mov esi,eax
+ shr esi,17
+ mov DWORD PTR [edi-92],ecx
+ shl eax,15
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR [edi-88],edx
+ mov DWORD PTR [edi-84],eax
+ mov ebp,ebx
+ shl ebx,30
+ mov esi,ecx
+ shr esi,2
+ shl ecx,30
+ or ebx,esi
+ mov esi,edx
+ shl edx,30
+ mov DWORD PTR [edi-48],ebx
+ shr esi,2
+ or ecx,esi
+ shr ebp,2
+ mov esi,eax
+ shr esi,2
+ mov DWORD PTR [edi-44],ecx
+ shl eax,30
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR [edi-40],edx
+ mov DWORD PTR [edi-36],eax
+ mov ebp,ebx
+ shl ebx,15
+ mov esi,ecx
+ shr esi,17
+ shl ecx,15
+ or ebx,esi
+ mov esi,edx
+ shl edx,15
+ shr esi,17
+ or ecx,esi
+ shr ebp,17
+ mov esi,eax
+ shr esi,17
+ shl eax,15
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR [edi-24],edx
+ mov DWORD PTR [edi-20],eax
+ mov ebp,ebx
+ shl ebx,17
+ mov esi,ecx
+ shr esi,15
+ shl ecx,17
+ or ebx,esi
+ mov esi,edx
+ shl edx,17
+ mov DWORD PTR [edi],ebx
+ shr esi,15
+ or ecx,esi
+ shr ebp,15
+ mov esi,eax
+ shr esi,15
+ mov DWORD PTR 4[edi],ecx
+ shl eax,17
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR 8[edi],edx
+ mov DWORD PTR 12[edi],eax
+ mov ebp,ebx
+ shl ebx,17
+ mov esi,ecx
+ shr esi,15
+ shl ecx,17
+ or ebx,esi
+ mov esi,edx
+ shl edx,17
+ mov DWORD PTR 16[edi],ebx
+ shr esi,15
+ or ecx,esi
+ shr ebp,15
+ mov esi,eax
+ shr esi,15
+ mov DWORD PTR 20[edi],ecx
+ shl eax,17
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR 24[edi],edx
+ mov DWORD PTR 28[edi],eax
+ mov ebp,ebx
+ shl ebx,17
+ mov esi,ecx
+ shr esi,15
+ shl ecx,17
+ or ebx,esi
+ mov esi,edx
+ shl edx,17
+ mov DWORD PTR 48[edi],ebx
+ shr esi,15
+ or ecx,esi
+ shr ebp,15
+ mov esi,eax
+ shr esi,15
+ mov DWORD PTR 52[edi],ecx
+ shl eax,17
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR 56[edi],edx
+ mov DWORD PTR 60[edi],eax
+ mov eax,3
+ jmp $L013done
+ALIGN 16
+$L0122nd256:
+ mov esi,DWORD PTR 44[esp]
+ mov DWORD PTR 48[esi],eax
+ mov DWORD PTR 52[esi],ebx
+ mov DWORD PTR 56[esi],ecx
+ mov DWORD PTR 60[esi],edx
+ xor eax,DWORD PTR 32[esi]
+ xor ebx,DWORD PTR 36[esi]
+ xor ecx,DWORD PTR 40[esi]
+ xor edx,DWORD PTR 44[esi]
+ mov esi,DWORD PTR 32[edi]
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ebx
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 12[esp],edx
+ xor eax,esi
+ xor ebx,DWORD PTR 36[edi]
+ movzx esi,ah
+ mov edx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,al
+ xor edx,DWORD PTR 4[esi*8+ebp]
+ shr eax,16
+ movzx esi,bl
+ mov ecx,DWORD PTR [esi*8+ebp]
+ movzx esi,ah
+ xor edx,DWORD PTR [esi*8+ebp]
+ movzx esi,bh
+ xor ecx,DWORD PTR 4[esi*8+ebp]
+ shr ebx,16
+ movzx eax,al
+ xor edx,DWORD PTR 2048[eax*8+ebp]
+ movzx esi,bh
+ mov eax,DWORD PTR 12[esp]
+ xor ecx,edx
+ ror edx,8
+ xor ecx,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,bl
+ mov ebx,DWORD PTR 8[esp]
+ xor edx,eax
+ xor ecx,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 40[edi]
+ xor edx,ecx
+ mov DWORD PTR 12[esp],edx
+ xor ecx,ebx
+ mov DWORD PTR 8[esp],ecx
+ xor ecx,esi
+ xor edx,DWORD PTR 44[edi]
+ movzx esi,ch
+ mov ebx,DWORD PTR 2052[esi*8+ebp]
+ movzx esi,cl
+ xor ebx,DWORD PTR 4[esi*8+ebp]
+ shr ecx,16
+ movzx esi,dl
+ mov eax,DWORD PTR [esi*8+ebp]
+ movzx esi,ch
+ xor ebx,DWORD PTR [esi*8+ebp]
+ movzx esi,dh
+ xor eax,DWORD PTR 4[esi*8+ebp]
+ shr edx,16
+ movzx ecx,cl
+ xor ebx,DWORD PTR 2048[ecx*8+ebp]
+ movzx esi,dh
+ mov ecx,DWORD PTR 4[esp]
+ xor eax,ebx
+ ror ebx,8
+ xor eax,DWORD PTR 2048[esi*8+ebp]
+ movzx esi,dl
+ mov edx,DWORD PTR [esp]
+ xor ebx,ecx
+ xor eax,DWORD PTR 2052[esi*8+ebp]
+ mov esi,DWORD PTR 48[edi]
+ xor ebx,eax
+ mov DWORD PTR 4[esp],ebx
+ xor eax,edx
+ mov DWORD PTR [esp],eax
+ mov ecx,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+ mov edi,DWORD PTR 44[esp]
+ lea edi,DWORD PTR 128[edi]
+ mov DWORD PTR [edi-112],eax
+ mov DWORD PTR [edi-108],ebx
+ mov DWORD PTR [edi-104],ecx
+ mov DWORD PTR [edi-100],edx
+ mov ebp,eax
+ shl eax,30
+ mov esi,ebx
+ shr esi,2
+ shl ebx,30
+ or eax,esi
+ mov esi,ecx
+ shl ecx,30
+ mov DWORD PTR [edi-48],eax
+ shr esi,2
+ or ebx,esi
+ shr ebp,2
+ mov esi,edx
+ shr esi,2
+ mov DWORD PTR [edi-44],ebx
+ shl edx,30
+ or ecx,esi
+ or edx,ebp
+ mov DWORD PTR [edi-40],ecx
+ mov DWORD PTR [edi-36],edx
+ mov ebp,eax
+ shl eax,30
+ mov esi,ebx
+ shr esi,2
+ shl ebx,30
+ or eax,esi
+ mov esi,ecx
+ shl ecx,30
+ mov DWORD PTR 32[edi],eax
+ shr esi,2
+ or ebx,esi
+ shr ebp,2
+ mov esi,edx
+ shr esi,2
+ mov DWORD PTR 36[edi],ebx
+ shl edx,30
+ or ecx,esi
+ or edx,ebp
+ mov DWORD PTR 40[edi],ecx
+ mov DWORD PTR 44[edi],edx
+ mov ebp,ebx
+ shl ebx,19
+ mov esi,ecx
+ shr esi,13
+ shl ecx,19
+ or ebx,esi
+ mov esi,edx
+ shl edx,19
+ mov DWORD PTR 128[edi],ebx
+ shr esi,13
+ or ecx,esi
+ shr ebp,13
+ mov esi,eax
+ shr esi,13
+ mov DWORD PTR 132[edi],ecx
+ shl eax,19
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR 136[edi],edx
+ mov DWORD PTR 140[edi],eax
+ mov ebx,DWORD PTR [edi-96]
+ mov ecx,DWORD PTR [edi-92]
+ mov edx,DWORD PTR [edi-88]
+ mov eax,DWORD PTR [edi-84]
+ mov ebp,ebx
+ shl ebx,15
+ mov esi,ecx
+ shr esi,17
+ shl ecx,15
+ or ebx,esi
+ mov esi,edx
+ shl edx,15
+ mov DWORD PTR [edi-96],ebx
+ shr esi,17
+ or ecx,esi
+ shr ebp,17
+ mov esi,eax
+ shr esi,17
+ mov DWORD PTR [edi-92],ecx
+ shl eax,15
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR [edi-88],edx
+ mov DWORD PTR [edi-84],eax
+ mov ebp,ebx
+ shl ebx,15
+ mov esi,ecx
+ shr esi,17
+ shl ecx,15
+ or ebx,esi
+ mov esi,edx
+ shl edx,15
+ mov DWORD PTR [edi-64],ebx
+ shr esi,17
+ or ecx,esi
+ shr ebp,17
+ mov esi,eax
+ shr esi,17
+ mov DWORD PTR [edi-60],ecx
+ shl eax,15
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR [edi-56],edx
+ mov DWORD PTR [edi-52],eax
+ mov ebp,ebx
+ shl ebx,30
+ mov esi,ecx
+ shr esi,2
+ shl ecx,30
+ or ebx,esi
+ mov esi,edx
+ shl edx,30
+ mov DWORD PTR 16[edi],ebx
+ shr esi,2
+ or ecx,esi
+ shr ebp,2
+ mov esi,eax
+ shr esi,2
+ mov DWORD PTR 20[edi],ecx
+ shl eax,30
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR 24[edi],edx
+ mov DWORD PTR 28[edi],eax
+ mov ebp,ecx
+ shl ecx,2
+ mov esi,edx
+ shr esi,30
+ shl edx,2
+ or ecx,esi
+ mov esi,eax
+ shl eax,2
+ mov DWORD PTR 80[edi],ecx
+ shr esi,30
+ or edx,esi
+ shr ebp,30
+ mov esi,ebx
+ shr esi,30
+ mov DWORD PTR 84[edi],edx
+ shl ebx,2
+ or eax,esi
+ or ebx,ebp
+ mov DWORD PTR 88[edi],eax
+ mov DWORD PTR 92[edi],ebx
+ mov ecx,DWORD PTR [edi-80]
+ mov edx,DWORD PTR [edi-76]
+ mov eax,DWORD PTR [edi-72]
+ mov ebx,DWORD PTR [edi-68]
+ mov ebp,ecx
+ shl ecx,15
+ mov esi,edx
+ shr esi,17
+ shl edx,15
+ or ecx,esi
+ mov esi,eax
+ shl eax,15
+ mov DWORD PTR [edi-80],ecx
+ shr esi,17
+ or edx,esi
+ shr ebp,17
+ mov esi,ebx
+ shr esi,17
+ mov DWORD PTR [edi-76],edx
+ shl ebx,15
+ or eax,esi
+ or ebx,ebp
+ mov DWORD PTR [edi-72],eax
+ mov DWORD PTR [edi-68],ebx
+ mov ebp,ecx
+ shl ecx,30
+ mov esi,edx
+ shr esi,2
+ shl edx,30
+ or ecx,esi
+ mov esi,eax
+ shl eax,30
+ mov DWORD PTR [edi-16],ecx
+ shr esi,2
+ or edx,esi
+ shr ebp,2
+ mov esi,ebx
+ shr esi,2
+ mov DWORD PTR [edi-12],edx
+ shl ebx,30
+ or eax,esi
+ or ebx,ebp
+ mov DWORD PTR [edi-8],eax
+ mov DWORD PTR [edi-4],ebx
+ mov DWORD PTR 64[edi],edx
+ mov DWORD PTR 68[edi],eax
+ mov DWORD PTR 72[edi],ebx
+ mov DWORD PTR 76[edi],ecx
+ mov ebp,edx
+ shl edx,17
+ mov esi,eax
+ shr esi,15
+ shl eax,17
+ or edx,esi
+ mov esi,ebx
+ shl ebx,17
+ mov DWORD PTR 96[edi],edx
+ shr esi,15
+ or eax,esi
+ shr ebp,15
+ mov esi,ecx
+ shr esi,15
+ mov DWORD PTR 100[edi],eax
+ shl ecx,17
+ or ebx,esi
+ or ecx,ebp
+ mov DWORD PTR 104[edi],ebx
+ mov DWORD PTR 108[edi],ecx
+ mov edx,DWORD PTR [edi-128]
+ mov eax,DWORD PTR [edi-124]
+ mov ebx,DWORD PTR [edi-120]
+ mov ecx,DWORD PTR [edi-116]
+ mov ebp,eax
+ shl eax,13
+ mov esi,ebx
+ shr esi,19
+ shl ebx,13
+ or eax,esi
+ mov esi,ecx
+ shl ecx,13
+ mov DWORD PTR [edi-32],eax
+ shr esi,19
+ or ebx,esi
+ shr ebp,19
+ mov esi,edx
+ shr esi,19
+ mov DWORD PTR [edi-28],ebx
+ shl edx,13
+ or ecx,esi
+ or edx,ebp
+ mov DWORD PTR [edi-24],ecx
+ mov DWORD PTR [edi-20],edx
+ mov ebp,eax
+ shl eax,15
+ mov esi,ebx
+ shr esi,17
+ shl ebx,15
+ or eax,esi
+ mov esi,ecx
+ shl ecx,15
+ mov DWORD PTR [edi],eax
+ shr esi,17
+ or ebx,esi
+ shr ebp,17
+ mov esi,edx
+ shr esi,17
+ mov DWORD PTR 4[edi],ebx
+ shl edx,15
+ or ecx,esi
+ or edx,ebp
+ mov DWORD PTR 8[edi],ecx
+ mov DWORD PTR 12[edi],edx
+ mov ebp,eax
+ shl eax,17
+ mov esi,ebx
+ shr esi,15
+ shl ebx,17
+ or eax,esi
+ mov esi,ecx
+ shl ecx,17
+ mov DWORD PTR 48[edi],eax
+ shr esi,15
+ or ebx,esi
+ shr ebp,15
+ mov esi,edx
+ shr esi,15
+ mov DWORD PTR 52[edi],ebx
+ shl edx,17
+ or ecx,esi
+ or edx,ebp
+ mov DWORD PTR 56[edi],ecx
+ mov DWORD PTR 60[edi],edx
+ mov ebp,ebx
+ shl ebx,2
+ mov esi,ecx
+ shr esi,30
+ shl ecx,2
+ or ebx,esi
+ mov esi,edx
+ shl edx,2
+ mov DWORD PTR 112[edi],ebx
+ shr esi,30
+ or ecx,esi
+ shr ebp,30
+ mov esi,eax
+ shr esi,30
+ mov DWORD PTR 116[edi],ecx
+ shl eax,2
+ or edx,esi
+ or eax,ebp
+ mov DWORD PTR 120[edi],edx
+ mov DWORD PTR 124[edi],eax
+ mov eax,4
+$L013done:
+ lea edx,DWORD PTR 144[edi]
+ add esp,16
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_Camellia_Ekeygen ENDP
+ALIGN 16
+_Camellia_set_key PROC PUBLIC
+$L_Camellia_set_key_begin::
+ push ebx
+ mov ecx,DWORD PTR 8[esp]
+ mov ebx,DWORD PTR 12[esp]
+ mov edx,DWORD PTR 16[esp]
+ mov eax,-1
+ test ecx,ecx
+ jz $L014done
+ test edx,edx
+ jz $L014done
+ mov eax,-2
+ cmp ebx,256
+ je $L015arg_ok
+ cmp ebx,192
+ je $L015arg_ok
+ cmp ebx,128
+ jne $L014done
+ALIGN 4
+$L015arg_ok:
+ push edx
+ push ecx
+ push ebx
+ call $L_Camellia_Ekeygen_begin
+ add esp,12
+ mov DWORD PTR [edx],eax
+ xor eax,eax
+ALIGN 4
+$L014done:
+ pop ebx
+ ret
+_Camellia_set_key ENDP
+ALIGN 64
+$LCamellia_SIGMA::
+DD 2694735487,1003262091,3061508184,1286239154
+DD 3337565999,3914302142,1426019237,4057165596
+DD 283453434,3731369245,2958461122,3018244605
+DD 0,0,0,0
+ALIGN 64
+$LCamellia_SBOX::
+DD 1886416896,1886388336
+DD 2189591040,741081132
+DD 741092352,3014852787
+DD 3974949888,3233808576
+DD 3014898432,3840147684
+DD 656877312,1465319511
+DD 3233857536,3941204202
+DD 3857048832,2930639022
+DD 3840205824,589496355
+DD 2240120064,1802174571
+DD 1465341696,1162149957
+DD 892679424,2779054245
+DD 3941263872,3991732461
+DD 202116096,1330577487
+DD 2930683392,488439837
+DD 1094795520,2459041938
+DD 589505280,2256928902
+DD 4025478912,2947481775
+DD 1802201856,2088501372
+DD 2475922176,522125343
+DD 1162167552,1044250686
+DD 421075200,3705405660
+DD 2779096320,1583218782
+DD 555819264,185270283
+DD 3991792896,2795896998
+DD 235802112,960036921
+DD 1330597632,3587506389
+DD 1313754624,1566376029
+DD 488447232,3654877401
+DD 1701143808,1515847770
+DD 2459079168,1364262993
+DD 3183328512,1819017324
+DD 2256963072,2341142667
+DD 3099113472,2593783962
+DD 2947526400,4227531003
+DD 2408550144,2964324528
+DD 2088532992,1953759348
+DD 3958106880,724238379
+DD 522133248,4042260720
+DD 3469659648,2223243396
+DD 1044266496,3755933919
+DD 808464384,3419078859
+DD 3705461760,875823156
+DD 1600085760,1987444854
+DD 1583242752,1835860077
+DD 3318072576,2846425257
+DD 185273088,3520135377
+DD 437918208,67371012
+DD 2795939328,336855060
+DD 3789676800,976879674
+DD 960051456,3739091166
+DD 3402287616,286326801
+DD 3587560704,842137650
+DD 1195853568,2627469468
+DD 1566399744,1397948499
+DD 1027423488,4075946226
+DD 3654932736,4278059262
+DD 16843008,3486449871
+DD 1515870720,3284336835
+DD 3604403712,2054815866
+DD 1364283648,606339108
+DD 1448498688,3907518696
+DD 1819044864,1616904288
+DD 1296911616,1768489065
+DD 2341178112,2863268010
+DD 218959104,2694840480
+DD 2593823232,2711683233
+DD 1717986816,1650589794
+DD 4227595008,1414791252
+DD 3435973632,505282590
+DD 2964369408,3772776672
+DD 757935360,1684275300
+DD 1953788928,269484048
+DD 303174144,0
+DD 724249344,2745368739
+DD 538976256,1970602101
+DD 4042321920,2324299914
+DD 2981212416,3873833190
+DD 2223277056,151584777
+DD 2576980224,3722248413
+DD 3755990784,2273771655
+DD 1280068608,2206400643
+DD 3419130624,3452764365
+DD 3267543552,2425356432
+DD 875836416,1936916595
+DD 2122219008,4143317238
+DD 1987474944,2644312221
+DD 84215040,3216965823
+DD 1835887872,1381105746
+DD 3082270464,3638034648
+DD 2846468352,3368550600
+DD 825307392,3334865094
+DD 3520188672,2172715137
+DD 387389184,1869545583
+DD 67372032,320012307
+DD 3621246720,1667432547
+DD 336860160,3924361449
+DD 1482184704,2812739751
+DD 976894464,2677997727
+DD 1633771776,3166437564
+DD 3739147776,690552873
+DD 454761216,4193845497
+DD 286331136,791609391
+DD 471604224,3031695540
+DD 842150400,2021130360
+DD 252645120,101056518
+DD 2627509248,3890675943
+DD 370546176,1903231089
+DD 1397969664,3570663636
+DD 404232192,2880110763
+DD 4076007936,2290614408
+DD 572662272,2374828173
+DD 4278124032,1920073842
+DD 1145324544,3115909305
+DD 3486502656,4177002744
+DD 2998055424,2896953516
+DD 3284386560,909508662
+DD 3048584448,707395626
+DD 2054846976,1010565180
+DD 2442236160,4059103473
+DD 606348288,1077936192
+DD 134744064,3553820883
+DD 3907577856,3149594811
+DD 2829625344,1128464451
+DD 1616928768,353697813
+DD 4244438016,2913796269
+DD 1768515840,2004287607
+DD 1347440640,2155872384
+DD 2863311360,2189557890
+DD 3503345664,3974889708
+DD 2694881280,656867367
+DD 2105376000,3856990437
+DD 2711724288,2240086149
+DD 2307492096,892665909
+DD 1650614784,202113036
+DD 2543294208,1094778945
+DD 1414812672,4025417967
+DD 1532713728,2475884691
+DD 505290240,421068825
+DD 2509608192,555810849
+DD 3772833792,235798542
+DD 4294967040,1313734734
+DD 1684300800,1701118053
+DD 3537031680,3183280317
+DD 269488128,3099066552
+DD 3301229568,2408513679
+DD 0,3958046955
+DD 1212696576,3469607118
+DD 2745410304,808452144
+DD 4160222976,1600061535
+DD 1970631936,3318022341
+DD 3688618752,437911578
+DD 2324335104,3789619425
+DD 50529024,3402236106
+DD 3873891840,1195835463
+DD 3671775744,1027407933
+DD 151587072,16842753
+DD 1061109504,3604349142
+DD 3722304768,1448476758
+DD 2492765184,1296891981
+DD 2273806080,218955789
+DD 1549556736,1717960806
+DD 2206434048,3435921612
+DD 33686016,757923885
+DD 3452816640,303169554
+DD 1246382592,538968096
+DD 2425393152,2981167281
+DD 858993408,2576941209
+DD 1936945920,1280049228
+DD 1734829824,3267494082
+DD 4143379968,2122186878
+DD 4092850944,84213765
+DD 2644352256,3082223799
+DD 2139062016,825294897
+DD 3217014528,387383319
+DD 3806519808,3621191895
+DD 1381126656,1482162264
+DD 2610666240,1633747041
+DD 3638089728,454754331
+DD 640034304,471597084
+DD 3368601600,252641295
+DD 926365440,370540566
+DD 3334915584,404226072
+DD 993737472,572653602
+DD 2172748032,1145307204
+DD 2526451200,2998010034
+DD 1869573888,3048538293
+DD 1263225600,2442199185
+DD 320017152,134742024
+DD 3200171520,2829582504
+DD 1667457792,4244373756
+DD 774778368,1347420240
+DD 3924420864,3503292624
+DD 2038003968,2105344125
+DD 2812782336,2307457161
+DD 2358021120,2543255703
+DD 2678038272,1532690523
+DD 1852730880,2509570197
+DD 3166485504,4294902015
+DD 2391707136,3536978130
+DD 690563328,3301179588
+DD 4126536960,1212678216
+DD 4193908992,4160159991
+DD 3065427456,3688562907
+DD 791621376,50528259
+DD 4261281024,3671720154
+DD 3031741440,1061093439
+DD 1499027712,2492727444
+DD 2021160960,1549533276
+DD 2560137216,33685506
+DD 101058048,1246363722
+DD 1785358848,858980403
+DD 3890734848,1734803559
+DD 1179010560,4092788979
+DD 1903259904,2139029631
+DD 3132799488,3806462178
+DD 3570717696,2610626715
+DD 623191296,640024614
+DD 2880154368,926351415
+DD 1111638528,993722427
+DD 2290649088,2526412950
+DD 2728567296,1263206475
+DD 2374864128,3200123070
+DD 4210752000,774766638
+DD 1920102912,2037973113
+DD 117901056,2357985420
+DD 3115956480,1852702830
+DD 1431655680,2391670926
+DD 4177065984,4126474485
+DD 4008635904,3065381046
+DD 2896997376,4261216509
+DD 168430080,1499005017
+DD 909522432,2560098456
+DD 1229539584,1785331818
+DD 707406336,1178992710
+DD 1751672832,3132752058
+DD 1010580480,623181861
+DD 943208448,1111621698
+DD 4059164928,2728525986
+DD 2762253312,4210688250
+DD 1077952512,117899271
+DD 673720320,1431634005
+DD 3553874688,4008575214
+DD 2071689984,168427530
+DD 3149642496,1229520969
+DD 3385444608,1751646312
+DD 1128481536,943194168
+DD 3250700544,2762211492
+DD 353703168,673710120
+DD 3823362816,2071658619
+DD 2913840384,3385393353
+DD 4109693952,3250651329
+DD 2004317952,3823304931
+DD 3351758592,4109631732
+DD 2155905024,3351707847
+DD 2661195264,2661154974
+DD 14737632,939538488
+DD 328965,1090535745
+DD 5789784,369104406
+DD 14277081,1979741814
+DD 6776679,3640711641
+DD 5131854,2466288531
+DD 8487297,1610637408
+DD 13355979,4060148466
+DD 13224393,1912631922
+DD 723723,3254829762
+DD 11447982,2868947883
+DD 6974058,2583730842
+DD 14013909,1962964341
+DD 1579032,100664838
+DD 6118749,1459640151
+DD 8553090,2684395680
+DD 4605510,2432733585
+DD 14671839,4144035831
+DD 14079702,3036722613
+DD 2565927,3372272073
+DD 9079434,2717950626
+DD 3289650,2348846220
+DD 4934475,3523269330
+DD 4342338,2415956112
+DD 14408667,4127258358
+DD 1842204,117442311
+DD 10395294,2801837991
+DD 10263708,654321447
+DD 3815994,2382401166
+DD 13290186,2986390194
+DD 2434341,1224755529
+DD 8092539,3724599006
+DD 855309,1124090691
+DD 7434609,1543527516
+DD 6250335,3607156695
+DD 2039583,3338717127
+DD 16316664,1040203326
+DD 14145495,4110480885
+DD 4079166,2399178639
+DD 10329501,1728079719
+DD 8158332,520101663
+DD 6316128,402659352
+DD 12171705,1845522030
+DD 12500670,2936057775
+DD 12369084,788541231
+DD 9145227,3791708898
+DD 1447446,2231403909
+DD 3421236,218107149
+DD 5066061,1392530259
+DD 12829635,4026593520
+DD 7500402,2617285788
+DD 9803157,1694524773
+DD 11250603,3925928682
+DD 9342606,2734728099
+DD 12237498,2919280302
+DD 8026746,2650840734
+DD 11776947,3959483628
+DD 131586,2147516544
+DD 11842740,754986285
+DD 11382189,1795189611
+DD 10658466,2818615464
+DD 11316396,721431339
+DD 14211288,905983542
+DD 10132122,2785060518
+DD 1513239,3305162181
+DD 1710618,2248181382
+DD 3487029,1291865421
+DD 13421772,855651123
+DD 16250871,4244700669
+DD 10066329,1711302246
+DD 6381921,1476417624
+DD 5921370,2516620950
+DD 15263976,973093434
+DD 2368548,150997257
+DD 5658198,2499843477
+DD 4210752,268439568
+DD 14803425,2013296760
+DD 6513507,3623934168
+DD 592137,1107313218
+DD 3355443,3422604492
+DD 12566463,4009816047
+DD 10000536,637543974
+DD 9934743,3842041317
+DD 8750469,1627414881
+DD 6842472,436214298
+DD 16579836,1056980799
+DD 15527148,989870907
+DD 657930,2181071490
+DD 14342874,3053500086
+DD 7303023,3674266587
+DD 5460819,3556824276
+DD 6447714,2550175896
+DD 10724259,3892373736
+DD 3026478,2332068747
+DD 526344,33554946
+DD 11513775,3942706155
+DD 2631720,167774730
+DD 11579568,738208812
+DD 7631988,486546717
+DD 12763842,2952835248
+DD 12434877,1862299503
+DD 3552822,2365623693
+DD 2236962,2281736328
+DD 3684408,234884622
+DD 6579300,419436825
+DD 1973790,2264958855
+DD 3750201,1308642894
+DD 2894892,184552203
+DD 10921638,2835392937
+DD 3158064,201329676
+DD 15066597,2030074233
+DD 4473924,285217041
+DD 16645629,2130739071
+DD 8947848,570434082
+DD 10461087,3875596263
+DD 6645093,1493195097
+DD 8882055,3774931425
+DD 7039851,3657489114
+DD 16053492,1023425853
+DD 2302755,3355494600
+DD 4737096,301994514
+DD 1052688,67109892
+DD 13750737,1946186868
+DD 5329233,1409307732
+DD 12632256,805318704
+DD 16382457,2113961598
+DD 13816530,3019945140
+DD 10526880,671098920
+DD 5592405,1426085205
+DD 10592673,1744857192
+DD 4276545,1342197840
+DD 16448250,3187719870
+DD 4408131,3489714384
+DD 1250067,3288384708
+DD 12895428,822096177
+DD 3092271,3405827019
+DD 11053224,704653866
+DD 11974326,2902502829
+DD 3947580,251662095
+DD 2829099,3389049546
+DD 12698049,1879076976
+DD 16777215,4278255615
+DD 13158600,838873650
+DD 10855845,1761634665
+DD 2105376,134219784
+DD 9013641,1644192354
+DD 0,0
+DD 9474192,603989028
+DD 4671303,3506491857
+DD 15724527,4211145723
+DD 15395562,3120609978
+DD 12040119,3976261101
+DD 1381653,1157645637
+DD 394758,2164294017
+DD 13487565,1929409395
+DD 11908533,1828744557
+DD 1184274,2214626436
+DD 8289918,2667618207
+DD 12303291,3993038574
+DD 2697513,1241533002
+DD 986895,3271607235
+DD 12105912,771763758
+DD 460551,3238052289
+DD 263172,16777473
+DD 10197915,3858818790
+DD 9737364,620766501
+DD 2171169,1207978056
+DD 6710886,2566953369
+DD 15132390,3103832505
+DD 13553358,3003167667
+DD 15592941,2063629179
+DD 15198183,4177590777
+DD 3881787,3456159438
+DD 16711422,3204497343
+DD 8355711,3741376479
+DD 12961221,1895854449
+DD 10790052,687876393
+DD 3618615,3439381965
+DD 11645361,1811967084
+DD 5000268,318771987
+DD 9539985,1677747300
+DD 7237230,2600508315
+DD 9276813,1660969827
+DD 7763574,2634063261
+DD 197379,3221274816
+DD 2960685,1258310475
+DD 14606046,3070277559
+DD 9868950,2768283045
+DD 2500134,2298513801
+DD 8224125,1593859935
+DD 13027014,2969612721
+DD 6052956,385881879
+DD 13882323,4093703412
+DD 15921906,3154164924
+DD 5197647,3540046803
+DD 1644825,1174423110
+DD 4144959,3472936911
+DD 14474460,922761015
+DD 7960953,1577082462
+DD 1907997,1191200583
+DD 5395026,2483066004
+DD 15461355,4194368250
+DD 15987699,4227923196
+DD 7171437,1526750043
+DD 6184542,2533398423
+DD 16514043,4261478142
+DD 6908265,1509972570
+DD 11711154,2885725356
+DD 15790320,1006648380
+DD 3223857,1275087948
+DD 789516,50332419
+DD 13948116,889206069
+DD 13619151,4076925939
+DD 9211020,587211555
+DD 14869218,3087055032
+DD 7697781,1560304989
+DD 11119017,1778412138
+DD 4868682,2449511058
+DD 5723991,3573601749
+DD 8684676,553656609
+DD 1118481,1140868164
+DD 4539717,1358975313
+DD 1776411,3321939654
+DD 16119285,2097184125
+DD 15000804,956315961
+DD 921102,2197848963
+DD 7566195,3691044060
+DD 11184810,2852170410
+DD 15856113,2080406652
+DD 14540253,1996519287
+DD 5855577,1442862678
+DD 1315860,83887365
+DD 7105644,452991771
+DD 9605778,2751505572
+DD 5526612,352326933
+DD 13684944,872428596
+DD 7895160,503324190
+DD 7368816,469769244
+DD 14935011,4160813304
+DD 4802889,1375752786
+DD 8421504,536879136
+DD 5263440,335549460
+DD 10987431,3909151209
+DD 16185078,3170942397
+DD 7829367,3707821533
+DD 9671571,3825263844
+DD 8816262,2701173153
+DD 8618883,3758153952
+DD 2763306,2315291274
+DD 13092807,4043370993
+DD 5987163,3590379222
+DD 15329769,2046851706
+DD 15658734,3137387451
+DD 9408399,3808486371
+DD 65793,1073758272
+DD 4013373,1325420367
+ALIGN 16
+_Camellia_cbc_encrypt PROC PUBLIC
+$L_Camellia_cbc_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov ecx,DWORD PTR 28[esp]
+ cmp ecx,0
+ je $L016enc_out
+ pushfd
+ cld
+ mov eax,DWORD PTR 24[esp]
+ mov ebx,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 36[esp]
+ mov ebp,DWORD PTR 40[esp]
+ lea esi,DWORD PTR [esp-64]
+ and esi,-64
+ lea edi,DWORD PTR [edx-127]
+ sub edi,esi
+ neg edi
+ and edi,960
+ sub esi,edi
+ mov edi,DWORD PTR 44[esp]
+ xchg esp,esi
+ add esp,4
+ mov DWORD PTR 20[esp],esi
+ mov DWORD PTR 24[esp],eax
+ mov DWORD PTR 28[esp],ebx
+ mov DWORD PTR 32[esp],ecx
+ mov DWORD PTR 36[esp],edx
+ mov DWORD PTR 40[esp],ebp
+ call $L017pic_point
+$L017pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($LCamellia_SBOX-$L017pic_point)[ebp]
+ mov esi,32
+ALIGN 4
+$L018prefetch_sbox:
+ mov eax,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 32[ebp]
+ mov ecx,DWORD PTR 64[ebp]
+ mov edx,DWORD PTR 96[ebp]
+ lea ebp,DWORD PTR 128[ebp]
+ dec esi
+ jnz $L018prefetch_sbox
+ mov eax,DWORD PTR 36[esp]
+ sub ebp,4096
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 272[eax]
+ cmp edi,0
+ je $L019DECRYPT
+ mov ecx,DWORD PTR 32[esp]
+ mov edi,DWORD PTR 40[esp]
+ shl edx,6
+ lea edx,DWORD PTR [edx*1+eax]
+ mov DWORD PTR 16[esp],edx
+ test ecx,4294967280
+ jz $L020enc_tail
+ mov eax,DWORD PTR [edi]
+ mov ebx,DWORD PTR 4[edi]
+ALIGN 4
+$L021enc_loop:
+ mov ecx,DWORD PTR 8[edi]
+ mov edx,DWORD PTR 12[edi]
+ xor eax,DWORD PTR [esi]
+ xor ebx,DWORD PTR 4[esi]
+ xor ecx,DWORD PTR 8[esi]
+ bswap eax
+ xor edx,DWORD PTR 12[esi]
+ bswap ebx
+ mov edi,DWORD PTR 36[esp]
+ bswap ecx
+ bswap edx
+ call __x86_Camellia_encrypt
+ mov esi,DWORD PTR 24[esp]
+ mov edi,DWORD PTR 28[esp]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ mov DWORD PTR [edi],eax
+ bswap edx
+ mov DWORD PTR 4[edi],ebx
+ mov DWORD PTR 8[edi],ecx
+ mov DWORD PTR 12[edi],edx
+ mov ecx,DWORD PTR 32[esp]
+ lea esi,DWORD PTR 16[esi]
+ mov DWORD PTR 24[esp],esi
+ lea edx,DWORD PTR 16[edi]
+ mov DWORD PTR 28[esp],edx
+ sub ecx,16
+ test ecx,4294967280
+ mov DWORD PTR 32[esp],ecx
+ jnz $L021enc_loop
+ test ecx,15
+ jnz $L020enc_tail
+ mov esi,DWORD PTR 40[esp]
+ mov ecx,DWORD PTR 8[edi]
+ mov edx,DWORD PTR 12[edi]
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],ecx
+ mov DWORD PTR 12[esi],edx
+ mov esp,DWORD PTR 20[esp]
+ popfd
+$L016enc_out:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+ pushfd
+ALIGN 4
+$L020enc_tail:
+ mov eax,edi
+ mov edi,DWORD PTR 28[esp]
+ push eax
+ mov ebx,16
+ sub ebx,ecx
+ cmp edi,esi
+ je $L022enc_in_place
+ALIGN 4
+DD 2767451785
+ jmp $L023enc_skip_in_place
+$L022enc_in_place:
+ lea edi,DWORD PTR [ecx*1+edi]
+$L023enc_skip_in_place:
+ mov ecx,ebx
+ xor eax,eax
+ALIGN 4
+DD 2868115081
+ pop edi
+ mov esi,DWORD PTR 28[esp]
+ mov eax,DWORD PTR [edi]
+ mov ebx,DWORD PTR 4[edi]
+ mov DWORD PTR 32[esp],16
+ jmp $L021enc_loop
+ALIGN 16
+$L019DECRYPT:
+ shl edx,6
+ lea edx,DWORD PTR [edx*1+eax]
+ mov DWORD PTR 16[esp],eax
+ mov DWORD PTR 36[esp],edx
+ cmp esi,DWORD PTR 28[esp]
+ je $L024dec_in_place
+ mov edi,DWORD PTR 40[esp]
+ mov DWORD PTR 44[esp],edi
+ALIGN 4
+$L025dec_loop:
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ bswap eax
+ mov edx,DWORD PTR 12[esi]
+ bswap ebx
+ mov edi,DWORD PTR 36[esp]
+ bswap ecx
+ bswap edx
+ call __x86_Camellia_decrypt
+ mov edi,DWORD PTR 44[esp]
+ mov esi,DWORD PTR 32[esp]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ xor eax,DWORD PTR [edi]
+ bswap edx
+ xor ebx,DWORD PTR 4[edi]
+ xor ecx,DWORD PTR 8[edi]
+ xor edx,DWORD PTR 12[edi]
+ sub esi,16
+ jc $L026dec_partial
+ mov DWORD PTR 32[esp],esi
+ mov esi,DWORD PTR 24[esp]
+ mov edi,DWORD PTR 28[esp]
+ mov DWORD PTR [edi],eax
+ mov DWORD PTR 4[edi],ebx
+ mov DWORD PTR 8[edi],ecx
+ mov DWORD PTR 12[edi],edx
+ mov DWORD PTR 44[esp],esi
+ lea esi,DWORD PTR 16[esi]
+ mov DWORD PTR 24[esp],esi
+ lea edi,DWORD PTR 16[edi]
+ mov DWORD PTR 28[esp],edi
+ jnz $L025dec_loop
+ mov edi,DWORD PTR 44[esp]
+$L027dec_end:
+ mov esi,DWORD PTR 40[esp]
+ mov eax,DWORD PTR [edi]
+ mov ebx,DWORD PTR 4[edi]
+ mov ecx,DWORD PTR 8[edi]
+ mov edx,DWORD PTR 12[edi]
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],ecx
+ mov DWORD PTR 12[esi],edx
+ jmp $L028dec_out
+ALIGN 4
+$L026dec_partial:
+ lea edi,DWORD PTR 44[esp]
+ mov DWORD PTR [edi],eax
+ mov DWORD PTR 4[edi],ebx
+ mov DWORD PTR 8[edi],ecx
+ mov DWORD PTR 12[edi],edx
+ lea ecx,DWORD PTR 16[esi]
+ mov esi,edi
+ mov edi,DWORD PTR 28[esp]
+DD 2767451785
+ mov edi,DWORD PTR 24[esp]
+ jmp $L027dec_end
+ALIGN 4
+$L024dec_in_place:
+$L029dec_in_place_loop:
+ lea edi,DWORD PTR 44[esp]
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov edx,DWORD PTR 12[esi]
+ mov DWORD PTR [edi],eax
+ mov DWORD PTR 4[edi],ebx
+ mov DWORD PTR 8[edi],ecx
+ bswap eax
+ mov DWORD PTR 12[edi],edx
+ bswap ebx
+ mov edi,DWORD PTR 36[esp]
+ bswap ecx
+ bswap edx
+ call __x86_Camellia_decrypt
+ mov edi,DWORD PTR 40[esp]
+ mov esi,DWORD PTR 28[esp]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ xor eax,DWORD PTR [edi]
+ bswap edx
+ xor ebx,DWORD PTR 4[edi]
+ xor ecx,DWORD PTR 8[edi]
+ xor edx,DWORD PTR 12[edi]
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],ecx
+ mov DWORD PTR 12[esi],edx
+ lea esi,DWORD PTR 16[esi]
+ mov DWORD PTR 28[esp],esi
+ lea esi,DWORD PTR 44[esp]
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov edx,DWORD PTR 12[esi]
+ mov DWORD PTR [edi],eax
+ mov DWORD PTR 4[edi],ebx
+ mov DWORD PTR 8[edi],ecx
+ mov DWORD PTR 12[edi],edx
+ mov esi,DWORD PTR 24[esp]
+ lea esi,DWORD PTR 16[esi]
+ mov DWORD PTR 24[esp],esi
+ mov ecx,DWORD PTR 32[esp]
+ sub ecx,16
+ jc $L030dec_in_place_partial
+ mov DWORD PTR 32[esp],ecx
+ jnz $L029dec_in_place_loop
+ jmp $L028dec_out
+ALIGN 4
+$L030dec_in_place_partial:
+ mov edi,DWORD PTR 28[esp]
+ lea esi,DWORD PTR 44[esp]
+ lea edi,DWORD PTR [ecx*1+edi]
+ lea esi,DWORD PTR 16[ecx*1+esi]
+ neg ecx
+DD 2767451785
+ALIGN 4
+$L028dec_out:
+ mov esp,DWORD PTR 20[esp]
+ popfd
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_Camellia_cbc_encrypt ENDP
+DB 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54
+DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
+DB 115,108,46,111,114,103,62,0
+.text$ ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86_64.masm
index 0666a8e086..19df1f0306 100644
--- a/contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/camellia/cmll-x86_64.masm
@@ -1,2164 +1,2164 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-
-PUBLIC Camellia_EncryptBlock
-
-ALIGN 16
-Camellia_EncryptBlock PROC PUBLIC
-
- mov eax,128
- sub eax,ecx
- mov ecx,3
- adc ecx,0
- jmp $L$enc_rounds
-
-Camellia_EncryptBlock ENDP
-
-PUBLIC Camellia_EncryptBlock_Rounds
-
-ALIGN 16
-$L$enc_rounds::
-Camellia_EncryptBlock_Rounds PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_Camellia_EncryptBlock_Rounds::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
-
- push rbx
-
- push rbp
-
- push r13
-
- push r14
-
- push r15
-
-$L$enc_prologue::
-
-
- mov r13,rcx
- mov r14,rdx
-
- shl edi,6
- lea rbp,QWORD PTR[$L$Camellia_SBOX]
- lea r15,QWORD PTR[rdi*1+r14]
-
- mov r8d,DWORD PTR[rsi]
- mov r9d,DWORD PTR[4+rsi]
- mov r10d,DWORD PTR[8+rsi]
- bswap r8d
- mov r11d,DWORD PTR[12+rsi]
- bswap r9d
- bswap r10d
- bswap r11d
-
- call _x86_64_Camellia_encrypt
-
- bswap r8d
- bswap r9d
- bswap r10d
- mov DWORD PTR[r13],r8d
- bswap r11d
- mov DWORD PTR[4+r13],r9d
- mov DWORD PTR[8+r13],r10d
- mov DWORD PTR[12+r13],r11d
-
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov rbp,QWORD PTR[24+rsp]
-
- mov rbx,QWORD PTR[32+rsp]
-
- lea rsp,QWORD PTR[40+rsp]
-
-$L$enc_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_Camellia_EncryptBlock_Rounds::
-Camellia_EncryptBlock_Rounds ENDP
-
-
-ALIGN 16
-_x86_64_Camellia_encrypt PROC PRIVATE
-
- xor r9d,DWORD PTR[r14]
- xor r8d,DWORD PTR[4+r14]
- xor r11d,DWORD PTR[8+r14]
- xor r10d,DWORD PTR[12+r14]
-ALIGN 16
-$L$eloop::
- mov ebx,DWORD PTR[16+r14]
- mov eax,DWORD PTR[20+r14]
-
- xor eax,r8d
- xor ebx,r9d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[24+r14]
- mov eax,DWORD PTR[28+r14]
- xor ecx,edx
- ror edx,8
- xor r10d,ecx
- xor r11d,ecx
- xor r11d,edx
- xor eax,r10d
- xor ebx,r11d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[32+r14]
- mov eax,DWORD PTR[36+r14]
- xor ecx,edx
- ror edx,8
- xor r8d,ecx
- xor r9d,ecx
- xor r9d,edx
- xor eax,r8d
- xor ebx,r9d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[40+r14]
- mov eax,DWORD PTR[44+r14]
- xor ecx,edx
- ror edx,8
- xor r10d,ecx
- xor r11d,ecx
- xor r11d,edx
- xor eax,r10d
- xor ebx,r11d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[48+r14]
- mov eax,DWORD PTR[52+r14]
- xor ecx,edx
- ror edx,8
- xor r8d,ecx
- xor r9d,ecx
- xor r9d,edx
- xor eax,r8d
- xor ebx,r9d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[56+r14]
- mov eax,DWORD PTR[60+r14]
- xor ecx,edx
- ror edx,8
- xor r10d,ecx
- xor r11d,ecx
- xor r11d,edx
- xor eax,r10d
- xor ebx,r11d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[64+r14]
- mov eax,DWORD PTR[68+r14]
- xor ecx,edx
- ror edx,8
- xor r8d,ecx
- xor r9d,ecx
- xor r9d,edx
- lea r14,QWORD PTR[64+r14]
- cmp r14,r15
- mov edx,DWORD PTR[8+r14]
- mov ecx,DWORD PTR[12+r14]
- je $L$edone
-
- and eax,r8d
- or edx,r11d
- rol eax,1
- xor r10d,edx
- xor r9d,eax
- and ecx,r10d
- or ebx,r9d
- rol ecx,1
- xor r8d,ebx
- xor r11d,ecx
- jmp $L$eloop
-
-ALIGN 16
-$L$edone::
- xor eax,r10d
- xor ebx,r11d
- xor ecx,r8d
- xor edx,r9d
-
- mov r8d,eax
- mov r9d,ebx
- mov r10d,ecx
- mov r11d,edx
-
-DB 0f3h,0c3h
-
-_x86_64_Camellia_encrypt ENDP
-
-
-PUBLIC Camellia_DecryptBlock
-
-ALIGN 16
-Camellia_DecryptBlock PROC PUBLIC
-
- mov eax,128
- sub eax,ecx
- mov ecx,3
- adc ecx,0
- jmp $L$dec_rounds
-
-Camellia_DecryptBlock ENDP
-
-PUBLIC Camellia_DecryptBlock_Rounds
-
-ALIGN 16
-$L$dec_rounds::
-Camellia_DecryptBlock_Rounds PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_Camellia_DecryptBlock_Rounds::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
-
- push rbx
-
- push rbp
-
- push r13
-
- push r14
-
- push r15
-
-$L$dec_prologue::
-
-
- mov r13,rcx
- mov r15,rdx
-
- shl edi,6
- lea rbp,QWORD PTR[$L$Camellia_SBOX]
- lea r14,QWORD PTR[rdi*1+r15]
-
- mov r8d,DWORD PTR[rsi]
- mov r9d,DWORD PTR[4+rsi]
- mov r10d,DWORD PTR[8+rsi]
- bswap r8d
- mov r11d,DWORD PTR[12+rsi]
- bswap r9d
- bswap r10d
- bswap r11d
-
- call _x86_64_Camellia_decrypt
-
- bswap r8d
- bswap r9d
- bswap r10d
- mov DWORD PTR[r13],r8d
- bswap r11d
- mov DWORD PTR[4+r13],r9d
- mov DWORD PTR[8+r13],r10d
- mov DWORD PTR[12+r13],r11d
-
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov rbp,QWORD PTR[24+rsp]
-
- mov rbx,QWORD PTR[32+rsp]
-
- lea rsp,QWORD PTR[40+rsp]
-
-$L$dec_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_Camellia_DecryptBlock_Rounds::
-Camellia_DecryptBlock_Rounds ENDP
-
-
-ALIGN 16
-_x86_64_Camellia_decrypt PROC PRIVATE
-
- xor r9d,DWORD PTR[r14]
- xor r8d,DWORD PTR[4+r14]
- xor r11d,DWORD PTR[8+r14]
- xor r10d,DWORD PTR[12+r14]
-ALIGN 16
-$L$dloop::
- mov ebx,DWORD PTR[((-8))+r14]
- mov eax,DWORD PTR[((-4))+r14]
-
- xor eax,r8d
- xor ebx,r9d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[((-16))+r14]
- mov eax,DWORD PTR[((-12))+r14]
- xor ecx,edx
- ror edx,8
- xor r10d,ecx
- xor r11d,ecx
- xor r11d,edx
- xor eax,r10d
- xor ebx,r11d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[((-24))+r14]
- mov eax,DWORD PTR[((-20))+r14]
- xor ecx,edx
- ror edx,8
- xor r8d,ecx
- xor r9d,ecx
- xor r9d,edx
- xor eax,r8d
- xor ebx,r9d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[((-32))+r14]
- mov eax,DWORD PTR[((-28))+r14]
- xor ecx,edx
- ror edx,8
- xor r10d,ecx
- xor r11d,ecx
- xor r11d,edx
- xor eax,r10d
- xor ebx,r11d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[((-40))+r14]
- mov eax,DWORD PTR[((-36))+r14]
- xor ecx,edx
- ror edx,8
- xor r8d,ecx
- xor r9d,ecx
- xor r9d,edx
- xor eax,r8d
- xor ebx,r9d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[((-48))+r14]
- mov eax,DWORD PTR[((-44))+r14]
- xor ecx,edx
- ror edx,8
- xor r10d,ecx
- xor r11d,ecx
- xor r11d,edx
- xor eax,r10d
- xor ebx,r11d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[((-56))+r14]
- mov eax,DWORD PTR[((-52))+r14]
- xor ecx,edx
- ror edx,8
- xor r8d,ecx
- xor r9d,ecx
- xor r9d,edx
- lea r14,QWORD PTR[((-64))+r14]
- cmp r14,r15
- mov edx,DWORD PTR[r14]
- mov ecx,DWORD PTR[4+r14]
- je $L$ddone
-
- and eax,r8d
- or edx,r11d
- rol eax,1
- xor r10d,edx
- xor r9d,eax
- and ecx,r10d
- or ebx,r9d
- rol ecx,1
- xor r8d,ebx
- xor r11d,ecx
-
- jmp $L$dloop
-
-ALIGN 16
-$L$ddone::
- xor ecx,r10d
- xor edx,r11d
- xor eax,r8d
- xor ebx,r9d
-
- mov r8d,ecx
- mov r9d,edx
- mov r10d,eax
- mov r11d,ebx
-
-DB 0f3h,0c3h
-
-_x86_64_Camellia_decrypt ENDP
-PUBLIC Camellia_Ekeygen
-
-ALIGN 16
-Camellia_Ekeygen PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_Camellia_Ekeygen::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- push rbx
-
- push rbp
-
- push r13
-
- push r14
-
- push r15
-
-$L$key_prologue::
-
- mov r15d,edi
- mov r13,rdx
-
- mov r8d,DWORD PTR[rsi]
- mov r9d,DWORD PTR[4+rsi]
- mov r10d,DWORD PTR[8+rsi]
- mov r11d,DWORD PTR[12+rsi]
-
- bswap r8d
- bswap r9d
- bswap r10d
- bswap r11d
- mov DWORD PTR[r13],r9d
- mov DWORD PTR[4+r13],r8d
- mov DWORD PTR[8+r13],r11d
- mov DWORD PTR[12+r13],r10d
- cmp r15,128
- je $L$1st128
-
- mov r8d,DWORD PTR[16+rsi]
- mov r9d,DWORD PTR[20+rsi]
- cmp r15,192
- je $L$1st192
- mov r10d,DWORD PTR[24+rsi]
- mov r11d,DWORD PTR[28+rsi]
- jmp $L$1st256
-$L$1st192::
- mov r10d,r8d
- mov r11d,r9d
- not r10d
- not r11d
-$L$1st256::
- bswap r8d
- bswap r9d
- bswap r10d
- bswap r11d
- mov DWORD PTR[32+r13],r9d
- mov DWORD PTR[36+r13],r8d
- mov DWORD PTR[40+r13],r11d
- mov DWORD PTR[44+r13],r10d
- xor r9d,DWORD PTR[r13]
- xor r8d,DWORD PTR[4+r13]
- xor r11d,DWORD PTR[8+r13]
- xor r10d,DWORD PTR[12+r13]
-
-$L$1st128::
- lea r14,QWORD PTR[$L$Camellia_SIGMA]
- lea rbp,QWORD PTR[$L$Camellia_SBOX]
-
- mov ebx,DWORD PTR[r14]
- mov eax,DWORD PTR[4+r14]
- xor eax,r8d
- xor ebx,r9d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[8+r14]
- mov eax,DWORD PTR[12+r14]
- xor ecx,edx
- ror edx,8
- xor r10d,ecx
- xor r11d,ecx
- xor r11d,edx
- xor eax,r10d
- xor ebx,r11d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[16+r14]
- mov eax,DWORD PTR[20+r14]
- xor ecx,edx
- ror edx,8
- xor r8d,ecx
- xor r9d,ecx
- xor r9d,edx
- xor r9d,DWORD PTR[r13]
- xor r8d,DWORD PTR[4+r13]
- xor r11d,DWORD PTR[8+r13]
- xor r10d,DWORD PTR[12+r13]
- xor eax,r8d
- xor ebx,r9d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[24+r14]
- mov eax,DWORD PTR[28+r14]
- xor ecx,edx
- ror edx,8
- xor r10d,ecx
- xor r11d,ecx
- xor r11d,edx
- xor eax,r10d
- xor ebx,r11d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[32+r14]
- mov eax,DWORD PTR[36+r14]
- xor ecx,edx
- ror edx,8
- xor r8d,ecx
- xor r9d,ecx
- xor r9d,edx
- cmp r15,128
- jne $L$2nd256
-
- lea r13,QWORD PTR[128+r13]
- shl r8,32
- shl r10,32
- or r8,r9
- or r10,r11
- mov rax,QWORD PTR[((-128))+r13]
- mov rbx,QWORD PTR[((-120))+r13]
- mov QWORD PTR[((-112))+r13],r8
- mov QWORD PTR[((-104))+r13],r10
- mov r11,rax
- shl rax,15
- mov r9,rbx
- shr r9,49
- shr r11,49
- or rax,r9
- shl rbx,15
- or rbx,r11
- mov QWORD PTR[((-96))+r13],rax
- mov QWORD PTR[((-88))+r13],rbx
- mov r11,r8
- shl r8,15
- mov r9,r10
- shr r9,49
- shr r11,49
- or r8,r9
- shl r10,15
- or r10,r11
- mov QWORD PTR[((-80))+r13],r8
- mov QWORD PTR[((-72))+r13],r10
- mov r11,r8
- shl r8,15
- mov r9,r10
- shr r9,49
- shr r11,49
- or r8,r9
- shl r10,15
- or r10,r11
- mov QWORD PTR[((-64))+r13],r8
- mov QWORD PTR[((-56))+r13],r10
- mov r11,rax
- shl rax,30
- mov r9,rbx
- shr r9,34
- shr r11,34
- or rax,r9
- shl rbx,30
- or rbx,r11
- mov QWORD PTR[((-48))+r13],rax
- mov QWORD PTR[((-40))+r13],rbx
- mov r11,r8
- shl r8,15
- mov r9,r10
- shr r9,49
- shr r11,49
- or r8,r9
- shl r10,15
- or r10,r11
- mov QWORD PTR[((-32))+r13],r8
- mov r11,rax
- shl rax,15
- mov r9,rbx
- shr r9,49
- shr r11,49
- or rax,r9
- shl rbx,15
- or rbx,r11
- mov QWORD PTR[((-24))+r13],rbx
- mov r11,r8
- shl r8,15
- mov r9,r10
- shr r9,49
- shr r11,49
- or r8,r9
- shl r10,15
- or r10,r11
- mov QWORD PTR[((-16))+r13],r8
- mov QWORD PTR[((-8))+r13],r10
- mov r11,rax
- shl rax,17
- mov r9,rbx
- shr r9,47
- shr r11,47
- or rax,r9
- shl rbx,17
- or rbx,r11
- mov QWORD PTR[r13],rax
- mov QWORD PTR[8+r13],rbx
- mov r11,rax
- shl rax,17
- mov r9,rbx
- shr r9,47
- shr r11,47
- or rax,r9
- shl rbx,17
- or rbx,r11
- mov QWORD PTR[16+r13],rax
- mov QWORD PTR[24+r13],rbx
- mov r11,r8
- shl r8,34
- mov r9,r10
- shr r9,30
- shr r11,30
- or r8,r9
- shl r10,34
- or r10,r11
- mov QWORD PTR[32+r13],r8
- mov QWORD PTR[40+r13],r10
- mov r11,rax
- shl rax,17
- mov r9,rbx
- shr r9,47
- shr r11,47
- or rax,r9
- shl rbx,17
- or rbx,r11
- mov QWORD PTR[48+r13],rax
- mov QWORD PTR[56+r13],rbx
- mov r11,r8
- shl r8,17
- mov r9,r10
- shr r9,47
- shr r11,47
- or r8,r9
- shl r10,17
- or r10,r11
- mov QWORD PTR[64+r13],r8
- mov QWORD PTR[72+r13],r10
- mov eax,3
- jmp $L$done
-ALIGN 16
-$L$2nd256::
- mov DWORD PTR[48+r13],r9d
- mov DWORD PTR[52+r13],r8d
- mov DWORD PTR[56+r13],r11d
- mov DWORD PTR[60+r13],r10d
- xor r9d,DWORD PTR[32+r13]
- xor r8d,DWORD PTR[36+r13]
- xor r11d,DWORD PTR[40+r13]
- xor r10d,DWORD PTR[44+r13]
- xor eax,r8d
- xor ebx,r9d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[40+r14]
- mov eax,DWORD PTR[44+r14]
- xor ecx,edx
- ror edx,8
- xor r10d,ecx
- xor r11d,ecx
- xor r11d,edx
- xor eax,r10d
- xor ebx,r11d
- movzx esi,ah
- movzx edi,bl
- mov edx,DWORD PTR[2052+rsi*8+rbp]
- mov ecx,DWORD PTR[rdi*8+rbp]
- movzx esi,al
- shr eax,16
- movzx edi,bh
- xor edx,DWORD PTR[4+rsi*8+rbp]
- shr ebx,16
- xor ecx,DWORD PTR[4+rdi*8+rbp]
- movzx esi,ah
- movzx edi,bl
- xor edx,DWORD PTR[rsi*8+rbp]
- xor ecx,DWORD PTR[2052+rdi*8+rbp]
- movzx esi,al
- movzx edi,bh
- xor edx,DWORD PTR[2048+rsi*8+rbp]
- xor ecx,DWORD PTR[2048+rdi*8+rbp]
- mov ebx,DWORD PTR[48+r14]
- mov eax,DWORD PTR[52+r14]
- xor ecx,edx
- ror edx,8
- xor r8d,ecx
- xor r9d,ecx
- xor r9d,edx
- mov rax,QWORD PTR[r13]
- mov rbx,QWORD PTR[8+r13]
- mov rcx,QWORD PTR[32+r13]
- mov rdx,QWORD PTR[40+r13]
- mov r14,QWORD PTR[48+r13]
- mov r15,QWORD PTR[56+r13]
- lea r13,QWORD PTR[128+r13]
- shl r8,32
- shl r10,32
- or r8,r9
- or r10,r11
- mov QWORD PTR[((-112))+r13],r8
- mov QWORD PTR[((-104))+r13],r10
- mov r11,rcx
- shl rcx,15
- mov r9,rdx
- shr r9,49
- shr r11,49
- or rcx,r9
- shl rdx,15
- or rdx,r11
- mov QWORD PTR[((-96))+r13],rcx
- mov QWORD PTR[((-88))+r13],rdx
- mov r11,r14
- shl r14,15
- mov r9,r15
- shr r9,49
- shr r11,49
- or r14,r9
- shl r15,15
- or r15,r11
- mov QWORD PTR[((-80))+r13],r14
- mov QWORD PTR[((-72))+r13],r15
- mov r11,rcx
- shl rcx,15
- mov r9,rdx
- shr r9,49
- shr r11,49
- or rcx,r9
- shl rdx,15
- or rdx,r11
- mov QWORD PTR[((-64))+r13],rcx
- mov QWORD PTR[((-56))+r13],rdx
- mov r11,r8
- shl r8,30
- mov r9,r10
- shr r9,34
- shr r11,34
- or r8,r9
- shl r10,30
- or r10,r11
- mov QWORD PTR[((-48))+r13],r8
- mov QWORD PTR[((-40))+r13],r10
- mov r11,rax
- shl rax,45
- mov r9,rbx
- shr r9,19
- shr r11,19
- or rax,r9
- shl rbx,45
- or rbx,r11
- mov QWORD PTR[((-32))+r13],rax
- mov QWORD PTR[((-24))+r13],rbx
- mov r11,r14
- shl r14,30
- mov r9,r15
- shr r9,34
- shr r11,34
- or r14,r9
- shl r15,30
- or r15,r11
- mov QWORD PTR[((-16))+r13],r14
- mov QWORD PTR[((-8))+r13],r15
- mov r11,rax
- shl rax,15
- mov r9,rbx
- shr r9,49
- shr r11,49
- or rax,r9
- shl rbx,15
- or rbx,r11
- mov QWORD PTR[r13],rax
- mov QWORD PTR[8+r13],rbx
- mov r11,rcx
- shl rcx,30
- mov r9,rdx
- shr r9,34
- shr r11,34
- or rcx,r9
- shl rdx,30
- or rdx,r11
- mov QWORD PTR[16+r13],rcx
- mov QWORD PTR[24+r13],rdx
- mov r11,r8
- shl r8,30
- mov r9,r10
- shr r9,34
- shr r11,34
- or r8,r9
- shl r10,30
- or r10,r11
- mov QWORD PTR[32+r13],r8
- mov QWORD PTR[40+r13],r10
- mov r11,rax
- shl rax,17
- mov r9,rbx
- shr r9,47
- shr r11,47
- or rax,r9
- shl rbx,17
- or rbx,r11
- mov QWORD PTR[48+r13],rax
- mov QWORD PTR[56+r13],rbx
- mov r11,r14
- shl r14,32
- mov r9,r15
- shr r9,32
- shr r11,32
- or r14,r9
- shl r15,32
- or r15,r11
- mov QWORD PTR[64+r13],r14
- mov QWORD PTR[72+r13],r15
- mov r11,rcx
- shl rcx,34
- mov r9,rdx
- shr r9,30
- shr r11,30
- or rcx,r9
- shl rdx,34
- or rdx,r11
- mov QWORD PTR[80+r13],rcx
- mov QWORD PTR[88+r13],rdx
- mov r11,r14
- shl r14,17
- mov r9,r15
- shr r9,47
- shr r11,47
- or r14,r9
- shl r15,17
- or r15,r11
- mov QWORD PTR[96+r13],r14
- mov QWORD PTR[104+r13],r15
- mov r11,rax
- shl rax,34
- mov r9,rbx
- shr r9,30
- shr r11,30
- or rax,r9
- shl rbx,34
- or rbx,r11
- mov QWORD PTR[112+r13],rax
- mov QWORD PTR[120+r13],rbx
- mov r11,r8
- shl r8,51
- mov r9,r10
- shr r9,13
- shr r11,13
- or r8,r9
- shl r10,51
- or r10,r11
- mov QWORD PTR[128+r13],r8
- mov QWORD PTR[136+r13],r10
- mov eax,4
-$L$done::
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov rbp,QWORD PTR[24+rsp]
-
- mov rbx,QWORD PTR[32+rsp]
-
- lea rsp,QWORD PTR[40+rsp]
-
-$L$key_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_Camellia_Ekeygen::
-Camellia_Ekeygen ENDP
-ALIGN 64
-$L$Camellia_SIGMA::
- DD 03bcc908bh,0a09e667fh,04caa73b2h,0b67ae858h
- DD 0e94f82beh,0c6ef372fh,0f1d36f1ch,054ff53a5h
- DD 0de682d1dh,010e527fah,0b3e6c1fdh,0b05688c2h
- DD 0,0,0,0
-$L$Camellia_SBOX::
- DD 070707000h,070700070h
- DD 082828200h,02c2c002ch
- DD 02c2c2c00h,0b3b300b3h
- DD 0ececec00h,0c0c000c0h
- DD 0b3b3b300h,0e4e400e4h
- DD 027272700h,057570057h
- DD 0c0c0c000h,0eaea00eah
- DD 0e5e5e500h,0aeae00aeh
- DD 0e4e4e400h,023230023h
- DD 085858500h,06b6b006bh
- DD 057575700h,045450045h
- DD 035353500h,0a5a500a5h
- DD 0eaeaea00h,0eded00edh
- DD 00c0c0c00h,04f4f004fh
- DD 0aeaeae00h,01d1d001dh
- DD 041414100h,092920092h
- DD 023232300h,086860086h
- DD 0efefef00h,0afaf00afh
- DD 06b6b6b00h,07c7c007ch
- DD 093939300h,01f1f001fh
- DD 045454500h,03e3e003eh
- DD 019191900h,0dcdc00dch
- DD 0a5a5a500h,05e5e005eh
- DD 021212100h,00b0b000bh
- DD 0ededed00h,0a6a600a6h
- DD 00e0e0e00h,039390039h
- DD 04f4f4f00h,0d5d500d5h
- DD 04e4e4e00h,05d5d005dh
- DD 01d1d1d00h,0d9d900d9h
- DD 065656500h,05a5a005ah
- DD 092929200h,051510051h
- DD 0bdbdbd00h,06c6c006ch
- DD 086868600h,08b8b008bh
- DD 0b8b8b800h,09a9a009ah
- DD 0afafaf00h,0fbfb00fbh
- DD 08f8f8f00h,0b0b000b0h
- DD 07c7c7c00h,074740074h
- DD 0ebebeb00h,02b2b002bh
- DD 01f1f1f00h,0f0f000f0h
- DD 0cecece00h,084840084h
- DD 03e3e3e00h,0dfdf00dfh
- DD 030303000h,0cbcb00cbh
- DD 0dcdcdc00h,034340034h
- DD 05f5f5f00h,076760076h
- DD 05e5e5e00h,06d6d006dh
- DD 0c5c5c500h,0a9a900a9h
- DD 00b0b0b00h,0d1d100d1h
- DD 01a1a1a00h,004040004h
- DD 0a6a6a600h,014140014h
- DD 0e1e1e100h,03a3a003ah
- DD 039393900h,0dede00deh
- DD 0cacaca00h,011110011h
- DD 0d5d5d500h,032320032h
- DD 047474700h,09c9c009ch
- DD 05d5d5d00h,053530053h
- DD 03d3d3d00h,0f2f200f2h
- DD 0d9d9d900h,0fefe00feh
- DD 001010100h,0cfcf00cfh
- DD 05a5a5a00h,0c3c300c3h
- DD 0d6d6d600h,07a7a007ah
- DD 051515100h,024240024h
- DD 056565600h,0e8e800e8h
- DD 06c6c6c00h,060600060h
- DD 04d4d4d00h,069690069h
- DD 08b8b8b00h,0aaaa00aah
- DD 00d0d0d00h,0a0a000a0h
- DD 09a9a9a00h,0a1a100a1h
- DD 066666600h,062620062h
- DD 0fbfbfb00h,054540054h
- DD 0cccccc00h,01e1e001eh
- DD 0b0b0b000h,0e0e000e0h
- DD 02d2d2d00h,064640064h
- DD 074747400h,010100010h
- DD 012121200h,000000000h
- DD 02b2b2b00h,0a3a300a3h
- DD 020202000h,075750075h
- DD 0f0f0f000h,08a8a008ah
- DD 0b1b1b100h,0e6e600e6h
- DD 084848400h,009090009h
- DD 099999900h,0dddd00ddh
- DD 0dfdfdf00h,087870087h
- DD 04c4c4c00h,083830083h
- DD 0cbcbcb00h,0cdcd00cdh
- DD 0c2c2c200h,090900090h
- DD 034343400h,073730073h
- DD 07e7e7e00h,0f6f600f6h
- DD 076767600h,09d9d009dh
- DD 005050500h,0bfbf00bfh
- DD 06d6d6d00h,052520052h
- DD 0b7b7b700h,0d8d800d8h
- DD 0a9a9a900h,0c8c800c8h
- DD 031313100h,0c6c600c6h
- DD 0d1d1d100h,081810081h
- DD 017171700h,06f6f006fh
- DD 004040400h,013130013h
- DD 0d7d7d700h,063630063h
- DD 014141400h,0e9e900e9h
- DD 058585800h,0a7a700a7h
- DD 03a3a3a00h,09f9f009fh
- DD 061616100h,0bcbc00bch
- DD 0dedede00h,029290029h
- DD 01b1b1b00h,0f9f900f9h
- DD 011111100h,02f2f002fh
- DD 01c1c1c00h,0b4b400b4h
- DD 032323200h,078780078h
- DD 00f0f0f00h,006060006h
- DD 09c9c9c00h,0e7e700e7h
- DD 016161600h,071710071h
- DD 053535300h,0d4d400d4h
- DD 018181800h,0abab00abh
- DD 0f2f2f200h,088880088h
- DD 022222200h,08d8d008dh
- DD 0fefefe00h,072720072h
- DD 044444400h,0b9b900b9h
- DD 0cfcfcf00h,0f8f800f8h
- DD 0b2b2b200h,0acac00ach
- DD 0c3c3c300h,036360036h
- DD 0b5b5b500h,02a2a002ah
- DD 07a7a7a00h,03c3c003ch
- DD 091919100h,0f1f100f1h
- DD 024242400h,040400040h
- DD 008080800h,0d3d300d3h
- DD 0e8e8e800h,0bbbb00bbh
- DD 0a8a8a800h,043430043h
- DD 060606000h,015150015h
- DD 0fcfcfc00h,0adad00adh
- DD 069696900h,077770077h
- DD 050505000h,080800080h
- DD 0aaaaaa00h,082820082h
- DD 0d0d0d000h,0ecec00ech
- DD 0a0a0a000h,027270027h
- DD 07d7d7d00h,0e5e500e5h
- DD 0a1a1a100h,085850085h
- DD 089898900h,035350035h
- DD 062626200h,00c0c000ch
- DD 097979700h,041410041h
- DD 054545400h,0efef00efh
- DD 05b5b5b00h,093930093h
- DD 01e1e1e00h,019190019h
- DD 095959500h,021210021h
- DD 0e0e0e000h,00e0e000eh
- DD 0ffffff00h,04e4e004eh
- DD 064646400h,065650065h
- DD 0d2d2d200h,0bdbd00bdh
- DD 010101000h,0b8b800b8h
- DD 0c4c4c400h,08f8f008fh
- DD 000000000h,0ebeb00ebh
- DD 048484800h,0cece00ceh
- DD 0a3a3a300h,030300030h
- DD 0f7f7f700h,05f5f005fh
- DD 075757500h,0c5c500c5h
- DD 0dbdbdb00h,01a1a001ah
- DD 08a8a8a00h,0e1e100e1h
- DD 003030300h,0caca00cah
- DD 0e6e6e600h,047470047h
- DD 0dadada00h,03d3d003dh
- DD 009090900h,001010001h
- DD 03f3f3f00h,0d6d600d6h
- DD 0dddddd00h,056560056h
- DD 094949400h,04d4d004dh
- DD 087878700h,00d0d000dh
- DD 05c5c5c00h,066660066h
- DD 083838300h,0cccc00cch
- DD 002020200h,02d2d002dh
- DD 0cdcdcd00h,012120012h
- DD 04a4a4a00h,020200020h
- DD 090909000h,0b1b100b1h
- DD 033333300h,099990099h
- DD 073737300h,04c4c004ch
- DD 067676700h,0c2c200c2h
- DD 0f6f6f600h,07e7e007eh
- DD 0f3f3f300h,005050005h
- DD 09d9d9d00h,0b7b700b7h
- DD 07f7f7f00h,031310031h
- DD 0bfbfbf00h,017170017h
- DD 0e2e2e200h,0d7d700d7h
- DD 052525200h,058580058h
- DD 09b9b9b00h,061610061h
- DD 0d8d8d800h,01b1b001bh
- DD 026262600h,01c1c001ch
- DD 0c8c8c800h,00f0f000fh
- DD 037373700h,016160016h
- DD 0c6c6c600h,018180018h
- DD 03b3b3b00h,022220022h
- DD 081818100h,044440044h
- DD 096969600h,0b2b200b2h
- DD 06f6f6f00h,0b5b500b5h
- DD 04b4b4b00h,091910091h
- DD 013131300h,008080008h
- DD 0bebebe00h,0a8a800a8h
- DD 063636300h,0fcfc00fch
- DD 02e2e2e00h,050500050h
- DD 0e9e9e900h,0d0d000d0h
- DD 079797900h,07d7d007dh
- DD 0a7a7a700h,089890089h
- DD 08c8c8c00h,097970097h
- DD 09f9f9f00h,05b5b005bh
- DD 06e6e6e00h,095950095h
- DD 0bcbcbc00h,0ffff00ffh
- DD 08e8e8e00h,0d2d200d2h
- DD 029292900h,0c4c400c4h
- DD 0f5f5f500h,048480048h
- DD 0f9f9f900h,0f7f700f7h
- DD 0b6b6b600h,0dbdb00dbh
- DD 02f2f2f00h,003030003h
- DD 0fdfdfd00h,0dada00dah
- DD 0b4b4b400h,03f3f003fh
- DD 059595900h,094940094h
- DD 078787800h,05c5c005ch
- DD 098989800h,002020002h
- DD 006060600h,04a4a004ah
- DD 06a6a6a00h,033330033h
- DD 0e7e7e700h,067670067h
- DD 046464600h,0f3f300f3h
- DD 071717100h,07f7f007fh
- DD 0bababa00h,0e2e200e2h
- DD 0d4d4d400h,09b9b009bh
- DD 025252500h,026260026h
- DD 0ababab00h,037370037h
- DD 042424200h,03b3b003bh
- DD 088888800h,096960096h
- DD 0a2a2a200h,04b4b004bh
- DD 08d8d8d00h,0bebe00beh
- DD 0fafafa00h,02e2e002eh
- DD 072727200h,079790079h
- DD 007070700h,08c8c008ch
- DD 0b9b9b900h,06e6e006eh
- DD 055555500h,08e8e008eh
- DD 0f8f8f800h,0f5f500f5h
- DD 0eeeeee00h,0b6b600b6h
- DD 0acacac00h,0fdfd00fdh
- DD 00a0a0a00h,059590059h
- DD 036363600h,098980098h
- DD 049494900h,06a6a006ah
- DD 02a2a2a00h,046460046h
- DD 068686800h,0baba00bah
- DD 03c3c3c00h,025250025h
- DD 038383800h,042420042h
- DD 0f1f1f100h,0a2a200a2h
- DD 0a4a4a400h,0fafa00fah
- DD 040404000h,007070007h
- DD 028282800h,055550055h
- DD 0d3d3d300h,0eeee00eeh
- DD 07b7b7b00h,00a0a000ah
- DD 0bbbbbb00h,049490049h
- DD 0c9c9c900h,068680068h
- DD 043434300h,038380038h
- DD 0c1c1c100h,0a4a400a4h
- DD 015151500h,028280028h
- DD 0e3e3e300h,07b7b007bh
- DD 0adadad00h,0c9c900c9h
- DD 0f4f4f400h,0c1c100c1h
- DD 077777700h,0e3e300e3h
- DD 0c7c7c700h,0f4f400f4h
- DD 080808000h,0c7c700c7h
- DD 09e9e9e00h,09e9e009eh
- DD 000e0e0e0h,038003838h
- DD 000050505h,041004141h
- DD 000585858h,016001616h
- DD 000d9d9d9h,076007676h
- DD 000676767h,0d900d9d9h
- DD 0004e4e4eh,093009393h
- DD 000818181h,060006060h
- DD 000cbcbcbh,0f200f2f2h
- DD 000c9c9c9h,072007272h
- DD 0000b0b0bh,0c200c2c2h
- DD 000aeaeaeh,0ab00ababh
- DD 0006a6a6ah,09a009a9ah
- DD 000d5d5d5h,075007575h
- DD 000181818h,006000606h
- DD 0005d5d5dh,057005757h
- DD 000828282h,0a000a0a0h
- DD 000464646h,091009191h
- DD 000dfdfdfh,0f700f7f7h
- DD 000d6d6d6h,0b500b5b5h
- DD 000272727h,0c900c9c9h
- DD 0008a8a8ah,0a200a2a2h
- DD 000323232h,08c008c8ch
- DD 0004b4b4bh,0d200d2d2h
- DD 000424242h,090009090h
- DD 000dbdbdbh,0f600f6f6h
- DD 0001c1c1ch,007000707h
- DD 0009e9e9eh,0a700a7a7h
- DD 0009c9c9ch,027002727h
- DD 0003a3a3ah,08e008e8eh
- DD 000cacacah,0b200b2b2h
- DD 000252525h,049004949h
- DD 0007b7b7bh,0de00dedeh
- DD 0000d0d0dh,043004343h
- DD 000717171h,05c005c5ch
- DD 0005f5f5fh,0d700d7d7h
- DD 0001f1f1fh,0c700c7c7h
- DD 000f8f8f8h,03e003e3eh
- DD 000d7d7d7h,0f500f5f5h
- DD 0003e3e3eh,08f008f8fh
- DD 0009d9d9dh,067006767h
- DD 0007c7c7ch,01f001f1fh
- DD 000606060h,018001818h
- DD 000b9b9b9h,06e006e6eh
- DD 000bebebeh,0af00afafh
- DD 000bcbcbch,02f002f2fh
- DD 0008b8b8bh,0e200e2e2h
- DD 000161616h,085008585h
- DD 000343434h,00d000d0dh
- DD 0004d4d4dh,053005353h
- DD 000c3c3c3h,0f000f0f0h
- DD 000727272h,09c009c9ch
- DD 000959595h,065006565h
- DD 000abababh,0ea00eaeah
- DD 0008e8e8eh,0a300a3a3h
- DD 000bababah,0ae00aeaeh
- DD 0007a7a7ah,09e009e9eh
- DD 000b3b3b3h,0ec00ecech
- DD 000020202h,080008080h
- DD 000b4b4b4h,02d002d2dh
- DD 000adadadh,06b006b6bh
- DD 000a2a2a2h,0a800a8a8h
- DD 000acacach,02b002b2bh
- DD 000d8d8d8h,036003636h
- DD 0009a9a9ah,0a600a6a6h
- DD 000171717h,0c500c5c5h
- DD 0001a1a1ah,086008686h
- DD 000353535h,04d004d4dh
- DD 000cccccch,033003333h
- DD 000f7f7f7h,0fd00fdfdh
- DD 000999999h,066006666h
- DD 000616161h,058005858h
- DD 0005a5a5ah,096009696h
- DD 000e8e8e8h,03a003a3ah
- DD 000242424h,009000909h
- DD 000565656h,095009595h
- DD 000404040h,010001010h
- DD 000e1e1e1h,078007878h
- DD 000636363h,0d800d8d8h
- DD 000090909h,042004242h
- DD 000333333h,0cc00cccch
- DD 000bfbfbfh,0ef00efefh
- DD 000989898h,026002626h
- DD 000979797h,0e500e5e5h
- DD 000858585h,061006161h
- DD 000686868h,01a001a1ah
- DD 000fcfcfch,03f003f3fh
- DD 000ececech,03b003b3bh
- DD 0000a0a0ah,082008282h
- DD 000dadadah,0b600b6b6h
- DD 0006f6f6fh,0db00dbdbh
- DD 000535353h,0d400d4d4h
- DD 000626262h,098009898h
- DD 000a3a3a3h,0e800e8e8h
- DD 0002e2e2eh,08b008b8bh
- DD 000080808h,002000202h
- DD 000afafafh,0eb00ebebh
- DD 000282828h,00a000a0ah
- DD 000b0b0b0h,02c002c2ch
- DD 000747474h,01d001d1dh
- DD 000c2c2c2h,0b000b0b0h
- DD 000bdbdbdh,06f006f6fh
- DD 000363636h,08d008d8dh
- DD 000222222h,088008888h
- DD 000383838h,00e000e0eh
- DD 000646464h,019001919h
- DD 0001e1e1eh,087008787h
- DD 000393939h,04e004e4eh
- DD 0002c2c2ch,00b000b0bh
- DD 000a6a6a6h,0a900a9a9h
- DD 000303030h,00c000c0ch
- DD 000e5e5e5h,079007979h
- DD 000444444h,011001111h
- DD 000fdfdfdh,07f007f7fh
- DD 000888888h,022002222h
- DD 0009f9f9fh,0e700e7e7h
- DD 000656565h,059005959h
- DD 000878787h,0e100e1e1h
- DD 0006b6b6bh,0da00dadah
- DD 000f4f4f4h,03d003d3dh
- DD 000232323h,0c800c8c8h
- DD 000484848h,012001212h
- DD 000101010h,004000404h
- DD 000d1d1d1h,074007474h
- DD 000515151h,054005454h
- DD 000c0c0c0h,030003030h
- DD 000f9f9f9h,07e007e7eh
- DD 000d2d2d2h,0b400b4b4h
- DD 000a0a0a0h,028002828h
- DD 000555555h,055005555h
- DD 000a1a1a1h,068006868h
- DD 000414141h,050005050h
- DD 000fafafah,0be00bebeh
- DD 000434343h,0d000d0d0h
- DD 000131313h,0c400c4c4h
- DD 000c4c4c4h,031003131h
- DD 0002f2f2fh,0cb00cbcbh
- DD 000a8a8a8h,02a002a2ah
- DD 000b6b6b6h,0ad00adadh
- DD 0003c3c3ch,00f000f0fh
- DD 0002b2b2bh,0ca00cacah
- DD 000c1c1c1h,070007070h
- DD 000ffffffh,0ff00ffffh
- DD 000c8c8c8h,032003232h
- DD 000a5a5a5h,069006969h
- DD 000202020h,008000808h
- DD 000898989h,062006262h
- DD 000000000h,000000000h
- DD 000909090h,024002424h
- DD 000474747h,0d100d1d1h
- DD 000efefefh,0fb00fbfbh
- DD 000eaeaeah,0ba00babah
- DD 000b7b7b7h,0ed00ededh
- DD 000151515h,045004545h
- DD 000060606h,081008181h
- DD 000cdcdcdh,073007373h
- DD 000b5b5b5h,06d006d6dh
- DD 000121212h,084008484h
- DD 0007e7e7eh,09f009f9fh
- DD 000bbbbbbh,0ee00eeeeh
- DD 000292929h,04a004a4ah
- DD 0000f0f0fh,0c300c3c3h
- DD 000b8b8b8h,02e002e2eh
- DD 000070707h,0c100c1c1h
- DD 000040404h,001000101h
- DD 0009b9b9bh,0e600e6e6h
- DD 000949494h,025002525h
- DD 000212121h,048004848h
- DD 000666666h,099009999h
- DD 000e6e6e6h,0b900b9b9h
- DD 000cececeh,0b300b3b3h
- DD 000edededh,07b007b7bh
- DD 000e7e7e7h,0f900f9f9h
- DD 0003b3b3bh,0ce00ceceh
- DD 000fefefeh,0bf00bfbfh
- DD 0007f7f7fh,0df00dfdfh
- DD 000c5c5c5h,071007171h
- DD 000a4a4a4h,029002929h
- DD 000373737h,0cd00cdcdh
- DD 000b1b1b1h,06c006c6ch
- DD 0004c4c4ch,013001313h
- DD 000919191h,064006464h
- DD 0006e6e6eh,09b009b9bh
- DD 0008d8d8dh,063006363h
- DD 000767676h,09d009d9dh
- DD 000030303h,0c000c0c0h
- DD 0002d2d2dh,04b004b4bh
- DD 000dededeh,0b700b7b7h
- DD 000969696h,0a500a5a5h
- DD 000262626h,089008989h
- DD 0007d7d7dh,05f005f5fh
- DD 000c6c6c6h,0b100b1b1h
- DD 0005c5c5ch,017001717h
- DD 000d3d3d3h,0f400f4f4h
- DD 000f2f2f2h,0bc00bcbch
- DD 0004f4f4fh,0d300d3d3h
- DD 000191919h,046004646h
- DD 0003f3f3fh,0cf00cfcfh
- DD 000dcdcdch,037003737h
- DD 000797979h,05e005e5eh
- DD 0001d1d1dh,047004747h
- DD 000525252h,094009494h
- DD 000ebebebh,0fa00fafah
- DD 000f3f3f3h,0fc00fcfch
- DD 0006d6d6dh,05b005b5bh
- DD 0005e5e5eh,097009797h
- DD 000fbfbfbh,0fe00fefeh
- DD 000696969h,05a005a5ah
- DD 000b2b2b2h,0ac00acach
- DD 000f0f0f0h,03c003c3ch
- DD 000313131h,04c004c4ch
- DD 0000c0c0ch,003000303h
- DD 000d4d4d4h,035003535h
- DD 000cfcfcfh,0f300f3f3h
- DD 0008c8c8ch,023002323h
- DD 000e2e2e2h,0b800b8b8h
- DD 000757575h,05d005d5dh
- DD 000a9a9a9h,06a006a6ah
- DD 0004a4a4ah,092009292h
- DD 000575757h,0d500d5d5h
- DD 000848484h,021002121h
- DD 000111111h,044004444h
- DD 000454545h,051005151h
- DD 0001b1b1bh,0c600c6c6h
- DD 000f5f5f5h,07d007d7dh
- DD 000e4e4e4h,039003939h
- DD 0000e0e0eh,083008383h
- DD 000737373h,0dc00dcdch
- DD 000aaaaaah,0aa00aaaah
- DD 000f1f1f1h,07c007c7ch
- DD 000ddddddh,077007777h
- DD 000595959h,056005656h
- DD 000141414h,005000505h
- DD 0006c6c6ch,01b001b1bh
- DD 000929292h,0a400a4a4h
- DD 000545454h,015001515h
- DD 000d0d0d0h,034003434h
- DD 000787878h,01e001e1eh
- DD 000707070h,01c001c1ch
- DD 000e3e3e3h,0f800f8f8h
- DD 000494949h,052005252h
- DD 000808080h,020002020h
- DD 000505050h,014001414h
- DD 000a7a7a7h,0e900e9e9h
- DD 000f6f6f6h,0bd00bdbdh
- DD 000777777h,0dd00ddddh
- DD 000939393h,0e400e4e4h
- DD 000868686h,0a100a1a1h
- DD 000838383h,0e000e0e0h
- DD 0002a2a2ah,08a008a8ah
- DD 000c7c7c7h,0f100f1f1h
- DD 0005b5b5bh,0d600d6d6h
- DD 000e9e9e9h,07a007a7ah
- DD 000eeeeeeh,0bb00bbbbh
- DD 0008f8f8fh,0e300e3e3h
- DD 000010101h,040004040h
- DD 0003d3d3dh,04f004f4fh
-PUBLIC Camellia_cbc_encrypt
-
-ALIGN 16
-Camellia_cbc_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_Camellia_cbc_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- cmp rdx,0
- je $L$cbc_abort
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$cbc_prologue::
-
- mov rbp,rsp
-
- sub rsp,64
- and rsp,-64
-
-
-
- lea r10,QWORD PTR[((-64-63))+rcx]
- sub r10,rsp
- neg r10
- and r10,03C0h
- sub rsp,r10
-
-
- mov r12,rdi
- mov r13,rsi
- mov rbx,r8
- mov r14,rcx
- mov r15d,DWORD PTR[272+rcx]
-
- mov QWORD PTR[40+rsp],r8
- mov QWORD PTR[48+rsp],rbp
-
-
-$L$cbc_body::
- lea rbp,QWORD PTR[$L$Camellia_SBOX]
-
- mov ecx,32
-ALIGN 4
-$L$cbc_prefetch_sbox::
- mov rax,QWORD PTR[rbp]
- mov rsi,QWORD PTR[32+rbp]
- mov rdi,QWORD PTR[64+rbp]
- mov r11,QWORD PTR[96+rbp]
- lea rbp,QWORD PTR[128+rbp]
- loop $L$cbc_prefetch_sbox
- sub rbp,4096
- shl r15,6
- mov rcx,rdx
- lea r15,QWORD PTR[r15*1+r14]
-
- cmp r9d,0
- je $L$CBC_DECRYPT
-
- and rdx,-16
- and rcx,15
- lea rdx,QWORD PTR[rdx*1+r12]
- mov QWORD PTR[rsp],r14
- mov QWORD PTR[8+rsp],rdx
- mov QWORD PTR[16+rsp],rcx
-
- cmp rdx,r12
- mov r8d,DWORD PTR[rbx]
- mov r9d,DWORD PTR[4+rbx]
- mov r10d,DWORD PTR[8+rbx]
- mov r11d,DWORD PTR[12+rbx]
- je $L$cbc_enc_tail
- jmp $L$cbc_eloop
-
-ALIGN 16
-$L$cbc_eloop::
- xor r8d,DWORD PTR[r12]
- xor r9d,DWORD PTR[4+r12]
- xor r10d,DWORD PTR[8+r12]
- bswap r8d
- xor r11d,DWORD PTR[12+r12]
- bswap r9d
- bswap r10d
- bswap r11d
-
- call _x86_64_Camellia_encrypt
-
- mov r14,QWORD PTR[rsp]
- bswap r8d
- mov rdx,QWORD PTR[8+rsp]
- bswap r9d
- mov rcx,QWORD PTR[16+rsp]
- bswap r10d
- mov DWORD PTR[r13],r8d
- bswap r11d
- mov DWORD PTR[4+r13],r9d
- mov DWORD PTR[8+r13],r10d
- lea r12,QWORD PTR[16+r12]
- mov DWORD PTR[12+r13],r11d
- cmp r12,rdx
- lea r13,QWORD PTR[16+r13]
- jne $L$cbc_eloop
-
- cmp rcx,0
- jne $L$cbc_enc_tail
-
- mov r13,QWORD PTR[40+rsp]
- mov DWORD PTR[r13],r8d
- mov DWORD PTR[4+r13],r9d
- mov DWORD PTR[8+r13],r10d
- mov DWORD PTR[12+r13],r11d
- jmp $L$cbc_done
-
-ALIGN 16
-$L$cbc_enc_tail::
- xor rax,rax
- mov QWORD PTR[((0+24))+rsp],rax
- mov QWORD PTR[((8+24))+rsp],rax
- mov QWORD PTR[16+rsp],rax
-
-$L$cbc_enc_pushf::
- pushfq
- cld
- mov rsi,r12
- lea rdi,QWORD PTR[((8+24))+rsp]
- DD 09066A4F3h
- popfq
-$L$cbc_enc_popf::
-
- lea r12,QWORD PTR[24+rsp]
- lea rax,QWORD PTR[((16+24))+rsp]
- mov QWORD PTR[8+rsp],rax
- jmp $L$cbc_eloop
-
-ALIGN 16
-$L$CBC_DECRYPT::
- xchg r15,r14
- add rdx,15
- and rcx,15
- and rdx,-16
- mov QWORD PTR[rsp],r14
- lea rdx,QWORD PTR[rdx*1+r12]
- mov QWORD PTR[8+rsp],rdx
- mov QWORD PTR[16+rsp],rcx
-
- mov rax,QWORD PTR[rbx]
- mov rbx,QWORD PTR[8+rbx]
- jmp $L$cbc_dloop
-ALIGN 16
-$L$cbc_dloop::
- mov r8d,DWORD PTR[r12]
- mov r9d,DWORD PTR[4+r12]
- mov r10d,DWORD PTR[8+r12]
- bswap r8d
- mov r11d,DWORD PTR[12+r12]
- bswap r9d
- mov QWORD PTR[((0+24))+rsp],rax
- bswap r10d
- mov QWORD PTR[((8+24))+rsp],rbx
- bswap r11d
-
- call _x86_64_Camellia_decrypt
-
- mov r14,QWORD PTR[rsp]
- mov rdx,QWORD PTR[8+rsp]
- mov rcx,QWORD PTR[16+rsp]
-
- bswap r8d
- mov rax,QWORD PTR[r12]
- bswap r9d
- mov rbx,QWORD PTR[8+r12]
- bswap r10d
- xor r8d,DWORD PTR[((0+24))+rsp]
- bswap r11d
- xor r9d,DWORD PTR[((4+24))+rsp]
- xor r10d,DWORD PTR[((8+24))+rsp]
- lea r12,QWORD PTR[16+r12]
- xor r11d,DWORD PTR[((12+24))+rsp]
- cmp r12,rdx
- je $L$cbc_ddone
-
- mov DWORD PTR[r13],r8d
- mov DWORD PTR[4+r13],r9d
- mov DWORD PTR[8+r13],r10d
- mov DWORD PTR[12+r13],r11d
-
- lea r13,QWORD PTR[16+r13]
- jmp $L$cbc_dloop
-
-ALIGN 16
-$L$cbc_ddone::
- mov rdx,QWORD PTR[40+rsp]
- cmp rcx,0
- jne $L$cbc_dec_tail
-
- mov DWORD PTR[r13],r8d
- mov DWORD PTR[4+r13],r9d
- mov DWORD PTR[8+r13],r10d
- mov DWORD PTR[12+r13],r11d
-
- mov QWORD PTR[rdx],rax
- mov QWORD PTR[8+rdx],rbx
- jmp $L$cbc_done
-ALIGN 16
-$L$cbc_dec_tail::
- mov DWORD PTR[((0+24))+rsp],r8d
- mov DWORD PTR[((4+24))+rsp],r9d
- mov DWORD PTR[((8+24))+rsp],r10d
- mov DWORD PTR[((12+24))+rsp],r11d
-
-$L$cbc_dec_pushf::
- pushfq
- cld
- lea rsi,QWORD PTR[((8+24))+rsp]
- lea rdi,QWORD PTR[r13]
- DD 09066A4F3h
- popfq
-$L$cbc_dec_popf::
-
- mov QWORD PTR[rdx],rax
- mov QWORD PTR[8+rdx],rbx
- jmp $L$cbc_done
-
-ALIGN 16
-$L$cbc_done::
- mov rcx,QWORD PTR[48+rsp]
-
- mov r15,QWORD PTR[rcx]
-
- mov r14,QWORD PTR[8+rcx]
-
- mov r13,QWORD PTR[16+rcx]
-
- mov r12,QWORD PTR[24+rcx]
-
- mov rbp,QWORD PTR[32+rcx]
-
- mov rbx,QWORD PTR[40+rcx]
-
- lea rsp,QWORD PTR[48+rcx]
-
-$L$cbc_abort::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_Camellia_cbc_encrypt::
-Camellia_cbc_encrypt ENDP
-
-DB 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54
-DB 95,54,52,32,98,121,32,60,97,112,112,114,111,64,111,112
-DB 101,110,115,115,108,46,111,114,103,62,0
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-common_se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- lea rsp,QWORD PTR[((-64))+rsp]
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
-
- lea rax,QWORD PTR[40+rax]
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r13,QWORD PTR[((-24))+rax]
- mov r14,QWORD PTR[((-32))+rax]
- mov r15,QWORD PTR[((-40))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- jmp $L$common_seh_exit
-common_se_handler ENDP
-
-
-ALIGN 16
-cbc_se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- lea rsp,QWORD PTR[((-64))+rsp]
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- lea r10,QWORD PTR[$L$cbc_prologue]
- cmp rbx,r10
- jb $L$in_cbc_prologue
-
- lea r10,QWORD PTR[$L$cbc_body]
- cmp rbx,r10
- jb $L$in_cbc_frame_setup
-
- mov rax,QWORD PTR[152+r8]
-
- lea r10,QWORD PTR[$L$cbc_abort]
- cmp rbx,r10
- jae $L$in_cbc_prologue
-
-
- lea r10,QWORD PTR[$L$cbc_enc_pushf]
- cmp rbx,r10
- jbe $L$in_cbc_no_flag
- lea rax,QWORD PTR[8+rax]
- lea r10,QWORD PTR[$L$cbc_enc_popf]
- cmp rbx,r10
- jb $L$in_cbc_no_flag
- lea rax,QWORD PTR[((-8))+rax]
- lea r10,QWORD PTR[$L$cbc_dec_pushf]
- cmp rbx,r10
- jbe $L$in_cbc_no_flag
- lea rax,QWORD PTR[8+rax]
- lea r10,QWORD PTR[$L$cbc_dec_popf]
- cmp rbx,r10
- jb $L$in_cbc_no_flag
- lea rax,QWORD PTR[((-8))+rax]
-
-$L$in_cbc_no_flag::
- mov rax,QWORD PTR[48+rax]
- lea rax,QWORD PTR[48+rax]
-
-$L$in_cbc_frame_setup::
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$in_cbc_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
-ALIGN 4
-$L$common_seh_exit::
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- lea rsp,QWORD PTR[64+rsp]
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-cbc_se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_Camellia_EncryptBlock_Rounds
- DD imagerel $L$SEH_end_Camellia_EncryptBlock_Rounds
- DD imagerel $L$SEH_info_Camellia_EncryptBlock_Rounds
-
- DD imagerel $L$SEH_begin_Camellia_DecryptBlock_Rounds
- DD imagerel $L$SEH_end_Camellia_DecryptBlock_Rounds
- DD imagerel $L$SEH_info_Camellia_DecryptBlock_Rounds
-
- DD imagerel $L$SEH_begin_Camellia_Ekeygen
- DD imagerel $L$SEH_end_Camellia_Ekeygen
- DD imagerel $L$SEH_info_Camellia_Ekeygen
-
- DD imagerel $L$SEH_begin_Camellia_cbc_encrypt
- DD imagerel $L$SEH_end_Camellia_cbc_encrypt
- DD imagerel $L$SEH_info_Camellia_cbc_encrypt
-
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_Camellia_EncryptBlock_Rounds::
-DB 9,0,0,0
- DD imagerel common_se_handler
- DD imagerel $L$enc_prologue,imagerel $L$enc_epilogue
-$L$SEH_info_Camellia_DecryptBlock_Rounds::
-DB 9,0,0,0
- DD imagerel common_se_handler
- DD imagerel $L$dec_prologue,imagerel $L$dec_epilogue
-$L$SEH_info_Camellia_Ekeygen::
-DB 9,0,0,0
- DD imagerel common_se_handler
- DD imagerel $L$key_prologue,imagerel $L$key_epilogue
-$L$SEH_info_Camellia_cbc_encrypt::
-DB 9,0,0,0
- DD imagerel cbc_se_handler
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+
+PUBLIC Camellia_EncryptBlock
+
+ALIGN 16
+Camellia_EncryptBlock PROC PUBLIC
+
+ mov eax,128
+ sub eax,ecx
+ mov ecx,3
+ adc ecx,0
+ jmp $L$enc_rounds
+
+Camellia_EncryptBlock ENDP
+
+PUBLIC Camellia_EncryptBlock_Rounds
+
+ALIGN 16
+$L$enc_rounds::
+Camellia_EncryptBlock_Rounds PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_Camellia_EncryptBlock_Rounds::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+
+ push rbx
+
+ push rbp
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$enc_prologue::
+
+
+ mov r13,rcx
+ mov r14,rdx
+
+ shl edi,6
+ lea rbp,QWORD PTR[$L$Camellia_SBOX]
+ lea r15,QWORD PTR[rdi*1+r14]
+
+ mov r8d,DWORD PTR[rsi]
+ mov r9d,DWORD PTR[4+rsi]
+ mov r10d,DWORD PTR[8+rsi]
+ bswap r8d
+ mov r11d,DWORD PTR[12+rsi]
+ bswap r9d
+ bswap r10d
+ bswap r11d
+
+ call _x86_64_Camellia_encrypt
+
+ bswap r8d
+ bswap r9d
+ bswap r10d
+ mov DWORD PTR[r13],r8d
+ bswap r11d
+ mov DWORD PTR[4+r13],r9d
+ mov DWORD PTR[8+r13],r10d
+ mov DWORD PTR[12+r13],r11d
+
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov rbp,QWORD PTR[24+rsp]
+
+ mov rbx,QWORD PTR[32+rsp]
+
+ lea rsp,QWORD PTR[40+rsp]
+
+$L$enc_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_Camellia_EncryptBlock_Rounds::
+Camellia_EncryptBlock_Rounds ENDP
+
+
+ALIGN 16
+_x86_64_Camellia_encrypt PROC PRIVATE
+
+ xor r9d,DWORD PTR[r14]
+ xor r8d,DWORD PTR[4+r14]
+ xor r11d,DWORD PTR[8+r14]
+ xor r10d,DWORD PTR[12+r14]
+ALIGN 16
+$L$eloop::
+ mov ebx,DWORD PTR[16+r14]
+ mov eax,DWORD PTR[20+r14]
+
+ xor eax,r8d
+ xor ebx,r9d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[24+r14]
+ mov eax,DWORD PTR[28+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r10d,ecx
+ xor r11d,ecx
+ xor r11d,edx
+ xor eax,r10d
+ xor ebx,r11d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[32+r14]
+ mov eax,DWORD PTR[36+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r8d,ecx
+ xor r9d,ecx
+ xor r9d,edx
+ xor eax,r8d
+ xor ebx,r9d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[40+r14]
+ mov eax,DWORD PTR[44+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r10d,ecx
+ xor r11d,ecx
+ xor r11d,edx
+ xor eax,r10d
+ xor ebx,r11d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[48+r14]
+ mov eax,DWORD PTR[52+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r8d,ecx
+ xor r9d,ecx
+ xor r9d,edx
+ xor eax,r8d
+ xor ebx,r9d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[56+r14]
+ mov eax,DWORD PTR[60+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r10d,ecx
+ xor r11d,ecx
+ xor r11d,edx
+ xor eax,r10d
+ xor ebx,r11d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[64+r14]
+ mov eax,DWORD PTR[68+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r8d,ecx
+ xor r9d,ecx
+ xor r9d,edx
+ lea r14,QWORD PTR[64+r14]
+ cmp r14,r15
+ mov edx,DWORD PTR[8+r14]
+ mov ecx,DWORD PTR[12+r14]
+ je $L$edone
+
+ and eax,r8d
+ or edx,r11d
+ rol eax,1
+ xor r10d,edx
+ xor r9d,eax
+ and ecx,r10d
+ or ebx,r9d
+ rol ecx,1
+ xor r8d,ebx
+ xor r11d,ecx
+ jmp $L$eloop
+
+ALIGN 16
+$L$edone::
+ xor eax,r10d
+ xor ebx,r11d
+ xor ecx,r8d
+ xor edx,r9d
+
+ mov r8d,eax
+ mov r9d,ebx
+ mov r10d,ecx
+ mov r11d,edx
+
+DB 0f3h,0c3h
+
+_x86_64_Camellia_encrypt ENDP
+
+
+PUBLIC Camellia_DecryptBlock
+
+ALIGN 16
+Camellia_DecryptBlock PROC PUBLIC
+
+ mov eax,128
+ sub eax,ecx
+ mov ecx,3
+ adc ecx,0
+ jmp $L$dec_rounds
+
+Camellia_DecryptBlock ENDP
+
+PUBLIC Camellia_DecryptBlock_Rounds
+
+ALIGN 16
+$L$dec_rounds::
+Camellia_DecryptBlock_Rounds PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_Camellia_DecryptBlock_Rounds::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+
+ push rbx
+
+ push rbp
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$dec_prologue::
+
+
+ mov r13,rcx
+ mov r15,rdx
+
+ shl edi,6
+ lea rbp,QWORD PTR[$L$Camellia_SBOX]
+ lea r14,QWORD PTR[rdi*1+r15]
+
+ mov r8d,DWORD PTR[rsi]
+ mov r9d,DWORD PTR[4+rsi]
+ mov r10d,DWORD PTR[8+rsi]
+ bswap r8d
+ mov r11d,DWORD PTR[12+rsi]
+ bswap r9d
+ bswap r10d
+ bswap r11d
+
+ call _x86_64_Camellia_decrypt
+
+ bswap r8d
+ bswap r9d
+ bswap r10d
+ mov DWORD PTR[r13],r8d
+ bswap r11d
+ mov DWORD PTR[4+r13],r9d
+ mov DWORD PTR[8+r13],r10d
+ mov DWORD PTR[12+r13],r11d
+
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov rbp,QWORD PTR[24+rsp]
+
+ mov rbx,QWORD PTR[32+rsp]
+
+ lea rsp,QWORD PTR[40+rsp]
+
+$L$dec_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_Camellia_DecryptBlock_Rounds::
+Camellia_DecryptBlock_Rounds ENDP
+
+
+ALIGN 16
+_x86_64_Camellia_decrypt PROC PRIVATE
+
+ xor r9d,DWORD PTR[r14]
+ xor r8d,DWORD PTR[4+r14]
+ xor r11d,DWORD PTR[8+r14]
+ xor r10d,DWORD PTR[12+r14]
+ALIGN 16
+$L$dloop::
+ mov ebx,DWORD PTR[((-8))+r14]
+ mov eax,DWORD PTR[((-4))+r14]
+
+ xor eax,r8d
+ xor ebx,r9d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[((-16))+r14]
+ mov eax,DWORD PTR[((-12))+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r10d,ecx
+ xor r11d,ecx
+ xor r11d,edx
+ xor eax,r10d
+ xor ebx,r11d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[((-24))+r14]
+ mov eax,DWORD PTR[((-20))+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r8d,ecx
+ xor r9d,ecx
+ xor r9d,edx
+ xor eax,r8d
+ xor ebx,r9d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[((-32))+r14]
+ mov eax,DWORD PTR[((-28))+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r10d,ecx
+ xor r11d,ecx
+ xor r11d,edx
+ xor eax,r10d
+ xor ebx,r11d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[((-40))+r14]
+ mov eax,DWORD PTR[((-36))+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r8d,ecx
+ xor r9d,ecx
+ xor r9d,edx
+ xor eax,r8d
+ xor ebx,r9d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[((-48))+r14]
+ mov eax,DWORD PTR[((-44))+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r10d,ecx
+ xor r11d,ecx
+ xor r11d,edx
+ xor eax,r10d
+ xor ebx,r11d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[((-56))+r14]
+ mov eax,DWORD PTR[((-52))+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r8d,ecx
+ xor r9d,ecx
+ xor r9d,edx
+ lea r14,QWORD PTR[((-64))+r14]
+ cmp r14,r15
+ mov edx,DWORD PTR[r14]
+ mov ecx,DWORD PTR[4+r14]
+ je $L$ddone
+
+ and eax,r8d
+ or edx,r11d
+ rol eax,1
+ xor r10d,edx
+ xor r9d,eax
+ and ecx,r10d
+ or ebx,r9d
+ rol ecx,1
+ xor r8d,ebx
+ xor r11d,ecx
+
+ jmp $L$dloop
+
+ALIGN 16
+$L$ddone::
+ xor ecx,r10d
+ xor edx,r11d
+ xor eax,r8d
+ xor ebx,r9d
+
+ mov r8d,ecx
+ mov r9d,edx
+ mov r10d,eax
+ mov r11d,ebx
+
+DB 0f3h,0c3h
+
+_x86_64_Camellia_decrypt ENDP
+PUBLIC Camellia_Ekeygen
+
+ALIGN 16
+Camellia_Ekeygen PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_Camellia_Ekeygen::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ push rbx
+
+ push rbp
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$key_prologue::
+
+ mov r15d,edi
+ mov r13,rdx
+
+ mov r8d,DWORD PTR[rsi]
+ mov r9d,DWORD PTR[4+rsi]
+ mov r10d,DWORD PTR[8+rsi]
+ mov r11d,DWORD PTR[12+rsi]
+
+ bswap r8d
+ bswap r9d
+ bswap r10d
+ bswap r11d
+ mov DWORD PTR[r13],r9d
+ mov DWORD PTR[4+r13],r8d
+ mov DWORD PTR[8+r13],r11d
+ mov DWORD PTR[12+r13],r10d
+ cmp r15,128
+ je $L$1st128
+
+ mov r8d,DWORD PTR[16+rsi]
+ mov r9d,DWORD PTR[20+rsi]
+ cmp r15,192
+ je $L$1st192
+ mov r10d,DWORD PTR[24+rsi]
+ mov r11d,DWORD PTR[28+rsi]
+ jmp $L$1st256
+$L$1st192::
+ mov r10d,r8d
+ mov r11d,r9d
+ not r10d
+ not r11d
+$L$1st256::
+ bswap r8d
+ bswap r9d
+ bswap r10d
+ bswap r11d
+ mov DWORD PTR[32+r13],r9d
+ mov DWORD PTR[36+r13],r8d
+ mov DWORD PTR[40+r13],r11d
+ mov DWORD PTR[44+r13],r10d
+ xor r9d,DWORD PTR[r13]
+ xor r8d,DWORD PTR[4+r13]
+ xor r11d,DWORD PTR[8+r13]
+ xor r10d,DWORD PTR[12+r13]
+
+$L$1st128::
+ lea r14,QWORD PTR[$L$Camellia_SIGMA]
+ lea rbp,QWORD PTR[$L$Camellia_SBOX]
+
+ mov ebx,DWORD PTR[r14]
+ mov eax,DWORD PTR[4+r14]
+ xor eax,r8d
+ xor ebx,r9d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[8+r14]
+ mov eax,DWORD PTR[12+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r10d,ecx
+ xor r11d,ecx
+ xor r11d,edx
+ xor eax,r10d
+ xor ebx,r11d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[16+r14]
+ mov eax,DWORD PTR[20+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r8d,ecx
+ xor r9d,ecx
+ xor r9d,edx
+ xor r9d,DWORD PTR[r13]
+ xor r8d,DWORD PTR[4+r13]
+ xor r11d,DWORD PTR[8+r13]
+ xor r10d,DWORD PTR[12+r13]
+ xor eax,r8d
+ xor ebx,r9d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[24+r14]
+ mov eax,DWORD PTR[28+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r10d,ecx
+ xor r11d,ecx
+ xor r11d,edx
+ xor eax,r10d
+ xor ebx,r11d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[32+r14]
+ mov eax,DWORD PTR[36+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r8d,ecx
+ xor r9d,ecx
+ xor r9d,edx
+ cmp r15,128
+ jne $L$2nd256
+
+ lea r13,QWORD PTR[128+r13]
+ shl r8,32
+ shl r10,32
+ or r8,r9
+ or r10,r11
+ mov rax,QWORD PTR[((-128))+r13]
+ mov rbx,QWORD PTR[((-120))+r13]
+ mov QWORD PTR[((-112))+r13],r8
+ mov QWORD PTR[((-104))+r13],r10
+ mov r11,rax
+ shl rax,15
+ mov r9,rbx
+ shr r9,49
+ shr r11,49
+ or rax,r9
+ shl rbx,15
+ or rbx,r11
+ mov QWORD PTR[((-96))+r13],rax
+ mov QWORD PTR[((-88))+r13],rbx
+ mov r11,r8
+ shl r8,15
+ mov r9,r10
+ shr r9,49
+ shr r11,49
+ or r8,r9
+ shl r10,15
+ or r10,r11
+ mov QWORD PTR[((-80))+r13],r8
+ mov QWORD PTR[((-72))+r13],r10
+ mov r11,r8
+ shl r8,15
+ mov r9,r10
+ shr r9,49
+ shr r11,49
+ or r8,r9
+ shl r10,15
+ or r10,r11
+ mov QWORD PTR[((-64))+r13],r8
+ mov QWORD PTR[((-56))+r13],r10
+ mov r11,rax
+ shl rax,30
+ mov r9,rbx
+ shr r9,34
+ shr r11,34
+ or rax,r9
+ shl rbx,30
+ or rbx,r11
+ mov QWORD PTR[((-48))+r13],rax
+ mov QWORD PTR[((-40))+r13],rbx
+ mov r11,r8
+ shl r8,15
+ mov r9,r10
+ shr r9,49
+ shr r11,49
+ or r8,r9
+ shl r10,15
+ or r10,r11
+ mov QWORD PTR[((-32))+r13],r8
+ mov r11,rax
+ shl rax,15
+ mov r9,rbx
+ shr r9,49
+ shr r11,49
+ or rax,r9
+ shl rbx,15
+ or rbx,r11
+ mov QWORD PTR[((-24))+r13],rbx
+ mov r11,r8
+ shl r8,15
+ mov r9,r10
+ shr r9,49
+ shr r11,49
+ or r8,r9
+ shl r10,15
+ or r10,r11
+ mov QWORD PTR[((-16))+r13],r8
+ mov QWORD PTR[((-8))+r13],r10
+ mov r11,rax
+ shl rax,17
+ mov r9,rbx
+ shr r9,47
+ shr r11,47
+ or rax,r9
+ shl rbx,17
+ or rbx,r11
+ mov QWORD PTR[r13],rax
+ mov QWORD PTR[8+r13],rbx
+ mov r11,rax
+ shl rax,17
+ mov r9,rbx
+ shr r9,47
+ shr r11,47
+ or rax,r9
+ shl rbx,17
+ or rbx,r11
+ mov QWORD PTR[16+r13],rax
+ mov QWORD PTR[24+r13],rbx
+ mov r11,r8
+ shl r8,34
+ mov r9,r10
+ shr r9,30
+ shr r11,30
+ or r8,r9
+ shl r10,34
+ or r10,r11
+ mov QWORD PTR[32+r13],r8
+ mov QWORD PTR[40+r13],r10
+ mov r11,rax
+ shl rax,17
+ mov r9,rbx
+ shr r9,47
+ shr r11,47
+ or rax,r9
+ shl rbx,17
+ or rbx,r11
+ mov QWORD PTR[48+r13],rax
+ mov QWORD PTR[56+r13],rbx
+ mov r11,r8
+ shl r8,17
+ mov r9,r10
+ shr r9,47
+ shr r11,47
+ or r8,r9
+ shl r10,17
+ or r10,r11
+ mov QWORD PTR[64+r13],r8
+ mov QWORD PTR[72+r13],r10
+ mov eax,3
+ jmp $L$done
+ALIGN 16
+$L$2nd256::
+ mov DWORD PTR[48+r13],r9d
+ mov DWORD PTR[52+r13],r8d
+ mov DWORD PTR[56+r13],r11d
+ mov DWORD PTR[60+r13],r10d
+ xor r9d,DWORD PTR[32+r13]
+ xor r8d,DWORD PTR[36+r13]
+ xor r11d,DWORD PTR[40+r13]
+ xor r10d,DWORD PTR[44+r13]
+ xor eax,r8d
+ xor ebx,r9d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[40+r14]
+ mov eax,DWORD PTR[44+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r10d,ecx
+ xor r11d,ecx
+ xor r11d,edx
+ xor eax,r10d
+ xor ebx,r11d
+ movzx esi,ah
+ movzx edi,bl
+ mov edx,DWORD PTR[2052+rsi*8+rbp]
+ mov ecx,DWORD PTR[rdi*8+rbp]
+ movzx esi,al
+ shr eax,16
+ movzx edi,bh
+ xor edx,DWORD PTR[4+rsi*8+rbp]
+ shr ebx,16
+ xor ecx,DWORD PTR[4+rdi*8+rbp]
+ movzx esi,ah
+ movzx edi,bl
+ xor edx,DWORD PTR[rsi*8+rbp]
+ xor ecx,DWORD PTR[2052+rdi*8+rbp]
+ movzx esi,al
+ movzx edi,bh
+ xor edx,DWORD PTR[2048+rsi*8+rbp]
+ xor ecx,DWORD PTR[2048+rdi*8+rbp]
+ mov ebx,DWORD PTR[48+r14]
+ mov eax,DWORD PTR[52+r14]
+ xor ecx,edx
+ ror edx,8
+ xor r8d,ecx
+ xor r9d,ecx
+ xor r9d,edx
+ mov rax,QWORD PTR[r13]
+ mov rbx,QWORD PTR[8+r13]
+ mov rcx,QWORD PTR[32+r13]
+ mov rdx,QWORD PTR[40+r13]
+ mov r14,QWORD PTR[48+r13]
+ mov r15,QWORD PTR[56+r13]
+ lea r13,QWORD PTR[128+r13]
+ shl r8,32
+ shl r10,32
+ or r8,r9
+ or r10,r11
+ mov QWORD PTR[((-112))+r13],r8
+ mov QWORD PTR[((-104))+r13],r10
+ mov r11,rcx
+ shl rcx,15
+ mov r9,rdx
+ shr r9,49
+ shr r11,49
+ or rcx,r9
+ shl rdx,15
+ or rdx,r11
+ mov QWORD PTR[((-96))+r13],rcx
+ mov QWORD PTR[((-88))+r13],rdx
+ mov r11,r14
+ shl r14,15
+ mov r9,r15
+ shr r9,49
+ shr r11,49
+ or r14,r9
+ shl r15,15
+ or r15,r11
+ mov QWORD PTR[((-80))+r13],r14
+ mov QWORD PTR[((-72))+r13],r15
+ mov r11,rcx
+ shl rcx,15
+ mov r9,rdx
+ shr r9,49
+ shr r11,49
+ or rcx,r9
+ shl rdx,15
+ or rdx,r11
+ mov QWORD PTR[((-64))+r13],rcx
+ mov QWORD PTR[((-56))+r13],rdx
+ mov r11,r8
+ shl r8,30
+ mov r9,r10
+ shr r9,34
+ shr r11,34
+ or r8,r9
+ shl r10,30
+ or r10,r11
+ mov QWORD PTR[((-48))+r13],r8
+ mov QWORD PTR[((-40))+r13],r10
+ mov r11,rax
+ shl rax,45
+ mov r9,rbx
+ shr r9,19
+ shr r11,19
+ or rax,r9
+ shl rbx,45
+ or rbx,r11
+ mov QWORD PTR[((-32))+r13],rax
+ mov QWORD PTR[((-24))+r13],rbx
+ mov r11,r14
+ shl r14,30
+ mov r9,r15
+ shr r9,34
+ shr r11,34
+ or r14,r9
+ shl r15,30
+ or r15,r11
+ mov QWORD PTR[((-16))+r13],r14
+ mov QWORD PTR[((-8))+r13],r15
+ mov r11,rax
+ shl rax,15
+ mov r9,rbx
+ shr r9,49
+ shr r11,49
+ or rax,r9
+ shl rbx,15
+ or rbx,r11
+ mov QWORD PTR[r13],rax
+ mov QWORD PTR[8+r13],rbx
+ mov r11,rcx
+ shl rcx,30
+ mov r9,rdx
+ shr r9,34
+ shr r11,34
+ or rcx,r9
+ shl rdx,30
+ or rdx,r11
+ mov QWORD PTR[16+r13],rcx
+ mov QWORD PTR[24+r13],rdx
+ mov r11,r8
+ shl r8,30
+ mov r9,r10
+ shr r9,34
+ shr r11,34
+ or r8,r9
+ shl r10,30
+ or r10,r11
+ mov QWORD PTR[32+r13],r8
+ mov QWORD PTR[40+r13],r10
+ mov r11,rax
+ shl rax,17
+ mov r9,rbx
+ shr r9,47
+ shr r11,47
+ or rax,r9
+ shl rbx,17
+ or rbx,r11
+ mov QWORD PTR[48+r13],rax
+ mov QWORD PTR[56+r13],rbx
+ mov r11,r14
+ shl r14,32
+ mov r9,r15
+ shr r9,32
+ shr r11,32
+ or r14,r9
+ shl r15,32
+ or r15,r11
+ mov QWORD PTR[64+r13],r14
+ mov QWORD PTR[72+r13],r15
+ mov r11,rcx
+ shl rcx,34
+ mov r9,rdx
+ shr r9,30
+ shr r11,30
+ or rcx,r9
+ shl rdx,34
+ or rdx,r11
+ mov QWORD PTR[80+r13],rcx
+ mov QWORD PTR[88+r13],rdx
+ mov r11,r14
+ shl r14,17
+ mov r9,r15
+ shr r9,47
+ shr r11,47
+ or r14,r9
+ shl r15,17
+ or r15,r11
+ mov QWORD PTR[96+r13],r14
+ mov QWORD PTR[104+r13],r15
+ mov r11,rax
+ shl rax,34
+ mov r9,rbx
+ shr r9,30
+ shr r11,30
+ or rax,r9
+ shl rbx,34
+ or rbx,r11
+ mov QWORD PTR[112+r13],rax
+ mov QWORD PTR[120+r13],rbx
+ mov r11,r8
+ shl r8,51
+ mov r9,r10
+ shr r9,13
+ shr r11,13
+ or r8,r9
+ shl r10,51
+ or r10,r11
+ mov QWORD PTR[128+r13],r8
+ mov QWORD PTR[136+r13],r10
+ mov eax,4
+$L$done::
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov rbp,QWORD PTR[24+rsp]
+
+ mov rbx,QWORD PTR[32+rsp]
+
+ lea rsp,QWORD PTR[40+rsp]
+
+$L$key_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_Camellia_Ekeygen::
+Camellia_Ekeygen ENDP
+ALIGN 64
+$L$Camellia_SIGMA::
+ DD 03bcc908bh,0a09e667fh,04caa73b2h,0b67ae858h
+ DD 0e94f82beh,0c6ef372fh,0f1d36f1ch,054ff53a5h
+ DD 0de682d1dh,010e527fah,0b3e6c1fdh,0b05688c2h
+ DD 0,0,0,0
+$L$Camellia_SBOX::
+ DD 070707000h,070700070h
+ DD 082828200h,02c2c002ch
+ DD 02c2c2c00h,0b3b300b3h
+ DD 0ececec00h,0c0c000c0h
+ DD 0b3b3b300h,0e4e400e4h
+ DD 027272700h,057570057h
+ DD 0c0c0c000h,0eaea00eah
+ DD 0e5e5e500h,0aeae00aeh
+ DD 0e4e4e400h,023230023h
+ DD 085858500h,06b6b006bh
+ DD 057575700h,045450045h
+ DD 035353500h,0a5a500a5h
+ DD 0eaeaea00h,0eded00edh
+ DD 00c0c0c00h,04f4f004fh
+ DD 0aeaeae00h,01d1d001dh
+ DD 041414100h,092920092h
+ DD 023232300h,086860086h
+ DD 0efefef00h,0afaf00afh
+ DD 06b6b6b00h,07c7c007ch
+ DD 093939300h,01f1f001fh
+ DD 045454500h,03e3e003eh
+ DD 019191900h,0dcdc00dch
+ DD 0a5a5a500h,05e5e005eh
+ DD 021212100h,00b0b000bh
+ DD 0ededed00h,0a6a600a6h
+ DD 00e0e0e00h,039390039h
+ DD 04f4f4f00h,0d5d500d5h
+ DD 04e4e4e00h,05d5d005dh
+ DD 01d1d1d00h,0d9d900d9h
+ DD 065656500h,05a5a005ah
+ DD 092929200h,051510051h
+ DD 0bdbdbd00h,06c6c006ch
+ DD 086868600h,08b8b008bh
+ DD 0b8b8b800h,09a9a009ah
+ DD 0afafaf00h,0fbfb00fbh
+ DD 08f8f8f00h,0b0b000b0h
+ DD 07c7c7c00h,074740074h
+ DD 0ebebeb00h,02b2b002bh
+ DD 01f1f1f00h,0f0f000f0h
+ DD 0cecece00h,084840084h
+ DD 03e3e3e00h,0dfdf00dfh
+ DD 030303000h,0cbcb00cbh
+ DD 0dcdcdc00h,034340034h
+ DD 05f5f5f00h,076760076h
+ DD 05e5e5e00h,06d6d006dh
+ DD 0c5c5c500h,0a9a900a9h
+ DD 00b0b0b00h,0d1d100d1h
+ DD 01a1a1a00h,004040004h
+ DD 0a6a6a600h,014140014h
+ DD 0e1e1e100h,03a3a003ah
+ DD 039393900h,0dede00deh
+ DD 0cacaca00h,011110011h
+ DD 0d5d5d500h,032320032h
+ DD 047474700h,09c9c009ch
+ DD 05d5d5d00h,053530053h
+ DD 03d3d3d00h,0f2f200f2h
+ DD 0d9d9d900h,0fefe00feh
+ DD 001010100h,0cfcf00cfh
+ DD 05a5a5a00h,0c3c300c3h
+ DD 0d6d6d600h,07a7a007ah
+ DD 051515100h,024240024h
+ DD 056565600h,0e8e800e8h
+ DD 06c6c6c00h,060600060h
+ DD 04d4d4d00h,069690069h
+ DD 08b8b8b00h,0aaaa00aah
+ DD 00d0d0d00h,0a0a000a0h
+ DD 09a9a9a00h,0a1a100a1h
+ DD 066666600h,062620062h
+ DD 0fbfbfb00h,054540054h
+ DD 0cccccc00h,01e1e001eh
+ DD 0b0b0b000h,0e0e000e0h
+ DD 02d2d2d00h,064640064h
+ DD 074747400h,010100010h
+ DD 012121200h,000000000h
+ DD 02b2b2b00h,0a3a300a3h
+ DD 020202000h,075750075h
+ DD 0f0f0f000h,08a8a008ah
+ DD 0b1b1b100h,0e6e600e6h
+ DD 084848400h,009090009h
+ DD 099999900h,0dddd00ddh
+ DD 0dfdfdf00h,087870087h
+ DD 04c4c4c00h,083830083h
+ DD 0cbcbcb00h,0cdcd00cdh
+ DD 0c2c2c200h,090900090h
+ DD 034343400h,073730073h
+ DD 07e7e7e00h,0f6f600f6h
+ DD 076767600h,09d9d009dh
+ DD 005050500h,0bfbf00bfh
+ DD 06d6d6d00h,052520052h
+ DD 0b7b7b700h,0d8d800d8h
+ DD 0a9a9a900h,0c8c800c8h
+ DD 031313100h,0c6c600c6h
+ DD 0d1d1d100h,081810081h
+ DD 017171700h,06f6f006fh
+ DD 004040400h,013130013h
+ DD 0d7d7d700h,063630063h
+ DD 014141400h,0e9e900e9h
+ DD 058585800h,0a7a700a7h
+ DD 03a3a3a00h,09f9f009fh
+ DD 061616100h,0bcbc00bch
+ DD 0dedede00h,029290029h
+ DD 01b1b1b00h,0f9f900f9h
+ DD 011111100h,02f2f002fh
+ DD 01c1c1c00h,0b4b400b4h
+ DD 032323200h,078780078h
+ DD 00f0f0f00h,006060006h
+ DD 09c9c9c00h,0e7e700e7h
+ DD 016161600h,071710071h
+ DD 053535300h,0d4d400d4h
+ DD 018181800h,0abab00abh
+ DD 0f2f2f200h,088880088h
+ DD 022222200h,08d8d008dh
+ DD 0fefefe00h,072720072h
+ DD 044444400h,0b9b900b9h
+ DD 0cfcfcf00h,0f8f800f8h
+ DD 0b2b2b200h,0acac00ach
+ DD 0c3c3c300h,036360036h
+ DD 0b5b5b500h,02a2a002ah
+ DD 07a7a7a00h,03c3c003ch
+ DD 091919100h,0f1f100f1h
+ DD 024242400h,040400040h
+ DD 008080800h,0d3d300d3h
+ DD 0e8e8e800h,0bbbb00bbh
+ DD 0a8a8a800h,043430043h
+ DD 060606000h,015150015h
+ DD 0fcfcfc00h,0adad00adh
+ DD 069696900h,077770077h
+ DD 050505000h,080800080h
+ DD 0aaaaaa00h,082820082h
+ DD 0d0d0d000h,0ecec00ech
+ DD 0a0a0a000h,027270027h
+ DD 07d7d7d00h,0e5e500e5h
+ DD 0a1a1a100h,085850085h
+ DD 089898900h,035350035h
+ DD 062626200h,00c0c000ch
+ DD 097979700h,041410041h
+ DD 054545400h,0efef00efh
+ DD 05b5b5b00h,093930093h
+ DD 01e1e1e00h,019190019h
+ DD 095959500h,021210021h
+ DD 0e0e0e000h,00e0e000eh
+ DD 0ffffff00h,04e4e004eh
+ DD 064646400h,065650065h
+ DD 0d2d2d200h,0bdbd00bdh
+ DD 010101000h,0b8b800b8h
+ DD 0c4c4c400h,08f8f008fh
+ DD 000000000h,0ebeb00ebh
+ DD 048484800h,0cece00ceh
+ DD 0a3a3a300h,030300030h
+ DD 0f7f7f700h,05f5f005fh
+ DD 075757500h,0c5c500c5h
+ DD 0dbdbdb00h,01a1a001ah
+ DD 08a8a8a00h,0e1e100e1h
+ DD 003030300h,0caca00cah
+ DD 0e6e6e600h,047470047h
+ DD 0dadada00h,03d3d003dh
+ DD 009090900h,001010001h
+ DD 03f3f3f00h,0d6d600d6h
+ DD 0dddddd00h,056560056h
+ DD 094949400h,04d4d004dh
+ DD 087878700h,00d0d000dh
+ DD 05c5c5c00h,066660066h
+ DD 083838300h,0cccc00cch
+ DD 002020200h,02d2d002dh
+ DD 0cdcdcd00h,012120012h
+ DD 04a4a4a00h,020200020h
+ DD 090909000h,0b1b100b1h
+ DD 033333300h,099990099h
+ DD 073737300h,04c4c004ch
+ DD 067676700h,0c2c200c2h
+ DD 0f6f6f600h,07e7e007eh
+ DD 0f3f3f300h,005050005h
+ DD 09d9d9d00h,0b7b700b7h
+ DD 07f7f7f00h,031310031h
+ DD 0bfbfbf00h,017170017h
+ DD 0e2e2e200h,0d7d700d7h
+ DD 052525200h,058580058h
+ DD 09b9b9b00h,061610061h
+ DD 0d8d8d800h,01b1b001bh
+ DD 026262600h,01c1c001ch
+ DD 0c8c8c800h,00f0f000fh
+ DD 037373700h,016160016h
+ DD 0c6c6c600h,018180018h
+ DD 03b3b3b00h,022220022h
+ DD 081818100h,044440044h
+ DD 096969600h,0b2b200b2h
+ DD 06f6f6f00h,0b5b500b5h
+ DD 04b4b4b00h,091910091h
+ DD 013131300h,008080008h
+ DD 0bebebe00h,0a8a800a8h
+ DD 063636300h,0fcfc00fch
+ DD 02e2e2e00h,050500050h
+ DD 0e9e9e900h,0d0d000d0h
+ DD 079797900h,07d7d007dh
+ DD 0a7a7a700h,089890089h
+ DD 08c8c8c00h,097970097h
+ DD 09f9f9f00h,05b5b005bh
+ DD 06e6e6e00h,095950095h
+ DD 0bcbcbc00h,0ffff00ffh
+ DD 08e8e8e00h,0d2d200d2h
+ DD 029292900h,0c4c400c4h
+ DD 0f5f5f500h,048480048h
+ DD 0f9f9f900h,0f7f700f7h
+ DD 0b6b6b600h,0dbdb00dbh
+ DD 02f2f2f00h,003030003h
+ DD 0fdfdfd00h,0dada00dah
+ DD 0b4b4b400h,03f3f003fh
+ DD 059595900h,094940094h
+ DD 078787800h,05c5c005ch
+ DD 098989800h,002020002h
+ DD 006060600h,04a4a004ah
+ DD 06a6a6a00h,033330033h
+ DD 0e7e7e700h,067670067h
+ DD 046464600h,0f3f300f3h
+ DD 071717100h,07f7f007fh
+ DD 0bababa00h,0e2e200e2h
+ DD 0d4d4d400h,09b9b009bh
+ DD 025252500h,026260026h
+ DD 0ababab00h,037370037h
+ DD 042424200h,03b3b003bh
+ DD 088888800h,096960096h
+ DD 0a2a2a200h,04b4b004bh
+ DD 08d8d8d00h,0bebe00beh
+ DD 0fafafa00h,02e2e002eh
+ DD 072727200h,079790079h
+ DD 007070700h,08c8c008ch
+ DD 0b9b9b900h,06e6e006eh
+ DD 055555500h,08e8e008eh
+ DD 0f8f8f800h,0f5f500f5h
+ DD 0eeeeee00h,0b6b600b6h
+ DD 0acacac00h,0fdfd00fdh
+ DD 00a0a0a00h,059590059h
+ DD 036363600h,098980098h
+ DD 049494900h,06a6a006ah
+ DD 02a2a2a00h,046460046h
+ DD 068686800h,0baba00bah
+ DD 03c3c3c00h,025250025h
+ DD 038383800h,042420042h
+ DD 0f1f1f100h,0a2a200a2h
+ DD 0a4a4a400h,0fafa00fah
+ DD 040404000h,007070007h
+ DD 028282800h,055550055h
+ DD 0d3d3d300h,0eeee00eeh
+ DD 07b7b7b00h,00a0a000ah
+ DD 0bbbbbb00h,049490049h
+ DD 0c9c9c900h,068680068h
+ DD 043434300h,038380038h
+ DD 0c1c1c100h,0a4a400a4h
+ DD 015151500h,028280028h
+ DD 0e3e3e300h,07b7b007bh
+ DD 0adadad00h,0c9c900c9h
+ DD 0f4f4f400h,0c1c100c1h
+ DD 077777700h,0e3e300e3h
+ DD 0c7c7c700h,0f4f400f4h
+ DD 080808000h,0c7c700c7h
+ DD 09e9e9e00h,09e9e009eh
+ DD 000e0e0e0h,038003838h
+ DD 000050505h,041004141h
+ DD 000585858h,016001616h
+ DD 000d9d9d9h,076007676h
+ DD 000676767h,0d900d9d9h
+ DD 0004e4e4eh,093009393h
+ DD 000818181h,060006060h
+ DD 000cbcbcbh,0f200f2f2h
+ DD 000c9c9c9h,072007272h
+ DD 0000b0b0bh,0c200c2c2h
+ DD 000aeaeaeh,0ab00ababh
+ DD 0006a6a6ah,09a009a9ah
+ DD 000d5d5d5h,075007575h
+ DD 000181818h,006000606h
+ DD 0005d5d5dh,057005757h
+ DD 000828282h,0a000a0a0h
+ DD 000464646h,091009191h
+ DD 000dfdfdfh,0f700f7f7h
+ DD 000d6d6d6h,0b500b5b5h
+ DD 000272727h,0c900c9c9h
+ DD 0008a8a8ah,0a200a2a2h
+ DD 000323232h,08c008c8ch
+ DD 0004b4b4bh,0d200d2d2h
+ DD 000424242h,090009090h
+ DD 000dbdbdbh,0f600f6f6h
+ DD 0001c1c1ch,007000707h
+ DD 0009e9e9eh,0a700a7a7h
+ DD 0009c9c9ch,027002727h
+ DD 0003a3a3ah,08e008e8eh
+ DD 000cacacah,0b200b2b2h
+ DD 000252525h,049004949h
+ DD 0007b7b7bh,0de00dedeh
+ DD 0000d0d0dh,043004343h
+ DD 000717171h,05c005c5ch
+ DD 0005f5f5fh,0d700d7d7h
+ DD 0001f1f1fh,0c700c7c7h
+ DD 000f8f8f8h,03e003e3eh
+ DD 000d7d7d7h,0f500f5f5h
+ DD 0003e3e3eh,08f008f8fh
+ DD 0009d9d9dh,067006767h
+ DD 0007c7c7ch,01f001f1fh
+ DD 000606060h,018001818h
+ DD 000b9b9b9h,06e006e6eh
+ DD 000bebebeh,0af00afafh
+ DD 000bcbcbch,02f002f2fh
+ DD 0008b8b8bh,0e200e2e2h
+ DD 000161616h,085008585h
+ DD 000343434h,00d000d0dh
+ DD 0004d4d4dh,053005353h
+ DD 000c3c3c3h,0f000f0f0h
+ DD 000727272h,09c009c9ch
+ DD 000959595h,065006565h
+ DD 000abababh,0ea00eaeah
+ DD 0008e8e8eh,0a300a3a3h
+ DD 000bababah,0ae00aeaeh
+ DD 0007a7a7ah,09e009e9eh
+ DD 000b3b3b3h,0ec00ecech
+ DD 000020202h,080008080h
+ DD 000b4b4b4h,02d002d2dh
+ DD 000adadadh,06b006b6bh
+ DD 000a2a2a2h,0a800a8a8h
+ DD 000acacach,02b002b2bh
+ DD 000d8d8d8h,036003636h
+ DD 0009a9a9ah,0a600a6a6h
+ DD 000171717h,0c500c5c5h
+ DD 0001a1a1ah,086008686h
+ DD 000353535h,04d004d4dh
+ DD 000cccccch,033003333h
+ DD 000f7f7f7h,0fd00fdfdh
+ DD 000999999h,066006666h
+ DD 000616161h,058005858h
+ DD 0005a5a5ah,096009696h
+ DD 000e8e8e8h,03a003a3ah
+ DD 000242424h,009000909h
+ DD 000565656h,095009595h
+ DD 000404040h,010001010h
+ DD 000e1e1e1h,078007878h
+ DD 000636363h,0d800d8d8h
+ DD 000090909h,042004242h
+ DD 000333333h,0cc00cccch
+ DD 000bfbfbfh,0ef00efefh
+ DD 000989898h,026002626h
+ DD 000979797h,0e500e5e5h
+ DD 000858585h,061006161h
+ DD 000686868h,01a001a1ah
+ DD 000fcfcfch,03f003f3fh
+ DD 000ececech,03b003b3bh
+ DD 0000a0a0ah,082008282h
+ DD 000dadadah,0b600b6b6h
+ DD 0006f6f6fh,0db00dbdbh
+ DD 000535353h,0d400d4d4h
+ DD 000626262h,098009898h
+ DD 000a3a3a3h,0e800e8e8h
+ DD 0002e2e2eh,08b008b8bh
+ DD 000080808h,002000202h
+ DD 000afafafh,0eb00ebebh
+ DD 000282828h,00a000a0ah
+ DD 000b0b0b0h,02c002c2ch
+ DD 000747474h,01d001d1dh
+ DD 000c2c2c2h,0b000b0b0h
+ DD 000bdbdbdh,06f006f6fh
+ DD 000363636h,08d008d8dh
+ DD 000222222h,088008888h
+ DD 000383838h,00e000e0eh
+ DD 000646464h,019001919h
+ DD 0001e1e1eh,087008787h
+ DD 000393939h,04e004e4eh
+ DD 0002c2c2ch,00b000b0bh
+ DD 000a6a6a6h,0a900a9a9h
+ DD 000303030h,00c000c0ch
+ DD 000e5e5e5h,079007979h
+ DD 000444444h,011001111h
+ DD 000fdfdfdh,07f007f7fh
+ DD 000888888h,022002222h
+ DD 0009f9f9fh,0e700e7e7h
+ DD 000656565h,059005959h
+ DD 000878787h,0e100e1e1h
+ DD 0006b6b6bh,0da00dadah
+ DD 000f4f4f4h,03d003d3dh
+ DD 000232323h,0c800c8c8h
+ DD 000484848h,012001212h
+ DD 000101010h,004000404h
+ DD 000d1d1d1h,074007474h
+ DD 000515151h,054005454h
+ DD 000c0c0c0h,030003030h
+ DD 000f9f9f9h,07e007e7eh
+ DD 000d2d2d2h,0b400b4b4h
+ DD 000a0a0a0h,028002828h
+ DD 000555555h,055005555h
+ DD 000a1a1a1h,068006868h
+ DD 000414141h,050005050h
+ DD 000fafafah,0be00bebeh
+ DD 000434343h,0d000d0d0h
+ DD 000131313h,0c400c4c4h
+ DD 000c4c4c4h,031003131h
+ DD 0002f2f2fh,0cb00cbcbh
+ DD 000a8a8a8h,02a002a2ah
+ DD 000b6b6b6h,0ad00adadh
+ DD 0003c3c3ch,00f000f0fh
+ DD 0002b2b2bh,0ca00cacah
+ DD 000c1c1c1h,070007070h
+ DD 000ffffffh,0ff00ffffh
+ DD 000c8c8c8h,032003232h
+ DD 000a5a5a5h,069006969h
+ DD 000202020h,008000808h
+ DD 000898989h,062006262h
+ DD 000000000h,000000000h
+ DD 000909090h,024002424h
+ DD 000474747h,0d100d1d1h
+ DD 000efefefh,0fb00fbfbh
+ DD 000eaeaeah,0ba00babah
+ DD 000b7b7b7h,0ed00ededh
+ DD 000151515h,045004545h
+ DD 000060606h,081008181h
+ DD 000cdcdcdh,073007373h
+ DD 000b5b5b5h,06d006d6dh
+ DD 000121212h,084008484h
+ DD 0007e7e7eh,09f009f9fh
+ DD 000bbbbbbh,0ee00eeeeh
+ DD 000292929h,04a004a4ah
+ DD 0000f0f0fh,0c300c3c3h
+ DD 000b8b8b8h,02e002e2eh
+ DD 000070707h,0c100c1c1h
+ DD 000040404h,001000101h
+ DD 0009b9b9bh,0e600e6e6h
+ DD 000949494h,025002525h
+ DD 000212121h,048004848h
+ DD 000666666h,099009999h
+ DD 000e6e6e6h,0b900b9b9h
+ DD 000cececeh,0b300b3b3h
+ DD 000edededh,07b007b7bh
+ DD 000e7e7e7h,0f900f9f9h
+ DD 0003b3b3bh,0ce00ceceh
+ DD 000fefefeh,0bf00bfbfh
+ DD 0007f7f7fh,0df00dfdfh
+ DD 000c5c5c5h,071007171h
+ DD 000a4a4a4h,029002929h
+ DD 000373737h,0cd00cdcdh
+ DD 000b1b1b1h,06c006c6ch
+ DD 0004c4c4ch,013001313h
+ DD 000919191h,064006464h
+ DD 0006e6e6eh,09b009b9bh
+ DD 0008d8d8dh,063006363h
+ DD 000767676h,09d009d9dh
+ DD 000030303h,0c000c0c0h
+ DD 0002d2d2dh,04b004b4bh
+ DD 000dededeh,0b700b7b7h
+ DD 000969696h,0a500a5a5h
+ DD 000262626h,089008989h
+ DD 0007d7d7dh,05f005f5fh
+ DD 000c6c6c6h,0b100b1b1h
+ DD 0005c5c5ch,017001717h
+ DD 000d3d3d3h,0f400f4f4h
+ DD 000f2f2f2h,0bc00bcbch
+ DD 0004f4f4fh,0d300d3d3h
+ DD 000191919h,046004646h
+ DD 0003f3f3fh,0cf00cfcfh
+ DD 000dcdcdch,037003737h
+ DD 000797979h,05e005e5eh
+ DD 0001d1d1dh,047004747h
+ DD 000525252h,094009494h
+ DD 000ebebebh,0fa00fafah
+ DD 000f3f3f3h,0fc00fcfch
+ DD 0006d6d6dh,05b005b5bh
+ DD 0005e5e5eh,097009797h
+ DD 000fbfbfbh,0fe00fefeh
+ DD 000696969h,05a005a5ah
+ DD 000b2b2b2h,0ac00acach
+ DD 000f0f0f0h,03c003c3ch
+ DD 000313131h,04c004c4ch
+ DD 0000c0c0ch,003000303h
+ DD 000d4d4d4h,035003535h
+ DD 000cfcfcfh,0f300f3f3h
+ DD 0008c8c8ch,023002323h
+ DD 000e2e2e2h,0b800b8b8h
+ DD 000757575h,05d005d5dh
+ DD 000a9a9a9h,06a006a6ah
+ DD 0004a4a4ah,092009292h
+ DD 000575757h,0d500d5d5h
+ DD 000848484h,021002121h
+ DD 000111111h,044004444h
+ DD 000454545h,051005151h
+ DD 0001b1b1bh,0c600c6c6h
+ DD 000f5f5f5h,07d007d7dh
+ DD 000e4e4e4h,039003939h
+ DD 0000e0e0eh,083008383h
+ DD 000737373h,0dc00dcdch
+ DD 000aaaaaah,0aa00aaaah
+ DD 000f1f1f1h,07c007c7ch
+ DD 000ddddddh,077007777h
+ DD 000595959h,056005656h
+ DD 000141414h,005000505h
+ DD 0006c6c6ch,01b001b1bh
+ DD 000929292h,0a400a4a4h
+ DD 000545454h,015001515h
+ DD 000d0d0d0h,034003434h
+ DD 000787878h,01e001e1eh
+ DD 000707070h,01c001c1ch
+ DD 000e3e3e3h,0f800f8f8h
+ DD 000494949h,052005252h
+ DD 000808080h,020002020h
+ DD 000505050h,014001414h
+ DD 000a7a7a7h,0e900e9e9h
+ DD 000f6f6f6h,0bd00bdbdh
+ DD 000777777h,0dd00ddddh
+ DD 000939393h,0e400e4e4h
+ DD 000868686h,0a100a1a1h
+ DD 000838383h,0e000e0e0h
+ DD 0002a2a2ah,08a008a8ah
+ DD 000c7c7c7h,0f100f1f1h
+ DD 0005b5b5bh,0d600d6d6h
+ DD 000e9e9e9h,07a007a7ah
+ DD 000eeeeeeh,0bb00bbbbh
+ DD 0008f8f8fh,0e300e3e3h
+ DD 000010101h,040004040h
+ DD 0003d3d3dh,04f004f4fh
+PUBLIC Camellia_cbc_encrypt
+
+ALIGN 16
+Camellia_cbc_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_Camellia_cbc_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ cmp rdx,0
+ je $L$cbc_abort
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$cbc_prologue::
+
+ mov rbp,rsp
+
+ sub rsp,64
+ and rsp,-64
+
+
+
+ lea r10,QWORD PTR[((-64-63))+rcx]
+ sub r10,rsp
+ neg r10
+ and r10,03C0h
+ sub rsp,r10
+
+
+ mov r12,rdi
+ mov r13,rsi
+ mov rbx,r8
+ mov r14,rcx
+ mov r15d,DWORD PTR[272+rcx]
+
+ mov QWORD PTR[40+rsp],r8
+ mov QWORD PTR[48+rsp],rbp
+
+
+$L$cbc_body::
+ lea rbp,QWORD PTR[$L$Camellia_SBOX]
+
+ mov ecx,32
+ALIGN 4
+$L$cbc_prefetch_sbox::
+ mov rax,QWORD PTR[rbp]
+ mov rsi,QWORD PTR[32+rbp]
+ mov rdi,QWORD PTR[64+rbp]
+ mov r11,QWORD PTR[96+rbp]
+ lea rbp,QWORD PTR[128+rbp]
+ loop $L$cbc_prefetch_sbox
+ sub rbp,4096
+ shl r15,6
+ mov rcx,rdx
+ lea r15,QWORD PTR[r15*1+r14]
+
+ cmp r9d,0
+ je $L$CBC_DECRYPT
+
+ and rdx,-16
+ and rcx,15
+ lea rdx,QWORD PTR[rdx*1+r12]
+ mov QWORD PTR[rsp],r14
+ mov QWORD PTR[8+rsp],rdx
+ mov QWORD PTR[16+rsp],rcx
+
+ cmp rdx,r12
+ mov r8d,DWORD PTR[rbx]
+ mov r9d,DWORD PTR[4+rbx]
+ mov r10d,DWORD PTR[8+rbx]
+ mov r11d,DWORD PTR[12+rbx]
+ je $L$cbc_enc_tail
+ jmp $L$cbc_eloop
+
+ALIGN 16
+$L$cbc_eloop::
+ xor r8d,DWORD PTR[r12]
+ xor r9d,DWORD PTR[4+r12]
+ xor r10d,DWORD PTR[8+r12]
+ bswap r8d
+ xor r11d,DWORD PTR[12+r12]
+ bswap r9d
+ bswap r10d
+ bswap r11d
+
+ call _x86_64_Camellia_encrypt
+
+ mov r14,QWORD PTR[rsp]
+ bswap r8d
+ mov rdx,QWORD PTR[8+rsp]
+ bswap r9d
+ mov rcx,QWORD PTR[16+rsp]
+ bswap r10d
+ mov DWORD PTR[r13],r8d
+ bswap r11d
+ mov DWORD PTR[4+r13],r9d
+ mov DWORD PTR[8+r13],r10d
+ lea r12,QWORD PTR[16+r12]
+ mov DWORD PTR[12+r13],r11d
+ cmp r12,rdx
+ lea r13,QWORD PTR[16+r13]
+ jne $L$cbc_eloop
+
+ cmp rcx,0
+ jne $L$cbc_enc_tail
+
+ mov r13,QWORD PTR[40+rsp]
+ mov DWORD PTR[r13],r8d
+ mov DWORD PTR[4+r13],r9d
+ mov DWORD PTR[8+r13],r10d
+ mov DWORD PTR[12+r13],r11d
+ jmp $L$cbc_done
+
+ALIGN 16
+$L$cbc_enc_tail::
+ xor rax,rax
+ mov QWORD PTR[((0+24))+rsp],rax
+ mov QWORD PTR[((8+24))+rsp],rax
+ mov QWORD PTR[16+rsp],rax
+
+$L$cbc_enc_pushf::
+ pushfq
+ cld
+ mov rsi,r12
+ lea rdi,QWORD PTR[((8+24))+rsp]
+ DD 09066A4F3h
+ popfq
+$L$cbc_enc_popf::
+
+ lea r12,QWORD PTR[24+rsp]
+ lea rax,QWORD PTR[((16+24))+rsp]
+ mov QWORD PTR[8+rsp],rax
+ jmp $L$cbc_eloop
+
+ALIGN 16
+$L$CBC_DECRYPT::
+ xchg r15,r14
+ add rdx,15
+ and rcx,15
+ and rdx,-16
+ mov QWORD PTR[rsp],r14
+ lea rdx,QWORD PTR[rdx*1+r12]
+ mov QWORD PTR[8+rsp],rdx
+ mov QWORD PTR[16+rsp],rcx
+
+ mov rax,QWORD PTR[rbx]
+ mov rbx,QWORD PTR[8+rbx]
+ jmp $L$cbc_dloop
+ALIGN 16
+$L$cbc_dloop::
+ mov r8d,DWORD PTR[r12]
+ mov r9d,DWORD PTR[4+r12]
+ mov r10d,DWORD PTR[8+r12]
+ bswap r8d
+ mov r11d,DWORD PTR[12+r12]
+ bswap r9d
+ mov QWORD PTR[((0+24))+rsp],rax
+ bswap r10d
+ mov QWORD PTR[((8+24))+rsp],rbx
+ bswap r11d
+
+ call _x86_64_Camellia_decrypt
+
+ mov r14,QWORD PTR[rsp]
+ mov rdx,QWORD PTR[8+rsp]
+ mov rcx,QWORD PTR[16+rsp]
+
+ bswap r8d
+ mov rax,QWORD PTR[r12]
+ bswap r9d
+ mov rbx,QWORD PTR[8+r12]
+ bswap r10d
+ xor r8d,DWORD PTR[((0+24))+rsp]
+ bswap r11d
+ xor r9d,DWORD PTR[((4+24))+rsp]
+ xor r10d,DWORD PTR[((8+24))+rsp]
+ lea r12,QWORD PTR[16+r12]
+ xor r11d,DWORD PTR[((12+24))+rsp]
+ cmp r12,rdx
+ je $L$cbc_ddone
+
+ mov DWORD PTR[r13],r8d
+ mov DWORD PTR[4+r13],r9d
+ mov DWORD PTR[8+r13],r10d
+ mov DWORD PTR[12+r13],r11d
+
+ lea r13,QWORD PTR[16+r13]
+ jmp $L$cbc_dloop
+
+ALIGN 16
+$L$cbc_ddone::
+ mov rdx,QWORD PTR[40+rsp]
+ cmp rcx,0
+ jne $L$cbc_dec_tail
+
+ mov DWORD PTR[r13],r8d
+ mov DWORD PTR[4+r13],r9d
+ mov DWORD PTR[8+r13],r10d
+ mov DWORD PTR[12+r13],r11d
+
+ mov QWORD PTR[rdx],rax
+ mov QWORD PTR[8+rdx],rbx
+ jmp $L$cbc_done
+ALIGN 16
+$L$cbc_dec_tail::
+ mov DWORD PTR[((0+24))+rsp],r8d
+ mov DWORD PTR[((4+24))+rsp],r9d
+ mov DWORD PTR[((8+24))+rsp],r10d
+ mov DWORD PTR[((12+24))+rsp],r11d
+
+$L$cbc_dec_pushf::
+ pushfq
+ cld
+ lea rsi,QWORD PTR[((8+24))+rsp]
+ lea rdi,QWORD PTR[r13]
+ DD 09066A4F3h
+ popfq
+$L$cbc_dec_popf::
+
+ mov QWORD PTR[rdx],rax
+ mov QWORD PTR[8+rdx],rbx
+ jmp $L$cbc_done
+
+ALIGN 16
+$L$cbc_done::
+ mov rcx,QWORD PTR[48+rsp]
+
+ mov r15,QWORD PTR[rcx]
+
+ mov r14,QWORD PTR[8+rcx]
+
+ mov r13,QWORD PTR[16+rcx]
+
+ mov r12,QWORD PTR[24+rcx]
+
+ mov rbp,QWORD PTR[32+rcx]
+
+ mov rbx,QWORD PTR[40+rcx]
+
+ lea rsp,QWORD PTR[48+rcx]
+
+$L$cbc_abort::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_Camellia_cbc_encrypt::
+Camellia_cbc_encrypt ENDP
+
+DB 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54
+DB 95,54,52,32,98,121,32,60,97,112,112,114,111,64,111,112
+DB 101,110,115,115,108,46,111,114,103,62,0
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+common_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ lea rsp,QWORD PTR[((-64))+rsp]
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ lea rax,QWORD PTR[40+rax]
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r13,QWORD PTR[((-24))+rax]
+ mov r14,QWORD PTR[((-32))+rax]
+ mov r15,QWORD PTR[((-40))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ jmp $L$common_seh_exit
+common_se_handler ENDP
+
+
+ALIGN 16
+cbc_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ lea rsp,QWORD PTR[((-64))+rsp]
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$cbc_prologue]
+ cmp rbx,r10
+ jb $L$in_cbc_prologue
+
+ lea r10,QWORD PTR[$L$cbc_body]
+ cmp rbx,r10
+ jb $L$in_cbc_frame_setup
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea r10,QWORD PTR[$L$cbc_abort]
+ cmp rbx,r10
+ jae $L$in_cbc_prologue
+
+
+ lea r10,QWORD PTR[$L$cbc_enc_pushf]
+ cmp rbx,r10
+ jbe $L$in_cbc_no_flag
+ lea rax,QWORD PTR[8+rax]
+ lea r10,QWORD PTR[$L$cbc_enc_popf]
+ cmp rbx,r10
+ jb $L$in_cbc_no_flag
+ lea rax,QWORD PTR[((-8))+rax]
+ lea r10,QWORD PTR[$L$cbc_dec_pushf]
+ cmp rbx,r10
+ jbe $L$in_cbc_no_flag
+ lea rax,QWORD PTR[8+rax]
+ lea r10,QWORD PTR[$L$cbc_dec_popf]
+ cmp rbx,r10
+ jb $L$in_cbc_no_flag
+ lea rax,QWORD PTR[((-8))+rax]
+
+$L$in_cbc_no_flag::
+ mov rax,QWORD PTR[48+rax]
+ lea rax,QWORD PTR[48+rax]
+
+$L$in_cbc_frame_setup::
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$in_cbc_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ALIGN 4
+$L$common_seh_exit::
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ lea rsp,QWORD PTR[64+rsp]
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+cbc_se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_Camellia_EncryptBlock_Rounds
+ DD imagerel $L$SEH_end_Camellia_EncryptBlock_Rounds
+ DD imagerel $L$SEH_info_Camellia_EncryptBlock_Rounds
+
+ DD imagerel $L$SEH_begin_Camellia_DecryptBlock_Rounds
+ DD imagerel $L$SEH_end_Camellia_DecryptBlock_Rounds
+ DD imagerel $L$SEH_info_Camellia_DecryptBlock_Rounds
+
+ DD imagerel $L$SEH_begin_Camellia_Ekeygen
+ DD imagerel $L$SEH_end_Camellia_Ekeygen
+ DD imagerel $L$SEH_info_Camellia_Ekeygen
+
+ DD imagerel $L$SEH_begin_Camellia_cbc_encrypt
+ DD imagerel $L$SEH_end_Camellia_cbc_encrypt
+ DD imagerel $L$SEH_info_Camellia_cbc_encrypt
+
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_Camellia_EncryptBlock_Rounds::
+DB 9,0,0,0
+ DD imagerel common_se_handler
+ DD imagerel $L$enc_prologue,imagerel $L$enc_epilogue
+$L$SEH_info_Camellia_DecryptBlock_Rounds::
+DB 9,0,0,0
+ DD imagerel common_se_handler
+ DD imagerel $L$dec_prologue,imagerel $L$dec_epilogue
+$L$SEH_info_Camellia_Ekeygen::
+DB 9,0,0,0
+ DD imagerel common_se_handler
+ DD imagerel $L$key_prologue,imagerel $L$key_epilogue
+$L$SEH_info_Camellia_cbc_encrypt::
+DB 9,0,0,0
+ DD imagerel cbc_se_handler
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86.masm b/contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86.masm
index e99c331a6c..96ee56b7ae 100644
--- a/contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86.masm
@@ -1,1023 +1,1023 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-ALIGN 16
-_ChaCha20_ctr32 PROC PUBLIC
-$L_ChaCha20_ctr32_begin::
- push ebp
- push ebx
- push esi
- push edi
- xor eax,eax
- cmp eax,DWORD PTR 28[esp]
- je $L000no_data
- call $Lpic_point
-$Lpic_point::
- pop eax
- lea ebp,DWORD PTR _OPENSSL_ia32cap_P
- test DWORD PTR [ebp],16777216
- jz $L001x86
- test DWORD PTR 4[ebp],512
- jz $L001x86
- jmp $Lssse3_shortcut
-$L001x86:
- mov esi,DWORD PTR 32[esp]
- mov edi,DWORD PTR 36[esp]
- sub esp,132
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov edx,DWORD PTR 12[esi]
- mov DWORD PTR 80[esp],eax
- mov DWORD PTR 84[esp],ebx
- mov DWORD PTR 88[esp],ecx
- mov DWORD PTR 92[esp],edx
- mov eax,DWORD PTR 16[esi]
- mov ebx,DWORD PTR 20[esi]
- mov ecx,DWORD PTR 24[esi]
- mov edx,DWORD PTR 28[esi]
- mov DWORD PTR 96[esp],eax
- mov DWORD PTR 100[esp],ebx
- mov DWORD PTR 104[esp],ecx
- mov DWORD PTR 108[esp],edx
- mov eax,DWORD PTR [edi]
- mov ebx,DWORD PTR 4[edi]
- mov ecx,DWORD PTR 8[edi]
- mov edx,DWORD PTR 12[edi]
- sub eax,1
- mov DWORD PTR 112[esp],eax
- mov DWORD PTR 116[esp],ebx
- mov DWORD PTR 120[esp],ecx
- mov DWORD PTR 124[esp],edx
- jmp $L002entry
-ALIGN 16
-$L003outer_loop:
- mov DWORD PTR 156[esp],ebx
- mov DWORD PTR 152[esp],eax
- mov DWORD PTR 160[esp],ecx
-$L002entry:
- mov eax,1634760805
- mov DWORD PTR 4[esp],857760878
- mov DWORD PTR 8[esp],2036477234
- mov DWORD PTR 12[esp],1797285236
- mov ebx,DWORD PTR 84[esp]
- mov ebp,DWORD PTR 88[esp]
- mov ecx,DWORD PTR 104[esp]
- mov esi,DWORD PTR 108[esp]
- mov edx,DWORD PTR 116[esp]
- mov edi,DWORD PTR 120[esp]
- mov DWORD PTR 20[esp],ebx
- mov DWORD PTR 24[esp],ebp
- mov DWORD PTR 40[esp],ecx
- mov DWORD PTR 44[esp],esi
- mov DWORD PTR 52[esp],edx
- mov DWORD PTR 56[esp],edi
- mov ebx,DWORD PTR 92[esp]
- mov edi,DWORD PTR 124[esp]
- mov edx,DWORD PTR 112[esp]
- mov ebp,DWORD PTR 80[esp]
- mov ecx,DWORD PTR 96[esp]
- mov esi,DWORD PTR 100[esp]
- add edx,1
- mov DWORD PTR 28[esp],ebx
- mov DWORD PTR 60[esp],edi
- mov DWORD PTR 112[esp],edx
- mov ebx,10
- jmp $L004loop
-ALIGN 16
-$L004loop:
- add eax,ebp
- mov DWORD PTR 128[esp],ebx
- mov ebx,ebp
- xor edx,eax
- rol edx,16
- add ecx,edx
- xor ebx,ecx
- mov edi,DWORD PTR 52[esp]
- rol ebx,12
- mov ebp,DWORD PTR 20[esp]
- add eax,ebx
- xor edx,eax
- mov DWORD PTR [esp],eax
- rol edx,8
- mov eax,DWORD PTR 4[esp]
- add ecx,edx
- mov DWORD PTR 48[esp],edx
- xor ebx,ecx
- add eax,ebp
- rol ebx,7
- xor edi,eax
- mov DWORD PTR 32[esp],ecx
- rol edi,16
- mov DWORD PTR 16[esp],ebx
- add esi,edi
- mov ecx,DWORD PTR 40[esp]
- xor ebp,esi
- mov edx,DWORD PTR 56[esp]
- rol ebp,12
- mov ebx,DWORD PTR 24[esp]
- add eax,ebp
- xor edi,eax
- mov DWORD PTR 4[esp],eax
- rol edi,8
- mov eax,DWORD PTR 8[esp]
- add esi,edi
- mov DWORD PTR 52[esp],edi
- xor ebp,esi
- add eax,ebx
- rol ebp,7
- xor edx,eax
- mov DWORD PTR 36[esp],esi
- rol edx,16
- mov DWORD PTR 20[esp],ebp
- add ecx,edx
- mov esi,DWORD PTR 44[esp]
- xor ebx,ecx
- mov edi,DWORD PTR 60[esp]
- rol ebx,12
- mov ebp,DWORD PTR 28[esp]
- add eax,ebx
- xor edx,eax
- mov DWORD PTR 8[esp],eax
- rol edx,8
- mov eax,DWORD PTR 12[esp]
- add ecx,edx
- mov DWORD PTR 56[esp],edx
- xor ebx,ecx
- add eax,ebp
- rol ebx,7
- xor edi,eax
- rol edi,16
- mov DWORD PTR 24[esp],ebx
- add esi,edi
- xor ebp,esi
- rol ebp,12
- mov ebx,DWORD PTR 20[esp]
- add eax,ebp
- xor edi,eax
- mov DWORD PTR 12[esp],eax
- rol edi,8
- mov eax,DWORD PTR [esp]
- add esi,edi
- mov edx,edi
- xor ebp,esi
- add eax,ebx
- rol ebp,7
- xor edx,eax
- rol edx,16
- mov DWORD PTR 28[esp],ebp
- add ecx,edx
- xor ebx,ecx
- mov edi,DWORD PTR 48[esp]
- rol ebx,12
- mov ebp,DWORD PTR 24[esp]
- add eax,ebx
- xor edx,eax
- mov DWORD PTR [esp],eax
- rol edx,8
- mov eax,DWORD PTR 4[esp]
- add ecx,edx
- mov DWORD PTR 60[esp],edx
- xor ebx,ecx
- add eax,ebp
- rol ebx,7
- xor edi,eax
- mov DWORD PTR 40[esp],ecx
- rol edi,16
- mov DWORD PTR 20[esp],ebx
- add esi,edi
- mov ecx,DWORD PTR 32[esp]
- xor ebp,esi
- mov edx,DWORD PTR 52[esp]
- rol ebp,12
- mov ebx,DWORD PTR 28[esp]
- add eax,ebp
- xor edi,eax
- mov DWORD PTR 4[esp],eax
- rol edi,8
- mov eax,DWORD PTR 8[esp]
- add esi,edi
- mov DWORD PTR 48[esp],edi
- xor ebp,esi
- add eax,ebx
- rol ebp,7
- xor edx,eax
- mov DWORD PTR 44[esp],esi
- rol edx,16
- mov DWORD PTR 24[esp],ebp
- add ecx,edx
- mov esi,DWORD PTR 36[esp]
- xor ebx,ecx
- mov edi,DWORD PTR 56[esp]
- rol ebx,12
- mov ebp,DWORD PTR 16[esp]
- add eax,ebx
- xor edx,eax
- mov DWORD PTR 8[esp],eax
- rol edx,8
- mov eax,DWORD PTR 12[esp]
- add ecx,edx
- mov DWORD PTR 52[esp],edx
- xor ebx,ecx
- add eax,ebp
- rol ebx,7
- xor edi,eax
- rol edi,16
- mov DWORD PTR 28[esp],ebx
- add esi,edi
- xor ebp,esi
- mov edx,DWORD PTR 48[esp]
- rol ebp,12
- mov ebx,DWORD PTR 128[esp]
- add eax,ebp
- xor edi,eax
- mov DWORD PTR 12[esp],eax
- rol edi,8
- mov eax,DWORD PTR [esp]
- add esi,edi
- mov DWORD PTR 56[esp],edi
- xor ebp,esi
- rol ebp,7
- dec ebx
- jnz $L004loop
- mov ebx,DWORD PTR 160[esp]
- add eax,1634760805
- add ebp,DWORD PTR 80[esp]
- add ecx,DWORD PTR 96[esp]
- add esi,DWORD PTR 100[esp]
- cmp ebx,64
- jb $L005tail
- mov ebx,DWORD PTR 156[esp]
- add edx,DWORD PTR 112[esp]
- add edi,DWORD PTR 120[esp]
- xor eax,DWORD PTR [ebx]
- xor ebp,DWORD PTR 16[ebx]
- mov DWORD PTR [esp],eax
- mov eax,DWORD PTR 152[esp]
- xor ecx,DWORD PTR 32[ebx]
- xor esi,DWORD PTR 36[ebx]
- xor edx,DWORD PTR 48[ebx]
- xor edi,DWORD PTR 56[ebx]
- mov DWORD PTR 16[eax],ebp
- mov DWORD PTR 32[eax],ecx
- mov DWORD PTR 36[eax],esi
- mov DWORD PTR 48[eax],edx
- mov DWORD PTR 56[eax],edi
- mov ebp,DWORD PTR 4[esp]
- mov ecx,DWORD PTR 8[esp]
- mov esi,DWORD PTR 12[esp]
- mov edx,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- add ebp,857760878
- add ecx,2036477234
- add esi,1797285236
- add edx,DWORD PTR 84[esp]
- add edi,DWORD PTR 88[esp]
- xor ebp,DWORD PTR 4[ebx]
- xor ecx,DWORD PTR 8[ebx]
- xor esi,DWORD PTR 12[ebx]
- xor edx,DWORD PTR 20[ebx]
- xor edi,DWORD PTR 24[ebx]
- mov DWORD PTR 4[eax],ebp
- mov DWORD PTR 8[eax],ecx
- mov DWORD PTR 12[eax],esi
- mov DWORD PTR 20[eax],edx
- mov DWORD PTR 24[eax],edi
- mov ebp,DWORD PTR 28[esp]
- mov ecx,DWORD PTR 40[esp]
- mov esi,DWORD PTR 44[esp]
- mov edx,DWORD PTR 52[esp]
- mov edi,DWORD PTR 60[esp]
- add ebp,DWORD PTR 92[esp]
- add ecx,DWORD PTR 104[esp]
- add esi,DWORD PTR 108[esp]
- add edx,DWORD PTR 116[esp]
- add edi,DWORD PTR 124[esp]
- xor ebp,DWORD PTR 28[ebx]
- xor ecx,DWORD PTR 40[ebx]
- xor esi,DWORD PTR 44[ebx]
- xor edx,DWORD PTR 52[ebx]
- xor edi,DWORD PTR 60[ebx]
- lea ebx,DWORD PTR 64[ebx]
- mov DWORD PTR 28[eax],ebp
- mov ebp,DWORD PTR [esp]
- mov DWORD PTR 40[eax],ecx
- mov ecx,DWORD PTR 160[esp]
- mov DWORD PTR 44[eax],esi
- mov DWORD PTR 52[eax],edx
- mov DWORD PTR 60[eax],edi
- mov DWORD PTR [eax],ebp
- lea eax,DWORD PTR 64[eax]
- sub ecx,64
- jnz $L003outer_loop
- jmp $L006done
-$L005tail:
- add edx,DWORD PTR 112[esp]
- add edi,DWORD PTR 120[esp]
- mov DWORD PTR [esp],eax
- mov DWORD PTR 16[esp],ebp
- mov DWORD PTR 32[esp],ecx
- mov DWORD PTR 36[esp],esi
- mov DWORD PTR 48[esp],edx
- mov DWORD PTR 56[esp],edi
- mov ebp,DWORD PTR 4[esp]
- mov ecx,DWORD PTR 8[esp]
- mov esi,DWORD PTR 12[esp]
- mov edx,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- add ebp,857760878
- add ecx,2036477234
- add esi,1797285236
- add edx,DWORD PTR 84[esp]
- add edi,DWORD PTR 88[esp]
- mov DWORD PTR 4[esp],ebp
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 12[esp],esi
- mov DWORD PTR 20[esp],edx
- mov DWORD PTR 24[esp],edi
- mov ebp,DWORD PTR 28[esp]
- mov ecx,DWORD PTR 40[esp]
- mov esi,DWORD PTR 44[esp]
- mov edx,DWORD PTR 52[esp]
- mov edi,DWORD PTR 60[esp]
- add ebp,DWORD PTR 92[esp]
- add ecx,DWORD PTR 104[esp]
- add esi,DWORD PTR 108[esp]
- add edx,DWORD PTR 116[esp]
- add edi,DWORD PTR 124[esp]
- mov DWORD PTR 28[esp],ebp
- mov ebp,DWORD PTR 156[esp]
- mov DWORD PTR 40[esp],ecx
- mov ecx,DWORD PTR 152[esp]
- mov DWORD PTR 44[esp],esi
- xor esi,esi
- mov DWORD PTR 52[esp],edx
- mov DWORD PTR 60[esp],edi
- xor eax,eax
- xor edx,edx
-$L007tail_loop:
- mov al,BYTE PTR [ebp*1+esi]
- mov dl,BYTE PTR [esi*1+esp]
- lea esi,DWORD PTR 1[esi]
- xor al,dl
- mov BYTE PTR [esi*1+ecx-1],al
- dec ebx
- jnz $L007tail_loop
-$L006done:
- add esp,132
-$L000no_data:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_ChaCha20_ctr32 ENDP
-ALIGN 16
-_ChaCha20_ssse3 PROC PUBLIC
-$L_ChaCha20_ssse3_begin::
- push ebp
- push ebx
- push esi
- push edi
-$Lssse3_shortcut::
- test DWORD PTR 4[ebp],2048
- jnz $Lxop_shortcut
- mov edi,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- mov ecx,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- mov ebx,DWORD PTR 36[esp]
- mov ebp,esp
- sub esp,524
- and esp,-64
- mov DWORD PTR 512[esp],ebp
- lea eax,DWORD PTR ($Lssse3_data-$Lpic_point)[eax]
- movdqu xmm3,XMMWORD PTR [ebx]
-$L0081x:
- movdqa xmm0,XMMWORD PTR 32[eax]
- movdqu xmm1,XMMWORD PTR [edx]
- movdqu xmm2,XMMWORD PTR 16[edx]
- movdqa xmm6,XMMWORD PTR [eax]
- movdqa xmm7,XMMWORD PTR 16[eax]
- mov DWORD PTR 48[esp],ebp
- movdqa XMMWORD PTR [esp],xmm0
- movdqa XMMWORD PTR 16[esp],xmm1
- movdqa XMMWORD PTR 32[esp],xmm2
- movdqa XMMWORD PTR 48[esp],xmm3
- mov edx,10
- jmp $L009loop1x
-ALIGN 16
-$L010outer1x:
- movdqa xmm3,XMMWORD PTR 80[eax]
- movdqa xmm0,XMMWORD PTR [esp]
- movdqa xmm1,XMMWORD PTR 16[esp]
- movdqa xmm2,XMMWORD PTR 32[esp]
- paddd xmm3,XMMWORD PTR 48[esp]
- mov edx,10
- movdqa XMMWORD PTR 48[esp],xmm3
- jmp $L009loop1x
-ALIGN 16
-$L009loop1x:
- paddd xmm0,xmm1
- pxor xmm3,xmm0
-DB 102,15,56,0,222
- paddd xmm2,xmm3
- pxor xmm1,xmm2
- movdqa xmm4,xmm1
- psrld xmm1,20
- pslld xmm4,12
- por xmm1,xmm4
- paddd xmm0,xmm1
- pxor xmm3,xmm0
-DB 102,15,56,0,223
- paddd xmm2,xmm3
- pxor xmm1,xmm2
- movdqa xmm4,xmm1
- psrld xmm1,25
- pslld xmm4,7
- por xmm1,xmm4
- pshufd xmm2,xmm2,78
- pshufd xmm1,xmm1,57
- pshufd xmm3,xmm3,147
- nop
- paddd xmm0,xmm1
- pxor xmm3,xmm0
-DB 102,15,56,0,222
- paddd xmm2,xmm3
- pxor xmm1,xmm2
- movdqa xmm4,xmm1
- psrld xmm1,20
- pslld xmm4,12
- por xmm1,xmm4
- paddd xmm0,xmm1
- pxor xmm3,xmm0
-DB 102,15,56,0,223
- paddd xmm2,xmm3
- pxor xmm1,xmm2
- movdqa xmm4,xmm1
- psrld xmm1,25
- pslld xmm4,7
- por xmm1,xmm4
- pshufd xmm2,xmm2,78
- pshufd xmm1,xmm1,147
- pshufd xmm3,xmm3,57
- dec edx
- jnz $L009loop1x
- paddd xmm0,XMMWORD PTR [esp]
- paddd xmm1,XMMWORD PTR 16[esp]
- paddd xmm2,XMMWORD PTR 32[esp]
- paddd xmm3,XMMWORD PTR 48[esp]
- cmp ecx,64
- jb $L011tail
- movdqu xmm4,XMMWORD PTR [esi]
- movdqu xmm5,XMMWORD PTR 16[esi]
- pxor xmm0,xmm4
- movdqu xmm4,XMMWORD PTR 32[esi]
- pxor xmm1,xmm5
- movdqu xmm5,XMMWORD PTR 48[esi]
- pxor xmm2,xmm4
- pxor xmm3,xmm5
- lea esi,DWORD PTR 64[esi]
- movdqu XMMWORD PTR [edi],xmm0
- movdqu XMMWORD PTR 16[edi],xmm1
- movdqu XMMWORD PTR 32[edi],xmm2
- movdqu XMMWORD PTR 48[edi],xmm3
- lea edi,DWORD PTR 64[edi]
- sub ecx,64
- jnz $L010outer1x
- jmp $L012done
-$L011tail:
- movdqa XMMWORD PTR [esp],xmm0
- movdqa XMMWORD PTR 16[esp],xmm1
- movdqa XMMWORD PTR 32[esp],xmm2
- movdqa XMMWORD PTR 48[esp],xmm3
- xor eax,eax
- xor edx,edx
- xor ebp,ebp
-$L013tail_loop:
- mov al,BYTE PTR [ebp*1+esp]
- mov dl,BYTE PTR [ebp*1+esi]
- lea ebp,DWORD PTR 1[ebp]
- xor al,dl
- mov BYTE PTR [ebp*1+edi-1],al
- dec ecx
- jnz $L013tail_loop
-$L012done:
- mov esp,DWORD PTR 512[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_ChaCha20_ssse3 ENDP
-ALIGN 64
-$Lssse3_data::
-DB 2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13
-DB 3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14
-DD 1634760805,857760878,2036477234,1797285236
-DD 0,1,2,3
-DD 4,4,4,4
-DD 1,0,0,0
-DD 4,0,0,0
-DD 0,-1,-1,-1
-ALIGN 64
-DB 67,104,97,67,104,97,50,48,32,102,111,114,32,120,56,54
-DB 44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
-DB 60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
-DB 114,103,62,0
-ALIGN 16
-_ChaCha20_xop PROC PUBLIC
-$L_ChaCha20_xop_begin::
- push ebp
- push ebx
- push esi
- push edi
-$Lxop_shortcut::
- mov edi,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- mov ecx,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- mov ebx,DWORD PTR 36[esp]
- vzeroupper
- mov ebp,esp
- sub esp,524
- and esp,-64
- mov DWORD PTR 512[esp],ebp
- lea eax,DWORD PTR ($Lssse3_data-$Lpic_point)[eax]
- vmovdqu xmm3,XMMWORD PTR [ebx]
- cmp ecx,256
- jb $L0141x
- mov DWORD PTR 516[esp],edx
- mov DWORD PTR 520[esp],ebx
- sub ecx,256
- lea ebp,DWORD PTR 384[esp]
- vmovdqu xmm7,XMMWORD PTR [edx]
- vpshufd xmm0,xmm3,0
- vpshufd xmm1,xmm3,85
- vpshufd xmm2,xmm3,170
- vpshufd xmm3,xmm3,255
- vpaddd xmm0,xmm0,XMMWORD PTR 48[eax]
- vpshufd xmm4,xmm7,0
- vpshufd xmm5,xmm7,85
- vpsubd xmm0,xmm0,XMMWORD PTR 64[eax]
- vpshufd xmm6,xmm7,170
- vpshufd xmm7,xmm7,255
- vmovdqa XMMWORD PTR 64[ebp],xmm0
- vmovdqa XMMWORD PTR 80[ebp],xmm1
- vmovdqa XMMWORD PTR 96[ebp],xmm2
- vmovdqa XMMWORD PTR 112[ebp],xmm3
- vmovdqu xmm3,XMMWORD PTR 16[edx]
- vmovdqa XMMWORD PTR [ebp-64],xmm4
- vmovdqa XMMWORD PTR [ebp-48],xmm5
- vmovdqa XMMWORD PTR [ebp-32],xmm6
- vmovdqa XMMWORD PTR [ebp-16],xmm7
- vmovdqa xmm7,XMMWORD PTR 32[eax]
- lea ebx,DWORD PTR 128[esp]
- vpshufd xmm0,xmm3,0
- vpshufd xmm1,xmm3,85
- vpshufd xmm2,xmm3,170
- vpshufd xmm3,xmm3,255
- vpshufd xmm4,xmm7,0
- vpshufd xmm5,xmm7,85
- vpshufd xmm6,xmm7,170
- vpshufd xmm7,xmm7,255
- vmovdqa XMMWORD PTR [ebp],xmm0
- vmovdqa XMMWORD PTR 16[ebp],xmm1
- vmovdqa XMMWORD PTR 32[ebp],xmm2
- vmovdqa XMMWORD PTR 48[ebp],xmm3
- vmovdqa XMMWORD PTR [ebp-128],xmm4
- vmovdqa XMMWORD PTR [ebp-112],xmm5
- vmovdqa XMMWORD PTR [ebp-96],xmm6
- vmovdqa XMMWORD PTR [ebp-80],xmm7
- lea esi,DWORD PTR 128[esi]
- lea edi,DWORD PTR 128[edi]
- jmp $L015outer_loop
-ALIGN 32
-$L015outer_loop:
- vmovdqa xmm1,XMMWORD PTR [ebp-112]
- vmovdqa xmm2,XMMWORD PTR [ebp-96]
- vmovdqa xmm3,XMMWORD PTR [ebp-80]
- vmovdqa xmm5,XMMWORD PTR [ebp-48]
- vmovdqa xmm6,XMMWORD PTR [ebp-32]
- vmovdqa xmm7,XMMWORD PTR [ebp-16]
- vmovdqa XMMWORD PTR [ebx-112],xmm1
- vmovdqa XMMWORD PTR [ebx-96],xmm2
- vmovdqa XMMWORD PTR [ebx-80],xmm3
- vmovdqa XMMWORD PTR [ebx-48],xmm5
- vmovdqa XMMWORD PTR [ebx-32],xmm6
- vmovdqa XMMWORD PTR [ebx-16],xmm7
- vmovdqa xmm2,XMMWORD PTR 32[ebp]
- vmovdqa xmm3,XMMWORD PTR 48[ebp]
- vmovdqa xmm4,XMMWORD PTR 64[ebp]
- vmovdqa xmm5,XMMWORD PTR 80[ebp]
- vmovdqa xmm6,XMMWORD PTR 96[ebp]
- vmovdqa xmm7,XMMWORD PTR 112[ebp]
- vpaddd xmm4,xmm4,XMMWORD PTR 64[eax]
- vmovdqa XMMWORD PTR 32[ebx],xmm2
- vmovdqa XMMWORD PTR 48[ebx],xmm3
- vmovdqa XMMWORD PTR 64[ebx],xmm4
- vmovdqa XMMWORD PTR 80[ebx],xmm5
- vmovdqa XMMWORD PTR 96[ebx],xmm6
- vmovdqa XMMWORD PTR 112[ebx],xmm7
- vmovdqa XMMWORD PTR 64[ebp],xmm4
- vmovdqa xmm0,XMMWORD PTR [ebp-128]
- vmovdqa xmm6,xmm4
- vmovdqa xmm3,XMMWORD PTR [ebp-64]
- vmovdqa xmm4,XMMWORD PTR [ebp]
- vmovdqa xmm5,XMMWORD PTR 16[ebp]
- mov edx,10
- nop
-ALIGN 32
-$L016loop:
- vpaddd xmm0,xmm0,xmm3
- vpxor xmm6,xmm6,xmm0
-DB 143,232,120,194,246,16
- vpaddd xmm4,xmm4,xmm6
- vpxor xmm2,xmm3,xmm4
- vmovdqa xmm1,XMMWORD PTR [ebx-112]
-DB 143,232,120,194,210,12
- vmovdqa xmm3,XMMWORD PTR [ebx-48]
- vpaddd xmm0,xmm0,xmm2
- vmovdqa xmm7,XMMWORD PTR 80[ebx]
- vpxor xmm6,xmm6,xmm0
- vpaddd xmm1,xmm1,xmm3
-DB 143,232,120,194,246,8
- vmovdqa XMMWORD PTR [ebx-128],xmm0
- vpaddd xmm4,xmm4,xmm6
- vmovdqa XMMWORD PTR 64[ebx],xmm6
- vpxor xmm2,xmm2,xmm4
- vpxor xmm7,xmm7,xmm1
-DB 143,232,120,194,210,7
- vmovdqa XMMWORD PTR [ebx],xmm4
-DB 143,232,120,194,255,16
- vmovdqa XMMWORD PTR [ebx-64],xmm2
- vpaddd xmm5,xmm5,xmm7
- vmovdqa xmm4,XMMWORD PTR 32[ebx]
- vpxor xmm3,xmm3,xmm5
- vmovdqa xmm0,XMMWORD PTR [ebx-96]
-DB 143,232,120,194,219,12
- vmovdqa xmm2,XMMWORD PTR [ebx-32]
- vpaddd xmm1,xmm1,xmm3
- vmovdqa xmm6,XMMWORD PTR 96[ebx]
- vpxor xmm7,xmm7,xmm1
- vpaddd xmm0,xmm0,xmm2
-DB 143,232,120,194,255,8
- vmovdqa XMMWORD PTR [ebx-112],xmm1
- vpaddd xmm5,xmm5,xmm7
- vmovdqa XMMWORD PTR 80[ebx],xmm7
- vpxor xmm3,xmm3,xmm5
- vpxor xmm6,xmm6,xmm0
-DB 143,232,120,194,219,7
- vmovdqa XMMWORD PTR 16[ebx],xmm5
-DB 143,232,120,194,246,16
- vmovdqa XMMWORD PTR [ebx-48],xmm3
- vpaddd xmm4,xmm4,xmm6
- vmovdqa xmm5,XMMWORD PTR 48[ebx]
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm1,XMMWORD PTR [ebx-80]
-DB 143,232,120,194,210,12
- vmovdqa xmm3,XMMWORD PTR [ebx-16]
- vpaddd xmm0,xmm0,xmm2
- vmovdqa xmm7,XMMWORD PTR 112[ebx]
- vpxor xmm6,xmm6,xmm0
- vpaddd xmm1,xmm1,xmm3
-DB 143,232,120,194,246,8
- vmovdqa XMMWORD PTR [ebx-96],xmm0
- vpaddd xmm4,xmm4,xmm6
- vmovdqa XMMWORD PTR 96[ebx],xmm6
- vpxor xmm2,xmm2,xmm4
- vpxor xmm7,xmm7,xmm1
-DB 143,232,120,194,210,7
-DB 143,232,120,194,255,16
- vmovdqa XMMWORD PTR [ebx-32],xmm2
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm3,xmm3,xmm5
- vmovdqa xmm0,XMMWORD PTR [ebx-128]
-DB 143,232,120,194,219,12
- vmovdqa xmm2,XMMWORD PTR [ebx-48]
- vpaddd xmm1,xmm1,xmm3
- vpxor xmm7,xmm7,xmm1
- vpaddd xmm0,xmm0,xmm2
-DB 143,232,120,194,255,8
- vmovdqa XMMWORD PTR [ebx-80],xmm1
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm3,xmm3,xmm5
- vpxor xmm6,xmm7,xmm0
-DB 143,232,120,194,219,7
-DB 143,232,120,194,246,16
- vmovdqa XMMWORD PTR [ebx-16],xmm3
- vpaddd xmm4,xmm4,xmm6
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm1,XMMWORD PTR [ebx-112]
-DB 143,232,120,194,210,12
- vmovdqa xmm3,XMMWORD PTR [ebx-32]
- vpaddd xmm0,xmm0,xmm2
- vmovdqa xmm7,XMMWORD PTR 64[ebx]
- vpxor xmm6,xmm6,xmm0
- vpaddd xmm1,xmm1,xmm3
-DB 143,232,120,194,246,8
- vmovdqa XMMWORD PTR [ebx-128],xmm0
- vpaddd xmm4,xmm4,xmm6
- vmovdqa XMMWORD PTR 112[ebx],xmm6
- vpxor xmm2,xmm2,xmm4
- vpxor xmm7,xmm7,xmm1
-DB 143,232,120,194,210,7
- vmovdqa XMMWORD PTR 32[ebx],xmm4
-DB 143,232,120,194,255,16
- vmovdqa XMMWORD PTR [ebx-48],xmm2
- vpaddd xmm5,xmm5,xmm7
- vmovdqa xmm4,XMMWORD PTR [ebx]
- vpxor xmm3,xmm3,xmm5
- vmovdqa xmm0,XMMWORD PTR [ebx-96]
-DB 143,232,120,194,219,12
- vmovdqa xmm2,XMMWORD PTR [ebx-16]
- vpaddd xmm1,xmm1,xmm3
- vmovdqa xmm6,XMMWORD PTR 80[ebx]
- vpxor xmm7,xmm7,xmm1
- vpaddd xmm0,xmm0,xmm2
-DB 143,232,120,194,255,8
- vmovdqa XMMWORD PTR [ebx-112],xmm1
- vpaddd xmm5,xmm5,xmm7
- vmovdqa XMMWORD PTR 64[ebx],xmm7
- vpxor xmm3,xmm3,xmm5
- vpxor xmm6,xmm6,xmm0
-DB 143,232,120,194,219,7
- vmovdqa XMMWORD PTR 48[ebx],xmm5
-DB 143,232,120,194,246,16
- vmovdqa XMMWORD PTR [ebx-32],xmm3
- vpaddd xmm4,xmm4,xmm6
- vmovdqa xmm5,XMMWORD PTR 16[ebx]
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm1,XMMWORD PTR [ebx-80]
-DB 143,232,120,194,210,12
- vmovdqa xmm3,XMMWORD PTR [ebx-64]
- vpaddd xmm0,xmm0,xmm2
- vmovdqa xmm7,XMMWORD PTR 96[ebx]
- vpxor xmm6,xmm6,xmm0
- vpaddd xmm1,xmm1,xmm3
-DB 143,232,120,194,246,8
- vmovdqa XMMWORD PTR [ebx-96],xmm0
- vpaddd xmm4,xmm4,xmm6
- vmovdqa XMMWORD PTR 80[ebx],xmm6
- vpxor xmm2,xmm2,xmm4
- vpxor xmm7,xmm7,xmm1
-DB 143,232,120,194,210,7
-DB 143,232,120,194,255,16
- vmovdqa XMMWORD PTR [ebx-16],xmm2
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm3,xmm3,xmm5
- vmovdqa xmm0,XMMWORD PTR [ebx-128]
-DB 143,232,120,194,219,12
- vpaddd xmm1,xmm1,xmm3
- vmovdqa xmm6,XMMWORD PTR 64[ebx]
- vpxor xmm7,xmm7,xmm1
-DB 143,232,120,194,255,8
- vmovdqa XMMWORD PTR [ebx-80],xmm1
- vpaddd xmm5,xmm5,xmm7
- vmovdqa XMMWORD PTR 96[ebx],xmm7
- vpxor xmm3,xmm3,xmm5
-DB 143,232,120,194,219,7
- dec edx
- jnz $L016loop
- vmovdqa XMMWORD PTR [ebx-64],xmm3
- vmovdqa XMMWORD PTR [ebx],xmm4
- vmovdqa XMMWORD PTR 16[ebx],xmm5
- vmovdqa XMMWORD PTR 64[ebx],xmm6
- vmovdqa XMMWORD PTR 96[ebx],xmm7
- vmovdqa xmm1,XMMWORD PTR [ebx-112]
- vmovdqa xmm2,XMMWORD PTR [ebx-96]
- vmovdqa xmm3,XMMWORD PTR [ebx-80]
- vpaddd xmm0,xmm0,XMMWORD PTR [ebp-128]
- vpaddd xmm1,xmm1,XMMWORD PTR [ebp-112]
- vpaddd xmm2,xmm2,XMMWORD PTR [ebp-96]
- vpaddd xmm3,xmm3,XMMWORD PTR [ebp-80]
- vpunpckldq xmm6,xmm0,xmm1
- vpunpckldq xmm7,xmm2,xmm3
- vpunpckhdq xmm0,xmm0,xmm1
- vpunpckhdq xmm2,xmm2,xmm3
- vpunpcklqdq xmm1,xmm6,xmm7
- vpunpckhqdq xmm6,xmm6,xmm7
- vpunpcklqdq xmm7,xmm0,xmm2
- vpunpckhqdq xmm3,xmm0,xmm2
- vpxor xmm4,xmm1,XMMWORD PTR [esi-128]
- vpxor xmm5,xmm6,XMMWORD PTR [esi-64]
- vpxor xmm6,xmm7,XMMWORD PTR [esi]
- vpxor xmm7,xmm3,XMMWORD PTR 64[esi]
- lea esi,QWORD PTR 16[esi]
- vmovdqa xmm0,XMMWORD PTR [ebx-64]
- vmovdqa xmm1,XMMWORD PTR [ebx-48]
- vmovdqa xmm2,XMMWORD PTR [ebx-32]
- vmovdqa xmm3,XMMWORD PTR [ebx-16]
- vmovdqu XMMWORD PTR [edi-128],xmm4
- vmovdqu XMMWORD PTR [edi-64],xmm5
- vmovdqu XMMWORD PTR [edi],xmm6
- vmovdqu XMMWORD PTR 64[edi],xmm7
- lea edi,QWORD PTR 16[edi]
- vpaddd xmm0,xmm0,XMMWORD PTR [ebp-64]
- vpaddd xmm1,xmm1,XMMWORD PTR [ebp-48]
- vpaddd xmm2,xmm2,XMMWORD PTR [ebp-32]
- vpaddd xmm3,xmm3,XMMWORD PTR [ebp-16]
- vpunpckldq xmm6,xmm0,xmm1
- vpunpckldq xmm7,xmm2,xmm3
- vpunpckhdq xmm0,xmm0,xmm1
- vpunpckhdq xmm2,xmm2,xmm3
- vpunpcklqdq xmm1,xmm6,xmm7
- vpunpckhqdq xmm6,xmm6,xmm7
- vpunpcklqdq xmm7,xmm0,xmm2
- vpunpckhqdq xmm3,xmm0,xmm2
- vpxor xmm4,xmm1,XMMWORD PTR [esi-128]
- vpxor xmm5,xmm6,XMMWORD PTR [esi-64]
- vpxor xmm6,xmm7,XMMWORD PTR [esi]
- vpxor xmm7,xmm3,XMMWORD PTR 64[esi]
- lea esi,QWORD PTR 16[esi]
- vmovdqa xmm0,XMMWORD PTR [ebx]
- vmovdqa xmm1,XMMWORD PTR 16[ebx]
- vmovdqa xmm2,XMMWORD PTR 32[ebx]
- vmovdqa xmm3,XMMWORD PTR 48[ebx]
- vmovdqu XMMWORD PTR [edi-128],xmm4
- vmovdqu XMMWORD PTR [edi-64],xmm5
- vmovdqu XMMWORD PTR [edi],xmm6
- vmovdqu XMMWORD PTR 64[edi],xmm7
- lea edi,QWORD PTR 16[edi]
- vpaddd xmm0,xmm0,XMMWORD PTR [ebp]
- vpaddd xmm1,xmm1,XMMWORD PTR 16[ebp]
- vpaddd xmm2,xmm2,XMMWORD PTR 32[ebp]
- vpaddd xmm3,xmm3,XMMWORD PTR 48[ebp]
- vpunpckldq xmm6,xmm0,xmm1
- vpunpckldq xmm7,xmm2,xmm3
- vpunpckhdq xmm0,xmm0,xmm1
- vpunpckhdq xmm2,xmm2,xmm3
- vpunpcklqdq xmm1,xmm6,xmm7
- vpunpckhqdq xmm6,xmm6,xmm7
- vpunpcklqdq xmm7,xmm0,xmm2
- vpunpckhqdq xmm3,xmm0,xmm2
- vpxor xmm4,xmm1,XMMWORD PTR [esi-128]
- vpxor xmm5,xmm6,XMMWORD PTR [esi-64]
- vpxor xmm6,xmm7,XMMWORD PTR [esi]
- vpxor xmm7,xmm3,XMMWORD PTR 64[esi]
- lea esi,QWORD PTR 16[esi]
- vmovdqa xmm0,XMMWORD PTR 64[ebx]
- vmovdqa xmm1,XMMWORD PTR 80[ebx]
- vmovdqa xmm2,XMMWORD PTR 96[ebx]
- vmovdqa xmm3,XMMWORD PTR 112[ebx]
- vmovdqu XMMWORD PTR [edi-128],xmm4
- vmovdqu XMMWORD PTR [edi-64],xmm5
- vmovdqu XMMWORD PTR [edi],xmm6
- vmovdqu XMMWORD PTR 64[edi],xmm7
- lea edi,QWORD PTR 16[edi]
- vpaddd xmm0,xmm0,XMMWORD PTR 64[ebp]
- vpaddd xmm1,xmm1,XMMWORD PTR 80[ebp]
- vpaddd xmm2,xmm2,XMMWORD PTR 96[ebp]
- vpaddd xmm3,xmm3,XMMWORD PTR 112[ebp]
- vpunpckldq xmm6,xmm0,xmm1
- vpunpckldq xmm7,xmm2,xmm3
- vpunpckhdq xmm0,xmm0,xmm1
- vpunpckhdq xmm2,xmm2,xmm3
- vpunpcklqdq xmm1,xmm6,xmm7
- vpunpckhqdq xmm6,xmm6,xmm7
- vpunpcklqdq xmm7,xmm0,xmm2
- vpunpckhqdq xmm3,xmm0,xmm2
- vpxor xmm4,xmm1,XMMWORD PTR [esi-128]
- vpxor xmm5,xmm6,XMMWORD PTR [esi-64]
- vpxor xmm6,xmm7,XMMWORD PTR [esi]
- vpxor xmm7,xmm3,XMMWORD PTR 64[esi]
- lea esi,QWORD PTR 208[esi]
- vmovdqu XMMWORD PTR [edi-128],xmm4
- vmovdqu XMMWORD PTR [edi-64],xmm5
- vmovdqu XMMWORD PTR [edi],xmm6
- vmovdqu XMMWORD PTR 64[edi],xmm7
- lea edi,QWORD PTR 208[edi]
- sub ecx,256
- jnc $L015outer_loop
- add ecx,256
- jz $L017done
- mov ebx,DWORD PTR 520[esp]
- lea esi,DWORD PTR [esi-128]
- mov edx,DWORD PTR 516[esp]
- lea edi,DWORD PTR [edi-128]
- vmovd xmm2,DWORD PTR 64[ebp]
- vmovdqu xmm3,XMMWORD PTR [ebx]
- vpaddd xmm2,xmm2,XMMWORD PTR 96[eax]
- vpand xmm3,xmm3,XMMWORD PTR 112[eax]
- vpor xmm3,xmm3,xmm2
-$L0141x:
- vmovdqa xmm0,XMMWORD PTR 32[eax]
- vmovdqu xmm1,XMMWORD PTR [edx]
- vmovdqu xmm2,XMMWORD PTR 16[edx]
- vmovdqa xmm6,XMMWORD PTR [eax]
- vmovdqa xmm7,XMMWORD PTR 16[eax]
- mov DWORD PTR 48[esp],ebp
- vmovdqa XMMWORD PTR [esp],xmm0
- vmovdqa XMMWORD PTR 16[esp],xmm1
- vmovdqa XMMWORD PTR 32[esp],xmm2
- vmovdqa XMMWORD PTR 48[esp],xmm3
- mov edx,10
- jmp $L018loop1x
-ALIGN 16
-$L019outer1x:
- vmovdqa xmm3,XMMWORD PTR 80[eax]
- vmovdqa xmm0,XMMWORD PTR [esp]
- vmovdqa xmm1,XMMWORD PTR 16[esp]
- vmovdqa xmm2,XMMWORD PTR 32[esp]
- vpaddd xmm3,xmm3,XMMWORD PTR 48[esp]
- mov edx,10
- vmovdqa XMMWORD PTR 48[esp],xmm3
- jmp $L018loop1x
-ALIGN 16
-$L018loop1x:
- vpaddd xmm0,xmm0,xmm1
- vpxor xmm3,xmm3,xmm0
-DB 143,232,120,194,219,16
- vpaddd xmm2,xmm2,xmm3
- vpxor xmm1,xmm1,xmm2
-DB 143,232,120,194,201,12
- vpaddd xmm0,xmm0,xmm1
- vpxor xmm3,xmm3,xmm0
-DB 143,232,120,194,219,8
- vpaddd xmm2,xmm2,xmm3
- vpxor xmm1,xmm1,xmm2
-DB 143,232,120,194,201,7
- vpshufd xmm2,xmm2,78
- vpshufd xmm1,xmm1,57
- vpshufd xmm3,xmm3,147
- vpaddd xmm0,xmm0,xmm1
- vpxor xmm3,xmm3,xmm0
-DB 143,232,120,194,219,16
- vpaddd xmm2,xmm2,xmm3
- vpxor xmm1,xmm1,xmm2
-DB 143,232,120,194,201,12
- vpaddd xmm0,xmm0,xmm1
- vpxor xmm3,xmm3,xmm0
-DB 143,232,120,194,219,8
- vpaddd xmm2,xmm2,xmm3
- vpxor xmm1,xmm1,xmm2
-DB 143,232,120,194,201,7
- vpshufd xmm2,xmm2,78
- vpshufd xmm1,xmm1,147
- vpshufd xmm3,xmm3,57
- dec edx
- jnz $L018loop1x
- vpaddd xmm0,xmm0,XMMWORD PTR [esp]
- vpaddd xmm1,xmm1,XMMWORD PTR 16[esp]
- vpaddd xmm2,xmm2,XMMWORD PTR 32[esp]
- vpaddd xmm3,xmm3,XMMWORD PTR 48[esp]
- cmp ecx,64
- jb $L020tail
- vpxor xmm0,xmm0,XMMWORD PTR [esi]
- vpxor xmm1,xmm1,XMMWORD PTR 16[esi]
- vpxor xmm2,xmm2,XMMWORD PTR 32[esi]
- vpxor xmm3,xmm3,XMMWORD PTR 48[esi]
- lea esi,DWORD PTR 64[esi]
- vmovdqu XMMWORD PTR [edi],xmm0
- vmovdqu XMMWORD PTR 16[edi],xmm1
- vmovdqu XMMWORD PTR 32[edi],xmm2
- vmovdqu XMMWORD PTR 48[edi],xmm3
- lea edi,DWORD PTR 64[edi]
- sub ecx,64
- jnz $L019outer1x
- jmp $L017done
-$L020tail:
- vmovdqa XMMWORD PTR [esp],xmm0
- vmovdqa XMMWORD PTR 16[esp],xmm1
- vmovdqa XMMWORD PTR 32[esp],xmm2
- vmovdqa XMMWORD PTR 48[esp],xmm3
- xor eax,eax
- xor edx,edx
- xor ebp,ebp
-$L021tail_loop:
- mov al,BYTE PTR [ebp*1+esp]
- mov dl,BYTE PTR [ebp*1+esi]
- lea ebp,DWORD PTR 1[ebp]
- xor al,dl
- mov BYTE PTR [ebp*1+edi-1],al
- dec ecx
- jnz $L021tail_loop
-$L017done:
- vzeroupper
- mov esp,DWORD PTR 512[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_ChaCha20_xop ENDP
-.text$ ENDS
-.bss SEGMENT 'BSS'
-COMM _OPENSSL_ia32cap_P:DWORD:4
-.bss ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN 16
+_ChaCha20_ctr32 PROC PUBLIC
+$L_ChaCha20_ctr32_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ xor eax,eax
+ cmp eax,DWORD PTR 28[esp]
+ je $L000no_data
+ call $Lpic_point
+$Lpic_point::
+ pop eax
+ lea ebp,DWORD PTR _OPENSSL_ia32cap_P
+ test DWORD PTR [ebp],16777216
+ jz $L001x86
+ test DWORD PTR 4[ebp],512
+ jz $L001x86
+ jmp $Lssse3_shortcut
+$L001x86:
+ mov esi,DWORD PTR 32[esp]
+ mov edi,DWORD PTR 36[esp]
+ sub esp,132
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov edx,DWORD PTR 12[esi]
+ mov DWORD PTR 80[esp],eax
+ mov DWORD PTR 84[esp],ebx
+ mov DWORD PTR 88[esp],ecx
+ mov DWORD PTR 92[esp],edx
+ mov eax,DWORD PTR 16[esi]
+ mov ebx,DWORD PTR 20[esi]
+ mov ecx,DWORD PTR 24[esi]
+ mov edx,DWORD PTR 28[esi]
+ mov DWORD PTR 96[esp],eax
+ mov DWORD PTR 100[esp],ebx
+ mov DWORD PTR 104[esp],ecx
+ mov DWORD PTR 108[esp],edx
+ mov eax,DWORD PTR [edi]
+ mov ebx,DWORD PTR 4[edi]
+ mov ecx,DWORD PTR 8[edi]
+ mov edx,DWORD PTR 12[edi]
+ sub eax,1
+ mov DWORD PTR 112[esp],eax
+ mov DWORD PTR 116[esp],ebx
+ mov DWORD PTR 120[esp],ecx
+ mov DWORD PTR 124[esp],edx
+ jmp $L002entry
+ALIGN 16
+$L003outer_loop:
+ mov DWORD PTR 156[esp],ebx
+ mov DWORD PTR 152[esp],eax
+ mov DWORD PTR 160[esp],ecx
+$L002entry:
+ mov eax,1634760805
+ mov DWORD PTR 4[esp],857760878
+ mov DWORD PTR 8[esp],2036477234
+ mov DWORD PTR 12[esp],1797285236
+ mov ebx,DWORD PTR 84[esp]
+ mov ebp,DWORD PTR 88[esp]
+ mov ecx,DWORD PTR 104[esp]
+ mov esi,DWORD PTR 108[esp]
+ mov edx,DWORD PTR 116[esp]
+ mov edi,DWORD PTR 120[esp]
+ mov DWORD PTR 20[esp],ebx
+ mov DWORD PTR 24[esp],ebp
+ mov DWORD PTR 40[esp],ecx
+ mov DWORD PTR 44[esp],esi
+ mov DWORD PTR 52[esp],edx
+ mov DWORD PTR 56[esp],edi
+ mov ebx,DWORD PTR 92[esp]
+ mov edi,DWORD PTR 124[esp]
+ mov edx,DWORD PTR 112[esp]
+ mov ebp,DWORD PTR 80[esp]
+ mov ecx,DWORD PTR 96[esp]
+ mov esi,DWORD PTR 100[esp]
+ add edx,1
+ mov DWORD PTR 28[esp],ebx
+ mov DWORD PTR 60[esp],edi
+ mov DWORD PTR 112[esp],edx
+ mov ebx,10
+ jmp $L004loop
+ALIGN 16
+$L004loop:
+ add eax,ebp
+ mov DWORD PTR 128[esp],ebx
+ mov ebx,ebp
+ xor edx,eax
+ rol edx,16
+ add ecx,edx
+ xor ebx,ecx
+ mov edi,DWORD PTR 52[esp]
+ rol ebx,12
+ mov ebp,DWORD PTR 20[esp]
+ add eax,ebx
+ xor edx,eax
+ mov DWORD PTR [esp],eax
+ rol edx,8
+ mov eax,DWORD PTR 4[esp]
+ add ecx,edx
+ mov DWORD PTR 48[esp],edx
+ xor ebx,ecx
+ add eax,ebp
+ rol ebx,7
+ xor edi,eax
+ mov DWORD PTR 32[esp],ecx
+ rol edi,16
+ mov DWORD PTR 16[esp],ebx
+ add esi,edi
+ mov ecx,DWORD PTR 40[esp]
+ xor ebp,esi
+ mov edx,DWORD PTR 56[esp]
+ rol ebp,12
+ mov ebx,DWORD PTR 24[esp]
+ add eax,ebp
+ xor edi,eax
+ mov DWORD PTR 4[esp],eax
+ rol edi,8
+ mov eax,DWORD PTR 8[esp]
+ add esi,edi
+ mov DWORD PTR 52[esp],edi
+ xor ebp,esi
+ add eax,ebx
+ rol ebp,7
+ xor edx,eax
+ mov DWORD PTR 36[esp],esi
+ rol edx,16
+ mov DWORD PTR 20[esp],ebp
+ add ecx,edx
+ mov esi,DWORD PTR 44[esp]
+ xor ebx,ecx
+ mov edi,DWORD PTR 60[esp]
+ rol ebx,12
+ mov ebp,DWORD PTR 28[esp]
+ add eax,ebx
+ xor edx,eax
+ mov DWORD PTR 8[esp],eax
+ rol edx,8
+ mov eax,DWORD PTR 12[esp]
+ add ecx,edx
+ mov DWORD PTR 56[esp],edx
+ xor ebx,ecx
+ add eax,ebp
+ rol ebx,7
+ xor edi,eax
+ rol edi,16
+ mov DWORD PTR 24[esp],ebx
+ add esi,edi
+ xor ebp,esi
+ rol ebp,12
+ mov ebx,DWORD PTR 20[esp]
+ add eax,ebp
+ xor edi,eax
+ mov DWORD PTR 12[esp],eax
+ rol edi,8
+ mov eax,DWORD PTR [esp]
+ add esi,edi
+ mov edx,edi
+ xor ebp,esi
+ add eax,ebx
+ rol ebp,7
+ xor edx,eax
+ rol edx,16
+ mov DWORD PTR 28[esp],ebp
+ add ecx,edx
+ xor ebx,ecx
+ mov edi,DWORD PTR 48[esp]
+ rol ebx,12
+ mov ebp,DWORD PTR 24[esp]
+ add eax,ebx
+ xor edx,eax
+ mov DWORD PTR [esp],eax
+ rol edx,8
+ mov eax,DWORD PTR 4[esp]
+ add ecx,edx
+ mov DWORD PTR 60[esp],edx
+ xor ebx,ecx
+ add eax,ebp
+ rol ebx,7
+ xor edi,eax
+ mov DWORD PTR 40[esp],ecx
+ rol edi,16
+ mov DWORD PTR 20[esp],ebx
+ add esi,edi
+ mov ecx,DWORD PTR 32[esp]
+ xor ebp,esi
+ mov edx,DWORD PTR 52[esp]
+ rol ebp,12
+ mov ebx,DWORD PTR 28[esp]
+ add eax,ebp
+ xor edi,eax
+ mov DWORD PTR 4[esp],eax
+ rol edi,8
+ mov eax,DWORD PTR 8[esp]
+ add esi,edi
+ mov DWORD PTR 48[esp],edi
+ xor ebp,esi
+ add eax,ebx
+ rol ebp,7
+ xor edx,eax
+ mov DWORD PTR 44[esp],esi
+ rol edx,16
+ mov DWORD PTR 24[esp],ebp
+ add ecx,edx
+ mov esi,DWORD PTR 36[esp]
+ xor ebx,ecx
+ mov edi,DWORD PTR 56[esp]
+ rol ebx,12
+ mov ebp,DWORD PTR 16[esp]
+ add eax,ebx
+ xor edx,eax
+ mov DWORD PTR 8[esp],eax
+ rol edx,8
+ mov eax,DWORD PTR 12[esp]
+ add ecx,edx
+ mov DWORD PTR 52[esp],edx
+ xor ebx,ecx
+ add eax,ebp
+ rol ebx,7
+ xor edi,eax
+ rol edi,16
+ mov DWORD PTR 28[esp],ebx
+ add esi,edi
+ xor ebp,esi
+ mov edx,DWORD PTR 48[esp]
+ rol ebp,12
+ mov ebx,DWORD PTR 128[esp]
+ add eax,ebp
+ xor edi,eax
+ mov DWORD PTR 12[esp],eax
+ rol edi,8
+ mov eax,DWORD PTR [esp]
+ add esi,edi
+ mov DWORD PTR 56[esp],edi
+ xor ebp,esi
+ rol ebp,7
+ dec ebx
+ jnz $L004loop
+ mov ebx,DWORD PTR 160[esp]
+ add eax,1634760805
+ add ebp,DWORD PTR 80[esp]
+ add ecx,DWORD PTR 96[esp]
+ add esi,DWORD PTR 100[esp]
+ cmp ebx,64
+ jb $L005tail
+ mov ebx,DWORD PTR 156[esp]
+ add edx,DWORD PTR 112[esp]
+ add edi,DWORD PTR 120[esp]
+ xor eax,DWORD PTR [ebx]
+ xor ebp,DWORD PTR 16[ebx]
+ mov DWORD PTR [esp],eax
+ mov eax,DWORD PTR 152[esp]
+ xor ecx,DWORD PTR 32[ebx]
+ xor esi,DWORD PTR 36[ebx]
+ xor edx,DWORD PTR 48[ebx]
+ xor edi,DWORD PTR 56[ebx]
+ mov DWORD PTR 16[eax],ebp
+ mov DWORD PTR 32[eax],ecx
+ mov DWORD PTR 36[eax],esi
+ mov DWORD PTR 48[eax],edx
+ mov DWORD PTR 56[eax],edi
+ mov ebp,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 8[esp]
+ mov esi,DWORD PTR 12[esp]
+ mov edx,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ add ebp,857760878
+ add ecx,2036477234
+ add esi,1797285236
+ add edx,DWORD PTR 84[esp]
+ add edi,DWORD PTR 88[esp]
+ xor ebp,DWORD PTR 4[ebx]
+ xor ecx,DWORD PTR 8[ebx]
+ xor esi,DWORD PTR 12[ebx]
+ xor edx,DWORD PTR 20[ebx]
+ xor edi,DWORD PTR 24[ebx]
+ mov DWORD PTR 4[eax],ebp
+ mov DWORD PTR 8[eax],ecx
+ mov DWORD PTR 12[eax],esi
+ mov DWORD PTR 20[eax],edx
+ mov DWORD PTR 24[eax],edi
+ mov ebp,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 40[esp]
+ mov esi,DWORD PTR 44[esp]
+ mov edx,DWORD PTR 52[esp]
+ mov edi,DWORD PTR 60[esp]
+ add ebp,DWORD PTR 92[esp]
+ add ecx,DWORD PTR 104[esp]
+ add esi,DWORD PTR 108[esp]
+ add edx,DWORD PTR 116[esp]
+ add edi,DWORD PTR 124[esp]
+ xor ebp,DWORD PTR 28[ebx]
+ xor ecx,DWORD PTR 40[ebx]
+ xor esi,DWORD PTR 44[ebx]
+ xor edx,DWORD PTR 52[ebx]
+ xor edi,DWORD PTR 60[ebx]
+ lea ebx,DWORD PTR 64[ebx]
+ mov DWORD PTR 28[eax],ebp
+ mov ebp,DWORD PTR [esp]
+ mov DWORD PTR 40[eax],ecx
+ mov ecx,DWORD PTR 160[esp]
+ mov DWORD PTR 44[eax],esi
+ mov DWORD PTR 52[eax],edx
+ mov DWORD PTR 60[eax],edi
+ mov DWORD PTR [eax],ebp
+ lea eax,DWORD PTR 64[eax]
+ sub ecx,64
+ jnz $L003outer_loop
+ jmp $L006done
+$L005tail:
+ add edx,DWORD PTR 112[esp]
+ add edi,DWORD PTR 120[esp]
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 16[esp],ebp
+ mov DWORD PTR 32[esp],ecx
+ mov DWORD PTR 36[esp],esi
+ mov DWORD PTR 48[esp],edx
+ mov DWORD PTR 56[esp],edi
+ mov ebp,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 8[esp]
+ mov esi,DWORD PTR 12[esp]
+ mov edx,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ add ebp,857760878
+ add ecx,2036477234
+ add esi,1797285236
+ add edx,DWORD PTR 84[esp]
+ add edi,DWORD PTR 88[esp]
+ mov DWORD PTR 4[esp],ebp
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 12[esp],esi
+ mov DWORD PTR 20[esp],edx
+ mov DWORD PTR 24[esp],edi
+ mov ebp,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 40[esp]
+ mov esi,DWORD PTR 44[esp]
+ mov edx,DWORD PTR 52[esp]
+ mov edi,DWORD PTR 60[esp]
+ add ebp,DWORD PTR 92[esp]
+ add ecx,DWORD PTR 104[esp]
+ add esi,DWORD PTR 108[esp]
+ add edx,DWORD PTR 116[esp]
+ add edi,DWORD PTR 124[esp]
+ mov DWORD PTR 28[esp],ebp
+ mov ebp,DWORD PTR 156[esp]
+ mov DWORD PTR 40[esp],ecx
+ mov ecx,DWORD PTR 152[esp]
+ mov DWORD PTR 44[esp],esi
+ xor esi,esi
+ mov DWORD PTR 52[esp],edx
+ mov DWORD PTR 60[esp],edi
+ xor eax,eax
+ xor edx,edx
+$L007tail_loop:
+ mov al,BYTE PTR [ebp*1+esi]
+ mov dl,BYTE PTR [esi*1+esp]
+ lea esi,DWORD PTR 1[esi]
+ xor al,dl
+ mov BYTE PTR [esi*1+ecx-1],al
+ dec ebx
+ jnz $L007tail_loop
+$L006done:
+ add esp,132
+$L000no_data:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_ChaCha20_ctr32 ENDP
+ALIGN 16
+_ChaCha20_ssse3 PROC PUBLIC
+$L_ChaCha20_ssse3_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+$Lssse3_shortcut::
+ test DWORD PTR 4[ebp],2048
+ jnz $Lxop_shortcut
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov ecx,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ mov ebx,DWORD PTR 36[esp]
+ mov ebp,esp
+ sub esp,524
+ and esp,-64
+ mov DWORD PTR 512[esp],ebp
+ lea eax,DWORD PTR ($Lssse3_data-$Lpic_point)[eax]
+ movdqu xmm3,XMMWORD PTR [ebx]
+$L0081x:
+ movdqa xmm0,XMMWORD PTR 32[eax]
+ movdqu xmm1,XMMWORD PTR [edx]
+ movdqu xmm2,XMMWORD PTR 16[edx]
+ movdqa xmm6,XMMWORD PTR [eax]
+ movdqa xmm7,XMMWORD PTR 16[eax]
+ mov DWORD PTR 48[esp],ebp
+ movdqa XMMWORD PTR [esp],xmm0
+ movdqa XMMWORD PTR 16[esp],xmm1
+ movdqa XMMWORD PTR 32[esp],xmm2
+ movdqa XMMWORD PTR 48[esp],xmm3
+ mov edx,10
+ jmp $L009loop1x
+ALIGN 16
+$L010outer1x:
+ movdqa xmm3,XMMWORD PTR 80[eax]
+ movdqa xmm0,XMMWORD PTR [esp]
+ movdqa xmm1,XMMWORD PTR 16[esp]
+ movdqa xmm2,XMMWORD PTR 32[esp]
+ paddd xmm3,XMMWORD PTR 48[esp]
+ mov edx,10
+ movdqa XMMWORD PTR 48[esp],xmm3
+ jmp $L009loop1x
+ALIGN 16
+$L009loop1x:
+ paddd xmm0,xmm1
+ pxor xmm3,xmm0
+DB 102,15,56,0,222
+ paddd xmm2,xmm3
+ pxor xmm1,xmm2
+ movdqa xmm4,xmm1
+ psrld xmm1,20
+ pslld xmm4,12
+ por xmm1,xmm4
+ paddd xmm0,xmm1
+ pxor xmm3,xmm0
+DB 102,15,56,0,223
+ paddd xmm2,xmm3
+ pxor xmm1,xmm2
+ movdqa xmm4,xmm1
+ psrld xmm1,25
+ pslld xmm4,7
+ por xmm1,xmm4
+ pshufd xmm2,xmm2,78
+ pshufd xmm1,xmm1,57
+ pshufd xmm3,xmm3,147
+ nop
+ paddd xmm0,xmm1
+ pxor xmm3,xmm0
+DB 102,15,56,0,222
+ paddd xmm2,xmm3
+ pxor xmm1,xmm2
+ movdqa xmm4,xmm1
+ psrld xmm1,20
+ pslld xmm4,12
+ por xmm1,xmm4
+ paddd xmm0,xmm1
+ pxor xmm3,xmm0
+DB 102,15,56,0,223
+ paddd xmm2,xmm3
+ pxor xmm1,xmm2
+ movdqa xmm4,xmm1
+ psrld xmm1,25
+ pslld xmm4,7
+ por xmm1,xmm4
+ pshufd xmm2,xmm2,78
+ pshufd xmm1,xmm1,147
+ pshufd xmm3,xmm3,57
+ dec edx
+ jnz $L009loop1x
+ paddd xmm0,XMMWORD PTR [esp]
+ paddd xmm1,XMMWORD PTR 16[esp]
+ paddd xmm2,XMMWORD PTR 32[esp]
+ paddd xmm3,XMMWORD PTR 48[esp]
+ cmp ecx,64
+ jb $L011tail
+ movdqu xmm4,XMMWORD PTR [esi]
+ movdqu xmm5,XMMWORD PTR 16[esi]
+ pxor xmm0,xmm4
+ movdqu xmm4,XMMWORD PTR 32[esi]
+ pxor xmm1,xmm5
+ movdqu xmm5,XMMWORD PTR 48[esi]
+ pxor xmm2,xmm4
+ pxor xmm3,xmm5
+ lea esi,DWORD PTR 64[esi]
+ movdqu XMMWORD PTR [edi],xmm0
+ movdqu XMMWORD PTR 16[edi],xmm1
+ movdqu XMMWORD PTR 32[edi],xmm2
+ movdqu XMMWORD PTR 48[edi],xmm3
+ lea edi,DWORD PTR 64[edi]
+ sub ecx,64
+ jnz $L010outer1x
+ jmp $L012done
+$L011tail:
+ movdqa XMMWORD PTR [esp],xmm0
+ movdqa XMMWORD PTR 16[esp],xmm1
+ movdqa XMMWORD PTR 32[esp],xmm2
+ movdqa XMMWORD PTR 48[esp],xmm3
+ xor eax,eax
+ xor edx,edx
+ xor ebp,ebp
+$L013tail_loop:
+ mov al,BYTE PTR [ebp*1+esp]
+ mov dl,BYTE PTR [ebp*1+esi]
+ lea ebp,DWORD PTR 1[ebp]
+ xor al,dl
+ mov BYTE PTR [ebp*1+edi-1],al
+ dec ecx
+ jnz $L013tail_loop
+$L012done:
+ mov esp,DWORD PTR 512[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_ChaCha20_ssse3 ENDP
+ALIGN 64
+$Lssse3_data::
+DB 2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13
+DB 3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14
+DD 1634760805,857760878,2036477234,1797285236
+DD 0,1,2,3
+DD 4,4,4,4
+DD 1,0,0,0
+DD 4,0,0,0
+DD 0,-1,-1,-1
+ALIGN 64
+DB 67,104,97,67,104,97,50,48,32,102,111,114,32,120,56,54
+DB 44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
+DB 60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
+DB 114,103,62,0
+ALIGN 16
+_ChaCha20_xop PROC PUBLIC
+$L_ChaCha20_xop_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+$Lxop_shortcut::
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov ecx,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ mov ebx,DWORD PTR 36[esp]
+ vzeroupper
+ mov ebp,esp
+ sub esp,524
+ and esp,-64
+ mov DWORD PTR 512[esp],ebp
+ lea eax,DWORD PTR ($Lssse3_data-$Lpic_point)[eax]
+ vmovdqu xmm3,XMMWORD PTR [ebx]
+ cmp ecx,256
+ jb $L0141x
+ mov DWORD PTR 516[esp],edx
+ mov DWORD PTR 520[esp],ebx
+ sub ecx,256
+ lea ebp,DWORD PTR 384[esp]
+ vmovdqu xmm7,XMMWORD PTR [edx]
+ vpshufd xmm0,xmm3,0
+ vpshufd xmm1,xmm3,85
+ vpshufd xmm2,xmm3,170
+ vpshufd xmm3,xmm3,255
+ vpaddd xmm0,xmm0,XMMWORD PTR 48[eax]
+ vpshufd xmm4,xmm7,0
+ vpshufd xmm5,xmm7,85
+ vpsubd xmm0,xmm0,XMMWORD PTR 64[eax]
+ vpshufd xmm6,xmm7,170
+ vpshufd xmm7,xmm7,255
+ vmovdqa XMMWORD PTR 64[ebp],xmm0
+ vmovdqa XMMWORD PTR 80[ebp],xmm1
+ vmovdqa XMMWORD PTR 96[ebp],xmm2
+ vmovdqa XMMWORD PTR 112[ebp],xmm3
+ vmovdqu xmm3,XMMWORD PTR 16[edx]
+ vmovdqa XMMWORD PTR [ebp-64],xmm4
+ vmovdqa XMMWORD PTR [ebp-48],xmm5
+ vmovdqa XMMWORD PTR [ebp-32],xmm6
+ vmovdqa XMMWORD PTR [ebp-16],xmm7
+ vmovdqa xmm7,XMMWORD PTR 32[eax]
+ lea ebx,DWORD PTR 128[esp]
+ vpshufd xmm0,xmm3,0
+ vpshufd xmm1,xmm3,85
+ vpshufd xmm2,xmm3,170
+ vpshufd xmm3,xmm3,255
+ vpshufd xmm4,xmm7,0
+ vpshufd xmm5,xmm7,85
+ vpshufd xmm6,xmm7,170
+ vpshufd xmm7,xmm7,255
+ vmovdqa XMMWORD PTR [ebp],xmm0
+ vmovdqa XMMWORD PTR 16[ebp],xmm1
+ vmovdqa XMMWORD PTR 32[ebp],xmm2
+ vmovdqa XMMWORD PTR 48[ebp],xmm3
+ vmovdqa XMMWORD PTR [ebp-128],xmm4
+ vmovdqa XMMWORD PTR [ebp-112],xmm5
+ vmovdqa XMMWORD PTR [ebp-96],xmm6
+ vmovdqa XMMWORD PTR [ebp-80],xmm7
+ lea esi,DWORD PTR 128[esi]
+ lea edi,DWORD PTR 128[edi]
+ jmp $L015outer_loop
+ALIGN 32
+$L015outer_loop:
+ vmovdqa xmm1,XMMWORD PTR [ebp-112]
+ vmovdqa xmm2,XMMWORD PTR [ebp-96]
+ vmovdqa xmm3,XMMWORD PTR [ebp-80]
+ vmovdqa xmm5,XMMWORD PTR [ebp-48]
+ vmovdqa xmm6,XMMWORD PTR [ebp-32]
+ vmovdqa xmm7,XMMWORD PTR [ebp-16]
+ vmovdqa XMMWORD PTR [ebx-112],xmm1
+ vmovdqa XMMWORD PTR [ebx-96],xmm2
+ vmovdqa XMMWORD PTR [ebx-80],xmm3
+ vmovdqa XMMWORD PTR [ebx-48],xmm5
+ vmovdqa XMMWORD PTR [ebx-32],xmm6
+ vmovdqa XMMWORD PTR [ebx-16],xmm7
+ vmovdqa xmm2,XMMWORD PTR 32[ebp]
+ vmovdqa xmm3,XMMWORD PTR 48[ebp]
+ vmovdqa xmm4,XMMWORD PTR 64[ebp]
+ vmovdqa xmm5,XMMWORD PTR 80[ebp]
+ vmovdqa xmm6,XMMWORD PTR 96[ebp]
+ vmovdqa xmm7,XMMWORD PTR 112[ebp]
+ vpaddd xmm4,xmm4,XMMWORD PTR 64[eax]
+ vmovdqa XMMWORD PTR 32[ebx],xmm2
+ vmovdqa XMMWORD PTR 48[ebx],xmm3
+ vmovdqa XMMWORD PTR 64[ebx],xmm4
+ vmovdqa XMMWORD PTR 80[ebx],xmm5
+ vmovdqa XMMWORD PTR 96[ebx],xmm6
+ vmovdqa XMMWORD PTR 112[ebx],xmm7
+ vmovdqa XMMWORD PTR 64[ebp],xmm4
+ vmovdqa xmm0,XMMWORD PTR [ebp-128]
+ vmovdqa xmm6,xmm4
+ vmovdqa xmm3,XMMWORD PTR [ebp-64]
+ vmovdqa xmm4,XMMWORD PTR [ebp]
+ vmovdqa xmm5,XMMWORD PTR 16[ebp]
+ mov edx,10
+ nop
+ALIGN 32
+$L016loop:
+ vpaddd xmm0,xmm0,xmm3
+ vpxor xmm6,xmm6,xmm0
+DB 143,232,120,194,246,16
+ vpaddd xmm4,xmm4,xmm6
+ vpxor xmm2,xmm3,xmm4
+ vmovdqa xmm1,XMMWORD PTR [ebx-112]
+DB 143,232,120,194,210,12
+ vmovdqa xmm3,XMMWORD PTR [ebx-48]
+ vpaddd xmm0,xmm0,xmm2
+ vmovdqa xmm7,XMMWORD PTR 80[ebx]
+ vpxor xmm6,xmm6,xmm0
+ vpaddd xmm1,xmm1,xmm3
+DB 143,232,120,194,246,8
+ vmovdqa XMMWORD PTR [ebx-128],xmm0
+ vpaddd xmm4,xmm4,xmm6
+ vmovdqa XMMWORD PTR 64[ebx],xmm6
+ vpxor xmm2,xmm2,xmm4
+ vpxor xmm7,xmm7,xmm1
+DB 143,232,120,194,210,7
+ vmovdqa XMMWORD PTR [ebx],xmm4
+DB 143,232,120,194,255,16
+ vmovdqa XMMWORD PTR [ebx-64],xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vmovdqa xmm4,XMMWORD PTR 32[ebx]
+ vpxor xmm3,xmm3,xmm5
+ vmovdqa xmm0,XMMWORD PTR [ebx-96]
+DB 143,232,120,194,219,12
+ vmovdqa xmm2,XMMWORD PTR [ebx-32]
+ vpaddd xmm1,xmm1,xmm3
+ vmovdqa xmm6,XMMWORD PTR 96[ebx]
+ vpxor xmm7,xmm7,xmm1
+ vpaddd xmm0,xmm0,xmm2
+DB 143,232,120,194,255,8
+ vmovdqa XMMWORD PTR [ebx-112],xmm1
+ vpaddd xmm5,xmm5,xmm7
+ vmovdqa XMMWORD PTR 80[ebx],xmm7
+ vpxor xmm3,xmm3,xmm5
+ vpxor xmm6,xmm6,xmm0
+DB 143,232,120,194,219,7
+ vmovdqa XMMWORD PTR 16[ebx],xmm5
+DB 143,232,120,194,246,16
+ vmovdqa XMMWORD PTR [ebx-48],xmm3
+ vpaddd xmm4,xmm4,xmm6
+ vmovdqa xmm5,XMMWORD PTR 48[ebx]
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm1,XMMWORD PTR [ebx-80]
+DB 143,232,120,194,210,12
+ vmovdqa xmm3,XMMWORD PTR [ebx-16]
+ vpaddd xmm0,xmm0,xmm2
+ vmovdqa xmm7,XMMWORD PTR 112[ebx]
+ vpxor xmm6,xmm6,xmm0
+ vpaddd xmm1,xmm1,xmm3
+DB 143,232,120,194,246,8
+ vmovdqa XMMWORD PTR [ebx-96],xmm0
+ vpaddd xmm4,xmm4,xmm6
+ vmovdqa XMMWORD PTR 96[ebx],xmm6
+ vpxor xmm2,xmm2,xmm4
+ vpxor xmm7,xmm7,xmm1
+DB 143,232,120,194,210,7
+DB 143,232,120,194,255,16
+ vmovdqa XMMWORD PTR [ebx-32],xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm3,xmm3,xmm5
+ vmovdqa xmm0,XMMWORD PTR [ebx-128]
+DB 143,232,120,194,219,12
+ vmovdqa xmm2,XMMWORD PTR [ebx-48]
+ vpaddd xmm1,xmm1,xmm3
+ vpxor xmm7,xmm7,xmm1
+ vpaddd xmm0,xmm0,xmm2
+DB 143,232,120,194,255,8
+ vmovdqa XMMWORD PTR [ebx-80],xmm1
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm3,xmm3,xmm5
+ vpxor xmm6,xmm7,xmm0
+DB 143,232,120,194,219,7
+DB 143,232,120,194,246,16
+ vmovdqa XMMWORD PTR [ebx-16],xmm3
+ vpaddd xmm4,xmm4,xmm6
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm1,XMMWORD PTR [ebx-112]
+DB 143,232,120,194,210,12
+ vmovdqa xmm3,XMMWORD PTR [ebx-32]
+ vpaddd xmm0,xmm0,xmm2
+ vmovdqa xmm7,XMMWORD PTR 64[ebx]
+ vpxor xmm6,xmm6,xmm0
+ vpaddd xmm1,xmm1,xmm3
+DB 143,232,120,194,246,8
+ vmovdqa XMMWORD PTR [ebx-128],xmm0
+ vpaddd xmm4,xmm4,xmm6
+ vmovdqa XMMWORD PTR 112[ebx],xmm6
+ vpxor xmm2,xmm2,xmm4
+ vpxor xmm7,xmm7,xmm1
+DB 143,232,120,194,210,7
+ vmovdqa XMMWORD PTR 32[ebx],xmm4
+DB 143,232,120,194,255,16
+ vmovdqa XMMWORD PTR [ebx-48],xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vmovdqa xmm4,XMMWORD PTR [ebx]
+ vpxor xmm3,xmm3,xmm5
+ vmovdqa xmm0,XMMWORD PTR [ebx-96]
+DB 143,232,120,194,219,12
+ vmovdqa xmm2,XMMWORD PTR [ebx-16]
+ vpaddd xmm1,xmm1,xmm3
+ vmovdqa xmm6,XMMWORD PTR 80[ebx]
+ vpxor xmm7,xmm7,xmm1
+ vpaddd xmm0,xmm0,xmm2
+DB 143,232,120,194,255,8
+ vmovdqa XMMWORD PTR [ebx-112],xmm1
+ vpaddd xmm5,xmm5,xmm7
+ vmovdqa XMMWORD PTR 64[ebx],xmm7
+ vpxor xmm3,xmm3,xmm5
+ vpxor xmm6,xmm6,xmm0
+DB 143,232,120,194,219,7
+ vmovdqa XMMWORD PTR 48[ebx],xmm5
+DB 143,232,120,194,246,16
+ vmovdqa XMMWORD PTR [ebx-32],xmm3
+ vpaddd xmm4,xmm4,xmm6
+ vmovdqa xmm5,XMMWORD PTR 16[ebx]
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm1,XMMWORD PTR [ebx-80]
+DB 143,232,120,194,210,12
+ vmovdqa xmm3,XMMWORD PTR [ebx-64]
+ vpaddd xmm0,xmm0,xmm2
+ vmovdqa xmm7,XMMWORD PTR 96[ebx]
+ vpxor xmm6,xmm6,xmm0
+ vpaddd xmm1,xmm1,xmm3
+DB 143,232,120,194,246,8
+ vmovdqa XMMWORD PTR [ebx-96],xmm0
+ vpaddd xmm4,xmm4,xmm6
+ vmovdqa XMMWORD PTR 80[ebx],xmm6
+ vpxor xmm2,xmm2,xmm4
+ vpxor xmm7,xmm7,xmm1
+DB 143,232,120,194,210,7
+DB 143,232,120,194,255,16
+ vmovdqa XMMWORD PTR [ebx-16],xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm3,xmm3,xmm5
+ vmovdqa xmm0,XMMWORD PTR [ebx-128]
+DB 143,232,120,194,219,12
+ vpaddd xmm1,xmm1,xmm3
+ vmovdqa xmm6,XMMWORD PTR 64[ebx]
+ vpxor xmm7,xmm7,xmm1
+DB 143,232,120,194,255,8
+ vmovdqa XMMWORD PTR [ebx-80],xmm1
+ vpaddd xmm5,xmm5,xmm7
+ vmovdqa XMMWORD PTR 96[ebx],xmm7
+ vpxor xmm3,xmm3,xmm5
+DB 143,232,120,194,219,7
+ dec edx
+ jnz $L016loop
+ vmovdqa XMMWORD PTR [ebx-64],xmm3
+ vmovdqa XMMWORD PTR [ebx],xmm4
+ vmovdqa XMMWORD PTR 16[ebx],xmm5
+ vmovdqa XMMWORD PTR 64[ebx],xmm6
+ vmovdqa XMMWORD PTR 96[ebx],xmm7
+ vmovdqa xmm1,XMMWORD PTR [ebx-112]
+ vmovdqa xmm2,XMMWORD PTR [ebx-96]
+ vmovdqa xmm3,XMMWORD PTR [ebx-80]
+ vpaddd xmm0,xmm0,XMMWORD PTR [ebp-128]
+ vpaddd xmm1,xmm1,XMMWORD PTR [ebp-112]
+ vpaddd xmm2,xmm2,XMMWORD PTR [ebp-96]
+ vpaddd xmm3,xmm3,XMMWORD PTR [ebp-80]
+ vpunpckldq xmm6,xmm0,xmm1
+ vpunpckldq xmm7,xmm2,xmm3
+ vpunpckhdq xmm0,xmm0,xmm1
+ vpunpckhdq xmm2,xmm2,xmm3
+ vpunpcklqdq xmm1,xmm6,xmm7
+ vpunpckhqdq xmm6,xmm6,xmm7
+ vpunpcklqdq xmm7,xmm0,xmm2
+ vpunpckhqdq xmm3,xmm0,xmm2
+ vpxor xmm4,xmm1,XMMWORD PTR [esi-128]
+ vpxor xmm5,xmm6,XMMWORD PTR [esi-64]
+ vpxor xmm6,xmm7,XMMWORD PTR [esi]
+ vpxor xmm7,xmm3,XMMWORD PTR 64[esi]
+ lea esi,QWORD PTR 16[esi]
+ vmovdqa xmm0,XMMWORD PTR [ebx-64]
+ vmovdqa xmm1,XMMWORD PTR [ebx-48]
+ vmovdqa xmm2,XMMWORD PTR [ebx-32]
+ vmovdqa xmm3,XMMWORD PTR [ebx-16]
+ vmovdqu XMMWORD PTR [edi-128],xmm4
+ vmovdqu XMMWORD PTR [edi-64],xmm5
+ vmovdqu XMMWORD PTR [edi],xmm6
+ vmovdqu XMMWORD PTR 64[edi],xmm7
+ lea edi,QWORD PTR 16[edi]
+ vpaddd xmm0,xmm0,XMMWORD PTR [ebp-64]
+ vpaddd xmm1,xmm1,XMMWORD PTR [ebp-48]
+ vpaddd xmm2,xmm2,XMMWORD PTR [ebp-32]
+ vpaddd xmm3,xmm3,XMMWORD PTR [ebp-16]
+ vpunpckldq xmm6,xmm0,xmm1
+ vpunpckldq xmm7,xmm2,xmm3
+ vpunpckhdq xmm0,xmm0,xmm1
+ vpunpckhdq xmm2,xmm2,xmm3
+ vpunpcklqdq xmm1,xmm6,xmm7
+ vpunpckhqdq xmm6,xmm6,xmm7
+ vpunpcklqdq xmm7,xmm0,xmm2
+ vpunpckhqdq xmm3,xmm0,xmm2
+ vpxor xmm4,xmm1,XMMWORD PTR [esi-128]
+ vpxor xmm5,xmm6,XMMWORD PTR [esi-64]
+ vpxor xmm6,xmm7,XMMWORD PTR [esi]
+ vpxor xmm7,xmm3,XMMWORD PTR 64[esi]
+ lea esi,QWORD PTR 16[esi]
+ vmovdqa xmm0,XMMWORD PTR [ebx]
+ vmovdqa xmm1,XMMWORD PTR 16[ebx]
+ vmovdqa xmm2,XMMWORD PTR 32[ebx]
+ vmovdqa xmm3,XMMWORD PTR 48[ebx]
+ vmovdqu XMMWORD PTR [edi-128],xmm4
+ vmovdqu XMMWORD PTR [edi-64],xmm5
+ vmovdqu XMMWORD PTR [edi],xmm6
+ vmovdqu XMMWORD PTR 64[edi],xmm7
+ lea edi,QWORD PTR 16[edi]
+ vpaddd xmm0,xmm0,XMMWORD PTR [ebp]
+ vpaddd xmm1,xmm1,XMMWORD PTR 16[ebp]
+ vpaddd xmm2,xmm2,XMMWORD PTR 32[ebp]
+ vpaddd xmm3,xmm3,XMMWORD PTR 48[ebp]
+ vpunpckldq xmm6,xmm0,xmm1
+ vpunpckldq xmm7,xmm2,xmm3
+ vpunpckhdq xmm0,xmm0,xmm1
+ vpunpckhdq xmm2,xmm2,xmm3
+ vpunpcklqdq xmm1,xmm6,xmm7
+ vpunpckhqdq xmm6,xmm6,xmm7
+ vpunpcklqdq xmm7,xmm0,xmm2
+ vpunpckhqdq xmm3,xmm0,xmm2
+ vpxor xmm4,xmm1,XMMWORD PTR [esi-128]
+ vpxor xmm5,xmm6,XMMWORD PTR [esi-64]
+ vpxor xmm6,xmm7,XMMWORD PTR [esi]
+ vpxor xmm7,xmm3,XMMWORD PTR 64[esi]
+ lea esi,QWORD PTR 16[esi]
+ vmovdqa xmm0,XMMWORD PTR 64[ebx]
+ vmovdqa xmm1,XMMWORD PTR 80[ebx]
+ vmovdqa xmm2,XMMWORD PTR 96[ebx]
+ vmovdqa xmm3,XMMWORD PTR 112[ebx]
+ vmovdqu XMMWORD PTR [edi-128],xmm4
+ vmovdqu XMMWORD PTR [edi-64],xmm5
+ vmovdqu XMMWORD PTR [edi],xmm6
+ vmovdqu XMMWORD PTR 64[edi],xmm7
+ lea edi,QWORD PTR 16[edi]
+ vpaddd xmm0,xmm0,XMMWORD PTR 64[ebp]
+ vpaddd xmm1,xmm1,XMMWORD PTR 80[ebp]
+ vpaddd xmm2,xmm2,XMMWORD PTR 96[ebp]
+ vpaddd xmm3,xmm3,XMMWORD PTR 112[ebp]
+ vpunpckldq xmm6,xmm0,xmm1
+ vpunpckldq xmm7,xmm2,xmm3
+ vpunpckhdq xmm0,xmm0,xmm1
+ vpunpckhdq xmm2,xmm2,xmm3
+ vpunpcklqdq xmm1,xmm6,xmm7
+ vpunpckhqdq xmm6,xmm6,xmm7
+ vpunpcklqdq xmm7,xmm0,xmm2
+ vpunpckhqdq xmm3,xmm0,xmm2
+ vpxor xmm4,xmm1,XMMWORD PTR [esi-128]
+ vpxor xmm5,xmm6,XMMWORD PTR [esi-64]
+ vpxor xmm6,xmm7,XMMWORD PTR [esi]
+ vpxor xmm7,xmm3,XMMWORD PTR 64[esi]
+ lea esi,QWORD PTR 208[esi]
+ vmovdqu XMMWORD PTR [edi-128],xmm4
+ vmovdqu XMMWORD PTR [edi-64],xmm5
+ vmovdqu XMMWORD PTR [edi],xmm6
+ vmovdqu XMMWORD PTR 64[edi],xmm7
+ lea edi,QWORD PTR 208[edi]
+ sub ecx,256
+ jnc $L015outer_loop
+ add ecx,256
+ jz $L017done
+ mov ebx,DWORD PTR 520[esp]
+ lea esi,DWORD PTR [esi-128]
+ mov edx,DWORD PTR 516[esp]
+ lea edi,DWORD PTR [edi-128]
+ vmovd xmm2,DWORD PTR 64[ebp]
+ vmovdqu xmm3,XMMWORD PTR [ebx]
+ vpaddd xmm2,xmm2,XMMWORD PTR 96[eax]
+ vpand xmm3,xmm3,XMMWORD PTR 112[eax]
+ vpor xmm3,xmm3,xmm2
+$L0141x:
+ vmovdqa xmm0,XMMWORD PTR 32[eax]
+ vmovdqu xmm1,XMMWORD PTR [edx]
+ vmovdqu xmm2,XMMWORD PTR 16[edx]
+ vmovdqa xmm6,XMMWORD PTR [eax]
+ vmovdqa xmm7,XMMWORD PTR 16[eax]
+ mov DWORD PTR 48[esp],ebp
+ vmovdqa XMMWORD PTR [esp],xmm0
+ vmovdqa XMMWORD PTR 16[esp],xmm1
+ vmovdqa XMMWORD PTR 32[esp],xmm2
+ vmovdqa XMMWORD PTR 48[esp],xmm3
+ mov edx,10
+ jmp $L018loop1x
+ALIGN 16
+$L019outer1x:
+ vmovdqa xmm3,XMMWORD PTR 80[eax]
+ vmovdqa xmm0,XMMWORD PTR [esp]
+ vmovdqa xmm1,XMMWORD PTR 16[esp]
+ vmovdqa xmm2,XMMWORD PTR 32[esp]
+ vpaddd xmm3,xmm3,XMMWORD PTR 48[esp]
+ mov edx,10
+ vmovdqa XMMWORD PTR 48[esp],xmm3
+ jmp $L018loop1x
+ALIGN 16
+$L018loop1x:
+ vpaddd xmm0,xmm0,xmm1
+ vpxor xmm3,xmm3,xmm0
+DB 143,232,120,194,219,16
+ vpaddd xmm2,xmm2,xmm3
+ vpxor xmm1,xmm1,xmm2
+DB 143,232,120,194,201,12
+ vpaddd xmm0,xmm0,xmm1
+ vpxor xmm3,xmm3,xmm0
+DB 143,232,120,194,219,8
+ vpaddd xmm2,xmm2,xmm3
+ vpxor xmm1,xmm1,xmm2
+DB 143,232,120,194,201,7
+ vpshufd xmm2,xmm2,78
+ vpshufd xmm1,xmm1,57
+ vpshufd xmm3,xmm3,147
+ vpaddd xmm0,xmm0,xmm1
+ vpxor xmm3,xmm3,xmm0
+DB 143,232,120,194,219,16
+ vpaddd xmm2,xmm2,xmm3
+ vpxor xmm1,xmm1,xmm2
+DB 143,232,120,194,201,12
+ vpaddd xmm0,xmm0,xmm1
+ vpxor xmm3,xmm3,xmm0
+DB 143,232,120,194,219,8
+ vpaddd xmm2,xmm2,xmm3
+ vpxor xmm1,xmm1,xmm2
+DB 143,232,120,194,201,7
+ vpshufd xmm2,xmm2,78
+ vpshufd xmm1,xmm1,147
+ vpshufd xmm3,xmm3,57
+ dec edx
+ jnz $L018loop1x
+ vpaddd xmm0,xmm0,XMMWORD PTR [esp]
+ vpaddd xmm1,xmm1,XMMWORD PTR 16[esp]
+ vpaddd xmm2,xmm2,XMMWORD PTR 32[esp]
+ vpaddd xmm3,xmm3,XMMWORD PTR 48[esp]
+ cmp ecx,64
+ jb $L020tail
+ vpxor xmm0,xmm0,XMMWORD PTR [esi]
+ vpxor xmm1,xmm1,XMMWORD PTR 16[esi]
+ vpxor xmm2,xmm2,XMMWORD PTR 32[esi]
+ vpxor xmm3,xmm3,XMMWORD PTR 48[esi]
+ lea esi,DWORD PTR 64[esi]
+ vmovdqu XMMWORD PTR [edi],xmm0
+ vmovdqu XMMWORD PTR 16[edi],xmm1
+ vmovdqu XMMWORD PTR 32[edi],xmm2
+ vmovdqu XMMWORD PTR 48[edi],xmm3
+ lea edi,DWORD PTR 64[edi]
+ sub ecx,64
+ jnz $L019outer1x
+ jmp $L017done
+$L020tail:
+ vmovdqa XMMWORD PTR [esp],xmm0
+ vmovdqa XMMWORD PTR 16[esp],xmm1
+ vmovdqa XMMWORD PTR 32[esp],xmm2
+ vmovdqa XMMWORD PTR 48[esp],xmm3
+ xor eax,eax
+ xor edx,edx
+ xor ebp,ebp
+$L021tail_loop:
+ mov al,BYTE PTR [ebp*1+esp]
+ mov dl,BYTE PTR [ebp*1+esi]
+ lea ebp,DWORD PTR 1[ebp]
+ xor al,dl
+ mov BYTE PTR [ebp*1+edi-1],al
+ dec ecx
+ jnz $L021tail_loop
+$L017done:
+ vzeroupper
+ mov esp,DWORD PTR 512[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_ChaCha20_xop ENDP
+.text$ ENDS
+.bss SEGMENT 'BSS'
+COMM _OPENSSL_ia32cap_P:DWORD:4
+.bss ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86_64.masm
index 776d8564a3..0b6a74a254 100644
--- a/contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/chacha/chacha-x86_64.masm
@@ -1,2547 +1,2547 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-ALIGN 64
-$L$zero::
- DD 0,0,0,0
-$L$one::
- DD 1,0,0,0
-$L$inc::
- DD 0,1,2,3
-$L$four::
- DD 4,4,4,4
-$L$incy::
- DD 0,2,4,6,1,3,5,7
-$L$eight::
- DD 8,8,8,8,8,8,8,8
-$L$rot16::
-DB 02h,03h,00h,01h,06h,07h,04h,05h,0ah,0bh,08h,09h,0eh,0fh,0ch,0dh
-$L$rot24::
-DB 03h,00h,01h,02h,07h,04h,05h,06h,0bh,08h,09h,0ah,0fh,0ch,0dh,0eh
-$L$twoy::
- DD 2,0,0,0,2,0,0,0
-ALIGN 64
-$L$zeroz::
- DD 0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0
-$L$fourz::
- DD 4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0
-$L$incz::
- DD 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-$L$sixteen::
- DD 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
-$L$sigma::
-DB 101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107
-DB 0
-DB 67,104,97,67,104,97,50,48,32,102,111,114,32,120,56,54
-DB 95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32
-DB 98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115
-DB 108,46,111,114,103,62,0
-PUBLIC ChaCha20_ctr32
-
-ALIGN 64
-ChaCha20_ctr32 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ChaCha20_ctr32::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
- cmp rdx,0
- je $L$no_data
- mov r10,QWORD PTR[((OPENSSL_ia32cap_P+4))]
- test r10d,512
- jnz $L$ChaCha20_ssse3
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,64+24
-
-$L$ctr32_body::
-
-
- movdqu xmm1,XMMWORD PTR[rcx]
- movdqu xmm2,XMMWORD PTR[16+rcx]
- movdqu xmm3,XMMWORD PTR[r8]
- movdqa xmm4,XMMWORD PTR[$L$one]
-
-
- movdqa XMMWORD PTR[16+rsp],xmm1
- movdqa XMMWORD PTR[32+rsp],xmm2
- movdqa XMMWORD PTR[48+rsp],xmm3
- mov rbp,rdx
- jmp $L$oop_outer
-
-ALIGN 32
-$L$oop_outer::
- mov eax,061707865h
- mov ebx,03320646eh
- mov ecx,079622d32h
- mov edx,06b206574h
- mov r8d,DWORD PTR[16+rsp]
- mov r9d,DWORD PTR[20+rsp]
- mov r10d,DWORD PTR[24+rsp]
- mov r11d,DWORD PTR[28+rsp]
- movd r12d,xmm3
- mov r13d,DWORD PTR[52+rsp]
- mov r14d,DWORD PTR[56+rsp]
- mov r15d,DWORD PTR[60+rsp]
-
- mov QWORD PTR[((64+0))+rsp],rbp
- mov ebp,10
- mov QWORD PTR[((64+8))+rsp],rsi
-DB 102,72,15,126,214
- mov QWORD PTR[((64+16))+rsp],rdi
- mov rdi,rsi
- shr rdi,32
- jmp $L$oop
-
-ALIGN 32
-$L$oop::
- add eax,r8d
- xor r12d,eax
- rol r12d,16
- add ebx,r9d
- xor r13d,ebx
- rol r13d,16
- add esi,r12d
- xor r8d,esi
- rol r8d,12
- add edi,r13d
- xor r9d,edi
- rol r9d,12
- add eax,r8d
- xor r12d,eax
- rol r12d,8
- add ebx,r9d
- xor r13d,ebx
- rol r13d,8
- add esi,r12d
- xor r8d,esi
- rol r8d,7
- add edi,r13d
- xor r9d,edi
- rol r9d,7
- mov DWORD PTR[32+rsp],esi
- mov DWORD PTR[36+rsp],edi
- mov esi,DWORD PTR[40+rsp]
- mov edi,DWORD PTR[44+rsp]
- add ecx,r10d
- xor r14d,ecx
- rol r14d,16
- add edx,r11d
- xor r15d,edx
- rol r15d,16
- add esi,r14d
- xor r10d,esi
- rol r10d,12
- add edi,r15d
- xor r11d,edi
- rol r11d,12
- add ecx,r10d
- xor r14d,ecx
- rol r14d,8
- add edx,r11d
- xor r15d,edx
- rol r15d,8
- add esi,r14d
- xor r10d,esi
- rol r10d,7
- add edi,r15d
- xor r11d,edi
- rol r11d,7
- add eax,r9d
- xor r15d,eax
- rol r15d,16
- add ebx,r10d
- xor r12d,ebx
- rol r12d,16
- add esi,r15d
- xor r9d,esi
- rol r9d,12
- add edi,r12d
- xor r10d,edi
- rol r10d,12
- add eax,r9d
- xor r15d,eax
- rol r15d,8
- add ebx,r10d
- xor r12d,ebx
- rol r12d,8
- add esi,r15d
- xor r9d,esi
- rol r9d,7
- add edi,r12d
- xor r10d,edi
- rol r10d,7
- mov DWORD PTR[40+rsp],esi
- mov DWORD PTR[44+rsp],edi
- mov esi,DWORD PTR[32+rsp]
- mov edi,DWORD PTR[36+rsp]
- add ecx,r11d
- xor r13d,ecx
- rol r13d,16
- add edx,r8d
- xor r14d,edx
- rol r14d,16
- add esi,r13d
- xor r11d,esi
- rol r11d,12
- add edi,r14d
- xor r8d,edi
- rol r8d,12
- add ecx,r11d
- xor r13d,ecx
- rol r13d,8
- add edx,r8d
- xor r14d,edx
- rol r14d,8
- add esi,r13d
- xor r11d,esi
- rol r11d,7
- add edi,r14d
- xor r8d,edi
- rol r8d,7
- dec ebp
- jnz $L$oop
- mov DWORD PTR[36+rsp],edi
- mov DWORD PTR[32+rsp],esi
- mov rbp,QWORD PTR[64+rsp]
- movdqa xmm1,xmm2
- mov rsi,QWORD PTR[((64+8))+rsp]
- paddd xmm3,xmm4
- mov rdi,QWORD PTR[((64+16))+rsp]
-
- add eax,061707865h
- add ebx,03320646eh
- add ecx,079622d32h
- add edx,06b206574h
- add r8d,DWORD PTR[16+rsp]
- add r9d,DWORD PTR[20+rsp]
- add r10d,DWORD PTR[24+rsp]
- add r11d,DWORD PTR[28+rsp]
- add r12d,DWORD PTR[48+rsp]
- add r13d,DWORD PTR[52+rsp]
- add r14d,DWORD PTR[56+rsp]
- add r15d,DWORD PTR[60+rsp]
- paddd xmm1,XMMWORD PTR[32+rsp]
-
- cmp rbp,64
- jb $L$tail
-
- xor eax,DWORD PTR[rsi]
- xor ebx,DWORD PTR[4+rsi]
- xor ecx,DWORD PTR[8+rsi]
- xor edx,DWORD PTR[12+rsi]
- xor r8d,DWORD PTR[16+rsi]
- xor r9d,DWORD PTR[20+rsi]
- xor r10d,DWORD PTR[24+rsi]
- xor r11d,DWORD PTR[28+rsi]
- movdqu xmm0,XMMWORD PTR[32+rsi]
- xor r12d,DWORD PTR[48+rsi]
- xor r13d,DWORD PTR[52+rsi]
- xor r14d,DWORD PTR[56+rsi]
- xor r15d,DWORD PTR[60+rsi]
- lea rsi,QWORD PTR[64+rsi]
- pxor xmm0,xmm1
-
- movdqa XMMWORD PTR[32+rsp],xmm2
- movd DWORD PTR[48+rsp],xmm3
-
- mov DWORD PTR[rdi],eax
- mov DWORD PTR[4+rdi],ebx
- mov DWORD PTR[8+rdi],ecx
- mov DWORD PTR[12+rdi],edx
- mov DWORD PTR[16+rdi],r8d
- mov DWORD PTR[20+rdi],r9d
- mov DWORD PTR[24+rdi],r10d
- mov DWORD PTR[28+rdi],r11d
- movdqu XMMWORD PTR[32+rdi],xmm0
- mov DWORD PTR[48+rdi],r12d
- mov DWORD PTR[52+rdi],r13d
- mov DWORD PTR[56+rdi],r14d
- mov DWORD PTR[60+rdi],r15d
- lea rdi,QWORD PTR[64+rdi]
-
- sub rbp,64
- jnz $L$oop_outer
-
- jmp $L$done
-
-ALIGN 16
-$L$tail::
- mov DWORD PTR[rsp],eax
- mov DWORD PTR[4+rsp],ebx
- xor rbx,rbx
- mov DWORD PTR[8+rsp],ecx
- mov DWORD PTR[12+rsp],edx
- mov DWORD PTR[16+rsp],r8d
- mov DWORD PTR[20+rsp],r9d
- mov DWORD PTR[24+rsp],r10d
- mov DWORD PTR[28+rsp],r11d
- movdqa XMMWORD PTR[32+rsp],xmm1
- mov DWORD PTR[48+rsp],r12d
- mov DWORD PTR[52+rsp],r13d
- mov DWORD PTR[56+rsp],r14d
- mov DWORD PTR[60+rsp],r15d
-
-$L$oop_tail::
- movzx eax,BYTE PTR[rbx*1+rsi]
- movzx edx,BYTE PTR[rbx*1+rsp]
- lea rbx,QWORD PTR[1+rbx]
- xor eax,edx
- mov BYTE PTR[((-1))+rbx*1+rdi],al
- dec rbp
- jnz $L$oop_tail
-
-$L$done::
- lea rsi,QWORD PTR[((64+24+48))+rsp]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$no_data::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ChaCha20_ctr32::
-ChaCha20_ctr32 ENDP
-
-ALIGN 32
-ChaCha20_ssse3 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ChaCha20_ssse3::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
-$L$ChaCha20_ssse3::
- mov r9,rsp
-
- test r10d,2048
- jnz $L$ChaCha20_4xop
- cmp rdx,128
- je $L$ChaCha20_128
- ja $L$ChaCha20_4x
-
-$L$do_sse3_after_all::
- sub rsp,64+168
- movaps XMMWORD PTR[(-40)+r9],xmm6
- movaps XMMWORD PTR[(-24)+r9],xmm7
-$L$ssse3_body::
- movdqa xmm0,XMMWORD PTR[$L$sigma]
- movdqu xmm1,XMMWORD PTR[rcx]
- movdqu xmm2,XMMWORD PTR[16+rcx]
- movdqu xmm3,XMMWORD PTR[r8]
- movdqa xmm6,XMMWORD PTR[$L$rot16]
- movdqa xmm7,XMMWORD PTR[$L$rot24]
-
- movdqa XMMWORD PTR[rsp],xmm0
- movdqa XMMWORD PTR[16+rsp],xmm1
- movdqa XMMWORD PTR[32+rsp],xmm2
- movdqa XMMWORD PTR[48+rsp],xmm3
- mov r8,10
- jmp $L$oop_ssse3
-
-ALIGN 32
-$L$oop_outer_ssse3::
- movdqa xmm3,XMMWORD PTR[$L$one]
- movdqa xmm0,XMMWORD PTR[rsp]
- movdqa xmm1,XMMWORD PTR[16+rsp]
- movdqa xmm2,XMMWORD PTR[32+rsp]
- paddd xmm3,XMMWORD PTR[48+rsp]
- mov r8,10
- movdqa XMMWORD PTR[48+rsp],xmm3
- jmp $L$oop_ssse3
-
-ALIGN 32
-$L$oop_ssse3::
- paddd xmm0,xmm1
- pxor xmm3,xmm0
-DB 102,15,56,0,222
- paddd xmm2,xmm3
- pxor xmm1,xmm2
- movdqa xmm4,xmm1
- psrld xmm1,20
- pslld xmm4,12
- por xmm1,xmm4
- paddd xmm0,xmm1
- pxor xmm3,xmm0
-DB 102,15,56,0,223
- paddd xmm2,xmm3
- pxor xmm1,xmm2
- movdqa xmm4,xmm1
- psrld xmm1,25
- pslld xmm4,7
- por xmm1,xmm4
- pshufd xmm2,xmm2,78
- pshufd xmm1,xmm1,57
- pshufd xmm3,xmm3,147
- nop
- paddd xmm0,xmm1
- pxor xmm3,xmm0
-DB 102,15,56,0,222
- paddd xmm2,xmm3
- pxor xmm1,xmm2
- movdqa xmm4,xmm1
- psrld xmm1,20
- pslld xmm4,12
- por xmm1,xmm4
- paddd xmm0,xmm1
- pxor xmm3,xmm0
-DB 102,15,56,0,223
- paddd xmm2,xmm3
- pxor xmm1,xmm2
- movdqa xmm4,xmm1
- psrld xmm1,25
- pslld xmm4,7
- por xmm1,xmm4
- pshufd xmm2,xmm2,78
- pshufd xmm1,xmm1,147
- pshufd xmm3,xmm3,57
- dec r8
- jnz $L$oop_ssse3
- paddd xmm0,XMMWORD PTR[rsp]
- paddd xmm1,XMMWORD PTR[16+rsp]
- paddd xmm2,XMMWORD PTR[32+rsp]
- paddd xmm3,XMMWORD PTR[48+rsp]
-
- cmp rdx,64
- jb $L$tail_ssse3
-
- movdqu xmm4,XMMWORD PTR[rsi]
- movdqu xmm5,XMMWORD PTR[16+rsi]
- pxor xmm0,xmm4
- movdqu xmm4,XMMWORD PTR[32+rsi]
- pxor xmm1,xmm5
- movdqu xmm5,XMMWORD PTR[48+rsi]
- lea rsi,QWORD PTR[64+rsi]
- pxor xmm2,xmm4
- pxor xmm3,xmm5
-
- movdqu XMMWORD PTR[rdi],xmm0
- movdqu XMMWORD PTR[16+rdi],xmm1
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu XMMWORD PTR[48+rdi],xmm3
- lea rdi,QWORD PTR[64+rdi]
-
- sub rdx,64
- jnz $L$oop_outer_ssse3
-
- jmp $L$done_ssse3
-
-ALIGN 16
-$L$tail_ssse3::
- movdqa XMMWORD PTR[rsp],xmm0
- movdqa XMMWORD PTR[16+rsp],xmm1
- movdqa XMMWORD PTR[32+rsp],xmm2
- movdqa XMMWORD PTR[48+rsp],xmm3
- xor r8,r8
-
-$L$oop_tail_ssse3::
- movzx eax,BYTE PTR[r8*1+rsi]
- movzx ecx,BYTE PTR[r8*1+rsp]
- lea r8,QWORD PTR[1+r8]
- xor eax,ecx
- mov BYTE PTR[((-1))+r8*1+rdi],al
- dec rdx
- jnz $L$oop_tail_ssse3
-
-$L$done_ssse3::
- movaps xmm6,XMMWORD PTR[((-40))+r9]
- movaps xmm7,XMMWORD PTR[((-24))+r9]
- lea rsp,QWORD PTR[r9]
-
-$L$ssse3_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ChaCha20_ssse3::
-ChaCha20_ssse3 ENDP
-
-ALIGN 32
-ChaCha20_128 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ChaCha20_128::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
-$L$ChaCha20_128::
- mov r9,rsp
-
- sub rsp,64+104
- movaps XMMWORD PTR[(-104)+r9],xmm6
- movaps XMMWORD PTR[(-88)+r9],xmm7
- movaps XMMWORD PTR[(-72)+r9],xmm8
- movaps XMMWORD PTR[(-56)+r9],xmm9
- movaps XMMWORD PTR[(-40)+r9],xmm10
- movaps XMMWORD PTR[(-24)+r9],xmm11
-$L$128_body::
- movdqa xmm8,XMMWORD PTR[$L$sigma]
- movdqu xmm9,XMMWORD PTR[rcx]
- movdqu xmm2,XMMWORD PTR[16+rcx]
- movdqu xmm3,XMMWORD PTR[r8]
- movdqa xmm1,XMMWORD PTR[$L$one]
- movdqa xmm6,XMMWORD PTR[$L$rot16]
- movdqa xmm7,XMMWORD PTR[$L$rot24]
-
- movdqa xmm10,xmm8
- movdqa XMMWORD PTR[rsp],xmm8
- movdqa xmm11,xmm9
- movdqa XMMWORD PTR[16+rsp],xmm9
- movdqa xmm0,xmm2
- movdqa XMMWORD PTR[32+rsp],xmm2
- paddd xmm1,xmm3
- movdqa XMMWORD PTR[48+rsp],xmm3
- mov r8,10
- jmp $L$oop_128
-
-ALIGN 32
-$L$oop_128::
- paddd xmm8,xmm9
- pxor xmm3,xmm8
- paddd xmm10,xmm11
- pxor xmm1,xmm10
-DB 102,15,56,0,222
-DB 102,15,56,0,206
- paddd xmm2,xmm3
- paddd xmm0,xmm1
- pxor xmm9,xmm2
- pxor xmm11,xmm0
- movdqa xmm4,xmm9
- psrld xmm9,20
- movdqa xmm5,xmm11
- pslld xmm4,12
- psrld xmm11,20
- por xmm9,xmm4
- pslld xmm5,12
- por xmm11,xmm5
- paddd xmm8,xmm9
- pxor xmm3,xmm8
- paddd xmm10,xmm11
- pxor xmm1,xmm10
-DB 102,15,56,0,223
-DB 102,15,56,0,207
- paddd xmm2,xmm3
- paddd xmm0,xmm1
- pxor xmm9,xmm2
- pxor xmm11,xmm0
- movdqa xmm4,xmm9
- psrld xmm9,25
- movdqa xmm5,xmm11
- pslld xmm4,7
- psrld xmm11,25
- por xmm9,xmm4
- pslld xmm5,7
- por xmm11,xmm5
- pshufd xmm2,xmm2,78
- pshufd xmm9,xmm9,57
- pshufd xmm3,xmm3,147
- pshufd xmm0,xmm0,78
- pshufd xmm11,xmm11,57
- pshufd xmm1,xmm1,147
- paddd xmm8,xmm9
- pxor xmm3,xmm8
- paddd xmm10,xmm11
- pxor xmm1,xmm10
-DB 102,15,56,0,222
-DB 102,15,56,0,206
- paddd xmm2,xmm3
- paddd xmm0,xmm1
- pxor xmm9,xmm2
- pxor xmm11,xmm0
- movdqa xmm4,xmm9
- psrld xmm9,20
- movdqa xmm5,xmm11
- pslld xmm4,12
- psrld xmm11,20
- por xmm9,xmm4
- pslld xmm5,12
- por xmm11,xmm5
- paddd xmm8,xmm9
- pxor xmm3,xmm8
- paddd xmm10,xmm11
- pxor xmm1,xmm10
-DB 102,15,56,0,223
-DB 102,15,56,0,207
- paddd xmm2,xmm3
- paddd xmm0,xmm1
- pxor xmm9,xmm2
- pxor xmm11,xmm0
- movdqa xmm4,xmm9
- psrld xmm9,25
- movdqa xmm5,xmm11
- pslld xmm4,7
- psrld xmm11,25
- por xmm9,xmm4
- pslld xmm5,7
- por xmm11,xmm5
- pshufd xmm2,xmm2,78
- pshufd xmm9,xmm9,147
- pshufd xmm3,xmm3,57
- pshufd xmm0,xmm0,78
- pshufd xmm11,xmm11,147
- pshufd xmm1,xmm1,57
- dec r8
- jnz $L$oop_128
- paddd xmm8,XMMWORD PTR[rsp]
- paddd xmm9,XMMWORD PTR[16+rsp]
- paddd xmm2,XMMWORD PTR[32+rsp]
- paddd xmm3,XMMWORD PTR[48+rsp]
- paddd xmm1,XMMWORD PTR[$L$one]
- paddd xmm10,XMMWORD PTR[rsp]
- paddd xmm11,XMMWORD PTR[16+rsp]
- paddd xmm0,XMMWORD PTR[32+rsp]
- paddd xmm1,XMMWORD PTR[48+rsp]
-
- movdqu xmm4,XMMWORD PTR[rsi]
- movdqu xmm5,XMMWORD PTR[16+rsi]
- pxor xmm8,xmm4
- movdqu xmm4,XMMWORD PTR[32+rsi]
- pxor xmm9,xmm5
- movdqu xmm5,XMMWORD PTR[48+rsi]
- pxor xmm2,xmm4
- movdqu xmm4,XMMWORD PTR[64+rsi]
- pxor xmm3,xmm5
- movdqu xmm5,XMMWORD PTR[80+rsi]
- pxor xmm10,xmm4
- movdqu xmm4,XMMWORD PTR[96+rsi]
- pxor xmm11,xmm5
- movdqu xmm5,XMMWORD PTR[112+rsi]
- pxor xmm0,xmm4
- pxor xmm1,xmm5
-
- movdqu XMMWORD PTR[rdi],xmm8
- movdqu XMMWORD PTR[16+rdi],xmm9
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu XMMWORD PTR[48+rdi],xmm3
- movdqu XMMWORD PTR[64+rdi],xmm10
- movdqu XMMWORD PTR[80+rdi],xmm11
- movdqu XMMWORD PTR[96+rdi],xmm0
- movdqu XMMWORD PTR[112+rdi],xmm1
- movaps xmm6,XMMWORD PTR[((-104))+r9]
- movaps xmm7,XMMWORD PTR[((-88))+r9]
- movaps xmm8,XMMWORD PTR[((-72))+r9]
- movaps xmm9,XMMWORD PTR[((-56))+r9]
- movaps xmm10,XMMWORD PTR[((-40))+r9]
- movaps xmm11,XMMWORD PTR[((-24))+r9]
- lea rsp,QWORD PTR[r9]
-
-$L$128_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ChaCha20_128::
-ChaCha20_128 ENDP
-
-ALIGN 32
-ChaCha20_4x PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ChaCha20_4x::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
-$L$ChaCha20_4x::
- mov r9,rsp
-
- mov r11,r10
- shr r10,32
- test r10,32
- jnz $L$ChaCha20_8x
- cmp rdx,192
- ja $L$proceed4x
-
- and r11,71303168
- cmp r11,4194304
- je $L$do_sse3_after_all
-
-$L$proceed4x::
- sub rsp,0140h+168
- movaps XMMWORD PTR[(-168)+r9],xmm6
- movaps XMMWORD PTR[(-152)+r9],xmm7
- movaps XMMWORD PTR[(-136)+r9],xmm8
- movaps XMMWORD PTR[(-120)+r9],xmm9
- movaps XMMWORD PTR[(-104)+r9],xmm10
- movaps XMMWORD PTR[(-88)+r9],xmm11
- movaps XMMWORD PTR[(-72)+r9],xmm12
- movaps XMMWORD PTR[(-56)+r9],xmm13
- movaps XMMWORD PTR[(-40)+r9],xmm14
- movaps XMMWORD PTR[(-24)+r9],xmm15
-$L$4x_body::
- movdqa xmm11,XMMWORD PTR[$L$sigma]
- movdqu xmm15,XMMWORD PTR[rcx]
- movdqu xmm7,XMMWORD PTR[16+rcx]
- movdqu xmm3,XMMWORD PTR[r8]
- lea rcx,QWORD PTR[256+rsp]
- lea r10,QWORD PTR[$L$rot16]
- lea r11,QWORD PTR[$L$rot24]
-
- pshufd xmm8,xmm11,000h
- pshufd xmm9,xmm11,055h
- movdqa XMMWORD PTR[64+rsp],xmm8
- pshufd xmm10,xmm11,0aah
- movdqa XMMWORD PTR[80+rsp],xmm9
- pshufd xmm11,xmm11,0ffh
- movdqa XMMWORD PTR[96+rsp],xmm10
- movdqa XMMWORD PTR[112+rsp],xmm11
-
- pshufd xmm12,xmm15,000h
- pshufd xmm13,xmm15,055h
- movdqa XMMWORD PTR[(128-256)+rcx],xmm12
- pshufd xmm14,xmm15,0aah
- movdqa XMMWORD PTR[(144-256)+rcx],xmm13
- pshufd xmm15,xmm15,0ffh
- movdqa XMMWORD PTR[(160-256)+rcx],xmm14
- movdqa XMMWORD PTR[(176-256)+rcx],xmm15
-
- pshufd xmm4,xmm7,000h
- pshufd xmm5,xmm7,055h
- movdqa XMMWORD PTR[(192-256)+rcx],xmm4
- pshufd xmm6,xmm7,0aah
- movdqa XMMWORD PTR[(208-256)+rcx],xmm5
- pshufd xmm7,xmm7,0ffh
- movdqa XMMWORD PTR[(224-256)+rcx],xmm6
- movdqa XMMWORD PTR[(240-256)+rcx],xmm7
-
- pshufd xmm0,xmm3,000h
- pshufd xmm1,xmm3,055h
- paddd xmm0,XMMWORD PTR[$L$inc]
- pshufd xmm2,xmm3,0aah
- movdqa XMMWORD PTR[(272-256)+rcx],xmm1
- pshufd xmm3,xmm3,0ffh
- movdqa XMMWORD PTR[(288-256)+rcx],xmm2
- movdqa XMMWORD PTR[(304-256)+rcx],xmm3
-
- jmp $L$oop_enter4x
-
-ALIGN 32
-$L$oop_outer4x::
- movdqa xmm8,XMMWORD PTR[64+rsp]
- movdqa xmm9,XMMWORD PTR[80+rsp]
- movdqa xmm10,XMMWORD PTR[96+rsp]
- movdqa xmm11,XMMWORD PTR[112+rsp]
- movdqa xmm12,XMMWORD PTR[((128-256))+rcx]
- movdqa xmm13,XMMWORD PTR[((144-256))+rcx]
- movdqa xmm14,XMMWORD PTR[((160-256))+rcx]
- movdqa xmm15,XMMWORD PTR[((176-256))+rcx]
- movdqa xmm4,XMMWORD PTR[((192-256))+rcx]
- movdqa xmm5,XMMWORD PTR[((208-256))+rcx]
- movdqa xmm6,XMMWORD PTR[((224-256))+rcx]
- movdqa xmm7,XMMWORD PTR[((240-256))+rcx]
- movdqa xmm0,XMMWORD PTR[((256-256))+rcx]
- movdqa xmm1,XMMWORD PTR[((272-256))+rcx]
- movdqa xmm2,XMMWORD PTR[((288-256))+rcx]
- movdqa xmm3,XMMWORD PTR[((304-256))+rcx]
- paddd xmm0,XMMWORD PTR[$L$four]
-
-$L$oop_enter4x::
- movdqa XMMWORD PTR[32+rsp],xmm6
- movdqa XMMWORD PTR[48+rsp],xmm7
- movdqa xmm7,XMMWORD PTR[r10]
- mov eax,10
- movdqa XMMWORD PTR[(256-256)+rcx],xmm0
- jmp $L$oop4x
-
-ALIGN 32
-$L$oop4x::
- paddd xmm8,xmm12
- paddd xmm9,xmm13
- pxor xmm0,xmm8
- pxor xmm1,xmm9
-DB 102,15,56,0,199
-DB 102,15,56,0,207
- paddd xmm4,xmm0
- paddd xmm5,xmm1
- pxor xmm12,xmm4
- pxor xmm13,xmm5
- movdqa xmm6,xmm12
- pslld xmm12,12
- psrld xmm6,20
- movdqa xmm7,xmm13
- pslld xmm13,12
- por xmm12,xmm6
- psrld xmm7,20
- movdqa xmm6,XMMWORD PTR[r11]
- por xmm13,xmm7
- paddd xmm8,xmm12
- paddd xmm9,xmm13
- pxor xmm0,xmm8
- pxor xmm1,xmm9
-DB 102,15,56,0,198
-DB 102,15,56,0,206
- paddd xmm4,xmm0
- paddd xmm5,xmm1
- pxor xmm12,xmm4
- pxor xmm13,xmm5
- movdqa xmm7,xmm12
- pslld xmm12,7
- psrld xmm7,25
- movdqa xmm6,xmm13
- pslld xmm13,7
- por xmm12,xmm7
- psrld xmm6,25
- movdqa xmm7,XMMWORD PTR[r10]
- por xmm13,xmm6
- movdqa XMMWORD PTR[rsp],xmm4
- movdqa XMMWORD PTR[16+rsp],xmm5
- movdqa xmm4,XMMWORD PTR[32+rsp]
- movdqa xmm5,XMMWORD PTR[48+rsp]
- paddd xmm10,xmm14
- paddd xmm11,xmm15
- pxor xmm2,xmm10
- pxor xmm3,xmm11
-DB 102,15,56,0,215
-DB 102,15,56,0,223
- paddd xmm4,xmm2
- paddd xmm5,xmm3
- pxor xmm14,xmm4
- pxor xmm15,xmm5
- movdqa xmm6,xmm14
- pslld xmm14,12
- psrld xmm6,20
- movdqa xmm7,xmm15
- pslld xmm15,12
- por xmm14,xmm6
- psrld xmm7,20
- movdqa xmm6,XMMWORD PTR[r11]
- por xmm15,xmm7
- paddd xmm10,xmm14
- paddd xmm11,xmm15
- pxor xmm2,xmm10
- pxor xmm3,xmm11
-DB 102,15,56,0,214
-DB 102,15,56,0,222
- paddd xmm4,xmm2
- paddd xmm5,xmm3
- pxor xmm14,xmm4
- pxor xmm15,xmm5
- movdqa xmm7,xmm14
- pslld xmm14,7
- psrld xmm7,25
- movdqa xmm6,xmm15
- pslld xmm15,7
- por xmm14,xmm7
- psrld xmm6,25
- movdqa xmm7,XMMWORD PTR[r10]
- por xmm15,xmm6
- paddd xmm8,xmm13
- paddd xmm9,xmm14
- pxor xmm3,xmm8
- pxor xmm0,xmm9
-DB 102,15,56,0,223
-DB 102,15,56,0,199
- paddd xmm4,xmm3
- paddd xmm5,xmm0
- pxor xmm13,xmm4
- pxor xmm14,xmm5
- movdqa xmm6,xmm13
- pslld xmm13,12
- psrld xmm6,20
- movdqa xmm7,xmm14
- pslld xmm14,12
- por xmm13,xmm6
- psrld xmm7,20
- movdqa xmm6,XMMWORD PTR[r11]
- por xmm14,xmm7
- paddd xmm8,xmm13
- paddd xmm9,xmm14
- pxor xmm3,xmm8
- pxor xmm0,xmm9
-DB 102,15,56,0,222
-DB 102,15,56,0,198
- paddd xmm4,xmm3
- paddd xmm5,xmm0
- pxor xmm13,xmm4
- pxor xmm14,xmm5
- movdqa xmm7,xmm13
- pslld xmm13,7
- psrld xmm7,25
- movdqa xmm6,xmm14
- pslld xmm14,7
- por xmm13,xmm7
- psrld xmm6,25
- movdqa xmm7,XMMWORD PTR[r10]
- por xmm14,xmm6
- movdqa XMMWORD PTR[32+rsp],xmm4
- movdqa XMMWORD PTR[48+rsp],xmm5
- movdqa xmm4,XMMWORD PTR[rsp]
- movdqa xmm5,XMMWORD PTR[16+rsp]
- paddd xmm10,xmm15
- paddd xmm11,xmm12
- pxor xmm1,xmm10
- pxor xmm2,xmm11
-DB 102,15,56,0,207
-DB 102,15,56,0,215
- paddd xmm4,xmm1
- paddd xmm5,xmm2
- pxor xmm15,xmm4
- pxor xmm12,xmm5
- movdqa xmm6,xmm15
- pslld xmm15,12
- psrld xmm6,20
- movdqa xmm7,xmm12
- pslld xmm12,12
- por xmm15,xmm6
- psrld xmm7,20
- movdqa xmm6,XMMWORD PTR[r11]
- por xmm12,xmm7
- paddd xmm10,xmm15
- paddd xmm11,xmm12
- pxor xmm1,xmm10
- pxor xmm2,xmm11
-DB 102,15,56,0,206
-DB 102,15,56,0,214
- paddd xmm4,xmm1
- paddd xmm5,xmm2
- pxor xmm15,xmm4
- pxor xmm12,xmm5
- movdqa xmm7,xmm15
- pslld xmm15,7
- psrld xmm7,25
- movdqa xmm6,xmm12
- pslld xmm12,7
- por xmm15,xmm7
- psrld xmm6,25
- movdqa xmm7,XMMWORD PTR[r10]
- por xmm12,xmm6
- dec eax
- jnz $L$oop4x
-
- paddd xmm8,XMMWORD PTR[64+rsp]
- paddd xmm9,XMMWORD PTR[80+rsp]
- paddd xmm10,XMMWORD PTR[96+rsp]
- paddd xmm11,XMMWORD PTR[112+rsp]
-
- movdqa xmm6,xmm8
- punpckldq xmm8,xmm9
- movdqa xmm7,xmm10
- punpckldq xmm10,xmm11
- punpckhdq xmm6,xmm9
- punpckhdq xmm7,xmm11
- movdqa xmm9,xmm8
- punpcklqdq xmm8,xmm10
- movdqa xmm11,xmm6
- punpcklqdq xmm6,xmm7
- punpckhqdq xmm9,xmm10
- punpckhqdq xmm11,xmm7
- paddd xmm12,XMMWORD PTR[((128-256))+rcx]
- paddd xmm13,XMMWORD PTR[((144-256))+rcx]
- paddd xmm14,XMMWORD PTR[((160-256))+rcx]
- paddd xmm15,XMMWORD PTR[((176-256))+rcx]
-
- movdqa XMMWORD PTR[rsp],xmm8
- movdqa XMMWORD PTR[16+rsp],xmm9
- movdqa xmm8,XMMWORD PTR[32+rsp]
- movdqa xmm9,XMMWORD PTR[48+rsp]
-
- movdqa xmm10,xmm12
- punpckldq xmm12,xmm13
- movdqa xmm7,xmm14
- punpckldq xmm14,xmm15
- punpckhdq xmm10,xmm13
- punpckhdq xmm7,xmm15
- movdqa xmm13,xmm12
- punpcklqdq xmm12,xmm14
- movdqa xmm15,xmm10
- punpcklqdq xmm10,xmm7
- punpckhqdq xmm13,xmm14
- punpckhqdq xmm15,xmm7
- paddd xmm4,XMMWORD PTR[((192-256))+rcx]
- paddd xmm5,XMMWORD PTR[((208-256))+rcx]
- paddd xmm8,XMMWORD PTR[((224-256))+rcx]
- paddd xmm9,XMMWORD PTR[((240-256))+rcx]
-
- movdqa XMMWORD PTR[32+rsp],xmm6
- movdqa XMMWORD PTR[48+rsp],xmm11
-
- movdqa xmm14,xmm4
- punpckldq xmm4,xmm5
- movdqa xmm7,xmm8
- punpckldq xmm8,xmm9
- punpckhdq xmm14,xmm5
- punpckhdq xmm7,xmm9
- movdqa xmm5,xmm4
- punpcklqdq xmm4,xmm8
- movdqa xmm9,xmm14
- punpcklqdq xmm14,xmm7
- punpckhqdq xmm5,xmm8
- punpckhqdq xmm9,xmm7
- paddd xmm0,XMMWORD PTR[((256-256))+rcx]
- paddd xmm1,XMMWORD PTR[((272-256))+rcx]
- paddd xmm2,XMMWORD PTR[((288-256))+rcx]
- paddd xmm3,XMMWORD PTR[((304-256))+rcx]
-
- movdqa xmm8,xmm0
- punpckldq xmm0,xmm1
- movdqa xmm7,xmm2
- punpckldq xmm2,xmm3
- punpckhdq xmm8,xmm1
- punpckhdq xmm7,xmm3
- movdqa xmm1,xmm0
- punpcklqdq xmm0,xmm2
- movdqa xmm3,xmm8
- punpcklqdq xmm8,xmm7
- punpckhqdq xmm1,xmm2
- punpckhqdq xmm3,xmm7
- cmp rdx,64*4
- jb $L$tail4x
-
- movdqu xmm6,XMMWORD PTR[rsi]
- movdqu xmm11,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
- movdqu xmm7,XMMWORD PTR[48+rsi]
- pxor xmm6,XMMWORD PTR[rsp]
- pxor xmm11,xmm12
- pxor xmm2,xmm4
- pxor xmm7,xmm0
-
- movdqu XMMWORD PTR[rdi],xmm6
- movdqu xmm6,XMMWORD PTR[64+rsi]
- movdqu XMMWORD PTR[16+rdi],xmm11
- movdqu xmm11,XMMWORD PTR[80+rsi]
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu xmm2,XMMWORD PTR[96+rsi]
- movdqu XMMWORD PTR[48+rdi],xmm7
- movdqu xmm7,XMMWORD PTR[112+rsi]
- lea rsi,QWORD PTR[128+rsi]
- pxor xmm6,XMMWORD PTR[16+rsp]
- pxor xmm11,xmm13
- pxor xmm2,xmm5
- pxor xmm7,xmm1
-
- movdqu XMMWORD PTR[64+rdi],xmm6
- movdqu xmm6,XMMWORD PTR[rsi]
- movdqu XMMWORD PTR[80+rdi],xmm11
- movdqu xmm11,XMMWORD PTR[16+rsi]
- movdqu XMMWORD PTR[96+rdi],xmm2
- movdqu xmm2,XMMWORD PTR[32+rsi]
- movdqu XMMWORD PTR[112+rdi],xmm7
- lea rdi,QWORD PTR[128+rdi]
- movdqu xmm7,XMMWORD PTR[48+rsi]
- pxor xmm6,XMMWORD PTR[32+rsp]
- pxor xmm11,xmm10
- pxor xmm2,xmm14
- pxor xmm7,xmm8
-
- movdqu XMMWORD PTR[rdi],xmm6
- movdqu xmm6,XMMWORD PTR[64+rsi]
- movdqu XMMWORD PTR[16+rdi],xmm11
- movdqu xmm11,XMMWORD PTR[80+rsi]
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu xmm2,XMMWORD PTR[96+rsi]
- movdqu XMMWORD PTR[48+rdi],xmm7
- movdqu xmm7,XMMWORD PTR[112+rsi]
- lea rsi,QWORD PTR[128+rsi]
- pxor xmm6,XMMWORD PTR[48+rsp]
- pxor xmm11,xmm15
- pxor xmm2,xmm9
- pxor xmm7,xmm3
- movdqu XMMWORD PTR[64+rdi],xmm6
- movdqu XMMWORD PTR[80+rdi],xmm11
- movdqu XMMWORD PTR[96+rdi],xmm2
- movdqu XMMWORD PTR[112+rdi],xmm7
- lea rdi,QWORD PTR[128+rdi]
-
- sub rdx,64*4
- jnz $L$oop_outer4x
-
- jmp $L$done4x
-
-$L$tail4x::
- cmp rdx,192
- jae $L$192_or_more4x
- cmp rdx,128
- jae $L$128_or_more4x
- cmp rdx,64
- jae $L$64_or_more4x
-
-
- xor r10,r10
-
- movdqa XMMWORD PTR[16+rsp],xmm12
- movdqa XMMWORD PTR[32+rsp],xmm4
- movdqa XMMWORD PTR[48+rsp],xmm0
- jmp $L$oop_tail4x
-
-ALIGN 32
-$L$64_or_more4x::
- movdqu xmm6,XMMWORD PTR[rsi]
- movdqu xmm11,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
- movdqu xmm7,XMMWORD PTR[48+rsi]
- pxor xmm6,XMMWORD PTR[rsp]
- pxor xmm11,xmm12
- pxor xmm2,xmm4
- pxor xmm7,xmm0
- movdqu XMMWORD PTR[rdi],xmm6
- movdqu XMMWORD PTR[16+rdi],xmm11
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu XMMWORD PTR[48+rdi],xmm7
- je $L$done4x
-
- movdqa xmm6,XMMWORD PTR[16+rsp]
- lea rsi,QWORD PTR[64+rsi]
- xor r10,r10
- movdqa XMMWORD PTR[rsp],xmm6
- movdqa XMMWORD PTR[16+rsp],xmm13
- lea rdi,QWORD PTR[64+rdi]
- movdqa XMMWORD PTR[32+rsp],xmm5
- sub rdx,64
- movdqa XMMWORD PTR[48+rsp],xmm1
- jmp $L$oop_tail4x
-
-ALIGN 32
-$L$128_or_more4x::
- movdqu xmm6,XMMWORD PTR[rsi]
- movdqu xmm11,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
- movdqu xmm7,XMMWORD PTR[48+rsi]
- pxor xmm6,XMMWORD PTR[rsp]
- pxor xmm11,xmm12
- pxor xmm2,xmm4
- pxor xmm7,xmm0
-
- movdqu XMMWORD PTR[rdi],xmm6
- movdqu xmm6,XMMWORD PTR[64+rsi]
- movdqu XMMWORD PTR[16+rdi],xmm11
- movdqu xmm11,XMMWORD PTR[80+rsi]
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu xmm2,XMMWORD PTR[96+rsi]
- movdqu XMMWORD PTR[48+rdi],xmm7
- movdqu xmm7,XMMWORD PTR[112+rsi]
- pxor xmm6,XMMWORD PTR[16+rsp]
- pxor xmm11,xmm13
- pxor xmm2,xmm5
- pxor xmm7,xmm1
- movdqu XMMWORD PTR[64+rdi],xmm6
- movdqu XMMWORD PTR[80+rdi],xmm11
- movdqu XMMWORD PTR[96+rdi],xmm2
- movdqu XMMWORD PTR[112+rdi],xmm7
- je $L$done4x
-
- movdqa xmm6,XMMWORD PTR[32+rsp]
- lea rsi,QWORD PTR[128+rsi]
- xor r10,r10
- movdqa XMMWORD PTR[rsp],xmm6
- movdqa XMMWORD PTR[16+rsp],xmm10
- lea rdi,QWORD PTR[128+rdi]
- movdqa XMMWORD PTR[32+rsp],xmm14
- sub rdx,128
- movdqa XMMWORD PTR[48+rsp],xmm8
- jmp $L$oop_tail4x
-
-ALIGN 32
-$L$192_or_more4x::
- movdqu xmm6,XMMWORD PTR[rsi]
- movdqu xmm11,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
- movdqu xmm7,XMMWORD PTR[48+rsi]
- pxor xmm6,XMMWORD PTR[rsp]
- pxor xmm11,xmm12
- pxor xmm2,xmm4
- pxor xmm7,xmm0
-
- movdqu XMMWORD PTR[rdi],xmm6
- movdqu xmm6,XMMWORD PTR[64+rsi]
- movdqu XMMWORD PTR[16+rdi],xmm11
- movdqu xmm11,XMMWORD PTR[80+rsi]
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu xmm2,XMMWORD PTR[96+rsi]
- movdqu XMMWORD PTR[48+rdi],xmm7
- movdqu xmm7,XMMWORD PTR[112+rsi]
- lea rsi,QWORD PTR[128+rsi]
- pxor xmm6,XMMWORD PTR[16+rsp]
- pxor xmm11,xmm13
- pxor xmm2,xmm5
- pxor xmm7,xmm1
-
- movdqu XMMWORD PTR[64+rdi],xmm6
- movdqu xmm6,XMMWORD PTR[rsi]
- movdqu XMMWORD PTR[80+rdi],xmm11
- movdqu xmm11,XMMWORD PTR[16+rsi]
- movdqu XMMWORD PTR[96+rdi],xmm2
- movdqu xmm2,XMMWORD PTR[32+rsi]
- movdqu XMMWORD PTR[112+rdi],xmm7
- lea rdi,QWORD PTR[128+rdi]
- movdqu xmm7,XMMWORD PTR[48+rsi]
- pxor xmm6,XMMWORD PTR[32+rsp]
- pxor xmm11,xmm10
- pxor xmm2,xmm14
- pxor xmm7,xmm8
- movdqu XMMWORD PTR[rdi],xmm6
- movdqu XMMWORD PTR[16+rdi],xmm11
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu XMMWORD PTR[48+rdi],xmm7
- je $L$done4x
-
- movdqa xmm6,XMMWORD PTR[48+rsp]
- lea rsi,QWORD PTR[64+rsi]
- xor r10,r10
- movdqa XMMWORD PTR[rsp],xmm6
- movdqa XMMWORD PTR[16+rsp],xmm15
- lea rdi,QWORD PTR[64+rdi]
- movdqa XMMWORD PTR[32+rsp],xmm9
- sub rdx,192
- movdqa XMMWORD PTR[48+rsp],xmm3
-
-$L$oop_tail4x::
- movzx eax,BYTE PTR[r10*1+rsi]
- movzx ecx,BYTE PTR[r10*1+rsp]
- lea r10,QWORD PTR[1+r10]
- xor eax,ecx
- mov BYTE PTR[((-1))+r10*1+rdi],al
- dec rdx
- jnz $L$oop_tail4x
-
-$L$done4x::
- movaps xmm6,XMMWORD PTR[((-168))+r9]
- movaps xmm7,XMMWORD PTR[((-152))+r9]
- movaps xmm8,XMMWORD PTR[((-136))+r9]
- movaps xmm9,XMMWORD PTR[((-120))+r9]
- movaps xmm10,XMMWORD PTR[((-104))+r9]
- movaps xmm11,XMMWORD PTR[((-88))+r9]
- movaps xmm12,XMMWORD PTR[((-72))+r9]
- movaps xmm13,XMMWORD PTR[((-56))+r9]
- movaps xmm14,XMMWORD PTR[((-40))+r9]
- movaps xmm15,XMMWORD PTR[((-24))+r9]
- lea rsp,QWORD PTR[r9]
-
-$L$4x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ChaCha20_4x::
-ChaCha20_4x ENDP
-
-ALIGN 32
-ChaCha20_4xop PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ChaCha20_4xop::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
-$L$ChaCha20_4xop::
- mov r9,rsp
-
- sub rsp,0140h+168
- movaps XMMWORD PTR[(-168)+r9],xmm6
- movaps XMMWORD PTR[(-152)+r9],xmm7
- movaps XMMWORD PTR[(-136)+r9],xmm8
- movaps XMMWORD PTR[(-120)+r9],xmm9
- movaps XMMWORD PTR[(-104)+r9],xmm10
- movaps XMMWORD PTR[(-88)+r9],xmm11
- movaps XMMWORD PTR[(-72)+r9],xmm12
- movaps XMMWORD PTR[(-56)+r9],xmm13
- movaps XMMWORD PTR[(-40)+r9],xmm14
- movaps XMMWORD PTR[(-24)+r9],xmm15
-$L$4xop_body::
- vzeroupper
-
- vmovdqa xmm11,XMMWORD PTR[$L$sigma]
- vmovdqu xmm3,XMMWORD PTR[rcx]
- vmovdqu xmm15,XMMWORD PTR[16+rcx]
- vmovdqu xmm7,XMMWORD PTR[r8]
- lea rcx,QWORD PTR[256+rsp]
-
- vpshufd xmm8,xmm11,000h
- vpshufd xmm9,xmm11,055h
- vmovdqa XMMWORD PTR[64+rsp],xmm8
- vpshufd xmm10,xmm11,0aah
- vmovdqa XMMWORD PTR[80+rsp],xmm9
- vpshufd xmm11,xmm11,0ffh
- vmovdqa XMMWORD PTR[96+rsp],xmm10
- vmovdqa XMMWORD PTR[112+rsp],xmm11
-
- vpshufd xmm0,xmm3,000h
- vpshufd xmm1,xmm3,055h
- vmovdqa XMMWORD PTR[(128-256)+rcx],xmm0
- vpshufd xmm2,xmm3,0aah
- vmovdqa XMMWORD PTR[(144-256)+rcx],xmm1
- vpshufd xmm3,xmm3,0ffh
- vmovdqa XMMWORD PTR[(160-256)+rcx],xmm2
- vmovdqa XMMWORD PTR[(176-256)+rcx],xmm3
-
- vpshufd xmm12,xmm15,000h
- vpshufd xmm13,xmm15,055h
- vmovdqa XMMWORD PTR[(192-256)+rcx],xmm12
- vpshufd xmm14,xmm15,0aah
- vmovdqa XMMWORD PTR[(208-256)+rcx],xmm13
- vpshufd xmm15,xmm15,0ffh
- vmovdqa XMMWORD PTR[(224-256)+rcx],xmm14
- vmovdqa XMMWORD PTR[(240-256)+rcx],xmm15
-
- vpshufd xmm4,xmm7,000h
- vpshufd xmm5,xmm7,055h
- vpaddd xmm4,xmm4,XMMWORD PTR[$L$inc]
- vpshufd xmm6,xmm7,0aah
- vmovdqa XMMWORD PTR[(272-256)+rcx],xmm5
- vpshufd xmm7,xmm7,0ffh
- vmovdqa XMMWORD PTR[(288-256)+rcx],xmm6
- vmovdqa XMMWORD PTR[(304-256)+rcx],xmm7
-
- jmp $L$oop_enter4xop
-
-ALIGN 32
-$L$oop_outer4xop::
- vmovdqa xmm8,XMMWORD PTR[64+rsp]
- vmovdqa xmm9,XMMWORD PTR[80+rsp]
- vmovdqa xmm10,XMMWORD PTR[96+rsp]
- vmovdqa xmm11,XMMWORD PTR[112+rsp]
- vmovdqa xmm0,XMMWORD PTR[((128-256))+rcx]
- vmovdqa xmm1,XMMWORD PTR[((144-256))+rcx]
- vmovdqa xmm2,XMMWORD PTR[((160-256))+rcx]
- vmovdqa xmm3,XMMWORD PTR[((176-256))+rcx]
- vmovdqa xmm12,XMMWORD PTR[((192-256))+rcx]
- vmovdqa xmm13,XMMWORD PTR[((208-256))+rcx]
- vmovdqa xmm14,XMMWORD PTR[((224-256))+rcx]
- vmovdqa xmm15,XMMWORD PTR[((240-256))+rcx]
- vmovdqa xmm4,XMMWORD PTR[((256-256))+rcx]
- vmovdqa xmm5,XMMWORD PTR[((272-256))+rcx]
- vmovdqa xmm6,XMMWORD PTR[((288-256))+rcx]
- vmovdqa xmm7,XMMWORD PTR[((304-256))+rcx]
- vpaddd xmm4,xmm4,XMMWORD PTR[$L$four]
-
-$L$oop_enter4xop::
- mov eax,10
- vmovdqa XMMWORD PTR[(256-256)+rcx],xmm4
- jmp $L$oop4xop
-
-ALIGN 32
-$L$oop4xop::
- vpaddd xmm8,xmm8,xmm0
- vpaddd xmm9,xmm9,xmm1
- vpaddd xmm10,xmm10,xmm2
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm8,xmm4
- vpxor xmm5,xmm9,xmm5
- vpxor xmm6,xmm10,xmm6
- vpxor xmm7,xmm11,xmm7
-DB 143,232,120,194,228,16
-DB 143,232,120,194,237,16
-DB 143,232,120,194,246,16
-DB 143,232,120,194,255,16
- vpaddd xmm12,xmm12,xmm4
- vpaddd xmm13,xmm13,xmm5
- vpaddd xmm14,xmm14,xmm6
- vpaddd xmm15,xmm15,xmm7
- vpxor xmm0,xmm12,xmm0
- vpxor xmm1,xmm13,xmm1
- vpxor xmm2,xmm2,xmm14
- vpxor xmm3,xmm3,xmm15
-DB 143,232,120,194,192,12
-DB 143,232,120,194,201,12
-DB 143,232,120,194,210,12
-DB 143,232,120,194,219,12
- vpaddd xmm8,xmm0,xmm8
- vpaddd xmm9,xmm1,xmm9
- vpaddd xmm10,xmm10,xmm2
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm8,xmm4
- vpxor xmm5,xmm9,xmm5
- vpxor xmm6,xmm10,xmm6
- vpxor xmm7,xmm11,xmm7
-DB 143,232,120,194,228,8
-DB 143,232,120,194,237,8
-DB 143,232,120,194,246,8
-DB 143,232,120,194,255,8
- vpaddd xmm12,xmm12,xmm4
- vpaddd xmm13,xmm13,xmm5
- vpaddd xmm14,xmm14,xmm6
- vpaddd xmm15,xmm15,xmm7
- vpxor xmm0,xmm12,xmm0
- vpxor xmm1,xmm13,xmm1
- vpxor xmm2,xmm2,xmm14
- vpxor xmm3,xmm3,xmm15
-DB 143,232,120,194,192,7
-DB 143,232,120,194,201,7
-DB 143,232,120,194,210,7
-DB 143,232,120,194,219,7
- vpaddd xmm8,xmm8,xmm1
- vpaddd xmm9,xmm9,xmm2
- vpaddd xmm10,xmm10,xmm3
- vpaddd xmm11,xmm11,xmm0
- vpxor xmm7,xmm8,xmm7
- vpxor xmm4,xmm9,xmm4
- vpxor xmm5,xmm10,xmm5
- vpxor xmm6,xmm11,xmm6
-DB 143,232,120,194,255,16
-DB 143,232,120,194,228,16
-DB 143,232,120,194,237,16
-DB 143,232,120,194,246,16
- vpaddd xmm14,xmm14,xmm7
- vpaddd xmm15,xmm15,xmm4
- vpaddd xmm12,xmm12,xmm5
- vpaddd xmm13,xmm13,xmm6
- vpxor xmm1,xmm14,xmm1
- vpxor xmm2,xmm15,xmm2
- vpxor xmm3,xmm3,xmm12
- vpxor xmm0,xmm0,xmm13
-DB 143,232,120,194,201,12
-DB 143,232,120,194,210,12
-DB 143,232,120,194,219,12
-DB 143,232,120,194,192,12
- vpaddd xmm8,xmm1,xmm8
- vpaddd xmm9,xmm2,xmm9
- vpaddd xmm10,xmm10,xmm3
- vpaddd xmm11,xmm11,xmm0
- vpxor xmm7,xmm8,xmm7
- vpxor xmm4,xmm9,xmm4
- vpxor xmm5,xmm10,xmm5
- vpxor xmm6,xmm11,xmm6
-DB 143,232,120,194,255,8
-DB 143,232,120,194,228,8
-DB 143,232,120,194,237,8
-DB 143,232,120,194,246,8
- vpaddd xmm14,xmm14,xmm7
- vpaddd xmm15,xmm15,xmm4
- vpaddd xmm12,xmm12,xmm5
- vpaddd xmm13,xmm13,xmm6
- vpxor xmm1,xmm14,xmm1
- vpxor xmm2,xmm15,xmm2
- vpxor xmm3,xmm3,xmm12
- vpxor xmm0,xmm0,xmm13
-DB 143,232,120,194,201,7
-DB 143,232,120,194,210,7
-DB 143,232,120,194,219,7
-DB 143,232,120,194,192,7
- dec eax
- jnz $L$oop4xop
-
- vpaddd xmm8,xmm8,XMMWORD PTR[64+rsp]
- vpaddd xmm9,xmm9,XMMWORD PTR[80+rsp]
- vpaddd xmm10,xmm10,XMMWORD PTR[96+rsp]
- vpaddd xmm11,xmm11,XMMWORD PTR[112+rsp]
-
- vmovdqa XMMWORD PTR[32+rsp],xmm14
- vmovdqa XMMWORD PTR[48+rsp],xmm15
-
- vpunpckldq xmm14,xmm8,xmm9
- vpunpckldq xmm15,xmm10,xmm11
- vpunpckhdq xmm8,xmm8,xmm9
- vpunpckhdq xmm10,xmm10,xmm11
- vpunpcklqdq xmm9,xmm14,xmm15
- vpunpckhqdq xmm14,xmm14,xmm15
- vpunpcklqdq xmm11,xmm8,xmm10
- vpunpckhqdq xmm8,xmm8,xmm10
- vpaddd xmm0,xmm0,XMMWORD PTR[((128-256))+rcx]
- vpaddd xmm1,xmm1,XMMWORD PTR[((144-256))+rcx]
- vpaddd xmm2,xmm2,XMMWORD PTR[((160-256))+rcx]
- vpaddd xmm3,xmm3,XMMWORD PTR[((176-256))+rcx]
-
- vmovdqa XMMWORD PTR[rsp],xmm9
- vmovdqa XMMWORD PTR[16+rsp],xmm14
- vmovdqa xmm9,XMMWORD PTR[32+rsp]
- vmovdqa xmm14,XMMWORD PTR[48+rsp]
-
- vpunpckldq xmm10,xmm0,xmm1
- vpunpckldq xmm15,xmm2,xmm3
- vpunpckhdq xmm0,xmm0,xmm1
- vpunpckhdq xmm2,xmm2,xmm3
- vpunpcklqdq xmm1,xmm10,xmm15
- vpunpckhqdq xmm10,xmm10,xmm15
- vpunpcklqdq xmm3,xmm0,xmm2
- vpunpckhqdq xmm0,xmm0,xmm2
- vpaddd xmm12,xmm12,XMMWORD PTR[((192-256))+rcx]
- vpaddd xmm13,xmm13,XMMWORD PTR[((208-256))+rcx]
- vpaddd xmm9,xmm9,XMMWORD PTR[((224-256))+rcx]
- vpaddd xmm14,xmm14,XMMWORD PTR[((240-256))+rcx]
-
- vpunpckldq xmm2,xmm12,xmm13
- vpunpckldq xmm15,xmm9,xmm14
- vpunpckhdq xmm12,xmm12,xmm13
- vpunpckhdq xmm9,xmm9,xmm14
- vpunpcklqdq xmm13,xmm2,xmm15
- vpunpckhqdq xmm2,xmm2,xmm15
- vpunpcklqdq xmm14,xmm12,xmm9
- vpunpckhqdq xmm12,xmm12,xmm9
- vpaddd xmm4,xmm4,XMMWORD PTR[((256-256))+rcx]
- vpaddd xmm5,xmm5,XMMWORD PTR[((272-256))+rcx]
- vpaddd xmm6,xmm6,XMMWORD PTR[((288-256))+rcx]
- vpaddd xmm7,xmm7,XMMWORD PTR[((304-256))+rcx]
-
- vpunpckldq xmm9,xmm4,xmm5
- vpunpckldq xmm15,xmm6,xmm7
- vpunpckhdq xmm4,xmm4,xmm5
- vpunpckhdq xmm6,xmm6,xmm7
- vpunpcklqdq xmm5,xmm9,xmm15
- vpunpckhqdq xmm9,xmm9,xmm15
- vpunpcklqdq xmm7,xmm4,xmm6
- vpunpckhqdq xmm4,xmm4,xmm6
- vmovdqa xmm6,XMMWORD PTR[rsp]
- vmovdqa xmm15,XMMWORD PTR[16+rsp]
-
- cmp rdx,64*4
- jb $L$tail4xop
-
- vpxor xmm6,xmm6,XMMWORD PTR[rsi]
- vpxor xmm1,xmm1,XMMWORD PTR[16+rsi]
- vpxor xmm13,xmm13,XMMWORD PTR[32+rsi]
- vpxor xmm5,xmm5,XMMWORD PTR[48+rsi]
- vpxor xmm15,xmm15,XMMWORD PTR[64+rsi]
- vpxor xmm10,xmm10,XMMWORD PTR[80+rsi]
- vpxor xmm2,xmm2,XMMWORD PTR[96+rsi]
- vpxor xmm9,xmm9,XMMWORD PTR[112+rsi]
- lea rsi,QWORD PTR[128+rsi]
- vpxor xmm11,xmm11,XMMWORD PTR[rsi]
- vpxor xmm3,xmm3,XMMWORD PTR[16+rsi]
- vpxor xmm14,xmm14,XMMWORD PTR[32+rsi]
- vpxor xmm7,xmm7,XMMWORD PTR[48+rsi]
- vpxor xmm8,xmm8,XMMWORD PTR[64+rsi]
- vpxor xmm0,xmm0,XMMWORD PTR[80+rsi]
- vpxor xmm12,xmm12,XMMWORD PTR[96+rsi]
- vpxor xmm4,xmm4,XMMWORD PTR[112+rsi]
- lea rsi,QWORD PTR[128+rsi]
-
- vmovdqu XMMWORD PTR[rdi],xmm6
- vmovdqu XMMWORD PTR[16+rdi],xmm1
- vmovdqu XMMWORD PTR[32+rdi],xmm13
- vmovdqu XMMWORD PTR[48+rdi],xmm5
- vmovdqu XMMWORD PTR[64+rdi],xmm15
- vmovdqu XMMWORD PTR[80+rdi],xmm10
- vmovdqu XMMWORD PTR[96+rdi],xmm2
- vmovdqu XMMWORD PTR[112+rdi],xmm9
- lea rdi,QWORD PTR[128+rdi]
- vmovdqu XMMWORD PTR[rdi],xmm11
- vmovdqu XMMWORD PTR[16+rdi],xmm3
- vmovdqu XMMWORD PTR[32+rdi],xmm14
- vmovdqu XMMWORD PTR[48+rdi],xmm7
- vmovdqu XMMWORD PTR[64+rdi],xmm8
- vmovdqu XMMWORD PTR[80+rdi],xmm0
- vmovdqu XMMWORD PTR[96+rdi],xmm12
- vmovdqu XMMWORD PTR[112+rdi],xmm4
- lea rdi,QWORD PTR[128+rdi]
-
- sub rdx,64*4
- jnz $L$oop_outer4xop
-
- jmp $L$done4xop
-
-ALIGN 32
-$L$tail4xop::
- cmp rdx,192
- jae $L$192_or_more4xop
- cmp rdx,128
- jae $L$128_or_more4xop
- cmp rdx,64
- jae $L$64_or_more4xop
-
- xor r10,r10
- vmovdqa XMMWORD PTR[rsp],xmm6
- vmovdqa XMMWORD PTR[16+rsp],xmm1
- vmovdqa XMMWORD PTR[32+rsp],xmm13
- vmovdqa XMMWORD PTR[48+rsp],xmm5
- jmp $L$oop_tail4xop
-
-ALIGN 32
-$L$64_or_more4xop::
- vpxor xmm6,xmm6,XMMWORD PTR[rsi]
- vpxor xmm1,xmm1,XMMWORD PTR[16+rsi]
- vpxor xmm13,xmm13,XMMWORD PTR[32+rsi]
- vpxor xmm5,xmm5,XMMWORD PTR[48+rsi]
- vmovdqu XMMWORD PTR[rdi],xmm6
- vmovdqu XMMWORD PTR[16+rdi],xmm1
- vmovdqu XMMWORD PTR[32+rdi],xmm13
- vmovdqu XMMWORD PTR[48+rdi],xmm5
- je $L$done4xop
-
- lea rsi,QWORD PTR[64+rsi]
- vmovdqa XMMWORD PTR[rsp],xmm15
- xor r10,r10
- vmovdqa XMMWORD PTR[16+rsp],xmm10
- lea rdi,QWORD PTR[64+rdi]
- vmovdqa XMMWORD PTR[32+rsp],xmm2
- sub rdx,64
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- jmp $L$oop_tail4xop
-
-ALIGN 32
-$L$128_or_more4xop::
- vpxor xmm6,xmm6,XMMWORD PTR[rsi]
- vpxor xmm1,xmm1,XMMWORD PTR[16+rsi]
- vpxor xmm13,xmm13,XMMWORD PTR[32+rsi]
- vpxor xmm5,xmm5,XMMWORD PTR[48+rsi]
- vpxor xmm15,xmm15,XMMWORD PTR[64+rsi]
- vpxor xmm10,xmm10,XMMWORD PTR[80+rsi]
- vpxor xmm2,xmm2,XMMWORD PTR[96+rsi]
- vpxor xmm9,xmm9,XMMWORD PTR[112+rsi]
-
- vmovdqu XMMWORD PTR[rdi],xmm6
- vmovdqu XMMWORD PTR[16+rdi],xmm1
- vmovdqu XMMWORD PTR[32+rdi],xmm13
- vmovdqu XMMWORD PTR[48+rdi],xmm5
- vmovdqu XMMWORD PTR[64+rdi],xmm15
- vmovdqu XMMWORD PTR[80+rdi],xmm10
- vmovdqu XMMWORD PTR[96+rdi],xmm2
- vmovdqu XMMWORD PTR[112+rdi],xmm9
- je $L$done4xop
-
- lea rsi,QWORD PTR[128+rsi]
- vmovdqa XMMWORD PTR[rsp],xmm11
- xor r10,r10
- vmovdqa XMMWORD PTR[16+rsp],xmm3
- lea rdi,QWORD PTR[128+rdi]
- vmovdqa XMMWORD PTR[32+rsp],xmm14
- sub rdx,128
- vmovdqa XMMWORD PTR[48+rsp],xmm7
- jmp $L$oop_tail4xop
-
-ALIGN 32
-$L$192_or_more4xop::
- vpxor xmm6,xmm6,XMMWORD PTR[rsi]
- vpxor xmm1,xmm1,XMMWORD PTR[16+rsi]
- vpxor xmm13,xmm13,XMMWORD PTR[32+rsi]
- vpxor xmm5,xmm5,XMMWORD PTR[48+rsi]
- vpxor xmm15,xmm15,XMMWORD PTR[64+rsi]
- vpxor xmm10,xmm10,XMMWORD PTR[80+rsi]
- vpxor xmm2,xmm2,XMMWORD PTR[96+rsi]
- vpxor xmm9,xmm9,XMMWORD PTR[112+rsi]
- lea rsi,QWORD PTR[128+rsi]
- vpxor xmm11,xmm11,XMMWORD PTR[rsi]
- vpxor xmm3,xmm3,XMMWORD PTR[16+rsi]
- vpxor xmm14,xmm14,XMMWORD PTR[32+rsi]
- vpxor xmm7,xmm7,XMMWORD PTR[48+rsi]
-
- vmovdqu XMMWORD PTR[rdi],xmm6
- vmovdqu XMMWORD PTR[16+rdi],xmm1
- vmovdqu XMMWORD PTR[32+rdi],xmm13
- vmovdqu XMMWORD PTR[48+rdi],xmm5
- vmovdqu XMMWORD PTR[64+rdi],xmm15
- vmovdqu XMMWORD PTR[80+rdi],xmm10
- vmovdqu XMMWORD PTR[96+rdi],xmm2
- vmovdqu XMMWORD PTR[112+rdi],xmm9
- lea rdi,QWORD PTR[128+rdi]
- vmovdqu XMMWORD PTR[rdi],xmm11
- vmovdqu XMMWORD PTR[16+rdi],xmm3
- vmovdqu XMMWORD PTR[32+rdi],xmm14
- vmovdqu XMMWORD PTR[48+rdi],xmm7
- je $L$done4xop
-
- lea rsi,QWORD PTR[64+rsi]
- vmovdqa XMMWORD PTR[rsp],xmm8
- xor r10,r10
- vmovdqa XMMWORD PTR[16+rsp],xmm0
- lea rdi,QWORD PTR[64+rdi]
- vmovdqa XMMWORD PTR[32+rsp],xmm12
- sub rdx,192
- vmovdqa XMMWORD PTR[48+rsp],xmm4
-
-$L$oop_tail4xop::
- movzx eax,BYTE PTR[r10*1+rsi]
- movzx ecx,BYTE PTR[r10*1+rsp]
- lea r10,QWORD PTR[1+r10]
- xor eax,ecx
- mov BYTE PTR[((-1))+r10*1+rdi],al
- dec rdx
- jnz $L$oop_tail4xop
-
-$L$done4xop::
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-168))+r9]
- movaps xmm7,XMMWORD PTR[((-152))+r9]
- movaps xmm8,XMMWORD PTR[((-136))+r9]
- movaps xmm9,XMMWORD PTR[((-120))+r9]
- movaps xmm10,XMMWORD PTR[((-104))+r9]
- movaps xmm11,XMMWORD PTR[((-88))+r9]
- movaps xmm12,XMMWORD PTR[((-72))+r9]
- movaps xmm13,XMMWORD PTR[((-56))+r9]
- movaps xmm14,XMMWORD PTR[((-40))+r9]
- movaps xmm15,XMMWORD PTR[((-24))+r9]
- lea rsp,QWORD PTR[r9]
-
-$L$4xop_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ChaCha20_4xop::
-ChaCha20_4xop ENDP
-
-ALIGN 32
-ChaCha20_8x PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ChaCha20_8x::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
-
-
-
-$L$ChaCha20_8x::
- mov r9,rsp
-
- sub rsp,0280h+168
- and rsp,-32
- movaps XMMWORD PTR[(-168)+r9],xmm6
- movaps XMMWORD PTR[(-152)+r9],xmm7
- movaps XMMWORD PTR[(-136)+r9],xmm8
- movaps XMMWORD PTR[(-120)+r9],xmm9
- movaps XMMWORD PTR[(-104)+r9],xmm10
- movaps XMMWORD PTR[(-88)+r9],xmm11
- movaps XMMWORD PTR[(-72)+r9],xmm12
- movaps XMMWORD PTR[(-56)+r9],xmm13
- movaps XMMWORD PTR[(-40)+r9],xmm14
- movaps XMMWORD PTR[(-24)+r9],xmm15
-$L$8x_body::
- vzeroupper
-
-
-
-
-
-
-
-
-
-
- vbroadcasti128 ymm11,XMMWORD PTR[$L$sigma]
- vbroadcasti128 ymm3,XMMWORD PTR[rcx]
- vbroadcasti128 ymm15,XMMWORD PTR[16+rcx]
- vbroadcasti128 ymm7,XMMWORD PTR[r8]
- lea rcx,QWORD PTR[256+rsp]
- lea rax,QWORD PTR[512+rsp]
- lea r10,QWORD PTR[$L$rot16]
- lea r11,QWORD PTR[$L$rot24]
-
- vpshufd ymm8,ymm11,000h
- vpshufd ymm9,ymm11,055h
- vmovdqa YMMWORD PTR[(128-256)+rcx],ymm8
- vpshufd ymm10,ymm11,0aah
- vmovdqa YMMWORD PTR[(160-256)+rcx],ymm9
- vpshufd ymm11,ymm11,0ffh
- vmovdqa YMMWORD PTR[(192-256)+rcx],ymm10
- vmovdqa YMMWORD PTR[(224-256)+rcx],ymm11
-
- vpshufd ymm0,ymm3,000h
- vpshufd ymm1,ymm3,055h
- vmovdqa YMMWORD PTR[(256-256)+rcx],ymm0
- vpshufd ymm2,ymm3,0aah
- vmovdqa YMMWORD PTR[(288-256)+rcx],ymm1
- vpshufd ymm3,ymm3,0ffh
- vmovdqa YMMWORD PTR[(320-256)+rcx],ymm2
- vmovdqa YMMWORD PTR[(352-256)+rcx],ymm3
-
- vpshufd ymm12,ymm15,000h
- vpshufd ymm13,ymm15,055h
- vmovdqa YMMWORD PTR[(384-512)+rax],ymm12
- vpshufd ymm14,ymm15,0aah
- vmovdqa YMMWORD PTR[(416-512)+rax],ymm13
- vpshufd ymm15,ymm15,0ffh
- vmovdqa YMMWORD PTR[(448-512)+rax],ymm14
- vmovdqa YMMWORD PTR[(480-512)+rax],ymm15
-
- vpshufd ymm4,ymm7,000h
- vpshufd ymm5,ymm7,055h
- vpaddd ymm4,ymm4,YMMWORD PTR[$L$incy]
- vpshufd ymm6,ymm7,0aah
- vmovdqa YMMWORD PTR[(544-512)+rax],ymm5
- vpshufd ymm7,ymm7,0ffh
- vmovdqa YMMWORD PTR[(576-512)+rax],ymm6
- vmovdqa YMMWORD PTR[(608-512)+rax],ymm7
-
- jmp $L$oop_enter8x
-
-ALIGN 32
-$L$oop_outer8x::
- vmovdqa ymm8,YMMWORD PTR[((128-256))+rcx]
- vmovdqa ymm9,YMMWORD PTR[((160-256))+rcx]
- vmovdqa ymm10,YMMWORD PTR[((192-256))+rcx]
- vmovdqa ymm11,YMMWORD PTR[((224-256))+rcx]
- vmovdqa ymm0,YMMWORD PTR[((256-256))+rcx]
- vmovdqa ymm1,YMMWORD PTR[((288-256))+rcx]
- vmovdqa ymm2,YMMWORD PTR[((320-256))+rcx]
- vmovdqa ymm3,YMMWORD PTR[((352-256))+rcx]
- vmovdqa ymm12,YMMWORD PTR[((384-512))+rax]
- vmovdqa ymm13,YMMWORD PTR[((416-512))+rax]
- vmovdqa ymm14,YMMWORD PTR[((448-512))+rax]
- vmovdqa ymm15,YMMWORD PTR[((480-512))+rax]
- vmovdqa ymm4,YMMWORD PTR[((512-512))+rax]
- vmovdqa ymm5,YMMWORD PTR[((544-512))+rax]
- vmovdqa ymm6,YMMWORD PTR[((576-512))+rax]
- vmovdqa ymm7,YMMWORD PTR[((608-512))+rax]
- vpaddd ymm4,ymm4,YMMWORD PTR[$L$eight]
-
-$L$oop_enter8x::
- vmovdqa YMMWORD PTR[64+rsp],ymm14
- vmovdqa YMMWORD PTR[96+rsp],ymm15
- vbroadcasti128 ymm15,XMMWORD PTR[r10]
- vmovdqa YMMWORD PTR[(512-512)+rax],ymm4
- mov eax,10
- jmp $L$oop8x
-
-ALIGN 32
-$L$oop8x::
- vpaddd ymm8,ymm8,ymm0
- vpxor ymm4,ymm8,ymm4
- vpshufb ymm4,ymm4,ymm15
- vpaddd ymm9,ymm9,ymm1
- vpxor ymm5,ymm9,ymm5
- vpshufb ymm5,ymm5,ymm15
- vpaddd ymm12,ymm12,ymm4
- vpxor ymm0,ymm12,ymm0
- vpslld ymm14,ymm0,12
- vpsrld ymm0,ymm0,20
- vpor ymm0,ymm14,ymm0
- vbroadcasti128 ymm14,XMMWORD PTR[r11]
- vpaddd ymm13,ymm13,ymm5
- vpxor ymm1,ymm13,ymm1
- vpslld ymm15,ymm1,12
- vpsrld ymm1,ymm1,20
- vpor ymm1,ymm15,ymm1
- vpaddd ymm8,ymm8,ymm0
- vpxor ymm4,ymm8,ymm4
- vpshufb ymm4,ymm4,ymm14
- vpaddd ymm9,ymm9,ymm1
- vpxor ymm5,ymm9,ymm5
- vpshufb ymm5,ymm5,ymm14
- vpaddd ymm12,ymm12,ymm4
- vpxor ymm0,ymm12,ymm0
- vpslld ymm15,ymm0,7
- vpsrld ymm0,ymm0,25
- vpor ymm0,ymm15,ymm0
- vbroadcasti128 ymm15,XMMWORD PTR[r10]
- vpaddd ymm13,ymm13,ymm5
- vpxor ymm1,ymm13,ymm1
- vpslld ymm14,ymm1,7
- vpsrld ymm1,ymm1,25
- vpor ymm1,ymm14,ymm1
- vmovdqa YMMWORD PTR[rsp],ymm12
- vmovdqa YMMWORD PTR[32+rsp],ymm13
- vmovdqa ymm12,YMMWORD PTR[64+rsp]
- vmovdqa ymm13,YMMWORD PTR[96+rsp]
- vpaddd ymm10,ymm10,ymm2
- vpxor ymm6,ymm10,ymm6
- vpshufb ymm6,ymm6,ymm15
- vpaddd ymm11,ymm11,ymm3
- vpxor ymm7,ymm11,ymm7
- vpshufb ymm7,ymm7,ymm15
- vpaddd ymm12,ymm12,ymm6
- vpxor ymm2,ymm12,ymm2
- vpslld ymm14,ymm2,12
- vpsrld ymm2,ymm2,20
- vpor ymm2,ymm14,ymm2
- vbroadcasti128 ymm14,XMMWORD PTR[r11]
- vpaddd ymm13,ymm13,ymm7
- vpxor ymm3,ymm13,ymm3
- vpslld ymm15,ymm3,12
- vpsrld ymm3,ymm3,20
- vpor ymm3,ymm15,ymm3
- vpaddd ymm10,ymm10,ymm2
- vpxor ymm6,ymm10,ymm6
- vpshufb ymm6,ymm6,ymm14
- vpaddd ymm11,ymm11,ymm3
- vpxor ymm7,ymm11,ymm7
- vpshufb ymm7,ymm7,ymm14
- vpaddd ymm12,ymm12,ymm6
- vpxor ymm2,ymm12,ymm2
- vpslld ymm15,ymm2,7
- vpsrld ymm2,ymm2,25
- vpor ymm2,ymm15,ymm2
- vbroadcasti128 ymm15,XMMWORD PTR[r10]
- vpaddd ymm13,ymm13,ymm7
- vpxor ymm3,ymm13,ymm3
- vpslld ymm14,ymm3,7
- vpsrld ymm3,ymm3,25
- vpor ymm3,ymm14,ymm3
- vpaddd ymm8,ymm8,ymm1
- vpxor ymm7,ymm8,ymm7
- vpshufb ymm7,ymm7,ymm15
- vpaddd ymm9,ymm9,ymm2
- vpxor ymm4,ymm9,ymm4
- vpshufb ymm4,ymm4,ymm15
- vpaddd ymm12,ymm12,ymm7
- vpxor ymm1,ymm12,ymm1
- vpslld ymm14,ymm1,12
- vpsrld ymm1,ymm1,20
- vpor ymm1,ymm14,ymm1
- vbroadcasti128 ymm14,XMMWORD PTR[r11]
- vpaddd ymm13,ymm13,ymm4
- vpxor ymm2,ymm13,ymm2
- vpslld ymm15,ymm2,12
- vpsrld ymm2,ymm2,20
- vpor ymm2,ymm15,ymm2
- vpaddd ymm8,ymm8,ymm1
- vpxor ymm7,ymm8,ymm7
- vpshufb ymm7,ymm7,ymm14
- vpaddd ymm9,ymm9,ymm2
- vpxor ymm4,ymm9,ymm4
- vpshufb ymm4,ymm4,ymm14
- vpaddd ymm12,ymm12,ymm7
- vpxor ymm1,ymm12,ymm1
- vpslld ymm15,ymm1,7
- vpsrld ymm1,ymm1,25
- vpor ymm1,ymm15,ymm1
- vbroadcasti128 ymm15,XMMWORD PTR[r10]
- vpaddd ymm13,ymm13,ymm4
- vpxor ymm2,ymm13,ymm2
- vpslld ymm14,ymm2,7
- vpsrld ymm2,ymm2,25
- vpor ymm2,ymm14,ymm2
- vmovdqa YMMWORD PTR[64+rsp],ymm12
- vmovdqa YMMWORD PTR[96+rsp],ymm13
- vmovdqa ymm12,YMMWORD PTR[rsp]
- vmovdqa ymm13,YMMWORD PTR[32+rsp]
- vpaddd ymm10,ymm10,ymm3
- vpxor ymm5,ymm10,ymm5
- vpshufb ymm5,ymm5,ymm15
- vpaddd ymm11,ymm11,ymm0
- vpxor ymm6,ymm11,ymm6
- vpshufb ymm6,ymm6,ymm15
- vpaddd ymm12,ymm12,ymm5
- vpxor ymm3,ymm12,ymm3
- vpslld ymm14,ymm3,12
- vpsrld ymm3,ymm3,20
- vpor ymm3,ymm14,ymm3
- vbroadcasti128 ymm14,XMMWORD PTR[r11]
- vpaddd ymm13,ymm13,ymm6
- vpxor ymm0,ymm13,ymm0
- vpslld ymm15,ymm0,12
- vpsrld ymm0,ymm0,20
- vpor ymm0,ymm15,ymm0
- vpaddd ymm10,ymm10,ymm3
- vpxor ymm5,ymm10,ymm5
- vpshufb ymm5,ymm5,ymm14
- vpaddd ymm11,ymm11,ymm0
- vpxor ymm6,ymm11,ymm6
- vpshufb ymm6,ymm6,ymm14
- vpaddd ymm12,ymm12,ymm5
- vpxor ymm3,ymm12,ymm3
- vpslld ymm15,ymm3,7
- vpsrld ymm3,ymm3,25
- vpor ymm3,ymm15,ymm3
- vbroadcasti128 ymm15,XMMWORD PTR[r10]
- vpaddd ymm13,ymm13,ymm6
- vpxor ymm0,ymm13,ymm0
- vpslld ymm14,ymm0,7
- vpsrld ymm0,ymm0,25
- vpor ymm0,ymm14,ymm0
- dec eax
- jnz $L$oop8x
-
- lea rax,QWORD PTR[512+rsp]
- vpaddd ymm8,ymm8,YMMWORD PTR[((128-256))+rcx]
- vpaddd ymm9,ymm9,YMMWORD PTR[((160-256))+rcx]
- vpaddd ymm10,ymm10,YMMWORD PTR[((192-256))+rcx]
- vpaddd ymm11,ymm11,YMMWORD PTR[((224-256))+rcx]
-
- vpunpckldq ymm14,ymm8,ymm9
- vpunpckldq ymm15,ymm10,ymm11
- vpunpckhdq ymm8,ymm8,ymm9
- vpunpckhdq ymm10,ymm10,ymm11
- vpunpcklqdq ymm9,ymm14,ymm15
- vpunpckhqdq ymm14,ymm14,ymm15
- vpunpcklqdq ymm11,ymm8,ymm10
- vpunpckhqdq ymm8,ymm8,ymm10
- vpaddd ymm0,ymm0,YMMWORD PTR[((256-256))+rcx]
- vpaddd ymm1,ymm1,YMMWORD PTR[((288-256))+rcx]
- vpaddd ymm2,ymm2,YMMWORD PTR[((320-256))+rcx]
- vpaddd ymm3,ymm3,YMMWORD PTR[((352-256))+rcx]
-
- vpunpckldq ymm10,ymm0,ymm1
- vpunpckldq ymm15,ymm2,ymm3
- vpunpckhdq ymm0,ymm0,ymm1
- vpunpckhdq ymm2,ymm2,ymm3
- vpunpcklqdq ymm1,ymm10,ymm15
- vpunpckhqdq ymm10,ymm10,ymm15
- vpunpcklqdq ymm3,ymm0,ymm2
- vpunpckhqdq ymm0,ymm0,ymm2
- vperm2i128 ymm15,ymm9,ymm1,020h
- vperm2i128 ymm1,ymm9,ymm1,031h
- vperm2i128 ymm9,ymm14,ymm10,020h
- vperm2i128 ymm10,ymm14,ymm10,031h
- vperm2i128 ymm14,ymm11,ymm3,020h
- vperm2i128 ymm3,ymm11,ymm3,031h
- vperm2i128 ymm11,ymm8,ymm0,020h
- vperm2i128 ymm0,ymm8,ymm0,031h
- vmovdqa YMMWORD PTR[rsp],ymm15
- vmovdqa YMMWORD PTR[32+rsp],ymm9
- vmovdqa ymm15,YMMWORD PTR[64+rsp]
- vmovdqa ymm9,YMMWORD PTR[96+rsp]
-
- vpaddd ymm12,ymm12,YMMWORD PTR[((384-512))+rax]
- vpaddd ymm13,ymm13,YMMWORD PTR[((416-512))+rax]
- vpaddd ymm15,ymm15,YMMWORD PTR[((448-512))+rax]
- vpaddd ymm9,ymm9,YMMWORD PTR[((480-512))+rax]
-
- vpunpckldq ymm2,ymm12,ymm13
- vpunpckldq ymm8,ymm15,ymm9
- vpunpckhdq ymm12,ymm12,ymm13
- vpunpckhdq ymm15,ymm15,ymm9
- vpunpcklqdq ymm13,ymm2,ymm8
- vpunpckhqdq ymm2,ymm2,ymm8
- vpunpcklqdq ymm9,ymm12,ymm15
- vpunpckhqdq ymm12,ymm12,ymm15
- vpaddd ymm4,ymm4,YMMWORD PTR[((512-512))+rax]
- vpaddd ymm5,ymm5,YMMWORD PTR[((544-512))+rax]
- vpaddd ymm6,ymm6,YMMWORD PTR[((576-512))+rax]
- vpaddd ymm7,ymm7,YMMWORD PTR[((608-512))+rax]
-
- vpunpckldq ymm15,ymm4,ymm5
- vpunpckldq ymm8,ymm6,ymm7
- vpunpckhdq ymm4,ymm4,ymm5
- vpunpckhdq ymm6,ymm6,ymm7
- vpunpcklqdq ymm5,ymm15,ymm8
- vpunpckhqdq ymm15,ymm15,ymm8
- vpunpcklqdq ymm7,ymm4,ymm6
- vpunpckhqdq ymm4,ymm4,ymm6
- vperm2i128 ymm8,ymm13,ymm5,020h
- vperm2i128 ymm5,ymm13,ymm5,031h
- vperm2i128 ymm13,ymm2,ymm15,020h
- vperm2i128 ymm15,ymm2,ymm15,031h
- vperm2i128 ymm2,ymm9,ymm7,020h
- vperm2i128 ymm7,ymm9,ymm7,031h
- vperm2i128 ymm9,ymm12,ymm4,020h
- vperm2i128 ymm4,ymm12,ymm4,031h
- vmovdqa ymm6,YMMWORD PTR[rsp]
- vmovdqa ymm12,YMMWORD PTR[32+rsp]
-
- cmp rdx,64*8
- jb $L$tail8x
-
- vpxor ymm6,ymm6,YMMWORD PTR[rsi]
- vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
- vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
- vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
- lea rsi,QWORD PTR[128+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm6
- vmovdqu YMMWORD PTR[32+rdi],ymm8
- vmovdqu YMMWORD PTR[64+rdi],ymm1
- vmovdqu YMMWORD PTR[96+rdi],ymm5
- lea rdi,QWORD PTR[128+rdi]
-
- vpxor ymm12,ymm12,YMMWORD PTR[rsi]
- vpxor ymm13,ymm13,YMMWORD PTR[32+rsi]
- vpxor ymm10,ymm10,YMMWORD PTR[64+rsi]
- vpxor ymm15,ymm15,YMMWORD PTR[96+rsi]
- lea rsi,QWORD PTR[128+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm12
- vmovdqu YMMWORD PTR[32+rdi],ymm13
- vmovdqu YMMWORD PTR[64+rdi],ymm10
- vmovdqu YMMWORD PTR[96+rdi],ymm15
- lea rdi,QWORD PTR[128+rdi]
-
- vpxor ymm14,ymm14,YMMWORD PTR[rsi]
- vpxor ymm2,ymm2,YMMWORD PTR[32+rsi]
- vpxor ymm3,ymm3,YMMWORD PTR[64+rsi]
- vpxor ymm7,ymm7,YMMWORD PTR[96+rsi]
- lea rsi,QWORD PTR[128+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm14
- vmovdqu YMMWORD PTR[32+rdi],ymm2
- vmovdqu YMMWORD PTR[64+rdi],ymm3
- vmovdqu YMMWORD PTR[96+rdi],ymm7
- lea rdi,QWORD PTR[128+rdi]
-
- vpxor ymm11,ymm11,YMMWORD PTR[rsi]
- vpxor ymm9,ymm9,YMMWORD PTR[32+rsi]
- vpxor ymm0,ymm0,YMMWORD PTR[64+rsi]
- vpxor ymm4,ymm4,YMMWORD PTR[96+rsi]
- lea rsi,QWORD PTR[128+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm11
- vmovdqu YMMWORD PTR[32+rdi],ymm9
- vmovdqu YMMWORD PTR[64+rdi],ymm0
- vmovdqu YMMWORD PTR[96+rdi],ymm4
- lea rdi,QWORD PTR[128+rdi]
-
- sub rdx,64*8
- jnz $L$oop_outer8x
-
- jmp $L$done8x
-
-$L$tail8x::
- cmp rdx,448
- jae $L$448_or_more8x
- cmp rdx,384
- jae $L$384_or_more8x
- cmp rdx,320
- jae $L$320_or_more8x
- cmp rdx,256
- jae $L$256_or_more8x
- cmp rdx,192
- jae $L$192_or_more8x
- cmp rdx,128
- jae $L$128_or_more8x
- cmp rdx,64
- jae $L$64_or_more8x
-
- xor r10,r10
- vmovdqa YMMWORD PTR[rsp],ymm6
- vmovdqa YMMWORD PTR[32+rsp],ymm8
- jmp $L$oop_tail8x
-
-ALIGN 32
-$L$64_or_more8x::
- vpxor ymm6,ymm6,YMMWORD PTR[rsi]
- vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm6
- vmovdqu YMMWORD PTR[32+rdi],ymm8
- je $L$done8x
-
- lea rsi,QWORD PTR[64+rsi]
- xor r10,r10
- vmovdqa YMMWORD PTR[rsp],ymm1
- lea rdi,QWORD PTR[64+rdi]
- sub rdx,64
- vmovdqa YMMWORD PTR[32+rsp],ymm5
- jmp $L$oop_tail8x
-
-ALIGN 32
-$L$128_or_more8x::
- vpxor ymm6,ymm6,YMMWORD PTR[rsi]
- vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
- vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
- vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm6
- vmovdqu YMMWORD PTR[32+rdi],ymm8
- vmovdqu YMMWORD PTR[64+rdi],ymm1
- vmovdqu YMMWORD PTR[96+rdi],ymm5
- je $L$done8x
-
- lea rsi,QWORD PTR[128+rsi]
- xor r10,r10
- vmovdqa YMMWORD PTR[rsp],ymm12
- lea rdi,QWORD PTR[128+rdi]
- sub rdx,128
- vmovdqa YMMWORD PTR[32+rsp],ymm13
- jmp $L$oop_tail8x
-
-ALIGN 32
-$L$192_or_more8x::
- vpxor ymm6,ymm6,YMMWORD PTR[rsi]
- vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
- vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
- vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
- vpxor ymm12,ymm12,YMMWORD PTR[128+rsi]
- vpxor ymm13,ymm13,YMMWORD PTR[160+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm6
- vmovdqu YMMWORD PTR[32+rdi],ymm8
- vmovdqu YMMWORD PTR[64+rdi],ymm1
- vmovdqu YMMWORD PTR[96+rdi],ymm5
- vmovdqu YMMWORD PTR[128+rdi],ymm12
- vmovdqu YMMWORD PTR[160+rdi],ymm13
- je $L$done8x
-
- lea rsi,QWORD PTR[192+rsi]
- xor r10,r10
- vmovdqa YMMWORD PTR[rsp],ymm10
- lea rdi,QWORD PTR[192+rdi]
- sub rdx,192
- vmovdqa YMMWORD PTR[32+rsp],ymm15
- jmp $L$oop_tail8x
-
-ALIGN 32
-$L$256_or_more8x::
- vpxor ymm6,ymm6,YMMWORD PTR[rsi]
- vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
- vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
- vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
- vpxor ymm12,ymm12,YMMWORD PTR[128+rsi]
- vpxor ymm13,ymm13,YMMWORD PTR[160+rsi]
- vpxor ymm10,ymm10,YMMWORD PTR[192+rsi]
- vpxor ymm15,ymm15,YMMWORD PTR[224+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm6
- vmovdqu YMMWORD PTR[32+rdi],ymm8
- vmovdqu YMMWORD PTR[64+rdi],ymm1
- vmovdqu YMMWORD PTR[96+rdi],ymm5
- vmovdqu YMMWORD PTR[128+rdi],ymm12
- vmovdqu YMMWORD PTR[160+rdi],ymm13
- vmovdqu YMMWORD PTR[192+rdi],ymm10
- vmovdqu YMMWORD PTR[224+rdi],ymm15
- je $L$done8x
-
- lea rsi,QWORD PTR[256+rsi]
- xor r10,r10
- vmovdqa YMMWORD PTR[rsp],ymm14
- lea rdi,QWORD PTR[256+rdi]
- sub rdx,256
- vmovdqa YMMWORD PTR[32+rsp],ymm2
- jmp $L$oop_tail8x
-
-ALIGN 32
-$L$320_or_more8x::
- vpxor ymm6,ymm6,YMMWORD PTR[rsi]
- vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
- vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
- vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
- vpxor ymm12,ymm12,YMMWORD PTR[128+rsi]
- vpxor ymm13,ymm13,YMMWORD PTR[160+rsi]
- vpxor ymm10,ymm10,YMMWORD PTR[192+rsi]
- vpxor ymm15,ymm15,YMMWORD PTR[224+rsi]
- vpxor ymm14,ymm14,YMMWORD PTR[256+rsi]
- vpxor ymm2,ymm2,YMMWORD PTR[288+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm6
- vmovdqu YMMWORD PTR[32+rdi],ymm8
- vmovdqu YMMWORD PTR[64+rdi],ymm1
- vmovdqu YMMWORD PTR[96+rdi],ymm5
- vmovdqu YMMWORD PTR[128+rdi],ymm12
- vmovdqu YMMWORD PTR[160+rdi],ymm13
- vmovdqu YMMWORD PTR[192+rdi],ymm10
- vmovdqu YMMWORD PTR[224+rdi],ymm15
- vmovdqu YMMWORD PTR[256+rdi],ymm14
- vmovdqu YMMWORD PTR[288+rdi],ymm2
- je $L$done8x
-
- lea rsi,QWORD PTR[320+rsi]
- xor r10,r10
- vmovdqa YMMWORD PTR[rsp],ymm3
- lea rdi,QWORD PTR[320+rdi]
- sub rdx,320
- vmovdqa YMMWORD PTR[32+rsp],ymm7
- jmp $L$oop_tail8x
-
-ALIGN 32
-$L$384_or_more8x::
- vpxor ymm6,ymm6,YMMWORD PTR[rsi]
- vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
- vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
- vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
- vpxor ymm12,ymm12,YMMWORD PTR[128+rsi]
- vpxor ymm13,ymm13,YMMWORD PTR[160+rsi]
- vpxor ymm10,ymm10,YMMWORD PTR[192+rsi]
- vpxor ymm15,ymm15,YMMWORD PTR[224+rsi]
- vpxor ymm14,ymm14,YMMWORD PTR[256+rsi]
- vpxor ymm2,ymm2,YMMWORD PTR[288+rsi]
- vpxor ymm3,ymm3,YMMWORD PTR[320+rsi]
- vpxor ymm7,ymm7,YMMWORD PTR[352+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm6
- vmovdqu YMMWORD PTR[32+rdi],ymm8
- vmovdqu YMMWORD PTR[64+rdi],ymm1
- vmovdqu YMMWORD PTR[96+rdi],ymm5
- vmovdqu YMMWORD PTR[128+rdi],ymm12
- vmovdqu YMMWORD PTR[160+rdi],ymm13
- vmovdqu YMMWORD PTR[192+rdi],ymm10
- vmovdqu YMMWORD PTR[224+rdi],ymm15
- vmovdqu YMMWORD PTR[256+rdi],ymm14
- vmovdqu YMMWORD PTR[288+rdi],ymm2
- vmovdqu YMMWORD PTR[320+rdi],ymm3
- vmovdqu YMMWORD PTR[352+rdi],ymm7
- je $L$done8x
-
- lea rsi,QWORD PTR[384+rsi]
- xor r10,r10
- vmovdqa YMMWORD PTR[rsp],ymm11
- lea rdi,QWORD PTR[384+rdi]
- sub rdx,384
- vmovdqa YMMWORD PTR[32+rsp],ymm9
- jmp $L$oop_tail8x
-
-ALIGN 32
-$L$448_or_more8x::
- vpxor ymm6,ymm6,YMMWORD PTR[rsi]
- vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
- vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
- vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
- vpxor ymm12,ymm12,YMMWORD PTR[128+rsi]
- vpxor ymm13,ymm13,YMMWORD PTR[160+rsi]
- vpxor ymm10,ymm10,YMMWORD PTR[192+rsi]
- vpxor ymm15,ymm15,YMMWORD PTR[224+rsi]
- vpxor ymm14,ymm14,YMMWORD PTR[256+rsi]
- vpxor ymm2,ymm2,YMMWORD PTR[288+rsi]
- vpxor ymm3,ymm3,YMMWORD PTR[320+rsi]
- vpxor ymm7,ymm7,YMMWORD PTR[352+rsi]
- vpxor ymm11,ymm11,YMMWORD PTR[384+rsi]
- vpxor ymm9,ymm9,YMMWORD PTR[416+rsi]
- vmovdqu YMMWORD PTR[rdi],ymm6
- vmovdqu YMMWORD PTR[32+rdi],ymm8
- vmovdqu YMMWORD PTR[64+rdi],ymm1
- vmovdqu YMMWORD PTR[96+rdi],ymm5
- vmovdqu YMMWORD PTR[128+rdi],ymm12
- vmovdqu YMMWORD PTR[160+rdi],ymm13
- vmovdqu YMMWORD PTR[192+rdi],ymm10
- vmovdqu YMMWORD PTR[224+rdi],ymm15
- vmovdqu YMMWORD PTR[256+rdi],ymm14
- vmovdqu YMMWORD PTR[288+rdi],ymm2
- vmovdqu YMMWORD PTR[320+rdi],ymm3
- vmovdqu YMMWORD PTR[352+rdi],ymm7
- vmovdqu YMMWORD PTR[384+rdi],ymm11
- vmovdqu YMMWORD PTR[416+rdi],ymm9
- je $L$done8x
-
- lea rsi,QWORD PTR[448+rsi]
- xor r10,r10
- vmovdqa YMMWORD PTR[rsp],ymm0
- lea rdi,QWORD PTR[448+rdi]
- sub rdx,448
- vmovdqa YMMWORD PTR[32+rsp],ymm4
-
-$L$oop_tail8x::
- movzx eax,BYTE PTR[r10*1+rsi]
- movzx ecx,BYTE PTR[r10*1+rsp]
- lea r10,QWORD PTR[1+r10]
- xor eax,ecx
- mov BYTE PTR[((-1))+r10*1+rdi],al
- dec rdx
- jnz $L$oop_tail8x
-
-$L$done8x::
- vzeroall
- movaps xmm6,XMMWORD PTR[((-168))+r9]
- movaps xmm7,XMMWORD PTR[((-152))+r9]
- movaps xmm8,XMMWORD PTR[((-136))+r9]
- movaps xmm9,XMMWORD PTR[((-120))+r9]
- movaps xmm10,XMMWORD PTR[((-104))+r9]
- movaps xmm11,XMMWORD PTR[((-88))+r9]
- movaps xmm12,XMMWORD PTR[((-72))+r9]
- movaps xmm13,XMMWORD PTR[((-56))+r9]
- movaps xmm14,XMMWORD PTR[((-40))+r9]
- movaps xmm15,XMMWORD PTR[((-24))+r9]
- lea rsp,QWORD PTR[r9]
-
-$L$8x_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ChaCha20_8x::
-ChaCha20_8x ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- lea r10,QWORD PTR[$L$ctr32_body]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- lea r10,QWORD PTR[$L$no_data]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- lea rax,QWORD PTR[((64+24+48))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-
-ALIGN 16
-simd_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[192+r8]
-
- mov r10d,DWORD PTR[4+r11]
- mov ecx,DWORD PTR[8+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- neg rcx
- lea rsi,QWORD PTR[((-8))+rcx*1+rax]
- lea rdi,QWORD PTR[512+r8]
- neg ecx
- shr ecx,3
- DD 0a548f3fch
-
- jmp $L$common_seh_tail
-simd_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_ChaCha20_ctr32
- DD imagerel $L$SEH_end_ChaCha20_ctr32
- DD imagerel $L$SEH_info_ChaCha20_ctr32
-
- DD imagerel $L$SEH_begin_ChaCha20_ssse3
- DD imagerel $L$SEH_end_ChaCha20_ssse3
- DD imagerel $L$SEH_info_ChaCha20_ssse3
-
- DD imagerel $L$SEH_begin_ChaCha20_128
- DD imagerel $L$SEH_end_ChaCha20_128
- DD imagerel $L$SEH_info_ChaCha20_128
-
- DD imagerel $L$SEH_begin_ChaCha20_4x
- DD imagerel $L$SEH_end_ChaCha20_4x
- DD imagerel $L$SEH_info_ChaCha20_4x
- DD imagerel $L$SEH_begin_ChaCha20_4xop
- DD imagerel $L$SEH_end_ChaCha20_4xop
- DD imagerel $L$SEH_info_ChaCha20_4xop
- DD imagerel $L$SEH_begin_ChaCha20_8x
- DD imagerel $L$SEH_end_ChaCha20_8x
- DD imagerel $L$SEH_info_ChaCha20_8x
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_ChaCha20_ctr32::
-DB 9,0,0,0
- DD imagerel se_handler
-
-$L$SEH_info_ChaCha20_ssse3::
-DB 9,0,0,0
- DD imagerel simd_handler
- DD imagerel $L$ssse3_body,imagerel $L$ssse3_epilogue
- DD 020h,0
-
-$L$SEH_info_ChaCha20_128::
-DB 9,0,0,0
- DD imagerel simd_handler
- DD imagerel $L$128_body,imagerel $L$128_epilogue
- DD 060h,0
-
-$L$SEH_info_ChaCha20_4x::
-DB 9,0,0,0
- DD imagerel simd_handler
- DD imagerel $L$4x_body,imagerel $L$4x_epilogue
- DD 0a0h,0
-$L$SEH_info_ChaCha20_4xop::
-DB 9,0,0,0
- DD imagerel simd_handler
- DD imagerel $L$4xop_body,imagerel $L$4xop_epilogue
- DD 0a0h,0
-$L$SEH_info_ChaCha20_8x::
-DB 9,0,0,0
- DD imagerel simd_handler
- DD imagerel $L$8x_body,imagerel $L$8x_epilogue
- DD 0a0h,0
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+ALIGN 64
+$L$zero::
+ DD 0,0,0,0
+$L$one::
+ DD 1,0,0,0
+$L$inc::
+ DD 0,1,2,3
+$L$four::
+ DD 4,4,4,4
+$L$incy::
+ DD 0,2,4,6,1,3,5,7
+$L$eight::
+ DD 8,8,8,8,8,8,8,8
+$L$rot16::
+DB 02h,03h,00h,01h,06h,07h,04h,05h,0ah,0bh,08h,09h,0eh,0fh,0ch,0dh
+$L$rot24::
+DB 03h,00h,01h,02h,07h,04h,05h,06h,0bh,08h,09h,0ah,0fh,0ch,0dh,0eh
+$L$twoy::
+ DD 2,0,0,0,2,0,0,0
+ALIGN 64
+$L$zeroz::
+ DD 0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0
+$L$fourz::
+ DD 4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0
+$L$incz::
+ DD 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
+$L$sixteen::
+ DD 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16
+$L$sigma::
+DB 101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107
+DB 0
+DB 67,104,97,67,104,97,50,48,32,102,111,114,32,120,56,54
+DB 95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32
+DB 98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115
+DB 108,46,111,114,103,62,0
+PUBLIC ChaCha20_ctr32
+
+ALIGN 64
+ChaCha20_ctr32 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ChaCha20_ctr32::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+ cmp rdx,0
+ je $L$no_data
+ mov r10,QWORD PTR[((OPENSSL_ia32cap_P+4))]
+ test r10d,512
+ jnz $L$ChaCha20_ssse3
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,64+24
+
+$L$ctr32_body::
+
+
+ movdqu xmm1,XMMWORD PTR[rcx]
+ movdqu xmm2,XMMWORD PTR[16+rcx]
+ movdqu xmm3,XMMWORD PTR[r8]
+ movdqa xmm4,XMMWORD PTR[$L$one]
+
+
+ movdqa XMMWORD PTR[16+rsp],xmm1
+ movdqa XMMWORD PTR[32+rsp],xmm2
+ movdqa XMMWORD PTR[48+rsp],xmm3
+ mov rbp,rdx
+ jmp $L$oop_outer
+
+ALIGN 32
+$L$oop_outer::
+ mov eax,061707865h
+ mov ebx,03320646eh
+ mov ecx,079622d32h
+ mov edx,06b206574h
+ mov r8d,DWORD PTR[16+rsp]
+ mov r9d,DWORD PTR[20+rsp]
+ mov r10d,DWORD PTR[24+rsp]
+ mov r11d,DWORD PTR[28+rsp]
+ movd r12d,xmm3
+ mov r13d,DWORD PTR[52+rsp]
+ mov r14d,DWORD PTR[56+rsp]
+ mov r15d,DWORD PTR[60+rsp]
+
+ mov QWORD PTR[((64+0))+rsp],rbp
+ mov ebp,10
+ mov QWORD PTR[((64+8))+rsp],rsi
+DB 102,72,15,126,214
+ mov QWORD PTR[((64+16))+rsp],rdi
+ mov rdi,rsi
+ shr rdi,32
+ jmp $L$oop
+
+ALIGN 32
+$L$oop::
+ add eax,r8d
+ xor r12d,eax
+ rol r12d,16
+ add ebx,r9d
+ xor r13d,ebx
+ rol r13d,16
+ add esi,r12d
+ xor r8d,esi
+ rol r8d,12
+ add edi,r13d
+ xor r9d,edi
+ rol r9d,12
+ add eax,r8d
+ xor r12d,eax
+ rol r12d,8
+ add ebx,r9d
+ xor r13d,ebx
+ rol r13d,8
+ add esi,r12d
+ xor r8d,esi
+ rol r8d,7
+ add edi,r13d
+ xor r9d,edi
+ rol r9d,7
+ mov DWORD PTR[32+rsp],esi
+ mov DWORD PTR[36+rsp],edi
+ mov esi,DWORD PTR[40+rsp]
+ mov edi,DWORD PTR[44+rsp]
+ add ecx,r10d
+ xor r14d,ecx
+ rol r14d,16
+ add edx,r11d
+ xor r15d,edx
+ rol r15d,16
+ add esi,r14d
+ xor r10d,esi
+ rol r10d,12
+ add edi,r15d
+ xor r11d,edi
+ rol r11d,12
+ add ecx,r10d
+ xor r14d,ecx
+ rol r14d,8
+ add edx,r11d
+ xor r15d,edx
+ rol r15d,8
+ add esi,r14d
+ xor r10d,esi
+ rol r10d,7
+ add edi,r15d
+ xor r11d,edi
+ rol r11d,7
+ add eax,r9d
+ xor r15d,eax
+ rol r15d,16
+ add ebx,r10d
+ xor r12d,ebx
+ rol r12d,16
+ add esi,r15d
+ xor r9d,esi
+ rol r9d,12
+ add edi,r12d
+ xor r10d,edi
+ rol r10d,12
+ add eax,r9d
+ xor r15d,eax
+ rol r15d,8
+ add ebx,r10d
+ xor r12d,ebx
+ rol r12d,8
+ add esi,r15d
+ xor r9d,esi
+ rol r9d,7
+ add edi,r12d
+ xor r10d,edi
+ rol r10d,7
+ mov DWORD PTR[40+rsp],esi
+ mov DWORD PTR[44+rsp],edi
+ mov esi,DWORD PTR[32+rsp]
+ mov edi,DWORD PTR[36+rsp]
+ add ecx,r11d
+ xor r13d,ecx
+ rol r13d,16
+ add edx,r8d
+ xor r14d,edx
+ rol r14d,16
+ add esi,r13d
+ xor r11d,esi
+ rol r11d,12
+ add edi,r14d
+ xor r8d,edi
+ rol r8d,12
+ add ecx,r11d
+ xor r13d,ecx
+ rol r13d,8
+ add edx,r8d
+ xor r14d,edx
+ rol r14d,8
+ add esi,r13d
+ xor r11d,esi
+ rol r11d,7
+ add edi,r14d
+ xor r8d,edi
+ rol r8d,7
+ dec ebp
+ jnz $L$oop
+ mov DWORD PTR[36+rsp],edi
+ mov DWORD PTR[32+rsp],esi
+ mov rbp,QWORD PTR[64+rsp]
+ movdqa xmm1,xmm2
+ mov rsi,QWORD PTR[((64+8))+rsp]
+ paddd xmm3,xmm4
+ mov rdi,QWORD PTR[((64+16))+rsp]
+
+ add eax,061707865h
+ add ebx,03320646eh
+ add ecx,079622d32h
+ add edx,06b206574h
+ add r8d,DWORD PTR[16+rsp]
+ add r9d,DWORD PTR[20+rsp]
+ add r10d,DWORD PTR[24+rsp]
+ add r11d,DWORD PTR[28+rsp]
+ add r12d,DWORD PTR[48+rsp]
+ add r13d,DWORD PTR[52+rsp]
+ add r14d,DWORD PTR[56+rsp]
+ add r15d,DWORD PTR[60+rsp]
+ paddd xmm1,XMMWORD PTR[32+rsp]
+
+ cmp rbp,64
+ jb $L$tail
+
+ xor eax,DWORD PTR[rsi]
+ xor ebx,DWORD PTR[4+rsi]
+ xor ecx,DWORD PTR[8+rsi]
+ xor edx,DWORD PTR[12+rsi]
+ xor r8d,DWORD PTR[16+rsi]
+ xor r9d,DWORD PTR[20+rsi]
+ xor r10d,DWORD PTR[24+rsi]
+ xor r11d,DWORD PTR[28+rsi]
+ movdqu xmm0,XMMWORD PTR[32+rsi]
+ xor r12d,DWORD PTR[48+rsi]
+ xor r13d,DWORD PTR[52+rsi]
+ xor r14d,DWORD PTR[56+rsi]
+ xor r15d,DWORD PTR[60+rsi]
+ lea rsi,QWORD PTR[64+rsi]
+ pxor xmm0,xmm1
+
+ movdqa XMMWORD PTR[32+rsp],xmm2
+ movd DWORD PTR[48+rsp],xmm3
+
+ mov DWORD PTR[rdi],eax
+ mov DWORD PTR[4+rdi],ebx
+ mov DWORD PTR[8+rdi],ecx
+ mov DWORD PTR[12+rdi],edx
+ mov DWORD PTR[16+rdi],r8d
+ mov DWORD PTR[20+rdi],r9d
+ mov DWORD PTR[24+rdi],r10d
+ mov DWORD PTR[28+rdi],r11d
+ movdqu XMMWORD PTR[32+rdi],xmm0
+ mov DWORD PTR[48+rdi],r12d
+ mov DWORD PTR[52+rdi],r13d
+ mov DWORD PTR[56+rdi],r14d
+ mov DWORD PTR[60+rdi],r15d
+ lea rdi,QWORD PTR[64+rdi]
+
+ sub rbp,64
+ jnz $L$oop_outer
+
+ jmp $L$done
+
+ALIGN 16
+$L$tail::
+ mov DWORD PTR[rsp],eax
+ mov DWORD PTR[4+rsp],ebx
+ xor rbx,rbx
+ mov DWORD PTR[8+rsp],ecx
+ mov DWORD PTR[12+rsp],edx
+ mov DWORD PTR[16+rsp],r8d
+ mov DWORD PTR[20+rsp],r9d
+ mov DWORD PTR[24+rsp],r10d
+ mov DWORD PTR[28+rsp],r11d
+ movdqa XMMWORD PTR[32+rsp],xmm1
+ mov DWORD PTR[48+rsp],r12d
+ mov DWORD PTR[52+rsp],r13d
+ mov DWORD PTR[56+rsp],r14d
+ mov DWORD PTR[60+rsp],r15d
+
+$L$oop_tail::
+ movzx eax,BYTE PTR[rbx*1+rsi]
+ movzx edx,BYTE PTR[rbx*1+rsp]
+ lea rbx,QWORD PTR[1+rbx]
+ xor eax,edx
+ mov BYTE PTR[((-1))+rbx*1+rdi],al
+ dec rbp
+ jnz $L$oop_tail
+
+$L$done::
+ lea rsi,QWORD PTR[((64+24+48))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$no_data::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ChaCha20_ctr32::
+ChaCha20_ctr32 ENDP
+
+ALIGN 32
+ChaCha20_ssse3 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ChaCha20_ssse3::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+$L$ChaCha20_ssse3::
+ mov r9,rsp
+
+ test r10d,2048
+ jnz $L$ChaCha20_4xop
+ cmp rdx,128
+ je $L$ChaCha20_128
+ ja $L$ChaCha20_4x
+
+$L$do_sse3_after_all::
+ sub rsp,64+168
+ movaps XMMWORD PTR[(-40)+r9],xmm6
+ movaps XMMWORD PTR[(-24)+r9],xmm7
+$L$ssse3_body::
+ movdqa xmm0,XMMWORD PTR[$L$sigma]
+ movdqu xmm1,XMMWORD PTR[rcx]
+ movdqu xmm2,XMMWORD PTR[16+rcx]
+ movdqu xmm3,XMMWORD PTR[r8]
+ movdqa xmm6,XMMWORD PTR[$L$rot16]
+ movdqa xmm7,XMMWORD PTR[$L$rot24]
+
+ movdqa XMMWORD PTR[rsp],xmm0
+ movdqa XMMWORD PTR[16+rsp],xmm1
+ movdqa XMMWORD PTR[32+rsp],xmm2
+ movdqa XMMWORD PTR[48+rsp],xmm3
+ mov r8,10
+ jmp $L$oop_ssse3
+
+ALIGN 32
+$L$oop_outer_ssse3::
+ movdqa xmm3,XMMWORD PTR[$L$one]
+ movdqa xmm0,XMMWORD PTR[rsp]
+ movdqa xmm1,XMMWORD PTR[16+rsp]
+ movdqa xmm2,XMMWORD PTR[32+rsp]
+ paddd xmm3,XMMWORD PTR[48+rsp]
+ mov r8,10
+ movdqa XMMWORD PTR[48+rsp],xmm3
+ jmp $L$oop_ssse3
+
+ALIGN 32
+$L$oop_ssse3::
+ paddd xmm0,xmm1
+ pxor xmm3,xmm0
+DB 102,15,56,0,222
+ paddd xmm2,xmm3
+ pxor xmm1,xmm2
+ movdqa xmm4,xmm1
+ psrld xmm1,20
+ pslld xmm4,12
+ por xmm1,xmm4
+ paddd xmm0,xmm1
+ pxor xmm3,xmm0
+DB 102,15,56,0,223
+ paddd xmm2,xmm3
+ pxor xmm1,xmm2
+ movdqa xmm4,xmm1
+ psrld xmm1,25
+ pslld xmm4,7
+ por xmm1,xmm4
+ pshufd xmm2,xmm2,78
+ pshufd xmm1,xmm1,57
+ pshufd xmm3,xmm3,147
+ nop
+ paddd xmm0,xmm1
+ pxor xmm3,xmm0
+DB 102,15,56,0,222
+ paddd xmm2,xmm3
+ pxor xmm1,xmm2
+ movdqa xmm4,xmm1
+ psrld xmm1,20
+ pslld xmm4,12
+ por xmm1,xmm4
+ paddd xmm0,xmm1
+ pxor xmm3,xmm0
+DB 102,15,56,0,223
+ paddd xmm2,xmm3
+ pxor xmm1,xmm2
+ movdqa xmm4,xmm1
+ psrld xmm1,25
+ pslld xmm4,7
+ por xmm1,xmm4
+ pshufd xmm2,xmm2,78
+ pshufd xmm1,xmm1,147
+ pshufd xmm3,xmm3,57
+ dec r8
+ jnz $L$oop_ssse3
+ paddd xmm0,XMMWORD PTR[rsp]
+ paddd xmm1,XMMWORD PTR[16+rsp]
+ paddd xmm2,XMMWORD PTR[32+rsp]
+ paddd xmm3,XMMWORD PTR[48+rsp]
+
+ cmp rdx,64
+ jb $L$tail_ssse3
+
+ movdqu xmm4,XMMWORD PTR[rsi]
+ movdqu xmm5,XMMWORD PTR[16+rsi]
+ pxor xmm0,xmm4
+ movdqu xmm4,XMMWORD PTR[32+rsi]
+ pxor xmm1,xmm5
+ movdqu xmm5,XMMWORD PTR[48+rsi]
+ lea rsi,QWORD PTR[64+rsi]
+ pxor xmm2,xmm4
+ pxor xmm3,xmm5
+
+ movdqu XMMWORD PTR[rdi],xmm0
+ movdqu XMMWORD PTR[16+rdi],xmm1
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu XMMWORD PTR[48+rdi],xmm3
+ lea rdi,QWORD PTR[64+rdi]
+
+ sub rdx,64
+ jnz $L$oop_outer_ssse3
+
+ jmp $L$done_ssse3
+
+ALIGN 16
+$L$tail_ssse3::
+ movdqa XMMWORD PTR[rsp],xmm0
+ movdqa XMMWORD PTR[16+rsp],xmm1
+ movdqa XMMWORD PTR[32+rsp],xmm2
+ movdqa XMMWORD PTR[48+rsp],xmm3
+ xor r8,r8
+
+$L$oop_tail_ssse3::
+ movzx eax,BYTE PTR[r8*1+rsi]
+ movzx ecx,BYTE PTR[r8*1+rsp]
+ lea r8,QWORD PTR[1+r8]
+ xor eax,ecx
+ mov BYTE PTR[((-1))+r8*1+rdi],al
+ dec rdx
+ jnz $L$oop_tail_ssse3
+
+$L$done_ssse3::
+ movaps xmm6,XMMWORD PTR[((-40))+r9]
+ movaps xmm7,XMMWORD PTR[((-24))+r9]
+ lea rsp,QWORD PTR[r9]
+
+$L$ssse3_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ChaCha20_ssse3::
+ChaCha20_ssse3 ENDP
+
+ALIGN 32
+ChaCha20_128 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ChaCha20_128::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+$L$ChaCha20_128::
+ mov r9,rsp
+
+ sub rsp,64+104
+ movaps XMMWORD PTR[(-104)+r9],xmm6
+ movaps XMMWORD PTR[(-88)+r9],xmm7
+ movaps XMMWORD PTR[(-72)+r9],xmm8
+ movaps XMMWORD PTR[(-56)+r9],xmm9
+ movaps XMMWORD PTR[(-40)+r9],xmm10
+ movaps XMMWORD PTR[(-24)+r9],xmm11
+$L$128_body::
+ movdqa xmm8,XMMWORD PTR[$L$sigma]
+ movdqu xmm9,XMMWORD PTR[rcx]
+ movdqu xmm2,XMMWORD PTR[16+rcx]
+ movdqu xmm3,XMMWORD PTR[r8]
+ movdqa xmm1,XMMWORD PTR[$L$one]
+ movdqa xmm6,XMMWORD PTR[$L$rot16]
+ movdqa xmm7,XMMWORD PTR[$L$rot24]
+
+ movdqa xmm10,xmm8
+ movdqa XMMWORD PTR[rsp],xmm8
+ movdqa xmm11,xmm9
+ movdqa XMMWORD PTR[16+rsp],xmm9
+ movdqa xmm0,xmm2
+ movdqa XMMWORD PTR[32+rsp],xmm2
+ paddd xmm1,xmm3
+ movdqa XMMWORD PTR[48+rsp],xmm3
+ mov r8,10
+ jmp $L$oop_128
+
+ALIGN 32
+$L$oop_128::
+ paddd xmm8,xmm9
+ pxor xmm3,xmm8
+ paddd xmm10,xmm11
+ pxor xmm1,xmm10
+DB 102,15,56,0,222
+DB 102,15,56,0,206
+ paddd xmm2,xmm3
+ paddd xmm0,xmm1
+ pxor xmm9,xmm2
+ pxor xmm11,xmm0
+ movdqa xmm4,xmm9
+ psrld xmm9,20
+ movdqa xmm5,xmm11
+ pslld xmm4,12
+ psrld xmm11,20
+ por xmm9,xmm4
+ pslld xmm5,12
+ por xmm11,xmm5
+ paddd xmm8,xmm9
+ pxor xmm3,xmm8
+ paddd xmm10,xmm11
+ pxor xmm1,xmm10
+DB 102,15,56,0,223
+DB 102,15,56,0,207
+ paddd xmm2,xmm3
+ paddd xmm0,xmm1
+ pxor xmm9,xmm2
+ pxor xmm11,xmm0
+ movdqa xmm4,xmm9
+ psrld xmm9,25
+ movdqa xmm5,xmm11
+ pslld xmm4,7
+ psrld xmm11,25
+ por xmm9,xmm4
+ pslld xmm5,7
+ por xmm11,xmm5
+ pshufd xmm2,xmm2,78
+ pshufd xmm9,xmm9,57
+ pshufd xmm3,xmm3,147
+ pshufd xmm0,xmm0,78
+ pshufd xmm11,xmm11,57
+ pshufd xmm1,xmm1,147
+ paddd xmm8,xmm9
+ pxor xmm3,xmm8
+ paddd xmm10,xmm11
+ pxor xmm1,xmm10
+DB 102,15,56,0,222
+DB 102,15,56,0,206
+ paddd xmm2,xmm3
+ paddd xmm0,xmm1
+ pxor xmm9,xmm2
+ pxor xmm11,xmm0
+ movdqa xmm4,xmm9
+ psrld xmm9,20
+ movdqa xmm5,xmm11
+ pslld xmm4,12
+ psrld xmm11,20
+ por xmm9,xmm4
+ pslld xmm5,12
+ por xmm11,xmm5
+ paddd xmm8,xmm9
+ pxor xmm3,xmm8
+ paddd xmm10,xmm11
+ pxor xmm1,xmm10
+DB 102,15,56,0,223
+DB 102,15,56,0,207
+ paddd xmm2,xmm3
+ paddd xmm0,xmm1
+ pxor xmm9,xmm2
+ pxor xmm11,xmm0
+ movdqa xmm4,xmm9
+ psrld xmm9,25
+ movdqa xmm5,xmm11
+ pslld xmm4,7
+ psrld xmm11,25
+ por xmm9,xmm4
+ pslld xmm5,7
+ por xmm11,xmm5
+ pshufd xmm2,xmm2,78
+ pshufd xmm9,xmm9,147
+ pshufd xmm3,xmm3,57
+ pshufd xmm0,xmm0,78
+ pshufd xmm11,xmm11,147
+ pshufd xmm1,xmm1,57
+ dec r8
+ jnz $L$oop_128
+ paddd xmm8,XMMWORD PTR[rsp]
+ paddd xmm9,XMMWORD PTR[16+rsp]
+ paddd xmm2,XMMWORD PTR[32+rsp]
+ paddd xmm3,XMMWORD PTR[48+rsp]
+ paddd xmm1,XMMWORD PTR[$L$one]
+ paddd xmm10,XMMWORD PTR[rsp]
+ paddd xmm11,XMMWORD PTR[16+rsp]
+ paddd xmm0,XMMWORD PTR[32+rsp]
+ paddd xmm1,XMMWORD PTR[48+rsp]
+
+ movdqu xmm4,XMMWORD PTR[rsi]
+ movdqu xmm5,XMMWORD PTR[16+rsi]
+ pxor xmm8,xmm4
+ movdqu xmm4,XMMWORD PTR[32+rsi]
+ pxor xmm9,xmm5
+ movdqu xmm5,XMMWORD PTR[48+rsi]
+ pxor xmm2,xmm4
+ movdqu xmm4,XMMWORD PTR[64+rsi]
+ pxor xmm3,xmm5
+ movdqu xmm5,XMMWORD PTR[80+rsi]
+ pxor xmm10,xmm4
+ movdqu xmm4,XMMWORD PTR[96+rsi]
+ pxor xmm11,xmm5
+ movdqu xmm5,XMMWORD PTR[112+rsi]
+ pxor xmm0,xmm4
+ pxor xmm1,xmm5
+
+ movdqu XMMWORD PTR[rdi],xmm8
+ movdqu XMMWORD PTR[16+rdi],xmm9
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu XMMWORD PTR[48+rdi],xmm3
+ movdqu XMMWORD PTR[64+rdi],xmm10
+ movdqu XMMWORD PTR[80+rdi],xmm11
+ movdqu XMMWORD PTR[96+rdi],xmm0
+ movdqu XMMWORD PTR[112+rdi],xmm1
+ movaps xmm6,XMMWORD PTR[((-104))+r9]
+ movaps xmm7,XMMWORD PTR[((-88))+r9]
+ movaps xmm8,XMMWORD PTR[((-72))+r9]
+ movaps xmm9,XMMWORD PTR[((-56))+r9]
+ movaps xmm10,XMMWORD PTR[((-40))+r9]
+ movaps xmm11,XMMWORD PTR[((-24))+r9]
+ lea rsp,QWORD PTR[r9]
+
+$L$128_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ChaCha20_128::
+ChaCha20_128 ENDP
+
+ALIGN 32
+ChaCha20_4x PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ChaCha20_4x::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+$L$ChaCha20_4x::
+ mov r9,rsp
+
+ mov r11,r10
+ shr r10,32
+ test r10,32
+ jnz $L$ChaCha20_8x
+ cmp rdx,192
+ ja $L$proceed4x
+
+ and r11,71303168
+ cmp r11,4194304
+ je $L$do_sse3_after_all
+
+$L$proceed4x::
+ sub rsp,0140h+168
+ movaps XMMWORD PTR[(-168)+r9],xmm6
+ movaps XMMWORD PTR[(-152)+r9],xmm7
+ movaps XMMWORD PTR[(-136)+r9],xmm8
+ movaps XMMWORD PTR[(-120)+r9],xmm9
+ movaps XMMWORD PTR[(-104)+r9],xmm10
+ movaps XMMWORD PTR[(-88)+r9],xmm11
+ movaps XMMWORD PTR[(-72)+r9],xmm12
+ movaps XMMWORD PTR[(-56)+r9],xmm13
+ movaps XMMWORD PTR[(-40)+r9],xmm14
+ movaps XMMWORD PTR[(-24)+r9],xmm15
+$L$4x_body::
+ movdqa xmm11,XMMWORD PTR[$L$sigma]
+ movdqu xmm15,XMMWORD PTR[rcx]
+ movdqu xmm7,XMMWORD PTR[16+rcx]
+ movdqu xmm3,XMMWORD PTR[r8]
+ lea rcx,QWORD PTR[256+rsp]
+ lea r10,QWORD PTR[$L$rot16]
+ lea r11,QWORD PTR[$L$rot24]
+
+ pshufd xmm8,xmm11,000h
+ pshufd xmm9,xmm11,055h
+ movdqa XMMWORD PTR[64+rsp],xmm8
+ pshufd xmm10,xmm11,0aah
+ movdqa XMMWORD PTR[80+rsp],xmm9
+ pshufd xmm11,xmm11,0ffh
+ movdqa XMMWORD PTR[96+rsp],xmm10
+ movdqa XMMWORD PTR[112+rsp],xmm11
+
+ pshufd xmm12,xmm15,000h
+ pshufd xmm13,xmm15,055h
+ movdqa XMMWORD PTR[(128-256)+rcx],xmm12
+ pshufd xmm14,xmm15,0aah
+ movdqa XMMWORD PTR[(144-256)+rcx],xmm13
+ pshufd xmm15,xmm15,0ffh
+ movdqa XMMWORD PTR[(160-256)+rcx],xmm14
+ movdqa XMMWORD PTR[(176-256)+rcx],xmm15
+
+ pshufd xmm4,xmm7,000h
+ pshufd xmm5,xmm7,055h
+ movdqa XMMWORD PTR[(192-256)+rcx],xmm4
+ pshufd xmm6,xmm7,0aah
+ movdqa XMMWORD PTR[(208-256)+rcx],xmm5
+ pshufd xmm7,xmm7,0ffh
+ movdqa XMMWORD PTR[(224-256)+rcx],xmm6
+ movdqa XMMWORD PTR[(240-256)+rcx],xmm7
+
+ pshufd xmm0,xmm3,000h
+ pshufd xmm1,xmm3,055h
+ paddd xmm0,XMMWORD PTR[$L$inc]
+ pshufd xmm2,xmm3,0aah
+ movdqa XMMWORD PTR[(272-256)+rcx],xmm1
+ pshufd xmm3,xmm3,0ffh
+ movdqa XMMWORD PTR[(288-256)+rcx],xmm2
+ movdqa XMMWORD PTR[(304-256)+rcx],xmm3
+
+ jmp $L$oop_enter4x
+
+ALIGN 32
+$L$oop_outer4x::
+ movdqa xmm8,XMMWORD PTR[64+rsp]
+ movdqa xmm9,XMMWORD PTR[80+rsp]
+ movdqa xmm10,XMMWORD PTR[96+rsp]
+ movdqa xmm11,XMMWORD PTR[112+rsp]
+ movdqa xmm12,XMMWORD PTR[((128-256))+rcx]
+ movdqa xmm13,XMMWORD PTR[((144-256))+rcx]
+ movdqa xmm14,XMMWORD PTR[((160-256))+rcx]
+ movdqa xmm15,XMMWORD PTR[((176-256))+rcx]
+ movdqa xmm4,XMMWORD PTR[((192-256))+rcx]
+ movdqa xmm5,XMMWORD PTR[((208-256))+rcx]
+ movdqa xmm6,XMMWORD PTR[((224-256))+rcx]
+ movdqa xmm7,XMMWORD PTR[((240-256))+rcx]
+ movdqa xmm0,XMMWORD PTR[((256-256))+rcx]
+ movdqa xmm1,XMMWORD PTR[((272-256))+rcx]
+ movdqa xmm2,XMMWORD PTR[((288-256))+rcx]
+ movdqa xmm3,XMMWORD PTR[((304-256))+rcx]
+ paddd xmm0,XMMWORD PTR[$L$four]
+
+$L$oop_enter4x::
+ movdqa XMMWORD PTR[32+rsp],xmm6
+ movdqa XMMWORD PTR[48+rsp],xmm7
+ movdqa xmm7,XMMWORD PTR[r10]
+ mov eax,10
+ movdqa XMMWORD PTR[(256-256)+rcx],xmm0
+ jmp $L$oop4x
+
+ALIGN 32
+$L$oop4x::
+ paddd xmm8,xmm12
+ paddd xmm9,xmm13
+ pxor xmm0,xmm8
+ pxor xmm1,xmm9
+DB 102,15,56,0,199
+DB 102,15,56,0,207
+ paddd xmm4,xmm0
+ paddd xmm5,xmm1
+ pxor xmm12,xmm4
+ pxor xmm13,xmm5
+ movdqa xmm6,xmm12
+ pslld xmm12,12
+ psrld xmm6,20
+ movdqa xmm7,xmm13
+ pslld xmm13,12
+ por xmm12,xmm6
+ psrld xmm7,20
+ movdqa xmm6,XMMWORD PTR[r11]
+ por xmm13,xmm7
+ paddd xmm8,xmm12
+ paddd xmm9,xmm13
+ pxor xmm0,xmm8
+ pxor xmm1,xmm9
+DB 102,15,56,0,198
+DB 102,15,56,0,206
+ paddd xmm4,xmm0
+ paddd xmm5,xmm1
+ pxor xmm12,xmm4
+ pxor xmm13,xmm5
+ movdqa xmm7,xmm12
+ pslld xmm12,7
+ psrld xmm7,25
+ movdqa xmm6,xmm13
+ pslld xmm13,7
+ por xmm12,xmm7
+ psrld xmm6,25
+ movdqa xmm7,XMMWORD PTR[r10]
+ por xmm13,xmm6
+ movdqa XMMWORD PTR[rsp],xmm4
+ movdqa XMMWORD PTR[16+rsp],xmm5
+ movdqa xmm4,XMMWORD PTR[32+rsp]
+ movdqa xmm5,XMMWORD PTR[48+rsp]
+ paddd xmm10,xmm14
+ paddd xmm11,xmm15
+ pxor xmm2,xmm10
+ pxor xmm3,xmm11
+DB 102,15,56,0,215
+DB 102,15,56,0,223
+ paddd xmm4,xmm2
+ paddd xmm5,xmm3
+ pxor xmm14,xmm4
+ pxor xmm15,xmm5
+ movdqa xmm6,xmm14
+ pslld xmm14,12
+ psrld xmm6,20
+ movdqa xmm7,xmm15
+ pslld xmm15,12
+ por xmm14,xmm6
+ psrld xmm7,20
+ movdqa xmm6,XMMWORD PTR[r11]
+ por xmm15,xmm7
+ paddd xmm10,xmm14
+ paddd xmm11,xmm15
+ pxor xmm2,xmm10
+ pxor xmm3,xmm11
+DB 102,15,56,0,214
+DB 102,15,56,0,222
+ paddd xmm4,xmm2
+ paddd xmm5,xmm3
+ pxor xmm14,xmm4
+ pxor xmm15,xmm5
+ movdqa xmm7,xmm14
+ pslld xmm14,7
+ psrld xmm7,25
+ movdqa xmm6,xmm15
+ pslld xmm15,7
+ por xmm14,xmm7
+ psrld xmm6,25
+ movdqa xmm7,XMMWORD PTR[r10]
+ por xmm15,xmm6
+ paddd xmm8,xmm13
+ paddd xmm9,xmm14
+ pxor xmm3,xmm8
+ pxor xmm0,xmm9
+DB 102,15,56,0,223
+DB 102,15,56,0,199
+ paddd xmm4,xmm3
+ paddd xmm5,xmm0
+ pxor xmm13,xmm4
+ pxor xmm14,xmm5
+ movdqa xmm6,xmm13
+ pslld xmm13,12
+ psrld xmm6,20
+ movdqa xmm7,xmm14
+ pslld xmm14,12
+ por xmm13,xmm6
+ psrld xmm7,20
+ movdqa xmm6,XMMWORD PTR[r11]
+ por xmm14,xmm7
+ paddd xmm8,xmm13
+ paddd xmm9,xmm14
+ pxor xmm3,xmm8
+ pxor xmm0,xmm9
+DB 102,15,56,0,222
+DB 102,15,56,0,198
+ paddd xmm4,xmm3
+ paddd xmm5,xmm0
+ pxor xmm13,xmm4
+ pxor xmm14,xmm5
+ movdqa xmm7,xmm13
+ pslld xmm13,7
+ psrld xmm7,25
+ movdqa xmm6,xmm14
+ pslld xmm14,7
+ por xmm13,xmm7
+ psrld xmm6,25
+ movdqa xmm7,XMMWORD PTR[r10]
+ por xmm14,xmm6
+ movdqa XMMWORD PTR[32+rsp],xmm4
+ movdqa XMMWORD PTR[48+rsp],xmm5
+ movdqa xmm4,XMMWORD PTR[rsp]
+ movdqa xmm5,XMMWORD PTR[16+rsp]
+ paddd xmm10,xmm15
+ paddd xmm11,xmm12
+ pxor xmm1,xmm10
+ pxor xmm2,xmm11
+DB 102,15,56,0,207
+DB 102,15,56,0,215
+ paddd xmm4,xmm1
+ paddd xmm5,xmm2
+ pxor xmm15,xmm4
+ pxor xmm12,xmm5
+ movdqa xmm6,xmm15
+ pslld xmm15,12
+ psrld xmm6,20
+ movdqa xmm7,xmm12
+ pslld xmm12,12
+ por xmm15,xmm6
+ psrld xmm7,20
+ movdqa xmm6,XMMWORD PTR[r11]
+ por xmm12,xmm7
+ paddd xmm10,xmm15
+ paddd xmm11,xmm12
+ pxor xmm1,xmm10
+ pxor xmm2,xmm11
+DB 102,15,56,0,206
+DB 102,15,56,0,214
+ paddd xmm4,xmm1
+ paddd xmm5,xmm2
+ pxor xmm15,xmm4
+ pxor xmm12,xmm5
+ movdqa xmm7,xmm15
+ pslld xmm15,7
+ psrld xmm7,25
+ movdqa xmm6,xmm12
+ pslld xmm12,7
+ por xmm15,xmm7
+ psrld xmm6,25
+ movdqa xmm7,XMMWORD PTR[r10]
+ por xmm12,xmm6
+ dec eax
+ jnz $L$oop4x
+
+ paddd xmm8,XMMWORD PTR[64+rsp]
+ paddd xmm9,XMMWORD PTR[80+rsp]
+ paddd xmm10,XMMWORD PTR[96+rsp]
+ paddd xmm11,XMMWORD PTR[112+rsp]
+
+ movdqa xmm6,xmm8
+ punpckldq xmm8,xmm9
+ movdqa xmm7,xmm10
+ punpckldq xmm10,xmm11
+ punpckhdq xmm6,xmm9
+ punpckhdq xmm7,xmm11
+ movdqa xmm9,xmm8
+ punpcklqdq xmm8,xmm10
+ movdqa xmm11,xmm6
+ punpcklqdq xmm6,xmm7
+ punpckhqdq xmm9,xmm10
+ punpckhqdq xmm11,xmm7
+ paddd xmm12,XMMWORD PTR[((128-256))+rcx]
+ paddd xmm13,XMMWORD PTR[((144-256))+rcx]
+ paddd xmm14,XMMWORD PTR[((160-256))+rcx]
+ paddd xmm15,XMMWORD PTR[((176-256))+rcx]
+
+ movdqa XMMWORD PTR[rsp],xmm8
+ movdqa XMMWORD PTR[16+rsp],xmm9
+ movdqa xmm8,XMMWORD PTR[32+rsp]
+ movdqa xmm9,XMMWORD PTR[48+rsp]
+
+ movdqa xmm10,xmm12
+ punpckldq xmm12,xmm13
+ movdqa xmm7,xmm14
+ punpckldq xmm14,xmm15
+ punpckhdq xmm10,xmm13
+ punpckhdq xmm7,xmm15
+ movdqa xmm13,xmm12
+ punpcklqdq xmm12,xmm14
+ movdqa xmm15,xmm10
+ punpcklqdq xmm10,xmm7
+ punpckhqdq xmm13,xmm14
+ punpckhqdq xmm15,xmm7
+ paddd xmm4,XMMWORD PTR[((192-256))+rcx]
+ paddd xmm5,XMMWORD PTR[((208-256))+rcx]
+ paddd xmm8,XMMWORD PTR[((224-256))+rcx]
+ paddd xmm9,XMMWORD PTR[((240-256))+rcx]
+
+ movdqa XMMWORD PTR[32+rsp],xmm6
+ movdqa XMMWORD PTR[48+rsp],xmm11
+
+ movdqa xmm14,xmm4
+ punpckldq xmm4,xmm5
+ movdqa xmm7,xmm8
+ punpckldq xmm8,xmm9
+ punpckhdq xmm14,xmm5
+ punpckhdq xmm7,xmm9
+ movdqa xmm5,xmm4
+ punpcklqdq xmm4,xmm8
+ movdqa xmm9,xmm14
+ punpcklqdq xmm14,xmm7
+ punpckhqdq xmm5,xmm8
+ punpckhqdq xmm9,xmm7
+ paddd xmm0,XMMWORD PTR[((256-256))+rcx]
+ paddd xmm1,XMMWORD PTR[((272-256))+rcx]
+ paddd xmm2,XMMWORD PTR[((288-256))+rcx]
+ paddd xmm3,XMMWORD PTR[((304-256))+rcx]
+
+ movdqa xmm8,xmm0
+ punpckldq xmm0,xmm1
+ movdqa xmm7,xmm2
+ punpckldq xmm2,xmm3
+ punpckhdq xmm8,xmm1
+ punpckhdq xmm7,xmm3
+ movdqa xmm1,xmm0
+ punpcklqdq xmm0,xmm2
+ movdqa xmm3,xmm8
+ punpcklqdq xmm8,xmm7
+ punpckhqdq xmm1,xmm2
+ punpckhqdq xmm3,xmm7
+ cmp rdx,64*4
+ jb $L$tail4x
+
+ movdqu xmm6,XMMWORD PTR[rsi]
+ movdqu xmm11,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ movdqu xmm7,XMMWORD PTR[48+rsi]
+ pxor xmm6,XMMWORD PTR[rsp]
+ pxor xmm11,xmm12
+ pxor xmm2,xmm4
+ pxor xmm7,xmm0
+
+ movdqu XMMWORD PTR[rdi],xmm6
+ movdqu xmm6,XMMWORD PTR[64+rsi]
+ movdqu XMMWORD PTR[16+rdi],xmm11
+ movdqu xmm11,XMMWORD PTR[80+rsi]
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu xmm2,XMMWORD PTR[96+rsi]
+ movdqu XMMWORD PTR[48+rdi],xmm7
+ movdqu xmm7,XMMWORD PTR[112+rsi]
+ lea rsi,QWORD PTR[128+rsi]
+ pxor xmm6,XMMWORD PTR[16+rsp]
+ pxor xmm11,xmm13
+ pxor xmm2,xmm5
+ pxor xmm7,xmm1
+
+ movdqu XMMWORD PTR[64+rdi],xmm6
+ movdqu xmm6,XMMWORD PTR[rsi]
+ movdqu XMMWORD PTR[80+rdi],xmm11
+ movdqu xmm11,XMMWORD PTR[16+rsi]
+ movdqu XMMWORD PTR[96+rdi],xmm2
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ movdqu XMMWORD PTR[112+rdi],xmm7
+ lea rdi,QWORD PTR[128+rdi]
+ movdqu xmm7,XMMWORD PTR[48+rsi]
+ pxor xmm6,XMMWORD PTR[32+rsp]
+ pxor xmm11,xmm10
+ pxor xmm2,xmm14
+ pxor xmm7,xmm8
+
+ movdqu XMMWORD PTR[rdi],xmm6
+ movdqu xmm6,XMMWORD PTR[64+rsi]
+ movdqu XMMWORD PTR[16+rdi],xmm11
+ movdqu xmm11,XMMWORD PTR[80+rsi]
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu xmm2,XMMWORD PTR[96+rsi]
+ movdqu XMMWORD PTR[48+rdi],xmm7
+ movdqu xmm7,XMMWORD PTR[112+rsi]
+ lea rsi,QWORD PTR[128+rsi]
+ pxor xmm6,XMMWORD PTR[48+rsp]
+ pxor xmm11,xmm15
+ pxor xmm2,xmm9
+ pxor xmm7,xmm3
+ movdqu XMMWORD PTR[64+rdi],xmm6
+ movdqu XMMWORD PTR[80+rdi],xmm11
+ movdqu XMMWORD PTR[96+rdi],xmm2
+ movdqu XMMWORD PTR[112+rdi],xmm7
+ lea rdi,QWORD PTR[128+rdi]
+
+ sub rdx,64*4
+ jnz $L$oop_outer4x
+
+ jmp $L$done4x
+
+$L$tail4x::
+ cmp rdx,192
+ jae $L$192_or_more4x
+ cmp rdx,128
+ jae $L$128_or_more4x
+ cmp rdx,64
+ jae $L$64_or_more4x
+
+
+ xor r10,r10
+
+ movdqa XMMWORD PTR[16+rsp],xmm12
+ movdqa XMMWORD PTR[32+rsp],xmm4
+ movdqa XMMWORD PTR[48+rsp],xmm0
+ jmp $L$oop_tail4x
+
+ALIGN 32
+$L$64_or_more4x::
+ movdqu xmm6,XMMWORD PTR[rsi]
+ movdqu xmm11,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ movdqu xmm7,XMMWORD PTR[48+rsi]
+ pxor xmm6,XMMWORD PTR[rsp]
+ pxor xmm11,xmm12
+ pxor xmm2,xmm4
+ pxor xmm7,xmm0
+ movdqu XMMWORD PTR[rdi],xmm6
+ movdqu XMMWORD PTR[16+rdi],xmm11
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu XMMWORD PTR[48+rdi],xmm7
+ je $L$done4x
+
+ movdqa xmm6,XMMWORD PTR[16+rsp]
+ lea rsi,QWORD PTR[64+rsi]
+ xor r10,r10
+ movdqa XMMWORD PTR[rsp],xmm6
+ movdqa XMMWORD PTR[16+rsp],xmm13
+ lea rdi,QWORD PTR[64+rdi]
+ movdqa XMMWORD PTR[32+rsp],xmm5
+ sub rdx,64
+ movdqa XMMWORD PTR[48+rsp],xmm1
+ jmp $L$oop_tail4x
+
+ALIGN 32
+$L$128_or_more4x::
+ movdqu xmm6,XMMWORD PTR[rsi]
+ movdqu xmm11,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ movdqu xmm7,XMMWORD PTR[48+rsi]
+ pxor xmm6,XMMWORD PTR[rsp]
+ pxor xmm11,xmm12
+ pxor xmm2,xmm4
+ pxor xmm7,xmm0
+
+ movdqu XMMWORD PTR[rdi],xmm6
+ movdqu xmm6,XMMWORD PTR[64+rsi]
+ movdqu XMMWORD PTR[16+rdi],xmm11
+ movdqu xmm11,XMMWORD PTR[80+rsi]
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu xmm2,XMMWORD PTR[96+rsi]
+ movdqu XMMWORD PTR[48+rdi],xmm7
+ movdqu xmm7,XMMWORD PTR[112+rsi]
+ pxor xmm6,XMMWORD PTR[16+rsp]
+ pxor xmm11,xmm13
+ pxor xmm2,xmm5
+ pxor xmm7,xmm1
+ movdqu XMMWORD PTR[64+rdi],xmm6
+ movdqu XMMWORD PTR[80+rdi],xmm11
+ movdqu XMMWORD PTR[96+rdi],xmm2
+ movdqu XMMWORD PTR[112+rdi],xmm7
+ je $L$done4x
+
+ movdqa xmm6,XMMWORD PTR[32+rsp]
+ lea rsi,QWORD PTR[128+rsi]
+ xor r10,r10
+ movdqa XMMWORD PTR[rsp],xmm6
+ movdqa XMMWORD PTR[16+rsp],xmm10
+ lea rdi,QWORD PTR[128+rdi]
+ movdqa XMMWORD PTR[32+rsp],xmm14
+ sub rdx,128
+ movdqa XMMWORD PTR[48+rsp],xmm8
+ jmp $L$oop_tail4x
+
+ALIGN 32
+$L$192_or_more4x::
+ movdqu xmm6,XMMWORD PTR[rsi]
+ movdqu xmm11,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ movdqu xmm7,XMMWORD PTR[48+rsi]
+ pxor xmm6,XMMWORD PTR[rsp]
+ pxor xmm11,xmm12
+ pxor xmm2,xmm4
+ pxor xmm7,xmm0
+
+ movdqu XMMWORD PTR[rdi],xmm6
+ movdqu xmm6,XMMWORD PTR[64+rsi]
+ movdqu XMMWORD PTR[16+rdi],xmm11
+ movdqu xmm11,XMMWORD PTR[80+rsi]
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu xmm2,XMMWORD PTR[96+rsi]
+ movdqu XMMWORD PTR[48+rdi],xmm7
+ movdqu xmm7,XMMWORD PTR[112+rsi]
+ lea rsi,QWORD PTR[128+rsi]
+ pxor xmm6,XMMWORD PTR[16+rsp]
+ pxor xmm11,xmm13
+ pxor xmm2,xmm5
+ pxor xmm7,xmm1
+
+ movdqu XMMWORD PTR[64+rdi],xmm6
+ movdqu xmm6,XMMWORD PTR[rsi]
+ movdqu XMMWORD PTR[80+rdi],xmm11
+ movdqu xmm11,XMMWORD PTR[16+rsi]
+ movdqu XMMWORD PTR[96+rdi],xmm2
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ movdqu XMMWORD PTR[112+rdi],xmm7
+ lea rdi,QWORD PTR[128+rdi]
+ movdqu xmm7,XMMWORD PTR[48+rsi]
+ pxor xmm6,XMMWORD PTR[32+rsp]
+ pxor xmm11,xmm10
+ pxor xmm2,xmm14
+ pxor xmm7,xmm8
+ movdqu XMMWORD PTR[rdi],xmm6
+ movdqu XMMWORD PTR[16+rdi],xmm11
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu XMMWORD PTR[48+rdi],xmm7
+ je $L$done4x
+
+ movdqa xmm6,XMMWORD PTR[48+rsp]
+ lea rsi,QWORD PTR[64+rsi]
+ xor r10,r10
+ movdqa XMMWORD PTR[rsp],xmm6
+ movdqa XMMWORD PTR[16+rsp],xmm15
+ lea rdi,QWORD PTR[64+rdi]
+ movdqa XMMWORD PTR[32+rsp],xmm9
+ sub rdx,192
+ movdqa XMMWORD PTR[48+rsp],xmm3
+
+$L$oop_tail4x::
+ movzx eax,BYTE PTR[r10*1+rsi]
+ movzx ecx,BYTE PTR[r10*1+rsp]
+ lea r10,QWORD PTR[1+r10]
+ xor eax,ecx
+ mov BYTE PTR[((-1))+r10*1+rdi],al
+ dec rdx
+ jnz $L$oop_tail4x
+
+$L$done4x::
+ movaps xmm6,XMMWORD PTR[((-168))+r9]
+ movaps xmm7,XMMWORD PTR[((-152))+r9]
+ movaps xmm8,XMMWORD PTR[((-136))+r9]
+ movaps xmm9,XMMWORD PTR[((-120))+r9]
+ movaps xmm10,XMMWORD PTR[((-104))+r9]
+ movaps xmm11,XMMWORD PTR[((-88))+r9]
+ movaps xmm12,XMMWORD PTR[((-72))+r9]
+ movaps xmm13,XMMWORD PTR[((-56))+r9]
+ movaps xmm14,XMMWORD PTR[((-40))+r9]
+ movaps xmm15,XMMWORD PTR[((-24))+r9]
+ lea rsp,QWORD PTR[r9]
+
+$L$4x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ChaCha20_4x::
+ChaCha20_4x ENDP
+
+ALIGN 32
+ChaCha20_4xop PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ChaCha20_4xop::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+$L$ChaCha20_4xop::
+ mov r9,rsp
+
+ sub rsp,0140h+168
+ movaps XMMWORD PTR[(-168)+r9],xmm6
+ movaps XMMWORD PTR[(-152)+r9],xmm7
+ movaps XMMWORD PTR[(-136)+r9],xmm8
+ movaps XMMWORD PTR[(-120)+r9],xmm9
+ movaps XMMWORD PTR[(-104)+r9],xmm10
+ movaps XMMWORD PTR[(-88)+r9],xmm11
+ movaps XMMWORD PTR[(-72)+r9],xmm12
+ movaps XMMWORD PTR[(-56)+r9],xmm13
+ movaps XMMWORD PTR[(-40)+r9],xmm14
+ movaps XMMWORD PTR[(-24)+r9],xmm15
+$L$4xop_body::
+ vzeroupper
+
+ vmovdqa xmm11,XMMWORD PTR[$L$sigma]
+ vmovdqu xmm3,XMMWORD PTR[rcx]
+ vmovdqu xmm15,XMMWORD PTR[16+rcx]
+ vmovdqu xmm7,XMMWORD PTR[r8]
+ lea rcx,QWORD PTR[256+rsp]
+
+ vpshufd xmm8,xmm11,000h
+ vpshufd xmm9,xmm11,055h
+ vmovdqa XMMWORD PTR[64+rsp],xmm8
+ vpshufd xmm10,xmm11,0aah
+ vmovdqa XMMWORD PTR[80+rsp],xmm9
+ vpshufd xmm11,xmm11,0ffh
+ vmovdqa XMMWORD PTR[96+rsp],xmm10
+ vmovdqa XMMWORD PTR[112+rsp],xmm11
+
+ vpshufd xmm0,xmm3,000h
+ vpshufd xmm1,xmm3,055h
+ vmovdqa XMMWORD PTR[(128-256)+rcx],xmm0
+ vpshufd xmm2,xmm3,0aah
+ vmovdqa XMMWORD PTR[(144-256)+rcx],xmm1
+ vpshufd xmm3,xmm3,0ffh
+ vmovdqa XMMWORD PTR[(160-256)+rcx],xmm2
+ vmovdqa XMMWORD PTR[(176-256)+rcx],xmm3
+
+ vpshufd xmm12,xmm15,000h
+ vpshufd xmm13,xmm15,055h
+ vmovdqa XMMWORD PTR[(192-256)+rcx],xmm12
+ vpshufd xmm14,xmm15,0aah
+ vmovdqa XMMWORD PTR[(208-256)+rcx],xmm13
+ vpshufd xmm15,xmm15,0ffh
+ vmovdqa XMMWORD PTR[(224-256)+rcx],xmm14
+ vmovdqa XMMWORD PTR[(240-256)+rcx],xmm15
+
+ vpshufd xmm4,xmm7,000h
+ vpshufd xmm5,xmm7,055h
+ vpaddd xmm4,xmm4,XMMWORD PTR[$L$inc]
+ vpshufd xmm6,xmm7,0aah
+ vmovdqa XMMWORD PTR[(272-256)+rcx],xmm5
+ vpshufd xmm7,xmm7,0ffh
+ vmovdqa XMMWORD PTR[(288-256)+rcx],xmm6
+ vmovdqa XMMWORD PTR[(304-256)+rcx],xmm7
+
+ jmp $L$oop_enter4xop
+
+ALIGN 32
+$L$oop_outer4xop::
+ vmovdqa xmm8,XMMWORD PTR[64+rsp]
+ vmovdqa xmm9,XMMWORD PTR[80+rsp]
+ vmovdqa xmm10,XMMWORD PTR[96+rsp]
+ vmovdqa xmm11,XMMWORD PTR[112+rsp]
+ vmovdqa xmm0,XMMWORD PTR[((128-256))+rcx]
+ vmovdqa xmm1,XMMWORD PTR[((144-256))+rcx]
+ vmovdqa xmm2,XMMWORD PTR[((160-256))+rcx]
+ vmovdqa xmm3,XMMWORD PTR[((176-256))+rcx]
+ vmovdqa xmm12,XMMWORD PTR[((192-256))+rcx]
+ vmovdqa xmm13,XMMWORD PTR[((208-256))+rcx]
+ vmovdqa xmm14,XMMWORD PTR[((224-256))+rcx]
+ vmovdqa xmm15,XMMWORD PTR[((240-256))+rcx]
+ vmovdqa xmm4,XMMWORD PTR[((256-256))+rcx]
+ vmovdqa xmm5,XMMWORD PTR[((272-256))+rcx]
+ vmovdqa xmm6,XMMWORD PTR[((288-256))+rcx]
+ vmovdqa xmm7,XMMWORD PTR[((304-256))+rcx]
+ vpaddd xmm4,xmm4,XMMWORD PTR[$L$four]
+
+$L$oop_enter4xop::
+ mov eax,10
+ vmovdqa XMMWORD PTR[(256-256)+rcx],xmm4
+ jmp $L$oop4xop
+
+ALIGN 32
+$L$oop4xop::
+ vpaddd xmm8,xmm8,xmm0
+ vpaddd xmm9,xmm9,xmm1
+ vpaddd xmm10,xmm10,xmm2
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm8,xmm4
+ vpxor xmm5,xmm9,xmm5
+ vpxor xmm6,xmm10,xmm6
+ vpxor xmm7,xmm11,xmm7
+DB 143,232,120,194,228,16
+DB 143,232,120,194,237,16
+DB 143,232,120,194,246,16
+DB 143,232,120,194,255,16
+ vpaddd xmm12,xmm12,xmm4
+ vpaddd xmm13,xmm13,xmm5
+ vpaddd xmm14,xmm14,xmm6
+ vpaddd xmm15,xmm15,xmm7
+ vpxor xmm0,xmm12,xmm0
+ vpxor xmm1,xmm13,xmm1
+ vpxor xmm2,xmm2,xmm14
+ vpxor xmm3,xmm3,xmm15
+DB 143,232,120,194,192,12
+DB 143,232,120,194,201,12
+DB 143,232,120,194,210,12
+DB 143,232,120,194,219,12
+ vpaddd xmm8,xmm0,xmm8
+ vpaddd xmm9,xmm1,xmm9
+ vpaddd xmm10,xmm10,xmm2
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm8,xmm4
+ vpxor xmm5,xmm9,xmm5
+ vpxor xmm6,xmm10,xmm6
+ vpxor xmm7,xmm11,xmm7
+DB 143,232,120,194,228,8
+DB 143,232,120,194,237,8
+DB 143,232,120,194,246,8
+DB 143,232,120,194,255,8
+ vpaddd xmm12,xmm12,xmm4
+ vpaddd xmm13,xmm13,xmm5
+ vpaddd xmm14,xmm14,xmm6
+ vpaddd xmm15,xmm15,xmm7
+ vpxor xmm0,xmm12,xmm0
+ vpxor xmm1,xmm13,xmm1
+ vpxor xmm2,xmm2,xmm14
+ vpxor xmm3,xmm3,xmm15
+DB 143,232,120,194,192,7
+DB 143,232,120,194,201,7
+DB 143,232,120,194,210,7
+DB 143,232,120,194,219,7
+ vpaddd xmm8,xmm8,xmm1
+ vpaddd xmm9,xmm9,xmm2
+ vpaddd xmm10,xmm10,xmm3
+ vpaddd xmm11,xmm11,xmm0
+ vpxor xmm7,xmm8,xmm7
+ vpxor xmm4,xmm9,xmm4
+ vpxor xmm5,xmm10,xmm5
+ vpxor xmm6,xmm11,xmm6
+DB 143,232,120,194,255,16
+DB 143,232,120,194,228,16
+DB 143,232,120,194,237,16
+DB 143,232,120,194,246,16
+ vpaddd xmm14,xmm14,xmm7
+ vpaddd xmm15,xmm15,xmm4
+ vpaddd xmm12,xmm12,xmm5
+ vpaddd xmm13,xmm13,xmm6
+ vpxor xmm1,xmm14,xmm1
+ vpxor xmm2,xmm15,xmm2
+ vpxor xmm3,xmm3,xmm12
+ vpxor xmm0,xmm0,xmm13
+DB 143,232,120,194,201,12
+DB 143,232,120,194,210,12
+DB 143,232,120,194,219,12
+DB 143,232,120,194,192,12
+ vpaddd xmm8,xmm1,xmm8
+ vpaddd xmm9,xmm2,xmm9
+ vpaddd xmm10,xmm10,xmm3
+ vpaddd xmm11,xmm11,xmm0
+ vpxor xmm7,xmm8,xmm7
+ vpxor xmm4,xmm9,xmm4
+ vpxor xmm5,xmm10,xmm5
+ vpxor xmm6,xmm11,xmm6
+DB 143,232,120,194,255,8
+DB 143,232,120,194,228,8
+DB 143,232,120,194,237,8
+DB 143,232,120,194,246,8
+ vpaddd xmm14,xmm14,xmm7
+ vpaddd xmm15,xmm15,xmm4
+ vpaddd xmm12,xmm12,xmm5
+ vpaddd xmm13,xmm13,xmm6
+ vpxor xmm1,xmm14,xmm1
+ vpxor xmm2,xmm15,xmm2
+ vpxor xmm3,xmm3,xmm12
+ vpxor xmm0,xmm0,xmm13
+DB 143,232,120,194,201,7
+DB 143,232,120,194,210,7
+DB 143,232,120,194,219,7
+DB 143,232,120,194,192,7
+ dec eax
+ jnz $L$oop4xop
+
+ vpaddd xmm8,xmm8,XMMWORD PTR[64+rsp]
+ vpaddd xmm9,xmm9,XMMWORD PTR[80+rsp]
+ vpaddd xmm10,xmm10,XMMWORD PTR[96+rsp]
+ vpaddd xmm11,xmm11,XMMWORD PTR[112+rsp]
+
+ vmovdqa XMMWORD PTR[32+rsp],xmm14
+ vmovdqa XMMWORD PTR[48+rsp],xmm15
+
+ vpunpckldq xmm14,xmm8,xmm9
+ vpunpckldq xmm15,xmm10,xmm11
+ vpunpckhdq xmm8,xmm8,xmm9
+ vpunpckhdq xmm10,xmm10,xmm11
+ vpunpcklqdq xmm9,xmm14,xmm15
+ vpunpckhqdq xmm14,xmm14,xmm15
+ vpunpcklqdq xmm11,xmm8,xmm10
+ vpunpckhqdq xmm8,xmm8,xmm10
+ vpaddd xmm0,xmm0,XMMWORD PTR[((128-256))+rcx]
+ vpaddd xmm1,xmm1,XMMWORD PTR[((144-256))+rcx]
+ vpaddd xmm2,xmm2,XMMWORD PTR[((160-256))+rcx]
+ vpaddd xmm3,xmm3,XMMWORD PTR[((176-256))+rcx]
+
+ vmovdqa XMMWORD PTR[rsp],xmm9
+ vmovdqa XMMWORD PTR[16+rsp],xmm14
+ vmovdqa xmm9,XMMWORD PTR[32+rsp]
+ vmovdqa xmm14,XMMWORD PTR[48+rsp]
+
+ vpunpckldq xmm10,xmm0,xmm1
+ vpunpckldq xmm15,xmm2,xmm3
+ vpunpckhdq xmm0,xmm0,xmm1
+ vpunpckhdq xmm2,xmm2,xmm3
+ vpunpcklqdq xmm1,xmm10,xmm15
+ vpunpckhqdq xmm10,xmm10,xmm15
+ vpunpcklqdq xmm3,xmm0,xmm2
+ vpunpckhqdq xmm0,xmm0,xmm2
+ vpaddd xmm12,xmm12,XMMWORD PTR[((192-256))+rcx]
+ vpaddd xmm13,xmm13,XMMWORD PTR[((208-256))+rcx]
+ vpaddd xmm9,xmm9,XMMWORD PTR[((224-256))+rcx]
+ vpaddd xmm14,xmm14,XMMWORD PTR[((240-256))+rcx]
+
+ vpunpckldq xmm2,xmm12,xmm13
+ vpunpckldq xmm15,xmm9,xmm14
+ vpunpckhdq xmm12,xmm12,xmm13
+ vpunpckhdq xmm9,xmm9,xmm14
+ vpunpcklqdq xmm13,xmm2,xmm15
+ vpunpckhqdq xmm2,xmm2,xmm15
+ vpunpcklqdq xmm14,xmm12,xmm9
+ vpunpckhqdq xmm12,xmm12,xmm9
+ vpaddd xmm4,xmm4,XMMWORD PTR[((256-256))+rcx]
+ vpaddd xmm5,xmm5,XMMWORD PTR[((272-256))+rcx]
+ vpaddd xmm6,xmm6,XMMWORD PTR[((288-256))+rcx]
+ vpaddd xmm7,xmm7,XMMWORD PTR[((304-256))+rcx]
+
+ vpunpckldq xmm9,xmm4,xmm5
+ vpunpckldq xmm15,xmm6,xmm7
+ vpunpckhdq xmm4,xmm4,xmm5
+ vpunpckhdq xmm6,xmm6,xmm7
+ vpunpcklqdq xmm5,xmm9,xmm15
+ vpunpckhqdq xmm9,xmm9,xmm15
+ vpunpcklqdq xmm7,xmm4,xmm6
+ vpunpckhqdq xmm4,xmm4,xmm6
+ vmovdqa xmm6,XMMWORD PTR[rsp]
+ vmovdqa xmm15,XMMWORD PTR[16+rsp]
+
+ cmp rdx,64*4
+ jb $L$tail4xop
+
+ vpxor xmm6,xmm6,XMMWORD PTR[rsi]
+ vpxor xmm1,xmm1,XMMWORD PTR[16+rsi]
+ vpxor xmm13,xmm13,XMMWORD PTR[32+rsi]
+ vpxor xmm5,xmm5,XMMWORD PTR[48+rsi]
+ vpxor xmm15,xmm15,XMMWORD PTR[64+rsi]
+ vpxor xmm10,xmm10,XMMWORD PTR[80+rsi]
+ vpxor xmm2,xmm2,XMMWORD PTR[96+rsi]
+ vpxor xmm9,xmm9,XMMWORD PTR[112+rsi]
+ lea rsi,QWORD PTR[128+rsi]
+ vpxor xmm11,xmm11,XMMWORD PTR[rsi]
+ vpxor xmm3,xmm3,XMMWORD PTR[16+rsi]
+ vpxor xmm14,xmm14,XMMWORD PTR[32+rsi]
+ vpxor xmm7,xmm7,XMMWORD PTR[48+rsi]
+ vpxor xmm8,xmm8,XMMWORD PTR[64+rsi]
+ vpxor xmm0,xmm0,XMMWORD PTR[80+rsi]
+ vpxor xmm12,xmm12,XMMWORD PTR[96+rsi]
+ vpxor xmm4,xmm4,XMMWORD PTR[112+rsi]
+ lea rsi,QWORD PTR[128+rsi]
+
+ vmovdqu XMMWORD PTR[rdi],xmm6
+ vmovdqu XMMWORD PTR[16+rdi],xmm1
+ vmovdqu XMMWORD PTR[32+rdi],xmm13
+ vmovdqu XMMWORD PTR[48+rdi],xmm5
+ vmovdqu XMMWORD PTR[64+rdi],xmm15
+ vmovdqu XMMWORD PTR[80+rdi],xmm10
+ vmovdqu XMMWORD PTR[96+rdi],xmm2
+ vmovdqu XMMWORD PTR[112+rdi],xmm9
+ lea rdi,QWORD PTR[128+rdi]
+ vmovdqu XMMWORD PTR[rdi],xmm11
+ vmovdqu XMMWORD PTR[16+rdi],xmm3
+ vmovdqu XMMWORD PTR[32+rdi],xmm14
+ vmovdqu XMMWORD PTR[48+rdi],xmm7
+ vmovdqu XMMWORD PTR[64+rdi],xmm8
+ vmovdqu XMMWORD PTR[80+rdi],xmm0
+ vmovdqu XMMWORD PTR[96+rdi],xmm12
+ vmovdqu XMMWORD PTR[112+rdi],xmm4
+ lea rdi,QWORD PTR[128+rdi]
+
+ sub rdx,64*4
+ jnz $L$oop_outer4xop
+
+ jmp $L$done4xop
+
+ALIGN 32
+$L$tail4xop::
+ cmp rdx,192
+ jae $L$192_or_more4xop
+ cmp rdx,128
+ jae $L$128_or_more4xop
+ cmp rdx,64
+ jae $L$64_or_more4xop
+
+ xor r10,r10
+ vmovdqa XMMWORD PTR[rsp],xmm6
+ vmovdqa XMMWORD PTR[16+rsp],xmm1
+ vmovdqa XMMWORD PTR[32+rsp],xmm13
+ vmovdqa XMMWORD PTR[48+rsp],xmm5
+ jmp $L$oop_tail4xop
+
+ALIGN 32
+$L$64_or_more4xop::
+ vpxor xmm6,xmm6,XMMWORD PTR[rsi]
+ vpxor xmm1,xmm1,XMMWORD PTR[16+rsi]
+ vpxor xmm13,xmm13,XMMWORD PTR[32+rsi]
+ vpxor xmm5,xmm5,XMMWORD PTR[48+rsi]
+ vmovdqu XMMWORD PTR[rdi],xmm6
+ vmovdqu XMMWORD PTR[16+rdi],xmm1
+ vmovdqu XMMWORD PTR[32+rdi],xmm13
+ vmovdqu XMMWORD PTR[48+rdi],xmm5
+ je $L$done4xop
+
+ lea rsi,QWORD PTR[64+rsi]
+ vmovdqa XMMWORD PTR[rsp],xmm15
+ xor r10,r10
+ vmovdqa XMMWORD PTR[16+rsp],xmm10
+ lea rdi,QWORD PTR[64+rdi]
+ vmovdqa XMMWORD PTR[32+rsp],xmm2
+ sub rdx,64
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ jmp $L$oop_tail4xop
+
+ALIGN 32
+$L$128_or_more4xop::
+ vpxor xmm6,xmm6,XMMWORD PTR[rsi]
+ vpxor xmm1,xmm1,XMMWORD PTR[16+rsi]
+ vpxor xmm13,xmm13,XMMWORD PTR[32+rsi]
+ vpxor xmm5,xmm5,XMMWORD PTR[48+rsi]
+ vpxor xmm15,xmm15,XMMWORD PTR[64+rsi]
+ vpxor xmm10,xmm10,XMMWORD PTR[80+rsi]
+ vpxor xmm2,xmm2,XMMWORD PTR[96+rsi]
+ vpxor xmm9,xmm9,XMMWORD PTR[112+rsi]
+
+ vmovdqu XMMWORD PTR[rdi],xmm6
+ vmovdqu XMMWORD PTR[16+rdi],xmm1
+ vmovdqu XMMWORD PTR[32+rdi],xmm13
+ vmovdqu XMMWORD PTR[48+rdi],xmm5
+ vmovdqu XMMWORD PTR[64+rdi],xmm15
+ vmovdqu XMMWORD PTR[80+rdi],xmm10
+ vmovdqu XMMWORD PTR[96+rdi],xmm2
+ vmovdqu XMMWORD PTR[112+rdi],xmm9
+ je $L$done4xop
+
+ lea rsi,QWORD PTR[128+rsi]
+ vmovdqa XMMWORD PTR[rsp],xmm11
+ xor r10,r10
+ vmovdqa XMMWORD PTR[16+rsp],xmm3
+ lea rdi,QWORD PTR[128+rdi]
+ vmovdqa XMMWORD PTR[32+rsp],xmm14
+ sub rdx,128
+ vmovdqa XMMWORD PTR[48+rsp],xmm7
+ jmp $L$oop_tail4xop
+
+ALIGN 32
+$L$192_or_more4xop::
+ vpxor xmm6,xmm6,XMMWORD PTR[rsi]
+ vpxor xmm1,xmm1,XMMWORD PTR[16+rsi]
+ vpxor xmm13,xmm13,XMMWORD PTR[32+rsi]
+ vpxor xmm5,xmm5,XMMWORD PTR[48+rsi]
+ vpxor xmm15,xmm15,XMMWORD PTR[64+rsi]
+ vpxor xmm10,xmm10,XMMWORD PTR[80+rsi]
+ vpxor xmm2,xmm2,XMMWORD PTR[96+rsi]
+ vpxor xmm9,xmm9,XMMWORD PTR[112+rsi]
+ lea rsi,QWORD PTR[128+rsi]
+ vpxor xmm11,xmm11,XMMWORD PTR[rsi]
+ vpxor xmm3,xmm3,XMMWORD PTR[16+rsi]
+ vpxor xmm14,xmm14,XMMWORD PTR[32+rsi]
+ vpxor xmm7,xmm7,XMMWORD PTR[48+rsi]
+
+ vmovdqu XMMWORD PTR[rdi],xmm6
+ vmovdqu XMMWORD PTR[16+rdi],xmm1
+ vmovdqu XMMWORD PTR[32+rdi],xmm13
+ vmovdqu XMMWORD PTR[48+rdi],xmm5
+ vmovdqu XMMWORD PTR[64+rdi],xmm15
+ vmovdqu XMMWORD PTR[80+rdi],xmm10
+ vmovdqu XMMWORD PTR[96+rdi],xmm2
+ vmovdqu XMMWORD PTR[112+rdi],xmm9
+ lea rdi,QWORD PTR[128+rdi]
+ vmovdqu XMMWORD PTR[rdi],xmm11
+ vmovdqu XMMWORD PTR[16+rdi],xmm3
+ vmovdqu XMMWORD PTR[32+rdi],xmm14
+ vmovdqu XMMWORD PTR[48+rdi],xmm7
+ je $L$done4xop
+
+ lea rsi,QWORD PTR[64+rsi]
+ vmovdqa XMMWORD PTR[rsp],xmm8
+ xor r10,r10
+ vmovdqa XMMWORD PTR[16+rsp],xmm0
+ lea rdi,QWORD PTR[64+rdi]
+ vmovdqa XMMWORD PTR[32+rsp],xmm12
+ sub rdx,192
+ vmovdqa XMMWORD PTR[48+rsp],xmm4
+
+$L$oop_tail4xop::
+ movzx eax,BYTE PTR[r10*1+rsi]
+ movzx ecx,BYTE PTR[r10*1+rsp]
+ lea r10,QWORD PTR[1+r10]
+ xor eax,ecx
+ mov BYTE PTR[((-1))+r10*1+rdi],al
+ dec rdx
+ jnz $L$oop_tail4xop
+
+$L$done4xop::
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-168))+r9]
+ movaps xmm7,XMMWORD PTR[((-152))+r9]
+ movaps xmm8,XMMWORD PTR[((-136))+r9]
+ movaps xmm9,XMMWORD PTR[((-120))+r9]
+ movaps xmm10,XMMWORD PTR[((-104))+r9]
+ movaps xmm11,XMMWORD PTR[((-88))+r9]
+ movaps xmm12,XMMWORD PTR[((-72))+r9]
+ movaps xmm13,XMMWORD PTR[((-56))+r9]
+ movaps xmm14,XMMWORD PTR[((-40))+r9]
+ movaps xmm15,XMMWORD PTR[((-24))+r9]
+ lea rsp,QWORD PTR[r9]
+
+$L$4xop_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ChaCha20_4xop::
+ChaCha20_4xop ENDP
+
+ALIGN 32
+ChaCha20_8x PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ChaCha20_8x::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+
+
+
+$L$ChaCha20_8x::
+ mov r9,rsp
+
+ sub rsp,0280h+168
+ and rsp,-32
+ movaps XMMWORD PTR[(-168)+r9],xmm6
+ movaps XMMWORD PTR[(-152)+r9],xmm7
+ movaps XMMWORD PTR[(-136)+r9],xmm8
+ movaps XMMWORD PTR[(-120)+r9],xmm9
+ movaps XMMWORD PTR[(-104)+r9],xmm10
+ movaps XMMWORD PTR[(-88)+r9],xmm11
+ movaps XMMWORD PTR[(-72)+r9],xmm12
+ movaps XMMWORD PTR[(-56)+r9],xmm13
+ movaps XMMWORD PTR[(-40)+r9],xmm14
+ movaps XMMWORD PTR[(-24)+r9],xmm15
+$L$8x_body::
+ vzeroupper
+
+
+
+
+
+
+
+
+
+
+ vbroadcasti128 ymm11,XMMWORD PTR[$L$sigma]
+ vbroadcasti128 ymm3,XMMWORD PTR[rcx]
+ vbroadcasti128 ymm15,XMMWORD PTR[16+rcx]
+ vbroadcasti128 ymm7,XMMWORD PTR[r8]
+ lea rcx,QWORD PTR[256+rsp]
+ lea rax,QWORD PTR[512+rsp]
+ lea r10,QWORD PTR[$L$rot16]
+ lea r11,QWORD PTR[$L$rot24]
+
+ vpshufd ymm8,ymm11,000h
+ vpshufd ymm9,ymm11,055h
+ vmovdqa YMMWORD PTR[(128-256)+rcx],ymm8
+ vpshufd ymm10,ymm11,0aah
+ vmovdqa YMMWORD PTR[(160-256)+rcx],ymm9
+ vpshufd ymm11,ymm11,0ffh
+ vmovdqa YMMWORD PTR[(192-256)+rcx],ymm10
+ vmovdqa YMMWORD PTR[(224-256)+rcx],ymm11
+
+ vpshufd ymm0,ymm3,000h
+ vpshufd ymm1,ymm3,055h
+ vmovdqa YMMWORD PTR[(256-256)+rcx],ymm0
+ vpshufd ymm2,ymm3,0aah
+ vmovdqa YMMWORD PTR[(288-256)+rcx],ymm1
+ vpshufd ymm3,ymm3,0ffh
+ vmovdqa YMMWORD PTR[(320-256)+rcx],ymm2
+ vmovdqa YMMWORD PTR[(352-256)+rcx],ymm3
+
+ vpshufd ymm12,ymm15,000h
+ vpshufd ymm13,ymm15,055h
+ vmovdqa YMMWORD PTR[(384-512)+rax],ymm12
+ vpshufd ymm14,ymm15,0aah
+ vmovdqa YMMWORD PTR[(416-512)+rax],ymm13
+ vpshufd ymm15,ymm15,0ffh
+ vmovdqa YMMWORD PTR[(448-512)+rax],ymm14
+ vmovdqa YMMWORD PTR[(480-512)+rax],ymm15
+
+ vpshufd ymm4,ymm7,000h
+ vpshufd ymm5,ymm7,055h
+ vpaddd ymm4,ymm4,YMMWORD PTR[$L$incy]
+ vpshufd ymm6,ymm7,0aah
+ vmovdqa YMMWORD PTR[(544-512)+rax],ymm5
+ vpshufd ymm7,ymm7,0ffh
+ vmovdqa YMMWORD PTR[(576-512)+rax],ymm6
+ vmovdqa YMMWORD PTR[(608-512)+rax],ymm7
+
+ jmp $L$oop_enter8x
+
+ALIGN 32
+$L$oop_outer8x::
+ vmovdqa ymm8,YMMWORD PTR[((128-256))+rcx]
+ vmovdqa ymm9,YMMWORD PTR[((160-256))+rcx]
+ vmovdqa ymm10,YMMWORD PTR[((192-256))+rcx]
+ vmovdqa ymm11,YMMWORD PTR[((224-256))+rcx]
+ vmovdqa ymm0,YMMWORD PTR[((256-256))+rcx]
+ vmovdqa ymm1,YMMWORD PTR[((288-256))+rcx]
+ vmovdqa ymm2,YMMWORD PTR[((320-256))+rcx]
+ vmovdqa ymm3,YMMWORD PTR[((352-256))+rcx]
+ vmovdqa ymm12,YMMWORD PTR[((384-512))+rax]
+ vmovdqa ymm13,YMMWORD PTR[((416-512))+rax]
+ vmovdqa ymm14,YMMWORD PTR[((448-512))+rax]
+ vmovdqa ymm15,YMMWORD PTR[((480-512))+rax]
+ vmovdqa ymm4,YMMWORD PTR[((512-512))+rax]
+ vmovdqa ymm5,YMMWORD PTR[((544-512))+rax]
+ vmovdqa ymm6,YMMWORD PTR[((576-512))+rax]
+ vmovdqa ymm7,YMMWORD PTR[((608-512))+rax]
+ vpaddd ymm4,ymm4,YMMWORD PTR[$L$eight]
+
+$L$oop_enter8x::
+ vmovdqa YMMWORD PTR[64+rsp],ymm14
+ vmovdqa YMMWORD PTR[96+rsp],ymm15
+ vbroadcasti128 ymm15,XMMWORD PTR[r10]
+ vmovdqa YMMWORD PTR[(512-512)+rax],ymm4
+ mov eax,10
+ jmp $L$oop8x
+
+ALIGN 32
+$L$oop8x::
+ vpaddd ymm8,ymm8,ymm0
+ vpxor ymm4,ymm8,ymm4
+ vpshufb ymm4,ymm4,ymm15
+ vpaddd ymm9,ymm9,ymm1
+ vpxor ymm5,ymm9,ymm5
+ vpshufb ymm5,ymm5,ymm15
+ vpaddd ymm12,ymm12,ymm4
+ vpxor ymm0,ymm12,ymm0
+ vpslld ymm14,ymm0,12
+ vpsrld ymm0,ymm0,20
+ vpor ymm0,ymm14,ymm0
+ vbroadcasti128 ymm14,XMMWORD PTR[r11]
+ vpaddd ymm13,ymm13,ymm5
+ vpxor ymm1,ymm13,ymm1
+ vpslld ymm15,ymm1,12
+ vpsrld ymm1,ymm1,20
+ vpor ymm1,ymm15,ymm1
+ vpaddd ymm8,ymm8,ymm0
+ vpxor ymm4,ymm8,ymm4
+ vpshufb ymm4,ymm4,ymm14
+ vpaddd ymm9,ymm9,ymm1
+ vpxor ymm5,ymm9,ymm5
+ vpshufb ymm5,ymm5,ymm14
+ vpaddd ymm12,ymm12,ymm4
+ vpxor ymm0,ymm12,ymm0
+ vpslld ymm15,ymm0,7
+ vpsrld ymm0,ymm0,25
+ vpor ymm0,ymm15,ymm0
+ vbroadcasti128 ymm15,XMMWORD PTR[r10]
+ vpaddd ymm13,ymm13,ymm5
+ vpxor ymm1,ymm13,ymm1
+ vpslld ymm14,ymm1,7
+ vpsrld ymm1,ymm1,25
+ vpor ymm1,ymm14,ymm1
+ vmovdqa YMMWORD PTR[rsp],ymm12
+ vmovdqa YMMWORD PTR[32+rsp],ymm13
+ vmovdqa ymm12,YMMWORD PTR[64+rsp]
+ vmovdqa ymm13,YMMWORD PTR[96+rsp]
+ vpaddd ymm10,ymm10,ymm2
+ vpxor ymm6,ymm10,ymm6
+ vpshufb ymm6,ymm6,ymm15
+ vpaddd ymm11,ymm11,ymm3
+ vpxor ymm7,ymm11,ymm7
+ vpshufb ymm7,ymm7,ymm15
+ vpaddd ymm12,ymm12,ymm6
+ vpxor ymm2,ymm12,ymm2
+ vpslld ymm14,ymm2,12
+ vpsrld ymm2,ymm2,20
+ vpor ymm2,ymm14,ymm2
+ vbroadcasti128 ymm14,XMMWORD PTR[r11]
+ vpaddd ymm13,ymm13,ymm7
+ vpxor ymm3,ymm13,ymm3
+ vpslld ymm15,ymm3,12
+ vpsrld ymm3,ymm3,20
+ vpor ymm3,ymm15,ymm3
+ vpaddd ymm10,ymm10,ymm2
+ vpxor ymm6,ymm10,ymm6
+ vpshufb ymm6,ymm6,ymm14
+ vpaddd ymm11,ymm11,ymm3
+ vpxor ymm7,ymm11,ymm7
+ vpshufb ymm7,ymm7,ymm14
+ vpaddd ymm12,ymm12,ymm6
+ vpxor ymm2,ymm12,ymm2
+ vpslld ymm15,ymm2,7
+ vpsrld ymm2,ymm2,25
+ vpor ymm2,ymm15,ymm2
+ vbroadcasti128 ymm15,XMMWORD PTR[r10]
+ vpaddd ymm13,ymm13,ymm7
+ vpxor ymm3,ymm13,ymm3
+ vpslld ymm14,ymm3,7
+ vpsrld ymm3,ymm3,25
+ vpor ymm3,ymm14,ymm3
+ vpaddd ymm8,ymm8,ymm1
+ vpxor ymm7,ymm8,ymm7
+ vpshufb ymm7,ymm7,ymm15
+ vpaddd ymm9,ymm9,ymm2
+ vpxor ymm4,ymm9,ymm4
+ vpshufb ymm4,ymm4,ymm15
+ vpaddd ymm12,ymm12,ymm7
+ vpxor ymm1,ymm12,ymm1
+ vpslld ymm14,ymm1,12
+ vpsrld ymm1,ymm1,20
+ vpor ymm1,ymm14,ymm1
+ vbroadcasti128 ymm14,XMMWORD PTR[r11]
+ vpaddd ymm13,ymm13,ymm4
+ vpxor ymm2,ymm13,ymm2
+ vpslld ymm15,ymm2,12
+ vpsrld ymm2,ymm2,20
+ vpor ymm2,ymm15,ymm2
+ vpaddd ymm8,ymm8,ymm1
+ vpxor ymm7,ymm8,ymm7
+ vpshufb ymm7,ymm7,ymm14
+ vpaddd ymm9,ymm9,ymm2
+ vpxor ymm4,ymm9,ymm4
+ vpshufb ymm4,ymm4,ymm14
+ vpaddd ymm12,ymm12,ymm7
+ vpxor ymm1,ymm12,ymm1
+ vpslld ymm15,ymm1,7
+ vpsrld ymm1,ymm1,25
+ vpor ymm1,ymm15,ymm1
+ vbroadcasti128 ymm15,XMMWORD PTR[r10]
+ vpaddd ymm13,ymm13,ymm4
+ vpxor ymm2,ymm13,ymm2
+ vpslld ymm14,ymm2,7
+ vpsrld ymm2,ymm2,25
+ vpor ymm2,ymm14,ymm2
+ vmovdqa YMMWORD PTR[64+rsp],ymm12
+ vmovdqa YMMWORD PTR[96+rsp],ymm13
+ vmovdqa ymm12,YMMWORD PTR[rsp]
+ vmovdqa ymm13,YMMWORD PTR[32+rsp]
+ vpaddd ymm10,ymm10,ymm3
+ vpxor ymm5,ymm10,ymm5
+ vpshufb ymm5,ymm5,ymm15
+ vpaddd ymm11,ymm11,ymm0
+ vpxor ymm6,ymm11,ymm6
+ vpshufb ymm6,ymm6,ymm15
+ vpaddd ymm12,ymm12,ymm5
+ vpxor ymm3,ymm12,ymm3
+ vpslld ymm14,ymm3,12
+ vpsrld ymm3,ymm3,20
+ vpor ymm3,ymm14,ymm3
+ vbroadcasti128 ymm14,XMMWORD PTR[r11]
+ vpaddd ymm13,ymm13,ymm6
+ vpxor ymm0,ymm13,ymm0
+ vpslld ymm15,ymm0,12
+ vpsrld ymm0,ymm0,20
+ vpor ymm0,ymm15,ymm0
+ vpaddd ymm10,ymm10,ymm3
+ vpxor ymm5,ymm10,ymm5
+ vpshufb ymm5,ymm5,ymm14
+ vpaddd ymm11,ymm11,ymm0
+ vpxor ymm6,ymm11,ymm6
+ vpshufb ymm6,ymm6,ymm14
+ vpaddd ymm12,ymm12,ymm5
+ vpxor ymm3,ymm12,ymm3
+ vpslld ymm15,ymm3,7
+ vpsrld ymm3,ymm3,25
+ vpor ymm3,ymm15,ymm3
+ vbroadcasti128 ymm15,XMMWORD PTR[r10]
+ vpaddd ymm13,ymm13,ymm6
+ vpxor ymm0,ymm13,ymm0
+ vpslld ymm14,ymm0,7
+ vpsrld ymm0,ymm0,25
+ vpor ymm0,ymm14,ymm0
+ dec eax
+ jnz $L$oop8x
+
+ lea rax,QWORD PTR[512+rsp]
+ vpaddd ymm8,ymm8,YMMWORD PTR[((128-256))+rcx]
+ vpaddd ymm9,ymm9,YMMWORD PTR[((160-256))+rcx]
+ vpaddd ymm10,ymm10,YMMWORD PTR[((192-256))+rcx]
+ vpaddd ymm11,ymm11,YMMWORD PTR[((224-256))+rcx]
+
+ vpunpckldq ymm14,ymm8,ymm9
+ vpunpckldq ymm15,ymm10,ymm11
+ vpunpckhdq ymm8,ymm8,ymm9
+ vpunpckhdq ymm10,ymm10,ymm11
+ vpunpcklqdq ymm9,ymm14,ymm15
+ vpunpckhqdq ymm14,ymm14,ymm15
+ vpunpcklqdq ymm11,ymm8,ymm10
+ vpunpckhqdq ymm8,ymm8,ymm10
+ vpaddd ymm0,ymm0,YMMWORD PTR[((256-256))+rcx]
+ vpaddd ymm1,ymm1,YMMWORD PTR[((288-256))+rcx]
+ vpaddd ymm2,ymm2,YMMWORD PTR[((320-256))+rcx]
+ vpaddd ymm3,ymm3,YMMWORD PTR[((352-256))+rcx]
+
+ vpunpckldq ymm10,ymm0,ymm1
+ vpunpckldq ymm15,ymm2,ymm3
+ vpunpckhdq ymm0,ymm0,ymm1
+ vpunpckhdq ymm2,ymm2,ymm3
+ vpunpcklqdq ymm1,ymm10,ymm15
+ vpunpckhqdq ymm10,ymm10,ymm15
+ vpunpcklqdq ymm3,ymm0,ymm2
+ vpunpckhqdq ymm0,ymm0,ymm2
+ vperm2i128 ymm15,ymm9,ymm1,020h
+ vperm2i128 ymm1,ymm9,ymm1,031h
+ vperm2i128 ymm9,ymm14,ymm10,020h
+ vperm2i128 ymm10,ymm14,ymm10,031h
+ vperm2i128 ymm14,ymm11,ymm3,020h
+ vperm2i128 ymm3,ymm11,ymm3,031h
+ vperm2i128 ymm11,ymm8,ymm0,020h
+ vperm2i128 ymm0,ymm8,ymm0,031h
+ vmovdqa YMMWORD PTR[rsp],ymm15
+ vmovdqa YMMWORD PTR[32+rsp],ymm9
+ vmovdqa ymm15,YMMWORD PTR[64+rsp]
+ vmovdqa ymm9,YMMWORD PTR[96+rsp]
+
+ vpaddd ymm12,ymm12,YMMWORD PTR[((384-512))+rax]
+ vpaddd ymm13,ymm13,YMMWORD PTR[((416-512))+rax]
+ vpaddd ymm15,ymm15,YMMWORD PTR[((448-512))+rax]
+ vpaddd ymm9,ymm9,YMMWORD PTR[((480-512))+rax]
+
+ vpunpckldq ymm2,ymm12,ymm13
+ vpunpckldq ymm8,ymm15,ymm9
+ vpunpckhdq ymm12,ymm12,ymm13
+ vpunpckhdq ymm15,ymm15,ymm9
+ vpunpcklqdq ymm13,ymm2,ymm8
+ vpunpckhqdq ymm2,ymm2,ymm8
+ vpunpcklqdq ymm9,ymm12,ymm15
+ vpunpckhqdq ymm12,ymm12,ymm15
+ vpaddd ymm4,ymm4,YMMWORD PTR[((512-512))+rax]
+ vpaddd ymm5,ymm5,YMMWORD PTR[((544-512))+rax]
+ vpaddd ymm6,ymm6,YMMWORD PTR[((576-512))+rax]
+ vpaddd ymm7,ymm7,YMMWORD PTR[((608-512))+rax]
+
+ vpunpckldq ymm15,ymm4,ymm5
+ vpunpckldq ymm8,ymm6,ymm7
+ vpunpckhdq ymm4,ymm4,ymm5
+ vpunpckhdq ymm6,ymm6,ymm7
+ vpunpcklqdq ymm5,ymm15,ymm8
+ vpunpckhqdq ymm15,ymm15,ymm8
+ vpunpcklqdq ymm7,ymm4,ymm6
+ vpunpckhqdq ymm4,ymm4,ymm6
+ vperm2i128 ymm8,ymm13,ymm5,020h
+ vperm2i128 ymm5,ymm13,ymm5,031h
+ vperm2i128 ymm13,ymm2,ymm15,020h
+ vperm2i128 ymm15,ymm2,ymm15,031h
+ vperm2i128 ymm2,ymm9,ymm7,020h
+ vperm2i128 ymm7,ymm9,ymm7,031h
+ vperm2i128 ymm9,ymm12,ymm4,020h
+ vperm2i128 ymm4,ymm12,ymm4,031h
+ vmovdqa ymm6,YMMWORD PTR[rsp]
+ vmovdqa ymm12,YMMWORD PTR[32+rsp]
+
+ cmp rdx,64*8
+ jb $L$tail8x
+
+ vpxor ymm6,ymm6,YMMWORD PTR[rsi]
+ vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
+ vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
+ vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
+ lea rsi,QWORD PTR[128+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm6
+ vmovdqu YMMWORD PTR[32+rdi],ymm8
+ vmovdqu YMMWORD PTR[64+rdi],ymm1
+ vmovdqu YMMWORD PTR[96+rdi],ymm5
+ lea rdi,QWORD PTR[128+rdi]
+
+ vpxor ymm12,ymm12,YMMWORD PTR[rsi]
+ vpxor ymm13,ymm13,YMMWORD PTR[32+rsi]
+ vpxor ymm10,ymm10,YMMWORD PTR[64+rsi]
+ vpxor ymm15,ymm15,YMMWORD PTR[96+rsi]
+ lea rsi,QWORD PTR[128+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm12
+ vmovdqu YMMWORD PTR[32+rdi],ymm13
+ vmovdqu YMMWORD PTR[64+rdi],ymm10
+ vmovdqu YMMWORD PTR[96+rdi],ymm15
+ lea rdi,QWORD PTR[128+rdi]
+
+ vpxor ymm14,ymm14,YMMWORD PTR[rsi]
+ vpxor ymm2,ymm2,YMMWORD PTR[32+rsi]
+ vpxor ymm3,ymm3,YMMWORD PTR[64+rsi]
+ vpxor ymm7,ymm7,YMMWORD PTR[96+rsi]
+ lea rsi,QWORD PTR[128+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm14
+ vmovdqu YMMWORD PTR[32+rdi],ymm2
+ vmovdqu YMMWORD PTR[64+rdi],ymm3
+ vmovdqu YMMWORD PTR[96+rdi],ymm7
+ lea rdi,QWORD PTR[128+rdi]
+
+ vpxor ymm11,ymm11,YMMWORD PTR[rsi]
+ vpxor ymm9,ymm9,YMMWORD PTR[32+rsi]
+ vpxor ymm0,ymm0,YMMWORD PTR[64+rsi]
+ vpxor ymm4,ymm4,YMMWORD PTR[96+rsi]
+ lea rsi,QWORD PTR[128+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm11
+ vmovdqu YMMWORD PTR[32+rdi],ymm9
+ vmovdqu YMMWORD PTR[64+rdi],ymm0
+ vmovdqu YMMWORD PTR[96+rdi],ymm4
+ lea rdi,QWORD PTR[128+rdi]
+
+ sub rdx,64*8
+ jnz $L$oop_outer8x
+
+ jmp $L$done8x
+
+$L$tail8x::
+ cmp rdx,448
+ jae $L$448_or_more8x
+ cmp rdx,384
+ jae $L$384_or_more8x
+ cmp rdx,320
+ jae $L$320_or_more8x
+ cmp rdx,256
+ jae $L$256_or_more8x
+ cmp rdx,192
+ jae $L$192_or_more8x
+ cmp rdx,128
+ jae $L$128_or_more8x
+ cmp rdx,64
+ jae $L$64_or_more8x
+
+ xor r10,r10
+ vmovdqa YMMWORD PTR[rsp],ymm6
+ vmovdqa YMMWORD PTR[32+rsp],ymm8
+ jmp $L$oop_tail8x
+
+ALIGN 32
+$L$64_or_more8x::
+ vpxor ymm6,ymm6,YMMWORD PTR[rsi]
+ vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm6
+ vmovdqu YMMWORD PTR[32+rdi],ymm8
+ je $L$done8x
+
+ lea rsi,QWORD PTR[64+rsi]
+ xor r10,r10
+ vmovdqa YMMWORD PTR[rsp],ymm1
+ lea rdi,QWORD PTR[64+rdi]
+ sub rdx,64
+ vmovdqa YMMWORD PTR[32+rsp],ymm5
+ jmp $L$oop_tail8x
+
+ALIGN 32
+$L$128_or_more8x::
+ vpxor ymm6,ymm6,YMMWORD PTR[rsi]
+ vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
+ vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
+ vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm6
+ vmovdqu YMMWORD PTR[32+rdi],ymm8
+ vmovdqu YMMWORD PTR[64+rdi],ymm1
+ vmovdqu YMMWORD PTR[96+rdi],ymm5
+ je $L$done8x
+
+ lea rsi,QWORD PTR[128+rsi]
+ xor r10,r10
+ vmovdqa YMMWORD PTR[rsp],ymm12
+ lea rdi,QWORD PTR[128+rdi]
+ sub rdx,128
+ vmovdqa YMMWORD PTR[32+rsp],ymm13
+ jmp $L$oop_tail8x
+
+ALIGN 32
+$L$192_or_more8x::
+ vpxor ymm6,ymm6,YMMWORD PTR[rsi]
+ vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
+ vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
+ vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
+ vpxor ymm12,ymm12,YMMWORD PTR[128+rsi]
+ vpxor ymm13,ymm13,YMMWORD PTR[160+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm6
+ vmovdqu YMMWORD PTR[32+rdi],ymm8
+ vmovdqu YMMWORD PTR[64+rdi],ymm1
+ vmovdqu YMMWORD PTR[96+rdi],ymm5
+ vmovdqu YMMWORD PTR[128+rdi],ymm12
+ vmovdqu YMMWORD PTR[160+rdi],ymm13
+ je $L$done8x
+
+ lea rsi,QWORD PTR[192+rsi]
+ xor r10,r10
+ vmovdqa YMMWORD PTR[rsp],ymm10
+ lea rdi,QWORD PTR[192+rdi]
+ sub rdx,192
+ vmovdqa YMMWORD PTR[32+rsp],ymm15
+ jmp $L$oop_tail8x
+
+ALIGN 32
+$L$256_or_more8x::
+ vpxor ymm6,ymm6,YMMWORD PTR[rsi]
+ vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
+ vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
+ vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
+ vpxor ymm12,ymm12,YMMWORD PTR[128+rsi]
+ vpxor ymm13,ymm13,YMMWORD PTR[160+rsi]
+ vpxor ymm10,ymm10,YMMWORD PTR[192+rsi]
+ vpxor ymm15,ymm15,YMMWORD PTR[224+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm6
+ vmovdqu YMMWORD PTR[32+rdi],ymm8
+ vmovdqu YMMWORD PTR[64+rdi],ymm1
+ vmovdqu YMMWORD PTR[96+rdi],ymm5
+ vmovdqu YMMWORD PTR[128+rdi],ymm12
+ vmovdqu YMMWORD PTR[160+rdi],ymm13
+ vmovdqu YMMWORD PTR[192+rdi],ymm10
+ vmovdqu YMMWORD PTR[224+rdi],ymm15
+ je $L$done8x
+
+ lea rsi,QWORD PTR[256+rsi]
+ xor r10,r10
+ vmovdqa YMMWORD PTR[rsp],ymm14
+ lea rdi,QWORD PTR[256+rdi]
+ sub rdx,256
+ vmovdqa YMMWORD PTR[32+rsp],ymm2
+ jmp $L$oop_tail8x
+
+ALIGN 32
+$L$320_or_more8x::
+ vpxor ymm6,ymm6,YMMWORD PTR[rsi]
+ vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
+ vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
+ vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
+ vpxor ymm12,ymm12,YMMWORD PTR[128+rsi]
+ vpxor ymm13,ymm13,YMMWORD PTR[160+rsi]
+ vpxor ymm10,ymm10,YMMWORD PTR[192+rsi]
+ vpxor ymm15,ymm15,YMMWORD PTR[224+rsi]
+ vpxor ymm14,ymm14,YMMWORD PTR[256+rsi]
+ vpxor ymm2,ymm2,YMMWORD PTR[288+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm6
+ vmovdqu YMMWORD PTR[32+rdi],ymm8
+ vmovdqu YMMWORD PTR[64+rdi],ymm1
+ vmovdqu YMMWORD PTR[96+rdi],ymm5
+ vmovdqu YMMWORD PTR[128+rdi],ymm12
+ vmovdqu YMMWORD PTR[160+rdi],ymm13
+ vmovdqu YMMWORD PTR[192+rdi],ymm10
+ vmovdqu YMMWORD PTR[224+rdi],ymm15
+ vmovdqu YMMWORD PTR[256+rdi],ymm14
+ vmovdqu YMMWORD PTR[288+rdi],ymm2
+ je $L$done8x
+
+ lea rsi,QWORD PTR[320+rsi]
+ xor r10,r10
+ vmovdqa YMMWORD PTR[rsp],ymm3
+ lea rdi,QWORD PTR[320+rdi]
+ sub rdx,320
+ vmovdqa YMMWORD PTR[32+rsp],ymm7
+ jmp $L$oop_tail8x
+
+ALIGN 32
+$L$384_or_more8x::
+ vpxor ymm6,ymm6,YMMWORD PTR[rsi]
+ vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
+ vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
+ vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
+ vpxor ymm12,ymm12,YMMWORD PTR[128+rsi]
+ vpxor ymm13,ymm13,YMMWORD PTR[160+rsi]
+ vpxor ymm10,ymm10,YMMWORD PTR[192+rsi]
+ vpxor ymm15,ymm15,YMMWORD PTR[224+rsi]
+ vpxor ymm14,ymm14,YMMWORD PTR[256+rsi]
+ vpxor ymm2,ymm2,YMMWORD PTR[288+rsi]
+ vpxor ymm3,ymm3,YMMWORD PTR[320+rsi]
+ vpxor ymm7,ymm7,YMMWORD PTR[352+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm6
+ vmovdqu YMMWORD PTR[32+rdi],ymm8
+ vmovdqu YMMWORD PTR[64+rdi],ymm1
+ vmovdqu YMMWORD PTR[96+rdi],ymm5
+ vmovdqu YMMWORD PTR[128+rdi],ymm12
+ vmovdqu YMMWORD PTR[160+rdi],ymm13
+ vmovdqu YMMWORD PTR[192+rdi],ymm10
+ vmovdqu YMMWORD PTR[224+rdi],ymm15
+ vmovdqu YMMWORD PTR[256+rdi],ymm14
+ vmovdqu YMMWORD PTR[288+rdi],ymm2
+ vmovdqu YMMWORD PTR[320+rdi],ymm3
+ vmovdqu YMMWORD PTR[352+rdi],ymm7
+ je $L$done8x
+
+ lea rsi,QWORD PTR[384+rsi]
+ xor r10,r10
+ vmovdqa YMMWORD PTR[rsp],ymm11
+ lea rdi,QWORD PTR[384+rdi]
+ sub rdx,384
+ vmovdqa YMMWORD PTR[32+rsp],ymm9
+ jmp $L$oop_tail8x
+
+ALIGN 32
+$L$448_or_more8x::
+ vpxor ymm6,ymm6,YMMWORD PTR[rsi]
+ vpxor ymm8,ymm8,YMMWORD PTR[32+rsi]
+ vpxor ymm1,ymm1,YMMWORD PTR[64+rsi]
+ vpxor ymm5,ymm5,YMMWORD PTR[96+rsi]
+ vpxor ymm12,ymm12,YMMWORD PTR[128+rsi]
+ vpxor ymm13,ymm13,YMMWORD PTR[160+rsi]
+ vpxor ymm10,ymm10,YMMWORD PTR[192+rsi]
+ vpxor ymm15,ymm15,YMMWORD PTR[224+rsi]
+ vpxor ymm14,ymm14,YMMWORD PTR[256+rsi]
+ vpxor ymm2,ymm2,YMMWORD PTR[288+rsi]
+ vpxor ymm3,ymm3,YMMWORD PTR[320+rsi]
+ vpxor ymm7,ymm7,YMMWORD PTR[352+rsi]
+ vpxor ymm11,ymm11,YMMWORD PTR[384+rsi]
+ vpxor ymm9,ymm9,YMMWORD PTR[416+rsi]
+ vmovdqu YMMWORD PTR[rdi],ymm6
+ vmovdqu YMMWORD PTR[32+rdi],ymm8
+ vmovdqu YMMWORD PTR[64+rdi],ymm1
+ vmovdqu YMMWORD PTR[96+rdi],ymm5
+ vmovdqu YMMWORD PTR[128+rdi],ymm12
+ vmovdqu YMMWORD PTR[160+rdi],ymm13
+ vmovdqu YMMWORD PTR[192+rdi],ymm10
+ vmovdqu YMMWORD PTR[224+rdi],ymm15
+ vmovdqu YMMWORD PTR[256+rdi],ymm14
+ vmovdqu YMMWORD PTR[288+rdi],ymm2
+ vmovdqu YMMWORD PTR[320+rdi],ymm3
+ vmovdqu YMMWORD PTR[352+rdi],ymm7
+ vmovdqu YMMWORD PTR[384+rdi],ymm11
+ vmovdqu YMMWORD PTR[416+rdi],ymm9
+ je $L$done8x
+
+ lea rsi,QWORD PTR[448+rsi]
+ xor r10,r10
+ vmovdqa YMMWORD PTR[rsp],ymm0
+ lea rdi,QWORD PTR[448+rdi]
+ sub rdx,448
+ vmovdqa YMMWORD PTR[32+rsp],ymm4
+
+$L$oop_tail8x::
+ movzx eax,BYTE PTR[r10*1+rsi]
+ movzx ecx,BYTE PTR[r10*1+rsp]
+ lea r10,QWORD PTR[1+r10]
+ xor eax,ecx
+ mov BYTE PTR[((-1))+r10*1+rdi],al
+ dec rdx
+ jnz $L$oop_tail8x
+
+$L$done8x::
+ vzeroall
+ movaps xmm6,XMMWORD PTR[((-168))+r9]
+ movaps xmm7,XMMWORD PTR[((-152))+r9]
+ movaps xmm8,XMMWORD PTR[((-136))+r9]
+ movaps xmm9,XMMWORD PTR[((-120))+r9]
+ movaps xmm10,XMMWORD PTR[((-104))+r9]
+ movaps xmm11,XMMWORD PTR[((-88))+r9]
+ movaps xmm12,XMMWORD PTR[((-72))+r9]
+ movaps xmm13,XMMWORD PTR[((-56))+r9]
+ movaps xmm14,XMMWORD PTR[((-40))+r9]
+ movaps xmm15,XMMWORD PTR[((-24))+r9]
+ lea rsp,QWORD PTR[r9]
+
+$L$8x_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ChaCha20_8x::
+ChaCha20_8x ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ lea r10,QWORD PTR[$L$ctr32_body]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea r10,QWORD PTR[$L$no_data]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ lea rax,QWORD PTR[((64+24+48))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+
+ALIGN 16
+simd_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[192+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ mov ecx,DWORD PTR[8+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ neg rcx
+ lea rsi,QWORD PTR[((-8))+rcx*1+rax]
+ lea rdi,QWORD PTR[512+r8]
+ neg ecx
+ shr ecx,3
+ DD 0a548f3fch
+
+ jmp $L$common_seh_tail
+simd_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_ChaCha20_ctr32
+ DD imagerel $L$SEH_end_ChaCha20_ctr32
+ DD imagerel $L$SEH_info_ChaCha20_ctr32
+
+ DD imagerel $L$SEH_begin_ChaCha20_ssse3
+ DD imagerel $L$SEH_end_ChaCha20_ssse3
+ DD imagerel $L$SEH_info_ChaCha20_ssse3
+
+ DD imagerel $L$SEH_begin_ChaCha20_128
+ DD imagerel $L$SEH_end_ChaCha20_128
+ DD imagerel $L$SEH_info_ChaCha20_128
+
+ DD imagerel $L$SEH_begin_ChaCha20_4x
+ DD imagerel $L$SEH_end_ChaCha20_4x
+ DD imagerel $L$SEH_info_ChaCha20_4x
+ DD imagerel $L$SEH_begin_ChaCha20_4xop
+ DD imagerel $L$SEH_end_ChaCha20_4xop
+ DD imagerel $L$SEH_info_ChaCha20_4xop
+ DD imagerel $L$SEH_begin_ChaCha20_8x
+ DD imagerel $L$SEH_end_ChaCha20_8x
+ DD imagerel $L$SEH_info_ChaCha20_8x
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_ChaCha20_ctr32::
+DB 9,0,0,0
+ DD imagerel se_handler
+
+$L$SEH_info_ChaCha20_ssse3::
+DB 9,0,0,0
+ DD imagerel simd_handler
+ DD imagerel $L$ssse3_body,imagerel $L$ssse3_epilogue
+ DD 020h,0
+
+$L$SEH_info_ChaCha20_128::
+DB 9,0,0,0
+ DD imagerel simd_handler
+ DD imagerel $L$128_body,imagerel $L$128_epilogue
+ DD 060h,0
+
+$L$SEH_info_ChaCha20_4x::
+DB 9,0,0,0
+ DD imagerel simd_handler
+ DD imagerel $L$4x_body,imagerel $L$4x_epilogue
+ DD 0a0h,0
+$L$SEH_info_ChaCha20_4xop::
+DB 9,0,0,0
+ DD imagerel simd_handler
+ DD imagerel $L$4xop_body,imagerel $L$4xop_epilogue
+ DD 0a0h,0
+$L$SEH_info_ChaCha20_8x::
+DB 9,0,0,0
+ DD imagerel simd_handler
+ DD imagerel $L$8x_body,imagerel $L$8x_epilogue
+ DD 0a0h,0
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/ec/ecp_nistz256-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/ec/ecp_nistz256-x86_64.masm
index 2d81057494..153caa599d 100644
--- a/contrib/libs/openssl/asm/windows/crypto/ec/ecp_nistz256-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/ec/ecp_nistz256-x86_64.masm
@@ -1,7941 +1,7941 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-PUBLIC ecp_nistz256_precomputed
-
-ALIGN 256
-ecp_nistz256_precomputed::
- DD 018a9143ch,079e730d4h,05fedb601h,075ba95fch,077622510h,079fb732bh,0a53755c6h,018905f76h,0ce95560ah,0ddf25357h,0ba19e45ch,08b4ab8e4h,0dd21f325h,0d2e88688h,025885d85h,08571ff18h
- DD 010ddd64dh,0850046d4h,0a433827dh,0aa6ae3c1h,08d1490d9h,073220503h,03dcf3a3bh,0f6bb32e4h,061bee1a5h,02f3648d3h,0eb236ff8h,0152cd7cbh,092042dbeh,019a8fb0eh,00a5b8a3bh,078c57751h
- DD 04eebc127h,0ffac3f90h,0087d81fbh,0b027f84ah,087cbbc98h,066ad77ddh,0b6ff747eh,026936a3fh,0c983a7ebh,0b04c5c1fh,00861fe1ah,0583e47adh,01a2ee98eh,078820831h,0e587cc07h,0d5f06a29h
- DD 046918dcch,074b0b50dh,0c623c173h,04650a6edh,0e8100af2h,00cdaacach,041b0176bh,0577362f5h,0e4cbaba6h,02d96f24ch,0fad6f447h,017628471h,0e5ddd22eh,06b6c36deh,04c5ab863h,084b14c39h
- DD 0c45c61f5h,0be1b8aaeh,094b9537dh,090ec649ah,0d076c20ch,0941cb5aah,0890523c8h,0c9079605h,0e7ba4f10h,0eb309b4ah,0e5eb882bh,073c568efh,07e7a1f68h,03540a987h,02dd1e916h,073a076bbh
- DD 03e77664ah,040394737h,0346cee3eh,055ae744fh,05b17a3adh,0d50a961ah,054213673h,013074b59h,0d377e44bh,093d36220h,0adff14b5h,0299c2b53h,0ef639f11h,0f424d44ch,04a07f75fh,0a4c9916dh
- DD 0a0173b4fh,00746354eh,0d23c00f7h,02bd20213h,00c23bb08h,0f43eaab5h,0c3123e03h,013ba5119h,03f5b9d4dh,02847d030h,05da67bddh,06742f2f2h,077c94195h,0ef933bdch,06e240867h,0eaedd915h
- DD 09499a78fh,027f14cd1h,06f9b3455h,0462ab5c5h,0f02cfc6bh,08f90f02ah,0b265230dh,0b763891eh,0532d4977h,0f59da3a9h,0cf9eba15h,021e3327dh,0be60bbf0h,0123c7b84h,07706df76h,056ec12f2h
- DD 0264e20e8h,075c96e8fh,059a7a841h,0abe6bfedh,044c8eb00h,02cc09c04h,0f0c4e16bh,0e05b3080h,0a45f3314h,01eb7777ah,0ce5d45e3h,056af7bedh,088b12f1ah,02b6e019ah,0fd835f9bh,0086659cdh
- DD 09dc21ec8h,02c18dbd1h,00fcf8139h,098f9868ah,048250b49h,0737d2cd6h,024b3428fh,0cc61c947h,080dd9e76h,00c2b4078h,0383fbe08h,0c43a8991h,0779be5d2h,05f7d2d65h,0eb3b4ab5h,078719a54h
- DD 06245e404h,0ea7d260ah,06e7fdfe0h,09de40795h,08dac1ab5h,01ff3a415h,0649c9073h,03e7090f1h,02b944e88h,01a768561h,0e57f61c8h,0250f939eh,01ead643dh,00c0daa89h,0e125b88eh,068930023h
- DD 0d2697768h,004b71aa7h,0ca345a33h,0abdedef5h,0ee37385eh,02409d29dh,0cb83e156h,04ee1df77h,01cbb5b43h,00cac12d9h,0ca895637h,0170ed2f6h,08ade6d66h,028228cfah,053238acah,07ff57c95h
- DD 04b2ed709h,0ccc42563h,0856fd30dh,00e356769h,0559e9811h,0bcbcd43fh,05395b759h,0738477ach,0c00ee17fh,035752b90h,0742ed2e3h,068748390h,0bd1f5bc1h,07cd06422h,0c9e7b797h,0fbc08769h
- DD 0b0cf664ah,0a242a35bh,07f9707e3h,0126e48f7h,0c6832660h,01717bf54h,0fd12c72eh,0faae7332h,0995d586bh,027b52db7h,0832237c2h,0be29569eh,02a65e7dbh,0e8e4193eh,02eaa1bbbh,0152706dch
- DD 0bc60055bh,072bcd8b7h,056e27e4bh,003cc23eeh,0e4819370h,0ee337424h,00ad3da09h,0e2aa0e43h,06383c45dh,040b8524fh,042a41b25h,0d7663554h,0778a4797h,064efa6deh,07079adf4h,02042170ah
- DD 00bc6fb80h,0808b0b65h,03ffe2e6bh,05882e075h,02c83f549h,0d5ef2f7ch,09103b723h,054d63c80h,052a23f9bh,0f2f11bd6h,04b0b6587h,03670c319h,0b1580e9eh,055c4623bh,001efe220h,064edf7b2h
- DD 0d53c5c9dh,097091dcbh,0ac0a177bh,0f17624b6h,02cfe2dffh,0b0f13975h,06c7a574eh,0c1a35c0ah,093e79987h,0227d3146h,0e89cb80eh,00575bf30h,00d1883bbh,02f4e247fh,03274c3d0h,0ebd51226h
- DD 056ada97ah,05f3e51c8h,08f8b403eh,04afc964dh,0412e2979h,0a6f247abh,06f80ebdah,0675abd1bh,05e485a1dh,066a2bd72h,08f4f0b3ch,04b2a5cafh,01b847bbah,02626927fh,00502394dh,06c6fc7d9h
- DD 0a5659ae8h,0fea912bah,025e1a16eh,068363abah,0752c41ach,0b8842277h,02897c3fch,0fe545c28h,0dc4c696bh,02d36e9e7h,0fba977c5h,05806244ah,0e39508c1h,085665e9bh,06d12597bh,0f720ee25h
- DD 0d2337a31h,08a979129h,00f862bdch,05916868fh,05dd283bah,0048099d9h,0fe5bfb4eh,0e2d1eeb6h,07884005dh,082ef1c41h,0ffffcbaeh,0a2d4ec17h,08aa95e66h,09161c53fh,0c5fee0d0h,05ee104e1h
- DD 0c135b208h,0562e4cech,04783f47dh,074e1b265h,05a3f3b30h,06d2a506ch,0c16762fch,0ecead9f4h,0e286e5b9h,0f29dd4b2h,083bb3c61h,01b0fadc0h,07fac29a4h,07a75023eh,0c9477fa3h,0c086d5f1h
- DD 02f6f3076h,00fc61135h,0e3912a9ah,0c99ffa23h,0d2f8ba3dh,06a0b0685h,0e93358a4h,0fdc777e8h,035415f04h,094a787bbh,04d23fea4h,0640c2d6ah,0153a35b5h,09de917dah,05d5cd074h,0793e8d07h
- DD 02de45068h,0f4f87653h,09e2e1f6eh,037c7a7e8h,0a3584069h,0d0825fa2h,01727bf42h,0af2cea7ch,09e4785a9h,00360a4fbh,027299f4ah,0e5fda49ch,071ac2f71h,048068e13h,09077666fh,083d0687bh
- DD 015d02819h,06d3883b2h,040dd9a35h,06d0d7550h,01d2b469fh,061d7cbf9h,02efc3115h,0f97b232fh,0b24bcbc7h,0a551d750h,088a1e356h,011ea4949h,093cb7501h,07669f031h,0ca737b8ah,0595dc55eh
- DD 0d837879fh,0a4a319ach,0ed6b67b0h,06fc1b49eh,032f1f3afh,0e3959933h,065432a2eh,0966742ebh,0b4966228h,04b8dc9feh,043f43950h,096cc6312h,0c9b731eeh,012068859h,056f79968h,07b948dc3h
- DD 0ed1f8008h,061e4ad32h,0d8b17538h,0e6c9267ah,0857ff6fbh,01ac7c5ebh,055f2fb10h,0994baaa8h,01d248018h,084cf14e1h,0628ac508h,05a39898bh,05fa944f5h,014fde97bh,0d12e5ac7h,0ed178030h
- DD 097e2feb4h,0042c2af4h,0aebf7313h,0d36a42d7h,0084ffdd7h,049d2c9ebh,02ef7c76ah,09f8aa54bh,009895e70h,09200b7bah,0ddb7fb58h,03bd0c66fh,078eb4cbbh,02d97d108h,0d84bde31h,02d431068h
- DD 0172ccd1fh,04b523eb7h,030a6a892h,07323cb28h,0cfe153ebh,097082ec0h,0f2aadb97h,0e97f6b6ah,0d1a83da1h,01d3d393eh,0804b2a68h,0a6a7f9c7h,02d0cb71eh,04a688b48h,040585278h,0a9b4cc5fh
- DD 0cb66e132h,05e5db46ah,00d925880h,0f1be963ah,00317b9e2h,0944a7027h,048603d48h,0e266f959h,05c208899h,098db6673h,0a2fb18a3h,090472447h,0777c619fh,08a966939h,02a3be21bh,03798142ah
- DD 03298b343h,0b4241cb1h,0b44f65a1h,0a3a14e49h,03ac77acdh,0c5f4d6cdh,052b6fc3ch,0d0288cb5h,01c040abch,0d5cc8c2fh,006bf9b4ah,0b675511eh,09b3aa441h,0d667da37h,051601f72h,0460d45ceh
- DD 06755ff89h,0e2f73c69h,0473017e6h,0dd3cf7e7h,03cf7600dh,08ef5689dh,0b1fc87b4h,0948dc4f8h,04ea53299h,0d9e9fe81h,098eb6028h,02d921ca2h,00c9803fch,0faecedfdh,04d7b4745h,0f38ae891h
- DD 0c5e3a3d8h,0d8c5fccfh,04079dfbfh,0befd904ch,0fead0197h,0bc6d6a58h,0695532a4h,039227077h,0dbef42f5h,009e23e6dh,0480a9908h,07e449b64h,0ad9a2e40h,07b969c1ah,09591c2a4h,06231d792h
- DD 00f664534h,087151456h,04b68f103h,085ceae7ch,065578ab9h,0ac09c4aeh,0f044b10ch,033ec6868h,03a8ec1f1h,06ac4832bh,05847d5efh,05509d128h,0763f1574h,0f909604fh,0c32f63c4h,0b16c4303h
- DD 07ca23cd3h,0b6ab2014h,0a391849dh,0caa7a5c6h,075678d94h,05b0673a3h,0dd303e64h,0c982ddd4h,05db6f971h,0fd7b000bh,06f876f92h,0bba2cb1fh,03c569426h,0c77332a3h,0570d74f8h,0a159100ch
- DD 0dec67ef5h,0fd16847fh,0233e76b7h,0742ee464h,0efc2b4c8h,00b8e4134h,042a3e521h,0ca640b86h,08ceb6aa9h,0653a0190h,0547852d5h,0313c300ch,06b237af7h,024e4ab12h,08bb47af8h,02ba90162h
- DD 0a8219bb7h,03d5e58d6h,01b06c57fh,0c691d0bdh,0d257576eh,00ae4cb10h,0d54a3dc3h,03569656ch,094cda03ah,0e5ebaebdh,0162bfe13h,0934e82d3h,0e251a0c6h,0450ac0bah,0dd6da526h,0480b9e11h
- DD 08cce08b5h,000467bc5h,07f178d55h,0b636458ch,0a677d806h,0c5748baeh,0dfa394ebh,02763a387h,07d3cebb6h,0a12b448ah,06f20d850h,0e7adda3eh,01558462ch,0f63ebce5h,0620088a8h,058b36143h
- DD 04d63c0eeh,08a2cc3cah,00fe948ceh,051233117h,0222ef33bh,07463fd85h,07c603d6ch,0adf0c7dch,0fe7765e5h,00ec32d3bh,0bf380409h,0ccaab359h,08e59319ch,0bdaa84d6h,09c80c34dh,0d9a4c280h
- DD 0a059c142h,0a9d89488h,0ff0b9346h,06f5ae714h,016fb3664h,0068f237dh,0363186ach,05853e4c4h,063c52f98h,0e2d87d23h,081828876h,02ec4a766h,0e14e7b1ch,047b864fah,069192408h,00c0bc0e5h
- DD 0b82e9f3eh,0e4d7681dh,0df25e13ch,083200f0bh,066f27280h,08909984ch,075f73227h,0462d7b00h,0f2651798h,0d90ba188h,036ab1c34h,074c6e18ch,05ef54359h,0ab256ea3h,0d1aa702fh,003466612h
- DD 02ed22e91h,0624d6049h,06f072822h,06fdfe0b5h,039ce2271h,0eeca1115h,0db01614fh,098100a4fh,0a35c628fh,0b6b0daa2h,0c87e9a47h,0b6f94d2eh,01d57d9ceh,0c6773259h,003884a7bh,0f70bfeech
- DD 0ed2bad01h,05fb35ccfh,01da6a5c7h,0a155cbe3h,030a92f8fh,0c2e2594ch,05bfafe43h,0649c89ceh,0e9ff257ah,0d158667dh,0f32c50aeh,09b359611h,0906014cfh,04b00b20bh,089bc7d3dh,0f3a8cfe3h
- DD 0248a7d06h,04ff23ffdh,0878873fah,080c5bfb4h,005745981h,0b7d9ad90h,03db01994h,0179c85dbh,061a6966ch,0ba41b062h,0eadce5a8h,04d82d052h,0a5e6a318h,09e91cd3bh,095b2dda0h,047795f4fh
- DD 0d55a897ch,0ecfd7c1fh,0b29110fbh,0009194abh,0e381d3b0h,05f0e2046h,0a98dd291h,05f3425f6h,0730d50dah,0bfa06687h,04b083b7fh,00423446ch,0d69d3417h,0397a247dh,0387ba42ah,0eb629f90h
- DD 0d5cd79bfh,01ee426cch,0946c6e18h,00032940bh,057477f58h,01b1e8ae0h,06d823278h,0e94f7d34h,0782ba21ah,0c747cb96h,0f72b33a5h,0c5254469h,0c7f80c81h,0772ef6deh,02cd9e6b5h,0d73acbfeh
- DD 049ee90d9h,04075b5b1h,0a06e9ebah,0785c339ah,0abf825e0h,0a1030d5bh,0a42931dch,0cec684c3h,0c1586e63h,042ab62c9h,05ab43f2bh,045431d66h,055f7835dh,057c8b2c0h,0c1b7f865h,0033da338h
- DD 0caa76097h,0283c7513h,036c83906h,00a624fa9h,0715af2c7h,06b20afech,0eba78bfdh,04b969974h,0d921d60eh,0220755cch,07baeca13h,09b944e10h,05ded93d4h,004819d51h,06dddfd27h,09bbff86eh
- DD 077adc612h,06b344130h,0bbd803a0h,0a7496529h,06d8805bdh,01a1baaa7h,0470343adh,0c8403902h,0175adff1h,039f59f66h,0b7d8c5b7h,00b26d7fbh,0529d75e3h,0a875f5ceh,041325cc2h,085efc7e9h
- DD 01ff6acd3h,021950b42h,053dc6909h,0ffe70484h,028766127h,0ff4cd0b2h,04fb7db2bh,0abdbe608h,05e1109e8h,0837c9228h,0f4645b5ah,026147d27h,0f7818ed8h,04d78f592h,0f247fa36h,0d394077eh
- DD 0488c171ah,00fb9c2d0h,013685278h,0a78bfbaah,0d5b1fa6ah,0edfbe268h,02b7eaba7h,00dceb8dbh,09ae2b710h,0bf9e8089h,0a4449c96h,0efde7ae6h,0cc143a46h,043b7716bh,0c3628c13h,0d7d34194h
- DD 03b3f64c9h,0508cec1ch,01e5edf3fh,0e20bc0bah,02f4318d4h,0da1deb85h,05c3fa443h,0d20ebe0dh,073241ea3h,0370b4ea7h,05e1a5f65h,061f1511ch,082681c62h,099a5e23dh,0a2f54c2dh,0d731e383h
- DD 083445904h,02692f36eh,0af45f9c0h,02e0ec469h,0c67528b7h,0905a3201h,0d0e5e542h,088f77f34h,05864687ch,0f67a8d29h,022df3562h,023b92eaeh,09bbec39eh,05c27014bh,09c0f0f8dh,07ef2f226h
- DD 0546c4d8dh,097359638h,092f24679h,05f9c3fc4h,0a8c8acd9h,0912e8bedh,0306634b0h,0ec3a318dh,0c31cb264h,080167f41h,0522113f2h,03db82f6fh,0dcafe197h,0b155bcd2h,043465283h,0fba1da59h
- DD 0b212cf53h,0a0425b8eh,0f8557c5fh,04f2e512eh,025c4d56ch,0c1286ff9h,0ee26c851h,0bb8a0feah,0e7d6107eh,0c28f70d2h,0e76265aah,07ee0c444h,01d1936b1h,03df277a4h,0ea9595ebh,01a556e3fh
- DD 0e7305683h,0258bbbf9h,007ef5be6h,031eea5bfh,046c814c1h,00deb0e4ah,0a7b730ddh,05cee8449h,0a0182bdeh,0eab495c5h,09e27a6b4h,0ee759f87h,080e518cah,0c2cf6a68h,0f14cf3f4h,025e8013fh
- DD 07e8d7a14h,08fc44140h,09556f36ah,0bb1ff3cah,014600044h,06a844385h,07451ae63h,0ba3f0c4ah,01f9af32ah,0dfcac25bh,0b1f2214bh,001e0db86h,0a4b596ach,04e9a5bc2h,0026c2c08h,083927681h
- DD 07acaca28h,03ec832e7h,0c7385b29h,01bfeea57h,0fd1eaf38h,0068212e3h,06acf8ccch,0c1329830h,02aac9e59h,0b909f2dbh,0b661782ah,05748060dh,0c79b7a01h,0c5ab2632h,000017626h,0da44c6c6h
- DD 0a7ea82f0h,0f26c00e8h,0e4299aafh,099cac80dh,07ed78be1h,0d66fe3b6h,0648d02cdh,0305f725fh,0623fb21bh,033ed1bc4h,07a6319adh,0fa70533eh,0be5ffb3eh,017ab562dh,056674741h,006374994h
- DD 05c46aa8eh,069d44ed6h,0a8d063d1h,02100d5d3h,0a2d17c36h,0cb9727eah,08add53b7h,04c2bab1bh,015426704h,0a084e90ch,0a837ebeah,0778afcd3h,07ce477f8h,06651f701h,046fb7a8bh,0a0624998h
- DD 0ed8a6e19h,0dc1e6828h,04189d9c7h,033fc2336h,0671c39bch,0026f8fe2h,0bc6f9915h,0d40c4ccdh,0f80e75cah,0afa135bbh,022adff2ch,012c651a0h,04f51ad96h,0c40a04bdh,0bbe4e832h,004820109h
- DD 07f4c04cch,03667eb1ah,0a9404f84h,059556621h,07eceb50ah,071cdf653h,09b8335fah,0994a44a6h,0dbeb9b69h,0d7faf819h,0eed4350dh,0473c5680h,0da44bba2h,0b6658466h,0872bdbf3h,00d1bc780h
- DD 0a1962f91h,0e535f175h,0ed58f5a7h,06ed7e061h,02089a233h,0177aa4c0h,0e539b413h,00dbcb03ah,0bb32e38eh,0e3dc424eh,06806701eh,06472e5efh,0814be9eeh,0dd47ff98h,035ace009h,06b60cfffh
- DD 09ff91fe5h,0b8d3d931h,0f0518eedh,0039c4800h,09182cb26h,095c37632h,082fc568dh,00763a434h,0383e76bah,0707c04d5h,0824e8197h,0ac98b930h,091230de0h,092bf7c8fh,040959b70h,090876a01h
- DD 005968b80h,0db6d96f3h,0089f73b9h,0380a0913h,0c2c61e01h,07da70b83h,0569b38c7h,095fb8394h,080edfe2fh,09a3c6512h,08faeaf82h,08f726bb9h,078424bf8h,08010a4a0h,00e844970h,029672044h
- DD 07a2ad62ah,063c5cb81h,0ac62ff54h,07ef2b6b9h,0b3ad9db5h,03749bba4h,046d5a617h,0ad311f2ch,0c2ff3b6dh,0b77a8087h,0367834ffh,0b46feaf3h,075d6b138h,0f8aa266dh,0ec008188h,0fa38d320h
- DD 0696946fch,0486d8ffah,0b9cba56dh,050fbc6d8h,090f35a15h,07e3d423eh,0c0dd962ch,07c3da195h,03cfd5d8bh,0e673fdb0h,0889dfca5h,00704b7c2h,0f52305aah,0f6ce581fh,0914d5e53h,0399d49ebh
- DD 06ec293cdh,0380a496dh,08e7051f5h,0733dbda7h,0b849140ah,0037e388dh,05946dbf6h,0ee4b32b0h,0cae368d1h,0b1c4fda9h,0fdb0b2f3h,05001a7b0h,02e3ac46eh,06df59374h,039b3e656h,04af675f2h
- DD 039949296h,044e38110h,0361db1b5h,05b63827bh,0206eaff5h,03e5323edh,0c21f4290h,0942370d2h,0e0d985a1h,0f2caaf2eh,07239846dh,0192cc64bh,0ae6312f8h,07c0b8f47h,096620108h,07dc61f91h
- DD 0c2da7de9h,0b830fb5bh,00ff8d3beh,0d0e643dfh,0188a9641h,031ee77bah,0bcf6d502h,04e8aa3aah,09a49110fh,0f9fb6532h,02dd6b220h,0d18317f6h,052c3ea5ah,07e3ced41h,07d579c4ah,00d296a14h
- DD 0ed4c3717h,035d6a53eh,03d0ed2a3h,09f8240cfh,0e5543aa5h,08c0d4d05h,0dd33b4b4h,045d5bbfbh,0137fd28eh,0fa04cc73h,0c73b3ffdh,0862ac6efh,031f51ef2h,0403ff9f5h,0bc73f5a2h,034d5e0fch
- DD 008913f4fh,0f2526820h,0eac93d95h,0ea20ed61h,06ca6b26ch,051ed38b4h,0ea4327b0h,08662dcbch,0725d2aaah,06daf295ch,08e52dcdah,0bad2752fh,00b17dacch,02210e721h,0d51e8232h,0a37f7912h
- DD 044cc3addh,04f7081e1h,087be82cfh,0d5ffa1d6h,00edd6472h,089890b6ch,03ed17863h,0ada26e1ah,063483caah,0276f2715h,02f6077fdh,0e6924cd9h,00a466e3ch,005a7fe98h,0b1902d1fh,0f1c794b0h
- DD 082a8042ch,0e5213688h,0cd278298h,0d931cfafh,0f597a740h,0069a0ae0h,0eb59107ch,00adbb3f3h,05eaa8eb8h,0983e951eh,011b48e78h,0e663a8b5h,08a03f2c5h,01631cc0dh,011e271e2h,07577c11eh
- DD 008369a90h,033b2385ch,0190eb4f8h,02990c59bh,0c68eac80h,0819a6145h,02ec4a014h,07a786d62h,020ac3a8dh,033faadbeh,05aba2d30h,031a21781h,0dba4f565h,0209d2742h,055aa0fbbh,0db2ce9e3h
- DD 0168984dfh,08cef334bh,033879638h,0e81dce17h,0263720f0h,0f6e6949ch,0f593cbech,05c56feafh,0fde58c84h,08bff5601h,02eccb314h,074e24117h,04c9a8a78h,0bcf01b61h,0544c9868h,0a233e35eh
- DD 08bd7aff1h,0b3156bf3h,01d81b146h,01b5ee4cbh,0d628a915h,07ba1ac41h,0fd89699eh,08f3a8f9ch,0a0748be7h,07329b9c9h,0a92e621fh,01d391c95h,04d10a837h,0e51e6b21h,04947b435h,0d255f53ah
- DD 0f1788ee3h,007669e04h,0a86938a2h,0c14f27afh,0e93a01c0h,08b47a334h,0d9366808h,0ff627438h,0ca2a5965h,07a0985d8h,0d6e9b9b3h,03d9a5542h,04cf972e8h,0c23eb80bh,04fdf72fdh,05c1c33bbh
- DD 074a86108h,00c4a58d4h,0ee4c5d90h,0f8048a8fh,0e86d4c80h,0e3c7c924h,0056a1e60h,028c889deh,0b214a040h,057e2662eh,037e10347h,0e8c48e98h,080ac748ah,087742862h,0186b06f2h,0f1c24022h
- DD 05f74040ah,0ac2dd4c3h,0fceac957h,0409aeb71h,055c4ec23h,04fbad782h,08a7b76ech,0b359ed61h,0ed6f4a60h,012744926h,04b912de3h,0e21e8d7fh,0fc705a59h,0e2575a59h,0ed2dbc0eh,072f1d4deh
- DD 0eb7926b8h,03d2b24b9h,0cdbe5509h,0bff88cb3h,0e4dd640bh,0d0f399afh,02f76ed45h,03c5fe130h,03764fb3dh,06f3562f4h,03151b62dh,07b5af318h,0d79ce5f3h,0d5bd0bc7h,0ec66890fh,0fdaf6b20h
- DD 06063540ch,0735c67ech,0e5f9cb8fh,050b259c2h,03f99c6abh,0b8734f9ah,0a3a7bc85h,0f8cc13d5h,0c5217659h,080c1b305h,04ec12a54h,0fe5364d4h,0681345feh,0bd87045eh,0582f897fh,07f8efeb1h
- DD 0d5923359h,0e8cbf1e5h,0539b9fb0h,0db0cea9dh,049859b98h,00c5b34cfh,0a4403cc6h,05e583c56h,0d48185b7h,011fc1a2dh,06e521787h,0c93fbc7eh,005105b8bh,047e7a058h,0db8260c8h,07b4d4d58h
- DD 046eb842ah,0e33930b0h,07bdae56dh,08e844a9ah,013f7fdfch,034ef3a9eh,0636ca176h,0b3768f82h,04e09e61ch,02821f4e0h,0a0c7cddch,0414dc3a1h,054945fcdh,0d5379437h,0b3555ff1h,0151b6eefh
- DD 06339c083h,0b31bd613h,0dfb64701h,039ff8155h,0e29604abh,07c3388d2h,0a6b10442h,01e19084bh,0eccd47efh,017cf54c0h,04a5dfb30h,089693385h,047daf9f6h,069d023fbh,07d91d959h,09222840bh
- DD 0803bac62h,0439108f5h,0379bd45fh,00b7dd91dh,0ca63c581h,0d651e827h,0509c104fh,05c5d75f6h,01f2dc308h,07d5fc738h,0d98454beh,020faa7bfh,0a517b031h,095374beeh,0642692ach,0f036b9b1h
- DD 039842194h,0c5106109h,049d05295h,0b7e2353eh,0efb42ee0h,0fc8c1d5ch,008ce811ch,0e04884ebh,07419f40eh,0f1f75d81h,0a995c241h,05b0ac162h,0c4c55646h,0120921bbh,08d33cf97h,0713520c2h
- DD 0e98c5100h,0b4a65a5ch,02ddd0f5ah,06cec871dh,09ba2e78bh,0251f0b7fh,0ce3a2a5fh,0224a8434h,025f5c46fh,026827f61h,048545ec0h,06a22bedch,0b1bb5cdch,025ae5fa0h,0fcb9b98fh,0d693682fh
- DD 091e5d7d3h,032027fe8h,073a07678h,0f14b7d17h,0c0dfdd61h,0f88497b3h,02a8c4f48h,0f7c2eec0h,03756e621h,0aa5573f4h,01825b948h,0c013a240h,063878572h,01c03b345h,0653a4184h,0a0472beah
- DD 00ac69a80h,0f4222e27h,0f51e54f6h,034096d25h,08fffa591h,000a648cbh,069b6527fh,04e87acdch,0e285ccb4h,00575e037h,050ddcf52h,0188089e4h,0870ff719h,0aa96c9a8h,01fc7e369h,074a56cd8h
- DD 01726931ah,041d04ee2h,03660ecfdh,00bbbb2c8h,024818e18h,0a6ef6de5h,0e7d57887h,0e421cc51h,0bea87be6h,0f127d208h,0b1cdd682h,016a475d3h,0439b63f7h,09db1b684h,0f0f113b6h,05359b3dbh
- DD 08bf06e31h,0dfccf1deh,0dd383901h,01fdf8f44h,05017e7d2h,010775cadh,058d11eefh,0dfc3a597h,0b1ecff10h,06ec9c8a0h,028400549h,0ee6ed6cch,01b4f8d73h,0b5ad7baeh,0e00aaab9h,061b4f11dh
- DD 0d4eff2d7h,07b32d69bh,04288b60fh,088ae6771h,037a1e723h,0159461b4h,0570aae8ch,01f3d4789h,07f9871dah,0869118c0h,0f635e278h,035fbda78h,0e1541dach,0738f3641h,0c0dae45fh,06794b13ah
- DD 009cc0917h,0065064ach,0c68540fdh,027c53729h,0ef227671h,00d2d4c8eh,0a1785a04h,0d23a9f80h,052650359h,098c59528h,074a1acadh,0fa09ad01h,00b55bf5ch,0082d5a29h,0419b8084h,0a40f1c67h
- DD 0dcc18770h,03a5c752eh,08825c3a5h,04baf1f2fh,021b153edh,0ebd63f74h,0b2f64723h,0a2383e47h,02646d19ah,0e7bf620ah,003c83ffdh,056cb44ech,04f6be9f1h,0af7267c9h,0c06bb5e9h,08b2dfd7bh
- DD 0a672c5c7h,0b87072f2h,00d53c5e2h,0eacb11c8h,0ff435932h,022dac29dh,04408693ch,037bdb99dh,02899c20fh,0f6e62fb6h,0447ece24h,03535d512h,0ff577ce3h,0fbdc6b88h,0190575f2h,0726693bdh
- DD 0ab4b35a2h,06772b0e5h,0f5eeaacfh,01d8b6001h,0795b9580h,0728f7ce4h,041fb81dah,04a20ed2ah,04fec01e6h,09f685cd4h,0a7ff50adh,03ed7ddcch,00c2d97fdh,0460fd264h,0eb82f4f9h,03a241426h
- DD 06a8ea820h,017d1df2ch,0f22cc254h,0b2b50d3bh,0b7291426h,003856cbah,004f5ee39h,087fd26aeh,002bee4bah,09cb696cch,006820fd6h,053121804h,00212e985h,0a5dfc269h,0160f9a09h,0666f7ffah
- DD 0bccd9617h,0c503cd33h,0ba7730a3h,0365dede4h,05ddb0786h,0798c6355h,0fc9cd3bch,0a6c3200eh,0e5e35efdh,0060ffb2ch,05555a1c1h,099a4e25bh,0f70b3751h,011d95375h,0160e1bf6h,00a57354ah
- DD 0f8e4b065h,0ecb3ae4bh,02e53022bh,007a834c4h,08692ed96h,01cd300b3h,061ee14ech,016a6f792h,06a8649edh,08f1063c6h,0869f3e14h,0fbcdfcfeh,000a7b3ech,02cfb97c1h,07130c2f1h,0cea49b3ch
- DD 0e9d96488h,0462d044fh,08182a0c1h,04b53d52eh,00391e9e9h,084b6ddd3h,0b1741a09h,080ab7b48h,027d3317fh,0ec0e15d4h,01a64671eh,08dfc1ddbh,0d49c5b92h,093cc5d5fh,03674a331h,0c995d53dh
- DD 0090090aeh,0302e41ech,0edb06830h,02278a0cch,0fbc99690h,01d025932h,0b80d68dah,00c32fbd2h,0f341a6c1h,0d79146dah,01bef68a0h,0ae0ba139h,08d774b3ah,0c6b8a563h,0880ba4d7h,01cf307bdh
- DD 019803511h,0c033bdc7h,08888c3beh,0a9f97b3bh,085c6d05eh,03d68aebch,0193919ebh,0c3b88a9dh,0c48b0ee3h,02d300748h,007a746c1h,07506bc7ch,06e6d57f3h,0fc48437ch,0cfeaa91ah,05bd71587h
- DD 0c1bc5225h,0a4ed0408h,02719226dh,0d0b946dbh,0758d2d43h,0109ecd62h,02751759bh,075c8485ah,09ce4177ah,0b0b75f49h,079c10c3dh,04fa61a1eh,0a167fcd7h,0c062d300h,0750f0fa8h,04df3874ch
- DD 083dfedc9h,029ae2cf9h,08d87631ah,0f8437134h,07429c8d2h,0af571711h,0146d9272h,018d15867h,069769bb7h,083053ecfh,0c479ab82h,0c55eb856h,021b0f4b2h,05ef7791ch,03d491525h,0aa5956bah
- DD 09fe20ebah,0407a96c2h,0e52a5ad3h,0f27168bbh,0bf1d9d89h,043b60ab3h,0710e727ah,0e45c51efh,0099b4221h,0dfca5276h,02557a159h,08dc6407ch,091035895h,00ead8335h,09c55dc32h,00a9db957h
- DD 0df61bc76h,0e40736d3h,03f778cdbh,013a619c0h,0c56ea28fh,06dd921a4h,02fa647b4h,076a52433h,0ac5bdc5dh,023591891h,0bac7dc01h,0ff4a1a72h,062df8453h,09905e261h,0e63b265fh,03ac045dfh
- DD 0ad53dba7h,08a3f341bh,0837b625ah,08ec269cch,03ae31189h,0d71a2782h,055e96120h,08fb4f9a3h,0ff9875cfh,0804af823h,05d442a9bh,023224f57h,0ecc62679h,01c4d3b9eh,0a0e7ddb1h,091da22fbh
- DD 06c04a661h,0a370324dh,05e376d17h,09710d3b6h,03044e357h,0ed8c98f0h,06422701ch,0c364ebbeh,07733d61ch,0347f5d51h,0cea826c3h,0d55644b9h,055a25548h,080c6e0adh,0844220a7h,00aa7641dh
- DD 031810660h,01438ec81h,0de4b4043h,09dfa6507h,0cc3e0273h,010b515d8h,028d8cfb2h,01b6066ddh,09c9efebdh,0d3b04591h,0a21c1ff4h,0425d4bdfh,0d57607d3h,05fe5af19h,054481084h,0bbf773f7h
- DD 094b03ed1h,08435bd69h,0634cc546h,0d9ad1de3h,000e420cah,02cf423fch,0a03096ddh,0eed26d80h,0a4db09d2h,0d7f60be7h,0960622f7h,0f47f569dh,07296c729h,0e5925fd7h,026ca2715h,0eff2db26h
- DD 0b913e759h,0a6fcd014h,08ff4de93h,053da4786h,0c32068e1h,014616d79h,0ccdf352eh,0b187d664h,01dc90b59h,0f7afb650h,07daa1b26h,08170e943h,0700c0a84h,0c8e3bdd8h,06482bdfah,06e8d345fh
- DD 0c5c5ea50h,084cfbfa1h,067960681h,0d3baf14ch,00dd50942h,026398403h,04716a663h,0e4b7839ch,0e7de6dc0h,0d5f1f794h,0622aa7ceh,05cd0f4d4h,059acfeech,05295f3f1h,0953e0607h,08d933552h
- DD 0776c5722h,0c7db8ec5h,02b5f290ch,0dc467e62h,04ff425a9h,0d4297e70h,00cf7bb72h,04be924c1h,0a1892131h,00d5dc5aeh,0a705c992h,08bf8a8e3h,07a305ac5h,073a0b064h,09a8c77a8h,000c9ca4eh
- DD 083774bddh,05dfee80fh,085734485h,063131602h,0914a69a9h,0a1b524aeh,0d4e300d7h,0ebc2ffafh,07cfa46a5h,052c93db7h,021653b50h,071e6161fh,0a4bc580ah,03574fc57h,0e1bc1253h,0c09015ddh
- DD 0d174d7aah,04b7b47b2h,0f3a15d04h,04072d8e8h,0d6fa07edh,0eeb7d47fh,0edbdafb1h,06f2b9ff9h,03760fe8ah,018c51615h,0f06c6c13h,07a96e6bfh,00ea2d071h,04d7a0410h,00be2a5ceh,0a1914e9bh
- DD 0d8a3c5cfh,05726e357h,02abb2b13h,01197ecc3h,031ae88ddh,06c0d7f7fh,0fdbb3efeh,015b20d1ah,070584039h,0cd06aa26h,0a7dc9747h,02277c969h,07855d815h,0bca69587h,05188b32ah,0899ea238h
- DD 0760c1c9dh,037d9228bh,09b5c18dah,0c7efbb11h,019f6dbc5h,07f0d1bc8h,007e6905bh,04875384bh,03ba8cd86h,0c7c50baah,0c2905de0h,0b0ce40fbh,07a231952h,070840673h,0cf43de26h,0a912a262h
- DD 0eb5b76c1h,09c38ddcch,026fc0ab4h,0746f5285h,0d62c269fh,052a63a50h,099458621h,060049c55h,03c2f7c9eh,0e7f48f82h,0917d5cf3h,06bd99043h,08701f469h,0eb1317a8h,09a449fe0h,0bd3fe2edh
- DD 012ef3d36h,0421e79cah,03e7ea5deh,09ee3c36ch,0cdff36f7h,0e48198b5h,0c6b82228h,0aff4f967h,0c47adb7eh,015e19dd0h,0032e7dfah,045699b23h,01fae026ah,040680c8bh,0550dbf4dh,05a347a48h
- DD 03cef0d7dh,0e652533bh,02bbb4381h,0d94f7b18h,00e80f500h,0838752beh,09e9c9bfbh,08e6e2488h,016caca6ah,0c9751697h,038531ad9h,0866c49d8h,07151ade1h,0c917e239h,06037c407h,02d016ec1h
- DD 000eac3f9h,0a407ccc9h,0e2ed4748h,0835f6280h,01cc98e0dh,0cc54c347h,0dcb572ebh,00e969937h,08f30c9cbh,01b16c8e8h,0373c4661h,0a606ae75h,035502cabh,047aa689bh,04d9bb64fh,0f89014aeh
- DD 031c71f7bh,0202f6a9ch,0296ffe5ch,001f95aa3h,053cec3a3h,05fc06014h,05f498a45h,0eb991237h,05d91ba87h,0ae9a935eh,00b564a19h,0c6ac6281h,03bd44e69h,08a8fe81ch,09dd11d45h,07c8b467fh
- DD 0ea5b8e69h,0f772251fh,0c5b75fbch,0aeecb3bdh,0887ff0e5h,01aca3331h,019f0a131h,0be5d49ffh,0e5c8646fh,0582c13aah,020e19980h,0dbaa12e8h,0f7abbd94h,08f40f31ah,01dfc7663h,01f13f5a8h
- DD 0aceb4fc0h,05d81f1eeh,05e6f0f42h,036256002h,0751370c8h,04b67d6d7h,003e80589h,02608b698h,005268301h,0cfc0d2fch,040309212h,0a6943d39h,01fd0e1c2h,0192a90c2h,037f1dc76h,0b209f113h
- DD 097bf1298h,0efcc5e06h,0219d639eh,0cbdb6730h,0b81e8c6fh,0d009c116h,01a7ce2e5h,0a3ffdde3h,0a914d3bah,0c53fbaaah,088df85eeh,0836d500fh,066ee0751h,0d98dc71bh,0714516fdh,05a3d7005h
- DD 039eedbbah,021d3634dh,00455a46dh,035cd2e68h,0f9d7eb0ch,0c8cafe65h,000cefb3eh,0bda3ce9eh,02c9cf7a4h,0ddc17a60h,07bcb8773h,001572ee4h,08c7548dfh,0a92b2b01h,0a84600e3h,0732fd309h
- DD 016543a40h,0e22109c7h,0fede3c6ch,09acafd36h,06824e614h,0fb206852h,0da25dca0h,02a4544a9h,091d60b06h,025985262h,028753545h,0281b7be9h,090f13b27h,0ec667b1ah,0940e2eb4h,033a83affh
- DD 0d5d721d5h,080009862h,05bd3a182h,00c3357a3h,07aa2cda4h,027f3a83bh,0f6f83085h,0b58ae74eh,02e6dad6bh,02a911a81h,0f43d6c5bh,0de286051h,0f996c4d8h,04bdccc41h,00ae1e24eh,0e7312ec0h
- DD 06e6485b3h,0f8d112e7h,0771c52f8h,04d3e24dbh,0684a2f6dh,048e3ee41h,021d95551h,07161957dh,0cdb12a6ch,019631283h,02e50e164h,0bf3fa882h,03166cc73h,0f6254b63h,0aee8cc38h,03aefa7aeh
- DD 03b36f9fdh,079b0fe62h,0fde19fc0h,026543b23h,0958482efh,0136e64a0h,09b095825h,023f63771h,0b6a1142eh,014cfd596h,0335aac0bh,05ea6aac6h,0f3081dd5h,086a0e8bdh,0003dc12ah,05fb89d79h
- DD 0f72e34d4h,0f615c33ah,0110eec35h,00bd9ea40h,0c1dea34eh,01c12bc5bh,049ae4699h,0686584c9h,08c97b942h,013ad95d3h,04e5c7562h,04609561ah,0f2737f89h,09e94a4aeh,0371c78b6h,0f57594c6h
- DD 0e3779ee3h,00f0165fch,0bd495d9eh,0e00e7f9dh,020284e7ah,01fa4efa2h,047ac6219h,04564badeh,0c4708e8eh,090e6312ah,0a71e9adfh,04f5725fbh,03d684b9fh,0e95f55aeh,01e94b415h,047f7ccb1h
- DD 08d946581h,07322851bh,0bdf4a012h,0f0d13133h,06584dae0h,0a3510f69h,03c9f6c6dh,003a7c171h,0e475381ah,05be97f38h,085823334h,0ca1ba422h,00be17ddah,0f83cc5c7h,00b918c0fh,0158b1494h
- DD 0522e6b69h,0da3a77e5h,0bbcd6c18h,069c908c3h,0d924fd56h,01f1b9e48h,0aa4bb3f7h,037c64e36h,0ee478d7dh,05a4fdbdfh,00193f7a0h,0ba75c8bch,056cd16dfh,084bc1e84h,046fad151h,01fb08f08h
- DD 0842e9f30h,08a7cabf9h,05eab83afh,0a331d4bfh,0017f2a6ah,0d272cfbah,083aba0e3h,027560abch,00e3a6b75h,094b83387h,06b9f50f5h,025c6aea2h,0b5fdf6d0h,0803d691dh,0e6333514h,003b77509h
- DD 061a341c1h,036178903h,00cfd6142h,03604dc60h,08533316ch,0022295ebh,044af2922h,03dbde4ach,01c7eef69h,0898afc5dh,0d14f4fa1h,058896805h,0203c21cah,005002160h,040ef730bh,06f0d1f30h
- DD 0196224f8h,08e8c44d4h,0374d079dh,075a4ab95h,07d48f123h,079085ecch,01bf65ad8h,056f04d31h,0bda602b2h,0e220bf1ch,0f9612c69h,073ee1742h,0084fd06bh,076008fc8h,0f11380d1h,04000ef9fh
- DD 012cfe297h,048201b4bh,0292f74e5h,03eee129ch,0c9e874e8h,0e1fe114eh,092c5fc41h,0899b055ch,03a39c8cfh,04e477a64h,078963cc9h,082f09efeh,0d333f863h,06fd3fd8fh,0dc949c63h,085132b2ah
- DD 0516eb17bh,07e06a3abh,0d2c7372bh,073bec06fh,0ba896da6h,0e4f74f55h,08e9eb40fh,0bb4afef8h,0e61d66b0h,02d75bec8h,0ef29300bh,002bda4b4h,0026baa5ah,08bbaa8deh,0a07f4440h,0ff54befdh
- DD 0be7a2af3h,0bd9b8b1dh,04fb74a72h,0ec51caa9h,063879697h,0b9937a4bh,0ec2687d5h,07c9a9d20h,06ef5f014h,01773e44fh,0e90c6900h,08abcf412h,08142161eh,0387bd022h,0fcb6ff2ah,050393755h
- DD 0ed6def63h,09813fd56h,07d53106ch,053cf6482h,0431f7ac1h,0991a35bdh,063e65fafh,0f1e274ddh,044cc7880h,0f63ffa3ch,07c256981h,0411a426bh,093a420e0h,0b698b9fdh,0ae53f8feh,089fdddc0h
- DD 032398baah,0766e0722h,05cfca031h,0205fee42h,07a029cf2h,0a49f5341h,04023890dh,0a88c68b8h,07337aaa8h,0bc275041h,00eb384f4h,09ed364adh,029aba92fh,0e0816f85h,004e38a88h,02e9e1941h
- DD 03dafd2d5h,057eef44ah,097ed98d8h,035d1fae5h,02307f9b1h,050628c09h,0d6cba5c6h,009d84aaeh,088aaa691h,067071bc7h,0afe6cb03h,02dea57a9h,03d78ac01h,0dfe11bb4h,07fd7aa51h,07286418ch
- DD 077f7195ah,0fabf7709h,0adeb838fh,08ec86167h,0bb4f012dh,0ea1285a8h,09a3eab3fh,0d6883503h,0309004c2h,0ee5d24f8h,013ffe95eh,0a96e4b76h,0bd223ea4h,00cdffe12h,0b6739a53h,08f5c2ee5h
- DD 0dd968198h,05cb4aaa5h,072413a6ch,0fa131c52h,09536d903h,053d46a90h,048606d8eh,0b270f0d3h,0a053a3bch,0518c7564h,01a86caefh,0088254b7h,00ab5efd0h,0b3ba8cb4h,04605945dh,05c59900eh
- DD 0a1887395h,0ecace1ddh,0932a65deh,040960f36h,03aa95529h,09611ff5ch,07c1e5a36h,0c58215b0h,0f0e1a524h,0d48c9b58h,0f590dfb8h,0b406856bh,09cd95662h,0c7605e04h,0a33ecf82h,00dd036eeh
- DD 0c33156b3h,0a50171ach,04a80172eh,0f09d24eah,076dc8eefh,04e1f72c6h,05e3d44eeh,0e60caadch,0979b1d8fh,0006ef8a6h,097788d26h,060908a1ch,0266feec0h,06e08f95bh,022e8c94eh,0618427c2h
- DD 059145a65h,03d613339h,0fa406337h,0cd9bc368h,02d8a52a0h,082d11be3h,097a1c590h,0f6877b27h,0f5cbdb25h,0837a819bh,0de090249h,02a4fd1d8h,074990e5fh,0622a7de7h,07945511bh,0840fa5a0h
- DD 06558842dh,030b974beh,017f3d0a6h,070df8c64h,07542e46dh,07c803520h,0e4ecc823h,07251fe7fh,05e9aac9ah,0e59134cbh,0f0045d71h,011bb0934h,0dbcb1d4eh,053e5d9b5h,092defc91h,08d97a905h
- DD 07946d3f9h,0fe289327h,007472273h,0e132bd24h,01eb6ae86h,0eeeb510ch,0f0595067h,0777708c5h,01297029eh,018e2c8cdh,0bbf9305eh,02c61095ch,06b85d6d9h,0e466c258h,0da1ea530h,08ac06c36h
- DD 0a1304668h,0a365dc39h,007f89606h,0e4a9c885h,0acc7228dh,065a4898fh,084ca8303h,03e2347ffh,0ea7d23a3h,0a5f6fb77h,0672a71cdh,02fac257dh,07e6a44d3h,06908bef8h,0891d3d7ah,08ff87566h
- DD 06b0cf82eh,0e58e90b3h,02615b5e7h,06438d246h,0669c145ah,007b1f8fch,036f1e1cbh,0b0d8b2dah,0d9184c4dh,054d5dadbh,0f93d9976h,03dbb18d5h,0d1147d47h,00a3e0f56h,0a0a48609h,02afa8c8dh
- DD 0bc36742ch,0275353e8h,0eea0ed90h,0898f427eh,03e477b00h,026f4947eh,0308741e3h,08ad8848ah,0d74a2a46h,06c703c38h,09ba17ba2h,05e3e05a9h,04ab9a9e4h,0c1fa6f66h,03841d6ech,0474a2d9ah
- DD 0653ae326h,0871239adh,0a74cbb43h,014bcf72ah,020d4c083h,08737650eh,0110ed4afh,03df86536h,0b53ca555h,0d2d86fe7h,0abd5d538h,0688cb00dh,01ad38468h,0cf81bda3h,0f01167b6h,07ccfe3cch
- DD 06c4c1fe6h,0cf4f47e0h,0298bbb79h,0557e1f1ah,030d45a14h,0f93b974fh,00baf97c4h,0174a1d2dh,0c51fbf53h,07a003b30h,0ee68b225h,0d8940991h,01c0f4173h,05b0aa7b7h,0a20a7153h,0975797c9h
- DD 0e3533d77h,026e08c07h,02e341c99h,0d7222e6ah,08d2dc4edh,09d60ec3dh,07c476cf8h,0bdfe0d8fh,01d056605h,01fe59ab6h,086a8551fh,0a9ea9df6h,047fb8d8ch,08489941eh,04a7f1b10h,0feb874ebh
- DD 07ee0d98fh,0fe5fea86h,0dbf61864h,0201ad34bh,037c031d4h,045d8fe47h,0795f0822h,0d5f49faeh,0c7f4a40ch,0db0fb291h,0730ddd92h,02e69d9c1h,049d76987h,0754e1054h,07662db87h,08a24911dh
- DD 060a71676h,061fc1810h,0f66a8ad1h,0e852d1a8h,06417231eh,0172bbd65h,03babb11fh,00d6de7bdh,0c8e347f8h,06fde6f88h,09bd99cc3h,01c587547h,034076950h,078e54ed0h,0796e83bah,097f0f334h
- DD 04924867ah,0e4dbe1ceh,060b84917h,0bd5f51b0h,03cb09a79h,037530040h,0ff1743d8h,0db3fe0f8h,0556fa9dbh,0ed7894d8h,023412fbfh,0fa262169h,0ba7b9291h,0563be0dbh,00c9fb234h,06ca8b8c0h
- DD 0bd763802h,0ed406aa9h,065303da1h,0c21486a0h,0c7e62ec4h,061ae291eh,0df99333eh,0622a0492h,0bb7a8ee0h,07fd80c9dh,06c01aedbh,0dc2ed3bch,008be74ech,035c35a12h,0469f671fh,0d540cb1ah
- DD 0cf84f6c7h,0d16ced4eh,02d090f43h,08561fb9ch,06f239db4h,07e693d79h,077bd0d94h,0a736f928h,02c1950eeh,007b4d929h,056dc11b3h,0da177543h,07a6a878eh,0a5dfbbaah,04decb08ah,01c70cb29h
- DD 06f0f7c50h,0fba28c8bh,0854dcc6dh,0a8eba2b8h,036b78642h,05ff8e89ah,0f6873adfh,0070c1c8eh,06484d2e4h,0bbd3c371h,00d414129h,0fb78318fh,06ad93b0bh,02621a39ch,0a9e917f7h,0979d74c2h
- DD 061fb0428h,0fc195647h,0bee624d4h,04d78954ah,0b8ae86fdh,0b94896e0h,0c91c8b13h,06667ac0ch,043bcf832h,09f180512h,0a0010137h,0fbadf8b7h,0b3ba8aa7h,0c69b4089h,0e687ce85h,0fac4bacdh
- DD 0977eab40h,09164088dh,02760b390h,051f4c5b6h,0340dd553h,0d238238fh,0db1d31c9h,0358566c3h,05068f5ffh,03a5ad69eh,0daff6b06h,0f31435fch,0d6debff0h,0ae549a5bh,075e01331h,059e5f0b7h
- DD 098559acfh,05d492fb8h,04db79b50h,096018c2eh,0609f66aah,055f4a48fh,04900a14fh,01943b3afh,015a40d39h,0c22496dfh,04c20f7c5h,0b2a44684h,03b98404ch,076a35afah,0ff5d1b77h,0bec75725h
- DD 0bea06444h,0b67aa163h,0f724b6f2h,027e95bb2h,0d238c8abh,03c20e3e9h,0ddd6ae17h,01213754eh,0716e0f74h,08c431020h,0ffc095c2h,06679c82eh,0d0ac2932h,02eb3adf4h,001bb7a76h,02cc970d3h
- DD 0740f0e66h,070c71f2fh,02b6b23cch,0545c616bh,0b40a8bd7h,04528cfcbh,02ab27722h,0ff839633h,0025ac99ah,0049127d9h,02b63e33bh,0d314d4a0h,028d84519h,0c8c310e7h,0b3bc84bah,00fcb8983h
- DD 038634818h,02cc52261h,0b44c2e0bh,0501814f4h,054dfdba3h,0f7e181aah,0e759718ch,0cfd58ff0h,0d3b507a8h,0f90cdb14h,0c50bdad8h,057bd478eh,050e5f9aah,029c197e2h,0e40bc855h,04db6eef8h
- DD 0d1fc0654h,02cc8f21ah,081269d73h,0c71cc963h,0077f49f9h,0ecfbb204h,0ca56b793h,0dde92571h,0f97ad8f7h,09abed6a3h,0924de3bdh,0e6c19d3fh,0a140a800h,08dce92f4h,01337af07h,085f44d1eh
- DD 009d64c52h,05953c08bh,0f5df9749h,0a1b5e49fh,052735f7dh,0336a8fb8h,09add676bh,0b332b6dbh,0b4511aa4h,0558b88a0h,0dbd5cc55h,009788752h,0d8cd52bdh,016b43b9ch,0c2a2696bh,07f0bc5a0h
- DD 0c11f61efh,0146e12d4h,03a83e79eh,09ce10754h,06cbfca15h,008ec73d9h,05b49653fh,009ff29adh,0e7da946eh,0e31b72bdh,0ee80a4f2h,0ebf9eb3bh,017598ce4h,0d1aabd08h,053f37e80h,018b5fef4h
- DD 05958cd79h,0d5d5cdd3h,01d373114h,03580a1b5h,0fa935726h,0a36e4c91h,0ef20d760h,0a38c534dh,02ff5845bh,07088e40ah,0bd78177fh,0e5bb40bdh,0857f9920h,04f06a7a8h,0e968f05dh,0e3cc3e50h
- DD 0e5682d26h,01d68b7feh,0aec7f87ch,05206f76fh,0041951abh,041110530h,0d4b5a71ah,058ec52c1h,00f75cf9ah,0f3488f99h,0ba82d0d5h,0f411951fh,0618895abh,027ee75beh,06d8aab14h,0eae060d4h
- DD 07fb54dc2h,09ae1df73h,025963649h,01f3e391bh,0fe055081h,0242ec32ah,08491c9bdh,05bd450efh,0981eb389h,0367efc67h,03a0550d5h,0ed7e1928h,0ab3ce75ch,0362e776bh,01f24c523h,0e890e308h
- DD 0feccef76h,0b961b682h,08bba6d92h,08b8e11f5h,02b2375c4h,08f2ccc4ch,0e2f86cfah,00d7f7a52h,09efe5633h,0fd94d30ah,05451f934h,02d8d246bh,0244e6a00h,02234c6e3h,0ddec8c50h,0de2b5b0dh
- DD 0bf776f5bh,02ce53c5ah,060357b05h,06f724071h,071bf3f7ah,0b2593717h,0440c4a9fh,087d2501ch,087b05340h,0440552e1h,021624c32h,0b7bf7cc8h,022facddbh,04155a6ceh,0889837efh,05a4228cbh
- DD 0fd4fd671h,0ef87d6d6h,0c2daa10eh,0a233687eh,003c0eb96h,075622244h,08bf19be6h,07632d184h,040735ff4h,005d0f8e9h,0c00931f1h,03a3e6e13h,0dafe3f18h,031ccde6ah,0cfe51207h,0f381366ah
- DD 060167d92h,024c222a9h,07529f18ch,062f9d6f8h,00353b114h,0412397c0h,0ef808043h,0334d89dch,02a4383ceh,0d9ec63bah,05cf92ba0h,0cec8e937h,0c8be74c0h,0fb8b4288h,0105d4391h,067d6912fh
- DD 01b913149h,07b996c46h,03a4e02dah,036aae2efh,0972de594h,0b68aa003h,04ec6d545h,0284ec70dh,061391d54h,0f3d2b2d0h,0fe114e92h,069c5d5d6h,0b4482dffh,0be0f00b5h,0f5bf33c5h,0e1596fa5h
- DD 096a71cbah,010595b56h,0fdcadeb7h,0944938b2h,0fccd8471h,0a282da4ch,00d37bfe1h,098ec05f3h,00698304ah,0e171ce1bh,021bdf79bh,02d691444h,01b21dec1h,0d0cd3b74h,016a15f71h,0712ecd8bh
- DD 000fd56e1h,08d4c00a7h,0f9527c18h,002ec9692h,04a3e42e1h,021c44937h,01392ae0ah,09176fbabh,044b7b618h,08726f1bah,0f1de491ch,0b4d7aae9h,007b582c0h,0f91df7b9h,0ef60aa3ah,07e116c30h
- DD 0466265d7h,099270f81h,04df7adf0h,0b15b6fe2h,0f9738f7fh,0fe33b2d3h,0d6d70f95h,048553ab9h,0c21e94dbh,02cc72ac8h,0bdc0bbeeh,0795ac38dh,02e40478fh,00a1be449h,0052bde55h,081bd3394h
- DD 056b3c4f2h,063c8dbe9h,0904177cch,0017a99cfh,04d010fc1h,0947bbddbh,0bb2c9b21h,0acf9b00bh,047173611h,02970bc8dh,0ac7d756fh,01a4cbe08h,067d541a2h,006d9f4aah,059c2cf44h,0a3e8b689h
- DD 04d88f1ddh,0aad066dah,07ad35deah,0c604f165h,04478ca67h,07edc0720h,0ba02ce06h,0a10dfae0h,0af36f4e4h,0eceb1c76h,0af3f8f48h,0994b2292h,077c8a68ch,0bf9ed77bh,051744c9dh,074f544eah
- DD 08113a757h,082d05bb9h,08a9885e4h,04ef2d2b4h,01aa7865fh,01e332be5h,0290d1a52h,022b76b18h,044351683h,0308a2310h,0a3f22840h,09d861896h,0841ed947h,05959ddcdh,0154b73bfh,00def0c94h
- DD 04c7c15e0h,0f0105417h,03a277c32h,0539bfb02h,0f9dccf5fh,0e699268eh,00247a3bdh,09f5796a5h,04f157269h,08b839de8h,07a30196bh,0c825c1e5h,0dc8a5a91h,06ef0aabch,0498b7fe6h,0f4a8ce6ch
- DD 070cbac78h,01cce35a7h,0f6b23958h,083488e9bh,0d76cb011h,00341a070h,0ae1b2658h,0da6c9d06h,0dd648c52h,0b701fb30h,052fb9fd1h,0994ca02ch,06f563086h,006933117h,017856babh,03d2b8100h
- DD 05963a46eh,0e89f48c8h,0a99e61c7h,0658ab875h,04b8517b4h,06e296f87h,0fc1bc656h,036c4fcdch,0a3906defh,0de5227a1h,062418945h,09fe95f57h,0fdd96cdeh,020c91e81h,0da4480deh,05adbe47eh
- DD 0396de2b6h,0a009370fh,0f0ecc7bdh,098583d4bh,0e51d0672h,0f44f6b57h,0556b1984h,003d6b078h,0b0b64912h,027dbdd93h,015687b09h,09b3a3434h,051ec20a9h,00dba6461h,0ff28187ch,0ec93db7fh
- DD 066e48bddh,000ff8c24h,011ccd78eh,02514f2f9h,0e1250603h,0eba11f4fh,0243fa156h,08a22cd41h,0b283e4c6h,0a4e58df4h,08b39783fh,078c29859h,0a5259809h,05235aee2h,00e0227ddh,0c16284b5h
- DD 01338830dh,0a5f57916h,0d2123fcah,06d4b8a6bh,0f9c546f8h,0236ea68ah,0fa608d36h,0c1d36873h,08d436d13h,0cd76e495h,08fb080afh,0d4d9c221h,0e8ad3fb5h,0665c1728h,0b3d572e0h,0cf1ebe4dh
- DD 0584c5e20h,0a7a8746ah,0b9dc7035h,0267e4ea1h,0b9548c9bh,0593a15cfh,04bd012f3h,05e6e2135h,08c8f936eh,0df31cc6ah,0b5c241dch,08af84d04h,0345efb86h,063990a6fh,0b9b962cbh,06fef4e61h
- DD 025722608h,0f6368f09h,0131cf5c6h,0131260dbh,0fab4f7ach,040eb353bh,037eee829h,085c78880h,0c3bdf24eh,04c1581ffh,0f5c3c5a8h,05bff75cbh,0a14e6f40h,035e8c83fh,00295e0cah,0b81d1c0fh
- DD 0f43a730fh,0fcde7cc8h,033ab590eh,0e89b6f3ch,0ad03240bh,0c823f529h,098bea5dbh,082b79afeh,0962fe5deh,0568f2856h,060c591f3h,00c590adbh,04a28a858h,01fc74a14h,0b3203f4ch,03b662498h
- DD 06c39765ah,091e3cf0dh,0ac3cca0bh,0a2db3acdh,0cb953b50h,0288f2f08h,0cf43cf1ah,02414582ch,060eee9a8h,08dec8bbch,0729aa042h,054c79f02h,06532f5d5h,0d81cd5ech,0cf82e15fh,0a672303ah
- DD 0719c0563h,0376aafa8h,0bc5fc79fh,0cd8ad2dch,0cb750cd3h,0303fdb9fh,04418b08eh,014ff052fh,03e2d6520h,0f75084cfh,0144ed509h,07ebdf0f8h,0d3f25b98h,0f43bf0f2h,0a354d837h,086ad71cfh
- DD 026f43572h,0b827fe92h,05d824758h,0dfd3ab5bh,0539094c1h,0315dd23ah,066623d68h,085c0e37ah,07be19ae0h,0575c7972h,0df0d36b5h,0616a3396h,026b1ff7eh,0a1ebb3c8h,0140ad453h,0635b9485h
- DD 0da430c0bh,092bf3cdah,03a96dac6h,04702850eh,015ac326ah,0c91cf0a5h,0ab8c25e4h,095de4f49h,0e265c17ch,0b01bad09h,0087b3881h,024e45464h,0e1fac5cah,0d43e583ch,06ead97a6h,0e17cb318h
- DD 074dcec46h,06cc39243h,054c2b73fh,033cfc02dh,0f26cd99ch,082917844h,0d1773f89h,08819dd95h,00871f427h,009572aa6h,0f6f01c34h,08e0cf365h,0bff1f5afh,07fa52988h,0e75e8e50h,04eb357eah
- DD 0868af75dh,0d9d0c8c4h,045c8c7eah,0d7325cffh,0cc81ecb0h,0ab471996h,0611824edh,0ff5d55f3h,01977a0eeh,0be314541h,0722038c6h,05085c4c5h,0f94bb495h,02d5335bfh,0c8e2a082h,0894ad8a6h
- DD 0ada35438h,05c3e2341h,0049b8c4eh,0f4a9fc89h,09f17cf34h,0beeb355ah,06c91fe10h,03f311e0eh,092ab9891h,0c2d20038h,03e8ce9a9h,0257bdcc1h,088c53beeh,01b2d9789h,0cdba143ah,0927ce89ah
- DD 0523db280h,0b0a32ccah,050d43783h,05c889f8ah,04897d16fh,0503e04b3h,008f5f2e8h,08cdb6e78h,0179c8e74h,06ab91cf0h,048211d60h,0d8874e52h,0ea851200h,0f948d4d5h,0e6f9840ah,04076d41eh
- DD 047b517eah,0c20e263ch,030685e5eh,079a448fdh,0f90631a0h,0e55f6f78h,0a79e6346h,088a790b1h,080969fe8h,062160c7dh,041491bb9h,054f92fd4h,05c957526h,0a6645c23h,0bea3ce7bh,0f44cc5aeh
- DD 08b1e68b7h,0f7628327h,0303f29d3h,0c731ad7ah,057d03ecbh,0fe5a9ca9h,041bc97a7h,096c0d50ch,09b4f7f24h,0c4669fe7h,03d9967efh,0fdd781d8h,05d2c208dh,07892c7c3h,0ae545cb3h,08bf64f7ch
- DD 0467be912h,0c01f862ch,0c73d30cch,0f4c85ee9h,06ab83ec7h,01fa6f4beh,04e3e3cf9h,0a07a3c1ch,00c00beb3h,087f8ef45h,0000d4c3eh,030e2c2b3h,0fe08bf5bh,01aa00b94h,09224ef52h,032c133aah
- DD 032e5685dh,038df16bbh,058e6f544h,068a9e069h,0cdc5ebc6h,0495aaff7h,0378b135fh,0f894a645h,009e27ecfh,0f316350ah,058f7179dh,0eced201eh,0e97861bah,02eec273ch,0d693be2eh,047ec2caeh
- DD 0f68367ceh,0fa4c97c4h,0be5a5755h,0e4f47d0bh,0b298a979h,017de815dh,0c177dc7dh,0d7eca659h,049ded0a3h,020fdbb71h,0fb34d3c5h,04cb2aad4h,060858a33h,02cf31d28h,0a24aa40fh,03b6873efh
- DD 02c11bb37h,0540234b2h,0ed4c74a3h,02d0366ddh,0eec5f25dh,0f9a968dah,067b63142h,036601068h,068d7b6d4h,007cd6d2ch,00c842942h,0a8f74f09h,07768b1eeh,0e2751404h,0fe62aee4h,04b5f7e89h
- DD 089070d26h,0c6a77177h,0dd1c8bc7h,0a1f28e4eh,0469e1f17h,0ea5f4f06h,0fbdb78e0h,078fc242ah,08b0588f1h,0c9c7c592h,01535921eh,0b6b7a0fdh,0bde5ae35h,0cc5bdb91h,012ff1864h,0b42c485eh
- DD 0dbab98aah,0a1113e13h,0a17b1024h,0de9d469bh,0c0462d3ah,023f48b37h,07c5c078dh,03752e537h,015544eb9h,0e3a86addh,080fba279h,0f013aea7h,0f22001b5h,08b5bb76ch,0f02891abh,0e617ba14h
- DD 0936219d3h,0d39182a6h,0ae51cb19h,05ce1f194h,0bf07a74ch,0c78f8598h,022cbf1bch,06d7158f2h,0e300ce18h,03b846b21h,02d11275dh,035fba630h,0a0239b9bh,05fe25c36h,0df05d940h,0d8beb35dh
- DD 01f7e320dh,04db02bb0h,06da320eah,00641c364h,0821389a3h,06d95fa5dh,08fcd8e3dh,092699748h,0ceb6c143h,0316fef17h,0d933762bh,067fcb841h,0118b17f8h,0bb837e35h,09fd24821h,04b92552fh
- DD 046aca793h,0ae6bc70eh,0e579311bh,01cf0b0e4h,05802f716h,08dc631beh,0bddbee4dh,0099bdc6fh,00caf8b05h,0cc352bb2h,072d63df2h,0f74d505ah,091c4f408h,0b9876d4bh,09e229b2dh,01ce18473h
- DD 083abdb4ah,049507597h,0dee84b18h,0850fbcb6h,0609e67dch,06325236eh,09336c6d8h,004d831d9h,0fa12d45dh,08deaae3bh,04746e246h,0e425f8ceh,024f5f31eh,08004c175h,0ad62c3b7h,0aca16d8fh
- DD 09152f934h,00dc15a6ah,0ed0e12c1h,0f1235e5dh,0da477dach,0c33c06ech,0b2ea0006h,076be8732h,00c0cd313h,0cf3f7831h,0a614260dh,03c524553h,0cab22d15h,031a756f8h,077827a20h,003ee10d1h
- DD 01994ef20h,0d1e059b2h,0638ae318h,02a653b69h,02f699010h,070d5eb58h,009f5f84ah,0279739f7h,08b799336h,05da4663ch,0203c37ebh,0fdfdf14dh,0a1dbfb2dh,032d8a9dch,077d48f9bh,0ab40cff0h
- DD 0d20b42d5h,0c018b383h,09f78845fh,0f9a810efh,0bdba9df0h,040af3753h,0131dfdf9h,0b90bdcfch,0f01ab782h,018720591h,06af12a88h,0c823f211h,00dc14401h,0a51b80f3h,0fb2dfbe3h,0de248f77h
- DD 00cafe751h,0ef5a44e5h,0d4dcd221h,073997c9ch,0de854024h,032fd86d1h,0a09b84bbh,0d5b53adch,0dcedd8d1h,0008d7a11h,074b32c84h,0406bd1c8h,005dde8b1h,05d4472ffh,0fce2b32fh,02e25f2cdh
- DD 029dfc254h,0bec0dd5eh,02b98b267h,04455fcf6h,0c72df2adh,00b4d43a5h,048a75397h,0ea70e6beh,05820f3bfh,02aad6169h,09e37f68fh,0f410d2ddh,07be5ac83h,070fb7dbah,036ec3eech,0636bb645h
- DD 09754e21ch,027104ea3h,08d63c373h,0bc87a3e6h,04109db9ah,0483351d7h,060134da7h,00fa724e3h,0b0720b16h,09ff44c29h,006aceeadh,02dd0cf13h,0e26929a6h,05942758ch,0b766a92bh,096c5db92h
- DD 05f18395eh,0cec7d4c0h,01f80d032h,0d3f22744h,0cb86075bh,07a68b37ah,0afef92dbh,0074764ddh,07bc7f389h,0ded1e950h,0b9756460h,0c580c850h,07da48157h,0aeeec2a4h,082c587b3h,03f0b4e7fh
- DD 0a9f19c53h,0231c6de8h,06974e34eh,05717bd73h,0f1508fa9h,0d9e1d216h,0dadaa124h,09f112361h,0823b7348h,080145e31h,0ac634069h,04dd8f0d5h,02297c258h,0e3d82fc7h,09cee7431h,0276fcfeeh
- DD 02bc0aea9h,08eb61b5eh,0de329431h,04f668fd5h,038e4b87eh,003a32ab1h,073d0ef0bh,0e1374517h,0853ac983h,01a46f7e6h,068e78a57h,0c3bdf42eh,02ea96dd1h,0acf20785h,0f1638460h,0a10649b9h
- DD 0879fbbedh,0f2369f0bh,0da9d1869h,00ff0ae86h,056766f45h,05251d759h,02be8d0fch,04984d8c0h,0d21008f0h,07ecc95a6h,03a1a1c49h,029bd54a0h,0d26c50f3h,0ab9828c5h,051d0d251h,032c0087ch
- DD 00c1cdb26h,09bac3ce6h,0557ca205h,0cd94d947h,09db1fdcdh,01b1bd598h,0a3d8b149h,00eda0108h,056152fcch,095066610h,0e7192b33h,0c2f037e6h,0c92e05a4h,0deffb41ah,0c2f6c62eh,01105f6c2h
- DD 08733913ch,068e73500h,03f3adc40h,0cce86163h,038a278e9h,0f407a942h,02ab21292h,0d13c1b9dh,01c74cf5ch,093ed7ec7h,0f1a4c1b4h,08887dc48h,04b3a11f1h,03830ff30h,058937cb6h,0358c5a3ch
- DD 089022829h,0027dc404h,03b798f79h,040e93977h,038be6eadh,090ad3337h,0f34c0a5dh,09c23f6bch,0fbffd8bbh,0d1711a35h,01949d3ddh,060fcfb49h,07825d93ah,009c8ef4bh,0a0a8c968h,024233cffh
- DD 0e6d982afh,067ade46ch,0e7544d7ch,0ebb6bf3eh,03d8bd087h,0d6b9ba76h,04dc61280h,046fe382dh,0b5bdbd75h,0bd39a7e8h,0b8f228feh,0ab381331h,0ce1c4300h,00709a77ch,0f337ceach,06a247e56h
- DD 0636288beh,08f34f21bh,0c8a7c305h,09dfdca74h,0ea919e04h,06decfd1bh,08e1991f8h,0cdf2688dh,0d0f8a67eh,0e607df44h,00b58d010h,0d985df4bh,00c24f8f4h,057f834c5h,0a0bf01aeh,0e976ef56h
- DD 0a1c32373h,0536395ach,0734c0a13h,0351027aah,05e6bd5bch,0d2f1b5d6h,0223debedh,02b539e24h,00eaa1d71h,0d4994cech,0661dcf65h,02a83381dh,07b54c740h,05f1aed2fh,0d6dda5eeh,00bea3fa5h
- DD 036cc6134h,09d4fb684h,0c0a443ddh,08eb9bbf3h,0383b7d2ah,0fc500e2eh,05b775257h,07aad621ch,00a8f7cc0h,069284d74h,007562d65h,0e820c2ceh,0499758eeh,0bf9531b9h,06ee0cc2dh,073e95ca5h
- DD 0fbaf50a5h,0f61790abh,0684e0750h,0df55e76bh,0f176b005h,0ec516da7h,07a2dddc7h,0575553bbh,0553afa73h,037c87ca3h,04d55c251h,0315f3ffch,0af3e5d35h,0e846442ah,06495ff28h,061b91149h
- DD 0fa326dc3h,023cc95d3h,018fc2ceah,01df4da1fh,0d0a37d59h,024bf9adch,0320d6e1eh,0b6710053h,0618344d1h,096f9667eh,0a06445afh,0cc7ce042h,0d68dbc3ah,0a02d8514h,0280b5a5bh,04ea109e4h
- DD 0b40961bfh,05741a7ach,06aa56bfah,04ada5937h,002b765d1h,07feb9145h,0e6ad1582h,0561e97beh,0da3982f5h,0bbc4a5b6h,0b546f468h,00c2659edh,059612d20h,0b8e7e6aah,0ac19e8e0h,0d83dfe20h
- DD 0b835398ch,08530c45fh,0b38a41c2h,06106a8bfh,035f5dcdbh,021e8f9a6h,0cae498edh,039707137h,0d8249f00h,070c23834h,0ab2537a0h,09f14b58fh,05f61c0c2h,0d043c365h,009a194a7h,0dc5926d6h
- DD 08e77738ah,0ddec0339h,0fba46426h,0d07a63efh,0ee7f6e86h,02e58e79ch,0ff32d241h,0e59b0459h,020fa0338h,0c5ec84e5h,0eaff5aceh,097939ac8h,0b4a38313h,00310a4e3h,08f9d9885h,09115fba2h
- DD 05fadf8c3h,08dd710c2h,0ce19c0e2h,066be38a2h,04cfe5022h,0d42a279ch,00e24e1b8h,0597bb530h,0c153ca7fh,03cde86b7h,0707d63bdh,0a8d30fb3h,0bd60d21eh,0ac905f92h,07b9a54abh,098e7ffb6h
- DD 0e9726a30h,0d7147df8h,0afce3533h,0b5e216ffh,02ff1ec40h,0b550b799h,0a1e953fdh,06b613b87h,0792d5610h,087b88dbah,0a190fbe1h,02ee1270ah,02ef581dah,002f4e2dch,0eff82a95h,0016530e4h
- DD 08fd6ee89h,0cbb93dfdh,046848fffh,016d3d986h,01da47adfh,0600eff24h,00ad47a71h,01b9754a0h,070c33b98h,08f9266dfh,0df34186eh,0aadc87aeh,04ad24132h,00d2ce8e1h,019946ebah,08a47cbfch
- DD 062b5f3afh,047feeb66h,00abb3734h,0cefab561h,019f35cb1h,0449de60eh,0157f0eb9h,039f8db14h,03c61bfd6h,0ffaecc5bh,041216703h,0a5a4d41dh,0224e1cc2h,07f8fabedh,0871ad953h,00d5a8186h
- DD 0d22da9a9h,0f10774f7h,0cc8a9b0dh,045b8a678h,0bdc32cffh,0d9c2e722h,0337202a5h,0bf71b5f5h,069fc4db9h,095c57f2fh,0765d01e1h,0b6dad34ch,0cb904635h,07e0bd13fh,0763a588ch,061751253h
- DD 081af2c2dh,0d85c2997h,081b9d7dah,0c0f7d9c4h,008533e8dh,0838a34aeh,0311d8311h,015c4cb08h,08e121e14h,097f83285h,085000a5fh,0eea7dc1eh,05d256274h,00c6059b6h,0b95075c0h,0ec9beaceh
- DD 01df97828h,0173daad7h,0a8937877h,0bf851cb5h,001646f3ch,0b083c594h,050c6d352h,03bad30cfh,0496bbceah,0feb2b202h,018a1e8bah,03cf9fd4fh,01c066029h,0d26de7ffh,04e9ed4f8h,039c81e9eh
- DD 07b390d35h,0d8be0cb9h,0964aab27h,001df2bbdh,0c3ef64f8h,03e8c1a65h,0716ed1ddh,0567291d1h,05f5406d3h,095499c6ch,05ba8e23fh,071fdda39h,0d5096eceh,0cfeb320eh,0ca66dd16h,0be7ba92bh
- DD 0c6fb5a7dh,04608d36bh,06d2dd0e0h,0e3eea15ah,08f97a36ah,075b0a3ebh,01c83de1eh,0f59814cch,01c33c23fh,056c9c5b0h,06faa4136h,0a96c1da4h,0de316551h,046bf2074h,01f756c8fh,03b866e7bh
- DD 01495ed6bh,0727727d8h,0b682dce7h,0b2394243h,0758610f3h,08ab8454eh,0857d72a4h,0c243ce84h,0dbbf370fh,07b320d71h,078e0f7cah,0ff9afa37h,0ea7b523fh,00119d1e0h,0058c7d42h,0b997f8cbh
- DD 037bbb184h,0285bcd2ah,0a45d1fa6h,051dcec49h,0e29634cbh,06ade3b64h,026b86ef1h,0080c94a7h,02283fbe3h,0ba583db1h,05a9315edh,0902bddc8h,086964bech,007c1ccb3h,0b6258301h,078f4eacfh
- DD 056f90823h,04bdf3a49h,0741d777bh,0ba0f5080h,0f38bf760h,0091d71c3h,09b625b02h,09633d50fh,0b8c9de61h,003ecb743h,05de74720h,0b4751254h,074ce1cb2h,09f9defc9h,000bd32efh,0774a4f6ah
- DD 073848f22h,0aca385f7h,0f3f8558eh,053dad716h,093c471f9h,0ab7b34b0h,019644bc7h,0f530e069h,0dd59d31ah,03d9fb1ffh,008daa795h,04382e0dfh,0d5cc88d7h,0165c6f4bh,04a18c900h,0eaa392d5h
- DD 0648024eeh,094203c67h,08c2fabcdh,0188763f2h,0bbaec835h,0a80f87ach,0f29d8d54h,0632c96e0h,04c00a95eh,029b0a60eh,0e011e9fah,02ef17f40h,015b77223h,0f6c0e1d1h,014b04e32h,0aaec2c62h
- DD 03d84e58ch,0d35688d8h,0958571dbh,02af5094ch,0760682a6h,04fff7e19h,0e39a407ch,04cb27077h,04ff0e321h,00f59c547h,01b34c8ffh,0169f34a6h,052bc1ba7h,02bff1096h,083583544h,0a25423b7h
- DD 00ac8b782h,05d55d5d5h,02db3c892h,0ff6622ech,06b8bb642h,048fce741h,069d7e3dch,031d6998ch,0cadcaed0h,0dbaf8004h,0d81d053ch,0801b0142h,059630ec6h,094b189fch,0af762c8eh,0120e9934h
- DD 0fdc6a404h,053a29aa4h,0a1909948h,019d8e01eh,0d7e89681h,03cfcabf1h,04e132d37h,03321a50dh,0e9a86111h,0d0496863h,006a3bc65h,08c0cde61h,0fc9f8eefh,0af866c49h,0ff7f5141h,02066350eh
- DD 0e56ddfbdh,04f8a4689h,0fe32983ah,0ea1b0c07h,0873cb8cbh,02b317462h,02d93229fh,0658deddch,00f64ef58h,065efaf4dh,0730cc7a8h,0fe43287dh,03d047d70h,0aebc0c72h,0d92d26c9h,092efa539h
- DD 094b56526h,006e78457h,00961002dh,0415cb80fh,076dcb10fh,089e5c565h,0ff9259feh,08bbb6982h,09abc2668h,04fe8795bh,01e678fb1h,0b5d4f534h,07b7da2b9h,06601f3beh,0a13d6805h,098da59e2h
- DD 001799a52h,0190d8ea6h,0b86d2952h,0a20cec41h,07fff2a7ch,03062ffb2h,079f19d37h,0741b32e5h,04eb57d47h,0f80d8181h,016aef06bh,07a2d0ed4h,01cecb588h,009735fb0h,0c6061f5bh,01641caaah
- DD 020151427h,07f99824fh,092430206h,0206828b6h,0e1112357h,0aa9097d7h,009e414ech,0acf9a2f2h,027915356h,0dbdac9dah,0001efee3h,07e0734b7h,0d2b288e2h,054fab5bbh,0f62dd09ch,04c630fc4h
- DD 01ac2703bh,08537107ah,06bc857b5h,0b49258d8h,0bcdaccd1h,057df14deh,0c4ae8529h,024ab68d7h,0734e59d0h,07ed8b5d4h,0c495cc80h,05f8740c8h,0291db9b3h,084aedd5ah,04fb995beh,080b360f8h
- DD 05fa067d1h,0ae915f5dh,09668960ch,04134b57fh,0a48edaach,0bd3656d6h,0fc1d7436h,0dac1e3e4h,0d81fbb26h,0674ff869h,0b26c33d4h,0449ed3ech,0d94203e8h,085138705h,0beeb6f4ah,0ccde538bh
- DD 0a61a76fah,055d5c68dh,0ca1554dch,0598b441dh,0773b279ch,0d39923b9h,036bf9efch,033331d3ch,0298de399h,02d4c848eh,0a1a27f56h,0cfdb8e77h,057b8ab70h,094c855eah,06f7879bah,0dcdb9daeh
- DD 0019f2a59h,07bdff8c2h,0cb4fbc74h,0b3ce5bb3h,08a9173ddh,0ea907f68h,095a75439h,06cd3d0d3h,0efed021ch,092ecc4d6h,06a77339ah,009a9f9b0h,07188c64ah,087ca6b15h,044899158h,010c29968h
- DD 0ed6e82efh,05859a229h,065ebaf4eh,016f338e3h,05ead67aeh,00cd31387h,054ef0bb4h,01c73d228h,074a5c8c7h,04cb55131h,07f69ad6ah,001cd2970h,0e966f87eh,0a04d00ddh,00b7b0321h,0d96fe447h
- DD 088fbd381h,0342ac06eh,05c35a493h,002cd4a84h,054f1bbcdh,0e8fa89deh,02575ed4ch,0341d6367h,0d238202bh,0ebe357fbh,0a984ead9h,0600b4d1ah,052436ea0h,0c35c9f44h,0a370751bh,096fe0a39h
- DD 07f636a38h,04c4f0736h,00e76d5cbh,09f943fb7h,0a8b68b8bh,0b03510bah,09ed07a1fh,0c246780ah,06d549fc2h,03c051415h,0607781cah,0c2953f31h,0d8d95413h,0955e2c69h,07bd282e3h,0b300fadch
- DD 087e9189fh,081fe7b50h,0f42dda27h,0db17375ch,0cf0a5904h,022f7d896h,0ebe348e6h,0a0e57c5ah,0f40e3c80h,0a61011d3h,08db705c5h,0b1189321h,050fedec3h,04ed9309eh,04d6d5c1dh,0dcf14a10h
- DD 055691342h,0056c265bh,091049dc7h,0e8e08504h,0c9bae20ah,0131329f5h,0d9dccdb4h,096c8b3e8h,0fb4ee6b4h,08c5ff838h,041e8ccf0h,0fc5a9aebh,0fae050c6h,07417b764h,000452080h,00953c3d7h
- DD 038dfe7e8h,021372682h,02bb79d4bh,0ea417e15h,076e7cf2dh,059641f1ch,0ea0bcfcch,0271e3059h,07253ecbdh,0624c7dfdh,04fca6186h,02f552e25h,04d866e9ch,0cbf84ecdh,0f68d4610h,073967709h
- DD 0c27901b4h,0a14b1163h,0899b8bf3h,0fd9236e0h,0cbc6da0ah,042b091ech,05ad1d297h,0bb1dac6fh,0a91cf76eh,080e61d53h,0d31f1ee7h,04110a412h,013efcf77h,02d87c3bah,0df450d76h,01f374bb4h
- DD 00d188dabh,05e78e2f2h,0f4b885efh,0e3968ed0h,07314570fh,046c0568eh,001170521h,031616338h,04f0c8afeh,018e1e7e2h,0deea78dah,04caa75ffh,07c5d8a51h,082db67f2h,06f505370h,036a44d86h
- DD 00333974fh,0d72c5bdah,027a70146h,05db516aeh,0210ef921h,034705281h,00c9c38e5h,0bff17a8fh,012476da1h,078f4814eh,033c16980h,0c1e16613h,0424d4bcah,09e5b386fh,0c85740deh,04c274e87h
- DD 06c2f5226h,0b6a9b88dh,0550d7ca8h,014d1b944h,01fc41709h,0580c85fch,054c6d519h,0c1da368bh,0d5113cf7h,02b0785ceh,05a34708fh,00670f633h,015cc3f88h,046e23767h,050c72c8fh,01b480cfah
- DD 04147519ah,020288602h,026b372f0h,0d0981each,0a785ebc8h,0a9d4a7cah,0dbdf58e9h,0d953c50dh,0fd590f8fh,09d6361cch,044e6c917h,072e9626bh,022eb64cfh,07fd96110h,09eb288f3h,0863ebb7eh
- DD 06aca8ee7h,06e6ab761h,0d7b40358h,097d10b39h,01e5feb0dh,01687d377h,08265a27ah,0c83e50e4h,0c954b313h,08f75a9feh,0310d1f61h,0cc2e8f47h,06557d0e0h,0f5ba81c5h,03eaf6207h,025f9680ch
- DD 04354080bh,0f95c6609h,07bf2fe1ch,05225bfa5h,05c7d98fah,0c5c004e2h,0019aaf60h,03561bf1ch,0ba151474h,05e6f9f17h,0b04f6ecah,0dec2f934h,0269acb1eh,064e368a1h,00cdda493h,01332d9e4h
- DD 0df23de05h,060d6cf69h,0009339a0h,066d17da2h,00a693923h,09fcac985h,0ed7c6a6dh,0bcf057fch,0f0b5662ch,0c3c5c8c5h,0dcba4f24h,025318dd8h,0082b69ffh,060e8cb75h,01e728c01h,07c23b3eeh
- DD 0097e4403h,015e10a0ah,019854665h,0cb3d0a86h,0d67d4826h,088d8e211h,00b9d2839h,0b39af66eh,0bd475ca8h,0a5f94588h,0c077b80bh,0e06b7966h,0da27c26ch,0fedb1485h,0fe0fd5e0h,0d290d33ah
- DD 0f34fb0fah,0a40bcc47h,01fb1ab09h,0b4760cc8h,0a273bfe3h,08fca0993h,0f70b213ch,013e4fe07h,0fdb05163h,03bcdb992h,00c2b19b6h,08c484b11h,0aaf2e3e2h,01acb815fh,0b89ff1b4h,0c6905935h
- DD 0586e74e1h,0b2ad6f9dh,067b80484h,0488883adh,0369c3ddbh,0758aa2c7h,09f9afd31h,08ab74e69h,05e21beb1h,010fc2d28h,0318c42f9h,03484518ah,053cf40c3h,0377427dch,0391bc1d9h,09de0781ah
- DD 0693807e1h,08faee858h,04e81ccc7h,0a3865327h,06f835b84h,002c30ff2h,00d3d38d4h,0b604437bh,05ca1823dh,0b3fc8a98h,003be0324h,0b82f7ec9h,0cf684a33h,0ee36d761h,09f29bf7dh,05a01df0eh
- DD 01306583dh,0686202f3h,0437c622eh,005b10da0h,0076a7bc8h,0bf9aaa0fh,08f8f4e43h,025e94efbh,0fa3dc26dh,08a35c9b7h,096ff03c5h,0e0e5fb93h,0ebc394ceh,0a77e3843h,08361de60h,0cede6595h
- DD 0a1993545h,0d27c22f6h,024d671bah,0ab01cc36h,0a169c28eh,063fa2877h,02eb08376h,0925ef904h,053aa0b32h,03b2fa3cfh,071c49d7ah,0b27beb5bh,0d105e27fh,0b60e1834h,04f68570dh,0d6089788h
- DD 0d6fbc2ach,023094ce0h,0815ff551h,0738037a1h,06bef119ch,0da73b1bbh,0eef506bah,0dcf6c430h,0e3ef104ah,000e4fe7bh,00a065628h,0ebdd9a2ch,08792043eh,0853a81c3h,0b3b59108h,022ad6eceh
- DD 039cd297dh,09fb813c0h,005bda5d9h,08ec7e16eh,00d104b96h,02834797ch,07c511510h,0cc11a2e7h,096ee6380h,096ca5a53h,0cea38742h,0054c8655h,0d54dfa7dh,0b5946852h,01f4ab207h,097c422e7h
- DD 00c22b540h,0bf907509h,0b7c267d4h,02cde42aah,05ab0d693h,0ba18f9edh,06e4660d9h,03ba62aa6h,0ab9ea96ah,0b24bf97bh,0e3b60e32h,05d039642h,07c4d9bd5h,04e6a4506h,07ed4a6a4h,0666c5b9eh
- DD 08edbd7cch,0fa3fdcd9h,0c6ccd753h,04660bb87h,021e6b64fh,09ae90820h,0b36bfb3fh,08a56a713h,05726d47fh,0abfce096h,00b1a9a7fh,09eed01b2h,04eb74a37h,030e9cad4h,053e9666dh,07b2524cch
- DD 08f4b002fh,06a29683bh,041f4fc20h,0c2200d7ah,03a338acch,0cf3af47ah,0e7128975h,06539a4fbh,0c33c7fcfh,0cec31c14h,0c7be322bh,07eb6799bh,06646f623h,0119ef4e9h,054d7299bh,07b7a26a5h
- DD 0403f46f2h,0cb37f08dh,01a0ec0c7h,094b8fc43h,0c332142fh,0bb8514e3h,0e80d2a7ah,0f3ed2c33h,0b639126ch,08d2080afh,0e3553adeh,0f7b6be60h,01c7e2b09h,03950aa9fh,06410f02bh,0847ff958h
- DD 0678a31b0h,0877b7cf5h,03998b620h,0d50301aeh,0c00fb396h,0734257c5h,004e672a6h,0f9fb18a0h,0e8758851h,0ff8bd8ebh,05d99ba44h,01e64e4c6h,07dfd93b7h,04b8eaedfh,004e76b8ch,0ba2f2a98h
- DD 0e8053433h,07d790cbah,03d2c9585h,0c8e725a0h,0cdd8f5edh,058c5c476h,0efa9fe1dh,0d106b952h,00eff13a9h,03c5c775bh,0e057b930h,0242442bah,0c9b70cbdh,0e9f458d4h,0a3cdb89ah,069b71448h
- DD 00e2ed742h,041ee46f6h,040067493h,0573f1045h,09d54c304h,0b1e154ffh,08d3a7502h,02ad0436ah,0431a8121h,0ee4aaa2dh,0886f11edh,0cd38b3abh,0034a0eb7h,057d49ea6h,0f7e85e58h,0d2b773bdh
- DD 09b5c1f14h,04a559ac4h,03e54df2bh,0c444be1ah,0eda41891h,013aad704h,05eb5c788h,0cd927bech,0e48c8a34h,0eb3c8516h,04b546669h,01b7ac812h,0594df8ech,01815f896h,079227865h,087c6a79ch
- DD 09b56ddbdh,0ae02a2f0h,08a2f1cf3h,01339b5ach,0839dff0dh,0f2b569c7h,0fee9a43dh,0b0b9e864h,077bb064eh,04ff8ca41h,0fd249f63h,0145a2812h,0f86f689ah,03ab7beach,001d35f5eh,09bafec27h
- DD 04265aa91h,028054c65h,0035efe42h,0a4b18304h,09639dec7h,06887b0e6h,03d52aea5h,0f4b8f6adh,0971a8a13h,0fb9293cch,04c934d07h,03f159e5dh,009acbc29h,02c50e9b1h,07154d129h,008eb65e6h
- DD 030b75c3eh,04feff589h,094491c93h,00bb82fe2h,089af62bbh,0d8ac377ah,09685e49fh,0d7b51490h,004497f19h,0abca9a7bh,01a7ad13fh,01b35ed0ah,03ec86ed6h,06b601e21h,0ce0c76f1h,0da91fcb9h
- DD 0d7ab27e1h,09e28507bh,063945b7bh,07c19a555h,0aafc9827h,06b43f0a1h,03aa55b91h,0443b4fbdh,06962c88fh,0962b2e65h,0ce0db0cah,0139da8d4h,01b8d6c4fh,0b93f05ddh,0180b9824h,0779cdff7h
- DD 0ae57c7b7h,0bba23fddh,01b932522h,0345342f2h,0556d4aa3h,0fd9c80feh,06525bb61h,0a03907bah,0ff218933h,038b010e1h,0aa52117bh,0c066b654h,094f2e6eah,08e141920h,00d32f2b2h,066a27dcah
- DD 0048b3717h,069c7f993h,0b178ae1ch,0bf5a989ah,0564f1d6bh,049fa9058h,0d31fde4eh,027ec6e15h,07276e7fch,04cce0373h,089d6bf02h,064086d79h,04ccdd979h,05a72f046h,047775631h,0909c3566h
- DD 075dd7125h,01c07bc6bh,087a0428dh,0b4c6bc97h,0fdeb6b9dh,0507ece52h,0b2c95432h,0fca56512h,0d0e8bd06h,015d97181h,0c6bb46eah,0384dd317h,03952b624h,05441ea20h,04e7dc2fbh,0bcf70deeh
- DD 06628e8c3h,0372b016eh,0b60a7522h,007a0d667h,00a344ee2h,0cf05751bh,0118bdeech,00ec09a48h,0d83dce46h,06e4b3d4eh,099d2fc6eh,043a6316dh,056cf044ch,0a99d8989h,0ae3e5fb7h,07c7f4454h
- DD 0fbabbe92h,0b2e6b121h,0e1330076h,0281850fbh,097890015h,0093581ech,075ff77f5h,069b1ddedh,0ab105105h,07cf0b18fh,0a89ccfefh,0953ced31h,0eb914009h,03151f85fh,088ed48adh,03c9f1b87h
- DD 04a7eadcbh,0c9aba1a1h,0522e71cfh,0928e7501h,03a2e4f83h,0eaede727h,01ce3bbd3h,0467e10d1h,0b955dcf0h,0f3442ac3h,0d3d5e527h,0ba96307dh,0fd77f474h,0f763a10eh,06a6e1ff0h,05d744bd0h
- DD 0a777899eh,0d287282ah,0d03f3cdeh,0e20eda8fh,050b07d31h,06a7e75bbh,06f379de4h,00b7e2a94h,019f593cfh,031cb64adh,01e76ef1dh,07b1a9e4fh,0b62d609ch,0e18c9c9dh,0e779a650h,0439bad6dh
- DD 0e032f144h,0219d9066h,0e8b2ec6ah,01db632b8h,0fda12f78h,0ff0d0fd4h,02a25d265h,056fb4c2dh,0255a03f1h,05f4e2ee1h,0e96af176h,061cd6af2h,0d068bc97h,0e0317ba8h,0264b988eh,0927d6babh
- DD 0e90fb21eh,0a18f07e0h,0bba7fca1h,000fd2b80h,095cd67b5h,020387f27h,0d39707f7h,05b89a4e7h,0894407ceh,08f83ad3fh,06c226132h,0a0025b94h,0f906c13bh,0c79563c7h,04e7bb025h,05f548f31h
- DD 0eac6d113h,02b4c6b8fh,00e813c76h,0a67e3f9ch,03fe1f4b9h,03982717ch,026d8050eh,058865819h,0f7f06f20h,099f3640ch,02a66ebc2h,0dc610216h,0767a1e08h,052f2c175h,05999871bh,005660e1ah
- DD 06d3c4693h,06b0f1762h,037ed7beah,0f0e7d627h,0b75b226dh,0c51758c7h,01f91613bh,040a88628h,0bbb38ce0h,0889dbaa7h,0bddcad81h,0e0404b65h,08bc9671fh,0febccd3ah,0ee1f5375h,0fbf9a357h
- DD 028f33398h,05dc169b0h,072e90f65h,0b07ec11dh,0faab1eb1h,0ae7f3b4ah,05f17538ah,0d970195eh,00181e640h,052b05cbeh,02643313dh,0f5debd62h,05df31f82h,076148154h,03a9e13c5h,023e03b33h
- DD 04fde0c1fh,0ff758949h,0e5b6ec20h,0bf8a1abeh,087e1db6ch,0702278fbh,035ed658fh,0c447ad7ah,003d0ccf2h,048d4aa38h,0819a7c03h,080acb338h,06e17cecch,09bc7c89eh,003be1d82h,046736b8bh
- DD 0c0432f96h,0d65d7b60h,0deb5442fh,0ddebe7a3h,07dff69a2h,079a25307h,002cf3122h,037a56d94h,0f2350d0ah,08bab8aedh,0037b0d9ah,013c3f276h,044c65caeh,0c664957ch,0c2e71a88h,088b44089h
- DD 05cb02664h,0db88e5a3h,08686c72eh,05d4c0bf1h,0a682d53eh,0ea3d9b62h,00b2ad431h,09b605ef4h,0c69645d0h,071bac202h,06a1b66e7h,0a115f03ah,0158f4dc4h,0fe2c563ah,04d12a78ch,0f715b3a0h
- DD 0d413213ah,08f7f0a48h,0c04becdbh,02035806dh,05d8587f5h,0ecd34a99h,09f6d3a71h,04d8c3079h,08d95a8f6h,01b2a2a67h,0f2110d0dh,0c58c9d7dh,0cf8fba3fh,0deee81d5h,00c7cdf68h,0a42be3c0h
- DD 0d43b5eaah,02126f742h,0dfa59b85h,0054a0766h,0126bfd45h,09d0d5e36h,0384f8a8fh,0a1f8fbd7h,0d563fccch,0317680f5h,0f280a928h,048ca5055h,027b578cfh,0e00b81b2h,02994a514h,010aad918h
- DD 0b7bdc953h,0d9e07b62h,05bc086ddh,09f0f6ff2h,0655eee77h,009d1ccffh,05bef7df1h,045475f79h,086f702cch,03faa28fah,00f021f07h,092e60905h,07f8fa8c6h,0e9e62968h,0f036ea2ch,0bd71419ah
- DD 06028da9ah,0171ee1cch,0c251f573h,05352fe1ah,03fa997f4h,0f8ff236eh,0a5749d5fh,0d831b6c9h,0e350e2c2h,07c872e1dh,01e0ce403h,0c56240d9h,06974f5cbh,0f9deb077h,0961c3728h,07d50ba87h
- DD 05a3a2518h,0d6f89426h,0c6303d43h,0cf817799h,0619e5696h,0510a0471h,03a5e307bh,0ab049ff6h,0feb13ec7h,0e4cdf9b0h,09d8ff90ch,0d5e97117h,09afa96afh,0f6f64d06h,09d2012a2h,000d0bf5eh
- DD 0358bcdc0h,0e63f301fh,00a9d47f8h,007689e99h,04f43d43ah,01f689e2fh,090920904h,04d542a16h,09ca0a707h,0aea293d5h,08ac68065h,0d061fe45h,00090008ch,01033bf1bh,0c08a6db6h,029749558h
- DD 0c1d5d034h,074b5fc59h,067e215e0h,0f712e9f6h,0860200e6h,0fd520cbdh,03ea22588h,00229acb4h,0fff0c82eh,09cd1e14ch,059c69e73h,087684b62h,096ccb989h,0da85e61ch,0a3d06493h,02d5dbb02h
- DD 0e86b173ch,0f22ad33ah,0a79ff0e3h,0e8e41ea5h,0dd0d0c10h,001d2d725h,0032d28f9h,031f39088h,07829839eh,07b3f71e1h,04502ae58h,00cf691b4h,0befc6115h,0ef658dbdh,0b3ab5314h,0a5cd6ee5h
- DD 05f1d2347h,0206c8d7bh,04cc2253ah,0794645bah,058389e08h,0d517d8ffh,09f847288h,04fa20deeh,0d797770ah,0eba072d8h,0bf429e26h,07360c91dh,080af8279h,07200a3b3h,082dadce3h,06a1c9150h
- DD 0c35d8794h,00ee6d3a7h,00356bae5h,0042e6558h,0643322fdh,09f59698dh,050a61967h,09379ae15h,0fcc9981eh,064b9ae62h,06d2934c6h,0aed3d631h,05e4e65ebh,02454b302h,0f9950428h,0ab09f647h
- DD 022248acch,0b2083a12h,03264e366h,01f6ec0efh,05afdee28h,05659b704h,0e6430bb5h,07a823a40h,0e1900a79h,024592a04h,0c9ee6576h,0cde09d4ah,04b5ea54ah,052b6463fh,0d3ca65a7h,01efe9ed3h
- DD 0305406ddh,0e27a6dbeh,0dd5d1957h,08eb7dc7fh,0387d4d8fh,0f54a6876h,0c7762de4h,09c479409h,099b30778h,0be4d5b5dh,06e793682h,025380c56h,0dac740e3h,0602d37f3h,01566e4aeh,0140deabeh
- DD 0afd32acfh,04481d067h,0e1f71ccfh,0d8f0fccah,0b596f2dah,0d208dd0ch,09aad93f9h,0d049d730h,042ab580eh,0c79f263dh,023f707b4h,009411bb1h,0835e0edah,08cfde1ffh,090f03402h,072707490h
- DD 0c49a861eh,0eaee6126h,0e14f0d06h,0024f3b65h,0c69bfc17h,051a3f1e8h,0a7686381h,0c3c3a8e9h,0b103d4c8h,03400752ch,09218b36bh,002bc4613h,07651504ah,0c67f75ebh,0d02aebfah,0d6848b56h
- DD 0c30fa92bh,0bd9802e6h,09a552784h,05a70d96dh,03f83169bh,09085c4eah,006908228h,0fa9423bbh,0fe97a5b9h,02ffebe12h,071b99118h,085da6049h,063178846h,09cbc2f7fh,09153218eh,0fd96bc70h
- DD 01782269bh,0958381dbh,02597e550h,0ae34bf79h,05f385153h,0bb5c6064h,0e3088048h,06f0e96afh,077884456h,0bf6a0215h,069310ea7h,0b3b5688ch,004fad2deh,017c94295h,017896d4dh,0e020f0e5h
- DD 00976505fh,0730ba0abh,0095e2ec5h,0567f6813h,06331ab71h,047062010h,041d22b9fh,072cfa977h,08a2373dah,033e55eadh,07ba45a68h,0a8d0d5f4h,003029d15h,0ba1d8f9ch,0fc55b9f3h,08f34f1cch
- DD 0bbe5a1a9h,0cca4428dh,03126bd67h,08187fd5fh,048105826h,00036973ah,0b8bd61a0h,0a39b6663h,02d65a808h,06d42deefh,094636b19h,04969044fh,0dd5d564ch,0f611ee47h,0d2873077h,07b2f3a49h
- DD 0300eb294h,094157d45h,0169c1494h,02b2a656eh,0d3a47aa9h,0c000dd76h,0a6243ea4h,0a2864e4fh,0db89842eh,082716c47h,061479fb7h,012dfd7d7h,0e0b2f6dch,03b9a2c56h,0d7f85d67h,046be862ah
- DD 00f82b214h,003b0d8ddh,0f103cbc6h,0460c34f9h,018d79e19h,0f32e5c03h,0a84117f8h,08b8888bah,0c0722677h,08f3c37dch,01c1c0f27h,010d21be9h,0e0f7a0c6h,0d47c8468h,0adecc0e0h,09bf02213h
- DD 042b48b99h,00baa7d12h,048424096h,01bcb665dh,0ebfb5cfbh,08b847cd6h,09ad4d10dh,087c2ae56h,00de36726h,0f1cbb122h,03fdfbd21h,0e7043c68h,04e79d460h,04bd0826ah,04bd1a2cbh,011f5e598h
- DD 0b7fe7b6eh,097554160h,0400a3fb2h,07d16189ah,0e328ca1eh,0d73e9beah,0e793d8cch,00dd04b97h,0506db8cch,0a9c83c9bh,0cf38814ch,05cd47aaeh,0b64b45e6h,026fc430dh,0d818ea84h,0079b5499h
- DD 0c1c24a3bh,0ebb01102h,01c161c1ah,0ca24e568h,036f00a4ah,0103eea69h,076176c7bh,09ad76ee8h,0538e0ff7h,097451fc2h,06604b3b0h,094f89809h,03249cfd7h,06311436eh,041224f69h,027b4a7bdh
- DD 0e0ac2941h,003b5d21ah,0c2d31937h,0279b0254h,0cac992d0h,03307c052h,0efa8b1f3h,06aa7cb92h,00d37c7a5h,05a182580h,0342d5422h,013380c37h,0d5d2ef92h,092ac2d66h,0030c63c6h,0035a70c9h
- DD 04ce4f152h,0c16025ddh,0f9df7c06h,01f419a71h,091e4bb14h,06d5b2214h,0839fb4ceh,0fc43c6cch,0925d6b2dh,049f06591h,062186598h,04b37d9d3h,0d01b1629h,08c54a971h,051d50e05h,0e1a9c29fh
- DD 071ba1861h,05109b785h,0d0c8f93dh,048b22d5ch,08633bb93h,0e8fa84a7h,05aebbd08h,053fba6bah,0e5eea7d8h,07ff27df3h,068ca7158h,0521c8796h,0ce6f1a05h,0b9d5133bh,0fd0ebee4h,02d50cd53h
- DD 0c5a3ef16h,0c82115d6h,0ba079221h,0993eff9dh,04b5da81ch,0e4da2c5eh,08033fd85h,09a89dbdbh,02b892891h,060819ebfh,05d14a4d5h,053902b21h,0d7fda421h,06ac35051h,061c83284h,0cc6ab885h
- DD 0f74cff17h,014eba133h,0ecb813f2h,0240aaa03h,06f665beeh,0cfbb6540h,0a425ad73h,0084b1fe4h,0d081f6a6h,0009d5d16h,0eef82c90h,035304fe8h,0aa9eaa22h,0f20346d5h,0ac1c91e3h,00ada9f07h
- DD 0968a6144h,0a6e21678h,007b31a1eh,054c1f77ch,05781fbe1h,0d6bb787eh,0e31f1c4ah,061bd2ee0h,0781105fch,0f25aa1e9h,07b2f8e80h,09cf2971fh,0cdff919bh,026d15412h,034bc896eh,001db4ebeh
- DD 0b40df1cfh,07d9b3e23h,094e971b4h,059337373h,0669cf921h,0bf57bd14h,00c1a1064h,0865daedfh,083279125h,03eb70bd3h,034ecdaabh,0bc3d5b9fh,05f755cafh,091e3ed7eh,0d41e6f02h,049699f54h
- DD 0d4a7a15bh,0185770e1h,0eaac87e7h,008f3587ah,0473133eah,0352018dbh,004fd30fch,0674ce719h,0088b3e0eh,07b8d9835h,05d0d47a1h,07a0356a9h,06474a3c4h,09d9e7659h,0ff66966ch,061ea48a7h
- DD 00f3e4834h,030417758h,017a9afcbh,0fdbb21c2h,02f9a67b3h,0756fa17fh,0a245c1a8h,02a6b2421h,04af02291h,064be2794h,02a5804feh,0ade465c6h,0a6f08fd7h,08dffbd39h,0aa14403bh,0c4efa84ch
- DD 0442b0f5ch,0a1b91b2ah,0cf997736h,0b748e317h,0cee90e16h,08d1b62bfh,00b2078c0h,0907ae271h,00c9bcdddh,0df31534bh,039adce83h,0043fb054h,0d826846ah,099031043h,0b144f393h,061a9c0d6h
- DD 047718427h,0dab48046h,06e830f8bh,0df17ff9bh,0e49a1347h,0408d7ee8h,091c1d4aeh,06ac71e23h,01defd73ch,0c8cbb9fdh,0bbbbfec5h,019840657h,09e7ef8eah,039db1cb5h,064105f30h,078aa8296h
- DD 0a3738c29h,0a3d9b7f0h,0bc3250a3h,00a2f235ah,0445e4cafh,055e506f6h,033475f7ah,00974f73dh,05ba2f5a8h,0d37dbba3h,06af40066h,0542c6e63h,0c5d73e2ch,026d99b53h,06c3ca33eh,006060d7dh
- DD 0065fef4ah,0cdbef1c2h,0fd5b92e3h,077e60f7dh,026708350h,0d7c549f0h,034f121bfh,0201b3ad0h,00334fc14h,05fcac2a1h,0344552f6h,08a9a9e09h,097653082h,07dd8a1d3h,079d4f289h,05fc0738fh
- DD 017d2d8c3h,0787d244dh,070830684h,0effc6345h,0e4f73ae5h,05ddb96ddh,0172549a5h,08efb14b1h,02245ae7ah,06eb73eeeh,0ea11f13eh,0bca4061eh,030b01f5dh,0b577421dh,0782e152ch,0aa688b24h
- DD 0bd3502bah,067608e71h,0b4de75a0h,04ef41f24h,0fd6125e5h,0b08dde5eh,0a409543fh,0de484825h,065cc2295h,01f198d98h,06e0edfa2h,0428a3771h,0adf35fc7h,04f9697a2h,0f7cac3c7h,001a43c79h
- DD 00fd3659ah,0b05d7059h,0bb7f2d9ah,08927f30ch,08cf984d3h,04023d1ach,002897a45h,032125ed3h,03d414205h,0fb572dadh,0e3fa82a9h,073000ef2h,0f10a5581h,04c0868e9h,06b0b3ca5h,05b61fc67h
- DD 07cae440ch,0c1258d5bh,0402b7531h,021c08b41h,0de932321h,0f61a8955h,02d1408afh,03568faf8h,09ecf965bh,071b15e99h,0e917276fh,0f14ed248h,0820cf9e2h,0c6f4caa1h,018d83c7eh,0681b20b2h
- DD 0c6c01120h,06cde738dh,0ae70e0dbh,071db0813h,074afe18ch,095fc0644h,0129e2be7h,034619053h,0db2a3b15h,080615ceah,0db4c7073h,00a49a19eh,08fd2d367h,00e1b84c8h,0033fb8aah,0d74bf462h
- DD 0533ef217h,0889f6d65h,0c3ca2e87h,07158c7e4h,0dc2b4167h,0fb670dfbh,0844c257fh,075910a01h,0cf88577dh,0f336bf07h,0e45e2aceh,022245250h,07ca23d85h,02ed92e8dh,02b812f58h,029f8be4ch
- DD 0076fe12bh,0dd9ebaa7h,0ae1537f9h,03f2400cbh,017bdfb46h,01aa93528h,067883b41h,0c0f98430h,00170911dh,05590ede1h,034d4b17fh,07562f5bbh,01826b8d2h,0e1fa1df2h,06bd80d59h,0b40b796ah
- DD 03467ba92h,0d65bf197h,0f70954b0h,08c9b46dbh,00e78f15dh,097c8a0f3h,085a4c961h,0a8f3a69ah,061e4ce9bh,04242660fh,06ea6790ch,0bf06aab3h,0ec986416h,0c6706f8eh,09a9fc225h,09e56dec1h
- DD 09a9898d9h,0527c46f4h,05633cdefh,0d799e77bh,07d9e4297h,024eacc16h,06b1cb734h,0abb61ceah,0f778443ch,0bee2e8a7h,029de2fe6h,03bb42bf1h,03003bb6fh,0cbed86a1h,0d781cdf6h,0d3918e6ch
- DD 09a5103f1h,04bee3271h,0f50eac06h,05243efc6h,06adcc119h,0b8e122cbh,0c0b80a08h,01b7faa84h,06dfcd08ch,032c3d1bdh,00be427deh,0129dec4eh,01d263c83h,098ab679ch,0cef64effh,0afc83cb7h
- DD 02fa6be76h,085eb6088h,01328cbfeh,0892585fbh,0cf618ddah,0c154d3edh,03abaf26eh,0c44f601bh,02be1fdfdh,07bf57d0bh,021137feeh,0a833bd2dh,02db591a8h,09353af36h,05562a056h,0c76f26dch
- DD 03fdf5a51h,01d87e47dh,055c9cab0h,07afb5f93h,089e0586eh,091bbf58fh,00d843709h,07c72c018h,099b5c3dch,0a9a5aafbh,03844aeb0h,0a48a0f1dh,0b667e482h,07178b7ddh,06e23a59ah,0453985e9h
- DD 001b25dd8h,04a54c860h,0fb897c8ah,00dd37f48h,00ea90cd9h,05f8aa610h,016d5830dh,0c8892c68h,0ef514ca5h,0eb4befc0h,0e72c9ee6h,0478eb679h,0dbc40d5fh,09bca20dah,0dde4f64ah,0f015de21h
- DD 0eaf4b8a5h,0aa6a4de0h,04bc60e32h,068cfd9cah,07fd15e70h,0668a4b01h,0f27dc09dh,0d9f0694ah,0ba708bcdh,0f6c3cad5h,05bb95c2ah,05cd2ba69h,033c0a58fh,0aa28c1d3h,0abc77870h,023e274e3h
- DD 0dfd20a4ah,044c3692dh,081a66653h,0091c5fd3h,009a0757dh,06c0bb691h,0667343eah,09072e8b9h,080848bech,031d40eb0h,079fd36cch,095bd480ah,065ed43f5h,001a77c61h,02e0d40bfh,0afccd127h
- DD 01cc1884bh,0eccfc82dh,05d4753b4h,0c85ac201h,0658e099fh,0c7a6caach,004b27390h,0cf46369eh,0506467eah,0e2e7d049h,037cdeccch,0481b63a2h,0ed80143ah,04029abd8h,0bcb00b88h,028bfe3c7h
- DD 00643d84ah,03bec1009h,0abd11041h,0885f3668h,0f83a34d6h,0db02432ch,0719ceebeh,032f7b360h,0dad1fe7ah,0f06c7837h,05441a0b0h,060a157a9h,0e2d47550h,0704970e9h,0271b9020h,0cd2bd553h
- DD 033e24a0bh,0ff57f82fh,0f2565079h,09cbee23fh,0eb5f5825h,016353427h,0e948d662h,0276feec4h,0da10032bh,0d1b62bc6h,0f0e72a53h,0718351ddh,02420e7bah,093452076h,03a00118dh,096368fffh
- DD 0150a49e4h,000ce2d26h,03f04706bh,00c28b636h,058b196d0h,0bad65a46h,0ec9f8b7ch,06c8455fch,02d71867eh,0e90c895fh,0edf9f38ch,05c0be31bh,0d8f6ec04h,02a37a15eh,08cd85251h,0239639e7h
- DD 09c7c4c6bh,0d8975315h,0d7409af7h,0603aa3c0h,0007132fbh,0b8d53d0ch,0a6849238h,068d12af7h,0bf5d9279h,0be0607e7h,0aada74ceh,09aa50055h,0ba7e8ccbh,0e81079cbh,0a5f4ff5eh,0610c71d1h
- DD 05aa07093h,09e2ee1a7h,0a75da47ch,0ca84004bh,03de75401h,0074d3951h,0bb311592h,0f938f756h,000a43421h,096197618h,007bc78c8h,039a25362h,00a171276h,0278f710ah,08d1a8f08h,0b28446eah
- DD 0e3b6a661h,0184781bfh,0e6d279f7h,07751cb1dh,0c59eb662h,0f8ff95d6h,058d3dea7h,0186d90b7h,0dfb4f754h,00e4bb6c1h,02b2801dch,05c5cf56bh,01f54564dh,0c561e452h,0f0dd7f13h,0b4fb8c60h
- DD 033ff98c7h,0f8849630h,0cf17769ch,09619fffah,01bfdd80ah,0f8090bf6h,0422cfe63h,014d9a149h,06f6df9eah,0b354c360h,0218f17eah,0dbcf770dh,079eb3480h,0207db7c8h,0559b6a26h,0213dbda8h
- DD 029fc81b3h,0ac4c200bh,0171d87c1h,0ebc3e09fh,01481aa9eh,091799530h,092e114fah,0051b92e1h,0ecb5537fh,0df8f92e9h,0290c7483h,044b1b2cch,02adeb016h,0a711455ah,081a10c2ch,0964b6856h
- DD 0cec03623h,04f159d99h,0ef3271eah,005532225h,0c5ee4849h,0b231bea3h,07094f103h,057a54f50h,09598b352h,03e2d421dh,067412ab4h,0e865a49ch,01cc3a912h,0d2998a25h,00c74d65dh,05d092808h
- DD 04088567ah,073f45908h,01f214a61h,0eb6b280eh,0caf0c13dh,08c9adc34h,0f561fb80h,039d12938h,0bc6edfb4h,0b2dc3a5eh,0fe4d210eh,07485b1b1h,0e186ae72h,0062e0400h,06eeb3b88h,091e32d5ch
- DD 04be59224h,06df574d7h,0716d55f3h,0ebc88ccch,0cad6ed33h,026c2e6d0h,00d3e8b10h,0c6e21e7dh,05bcc36bbh,02cc5840eh,07da74f69h,09292445eh,04e5193a8h,08be8d321h,08df06413h,03ec23629h
- DD 0b134defah,0c7e9ae85h,01bb2d475h,06073b1d0h,02863c00dh,0b9ad615eh,0525f4ac4h,09e29493dh,04e9acf4fh,0c32b1deah,0a50db88dh,03e1f01c8h,004da916ch,0b05d70eah,0d865803eh,0714b0d0ah
- DD 09920cb5eh,04bd493fch,092c7a3ach,05b44b1f7h,0bcec9235h,0a2a77293h,0cd378553h,05ee06e87h,0da621607h,0ceff8173h,099f5d290h,02bb03e4ch,0a6f734ach,02945106ah,0d25c4732h,0b5056604h
- DD 0e079afeeh,05945920ch,06789831fh,0686e17a0h,0b74a5ae5h,05966bee8h,01e258d46h,038a673a2h,083141c95h,0bd1cc1f2h,00e96e486h,03b2ecf4fh,074e5fc78h,0cd3aa896h,02482fa7ah,0415ec10ch
- DD 080503380h,015234419h,0d314b392h,0513d917ah,063caecaeh,0b0b52f4eh,02dc7780bh,007bf22adh,0e4306839h,0e761e8a1h,05dd7feaah,01b3be962h,074c778f1h,04fe728deh,05e0070f6h,0f1fa0bdah
- DD 06ec3f510h,085205a31h,0d2980475h,02c7e4a14h,06f30ebfdh,0de3c19c0h,0d4b7e644h,0db1c1f38h,05dce364ah,0fe291a75h,0058f5be3h,0b7b22a3ch,037fea38ch,02cd2c302h,02e17be17h,02930967ah
- DD 00c061c65h,087f009deh,0edc6ed44h,0cb014aach,03bafb1ebh,049bd1cb4h,0282d3688h,081bd8b5ch,0f01a17afh,01cdab87eh,0e710063bh,021f37ac4h,042fc8193h,05a6c5676h,056a6015ch,0f4753e70h
- DD 0a15b0a44h,0020f795eh,08958a958h,08f37c8d7h,0a4b675b5h,063b7e89bh,00fc31aeah,0b4fb0c0ch,0a7ff1f2eh,0ed95e639h,0619614fbh,09880f5a3h,0947151abh,0deb6ff02h,0a868dcdbh,05bc5118ch
- DD 04c20cea5h,0d8da2055h,014c4d69ah,0cac2776eh,0622d599bh,0cccb22c1h,068a9bb50h,0a4ddb653h,01b4941b4h,02c4ff151h,06efba588h,0e1ff19b4h,0c48345e0h,035034363h,01e29dfc4h,045542e3dh
- DD 0349f7aedh,0f197cb91h,08fca8420h,03b2b5a00h,023aaf6d8h,07c175ee8h,035af32b6h,054dcf421h,027d6561eh,00ba14307h,0d175b1e2h,0879d5ee4h,099807db5h,0c7c43673h,09cd55bcdh,077a54455h
- DD 00105c072h,0e6c2ff13h,08dda7da4h,018f7a99fh,00e2d35c1h,04c301820h,0d9cc6c82h,006a53ca0h,0f1aa1d9eh,0aa21cc1eh,04a75b1e8h,032414334h,00ebe9fdch,02a6d1328h,098a4755ah,016bd173fh
- DD 02133ffd9h,0fbb9b245h,0830f1a20h,039a8b2f1h,0d5a1f52ah,0484bc97dh,0a40eddf8h,0d6aebf56h,076ccdac6h,032257acbh,01586ff27h,0af4d36ech,0f8de7dd1h,08eaa8863h,088647c16h,00045d5cfh
- DD 0c005979dh,0a6f3d574h,06a40e350h,0c2072b42h,08de2ecf9h,0fca5c156h,0a515344eh,0a8c8bf5bh,0114df14ah,097aee555h,0fdc5ec6bh,0d4374a4dh,02ca85418h,0754cc28fh,0d3c41f78h,071cb9e27h
- DD 003605c39h,089105079h,0a142c96ch,0f0843d9eh,016923684h,0f3744934h,0fa0a2893h,0732caa2fh,061160170h,0b2e8c270h,0437fbaa3h,0c32788cch,0a6eda3ach,039cd818eh,09e2b2e07h,0e2e94239h
- DD 00260e52ah,06967d39bh,090653325h,0d42585cch,021ca7954h,00d9bd605h,081ed57b3h,04fa20877h,0e34a0bbeh,060c1eff8h,084f6ef64h,056b0040ch,0b1af8483h,028be2b24h,0f5531614h,0b2278163h
- DD 05922ac1ch,08df27545h,0a52b3f63h,0a7b3ef5ch,071de57c4h,08e77b214h,0834c008bh,031682c10h,04bd55d31h,0c76824f0h,017b61c71h,0b6d1c086h,0c2a5089dh,031db0903h,0184e5d3fh,09c092172h
- DD 0c00cc638h,0dd7ced5bh,061278fc2h,01a2015ebh,06a37f8d6h,02e8e5288h,0e79933adh,0c457786fh,02c51211ah,0b3fe4cceh,024c20498h,0ad9b10b2h,0d28db5e5h,090d87a4fh,03aca2fc3h,0698cd105h
- DD 0e91b536dh,04f112d07h,09eba09d6h,0ceb982f2h,0197c396fh,03c157b2ch,07b66eb24h,0e23c2d41h,03f330d37h,0480c57d9h,079108debh,0b3a4c8a1h,0cb199ce5h,0702388deh,0b944a8d4h,00b019211h
- DD 0840bb336h,024f2a692h,0a669fa7bh,07c353bdch,0dec9c300h,0da20d6fch,0a13a4f17h,0625fbe2fh,0dbc17328h,0a2b1b61ah,0a9515621h,0008965bfh,0c620ff46h,049690939h,08717e91ch,0182dd27dh
- DD 0ea6c3997h,05ace5035h,0c2610befh,054259aaah,03c80dd39h,0ef18bb3fh,05fc3fa39h,06910b95bh,043e09aeeh,0fce2f510h,0a7675665h,0ced56c9fh,0d872db61h,010e265ach,0ae9fce69h,06982812eh
- DD 0ce800998h,029be11c6h,0b90360d9h,072bb1752h,05a4ad590h,02c193197h,09fc1dbc0h,02ba2f548h,0e490ebe0h,07fe4eebbh,07fae11c0h,012a0a4cdh,0e903ba37h,07197cf81h,0de1c6dd8h,0cf7d4aa8h
- DD 03fd5684ch,092af6bf4h,080360aa1h,02b26eecfh,000546a82h,0bd960f30h,0f59ad8feh,0407b3c43h,0249c82bah,086cae5feh,02463744ch,09e0faec7h,094916272h,087f551e8h,06ceb0615h,0033f9344h
- DD 08be82e84h,01e5eb0d1h,07a582fefh,089967f0eh,0a6e921fah,0bcf687d5h,0d37a09bah,0dfee4cf3h,0b493c465h,094f06965h,07635c030h,0638b9a1ch,066f05e9fh,076667864h,0c04da725h,0ccaf6808h
- DD 0768fccfch,0ca2eb690h,0b835b362h,0f402d37dh,0e2fdfcceh,00efac0d0h,0b638d990h,0efc9cdefh,0d1669a8bh,02af12b72h,05774ccbdh,033c536bch,0fb34870eh,030b21909h,07df25acah,0c38fa2f7h
- DD 0bf81f3f5h,074c5f02bh,0af7e4581h,00525a5aeh,0433c54aeh,088d2aabah,0806a56c5h,0ed9775dbh,0c0edb37dh,0d320738ah,066cc1f51h,025fdb6eeh,010600d76h,0ac661d17h,0bdd1ed76h,0931ec1f3h
- DD 019ee43f1h,065c11d62h,060829d97h,05cd57c3eh,0984be6e8h,0d26c91a3h,08b0c53bdh,0f08d9309h,0c016e4eah,094bc9e5bh,011d43d2bh,0d3916839h,073701155h,0886c5ad7h,020b00715h,0e0377626h
- DD 0aa80ba59h,07f01c9ech,068538e51h,03083411ah,0e88128afh,0970370f1h,091dec14bh,0625cc3dbh,001ac3107h,0fef9666ch,0d5057ac3h,0b2a8d577h,092be5df7h,0b0f26299h,000353924h,0f579c8e5h
- DD 01341ed7ah,0b8fa3d93h,0a7b59d49h,04223272ch,083b8c4a4h,03dcb1947h,0ed1302e4h,04e413c01h,0e17e44ceh,06d999127h,033b3adfbh,0ee86bf75h,025aa96cah,0f6902fe6h,0e5aae47dh,0b73540e4h
- DD 01b4a158ch,032801d7bh,027e2a369h,0e571c99eh,010d9f197h,040cb76c0h,03167c0aeh,0c308c289h,0eb7958f2h,0a6ef9dd3h,0300879b1h,0a7226dfch,07edf0636h,06cd0b362h,07bc37eedh,04efbce6ch
- DD 08d699021h,075f92a05h,0772566e3h,0586d4c79h,0761ad23ah,0378ca5f1h,01465a8ach,0650d86fch,0842ba251h,07a4ed457h,042234933h,06b65e3e6h,031aad657h,0af1543b7h,0cbfec369h,0a4cefe98h
- DD 09f47befbh,0b587da90h,041312d13h,06562e9fbh,0eff1cefeh,0a691ea59h,005fc4cf6h,0cc30477ah,00b0ffd3dh,0a1632461h,05b355956h,0a1f16f3bh,04224ec24h,05b148d53h,0f977012ah,0dc834e7bh
- DD 0b2c69dbch,07bfc5e75h,003c3da6ch,03aa77a29h,0ca910271h,0de0df03ch,07806dc55h,0cbd5ca4ah,06db476cbh,0e1ca5807h,05f37a31eh,0fde15d62h,0f41af416h,0f49af520h,07d342db5h,096c5c5b1h
- DD 0eb4ceb9bh,0155c43b7h,04e77371ah,02e993010h,0675d43afh,01d2987dah,08599fd72h,0ef2bc1c0h,09342f6b2h,096894b7bh,07c8e71f0h,0201eadf2h,04a1f3efch,0f3479d9fh,0702a9704h,0e0f8a742h
- DD 0b3eba40ch,0eafd44b6h,0c1c1e0d0h,0f9739f29h,0619d505eh,00091471ah,09d7c263eh,0c15f9c96h,083afbe33h,05be47285h,004f1e092h,0a3b6d6afh,0751a9d11h,0e76526b9h,09a4ae4d2h,02ec5b26dh
- DD 002f6fb8dh,0eb66f4d9h,096912164h,04063c561h,080ef3000h,0eb7050c1h,0eaa5b3f0h,0288d1c33h,007806fd8h,0e87c68d6h,04bbbf50fh,0b2f7f9d5h,0ac8d6627h,025972f3ah,010e8c13bh,0f8547774h
- DD 0872b4a60h,0cc50ef6ch,04613521bh,0ab2a34a4h,0983e15d1h,039c5c190h,059905512h,061dde5dfh,09f2275f3h,0e417f621h,0451d894bh,00750c8b6h,078b0bdaah,075b04ab9h,0458589bdh,03bfd9fd4h
- DD 0ee9120b6h,0f1013e30h,023a4743eh,02b51af93h,048d14d9eh,0ea96ffaeh,0698a1d32h,071dc0dbeh,00180cca4h,0914962d2h,0c3568963h,01ae60677h,0437bc444h,08cf227b1h,0c9962c7ah,0c650c83bh
- DD 0fe7ccfc4h,023c2c7ddh,01b929d48h,0f925c89dh,006783c33h,04460f74bh,0a590475ah,0ac2c8d49h,0b807bba0h,0fb40b407h,069ff8f3ah,09d1e362dh,0cbef64a4h,0a33e9681h,0332fb4b2h,067ece5fah
- DD 0739f10e3h,06900a99bh,0ff525925h,0c3341ca9h,0a9e2d041h,0ee18a626h,029580dddh,0a5a83685h,09d7de3cdh,0f3470c81h,02062cf9ch,0edf02586h,0c010edb0h,0f43522fah,013a4b1aeh,030314135h
- DD 0db22b94bh,0c792e02ah,0a1eaa45bh,0993d8ae9h,0cd1e1c63h,08aad6cd3h,0c5ce688ah,089529ca7h,0e572a253h,02ccee3aah,002a21efbh,0e02b6438h,0c9430358h,0a7091b6eh,09d7db504h,006d1b1fah
- DD 0c4744733h,058846d32h,0379f9e34h,040517c71h,0130ef6cah,02f65655fh,0f1f3503fh,0526e4488h,07ee4a976h,08467bd17h,0921363d1h,01d9dc913h,0b069e041h,0d8d24c33h,02cdf7f51h,05eb5da0ah
- DD 0197b994fh,01c0f3cb1h,02843eae9h,03c95a6c5h,0a6097ea5h,07766ffc9h,0d723b867h,07bea4093h,04db378f9h,0b48e1f73h,0e37b77ach,070025b00h,0af24ad46h,0943dc8e7h,016d00a85h,0b98a15ach
- DD 02743b004h,03adc38bah,0334415eeh,0b1c7f4f7h,01e62d05ah,0ea43df8fh,09d76a3b6h,032618905h,0a23a0f46h,02fbd0bb5h,06a01918ch,05bc971dbh,0b4743f94h,07801d94ah,0676ae22bh,0b94df65eh
- DD 0af95894ch,0aafcbfabh,0276b2241h,07b9bdc07h,05bdda48bh,0eaf98362h,0a3fcb4dfh,05977faf2h,0052c4b5bh,0bed042efh,0067591f0h,09fe87f71h,022f24ec7h,0c89c73cah,0e64a9f1bh,07d37fa9eh
- DD 015562627h,02710841ah,0c243b034h,02c01a613h,02bc68609h,01d135c56h,08b03f1f6h,0c2ca1715h,03eb81d82h,0c9966c2dh,08f6df13eh,0c02abf4ah,08f72b43bh,077b34bd7h,0360c82b0h,0aff6218fh
- DD 08d55b9d2h,00aa5726ch,099e9bffbh,0dc0adbe9h,0efb9e72ah,09097549ch,09dfb3111h,016755712h,0f26847f9h,0dd8bf984h,0dfb30cb7h,0bcb8e387h,05171ef9ch,0c1fd32a7h,0389b363fh,0977f3fc7h
- DD 0f4babda0h,0116eaf2bh,0f7113c8eh,0feab68bdh,0b7def526h,0d1e3f064h,0e0b3fa02h,01ac30885h,040142d9dh,01c5a6e7bh,030921c0bh,0839b5603h,036a116a3h,048f301fah,0cfd9ee6dh,0380e1107h
- DD 058854be1h,07945ead8h,0cbd4d49dh,04111c12eh,03a29c2efh,0ece3b1ech,08d3616f5h,06356d404h,0594d320eh,09f0d6a8fh,0f651ccd2h,00989316dh,00f8fdde4h,06c32117ah,0a26a9bbch,09abe5cc5h
- DD 09723f671h,0cff560fbh,07f3d593ch,021b2a12dh,024ba0696h,0e4cb18dah,0c3543384h,0186e2220h,088312c29h,0722f64e0h,017dc7752h,094282a99h,05a85ee89h,062467bbfh,0f10076a0h,0f435c650h
- DD 043b3a50bh,0c9ff1539h,01a53efbch,07132130ch,0f7b0c5b7h,031bfe063h,04ea994cch,0b0179a7dh,0c85f455bh,012d064b3h,08f6e0062h,047259328h,0b875d6d9h,0f64e590bh,0ad92bcc7h,022dd6225h
- DD 0b9c3bd6dh,0b658038eh,0fbba27c8h,000cdb0d6h,01062c45dh,00c681337h,02d33407dh,0d8515b8ch,08cbb5ecfh,0cb8f699eh,0c608d7d8h,08c4347f8h,0bb3e00dbh,02c11850ah,0ecb49d19h,020a8dafdh
- DD 045ee2f40h,0bd781480h,0416b60cfh,075e354afh,08d49a8c4h,0de0b58a1h,0fa359536h,0e40e94e2h,062accd76h,0bd4fa59fh,08c762837h,005cf466ah,0448c277bh,0b5abda99h,048b13740h,05a9e01bfh
- DD 0326aad8dh,09d457798h,0c396f7e7h,0bdef4954h,0c253e292h,06fb274a2h,01cfe53e7h,02800bf0ah,044438fd4h,022426d31h,05e259f9ah,0ef233923h,003f66264h,04188503ch,07f9fdfabh,09e5e7f13h
- DD 05fcc1abah,0565eb76ch,059b5bff8h,0ea632548h,0aab6d3fah,05587c087h,06ce39c1bh,092b639eah,0953b135ch,00706e782h,0425268efh,07308912eh,0090e7469h,0599e92c7h,09bc35e75h,083b90f52h
- DD 0244975b3h,04750b3d0h,011965d72h,0f3a44358h,09c8dc751h,0179c6774h,0d23d9ff0h,0ff18cdfeh,02028e247h,0c4013833h,0f3bfbc79h,096e280e2h,0d0880a84h,0f60417bdh,02a568151h,0263c9f3dh
- DD 02d2ce811h,036be15b3h,0f8291d21h,0846dc0c2h,0789fcfdbh,05cfa0ecbh,0d7535b9ah,045a0beedh,096d69af1h,0ec8e9f07h,0599ab6dch,031a7c5b8h,0f9e2e09fh,0d36d45efh,0dcee954bh,03cf49ef1h
- DD 0086cff9bh,06be34cf3h,039a3360fh,088dbd491h,00dbfbd1dh,01e96b8cch,0cb7e2552h,0c1e5f7bfh,028819d98h,00547b214h,07aea9dcbh,0c770dd9ch,0041d68c8h,0aef0d4c7h,013cb9ba8h,0cc2b9818h
- DD 0fe86c607h,07fc7bc76h,0502a9a95h,06b7b9337h,0d14dab63h,01948dc27h,0dae047beh,0249dd198h,0a981a202h,0e8356584h,03a893387h,03531dd18h,0c85c7209h,01be11f90h,0e2a52b5ah,093d2fe1eh
- DD 0ec6d6b97h,08225bfe2h,0bd0aa5deh,09cf6d6f4h,054779f5fh,0911459cbh,086aeb1f3h,05649cddbh,03f26ce5ah,032133579h,0550f431eh,0c289a102h,073b84c6fh,0559dcfdah,0ee3ac4d7h,084973819h
- DD 0f2606a82h,0b51e55e6h,090f2fb57h,0e25f7061h,0b1a4e37ch,0acef6c2ah,05dcf2706h,0864e359dh,07ce57316h,0479e6b18h,03a96b23dh,02cab2500h,08ef16df7h,0ed489862h,0ef3758b5h,02056538ch
- DD 0f15d3101h,0a7df865eh,061b553d7h,080c5533ah,04ed14294h,0366e1997h,0b3c0bcd6h,06620741fh,0edc45418h,021d1d9c4h,0c1cc4a9dh,0005b859eh,0a1c462f0h,0df01f630h,0f26820c7h,015d06cf3h
- DD 03484be47h,09f7f24eeh,04a0c902fh,02ff33e96h,05a0bc453h,000bdf457h,01aa238dbh,02378dfafh,0856720f2h,0272420ech,096797291h,02ad9d95bh,0768a1558h,0d1242cc6h,05cc86aa8h,02e287f8bh
- DD 0990cecaah,0796873d0h,0675d4080h,0ade55f81h,021f0cd84h,02645eea3h,0b4e17d02h,07a1efa0fh,0037cc061h,0f6858420h,0d5d43e12h,0682e05f0h,027218710h,059c36994h,03f7cd2fch,085cbba4dh
- DD 07a3cd22ah,0726f9729h,04a628397h,09f8cd5dch,0c23165edh,017b93ab9h,0122823d4h,0ff5f5dbfh,0654a446dh,0c1e4e4b5h,0677257bah,0d1a9496fh,0de766a56h,06387ba94h,0521ec74ah,023608bc8h
- DD 06688c4d4h,016a522d7h,007373abdh,09d6b4282h,0b42efaa3h,0a62f07ach,0e3b90180h,0f73e00f7h,049421c3eh,036175fech,03dcf2678h,0c4e44f9bh,07220f09fh,076df436bh,03aa8b6cfh,0172755fbh
- DD 0446139cch,0bab89d57h,05fe0208fh,00a0a6e02h,011e5d399h,0cdbb63e2h,0a8977f0bh,033ecaa12h,0f7c42664h,059598b21h,0ab65d08ah,0b3e91b32h,0f4502526h,0035822eeh,0720a82a9h,01dcf0176h
- DD 03d589e02h,050f8598fh,0b1d63d2ch,0df0478ffh,01571cd07h,08b8068bdh,0d79670cdh,030c3aa4fh,0941ade7fh,025e8fd4bh,032790011h,03d1debdch,03a3f9ff0h,065b6dcbdh,0793de69ch,0282736a4h
- DD 0d41d3bd3h,0ef69a0c3h,007a26bdeh,0b533b8c9h,0db2edf9fh,0e2801d97h,0e1877af0h,0dc4a8269h,03d590dbeh,06c1c5851h,0ee4e9357h,084632f6bh,079b33374h,0d36d36b7h,09bbca2e6h,0b46833e3h
- DD 0f7fc0586h,037893913h,066bf4719h,0385315f7h,0b31855dch,072c56293h,0849061feh,0d1416d4eh,051047213h,0beb3ab78h,0f040c996h,0447f6e61h,0638b1d0ch,0d06d310dh,0bad1522eh,0e28a413fh
- DD 082003f86h,0685a76cbh,00bcdbca3h,0610d07f7h,09ca4c455h,06ff66021h,0cea10eech,07df39b87h,0e22db218h,0b9255f96h,008a34c44h,08cc6d9ebh,0859f9276h,0cd4ffb86h,050d07335h,08fa15eb2h
- DD 0cf2c24b5h,0df553845h,052f9c3bah,089f66a9fh,0e4a7ceb3h,08f22b5b9h,00e134686h,0affef809h,08eb8fac2h,03e53e1c6h,028aec98eh,093c1e4ebh,032a43bcbh,0b6b91ec5h,0b2d74a51h,02dbfa947h
- DD 0ca84bad7h,0e065d190h,0ad58e65ch,0fb13919fh,0f1cb6e31h,03c41718bh,006d05c3fh,0688969f0h,021264d45h,0d4f94ce7h,07367532bh,0fdfb65e9h,00945a39dh,05b1be8b1h,02b8baf3bh,0229f789ch
- DD 06f49f15dh,0d8f41f3eh,0907f0792h,0678ce828h,0fca6e867h,0c69ace82h,0d01dcc89h,0106451aeh,019fc32d2h,01bb4f7f0h,0b00c52d2h,064633dfch,0ad9ea445h,08f13549ah,0fb323705h,099a3bf50h
- DD 0534d4dbch,00c9625a2h,0c2a2fea3h,045b8f1d1h,0a530fc1ah,076ec21a1h,09e5bd734h,04bac9c2ah,07b4e3587h,05996d76ah,01182d9e3h,00045cdeeh,01207f13dh,01aee24b9h,097345a41h,066452e97h
- DD 09f950cd0h,016e5b054h,0d7fdd075h,09cc72fb1h,066249663h,06edd61e7h,0f043cccbh,0de4caa4dh,055c7ac17h,011b1f57ah,01a85e24dh,0779cbd44h,0e46081e7h,078030f86h,08e20f643h,0fd4a6032h
- DD 00a750c0fh,0cc7a6488h,04e548e83h,039bacfe3h,00c110f05h,03d418c76h,0b1f11588h,03e4daa4ch,05ffc69ffh,02733e7b5h,092053127h,046f147bch,0d722df94h,0885b2434h,0e6fc6b7ch,06a444f65h
- DD 0c3f16ea8h,07a1a465ah,0b2f1d11ch,0115a461dh,06c68a172h,04767dd95h,0d13a4698h,03392f2ebh,0e526cdc7h,0c7a99ccdh,022292b81h,08e537fdch,0a6d39198h,076d8cf69h,02446852dh,0ffc5ff43h
- DD 0a90567e6h,097b14f7eh,0b6ae5cb7h,0513257b7h,09f10903dh,085454a3ch,069bc3724h,0d8d2c9adh,06b29cb44h,038da9324h,077c8cbach,0b540a21dh,001918e42h,09bbfe435h,056c3614eh,0fffa707ah
- DD 0d4e353b7h,00ce4e3f1h,0ef46b0a0h,0062d8a14h,0574b73fdh,06408d5abh,0d3273ffdh,0bc41d1c9h,06be77800h,03538e1e7h,0c5655031h,071fe8b37h,06b9b331ah,01cd91621h,0bb388f73h,0ad825d0bh
- DD 01cb76219h,056c2e05bh,071567e7eh,00ec0bf91h,061c4c910h,0e7076f86h,0babc04d9h,0d67b085bh,05e93a96ah,09fb90459h,0fbdc249ah,07526c1eah,0ecdd0bb7h,00d44d367h,09dc0d695h,095399917h
- DD 09e240d18h,061360ee9h,0b4b94466h,0057cdcach,02fe5325ch,0e7667cd1h,021974e3bh,01fa297b5h,0db083d76h,0fa4081e7h,0f206bd15h,031993be6h,014c19f8ch,08949269bh,0a9d92357h,021468d72h
- DD 0a4c506ech,02ccbc583h,0d1acfe97h,0957ed188h,012f1aea2h,08baed833h,08325362dh,0ef2a6cb4h,08e195c43h,0130dde42h,00e6050c6h,0c842025ah,008686a5dh,02da972a7h,0e508b4a8h,0b52999a1h
- DD 010a5a8bdh,0d9f090b9h,0096864dah,0ca91d249h,03f67dbc1h,08e6a93beh,0f5f4764ch,0acae6fbah,0d21411a0h,01563c6e0h,0da0a4ad8h,028fa787fh,0908c8030h,0d524491ch,04c795f07h,01257ba0eh
- DD 0ceca9754h,083f49167h,04b7939a0h,0426d2cf6h,0723fd0bfh,02555e355h,0c4f144e2h,0a96e6d06h,087880e61h,04768a8ddh,0e508e4d5h,015543815h,0b1b65e15h,009d7e772h,0ac302fa0h,063439dd6h
- DD 0c14e35c2h,0b93f802fh,04341333ch,071735b7ch,016d4f362h,003a25104h,0bf433c8eh,03f4d069bh,0f78f5a7ch,00d83ae01h,07c4eed07h,050a8ffbeh,076e10f83h,0c74f8906h,09ddaf8e1h,07d080966h
- DD 0698e04cch,0b11df8e1h,0169005c8h,0877be203h,04f3c6179h,032749e8ch,07853fc05h,02dbc9d0ah,09454d937h,0187d4f93h,0b4800e1bh,0e682ce9dh,0165e68e8h,0a9129ad8h,0be7f785bh,00fe29735h
- DD 05b9e02b7h,05303f40ch,035ee04e8h,0a37c9692h,034d6632bh,05f46cc20h,096ac545bh,055ef72b2h,07b91b062h,0abec5c1fh,0bb33e821h,00a79e1c7h,03a9f4117h,0bb04b428h,0fd2a475ah,00de1f28fh
- DD 03a4434b4h,031019ccfh,01a7954dch,0a3458111h,0e34972a7h,0a9dac80dh,074f6b8ddh,0b043d054h,011137b1ah,0021c319eh,0ed5cc03fh,000a754ceh,0cbea5ad4h,00aa2c794h,070c015b6h,0093e67f4h
- DD 0c97e3f6bh,072cdfee9h,0b6da7461h,0c10bcab4h,0b59806b9h,03b02d2fch,0a1de6f47h,085185e89h,00eb6c4d4h,039e6931fh,0d4fa5b04h,04d4440bdh,034be7eb8h,05418786eh,09d7259bch,06380e521h
- DD 0d598d710h,020ac0351h,0cb3a4da4h,0272c4166h,0ca71de1fh,0db82fe1ah,0d8f54b0fh,0746e79f2h,04b573e9bh,06e7fc736h,0fd4b5040h,075d03f46h,00b98d87bh,05c1cc36dh,01f472da1h,0513ba3f1h
- DD 0abb177ddh,079d0af26h,07891d564h,0f82ab568h,072232173h,02b6768a9h,08c1f6619h,0efbb3bb0h,0a6d18358h,0b29c11dbh,0b0916d3ah,0519e2797h,09188e290h,0d4dc18f0h,098b0ca7fh,0648e86e3h
- DD 0983c38b5h,0859d3145h,0637abc8bh,0b14f176ch,0caff7be6h,02793fb9dh,035a66a5ah,0ebe5a55fh,09f87dc59h,07cec1dcdh,0fbdbf560h,07c595cd3h,026eb3257h,05b543b22h,0c4c935fdh,069080646h
- DD 081e9ede3h,07f2e4403h,0caf6df0ah,0243c3894h,01c073b11h,07c605bb1h,0ba6a4a62h,0cd06a541h,049d4e2e5h,029168949h,04af66880h,033649d07h,0e9a85035h,0bfc0c885h,0fc410f4bh,0b4e52113h
- DD 078a6513bh,0dca3b706h,09edb1943h,092ea4a2ah,0db6e2dd8h,002642216h,09fd57894h,09b45d0b4h,0c69d11aeh,0114e70dbh,04c57595fh,01477dd19h,0ec77c272h,0bc2208b4h,0db68f59ch,095c5b4d7h
- DD 042e532b7h,0b8c4fc63h,09ae35290h,0386ba422h,0d201ecbch,0fb5dda42h,0a0e38fd6h,02353dc8bh,068f7e978h,09a0b85eah,02ad6d11fh,096ec5682h,0e5f6886dh,05e279d6ch,03cb1914dh,0d3fe03cdh
- DD 07ea67c77h,0fe541fa4h,0e3ea810ch,0952bd2afh,08d01d374h,0791fef56h,00f11336eh,0a3a1c621h,0c7ec6d79h,05ad0d5a9h,03225c342h,0ff7038afh,0bc69601bh,0003c6689h,045e8747dh,025059bc7h
- DD 0f2086fbfh,0fa4965b2h,086916078h,0f6840ea6h,070081d6ch,0d7ac7620h,0b5328645h,0e600da31h,0529b8a80h,001916f63h,02d7d6f3eh,0e80e4858h,0d664ca7ch,029eb0fe8h,0e7b43b0ch,0f017637bh
- DD 076cb2566h,09a75c806h,0b24892d9h,08f76acb1h,01f08fe45h,07ae7b9cch,06a4907d8h,019ef7329h,05f228bf0h,02db4ab71h,0817032d7h,0f3cdea39h,0dcabe3c0h,00b1f482eh,0bb86325ch,03baf76b4h
- DD 010089465h,0d49065e0h,08e77c596h,03bab5d29h,0193dbd95h,07636c3a6h,0b246e499h,0def5d294h,0286b2475h,0b22c58b9h,0cd80862bh,0a0b93939h,0f0992388h,03002c83ah,0eacbe14ch,06de01f9bh
- DD 0add70482h,06aac688eh,07b4a4e8ah,0708de92ah,0758a6eefh,075b6dd73h,0725b3c43h,0ea4bf352h,087912868h,010041f2ch,0ef09297ah,0b1b1be95h,0a9f3860ah,019ae23c5h,0515dcf4bh,0c4f0f839h
- DD 097f6306ah,03c7ecca3h,068a3a4b0h,0744c44aeh,0b3a1d8a2h,069cd13a0h,05256b578h,07cad0a1eh,033791d9eh,0ea653fcdh,074b2e05fh,09cc2a05dh,0fd7affa2h,073b391dch,0b6b05442h,0ddb7091eh
- DD 08538a5c6h,0c71e27bfh,089abff17h,0195c63ddh,01b71e3dah,0fd315285h,0fa680fa0h,09cbdfda7h,0849d7eabh,09db876cah,03c273271h,0ebe2764bh,0f208dceah,0663357e3h,0565b1b70h,08c5bd833h
- DD 09837fc0dh,0ccc3b4f5h,0a79cf00fh,09b641ba8h,0dfdf3990h,07428243dh,0020786b1h,083a594c4h,0526c4502h,0b712451ah,06adb3f93h,09d39438eh,0e9ff0ccdh,0fdb261e3h,0e07af4c3h,080344e3ch
- DD 02fa4f126h,075900d7ch,05c99a232h,008a3b865h,0db25e0c3h,02478b6bfh,071db2edfh,0482cc2c2h,05f321bb8h,037df7e64h,09a8005b4h,08a93821bh,0cc8c1958h,03fa2f10ch,02c269d0ah,00d332218h
- DD 0e246b0e6h,020ab8119h,0d349fd17h,0b39781e4h,0b31aa100h,0d293231eh,0bb032168h,04b779c97h,0c8470500h,04b3f19e1h,00c4c869dh,045b7efe9h,0a1a6bbcch,0db84f38ah,0b2fddbc1h,03b59cb15h
- DD 03fd165e8h,0ba5514dfh,0061f8811h,0499fd6a9h,0bfef9f00h,072cd1fe0h,079ad7e8ah,0120a4bb9h,05f4a5ac5h,0f2ffd095h,095a7a2f0h,0cfd174f1h,09d17baf1h,0d42301bah,077f22089h,0d2fa487ah
- DD 0b1dc77e1h,09cb09efeh,021c99682h,0e9566939h,06c6067bbh,08c546901h,061c24456h,0fd378574h,081796b33h,02b6a6cbeh,058e87f8bh,062d550f6h,07f1b01b4h,01b763e1ch,01b1b5e12h,04b93cfeah
- DD 01d531696h,0b9345238h,088cdde69h,057201c00h,09a86afc7h,0dde92251h,0bd35cea8h,0e3043895h,08555970dh,07608c1e1h,02535935eh,08267dfa9h,0322ea38bh,0d4c60a57h,0804ef8b5h,0e0bf7977h
- DD 0c06fece4h,01a0dab28h,094e7b49dh,0d405991eh,0706dab28h,0c542b6d2h,0a91618fbh,0cb228da3h,0107d1ceah,0224e4164h,0d0f5d8f1h,0eb9fdab3h,00d6e41cdh,0c02ba386h,09b1f7146h,0676a72c5h
- DD 04d6cb00bh,0ffd6dd98h,0de2e8d7ch,0cef9c5cah,0641c7936h,0a1bbf5d7h,0ee8f772eh,01b95b230h,0e8ac25b1h,0f765a92eh,03a18b7c6h,0ceb04cfch,00acc8966h,027944cefh,0434c1004h,0cbb3c957h
- DD 0a43ff93ch,09c9971a1h,0a1e358a9h,05bc2db17h,0a8d9bc82h,045b4862eh,02201e052h,070ebfbfbh,092871591h,0afdf64c7h,0b42d0219h,0ea5bcae6h,02ad8f03ch,0de536c55h,0a76aa33ch,0cd6c3f4dh
- DD 00bca6de3h,0beb5f623h,0b1e706fdh,0dd20dd99h,0ac9059d4h,090b3ff9dh,07ccccc4eh,02d7b2902h,0ce98840fh,08a090a59h,08410680ah,0a5d947e0h,0923379a5h,049ae346ah,0b28a3156h,07dbc84f9h
- DD 054a1aff2h,0fd40d916h,03a78fb9bh,0abf318bah,03029f95eh,050152ed8h,0c58ad7fah,09fc1dd77h,013595c17h,05fa57915h,08f62b3a9h,0b9504668h,0ff3055b0h,0907b5b24h,09a84f125h,02e995e35h
- DD 07e9bbcfbh,087dacf69h,0e86d96e3h,095d0c1d6h,02d95a75ch,065726e3ch,0acd27f21h,02c3c9001h,06c973f57h,01deab561h,0a5221643h,0108b7e2ch,0c4ef79d4h,05fee9859h,040d4b8c6h,0bd62b88ah
- DD 0197c75d6h,0b4dd29c4h,0b7076febh,0266a6df2h,04bf2df11h,09512d0eah,06b0cc9ech,01320c24fh,001a59596h,06bb1e0e1h,0eff9aaach,08317c5bbh,0385aa6c9h,065bb405eh,08f07988fh,0613439c1h
- DD 016a66e91h,0d730049fh,0fa1b0e0dh,0e97f2820h,0304c28eah,04131e003h,0526bac62h,0820ab732h,028714423h,0b2ac9ef9h,0adb10cb2h,054ecfffah,0f886a4cch,08781476eh,0db2f8d49h,04b2c87b5h
- DD 00a44295dh,0e857cd20h,058c6b044h,0707d7d21h,0f596757ch,0ae8521f9h,067b2b714h,087448f03h,05ebcd58dh,013a9bc45h,09122d3c1h,079bcced9h,09e076642h,03c644247h,02df4767dh,00cf22778h
- DD 071d444b6h,05e61aee4h,0c5084a1dh,0211236bfh,04fd3eaf6h,07e15bc9ah,0ab622bf5h,068df2c34h,059bf4f36h,09e674f0fh,0d7f34d73h,0f883669bh,031497b1dh,0c48ac1b8h,05106703bh,0323b925dh
- DD 074082008h,022156f42h,0c8482bcbh,0effc521ah,012173479h,05c6831bfh,0c4739490h,0caa2528fh,08f1b3c4dh,084d2102ah,02d9bec0dh,0cf64dfc1h,078a546efh,0433febadh,07b73cef1h,01f621ec3h
- DD 037338615h,06aecd627h,001d8edf6h,0162082abh,019e86b66h,0833a8119h,0d299b5dbh,06023a251h,0bbf04b89h,0f5bb0c3ah,0ae749a44h,06735eb69h,04713de3bh,0d0e058c5h,02c3d4ccdh,0fdf2593eh
- DD 0fdd23667h,01b8f414eh,0fa2015eeh,0dd52aacah,0bd9625ffh,03e31b517h,08db5918ch,05ec9322dh,0a96f5294h,0bc73ac85h,061a0666ah,082aa5bf3h,0bf08ac42h,049755810h,0891cedfch,0d21cdfd5h
- DD 067f8be10h,0918cb57bh,056ffa726h,0365d1a7ch,06532de93h,02435c504h,02674cd02h,0c0fc5e10h,09cbbb142h,06e51fcf8h,0afc50692h,01d436e5ah,03fbcae22h,0766bffffh,0fd55d3b8h,03148c2fdh
- DD 0233222fah,052c7fdc9h,0e419fb6bh,089ff1092h,025254977h,03cd6db99h,01cf12ca7h,02e85a161h,0dc810bc9h,0add2547ch,09d257c22h,0ea3f458fh,027d6b19bh,0642c1fbeh,0140481a6h,0ed07e6b5h
- DD 086d2e0f8h,06ada1d42h,00e8a9fd5h,0e5920122h,0708c1b49h,002c936afh,02b4bfaffh,060f30feeh,0858e6a61h,06637ad06h,03fd374d0h,0ce4c7767h,07188defbh,039d54b2dh,0f56a6b66h,0a8c9d250h
- DD 0b24fe1dch,058fc0f5eh,06b73f24ch,09eaf9deeh,033650705h,0a90d588bh,0af2ec729h,0de5b62c5h,0d3c2b36eh,05c72cfaeh,0034435dah,0868c19d5h,0e17ee145h,088605f93h,077a5d5b1h,0aa60c4eeh
- DD 03b60c472h,0bcf5bfd2h,0eb1d3049h,0af4ef13ch,0e13895c9h,0373f44fch,00cbc9822h,0f29b382fh,073efaef6h,01bfcb853h,0a8c96f40h,0cf56ac9ch,07a191e24h,0d7adf109h,0bf8a8dc2h,098035f44h
- DD 01e750c84h,0f40a71b9h,05dc6c469h,0c57f7b0ch,06fbc19c1h,049a0e79ch,0a48ebdb8h,06b0f5889h,0a07c4e9fh,05d3fd084h,0ab27de14h,0c3830111h,033e08dcch,00e4929feh,040bb73a3h,0f4a5ad24h
- DD 0490f97cah,0de86c2bfh,067a1ce18h,0288f09c6h,01844478dh,0364bb886h,0ceedb040h,07840fa42h,05a631b37h,01269fdd2h,0a47c8b7dh,094761f1eh,0481c6266h,0fc0c2e17h,03daa5fa7h,085e16ea2h
- DD 092491048h,0ccd86033h,0f4d402d7h,00c2f6963h,0df6a865ch,06336f7dfh,0b5c02a87h,00a2a463ch,0bf2f12eeh,0b0e29be7h,066bad988h,0f0a22002h,09123c1d7h,027f87e03h,0328a8c98h,021669c55h
- DD 092f14529h,0186b9803h,063954df3h,0d3d056cch,0175a46f6h,02f03fd58h,011558558h,063e34ebeh,05b80cfa5h,0e13fedeeh,0d401dbd1h,0e872a120h,0e8a9d667h,052657616h,0e08d6693h,0bc8da4b6h
- DD 01b703e75h,0370fb9bbh,0d4338363h,06773b186h,0ecef7bffh,018dad378h,0995677dah,0aac787edh,00437164bh,04801ea8bh,073fe795eh,0f430ad20h,08ee5eb73h,0b164154dh,0108f7c0eh,00884ecd8h
- DD 05f520698h,00e6ec096h,044f7b8d9h,0640631feh,0a35a68b9h,092fd34fch,04d40cf4eh,09c5a4b66h,080b6783dh,0949454bfh,03a320a10h,080e701feh,01a0a39b2h,08d1a564ah,0320587dbh,01436d53dh
- DD 06556c362h,0f5096e6dh,0e2455d7eh,0bc23a3c0h,0807230f9h,03a7aee54h,022ae82fdh,09ba1cfa6h,099c5d706h,0833a057ah,0842315c9h,08be85f4bh,066a72f12h,0d083179ah,0cdcc73cdh,02fc77d5dh
- DD 05616ee30h,022b88a80h,0e7ab1083h,0fb09548fh,0511270cdh,08ad6ab0dh,06924d9abh,061f6c57ah,090aecb08h,0a0f7bf72h,00df784a4h,0849f87c9h,0cfaf1d03h,027c79c15h,0c463faceh,0bbf9f675h
- DD 0765ba543h,091502c65h,042ea60ddh,018ce3cach,06e43ecb3h,0e5cee6ach,068f2aeebh,063e4e910h,0c85932eeh,026234fa3h,04c90c44dh,096883e8bh,0a18a50f6h,029b9e738h,03f0420dfh,0bfc62b2ah
- DD 06d3e1fa9h,0d22a7d90h,0fe05b8a3h,017115618h,0bb2b9c01h,02a0c9926h,0e07e76a2h,0c739fcc6h,0165e439ah,0540e9157h,06a9063d8h,006353a62h,061e927a3h,084d95594h,0e2e0be7fh,0013b9b26h
- DD 0973497f1h,04feaec3bh,0093ebc2dh,015c0f94eh,033af0583h,06af5f227h,0c61f3340h,00c2af206h,04457397ch,0d25dbdf1h,0cabcbae0h,02e8ed017h,0c2815306h,0e3010938h,0e8c6cd68h,0baa99337h
- DD 03b0ec7deh,008513182h,058df05dfh,01e1b822bh,0a5c3b683h,05c14842fh,03eba34ceh,098fe977eh,00d5e8873h,0fd2316c2h,0bd0d427dh,0e48d839ah,0623fc961h,0495b2218h,0b46fba5eh,024ee56e7h
- DD 091e4de58h,09184a55bh,0dfdea288h,0a7488ca5h,0a8dcc943h,0a723862eh,0849dc0fch,092d762b2h,0091ff4a9h,03c444a12h,00cada274h,0581113fah,030d8eae2h,0b9de0a45h,0df6b41eah,05e0fcd85h
- DD 0c094dbb5h,06233ea68h,0d968d410h,0b77d062eh,058b3002dh,03e719bbch,03dc49d58h,068e7dd3dh,0013a5e58h,08d825740h,03c9e3c1bh,021311747h,07c99b6abh,00cb0a2a7h,0c2f888f2h,05c48a3b3h
- DD 0991724f3h,0c7913e91h,039cbd686h,05eda799ch,063d4fc1eh,0ddb595c7h,0ac4fed54h,06b63b80bh,07e5fb516h,06ea0fc69h,0d0f1c964h,0737708bah,011a92ca5h,09628745fh,09a86967ah,061f37958h
- DD 0aa665072h,09af39b2ch,0efd324efh,078322fa4h,0c327bd31h,03d153394h,03129dab0h,081d5f271h,0f48027f5h,0c72e0c42h,08536e717h,0aa40cdbch,02d369d0fh,0f45a657ah,0ea7f74e6h,0b03bbfc4h
- DD 00d738dedh,046a8c418h,0e0de5729h,06f1a5bb0h,08ba81675h,0f10230b9h,0112b33d4h,032c6f30ch,0d8fffb62h,07559129dh,0b459bf05h,06a281b47h,0fa3b6776h,077c1bd3ah,07829973ah,00709b380h
- DD 0a3326505h,08c26b232h,0ee1d41bfh,038d69272h,0ffe32afah,00459453eh,07cb3ea87h,0ce8143adh,07e6ab666h,0932ec1fah,022286264h,06cd2d230h,06736f8edh,0459a46feh,09eca85bbh,050bf0d00h
- DD 0877a21ech,00b825852h,00f537a94h,0300414a7h,021a9a6a2h,03f1cba40h,076943c00h,050824eeeh,0f83cba5dh,0a0dbfcech,093b4f3c0h,0f9538148h,048f24dd7h,061744162h,0e4fb09ddh,05322d64dh
- DD 03d9325f3h,057447384h,0f371cb84h,0a9bef2d0h,0a61e36c5h,077d2188bh,0c602df72h,0bbd6a7d7h,08f61bc0bh,0ba3aa902h,06ed0b6a1h,0f49085edh,0ae6e8298h,08bc625d6h,0a2e9c01dh,0832b0b1dh
- DD 0f1f0ced1h,0a337c447h,09492dd2bh,0800cc793h,0bea08efah,04b93151dh,0de0a741eh,0820cf3f8h,01c0f7d13h,0ff1982dch,084dde6cah,0ef921960h,045f96ee3h,01ad7d972h,029dea0c7h,0319c8dbeh
- DD 07b82b99bh,0d3ea3871h,0470eb624h,075922d4dh,03b95d466h,08f66ec54h,0bee1e346h,066e673cch,0b5f2b89ah,06afe67c4h,0290e5cd3h,03de9c1e6h,0310a2adah,08c278bb6h,00bdb323bh,0420fa384h
- DD 00eb919b0h,00ae1d63bh,0a74b9620h,0d74ee51dh,0a674290ch,0395458d0h,04620a510h,0324c930fh,0fbac27d4h,02d1f4d19h,09bedeeach,04086e8cah,09b679ab8h,00cdd211bh,07090fec4h,05970167dh
- DD 0faf1fc63h,03420f2c9h,0328c8bb4h,0616d333ah,057f1fe4ah,07d65364ch,055e5c73ah,09343e877h,0e970e78ch,05795176bh,060533627h,0a36ccebfh,009cdfc1bh,0fc7c7380h,0b3fec326h,0b39a2afeh
- DD 06224408ah,0b7ff1ba1h,0247cfc5eh,0cc856e92h,0c18bc493h,001f102e7h,02091c727h,04613ab74h,0c420bf2bh,0aa25e89ch,090337ec2h,000a53176h,07d025fc7h,0d2be9f43h,06e6fe3dch,03316fb85h
- DD 09ac50814h,027520af5h,09a8e4223h,0fdf95e78h,056bec5a0h,0b7e7df2ah,0df159e5dh,0f7022f7dh,0cac1fe8fh,093eeeab1h,037451168h,08040188ch,0d967dce6h,07ee8aa8ah,03abc9299h,0fa0e79e7h
- DD 02064cfd1h,067332cfch,0b0651934h,0339c31deh,02a3bcbeah,0719b28d5h,09d6ae5c6h,0ee74c82bh,0baf28ee6h,00927d05eh,09d719028h,082cecf2ch,0ddb30289h,00b0d353eh,0fddb2e29h,0fe4bb977h
- DD 0640bfd9eh,0bb5bb990h,082f62108h,0d226e277h,002ffdd56h,04bf00985h,02ca1b1b5h,07756758ah,05285fe91h,0c32b62a3h,08c9cd140h,0edbc546ah,0af5cb008h,01e47a013h,0073ce8f2h,0bca7e720h
- DD 017a91caeh,0e10b2ab8h,008e27f63h,0b89aab65h,0dba3ddf9h,07b3074a7h,0330c2972h,01c20ce09h,05fcf7e33h,06b9917b4h,0945ceb42h,0e6793743h,05c633d19h,018fc2215h,0c7485474h,0ad1adb3ch
- DD 06424c49bh,0646f9679h,067c241c9h,0f888dfe8h,024f68b49h,0e12d4b93h,0a571df20h,09a6b62d8h,0179483cbh,081b4b26dh,09511fae2h,0666f9632h,0d53aa51fh,0d281b3e4h,07f3dbd16h,07f96a765h
- DD 0074a30ceh,0a7f8b5bfh,0005a32e6h,0d7f52107h,050237ed4h,06f9e0907h,08096fa2bh,02f21da47h,0eec863a0h,0f3e19cb4h,09527620ah,0d18f77fdh,0407c1cf8h,09505c81ch,01b6ec284h,09998db4eh
- DD 0c247d44dh,07e3389e5h,03f4f3d80h,012507141h,04a78a6c7h,0d4ba0110h,0767720beh,0312874a0h,075944370h,0ded059a6h,03b2c0bddh,0d6123d90h,051c108e3h,0a56b717bh,0070623e9h,09bb7940eh
- DD 084ac066ch,0794e2d59h,0e68c69a0h,0f5954a92h,04fd99dcch,028c52458h,0b1012517h,060e639fch,07de79248h,0c2e60125h,0f12fc6d7h,0e9ef6404h,02a3b5d32h,04c4f2808h,0c768eb8ah,0865ad32eh
- DD 013fb70b6h,0ac02331bh,095599b27h,0037b44c1h,060bd082ch,01a860fc4h,0c980cd01h,0a2e25745h,01da0263eh,0ee3387a8h,02d10f3d6h,0931bfb95h,0a1f24a32h,05b687270h,0ca494b86h,0f140e65dh
- DD 0b2f1ac7ah,04f4ddf91h,0760fee27h,0f99eaabbh,049c228e5h,057f4008ah,01cf713bbh,0090be440h,05004f022h,0ac91fbe4h,0569e1af6h,0d838c2c2h,00f1daaa5h,0d6c7d20bh,01bbb02c0h,0aa063ac1h
- DD 059558a78h,00938a422h,08435da2fh,05343c669h,0034410dch,096f67b18h,084510804h,07cc1e424h,016dfbb7dh,086a1543fh,05b5bd592h,0921fa942h,0b33dd03ch,09dcccb6eh,0b843f51eh,08581ddd9h
- DD 081d73c9eh,054935fcbh,00a5e97abh,06d07e979h,0cf3a6babh,04dc7b30ah,0170bee11h,0147ab1f3h,09fafdee4h,00aaf8e3dh,0538a8b95h,0fab3dbcbh,06ef13871h,0405df4b3h,0088d5a49h,0f1f4e9cbh
- DD 066b33f1dh,09bcd24d3h,05ce445c0h,03b97b820h,0ba93ff61h,0e2926549h,04dafe616h,0d9c341ceh,016efb6f3h,0fb30a76eh,0605b953ch,0df24b8cah,0c2fffb9fh,08bd52afeh,0e19d0b96h,0bbac5ff7h
- DD 0459afccdh,043c01b87h,0b7432652h,06bd45143h,055b5d78eh,084734530h,01554ba7dh,081088fdbh,01e269375h,0ada0a52ch,02dc5ec10h,0f9f037c4h,094bfbc11h,0c0660607h,0c9c40d2fh,0c0a630bbh
- DD 0ab64c31eh,05efc797eh,074507144h,0ffdb1dabh,01ca6790ch,0f6124287h,0e69bf1bfh,0e9609d81h,000d24fc9h,0db898595h,0e51fb417h,09c750333h,0fef7bbdeh,051830a91h,0945f585ch,00ce67dc8h
- DD 04763eb50h,09a730ed4h,0c1ab0d66h,024a0e221h,0648748f3h,0643b6393h,06d3c6291h,01982daa1h,08bbc5549h,06f00a9f7h,07f36384eh,07a1783e1h,0de977f50h,0e8346323h,0b245502ah,091ab688dh
- DD 06d0bdd66h,0331ab6b5h,064b71229h,00a6ef32eh,0fe7c352fh,01028150eh,0ce7b39d3h,027e04350h,0c1070c82h,02a3c8acdh,080c9feefh,0fb2034d3h,0709f3729h,02d729621h,062cb4549h,08df290bfh
- DD 0fc2e4326h,002f99f33h,05eddf032h,03b30076dh,00c652fb5h,0bb21f8cfh,0ed91cf7bh,0314fb49eh,02f700750h,0a013eca5h,0712a4575h,02b9e3c23h,0af30fbb0h,0e5355557h,07c77e771h,01ada3516h
- DD 07b135670h,045f6ecb2h,07cfc202eh,0e85d19dfh,058d1be9fh,00f1b50c7h,0ead2e344h,05ebf2c0ah,0abc199c9h,01531fe4eh,056bab0aeh,0c7032592h,06c1fec54h,016ab2e48h,004280188h,00f87fda8h
- DD 0609e4a74h,0dc9f46fch,0ba667f91h,02a44a143h,0b4d83436h,0bc3d8b95h,0c7bd2958h,0a01e4bd0h,073483c90h,07b182932h,0a7c7b598h,0a79c6aa1h,0eaaac07eh,0bf3983c6h,096e0d4e6h,08f18181eh
- DD 0051af62bh,08553d37ch,00bf94496h,0e9a998ebh,0b0d59aa1h,0e0844f9fh,0e6afb813h,0983fd558h,065d69804h,09670c0cah,06ea5ff2dh,0732b22deh,05fd8623bh,0d7640ba9h,0a6351782h,09f619163h
- DD 0acee5043h,00bfc27eeh,02eb10f02h,0ae419e73h,08943fb05h,019c028d1h,0ff13aa2ah,071f01cf7h,08887a132h,07790737eh,066318410h,067513309h,07ddb795eh,09819e8a3h,0dad100b2h,0fecb8ef5h
- DD 03021926ah,059f74a22h,06f9b4c1ch,0b7c28a49h,0912ad0abh,0ed1a733fh,001a5659ch,042a910afh,07bd68cabh,03842c6e0h,076d70ac8h,02b57fa38h,03c53aaebh,08a6707a8h,065b4db18h,062c1c510h
- DD 0b2d09dc7h,08de2c1fbh,0266bd23bh,0c3dfed12h,0d5b27db6h,0927d039bh,0103243dah,02fb2f0f1h,080be7399h,0f855a07bh,01f9f27a8h,0ed9327ceh,0729bdef7h,0a0bd99c7h,028250d88h,02b67125eh
- DD 08670ced7h,0784b26e8h,0c31bd3b4h,0e3dfe41fh,0bcc85cbch,09e353a06h,060178a9dh,0302e2909h,0a6eac16eh,0860abf11h,0aa2b3aach,076447000h,0850afdabh,046ff9d19h,0fdb2d4c1h,035bdd6a5h
- DD 07e5c9ce9h,0e82594b0h,020af346eh,00f379e53h,0bc65ad4ah,0608b31e3h,0267c4826h,0710c6b12h,071954cf1h,051c966f9h,00d0aa215h,0b1cec793h,086bd23a8h,01f155989h,0f9452e86h,0ae2ff99ch
- DD 0340ceaa2h,0d8dd953ch,02e2e9333h,026355275h,08586f06dh,015d4e5f9h,0f7cab546h,0d6bf94a8h,0b76a9af0h,033c59a0ah,0ba095af7h,052740ab3h,024389ca0h,0c444de8ah,0706da0cbh,0cc6f9863h
- DD 06b2515cfh,0b5a741a7h,09585c749h,071c41601h,0e683de97h,078350d4fh,063d0b5f5h,031d61524h,0fbce090bh,07a0cc5e1h,0fbcb2a5bh,0aac927edh,020d84c35h,0e920de49h,022b4de26h,08c06a0b6h
- DD 0afe7ddf3h,0d34dd58bh,0c1e6e55bh,055851fedh,0960696e7h,0d1395616h,05f22705fh,0940304b2h,0b0a2a860h,06f43f861h,00e7cc981h,0cf121282h,00ab64a96h,012186212h,0b789383ch,009215b9ah
- DD 037387c09h,0311eb305h,0f03ee760h,0c5832fceh,032f7ea19h,030358f58h,091d53551h,0e01d3c34h,0da48ea80h,01ca5ee41h,0cf4fa4c1h,034e71e8eh,07af1e1c7h,0312abd25h,02153f4a5h,0e3afcdebh
- DD 000235e9ah,09d5c84d7h,08c4c836fh,00308d3f4h,089332de5h,0c0a66b04h,089e566efh,0610dd399h,0d1ac1635h,0f8eea460h,020a2c0dfh,084cbb3fbh,0e74a48c5h,040afb488h,0d326b150h,029738198h
- DD 0a6d74081h,02a17747fh,055a26214h,060ea4c05h,01f88c5feh,053514bb4h,07e83426ch,0edd64567h,096460b25h,0d5d6cbech,068dc115eh,0a12fd0ceh,0697840eah,0c5bc3ed2h,0a6331e31h,0969876a8h
- DD 0472ff580h,060c36217h,04ad41393h,0f4229705h,0a03b8b92h,04bd99ef0h,0c144f4f6h,0501c7317h,018464945h,0159009b3h,074c5c6beh,06d5e594ch,0321a3660h,02d587011h,03898d022h,0d1e184b1h
- DD 04c6a7e04h,05ba04752h,045550b65h,047fa1e2bh,048c0a9a5h,09419daf0h,07c243236h,066362953h,05cb12a88h,0cd0744b1h,02b646188h,0561b6f9ah,066c2c0c0h,0599415a5h,00f83f09ah,0be3f0859h
- DD 0b92041b8h,09141c5beh,026477d0dh,001ae38c7h,0d12c7a94h,0ca8b71f3h,0765c70dbh,0fab5b31fh,0487443e9h,076ae7492h,0990d1349h,08595a310h,07d460a37h,0f8dbeda8h,01e45a38fh,07f7ad082h
- DD 01059705ah,0ed1d4db6h,0e6b9c697h,0a3dd492ah,06eb38bd5h,04b92ee3ah,067cc0bb7h,0bab2609dh,06e70ee82h,07fc4fe89h,013e6b7e3h,0eff2c56eh,034d26fcah,09b18959eh,0889d6b45h,02517ab66h
- DD 0bdefdd4fh,0f167b4e0h,0f366e401h,069958465h,0a73bbec0h,05aa368abh,07b240c21h,012148709h,018969006h,0378c3233h,0e1fe53d1h,0cb4d73ceh,0130c4361h,05f50a80eh,07ef5212bh,0d67f5951h
- DD 09e70c72eh,0f145e21eh,05566d2fbh,0b2e52e29h,0032397f5h,044eaba4ah,07e31a7deh,05e56937bh,0456c61e1h,068dcf517h,0a8b0a388h,0bc2e954ah,060a8b755h,0e3552fa7h,073ad0cdeh,003442daeh
- DD 0ceb26210h,037ffe747h,0787baef9h,0983545e8h,086a3de31h,08b8c8535h,0facd46dbh,0c621dbcbh,059266fbbh,082e442e9h,0339d471ch,0a3514c37h,062cdad96h,03a11b771h,0ecf9bdf0h,0f0cb3b3ch
- DD 0478e2135h,03fcbdbceh,0bda35342h,07547b5cfh,08a677af6h,0a97e81f1h,028817987h,0c8c2bf83h,045580985h,0df07eaafh,0c93b45cbh,0c68d1f05h,0c77b4cach,0106aa2feh,004a7ae86h,04c1d8afch
- DD 09eb45ab2h,0db41c3fdh,0d4b22e74h,05b234b5bh,0f215958ah,0da253dech,0a04edfa0h,067e0606eh,0ef751b11h,0abbbf070h,0f6f06dceh,0f352f175h,06839f6b4h,0dfc4b6afh,09959848eh,053ddf9a8h
- DD 0c21520b0h,0da49c379h,0dbd5d1b6h,090864ff0h,05f49c7f7h,02f055d23h,0a796b2d8h,0e51e4e6ah,05c9dc340h,0c361a67fh,0bca7c620h,05ad53c37h,032c756d0h,0da1d6588h,08bb67e13h,0ad60d911h
- DD 00eeec8c6h,0d6c47bdfh,0078a1821h,04a27fec1h,0c3099524h,0081f7415h,082cd8060h,08effdf0bh,065842df8h,0db70ec1ch,0d319a901h,08821b358h,0de42b529h,072ee56eeh,0236e4286h,05bb39592h
- DD 0fd6f7140h,0d1183316h,0bd8e81f7h,0f9fadb5bh,05a02d962h,0701d5e0ch,01b601324h,0fdee4dbfh,035d7620eh,0bed17407h,0f48c0012h,004e3c2c3h,03455449ah,09ee29da7h,091a836c4h,0562cdef4h
- DD 047701097h,08f682a5fh,0ff88d0c2h,0617125d8h,057bb86ddh,0948fda24h,0289f7286h,0348abb8fh,099d94bbdh,0eb10eab5h,04684d160h,0d51ba28eh,030c8f41ah,0abe0e51ch,013254f4ah,066588b45h
- DD 0fad097a5h,0147ebf01h,0610e815dh,049883ea8h,08a11de56h,0e44d60bah,0827a7a6dh,0a970de6eh,05e17fc19h,02be41424h,001214057h,0d833c657h,0363e723fh,01375813bh,0e6a52e9bh,06820bb88h
- DD 0d875d56ah,07e7f6970h,051fbf6bfh,0d6a0a9ach,0a3083c12h,054ba8790h,06ae7eb64h,0ebaeb23dh,0b99a907ah,0a8685c3ah,0026bf40bh,0f1e74550h,0c802cd9eh,07b73a027h,04fef4635h,09a8a927ch
- DD 008191224h,0e1b6f60ch,0de4ec091h,0c4126ebbh,04ae38d84h,0e1dff4dch,04f2ef985h,0de3f57dbh,0d446a1ddh,034964337h,0859e77f6h,07bf217a0h,08e1d13f5h,08ff10527h,074eeae27h,0a304ef03h
- DD 0d19dfa5ah,0fc6f5e47h,07fad982bh,0db007de3h,0613715f5h,028205ad1h,07889529eh,0251e6729h,01ae98e78h,072705184h,0271cac32h,0f818537dh,0b7f410f5h,0c8a15b7eh,081f62393h,0c474356fh
- DD 0c242316bh,092dbdc5ah,0dbf4aff5h,0abe060ach,0909a8ec6h,06e8c38feh,06116cb94h,043e514e5h,007d784f9h,02078fa38h,0f4b5b357h,01161a880h,013adea3dh,05283ce79h,0cc6a910bh,00756c3e6h
- DD 0aaa79697h,060bcfe01h,056391db1h,004a73b29h,0189b45a0h,0dd8dad47h,048d5b8d9h,0bfac0dd0h,07d3d2ec2h,034ab3af5h,0207bd3afh,06fa2fc2dh,066550dedh,09ff40092h,01fd5b913h,0719b3e87h
- DD 06d17fbc7h,0a573a496h,073d2b24eh,00cd1a70ah,0b2676937h,034e2c5cah,0bf669f21h,0e7050b06h,01ede9046h,0fbe948b6h,097662659h,0a0530051h,0f10124c5h,058cbd4edh,0dd6c06c8h,0de2646e4h
- DD 08cad38c0h,0332f8108h,06bd68ae2h,0471b7e90h,00d8e27a3h,056ac3fb2h,0136b4b0dh,0b54660dbh,0a6fd8de4h,0123a1e11h,0a37799efh,044dbffeah,0ce6ac17ch,04540b977h,0af60acefh,0495173a8h
- DD 0391c2a82h,09ebb284dh,0158308e8h,0bcdd4863h,083f1edcah,0006f16ech,0695dc6c8h,0a13e2c37h,04a057a87h,02ab756f0h,0a6b48f98h,0a8765500h,068651c44h,04252faceh,0e1765e02h,0a52b540bh
- DD 016a0d2bbh,04f922fc5h,01a623499h,00d5cc16ch,057c62c8bh,09241cf3ah,0fd1b667fh,02f5e6961h,0f5a01797h,05c15c70bh,060956192h,03d20b44dh,0071fdb52h,004911b37h,08d6f0f7bh,0f648f916h
- DD 0e60b7cf7h,06dc1acafh,084a9d869h,025860a50h,0e7ba8ac4h,056fc6f09h,06148d29eh,0828c5bd0h,0dc55ae5fh,0ac6b435eh,0c0117411h,0a527f56ch,0fd24342ch,094d5045eh,070b67c0dh,02c4c0a35h
- DD 0fac61d9ah,0027cc8b8h,0e3c6fe8ah,07d25e062h,0e5bff503h,0e08805bfh,06ff632f7h,013271e6ch,0232f76a5h,055dca6c0h,0701ef426h,08957c32dh,0a10a5178h,0ee728bcbh,0b62c5173h,05ea60411h
- DD 0d0b8892bh,0fc4e964eh,09301bb74h,09ea17683h,0fcc48626h,06265c5aeh,0bb3e9102h,0e60cf82eh,0d4df5531h,057adf797h,08deeefe2h,0235b59a1h,03f306eb1h,060adcf58h,03d09492dh,0105c2753h
- DD 0b5def996h,04090914bh,0233dd1e7h,01cb69c83h,09b3d5e76h,0c1e9c1d3h,0fccf6012h,01f3338edh,02f5378a8h,0b1e95d0dh,02f00cd21h,0acf4c2c7h,0eb5fe290h,06e984240h,0248088aeh,0d66c038dh
- DD 0f94d70cfh,0804d264ah,07314bf7eh,0bdb802efh,04333ed02h,08fb54de2h,0285635d9h,0740461e0h,0365e9383h,04113b2c8h,03fdef652h,0ea762c83h,047b956c1h,04eec6e2eh,065620fa4h,0a3d814beh
- DD 0b4d8bc50h,09ad5462bh,0a9195770h,0181c0b16h,078412a68h,0ebd4fe1ch,0c0dff48ch,0ae0341bch,07003e866h,0b6bc45cfh,08a24a41bh,0f11a6deah,0d04c24c2h,05407151ah,0da5b7b68h,062c9d27dh
- DD 088cceff6h,02e964235h,08b07ed69h,08594c54fh,0c84d0d0dh,01578e73ch,0ff532868h,07b4e1055h,0b5ec995ah,0a348c0d5h,014289a54h,0bf4b9d55h,058fbd777h,09ba155a6h,01a84491dh,0186ed7a8h
- DD 0614c0900h,0d4992b30h,0bd00c24bh,0da98d121h,07ec4bfa1h,07f534dc8h,037dc34bch,04a5ff674h,01d7ea1d7h,068c196b8h,080a6d208h,038cf2893h,0e3cbbd6eh,0fd56cd09h,04205a5b6h,0ec72e27eh
- DD 0a44f77f7h,015ea68f5h,0b43c52bch,07aa5f9fdh,094f0e609h,086ff676fh,02e2d432bh,0a4cde963h,0eee470afh,08cafa0c0h,08a3f5ec8h,084137d0eh,0faa31231h,0ebb40411h,06f7f7ccfh,0a239c13fh
- DD 0a8afd30bh,032865719h,08a826dceh,086798328h,0c4a8fbe0h,0df04e891h,0ebf56ad3h,0bb6b6e1bh,0471f1ff0h,00a695b11h,0be15baf0h,0d76c3389h,0be96c43eh,0018edb95h,090794158h,0f2beaaf4h
- DD 0c3076a27h,0152db09eh,0e416545dh,05e82908eh,0356d6f2eh,0a2c41272h,031fd74e1h,0dc9c9642h,0519bf615h,066ceb88dh,005a2274eh,0e29ecd76h,0bf5e2fa0h,03a0473c4h,064284e67h,06b6eb671h
- DD 0b88756ddh,0e8b97932h,0f17e3e61h,0ed4e8652h,03ee1c4a4h,0c2dd1499h,0597f8c0eh,0c0aaee17h,06c168af3h,015c4edb9h,0b39ae875h,06563c7bfh,020adb436h,0adfadb6fh,09a042ac0h,0ad55e8c9h
- DD 0b76da1f5h,0975a1ed8h,0a58acb94h,010dfa466h,0ac060282h,08dd7f7e3h,0572a051eh,06813e66ah,0350cb901h,0b4ccae1eh,050cb7822h,0b653d656h,0dfab3b87h,042484710h,09b670fd0h,0cd7ee537h
- DD 0523b8bf6h,00a50b12eh,08f910c1bh,08009eb5bh,04a167588h,0f535af82h,0fb2a2abdh,00f835f9ch,02afceb62h,0f59b2931h,0169d383fh,0c797df2ah,066ac02b0h,0eb3f5fb0h,0daa2d0cah,0029d4c6fh
- DD 0afab4bc5h,0d4059bc1h,056783247h,0833f5c6fh,08d2d3605h,0b5346630h,0d34d8433h,083387891h,0add9419ah,0d973b30fh,0afe3fce8h,0bcca1099h,00809aac6h,008178315h,0540f0f11h,001b7f21ah
- DD 0909523c8h,065c29219h,0a3a1c741h,0a62f648fh,060c9e55ah,088598d4fh,00e4f347ah,0bce9141bh,035f9b988h,09af97d84h,0320475b6h,00210da62h,09191476ch,03c076e22h,044fc7834h,07520dbd9h
- DD 0c1ab1bbdh,06a6b2cfeh,0dc650938h,0ef8a65beh,0805d7bc4h,072855540h,0ed11fdfdh,0da389396h,074660876h,0a9d5bd36h,0b45dff35h,011d67c54h,0a4f5da94h,06af7d148h,0c0bbeb31h,0bb8d4c3fh
- DD 0e0a1b12ah,087a7ebd1h,0770ba95fh,01e4ef88dh,0dc2ae9cbh,08c33345ch,001cc8403h,0cecf1276h,01b39b80fh,0687c012eh,035c33ba4h,0fd90d0adh,05c9661c2h,0a3ef5a67h,0e017429eh,0368fc88eh
- DD 0196a2fa2h,0d30c6761h,0bd5b312eh,0931b9817h,072f54a31h,0ba01000ch,066eaa541h,0a203d2c8h,098939db3h,0f2abdee0h,03e606c02h,0e37d6c2ch,0521ff643h,0f2921574h,0d7e2fca3h,02781b3c4h
- DD 07850ec06h,0664300b0h,07d3a10cfh,0ac5a38b9h,0e34ab39dh,09233188dh,05072cbb9h,0e77057e4h,0b59e78dfh,0bcf0c042h,01d97de52h,04cfc91e8h,03ee0ca4ah,04661a26ch,0fb8507bch,05620a4c1h
- DD 0049f842ch,04b44d4aah,01540e82bh,0ceabc5d5h,015c6f156h,0306710fdh,063db1d72h,0be5ae52bh,0334957f1h,006f1e7e6h,031144a70h,057e388f0h,0df96447bh,0fb69bb2fh,073e38a12h,00f78ebd3h
- DD 02b7ce542h,0b8222605h,07472bde1h,0e6d4ce99h,009d2f4dah,053e16ebeh,053b92b2eh,0180ff42eh,02c34a1c6h,0c59bcc02h,0422c46c2h,03803d6f9h,05c14a8a2h,018aff74fh,010a08b28h,055aebf80h
- DD 07135593fh,066097d58h,02be570cdh,032e6eff7h,02a8c860dh,0584e6a10h,0a2eb4163h,0cd185890h,06d97e134h,07ceae99dh,0dd8447ceh,0d42c6b70h,0b8c50273h,059ddbb4ah,03cf34e1eh,003c612dfh
- DD 004b6c5a0h,084b9ca15h,018f0e3a3h,035216f39h,0bd986c00h,03ec2d2bch,0d19228feh,08bf546d9h,04cd623c3h,0d1c655a4h,0502b8e5ah,0366ce718h,0eea0bfe7h,02cfc84b4h,0cf443e8eh,0e01d5ceeh
- DD 0036520f8h,08ec045d9h,092d40e98h,0dfb3c3d1h,0cc559a04h,00bac4cceh,0240ea6b1h,035eccae5h,0f8a5a0ach,0180b32dbh,0eb699700h,0547972a5h,0ca26bca0h,0a3765801h,0a647f25ah,057e09d0eh
- DD 02fdd23cch,0b956970eh,05682e971h,0b80288bch,09ae86ebch,0e6e6d91eh,08c9f1939h,00564c83fh,039560368h,0551932a2h,0049c28e2h,0e893752bh,0a6a158c3h,00b03cee5h,004964263h,0e12d656bh
- DD 063e3bc1dh,04b47554eh,045044ff7h,0c719b6a2h,0e48daa07h,04f24d30ah,0c8c1edc3h,0a3f37556h,00700d360h,09a47bf76h,0822ae4e2h,0bb1a1824h,089f1fb4ch,022e275a3h,09968c5f5h,072b1aa23h
- DD 0be063f64h,0a75feacah,0bce47a09h,09b392f43h,01ad07acah,0d4241509h,08d26cd0fh,04b0c591bh,092f1169ah,02d42ddfdh,04cbf2392h,063aeb1ach,00691a2afh,01de9e877h,0d98021dah,0ebe79af7h
- DD 040e50acfh,0cfdf2a4eh,0af01d665h,0f0a98ad7h,01831be1fh,0efb640bfh,080e9ada0h,06fe8bd2fh,06cafbc91h,094c103a1h,08308e08ch,0170f8759h,09780ff4fh,05de2d2abh,045b201f2h,0666466bch
- DD 0f5b343bch,058af2010h,0f2f142feh,00f2e400ah,0a85f4bdfh,03483bfdeh,003bfeaa9h,0f0b1d093h,0c7081603h,02ea01b95h,03dba1097h,0e943e4c9h,0b438f3a6h,047be92adh,0e5bf6636h,000bb7742h
- DD 0824297b4h,0136b7083h,05584455fh,09d0e5580h,0f1c7d69eh,0ab48cedch,02a256e76h,053a9e481h,065eb2413h,00402b0e0h,08fc407a7h,0dadbbb84h,08d7f5492h,0a65cd5a4h,074bae294h,021d44293h
- DD 03b5f1cc4h,066917ce6h,0ce872e62h,037ae52eah,02905f244h,0bb087b72h,01e6af74fh,012077086h,01058edeah,04b644e49h,0b638ca1dh,0827510e3h,06038591ch,08cf2b704h,0fe635063h,0ffc8b47ah
- DD 01b4d5e63h,03ae220e6h,09d961b4bh,0bd864742h,09bd16bedh,0610c107eh,01127147bh,04270352ah,064cfc50eh,07d17ffe6h,01e36cb42h,050dee01ah,035dc5f9ah,0068a7622h,0df53f62ch,09a08d536h
- DD 06be5f7deh,04ed71457h,0c2263c9eh,0d93006f8h,0cacacb36h,0e073694ch,03ae118abh,02ff7a5b4h,0cd871236h,03cce53f1h,0c2aa6d52h,0f156a39dh,0b198d76dh,09cc5f271h,081383d39h,0bc615b6fh
- DD 0de3eee6bh,0a54538e8h,0ab910d91h,058c77538h,058d278bdh,031e5bdbch,0b963acaeh,03cde4adfh,05302169ch,0b1881fd2h,0a989ed8bh,08ca60fa0h,0ff96a0eeh,0a1999458h,0ac6c283dh,0c1141f03h
- DD 06dfafed3h,07677408dh,039661588h,033a01653h,00b726fa0h,03c9c15ech,06c9b56dah,0090cfd93h,0a3c40af5h,0e34f4baeh,0d21129f1h,03469eadbh,01e207ce8h,0cc51674ah,0c83b1ef9h,01e293b24h
- DD 01e6c0bb4h,017173d13h,090776d35h,019004695h,06de6f922h,0e7980e34h,0f4dd9a22h,0873554cbh,0cbf18a51h,00316c627h,03032c081h,04d93651bh,03946834dh,0207f2771h,030cdbf80h,02c08d7b4h
- DD 086df2a61h,0137a4fb4h,0ecf7b4a2h,0a1ed9c07h,07bd042ffh,0b2e460e2h,05f62f5ech,0b7f5e2fah,0cc2423b7h,07aa6ec6bh,0ba63eea7h,075ce0a7fh,0f250a6e1h,067a45fb1h,0e53cdc9fh,093bc919ch
- DD 0871942dfh,09271f56fh,07859ad66h,02372ff6fh,033cb1a78h,05f4c2b96h,05838aa83h,0e3e29101h,0e4e8110ch,0a7ed1611h,0330198ceh,02a2d70d5h,06720efe0h,0bdf132e8h,066a471bfh,0e61a8962h
- DD 0825808bdh,0796d3a85h,03fd6e902h,051dc3cb7h,0916219d1h,0643c768ah,0a2ad7d32h,036cd7685h,0b22922a4h,0e3db9d05h,0dba29660h,06494c87eh,0bcd2ebc7h,0f0ac91dfh,045107f8dh,04deb57a0h
- DD 0c3d12a73h,042271f59h,0a5c2c51dh,05f71687ch,005797bcbh,0cb1f50c6h,0d6d34eb0h,029ed0ed9h,04683c2ebh,0e5fe5b47h,097447c46h,04956eeb5h,071207167h,05b163a43h,00248c5efh,093fa2fedh
- DD 031f63950h,067930af2h,014caa2c9h,0a77797c1h,027ac7e62h,0526e80eeh,058b28aech,0e1e6e626h,0b3c9fef0h,0636178b0h,06d5f90beh,0af7752e0h,0eece51cfh,094ecaf18h,0ca806e1fh,02864d0edh
- DD 097c69134h,06de2e383h,0eb291293h,05a42c316h,06a60bae0h,0c7779219h,06b7599d1h,0a24de346h,0b75d4941h,049d374aah,02d501ff0h,098900586h,0eb7974cfh,09f16d40eh,0cdd8c115h,01033860bh
- DD 02094cec3h,0b6c69ac8h,0403b770ch,09976fb88h,04859590dh,01dea026ch,08562d1fdh,0b6acbb46h,044569d85h,07cd6c461h,097f0891dh,0c3190a36h,048d5a17dh,0c6f53195h,0d749abc8h,07d919966h
- DD 0dd1c8a20h,065104837h,02f683419h,07e5410c8h,0be94022eh,0958c3ca8h,06145dac2h,0605c3197h,001683d54h,03fc07501h,0595b1234h,01d7127c5h,09481277fh,010b8f87ch,0e65a1adbh,0677db2a8h
- DD 0ddce3345h,0ec2fccaah,0012a4350h,02a6811b7h,0ac598bdch,096760ff1h,0d1bf4128h,0054d652ah,092a21005h,00a1151d4h,033110fdfh,0ad7f3971h,01960100fh,08c95928ch,07bf03362h,06c91c825h
- DD 0ce309f06h,0c8c8b2a2h,0ca27204bh,0fdb27b59h,00848e32eh,0d223eaa5h,0e7bfaf1eh,0b93e4b2eh,044aa3dedh,0c5308ae6h,0c015d573h,0317a666ah,01a979707h,0c888ce23h,00d5c4958h,0f141c1e6h
- DD 061906373h,0b53b7de5h,0eb999595h,0858dbadeh,0a59e5c36h,08cbb47b2h,0dcf4e842h,0660318b3h,012ba4b7ah,0bd161ccdh,0f8c8282ah,0f399daabh,0eeb2130dh,01587633ah,0da38dd7dh,0a465311ah
- DD 064d3779bh,05f75eec8h,0ad64c171h,03c5d0476h,02a914428h,087410371h,090e2fc29h,08096a891h,023b3ebc2h,0d3d2ae9dh,0a580cfd6h,090bdd6dbh,0c5b01f6ch,052dbb7f3h,0e102a2dch,0e68eded4h
- DD 099eb6df0h,017785b77h,07386b779h,026c3cc51h,06417a48eh,0345ed988h,007d6ef31h,0e990b4e4h,02586abbah,00f456b7eh,059c96e9ah,0239ca6a5h,0e2eb4206h,0e327459ch,0a002b90ah,03a4c3313h
- DD 0f6a3f6fbh,02a114806h,085c251ddh,0ad5cad2fh,0f5a784d3h,092c1f613h,0349766d5h,0ec7bfacfh,03e23cb3bh,004b3cd33h,0c5a64b2dh,03979fe84h,07e589106h,0192e2720h,0a15b527fh,0a60c43d1h
- DD 0be7cf3a6h,02dae9082h,0bc967274h,0cc86ba92h,0aea0a8a9h,0f28a2ce8h,06ee988b3h,0404ca6d9h,0005921b8h,0fd7e9c5dh,044e79bf9h,0f56297f1h,00d75ddc2h,0a163b460h,0a1f2be87h,030b23616h
- DD 0bfe50e2bh,04b070d21h,0e1bfede1h,07ef8cfd0h,02aac4ae0h,0adba0011h,0b9ebd033h,02a3e7d01h,0e38d9d1ch,0995277ech,09c5d2de3h,0b500249eh,0f13ca8c9h,08912b820h,0877793afh,0c8798114h
- DD 0ec3f1dech,019e6125dh,0911178dah,007b1f040h,0904a6738h,0d93ededah,00bebedcdh,055187a5ah,0eb329d41h,0f7d04722h,0f170b391h,0f449099eh,0ca99f828h,0fd317a69h,034a4976dh,050c3db2bh
- DD 03757b392h,0e9ba7784h,0aa3ca05ah,0326caefdh,0f1e593d4h,078e5293bh,00d98fd13h,07842a937h,05f96b10dh,0e694bf96h,006a8cd05h,0373a9df6h,0e8f0c7fch,0997d1e51h,063fd972eh,01d019790h
- DD 05499fb32h,00064d858h,077a8aeb7h,07b67bad9h,02d08eec5h,01d3eb977h,0cbabae1dh,05fc047a6h,0e54a64bbh,00577d159h,0c43497e4h,08862201bh,02ce0608dh,0ad6b4e28h,00b167aach,08b687b7dh
- DD 08b2ecfa9h,06ed4d367h,0a90c3c38h,024dfe62dh,03fe5c42bh,0a1862e10h,0d5732a9fh,01ca73dcah,076bb87adh,035f038b7h,0f242b81fh,0674976abh,0b0fd90cdh,04f2bde7eh,0a7fdf092h,06efc172eh
- DD 092222f1fh,03806b69bh,06cf7ae70h,05a2459cah,0a85217eeh,06789f69ch,0e3dc85ach,05f232b5eh,048e9e516h,0660e3ec5h,03197eb31h,0124b4e47h,0aafcca23h,010a0cb13h,08213224fh,07bd63ba4h
- DD 0290a7f4fh,0affad7cch,00286b461h,06b409c9eh,0ffa407afh,058ab809fh,0c68ac073h,0c3122eedh,04ef24d7eh,017bf9e50h,03e2a5811h,05d929794h,002902e01h,0519bc867h,039c8a851h,076bba5dah
- DD 0da94951eh,0e9f9669ch,066b8d418h,04b6af58dh,017d426a4h,0fa321074h,09dde6027h,0c78e66a9h,04a53b964h,00516c083h,0ff602330h,0fc659d38h,058c5c897h,00ab55e5ch,0838bc5dfh,0985099b2h
- DD 0c52fc238h,0061d9efch,06ac1da3fh,0712b2728h,09283fe08h,0fb658149h,0b8aaa2f7h,04954ac94h,07fb2e74fh,085c0ada4h,0b89926b0h,0ee8ba98eh,023d1af5bh,0e4f9d37dh,0ba9b015eh,014ccdbf9h
- DD 07bfe7178h,0b674481bh,065405868h,04e1debaeh,0c48c867dh,0061b2821h,0513b30eah,069c15b35h,036871088h,03b4a1666h,01220b1ffh,0e5e29f5dh,0233d9f4dh,04b82bb35h,018cdc675h,04e076333h
- DD 0a3e6fcedh,00d53f5c7h,0f45fbdebh,0e8cbbdd5h,013339a70h,0f85c01dfh,0142ceb81h,00ff71880h,0bd70437ah,04c4e8774h,0ba0bda6ah,05fb32891h,0f18bd26eh,01cdbebd2h,003a9d522h,02f9526f1h
- DD 092c4d684h,040ce3051h,07612efcdh,08b04d725h,06f9cae20h,0b9dcda36h,0f058856ch,00edc4d24h,085427900h,064f2e6bfh,0dc09dfeah,03de81295h,0379bf26ch,0d41b4487h,06df135a9h,050b62c6dh
- DD 0c72dfe67h,0d4f8e3b4h,090e19fdfh,0c416b0f6h,04c13bd35h,018b9098dh,015b8cb9eh,0ac11118ah,0f0062841h,0f598a318h,089f356f4h,0bfe0602fh,030177a0ch,07ae3637eh,061136537h,034097747h
- DD 0d005832ah,00db2fb5eh,091042e4fh,05f5efd3bh,0ed70f8cah,08c4ffdc6h,0b52da9cch,0e4645d0bh,0c9001d1fh,09596f58bh,04e117205h,052c8f0bch,0e398a084h,0fd4aa0d2h,0104f49deh,0815bfe3ah
- DD 023885e5fh,097e5443fh,0e8433aabh,0f72f8f99h,0e4d4e604h,0bd00b154h,0e5e173ffh,0d0b35e6ah,09164722dh,057b2a048h,088761ec8h,03e3c665bh,03da83832h,06bdd1397h,073dafe3bh,03c8b1a1eh
- DD 054317cach,04497ace6h,0521771b3h,0be600ab9h,0b0dfe8b8h,0b42e409eh,03942310fh,0386a67d7h,04431cc28h,025548d8dh,0985dc524h,0a7cff142h,093c4be32h,04d60f5a1h,0d071c6e1h,083ebd5c8h
- DD 0b1fd2b0bh,0ba3a80a7h,05bec33e8h,09b3ad396h,079743fb3h,0b3868d61h,0fdb462fah,0cfd169fch,09ce0a6afh,0d3b499d7h,0e42d3ff8h,055dc1cf1h,0c6c3e1b2h,004fb9e6ch,06f69a474h,047e6961dh
- DD 0e548b37bh,054eb3acch,084d40549h,0b38e7542h,07b341b4fh,08c3daa51h,0690bf7fah,02f6928ech,086ce6c41h,00496b323h,010adadcdh,001be1c55h,04bb5faf9h,0c04e67e7h,0e15c9985h,03cbaf678h
- DD 050ca4247h,08cd12145h,0e7dd30aah,0ba1aa47ah,0e58fee24h,02f81ddf1h,0eec9b0e8h,003452936h,0243aea96h,08bdc3b81h,015c3d0e5h,09a2919afh,010948361h,09ea640ech,06e0bcccfh,05ac86d5bh
- DD 0c36cf440h,0f892d918h,0c939719ch,0aed3e837h,0c0218b64h,0b07b08d2h,0ce9790ddh,06f1bcbbah,060919b8eh,04a84d6edh,08ac1f9ebh,0d8900791h,00dd5daefh,0f84941aah,067fd62c5h,0b22fe40ah
- DD 0157f2db3h,097e15ba2h,08e28ca9ch,0bda2fc8fh,037b9f454h,05d050da4h,02379d72eh,03d57eb57h,0fb5ee997h,0e9b5eba2h,0e11538cah,001648ca2h,0f6327974h,032bb76f6h,0ff3f4bb7h,0338f14b8h
- DD 0d7ab9a2dh,0524d226ah,07dfae958h,09c00090dh,08751d8c2h,00ba5f539h,03ab8262dh,08afcbcddh,0e99d043bh,057392729h,0aebc943ah,0ef51263bh,020862935h,09feace93h,0b06c817bh,0639efc03h
- DD 066b4be7ah,01fe054b3h,084a37a1eh,03f25a9deh,078d75cd9h,0f39ef1adh,05062c1b5h,0d7b58f49h,0ff563436h,06f74f9a9h,0e8af51e7h,0f718ff29h,015e97fech,05234d313h,0292f1c0ah,0b6a8e2b1h
- DD 0327720c1h,0a7f53aa8h,0ba092cc8h,0956ca322h,028746c4dh,08f03d64ah,066d0d392h,051fe1782h,03c832c80h,0d19b34dbh,06da2e3b4h,060dccc5ch,00a104ccch,0245dd62eh,0620b21fdh,0a7ab1de1h
- DD 03893d123h,0b293ae0bh,0b15ee71ch,0f7b75783h,042a9468bh,05aa3c614h,0db15d744h,0d686123ch,0a7ab4116h,08c616891h,0a4e6a459h,06fcd72c8h,077e5fad7h,0ac219110h,0704fa46bh,0fb6a20e7h
- DD 0341d81dch,0e839be7dh,032148379h,0cddb6889h,0f7026eadh,0da6211a1h,0f4d1cc5eh,0f3b2575fh,0a7a73ae6h,040cfc8f6h,061d5b483h,083879a5eh,041a50ebch,0c5acb1edh,03c07d8fah,059a60cc8h
- DD 0b1876262h,01b73bdceh,012af4ee9h,02b0d79f0h,0d46e1d07h,08bcf3b0bh,0e45d152fh,017d6af9dh,06d736451h,073520461h,056b0bf5ah,043cbbd97h,0d5999b9dh,0b0833a5bh,0eb72e398h,0702614f0h
- DD 059c3e9f8h,00aadf01ah,0ce6b3d16h,040200e77h,0deddafadh,0da22bdd3h,0310d72e1h,076dedaf4h,04bc2e88fh,049ef807ch,0146dd5a5h,06ba81291h,07d8d59e9h,0a1a4077ah,0802db349h,087b6a2e7h
- DD 01b4e598eh,0d5679997h,006fe4b1dh,0f499ef1fh,0fcb267c5h,03978d3aeh,0235786d0h,0b582b557h,01715cb07h,032b3b2cah,08480241dh,04c3de6a2h,0cb571ecdh,063b5ffedh,0ed2fe9a9h,0eaf53900h
- DD 0c3b81990h,0dec98d4ah,09e0cc8feh,01cb83722h,0d2b427b9h,0fe0b0491h,0e983a66ch,00f2386ach,0b3291213h,0930c4d1eh,059a62ae4h,0a2f82b2eh,0f93e89e3h,077233853h,011777c7fh,07f8063ach
- DD 059ad2877h,0ff0eb567h,09865c754h,06f454642h,0236e9a84h,0e6fe701ah,006e40fc3h,0c586ef16h,024bafad9h,03f62b6e0h,064da906ah,0c8b42bd2h,0da3276a0h,0c98e1eb4h,006cbf852h,030d0e5fch
- DD 0e8b4dfd4h,01b6b2ae1h,08301cbach,0d754d5c7h,0112a39ach,066097629h,093ba4ab9h,0f86b5999h,099f9d581h,026c9dea7h,0c2fafeaah,00473b1a8h,03b2505a5h,01469af55h,0d6a43323h,0227d16d7h
- DD 0ad3d97f9h,03316f73ch,01f137455h,052bf3bb5h,009954e7ch,0953eafebh,0dd732411h,0a721dfedh,0141d4579h,0b4929821h,0aa3bd435h,03411321ch,017fa6015h,0afb355aah,018e42f0eh,0b4e7ef4ah
- DD 059371000h,0604ac97ch,07f759c18h,0e1c48c70h,0a5db6b65h,03f62ecc5h,038a21495h,00a78b173h,0bcc8ad94h,06be1819dh,0d89c3400h,070dc04f6h,0a6b4840ah,0462557b4h,060bd21c0h,0544c6adeh
- DD 0907a544bh,06a00f24eh,0313da210h,0a7520dcbh,011e4994bh,0fe939b75h,0bc275d70h,0918b6ba6h,0644be892h,0d3e5e0fch,0fdaf6c42h,0707a9816h,0f15c13feh,060145567h,0e130a54ah,04818ebaah
- DD 058d2f767h,028aad3adh,0d7e7c773h,0dc5267fdh,0c3afcc98h,04919cc88h,02db8cd4bh,0aa2e6ab0h,0d0c63eaah,0d46fec04h,019ffa832h,0a1cb92c5h,0e43a631fh,0678dd178h,03dc788b3h,0fb5ae1cdh
- DD 06e77de04h,068b4fb90h,0f06dbb97h,07992bcf0h,0c417c01dh,0896e6a13h,0b956be01h,08d96332ch,0413aa2b9h,0902fc93ah,0fc98c8a5h,099a4d915h,0565f1137h,052c29407h,021e4f281h,04072690fh
- DD 002ff6072h,036e607cfh,08ad98cdch,0a47d2ca9h,0f5f56609h,0bf471d1eh,0f264ada0h,0bcf86623h,0aa9e5cb6h,0b70c0687h,017401c6ch,0c98124f2h,0d4a61435h,08189635fh,0a9d98ea6h,0d28fb8afh
- DD 040c251f8h,0b9a67c2ah,0a2da44beh,088cd5d87h,0e09b5423h,0437deb96h,064287dc1h,0150467dbh,0cdabb839h,0e161debbh,0f1839a3eh,0a79e9742h,0652d202bh,0bb8dd3c2h,0e9f97d96h,07b3e67f7h
- DD 0b1cb6ac9h,05aa5d78fh,0ca1d0d45h,0ffa13e8eh,02ba5bf95h,0369295ddh,039aff05eh,0d68bd1f8h,026d783f2h,0af0d86f9h,0fc3aafc1h,0543a59b3h,07b7da97ch,03fcf81d2h,0d25dee46h,0c990a056h
- DD 0519cce2ch,03e6775b8h,0ae13d863h,0fc9af71fh,047c1605ch,0774a4a6fh,02fd205e8h,046ba4245h,0d3fd524dh,0a06feea4h,06de1acc2h,01e724641h,0334e2b42h,0f53816f1h,0922f0024h,049e5918eh
- DD 065c7322dh,0439530b6h,0b3c1b3fbh,0cf12cc01h,00172f685h,0c70b0186h,01b58391dh,0b915ee22h,0a317db24h,09afdf03bh,017b8ffc4h,087dec659h,0e4d3d050h,07f46597bh,0006500e7h,080a1c1edh
- DD 078bf030eh,084902a96h,050560148h,0fb5e9c9ah,063362426h,06dae0a92h,0a9e30c40h,0dcaeecf4h,0518d0c6bh,0c0d887bbh,0cb985b9dh,099181152h,0ef7bc381h,0ad186898h,09ee46201h,018168ffbh
- DD 02502753ch,09a04cdaah,051407c41h,0bb279e26h,0f23564e5h,0eacb03aah,071e61016h,018336582h,0eb809877h,08684b8c4h,0ea0e672eh,0b336e18dh,034ee5867h,0efb601f0h,01341cfd1h,02733edbeh
- DD 026025c3ch,0b15e809ah,09350df88h,0e6e981a6h,08502fd8eh,092376237h,00c12be9bh,04791f216h,025f02425h,0b7256789h,07a974443h,0ec863194h,0fb41cc52h,07c0ce882h,0f25c07f2h,0c266ff7eh
- DD 0017025f3h,03d4da8c3h,0fb9579b4h,0efcf628ch,01f3716ech,05c4d0016h,06801116eh,09c27ebc4h,01da1767eh,05eba0ea1h,047004c57h,0fe151452h,08c2373b7h,03ace6df6h,05dbc37ach,075c3dffeh
- DD 0ddc925fch,03dc32a73h,02f65ee0bh,0b679c841h,0451cbfebh,0715a3295h,0f76e9a29h,0d9889768h,0b28ad247h,0ec20ce7fh,000894d79h,0e99146c4h,09f5e3ea7h,071457d7ch,038030031h,0097b2662h
- DD 0cf9f82a8h,0db7f6ae6h,0438f473ah,0319decb9h,0283856c3h,0a63ab386h,0b06a361bh,013e3172fh,07d5a006ch,02959f8dch,075fba752h,02dbc27c6h,087c22c9eh,0c1227ab2h,071a268b2h,006f61f75h
- DD 004779ce2h,01b6bb971h,00aadcb1dh,0aca83812h,0aeaab2d5h,0297ae0bch,05bfb9f13h,0a5c14ee7h,0f17a62c7h,0aa00c583h,0173759f6h,039eb962ch,086c9a88fh,01eeba1d4h,0df016c5eh,00ab6c37ah
- DD 0a28a0749h,0a2a147dbh,0ee519165h,0246c20d6h,0d3810715h,05068d1b1h,0748160b9h,0b1e7018ch,0f380ff62h,003f5b1fah,0f3cb2c1eh,0ef7fb1ddh,0fc91a7dah,0eab539a8h,0f3f9b561h,083ddb707h
- DD 0fe7df7a4h,0c550e211h,0063f6f40h,0a7cd07f2h,02976879ch,0b0de3635h,0e55741dah,0b5f83f85h,0f3d8ac3dh,04ea9d25eh,062819f02h,06fe2066fh,0cef4a564h,04ab2b9c2h,05ffa2de3h,01e155d96h
- DD 0c3a72d00h,00eb0a19bh,08513c31bh,04037665bh,004c64637h,02fb2b6bfh,008cdc639h,045c34d6eh,0f01fd796h,056f1e10fh,0fe3667b8h,04dfb8101h,09021d0c0h,0e0eda253h,08a06c6abh,07a94e9ffh
- DD 0bb9aa882h,02d3bb0d9h,0ec05fd10h,0ea20e4e5h,01a1ca64eh,0ed7eeb5fh,0c6327cbdh,02fa6b43ch,03aa91121h,0b577e3cfh,03a34079bh,08c6bd5eah,060e02fc0h,0d7e5ba39h,090141bf8h,0f16dd2c3h
- DD 080101b98h,0b57276d9h,0b82f0f66h,0760883fdh,04bc3eff3h,089d7de75h,05dc2ab40h,003b60643h,0e05beeach,0cd6e53dfh,0bc3325cdh,0f2f1e862h,0774f03c3h,0dd0f7921h,04552cc1bh,097ca7221h
- DD 01cd19f72h,05a0d6afeh,0f183fbebh,0a20915dch,0832c403ch,09fda4b40h,0be425442h,032738eddh,0b5eccf1ah,0469a1df6h,028bbe1f0h,04b5aff42h,0570dfc93h,031359d7fh,0f0088628h,0a18be235h
- DD 0b00ed3a9h,0a5b30fbah,073cdf8beh,034c61374h,0abc56797h,02c5c5f46h,0b82a8ae2h,05cecf93dh,0a968fbf0h,07d3dbe41h,01a5c7f3dh,0d23d4583h,0c087a9c7h,0f28f69a0h,0474471cah,0c2d75471h
- DD 04eb732ech,036ec9f4ah,0b1ca6bedh,06c943bbdh,0f2457892h,0d64535e1h,0f7e2ac06h,08b84a8eah,02499dd5fh,0e0936cd3h,00ed04e57h,012053d7eh,0e4305d9dh,04bdd0076h,01f67f0a2h,034a527b9h
- DD 09cec46eah,0e79a4af0h,0658b9bc7h,0b15347a1h,035af2f75h,06bd2796fh,04051c435h,0ac957990h,0c33a655dh,02669dda3h,088514aa3h,05d503c2eh,03753dd41h,0dfa11337h,00b754f78h,03f054673h
- DD 0496125bdh,0bf185677h,03775006ch,0fb0023c8h,03a037899h,0fa0f072fh,00e4aea57h,04222b6ebh,07866d25ah,03dde5e76h,04837aa6fh,0b6eb04f8h,02cf1cdb8h,05315591ah,02d4e683ch,06dfb4f41h
- DD 048ee1f3ah,07e923ea4h,005a2afd5h,09604d9f7h,040ea4948h,0be1d4a33h,0b44cbd2fh,05b45f1f4h,04acc757eh,05faf8376h,063d68ff7h,0a7cf9ab8h,0df0e404bh,08ad62f69h,012bdafdfh,0d65f33c2h
- DD 0a377b14eh,0c365de15h,08e39f60ch,06bf5463bh,02ce68148h,062030d2dh,0e6f843a8h,0d95867efh,0ef5ab017h,0d39a0244h,04ab55d12h,00bd2d8c1h,041639169h,0c9503db3h,0f7660c8ah,02d4e25b0h
- DD 0e224c5d7h,0760cb3b5h,068616919h,0fa3baf8ch,08d142552h,09fbca113h,07669ebf5h,01ab18bf1h,09bdf25ddh,055e6f53eh,0cb6cd154h,004cc0bf3h,095e89080h,0595bef49h,0104a9ac1h,0fe9459a8h
- DD 0cce9bb32h,0ad2d89cah,0f7de8285h,0ddea65e1h,0b351bd4bh,062ed8c35h,00c0e19a7h,04150ff36h,0345f4e47h,086e3c801h,0203a266ch,03bf21f71h,0855b1f13h,07ae110d4h,007262517h,05d6aaf6ah
- DD 0813d28f1h,01e0f12e1h,07ad7a523h,06000e11dh,0c744a17bh,0c7d8deefh,014c05a00h,01e990b48h,093e976d5h,068fddaeeh,046610d63h,0696241d1h,0893dda88h,0b204e7c3h,06a3a6946h,08bccfa65h
- DD 0c5cd1411h,0b59425b4h,0ff3658b1h,0701b4042h,04784cf93h,0e3e56bcah,08fe68d60h,027de5f15h,0f8d53f19h,04ab9cfceh,0a40a730dh,0ddb10311h,04eee0a8ah,06fa73cd1h,05249719dh,0fd548748h
- DD 0a8123ef0h,049d66316h,0e7f95438h,073c32db4h,00d9e7854h,02e2ed209h,09d9f0507h,0f98a9329h,00c6aa20ah,0c5d33cf6h,075279bb2h,09a32ba14h,0774a7307h,07e3202cbh,0e8c42dbdh,064ed4bc4h
- DD 0d4caed0dh,0c20f1a06h,0171d22b3h,0b8021407h,0d13268d7h,0d426ca04h,025f4d126h,092377007h,071f21a85h,04204cbc3h,0f82369bah,018461b7ah,03fc858f9h,0c0c07d31h,0e2bab569h,05deb5a50h
- DD 0d5eea89eh,0d5959d46h,008437f4bh,0fdff8424h,03cfe254fh,0f21071e4h,095468321h,072417696h,0102cae3eh,05d8288b9h,0f1965dffh,02d143e3dh,0a078d847h,000c9a376h,026028731h,06fc0da31h
- DD 0e45083a2h,0a2baeadfh,05e5b4bcdh,066bc7218h,0d04b8e7fh,02c826442h,06c4b586bh,0c19f5451h,05b7eeed5h,060182c49h,07aa9dfa1h,0d9954ecdh,0c73884adh,0a403a8ech,09bb39041h,07fb17de2h
- DD 0abb020e8h,0694b64c5h,019c4eec7h,03d18c184h,01c4793e5h,09c4673efh,0056092e6h,0c7b8aeb5h,0f0f8c16bh,03aa1ca43h,0d679b2f6h,0224ed5ech,055a205c9h,00d56eeafh,04b8e028bh,0bfe115bah
- DD 03927f4feh,097e60849h,0759aa7c5h,0f91fbf94h,06be90a51h,0985af769h,078ccb823h,0c1277b78h,0e7a75952h,0395b656eh,0928da5f5h,000df7de0h,04ca4454fh,009c23175h,07aa2d3c1h,04ec971f4h
- DD 0e75d9ccch,045c3c507h,03dc90306h,063b7be8ah,05db44bdch,037e09c66h,06841c6a2h,050d60da1h,008df1b12h,06f9b65eeh,07ff089dfh,038734879h,03fe8013dh,09c331a66h,05f42fcc8h,0017f5de9h
- DD 0e8e57567h,043077866h,0f9fcdb18h,0c9f781ceh,09b12e174h,038131ddah,08a03752ah,025d84aa3h,04d0c0ce2h,045e09e09h,092bebba5h,01564008bh,0a87284c7h,0f7e8ad31h,097e7bbaah,0b7c4b46ch
- DD 097acf4ech,03e22a7b3h,05ea8b640h,00426c400h,04e969285h,05e3295a6h,0a6a45670h,022aabc59h,05f5942bch,0b929714ch,0fa3182edh,09a6168bdh,0104152bah,02216a665h,0b6926368h,046908d03h
- DD 05a1251fbh,0a9f5d874h,0c72725c7h,0967747a8h,031ffe89eh,0195c33e5h,0e964935eh,0609d210fh,02fe12227h,0cafd6ca8h,00426469dh,0af9b5b96h,05693183ch,02e9ee04ch,0c8146fefh,01084a333h
- DD 0aed1d1f7h,096649933h,050563090h,0566eaff3h,0ad2e39cfh,0345057f0h,01f832124h,0148ff65bh,0cf94cf0dh,0042e89d4h,0520c58b3h,0319bec84h,05361aa0dh,02a267626h,08fbc87adh,0c86fa302h
- DD 05c8b06d5h,0fc83d2abh,0fe4eac46h,0b1a785a2h,0846f7779h,0b99315bch,0ef9ea505h,0cf31d816h,015d7dc85h,02391fe6ah,0b4016b33h,02f132b04h,0181cb4c7h,029547fe3h,0650155a1h,0db66d8a6h
- DD 0adc1696fh,06b66d7e1h,00acd72d0h,098ebe593h,0cc1b7435h,065f24550h,0b4b9a5ech,0ce231393h,0db067df9h,0234a22d4h,0caff9b00h,098dda095h,06100c9c1h,01bbc75a0h,0939cf695h,01560a9c8h
- DD 099e0925fh,0cf006d3eh,06322375ah,02dd74a96h,0b56af5bah,0c58b446ah,0e0b9b4f1h,050292683h,01aeaffa3h,0e2c34cb4h,09b9587c1h,08b17203fh,0ead1350ch,06d559207h,0fb7f9604h,02b66a215h
- DD 0fe51bf74h,00850325eh,05e460094h,09c4f579eh,076da2f25h,05c87b92ah,06febef33h,0889de4e0h,0646083ceh,06900ec06h,0bfe12773h,0be2a0335h,0c5344110h,0add1da35h,0b802cd20h,0757568b7h
- DD 000f7e6c8h,075559779h,00facd2f0h,038e8b94fh,003fde375h,0fea1f3afh,075881dfch,05e11a1d8h,0c1e2f2efh,0b3a6b02eh,0c605a6c5h,0193d2bbbh,0339a0b2dh,0325ffeeeh,09e0c8846h,027b6a724h
- DD 0f1c367cah,0e4050f1ch,0c90fbc7dh,09bc85a9bh,0e1a11032h,0a373c4a2h,0ad0393a9h,0b64232b7h,0167dad29h,0f5577eb0h,094b78ab2h,01604f301h,0e829348bh,00baa94afh,041654342h,077fbd8ddh
- DD 0b964e39ah,0dab50ea5h,0d0d3c76eh,0d4c29e3ch,056d11964h,080dae67ch,0e5ffcc2fh,07307a8bfh,091708c3bh,065bbc1aah,028bf0eebh,0a151e62ch,06fa34db7h,06cb53381h,0a29403a8h,05139e05ch
- DD 094a7cd2eh,06ff651b4h,00699336ch,05671ffd1h,0979a896ah,06f5fd2cch,0d8148cefh,011e893a8h,065cf7b10h,0988906a1h,0c50d8485h,081b67178h,08a35b3deh,07c0deb35h,0c1d29799h,0423ac855h
- DD 0dac50b74h,0af580d87h,05869734ch,028b2b89fh,0874e28fbh,099a3b936h,025f3f73ah,0bb2c9190h,084a9d5b7h,0199f6918h,07e770374h,07ebe2325h,00738efe2h,0f442e107h,0cf9082d2h,0cf9f3f56h
- DD 009618708h,0719f69e1h,0c183f9b1h,0cc9e8364h,0366a21afh,0ec203a95h,0068b141fh,06aec5d6dh,0994f04e9h,0ee2df78ah,0271245b0h,0b39ccae8h,097e43f4fh,0b875a4a9h,0db2cea98h,0507dfe11h
- DD 0489b03e9h,04fbf81cbh,06ec414fah,0db86ec5bh,0f51b3ae5h,0fad444f9h,01914e3feh,0ca7d33d6h,00ae6c4d0h,0a9c32f5ch,073969568h,0a9ca1d1eh,01aa7467eh,098043c31h,0e21b5ac6h,0e832e75ch
- DD 05232123dh,0314b7aeah,065ae86dbh,008307c8ch,0aa4668edh,006e7165ch,0b4d3ec39h,0b170458bh,0c19bb986h,04d2e3ec6h,0ae0304edh,0c5f34846h,06c9f9722h,0917695a0h,04cab1c0ah,06c7f7317h
- DD 09d6d2e8bh,06295940eh,0549f7c97h,0d318b8c1h,097713885h,022453204h,0a8a440feh,0468d834bh,0bfba796eh,0d81fe5b2h,06d71f116h,0152364dbh,0b5b66e53h,0bb8c7c59h,02641a192h,00b12c61bh
- DD 0fcf0a7fdh,031f14802h,05488b01eh,042fd0789h,09952b498h,071d78d6dh,007ac5201h,08eb572d9h,04d194a88h,0e0a2a44ch,0ba017e66h,0d2b63fd9h,0f888aefch,078efc6c8h,04a881a11h,0b76f6bdah
- DD 0b46c2397h,0187f314bh,05ded2819h,0004cf566h,038764d34h,0a9ea5704h,078084709h,0bba45217h,01171121eh,006474571h,0e7c9b671h,0ad7b7eb1h,0730f7507h,0dacfbc40h,0c7ad7bd1h,0178cd8c6h
- DD 0b2a67238h,0bf0be101h,0af9c14f2h,03556d367h,0a5662075h,0104b7831h,079d9e60ah,058ca59bbh,0a569a73bh,04bc45392h,05698f6c9h,0517a52e8h,0aeadd755h,085643da5h,02a581b84h,01aed0cd5h
- DD 080af1372h,0b9b4ff84h,0f1ba5d1fh,0244c3113h,0f5f98d31h,02a5dacbeh,04375bc2ah,02c3323e8h,05594b1ddh,017a3ab4ah,0ceb4797eh,0a1928bfbh,0e4886a19h,0e83af245h,072b5a74ah,08979d546h
- DD 019f9e967h,0a0f726bch,0e8fbbf4eh,0d9d03152h,0b7707d40h,0cfd6f51dh,063f6e6e0h,0633084d9h,055667eafh,0edcd9cdch,02e44d56fh,073b7f92bh,04e962b14h,0fb2e39b6h,0f671fcbfh,07d408f6eh
- DD 0164a89bbh,0cc634ddch,03ef3bd05h,074a42bb2h,0428decbbh,01280dbb2h,0402c8596h,06103f6bbh,0355a5752h,0fa2bf581h,000946674h,0562f96a8h,06da0223bh,04e4ca16dh,028d3aa25h,0fe47819fh
- DD 0f8dfcf8ah,09eea3075h,095669825h,0a284f0aah,0867d3fd8h,0b3fca250h,0269d691eh,020757b5fh,093b8a5deh,0f2c24020h,0ebc06da6h,0d3f93359h,0b2739c33h,01178293eh,0bcd686e5h,0d2a3e770h
- DD 0cd941534h,0a76f49f4h,0e3c71c0eh,00d37406bh,03b97f7e3h,0172d9397h,0bd7fd0deh,0ec17e239h,06f496ba2h,0e3290551h,036ad50e7h,06a693172h,083e7eff5h,0c4e539a2h,018e1b4cfh,0752737e7h
- DD 068af43eeh,0a2f7932ch,0703d00bdh,05502468eh,02fb061f5h,0e5dc978fh,028c815adh,0c9a1904ah,0470c56a4h,0d3af538dh,0193d8cedh,0159abc5fh,020108ef3h,02a37245fh,0223f7178h,0fa17081eh
- DD 010c8c0f5h,027b0fb2bh,040650547h,02102c3eah,08ac3bfa7h,0594564dfh,0509dad96h,098102033h,0f1d18a13h,06989643fh,0d7fc5af0h,035eebd91h,0faeaafd8h,0078d096ah,0def3de98h,0b7a89341h
- DD 0ecf2a73ah,02a206e8dh,08e551994h,0066a6397h,0b98d53a2h,03a6a088ah,02d1124aah,00ce7c67ch,0759a113ch,048cec671h,04f6f67fah,0e3b373d3h,0fd36727bh,05455d479h,0a13c0d81h,0e5a428eeh
- DD 01c86682bh,0b853dbc8h,0b8d02b2ah,0b78d2727h,08ebc329ah,0aaf69bedh,0293b2148h,0db6b40b3h,0b8c4961fh,0e42ea77dh,020e5e0abh,0b1a12f7ch,079e8b05eh,0a0ec5274h,0fab60a80h,068027391h
- DD 016b1bd5eh,06bfeea5fh,04de30ad3h,0f957e420h,06a353b9eh,0cbaf664eh,026d14febh,05c873312h,0b65f57cbh,04e87f98ch,05e0cdd41h,0db60a621h,0a6881440h,067c16865h,046ab52aah,01093ef1ah
- DD 03f4ece64h,0c095afb5h,07604551ah,06a6bb02eh,00b26b8cdh,055d44b4eh,0f971268ah,0e5f9a999h,011a7de84h,0c08ec425h,0fda469ddh,083568095h,06c6c90a2h,0737bfba1h,0be229831h,01cb9c4a0h
- DD 0bb2eec64h,093bccbbah,0da03adbeh,0a0c23b64h,0e0e86ac4h,05f7aa00ah,0fc1401e6h,0470b941eh,09df43574h,05ad8d679h,00f65d810h,04ccfb8a9h,0aa7fbd81h,01bce80e3h,09508d20ah,0273291adh
- DD 042a92806h,0f5c4b46bh,0a86ab44ah,0810684ech,0ca0bc9f8h,04591640bh,05c4b6054h,0b5efcdfch,06e9edd12h,016fc8907h,0d4d792f9h,0e29d0b50h,09b03116dh,0a45fd01ch,0c81765a4h,085035235h
- DD 0b4b4b67ch,01fe2a9b2h,0e8020604h,0c1d10df0h,0bc8058d8h,09d64abfch,0712a0fbbh,08943b9b2h,03b3def04h,090eed914h,04ce775ffh,085ab3aa2h,07bbc9040h,0605fd4cah,0e2c75dfbh,08b34a564h
- DD 010358560h,041ffc94ah,09e5c28aah,02d8a5072h,04cc7eb15h,0e915a0fch,08f6d0f5dh,0e9efab05h,0d19e9b91h,0dbab47a9h,00276154ch,08cfed745h,02cfede0dh,0154357aeh,019f5a4efh,0520630dfh
- DD 0e382360fh,025759f7ch,088bf5857h,0b6db05c9h,06c58d46ch,02917d61dh,0fd20cb7ah,014f8e491h,011c20340h,0b68a727ah,0af7ccbb6h,00386f86fh,0fee09a20h,05c8bc6cch,0bb7eea35h,07d76ff4ah
- DD 0db15be7ah,0a7bdebe7h,0d89f0302h,067a08054h,0c1193364h,056bf0ea9h,062837ebeh,0c8244467h,020d841b8h,032bd8e8bh,0dbb8a54fh,0127a0548h,063b20236h,083dd4ca6h,0203491fah,087714718h
- DD 0aa8a5288h,04dabcaaah,0af23a1c9h,091cc0c8ah,03f220e0ch,034c72c6ah,01232144ah,0bcc20bdfh,0a20ede1bh,06e2f42dah,074a00515h,0c441f00ch,0734b8c4bh,0bf46a5b6h,07b56c9a4h,057409503h
- DD 0e4585d45h,09f735261h,06734e642h,09231faedh,0be70ee6ch,01158a176h,07c3501bfh,035f1068dh,0a2d26115h,06beef900h,0ef0afee3h,0649406f2h,0bc2420a1h,03f43a60ah,0d5aee4ach,0509002a7h
- DD 03ff3571bh,0b46836a5h,0837927c1h,024f98b78h,04533c716h,06254256ah,0d07ee196h,0f27abb0bh,05c6d5bfdh,0d7cf64fch,0f0cd7a77h,06915c751h,08798f534h,0d9f59012h,0f81d8b5fh,0772b0da8h
- DD 02e03fa69h,01244260ch,03be1a374h,036cf0e3ah,0ef06b960h,06e7c1633h,0671f90f6h,0a71a4c55h,033c673dbh,07a941251h,073e8c131h,0c0bea510h,0d4f6c734h,061a8a699h,0341ed001h,025e78c88h
- DD 08e2f7d90h,05c18acf8h,077be32cdh,0fdbf33d7h,0d2eb5ee9h,00a085cd7h,0b3201115h,02d702cfbh,085c88ce8h,0b6e0ebdbh,01e01d617h,023a3ce3ch,0567333ach,03041618eh,0157edb6bh,09dd0fd8fh
- DD 0b57872b8h,027f74702h,0657d5fe1h,02ef26b4fh,057cf3d40h,095426f0ah,065a6067ah,0847e2ad1h,009996a74h,0d474d9a0h,02a26115ch,016a56acdh,0d16f4d43h,002a615c3h,0aadb85b7h,0cc3fc965h
- DD 0ce07d1b0h,0386bda73h,058ad4178h,0d82910c2h,0cd2617f4h,0124f82cfh,0ef691770h,0cc2f5e8dh,0b8c30ccch,082702550h,01a8e575ah,07b856aeah,0b1ab9459h,0bb822fefh,0ec24e38eh,0085928bch
- DD 0ba8f4b4dh,05d0402ech,000b4d58bh,0c07cd4bah,029227e7ah,05d8dffd5h,031bf386fh,061d44d0ch,0135e6f4dh,0e486dc2bh,0e79410efh,0680962ebh,0f10088b5h,0a61bd343h,0e2e28686h,06aa76076h
- DD 08fb98871h,080463d11h,0bbc76affh,0cb26f5c3h,0fbe03614h,0d4ab8eddh,0c0cf2deeh,0c8eb579bh,0c93bae41h,0cc004c15h,03aeca3b2h,046fbae5dh,00f1e9ab1h,0671235cfh,09ec285c1h,0adfba934h
- DD 0f216c980h,088ded013h,0f79e0bc1h,0c8ac4fb8h,0fb97a237h,0a29b89c6h,09922d8e7h,0b697b780h,0ddb945b5h,03142c639h,0e094c3a9h,0447b06c7h,072266c90h,0cdcb3642h,0a9385046h,0633aad08h
- DD 0b57c6477h,0a36c936bh,0e94dbcc6h,0871f8b64h,0a591a67bh,028d0fb62h,0c1d926f5h,09d40e081h,0f2d84b5ah,03111eaf6h,0a565b644h,0228993f9h,02c83188bh,00ccbf592h,03df3e197h,0f87b30abh
- DD 07642bca8h,0b8658b31h,052800f17h,01a032d7fh,079bf9445h,0051dcae5h,054a2e253h,0eba6b8eeh,0d4485692h,05c8b9cadh,08986e9beh,084bda40eh,02f0db448h,0d16d16a4h,0a14d4188h,08ec80050h
- DD 098fa7aaah,0b2b26107h,0f073aa4eh,041209ee4h,0f2d6b19bh,0f1570359h,0fc577cafh,0cbe6868ch,032c04dd3h,0186c4bdch,0cfeee397h,0a6c35faeh,0f086c0cfh,0b4a1b312h,0d9461fe2h,0e0a5ccc6h
- DD 01536189fh,0c32278aah,0ba6df571h,01126c55fh,0b194560eh,00f71a602h,0324bd6e1h,08b2d7405h,03738be71h,08481939eh,01a4d97a9h,0b5090b1ah,0f05ba915h,0116c65a3h,0aae448aah,021863ad3h
- DD 0a7aae5d3h,0d24e2679h,00de5c1c4h,07076013dh,0bb05b629h,02d50f8bah,06e66efbbh,073c1abe2h,0f2488af7h,0efd4b422h,0663ba575h,0e4105d02h,053a69457h,07eb60a8bh,0c945973bh,062210008h
- DD 077a50ec6h,0fb255478h,00a37a72ch,0bf0392f7h,04be18e7ah,0a0a7a19ch,025b1e0afh,090d8ea16h,0ef953f57h,07582a293h,0bdc5465ah,090a64d05h,0e2510717h,0ca79c497h,018cb641fh,0560dbb7ch
- DD 04b66abfbh,01d8e3286h,059030900h,0d26f52e5h,05584941ah,01ee3f643h,0569f5958h,06d3b3730h,04789dba5h,09ff2a62fh,072b5c9b7h,091fcb815h,06c8f9a0eh,0f446cb7dh,039b7ecb5h,048f625c1h
- DD 01c6219b8h,0babae801h,028ac2f23h,0e7a562d9h,026e20588h,0e1b48732h,0775af051h,006ee1cadh,0faff79f7h,0da29ae43h,0652ee9e0h,0c141a412h,0195f4bd0h,01e127f6fh,0072f34f8h,029c6ab4fh
- DD 030448112h,07b7c1477h,0e4a38656h,082b51af1h,02f315010h,02bf2028ah,06ea88cd4h,0c9a4a01fh,0257e5818h,0f63e95d8h,0b4519b16h,0dd8efa10h,00da910bfh,0ed8973e0h,05c0fe4a9h,0ed49d077h
- DD 0b7caee1eh,0ac3aac5eh,0a7f4da57h,01033898dh,05c6669b9h,042145c0eh,0c1aa2aa0h,042daa688h,01a1d885ah,0629cc15ch,0f4b76817h,025572ec0h,09c8f8f28h,08312e435h,081965490h,08107f8cdh
- DD 06fa6110ch,0516ff3a3h,0fb93561fh,074fb1eb1h,08457522bh,06c0c9047h,06bb8bdc6h,0cfd32104h,0cc80ad57h,02d6884a2h,086a9b637h,07c27fc35h,0adf4e8cdh,03461baedh,0617242f0h,01d56251ah
- DD 0c955bef4h,00b80d209h,006adb047h,0df02cad2h,05ec74feeh,0f0d7cb91h,01111ba44h,0d2503375h,0df53cb36h,09671755eh,03368551bh,054dcb612h,0c8a025a4h,066d69aach,0e77ef445h,06be946c6h
- DD 0a995e094h,0719946d1h,0e51e04d8h,065e848f6h,06a1e3113h,0e62f3300h,0501de503h,01541c7c1h,0f4acfadeh,04daac9fah,044cd0b71h,00e585897h,00a51cd77h,0544fd869h,00031016dh,060fc20edh
- DD 0a4276867h,058b404ech,034f34993h,046f6c3cch,0c636e5bdh,0477ca007h,07c458b47h,08018f5e5h,0e47b668fh,0a1202270h,0ee14f203h,0cef48ccdh,062ff9b4dh,023f98baeh,0c589edddh,055acc035h
- DD 064db4444h,03fe712afh,0becdd480h,019e9d634h,0a930978ah,0e08bc047h,0a1280733h,02dbf24ech,02cd706b2h,03c0ae38ch,0359017b9h,05b012a5bh,072e0f5aeh,03943c38ch,057176fa3h,0786167eah
- DD 0594881dch,0e5f9897dh,0cfb820c1h,06b5efad8h,0d55018deh,0b2179093h,00bac56ceh,039ad7d32h,02cfc0e81h,0b55122e0h,0f6d89daah,0117c4661h,0cb64fa09h,0362d01e1h,03e9c4dddh,06a309b4eh
- DD 0abea49b1h,0fa979fb7h,010e2c6c5h,0b4b1d27dh,023afde7ah,0bd61c2c4h,09786d358h,0eb6614f8h,07f6f7459h,04a5d816bh,009360e7bh,0e431a44fh,0c309914ch,08c27a032h,0caede3d8h,0cea5d68ah
- DD 03a0a3f95h,03668f665h,07ceba27bh,089369416h,0e4728fe9h,089981fadh,08a093562h,07102c8a0h,0235d21c8h,0bb80310eh,0befb7f7bh,0505e55d1h,012958a67h,0a0a90811h,04d851fefh,0d67e106ah
- DD 0431dd80eh,0b84011a9h,073306cd9h,0eb7c7ccah,0d1b3b730h,020fadd29h,0fe37b3d3h,083858b5bh,0b6251d5ch,0bf4cd193h,01352d952h,01cca1fd3h,090fbc051h,0c66157a4h,089b98636h,07990a638h
- DD 087dec0e1h,0e5aa692ah,0f7b39d00h,0010ded8dh,054cfa0b5h,07b1b80c8h,0a0f8ea28h,066beb876h,03476cd0eh,050d7f531h,0b08d3949h,0a63d0e65h,053479fc6h,01a09eea9h,0f499e742h,082ae9891h
- DD 05ca7d866h,0ab58b910h,03adb3b34h,0582967e2h,0cceac0bch,089ae4447h,07bf56af5h,0919c667ch,060f5dcd7h,09aec17b1h,0ddcaadbch,0ec697b9fh,0463467f5h,00b98f341h,0a967132fh,0b187f1f7h
- DD 0214aeb18h,090fe7a1dh,0741432f7h,01506af3ch,0e591a0c4h,0bb5565f9h,0b44f1bc3h,010d41a77h,0a84bde96h,0a09d65e4h,0f20a6a1ch,042f060d8h,0f27f9ce7h,0652a3bfdh,03b3d739fh,0b6bdb65ch
- DD 0ec7fae9fh,0eb5ddcb6h,0efb66e5ah,0995f2714h,069445d52h,0dee95d8eh,009e27620h,01b6c2d46h,08129d716h,032621c31h,00958c1aah,0b03909f1h,01af4af63h,08c468ef9h,0fba5cdf6h,0162c429fh
- DD 0753b9371h,02f682343h,05f1f9cd7h,029cab45ah,0b245db96h,0571623abh,03fd79999h,0c507db09h,0af036c32h,04e2ef652h,005018e5ch,086f0cc78h,0ab8be350h,0c10a73d4h,07e826327h,06519b397h
- DD 09c053df7h,0e8cb5eefh,0b300ea6fh,08de25b37h,0c849cffbh,0db03fa92h,0e84169bbh,0242e43a7h,0dd6f958eh,0e4fa51f4h,0f4445a8dh,06925a77fh,0e90d8949h,0e6e72a50h,02b1f6390h,0c66648e3h
- DD 0173e460ch,0b2ab1957h,030704590h,01bbbce75h,0db1c7162h,0c0a90dbdh,015cdd65dh,0505e399eh,057797ab7h,068434dcbh,06a2ca8e8h,060ad35bah,0de3336c1h,04bfdb1e0h,0d8b39015h,0bbef99ebh
- DD 01711ebech,06c3b96f3h,0ce98fdc4h,02da40f1fh,057b4411fh,0b99774d3h,015b65bb6h,087c8bdf4h,0c2eef12dh,0da3a89e3h,03c7471f3h,0de95bb9bh,0d812c594h,0600f225bh,02b75a56bh,054907c5dh
- DD 08db60e35h,0a93cc5f0h,0fa833319h,0743e3cd6h,0f81683c9h,07dad5c41h,09c34107eh,070c1e7d9h,0a6be0907h,00edc4a39h,086d0b7d3h,036d47035h,0272bfa60h,08c76da03h,00f08a414h,00b4a07eah
- DD 045c1dd53h,0699e4d29h,0231debb5h,0cadc5898h,0a77f00e0h,0df49fcc7h,0a73e5a0eh,093057bbfh,0027a4cd1h,02f8b7ecdh,0c614011ah,0114734b3h,067677c68h,0e7a01db7h,07e273f4fh,089d9be5eh
- DD 0089808efh,0d225cb2eh,0d59e4107h,0f1f7a27dh,08211b9c9h,053afc761h,0e6819159h,00361bc67h,07f071426h,02a865d0bh,0e7072567h,06a3c1810h,00d6bcabdh,03e3bca1eh,0408591bch,0a1b02bc1h
- DD 031fba239h,0e0deee59h,098bd91d1h,0f47424d3h,0071a3c1dh,00f8886f4h,0a819233bh,03f7d41e8h,0cf6eb998h,0708623c2h,0609a287fh,086bb49afh,063c90762h,0942bb249h,055a9654bh,00ef6eea5h
- DD 036f5defeh,05f6d2d72h,056f99176h,0fa9922dch,0f78ce0c7h,06c8c5eceh,0be09b55eh,07b44589dh,09ea83770h,0e11b3bcah,02ab71547h,0d7fa2c7fh,02a1ddcc0h,02a3dd6fah,05a7b7707h,009acb430h
- DD 0649d4e57h,04add4a2eh,01917526eh,0cd53a2b0h,020b44ac4h,0c5262330h,0baa2c31dh,04028746ah,064291d4ch,051318390h,0ee5ad909h,0bf48f151h,07b185681h,0cce57f59h,04854d442h,07c3ac1b0h
- DD 0c093c171h,065587dc3h,024f42b65h,0ae7acb24h,0955996cbh,05a338adbh,06051f91bh,0c8e65675h,028b8d0b1h,066711fbah,0b6c10a90h,015d74137h,03a232a80h,070cdd7ebh,06191ed24h,0c9e2f07fh
- DD 0f79588c0h,0a80d1db6h,0b55768cch,0fa52fc69h,07f54438ah,00b4df1aeh,0f9b46a4fh,00cadd1a7h,01803dd6fh,0b40ea6b3h,055eaae35h,0488e4fa5h,0382e4e16h,09f047d55h,02f6e0c98h,0c9b5b7e0h
- DD 095762649h,06b1bd2d3h,0c7aea3f6h,0a9604ee7h,06dc6f896h,03646ff27h,02860bad1h,09bf0e7f5h,07cb44b92h,02d92c821h,0aea9c182h,0a2f5ce63h,09154a5fdh,0d0a2afb1h,095801da6h,0482e474ch
- DD 0b611c24bh,0c19972d0h,060a8f351h,01d468e65h,07bcf6421h,0eb758069h,088fbc491h,0ec9dd0eeh,0956c2e32h,05b59d2bfh,0dcddf94eh,073dc6864h,0bcee7665h,0fd5e2321h,05e9a06c4h,0a7b4f8efh
- DD 07280f855h,0fba918ddh,08baec688h,0bbaac260h,033400f42h,0a3b3f00fh,066f2e6e4h,03d2dba29h,098509375h,0b6f71a94h,0cea423cch,08f33031fh,04807e6fbh,0009b8dd0h,05cdb954ch,05163cfe5h
- DD 0cf41c6e8h,003cc8f17h,0037b925ch,0f1f03c2ah,066d2427ch,0c39c19cch,07b6c18e4h,0823d24bah,0901f0b4fh,032ef9013h,0f8941c2eh,0684360f1h,02c28092eh,00ebaff52h,0256c932fh,07891e4e3h
- DD 0ac445e3dh,051264319h,08ea74381h,0553432e7h,067e9c50ah,0e6eeaa69h,062e628c7h,027ced284h,07a4afa57h,03f96d375h,0e484c150h,0de0a14c3h,038bd9923h,0364a24ebh,0e5177422h,01df18da0h
- DD 0d8d38a9bh,0174e8f82h,0e7de1391h,02e97c600h,0a1c175ddh,0c5709850h,032ae5035h,0969041a0h,076a2086bh,0cbfd533bh,0d7c2e8feh,0d6bba71bh,0099dfb67h,0b2d58ee6h,0064a85d9h,03a8b342dh
- DD 0522f9be3h,03bc07649h,0df1f49a8h,0690c075bh,03854ec42h,080e1aee8h,017689dc7h,02a7dbf44h,03faf4078h,0c004fc0eh,0df11862ch,0b2f02e9eh,0a0a1b7b3h,0f10a5e0fh,08936ec80h,030aca623h
- DD 002f40d9ah,0f83cbf05h,02c318a4dh,04681c468h,00e9c2674h,098575618h,01847092eh,0be79d046h,078bd01e0h,0af1e480ah,072a51db9h,06dd359e4h,0e3afbab6h,062ce3821h,017733199h,0c5cee5b6h
- DD 06ffd9fbbh,0e08b30d4h,036c610b7h,06e5bc699h,09ce262cfh,0f343cff2h,068b914c1h,0ca2e4e35h,016de36c5h,0011d64c0h,042e2b829h,0e0b10fddh,06685aaf8h,078942981h,0230ede97h,0e7511708h
- DD 03b922bf8h,0671ed8fch,04c29b133h,0e4d8c0a0h,03b6e99c4h,087eb1239h,08793bebah,0aff3974ch,02c18df9bh,003749405h,091007139h,0c5c3a293h,0e37a0b95h,06a77234fh,0b661c96bh,002c29a21h
- DD 0141ecf61h,0c3aaf1d6h,03bb22f53h,09195509eh,022d51357h,029597404h,0537bed60h,01b083822h,0e07289f0h,0cd7d6e35h,06dd86effh,01f94c48ch,0eb0f9cfah,0c8bb1f82h,01b2eb97dh,09ee0b7e6h
- DD 034d74e31h,05a52fe2eh,03bf79ab6h,0a352c310h,0abfeeb8fh,097ff6c5ah,0f5c97305h,0bfbe8fefh,0a7904608h,0d6081ce6h,0c4fca249h,01f812f3ah,0b9e5e200h,09b24bc9ah,038012ee8h,091022c67h
- DD 030a713a1h,0e83d9c5dh,084ef0f93h,04876e3f0h,0c1fbf928h,0c9777029h,0bce7d2a4h,0ef7a6bb3h,0dfa2a659h,0b8067228h,0d877a48fh,0d5cd3398h,0025d0f3fh,0bea4fd8fh,02eae7c2bh,0d67d2e35h
- DD 0cc5f4394h,0184de7d7h,04536e142h,0b5551b5ch,0d34aa60ah,02e89b212h,0f50051d5h,014a96feah,00d12bb0bh,04e21ef74h,060b9677eh,0c522f020h,02df7731dh,08b12e467h,07b326d31h,039f80382h
- DD 039024a94h,0dfb8630ch,097319452h,0aacb96a8h,0eda3867ch,0d68a3961h,077c4ffcah,00c58e2b0h,04da919fah,03d545d63h,0f15e2289h,0ef79b69ah,0808bab10h,054bc3d3dh,045f82c37h,0c8ab3007h
- DD 07c4a658ah,0c12738b6h,040e72182h,0b3c47639h,08798e44fh,03b77be46h,017a7f85fh,0dc047df2h,05e59d92dh,02439d4c5h,0e8e64d8dh,0cedca475h,087ca9b16h,0a724cd0dh,0a5540dfeh,035e4fd59h
- DD 0e4bcf6b1h,0f8c1ff18h,0295018fah,0856d6285h,03263c949h,0433f665ch,0a1f21409h,0a6a76dd6h,0cc7b4f79h,017d32334h,006720e4ah,0a1d03122h,081d9bed5h,0adb6661dh,011db15d1h,0f0d6fb02h
- DD 01fb747d2h,07fd11ad5h,03033762bh,0ab50f959h,0fbefaf5ah,02a7e711bh,03fef2bbfh,0c7393278h,00df6f9beh,0e29fa244h,071efd215h,09092757bh,04f3d6fd9h,0ee60e311h,00acfb78bh,0338542d4h
- DD 038961a0fh,044a23f08h,0986987cah,01426eadeh,04a863cc6h,036e6ee2eh,0628b8b79h,048059420h,07396e1deh,030303ad8h,038c5aad1h,05c8bdc48h,05c8f5066h,03e40e11fh,08d246bbdh,0abd6e768h
- DD 023330a01h,068aa40bbh,0c34eafa0h,0d23f5ee4h,05de02c21h,03bbee315h,0d1d8dd06h,018dd4397h,0122d7b44h,03ba1939ah,0a33870d6h,0e6d3b40ah,01c4fe3f8h,08e620f70h,0d3a50cbfh,0f6bba1a5h
- DD 0cfc0aee0h,04a78bde5h,0c08c50bdh,0847edc46h,0ad63c9b2h,0baa2439ch,010fc2acbh,0ceb4a728h,026da033dh,0a419e40eh,003e02683h,06cc3889dh,0fdccf725h,01cd28559h,08d13d208h,00fd7e0f1h
- DD 01f0df9d4h,001b9733bh,0a2b5e4f3h,08cc2c5f3h,03a304fd4h,043053bfah,00a9f1aa7h,08e87665ch,0d73dc965h,0087f29ech,03e9023dbh,015ace455h,02bce28b4h,02370e309h,0b6b1e84ah,0f9723442h
- DD 0b72d9f26h,0beee662eh,0f0e47109h,0b19396deh,0e13289d0h,085b1fa73h,054e58e32h,0436cf77eh,0e990ef77h,00ec833b3h,01b11fc25h,07373e3edh,00fc332ceh,0be0eda87h,08d7ea856h,0ced04970h
- DD 07e977ca0h,0f85ff785h,0dfdd5d2bh,0b66ee8dah,0905af461h,0f5e37950h,0966d487ch,0587b9090h,032ba0127h,06a198a1bh,0141615ach,0a7720e07h,0996ef2f2h,0a23f3499h,0470bcb3dh,0ef5f64b4h
- DD 092b8c559h,0a526a962h,069740a0fh,00c14aac0h,0a6bdc0a5h,00d41a9e3h,09c48aef4h,097d52106h,03e7c253bh,0cf16bd30h,047fdedc1h,0cc834b1ah,0373aab2eh,07362c6e5h,0c5f590ffh,0264ed85eh
- DD 066d41870h,07a46d9c0h,04787ba09h,0a50c20b1h,0e3d44635h,0185e7e51h,031e2d8dch,0b3b3e080h,0a179e9d9h,0bed1e558h,074a76781h,02daa3f79h,03a40864fh,04372baf2h,04fe75cb5h,046900c54h
- DD 0f76765d0h,0b95f171eh,095c87502h,04ad726d2h,04d7c99bdh,02ec769dah,0c36cdfa8h,05e2ddd19h,0a93e6deah,0c22117fch,093771123h,0e8a2583bh,0fa08a3a2h,0be2f6089h,08f0e1112h,04809d5edh
- DD 0da7a095eh,03b414aa3h,026f5aaddh,09049acf1h,06be8b84ah,078d46a4dh,0b732b9b3h,0d66b1963h,0de6e9555h,05c2ac2a0h,0b5bd8770h,0cf52d098h,00fd28921h,015a15fa6h,08b27536dh,056ccb81eh
- DD 09f4ccbb8h,00f0d8ab8h,0db221729h,0ed5f44d2h,000bed10ch,043141988h,01d735b8bh,0c94348a4h,029ef8479h,079f3e9c4h,0614c693fh,04c13a4e3h,08e143a14h,032c9af56h,0e29ac5c4h,0bc517799h
- DD 02774856fh,005e17992h,06c1bf55fh,06e52fb05h,0e4f19e16h,0aeda4225h,0af5ccb26h,070f4728ah,0b2947f22h,05d2118d1h,0281d6fb9h,0c827ea16h,08cf0eabdh,08412328dh,003ef9dcfh,045ee9fb2h
- DD 0bb937d63h,08e700421h,0cc4b37a6h,0df8ff2d5h,05ced7b68h,0a4c0d5b2h,0c7308f59h,06537c1efh,03b37f8e8h,025ce6a26h,0deebc6ceh,0170e9a9bh,08728d72ch,0dd037952h,0850154bch,0445b0e55h
- DD 083a7337bh,04b7d0e06h,0ffecf249h,01e3416d4h,066a2b71fh,024840effh,0b37cc26dh,0d0d9a50ah,06fe28ef7h,0e2198150h,023324c7fh,03cc5ef16h,0769b5263h,0220f3455h,0a10bf475h,0e2ade2f1h
- DD 0458d3671h,028cd20fah,02dc4847bh,01549722ch,0591941e3h,06dd01e55h,027128ccbh,00e6fbceah,03bef0262h,0ae1a1e6bh,08f54e103h,0fa8c472ch,072c052ech,07539c0a8h,05a3490e9h,0d7b27369h
- DD 071684349h,0143fe1f1h,032e19b97h,036b4722eh,090980affh,0dc059227h,09e13d674h,0175c9c88h,06e6bfdb1h,0a7de5b22h,0bedb4b46h,05ea5b7b2h,0d34a6e44h,0d5570191h,0a24ff7e6h,0fcf60d2eh
- DD 0677819e1h,0614a392dh,0aa5a29e8h,07be74c7eh,063c85f3fh,0ab50feceh,046cab337h,0aca2e2a9h,0122a6fe3h,07f700388h,0882a04a8h,0db69f703h,0cf7aed57h,09a77935dh,08d91c86fh,0df16207ch
- DD 063ed9998h,02fca49abh,0a77ddf96h,0a3125c44h,024344072h,005dd8a86h,0fec3fb56h,0a023dda2h,00c743032h,0421b41fch,05e438639h,04f2120c1h,0c83c1b07h,0fb7cae51h,0cac2171ah,0b2370caah
- DD 06cc820fbh,02eb2d962h,0b85a44bfh,059feee5ch,05b6598f0h,094620fcah,07e314051h,06b922caeh,0106bed4eh,0ff8745adh,0dfa1e9abh,0546e71f5h,01ec29487h,0935c1e48h,04d936530h,09509216ch
- DD 085c9a2dbh,0c7ca3067h,06be8606fh,0d6ae5152h,0e14c651dh,009dbcae6h,09bc32f96h,0c9536e23h,034521b03h,0a90535a9h,0878756ffh,0f39c526ch,08aedf03ch,0383172ech,0efe0c034h,020a8075eh
- DD 064026422h,0f22f9c62h,024b9d076h,08dd10780h,03bef2950h,0944c742ah,088a2b00bh,055b9502eh,086a09817h,0a59e14b4h,047bb4071h,0a39dd3ach,03be0592fh,055137f66h,0c9e63f5bh,007fcafd4h
- DD 0346eb226h,0963652eeh,0ec2facb7h,07dfab085h,0691add26h,0273bf2b8h,0f2b46c44h,030d74540h,0f2c2d065h,005e8e73eh,0d42eeac9h,0ff9b8a00h,097209d22h,02fcbd205h,0de14ea2ch,0eb740ffah
- DD 0a8aef518h,0c71ff913h,0fff4cfa2h,07bfc74bbh,0b6b36048h,01716680ch,09ef79af1h,0121b2cceh,0a01eb3d3h,0bff3c836h,05f79077bh,050eb1c6ah,0a004bbcfh,0a48c32d6h,07d64f61dh,047a59316h
- DD 093102016h,06068147fh,094d12576h,012c5f654h,0c9bc6b91h,0efb071a7h,06e23ea95h,07c2da0c5h,0d4a1dd5dh,0f4fd45b6h,09122b13ch,03e7ad9b6h,0e6f57a48h,0342ca118h,006f8288fh,01c2e94a7h
- DD 05a97d231h,099e68f07h,04d838758h,07c80de97h,005872727h,0bce0f5d0h,019c4d016h,0be5d95c2h,09c2492eeh,0921d5cb1h,0404d6fb3h,042192dc1h,032f988d3h,04c84dcd1h,0a17b8e85h,0de26d61fh
- DD 0137c7408h,0c466dcb6h,036a266dah,09a38d7b6h,083bebf1bh,07ef5cb06h,00fd014e3h,0e5cdcbbfh,0f65965a0h,030aa376dh,0ebb3e95eh,060fe88c2h,066ee6f20h,033fd0b61h,03f41f0a0h,08827dcdbh
- DD 00c56c690h,0bf8a9d24h,0ddb7641dh,040265dadh,03a6b662bh,0522b05bfh,0b1478c9bh,0466d1dfeh,01484469bh,0aa616962h,002df8f9fh,00db60549h,03cb8bf51h,0c37bca02h,021371ce8h,05effe346h
- DD 0ff112c32h,0e8f65264h,07b971fb2h,08a9c736dh,07b75080dh,0a4f19470h,08839c59bh,0fc3f2c5ah,05aeb49c2h,01d6c777eh,0da1addfeh,0f3db034dh,05535affch,0d76fee5ah,0b92251fdh,00853ac70h
- DD 08b2a29d5h,037e3d594h,04de00ddbh,028f1f457h,0f42c328bh,08083c1b5h,0e493c73bh,0d8ef1d8fh,041dc61bdh,096fb6260h,027ee2f8ah,0f74e8a9dh,02c946a5dh,07c605a80h,03839ccfdh,0eed48d65h
- DD 03a29467ah,09894344fh,0c51eba6dh,0de81e949h,0a5e5c2f2h,0daea066bh,008c8c7b3h,03fc8a614h,006d0de9fh,07adff88fh,03b75ce0ah,0bbc11cf5h,0fbbc87d5h,09fbb7acch,07badfde2h,0a1458e26h
- DD 0e039c256h,01cb43668h,07c17fd5dh,05f26fb8bh,079aa062bh,0eee426afh,0d78fbf04h,0072002d0h,0e84fb7e3h,04c9ca237h,00c82133dh,0b401d8a1h,06d7e4181h,0aaa52592h,073dbb152h,0e9430833h
- DD 0be24319ah,0f92dda31h,0e095a8e7h,003f7d28bh,098782185h,0a52fe840h,029c24dbch,0276ddafeh,01d7a64ebh,080cd5496h,07f1dbe42h,0e4360889h,08438d2d5h,02f81a877h,085169036h,07e4d52a8h
- DD 01d59715dh,019e3d5b1h,0d788983eh,0c7eaa762h,0abf1f248h,0e5a730b0h,0fae3fd83h,0fbab8084h,053765b2fh,065e50d21h,0fa127f3dh,0bdd4e083h,0397b1b10h,09cf3c074h,0b1b59fd3h,059f8090ch
- DD 0615faa8fh,07b15fd9dh,0968554edh,08fa1eb40h,07aa44882h,07bb4447eh,0029fff32h,02bb2d0d1h,06caa6d2fh,0075e2a64h,022e7351bh,08eb879deh,09a506c62h,0bcd5624eh,0a87e24dch,0218eaef0h
- DD 044ddfa35h,037e56847h,0dab3f747h,09ccfc5c5h,01ee96cf4h,09ac1df3fh,03b480b8fh,00c0571a1h,04b3a7b3ch,02fbeb3d5h,05dcdbb99h,035c03669h,0b2415b3ah,052a0f5dch,04413ed9ah,0d57759b4h
- DD 03d30a2c5h,01fe647d8h,0f78a81dch,00857f77eh,0131a4a9bh,011d5a334h,029d393f5h,0c0a94af9h,0daa6ec1ah,0bc3a5c0bh,088d2d7edh,0ba9fe493h,0bb614797h,0bb4335b4h,072f83533h,0991c4d68h
- DD 0d2f01cb3h,053258c28h,0d75db0b1h,093d6eaa3h,0e87d0db4h,0419a2b0dh,0d8fe8493h,0a1e48f03h,0c508b23ah,0f747faf6h,035d53549h,0f137571ah,0fcf9b838h,09f5e58e2h,0a7fd3cf5h,0c7186ceeh
- DD 0e978a1d3h,077b868ceh,07ab92d04h,0e3a68b33h,087a5b862h,051029794h,03a61d41dh,05f0606c3h,06f9326f1h,02814be27h,0c6fe3c2eh,02f521c14h,0acdf7351h,017464d7dh,0777f7e44h,010f5f9d3h
- DD 0269fb37dh,0ce8e616bh,07de62de5h,0aaf73804h,04fdd4153h,0aba11175h,03770b49bh,0515759bah,0aa423a61h,08b09ebf8h,0cd41fb92h,0592245a1h,09b4c8936h,01cba8ec1h,0af36710eh,0a87e91e3h
- DD 03d34a2e3h,01fd84ce4h,0b43b5d61h,0ee3759ceh,0619186c7h,0895bc78ch,0cbb9725ah,0f19c3809h,0de744b1fh,0c0be21aah,060f8056bh,0a7d222b0h,0b23efe11h,074be6157h,00cd68253h,06fab2b4fh
- DD 04bf1d725h,0ad33ea5fh,04f6c950fh,09c1d8ee2h,0a377af06h,0544ee78ah,094a113e1h,054f489bbh,0992fb7e8h,08f11d634h,0a2a44347h,00169a7aah,095020e00h,01d49d4afh,0e08e120bh,095945722h
- DD 0a4d32282h,0b6e33878h,048020ae7h,0e36e029dh,037a9b750h,0e05847fbh,0b29e3819h,0f876812ch,0d23a17f0h,084ad138eh,0f0b3950eh,06d7b4480h,02fd67ae0h,0dfa8aef4h,052333af6h,08d3eea24h
- DD 0b15d5acch,00d052075h,0bd815bc4h,0c6d9c79fh,0dfa36cf2h,08dcafd88h,038aa9070h,0908ccbe2h,0ba35afceh,0638722c4h,0fd6abf0bh,05a3da8b0h,0c9c335c1h,02dce252ch,065aa799bh,084e7f0deh
- DD 0b99a72cbh,02101a522h,087618016h,006de6e67h,0e6f3653eh,05ff8c7cdh,0c7a6754ah,00a821ab5h,07cb0b5a2h,07e3fa52bh,0c9048790h,0a7fb121ch,006ce053ah,01a725020h,004e929b0h,0b490a31fh
- DD 062dd61adh,0e17be47dh,06be01371h,0781a961ch,0dae3cbbah,01063bfd3h,07f73c9bah,035647406h,02736a129h,0f50e957bh,0ed13f256h,0a6313702h,03a19fcc5h,09436ee65h,0e7a4c8b6h,0cf2bdb29h
- DD 0c5f95cd8h,0b06b1244h,0f4ab95f4h,0da8c8af0h,0b9e5836dh,01bae59c2h,03acffffch,007d51e7eh,0c2ccbcdah,001e15e6ah,08528c3e0h,03bc1923fh,0a49fead4h,043324577h,02aa7a711h,061a1b884h
- DD 0700230efh,0f9a86e08h,0bd19adf8h,00af585a1h,0f55ad8f2h,07645f361h,046c3614ch,06e676223h,04e774d3fh,023cb257ch,0ac102d1bh,082a38513h,07b126aa5h,09bcddd88h,0eefd3ee4h,0e716998bh
- DD 0fb167583h,04239d571h,0d16c8f8ah,0dd011c78h,069a27519h,0271c2895h,0d2d64b6ah,09ce0a3b7h,0d5ec6738h,08c977289h,08840ef6bh,0a3b49f9ah,09a453419h,0808c14c9h,00cf0a2d5h,05c00295bh
- DD 01d4bcc76h,0524414fbh,0459a88f1h,0b07691d2h,0f70d110fh,077f43263h,0b7abf9f3h,064ada5e0h,05b544cf5h,0afd0f94eh,0fd2713feh,0b4a13a15h,0250c74f4h,0b99b7d6eh,020324e45h,0097f2f73h
- DD 0affa8208h,0994b37d8h,0dc29aafch,0c3c31b0bh,07a3a607fh,03da74651h,0fe6955d6h,0d8e1b8c1h,0c8418682h,0716e1815h,07dc91d97h,0541d487fh,0c6996982h,048a04669h,083a6502eh,0f39cab15h
- DD 0e68db055h,0025801a0h,0ba3338d5h,0f3569758h,0ee2afa84h,0b0c8c0aah,0fb6562d1h,04f6985d3h,0132ed17ah,0351f1f15h,0c04365feh,0510ed0b4h,0e5b1f066h,0a3f98138h,032df03dch,0bc9d95d6h
- DD 019abd09eh,0a83ccf6eh,04ff17edbh,00b4097c1h,0d64a06ceh,058a5c478h,0544a58fdh,02ddcc3fdh,09e8153b8h,0d449503dh,07774179bh,03324fd02h,0dbd9120ch,0af5d47c8h,034fa94dbh,0eb860162h
- DD 0972f07f4h,05817bdd1h,0d27bbcebh,0e5579e2eh,05f11e5a6h,086847a1fh,07c3cf048h,0b39ed255h,0a2f62e55h,0e1076417h,01bcf82a2h,06b9ab38fh,07aeb29f9h,04bb7c319h,017227a46h,0f6d17da3h
- DD 00f968c00h,0ab53ddbdh,0000c880bh,0a03da7ech,06a9ad24dh,07b239624h,001ec60d0h,0612c0401h,0109f5df1h,070d10493h,080af7550h,0fbda4030h,0c6b9a9b3h,030b93f95h,0007d9418h,00c74ec71h
- DD 06edb951fh,094175564h,07f22c282h,05f4a9d78h,0b38d1196h,0b7870895h,0a228ce7ch,0bc593df3h,06af3641ah,0c78c5bd4h,03d9b3dcch,07802200bh,08be33304h,00dc73f32h,061ffb79ah,0847ed87dh
- DD 06d671192h,0f85c974eh,0de16f60fh,01e14100ah,095c38797h,045cb0d5ah,09b022da4h,018923bbah,0bbe7e86eh,0ef2be899h,0216067bfh,04a1510eeh,084d5ce3eh,0d98c8154h,0f92a2b90h,01af777f0h
- DD 04ef65724h,09fbcb400h,03c0ca6feh,03e04a4c9h,055002994h,0fb3e2cb5h,05363ecabh,01f3a93c5h,03923555bh,01fe00efeh,01e1751eah,0744bedd9h,06ab69357h,03fb2db59h,0f5e6618bh,08dbd7365h
- DD 0df1ea40eh,099d53099h,057d61e64h,0b3f24a0bh,0596eb812h,0d088a198h,05762940bh,022c8361bh,0f9c0d95ch,066f01f97h,08e43cdaeh,088461172h,0b72b15c3h,011599a7fh,0420d95cch,0135a7536h
- DD 05f7ae2f6h,02dcdf0f7h,0d7fa6da2h,015fc6e1dh,0d1d441b6h,081ca829ah,004a106b6h,084c10cf8h,0a73fbbd0h,0a9b26c95h,04d8f6ee8h,07f24e0cbh,01e25a043h,048b45937h,0036f3dfeh,0f8a74fcah
- DD 0c9f84296h,01ed46585h,03bc278b0h,07fbaa8fbh,06c4fcbd0h,0a8e96cd4h,073b60a5fh,0940a1202h,055a4aec8h,034aae120h,0dbd742f0h,0550e9a74h,0228c68abh,0794456d7h,0a4e25ec6h,0492f8868h
- DD 0b2d8f398h,0682915adh,05b84c953h,0f13b51cch,05bb917d6h,0cda90ab8h,04ea3dee1h,04b615560h,00a52c1c8h,0578b4e85h,020b75fc4h,0eab1a695h,0aa0bb3c6h,060c14f3ch,0b8216094h,0220f448ah
- DD 0b0e63d34h,04fe7ee31h,0a9e54fabh,0f4600572h,0d5e7b5a4h,0c0493334h,006d54831h,08589fb92h,06583553ah,0aa70f5cch,0e25649e5h,00879094ah,010044652h,0cc904507h,002541c4fh,0ebb0696dh
- DD 0b9718710h,05a171fdeh,0f374a9f5h,038f1bed8h,0ba39bdc1h,0c8c582e1h,0908cc0ceh,0fc457b0ah,0883841e2h,09a187fd4h,038725381h,08ec25b39h,096f84395h,02553ed05h,06f6c6897h,0095c7661h
- DD 04bdc5610h,0917ac85ch,0179eb301h,0b2885fe4h,08b78bdcch,05fc65547h,0e59e4699h,04a9fc893h,03ce299afh,0bb7ff0cdh,0adf38b20h,0195be9b3h,0d38ddb8fh,06a929c87h,0b21a51b9h,055fcc99ch
- DD 0721a4593h,02b695b4ch,0768eaac2h,0ed1e9a15h,07489f914h,0fb63d71ch,078118910h,0f98ba31ch,09b128eb4h,080291373h,0d448af4ah,07801214eh,055418dd3h,0dbd2e22bh,0d3998242h,0effb3c0dh
- DD 0c7bf3827h,0dfa6077ch,047f8238fh,0f2165bcbh,08564d554h,0fe37cf68h,00a81fb98h,0e5f825c4h,0ffed4d6fh,043cc4f67h,0b50a34b0h,0bc609578h,05041faf1h,08aa8fcf9h,0651773b6h,05659f053h
- DD 06044d63bh,0e87582c3h,00cdb0ca0h,0a6089409h,0bfb2bcf6h,08c993e0fh,045985cfch,0fc64a719h,083dbedbah,015c4da80h,02be67df7h,0804ae112h,0a23defdeh,0da4c9658h,05156e0d3h,012002dddh
- DD 05dd21b96h,0e68eae89h,0cf44624dh,08b99f28bh,01ec8897ah,00ae00808h,06712f76eh,0dd0a9303h,04e233de4h,096237522h,02b36a8a5h,0192445b1h,0023993d9h,0abf9ff74h,02aad4a8fh,021f37bf4h
- DD 0f8bd2bbdh,0340a4349h,04868195dh,01d902cd9h,0e5fdb6f1h,03d27bbf1h,0124f9f1ch,07a5ab088h,0f7a09e03h,0c466ab06h,031f2c123h,02f8a1977h,0041b6657h,0da355dc7h,08ece2a7ch,0cb840d12h
- DD 07db32675h,0b600ad9fh,007a06f1bh,078fea133h,0b31f6094h,05d032269h,083ec37aah,007753ef5h,09c0bea78h,003485aedh,0bc3f4524h,041bb3989h,0697f726dh,009403761h,0df394820h,06109beb3h
- DD 03b6d1145h,0804111eah,0a8582654h,0b6271ea9h,024e66562h,0619615e6h,0d7b6ad9ch,0a2554945h,099bfe35fh,0d9c4985eh,07b51cdf6h,09770ccc0h,092881832h,07c327013h,0286b26d1h,08777d45fh
- DD 0d847999dh,09bbeda22h,0c3525d32h,003aa33b6h,028a959a1h,04b7b96d4h,031e5d234h,0bb3786e5h,06961f247h,0aeb5d3ceh,002f93d3fh,020aa85afh,0d7a7ae4fh,09cd1ad3dh,0781adaa8h,0bf6688f0h
- DD 07469ceadh,0b1b40e86h,0309fca48h,01904c524h,04b54bbc7h,09b7312afh,0593affa2h,0be24bf8fh,0bd98764bh,0be5e0790h,0a26e299eh,0a0f45f17h,06b8fe4c7h,04af0d2c2h,08ae8a3e6h,0ef170db1h
- DD 029e0ccc1h,00e8d61a0h,060ad36cah,0cd53e87eh,0c8173822h,0328c6623h,0a496be55h,07ee1767dh,0648945afh,089f13259h,025c8009ch,09e45a5fdh,01f61ab8ch,0af2febd9h,08a275385h,043f6bc86h
- DD 0f2142e79h,087792348h,0c6e6238ah,017d89259h,04a839d9bh,07536d2f6h,076a1fbdch,01f428fceh,00db06dfeh,01c109601h,050a3a3cch,0bfc16bc1h,09b30f41bh,0f9cbd9ech,000138cceh,05b5da0d6h
- DD 056ef96a7h,0ec1d0a48h,0982bf842h,0b47eb848h,0ec3f700dh,066deae32h,0aa1181e0h,04e43c42ch,0d1a4aa2ah,0a1d72a31h,0c004f3ceh,0440d4668h,045fe8a7ah,00d6a2d3bh,0fb128365h,0820e52e2h
- DD 025e51b09h,029ac5fcfh,02023d159h,0180cd2bfh,0a1ebf90eh,0a9892171h,07c132181h,0f97c4c87h,0c03dbb7eh,09f1dc724h,0018cbbe4h,0ae043765h,00767d153h,0fb0b2a36h,0249cbaebh,0a8e2f4d6h
- DD 0d95ea168h,0172a5247h,02970764ah,01758fadah,01d978169h,0ac803a51h,0de77e01bh,0299cfe2eh,0b0a98927h,0652a1e17h,020014495h,02e26e1d1h,07175b56ah,07ae0af9fh,0d64b9f95h,0c2e22a80h
- DD 0d90a060ah,04d0ff9fbh,0baf38085h,0496a27dbh,0da776bcfh,032305401h,0725f209eh,0b8cdcef6h,0436a0bbah,061ba0f37h,076860049h,0263fa108h,0da3542cfh,092beb98eh,0d5849538h,0a2d4d14ah
- DD 012e9a1bch,0989b9d68h,05f6e3268h,061d9075ch,099ace638h,0352c6aa9h,0920f43ffh,0de4e4a55h,0d673c017h,0e5e4144ah,06f6e05eah,0667417aeh,0dcd1bd56h,0613416aeh,086693711h,05eb36201h
- DD 03a1aa914h,02d7bc504h,076dc5975h,0175a1299h,03fc8125ch,0e900e0f2h,011198875h,0569ef68ch,063a113b4h,09012db63h,098835766h,0e3bd3f56h,076412deah,0a5c94a52h,0aa735e5ch,0ad9e2a09h
- DD 0508b65e9h,0405a984ch,06df1a0d1h,0bde4a1d1h,0dfba80dah,01a9433a1h,09440ad2eh,0e9192ff9h,05099fe92h,09f649696h,00b27a54ah,025ddb65ch,0c590da61h,0178279ddh,0fbde681ah,05479a999h
- DD 0013fe162h,0d0e84e05h,0632d471bh,0be11dc92h,0fc0e089fh,0df0b0c45h,04c144025h,004fb15b0h,013c99927h,0a61d5fc2h,03de2eb35h,0a033e9e0h,0b8dacbb4h,0f8185d5ch,08644549dh,09a88e265h
- DD 054671ff6h,0f717af62h,05fa58603h,04bd4241bh,0e67773c0h,006fba40bh,06a2847e9h,0c1d933d2h,0689e2c70h,0f4f5acf3h,046bafd31h,092aab0e7h,03473f6e5h,0798d76aah,093141934h,0cc6641dbh
- DD 0d31e535eh,0cae27757h,087c2ee11h,004cc43b6h,02e029ffah,08d1f9675h,0e4cc7a2ch,0c2150672h,08d68b013h,03b03c1e0h,0edf298f3h,0a9d6816fh,0a2804464h,01bfbb529h,05db22125h,095a52faeh
- DD 00e1cb64eh,055b32160h,07e7fc9feh,0004828f6h,01bb0fb93h,013394b82h,035f1a920h,0b6293a2dh,0d145d2d9h,0de35ef21h,0bb8fa603h,0be6225b3h,032cf252dh,000fc8f6bh,0117cf8c2h,0a28e52e6h
- DD 04c371e6dh,09d1dc89bh,036ef0f28h,0cebe0675h,0a4292f81h,05de05d09h,0353e3083h,0a8303593h,07e37a9bbh,0a1715b0ah,02b8faec3h,08c56f61eh,033c9b102h,052507431h,0a44431f0h,00130cefch
- DD 0bd865cfbh,056039fa0h,0bc5f1dd7h,04b03e578h,0babe7224h,040edf2e4h,03a1988f6h,0c752496dh,0564beb6bh,0d1572d3bh,039a1c608h,00db1d110h,016f60126h,0568d1934h,0f354af33h,005ae9668h
- DD 0c92544f2h,019de6d37h,0a35837d5h,0cc084353h,01a514eceh,0cbb6869ch,02e1d1066h,0b633e728h,0936c581ch,0f15dd69fh,07439c4f9h,096e7b8ceh,02e448a5bh,05e676f48h,0fd916bbbh,0b2ca7d5bh
- DD 0f5024025h,0d55a2541h,0e4c2d937h,047bc5769h,00362189fh,07d31b92ah,0ef7816f9h,083f3086eh,0b587579ah,0f9f46d94h,030e76c5fh,0ec2d22d8h,0b000ffcfh,027d57461h,0364ffc2ch,0bb7e65f9h
- DD 06652a220h,07c7c9477h,0d696c981h,061618f89h,089effff3h,05021701dh,07c314163h,0f2c8ff8eh,08efb4d3eh,02da413adh,0ce176d95h,0937b5adfh,02a67d51ch,022867d34h,018eb3ac9h,0262b9b10h
- DD 0c43ff28bh,04e314fe4h,06a664e7ah,076476627h,0b7a565c2h,03e90e40bh,0c1acf831h,08588993ah,08f938829h,0d7b501d6h,03edd7d4ch,0996627eeh,090cd34c7h,037d44a62h,0f3833e8dh,0a8327499h
- DD 04bf50353h,02e18917dh,0556765fbh,085dd726bh,093d5ab66h,054fe65d6h,0915c25feh,03ddbacedh,012f22e85h,0a799d9a4h,06d06f6bch,0e2a24867h,043ca1637h,0f4f1ee56h,061ece30ah,0fda2828bh
- DD 0a2dee7a6h,0758c1a3eh,0734b2284h,0dcde2f3ch,04eaba6adh,0aba445d2h,076cee0a7h,035aaf668h,0e5aa049ah,07e0b04a9h,091103e84h,0e74083adh,040afecc3h,0beb183ceh,0ea043f7ah,06b89de9fh
- DD 0fe67ba66h,00e299d23h,093cf2f34h,091450760h,097fcf913h,0f45b5ea9h,08bd7dddah,05be00843h,0d53ff04dh,0358c3e05h,05de91ef7h,0bf7ccdc3h,0b69ec1a0h,0ad684dbfh,0801fd997h,0367e7cf2h
- DD 0b0dc8595h,00ca1f3b7h,09f1d9f2eh,027de4608h,0badd82a7h,01af3bf39h,065862448h,079356a79h,0f5f9a052h,0c0602345h,0139a42f9h,01a8b0f89h,0844d40fch,0b53eee42h,04e5b6368h,093b0bfe5h
- DD 0c024789ch,05434dd02h,041b57bfch,090dca9eah,0243398dfh,08aa898e2h,0894a94bbh,0f607c834h,0c2c99b76h,0bb07be97h,018c29302h,06576ba67h,0e703a88ch,03d79efcch,0b6a0d106h,0f259ced7h
- DD 0c8de610bh,00f893a5dh,067e223ceh,0e8c515fbh,04ead6dc5h,07774bfa6h,0925c728fh,089d20f95h,0098583ceh,07a1e0966h,093f2a7d7h,0a2eedb94h,04c304d4ah,01b282097h,0c077282dh,00842e3dah
- DD 03b9e2d7bh,0e4d972a3h,0c48218ffh,07cc60b27h,084149d91h,08fc70838h,02f461ecch,05c04346fh,0614650a9h,0ebe9fdf2h,0c1f666ach,05e35b537h,088babc83h,0645613d1h,0c5e1c93eh,088cace3ah
- DD 03de92e23h,0209ca375h,05fbbb6e3h,0ccb03cc8h,0d7b1487eh,0ccb90f03h,0c710941fh,0fa9c2a38h,06724ceedh,0756c3823h,0192d0323h,03a902258h,0ea5e038eh,0b150e519h,0c7427591h,0dcba2865h
- DD 078890732h,0e549237fh,053fcb4d9h,0c443bef9h,0eb3480d6h,09884d8a6h,03048b186h,08a35b6a1h,065e9a90ah,0b4e44716h,0653006c0h,045bf380dh,04fe9ae3bh,08f3f820dh,0979a3b71h,0244a35a0h
- DD 074cd06ffh,0a1010e9dh,0aca3eeach,09c17c7dfh,08063aa2bh,074c86cd3h,0734614ffh,08595c4b3h,0990f62cch,0a3de00cah,0ca0c3be5h,0d9bed213h,0df8ce9f5h,07886078ah,05cd44444h,0ddb27ce3h
- DD 058926dddh,0ed374a66h,0908015b8h,0138b2d49h,0de1f7ab8h,0886c6579h,0c3020b7ah,0888b9aa0h,03a96e355h,0d3ec034eh,0f30fbe9ah,0ba65b0b8h,0ff21367ah,0064c8e50h,00b04b46eh,01f508ea4h
- DD 0747c866ch,098561a49h,00518a062h,0bbb1e5feh,0ecdc3608h,020ff4e8bh,020184027h,07f55cdedh,0f38c85f0h,08d73ec95h,08bc3b8c3h,05b589fdfh,00f12b66fh,0be95dd98h,00e338e01h,0f5bd1a09h
- DD 05e915918h,065163ae5h,086f8a46bh,06158d6d9h,0eeebf99ch,08466b538h,0bca477efh,0ca8761f6h,09ebbc601h,0af3449c2h,0e0c3ae2fh,0ef3b0f41h,05de63752h,0aa6c577dh,064682a51h,0e9166601h
- DD 0fc15aa1eh,05a3097beh,0b54b0745h,040d12548h,0519a5f12h,05bad4706h,0a439dee6h,0ed03f717h,04a02c499h,00794bb6ch,0cffe71d2h,0f725083dh,00f3adcafh,02cad7519h,043729310h,07f68ea1ch
- DD 0b7ffd977h,0e747c8c7h,080761a22h,0ec104c35h,05a3ffb83h,08395ebafh,0e4b63db7h,0fb3261f4h,0d883e544h,053544960h,08cc2eeb8h,013520d70h,0d3d65f99h,008f6337bh,0781cf95bh,083997db2h
- DD 00dbd2c01h,0ce6ff106h,01f9ce934h,04f8eea6bh,00e993921h,0546f7c4bh,05e753fc7h,06236a324h,0a16022e9h,065a41f84h,043d1dbb2h,00c18d878h,02d4cef9ch,073c55640h,070444c74h,0a0428108h
- DD 09afdfb3ch,068e4f15eh,05bdfb6dfh,049a56143h,05f823d97h,0a9bc1bd4h,0ea111c2ah,0bceb5970h,0b269bbc4h,0366b455fh,0e9bc5d62h,07cd85e1eh,04f18b086h,0c743c41ch,095294fb9h,0a4b40990h
- DD 026ee8382h,09c7c581dh,0359d638eh,0cf17dcc5h,0b728ae3dh,0ee8273abh,0f821f047h,01d112926h,050491a74h,011498477h,0fde0dfb9h,0687fa761h,07ea435abh,02c258022h,091ce7e3fh,06b8bdb94h
- DD 03bf834aah,04c5b5dc9h,04f6c7e4bh,004371819h,03736bcadh,0c284e00ah,021ae8f8dh,00d881118h,0f48c8e33h,0f9cf0f82h,0a1bf40dbh,0a11fd075h,0dc2733e5h,0dceab0deh,08e986bd7h,0c560a8b5h
- DD 03929d097h,048dd1fe2h,092f188f1h,03885b290h,0da6fcdach,00f2ae613h,0b662a46ch,09054303eh,00738042ah,0b6871e44h,0bdaf6449h,098e6a977h,0d1c9df1bh,0d8bc0650h,036e098f9h,0ef3d6451h
- DD 0b6d72d28h,003fbae82h,0f5d84080h,077ca9db1h,0a58efc1ch,08a112cffh,0c564cb4ah,0518d761ch,0f0d1b5ceh,069b5740eh,0e9eb1785h,0717039cch,022f53382h,03fe29f90h,06bc7c95ch,08e54ba56h
- DD 0f7f91d0fh,09c806d8ah,0a82a5728h,03b61b0f1h,094d76754h,04640032dh,047d834c6h,0273eb5deh,07b4e4d53h,02988abf7h,0de401777h,0b7ce66bfh,0715071b3h,09fba6b32h,0ad3a1a98h,082413c24h
- DD 0e0e8ad93h,05b7fc8c4h,05fab868dh,0b5679aeeh,02b3946f3h,0b1f9d2fah,05685b50ah,0458897dch,089d0caf3h,01e98c930h,078642e92h,039564c5fh,00dbdaf18h,01b77729ah,0579e82e6h,0f9170722h
- DD 0e4515fa5h,0680c0317h,0fb0c790fh,0f85cff84h,06d2e0765h,0c7a82aabh,035c82b32h,07446bca9h,06d63184fh,05de607aah,0262803a6h,07c1a46a8h,0aebe8035h,0d218313dh,0c73c51f8h,092113ffdh
- DD 012e7e46ch,04b38e083h,056126bd5h,069d0a37ah,073c07e04h,0fb3f324bh,08fda7267h,0a0c22f67h,04d2c7d8fh,08f2c0051h,0cbe2cae5h,0bc45ced3h,0a8f0f277h,0e1c6cf07h,01eb99a98h,0bc392312h
- DD 03cc8ac85h,075537b7eh,0dd02753bh,08d725f57h,0b737df2fh,0fd05ff64h,0f6d2531dh,055fe8712h,06ab6b01ch,057ce04a9h,07cd93724h,069a02a89h,0cf86699bh,04f82ac35h,09cb4b232h,08242d3adh
- DD 0d62105e5h,0713d0f65h,02d29be61h,0bb222bfah,06cfbef09h,0f2f9a79eh,0d5d6782fh,0fc24d8d3h,0d4129967h,05db77085h,0dc3c2a43h,0db81c3cch,005d8d9a3h,09d655fc0h,054298026h,03f5d057ah
- DD 088c54694h,01157f56dh,09b09573eh,0b26baba5h,022adffd1h,02cab03b0h,0dd69f383h,060a412c8h,054b25039h,0ed76e98bh,0687e714dh,0d4ee67d3h,07b00b594h,087739648h,0c9ef709bh,0ce419775h
- DD 01c203a40h,040f76f85h,0eafd8f91h,030d352d6h,095578dd2h,0af196d3dh,077cc3f3dh,0ea4bb3d7h,0b98e782bh,042a5bd03h,00624920dh,0ac958c40h,0fc56fcc8h,0b838134ch,089572e5eh,086ec4ccfh
- DD 09be47be0h,069c43526h,0cb28fea1h,0323b7dd8h,03a6c67e5h,0fa5538bah,01d378e46h,0ef921d70h,03c4b880eh,0f92961fch,098940a67h,03f6f914eh,0fef0ff39h,0a990eb0ah,0f0eeff9ch,0a6c2920fh
- DD 051b8d9a3h,0ca804166h,00ffb0db1h,042531bc9h,0aa82e7ceh,072ce4718h,0df574741h,06e199913h,0d5d36946h,0d5f1b13dh,0f68f0194h,08255dc65h,08710d230h,0dc9df4cdh,0138c1988h,03453c20fh
- DD 089a6ef01h,09af98dc0h,09857df85h,04dbcc3f0h,05c1ad924h,034805601h,0d0493046h,040448da5h,04ee343e2h,0f629926dh,090e8a301h,06343f1bdh,040815b3fh,0efc93491h,0de8f66fbh,0f882a423h
- DD 0e7db9f57h,03a12d5f4h,03c384c27h,07dfba38ah,06fc660b1h,07a904bfdh,02773b21ch,0eb6c5db3h,01cdfe049h,0c350ee66h,044540f29h,09baac0ceh,0a5ec6aadh,0bc57b6abh,00a7c1baah,0167ce8c3h
- DD 053fb2b56h,0b23a03a5h,04e057f78h,06ce141e7h,089e490d9h,0796525c3h,0a31a7e75h,00bc95725h,01220fd06h,01ec56791h,0408b0bd6h,0716e3a3ch,0e8ebeba9h,031cd6bf7h,0bee6b670h,0a7326ca6h
- DD 0cd090c43h,03d9f851ch,0f12c3988h,0561e8f13h,0904b7be4h,050490b6ah,00410737bh,061690ce1h,00f009052h,0299e9a37h,0f026092eh,0258758f0h,0fdfcdc0fh,09fa255f3h,0c0e1bcd2h,0dbc9fb1fh
- DD 024651840h,035f9dd6eh,0a5c59abch,0dca45a84h,0ecca4938h,0103d396fh,0b97b3f29h,04532da0ah,01999a6bfh,0c4135ea5h,05e6bf2eeh,03aa9505ah,03f5be093h,0f77cef06h,0a943152eh,097d1a0f8h
- DD 02e1c21ddh,02cb0ebbah,02c6797c4h,0f41b29fch,0b300101fh,0c6e17321h,0d0d79a89h,04422b0e9h,092f1bfc4h,049e4901ch,0e1e10ed9h,006ab1f8fh,0db2926b8h,084d35577h,0356e8ec2h,0ca349d39h
- DD 0343bf1a9h,070b63d32h,037d1a6b1h,08fd3bd28h,0316865b4h,00454879ch,0c458efa2h,0ee959ff6h,09706dc3fh,00461dcf8h,0164e4b2eh,0737db0e2h,02f8843c8h,009262680h,07745e6f6h,054498bbch
- DD 0a29e24afh,0359473fah,070aa87a1h,0fcc3c454h,000573aceh,0fd2c4bf5h,028dd1965h,0b65b514eh,02193e393h,0e46ae7cfh,0f5444d97h,060e9a4e1h,000ff38edh,0e7594e96h,00a0e0f02h,043d84d2fh
- DD 0ee398a21h,08b6db141h,0e3bcc5beh,0b88a56aeh,0373460eah,00a1aa52fh,0160bb19bh,020da1a56h,065bf0384h,0fb54999dh,05d5a180eh,071a14d24h,021737b04h,0bc44db7bh,001dd8e92h,0d84fcb18h
- DD 0fa44b479h,080de937bh,05c98fd4fh,053505499h,028f08727h,01edb12abh,0a5f3ef53h,04c58b582h,08327f246h,0bfb236d8h,04d7df320h,0c3a3bfaah,0b96024f2h,0ecd96c59h,07f4e0433h,0fc293a53h
- DD 05acf6e10h,05341352bh,0afe652c3h,0c50343fdh,018577a7fh,04af3792dh,0af16823dh,0e1a4c617h,033425d0ah,09b26d0cdh,09b7bc47fh,0306399edh,0706bb20bh,02a792f33h,098111055h,031219614h
- DD 087f5d28bh,0864ec064h,0962277fdh,011392d91h,0bb6aed5fh,0b5aa7942h,047e799d9h,0080094dch,0208ba19bh,04afa588ch,08512f284h,0d3e7570fh,002f5799ah,0cbae64e6h,0514b9492h,0deebe7efh
- DD 0e5c298ffh,030300f98h,03678361fh,017f561beh,098cb9a16h,0f52ff312h,05562d490h,06233c3bch,092e3a2cbh,07bfa15a1h,0e6365119h,0961bcfd1h,02c8c53b1h,03bdd29bfh,0822844bah,0739704dfh
- DD 07e7b754bh,07dacfb58h,0a806c9b9h,023360791h,023504452h,0e7eb88c9h,0852c1783h,02983e996h,0958d881dh,0dd4ae529h,0262c7b3ch,0026bae03h,0960b52d1h,03a6f9193h,092696cfbh,0d0980f90h
- DD 0d5f30851h,04c1f428ch,02a4f6630h,094dfed27h,0fc5d48a4h,04df53772h,0933260ceh,0dd2d5a2fh,0d44cc7a5h,0574115bdh,0bd12533ah,04ba6b20dh,0243057c9h,030e93cb8h,014de320eh,0794c486ah
- DD 0f21496e4h,0e925d4ceh,0ec696331h,0f951d198h,03e8d812fh,09810e2deh,0389294abh,0d0a47259h,00e3bab66h,0513ba2b5h,0abad306fh,0462caff5h,0af04c49eh,0e2dc6d59h,0e0b84b0bh,01aeb8750h
- DD 02f7d0ca2h,0c034f12fh,0e06acf2fh,06d2e8128h,021facc2fh,0801f4f83h,0f40ef607h,0a1170c03h,07805a99ch,0fe0a1d4fh,0cc26aba5h,0bde56a36h,035531f40h,05b1629d0h,09afa6108h,0ac212c2bh
- DD 015697be5h,030a06bf3h,02c63c7c1h,06f0545dch,07ccdadafh,05d8cb842h,0ac7015bbh,0d52e379bh,0f462c23eh,0c4f56147h,046bc24b0h,0d44a4298h,0e2856d4fh,0bc73d23ah,00832bcdfh,061cedd8ch
- DD 099f241d7h,060953556h,0001a349dh,0ee4adbd7h,0aa89e491h,00b35bf6ah,0136f7546h,07f0076f4h,09264da3dh,0d19a18bah,062a7a28bh,06eb2d2cdh,08761c971h,0cdba941fh,0a3be4a5dh,01550518bh
- DD 057d0b70ch,0d0e8e2f0h,0cd133ba3h,0eea8612eh,044416aech,0814670f0h,030775061h,0424db6c3h,016213fd1h,0d96039d1h,018a3478fh,0c61e7fa5h,0cb0c5021h,0a805bdcch,00cc616ddh,0bdd6f3a8h
- DD 05d97f7e2h,006009667h,0af0bf4b6h,031db0fc1h,05491627ah,023680ed4h,07d741fb1h,0b99a3c66h,036b1ff92h,0e9bb5f55h,0512b388dh,029738577h,050fcf263h,0db8a2ce7h,06c4f7b47h,0385346d4h
- DD 031631f9eh,0be86c5efh,003a57a29h,0bf91da21h,07b23f821h,0c3b1f796h,0770db354h,00f7d00d2h,0d8fe79dah,08ffc6c3bh,0d525c996h,0cc5e8c40h,0cfff632ah,04640991dh,067112528h,064d97e8ch
- DD 002f1cd1eh,0c232d973h,01dd212a4h,0ce87eacbh,0e69802f7h,06e4c8c73h,01fffddbdh,012ef0290h,01bcea6e2h,0941ec74eh,03cb92cbbh,0d0b54024h,07e8f9d05h,0809fb9d4h,0f2992aaeh,03bf16159h
- DD 0f8a7a838h,0ad40f279h,005615660h,011aea631h,0a01f6fa1h,0bf52e6f1h,03dc2aec9h,0ef046995h,0d8080711h,0785dbec9h,09fdedf76h,0e1aec60ah,0fa21c126h,0ece797b5h,005e52732h,0c66e898fh
- DD 008811fdbh,039bb69c4h,02fc7f082h,08bfe1ef8h,0174f4138h,0c8e7a393h,0d58d1f98h,0fba8ad1dh,0bfd2fd5bh,0bc21d0ceh,06ee60d61h,00b839a82h,0afd22253h,0aacf7658h,0aae396b3h,0b526bed8h
- DD 038564464h,0ccc1bbc2h,08c45bc73h,09e3ff947h,058188a78h,0cde9bca3h,0d73bf8f7h,0138b8ee0h,04123c489h,05c7e234ch,0fa643297h,066e69368h,039a15fa3h,00629eeeeh,0a9e2a927h,095fab881h
- DD 0eafbb1e1h,0b2497007h,0e75b7a93h,0d75c9ce6h,0efb68d78h,03558352dh,0223f6396h,0a2f26699h,0e469b17ah,0eb911ecfh,0e72d3ec2h,062545779h,082cb113fh,08ea47de7h,04e1fa98dh,0ebe4b086h
- DD 08cdfedb1h,0ec2d5ed7h,0fe211a74h,0a535c077h,011d244c5h,09678109bh,0be299a76h,0f17c8bfbh,0fb11fbc4h,0b651412eh,094ab3f65h,0ea0b5482h,00cf78243h,0d8dffd95h,0ce0361d4h,02e719e57h
- DD 0304ddc5bh,09007f085h,04daba2eah,0095e8c6dh,03f9d28a9h,05a33cdb4h,0e2283003h,085b95cd8h,0b9744733h,0bcd6c819h,0fc7f5783h,029c5f538h,0d59038e4h,06c49b2fah,03bbe1018h,068349cc1h
- DD 021830ee5h,0cc490c1dh,0e9bfa297h,036f9c4eeh,048de1a94h,058fd7294h,04e8f2cdch,0aadb13a8h,081313dbah,0515eaaa0h,0c2152dd8h,0c76bb468h,0a653dbf8h,0357f8d75h,0b14ac143h,0e4d8c4d1h
- DD 0b055cb40h,0bdb8e675h,0977b5167h,0898f8e7bh,0b82fb863h,0ecc65651h,06d88f01fh,056544814h,0263a75a9h,0b0928e95h,01a22fcdah,0cfb6836fh,03f3bd37ch,0651d14dbh,0b6ad4664h,01d3837fbh
- DD 0ff4f94abh,07c5fb538h,06d7fb8f2h,07243c712h,0a85c5287h,0ef13d60ch,04bb8dd1bh,018cfb7c7h,072908219h,082f9bfe6h,09d5144abh,035c4592bh,09cf4b42fh,052734f37h,08c60ddc4h,06bac55e7h
- DD 094dea0f6h,0b5cd811eh,0e18cc1a3h,0259ecae4h,015e660f8h,06a0e836eh,00e02bff2h,06c639ea6h,07e1026fdh,08721b8cbh,063261942h,09e73b50bh,077f01da3h,0b8c70974h,08268f57fh,01839e6a6h
- DD 05150b805h,0571b9415h,0f92c7097h,01892389eh,04a084b95h,08d69c18eh,0be5b495ch,07014c512h,01b07523ch,04780db36h,02c1c64fah,02f6219ceh,0602c105ah,0c38b81b0h,05dc8e360h,0ab4f4f20h
- DD 0cf7d62d2h,020d3c982h,023ba8150h,01f36e29dh,092763f9eh,048ae0bf0h,01d3a7007h,07a527e6bh,0581a85e3h,0b4a89097h,0dc158be5h,01f1a520fh,0167d726eh,0f98db37dh,01113e862h,08802786eh
- DD 036f09ab0h,0efb2149eh,04a10bb5bh,003f163cah,006e20998h,0d0297045h,01b5a3babh,056f0af00h,070880e0dh,07af4cfech,0be3d913fh,07332a66fh,07eceb4bdh,032e6c84ah,09c228f55h,0edc4a79ah
- DD 0c55c4496h,0c37c7dd0h,025bbabd2h,0a6a96357h,0add7f363h,05b7e63f2h,02e73f1dfh,09dce3782h,0b2b91f71h,0e1e5a16ah,05ba0163ch,0e4489823h,0f6e515adh,0f2759c32h,08615eecfh,0a5e2f1f8h
- DD 0abded551h,074519be7h,0c8b74410h,003d358b8h,00e10d9a9h,04d00b10bh,028da52b7h,06392b0b1h,00b75c904h,06744a298h,0a8f7f96ch,0c305b0aeh,0182cf932h,0042e421dh,09e4636cah,0f6fc5d50h
- DD 0d64cc78ch,0795847c9h,09b6cb27bh,06c50621bh,0df8022abh,007099bf8h,0c04eda1dh,048f862ebh,0e1603c16h,0d12732edh,05c9a9450h,019a80e0fh,0b429b4fch,0e2257f54h,045460515h,066d3b2c6h
- DD 0822e37beh,06ca4f87eh,0253bda4eh,073f237b4h,041190aebh,0f747f3a2h,0804cf284h,0f06fa36fh,0fc621c12h,00a6bbb6eh,040b80ec6h,05d624b64h,07ba556f3h,04b072425h,03e2d20a8h,07fa0c354h
- DD 0e3229d41h,0e921fa31h,094531bd4h,0a929c652h,0a6d38209h,084156027h,06bdb97bdh,0f3d69f73h,016833631h,08906d19ah,003d51be3h,068a34c2eh,00e511cd8h,0cb59583bh,0fdc132a8h,099ce6bfdh
- DD 0ffcdb463h,03facdaaah,034a38b08h,0658bbc1ah,0f1a9078dh,012a801f8h,06ab855deh,01567bcf9h,03572359bh,0e08498e0h,08659e68bh,0cf0353e5h,07d23807ch,0bb86e9c8h,02198e8a2h,0bc08728dh
- DD 0453cadd6h,08de2b7bch,0bc0bc1f8h,0203900a7h,0a6abd3afh,0bcd86e47h,08502effbh,0911cac12h,0ec965469h,02d550242h,029e0017eh,00e9f7692h,065979885h,0633f078fh,04cf751efh,0fb87d449h
- DD 0fc25419ah,0e1790e4bh,04bff3cfdh,036467203h,025b6e83fh,0c8db6386h,06cad6fd2h,06cc69f23h,06bc68bb9h,00219e45ah,0297f7334h,0e43d79b6h,0465dc97ch,07d445368h,02a0b949ah,04b9eea32h
- DD 06102d021h,01b96c6bah,02f4461eah,0eaafac78h,0c49f19a8h,0d4b85c41h,0cf538875h,0275c28e4h,0dd2e54e0h,035451a9dh,00605618bh,06991adb5h,07b36cd24h,05b8b4bcdh,056f37216h,0372a4f8ch
- DD 0a6a5da60h,0c890bd73h,0dc4c9ff0h,06f083da0h,0f0536e57h,0f4e14d94h,0aaec8243h,0f9ee1edah,08bdcf8e7h,0571241ech,00b041e26h,0a5db8271h,0e3fff040h,09a0b9a99h,07c271202h,0caaf21ddh
- DD 04f0dd2e8h,0b4e2b2e1h,00a377ac7h,0e77e7c4fh,00d7a2198h,069202c3fh,028200eb8h,0f759b7ffh,0dcfe314eh,0c87526edh,053d5cf99h,0eb84c524h,0515138b6h,0b1b52aceh,023fca3f4h,05aa7ff8ch
- DD 0b9791a26h,0ff0b13c3h,0cdd58b16h,0960022dah,057aad2deh,0dbd55c92h,0f30fe619h,03baaaaa3h,00d881efdh,09a4b2346h,046325e2ah,0506416c0h,0035c18d4h,091381e76h,0f27817b0h,0b3bb68beh
- DD 05116f937h,015bfb8bfh,0c1268943h,07c64a586h,08419a2c8h,071e25cc3h,08335f463h,09fd6b0c4h,0e8ee0e0eh,04bf0ba3ch,0298c21fah,06f6fba60h,0ae66bee0h,057d57b39h,022672544h,0292d5130h
- DD 0bab093b3h,0f451105dh,002839986h,0012f59b9h,03474a89ch,08a915802h,02de03e97h,0048c919ch,091071cd5h,0c476a2b5h,0034970a5h,0791ed89ah,0e1b7994bh,089bd9042h,0a1057ffdh,08eaf5179h
- DD 0d551ee10h,06066e2a2h,0727e09a6h,087a8f1d8h,02c01148dh,000d08babh,0424f33feh,06da8e4f1h,0cf9a4e71h,0466d17f0h,03bf5cb19h,0ff502010h,0d062ecc0h,0dccf97d8h,081d80ac4h,080c0d9afh
- DD 0033f2876h,0e87771d8h,07d5cc3dbh,0b0186ec6h,03bc9bc1dh,058e8bb80h,06f6ef60eh,04d1395cch,0186244a0h,0a73c62d6h,0110a5b53h,0918e5f23h,0741b7eabh,0ed4878cah,0dbe03e51h,03038d71ah
- DD 0a93c3246h,0840204b7h,0a0b9b4cdh,021ab6069h,0b1d64218h,0f5fa6e2bh,0f3d56191h,01de6ad0eh,0ff1929c7h,0570aaa88h,0640e87b5h,0c6df4c6bh,0c65f0ccch,0de8a74f2h,0e6f6cc01h,08b972fd5h
- DD 00b846531h,03fff36b6h,010a5e475h,0ba7e45e6h,04145b6c5h,084a1d10eh,05e046d9dh,0f1f7f91ah,044de90d7h,00317a692h,0f199c15eh,0951a1d4ah,0c9d73debh,091f78046h,0fab8224fh,074c82828h
- DD 0e7560b90h,0aa6778fch,0a7e824ceh,0b4073e61h,0d642eba8h,0ff0d693ch,05dccef38h,07ce2e57ah,01df1ad46h,089c2c789h,0098346fdh,083a06922h,0da2fc177h,02d715d72h,085b6cf1dh,07b6dd71dh
- DD 073fa9cb0h,0c60a6d0ah,0328bf5a9h,0edd3992eh,0832c8c82h,0c380ddd0h,0a2a0bf50h,0d182d410h,0d9a528dbh,07d9d7438h,0caf53994h,0e8b1a0e9h,00e19987ch,0ddd6e5feh,0190b059dh,0acb8df03h
- DD 08300129fh,053703a32h,068c43bfdh,01f637662h,000e54051h,0bcbd1913h,07bf5a8c5h,0812fcc62h,029fb85dah,03f969d5fh,0694759e8h,072f4e00ah,0790726b7h,0426b6e52h,03bdbb209h,0617bbc87h
- DD 097aee317h,0511f8bb9h,0e81536a8h,0812a4096h,03ac09b9bh,0137dfe59h,0ba8c9a7ah,00682238fh,0aeccb4bdh,07072ead6h,0692ba633h,06a34e9aah,06fff9d33h,0c82eaec2h,01d4d2b62h,0fb753512h
- DD 01d7aadabh,01a0445ffh,0d5f6a67ch,065d38260h,091cfb26fh,06e62fb08h,05c7d91d6h,0ef1e0fa5h,033db72cdh,047e7c7bah,0fa7c74b2h,0017cbc09h,0f50a503ch,03c931590h,0616baa42h,0cac54f60h
- DD 0b2369f0fh,09b6cd380h,023c76151h,097d3a70dh,09862a9c6h,05f9dd6fch,012312f51h,0044c4ab2h,0834a2ddch,0035ea0fdh,0cc7b826dh,049e6b862h,062fce490h,0b03d6883h,0b37e36e9h,062f2497ah
- DD 0c6458293h,004b005b6h,0e8d10af7h,036bb5276h,08ee617b8h,0acf2dc13h,0b004b3d4h,0470d2d35h,0feeb1b77h,006790832h,085657f9ch,02bb75c39h,0c0f60004h,0d70bd4edh,0219b018bh,0fe797ecch
- DD 0753aebcch,09b5bec2ah,0c939eca5h,0daf9f3dch,0d095ad09h,0d6bc6833h,0daa4d2fch,098abdd51h,08d168be5h,0d9840a31h,02325a23ch,0cf7c10e0h,07e6ecfafh,0a5c02aa0h,0b5bfdf18h,02462e7e6h
- DD 0a0cc3f12h,0ab2d8a8bh,0bc672a29h,068dd485dh,0596f2cd3h,072039752h,0a0cf3d8dh,05d3eea67h,0e6602671h,0810a1a81h,014026c0ch,08f144a40h,076b50f85h,0bc753a6dh,0645cd4a4h,0c4dc21e8h
- DD 0521d0378h,0c5262deah,005011c6fh,0802b8e0eh,00b4c19eah,01ba19cbbh,0ebf0aaech,021db64b5h,070342f9dh,01f394ee9h,01bc44a14h,093a10aeeh,03efd0baah,0a7eed31bh,01d154e65h,06e7c824eh
- DD 09966e7eeh,0ee23fa81h,005b7920dh,064ec4aa8h,02d90aad4h,02d44462dh,0df277ad5h,0f44dd195h,0bb46b6a1h,08d6471f1h,0fd885090h,01e65d313h,013a977b4h,033a800f5h,00797e1efh,0aca9d721h
- DD 0fcff6a17h,09a5a85a0h,01eca7ceeh,09970a3f3h,0c9504be3h,0bb9f0d6bh,0add24ee2h,0e0c504beh,077fcc2f4h,07e09d956h,065bb5fc4h,0ef1a5227h,08b9286aah,0145d4fb1h,06649028bh,066fd0c5dh
- DD 01bf4581ch,098857cebh,0aca7b166h,0e635e186h,0659722ach,0278ddd22h,01db68007h,0a0903c4ch,048f21402h,0366e4589h,0b96abda2h,031b49c14h,0e0403190h,0329c4b09h,0d29f43feh,097197ca3h
- DD 0274983d8h,08073dd1eh,055717c8fh,0da1a3bdeh,00361f9d1h,0fd3d4da2h,04c7de1ceh,01332d081h,0aa6d0e10h,09b7ef7a3h,0f54f1c4ah,017db2e73h,04cd35567h,0af3dffaeh,0e56f4e71h,0aaa2f406h
- DD 07ace3fc7h,08966759eh,045a8d8c6h,09594eacfh,091834e0eh,08de3bd8bh,0548c0421h,0afe4ca53h,0e6ee81c6h,0fdd7e856h,06b891a3ah,08f671bebh,0fae63829h,0f7a58f2bh,09c11ac9fh,09ab186fbh
- DD 010b5be76h,08d6eb369h,0fb040bcdh,0046b7739h,0cb73de88h,0ccb4529fh,0cf26be03h,01df0fefch,0bcfcd027h,0ad7757a6h,0bb3165cah,0a8786c75h,07e99a4d9h,0e9db1e34h,0b06c504bh,099ee86dfh
- DD 0c15c9f0ah,05b7c2dddh,04295989eh,0df87a734h,003d08fdah,059ece47ch,0ad5fc702h,0b074d3ddh,051a03776h,020407903h,02a608007h,02bb1f77bh,0e1153185h,025c58f4fh,0766e6447h,0e6df62f6h
- DD 0ed51275ah,0efb3d1beh,02f0f483fh,05de47dc7h,097c2bedfh,07932d98eh,00219f8a1h,0d5c11927h,0a73a294eh,09d751200h,09dc20172h,05f88434ah,0a26f506ah,0d28d9fd3h,09d1dcd48h,0a890cd31h
- DD 070f4d3b4h,00aebaec1h,00ffc8d00h,0fd1a1369h,057d57838h,0b9d9c240h,068bac361h,045929d26h,025b15ca6h,05a2cd060h,06e474446h,04b3c83e1h,0ee1e5134h,01aac7578h,0c91e2f41h,0a418f5d6h
- DD 0213ed68bh,06936fc8ah,0510a5224h,0860ae7edh,0def09b53h,063660335h,0cd79c98dh,0641b2897h,001110f35h,029bd38e1h,0648b1937h,079c26f42h,09d9164f4h,064dae519h,00265c273h,0d85a2310h
- DD 04b07e2b1h,07173dd5dh,08d9ea221h,0d144c4cbh,01105ab14h,0e8b04ea4h,0fe80d8f1h,092dda542h,0cf03dce6h,0e9982fa8h,01a22cffch,08b5ea965h,03fad88c4h,0f7f4ea7fh,06a5ba95ch,062db773eh
- DD 093f24567h,0d20f02fbh,0315257cah,0fd46c69ah,08bcab987h,00ac74cc7h,05ceca2f5h,046f31c01h,0888b219eh,040aedb59h,0e1fccd02h,0e50ecc37h,0911f816ch,01bcd9dadh,08db9b00ch,0583cc1ech
- DD 0a483bf11h,0f3cd2e66h,0b1b2c169h,0fa08a6f5h,04be9fa28h,0f375e245h,05b6d011fh,099a7ffech,0c4ae62dah,06a3ebddbh,0374aef5dh,06cea00aeh,09d4d05bch,0ab5fb98dh,0d560f252h,07cba1423h
- DD 0208490deh,049b2cc21h,0bcfb2879h,01ca66ec3h,01b6fb16fh,07f1166b7h,065fe5db3h,0fff63e08h,08b2610beh,0b8345abeh,039de3df4h,0b732ed80h,0211c32b4h,00e24ed50h,0848ff27dh,0d10d8a69h
- DD 0ed4de248h,0c1074398h,010488927h,0d7cedaceh,085673e13h,0a4aa6bf8h,06daf30afh,0b46bae91h,0fcef7ad8h,007088472h,0d4b35e97h,061151608h,0dde29986h,0bcfe8f26h,0d5a34c79h,0eb84c4c7h
- DD 0164e1214h,0c1eec55ch,0a147bb03h,0891be86dh,00ba96835h,09fab4d10h,0a5c1ae9fh,0bf01e9b8h,0b186ebc0h,06b4de139h,085b91bcah,0d5c74c26h,0c2d93854h,05086a99ch,0a7a9dfbch,0eed62a7bh
- DD 076b7618ah,08778ed6fh,003b66062h,0bff750a5h,0b65186dbh,04cb7be22h,0cc3a6d13h,0369dfbf0h,07191a321h,0c7dab26ch,040ed718eh,09edac3f9h,0d0cfd183h,0bc142b36h,07c991693h,0c8af82f6h
- DD 097ce0b2ah,0b3d1e4d8h,0c3a55cdfh,0e6d7c87fh,068b81afeh,035846b95h,0d3c239d8h,0018d12afh,001206e15h,02b2c6208h,0a3b882c6h,0e0e42453h,0a50162d5h,0854470a3h,07017a62ah,008157478h
- DD 0820357c7h,018bd3fb4h,06f1458adh,0992039aeh,025b44aa1h,09a1df3c5h,0ed3d5281h,02d780357h,0c77ad4d4h,058cf7e4dh,0f9df4fc4h,0d49a7998h,01d71205eh,04465a8b5h,0649254aah,0a0ee0ea6h
- DD 0ab7bd771h,04b5eeecfh,035c262b9h,06c873073h,03c9d61e7h,0dc5bd648h,0321460d2h,0233d6d54h,0fc195bcch,0d20c5626h,004d78b63h,025445958h,017ec8ef3h,0e03fcb3dh,046b8f781h,054b690d1h
- DD 021230646h,082fa2c8ah,0084f418ch,0f51aabb9h,01a30ba43h,0ff4fbec1h,0743c9df7h,06a5acf73h,0d635b4d5h,01da2b357h,0ecd5c1dah,0c3de68ddh,0d61af0ddh,0a689080bh,0d665bf99h,0dea5938ah
- DD 0fe637294h,00231d71ah,0a5a81cd8h,001968aa6h,0048e63b5h,011252d50h,06ca007e9h,0c446bc52h,096d6134bh,0ef8c50a6h,09e09a05ch,09361fbf5h,0dca3291ah,0f17f85a6h,0ff251a21h,0b178d548h
- DD 0a4df3915h,087f6374bh,02fd5d608h,0566ce1bfh,07de35102h,0425cba4dh,058c5d5e2h,06b745f8fh,063122edfh,088402af6h,03b989a89h,03190f9edh,0ebba3156h,04ad3d387h,0c7c469a5h,0ef385ad9h
- DD 03f642c29h,0b08281deh,0910ffb88h,020be0888h,0d5292546h,0f353dd4ah,08377a262h,03f1627deh,0eefcd638h,0a5faa013h,074cc77c3h,08f3bf626h,0a348f55eh,032618f65h,09fefeb9eh,05787c0dch
- DD 0d9a23e44h,0f1673aa2h,04e10690dh,088dfa993h,02bf91108h,01ced1b36h,03af48649h,09193cecah,02d738fc5h,0fb34327dh,0975fee6ch,06697b037h,0c04079a5h,02f485da0h,02feaa1ach,02cdf5735h
- DD 0bd55659eh,076944420h,04376090ch,07973e32bh,0163b591ah,086bb4fe1h,0c196f0cah,010441aedh,0045ad915h,03b431f4ah,0a4afacb1h,06c11b437h,071fdbbd8h,030b0c7dbh,0eda65acdh,0b642931fh
- DD 09c92b235h,04baae6e8h,06b3993a1h,0a73bbd0eh,0693dd031h,0d06d60ech,07156881ch,003cab91bh,01db3574bh,0d615862fh,064bb061ah,0485b0185h,0a0181e06h,027434988h,0c1c0c757h,02cd61ad4h
- DD 02ff9f403h,03effed5ah,062239029h,08dc98d8bh,01f17b70dh,02206021eh,0bf510015h,0afbec0cah,080130dfah,09fed7164h,08a02dcf5h,0306dc2b5h,0feb10fc0h,048f06620h,05a57cf51h,078d1e1d5h
- DD 0192ef710h,0adef8c5ah,03b7431f9h,088afbd4bh,064250c9eh,07e1f7407h,0b58bec07h,06e31318dh,024f89b4eh,0fd4fc4b8h,048c36a2ah,065a5dd88h,0f024baa7h,04f1eccffh,0cba94650h,022a21cf2h
- DD 042a554f7h,095d29deeh,0002ec4bah,0828983a5h,08badb73dh,08112a1f7h,0a27c1839h,079ea8897h,0d065fd83h,08969a5a7h,0b262a0bch,0f49af791h,0af2b5127h,0fcdea8b6h,0564c2dbch,010e913e1h
- DD 0bc21ef51h,051239d14h,04ce57292h,0e51c3cebh,047bbcc3bh,0795ff068h,0bd7e11e6h,086b46e1eh,080041ef4h,00ea6ba23h,06262342eh,0d72fe505h,031d294d4h,08abc6dfdh,01278c2c9h,0bbe017a2h
- DD 0b389328ah,0b1fcfa09h,0d01771b5h,0322fbc62h,060b045bfh,004c0d063h,010e52d01h,0db652edch,003ec6627h,050ef932ch,0c1ee50e3h,0de1b3b2dh,0dc37a90dh,05ab7bdc5h,031e33a96h,0fea67213h
- DD 04f2999aah,06482b5cbh,0b8cbf0ddh,038476cc6h,0173405bbh,093ebfacbh,0e52369ech,015cdafe7h,0d935b7dbh,0d42d5ba4h,01c99a4cdh,0648b6004h,0a3b5545bh,0785101bdh,09dd67fafh,04bf2c38ah
- DD 04442449ch,0b1aadc63h,033ad4fb8h,0e0e9921ah,0aa686d82h,05c552313h,0465d866ch,0dee635fah,018ee6e8ah,0bc3c224ah,0ed42e02fh,0eed748a6h,0d474cd08h,0e70f930ah,0fff24adfh,0774ea6ech
- DD 0f3480d4ah,003e2de1ch,0bc8acf1ah,0f0d8edc7h,068295a9ch,0f23e3303h,0c546a97dh,0fadd5f68h,096f8acb1h,0895597adh,0671bdae2h,0bddd49d5h,021dd43f4h,016fcd528h,06619141ah,0a5a45412h
- DD 0c360e25ah,08ce9b6bfh,0075a1a78h,0e6425195h,0481732f4h,09dc756a8h,05432b57ah,083c0440fh,0d720281fh,0c670b3f1h,0d135e051h,02205910eh,0db052be7h,0ded14b0eh,0c568ea39h,0697b3d27h
- DD 0fb3ff9edh,02e599b9ah,017f6515ch,028c2e0abh,0474da449h,01cbee4fdh,04f364452h,0071279a4h,001fbe855h,097abff66h,05fda51c4h,03ee394e8h,067597c0bh,0190385f6h,0a27ee34bh,06e9fccc6h
- DD 014092ebbh,00b89de93h,0428e240ch,0f17256bdh,093d2f064h,0cf89a7f3h,0e1ed3b14h,04f57841eh,0e708d855h,04ee14405h,003f1c3d0h,0856aae72h,0bdd7eed5h,0c8e5424fh,073ab4270h,03333e4efh
- DD 0dda492f8h,03bc77adeh,078297205h,0c11a3aeah,034931b4ch,05e89a3e7h,09f5694bbh,017512e2eh,0177bf8b6h,05dc349f3h,008c7ff3eh,0232ea4bah,0f511145dh,09c4f9d16h,033b379c3h,0ccf109a3h
- DD 0a1f25897h,0e75e7a88h,0a1b5d4d8h,07ac6961fh,008f3ed5ch,0e3e10773h,00a892dfbh,0208a54ech,078660710h,0be826e19h,0237df2c8h,00cf70a97h,0ed704da5h,0418a7340h,008ca33fdh,0a3eeb9a9h
- DD 0169bca96h,049d96233h,02da6aafbh,004d286d4h,0a0c2fa94h,0c09606ech,023ff0fb3h,08869d0d5h,0d0150d65h,0a99937e5h,0240c14c9h,0a92e2503h,0108e2d49h,0656bf945h,0a2f59e2bh,0152a733ah
- DD 08434a920h,0b4323d58h,0622103c5h,0c0af8e93h,0938dbf9ah,0667518efh,083a9cdf2h,0a1843073h,05447ab80h,0350a94aah,0c75a3d61h,0e5e5a325h,068411a9eh,074ba507fh,0594f70c5h,010581fc1h
- DD 080eb24a9h,060e28570h,0488e0cfdh,07bedfb4dh,0c259cdb8h,0721ebbd7h,0bc6390a9h,00b0da855h,0de314c70h,02b4d04dbh,06c32e846h,0cdbf1fbch,0b162fc9eh,033833eabh,0b0dd3ab7h,09939b48bh
- DD 0cb0c9c8ch,05aaa98a7h,081c4375ch,075105f30h,05ef1c90fh,0ceee5057h,0c23a17bfh,0b31e065fh,0d4b6d45ah,05364d275h,062ec8996h,0d363f3adh,04391c65bh,0b5d21239h,0ebb41b47h,084564765h
- DD 037107c78h,020d18ecch,0570c2a66h,0acff3b6bh,09bd0d845h,022f975d9h,0ba178fa0h,0ef0a0c46h,076b6028eh,01a419651h,0248612d4h,0c49ec674h,07338af55h,05b6ac4f2h,07bee5a36h,006145e62h
- DD 0e75746b5h,033e95d07h,0c40c78beh,01c1e1f6dh,0222ff8e2h,0967833efh,0b49180adh,04bedcf6ah,03d7a4c8ah,06b37e9c1h,06ddfe760h,02748887ch,0aa3a5bbch,0f7055123h,07bbb8e74h,0954ff225h
- DD 097c3dfb9h,0c42b8ab1h,0cf168154h,055a549b0h,0c1b50692h,0ad6748e7h,06fc5cbcbh,02775780fh,0e1c9d7c8h,04eab80b8h,03fdbcd56h,08c69dae1h,09969eaceh,047e6b4fbh,0a705cb5ah,0002f1085h
- DD 06d3fea55h,04e23ca44h,0f4810568h,0b4ae9c86h,02a62f27dh,047bfb91bh,0d9bac28ch,060deb4c9h,07de6c34ch,0a892d894h,04494587dh,04ee68259h,01a3f8a5bh,0914ee14eh,028700385h,0bb113eaah
- DD 02115b4c9h,081ca03b9h,08908cad1h,07c163d38h,0aa18179ah,0c912a118h,0886e3081h,0e09ed750h,026f516cah,0a676e3fah,08e732f91h,0753cacf7h,0833da8b4h,051592aeah,04cbea8aah,0c626f42fh
- DD 0a7b56eafh,0ef9dc899h,034ef7316h,000c0e52ch,0fe818a86h,05b1e4e24h,0c538be47h,09d31e20dh,03ed68974h,022eb932dh,07c4e87c4h,0e44bbc08h,00dde9aefh,04121086eh,0134f4345h,08e6b9cffh
- DD 0711b0eb9h,096892c1fh,0780ab954h,0b905f2c8h,0a20792dbh,0ace26309h,00684e126h,0ec8ac9b3h,0b40a2447h,0486ad8b6h,09fe3fb24h,060121fc1h,01a8e3b3fh,05626fccfh,06ad1f394h,04e568622h
- DD 0196aa5a1h,0da7aae0dh,01041b5fbh,0e0df8c77h,026b318b7h,0451465d9h,07ab136e9h,0c29b6e55h,071148463h,02c2ab48bh,064454a76h,0b5738de3h,05a03abe4h,054ccf9a0h,00427d58eh,0377c0296h
- DD 02bb39c1fh,073f5f0b9h,0e608d8c5h,014373f2ch,000fbb805h,0dcbfd314h,083afdcfbh,0df18fb20h,042b3523fh,081a57f42h,087f650fbh,0e958532dh,08b0a7d7ch,0aa8dc8b6h,0150166beh,01b75dfb7h
- DD 02d7d1413h,090e4f7c9h,09834f597h,067e2d6b5h,0a808c3e8h,04fd4f4f9h,0d5281ec1h,0af8237e0h,084687ceeh,025ab5fdch,0a5b26c09h,0c5ded6b1h,0c8ea7650h,08e4a5aech,014cc417fh,023b73e5ch
- DD 03037bf52h,02bfb4318h,078c725d7h,0b61e6db5h,0bbb3e5d7h,08efd4060h,0dbac488eh,02e014701h,0360aa449h,0ac75cf9ah,079634d08h,0b70cfd05h,0fffb15efh,0a591536dh,0d07c106ch,0b2c37582h
- DD 0f50225f9h,0b4293fdch,0b0e12b03h,0c52e175ch,0d0a8bf64h,0f649c3bah,0eb8ae3c6h,0745a8fefh,058321bc3h,030d7e5a3h,00bc4df48h,0b1732be7h,0e9ea5058h,01f217993h,03e4fd745h,0f7a71cdeh
- DD 0894c5bbbh,086cc533eh,069d83082h,06915c7d9h,05815c244h,0a6aa2d05h,049b22ce5h,0aeeee592h,078135486h,089e39d13h,016b76f2fh,03a275c1fh,0e036e8f5h,0db6bcc1bh,05e4709f5h,04df69b21h
- DD 02d0f39aah,0a188b250h,015a85947h,0622118bbh,0fde0f4fah,02ebf520fh,04860e539h,0a40e9f29h,022b57f0fh,07b6a51ebh,07e80644ah,0849a33b9h,01cf095feh,050e5d16fh,0ec55f002h,0d754b54eh
- DD 0236f4a98h,05cfbbb22h,0066800bbh,00b0c59e9h,05a9a7774h,04ac69a8fh,0d6bec948h,02b33f804h,032e6c466h,0b3729295h,04e599c73h,068956d0fh,0155c31cch,0a47a249fh,0e1ce284eh,024d80f0dh
- DD 0988baf01h,0cd821dfbh,0dbb16647h,0e6331a7dh,0094cb960h,01eb8ad33h,0c91bbca5h,0593cca38h,026567456h,0384aac8dh,0c04b6490h,040fa0309h,0dab6c8f6h,097834cd6h,03f91e55fh,068a7318dh
- DD 0fc4d3157h,0a00fd04eh,02bf3bdeah,0b56f8ab2h,04fa57172h,0014f5648h,0450abdb3h,0948c5860h,00ebd4f08h,0342b5df0h,00e82938eh,03e5168cdh,0b0df5dd0h,07aedc1ceh,0e5732516h,06bbbc6d9h
- DD 0605daaa6h,0c7bfd486h,0bb9a6c9eh,046fd72b7h,0a124fb89h,0e4847fb1h,0a2d8ffbch,075959cbdh,0c8a588eeh,042579f65h,0b80b499dh,0368c92e6h,0999a5df1h,0ea4ef6cdh,0936fe604h,0aa73bb7fh
- DD 06457d188h,0f347a70dh,08b7a388bh,086eda86bh,00ccd6013h,0b7cdff06h,0d0053fb2h,0beb1b6c7h,099240a9fh,00b022387h,0776189b2h,01bbb384fh,09066193ah,08695e71eh,006ffac7eh,02eb50097h
- DD 04a7d2caah,00654a9c0h,0a5aaa290h,06f3fb3d1h,0ff476e8fh,0835db041h,0c42295e4h,0540b8b0bh,005e214f5h,0a5c73ac9h,056a0b638h,09a74075ah,0ce9e680bh,02e4b1090h,06b8d9afah,057a5b479h
- DD 026bfe65ch,00dca48e7h,07290c307h,0097e391ch,06669e72eh,0683c462eh,0062559ach,0f505be1eh,0e3a3035ah,05fbe3ea1h,09cd50da8h,06431ebf6h,01f6407f2h,0fd169d5ch,060fce6b8h,08d838a95h
- DD 0650006f0h,02a2bfa7fh,050c0fbb2h,0dfd7dad3h,0ccf9ad96h,092452495h,0d95635f9h,0183bf494h,04a7bd989h,002d5df43h,0a5431095h,0505385cch,0fd43f53eh,0dd98e67dh,0500c34a9h,0d61e1a6ch
- DD 04a8a3d62h,05a4b46c6h,0247743d2h,08469c4d0h,088f7e433h,02bb3a13dh,001be5849h,062b23a10h,0a63d1a4ch,0e83596b4h,07d183f3eh,0454e7feah,017afb01ch,0643fce61h,01c4c3638h,04e65e5e6h
- DD 0ef74c45bh,041d85ea1h,0ae328506h,02cfbfa66h,03ada7da9h,098b078f5h,0ec752fbbh,0d985fe37h,05a0148b4h,0eece68feh,02d78136dh,06f9a55c7h,0d2b729ceh,0232dccc4h,090aafbc4h,0a27e0dfdh
- DD 012b4603eh,096474452h,06b706d14h,0a876c551h,069a9d412h,0df145fcfh,02d479c34h,0e2ab75b7h,01a23ff97h,012df9a76h,05d359d10h,0c6138992h,0fa835f22h,06e51c7aeh,0c0fcc4d9h,069a79cb1h
- DD 0594cc7e1h,0f57f350dh,03350ab79h,03079ca63h,09aff594ah,0226fb614h,06d59a62bh,035afec02h,006ed2c6eh,09bee46f4h,07d939a57h,058da1735h,08fd1797eh,044c50402h,05ccea6cah,0d8853e7ch
- DD 0a35fcd5fh,04065508dh,0495ccaebh,08965df8ch,012e1a962h,00f2da850h,0c1cf1cc4h,0ee471b94h,00a08fb75h,0cef19bc8h,081de3591h,0704958f5h,03aef4f88h,02867f8b2h,0ea9f9a5fh,08d749384h
- DD 08c9049f4h,01b385537h,07b92d8b6h,05be948f3h,0b6e2bd6bh,0d96f725dh,0958c454dh,037a222bch,08809bf61h,0e7c61abbh,01346f18dh,046f07fbch,0e87c0d1ch,0fb567a7ah,07ef3d07ah,084a461c8h
- DD 0d9278d98h,00a5adce6h,09dfc73e1h,024d94813h,0054321c3h,04f3528b6h,0692ea706h,02e03fddeh,047b533c0h,010e60619h,02ca3c055h,01a8bc73fh,01bb62b8fh,0ae58d4b2h,0584a24e3h,0b2045a73h
- DD 0bd76e195h,03ab3d5afh,06938a810h,0478dd1adh,06ee3d5cbh,06ffab393h,022b361e4h,0dfb693dbh,051dbf1a7h,0f9694496h,008a2e762h,0cab4b4efh,0d39bba9ah,0e8c92f25h,0f1464d96h,0850e61bch
- DD 0dc09508bh,0b7e830e3h,074317655h,0faf6d2cfh,0df690355h,072606cebh,0d0c3ded6h,048bb92b3h,05c7cf892h,065b75484h,0d5d5f01fh,0f6cd7ac9h,096401d69h,0c2c30a59h,0ed921878h,091268650h
- DD 0b78c558fh,0380bf913h,0c8afdaa9h,043c0baebh,054f169d3h,0377f61d5h,0ae5ff20bh,0f8da07e3h,0a8a90ea8h,0b676c49dh,083a29b21h,081c1ff2bh,02ad8d276h,0383297ach,0ba89f982h,03001122fh
- DD 06718e448h,0e1d794beh,07c3e6e13h,0246c1482h,05d26b5efh,056646ef8h,088069cddh,080f5091eh,0724bdd38h,0c5992e2fh,08471e8c7h,002e915b4h,00d0ff2a9h,096ff320ah,04384d1a0h,0bf886487h
- DD 0c93f72d6h,0bbe1e6a6h,0cad800eah,0d5f75d12h,0e7acf117h,0fa40a09fh,07581a355h,032c8cdd5h,07023c499h,074221992h,038ec3901h,0a8afe5d7h,0a90e83f0h,05691afcbh,00b8f8each,041bcaa03h
- DD 08d2668d5h,0e38b5ff9h,07ad81965h,00715281ah,003c6ce11h,01bc8fc7ch,08b650436h,0cbbee6e2h,00cdb9808h,006b00fe8h,0fe3ed315h,017d6e066h,04d0b5018h,02e9d38c6h,0844dcaefh,0ab8bfd56h
- DD 0513aed8bh,042894a59h,0314bd07ah,0f77f3b6dh,08e42b582h,0bbdecb8fh,0d2390fe6h,0f10e2fa8h,062a2f201h,0efb95022h,050ee32b0h,04d59ea50h,06da789a8h,0d87f7728h,0f79492c4h,0cf98a2cfh
- DD 0720943c2h,0f9577239h,03990b9d0h,0ba044cf5h,095f2884ah,05aa8e823h,00278a0afh,0834de6edh,05f25bd12h,0c8e1ee9ah,06f7ab271h,09259ceaah,077d00b76h,07e6d97a2h,0a437832ah,05c0c6eeah
- DD 05606b81dh,05232c20fh,00d991ee5h,0abd7b375h,08632d951h,04d2bfe35h,098ed9364h,078f85146h,0f30c3282h,0951873f0h,0a789230bh,00da8ac80h,05398967fh,03ac7789ch,0bdda0fb5h,0a69b8f7fh
- DD 06add8545h,0e5db7717h,072c49b66h,01b71cb66h,068421d77h,0d8560739h,083e3afeah,003840fe8h,01ec69977h,0b391dad5h,0307f6726h,0ae243fb9h,0e8ca160ch,0c88ac87bh,04ce355f4h,05174ccedh
- DD 0e58ba37dh,098a35966h,07817335dh,0fdcc8da2h,083fbc7bfh,05b752830h,0d9c96984h,068e419d4h,002a40380h,0409a39f4h,01fe977bch,088940fafh,08f8edea6h,0c640a94bh,0ed11547dh,01e22cd17h
- DD 059ffc3e2h,0e28568ceh,0c1dee4e7h,060aa1b55h,0837cb363h,0c67497c8h,0105a2bf2h,006fb438ah,0500d8e20h,030357ec4h,00670db10h,01ad9095dh,0c73b7cfdh,07f589a05h,0880d6d28h,0f544607dh
- DD 0a20ef103h,017ba93b1h,06ba6577bh,0ad859130h,06fa214a0h,065c91cf6h,027990da5h,0d7d49c6ch,020bb569dh,0ecd9ec8dh,0eeffbc33h,0bd4b2502h,06bed0467h,02056ca5ah,05b63728ch,07916a1f7h
- DD 053a4f566h,0d4f9497dh,097b56810h,089734664h,00494a621h,0f8e1da74h,08d011c68h,082546a93h,0c61ac162h,01f3acb19h,0abad0d3eh,052f8fa9ch,0b4b7ea43h,015356523h,0ae608125h,05a16ad61h
- DD 04faed184h,0b0bcb87fh,05029f45fh,05f236b1dh,00bc6b1fch,0d42c7607h,068aefce3h,0c644324eh,05c5d8446h,08e191d59h,013ae1979h,0c0208077h,03ba59cc7h,0adcaee55h,0a2cb81bah,020ed6d6bh
- DD 0b6efcffch,00952ba19h,097c0b87ch,060f12d68h,09caa30bch,04ee2c7c4h,097fbff4eh,0767238b7h,0501b5d92h,0ebc73921h,0c2a37737h,03279e3dfh,06d197543h,09fc12bc8h,00a40db4eh,0fa94dc6fh
- DD 0530ccbbdh,07392b41ah,0ea823525h,087c82146h,005d98d0ch,0a52f984ch,05ef6974ch,02ae57d73h,03042a6ddh,09377f7bfh,019647a64h,0b1a007c0h,00cca9767h,0faa9079ah,0f68f72d5h,03d81a25bh
- DD 0ff81578eh,0752067f8h,09045447dh,078622150h,00505aa6fh,0c0c22fcfh,06bed1c77h,01030f0a6h,01f0bd739h,031f29f15h,0e6debe85h,02d7989c7h,08e677e98h,05c070e72h,006e81fd5h,00a817bd3h
- DD 0b0f2ac95h,0c110d830h,0ab20e64eh,048d0995ah,07729cd9ah,00f3e00e1h,0dd556946h,02a570c20h,04e86214dh,0912dbcfdh,0cf615498h,02d014ee2h,03530d76eh,055e2b1e6h,0fd0fd6d1h,0c5135ae4h
- DD 0d4f3049fh,00066273ah,0e7087477h,0bb8e9893h,014c6e5fdh,02dba1ddbh,051f57e6ch,0dba37886h,05a72f2cfh,05aaee0a6h,07bea5642h,01208bfbfh,067872c37h,0f5c6aa3bh,043f93224h,0d726e083h
- DD 0061f1658h,01854daa5h,0df0cd2b3h,0c0016df1h,0833d50deh,0c2a3f23eh,0bbbd3017h,073b681d2h,03ac343c0h,02f046dc4h,085716421h,09c847e7dh,00917eed4h,0e1e13c91h,063a1b9c6h,03fc9eebdh
- DD 07fe02299h,00f816a72h,0294f3319h,06335ccc2h,04745c5beh,03820179fh,0922f066eh,0e647b782h,002cafb8ah,0c22e49deh,0fcc2eccch,0299bc2ffh,06e0e8282h,09a8feea2h,0fe893205h,0a627278bh
- DD 07933e47bh,0a7e19733h,02e766402h,0f4ff6b13h,098440d9fh,0a4d8be0ah,038938808h,0658f5c2fh,0c95b3b3eh,090b75677h,03137b6ffh,0fa044269h,043c47c29h,0077b039bh,08a6445b2h,0cca95dd3h
- DD 02333fc4ch,00b498ba4h,0f736a1b1h,0274f8e68h,05f1d4b2eh,06ca348fdh,0a8f10199h,024d3be78h,0ca14f530h,08535f858h,05b982e51h,0a6e7f163h,036e1bf62h,0847c8512h,003448418h,0f6a7c58eh
- DD 0f9374ab6h,0583f3703h,06e564145h,0864f9195h,022526d50h,033bc3f48h,01262a496h,09f323c80h,03f046a9ah,0aa97a7aeh,0df8a039ah,070da183eh,052aa0ba6h,05b68f71ch,021459c2dh,09be0fe51h
- DD 0cbc613e5h,0c1e17eb6h,0497ea61ch,033131d55h,0af7eded5h,02f69d39eh,0de6af11bh,073c2f434h,0a4a375fah,04ca52493h,0b833c5c2h,05f06787ch,03e6e71cfh,0814e091fh,08b746666h,076451f57h
- DD 0694db7e0h,080f9bdefh,0b9fcddc6h,0edca8787h,003b8dce1h,051981c34h,070e10ba1h,04274dcf1h,06def6d1ah,0f72743b8h,0ebdb1866h,0d25b1670h,0050c6f58h,0c4491e8ch,087fbd7f5h,02be2b2abh
- DD 0d111f8ech,03e0e5c9dh,0b7c4e760h,0bcc33f8dh,0bd392a51h,0702f9a91h,0c132e92dh,07da4a795h,00bb1151bh,01a0b0ae3h,002e32251h,054febac8h,0694e9e78h,0ea3a5082h,0e4fe40b8h,0e58ffec1h
- DD 0d1e0cf9eh,0f85592fch,0c0e7b2e8h,0dea75f0dh,0c135584eh,0c04215cfh,02f57092ah,0174fc727h,0eb930beah,0e7277877h,05eb02a5ah,0504caccbh,0f5241b9bh,0f9fe08f7h,08d5ca954h,0e7fb62f4h
- DD 029c4120bh,0fbb8349dh,0c0d0d915h,09f94391fh,05410ba51h,0c4074fa7h,0150a5911h,0a66adbf6h,034bfca38h,0c164543ch,0b9e1ccfch,0e0f27560h,0e820219ch,099da0f53h,0c6b4997ah,0e8234498h
- DD 09d4c5423h,0cfb88b76h,0b0521c49h,09e56eb10h,0be8700a1h,0418e0b5eh,0f93cb58ah,000cbaad6h,0d92a5e67h,0e923fbdeh,01f347f11h,0ca4979ach,06bc0585bh,089162d85h,0ac3c70e3h,0dd6254afh
- DD 0516e19e4h,07b23c513h,0c5c4d593h,056e2e847h,05ce71ef6h,09f727d73h,0f79a44c5h,05b6304a6h,03ab7e433h,06638a736h,0fe742f83h,01adea470h,05b7fc19fh,0e054b854h,0ba1d0698h,0f935381ah
- DD 0799e9a74h,0546eab2dh,0a949f729h,096239e0eh,07090055ah,0ca274c6bh,09020c9b0h,0835142c3h,0a2e8807fh,0a405667ah,01aa3d39eh,029f2c085h,042fc72f5h,0cc555d64h,0fbeacb3ch,0e856e0e7h
- DD 0918e4936h,0b5504f9dh,0b2513982h,065035ef6h,06f4d9cb9h,00553a0c2h,0bea85509h,06cb10d56h,0a242da11h,048d957b7h,0672b7268h,016a4d3ddh,08502a96bh,03d7e637ch,0730d463bh,027c7032bh
- DD 0e4136a14h,0bdc02b18h,0678e32bfh,0bacf969dh,0dd9c3c03h,0c98d89a3h,023becc4fh,07b92420ah,0c64d565ch,0d4b41f78h,010f28295h,09f969d00h,0b13d051ah,0ec7f7f76h,0a92da585h,008945e1eh
- DD 05846426fh,055366b7dh,0247d441dh,0e7d09e89h,0736fbf48h,0510b404dh,0e784bd7dh,07fa003d0h,017fd9596h,025f7614fh,035cb98dbh,049e0e0a1h,02e83a76ah,02c65957bh,0cddbe0f8h,05d40da8dh
- DD 0050bad24h,0f2b8c405h,0c2aa4823h,08918426dh,0a38365a7h,02aeab3ddh,07c91b690h,072031717h,060a94120h,08b00d699h,0e99eaeech,0478a255dh,06f60aafdh,0bf656a5fh,05dee77b3h,0dfd7cb75h
- DD 0a595939dh,037f68bb4h,028740217h,003556479h,084ad7612h,08e740e7ch,09044695fh,0d89bc843h,085a9184dh,0f7f3da5dh,09fc0b074h,0562563bbh,0f88a888eh,006d2e6aah,0161fbe7ch,0612d8643h
- DD 0f64085e7h,0465edba7h,029aa8511h,0b230f304h,0cda2d188h,053388426h,04b666649h,090885735h,0652f54f6h,06f02ff9ah,05fae2bf0h,065c82294h,062f5eee3h,07816ade0h,0fcc56d70h,0dcdbdf43h
- DD 054530bb2h,09fb3bba3h,0cb0869eah,0bde3ef77h,00b431163h,089bc9046h,0e4819a35h,04d03d7d2h,043b6a782h,033ae4f9eh,09c88a686h,0216db307h,000ffedd9h,091dd88e0h,012bd4840h,0b280da9fh
- DD 01635e741h,032a7cb8ah,078be02a7h,0fe14008ah,01b7ae030h,03fafb334h,05add0ce9h,07fd508e7h,0d607ad51h,072c83219h,08d40964ah,00f229c0ah,01c878da2h,01be2c336h,0eab2ab86h,0e0c96742h
- DD 03e538cd7h,0458f8691h,08e08ad53h,0a7001f6ch,0bf5d15ffh,052b8c6e6h,0011215ddh,0548234a4h,03d5b4045h,0ff5a9d2dh,04a904190h,0b0ffeeb6h,048607f8bh,055a3aca4h,030a0672ah,08cbd665ch
- DD 042583068h,087f834e0h,0f3f6e683h,002da2aebh,005c12248h,06b763e5dh,065a8aefch,07230378fh,071e8e5cah,093bd80b5h,0b3b62524h,053ab041ch,06c9c552eh,01b860513h,0d5524e66h,0e84d402ch
- DD 0f37f5937h,0a37f3573h,0d1e4fca5h,0eb0f6c7dh,0ac8ab0fch,02965a554h,0274676ach,017fbf56ch,0acf7d720h,02e2f6bd9h,010224766h,041fc8f88h,085d53befh,0517a14b3h,07d76a7d1h,0dae327a5h
- DD 0c4818267h,06ad0a065h,037c1bbc1h,033aa189bh,027392a92h,064970b52h,02d1535eah,021699a1ch,0c2d7a7fdh,0cd20779ch,099c83cf2h,0e3186059h,072c0b8c7h,09b69440bh,07b9e0e4dh,0a81497d7h
- DD 01f5f82dch,0515d5c89h,06361079eh,09a7f67d7h,011a35330h,0a8da81e3h,04b18be1bh,0e44990c4h,0af103e59h,0c7d5ed95h,08dac9261h,0ece8aba7h,09394b8d3h,0be82b099h,016adfe83h,06830f09ah
- DD 088172d01h,0250a29b4h,0caff9e02h,08b20bd65h,0e8a6329ah,0b8a7661eh,0d3fce920h,04520304dh,02b47f7efh,0ae45da1fh,05bffc540h,0e07f5288h,03464f874h,0f7997009h,0a6fa1f38h,02244c2cdh
- DD 094d7d9b1h,043c41ac1h,0c82e7f17h,05bafdd82h,05fda0fcah,0df0614c1h,0a8ae37adh,074b043a7h,09e71734ch,03ba6afa1h,09c450f2eh,015d5437eh,067e242b1h,04a5883feh,02c1953c2h,05143bdc2h
- DD 0fc5e8920h,0542b8b53h,09a9cee08h,0363bf9a8h,0c3486e08h,002375f10h,08c5e70d2h,02037543bh,0625640b4h,07109bccch,08bc62c3bh,0cbc1051eh,0803f26eah,0f8455fedh,0eb372424h,06badceabh
- DD 06b53f5f9h,0a2a9ce7ch,01b176d99h,064246595h,0b95c081bh,0b1298d36h,01d9a9ee6h,053505bb8h,0f2ba70b0h,03f6f9e61h,08afad453h,0d07e16c9h,0e7eb4a6ah,09f1694bbh,03cb0bc8eh,0dfebced9h
- DD 053868c8bh,092d3dcdch,0386107a6h,0174311a2h,0689b4e64h,04109e07ch,02df3dcb6h,030e4587fh,00811b3b2h,0841aea31h,00cce43eah,06144d41dh,02a9a7803h,0464c4581h,03e158930h,0d03d371fh
- DD 0b1f3390bh,0c676d7f2h,0a5b61272h,09f7a1b8ch,0c2e127a9h,04ebebfc9h,05dd997bfh,04602500ch,04711230fh,07f09771ch,0020f09c1h,0058eb37ch,0fee5e38bh,0ab693d4bh,04653cbc0h,09289eb1fh
- DD 0d51b9cf5h,0becf46abh,09f0121afh,0d2aa9c02h,0e90dc274h,036aaf7d2h,048b95a3ch,0909e4ea0h,06f32dbdbh,0e6b70496h,08b030b3eh,0672188a0h,0cfb617e2h,0eeffe5b3h,07c82709eh,087e947deh
- DD 01770f5a7h,0a44d2b39h,00e44eb82h,0e4d4d791h,03f69712ah,042e69d1eh,0ac6a820eh,0bf11c4d6h,042c4224ch,0b5e7f3e5h,0449d941ch,0d6b4e81ch,05450e878h,05d72bd16h,0ee25ac54h,06a61e28ah
- DD 0e6f1cd95h,033272094h,00d18673fh,07512f30dh,05afc1464h,032f7a4cah,06bbb977bh,02f095656h,0a8226200h,0586f47cah,01ac07369h,002c868adh,0c613acbeh,04ef2b845h,00386054ch,043d7563eh
- DD 0ab952578h,054da9dc7h,026e84d0bh,0b5423df2h,09b872042h,0a8b64eebh,05990f6dfh,0ac205782h,021f4c77ah,04ff696ebh,0aab273afh,01a79c3e4h,09436b3f1h,029bc922eh,0d6d9a27ah,0ff807ef8h
- DD 0778f22a0h,082acea3dh,05b5e7469h,0fb10b2e8h,02818ee7dh,0c0b16980h,0c91c1a2fh,0011afff4h,0ad124418h,095a6d126h,0e72e295fh,031c081a5h,0f2f4db75h,036bb283ah,07acef462h,0d115540fh
- DD 033f6746ch,0c7f3a8f8h,0fea990cah,021e46f65h,0caddb0a9h,0915fd5c5h,078614555h,0bd41f016h,0426ffb58h,0346f4434h,014dbc204h,080559436h,05a969b7fh,0f3dd20feh,0e899a39ah,09d59e956h
- DD 08ad4cf4bh,0f1b0971ch,02ffb8fb8h,003448860h,065340ba4h,0f071ac3ch,0b27fd758h,0408d0596h,098c364b0h,0e7c78ea4h,0051e8ab5h,0a4aac4a5h,0485d9002h,0b9e1d560h,088844455h,09acd518ah
- DD 0d06f56c0h,0e4ca688fh,0df027972h,0a48af70dh,05e9a609dh,0691f0f04h,0ee61270eh,0a9dd82cdh,0a0ef18d3h,08903ca63h,03d6ca3bdh,09fb7ee35h,0abf47d03h,0a7b4a09ch,01c67de8eh,04cdada01h
- DD 09355a244h,052003749h,04f2151a9h,0e77fd2b6h,066b4efcbh,0695d6cf6h,0da2cfe25h,0c5a0cacfh,0ef811865h,0104efe5ch,09ea5cc3dh,0f52813e8h,040b58dbch,0855683dch,0175fcb11h,00338ecdeh
- DD 074921592h,0f9a05637h,0b9bb9d31h,0b4f1261dh,04e9c5459h,0551429b7h,06ea71f53h,0be182e6fh,0dfc50573h,0d3a3b07ch,062be8d44h,09ba1afdah,052ab65d3h,09bcfd2cbh,0a9571802h,0df11d547h
- DD 002a2404ah,0099403eeh,021088a71h,0497406f4h,05004ae71h,099479409h,0a812c362h,0bdb42078h,0d8828442h,02b72a30fh,0fcb5ed1ch,0283add27h,066a40015h,0f7c0e200h,008b295efh,03e3be641h
- DD 0e038a675h,0ac127dc1h,08c5c6320h,0729deff3h,0a90d2c53h,0b7df8fd4h,0681e7cd3h,09b74b0ech,0dab407e5h,05cb5a623h,076b340c6h,0cdbd3615h,07d28392ch,0a184415ah,0e96f7830h,0c184c1d8h
- DD 081d3a80fh,0c3204f19h,0c8e02432h,0fde0c841h,08149e0c1h,078203b3eh,008053a73h,05904bdbbh,0101b6805h,030fc1dd1h,049aa6d49h,043c223bch,07a174087h,09ed67141h,0d5997008h,0311469a0h
- DD 05e43fc61h,0b189b684h,0e0d3ab57h,0f3282375h,0b1181da8h,04fa34b67h,099ee52b8h,0621ed0b2h,0ad990676h,09b178de1h,056d54065h,0d51de67bh,07538c201h,02a2c27c4h,038a40f5ch,033856ec8h
- DD 0be6cdcdeh,02522fc15h,09f0c6f89h,01e603f33h,0103e30a6h,07994edc3h,0220c853eh,0033a00dbh,0f7bb7fd7h,0d3cfa409h,0462d18f6h,070f8781eh,0687fe295h,0bbd82980h,0595669f3h,06eef4c32h
- DD 02f7e85c3h,086a9303bh,071988f9bh,05fce4621h,0c138acb5h,05b935bf6h,025661212h,030ea7d67h,0e51ab9a2h,0ef1eb5f4h,0ae067c78h,00587c98ah,077ca9ca6h,0b3ce1b3ch,054b5f057h,02a553d4dh
- DD 04da29ec2h,0c7898236h,0b9c57316h,0dbdd5d13h,02cd80d47h,0c57d6e6bh,0fe9e7391h,080b460cfh,0f963c31eh,098648cabh,0cc4d32fdh,067f9f633h,0fdf7c687h,00af42a9dh,00b015ea7h,055f292a3h
- DD 0cd21ab3dh,089e468b2h,0c393d392h,0e504f022h,0a5013af9h,0ab21e1d4h,0c2c28acbh,0e3283f78h,0226bf99fh,0f38b35f6h,00e291e69h,0e8354274h,0b20c162dh,061673a15h,0b04fbdbeh,0c101dc75h
- DD 0255bd617h,08323b4c2h,06c2a9154h,06c969693h,062679387h,0c6e65860h,0b8c88e23h,08e01db0ch,0893a5559h,033c42873h,047a3e149h,07630f04bh,0ddcf35f8h,0b5d80805h,077dfe732h,0582ca080h
- DD 00b1894a0h,02c7156e1h,0d81c68c0h,092034001h,0c8b115b5h,0ed225d00h,083b907f2h,0237f9c22h,04470e2c0h,00ea2f32fh,058be4e95h,0b725f7c1h,0b1ae5463h,00f1dcafah,01ba2fc04h,059ed5187h
- DD 0d0115d4dh,0f6e0f316h,0d3691599h,05180b12fh,0527f0a41h,0157e32c9h,0a8e0ecc0h,07b0b081dh,0bf4f0dd0h,06dbaaa8ah,04d252696h,099b289c7h,0dbf864feh,079b7755eh,076cad3abh,06974e2b1h
- DD 006ddd657h,035dbbee2h,02ff3a96dh,0e7cbdd11h,0076be758h,088381968h,008c91f5dh,02d737e72h,086ec3776h,05f83ab62h,0945fa7a1h,098aa649dh,072ef0933h,0f477ec37h,0098c17b1h,066f52b1eh
- DD 0d803738bh,09eec58fbh,0e4e86aa4h,091aaade7h,0a5b51492h,06b1ae617h,0bbc45974h,063272121h,0862c5129h,07e0e28f0h,03321a4a0h,00a8f79a9h,05041c88fh,0e26d1664h,053233e3ah,00571b805h
- DD 0c9520711h,0d1b0ccdeh,03c8b84bfh,055a9e4edh,0a1fef314h,09426bd39h,06eb93f2bh,04f5f638eh,02bf9341bh,0ba2a1ed3h,04d42d5a9h,0d63c1321h,0316dc7c5h,0d2964a89h,0ca511851h,0d1759606h
- DD 0f9e6ed35h,0d8a9201fh,06736925ah,0b7b5ee45h,099581af7h,00a83fbbch,064eeb051h,03076bc40h,002dec312h,05511c98ch,0238dcb78h,0270de898h,0539c08c9h,02cf4cf9ch,038d3b06eh,0a70cb65eh
- DD 0cfe57bbdh,0b12ec10eh,035a0c2b5h,082c7b656h,0161c67bdh,0ddc7d5cdh,0ae3a32cch,0e32e8985h,0d11a5529h,07aba9444h,02427fa1ah,0e964ed02h,024a1770ah,01528392dh,012c72fcdh,0a152ce2ch
- DD 08ec07649h,0714553a4h,0459dd453h,018b4c290h,07b64b110h,0ea32b714h,02e6f07a2h,0b871bfa5h,09e2e3c9bh,0b67112e5h,044aa90f6h,0fbf250e5h,0bd539006h,0f77aedb8h,0d172a66fh,03b0cdf9ah
- DD 0f8c51187h,0edf69feah,0741e4da7h,005bb67ech,008114345h,047df0f32h,0bb9792b1h,056facb07h,08f6229e4h,0f3e007e9h,0526fba0fh,062d103f4h,0b0339d79h,04f33bef7h,0b59bfec1h,09841357bh
- DD 0c34e6705h,0fa8dbb59h,07fdaa84ch,0c3c7180bh,0a4108537h,0f95872fch,0932a3e5ah,08750cc3bh,0b7275d7dh,0b61cc69dh,02e59b2e9h,0ffa0168bh,06ecbb493h,0ca032abch,02c9082d8h,01d86dbd3h
- DD 0e28ef5bah,0ae1e0b67h,0cb18e169h,02c9a4699h,01e6bbd20h,00ecd0e33h,0af5e81d2h,0571b360eh,0101c1d45h,0cd9fea58h,018880452h,06651788eh,01f8dd446h,0a9972635h,0e37281d0h,044bed022h
- DD 033da525dh,0094b2b2dh,013144fd8h,0f193678eh,0f4c1061dh,0b8ab5ba4h,0dccbe0f4h,04343b5fah,063812713h,0a8702371h,0f7611d93h,047bf6d2dh,0bd21e1d7h,046729b8ch,0d629e77dh,07484d4e0h
- DD 060dbac1fh,0830e6eeah,0da06a2f7h,023d8c484h,050ca535bh,0896714b0h,0ebd97a9bh,0dc8d3644h,0b12177b4h,0106ef9fah,0534d5d9ch,0f79bf464h,0a6ab360bh,02537a349h,0a00c744fh,0c7c54253h
- DD 0e5911a76h,0b3c7a047h,0647f1ee7h,061ffa5c8h,08f56ab42h,015aed36fh,0a3ff9ac9h,06a0d41b0h,0cc30d357h,068f469f5h,06b72be96h,0be9adf81h,0903ad461h,01cd926feh,0caca441bh,07e89e38fh
- DD 0facf69d4h,0f0f82de5h,04775344ch,0363b7e76h,0b2e36d04h,06894f312h,011d1c9a5h,03c6cb4feh,04008e1f2h,085d9c339h,0249f326ch,05e9a85eah,0678c5e06h,0dc35c60ah,09f86fba9h,0c08b944fh
- DD 089f71f0fh,0de40c02ch,0ff3da3c0h,0ad8f3e31h,042125dedh,03ea5096bh,0a7379183h,013879cbfh,06b306a0bh,06f4714a5h,067646c5eh,0359c2ea6h,007726368h,0facf8943h,065ff431eh,007a58935h
- DD 068754ab0h,024d661d1h,06f429a76h,0801fce1dh,0a58ce769h,0c068a85fh,05d5eca2bh,0edc35c54h,0a3f660d1h,0ea31276fh,0b8fc7167h,0a0184ebeh,01d8db0aeh,00f20f21ah,056c35e12h,0d96d095fh
- DD 0f8c2a25bh,0edf402b5h,0059204b6h,01bb772b9h,019b4e34ch,050cbeae2h,03fa0845ah,093109d80h,08ef59fb5h,054f7ccf7h,088070963h,03b438fe2h,031f3ba9bh,09e28c659h,0ead9da92h,09cc31b46h
- DD 0b733aa5fh,03c2f0ba9h,0f05af235h,0dece47cbh,0a2ac82a5h,0f8e3f715h,02203f18ah,0c97ba641h,009c11060h,0c3af5504h,046af512dh,056ea2c05h,0f3f28146h,0fac28dafh,0959ef494h,087fab43ah
- DD 0d4c5105fh,009891641h,06d7fbd65h,01ae80f8eh,0bee6bdb0h,09d67225fh,07fc4d860h,03b433b59h,093e85638h,044e66db6h,0e3e9862fh,0f7b59252h,0665c32ech,0db785157h,0ae362f50h,0702fefd7h
- DD 00fefb0c3h,03754475dh,046d7c35dh,0d48fb56bh,0363798a4h,0a070b633h,08fdb98e6h,0ae89f3d2h,06363d14ch,0970b89c8h,067abd27dh,089817521h,044d5a021h,09bf7d474h,0cac72aeeh,0b3083bafh
- DD 0be949a44h,0389741deh,0546a4fa5h,0638e9388h,0a0047bdch,03fe6419ch,0aaea57cah,07047f648h,041fbab17h,054e48a90h,0576bdba2h,0da8e0b28h,0c72afddch,0e807eebch,0f42577bfh,007d3336dh
- DD 0bfe20925h,062a8c244h,08fdce867h,091c19ac3h,0dd387063h,05a96a5d5h,021d324f6h,061d587d4h,0a37173eah,0e87673a2h,053778b65h,023848008h,005bab43eh,010f8441eh,04621efbeh,0fa11fe12h
- DD 081685d7bh,0047b772eh,0bf34a976h,023f27d81h,0915f48efh,0c27608e2h,0a521d5c3h,03b0b43fah,063ca7284h,07613fb26h,01d4db837h,07f5729b4h,0583b526bh,087b14898h,0bbadd3d1h,000b732a6h
- DD 02048e396h,08e02f426h,0383d9de4h,0436b50b6h,0471e85adh,0f78d3481h,0d005c8d6h,08b01ea6ah,097015c07h,0d3c7afeeh,04e3ba2aeh,046cdf1a9h,083d3a1d2h,07a42e501h,0b541dff4h,0d54b5268h
- DD 04e23e9bch,03f24cf30h,0126e3624h,04387f816h,03b0b6d61h,026a46a03h,08b2d777ch,0af1bc845h,0527de79ch,025c401bah,04261bbb6h,00e1346d4h,0287b4bc7h,04b96c44bh,05254562fh,0658493c7h
- DD 0b8a24a20h,023f949feh,0f52ca53fh,017ebfed1h,0bcfb4853h,09b691bbeh,06278a05dh,05617ff6bh,0e3c99ebdh,0241b34c5h,01784156ah,0fc64242eh,0695d67dfh,04206482fh,0ee27c011h,0b967ce0eh
- DD 021c80b5dh,065db3751h,0a31ecca0h,02e7a563ch,05238a07eh,0e56ffc4eh,032ced854h,03d6c2966h,0af70b885h,0e99d7d1ah,02d686459h,0afc3bad9h,00cc8ba5bh,09c78bf46h,018955aa3h,05a439519h
- DD 05fe4e314h,0f8b517a8h,0fcb8906fh,0e60234d0h,0f2061b23h,0ffe542ach,06b4cb59ch,0287e191fh,009d877d8h,021857ddch,014678941h,01c23478ch,0b6e05ea4h,0bbf0c056h,0b01594feh,082da4b53h
- DD 0fadb8608h,0f7526791h,07b74cdf6h,0049e832dh,0c2b90a34h,0a43581cch,09360b10ch,073639eb8h,0e1e4a71bh,04fba331fh,08072f919h,06ffd6b93h,065679032h,06e53271ch,0f14272ceh,067206444h
- DD 0b2335834h,0c0f734a3h,090ef6860h,09526205ah,004e2bb0dh,0cb8be717h,002f383fah,02418871eh,04082c157h,0d7177681h,029c20073h,0cc914ad0h,0e587e728h,0f186c1ebh,061bcd5fdh,06fdb3c22h
- DD 0f2f9f8e9h,030d014a6h,04fec49d2h,0963ece23h,09605a8d9h,0862025c5h,019f8929ah,039874445h,012bf476ah,001b6ff65h,009cf7d91h,0598a64d8h,093be56cah,0d7ec7749h,0cbb33615h,010899785h
- DD 002eee3adh,0b8a092fdh,030145270h,0a86b3d35h,08512b675h,0323d98c6h,062ebb40fh,04b8bc785h,0413f9cdeh,07d301f54h,02bab5664h,0a5e4fb4fh,01cbfec23h,01d2b252dh,0e177120dh,0fcd576bbh
- DD 083731a34h,004427d3eh,0ed836e8eh,02bb9028eh,0b612ca7ch,0b36acff8h,0d3d9c73ah,0b88fe5efh,0edea4eb3h,0be2a6bc6h,0488eec77h,043b93133h,0b17106e1h,0f41ff566h,0654efa32h,0469e9172h
- DD 041c23fa3h,0b4480f04h,0c1989a2eh,0b4712eb0h,093a29ca7h,03ccbba0fh,0d619428ch,06e205c14h,0b3641686h,090db7957h,045ac8b4eh,00432691dh,0f64e0350h,007a759ach,09c972517h,00514d89ch
- DD 0a8e67fc3h,01701147fh,0ab2085beh,09e2e0b8bh,0ac284e57h,0d5651824h,074893664h,0890d4325h,0c55e68a3h,08a7c5e6eh,04339c85ah,0bf12e90bh,0f922b655h,031846b85h,00bf4d700h,09a54ce4dh
- DD 0f1a14295h,0d7f4e83ah,0b285d4f9h,0916f955ch,099ffdabah,0e57bb0e0h,0eab0d152h,028a43034h,0b8a9cef8h,00a36ffa2h,0b9ec051ah,05517407eh,0ea68e672h,09c796096h,0fb3c77fbh,0853db5fbh
- DD 0e864a51ah,021474ba9h,06e8a1b8bh,06c267699h,094120a28h,07c823626h,08383a5dbh,0e61e9a48h,09f84216dh,07dd75003h,0ad43cd85h,0ab020d07h,0da12c659h,09437ae48h,0e65452adh,06449c2ebh
- DD 02cf9d7c1h,0cc7c4c1ch,0ee95e5abh,01320886ah,0beae170ch,0bb7b9056h,0dbc0d662h,0c8a5b250h,0c11d2303h,04ed81432h,01f03769fh,07da66912h,084539828h,03ac7a5fdh,03bccdd02h,014dada94h
- DD 07ef6b0d1h,08b84c321h,07c933f22h,052a9477ah,0fd440b82h,05ef6728ah,06ce4bd5eh,05c3bd859h,0f22c2d3eh,0918b80f5h,0b7bb6cc5h,0368d5040h,02695a11ch,0b66142a1h,0eb19ea70h,060ac583ah
- DD 00eab2437h,0317cbb98h,05e2654c8h,08cc08c55h,0e6d8307fh,0fe2d6520h,057428993h,0e9f147f3h,0d2fd6cf1h,05f9c7d14h,02d4fcbb0h,0a3ecd064h,08e7341f7h,0ad83fef0h,03a63115ch,0643f23a0h
- DD 0e65ab743h,0d38a78abh,035edc89ch,0bf7c75b1h,0530df568h,03dd8752eh,0e308c682h,0f85c4a76h,0e68acf37h,04c9955b2h,0ab32af85h,0a544df3dh,0a25cf493h,04b8ec3f5h,01a622febh,04d8f2764h
- DD 0f0dcbc49h,07bb4f7aah,070bbb45bh,07de551f9h,09f2ca2e5h,0cfd0f3e4h,01f5c76efh,0ece58709h,0167d79aeh,032920eddh,0fa7d7ec1h,0039df8a2h,0bb30af91h,0f46206c0h,022676b59h,01ff5e2f5h
- DD 06ea51d66h,011f4a039h,0807d7a26h,0506c1445h,0755a9b24h,060da5705h,01f1a319eh,08fc8cc32h,09433d67dh,083642d4dh,06a7dd296h,07fa5cb8fh,09b7bde07h,0576591dbh,0419716fbh,013173d25h
- DD 0d5b340ffh,0ea30599dh,0b0fe76c5h,0fc6b5297h,0ab8f5adch,01c6968c8h,0901c928dh,0f723c7f5h,09773d402h,04203c321h,01b51dd47h,0df7c6aa3h,0552be23ch,03d49e37ah,00b5a6e87h,057febee8h
- DD 07bd8e739h,0c5ecbee4h,0ae63bf75h,079d44994h,038fb8923h,0168bd00fh,0d0533130h,075d48ee4h,0db5cdf33h,0554f77aah,03c696769h,03396e896h,0d3fd674eh,02fdddbf2h,099d0e3e5h,0bbb8f6eeh
- DD 0cbae2f70h,051b90651h,093aaa8ebh,0efc4bc05h,0dd1df499h,08ecd8689h,022f367a5h,01aee99a8h,0ae8274c5h,095d485b9h,07d30b39ch,06c14d445h,0bcc1ef81h,0bafea90bh,0a459a2edh,07c5f317ah
- DD 04ef44227h,001211075h,0dc20f496h,0a17bed6eh,0819853cdh,00cdfe424h,0f71e2ce7h,013793298h,0dbbe307bh,03c1f3078h,076ee9936h,06dd1c20eh,0423caa20h,023ee4b57h,08efb840eh,04ac3793bh
- DD 0ed1f8ca0h,0934438ebh,04ebb25a2h,03e546658h,0c069896fh,0c415af0eh,09a5aa43dh,0c13eddb0h,0d49eb8f6h,07a04204fh,0d74f1670h,0d0d5bdfch,056fc0558h,03697e286h,001cebadeh,010207371h
- DD 00647a82bh,05f87e690h,08f40054fh,0908e0ed4h,079853803h,0a9f633d4h,04a28b252h,08ed13c9ah,01f460f64h,03e2ef676h,036d06336h,053930b9bh,08fc4979bh,0347073ach,05ecd5597h,084380e0eh
- DD 0c4fe3c39h,0e3b22c6bh,06c7bebdfh,0ba4a8153h,025693459h,0f23ab6b7h,014922b11h,053bc3770h,05afc60dbh,04645c8abh,020b9f2a3h,0aa022355h,0ce0fc507h,052a2954ch,07ce1c2e7h,08c2731bbh
- DD 018a0339dh,0f39608abh,03735436ch,0ac7a658dh,0cd992b4fh,0b22c2b07h,0f40dcfd4h,04e83daech,02f39ea3eh,08a34c7beh,0b0a56d2eh,0ef0c005fh,06edd8038h,062731f6ah,04e3cb075h,05721d740h
- DD 0fbeeee1bh,01ea41511h,0ef1d0c05h,0d1ef5e73h,073c07d35h,042feefd1h,08a329493h,0e530a00ah,0f15ebfb0h,05d55b7feh,0d322491ah,0549de03ch,0745b3237h,0f7b5f602h,01ab6e2b6h,03632a3a2h
- DD 00ef59f78h,00d3bba89h,0c9e52b9ah,00dfc6443h,072631447h,01dc79699h,0b3be20b1h,0ef033917h,0b1383948h,00c92735dh,0c0dd7d7dh,0c1fc29a2h,0403ed068h,06485b697h,0aac93bdch,013bfaab3h
- DD 00deeaf52h,0410dc6a9h,04c641c15h,0b003fb02h,05bc504c4h,01384978ch,0864a6a77h,037640487h,0222a77dah,005991bc6h,05e47eb11h,062260a57h,0f21b432ch,0c7af6613h,0ab4953e9h,022f3acc9h
- DD 08e41d155h,052934922h,03ac059efh,04d024568h,04d884411h,0b0201755h,0a59a178fh,0ce8055cfh,0f6204549h,0cd77d1afh,0c7066759h,0a0a00a3eh,00272c229h,0471071efh,0d3c4b6b0h,0009bcf6bh
- DD 022305177h,02a2638a8h,041645bbfh,0d51d59dfh,0c0a7a3c0h,0a81142fdh,04c7063eeh,0a17eca6dh,060d9dcech,00bb887edh,020ad2455h,0d6d28e51h,0a67102bah,0ebed6308h,08bffa408h,0042c3114h
- DD 08aa68e30h,0fd099ac5h,01483513eh,07a6a3d7ch,0ba2d8f0ch,0ffcc6b75h,01e78b954h,054dacf96h,0a4a9af89h,0f645696fh,006ac98ech,03a411940h,022a67a20h,041b8b3f6h,099dec626h,02d0b1e0fh
- DD 040be34e8h,027c89192h,091907f35h,0c7162b37h,0a956702bh,090188ec1h,0df93769ch,0ca132f7dh,00e2025b4h,03ece44f9h,00c62f14ch,067aaec69h,022e3cc11h,0ad741418h,07ff9a50eh,0cf9b75c3h
- DD 04d348272h,002fa2b16h,09959d56dh,0bd99d61ah,018762916h,0bc4f19dbh,049c1ac80h,0cc7cce50h,0d846bd83h,04d59ebaah,0a9202849h,08775a9dch,06e1f4ca9h,007ec4ae1h,0ba893f11h,027eb5875h
- DD 0662cc565h,000284d51h,00db4138dh,082353a6bh,0aa32a594h,0d9c7aaaah,0a5669c47h,0f5528b5eh,02f23c5ffh,0f3220231h,06affa3a1h,0e3e8147ah,0202ddda0h,0fb423d5ch,06b871bd4h,03d6414ach
- DD 0a51a168ah,0586f82e1h,048ae5448h,0b712c671h,076233eb8h,09a2e4bd1h,078811ca9h,00188223ah,0f7c18de1h,0553c5e21h,0b27bb286h,07682e451h,00e51e929h,03ed036b3h,0ec9cb34fh,0f487211bh
- DD 00c24efc8h,00d094277h,0bef737a4h,00349fd04h,0514cdd28h,06d1c9dd2h,030da9521h,029c135ffh,0f78b0b6fh,0ea6e4508h,0678c143ch,0176f5dd2h,04be21e65h,008148418h,0e7df38c4h,027f7525ch
- DD 0748ab1a4h,01fb70e09h,05efe4433h,09cba50a0h,015f75af2h,07846c7a6h,05ee73ea8h,02a7c2c57h,03f0a449ah,042e566a4h,0ad90fc3dh,045474c3bh,08b61d057h,07447be3dh,03a4ec092h,03e9d1cf1h
- DD 0f380a6e6h,01603e453h,09b1437c2h,00b86e431h,0ef29610ah,07a4173f2h,0f03d57f7h,08fa729a7h,06c9c217eh,03e186f6eh,091919524h,0be1d3079h,0153d4fb1h,092a62a70h,0d68c2f71h,032ed3e34h
- DD 09eb1a8b7h,0d785027fh,0c5b22fe8h,0bc37eb77h,0b9d6a191h,0466b34f0h,09a05f816h,0008a89afh,07d42c10ah,019b028fbh,049b3f6b8h,07fe8c92fh,0a5a0ade3h,058907cc0h,0559d1a7ch,0b3154f51h
- DD 0d9790ed6h,05066efb6h,0a6aa793bh,0a77a0cbch,0223e042eh,01a915f3ch,069c5874bh,01c5def04h,073b6c1dah,00e830078h,0fcd8557ah,055cf85d2h,00460f3b1h,00f7c7c76h,046e58063h,087052acbh
- DD 0907eae66h,009212b80h,04d721c89h,03cb068e0h,0dd45ac1ch,0a87941aeh,00daa0dbbh,0de8d5c0dh,0e3502e6eh,0da421fdch,04d89a084h,0c8944201h,0f0c24bfbh,07307ba5eh,020bde0efh,0da212bebh
- DD 0f82ce682h,0ea2da24bh,007f71fe4h,0058d3816h,05ffad8deh,035a02462h,0aadcefabh,0cd7b05dch,01d9f54ech,0d442f8edh,0b2d3b5cah,08be3d618h,0e06b2ce2h,0e2220ed0h,01b0da4c0h,082699a5fh
- DD 071c0c3a7h,03ff106f5h,00d34180ch,08f580f5ah,022d7d375h,04ebb120eh,0e9513675h,05e5782cch,099c82a70h,02275580ch,015ea8c4ch,0e8359fbfh,07b415e70h,053b48db8h,0100c6014h,0aacf2240h
- DD 0e4652f1dh,09faaccf5h,0d56157b2h,0bd6fdd2ah,06261ec50h,0a4f4fb1fh,0476bcd52h,0244e55adh,0047d320bh,0881c9305h,06181263fh,01ca983d5h,0278fb8eeh,0354e9a44h,0396e4964h,0ad2dbc0fh
- DD 09268b3deh,0723f3aa2h,0e6e0609ah,00d1ca29ah,06cf44252h,0794866aah,001af87edh,00b59f3e3h,07f4a6c51h,0e234e5ffh,061dc2f7eh,0a8768fd2h,00a94d81fh,0dafc7332h,006938ce1h,0d7f84282h
- DD 00546063eh,0ae0b3c0eh,05d61abc6h,07fbadcb2h,0369ac400h,0d5d7a2c9h,0ae67d10ch,0a5978d09h,04f85eaach,0290f211eh,0facac681h,0e61e2ad1h,0388384cdh,0ae125225h,0ccfde30fh,0a7fb68e9h
- DD 03daed4c2h,07a59b936h,02606f789h,080a9aa40h,0f6a6d90ah,0b40c1ea5h,0514d5885h,0948364d3h,070985182h,0062ebc60h,033310895h,0a6db5b0eh,0e329c2f5h,064a12175h,090ea237eh,0c5f25bd2h
- DD 02d0a4c23h,07915c524h,06bb3cc52h,0eb5d26e4h,0c09e2c92h,0369a9116h,0cf182cf8h,00c527f92h,02aede0ach,09e591938h,06cc34939h,0b2922208h,099a34361h,03c9d8962h,0c1905fe6h,03c81836dh
- DD 0a001ec5ah,04bfeb57fh,0a0dc5dbah,0e993f5bbh,0724a1380h,047884109h,032fe9a04h,08a0369abh,08c927db8h,0ea068d60h,094655741h,0bf5f37cfh,004b6c7eah,047d402a2h,06af259cbh,04551c295h
- DD 0ed77ee8bh,0698b71e7h,0f309d5c7h,0bddf7bd0h,034e780cah,06201c22ch,04c295ef4h,0ab04f7d8h,04313a8ceh,01c947294h,092ca4cfeh,0e532e4ach,0d0a7a97ah,089738f80h,0a580fd5bh,0ec088c88h
- DD 042ce9e51h,0612b1ecch,0b25fdd2ah,08f9840fdh,001e7f839h,03cda78c0h,0ece05480h,0546b3d3ah,080d30916h,0271719a9h,0584c20c4h,045497107h,05bc78608h,0af8f9478h,0277e2a4ch,028c7d484h
- DD 088a2ffe4h,0fce01767h,028e169a5h,0dc506a35h,07af9c93ah,00ea10861h,003fa0e08h,01ed24361h,0a3d694e7h,096eaaa92h,0ef50bc74h,0c0f43b4dh,064114db4h,0ce6aa58ch,07c000fd4h,08218e8eah
- DD 0185f8844h,0ac815dfbh,01557abfbh,0cd7e90cbh,0afbfecdfh,023d16655h,0085cac4ah,080f3271fh,0d0e62f47h,07fc39aa7h,0460a48e5h,088d519d1h,0d28f101eh,059559ac4h,0ca9ae816h,07981d9e9h
- DD 09ac38203h,05c38652ch,057657fe5h,086eaf87fh,0e21f5416h,0568fc472h,0e7e597b5h,02afff39ch,0256d4eabh,03adbbb07h,08285ab89h,022598692h,0041caefeh,035f8112ah,0a5064c8bh,095df02e3h
- DD 0c7004bf3h,04d63356eh,0db83c7deh,0230a08f4h,08709a7b7h,0ca27b270h,0cb9abd2dh,00d1c4cc4h,07550fee8h,08a0bc66eh,09cf7247eh,0369cd4c7h,092b5b7e7h,075562e84h,05802af7bh,08fed0da0h
- DD 0e48fb889h,06a7091c2h,07b8a9d06h,026882c13h,01b82a0e2h,0a2498663h,03518152dh,0844ed736h,0d86e27c7h,0282f476fh,004afefdch,0a04edacah,06119e34dh,08b256ebch,00787d78bh,056a413e9h
- DD 05a74be50h,082ee061dh,0dea16ff5h,0e41781c4h,099bfc8a2h,0e0b0c81eh,00b547e2dh,0624f4d69h,0bdcc9ae4h,03a83545dh,0409b1e8eh,02573dbb6h,0a6c93539h,0482960c4h,05ae18798h,0f01059adh
- DD 03112795fh,0715c9f97h,0984e6ee1h,0e8244437h,0ecb66bcdh,055cb4858h,0abaffbeeh,07c136735h,05dbec38eh,054661595h,0388ad153h,051c0782ch,0c6e0952fh,09ba4c53ah,01b21dfa8h,027e6782ah
- DD 04ed2dbc2h,0682f903dh,07c3b2d83h,00eba59c8h,09c7e9335h,08e9dc84dh,00eb226d7h,05f9b21b0h,0af267baeh,0e33bd394h,0be2e15aeh,0aa86cc25h,06a8ec500h,04f0bf67dh,0f9630658h,05846aa44h
- DD 0e2c2bf15h,0feb09740h,0a9e99704h,0627a2205h,0c2fbc565h,0ec8d73d0h,0c20c8de8h,0223eed8fh,0a8363b49h,01ee32583h,0c9c2b0a6h,01a0b6cb9h,090dbc85ch,049f7c3d2h,01ef4c1ach,0a8dfbb97h
- DD 065c7c2abh,0afb34d4ch,0e2c5ea84h,01d4610e7h,0973c4ab5h,0893f6d1bh,0945ba5c4h,0a3cdd7e9h,0064417eeh,060514983h,0ad6bdf2bh,01459b23ch,05cf726c3h,023b2c341h,032d6354ah,03a829635h
- DD 0ab192c18h,0294f901fh,07030164fh,0ec5fcbfeh,0e2246ba6h,0e2e2fcb7h,0221a1a0ch,01e7c88b3h,0c92d88c5h,072c7dd93h,01106fb59h,041c2148eh,0a0f60f14h,0547dd4f5h,063960f31h,0ed9b52b2h
- DD 0b0a5b358h,06c8349ebh,09e7e2ed6h,0b154c5c2h,0eda462dbh,0cad5eccfh,02de66b69h,0f2d6dbe4h,08665e5b2h,0426aedf3h,07b7f5723h,0488a8513h,08bcbb386h,015cc43b3h,0d791d879h,027ad0af3h
- DD 0846e364fh,0c16c236eh,0dea50ca0h,07f33527ch,00926b86dh,0c4810775h,00598e70ch,06c2a3609h,0f024e924h,0a6755e52h,09db4afcah,0e0fa07a4h,066831790h,015c3ce7dh,0a6cbb0d6h,05b4ef350h
- DD 0b6205969h,02c4aafc4h,0f6c7854fh,042563f02h,01d983b48h,0016aced5h,099949755h,0feb356d8h,0d1a39bd7h,08c2a2c81h,0e6934ae9h,08f44340fh,0447904dah,0148cf91ch,00f51a926h,07340185fh
- DD 07409ab46h,02f8f00fbh,080e289b2h,0057e78e6h,0a888e5d1h,003e5022ch,09dede4e2h,03c87111ah,07809460bh,05b9b0e1ch,071c9abc7h,0e751c852h,0c7cc1dc9h,08b944e28h,01d3cfa08h,04f201ffah
- DD 03e6721ceh,002fc905ch,0d0b3674ch,0d52d70dah,018810da4h,05dc2e5cah,05c69dd99h,0a984b273h,084de5ca4h,063b92527h,0c852dec4h,02f1c9872h,0c2e3de09h,018b03593h,09813dc2fh,019d70b01h
- DD 0a6dc1d29h,042806b2dh,0f871e144h,0d3030009h,0aaf49276h,0a1feb333h,0c70bc04bh,0b5583b9eh,095695f20h,01db0be78h,089d012b5h,0fc841811h,005f61643h,06409f272h,0d5883128h,040d34174h
- DD 067419833h,0d79196f5h,0863b7b08h,06059e252h,01c56700ch,084da1817h,0b28d3ec4h,05758ee56h,0013b0ea6h,07da2771dh,054c5e9b9h,0fddf524bh,024305d80h,07df4faf8h,03a97763fh,058f5c1bfh
- DD 07c696042h,0a5af37f1h,04a2538deh,0d4cba22ch,09ea42600h,0211cb995h,07b069889h,0cd105f41h,0ddb81e74h,0b1e1cf19h,05157b8cah,0472f2d89h,0ee9db885h,0086fb008h,00f26d131h,0365cd570h
- DD 0a2be7053h,0284b02bbh,07ab9a6d6h,0dcbbf7c6h,020f7a530h,04425559ch,0188767c8h,0961f2dfah,070dc80c4h,0e2fd9435h,0f0784120h,0104d6b63h,053567122h,07f592bc1h,0f688ad77h,0f6bc1246h
- DD 00f15dde9h,005214c05h,00d5f2b82h,0a47a76a8h,062e82b62h,0bb254d30h,03ec955eeh,011a05fe0h,09d529b36h,07eaff46eh,08f9e3df6h,055ab1301h,099317698h,0c463e371h,0ccda47adh,0fd251438h
- DD 023d695eah,0ca9c3547h,016e589b5h,048ce626eh,0b187d086h,06b5b64c7h,0b2207948h,0d02e1794h,07198111dh,08b58e98fh,0dcf9c3cch,090ca6305h,0f34089b0h,05691fe72h,0fc7c80ffh,060941af1h
- DD 022eb51e5h,0a09bc0a2h,0aa9cf09ah,0c0bb7244h,080159f06h,036a8077fh,0dddc560eh,08b5c989eh,0512e1f43h,019d2f316h,0ad08ff62h,002eac554h,007d20b4eh,0012ab84ch,0d6d4e4e1h,037d1e115h
- DD 0ab7b19a8h,0b6443e1ah,0def8cd45h,0f08d067eh,0685e03dah,063adf3e9h,04792b916h,0cf15a10eh,0b738a425h,0f44bcce5h,09636b2fdh,0ebe131d5h,07850d605h,094068841h,0b40d749dh,009684eaah
- DD 072ba075bh,08c3c669ch,0ba469015h,089f78b55h,03e9f8ba8h,05706aadeh,0b32d7ed7h,06d8bd565h,0805f08d6h,025f4e63bh,0c3bcc1b5h,07f48200dh,0b025d847h,04e801968h,087cbe0a8h,074afac04h
- DD 07e63d690h,043ed2c2bh,00223cdb8h,0efb6bbf0h,02884d3feh,04fec3caeh,0d75e25a4h,0065ecce6h,069f79071h,06c2294ceh,0044b8666h,00d9a8e5fh,017b69d8fh,05009f238h,0c5dfdaf7h,03c29f8feh
- DD 0ebae68c4h,09067528fh,030c5ba21h,05b385632h,01fdd1aech,0540df119h,0cfba4c78h,0cf37825bh,0beb11454h,077eff980h,060c1b066h,040a1a991h,0f889a1c7h,0e8018980h,076c24be0h,0b9c52ae9h
- DD 045650ef4h,005fbbcceh,08aa29ac7h,0ae000f10h,04f04c470h,0884b7172h,019bb5c25h,07cd4fde2h,0e8840869h,06477b22ah,05fbd0686h,0a8868859h,01116dfbah,0f23cc02eh,0d87d7776h,076cd563fh
- DD 0a9d82abfh,0e2a37598h,0e6c170f5h,05f188ccbh,05066b087h,081682200h,0c7155adah,0da22c212h,0fbddb479h,0151e5d3ah,06d715b99h,04b606b84h,0f997cb2eh,04a73b54bh,03ecd8b66h,09a1bfe43h
- DD 02a67d48ah,01c312809h,0031fa9e2h,0cd6a671eh,00e43a34ah,0bec3312ah,055ef47d3h,01d935639h,08fea73eah,05ea02489h,0a035afb2h,08247b364h,05265b54ch,0b58300a6h,0722c7148h,03286662fh
- DD 0b4ec4c20h,0b77fd76bh,00f3fe3fdh,0f0a12fa7h,041d8c7e8h,0f845bbf5h,05ec10aa8h,0e4d969cah,043e232a3h,04c0053b7h,037f8a45ah,0dc7a3fach,020d81c8fh,03c4261c5h,0b00eab00h,0fd4b3453h
- DD 0d36e3062h,076d48f86h,0a143ff02h,0626c5277h,0af76f42eh,0538174deh,06407ceach,02267aa86h,072e572d5h,0fad76351h,0ba7330ebh,0ab861af7h,0418d8657h,0a0a1c8c7h,020289a52h,0988821cbh
- DD 0cccc18adh,079732522h,0f1a6e027h,0aadf3f8dh,017c2354dh,0f7382c93h,0d818b689h,05ce1680ch,0d9ecbee9h,0359ebbfch,01cae62ach,04330689ch,0c51ac38ah,0b55ce5b4h,0fe238ee8h,07921dfeah
- DD 0271d1ca5h,03972bef8h,0e8aabd18h,03e423bc7h,044a3e5e3h,057b09f3fh,07b444d66h,05da886aeh,0a9964375h,068206634h,0699cd0ffh,0356a2fa3h,0dba515e9h,0af0faa24h,0b321d79ah,0536e1f5ch
- DD 05c04e4eah,0d3b9913ah,0d6f11513h,0d549dcfeh,079fd1d94h,0ee227bf5h,0b43f2c67h,09f35afeeh,0f1314f53h,0d2638d24h,0cabcd822h,062baf948h,04ef48db0h,05542de29h,0fc5f6bb2h,0b3eb6a04h
- DD 01208e16ah,023c110aeh,0f8363e24h,01a4d15b5h,0164be00bh,030716844h,0f6f4690dh,0a8e24824h,090b170cfh,0548773a2h,042f191f4h,0a1bef331h,09247aa97h,070f418d0h,048be9147h,0ea06028eh
- DD 0dbfb894eh,0e13122f3h,0ce274b18h,0be9b79f6h,0ca58aadfh,085a49de5h,011487351h,024957758h,0bb939099h,0111def61h,026d13694h,01d6a974ah,0d3fc253bh,04474b4ceh,04c5db15eh,03a1485e6h
- DD 0147c15b4h,0e79667b4h,07bc61301h,0e34f553bh,017094381h,0032b80f8h,0723eaa21h,055d8bafdh,0f1c0e74eh,05a987995h,0ebba289ch,05a9b292eh,0eb4c8251h,0413cd4b2h,0d162db0ah,098b5d243h
- DD 068342520h,0bb47bf66h,0baa862d1h,008d68949h,0e906abcdh,011f349c7h,0ed7bf00eh,0454ce985h,0b55b803bh,0acab5c9eh,031e3c16dh,0b03468eah,0d273bf12h,05c24213dh,071587887h,0211538ebh
- DD 0731dea2dh,0198e4a2fh,074ed7b2ah,0d5856cf2h,013a664feh,086a632ebh,0bda41291h,0932cd909h,0c0c4ddc0h,0850e95d4h,0347fc2c9h,0c0f422f8h,086076bcbh,0e68cbec4h,0cd6cd286h,0f9e7c0c0h
- DD 00f5f27cah,065994ddbh,0a80d59ffh,0e85461fbh,066601023h,0ff05481ah,0fc9ebbfbh,0c665427ah,07587fd52h,0b0571a69h,08d49efceh,0935289f8h,0ea420688h,061becc60h,013a786afh,0b22639d9h
- DD 0361ecf90h,01a8e6220h,025506463h,0001f23e0h,00a5c2b79h,0e4ae9b5dh,0d8149db5h,0ebc9cdadh,0934aa728h,0b33164a1h,0ae9b60f3h,0750eb00eh,09b9cfbfdh,05a91615bh,0ef45f7f6h,097015cbfh
- DD 0bf5151dfh,0b462c4a5h,0b07118f2h,021adcc41h,0043fa42ch,0d60c545bh,0e96be1abh,0fc21aa54h,04e51ea80h,0e84bc32fh,0259b5d8dh,03dae45f0h,0c38f1b5eh,0bb73c7ebh,0e8ae617dh,0e405a74ah
- DD 09f1c56bdh,0bb1ae9c6h,049f196a4h,08c176b98h,06875092bh,0c448f311h,09f976033h,0b5afe3deh,0145813e5h,0a8dafd49h,0e2b34226h,0687fc4d9h,04c7ff57fh,0f2dfc92dh,0401f1b46h,0004e3fc1h
- DD 01430c9abh,05afddab6h,02238e997h,00bdd41d3h,0418042aeh,0f0947430h,0cdddc4cbh,071f9addah,0c52dd907h,07090c016h,029e2047fh,0d9bdf44dh,01b1011a6h,0e6f1fe80h,0d9acdc78h,0b63accbch
- DD 01272a95bh,0cfc7e235h,0a6276ac8h,00c667717h,0e2d7eef7h,03c0d3709h,09a685b3eh,05add2b06h,014ea5d65h,0363ad32dh,08d7dd506h,0f8e01f06h,075b4aac6h,0c9ea2213h,00d353466h,0ed2a2bf9h
- DD 0e9d3a7c3h,0439d79b5h,081b7f34bh,08e0ee5a6h,01dc4ba75h,0cf3dacf5h,0eb3310c7h,01d3d1773h,07747ae83h,0a8e67112h,0197d6b40h,031f43160h,0cd961400h,00521cceeh,0f6535768h,067246f11h
- DD 0ef0c3133h,0702fcc5ah,07e16693bh,0247cc45dh,0c729b749h,0fd484e49h,0b218320fh,0522cef7dh,059ab93b3h,0e56ef405h,09f181071h,0225fba11h,015330ed0h,033bd6595h,01ddb32f7h,0c4be69d5h
- DD 00448087ch,0264c7668h,071432daeh,0ac30903fh,000f9bf47h,03851b266h,06cdd6d03h,0400ed311h,0f8fd2424h,0045e79feh,0fa6da98bh,0fdfd974ah,00c1e673ah,045c9f641h,05b2c5168h,076f2e733h
- DD 02a601753h,01adaebb5h,0c57c2d49h,0b286514ch,01e0bfd24h,0d8769670h,004478922h,0950c547eh,0e5d32bfeh,0d1d41969h,0750d6c3eh,030bc1472h,0e0e27f3ah,08f3679feh,0a4a6ee0ch,08f64a7dch
- DD 0633dfb1fh,02fe59937h,0977f2547h,0ea82c395h,0661ea646h,0cbdfdf1ah,0b9085451h,0c7ccc591h,081761e13h,082177962h,09196885ch,0da57596fh,028ffbd70h,0bc17e849h,02671d36fh,01e6e0a41h
- DD 04152fcf5h,061ae872ch,09e77e754h,0441c87b0h,0a34dff09h,0d0799dd5h,088a6b171h,0766b4e44h,011f1c792h,0dc06a512h,04be35c3eh,0ea02ae93h,0e90c469eh,0e5ca4d6dh,056e4ff5ch,04df4368eh
- DD 04baef62eh,07817acabh,0a85b91e8h,09f5a2202h,06ce57610h,09666ebe6h,0f73bfe03h,032ad31f3h,025bcf4d6h,0628330a4h,0515056e6h,0ea950593h,0e1332156h,059811c89h,08c11b2d7h,0c89cf1feh
- DD 004e60cc0h,075b63913h,04625d375h,0ce811e8dh,02d26e562h,0030e43fch,0608d36a0h,0fbb30b4bh,048528118h,0634ff82ch,0cd285911h,07c6fe085h,099358f28h,07f2830c0h,0665e6c09h,02e60a95eh
- DD 09b785dbfh,008407d3dh,0a759bce7h,0530889abh,052f61239h,0f228e0e6h,06879be3ch,02b6d1461h,051a7bbf7h,0e6902c04h,076f24a64h,030ad99f0h,098bc6da0h,066d9317ah,0cb596ac0h,0f4f877f3h
- DD 04c44f119h,0b05ff62dh,0e9b77416h,04555f536h,08caed63bh,0c7c0d059h,0c358b2a9h,00cd2b7ceh,046945fa3h,03f33287bh,0d67c8791h,0f8785b20h,09637bd08h,0c54a7a61h,018be79d7h,054d4598ch
- DD 0c46d7ce1h,0889e5acbh,08b085877h,09a515bb7h,00b7a5050h,0fac1a03dh,0f2926035h,07d3e738ah,02a6cb0ebh,0861cc2ceh,08f7adc79h,06f2e2955h,033016376h,061c4d451h,05ad59090h,0d9fd2c80h
- DD 0b2b836a1h,0e5a83738h,07c0d6622h,0855b41a0h,07cc19af1h,0186fe317h,0fdd99acbh,06465c1ffh,06974b99eh,046e5c23fh,0a2717cbeh,075a7cf8bh,0062be658h,04d2ebc3fh,05f209c98h,0094b4447h
- DD 0b940cb5ah,04af285edh,07cc82f10h,06706d792h,0030526fah,0c8c8776ch,0a0da9140h,0fa8e6f76h,0591ee4f0h,077ea9d34h,040274166h,05f46e337h,0ea671457h,01bdf98bbh,0862a1fe2h,0d7c08b46h
- DD 01c08ad63h,046cc303ch,04c845e7bh,099543440h,048f36bf7h,01b8fbdb5h,08c8273a7h,05b82c392h,0928435d5h,008f712c4h,079330380h,0071cf0f1h,0a8da054ah,0c74c2d24h,043c46b5ch,0cb0e7201h
- DD 0c0b7eff3h,00ad7337ah,0c5e48b3ch,08552225eh,073f13a5fh,0e6f78b0ch,082349cbeh,05e70062eh,0e7073969h,06b8d5048h,0c33cb3d2h,0392d2a29h,04ecaa20fh,0ee4f727ch,02ccde707h,0a068c99eh
- DD 0b87a2913h,0fcd5651fh,03cc252f0h,0ea3e3c15h,03b6cd3e4h,0777d92dfh,0c5a732e7h,07a414143h,0a71ff493h,0a895951ah,0bbd37cf6h,0fe980c92h,0decfeeffh,045bd5e64h,0a44c43e9h,0910dc2a9h
- DD 0cca9f54dh,0cb403f26h,09303f6dbh,0928bbdfbh,0a9eee67ch,03c37951eh,0f79961c3h,03bd61a52h,0395c9a79h,009a238e6h,061eb352dh,06940ca2dh,0c1875631h,07d1e5c5eh,01e1b20d1h,01e19742ch
- DD 023fc2e6eh,04633d908h,008959149h,0a76e29a9h,084ed7da5h,061069d9ch,05dbcad51h,00baa11cfh,0961849dah,0d01eec64h,0af3d8c28h,093b75f1fh,01ca2ee44h,057bc4f9fh,000e00558h,05a26322dh
- DD 061a023efh,01888d658h,0b9e5246eh,01d72aab4h,0e5563ec0h,0a9a26348h,0c3439a43h,0a0971963h,0adb9b5b7h,0567dd54bh,0c45a524bh,073fac1a1h,0fe38e608h,08fe97ef7h,03f384f48h,0608748d2h
- DD 0c486094fh,0b0571794h,08bf3a8d6h,0869254a3h,0310b0e25h,0148a8dd1h,09aa3f7d8h,099ab9f3fh,06706c02eh,00927c68ah,069790e6ch,022b5e76ch,06c71376ch,06c325260h,009ef6657h,053a57690h
- DD 0edffcf3ah,08d63f852h,03c0a6f55h,0b4d2ed04h,012519b9eh,0db3aa8deh,01e0a569ah,05d38e9c4h,0303747e2h,0871528bfh,0f5b5c18dh,0a208e77ch,0ca6bf923h,09d129c88h,0bf02839fh,0bcbf197fh
- DD 027323194h,09b9bf030h,0339ca59dh,03b055a8bh,00f669520h,0b46b2312h,0497e5f24h,019789f1fh,0aaf01801h,09c499468h,08b69d59ch,072ee1190h,0acf4c079h,08bd39595h,08e0cd048h,03ee11eceh
- DD 01ed66f18h,0ebde86ech,0d61fce43h,0225d906bh,0e8bed74dh,05cab07d6h,027855ab7h,016e4617fh,0b2fbc3ddh,06568aaddh,08aeddf5bh,0edb5484fh,06dcf2fadh,0878f20e8h,0615f5699h,03516497ch
- DD 0fa181e69h,0ef0a3fech,030d69a98h,09ea02f81h,066eab95dh,0b2e9cf8eh,024720021h,0520f2bebh,01df84361h,0621c540ah,071fa6d5dh,012037721h,00ff5f6ffh,06e3c7b51h,0abb2bef3h,0817a069bh
- DD 0b294cda6h,083572fb6h,0b9039f34h,06ce9bf75h,0095cbb21h,020e012f0h,0d063f0dah,0a0aecc1bh,0f02909e5h,057c21c3ah,048ce9cdch,0c7d59ecfh,08ae336f8h,02732b844h,03f4f85f4h,0056e3723h
- DD 089e800cah,08a10b531h,0145208fdh,050fe0c17h,0b714ba37h,09e43c0d3h,034189acch,0427d200eh,0e616e2c0h,005dee24fh,0ee1854c1h,09c25f4c8h,08f342a73h,04d3222a5h,0a027c952h,00807804fh
- DD 04f0d56f3h,0c222653ah,0ca28b805h,0961e4047h,04a73434bh,02c03f8b0h,0ab712a19h,04c966787h,0864fee42h,0cc196c42h,05b0ece5ch,0c1be93dah,0c131c159h,0a87d9f22h,0dce45655h,02bb6d593h
- DD 0b809b7ceh,022c49ec9h,0e2c72c2ch,08a41486bh,0fea0bf36h,0813b9420h,0a66dac69h,0b3d36ee9h,0328cc987h,06fddc08ah,03a326461h,00a3bcd2ch,0d810dbbah,07103c49dh,04b78a4c4h,0f9d81a28h
- DD 0e4d55941h,03de865adh,030384087h,0dedafa5eh,04ef18b9bh,06f414abbh,0faee5268h,09ee9ea42h,037a55a4ah,0260faa16h,0015f93b9h,0eb19a514h,09e9c3598h,051d7ebd2h,01932178eh,0523fc56dh
- DD 0b98fe684h,0501d070ch,0124a1458h,0d60fbe9ah,092bc6b3fh,0a45761c8h,0fe6f27cbh,0f5384858h,0b59e763bh,04b0271f7h,05b5a8e5eh,03d4606a9h,005a48292h,01eda5d9bh,0e6fec446h,0da7731d0h
- DD 090d45871h,0a3e33693h,006166d8dh,0e9764040h,089a90403h,0b5c33682h,072f1d637h,04bd17983h,0d5d2c53ah,0a616679eh,0fdcf3b87h,05ec4bcd8h,0b66a694eh,0ae6d7613h,0e3fc27e5h,07460fc76h
- DD 095caabeeh,070469b82h,0889501e3h,0de024ca5h,0076ed265h,06bdadc06h,05a0ef8b2h,00cb1236bh,00972ebf9h,04065ddbfh,022aca432h,0f1dd3875h,0744aff76h,0a88b97cfh,0fe8e3d24h,0d1359afdh
- DD 091502cf3h,052a3ba2bh,0084db75dh,02c3832a8h,0de30b1c9h,004a12dddh,0e31fd60ch,07802eabch,0a37fddabh,033707327h,0faafa973h,065d6f2abh,011e6f91ah,03525c5b8h,05f46530bh,076aeb0c9h
- DD 02f93a675h,0e8815ff6h,005f48679h,0a6ec9684h,0358ae884h,06dcbb556h,0e19e3873h,00af61472h,0a5f696beh,072334372h,06f22fb70h,0c65e57eah,0946cea90h,0268da30ch,065681b2ah,0136a8a87h
- DD 00f9f44d4h,0ad5e81dch,02c46585ah,0f09a6960h,0c447d1b1h,0d1649164h,0879dc8b1h,03b4b36c8h,03b6b234ch,020d4177bh,01730d9d0h,0096a2505h,0ef80531dh,00611b9b8h,064bb495dh,0ba904b3bh
- DD 093a3147ah,01192d9d4h,09a565545h,09f30a5dch,06ef07212h,090b1f9cbh,00d87fc13h,029958546h,0c17db9bah,0d3323effh,0cb1644a8h,0cb18548ch,04f49ffbch,018a306d4h,04c2e8684h,028d658f1h
- DD 0a99f8c71h,044ba60cdh,04bf742ffh,067b7abdbh,0914b3f99h,066310f9ch,0f412c161h,0ae430a32h,088ace52fh,01e6776d3h,052d7067dh,04bc0fa24h,08f07cd1bh,003c286aah,0a985b2c1h,04cb8f38ch
- DD 08c3bff36h,083ccbe80h,05263e575h,0005a0bd2h,0259bdcd1h,0460d7ddah,0fa5cab6bh,04a1c5642h,09fe4fc88h,02b7bdbb9h,0cc97bbb5h,009418e28h,0a12321aeh,0d8274fb4h,05c87b64eh,0b137007dh
- DD 0c63c4962h,080531fe1h,0981fdb25h,050541e89h,0fd4c2b6bh,0dc1291a1h,0a6df4fcah,0c0693a17h,00117f203h,0b2c4604eh,00a99b8d0h,0245f1963h,0c6212c44h,0aedc20aah,0520f52a8h,0b1ed4e56h
- DD 0f8547be3h,0fe48f575h,0a9e45f98h,00a7033cdh,018c50100h,04b45d3a9h,0a61d41dah,0b2a6cd6ah,057933c6bh,060bbb4f5h,02b0d7ffch,0a7538ebdh,08cd626b6h,09ea3ab8dh,03601625ah,08273a484h
- DD 00168e508h,088859845h,099a94abdh,08cbc9bb2h,0fab0a671h,0713ac792h,06c9ebffch,0a3995b19h,01239e152h,0e711668eh,0bbb8dff4h,056892558h,0dbf17963h,08bfc7dabh,0b3de1253h,05b59fe5ah
- DD 034a9f7aeh,07e3320ebh,0d751efe4h,0e5e8cf72h,0d9be2f37h,07ea003bch,0b6c08ef7h,0c0f551a0h,0038f6725h,056606268h,06d92d3b6h,01dd38e35h,0c3cbd686h,007dfce7ch,0651c5da8h,04e549e04h
- DD 008b19340h,04058f93bh,0cac6d89dh,0c2fae6f4h,08f159cc7h,04bad8a8ch,0cb0b601ch,00ddba4b3h,01dd95f8ch,0da4fc7b5h,0cea5c255h,01d163cd7h,0274a8c4ch,030707d06h,02802e9ceh,079d9e008h
- DD 0e6ddd505h,002a29ebfh,0b50bed1ah,037064e74h,0a7327d57h,03f6bae65h,0f83920bch,03846f5f1h,060df1b9bh,087c37491h,02d1da29fh,04cfb2895h,04ed1743ch,010a478cah,03edd47c6h,0390c6030h
- DD 08c0a78deh,08f3e5312h,01e85df70h,0ccd02bdah,0a61b6582h,0d6c75c03h,0fc0eebd1h,00762921ch,0d85010c0h,0d34d0823h,00044cf1fh,0d73aaacbh,0a3b5e78ah,0fb4159bbh,0e5826f3fh,02287c7f7h
- DD 0580b1a01h,04aeaf742h,060423b79h,0f080415dh,0a7dea144h,0e12622cdh,059d62472h,049ea4996h,0571f3913h,0b42991efh,0f5b25a8ah,00610f214h,030b79e8fh,047adc585h,007a065a2h,0f90e3df6h
- DD 043e2e034h,05d0a5debh,0444024aah,053fb5a34h,06b0c9f7fh,0a8628c68h,0ac563656h,09c69c29ch,0bace47b6h,05a231febh,09ea5a2ech,0bdce0289h,09463853eh,005da1fach,0509e78aah,096812c52h
- DD 057151692h,0d3fb5771h,0d98e1c44h,0eb2721f8h,032399be1h,0c0506087h,0d979d8b8h,0da5a5511h,0c6f56780h,0737ed55dh,00dc7a7f4h,0e20d3004h,0f5941a03h,002ce7301h,0ed30f83ah,091ef5215h
- DD 04092d85fh,028727fc1h,05c49e41ah,072d223c6h,0ba6a4d81h,0a7cf30a2h,0b030d87dh,07c086209h,0fc588b09h,004844c7dh,05874bbb0h,0728cd499h,0e84c0495h,0cc1281eeh,0ec31958fh,00769b5bah
- DD 0f99c2471h,0665c228bh,0191eb110h,0f2d8a11bh,0d36d7024h,04594f494h,0cdcb25a1h,0482ded8bh,0dadd4885h,0c958a9d8h,0f1d2b547h,07004477eh,02a0af550h,00a45f6efh,02f8d6351h,04fc739d6h
- DD 0786f08a9h,075cdaf27h,042c2737fh,08700bb26h,01c4e2670h,0855a7141h,015076fefh,0810188c1h,0abcd3297h,0c251d0c9h,0f48108ebh,0ae4c8967h,018ceed30h,0bd146de7h,0c986bcedh,0f9d4f07ah
- DD 083fa1e08h,05ad98ed5h,0beabd1fbh,07780d33eh,0903b1196h,0e330513ch,0a47bc8c4h,0ba11de9eh,002c2d064h,0684334dah,0a48de23bh,07ecf360dh,00a9089d8h,057a1b474h,0ff36734ch,0f28fa439h
- DD 0ea4570b3h,0f2a482cbh,0a5ebcee9h,0ee65d68bh,0b9694cd5h,0988d0036h,037885d32h,053edd0e9h,0beb9bc6dh,0e37e3307h,09f5c6768h,0e9abb907h,051f2160fh,04396ccd5h,047336da6h,02500888ch
- DD 0926fce43h,0383f9ed9h,004da2930h,0809dd1c7h,08a4cb227h,030f6f596h,073a56b38h,00d700c7fh,0ab64a065h,01825ea33h,01338df80h,0aab9b735h,09b63f57fh,01516100dh,027a6a634h,02574395ah
- DD 0700a1acdh,0b5560fb6h,0fd999681h,0e823fd73h,06cb4e1bah,0da915d1fh,06ebe00a3h,00d030118h,089fca8cdh,0744fb0c9h,0f9da0e0bh,0970d01dbh,07931d76fh,00ad8c564h,0f659b96ah,0b15737bfh
- DD 0a8b484e7h,0dc9933e8h,07a26dec7h,0b2fdbdf9h,09f1f0136h,02349e9a4h,070fddddbh,07860368eh,0f9ad3e18h,0d93d2c1ch,0689f4e79h,06d6c5f17h,0b24ff1b6h,07a544d91h,0fe16cd8ch,03e12a5ebh
- DD 0a56b872fh,0543574e9h,0fcf68ea2h,0a1ad550ch,03f560ef7h,0689e37d2h,0c9d47a8bh,08c54b9cah,0088ac342h,046d40a4ah,01576c6d0h,0ec450c7ch,01f9689e9h,0b589e31ch,0b8781718h,0dacf2602h
- DD 0c8cb6b42h,0a89237c6h,0b96ef381h,01326fc93h,0b5f07825h,055d56c6dh,07449e22dh,0acba2eeah,0633c3000h,074e0887ah,0d7cbcf71h,0cb6cd172h,0c36cf1beh,0309e81deh,060ae399bh,007a18a6dh
- DD 09edce57eh,0b36c2679h,0df001d41h,052b892f4h,016a1f2c6h,0d884ae5dh,0efcc370ah,09b329424h,0bd2e21dfh,03120daf2h,002470a99h,055298d2dh,0a05db32eh,00b78af6ch,0601f5636h,05c76a331h
- DD 0f8a4f29ch,0aae861ffh,0d68f8d49h,070dc9240h,081b1321ch,0960e649fh,08792e4ceh,03d2c801bh,042521876h,0f479f772h,0416c79b1h,00bed93bch,0263e5bc9h,0a67fbc05h,0521db049h,001e8e630h
- DD 0c6f3431eh,076f26738h,0e3267541h,0e609cb02h,0818c877ch,0b10cff2dh,0786a13cbh,01f0e75ceh,01158544dh,0f4fdca64h,06cb71ed0h,05d777e89h,0a9aa4755h,03c233737h,0e527ab40h,07b453192h
- DD 039f05ffeh,0db59f688h,06d82574eh,08f4f4be0h,0ee292d1bh,0cce3450ch,061ccd086h,0aa448a12h,0f7914967h,0abce91b3h,01908a5edh,04537f09bh,0f51042e7h,0a812421eh,0ec0b3a34h,0faf5cebch
- DD 04ca6b39ah,0730ffd87h,002efd342h,070fb72edh,0d75c8edbh,0eb4735f9h,0c278aa51h,0c11f2157h,0bf3bfebfh,0c459f635h,06bd9601fh,03a1ff0b4h,0c420cb73h,0c9d12823h,03c2915a3h,03e9af3e2h
- DD 0b41c3440h,0e0c82c72h,0e3039a5fh,0175239e5h,0558795a3h,0e1084b8ah,0d01e5c60h,0328d0a1dh,0d3788a04h,00a495f2eh,066c11a9fh,025d8ff16h,09ed692d6h,0f5155f05h,04f425fe4h,0954fa107h
- DD 0e98aaa99h,0d16aabf2h,096b0f88ah,090cd8ba0h,0c154026ah,0957f4782h,052af56d2h,054ee0734h,045b4147ah,0bcf89e54h,09a52816ch,03d102f21h,039b62e77h,06808517eh,069169ad8h,092e25421h
- DD 0bb608558h,0d721d871h,0f6d4ff9bh,060e4ebaeh,041f2763eh,00ba10819h,051ee3247h,0ca2e45beh,02bfd7a5fh,066d172ech,074d0b12dh,0528a8f2fh,0dabe70dch,0e17f1e38h,09f93983ch,01d5d7316h
- DD 0df423e31h,051b2184ah,0aedb1a10h,0cb417291h,0625bcab9h,02054ca93h,0a98998f0h,054396860h,0a54ae57eh,04e53f6c4h,0ee648e9dh,00ffeb590h,06afaf6bch,0fbbdaadch,0aa3bfb8ah,0f88ae796h
- DD 0d2359ed9h,0209f1d44h,0f3544ce2h,0ac68dd03h,0fd51e569h,0f378da47h,02cc80097h,0e1abd860h,0343b6e3ah,023ca18d9h,0b40a1baeh,0480797e8h,0533f3e67h,0d1f0c717h,006e6cdfch,044896970h
- DD 052a82e8dh,08ca21055h,078460cdch,0b2caf785h,0e9037178h,04c1b7b62h,0db514b58h,0efc09d2ch,09113be5ch,05f2df9eeh,0b3f9271ch,02fbda78fh,08f83fc54h,0e09a81afh,08afb5141h,006b13866h
- DD 043e3865dh,038f6480fh,01ddf47d9h,072dd77a8h,04c205ff7h,0f2a8e971h,09d088ad8h,046d449d8h,0185d706fh,0926619eah,0c7dd7f62h,0e47e02ebh,08cbc2031h,0e7f120a7h,0998d4ac9h,0c18bef00h
- DD 06bdf22dah,018f37a9ch,090dc82dfh,0efbc432fh,05d703651h,0c52cef8eh,0d99881a5h,082887ba0h,0b920ec1dh,07cec9ddah,0ec3e8d3bh,0d0d7e8c3h,04ca88747h,0445bc395h,09fd53535h,0edeaa2e0h
- DD 06cc87475h,0461b1d93h,06d2383bdh,0d92a52e2h,0d7903546h,0fabccb59h,03d14b112h,06111a761h,0b3d5f612h,00ae584feh,060e828ech,05ea69b8dh,054087030h,06c078985h,0ac4821feh,0649cab04h
- DD 08bdce214h,025ecedcfh,086af7361h,0b5622f72h,07038b9e2h,00e1227aah,0ac20fa77h,0d0efb273h,079df975bh,0817ff88bh,01999503eh,0856bf286h,05038ec46h,0b4d5351fh,0fc42af6eh,0740a52c5h
- DD 02cbb1a3fh,02e38bb15h,017a83429h,0c3eb99feh,0dd66bb74h,0ca4fcbf1h,0cde5e8fch,0880784d6h,0b4e7a0beh,0ddc84c1ch,0bd15a72fh,08780510dh,081ec30e1h,044bcf1afh,00a61073eh,0141e50a8h
- DD 047be87aeh,00d955718h,0f76a4372h,068a61417h,0c607c3d3h,0f57e7e87h,05252f332h,0043afaf8h,01552a4d2h,0cc14e121h,0bb4d4ab4h,0b6dee692h,0a03816a4h,0b6ab74c8h,06f394a29h,084001ae4h
- DD 0d795fb45h,05bed8344h,0b79f55a5h,057326e7dh,04accdffch,0c9533ce0h,03993fa04h,053473cafh,0a13df4c8h,07906eb93h,097cbe46fh,0a73e51f6h,00ae4ccf8h,0d1ab3ae1h,08a5b3dbch,025614508h
- DD 011a71b27h,061eff962h,06bb7fa39h,0df71412bh,02bd7f3efh,0b31ba6b8h,069180d29h,0b0b9c415h,0014cdde5h,0eec14552h,0227b4bbbh,0702c624bh,0d3e988f3h,02b15e8c2h,0a4f7fd04h,0ee3bcc6dh
- DD 042ac6c85h,09d00822ah,01df9f2b7h,02db0cea6h,042de1e58h,0d7cad2abh,02d6fbb61h,0346ed526h,01a2faf09h,0b3962995h,07c25612eh,02fa8a580h,07cf56490h,030ae04dah,00eea3961h,075662908h
- DD 03d080847h,03609f5c5h,05241d4f6h,0cb081d39h,077961a63h,0b4fb3810h,02abb66fch,0c20c5984h,0f902f245h,03d40aa7ch,04e536b1eh,09cb12736h,099b3134fh,05eda24dah,05cd011afh,0afbd9c69h
- DD 0c7088c7dh,09a16e30ah,03207389fh,05ab65710h,0e7407a53h,01b09547fh,04fdc6eabh,02322f9d7h,07430de4dh,0c0f2f22dh,0e68ca9a9h,019382696h,0918e5868h,017f1eff1h,0586f4204h,0e3b5b635h
- DD 03fbc4341h,0146ef980h,05b5eed4eh,0359f2c80h,07482e41dh,09f35744eh,0f3b224c2h,09a9ac3ech,091fc50aeh,09161a6feh,0c613fa7ch,089ccc66bh,0c732f15ah,089268b14h,0b467ed03h,07cd6f4e2h
- DD 0ce56b40eh,0fbf79869h,0c02dde98h,0f93e094ch,0edee2cd7h,0efe0c3a8h,0b268fd42h,090f3ffc0h,008241aedh,081a7fd56h,000b1afe8h,095ab7ad8h,03e310d52h,040127056h,009d9fc43h,0d3ffdeb1h
- DD 0d11a8594h,0c8f85c91h,031cf6db8h,02e74d258h,002b5dfd0h,0829c7ca3h,069143c86h,0e389cfbeh,0941768d8h,0d01b6405h,003bf825dh,045103995h,056cd17e2h,0cc4ee166h,0ba037e79h,0bea3c283h
- DD 0d9a47520h,04e1ac06eh,0af852404h,0fbfe18aah,08087648ah,05615f8e2h,0b9d150d9h,07301e47eh,0b299b977h,079f9f9ddh,0a5b78314h,076697a7bh,07d7c90e7h,010d67468h,0937210b5h,07afffe03h
- DD 028c22ceeh,05aef3e4bh,009fd55aeh,0efb0ecd8h,00d2a5d6ah,04cea7132h,001db6357h,09cfb5fa1h,0f36e1ac5h,0395e0b57h,036cafb7dh,0008fa9adh,05308c4dbh,08f6cdf70h,095ed2477h,051527a37h
- DD 05bd21311h,0ba0dee30h,0909c90d7h,06ed41b22h,07c8696d3h,0c5f6b758h,03ce83a80h,00db8eaa8h,0b24b4b6fh,0d297fe37h,0522d1f0dh,0fe58afe8h,08c98dbd9h,097358736h,09454a527h,06bc226cah
- DD 0ce53c2d0h,0a12b384eh,05e4606dah,0779d897dh,073ec12b0h,0a53e47b0h,05756f1adh,0462dbbbah,0cafe37b6h,069fe09f2h,0ecce2e17h,0273d1ebfh,03cf607fdh,08ac1d538h,012e10c25h,08035f7ffh
- DD 07e6c5520h,0854d34c7h,0dcb9ea58h,0c27df9efh,0d686666dh,0405f2369h,00417aa85h,029d1febfh,093470afeh,09846819eh,0e2a27f9eh,03e6a9669h,0e31e6504h,024d008a2h,09cb7680ah,0dba7cecfh
- DD 0338d6e43h,0ecaff541h,04541d5cch,056f7dd73h,096bc88cah,0b5d426deh,09ed3a2c3h,048d94f6bh,02ef8279ch,06354a3bbh,00b1867f2h,0d575465bh,095225151h,0ef99b0ffh,0f94500d8h,0f3e19d88h
- DD 0e32dd620h,092a83268h,0627849a2h,0913ec99fh,02c378882h,0edd8fdfah,0ee6f8cfeh,0af96f33eh,0dc3fa8a5h,0c06737e5h,0b0b03a1dh,0236bb531h,089f037b0h,033e59f29h,0d9a12a53h,013f9b5a7h
- DD 051efb310h,00d0df6ceh,0958df5beh,0cb5b2eb4h,036158e59h,0d6459e29h,01466e336h,082aae2b9h,0411aa636h,0fb658a39h,0d4c0a933h,07152ecc5h,049f026b7h,0f10c758ah,0cb09311fh,0f4837f97h
- DD 0c753c45fh,0ddfb02c4h,0f9c840feh,018ca81b6h,0b0f8a3e6h,0846fd09ah,0e7733dbch,0b1162addh,0236e3ab6h,07070ad20h,0b2a56326h,0f88cdaf5h,0997cbc7ah,005fc8719h,04b665272h,0442cd452h
- DD 0b71698f5h,07807f364h,09f7b605eh,06ba418d2h,0a03b2cbbh,0fd20b00fh,0da54386fh,0883eca37h,0f3437f24h,0ff0be43fh,0a48bb33ch,0e910b432h,0329df765h,04963a128h,0be2fe6f7h,0ac1dd556h
- DD 024a0a3fch,0557610f9h,0e881c3f9h,038e17bf4h,0ed0dac99h,06ba84fafh,059eeb918h,0d4a222c3h,013f542b6h,0c79c1dbeh,0e425d457h,01fc65e0dh,01debb779h,0effb754fh,09e08af60h,0638d8fd0h
- DD 0626332d5h,0994f523ah,05561bb44h,07bc38833h,03d845ea2h,0005ed4b0h,0c2a1f08ah,0d39d3ee1h,0e7676b0dh,06561fdd3h,0fb706017h,0620e35ffh,0f264f9a8h,036ce424fh,0da2681f7h,0c4c3419fh
- DD 069beb6e8h,0fb6afd2fh,06d700d03h,03a50b993h,00c83a14fh,0c840b2adh,054085befh,0573207beh,009fe7e5bh,05af882e3h,03b40a7e1h,0957678a4h,0543056e2h,0172d4bddh,00df13c0ah,09c1b26b4h
- DD 0f405ff06h,01c30861ch,0486e828bh,0ebac86bdh,0636933fch,0e791a971h,07aeee947h,050e7c2beh,0fa90d767h,0c3d4a095h,0e670ab7bh,0ae60eb7bh,0397b056dh,017633a64h,0105012aah,093a21f33h
- DD 0abb88643h,0663c370bh,022e21599h,091df36d7h,08b761671h,0183ba835h,0728f3bf1h,0381eea1dh,039966e6ch,0b9b2f1bah,0e7295492h,07c464a28h,009b26b7fh,00fd5f70ah,0fbe009dfh,0a9aba1f9h
- DD 0369b87adh,0857c1f22h,032fca556h,03c00e5d9h,090b06466h,01ad74cabh,0550faaf2h,0a7112386h,06d9bd5f5h,07435e198h,059c3463fh,02dcc7e38h,0ca7bd4b2h,0dc7df748h,09dec2f31h,013cd4c08h
- DD 0e3237710h,00d3b5df8h,0cbd2f7b0h,00dadb26eh,0e4aa082bh,09f5966abh,0350e966eh,0666ec8deh,0ee524216h,01bfd1ed5h,041dab0b6h,0cd93c59bh,0d186d6bah,0658a8435h,0159d1195h,01b7d34d2h
- DD 022caf46bh,05936e460h,09a96fe4fh,06a45dd8fh,0b98f474eh,0f7925434h,00053ef15h,041410412h,041de97bfh,071cf8d12h,0bd80bef4h,0b8547b61h,0c4db0037h,0b47d3970h,0fef20dffh,0f1bcd328h
- DD 010caad67h,031a92e09h,05531a1e1h,01f591960h,05f4fc840h,03bb852e0h,093a72c6ch,063e297cah,049abad67h,03c2b0b2eh,0ed3db0d9h,06ec405fch,07fef1d40h,0dc14a530h,0280896fch,0ccd19846h
- DD 09bb81648h,000f83176h,0653120d0h,0d69eb485h,04ccabc62h,0d17d75f4h,0b749fcb1h,034a07f82h,0bbfb5554h,02c3af787h,062e283f8h,0b06ed4d0h,0a19213a0h,05722889fh,0dcf3c7b4h,0162b085eh
- DD 0e0dd3ecah,0bcaecb31h,0e52f13a5h,0c6237fbch,027bac297h,0cc2b6b03h,0b917f54ah,02ae1cac5h,07845ae4fh,0474807d4h,0ce5972e0h,0fec7dd92h,01d7915bbh,0c3bd2541h,0d94907cah,066f85dc4h
- DD 0bdbcf0cah,0d981b888h,0df279e9fh,0d75f5da6h,07054e934h,0128bbf24h,081db134bh,03c6ff6e5h,0047d26e4h,0795b7cf4h,05049ec37h,0f370f7b8h,0ced945afh,0c6712d4dh,0095642bch,0df30b5ech
- DD 04896246eh,09b034c62h,0ee90bbd1h,05652c016h,087fedb73h,0eb38636fh,00135a613h,05e32f847h,0cf933c83h,00703b312h,01a7f47e6h,0d05bb76eh,0949c2415h,0825e4f0ch,07250d6f8h,0569e5622h
- DD 06568013eh,0bbe9eb3ah,022f243fch,08dbd203fh,0b342734ah,09dbd7694h,046afa984h,08f6d12f8h,0c9eade29h,0b98610a2h,047dd0f18h,0bab4f323h,0671c0d46h,05779737bh,0d3e0a42ah,010b6a7c6h
- DD 03035b41ch,0fb19ddf3h,099c45895h,0d336343fh,054c857e5h,061fe4938h,0ae4e57d5h,0c4d506beh,0bbc33f75h,03cd8c8cbh,09262c77dh,07281f08ah,0f11a2823h,0083f4ea6h,09fba2e33h,08895041eh
- DD 09c438edfh,0fcdfea49h,091edba44h,07678dcc3h,0e2ba50f0h,0f07b3b87h,043948c1bh,0c13888efh,01140af42h,0c2135ad4h,0926ed1a7h,08e5104f3h,088f6695fh,0f24430cbh,06d73c120h,00ce0637bh
- DD 0fe631e8fh,0b2db01e6h,0d7bdd24bh,01c5563d7h,0369ad44fh,08daea3bah,08187a9f9h,0000c81b6h,0aae1fd9ah,05f48a951h,08d5aed8ah,0e35626c7h,00498c622h,020952763h,0773aa504h,076d17634h
- DD 0eb300f7ah,036d90ddah,0edb5e801h,09dcf7dfch,074d5244ch,0645cb268h,0348e3aa2h,0a127ee79h,0575f1dbbh,0488acc53h,080e6161eh,095037e85h,0292650d0h,057e59283h,014938216h,0abe67d99h
- DD 03f8e1065h,03c7f944bh,0330e8924h,0ed908cb6h,06f530136h,008ee8fd5h,0d7ffc169h,02227b7d5h,0b5cd6dd5h,04f55c893h,0a62796e8h,082225e11h,0cb18e12ch,05c6cead1h,084f5a51ah,04381ae0ch
- DD 07fafa4c8h,0345913d3h,00491aac0h,03d918082h,03e69264ch,09347871fh,0b4f4f0cdh,0bea9dd3ch,03eadd3e7h,0bda5d067h,00573bcd8h,00033c1b8h,05da2486ch,025589379h,086abbee7h,0cb89ee5bh
- DD 022532e5dh,08fe0a8f3h,0727dfc4ch,0b6410ff0h,0226726dbh,0619b9d58h,07a2b2dc7h,05ec25669h,04c3beb01h,0af4d2e06h,07acea556h,0852123d0h,0f783487ah,00e9470fah,05664b3ebh,075a7ea04h
- DD 06798e4bah,04ad78f35h,0c7d0e091h,09214e6e5h,0b1290403h,0c420b488h,0fc295749h,064049e0ah,03ae9841fh,003ef5af1h,0b0b662a6h,0dbe4ca19h,0fa453458h,046845c5fh,010b66722h,0f8dabf19h
- DD 0cce2793bh,0b650f0aah,0c5ec47c1h,071db851eh,03b234fa9h,03eb78f3eh,0fc0106ceh,0b0c60f35h,0774eadbdh,005427121h,0ce323863h,025367fafh,0cd086976h,07541b5c9h,0dc507ad1h,04ff069e2h
- DD 08776e667h,074145256h,0b23c6bb5h,06e76142ch,01b3a8a87h,0dbf30712h,098450836h,060e7363eh,0b7366d80h,05741450eh,04837dbdfh,0e4ee14cah,069d4316fh,0a765eb9bh,08ef43825h,004548dcah
- DD 05ae888ebh,09c9f4e4ch,056e9ac99h,0733abb51h,0ba6ac029h,0daad3c20h,02ba3e38eh,09b8dd3d3h,00bc5d11ah,0a9bb4c92h,09c5f88a3h,0f20127a7h,0161d3cb8h,04f52b06eh,06afaf0a6h,026c1ff09h
- DD 07189e71fh,032670d2fh,05ecf91e7h,0c6438748h,0db757a21h,015758e57h,0290a9ce5h,0427d09f8h,038384a7ah,0846a308fh,0b0732b99h,0aac3acb4h,017845819h,09e941009h,0a7ce5e03h,095cba111h
- DD 0b00009c4h,06f3d4f7fh,08ff28b5fh,0b8396c27h,01c97975dh,0b1a9ae43h,0e5d9fed5h,09d7ba8afh,034f485b6h,0338cf09fh,064122516h,0bc0ddacch,005d471feh,0a450da12h,0628dd8c9h,04c3a6250h
- DD 0d1295837h,069c7d103h,03807eb2fh,0a2893e50h,0bdb41491h,0d6e1e1deh,05e138235h,0c630745bh,048661ae1h,0c892109eh,0ea2b2674h,08d17e7ebh,0c328d6b5h,000ec0f87h,0f079ff9eh,06d858645h
- DD 019115eadh,06cdf243eh,04bac4fcfh,01ce1393eh,09c29f25bh,02c960ed0h,09d388a05h,059be4d8eh,0d0def72bh,00d46e06ch,0e0342748h,0b923db5dh,0936d4a3dh,0f7d3aacdh,00b0b099eh,0558519cch
- DD 0827097efh,03ea8ebf8h,0d054f55dh,0259353dbh,06d2ed089h,084c89abch,08e096a7ch,05c548b69h,0994b995dh,0d587f616h,0a5845601h,04d1531f6h,0451fd9f0h,0792ab31eh,065adf6cah,0c8b57bb2h
- DD 01cd5ad73h,068440fcbh,06144da4fh,0b9c860e6h,08462beb8h,02ab286aah,0ef46797fh,0cc6b8fffh,020c8a471h,0ac820da4h,077ff7fafh,069ae05a1h,0bfb5da77h,0b9163f39h,02c73ab7ah,0bd03e590h
- DD 0b2940d9eh,07e862b5eh,04b9af564h,03c663d86h,0bde3033dh,0d8309031h,0d42c5bc6h,0298231b2h,0552ad093h,042090d2ch,0ff854695h,0a4799d1ch,0d31f0d00h,00a88b5d6h,0a2f26b46h,0f8b40825h
- DD 0f1bd7218h,0ec29b1edh,04b24c86eh,0d491c53bh,03395ea65h,0d2fe588fh,04456ef15h,06f3764f7h,0cdc34800h,0db43116dh,0c1e33955h,0cdbcd456h,074ab286bh,0efdb5540h,0d18c5d7ch,0948c7a51h
- DD 07378058eh,0eb81aa37h,004411154h,041c746a1h,0fb828ac7h,0a10c73bch,09d972b29h,06439be91h,043a2fbadh,04bf3b4b0h,082b5e840h,039e6dadfh,06397bd4ch,04f716408h,07f1eeccbh,00f7de568h
- DD 0d2ffbfc1h,05865c5a1h,04ccb6451h,0f74211fah,0c0b32558h,066368a88h,09ad7812eh,05b539dc2h,02f3af6f6h,0579483d0h,099934eceh,052132078h,0dcc9e983h,050b9650fh,0aee42b8ah,0ca989ec9h
- DD 0d6f62f99h,06a44c829h,04c2a7c0ch,08f06a309h,098a0cb0ah,04ea2b3a0h,0beee8364h,05c547b70h,0682afe11h,0461d40e1h,07b41c0a8h,09e0fc77ah,0e20d5d36h,079e4aefdh,032dd9f63h,02916e520h
- DD 03f883fafh,0f59e52e8h,02b868d35h,0396f9639h,04ca19881h,0c902a9dfh,0db2401a6h,00fc96822h,066f1c68dh,041237587h,0fb476c0dh,010fc6de3h,0841f5d90h,0f8b6b579h,0fa24f44ah,02ba8446ch
- DD 0ef4a9975h,0a237b920h,02330435fh,060bb6004h,0cfb7e7b5h,0d6f4ab5ah,083435391h,0b2ac5097h,0b0d1ea67h,0f036ee2fh,074c56230h,0ae779a6ah,0ab838ae6h,059bff8c8h,09b38e6f0h,0cd83ca99h
- DD 0e33deed3h,0bb27bef5h,0001892a8h,0e6356f6fh,07adfbd3eh,0bf3be6cch,033d1ac9dh,0aecbc81ch,0e6e861dch,0e4feb909h,053f5f801h,090a247a4h,027346e57h,001c50acbh,0461acc1bh,0ce29242eh
- DD 02f998a91h,004dd214ah,0d4baf27bh,0271ee9b1h,0e8c26722h,07e3027d1h,01820dce5h,021d1645ch,07501779ch,0086f242ch,0fa0e8009h,0f0061407h,060187129h,0f23ce477h,00fde9bd0h,005bbdedbh
- DD 025d98473h,0682f4832h,05c658427h,0f207fe85h,04166ffa1h,0b6fdd7bah,09eed799dh,00c314056h,04107e28fh,00db8048fh,041216840h,074ed3871h,056a3c06eh,074489f8fh,012777134h,01e1c005bh
- DD 0f37ec3c3h,0db332a73h,0dd59eba0h,0c65259bdh,0db4d3257h,02291709ch,0bd389390h,09a793b25h,0e43756f0h,0f39fe34bh,09afb56c9h,02f76bdceh,061208b27h,09f37867ah,0089972c3h,0ea1d4307h
- DD 08bdf623ah,08c595330h,08441fb7dh,05f5accdah,032ddfd95h,0fafa9418h,00fde9be7h,06ad40c5ah,0aeca8709h,043faba89h,02c248a9dh,0c64a7cf1h,072637a76h,016620252h,022b8d1bbh,0aee1c791h
- DD 021a843b2h,0f0f798fdh,08d005cb1h,056e4ed4dh,01f0d8abeh,0355f7780h,034522326h,0197b04cfh,0fd42c13fh,041f9b31fh,0b40f933dh,05ef7feb2h,05d60bad4h,027326f42h,08c92cf89h,0027ecdb2h
- DD 04e3352feh,004aae4d1h,073591b90h,008414d2fh,0b7da7d60h,05ed6124eh,04d13d4ech,0b985b931h,096bf36f9h,0a592d3abh,0bbdf51dfh,0012dbed5h,0df6c177dh,0a57963c0h,087ca29cfh,0010ec869h
- DD 0bf926dffh,0ba1700f6h,0f4bf6bc2h,07c9fdbd1h,064da11f5h,0dc18dc8fh,0d938ae75h,0a6074b7ah,0e84f44a4h,014270066h,0d27b954eh,099998d38h,0b4f38e9ah,0c1be8ab2h,015c01016h,08bb55bbfh
- DD 00ea2ab30h,0f73472b4h,0f73d68ddh,0d365a340h,019c2e1ebh,0c01a7168h,034061719h,032f49e37h,001d8b4d6h,0b73c57f1h,026b47700h,003c8423ch,0a4d8826ah,0321d0bc8h,04bc0e638h,06004213ch
- DD 0c1c06681h,0f78c64a1h,0ef018e50h,016e0a16fh,0db42b2b3h,031cbdf91h,0e0d36f58h,0f8f4ffceh,04cc5e3e0h,0cdcc71cdh,0a129e3e0h,0d55c7cfah,00fb2cbf1h,0ccdb6ba0h,0c4bce3cbh,06aba0005h
- DD 0d232cfc4h,0501cdb30h,0d58a3cefh,09ddcf12eh,087e09149h,002d2cf9ch,02c976257h,0dc5d7ec7h,00b50d7ddh,06447986eh,0807f112ah,088fdbaf7h,0b00ae9f6h,058c9822ah,06d3d27e0h,06abfb950h
- DD 08a429f4fh,0d0a74487h,0db516609h,00649712bh,0e769b5dfh,0b826ba57h,01fc7aaf2h,082335df2h,05c93d995h,02389f067h,068677be6h,059ac367ah,021d9951bh,0a77985ffh,085011cceh,0038956fbh
- DD 0bb734e37h,0608e48cbh,02be5b26fh,0c08c0bf2h,0f9b1a0d9h,017bbdd3bh,010483319h,0eac7d898h,0bc1a6deah,0c95c4bafh,0172aafdbh,0fdd0e2bfh,08235c41ah,040373cbch,0fb6f41d5h,014303f21h
- DD 00408f237h,0ba063621h,0ecd2d1edh,0cad3b09ah,052abb6a2h,04667855ah,0aa8b417bh,0ba9157dch,04f013efbh,0fe7f3507h,0aa38c4a2h,01b112c4bh,09ba64345h,0a1406a60h,06993c80bh,0e53cba33h
- DD 0ded40d23h,045466063h,054908e25h,03d5f1f4dh,0403c3c31h,09ebefe62h,00672a624h,0274ea0b5h,0451d1b71h,0ff818d99h,08f79cf79h,080e82643h,073ce37f5h,0a165df13h,0fe3a21fdh,0a744ef4fh
- DD 0cf551396h,073f1e7f5h,0868c676bh,0c616898eh,08c442c36h,0671c28c7h,05e0a317dh,0cfe5e558h,07051f476h,01242d818h,014f03442h,056fad2a6h,00a44d0f6h,0262068bch,0ce6edf4eh,0dfa2cd6eh
- DD 0d15d1517h,00f43813ah,0377d44f5h,061214cb2h,0c639b35fh,0d399aa29h,054c51c19h,042136d71h,008417221h,09774711bh,052545a57h,00a5546b3h,01150582dh,080624c41h,0fbc555bch,09ec5c418h
- DD 0771849f1h,02c87dcadh,001d7bf6fh,0b0c932c5h,089116eb2h,06aa5cd3eh,051ca7bd3h,0d378c25ah,09e6e3e31h,0c612a0dah,0b68ad5d0h,00417a54dh,022c6edb8h,000451e4ah,0b42827ceh,09fbfe019h
- DD 0ba9384a2h,02fa92505h,064ad69c1h,021b8596eh,0983b35a6h,08f4fcc49h,072754672h,0de093760h,0f7bffe6dh,02f14ccc8h,05d94263dh,027566bffh,02df3ec30h,0b5b4e9c6h,03e6ea6bah,094f1d7d5h
- DD 0aaca5e9bh,097b7851ah,056713b97h,0518aa521h,0150a61f6h,03357e8c7h,0ec2c2b69h,07842e7e2h,06868a548h,08dffaf65h,0e068fc81h,0d963bd82h,065917733h,064da5c8bh,07b247328h,0927090ffh
- DD 0d298c241h,0214bc9a7h,056807cfdh,0e3b697bah,04564eadbh,0ef1c7802h,0b48149c5h,0dde8cdcfh,05a4d2604h,0946bf0a7h,06c1538afh,027154d7fh,0de5b1fcch,095cc9230h,066864f82h,0d88519e9h
- DD 07cb1282ch,0b828dd1ah,0be46973ah,0a08d7626h,0e708d6b2h,06baf8d40h,04daeb3f3h,072571fa1h,0f22dfd98h,085b1732fh,00087108dh,087ab01a7h,05988207ah,0aaaafea8h,069f00755h,0ccc832f8h
- DD 036ff3bf0h,0964d950eh,0f0b34638h,08ad20f6fh,0b5d7585fh,04d9177b3h,0ef3f019fh,0cf839760h,08288c545h,0582fc5b3h,013116bd1h,02f8e4e9bh,0332120efh,0f91e1b2fh,02a17dd23h,0cf568724h
- DD 0ca8d9d1ah,0488f1185h,0d987ded2h,0adf2c77dh,060c46124h,05f3039f0h,071e095f4h,0e5d70b75h,06260e70fh,082d58650h,0f750d105h,039d75ea7h,075bac364h,08cf3d0b1h,021d01329h,0f3a7564dh
- DD 02f52d2a7h,0182f04cdh,0e2df565ah,04fde149ah,0a79fb2f7h,0b80c5eech,022ddc897h,0ab491d7bh,0c6312c7fh,099d76c18h,06aa41a57h,0ca0d5f3dh,0d15363a0h,071207325h,0beb252c2h,0e82aa265h
- DD 0ec3128c2h,094ab4700h,08e383f49h,06c76d862h,0c03024ebh,0dc36b150h,053daac69h,0fb439477h,08dc79623h,0fc68764ah,0b440fbb2h,05b86995dh,0ccc5ee0dh,0d66879bfh,095aa8bd3h,005228942h
- DD 01e6a75c1h,0b51a40a5h,00ea7d817h,024327c76h,007774597h,006630182h,097fa7164h,0d6fdbec3h,013c90f48h,020c99dfbh,0686ef263h,0d6ac5273h,0fef64eebh,0c6a50bdch,086fdfc32h,0cd87b281h
- DD 03fcd3efch,0b24aa43eh,0b8088e9ah,0dd26c034h,0bd3d46eah,0a5ef4dc9h,08a4c6a6fh,0a2f99d58h,02f1da46ch,0ddabd355h,01afacdd1h,072c3f8ceh,092d40578h,0d90c4eeeh,0ca623b94h,0d28bb41fh
- DD 0745edc11h,050fc0711h,03dc87558h,09dd9ad7dh,0b49d1e64h,0ce6931fbh,0c98bd0f9h,06c77a0a2h,06baf7cb1h,062b9a629h,0ccf72d22h,0cf065f91h,079639071h,07203cce9h,0f9cb732fh,009ae4885h
- DD 0ee8314f3h,05e7c3bech,0dbea298fh,01c068aedh,07c80acech,008d381f1h,0e330495bh,003b56be8h,09222882dh,0aeffb8f2h,0c4af8bf7h,095ff38f6h,01fc57d8ch,050e32d35h,017b444f0h,06635be52h
- DD 0a5177900h,004d15276h,0f6858752h,04e1dbb47h,0c615796ch,05b475622h,0691867bfh,0a6fa0387h,02844c6d0h,0ed7f5d56h,003a2477dh,0c633cf9bh,02d3721d6h,0f6be5c40h,0e9fd68e6h,0af312eb7h
- DD 0e7417ce1h,0242792d2h,0970ee7f5h,0ff42bc71h,05c67a41eh,01ff4dc6dh,020882a58h,077709b7bh,0be217f2ch,03554731dh,05bb72177h,02af2a8cdh,0591dd059h,058eee769h,04bba6477h,0bb2930c9h
- DD 07d930cfch,0863ee047h,0396fd1f4h,04c262ad1h,0039af7e1h,0f4765bc8h,05ba104f6h,02519834bh,0d105f961h,07cd61b4ch,0d63bca54h,0a5415da5h,088a1f17ch,0778280a0h,02329512ch,0c4968949h
- DD 0cecdaa7ah,0174a9126h,00b13247bh,0fc8c7e0eh,03484c1c4h,029c110d2h,0831dfc3bh,0f8eb8757h,0c0067452h,0022f0212h,07b9b926ch,03f6f69eeh,0ef42daf4h,009032da0h,083f80de4h,079f00adeh
- DD 081236c97h,06210db71h,03ee0781fh,074f7685bh,0a3e41372h,04df7da7bh,0b1a1553eh,02aae38b1h,0f6dd9d1bh,01688e222h,05b8b6487h,057695448h,04b2edeaah,0478d2127h,01e85956ah,0b2818fa5h
- DD 0f176f2c0h,01e6adddah,0e2572658h,001ca4604h,085342ffbh,00a404dedh,0441838d6h,08cf60f96h,0c9071c4ah,09bbc691ch,034442803h,0fd588744h,0809c0d81h,097101c85h,08c456f7fh,0a7fb754ch
- DD 0d51805e1h,0c95f3c5ch,0b299dca8h,0ab4ccd39h,047eaf500h,03e03d20bh,0d7b80893h,0fa3165c1h,0e160e552h,0005e8b54h,09019d11fh,0dc4972bah,00c9a4a7ah,021a6972eh,037840fd7h,0a52c258fh
- DD 0c1e99d81h,0f8559ff4h,0a3c617c0h,008e1a7d6h,0248c6ba7h,0b398fd43h,0d1283794h,06ffedd91h,0d629d208h,08a6a59d2h,03490530eh,0a9d141d5h,038505989h,042f6fc18h,0479d94eeh,009bf250dh
- DD 0b3822790h,0223ad3b1h,093b8971ch,06c5926c0h,075f7fa62h,0609efc7eh,01ec2d989h,045d66a6dh,0987d2792h,04422d663h,03eb31d2bh,04a73caadh,0a32cb9e6h,0f06c2ac1h,091aeba84h,0d9445c5fh
- DD 0af71013fh,06af7a1d5h,00bedc946h,0e68216e5h,0d27370a0h,0f4cba30bh,0870421cch,07981afbfh,09449f0e1h,002496a67h,00a47edaeh,086cfc4beh,0b1feca22h,03073c936h,003f8f8fbh,0f5694612h
- DD 0901515eah,0d063b723h,0749cf038h,04c6c77a5h,0ab9e5059h,06361e360h,0a76a37c0h,0596cf171h,06530ae7ah,0800f53fah,00792a7a6h,00f5e631eh,0efdb81c9h,05cc29c24h,03f9c40bah,0a269e868h
- DD 02cb7191eh,0ec14f9e1h,0e5b08ea6h,078ea1bd8h,046332bb9h,03c65aa9bh,0bf80ce25h,084cc22b3h,0d49d5bf1h,00098e9e9h,019087da4h,0cd4ec1c6h,0aef6e357h,03c9d07c5h,09f8f64b8h,0839a0268h
- DD 0c6d8607fh,0c5e9eb62h,06aa995e4h,0759689f5h,0bbb48317h,070464669h,0e402417dh,0921474bfh,02a354c8ch,0cabe135bh,0812fa4b5h,0d51e52d2h,053311fe8h,0ec741096h,0b864514bh,04f774535h
- DD 05bde48f8h,0bcadd671h,02189bc7dh,0c9703873h,0c709ee8ah,05d45299eh,0845aaff8h,0d1287ee2h,0db1dbf1fh,07d1f8874h,0990c88d6h,0ea46588bh,084368313h,060ba649ah,060d543aeh,0d5fdcbceh
- DD 0810d5ab0h,090b46d43h,004d7e5cch,06739d8f9h,00d337c33h,0021c1a58h,068e67c40h,000a61162h,0379f0a1fh,095ef413bh,0e9e2ab95h,0fe126605h,02f5f199ch,067578b85h,02cb84913h,0f5c00329h
- DD 037577dd8h,0f7956430h,029c5fe88h,083b82af4h,0cdbdc132h,09c1bea26h,09c04339eh,0589fa086h,0b13799dfh,0033e9538h,0d295d034h,085fa8b21h,0bd9ddccah,0df17f73fh,0ddb66334h,0f32bd122h
- DD 0858b044ch,055ef88a7h,05aa9e397h,01f0d69c2h,040d85559h,055fd9cc3h,07785ddb2h,0c774df72h,0d3bd2e1ch,05dcce9f6h,0a85dfed0h,0eb30da20h,0d3ed09c4h,05ed7f5bbh,082a9c1bdh,07d42a35ch
- DD 09890272dh,0cf3de995h,03e713a10h,075f3432ah,0e28227b8h,05e13479fh,0fefacdc8h,0b8561ea9h,08332aafdh,0a6a297a0h,073809b62h,09b0d8bb5h,00c63036fh,0d2fa1cfdh,0bd64bda8h,07a16eb55h
- DD 078e62ddch,03f5cf5f6h,007fd752bh,02267c454h,05e437bbeh,05e361b6bh,08354e075h,095c59501h,0f2b254d9h,0ec725f85h,02cb52b4eh,0844b617dh,0cf425fb5h,0ed8554f5h,02af9f312h,0ab67703eh
- DD 03cf48283h,04cc34ec1h,09c8a705eh,0b09daa25h,05b7d4f84h,0d1e9d0d0h,0db38929dh,04df6ef64h,0aa21ba46h,0e16b0763h,0a293f8fbh,0c6b1d178h,0d520aabfh,00ff5b602h,0c339397ah,094d671bdh
- DD 04f5792fah,07c7d98cfh,011215261h,07c5e0d67h,0a7c5a6d4h,09b19a631h,07a45274dh,0c8511a62h,0a5a60d99h,00c16621ch,0cf5e48cbh,0f7fbab88h,0f7ddee08h,0ab1e6ca2h,0e7867f3ch,083bd08ceh
- DD 02ac13e27h,0f7e48e8ah,04eb1a9f5h,04494f6dfh,0981f0a62h,0edbf84ebh,0536438f0h,049badc32h,0004f7571h,050bea541h,0df1c94eeh,0bac67d10h,0b727bc31h,0253d73a1h,030686e28h,0b3d01cf2h
- DD 055fd0b8bh,051b77b1bh,0feec3173h,0a099d183h,0670e72b7h,0202b1fb7h,0a8e1635fh,0adc88b33h,0f989d905h,034e8216ah,029b58d01h,0c2e68d20h,06fe55a93h,011f81c92h,08f296f40h,015f1462ah
- DD 0ea3d62f2h,01915d375h,001c8977dh,0a17765a3h,0e47b26f6h,07559710ah,0535077a5h,0e0bd29c8h,008d84858h,0615f976dh,069ced5c1h,0370dfe85h,0a734fa56h,0bbc7503ch,091ac4574h,0fbb9f1ech
- DD 0060dd7efh,095d7ec53h,06e657979h,0eef2dacdh,0e2a08235h,054511af3h,01f4aea3dh,01e324aa4h,0e6e67671h,0550e7e71h,0bf52faf7h,0bccd5190h,0223cc62ah,0f880d316h,02b32eb5dh,00d402c7eh
- DD 0306a5a3bh,0a40bc039h,096783a1bh,04e0a41fdh,00253cdd4h,0a1e8d39ah,0c7388638h,06480be26h,02285f382h,0ee365e1dh,0ec0b5c36h,0188d8d8fh,01f0f4d82h,034ef1a48h,0a487d29ah,01a8f43e1h
- DD 077aefb3ah,08168226dh,01e72c253h,0f69a751eh,0e9594df1h,08e04359ah,0d14c0467h,0475ffd7dh,03844e95ch,0b5a2c2b1h,0dd12ef94h,085caf647h,0f1063d00h,01ecd2a9fh,023843311h,01dd2e229h
- DD 073d17244h,038f0e09dh,08fc653f1h,03ede7746h,0dc20e21ch,0ae4459f5h,06a8599eah,000db2ffah,030cfd905h,011682c39h,0a5c112a6h,04934d074h,0568bfe95h,0bdf063c5h,0016c441ah,0779a440ah
- DD 097d6fbdch,00c23f218h,0e0776aach,0d3a5cd87h,0d712e8dbh,0cee37f72h,026f74e8dh,0fb28c70dh,0b61301a0h,0ffe0c728h,0d3724354h,0a6282168h,0768ffedch,07ff4cb00h,003b02de9h,0c51b3088h
- DD 03902dda5h,0a5a8147ch,0fe6973b4h,035d2f706h,0c257457eh,05ac2efcfh,08700611bh,0933f48d4h,04912beb2h,0c365af88h,0162edf94h,07f5a4de6h,00c32f34bh,0c646ba7ch,0b2091074h,0632c6af3h
- DD 0753e43a9h,058d4f2e3h,024d4e23fh,070e1d217h,0afede6a6h,0b24bf729h,0710c8b60h,07f4a94d8h,08d4faa6ah,0aad90a96h,0b066b690h,0d9ed0b32h,078b6dbfdh,052fcd37bh,08bd2b431h,00b64615eh
- DD 0cfb9fad5h,0228e2048h,0240b76bdh,0beaa386dh,090dad7bch,02d6681c8h,006d38f5eh,03e553fc3h,09d5f9750h,0f27cdb9bh,0d28c5b0eh,03e85c52ah,05247c39bh,0190795afh,0bddd6828h,0547831ebh
- DD 04a82f424h,0f327a227h,07e47f89dh,036919c78h,043c7392ch,0e4783919h,02316fefeh,0f101b9aah,01c5009d2h,0bcdc9e9ch,09cd18345h,0fb55ea13h,0a3ce77c7h,0f5b5e231h,0d2f2cb3dh,0de6b4527h
- DD 09bb26f5fh,010f6a333h,0044d85b6h,01e85db8eh,094197e54h,0c3697a08h,0a7cb4ea8h,065e18cc0h,0a471fe6eh,0a38c4f50h,02f13439ch,0f031747ah,0c007318bh,053c4a6bah,01deccb3dh,0a8da3ee5h
- DD 0558216b1h,00555b31ch,02f79e6c2h,090c7810ch,0fe8eed3ch,09b669f4dh,0e0fac126h,070398ec8h,0f701b235h,0a96a449eh,0eb94f395h,00ceecdb3h,0d0cb7431h,0285fc368h,016a18c64h,00d37bb52h
- DD 0b880d2ddh,005110d38h,065930d57h,0a60f177bh,0f36235f5h,07da34a67h,0183816b9h,047f5e17ch,0db394af4h,0c7664b57h,07036f789h,039ba215dh,02f27b472h,046d2ca0eh,0f73a84b7h,0c42647eeh
- DD 064488f1dh,044bc7545h,0f4cf85d5h,0aa922708h,053e4df63h,0721a01d5h,05db46cedh,0649c0c51h,03cffcb6ch,06bf0d64eh,050f71d96h,0e3bf93feh,0bcc194a0h,075044558h,06afdc554h,016ae3372h
- DD 05ca48f3fh,0bfc01adfh,0e22a9b84h,064352f06h,0c1099e4ah,0cee54da1h,0fa1b89c0h,0bbda54e8h,06f6e55fbh,0166a3df5h,020176f88h,01ca44a24h,0dfb7b5ffh,0936afd88h,08611d4a0h,0e34c2437h
- DD 086142103h,07effbb75h,01f34fc4dh,06704ba1bh,010c1b122h,07c2a468fh,08c6aace9h,036b3a610h,075a0d050h,0abfcc0a7h,03ce33e32h,0066f9197h,029fe09beh,0ce905ef4h,0a8376351h,089ee25bah
- DD 0fd29dc76h,02a3ede22h,036f17260h,07fd32ed9h,0284b4126h,00cadcf68h,0a7951fc8h,063422f08h,00807e199h,0562b24f4h,022ad4490h,0fe9ce5d1h,00db2b1b4h,0c2f51b10h,0e4541d0dh,0eb3613ffh
- DD 02680813bh,0bd2c4a05h,0561b08d6h,0527aa55dh,0a7205558h,0a9f8a40eh,0243d0bech,0e3eea56fh,0a0ff58b3h,07b853817h,01a69e627h,0b67d3f65h,0a869b5d6h,00b76bbb9h,0546723edh,0a3afeb82h
- DD 03e554892h,05f24416dh,0430e2a45h,08413b53dh,09032a2a0h,099c56aeeh,0eec367b1h,009432bf6h,0daf0ecc1h,0552850c6h,05bc92048h,049ebce55h,054811307h,0dfb66ba6h,06f298597h,01b84f797h
- DD 08d1d7a0dh,079590481h,03a6fa556h,0d9fabe03h,0ba9e5d35h,0a40f9c59h,0f6247577h,0cb1771c1h,0e9a6312bh,0542a47cah,0552dd8c5h,0a34b3560h,00d794716h,0fdf94de0h,09c623094h,0d46124a9h
- DD 068afe8b4h,056b7435dh,06c0d8ea1h,027f20540h,073186898h,012b77e14h,07479490fh,0dbc3dd46h,0c03b0c05h,0951a9842h,07921bc96h,08b1b3bb3h,02b202e0ah,0a573b346h,047254d56h,077e4665dh
- DD 0d23e3984h,008b70dfch,0ebd14236h,0ab86e8bch,057114ba7h,0aa3e07f8h,0ab0ef4f2h,05ac71689h,00139d9afh,088fca384h,076644af0h,072733f88h,065d74f4ah,0f122f72ah,0a5626c7ah,013931577h
- DD 070f8d5a4h,0d5b5d9ebh,0d7bbb228h,0375adde7h,00c1c0b32h,031e88b86h,0173edbaah,0d1f568c4h,05459df02h,01592fc83h,00fcd9a7eh,02beac0fbh,01b473b0ah,0b0a6fdb8h,00fe8fc48h,0e3224c6fh
- DD 0e87edf5bh,0680bd00eh,020e77cf5h,030385f02h,04d42d1b2h,0e9ab98c0h,0d3816d77h,072d191d2h,00917d9e5h,01564dacah,01f8fed7fh,0394eab59h,07fbb3896h,0a209aa8dh,0be6ac98eh,05564f3b9h
- DD 0d73654efh,0ead21d05h,013d78d74h,068d1a9c4h,06d4973a0h,061e01708h,046e6d32ah,083da3500h,068ae0118h,06a3dfca4h,0d02da069h,0a1b9a4c9h,0ebab8302h,00b2ff9c7h,0944ba436h,098af07c3h
- DD 0995f0f9fh,085997326h,071b58bc6h,0467fade0h,0bd625a2bh,047e4495ah,033c3b8cdh,0fdd2d01dh,0c693f9fah,02c38ae28h,0348f7999h,048622329h,02161f583h,097bf738eh,0565e8cc9h,015ee2fa7h
- DD 05777e189h,0a1a5c845h,0456f2829h,0cc10bee0h,0da762bd5h,08ad95c56h,0e9d91da8h,0152e2214h,07cb23c74h,0975b0e72h,0a90c66dfh,0fd5d7670h,0225ffc53h,0b5b5b8adh,0faded2aeh,0ab6dff73h
- DD 06f4cbe9dh,0ebd56781h,06a574bd7h,00ed8b249h,081a881fah,041c246feh,0c3db9c70h,091564805h,05b862809h,0d7c12b08h,055858d7bh,01facd1f1h,0af09e92ah,07693747ch,0189a425fh,03b69dcbah
- DD 0967365efh,00be28e9fh,0e801f5c9h,057300eb2h,0d583352fh,093b8ac6ah,0cd05b2b7h,0a2cf1f89h,04dcc40cch,07c0c9b74h,0ada523fbh,0fee38c45h,01099cc4dh,0b49a4dech,069f069c6h,0325c377fh
- DD 0476cc9ffh,0e12458ceh,0c6d4cb63h,0580e0b6ch,09072289bh,0d561c8b7h,0a619e6dah,00377f264h,088e591a5h,026685362h,07523ca2bh,0a453a7bdh,0c1df4533h,08a9536d2h,0be972f79h,0c8e50f2fh
- DD 06d3549cfh,0d433e50fh,0facd665eh,06f33696fh,0ce11fcb4h,0695bfdach,0af7c9860h,0810ee252h,07159bb2ch,065450fe1h,0758b357bh,0f7dfbebeh,0d69fea72h,02b057e74h,092731745h,0d485717ah
- DD 0ee36860ch,0896c42e8h,04113c22dh,0daf04dfdh,044104213h,01adbb7b7h,01fd394eah,0e5fd5fa1h,01a4e0551h,068235d94h,018d10151h,06772cfbeh,009984523h,0276071e3h,05a56ba98h,0e4e879deh
- DD 0285b9491h,0aaafafb0h,01e4c705eh,001a0be88h,02ad9caabh,0ff1d4f5dh,0c37a233fh,06e349a4ah,04a1c6a16h,0cf1c1246h,029383260h,0d99e6b66h,05f6d5471h,0ea3d4366h,0ff8cc89bh,036974d04h
- DD 0cfe89d80h,0c26c49a1h,0da9c8371h,0b42c026dh,0dad066d2h,0ca6c013ah,056a4f3eeh,0fb8f7228h,0d850935bh,008b579ech,0d631e1b3h,034c1a74ch,0ac198534h,0cb5fe596h,0e1f24f25h,039ff21f6h
- DD 08f929057h,027f29e14h,0c0c853dfh,07a64ae06h,058e9c5ceh,0256cd183h,0ded092a5h,09d9cce82h,06e93b7c7h,0cc6e5979h,031bb9e27h,0e1e47092h,0aa9e29a0h,0b70b3083h,03785e644h,0bf181a75h
- DD 08ead09f7h,0f53f2c65h,09780d14dh,01335e1d5h,0cd1b66bch,069cc20e0h,0bbe0bfc8h,09b670a37h,028efbeedh,0ce53dc81h,08326a6e5h,00c74e77ch,0b88e9a63h,03604e0d2h,013dc2248h,0bab38fcah
- DD 05c0a3f1eh,08ed6e8c8h,07c87c37fh,0bcad2492h,09ee3b78dh,0fdfb62bbh,0cbceba46h,0eba8e477h,0eeaede4bh,037d38cb0h,07976deb6h,00bc498e8h,06b6147fbh,0b2944c04h,0f71f9609h,08b123f35h
- DD 0de79dc24h,0a155dcc7h,0558f69cdh,0f1168a32h,00d1850dfh,0bac21595h,0b204c848h,015c8295bh,07d8184ffh,0f661aa36h,030447bdbh,0c396228eh,0bde4a59eh,011cd5143h,06beab5e6h,0e3a26e3bh
- DD 01402b9d0h,0d3b3a13fh,02c7bc863h,0573441c3h,0578c3e6eh,04b301ec4h,00adaf57eh,0c26fc9c4h,07493cea3h,096e71bfdh,01af81456h,0d05d4b3fh,06a8c608fh,0daca2a8ah,00725b276h,053ef07f6h
- DD 07824fc56h,007a5fbd2h,013289077h,034675218h,0e0c48349h,05bf69fd5h,0b6aa7875h,0a613ddd3h,05450d866h,07f78c19ch,08f84a481h,046f4409ch,090fce239h,09f1d1928h,0b2ce44b9h,0016c4168h
- DD 0c7435978h,0bae023f0h,020e30e19h,0b152c888h,0e3fa6fafh,09c241645h,084823e60h,0735d95c1h,003955317h,003197573h,0f03b4995h,00b4b02a9h,070274600h,0076bf559h,0aaf57508h,032c5cc53h
- DD 060624129h,0e8af6d1fh,09a5e2b5eh,0b7bc5d64h,05f082d72h,03814b048h,0ce19677ah,076f267f2h,0b36eed93h,0626c630fh,03bf56803h,055230cd7h,0ce2736a0h,078837949h,0aa6c55f1h,00d792d60h
- DD 0d5c7c5d2h,00318dbfdh,0072b342dh,0b38f8da7h,07b8de38ah,03569bddch,0a1c94842h,0f25b5887h,02946ad60h,0b2d5b284h,0e9d1707eh,0854f29adh,02c6a4509h,0aa5159dch,057189837h,0899f94c0h
- DD 0f4a55b03h,0cf6adc51h,035e3b2d5h,0261762deh,004827b51h,04cc43012h,0c6021442h,0cd22a113h,0247c9569h,0ce2fd61ah,0d152becah,059a50973h,063a716d4h,06c835a11h,0187dedcfh,0c26455edh
- DD 049ce89e7h,027f536e0h,0cc890cb5h,018908539h,0d83c2aa1h,0308909abh,01ab73bd3h,0ecd3142bh,0b3f5ab84h,06a85bf59h,0f2bea4c6h,03c320a68h,06da4541fh,0ad8dc538h,0b7c41186h,0eaf34eb0h
- DD 0977c97c4h,01c780129h,0c57eb9fah,05ff9beebh,0c822c478h,0a24d0524h,0461cd415h,0fd8eec2ah,0f027458ch,0fbde194eh,01d1be115h,0b4ff5319h,04866d6f4h,063f874d9h,0b21ad0c9h,035c75015h
- DD 046ac49d2h,0a6b5c9d6h,083137aa9h,042c77c0bh,068225a38h,024d000fch,02fe1e907h,00f63cfc8h,0c6441f95h,022d1b01bh,0ec8e448fh,07d38f719h,0787fb1bah,09b33fa5fh,0190158dfh,094dcfda1h
- DD 05f6d4a09h,0c47cb339h,0ee52b826h,06b4f355ch,0f51b930ah,03d100f5dh,09f668f69h,0f4512fach,0206c4c74h,0546781d5h,0cb4d2e48h,0d021d4d4h,0ca085c2dh,0494a54c2h,0520850a8h,0f1dbaca4h
- DD 0490a1acah,063c79326h,041526b02h,0cb64dd9ch,0a2979258h,0bb772591h,048d97846h,03f582970h,07c213ba7h,0d66b70d1h,0e8a0ced4h,0c28febb5h,0c10338c1h,06b911831h,0bf0126f3h,00d54e389h
- DD 04af206eeh,07048d460h,077e97cb9h,0786c88f6h,0ac64802eh,0d4375ae1h,0d53ec11ch,0469bcfe1h,047062230h,0fc9b340dh,0c5b4a3ach,0e743bb57h,059ef45ach,0fe00b4aah,059edf188h,029a4ef23h
- DD 0b483689bh,040242efeh,0513ac262h,02575d3f6h,00ca6db72h,0f30037c8h,098864be2h,0c9fcce82h,00149362dh,084a112ffh,01c4ae971h,095e57582h,0945cf86ch,01fa4b1a8h,00b024a2fh,04525a734h
- DD 08f338360h,0e76c8b62h,028edf32bh,0483ff593h,0298b1aech,067e8e90ah,0736d9a21h,09caab338h,066892709h,05c09d2fdh,0b55a1d41h,02496b4dch,0e24a4394h,093f5fb1ah,06fa8f6c1h,008c75049h
- DD 0c905d85fh,0caead1c2h,00733ae57h,0e9d7f790h,0f07cdd94h,024c9a65ch,0a4b55931h,07389359ch,0367e45f7h,0f58709b7h,0cb7e7adch,01f203067h,0c7b72818h,082444bffh,0baac8033h,007303b35h
- DD 0d13b7ea1h,01e1ee4e4h,0e0e74180h,0e6489b24h,07e70ef70h,0a5f2c610h,0bdd10894h,0a1655412h,07af4194eh,0555ebefbh,08e89bd9ch,0533c1c3ch,089895856h,0735b9b57h,0567f5c15h,015fb3cd2h
- DD 0526f09fdh,0057fed45h,08128240ah,0e8a4f10ch,0ff2bfd8dh,09332efc4h,0bd35aa31h,0214e77a0h,014faa40eh,032896d73h,001e5f186h,0767867ech,017a1813eh,0c9adf8f1h,054741795h,0cb6cda78h
- DD 0349d51aah,0b7521b6dh,0e3c7b8e9h,0f56b5a9eh,032a096dfh,0c6f1e5c9h,0a3635024h,0083667c4h,018087f2fh,0365ea135h,0d136e45dh,0f1b8eaach,073aec989h,0c8a0e484h,0142c9259h,0d75a324bh
- DD 001dae185h,0b7b4d001h,09b7a94bch,045434e0bh,0fbd8cb0bh,0f54339afh,0e98ef49eh,0dcc4569eh,009a51299h,07789318ah,0b2b025d8h,081b4d206h,0fae85792h,0f64aa418h,0acd7baf7h,03e50258fh
- DD 02996864bh,0dce84cdbh,01f485fa4h,0a2e67089h,0534c6a5ah,0b28b2bb6h,0c94b9d39h,031a7ec6bh,0d6bc20dah,01d217766h,086761190h,04acdb5ech,073701063h,068726328h,02128c29bh,04d24ee7ch
- DD 0a19fd868h,0c072ebd3h,0db8ddd3bh,0612e481ch,01a64d852h,0b4e1d754h,0c4c6c4abh,000ef95ach,0aa0a6c46h,01536d2edh,043774790h,061294086h,0343fda10h,054af25e8h,0fd25d6f2h,09ff9d98dh
- DD 0468b8835h,00746af7ch,0730ecea7h,0977a31cbh,0c2cf4a81h,0a5096b80h,06458c37ah,0aa986833h,0a6bd9d34h,06af29bf3h,033c5d854h,06a62fe9bh,0b7133b5eh,050e6c304h,07d6e6848h,004b60159h
- DD 05579bea4h,04cd296dfh,05ceedaf1h,010e35ac8h,0e3bcc5b1h,004c4c5fdh,089412cf9h,095f9ee8ah,082b6eb0fh,02c9459eeh,095c2aaddh,02e845765h,0d327fcfeh,0774a84aeh,00368d476h,0d8c93722h
- DD 0f83e8a3bh,00dbd5748h,08d2495f3h,0a579aa96h,0ae496e9bh,0535996a0h,0b7f9bcc2h,007afbfe9h,05b7bd293h,03ac1dc6dh,07022323dh,03b592cffh,09c0a3e76h,0ba0deb98h,04b197acbh,018e78e9fh
- DD 0296c36efh,0211cde10h,082c4da77h,07ee89672h,0a57836dah,0b617d270h,09cb7560bh,0f0cd9c31h,0e455fe90h,001fdcbf7h,07e7334f3h,03fb53cbbh,04e7de4ech,0781e2ea4h,00b384fd0h,08adab3adh
- DD 053d64829h,0129eee2fh,0a261492bh,07a471e17h,0e4cb4a2ch,0e4f9adb9h,097ba2c2dh,03d359f6fh,00aacd697h,0346c6786h,075c2f8a8h,092b444c3h,0d85df44eh,0c79fa117h,0398ddf31h,056782372h
- DD 0bbbab3b8h,060e690f2h,08b04816bh,04851f8aeh,09c92e4d2h,0c72046abh,07cf3136bh,0518c74a1h,0f9877d4ch,0ff4eb50ah,0a919cabbh,014578d90h,0ac5eb2b6h,08218f8c4h,0542016e4h,0a3ccc547h
- DD 0327f8349h,0025bf48eh,0f43cb641h,0f3e97346h,0500f1085h,0dc2bafdfh,02f063055h,057167876h,0411925a6h,05bd914b9h,0a1123de5h,07c078d48h,0182b165dh,0ee6bf835h,0ba519727h,0b11b5e5bh
- DD 01eea7b85h,0e33ea76ch,092d4f85eh,02352b461h,0afe115bbh,0f101d334h,0889175a3h,0fabc1294h,05233f925h,07f6bcdc0h,0e77fec55h,0e0a802dbh,08069b659h,0bdb47b75h,0f98fbd74h,01c5e12deh
- DD 04b8457eeh,0869c58c6h,04f7ea9f7h,0a5360f69h,0f460b38fh,0e576c09fh,022b7fb36h,06b70d548h,03bfae315h,03fd237f1h,0cbdff369h,033797852h,025b516f9h,097df25f5h,0ba38ad2dh,046f388f2h
- DD 089d8ddbbh,0656c4658h,070f38ee8h,08830b26eh,0de1212b0h,04320fd5ch,0e4a2edb2h,0c34f30cfh,056ab64b8h,0abb131a3h,0d99c5d26h,07f77f0cch,0bf981d94h,066856a37h,0738bd76eh,019e76d09h
- DD 096238f39h,0e76c8ac3h,0a830b366h,0c0a482beh,00b4eb499h,0b7b8eaffh,04bfb4865h,08ecd83bch,0a2f3776fh,0971b2cb7h,0f4b88adfh,0b42176a4h,0be1fa446h,0b9617df5h,0cd031bd2h,08b32d508h
- DD 053b618c0h,01c6bd47dh,06a227923h,0c424f46ch,0dd92d964h,07303ffdeh,071b5abf2h,0e9712878h,0f815561dh,08f48a632h,0d3c055d1h,085f48ff5h,07525684fh,0222a1427h,067360cc3h,0d0d841a0h
- DD 00b9267c6h,04245a926h,0cf07f863h,0c78913f1h,04d0d9e24h,0aa844c8eh,03d5f9017h,0a42ad522h,0a2c989d5h,0bd371749h,0e1f5e78eh,0928292dfh,00a1ea6dah,0493b383eh,013aee529h,05136fd8dh
- DD 0f2c34a99h,0860c44b1h,0bf5855ach,03b00aca4h,0faaf37beh,0abf6aaa0h,02a53ec08h,065f43682h,0a11b12e1h,01d9a5801h,0e20ed475h,078a7ab2ch,09a41e0d5h,00de1067eh,0305023eah,030473f5fh
- DD 0169c7d97h,0dd3ae09dh,0cfaef9cdh,05cd5baa4h,065a44803h,05cd7440bh,047f364deh,0dc13966ah,02b8357c1h,0077b2be8h,0e9d57c2ah,00cb1b4c5h,005ff363eh,07a4ceb32h,0ca35a9efh,0f310fa4dh
- DD 0f97f68c6h,0dbb7b352h,00b02cf58h,00c773b50h,03c1f96d9h,0ea2e4821h,0eee01815h,0ffb357b0h,0e0f28039h,0b9c924cdh,046a3fbe4h,00b36c95ah,05e46db6ch,01faaaea4h,01928aaffh,0cae575c3h
- DD 0a70dab86h,07f671302h,071c58cfch,0fcbd12a9h,0bee0cb92h,0cbef9acfh,0f8c1b583h,0573da0b9h,00d41d550h,04752fcfeh,02155cffeh,0e7eec0e3h,0545ae248h,00fc39fcbh,08065f44eh,0522cb8d1h
- DD 070cbb96ch,0263c962ah,0bcd124a9h,0e034362ah,03c2ae58dh,0f120db28h,0fef6d507h,0b9a38d49h,01ff140fdh,0b1fd2a82h,020aee7e0h,0bd162f30h,0cb251949h,04e17a5d4h,04f7e1c3dh,02aebcb83h
- DD 0937b0527h,0608eb25fh,0eb7d9997h,0f42e1e47h,0b8a53a29h,0eba699c4h,0e091b536h,01f921c71h,05b26bbd5h,0cce29e7bh,03b61a680h,07a8ef5edh,0ba1f1c7eh,0e5ef8043h,018158ddah,016ea8217h
- DD 0599ff0f9h,001778a2bh,08104fc6bh,068a923d7h,0da694ff3h,05bfa44dfh,0f7667f12h,04f7199dbh,0e46f2a79h,0c06d8ff6h,0e9f8131dh,008b5deadh,0abb4ce7ch,002519a59h,0b42aec3eh,0c4f710bch
- DD 078bde41ah,03d77b057h,0b4186b5ah,06474bf80h,088c65741h,0048b3f67h,003c7c154h,0c64519deh,00edfcc4fh,0df073846h,048f1aa6bh,0319aa737h,0ca909f77h,08b9f8a02h,07580bfefh,090258139h
- DD 0c0c22719h,0d8bfd3cah,0c9ca151eh,0c60209e4h,0d9a1a69ch,07a744ab5h,014937f8fh,06de5048bh,0e115ac04h,0171938d8h,01c6b16d2h,07df70940h,07f8e94e7h,0a6aeb663h,02a2cf094h,0c130388eh
- DD 077f54e6eh,01850be84h,065d60fe5h,09f258a72h,06c9146d6h,0ff7ff0c0h,0e63a830bh,0039aaf90h,09460342fh,038f27a73h,03f795f8ah,04703148ch,09681a97eh,01bb5467bh,0ecaeb594h,000931ba5h
- DD 0786f337ch,0cdb6719dh,0e704397dh,0d9c01cd2h,0555c2fefh,00f4a3f20h,07c0af223h,000452509h,084db8e76h,054a58047h,093c8aa06h,03bacf1aah,0f7919422h,011ca957ch,078cdaa40h,050641053h
- DD 09f7144aeh,07a303874h,043d4acfdh,0170c963fh,058ddd3efh,05e148149h,09e72dba8h,0a7bde582h,06fa68750h,00769da8bh,0572e0249h,0fa64e532h,02619ad31h,0fcaadf9dh,0a7b349cdh,087882daah
- DD 06c67a775h,09f6eb731h,0efc5d0b1h,0cb10471ah,0e1b806b2h,0b433750ch,057b1ae7eh,019c5714dh,0ed03fd3fh,0c0dc8b7bh,031bc194eh,0dd03344fh,08c6320b5h,0a66c52a7h,0d0b6fd93h,08bc82ce3h
- DD 0b35f1341h,0f8e13501h,025a43e42h,0e53156ddh,04daeb85ch,0d3adf27eh,0bbeddeb5h,0b81d8379h,02e435867h,01b0b546eh,0eba5dd60h,09020eb94h,08210cb9dh,037d91161h,05c91f1cfh,04c596b31h
- DD 00e0b040dh,0b228a90fh,045ff897fh,0baf02d82h,000fa6122h,02aac79e6h,08e36f557h,024828817h,0113ec356h,0b9521d31h,015eff1f8h,09e48861eh,0e0d41715h,02aa1d412h,053f131b8h,071f86203h
- DD 03fd19408h,0f60da8dah,0278d9d99h,04aa716dch,0a8c51c90h,0394531f7h,0f59db51ch,0b560b0e8h,0fa34bdadh,0a28fc992h,09cd4f8bdh,0f024fa14h,023a9d0d3h,05cf530f7h,0e28c9b56h,0615ca193h
- DD 06f73c51eh,06d2a483dh,0ea0dc2ddh,0a4cb2412h,01eb917ffh,050663c41h,0eade299eh,03d3a74cfh,04a7a9202h,029b3990fh,0a7b15c3dh,0a9bccf59h,0a5df9208h,066a3ccdch,043f2f929h,048027c14h
- DD 040b557f0h,0d385377ch,0cd684660h,0e001c366h,0e2183a27h,01b18ed6bh,063210329h,0879738d8h,0bda94882h,0a687c74bh,0a684b299h,0d1bbcc48h,0863b3724h,0af6f1112h,02c8ce9f8h,06943d1b4h
- DD 0098cafb4h,0e044a3bbh,060d48cafh,027ed2310h,03a31b84dh,0542b5675h,0fcddbed7h,0cbf3dd50h,041b1d830h,025031f16h,0cb0c1e27h,0a7ec851dh,0b5ae75dbh,0ac1c8fe0h,008c52120h,0b24c7557h
- DD 01d4636c3h,057f811dch,0681a9939h,0f8436526h,09c81adb3h,01f6bc6d9h,05b7d80d4h,0840f8ac3h,0f4387f1ah,0731a9811h,0b5156880h,07c501cd3h,0dfe68867h,0a5ca4a07h,05fcea120h,0f123d8f0h
- DD 0d607039eh,01fbb0e71h,0cd3a4546h,02b70e215h,053324091h,032d2f01dh,0180ab19bh,0b796ff08h,03c57c4aah,032d87a86h,0b7c49a27h,02aed9cafh,031630d98h,09fb35each,05c3e20a3h,0338e8cdfh
- DD 066cde8dbh,080f16182h,02d72fd36h,04e159980h,09b6e5072h,0d7b8f13bh,03b7b5dc1h,0f5213907h,08ce4396eh,04d431f1dh,0a7ed2142h,037a1a680h,0d01aaf6bh,0bf375696h,0e63aab66h,0aa1c0c54h
- DD 04ed80940h,03014368bh,07a6fceddh,067e6d056h,0ca97579fh,07c208c49h,0a23597f6h,0fe3d7a81h,07e096ae2h,05e203202h,024b39366h,0b1f3e1e7h,02fdcdffch,026da26f3h,06097be83h,079422f1dh
- DD 09db3b381h,0263a2cfbh,0d4df0a4bh,09c3a2deeh,07d04e61fh,0728d06e9h,042449325h,08b1adfbch,07e053a1bh,06ec1d939h,066daf707h,0ee2be5c7h,0810ac7abh,080ba1e14h,0f530f174h,0dd2ae778h
- DD 0205b9d8bh,00435d97ah,0056756d4h,06eb8f064h,0b6f8210eh,0d5e88a8bh,0ec9fd9eah,0070ef12dh,03bcc876ah,04d849505h,0a7404ce3h,012a75338h,0b8a1db5eh,0d22b49e1h,014bfa5adh,0ec1f2051h
- DD 0b6828f36h,0adbaeb79h,001bd5b9eh,09d7a0258h,01e844b0ch,0eda01e0dh,0887edfc9h,04b625175h,09669b621h,014109fddh,0f6f87b98h,088a2ca56h,0170df6bch,0fe2eb788h,0ffa473f9h,00cea06f4h
- DD 0c4e83d33h,043ed81b5h,05efd488bh,0d9f35879h,09deb4d0fh,0164a620fh,0ac6a7394h,0c6927bdbh,09f9e0f03h,045c28df7h,0fcd7e1a9h,02868661eh,0ffa348f1h,07cf4e8d0h,0398538e0h,06bd4c284h
- DD 0289a8619h,02618a091h,06671b173h,0ef796e60h,09090c632h,0664e46e5h,01e66f8fbh,0a38062d4h,00573274eh,06c744a20h,0a9271394h,0d07b67e4h,06bdc0e20h,0391223b2h,0eb0a05a7h,0be2d93f1h
- DD 03f36d141h,0f23e2e53h,04dfca442h,0e84bb3d4h,06b7c023ah,0b804a48dh,076431c3bh,01e16a8fah,0ddd472e0h,01b5452adh,00d1ee127h,07d405ee7h,0ffa27599h,050fc6f1dh,0bf391b35h,0351ac53ch
- DD 04444896bh,07efa14b8h,0f94027fbh,064974d2fh,0de84487dh,0efdcd0e8h,02b48989bh,08c45b260h,0d8463487h,0a8fcbbc2h,03fbc476ch,0d1b2b3f7h,0c8f443c0h,021d005b7h,040c0139ch,0518f2e67h
- DD 006d75fc1h,056036e8ch,03249a89fh,02dcf7bb7h,0e245e7ddh,081dd1d3dh,0ebd6e2a7h,0f578dc4bh,0df2ce7a0h,04c028903h,09c39afach,0aee36288h,0146404abh,0dc847c31h,0a4e97818h,06304c0d8h
- DD 0a91f6791h,0ae51dca2h,09baa9efch,02abe4190h,0559c7ac1h,0d9d2e2f4h,0fc9f773ah,0e82f4b51h,04073e81ch,0a7713027h,0fbb596fch,0c0276fach,0a684f70ch,01d819fc9h,0c9f7b1e0h,029b47fddh
- DD 0459b1940h,0358de103h,05b013e93h,0ec881c59h,049532ad3h,051574c93h,0b37b46deh,02db1d445h,0df239fd8h,0c6445b87h,0151d24eeh,0c718af75h,0f43c6259h,0aea1c4a4h,070be02f7h,040c0e5d7h
- DD 0721b33f2h,06a4590f4h,0fedf04eah,02124f1fbh,09745efe7h,0f8e53cdeh,065f046d9h,0e7e10432h,0e4d0c7e6h,0c3fca28eh,087253b1bh,0847e339ah,03743e643h,09b595348h,04fd12fc5h,0cb6a0a0bh
- DD 027d02dcch,0fb6836c3h,07a68bcc2h,05ad00982h,0005e912dh,01b24b44ch,0811fdcfeh,0cc83d20fh,0666fba0ch,036527ec1h,014754635h,069948197h,0556da9c2h,0fcdcb1a8h,081a732b2h,0a5934267h
- DD 0a714181dh,0ec1214edh,06067b341h,0609ac13bh,0a545df1fh,0ff4b4c97h,034d2076bh,0a1240501h,01409ca97h,06efa0c23h,020638c43h,0254cc1a8h,0dcfb46cdh,0d4e363afh,003942a27h,062c2adc3h
- DD 056e46483h,0c67b9df0h,063736356h,0a55abb20h,0c551bc52h,0ab93c098h,0b15fe64bh,0382b49f9h,04dff8d47h,09ec221adh,0437df4d6h,079caf615h,0bb456509h,05f13dc64h,0191f0714h,0e4c589d9h
- DD 03fd40e09h,027b6a8abh,077313ea9h,0e455842eh,01f55988bh,08b51d1e2h,0062bbbfch,05716dd73h,04e8bf3deh,0633c11e5h,01b85be3bh,09a0e77b6h,00911cca6h,056510729h,0efa6590fh,027e76495h
- DD 0070d3aabh,0e4ac8b33h,09a2cd5e5h,02643672bh,01cfc9173h,052eff79bh,090a7c13fh,0665ca49bh,0b3efb998h,05a8dda59h,0052f1341h,08a5b922dh,03cf9a530h,0ae9ebbabh,0f56da4d7h,035986e7bh
- DD 0ff3513cch,03a636b5ch,03198f7ddh,0bb0cf8bah,041f16f86h,0b8d40522h,0de13a7bfh,0760575d8h,09f7aa181h,036f74e16h,0f509ed1ch,0163a3ecfh,03c40a491h,06aead61fh,0dfe8fcaah,0158c95fch
- DD 013cda46fh,0a3991b6eh,0342faed0h,079482415h,0666b5970h,0f3ba5bdeh,0b26ab6ddh,01d52e6bch,08608dd3dh,0768ba1e7h,0ea076586h,04930db2ah,0e7dc1afah,0d9575714h,0f7c58817h,01fc7bf7dh
- DD 0d9eee96ch,06b47accdh,0e58cec37h,00ca277fbh,0e702c42ah,0113fe413h,0c47cbe51h,0dd1764eeh,07b3ed739h,0041e7cdeh,05ce9e1c0h,050cb7459h,02925b212h,035568513h,0001b081ch,07cff95c4h
- DD 08088b454h,063ee4cbdh,09a9e0c8ah,0db7f32f7h,06b2447cbh,0b377d418h,0d370219bh,0e3e982aah,0c2a2a593h,006ccc1e4h,00773f24fh,072c36865h,095859423h,0a13b4da7h,075040c8fh,08bbf1d33h
- DD 0da50c991h,0726f0973h,0822d6ee2h,048afcd5bh,020fd7771h,0e5fc718bh,0fd0807a1h,0b9e8e77dh,099a7703dh,07f5e0f44h,0618e36f3h,06972930eh,023807bbeh,02b7c77b8h,0cb27ff50h,0e5b82405h
- DD 0bd379062h,0ba8b8be3h,02dce4a92h,0d64b7a1dh,0b2952e37h,0040a73c5h,0d438aecah,00a9e252eh,0c39d3bcbh,0dd43956bh,0b32b2d63h,01a31ca00h,05c417a18h,0d67133b8h,02ef442c8h,0d08e4790h
- DD 0255c0980h,098cb1ae9h,02b4a739fh,04bd86381h,01e4a45a1h,05a5c31e1h,09cb0db2fh,01e5d55feh,08ff5cc29h,074661b06h,00eb8a4f4h,0026b389fh,058848c24h,0536b21a4h,081dc72b0h,02e5bf8ech
- DD 0ad886aach,003c187d0h,0b771b645h,05c16878ah,0c74045abh,0b07dfc6fh,07800caedh,02c6360bfh,0b9c972a3h,024295bb5h,07c9a6dbah,0c9e6f88eh,092a79aa6h,090ffbf24h,041c26ac2h,0de29d50ah
- DD 0d309cbe6h,09f0af483h,0e0bced4fh,05b020d8ah,0b38023e3h,0606e986dh,01abc6933h,0ad8f2c9dh,0e7400e93h,019292e1dh,052be5e4dh,0fe3e18a9h,02e0680bfh,0e8e9771dh,0c54db063h,08c5bec98h
- DD 074a55d1fh,02af9662ah,0046f66d8h,0e3fbf28fh,0d4dc4794h,0a3a72ab4h,05c7c2dd8h,009779f45h,0c3d19d8dh,0d893bdafh,057d6a6dfh,0d5a75094h,0952e6255h,08cf8fef9h,0da9a8affh,03da67cfbh
- DD 02c160dcdh,04c23f62ah,08f90eaefh,034e6c5e3h,0a9a65d5ah,035865519h,08fd38a3dh,007c48aaeh,050068527h,0b7e7aedah,01c90936ah,02c09ef23h,0e879324ch,031ecfeb6h,0fb0ec938h,0a0871f6bh
- DD 0d84d835dh,0b1f0fb68h,0861dc1e6h,0c90caf39h,07594f8d7h,012e5b046h,065012b92h,026897ae2h,0a4d6755dh,0bcf68a08h,00991fbdah,0403ee41ch,03bbf17e8h,0733e343eh,0679b3d65h,0d2c7980dh
- DD 0d2e11305h,033056232h,0f3c07a6fh,0966be492h,0bb15509dh,06a8878ffh,00a9b59a4h,0ff221101h,0abe30129h,06c9f564ah,0336e64cfh,0c6f2c940h,08b0c8022h,00fe75262h,06ae8db87h,0be0267e9h
- DD 093bc042bh,022e192f1h,0b237c458h,0f085b534h,0832c4168h,0a0d192bdh,0bdf6271dh,07a76e9e3h,0b88911b5h,052a882fah,0b4db0eb5h,0c85345e4h,081a7c3ffh,0a3be02a6h,0f0ec0469h,051889c8ch
- DD 0a5e829e5h,09d031369h,01607aa41h,0cbb4c6fch,0241d84c1h,075ac59a6h,08829e0eeh,0c043f2bfh,08ea5e185h,082a38f75h,0d87cbd9fh,08bda40b9h,02d8fc601h,09e65e75eh,0a35690b3h,03d515f74h
- DD 0da79e5ach,0534acf4fh,08630215fh,068b83b3ah,0d085756eh,05c748b2eh,0e5d37cb2h,0b0317258h,0c5ccc2c4h,06735841ah,03d9d5069h,07d7dc96bh,0fd1754bdh,0a147e410h,0d399ddd5h,065296e94h
- DD 0bc8fa5bch,0f6b5b2d0h,0500c277bh,08a5ead67h,0dfa08a5dh,0214625e6h,0959cf047h,051fdfedch,0289fca32h,06bc9430bh,09d9bdc3fh,0e36ff0cfh,058ea0edeh,02fe187cbh,05a900b3fh,0ed66af20h
- DD 05fa9f4d6h,000e0968bh,037a362e7h,02d4066ceh,0bd07e772h,0a99a9748h,006a4f1d0h,0710989c0h,0ce40cbd8h,0d5dedf35h,01743293dh,0ab55c5f0h,08aa24e2ch,0766f1144h,0605fbcb4h,094d874f8h
- DD 0a518001bh,0a365f0e8h,09d04ef0fh,0ee605eb6h,0ba8d4d25h,05a3915cdh,0b5113472h,044c0e1b8h,08b6740dch,0cbb024e8h,0ee1d4f0ch,089087a53h,01fc4e372h,0a88fa05ch,0af8b3af2h,08bf395cbh
- DD 0deb8568bh,01e71c9a1h,080fb3d32h,0a35daea0h,02cf8fb81h,0e8b6f266h,09490696ah,06d51afe8h,051803a19h,081beac6eh,086219080h,0e3d24b7fh,0df6f463ch,0727cfd9dh,072284ee8h,08c6865cah
- DD 0b743f4efh,032c88b7dh,0e7d11dceh,03793909bh,02ff2ebe8h,0d398f922h,0e5e49796h,02c70ca44h,0cb1131b1h,0df4d9929h,025888e79h,07826f298h,0f1d8740ah,04d3a112ch,0270afa8bh,000384cb6h
- DD 03ab48095h,0cb64125bh,062d05106h,03451c256h,0a4955845h,0d73d577dh,0bf9f4433h,039570c16h,0adecf263h,0d7dfaad3h,0dc76e102h,0f1c3d8d1h,054c6a836h,05e774a58h,03e92d47bh,0dad4b672h
- DD 0f0d796a0h,0be7e990fh,0df0e8b02h,05fc62478h,0030c00adh,08aae8bf4h,09004ba0fh,03d2db93bh,0d85d5ddch,0e48c8a79h,06bb07f34h,0e907caa7h,0a39eaed5h,058db343ah,0adaf5724h,00ea6e007h
- DD 0d23233f3h,0e00df169h,077cb637fh,03e322796h,01da0cf6ch,01f897c0eh,031d6bbddh,0a651f5d8h,01a230c76h,0dd61af19h,0cdaa5e4ah,0bd527272h,0d0abcd7eh,0ca753636h,0370bd8dch,078bdd37ch
- DD 017cd93feh,0c23916c2h,0dadce6e2h,065b97a4dh,0174e42f8h,0e04ed4ebh,0bb21480ah,01491ccaah,023196332h,0145a8280h,0587b479ah,03c3862d7h,001dcd0edh,09f4a88a3h,03ea12f1fh,04da2b7efh
- DD 0b126e48eh,0f8e7ae33h,0f494e237h,0404a0b32h,0c55acadbh,09beac474h,0cbec9fd9h,04ee5cf3bh,07df3c8c3h,0336b33b9h,0b76808fdh,0bd905fe3h,0aa45c16ah,08f436981h,03dd27b62h,0255c5bfah
- DD 0c3dd9b4dh,071965cbfh,0fc068a87h,0ce23edbfh,0745b029bh,0b78d4725h,0cefdd9bdh,074610713h,01266bf52h,07116f75fh,018e49bb6h,002046722h,03d6f19e3h,0df43df9fh,0e685cb2fh,0ef1bc7d0h
- DD 07078c432h,0cddb27c1h,0b77fedb7h,0e1961b9ch,0c2290570h,01edc2f5ch,019cbd886h,02c3fefcah,0c2af389ah,0cf880a36h,0bda71ceah,096c610fdh,032aa8463h,0f03977a9h,08586d90ah,08eb7763fh
- DD 02a296e77h,03f342454h,042837a35h,0c8718683h,06a09c731h,07dc71090h,051b816dbh,054778ffbh,0af06defdh,06b33bfech,08592b70bh,0fe3c105fh,061da6114h,0f937fda4h,04c266ad7h,03c13e651h
- DD 0855938e8h,0e363a829h,09de54b72h,02eeb5d9eh,020ccfab9h,0beb93b0eh,025e61a25h,03dffbb5fh,01acc093dh,07f655e43h,03964ce61h,00cb6cc3dh,0e5e9b460h,06ab283a1h,0a1c7e72dh,055d787c5h
- DD 0deadbf02h,04d2efd47h,0ac459068h,011e80219h,071f311f0h,0810c7626h,04ab6ef53h,0fa17ef8dh,093e43bffh,0af47fd25h,00be40632h,05cb5ff3fh,08ee61da3h,054687106h,0b08afd0fh,07764196eh
- DD 0f0290a8fh,0831ab3edh,0cb47c387h,0cae81966h,0184efb4fh,0aad7deceh,04749110eh,0dcfc53b3h,04cb632f9h,06698f23ch,0b91f8067h,0c42a1ad6h,06284180ah,0b116a81dh,0e901326fh,0ebedf5f8h
- DD 097e3e044h,0f2274c9fh,011d09fc9h,042018520h,0d18e6e23h,056a65f17h,0352b683ch,02ea61e2ah,0575eaa94h,027d291bch,0b8ff522dh,09e7bc721h,0a7f04d6fh,05f7268bfh,0aba41748h,05868c73fh
- DD 07be0eeadh,09f85c2dbh,0ff719135h,0511e7842h,0c5ea90d7h,05a06b1e9h,026fab631h,00c19e283h,0e9206c55h,08af8f0cfh,03553c06ah,089389cb4h,0f65f8004h,039dbed97h,0c508991dh,00621b037h
- DD 096e78cc4h,01c52e635h,00c06b4a8h,05385c8b2h,0b0e87d03h,0d84ddfdbh,0934bafadh,0c49dfb66h,059f70772h,07071e170h,03a1db56bh,03a073a84h,03b8af190h,003494903h,0d32920f0h,07d882de3h
- DD 0b2cf8940h,091633f0ah,06f948f51h,072b0b178h,0782653c8h,02d28dc30h,0db903a05h,088829849h,06a19d2bbh,0b8095d0ch,086f782cbh,04b9e7f0ch,02d907064h,07af73988h,08b32643ch,0d12be0feh
- DD 00e165dc3h,0358ed23dh,04e2378ceh,03d47ce62h,0feb8a087h,07e2bb0b9h,0e29e10b9h,03246e8aeh,003ce2b4dh,0459f4ec7h,0bbc077cfh,0e9b4ca1bh,00e9940c1h,02613b4f2h,0047d1eb1h,0fc598bb9h
- DD 045036099h,09744c62bh,0167c65d8h,0a9dee742h,0dabe1943h,00c511525h,093c6c624h,0da110554h,0651a3be2h,0ae00a52ch,0884449a6h,0cda5111dh,0ff33bed1h,0063c06f4h,00d3d76b4h,073baaf9ah
- DD 07fc63668h,052fb0c9dh,00c039cdeh,06886c9ddh,055b22351h,0602bd599h,0360c7c13h,0b00cab02h,081b69442h,08cb616bch,0b55c3ceeh,041486700h,0f49ba278h,071093281h,064a50710h,0ad956d9ch
- DD 0638a7e81h,09561f28bh,05980ddc3h,054155cdfh,0d26f247ah,0b2db4a96h,04787d100h,09d774e4eh,0078637d2h,01a9e6e2eh,05e0ae06ah,01c363e2dh,0e9cfa354h,07493483eh,07f74b98dh,076843cb3h
- DD 0d4b66947h,0baca6591h,004460a8ch,0b452ce98h,043768f55h,06830d246h,07dff12dfh,0f4197ed8h,0400dd0f7h,06521b472h,04b1e7093h,059f5ca8fh,0080338aeh,06feff11bh,0a29ca3c6h,00ada31f6h
- DD 094a2c215h,024794eb6h,005a57ab4h,0d83a43abh,02a6f89feh,0264a543ah,0dd5ec7c2h,02c2a3868h,08439d9b2h,0d3373940h,00acd1f11h,0715ea672h,0e7e6cc19h,042c1d235h,0b990585ch,081ce6e96h
- DD 0d809c7bdh,004e5dfe0h,08f1050abh,0d7b2580ch,0d8a4176fh,06d91ad78h,04e2e897ch,00af556eeh,0921de0ach,0162a8b73h,07ea78400h,052ac9c22h,0efce2174h,0ee2a4eeah,06d637f79h,0be61844eh
- DD 0789a283bh,00491f1bch,0880836f4h,072d3ac3dh,088e5402dh,0aa1c5ea3h,0d5cc473dh,01b192421h,09dc84cach,05c0b9998h,09c6e75b8h,0b0a8482dh,03a191ce2h,0639961d0h,06d837930h,0da3bc865h
- DD 0056e6f8fh,0ca990653h,064d133a7h,084861c41h,0746abe40h,08b403276h,0ebf8e303h,0b7b4d51ah,0220a255dh,005b43211h,002419e6eh,0c997152ch,0630c2feah,076ff47b6h,0281fdadeh,050518677h
- DD 0cf902b0bh,03283b8bah,037db303bh,08d4b4eb5h,0755011bch,0cc89f42dh,0dd09d19bh,0b43d74bbh,08adba350h,065746bc9h,0b51c1927h,0364eaf8ch,010ad72ech,013c76596h,0f8d40c20h,030045121h
- DD 0ea7b979bh,06d2d99b7h,0e6fb3bcdh,0cd78cd74h,086cffbfeh,011e45a9eh,0637024f6h,078a61cf4h,03d502295h,0d06bc872h,0458cb288h,0f1376854h,0342f8586h,0b9db26a1h,04beee09eh,0f33effcfh
- DD 0b30cfb3ah,0d7e0c4cdh,06c9db4c8h,06d09b8c1h,007c8d9dfh,040ba1a42h,01c52c66dh,06fd495f7h,0275264dah,0fb0e169fh,0e57d8362h,080c2b746h,049ad7222h,0edd987f7h,04398ec7bh,0fdc229afh
- DD 052666a58h,0b0d1ed84h,0e6a9c3c2h,04bcb6e00h,026906408h,03c57411ch,013556400h,0cfc20755h,05294dba3h,0a08b1c50h,08b7dd31eh,0a30ba286h,0991eca74h,0d70ba90eh,0e762c2b9h,0094e142ch
- DD 0979f3925h,0b81d783eh,0af4c89a7h,01efd130ah,0fd1bf7fah,0525c2144h,01b265a9eh,04b296904h,0b9db65b6h,0ed8e9634h,003599d8ah,035c82e32h,0403563f3h,0daa7a54fh,0022c38abh,09df088adh
- DD 0bb3fd30ah,0e5cfb066h,0eff0354eh,0429169dah,03524e36ch,0809cf852h,00155be1dh,0136f4fb3h,01fbba712h,04826af01h,0506ba1a1h,06ef0f0b4h,077aea73eh,0d9928b31h,05eaa244eh,0e2bf6af2h
- DD 04237b64bh,08d084f12h,0e3ecfd07h,0688ebe99h,0f6845dd8h,057b8a70ch,05da4a325h,0808fc59ch,0a3585862h,0a9032b2bh,0edf29386h,0b66825d5h,0431ec29bh,0b5a5a8dbh,03a1e8dc8h,0bb143a98h
- DD 012ae381bh,035ee94ceh,086ccda90h,03a7f176ch,04606eacah,0c63a657eh,043cd04dfh,09ae5a380h,0ed251b46h,09bec8d15h,0caca5e64h,01f5d6d30h,09ff20f07h,0347b3b35h,0f7e4b286h,04d65f034h
- DD 0f111661eh,09e93ba24h,0b105eb04h,0edced484h,0f424b578h,096dc9ba1h,0e83e9069h,0bf8f66b7h,0d7ed8216h,0872d4df4h,08e2cbecfh,0bf07f377h,098e73754h,04281d899h,08aab8708h,0fec85fbbh
- DD 0a5ba5b0bh,09a3c0deeh,042d05299h,0e6a116ceh,0e9b02d42h,0ae9775feh,0a1545cb6h,072b05200h,031a3b4eah,0bc506f7dh,08bbd9b32h,0e5893078h,0e4b12a97h,0c8bc5f37h,04a73b671h,06b000c06h
- DD 0765fa7d0h,013b5bf22h,01d6a5370h,059805bf0h,04280db98h,067a5e29dh,0776b1ce3h,04f53916fh,033ddf626h,0714ff61fh,0a085d103h,04206238eh,0e5809ee3h,01c50d4b7h,085f8eb1dh,0999f450dh
- DD 0e4c79e9bh,0658a6051h,0c66a9feah,01394cb73h,0c6be7b23h,027f31ed5h,05aa6f8feh,0f4c88f36h,04aaa499eh,00fb0721fh,0e3fb2a6bh,068b3a7d5h,03a92851dh,0a788097dh,0e96f4913h,0060e7f8ah
- DD 01a3a93bch,082eebe73h,0a21adc1ah,042bbf465h,0ef030efdh,0c10b6fa4h,087b097bbh,0247aa4c7h,0f60c77dah,08b8dc632h,0c223523eh,06ffbc26ah,0344579cfh,0a4f6ff11h,0980250f6h,05825653ch
- DD 0bc1aa2b9h,0b2dd097eh,037a0333ah,007889393h,037a0db38h,01cf55e71h,0792c1613h,02648487fh,03fcef261h,0dad01336h,00eabf129h,06239c81dh,09d276be2h,08ee761deh,01eda6ad3h,0406a7a34h
- DD 04a493b31h,04bf367bah,09bf7f026h,054f20a52h,09795914bh,0b696e062h,08bf236ach,0cddab96dh,0ed25ea13h,04ff2c70ah,081cbbbe7h,0fa1d09ebh,0468544c5h,088fc8c87h,0696b3317h,0847a670dh
- DD 064bcb626h,0f133421eh,026dee0b5h,0aea638c8h,0b310346ch,0d6e7680bh,0d5d4ced3h,0e06f4097h,07512a30bh,009961452h,0e589a59ah,0f3d867fdh,052d0c180h,02e73254fh,0333c74ach,09063d8a3h
- DD 0d314e7bch,0eda6c595h,0467899edh,02ee7464bh,00a1ed5d3h,01cef423ch,069cc7613h,0217e76eah,0e7cda917h,027ccce1fh,08a893f16h,012d8016bh,09fc74f6bh,0bcd6de84h,0f3144e61h,0fa5817e2h
- DD 00821ee4ch,01f354164h,00bc61992h,01583eab4h,01d72879fh,07490caf6h,0f76ae7b2h,0998ad9f3h,0a41157f7h,01e181950h,0e8da3a7eh,0a9d7e1e6h,08426b95fh,0963784ebh,0542e2a10h,00ee4ed6eh
- DD 0ac751e7bh,0b79d4cc5h,0fd4211bdh,093f96472h,0c8de4fc6h,08c72d3d2h,0df44f064h,07b69cbf5h,0f4bf94e1h,03da90ca2h,0f12894e2h,01a5325f8h,07917d60bh,00a437f6ch,096c9cb5dh,09be70486h
- DD 0e1dc5c05h,0b4d880bfh,0eebeeb57h,0d738addah,0df0fe6a3h,06f0119d3h,066eaaf5ah,05c686e55h,0dfd0b7ech,09cb10b50h,06a497c21h,0bdd0264bh,08c546c96h,0fc093514h,079dbf42ah,058a947fah
- DD 049ccd6d7h,0c0b48d4eh,088bd5580h,0ff8fb02ch,007d473b2h,0c75235e9h,0a2188af3h,04fab1ac5h,097576ec0h,0030fa3bch,00b7e7d2fh,0e8c946e8h,070305600h,040a5c9cch,0c8b013b4h,06d8260a9h
- DD 070bba85ch,00368304fh,0a4a0d311h,0ad090da1h,02415eec1h,07170e870h,08461ea47h,0bfba35feh,0c1e91938h,06279019ah,01afc415fh,0a47638f3h,0bcba0e0fh,036c65cbbh,0034e2c48h,002160efbh
- DD 0615cd9e4h,0e6c51073h,0f1243c06h,0498ec047h,0b17b3d8ch,03e5a8809h,00cc565f1h,05cd99e61h,07851dafeh,081e312dfh,0a79061e2h,0f156f5bah,0880c590eh,080d62b71h,00a39faa1h,0bec9746fh
- DD 0c8ed1f7ah,01d98a9c1h,0a81d5ff2h,009e43bb5h,00da0794ah,0d5f00f68h,0661aa836h,0412050d9h,090747e40h,0a89f7c4eh,0b62a3686h,06dc05ebbh,0308e3353h,0df4de847h,09fb53bb9h,053868fbbh
- DD 0cfdcf7ddh,02b09d2c3h,0723fcab4h,041a9fce3h,007f57ca3h,073d905f7h,0ac8e1555h,0080f9fb1h,09ba7a531h,07c088e84h,0ed9a147fh,007d35586h,0af48c336h,0602846abh,00ccf0e79h,07320fd32h
- DD 0b18bd1ffh,0aa780798h,0afdd2905h,052c2e300h,0434267cdh,0f27ea3d6h,015605b5fh,08b96d16dh,04b45706bh,07bb31049h,0743d25f8h,0e7f58b8eh,087f30076h,0e9b5e45bh,05d053d5ah,0d19448d6h
- DD 0d3210a04h,01ecc8cb9h,0dafb5269h,06bc7d463h,067c3489fh,03e59b10ah,065641e1bh,01769788ch,0bd6cb838h,08a53b82dh,0236d5f22h,07066d6e6h,06908536eh,003aa1c61h,066ae9809h,0c971da0dh
- DD 0c49a2fach,001b3a86bh,03092e77ah,03b8420c0h,07d6fb556h,002057300h,0bff40a87h,06941b2a1h,00658ff2ah,0140b6308h,03424ab36h,087804363h,05751e299h,00253bd51h,0449c3e3ah,0c75bcd76h
- DD 07f8f875dh,092eb4090h,056c26bbfh,09c9d754eh,08110bbe7h,0158cea61h,0745f91eah,062a6b802h,0c6e7394bh,0a79c41aah,0ad57ef10h,0445b6a83h,06ea6f40ch,00c5277ebh,088633365h,0319fe96bh
- DD 0385f63cbh,00b0fc61fh,022bdd127h,041250c84h,009e942c2h,067d153f1h,0c021ad5dh,060920d08h,0724d81a5h,0229f5746h,05bba3299h,0b7ffb892h,0de413032h,0518c51a1h,03c2fd94ch,02a9bfe77h
- DD 03191f4fdh,0cbcde239h,0d3d6ada1h,043093e16h,058769606h,0184579f3h,0d236625ch,02c94a8b3h,05c437d8eh,06922b9c0h,0d8d9f3c8h,03d4ae423h,02e7090a2h,0f72c31c1h,0d76a55bdh,04ac3f5f3h
- DD 06b6af991h,0342508fch,01b5cebbdh,00d527100h,0dd440dd7h,0b84740d0h,0780162fdh,0748ef841h,0dfc6fafbh,0a8dbfe0eh,0f7300f27h,0eadfdf05h,0feba4ec9h,07d06555fh,09e25fa97h,012c56f83h
- DD 0d39b8c34h,077f84203h,03125eddbh,0ed8b1be6h,0f6e39dc5h,05bbf2441h,06a5d678ah,0b00f6ee6h,057d0ea99h,0ba456ecfh,017e06c43h,0dcae0f58h,00f5b4baah,001643de4h,0d161b9beh,02c324341h
- DD 0e126d468h,080177f55h,076748e09h,0ed325f1fh,0cfa9bdc2h,06116004ah,03a9fb468h,02d8607e6h,06009d660h,00e573e27h,08d10c5a1h,03a525d2eh,03b9009a0h,0d26cb45ch,0de9d7448h,0b6b0cdc0h
- DD 0e1337c26h,0949c9976h,0d73d68e5h,06faadebdh,0f1b768d9h,09e158614h,09cc4f069h,022dfa557h,0be93c6d6h,0ccd6da17h,0a504f5b9h,024866c61h,08d694da1h,02121353ch,00140b8c6h,01c6ca580h
- DD 0e964021eh,0c245ad8ch,0032b82b3h,0b83bffbah,047ef9898h,0faa220c6h,0982c948ah,07e8d3ac6h,0bc2d124ah,01faa2091h,005b15ff4h,0bd54c3ddh,0c87c6fb7h,0386bf3abh,0fdeb6f66h,0fb2b0563h
- DD 05b45afb4h,04e77c557h,0efb8912dh,0e9ded649h,042f6e557h,07ec9bbf5h,062671f00h,02570dfffh,088e084bdh,02b3bfb78h,0f37fe5b4h,0a024b238h,095649aeeh,044e7dc04h,05e7ec1d8h,0498ca255h
- DD 0aaa07e86h,03bc766eah,0f3608586h,00db6facbh,0bdc259c8h,0badd2549h,0041c649fh,095af3c6eh,002e30afbh,0b36a928ch,0008a88b8h,09b5356adh,0cf1d9e9dh,04b67a5f1h,0a5d8d8ceh,0c6542e47h
- DD 07adfb6cch,073061fe8h,098678141h,0cc826fd3h,03c80515ah,000e758b1h,041485083h,06afe3247h,0b6ae8a75h,00fcb08b9h,04acf51e1h,0b8cf388dh,06961b9d6h,0344a5560h,06a97fd0ch,01a6778b8h
- DD 0ecc4c7e3h,0d840fdc1h,016db68cch,0de9fe47dh,0a3e216aah,0e95f89deh,09594a8beh,084f1a6a4h,05a7b162bh,07ddc7d72h,0adc817a3h,0c5cfda19h,078b58d46h,080a5d350h,082978f19h,093365b13h
- DD 026a1fc90h,02e44d225h,04d70705dh,00d6d10d2h,0d70c45f4h,0d94b6b10h,0b216c079h,00f201022h,0658fde41h,0cec966c5h,07e27601dh,0a8d2bc7dh,0ff230be7h,0bfcce3e1h,00033ffb5h,03394ff6bh
- DD 08132c9afh,0d890c509h,0361e7868h,0aac4b0ebh,0e82d15aah,05194ded3h,023ae6b7dh,04550bd2eh,0ea5399d4h,03fda318eh,091638b80h,0d989bffah,0a14aa12dh,05ea124d0h,03667b944h,01fb1b899h
- DD 044c44d6ah,095ec7969h,057e86137h,091df144ah,073adac44h,0915fd620h,059a83801h,08f01732dh,03aa0a633h,0ec579d25h,0c9d6d59ch,006de5e7ch,0b1ef8010h,0c132f958h,0e65c1a02h,029476f96h
- DD 0d34c3565h,0336a77c0h,01b9f1e9eh,0ef1105b2h,0f9e08002h,063e6d08bh,0c613809eh,09aff2f21h,03a80e75dh,0b5754f85h,06bbda681h,0de71853eh,08197fd7ah,086f041dfh,0127817fah,08b332e08h
- DD 0b9c20cdah,005d99be8h,0d5cd0c98h,089f7aad5h,05bb94183h,07ef936feh,0b05cd7f2h,092ca0753h,074a1e035h,09d65db11h,013eaea92h,002628cc8h,049e4fbf2h,0f2d9e242h,0e384f8b7h,094fdfd9bh
- DD 063428c6bh,065f56054h,090b409a5h,02f7205b2h,0ff45ae11h,0f778bb78h,0c5ee53b2h,0a13045beh,003ef77feh,0e00a14ffh,0ffef8befh,0689cd59fh,01e9ade22h,03578f0edh,06268b6a8h,0e99f3ec0h
- DD 0ea1b3c3eh,0a2057d91h,0b8823a4ah,02d1a7053h,02cca451eh,0abbb336ah,02218bb5dh,0cd2466e3h,0c8cb762dh,03ac1f42fh,07690211fh,07e312aaeh,045d07450h,0ebb9bd73h,046c2213fh,0207c4b82h
- DD 0375913ech,099d425c1h,067908220h,094e45e96h,0cd67dbf6h,0c08f3087h,0c0887056h,0a5670fbeh,066f5b8fch,06717b64ah,0786fec28h,0d5a56aeah,0c0ff4952h,0a8c3f55fh,0457ac49bh,0a77fefaeh
- DD 098379d44h,029882d7ch,0509edc8ah,0d000bdfbh,0e66fe464h,0c6f95979h,0fa61bde0h,0504a6115h,0effea31ah,056b3b871h,0f0c21a54h,02d3de26dh,0834753bfh,021dbff31h,069269d86h,0e67ecf49h
- DD 0151fe690h,07a176952h,07f2adb5fh,003515804h,0d1b62a8dh,0ee794b15h,0aae454e6h,0f004ceech,0f0386fach,00897ea7ch,0d1fca751h,03b62ff12h,01b7a04ech,0154181dfh,0fb5847ech,02008e04ah
- DD 041dbd772h,0d147148eh,022942654h,02b419f73h,0e9c544f7h,0669f30d3h,0c8540149h,052a2c223h,0634dfb02h,05da9ee14h,0f47869f3h,05f074ff0h,0a3933acch,074ee878dh,04fe35ed1h,0e6510651h
- DD 0f1012e7ah,0b3eb9482h,0a8a566aeh,051013cc0h,047c00d3bh,0dd5e9243h,0946bb0e5h,07fde089dh,0c731b4b3h,0030754feh,099fda062h,012a136a4h,05a1a35bch,07c1064b8h,0446c84efh,0bf1f5763h
- DD 0a16d4b34h,0ed29a56dh,0dca21c4fh,07fba9d09h,06d8de486h,066d7ac00h,073a2a5e1h,060061987h,09da28ff0h,08b400f86h,043c4599ch,03133f708h,0ee28cb0dh,09911c9b8h,08e0af61dh,0cd7e2874h
- DD 072ed91fch,05a85f0f2h,09cd4a373h,085214f31h,01925253ch,0881fe5beh,091e8bc76h,0d8dc98e0h,0585cc3a2h,07120affeh,0735bf97ah,0724952edh,03eb34581h,05581e7dch,0e52ee57dh,05cbff4f2h
- DD 087d8cc7bh,08d320a0eh,0f1d280d0h,09beaa7f3h,09beec704h,07a0b9571h,05b7f0057h,09126332eh,08ed3bd6dh,001fbc1b4h,0d945eb24h,035bb2c12h,09a8ae255h,06404694eh,08d6abfb3h,0b6092eech
- DD 0cc058865h,04d76143fh,06e249922h,07b0a5af2h,06a50d353h,08aef9440h,064f0e07ah,0e11e4bcch,0a14a90fah,04472993ah,0ba0c51d4h,07706e20ch,01532672dh,0f403292fh,021829382h,052573bfah
- DD 03b5bdb83h,06a7bb6a9h,0a4a72318h,008da65c0h,063eb065fh,0c58d22aah,01b15d685h,01717596ch,0b266d88bh,0112df0d0h,05941945ah,0f688ae97h,07c292cach,0487386e3h,057d6985ch,042f3b50dh
- DD 06a90fc34h,06da4f998h,065ca8a8dh,0c8f257d3h,06951f762h,0c2feabcah,074c323ach,0e1bc81d0h,0251a2a12h,01bc68f67h,0be8a70dch,010d86587h,0f0f84d2eh,0d648af7fh,06a43ac92h,0f0aa9ebch
- DD 027596893h,069e3be04h,045bf452bh,0b6bb02a6h,0f4c698c8h,00875c11ah,0bece3794h,06652b5c7h,04f5c0499h,07b3755fdh,0b5532b38h,06ea16558h,0a2e96ef7h,0d1c69889h,061ed8f48h,09c773c3ah
- DD 09b323abch,02b653a40h,0f0e1d791h,0e26605e1h,04a87157ah,045d41064h,0cbbce616h,08f9a78b7h,0c407edddh,0cf1e44aah,0a35b964fh,081ddd1d8h,0fd083999h,0473e339eh,08e796802h,06c94bddeh
- DD 08545d185h,05a304adah,0738bb8cbh,082ae44eah,0df87e10eh,0628a35e3h,0a15b9fe3h,0d3624f3dh,014be4254h,0cc44209bh,0bdbc2ea5h,07d0efcbch,004c37bbeh,01f603362h,056a5852ch,021f363f5h
- DD 0a8501550h,0a1503d1ch,0d8ab10bbh,02251e0e1h,06961c51ch,0de129c96h,081910f68h,01f7246a4h,05f2591f2h,02eb744eeh,05e627157h,03c47d33fh,022f3bd68h,04d6d62c9h,0cb8df856h,06120a64bh
- DD 07b5d07dfh,03a9ac6c0h,07ef39783h,0a92b9558h,0ab3a9b4fh,0e128a134h,0b1252f05h,041c18807h,080ba9b1ch,0fc7ed089h,0c532a9ddh,0ac8dc6deh,055246809h,0bf829cefh,05b4ee80fh,0101b784fh
- DD 0b6f11603h,0c09945bbh,041d2801eh,057b09dbeh,0a97534a8h,0fba5202fh,0c17b9614h,07fd8ae5fh,078308435h,0a50ba666h,0d3868c4dh,09572f77ch,02dd7aab0h,00cef7bfdh,02c7c79ffh,0e7958e08h
- DD 025346689h,081262e42h,0b07c7004h,0716da290h,0b7950ee3h,035f911eah,0261d21b5h,06fd72969h,008b640d3h,052389803h,0887f12a1h,05b0026eeh,0742e9311h,020e21660h,05ff77ff7h,00ef6d541h
- DD 0f9c41135h,0969127f0h,068a64993h,0f21d60c9h,0e541875ch,0656e5d0ch,0a1d3c233h,0f1e0f84eh,006002d60h,09bcca359h,006191552h,0be2da60ch,061181ec3h,05da8bbaeh,065806f19h,09f04b823h
- DD 0d4b79bb8h,0f1604a7dh,052c878c8h,0aee806fbh,08d47b8e8h,034144f11h,0949f9054h,072edf52bh,02127015ah,0ebfca84eh,09cb7cef3h,09051d0c0h,0296deec8h,086e8fe58h,041010d74h,033b28188h
- DD 0171b445fh,001079383h,08131ad4ch,09bcf21e3h,0c93987e8h,08cdfe205h,0c92e8c8fh,0e63f4152h,030add43dh,0729462a9h,0c980f05ah,062ebb143h,03b06e968h,04f3954e5h,0242cf6b1h,0fe1d75adh
- DD 0af8685c8h,05f95c6c7h,02f8f01aah,0d4c1c8ceh,02574692ah,0c44bbe32h,0d4a4a068h,0b8003478h,02eca3cdbh,07c8fc6e5h,0ec04d399h,0ea1db16bh,08f2bc5cfh,0b05bc82eh,0f44793d2h,0763d517fh
- DD 008bd98d0h,04451c1b8h,06575f240h,0644b1cd4h,07375d270h,06907eb33h,0fa2286bdh,056c8bebdh,0c4632b46h,0c713d2ach,0afd60242h,017da427ah,0c95c7546h,0313065b7h,0bf17a3deh,0f8239898h
- DD 04c830320h,0f3b7963fh,0903203e3h,0842c7aa0h,0e7327afbh,0af22ca0ah,0967609b6h,038e13092h,0757558f1h,073b8fb62h,0f7eca8c1h,03cc3e831h,0f6331627h,0e4174474h,0c3c40234h,0a77989cah
- DD 044a081e0h,0e5fd17a1h,0b70e296ah,0d797fb7dh,0481f719ch,02b472b30h,0fe6f8c52h,00e632a98h,0c5f0c284h,089ccd116h,02d987c62h,0f51088afh,04c2de6cfh,02a2bccdah,0f679f0f9h,0810f9efeh
- DD 07ffe4b3eh,0b0f394b9h,0e5fa5d21h,00b691d21h,09dfbbc75h,0b0bd7747h,0faf78b00h,0d2830fdah,052434f57h,0f78c249ch,098096dabh,04b1f7545h,08ff8c0b3h,073bf6f94h,0454e134ch,034aef03dh
- DD 0b7ac7ec5h,0f8d151f4h,0e50da7d5h,0d6ceb95ah,0dc3a0eb8h,0a1b492b0h,0b3dd2863h,075157b69h,0c5413d62h,0e2c4c74eh,0bc5fc4c7h,0be329ff7h,060fa9ddah,0835a2aeah,07445cb87h,0f117f5adh
- DD 0b0166f7ah,0ae8317f4h,0ceec74e6h,0fbd3e3f7h,0e0874bfdh,0fdb516ach,0c681f3a3h,03d846019h,07c1620b0h,00b12ee5ch,02b63c501h,0ba68b4ddh,06668c51eh,0ac03cd32h,04e0bcb5bh,02a6279f7h
- DD 06ae85c10h,017bd69b0h,01dfdd3a6h,072946979h,02c078bech,0d9a03268h,0bfd68a52h,041c6a658h,00e023900h,0cdea1024h,0b10d144dh,0baeec121h,0058ab8dch,05a600e74h,0bb89ccddh,01333af21h
- DD 03aaba1f1h,0df25eae0h,03b7144cfh,02cada16eh,071ab98bch,0657ee27dh,07a6fc96eh,099088b4ch,03549dbd4h,005d5c0a0h,0f158c3ach,042cbdf8fh,087edd685h,03fb6b3b0h,086f064d0h,022071cf6h
- DD 0ff2811e5h,0d2d6721fh,0fe7fae8ch,0db81b703h,0d3f1f7bbh,03cfb74efh,016cdeb5dh,00cdbcd76h,0566a808ch,04f39642ah,0340064d6h,002b74454h,00528fa6fh,0fabbadcah,0d3fc0bb6h,0e4c3074ch
- DD 0b796d219h,0b32cb8b0h,034741dd9h,0c3e95f4fh,068edf6f5h,087212125h,0a2b9cb8eh,07a03aee4h,0f53a89aah,00cd3c376h,0948a28dch,00d8af9b1h,0902ab04fh,0cf86a3f4h,07f42002dh,08aacb62ah
- DD 0f62ffd52h,0106985ebh,05797bf10h,0e670b54eh,0c5e30aefh,04b405209h,04365b5e9h,012c97a20h,01fe32093h,0104646ceh,03907a8c9h,013cb4ff6h,0d46e726bh,08b9f30d1h,0aba0f499h,0e1985e21h
- DD 010a230cdh,0c573dea9h,0cd30f947h,024f46a93h,0abe2010ah,0f2623fcfh,073f00e4fh,03f278cb2h,050b920ebh,0ed55c67dh,08e760571h,0f1cb9a2dh,00895b709h,07c50d109h,0190d4369h,04207cf07h
- DD 0c4127fe1h,03b027e81h,03ae9c566h,0a9f8b9adh,0acbfbba5h,05ab10851h,0569556f5h,0a747d648h,02ba97bf7h,0cc172b5ch,0bcfa3324h,015e0f77dh,07686279dh,0a345b797h,0e38003d3h,05a723480h
- DD 08f5fcda8h,0fd8e139fh,0bdee5bfdh,0f3e558c4h,0e33f9f77h,0d76cbaf4h,071771969h,03a4c97a4h,0f6dce6a7h,0da27e84bh,013e6c2d1h,0ff373d96h,0d759a6e9h,0f115193ch,063d2262ch,03f9b7025h
- DD 0317cd062h,0d9764a31h,0199f8332h,030779d8eh,016b11b0bh,0d8074106h,078aeaed8h,07917ab9fh,028fb1d8eh,0b67a9cbeh,0136eda33h,02e313563h,0a371a86ch,0010b7069h,06744e6b7h,044d90fa2h
- DD 0d6b3e243h,068190867h,059048c48h,09fe6cd9dh,095731538h,0b900b028h,032cae04fh,0a012062fh,09399d082h,08107c8bch,041df12e2h,047e8c54ah,0b6ef3f73h,014ba5117h,081362f0bh,022260beah
- DD 01a18cc20h,090ea261eh,02321d636h,02192999fh,0e311b6a0h,0ef64d314h,03b54a1f5h,0d7401e4ch,06fbca2bah,019019983h,08fbffc4bh,046ad3293h,03786bf40h,0a142d3f6h,0b67039fch,0eb5cbc26h
- DD 0252bd479h,09cb0ae6ch,012b5848fh,005e0f88ah,0a5c97663h,078f6d2b2h,0c162225ch,06f6e149bh,0de601a89h,0e602235ch,0f373be1fh,0d17bbe98h,0a8471827h,0caf49a5bh,018aaa116h,07e1a0a85h
- DD 0270580c3h,06c833196h,0f1c98a14h,01e233839h,0ae34e0a5h,067b2f7b4h,0d8ce7289h,047ac8745h,0100dd467h,02b74779ah,04ee50d09h,0274a4337h,083608bc9h,0603dcf13h,0c89e8388h,0cd9da6c3h
- DD 0355116ach,02660199fh,0b6d18eedh,0cc38bb59h,02f4bc071h,03075f31fh,0265dc57eh,09774457fh,0c6db88bbh,006a6a9c8h,04ec98e04h,06429d07fh,005ecaa8bh,08d05e57bh,07872ea7bh,020f140b1h
- DD 0ca494693h,0df8c0f09h,0f252e909h,048d3a020h,057b14b12h,04c5c29afh,0bf47ad1ch,07e6fa37dh,049a0c938h,066e7b506h,06be5f41fh,0b72c0d48h,0b2359412h,06a6242b8h,08e859480h,0cd35c774h
- DD 087baa627h,012536feah,0f72aa680h,058c1fec1h,0601e5dc9h,06c29b637h,0de9e01b9h,09e3c3c1ch,02bcfe0b0h,0efc8127bh,02a12f50dh,035107102h,04879b397h,06ccd6cb1h,0f8a82f21h,0f792f804h
- DD 0a9b46402h,0509d4804h,0c10f0850h,0edddf85dh,04b6208aah,0928410dch,0391012dch,0f6229c46h,07727b9b6h,0c5a7c41eh,0aa444842h,0289e4e4bh,0e9a947eah,0049ba1d9h,083c8debch,044f9e47fh
- DD 0611f8b8eh,0fa77a1feh,0f518f427h,0fd2e416ah,0114ebac3h,0c5fffa70h,05d89697bh,0fe57c4e9h,0b1aaf613h,0fdd053ach,0ea585a45h,031df210fh,024985034h,0318cc10eh,05f1d6130h,01a38efd1h
- DD 00b1e9e21h,0bf86f237h,01dbe88aah,0b258514dh,090c1baf9h,01e38a588h,0bdb9b692h,02936a01eh,06dd5b20ch,0d576de98h,070f98ecfh,0b586bf71h,0c42d2fd7h,0cccf0f12h,0fb35bd7bh,08717e61ch
- DD 035e6fc06h,08b1e5722h,00b3e13d5h,03477728fh,0aa8a7372h,0150c294dh,03bfa528ah,0c0291d43h,0cec5a196h,0c6c8bc67h,05c2e8a7ch,0deeb31e4h,0fb6e1c51h,0ba93e244h,02e28e156h,0b9f8b71bh
- DD 0968a2ab9h,0ce65a287h,046bbcb1fh,0e3c5ce69h,0e7ae3f30h,0f8c835b9h,0ff72b82bh,016bbee26h,0fd42cd22h,0665e2017h,0f8b1d2a0h,01e139970h,079204932h,0125cda29h,049c3bee5h,07aee94a5h
- DD 089821a66h,068c70160h,08f981669h,0f7c37678h,048cc3645h,0d90829fch,0d70addfch,0346af049h,0370bf29ch,02057b232h,042e650eeh,0f90c73ceh,0a126ab90h,0e03386eah,0975a087bh,00e266e7eh
- DD 00fca65d9h,080578eb9h,016af45b8h,07e2989eah,0cac75a4eh,07438212dh,04fef36b8h,038c7ca39h,0d402676ah,08650c494h,0f72c7c48h,026ab5a66h,0ce3a464eh,04e6cb426h,02b72f841h,0f8f99896h
- DD 01a335cc8h,08c318491h,06a5913e4h,0563459bah,0c7b32919h,01b920d61h,0a02425adh,0805ab8b6h,08d006086h,02ac512dah,0bcf5c0fdh,06ca4846ah,0ac2138d7h,0afea51d8h,0344cd443h,0cb647545h
- DD 0bd7d9040h,00429ee8fh,0819b9c96h,0ee66a2deh,0dea7d744h,054f9ec25h,0671721bbh,02ffea642h,0114344eah,04f19dbd1h,0fd0dbc8bh,004304536h,029ec7f91h,0014b50aah,0bb06014dh,0b5fc22feh
- DD 01ee682e0h,060d963a9h,0fe85c727h,0df48abc0h,02e707c2dh,00cadba13h,0a645aeffh,0de608d3ah,0edafd883h,005f1c28bh,0bd94de1fh,03c362edeh,013593e41h,08dd0629dh,0766d6eafh,00a5e736fh
- DD 0f68cf9d1h,0bfa92311h,0c1797556h,0a4f9ef87h,05601c209h,010d75a1fh,009b07361h,0651c374ch,088b5ceadh,049950b58h,06fa9dbaah,00ef00058h,04e15f33ah,0f51ddc26h,02ef46140h,01f8b5ca6h
- DD 0ee9523f0h,0343ac0a3h,0975ea978h,0bb75eab2h,0107387f4h,01bccf332h,09ab0062eh,0790f9259h,01e4f6a5fh,0f1a363adh,062519a50h,006e08b84h,07265f1eeh,060915187h,093ae985eh,06a80ca34h
- DD 0aaba4864h,081b29768h,08d52a7d6h,0b13cabf2h,08ead03f1h,0b5c36348h,081c7c1c0h,0c932ad95h,0cae1e27bh,05452708eh,01b0df648h,09dac4269h,0dfcdb8bch,0233e3f0ch,0ec540174h,0e6ceccdfh
- DD 095081181h,0bd0d845eh,0699355d5h,0cc8a7920h,0c3b375a8h,0111c0f6dh,0fd51e0dch,0fd95bc6bh,06888523ah,04a106a26h,0cb01a06dh,04d142bd6h,0adb9b397h,079bfd289h,0e9863914h,00bdbfb94h
- DD 01660f6a6h,029d8a229h,0551c042dh,07f6abcd6h,00ac3ffe8h,013039debh,0ec8523fbh,0a01be628h,00ca1c328h,06ea34103h,0b903928eh,0c74114bdh,09e9144b0h,08aa4ff4eh,07f9a4b17h,07064091fh
- DD 0e447f2c4h,0a3f4f521h,0604291f0h,081b8da7ah,07d5926deh,0d680bc46h,034a1202fh,084f21fd5h,04e9df3d8h,01d1e3181h,039ab8d34h,01ca4861ah,05b19aa4ah,0809ddeech,04d329366h,059f72f7eh
- DD 0386d5087h,0a2f93f41h,0dd67d64fh,040bf739ch,066702158h,0b4494205h,073b1e178h,0c33c65beh,038ca6153h,0cdcd657ch,0dc791976h,097f4519ah,0cd6e1f39h,0cc7c7f29h,07e3c3932h,038de9cfbh
- DD 07b793f85h,0e448eba3h,0f067e914h,0e9f8dbf9h,0f114ae87h,0c0390266h,0cd6a8e2ah,039ed75a7h,07ffba390h,0adb14848h,06af9bc09h,067f8cb8bh,09c7476dbh,0322c3848h,052a538d6h,0a320fecfh
- DD 0b2aced2bh,0e0493002h,0616bd430h,0dfba1809h,0c331be70h,0531c4644h,090d2e450h,0bc04d32eh,00f9f142dh,01805a0d1h,047ee5a23h,02c44a0c5h,03989b4e3h,031875a43h,00c063481h,06b1949fdh
- DD 0be0f4492h,02dfb9e08h,0e9d5e517h,03ff0da03h,0f79466a8h,003dbe9a1h,015ea9932h,00b87bcd0h,0ab1f58abh,0eb64fc83h,0817edc8ah,06d9598dah,01d3b67e5h,0699cff66h,092635853h,0645c0f29h
- DD 0eabaf21ch,0253cdd82h,02241659eh,082b9602ah,02d9f7091h,02cae07ech,08b48cd9bh,0be4c720ch,06f08d6c9h,06ce5bc03h,0af10bf40h,036e8a997h,03e10ff12h,083422d21h,0bcc12494h,07b26d3ebh
- DD 0c9469ad6h,0b240d2d0h,030afa05bh,0c4a11b4dh,0dd6ba286h,04b604aceh,03ee2864ch,018486600h,08d9ce5beh,05869d6bah,0ff4bfb0dh,00d8f68c5h,05700cf73h,0b69f210bh,06d37c135h,061f6653ah
- DD 05aff5a48h,0ff3d432bh,072ba3a69h,00d81c4b9h,0fa1899efh,0ee879ae9h,02d6acafdh,0bac7e2a0h,01c664399h,0d6d93f6ch,05bcb135dh,04c288de1h,09dab7cbfh,083031dabh,03abbf5f0h,0fe23feb0h
- DD 0cdedca85h,09f1b2466h,01a09538ch,0140bb710h,05e11115dh,0ac8ae851h,06f03f59eh,00d63ff67h,07d234afbh,0755e5551h,07e208fc1h,061c2db4eh,0f28a4b5dh,0aa9859ceh,034af030fh,0bdd6d4fch
- DD 03be01cb1h,0d1c4a26dh,0243aa07ch,09ba14ffch,0b2503502h,0f95cd3a9h,07d2a93abh,0e379bc06h,0d4ca8d68h,03efc18e9h,080bb412ah,0083558ech,09645a968h,0d903b940h,09ba6054fh,0a499f0b6h
- DD 0b8349abeh,0208b573ch,030b4fc1ch,03baab3e5h,0cb524990h,087e978bah,0ccdf0e80h,03524194eh,07d4bcc42h,062711725h,0b90109bah,0e90a3d9bh,01323e1e0h,03b1bdd57h,05eae1599h,0b78e9bd5h
- DD 09e03d278h,00794b746h,0d70e6297h,080178605h,099c97855h,0171792f8h,0f5a86b5ch,011b393eeh,0d8884f27h,048ef6582h,0bf19ba5fh,0bd44737ah,0a42062c6h,08698de4ch,061ce9c54h,08975eb80h
- DD 0d7fe71f3h,0d50e57c7h,0bc97ce38h,015342190h,04df07b63h,051bda2deh,0200eb87dh,0ba12aeaeh,0a9b4f8f6h,0abe135d2h,0fad6d99ch,004619d65h,07994937ch,04a6683a7h,06f94f09ah,07a778c8bh
- DD 020a71b89h,08c508623h,01c229165h,0241a2aedh,0aaf83a99h,0352be595h,01562bac8h,09fbfee7fh,05c4017e3h,0eaf658b9h,015120b86h,01dc7f9e0h,04c034d6fh,0d84f13ddh,0eaea3038h,0283dd737h
- DD 0cd85d6a2h,0197f2609h,0fae60177h,06ebbc345h,04e12fedeh,0b80f031bh,007a2186bh,0de55d0c2h,024dcdd5ah,01fb3e37fh,07ed191fbh,08d602da5h,076023e0dh,0108fb056h,0459c20c0h,070178c71h
- DD 03fe54cf0h,0fad5a386h,002bbb475h,0a4a3ec4fh,0919d94d7h,01aa5ec20h,0a81e4ab3h,05d3b63b5h,05ad3d2afh,07fa733d8h,0d1ac7a37h,0fbc586ddh,040779614h,0282925deh,0e74a242ah,0fe0ffffbh
- DD 0906151e5h,03f39e67fh,055e10649h,0cea27f5fh,0c17cf7b7h,0dca1d4e1h,02fe2362dh,00c326d12h,07dd35df3h,005f7ac33h,0c396dbdfh,00c3b7639h,003b7db1ch,00912f5ach,05c9ed4a9h,09dea4b70h
- DD 0aae3f639h,0475e6e53h,0fc278bach,0faba0e7ch,09490375fh,016f9e221h,0a5a7ed0ah,0aebf9746h,0f41ad5d6h,045f9af3fh,0b2e99224h,003c4623ch,0b3cf56aah,082c5bb5ch,034567ed3h,064311819h
- DD 08be489ach,0ec57f211h,0b9a1104bh,02821895dh,06064e007h,0610dc875h,05b20d0feh,08e526f3fh,05b645aeeh,06e71ca77h,0800e10ffh,03d1dcb9fh,0189cf6deh,036b51162h,06bb17353h,02c5a3e30h
- DD 02a6c6fbfh,0c186cd3eh,04bf97906h,0a74516fah,0279d6901h,05b4b8f4bh,02b573743h,00c4e57b4h,0b6e386b6h,075fdb229h,099deac27h,0b46793fdh,0cf712629h,0eeec47eah,0cbc3b2ddh,0e965f3c4h
- DD 0425c6559h,08dd1fb83h,00af06fdah,07fc00ee6h,033d956dfh,0e98c9225h,04fbdc8a2h,00f1ef335h,0b79b8ea2h,02abb5145h,0bdbff288h,040fd2945h,0d7185db7h,06a814ac4h,0c084609ah,0c4329d6fh
- DD 0ed1be45dh,0c9ba7b52h,0e4cd2c74h,0891dd20dh,0824139b1h,05a4d4a7fh,0b873c710h,066c17716h,02843c4e0h,05e5bc141h,0b97eb5bfh,0d5ac4817h,0450c95c7h,0c0f8af54h,0318406c5h,0c91b3fa0h
- DD 0ab9d97f8h,0360c340ah,090a2d611h,0fb57bd07h,0a6a6f7e5h,04339ae3ch,02feb8a10h,09c1fcd2ah,0c7ea7432h,0972bcca9h,0308076f6h,01b0b924ch,02a5b4ca5h,080b2814ah,061ef3b29h,02f78f55bh
- DD 0c18a414fh,0f838744ah,0903d0a86h,0c611eaaeh,02a453f55h,094dabc16h,014efb279h,0e6f2e3dah,09320dc3ch,05b7a6017h,08df6b5a4h,0692e382fh,02d40fa90h,03f5e15e0h,0643dd318h,0c87883aeh
- DD 053544774h,0511053e4h,03adba2bch,0834d0ecch,0bae371f5h,04215d7f7h,06c8663bch,0fcfd57bfh,0d6901b1dh,0ded2383dh,0b5587dc3h,03b49fbb4h,007625f62h,0fd44a08dh,09de9b762h,03ee4d65bh
- DD 00d63d1fah,064e5137dh,002a9d89fh,0658fc052h,050436309h,048894874h,0d598da61h,0e9ae30f8h,0818baf91h,02ed710d1h,08b6a0c20h,0e27e9e06h,01c1a6b44h,01e28dcfbh,0d6ac57dch,0883acb64h
- DD 0c2c6ff70h,08735728dh,0c5dc2235h,079d6122fh,019e277f9h,023f5d003h,0dded8cc7h,07ee84e25h,063cd880ah,091a8afb0h,03574af60h,03f3ea7c6h,002de7f42h,00cfcdc84h,0b31aa152h,062d0792fh
- DD 08a5807ceh,08e1b4e43h,0e4109a7eh,0ad283893h,0afd59ddah,0c30cc9cbh,03d8d8093h,0f65f36c6h,0a60d32b2h,0df31469eh,03e8191c8h,0ee93df4bh,0355bdeb5h,09c1017c5h,08616aa28h,0d2623185h
- DD 0dec31a21h,0b02c83f9h,06ad9d573h,0988c8b23h,0a57be365h,053e983aeh,0646f834eh,0e968734dh,05da6309bh,09137ea8fh,0c1f1ce16h,010f3a624h,0ca440921h,0782a9ea2h,05b46f1b5h,0df94739eh
- DD 0cce85c9bh,09f9be006h,0a4c7c2d3h,0360e70d6h,0aefa1e60h,02cd5beeah,08c3d2b6dh,064cf63c0h,0e1cf6f90h,0fb107fa3h,0d5e044e6h,0b7e937c6h,0ce34db9fh,074e8ca78h,03e210bd0h,04f8b36c1h
- DD 034a35ea8h,01df165a4h,04d4412f6h,03418e0f7h,0518836c3h,05af1f8afh,0130e1965h,042ceef4dh,0543a1957h,05560ca0bh,0886cb123h,0c33761e5h,0fe98ed30h,066624b1fh,01090997dh,0f772f4bfh
- DD 04885d410h,0f4e540bbh,09ba5f8d7h,07287f810h,0de98dfb1h,022d0d865h,0bcfbb8a3h,049ff51a1h,06bc3012eh,0b6b6fa53h,0170d541dh,03d31fd72h,04b0f4966h,08018724fh,087dbde07h,079e7399fh
- DD 0f4f8b16ah,056f8410eh,0c47b266ah,097241afeh,06d9c87c1h,00a406b8eh,0cd42ab1bh,0803f3e02h,004dbec69h,07f0309a8h,03bbad05fh,0a83b85f7h,0ad8e197fh,0c6097273h,05067adc1h,0c097440eh
- DD 03524ff16h,0730eafb6h,0823fc6ceh,0d7f9b51eh,0443e4ac0h,027bd0d32h,04d66f217h,040c59ad9h,017c387a4h,06c33136fh,0eb86804dh,05043b8d5h,0675a73c9h,074970312h,0f16669b6h,0838fdb31h
- DD 0418e7dddh,0c507b6ddh,0472f19d6h,039888d93h,00c27eb4dh,07eae26beh,0fbabb884h,017b53ed3h,02b01ae4fh,0fc27021bh,0cf488682h,088462e87h,0215e2d87h,0bee096ech,0d242e29bh,0eb2fea9ah
- DD 0b821fc28h,05d985b5fh,0dc1e2ad2h,089d2e197h,09030ba62h,055b566b8h,04f41b1c6h,0e3fd41b5h,0b9a96d61h,0b738ac2eh,0369443f4h,07f8567cah,0f803a440h,08698622dh,08fe2f4dch,02b586236h
- DD 056b95bceh,0bbcc00c7h,0616da680h,05ec03906h,072214252h,079162ee6h,086a892d2h,043132b63h,02f3263bfh,04bdd3ff2h,09cd0a142h,0d5b3733ch,044415ccbh,0592eaa82h,08d5474eah,0663e8924h
- DD 05236344eh,08058a25eh,0bda76ee6h,082e8df9dh,011cc3d22h,0dcf6efd8h,03b4ab529h,000089cdah,0bd38a3dbh,091d3a071h,0ef72b925h,04ea97fc0h,0ea3edf75h,00c9fc15bh,0a4348ed3h,05a6297cdh
- DD 0ce7c42d4h,00d38ab35h,082feab10h,09fd493efh,082111b45h,046056b6dh,073efc5c3h,0da11dae1h,05545a7fbh,0dc740278h,040d507e6h,0bdb2601ch,07066fa58h,0121dfeebh,039ae8c2ah,0214369a8h
- DD 006e0956ch,0195709cbh,0010cd34bh,04c9d254fh,00471a532h,0f51e13f7h,01e73054dh,0e19d6791h,0db5c7be3h,0f702a628h,0b24dde05h,0c7141218h,0f29b2e2eh,0dc18233ch,085342dbah,03a6bd1e8h
- DD 0b311898ch,03f747fa0h,0cd0eac65h,0e2a272e4h,0f914d0bch,04bba5851h,0c4a43ee3h,07a1a9660h,0a1c8cde9h,0e5a367ceh,07271abe3h,09d958ba9h,03d1615cdh,0f3ff7eb6h,0f5ae20b0h,0a2280dceh
- DD 0cf640147h,056dba5c1h,05e83d118h,0ea5a2e3dh,0da24c511h,004cd6b6dh,0e854d214h,01c0f4671h,069565381h,091a6b7a9h,0decf1f5bh,0dc966240h,0fcf5d009h,01b22d21ch,09021dbd5h,02a05f641h
- DD 0d4312483h,08c0ed566h,0643e216fh,05179a95dh,017044493h,0cc185fech,054991a21h,0b3063339h,00081a726h,0d801ecdbh,04fa89bbbh,00149b0c6h,04391b6b9h,0afe9065ah,0d633f3a3h,0edc92786h
- DD 0ae6a8e13h,0e408c24ah,09f3897abh,085833fdeh,0d81a0715h,043800e7eh,0b44ffc5fh,0de08e346h,0cdeff2e0h,07094184ch,0165eaed1h,049f9387bh,0777c468ah,0635d6129h,0538c2dd8h,08c0dcfd1h
- DD 07a6a308bh,0d6d9d9e3h,04c2767d3h,062375830h,0f38cbeb6h,0874a8bc6h,0ccb6fd9eh,0d94d3f1ah,0ba21f248h,092a9735bh,06cd1efb0h,0272ad0e5h,005b03284h,07437b69ch,06948c225h,0e7f04702h
- DD 0cba2ecech,08a56c04ah,0e3a73e41h,00c181270h,003e93725h,06cb34e9dh,0496521a9h,0f77c8713h,0fa7f9f90h,094569183h,08c9707adh,0f2e7aa4ch,026c1c9a3h,0ced2c9bah,040197507h,09109fe96h
- DD 0e9adfe1ch,09ae868a9h,0314e39bbh,03984403dh,0f2fe378fh,0b5875720h,0ba44a628h,033f901e0h,03652438ch,0ea1125feh,09dd1f20bh,0ae9ec4e6h,0bebf7fbdh,01e740d9eh,042dbe79ch,06dbd3ddch
- DD 0edd36776h,062082aech,0e9859039h,0f612c478h,0032f7065h,0a493b201h,04ff9b211h,0ebd4d8f2h,0aac4cb32h,03f23a0aah,015ed4005h,0ea3aadb7h,0afa27e63h,0acf17ea4h,0c11fd66ch,056125c1ah
- DD 03794f8dch,0266344a4h,0483c5c36h,0dcca923ah,03f9d10a0h,02d6b6bbfh,081d9bdf3h,0b320c5cah,047b50a95h,0620e28ffh,0cef03371h,0933e3b01h,099100153h,0f081bf85h,0c3a8c8d6h,0183be9a0h
- DD 0d6bbe24dh,04e3ddc5ah,053843795h,0c6c74630h,065ec2d4ch,078193dd7h,0cd3c89b2h,0b8df26cch,05a483f8dh,098dbe399h,07dd3313ah,072d8a957h,0ab0bd375h,065087294h,07c259d16h,0fcd89248h
- DD 07613aa81h,08a9443d7h,085fe6584h,080100800h,07fb10288h,070fc4dbch,0e86beee8h,0f58280d3h,07c978c38h,014fdd82fh,00de44d7bh,0df1204c1h,04160252fh,0a08a1c84h,0c17646a5h,0591554cah
- DD 0a05bd525h,0214a37d6h,007957b3ch,048d5f09bh,0d7109bc9h,00247cdcbh,030599ce7h,040f9e4bbh,0f46ad2ech,0c325fa03h,0c3e3f9eeh,000f766cfh,0d43a4577h,0ab556668h,03ee03b93h,068d30a61h
- DD 077b46a08h,07ddc81eah,0c7480699h,0cf5a6477h,06633f683h,043a8cb34h,092363c60h,01b867e6bh,01f60558eh,043921114h,02f41450eh,0cdbcdd63h,0cc630e8bh,07fc04601h,097038b43h,0ea7c66d5h
- DD 004e99fd8h,07259b8a5h,04785549ah,098a8dd12h,0840552e1h,00e459a7ch,04bb0909eh,0cdfcf4d0h,053758da7h,034a86db2h,0eac997e1h,0e643bb83h,0530c5b7eh,096400bd7h,0b41c8b52h,09f97af87h
- DD 0fbeee3f9h,034fc8820h,049091afdh,093e53490h,09a31f35ch,0764b9be5h,057e3d924h,071f37864h,0943aa75eh,002fb34e0h,0ab8ff6e4h,0a18c9c58h,033cf0d19h,0080f31b1h,0083518a7h,05c9682dbh
- DD 0b709c3deh,0873d4ca6h,03575b8f0h,064a84262h,0020154bbh,06275da1fh,0d17cf1abh,097678caah,0951a95c3h,08779795fh,050fccc08h,0dd35b163h,033d8f031h,032709627h,0498dd85ch,03c5ab10ah
- DD 041dca566h,0b6c185c3h,0d8622aa3h,07de7fedah,0901b6dfbh,099e84d92h,07c4ad288h,030a02b0eh,02fd3cf36h,0c7c81daah,0df89e59fh,0d1319547h,0cd496733h,0b2be8184h,093d3412bh,0d5f449ebh
- DD 025fe531dh,07ea41b1bh,06a1d5646h,0f9797432h,02bde501ah,086067f72h,00c85e89ch,0f91481c0h,0f8b05bc6h,0ca8ee465h,002e83cdah,01844e1cfh,0b4dbe33bh,0ca82114ah,04eabfde2h,00f9f8769h
- DD 038b27fe2h,04936b1c0h,0aba402dfh,063b6359bh,0656bdbabh,040c0ea2fh,06580c39ch,09c992a89h,02a60aed1h,0600e8f15h,0e0bf49dfh,0eb089ca4h,02d42d99ah,09c233d7dh,04c6bc2fah,0648d3f95h
- DD 0e1add3f3h,0dcc383a8h,04f64a348h,0f42c0c6ah,00030dbdbh,02abd176fh,07d6c215eh,04de501a3h,04b9a64bch,04a107c1fh,02496cd59h,0a77f0ad3h,07688dffbh,0fb78ac62h,067937d8eh,07025a2cah
- DD 0d1a8f4e7h,0fde8b2d1h,07354927ch,0f5b3da47h,0d9205735h,0e48606a3h,0e177b917h,0ac477cc6h,0a883239ah,0fb1f73d2h,0cc8b8357h,0e12572f6h,0fb1f4f86h,09d355e9ch,0d9f3ec6eh,089b795f8h
- DD 0b54398dch,027be56f1h,03fedeed5h,01890efd7h,09c6d0140h,062f77f1fh,0596f0ee4h,07ef0e314h,0cc61dab3h,050ca6631h,0f4866e4fh,04a39801dh,0ae363b39h,066c8d032h,02ead66aah,022c591e5h
- DD 0de02a53eh,0954ba308h,0d389f357h,02a6c060fh,0fbf40b66h,0e6cfcde8h,0c6340ce1h,08e02fc56h,073adb4bah,0e4957795h,0a7b03805h,07b86122ch,00c8e6fa6h,063f83512h,0057d7804h,083660ea0h
- DD 021ba473ch,0bad79105h,0ded5389dh,0b6c50beeh,0aa7c9bc0h,0ee2caf4dh,08c4e98a7h,0d97b8de4h,0ab3bbddbh,0a9f63e70h,02597815ah,03898aabfh,0ac15b3d9h,07659af89h,0703ce784h,0edf7725bh
- DD 0e085116bh,025470fabh,087285310h,004a43375h,0e2bfd52fh,04e39187eh,07d9ebc74h,036166b44h,0fd4b322ch,092ad433ch,0ba79ab51h,0726aa817h,0c1db15ebh,0f96eacd8h,00476be63h,0faf71e91h
- DD 0641fad98h,0dd69a640h,029622559h,0b7995918h,0de4199dch,003c6daa5h,0ad545eb4h,092cadc97h,0256534e4h,01028238bh,08595409ah,073e80ce6h,0d05dc59bh,0690d4c66h,0981dee80h,0c95f7b8fh
- DD 0d856ac25h,0f4337014h,0ac524dcah,0441bd9ddh,05f0499f5h,0640b3d85h,0d5fda182h,039cf84a9h,0b2aa95a0h,004e7b055h,00ddf1860h,029e33f0ah,0423f6b43h,0082e74b5h,00aaa2b0fh,0217edeb9h
- DD 083cbea55h,058b83f35h,0bc185d70h,0c485ee4dh,01e5f6992h,0833ff03bh,0cf0c0dd5h,0b5b9b9cch,04e9e8a50h,07caaee8eh,06269dafdh,0462e907bh,0fbe791c6h,06ed5cee9h,0ed430790h,068ca3259h
- DD 013b5ba88h,02b72bdf2h,035ef0ac4h,060294c8ah,019b99b08h,09c3230edh,06c2589aah,0560fff17h,0d6770374h,0552b8487h,09a56f685h,0a373202dh,045f175d9h,0d3e7f907h,0d080d810h,03c2f315fh
- DD 07b9520e8h,01130e9ddh,00af037b5h,0c078f9e2h,01e9c104ch,038cd2ec7h,0c472fe92h,00f684368h,06247e7efh,0d3f1b5edh,0396dfe21h,0b32d33a9h,04a9aa2c2h,046f59cf4h,0ff0f7e41h,069cd5168h
- DD 04b3234dah,03f59da0fh,0b4579ebeh,0cf0b0235h,06d2476c7h,06d1cbb25h,09dc30f08h,04f0837e6h,0906f6e98h,09a4075bbh,0c761e7d1h,0253bb434h,06e73af10h,0de2e645fh,00c5f131ch,0b89a4060h
- DD 0b8cc037fh,0d12840c5h,07405bb47h,03d093a5bh,0206348b8h,06202c253h,0c55a3ca7h,0bf5d57fch,08c3bef48h,089f6c90ch,05a0a960ah,023ac7623h,0552b42abh,0dfbd3d6bh,0132061f6h,03ef22458h
- DD 0c97e6516h,0d74e9bdah,0c230f49eh,088779360h,01e74ea49h,0a6ec1de3h,03fb645a2h,0581dcee5h,08f483f14h,0baef2391h,0d137d13bh,06d2dddfch,0d2743a42h,054cde50eh,0e4d97e67h,089a34fc5h
- DD 012e08ce5h,013f1f5b3h,0a7f0b2cah,0a80540b8h,001982805h,0854bcf77h,0233bea04h,0b8653ffdh,002b0b4c9h,08e7b8787h,09acb170ah,02675261fh,0930c14e5h,0061a9d90h,0def0abeah,0b59b30e0h
- DD 00200ec7dh,01dc19ea6h,00bce132bh,0b6f4a3f9h,0f13e27e0h,0b8d5de90h,01fade16fh,0baee5ef0h,0e4c6cf38h,06f406aaah,0d1369815h,0ab4cfe06h,0efd550c6h,00dcffe87h,075ff7d39h,09d4f59c7h
- DD 051deb6adh,0b02553b1h,0b1877749h,0812399a4h,0ca6006e1h,0ce90f71fh,0b02b6e77h,0c32363a6h,0dc36c64dh,002284fbeh,0a7e1ae61h,086c81e31h,0b909d94ah,02576c7e5h,0818b2bb0h,08b6f7d02h
- DD 056faa38ah,0eca3ed07h,09305bb54h,0a3790e6ch,07bc73061h,0d784eedah,06dd50614h,0bd56d369h,0229a8aa9h,0d6575949h,04595ec28h,0dcca8f47h,006ab4fe6h,0814305c1h,024f43f16h,0c8c39768h
- DD 0523f2b36h,0e2a45f36h,0920d93bbh,0995c6493h,090f1632bh,0f8afdab7h,01c295954h,079ebbecdh,079592f48h,0c7bb3ddbh,05f88e998h,067216a7bh,0bc01193eh,0d91f098bh,0b1db83fch,0f7d928a5h
- DD 0e991f600h,055e38417h,02981a934h,02a91113eh,006b13bdeh,0cbc9d648h,00755ff44h,0b011b6ach,0045ec613h,06f4cb518h,0c2f5930ah,0522d2d31h,0382e65deh,05acae1afh,027bc966fh,057643067h
- DD 01c7193f0h,05e12705dh,03be8858eh,0f0f32f47h,096c6dfc7h,0785c3d7dh,0bf31795dh,0d75b4a20h,0342659d4h,091acf17bh,044f0378fh,0e596ea34h,0ce52129dh,04515708fh,079f2f585h,017387e1eh
- DD 049dee168h,072cfd2e9h,03e2af239h,01ae05223h,01d94066ah,0009e75beh,038abf413h,06cca31c7h,09bc49908h,0b50bd61dh,0f5e2bc1eh,04a9b4a8ch,0946f83ach,0eb6cc5f7h,0ebffab28h,027da93fch
- DD 04821c8c5h,0ea314c96h,0a83c15f4h,08de49dedh,07af33004h,07a64cf20h,0c9627e10h,045f1bfebh,054b9df60h,0878b0626h,0a95c0b33h,05e4fdc3ch,0c2035d8eh,0e54a37cah,080f20b8ch,09087cda9h
- DD 08319ade4h,036f61c23h,0de8cfdf8h,0766f287ah,0346f3705h,048821948h,016e4f4a2h,049a7b853h,05cedadfdh,0b9b3f8a7h,08db2a815h,08f562815h,001f68f95h,0c0b7d554h,0688a208eh,012971e27h
- DD 0d0ff34fch,0c9f8b696h,01222718ch,020824de2h,00c95284dh,07213cf9fh,0dc158240h,0e2ad741bh,054043ccfh,00ee3a6dfh,0d84412b3h,016ff479bh,0dfc98af0h,0f6c74ee0h,052fcd2fbh,0a78a169fh
- DD 099c930e9h,0d8ae8746h,049e117a5h,01d33e858h,06624759fh,07581fcb4h,05bedc01dh,0de50644fh,0caf3155eh,0beec5d00h,0bc73e75fh,0672d66ach,0270b01dbh,086b9d8c6h,050f55b79h,0d249ef83h
- DD 073978fe3h,06131d6d4h,0754b00a1h,0cc4e4542h,057dfcfe9h,04e05df05h,051ef6bf0h,094b29cddh,09bc7edf2h,0e4530cffh,0d3da65f3h,08ac236fdh,0c8eb0b48h,00faf7d5fh,0660eb039h,04d2de14ch
- DD 060430e54h,0c006bba7h,0da3289abh,010a2d0d6h,0d7979c59h,09c037a5dh,0a116d944h,004d1f3d3h,08a0983cdh,09ff22473h,0c883cabbh,028e25b38h,047a58995h,0e968dba5h,0774eebdfh,02c80b505h
- DD 04a953bebh,0ee763b71h,01642e7f6h,0502e223fh,061d5e722h,06fe4b641h,0dbef5316h,09d37c5b0h,0f8330bc7h,00115ed70h,075a72789h,0139850e6h,0ffceccc2h,027d7faech,04fd9f7f6h,03016a860h
- DD 04cd8f64ch,0c492ec64h,0279d7b51h,058a2d790h,01fc75256h,00ced1fc5h,08f433017h,03e658aedh,005da59ebh,00b61942eh,00ddc3722h,0ba3d60a3h,0742e7f87h,07c311cd1h,0f6b01b6eh,06473ffeeh
- DD 0692ac542h,08303604fh,0227b91d3h,0f079ffe1h,015aaf9bdh,019f63e63h,0f1f344fbh,0f99ee565h,0d6219199h,08a1d661fh,0d48ce41ch,08c883bc6h,03c74d904h,01065118fh,00faf8b1bh,0713889eeh
- DD 081a1b3beh,0972b3f8fh,0ce2764a0h,04f3ce145h,028c4f5f7h,0e2d0f1cch,0c7f3985bh,0deee0c0dh,0d39e25c3h,07df4adc0h,0c467a080h,040619820h,061cf5a58h,0440ebc93h,0422ad600h,0527729a6h
- DD 0b1b76ba6h,0ca6c0937h,04d2026dch,01a2eab85h,019d9ae0ah,0b1715e15h,0bac4a026h,0f1ad9199h,007ea7b0eh,035b3dfb8h,03ed9eb89h,0edf5496fh,02d6d08abh,08932e5ffh,025bd2731h,0f314874eh
- DD 03f73f449h,0efb26a75h,08d44fc79h,01d1c94f8h,03bc0dc4dh,049f0fbc5h,03698a0d0h,0b747ea0bh,0228d291eh,05218c3feh,043c129d6h,035b804b5h,0d1acc516h,0fac859b8h,095d6e668h,06c10697dh
- DD 00876fd4eh,0c38e438fh,083d2f383h,045f0c307h,0b10934cbh,0203cc2ech,02c9d46eeh,06a8f2439h,065ccde7bh,0f16b431bh,027e76a6fh,041e2cd18h,04e3484d7h,0b9c8cf8fh,08315244ah,064426efdh
- DD 0fc94dea3h,01c0a8e44h,0dad6a0b0h,034c8cdbfh,004113cefh,0919c3840h,015490ffah,0fd32fba4h,0795dcfb7h,058d190f6h,083588bafh,0fef01b03h,0ca1fc1c0h,09e6d1d63h,0f0a41ac9h,053173f96h
- DD 0ba16f73bh,02b1d402ah,08cf9b9fch,02fb31014h,0446ef7bfh,02d51e60eh,0b91e1745h,0c731021bh,04fee99d4h,09d3b4724h,0fac5c1eah,04bca48b6h,0bbea9af7h,070f5f514h,0974c283ah,0751f55a5h
- DD 0cb452fdbh,06e30251ah,050f30650h,031ee6965h,0933548d9h,0b0b3e508h,0f4b0ef5bh,0b8949a4fh,03c88f3bdh,0208b8326h,0db1d9989h,0ab147c30h,044d4df03h,0ed6515fdh,0e72eb0c5h,017a12f75h
- DD 036cf69dbh,03b59796dh,056670c18h,01219eee9h,07a070d8eh,0fe3341f7h,0a327f90ch,09b70130bh,00ae18e0eh,036a32462h,046c0a638h,02021a623h,0c62eb0d4h,0251b5817h,04c762293h,087bfbcdfh
- DD 0cdd61d64h,0f78ab505h,0c8c18857h,08c7a53fch,016147515h,0a653ce6fh,0ea7d52d5h,09c923aa5h,05c18871fh,0c24709cbh,073b3cc74h,07d53bec8h,0fdd1d4c4h,059264affh,0240da582h,05555917eh
- DD 0548f5a0eh,0cae8bbdah,03bbfbbe1h,01910eabah,07677afc3h,0ae579685h,073ff0b5ch,049ea61f1h,04f7c3922h,078655478h,020c68eefh,095d337cdh,0df779ab9h,068f1e1e5h,0b5cf69a8h,014b491b0h
- DD 028e3fe89h,07a6cbbe0h,0c5aac0ebh,0e7e1fee4h,0697e5140h,07f47eda5h,0b454921fh,04f450137h,095cd8185h,0db625f84h,0cdb2e583h,074be0ba1h,0dd5e6de4h,0aee4fd7ch,0e8101739h,04251437dh
- DD 0ac620366h,0686d72a0h,0b6d59344h,04be3fb9ch,0a1eb75b9h,06e8b44e7h,091a5c10ch,084e39da3h,0b38f0409h,037cc1490h,02c2ade82h,002951943h,01190a2d8h,09b688783h,0231182bah,025627d14h
- DD 0658a6d87h,06eb550aah,0cf9c7325h,01405aaa7h,05c8748c9h,0d147142eh,053ede0e0h,07f637e4fh,014ffad2ch,0f8ca2776h,0bafb6791h,0e58fb1bdh,0bf8f93fch,017158c23h,00a4a4655h,07f15b373h
- DD 0d842ca72h,039d4add2h,03ed96305h,0a71e4391h,06700be14h,05bb09cbeh,0d8befcf6h,068d69d54h,037183bcfh,0a45f5367h,03370dff7h,07152b7bbh,0bf12525bh,0cf887baah,0d6d1e3cdh,0e7ac7bddh
- DD 081fdad90h,025914f78h,00d2cf6abh,0cf638f56h,0cc054de5h,0b90bc03fh,018b06350h,0932811a7h,09bbd11ffh,02f00b330h,0b4044974h,076108a6fh,0a851d266h,0801bb9e0h,0bf8990c1h,00dd099beh
- DD 0abe32986h,058c5aaaah,050d59c27h,00fe9dd2ah,08d307305h,084951ff4h,086529b78h,06c23f829h,00b136a79h,050bb2218h,077a20996h,07e2174deh,0c0bb4da6h,06f00a4b9h,0efdde8dah,089a25a17h
- DD 0c11ee01dh,0f728a27eh,0e5f10dfbh,0f900553ah,002ec893ch,0189a83c8h,023f66d77h,03ca5bdc1h,097eada9fh,098781537h,010256230h,059c50ab3h,0323c69b3h,0346042d9h,02c460449h,01b715a6dh
- DD 06ae06e0bh,0a41dd476h,09d42e25fh,0cdd7888eh,056b25a20h,00f395f74h,08700e27eh,0eadfe0aeh,069950093h,0b09d52a9h,0327f8d40h,03525d9cbh,067df886ah,0b8235a94h,0035faec2h,077e4b0ddh
- DD 0517d7061h,0115eb20ah,06c2df683h,077fe3433h,0cdc6fc67h,06870ddc7h,00b87de83h,0b1610588h,0d9c4ddbeh,0343584cah,03d754be2h,0b3164f1ch,0c1e6c894h,00731ed3ah,04f6b904ch,026327dech
- DD 097b5cd32h,09d49c6deh,0b5eceecdh,040835daeh,0d9ded7feh,0c66350edh,07a678804h,08aeebb5ch,05b8ee9ech,051d42fb7h,08e3ca118h,0d7a17bddh,02ef4400eh,040d7511ah,0875a66f4h,0c48990ach
- DD 02199e347h,08de07d2ah,02a39e051h,0bee75556h,0916e51dch,056918786h,04a2d89ech,0eb191313h,037d341edh,06679610dh,056d51c2bh,0434fbb41h,0d7492dbah,0e54b7ee7h,059021493h,0aa33a79ah
- DD 0e4bd6d3dh,049fc5054h,05ab551d0h,009540f04h,04942d3a6h,08acc9085h,02d28323bh,0231af02fh,00992c163h,093458cach,0888e3bb4h,01fef8e71h,0be8c268ch,027578da5h,0e805ec00h,0cc8be792h
- DD 0c61c3855h,029267baeh,058c1fd3bh,0ebff429dh,08c0b93b8h,022d886c0h,02ddb8953h,0ca5e00b2h,0c3fed8b7h,0cf330117h,0819c01f6h,0d49ac6fah,03c0fbd54h,06ddaa6bdh,08049a2cfh,091743068h
- DD 0aff2ef81h,0d67f981eh,02818ae80h,0c3654d35h,01b2aa892h,081d05044h,03d099328h,02db067bfh,0703dcc97h,0e7c79e86h,0e133e215h,0e66f9b37h,0e39a7a5ch,0cdf119a6h,0876f1b61h,047c60de3h
- DD 0d860f1b2h,06e405939h,0f5ed4d4ah,03e9a1dbch,0c9b6bcbdh,03f23619eh,0734e4497h,05ee790cfh,05bdaf9bbh,0f0a834b1h,04ca295f0h,002cedda7h,0cb8e378ch,04619aa2bh,0cc987ea4h,0e5613244h
- DD 076b23a50h,00bc022cch,00a6c21ceh,04a2793adh,089cac3f5h,038328780h,0cba26d56h,029176f1bh,04f6f59ebh,006296187h,08bdc658eh,086e9bca9h,057e30402h,02ca9c4d3h,0516a09bbh,05438b216h
- DD 07672765ah,00a6a063ch,00547b9bfh,037a3ce64h,098b1a633h,042c099c8h,005ee6961h,0b5ab800dh,011a5acd6h,0f1963f59h,046201063h,0baee6157h,0a596210ah,036d9a649h,01ba7138ch,0aed04363h
- DD 0a4a82b76h,0cf817d1ch,0f3806be9h,05586960eh,009dc6bb5h,07ab67c89h,0114fe7ebh,052ace7a0h,0cbbc9b70h,0cd987618h,0604ca5e1h,04f06fd5ah,06dbde133h,090af14cah,0948a3264h,01afe4322h
- DD 0c44b2c6ch,0a70d2ca6h,00ef87dfeh,0ab726799h,02e696377h,0310f64dch,04c8126a0h,049b42e68h,0cea0b176h,00ea444c3h,0cb269182h,053a8ddf7h,0bbba9dcbh,0f3e674ebh,0d8669d33h,00d2878a8h
- DD 0d019b6a3h,004b935d5h,0406f1e46h,0bb5cf88eh,05b57c111h,0a1912d16h,019ebfd78h,09803fc21h,0c07764a9h,04f231c9eh,0b75bd055h,0d93286eeh,08ee6c9deh,083a9457dh,06087ec90h,004695915h
- DD 058d6cd46h,014c6dd8ah,08e6634d2h,09cb633b5h,0f81bc328h,0c1305047h,026a177e5h,012ede0e2h,0065a6f4fh,0332cca62h,067be487bh,0c3a47ecdh,00f47ed1ch,0741eb187h,0e7598b14h,099e66e58h
- DD 063d0ff12h,06f0544cah,0b610a05fh,0e5efc784h,07cad7b47h,0f72917b1h,0f2cac0c0h,03ff6ea20h,0f21db8b7h,0cc23791bh,0d7d93565h,07dac70b1h,0694bdaadh,0682cda1dh,01023516dh,0eb88bb8ch
- DD 0dfdbeb1bh,0c4c634b4h,0b4ee4deah,022f5ca72h,0e6524821h,01045a368h,0052b18b2h,0ed9e8a3fh,0b961f49ah,09b7f2cb1h,07b009670h,07fee2ec1h,022507a6dh,0350d8754h,04db55f1dh,0561bd711h
- DD 0320bbcafh,04c189ccch,0df1de48ch,0568434cfh,00fa8f128h,06af1b00eh,08907583ch,0f0ba9d02h,032ff9f60h,0735a4004h,0c25dcf33h,03dd8e4b6h,042c74cefh,0f2230f16h,0013fa8adh,0d8117623h
- DD 0f51fe76eh,036822876h,011d62589h,08a6811cch,046225718h,0c3fc7e65h,0c82fdbcdh,0b7df2c9fh,0dd7b205bh,03b1d4e52h,047a2e414h,0b6959478h,0efa91148h,005e4d793h,0fd2e9675h,0b47ed446h
- DD 004c9d9bfh,01a7098b9h,01b793048h,0661e2881h,0b01ee461h,0b1a16966h,02954746fh,0bc521308h,02477de50h,0c909a0fch,07dbd51efh,0d80bb41ch,053294905h,0a85be7ech,083958f97h,06d465b18h
- DD 0fb6840fdh,016f6f330h,03401e6c8h,0faaeb214h,0ccb5b4f8h,0af83d30fh,0266dec4bh,022885739h,07bc467dfh,051b4367ch,0d842d27ah,0926562e3h,00fea14a6h,0dfcb6614h,0f2734cd9h,0eb394daeh
- DD 011c0be98h,03eeae5d2h,0814e8165h,0b1e6ed11h,0e52bce1ch,0191086bch,0a75a04dah,014b74cc6h,08c060985h,063cf1186h,02dbd7f7ch,0071047deh,0ce0942cah,04e433b8bh,0d8fec61dh,0ecbac447h
- DD 0ebf3232fh,08f0ed0e2h,0c52a2eddh,0fff80f9eh,075b55fdbh,0ad9ab433h,0e42e0c11h,073ca7820h,0e6251b46h,06dace0a0h,04c0d932dh,089bc6b5ch,0095da19ah,03438cd77h,08d48bdfbh,02f24a939h
- DD 0766561b7h,099b47e46h,00ed0322ah,0736600e6h,0638e1865h,006a47cb1h,0cb136000h,0927c1c2dh,00cc5df69h,029542337h,009d649a9h,099b37c02h,06aefdb27h,0c5f0043ch,01be95c27h,06cdd9987h
- DD 0390420d2h,069850931h,00983efa4h,0299c40ach,0af39aeadh,03a05e778h,043a45193h,084274408h,091a711a0h,06bcd0fb9h,09f52ab17h,0461592c8h,0da3c6ed6h,0b49302b4h,0330d7067h,0c51fddc7h
- DD 0da50d531h,094babeb6h,0a6a7b9dah,0521b840dh,0404bdc89h,05305151eh,0d0d07449h,01bcde201h,03b76a59ah,0f427a78bh,007791a1bh,0f84841ceh,0bf91ed1ch,0ebd314beh,0bf172943h,08e61d34ch
- DD 05541b892h,01d5dc451h,0fc9d9e54h,0b186ee41h,0d5bf610dh,09d9f345eh,0f6acca9fh,03e7ba65dh,0a8369486h,09dda787ah,08eb5ba53h,009f9dab7h,0d6481bc3h,05afb2033h,0afa62104h,076f4ce30h
- DD 0f4f066b5h,0a8fa00cfh,0461dafc2h,089ab5143h,0a3389998h,044339ed7h,0bc214903h,02ff862f1h,0b05556e3h,02c88f985h,03467081eh,0cd96058eh,0edc637eah,07d6a4176h,036a5acdch,0e1743d09h
- DD 07eb37726h,066fd72e2h,01481a037h,0f7fa264eh,045f4aa79h,09fbd3bdeh,0767c3e22h,0ed1e0147h,082e7abe2h,07621f979h,045f633f8h,019eedc72h,06137bf3ah,0e69b155eh,0414ee94eh,0a0ad13ceh
- DD 01c0e651ah,093e3d524h,002ce227eh,0ab1a6e2ah,04ab27ecah,0e7af1797h,0bd444f39h,0245446deh,056c07613h,059e22a21h,0f4275498h,043deafceh,067fd0946h,010834ccbh,047406edfh,0a75841e5h
- DD 07b0ac93dh,0ebd6a677h,078f5e0d7h,0a6e37b0dh,076f5492bh,02516c096h,09ac05f3ah,01e4bf888h,04df0ba2bh,0cdb42ce0h,05062341bh,0935d5cfdh,082acac20h,08a303333h,05198b00eh,0429438c4h
- DD 0049d33fah,01d083bc9h,0946f67ffh,058b82ddah,067a1d6a3h,0ac3e2db8h,01798aac8h,062e6beadh,0de46c58ch,0fc85980fh,069c8d7beh,0a7f69379h,0837b35ech,023557927h,0e0790c0ch,006a933d8h
- DD 0077ff55dh,0827c0e9bh,0bb26e680h,053977798h,01d9cb54fh,059530874h,04aac53efh,0cca3f449h,0a07eda0fh,011dc5c87h,0fd6400c8h,0c138bccfh,013e5da72h,0549680d3h,04540617eh,0c93eed82h
- DD 04d0b75c0h,0fd3db157h,06386075bh,09716eb42h,0817b2c16h,00639605ch,0f1e4f201h,009915109h,05cca6c3bh,035c9a928h,03505c900h,0b25f7d1ah,0630480c4h,0eb9f7d20h,02a1a501ch,0c3c7b8c6h
- DD 05a1f8e24h,03f99183ch,09dd255f0h,0fdb118fah,0c27f62a6h,0b9b18b90h,0396ec191h,0e8f732f7h,00be786abh,0524a2d91h,00ac5a0f5h,05d32adefh,09725f694h,09b53d4d6h,00510ba89h,0032a76c6h
- DD 0ebeb1544h,0840391a3h,03ed73ac3h,044b7b88ch,0256cb8b3h,0d24bae7ah,0e394cb12h,07ceb151ah,05bc1e6a8h,0bd6b66d0h,0090f07bfh,0ec70cecbh,07d937589h,0270644edh,05f1dccfeh,0ee9e1a3dh
- DD 0745b98d2h,0b0d40a84h,02556ed40h,0da429a21h,085148cb9h,0f676ecedh,0ded18936h,05a22d40ch,070e8a4ceh,03bc4b9e5h,09eae0379h,0bfd1445bh,01a0bd47eh,0f23f2c0ch,0e1845531h,0a9c0bb31h
- DD 00a4c3f6bh,09ddc4d60h,02c15ef44h,0bdfaad79h,07f484acch,0ce55a236h,0055b1f15h,008653ca7h,0538873a3h,02efa8724h,0ace1c7e7h,009299e5dh,0ade332bah,007afab66h,092dd71b7h,09be1fdf6h
- DD 05758b11ch,0a49b5d59h,0c8654f40h,00b852893h,052379447h,0b63ef6f4h,0105e690ch,0d4957d29h,0646559b0h,07d484363h,049788a8eh,0f4a8273ch,034ce54a9h,0ee406cb8h,0f86fda9bh,01e1c260fh
- DD 0cf6a4a81h,0e150e228h,01b488772h,01fa3b6a3h,0c5a9c15bh,01e6ff110h,08ad6aa47h,0c6133b91h,09dffa978h,08ac5d55ch,05f3965f2h,0ba1d1c1dh,07732b52fh,0f969f4e0h,0a5172a07h,0fceecdb5h
- DD 010f2b8f5h,0b0120a5fh,05c4c2f63h,0c83a6cdfh,0f8f9c213h,04d47a491h,0d3f1bbd5h,0d9e1cce5h,0aba7e372h,00d91bc7ch,0dfd1a2dbh,0fcdc74c8h,0374618e5h,005efa800h,015a7925eh,011216969h
- DD 0f6021c5dh,0d4c89823h,0eff14423h,0880d5e84h,06dcd1396h,06523bc5ah,0113c978bh,0d1acfdfch,0bbb66840h,0b0c164e8h,072b58459h,0f7f4301eh,0a638e8ech,0c29ad4a6h,046b78699h,0f5ab8961h
- DD 00e954750h,09dbd7974h,064f9d2c6h,00121de88h,0d985232eh,02e597b42h,053451777h,055b6c3c5h,0519cb9fbh,0bb53e547h,08428600dh,0f134019fh,0e081791ah,05a473176h,035fb0c08h,02f3e2263h
- DD 073d273b0h,0b28c3017h,07721ef9ah,0ccd21076h,0b650dc39h,0054cc292h,06188045eh,0662246deh,06b83c0d1h,0904b52fah,097e9cd46h,0a72df267h,0899725e4h,0886b43cdh,0d849ff22h,02b651688h
- DD 002f34533h,060479b79h,00c77c148h,05e354c14h,0a8537c78h,0b4bb7581h,0efe1495fh,0188043d7h,08c1d5026h,09ba12f42h,093d4aaabh,02e0c8a26h,0aa57c450h,0bdba7b8bh,09bbdafefh,0140c9ad6h
- DD 025ac0f18h,02067aa42h,004d1fbf3h,0f7b1295bh,0a4b04824h,014829111h,033bd5e91h,02ce3f192h,08f2e1b72h,09c7a1d55h,0302aa243h,0fe932286h,0d4be9554h,0497ca7b4h,0e0547a6eh,0b8e821b8h
- DD 067e573e0h,0fb2838beh,04084c44bh,005891db9h,096c1c2c5h,091311373h,0d958444bh,06aebfa3fh,0e56e55c1h,0ac9cdce9h,02caa46d0h,07148ced3h,0b61fe8ebh,02e10c7efh,0ff97cf4dh,09fd835dah
- DD 0081e9387h,0a36da109h,08c935828h,0fb9780d7h,0e540b015h,0d5940332h,0e0f466fah,0c9d7b51bh,0d6d9f671h,0faadcd41h,0b1a2ac17h,0ba6c1e28h,0ed201e5fh,0066a7833h,0f90f462bh,019d99719h
- DD 0060b5f61h,0f431f462h,07bd057c2h,0a56f46b4h,047e1bf65h,0348dca6ch,041bcf1ffh,09a38783eh,0da710718h,07a5d33a9h,02e0aeaf6h,05a779987h,02d29d187h,0ca87314dh,0c687d733h,0fa0edc3eh
- DD 06a31e09bh,09df33621h,0c1350e35h,0de89e44dh,04ca0cf52h,029214871h,00b88a538h,0df379672h,02591d61bh,0c92a510ah,0585b447bh,079aa87d7h,0e5287f77h,0f67db604h,05efe7a80h,01697c8bfh
- DD 0cb198ac7h,01c894849h,00f264665h,0a884a93dh,09b200678h,02da964efh,0009834e6h,03c351b87h,0e2c4b44bh,0afb2ef9fh,03326790ch,0580f6c47h,00b02264ah,0b8480521h,042a194e2h,08ba6f9e2h
- DD 08fb54738h,0fc87975fh,027c3ead3h,035160788h,0b74a085ah,0834116d2h,0a62fe996h,053c99a73h,05b81c51bh,087585be0h,0be0852b7h,0925bafa8h,0a84d19a7h,076a4fafdh,0585206d4h,039a45982h
- DD 05eb03c0eh,0499b6ab6h,072bc3fdeh,0f19b7954h,06e3a80d2h,0a86b5b9ch,06d42819fh,0e4377508h,0bb3ee8a3h,0c1663650h,0b132075fh,075eb14fch,07ad834f6h,0a8ccc906h,0e6e92ffdh,0ea6a2474h
- DD 00f8d6758h,09d72fd95h,0408c07ddh,0cb84e101h,0a5e23221h,0b9114bfdh,0e94e742ch,0358b5fe2h,095f40e75h,01c0577ech,03d73f3d6h,0f0155451h,0bd1b9b66h,09d55cd67h,0af8d63c7h,063e86e78h
- DD 0d3c095f1h,039d934abh,0e4b76d71h,004b261beh,0e73e6984h,01d2e6970h,05e5fcb11h,0879fb23bh,0dfd75490h,011506c72h,061bcf1c1h,03a97d085h,0bf5e7007h,043201d82h,0798232a7h,07f0ac52fh
- DD 06eb564d4h,02715cbc4h,09e570e29h,08d6c752ch,09ef5fd5dh,0f80247c8h,0d53eb514h,0c3c66b46h,00f87de56h,09666b401h,0c6c603b5h,0ce62c06fh,07e4fc942h,0ae7b4c60h,0663a9c19h,038ac0b77h
- DD 04b049136h,0cb4d20eeh,0356a4613h,08b63bf12h,070e08128h,01221aef6h,04acb6b16h,0e62d8c51h,0379e7896h,071f64a67h,0cafd7fa5h,0b25237a2h,03841ba6ah,0f077bd98h,03cd16e7eh,0c4ac0244h
- DD 021fea4cah,0548ba869h,0f3dfdac1h,0d36d0817h,0f4685fafh,009d8d71fh,0c52c459ah,08eff66beh,00b57235eh,0182faee7h,00106712bh,0ee3c39b1h,0c0fcdcb0h,05107331fh,0a51054bah,0669fb9dch
- DD 0319d7682h,0b25101fbh,00a982feeh,0b0293129h,00261b344h,051c1c9b9h,0bfd371fah,00e008c5bh,00278ca33h,0d866dd1ch,0e5aa53b1h,0666f76a6h,06013a2cfh,0e5cfb779h,0a3521836h,01d3a1aadh
- DD 073faa485h,0cedd2531h,0c0a76878h,0c8ee6c4fh,02a11667dh,0ddbccfc9h,01c2f695ah,01a418ea9h,051f73971h,0db11bd92h,0da2ed89fh,03e4b3c82h,0e73e0319h,09a44f3f4h,0303431afh,0d1e3de0fh
- DD 050f75f9ch,03c5604ffh,07e752b22h,01d8eddf3h,03c9a1118h,00ef074ddh,0ccb86d7bh,0d0ffc172h,0037d90f2h,0abd1ece3h,06055856ch,0e3f307d6h,07e4c6dafh,0422f9328h,0334879a0h,0902aac66h
- DD 094cdfadeh,0b6a1e7bfh,07fc6d634h,06c97e1edh,0a2fb63f8h,0662ad24dh,0a5928405h,0f81be1b9h,0d14b4206h,086d765e4h,08fa0db65h,0becc2e0eh,0b17fc76ch,0a28838e0h,0e37cf24eh,0e49a602ah
- DD 0567193ech,076b4131ah,0e5f6e70bh,0af3c305ah,0031eebddh,09587bd39h,071bbe831h,05709def8h,00eb2b669h,057059983h,0875b7029h,04d80ce1bh,00364ac16h,0838a7da8h,0be1c83abh,02f431d23h
- DD 0f9294dd3h,0e56812a6h,09b4b0d77h,0b448d01fh,004e8305ch,0f3ae6061h,094d8c63eh,02bead645h,084fd8b07h,00a85434dh,0f7a9dee5h,0537b983fh,0ef55bd85h,0edcc5f18h,021c6cf8bh,02041af62h
- DD 0b940c71eh,08e52874ch,0db5f4b3ah,0211935a9h,0301b1dc3h,094350492h,029958620h,033d2646dh,0ef911404h,016b0d64bh,09a3c5ef4h,09d1f25eah,04a352c78h,020f200ebh,04bd0b428h,043929f2ch
- DD 0c7196e29h,0a5656667h,09391be48h,07992c2f0h,09ee0cd6eh,0aaa97cbdh,03dc8c9bfh,051b0310ch,0dd9f22cbh,0237f8acfh,0b585d584h,0bb1d81a1h,08c416388h,08d5d85f5h,042fe474fh,00d6e5a5ah
- DD 038235d4eh,0e7812766h,0496e3298h,01c62bd67h,03f175bc8h,08378660ch,017afdd4dh,04d04e189h,085a8068ch,032a81601h,092b29a85h,0db58e4e1h,0c70d8a3bh,0e8a65b86h,098a0403bh,05f0e6f4eh
- DD 069ed2370h,008129684h,00871ee26h,034dc30bdh,07c9c5b05h,03a5ce948h,043a90c87h,07d487b80h,0dd0e7179h,04089ba37h,0b4041811h,045f80191h,098747ba5h,01c3e1058h,06e1ae592h,098c4e13ah
- DD 0e82c9f9eh,0d44636e6h,0c33a1043h,0711db87ch,0aa8aec05h,06f431263h,02744a4aah,043ff120dh,0ae77779bh,0d3bd892fh,08cdc9f82h,0f0fe0cc9h,0f1c5b1bch,0ca5f7fe6h,044929a72h,0cc63a682h
- DD 009dbe19ah,0c7eaba0ch,06b5c73c2h,02f3585adh,00ae50c30h,08ab8924bh,0638b30bah,017fcd27ah,010b3d5a5h,0af414d34h,02a9accf1h,009c107d2h,0946a6242h,015dac49fh,0d707d642h,0aec3df2ah
- DD 03f894ae0h,02c2492b7h,0b75f18ceh,0f59df3e5h,08f53cad0h,07cb740d2h,0c4f01294h,03eb585fbh,032c7f717h,017da0c86h,0af943f4ch,0eb8c795bh,0f67c51d2h,04ee23fb5h,068889949h,0ef187575h
- DD 00389168bh,0a6b4bdb2h,0ea577d03h,0c4ecd258h,055743082h,03a63782bh,0c72f08cdh,06f678f4ch,065e58dd8h,0553511cfh,0d402c0cdh,0d53b4e3eh,0a037c14ch,037de3e29h,0c05712aah,086b6c516h
- DD 0b38dff6fh,02834da3eh,0ea636be8h,0be012c52h,061dd37f8h,0292d238ch,08f8142dbh,00e54523fh,0036a05d8h,0e31eb436h,01e93c0ffh,083e3cdffh,050821ddfh,03fd2fe0fh,0ff9eb33bh,0c8e19b0dh
- DD 0b569a5feh,0c8cc943fh,0d4342d75h,0ad0090d4h,0caeca000h,082090b4bh,01bd410ebh,0ca39687fh,065959d77h,0e7bb0df7h,09c964999h,039d78218h,0b2415451h,0d87f62e8h,0bed76108h,0e5efb774h
- DD 0e822f0d0h,03ea011a4h,05a8704f8h,0bc647ad1h,050c6820fh,0bb315b35h,0b7e76bech,0863dec3dh,0f017bfc7h,001ff5d3ah,0976b8229h,020054439h,00bbd0d3bh,0067fca37h,07f5e3d0fh,0f63dde64h
- DD 02a4c94e9h,022dbefb3h,096f8278ah,0afbff0feh,03503793dh,080aea0b1h,05f06cd29h,0b2238029h,08ec3fecah,065703e57h,0393e7053h,006c38314h,07c6734c4h,0a0b751ebh,0c59f0f1eh,0d2e8a435h
- DD 05e9ca895h,0147d9052h,0972072dfh,02f4dd31eh,0e6c6755ch,0a16fda8eh,0cf196558h,0c66826ffh,00cf43895h,01f1a76a3h,083c3097bh,0a9d604e0h,066390e0eh,0e1908309h,0b3c85effh,0a50bf753h
- DD 0f6a70251h,00696bddeh,03c6ab16ah,0548b801bh,0a4d08762h,037fcf704h,0dff76c4eh,0090b3defh,069cb9158h,087e8cb89h,0995ece43h,044a90744h,00ad9fbf5h,0f85395f4h,04fb0c82dh,049b0f6c5h
- DD 0adf7cccfh,075d9bc15h,0dfa1e1b0h,081a3e5d6h,0249bc17eh,08c39e444h,08ea7fd43h,0f37dccb2h,0907fba12h,0da654873h,04a372904h,035daa6dah,06283a6c5h,00564cfc6h,04a9395bfh,0d09fa4f6h
- DD 0aeb19a36h,0688e9ec9h,0c7bfbfb4h,0d913f1ceh,061c2faa6h,0797b9a3ch,06a0a9c12h,02f979bech,0359679ech,0b5969d0fh,0079b0460h,0ebcf523dh,010fab870h,0fd6b0008h,09373a39ch,03f2edcdah
- DD 06f568431h,00d64f9a7h,002f8898ch,0f848c27ch,0260b5bd5h,0f418ade1h,06973dee8h,0c1f3e323h,026c185ddh,046e9319ch,0546f0ac4h,06d85b7d8h,0247f9d57h,0427965f2h,0b0035f48h,0b519b636h
- DD 0ab87d59ch,06b6163a9h,039caaa11h,0ff9f58c3h,03177387bh,04ac39cdeh,0873e77f9h,05f6557c2h,036a83041h,067504006h,075ef196ch,09b1c96cah,0b08c7940h,0f34283deh,01128c316h,07ea09644h
- DD 06aa39dffh,0b510b3b5h,09f8e4d8ch,059b43da2h,09e4c4b9fh,0a8ce31fdh,0c1303c01h,00e20be26h,0e8ee47c9h,018187182h,07db98101h,0d9687cdbh,0a1e14ff6h,07a520e4dh,08836d572h,0429808bah
- DD 04944b663h,0a37ca60dh,0a3f91ae5h,0f901f7a9h,09e36e3b1h,0e4e3e76eh,029d93250h,09aa219cfh,0056a2512h,0347fe275h,0de65d95ch,0a4d643d9h,0699fc3edh,09669d396h,0cf8c6bbeh,0b598dee2h
- DD 0dda9e5c6h,0682ac1e5h,0caa9fc95h,04e0d3c72h,0772bea44h,017faaadeh,0ab0009c8h,05ef8428ch,0460ff016h,0cc4ce47ah,0725281cbh,0da6d12bfh,00223aad2h,044c67848h,036256e28h,06e342afah
- DD 093a37c04h,01400bb0bh,0dd10bd96h,062b1bc9bh,00dac46b7h,07251adebh,07be4ef51h,07d33b92eh,0e61fa29ah,028b2a94bh,006422233h,04b2be13fh,0330d8d37h,036d6d062h,0b28ca005h,05ef80e1eh
- DD 06d16768eh,0174d4699h,0628bf217h,09fc4ff6ah,0154e490dh,077705a94h,08d2d997ah,09d96dd28h,0ce5d72c4h,077e2d9d8h,0c11c714fh,09d06c5a4h,079e4a03eh,002aa5136h,0030ff28bh,01386b3c2h
- DD 0fb283f61h,0fe82e8a6h,0f3abc3fbh,07df203e5h,03a4d3622h,0eec7c351h,0df762761h,0f7d17dbfh,0522055f0h,0c3956e44h,08fa748dbh,0de3012dbh,0bf1dcc14h,0ca9fcb63h,0be4e2f3ah,0a56d9dcfh
- DD 08bcec9c2h,0b86186b6h,0680b9f06h,07cf24df9h,0c0d29281h,0c46b45eah,007b10e12h,0fff42bc5h,04d289427h,012263c40h,0b4848ec4h,03d5f1899h,0d040800ch,011f97010h,0300feb20h,0b4c5f529h
- DD 0de94fdcbh,0cc543f8fh,0c7c2f05eh,0e96af739h,0882692e1h,0aa5e0036h,0950d4ae9h,009c75b68h,0b5932a7ah,062f63df2h,0de0979adh,02658252eh,0b5e69631h,02a19343fh,0525b666bh,0718c7501h
- DD 0ea40dc3ah,026a42d69h,0aecc018fh,0dc84ad22h,03270f04ah,025c36c7bh,050fa72edh,046ba6d47h,093e58a8eh,06c37d1c5h,0120c088ch,0a2394731h,0cb6e86dah,0c3be4263h,07126d038h,02c417d36h
- DD 08b6f8efah,05b70f9c5h,037718536h,0671a2faah,0b539c92bh,0d3ced3c6h,0a31203c2h,0e56f1bd9h,09ff3c8ebh,08b096ec4h,043491ceah,02deae432h,017943794h,02465c6ebh,020586843h,05d267e66h
- DD 0b07159d0h,09d3d116dh,0c1896210h,0ae07a67fh,0bb961579h,08fc84d87h,01c1f8dd6h,030009e49h,0e3132819h,08a8caf22h,0f23ab4ffh,0cffa197ch,0205dd687h,058103a44h,00ded67a2h,057b796c3h
- DD 0a1779ad7h,00b9c3a6ch,0357c09c5h,0a33cfe2eh,03db4a57eh,02ea29315h,08ebeb52eh,091959695h,0e546c879h,0118db9a6h,06295c8d6h,08e996df4h,055ec806bh,0dd990484h,0165c1035h,024f291cah
- DD 0440e2229h,0cca523bbh,073ef4d04h,0324673a2h,03e11ec39h,0af3adf34h,0dc5968d3h,06136d7f1h,0b053a927h,07a7b2899h,0ae067ecdh,03eaa2661h,002779cd9h,08549b9c8h,0c53385eah,0061d7940h
- DD 0f06d18bdh,03e0ba883h,0b2700843h,04ba6de53h,0591a9e4dh,0b966b668h,07f4fa0edh,093f67567h,04347237bh,05a02711bh,0e794608eh,0bc041e2fh,070f73d8ch,055af10f5h,0bb7564f7h,0d2d4d4f7h
- DD 0b3e93ce7h,0d7d27a89h,05d3a2c1bh,0f7b5a875h,0255b218ah,0b29e68a0h,08af76754h,0b533837eh,0579fab2eh,0d1b05a73h,0ecd74385h,0b41055a1h,0445e9115h,0b2369274h,0f520274eh,02972a7c4h
- DD 0f678e68ah,06c08334eh,099b057edh,04e4160f0h,052ccb69ah,03cfe11b8h,021c8f772h,02fd1823ah,03298f055h,0df7f072fh,0fec74a6eh,08c0566f9h,05bb4d041h,0e549e019h,09208d850h,07c3930bah
- DD 0aaa2902bh,0e07141fch,0e4f69ad3h,0539ad799h,0813f9ffdh,0a6453f94h,0375bc2f7h,0c58d3c48h,05dc64e96h,0b3326fadh,0b240e354h,03aafcaa9h,0aca1e7a9h,01d1b0903h,01211b8a0h,04ceb9767h
- DD 0e32a858eh,0eca83e49h,0ae907badh,04c32892eh,02eb9b494h,0d5b42ab6h,01eabae1bh,07fde3ee2h,0caf54957h,013b5ab09h,0e5f5d5d5h,0bfb028beh,02003e2c0h,0928a0650h,067476843h,090793aach
- DD 0c81710a0h,05e942e79h,027ccadd4h,0557e4a36h,04bcf6d0ch,072a2bc56h,026d7b80ch,009ee5f43h,0d4292f19h,06b70dbe9h,063f16b18h,056f74c26h,035fbb42ah,0c23db0f7h,06ae10040h,0b606bdf6h
- DD 0044573ach,01eb15d4dh,0556b0ba4h,07dc3cf86h,0c60df6f7h,097af9a33h,0a716ce8ch,00b1ef85ch,0c96958beh,02922f884h,035690963h,07c32fa94h,0eaa00061h,02d7f667ch,03547365ch,0eaaf7c17h
- DD 087032d58h,01eb4de46h,05e2c79e0h,0c54f3d83h,05d04ef23h,007818df4h,0673d41b4h,055faa9c8h,089b95355h,0ced64f6fh,0b7415c84h,04860d2eah,0050ebad3h,05fdb9bd2h,06685a5bfh,0db53e0cch
- DD 09feb6593h,0b830c031h,06accff17h,0dd87f310h,09f555c10h,02303ebabh,0287e7065h,094603695h,02e83358ch,0f88311c3h,0eefb0178h,0508dd9b4h,02dba8652h,07ca23706h,00047abe5h,062aac5a3h
- DD 08b1ea7b3h,09a61d2a0h,0ae8b1485h,0d495ab63h,087052f99h,038740f84h,0b2974eeah,0178ebe5bh,05b36d17fh,0030bbccah,0aaf86eeah,0b5e4cce3h,068f8e9e0h,0b51a0220h,009eb3e75h,0a4348796h
- DD 0eef1a752h,0be592309h,06f2aa1edh,05d7162d7h,00f007dd2h,0aebfb5edh,0c89edd22h,0255e14b2h,00303b697h,0ba85e072h,0f05720ffh,0c5d17e25h,05128ebb6h,002b58d6eh,0d754e113h,02c80242dh
- DD 0abfae1cah,0919fca5fh,01a21459bh,0937afaach,01f66a4d2h,09e0ca91ch,023ec1331h,0194cc7f3h,08aa11690h,0ad25143ah,009b59e08h,0be40ad8dh,0e750860ah,037d60d9bh,0c6bf434ch,06c53b008h
- DD 01356eb80h,0b572415dh,09578ded8h,0b8bf9da3h,05e8fb38bh,022658e36h,05af8cb22h,09b70ce22h,0829a8180h,07c00018ah,0b81ed295h,084329f93h,05f3cea83h,07c343ea2h,067586536h,038f8655fh
- DD 01d3ec517h,0a661a0d0h,0512321aeh,098744652h,0eca92598h,0084ca591h,01dcb3febh,0a9bb9dc9h,078b4c240h,014c54355h,0610cafdch,05ed62a3bh,01b38846bh,007512f37h,0b0e38161h,0571bb70ah
- DD 02da705d2h,0b556b95bh,0b1a08f98h,03ef8ada6h,0ddecfbe5h,085302ca7h,0943105cdh,00e530573h,021a9255dh,060554d55h,0f2f3802ah,063a32fa1h,0cd477875h,035c8c5b0h,06ad42da1h,097f458eah
- DD 0eb6b242dh,0832d7080h,03b71e246h,0d30bd023h,0be31139dh,07027991bh,0462e4e53h,068797e91h,06b4e185ah,0423fe20ah,042d9b707h,082f2c67eh,04cf7811bh,025c81768h,0045bb95dh,0bd53005eh
- DD 09d8e68fdh,0e5f649beh,01b044320h,0db0f0533h,0e0c33398h,0f6fde9b3h,066c8cfaeh,092f4209bh,01a739d4bh,0e9d1afcch,0a28ab8deh,009aea75fh,0eac6f1d0h,014375fb5h,0708f7aa5h,06420b560h
- DD 06254dc41h,09eae499ch,07a837e7eh,07e293924h,0090524a7h,074aec08ch,08d6f55f2h,0f82b9219h,01402cec5h,0493c962eh,0fa2f30e7h,09f17ca17h,0e9b879cbh,0bcd783e8h,05a6f145fh,0ea3d8c14h
- DD 05e0dee6eh,0dede15e7h,0dc628aa2h,074f24872h,07861bb93h,0d3e9c4feh,06187b2e0h,056d4822ah,0c59826f9h,0b66417cfh,02408169eh,0ca260969h,0c79ef885h,0edf69d06h,0dc7d138fh,000031f8ah
- DD 00ebcf726h,0103c46e6h,06231470eh,04482b831h,0487c2109h,06f6dfacah,062e666efh,02e0ace97h,01f8d1f42h,03246a9d3h,0574944d2h,01b1e83f1h,0a57f334bh,013dfa63ah,09f025d81h,00cf8daedh
- DD 000ee11c1h,030d78ea8h,0b5e3dd75h,0eb053cd4h,0d58c43c5h,09b65b13eh,0bd151663h,0c3ad49bdh,0b6427990h,099fd8e41h,0707eae1eh,012cf15bdh,01aabb71eh,029ad4f1bh,007545d0eh,05143e74dh
- DD 0c88bdee1h,030266336h,05876767ch,025f29306h,0c6731996h,09c078571h,0ed552951h,0c88690b2h,0852705b4h,0274f2c2dh,04e09552dh,0b0bf8d44h,0986575d1h,07628beebh,07f864651h,0407be238h
- DD 0a639fc6bh,00e5e3049h,086003625h,0e75c35d9h,05dcc1646h,00cf35bd8h,06c26273ah,08bcaced2h,0b5536742h,0e22ecf1dh,01a9e068bh,0013dd897h,08a7909c5h,017f411cbh,0861dd506h,05757ac98h
- DD 01e935abbh,085de1f0dh,0154de37ah,0defd10b4h,0369cebb5h,0b8d9e392h,0761324beh,054d5ef9bh,074f17e26h,04d6341bah,078c1dde4h,0c0a0e3c8h,087d918fdh,0a6d77581h,002ca3a13h,066876015h
- DD 0f36658f0h,0c7313e9ch,071f8057eh,0c433ef1ch,01b6a835ah,085326246h,07c86394ch,0c8f05398h,0e983c4a1h,0ff398cdfh,003b7b931h,0bf5e8162h,0b7b9045bh,093193c46h,0a4a6e46bh,01e4ebf5dh
- DD 043a24fe7h,0f9942a60h,0ffb3492bh,029c1191eh,0902fde05h,09f662449h,06713c32dh,0c792a7ach,0b737982ch,02fd88ad8h,0a21e60e3h,07e3a0319h,07383591ah,009b0de44h,08310a456h,06df141eeh
- DD 0e6d6f471h,0aec1a039h,01198d12eh,014b2ba0fh,03aeee5ach,0ebc1a160h,0e0b964ceh,0401f4836h,04fd03f66h,02ee43796h,0dd8f3f12h,03fdb4e49h,029380f18h,06ef267f6h,08da64d16h,03e8e9670h
- DD 0207674f1h,0bc19180ch,033ae8fdbh,0112e09a7h,06aaeb71eh,099667554h,0e101b1c7h,079432af1h,0de2ddec6h,0d5eb558fh,05357753fh,081392d1fh,03ae1158ah,0a7a76b97h,04a899991h,0416fbbffh
- DD 00d4a9dcfh,09e65fdfdh,0944ddf12h,07bc29e48h,03c856866h,0bc1a92d9h,06e98dfe2h,0273c6905h,0cdfaa6b8h,069fce418h,05061c69fh,0606bd823h,06af75e27h,042d495a0h,06d873a1fh,08ed3d505h
- DD 06ab25b6ah,0af552841h,02b1a4523h,0c6c0ffc7h,021c99e03h,0ab18827bh,09034691bh,0060e8648h,093c7f398h,05207f90fh,082f8d10bh,09f4a96cbh,03ad0f9e3h,0dd71cd79h,0fc3a54f5h,084f435d2h
- DD 08e33787fh,04b03c55bh,0a6384673h,0ef42f975h,05051b9f0h,0ff7304f7h,0741c87c2h,018aca1dch,02d4bfe80h,056f120a7h,0053e732ch,0fd823b3dh,07537ca16h,011bccfe4h,01b5a996bh,0df6c9c74h
- DD 0904fc3fah,0ee7332c7h,0c7e3636ah,014a23f45h,0f091d9aah,0c38659c3h,0b12d8540h,04a995e5dh,0f3a5598ah,020a53bech,0b1eaa995h,056534b17h,0bf04e03ch,09ed3dca4h,0d8d56268h,0716c563ah
- DD 01d6178e7h,027ba77a4h,068a1ff8eh,0e4c80c40h,00a13f63dh,075011099h,0a61d46f3h,07bf33521h,010b365bbh,00aff218eh,00fd7ea75h,081021804h,0a4b3a925h,005a3fd8ah,09b3db4e6h,0b829e75fh
- DD 04d53e5fbh,06bdc75a5h,0d52717e3h,004a5dc02h,0e9a42ec2h,086af502fh,02630e382h,08867e8fbh,0bec9889bh,0bf845c6eh,0cb47c98dh,054f491f2h,0790c2a12h,0a3091fbah,0c20f708bh,0d7f6fd78h
- DD 0acde5e17h,0a569ac30h,06852b4d7h,0d0f996d0h,04609ae54h,0e51d4bb5h,00daed061h,03fa37d17h,034b8fb41h,062a88684h,09efb64f1h,099a2acbdh,06448e1f2h,0b75c1a5eh,042b5a069h,0fa99951ah
- DD 02f3b26e7h,06d956e89h,0da875247h,0f4709860h,02482dda3h,03ad15179h,0017d82f0h,0d64110e3h,0fad414e4h,014928d2ch,02ed02b24h,02b155f58h,0cb821bf1h,0481a141bh,04f81f5dah,012e3c770h
- DD 09fff8381h,0e49c5de5h,05bbec894h,011053232h,0454d88c4h,0a0d051cch,01f8e531bh,04f6db89ch,0ca563a44h,034fe3fd6h,058da8ab9h,07f5c2215h,09474f0a1h,08445016dh,0cb7d8a0ah,017d34d61h
- DD 01c474019h,08e9d3910h,0d52ceefbh,0caff2629h,0c1622c2bh,0f9cf3e32h,0e9071a05h,0d4b95e3ch,01594438ch,0fbbca61fh,004aadedfh,01eb6e6a6h,068e14940h,0853027f4h,0dfabda9ch,0221d322ah
- DD 0b7cb179ah,0ed8ea9f6h,0b7934dcch,0dc7b764dh,05e09180dh,0fcb13940h,0b47dc2ddh,06629a6bfh,09f5a915eh,0bfc55e4eh,06204441eh,0b1db9d37h,0930c5f53h,0f82d68cfh,0cbb605b1h,017d3a142h
- DD 0308780f2h,0dd5944eah,03845f5e4h,0dc8de761h,07624d7a3h,06beaba7dh,0304df11eh,01e709afdh,002170456h,095364376h,0c8f94b64h,0bf204b3ah,05680ca68h,04e53af7ch,0e0c67574h,00526074ah
- DD 0ecd92af6h,095d8cef8h,06cd1745ah,0e6b9fa7ah,0a325c3e4h,03d546d3dh,09ae93aaeh,01f57691dh,09d2e1a33h,0e891f3feh,0ac063d35h,0d430093fh,05513a327h,0eda59b12h,05536f18fh,0dc2134f3h
- DD 05c210286h,0aa51fe2ch,01cab658ch,03f68aaeeh,0f9357292h,05a23a00bh,07efdabedh,09a626f39h,0199d78e3h,0fe2b3bf3h,071bbc345h,0b7a2af77h,01e59802ch,03d19827ah,0b487a51ch,0823bbc15h
- DD 099d0a422h,0856139f2h,0f456c6fbh,09ac3df65h,0701f8bd6h,0addf65c6h,03758df87h,0149f321eh,0721b7ebah,0b1ecf714h,031a3312ah,0e17df098h,0d5c4d581h,0db2fd6ech,08fcea1b3h,0fd02996fh
- DD 07882f14fh,0e29fa63eh,007c6cadch,0c9f6dc35h,0b882bed0h,046f22d6fh,0d118e52ch,01a45755bh,07c4608cfh,09f2c7c27h,0568012c2h,07ccbdf32h,061729b0eh,0fcb0aeddh,0f7d75dbfh,07ca2ca9eh
- DD 06f640f62h,0f58fecb1h,039f51946h,0e274b92bh,06288af44h,07f4dfc04h,0eac329e5h,00a91f32ah,0d6aaba31h,043ad274bh,00f6884f9h,0719a1640h,0daf91e20h,0685d29f6h,027e49d52h,05ec1cc33h
- DD 03b54a059h,038f4de96h,0efbcfdb3h,00e0015e5h,04dbb8da6h,0177d23d9h,097a617adh,098724aa2h,0fdb6558eh,030f0885bh,0c7899a96h,0f9f7a28ah,0872dc112h,0d2ae8ac8h,073c3c459h,0fa0642cah
- DD 0e7dfc8d6h,015296981h,01fb5b94ah,067cd4450h,00eddfd37h,00ec71cf1h,09a8eddc7h,0c7e5eeb3h,081d95028h,002ac8e3dh,070b0e35dh,00088f172h,0e1881fe3h,0ec041fabh,0d99e7faah,062cf71b8h
- DD 0e0f222c2h,05043dea7h,072e65142h,0309d42ach,09216cd30h,094fe9dddh,00f87feech,0d6539c7dh,0432ac7d7h,003c5a57ch,0327fda10h,072692cf0h,0280698deh,0ec28c85fh,07ec283b1h,02331fb46h
- DD 02867e633h,0d34bfa32h,00a9cc815h,078709a82h,0875e2fa5h,0b7fe6964h,09e98bfb5h,025cc064fh,0493a65c5h,09eb0151ch,053182464h,05fb5d941h,0f04618e2h,069e6f130h,0f89c8ab6h,0a8ecec22h
- DD 0b96209bdh,0cd6ac88bh,0b3e1c9e0h,065fa8cdbh,04a8d8each,0a47d22f5h,08d33f963h,083895cdfh,0b56cd3d1h,0a8adca59h,0daf38232h,010c8350bh,0a5080a9fh,02b161fb3h,03af65b3ah,0be7f5c64h
- DD 097403a11h,02c754039h,0121b96afh,094626cf7h,06a983ec2h,0431de7c4h,052cc3df7h,03780dd3ah,02baf8e3bh,0e28a0e46h,051d299aeh,0abe68aadh,0647a2408h,0603eb8f9h,05c750981h,014c61ed6h
- DD 0c53352e7h,088b34414h,01337d46eh,05a34889ch,0f95f2bc8h,0612c1560h,0d4807a3ah,08a3f8441h,05224da68h,0680d9e97h,0c3eb00e9h,060cd6e88h,09a6bc375h,03875a98eh,04fd554c2h,0dc80f924h
- DD 06ac77407h,06c4b3415h,025420681h,0a1e5ea8fh,04607a458h,0541bfa14h,096d7fbf9h,05dbc7e7ah,031590a47h,0646a851bh,015ee6df8h,0039e85bah,0d7b43fc0h,0d19fa231h,0299a0e04h,084bc8be8h
- DD 0f20df03ah,02b9d2936h,08608d472h,024054382h,09149202ah,076b6ba04h,03670e7b7h,0b21c3831h,0d6fdee10h,0ddd93059h,078488e71h,09da47ad3h,0a0fcfb25h,099cc1dfdh,064696954h,042abde10h
- DD 017eab9feh,014cc15fch,0d3e70972h,0d6e863e4h,06432112ch,029a7765ch,05b0774d8h,088660001h,02c088eaeh,03729175ah,08230b8d4h,013afbcaeh,0915f4379h,044768151h,0d8d22812h,0f086431ah
- DD 0c298b974h,037461955h,0f8711e04h,0905fb5f0h,0fe969d18h,0787abf3ah,06f6a494eh,0392167c2h,028c511dah,0fc7a0d2dh,0b66a262dh,0f127c7dch,0fd63fdf0h,0f9c4bb95h,03913ef46h,090016589h
- DD 011aa600dh,074d2a73ch,09fb5ab52h,02f5379bdh,07fb70068h,0e49e53a4h,0404aa9a7h,068dd39e5h,02ecaa9c3h,0b9b0cf57h,0e824826bh,0ba0e103bh,04631a3c4h,060c2198bh,0fa8966a2h,0c5ff84abh
- DD 0ac95aff8h,02d6ebe22h,0b5a46d09h,01c9bb6dbh,053ee4f8dh,0419062dah,0bb97efefh,07b9042d0h,0830cf6bdh,00f87f080h,06ec8a6c6h,04861d19ah,0202f01aah,0d3a0daa1h,0f25afbd5h,0b0111674h
- DD 01afb20d9h,06d00d6cfh,040671bc5h,013695000h,02485ea9bh,0913ab0dch,09eef61ach,01f2bed06h,06d799e20h,0850c8217h,03271c2deh,093415f37h,06c4f5910h,05afb06e9h,0c4e9e421h,0688a52dfh
- DD 0e2a9a6dbh,030495ba3h,058f9268bh,04601303dh,07eb0f04fh,0be3b0dadh,04456936dh,04ea47250h,0d33fd3e7h,08caf8798h,0eb433708h,01ccd8a89h,087fd50adh,09effe3e8h,06b29c4dfh,0be240a56h
- DD 0ca0e7ebdh,0ec4ffd98h,0e748616eh,0f586783ah,0c77baa99h,0a5b00d8fh,0b4f34c9ch,00acada29h,00fe723ach,036dad67dh,039c36c1eh,01d8e53a5h,01f4bea41h,0e4dd342dh,0ebc9e4e0h,064fd5e35h
- DD 057908805h,096f01f90h,05ed480ddh,0b5b9ea3dh,03efd2dd0h,0366c5dc2h,06e9dfa27h,0ed2fe305h,06e9197e2h,04575e892h,0ab502a5dh,011719c09h,0e81f213fh,0264c7bech,055f5c457h,0741b9241h
- DD 049a5f4f4h,078ac7b68h,09fc45b7dh,0f91d70a2h,0b0f5f355h,039b05544h,0eef930d9h,011f06bceh,0038d05e1h,0db84d25dh,0bacc1d51h,004838ee5h,09e8ee00bh,09da3ce86h,0c36eda1fh,0c3412057h
- DD 064d9c2f4h,0ae80b913h,0a010a8ffh,07468bac3h,037359d41h,0dfd20037h,015efeacch,01a0f5ab8h,0659d0ce0h,07c25ad2fh,06785cff1h,04011bcbbh,07e2192c7h,0128b9912h,013ccb0e8h,0a549d8e1h
- DD 0c85438b1h,0805588d8h,0bc25cb27h,05680332dh,01a4bfdf4h,0dcd1bc96h,0706f6566h,0779ff428h,0f059987ah,08bbee998h,0cc686de7h,0f6ce8cf2h,0953cfdb2h,0f8ad3c4ah,02205da36h,0d1d426d9h
- DD 0c781a241h,0b3c0f13fh,0d75362a8h,03e89360eh,0c8a91184h,0ccd05863h,0efa8a7f4h,09bd0c9b7h,08a912a4bh,097ee4d53h,0bcf518fdh,0de5e15f8h,0c467e1e0h,06a055bf8h,01587e256h,010be4b4bh
- DD 0668621c9h,0d90c14f2h,0ab9c92c1h,0d5518f51h,0d6d47b3ch,08e6a0100h,066716175h,0cbe980ddh,0ddd83683h,0500d3f10h,099cac73ch,03b6cb35dh,06083d550h,053730c8bh,0df0a1987h,0cf159767h
- DD 043ad73b3h,084bfcf53h,04f035a94h,01b528c20h,033eeac69h,04294edf7h,0817f3240h,0b6283e83h,00a5f25b1h,0c3fdc959h,05844ee22h,0efaf8aa5h,0dbdde4deh,0de269ba5h,0c56133bfh,0e3347160h
- DD 08d9ea9f8h,0c1184219h,0f3fc1ab5h,0090de5dbh,00bf22cdah,0404c37b1h,0f5618894h,07de20ec8h,0ecdaecabh,0754c588eh,088342743h,06ca4b0edh,0f4a938ech,076f08bddh,091493ccbh,0d182de89h
- DD 0c8a4186ah,0d652c53eh,0946d8e33h,0b3e878dbh,05f37663ch,0088453c0h,0b407748bh,05cd9daaah,0586d5e72h,0a1f5197fh,0c443ca59h,047500be8h,0e2652424h,078ef35b2h,06dd7767dh,009c5d26fh
- DD 0a74d3f7bh,07175a79ah,0cf5ea459h,00428fd8dh,0a5d1746dh,0511cb97ch,0e71d1278h,036363939h,010350bf4h,0cf2df955h,060aae782h,0b3817439h,03e688809h,0a748c0e4h,0d7a5a006h,098021fbfh
- DD 00e367a98h,09076a70ch,00f62b7c2h,0bea1bc15h,030fe0343h,02645a68ch,0699dc14fh,0acaffa78h,0457bf9c4h,0f4469964h,00d2ead83h,00db6407bh,0b2c6f3ebh,068d56cadh,0f376356ch,03b512e73h
- DD 0fce10408h,0e43b0e1fh,05a5e257dh,089ddc003h,00362e5b3h,0b0ae0d12h,0b0519161h,007f983c7h,05d5231e7h,0c2e94d15h,00b4f9513h,0cff22aedh,06ad0b0b5h,0b02588ddh,011d0dcd5h,0b967d1ach
- DD 0cf777b6ch,08dac6bc6h,04c6d1959h,00062bdbdh,00ef5cc85h,053da71b5h,04006f14fh,007012c7dh,0ac47800dh,04617f962h,0c102ed75h,053365f2bh,04ab8c9d3h,0b422efcbh,034af31c9h,0195cb26bh
- DD 005f2c4ceh,03a926e29h,09856966ch,0bd2bdecbh,085527015h,05d16ab3ah,04486c231h,09f81609eh,0da350002h,0d8b96b2ch,0fa1b7d36h,0bd054690h,0e71d79bch,0dc90ebf5h,008964e4eh,0f241b6f9h
- DD 02fe3cd4ch,07c838643h,0b4bc633ch,0e0f33acbh,03d139f1fh,0b4a9ecech,0dc4a1f49h,005ce69cdh,0f5f98aafh,0a19d1b16h,06f23e0efh,045bb71d6h,046cdfdd3h,033789fcdh,0cee040cah,09b8e2978h
- DD 0ae0a6828h,09c69b246h,07078d5aah,0ba533d24h,07bb4fbdbh,07a2e42c0h,07035385ch,0cfb4879ah,03281705bh,08c3dd30bh,0404fe081h,07e361c6ch,03f604edfh,07b21649ch,0e52ffe47h,05dbf6a3fh
- DD 04b54d9bfh,0c41b7c23h,03511c3d9h,01374e681h,0c1b2b758h,01863bf16h,01e9e6a96h,090e78507h,05d86f174h,0ab4bf98dh,085e96fe4h,0d74e0bd3h,0cac5d344h,08afde39fh,0bd91b847h,090946dbch
- DD 0fe1a838ch,0f5b42358h,0620ac9d8h,005aae6c5h,0a1ce5a0bh,08e193bd8h,04dabfd72h,08f710571h,0182caaach,08d8fdd48h,0040745cfh,08c4aeefah,0f3b93e6dh,073c6c30ah,016f42011h,0991241f3h
- DD 0e457a477h,0a0158eeah,0ee6ddc05h,0d19857dbh,018c41671h,0b3265224h,03c2c0d58h,03ffdfc7eh,026ee7cdah,03a3a5254h,0df02c3a8h,0341b0869h,0723bbfc8h,0a023bf42h,014452691h,03d15002ah
- DD 085edfa30h,05ef7324ch,087d4f3dah,025976554h,0dcb50c86h,0352f5bc0h,04832a96ch,08f6927b0h,055f2f94ch,0d08ee1bah,0344b45fah,06a996f99h,0a8aa455dh,0e133cb8dh,0758dc1f7h,05d0721ech
- DD 079e5fb67h,06ba7a920h,070aa725eh,0e1331febh,07df5d837h,05080ccf5h,07ff72e21h,0e4cae01dh,00412a77dh,0d9243ee6h,0df449025h,006ff7cach,023ef5a31h,0be75f7cdh,00ddef7a8h,0bc957822h
- DD 0b0ce1c55h,08cf7230ch,00bbfb607h,05b534d05h,00e16363bh,0ee1ef113h,0b4999e82h,027e0aa7ah,079362c41h,0ce1dac2dh,091bb6cb0h,067920c90h,02223df24h,01e648d63h,0e32e8f28h,00f7d9eefh
- DD 0fa833834h,06943f39ah,0a6328562h,022951722h,04170fc10h,081d63dd5h,0aecc2e6dh,09f5fa58fh,0e77d9a3bh,0b66c8725h,06384ebe0h,011235ceah,05845e24ah,006a8c118h,0ebd093b1h,00137b286h
- DD 044ace150h,0c589e1ceh,04381e97ch,0e0f8d3d9h,062c5a4b8h,059e99b11h,0fd0ec9f9h,090d262f7h,0283e13c9h,0fbc854c9h,0aedc7085h,02d04fde7h,047dcbecbh,0057d7765h,09a76fa5fh,08dbdf591h
- DD 00de1e578h,0d0150695h,0e9f72bc6h,02e1463e7h,01b39eca5h,0ffa68441h,07c037f2fh,0673c8530h,0747f91dah,0d0d6a600h,0c9cb78e9h,0b08d43e1h,027b5cef5h,00fc0c644h,0a60a2fd6h,05c1d160ah
- DD 028c8e13bh,0f98cae53h,0b2eddcd1h,0375f10c4h,05cce06adh,0d4eb8b7fh,080a2e1efh,0b4669f45h,05bbd8699h,0d593f9d0h,0e7976d13h,05528a4c9h,01c7e28d3h,03923e095h,03f6bb577h,0b9293790h
- DD 0c42bd6d2h,0db567d6ah,0bb1f96aeh,06df86468h,04843b28eh,00efe5b1ah,06379b240h,0961bbb05h,070a6a26bh,0b6caf5f0h,0328e6e39h,070686c0dh,0895fc8d3h,080da06cfh,0b363fdc9h,0804d8810h
- DD 0207f1670h,0be22877bh,04e615291h,09b0dd188h,097a3c2bfh,0625ae8dch,0439b86e8h,008584ef7h,0dcd898ffh,0de7190a5h,02058ee3dh,026286c40h,05f87b1c1h,03db0b217h,0102a6db5h,0cc334771h
- DD 02f770fb1h,0d99de954h,04cd7535eh,097c1c620h,03f09cefch,0d3b6c448h,05a63b4f8h,0d725af15h,0c01e20ech,00c95d24fh,09ae7121fh,0dfd37494h,0ec77b7ech,07d6ddb72h,00353a4aeh,0fe079d3bh
- DD 02e6ac8d2h,03066e70ah,0106e5c05h,09c6b5a43h,0ede59b8ch,052d3c6f5h,0fccec9aeh,030d6a5c3h,04fc0a9efh,0edec7c22h,095c16cedh,0190ff083h,094de0fdeh,0be12ec8fh,0852d3433h,00d131ab8h
- DD 085701291h,042ace07eh,0194061a8h,094793ed9h,0d7f4a485h,030e83ed6h,0f9eeff4dh,09eec7269h,00c9d8005h,090acba59h,01e79b9d1h,05feca458h,01d506a1eh,08fbe5427h,02439cfa7h,0a32b2c8eh
- DD 073dd0b4eh,01671c173h,044a054c6h,037a28214h,04e8b53f1h,081760a1bh,0f9f93b9eh,0a6c04224h,0cf671e3ch,018784b34h,0cda9b994h,081bbecd2h,0b2ab3848h,038831979h,0f2e03c2dh,0ef54feb7h
- DD 0fb8088fah,0cf197ca7h,04ddc96c5h,001427247h,030777176h,0a2d2550ah,04d0cf71dh,053469898h,03a2aaac6h,06ce937b8h,05af38d9bh,0e9f91dc3h,0c8bf2899h,02598ad83h,0b5536c16h,08e706ac9h
- DD 0f688dc98h,040dc7495h,0124c4afch,026490cd7h,01f18775ch,0e651ec84h,0b4fdaf4ah,0393ea6c3h,07f338e0dh,01e1f3343h,06053e7b5h,039fb832bh,0619e14d5h,046e702dah,0cdeef6e0h,0859cacd1h
- DD 04462007dh,063b99ce7h,04cb5f5b7h,0b8ab48a5h,0f55edde7h,09ec673d2h,08cfaefdah,0d1567f74h,00887bcech,046381b6bh,0e178f3c2h,0694497ceh,01e6266cbh,05e6525e3h,0697d6413h,05931de26h
- DD 00e58d493h,087f8df7ch,058b73f12h,0b1ae5ed0h,0dea0c34dh,0c368f784h,0859a91a0h,09bd0a120h,0cc863c68h,0b00d88b7h,03d1f4d65h,03a1cc11eh,00aa85593h,0ea38e0e7h,07dc4aee8h,037f13e98h
- DD 0bc947badh,010d38667h,02a36ee2eh,0738e07ceh,0c577fcach,0c93470cdh,02782470dh,0dee1b616h,02e793d12h,036a25e67h,0e0f186dah,0d6aa6caeh,080e07af7h,0474d0fd9h,0ba8a5cd4h,0f7cdc47dh
- DD 0ab15247fh,028af6d9dh,0493a537fh,07c789c10h,023a334e7h,07ac9b110h,012c9c277h,00236ac09h,01d7a5144h,0a7e5bd25h,0f13ec4ech,0098b9c2ah,0d3f0abcah,03639dacah,0a23960f9h,0642da81ah
- DD 04f7269b1h,07d2e5c05h,0e287c385h,0fcf30777h,0f2a46f21h,010edc84fh,04f43fa36h,035441757h,0fd703431h,0f1327899h,016dd587ah,0a438d7a6h,0e9c8352dh,065c34c57h,05cc5a24eh,0a728edabh
- DD 042531689h,0aed78abch,0010963efh,00a51a0e8h,0d717d9b3h,05776fa0ah,07dd3428bh,0f356c239h,08d3a3dach,029903fffh,03d94491fh,0409597fah,0bf4a56a4h,04cd7a5ffh,08adab462h,0e5096474h
- DD 05c3427b0h,0a97b5126h,0d282c9bdh,06401405ch,0222c5c45h,03629f8d7h,0e8d50aedh,0b1c02c16h,0d9635bc9h,0bea2ed75h,06e24552fh,0226790c7h,065f1d066h,03c33f2a3h,06dfccc2eh,02a43463eh
- DD 0db483761h,08cc3453ah,065d5672bh,0e7cc6085h,0de3efc87h,0277ed6cbh,069234eafh,019f2f368h,05c0b800bh,09aaf4317h,08b6da6e2h,01f1e7c89h,0b94ec75eh,06cfb4715h,0453118c2h,0d590dd5fh
- DD 01f17a34ch,014e49da1h,0235a1456h,05420ab39h,02f50363bh,0b7637241h,0c3fabb6eh,07b15d623h,0e274e49ch,0a0ef40b1h,096b1860ah,05cf50744h,066afe5a4h,0d6583fbfh,0f47e3e9ah,044240510h
- DD 011b2d595h,099254343h,0eec8df57h,0f1367499h,03e73dd05h,03cb12c61h,07dac102ah,0d248c033h,0a77739f5h,0cf154f13h,023d2af42h,0bf4288cbh,032e4a1cfh,0aa64c9b6h,0c8a208f3h,0ee8c07a8h
- DD 06fe8393fh,0e10d4999h,0e91f3a32h,00f809a3fh,0802f63c8h,061096d1ch,057750d3dh,0289e1462h,09889feeah,0ed06167eh,0e0993909h,0d5c9c0e2h,056508ac6h,046fca0d8h,04f1b8e83h,091826047h
- DD 09a4a2751h,04f2c877ah,0cae6feadh,071bd0072h,006aa1941h,038df8dcch,063beeaa8h,05a074b4ch,0c1cec8edh,0d6d65934h,0aabc03bdh,0a6ecb49eh,0de8a8415h,0aade91c2h,0691136e0h,0cfb0efdfh
- DD 023ab3495h,011af45eeh,00b77463dh,0a132df88h,0815d06f4h,08923c15ch,00d61a436h,0c3ceb3f5h,0e88fb1dah,0af52291dh,01da12179h,0ea057974h,0d2fef720h,0b0d7218ch,08e1d8845h,06c0899c9h
- DD 0752ddad7h,098157504h,0a1a68a97h,0d60bd74fh,0f658fb99h,07047a3a9h,05f8511e4h,01f5d86d6h,04b5a6d88h,0b8a4bc42h,01abefa7dh,069eb2c33h,013c9c510h,095bf39e8h,0d48aab43h,0f571960ah
- DD 0704e23c6h,07e8cfbcfh,028aaa65bh,0c71b7d22h,0245e3c83h,0a041b2bdh,0d21854ffh,069b98834h,0963bfeech,089d227a3h,0de7da7cbh,099947aaah,0ee68a9b1h,01d9ee9dbh,0698ec368h,00a08f003h
- DD 078ef2487h,0e9ea4094h,002cfec26h,0c8d2d415h,0b7dcf328h,0c52f9a6eh,085b6a937h,00ed489e3h,0bef3366eh,09b94986bh,0edddddb8h,00de59c70h,0eadddbe2h,0ffdb748ch,08266ea40h,09b9784bbh
- DD 01a93507ah,0142b5502h,08d3c06cfh,0b4cd1187h,091ec3f40h,0df70e76ah,04e7553c2h,0484e81adh,0272e9d6eh,0830f87b5h,0c6ff514ah,0ea1c93e5h,0c4192a8eh,067cc2adch,042f4535ah,0c77e27e2h
- DD 0d2b713c5h,09cdbab36h,0cf7b0cd3h,086274ea0h,009af826bh,0784680f3h,00c72dea3h,0bfcc837ah,0d6529b73h,0a8bdfe9dh,063a88002h,0708aa228h,0c91d45b9h,06c7a9a54h,0fd004f56h,0df1a38bbh
- DD 0b8bad853h,02e8c9a26h,03723eae7h,02d52cea3h,056ca2830h,0054d6d81h,09a8dc411h,0a3317d14h,0fd4ddedah,0a08662feh,0b55d792bh,0ed2a153ah,0bfc6e944h,07035c16ah,000171cf3h,0b6bc5834h
- DD 083d102b6h,0e27152b3h,00646b848h,0fe695a47h,0916e6d37h,0a5bb09d8h,00d17015eh,0b4269d64h,00a1d2285h,08d8156a1h,046d26d72h,0feef6c51h,04c5434a7h,09dac57c8h,059d39e31h,00282e5beh
- DD 0721c486dh,0edfff181h,0bc58824eh,0301baf10h,000570031h,08136a6aah,01cddde68h,055aaf78ch,059c63952h,026829371h,08bc25bafh,03a3bd274h,0b7e52dc3h,0ecdf8657h,0fd78e6c8h,02dd8c087h
- DD 0f5531461h,020553274h,05d95499bh,08b4a1281h,01a80f9d2h,0e2c8763ah,04ddec758h,0d1dbe32bh,030c34169h,0af12210dh,078baa533h,0ba74a953h,0a438f254h,03d133c6eh,0201bef5bh,0a431531ah
- DD 0f669d7ech,015295e22h,0357fb515h,0ca374f64h,0eaa3fdb3h,08a8406ffh,0df3f2da8h,0106ae448h,033c8e9a1h,08f9b0a90h,071ad5885h,0234645e2h,01c0aed14h,03d083224h,07a942d46h,0f10a7d3eh
- DD 040d5c9beh,07c11deeeh,0ba84ed98h,0b2bae7ffh,0aad58dddh,093e97139h,03f6d1fa3h,03d872796h,08569ff13h,0483aca81h,09a600f72h,08b89a5fbh,0c06f2b86h,04cbc27c3h,063ad9c0bh,022130713h
- DD 048ac2840h,0b5358b1eh,0ecba9477h,018311294h,0a6946b43h,0da58f990h,09ab41819h,03098baf9h,04198da52h,066c4c158h,0146bfd1bh,0ab4fc17ch,0bf36a908h,02f0a4c3ch,058cf7838h,02ae9e34bh
- DD 03fa11b1fh,0f411529eh,0974af2b4h,021e43677h,0c230793bh,07c20958eh,016e840f3h,0710ea885h,0c5dc67cfh,0fc0b21fch,088405718h,008d51647h,0cfe49eb7h,0d955c21fh,056dd4a1fh,09722a5d5h
- DD 0c861baa5h,0c9ef50e2h,09505ac3eh,0c0c21a5dh,08b7c063fh,0af6b9a33h,02f4779c1h,0c6370339h,0638167c3h,022df99c7h,0795db30ch,0fe6ffe76h,0a4854989h,02b822d33h,030563aa5h,0fef031ddh
- DD 0d57c667fh,016b09f82h,0cc0b76f1h,0c70312ceh,0c9118aech,0bf04a9e6h,03409d133h,082fcb419h,0ab45d44dh,01a8ab385h,0617b83a3h,0fba07222h,058e81b52h,0b05f50ddh,021ce5affh,01d8db553h
- DD 0e344a873h,03097b8d4h,0fe36d53eh,07d8d116dh,07875e750h,06db22f58h,043e144eah,02dc5e373h,0e799eb95h,0c05f32e6h,06899e6ech,0e9e5f4dfh,01fab23d5h,0bdc3bd68h,073af60e6h,0b72b8ab7h
- DD 02cecc84ah,08db27ae0h,07bdb871ch,0600016d8h,0d7c46f58h,042a44b13h,0c3a77d39h,0b8919727h,0dafd6088h,0cfc6bbbdh,06bd20d39h,01a740146h,098c41072h,08c747abdh,0bdf68ea1h,04c91e765h
- DD 008819a78h,07c95e5cah,0c9587921h,0cf48b729h,0debbcc7dh,0091c7c5fh,0f0e05149h,06f287404h,026cd44ech,0f83b5ac2h,0cfea250eh,088ae32a6h,01d06ebc5h,06ac5047ah,0d434f781h,0c7e550b4h
- DD 05c727bd2h,061ab1cf2h,01cf915b0h,02e4badb1h,0f69d3920h,01b4dadech,0f14c1dfeh,0e61b1ca6h,0bd6bd51fh,090b479cch,08045ec30h,08024e401h,025ef0e62h,0cab29ca3h,049e4ebc0h,04f2e9416h
- DD 00ccced58h,045eb40ech,00da44f98h,025cd4b9ch,0871812c6h,043e06458h,016cef651h,099f80d55h,0ce6dc153h,0571340c9h,0d8665521h,0138d5117h,04e07014dh,0acdb45bch,084b60b91h,02f34bb38h
- DD 02ae8921eh,0f44a4fd2h,0892ba1e2h,0b039288eh,0b1c180b2h,09da50174h,01693dc87h,06b70ab66h,0e7057481h,07e9babc9h,09c80dc41h,04581ddefh,051294682h,00c890da9h,03f4736e5h,00b5629d3h
- DD 0b06f5b41h,02340c79eh,04e243469h,0a42e84ceh,0045a71a9h,0f9a20135h,0d27b6fb6h,0efbfb415h,09d33cd6fh,025ebea23h,0aa6c0af8h,09caedb88h,0d9ce6f96h,053dc7e9ah,051e0b15ah,03897f9fdh
- DD 08e5d788eh,0f51cb1f8h,0e1d490eeh,01aec7ba8h,0cc58cb3ch,0265991e0h,09fc3ad31h,09f306e8ch,05040a0ach,05fed006eh,0fb476f2eh,0ca9d5043h,0beea7a23h,0a19c06e8h,00edabb63h,0d2865801h
- DD 06967469ah,0db92293fh,08d8a8ed8h,02894d839h,0bbc77122h,087c9e406h,02ea3a26ah,08671c6f1h,0d7de9853h,0e42df8d6h,0b1f2bcc7h,02e3ce346h,0899d50cfh,0da601dfch,0fb1b598fh,0bfc913deh
- DD 0e61f7908h,081c4909fh,09bbc7b29h,0192e304fh,0c104b338h,0c3ed8738h,0783f5d61h,0edbe9e47h,02db30660h,00c06e9beh,0c0eb7d8eh,0da3e613fh,0322e096eh,0d8fa3e97h,0d336e247h,0febd91e8h
- DD 0df655a49h,08f13ccc4h,05eb20210h,0a9e00dfch,0c656b6eah,084631d0fh,0d8c0d947h,093a058cdh,067bd3448h,06846904ah,0f394fd5ch,04a3d4e1ah,0db225f52h,0c102c1a5h,0fc4f5e9ah,0e3455bbah
- DD 04b9ad1ceh,06b36985bh,05bb7f793h,0a9818536h,048b1a416h,06c25e1d0h,03c81bee7h,01381dd53h,07a4a7620h,0d2a30d61h,039b8944ch,0c8412926h,07a97c33ah,03c1c6fbeh,0938664e7h,0941e541dh
- DD 04a34f239h,0417499e8h,0b90402d5h,015fdb83ch,0433aa832h,0b75f46bfh,063215db1h,0b61e15afh,0a127f89ah,0aabe59d4h,007e816dah,05d541e0ch,0a618b692h,0aaba0659h,017266026h,055327733h
- DD 095f57552h,0af53a0fch,06cacb0c9h,032947650h,0c821be01h,0253ff58dh,0a06f1146h,0b0309531h,005c2e54dh,059bbbdf5h,026e8dd22h,0158f27adh,0397e1e53h,0cc5b7ffbh,07fc1e50dh,0ae03f65bh
- DD 09c95f0f9h,0a9784ebdh,024640771h,05ed9deb2h,0035561c4h,031244af7h,07ee857deh,087332f3ah,02b9e0d88h,009e16e9eh,056a06049h,052d910f4h,0a9592f48h,0507ed477h,02365d678h,085cb917bh
- DD 04c8998d1h,0f8511c93h,0730ea58fh,02186a3f1h,0b2029db0h,050189626h,002ceb75ah,09137a6d9h,0748bc82ch,02fe17f37h,080469f8ch,087c2e931h,0bf891aa2h,0850f71cdh,075ec3d8dh,00ca1b89bh
- DD 05e1cd3cdh,0516c43aah,09a887c28h,089397808h,0ddea1f9fh,00059c699h,08e6868f7h,07737d6fah,060f1524bh,06d93746ah,0ba052aa7h,036985e55h,0ed923ea5h,041b1d322h,025852a11h,03429759fh
- DD 0092e9f41h,0beca6ec3h,062256bbdh,03a238c66h,070ad487dh,0d82958eah,065610d93h,04ac8aaf9h,05e4ccab0h,03fa101b1h,09de14bfbh,09bf430f2h,06531899dh,0a10f5cc6h,0ea8ce17dh,0590005fbh
- DD 024544cb6h,0c437912fh,0d79ac2e3h,09987b71ah,0c058a212h,013e3d9ddh,0d2de9606h,000075aach,06cac8369h,080ab508bh,0f54f6c89h,087842be7h,06bc532a4h,0a7ad663dh,078a91bc8h,067813de7h
- DD 0c3427239h,05dcb61ceh,0c56934d9h,05f3c7cf0h,0e3191591h,0c079e0fbh,0b01aada7h,0e40896bdh,00492d25fh,08d466791h,0e7408276h,08aeb30c9h,09287aacch,0e9437495h,079fe03d4h,023d4708dh
- DD 0d0c05199h,08cda9cf2h,0fae78454h,0502fbc22h,0f572a182h,0c0bda9dfh,06158b372h,05f9b71b8h,02b82dd07h,0e0f33a59h,09523032eh,076302735h,0c4505a32h,07fe1a721h,0f796409fh,07b6e3e82h
- DD 035d0b34ah,0e3417bc0h,08327c0a7h,0440b386bh,0ac0362d1h,08fb7262dh,0e0cdf943h,02c41114ch,0ad95a0b1h,02ba5cef1h,067d54362h,0c09b37a8h,001e486c9h,026d6cdd2h,042ff9297h,020477abfh
- DD 0292a9287h,0a004dcb3h,077b092c7h,0ddc15cf6h,0806c0605h,0083a8464h,03db997b0h,04a68df70h,005bf7dd0h,09c134e45h,08ccf7f8ch,0a4e63d39h,041b5f8afh,0a6e6517fh,0ad7bc1cch,0aa8b9342h
- DD 01e706ad9h,0126f35b5h,0c3a9ebdfh,0b99cebb4h,0bf608d90h,0a75389afh,0c6c89858h,076113c4fh,097e2b5aah,080de8eb0h,063b91304h,07e1022cch,06ccc066ch,03bdab605h,0b2edf900h,033cbb144h
- DD 07af715d2h,0c4176471h,0d0134a96h,0e2f7f594h,0a41ec956h,02c1873efh,077821304h,0e4e7b4f6h,088d5374ah,0e5c8ff97h,080823d5bh,02b915e63h,0b2ee8fe2h,0ea6bc755h,0e7112651h,06657624ch
- DD 0dace5acah,0157af101h,011a6a267h,0c4fdbcf2h,0c49c8609h,0daddf340h,0e9604a65h,097e49f52h,0937e2ad5h,09be8e790h,0326e17f1h,0846e2508h,00bbbc0dch,03f38007ah,0b11e16d6h,0cf03603fh
- DD 07442f1d5h,0d6f800e0h,066e0e3abh,0475607d1h,0b7c64047h,082807f16h,0a749883dh,08858e1e3h,08231ee10h,05859120bh,0638a1eceh,01b80e7ebh,0c6aa73a4h,0cb72525ah,0844423ach,0a7cdea3dh
- DD 0f8ae7c38h,05ed0c007h,03d740192h,06db07a5ch,05fe36db3h,0be5e9c2ah,076e95046h,0d5b9d57ah,08eba20f2h,054ac32e7h,071b9a352h,0ef11ca8fh,0ff98a658h,0305e373eh,0823eb667h,0ffe5a100h
- DD 0e51732d2h,057477b11h,02538fc0eh,0dfd6eb28h,03b39eec5h,05c43b0cch,0cb36cc57h,06af12778h,006c425aeh,070b0852dh,05c221b9bh,06df92f8ch,0ce826d9ch,06c8d4f9eh,0b49359c3h,0f59aba7bh
- DD 0da64309dh,05c8ed8d5h,091b30704h,061a6de56h,02f9b5808h,0d6b52f6ah,098c958a7h,00eee4194h,0771e4caah,0cddd9aabh,078bc21beh,083965dfdh,0b3b504f5h,002affce3h,0561c8291h,030847a21h
- DD 052bfda05h,0d2eb2cf1h,06197b98ch,0e0e4c4e9h,0f8a1726fh,01d35076ch,02db11e3dh,06c06085bh,04463ba14h,015c0c4d7h,00030238ch,09d292f83h,03727536dh,01311ee8bh,0beaedc1eh,0feea86efh
- DD 066131e2eh,0b9d18cd3h,080fe2682h,0f31d974fh,0e4160289h,0b6e49e0fh,008e92799h,07c48ec0bh,0d1989aa7h,0818111d8h,0ebf926f9h,0b34fa0aah,0a245474ah,0db5fe2f5h,03c7ca756h,0f80a6ebbh
- DD 0afa05dd8h,0a7f96054h,0fcaf119eh,026dfcf21h,00564bb59h,0e20ef2e3h,061cb02b8h,0ef4dca50h,065d30672h,0cda7838ah,0fd657e86h,08b08d534h,046d595c8h,04c5b4395h,0425cb836h,039b58725h
- DD 03de9abe3h,08ea61059h,09cdc03beh,040434881h,0cfedce8ch,09b261245h,0cf5234a1h,078c318b4h,0fde24c99h,0510bcf16h,0a2c2ff5dh,02a77cb75h,027960fb4h,09c895c2bh,0b0eda42bh,0d30ce975h
- DD 01a62cc26h,0fda85393h,050c0e052h,023c69b96h,0bfc633f3h,0a227df15h,01bae7d48h,02ac78848h,0187d073dh,0487878f9h,0967f807dh,06c2be919h,0336e6d8fh,0765861d8h,0ce528a43h,088b8974ch
- DD 0ff57d051h,009521177h,0fb6a1961h,02ff38037h,0a3d76ad4h,0fc0aba74h,025a7ec17h,07c764803h,048879bc8h,07532d75fh,058ce6bc1h,0ea7eacc0h,08e896c16h,0c82176b4h,02c750fedh,09a30e0b2h
- DD 0421d3aa4h,0c37e2c2eh,0e84fa840h,0f926407ch,01454e41ch,018abc03dh,03f7af644h,026605ecdh,0d6a5eabfh,0242341a6h,0216b668eh,01edb84f4h,004010102h,0d836edb8h,0945e1d8ch,05b337ce7h
- DD 0c055dc14h,0d2075c77h,081d89cdfh,02a0ffa25h,06ffdcbafh,08ce815eah,0fb648867h,0a3428878h,0884655fbh,0277699cfh,0364d3e41h,0fa5b5bd6h,0441e1cb7h,001f680c6h,0b70a7d67h,03fd61e66h
- DD 0cc78cf66h,0666ba2dch,06fdbff77h,0b3018174h,0168d4668h,08d4dd0dbh,01dab3a2ah,0259455d0h,0cde3acech,0f58564c5h,013adb276h,077141925h,08a303f65h,0527d725dh,0e6f38f7bh,055deb6c9h
- DD 0b1fa70fbh,0fd5bb657h,0d8073a00h,0fa07f50fh,0bca02500h,0f72e3aa7h,09975740dh,0f68f895dh,05cae2a6ah,030112060h,002874842h,001bd7218h,07ce47bd3h,03d423891h,0789544f6h,0a66663c1h
- DD 03272d838h,0864d05d7h,0fa6295c5h,0e22924f9h,06c2fda32h,08189593fh,0b184b544h,0330d7189h,0bde1f714h,079efa62ch,0e5cb1a63h,035771c94h,0641c8332h,02f4826b8h,0c8cee854h,000a894fbh
- DD 036194d40h,0b4b9a39bh,077612601h,0e857a7c5h,04ecf2f58h,0f4209dd2h,05a033487h,082b9e66dh,0e4e8b9ddh,0c1e36934h,0a42377d7h,0d2372c9dh,00e3ae43bh,051dc94c7h,004474f6fh,04c57761eh
- DD 01058a318h,0dcdacd0ah,078053a9ah,0369cf3f5h,031c68de2h,0c6c3de50h,03c4b6d9fh,04653a576h,0aa4e5c97h,01688dd5ah,0b7ab3c74h,05be80aa1h,0bc65c283h,070cefe7ch,006867091h,057f95f13h
- DD 04415503bh,0a39114e2h,04cbb17e9h,0c08ff7c6h,0d7dec966h,01eff674dh,053376f63h,06d4690afh,0ea74237bh,0ff6fe32eh,0cd57508eh,0c436d17eh,0edcc40feh,015aa28e1h,0581bbb44h,00d769c04h
- DD 034eaacdah,0c240b6deh,02ba0f1deh,0d9e116e8h,079438e55h,0cbe45ec7h,096f752d7h,091787c9dh,0f129ac2fh,0897f532bh,05a36e22ch,0d307b7c8h,0749fb8f3h,091940675h,0157fdb28h,0d14f95d0h
- DD 06ae55043h,0fe51d029h,044a87de1h,08931e98fh,009e4fee2h,0e57f1cc6h,04e072d92h,00d063b67h,0ed0e4316h,070a998b9h,0306aca46h,0e74a736bh,04fda97c7h,0ecf0fbf2h,03e178d93h,0a40f65cbh
- DD 016df4285h,016253604h,0d0c56ae2h,0b0c9babbh,0cfc5cfc3h,073032b19h,009752056h,0e497e5c3h,0164bda96h,012096bb4h,0a0b74da1h,01ee42419h,0403826bah,08fc36243h,0dc09e660h,00c8f0069h
- DD 0c27253c9h,08667e981h,092b36a45h,005a6aefbh,09cb7bb46h,0a62c4b36h,011f7027bh,08394f375h,05f109d0fh,0747bc79ch,05b8cc60ah,0cad88a76h,058f09e68h,080c5a66bh,0f6127each,0e753d451h
- DD 05b0ec6f5h,0c44b74a1h,05289b2b8h,047989fe4h,058d6fc73h,0745f8484h,0f61c70abh,0ec362a6fh,0b3a8ad41h,0070c98a7h,07b63db51h,073a20fc0h,0f44c35f4h,0ed2c2173h,09acc9dcah,08a56149dh
- DD 09ac6e0f4h,098f17881h,0a413b5edh,0360fdeafh,0a300b0fdh,00625b8f4h,05b3222d3h,0f1f4d76ah,0587f76b8h,09d6f5109h,02317fdb5h,08b4ee08dh,08c68b095h,088089bb7h,05808d9b9h,095570e9ah
- DD 035d33ae7h,0a395c36fh,050bb5a94h,0200ea123h,00bafe84bh,020c789bdh,00919276ah,0243ef52dh,0e23ae233h,03934c577h,0a460d1ech,0b93807afh,0f8fa76a4h,0b72a53b1h,0c3ca4491h,0d8914cb0h
- DD 03fb42622h,02e128494h,0500907d5h,03b2700ach,01a95ec63h,0f370fb09h,031b6dfbdh,0f8f30be2h,069e55f15h,0f2b2f8d2h,0cc1323e9h,01fead851h,0d9e5eef6h,0fa366010h,0e316107eh,064d487b0h
- DD 0d23ddc82h,04c076b86h,07e0143f0h,003fd344ch,0317af2c5h,0a95362ffh,0e18b7a4fh,00add3db7h,08260e01bh,09c673e3fh,054a1cc91h,0fbeb49e5h,092f2e433h,091351bf2h,0851141ebh,0c755e7ech
- DD 029607745h,0c9a95139h,0a26f2b28h,00ca07420h,04bc6f9ddh,0cb2790e7h,0adcaffc0h,0345bbb58h,0be0f27a2h,0c65ea38ch,0641fcb56h,067c24d7ch,0a9e2c757h,02c25f0a7h,016f16c49h,093f5cdb0h
- DD 0c5ee30a1h,02ca5a9d7h,0b909b729h,0d1593635h,0dadeff48h,0804ce9f3h,0b07c30c3h,0ec464751h,09e49af6ah,089d65ff3h,06f3d01bch,0f2d6238ah,00bced843h,01095561eh,0c8a13fd8h,051789e12h
- DD 0763231dfh,0d633f929h,0e7cbddefh,046df9f7dh,0cb265da8h,001c889c0h,0af4336d2h,0fce1ad10h,0fc6a0a7eh,08d110df6h,06da425dch,0dd431b98h,01834aabeh,0cdc4aeabh,08439b7fch,084deb124h
- DD 03c2a5998h,08796f169h,07947190dh,09b9247b4h,011597014h,055b9d9a5h,07b1566eeh,07e9dd70dh,0cbcd5e64h,094ad78f7h,09bd4c032h,00359ac17h,07cc222aeh,03b11baafh,0ba78e812h,0a6a6e284h
- DD 024cea1a0h,08392053fh,033621491h,0c97bce4ah,035399ee9h,07eb1db34h,0ece81ad1h,0473f78efh,0f63d3d0dh,041d72fe0h,0afab62fch,0e620b880h,093158383h,092096bc9h,08f896f6ch,041a21357h
- DD 0c7dcfcabh,01b5ee2fah,09546e007h,0650acfdeh,0b1b02e07h,0c081b749h,0f9eca03dh,0da9e41a0h,0175a54abh,0013ba727h,0ea5d8d10h,0ca0cd190h,095fd96a9h,085ea52c0h,0bc5c3940h,02c591b9fh
- DD 02bad4d5fh,06fb4d4e4h,0fef0059bh,0fa4c3590h,0f5122294h,06a10218ah,0a85751d1h,09a78a81ah,0a98e84e7h,004f20579h,04997e5b5h,0fe1242c0h,0ca21e1e4h,0e77a273bh,09411939dh,0fcc8b1efh
- DD 092d0487ah,0e20ea302h,0294b91feh,01442dbech,0bb6b0e8fh,01f7a4afeh,06889c318h,01700ef74h,070f1fc62h,0f5bbffc3h,069c79ccah,03b31d4b6h,0a7f6340dh,0e8bc2aabh,0a725e10ah,0b0b08ab4h
- DD 0ae340050h,044f05701h,01cf0c569h,0ba4b3016h,0fbe19a51h,05aa29f83h,0b71d752eh,01b9ed428h,0eb4819f5h,01666e54eh,09e18b75bh,0616cdfedh,03ee27b0bh,0112ed5beh,044c7de4dh,0fbf28319h
- DD 0e0e60d84h,0d685ec85h,01db7ee78h,068037e30h,0003c4d6eh,05b65bdcdh,093e29a6ah,033e7363ah,008d0756ch,0995b3a61h,02faf134bh,0d727f85ch,01d337823h,0fac6edf7h,00439b8b4h,099b9aa50h
- DD 0e2b4e075h,0722eb104h,0437c4926h,049987295h,046a9b82dh,0b1e4c0e4h,057a006f5h,0d0cb3197h,0d7808c56h,0f3de0f7dh,051f89772h,0b5c54d8fh,0adbd31aah,0500a114ah,0295f6cabh,09afaaaa6h
- DD 004cf667ah,094705e21h,09d3935d7h,0fc2a811bh,06d09267ch,0560b0280h,0f780e53bh,0f19ed119h,0067b6269h,0f0227c09h,05caef599h,0967b8533h,068efeebch,0155b9243h,0c497bae6h,0cd6d34f5h
- DD 06cceb370h,01dd8d5d3h,0a78d7bf9h,02aeac579h,070b67a62h,05d65017dh,017c53f67h,070c8e44fh,086a34d09h,0d1fc0950h,0e7134907h,0e0fca256h,080fdd315h,0e24fa29ch,0d87499adh,02c4acd03h
- DD 03b5a9ba6h,0baaf7517h,012e51a51h,0b9cbe1f6h,05e154897h,0d88edae3h,077b66ca0h,0e4309c3ch,0f67f3746h,0f5555805h,0a36401ffh,085fc37bah,0d9499a53h,0df86e2cah,0ecbc955bh,06270b2a3h
- DD 0974ad33bh,0afae64f5h,0fe7b2df1h,004d85977h,04ab03f73h,02a3db3ffh,08702740ah,00b87878ah,05a061732h,06d263f01h,0a32a1901h,0c25430ceh,0db155018h,0f7ebab3dh,063a9b78eh,03a86f693h
- DD 0da9f3804h,0349ae368h,0a164349ch,0470f07feh,08562baa5h,0d52f4cc9h,02b290df3h,0c74a9e86h,043471a24h,0d3a1aa35h,0b8194511h,0239446beh,081dcd44dh,0bec2dd00h,0c42ac82dh,0ca3d7f0fh
- DD 0fdaf4520h,01f3db085h,04549daf2h,0bb6d3e80h,019ad5c42h,0f5969d8ah,0dbfd1511h,07052b13dh,0682b9060h,011890d1bh,0ac34452ch,0a71d3883h,0783805b4h,0a438055bh,04725b23eh,043241277h
- DD 04901bbedh,0f20cf96eh,0f432a2bbh,06419c710h,0dfa9cd7dh,057a0fbb9h,000daa249h,0589111e4h,07b60554eh,019809a33h,0ede283a4h,0ea5f8887h,0503bfd35h,02d713802h,0585d2a53h,0151bb0afh
- DD 043b30ca8h,040b08f74h,0d9934583h,0e10b5bbah,0b51110adh,0e8a546d6h,028e0b6c5h,01dd50e66h,0cff2b821h,0292e9d54h,047281760h,03882555dh,03724d6e3h,0134838f8h,022ddcda1h,0f2c679e0h
- DD 06d2a5768h,040ee8815h,01c1e7e2dh,07f227bd2h,0d04ff443h,0487ba134h,0c614e54bh,076e2ff3dh,0a3177ec7h,036b88d6fh,02328fff5h,0bf731d51h,049ba158eh,0758caea2h,002938188h,05ab8ff4ch
- DD 035edc56dh,033e16056h,07e940d79h,05a69d349h,003866dcbh,06c4fd001h,04893cdefh,020a38f57h,0fac3a15bh,0fbf3e790h,07a4f8e6bh,06ed7ea2eh,0bc3aca86h,0a663eb4fh,0080d53f7h,022061ea5h
- DD 0f546783fh,02480dfe6h,05a0a641eh,0d38bc6dah,02ede8965h,0fb093cd1h,0acb455cfh,089654db4h,026e1adeeh,0413cbf9ah,0373294d4h,0291f3764h,0648083feh,000797257h,0208cc341h,025f504d3h
- DD 0c3a0ee43h,0635a8e5eh,0679898ffh,070aaebcah,05dc63d56h,09ee9f547h,0ffb34d00h,0ce987966h,05e26310ah,0f9f86b19h,0382a8ca8h,09e435484h,0c2352fe4h,0253bcb81h,04474b571h,0a4eac8b0h
- DD 0c1ad8cf8h,0c1b97512h,099e0b697h,0193b4e9eh,001e85df0h,0939d2716h,0cd44eafdh,04fb265b3h,0e51e1ae2h,0321e7dcdh,0e3d8b096h,08e3a8ca6h,052604998h,08de46cb0h,039072aa7h,091099ad8h
- DD 093aa96b8h,02617f91ch,07fca2e13h,00fc8716bh,095328723h,0a7106f5eh,0262e6522h,0d1c9c40bh,042b7c094h,0b9bafe86h,01543c021h,01873439dh,05cbefd5dh,0e1baa5deh,0521e8affh,0a363fc5eh
- DD 0f862eaach,0efe6320dh,022c647dch,014419c63h,04e46d428h,00e06707ch,04a178f8fh,0cb6c834fh,0d30f917ch,00f993a45h,09879afeeh,0d4c4b049h,070500063h,0b6142a1eh,0a5d9d605h,07c9b41c3h
- DD 02f8ba2c7h,0bc00fc2fh,07c67aa28h,00966eb2fh,05a786972h,013f7b516h,08a2fbba0h,03bfb7557h,05a2b9620h,0131c4f23h,06faf46beh,0bff3ed27h,07e172323h,09b4473d1h,0339f6246h,0421e8878h
- DD 025a41632h,00fa8587ah,0a35b6c93h,0c0814124h,059ebb8dbh,02b18a9f5h,076edb29ch,0264e3357h,0c87c51e2h,0af245ccdh,0501e6214h,016b3015bh,00a3882ceh,0bb31c560h,0fec11e04h,06961bb94h
- DD 0eff7a3a0h,03b825b8dh,0b1df7326h,0bec33738h,099604a1fh,068ad747ch,09a3bd499h,0d154c934h,01cc7a906h,0ac33506fh,06c560e8fh,073bb5392h,0263e3944h,06428fcbeh,01c387434h,0c11828d5h
- DD 03e4b12ffh,03cd04be1h,02d88667ch,0c3aad9f9h,0248120cfh,0c52ddcf8h,02a389532h,0985a892eh,03bb85fa0h,0fbb4b21bh,08dfc6269h,0f95375e0h,07ee2aceah,0fb4fb06ch,0309c4d1fh,06785426eh
- DD 0d8ceb147h,0659b17c8h,0b70a5554h,09b649eeeh,0ac6bc634h,06b7fa0b5h,01d6e732fh,0d99fe2c7h,08d3abba2h,030e6e762h,0a797b799h,018fee6e7h,0c696464dh,05c9d360dh,027bfde12h,0e3baeb48h
- DD 0f23206d5h,02bf5db47h,01d260152h,02f6d3420h,03f8ff89ah,017b87653h,0378fa458h,05157c30ch,02d4fb936h,07517c5c5h,0e6518cdch,0ef22f7ach,0bf847a64h,0deb483e6h,092e0fa89h,0f5084558h
- DD 0df7304d4h,0ab9659d8h,0ff210e8eh,0b71bcf1bh,0d73fbd60h,0a9a2438bh,05d11b4deh,04595cd1fh,04835859dh,09c0d329ah,07dbb6e56h,04a0f0d2dh,0df928a4eh,0c6038e5eh,08f5ad154h,0c9429621h
- DD 0f23f2d92h,091213462h,060b94078h,06cab71bdh,0176cde20h,06bdd0a63h,0ee4d54bch,054c9b20ch,09f2ac02fh,03cd2d8aah,0206eedb0h,003f8e617h,093086434h,0c7f68e16h,092dd3db9h,0831469c5h
- DD 08f981354h,08521df24h,03588a259h,0587e23ech,0d7a0992ch,0cbedf281h,038961407h,006930a55h,0be5bbe21h,009320debh,02491817fh,0a7ffa5b5h,009065160h,0e6c8b4d9h,0fff6d2a9h,0ac4f3992h
- DD 03ae9c1bdh,07aa7a158h,0e37ce240h,0e0af6d98h,028ab38b4h,0e54342d9h,00a1c98cah,0e8b75007h,0e02358f2h,0efce86afh,0ea921228h,031b8b856h,00a1c67fch,0052a1912h,0e3aead59h,0b4069ea4h
- DD 07fa03cb3h,03232d6e2h,00fdd7d88h,0db938e5bh,02ccbfc5dh,004c1d2cdh,0af3a580fh,0d2f45c12h,07883e614h,0592620b5h,0be7c5f26h,05fd27e68h,01567e1e3h,0139e45a9h,044d8aaafh,02cc71d2dh
- DD 0e36d0757h,04a9090cdh,0d9a29382h,0f722d7b1h,004b48ddfh,0fb7fb04ch,0ebe16f43h,0628ad2a7h,020226040h,0cd3fbfb5h,05104b6c4h,06c34ecb1h,0c903c188h,030c0754eh,02d23cab0h,0ec336b08h
- DD 01e206ee5h,0473d62a2h,08c49a633h,0f1e27480h,0e9f6b2c3h,087ab956ch,062b606eah,061830b48h,0e78e815fh,067cd6846h,04c02082ah,0fe40139fh,0952ec365h,052bbbfcbh,06b9836abh,074c11642h
- DD 0558df019h,09f51439eh,0ac712b27h,0230da4bah,055185a24h,0518919e3h,084b78f50h,04dcefcddh,0a47d4c5ah,0a7d90fb2h,0b30e009eh,055ac9abfh,074eed273h,0fd2fc359h,0dbea8fafh,0b72d824ch
- DD 04513e2cah,0ce721a74h,038240b2ch,00b418612h,0d5baa450h,005199968h,02b0e8c25h,0eb1757edh,03dfac6d5h,06ebc3e28h,048a237f5h,0b2431e2eh,052f61499h,02acb5e23h,0e06c936bh,05558a2a7h
- DD 0cbb13d1bh,0d213f923h,05bfb9bfeh,098799f42h,0701144a9h,01ae8ddc9h,04c5595eeh,00b8b3bb6h,03ecebb21h,00ea9ef2eh,03671f9a7h,017cb6c4bh,0726f1d1fh,047ef464fh,06943a276h,0171b9484h
- DD 07ef0329ch,051a4ae2dh,091c4402ah,008509222h,0afd45bbch,064a61d35h,03035a851h,038f096feh,0a1dec027h,0c7468b74h,04fc7dcbah,0e8cf10e7h,0f4a06353h,0ea35ff40h,08b77dd66h,00b4c0dfah
- DD 0de7e5c19h,0779b8552h,0c1c0256ch,0fab28609h,0abd4743dh,064f58eeeh,07b6cc93bh,04e8ef838h,04cb1bf3dh,0ee650d26h,073dedf61h,04c1f9d09h,0bfb70cedh,0aef7c9d7h,01641de1eh,01ec0507eh
- DD 0cde45079h,0cd7e5cc7h,0516ac9e4h,0de173c9ah,0c170315ch,0517a8494h,091d8e8fbh,0438fd905h,0c7d9630bh,05145c506h,0f47d4d75h,06457a87bh,00d9a80e8h,0d31646bfh,0cef3aabeh,0453add2bh
- DD 0a607419dh,0c9941109h,0bb6bca80h,0faa71e62h,007c431f3h,034158c13h,0992bc47ah,0594abebch,0eb78399fh,06dfea691h,03f42cba4h,048aafb35h,0077c04f0h,0edcd65afh,0e884491ah,01a29a366h
- DD 01c21f2bfh,0023a40e5h,0a5057aeeh,0f99a513ch,0bcab072eh,0a3fe7e25h,040e32bcfh,08568d2e1h,0d3f69d9fh,0904594ebh,007affab1h,0181a9733h,0b6e330f4h,0e4d68d76h,0c75a7fc1h,087a6dafbh
- DD 0ef7d9289h,0549db2b5h,0197f015ah,02480d4a8h,0c40493b6h,061d5590bh,06f780331h,03a55b52eh,0309eadb0h,040eb8115h,092e5c625h,0dea7de5ah,0cc6a3d5ah,064d631f0h,093e8dd61h,09d5e9d7ch
- DD 0206d3ffch,0f297bef5h,07d808bd4h,023d5e033h,0d24cf5bah,04a4f6912h,009cdaa8ah,0e4d8163bh,0d3082e8eh,00e0de9efh,00192f360h,04fe1246ch,04b8eee0ah,01f900150h,0f1da391bh,05219da81h
- DD 0f7ea25aah,07bf6a5c1h,0fbb07d5fh,0d165e6bfh,089e78671h,0e3539361h,02bac4219h,0a3fcac89h,0f0baa8abh,0dfab6fd4h,0e2c1c2e5h,05a4adac1h,040d85849h,06cd75e31h,019b39181h,0ce263feah
- DD 007032c72h,0cb6803d3h,0790968c8h,07f40d5ceh,0dce978f0h,0a6de86bdh,0368f751ch,025547c4fh,065fb2a9eh,0b1e685fdh,01eb9179ch,0ce69336fh,012504442h,0b15d1c27h,0b911a06bh,0b7df465ch
- DD 0315980cdh,0b8d804a3h,0fa3bebf7h,0693bc492h,02253c504h,03578aeeeh,0cd2474a2h,0158de498h,0cfda8368h,01331f5c7h,078d7177eh,0d2d7bbb3h,0f3c1e46eh,0df61133ah,0d30e7be8h,05836ce7dh
- DD 094f834cbh,083084f19h,0429ed782h,0d35653d4h,059e58243h,0a542f16fh,00470a22dh,0c2b52f65h,018f23d96h,0e3b6221bh,03f5252b4h,0cb05abach,087d61402h,0ca00938bh,0411933e4h,02f186cddh
- DD 09a29a5c5h,0e042ece5h,03b6c8402h,0b19b3c07h,019d92684h,0c97667c7h,0ebc66372h,0b5624622h,03c04fa02h,00cb96e65h,08eaa39aah,083a7176ch,0eaa1633fh,02033561dh,04533df73h,045a9d086h
- DD 03dc090bch,0e0542c1dh,0aa59c167h,082c996efh,00ee7fc4dh,0e3f735e8h,07c35db79h,07b179393h,0f8c5dbfdh,0b6419e25h,01f327b04h,04d9d7a1eh,0298dfca8h,0979f6f9bh,08de9366ah,0c7c5dff1h
- DD 004c82bddh,01b7a588dh,0f8319dfdh,068005534h,0d8eb9580h,0de8a55b5h,08d5bca81h,05ea886dah,0252a0b4dh,0e8530a01h,035eaa0a1h,01bffb4feh,0d8e99563h,02ad828b1h,095f9cd87h,07de96ef5h
- DD 0d77d970ch,04abb2d0ch,0d33ef9cbh,003cfb933h,08b211fe9h,0b0547c01h,0a56ed1c6h,02fe64809h,0c2ac98cch,0cb7d5624h,01a393e33h,02a1372c0h,029660521h,0c8d1ec1ch,0b37ac3e9h,0f3d31b04h
- DD 05ece6e7ch,0a29ae9dfh,00facfb55h,00603ac8fh,0dda233a5h,0cfe85b7ah,0bd75f0b8h,0e618919fh,099bf1603h,0f555a3d2h,0f184255ah,01f43afc9h,0319a3e02h,0dcdaf341h,003903a39h,0d3b117efh
- DD 065d1d131h,0e095da13h,0c37ad03eh,086f16367h,0462cd8ddh,05f37389eh,0d67a60e6h,0c103fa04h,0f4b478f0h,057c34344h,0e117c98dh,0ce91edd8h,0231fc12eh,0001777b0h,0b207bccbh,011ae47f2h
- DD 020f8a242h,0d983cf8dh,0f22e1ad8h,07aff5b1dh,07fc4feb3h,068fd11d0h,0b0f1c3e1h,05d53ae90h,0ec041803h,050fb7905h,014404888h,085e3c977h,0ac628d8fh,00e67faedh,06668532ch,02e865150h
- DD 06a67a6b0h,015acaaa4h,0b25cec41h,0f4cdee25h,0e4c6701eh,049ee565ah,0fc7d63d8h,02a04ca66h,0ef0543fbh,0eb105018h,0d1b0d81dh,0f709a4f5h,02915d333h,05b906ee6h,096f1f0abh,0f4a87412h
- DD 04d82f4c2h,0b6b82fa7h,06804efb3h,090725a60h,0adc3425eh,0bc82ec46h,02787843eh,0b7b80581h,0dd1fc74ch,0df46d91ch,0e783a6c4h,0dc1c62cbh,01a04cbbah,059d1b9f3h,095e40764h,0d87f6f72h
- DD 0317f4a76h,002b4cfc1h,091036bceh,08d2703ebh,0a5e72a56h,098206cc6h,0cf53fb0fh,057be9ed1h,0ef0b17ach,009374571h,0d9181b38h,074b2655eh,089935d0eh,0c8f80ea8h,091529936h,0c0d9e942h
- DD 01e84e0e5h,019686041h,0aea34c93h,0a5db84d3h,07073a732h,0f9d5bb19h,06bcfd7c0h,0b8d2fe56h,0f3eb82fah,045775f36h,0fdff8b58h,08cb20ccch,08374c110h,01659b65fh,0330c789ah,0b8b4a422h
- DD 06fe8208bh,075e3c3eah,0286e78feh,0bd74b9e4h,0d7d93a1ah,00be2e81bh,0dd0a5aaeh,07ed06e27h,06be8b800h,0721f5a58h,0d846db28h,0428299d1h,05be88ed3h,095cb8e6bh,01c034e11h,0c3186b23h
- DD 08977d99bh,0a6312c9eh,083f531e7h,0be944331h,018d3b1d4h,08232c0c2h,0e1247b73h,0617aae8bh,0282aec3bh,040153fc4h,0f7b8f823h,0c6063d2fh,03304f94ch,068f10e58h,0ee676346h,031efae74h
- DD 040a9b97ch,0badb6c6dh,04f666256h,014702c63h,05184b2e3h,0deb954f1h,094b6ca40h,05184a526h,0003c32eah,0fff05337h,0205974c7h,05aa374ddh,04b0dd71ah,09a763854h,0deb947ech,0459cd27fh
- DD 0459c2b92h,0a6e28161h,075ee8ef5h,02f020fa8h,030b06310h,0b132ec2dh,0bc6a4530h,0c3e15899h,0aa3f451ah,0dc5f53feh,0c2d9acach,03a3c7f23h,06b27e58bh,02ec2f892h,0d742799fh,068466ee7h
- DD 01fa26613h,098324dd4h,0bdc29d63h,0a2dc6dabh,0d712d657h,0f9675faah,021fd8d15h,0813994beh,0fd4f7553h,05ccbb722h,0f3a36b20h,05135ff8bh,069559df5h,044be28afh,09d41bf30h,040b65bedh
- DD 03734e520h,0d98bf2a4h,0209bdcbah,05e3abbe3h,0bc945b35h,077c76553h,0c6ef14aah,05331c093h,076b60c80h,0518ffe29h,07ace16f8h,02285593bh,0be2b9784h,0ab1f64cch,0ab2421b6h,0e8f2c0d9h
- DD 0c1df065ch,0617d7174h,05f6578fah,0afeeb5abh,0263b54a8h,016ff1329h,0c990dce3h,045c55808h,0ecc8c177h,042eab6c0h,05982ecaah,0799ea9b5h,0b607ef8eh,0f65da244h,032a3fc2ch,08ab226ceh
- DD 07ea973dch,0745741e5h,020888f2eh,05c00ca70h,045fd9cf1h,07cdce3cfh,05507f872h,08a741ef1h,0196b4cech,047c51c2fh,0c97ea618h,070d08e43h,015b18a2bh,0930da15ch,02f610514h,033b6c678h
- DD 007ac9794h,0c662e4f8h,0ba06cb79h,01eccf050h,0e7d954e5h,01ff08623h,024cf71c3h,06ef2c5fbh,067978453h,0b2c063d2h,01d654af8h,0a0cf3796h,07ebdaa37h,07cb242eah,0b86747e0h,0206e0b10h
- DD 0d5ecfefch,0481dae5fh,0c2bff8fch,007084fd8h,0ea324596h,08040a01ah,0d4de4036h,04c646980h,0d65abfc3h,09eb8ab4eh,013541ec7h,0e01cb91fh,0fd695012h,08f029adbh,03c7569ech,09ae28483h
- DD 0a66d80a1h,0a5614c9eh,075f5f911h,0680a3e44h,0ceba4fc1h,00c07b14dh,0a13071c1h,0891c285bh,0799ece3ch,0cac67cebh,041e07e27h,029b910a9h,0f2e43123h,066bdb409h,07ac9ecbeh,006f8b137h
- DD 038547090h,05981fafdh,085e3415dh,019ab8b9fh,0c7e31b27h,0fc28c194h,06fbcbb42h,0843be0aah,0a6db836ch,0f3b1ed43h,001a45c05h,02a1330e4h,095c1a377h,04f19f3c5h,044b5ee33h,0a85f39d0h
- DD 04ae52834h,03da18e6dh,07423dcb0h,05a403b39h,0f2374aefh,0bb555e0ah,01e8ca111h,02ad599c4h,0014b3bf8h,01b3a2fb9h,0f66d5007h,073092684h,0c4340102h,0079f1426h,08fddf4deh,01827cf81h
- DD 0f10ff927h,0c83605f6h,023739fc6h,0d3871451h,0cac1c2cch,06d163450h,0a2ec1ac5h,06b521296h,06e3cb4a5h,00606c4f9h,0778abff7h,0e47d3f41h,0be8e3a45h,0425a8d5eh,0a6102160h,053ea9e97h
- DD 039cbb688h,0477a106eh,0f3386d32h,0532401d2h,0b1b9b421h,08e564f64h,081dad33fh,0ca9b8388h,02093913eh,0b1422b4eh,069bc8112h,0533d2f92h,0ebe7b2c7h,03fa017beh,0caf197c6h,0b2767c4ah
- DD 0aedbae9fh,0c925ff87h,036880a54h,07daf0eb9h,09c4d0e71h,09284ddf5h,0316f8cf5h,01581cf93h,03ac1f452h,03eeca887h,0fb6aeffeh,0b417fce9h,0eefb8dc3h,0a5918046h,002209400h,073d318ach
- DD 0728693e5h,0e800400fh,0339927edh,0e87d814bh,057ea9910h,093e94d3bh,02245fb69h,0ff8a35b6h,07f200d34h,0043853d7h,00f653ce1h,0470f1e68h,059a06379h,081ac05bdh,003930c29h,0a14052c2h
- DD 026bc2797h,06b72fab5h,099f16771h,013670d16h,01e3e48d1h,000170052h,0b7adf678h,0978fe401h,0d41c5dd4h,055ecfb92h,0c7b27da5h,05ff8e247h,0013fb606h,0e7518272h,02f547a3ch,05768d7e5h
- DD 060017a5fh,0bb24eaa3h,09c64ce9bh,06b18e6e4h,0103dde07h,0c225c655h,07592f7eah,0fc3672aeh,0d06283a1h,09606ad77h,0e4d59d99h,0542fc650h,02a40e7c2h,0abb57c49h,0a8db9f55h,0ac948f13h
- DD 0b04465c3h,06d4c9682h,06468bd15h,0e3d062fah,05f318d7eh,0a51729ach,09eb6fc95h,01fc87df6h,00591f652h,063d146a8h,0589621aah,0a861b8f7h,0ce31348ch,059f5f15ah,0440da6dah,08f663391h
- DD 0b591ffa3h,0cfa778ach,04cdfebceh,0027ca9c5h,0444ea6b3h,0be8e05a5h,0a78d8254h,08aab4e69h,0b474d6b8h,02437f04fh,0045b3855h,06597ffd4h,0ca47ecaah,0bb0aea4eh,085c7ebfch,0568aae83h
- DD 0c73b2383h,00e966e64h,0d17d8762h,049eb3447h,08da05dabh,0de107821h,0016b7236h,0443d8baah,0ea7610d6h,0163b63a5h,0ce1ca979h,0e47e4185h,080baa132h,0ae648b65h,00e0d5b64h,0ebf53de2h
- DD 0d3c8c1cah,08d3bfcb4h,05d04b309h,00d914ef3h,03de7d395h,055ef6415h,026b850e8h,0bde1666fh,0d449ab19h,0dbe1ca6eh,0e89a2672h,08902b322h,0dacb7a53h,0b1674b7eh,0f52523ffh,08e9faf6eh
- DD 09a85788bh,06ba535dah,0bd0626d4h,0d21f03aeh,0e873dc64h,0099f8c47h,0018ec97eh,0cda8564dh,0de92c68ch,03e8d7a5ch,073323cc4h,078e035a1h,0f880ff7ch,03ef26275h,0273eedaah,0a4ee3dffh
- DD 0af4e18f8h,058823507h,00672f328h,0967ec9b5h,0559d3186h,09ded19d9h,06cdce39ch,05e2ab3deh,011c226dfh,0abad6e4dh,087723014h,0f9783f43h,01a885719h,09a49a0cfh,090da9dbfh,0fc0c1a5ah
- DD 0571d92ach,08bbaec49h,04692517fh,0569e85feh,0a14ea4afh,08333b014h,012e5c5adh,032f2a62fh,006d89b85h,098c2ce3ah,02ff77a08h,0b90741aah,001f795a2h,02530defch,084b3c199h,0d6e5ba0bh
- DD 012e4c936h,07d8e8451h,0bd0be17bh,0ae419f7dh,022262bc9h,0a583fc8ch,091bfe2bdh,06b842ac7h,0440d6827h,033cef4e9h,0ef81fb14h,05f69f4deh,0234fbb92h,0f16cf6f6h,0d9e7e158h,076ae3fc3h
- DD 0e9740b33h,04e89f6c2h,04962d6a1h,0677bc85dh,068d10d15h,06c6d8a7fh,00257b1cdh,05f9a7224h,04ad85961h,07096b916h,0e657ab4ah,05f8c47f7h,0f7461d7eh,0de57d7d0h,080ce5ee2h,07eb6094dh
- DD 034190547h,00b1e1dfdh,0f05dd150h,08a394f43h,097df44e6h,00a9eb24dh,087675719h,078ca06bfh,06ffeec22h,06f0b3462h,036cdd8fbh,09d91bceah,0a105be47h,0ac83363ch,0069710e3h,081ba76c1h
- DD 028c682c6h,03d1b24cbh,08612575bh,027f25228h,0e8e66e98h,0b587c779h,0405eb1feh,07b0c03e9h,015b548e7h,0fdf0d030h,038b36af7h,0a8be76e0h,04f310c40h,04cdab04ah,0f47ecaech,06287223eh
- DD 08b399320h,0678e6055h,0c01e4646h,061fe3fa6h,003261a5eh,0c482866bh,05c2f244ah,0dfcf45b8h,02f684b43h,08fab9a51h,0c7220a66h,0f796c654h,0f5afa58fh,01d90707eh,04fdbe0deh,02c421d97h
- DD 0af2ebc2fh,0c4f4cda3h,0cb4efe24h,0a0af843dh,09ccd10b1h,053b857c1h,0914d3e04h,0ddc9d1ebh,062771debh,07bdec8bbh,091c5aa81h,0829277aah,0832391aeh,07af18dd6h,0c71a84cah,01740f316h
- DD 0eeaf8c49h,08928e99ah,06e24d728h,0ee7aa73dh,0e72b156ch,04c5007c2h,0ed408a1dh,05fcf57c5h,0b6057604h,09f719e39h,0c2868bbfh,07d343c01h,07e103e2dh,02cca254bh,0f131bea2h,0e6eb38a9h
- DD 08be762b4h,0b33e624fh,0058e3413h,02a9ee4d1h,067d805fah,0968e6369h,07db8bfd7h,09848949bh,0d23a8417h,05308d7e5h,0f3e29da5h,0892f3b1dh,03dee471fh,0c95c139eh,0d757e089h,08631594dh
- DD 0de918dcch,0e0c82a3ch,026fdcf4bh,02e7b5994h,032cb1b2dh,082c50249h,07657ae07h,0ea613a9dh,0f1fdc9f7h,0c2eb5f6ch,0879fe682h,0b6eae8b8h,0591cbc7fh,0253dfee0h,03e1290e6h,0000da713h
- DD 01f095615h,01083e2eah,014e68c33h,00a28ad77h,03d8818beh,06bfc0252h,0f35850cdh,0b585113ah,030df8aa1h,07d935f0bh,04ab7e3ach,0addda07ch,0552f00cbh,092c34299h,02909df6ch,0c33ed1deh
- DD 080e87766h,022c2195dh,09ddf4ac0h,09e99e6d8h,065e74934h,009642e4eh,0ff1ff241h,02610ffa2h,0751c8159h,04d1d47d4h,0af3a9363h,0697b4985h,087477c33h,00318ca46h,09441eff3h,0a90cb565h
- DD 036f024cbh,058bb3848h,036016168h,085be1f77h,0dc7e07f1h,06c59587ch,0af1d8f02h,0191be071h,0cca5e55ch,0bf169fa5h,0f7d04each,03864ba3ch,08d7d05dbh,0915e367fh,0a6549e5dh,0b48a876dh
- DD 0580e40a2h,0ef89c656h,0728068bch,0f194ed8ch,0a47990c9h,074528045h,05e1a4649h,0f53fc7d7h,078593e7dh,0bec5ae9bh,041db65d7h,02cac4ee3h,004a3d39bh,0a8c1eb24h,003f8f3efh,053b7d634h
- DD 03e07113ch,02dc40d48h,07d8b63aeh,06e4a5d39h,079684c2bh,05582a94bh,0622da26ch,0932b33d4h,00dbbf08dh,0f534f651h,064c23a52h,0211d07c9h,0ee5bdc9bh,00eeece0fh,0f7015558h,0df178168h
- DD 00a712229h,0d4294635h,009273f8ch,093cbe448h,08f13bc83h,000b095efh,08798978ch,0bb741972h,056dbe6e7h,09d7309a2h,05a5d39ech,0e578ec56h,0851f9a31h,03961151bh,0e5709eb4h,02da7715dh
- DD 053dfabf0h,0867f3017h,0b8e39259h,0728d2078h,0815d9958h,05c75a0cdh,016603be1h,0f84867a6h,070e35b1ch,0c865b13dh,019b03e2ch,002414468h,0ac1f3121h,0e46041dah,06f028a7ch,07c9017adh
- DD 00a482873h,0abc96de9h,0b77e54d4h,04265d6b1h,0a57d88e7h,068c38e79h,09ce82de3h,0d461d766h,064a7e489h,0817a9ec5h,0a0def5f2h,0cc5675cdh,0985d494eh,09a00e785h,01b03514ah,0c626833fh
- DD 083cdd60eh,0abe7905ah,0a1170184h,050602fb5h,0b023642ah,0689886cdh,0a6e1fb00h,0d568d090h,00259217fh,05b1922c7h,0c43141e4h,093831cd9h,00c95f86eh,0dfca3587h,0568ae828h,0dec2057ah
- DD 0f98a759ah,0c44ea599h,0f7c23c1dh,055a0a7a2h,094c4f687h,0d5ffb6e6h,012848478h,03563cce2h,0e7b1fbe1h,0812b3517h,04f7338e0h,08a7dc979h,052d048dbh,0211ecee9h,0c86ea3b8h,02eea4056h
- DD 0ba772b34h,0d8cb68a7h,05f4e2541h,0e16ed341h,00fec14dbh,09b32f6a6h,0391698beh,0eee376f7h,083674c02h,0e9a7aa17h,05843022ah,065832f97h,05ba4990fh,029f3a8dah,0fb8e3216h,079a59c3ah
- DD 0bd19bb16h,09cdc4d2eh,0b3262d86h,0c6c7cfd0h,0969c0b47h,0d4ce14d0h,013e56128h,01fa352b7h,0973db6d3h,0383d55b8h,0e8e5b7bfh,071836850h,0e6bb571fh,0c7714596h,02d5b2dd2h,0259df31fh
- DD 0913cc16dh,0568f8925h,0e1a26f5ah,018bc5b6dh,0f5f499aeh,0dfa413beh,0c3f0ae84h,0f8835dech,065a40ab0h,0b6e60bd8h,0194b377eh,065596439h,092084a69h,0bcd85625h,04f23ede0h,05ce433b9h
- DD 06ad65143h,0e8e8f04fh,0d6e14af6h,011511827h,08295c0c7h,03d390a10h,0621eba16h,071e29ee4h,063717b46h,0a588fc09h,0e06ad4a2h,002be02feh,004c22b22h,0931558c6h,012f3c849h,0bb4d4bd6h
- DD 020efd662h,054a4f496h,0c5952d14h,092ba6d20h,0cc9784c2h,02db8ea1eh,04b353644h,081cc10cah,04b4d7f6ch,040b570adh,084a1dcd2h,05c9f1d96h,03147e797h,001379f81h,02bd499f5h,0e5c6097bh
- DD 0328e5e20h,040dcafa6h,054815550h,0f7b5244ah,047bfc978h,0b9a4f118h,0d25825b1h,00ea0e79fh,0646c7ecfh,0a50f96ebh,0446dea9dh,0eb811493h,0dfabcf69h,02af04677h,0c713f6e8h,0be3a068fh
- DD 042e06189h,0860d523dh,04e3aff13h,0bf077941h,0c1b20650h,00b616dcah,02131300dh,0e66dd6d1h,0ff99abdeh,0d4a0fd67h,0c7aac50dh,0c9903550h,07c46b2d7h,0022ecf8bh,03abf92afh,03333b1e8h
- DD 06c491c14h,011cc113ch,080dd3f88h,005976688h,029d932edh,0f5b4d9e7h,0a2c38b6dh,0e982aad8h,08be0dcf0h,06f925347h,065ca53f2h,0700080aeh,0443ca77fh,0d8131156h,0ec51f984h,0e92d6942h
- DD 085dfe9aeh,0d2a08af8h,04d2a86cah,0d825d9a5h,039dff020h,02c53988dh,0430cdc40h,0f38b135ah,062a7150bh,00c918ae0h,00c340e9bh,0f31fd8deh,04dbbf02eh,0afa0e7aeh,05eba6239h,05847fb2ah
- DD 0dccbac8bh,06b1647dch,006f485c8h,0b642aa78h,07038ecdfh,0873f3765h,0fa49d3feh,02ce5e865h,0c98c4400h,0ea223788h,0f1fa5279h,08104a8cdh,006becfd7h,0bcf7cc7ah,0c8f974aeh,049424316h
- DD 084d6365dh,0c0da65e7h,08f759fb8h,0bcb7443fh,07ae81930h,035c712b1h,04c6e08abh,080428dffh,0a4faf843h,0f19dafefh,0ffa9855fh,0ced8538dh,0be3ac7ceh,020ac409ch,0882da71eh,0358c1fb6h
- DD 0fd349961h,0afa9c0e5h,08421c2fch,02b2cfa51h,0f3a28d38h,02a80db17h,05d138e7eh,0a8aba539h,06e96eb8dh,052012d1dh,0cbaf9622h,065d8dea0h,0b264f56ch,057735447h,01b6c8da2h,0beebef3fh
- DD 0ce785254h,0fc346d98h,0bb64a161h,0d50e8d72h,049794addh,0c03567c7h,0752c7ef6h,015a76065h,0961f23d6h,059f3a222h,073ecc0b0h,0378e4438h,05a82fde4h,0c74be434h,0d8b9cf34h,0ae509af2h
- DD 0577f44a1h,04a61ee46h,0b611deebh,0e09b748ch,0f5f7b884h,0c0481b2ch,061acfa6bh,035626678h,0bf8d21e6h,037f4c518h,0b205a76dh,022d96531h,0954073c0h,037fb85e1h,065b3a567h,0bceafe4fh
- DD 0be42a582h,0efecdef7h,065046be6h,0d3fc6080h,009e8dba9h,0c9af13c8h,0641491ffh,01e6c9847h,0d30c31f7h,03b574925h,0ac2a2122h,0b7eb72bah,0ef0859e7h,0776a0dach,021900942h,006fec314h
- DD 0f8c22049h,02464bc10h,0875ebf69h,09bfbcce7h,04336326bh,0d7a88e2ah,05bc2acfah,0da05261ch,0eba7efc8h,0c29f5bdch,025dbbf2eh,0471237cah,02975f127h,0a72773f2h,004d0b326h,0dc744e8eh
- DD 0a56edb73h,038a7ed16h,02c007e70h,064357e37h,05080b400h,0a167d15bh,023de4be1h,007b41164h,074c89883h,0b2d91e32h,02882e7edh,03c162821h,07503e482h,0ad6b36bah,00ea34331h,048434e8eh
- DD 02c7ae0b9h,079f4f24fh,01939b44ah,0c46fbf81h,056595eb1h,076fefae8h,0cd5f29c7h,0417b66abh,0c5ceec20h,05f2332b2h,0e1a1cae2h,0d69661ffh,09b0286e6h,05ede7e52h,0e276b993h,09d062529h
- DD 07e50122bh,0324794b0h,04af07ca5h,0dd744f8bh,0d63fc97bh,030a12f08h,076626d9dh,039650f1ah,01fa38477h,0101b47f7h,0d4dc124fh,03d815f19h,0b26eb58ah,01569ae95h,095fb1887h,0c3cde188h
- DD 0f9539a48h,054e9f37bh,07408c1a5h,0b0100e06h,0ea580cbbh,0821d9811h,086e50c56h,08af52d35h,0dbbf698bh,0dfbd9d47h,003dc1c73h,02961a1eah,0e76a5df8h,0203d38f8h,06def707ah,008a53a68h
- DD 01bee45d4h,026eefb48h,03c688036h,0b3cee346h,0c42f2469h,0463c5315h,081378162h,019d84d2eh,01c4d349fh,022d7c3c5h,0163d59c5h,065965844h,0b8abceaeh,0cf198c56h,0628559d5h,06fb1fb1bh
- DD 007bf8fe3h,08bbffd06h,03467734bh,046259c58h,035f7f0d3h,0d8953ceah,0d65b0ff1h,01f0bece2h,0f3c72914h,0f7d5b4b3h,03cb53389h,029e8ea95h,0836b6d46h,04a365626h,0ea174fdeh,0e849f910h
- DD 0f4737f21h,07ec62fbbh,06209f5ach,0d8dba5abh,0a5f9adbeh,024b5d7a9h,0a61dc768h,0707d28f7h,0caa999eah,07711460bh,01c92e4cch,0ba7b174dh,018d4bf2dh,03c4bab66h,0eb8bd279h,0b8f0c980h
- DD 0324b4737h,0024bea9ah,032a83bcah,0fba9e423h,0a232dcedh,06e635643h,02571c8bah,099619367h,054b7032bh,0e8c9f357h,02442d54ah,0f936b3bah,08290c65ah,02263f0f0h,0ee2c7fdbh,048989780h
- DD 013d4f95eh,0adc5d55ah,0ad9b8500h,0737cff85h,08a73f43dh,0271c557bh,0e18bc476h,0bed617a4h,07dfd8ab2h,066245401h,03a2870aah,0ae7b89aeh,023a7e545h,01b555f53h,0be057e4ch,06791e247h
- DD 0324fa34dh,0860136adh,04cbeae28h,0ea111447h,0bedd3299h,0023a4270h,0c1c35c34h,03d5c3a7fh,08d0412d2h,0b0f6db67h,0fcdc6b9ah,0d92625e2h,04e28a982h,092ae5ccch,047a3ce7eh,0ea251c36h
- DD 0790691bfh,09d658932h,006b736aeh,0ed610589h,0c0d63b6eh,0712c2f04h,0c63d488fh,05cf06fd5h,0d9588e41h,097363fach,02b93257eh,01f9bf762h,0667acaceh,0a9d1ffc4h,00a061ecfh,01cf4a1aah
- DD 0dc1818d0h,040e48a49h,0a3621ab0h,00643ff39h,0e39ef639h,05768640ch,004d86854h,01fc099eah,0eccd28fdh,09130b9c3h,07eec54abh,0d743cbd2h,0e5b475b6h,0052b146fh,0900a7d1fh,0058d9a82h
- DD 091262b72h,065e02292h,0bb0edf03h,096f924f9h,0fe206842h,05cfa59c8h,05eafa720h,0f6037004h,018d7dd96h,05f30699eh,0cbab2495h,0381e8782h,0dd8be949h,091669b46h,026aae8efh,0b40606f5h
- DD 0fc6751a4h,02812b839h,0fba800efh,016196214h,04c1a2875h,04398d5cah,0653d8349h,0720c00eeh,0d820007ch,0c2699eb0h,0a39b5825h,0880ee660h,0471f6984h,070694694h,0e3dda99ah,0f7d16ea8h
- DD 0c0519a23h,028d675b2h,04f6952e3h,09ebf94feh,0a2294a8ah,0f28bb767h,0fe0af3f5h,085512b4dh,099b16a0dh,018958ba8h,0ba7548a7h,095c2430ch,0a16be615h,0b30d1b10h,085bfb74ch,0e3ebbb97h
- DD 018549fdbh,0a3273cfeh,04fcdb792h,0f6e200bfh,083aba56ch,054a76e18h,089ef6aa2h,073ec66f6h,0d1b9a305h,08d17add7h,0b7ae1b9dh,0a959c5b9h,06bcc094ah,088643522h,0d7d429b9h,0cc5616c4h
- DD 0e6a33f7ch,0a6dada01h,09d4e70adh,0c6217a07h,009c15b7ch,0d619a818h,00e80c854h,0ea06b329h,0a5f5e7b9h,0174811ceh,0787c65f4h,066dfc310h,03316ab54h,04ea7bd69h,01dcc0f70h,0c12c4acbh
- DD 01e407dd9h,0e4308d1ah,091afa997h,0e8a3587ch,0ab77b7a5h,0ea296c12h,0673c0d52h,0b5ad49e4h,07006085ah,040f9b2b2h,087bf6ec2h,0a88ff340h,04e3066a6h,0978603b1h,0b5e486e2h,0b3f99fc2h
- DD 0b2e63645h,007b53f5eh,084c84232h,0be57e547h,07214d5cfh,0d779c216h,0029a3acah,0617969cdh,08a7017a0h,0d17668cdh,0be9b7ee8h,077b4d19ah,09c161776h,058fd0e93h,0d5968a72h,0a8c4f4efh
- DD 067b3de77h,0296071cch,0634f7905h,0ae3c0b8eh,08a7100c9h,067e440c2h,0eb4b9b42h,0bb8c3c1bh,0c51b3583h,06d71e8eah,09525e642h,07591f5afh,013f509f3h,0f73a2f7bh,05619ac9bh,0618487aah
- DD 09d61718ah,03a72e5f7h,07592d28ch,000413bcch,0963c35cfh,07d9b11d3h,0b90a46edh,077623bcfh,0dcdd2a50h,0deef273bh,00601846eh,04a741f9bh,00ec6e929h,033b89e51h,08b7f22cdh,0cb02319fh
- DD 0084bae24h,0bbe1500dh,0343d2693h,02f0ae8d7h,07cdef811h,0acffb5f2h,0263fb94fh,0aa0c030ah,0a0f442deh,06eef0d61h,027b139d3h,0f92e1817h,00ad8bc28h,01ae6deb7h,0c0514130h,0a89e38dch
- DD 0d2fdca23h,081eeb865h,0cc8ef895h,05a15ee08h,001905614h,0768fa10ah,0880ee19bh,0eff5b8efh,0cb1c8a0eh,0f0c0cabbh,0b8c838f9h,02e1ee9cdh,08a4a14c0h,00587d8b8h,02ff698e5h,0f6f27896h
- DD 089ee6256h,0ed38ef1ch,06b353b45h,0f44ee1feh,070e903b3h,09115c0c7h,0818f31dfh,0c78ec0a1h,0b7dccbc6h,06c003324h,0163bbc25h,0d96dd1f3h,05cedd805h,033aa82ddh,07f7eb2f1h,0123aae4fh
- DD 0a26262cdh,01723fcf5h,00060ebd5h,01f7f4d5dh,0b2eaa3afh,0f19c5c01h,09790accfh,02ccb9b14h,052324aa6h,01f9c1cadh,07247df54h,063200526h,0bac96f82h,05732fe42h,001a1c384h,052fe771fh
- DD 0b1001684h,0546ca13dh,0a1709f75h,0b56b4eeeh,0d5db8672h,0266545a9h,01e8f3cfbh,0ed971c90h,0e3a07b29h,04e7d8691h,0e4b696b9h,07570d9ech,07bc7e9aeh,0dc5fa067h,0c82c4844h,068b44cafh
- DD 0bf44da80h,0519d34b3h,05ab32e66h,0283834f9h,06278a000h,06e608797h,0627312f6h,01e62960eh,0e6901c55h,09b87b27bh,024fdbc1fh,080e78538h,02facc27dh,0bbbc0951h,0ac143b5ah,006394239h
- DD 0376c1944h,035bb4a40h,063da1511h,07cb62694h,0b7148a3bh,0afd29161h,04e2ea2eeh,0a6f9d9edh,0880dd212h,015dc2ca2h,0a61139a9h,0903c3813h,06c0f8785h,02aa7b46dh,0901c60ffh,036ce2871h
- DD 0e10d9c12h,0c683b028h,0032f33d3h,07573baa2h,067a31b58h,087a9b1f6h,0f4ffae12h,0fd3ed11ah,00cb2748eh,083dcaa9ah,05d6fdf16h,08239f018h,072753941h,0ba67b49ch,0c321cb36h,02beec455h
- DD 03f8b84ceh,088015606h,08d38c86fh,076417083h,0598953ddh,0054f1ca7h,04e8e7429h,0c939e110h,05a914f2fh,09b1ac2b3h,0e74b8f9ch,039e35ed3h,0781b2fb0h,0d0debdb2h,02d997ba2h,01585638fh
- DD 09e2fce99h,09c4b646eh,01e80857fh,068a21081h,03643b52ah,006d54e44h,00d8eb843h,0de8d6d63h,042146a0ah,070321563h,05eaa3622h,08ba826f2h,086138787h,0227a58bdh,010281d37h,043b6c03ch
- DD 0b54dde39h,06326afbbh,0db6f2d5fh,0744e5e8ah,0cff158e1h,048b2a99ah,0ef87918fh,0a93c8fa0h,0de058c5ch,02182f956h,0936f9e7ah,0216235d2h,0d2e31e67h,0ace0c0dbh,0f23ac3e7h,0c96449bfh
- DD 0170693bdh,07e9a2874h,0a45e6335h,0a28e14fdh,056427344h,05757f6b3h,0acf8edf9h,0822e4556h,0e6a285cdh,02b7a6ee2h,0a9df3af0h,05866f211h,0f845b844h,040dde2ddh,0110e5e49h,0986c3726h
- DD 0f7172277h,073680c2ah,00cccb244h,057b94f0fh,02d438ca7h,0bdff7267h,0cf4663fdh,0bad1ce11h,0d8f71caeh,09813ed9dh,0961fdaa6h,0f43272a6h,0bd6d1637h,0beff0119h,030361978h,0febc4f91h
- DD 02f41deffh,002b37a95h,0e63b89b7h,00e44a59ah,0143ff951h,0673257dch,0d752baf4h,019c02205h,0c4b7d692h,046c23069h,0fd1502ach,02e6392c3h,01b220846h,06057b1a2h,00c1b5b63h,0e51ff946h
- DD 0566c5c43h,06e85cb51h,03597f046h,0cff9c919h,04994d94ah,09354e90ch,02147927dh,0e0a39332h,00dc1eb2bh,08427fac1h,02ff319fah,088cfd8c2h,001965274h,0e2d4e684h,067aaa746h,0fa2e067dh
- DD 03e5f9f11h,0b6d92a7fh,0d6cb3b8eh,09afe153ah,0ddf800bdh,04d1a6dd7h,0caf17e19h,0f6c13cc0h,0325fc3eeh,015f6c58eh,0a31dc3b2h,071095400h,0afa3d3e7h,0168e7c07h,094c7ae2dh,03f8417a1h
- DD 0813b230dh,0ec234772h,017344427h,0634d0f5fh,0d77fc56ah,011548ab1h,0ce06af77h,07fab1750h,04f7c4f83h,0b62c10a7h,0220a67d9h,0a7d2edc4h,0921209a0h,01c404170h,0face59f0h,00b9815a0h
- DD 0319540c3h,02842589bh,0a283d6f8h,018490f59h,0daae9fcbh,0a2731f84h,0c3683ba0h,03db6d960h,014611069h,0c85c63bbh,00788bf05h,0b19436afh,0347460d2h,0905459dfh,0e11a7db1h,073f6e094h
- DD 0b6357f37h,0dc7f938eh,02bd8aa62h,0c5d00f79h,02ca979fch,0c878dcb9h,0eb023a99h,037e83ed9h,01560bf3dh,06b23e273h,01d0fae61h,01086e459h,09a9414bdh,078248316h,0f0ea9ea1h,01b956bc0h
- DD 0c31b9c38h,07b85bb91h,048ef57b5h,00c5aa90bh,0af3bab6fh,0dedeb169h,02d373685h,0e610ad73h,002ba8e15h,0f13870dfh,08ca7f771h,00337edb6h,0b62c036ch,0e4acf747h,0b6b94e81h,0d921d576h
- DD 02c422f7ah,0dbc86439h,0ed348898h,0fb635362h,0c45bfcd1h,083084668h,02b315e11h,0c357c9e3h,05b2e5b8ch,0b173b540h,0e102b9a4h,07e946931h,07b0fb199h,017c890ebh,0d61b662bh,0ec225a83h
- DD 0ee3c76cbh,0f306a3c8h,0d32a1f6eh,03cf11623h,06863e956h,0e6d5ab64h,05c005c26h,03b8a4cbeh,09ce6bb27h,0dcd529a5h,004d4b16fh,0c4afaa52h,07923798dh,0b0624a26h,06b307fabh,085e56df6h
- DD 02bf29698h,00281893ch,0d7ce7603h,091fc19a4h,0ad9a558fh,075a5dca3h,04d50bf77h,040ceb3fah,0bc9ba369h,01baf6060h,0597888c2h,0927e1037h,086a34c07h,0d936bf19h,0c34ae980h,0d4cf10c1h
- DD 0859dd614h,03a3e5334h,018d0c8eeh,09c475b5bh,007cd51d5h,063080d1fh,0b88b4326h,0c9c0d0a6h,0c234296fh,01ac98691h,094887fb6h,02a0a83a4h,00cea9cf2h,056511427h,0a24802f5h,05230a6e8h
- DD 072e3d5c1h,0f7a2bf0fh,04f21439eh,037717446h,09ce30334h,0fedcbf25h,07ce202f9h,0e0030a78h,01202e9cah,06f2d9ebfh,075e6e591h,0e79dde6ch,0f1dac4f8h,0f52072afh,0bb9b404dh,06c8d087eh
- DD 0bce913afh,0ad0fc73dh,0458a07cbh,0909e587bh,0d4f00c8ah,01300da84h,0b54466ach,0425cd048h,090e9d8bfh,0b59cb9beh,03e431b0eh,0991616dbh,0531aecffh,0d3aa117ah,059f4dc3bh,091af92d3h
- DD 0e93fda29h,09b1ec292h,0e97d91bch,076bb6c17h,0aface1e6h,07509d95fh,0be855ae3h,03653fe47h,00f680e75h,073180b28h,0eeb6c26ch,075eefd1bh,0b66d4236h,0a4cdf29fh,06b5821d8h,02d70a997h
- DD 020445c36h,07a3ee207h,059877174h,071d1ac82h,0949f73e9h,00fc539f7h,0982e3081h,0d05cf3d7h,07b1c7129h,08758e20bh,0569e61f2h,0ffadcc20h,059544c2dh,0b05d3a2fh,09fff5e53h,0be16f5c1h
- DD 0aad58135h,073cf65b8h,0037aa5beh,0622c2119h,0646fd6a0h,079373b3fh,00d3978cfh,00e029db5h,094fba037h,08bdfc437h,0620797a6h,0aefbd687h,0bd30d38eh,03fa5382bh,0585d7464h,07627cfbfh
- DD 04e4ca463h,0b2330fefh,03566cc63h,0bcef7287h,0cf780900h,0d161d2cah,05b54827dh,0135dc539h,027bf1bc6h,0638f052eh,007dfa06ch,010a224f0h,06d3321dah,0e973586dh,026152c8fh,08b0c5738h
- DD 034606074h,007ef4f2ah,0a0f7047ah,080fe7fe8h,0e1a0e306h,03d1a8152h,088da5222h,032cf43d8h,05f02ffe6h,0bf89a95fh,0806ad3eah,03d9eb9a4h,079c8e55eh,0012c17bbh,099c81dach,0fdcd1a74h
- DD 0b9556098h,07043178bh,0801c3886h,04090a1dfh,09b67b912h,0759800ffh,0232620c8h,03e5c0304h,070dceecah,04b9d3c4bh,0181f648eh,0bb2d3c15h,06e33345ch,0f981d837h,00cf2297ah,0b626289bh
- DD 08baebdcfh,0766ac659h,075df01e5h,01a28ae09h,0375876d8h,0b71283dah,0607b9800h,04865a96dh,0237936b2h,025dd1bcdh,060417494h,0332f4f4bh,0370a2147h,0d0923d68h,0dc842203h,0497f5dfbh
- DD 032be5e0fh,09dc74cbdh,017a01375h,07475bcb7h,050d872b1h,0438477c9h,0ffe1d63dh,0cec67879h,0d8578c70h,09b006014h,078bb6b8bh,0c9ad99a8h,011fb3806h,06799008eh,0cd44cab3h,0cfe81435h
- DD 02f4fb344h,0a2ee1582h,0483fa6ebh,0b8823450h,0652c7749h,0622d323dh,0beb0a15bh,0d8474a98h,05d1c00d0h,0e43c154dh,00e3e7aach,07fd581d9h,02525ddf8h,02b44c619h,0b8ae9739h,067a033ebh
- DD 09ef2d2e4h,0113ffec1h,0d5a0ea7fh,01bf6767eh,003714c0ah,057fff75eh,00a23e9eeh,0a23c422eh,0540f83afh,0dd5f6b2dh,055ea46a7h,0c2c2c27eh,0672a1208h,0eb6b4246h,0ae634f7ah,0d13599f7h
- DD 0d7b32c6eh,0cf914b5ch,0eaf61814h,061a5a640h,0208a1bbbh,08dc3df8bh,0b6d79aa5h,0ef627fd6h,0c4c86bc8h,044232ffch,0061539feh,0e6f9231bh,0958b9533h,01d04f25ah,049e8c885h,0180cf934h
- DD 09884aaf7h,089689595h,007b348a6h,0b1959be3h,03c147c87h,096250e57h,0dd0c61f8h,0ae0efb3ah,0ca8c325eh,0ed00745eh,0ecff3f70h,03c911696h,0319ad41dh,073acbc65h,0f0b1c7efh,07b01a020h
- DD 063a1483fh,0ea32b293h,07a248f96h,089eabe71h,0343157e5h,09c6231d3h,0df3c546dh,093a375e5h,06a2afe69h,0e76e9343h,0e166c88eh,0c4f89100h,04f872093h,0248efd0dh,08fe0ea61h,0ae0eb3eah
- DD 09d79046eh,0af89790dh,06cee0976h,04d650f2dh,043071ecah,0a3935d9ah,0283b0bfeh,066fcd2c9h,0696605f1h,00e665eb5h,0a54cd38dh,0e77e5d07h,043d950cfh,090ee050ah,0d32e69b5h,086ddebdah
- DD 0fddf7415h,06ad94a3dh,03f6e8d5ah,0f7fa1309h,0e9957f75h,0c4831d1dh,0d5817447h,07de28501h,09e2aeb6bh,06f1d7078h,0f67a53c2h,0ba2b9ff4h,0df9defc3h,036963767h,00d38022ch,0479deed3h
- DD 03a8631e8h,0d2edb89bh,07a213746h,08de855deh,0b00c5f11h,0b2056cb7h,02c9b85e4h,0deaefbd0h,0d150892dh,003f39a8dh,0218b7985h,037b84686h,0b7375f1ah,036296dd8h,0b78e898eh,0472cd4b1h
- DD 0e9f05de9h,015dff651h,02ce98ba9h,0d4045069h,09b38024ch,08466a7aeh,0e5a6b5efh,0b910e700h,0b3aa8f0dh,0ae1c56eah,07eee74a6h,0bab2a507h,04b4c4620h,00dca11e2h,04c47d1f4h,0fd896e2eh
- DD 0308fbd93h,0eb45ae53h,002c36fdah,046cd5a2eh,0baa48385h,06a3d4e90h,09dbe9960h,0dd55e62eh,02a81ede7h,0a1406aa0h,0f9274ea7h,06860dd14h,080414f86h,0cfdcb0c2h,022f94327h,0ff410b10h
- DD 049ad467bh,05a33cc38h,00a7335f1h,0efb48b6ch,0b153a360h,014fb54a4h,0b52469cch,0604aa9d2h,0754e48e9h,05e9dc486h,037471e8eh,0693cb455h,08d3b37b6h,0fb2fd7cdh,0cf09ff07h,063345e16h
- DD 023a5d896h,09910ba6bh,07fe4364eh,01fe19e35h,09a33c677h,06e1da8c3h,029fd9fd0h,015b4488bh,01a1f22bfh,01f439254h,0ab8163e8h,0920a8a70h,007e5658eh,03fd1b249h,0b6ec839bh,0f2c4f79ch
- DD 04aa38d1bh,01abbc3d0h,0b5d9510eh,03b0db35ch,03e60dec0h,01754ac78h,0ea099b33h,053272fd7h,007a8e107h,05fb0494fh,06a8191fah,04a89e137h,03c4ad544h,0a113b7f6h,06cb9897bh,088a2e909h
- DD 0b44a3f84h,017d55de3h,017c6c690h,0acb2f344h,010232390h,032088168h,06c733bf7h,0f2e8a61fh,09c2d7652h,0a774aab6h,0ed95c5bch,0fb5307e3h,04981f110h,0a05c73c2h,0a39458c9h,01baae31ch
- DD 0cbea62e7h,01def185bh,0eaf63059h,0e8ac9eaeh,09921851ch,0098a8cfdh,03abe2f5bh,0d959c3f1h,020e40ae5h,0a4f19525h,007a24aa1h,0320789e3h,07392b2bch,0259e6927h,01918668bh,058f6c667h
- DD 0c55d2d8bh,0ce1db2bbh,0f4f6ca56h,041d58bb7h,08f877614h,07650b680h,0f4c349edh,0905e16bah,0f661acach,0ed415140h,0cb2270afh,03b8784f0h,08a402cbah,03bc280ach,00937921ah,0d53f7146h
- DD 0e5681e83h,0c03c8ee5h,0f6ac9e4ah,062126105h,0936b1a38h,09503a53fh,0782fecbdh,03d45e2d4h,076e8ae98h,069a5c439h,0bfb4b00eh,0b53b2eebh,072386c89h,0f1674712h,04268bce4h,030ca34a2h
- DD 078341730h,07f1ed86ch,0b525e248h,08ef5beb8h,0b74fbf38h,0bbc489fdh,091a0b382h,038a92a0eh,022433ccfh,07a77ba3fh,0a29f05a9h,0de8362d6h,061189afch,07f6a30eah,059ef114fh,0693b5505h
- DD 0cd1797a1h,050266bc0h,0f4b7af2dh,0ea17b47eh,03df9483eh,0d6c4025ch,0a37b18c9h,08cbb9d9fh,04d8424cfh,091cbfd9ch,0ab1c3506h,0db7048f1h,0028206a3h,09eaf641fh,025bdf6ceh,0f986f3f9h
- DD 0224c08dch,0262143b5h,081b50c91h,02bbb09b4h,0aca8c84fh,0c16ed709h,0b2850ca8h,0a6210d9dh,009cb54d6h,06d8df67ah,0500919a4h,091eef6e0h,00f132857h,090f61381h,0f8d5028bh,09acede47h
- DD 090b771c3h,0844d1b71h,0ba6426beh,0563b71e4h,0bdb802ffh,02efa2e83h,0ab5b4a41h,03410cbabh,030da84ddh,0555b2d26h,0ee1cc29ah,0d0711ae9h,02f547792h,0cf3e8c60h,0dc678b35h,003d7d5deh
- DD 0ced806b8h,0071a2fa8h,0697f1478h,0222e6134h,0abfcdbbfh,0dc16fd5dh,0121b53b8h,044912ebfh,02496c27ch,0ac943674h,01ffc26b0h,08ea3176ch,013debf2ch,0b6e224ach,0f372a832h,0524cc235h
- DD 09f6f1b18h,0d706e1d8h,044cce35bh,02552f005h,0a88e31fch,08c8326c2h,0f9552047h,0b5468b2ch,03ff90f2bh,0ce683e88h,02f0a5423h,077947bdfh,0ed56e328h,0d0a1b28bh,0c20134ach,0aee35253h
- DD 03567962fh,07e98367dh,08188bffbh,0379ed61fh,0faf130a1h,073bba348h,0904ed734h,06c1f75e1h,03b4a79fch,018956642h,054ef4493h,0f20bc83dh,09111eca1h,0836d425dh,0009a8dcfh,0e5b5c318h
- DD 013221bc5h,03360b25dh,06b3eeaf7h,0707baad2h,0743a95a1h,0d7279ed8h,0969e809fh,07450a875h,0e5d0338fh,032b6bd53h,02b883bbch,01e77f7afh,01063ecd0h,090da12cch,0c315be47h,0e2697b58h
- DD 0da85d534h,02771a5bdh,0ff980eeah,053e78c1fh,0900385e7h,0adf1cf84h,0c9387b62h,07d3b14f6h,0cb8f2bd2h,0170e74b0h,0827fa993h,02d50b486h,0f6f32babh,0cdbe8c9ah,0c3b93ab8h,055e906b0h
- DD 08fe280d1h,0747f22fch,0b2e114abh,0cd8e0de5h,0e10b68b0h,05ab7dbebh,0a480d4b2h,09dc63a9ch,04be1495fh,078d4bc3bh,09359122dh,025eb3db8h,00809cbdch,03f8ac05bh,0d37c702fh,0bf4187bbh
- DD 01416a6a5h,084cea069h,043ef881ch,08f860c79h,038038a5dh,041311f8ah,0fc612067h,0e78c2ec0h,05ad73581h,0494d2e81h,059604097h,0b4cc9e00h,0f3612cbah,0ff558aech,09e36c39eh,035beef7ah
- DD 0dbcf41b9h,01845c7cfh,0aea997c0h,05703662ah,0e402f6d8h,08b925afeh,04dd72162h,0d0a1b1aeh,003c41c4bh,09f47b375h,00391d042h,0a023829bh,0503b8b0ah,05f5045c3h,098c010e5h,0123c2688h
- DD 036ba06eeh,0324ec0cch,03dd2cc0ch,0face3115h,0f333e91fh,0b364f3beh,028e832b0h,0ef8aff73h,02d05841bh,01e9bad04h,0356a21e2h,042f0e3dfh,04add627eh,0a3270bcbh,0d322e711h,0b09a8158h
- DD 00fee104ah,086e326a1h,03703f65dh,0ad7788f8h,047bc4833h,07e765430h,02b9b893ah,06cee582bh,0e8f55a7bh,09cd2a167h,0d9e4190dh,0efbee3c6h,0d40c2e9dh,033ee7185h,0a380b548h,0844cc9c5h
- DD 066926e04h,0323f8ecdh,08110c1bah,00001e38fh,0fc6a7f07h,08dbcac12h,00cec0827h,0d65e1d58h,0be76ca2dh,0d2cd4141h,0e892f33ah,07895cf5ch,0367139d2h,0956d230dh,0d012c4c1h,0a91abd3eh
- DD 087eb36bfh,034fa4883h,0914b8fb4h,0c5f07102h,0adb9c95fh,090f0e579h,028888195h,0fe6ea8cbh,0edfa9284h,07b9b5065h,02b8c8d65h,06c510bd2h,0cbe8aafdh,0d7b8ebefh,096b1da07h,0edb3af98h
- DD 06295d426h,028ff779dh,03fa3ad7bh,00c4f6ac7h,08b8e2604h,0ec44d054h,08b0050e1h,09b32a66dh,0f0476ce2h,01f943366h,0a602c7b4h,07554d953h,0524f2809h,0be35aca6h,0fd4edbeah,0b6881229h
- DD 0508efb63h,0e8cd0c8fh,06abcefc7h,09eb5b5c8h,0b441ab4fh,0f5621f5fh,0b76a2b22h,079e6c046h,0e37a1f69h,074a4792ch,003542b60h,0cbd252cbh,0b3c20bd3h,0785f65d5h,04fabc60ch,08dea6143h
- DD 0de673629h,045e21446h,0703c2d21h,057f7aa1eh,098c868c7h,0a0e99b7fh,08b641676h,04e42f66dh,091077896h,0602884dch,0c2c9885bh,0a0d690cfh,03b9a5187h,0feb4da33h,0153c87eeh,05f789598h
- DD 052b16dbah,02192dd47h,03524c1b1h,0deefc0e6h,0e4383693h,0465ea76eh,0361b8d98h,079401711h,0f21a15cbh,0a5f9ace9h,0efee9aebh,073d26163h,0e677016ch,0cca844b3h,057eaee06h,06c122b07h
- DD 015f09690h,0b782dce7h,02dfc0fc9h,0508b9b12h,065d89fc6h,09015ab4bh,0d6d5bb0fh,05e79dab7h,06c775aa2h,064f021f0h,037c7eca1h,0df09d8cch,0ef2fa506h,09a761367h,05b81eec6h,0ed4ca476h
- DD 010bbb8b5h,0262ede36h,00641ada3h,00737ce83h,0e9831ccch,04c94288ah,08065e635h,0487fc1ceh,0b8bb3659h,0b13d7ab3h,0855e4120h,0dea5df3eh,085eb0244h,0b9a18573h,0a7cfe0a3h,01a1b8ea3h
- DD 067b0867ch,03b837119h,09d364520h,08d5e0d08h,0d930f0e3h,052dccc1eh,0bf20bbafh,0efbbcec7h,00263ad10h,099cffcabh,0fcd18f8ah,0d8199e6dh,0e9f10617h,064e2773fh,008704848h,00079e8e1h
- DD 08a342283h,01169989fh,0a83012e6h,08097799ch,08a6a9001h,0ece966cbh,0072ac7fch,093b3afefh,02db3d5bah,0e6893a2ah,089bf4fdch,0263dc462h,0e0396673h,08852dfc9h,03af362b6h,07ac70895h
- DD 05c2f342bh,0bb9cce4dh,0b52d7aaeh,0bf80907ah,02161bcd0h,097f3d3cdh,00962744dh,0b25b0834h,06c3a1ddah,0c5b18ea5h,006c92317h,0fe4ec7ebh,0ad1c4afeh,0b787b890h,00ede801ah,0dccd9a92h
- DD 0db58da1fh,09ac6dddah,0b8cae6eeh,022bbc12fh,0815c4a43h,0c6f8bcedh,0f96480c7h,08105a92ch,07a859d51h,00dc3dbf3h,03041196bh,0e3ec7ce6h,00d1067c9h,0d9f64b25h,03d1f8dd8h,0f2321321h
- DD 076497ee8h,08b5c619ch,0c717370eh,05d2b0ac6h,04fcf68e1h,098204cb6h,062bc6792h,00bdec211h,0a63b1011h,06973ccefh,0e0de1ac5h,0f9e3fa97h,03d0e0c8bh,05efb693eh,0d2d4fcb4h,0037248e9h
- DD 01ec34f9eh,080802dc9h,033810603h,0d8772d35h,0530cb4f3h,03f06d66ch,0c475c129h,07be5ed0dh,031e82b10h,0cb9e3c19h,0c9ff6b4ch,0c63d2857h,092a1b45eh,0b92118c6h,07285bbcah,00aec4414h
- DD 01e29a3efh,0fc189ae7h,04c93302eh,0cbe906f0h,0ceaae10eh,0d0107914h,0b68e19f8h,0b7a23f34h,0efd2119dh,0e9d875c2h,0fcadc9c8h,003198c6eh,04da17113h,065591bf6h,03d443038h,03cf0bbf8h
- DD 02b724759h,0ae485bb7h,0b2d4c63ah,0945353e1h,0de7d6f2ch,082159d07h,04ec5b109h,0389caef3h,0db65ef14h,04a8ebb53h,0dd99de43h,02dc2cb7eh,083f2405fh,0816fa3edh,0c14208a3h,073429bb9h
- DD 0b01e6e27h,0b618d590h,0e180b2dch,0047e2ccdh,004aea4a9h,0d1b299b5h,09fa403a4h,0412c9e1eh,079407552h,088d28a36h,0f332b8e3h,049c50136h,0e668de19h,03a1b6fcch,075122b97h,0178851bch
- DD 0fb85fa4ch,0b1e13752h,0383c8ce9h,0d61257ceh,0d2f74daeh,0d43da670h,0bf846bbbh,0a35aa23fh,04421fc83h,05e74235dh,0c363473bh,0f6df8ee0h,03c4aa158h,034d7f52ah,09bc6d22eh,050d05aabh
- DD 0a64785f4h,08c56e735h,05f29cd07h,0bc56637bh,03ee35067h,053b2bb80h,0dc919270h,050235a0fh,0f2c4aa65h,0191ab6d8h,08396023bh,0c3475831h,0f0f805bah,080400ba5h,05ec0f80fh,08881065bh
- DD 0cc1b5e83h,0c370e522h,0860b8bfbh,0de2d4ad1h,067b256dfh,0ad364df0h,0e0138997h,08f12502eh,07783920ah,0503fa0dch,0c0bc866ah,0e80014adh,0d3064ba6h,03f89b744h,0cba5dba5h,003511dcdh
- DD 095a7b1a2h,0197dd46dh,03c6341fbh,09c4e7ad6h,0484c2eceh,0426eca29h,0de7f4f8ah,09211e489h,0c78ef1f4h,014997f6eh,006574586h,02b2c0910h,01c3eede8h,017286a6eh,00f60e018h,025f92e47h
- DD 031890a36h,0805c5646h,057feea5bh,0703ef600h,0af3c3030h,0389f747ch,054dd3739h,0e0e5daebh,0c9c9f155h,0fe24a4c3h,0b5393962h,07e4bf176h,0af20bf29h,037183de2h,0f95a8c3bh,04a1bd7b5h
- DD 046191d3dh,0a83b9699h,07b87f257h,0281fc8ddh,054107588h,0b18e2c13h,09b2bafe8h,06372def7h,00d8972cah,0daf4bb48h,056167a3fh,03f2dd4b7h,084310cf4h,01eace32dh,0e42700aah,0e3bcefafh
- DD 0d785e73dh,05fe5691eh,02ea60467h,0a5db5ab6h,0dfc6514ah,002e23d41h,0e03c3665h,035e8048eh,01adaa0f8h,03f8b118fh,084ce1a5ah,028ec3b45h,02c6646b8h,0e8cacc6eh,0dbd0e40fh,01343d185h
- DD 0caaa358ch,0e5d7f844h,09924182ah,01a1db7e4h,09c875d9ah,0d64cd42dh,0042eeec8h,0b37b515fh,07b165fbeh,04d4dd409h,0e206eff3h,0fc322ed9h,059b7e17eh,07dee4102h,08236ca00h,055a481c0h
- DD 0c23fc975h,08c885312h,005d6297bh,015715806h,0f78edd39h,0a078868eh,003c45e52h,0956b31e0h,0ff7b33a6h,0470275d5h,00c7e673fh,0c8d5dc3ah,07e2f2598h,0419227b4h,04c14a975h,08b37b634h
- DD 08b11888ch,0d0667ed6h,0803e25dch,05e0e8c3eh,0b987a24ah,034e5d0dch,0ae920323h,09f40ac3bh,034e0f63ah,05463de95h,06b6328f9h,0a128bf92h,0da64f1b7h,0491ccd7ch,0c47bde35h,07ef1ec27h
- DD 0a36a2737h,0a857240fh,063621bc1h,035dc1366h,0d4fb6897h,07a3a6453h,0c929319dh,080f1a439h,0f8cb0ba0h,0fc18274bh,08078c5ebh,0b0b53766h,01e01d0efh,0fb0d4924h,0372ab09ch,050d7c67dh
- DD 03aeac968h,0b4e370afh,0c4b63266h,0e4f7fee9h,0e3ac5664h,0b4acd4c2h,0ceb38cbfh,0f8910bd2h,0c9c0726eh,01c3ae50ch,0d97b40bfh,015309569h,0fd5a5a1bh,070884b7fh,0ef8314cdh,03890896ah
- DD 0a5618c93h,058e1515ch,077d942d1h,0e665432bh,0b6f767a8h,0b32181bfh,03a604110h,0753794e8h,0e8c0dbcch,009afeb7ch,0598673a3h,031e02613h,07d46db00h,05d98e557h,09d985b28h,0fc21fb8ch
- DD 0b0843e0bh,0c9040116h,069b04531h,053b1b3a8h,085d7d830h,0dd1649f0h,0cb7427e8h,0bb3bcc87h,0c93dce83h,077261100h,0a1922a2ah,07e79da61h,0f3149ce8h,0587a2b02h,0de92ec83h,0147e1384h
- DD 0af077f30h,0484c83d3h,00658b53ah,0ea78f844h,0027aec53h,0912076c2h,093c8177dh,0f34714e3h,0c2376c84h,037ef5d15h,03d1aa783h,08315b659h,0ef852a90h,03a75c484h,016086bd4h,00ba0c58ah
- DD 0529a6d48h,029688d7ah,0c2f19203h,09c7f250dh,0682e2df9h,0123042fbh,0ad8121bch,02b7587e7h,0e0182a65h,030fc0233h,0e3e1128ah,0b82ecf87h,093fb098fh,071682861h,085e9e6a7h,0043e21aeh
- DD 066c834eah,0ab5b49d6h,047414287h,03be43e18h,0219a2a47h,0f40fb859h,0cc58df3ch,00e6559e9h,00c6615b4h,0fe1dfe8eh,056459d70h,014abc8fdh,005de0386h,07be0fa8eh,0e9035c7ch,08e63ef68h
- DD 053b31e91h,0116401b4h,04436b4d8h,00cba7ad4h,0107afd66h,09151f9a0h,01f0ee4c4h,0afaca8d0h,09ee9761ch,075fe5c1dh,0f0c0588fh,03497a16bh,00304804ch,03ee2bebdh,0c2c990b9h,0a8fb9a60h
- DD 039251114h,0d14d32feh,0cac73366h,036bf25bch,0dba7495ch,0c9562c66h,046ad348bh,0324d301bh,0d670407eh,09f46620ch,0e3733a01h,00ea8d4f1h,0b0c324e0h,0d396d532h,003c317cdh,05b211a0eh
- DD 05ffe7b37h,0090d7d20h,01747d2dah,03b7f3efbh,0b54fc519h,0a2cb525fh,0f66a971eh,06e220932h,0b486d440h,0ddc160dfh,03fe13465h,07fcfec46h,076e4c151h,083da7e4eh,0d8d302b5h,0d6fa48a1h
- DD 05872cd88h,0c6304f26h,0278b90a1h,0806c1d3ch,0caf0bc1ch,03553e725h,0bb9d8d5ch,0ff59e603h,07a0b85ddh,0a4550f32h,093ecc217h,0dec5720ah,069d62213h,00b88b741h,05b365955h,07212f245h
- DD 0b5cae787h,020764111h,01dfd3124h,013cb7f58h,01175aefbh,02dca77dah,0ffaae775h,0eb75466bh,0db6cff32h,074d76f3bh,061fcda9ah,07440f37ah,0b525028bh,01bb3ac92h,0a1975f29h,020fbf8f7h
- DD 0df83097fh,0982692e1h,0554b0800h,028738f6ch,0a2ce2f2fh,0dc703717h,040814194h,07913b93ch,01fe89636h,004924593h,0f78834a6h,07b98443fh,05114a5a1h,011c6ab01h,0ffba5f4ch,060deb383h
- DD 001a982e6h,04caa54c6h,03491cd26h,01dd35e11h,07cbd6b05h,0973c315fh,052494724h,0cab00775h,06565e15ah,004659b1fh,08c8fb026h,0bf30f529h,0a8a0de37h,0fc21641bh,0fa5e5114h,0e9c7a366h
- DD 052f03ad8h,0db849ca5h,0024e35c0h,0c7e8dbe9h,0cfc3c789h,0a1a2bbach,09c26f262h,0bf733e7dh,0b8444823h,0882ffbf5h,06bf8483bh,0b7224e88h,065bef640h,053023b8bh,0d4d5f8cdh,0aabfec91h
- DD 0079ea1bdh,0a40e1510h,0d05d5d26h,01ad9addch,013e68d4fh,0db3f2eabh,0640f803fh,01cff1ae2h,0d4cee117h,0e0e7b749h,04036d909h,08e9f275bh,08f4d4c38h,0ce34e31dh,0d75130fch,022b37f69h
- DD 0b4014604h,083e0f1fdh,089415078h,0a8ce9919h,041792efeh,082375b75h,097d4515bh,04f59bf5ch,0923a277dh,0ac4f324fh,0650f3406h,0d9bc9b7dh,08a39bc51h,0c6fa87d1h,05ccc108fh,082588530h
- DD 082e4c634h,05ced3c9fh,03a4464f8h,08efb8314h,07a1dca25h,0e706381bh,05a2a412bh,06cd15a3ch,0bfcd8fb5h,09347a8fdh,06e54cd22h,031db2eefh,0f8d8932fh,0c4aeb11eh,0344411afh,011e7c1edh
- DD 0dc9a151eh,02653050ch,03bb0a859h,09edbfc08h,0fd5691e7h,0926c81c7h,06f39019ah,09c1b2342h,07f8474b9h,064a81c8bh,001761819h,090657c07h,055e0375ah,0390b3331h,0b6ebc47dh,0c676c626h
- DD 0b7d6dee8h,051623247h,079659313h,00948d927h,0e9ab35edh,099700161h,08ddde408h,006cc32b4h,0061ef338h,06f2fd664h,0c202e9edh,01606fa02h,0929ba99bh,055388bc1h,01e81df69h,0c4428c5eh
- DD 0f91b0b2ah,0ce2028aeh,0f03dfd3fh,0ce870a23h,00affe8edh,066ec2c87h,0284d0c00h,0b205fb46h,044cefa48h,0bf5dffe7h,0a19876d7h,0b6fc37a8h,008b72863h,0becfa84ch,02576374fh,0d7205ff5h
- DD 08887de41h,080330d32h,0869ea534h,05de0df0ch,03c56ea17h,013f42753h,0452b1a78h,0eb1f6069h,0e30ea15ch,050474396h,0c1494125h,0575816a1h,0fe6bb38fh,0be1ce55bh,096ae30f7h,0b901a948h
- DD 0d8fc3548h,0e5af0f08h,0d73bfd08h,05010b5d0h,053fe655ah,0993d2880h,01c1309fdh,099f2630bh,0b4e3b76fh,0d8677bafh,0b840784bh,014e51ddch,0bf0092ceh,0326c750ch,0f528320fh,0c83d306bh
- DD 077d4715ch,0c4456715h,06b703235h,0d30019f9h,0d669e986h,0207ccb2eh,0f6dbfc28h,057c824afh,0d8f92a23h,0f0eb532fh,09bb98fd2h,04a557fd4h,0c1e6199ah,0a57acea7h,08b94b1edh,00c663820h
- DD 0f83a9266h,09b42be8fh,00101bd45h,0c7741c97h,007bd9cebh,095770c11h,08b2e0744h,01f50250ah,01477b654h,0f762eec8h,015efe59ah,0c65b900eh,09546a897h,088c96148h,0c30b4d7ch,07e8025b3h
- DD 012045cf9h,0ae4065efh,09ccce8bdh,06fcb2cafh,0f2cf6525h,01fa0ba4eh,0cb72c312h,0f683125dh,0e312410eh,0a01da4eah,06cd8e830h,067e28677h,098fb3f07h,0abd95752h,0eef649a5h,005f11e11h
- DD 09d3472c2h,0ba47faefh,0c77d1345h,03adff697h,0dd15afeeh,04761fa04h,0b9e69462h,064f1f61ah,09bfb9093h,0fa691fabh,0a1133dfeh,03df8ae8fh,058cc710dh,0cd5f8967h,016c7fe79h,0fbb88d50h
- DD 0e88c50d1h,08e011b4ch,0a8771c4fh,07532e807h,0e2278ee4h,064c78a48h,03845072ah,00b283e83h,049e69274h,098a6f291h,01868b21ch,0b96e9668h,0b1a8908eh,038f0adc2h,01feb829dh,090afcff7h
- DD 0210b0856h,09915a383h,0def04889h,0a5a80602h,07c64d509h,0800e9af9h,0b8996f6fh,081382d0bh,081927e27h,0490eba53h,04af50182h,046c63b32h,0d3ad62ceh,0784c5fd9h,0f8ae8736h,0e4fa1870h
- DD 0d7466b25h,04ec9d0bch,0db235c65h,084ddbe1ah,0163c1688h,05e2645eeh,000eba747h,0570bd00eh,0128bfa0fh,0fa51b629h,06c1d3b68h,092fce1bdh,0b66778b1h,03e7361dch,05561d2bbh,09c7d249dh
- DD 00bbc6229h,0a40b28bfh,0dfd91497h,01c83c05eh,0f083df05h,05f9f5154h,0eee66c9dh,0bac38b3ch,0ec0dfcfdh,0f71db7e3h,08b0a8416h,0f2ecda8eh,07812aa66h,052fddd86h,04e6f4272h,02896ef10h
- DD 00fe9a745h,0ff27186ah,049ca70dbh,008249fcdh,0441cac49h,07425a2e6h,0ece5ff57h,0f4a0885ah,07d7ead58h,06e2cb731h,01898d104h,0f96cf7d6h,04f2c9a89h,0afe67c9dh,01c7bf5bch,089895a50h
- DD 0573cecfah,0dc7cb8e5h,0d15f03e6h,066497eaeh,03f084420h,06bc0de69h,0acd532b0h,0323b9b36h,00115a3c1h,0cfed390ah,02d65ca0eh,09414c40bh,02f530c78h,0641406bdh,0833438f2h,029369a44h
- DD 0903fa271h,0996884f5h,0b9da921eh,0e6da0fd2h,05db01e54h,0a6f2f269h,06876214eh,01ee3e9bdh,0e27a9497h,0a26e181ch,08e215e04h,036d254e4h,0252cabcah,042f32a6ch,080b57614h,099481487h
- DD 040d9cae1h,04c4dfe69h,011a10f09h,005869580h,03491b64bh,0ca287b57h,03fd4a53bh,077862d5dh,050349126h,0bf94856eh,071c5268fh,02be30bd1h,0cbb650a6h,010393f19h,0778cf9fdh,0639531feh
- DD 0b2935359h,002556a11h,0af8c126eh,0da38aa96h,00960167fh,047dbe6c2h,0501901cdh,037bbabb6h,02c947778h,0b6e979e0h,07a1a1dc6h,0d69a5175h,09d9faf0ch,0c3ed5095h,01d5fa5f0h,04dd9c096h
- DD 064f16ea8h,0a0c4304dh,07e718623h,08b1cac16h,07c67f03eh,00b576546h,0cbd88c01h,0559cf5adh,00e2af19ah,0074877bbh,0a1228c92h,01f717ec1h,0326e8920h,070bcb800h,04f312804h,0ec6e2c5ch
- DD 03fca4752h,0426aea7dh,02211f62ah,0f12c0949h,07be7b6b5h,024beecd8h,036d7a27dh,0b77eaf4ch,0fda78fd3h,0154c2781h,0264eeabeh,0848a83b0h,04ffe2bc4h,081287ef0h,0b6b6fc2ah,07b6d88c6h
- DD 0ce417d99h,0805fb947h,08b916cc4h,04b93dcc3h,021273323h,072e65bb3h,06ea9886eh,0bcc1baddh,04bc5ee85h,00e223011h,0c18ee1e4h,0a561be74h,0a6bcf1f1h,0762fd2d4h,095231489h,050e6a5a4h
- DD 0a00b500bh,0ca96001fh,05d7dcdf5h,05c098cfch,08c446a85h,0a64e2d2eh,0971f3c62h,0bae9bcf1h,08435a2c5h,04ec22683h,04bad4643h,08ceaed6ch,0ccccf4e3h,0e9f8fb47h,01ce3b21eh,0bd4f3fa4h
- DD 0a3db3292h,0d79fb110h,0b536c66ah,0e28a37dah,08e49e6a9h,0279ce87bh,0fdcec8e3h,070ccfe8dh,03ba464b2h,02193e4e0h,0aca9a398h,00f39d60eh,0f82c12abh,07d7932afh,091e7e0f7h,0d8ff50edh
- DD 0fa28a7e0h,0ea961058h,00bf5ec74h,0c726cf25h,0db229666h,0e74d55c8h,0a57f5799h,00bd9abbfh,04dfc47b3h,07479ef07h,00c52f91dh,0d9c65fc3h,036a8bde2h,08e0283feh,07d4b7280h,0a32a8b5eh
- DD 012e83233h,06a677c61h,0dcc9bf28h,00fbb3512h,00d780f61h,0562e8ea5h,01dc4e89ch,00db8b22bh,089be0144h,00a6fd1fbh,0ca57113bh,08c77d246h,0ff09c91ch,04639075dh,05060824ch,05b47b17fh
- DD 016287b52h,058aea2b0h,0d0cd8eb0h,0a1343520h,0c5d58573h,06148b4d0h,0291c68aeh,0dd2b6170h,01da3b3b7h,0a61b3929h,008c4ac10h,05f946d79h,07217d583h,04105d4a5h,025e6de5eh,05061da3dh
- DD 0ec1b4991h,03113940dh,036f485aeh,0f12195e1h,0731a2ee0h,0a7507fb2h,06e9e196eh,095057a8eh,02e130136h,0a3c2c911h,033c60d15h,097dfbb36h,0b300ee2bh,0caf3c581h,0f4bac8b8h,077f25d90h
- DD 06d840cd6h,0db1c4f98h,0e634288ch,0471d62c0h,0cec8a161h,08ec2f85eh,0fa6f4ae2h,041f37cbch,04b709985h,06793a20fh,0efa8985bh,07a7bd33bh,0938e6446h,02c6a3fbdh,02a8d47c1h,019042619h
- DD 0cc36975fh,016848667h,09d5f1dfbh,002acf168h,0613baa94h,062d41ad4h,09f684670h,0b56fbb92h,0e9e40569h,0ce610d0dh,035489fefh,07b99c65fh,03df18b97h,00c88ad1bh,05d0e9edbh,081b7d9beh
- DD 0c716cc0ah,0d85218c0h,085691c49h,0f4b5ff90h,0ce356ac6h,0a4fd666bh,04b327a7ah,017c72895h,0da6be7deh,0f93d5085h,03301d34eh,0ff71530eh,0d8f448e8h,04cd96442h,02ed18ffah,09283d331h
- DD 02a849870h,04d33dd99h,041576335h,0a716964bh,0179be0e5h,0ff5e3a9bh,083b13632h,05b9d6b1bh,0a52f313bh,03b8bd7d4h,0637a4660h,0c9dd95a0h,00b3e218fh,030035962h,0c7b28a3ch,0ce1481a3h
- DD 043228d83h,0ab41b43ah,04ad63f99h,024ae1c30h,046a51229h,08e525f1ah,0cd26d2b4h,014af860fh,03f714aa1h,0d6baef61h,0eb78795eh,0f51865adh,0e6a9d694h,0d3e21fceh,08a37b527h,082ceb1ddh
-
-.text$ ENDS
-.text$ SEGMENT ALIGN(256) 'CODE'
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-
-ALIGN 64
-$L$poly::
- DQ 0ffffffffffffffffh,000000000ffffffffh,00000000000000000h,0ffffffff00000001h
-
-
-$L$RR::
- DQ 00000000000000003h,0fffffffbffffffffh,0fffffffffffffffeh,000000004fffffffdh
-
-$L$One::
- DD 1,1,1,1,1,1,1,1
-$L$Two::
- DD 2,2,2,2,2,2,2,2
-$L$Three::
- DD 3,3,3,3,3,3,3,3
-$L$ONE_mont::
- DQ 00000000000000001h,0ffffffff00000000h,0ffffffffffffffffh,000000000fffffffeh
-
-
-$L$ord::
- DQ 0f3b9cac2fc632551h,0bce6faada7179e84h,0ffffffffffffffffh,0ffffffff00000000h
-$L$ordK::
- DQ 0ccd1c8aaee00bc4fh
-
-PUBLIC ecp_nistz256_mul_by_2
-
-ALIGN 64
-ecp_nistz256_mul_by_2 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_mul_by_2::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- push r12
-
- push r13
-
-$L$mul_by_2_body::
-
- mov r8,QWORD PTR[rsi]
- xor r13,r13
- mov r9,QWORD PTR[8+rsi]
- add r8,r8
- mov r10,QWORD PTR[16+rsi]
- adc r9,r9
- mov r11,QWORD PTR[24+rsi]
- lea rsi,QWORD PTR[$L$poly]
- mov rax,r8
- adc r10,r10
- adc r11,r11
- mov rdx,r9
- adc r13,0
-
- sub r8,QWORD PTR[rsi]
- mov rcx,r10
- sbb r9,QWORD PTR[8+rsi]
- sbb r10,QWORD PTR[16+rsi]
- mov r12,r11
- sbb r11,QWORD PTR[24+rsi]
- sbb r13,0
-
- cmovc r8,rax
- cmovc r9,rdx
- mov QWORD PTR[rdi],r8
- cmovc r10,rcx
- mov QWORD PTR[8+rdi],r9
- cmovc r11,r12
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
-
- mov r13,QWORD PTR[rsp]
-
- mov r12,QWORD PTR[8+rsp]
-
- lea rsp,QWORD PTR[16+rsp]
-
-$L$mul_by_2_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_mul_by_2::
-ecp_nistz256_mul_by_2 ENDP
-
-
-
-PUBLIC ecp_nistz256_div_by_2
-
-ALIGN 32
-ecp_nistz256_div_by_2 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_div_by_2::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- push r12
-
- push r13
-
-$L$div_by_2_body::
-
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[8+rsi]
- mov r10,QWORD PTR[16+rsi]
- mov rax,r8
- mov r11,QWORD PTR[24+rsi]
- lea rsi,QWORD PTR[$L$poly]
-
- mov rdx,r9
- xor r13,r13
- add r8,QWORD PTR[rsi]
- mov rcx,r10
- adc r9,QWORD PTR[8+rsi]
- adc r10,QWORD PTR[16+rsi]
- mov r12,r11
- adc r11,QWORD PTR[24+rsi]
- adc r13,0
- xor rsi,rsi
- test rax,1
-
- cmovz r8,rax
- cmovz r9,rdx
- cmovz r10,rcx
- cmovz r11,r12
- cmovz r13,rsi
-
- mov rax,r9
- shr r8,1
- shl rax,63
- mov rdx,r10
- shr r9,1
- or r8,rax
- shl rdx,63
- mov rcx,r11
- shr r10,1
- or r9,rdx
- shl rcx,63
- shr r11,1
- shl r13,63
- or r10,rcx
- or r11,r13
-
- mov QWORD PTR[rdi],r8
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
-
- mov r13,QWORD PTR[rsp]
-
- mov r12,QWORD PTR[8+rsp]
-
- lea rsp,QWORD PTR[16+rsp]
-
-$L$div_by_2_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_div_by_2::
-ecp_nistz256_div_by_2 ENDP
-
-
-
-PUBLIC ecp_nistz256_mul_by_3
-
-ALIGN 32
-ecp_nistz256_mul_by_3 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_mul_by_3::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- push r12
-
- push r13
-
-$L$mul_by_3_body::
-
- mov r8,QWORD PTR[rsi]
- xor r13,r13
- mov r9,QWORD PTR[8+rsi]
- add r8,r8
- mov r10,QWORD PTR[16+rsi]
- adc r9,r9
- mov r11,QWORD PTR[24+rsi]
- mov rax,r8
- adc r10,r10
- adc r11,r11
- mov rdx,r9
- adc r13,0
-
- sub r8,-1
- mov rcx,r10
- sbb r9,QWORD PTR[(($L$poly+8))]
- sbb r10,0
- mov r12,r11
- sbb r11,QWORD PTR[(($L$poly+24))]
- sbb r13,0
-
- cmovc r8,rax
- cmovc r9,rdx
- cmovc r10,rcx
- cmovc r11,r12
-
- xor r13,r13
- add r8,QWORD PTR[rsi]
- adc r9,QWORD PTR[8+rsi]
- mov rax,r8
- adc r10,QWORD PTR[16+rsi]
- adc r11,QWORD PTR[24+rsi]
- mov rdx,r9
- adc r13,0
-
- sub r8,-1
- mov rcx,r10
- sbb r9,QWORD PTR[(($L$poly+8))]
- sbb r10,0
- mov r12,r11
- sbb r11,QWORD PTR[(($L$poly+24))]
- sbb r13,0
-
- cmovc r8,rax
- cmovc r9,rdx
- mov QWORD PTR[rdi],r8
- cmovc r10,rcx
- mov QWORD PTR[8+rdi],r9
- cmovc r11,r12
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
-
- mov r13,QWORD PTR[rsp]
-
- mov r12,QWORD PTR[8+rsp]
-
- lea rsp,QWORD PTR[16+rsp]
-
-$L$mul_by_3_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_mul_by_3::
-ecp_nistz256_mul_by_3 ENDP
-
-
-
-PUBLIC ecp_nistz256_add
-
-ALIGN 32
-ecp_nistz256_add PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_add::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- push r12
-
- push r13
-
-$L$add_body::
-
- mov r8,QWORD PTR[rsi]
- xor r13,r13
- mov r9,QWORD PTR[8+rsi]
- mov r10,QWORD PTR[16+rsi]
- mov r11,QWORD PTR[24+rsi]
- lea rsi,QWORD PTR[$L$poly]
-
- add r8,QWORD PTR[rdx]
- adc r9,QWORD PTR[8+rdx]
- mov rax,r8
- adc r10,QWORD PTR[16+rdx]
- adc r11,QWORD PTR[24+rdx]
- mov rdx,r9
- adc r13,0
-
- sub r8,QWORD PTR[rsi]
- mov rcx,r10
- sbb r9,QWORD PTR[8+rsi]
- sbb r10,QWORD PTR[16+rsi]
- mov r12,r11
- sbb r11,QWORD PTR[24+rsi]
- sbb r13,0
-
- cmovc r8,rax
- cmovc r9,rdx
- mov QWORD PTR[rdi],r8
- cmovc r10,rcx
- mov QWORD PTR[8+rdi],r9
- cmovc r11,r12
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
-
- mov r13,QWORD PTR[rsp]
-
- mov r12,QWORD PTR[8+rsp]
-
- lea rsp,QWORD PTR[16+rsp]
-
-$L$add_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_add::
-ecp_nistz256_add ENDP
-
-
-
-PUBLIC ecp_nistz256_sub
-
-ALIGN 32
-ecp_nistz256_sub PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_sub::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- push r12
-
- push r13
-
-$L$sub_body::
-
- mov r8,QWORD PTR[rsi]
- xor r13,r13
- mov r9,QWORD PTR[8+rsi]
- mov r10,QWORD PTR[16+rsi]
- mov r11,QWORD PTR[24+rsi]
- lea rsi,QWORD PTR[$L$poly]
-
- sub r8,QWORD PTR[rdx]
- sbb r9,QWORD PTR[8+rdx]
- mov rax,r8
- sbb r10,QWORD PTR[16+rdx]
- sbb r11,QWORD PTR[24+rdx]
- mov rdx,r9
- sbb r13,0
-
- add r8,QWORD PTR[rsi]
- mov rcx,r10
- adc r9,QWORD PTR[8+rsi]
- adc r10,QWORD PTR[16+rsi]
- mov r12,r11
- adc r11,QWORD PTR[24+rsi]
- test r13,r13
-
- cmovz r8,rax
- cmovz r9,rdx
- mov QWORD PTR[rdi],r8
- cmovz r10,rcx
- mov QWORD PTR[8+rdi],r9
- cmovz r11,r12
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
-
- mov r13,QWORD PTR[rsp]
-
- mov r12,QWORD PTR[8+rsp]
-
- lea rsp,QWORD PTR[16+rsp]
-
-$L$sub_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_sub::
-ecp_nistz256_sub ENDP
-
-
-
-PUBLIC ecp_nistz256_neg
-
-ALIGN 32
-ecp_nistz256_neg PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_neg::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- push r12
-
- push r13
-
-$L$neg_body::
-
- xor r8,r8
- xor r9,r9
- xor r10,r10
- xor r11,r11
- xor r13,r13
-
- sub r8,QWORD PTR[rsi]
- sbb r9,QWORD PTR[8+rsi]
- sbb r10,QWORD PTR[16+rsi]
- mov rax,r8
- sbb r11,QWORD PTR[24+rsi]
- lea rsi,QWORD PTR[$L$poly]
- mov rdx,r9
- sbb r13,0
-
- add r8,QWORD PTR[rsi]
- mov rcx,r10
- adc r9,QWORD PTR[8+rsi]
- adc r10,QWORD PTR[16+rsi]
- mov r12,r11
- adc r11,QWORD PTR[24+rsi]
- test r13,r13
-
- cmovz r8,rax
- cmovz r9,rdx
- mov QWORD PTR[rdi],r8
- cmovz r10,rcx
- mov QWORD PTR[8+rdi],r9
- cmovz r11,r12
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
-
- mov r13,QWORD PTR[rsp]
-
- mov r12,QWORD PTR[8+rsp]
-
- lea rsp,QWORD PTR[16+rsp]
-
-$L$neg_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_neg::
-ecp_nistz256_neg ENDP
-
-
-
-
-
-
-PUBLIC ecp_nistz256_ord_mul_mont
-
-ALIGN 32
-ecp_nistz256_ord_mul_mont PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_ord_mul_mont::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- mov ecx,080100h
- and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- cmp ecx,080100h
- je $L$ecp_nistz256_ord_mul_montx
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$ord_mul_body::
-
- mov rax,QWORD PTR[rdx]
- mov rbx,rdx
- lea r14,QWORD PTR[$L$ord]
- mov r15,QWORD PTR[$L$ordK]
-
-
- mov rcx,rax
- mul QWORD PTR[rsi]
- mov r8,rax
- mov rax,rcx
- mov r9,rdx
-
- mul QWORD PTR[8+rsi]
- add r9,rax
- mov rax,rcx
- adc rdx,0
- mov r10,rdx
-
- mul QWORD PTR[16+rsi]
- add r10,rax
- mov rax,rcx
- adc rdx,0
-
- mov r13,r8
- imul r8,r15
-
- mov r11,rdx
- mul QWORD PTR[24+rsi]
- add r11,rax
- mov rax,r8
- adc rdx,0
- mov r12,rdx
-
-
- mul QWORD PTR[r14]
- mov rbp,r8
- add r13,rax
- mov rax,r8
- adc rdx,0
- mov rcx,rdx
-
- sub r10,r8
- sbb r8,0
-
- mul QWORD PTR[8+r14]
- add r9,rcx
- adc rdx,0
- add r9,rax
- mov rax,rbp
- adc r10,rdx
- mov rdx,rbp
- adc r8,0
-
- shl rax,32
- shr rdx,32
- sub r11,rax
- mov rax,QWORD PTR[8+rbx]
- sbb rbp,rdx
-
- add r11,r8
- adc r12,rbp
- adc r13,0
-
-
- mov rcx,rax
- mul QWORD PTR[rsi]
- add r9,rax
- mov rax,rcx
- adc rdx,0
- mov rbp,rdx
-
- mul QWORD PTR[8+rsi]
- add r10,rbp
- adc rdx,0
- add r10,rax
- mov rax,rcx
- adc rdx,0
- mov rbp,rdx
-
- mul QWORD PTR[16+rsi]
- add r11,rbp
- adc rdx,0
- add r11,rax
- mov rax,rcx
- adc rdx,0
-
- mov rcx,r9
- imul r9,r15
-
- mov rbp,rdx
- mul QWORD PTR[24+rsi]
- add r12,rbp
- adc rdx,0
- xor r8,r8
- add r12,rax
- mov rax,r9
- adc r13,rdx
- adc r8,0
-
-
- mul QWORD PTR[r14]
- mov rbp,r9
- add rcx,rax
- mov rax,r9
- adc rcx,rdx
-
- sub r11,r9
- sbb r9,0
-
- mul QWORD PTR[8+r14]
- add r10,rcx
- adc rdx,0
- add r10,rax
- mov rax,rbp
- adc r11,rdx
- mov rdx,rbp
- adc r9,0
-
- shl rax,32
- shr rdx,32
- sub r12,rax
- mov rax,QWORD PTR[16+rbx]
- sbb rbp,rdx
-
- add r12,r9
- adc r13,rbp
- adc r8,0
-
-
- mov rcx,rax
- mul QWORD PTR[rsi]
- add r10,rax
- mov rax,rcx
- adc rdx,0
- mov rbp,rdx
-
- mul QWORD PTR[8+rsi]
- add r11,rbp
- adc rdx,0
- add r11,rax
- mov rax,rcx
- adc rdx,0
- mov rbp,rdx
-
- mul QWORD PTR[16+rsi]
- add r12,rbp
- adc rdx,0
- add r12,rax
- mov rax,rcx
- adc rdx,0
-
- mov rcx,r10
- imul r10,r15
-
- mov rbp,rdx
- mul QWORD PTR[24+rsi]
- add r13,rbp
- adc rdx,0
- xor r9,r9
- add r13,rax
- mov rax,r10
- adc r8,rdx
- adc r9,0
-
-
- mul QWORD PTR[r14]
- mov rbp,r10
- add rcx,rax
- mov rax,r10
- adc rcx,rdx
-
- sub r12,r10
- sbb r10,0
-
- mul QWORD PTR[8+r14]
- add r11,rcx
- adc rdx,0
- add r11,rax
- mov rax,rbp
- adc r12,rdx
- mov rdx,rbp
- adc r10,0
-
- shl rax,32
- shr rdx,32
- sub r13,rax
- mov rax,QWORD PTR[24+rbx]
- sbb rbp,rdx
-
- add r13,r10
- adc r8,rbp
- adc r9,0
-
-
- mov rcx,rax
- mul QWORD PTR[rsi]
- add r11,rax
- mov rax,rcx
- adc rdx,0
- mov rbp,rdx
-
- mul QWORD PTR[8+rsi]
- add r12,rbp
- adc rdx,0
- add r12,rax
- mov rax,rcx
- adc rdx,0
- mov rbp,rdx
-
- mul QWORD PTR[16+rsi]
- add r13,rbp
- adc rdx,0
- add r13,rax
- mov rax,rcx
- adc rdx,0
-
- mov rcx,r11
- imul r11,r15
-
- mov rbp,rdx
- mul QWORD PTR[24+rsi]
- add r8,rbp
- adc rdx,0
- xor r10,r10
- add r8,rax
- mov rax,r11
- adc r9,rdx
- adc r10,0
-
-
- mul QWORD PTR[r14]
- mov rbp,r11
- add rcx,rax
- mov rax,r11
- adc rcx,rdx
-
- sub r13,r11
- sbb r11,0
-
- mul QWORD PTR[8+r14]
- add r12,rcx
- adc rdx,0
- add r12,rax
- mov rax,rbp
- adc r13,rdx
- mov rdx,rbp
- adc r11,0
-
- shl rax,32
- shr rdx,32
- sub r8,rax
- sbb rbp,rdx
-
- add r8,r11
- adc r9,rbp
- adc r10,0
-
-
- mov rsi,r12
- sub r12,QWORD PTR[r14]
- mov r11,r13
- sbb r13,QWORD PTR[8+r14]
- mov rcx,r8
- sbb r8,QWORD PTR[16+r14]
- mov rbp,r9
- sbb r9,QWORD PTR[24+r14]
- sbb r10,0
-
- cmovc r12,rsi
- cmovc r13,r11
- cmovc r8,rcx
- cmovc r9,rbp
-
- mov QWORD PTR[rdi],r12
- mov QWORD PTR[8+rdi],r13
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
-
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbx,QWORD PTR[32+rsp]
-
- mov rbp,QWORD PTR[40+rsp]
-
- lea rsp,QWORD PTR[48+rsp]
-
-$L$ord_mul_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_ord_mul_mont::
-ecp_nistz256_ord_mul_mont ENDP
-
-
-
-
-
-
-
-PUBLIC ecp_nistz256_ord_sqr_mont
-
-ALIGN 32
-ecp_nistz256_ord_sqr_mont PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_ord_sqr_mont::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- mov ecx,080100h
- and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- cmp ecx,080100h
- je $L$ecp_nistz256_ord_sqr_montx
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$ord_sqr_body::
-
- mov r8,QWORD PTR[rsi]
- mov rax,QWORD PTR[8+rsi]
- mov r14,QWORD PTR[16+rsi]
- mov r15,QWORD PTR[24+rsi]
- lea rsi,QWORD PTR[$L$ord]
- mov rbx,rdx
- jmp $L$oop_ord_sqr
-
-ALIGN 32
-$L$oop_ord_sqr::
-
- mov rbp,rax
- mul r8
- mov r9,rax
-DB 102,72,15,110,205
- mov rax,r14
- mov r10,rdx
-
- mul r8
- add r10,rax
- mov rax,r15
-DB 102,73,15,110,214
- adc rdx,0
- mov r11,rdx
-
- mul r8
- add r11,rax
- mov rax,r15
-DB 102,73,15,110,223
- adc rdx,0
- mov r12,rdx
-
-
- mul r14
- mov r13,rax
- mov rax,r14
- mov r14,rdx
-
-
- mul rbp
- add r11,rax
- mov rax,r15
- adc rdx,0
- mov r15,rdx
-
- mul rbp
- add r12,rax
- adc rdx,0
-
- add r12,r15
- adc r13,rdx
- adc r14,0
-
-
- xor r15,r15
- mov rax,r8
- add r9,r9
- adc r10,r10
- adc r11,r11
- adc r12,r12
- adc r13,r13
- adc r14,r14
- adc r15,0
-
-
- mul rax
- mov r8,rax
-DB 102,72,15,126,200
- mov rbp,rdx
-
- mul rax
- add r9,rbp
- adc r10,rax
-DB 102,72,15,126,208
- adc rdx,0
- mov rbp,rdx
-
- mul rax
- add r11,rbp
- adc r12,rax
-DB 102,72,15,126,216
- adc rdx,0
- mov rbp,rdx
-
- mov rcx,r8
- imul r8,QWORD PTR[32+rsi]
-
- mul rax
- add r13,rbp
- adc r14,rax
- mov rax,QWORD PTR[rsi]
- adc r15,rdx
-
-
- mul r8
- mov rbp,r8
- add rcx,rax
- mov rax,QWORD PTR[8+rsi]
- adc rcx,rdx
-
- sub r10,r8
- sbb rbp,0
-
- mul r8
- add r9,rcx
- adc rdx,0
- add r9,rax
- mov rax,r8
- adc r10,rdx
- mov rdx,r8
- adc rbp,0
-
- mov rcx,r9
- imul r9,QWORD PTR[32+rsi]
-
- shl rax,32
- shr rdx,32
- sub r11,rax
- mov rax,QWORD PTR[rsi]
- sbb r8,rdx
-
- add r11,rbp
- adc r8,0
-
-
- mul r9
- mov rbp,r9
- add rcx,rax
- mov rax,QWORD PTR[8+rsi]
- adc rcx,rdx
-
- sub r11,r9
- sbb rbp,0
-
- mul r9
- add r10,rcx
- adc rdx,0
- add r10,rax
- mov rax,r9
- adc r11,rdx
- mov rdx,r9
- adc rbp,0
-
- mov rcx,r10
- imul r10,QWORD PTR[32+rsi]
-
- shl rax,32
- shr rdx,32
- sub r8,rax
- mov rax,QWORD PTR[rsi]
- sbb r9,rdx
-
- add r8,rbp
- adc r9,0
-
-
- mul r10
- mov rbp,r10
- add rcx,rax
- mov rax,QWORD PTR[8+rsi]
- adc rcx,rdx
-
- sub r8,r10
- sbb rbp,0
-
- mul r10
- add r11,rcx
- adc rdx,0
- add r11,rax
- mov rax,r10
- adc r8,rdx
- mov rdx,r10
- adc rbp,0
-
- mov rcx,r11
- imul r11,QWORD PTR[32+rsi]
-
- shl rax,32
- shr rdx,32
- sub r9,rax
- mov rax,QWORD PTR[rsi]
- sbb r10,rdx
-
- add r9,rbp
- adc r10,0
-
-
- mul r11
- mov rbp,r11
- add rcx,rax
- mov rax,QWORD PTR[8+rsi]
- adc rcx,rdx
-
- sub r9,r11
- sbb rbp,0
-
- mul r11
- add r8,rcx
- adc rdx,0
- add r8,rax
- mov rax,r11
- adc r9,rdx
- mov rdx,r11
- adc rbp,0
-
- shl rax,32
- shr rdx,32
- sub r10,rax
- sbb r11,rdx
-
- add r10,rbp
- adc r11,0
-
-
- xor rdx,rdx
- add r8,r12
- adc r9,r13
- mov r12,r8
- adc r10,r14
- adc r11,r15
- mov rax,r9
- adc rdx,0
-
-
- sub r8,QWORD PTR[rsi]
- mov r14,r10
- sbb r9,QWORD PTR[8+rsi]
- sbb r10,QWORD PTR[16+rsi]
- mov r15,r11
- sbb r11,QWORD PTR[24+rsi]
- sbb rdx,0
-
- cmovc r8,r12
- cmovnc rax,r9
- cmovnc r14,r10
- cmovnc r15,r11
-
- dec rbx
- jnz $L$oop_ord_sqr
-
- mov QWORD PTR[rdi],r8
- mov QWORD PTR[8+rdi],rax
- pxor xmm1,xmm1
- mov QWORD PTR[16+rdi],r14
- pxor xmm2,xmm2
- mov QWORD PTR[24+rdi],r15
- pxor xmm3,xmm3
-
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbx,QWORD PTR[32+rsp]
-
- mov rbp,QWORD PTR[40+rsp]
-
- lea rsp,QWORD PTR[48+rsp]
-
-$L$ord_sqr_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_ord_sqr_mont::
-ecp_nistz256_ord_sqr_mont ENDP
-
-
-ALIGN 32
-ecp_nistz256_ord_mul_montx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_ord_mul_montx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$ecp_nistz256_ord_mul_montx::
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$ord_mulx_body::
-
- mov rbx,rdx
- mov rdx,QWORD PTR[rdx]
- mov r9,QWORD PTR[rsi]
- mov r10,QWORD PTR[8+rsi]
- mov r11,QWORD PTR[16+rsi]
- mov r12,QWORD PTR[24+rsi]
- lea rsi,QWORD PTR[((-128))+rsi]
- lea r14,QWORD PTR[(($L$ord-128))]
- mov r15,QWORD PTR[$L$ordK]
-
-
- mulx r9,r8,r9
- mulx r10,rcx,r10
- mulx r11,rbp,r11
- add r9,rcx
- mulx r12,rcx,r12
- mov rdx,r8
- mulx rax,rdx,r15
- adc r10,rbp
- adc r11,rcx
- adc r12,0
-
-
- xor r13,r13
- mulx rbp,rcx,QWORD PTR[((0+128))+r14]
- adcx r8,rcx
- adox r9,rbp
-
- mulx rbp,rcx,QWORD PTR[((8+128))+r14]
- adcx r9,rcx
- adox r10,rbp
-
- mulx rbp,rcx,QWORD PTR[((16+128))+r14]
- adcx r10,rcx
- adox r11,rbp
-
- mulx rbp,rcx,QWORD PTR[((24+128))+r14]
- mov rdx,QWORD PTR[8+rbx]
- adcx r11,rcx
- adox r12,rbp
- adcx r12,r8
- adox r13,r8
- adc r13,0
-
-
- mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
- adcx r9,rcx
- adox r10,rbp
-
- mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
- adcx r10,rcx
- adox r11,rbp
-
- mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
- mov rdx,r9
- mulx rax,rdx,r15
- adcx r12,rcx
- adox r13,rbp
-
- adcx r13,r8
- adox r8,r8
- adc r8,0
-
-
- mulx rbp,rcx,QWORD PTR[((0+128))+r14]
- adcx r9,rcx
- adox r10,rbp
-
- mulx rbp,rcx,QWORD PTR[((8+128))+r14]
- adcx r10,rcx
- adox r11,rbp
-
- mulx rbp,rcx,QWORD PTR[((16+128))+r14]
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,QWORD PTR[((24+128))+r14]
- mov rdx,QWORD PTR[16+rbx]
- adcx r12,rcx
- adox r13,rbp
- adcx r13,r9
- adox r8,r9
- adc r8,0
-
-
- mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
- adcx r10,rcx
- adox r11,rbp
-
- mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
- adcx r12,rcx
- adox r13,rbp
-
- mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
- mov rdx,r10
- mulx rax,rdx,r15
- adcx r13,rcx
- adox r8,rbp
-
- adcx r8,r9
- adox r9,r9
- adc r9,0
-
-
- mulx rbp,rcx,QWORD PTR[((0+128))+r14]
- adcx r10,rcx
- adox r11,rbp
-
- mulx rbp,rcx,QWORD PTR[((8+128))+r14]
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,QWORD PTR[((16+128))+r14]
- adcx r12,rcx
- adox r13,rbp
-
- mulx rbp,rcx,QWORD PTR[((24+128))+r14]
- mov rdx,QWORD PTR[24+rbx]
- adcx r13,rcx
- adox r8,rbp
- adcx r8,r10
- adox r9,r10
- adc r9,0
-
-
- mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
- adcx r12,rcx
- adox r13,rbp
-
- mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
- adcx r13,rcx
- adox r8,rbp
-
- mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
- mov rdx,r11
- mulx rax,rdx,r15
- adcx r8,rcx
- adox r9,rbp
-
- adcx r9,r10
- adox r10,r10
- adc r10,0
-
-
- mulx rbp,rcx,QWORD PTR[((0+128))+r14]
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,QWORD PTR[((8+128))+r14]
- adcx r12,rcx
- adox r13,rbp
-
- mulx rbp,rcx,QWORD PTR[((16+128))+r14]
- adcx r13,rcx
- adox r8,rbp
-
- mulx rbp,rcx,QWORD PTR[((24+128))+r14]
- lea r14,QWORD PTR[128+r14]
- mov rbx,r12
- adcx r8,rcx
- adox r9,rbp
- mov rdx,r13
- adcx r9,r11
- adox r10,r11
- adc r10,0
-
-
-
- mov rcx,r8
- sub r12,QWORD PTR[r14]
- sbb r13,QWORD PTR[8+r14]
- sbb r8,QWORD PTR[16+r14]
- mov rbp,r9
- sbb r9,QWORD PTR[24+r14]
- sbb r10,0
-
- cmovc r12,rbx
- cmovc r13,rdx
- cmovc r8,rcx
- cmovc r9,rbp
-
- mov QWORD PTR[rdi],r12
- mov QWORD PTR[8+rdi],r13
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
-
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbx,QWORD PTR[32+rsp]
-
- mov rbp,QWORD PTR[40+rsp]
-
- lea rsp,QWORD PTR[48+rsp]
-
-$L$ord_mulx_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_ord_mul_montx::
-ecp_nistz256_ord_mul_montx ENDP
-
-
-ALIGN 32
-ecp_nistz256_ord_sqr_montx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_ord_sqr_montx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$ecp_nistz256_ord_sqr_montx::
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$ord_sqrx_body::
-
- mov rbx,rdx
- mov rdx,QWORD PTR[rsi]
- mov r14,QWORD PTR[8+rsi]
- mov r15,QWORD PTR[16+rsi]
- mov r8,QWORD PTR[24+rsi]
- lea rsi,QWORD PTR[$L$ord]
- jmp $L$oop_ord_sqrx
-
-ALIGN 32
-$L$oop_ord_sqrx::
- mulx r10,r9,r14
- mulx r11,rcx,r15
- mov rax,rdx
-DB 102,73,15,110,206
- mulx r12,rbp,r8
- mov rdx,r14
- add r10,rcx
-DB 102,73,15,110,215
- adc r11,rbp
- adc r12,0
- xor r13,r13
-
- mulx rbp,rcx,r15
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,r8
- mov rdx,r15
- adcx r12,rcx
- adox r13,rbp
- adc r13,0
-
- mulx r14,rcx,r8
- mov rdx,rax
-DB 102,73,15,110,216
- xor r15,r15
- adcx r9,r9
- adox r13,rcx
- adcx r10,r10
- adox r14,r15
-
-
- mulx rbp,r8,rdx
-DB 102,72,15,126,202
- adcx r11,r11
- adox r9,rbp
- adcx r12,r12
- mulx rax,rcx,rdx
-DB 102,72,15,126,210
- adcx r13,r13
- adox r10,rcx
- adcx r14,r14
- mulx rbp,rcx,rdx
-DB 067h
-DB 102,72,15,126,218
- adox r11,rax
- adcx r15,r15
- adox r12,rcx
- adox r13,rbp
- mulx rax,rcx,rdx
- adox r14,rcx
- adox r15,rax
-
-
- mov rdx,r8
- mulx rcx,rdx,QWORD PTR[32+rsi]
-
- xor rax,rax
- mulx rbp,rcx,QWORD PTR[rsi]
- adcx r8,rcx
- adox r9,rbp
- mulx rbp,rcx,QWORD PTR[8+rsi]
- adcx r9,rcx
- adox r10,rbp
- mulx rbp,rcx,QWORD PTR[16+rsi]
- adcx r10,rcx
- adox r11,rbp
- mulx rbp,rcx,QWORD PTR[24+rsi]
- adcx r11,rcx
- adox r8,rbp
- adcx r8,rax
-
-
- mov rdx,r9
- mulx rcx,rdx,QWORD PTR[32+rsi]
-
- mulx rbp,rcx,QWORD PTR[rsi]
- adox r9,rcx
- adcx r10,rbp
- mulx rbp,rcx,QWORD PTR[8+rsi]
- adox r10,rcx
- adcx r11,rbp
- mulx rbp,rcx,QWORD PTR[16+rsi]
- adox r11,rcx
- adcx r8,rbp
- mulx rbp,rcx,QWORD PTR[24+rsi]
- adox r8,rcx
- adcx r9,rbp
- adox r9,rax
-
-
- mov rdx,r10
- mulx rcx,rdx,QWORD PTR[32+rsi]
-
- mulx rbp,rcx,QWORD PTR[rsi]
- adcx r10,rcx
- adox r11,rbp
- mulx rbp,rcx,QWORD PTR[8+rsi]
- adcx r11,rcx
- adox r8,rbp
- mulx rbp,rcx,QWORD PTR[16+rsi]
- adcx r8,rcx
- adox r9,rbp
- mulx rbp,rcx,QWORD PTR[24+rsi]
- adcx r9,rcx
- adox r10,rbp
- adcx r10,rax
-
-
- mov rdx,r11
- mulx rcx,rdx,QWORD PTR[32+rsi]
-
- mulx rbp,rcx,QWORD PTR[rsi]
- adox r11,rcx
- adcx r8,rbp
- mulx rbp,rcx,QWORD PTR[8+rsi]
- adox r8,rcx
- adcx r9,rbp
- mulx rbp,rcx,QWORD PTR[16+rsi]
- adox r9,rcx
- adcx r10,rbp
- mulx rbp,rcx,QWORD PTR[24+rsi]
- adox r10,rcx
- adcx r11,rbp
- adox r11,rax
-
-
- add r12,r8
- adc r9,r13
- mov rdx,r12
- adc r10,r14
- adc r11,r15
- mov r14,r9
- adc rax,0
-
-
- sub r12,QWORD PTR[rsi]
- mov r15,r10
- sbb r9,QWORD PTR[8+rsi]
- sbb r10,QWORD PTR[16+rsi]
- mov r8,r11
- sbb r11,QWORD PTR[24+rsi]
- sbb rax,0
-
- cmovnc rdx,r12
- cmovnc r14,r9
- cmovnc r15,r10
- cmovnc r8,r11
-
- dec rbx
- jnz $L$oop_ord_sqrx
-
- mov QWORD PTR[rdi],rdx
- mov QWORD PTR[8+rdi],r14
- pxor xmm1,xmm1
- mov QWORD PTR[16+rdi],r15
- pxor xmm2,xmm2
- mov QWORD PTR[24+rdi],r8
- pxor xmm3,xmm3
-
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbx,QWORD PTR[32+rsp]
-
- mov rbp,QWORD PTR[40+rsp]
-
- lea rsp,QWORD PTR[48+rsp]
-
-$L$ord_sqrx_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_ord_sqr_montx::
-ecp_nistz256_ord_sqr_montx ENDP
-
-
-
-
-PUBLIC ecp_nistz256_to_mont
-
-ALIGN 32
-ecp_nistz256_to_mont PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_to_mont::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- mov ecx,080100h
- and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- lea rdx,QWORD PTR[$L$RR]
- jmp $L$mul_mont
-
-$L$SEH_end_ecp_nistz256_to_mont::
-ecp_nistz256_to_mont ENDP
-
-
-
-
-
-
-
-PUBLIC ecp_nistz256_mul_mont
-
-ALIGN 32
-ecp_nistz256_mul_mont PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_mul_mont::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- mov ecx,080100h
- and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
-$L$mul_mont::
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$mul_body::
- cmp ecx,080100h
- je $L$mul_montx
- mov rbx,rdx
- mov rax,QWORD PTR[rdx]
- mov r9,QWORD PTR[rsi]
- mov r10,QWORD PTR[8+rsi]
- mov r11,QWORD PTR[16+rsi]
- mov r12,QWORD PTR[24+rsi]
-
- call __ecp_nistz256_mul_montq
- jmp $L$mul_mont_done
-
-ALIGN 32
-$L$mul_montx::
- mov rbx,rdx
- mov rdx,QWORD PTR[rdx]
- mov r9,QWORD PTR[rsi]
- mov r10,QWORD PTR[8+rsi]
- mov r11,QWORD PTR[16+rsi]
- mov r12,QWORD PTR[24+rsi]
- lea rsi,QWORD PTR[((-128))+rsi]
-
- call __ecp_nistz256_mul_montx
-$L$mul_mont_done::
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbx,QWORD PTR[32+rsp]
-
- mov rbp,QWORD PTR[40+rsp]
-
- lea rsp,QWORD PTR[48+rsp]
-
-$L$mul_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_mul_mont::
-ecp_nistz256_mul_mont ENDP
-
-
-ALIGN 32
-__ecp_nistz256_mul_montq PROC PRIVATE
-
-
-
- mov rbp,rax
- mul r9
- mov r14,QWORD PTR[(($L$poly+8))]
- mov r8,rax
- mov rax,rbp
- mov r9,rdx
-
- mul r10
- mov r15,QWORD PTR[(($L$poly+24))]
- add r9,rax
- mov rax,rbp
- adc rdx,0
- mov r10,rdx
-
- mul r11
- add r10,rax
- mov rax,rbp
- adc rdx,0
- mov r11,rdx
-
- mul r12
- add r11,rax
- mov rax,r8
- adc rdx,0
- xor r13,r13
- mov r12,rdx
-
-
-
-
-
-
-
-
-
-
- mov rbp,r8
- shl r8,32
- mul r15
- shr rbp,32
- add r9,r8
- adc r10,rbp
- adc r11,rax
- mov rax,QWORD PTR[8+rbx]
- adc r12,rdx
- adc r13,0
- xor r8,r8
-
-
-
- mov rbp,rax
- mul QWORD PTR[rsi]
- add r9,rax
- mov rax,rbp
- adc rdx,0
- mov rcx,rdx
-
- mul QWORD PTR[8+rsi]
- add r10,rcx
- adc rdx,0
- add r10,rax
- mov rax,rbp
- adc rdx,0
- mov rcx,rdx
-
- mul QWORD PTR[16+rsi]
- add r11,rcx
- adc rdx,0
- add r11,rax
- mov rax,rbp
- adc rdx,0
- mov rcx,rdx
-
- mul QWORD PTR[24+rsi]
- add r12,rcx
- adc rdx,0
- add r12,rax
- mov rax,r9
- adc r13,rdx
- adc r8,0
-
-
-
- mov rbp,r9
- shl r9,32
- mul r15
- shr rbp,32
- add r10,r9
- adc r11,rbp
- adc r12,rax
- mov rax,QWORD PTR[16+rbx]
- adc r13,rdx
- adc r8,0
- xor r9,r9
-
-
-
- mov rbp,rax
- mul QWORD PTR[rsi]
- add r10,rax
- mov rax,rbp
- adc rdx,0
- mov rcx,rdx
-
- mul QWORD PTR[8+rsi]
- add r11,rcx
- adc rdx,0
- add r11,rax
- mov rax,rbp
- adc rdx,0
- mov rcx,rdx
-
- mul QWORD PTR[16+rsi]
- add r12,rcx
- adc rdx,0
- add r12,rax
- mov rax,rbp
- adc rdx,0
- mov rcx,rdx
-
- mul QWORD PTR[24+rsi]
- add r13,rcx
- adc rdx,0
- add r13,rax
- mov rax,r10
- adc r8,rdx
- adc r9,0
-
-
-
- mov rbp,r10
- shl r10,32
- mul r15
- shr rbp,32
- add r11,r10
- adc r12,rbp
- adc r13,rax
- mov rax,QWORD PTR[24+rbx]
- adc r8,rdx
- adc r9,0
- xor r10,r10
-
-
-
- mov rbp,rax
- mul QWORD PTR[rsi]
- add r11,rax
- mov rax,rbp
- adc rdx,0
- mov rcx,rdx
-
- mul QWORD PTR[8+rsi]
- add r12,rcx
- adc rdx,0
- add r12,rax
- mov rax,rbp
- adc rdx,0
- mov rcx,rdx
-
- mul QWORD PTR[16+rsi]
- add r13,rcx
- adc rdx,0
- add r13,rax
- mov rax,rbp
- adc rdx,0
- mov rcx,rdx
-
- mul QWORD PTR[24+rsi]
- add r8,rcx
- adc rdx,0
- add r8,rax
- mov rax,r11
- adc r9,rdx
- adc r10,0
-
-
-
- mov rbp,r11
- shl r11,32
- mul r15
- shr rbp,32
- add r12,r11
- adc r13,rbp
- mov rcx,r12
- adc r8,rax
- adc r9,rdx
- mov rbp,r13
- adc r10,0
-
-
-
- sub r12,-1
- mov rbx,r8
- sbb r13,r14
- sbb r8,0
- mov rdx,r9
- sbb r9,r15
- sbb r10,0
-
- cmovc r12,rcx
- cmovc r13,rbp
- mov QWORD PTR[rdi],r12
- cmovc r8,rbx
- mov QWORD PTR[8+rdi],r13
- cmovc r9,rdx
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_mul_montq ENDP
-
-
-
-
-
-
-
-
-PUBLIC ecp_nistz256_sqr_mont
-
-ALIGN 32
-ecp_nistz256_sqr_mont PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_sqr_mont::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- mov ecx,080100h
- and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$sqr_body::
- cmp ecx,080100h
- je $L$sqr_montx
- mov rax,QWORD PTR[rsi]
- mov r14,QWORD PTR[8+rsi]
- mov r15,QWORD PTR[16+rsi]
- mov r8,QWORD PTR[24+rsi]
-
- call __ecp_nistz256_sqr_montq
- jmp $L$sqr_mont_done
-
-ALIGN 32
-$L$sqr_montx::
- mov rdx,QWORD PTR[rsi]
- mov r14,QWORD PTR[8+rsi]
- mov r15,QWORD PTR[16+rsi]
- mov r8,QWORD PTR[24+rsi]
- lea rsi,QWORD PTR[((-128))+rsi]
-
- call __ecp_nistz256_sqr_montx
-$L$sqr_mont_done::
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbx,QWORD PTR[32+rsp]
-
- mov rbp,QWORD PTR[40+rsp]
-
- lea rsp,QWORD PTR[48+rsp]
-
-$L$sqr_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_sqr_mont::
-ecp_nistz256_sqr_mont ENDP
-
-
-ALIGN 32
-__ecp_nistz256_sqr_montq PROC PRIVATE
-
- mov r13,rax
- mul r14
- mov r9,rax
- mov rax,r15
- mov r10,rdx
-
- mul r13
- add r10,rax
- mov rax,r8
- adc rdx,0
- mov r11,rdx
-
- mul r13
- add r11,rax
- mov rax,r15
- adc rdx,0
- mov r12,rdx
-
-
- mul r14
- add r11,rax
- mov rax,r8
- adc rdx,0
- mov rbp,rdx
-
- mul r14
- add r12,rax
- mov rax,r8
- adc rdx,0
- add r12,rbp
- mov r13,rdx
- adc r13,0
-
-
- mul r15
- xor r15,r15
- add r13,rax
- mov rax,QWORD PTR[rsi]
- mov r14,rdx
- adc r14,0
-
- add r9,r9
- adc r10,r10
- adc r11,r11
- adc r12,r12
- adc r13,r13
- adc r14,r14
- adc r15,0
-
- mul rax
- mov r8,rax
- mov rax,QWORD PTR[8+rsi]
- mov rcx,rdx
-
- mul rax
- add r9,rcx
- adc r10,rax
- mov rax,QWORD PTR[16+rsi]
- adc rdx,0
- mov rcx,rdx
-
- mul rax
- add r11,rcx
- adc r12,rax
- mov rax,QWORD PTR[24+rsi]
- adc rdx,0
- mov rcx,rdx
-
- mul rax
- add r13,rcx
- adc r14,rax
- mov rax,r8
- adc r15,rdx
-
- mov rsi,QWORD PTR[(($L$poly+8))]
- mov rbp,QWORD PTR[(($L$poly+24))]
-
-
-
-
- mov rcx,r8
- shl r8,32
- mul rbp
- shr rcx,32
- add r9,r8
- adc r10,rcx
- adc r11,rax
- mov rax,r9
- adc rdx,0
-
-
-
- mov rcx,r9
- shl r9,32
- mov r8,rdx
- mul rbp
- shr rcx,32
- add r10,r9
- adc r11,rcx
- adc r8,rax
- mov rax,r10
- adc rdx,0
-
-
-
- mov rcx,r10
- shl r10,32
- mov r9,rdx
- mul rbp
- shr rcx,32
- add r11,r10
- adc r8,rcx
- adc r9,rax
- mov rax,r11
- adc rdx,0
-
-
-
- mov rcx,r11
- shl r11,32
- mov r10,rdx
- mul rbp
- shr rcx,32
- add r8,r11
- adc r9,rcx
- adc r10,rax
- adc rdx,0
- xor r11,r11
-
-
-
- add r12,r8
- adc r13,r9
- mov r8,r12
- adc r14,r10
- adc r15,rdx
- mov r9,r13
- adc r11,0
-
- sub r12,-1
- mov r10,r14
- sbb r13,rsi
- sbb r14,0
- mov rcx,r15
- sbb r15,rbp
- sbb r11,0
-
- cmovc r12,r8
- cmovc r13,r9
- mov QWORD PTR[rdi],r12
- cmovc r14,r10
- mov QWORD PTR[8+rdi],r13
- cmovc r15,rcx
- mov QWORD PTR[16+rdi],r14
- mov QWORD PTR[24+rdi],r15
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_sqr_montq ENDP
-
-ALIGN 32
-__ecp_nistz256_mul_montx PROC PRIVATE
-
-
-
- mulx r9,r8,r9
- mulx r10,rcx,r10
- mov r14,32
- xor r13,r13
- mulx r11,rbp,r11
- mov r15,QWORD PTR[(($L$poly+24))]
- adc r9,rcx
- mulx r12,rcx,r12
- mov rdx,r8
- adc r10,rbp
- shlx rbp,r8,r14
- adc r11,rcx
- shrx rcx,r8,r14
- adc r12,0
-
-
-
- add r9,rbp
- adc r10,rcx
-
- mulx rbp,rcx,r15
- mov rdx,QWORD PTR[8+rbx]
- adc r11,rcx
- adc r12,rbp
- adc r13,0
- xor r8,r8
-
-
-
- mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
- adcx r9,rcx
- adox r10,rbp
-
- mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
- adcx r10,rcx
- adox r11,rbp
-
- mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
- mov rdx,r9
- adcx r12,rcx
- shlx rcx,r9,r14
- adox r13,rbp
- shrx rbp,r9,r14
-
- adcx r13,r8
- adox r8,r8
- adc r8,0
-
-
-
- add r10,rcx
- adc r11,rbp
-
- mulx rbp,rcx,r15
- mov rdx,QWORD PTR[16+rbx]
- adc r12,rcx
- adc r13,rbp
- adc r8,0
- xor r9,r9
-
-
-
- mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
- adcx r10,rcx
- adox r11,rbp
-
- mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
- adcx r12,rcx
- adox r13,rbp
-
- mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
- mov rdx,r10
- adcx r13,rcx
- shlx rcx,r10,r14
- adox r8,rbp
- shrx rbp,r10,r14
-
- adcx r8,r9
- adox r9,r9
- adc r9,0
-
-
-
- add r11,rcx
- adc r12,rbp
-
- mulx rbp,rcx,r15
- mov rdx,QWORD PTR[24+rbx]
- adc r13,rcx
- adc r8,rbp
- adc r9,0
- xor r10,r10
-
-
-
- mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
- adcx r12,rcx
- adox r13,rbp
-
- mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
- adcx r13,rcx
- adox r8,rbp
-
- mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
- mov rdx,r11
- adcx r8,rcx
- shlx rcx,r11,r14
- adox r9,rbp
- shrx rbp,r11,r14
-
- adcx r9,r10
- adox r10,r10
- adc r10,0
-
-
-
- add r12,rcx
- adc r13,rbp
-
- mulx rbp,rcx,r15
- mov rbx,r12
- mov r14,QWORD PTR[(($L$poly+8))]
- adc r8,rcx
- mov rdx,r13
- adc r9,rbp
- adc r10,0
-
-
-
- xor eax,eax
- mov rcx,r8
- sbb r12,-1
- sbb r13,r14
- sbb r8,0
- mov rbp,r9
- sbb r9,r15
- sbb r10,0
-
- cmovc r12,rbx
- cmovc r13,rdx
- mov QWORD PTR[rdi],r12
- cmovc r8,rcx
- mov QWORD PTR[8+rdi],r13
- cmovc r9,rbp
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_mul_montx ENDP
-
-
-ALIGN 32
-__ecp_nistz256_sqr_montx PROC PRIVATE
-
- mulx r10,r9,r14
- mulx r11,rcx,r15
- xor eax,eax
- adc r10,rcx
- mulx r12,rbp,r8
- mov rdx,r14
- adc r11,rbp
- adc r12,0
- xor r13,r13
-
-
- mulx rbp,rcx,r15
- adcx r11,rcx
- adox r12,rbp
-
- mulx rbp,rcx,r8
- mov rdx,r15
- adcx r12,rcx
- adox r13,rbp
- adc r13,0
-
-
- mulx r14,rcx,r8
- mov rdx,QWORD PTR[((0+128))+rsi]
- xor r15,r15
- adcx r9,r9
- adox r13,rcx
- adcx r10,r10
- adox r14,r15
-
- mulx rbp,r8,rdx
- mov rdx,QWORD PTR[((8+128))+rsi]
- adcx r11,r11
- adox r9,rbp
- adcx r12,r12
- mulx rax,rcx,rdx
- mov rdx,QWORD PTR[((16+128))+rsi]
- adcx r13,r13
- adox r10,rcx
- adcx r14,r14
-DB 067h
- mulx rbp,rcx,rdx
- mov rdx,QWORD PTR[((24+128))+rsi]
- adox r11,rax
- adcx r15,r15
- adox r12,rcx
- mov rsi,32
- adox r13,rbp
-DB 067h,067h
- mulx rax,rcx,rdx
- mov rdx,QWORD PTR[(($L$poly+24))]
- adox r14,rcx
- shlx rcx,r8,rsi
- adox r15,rax
- shrx rax,r8,rsi
- mov rbp,rdx
-
-
- add r9,rcx
- adc r10,rax
-
- mulx r8,rcx,r8
- adc r11,rcx
- shlx rcx,r9,rsi
- adc r8,0
- shrx rax,r9,rsi
-
-
- add r10,rcx
- adc r11,rax
-
- mulx r9,rcx,r9
- adc r8,rcx
- shlx rcx,r10,rsi
- adc r9,0
- shrx rax,r10,rsi
-
-
- add r11,rcx
- adc r8,rax
-
- mulx r10,rcx,r10
- adc r9,rcx
- shlx rcx,r11,rsi
- adc r10,0
- shrx rax,r11,rsi
-
-
- add r8,rcx
- adc r9,rax
-
- mulx r11,rcx,r11
- adc r10,rcx
- adc r11,0
-
- xor rdx,rdx
- add r12,r8
- mov rsi,QWORD PTR[(($L$poly+8))]
- adc r13,r9
- mov r8,r12
- adc r14,r10
- adc r15,r11
- mov r9,r13
- adc rdx,0
-
- sub r12,-1
- mov r10,r14
- sbb r13,rsi
- sbb r14,0
- mov r11,r15
- sbb r15,rbp
- sbb rdx,0
-
- cmovc r12,r8
- cmovc r13,r9
- mov QWORD PTR[rdi],r12
- cmovc r14,r10
- mov QWORD PTR[8+rdi],r13
- cmovc r15,r11
- mov QWORD PTR[16+rdi],r14
- mov QWORD PTR[24+rdi],r15
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_sqr_montx ENDP
-
-
-
-
-
-
-PUBLIC ecp_nistz256_from_mont
-
-ALIGN 32
-ecp_nistz256_from_mont PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_from_mont::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- push r12
-
- push r13
-
-$L$from_body::
-
- mov rax,QWORD PTR[rsi]
- mov r13,QWORD PTR[(($L$poly+24))]
- mov r9,QWORD PTR[8+rsi]
- mov r10,QWORD PTR[16+rsi]
- mov r11,QWORD PTR[24+rsi]
- mov r8,rax
- mov r12,QWORD PTR[(($L$poly+8))]
-
-
-
- mov rcx,rax
- shl r8,32
- mul r13
- shr rcx,32
- add r9,r8
- adc r10,rcx
- adc r11,rax
- mov rax,r9
- adc rdx,0
-
-
-
- mov rcx,r9
- shl r9,32
- mov r8,rdx
- mul r13
- shr rcx,32
- add r10,r9
- adc r11,rcx
- adc r8,rax
- mov rax,r10
- adc rdx,0
-
-
-
- mov rcx,r10
- shl r10,32
- mov r9,rdx
- mul r13
- shr rcx,32
- add r11,r10
- adc r8,rcx
- adc r9,rax
- mov rax,r11
- adc rdx,0
-
-
-
- mov rcx,r11
- shl r11,32
- mov r10,rdx
- mul r13
- shr rcx,32
- add r8,r11
- adc r9,rcx
- mov rcx,r8
- adc r10,rax
- mov rsi,r9
- adc rdx,0
-
-
-
- sub r8,-1
- mov rax,r10
- sbb r9,r12
- sbb r10,0
- mov r11,rdx
- sbb rdx,r13
- sbb r13,r13
-
- cmovnz r8,rcx
- cmovnz r9,rsi
- mov QWORD PTR[rdi],r8
- cmovnz r10,rax
- mov QWORD PTR[8+rdi],r9
- cmovz r11,rdx
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
-
- mov r13,QWORD PTR[rsp]
-
- mov r12,QWORD PTR[8+rsp]
-
- lea rsp,QWORD PTR[16+rsp]
-
-$L$from_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_from_mont::
-ecp_nistz256_from_mont ENDP
-
-
-PUBLIC ecp_nistz256_scatter_w5
-
-ALIGN 32
-ecp_nistz256_scatter_w5 PROC PUBLIC
-
- lea r8d,DWORD PTR[((-3))+r8*2+r8]
- movdqa xmm0,XMMWORD PTR[rdx]
- shl r8d,5
- movdqa xmm1,XMMWORD PTR[16+rdx]
- movdqa xmm2,XMMWORD PTR[32+rdx]
- movdqa xmm3,XMMWORD PTR[48+rdx]
- movdqa xmm4,XMMWORD PTR[64+rdx]
- movdqa xmm5,XMMWORD PTR[80+rdx]
- movdqa XMMWORD PTR[r8*1+rcx],xmm0
- movdqa XMMWORD PTR[16+r8*1+rcx],xmm1
- movdqa XMMWORD PTR[32+r8*1+rcx],xmm2
- movdqa XMMWORD PTR[48+r8*1+rcx],xmm3
- movdqa XMMWORD PTR[64+r8*1+rcx],xmm4
- movdqa XMMWORD PTR[80+r8*1+rcx],xmm5
-
- DB 0F3h,0C3h ;repret
-
-ecp_nistz256_scatter_w5 ENDP
-
-
-
-PUBLIC ecp_nistz256_gather_w5
-
-ALIGN 32
-ecp_nistz256_gather_w5 PROC PUBLIC
-
- mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- test eax,32
- jnz $L$avx2_gather_w5
- lea rax,QWORD PTR[((-136))+rsp]
-$L$SEH_begin_ecp_nistz256_gather_w5::
-DB 048h,08dh,060h,0e0h
-DB 00fh,029h,070h,0e0h
-DB 00fh,029h,078h,0f0h
-DB 044h,00fh,029h,000h
-DB 044h,00fh,029h,048h,010h
-DB 044h,00fh,029h,050h,020h
-DB 044h,00fh,029h,058h,030h
-DB 044h,00fh,029h,060h,040h
-DB 044h,00fh,029h,068h,050h
-DB 044h,00fh,029h,070h,060h
-DB 044h,00fh,029h,078h,070h
- movdqa xmm0,XMMWORD PTR[$L$One]
- movd xmm1,r8d
-
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- pxor xmm6,xmm6
- pxor xmm7,xmm7
-
- movdqa xmm8,xmm0
- pshufd xmm1,xmm1,0
-
- mov rax,16
-$L$select_loop_sse_w5::
-
- movdqa xmm15,xmm8
- paddd xmm8,xmm0
- pcmpeqd xmm15,xmm1
-
- movdqa xmm9,XMMWORD PTR[rdx]
- movdqa xmm10,XMMWORD PTR[16+rdx]
- movdqa xmm11,XMMWORD PTR[32+rdx]
- movdqa xmm12,XMMWORD PTR[48+rdx]
- movdqa xmm13,XMMWORD PTR[64+rdx]
- movdqa xmm14,XMMWORD PTR[80+rdx]
- lea rdx,QWORD PTR[96+rdx]
-
- pand xmm9,xmm15
- pand xmm10,xmm15
- por xmm2,xmm9
- pand xmm11,xmm15
- por xmm3,xmm10
- pand xmm12,xmm15
- por xmm4,xmm11
- pand xmm13,xmm15
- por xmm5,xmm12
- pand xmm14,xmm15
- por xmm6,xmm13
- por xmm7,xmm14
-
- dec rax
- jnz $L$select_loop_sse_w5
-
- movdqu XMMWORD PTR[rcx],xmm2
- movdqu XMMWORD PTR[16+rcx],xmm3
- movdqu XMMWORD PTR[32+rcx],xmm4
- movdqu XMMWORD PTR[48+rcx],xmm5
- movdqu XMMWORD PTR[64+rcx],xmm6
- movdqu XMMWORD PTR[80+rcx],xmm7
- movaps xmm6,XMMWORD PTR[rsp]
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps xmm10,XMMWORD PTR[64+rsp]
- movaps xmm11,XMMWORD PTR[80+rsp]
- movaps xmm12,XMMWORD PTR[96+rsp]
- movaps xmm13,XMMWORD PTR[112+rsp]
- movaps xmm14,XMMWORD PTR[128+rsp]
- movaps xmm15,XMMWORD PTR[144+rsp]
- lea rsp,QWORD PTR[168+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_gather_w5::
-ecp_nistz256_gather_w5 ENDP
-
-
-
-PUBLIC ecp_nistz256_scatter_w7
-
-ALIGN 32
-ecp_nistz256_scatter_w7 PROC PUBLIC
-
- movdqu xmm0,XMMWORD PTR[rdx]
- shl r8d,6
- movdqu xmm1,XMMWORD PTR[16+rdx]
- movdqu xmm2,XMMWORD PTR[32+rdx]
- movdqu xmm3,XMMWORD PTR[48+rdx]
- movdqa XMMWORD PTR[r8*1+rcx],xmm0
- movdqa XMMWORD PTR[16+r8*1+rcx],xmm1
- movdqa XMMWORD PTR[32+r8*1+rcx],xmm2
- movdqa XMMWORD PTR[48+r8*1+rcx],xmm3
-
- DB 0F3h,0C3h ;repret
-
-ecp_nistz256_scatter_w7 ENDP
-
-
-
-PUBLIC ecp_nistz256_gather_w7
-
-ALIGN 32
-ecp_nistz256_gather_w7 PROC PUBLIC
-
- mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- test eax,32
- jnz $L$avx2_gather_w7
- lea rax,QWORD PTR[((-136))+rsp]
-$L$SEH_begin_ecp_nistz256_gather_w7::
-DB 048h,08dh,060h,0e0h
-DB 00fh,029h,070h,0e0h
-DB 00fh,029h,078h,0f0h
-DB 044h,00fh,029h,000h
-DB 044h,00fh,029h,048h,010h
-DB 044h,00fh,029h,050h,020h
-DB 044h,00fh,029h,058h,030h
-DB 044h,00fh,029h,060h,040h
-DB 044h,00fh,029h,068h,050h
-DB 044h,00fh,029h,070h,060h
-DB 044h,00fh,029h,078h,070h
- movdqa xmm8,XMMWORD PTR[$L$One]
- movd xmm1,r8d
-
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
-
- movdqa xmm0,xmm8
- pshufd xmm1,xmm1,0
- mov rax,64
-
-$L$select_loop_sse_w7::
- movdqa xmm15,xmm8
- paddd xmm8,xmm0
- movdqa xmm9,XMMWORD PTR[rdx]
- movdqa xmm10,XMMWORD PTR[16+rdx]
- pcmpeqd xmm15,xmm1
- movdqa xmm11,XMMWORD PTR[32+rdx]
- movdqa xmm12,XMMWORD PTR[48+rdx]
- lea rdx,QWORD PTR[64+rdx]
-
- pand xmm9,xmm15
- pand xmm10,xmm15
- por xmm2,xmm9
- pand xmm11,xmm15
- por xmm3,xmm10
- pand xmm12,xmm15
- por xmm4,xmm11
- prefetcht0 [255+rdx]
- por xmm5,xmm12
-
- dec rax
- jnz $L$select_loop_sse_w7
-
- movdqu XMMWORD PTR[rcx],xmm2
- movdqu XMMWORD PTR[16+rcx],xmm3
- movdqu XMMWORD PTR[32+rcx],xmm4
- movdqu XMMWORD PTR[48+rcx],xmm5
- movaps xmm6,XMMWORD PTR[rsp]
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps xmm10,XMMWORD PTR[64+rsp]
- movaps xmm11,XMMWORD PTR[80+rsp]
- movaps xmm12,XMMWORD PTR[96+rsp]
- movaps xmm13,XMMWORD PTR[112+rsp]
- movaps xmm14,XMMWORD PTR[128+rsp]
- movaps xmm15,XMMWORD PTR[144+rsp]
- lea rsp,QWORD PTR[168+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_gather_w7::
-ecp_nistz256_gather_w7 ENDP
-
-
-
-ALIGN 32
-ecp_nistz256_avx2_gather_w5 PROC PRIVATE
-
-$L$avx2_gather_w5::
- vzeroupper
- lea rax,QWORD PTR[((-136))+rsp]
- mov r11,rsp
-$L$SEH_begin_ecp_nistz256_avx2_gather_w5::
-DB 048h,08dh,060h,0e0h
-DB 0c5h,0f8h,029h,070h,0e0h
-DB 0c5h,0f8h,029h,078h,0f0h
-DB 0c5h,078h,029h,040h,000h
-DB 0c5h,078h,029h,048h,010h
-DB 0c5h,078h,029h,050h,020h
-DB 0c5h,078h,029h,058h,030h
-DB 0c5h,078h,029h,060h,040h
-DB 0c5h,078h,029h,068h,050h
-DB 0c5h,078h,029h,070h,060h
-DB 0c5h,078h,029h,078h,070h
- vmovdqa ymm0,YMMWORD PTR[$L$Two]
-
- vpxor ymm2,ymm2,ymm2
- vpxor ymm3,ymm3,ymm3
- vpxor ymm4,ymm4,ymm4
-
- vmovdqa ymm5,YMMWORD PTR[$L$One]
- vmovdqa ymm10,YMMWORD PTR[$L$Two]
-
- vmovd xmm1,r8d
- vpermd ymm1,ymm2,ymm1
-
- mov rax,8
-$L$select_loop_avx2_w5::
-
- vmovdqa ymm6,YMMWORD PTR[rdx]
- vmovdqa ymm7,YMMWORD PTR[32+rdx]
- vmovdqa ymm8,YMMWORD PTR[64+rdx]
-
- vmovdqa ymm11,YMMWORD PTR[96+rdx]
- vmovdqa ymm12,YMMWORD PTR[128+rdx]
- vmovdqa ymm13,YMMWORD PTR[160+rdx]
-
- vpcmpeqd ymm9,ymm5,ymm1
- vpcmpeqd ymm14,ymm10,ymm1
-
- vpaddd ymm5,ymm5,ymm0
- vpaddd ymm10,ymm10,ymm0
- lea rdx,QWORD PTR[192+rdx]
-
- vpand ymm6,ymm6,ymm9
- vpand ymm7,ymm7,ymm9
- vpand ymm8,ymm8,ymm9
- vpand ymm11,ymm11,ymm14
- vpand ymm12,ymm12,ymm14
- vpand ymm13,ymm13,ymm14
-
- vpxor ymm2,ymm2,ymm6
- vpxor ymm3,ymm3,ymm7
- vpxor ymm4,ymm4,ymm8
- vpxor ymm2,ymm2,ymm11
- vpxor ymm3,ymm3,ymm12
- vpxor ymm4,ymm4,ymm13
-
- dec rax
- jnz $L$select_loop_avx2_w5
-
- vmovdqu YMMWORD PTR[rcx],ymm2
- vmovdqu YMMWORD PTR[32+rcx],ymm3
- vmovdqu YMMWORD PTR[64+rcx],ymm4
- vzeroupper
- movaps xmm6,XMMWORD PTR[rsp]
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps xmm10,XMMWORD PTR[64+rsp]
- movaps xmm11,XMMWORD PTR[80+rsp]
- movaps xmm12,XMMWORD PTR[96+rsp]
- movaps xmm13,XMMWORD PTR[112+rsp]
- movaps xmm14,XMMWORD PTR[128+rsp]
- movaps xmm15,XMMWORD PTR[144+rsp]
- lea rsp,QWORD PTR[r11]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_avx2_gather_w5::
-ecp_nistz256_avx2_gather_w5 ENDP
-
-
-
-PUBLIC ecp_nistz256_avx2_gather_w7
-
-ALIGN 32
-ecp_nistz256_avx2_gather_w7 PROC PUBLIC
-
-$L$avx2_gather_w7::
- vzeroupper
- mov r11,rsp
- lea rax,QWORD PTR[((-136))+rsp]
-$L$SEH_begin_ecp_nistz256_avx2_gather_w7::
-DB 048h,08dh,060h,0e0h
-DB 0c5h,0f8h,029h,070h,0e0h
-DB 0c5h,0f8h,029h,078h,0f0h
-DB 0c5h,078h,029h,040h,000h
-DB 0c5h,078h,029h,048h,010h
-DB 0c5h,078h,029h,050h,020h
-DB 0c5h,078h,029h,058h,030h
-DB 0c5h,078h,029h,060h,040h
-DB 0c5h,078h,029h,068h,050h
-DB 0c5h,078h,029h,070h,060h
-DB 0c5h,078h,029h,078h,070h
- vmovdqa ymm0,YMMWORD PTR[$L$Three]
-
- vpxor ymm2,ymm2,ymm2
- vpxor ymm3,ymm3,ymm3
-
- vmovdqa ymm4,YMMWORD PTR[$L$One]
- vmovdqa ymm8,YMMWORD PTR[$L$Two]
- vmovdqa ymm12,YMMWORD PTR[$L$Three]
-
- vmovd xmm1,r8d
- vpermd ymm1,ymm2,ymm1
-
-
- mov rax,21
-$L$select_loop_avx2_w7::
-
- vmovdqa ymm5,YMMWORD PTR[rdx]
- vmovdqa ymm6,YMMWORD PTR[32+rdx]
-
- vmovdqa ymm9,YMMWORD PTR[64+rdx]
- vmovdqa ymm10,YMMWORD PTR[96+rdx]
-
- vmovdqa ymm13,YMMWORD PTR[128+rdx]
- vmovdqa ymm14,YMMWORD PTR[160+rdx]
-
- vpcmpeqd ymm7,ymm4,ymm1
- vpcmpeqd ymm11,ymm8,ymm1
- vpcmpeqd ymm15,ymm12,ymm1
-
- vpaddd ymm4,ymm4,ymm0
- vpaddd ymm8,ymm8,ymm0
- vpaddd ymm12,ymm12,ymm0
- lea rdx,QWORD PTR[192+rdx]
-
- vpand ymm5,ymm5,ymm7
- vpand ymm6,ymm6,ymm7
- vpand ymm9,ymm9,ymm11
- vpand ymm10,ymm10,ymm11
- vpand ymm13,ymm13,ymm15
- vpand ymm14,ymm14,ymm15
-
- vpxor ymm2,ymm2,ymm5
- vpxor ymm3,ymm3,ymm6
- vpxor ymm2,ymm2,ymm9
- vpxor ymm3,ymm3,ymm10
- vpxor ymm2,ymm2,ymm13
- vpxor ymm3,ymm3,ymm14
-
- dec rax
- jnz $L$select_loop_avx2_w7
-
-
- vmovdqa ymm5,YMMWORD PTR[rdx]
- vmovdqa ymm6,YMMWORD PTR[32+rdx]
-
- vpcmpeqd ymm7,ymm4,ymm1
-
- vpand ymm5,ymm5,ymm7
- vpand ymm6,ymm6,ymm7
-
- vpxor ymm2,ymm2,ymm5
- vpxor ymm3,ymm3,ymm6
-
- vmovdqu YMMWORD PTR[rcx],ymm2
- vmovdqu YMMWORD PTR[32+rcx],ymm3
- vzeroupper
- movaps xmm6,XMMWORD PTR[rsp]
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps xmm10,XMMWORD PTR[64+rsp]
- movaps xmm11,XMMWORD PTR[80+rsp]
- movaps xmm12,XMMWORD PTR[96+rsp]
- movaps xmm13,XMMWORD PTR[112+rsp]
- movaps xmm14,XMMWORD PTR[128+rsp]
- movaps xmm15,XMMWORD PTR[144+rsp]
- lea rsp,QWORD PTR[r11]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_avx2_gather_w7::
-ecp_nistz256_avx2_gather_w7 ENDP
-
-ALIGN 32
-__ecp_nistz256_add_toq PROC PRIVATE
-
- xor r11,r11
- add r12,QWORD PTR[rbx]
- adc r13,QWORD PTR[8+rbx]
- mov rax,r12
- adc r8,QWORD PTR[16+rbx]
- adc r9,QWORD PTR[24+rbx]
- mov rbp,r13
- adc r11,0
-
- sub r12,-1
- mov rcx,r8
- sbb r13,r14
- sbb r8,0
- mov r10,r9
- sbb r9,r15
- sbb r11,0
-
- cmovc r12,rax
- cmovc r13,rbp
- mov QWORD PTR[rdi],r12
- cmovc r8,rcx
- mov QWORD PTR[8+rdi],r13
- cmovc r9,r10
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_add_toq ENDP
-
-
-ALIGN 32
-__ecp_nistz256_sub_fromq PROC PRIVATE
-
- sub r12,QWORD PTR[rbx]
- sbb r13,QWORD PTR[8+rbx]
- mov rax,r12
- sbb r8,QWORD PTR[16+rbx]
- sbb r9,QWORD PTR[24+rbx]
- mov rbp,r13
- sbb r11,r11
-
- add r12,-1
- mov rcx,r8
- adc r13,r14
- adc r8,0
- mov r10,r9
- adc r9,r15
- test r11,r11
-
- cmovz r12,rax
- cmovz r13,rbp
- mov QWORD PTR[rdi],r12
- cmovz r8,rcx
- mov QWORD PTR[8+rdi],r13
- cmovz r9,r10
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_sub_fromq ENDP
-
-
-ALIGN 32
-__ecp_nistz256_subq PROC PRIVATE
-
- sub rax,r12
- sbb rbp,r13
- mov r12,rax
- sbb rcx,r8
- sbb r10,r9
- mov r13,rbp
- sbb r11,r11
-
- add rax,-1
- mov r8,rcx
- adc rbp,r14
- adc rcx,0
- mov r9,r10
- adc r10,r15
- test r11,r11
-
- cmovnz r12,rax
- cmovnz r13,rbp
- cmovnz r8,rcx
- cmovnz r9,r10
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_subq ENDP
-
-
-ALIGN 32
-__ecp_nistz256_mul_by_2q PROC PRIVATE
-
- xor r11,r11
- add r12,r12
- adc r13,r13
- mov rax,r12
- adc r8,r8
- adc r9,r9
- mov rbp,r13
- adc r11,0
-
- sub r12,-1
- mov rcx,r8
- sbb r13,r14
- sbb r8,0
- mov r10,r9
- sbb r9,r15
- sbb r11,0
-
- cmovc r12,rax
- cmovc r13,rbp
- mov QWORD PTR[rdi],r12
- cmovc r8,rcx
- mov QWORD PTR[8+rdi],r13
- cmovc r9,r10
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_mul_by_2q ENDP
-PUBLIC ecp_nistz256_point_double
-
-ALIGN 32
-ecp_nistz256_point_double PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_point_double::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- mov ecx,080100h
- and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- cmp ecx,080100h
- je $L$point_doublex
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,32*5+8
-
-$L$point_doubleq_body::
-
-$L$point_double_shortcutq::
- movdqu xmm0,XMMWORD PTR[rsi]
- mov rbx,rsi
- movdqu xmm1,XMMWORD PTR[16+rsi]
- mov r12,QWORD PTR[((32+0))+rsi]
- mov r13,QWORD PTR[((32+8))+rsi]
- mov r8,QWORD PTR[((32+16))+rsi]
- mov r9,QWORD PTR[((32+24))+rsi]
- mov r14,QWORD PTR[(($L$poly+8))]
- mov r15,QWORD PTR[(($L$poly+24))]
- movdqa XMMWORD PTR[96+rsp],xmm0
- movdqa XMMWORD PTR[(96+16)+rsp],xmm1
- lea r10,QWORD PTR[32+rdi]
- lea r11,QWORD PTR[64+rdi]
-DB 102,72,15,110,199
-DB 102,73,15,110,202
-DB 102,73,15,110,211
-
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_mul_by_2q
-
- mov rax,QWORD PTR[((64+0))+rsi]
- mov r14,QWORD PTR[((64+8))+rsi]
- mov r15,QWORD PTR[((64+16))+rsi]
- mov r8,QWORD PTR[((64+24))+rsi]
- lea rsi,QWORD PTR[((64-0))+rsi]
- lea rdi,QWORD PTR[64+rsp]
- call __ecp_nistz256_sqr_montq
-
- mov rax,QWORD PTR[((0+0))+rsp]
- mov r14,QWORD PTR[((8+0))+rsp]
- lea rsi,QWORD PTR[((0+0))+rsp]
- mov r15,QWORD PTR[((16+0))+rsp]
- mov r8,QWORD PTR[((24+0))+rsp]
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_sqr_montq
-
- mov rax,QWORD PTR[32+rbx]
- mov r9,QWORD PTR[((64+0))+rbx]
- mov r10,QWORD PTR[((64+8))+rbx]
- mov r11,QWORD PTR[((64+16))+rbx]
- mov r12,QWORD PTR[((64+24))+rbx]
- lea rsi,QWORD PTR[((64-0))+rbx]
- lea rbx,QWORD PTR[32+rbx]
-DB 102,72,15,126,215
- call __ecp_nistz256_mul_montq
- call __ecp_nistz256_mul_by_2q
-
- mov r12,QWORD PTR[((96+0))+rsp]
- mov r13,QWORD PTR[((96+8))+rsp]
- lea rbx,QWORD PTR[64+rsp]
- mov r8,QWORD PTR[((96+16))+rsp]
- mov r9,QWORD PTR[((96+24))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_add_toq
-
- mov r12,QWORD PTR[((96+0))+rsp]
- mov r13,QWORD PTR[((96+8))+rsp]
- lea rbx,QWORD PTR[64+rsp]
- mov r8,QWORD PTR[((96+16))+rsp]
- mov r9,QWORD PTR[((96+24))+rsp]
- lea rdi,QWORD PTR[64+rsp]
- call __ecp_nistz256_sub_fromq
-
- mov rax,QWORD PTR[((0+0))+rsp]
- mov r14,QWORD PTR[((8+0))+rsp]
- lea rsi,QWORD PTR[((0+0))+rsp]
- mov r15,QWORD PTR[((16+0))+rsp]
- mov r8,QWORD PTR[((24+0))+rsp]
-DB 102,72,15,126,207
- call __ecp_nistz256_sqr_montq
- xor r9,r9
- mov rax,r12
- add r12,-1
- mov r10,r13
- adc r13,rsi
- mov rcx,r14
- adc r14,0
- mov r8,r15
- adc r15,rbp
- adc r9,0
- xor rsi,rsi
- test rax,1
-
- cmovz r12,rax
- cmovz r13,r10
- cmovz r14,rcx
- cmovz r15,r8
- cmovz r9,rsi
-
- mov rax,r13
- shr r12,1
- shl rax,63
- mov r10,r14
- shr r13,1
- or r12,rax
- shl r10,63
- mov rcx,r15
- shr r14,1
- or r13,r10
- shl rcx,63
- mov QWORD PTR[rdi],r12
- shr r15,1
- mov QWORD PTR[8+rdi],r13
- shl r9,63
- or r14,rcx
- or r15,r9
- mov QWORD PTR[16+rdi],r14
- mov QWORD PTR[24+rdi],r15
- mov rax,QWORD PTR[64+rsp]
- lea rbx,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((0+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_mul_montq
-
- lea rdi,QWORD PTR[128+rsp]
- call __ecp_nistz256_mul_by_2q
-
- lea rbx,QWORD PTR[32+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_add_toq
-
- mov rax,QWORD PTR[96+rsp]
- lea rbx,QWORD PTR[96+rsp]
- mov r9,QWORD PTR[((0+0))+rsp]
- mov r10,QWORD PTR[((8+0))+rsp]
- lea rsi,QWORD PTR[((0+0))+rsp]
- mov r11,QWORD PTR[((16+0))+rsp]
- mov r12,QWORD PTR[((24+0))+rsp]
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_mul_montq
-
- lea rdi,QWORD PTR[128+rsp]
- call __ecp_nistz256_mul_by_2q
-
- mov rax,QWORD PTR[((0+32))+rsp]
- mov r14,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((0+32))+rsp]
- mov r15,QWORD PTR[((16+32))+rsp]
- mov r8,QWORD PTR[((24+32))+rsp]
-DB 102,72,15,126,199
- call __ecp_nistz256_sqr_montq
-
- lea rbx,QWORD PTR[128+rsp]
- mov r8,r14
- mov r9,r15
- mov r14,rsi
- mov r15,rbp
- call __ecp_nistz256_sub_fromq
-
- mov rax,QWORD PTR[((0+0))+rsp]
- mov rbp,QWORD PTR[((0+8))+rsp]
- mov rcx,QWORD PTR[((0+16))+rsp]
- mov r10,QWORD PTR[((0+24))+rsp]
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_subq
-
- mov rax,QWORD PTR[32+rsp]
- lea rbx,QWORD PTR[32+rsp]
- mov r14,r12
- xor ecx,ecx
- mov QWORD PTR[((0+0))+rsp],r12
- mov r10,r13
- mov QWORD PTR[((0+8))+rsp],r13
- cmovz r11,r8
- mov QWORD PTR[((0+16))+rsp],r8
- lea rsi,QWORD PTR[((0-0))+rsp]
- cmovz r12,r9
- mov QWORD PTR[((0+24))+rsp],r9
- mov r9,r14
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_mul_montq
-
-DB 102,72,15,126,203
-DB 102,72,15,126,207
- call __ecp_nistz256_sub_fromq
-
- lea rsi,QWORD PTR[((160+56))+rsp]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbx,QWORD PTR[((-16))+rsi]
-
- mov rbp,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$point_doubleq_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_point_double::
-ecp_nistz256_point_double ENDP
-PUBLIC ecp_nistz256_point_add
-
-ALIGN 32
-ecp_nistz256_point_add PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_point_add::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- mov ecx,080100h
- and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- cmp ecx,080100h
- je $L$point_addx
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,32*18+8
-
-$L$point_addq_body::
-
- movdqu xmm0,XMMWORD PTR[rsi]
- movdqu xmm1,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
- movdqu xmm3,XMMWORD PTR[48+rsi]
- movdqu xmm4,XMMWORD PTR[64+rsi]
- movdqu xmm5,XMMWORD PTR[80+rsi]
- mov rbx,rsi
- mov rsi,rdx
- movdqa XMMWORD PTR[384+rsp],xmm0
- movdqa XMMWORD PTR[(384+16)+rsp],xmm1
- movdqa XMMWORD PTR[416+rsp],xmm2
- movdqa XMMWORD PTR[(416+16)+rsp],xmm3
- movdqa XMMWORD PTR[448+rsp],xmm4
- movdqa XMMWORD PTR[(448+16)+rsp],xmm5
- por xmm5,xmm4
-
- movdqu xmm0,XMMWORD PTR[rsi]
- pshufd xmm3,xmm5,0b1h
- movdqu xmm1,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
- por xmm5,xmm3
- movdqu xmm3,XMMWORD PTR[48+rsi]
- mov rax,QWORD PTR[((64+0))+rsi]
- mov r14,QWORD PTR[((64+8))+rsi]
- mov r15,QWORD PTR[((64+16))+rsi]
- mov r8,QWORD PTR[((64+24))+rsi]
- movdqa XMMWORD PTR[480+rsp],xmm0
- pshufd xmm4,xmm5,01eh
- movdqa XMMWORD PTR[(480+16)+rsp],xmm1
- movdqu xmm0,XMMWORD PTR[64+rsi]
- movdqu xmm1,XMMWORD PTR[80+rsi]
- movdqa XMMWORD PTR[512+rsp],xmm2
- movdqa XMMWORD PTR[(512+16)+rsp],xmm3
- por xmm5,xmm4
- pxor xmm4,xmm4
- por xmm1,xmm0
-DB 102,72,15,110,199
-
- lea rsi,QWORD PTR[((64-0))+rsi]
- mov QWORD PTR[((544+0))+rsp],rax
- mov QWORD PTR[((544+8))+rsp],r14
- mov QWORD PTR[((544+16))+rsp],r15
- mov QWORD PTR[((544+24))+rsp],r8
- lea rdi,QWORD PTR[96+rsp]
- call __ecp_nistz256_sqr_montq
-
- pcmpeqd xmm5,xmm4
- pshufd xmm4,xmm1,0b1h
- por xmm4,xmm1
- pshufd xmm5,xmm5,0
- pshufd xmm3,xmm4,01eh
- por xmm4,xmm3
- pxor xmm3,xmm3
- pcmpeqd xmm4,xmm3
- pshufd xmm4,xmm4,0
- mov rax,QWORD PTR[((64+0))+rbx]
- mov r14,QWORD PTR[((64+8))+rbx]
- mov r15,QWORD PTR[((64+16))+rbx]
- mov r8,QWORD PTR[((64+24))+rbx]
-DB 102,72,15,110,203
-
- lea rsi,QWORD PTR[((64-0))+rbx]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_sqr_montq
-
- mov rax,QWORD PTR[544+rsp]
- lea rbx,QWORD PTR[544+rsp]
- mov r9,QWORD PTR[((0+96))+rsp]
- mov r10,QWORD PTR[((8+96))+rsp]
- lea rsi,QWORD PTR[((0+96))+rsp]
- mov r11,QWORD PTR[((16+96))+rsp]
- mov r12,QWORD PTR[((24+96))+rsp]
- lea rdi,QWORD PTR[224+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[448+rsp]
- lea rbx,QWORD PTR[448+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((0+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[256+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[416+rsp]
- lea rbx,QWORD PTR[416+rsp]
- mov r9,QWORD PTR[((0+224))+rsp]
- mov r10,QWORD PTR[((8+224))+rsp]
- lea rsi,QWORD PTR[((0+224))+rsp]
- mov r11,QWORD PTR[((16+224))+rsp]
- mov r12,QWORD PTR[((24+224))+rsp]
- lea rdi,QWORD PTR[224+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[512+rsp]
- lea rbx,QWORD PTR[512+rsp]
- mov r9,QWORD PTR[((0+256))+rsp]
- mov r10,QWORD PTR[((8+256))+rsp]
- lea rsi,QWORD PTR[((0+256))+rsp]
- mov r11,QWORD PTR[((16+256))+rsp]
- mov r12,QWORD PTR[((24+256))+rsp]
- lea rdi,QWORD PTR[256+rsp]
- call __ecp_nistz256_mul_montq
-
- lea rbx,QWORD PTR[224+rsp]
- lea rdi,QWORD PTR[64+rsp]
- call __ecp_nistz256_sub_fromq
-
- or r12,r13
- movdqa xmm2,xmm4
- or r12,r8
- or r12,r9
- por xmm2,xmm5
-DB 102,73,15,110,220
-
- mov rax,QWORD PTR[384+rsp]
- lea rbx,QWORD PTR[384+rsp]
- mov r9,QWORD PTR[((0+96))+rsp]
- mov r10,QWORD PTR[((8+96))+rsp]
- lea rsi,QWORD PTR[((0+96))+rsp]
- mov r11,QWORD PTR[((16+96))+rsp]
- mov r12,QWORD PTR[((24+96))+rsp]
- lea rdi,QWORD PTR[160+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[480+rsp]
- lea rbx,QWORD PTR[480+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((0+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[192+rsp]
- call __ecp_nistz256_mul_montq
-
- lea rbx,QWORD PTR[160+rsp]
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_sub_fromq
-
- or r12,r13
- or r12,r8
- or r12,r9
-
-DB 102,73,15,126,208
-DB 102,73,15,126,217
-
- or r12,r8
- or r12,r9
-
-
-DB 03eh
- jnz $L$add_proceedq
-
-$L$add_doubleq::
-DB 102,72,15,126,206
-DB 102,72,15,126,199
- add rsp,416
-
- jmp $L$point_double_shortcutq
-
-
-ALIGN 32
-$L$add_proceedq::
- mov rax,QWORD PTR[((0+64))+rsp]
- mov r14,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((0+64))+rsp]
- mov r15,QWORD PTR[((16+64))+rsp]
- mov r8,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[96+rsp]
- call __ecp_nistz256_sqr_montq
-
- mov rax,QWORD PTR[448+rsp]
- lea rbx,QWORD PTR[448+rsp]
- mov r9,QWORD PTR[((0+0))+rsp]
- mov r10,QWORD PTR[((8+0))+rsp]
- lea rsi,QWORD PTR[((0+0))+rsp]
- mov r11,QWORD PTR[((16+0))+rsp]
- mov r12,QWORD PTR[((24+0))+rsp]
- lea rdi,QWORD PTR[352+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[((0+0))+rsp]
- mov r14,QWORD PTR[((8+0))+rsp]
- lea rsi,QWORD PTR[((0+0))+rsp]
- mov r15,QWORD PTR[((16+0))+rsp]
- mov r8,QWORD PTR[((24+0))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_sqr_montq
-
- mov rax,QWORD PTR[544+rsp]
- lea rbx,QWORD PTR[544+rsp]
- mov r9,QWORD PTR[((0+352))+rsp]
- mov r10,QWORD PTR[((8+352))+rsp]
- lea rsi,QWORD PTR[((0+352))+rsp]
- mov r11,QWORD PTR[((16+352))+rsp]
- mov r12,QWORD PTR[((24+352))+rsp]
- lea rdi,QWORD PTR[352+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[rsp]
- lea rbx,QWORD PTR[rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((0+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[128+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[160+rsp]
- lea rbx,QWORD PTR[160+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((0+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[192+rsp]
- call __ecp_nistz256_mul_montq
-
-
-
-
- xor r11,r11
- add r12,r12
- lea rsi,QWORD PTR[96+rsp]
- adc r13,r13
- mov rax,r12
- adc r8,r8
- adc r9,r9
- mov rbp,r13
- adc r11,0
-
- sub r12,-1
- mov rcx,r8
- sbb r13,r14
- sbb r8,0
- mov r10,r9
- sbb r9,r15
- sbb r11,0
-
- cmovc r12,rax
- mov rax,QWORD PTR[rsi]
- cmovc r13,rbp
- mov rbp,QWORD PTR[8+rsi]
- cmovc r8,rcx
- mov rcx,QWORD PTR[16+rsi]
- cmovc r9,r10
- mov r10,QWORD PTR[24+rsi]
-
- call __ecp_nistz256_subq
-
- lea rbx,QWORD PTR[128+rsp]
- lea rdi,QWORD PTR[288+rsp]
- call __ecp_nistz256_sub_fromq
-
- mov rax,QWORD PTR[((192+0))+rsp]
- mov rbp,QWORD PTR[((192+8))+rsp]
- mov rcx,QWORD PTR[((192+16))+rsp]
- mov r10,QWORD PTR[((192+24))+rsp]
- lea rdi,QWORD PTR[320+rsp]
-
- call __ecp_nistz256_subq
-
- mov QWORD PTR[rdi],r12
- mov QWORD PTR[8+rdi],r13
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
- mov rax,QWORD PTR[128+rsp]
- lea rbx,QWORD PTR[128+rsp]
- mov r9,QWORD PTR[((0+224))+rsp]
- mov r10,QWORD PTR[((8+224))+rsp]
- lea rsi,QWORD PTR[((0+224))+rsp]
- mov r11,QWORD PTR[((16+224))+rsp]
- mov r12,QWORD PTR[((24+224))+rsp]
- lea rdi,QWORD PTR[256+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[320+rsp]
- lea rbx,QWORD PTR[320+rsp]
- mov r9,QWORD PTR[((0+64))+rsp]
- mov r10,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((0+64))+rsp]
- mov r11,QWORD PTR[((16+64))+rsp]
- mov r12,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[320+rsp]
- call __ecp_nistz256_mul_montq
-
- lea rbx,QWORD PTR[256+rsp]
- lea rdi,QWORD PTR[320+rsp]
- call __ecp_nistz256_sub_fromq
-
-DB 102,72,15,126,199
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[352+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((352+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[544+rsp]
- pand xmm3,XMMWORD PTR[((544+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[448+rsp]
- pand xmm3,XMMWORD PTR[((448+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[64+rdi],xmm2
- movdqu XMMWORD PTR[80+rdi],xmm3
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[288+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((288+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[480+rsp]
- pand xmm3,XMMWORD PTR[((480+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[384+rsp]
- pand xmm3,XMMWORD PTR[((384+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[rdi],xmm2
- movdqu XMMWORD PTR[16+rdi],xmm3
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[320+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((320+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[512+rsp]
- pand xmm3,XMMWORD PTR[((512+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[416+rsp]
- pand xmm3,XMMWORD PTR[((416+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu XMMWORD PTR[48+rdi],xmm3
-
-$L$add_doneq::
- lea rsi,QWORD PTR[((576+56))+rsp]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbx,QWORD PTR[((-16))+rsi]
-
- mov rbp,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$point_addq_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_point_add::
-ecp_nistz256_point_add ENDP
-PUBLIC ecp_nistz256_point_add_affine
-
-ALIGN 32
-ecp_nistz256_point_add_affine PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_point_add_affine::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- mov ecx,080100h
- and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- cmp ecx,080100h
- je $L$point_add_affinex
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,32*15+8
-
-$L$add_affineq_body::
-
- movdqu xmm0,XMMWORD PTR[rsi]
- mov rbx,rdx
- movdqu xmm1,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
- movdqu xmm3,XMMWORD PTR[48+rsi]
- movdqu xmm4,XMMWORD PTR[64+rsi]
- movdqu xmm5,XMMWORD PTR[80+rsi]
- mov rax,QWORD PTR[((64+0))+rsi]
- mov r14,QWORD PTR[((64+8))+rsi]
- mov r15,QWORD PTR[((64+16))+rsi]
- mov r8,QWORD PTR[((64+24))+rsi]
- movdqa XMMWORD PTR[320+rsp],xmm0
- movdqa XMMWORD PTR[(320+16)+rsp],xmm1
- movdqa XMMWORD PTR[352+rsp],xmm2
- movdqa XMMWORD PTR[(352+16)+rsp],xmm3
- movdqa XMMWORD PTR[384+rsp],xmm4
- movdqa XMMWORD PTR[(384+16)+rsp],xmm5
- por xmm5,xmm4
-
- movdqu xmm0,XMMWORD PTR[rbx]
- pshufd xmm3,xmm5,0b1h
- movdqu xmm1,XMMWORD PTR[16+rbx]
- movdqu xmm2,XMMWORD PTR[32+rbx]
- por xmm5,xmm3
- movdqu xmm3,XMMWORD PTR[48+rbx]
- movdqa XMMWORD PTR[416+rsp],xmm0
- pshufd xmm4,xmm5,01eh
- movdqa XMMWORD PTR[(416+16)+rsp],xmm1
- por xmm1,xmm0
-DB 102,72,15,110,199
- movdqa XMMWORD PTR[448+rsp],xmm2
- movdqa XMMWORD PTR[(448+16)+rsp],xmm3
- por xmm3,xmm2
- por xmm5,xmm4
- pxor xmm4,xmm4
- por xmm3,xmm1
-
- lea rsi,QWORD PTR[((64-0))+rsi]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_sqr_montq
-
- pcmpeqd xmm5,xmm4
- pshufd xmm4,xmm3,0b1h
- mov rax,QWORD PTR[rbx]
-
- mov r9,r12
- por xmm4,xmm3
- pshufd xmm5,xmm5,0
- pshufd xmm3,xmm4,01eh
- mov r10,r13
- por xmm4,xmm3
- pxor xmm3,xmm3
- mov r11,r14
- pcmpeqd xmm4,xmm3
- pshufd xmm4,xmm4,0
-
- lea rsi,QWORD PTR[((32-0))+rsp]
- mov r12,r15
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_mul_montq
-
- lea rbx,QWORD PTR[320+rsp]
- lea rdi,QWORD PTR[64+rsp]
- call __ecp_nistz256_sub_fromq
-
- mov rax,QWORD PTR[384+rsp]
- lea rbx,QWORD PTR[384+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((0+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[384+rsp]
- lea rbx,QWORD PTR[384+rsp]
- mov r9,QWORD PTR[((0+64))+rsp]
- mov r10,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((0+64))+rsp]
- mov r11,QWORD PTR[((16+64))+rsp]
- mov r12,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[288+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[448+rsp]
- lea rbx,QWORD PTR[448+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((0+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_mul_montq
-
- lea rbx,QWORD PTR[352+rsp]
- lea rdi,QWORD PTR[96+rsp]
- call __ecp_nistz256_sub_fromq
-
- mov rax,QWORD PTR[((0+64))+rsp]
- mov r14,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((0+64))+rsp]
- mov r15,QWORD PTR[((16+64))+rsp]
- mov r8,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[128+rsp]
- call __ecp_nistz256_sqr_montq
-
- mov rax,QWORD PTR[((0+96))+rsp]
- mov r14,QWORD PTR[((8+96))+rsp]
- lea rsi,QWORD PTR[((0+96))+rsp]
- mov r15,QWORD PTR[((16+96))+rsp]
- mov r8,QWORD PTR[((24+96))+rsp]
- lea rdi,QWORD PTR[192+rsp]
- call __ecp_nistz256_sqr_montq
-
- mov rax,QWORD PTR[128+rsp]
- lea rbx,QWORD PTR[128+rsp]
- mov r9,QWORD PTR[((0+64))+rsp]
- mov r10,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((0+64))+rsp]
- mov r11,QWORD PTR[((16+64))+rsp]
- mov r12,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[160+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[320+rsp]
- lea rbx,QWORD PTR[320+rsp]
- mov r9,QWORD PTR[((0+128))+rsp]
- mov r10,QWORD PTR[((8+128))+rsp]
- lea rsi,QWORD PTR[((0+128))+rsp]
- mov r11,QWORD PTR[((16+128))+rsp]
- mov r12,QWORD PTR[((24+128))+rsp]
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_mul_montq
-
-
-
-
- xor r11,r11
- add r12,r12
- lea rsi,QWORD PTR[192+rsp]
- adc r13,r13
- mov rax,r12
- adc r8,r8
- adc r9,r9
- mov rbp,r13
- adc r11,0
-
- sub r12,-1
- mov rcx,r8
- sbb r13,r14
- sbb r8,0
- mov r10,r9
- sbb r9,r15
- sbb r11,0
-
- cmovc r12,rax
- mov rax,QWORD PTR[rsi]
- cmovc r13,rbp
- mov rbp,QWORD PTR[8+rsi]
- cmovc r8,rcx
- mov rcx,QWORD PTR[16+rsi]
- cmovc r9,r10
- mov r10,QWORD PTR[24+rsi]
-
- call __ecp_nistz256_subq
-
- lea rbx,QWORD PTR[160+rsp]
- lea rdi,QWORD PTR[224+rsp]
- call __ecp_nistz256_sub_fromq
-
- mov rax,QWORD PTR[((0+0))+rsp]
- mov rbp,QWORD PTR[((0+8))+rsp]
- mov rcx,QWORD PTR[((0+16))+rsp]
- mov r10,QWORD PTR[((0+24))+rsp]
- lea rdi,QWORD PTR[64+rsp]
-
- call __ecp_nistz256_subq
-
- mov QWORD PTR[rdi],r12
- mov QWORD PTR[8+rdi],r13
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
- mov rax,QWORD PTR[352+rsp]
- lea rbx,QWORD PTR[352+rsp]
- mov r9,QWORD PTR[((0+160))+rsp]
- mov r10,QWORD PTR[((8+160))+rsp]
- lea rsi,QWORD PTR[((0+160))+rsp]
- mov r11,QWORD PTR[((16+160))+rsp]
- mov r12,QWORD PTR[((24+160))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_mul_montq
-
- mov rax,QWORD PTR[96+rsp]
- lea rbx,QWORD PTR[96+rsp]
- mov r9,QWORD PTR[((0+64))+rsp]
- mov r10,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((0+64))+rsp]
- mov r11,QWORD PTR[((16+64))+rsp]
- mov r12,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[64+rsp]
- call __ecp_nistz256_mul_montq
-
- lea rbx,QWORD PTR[32+rsp]
- lea rdi,QWORD PTR[256+rsp]
- call __ecp_nistz256_sub_fromq
-
-DB 102,72,15,126,199
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[288+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((288+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[$L$ONE_mont]
- pand xmm3,XMMWORD PTR[(($L$ONE_mont+16))]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[384+rsp]
- pand xmm3,XMMWORD PTR[((384+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[64+rdi],xmm2
- movdqu XMMWORD PTR[80+rdi],xmm3
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[224+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((224+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[416+rsp]
- pand xmm3,XMMWORD PTR[((416+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[320+rsp]
- pand xmm3,XMMWORD PTR[((320+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[rdi],xmm2
- movdqu XMMWORD PTR[16+rdi],xmm3
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[256+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((256+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[448+rsp]
- pand xmm3,XMMWORD PTR[((448+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[352+rsp]
- pand xmm3,XMMWORD PTR[((352+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu XMMWORD PTR[48+rdi],xmm3
-
- lea rsi,QWORD PTR[((480+56))+rsp]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbx,QWORD PTR[((-16))+rsi]
-
- mov rbp,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$add_affineq_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_point_add_affine::
-ecp_nistz256_point_add_affine ENDP
-
-ALIGN 32
-__ecp_nistz256_add_tox PROC PRIVATE
-
- xor r11,r11
- adc r12,QWORD PTR[rbx]
- adc r13,QWORD PTR[8+rbx]
- mov rax,r12
- adc r8,QWORD PTR[16+rbx]
- adc r9,QWORD PTR[24+rbx]
- mov rbp,r13
- adc r11,0
-
- xor r10,r10
- sbb r12,-1
- mov rcx,r8
- sbb r13,r14
- sbb r8,0
- mov r10,r9
- sbb r9,r15
- sbb r11,0
-
- cmovc r12,rax
- cmovc r13,rbp
- mov QWORD PTR[rdi],r12
- cmovc r8,rcx
- mov QWORD PTR[8+rdi],r13
- cmovc r9,r10
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_add_tox ENDP
-
-
-ALIGN 32
-__ecp_nistz256_sub_fromx PROC PRIVATE
-
- xor r11,r11
- sbb r12,QWORD PTR[rbx]
- sbb r13,QWORD PTR[8+rbx]
- mov rax,r12
- sbb r8,QWORD PTR[16+rbx]
- sbb r9,QWORD PTR[24+rbx]
- mov rbp,r13
- sbb r11,0
-
- xor r10,r10
- adc r12,-1
- mov rcx,r8
- adc r13,r14
- adc r8,0
- mov r10,r9
- adc r9,r15
-
- bt r11,0
- cmovnc r12,rax
- cmovnc r13,rbp
- mov QWORD PTR[rdi],r12
- cmovnc r8,rcx
- mov QWORD PTR[8+rdi],r13
- cmovnc r9,r10
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_sub_fromx ENDP
-
-
-ALIGN 32
-__ecp_nistz256_subx PROC PRIVATE
-
- xor r11,r11
- sbb rax,r12
- sbb rbp,r13
- mov r12,rax
- sbb rcx,r8
- sbb r10,r9
- mov r13,rbp
- sbb r11,0
-
- xor r9,r9
- adc rax,-1
- mov r8,rcx
- adc rbp,r14
- adc rcx,0
- mov r9,r10
- adc r10,r15
-
- bt r11,0
- cmovc r12,rax
- cmovc r13,rbp
- cmovc r8,rcx
- cmovc r9,r10
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_subx ENDP
-
-
-ALIGN 32
-__ecp_nistz256_mul_by_2x PROC PRIVATE
-
- xor r11,r11
- adc r12,r12
- adc r13,r13
- mov rax,r12
- adc r8,r8
- adc r9,r9
- mov rbp,r13
- adc r11,0
-
- xor r10,r10
- sbb r12,-1
- mov rcx,r8
- sbb r13,r14
- sbb r8,0
- mov r10,r9
- sbb r9,r15
- sbb r11,0
-
- cmovc r12,rax
- cmovc r13,rbp
- mov QWORD PTR[rdi],r12
- cmovc r8,rcx
- mov QWORD PTR[8+rdi],r13
- cmovc r9,r10
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
-
- DB 0F3h,0C3h ;repret
-
-__ecp_nistz256_mul_by_2x ENDP
-
-ALIGN 32
-ecp_nistz256_point_doublex PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_point_doublex::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
-$L$point_doublex::
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,32*5+8
-
-$L$point_doublex_body::
-
-$L$point_double_shortcutx::
- movdqu xmm0,XMMWORD PTR[rsi]
- mov rbx,rsi
- movdqu xmm1,XMMWORD PTR[16+rsi]
- mov r12,QWORD PTR[((32+0))+rsi]
- mov r13,QWORD PTR[((32+8))+rsi]
- mov r8,QWORD PTR[((32+16))+rsi]
- mov r9,QWORD PTR[((32+24))+rsi]
- mov r14,QWORD PTR[(($L$poly+8))]
- mov r15,QWORD PTR[(($L$poly+24))]
- movdqa XMMWORD PTR[96+rsp],xmm0
- movdqa XMMWORD PTR[(96+16)+rsp],xmm1
- lea r10,QWORD PTR[32+rdi]
- lea r11,QWORD PTR[64+rdi]
-DB 102,72,15,110,199
-DB 102,73,15,110,202
-DB 102,73,15,110,211
-
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_mul_by_2x
-
- mov rdx,QWORD PTR[((64+0))+rsi]
- mov r14,QWORD PTR[((64+8))+rsi]
- mov r15,QWORD PTR[((64+16))+rsi]
- mov r8,QWORD PTR[((64+24))+rsi]
- lea rsi,QWORD PTR[((64-128))+rsi]
- lea rdi,QWORD PTR[64+rsp]
- call __ecp_nistz256_sqr_montx
-
- mov rdx,QWORD PTR[((0+0))+rsp]
- mov r14,QWORD PTR[((8+0))+rsp]
- lea rsi,QWORD PTR[((-128+0))+rsp]
- mov r15,QWORD PTR[((16+0))+rsp]
- mov r8,QWORD PTR[((24+0))+rsp]
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_sqr_montx
-
- mov rdx,QWORD PTR[32+rbx]
- mov r9,QWORD PTR[((64+0))+rbx]
- mov r10,QWORD PTR[((64+8))+rbx]
- mov r11,QWORD PTR[((64+16))+rbx]
- mov r12,QWORD PTR[((64+24))+rbx]
- lea rsi,QWORD PTR[((64-128))+rbx]
- lea rbx,QWORD PTR[32+rbx]
-DB 102,72,15,126,215
- call __ecp_nistz256_mul_montx
- call __ecp_nistz256_mul_by_2x
-
- mov r12,QWORD PTR[((96+0))+rsp]
- mov r13,QWORD PTR[((96+8))+rsp]
- lea rbx,QWORD PTR[64+rsp]
- mov r8,QWORD PTR[((96+16))+rsp]
- mov r9,QWORD PTR[((96+24))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_add_tox
-
- mov r12,QWORD PTR[((96+0))+rsp]
- mov r13,QWORD PTR[((96+8))+rsp]
- lea rbx,QWORD PTR[64+rsp]
- mov r8,QWORD PTR[((96+16))+rsp]
- mov r9,QWORD PTR[((96+24))+rsp]
- lea rdi,QWORD PTR[64+rsp]
- call __ecp_nistz256_sub_fromx
-
- mov rdx,QWORD PTR[((0+0))+rsp]
- mov r14,QWORD PTR[((8+0))+rsp]
- lea rsi,QWORD PTR[((-128+0))+rsp]
- mov r15,QWORD PTR[((16+0))+rsp]
- mov r8,QWORD PTR[((24+0))+rsp]
-DB 102,72,15,126,207
- call __ecp_nistz256_sqr_montx
- xor r9,r9
- mov rax,r12
- add r12,-1
- mov r10,r13
- adc r13,rsi
- mov rcx,r14
- adc r14,0
- mov r8,r15
- adc r15,rbp
- adc r9,0
- xor rsi,rsi
- test rax,1
-
- cmovz r12,rax
- cmovz r13,r10
- cmovz r14,rcx
- cmovz r15,r8
- cmovz r9,rsi
-
- mov rax,r13
- shr r12,1
- shl rax,63
- mov r10,r14
- shr r13,1
- or r12,rax
- shl r10,63
- mov rcx,r15
- shr r14,1
- or r13,r10
- shl rcx,63
- mov QWORD PTR[rdi],r12
- shr r15,1
- mov QWORD PTR[8+rdi],r13
- shl r9,63
- or r14,rcx
- or r15,r9
- mov QWORD PTR[16+rdi],r14
- mov QWORD PTR[24+rdi],r15
- mov rdx,QWORD PTR[64+rsp]
- lea rbx,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((-128+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_mul_montx
-
- lea rdi,QWORD PTR[128+rsp]
- call __ecp_nistz256_mul_by_2x
-
- lea rbx,QWORD PTR[32+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_add_tox
-
- mov rdx,QWORD PTR[96+rsp]
- lea rbx,QWORD PTR[96+rsp]
- mov r9,QWORD PTR[((0+0))+rsp]
- mov r10,QWORD PTR[((8+0))+rsp]
- lea rsi,QWORD PTR[((-128+0))+rsp]
- mov r11,QWORD PTR[((16+0))+rsp]
- mov r12,QWORD PTR[((24+0))+rsp]
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_mul_montx
-
- lea rdi,QWORD PTR[128+rsp]
- call __ecp_nistz256_mul_by_2x
-
- mov rdx,QWORD PTR[((0+32))+rsp]
- mov r14,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((-128+32))+rsp]
- mov r15,QWORD PTR[((16+32))+rsp]
- mov r8,QWORD PTR[((24+32))+rsp]
-DB 102,72,15,126,199
- call __ecp_nistz256_sqr_montx
-
- lea rbx,QWORD PTR[128+rsp]
- mov r8,r14
- mov r9,r15
- mov r14,rsi
- mov r15,rbp
- call __ecp_nistz256_sub_fromx
-
- mov rax,QWORD PTR[((0+0))+rsp]
- mov rbp,QWORD PTR[((0+8))+rsp]
- mov rcx,QWORD PTR[((0+16))+rsp]
- mov r10,QWORD PTR[((0+24))+rsp]
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_subx
-
- mov rdx,QWORD PTR[32+rsp]
- lea rbx,QWORD PTR[32+rsp]
- mov r14,r12
- xor ecx,ecx
- mov QWORD PTR[((0+0))+rsp],r12
- mov r10,r13
- mov QWORD PTR[((0+8))+rsp],r13
- cmovz r11,r8
- mov QWORD PTR[((0+16))+rsp],r8
- lea rsi,QWORD PTR[((0-128))+rsp]
- cmovz r12,r9
- mov QWORD PTR[((0+24))+rsp],r9
- mov r9,r14
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_mul_montx
-
-DB 102,72,15,126,203
-DB 102,72,15,126,207
- call __ecp_nistz256_sub_fromx
-
- lea rsi,QWORD PTR[((160+56))+rsp]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbx,QWORD PTR[((-16))+rsi]
-
- mov rbp,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$point_doublex_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_point_doublex::
-ecp_nistz256_point_doublex ENDP
-
-ALIGN 32
-ecp_nistz256_point_addx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_point_addx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$point_addx::
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,32*18+8
-
-$L$point_addx_body::
-
- movdqu xmm0,XMMWORD PTR[rsi]
- movdqu xmm1,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
- movdqu xmm3,XMMWORD PTR[48+rsi]
- movdqu xmm4,XMMWORD PTR[64+rsi]
- movdqu xmm5,XMMWORD PTR[80+rsi]
- mov rbx,rsi
- mov rsi,rdx
- movdqa XMMWORD PTR[384+rsp],xmm0
- movdqa XMMWORD PTR[(384+16)+rsp],xmm1
- movdqa XMMWORD PTR[416+rsp],xmm2
- movdqa XMMWORD PTR[(416+16)+rsp],xmm3
- movdqa XMMWORD PTR[448+rsp],xmm4
- movdqa XMMWORD PTR[(448+16)+rsp],xmm5
- por xmm5,xmm4
-
- movdqu xmm0,XMMWORD PTR[rsi]
- pshufd xmm3,xmm5,0b1h
- movdqu xmm1,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
- por xmm5,xmm3
- movdqu xmm3,XMMWORD PTR[48+rsi]
- mov rdx,QWORD PTR[((64+0))+rsi]
- mov r14,QWORD PTR[((64+8))+rsi]
- mov r15,QWORD PTR[((64+16))+rsi]
- mov r8,QWORD PTR[((64+24))+rsi]
- movdqa XMMWORD PTR[480+rsp],xmm0
- pshufd xmm4,xmm5,01eh
- movdqa XMMWORD PTR[(480+16)+rsp],xmm1
- movdqu xmm0,XMMWORD PTR[64+rsi]
- movdqu xmm1,XMMWORD PTR[80+rsi]
- movdqa XMMWORD PTR[512+rsp],xmm2
- movdqa XMMWORD PTR[(512+16)+rsp],xmm3
- por xmm5,xmm4
- pxor xmm4,xmm4
- por xmm1,xmm0
-DB 102,72,15,110,199
-
- lea rsi,QWORD PTR[((64-128))+rsi]
- mov QWORD PTR[((544+0))+rsp],rdx
- mov QWORD PTR[((544+8))+rsp],r14
- mov QWORD PTR[((544+16))+rsp],r15
- mov QWORD PTR[((544+24))+rsp],r8
- lea rdi,QWORD PTR[96+rsp]
- call __ecp_nistz256_sqr_montx
-
- pcmpeqd xmm5,xmm4
- pshufd xmm4,xmm1,0b1h
- por xmm4,xmm1
- pshufd xmm5,xmm5,0
- pshufd xmm3,xmm4,01eh
- por xmm4,xmm3
- pxor xmm3,xmm3
- pcmpeqd xmm4,xmm3
- pshufd xmm4,xmm4,0
- mov rdx,QWORD PTR[((64+0))+rbx]
- mov r14,QWORD PTR[((64+8))+rbx]
- mov r15,QWORD PTR[((64+16))+rbx]
- mov r8,QWORD PTR[((64+24))+rbx]
-DB 102,72,15,110,203
-
- lea rsi,QWORD PTR[((64-128))+rbx]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_sqr_montx
-
- mov rdx,QWORD PTR[544+rsp]
- lea rbx,QWORD PTR[544+rsp]
- mov r9,QWORD PTR[((0+96))+rsp]
- mov r10,QWORD PTR[((8+96))+rsp]
- lea rsi,QWORD PTR[((-128+96))+rsp]
- mov r11,QWORD PTR[((16+96))+rsp]
- mov r12,QWORD PTR[((24+96))+rsp]
- lea rdi,QWORD PTR[224+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[448+rsp]
- lea rbx,QWORD PTR[448+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((-128+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[256+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[416+rsp]
- lea rbx,QWORD PTR[416+rsp]
- mov r9,QWORD PTR[((0+224))+rsp]
- mov r10,QWORD PTR[((8+224))+rsp]
- lea rsi,QWORD PTR[((-128+224))+rsp]
- mov r11,QWORD PTR[((16+224))+rsp]
- mov r12,QWORD PTR[((24+224))+rsp]
- lea rdi,QWORD PTR[224+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[512+rsp]
- lea rbx,QWORD PTR[512+rsp]
- mov r9,QWORD PTR[((0+256))+rsp]
- mov r10,QWORD PTR[((8+256))+rsp]
- lea rsi,QWORD PTR[((-128+256))+rsp]
- mov r11,QWORD PTR[((16+256))+rsp]
- mov r12,QWORD PTR[((24+256))+rsp]
- lea rdi,QWORD PTR[256+rsp]
- call __ecp_nistz256_mul_montx
-
- lea rbx,QWORD PTR[224+rsp]
- lea rdi,QWORD PTR[64+rsp]
- call __ecp_nistz256_sub_fromx
-
- or r12,r13
- movdqa xmm2,xmm4
- or r12,r8
- or r12,r9
- por xmm2,xmm5
-DB 102,73,15,110,220
-
- mov rdx,QWORD PTR[384+rsp]
- lea rbx,QWORD PTR[384+rsp]
- mov r9,QWORD PTR[((0+96))+rsp]
- mov r10,QWORD PTR[((8+96))+rsp]
- lea rsi,QWORD PTR[((-128+96))+rsp]
- mov r11,QWORD PTR[((16+96))+rsp]
- mov r12,QWORD PTR[((24+96))+rsp]
- lea rdi,QWORD PTR[160+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[480+rsp]
- lea rbx,QWORD PTR[480+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((-128+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[192+rsp]
- call __ecp_nistz256_mul_montx
-
- lea rbx,QWORD PTR[160+rsp]
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_sub_fromx
-
- or r12,r13
- or r12,r8
- or r12,r9
-
-DB 102,73,15,126,208
-DB 102,73,15,126,217
-
- or r12,r8
- or r12,r9
-
-
-DB 03eh
- jnz $L$add_proceedx
-
-$L$add_doublex::
-DB 102,72,15,126,206
-DB 102,72,15,126,199
- add rsp,416
-
- jmp $L$point_double_shortcutx
-
-
-ALIGN 32
-$L$add_proceedx::
- mov rdx,QWORD PTR[((0+64))+rsp]
- mov r14,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((-128+64))+rsp]
- mov r15,QWORD PTR[((16+64))+rsp]
- mov r8,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[96+rsp]
- call __ecp_nistz256_sqr_montx
-
- mov rdx,QWORD PTR[448+rsp]
- lea rbx,QWORD PTR[448+rsp]
- mov r9,QWORD PTR[((0+0))+rsp]
- mov r10,QWORD PTR[((8+0))+rsp]
- lea rsi,QWORD PTR[((-128+0))+rsp]
- mov r11,QWORD PTR[((16+0))+rsp]
- mov r12,QWORD PTR[((24+0))+rsp]
- lea rdi,QWORD PTR[352+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[((0+0))+rsp]
- mov r14,QWORD PTR[((8+0))+rsp]
- lea rsi,QWORD PTR[((-128+0))+rsp]
- mov r15,QWORD PTR[((16+0))+rsp]
- mov r8,QWORD PTR[((24+0))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_sqr_montx
-
- mov rdx,QWORD PTR[544+rsp]
- lea rbx,QWORD PTR[544+rsp]
- mov r9,QWORD PTR[((0+352))+rsp]
- mov r10,QWORD PTR[((8+352))+rsp]
- lea rsi,QWORD PTR[((-128+352))+rsp]
- mov r11,QWORD PTR[((16+352))+rsp]
- mov r12,QWORD PTR[((24+352))+rsp]
- lea rdi,QWORD PTR[352+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[rsp]
- lea rbx,QWORD PTR[rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((-128+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[128+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[160+rsp]
- lea rbx,QWORD PTR[160+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((-128+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[192+rsp]
- call __ecp_nistz256_mul_montx
-
-
-
-
- xor r11,r11
- add r12,r12
- lea rsi,QWORD PTR[96+rsp]
- adc r13,r13
- mov rax,r12
- adc r8,r8
- adc r9,r9
- mov rbp,r13
- adc r11,0
-
- sub r12,-1
- mov rcx,r8
- sbb r13,r14
- sbb r8,0
- mov r10,r9
- sbb r9,r15
- sbb r11,0
-
- cmovc r12,rax
- mov rax,QWORD PTR[rsi]
- cmovc r13,rbp
- mov rbp,QWORD PTR[8+rsi]
- cmovc r8,rcx
- mov rcx,QWORD PTR[16+rsi]
- cmovc r9,r10
- mov r10,QWORD PTR[24+rsi]
-
- call __ecp_nistz256_subx
-
- lea rbx,QWORD PTR[128+rsp]
- lea rdi,QWORD PTR[288+rsp]
- call __ecp_nistz256_sub_fromx
-
- mov rax,QWORD PTR[((192+0))+rsp]
- mov rbp,QWORD PTR[((192+8))+rsp]
- mov rcx,QWORD PTR[((192+16))+rsp]
- mov r10,QWORD PTR[((192+24))+rsp]
- lea rdi,QWORD PTR[320+rsp]
-
- call __ecp_nistz256_subx
-
- mov QWORD PTR[rdi],r12
- mov QWORD PTR[8+rdi],r13
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
- mov rdx,QWORD PTR[128+rsp]
- lea rbx,QWORD PTR[128+rsp]
- mov r9,QWORD PTR[((0+224))+rsp]
- mov r10,QWORD PTR[((8+224))+rsp]
- lea rsi,QWORD PTR[((-128+224))+rsp]
- mov r11,QWORD PTR[((16+224))+rsp]
- mov r12,QWORD PTR[((24+224))+rsp]
- lea rdi,QWORD PTR[256+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[320+rsp]
- lea rbx,QWORD PTR[320+rsp]
- mov r9,QWORD PTR[((0+64))+rsp]
- mov r10,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((-128+64))+rsp]
- mov r11,QWORD PTR[((16+64))+rsp]
- mov r12,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[320+rsp]
- call __ecp_nistz256_mul_montx
-
- lea rbx,QWORD PTR[256+rsp]
- lea rdi,QWORD PTR[320+rsp]
- call __ecp_nistz256_sub_fromx
-
-DB 102,72,15,126,199
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[352+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((352+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[544+rsp]
- pand xmm3,XMMWORD PTR[((544+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[448+rsp]
- pand xmm3,XMMWORD PTR[((448+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[64+rdi],xmm2
- movdqu XMMWORD PTR[80+rdi],xmm3
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[288+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((288+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[480+rsp]
- pand xmm3,XMMWORD PTR[((480+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[384+rsp]
- pand xmm3,XMMWORD PTR[((384+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[rdi],xmm2
- movdqu XMMWORD PTR[16+rdi],xmm3
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[320+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((320+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[512+rsp]
- pand xmm3,XMMWORD PTR[((512+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[416+rsp]
- pand xmm3,XMMWORD PTR[((416+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu XMMWORD PTR[48+rdi],xmm3
-
-$L$add_donex::
- lea rsi,QWORD PTR[((576+56))+rsp]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbx,QWORD PTR[((-16))+rsi]
-
- mov rbp,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$point_addx_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_point_addx::
-ecp_nistz256_point_addx ENDP
-
-ALIGN 32
-ecp_nistz256_point_add_affinex PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_ecp_nistz256_point_add_affinex::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$point_add_affinex::
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,32*15+8
-
-$L$add_affinex_body::
-
- movdqu xmm0,XMMWORD PTR[rsi]
- mov rbx,rdx
- movdqu xmm1,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
- movdqu xmm3,XMMWORD PTR[48+rsi]
- movdqu xmm4,XMMWORD PTR[64+rsi]
- movdqu xmm5,XMMWORD PTR[80+rsi]
- mov rdx,QWORD PTR[((64+0))+rsi]
- mov r14,QWORD PTR[((64+8))+rsi]
- mov r15,QWORD PTR[((64+16))+rsi]
- mov r8,QWORD PTR[((64+24))+rsi]
- movdqa XMMWORD PTR[320+rsp],xmm0
- movdqa XMMWORD PTR[(320+16)+rsp],xmm1
- movdqa XMMWORD PTR[352+rsp],xmm2
- movdqa XMMWORD PTR[(352+16)+rsp],xmm3
- movdqa XMMWORD PTR[384+rsp],xmm4
- movdqa XMMWORD PTR[(384+16)+rsp],xmm5
- por xmm5,xmm4
-
- movdqu xmm0,XMMWORD PTR[rbx]
- pshufd xmm3,xmm5,0b1h
- movdqu xmm1,XMMWORD PTR[16+rbx]
- movdqu xmm2,XMMWORD PTR[32+rbx]
- por xmm5,xmm3
- movdqu xmm3,XMMWORD PTR[48+rbx]
- movdqa XMMWORD PTR[416+rsp],xmm0
- pshufd xmm4,xmm5,01eh
- movdqa XMMWORD PTR[(416+16)+rsp],xmm1
- por xmm1,xmm0
-DB 102,72,15,110,199
- movdqa XMMWORD PTR[448+rsp],xmm2
- movdqa XMMWORD PTR[(448+16)+rsp],xmm3
- por xmm3,xmm2
- por xmm5,xmm4
- pxor xmm4,xmm4
- por xmm3,xmm1
-
- lea rsi,QWORD PTR[((64-128))+rsi]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_sqr_montx
-
- pcmpeqd xmm5,xmm4
- pshufd xmm4,xmm3,0b1h
- mov rdx,QWORD PTR[rbx]
-
- mov r9,r12
- por xmm4,xmm3
- pshufd xmm5,xmm5,0
- pshufd xmm3,xmm4,01eh
- mov r10,r13
- por xmm4,xmm3
- pxor xmm3,xmm3
- mov r11,r14
- pcmpeqd xmm4,xmm3
- pshufd xmm4,xmm4,0
-
- lea rsi,QWORD PTR[((32-128))+rsp]
- mov r12,r15
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_mul_montx
-
- lea rbx,QWORD PTR[320+rsp]
- lea rdi,QWORD PTR[64+rsp]
- call __ecp_nistz256_sub_fromx
-
- mov rdx,QWORD PTR[384+rsp]
- lea rbx,QWORD PTR[384+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((-128+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[384+rsp]
- lea rbx,QWORD PTR[384+rsp]
- mov r9,QWORD PTR[((0+64))+rsp]
- mov r10,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((-128+64))+rsp]
- mov r11,QWORD PTR[((16+64))+rsp]
- mov r12,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[288+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[448+rsp]
- lea rbx,QWORD PTR[448+rsp]
- mov r9,QWORD PTR[((0+32))+rsp]
- mov r10,QWORD PTR[((8+32))+rsp]
- lea rsi,QWORD PTR[((-128+32))+rsp]
- mov r11,QWORD PTR[((16+32))+rsp]
- mov r12,QWORD PTR[((24+32))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_mul_montx
-
- lea rbx,QWORD PTR[352+rsp]
- lea rdi,QWORD PTR[96+rsp]
- call __ecp_nistz256_sub_fromx
-
- mov rdx,QWORD PTR[((0+64))+rsp]
- mov r14,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((-128+64))+rsp]
- mov r15,QWORD PTR[((16+64))+rsp]
- mov r8,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[128+rsp]
- call __ecp_nistz256_sqr_montx
-
- mov rdx,QWORD PTR[((0+96))+rsp]
- mov r14,QWORD PTR[((8+96))+rsp]
- lea rsi,QWORD PTR[((-128+96))+rsp]
- mov r15,QWORD PTR[((16+96))+rsp]
- mov r8,QWORD PTR[((24+96))+rsp]
- lea rdi,QWORD PTR[192+rsp]
- call __ecp_nistz256_sqr_montx
-
- mov rdx,QWORD PTR[128+rsp]
- lea rbx,QWORD PTR[128+rsp]
- mov r9,QWORD PTR[((0+64))+rsp]
- mov r10,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((-128+64))+rsp]
- mov r11,QWORD PTR[((16+64))+rsp]
- mov r12,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[160+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[320+rsp]
- lea rbx,QWORD PTR[320+rsp]
- mov r9,QWORD PTR[((0+128))+rsp]
- mov r10,QWORD PTR[((8+128))+rsp]
- lea rsi,QWORD PTR[((-128+128))+rsp]
- mov r11,QWORD PTR[((16+128))+rsp]
- mov r12,QWORD PTR[((24+128))+rsp]
- lea rdi,QWORD PTR[rsp]
- call __ecp_nistz256_mul_montx
-
-
-
-
- xor r11,r11
- add r12,r12
- lea rsi,QWORD PTR[192+rsp]
- adc r13,r13
- mov rax,r12
- adc r8,r8
- adc r9,r9
- mov rbp,r13
- adc r11,0
-
- sub r12,-1
- mov rcx,r8
- sbb r13,r14
- sbb r8,0
- mov r10,r9
- sbb r9,r15
- sbb r11,0
-
- cmovc r12,rax
- mov rax,QWORD PTR[rsi]
- cmovc r13,rbp
- mov rbp,QWORD PTR[8+rsi]
- cmovc r8,rcx
- mov rcx,QWORD PTR[16+rsi]
- cmovc r9,r10
- mov r10,QWORD PTR[24+rsi]
-
- call __ecp_nistz256_subx
-
- lea rbx,QWORD PTR[160+rsp]
- lea rdi,QWORD PTR[224+rsp]
- call __ecp_nistz256_sub_fromx
-
- mov rax,QWORD PTR[((0+0))+rsp]
- mov rbp,QWORD PTR[((0+8))+rsp]
- mov rcx,QWORD PTR[((0+16))+rsp]
- mov r10,QWORD PTR[((0+24))+rsp]
- lea rdi,QWORD PTR[64+rsp]
-
- call __ecp_nistz256_subx
-
- mov QWORD PTR[rdi],r12
- mov QWORD PTR[8+rdi],r13
- mov QWORD PTR[16+rdi],r8
- mov QWORD PTR[24+rdi],r9
- mov rdx,QWORD PTR[352+rsp]
- lea rbx,QWORD PTR[352+rsp]
- mov r9,QWORD PTR[((0+160))+rsp]
- mov r10,QWORD PTR[((8+160))+rsp]
- lea rsi,QWORD PTR[((-128+160))+rsp]
- mov r11,QWORD PTR[((16+160))+rsp]
- mov r12,QWORD PTR[((24+160))+rsp]
- lea rdi,QWORD PTR[32+rsp]
- call __ecp_nistz256_mul_montx
-
- mov rdx,QWORD PTR[96+rsp]
- lea rbx,QWORD PTR[96+rsp]
- mov r9,QWORD PTR[((0+64))+rsp]
- mov r10,QWORD PTR[((8+64))+rsp]
- lea rsi,QWORD PTR[((-128+64))+rsp]
- mov r11,QWORD PTR[((16+64))+rsp]
- mov r12,QWORD PTR[((24+64))+rsp]
- lea rdi,QWORD PTR[64+rsp]
- call __ecp_nistz256_mul_montx
-
- lea rbx,QWORD PTR[32+rsp]
- lea rdi,QWORD PTR[256+rsp]
- call __ecp_nistz256_sub_fromx
-
-DB 102,72,15,126,199
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[288+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((288+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[$L$ONE_mont]
- pand xmm3,XMMWORD PTR[(($L$ONE_mont+16))]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[384+rsp]
- pand xmm3,XMMWORD PTR[((384+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[64+rdi],xmm2
- movdqu XMMWORD PTR[80+rdi],xmm3
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[224+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((224+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[416+rsp]
- pand xmm3,XMMWORD PTR[((416+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[320+rsp]
- pand xmm3,XMMWORD PTR[((320+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[rdi],xmm2
- movdqu XMMWORD PTR[16+rdi],xmm3
-
- movdqa xmm0,xmm5
- movdqa xmm1,xmm5
- pandn xmm0,XMMWORD PTR[256+rsp]
- movdqa xmm2,xmm5
- pandn xmm1,XMMWORD PTR[((256+16))+rsp]
- movdqa xmm3,xmm5
- pand xmm2,XMMWORD PTR[448+rsp]
- pand xmm3,XMMWORD PTR[((448+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
-
- movdqa xmm0,xmm4
- movdqa xmm1,xmm4
- pandn xmm0,xmm2
- movdqa xmm2,xmm4
- pandn xmm1,xmm3
- movdqa xmm3,xmm4
- pand xmm2,XMMWORD PTR[352+rsp]
- pand xmm3,XMMWORD PTR[((352+16))+rsp]
- por xmm2,xmm0
- por xmm3,xmm1
- movdqu XMMWORD PTR[32+rdi],xmm2
- movdqu XMMWORD PTR[48+rdi],xmm3
-
- lea rsi,QWORD PTR[((480+56))+rsp]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbx,QWORD PTR[((-16))+rsi]
-
- mov rbp,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$add_affinex_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_ecp_nistz256_point_add_affinex::
-ecp_nistz256_point_add_affinex ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-
-ALIGN 16
-short_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- lea rax,QWORD PTR[16+rax]
-
- mov r12,QWORD PTR[((-8))+rax]
- mov r13,QWORD PTR[((-16))+rax]
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
-
- jmp $L$common_seh_tail
-short_handler ENDP
-
-
-ALIGN 16
-full_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- mov r10d,DWORD PTR[8+r11]
- lea rax,QWORD PTR[r10*1+rax]
-
- mov rbp,QWORD PTR[((-8))+rax]
- mov rbx,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-full_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_ecp_nistz256_mul_by_2
- DD imagerel $L$SEH_end_ecp_nistz256_mul_by_2
- DD imagerel $L$SEH_info_ecp_nistz256_mul_by_2
-
- DD imagerel $L$SEH_begin_ecp_nistz256_div_by_2
- DD imagerel $L$SEH_end_ecp_nistz256_div_by_2
- DD imagerel $L$SEH_info_ecp_nistz256_div_by_2
-
- DD imagerel $L$SEH_begin_ecp_nistz256_mul_by_3
- DD imagerel $L$SEH_end_ecp_nistz256_mul_by_3
- DD imagerel $L$SEH_info_ecp_nistz256_mul_by_3
-
- DD imagerel $L$SEH_begin_ecp_nistz256_add
- DD imagerel $L$SEH_end_ecp_nistz256_add
- DD imagerel $L$SEH_info_ecp_nistz256_add
-
- DD imagerel $L$SEH_begin_ecp_nistz256_sub
- DD imagerel $L$SEH_end_ecp_nistz256_sub
- DD imagerel $L$SEH_info_ecp_nistz256_sub
-
- DD imagerel $L$SEH_begin_ecp_nistz256_neg
- DD imagerel $L$SEH_end_ecp_nistz256_neg
- DD imagerel $L$SEH_info_ecp_nistz256_neg
-
- DD imagerel $L$SEH_begin_ecp_nistz256_ord_mul_mont
- DD imagerel $L$SEH_end_ecp_nistz256_ord_mul_mont
- DD imagerel $L$SEH_info_ecp_nistz256_ord_mul_mont
-
- DD imagerel $L$SEH_begin_ecp_nistz256_ord_sqr_mont
- DD imagerel $L$SEH_end_ecp_nistz256_ord_sqr_mont
- DD imagerel $L$SEH_info_ecp_nistz256_ord_sqr_mont
- DD imagerel $L$SEH_begin_ecp_nistz256_ord_mul_montx
- DD imagerel $L$SEH_end_ecp_nistz256_ord_mul_montx
- DD imagerel $L$SEH_info_ecp_nistz256_ord_mul_montx
-
- DD imagerel $L$SEH_begin_ecp_nistz256_ord_sqr_montx
- DD imagerel $L$SEH_end_ecp_nistz256_ord_sqr_montx
- DD imagerel $L$SEH_info_ecp_nistz256_ord_sqr_montx
- DD imagerel $L$SEH_begin_ecp_nistz256_to_mont
- DD imagerel $L$SEH_end_ecp_nistz256_to_mont
- DD imagerel $L$SEH_info_ecp_nistz256_to_mont
-
- DD imagerel $L$SEH_begin_ecp_nistz256_mul_mont
- DD imagerel $L$SEH_end_ecp_nistz256_mul_mont
- DD imagerel $L$SEH_info_ecp_nistz256_mul_mont
-
- DD imagerel $L$SEH_begin_ecp_nistz256_sqr_mont
- DD imagerel $L$SEH_end_ecp_nistz256_sqr_mont
- DD imagerel $L$SEH_info_ecp_nistz256_sqr_mont
-
- DD imagerel $L$SEH_begin_ecp_nistz256_from_mont
- DD imagerel $L$SEH_end_ecp_nistz256_from_mont
- DD imagerel $L$SEH_info_ecp_nistz256_from_mont
-
- DD imagerel $L$SEH_begin_ecp_nistz256_gather_w5
- DD imagerel $L$SEH_end_ecp_nistz256_gather_w5
- DD imagerel $L$SEH_info_ecp_nistz256_gather_wX
-
- DD imagerel $L$SEH_begin_ecp_nistz256_gather_w7
- DD imagerel $L$SEH_end_ecp_nistz256_gather_w7
- DD imagerel $L$SEH_info_ecp_nistz256_gather_wX
- DD imagerel $L$SEH_begin_ecp_nistz256_avx2_gather_w5
- DD imagerel $L$SEH_end_ecp_nistz256_avx2_gather_w5
- DD imagerel $L$SEH_info_ecp_nistz256_avx2_gather_wX
-
- DD imagerel $L$SEH_begin_ecp_nistz256_avx2_gather_w7
- DD imagerel $L$SEH_end_ecp_nistz256_avx2_gather_w7
- DD imagerel $L$SEH_info_ecp_nistz256_avx2_gather_wX
- DD imagerel $L$SEH_begin_ecp_nistz256_point_double
- DD imagerel $L$SEH_end_ecp_nistz256_point_double
- DD imagerel $L$SEH_info_ecp_nistz256_point_double
-
- DD imagerel $L$SEH_begin_ecp_nistz256_point_add
- DD imagerel $L$SEH_end_ecp_nistz256_point_add
- DD imagerel $L$SEH_info_ecp_nistz256_point_add
-
- DD imagerel $L$SEH_begin_ecp_nistz256_point_add_affine
- DD imagerel $L$SEH_end_ecp_nistz256_point_add_affine
- DD imagerel $L$SEH_info_ecp_nistz256_point_add_affine
- DD imagerel $L$SEH_begin_ecp_nistz256_point_doublex
- DD imagerel $L$SEH_end_ecp_nistz256_point_doublex
- DD imagerel $L$SEH_info_ecp_nistz256_point_doublex
-
- DD imagerel $L$SEH_begin_ecp_nistz256_point_addx
- DD imagerel $L$SEH_end_ecp_nistz256_point_addx
- DD imagerel $L$SEH_info_ecp_nistz256_point_addx
-
- DD imagerel $L$SEH_begin_ecp_nistz256_point_add_affinex
- DD imagerel $L$SEH_end_ecp_nistz256_point_add_affinex
- DD imagerel $L$SEH_info_ecp_nistz256_point_add_affinex
-
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_ecp_nistz256_mul_by_2::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$mul_by_2_body,imagerel $L$mul_by_2_epilogue
-$L$SEH_info_ecp_nistz256_div_by_2::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$div_by_2_body,imagerel $L$div_by_2_epilogue
-$L$SEH_info_ecp_nistz256_mul_by_3::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$mul_by_3_body,imagerel $L$mul_by_3_epilogue
-$L$SEH_info_ecp_nistz256_add::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$add_body,imagerel $L$add_epilogue
-$L$SEH_info_ecp_nistz256_sub::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$sub_body,imagerel $L$sub_epilogue
-$L$SEH_info_ecp_nistz256_neg::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$neg_body,imagerel $L$neg_epilogue
-$L$SEH_info_ecp_nistz256_ord_mul_mont::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$ord_mul_body,imagerel $L$ord_mul_epilogue
- DD 48,0
-$L$SEH_info_ecp_nistz256_ord_sqr_mont::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$ord_sqr_body,imagerel $L$ord_sqr_epilogue
- DD 48,0
-$L$SEH_info_ecp_nistz256_ord_mul_montx::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$ord_mulx_body,imagerel $L$ord_mulx_epilogue
- DD 48,0
-$L$SEH_info_ecp_nistz256_ord_sqr_montx::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$ord_sqrx_body,imagerel $L$ord_sqrx_epilogue
- DD 48,0
-$L$SEH_info_ecp_nistz256_to_mont::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$mul_body,imagerel $L$mul_epilogue
- DD 48,0
-$L$SEH_info_ecp_nistz256_mul_mont::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$mul_body,imagerel $L$mul_epilogue
- DD 48,0
-$L$SEH_info_ecp_nistz256_sqr_mont::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$sqr_body,imagerel $L$sqr_epilogue
- DD 48,0
-$L$SEH_info_ecp_nistz256_from_mont::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$from_body,imagerel $L$from_epilogue
-$L$SEH_info_ecp_nistz256_gather_wX::
-DB 001h,033h,016h,000h
-DB 033h,0f8h,009h,000h
-DB 02eh,0e8h,008h,000h
-DB 029h,0d8h,007h,000h
-DB 024h,0c8h,006h,000h
-DB 01fh,0b8h,005h,000h
-DB 01ah,0a8h,004h,000h
-DB 015h,098h,003h,000h
-DB 010h,088h,002h,000h
-DB 00ch,078h,001h,000h
-DB 008h,068h,000h,000h
-DB 004h,001h,015h,000h
-ALIGN 8
-$L$SEH_info_ecp_nistz256_avx2_gather_wX::
-DB 001h,036h,017h,00bh
-DB 036h,0f8h,009h,000h
-DB 031h,0e8h,008h,000h
-DB 02ch,0d8h,007h,000h
-DB 027h,0c8h,006h,000h
-DB 022h,0b8h,005h,000h
-DB 01dh,0a8h,004h,000h
-DB 018h,098h,003h,000h
-DB 013h,088h,002h,000h
-DB 00eh,078h,001h,000h
-DB 009h,068h,000h,000h
-DB 004h,001h,015h,000h
-DB 000h,0b3h,000h,000h
-ALIGN 8
-$L$SEH_info_ecp_nistz256_point_double::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$point_doubleq_body,imagerel $L$point_doubleq_epilogue
- DD 32*5+56,0
-$L$SEH_info_ecp_nistz256_point_add::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$point_addq_body,imagerel $L$point_addq_epilogue
- DD 32*18+56,0
-$L$SEH_info_ecp_nistz256_point_add_affine::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$add_affineq_body,imagerel $L$add_affineq_epilogue
- DD 32*15+56,0
-ALIGN 8
-$L$SEH_info_ecp_nistz256_point_doublex::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$point_doublex_body,imagerel $L$point_doublex_epilogue
- DD 32*5+56,0
-$L$SEH_info_ecp_nistz256_point_addx::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$point_addx_body,imagerel $L$point_addx_epilogue
- DD 32*18+56,0
-$L$SEH_info_ecp_nistz256_point_add_affinex::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$add_affinex_body,imagerel $L$add_affinex_epilogue
- DD 32*15+56,0
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+PUBLIC ecp_nistz256_precomputed
+
+ALIGN 256
+ecp_nistz256_precomputed::
+ DD 018a9143ch,079e730d4h,05fedb601h,075ba95fch,077622510h,079fb732bh,0a53755c6h,018905f76h,0ce95560ah,0ddf25357h,0ba19e45ch,08b4ab8e4h,0dd21f325h,0d2e88688h,025885d85h,08571ff18h
+ DD 010ddd64dh,0850046d4h,0a433827dh,0aa6ae3c1h,08d1490d9h,073220503h,03dcf3a3bh,0f6bb32e4h,061bee1a5h,02f3648d3h,0eb236ff8h,0152cd7cbh,092042dbeh,019a8fb0eh,00a5b8a3bh,078c57751h
+ DD 04eebc127h,0ffac3f90h,0087d81fbh,0b027f84ah,087cbbc98h,066ad77ddh,0b6ff747eh,026936a3fh,0c983a7ebh,0b04c5c1fh,00861fe1ah,0583e47adh,01a2ee98eh,078820831h,0e587cc07h,0d5f06a29h
+ DD 046918dcch,074b0b50dh,0c623c173h,04650a6edh,0e8100af2h,00cdaacach,041b0176bh,0577362f5h,0e4cbaba6h,02d96f24ch,0fad6f447h,017628471h,0e5ddd22eh,06b6c36deh,04c5ab863h,084b14c39h
+ DD 0c45c61f5h,0be1b8aaeh,094b9537dh,090ec649ah,0d076c20ch,0941cb5aah,0890523c8h,0c9079605h,0e7ba4f10h,0eb309b4ah,0e5eb882bh,073c568efh,07e7a1f68h,03540a987h,02dd1e916h,073a076bbh
+ DD 03e77664ah,040394737h,0346cee3eh,055ae744fh,05b17a3adh,0d50a961ah,054213673h,013074b59h,0d377e44bh,093d36220h,0adff14b5h,0299c2b53h,0ef639f11h,0f424d44ch,04a07f75fh,0a4c9916dh
+ DD 0a0173b4fh,00746354eh,0d23c00f7h,02bd20213h,00c23bb08h,0f43eaab5h,0c3123e03h,013ba5119h,03f5b9d4dh,02847d030h,05da67bddh,06742f2f2h,077c94195h,0ef933bdch,06e240867h,0eaedd915h
+ DD 09499a78fh,027f14cd1h,06f9b3455h,0462ab5c5h,0f02cfc6bh,08f90f02ah,0b265230dh,0b763891eh,0532d4977h,0f59da3a9h,0cf9eba15h,021e3327dh,0be60bbf0h,0123c7b84h,07706df76h,056ec12f2h
+ DD 0264e20e8h,075c96e8fh,059a7a841h,0abe6bfedh,044c8eb00h,02cc09c04h,0f0c4e16bh,0e05b3080h,0a45f3314h,01eb7777ah,0ce5d45e3h,056af7bedh,088b12f1ah,02b6e019ah,0fd835f9bh,0086659cdh
+ DD 09dc21ec8h,02c18dbd1h,00fcf8139h,098f9868ah,048250b49h,0737d2cd6h,024b3428fh,0cc61c947h,080dd9e76h,00c2b4078h,0383fbe08h,0c43a8991h,0779be5d2h,05f7d2d65h,0eb3b4ab5h,078719a54h
+ DD 06245e404h,0ea7d260ah,06e7fdfe0h,09de40795h,08dac1ab5h,01ff3a415h,0649c9073h,03e7090f1h,02b944e88h,01a768561h,0e57f61c8h,0250f939eh,01ead643dh,00c0daa89h,0e125b88eh,068930023h
+ DD 0d2697768h,004b71aa7h,0ca345a33h,0abdedef5h,0ee37385eh,02409d29dh,0cb83e156h,04ee1df77h,01cbb5b43h,00cac12d9h,0ca895637h,0170ed2f6h,08ade6d66h,028228cfah,053238acah,07ff57c95h
+ DD 04b2ed709h,0ccc42563h,0856fd30dh,00e356769h,0559e9811h,0bcbcd43fh,05395b759h,0738477ach,0c00ee17fh,035752b90h,0742ed2e3h,068748390h,0bd1f5bc1h,07cd06422h,0c9e7b797h,0fbc08769h
+ DD 0b0cf664ah,0a242a35bh,07f9707e3h,0126e48f7h,0c6832660h,01717bf54h,0fd12c72eh,0faae7332h,0995d586bh,027b52db7h,0832237c2h,0be29569eh,02a65e7dbh,0e8e4193eh,02eaa1bbbh,0152706dch
+ DD 0bc60055bh,072bcd8b7h,056e27e4bh,003cc23eeh,0e4819370h,0ee337424h,00ad3da09h,0e2aa0e43h,06383c45dh,040b8524fh,042a41b25h,0d7663554h,0778a4797h,064efa6deh,07079adf4h,02042170ah
+ DD 00bc6fb80h,0808b0b65h,03ffe2e6bh,05882e075h,02c83f549h,0d5ef2f7ch,09103b723h,054d63c80h,052a23f9bh,0f2f11bd6h,04b0b6587h,03670c319h,0b1580e9eh,055c4623bh,001efe220h,064edf7b2h
+ DD 0d53c5c9dh,097091dcbh,0ac0a177bh,0f17624b6h,02cfe2dffh,0b0f13975h,06c7a574eh,0c1a35c0ah,093e79987h,0227d3146h,0e89cb80eh,00575bf30h,00d1883bbh,02f4e247fh,03274c3d0h,0ebd51226h
+ DD 056ada97ah,05f3e51c8h,08f8b403eh,04afc964dh,0412e2979h,0a6f247abh,06f80ebdah,0675abd1bh,05e485a1dh,066a2bd72h,08f4f0b3ch,04b2a5cafh,01b847bbah,02626927fh,00502394dh,06c6fc7d9h
+ DD 0a5659ae8h,0fea912bah,025e1a16eh,068363abah,0752c41ach,0b8842277h,02897c3fch,0fe545c28h,0dc4c696bh,02d36e9e7h,0fba977c5h,05806244ah,0e39508c1h,085665e9bh,06d12597bh,0f720ee25h
+ DD 0d2337a31h,08a979129h,00f862bdch,05916868fh,05dd283bah,0048099d9h,0fe5bfb4eh,0e2d1eeb6h,07884005dh,082ef1c41h,0ffffcbaeh,0a2d4ec17h,08aa95e66h,09161c53fh,0c5fee0d0h,05ee104e1h
+ DD 0c135b208h,0562e4cech,04783f47dh,074e1b265h,05a3f3b30h,06d2a506ch,0c16762fch,0ecead9f4h,0e286e5b9h,0f29dd4b2h,083bb3c61h,01b0fadc0h,07fac29a4h,07a75023eh,0c9477fa3h,0c086d5f1h
+ DD 02f6f3076h,00fc61135h,0e3912a9ah,0c99ffa23h,0d2f8ba3dh,06a0b0685h,0e93358a4h,0fdc777e8h,035415f04h,094a787bbh,04d23fea4h,0640c2d6ah,0153a35b5h,09de917dah,05d5cd074h,0793e8d07h
+ DD 02de45068h,0f4f87653h,09e2e1f6eh,037c7a7e8h,0a3584069h,0d0825fa2h,01727bf42h,0af2cea7ch,09e4785a9h,00360a4fbh,027299f4ah,0e5fda49ch,071ac2f71h,048068e13h,09077666fh,083d0687bh
+ DD 015d02819h,06d3883b2h,040dd9a35h,06d0d7550h,01d2b469fh,061d7cbf9h,02efc3115h,0f97b232fh,0b24bcbc7h,0a551d750h,088a1e356h,011ea4949h,093cb7501h,07669f031h,0ca737b8ah,0595dc55eh
+ DD 0d837879fh,0a4a319ach,0ed6b67b0h,06fc1b49eh,032f1f3afh,0e3959933h,065432a2eh,0966742ebh,0b4966228h,04b8dc9feh,043f43950h,096cc6312h,0c9b731eeh,012068859h,056f79968h,07b948dc3h
+ DD 0ed1f8008h,061e4ad32h,0d8b17538h,0e6c9267ah,0857ff6fbh,01ac7c5ebh,055f2fb10h,0994baaa8h,01d248018h,084cf14e1h,0628ac508h,05a39898bh,05fa944f5h,014fde97bh,0d12e5ac7h,0ed178030h
+ DD 097e2feb4h,0042c2af4h,0aebf7313h,0d36a42d7h,0084ffdd7h,049d2c9ebh,02ef7c76ah,09f8aa54bh,009895e70h,09200b7bah,0ddb7fb58h,03bd0c66fh,078eb4cbbh,02d97d108h,0d84bde31h,02d431068h
+ DD 0172ccd1fh,04b523eb7h,030a6a892h,07323cb28h,0cfe153ebh,097082ec0h,0f2aadb97h,0e97f6b6ah,0d1a83da1h,01d3d393eh,0804b2a68h,0a6a7f9c7h,02d0cb71eh,04a688b48h,040585278h,0a9b4cc5fh
+ DD 0cb66e132h,05e5db46ah,00d925880h,0f1be963ah,00317b9e2h,0944a7027h,048603d48h,0e266f959h,05c208899h,098db6673h,0a2fb18a3h,090472447h,0777c619fh,08a966939h,02a3be21bh,03798142ah
+ DD 03298b343h,0b4241cb1h,0b44f65a1h,0a3a14e49h,03ac77acdh,0c5f4d6cdh,052b6fc3ch,0d0288cb5h,01c040abch,0d5cc8c2fh,006bf9b4ah,0b675511eh,09b3aa441h,0d667da37h,051601f72h,0460d45ceh
+ DD 06755ff89h,0e2f73c69h,0473017e6h,0dd3cf7e7h,03cf7600dh,08ef5689dh,0b1fc87b4h,0948dc4f8h,04ea53299h,0d9e9fe81h,098eb6028h,02d921ca2h,00c9803fch,0faecedfdh,04d7b4745h,0f38ae891h
+ DD 0c5e3a3d8h,0d8c5fccfh,04079dfbfh,0befd904ch,0fead0197h,0bc6d6a58h,0695532a4h,039227077h,0dbef42f5h,009e23e6dh,0480a9908h,07e449b64h,0ad9a2e40h,07b969c1ah,09591c2a4h,06231d792h
+ DD 00f664534h,087151456h,04b68f103h,085ceae7ch,065578ab9h,0ac09c4aeh,0f044b10ch,033ec6868h,03a8ec1f1h,06ac4832bh,05847d5efh,05509d128h,0763f1574h,0f909604fh,0c32f63c4h,0b16c4303h
+ DD 07ca23cd3h,0b6ab2014h,0a391849dh,0caa7a5c6h,075678d94h,05b0673a3h,0dd303e64h,0c982ddd4h,05db6f971h,0fd7b000bh,06f876f92h,0bba2cb1fh,03c569426h,0c77332a3h,0570d74f8h,0a159100ch
+ DD 0dec67ef5h,0fd16847fh,0233e76b7h,0742ee464h,0efc2b4c8h,00b8e4134h,042a3e521h,0ca640b86h,08ceb6aa9h,0653a0190h,0547852d5h,0313c300ch,06b237af7h,024e4ab12h,08bb47af8h,02ba90162h
+ DD 0a8219bb7h,03d5e58d6h,01b06c57fh,0c691d0bdh,0d257576eh,00ae4cb10h,0d54a3dc3h,03569656ch,094cda03ah,0e5ebaebdh,0162bfe13h,0934e82d3h,0e251a0c6h,0450ac0bah,0dd6da526h,0480b9e11h
+ DD 08cce08b5h,000467bc5h,07f178d55h,0b636458ch,0a677d806h,0c5748baeh,0dfa394ebh,02763a387h,07d3cebb6h,0a12b448ah,06f20d850h,0e7adda3eh,01558462ch,0f63ebce5h,0620088a8h,058b36143h
+ DD 04d63c0eeh,08a2cc3cah,00fe948ceh,051233117h,0222ef33bh,07463fd85h,07c603d6ch,0adf0c7dch,0fe7765e5h,00ec32d3bh,0bf380409h,0ccaab359h,08e59319ch,0bdaa84d6h,09c80c34dh,0d9a4c280h
+ DD 0a059c142h,0a9d89488h,0ff0b9346h,06f5ae714h,016fb3664h,0068f237dh,0363186ach,05853e4c4h,063c52f98h,0e2d87d23h,081828876h,02ec4a766h,0e14e7b1ch,047b864fah,069192408h,00c0bc0e5h
+ DD 0b82e9f3eh,0e4d7681dh,0df25e13ch,083200f0bh,066f27280h,08909984ch,075f73227h,0462d7b00h,0f2651798h,0d90ba188h,036ab1c34h,074c6e18ch,05ef54359h,0ab256ea3h,0d1aa702fh,003466612h
+ DD 02ed22e91h,0624d6049h,06f072822h,06fdfe0b5h,039ce2271h,0eeca1115h,0db01614fh,098100a4fh,0a35c628fh,0b6b0daa2h,0c87e9a47h,0b6f94d2eh,01d57d9ceh,0c6773259h,003884a7bh,0f70bfeech
+ DD 0ed2bad01h,05fb35ccfh,01da6a5c7h,0a155cbe3h,030a92f8fh,0c2e2594ch,05bfafe43h,0649c89ceh,0e9ff257ah,0d158667dh,0f32c50aeh,09b359611h,0906014cfh,04b00b20bh,089bc7d3dh,0f3a8cfe3h
+ DD 0248a7d06h,04ff23ffdh,0878873fah,080c5bfb4h,005745981h,0b7d9ad90h,03db01994h,0179c85dbh,061a6966ch,0ba41b062h,0eadce5a8h,04d82d052h,0a5e6a318h,09e91cd3bh,095b2dda0h,047795f4fh
+ DD 0d55a897ch,0ecfd7c1fh,0b29110fbh,0009194abh,0e381d3b0h,05f0e2046h,0a98dd291h,05f3425f6h,0730d50dah,0bfa06687h,04b083b7fh,00423446ch,0d69d3417h,0397a247dh,0387ba42ah,0eb629f90h
+ DD 0d5cd79bfh,01ee426cch,0946c6e18h,00032940bh,057477f58h,01b1e8ae0h,06d823278h,0e94f7d34h,0782ba21ah,0c747cb96h,0f72b33a5h,0c5254469h,0c7f80c81h,0772ef6deh,02cd9e6b5h,0d73acbfeh
+ DD 049ee90d9h,04075b5b1h,0a06e9ebah,0785c339ah,0abf825e0h,0a1030d5bh,0a42931dch,0cec684c3h,0c1586e63h,042ab62c9h,05ab43f2bh,045431d66h,055f7835dh,057c8b2c0h,0c1b7f865h,0033da338h
+ DD 0caa76097h,0283c7513h,036c83906h,00a624fa9h,0715af2c7h,06b20afech,0eba78bfdh,04b969974h,0d921d60eh,0220755cch,07baeca13h,09b944e10h,05ded93d4h,004819d51h,06dddfd27h,09bbff86eh
+ DD 077adc612h,06b344130h,0bbd803a0h,0a7496529h,06d8805bdh,01a1baaa7h,0470343adh,0c8403902h,0175adff1h,039f59f66h,0b7d8c5b7h,00b26d7fbh,0529d75e3h,0a875f5ceh,041325cc2h,085efc7e9h
+ DD 01ff6acd3h,021950b42h,053dc6909h,0ffe70484h,028766127h,0ff4cd0b2h,04fb7db2bh,0abdbe608h,05e1109e8h,0837c9228h,0f4645b5ah,026147d27h,0f7818ed8h,04d78f592h,0f247fa36h,0d394077eh
+ DD 0488c171ah,00fb9c2d0h,013685278h,0a78bfbaah,0d5b1fa6ah,0edfbe268h,02b7eaba7h,00dceb8dbh,09ae2b710h,0bf9e8089h,0a4449c96h,0efde7ae6h,0cc143a46h,043b7716bh,0c3628c13h,0d7d34194h
+ DD 03b3f64c9h,0508cec1ch,01e5edf3fh,0e20bc0bah,02f4318d4h,0da1deb85h,05c3fa443h,0d20ebe0dh,073241ea3h,0370b4ea7h,05e1a5f65h,061f1511ch,082681c62h,099a5e23dh,0a2f54c2dh,0d731e383h
+ DD 083445904h,02692f36eh,0af45f9c0h,02e0ec469h,0c67528b7h,0905a3201h,0d0e5e542h,088f77f34h,05864687ch,0f67a8d29h,022df3562h,023b92eaeh,09bbec39eh,05c27014bh,09c0f0f8dh,07ef2f226h
+ DD 0546c4d8dh,097359638h,092f24679h,05f9c3fc4h,0a8c8acd9h,0912e8bedh,0306634b0h,0ec3a318dh,0c31cb264h,080167f41h,0522113f2h,03db82f6fh,0dcafe197h,0b155bcd2h,043465283h,0fba1da59h
+ DD 0b212cf53h,0a0425b8eh,0f8557c5fh,04f2e512eh,025c4d56ch,0c1286ff9h,0ee26c851h,0bb8a0feah,0e7d6107eh,0c28f70d2h,0e76265aah,07ee0c444h,01d1936b1h,03df277a4h,0ea9595ebh,01a556e3fh
+ DD 0e7305683h,0258bbbf9h,007ef5be6h,031eea5bfh,046c814c1h,00deb0e4ah,0a7b730ddh,05cee8449h,0a0182bdeh,0eab495c5h,09e27a6b4h,0ee759f87h,080e518cah,0c2cf6a68h,0f14cf3f4h,025e8013fh
+ DD 07e8d7a14h,08fc44140h,09556f36ah,0bb1ff3cah,014600044h,06a844385h,07451ae63h,0ba3f0c4ah,01f9af32ah,0dfcac25bh,0b1f2214bh,001e0db86h,0a4b596ach,04e9a5bc2h,0026c2c08h,083927681h
+ DD 07acaca28h,03ec832e7h,0c7385b29h,01bfeea57h,0fd1eaf38h,0068212e3h,06acf8ccch,0c1329830h,02aac9e59h,0b909f2dbh,0b661782ah,05748060dh,0c79b7a01h,0c5ab2632h,000017626h,0da44c6c6h
+ DD 0a7ea82f0h,0f26c00e8h,0e4299aafh,099cac80dh,07ed78be1h,0d66fe3b6h,0648d02cdh,0305f725fh,0623fb21bh,033ed1bc4h,07a6319adh,0fa70533eh,0be5ffb3eh,017ab562dh,056674741h,006374994h
+ DD 05c46aa8eh,069d44ed6h,0a8d063d1h,02100d5d3h,0a2d17c36h,0cb9727eah,08add53b7h,04c2bab1bh,015426704h,0a084e90ch,0a837ebeah,0778afcd3h,07ce477f8h,06651f701h,046fb7a8bh,0a0624998h
+ DD 0ed8a6e19h,0dc1e6828h,04189d9c7h,033fc2336h,0671c39bch,0026f8fe2h,0bc6f9915h,0d40c4ccdh,0f80e75cah,0afa135bbh,022adff2ch,012c651a0h,04f51ad96h,0c40a04bdh,0bbe4e832h,004820109h
+ DD 07f4c04cch,03667eb1ah,0a9404f84h,059556621h,07eceb50ah,071cdf653h,09b8335fah,0994a44a6h,0dbeb9b69h,0d7faf819h,0eed4350dh,0473c5680h,0da44bba2h,0b6658466h,0872bdbf3h,00d1bc780h
+ DD 0a1962f91h,0e535f175h,0ed58f5a7h,06ed7e061h,02089a233h,0177aa4c0h,0e539b413h,00dbcb03ah,0bb32e38eh,0e3dc424eh,06806701eh,06472e5efh,0814be9eeh,0dd47ff98h,035ace009h,06b60cfffh
+ DD 09ff91fe5h,0b8d3d931h,0f0518eedh,0039c4800h,09182cb26h,095c37632h,082fc568dh,00763a434h,0383e76bah,0707c04d5h,0824e8197h,0ac98b930h,091230de0h,092bf7c8fh,040959b70h,090876a01h
+ DD 005968b80h,0db6d96f3h,0089f73b9h,0380a0913h,0c2c61e01h,07da70b83h,0569b38c7h,095fb8394h,080edfe2fh,09a3c6512h,08faeaf82h,08f726bb9h,078424bf8h,08010a4a0h,00e844970h,029672044h
+ DD 07a2ad62ah,063c5cb81h,0ac62ff54h,07ef2b6b9h,0b3ad9db5h,03749bba4h,046d5a617h,0ad311f2ch,0c2ff3b6dh,0b77a8087h,0367834ffh,0b46feaf3h,075d6b138h,0f8aa266dh,0ec008188h,0fa38d320h
+ DD 0696946fch,0486d8ffah,0b9cba56dh,050fbc6d8h,090f35a15h,07e3d423eh,0c0dd962ch,07c3da195h,03cfd5d8bh,0e673fdb0h,0889dfca5h,00704b7c2h,0f52305aah,0f6ce581fh,0914d5e53h,0399d49ebh
+ DD 06ec293cdh,0380a496dh,08e7051f5h,0733dbda7h,0b849140ah,0037e388dh,05946dbf6h,0ee4b32b0h,0cae368d1h,0b1c4fda9h,0fdb0b2f3h,05001a7b0h,02e3ac46eh,06df59374h,039b3e656h,04af675f2h
+ DD 039949296h,044e38110h,0361db1b5h,05b63827bh,0206eaff5h,03e5323edh,0c21f4290h,0942370d2h,0e0d985a1h,0f2caaf2eh,07239846dh,0192cc64bh,0ae6312f8h,07c0b8f47h,096620108h,07dc61f91h
+ DD 0c2da7de9h,0b830fb5bh,00ff8d3beh,0d0e643dfh,0188a9641h,031ee77bah,0bcf6d502h,04e8aa3aah,09a49110fh,0f9fb6532h,02dd6b220h,0d18317f6h,052c3ea5ah,07e3ced41h,07d579c4ah,00d296a14h
+ DD 0ed4c3717h,035d6a53eh,03d0ed2a3h,09f8240cfh,0e5543aa5h,08c0d4d05h,0dd33b4b4h,045d5bbfbh,0137fd28eh,0fa04cc73h,0c73b3ffdh,0862ac6efh,031f51ef2h,0403ff9f5h,0bc73f5a2h,034d5e0fch
+ DD 008913f4fh,0f2526820h,0eac93d95h,0ea20ed61h,06ca6b26ch,051ed38b4h,0ea4327b0h,08662dcbch,0725d2aaah,06daf295ch,08e52dcdah,0bad2752fh,00b17dacch,02210e721h,0d51e8232h,0a37f7912h
+ DD 044cc3addh,04f7081e1h,087be82cfh,0d5ffa1d6h,00edd6472h,089890b6ch,03ed17863h,0ada26e1ah,063483caah,0276f2715h,02f6077fdh,0e6924cd9h,00a466e3ch,005a7fe98h,0b1902d1fh,0f1c794b0h
+ DD 082a8042ch,0e5213688h,0cd278298h,0d931cfafh,0f597a740h,0069a0ae0h,0eb59107ch,00adbb3f3h,05eaa8eb8h,0983e951eh,011b48e78h,0e663a8b5h,08a03f2c5h,01631cc0dh,011e271e2h,07577c11eh
+ DD 008369a90h,033b2385ch,0190eb4f8h,02990c59bh,0c68eac80h,0819a6145h,02ec4a014h,07a786d62h,020ac3a8dh,033faadbeh,05aba2d30h,031a21781h,0dba4f565h,0209d2742h,055aa0fbbh,0db2ce9e3h
+ DD 0168984dfh,08cef334bh,033879638h,0e81dce17h,0263720f0h,0f6e6949ch,0f593cbech,05c56feafh,0fde58c84h,08bff5601h,02eccb314h,074e24117h,04c9a8a78h,0bcf01b61h,0544c9868h,0a233e35eh
+ DD 08bd7aff1h,0b3156bf3h,01d81b146h,01b5ee4cbh,0d628a915h,07ba1ac41h,0fd89699eh,08f3a8f9ch,0a0748be7h,07329b9c9h,0a92e621fh,01d391c95h,04d10a837h,0e51e6b21h,04947b435h,0d255f53ah
+ DD 0f1788ee3h,007669e04h,0a86938a2h,0c14f27afh,0e93a01c0h,08b47a334h,0d9366808h,0ff627438h,0ca2a5965h,07a0985d8h,0d6e9b9b3h,03d9a5542h,04cf972e8h,0c23eb80bh,04fdf72fdh,05c1c33bbh
+ DD 074a86108h,00c4a58d4h,0ee4c5d90h,0f8048a8fh,0e86d4c80h,0e3c7c924h,0056a1e60h,028c889deh,0b214a040h,057e2662eh,037e10347h,0e8c48e98h,080ac748ah,087742862h,0186b06f2h,0f1c24022h
+ DD 05f74040ah,0ac2dd4c3h,0fceac957h,0409aeb71h,055c4ec23h,04fbad782h,08a7b76ech,0b359ed61h,0ed6f4a60h,012744926h,04b912de3h,0e21e8d7fh,0fc705a59h,0e2575a59h,0ed2dbc0eh,072f1d4deh
+ DD 0eb7926b8h,03d2b24b9h,0cdbe5509h,0bff88cb3h,0e4dd640bh,0d0f399afh,02f76ed45h,03c5fe130h,03764fb3dh,06f3562f4h,03151b62dh,07b5af318h,0d79ce5f3h,0d5bd0bc7h,0ec66890fh,0fdaf6b20h
+ DD 06063540ch,0735c67ech,0e5f9cb8fh,050b259c2h,03f99c6abh,0b8734f9ah,0a3a7bc85h,0f8cc13d5h,0c5217659h,080c1b305h,04ec12a54h,0fe5364d4h,0681345feh,0bd87045eh,0582f897fh,07f8efeb1h
+ DD 0d5923359h,0e8cbf1e5h,0539b9fb0h,0db0cea9dh,049859b98h,00c5b34cfh,0a4403cc6h,05e583c56h,0d48185b7h,011fc1a2dh,06e521787h,0c93fbc7eh,005105b8bh,047e7a058h,0db8260c8h,07b4d4d58h
+ DD 046eb842ah,0e33930b0h,07bdae56dh,08e844a9ah,013f7fdfch,034ef3a9eh,0636ca176h,0b3768f82h,04e09e61ch,02821f4e0h,0a0c7cddch,0414dc3a1h,054945fcdh,0d5379437h,0b3555ff1h,0151b6eefh
+ DD 06339c083h,0b31bd613h,0dfb64701h,039ff8155h,0e29604abh,07c3388d2h,0a6b10442h,01e19084bh,0eccd47efh,017cf54c0h,04a5dfb30h,089693385h,047daf9f6h,069d023fbh,07d91d959h,09222840bh
+ DD 0803bac62h,0439108f5h,0379bd45fh,00b7dd91dh,0ca63c581h,0d651e827h,0509c104fh,05c5d75f6h,01f2dc308h,07d5fc738h,0d98454beh,020faa7bfh,0a517b031h,095374beeh,0642692ach,0f036b9b1h
+ DD 039842194h,0c5106109h,049d05295h,0b7e2353eh,0efb42ee0h,0fc8c1d5ch,008ce811ch,0e04884ebh,07419f40eh,0f1f75d81h,0a995c241h,05b0ac162h,0c4c55646h,0120921bbh,08d33cf97h,0713520c2h
+ DD 0e98c5100h,0b4a65a5ch,02ddd0f5ah,06cec871dh,09ba2e78bh,0251f0b7fh,0ce3a2a5fh,0224a8434h,025f5c46fh,026827f61h,048545ec0h,06a22bedch,0b1bb5cdch,025ae5fa0h,0fcb9b98fh,0d693682fh
+ DD 091e5d7d3h,032027fe8h,073a07678h,0f14b7d17h,0c0dfdd61h,0f88497b3h,02a8c4f48h,0f7c2eec0h,03756e621h,0aa5573f4h,01825b948h,0c013a240h,063878572h,01c03b345h,0653a4184h,0a0472beah
+ DD 00ac69a80h,0f4222e27h,0f51e54f6h,034096d25h,08fffa591h,000a648cbh,069b6527fh,04e87acdch,0e285ccb4h,00575e037h,050ddcf52h,0188089e4h,0870ff719h,0aa96c9a8h,01fc7e369h,074a56cd8h
+ DD 01726931ah,041d04ee2h,03660ecfdh,00bbbb2c8h,024818e18h,0a6ef6de5h,0e7d57887h,0e421cc51h,0bea87be6h,0f127d208h,0b1cdd682h,016a475d3h,0439b63f7h,09db1b684h,0f0f113b6h,05359b3dbh
+ DD 08bf06e31h,0dfccf1deh,0dd383901h,01fdf8f44h,05017e7d2h,010775cadh,058d11eefh,0dfc3a597h,0b1ecff10h,06ec9c8a0h,028400549h,0ee6ed6cch,01b4f8d73h,0b5ad7baeh,0e00aaab9h,061b4f11dh
+ DD 0d4eff2d7h,07b32d69bh,04288b60fh,088ae6771h,037a1e723h,0159461b4h,0570aae8ch,01f3d4789h,07f9871dah,0869118c0h,0f635e278h,035fbda78h,0e1541dach,0738f3641h,0c0dae45fh,06794b13ah
+ DD 009cc0917h,0065064ach,0c68540fdh,027c53729h,0ef227671h,00d2d4c8eh,0a1785a04h,0d23a9f80h,052650359h,098c59528h,074a1acadh,0fa09ad01h,00b55bf5ch,0082d5a29h,0419b8084h,0a40f1c67h
+ DD 0dcc18770h,03a5c752eh,08825c3a5h,04baf1f2fh,021b153edh,0ebd63f74h,0b2f64723h,0a2383e47h,02646d19ah,0e7bf620ah,003c83ffdh,056cb44ech,04f6be9f1h,0af7267c9h,0c06bb5e9h,08b2dfd7bh
+ DD 0a672c5c7h,0b87072f2h,00d53c5e2h,0eacb11c8h,0ff435932h,022dac29dh,04408693ch,037bdb99dh,02899c20fh,0f6e62fb6h,0447ece24h,03535d512h,0ff577ce3h,0fbdc6b88h,0190575f2h,0726693bdh
+ DD 0ab4b35a2h,06772b0e5h,0f5eeaacfh,01d8b6001h,0795b9580h,0728f7ce4h,041fb81dah,04a20ed2ah,04fec01e6h,09f685cd4h,0a7ff50adh,03ed7ddcch,00c2d97fdh,0460fd264h,0eb82f4f9h,03a241426h
+ DD 06a8ea820h,017d1df2ch,0f22cc254h,0b2b50d3bh,0b7291426h,003856cbah,004f5ee39h,087fd26aeh,002bee4bah,09cb696cch,006820fd6h,053121804h,00212e985h,0a5dfc269h,0160f9a09h,0666f7ffah
+ DD 0bccd9617h,0c503cd33h,0ba7730a3h,0365dede4h,05ddb0786h,0798c6355h,0fc9cd3bch,0a6c3200eh,0e5e35efdh,0060ffb2ch,05555a1c1h,099a4e25bh,0f70b3751h,011d95375h,0160e1bf6h,00a57354ah
+ DD 0f8e4b065h,0ecb3ae4bh,02e53022bh,007a834c4h,08692ed96h,01cd300b3h,061ee14ech,016a6f792h,06a8649edh,08f1063c6h,0869f3e14h,0fbcdfcfeh,000a7b3ech,02cfb97c1h,07130c2f1h,0cea49b3ch
+ DD 0e9d96488h,0462d044fh,08182a0c1h,04b53d52eh,00391e9e9h,084b6ddd3h,0b1741a09h,080ab7b48h,027d3317fh,0ec0e15d4h,01a64671eh,08dfc1ddbh,0d49c5b92h,093cc5d5fh,03674a331h,0c995d53dh
+ DD 0090090aeh,0302e41ech,0edb06830h,02278a0cch,0fbc99690h,01d025932h,0b80d68dah,00c32fbd2h,0f341a6c1h,0d79146dah,01bef68a0h,0ae0ba139h,08d774b3ah,0c6b8a563h,0880ba4d7h,01cf307bdh
+ DD 019803511h,0c033bdc7h,08888c3beh,0a9f97b3bh,085c6d05eh,03d68aebch,0193919ebh,0c3b88a9dh,0c48b0ee3h,02d300748h,007a746c1h,07506bc7ch,06e6d57f3h,0fc48437ch,0cfeaa91ah,05bd71587h
+ DD 0c1bc5225h,0a4ed0408h,02719226dh,0d0b946dbh,0758d2d43h,0109ecd62h,02751759bh,075c8485ah,09ce4177ah,0b0b75f49h,079c10c3dh,04fa61a1eh,0a167fcd7h,0c062d300h,0750f0fa8h,04df3874ch
+ DD 083dfedc9h,029ae2cf9h,08d87631ah,0f8437134h,07429c8d2h,0af571711h,0146d9272h,018d15867h,069769bb7h,083053ecfh,0c479ab82h,0c55eb856h,021b0f4b2h,05ef7791ch,03d491525h,0aa5956bah
+ DD 09fe20ebah,0407a96c2h,0e52a5ad3h,0f27168bbh,0bf1d9d89h,043b60ab3h,0710e727ah,0e45c51efh,0099b4221h,0dfca5276h,02557a159h,08dc6407ch,091035895h,00ead8335h,09c55dc32h,00a9db957h
+ DD 0df61bc76h,0e40736d3h,03f778cdbh,013a619c0h,0c56ea28fh,06dd921a4h,02fa647b4h,076a52433h,0ac5bdc5dh,023591891h,0bac7dc01h,0ff4a1a72h,062df8453h,09905e261h,0e63b265fh,03ac045dfh
+ DD 0ad53dba7h,08a3f341bh,0837b625ah,08ec269cch,03ae31189h,0d71a2782h,055e96120h,08fb4f9a3h,0ff9875cfh,0804af823h,05d442a9bh,023224f57h,0ecc62679h,01c4d3b9eh,0a0e7ddb1h,091da22fbh
+ DD 06c04a661h,0a370324dh,05e376d17h,09710d3b6h,03044e357h,0ed8c98f0h,06422701ch,0c364ebbeh,07733d61ch,0347f5d51h,0cea826c3h,0d55644b9h,055a25548h,080c6e0adh,0844220a7h,00aa7641dh
+ DD 031810660h,01438ec81h,0de4b4043h,09dfa6507h,0cc3e0273h,010b515d8h,028d8cfb2h,01b6066ddh,09c9efebdh,0d3b04591h,0a21c1ff4h,0425d4bdfh,0d57607d3h,05fe5af19h,054481084h,0bbf773f7h
+ DD 094b03ed1h,08435bd69h,0634cc546h,0d9ad1de3h,000e420cah,02cf423fch,0a03096ddh,0eed26d80h,0a4db09d2h,0d7f60be7h,0960622f7h,0f47f569dh,07296c729h,0e5925fd7h,026ca2715h,0eff2db26h
+ DD 0b913e759h,0a6fcd014h,08ff4de93h,053da4786h,0c32068e1h,014616d79h,0ccdf352eh,0b187d664h,01dc90b59h,0f7afb650h,07daa1b26h,08170e943h,0700c0a84h,0c8e3bdd8h,06482bdfah,06e8d345fh
+ DD 0c5c5ea50h,084cfbfa1h,067960681h,0d3baf14ch,00dd50942h,026398403h,04716a663h,0e4b7839ch,0e7de6dc0h,0d5f1f794h,0622aa7ceh,05cd0f4d4h,059acfeech,05295f3f1h,0953e0607h,08d933552h
+ DD 0776c5722h,0c7db8ec5h,02b5f290ch,0dc467e62h,04ff425a9h,0d4297e70h,00cf7bb72h,04be924c1h,0a1892131h,00d5dc5aeh,0a705c992h,08bf8a8e3h,07a305ac5h,073a0b064h,09a8c77a8h,000c9ca4eh
+ DD 083774bddh,05dfee80fh,085734485h,063131602h,0914a69a9h,0a1b524aeh,0d4e300d7h,0ebc2ffafh,07cfa46a5h,052c93db7h,021653b50h,071e6161fh,0a4bc580ah,03574fc57h,0e1bc1253h,0c09015ddh
+ DD 0d174d7aah,04b7b47b2h,0f3a15d04h,04072d8e8h,0d6fa07edh,0eeb7d47fh,0edbdafb1h,06f2b9ff9h,03760fe8ah,018c51615h,0f06c6c13h,07a96e6bfh,00ea2d071h,04d7a0410h,00be2a5ceh,0a1914e9bh
+ DD 0d8a3c5cfh,05726e357h,02abb2b13h,01197ecc3h,031ae88ddh,06c0d7f7fh,0fdbb3efeh,015b20d1ah,070584039h,0cd06aa26h,0a7dc9747h,02277c969h,07855d815h,0bca69587h,05188b32ah,0899ea238h
+ DD 0760c1c9dh,037d9228bh,09b5c18dah,0c7efbb11h,019f6dbc5h,07f0d1bc8h,007e6905bh,04875384bh,03ba8cd86h,0c7c50baah,0c2905de0h,0b0ce40fbh,07a231952h,070840673h,0cf43de26h,0a912a262h
+ DD 0eb5b76c1h,09c38ddcch,026fc0ab4h,0746f5285h,0d62c269fh,052a63a50h,099458621h,060049c55h,03c2f7c9eh,0e7f48f82h,0917d5cf3h,06bd99043h,08701f469h,0eb1317a8h,09a449fe0h,0bd3fe2edh
+ DD 012ef3d36h,0421e79cah,03e7ea5deh,09ee3c36ch,0cdff36f7h,0e48198b5h,0c6b82228h,0aff4f967h,0c47adb7eh,015e19dd0h,0032e7dfah,045699b23h,01fae026ah,040680c8bh,0550dbf4dh,05a347a48h
+ DD 03cef0d7dh,0e652533bh,02bbb4381h,0d94f7b18h,00e80f500h,0838752beh,09e9c9bfbh,08e6e2488h,016caca6ah,0c9751697h,038531ad9h,0866c49d8h,07151ade1h,0c917e239h,06037c407h,02d016ec1h
+ DD 000eac3f9h,0a407ccc9h,0e2ed4748h,0835f6280h,01cc98e0dh,0cc54c347h,0dcb572ebh,00e969937h,08f30c9cbh,01b16c8e8h,0373c4661h,0a606ae75h,035502cabh,047aa689bh,04d9bb64fh,0f89014aeh
+ DD 031c71f7bh,0202f6a9ch,0296ffe5ch,001f95aa3h,053cec3a3h,05fc06014h,05f498a45h,0eb991237h,05d91ba87h,0ae9a935eh,00b564a19h,0c6ac6281h,03bd44e69h,08a8fe81ch,09dd11d45h,07c8b467fh
+ DD 0ea5b8e69h,0f772251fh,0c5b75fbch,0aeecb3bdh,0887ff0e5h,01aca3331h,019f0a131h,0be5d49ffh,0e5c8646fh,0582c13aah,020e19980h,0dbaa12e8h,0f7abbd94h,08f40f31ah,01dfc7663h,01f13f5a8h
+ DD 0aceb4fc0h,05d81f1eeh,05e6f0f42h,036256002h,0751370c8h,04b67d6d7h,003e80589h,02608b698h,005268301h,0cfc0d2fch,040309212h,0a6943d39h,01fd0e1c2h,0192a90c2h,037f1dc76h,0b209f113h
+ DD 097bf1298h,0efcc5e06h,0219d639eh,0cbdb6730h,0b81e8c6fh,0d009c116h,01a7ce2e5h,0a3ffdde3h,0a914d3bah,0c53fbaaah,088df85eeh,0836d500fh,066ee0751h,0d98dc71bh,0714516fdh,05a3d7005h
+ DD 039eedbbah,021d3634dh,00455a46dh,035cd2e68h,0f9d7eb0ch,0c8cafe65h,000cefb3eh,0bda3ce9eh,02c9cf7a4h,0ddc17a60h,07bcb8773h,001572ee4h,08c7548dfh,0a92b2b01h,0a84600e3h,0732fd309h
+ DD 016543a40h,0e22109c7h,0fede3c6ch,09acafd36h,06824e614h,0fb206852h,0da25dca0h,02a4544a9h,091d60b06h,025985262h,028753545h,0281b7be9h,090f13b27h,0ec667b1ah,0940e2eb4h,033a83affh
+ DD 0d5d721d5h,080009862h,05bd3a182h,00c3357a3h,07aa2cda4h,027f3a83bh,0f6f83085h,0b58ae74eh,02e6dad6bh,02a911a81h,0f43d6c5bh,0de286051h,0f996c4d8h,04bdccc41h,00ae1e24eh,0e7312ec0h
+ DD 06e6485b3h,0f8d112e7h,0771c52f8h,04d3e24dbh,0684a2f6dh,048e3ee41h,021d95551h,07161957dh,0cdb12a6ch,019631283h,02e50e164h,0bf3fa882h,03166cc73h,0f6254b63h,0aee8cc38h,03aefa7aeh
+ DD 03b36f9fdh,079b0fe62h,0fde19fc0h,026543b23h,0958482efh,0136e64a0h,09b095825h,023f63771h,0b6a1142eh,014cfd596h,0335aac0bh,05ea6aac6h,0f3081dd5h,086a0e8bdh,0003dc12ah,05fb89d79h
+ DD 0f72e34d4h,0f615c33ah,0110eec35h,00bd9ea40h,0c1dea34eh,01c12bc5bh,049ae4699h,0686584c9h,08c97b942h,013ad95d3h,04e5c7562h,04609561ah,0f2737f89h,09e94a4aeh,0371c78b6h,0f57594c6h
+ DD 0e3779ee3h,00f0165fch,0bd495d9eh,0e00e7f9dh,020284e7ah,01fa4efa2h,047ac6219h,04564badeh,0c4708e8eh,090e6312ah,0a71e9adfh,04f5725fbh,03d684b9fh,0e95f55aeh,01e94b415h,047f7ccb1h
+ DD 08d946581h,07322851bh,0bdf4a012h,0f0d13133h,06584dae0h,0a3510f69h,03c9f6c6dh,003a7c171h,0e475381ah,05be97f38h,085823334h,0ca1ba422h,00be17ddah,0f83cc5c7h,00b918c0fh,0158b1494h
+ DD 0522e6b69h,0da3a77e5h,0bbcd6c18h,069c908c3h,0d924fd56h,01f1b9e48h,0aa4bb3f7h,037c64e36h,0ee478d7dh,05a4fdbdfh,00193f7a0h,0ba75c8bch,056cd16dfh,084bc1e84h,046fad151h,01fb08f08h
+ DD 0842e9f30h,08a7cabf9h,05eab83afh,0a331d4bfh,0017f2a6ah,0d272cfbah,083aba0e3h,027560abch,00e3a6b75h,094b83387h,06b9f50f5h,025c6aea2h,0b5fdf6d0h,0803d691dh,0e6333514h,003b77509h
+ DD 061a341c1h,036178903h,00cfd6142h,03604dc60h,08533316ch,0022295ebh,044af2922h,03dbde4ach,01c7eef69h,0898afc5dh,0d14f4fa1h,058896805h,0203c21cah,005002160h,040ef730bh,06f0d1f30h
+ DD 0196224f8h,08e8c44d4h,0374d079dh,075a4ab95h,07d48f123h,079085ecch,01bf65ad8h,056f04d31h,0bda602b2h,0e220bf1ch,0f9612c69h,073ee1742h,0084fd06bh,076008fc8h,0f11380d1h,04000ef9fh
+ DD 012cfe297h,048201b4bh,0292f74e5h,03eee129ch,0c9e874e8h,0e1fe114eh,092c5fc41h,0899b055ch,03a39c8cfh,04e477a64h,078963cc9h,082f09efeh,0d333f863h,06fd3fd8fh,0dc949c63h,085132b2ah
+ DD 0516eb17bh,07e06a3abh,0d2c7372bh,073bec06fh,0ba896da6h,0e4f74f55h,08e9eb40fh,0bb4afef8h,0e61d66b0h,02d75bec8h,0ef29300bh,002bda4b4h,0026baa5ah,08bbaa8deh,0a07f4440h,0ff54befdh
+ DD 0be7a2af3h,0bd9b8b1dh,04fb74a72h,0ec51caa9h,063879697h,0b9937a4bh,0ec2687d5h,07c9a9d20h,06ef5f014h,01773e44fh,0e90c6900h,08abcf412h,08142161eh,0387bd022h,0fcb6ff2ah,050393755h
+ DD 0ed6def63h,09813fd56h,07d53106ch,053cf6482h,0431f7ac1h,0991a35bdh,063e65fafh,0f1e274ddh,044cc7880h,0f63ffa3ch,07c256981h,0411a426bh,093a420e0h,0b698b9fdh,0ae53f8feh,089fdddc0h
+ DD 032398baah,0766e0722h,05cfca031h,0205fee42h,07a029cf2h,0a49f5341h,04023890dh,0a88c68b8h,07337aaa8h,0bc275041h,00eb384f4h,09ed364adh,029aba92fh,0e0816f85h,004e38a88h,02e9e1941h
+ DD 03dafd2d5h,057eef44ah,097ed98d8h,035d1fae5h,02307f9b1h,050628c09h,0d6cba5c6h,009d84aaeh,088aaa691h,067071bc7h,0afe6cb03h,02dea57a9h,03d78ac01h,0dfe11bb4h,07fd7aa51h,07286418ch
+ DD 077f7195ah,0fabf7709h,0adeb838fh,08ec86167h,0bb4f012dh,0ea1285a8h,09a3eab3fh,0d6883503h,0309004c2h,0ee5d24f8h,013ffe95eh,0a96e4b76h,0bd223ea4h,00cdffe12h,0b6739a53h,08f5c2ee5h
+ DD 0dd968198h,05cb4aaa5h,072413a6ch,0fa131c52h,09536d903h,053d46a90h,048606d8eh,0b270f0d3h,0a053a3bch,0518c7564h,01a86caefh,0088254b7h,00ab5efd0h,0b3ba8cb4h,04605945dh,05c59900eh
+ DD 0a1887395h,0ecace1ddh,0932a65deh,040960f36h,03aa95529h,09611ff5ch,07c1e5a36h,0c58215b0h,0f0e1a524h,0d48c9b58h,0f590dfb8h,0b406856bh,09cd95662h,0c7605e04h,0a33ecf82h,00dd036eeh
+ DD 0c33156b3h,0a50171ach,04a80172eh,0f09d24eah,076dc8eefh,04e1f72c6h,05e3d44eeh,0e60caadch,0979b1d8fh,0006ef8a6h,097788d26h,060908a1ch,0266feec0h,06e08f95bh,022e8c94eh,0618427c2h
+ DD 059145a65h,03d613339h,0fa406337h,0cd9bc368h,02d8a52a0h,082d11be3h,097a1c590h,0f6877b27h,0f5cbdb25h,0837a819bh,0de090249h,02a4fd1d8h,074990e5fh,0622a7de7h,07945511bh,0840fa5a0h
+ DD 06558842dh,030b974beh,017f3d0a6h,070df8c64h,07542e46dh,07c803520h,0e4ecc823h,07251fe7fh,05e9aac9ah,0e59134cbh,0f0045d71h,011bb0934h,0dbcb1d4eh,053e5d9b5h,092defc91h,08d97a905h
+ DD 07946d3f9h,0fe289327h,007472273h,0e132bd24h,01eb6ae86h,0eeeb510ch,0f0595067h,0777708c5h,01297029eh,018e2c8cdh,0bbf9305eh,02c61095ch,06b85d6d9h,0e466c258h,0da1ea530h,08ac06c36h
+ DD 0a1304668h,0a365dc39h,007f89606h,0e4a9c885h,0acc7228dh,065a4898fh,084ca8303h,03e2347ffh,0ea7d23a3h,0a5f6fb77h,0672a71cdh,02fac257dh,07e6a44d3h,06908bef8h,0891d3d7ah,08ff87566h
+ DD 06b0cf82eh,0e58e90b3h,02615b5e7h,06438d246h,0669c145ah,007b1f8fch,036f1e1cbh,0b0d8b2dah,0d9184c4dh,054d5dadbh,0f93d9976h,03dbb18d5h,0d1147d47h,00a3e0f56h,0a0a48609h,02afa8c8dh
+ DD 0bc36742ch,0275353e8h,0eea0ed90h,0898f427eh,03e477b00h,026f4947eh,0308741e3h,08ad8848ah,0d74a2a46h,06c703c38h,09ba17ba2h,05e3e05a9h,04ab9a9e4h,0c1fa6f66h,03841d6ech,0474a2d9ah
+ DD 0653ae326h,0871239adh,0a74cbb43h,014bcf72ah,020d4c083h,08737650eh,0110ed4afh,03df86536h,0b53ca555h,0d2d86fe7h,0abd5d538h,0688cb00dh,01ad38468h,0cf81bda3h,0f01167b6h,07ccfe3cch
+ DD 06c4c1fe6h,0cf4f47e0h,0298bbb79h,0557e1f1ah,030d45a14h,0f93b974fh,00baf97c4h,0174a1d2dh,0c51fbf53h,07a003b30h,0ee68b225h,0d8940991h,01c0f4173h,05b0aa7b7h,0a20a7153h,0975797c9h
+ DD 0e3533d77h,026e08c07h,02e341c99h,0d7222e6ah,08d2dc4edh,09d60ec3dh,07c476cf8h,0bdfe0d8fh,01d056605h,01fe59ab6h,086a8551fh,0a9ea9df6h,047fb8d8ch,08489941eh,04a7f1b10h,0feb874ebh
+ DD 07ee0d98fh,0fe5fea86h,0dbf61864h,0201ad34bh,037c031d4h,045d8fe47h,0795f0822h,0d5f49faeh,0c7f4a40ch,0db0fb291h,0730ddd92h,02e69d9c1h,049d76987h,0754e1054h,07662db87h,08a24911dh
+ DD 060a71676h,061fc1810h,0f66a8ad1h,0e852d1a8h,06417231eh,0172bbd65h,03babb11fh,00d6de7bdh,0c8e347f8h,06fde6f88h,09bd99cc3h,01c587547h,034076950h,078e54ed0h,0796e83bah,097f0f334h
+ DD 04924867ah,0e4dbe1ceh,060b84917h,0bd5f51b0h,03cb09a79h,037530040h,0ff1743d8h,0db3fe0f8h,0556fa9dbh,0ed7894d8h,023412fbfh,0fa262169h,0ba7b9291h,0563be0dbh,00c9fb234h,06ca8b8c0h
+ DD 0bd763802h,0ed406aa9h,065303da1h,0c21486a0h,0c7e62ec4h,061ae291eh,0df99333eh,0622a0492h,0bb7a8ee0h,07fd80c9dh,06c01aedbh,0dc2ed3bch,008be74ech,035c35a12h,0469f671fh,0d540cb1ah
+ DD 0cf84f6c7h,0d16ced4eh,02d090f43h,08561fb9ch,06f239db4h,07e693d79h,077bd0d94h,0a736f928h,02c1950eeh,007b4d929h,056dc11b3h,0da177543h,07a6a878eh,0a5dfbbaah,04decb08ah,01c70cb29h
+ DD 06f0f7c50h,0fba28c8bh,0854dcc6dh,0a8eba2b8h,036b78642h,05ff8e89ah,0f6873adfh,0070c1c8eh,06484d2e4h,0bbd3c371h,00d414129h,0fb78318fh,06ad93b0bh,02621a39ch,0a9e917f7h,0979d74c2h
+ DD 061fb0428h,0fc195647h,0bee624d4h,04d78954ah,0b8ae86fdh,0b94896e0h,0c91c8b13h,06667ac0ch,043bcf832h,09f180512h,0a0010137h,0fbadf8b7h,0b3ba8aa7h,0c69b4089h,0e687ce85h,0fac4bacdh
+ DD 0977eab40h,09164088dh,02760b390h,051f4c5b6h,0340dd553h,0d238238fh,0db1d31c9h,0358566c3h,05068f5ffh,03a5ad69eh,0daff6b06h,0f31435fch,0d6debff0h,0ae549a5bh,075e01331h,059e5f0b7h
+ DD 098559acfh,05d492fb8h,04db79b50h,096018c2eh,0609f66aah,055f4a48fh,04900a14fh,01943b3afh,015a40d39h,0c22496dfh,04c20f7c5h,0b2a44684h,03b98404ch,076a35afah,0ff5d1b77h,0bec75725h
+ DD 0bea06444h,0b67aa163h,0f724b6f2h,027e95bb2h,0d238c8abh,03c20e3e9h,0ddd6ae17h,01213754eh,0716e0f74h,08c431020h,0ffc095c2h,06679c82eh,0d0ac2932h,02eb3adf4h,001bb7a76h,02cc970d3h
+ DD 0740f0e66h,070c71f2fh,02b6b23cch,0545c616bh,0b40a8bd7h,04528cfcbh,02ab27722h,0ff839633h,0025ac99ah,0049127d9h,02b63e33bh,0d314d4a0h,028d84519h,0c8c310e7h,0b3bc84bah,00fcb8983h
+ DD 038634818h,02cc52261h,0b44c2e0bh,0501814f4h,054dfdba3h,0f7e181aah,0e759718ch,0cfd58ff0h,0d3b507a8h,0f90cdb14h,0c50bdad8h,057bd478eh,050e5f9aah,029c197e2h,0e40bc855h,04db6eef8h
+ DD 0d1fc0654h,02cc8f21ah,081269d73h,0c71cc963h,0077f49f9h,0ecfbb204h,0ca56b793h,0dde92571h,0f97ad8f7h,09abed6a3h,0924de3bdh,0e6c19d3fh,0a140a800h,08dce92f4h,01337af07h,085f44d1eh
+ DD 009d64c52h,05953c08bh,0f5df9749h,0a1b5e49fh,052735f7dh,0336a8fb8h,09add676bh,0b332b6dbh,0b4511aa4h,0558b88a0h,0dbd5cc55h,009788752h,0d8cd52bdh,016b43b9ch,0c2a2696bh,07f0bc5a0h
+ DD 0c11f61efh,0146e12d4h,03a83e79eh,09ce10754h,06cbfca15h,008ec73d9h,05b49653fh,009ff29adh,0e7da946eh,0e31b72bdh,0ee80a4f2h,0ebf9eb3bh,017598ce4h,0d1aabd08h,053f37e80h,018b5fef4h
+ DD 05958cd79h,0d5d5cdd3h,01d373114h,03580a1b5h,0fa935726h,0a36e4c91h,0ef20d760h,0a38c534dh,02ff5845bh,07088e40ah,0bd78177fh,0e5bb40bdh,0857f9920h,04f06a7a8h,0e968f05dh,0e3cc3e50h
+ DD 0e5682d26h,01d68b7feh,0aec7f87ch,05206f76fh,0041951abh,041110530h,0d4b5a71ah,058ec52c1h,00f75cf9ah,0f3488f99h,0ba82d0d5h,0f411951fh,0618895abh,027ee75beh,06d8aab14h,0eae060d4h
+ DD 07fb54dc2h,09ae1df73h,025963649h,01f3e391bh,0fe055081h,0242ec32ah,08491c9bdh,05bd450efh,0981eb389h,0367efc67h,03a0550d5h,0ed7e1928h,0ab3ce75ch,0362e776bh,01f24c523h,0e890e308h
+ DD 0feccef76h,0b961b682h,08bba6d92h,08b8e11f5h,02b2375c4h,08f2ccc4ch,0e2f86cfah,00d7f7a52h,09efe5633h,0fd94d30ah,05451f934h,02d8d246bh,0244e6a00h,02234c6e3h,0ddec8c50h,0de2b5b0dh
+ DD 0bf776f5bh,02ce53c5ah,060357b05h,06f724071h,071bf3f7ah,0b2593717h,0440c4a9fh,087d2501ch,087b05340h,0440552e1h,021624c32h,0b7bf7cc8h,022facddbh,04155a6ceh,0889837efh,05a4228cbh
+ DD 0fd4fd671h,0ef87d6d6h,0c2daa10eh,0a233687eh,003c0eb96h,075622244h,08bf19be6h,07632d184h,040735ff4h,005d0f8e9h,0c00931f1h,03a3e6e13h,0dafe3f18h,031ccde6ah,0cfe51207h,0f381366ah
+ DD 060167d92h,024c222a9h,07529f18ch,062f9d6f8h,00353b114h,0412397c0h,0ef808043h,0334d89dch,02a4383ceh,0d9ec63bah,05cf92ba0h,0cec8e937h,0c8be74c0h,0fb8b4288h,0105d4391h,067d6912fh
+ DD 01b913149h,07b996c46h,03a4e02dah,036aae2efh,0972de594h,0b68aa003h,04ec6d545h,0284ec70dh,061391d54h,0f3d2b2d0h,0fe114e92h,069c5d5d6h,0b4482dffh,0be0f00b5h,0f5bf33c5h,0e1596fa5h
+ DD 096a71cbah,010595b56h,0fdcadeb7h,0944938b2h,0fccd8471h,0a282da4ch,00d37bfe1h,098ec05f3h,00698304ah,0e171ce1bh,021bdf79bh,02d691444h,01b21dec1h,0d0cd3b74h,016a15f71h,0712ecd8bh
+ DD 000fd56e1h,08d4c00a7h,0f9527c18h,002ec9692h,04a3e42e1h,021c44937h,01392ae0ah,09176fbabh,044b7b618h,08726f1bah,0f1de491ch,0b4d7aae9h,007b582c0h,0f91df7b9h,0ef60aa3ah,07e116c30h
+ DD 0466265d7h,099270f81h,04df7adf0h,0b15b6fe2h,0f9738f7fh,0fe33b2d3h,0d6d70f95h,048553ab9h,0c21e94dbh,02cc72ac8h,0bdc0bbeeh,0795ac38dh,02e40478fh,00a1be449h,0052bde55h,081bd3394h
+ DD 056b3c4f2h,063c8dbe9h,0904177cch,0017a99cfh,04d010fc1h,0947bbddbh,0bb2c9b21h,0acf9b00bh,047173611h,02970bc8dh,0ac7d756fh,01a4cbe08h,067d541a2h,006d9f4aah,059c2cf44h,0a3e8b689h
+ DD 04d88f1ddh,0aad066dah,07ad35deah,0c604f165h,04478ca67h,07edc0720h,0ba02ce06h,0a10dfae0h,0af36f4e4h,0eceb1c76h,0af3f8f48h,0994b2292h,077c8a68ch,0bf9ed77bh,051744c9dh,074f544eah
+ DD 08113a757h,082d05bb9h,08a9885e4h,04ef2d2b4h,01aa7865fh,01e332be5h,0290d1a52h,022b76b18h,044351683h,0308a2310h,0a3f22840h,09d861896h,0841ed947h,05959ddcdh,0154b73bfh,00def0c94h
+ DD 04c7c15e0h,0f0105417h,03a277c32h,0539bfb02h,0f9dccf5fh,0e699268eh,00247a3bdh,09f5796a5h,04f157269h,08b839de8h,07a30196bh,0c825c1e5h,0dc8a5a91h,06ef0aabch,0498b7fe6h,0f4a8ce6ch
+ DD 070cbac78h,01cce35a7h,0f6b23958h,083488e9bh,0d76cb011h,00341a070h,0ae1b2658h,0da6c9d06h,0dd648c52h,0b701fb30h,052fb9fd1h,0994ca02ch,06f563086h,006933117h,017856babh,03d2b8100h
+ DD 05963a46eh,0e89f48c8h,0a99e61c7h,0658ab875h,04b8517b4h,06e296f87h,0fc1bc656h,036c4fcdch,0a3906defh,0de5227a1h,062418945h,09fe95f57h,0fdd96cdeh,020c91e81h,0da4480deh,05adbe47eh
+ DD 0396de2b6h,0a009370fh,0f0ecc7bdh,098583d4bh,0e51d0672h,0f44f6b57h,0556b1984h,003d6b078h,0b0b64912h,027dbdd93h,015687b09h,09b3a3434h,051ec20a9h,00dba6461h,0ff28187ch,0ec93db7fh
+ DD 066e48bddh,000ff8c24h,011ccd78eh,02514f2f9h,0e1250603h,0eba11f4fh,0243fa156h,08a22cd41h,0b283e4c6h,0a4e58df4h,08b39783fh,078c29859h,0a5259809h,05235aee2h,00e0227ddh,0c16284b5h
+ DD 01338830dh,0a5f57916h,0d2123fcah,06d4b8a6bh,0f9c546f8h,0236ea68ah,0fa608d36h,0c1d36873h,08d436d13h,0cd76e495h,08fb080afh,0d4d9c221h,0e8ad3fb5h,0665c1728h,0b3d572e0h,0cf1ebe4dh
+ DD 0584c5e20h,0a7a8746ah,0b9dc7035h,0267e4ea1h,0b9548c9bh,0593a15cfh,04bd012f3h,05e6e2135h,08c8f936eh,0df31cc6ah,0b5c241dch,08af84d04h,0345efb86h,063990a6fh,0b9b962cbh,06fef4e61h
+ DD 025722608h,0f6368f09h,0131cf5c6h,0131260dbh,0fab4f7ach,040eb353bh,037eee829h,085c78880h,0c3bdf24eh,04c1581ffh,0f5c3c5a8h,05bff75cbh,0a14e6f40h,035e8c83fh,00295e0cah,0b81d1c0fh
+ DD 0f43a730fh,0fcde7cc8h,033ab590eh,0e89b6f3ch,0ad03240bh,0c823f529h,098bea5dbh,082b79afeh,0962fe5deh,0568f2856h,060c591f3h,00c590adbh,04a28a858h,01fc74a14h,0b3203f4ch,03b662498h
+ DD 06c39765ah,091e3cf0dh,0ac3cca0bh,0a2db3acdh,0cb953b50h,0288f2f08h,0cf43cf1ah,02414582ch,060eee9a8h,08dec8bbch,0729aa042h,054c79f02h,06532f5d5h,0d81cd5ech,0cf82e15fh,0a672303ah
+ DD 0719c0563h,0376aafa8h,0bc5fc79fh,0cd8ad2dch,0cb750cd3h,0303fdb9fh,04418b08eh,014ff052fh,03e2d6520h,0f75084cfh,0144ed509h,07ebdf0f8h,0d3f25b98h,0f43bf0f2h,0a354d837h,086ad71cfh
+ DD 026f43572h,0b827fe92h,05d824758h,0dfd3ab5bh,0539094c1h,0315dd23ah,066623d68h,085c0e37ah,07be19ae0h,0575c7972h,0df0d36b5h,0616a3396h,026b1ff7eh,0a1ebb3c8h,0140ad453h,0635b9485h
+ DD 0da430c0bh,092bf3cdah,03a96dac6h,04702850eh,015ac326ah,0c91cf0a5h,0ab8c25e4h,095de4f49h,0e265c17ch,0b01bad09h,0087b3881h,024e45464h,0e1fac5cah,0d43e583ch,06ead97a6h,0e17cb318h
+ DD 074dcec46h,06cc39243h,054c2b73fh,033cfc02dh,0f26cd99ch,082917844h,0d1773f89h,08819dd95h,00871f427h,009572aa6h,0f6f01c34h,08e0cf365h,0bff1f5afh,07fa52988h,0e75e8e50h,04eb357eah
+ DD 0868af75dh,0d9d0c8c4h,045c8c7eah,0d7325cffh,0cc81ecb0h,0ab471996h,0611824edh,0ff5d55f3h,01977a0eeh,0be314541h,0722038c6h,05085c4c5h,0f94bb495h,02d5335bfh,0c8e2a082h,0894ad8a6h
+ DD 0ada35438h,05c3e2341h,0049b8c4eh,0f4a9fc89h,09f17cf34h,0beeb355ah,06c91fe10h,03f311e0eh,092ab9891h,0c2d20038h,03e8ce9a9h,0257bdcc1h,088c53beeh,01b2d9789h,0cdba143ah,0927ce89ah
+ DD 0523db280h,0b0a32ccah,050d43783h,05c889f8ah,04897d16fh,0503e04b3h,008f5f2e8h,08cdb6e78h,0179c8e74h,06ab91cf0h,048211d60h,0d8874e52h,0ea851200h,0f948d4d5h,0e6f9840ah,04076d41eh
+ DD 047b517eah,0c20e263ch,030685e5eh,079a448fdh,0f90631a0h,0e55f6f78h,0a79e6346h,088a790b1h,080969fe8h,062160c7dh,041491bb9h,054f92fd4h,05c957526h,0a6645c23h,0bea3ce7bh,0f44cc5aeh
+ DD 08b1e68b7h,0f7628327h,0303f29d3h,0c731ad7ah,057d03ecbh,0fe5a9ca9h,041bc97a7h,096c0d50ch,09b4f7f24h,0c4669fe7h,03d9967efh,0fdd781d8h,05d2c208dh,07892c7c3h,0ae545cb3h,08bf64f7ch
+ DD 0467be912h,0c01f862ch,0c73d30cch,0f4c85ee9h,06ab83ec7h,01fa6f4beh,04e3e3cf9h,0a07a3c1ch,00c00beb3h,087f8ef45h,0000d4c3eh,030e2c2b3h,0fe08bf5bh,01aa00b94h,09224ef52h,032c133aah
+ DD 032e5685dh,038df16bbh,058e6f544h,068a9e069h,0cdc5ebc6h,0495aaff7h,0378b135fh,0f894a645h,009e27ecfh,0f316350ah,058f7179dh,0eced201eh,0e97861bah,02eec273ch,0d693be2eh,047ec2caeh
+ DD 0f68367ceh,0fa4c97c4h,0be5a5755h,0e4f47d0bh,0b298a979h,017de815dh,0c177dc7dh,0d7eca659h,049ded0a3h,020fdbb71h,0fb34d3c5h,04cb2aad4h,060858a33h,02cf31d28h,0a24aa40fh,03b6873efh
+ DD 02c11bb37h,0540234b2h,0ed4c74a3h,02d0366ddh,0eec5f25dh,0f9a968dah,067b63142h,036601068h,068d7b6d4h,007cd6d2ch,00c842942h,0a8f74f09h,07768b1eeh,0e2751404h,0fe62aee4h,04b5f7e89h
+ DD 089070d26h,0c6a77177h,0dd1c8bc7h,0a1f28e4eh,0469e1f17h,0ea5f4f06h,0fbdb78e0h,078fc242ah,08b0588f1h,0c9c7c592h,01535921eh,0b6b7a0fdh,0bde5ae35h,0cc5bdb91h,012ff1864h,0b42c485eh
+ DD 0dbab98aah,0a1113e13h,0a17b1024h,0de9d469bh,0c0462d3ah,023f48b37h,07c5c078dh,03752e537h,015544eb9h,0e3a86addh,080fba279h,0f013aea7h,0f22001b5h,08b5bb76ch,0f02891abh,0e617ba14h
+ DD 0936219d3h,0d39182a6h,0ae51cb19h,05ce1f194h,0bf07a74ch,0c78f8598h,022cbf1bch,06d7158f2h,0e300ce18h,03b846b21h,02d11275dh,035fba630h,0a0239b9bh,05fe25c36h,0df05d940h,0d8beb35dh
+ DD 01f7e320dh,04db02bb0h,06da320eah,00641c364h,0821389a3h,06d95fa5dh,08fcd8e3dh,092699748h,0ceb6c143h,0316fef17h,0d933762bh,067fcb841h,0118b17f8h,0bb837e35h,09fd24821h,04b92552fh
+ DD 046aca793h,0ae6bc70eh,0e579311bh,01cf0b0e4h,05802f716h,08dc631beh,0bddbee4dh,0099bdc6fh,00caf8b05h,0cc352bb2h,072d63df2h,0f74d505ah,091c4f408h,0b9876d4bh,09e229b2dh,01ce18473h
+ DD 083abdb4ah,049507597h,0dee84b18h,0850fbcb6h,0609e67dch,06325236eh,09336c6d8h,004d831d9h,0fa12d45dh,08deaae3bh,04746e246h,0e425f8ceh,024f5f31eh,08004c175h,0ad62c3b7h,0aca16d8fh
+ DD 09152f934h,00dc15a6ah,0ed0e12c1h,0f1235e5dh,0da477dach,0c33c06ech,0b2ea0006h,076be8732h,00c0cd313h,0cf3f7831h,0a614260dh,03c524553h,0cab22d15h,031a756f8h,077827a20h,003ee10d1h
+ DD 01994ef20h,0d1e059b2h,0638ae318h,02a653b69h,02f699010h,070d5eb58h,009f5f84ah,0279739f7h,08b799336h,05da4663ch,0203c37ebh,0fdfdf14dh,0a1dbfb2dh,032d8a9dch,077d48f9bh,0ab40cff0h
+ DD 0d20b42d5h,0c018b383h,09f78845fh,0f9a810efh,0bdba9df0h,040af3753h,0131dfdf9h,0b90bdcfch,0f01ab782h,018720591h,06af12a88h,0c823f211h,00dc14401h,0a51b80f3h,0fb2dfbe3h,0de248f77h
+ DD 00cafe751h,0ef5a44e5h,0d4dcd221h,073997c9ch,0de854024h,032fd86d1h,0a09b84bbh,0d5b53adch,0dcedd8d1h,0008d7a11h,074b32c84h,0406bd1c8h,005dde8b1h,05d4472ffh,0fce2b32fh,02e25f2cdh
+ DD 029dfc254h,0bec0dd5eh,02b98b267h,04455fcf6h,0c72df2adh,00b4d43a5h,048a75397h,0ea70e6beh,05820f3bfh,02aad6169h,09e37f68fh,0f410d2ddh,07be5ac83h,070fb7dbah,036ec3eech,0636bb645h
+ DD 09754e21ch,027104ea3h,08d63c373h,0bc87a3e6h,04109db9ah,0483351d7h,060134da7h,00fa724e3h,0b0720b16h,09ff44c29h,006aceeadh,02dd0cf13h,0e26929a6h,05942758ch,0b766a92bh,096c5db92h
+ DD 05f18395eh,0cec7d4c0h,01f80d032h,0d3f22744h,0cb86075bh,07a68b37ah,0afef92dbh,0074764ddh,07bc7f389h,0ded1e950h,0b9756460h,0c580c850h,07da48157h,0aeeec2a4h,082c587b3h,03f0b4e7fh
+ DD 0a9f19c53h,0231c6de8h,06974e34eh,05717bd73h,0f1508fa9h,0d9e1d216h,0dadaa124h,09f112361h,0823b7348h,080145e31h,0ac634069h,04dd8f0d5h,02297c258h,0e3d82fc7h,09cee7431h,0276fcfeeh
+ DD 02bc0aea9h,08eb61b5eh,0de329431h,04f668fd5h,038e4b87eh,003a32ab1h,073d0ef0bh,0e1374517h,0853ac983h,01a46f7e6h,068e78a57h,0c3bdf42eh,02ea96dd1h,0acf20785h,0f1638460h,0a10649b9h
+ DD 0879fbbedh,0f2369f0bh,0da9d1869h,00ff0ae86h,056766f45h,05251d759h,02be8d0fch,04984d8c0h,0d21008f0h,07ecc95a6h,03a1a1c49h,029bd54a0h,0d26c50f3h,0ab9828c5h,051d0d251h,032c0087ch
+ DD 00c1cdb26h,09bac3ce6h,0557ca205h,0cd94d947h,09db1fdcdh,01b1bd598h,0a3d8b149h,00eda0108h,056152fcch,095066610h,0e7192b33h,0c2f037e6h,0c92e05a4h,0deffb41ah,0c2f6c62eh,01105f6c2h
+ DD 08733913ch,068e73500h,03f3adc40h,0cce86163h,038a278e9h,0f407a942h,02ab21292h,0d13c1b9dh,01c74cf5ch,093ed7ec7h,0f1a4c1b4h,08887dc48h,04b3a11f1h,03830ff30h,058937cb6h,0358c5a3ch
+ DD 089022829h,0027dc404h,03b798f79h,040e93977h,038be6eadh,090ad3337h,0f34c0a5dh,09c23f6bch,0fbffd8bbh,0d1711a35h,01949d3ddh,060fcfb49h,07825d93ah,009c8ef4bh,0a0a8c968h,024233cffh
+ DD 0e6d982afh,067ade46ch,0e7544d7ch,0ebb6bf3eh,03d8bd087h,0d6b9ba76h,04dc61280h,046fe382dh,0b5bdbd75h,0bd39a7e8h,0b8f228feh,0ab381331h,0ce1c4300h,00709a77ch,0f337ceach,06a247e56h
+ DD 0636288beh,08f34f21bh,0c8a7c305h,09dfdca74h,0ea919e04h,06decfd1bh,08e1991f8h,0cdf2688dh,0d0f8a67eh,0e607df44h,00b58d010h,0d985df4bh,00c24f8f4h,057f834c5h,0a0bf01aeh,0e976ef56h
+ DD 0a1c32373h,0536395ach,0734c0a13h,0351027aah,05e6bd5bch,0d2f1b5d6h,0223debedh,02b539e24h,00eaa1d71h,0d4994cech,0661dcf65h,02a83381dh,07b54c740h,05f1aed2fh,0d6dda5eeh,00bea3fa5h
+ DD 036cc6134h,09d4fb684h,0c0a443ddh,08eb9bbf3h,0383b7d2ah,0fc500e2eh,05b775257h,07aad621ch,00a8f7cc0h,069284d74h,007562d65h,0e820c2ceh,0499758eeh,0bf9531b9h,06ee0cc2dh,073e95ca5h
+ DD 0fbaf50a5h,0f61790abh,0684e0750h,0df55e76bh,0f176b005h,0ec516da7h,07a2dddc7h,0575553bbh,0553afa73h,037c87ca3h,04d55c251h,0315f3ffch,0af3e5d35h,0e846442ah,06495ff28h,061b91149h
+ DD 0fa326dc3h,023cc95d3h,018fc2ceah,01df4da1fh,0d0a37d59h,024bf9adch,0320d6e1eh,0b6710053h,0618344d1h,096f9667eh,0a06445afh,0cc7ce042h,0d68dbc3ah,0a02d8514h,0280b5a5bh,04ea109e4h
+ DD 0b40961bfh,05741a7ach,06aa56bfah,04ada5937h,002b765d1h,07feb9145h,0e6ad1582h,0561e97beh,0da3982f5h,0bbc4a5b6h,0b546f468h,00c2659edh,059612d20h,0b8e7e6aah,0ac19e8e0h,0d83dfe20h
+ DD 0b835398ch,08530c45fh,0b38a41c2h,06106a8bfh,035f5dcdbh,021e8f9a6h,0cae498edh,039707137h,0d8249f00h,070c23834h,0ab2537a0h,09f14b58fh,05f61c0c2h,0d043c365h,009a194a7h,0dc5926d6h
+ DD 08e77738ah,0ddec0339h,0fba46426h,0d07a63efh,0ee7f6e86h,02e58e79ch,0ff32d241h,0e59b0459h,020fa0338h,0c5ec84e5h,0eaff5aceh,097939ac8h,0b4a38313h,00310a4e3h,08f9d9885h,09115fba2h
+ DD 05fadf8c3h,08dd710c2h,0ce19c0e2h,066be38a2h,04cfe5022h,0d42a279ch,00e24e1b8h,0597bb530h,0c153ca7fh,03cde86b7h,0707d63bdh,0a8d30fb3h,0bd60d21eh,0ac905f92h,07b9a54abh,098e7ffb6h
+ DD 0e9726a30h,0d7147df8h,0afce3533h,0b5e216ffh,02ff1ec40h,0b550b799h,0a1e953fdh,06b613b87h,0792d5610h,087b88dbah,0a190fbe1h,02ee1270ah,02ef581dah,002f4e2dch,0eff82a95h,0016530e4h
+ DD 08fd6ee89h,0cbb93dfdh,046848fffh,016d3d986h,01da47adfh,0600eff24h,00ad47a71h,01b9754a0h,070c33b98h,08f9266dfh,0df34186eh,0aadc87aeh,04ad24132h,00d2ce8e1h,019946ebah,08a47cbfch
+ DD 062b5f3afh,047feeb66h,00abb3734h,0cefab561h,019f35cb1h,0449de60eh,0157f0eb9h,039f8db14h,03c61bfd6h,0ffaecc5bh,041216703h,0a5a4d41dh,0224e1cc2h,07f8fabedh,0871ad953h,00d5a8186h
+ DD 0d22da9a9h,0f10774f7h,0cc8a9b0dh,045b8a678h,0bdc32cffh,0d9c2e722h,0337202a5h,0bf71b5f5h,069fc4db9h,095c57f2fh,0765d01e1h,0b6dad34ch,0cb904635h,07e0bd13fh,0763a588ch,061751253h
+ DD 081af2c2dh,0d85c2997h,081b9d7dah,0c0f7d9c4h,008533e8dh,0838a34aeh,0311d8311h,015c4cb08h,08e121e14h,097f83285h,085000a5fh,0eea7dc1eh,05d256274h,00c6059b6h,0b95075c0h,0ec9beaceh
+ DD 01df97828h,0173daad7h,0a8937877h,0bf851cb5h,001646f3ch,0b083c594h,050c6d352h,03bad30cfh,0496bbceah,0feb2b202h,018a1e8bah,03cf9fd4fh,01c066029h,0d26de7ffh,04e9ed4f8h,039c81e9eh
+ DD 07b390d35h,0d8be0cb9h,0964aab27h,001df2bbdh,0c3ef64f8h,03e8c1a65h,0716ed1ddh,0567291d1h,05f5406d3h,095499c6ch,05ba8e23fh,071fdda39h,0d5096eceh,0cfeb320eh,0ca66dd16h,0be7ba92bh
+ DD 0c6fb5a7dh,04608d36bh,06d2dd0e0h,0e3eea15ah,08f97a36ah,075b0a3ebh,01c83de1eh,0f59814cch,01c33c23fh,056c9c5b0h,06faa4136h,0a96c1da4h,0de316551h,046bf2074h,01f756c8fh,03b866e7bh
+ DD 01495ed6bh,0727727d8h,0b682dce7h,0b2394243h,0758610f3h,08ab8454eh,0857d72a4h,0c243ce84h,0dbbf370fh,07b320d71h,078e0f7cah,0ff9afa37h,0ea7b523fh,00119d1e0h,0058c7d42h,0b997f8cbh
+ DD 037bbb184h,0285bcd2ah,0a45d1fa6h,051dcec49h,0e29634cbh,06ade3b64h,026b86ef1h,0080c94a7h,02283fbe3h,0ba583db1h,05a9315edh,0902bddc8h,086964bech,007c1ccb3h,0b6258301h,078f4eacfh
+ DD 056f90823h,04bdf3a49h,0741d777bh,0ba0f5080h,0f38bf760h,0091d71c3h,09b625b02h,09633d50fh,0b8c9de61h,003ecb743h,05de74720h,0b4751254h,074ce1cb2h,09f9defc9h,000bd32efh,0774a4f6ah
+ DD 073848f22h,0aca385f7h,0f3f8558eh,053dad716h,093c471f9h,0ab7b34b0h,019644bc7h,0f530e069h,0dd59d31ah,03d9fb1ffh,008daa795h,04382e0dfh,0d5cc88d7h,0165c6f4bh,04a18c900h,0eaa392d5h
+ DD 0648024eeh,094203c67h,08c2fabcdh,0188763f2h,0bbaec835h,0a80f87ach,0f29d8d54h,0632c96e0h,04c00a95eh,029b0a60eh,0e011e9fah,02ef17f40h,015b77223h,0f6c0e1d1h,014b04e32h,0aaec2c62h
+ DD 03d84e58ch,0d35688d8h,0958571dbh,02af5094ch,0760682a6h,04fff7e19h,0e39a407ch,04cb27077h,04ff0e321h,00f59c547h,01b34c8ffh,0169f34a6h,052bc1ba7h,02bff1096h,083583544h,0a25423b7h
+ DD 00ac8b782h,05d55d5d5h,02db3c892h,0ff6622ech,06b8bb642h,048fce741h,069d7e3dch,031d6998ch,0cadcaed0h,0dbaf8004h,0d81d053ch,0801b0142h,059630ec6h,094b189fch,0af762c8eh,0120e9934h
+ DD 0fdc6a404h,053a29aa4h,0a1909948h,019d8e01eh,0d7e89681h,03cfcabf1h,04e132d37h,03321a50dh,0e9a86111h,0d0496863h,006a3bc65h,08c0cde61h,0fc9f8eefh,0af866c49h,0ff7f5141h,02066350eh
+ DD 0e56ddfbdh,04f8a4689h,0fe32983ah,0ea1b0c07h,0873cb8cbh,02b317462h,02d93229fh,0658deddch,00f64ef58h,065efaf4dh,0730cc7a8h,0fe43287dh,03d047d70h,0aebc0c72h,0d92d26c9h,092efa539h
+ DD 094b56526h,006e78457h,00961002dh,0415cb80fh,076dcb10fh,089e5c565h,0ff9259feh,08bbb6982h,09abc2668h,04fe8795bh,01e678fb1h,0b5d4f534h,07b7da2b9h,06601f3beh,0a13d6805h,098da59e2h
+ DD 001799a52h,0190d8ea6h,0b86d2952h,0a20cec41h,07fff2a7ch,03062ffb2h,079f19d37h,0741b32e5h,04eb57d47h,0f80d8181h,016aef06bh,07a2d0ed4h,01cecb588h,009735fb0h,0c6061f5bh,01641caaah
+ DD 020151427h,07f99824fh,092430206h,0206828b6h,0e1112357h,0aa9097d7h,009e414ech,0acf9a2f2h,027915356h,0dbdac9dah,0001efee3h,07e0734b7h,0d2b288e2h,054fab5bbh,0f62dd09ch,04c630fc4h
+ DD 01ac2703bh,08537107ah,06bc857b5h,0b49258d8h,0bcdaccd1h,057df14deh,0c4ae8529h,024ab68d7h,0734e59d0h,07ed8b5d4h,0c495cc80h,05f8740c8h,0291db9b3h,084aedd5ah,04fb995beh,080b360f8h
+ DD 05fa067d1h,0ae915f5dh,09668960ch,04134b57fh,0a48edaach,0bd3656d6h,0fc1d7436h,0dac1e3e4h,0d81fbb26h,0674ff869h,0b26c33d4h,0449ed3ech,0d94203e8h,085138705h,0beeb6f4ah,0ccde538bh
+ DD 0a61a76fah,055d5c68dh,0ca1554dch,0598b441dh,0773b279ch,0d39923b9h,036bf9efch,033331d3ch,0298de399h,02d4c848eh,0a1a27f56h,0cfdb8e77h,057b8ab70h,094c855eah,06f7879bah,0dcdb9daeh
+ DD 0019f2a59h,07bdff8c2h,0cb4fbc74h,0b3ce5bb3h,08a9173ddh,0ea907f68h,095a75439h,06cd3d0d3h,0efed021ch,092ecc4d6h,06a77339ah,009a9f9b0h,07188c64ah,087ca6b15h,044899158h,010c29968h
+ DD 0ed6e82efh,05859a229h,065ebaf4eh,016f338e3h,05ead67aeh,00cd31387h,054ef0bb4h,01c73d228h,074a5c8c7h,04cb55131h,07f69ad6ah,001cd2970h,0e966f87eh,0a04d00ddh,00b7b0321h,0d96fe447h
+ DD 088fbd381h,0342ac06eh,05c35a493h,002cd4a84h,054f1bbcdh,0e8fa89deh,02575ed4ch,0341d6367h,0d238202bh,0ebe357fbh,0a984ead9h,0600b4d1ah,052436ea0h,0c35c9f44h,0a370751bh,096fe0a39h
+ DD 07f636a38h,04c4f0736h,00e76d5cbh,09f943fb7h,0a8b68b8bh,0b03510bah,09ed07a1fh,0c246780ah,06d549fc2h,03c051415h,0607781cah,0c2953f31h,0d8d95413h,0955e2c69h,07bd282e3h,0b300fadch
+ DD 087e9189fh,081fe7b50h,0f42dda27h,0db17375ch,0cf0a5904h,022f7d896h,0ebe348e6h,0a0e57c5ah,0f40e3c80h,0a61011d3h,08db705c5h,0b1189321h,050fedec3h,04ed9309eh,04d6d5c1dh,0dcf14a10h
+ DD 055691342h,0056c265bh,091049dc7h,0e8e08504h,0c9bae20ah,0131329f5h,0d9dccdb4h,096c8b3e8h,0fb4ee6b4h,08c5ff838h,041e8ccf0h,0fc5a9aebh,0fae050c6h,07417b764h,000452080h,00953c3d7h
+ DD 038dfe7e8h,021372682h,02bb79d4bh,0ea417e15h,076e7cf2dh,059641f1ch,0ea0bcfcch,0271e3059h,07253ecbdh,0624c7dfdh,04fca6186h,02f552e25h,04d866e9ch,0cbf84ecdh,0f68d4610h,073967709h
+ DD 0c27901b4h,0a14b1163h,0899b8bf3h,0fd9236e0h,0cbc6da0ah,042b091ech,05ad1d297h,0bb1dac6fh,0a91cf76eh,080e61d53h,0d31f1ee7h,04110a412h,013efcf77h,02d87c3bah,0df450d76h,01f374bb4h
+ DD 00d188dabh,05e78e2f2h,0f4b885efh,0e3968ed0h,07314570fh,046c0568eh,001170521h,031616338h,04f0c8afeh,018e1e7e2h,0deea78dah,04caa75ffh,07c5d8a51h,082db67f2h,06f505370h,036a44d86h
+ DD 00333974fh,0d72c5bdah,027a70146h,05db516aeh,0210ef921h,034705281h,00c9c38e5h,0bff17a8fh,012476da1h,078f4814eh,033c16980h,0c1e16613h,0424d4bcah,09e5b386fh,0c85740deh,04c274e87h
+ DD 06c2f5226h,0b6a9b88dh,0550d7ca8h,014d1b944h,01fc41709h,0580c85fch,054c6d519h,0c1da368bh,0d5113cf7h,02b0785ceh,05a34708fh,00670f633h,015cc3f88h,046e23767h,050c72c8fh,01b480cfah
+ DD 04147519ah,020288602h,026b372f0h,0d0981each,0a785ebc8h,0a9d4a7cah,0dbdf58e9h,0d953c50dh,0fd590f8fh,09d6361cch,044e6c917h,072e9626bh,022eb64cfh,07fd96110h,09eb288f3h,0863ebb7eh
+ DD 06aca8ee7h,06e6ab761h,0d7b40358h,097d10b39h,01e5feb0dh,01687d377h,08265a27ah,0c83e50e4h,0c954b313h,08f75a9feh,0310d1f61h,0cc2e8f47h,06557d0e0h,0f5ba81c5h,03eaf6207h,025f9680ch
+ DD 04354080bh,0f95c6609h,07bf2fe1ch,05225bfa5h,05c7d98fah,0c5c004e2h,0019aaf60h,03561bf1ch,0ba151474h,05e6f9f17h,0b04f6ecah,0dec2f934h,0269acb1eh,064e368a1h,00cdda493h,01332d9e4h
+ DD 0df23de05h,060d6cf69h,0009339a0h,066d17da2h,00a693923h,09fcac985h,0ed7c6a6dh,0bcf057fch,0f0b5662ch,0c3c5c8c5h,0dcba4f24h,025318dd8h,0082b69ffh,060e8cb75h,01e728c01h,07c23b3eeh
+ DD 0097e4403h,015e10a0ah,019854665h,0cb3d0a86h,0d67d4826h,088d8e211h,00b9d2839h,0b39af66eh,0bd475ca8h,0a5f94588h,0c077b80bh,0e06b7966h,0da27c26ch,0fedb1485h,0fe0fd5e0h,0d290d33ah
+ DD 0f34fb0fah,0a40bcc47h,01fb1ab09h,0b4760cc8h,0a273bfe3h,08fca0993h,0f70b213ch,013e4fe07h,0fdb05163h,03bcdb992h,00c2b19b6h,08c484b11h,0aaf2e3e2h,01acb815fh,0b89ff1b4h,0c6905935h
+ DD 0586e74e1h,0b2ad6f9dh,067b80484h,0488883adh,0369c3ddbh,0758aa2c7h,09f9afd31h,08ab74e69h,05e21beb1h,010fc2d28h,0318c42f9h,03484518ah,053cf40c3h,0377427dch,0391bc1d9h,09de0781ah
+ DD 0693807e1h,08faee858h,04e81ccc7h,0a3865327h,06f835b84h,002c30ff2h,00d3d38d4h,0b604437bh,05ca1823dh,0b3fc8a98h,003be0324h,0b82f7ec9h,0cf684a33h,0ee36d761h,09f29bf7dh,05a01df0eh
+ DD 01306583dh,0686202f3h,0437c622eh,005b10da0h,0076a7bc8h,0bf9aaa0fh,08f8f4e43h,025e94efbh,0fa3dc26dh,08a35c9b7h,096ff03c5h,0e0e5fb93h,0ebc394ceh,0a77e3843h,08361de60h,0cede6595h
+ DD 0a1993545h,0d27c22f6h,024d671bah,0ab01cc36h,0a169c28eh,063fa2877h,02eb08376h,0925ef904h,053aa0b32h,03b2fa3cfh,071c49d7ah,0b27beb5bh,0d105e27fh,0b60e1834h,04f68570dh,0d6089788h
+ DD 0d6fbc2ach,023094ce0h,0815ff551h,0738037a1h,06bef119ch,0da73b1bbh,0eef506bah,0dcf6c430h,0e3ef104ah,000e4fe7bh,00a065628h,0ebdd9a2ch,08792043eh,0853a81c3h,0b3b59108h,022ad6eceh
+ DD 039cd297dh,09fb813c0h,005bda5d9h,08ec7e16eh,00d104b96h,02834797ch,07c511510h,0cc11a2e7h,096ee6380h,096ca5a53h,0cea38742h,0054c8655h,0d54dfa7dh,0b5946852h,01f4ab207h,097c422e7h
+ DD 00c22b540h,0bf907509h,0b7c267d4h,02cde42aah,05ab0d693h,0ba18f9edh,06e4660d9h,03ba62aa6h,0ab9ea96ah,0b24bf97bh,0e3b60e32h,05d039642h,07c4d9bd5h,04e6a4506h,07ed4a6a4h,0666c5b9eh
+ DD 08edbd7cch,0fa3fdcd9h,0c6ccd753h,04660bb87h,021e6b64fh,09ae90820h,0b36bfb3fh,08a56a713h,05726d47fh,0abfce096h,00b1a9a7fh,09eed01b2h,04eb74a37h,030e9cad4h,053e9666dh,07b2524cch
+ DD 08f4b002fh,06a29683bh,041f4fc20h,0c2200d7ah,03a338acch,0cf3af47ah,0e7128975h,06539a4fbh,0c33c7fcfh,0cec31c14h,0c7be322bh,07eb6799bh,06646f623h,0119ef4e9h,054d7299bh,07b7a26a5h
+ DD 0403f46f2h,0cb37f08dh,01a0ec0c7h,094b8fc43h,0c332142fh,0bb8514e3h,0e80d2a7ah,0f3ed2c33h,0b639126ch,08d2080afh,0e3553adeh,0f7b6be60h,01c7e2b09h,03950aa9fh,06410f02bh,0847ff958h
+ DD 0678a31b0h,0877b7cf5h,03998b620h,0d50301aeh,0c00fb396h,0734257c5h,004e672a6h,0f9fb18a0h,0e8758851h,0ff8bd8ebh,05d99ba44h,01e64e4c6h,07dfd93b7h,04b8eaedfh,004e76b8ch,0ba2f2a98h
+ DD 0e8053433h,07d790cbah,03d2c9585h,0c8e725a0h,0cdd8f5edh,058c5c476h,0efa9fe1dh,0d106b952h,00eff13a9h,03c5c775bh,0e057b930h,0242442bah,0c9b70cbdh,0e9f458d4h,0a3cdb89ah,069b71448h
+ DD 00e2ed742h,041ee46f6h,040067493h,0573f1045h,09d54c304h,0b1e154ffh,08d3a7502h,02ad0436ah,0431a8121h,0ee4aaa2dh,0886f11edh,0cd38b3abh,0034a0eb7h,057d49ea6h,0f7e85e58h,0d2b773bdh
+ DD 09b5c1f14h,04a559ac4h,03e54df2bh,0c444be1ah,0eda41891h,013aad704h,05eb5c788h,0cd927bech,0e48c8a34h,0eb3c8516h,04b546669h,01b7ac812h,0594df8ech,01815f896h,079227865h,087c6a79ch
+ DD 09b56ddbdh,0ae02a2f0h,08a2f1cf3h,01339b5ach,0839dff0dh,0f2b569c7h,0fee9a43dh,0b0b9e864h,077bb064eh,04ff8ca41h,0fd249f63h,0145a2812h,0f86f689ah,03ab7beach,001d35f5eh,09bafec27h
+ DD 04265aa91h,028054c65h,0035efe42h,0a4b18304h,09639dec7h,06887b0e6h,03d52aea5h,0f4b8f6adh,0971a8a13h,0fb9293cch,04c934d07h,03f159e5dh,009acbc29h,02c50e9b1h,07154d129h,008eb65e6h
+ DD 030b75c3eh,04feff589h,094491c93h,00bb82fe2h,089af62bbh,0d8ac377ah,09685e49fh,0d7b51490h,004497f19h,0abca9a7bh,01a7ad13fh,01b35ed0ah,03ec86ed6h,06b601e21h,0ce0c76f1h,0da91fcb9h
+ DD 0d7ab27e1h,09e28507bh,063945b7bh,07c19a555h,0aafc9827h,06b43f0a1h,03aa55b91h,0443b4fbdh,06962c88fh,0962b2e65h,0ce0db0cah,0139da8d4h,01b8d6c4fh,0b93f05ddh,0180b9824h,0779cdff7h
+ DD 0ae57c7b7h,0bba23fddh,01b932522h,0345342f2h,0556d4aa3h,0fd9c80feh,06525bb61h,0a03907bah,0ff218933h,038b010e1h,0aa52117bh,0c066b654h,094f2e6eah,08e141920h,00d32f2b2h,066a27dcah
+ DD 0048b3717h,069c7f993h,0b178ae1ch,0bf5a989ah,0564f1d6bh,049fa9058h,0d31fde4eh,027ec6e15h,07276e7fch,04cce0373h,089d6bf02h,064086d79h,04ccdd979h,05a72f046h,047775631h,0909c3566h
+ DD 075dd7125h,01c07bc6bh,087a0428dh,0b4c6bc97h,0fdeb6b9dh,0507ece52h,0b2c95432h,0fca56512h,0d0e8bd06h,015d97181h,0c6bb46eah,0384dd317h,03952b624h,05441ea20h,04e7dc2fbh,0bcf70deeh
+ DD 06628e8c3h,0372b016eh,0b60a7522h,007a0d667h,00a344ee2h,0cf05751bh,0118bdeech,00ec09a48h,0d83dce46h,06e4b3d4eh,099d2fc6eh,043a6316dh,056cf044ch,0a99d8989h,0ae3e5fb7h,07c7f4454h
+ DD 0fbabbe92h,0b2e6b121h,0e1330076h,0281850fbh,097890015h,0093581ech,075ff77f5h,069b1ddedh,0ab105105h,07cf0b18fh,0a89ccfefh,0953ced31h,0eb914009h,03151f85fh,088ed48adh,03c9f1b87h
+ DD 04a7eadcbh,0c9aba1a1h,0522e71cfh,0928e7501h,03a2e4f83h,0eaede727h,01ce3bbd3h,0467e10d1h,0b955dcf0h,0f3442ac3h,0d3d5e527h,0ba96307dh,0fd77f474h,0f763a10eh,06a6e1ff0h,05d744bd0h
+ DD 0a777899eh,0d287282ah,0d03f3cdeh,0e20eda8fh,050b07d31h,06a7e75bbh,06f379de4h,00b7e2a94h,019f593cfh,031cb64adh,01e76ef1dh,07b1a9e4fh,0b62d609ch,0e18c9c9dh,0e779a650h,0439bad6dh
+ DD 0e032f144h,0219d9066h,0e8b2ec6ah,01db632b8h,0fda12f78h,0ff0d0fd4h,02a25d265h,056fb4c2dh,0255a03f1h,05f4e2ee1h,0e96af176h,061cd6af2h,0d068bc97h,0e0317ba8h,0264b988eh,0927d6babh
+ DD 0e90fb21eh,0a18f07e0h,0bba7fca1h,000fd2b80h,095cd67b5h,020387f27h,0d39707f7h,05b89a4e7h,0894407ceh,08f83ad3fh,06c226132h,0a0025b94h,0f906c13bh,0c79563c7h,04e7bb025h,05f548f31h
+ DD 0eac6d113h,02b4c6b8fh,00e813c76h,0a67e3f9ch,03fe1f4b9h,03982717ch,026d8050eh,058865819h,0f7f06f20h,099f3640ch,02a66ebc2h,0dc610216h,0767a1e08h,052f2c175h,05999871bh,005660e1ah
+ DD 06d3c4693h,06b0f1762h,037ed7beah,0f0e7d627h,0b75b226dh,0c51758c7h,01f91613bh,040a88628h,0bbb38ce0h,0889dbaa7h,0bddcad81h,0e0404b65h,08bc9671fh,0febccd3ah,0ee1f5375h,0fbf9a357h
+ DD 028f33398h,05dc169b0h,072e90f65h,0b07ec11dh,0faab1eb1h,0ae7f3b4ah,05f17538ah,0d970195eh,00181e640h,052b05cbeh,02643313dh,0f5debd62h,05df31f82h,076148154h,03a9e13c5h,023e03b33h
+ DD 04fde0c1fh,0ff758949h,0e5b6ec20h,0bf8a1abeh,087e1db6ch,0702278fbh,035ed658fh,0c447ad7ah,003d0ccf2h,048d4aa38h,0819a7c03h,080acb338h,06e17cecch,09bc7c89eh,003be1d82h,046736b8bh
+ DD 0c0432f96h,0d65d7b60h,0deb5442fh,0ddebe7a3h,07dff69a2h,079a25307h,002cf3122h,037a56d94h,0f2350d0ah,08bab8aedh,0037b0d9ah,013c3f276h,044c65caeh,0c664957ch,0c2e71a88h,088b44089h
+ DD 05cb02664h,0db88e5a3h,08686c72eh,05d4c0bf1h,0a682d53eh,0ea3d9b62h,00b2ad431h,09b605ef4h,0c69645d0h,071bac202h,06a1b66e7h,0a115f03ah,0158f4dc4h,0fe2c563ah,04d12a78ch,0f715b3a0h
+ DD 0d413213ah,08f7f0a48h,0c04becdbh,02035806dh,05d8587f5h,0ecd34a99h,09f6d3a71h,04d8c3079h,08d95a8f6h,01b2a2a67h,0f2110d0dh,0c58c9d7dh,0cf8fba3fh,0deee81d5h,00c7cdf68h,0a42be3c0h
+ DD 0d43b5eaah,02126f742h,0dfa59b85h,0054a0766h,0126bfd45h,09d0d5e36h,0384f8a8fh,0a1f8fbd7h,0d563fccch,0317680f5h,0f280a928h,048ca5055h,027b578cfh,0e00b81b2h,02994a514h,010aad918h
+ DD 0b7bdc953h,0d9e07b62h,05bc086ddh,09f0f6ff2h,0655eee77h,009d1ccffh,05bef7df1h,045475f79h,086f702cch,03faa28fah,00f021f07h,092e60905h,07f8fa8c6h,0e9e62968h,0f036ea2ch,0bd71419ah
+ DD 06028da9ah,0171ee1cch,0c251f573h,05352fe1ah,03fa997f4h,0f8ff236eh,0a5749d5fh,0d831b6c9h,0e350e2c2h,07c872e1dh,01e0ce403h,0c56240d9h,06974f5cbh,0f9deb077h,0961c3728h,07d50ba87h
+ DD 05a3a2518h,0d6f89426h,0c6303d43h,0cf817799h,0619e5696h,0510a0471h,03a5e307bh,0ab049ff6h,0feb13ec7h,0e4cdf9b0h,09d8ff90ch,0d5e97117h,09afa96afh,0f6f64d06h,09d2012a2h,000d0bf5eh
+ DD 0358bcdc0h,0e63f301fh,00a9d47f8h,007689e99h,04f43d43ah,01f689e2fh,090920904h,04d542a16h,09ca0a707h,0aea293d5h,08ac68065h,0d061fe45h,00090008ch,01033bf1bh,0c08a6db6h,029749558h
+ DD 0c1d5d034h,074b5fc59h,067e215e0h,0f712e9f6h,0860200e6h,0fd520cbdh,03ea22588h,00229acb4h,0fff0c82eh,09cd1e14ch,059c69e73h,087684b62h,096ccb989h,0da85e61ch,0a3d06493h,02d5dbb02h
+ DD 0e86b173ch,0f22ad33ah,0a79ff0e3h,0e8e41ea5h,0dd0d0c10h,001d2d725h,0032d28f9h,031f39088h,07829839eh,07b3f71e1h,04502ae58h,00cf691b4h,0befc6115h,0ef658dbdh,0b3ab5314h,0a5cd6ee5h
+ DD 05f1d2347h,0206c8d7bh,04cc2253ah,0794645bah,058389e08h,0d517d8ffh,09f847288h,04fa20deeh,0d797770ah,0eba072d8h,0bf429e26h,07360c91dh,080af8279h,07200a3b3h,082dadce3h,06a1c9150h
+ DD 0c35d8794h,00ee6d3a7h,00356bae5h,0042e6558h,0643322fdh,09f59698dh,050a61967h,09379ae15h,0fcc9981eh,064b9ae62h,06d2934c6h,0aed3d631h,05e4e65ebh,02454b302h,0f9950428h,0ab09f647h
+ DD 022248acch,0b2083a12h,03264e366h,01f6ec0efh,05afdee28h,05659b704h,0e6430bb5h,07a823a40h,0e1900a79h,024592a04h,0c9ee6576h,0cde09d4ah,04b5ea54ah,052b6463fh,0d3ca65a7h,01efe9ed3h
+ DD 0305406ddh,0e27a6dbeh,0dd5d1957h,08eb7dc7fh,0387d4d8fh,0f54a6876h,0c7762de4h,09c479409h,099b30778h,0be4d5b5dh,06e793682h,025380c56h,0dac740e3h,0602d37f3h,01566e4aeh,0140deabeh
+ DD 0afd32acfh,04481d067h,0e1f71ccfh,0d8f0fccah,0b596f2dah,0d208dd0ch,09aad93f9h,0d049d730h,042ab580eh,0c79f263dh,023f707b4h,009411bb1h,0835e0edah,08cfde1ffh,090f03402h,072707490h
+ DD 0c49a861eh,0eaee6126h,0e14f0d06h,0024f3b65h,0c69bfc17h,051a3f1e8h,0a7686381h,0c3c3a8e9h,0b103d4c8h,03400752ch,09218b36bh,002bc4613h,07651504ah,0c67f75ebh,0d02aebfah,0d6848b56h
+ DD 0c30fa92bh,0bd9802e6h,09a552784h,05a70d96dh,03f83169bh,09085c4eah,006908228h,0fa9423bbh,0fe97a5b9h,02ffebe12h,071b99118h,085da6049h,063178846h,09cbc2f7fh,09153218eh,0fd96bc70h
+ DD 01782269bh,0958381dbh,02597e550h,0ae34bf79h,05f385153h,0bb5c6064h,0e3088048h,06f0e96afh,077884456h,0bf6a0215h,069310ea7h,0b3b5688ch,004fad2deh,017c94295h,017896d4dh,0e020f0e5h
+ DD 00976505fh,0730ba0abh,0095e2ec5h,0567f6813h,06331ab71h,047062010h,041d22b9fh,072cfa977h,08a2373dah,033e55eadh,07ba45a68h,0a8d0d5f4h,003029d15h,0ba1d8f9ch,0fc55b9f3h,08f34f1cch
+ DD 0bbe5a1a9h,0cca4428dh,03126bd67h,08187fd5fh,048105826h,00036973ah,0b8bd61a0h,0a39b6663h,02d65a808h,06d42deefh,094636b19h,04969044fh,0dd5d564ch,0f611ee47h,0d2873077h,07b2f3a49h
+ DD 0300eb294h,094157d45h,0169c1494h,02b2a656eh,0d3a47aa9h,0c000dd76h,0a6243ea4h,0a2864e4fh,0db89842eh,082716c47h,061479fb7h,012dfd7d7h,0e0b2f6dch,03b9a2c56h,0d7f85d67h,046be862ah
+ DD 00f82b214h,003b0d8ddh,0f103cbc6h,0460c34f9h,018d79e19h,0f32e5c03h,0a84117f8h,08b8888bah,0c0722677h,08f3c37dch,01c1c0f27h,010d21be9h,0e0f7a0c6h,0d47c8468h,0adecc0e0h,09bf02213h
+ DD 042b48b99h,00baa7d12h,048424096h,01bcb665dh,0ebfb5cfbh,08b847cd6h,09ad4d10dh,087c2ae56h,00de36726h,0f1cbb122h,03fdfbd21h,0e7043c68h,04e79d460h,04bd0826ah,04bd1a2cbh,011f5e598h
+ DD 0b7fe7b6eh,097554160h,0400a3fb2h,07d16189ah,0e328ca1eh,0d73e9beah,0e793d8cch,00dd04b97h,0506db8cch,0a9c83c9bh,0cf38814ch,05cd47aaeh,0b64b45e6h,026fc430dh,0d818ea84h,0079b5499h
+ DD 0c1c24a3bh,0ebb01102h,01c161c1ah,0ca24e568h,036f00a4ah,0103eea69h,076176c7bh,09ad76ee8h,0538e0ff7h,097451fc2h,06604b3b0h,094f89809h,03249cfd7h,06311436eh,041224f69h,027b4a7bdh
+ DD 0e0ac2941h,003b5d21ah,0c2d31937h,0279b0254h,0cac992d0h,03307c052h,0efa8b1f3h,06aa7cb92h,00d37c7a5h,05a182580h,0342d5422h,013380c37h,0d5d2ef92h,092ac2d66h,0030c63c6h,0035a70c9h
+ DD 04ce4f152h,0c16025ddh,0f9df7c06h,01f419a71h,091e4bb14h,06d5b2214h,0839fb4ceh,0fc43c6cch,0925d6b2dh,049f06591h,062186598h,04b37d9d3h,0d01b1629h,08c54a971h,051d50e05h,0e1a9c29fh
+ DD 071ba1861h,05109b785h,0d0c8f93dh,048b22d5ch,08633bb93h,0e8fa84a7h,05aebbd08h,053fba6bah,0e5eea7d8h,07ff27df3h,068ca7158h,0521c8796h,0ce6f1a05h,0b9d5133bh,0fd0ebee4h,02d50cd53h
+ DD 0c5a3ef16h,0c82115d6h,0ba079221h,0993eff9dh,04b5da81ch,0e4da2c5eh,08033fd85h,09a89dbdbh,02b892891h,060819ebfh,05d14a4d5h,053902b21h,0d7fda421h,06ac35051h,061c83284h,0cc6ab885h
+ DD 0f74cff17h,014eba133h,0ecb813f2h,0240aaa03h,06f665beeh,0cfbb6540h,0a425ad73h,0084b1fe4h,0d081f6a6h,0009d5d16h,0eef82c90h,035304fe8h,0aa9eaa22h,0f20346d5h,0ac1c91e3h,00ada9f07h
+ DD 0968a6144h,0a6e21678h,007b31a1eh,054c1f77ch,05781fbe1h,0d6bb787eh,0e31f1c4ah,061bd2ee0h,0781105fch,0f25aa1e9h,07b2f8e80h,09cf2971fh,0cdff919bh,026d15412h,034bc896eh,001db4ebeh
+ DD 0b40df1cfh,07d9b3e23h,094e971b4h,059337373h,0669cf921h,0bf57bd14h,00c1a1064h,0865daedfh,083279125h,03eb70bd3h,034ecdaabh,0bc3d5b9fh,05f755cafh,091e3ed7eh,0d41e6f02h,049699f54h
+ DD 0d4a7a15bh,0185770e1h,0eaac87e7h,008f3587ah,0473133eah,0352018dbh,004fd30fch,0674ce719h,0088b3e0eh,07b8d9835h,05d0d47a1h,07a0356a9h,06474a3c4h,09d9e7659h,0ff66966ch,061ea48a7h
+ DD 00f3e4834h,030417758h,017a9afcbh,0fdbb21c2h,02f9a67b3h,0756fa17fh,0a245c1a8h,02a6b2421h,04af02291h,064be2794h,02a5804feh,0ade465c6h,0a6f08fd7h,08dffbd39h,0aa14403bh,0c4efa84ch
+ DD 0442b0f5ch,0a1b91b2ah,0cf997736h,0b748e317h,0cee90e16h,08d1b62bfh,00b2078c0h,0907ae271h,00c9bcdddh,0df31534bh,039adce83h,0043fb054h,0d826846ah,099031043h,0b144f393h,061a9c0d6h
+ DD 047718427h,0dab48046h,06e830f8bh,0df17ff9bh,0e49a1347h,0408d7ee8h,091c1d4aeh,06ac71e23h,01defd73ch,0c8cbb9fdh,0bbbbfec5h,019840657h,09e7ef8eah,039db1cb5h,064105f30h,078aa8296h
+ DD 0a3738c29h,0a3d9b7f0h,0bc3250a3h,00a2f235ah,0445e4cafh,055e506f6h,033475f7ah,00974f73dh,05ba2f5a8h,0d37dbba3h,06af40066h,0542c6e63h,0c5d73e2ch,026d99b53h,06c3ca33eh,006060d7dh
+ DD 0065fef4ah,0cdbef1c2h,0fd5b92e3h,077e60f7dh,026708350h,0d7c549f0h,034f121bfh,0201b3ad0h,00334fc14h,05fcac2a1h,0344552f6h,08a9a9e09h,097653082h,07dd8a1d3h,079d4f289h,05fc0738fh
+ DD 017d2d8c3h,0787d244dh,070830684h,0effc6345h,0e4f73ae5h,05ddb96ddh,0172549a5h,08efb14b1h,02245ae7ah,06eb73eeeh,0ea11f13eh,0bca4061eh,030b01f5dh,0b577421dh,0782e152ch,0aa688b24h
+ DD 0bd3502bah,067608e71h,0b4de75a0h,04ef41f24h,0fd6125e5h,0b08dde5eh,0a409543fh,0de484825h,065cc2295h,01f198d98h,06e0edfa2h,0428a3771h,0adf35fc7h,04f9697a2h,0f7cac3c7h,001a43c79h
+ DD 00fd3659ah,0b05d7059h,0bb7f2d9ah,08927f30ch,08cf984d3h,04023d1ach,002897a45h,032125ed3h,03d414205h,0fb572dadh,0e3fa82a9h,073000ef2h,0f10a5581h,04c0868e9h,06b0b3ca5h,05b61fc67h
+ DD 07cae440ch,0c1258d5bh,0402b7531h,021c08b41h,0de932321h,0f61a8955h,02d1408afh,03568faf8h,09ecf965bh,071b15e99h,0e917276fh,0f14ed248h,0820cf9e2h,0c6f4caa1h,018d83c7eh,0681b20b2h
+ DD 0c6c01120h,06cde738dh,0ae70e0dbh,071db0813h,074afe18ch,095fc0644h,0129e2be7h,034619053h,0db2a3b15h,080615ceah,0db4c7073h,00a49a19eh,08fd2d367h,00e1b84c8h,0033fb8aah,0d74bf462h
+ DD 0533ef217h,0889f6d65h,0c3ca2e87h,07158c7e4h,0dc2b4167h,0fb670dfbh,0844c257fh,075910a01h,0cf88577dh,0f336bf07h,0e45e2aceh,022245250h,07ca23d85h,02ed92e8dh,02b812f58h,029f8be4ch
+ DD 0076fe12bh,0dd9ebaa7h,0ae1537f9h,03f2400cbh,017bdfb46h,01aa93528h,067883b41h,0c0f98430h,00170911dh,05590ede1h,034d4b17fh,07562f5bbh,01826b8d2h,0e1fa1df2h,06bd80d59h,0b40b796ah
+ DD 03467ba92h,0d65bf197h,0f70954b0h,08c9b46dbh,00e78f15dh,097c8a0f3h,085a4c961h,0a8f3a69ah,061e4ce9bh,04242660fh,06ea6790ch,0bf06aab3h,0ec986416h,0c6706f8eh,09a9fc225h,09e56dec1h
+ DD 09a9898d9h,0527c46f4h,05633cdefh,0d799e77bh,07d9e4297h,024eacc16h,06b1cb734h,0abb61ceah,0f778443ch,0bee2e8a7h,029de2fe6h,03bb42bf1h,03003bb6fh,0cbed86a1h,0d781cdf6h,0d3918e6ch
+ DD 09a5103f1h,04bee3271h,0f50eac06h,05243efc6h,06adcc119h,0b8e122cbh,0c0b80a08h,01b7faa84h,06dfcd08ch,032c3d1bdh,00be427deh,0129dec4eh,01d263c83h,098ab679ch,0cef64effh,0afc83cb7h
+ DD 02fa6be76h,085eb6088h,01328cbfeh,0892585fbh,0cf618ddah,0c154d3edh,03abaf26eh,0c44f601bh,02be1fdfdh,07bf57d0bh,021137feeh,0a833bd2dh,02db591a8h,09353af36h,05562a056h,0c76f26dch
+ DD 03fdf5a51h,01d87e47dh,055c9cab0h,07afb5f93h,089e0586eh,091bbf58fh,00d843709h,07c72c018h,099b5c3dch,0a9a5aafbh,03844aeb0h,0a48a0f1dh,0b667e482h,07178b7ddh,06e23a59ah,0453985e9h
+ DD 001b25dd8h,04a54c860h,0fb897c8ah,00dd37f48h,00ea90cd9h,05f8aa610h,016d5830dh,0c8892c68h,0ef514ca5h,0eb4befc0h,0e72c9ee6h,0478eb679h,0dbc40d5fh,09bca20dah,0dde4f64ah,0f015de21h
+ DD 0eaf4b8a5h,0aa6a4de0h,04bc60e32h,068cfd9cah,07fd15e70h,0668a4b01h,0f27dc09dh,0d9f0694ah,0ba708bcdh,0f6c3cad5h,05bb95c2ah,05cd2ba69h,033c0a58fh,0aa28c1d3h,0abc77870h,023e274e3h
+ DD 0dfd20a4ah,044c3692dh,081a66653h,0091c5fd3h,009a0757dh,06c0bb691h,0667343eah,09072e8b9h,080848bech,031d40eb0h,079fd36cch,095bd480ah,065ed43f5h,001a77c61h,02e0d40bfh,0afccd127h
+ DD 01cc1884bh,0eccfc82dh,05d4753b4h,0c85ac201h,0658e099fh,0c7a6caach,004b27390h,0cf46369eh,0506467eah,0e2e7d049h,037cdeccch,0481b63a2h,0ed80143ah,04029abd8h,0bcb00b88h,028bfe3c7h
+ DD 00643d84ah,03bec1009h,0abd11041h,0885f3668h,0f83a34d6h,0db02432ch,0719ceebeh,032f7b360h,0dad1fe7ah,0f06c7837h,05441a0b0h,060a157a9h,0e2d47550h,0704970e9h,0271b9020h,0cd2bd553h
+ DD 033e24a0bh,0ff57f82fh,0f2565079h,09cbee23fh,0eb5f5825h,016353427h,0e948d662h,0276feec4h,0da10032bh,0d1b62bc6h,0f0e72a53h,0718351ddh,02420e7bah,093452076h,03a00118dh,096368fffh
+ DD 0150a49e4h,000ce2d26h,03f04706bh,00c28b636h,058b196d0h,0bad65a46h,0ec9f8b7ch,06c8455fch,02d71867eh,0e90c895fh,0edf9f38ch,05c0be31bh,0d8f6ec04h,02a37a15eh,08cd85251h,0239639e7h
+ DD 09c7c4c6bh,0d8975315h,0d7409af7h,0603aa3c0h,0007132fbh,0b8d53d0ch,0a6849238h,068d12af7h,0bf5d9279h,0be0607e7h,0aada74ceh,09aa50055h,0ba7e8ccbh,0e81079cbh,0a5f4ff5eh,0610c71d1h
+ DD 05aa07093h,09e2ee1a7h,0a75da47ch,0ca84004bh,03de75401h,0074d3951h,0bb311592h,0f938f756h,000a43421h,096197618h,007bc78c8h,039a25362h,00a171276h,0278f710ah,08d1a8f08h,0b28446eah
+ DD 0e3b6a661h,0184781bfh,0e6d279f7h,07751cb1dh,0c59eb662h,0f8ff95d6h,058d3dea7h,0186d90b7h,0dfb4f754h,00e4bb6c1h,02b2801dch,05c5cf56bh,01f54564dh,0c561e452h,0f0dd7f13h,0b4fb8c60h
+ DD 033ff98c7h,0f8849630h,0cf17769ch,09619fffah,01bfdd80ah,0f8090bf6h,0422cfe63h,014d9a149h,06f6df9eah,0b354c360h,0218f17eah,0dbcf770dh,079eb3480h,0207db7c8h,0559b6a26h,0213dbda8h
+ DD 029fc81b3h,0ac4c200bh,0171d87c1h,0ebc3e09fh,01481aa9eh,091799530h,092e114fah,0051b92e1h,0ecb5537fh,0df8f92e9h,0290c7483h,044b1b2cch,02adeb016h,0a711455ah,081a10c2ch,0964b6856h
+ DD 0cec03623h,04f159d99h,0ef3271eah,005532225h,0c5ee4849h,0b231bea3h,07094f103h,057a54f50h,09598b352h,03e2d421dh,067412ab4h,0e865a49ch,01cc3a912h,0d2998a25h,00c74d65dh,05d092808h
+ DD 04088567ah,073f45908h,01f214a61h,0eb6b280eh,0caf0c13dh,08c9adc34h,0f561fb80h,039d12938h,0bc6edfb4h,0b2dc3a5eh,0fe4d210eh,07485b1b1h,0e186ae72h,0062e0400h,06eeb3b88h,091e32d5ch
+ DD 04be59224h,06df574d7h,0716d55f3h,0ebc88ccch,0cad6ed33h,026c2e6d0h,00d3e8b10h,0c6e21e7dh,05bcc36bbh,02cc5840eh,07da74f69h,09292445eh,04e5193a8h,08be8d321h,08df06413h,03ec23629h
+ DD 0b134defah,0c7e9ae85h,01bb2d475h,06073b1d0h,02863c00dh,0b9ad615eh,0525f4ac4h,09e29493dh,04e9acf4fh,0c32b1deah,0a50db88dh,03e1f01c8h,004da916ch,0b05d70eah,0d865803eh,0714b0d0ah
+ DD 09920cb5eh,04bd493fch,092c7a3ach,05b44b1f7h,0bcec9235h,0a2a77293h,0cd378553h,05ee06e87h,0da621607h,0ceff8173h,099f5d290h,02bb03e4ch,0a6f734ach,02945106ah,0d25c4732h,0b5056604h
+ DD 0e079afeeh,05945920ch,06789831fh,0686e17a0h,0b74a5ae5h,05966bee8h,01e258d46h,038a673a2h,083141c95h,0bd1cc1f2h,00e96e486h,03b2ecf4fh,074e5fc78h,0cd3aa896h,02482fa7ah,0415ec10ch
+ DD 080503380h,015234419h,0d314b392h,0513d917ah,063caecaeh,0b0b52f4eh,02dc7780bh,007bf22adh,0e4306839h,0e761e8a1h,05dd7feaah,01b3be962h,074c778f1h,04fe728deh,05e0070f6h,0f1fa0bdah
+ DD 06ec3f510h,085205a31h,0d2980475h,02c7e4a14h,06f30ebfdh,0de3c19c0h,0d4b7e644h,0db1c1f38h,05dce364ah,0fe291a75h,0058f5be3h,0b7b22a3ch,037fea38ch,02cd2c302h,02e17be17h,02930967ah
+ DD 00c061c65h,087f009deh,0edc6ed44h,0cb014aach,03bafb1ebh,049bd1cb4h,0282d3688h,081bd8b5ch,0f01a17afh,01cdab87eh,0e710063bh,021f37ac4h,042fc8193h,05a6c5676h,056a6015ch,0f4753e70h
+ DD 0a15b0a44h,0020f795eh,08958a958h,08f37c8d7h,0a4b675b5h,063b7e89bh,00fc31aeah,0b4fb0c0ch,0a7ff1f2eh,0ed95e639h,0619614fbh,09880f5a3h,0947151abh,0deb6ff02h,0a868dcdbh,05bc5118ch
+ DD 04c20cea5h,0d8da2055h,014c4d69ah,0cac2776eh,0622d599bh,0cccb22c1h,068a9bb50h,0a4ddb653h,01b4941b4h,02c4ff151h,06efba588h,0e1ff19b4h,0c48345e0h,035034363h,01e29dfc4h,045542e3dh
+ DD 0349f7aedh,0f197cb91h,08fca8420h,03b2b5a00h,023aaf6d8h,07c175ee8h,035af32b6h,054dcf421h,027d6561eh,00ba14307h,0d175b1e2h,0879d5ee4h,099807db5h,0c7c43673h,09cd55bcdh,077a54455h
+ DD 00105c072h,0e6c2ff13h,08dda7da4h,018f7a99fh,00e2d35c1h,04c301820h,0d9cc6c82h,006a53ca0h,0f1aa1d9eh,0aa21cc1eh,04a75b1e8h,032414334h,00ebe9fdch,02a6d1328h,098a4755ah,016bd173fh
+ DD 02133ffd9h,0fbb9b245h,0830f1a20h,039a8b2f1h,0d5a1f52ah,0484bc97dh,0a40eddf8h,0d6aebf56h,076ccdac6h,032257acbh,01586ff27h,0af4d36ech,0f8de7dd1h,08eaa8863h,088647c16h,00045d5cfh
+ DD 0c005979dh,0a6f3d574h,06a40e350h,0c2072b42h,08de2ecf9h,0fca5c156h,0a515344eh,0a8c8bf5bh,0114df14ah,097aee555h,0fdc5ec6bh,0d4374a4dh,02ca85418h,0754cc28fh,0d3c41f78h,071cb9e27h
+ DD 003605c39h,089105079h,0a142c96ch,0f0843d9eh,016923684h,0f3744934h,0fa0a2893h,0732caa2fh,061160170h,0b2e8c270h,0437fbaa3h,0c32788cch,0a6eda3ach,039cd818eh,09e2b2e07h,0e2e94239h
+ DD 00260e52ah,06967d39bh,090653325h,0d42585cch,021ca7954h,00d9bd605h,081ed57b3h,04fa20877h,0e34a0bbeh,060c1eff8h,084f6ef64h,056b0040ch,0b1af8483h,028be2b24h,0f5531614h,0b2278163h
+ DD 05922ac1ch,08df27545h,0a52b3f63h,0a7b3ef5ch,071de57c4h,08e77b214h,0834c008bh,031682c10h,04bd55d31h,0c76824f0h,017b61c71h,0b6d1c086h,0c2a5089dh,031db0903h,0184e5d3fh,09c092172h
+ DD 0c00cc638h,0dd7ced5bh,061278fc2h,01a2015ebh,06a37f8d6h,02e8e5288h,0e79933adh,0c457786fh,02c51211ah,0b3fe4cceh,024c20498h,0ad9b10b2h,0d28db5e5h,090d87a4fh,03aca2fc3h,0698cd105h
+ DD 0e91b536dh,04f112d07h,09eba09d6h,0ceb982f2h,0197c396fh,03c157b2ch,07b66eb24h,0e23c2d41h,03f330d37h,0480c57d9h,079108debh,0b3a4c8a1h,0cb199ce5h,0702388deh,0b944a8d4h,00b019211h
+ DD 0840bb336h,024f2a692h,0a669fa7bh,07c353bdch,0dec9c300h,0da20d6fch,0a13a4f17h,0625fbe2fh,0dbc17328h,0a2b1b61ah,0a9515621h,0008965bfh,0c620ff46h,049690939h,08717e91ch,0182dd27dh
+ DD 0ea6c3997h,05ace5035h,0c2610befh,054259aaah,03c80dd39h,0ef18bb3fh,05fc3fa39h,06910b95bh,043e09aeeh,0fce2f510h,0a7675665h,0ced56c9fh,0d872db61h,010e265ach,0ae9fce69h,06982812eh
+ DD 0ce800998h,029be11c6h,0b90360d9h,072bb1752h,05a4ad590h,02c193197h,09fc1dbc0h,02ba2f548h,0e490ebe0h,07fe4eebbh,07fae11c0h,012a0a4cdh,0e903ba37h,07197cf81h,0de1c6dd8h,0cf7d4aa8h
+ DD 03fd5684ch,092af6bf4h,080360aa1h,02b26eecfh,000546a82h,0bd960f30h,0f59ad8feh,0407b3c43h,0249c82bah,086cae5feh,02463744ch,09e0faec7h,094916272h,087f551e8h,06ceb0615h,0033f9344h
+ DD 08be82e84h,01e5eb0d1h,07a582fefh,089967f0eh,0a6e921fah,0bcf687d5h,0d37a09bah,0dfee4cf3h,0b493c465h,094f06965h,07635c030h,0638b9a1ch,066f05e9fh,076667864h,0c04da725h,0ccaf6808h
+ DD 0768fccfch,0ca2eb690h,0b835b362h,0f402d37dh,0e2fdfcceh,00efac0d0h,0b638d990h,0efc9cdefh,0d1669a8bh,02af12b72h,05774ccbdh,033c536bch,0fb34870eh,030b21909h,07df25acah,0c38fa2f7h
+ DD 0bf81f3f5h,074c5f02bh,0af7e4581h,00525a5aeh,0433c54aeh,088d2aabah,0806a56c5h,0ed9775dbh,0c0edb37dh,0d320738ah,066cc1f51h,025fdb6eeh,010600d76h,0ac661d17h,0bdd1ed76h,0931ec1f3h
+ DD 019ee43f1h,065c11d62h,060829d97h,05cd57c3eh,0984be6e8h,0d26c91a3h,08b0c53bdh,0f08d9309h,0c016e4eah,094bc9e5bh,011d43d2bh,0d3916839h,073701155h,0886c5ad7h,020b00715h,0e0377626h
+ DD 0aa80ba59h,07f01c9ech,068538e51h,03083411ah,0e88128afh,0970370f1h,091dec14bh,0625cc3dbh,001ac3107h,0fef9666ch,0d5057ac3h,0b2a8d577h,092be5df7h,0b0f26299h,000353924h,0f579c8e5h
+ DD 01341ed7ah,0b8fa3d93h,0a7b59d49h,04223272ch,083b8c4a4h,03dcb1947h,0ed1302e4h,04e413c01h,0e17e44ceh,06d999127h,033b3adfbh,0ee86bf75h,025aa96cah,0f6902fe6h,0e5aae47dh,0b73540e4h
+ DD 01b4a158ch,032801d7bh,027e2a369h,0e571c99eh,010d9f197h,040cb76c0h,03167c0aeh,0c308c289h,0eb7958f2h,0a6ef9dd3h,0300879b1h,0a7226dfch,07edf0636h,06cd0b362h,07bc37eedh,04efbce6ch
+ DD 08d699021h,075f92a05h,0772566e3h,0586d4c79h,0761ad23ah,0378ca5f1h,01465a8ach,0650d86fch,0842ba251h,07a4ed457h,042234933h,06b65e3e6h,031aad657h,0af1543b7h,0cbfec369h,0a4cefe98h
+ DD 09f47befbh,0b587da90h,041312d13h,06562e9fbh,0eff1cefeh,0a691ea59h,005fc4cf6h,0cc30477ah,00b0ffd3dh,0a1632461h,05b355956h,0a1f16f3bh,04224ec24h,05b148d53h,0f977012ah,0dc834e7bh
+ DD 0b2c69dbch,07bfc5e75h,003c3da6ch,03aa77a29h,0ca910271h,0de0df03ch,07806dc55h,0cbd5ca4ah,06db476cbh,0e1ca5807h,05f37a31eh,0fde15d62h,0f41af416h,0f49af520h,07d342db5h,096c5c5b1h
+ DD 0eb4ceb9bh,0155c43b7h,04e77371ah,02e993010h,0675d43afh,01d2987dah,08599fd72h,0ef2bc1c0h,09342f6b2h,096894b7bh,07c8e71f0h,0201eadf2h,04a1f3efch,0f3479d9fh,0702a9704h,0e0f8a742h
+ DD 0b3eba40ch,0eafd44b6h,0c1c1e0d0h,0f9739f29h,0619d505eh,00091471ah,09d7c263eh,0c15f9c96h,083afbe33h,05be47285h,004f1e092h,0a3b6d6afh,0751a9d11h,0e76526b9h,09a4ae4d2h,02ec5b26dh
+ DD 002f6fb8dh,0eb66f4d9h,096912164h,04063c561h,080ef3000h,0eb7050c1h,0eaa5b3f0h,0288d1c33h,007806fd8h,0e87c68d6h,04bbbf50fh,0b2f7f9d5h,0ac8d6627h,025972f3ah,010e8c13bh,0f8547774h
+ DD 0872b4a60h,0cc50ef6ch,04613521bh,0ab2a34a4h,0983e15d1h,039c5c190h,059905512h,061dde5dfh,09f2275f3h,0e417f621h,0451d894bh,00750c8b6h,078b0bdaah,075b04ab9h,0458589bdh,03bfd9fd4h
+ DD 0ee9120b6h,0f1013e30h,023a4743eh,02b51af93h,048d14d9eh,0ea96ffaeh,0698a1d32h,071dc0dbeh,00180cca4h,0914962d2h,0c3568963h,01ae60677h,0437bc444h,08cf227b1h,0c9962c7ah,0c650c83bh
+ DD 0fe7ccfc4h,023c2c7ddh,01b929d48h,0f925c89dh,006783c33h,04460f74bh,0a590475ah,0ac2c8d49h,0b807bba0h,0fb40b407h,069ff8f3ah,09d1e362dh,0cbef64a4h,0a33e9681h,0332fb4b2h,067ece5fah
+ DD 0739f10e3h,06900a99bh,0ff525925h,0c3341ca9h,0a9e2d041h,0ee18a626h,029580dddh,0a5a83685h,09d7de3cdh,0f3470c81h,02062cf9ch,0edf02586h,0c010edb0h,0f43522fah,013a4b1aeh,030314135h
+ DD 0db22b94bh,0c792e02ah,0a1eaa45bh,0993d8ae9h,0cd1e1c63h,08aad6cd3h,0c5ce688ah,089529ca7h,0e572a253h,02ccee3aah,002a21efbh,0e02b6438h,0c9430358h,0a7091b6eh,09d7db504h,006d1b1fah
+ DD 0c4744733h,058846d32h,0379f9e34h,040517c71h,0130ef6cah,02f65655fh,0f1f3503fh,0526e4488h,07ee4a976h,08467bd17h,0921363d1h,01d9dc913h,0b069e041h,0d8d24c33h,02cdf7f51h,05eb5da0ah
+ DD 0197b994fh,01c0f3cb1h,02843eae9h,03c95a6c5h,0a6097ea5h,07766ffc9h,0d723b867h,07bea4093h,04db378f9h,0b48e1f73h,0e37b77ach,070025b00h,0af24ad46h,0943dc8e7h,016d00a85h,0b98a15ach
+ DD 02743b004h,03adc38bah,0334415eeh,0b1c7f4f7h,01e62d05ah,0ea43df8fh,09d76a3b6h,032618905h,0a23a0f46h,02fbd0bb5h,06a01918ch,05bc971dbh,0b4743f94h,07801d94ah,0676ae22bh,0b94df65eh
+ DD 0af95894ch,0aafcbfabh,0276b2241h,07b9bdc07h,05bdda48bh,0eaf98362h,0a3fcb4dfh,05977faf2h,0052c4b5bh,0bed042efh,0067591f0h,09fe87f71h,022f24ec7h,0c89c73cah,0e64a9f1bh,07d37fa9eh
+ DD 015562627h,02710841ah,0c243b034h,02c01a613h,02bc68609h,01d135c56h,08b03f1f6h,0c2ca1715h,03eb81d82h,0c9966c2dh,08f6df13eh,0c02abf4ah,08f72b43bh,077b34bd7h,0360c82b0h,0aff6218fh
+ DD 08d55b9d2h,00aa5726ch,099e9bffbh,0dc0adbe9h,0efb9e72ah,09097549ch,09dfb3111h,016755712h,0f26847f9h,0dd8bf984h,0dfb30cb7h,0bcb8e387h,05171ef9ch,0c1fd32a7h,0389b363fh,0977f3fc7h
+ DD 0f4babda0h,0116eaf2bh,0f7113c8eh,0feab68bdh,0b7def526h,0d1e3f064h,0e0b3fa02h,01ac30885h,040142d9dh,01c5a6e7bh,030921c0bh,0839b5603h,036a116a3h,048f301fah,0cfd9ee6dh,0380e1107h
+ DD 058854be1h,07945ead8h,0cbd4d49dh,04111c12eh,03a29c2efh,0ece3b1ech,08d3616f5h,06356d404h,0594d320eh,09f0d6a8fh,0f651ccd2h,00989316dh,00f8fdde4h,06c32117ah,0a26a9bbch,09abe5cc5h
+ DD 09723f671h,0cff560fbh,07f3d593ch,021b2a12dh,024ba0696h,0e4cb18dah,0c3543384h,0186e2220h,088312c29h,0722f64e0h,017dc7752h,094282a99h,05a85ee89h,062467bbfh,0f10076a0h,0f435c650h
+ DD 043b3a50bh,0c9ff1539h,01a53efbch,07132130ch,0f7b0c5b7h,031bfe063h,04ea994cch,0b0179a7dh,0c85f455bh,012d064b3h,08f6e0062h,047259328h,0b875d6d9h,0f64e590bh,0ad92bcc7h,022dd6225h
+ DD 0b9c3bd6dh,0b658038eh,0fbba27c8h,000cdb0d6h,01062c45dh,00c681337h,02d33407dh,0d8515b8ch,08cbb5ecfh,0cb8f699eh,0c608d7d8h,08c4347f8h,0bb3e00dbh,02c11850ah,0ecb49d19h,020a8dafdh
+ DD 045ee2f40h,0bd781480h,0416b60cfh,075e354afh,08d49a8c4h,0de0b58a1h,0fa359536h,0e40e94e2h,062accd76h,0bd4fa59fh,08c762837h,005cf466ah,0448c277bh,0b5abda99h,048b13740h,05a9e01bfh
+ DD 0326aad8dh,09d457798h,0c396f7e7h,0bdef4954h,0c253e292h,06fb274a2h,01cfe53e7h,02800bf0ah,044438fd4h,022426d31h,05e259f9ah,0ef233923h,003f66264h,04188503ch,07f9fdfabh,09e5e7f13h
+ DD 05fcc1abah,0565eb76ch,059b5bff8h,0ea632548h,0aab6d3fah,05587c087h,06ce39c1bh,092b639eah,0953b135ch,00706e782h,0425268efh,07308912eh,0090e7469h,0599e92c7h,09bc35e75h,083b90f52h
+ DD 0244975b3h,04750b3d0h,011965d72h,0f3a44358h,09c8dc751h,0179c6774h,0d23d9ff0h,0ff18cdfeh,02028e247h,0c4013833h,0f3bfbc79h,096e280e2h,0d0880a84h,0f60417bdh,02a568151h,0263c9f3dh
+ DD 02d2ce811h,036be15b3h,0f8291d21h,0846dc0c2h,0789fcfdbh,05cfa0ecbh,0d7535b9ah,045a0beedh,096d69af1h,0ec8e9f07h,0599ab6dch,031a7c5b8h,0f9e2e09fh,0d36d45efh,0dcee954bh,03cf49ef1h
+ DD 0086cff9bh,06be34cf3h,039a3360fh,088dbd491h,00dbfbd1dh,01e96b8cch,0cb7e2552h,0c1e5f7bfh,028819d98h,00547b214h,07aea9dcbh,0c770dd9ch,0041d68c8h,0aef0d4c7h,013cb9ba8h,0cc2b9818h
+ DD 0fe86c607h,07fc7bc76h,0502a9a95h,06b7b9337h,0d14dab63h,01948dc27h,0dae047beh,0249dd198h,0a981a202h,0e8356584h,03a893387h,03531dd18h,0c85c7209h,01be11f90h,0e2a52b5ah,093d2fe1eh
+ DD 0ec6d6b97h,08225bfe2h,0bd0aa5deh,09cf6d6f4h,054779f5fh,0911459cbh,086aeb1f3h,05649cddbh,03f26ce5ah,032133579h,0550f431eh,0c289a102h,073b84c6fh,0559dcfdah,0ee3ac4d7h,084973819h
+ DD 0f2606a82h,0b51e55e6h,090f2fb57h,0e25f7061h,0b1a4e37ch,0acef6c2ah,05dcf2706h,0864e359dh,07ce57316h,0479e6b18h,03a96b23dh,02cab2500h,08ef16df7h,0ed489862h,0ef3758b5h,02056538ch
+ DD 0f15d3101h,0a7df865eh,061b553d7h,080c5533ah,04ed14294h,0366e1997h,0b3c0bcd6h,06620741fh,0edc45418h,021d1d9c4h,0c1cc4a9dh,0005b859eh,0a1c462f0h,0df01f630h,0f26820c7h,015d06cf3h
+ DD 03484be47h,09f7f24eeh,04a0c902fh,02ff33e96h,05a0bc453h,000bdf457h,01aa238dbh,02378dfafh,0856720f2h,0272420ech,096797291h,02ad9d95bh,0768a1558h,0d1242cc6h,05cc86aa8h,02e287f8bh
+ DD 0990cecaah,0796873d0h,0675d4080h,0ade55f81h,021f0cd84h,02645eea3h,0b4e17d02h,07a1efa0fh,0037cc061h,0f6858420h,0d5d43e12h,0682e05f0h,027218710h,059c36994h,03f7cd2fch,085cbba4dh
+ DD 07a3cd22ah,0726f9729h,04a628397h,09f8cd5dch,0c23165edh,017b93ab9h,0122823d4h,0ff5f5dbfh,0654a446dh,0c1e4e4b5h,0677257bah,0d1a9496fh,0de766a56h,06387ba94h,0521ec74ah,023608bc8h
+ DD 06688c4d4h,016a522d7h,007373abdh,09d6b4282h,0b42efaa3h,0a62f07ach,0e3b90180h,0f73e00f7h,049421c3eh,036175fech,03dcf2678h,0c4e44f9bh,07220f09fh,076df436bh,03aa8b6cfh,0172755fbh
+ DD 0446139cch,0bab89d57h,05fe0208fh,00a0a6e02h,011e5d399h,0cdbb63e2h,0a8977f0bh,033ecaa12h,0f7c42664h,059598b21h,0ab65d08ah,0b3e91b32h,0f4502526h,0035822eeh,0720a82a9h,01dcf0176h
+ DD 03d589e02h,050f8598fh,0b1d63d2ch,0df0478ffh,01571cd07h,08b8068bdh,0d79670cdh,030c3aa4fh,0941ade7fh,025e8fd4bh,032790011h,03d1debdch,03a3f9ff0h,065b6dcbdh,0793de69ch,0282736a4h
+ DD 0d41d3bd3h,0ef69a0c3h,007a26bdeh,0b533b8c9h,0db2edf9fh,0e2801d97h,0e1877af0h,0dc4a8269h,03d590dbeh,06c1c5851h,0ee4e9357h,084632f6bh,079b33374h,0d36d36b7h,09bbca2e6h,0b46833e3h
+ DD 0f7fc0586h,037893913h,066bf4719h,0385315f7h,0b31855dch,072c56293h,0849061feh,0d1416d4eh,051047213h,0beb3ab78h,0f040c996h,0447f6e61h,0638b1d0ch,0d06d310dh,0bad1522eh,0e28a413fh
+ DD 082003f86h,0685a76cbh,00bcdbca3h,0610d07f7h,09ca4c455h,06ff66021h,0cea10eech,07df39b87h,0e22db218h,0b9255f96h,008a34c44h,08cc6d9ebh,0859f9276h,0cd4ffb86h,050d07335h,08fa15eb2h
+ DD 0cf2c24b5h,0df553845h,052f9c3bah,089f66a9fh,0e4a7ceb3h,08f22b5b9h,00e134686h,0affef809h,08eb8fac2h,03e53e1c6h,028aec98eh,093c1e4ebh,032a43bcbh,0b6b91ec5h,0b2d74a51h,02dbfa947h
+ DD 0ca84bad7h,0e065d190h,0ad58e65ch,0fb13919fh,0f1cb6e31h,03c41718bh,006d05c3fh,0688969f0h,021264d45h,0d4f94ce7h,07367532bh,0fdfb65e9h,00945a39dh,05b1be8b1h,02b8baf3bh,0229f789ch
+ DD 06f49f15dh,0d8f41f3eh,0907f0792h,0678ce828h,0fca6e867h,0c69ace82h,0d01dcc89h,0106451aeh,019fc32d2h,01bb4f7f0h,0b00c52d2h,064633dfch,0ad9ea445h,08f13549ah,0fb323705h,099a3bf50h
+ DD 0534d4dbch,00c9625a2h,0c2a2fea3h,045b8f1d1h,0a530fc1ah,076ec21a1h,09e5bd734h,04bac9c2ah,07b4e3587h,05996d76ah,01182d9e3h,00045cdeeh,01207f13dh,01aee24b9h,097345a41h,066452e97h
+ DD 09f950cd0h,016e5b054h,0d7fdd075h,09cc72fb1h,066249663h,06edd61e7h,0f043cccbh,0de4caa4dh,055c7ac17h,011b1f57ah,01a85e24dh,0779cbd44h,0e46081e7h,078030f86h,08e20f643h,0fd4a6032h
+ DD 00a750c0fh,0cc7a6488h,04e548e83h,039bacfe3h,00c110f05h,03d418c76h,0b1f11588h,03e4daa4ch,05ffc69ffh,02733e7b5h,092053127h,046f147bch,0d722df94h,0885b2434h,0e6fc6b7ch,06a444f65h
+ DD 0c3f16ea8h,07a1a465ah,0b2f1d11ch,0115a461dh,06c68a172h,04767dd95h,0d13a4698h,03392f2ebh,0e526cdc7h,0c7a99ccdh,022292b81h,08e537fdch,0a6d39198h,076d8cf69h,02446852dh,0ffc5ff43h
+ DD 0a90567e6h,097b14f7eh,0b6ae5cb7h,0513257b7h,09f10903dh,085454a3ch,069bc3724h,0d8d2c9adh,06b29cb44h,038da9324h,077c8cbach,0b540a21dh,001918e42h,09bbfe435h,056c3614eh,0fffa707ah
+ DD 0d4e353b7h,00ce4e3f1h,0ef46b0a0h,0062d8a14h,0574b73fdh,06408d5abh,0d3273ffdh,0bc41d1c9h,06be77800h,03538e1e7h,0c5655031h,071fe8b37h,06b9b331ah,01cd91621h,0bb388f73h,0ad825d0bh
+ DD 01cb76219h,056c2e05bh,071567e7eh,00ec0bf91h,061c4c910h,0e7076f86h,0babc04d9h,0d67b085bh,05e93a96ah,09fb90459h,0fbdc249ah,07526c1eah,0ecdd0bb7h,00d44d367h,09dc0d695h,095399917h
+ DD 09e240d18h,061360ee9h,0b4b94466h,0057cdcach,02fe5325ch,0e7667cd1h,021974e3bh,01fa297b5h,0db083d76h,0fa4081e7h,0f206bd15h,031993be6h,014c19f8ch,08949269bh,0a9d92357h,021468d72h
+ DD 0a4c506ech,02ccbc583h,0d1acfe97h,0957ed188h,012f1aea2h,08baed833h,08325362dh,0ef2a6cb4h,08e195c43h,0130dde42h,00e6050c6h,0c842025ah,008686a5dh,02da972a7h,0e508b4a8h,0b52999a1h
+ DD 010a5a8bdh,0d9f090b9h,0096864dah,0ca91d249h,03f67dbc1h,08e6a93beh,0f5f4764ch,0acae6fbah,0d21411a0h,01563c6e0h,0da0a4ad8h,028fa787fh,0908c8030h,0d524491ch,04c795f07h,01257ba0eh
+ DD 0ceca9754h,083f49167h,04b7939a0h,0426d2cf6h,0723fd0bfh,02555e355h,0c4f144e2h,0a96e6d06h,087880e61h,04768a8ddh,0e508e4d5h,015543815h,0b1b65e15h,009d7e772h,0ac302fa0h,063439dd6h
+ DD 0c14e35c2h,0b93f802fh,04341333ch,071735b7ch,016d4f362h,003a25104h,0bf433c8eh,03f4d069bh,0f78f5a7ch,00d83ae01h,07c4eed07h,050a8ffbeh,076e10f83h,0c74f8906h,09ddaf8e1h,07d080966h
+ DD 0698e04cch,0b11df8e1h,0169005c8h,0877be203h,04f3c6179h,032749e8ch,07853fc05h,02dbc9d0ah,09454d937h,0187d4f93h,0b4800e1bh,0e682ce9dh,0165e68e8h,0a9129ad8h,0be7f785bh,00fe29735h
+ DD 05b9e02b7h,05303f40ch,035ee04e8h,0a37c9692h,034d6632bh,05f46cc20h,096ac545bh,055ef72b2h,07b91b062h,0abec5c1fh,0bb33e821h,00a79e1c7h,03a9f4117h,0bb04b428h,0fd2a475ah,00de1f28fh
+ DD 03a4434b4h,031019ccfh,01a7954dch,0a3458111h,0e34972a7h,0a9dac80dh,074f6b8ddh,0b043d054h,011137b1ah,0021c319eh,0ed5cc03fh,000a754ceh,0cbea5ad4h,00aa2c794h,070c015b6h,0093e67f4h
+ DD 0c97e3f6bh,072cdfee9h,0b6da7461h,0c10bcab4h,0b59806b9h,03b02d2fch,0a1de6f47h,085185e89h,00eb6c4d4h,039e6931fh,0d4fa5b04h,04d4440bdh,034be7eb8h,05418786eh,09d7259bch,06380e521h
+ DD 0d598d710h,020ac0351h,0cb3a4da4h,0272c4166h,0ca71de1fh,0db82fe1ah,0d8f54b0fh,0746e79f2h,04b573e9bh,06e7fc736h,0fd4b5040h,075d03f46h,00b98d87bh,05c1cc36dh,01f472da1h,0513ba3f1h
+ DD 0abb177ddh,079d0af26h,07891d564h,0f82ab568h,072232173h,02b6768a9h,08c1f6619h,0efbb3bb0h,0a6d18358h,0b29c11dbh,0b0916d3ah,0519e2797h,09188e290h,0d4dc18f0h,098b0ca7fh,0648e86e3h
+ DD 0983c38b5h,0859d3145h,0637abc8bh,0b14f176ch,0caff7be6h,02793fb9dh,035a66a5ah,0ebe5a55fh,09f87dc59h,07cec1dcdh,0fbdbf560h,07c595cd3h,026eb3257h,05b543b22h,0c4c935fdh,069080646h
+ DD 081e9ede3h,07f2e4403h,0caf6df0ah,0243c3894h,01c073b11h,07c605bb1h,0ba6a4a62h,0cd06a541h,049d4e2e5h,029168949h,04af66880h,033649d07h,0e9a85035h,0bfc0c885h,0fc410f4bh,0b4e52113h
+ DD 078a6513bh,0dca3b706h,09edb1943h,092ea4a2ah,0db6e2dd8h,002642216h,09fd57894h,09b45d0b4h,0c69d11aeh,0114e70dbh,04c57595fh,01477dd19h,0ec77c272h,0bc2208b4h,0db68f59ch,095c5b4d7h
+ DD 042e532b7h,0b8c4fc63h,09ae35290h,0386ba422h,0d201ecbch,0fb5dda42h,0a0e38fd6h,02353dc8bh,068f7e978h,09a0b85eah,02ad6d11fh,096ec5682h,0e5f6886dh,05e279d6ch,03cb1914dh,0d3fe03cdh
+ DD 07ea67c77h,0fe541fa4h,0e3ea810ch,0952bd2afh,08d01d374h,0791fef56h,00f11336eh,0a3a1c621h,0c7ec6d79h,05ad0d5a9h,03225c342h,0ff7038afh,0bc69601bh,0003c6689h,045e8747dh,025059bc7h
+ DD 0f2086fbfh,0fa4965b2h,086916078h,0f6840ea6h,070081d6ch,0d7ac7620h,0b5328645h,0e600da31h,0529b8a80h,001916f63h,02d7d6f3eh,0e80e4858h,0d664ca7ch,029eb0fe8h,0e7b43b0ch,0f017637bh
+ DD 076cb2566h,09a75c806h,0b24892d9h,08f76acb1h,01f08fe45h,07ae7b9cch,06a4907d8h,019ef7329h,05f228bf0h,02db4ab71h,0817032d7h,0f3cdea39h,0dcabe3c0h,00b1f482eh,0bb86325ch,03baf76b4h
+ DD 010089465h,0d49065e0h,08e77c596h,03bab5d29h,0193dbd95h,07636c3a6h,0b246e499h,0def5d294h,0286b2475h,0b22c58b9h,0cd80862bh,0a0b93939h,0f0992388h,03002c83ah,0eacbe14ch,06de01f9bh
+ DD 0add70482h,06aac688eh,07b4a4e8ah,0708de92ah,0758a6eefh,075b6dd73h,0725b3c43h,0ea4bf352h,087912868h,010041f2ch,0ef09297ah,0b1b1be95h,0a9f3860ah,019ae23c5h,0515dcf4bh,0c4f0f839h
+ DD 097f6306ah,03c7ecca3h,068a3a4b0h,0744c44aeh,0b3a1d8a2h,069cd13a0h,05256b578h,07cad0a1eh,033791d9eh,0ea653fcdh,074b2e05fh,09cc2a05dh,0fd7affa2h,073b391dch,0b6b05442h,0ddb7091eh
+ DD 08538a5c6h,0c71e27bfh,089abff17h,0195c63ddh,01b71e3dah,0fd315285h,0fa680fa0h,09cbdfda7h,0849d7eabh,09db876cah,03c273271h,0ebe2764bh,0f208dceah,0663357e3h,0565b1b70h,08c5bd833h
+ DD 09837fc0dh,0ccc3b4f5h,0a79cf00fh,09b641ba8h,0dfdf3990h,07428243dh,0020786b1h,083a594c4h,0526c4502h,0b712451ah,06adb3f93h,09d39438eh,0e9ff0ccdh,0fdb261e3h,0e07af4c3h,080344e3ch
+ DD 02fa4f126h,075900d7ch,05c99a232h,008a3b865h,0db25e0c3h,02478b6bfh,071db2edfh,0482cc2c2h,05f321bb8h,037df7e64h,09a8005b4h,08a93821bh,0cc8c1958h,03fa2f10ch,02c269d0ah,00d332218h
+ DD 0e246b0e6h,020ab8119h,0d349fd17h,0b39781e4h,0b31aa100h,0d293231eh,0bb032168h,04b779c97h,0c8470500h,04b3f19e1h,00c4c869dh,045b7efe9h,0a1a6bbcch,0db84f38ah,0b2fddbc1h,03b59cb15h
+ DD 03fd165e8h,0ba5514dfh,0061f8811h,0499fd6a9h,0bfef9f00h,072cd1fe0h,079ad7e8ah,0120a4bb9h,05f4a5ac5h,0f2ffd095h,095a7a2f0h,0cfd174f1h,09d17baf1h,0d42301bah,077f22089h,0d2fa487ah
+ DD 0b1dc77e1h,09cb09efeh,021c99682h,0e9566939h,06c6067bbh,08c546901h,061c24456h,0fd378574h,081796b33h,02b6a6cbeh,058e87f8bh,062d550f6h,07f1b01b4h,01b763e1ch,01b1b5e12h,04b93cfeah
+ DD 01d531696h,0b9345238h,088cdde69h,057201c00h,09a86afc7h,0dde92251h,0bd35cea8h,0e3043895h,08555970dh,07608c1e1h,02535935eh,08267dfa9h,0322ea38bh,0d4c60a57h,0804ef8b5h,0e0bf7977h
+ DD 0c06fece4h,01a0dab28h,094e7b49dh,0d405991eh,0706dab28h,0c542b6d2h,0a91618fbh,0cb228da3h,0107d1ceah,0224e4164h,0d0f5d8f1h,0eb9fdab3h,00d6e41cdh,0c02ba386h,09b1f7146h,0676a72c5h
+ DD 04d6cb00bh,0ffd6dd98h,0de2e8d7ch,0cef9c5cah,0641c7936h,0a1bbf5d7h,0ee8f772eh,01b95b230h,0e8ac25b1h,0f765a92eh,03a18b7c6h,0ceb04cfch,00acc8966h,027944cefh,0434c1004h,0cbb3c957h
+ DD 0a43ff93ch,09c9971a1h,0a1e358a9h,05bc2db17h,0a8d9bc82h,045b4862eh,02201e052h,070ebfbfbh,092871591h,0afdf64c7h,0b42d0219h,0ea5bcae6h,02ad8f03ch,0de536c55h,0a76aa33ch,0cd6c3f4dh
+ DD 00bca6de3h,0beb5f623h,0b1e706fdh,0dd20dd99h,0ac9059d4h,090b3ff9dh,07ccccc4eh,02d7b2902h,0ce98840fh,08a090a59h,08410680ah,0a5d947e0h,0923379a5h,049ae346ah,0b28a3156h,07dbc84f9h
+ DD 054a1aff2h,0fd40d916h,03a78fb9bh,0abf318bah,03029f95eh,050152ed8h,0c58ad7fah,09fc1dd77h,013595c17h,05fa57915h,08f62b3a9h,0b9504668h,0ff3055b0h,0907b5b24h,09a84f125h,02e995e35h
+ DD 07e9bbcfbh,087dacf69h,0e86d96e3h,095d0c1d6h,02d95a75ch,065726e3ch,0acd27f21h,02c3c9001h,06c973f57h,01deab561h,0a5221643h,0108b7e2ch,0c4ef79d4h,05fee9859h,040d4b8c6h,0bd62b88ah
+ DD 0197c75d6h,0b4dd29c4h,0b7076febh,0266a6df2h,04bf2df11h,09512d0eah,06b0cc9ech,01320c24fh,001a59596h,06bb1e0e1h,0eff9aaach,08317c5bbh,0385aa6c9h,065bb405eh,08f07988fh,0613439c1h
+ DD 016a66e91h,0d730049fh,0fa1b0e0dh,0e97f2820h,0304c28eah,04131e003h,0526bac62h,0820ab732h,028714423h,0b2ac9ef9h,0adb10cb2h,054ecfffah,0f886a4cch,08781476eh,0db2f8d49h,04b2c87b5h
+ DD 00a44295dh,0e857cd20h,058c6b044h,0707d7d21h,0f596757ch,0ae8521f9h,067b2b714h,087448f03h,05ebcd58dh,013a9bc45h,09122d3c1h,079bcced9h,09e076642h,03c644247h,02df4767dh,00cf22778h
+ DD 071d444b6h,05e61aee4h,0c5084a1dh,0211236bfh,04fd3eaf6h,07e15bc9ah,0ab622bf5h,068df2c34h,059bf4f36h,09e674f0fh,0d7f34d73h,0f883669bh,031497b1dh,0c48ac1b8h,05106703bh,0323b925dh
+ DD 074082008h,022156f42h,0c8482bcbh,0effc521ah,012173479h,05c6831bfh,0c4739490h,0caa2528fh,08f1b3c4dh,084d2102ah,02d9bec0dh,0cf64dfc1h,078a546efh,0433febadh,07b73cef1h,01f621ec3h
+ DD 037338615h,06aecd627h,001d8edf6h,0162082abh,019e86b66h,0833a8119h,0d299b5dbh,06023a251h,0bbf04b89h,0f5bb0c3ah,0ae749a44h,06735eb69h,04713de3bh,0d0e058c5h,02c3d4ccdh,0fdf2593eh
+ DD 0fdd23667h,01b8f414eh,0fa2015eeh,0dd52aacah,0bd9625ffh,03e31b517h,08db5918ch,05ec9322dh,0a96f5294h,0bc73ac85h,061a0666ah,082aa5bf3h,0bf08ac42h,049755810h,0891cedfch,0d21cdfd5h
+ DD 067f8be10h,0918cb57bh,056ffa726h,0365d1a7ch,06532de93h,02435c504h,02674cd02h,0c0fc5e10h,09cbbb142h,06e51fcf8h,0afc50692h,01d436e5ah,03fbcae22h,0766bffffh,0fd55d3b8h,03148c2fdh
+ DD 0233222fah,052c7fdc9h,0e419fb6bh,089ff1092h,025254977h,03cd6db99h,01cf12ca7h,02e85a161h,0dc810bc9h,0add2547ch,09d257c22h,0ea3f458fh,027d6b19bh,0642c1fbeh,0140481a6h,0ed07e6b5h
+ DD 086d2e0f8h,06ada1d42h,00e8a9fd5h,0e5920122h,0708c1b49h,002c936afh,02b4bfaffh,060f30feeh,0858e6a61h,06637ad06h,03fd374d0h,0ce4c7767h,07188defbh,039d54b2dh,0f56a6b66h,0a8c9d250h
+ DD 0b24fe1dch,058fc0f5eh,06b73f24ch,09eaf9deeh,033650705h,0a90d588bh,0af2ec729h,0de5b62c5h,0d3c2b36eh,05c72cfaeh,0034435dah,0868c19d5h,0e17ee145h,088605f93h,077a5d5b1h,0aa60c4eeh
+ DD 03b60c472h,0bcf5bfd2h,0eb1d3049h,0af4ef13ch,0e13895c9h,0373f44fch,00cbc9822h,0f29b382fh,073efaef6h,01bfcb853h,0a8c96f40h,0cf56ac9ch,07a191e24h,0d7adf109h,0bf8a8dc2h,098035f44h
+ DD 01e750c84h,0f40a71b9h,05dc6c469h,0c57f7b0ch,06fbc19c1h,049a0e79ch,0a48ebdb8h,06b0f5889h,0a07c4e9fh,05d3fd084h,0ab27de14h,0c3830111h,033e08dcch,00e4929feh,040bb73a3h,0f4a5ad24h
+ DD 0490f97cah,0de86c2bfh,067a1ce18h,0288f09c6h,01844478dh,0364bb886h,0ceedb040h,07840fa42h,05a631b37h,01269fdd2h,0a47c8b7dh,094761f1eh,0481c6266h,0fc0c2e17h,03daa5fa7h,085e16ea2h
+ DD 092491048h,0ccd86033h,0f4d402d7h,00c2f6963h,0df6a865ch,06336f7dfh,0b5c02a87h,00a2a463ch,0bf2f12eeh,0b0e29be7h,066bad988h,0f0a22002h,09123c1d7h,027f87e03h,0328a8c98h,021669c55h
+ DD 092f14529h,0186b9803h,063954df3h,0d3d056cch,0175a46f6h,02f03fd58h,011558558h,063e34ebeh,05b80cfa5h,0e13fedeeh,0d401dbd1h,0e872a120h,0e8a9d667h,052657616h,0e08d6693h,0bc8da4b6h
+ DD 01b703e75h,0370fb9bbh,0d4338363h,06773b186h,0ecef7bffh,018dad378h,0995677dah,0aac787edh,00437164bh,04801ea8bh,073fe795eh,0f430ad20h,08ee5eb73h,0b164154dh,0108f7c0eh,00884ecd8h
+ DD 05f520698h,00e6ec096h,044f7b8d9h,0640631feh,0a35a68b9h,092fd34fch,04d40cf4eh,09c5a4b66h,080b6783dh,0949454bfh,03a320a10h,080e701feh,01a0a39b2h,08d1a564ah,0320587dbh,01436d53dh
+ DD 06556c362h,0f5096e6dh,0e2455d7eh,0bc23a3c0h,0807230f9h,03a7aee54h,022ae82fdh,09ba1cfa6h,099c5d706h,0833a057ah,0842315c9h,08be85f4bh,066a72f12h,0d083179ah,0cdcc73cdh,02fc77d5dh
+ DD 05616ee30h,022b88a80h,0e7ab1083h,0fb09548fh,0511270cdh,08ad6ab0dh,06924d9abh,061f6c57ah,090aecb08h,0a0f7bf72h,00df784a4h,0849f87c9h,0cfaf1d03h,027c79c15h,0c463faceh,0bbf9f675h
+ DD 0765ba543h,091502c65h,042ea60ddh,018ce3cach,06e43ecb3h,0e5cee6ach,068f2aeebh,063e4e910h,0c85932eeh,026234fa3h,04c90c44dh,096883e8bh,0a18a50f6h,029b9e738h,03f0420dfh,0bfc62b2ah
+ DD 06d3e1fa9h,0d22a7d90h,0fe05b8a3h,017115618h,0bb2b9c01h,02a0c9926h,0e07e76a2h,0c739fcc6h,0165e439ah,0540e9157h,06a9063d8h,006353a62h,061e927a3h,084d95594h,0e2e0be7fh,0013b9b26h
+ DD 0973497f1h,04feaec3bh,0093ebc2dh,015c0f94eh,033af0583h,06af5f227h,0c61f3340h,00c2af206h,04457397ch,0d25dbdf1h,0cabcbae0h,02e8ed017h,0c2815306h,0e3010938h,0e8c6cd68h,0baa99337h
+ DD 03b0ec7deh,008513182h,058df05dfh,01e1b822bh,0a5c3b683h,05c14842fh,03eba34ceh,098fe977eh,00d5e8873h,0fd2316c2h,0bd0d427dh,0e48d839ah,0623fc961h,0495b2218h,0b46fba5eh,024ee56e7h
+ DD 091e4de58h,09184a55bh,0dfdea288h,0a7488ca5h,0a8dcc943h,0a723862eh,0849dc0fch,092d762b2h,0091ff4a9h,03c444a12h,00cada274h,0581113fah,030d8eae2h,0b9de0a45h,0df6b41eah,05e0fcd85h
+ DD 0c094dbb5h,06233ea68h,0d968d410h,0b77d062eh,058b3002dh,03e719bbch,03dc49d58h,068e7dd3dh,0013a5e58h,08d825740h,03c9e3c1bh,021311747h,07c99b6abh,00cb0a2a7h,0c2f888f2h,05c48a3b3h
+ DD 0991724f3h,0c7913e91h,039cbd686h,05eda799ch,063d4fc1eh,0ddb595c7h,0ac4fed54h,06b63b80bh,07e5fb516h,06ea0fc69h,0d0f1c964h,0737708bah,011a92ca5h,09628745fh,09a86967ah,061f37958h
+ DD 0aa665072h,09af39b2ch,0efd324efh,078322fa4h,0c327bd31h,03d153394h,03129dab0h,081d5f271h,0f48027f5h,0c72e0c42h,08536e717h,0aa40cdbch,02d369d0fh,0f45a657ah,0ea7f74e6h,0b03bbfc4h
+ DD 00d738dedh,046a8c418h,0e0de5729h,06f1a5bb0h,08ba81675h,0f10230b9h,0112b33d4h,032c6f30ch,0d8fffb62h,07559129dh,0b459bf05h,06a281b47h,0fa3b6776h,077c1bd3ah,07829973ah,00709b380h
+ DD 0a3326505h,08c26b232h,0ee1d41bfh,038d69272h,0ffe32afah,00459453eh,07cb3ea87h,0ce8143adh,07e6ab666h,0932ec1fah,022286264h,06cd2d230h,06736f8edh,0459a46feh,09eca85bbh,050bf0d00h
+ DD 0877a21ech,00b825852h,00f537a94h,0300414a7h,021a9a6a2h,03f1cba40h,076943c00h,050824eeeh,0f83cba5dh,0a0dbfcech,093b4f3c0h,0f9538148h,048f24dd7h,061744162h,0e4fb09ddh,05322d64dh
+ DD 03d9325f3h,057447384h,0f371cb84h,0a9bef2d0h,0a61e36c5h,077d2188bh,0c602df72h,0bbd6a7d7h,08f61bc0bh,0ba3aa902h,06ed0b6a1h,0f49085edh,0ae6e8298h,08bc625d6h,0a2e9c01dh,0832b0b1dh
+ DD 0f1f0ced1h,0a337c447h,09492dd2bh,0800cc793h,0bea08efah,04b93151dh,0de0a741eh,0820cf3f8h,01c0f7d13h,0ff1982dch,084dde6cah,0ef921960h,045f96ee3h,01ad7d972h,029dea0c7h,0319c8dbeh
+ DD 07b82b99bh,0d3ea3871h,0470eb624h,075922d4dh,03b95d466h,08f66ec54h,0bee1e346h,066e673cch,0b5f2b89ah,06afe67c4h,0290e5cd3h,03de9c1e6h,0310a2adah,08c278bb6h,00bdb323bh,0420fa384h
+ DD 00eb919b0h,00ae1d63bh,0a74b9620h,0d74ee51dh,0a674290ch,0395458d0h,04620a510h,0324c930fh,0fbac27d4h,02d1f4d19h,09bedeeach,04086e8cah,09b679ab8h,00cdd211bh,07090fec4h,05970167dh
+ DD 0faf1fc63h,03420f2c9h,0328c8bb4h,0616d333ah,057f1fe4ah,07d65364ch,055e5c73ah,09343e877h,0e970e78ch,05795176bh,060533627h,0a36ccebfh,009cdfc1bh,0fc7c7380h,0b3fec326h,0b39a2afeh
+ DD 06224408ah,0b7ff1ba1h,0247cfc5eh,0cc856e92h,0c18bc493h,001f102e7h,02091c727h,04613ab74h,0c420bf2bh,0aa25e89ch,090337ec2h,000a53176h,07d025fc7h,0d2be9f43h,06e6fe3dch,03316fb85h
+ DD 09ac50814h,027520af5h,09a8e4223h,0fdf95e78h,056bec5a0h,0b7e7df2ah,0df159e5dh,0f7022f7dh,0cac1fe8fh,093eeeab1h,037451168h,08040188ch,0d967dce6h,07ee8aa8ah,03abc9299h,0fa0e79e7h
+ DD 02064cfd1h,067332cfch,0b0651934h,0339c31deh,02a3bcbeah,0719b28d5h,09d6ae5c6h,0ee74c82bh,0baf28ee6h,00927d05eh,09d719028h,082cecf2ch,0ddb30289h,00b0d353eh,0fddb2e29h,0fe4bb977h
+ DD 0640bfd9eh,0bb5bb990h,082f62108h,0d226e277h,002ffdd56h,04bf00985h,02ca1b1b5h,07756758ah,05285fe91h,0c32b62a3h,08c9cd140h,0edbc546ah,0af5cb008h,01e47a013h,0073ce8f2h,0bca7e720h
+ DD 017a91caeh,0e10b2ab8h,008e27f63h,0b89aab65h,0dba3ddf9h,07b3074a7h,0330c2972h,01c20ce09h,05fcf7e33h,06b9917b4h,0945ceb42h,0e6793743h,05c633d19h,018fc2215h,0c7485474h,0ad1adb3ch
+ DD 06424c49bh,0646f9679h,067c241c9h,0f888dfe8h,024f68b49h,0e12d4b93h,0a571df20h,09a6b62d8h,0179483cbh,081b4b26dh,09511fae2h,0666f9632h,0d53aa51fh,0d281b3e4h,07f3dbd16h,07f96a765h
+ DD 0074a30ceh,0a7f8b5bfh,0005a32e6h,0d7f52107h,050237ed4h,06f9e0907h,08096fa2bh,02f21da47h,0eec863a0h,0f3e19cb4h,09527620ah,0d18f77fdh,0407c1cf8h,09505c81ch,01b6ec284h,09998db4eh
+ DD 0c247d44dh,07e3389e5h,03f4f3d80h,012507141h,04a78a6c7h,0d4ba0110h,0767720beh,0312874a0h,075944370h,0ded059a6h,03b2c0bddh,0d6123d90h,051c108e3h,0a56b717bh,0070623e9h,09bb7940eh
+ DD 084ac066ch,0794e2d59h,0e68c69a0h,0f5954a92h,04fd99dcch,028c52458h,0b1012517h,060e639fch,07de79248h,0c2e60125h,0f12fc6d7h,0e9ef6404h,02a3b5d32h,04c4f2808h,0c768eb8ah,0865ad32eh
+ DD 013fb70b6h,0ac02331bh,095599b27h,0037b44c1h,060bd082ch,01a860fc4h,0c980cd01h,0a2e25745h,01da0263eh,0ee3387a8h,02d10f3d6h,0931bfb95h,0a1f24a32h,05b687270h,0ca494b86h,0f140e65dh
+ DD 0b2f1ac7ah,04f4ddf91h,0760fee27h,0f99eaabbh,049c228e5h,057f4008ah,01cf713bbh,0090be440h,05004f022h,0ac91fbe4h,0569e1af6h,0d838c2c2h,00f1daaa5h,0d6c7d20bh,01bbb02c0h,0aa063ac1h
+ DD 059558a78h,00938a422h,08435da2fh,05343c669h,0034410dch,096f67b18h,084510804h,07cc1e424h,016dfbb7dh,086a1543fh,05b5bd592h,0921fa942h,0b33dd03ch,09dcccb6eh,0b843f51eh,08581ddd9h
+ DD 081d73c9eh,054935fcbh,00a5e97abh,06d07e979h,0cf3a6babh,04dc7b30ah,0170bee11h,0147ab1f3h,09fafdee4h,00aaf8e3dh,0538a8b95h,0fab3dbcbh,06ef13871h,0405df4b3h,0088d5a49h,0f1f4e9cbh
+ DD 066b33f1dh,09bcd24d3h,05ce445c0h,03b97b820h,0ba93ff61h,0e2926549h,04dafe616h,0d9c341ceh,016efb6f3h,0fb30a76eh,0605b953ch,0df24b8cah,0c2fffb9fh,08bd52afeh,0e19d0b96h,0bbac5ff7h
+ DD 0459afccdh,043c01b87h,0b7432652h,06bd45143h,055b5d78eh,084734530h,01554ba7dh,081088fdbh,01e269375h,0ada0a52ch,02dc5ec10h,0f9f037c4h,094bfbc11h,0c0660607h,0c9c40d2fh,0c0a630bbh
+ DD 0ab64c31eh,05efc797eh,074507144h,0ffdb1dabh,01ca6790ch,0f6124287h,0e69bf1bfh,0e9609d81h,000d24fc9h,0db898595h,0e51fb417h,09c750333h,0fef7bbdeh,051830a91h,0945f585ch,00ce67dc8h
+ DD 04763eb50h,09a730ed4h,0c1ab0d66h,024a0e221h,0648748f3h,0643b6393h,06d3c6291h,01982daa1h,08bbc5549h,06f00a9f7h,07f36384eh,07a1783e1h,0de977f50h,0e8346323h,0b245502ah,091ab688dh
+ DD 06d0bdd66h,0331ab6b5h,064b71229h,00a6ef32eh,0fe7c352fh,01028150eh,0ce7b39d3h,027e04350h,0c1070c82h,02a3c8acdh,080c9feefh,0fb2034d3h,0709f3729h,02d729621h,062cb4549h,08df290bfh
+ DD 0fc2e4326h,002f99f33h,05eddf032h,03b30076dh,00c652fb5h,0bb21f8cfh,0ed91cf7bh,0314fb49eh,02f700750h,0a013eca5h,0712a4575h,02b9e3c23h,0af30fbb0h,0e5355557h,07c77e771h,01ada3516h
+ DD 07b135670h,045f6ecb2h,07cfc202eh,0e85d19dfh,058d1be9fh,00f1b50c7h,0ead2e344h,05ebf2c0ah,0abc199c9h,01531fe4eh,056bab0aeh,0c7032592h,06c1fec54h,016ab2e48h,004280188h,00f87fda8h
+ DD 0609e4a74h,0dc9f46fch,0ba667f91h,02a44a143h,0b4d83436h,0bc3d8b95h,0c7bd2958h,0a01e4bd0h,073483c90h,07b182932h,0a7c7b598h,0a79c6aa1h,0eaaac07eh,0bf3983c6h,096e0d4e6h,08f18181eh
+ DD 0051af62bh,08553d37ch,00bf94496h,0e9a998ebh,0b0d59aa1h,0e0844f9fh,0e6afb813h,0983fd558h,065d69804h,09670c0cah,06ea5ff2dh,0732b22deh,05fd8623bh,0d7640ba9h,0a6351782h,09f619163h
+ DD 0acee5043h,00bfc27eeh,02eb10f02h,0ae419e73h,08943fb05h,019c028d1h,0ff13aa2ah,071f01cf7h,08887a132h,07790737eh,066318410h,067513309h,07ddb795eh,09819e8a3h,0dad100b2h,0fecb8ef5h
+ DD 03021926ah,059f74a22h,06f9b4c1ch,0b7c28a49h,0912ad0abh,0ed1a733fh,001a5659ch,042a910afh,07bd68cabh,03842c6e0h,076d70ac8h,02b57fa38h,03c53aaebh,08a6707a8h,065b4db18h,062c1c510h
+ DD 0b2d09dc7h,08de2c1fbh,0266bd23bh,0c3dfed12h,0d5b27db6h,0927d039bh,0103243dah,02fb2f0f1h,080be7399h,0f855a07bh,01f9f27a8h,0ed9327ceh,0729bdef7h,0a0bd99c7h,028250d88h,02b67125eh
+ DD 08670ced7h,0784b26e8h,0c31bd3b4h,0e3dfe41fh,0bcc85cbch,09e353a06h,060178a9dh,0302e2909h,0a6eac16eh,0860abf11h,0aa2b3aach,076447000h,0850afdabh,046ff9d19h,0fdb2d4c1h,035bdd6a5h
+ DD 07e5c9ce9h,0e82594b0h,020af346eh,00f379e53h,0bc65ad4ah,0608b31e3h,0267c4826h,0710c6b12h,071954cf1h,051c966f9h,00d0aa215h,0b1cec793h,086bd23a8h,01f155989h,0f9452e86h,0ae2ff99ch
+ DD 0340ceaa2h,0d8dd953ch,02e2e9333h,026355275h,08586f06dh,015d4e5f9h,0f7cab546h,0d6bf94a8h,0b76a9af0h,033c59a0ah,0ba095af7h,052740ab3h,024389ca0h,0c444de8ah,0706da0cbh,0cc6f9863h
+ DD 06b2515cfh,0b5a741a7h,09585c749h,071c41601h,0e683de97h,078350d4fh,063d0b5f5h,031d61524h,0fbce090bh,07a0cc5e1h,0fbcb2a5bh,0aac927edh,020d84c35h,0e920de49h,022b4de26h,08c06a0b6h
+ DD 0afe7ddf3h,0d34dd58bh,0c1e6e55bh,055851fedh,0960696e7h,0d1395616h,05f22705fh,0940304b2h,0b0a2a860h,06f43f861h,00e7cc981h,0cf121282h,00ab64a96h,012186212h,0b789383ch,009215b9ah
+ DD 037387c09h,0311eb305h,0f03ee760h,0c5832fceh,032f7ea19h,030358f58h,091d53551h,0e01d3c34h,0da48ea80h,01ca5ee41h,0cf4fa4c1h,034e71e8eh,07af1e1c7h,0312abd25h,02153f4a5h,0e3afcdebh
+ DD 000235e9ah,09d5c84d7h,08c4c836fh,00308d3f4h,089332de5h,0c0a66b04h,089e566efh,0610dd399h,0d1ac1635h,0f8eea460h,020a2c0dfh,084cbb3fbh,0e74a48c5h,040afb488h,0d326b150h,029738198h
+ DD 0a6d74081h,02a17747fh,055a26214h,060ea4c05h,01f88c5feh,053514bb4h,07e83426ch,0edd64567h,096460b25h,0d5d6cbech,068dc115eh,0a12fd0ceh,0697840eah,0c5bc3ed2h,0a6331e31h,0969876a8h
+ DD 0472ff580h,060c36217h,04ad41393h,0f4229705h,0a03b8b92h,04bd99ef0h,0c144f4f6h,0501c7317h,018464945h,0159009b3h,074c5c6beh,06d5e594ch,0321a3660h,02d587011h,03898d022h,0d1e184b1h
+ DD 04c6a7e04h,05ba04752h,045550b65h,047fa1e2bh,048c0a9a5h,09419daf0h,07c243236h,066362953h,05cb12a88h,0cd0744b1h,02b646188h,0561b6f9ah,066c2c0c0h,0599415a5h,00f83f09ah,0be3f0859h
+ DD 0b92041b8h,09141c5beh,026477d0dh,001ae38c7h,0d12c7a94h,0ca8b71f3h,0765c70dbh,0fab5b31fh,0487443e9h,076ae7492h,0990d1349h,08595a310h,07d460a37h,0f8dbeda8h,01e45a38fh,07f7ad082h
+ DD 01059705ah,0ed1d4db6h,0e6b9c697h,0a3dd492ah,06eb38bd5h,04b92ee3ah,067cc0bb7h,0bab2609dh,06e70ee82h,07fc4fe89h,013e6b7e3h,0eff2c56eh,034d26fcah,09b18959eh,0889d6b45h,02517ab66h
+ DD 0bdefdd4fh,0f167b4e0h,0f366e401h,069958465h,0a73bbec0h,05aa368abh,07b240c21h,012148709h,018969006h,0378c3233h,0e1fe53d1h,0cb4d73ceh,0130c4361h,05f50a80eh,07ef5212bh,0d67f5951h
+ DD 09e70c72eh,0f145e21eh,05566d2fbh,0b2e52e29h,0032397f5h,044eaba4ah,07e31a7deh,05e56937bh,0456c61e1h,068dcf517h,0a8b0a388h,0bc2e954ah,060a8b755h,0e3552fa7h,073ad0cdeh,003442daeh
+ DD 0ceb26210h,037ffe747h,0787baef9h,0983545e8h,086a3de31h,08b8c8535h,0facd46dbh,0c621dbcbh,059266fbbh,082e442e9h,0339d471ch,0a3514c37h,062cdad96h,03a11b771h,0ecf9bdf0h,0f0cb3b3ch
+ DD 0478e2135h,03fcbdbceh,0bda35342h,07547b5cfh,08a677af6h,0a97e81f1h,028817987h,0c8c2bf83h,045580985h,0df07eaafh,0c93b45cbh,0c68d1f05h,0c77b4cach,0106aa2feh,004a7ae86h,04c1d8afch
+ DD 09eb45ab2h,0db41c3fdh,0d4b22e74h,05b234b5bh,0f215958ah,0da253dech,0a04edfa0h,067e0606eh,0ef751b11h,0abbbf070h,0f6f06dceh,0f352f175h,06839f6b4h,0dfc4b6afh,09959848eh,053ddf9a8h
+ DD 0c21520b0h,0da49c379h,0dbd5d1b6h,090864ff0h,05f49c7f7h,02f055d23h,0a796b2d8h,0e51e4e6ah,05c9dc340h,0c361a67fh,0bca7c620h,05ad53c37h,032c756d0h,0da1d6588h,08bb67e13h,0ad60d911h
+ DD 00eeec8c6h,0d6c47bdfh,0078a1821h,04a27fec1h,0c3099524h,0081f7415h,082cd8060h,08effdf0bh,065842df8h,0db70ec1ch,0d319a901h,08821b358h,0de42b529h,072ee56eeh,0236e4286h,05bb39592h
+ DD 0fd6f7140h,0d1183316h,0bd8e81f7h,0f9fadb5bh,05a02d962h,0701d5e0ch,01b601324h,0fdee4dbfh,035d7620eh,0bed17407h,0f48c0012h,004e3c2c3h,03455449ah,09ee29da7h,091a836c4h,0562cdef4h
+ DD 047701097h,08f682a5fh,0ff88d0c2h,0617125d8h,057bb86ddh,0948fda24h,0289f7286h,0348abb8fh,099d94bbdh,0eb10eab5h,04684d160h,0d51ba28eh,030c8f41ah,0abe0e51ch,013254f4ah,066588b45h
+ DD 0fad097a5h,0147ebf01h,0610e815dh,049883ea8h,08a11de56h,0e44d60bah,0827a7a6dh,0a970de6eh,05e17fc19h,02be41424h,001214057h,0d833c657h,0363e723fh,01375813bh,0e6a52e9bh,06820bb88h
+ DD 0d875d56ah,07e7f6970h,051fbf6bfh,0d6a0a9ach,0a3083c12h,054ba8790h,06ae7eb64h,0ebaeb23dh,0b99a907ah,0a8685c3ah,0026bf40bh,0f1e74550h,0c802cd9eh,07b73a027h,04fef4635h,09a8a927ch
+ DD 008191224h,0e1b6f60ch,0de4ec091h,0c4126ebbh,04ae38d84h,0e1dff4dch,04f2ef985h,0de3f57dbh,0d446a1ddh,034964337h,0859e77f6h,07bf217a0h,08e1d13f5h,08ff10527h,074eeae27h,0a304ef03h
+ DD 0d19dfa5ah,0fc6f5e47h,07fad982bh,0db007de3h,0613715f5h,028205ad1h,07889529eh,0251e6729h,01ae98e78h,072705184h,0271cac32h,0f818537dh,0b7f410f5h,0c8a15b7eh,081f62393h,0c474356fh
+ DD 0c242316bh,092dbdc5ah,0dbf4aff5h,0abe060ach,0909a8ec6h,06e8c38feh,06116cb94h,043e514e5h,007d784f9h,02078fa38h,0f4b5b357h,01161a880h,013adea3dh,05283ce79h,0cc6a910bh,00756c3e6h
+ DD 0aaa79697h,060bcfe01h,056391db1h,004a73b29h,0189b45a0h,0dd8dad47h,048d5b8d9h,0bfac0dd0h,07d3d2ec2h,034ab3af5h,0207bd3afh,06fa2fc2dh,066550dedh,09ff40092h,01fd5b913h,0719b3e87h
+ DD 06d17fbc7h,0a573a496h,073d2b24eh,00cd1a70ah,0b2676937h,034e2c5cah,0bf669f21h,0e7050b06h,01ede9046h,0fbe948b6h,097662659h,0a0530051h,0f10124c5h,058cbd4edh,0dd6c06c8h,0de2646e4h
+ DD 08cad38c0h,0332f8108h,06bd68ae2h,0471b7e90h,00d8e27a3h,056ac3fb2h,0136b4b0dh,0b54660dbh,0a6fd8de4h,0123a1e11h,0a37799efh,044dbffeah,0ce6ac17ch,04540b977h,0af60acefh,0495173a8h
+ DD 0391c2a82h,09ebb284dh,0158308e8h,0bcdd4863h,083f1edcah,0006f16ech,0695dc6c8h,0a13e2c37h,04a057a87h,02ab756f0h,0a6b48f98h,0a8765500h,068651c44h,04252faceh,0e1765e02h,0a52b540bh
+ DD 016a0d2bbh,04f922fc5h,01a623499h,00d5cc16ch,057c62c8bh,09241cf3ah,0fd1b667fh,02f5e6961h,0f5a01797h,05c15c70bh,060956192h,03d20b44dh,0071fdb52h,004911b37h,08d6f0f7bh,0f648f916h
+ DD 0e60b7cf7h,06dc1acafh,084a9d869h,025860a50h,0e7ba8ac4h,056fc6f09h,06148d29eh,0828c5bd0h,0dc55ae5fh,0ac6b435eh,0c0117411h,0a527f56ch,0fd24342ch,094d5045eh,070b67c0dh,02c4c0a35h
+ DD 0fac61d9ah,0027cc8b8h,0e3c6fe8ah,07d25e062h,0e5bff503h,0e08805bfh,06ff632f7h,013271e6ch,0232f76a5h,055dca6c0h,0701ef426h,08957c32dh,0a10a5178h,0ee728bcbh,0b62c5173h,05ea60411h
+ DD 0d0b8892bh,0fc4e964eh,09301bb74h,09ea17683h,0fcc48626h,06265c5aeh,0bb3e9102h,0e60cf82eh,0d4df5531h,057adf797h,08deeefe2h,0235b59a1h,03f306eb1h,060adcf58h,03d09492dh,0105c2753h
+ DD 0b5def996h,04090914bh,0233dd1e7h,01cb69c83h,09b3d5e76h,0c1e9c1d3h,0fccf6012h,01f3338edh,02f5378a8h,0b1e95d0dh,02f00cd21h,0acf4c2c7h,0eb5fe290h,06e984240h,0248088aeh,0d66c038dh
+ DD 0f94d70cfh,0804d264ah,07314bf7eh,0bdb802efh,04333ed02h,08fb54de2h,0285635d9h,0740461e0h,0365e9383h,04113b2c8h,03fdef652h,0ea762c83h,047b956c1h,04eec6e2eh,065620fa4h,0a3d814beh
+ DD 0b4d8bc50h,09ad5462bh,0a9195770h,0181c0b16h,078412a68h,0ebd4fe1ch,0c0dff48ch,0ae0341bch,07003e866h,0b6bc45cfh,08a24a41bh,0f11a6deah,0d04c24c2h,05407151ah,0da5b7b68h,062c9d27dh
+ DD 088cceff6h,02e964235h,08b07ed69h,08594c54fh,0c84d0d0dh,01578e73ch,0ff532868h,07b4e1055h,0b5ec995ah,0a348c0d5h,014289a54h,0bf4b9d55h,058fbd777h,09ba155a6h,01a84491dh,0186ed7a8h
+ DD 0614c0900h,0d4992b30h,0bd00c24bh,0da98d121h,07ec4bfa1h,07f534dc8h,037dc34bch,04a5ff674h,01d7ea1d7h,068c196b8h,080a6d208h,038cf2893h,0e3cbbd6eh,0fd56cd09h,04205a5b6h,0ec72e27eh
+ DD 0a44f77f7h,015ea68f5h,0b43c52bch,07aa5f9fdh,094f0e609h,086ff676fh,02e2d432bh,0a4cde963h,0eee470afh,08cafa0c0h,08a3f5ec8h,084137d0eh,0faa31231h,0ebb40411h,06f7f7ccfh,0a239c13fh
+ DD 0a8afd30bh,032865719h,08a826dceh,086798328h,0c4a8fbe0h,0df04e891h,0ebf56ad3h,0bb6b6e1bh,0471f1ff0h,00a695b11h,0be15baf0h,0d76c3389h,0be96c43eh,0018edb95h,090794158h,0f2beaaf4h
+ DD 0c3076a27h,0152db09eh,0e416545dh,05e82908eh,0356d6f2eh,0a2c41272h,031fd74e1h,0dc9c9642h,0519bf615h,066ceb88dh,005a2274eh,0e29ecd76h,0bf5e2fa0h,03a0473c4h,064284e67h,06b6eb671h
+ DD 0b88756ddh,0e8b97932h,0f17e3e61h,0ed4e8652h,03ee1c4a4h,0c2dd1499h,0597f8c0eh,0c0aaee17h,06c168af3h,015c4edb9h,0b39ae875h,06563c7bfh,020adb436h,0adfadb6fh,09a042ac0h,0ad55e8c9h
+ DD 0b76da1f5h,0975a1ed8h,0a58acb94h,010dfa466h,0ac060282h,08dd7f7e3h,0572a051eh,06813e66ah,0350cb901h,0b4ccae1eh,050cb7822h,0b653d656h,0dfab3b87h,042484710h,09b670fd0h,0cd7ee537h
+ DD 0523b8bf6h,00a50b12eh,08f910c1bh,08009eb5bh,04a167588h,0f535af82h,0fb2a2abdh,00f835f9ch,02afceb62h,0f59b2931h,0169d383fh,0c797df2ah,066ac02b0h,0eb3f5fb0h,0daa2d0cah,0029d4c6fh
+ DD 0afab4bc5h,0d4059bc1h,056783247h,0833f5c6fh,08d2d3605h,0b5346630h,0d34d8433h,083387891h,0add9419ah,0d973b30fh,0afe3fce8h,0bcca1099h,00809aac6h,008178315h,0540f0f11h,001b7f21ah
+ DD 0909523c8h,065c29219h,0a3a1c741h,0a62f648fh,060c9e55ah,088598d4fh,00e4f347ah,0bce9141bh,035f9b988h,09af97d84h,0320475b6h,00210da62h,09191476ch,03c076e22h,044fc7834h,07520dbd9h
+ DD 0c1ab1bbdh,06a6b2cfeh,0dc650938h,0ef8a65beh,0805d7bc4h,072855540h,0ed11fdfdh,0da389396h,074660876h,0a9d5bd36h,0b45dff35h,011d67c54h,0a4f5da94h,06af7d148h,0c0bbeb31h,0bb8d4c3fh
+ DD 0e0a1b12ah,087a7ebd1h,0770ba95fh,01e4ef88dh,0dc2ae9cbh,08c33345ch,001cc8403h,0cecf1276h,01b39b80fh,0687c012eh,035c33ba4h,0fd90d0adh,05c9661c2h,0a3ef5a67h,0e017429eh,0368fc88eh
+ DD 0196a2fa2h,0d30c6761h,0bd5b312eh,0931b9817h,072f54a31h,0ba01000ch,066eaa541h,0a203d2c8h,098939db3h,0f2abdee0h,03e606c02h,0e37d6c2ch,0521ff643h,0f2921574h,0d7e2fca3h,02781b3c4h
+ DD 07850ec06h,0664300b0h,07d3a10cfh,0ac5a38b9h,0e34ab39dh,09233188dh,05072cbb9h,0e77057e4h,0b59e78dfh,0bcf0c042h,01d97de52h,04cfc91e8h,03ee0ca4ah,04661a26ch,0fb8507bch,05620a4c1h
+ DD 0049f842ch,04b44d4aah,01540e82bh,0ceabc5d5h,015c6f156h,0306710fdh,063db1d72h,0be5ae52bh,0334957f1h,006f1e7e6h,031144a70h,057e388f0h,0df96447bh,0fb69bb2fh,073e38a12h,00f78ebd3h
+ DD 02b7ce542h,0b8222605h,07472bde1h,0e6d4ce99h,009d2f4dah,053e16ebeh,053b92b2eh,0180ff42eh,02c34a1c6h,0c59bcc02h,0422c46c2h,03803d6f9h,05c14a8a2h,018aff74fh,010a08b28h,055aebf80h
+ DD 07135593fh,066097d58h,02be570cdh,032e6eff7h,02a8c860dh,0584e6a10h,0a2eb4163h,0cd185890h,06d97e134h,07ceae99dh,0dd8447ceh,0d42c6b70h,0b8c50273h,059ddbb4ah,03cf34e1eh,003c612dfh
+ DD 004b6c5a0h,084b9ca15h,018f0e3a3h,035216f39h,0bd986c00h,03ec2d2bch,0d19228feh,08bf546d9h,04cd623c3h,0d1c655a4h,0502b8e5ah,0366ce718h,0eea0bfe7h,02cfc84b4h,0cf443e8eh,0e01d5ceeh
+ DD 0036520f8h,08ec045d9h,092d40e98h,0dfb3c3d1h,0cc559a04h,00bac4cceh,0240ea6b1h,035eccae5h,0f8a5a0ach,0180b32dbh,0eb699700h,0547972a5h,0ca26bca0h,0a3765801h,0a647f25ah,057e09d0eh
+ DD 02fdd23cch,0b956970eh,05682e971h,0b80288bch,09ae86ebch,0e6e6d91eh,08c9f1939h,00564c83fh,039560368h,0551932a2h,0049c28e2h,0e893752bh,0a6a158c3h,00b03cee5h,004964263h,0e12d656bh
+ DD 063e3bc1dh,04b47554eh,045044ff7h,0c719b6a2h,0e48daa07h,04f24d30ah,0c8c1edc3h,0a3f37556h,00700d360h,09a47bf76h,0822ae4e2h,0bb1a1824h,089f1fb4ch,022e275a3h,09968c5f5h,072b1aa23h
+ DD 0be063f64h,0a75feacah,0bce47a09h,09b392f43h,01ad07acah,0d4241509h,08d26cd0fh,04b0c591bh,092f1169ah,02d42ddfdh,04cbf2392h,063aeb1ach,00691a2afh,01de9e877h,0d98021dah,0ebe79af7h
+ DD 040e50acfh,0cfdf2a4eh,0af01d665h,0f0a98ad7h,01831be1fh,0efb640bfh,080e9ada0h,06fe8bd2fh,06cafbc91h,094c103a1h,08308e08ch,0170f8759h,09780ff4fh,05de2d2abh,045b201f2h,0666466bch
+ DD 0f5b343bch,058af2010h,0f2f142feh,00f2e400ah,0a85f4bdfh,03483bfdeh,003bfeaa9h,0f0b1d093h,0c7081603h,02ea01b95h,03dba1097h,0e943e4c9h,0b438f3a6h,047be92adh,0e5bf6636h,000bb7742h
+ DD 0824297b4h,0136b7083h,05584455fh,09d0e5580h,0f1c7d69eh,0ab48cedch,02a256e76h,053a9e481h,065eb2413h,00402b0e0h,08fc407a7h,0dadbbb84h,08d7f5492h,0a65cd5a4h,074bae294h,021d44293h
+ DD 03b5f1cc4h,066917ce6h,0ce872e62h,037ae52eah,02905f244h,0bb087b72h,01e6af74fh,012077086h,01058edeah,04b644e49h,0b638ca1dh,0827510e3h,06038591ch,08cf2b704h,0fe635063h,0ffc8b47ah
+ DD 01b4d5e63h,03ae220e6h,09d961b4bh,0bd864742h,09bd16bedh,0610c107eh,01127147bh,04270352ah,064cfc50eh,07d17ffe6h,01e36cb42h,050dee01ah,035dc5f9ah,0068a7622h,0df53f62ch,09a08d536h
+ DD 06be5f7deh,04ed71457h,0c2263c9eh,0d93006f8h,0cacacb36h,0e073694ch,03ae118abh,02ff7a5b4h,0cd871236h,03cce53f1h,0c2aa6d52h,0f156a39dh,0b198d76dh,09cc5f271h,081383d39h,0bc615b6fh
+ DD 0de3eee6bh,0a54538e8h,0ab910d91h,058c77538h,058d278bdh,031e5bdbch,0b963acaeh,03cde4adfh,05302169ch,0b1881fd2h,0a989ed8bh,08ca60fa0h,0ff96a0eeh,0a1999458h,0ac6c283dh,0c1141f03h
+ DD 06dfafed3h,07677408dh,039661588h,033a01653h,00b726fa0h,03c9c15ech,06c9b56dah,0090cfd93h,0a3c40af5h,0e34f4baeh,0d21129f1h,03469eadbh,01e207ce8h,0cc51674ah,0c83b1ef9h,01e293b24h
+ DD 01e6c0bb4h,017173d13h,090776d35h,019004695h,06de6f922h,0e7980e34h,0f4dd9a22h,0873554cbh,0cbf18a51h,00316c627h,03032c081h,04d93651bh,03946834dh,0207f2771h,030cdbf80h,02c08d7b4h
+ DD 086df2a61h,0137a4fb4h,0ecf7b4a2h,0a1ed9c07h,07bd042ffh,0b2e460e2h,05f62f5ech,0b7f5e2fah,0cc2423b7h,07aa6ec6bh,0ba63eea7h,075ce0a7fh,0f250a6e1h,067a45fb1h,0e53cdc9fh,093bc919ch
+ DD 0871942dfh,09271f56fh,07859ad66h,02372ff6fh,033cb1a78h,05f4c2b96h,05838aa83h,0e3e29101h,0e4e8110ch,0a7ed1611h,0330198ceh,02a2d70d5h,06720efe0h,0bdf132e8h,066a471bfh,0e61a8962h
+ DD 0825808bdh,0796d3a85h,03fd6e902h,051dc3cb7h,0916219d1h,0643c768ah,0a2ad7d32h,036cd7685h,0b22922a4h,0e3db9d05h,0dba29660h,06494c87eh,0bcd2ebc7h,0f0ac91dfh,045107f8dh,04deb57a0h
+ DD 0c3d12a73h,042271f59h,0a5c2c51dh,05f71687ch,005797bcbh,0cb1f50c6h,0d6d34eb0h,029ed0ed9h,04683c2ebh,0e5fe5b47h,097447c46h,04956eeb5h,071207167h,05b163a43h,00248c5efh,093fa2fedh
+ DD 031f63950h,067930af2h,014caa2c9h,0a77797c1h,027ac7e62h,0526e80eeh,058b28aech,0e1e6e626h,0b3c9fef0h,0636178b0h,06d5f90beh,0af7752e0h,0eece51cfh,094ecaf18h,0ca806e1fh,02864d0edh
+ DD 097c69134h,06de2e383h,0eb291293h,05a42c316h,06a60bae0h,0c7779219h,06b7599d1h,0a24de346h,0b75d4941h,049d374aah,02d501ff0h,098900586h,0eb7974cfh,09f16d40eh,0cdd8c115h,01033860bh
+ DD 02094cec3h,0b6c69ac8h,0403b770ch,09976fb88h,04859590dh,01dea026ch,08562d1fdh,0b6acbb46h,044569d85h,07cd6c461h,097f0891dh,0c3190a36h,048d5a17dh,0c6f53195h,0d749abc8h,07d919966h
+ DD 0dd1c8a20h,065104837h,02f683419h,07e5410c8h,0be94022eh,0958c3ca8h,06145dac2h,0605c3197h,001683d54h,03fc07501h,0595b1234h,01d7127c5h,09481277fh,010b8f87ch,0e65a1adbh,0677db2a8h
+ DD 0ddce3345h,0ec2fccaah,0012a4350h,02a6811b7h,0ac598bdch,096760ff1h,0d1bf4128h,0054d652ah,092a21005h,00a1151d4h,033110fdfh,0ad7f3971h,01960100fh,08c95928ch,07bf03362h,06c91c825h
+ DD 0ce309f06h,0c8c8b2a2h,0ca27204bh,0fdb27b59h,00848e32eh,0d223eaa5h,0e7bfaf1eh,0b93e4b2eh,044aa3dedh,0c5308ae6h,0c015d573h,0317a666ah,01a979707h,0c888ce23h,00d5c4958h,0f141c1e6h
+ DD 061906373h,0b53b7de5h,0eb999595h,0858dbadeh,0a59e5c36h,08cbb47b2h,0dcf4e842h,0660318b3h,012ba4b7ah,0bd161ccdh,0f8c8282ah,0f399daabh,0eeb2130dh,01587633ah,0da38dd7dh,0a465311ah
+ DD 064d3779bh,05f75eec8h,0ad64c171h,03c5d0476h,02a914428h,087410371h,090e2fc29h,08096a891h,023b3ebc2h,0d3d2ae9dh,0a580cfd6h,090bdd6dbh,0c5b01f6ch,052dbb7f3h,0e102a2dch,0e68eded4h
+ DD 099eb6df0h,017785b77h,07386b779h,026c3cc51h,06417a48eh,0345ed988h,007d6ef31h,0e990b4e4h,02586abbah,00f456b7eh,059c96e9ah,0239ca6a5h,0e2eb4206h,0e327459ch,0a002b90ah,03a4c3313h
+ DD 0f6a3f6fbh,02a114806h,085c251ddh,0ad5cad2fh,0f5a784d3h,092c1f613h,0349766d5h,0ec7bfacfh,03e23cb3bh,004b3cd33h,0c5a64b2dh,03979fe84h,07e589106h,0192e2720h,0a15b527fh,0a60c43d1h
+ DD 0be7cf3a6h,02dae9082h,0bc967274h,0cc86ba92h,0aea0a8a9h,0f28a2ce8h,06ee988b3h,0404ca6d9h,0005921b8h,0fd7e9c5dh,044e79bf9h,0f56297f1h,00d75ddc2h,0a163b460h,0a1f2be87h,030b23616h
+ DD 0bfe50e2bh,04b070d21h,0e1bfede1h,07ef8cfd0h,02aac4ae0h,0adba0011h,0b9ebd033h,02a3e7d01h,0e38d9d1ch,0995277ech,09c5d2de3h,0b500249eh,0f13ca8c9h,08912b820h,0877793afh,0c8798114h
+ DD 0ec3f1dech,019e6125dh,0911178dah,007b1f040h,0904a6738h,0d93ededah,00bebedcdh,055187a5ah,0eb329d41h,0f7d04722h,0f170b391h,0f449099eh,0ca99f828h,0fd317a69h,034a4976dh,050c3db2bh
+ DD 03757b392h,0e9ba7784h,0aa3ca05ah,0326caefdh,0f1e593d4h,078e5293bh,00d98fd13h,07842a937h,05f96b10dh,0e694bf96h,006a8cd05h,0373a9df6h,0e8f0c7fch,0997d1e51h,063fd972eh,01d019790h
+ DD 05499fb32h,00064d858h,077a8aeb7h,07b67bad9h,02d08eec5h,01d3eb977h,0cbabae1dh,05fc047a6h,0e54a64bbh,00577d159h,0c43497e4h,08862201bh,02ce0608dh,0ad6b4e28h,00b167aach,08b687b7dh
+ DD 08b2ecfa9h,06ed4d367h,0a90c3c38h,024dfe62dh,03fe5c42bh,0a1862e10h,0d5732a9fh,01ca73dcah,076bb87adh,035f038b7h,0f242b81fh,0674976abh,0b0fd90cdh,04f2bde7eh,0a7fdf092h,06efc172eh
+ DD 092222f1fh,03806b69bh,06cf7ae70h,05a2459cah,0a85217eeh,06789f69ch,0e3dc85ach,05f232b5eh,048e9e516h,0660e3ec5h,03197eb31h,0124b4e47h,0aafcca23h,010a0cb13h,08213224fh,07bd63ba4h
+ DD 0290a7f4fh,0affad7cch,00286b461h,06b409c9eh,0ffa407afh,058ab809fh,0c68ac073h,0c3122eedh,04ef24d7eh,017bf9e50h,03e2a5811h,05d929794h,002902e01h,0519bc867h,039c8a851h,076bba5dah
+ DD 0da94951eh,0e9f9669ch,066b8d418h,04b6af58dh,017d426a4h,0fa321074h,09dde6027h,0c78e66a9h,04a53b964h,00516c083h,0ff602330h,0fc659d38h,058c5c897h,00ab55e5ch,0838bc5dfh,0985099b2h
+ DD 0c52fc238h,0061d9efch,06ac1da3fh,0712b2728h,09283fe08h,0fb658149h,0b8aaa2f7h,04954ac94h,07fb2e74fh,085c0ada4h,0b89926b0h,0ee8ba98eh,023d1af5bh,0e4f9d37dh,0ba9b015eh,014ccdbf9h
+ DD 07bfe7178h,0b674481bh,065405868h,04e1debaeh,0c48c867dh,0061b2821h,0513b30eah,069c15b35h,036871088h,03b4a1666h,01220b1ffh,0e5e29f5dh,0233d9f4dh,04b82bb35h,018cdc675h,04e076333h
+ DD 0a3e6fcedh,00d53f5c7h,0f45fbdebh,0e8cbbdd5h,013339a70h,0f85c01dfh,0142ceb81h,00ff71880h,0bd70437ah,04c4e8774h,0ba0bda6ah,05fb32891h,0f18bd26eh,01cdbebd2h,003a9d522h,02f9526f1h
+ DD 092c4d684h,040ce3051h,07612efcdh,08b04d725h,06f9cae20h,0b9dcda36h,0f058856ch,00edc4d24h,085427900h,064f2e6bfh,0dc09dfeah,03de81295h,0379bf26ch,0d41b4487h,06df135a9h,050b62c6dh
+ DD 0c72dfe67h,0d4f8e3b4h,090e19fdfh,0c416b0f6h,04c13bd35h,018b9098dh,015b8cb9eh,0ac11118ah,0f0062841h,0f598a318h,089f356f4h,0bfe0602fh,030177a0ch,07ae3637eh,061136537h,034097747h
+ DD 0d005832ah,00db2fb5eh,091042e4fh,05f5efd3bh,0ed70f8cah,08c4ffdc6h,0b52da9cch,0e4645d0bh,0c9001d1fh,09596f58bh,04e117205h,052c8f0bch,0e398a084h,0fd4aa0d2h,0104f49deh,0815bfe3ah
+ DD 023885e5fh,097e5443fh,0e8433aabh,0f72f8f99h,0e4d4e604h,0bd00b154h,0e5e173ffh,0d0b35e6ah,09164722dh,057b2a048h,088761ec8h,03e3c665bh,03da83832h,06bdd1397h,073dafe3bh,03c8b1a1eh
+ DD 054317cach,04497ace6h,0521771b3h,0be600ab9h,0b0dfe8b8h,0b42e409eh,03942310fh,0386a67d7h,04431cc28h,025548d8dh,0985dc524h,0a7cff142h,093c4be32h,04d60f5a1h,0d071c6e1h,083ebd5c8h
+ DD 0b1fd2b0bh,0ba3a80a7h,05bec33e8h,09b3ad396h,079743fb3h,0b3868d61h,0fdb462fah,0cfd169fch,09ce0a6afh,0d3b499d7h,0e42d3ff8h,055dc1cf1h,0c6c3e1b2h,004fb9e6ch,06f69a474h,047e6961dh
+ DD 0e548b37bh,054eb3acch,084d40549h,0b38e7542h,07b341b4fh,08c3daa51h,0690bf7fah,02f6928ech,086ce6c41h,00496b323h,010adadcdh,001be1c55h,04bb5faf9h,0c04e67e7h,0e15c9985h,03cbaf678h
+ DD 050ca4247h,08cd12145h,0e7dd30aah,0ba1aa47ah,0e58fee24h,02f81ddf1h,0eec9b0e8h,003452936h,0243aea96h,08bdc3b81h,015c3d0e5h,09a2919afh,010948361h,09ea640ech,06e0bcccfh,05ac86d5bh
+ DD 0c36cf440h,0f892d918h,0c939719ch,0aed3e837h,0c0218b64h,0b07b08d2h,0ce9790ddh,06f1bcbbah,060919b8eh,04a84d6edh,08ac1f9ebh,0d8900791h,00dd5daefh,0f84941aah,067fd62c5h,0b22fe40ah
+ DD 0157f2db3h,097e15ba2h,08e28ca9ch,0bda2fc8fh,037b9f454h,05d050da4h,02379d72eh,03d57eb57h,0fb5ee997h,0e9b5eba2h,0e11538cah,001648ca2h,0f6327974h,032bb76f6h,0ff3f4bb7h,0338f14b8h
+ DD 0d7ab9a2dh,0524d226ah,07dfae958h,09c00090dh,08751d8c2h,00ba5f539h,03ab8262dh,08afcbcddh,0e99d043bh,057392729h,0aebc943ah,0ef51263bh,020862935h,09feace93h,0b06c817bh,0639efc03h
+ DD 066b4be7ah,01fe054b3h,084a37a1eh,03f25a9deh,078d75cd9h,0f39ef1adh,05062c1b5h,0d7b58f49h,0ff563436h,06f74f9a9h,0e8af51e7h,0f718ff29h,015e97fech,05234d313h,0292f1c0ah,0b6a8e2b1h
+ DD 0327720c1h,0a7f53aa8h,0ba092cc8h,0956ca322h,028746c4dh,08f03d64ah,066d0d392h,051fe1782h,03c832c80h,0d19b34dbh,06da2e3b4h,060dccc5ch,00a104ccch,0245dd62eh,0620b21fdh,0a7ab1de1h
+ DD 03893d123h,0b293ae0bh,0b15ee71ch,0f7b75783h,042a9468bh,05aa3c614h,0db15d744h,0d686123ch,0a7ab4116h,08c616891h,0a4e6a459h,06fcd72c8h,077e5fad7h,0ac219110h,0704fa46bh,0fb6a20e7h
+ DD 0341d81dch,0e839be7dh,032148379h,0cddb6889h,0f7026eadh,0da6211a1h,0f4d1cc5eh,0f3b2575fh,0a7a73ae6h,040cfc8f6h,061d5b483h,083879a5eh,041a50ebch,0c5acb1edh,03c07d8fah,059a60cc8h
+ DD 0b1876262h,01b73bdceh,012af4ee9h,02b0d79f0h,0d46e1d07h,08bcf3b0bh,0e45d152fh,017d6af9dh,06d736451h,073520461h,056b0bf5ah,043cbbd97h,0d5999b9dh,0b0833a5bh,0eb72e398h,0702614f0h
+ DD 059c3e9f8h,00aadf01ah,0ce6b3d16h,040200e77h,0deddafadh,0da22bdd3h,0310d72e1h,076dedaf4h,04bc2e88fh,049ef807ch,0146dd5a5h,06ba81291h,07d8d59e9h,0a1a4077ah,0802db349h,087b6a2e7h
+ DD 01b4e598eh,0d5679997h,006fe4b1dh,0f499ef1fh,0fcb267c5h,03978d3aeh,0235786d0h,0b582b557h,01715cb07h,032b3b2cah,08480241dh,04c3de6a2h,0cb571ecdh,063b5ffedh,0ed2fe9a9h,0eaf53900h
+ DD 0c3b81990h,0dec98d4ah,09e0cc8feh,01cb83722h,0d2b427b9h,0fe0b0491h,0e983a66ch,00f2386ach,0b3291213h,0930c4d1eh,059a62ae4h,0a2f82b2eh,0f93e89e3h,077233853h,011777c7fh,07f8063ach
+ DD 059ad2877h,0ff0eb567h,09865c754h,06f454642h,0236e9a84h,0e6fe701ah,006e40fc3h,0c586ef16h,024bafad9h,03f62b6e0h,064da906ah,0c8b42bd2h,0da3276a0h,0c98e1eb4h,006cbf852h,030d0e5fch
+ DD 0e8b4dfd4h,01b6b2ae1h,08301cbach,0d754d5c7h,0112a39ach,066097629h,093ba4ab9h,0f86b5999h,099f9d581h,026c9dea7h,0c2fafeaah,00473b1a8h,03b2505a5h,01469af55h,0d6a43323h,0227d16d7h
+ DD 0ad3d97f9h,03316f73ch,01f137455h,052bf3bb5h,009954e7ch,0953eafebh,0dd732411h,0a721dfedh,0141d4579h,0b4929821h,0aa3bd435h,03411321ch,017fa6015h,0afb355aah,018e42f0eh,0b4e7ef4ah
+ DD 059371000h,0604ac97ch,07f759c18h,0e1c48c70h,0a5db6b65h,03f62ecc5h,038a21495h,00a78b173h,0bcc8ad94h,06be1819dh,0d89c3400h,070dc04f6h,0a6b4840ah,0462557b4h,060bd21c0h,0544c6adeh
+ DD 0907a544bh,06a00f24eh,0313da210h,0a7520dcbh,011e4994bh,0fe939b75h,0bc275d70h,0918b6ba6h,0644be892h,0d3e5e0fch,0fdaf6c42h,0707a9816h,0f15c13feh,060145567h,0e130a54ah,04818ebaah
+ DD 058d2f767h,028aad3adh,0d7e7c773h,0dc5267fdh,0c3afcc98h,04919cc88h,02db8cd4bh,0aa2e6ab0h,0d0c63eaah,0d46fec04h,019ffa832h,0a1cb92c5h,0e43a631fh,0678dd178h,03dc788b3h,0fb5ae1cdh
+ DD 06e77de04h,068b4fb90h,0f06dbb97h,07992bcf0h,0c417c01dh,0896e6a13h,0b956be01h,08d96332ch,0413aa2b9h,0902fc93ah,0fc98c8a5h,099a4d915h,0565f1137h,052c29407h,021e4f281h,04072690fh
+ DD 002ff6072h,036e607cfh,08ad98cdch,0a47d2ca9h,0f5f56609h,0bf471d1eh,0f264ada0h,0bcf86623h,0aa9e5cb6h,0b70c0687h,017401c6ch,0c98124f2h,0d4a61435h,08189635fh,0a9d98ea6h,0d28fb8afh
+ DD 040c251f8h,0b9a67c2ah,0a2da44beh,088cd5d87h,0e09b5423h,0437deb96h,064287dc1h,0150467dbh,0cdabb839h,0e161debbh,0f1839a3eh,0a79e9742h,0652d202bh,0bb8dd3c2h,0e9f97d96h,07b3e67f7h
+ DD 0b1cb6ac9h,05aa5d78fh,0ca1d0d45h,0ffa13e8eh,02ba5bf95h,0369295ddh,039aff05eh,0d68bd1f8h,026d783f2h,0af0d86f9h,0fc3aafc1h,0543a59b3h,07b7da97ch,03fcf81d2h,0d25dee46h,0c990a056h
+ DD 0519cce2ch,03e6775b8h,0ae13d863h,0fc9af71fh,047c1605ch,0774a4a6fh,02fd205e8h,046ba4245h,0d3fd524dh,0a06feea4h,06de1acc2h,01e724641h,0334e2b42h,0f53816f1h,0922f0024h,049e5918eh
+ DD 065c7322dh,0439530b6h,0b3c1b3fbh,0cf12cc01h,00172f685h,0c70b0186h,01b58391dh,0b915ee22h,0a317db24h,09afdf03bh,017b8ffc4h,087dec659h,0e4d3d050h,07f46597bh,0006500e7h,080a1c1edh
+ DD 078bf030eh,084902a96h,050560148h,0fb5e9c9ah,063362426h,06dae0a92h,0a9e30c40h,0dcaeecf4h,0518d0c6bh,0c0d887bbh,0cb985b9dh,099181152h,0ef7bc381h,0ad186898h,09ee46201h,018168ffbh
+ DD 02502753ch,09a04cdaah,051407c41h,0bb279e26h,0f23564e5h,0eacb03aah,071e61016h,018336582h,0eb809877h,08684b8c4h,0ea0e672eh,0b336e18dh,034ee5867h,0efb601f0h,01341cfd1h,02733edbeh
+ DD 026025c3ch,0b15e809ah,09350df88h,0e6e981a6h,08502fd8eh,092376237h,00c12be9bh,04791f216h,025f02425h,0b7256789h,07a974443h,0ec863194h,0fb41cc52h,07c0ce882h,0f25c07f2h,0c266ff7eh
+ DD 0017025f3h,03d4da8c3h,0fb9579b4h,0efcf628ch,01f3716ech,05c4d0016h,06801116eh,09c27ebc4h,01da1767eh,05eba0ea1h,047004c57h,0fe151452h,08c2373b7h,03ace6df6h,05dbc37ach,075c3dffeh
+ DD 0ddc925fch,03dc32a73h,02f65ee0bh,0b679c841h,0451cbfebh,0715a3295h,0f76e9a29h,0d9889768h,0b28ad247h,0ec20ce7fh,000894d79h,0e99146c4h,09f5e3ea7h,071457d7ch,038030031h,0097b2662h
+ DD 0cf9f82a8h,0db7f6ae6h,0438f473ah,0319decb9h,0283856c3h,0a63ab386h,0b06a361bh,013e3172fh,07d5a006ch,02959f8dch,075fba752h,02dbc27c6h,087c22c9eh,0c1227ab2h,071a268b2h,006f61f75h
+ DD 004779ce2h,01b6bb971h,00aadcb1dh,0aca83812h,0aeaab2d5h,0297ae0bch,05bfb9f13h,0a5c14ee7h,0f17a62c7h,0aa00c583h,0173759f6h,039eb962ch,086c9a88fh,01eeba1d4h,0df016c5eh,00ab6c37ah
+ DD 0a28a0749h,0a2a147dbh,0ee519165h,0246c20d6h,0d3810715h,05068d1b1h,0748160b9h,0b1e7018ch,0f380ff62h,003f5b1fah,0f3cb2c1eh,0ef7fb1ddh,0fc91a7dah,0eab539a8h,0f3f9b561h,083ddb707h
+ DD 0fe7df7a4h,0c550e211h,0063f6f40h,0a7cd07f2h,02976879ch,0b0de3635h,0e55741dah,0b5f83f85h,0f3d8ac3dh,04ea9d25eh,062819f02h,06fe2066fh,0cef4a564h,04ab2b9c2h,05ffa2de3h,01e155d96h
+ DD 0c3a72d00h,00eb0a19bh,08513c31bh,04037665bh,004c64637h,02fb2b6bfh,008cdc639h,045c34d6eh,0f01fd796h,056f1e10fh,0fe3667b8h,04dfb8101h,09021d0c0h,0e0eda253h,08a06c6abh,07a94e9ffh
+ DD 0bb9aa882h,02d3bb0d9h,0ec05fd10h,0ea20e4e5h,01a1ca64eh,0ed7eeb5fh,0c6327cbdh,02fa6b43ch,03aa91121h,0b577e3cfh,03a34079bh,08c6bd5eah,060e02fc0h,0d7e5ba39h,090141bf8h,0f16dd2c3h
+ DD 080101b98h,0b57276d9h,0b82f0f66h,0760883fdh,04bc3eff3h,089d7de75h,05dc2ab40h,003b60643h,0e05beeach,0cd6e53dfh,0bc3325cdh,0f2f1e862h,0774f03c3h,0dd0f7921h,04552cc1bh,097ca7221h
+ DD 01cd19f72h,05a0d6afeh,0f183fbebh,0a20915dch,0832c403ch,09fda4b40h,0be425442h,032738eddh,0b5eccf1ah,0469a1df6h,028bbe1f0h,04b5aff42h,0570dfc93h,031359d7fh,0f0088628h,0a18be235h
+ DD 0b00ed3a9h,0a5b30fbah,073cdf8beh,034c61374h,0abc56797h,02c5c5f46h,0b82a8ae2h,05cecf93dh,0a968fbf0h,07d3dbe41h,01a5c7f3dh,0d23d4583h,0c087a9c7h,0f28f69a0h,0474471cah,0c2d75471h
+ DD 04eb732ech,036ec9f4ah,0b1ca6bedh,06c943bbdh,0f2457892h,0d64535e1h,0f7e2ac06h,08b84a8eah,02499dd5fh,0e0936cd3h,00ed04e57h,012053d7eh,0e4305d9dh,04bdd0076h,01f67f0a2h,034a527b9h
+ DD 09cec46eah,0e79a4af0h,0658b9bc7h,0b15347a1h,035af2f75h,06bd2796fh,04051c435h,0ac957990h,0c33a655dh,02669dda3h,088514aa3h,05d503c2eh,03753dd41h,0dfa11337h,00b754f78h,03f054673h
+ DD 0496125bdh,0bf185677h,03775006ch,0fb0023c8h,03a037899h,0fa0f072fh,00e4aea57h,04222b6ebh,07866d25ah,03dde5e76h,04837aa6fh,0b6eb04f8h,02cf1cdb8h,05315591ah,02d4e683ch,06dfb4f41h
+ DD 048ee1f3ah,07e923ea4h,005a2afd5h,09604d9f7h,040ea4948h,0be1d4a33h,0b44cbd2fh,05b45f1f4h,04acc757eh,05faf8376h,063d68ff7h,0a7cf9ab8h,0df0e404bh,08ad62f69h,012bdafdfh,0d65f33c2h
+ DD 0a377b14eh,0c365de15h,08e39f60ch,06bf5463bh,02ce68148h,062030d2dh,0e6f843a8h,0d95867efh,0ef5ab017h,0d39a0244h,04ab55d12h,00bd2d8c1h,041639169h,0c9503db3h,0f7660c8ah,02d4e25b0h
+ DD 0e224c5d7h,0760cb3b5h,068616919h,0fa3baf8ch,08d142552h,09fbca113h,07669ebf5h,01ab18bf1h,09bdf25ddh,055e6f53eh,0cb6cd154h,004cc0bf3h,095e89080h,0595bef49h,0104a9ac1h,0fe9459a8h
+ DD 0cce9bb32h,0ad2d89cah,0f7de8285h,0ddea65e1h,0b351bd4bh,062ed8c35h,00c0e19a7h,04150ff36h,0345f4e47h,086e3c801h,0203a266ch,03bf21f71h,0855b1f13h,07ae110d4h,007262517h,05d6aaf6ah
+ DD 0813d28f1h,01e0f12e1h,07ad7a523h,06000e11dh,0c744a17bh,0c7d8deefh,014c05a00h,01e990b48h,093e976d5h,068fddaeeh,046610d63h,0696241d1h,0893dda88h,0b204e7c3h,06a3a6946h,08bccfa65h
+ DD 0c5cd1411h,0b59425b4h,0ff3658b1h,0701b4042h,04784cf93h,0e3e56bcah,08fe68d60h,027de5f15h,0f8d53f19h,04ab9cfceh,0a40a730dh,0ddb10311h,04eee0a8ah,06fa73cd1h,05249719dh,0fd548748h
+ DD 0a8123ef0h,049d66316h,0e7f95438h,073c32db4h,00d9e7854h,02e2ed209h,09d9f0507h,0f98a9329h,00c6aa20ah,0c5d33cf6h,075279bb2h,09a32ba14h,0774a7307h,07e3202cbh,0e8c42dbdh,064ed4bc4h
+ DD 0d4caed0dh,0c20f1a06h,0171d22b3h,0b8021407h,0d13268d7h,0d426ca04h,025f4d126h,092377007h,071f21a85h,04204cbc3h,0f82369bah,018461b7ah,03fc858f9h,0c0c07d31h,0e2bab569h,05deb5a50h
+ DD 0d5eea89eh,0d5959d46h,008437f4bh,0fdff8424h,03cfe254fh,0f21071e4h,095468321h,072417696h,0102cae3eh,05d8288b9h,0f1965dffh,02d143e3dh,0a078d847h,000c9a376h,026028731h,06fc0da31h
+ DD 0e45083a2h,0a2baeadfh,05e5b4bcdh,066bc7218h,0d04b8e7fh,02c826442h,06c4b586bh,0c19f5451h,05b7eeed5h,060182c49h,07aa9dfa1h,0d9954ecdh,0c73884adh,0a403a8ech,09bb39041h,07fb17de2h
+ DD 0abb020e8h,0694b64c5h,019c4eec7h,03d18c184h,01c4793e5h,09c4673efh,0056092e6h,0c7b8aeb5h,0f0f8c16bh,03aa1ca43h,0d679b2f6h,0224ed5ech,055a205c9h,00d56eeafh,04b8e028bh,0bfe115bah
+ DD 03927f4feh,097e60849h,0759aa7c5h,0f91fbf94h,06be90a51h,0985af769h,078ccb823h,0c1277b78h,0e7a75952h,0395b656eh,0928da5f5h,000df7de0h,04ca4454fh,009c23175h,07aa2d3c1h,04ec971f4h
+ DD 0e75d9ccch,045c3c507h,03dc90306h,063b7be8ah,05db44bdch,037e09c66h,06841c6a2h,050d60da1h,008df1b12h,06f9b65eeh,07ff089dfh,038734879h,03fe8013dh,09c331a66h,05f42fcc8h,0017f5de9h
+ DD 0e8e57567h,043077866h,0f9fcdb18h,0c9f781ceh,09b12e174h,038131ddah,08a03752ah,025d84aa3h,04d0c0ce2h,045e09e09h,092bebba5h,01564008bh,0a87284c7h,0f7e8ad31h,097e7bbaah,0b7c4b46ch
+ DD 097acf4ech,03e22a7b3h,05ea8b640h,00426c400h,04e969285h,05e3295a6h,0a6a45670h,022aabc59h,05f5942bch,0b929714ch,0fa3182edh,09a6168bdh,0104152bah,02216a665h,0b6926368h,046908d03h
+ DD 05a1251fbh,0a9f5d874h,0c72725c7h,0967747a8h,031ffe89eh,0195c33e5h,0e964935eh,0609d210fh,02fe12227h,0cafd6ca8h,00426469dh,0af9b5b96h,05693183ch,02e9ee04ch,0c8146fefh,01084a333h
+ DD 0aed1d1f7h,096649933h,050563090h,0566eaff3h,0ad2e39cfh,0345057f0h,01f832124h,0148ff65bh,0cf94cf0dh,0042e89d4h,0520c58b3h,0319bec84h,05361aa0dh,02a267626h,08fbc87adh,0c86fa302h
+ DD 05c8b06d5h,0fc83d2abh,0fe4eac46h,0b1a785a2h,0846f7779h,0b99315bch,0ef9ea505h,0cf31d816h,015d7dc85h,02391fe6ah,0b4016b33h,02f132b04h,0181cb4c7h,029547fe3h,0650155a1h,0db66d8a6h
+ DD 0adc1696fh,06b66d7e1h,00acd72d0h,098ebe593h,0cc1b7435h,065f24550h,0b4b9a5ech,0ce231393h,0db067df9h,0234a22d4h,0caff9b00h,098dda095h,06100c9c1h,01bbc75a0h,0939cf695h,01560a9c8h
+ DD 099e0925fh,0cf006d3eh,06322375ah,02dd74a96h,0b56af5bah,0c58b446ah,0e0b9b4f1h,050292683h,01aeaffa3h,0e2c34cb4h,09b9587c1h,08b17203fh,0ead1350ch,06d559207h,0fb7f9604h,02b66a215h
+ DD 0fe51bf74h,00850325eh,05e460094h,09c4f579eh,076da2f25h,05c87b92ah,06febef33h,0889de4e0h,0646083ceh,06900ec06h,0bfe12773h,0be2a0335h,0c5344110h,0add1da35h,0b802cd20h,0757568b7h
+ DD 000f7e6c8h,075559779h,00facd2f0h,038e8b94fh,003fde375h,0fea1f3afh,075881dfch,05e11a1d8h,0c1e2f2efh,0b3a6b02eh,0c605a6c5h,0193d2bbbh,0339a0b2dh,0325ffeeeh,09e0c8846h,027b6a724h
+ DD 0f1c367cah,0e4050f1ch,0c90fbc7dh,09bc85a9bh,0e1a11032h,0a373c4a2h,0ad0393a9h,0b64232b7h,0167dad29h,0f5577eb0h,094b78ab2h,01604f301h,0e829348bh,00baa94afh,041654342h,077fbd8ddh
+ DD 0b964e39ah,0dab50ea5h,0d0d3c76eh,0d4c29e3ch,056d11964h,080dae67ch,0e5ffcc2fh,07307a8bfh,091708c3bh,065bbc1aah,028bf0eebh,0a151e62ch,06fa34db7h,06cb53381h,0a29403a8h,05139e05ch
+ DD 094a7cd2eh,06ff651b4h,00699336ch,05671ffd1h,0979a896ah,06f5fd2cch,0d8148cefh,011e893a8h,065cf7b10h,0988906a1h,0c50d8485h,081b67178h,08a35b3deh,07c0deb35h,0c1d29799h,0423ac855h
+ DD 0dac50b74h,0af580d87h,05869734ch,028b2b89fh,0874e28fbh,099a3b936h,025f3f73ah,0bb2c9190h,084a9d5b7h,0199f6918h,07e770374h,07ebe2325h,00738efe2h,0f442e107h,0cf9082d2h,0cf9f3f56h
+ DD 009618708h,0719f69e1h,0c183f9b1h,0cc9e8364h,0366a21afh,0ec203a95h,0068b141fh,06aec5d6dh,0994f04e9h,0ee2df78ah,0271245b0h,0b39ccae8h,097e43f4fh,0b875a4a9h,0db2cea98h,0507dfe11h
+ DD 0489b03e9h,04fbf81cbh,06ec414fah,0db86ec5bh,0f51b3ae5h,0fad444f9h,01914e3feh,0ca7d33d6h,00ae6c4d0h,0a9c32f5ch,073969568h,0a9ca1d1eh,01aa7467eh,098043c31h,0e21b5ac6h,0e832e75ch
+ DD 05232123dh,0314b7aeah,065ae86dbh,008307c8ch,0aa4668edh,006e7165ch,0b4d3ec39h,0b170458bh,0c19bb986h,04d2e3ec6h,0ae0304edh,0c5f34846h,06c9f9722h,0917695a0h,04cab1c0ah,06c7f7317h
+ DD 09d6d2e8bh,06295940eh,0549f7c97h,0d318b8c1h,097713885h,022453204h,0a8a440feh,0468d834bh,0bfba796eh,0d81fe5b2h,06d71f116h,0152364dbh,0b5b66e53h,0bb8c7c59h,02641a192h,00b12c61bh
+ DD 0fcf0a7fdh,031f14802h,05488b01eh,042fd0789h,09952b498h,071d78d6dh,007ac5201h,08eb572d9h,04d194a88h,0e0a2a44ch,0ba017e66h,0d2b63fd9h,0f888aefch,078efc6c8h,04a881a11h,0b76f6bdah
+ DD 0b46c2397h,0187f314bh,05ded2819h,0004cf566h,038764d34h,0a9ea5704h,078084709h,0bba45217h,01171121eh,006474571h,0e7c9b671h,0ad7b7eb1h,0730f7507h,0dacfbc40h,0c7ad7bd1h,0178cd8c6h
+ DD 0b2a67238h,0bf0be101h,0af9c14f2h,03556d367h,0a5662075h,0104b7831h,079d9e60ah,058ca59bbh,0a569a73bh,04bc45392h,05698f6c9h,0517a52e8h,0aeadd755h,085643da5h,02a581b84h,01aed0cd5h
+ DD 080af1372h,0b9b4ff84h,0f1ba5d1fh,0244c3113h,0f5f98d31h,02a5dacbeh,04375bc2ah,02c3323e8h,05594b1ddh,017a3ab4ah,0ceb4797eh,0a1928bfbh,0e4886a19h,0e83af245h,072b5a74ah,08979d546h
+ DD 019f9e967h,0a0f726bch,0e8fbbf4eh,0d9d03152h,0b7707d40h,0cfd6f51dh,063f6e6e0h,0633084d9h,055667eafh,0edcd9cdch,02e44d56fh,073b7f92bh,04e962b14h,0fb2e39b6h,0f671fcbfh,07d408f6eh
+ DD 0164a89bbh,0cc634ddch,03ef3bd05h,074a42bb2h,0428decbbh,01280dbb2h,0402c8596h,06103f6bbh,0355a5752h,0fa2bf581h,000946674h,0562f96a8h,06da0223bh,04e4ca16dh,028d3aa25h,0fe47819fh
+ DD 0f8dfcf8ah,09eea3075h,095669825h,0a284f0aah,0867d3fd8h,0b3fca250h,0269d691eh,020757b5fh,093b8a5deh,0f2c24020h,0ebc06da6h,0d3f93359h,0b2739c33h,01178293eh,0bcd686e5h,0d2a3e770h
+ DD 0cd941534h,0a76f49f4h,0e3c71c0eh,00d37406bh,03b97f7e3h,0172d9397h,0bd7fd0deh,0ec17e239h,06f496ba2h,0e3290551h,036ad50e7h,06a693172h,083e7eff5h,0c4e539a2h,018e1b4cfh,0752737e7h
+ DD 068af43eeh,0a2f7932ch,0703d00bdh,05502468eh,02fb061f5h,0e5dc978fh,028c815adh,0c9a1904ah,0470c56a4h,0d3af538dh,0193d8cedh,0159abc5fh,020108ef3h,02a37245fh,0223f7178h,0fa17081eh
+ DD 010c8c0f5h,027b0fb2bh,040650547h,02102c3eah,08ac3bfa7h,0594564dfh,0509dad96h,098102033h,0f1d18a13h,06989643fh,0d7fc5af0h,035eebd91h,0faeaafd8h,0078d096ah,0def3de98h,0b7a89341h
+ DD 0ecf2a73ah,02a206e8dh,08e551994h,0066a6397h,0b98d53a2h,03a6a088ah,02d1124aah,00ce7c67ch,0759a113ch,048cec671h,04f6f67fah,0e3b373d3h,0fd36727bh,05455d479h,0a13c0d81h,0e5a428eeh
+ DD 01c86682bh,0b853dbc8h,0b8d02b2ah,0b78d2727h,08ebc329ah,0aaf69bedh,0293b2148h,0db6b40b3h,0b8c4961fh,0e42ea77dh,020e5e0abh,0b1a12f7ch,079e8b05eh,0a0ec5274h,0fab60a80h,068027391h
+ DD 016b1bd5eh,06bfeea5fh,04de30ad3h,0f957e420h,06a353b9eh,0cbaf664eh,026d14febh,05c873312h,0b65f57cbh,04e87f98ch,05e0cdd41h,0db60a621h,0a6881440h,067c16865h,046ab52aah,01093ef1ah
+ DD 03f4ece64h,0c095afb5h,07604551ah,06a6bb02eh,00b26b8cdh,055d44b4eh,0f971268ah,0e5f9a999h,011a7de84h,0c08ec425h,0fda469ddh,083568095h,06c6c90a2h,0737bfba1h,0be229831h,01cb9c4a0h
+ DD 0bb2eec64h,093bccbbah,0da03adbeh,0a0c23b64h,0e0e86ac4h,05f7aa00ah,0fc1401e6h,0470b941eh,09df43574h,05ad8d679h,00f65d810h,04ccfb8a9h,0aa7fbd81h,01bce80e3h,09508d20ah,0273291adh
+ DD 042a92806h,0f5c4b46bh,0a86ab44ah,0810684ech,0ca0bc9f8h,04591640bh,05c4b6054h,0b5efcdfch,06e9edd12h,016fc8907h,0d4d792f9h,0e29d0b50h,09b03116dh,0a45fd01ch,0c81765a4h,085035235h
+ DD 0b4b4b67ch,01fe2a9b2h,0e8020604h,0c1d10df0h,0bc8058d8h,09d64abfch,0712a0fbbh,08943b9b2h,03b3def04h,090eed914h,04ce775ffh,085ab3aa2h,07bbc9040h,0605fd4cah,0e2c75dfbh,08b34a564h
+ DD 010358560h,041ffc94ah,09e5c28aah,02d8a5072h,04cc7eb15h,0e915a0fch,08f6d0f5dh,0e9efab05h,0d19e9b91h,0dbab47a9h,00276154ch,08cfed745h,02cfede0dh,0154357aeh,019f5a4efh,0520630dfh
+ DD 0e382360fh,025759f7ch,088bf5857h,0b6db05c9h,06c58d46ch,02917d61dh,0fd20cb7ah,014f8e491h,011c20340h,0b68a727ah,0af7ccbb6h,00386f86fh,0fee09a20h,05c8bc6cch,0bb7eea35h,07d76ff4ah
+ DD 0db15be7ah,0a7bdebe7h,0d89f0302h,067a08054h,0c1193364h,056bf0ea9h,062837ebeh,0c8244467h,020d841b8h,032bd8e8bh,0dbb8a54fh,0127a0548h,063b20236h,083dd4ca6h,0203491fah,087714718h
+ DD 0aa8a5288h,04dabcaaah,0af23a1c9h,091cc0c8ah,03f220e0ch,034c72c6ah,01232144ah,0bcc20bdfh,0a20ede1bh,06e2f42dah,074a00515h,0c441f00ch,0734b8c4bh,0bf46a5b6h,07b56c9a4h,057409503h
+ DD 0e4585d45h,09f735261h,06734e642h,09231faedh,0be70ee6ch,01158a176h,07c3501bfh,035f1068dh,0a2d26115h,06beef900h,0ef0afee3h,0649406f2h,0bc2420a1h,03f43a60ah,0d5aee4ach,0509002a7h
+ DD 03ff3571bh,0b46836a5h,0837927c1h,024f98b78h,04533c716h,06254256ah,0d07ee196h,0f27abb0bh,05c6d5bfdh,0d7cf64fch,0f0cd7a77h,06915c751h,08798f534h,0d9f59012h,0f81d8b5fh,0772b0da8h
+ DD 02e03fa69h,01244260ch,03be1a374h,036cf0e3ah,0ef06b960h,06e7c1633h,0671f90f6h,0a71a4c55h,033c673dbh,07a941251h,073e8c131h,0c0bea510h,0d4f6c734h,061a8a699h,0341ed001h,025e78c88h
+ DD 08e2f7d90h,05c18acf8h,077be32cdh,0fdbf33d7h,0d2eb5ee9h,00a085cd7h,0b3201115h,02d702cfbh,085c88ce8h,0b6e0ebdbh,01e01d617h,023a3ce3ch,0567333ach,03041618eh,0157edb6bh,09dd0fd8fh
+ DD 0b57872b8h,027f74702h,0657d5fe1h,02ef26b4fh,057cf3d40h,095426f0ah,065a6067ah,0847e2ad1h,009996a74h,0d474d9a0h,02a26115ch,016a56acdh,0d16f4d43h,002a615c3h,0aadb85b7h,0cc3fc965h
+ DD 0ce07d1b0h,0386bda73h,058ad4178h,0d82910c2h,0cd2617f4h,0124f82cfh,0ef691770h,0cc2f5e8dh,0b8c30ccch,082702550h,01a8e575ah,07b856aeah,0b1ab9459h,0bb822fefh,0ec24e38eh,0085928bch
+ DD 0ba8f4b4dh,05d0402ech,000b4d58bh,0c07cd4bah,029227e7ah,05d8dffd5h,031bf386fh,061d44d0ch,0135e6f4dh,0e486dc2bh,0e79410efh,0680962ebh,0f10088b5h,0a61bd343h,0e2e28686h,06aa76076h
+ DD 08fb98871h,080463d11h,0bbc76affh,0cb26f5c3h,0fbe03614h,0d4ab8eddh,0c0cf2deeh,0c8eb579bh,0c93bae41h,0cc004c15h,03aeca3b2h,046fbae5dh,00f1e9ab1h,0671235cfh,09ec285c1h,0adfba934h
+ DD 0f216c980h,088ded013h,0f79e0bc1h,0c8ac4fb8h,0fb97a237h,0a29b89c6h,09922d8e7h,0b697b780h,0ddb945b5h,03142c639h,0e094c3a9h,0447b06c7h,072266c90h,0cdcb3642h,0a9385046h,0633aad08h
+ DD 0b57c6477h,0a36c936bh,0e94dbcc6h,0871f8b64h,0a591a67bh,028d0fb62h,0c1d926f5h,09d40e081h,0f2d84b5ah,03111eaf6h,0a565b644h,0228993f9h,02c83188bh,00ccbf592h,03df3e197h,0f87b30abh
+ DD 07642bca8h,0b8658b31h,052800f17h,01a032d7fh,079bf9445h,0051dcae5h,054a2e253h,0eba6b8eeh,0d4485692h,05c8b9cadh,08986e9beh,084bda40eh,02f0db448h,0d16d16a4h,0a14d4188h,08ec80050h
+ DD 098fa7aaah,0b2b26107h,0f073aa4eh,041209ee4h,0f2d6b19bh,0f1570359h,0fc577cafh,0cbe6868ch,032c04dd3h,0186c4bdch,0cfeee397h,0a6c35faeh,0f086c0cfh,0b4a1b312h,0d9461fe2h,0e0a5ccc6h
+ DD 01536189fh,0c32278aah,0ba6df571h,01126c55fh,0b194560eh,00f71a602h,0324bd6e1h,08b2d7405h,03738be71h,08481939eh,01a4d97a9h,0b5090b1ah,0f05ba915h,0116c65a3h,0aae448aah,021863ad3h
+ DD 0a7aae5d3h,0d24e2679h,00de5c1c4h,07076013dh,0bb05b629h,02d50f8bah,06e66efbbh,073c1abe2h,0f2488af7h,0efd4b422h,0663ba575h,0e4105d02h,053a69457h,07eb60a8bh,0c945973bh,062210008h
+ DD 077a50ec6h,0fb255478h,00a37a72ch,0bf0392f7h,04be18e7ah,0a0a7a19ch,025b1e0afh,090d8ea16h,0ef953f57h,07582a293h,0bdc5465ah,090a64d05h,0e2510717h,0ca79c497h,018cb641fh,0560dbb7ch
+ DD 04b66abfbh,01d8e3286h,059030900h,0d26f52e5h,05584941ah,01ee3f643h,0569f5958h,06d3b3730h,04789dba5h,09ff2a62fh,072b5c9b7h,091fcb815h,06c8f9a0eh,0f446cb7dh,039b7ecb5h,048f625c1h
+ DD 01c6219b8h,0babae801h,028ac2f23h,0e7a562d9h,026e20588h,0e1b48732h,0775af051h,006ee1cadh,0faff79f7h,0da29ae43h,0652ee9e0h,0c141a412h,0195f4bd0h,01e127f6fh,0072f34f8h,029c6ab4fh
+ DD 030448112h,07b7c1477h,0e4a38656h,082b51af1h,02f315010h,02bf2028ah,06ea88cd4h,0c9a4a01fh,0257e5818h,0f63e95d8h,0b4519b16h,0dd8efa10h,00da910bfh,0ed8973e0h,05c0fe4a9h,0ed49d077h
+ DD 0b7caee1eh,0ac3aac5eh,0a7f4da57h,01033898dh,05c6669b9h,042145c0eh,0c1aa2aa0h,042daa688h,01a1d885ah,0629cc15ch,0f4b76817h,025572ec0h,09c8f8f28h,08312e435h,081965490h,08107f8cdh
+ DD 06fa6110ch,0516ff3a3h,0fb93561fh,074fb1eb1h,08457522bh,06c0c9047h,06bb8bdc6h,0cfd32104h,0cc80ad57h,02d6884a2h,086a9b637h,07c27fc35h,0adf4e8cdh,03461baedh,0617242f0h,01d56251ah
+ DD 0c955bef4h,00b80d209h,006adb047h,0df02cad2h,05ec74feeh,0f0d7cb91h,01111ba44h,0d2503375h,0df53cb36h,09671755eh,03368551bh,054dcb612h,0c8a025a4h,066d69aach,0e77ef445h,06be946c6h
+ DD 0a995e094h,0719946d1h,0e51e04d8h,065e848f6h,06a1e3113h,0e62f3300h,0501de503h,01541c7c1h,0f4acfadeh,04daac9fah,044cd0b71h,00e585897h,00a51cd77h,0544fd869h,00031016dh,060fc20edh
+ DD 0a4276867h,058b404ech,034f34993h,046f6c3cch,0c636e5bdh,0477ca007h,07c458b47h,08018f5e5h,0e47b668fh,0a1202270h,0ee14f203h,0cef48ccdh,062ff9b4dh,023f98baeh,0c589edddh,055acc035h
+ DD 064db4444h,03fe712afh,0becdd480h,019e9d634h,0a930978ah,0e08bc047h,0a1280733h,02dbf24ech,02cd706b2h,03c0ae38ch,0359017b9h,05b012a5bh,072e0f5aeh,03943c38ch,057176fa3h,0786167eah
+ DD 0594881dch,0e5f9897dh,0cfb820c1h,06b5efad8h,0d55018deh,0b2179093h,00bac56ceh,039ad7d32h,02cfc0e81h,0b55122e0h,0f6d89daah,0117c4661h,0cb64fa09h,0362d01e1h,03e9c4dddh,06a309b4eh
+ DD 0abea49b1h,0fa979fb7h,010e2c6c5h,0b4b1d27dh,023afde7ah,0bd61c2c4h,09786d358h,0eb6614f8h,07f6f7459h,04a5d816bh,009360e7bh,0e431a44fh,0c309914ch,08c27a032h,0caede3d8h,0cea5d68ah
+ DD 03a0a3f95h,03668f665h,07ceba27bh,089369416h,0e4728fe9h,089981fadh,08a093562h,07102c8a0h,0235d21c8h,0bb80310eh,0befb7f7bh,0505e55d1h,012958a67h,0a0a90811h,04d851fefh,0d67e106ah
+ DD 0431dd80eh,0b84011a9h,073306cd9h,0eb7c7ccah,0d1b3b730h,020fadd29h,0fe37b3d3h,083858b5bh,0b6251d5ch,0bf4cd193h,01352d952h,01cca1fd3h,090fbc051h,0c66157a4h,089b98636h,07990a638h
+ DD 087dec0e1h,0e5aa692ah,0f7b39d00h,0010ded8dh,054cfa0b5h,07b1b80c8h,0a0f8ea28h,066beb876h,03476cd0eh,050d7f531h,0b08d3949h,0a63d0e65h,053479fc6h,01a09eea9h,0f499e742h,082ae9891h
+ DD 05ca7d866h,0ab58b910h,03adb3b34h,0582967e2h,0cceac0bch,089ae4447h,07bf56af5h,0919c667ch,060f5dcd7h,09aec17b1h,0ddcaadbch,0ec697b9fh,0463467f5h,00b98f341h,0a967132fh,0b187f1f7h
+ DD 0214aeb18h,090fe7a1dh,0741432f7h,01506af3ch,0e591a0c4h,0bb5565f9h,0b44f1bc3h,010d41a77h,0a84bde96h,0a09d65e4h,0f20a6a1ch,042f060d8h,0f27f9ce7h,0652a3bfdh,03b3d739fh,0b6bdb65ch
+ DD 0ec7fae9fh,0eb5ddcb6h,0efb66e5ah,0995f2714h,069445d52h,0dee95d8eh,009e27620h,01b6c2d46h,08129d716h,032621c31h,00958c1aah,0b03909f1h,01af4af63h,08c468ef9h,0fba5cdf6h,0162c429fh
+ DD 0753b9371h,02f682343h,05f1f9cd7h,029cab45ah,0b245db96h,0571623abh,03fd79999h,0c507db09h,0af036c32h,04e2ef652h,005018e5ch,086f0cc78h,0ab8be350h,0c10a73d4h,07e826327h,06519b397h
+ DD 09c053df7h,0e8cb5eefh,0b300ea6fh,08de25b37h,0c849cffbh,0db03fa92h,0e84169bbh,0242e43a7h,0dd6f958eh,0e4fa51f4h,0f4445a8dh,06925a77fh,0e90d8949h,0e6e72a50h,02b1f6390h,0c66648e3h
+ DD 0173e460ch,0b2ab1957h,030704590h,01bbbce75h,0db1c7162h,0c0a90dbdh,015cdd65dh,0505e399eh,057797ab7h,068434dcbh,06a2ca8e8h,060ad35bah,0de3336c1h,04bfdb1e0h,0d8b39015h,0bbef99ebh
+ DD 01711ebech,06c3b96f3h,0ce98fdc4h,02da40f1fh,057b4411fh,0b99774d3h,015b65bb6h,087c8bdf4h,0c2eef12dh,0da3a89e3h,03c7471f3h,0de95bb9bh,0d812c594h,0600f225bh,02b75a56bh,054907c5dh
+ DD 08db60e35h,0a93cc5f0h,0fa833319h,0743e3cd6h,0f81683c9h,07dad5c41h,09c34107eh,070c1e7d9h,0a6be0907h,00edc4a39h,086d0b7d3h,036d47035h,0272bfa60h,08c76da03h,00f08a414h,00b4a07eah
+ DD 045c1dd53h,0699e4d29h,0231debb5h,0cadc5898h,0a77f00e0h,0df49fcc7h,0a73e5a0eh,093057bbfh,0027a4cd1h,02f8b7ecdh,0c614011ah,0114734b3h,067677c68h,0e7a01db7h,07e273f4fh,089d9be5eh
+ DD 0089808efh,0d225cb2eh,0d59e4107h,0f1f7a27dh,08211b9c9h,053afc761h,0e6819159h,00361bc67h,07f071426h,02a865d0bh,0e7072567h,06a3c1810h,00d6bcabdh,03e3bca1eh,0408591bch,0a1b02bc1h
+ DD 031fba239h,0e0deee59h,098bd91d1h,0f47424d3h,0071a3c1dh,00f8886f4h,0a819233bh,03f7d41e8h,0cf6eb998h,0708623c2h,0609a287fh,086bb49afh,063c90762h,0942bb249h,055a9654bh,00ef6eea5h
+ DD 036f5defeh,05f6d2d72h,056f99176h,0fa9922dch,0f78ce0c7h,06c8c5eceh,0be09b55eh,07b44589dh,09ea83770h,0e11b3bcah,02ab71547h,0d7fa2c7fh,02a1ddcc0h,02a3dd6fah,05a7b7707h,009acb430h
+ DD 0649d4e57h,04add4a2eh,01917526eh,0cd53a2b0h,020b44ac4h,0c5262330h,0baa2c31dh,04028746ah,064291d4ch,051318390h,0ee5ad909h,0bf48f151h,07b185681h,0cce57f59h,04854d442h,07c3ac1b0h
+ DD 0c093c171h,065587dc3h,024f42b65h,0ae7acb24h,0955996cbh,05a338adbh,06051f91bh,0c8e65675h,028b8d0b1h,066711fbah,0b6c10a90h,015d74137h,03a232a80h,070cdd7ebh,06191ed24h,0c9e2f07fh
+ DD 0f79588c0h,0a80d1db6h,0b55768cch,0fa52fc69h,07f54438ah,00b4df1aeh,0f9b46a4fh,00cadd1a7h,01803dd6fh,0b40ea6b3h,055eaae35h,0488e4fa5h,0382e4e16h,09f047d55h,02f6e0c98h,0c9b5b7e0h
+ DD 095762649h,06b1bd2d3h,0c7aea3f6h,0a9604ee7h,06dc6f896h,03646ff27h,02860bad1h,09bf0e7f5h,07cb44b92h,02d92c821h,0aea9c182h,0a2f5ce63h,09154a5fdh,0d0a2afb1h,095801da6h,0482e474ch
+ DD 0b611c24bh,0c19972d0h,060a8f351h,01d468e65h,07bcf6421h,0eb758069h,088fbc491h,0ec9dd0eeh,0956c2e32h,05b59d2bfh,0dcddf94eh,073dc6864h,0bcee7665h,0fd5e2321h,05e9a06c4h,0a7b4f8efh
+ DD 07280f855h,0fba918ddh,08baec688h,0bbaac260h,033400f42h,0a3b3f00fh,066f2e6e4h,03d2dba29h,098509375h,0b6f71a94h,0cea423cch,08f33031fh,04807e6fbh,0009b8dd0h,05cdb954ch,05163cfe5h
+ DD 0cf41c6e8h,003cc8f17h,0037b925ch,0f1f03c2ah,066d2427ch,0c39c19cch,07b6c18e4h,0823d24bah,0901f0b4fh,032ef9013h,0f8941c2eh,0684360f1h,02c28092eh,00ebaff52h,0256c932fh,07891e4e3h
+ DD 0ac445e3dh,051264319h,08ea74381h,0553432e7h,067e9c50ah,0e6eeaa69h,062e628c7h,027ced284h,07a4afa57h,03f96d375h,0e484c150h,0de0a14c3h,038bd9923h,0364a24ebh,0e5177422h,01df18da0h
+ DD 0d8d38a9bh,0174e8f82h,0e7de1391h,02e97c600h,0a1c175ddh,0c5709850h,032ae5035h,0969041a0h,076a2086bh,0cbfd533bh,0d7c2e8feh,0d6bba71bh,0099dfb67h,0b2d58ee6h,0064a85d9h,03a8b342dh
+ DD 0522f9be3h,03bc07649h,0df1f49a8h,0690c075bh,03854ec42h,080e1aee8h,017689dc7h,02a7dbf44h,03faf4078h,0c004fc0eh,0df11862ch,0b2f02e9eh,0a0a1b7b3h,0f10a5e0fh,08936ec80h,030aca623h
+ DD 002f40d9ah,0f83cbf05h,02c318a4dh,04681c468h,00e9c2674h,098575618h,01847092eh,0be79d046h,078bd01e0h,0af1e480ah,072a51db9h,06dd359e4h,0e3afbab6h,062ce3821h,017733199h,0c5cee5b6h
+ DD 06ffd9fbbh,0e08b30d4h,036c610b7h,06e5bc699h,09ce262cfh,0f343cff2h,068b914c1h,0ca2e4e35h,016de36c5h,0011d64c0h,042e2b829h,0e0b10fddh,06685aaf8h,078942981h,0230ede97h,0e7511708h
+ DD 03b922bf8h,0671ed8fch,04c29b133h,0e4d8c0a0h,03b6e99c4h,087eb1239h,08793bebah,0aff3974ch,02c18df9bh,003749405h,091007139h,0c5c3a293h,0e37a0b95h,06a77234fh,0b661c96bh,002c29a21h
+ DD 0141ecf61h,0c3aaf1d6h,03bb22f53h,09195509eh,022d51357h,029597404h,0537bed60h,01b083822h,0e07289f0h,0cd7d6e35h,06dd86effh,01f94c48ch,0eb0f9cfah,0c8bb1f82h,01b2eb97dh,09ee0b7e6h
+ DD 034d74e31h,05a52fe2eh,03bf79ab6h,0a352c310h,0abfeeb8fh,097ff6c5ah,0f5c97305h,0bfbe8fefh,0a7904608h,0d6081ce6h,0c4fca249h,01f812f3ah,0b9e5e200h,09b24bc9ah,038012ee8h,091022c67h
+ DD 030a713a1h,0e83d9c5dh,084ef0f93h,04876e3f0h,0c1fbf928h,0c9777029h,0bce7d2a4h,0ef7a6bb3h,0dfa2a659h,0b8067228h,0d877a48fh,0d5cd3398h,0025d0f3fh,0bea4fd8fh,02eae7c2bh,0d67d2e35h
+ DD 0cc5f4394h,0184de7d7h,04536e142h,0b5551b5ch,0d34aa60ah,02e89b212h,0f50051d5h,014a96feah,00d12bb0bh,04e21ef74h,060b9677eh,0c522f020h,02df7731dh,08b12e467h,07b326d31h,039f80382h
+ DD 039024a94h,0dfb8630ch,097319452h,0aacb96a8h,0eda3867ch,0d68a3961h,077c4ffcah,00c58e2b0h,04da919fah,03d545d63h,0f15e2289h,0ef79b69ah,0808bab10h,054bc3d3dh,045f82c37h,0c8ab3007h
+ DD 07c4a658ah,0c12738b6h,040e72182h,0b3c47639h,08798e44fh,03b77be46h,017a7f85fh,0dc047df2h,05e59d92dh,02439d4c5h,0e8e64d8dh,0cedca475h,087ca9b16h,0a724cd0dh,0a5540dfeh,035e4fd59h
+ DD 0e4bcf6b1h,0f8c1ff18h,0295018fah,0856d6285h,03263c949h,0433f665ch,0a1f21409h,0a6a76dd6h,0cc7b4f79h,017d32334h,006720e4ah,0a1d03122h,081d9bed5h,0adb6661dh,011db15d1h,0f0d6fb02h
+ DD 01fb747d2h,07fd11ad5h,03033762bh,0ab50f959h,0fbefaf5ah,02a7e711bh,03fef2bbfh,0c7393278h,00df6f9beh,0e29fa244h,071efd215h,09092757bh,04f3d6fd9h,0ee60e311h,00acfb78bh,0338542d4h
+ DD 038961a0fh,044a23f08h,0986987cah,01426eadeh,04a863cc6h,036e6ee2eh,0628b8b79h,048059420h,07396e1deh,030303ad8h,038c5aad1h,05c8bdc48h,05c8f5066h,03e40e11fh,08d246bbdh,0abd6e768h
+ DD 023330a01h,068aa40bbh,0c34eafa0h,0d23f5ee4h,05de02c21h,03bbee315h,0d1d8dd06h,018dd4397h,0122d7b44h,03ba1939ah,0a33870d6h,0e6d3b40ah,01c4fe3f8h,08e620f70h,0d3a50cbfh,0f6bba1a5h
+ DD 0cfc0aee0h,04a78bde5h,0c08c50bdh,0847edc46h,0ad63c9b2h,0baa2439ch,010fc2acbh,0ceb4a728h,026da033dh,0a419e40eh,003e02683h,06cc3889dh,0fdccf725h,01cd28559h,08d13d208h,00fd7e0f1h
+ DD 01f0df9d4h,001b9733bh,0a2b5e4f3h,08cc2c5f3h,03a304fd4h,043053bfah,00a9f1aa7h,08e87665ch,0d73dc965h,0087f29ech,03e9023dbh,015ace455h,02bce28b4h,02370e309h,0b6b1e84ah,0f9723442h
+ DD 0b72d9f26h,0beee662eh,0f0e47109h,0b19396deh,0e13289d0h,085b1fa73h,054e58e32h,0436cf77eh,0e990ef77h,00ec833b3h,01b11fc25h,07373e3edh,00fc332ceh,0be0eda87h,08d7ea856h,0ced04970h
+ DD 07e977ca0h,0f85ff785h,0dfdd5d2bh,0b66ee8dah,0905af461h,0f5e37950h,0966d487ch,0587b9090h,032ba0127h,06a198a1bh,0141615ach,0a7720e07h,0996ef2f2h,0a23f3499h,0470bcb3dh,0ef5f64b4h
+ DD 092b8c559h,0a526a962h,069740a0fh,00c14aac0h,0a6bdc0a5h,00d41a9e3h,09c48aef4h,097d52106h,03e7c253bh,0cf16bd30h,047fdedc1h,0cc834b1ah,0373aab2eh,07362c6e5h,0c5f590ffh,0264ed85eh
+ DD 066d41870h,07a46d9c0h,04787ba09h,0a50c20b1h,0e3d44635h,0185e7e51h,031e2d8dch,0b3b3e080h,0a179e9d9h,0bed1e558h,074a76781h,02daa3f79h,03a40864fh,04372baf2h,04fe75cb5h,046900c54h
+ DD 0f76765d0h,0b95f171eh,095c87502h,04ad726d2h,04d7c99bdh,02ec769dah,0c36cdfa8h,05e2ddd19h,0a93e6deah,0c22117fch,093771123h,0e8a2583bh,0fa08a3a2h,0be2f6089h,08f0e1112h,04809d5edh
+ DD 0da7a095eh,03b414aa3h,026f5aaddh,09049acf1h,06be8b84ah,078d46a4dh,0b732b9b3h,0d66b1963h,0de6e9555h,05c2ac2a0h,0b5bd8770h,0cf52d098h,00fd28921h,015a15fa6h,08b27536dh,056ccb81eh
+ DD 09f4ccbb8h,00f0d8ab8h,0db221729h,0ed5f44d2h,000bed10ch,043141988h,01d735b8bh,0c94348a4h,029ef8479h,079f3e9c4h,0614c693fh,04c13a4e3h,08e143a14h,032c9af56h,0e29ac5c4h,0bc517799h
+ DD 02774856fh,005e17992h,06c1bf55fh,06e52fb05h,0e4f19e16h,0aeda4225h,0af5ccb26h,070f4728ah,0b2947f22h,05d2118d1h,0281d6fb9h,0c827ea16h,08cf0eabdh,08412328dh,003ef9dcfh,045ee9fb2h
+ DD 0bb937d63h,08e700421h,0cc4b37a6h,0df8ff2d5h,05ced7b68h,0a4c0d5b2h,0c7308f59h,06537c1efh,03b37f8e8h,025ce6a26h,0deebc6ceh,0170e9a9bh,08728d72ch,0dd037952h,0850154bch,0445b0e55h
+ DD 083a7337bh,04b7d0e06h,0ffecf249h,01e3416d4h,066a2b71fh,024840effh,0b37cc26dh,0d0d9a50ah,06fe28ef7h,0e2198150h,023324c7fh,03cc5ef16h,0769b5263h,0220f3455h,0a10bf475h,0e2ade2f1h
+ DD 0458d3671h,028cd20fah,02dc4847bh,01549722ch,0591941e3h,06dd01e55h,027128ccbh,00e6fbceah,03bef0262h,0ae1a1e6bh,08f54e103h,0fa8c472ch,072c052ech,07539c0a8h,05a3490e9h,0d7b27369h
+ DD 071684349h,0143fe1f1h,032e19b97h,036b4722eh,090980affh,0dc059227h,09e13d674h,0175c9c88h,06e6bfdb1h,0a7de5b22h,0bedb4b46h,05ea5b7b2h,0d34a6e44h,0d5570191h,0a24ff7e6h,0fcf60d2eh
+ DD 0677819e1h,0614a392dh,0aa5a29e8h,07be74c7eh,063c85f3fh,0ab50feceh,046cab337h,0aca2e2a9h,0122a6fe3h,07f700388h,0882a04a8h,0db69f703h,0cf7aed57h,09a77935dh,08d91c86fh,0df16207ch
+ DD 063ed9998h,02fca49abh,0a77ddf96h,0a3125c44h,024344072h,005dd8a86h,0fec3fb56h,0a023dda2h,00c743032h,0421b41fch,05e438639h,04f2120c1h,0c83c1b07h,0fb7cae51h,0cac2171ah,0b2370caah
+ DD 06cc820fbh,02eb2d962h,0b85a44bfh,059feee5ch,05b6598f0h,094620fcah,07e314051h,06b922caeh,0106bed4eh,0ff8745adh,0dfa1e9abh,0546e71f5h,01ec29487h,0935c1e48h,04d936530h,09509216ch
+ DD 085c9a2dbh,0c7ca3067h,06be8606fh,0d6ae5152h,0e14c651dh,009dbcae6h,09bc32f96h,0c9536e23h,034521b03h,0a90535a9h,0878756ffh,0f39c526ch,08aedf03ch,0383172ech,0efe0c034h,020a8075eh
+ DD 064026422h,0f22f9c62h,024b9d076h,08dd10780h,03bef2950h,0944c742ah,088a2b00bh,055b9502eh,086a09817h,0a59e14b4h,047bb4071h,0a39dd3ach,03be0592fh,055137f66h,0c9e63f5bh,007fcafd4h
+ DD 0346eb226h,0963652eeh,0ec2facb7h,07dfab085h,0691add26h,0273bf2b8h,0f2b46c44h,030d74540h,0f2c2d065h,005e8e73eh,0d42eeac9h,0ff9b8a00h,097209d22h,02fcbd205h,0de14ea2ch,0eb740ffah
+ DD 0a8aef518h,0c71ff913h,0fff4cfa2h,07bfc74bbh,0b6b36048h,01716680ch,09ef79af1h,0121b2cceh,0a01eb3d3h,0bff3c836h,05f79077bh,050eb1c6ah,0a004bbcfh,0a48c32d6h,07d64f61dh,047a59316h
+ DD 093102016h,06068147fh,094d12576h,012c5f654h,0c9bc6b91h,0efb071a7h,06e23ea95h,07c2da0c5h,0d4a1dd5dh,0f4fd45b6h,09122b13ch,03e7ad9b6h,0e6f57a48h,0342ca118h,006f8288fh,01c2e94a7h
+ DD 05a97d231h,099e68f07h,04d838758h,07c80de97h,005872727h,0bce0f5d0h,019c4d016h,0be5d95c2h,09c2492eeh,0921d5cb1h,0404d6fb3h,042192dc1h,032f988d3h,04c84dcd1h,0a17b8e85h,0de26d61fh
+ DD 0137c7408h,0c466dcb6h,036a266dah,09a38d7b6h,083bebf1bh,07ef5cb06h,00fd014e3h,0e5cdcbbfh,0f65965a0h,030aa376dh,0ebb3e95eh,060fe88c2h,066ee6f20h,033fd0b61h,03f41f0a0h,08827dcdbh
+ DD 00c56c690h,0bf8a9d24h,0ddb7641dh,040265dadh,03a6b662bh,0522b05bfh,0b1478c9bh,0466d1dfeh,01484469bh,0aa616962h,002df8f9fh,00db60549h,03cb8bf51h,0c37bca02h,021371ce8h,05effe346h
+ DD 0ff112c32h,0e8f65264h,07b971fb2h,08a9c736dh,07b75080dh,0a4f19470h,08839c59bh,0fc3f2c5ah,05aeb49c2h,01d6c777eh,0da1addfeh,0f3db034dh,05535affch,0d76fee5ah,0b92251fdh,00853ac70h
+ DD 08b2a29d5h,037e3d594h,04de00ddbh,028f1f457h,0f42c328bh,08083c1b5h,0e493c73bh,0d8ef1d8fh,041dc61bdh,096fb6260h,027ee2f8ah,0f74e8a9dh,02c946a5dh,07c605a80h,03839ccfdh,0eed48d65h
+ DD 03a29467ah,09894344fh,0c51eba6dh,0de81e949h,0a5e5c2f2h,0daea066bh,008c8c7b3h,03fc8a614h,006d0de9fh,07adff88fh,03b75ce0ah,0bbc11cf5h,0fbbc87d5h,09fbb7acch,07badfde2h,0a1458e26h
+ DD 0e039c256h,01cb43668h,07c17fd5dh,05f26fb8bh,079aa062bh,0eee426afh,0d78fbf04h,0072002d0h,0e84fb7e3h,04c9ca237h,00c82133dh,0b401d8a1h,06d7e4181h,0aaa52592h,073dbb152h,0e9430833h
+ DD 0be24319ah,0f92dda31h,0e095a8e7h,003f7d28bh,098782185h,0a52fe840h,029c24dbch,0276ddafeh,01d7a64ebh,080cd5496h,07f1dbe42h,0e4360889h,08438d2d5h,02f81a877h,085169036h,07e4d52a8h
+ DD 01d59715dh,019e3d5b1h,0d788983eh,0c7eaa762h,0abf1f248h,0e5a730b0h,0fae3fd83h,0fbab8084h,053765b2fh,065e50d21h,0fa127f3dh,0bdd4e083h,0397b1b10h,09cf3c074h,0b1b59fd3h,059f8090ch
+ DD 0615faa8fh,07b15fd9dh,0968554edh,08fa1eb40h,07aa44882h,07bb4447eh,0029fff32h,02bb2d0d1h,06caa6d2fh,0075e2a64h,022e7351bh,08eb879deh,09a506c62h,0bcd5624eh,0a87e24dch,0218eaef0h
+ DD 044ddfa35h,037e56847h,0dab3f747h,09ccfc5c5h,01ee96cf4h,09ac1df3fh,03b480b8fh,00c0571a1h,04b3a7b3ch,02fbeb3d5h,05dcdbb99h,035c03669h,0b2415b3ah,052a0f5dch,04413ed9ah,0d57759b4h
+ DD 03d30a2c5h,01fe647d8h,0f78a81dch,00857f77eh,0131a4a9bh,011d5a334h,029d393f5h,0c0a94af9h,0daa6ec1ah,0bc3a5c0bh,088d2d7edh,0ba9fe493h,0bb614797h,0bb4335b4h,072f83533h,0991c4d68h
+ DD 0d2f01cb3h,053258c28h,0d75db0b1h,093d6eaa3h,0e87d0db4h,0419a2b0dh,0d8fe8493h,0a1e48f03h,0c508b23ah,0f747faf6h,035d53549h,0f137571ah,0fcf9b838h,09f5e58e2h,0a7fd3cf5h,0c7186ceeh
+ DD 0e978a1d3h,077b868ceh,07ab92d04h,0e3a68b33h,087a5b862h,051029794h,03a61d41dh,05f0606c3h,06f9326f1h,02814be27h,0c6fe3c2eh,02f521c14h,0acdf7351h,017464d7dh,0777f7e44h,010f5f9d3h
+ DD 0269fb37dh,0ce8e616bh,07de62de5h,0aaf73804h,04fdd4153h,0aba11175h,03770b49bh,0515759bah,0aa423a61h,08b09ebf8h,0cd41fb92h,0592245a1h,09b4c8936h,01cba8ec1h,0af36710eh,0a87e91e3h
+ DD 03d34a2e3h,01fd84ce4h,0b43b5d61h,0ee3759ceh,0619186c7h,0895bc78ch,0cbb9725ah,0f19c3809h,0de744b1fh,0c0be21aah,060f8056bh,0a7d222b0h,0b23efe11h,074be6157h,00cd68253h,06fab2b4fh
+ DD 04bf1d725h,0ad33ea5fh,04f6c950fh,09c1d8ee2h,0a377af06h,0544ee78ah,094a113e1h,054f489bbh,0992fb7e8h,08f11d634h,0a2a44347h,00169a7aah,095020e00h,01d49d4afh,0e08e120bh,095945722h
+ DD 0a4d32282h,0b6e33878h,048020ae7h,0e36e029dh,037a9b750h,0e05847fbh,0b29e3819h,0f876812ch,0d23a17f0h,084ad138eh,0f0b3950eh,06d7b4480h,02fd67ae0h,0dfa8aef4h,052333af6h,08d3eea24h
+ DD 0b15d5acch,00d052075h,0bd815bc4h,0c6d9c79fh,0dfa36cf2h,08dcafd88h,038aa9070h,0908ccbe2h,0ba35afceh,0638722c4h,0fd6abf0bh,05a3da8b0h,0c9c335c1h,02dce252ch,065aa799bh,084e7f0deh
+ DD 0b99a72cbh,02101a522h,087618016h,006de6e67h,0e6f3653eh,05ff8c7cdh,0c7a6754ah,00a821ab5h,07cb0b5a2h,07e3fa52bh,0c9048790h,0a7fb121ch,006ce053ah,01a725020h,004e929b0h,0b490a31fh
+ DD 062dd61adh,0e17be47dh,06be01371h,0781a961ch,0dae3cbbah,01063bfd3h,07f73c9bah,035647406h,02736a129h,0f50e957bh,0ed13f256h,0a6313702h,03a19fcc5h,09436ee65h,0e7a4c8b6h,0cf2bdb29h
+ DD 0c5f95cd8h,0b06b1244h,0f4ab95f4h,0da8c8af0h,0b9e5836dh,01bae59c2h,03acffffch,007d51e7eh,0c2ccbcdah,001e15e6ah,08528c3e0h,03bc1923fh,0a49fead4h,043324577h,02aa7a711h,061a1b884h
+ DD 0700230efh,0f9a86e08h,0bd19adf8h,00af585a1h,0f55ad8f2h,07645f361h,046c3614ch,06e676223h,04e774d3fh,023cb257ch,0ac102d1bh,082a38513h,07b126aa5h,09bcddd88h,0eefd3ee4h,0e716998bh
+ DD 0fb167583h,04239d571h,0d16c8f8ah,0dd011c78h,069a27519h,0271c2895h,0d2d64b6ah,09ce0a3b7h,0d5ec6738h,08c977289h,08840ef6bh,0a3b49f9ah,09a453419h,0808c14c9h,00cf0a2d5h,05c00295bh
+ DD 01d4bcc76h,0524414fbh,0459a88f1h,0b07691d2h,0f70d110fh,077f43263h,0b7abf9f3h,064ada5e0h,05b544cf5h,0afd0f94eh,0fd2713feh,0b4a13a15h,0250c74f4h,0b99b7d6eh,020324e45h,0097f2f73h
+ DD 0affa8208h,0994b37d8h,0dc29aafch,0c3c31b0bh,07a3a607fh,03da74651h,0fe6955d6h,0d8e1b8c1h,0c8418682h,0716e1815h,07dc91d97h,0541d487fh,0c6996982h,048a04669h,083a6502eh,0f39cab15h
+ DD 0e68db055h,0025801a0h,0ba3338d5h,0f3569758h,0ee2afa84h,0b0c8c0aah,0fb6562d1h,04f6985d3h,0132ed17ah,0351f1f15h,0c04365feh,0510ed0b4h,0e5b1f066h,0a3f98138h,032df03dch,0bc9d95d6h
+ DD 019abd09eh,0a83ccf6eh,04ff17edbh,00b4097c1h,0d64a06ceh,058a5c478h,0544a58fdh,02ddcc3fdh,09e8153b8h,0d449503dh,07774179bh,03324fd02h,0dbd9120ch,0af5d47c8h,034fa94dbh,0eb860162h
+ DD 0972f07f4h,05817bdd1h,0d27bbcebh,0e5579e2eh,05f11e5a6h,086847a1fh,07c3cf048h,0b39ed255h,0a2f62e55h,0e1076417h,01bcf82a2h,06b9ab38fh,07aeb29f9h,04bb7c319h,017227a46h,0f6d17da3h
+ DD 00f968c00h,0ab53ddbdh,0000c880bh,0a03da7ech,06a9ad24dh,07b239624h,001ec60d0h,0612c0401h,0109f5df1h,070d10493h,080af7550h,0fbda4030h,0c6b9a9b3h,030b93f95h,0007d9418h,00c74ec71h
+ DD 06edb951fh,094175564h,07f22c282h,05f4a9d78h,0b38d1196h,0b7870895h,0a228ce7ch,0bc593df3h,06af3641ah,0c78c5bd4h,03d9b3dcch,07802200bh,08be33304h,00dc73f32h,061ffb79ah,0847ed87dh
+ DD 06d671192h,0f85c974eh,0de16f60fh,01e14100ah,095c38797h,045cb0d5ah,09b022da4h,018923bbah,0bbe7e86eh,0ef2be899h,0216067bfh,04a1510eeh,084d5ce3eh,0d98c8154h,0f92a2b90h,01af777f0h
+ DD 04ef65724h,09fbcb400h,03c0ca6feh,03e04a4c9h,055002994h,0fb3e2cb5h,05363ecabh,01f3a93c5h,03923555bh,01fe00efeh,01e1751eah,0744bedd9h,06ab69357h,03fb2db59h,0f5e6618bh,08dbd7365h
+ DD 0df1ea40eh,099d53099h,057d61e64h,0b3f24a0bh,0596eb812h,0d088a198h,05762940bh,022c8361bh,0f9c0d95ch,066f01f97h,08e43cdaeh,088461172h,0b72b15c3h,011599a7fh,0420d95cch,0135a7536h
+ DD 05f7ae2f6h,02dcdf0f7h,0d7fa6da2h,015fc6e1dh,0d1d441b6h,081ca829ah,004a106b6h,084c10cf8h,0a73fbbd0h,0a9b26c95h,04d8f6ee8h,07f24e0cbh,01e25a043h,048b45937h,0036f3dfeh,0f8a74fcah
+ DD 0c9f84296h,01ed46585h,03bc278b0h,07fbaa8fbh,06c4fcbd0h,0a8e96cd4h,073b60a5fh,0940a1202h,055a4aec8h,034aae120h,0dbd742f0h,0550e9a74h,0228c68abh,0794456d7h,0a4e25ec6h,0492f8868h
+ DD 0b2d8f398h,0682915adh,05b84c953h,0f13b51cch,05bb917d6h,0cda90ab8h,04ea3dee1h,04b615560h,00a52c1c8h,0578b4e85h,020b75fc4h,0eab1a695h,0aa0bb3c6h,060c14f3ch,0b8216094h,0220f448ah
+ DD 0b0e63d34h,04fe7ee31h,0a9e54fabh,0f4600572h,0d5e7b5a4h,0c0493334h,006d54831h,08589fb92h,06583553ah,0aa70f5cch,0e25649e5h,00879094ah,010044652h,0cc904507h,002541c4fh,0ebb0696dh
+ DD 0b9718710h,05a171fdeh,0f374a9f5h,038f1bed8h,0ba39bdc1h,0c8c582e1h,0908cc0ceh,0fc457b0ah,0883841e2h,09a187fd4h,038725381h,08ec25b39h,096f84395h,02553ed05h,06f6c6897h,0095c7661h
+ DD 04bdc5610h,0917ac85ch,0179eb301h,0b2885fe4h,08b78bdcch,05fc65547h,0e59e4699h,04a9fc893h,03ce299afh,0bb7ff0cdh,0adf38b20h,0195be9b3h,0d38ddb8fh,06a929c87h,0b21a51b9h,055fcc99ch
+ DD 0721a4593h,02b695b4ch,0768eaac2h,0ed1e9a15h,07489f914h,0fb63d71ch,078118910h,0f98ba31ch,09b128eb4h,080291373h,0d448af4ah,07801214eh,055418dd3h,0dbd2e22bh,0d3998242h,0effb3c0dh
+ DD 0c7bf3827h,0dfa6077ch,047f8238fh,0f2165bcbh,08564d554h,0fe37cf68h,00a81fb98h,0e5f825c4h,0ffed4d6fh,043cc4f67h,0b50a34b0h,0bc609578h,05041faf1h,08aa8fcf9h,0651773b6h,05659f053h
+ DD 06044d63bh,0e87582c3h,00cdb0ca0h,0a6089409h,0bfb2bcf6h,08c993e0fh,045985cfch,0fc64a719h,083dbedbah,015c4da80h,02be67df7h,0804ae112h,0a23defdeh,0da4c9658h,05156e0d3h,012002dddh
+ DD 05dd21b96h,0e68eae89h,0cf44624dh,08b99f28bh,01ec8897ah,00ae00808h,06712f76eh,0dd0a9303h,04e233de4h,096237522h,02b36a8a5h,0192445b1h,0023993d9h,0abf9ff74h,02aad4a8fh,021f37bf4h
+ DD 0f8bd2bbdh,0340a4349h,04868195dh,01d902cd9h,0e5fdb6f1h,03d27bbf1h,0124f9f1ch,07a5ab088h,0f7a09e03h,0c466ab06h,031f2c123h,02f8a1977h,0041b6657h,0da355dc7h,08ece2a7ch,0cb840d12h
+ DD 07db32675h,0b600ad9fh,007a06f1bh,078fea133h,0b31f6094h,05d032269h,083ec37aah,007753ef5h,09c0bea78h,003485aedh,0bc3f4524h,041bb3989h,0697f726dh,009403761h,0df394820h,06109beb3h
+ DD 03b6d1145h,0804111eah,0a8582654h,0b6271ea9h,024e66562h,0619615e6h,0d7b6ad9ch,0a2554945h,099bfe35fh,0d9c4985eh,07b51cdf6h,09770ccc0h,092881832h,07c327013h,0286b26d1h,08777d45fh
+ DD 0d847999dh,09bbeda22h,0c3525d32h,003aa33b6h,028a959a1h,04b7b96d4h,031e5d234h,0bb3786e5h,06961f247h,0aeb5d3ceh,002f93d3fh,020aa85afh,0d7a7ae4fh,09cd1ad3dh,0781adaa8h,0bf6688f0h
+ DD 07469ceadh,0b1b40e86h,0309fca48h,01904c524h,04b54bbc7h,09b7312afh,0593affa2h,0be24bf8fh,0bd98764bh,0be5e0790h,0a26e299eh,0a0f45f17h,06b8fe4c7h,04af0d2c2h,08ae8a3e6h,0ef170db1h
+ DD 029e0ccc1h,00e8d61a0h,060ad36cah,0cd53e87eh,0c8173822h,0328c6623h,0a496be55h,07ee1767dh,0648945afh,089f13259h,025c8009ch,09e45a5fdh,01f61ab8ch,0af2febd9h,08a275385h,043f6bc86h
+ DD 0f2142e79h,087792348h,0c6e6238ah,017d89259h,04a839d9bh,07536d2f6h,076a1fbdch,01f428fceh,00db06dfeh,01c109601h,050a3a3cch,0bfc16bc1h,09b30f41bh,0f9cbd9ech,000138cceh,05b5da0d6h
+ DD 056ef96a7h,0ec1d0a48h,0982bf842h,0b47eb848h,0ec3f700dh,066deae32h,0aa1181e0h,04e43c42ch,0d1a4aa2ah,0a1d72a31h,0c004f3ceh,0440d4668h,045fe8a7ah,00d6a2d3bh,0fb128365h,0820e52e2h
+ DD 025e51b09h,029ac5fcfh,02023d159h,0180cd2bfh,0a1ebf90eh,0a9892171h,07c132181h,0f97c4c87h,0c03dbb7eh,09f1dc724h,0018cbbe4h,0ae043765h,00767d153h,0fb0b2a36h,0249cbaebh,0a8e2f4d6h
+ DD 0d95ea168h,0172a5247h,02970764ah,01758fadah,01d978169h,0ac803a51h,0de77e01bh,0299cfe2eh,0b0a98927h,0652a1e17h,020014495h,02e26e1d1h,07175b56ah,07ae0af9fh,0d64b9f95h,0c2e22a80h
+ DD 0d90a060ah,04d0ff9fbh,0baf38085h,0496a27dbh,0da776bcfh,032305401h,0725f209eh,0b8cdcef6h,0436a0bbah,061ba0f37h,076860049h,0263fa108h,0da3542cfh,092beb98eh,0d5849538h,0a2d4d14ah
+ DD 012e9a1bch,0989b9d68h,05f6e3268h,061d9075ch,099ace638h,0352c6aa9h,0920f43ffh,0de4e4a55h,0d673c017h,0e5e4144ah,06f6e05eah,0667417aeh,0dcd1bd56h,0613416aeh,086693711h,05eb36201h
+ DD 03a1aa914h,02d7bc504h,076dc5975h,0175a1299h,03fc8125ch,0e900e0f2h,011198875h,0569ef68ch,063a113b4h,09012db63h,098835766h,0e3bd3f56h,076412deah,0a5c94a52h,0aa735e5ch,0ad9e2a09h
+ DD 0508b65e9h,0405a984ch,06df1a0d1h,0bde4a1d1h,0dfba80dah,01a9433a1h,09440ad2eh,0e9192ff9h,05099fe92h,09f649696h,00b27a54ah,025ddb65ch,0c590da61h,0178279ddh,0fbde681ah,05479a999h
+ DD 0013fe162h,0d0e84e05h,0632d471bh,0be11dc92h,0fc0e089fh,0df0b0c45h,04c144025h,004fb15b0h,013c99927h,0a61d5fc2h,03de2eb35h,0a033e9e0h,0b8dacbb4h,0f8185d5ch,08644549dh,09a88e265h
+ DD 054671ff6h,0f717af62h,05fa58603h,04bd4241bh,0e67773c0h,006fba40bh,06a2847e9h,0c1d933d2h,0689e2c70h,0f4f5acf3h,046bafd31h,092aab0e7h,03473f6e5h,0798d76aah,093141934h,0cc6641dbh
+ DD 0d31e535eh,0cae27757h,087c2ee11h,004cc43b6h,02e029ffah,08d1f9675h,0e4cc7a2ch,0c2150672h,08d68b013h,03b03c1e0h,0edf298f3h,0a9d6816fh,0a2804464h,01bfbb529h,05db22125h,095a52faeh
+ DD 00e1cb64eh,055b32160h,07e7fc9feh,0004828f6h,01bb0fb93h,013394b82h,035f1a920h,0b6293a2dh,0d145d2d9h,0de35ef21h,0bb8fa603h,0be6225b3h,032cf252dh,000fc8f6bh,0117cf8c2h,0a28e52e6h
+ DD 04c371e6dh,09d1dc89bh,036ef0f28h,0cebe0675h,0a4292f81h,05de05d09h,0353e3083h,0a8303593h,07e37a9bbh,0a1715b0ah,02b8faec3h,08c56f61eh,033c9b102h,052507431h,0a44431f0h,00130cefch
+ DD 0bd865cfbh,056039fa0h,0bc5f1dd7h,04b03e578h,0babe7224h,040edf2e4h,03a1988f6h,0c752496dh,0564beb6bh,0d1572d3bh,039a1c608h,00db1d110h,016f60126h,0568d1934h,0f354af33h,005ae9668h
+ DD 0c92544f2h,019de6d37h,0a35837d5h,0cc084353h,01a514eceh,0cbb6869ch,02e1d1066h,0b633e728h,0936c581ch,0f15dd69fh,07439c4f9h,096e7b8ceh,02e448a5bh,05e676f48h,0fd916bbbh,0b2ca7d5bh
+ DD 0f5024025h,0d55a2541h,0e4c2d937h,047bc5769h,00362189fh,07d31b92ah,0ef7816f9h,083f3086eh,0b587579ah,0f9f46d94h,030e76c5fh,0ec2d22d8h,0b000ffcfh,027d57461h,0364ffc2ch,0bb7e65f9h
+ DD 06652a220h,07c7c9477h,0d696c981h,061618f89h,089effff3h,05021701dh,07c314163h,0f2c8ff8eh,08efb4d3eh,02da413adh,0ce176d95h,0937b5adfh,02a67d51ch,022867d34h,018eb3ac9h,0262b9b10h
+ DD 0c43ff28bh,04e314fe4h,06a664e7ah,076476627h,0b7a565c2h,03e90e40bh,0c1acf831h,08588993ah,08f938829h,0d7b501d6h,03edd7d4ch,0996627eeh,090cd34c7h,037d44a62h,0f3833e8dh,0a8327499h
+ DD 04bf50353h,02e18917dh,0556765fbh,085dd726bh,093d5ab66h,054fe65d6h,0915c25feh,03ddbacedh,012f22e85h,0a799d9a4h,06d06f6bch,0e2a24867h,043ca1637h,0f4f1ee56h,061ece30ah,0fda2828bh
+ DD 0a2dee7a6h,0758c1a3eh,0734b2284h,0dcde2f3ch,04eaba6adh,0aba445d2h,076cee0a7h,035aaf668h,0e5aa049ah,07e0b04a9h,091103e84h,0e74083adh,040afecc3h,0beb183ceh,0ea043f7ah,06b89de9fh
+ DD 0fe67ba66h,00e299d23h,093cf2f34h,091450760h,097fcf913h,0f45b5ea9h,08bd7dddah,05be00843h,0d53ff04dh,0358c3e05h,05de91ef7h,0bf7ccdc3h,0b69ec1a0h,0ad684dbfh,0801fd997h,0367e7cf2h
+ DD 0b0dc8595h,00ca1f3b7h,09f1d9f2eh,027de4608h,0badd82a7h,01af3bf39h,065862448h,079356a79h,0f5f9a052h,0c0602345h,0139a42f9h,01a8b0f89h,0844d40fch,0b53eee42h,04e5b6368h,093b0bfe5h
+ DD 0c024789ch,05434dd02h,041b57bfch,090dca9eah,0243398dfh,08aa898e2h,0894a94bbh,0f607c834h,0c2c99b76h,0bb07be97h,018c29302h,06576ba67h,0e703a88ch,03d79efcch,0b6a0d106h,0f259ced7h
+ DD 0c8de610bh,00f893a5dh,067e223ceh,0e8c515fbh,04ead6dc5h,07774bfa6h,0925c728fh,089d20f95h,0098583ceh,07a1e0966h,093f2a7d7h,0a2eedb94h,04c304d4ah,01b282097h,0c077282dh,00842e3dah
+ DD 03b9e2d7bh,0e4d972a3h,0c48218ffh,07cc60b27h,084149d91h,08fc70838h,02f461ecch,05c04346fh,0614650a9h,0ebe9fdf2h,0c1f666ach,05e35b537h,088babc83h,0645613d1h,0c5e1c93eh,088cace3ah
+ DD 03de92e23h,0209ca375h,05fbbb6e3h,0ccb03cc8h,0d7b1487eh,0ccb90f03h,0c710941fh,0fa9c2a38h,06724ceedh,0756c3823h,0192d0323h,03a902258h,0ea5e038eh,0b150e519h,0c7427591h,0dcba2865h
+ DD 078890732h,0e549237fh,053fcb4d9h,0c443bef9h,0eb3480d6h,09884d8a6h,03048b186h,08a35b6a1h,065e9a90ah,0b4e44716h,0653006c0h,045bf380dh,04fe9ae3bh,08f3f820dh,0979a3b71h,0244a35a0h
+ DD 074cd06ffh,0a1010e9dh,0aca3eeach,09c17c7dfh,08063aa2bh,074c86cd3h,0734614ffh,08595c4b3h,0990f62cch,0a3de00cah,0ca0c3be5h,0d9bed213h,0df8ce9f5h,07886078ah,05cd44444h,0ddb27ce3h
+ DD 058926dddh,0ed374a66h,0908015b8h,0138b2d49h,0de1f7ab8h,0886c6579h,0c3020b7ah,0888b9aa0h,03a96e355h,0d3ec034eh,0f30fbe9ah,0ba65b0b8h,0ff21367ah,0064c8e50h,00b04b46eh,01f508ea4h
+ DD 0747c866ch,098561a49h,00518a062h,0bbb1e5feh,0ecdc3608h,020ff4e8bh,020184027h,07f55cdedh,0f38c85f0h,08d73ec95h,08bc3b8c3h,05b589fdfh,00f12b66fh,0be95dd98h,00e338e01h,0f5bd1a09h
+ DD 05e915918h,065163ae5h,086f8a46bh,06158d6d9h,0eeebf99ch,08466b538h,0bca477efh,0ca8761f6h,09ebbc601h,0af3449c2h,0e0c3ae2fh,0ef3b0f41h,05de63752h,0aa6c577dh,064682a51h,0e9166601h
+ DD 0fc15aa1eh,05a3097beh,0b54b0745h,040d12548h,0519a5f12h,05bad4706h,0a439dee6h,0ed03f717h,04a02c499h,00794bb6ch,0cffe71d2h,0f725083dh,00f3adcafh,02cad7519h,043729310h,07f68ea1ch
+ DD 0b7ffd977h,0e747c8c7h,080761a22h,0ec104c35h,05a3ffb83h,08395ebafh,0e4b63db7h,0fb3261f4h,0d883e544h,053544960h,08cc2eeb8h,013520d70h,0d3d65f99h,008f6337bh,0781cf95bh,083997db2h
+ DD 00dbd2c01h,0ce6ff106h,01f9ce934h,04f8eea6bh,00e993921h,0546f7c4bh,05e753fc7h,06236a324h,0a16022e9h,065a41f84h,043d1dbb2h,00c18d878h,02d4cef9ch,073c55640h,070444c74h,0a0428108h
+ DD 09afdfb3ch,068e4f15eh,05bdfb6dfh,049a56143h,05f823d97h,0a9bc1bd4h,0ea111c2ah,0bceb5970h,0b269bbc4h,0366b455fh,0e9bc5d62h,07cd85e1eh,04f18b086h,0c743c41ch,095294fb9h,0a4b40990h
+ DD 026ee8382h,09c7c581dh,0359d638eh,0cf17dcc5h,0b728ae3dh,0ee8273abh,0f821f047h,01d112926h,050491a74h,011498477h,0fde0dfb9h,0687fa761h,07ea435abh,02c258022h,091ce7e3fh,06b8bdb94h
+ DD 03bf834aah,04c5b5dc9h,04f6c7e4bh,004371819h,03736bcadh,0c284e00ah,021ae8f8dh,00d881118h,0f48c8e33h,0f9cf0f82h,0a1bf40dbh,0a11fd075h,0dc2733e5h,0dceab0deh,08e986bd7h,0c560a8b5h
+ DD 03929d097h,048dd1fe2h,092f188f1h,03885b290h,0da6fcdach,00f2ae613h,0b662a46ch,09054303eh,00738042ah,0b6871e44h,0bdaf6449h,098e6a977h,0d1c9df1bh,0d8bc0650h,036e098f9h,0ef3d6451h
+ DD 0b6d72d28h,003fbae82h,0f5d84080h,077ca9db1h,0a58efc1ch,08a112cffh,0c564cb4ah,0518d761ch,0f0d1b5ceh,069b5740eh,0e9eb1785h,0717039cch,022f53382h,03fe29f90h,06bc7c95ch,08e54ba56h
+ DD 0f7f91d0fh,09c806d8ah,0a82a5728h,03b61b0f1h,094d76754h,04640032dh,047d834c6h,0273eb5deh,07b4e4d53h,02988abf7h,0de401777h,0b7ce66bfh,0715071b3h,09fba6b32h,0ad3a1a98h,082413c24h
+ DD 0e0e8ad93h,05b7fc8c4h,05fab868dh,0b5679aeeh,02b3946f3h,0b1f9d2fah,05685b50ah,0458897dch,089d0caf3h,01e98c930h,078642e92h,039564c5fh,00dbdaf18h,01b77729ah,0579e82e6h,0f9170722h
+ DD 0e4515fa5h,0680c0317h,0fb0c790fh,0f85cff84h,06d2e0765h,0c7a82aabh,035c82b32h,07446bca9h,06d63184fh,05de607aah,0262803a6h,07c1a46a8h,0aebe8035h,0d218313dh,0c73c51f8h,092113ffdh
+ DD 012e7e46ch,04b38e083h,056126bd5h,069d0a37ah,073c07e04h,0fb3f324bh,08fda7267h,0a0c22f67h,04d2c7d8fh,08f2c0051h,0cbe2cae5h,0bc45ced3h,0a8f0f277h,0e1c6cf07h,01eb99a98h,0bc392312h
+ DD 03cc8ac85h,075537b7eh,0dd02753bh,08d725f57h,0b737df2fh,0fd05ff64h,0f6d2531dh,055fe8712h,06ab6b01ch,057ce04a9h,07cd93724h,069a02a89h,0cf86699bh,04f82ac35h,09cb4b232h,08242d3adh
+ DD 0d62105e5h,0713d0f65h,02d29be61h,0bb222bfah,06cfbef09h,0f2f9a79eh,0d5d6782fh,0fc24d8d3h,0d4129967h,05db77085h,0dc3c2a43h,0db81c3cch,005d8d9a3h,09d655fc0h,054298026h,03f5d057ah
+ DD 088c54694h,01157f56dh,09b09573eh,0b26baba5h,022adffd1h,02cab03b0h,0dd69f383h,060a412c8h,054b25039h,0ed76e98bh,0687e714dh,0d4ee67d3h,07b00b594h,087739648h,0c9ef709bh,0ce419775h
+ DD 01c203a40h,040f76f85h,0eafd8f91h,030d352d6h,095578dd2h,0af196d3dh,077cc3f3dh,0ea4bb3d7h,0b98e782bh,042a5bd03h,00624920dh,0ac958c40h,0fc56fcc8h,0b838134ch,089572e5eh,086ec4ccfh
+ DD 09be47be0h,069c43526h,0cb28fea1h,0323b7dd8h,03a6c67e5h,0fa5538bah,01d378e46h,0ef921d70h,03c4b880eh,0f92961fch,098940a67h,03f6f914eh,0fef0ff39h,0a990eb0ah,0f0eeff9ch,0a6c2920fh
+ DD 051b8d9a3h,0ca804166h,00ffb0db1h,042531bc9h,0aa82e7ceh,072ce4718h,0df574741h,06e199913h,0d5d36946h,0d5f1b13dh,0f68f0194h,08255dc65h,08710d230h,0dc9df4cdh,0138c1988h,03453c20fh
+ DD 089a6ef01h,09af98dc0h,09857df85h,04dbcc3f0h,05c1ad924h,034805601h,0d0493046h,040448da5h,04ee343e2h,0f629926dh,090e8a301h,06343f1bdh,040815b3fh,0efc93491h,0de8f66fbh,0f882a423h
+ DD 0e7db9f57h,03a12d5f4h,03c384c27h,07dfba38ah,06fc660b1h,07a904bfdh,02773b21ch,0eb6c5db3h,01cdfe049h,0c350ee66h,044540f29h,09baac0ceh,0a5ec6aadh,0bc57b6abh,00a7c1baah,0167ce8c3h
+ DD 053fb2b56h,0b23a03a5h,04e057f78h,06ce141e7h,089e490d9h,0796525c3h,0a31a7e75h,00bc95725h,01220fd06h,01ec56791h,0408b0bd6h,0716e3a3ch,0e8ebeba9h,031cd6bf7h,0bee6b670h,0a7326ca6h
+ DD 0cd090c43h,03d9f851ch,0f12c3988h,0561e8f13h,0904b7be4h,050490b6ah,00410737bh,061690ce1h,00f009052h,0299e9a37h,0f026092eh,0258758f0h,0fdfcdc0fh,09fa255f3h,0c0e1bcd2h,0dbc9fb1fh
+ DD 024651840h,035f9dd6eh,0a5c59abch,0dca45a84h,0ecca4938h,0103d396fh,0b97b3f29h,04532da0ah,01999a6bfh,0c4135ea5h,05e6bf2eeh,03aa9505ah,03f5be093h,0f77cef06h,0a943152eh,097d1a0f8h
+ DD 02e1c21ddh,02cb0ebbah,02c6797c4h,0f41b29fch,0b300101fh,0c6e17321h,0d0d79a89h,04422b0e9h,092f1bfc4h,049e4901ch,0e1e10ed9h,006ab1f8fh,0db2926b8h,084d35577h,0356e8ec2h,0ca349d39h
+ DD 0343bf1a9h,070b63d32h,037d1a6b1h,08fd3bd28h,0316865b4h,00454879ch,0c458efa2h,0ee959ff6h,09706dc3fh,00461dcf8h,0164e4b2eh,0737db0e2h,02f8843c8h,009262680h,07745e6f6h,054498bbch
+ DD 0a29e24afh,0359473fah,070aa87a1h,0fcc3c454h,000573aceh,0fd2c4bf5h,028dd1965h,0b65b514eh,02193e393h,0e46ae7cfh,0f5444d97h,060e9a4e1h,000ff38edh,0e7594e96h,00a0e0f02h,043d84d2fh
+ DD 0ee398a21h,08b6db141h,0e3bcc5beh,0b88a56aeh,0373460eah,00a1aa52fh,0160bb19bh,020da1a56h,065bf0384h,0fb54999dh,05d5a180eh,071a14d24h,021737b04h,0bc44db7bh,001dd8e92h,0d84fcb18h
+ DD 0fa44b479h,080de937bh,05c98fd4fh,053505499h,028f08727h,01edb12abh,0a5f3ef53h,04c58b582h,08327f246h,0bfb236d8h,04d7df320h,0c3a3bfaah,0b96024f2h,0ecd96c59h,07f4e0433h,0fc293a53h
+ DD 05acf6e10h,05341352bh,0afe652c3h,0c50343fdh,018577a7fh,04af3792dh,0af16823dh,0e1a4c617h,033425d0ah,09b26d0cdh,09b7bc47fh,0306399edh,0706bb20bh,02a792f33h,098111055h,031219614h
+ DD 087f5d28bh,0864ec064h,0962277fdh,011392d91h,0bb6aed5fh,0b5aa7942h,047e799d9h,0080094dch,0208ba19bh,04afa588ch,08512f284h,0d3e7570fh,002f5799ah,0cbae64e6h,0514b9492h,0deebe7efh
+ DD 0e5c298ffh,030300f98h,03678361fh,017f561beh,098cb9a16h,0f52ff312h,05562d490h,06233c3bch,092e3a2cbh,07bfa15a1h,0e6365119h,0961bcfd1h,02c8c53b1h,03bdd29bfh,0822844bah,0739704dfh
+ DD 07e7b754bh,07dacfb58h,0a806c9b9h,023360791h,023504452h,0e7eb88c9h,0852c1783h,02983e996h,0958d881dh,0dd4ae529h,0262c7b3ch,0026bae03h,0960b52d1h,03a6f9193h,092696cfbh,0d0980f90h
+ DD 0d5f30851h,04c1f428ch,02a4f6630h,094dfed27h,0fc5d48a4h,04df53772h,0933260ceh,0dd2d5a2fh,0d44cc7a5h,0574115bdh,0bd12533ah,04ba6b20dh,0243057c9h,030e93cb8h,014de320eh,0794c486ah
+ DD 0f21496e4h,0e925d4ceh,0ec696331h,0f951d198h,03e8d812fh,09810e2deh,0389294abh,0d0a47259h,00e3bab66h,0513ba2b5h,0abad306fh,0462caff5h,0af04c49eh,0e2dc6d59h,0e0b84b0bh,01aeb8750h
+ DD 02f7d0ca2h,0c034f12fh,0e06acf2fh,06d2e8128h,021facc2fh,0801f4f83h,0f40ef607h,0a1170c03h,07805a99ch,0fe0a1d4fh,0cc26aba5h,0bde56a36h,035531f40h,05b1629d0h,09afa6108h,0ac212c2bh
+ DD 015697be5h,030a06bf3h,02c63c7c1h,06f0545dch,07ccdadafh,05d8cb842h,0ac7015bbh,0d52e379bh,0f462c23eh,0c4f56147h,046bc24b0h,0d44a4298h,0e2856d4fh,0bc73d23ah,00832bcdfh,061cedd8ch
+ DD 099f241d7h,060953556h,0001a349dh,0ee4adbd7h,0aa89e491h,00b35bf6ah,0136f7546h,07f0076f4h,09264da3dh,0d19a18bah,062a7a28bh,06eb2d2cdh,08761c971h,0cdba941fh,0a3be4a5dh,01550518bh
+ DD 057d0b70ch,0d0e8e2f0h,0cd133ba3h,0eea8612eh,044416aech,0814670f0h,030775061h,0424db6c3h,016213fd1h,0d96039d1h,018a3478fh,0c61e7fa5h,0cb0c5021h,0a805bdcch,00cc616ddh,0bdd6f3a8h
+ DD 05d97f7e2h,006009667h,0af0bf4b6h,031db0fc1h,05491627ah,023680ed4h,07d741fb1h,0b99a3c66h,036b1ff92h,0e9bb5f55h,0512b388dh,029738577h,050fcf263h,0db8a2ce7h,06c4f7b47h,0385346d4h
+ DD 031631f9eh,0be86c5efh,003a57a29h,0bf91da21h,07b23f821h,0c3b1f796h,0770db354h,00f7d00d2h,0d8fe79dah,08ffc6c3bh,0d525c996h,0cc5e8c40h,0cfff632ah,04640991dh,067112528h,064d97e8ch
+ DD 002f1cd1eh,0c232d973h,01dd212a4h,0ce87eacbh,0e69802f7h,06e4c8c73h,01fffddbdh,012ef0290h,01bcea6e2h,0941ec74eh,03cb92cbbh,0d0b54024h,07e8f9d05h,0809fb9d4h,0f2992aaeh,03bf16159h
+ DD 0f8a7a838h,0ad40f279h,005615660h,011aea631h,0a01f6fa1h,0bf52e6f1h,03dc2aec9h,0ef046995h,0d8080711h,0785dbec9h,09fdedf76h,0e1aec60ah,0fa21c126h,0ece797b5h,005e52732h,0c66e898fh
+ DD 008811fdbh,039bb69c4h,02fc7f082h,08bfe1ef8h,0174f4138h,0c8e7a393h,0d58d1f98h,0fba8ad1dh,0bfd2fd5bh,0bc21d0ceh,06ee60d61h,00b839a82h,0afd22253h,0aacf7658h,0aae396b3h,0b526bed8h
+ DD 038564464h,0ccc1bbc2h,08c45bc73h,09e3ff947h,058188a78h,0cde9bca3h,0d73bf8f7h,0138b8ee0h,04123c489h,05c7e234ch,0fa643297h,066e69368h,039a15fa3h,00629eeeeh,0a9e2a927h,095fab881h
+ DD 0eafbb1e1h,0b2497007h,0e75b7a93h,0d75c9ce6h,0efb68d78h,03558352dh,0223f6396h,0a2f26699h,0e469b17ah,0eb911ecfh,0e72d3ec2h,062545779h,082cb113fh,08ea47de7h,04e1fa98dh,0ebe4b086h
+ DD 08cdfedb1h,0ec2d5ed7h,0fe211a74h,0a535c077h,011d244c5h,09678109bh,0be299a76h,0f17c8bfbh,0fb11fbc4h,0b651412eh,094ab3f65h,0ea0b5482h,00cf78243h,0d8dffd95h,0ce0361d4h,02e719e57h
+ DD 0304ddc5bh,09007f085h,04daba2eah,0095e8c6dh,03f9d28a9h,05a33cdb4h,0e2283003h,085b95cd8h,0b9744733h,0bcd6c819h,0fc7f5783h,029c5f538h,0d59038e4h,06c49b2fah,03bbe1018h,068349cc1h
+ DD 021830ee5h,0cc490c1dh,0e9bfa297h,036f9c4eeh,048de1a94h,058fd7294h,04e8f2cdch,0aadb13a8h,081313dbah,0515eaaa0h,0c2152dd8h,0c76bb468h,0a653dbf8h,0357f8d75h,0b14ac143h,0e4d8c4d1h
+ DD 0b055cb40h,0bdb8e675h,0977b5167h,0898f8e7bh,0b82fb863h,0ecc65651h,06d88f01fh,056544814h,0263a75a9h,0b0928e95h,01a22fcdah,0cfb6836fh,03f3bd37ch,0651d14dbh,0b6ad4664h,01d3837fbh
+ DD 0ff4f94abh,07c5fb538h,06d7fb8f2h,07243c712h,0a85c5287h,0ef13d60ch,04bb8dd1bh,018cfb7c7h,072908219h,082f9bfe6h,09d5144abh,035c4592bh,09cf4b42fh,052734f37h,08c60ddc4h,06bac55e7h
+ DD 094dea0f6h,0b5cd811eh,0e18cc1a3h,0259ecae4h,015e660f8h,06a0e836eh,00e02bff2h,06c639ea6h,07e1026fdh,08721b8cbh,063261942h,09e73b50bh,077f01da3h,0b8c70974h,08268f57fh,01839e6a6h
+ DD 05150b805h,0571b9415h,0f92c7097h,01892389eh,04a084b95h,08d69c18eh,0be5b495ch,07014c512h,01b07523ch,04780db36h,02c1c64fah,02f6219ceh,0602c105ah,0c38b81b0h,05dc8e360h,0ab4f4f20h
+ DD 0cf7d62d2h,020d3c982h,023ba8150h,01f36e29dh,092763f9eh,048ae0bf0h,01d3a7007h,07a527e6bh,0581a85e3h,0b4a89097h,0dc158be5h,01f1a520fh,0167d726eh,0f98db37dh,01113e862h,08802786eh
+ DD 036f09ab0h,0efb2149eh,04a10bb5bh,003f163cah,006e20998h,0d0297045h,01b5a3babh,056f0af00h,070880e0dh,07af4cfech,0be3d913fh,07332a66fh,07eceb4bdh,032e6c84ah,09c228f55h,0edc4a79ah
+ DD 0c55c4496h,0c37c7dd0h,025bbabd2h,0a6a96357h,0add7f363h,05b7e63f2h,02e73f1dfh,09dce3782h,0b2b91f71h,0e1e5a16ah,05ba0163ch,0e4489823h,0f6e515adh,0f2759c32h,08615eecfh,0a5e2f1f8h
+ DD 0abded551h,074519be7h,0c8b74410h,003d358b8h,00e10d9a9h,04d00b10bh,028da52b7h,06392b0b1h,00b75c904h,06744a298h,0a8f7f96ch,0c305b0aeh,0182cf932h,0042e421dh,09e4636cah,0f6fc5d50h
+ DD 0d64cc78ch,0795847c9h,09b6cb27bh,06c50621bh,0df8022abh,007099bf8h,0c04eda1dh,048f862ebh,0e1603c16h,0d12732edh,05c9a9450h,019a80e0fh,0b429b4fch,0e2257f54h,045460515h,066d3b2c6h
+ DD 0822e37beh,06ca4f87eh,0253bda4eh,073f237b4h,041190aebh,0f747f3a2h,0804cf284h,0f06fa36fh,0fc621c12h,00a6bbb6eh,040b80ec6h,05d624b64h,07ba556f3h,04b072425h,03e2d20a8h,07fa0c354h
+ DD 0e3229d41h,0e921fa31h,094531bd4h,0a929c652h,0a6d38209h,084156027h,06bdb97bdh,0f3d69f73h,016833631h,08906d19ah,003d51be3h,068a34c2eh,00e511cd8h,0cb59583bh,0fdc132a8h,099ce6bfdh
+ DD 0ffcdb463h,03facdaaah,034a38b08h,0658bbc1ah,0f1a9078dh,012a801f8h,06ab855deh,01567bcf9h,03572359bh,0e08498e0h,08659e68bh,0cf0353e5h,07d23807ch,0bb86e9c8h,02198e8a2h,0bc08728dh
+ DD 0453cadd6h,08de2b7bch,0bc0bc1f8h,0203900a7h,0a6abd3afh,0bcd86e47h,08502effbh,0911cac12h,0ec965469h,02d550242h,029e0017eh,00e9f7692h,065979885h,0633f078fh,04cf751efh,0fb87d449h
+ DD 0fc25419ah,0e1790e4bh,04bff3cfdh,036467203h,025b6e83fh,0c8db6386h,06cad6fd2h,06cc69f23h,06bc68bb9h,00219e45ah,0297f7334h,0e43d79b6h,0465dc97ch,07d445368h,02a0b949ah,04b9eea32h
+ DD 06102d021h,01b96c6bah,02f4461eah,0eaafac78h,0c49f19a8h,0d4b85c41h,0cf538875h,0275c28e4h,0dd2e54e0h,035451a9dh,00605618bh,06991adb5h,07b36cd24h,05b8b4bcdh,056f37216h,0372a4f8ch
+ DD 0a6a5da60h,0c890bd73h,0dc4c9ff0h,06f083da0h,0f0536e57h,0f4e14d94h,0aaec8243h,0f9ee1edah,08bdcf8e7h,0571241ech,00b041e26h,0a5db8271h,0e3fff040h,09a0b9a99h,07c271202h,0caaf21ddh
+ DD 04f0dd2e8h,0b4e2b2e1h,00a377ac7h,0e77e7c4fh,00d7a2198h,069202c3fh,028200eb8h,0f759b7ffh,0dcfe314eh,0c87526edh,053d5cf99h,0eb84c524h,0515138b6h,0b1b52aceh,023fca3f4h,05aa7ff8ch
+ DD 0b9791a26h,0ff0b13c3h,0cdd58b16h,0960022dah,057aad2deh,0dbd55c92h,0f30fe619h,03baaaaa3h,00d881efdh,09a4b2346h,046325e2ah,0506416c0h,0035c18d4h,091381e76h,0f27817b0h,0b3bb68beh
+ DD 05116f937h,015bfb8bfh,0c1268943h,07c64a586h,08419a2c8h,071e25cc3h,08335f463h,09fd6b0c4h,0e8ee0e0eh,04bf0ba3ch,0298c21fah,06f6fba60h,0ae66bee0h,057d57b39h,022672544h,0292d5130h
+ DD 0bab093b3h,0f451105dh,002839986h,0012f59b9h,03474a89ch,08a915802h,02de03e97h,0048c919ch,091071cd5h,0c476a2b5h,0034970a5h,0791ed89ah,0e1b7994bh,089bd9042h,0a1057ffdh,08eaf5179h
+ DD 0d551ee10h,06066e2a2h,0727e09a6h,087a8f1d8h,02c01148dh,000d08babh,0424f33feh,06da8e4f1h,0cf9a4e71h,0466d17f0h,03bf5cb19h,0ff502010h,0d062ecc0h,0dccf97d8h,081d80ac4h,080c0d9afh
+ DD 0033f2876h,0e87771d8h,07d5cc3dbh,0b0186ec6h,03bc9bc1dh,058e8bb80h,06f6ef60eh,04d1395cch,0186244a0h,0a73c62d6h,0110a5b53h,0918e5f23h,0741b7eabh,0ed4878cah,0dbe03e51h,03038d71ah
+ DD 0a93c3246h,0840204b7h,0a0b9b4cdh,021ab6069h,0b1d64218h,0f5fa6e2bh,0f3d56191h,01de6ad0eh,0ff1929c7h,0570aaa88h,0640e87b5h,0c6df4c6bh,0c65f0ccch,0de8a74f2h,0e6f6cc01h,08b972fd5h
+ DD 00b846531h,03fff36b6h,010a5e475h,0ba7e45e6h,04145b6c5h,084a1d10eh,05e046d9dh,0f1f7f91ah,044de90d7h,00317a692h,0f199c15eh,0951a1d4ah,0c9d73debh,091f78046h,0fab8224fh,074c82828h
+ DD 0e7560b90h,0aa6778fch,0a7e824ceh,0b4073e61h,0d642eba8h,0ff0d693ch,05dccef38h,07ce2e57ah,01df1ad46h,089c2c789h,0098346fdh,083a06922h,0da2fc177h,02d715d72h,085b6cf1dh,07b6dd71dh
+ DD 073fa9cb0h,0c60a6d0ah,0328bf5a9h,0edd3992eh,0832c8c82h,0c380ddd0h,0a2a0bf50h,0d182d410h,0d9a528dbh,07d9d7438h,0caf53994h,0e8b1a0e9h,00e19987ch,0ddd6e5feh,0190b059dh,0acb8df03h
+ DD 08300129fh,053703a32h,068c43bfdh,01f637662h,000e54051h,0bcbd1913h,07bf5a8c5h,0812fcc62h,029fb85dah,03f969d5fh,0694759e8h,072f4e00ah,0790726b7h,0426b6e52h,03bdbb209h,0617bbc87h
+ DD 097aee317h,0511f8bb9h,0e81536a8h,0812a4096h,03ac09b9bh,0137dfe59h,0ba8c9a7ah,00682238fh,0aeccb4bdh,07072ead6h,0692ba633h,06a34e9aah,06fff9d33h,0c82eaec2h,01d4d2b62h,0fb753512h
+ DD 01d7aadabh,01a0445ffh,0d5f6a67ch,065d38260h,091cfb26fh,06e62fb08h,05c7d91d6h,0ef1e0fa5h,033db72cdh,047e7c7bah,0fa7c74b2h,0017cbc09h,0f50a503ch,03c931590h,0616baa42h,0cac54f60h
+ DD 0b2369f0fh,09b6cd380h,023c76151h,097d3a70dh,09862a9c6h,05f9dd6fch,012312f51h,0044c4ab2h,0834a2ddch,0035ea0fdh,0cc7b826dh,049e6b862h,062fce490h,0b03d6883h,0b37e36e9h,062f2497ah
+ DD 0c6458293h,004b005b6h,0e8d10af7h,036bb5276h,08ee617b8h,0acf2dc13h,0b004b3d4h,0470d2d35h,0feeb1b77h,006790832h,085657f9ch,02bb75c39h,0c0f60004h,0d70bd4edh,0219b018bh,0fe797ecch
+ DD 0753aebcch,09b5bec2ah,0c939eca5h,0daf9f3dch,0d095ad09h,0d6bc6833h,0daa4d2fch,098abdd51h,08d168be5h,0d9840a31h,02325a23ch,0cf7c10e0h,07e6ecfafh,0a5c02aa0h,0b5bfdf18h,02462e7e6h
+ DD 0a0cc3f12h,0ab2d8a8bh,0bc672a29h,068dd485dh,0596f2cd3h,072039752h,0a0cf3d8dh,05d3eea67h,0e6602671h,0810a1a81h,014026c0ch,08f144a40h,076b50f85h,0bc753a6dh,0645cd4a4h,0c4dc21e8h
+ DD 0521d0378h,0c5262deah,005011c6fh,0802b8e0eh,00b4c19eah,01ba19cbbh,0ebf0aaech,021db64b5h,070342f9dh,01f394ee9h,01bc44a14h,093a10aeeh,03efd0baah,0a7eed31bh,01d154e65h,06e7c824eh
+ DD 09966e7eeh,0ee23fa81h,005b7920dh,064ec4aa8h,02d90aad4h,02d44462dh,0df277ad5h,0f44dd195h,0bb46b6a1h,08d6471f1h,0fd885090h,01e65d313h,013a977b4h,033a800f5h,00797e1efh,0aca9d721h
+ DD 0fcff6a17h,09a5a85a0h,01eca7ceeh,09970a3f3h,0c9504be3h,0bb9f0d6bh,0add24ee2h,0e0c504beh,077fcc2f4h,07e09d956h,065bb5fc4h,0ef1a5227h,08b9286aah,0145d4fb1h,06649028bh,066fd0c5dh
+ DD 01bf4581ch,098857cebh,0aca7b166h,0e635e186h,0659722ach,0278ddd22h,01db68007h,0a0903c4ch,048f21402h,0366e4589h,0b96abda2h,031b49c14h,0e0403190h,0329c4b09h,0d29f43feh,097197ca3h
+ DD 0274983d8h,08073dd1eh,055717c8fh,0da1a3bdeh,00361f9d1h,0fd3d4da2h,04c7de1ceh,01332d081h,0aa6d0e10h,09b7ef7a3h,0f54f1c4ah,017db2e73h,04cd35567h,0af3dffaeh,0e56f4e71h,0aaa2f406h
+ DD 07ace3fc7h,08966759eh,045a8d8c6h,09594eacfh,091834e0eh,08de3bd8bh,0548c0421h,0afe4ca53h,0e6ee81c6h,0fdd7e856h,06b891a3ah,08f671bebh,0fae63829h,0f7a58f2bh,09c11ac9fh,09ab186fbh
+ DD 010b5be76h,08d6eb369h,0fb040bcdh,0046b7739h,0cb73de88h,0ccb4529fh,0cf26be03h,01df0fefch,0bcfcd027h,0ad7757a6h,0bb3165cah,0a8786c75h,07e99a4d9h,0e9db1e34h,0b06c504bh,099ee86dfh
+ DD 0c15c9f0ah,05b7c2dddh,04295989eh,0df87a734h,003d08fdah,059ece47ch,0ad5fc702h,0b074d3ddh,051a03776h,020407903h,02a608007h,02bb1f77bh,0e1153185h,025c58f4fh,0766e6447h,0e6df62f6h
+ DD 0ed51275ah,0efb3d1beh,02f0f483fh,05de47dc7h,097c2bedfh,07932d98eh,00219f8a1h,0d5c11927h,0a73a294eh,09d751200h,09dc20172h,05f88434ah,0a26f506ah,0d28d9fd3h,09d1dcd48h,0a890cd31h
+ DD 070f4d3b4h,00aebaec1h,00ffc8d00h,0fd1a1369h,057d57838h,0b9d9c240h,068bac361h,045929d26h,025b15ca6h,05a2cd060h,06e474446h,04b3c83e1h,0ee1e5134h,01aac7578h,0c91e2f41h,0a418f5d6h
+ DD 0213ed68bh,06936fc8ah,0510a5224h,0860ae7edh,0def09b53h,063660335h,0cd79c98dh,0641b2897h,001110f35h,029bd38e1h,0648b1937h,079c26f42h,09d9164f4h,064dae519h,00265c273h,0d85a2310h
+ DD 04b07e2b1h,07173dd5dh,08d9ea221h,0d144c4cbh,01105ab14h,0e8b04ea4h,0fe80d8f1h,092dda542h,0cf03dce6h,0e9982fa8h,01a22cffch,08b5ea965h,03fad88c4h,0f7f4ea7fh,06a5ba95ch,062db773eh
+ DD 093f24567h,0d20f02fbh,0315257cah,0fd46c69ah,08bcab987h,00ac74cc7h,05ceca2f5h,046f31c01h,0888b219eh,040aedb59h,0e1fccd02h,0e50ecc37h,0911f816ch,01bcd9dadh,08db9b00ch,0583cc1ech
+ DD 0a483bf11h,0f3cd2e66h,0b1b2c169h,0fa08a6f5h,04be9fa28h,0f375e245h,05b6d011fh,099a7ffech,0c4ae62dah,06a3ebddbh,0374aef5dh,06cea00aeh,09d4d05bch,0ab5fb98dh,0d560f252h,07cba1423h
+ DD 0208490deh,049b2cc21h,0bcfb2879h,01ca66ec3h,01b6fb16fh,07f1166b7h,065fe5db3h,0fff63e08h,08b2610beh,0b8345abeh,039de3df4h,0b732ed80h,0211c32b4h,00e24ed50h,0848ff27dh,0d10d8a69h
+ DD 0ed4de248h,0c1074398h,010488927h,0d7cedaceh,085673e13h,0a4aa6bf8h,06daf30afh,0b46bae91h,0fcef7ad8h,007088472h,0d4b35e97h,061151608h,0dde29986h,0bcfe8f26h,0d5a34c79h,0eb84c4c7h
+ DD 0164e1214h,0c1eec55ch,0a147bb03h,0891be86dh,00ba96835h,09fab4d10h,0a5c1ae9fh,0bf01e9b8h,0b186ebc0h,06b4de139h,085b91bcah,0d5c74c26h,0c2d93854h,05086a99ch,0a7a9dfbch,0eed62a7bh
+ DD 076b7618ah,08778ed6fh,003b66062h,0bff750a5h,0b65186dbh,04cb7be22h,0cc3a6d13h,0369dfbf0h,07191a321h,0c7dab26ch,040ed718eh,09edac3f9h,0d0cfd183h,0bc142b36h,07c991693h,0c8af82f6h
+ DD 097ce0b2ah,0b3d1e4d8h,0c3a55cdfh,0e6d7c87fh,068b81afeh,035846b95h,0d3c239d8h,0018d12afh,001206e15h,02b2c6208h,0a3b882c6h,0e0e42453h,0a50162d5h,0854470a3h,07017a62ah,008157478h
+ DD 0820357c7h,018bd3fb4h,06f1458adh,0992039aeh,025b44aa1h,09a1df3c5h,0ed3d5281h,02d780357h,0c77ad4d4h,058cf7e4dh,0f9df4fc4h,0d49a7998h,01d71205eh,04465a8b5h,0649254aah,0a0ee0ea6h
+ DD 0ab7bd771h,04b5eeecfh,035c262b9h,06c873073h,03c9d61e7h,0dc5bd648h,0321460d2h,0233d6d54h,0fc195bcch,0d20c5626h,004d78b63h,025445958h,017ec8ef3h,0e03fcb3dh,046b8f781h,054b690d1h
+ DD 021230646h,082fa2c8ah,0084f418ch,0f51aabb9h,01a30ba43h,0ff4fbec1h,0743c9df7h,06a5acf73h,0d635b4d5h,01da2b357h,0ecd5c1dah,0c3de68ddh,0d61af0ddh,0a689080bh,0d665bf99h,0dea5938ah
+ DD 0fe637294h,00231d71ah,0a5a81cd8h,001968aa6h,0048e63b5h,011252d50h,06ca007e9h,0c446bc52h,096d6134bh,0ef8c50a6h,09e09a05ch,09361fbf5h,0dca3291ah,0f17f85a6h,0ff251a21h,0b178d548h
+ DD 0a4df3915h,087f6374bh,02fd5d608h,0566ce1bfh,07de35102h,0425cba4dh,058c5d5e2h,06b745f8fh,063122edfh,088402af6h,03b989a89h,03190f9edh,0ebba3156h,04ad3d387h,0c7c469a5h,0ef385ad9h
+ DD 03f642c29h,0b08281deh,0910ffb88h,020be0888h,0d5292546h,0f353dd4ah,08377a262h,03f1627deh,0eefcd638h,0a5faa013h,074cc77c3h,08f3bf626h,0a348f55eh,032618f65h,09fefeb9eh,05787c0dch
+ DD 0d9a23e44h,0f1673aa2h,04e10690dh,088dfa993h,02bf91108h,01ced1b36h,03af48649h,09193cecah,02d738fc5h,0fb34327dh,0975fee6ch,06697b037h,0c04079a5h,02f485da0h,02feaa1ach,02cdf5735h
+ DD 0bd55659eh,076944420h,04376090ch,07973e32bh,0163b591ah,086bb4fe1h,0c196f0cah,010441aedh,0045ad915h,03b431f4ah,0a4afacb1h,06c11b437h,071fdbbd8h,030b0c7dbh,0eda65acdh,0b642931fh
+ DD 09c92b235h,04baae6e8h,06b3993a1h,0a73bbd0eh,0693dd031h,0d06d60ech,07156881ch,003cab91bh,01db3574bh,0d615862fh,064bb061ah,0485b0185h,0a0181e06h,027434988h,0c1c0c757h,02cd61ad4h
+ DD 02ff9f403h,03effed5ah,062239029h,08dc98d8bh,01f17b70dh,02206021eh,0bf510015h,0afbec0cah,080130dfah,09fed7164h,08a02dcf5h,0306dc2b5h,0feb10fc0h,048f06620h,05a57cf51h,078d1e1d5h
+ DD 0192ef710h,0adef8c5ah,03b7431f9h,088afbd4bh,064250c9eh,07e1f7407h,0b58bec07h,06e31318dh,024f89b4eh,0fd4fc4b8h,048c36a2ah,065a5dd88h,0f024baa7h,04f1eccffh,0cba94650h,022a21cf2h
+ DD 042a554f7h,095d29deeh,0002ec4bah,0828983a5h,08badb73dh,08112a1f7h,0a27c1839h,079ea8897h,0d065fd83h,08969a5a7h,0b262a0bch,0f49af791h,0af2b5127h,0fcdea8b6h,0564c2dbch,010e913e1h
+ DD 0bc21ef51h,051239d14h,04ce57292h,0e51c3cebh,047bbcc3bh,0795ff068h,0bd7e11e6h,086b46e1eh,080041ef4h,00ea6ba23h,06262342eh,0d72fe505h,031d294d4h,08abc6dfdh,01278c2c9h,0bbe017a2h
+ DD 0b389328ah,0b1fcfa09h,0d01771b5h,0322fbc62h,060b045bfh,004c0d063h,010e52d01h,0db652edch,003ec6627h,050ef932ch,0c1ee50e3h,0de1b3b2dh,0dc37a90dh,05ab7bdc5h,031e33a96h,0fea67213h
+ DD 04f2999aah,06482b5cbh,0b8cbf0ddh,038476cc6h,0173405bbh,093ebfacbh,0e52369ech,015cdafe7h,0d935b7dbh,0d42d5ba4h,01c99a4cdh,0648b6004h,0a3b5545bh,0785101bdh,09dd67fafh,04bf2c38ah
+ DD 04442449ch,0b1aadc63h,033ad4fb8h,0e0e9921ah,0aa686d82h,05c552313h,0465d866ch,0dee635fah,018ee6e8ah,0bc3c224ah,0ed42e02fh,0eed748a6h,0d474cd08h,0e70f930ah,0fff24adfh,0774ea6ech
+ DD 0f3480d4ah,003e2de1ch,0bc8acf1ah,0f0d8edc7h,068295a9ch,0f23e3303h,0c546a97dh,0fadd5f68h,096f8acb1h,0895597adh,0671bdae2h,0bddd49d5h,021dd43f4h,016fcd528h,06619141ah,0a5a45412h
+ DD 0c360e25ah,08ce9b6bfh,0075a1a78h,0e6425195h,0481732f4h,09dc756a8h,05432b57ah,083c0440fh,0d720281fh,0c670b3f1h,0d135e051h,02205910eh,0db052be7h,0ded14b0eh,0c568ea39h,0697b3d27h
+ DD 0fb3ff9edh,02e599b9ah,017f6515ch,028c2e0abh,0474da449h,01cbee4fdh,04f364452h,0071279a4h,001fbe855h,097abff66h,05fda51c4h,03ee394e8h,067597c0bh,0190385f6h,0a27ee34bh,06e9fccc6h
+ DD 014092ebbh,00b89de93h,0428e240ch,0f17256bdh,093d2f064h,0cf89a7f3h,0e1ed3b14h,04f57841eh,0e708d855h,04ee14405h,003f1c3d0h,0856aae72h,0bdd7eed5h,0c8e5424fh,073ab4270h,03333e4efh
+ DD 0dda492f8h,03bc77adeh,078297205h,0c11a3aeah,034931b4ch,05e89a3e7h,09f5694bbh,017512e2eh,0177bf8b6h,05dc349f3h,008c7ff3eh,0232ea4bah,0f511145dh,09c4f9d16h,033b379c3h,0ccf109a3h
+ DD 0a1f25897h,0e75e7a88h,0a1b5d4d8h,07ac6961fh,008f3ed5ch,0e3e10773h,00a892dfbh,0208a54ech,078660710h,0be826e19h,0237df2c8h,00cf70a97h,0ed704da5h,0418a7340h,008ca33fdh,0a3eeb9a9h
+ DD 0169bca96h,049d96233h,02da6aafbh,004d286d4h,0a0c2fa94h,0c09606ech,023ff0fb3h,08869d0d5h,0d0150d65h,0a99937e5h,0240c14c9h,0a92e2503h,0108e2d49h,0656bf945h,0a2f59e2bh,0152a733ah
+ DD 08434a920h,0b4323d58h,0622103c5h,0c0af8e93h,0938dbf9ah,0667518efh,083a9cdf2h,0a1843073h,05447ab80h,0350a94aah,0c75a3d61h,0e5e5a325h,068411a9eh,074ba507fh,0594f70c5h,010581fc1h
+ DD 080eb24a9h,060e28570h,0488e0cfdh,07bedfb4dh,0c259cdb8h,0721ebbd7h,0bc6390a9h,00b0da855h,0de314c70h,02b4d04dbh,06c32e846h,0cdbf1fbch,0b162fc9eh,033833eabh,0b0dd3ab7h,09939b48bh
+ DD 0cb0c9c8ch,05aaa98a7h,081c4375ch,075105f30h,05ef1c90fh,0ceee5057h,0c23a17bfh,0b31e065fh,0d4b6d45ah,05364d275h,062ec8996h,0d363f3adh,04391c65bh,0b5d21239h,0ebb41b47h,084564765h
+ DD 037107c78h,020d18ecch,0570c2a66h,0acff3b6bh,09bd0d845h,022f975d9h,0ba178fa0h,0ef0a0c46h,076b6028eh,01a419651h,0248612d4h,0c49ec674h,07338af55h,05b6ac4f2h,07bee5a36h,006145e62h
+ DD 0e75746b5h,033e95d07h,0c40c78beh,01c1e1f6dh,0222ff8e2h,0967833efh,0b49180adh,04bedcf6ah,03d7a4c8ah,06b37e9c1h,06ddfe760h,02748887ch,0aa3a5bbch,0f7055123h,07bbb8e74h,0954ff225h
+ DD 097c3dfb9h,0c42b8ab1h,0cf168154h,055a549b0h,0c1b50692h,0ad6748e7h,06fc5cbcbh,02775780fh,0e1c9d7c8h,04eab80b8h,03fdbcd56h,08c69dae1h,09969eaceh,047e6b4fbh,0a705cb5ah,0002f1085h
+ DD 06d3fea55h,04e23ca44h,0f4810568h,0b4ae9c86h,02a62f27dh,047bfb91bh,0d9bac28ch,060deb4c9h,07de6c34ch,0a892d894h,04494587dh,04ee68259h,01a3f8a5bh,0914ee14eh,028700385h,0bb113eaah
+ DD 02115b4c9h,081ca03b9h,08908cad1h,07c163d38h,0aa18179ah,0c912a118h,0886e3081h,0e09ed750h,026f516cah,0a676e3fah,08e732f91h,0753cacf7h,0833da8b4h,051592aeah,04cbea8aah,0c626f42fh
+ DD 0a7b56eafh,0ef9dc899h,034ef7316h,000c0e52ch,0fe818a86h,05b1e4e24h,0c538be47h,09d31e20dh,03ed68974h,022eb932dh,07c4e87c4h,0e44bbc08h,00dde9aefh,04121086eh,0134f4345h,08e6b9cffh
+ DD 0711b0eb9h,096892c1fh,0780ab954h,0b905f2c8h,0a20792dbh,0ace26309h,00684e126h,0ec8ac9b3h,0b40a2447h,0486ad8b6h,09fe3fb24h,060121fc1h,01a8e3b3fh,05626fccfh,06ad1f394h,04e568622h
+ DD 0196aa5a1h,0da7aae0dh,01041b5fbh,0e0df8c77h,026b318b7h,0451465d9h,07ab136e9h,0c29b6e55h,071148463h,02c2ab48bh,064454a76h,0b5738de3h,05a03abe4h,054ccf9a0h,00427d58eh,0377c0296h
+ DD 02bb39c1fh,073f5f0b9h,0e608d8c5h,014373f2ch,000fbb805h,0dcbfd314h,083afdcfbh,0df18fb20h,042b3523fh,081a57f42h,087f650fbh,0e958532dh,08b0a7d7ch,0aa8dc8b6h,0150166beh,01b75dfb7h
+ DD 02d7d1413h,090e4f7c9h,09834f597h,067e2d6b5h,0a808c3e8h,04fd4f4f9h,0d5281ec1h,0af8237e0h,084687ceeh,025ab5fdch,0a5b26c09h,0c5ded6b1h,0c8ea7650h,08e4a5aech,014cc417fh,023b73e5ch
+ DD 03037bf52h,02bfb4318h,078c725d7h,0b61e6db5h,0bbb3e5d7h,08efd4060h,0dbac488eh,02e014701h,0360aa449h,0ac75cf9ah,079634d08h,0b70cfd05h,0fffb15efh,0a591536dh,0d07c106ch,0b2c37582h
+ DD 0f50225f9h,0b4293fdch,0b0e12b03h,0c52e175ch,0d0a8bf64h,0f649c3bah,0eb8ae3c6h,0745a8fefh,058321bc3h,030d7e5a3h,00bc4df48h,0b1732be7h,0e9ea5058h,01f217993h,03e4fd745h,0f7a71cdeh
+ DD 0894c5bbbh,086cc533eh,069d83082h,06915c7d9h,05815c244h,0a6aa2d05h,049b22ce5h,0aeeee592h,078135486h,089e39d13h,016b76f2fh,03a275c1fh,0e036e8f5h,0db6bcc1bh,05e4709f5h,04df69b21h
+ DD 02d0f39aah,0a188b250h,015a85947h,0622118bbh,0fde0f4fah,02ebf520fh,04860e539h,0a40e9f29h,022b57f0fh,07b6a51ebh,07e80644ah,0849a33b9h,01cf095feh,050e5d16fh,0ec55f002h,0d754b54eh
+ DD 0236f4a98h,05cfbbb22h,0066800bbh,00b0c59e9h,05a9a7774h,04ac69a8fh,0d6bec948h,02b33f804h,032e6c466h,0b3729295h,04e599c73h,068956d0fh,0155c31cch,0a47a249fh,0e1ce284eh,024d80f0dh
+ DD 0988baf01h,0cd821dfbh,0dbb16647h,0e6331a7dh,0094cb960h,01eb8ad33h,0c91bbca5h,0593cca38h,026567456h,0384aac8dh,0c04b6490h,040fa0309h,0dab6c8f6h,097834cd6h,03f91e55fh,068a7318dh
+ DD 0fc4d3157h,0a00fd04eh,02bf3bdeah,0b56f8ab2h,04fa57172h,0014f5648h,0450abdb3h,0948c5860h,00ebd4f08h,0342b5df0h,00e82938eh,03e5168cdh,0b0df5dd0h,07aedc1ceh,0e5732516h,06bbbc6d9h
+ DD 0605daaa6h,0c7bfd486h,0bb9a6c9eh,046fd72b7h,0a124fb89h,0e4847fb1h,0a2d8ffbch,075959cbdh,0c8a588eeh,042579f65h,0b80b499dh,0368c92e6h,0999a5df1h,0ea4ef6cdh,0936fe604h,0aa73bb7fh
+ DD 06457d188h,0f347a70dh,08b7a388bh,086eda86bh,00ccd6013h,0b7cdff06h,0d0053fb2h,0beb1b6c7h,099240a9fh,00b022387h,0776189b2h,01bbb384fh,09066193ah,08695e71eh,006ffac7eh,02eb50097h
+ DD 04a7d2caah,00654a9c0h,0a5aaa290h,06f3fb3d1h,0ff476e8fh,0835db041h,0c42295e4h,0540b8b0bh,005e214f5h,0a5c73ac9h,056a0b638h,09a74075ah,0ce9e680bh,02e4b1090h,06b8d9afah,057a5b479h
+ DD 026bfe65ch,00dca48e7h,07290c307h,0097e391ch,06669e72eh,0683c462eh,0062559ach,0f505be1eh,0e3a3035ah,05fbe3ea1h,09cd50da8h,06431ebf6h,01f6407f2h,0fd169d5ch,060fce6b8h,08d838a95h
+ DD 0650006f0h,02a2bfa7fh,050c0fbb2h,0dfd7dad3h,0ccf9ad96h,092452495h,0d95635f9h,0183bf494h,04a7bd989h,002d5df43h,0a5431095h,0505385cch,0fd43f53eh,0dd98e67dh,0500c34a9h,0d61e1a6ch
+ DD 04a8a3d62h,05a4b46c6h,0247743d2h,08469c4d0h,088f7e433h,02bb3a13dh,001be5849h,062b23a10h,0a63d1a4ch,0e83596b4h,07d183f3eh,0454e7feah,017afb01ch,0643fce61h,01c4c3638h,04e65e5e6h
+ DD 0ef74c45bh,041d85ea1h,0ae328506h,02cfbfa66h,03ada7da9h,098b078f5h,0ec752fbbh,0d985fe37h,05a0148b4h,0eece68feh,02d78136dh,06f9a55c7h,0d2b729ceh,0232dccc4h,090aafbc4h,0a27e0dfdh
+ DD 012b4603eh,096474452h,06b706d14h,0a876c551h,069a9d412h,0df145fcfh,02d479c34h,0e2ab75b7h,01a23ff97h,012df9a76h,05d359d10h,0c6138992h,0fa835f22h,06e51c7aeh,0c0fcc4d9h,069a79cb1h
+ DD 0594cc7e1h,0f57f350dh,03350ab79h,03079ca63h,09aff594ah,0226fb614h,06d59a62bh,035afec02h,006ed2c6eh,09bee46f4h,07d939a57h,058da1735h,08fd1797eh,044c50402h,05ccea6cah,0d8853e7ch
+ DD 0a35fcd5fh,04065508dh,0495ccaebh,08965df8ch,012e1a962h,00f2da850h,0c1cf1cc4h,0ee471b94h,00a08fb75h,0cef19bc8h,081de3591h,0704958f5h,03aef4f88h,02867f8b2h,0ea9f9a5fh,08d749384h
+ DD 08c9049f4h,01b385537h,07b92d8b6h,05be948f3h,0b6e2bd6bh,0d96f725dh,0958c454dh,037a222bch,08809bf61h,0e7c61abbh,01346f18dh,046f07fbch,0e87c0d1ch,0fb567a7ah,07ef3d07ah,084a461c8h
+ DD 0d9278d98h,00a5adce6h,09dfc73e1h,024d94813h,0054321c3h,04f3528b6h,0692ea706h,02e03fddeh,047b533c0h,010e60619h,02ca3c055h,01a8bc73fh,01bb62b8fh,0ae58d4b2h,0584a24e3h,0b2045a73h
+ DD 0bd76e195h,03ab3d5afh,06938a810h,0478dd1adh,06ee3d5cbh,06ffab393h,022b361e4h,0dfb693dbh,051dbf1a7h,0f9694496h,008a2e762h,0cab4b4efh,0d39bba9ah,0e8c92f25h,0f1464d96h,0850e61bch
+ DD 0dc09508bh,0b7e830e3h,074317655h,0faf6d2cfh,0df690355h,072606cebh,0d0c3ded6h,048bb92b3h,05c7cf892h,065b75484h,0d5d5f01fh,0f6cd7ac9h,096401d69h,0c2c30a59h,0ed921878h,091268650h
+ DD 0b78c558fh,0380bf913h,0c8afdaa9h,043c0baebh,054f169d3h,0377f61d5h,0ae5ff20bh,0f8da07e3h,0a8a90ea8h,0b676c49dh,083a29b21h,081c1ff2bh,02ad8d276h,0383297ach,0ba89f982h,03001122fh
+ DD 06718e448h,0e1d794beh,07c3e6e13h,0246c1482h,05d26b5efh,056646ef8h,088069cddh,080f5091eh,0724bdd38h,0c5992e2fh,08471e8c7h,002e915b4h,00d0ff2a9h,096ff320ah,04384d1a0h,0bf886487h
+ DD 0c93f72d6h,0bbe1e6a6h,0cad800eah,0d5f75d12h,0e7acf117h,0fa40a09fh,07581a355h,032c8cdd5h,07023c499h,074221992h,038ec3901h,0a8afe5d7h,0a90e83f0h,05691afcbh,00b8f8each,041bcaa03h
+ DD 08d2668d5h,0e38b5ff9h,07ad81965h,00715281ah,003c6ce11h,01bc8fc7ch,08b650436h,0cbbee6e2h,00cdb9808h,006b00fe8h,0fe3ed315h,017d6e066h,04d0b5018h,02e9d38c6h,0844dcaefh,0ab8bfd56h
+ DD 0513aed8bh,042894a59h,0314bd07ah,0f77f3b6dh,08e42b582h,0bbdecb8fh,0d2390fe6h,0f10e2fa8h,062a2f201h,0efb95022h,050ee32b0h,04d59ea50h,06da789a8h,0d87f7728h,0f79492c4h,0cf98a2cfh
+ DD 0720943c2h,0f9577239h,03990b9d0h,0ba044cf5h,095f2884ah,05aa8e823h,00278a0afh,0834de6edh,05f25bd12h,0c8e1ee9ah,06f7ab271h,09259ceaah,077d00b76h,07e6d97a2h,0a437832ah,05c0c6eeah
+ DD 05606b81dh,05232c20fh,00d991ee5h,0abd7b375h,08632d951h,04d2bfe35h,098ed9364h,078f85146h,0f30c3282h,0951873f0h,0a789230bh,00da8ac80h,05398967fh,03ac7789ch,0bdda0fb5h,0a69b8f7fh
+ DD 06add8545h,0e5db7717h,072c49b66h,01b71cb66h,068421d77h,0d8560739h,083e3afeah,003840fe8h,01ec69977h,0b391dad5h,0307f6726h,0ae243fb9h,0e8ca160ch,0c88ac87bh,04ce355f4h,05174ccedh
+ DD 0e58ba37dh,098a35966h,07817335dh,0fdcc8da2h,083fbc7bfh,05b752830h,0d9c96984h,068e419d4h,002a40380h,0409a39f4h,01fe977bch,088940fafh,08f8edea6h,0c640a94bh,0ed11547dh,01e22cd17h
+ DD 059ffc3e2h,0e28568ceh,0c1dee4e7h,060aa1b55h,0837cb363h,0c67497c8h,0105a2bf2h,006fb438ah,0500d8e20h,030357ec4h,00670db10h,01ad9095dh,0c73b7cfdh,07f589a05h,0880d6d28h,0f544607dh
+ DD 0a20ef103h,017ba93b1h,06ba6577bh,0ad859130h,06fa214a0h,065c91cf6h,027990da5h,0d7d49c6ch,020bb569dh,0ecd9ec8dh,0eeffbc33h,0bd4b2502h,06bed0467h,02056ca5ah,05b63728ch,07916a1f7h
+ DD 053a4f566h,0d4f9497dh,097b56810h,089734664h,00494a621h,0f8e1da74h,08d011c68h,082546a93h,0c61ac162h,01f3acb19h,0abad0d3eh,052f8fa9ch,0b4b7ea43h,015356523h,0ae608125h,05a16ad61h
+ DD 04faed184h,0b0bcb87fh,05029f45fh,05f236b1dh,00bc6b1fch,0d42c7607h,068aefce3h,0c644324eh,05c5d8446h,08e191d59h,013ae1979h,0c0208077h,03ba59cc7h,0adcaee55h,0a2cb81bah,020ed6d6bh
+ DD 0b6efcffch,00952ba19h,097c0b87ch,060f12d68h,09caa30bch,04ee2c7c4h,097fbff4eh,0767238b7h,0501b5d92h,0ebc73921h,0c2a37737h,03279e3dfh,06d197543h,09fc12bc8h,00a40db4eh,0fa94dc6fh
+ DD 0530ccbbdh,07392b41ah,0ea823525h,087c82146h,005d98d0ch,0a52f984ch,05ef6974ch,02ae57d73h,03042a6ddh,09377f7bfh,019647a64h,0b1a007c0h,00cca9767h,0faa9079ah,0f68f72d5h,03d81a25bh
+ DD 0ff81578eh,0752067f8h,09045447dh,078622150h,00505aa6fh,0c0c22fcfh,06bed1c77h,01030f0a6h,01f0bd739h,031f29f15h,0e6debe85h,02d7989c7h,08e677e98h,05c070e72h,006e81fd5h,00a817bd3h
+ DD 0b0f2ac95h,0c110d830h,0ab20e64eh,048d0995ah,07729cd9ah,00f3e00e1h,0dd556946h,02a570c20h,04e86214dh,0912dbcfdh,0cf615498h,02d014ee2h,03530d76eh,055e2b1e6h,0fd0fd6d1h,0c5135ae4h
+ DD 0d4f3049fh,00066273ah,0e7087477h,0bb8e9893h,014c6e5fdh,02dba1ddbh,051f57e6ch,0dba37886h,05a72f2cfh,05aaee0a6h,07bea5642h,01208bfbfh,067872c37h,0f5c6aa3bh,043f93224h,0d726e083h
+ DD 0061f1658h,01854daa5h,0df0cd2b3h,0c0016df1h,0833d50deh,0c2a3f23eh,0bbbd3017h,073b681d2h,03ac343c0h,02f046dc4h,085716421h,09c847e7dh,00917eed4h,0e1e13c91h,063a1b9c6h,03fc9eebdh
+ DD 07fe02299h,00f816a72h,0294f3319h,06335ccc2h,04745c5beh,03820179fh,0922f066eh,0e647b782h,002cafb8ah,0c22e49deh,0fcc2eccch,0299bc2ffh,06e0e8282h,09a8feea2h,0fe893205h,0a627278bh
+ DD 07933e47bh,0a7e19733h,02e766402h,0f4ff6b13h,098440d9fh,0a4d8be0ah,038938808h,0658f5c2fh,0c95b3b3eh,090b75677h,03137b6ffh,0fa044269h,043c47c29h,0077b039bh,08a6445b2h,0cca95dd3h
+ DD 02333fc4ch,00b498ba4h,0f736a1b1h,0274f8e68h,05f1d4b2eh,06ca348fdh,0a8f10199h,024d3be78h,0ca14f530h,08535f858h,05b982e51h,0a6e7f163h,036e1bf62h,0847c8512h,003448418h,0f6a7c58eh
+ DD 0f9374ab6h,0583f3703h,06e564145h,0864f9195h,022526d50h,033bc3f48h,01262a496h,09f323c80h,03f046a9ah,0aa97a7aeh,0df8a039ah,070da183eh,052aa0ba6h,05b68f71ch,021459c2dh,09be0fe51h
+ DD 0cbc613e5h,0c1e17eb6h,0497ea61ch,033131d55h,0af7eded5h,02f69d39eh,0de6af11bh,073c2f434h,0a4a375fah,04ca52493h,0b833c5c2h,05f06787ch,03e6e71cfh,0814e091fh,08b746666h,076451f57h
+ DD 0694db7e0h,080f9bdefh,0b9fcddc6h,0edca8787h,003b8dce1h,051981c34h,070e10ba1h,04274dcf1h,06def6d1ah,0f72743b8h,0ebdb1866h,0d25b1670h,0050c6f58h,0c4491e8ch,087fbd7f5h,02be2b2abh
+ DD 0d111f8ech,03e0e5c9dh,0b7c4e760h,0bcc33f8dh,0bd392a51h,0702f9a91h,0c132e92dh,07da4a795h,00bb1151bh,01a0b0ae3h,002e32251h,054febac8h,0694e9e78h,0ea3a5082h,0e4fe40b8h,0e58ffec1h
+ DD 0d1e0cf9eh,0f85592fch,0c0e7b2e8h,0dea75f0dh,0c135584eh,0c04215cfh,02f57092ah,0174fc727h,0eb930beah,0e7277877h,05eb02a5ah,0504caccbh,0f5241b9bh,0f9fe08f7h,08d5ca954h,0e7fb62f4h
+ DD 029c4120bh,0fbb8349dh,0c0d0d915h,09f94391fh,05410ba51h,0c4074fa7h,0150a5911h,0a66adbf6h,034bfca38h,0c164543ch,0b9e1ccfch,0e0f27560h,0e820219ch,099da0f53h,0c6b4997ah,0e8234498h
+ DD 09d4c5423h,0cfb88b76h,0b0521c49h,09e56eb10h,0be8700a1h,0418e0b5eh,0f93cb58ah,000cbaad6h,0d92a5e67h,0e923fbdeh,01f347f11h,0ca4979ach,06bc0585bh,089162d85h,0ac3c70e3h,0dd6254afh
+ DD 0516e19e4h,07b23c513h,0c5c4d593h,056e2e847h,05ce71ef6h,09f727d73h,0f79a44c5h,05b6304a6h,03ab7e433h,06638a736h,0fe742f83h,01adea470h,05b7fc19fh,0e054b854h,0ba1d0698h,0f935381ah
+ DD 0799e9a74h,0546eab2dh,0a949f729h,096239e0eh,07090055ah,0ca274c6bh,09020c9b0h,0835142c3h,0a2e8807fh,0a405667ah,01aa3d39eh,029f2c085h,042fc72f5h,0cc555d64h,0fbeacb3ch,0e856e0e7h
+ DD 0918e4936h,0b5504f9dh,0b2513982h,065035ef6h,06f4d9cb9h,00553a0c2h,0bea85509h,06cb10d56h,0a242da11h,048d957b7h,0672b7268h,016a4d3ddh,08502a96bh,03d7e637ch,0730d463bh,027c7032bh
+ DD 0e4136a14h,0bdc02b18h,0678e32bfh,0bacf969dh,0dd9c3c03h,0c98d89a3h,023becc4fh,07b92420ah,0c64d565ch,0d4b41f78h,010f28295h,09f969d00h,0b13d051ah,0ec7f7f76h,0a92da585h,008945e1eh
+ DD 05846426fh,055366b7dh,0247d441dh,0e7d09e89h,0736fbf48h,0510b404dh,0e784bd7dh,07fa003d0h,017fd9596h,025f7614fh,035cb98dbh,049e0e0a1h,02e83a76ah,02c65957bh,0cddbe0f8h,05d40da8dh
+ DD 0050bad24h,0f2b8c405h,0c2aa4823h,08918426dh,0a38365a7h,02aeab3ddh,07c91b690h,072031717h,060a94120h,08b00d699h,0e99eaeech,0478a255dh,06f60aafdh,0bf656a5fh,05dee77b3h,0dfd7cb75h
+ DD 0a595939dh,037f68bb4h,028740217h,003556479h,084ad7612h,08e740e7ch,09044695fh,0d89bc843h,085a9184dh,0f7f3da5dh,09fc0b074h,0562563bbh,0f88a888eh,006d2e6aah,0161fbe7ch,0612d8643h
+ DD 0f64085e7h,0465edba7h,029aa8511h,0b230f304h,0cda2d188h,053388426h,04b666649h,090885735h,0652f54f6h,06f02ff9ah,05fae2bf0h,065c82294h,062f5eee3h,07816ade0h,0fcc56d70h,0dcdbdf43h
+ DD 054530bb2h,09fb3bba3h,0cb0869eah,0bde3ef77h,00b431163h,089bc9046h,0e4819a35h,04d03d7d2h,043b6a782h,033ae4f9eh,09c88a686h,0216db307h,000ffedd9h,091dd88e0h,012bd4840h,0b280da9fh
+ DD 01635e741h,032a7cb8ah,078be02a7h,0fe14008ah,01b7ae030h,03fafb334h,05add0ce9h,07fd508e7h,0d607ad51h,072c83219h,08d40964ah,00f229c0ah,01c878da2h,01be2c336h,0eab2ab86h,0e0c96742h
+ DD 03e538cd7h,0458f8691h,08e08ad53h,0a7001f6ch,0bf5d15ffh,052b8c6e6h,0011215ddh,0548234a4h,03d5b4045h,0ff5a9d2dh,04a904190h,0b0ffeeb6h,048607f8bh,055a3aca4h,030a0672ah,08cbd665ch
+ DD 042583068h,087f834e0h,0f3f6e683h,002da2aebh,005c12248h,06b763e5dh,065a8aefch,07230378fh,071e8e5cah,093bd80b5h,0b3b62524h,053ab041ch,06c9c552eh,01b860513h,0d5524e66h,0e84d402ch
+ DD 0f37f5937h,0a37f3573h,0d1e4fca5h,0eb0f6c7dh,0ac8ab0fch,02965a554h,0274676ach,017fbf56ch,0acf7d720h,02e2f6bd9h,010224766h,041fc8f88h,085d53befh,0517a14b3h,07d76a7d1h,0dae327a5h
+ DD 0c4818267h,06ad0a065h,037c1bbc1h,033aa189bh,027392a92h,064970b52h,02d1535eah,021699a1ch,0c2d7a7fdh,0cd20779ch,099c83cf2h,0e3186059h,072c0b8c7h,09b69440bh,07b9e0e4dh,0a81497d7h
+ DD 01f5f82dch,0515d5c89h,06361079eh,09a7f67d7h,011a35330h,0a8da81e3h,04b18be1bh,0e44990c4h,0af103e59h,0c7d5ed95h,08dac9261h,0ece8aba7h,09394b8d3h,0be82b099h,016adfe83h,06830f09ah
+ DD 088172d01h,0250a29b4h,0caff9e02h,08b20bd65h,0e8a6329ah,0b8a7661eh,0d3fce920h,04520304dh,02b47f7efh,0ae45da1fh,05bffc540h,0e07f5288h,03464f874h,0f7997009h,0a6fa1f38h,02244c2cdh
+ DD 094d7d9b1h,043c41ac1h,0c82e7f17h,05bafdd82h,05fda0fcah,0df0614c1h,0a8ae37adh,074b043a7h,09e71734ch,03ba6afa1h,09c450f2eh,015d5437eh,067e242b1h,04a5883feh,02c1953c2h,05143bdc2h
+ DD 0fc5e8920h,0542b8b53h,09a9cee08h,0363bf9a8h,0c3486e08h,002375f10h,08c5e70d2h,02037543bh,0625640b4h,07109bccch,08bc62c3bh,0cbc1051eh,0803f26eah,0f8455fedh,0eb372424h,06badceabh
+ DD 06b53f5f9h,0a2a9ce7ch,01b176d99h,064246595h,0b95c081bh,0b1298d36h,01d9a9ee6h,053505bb8h,0f2ba70b0h,03f6f9e61h,08afad453h,0d07e16c9h,0e7eb4a6ah,09f1694bbh,03cb0bc8eh,0dfebced9h
+ DD 053868c8bh,092d3dcdch,0386107a6h,0174311a2h,0689b4e64h,04109e07ch,02df3dcb6h,030e4587fh,00811b3b2h,0841aea31h,00cce43eah,06144d41dh,02a9a7803h,0464c4581h,03e158930h,0d03d371fh
+ DD 0b1f3390bh,0c676d7f2h,0a5b61272h,09f7a1b8ch,0c2e127a9h,04ebebfc9h,05dd997bfh,04602500ch,04711230fh,07f09771ch,0020f09c1h,0058eb37ch,0fee5e38bh,0ab693d4bh,04653cbc0h,09289eb1fh
+ DD 0d51b9cf5h,0becf46abh,09f0121afh,0d2aa9c02h,0e90dc274h,036aaf7d2h,048b95a3ch,0909e4ea0h,06f32dbdbh,0e6b70496h,08b030b3eh,0672188a0h,0cfb617e2h,0eeffe5b3h,07c82709eh,087e947deh
+ DD 01770f5a7h,0a44d2b39h,00e44eb82h,0e4d4d791h,03f69712ah,042e69d1eh,0ac6a820eh,0bf11c4d6h,042c4224ch,0b5e7f3e5h,0449d941ch,0d6b4e81ch,05450e878h,05d72bd16h,0ee25ac54h,06a61e28ah
+ DD 0e6f1cd95h,033272094h,00d18673fh,07512f30dh,05afc1464h,032f7a4cah,06bbb977bh,02f095656h,0a8226200h,0586f47cah,01ac07369h,002c868adh,0c613acbeh,04ef2b845h,00386054ch,043d7563eh
+ DD 0ab952578h,054da9dc7h,026e84d0bh,0b5423df2h,09b872042h,0a8b64eebh,05990f6dfh,0ac205782h,021f4c77ah,04ff696ebh,0aab273afh,01a79c3e4h,09436b3f1h,029bc922eh,0d6d9a27ah,0ff807ef8h
+ DD 0778f22a0h,082acea3dh,05b5e7469h,0fb10b2e8h,02818ee7dh,0c0b16980h,0c91c1a2fh,0011afff4h,0ad124418h,095a6d126h,0e72e295fh,031c081a5h,0f2f4db75h,036bb283ah,07acef462h,0d115540fh
+ DD 033f6746ch,0c7f3a8f8h,0fea990cah,021e46f65h,0caddb0a9h,0915fd5c5h,078614555h,0bd41f016h,0426ffb58h,0346f4434h,014dbc204h,080559436h,05a969b7fh,0f3dd20feh,0e899a39ah,09d59e956h
+ DD 08ad4cf4bh,0f1b0971ch,02ffb8fb8h,003448860h,065340ba4h,0f071ac3ch,0b27fd758h,0408d0596h,098c364b0h,0e7c78ea4h,0051e8ab5h,0a4aac4a5h,0485d9002h,0b9e1d560h,088844455h,09acd518ah
+ DD 0d06f56c0h,0e4ca688fh,0df027972h,0a48af70dh,05e9a609dh,0691f0f04h,0ee61270eh,0a9dd82cdh,0a0ef18d3h,08903ca63h,03d6ca3bdh,09fb7ee35h,0abf47d03h,0a7b4a09ch,01c67de8eh,04cdada01h
+ DD 09355a244h,052003749h,04f2151a9h,0e77fd2b6h,066b4efcbh,0695d6cf6h,0da2cfe25h,0c5a0cacfh,0ef811865h,0104efe5ch,09ea5cc3dh,0f52813e8h,040b58dbch,0855683dch,0175fcb11h,00338ecdeh
+ DD 074921592h,0f9a05637h,0b9bb9d31h,0b4f1261dh,04e9c5459h,0551429b7h,06ea71f53h,0be182e6fh,0dfc50573h,0d3a3b07ch,062be8d44h,09ba1afdah,052ab65d3h,09bcfd2cbh,0a9571802h,0df11d547h
+ DD 002a2404ah,0099403eeh,021088a71h,0497406f4h,05004ae71h,099479409h,0a812c362h,0bdb42078h,0d8828442h,02b72a30fh,0fcb5ed1ch,0283add27h,066a40015h,0f7c0e200h,008b295efh,03e3be641h
+ DD 0e038a675h,0ac127dc1h,08c5c6320h,0729deff3h,0a90d2c53h,0b7df8fd4h,0681e7cd3h,09b74b0ech,0dab407e5h,05cb5a623h,076b340c6h,0cdbd3615h,07d28392ch,0a184415ah,0e96f7830h,0c184c1d8h
+ DD 081d3a80fh,0c3204f19h,0c8e02432h,0fde0c841h,08149e0c1h,078203b3eh,008053a73h,05904bdbbh,0101b6805h,030fc1dd1h,049aa6d49h,043c223bch,07a174087h,09ed67141h,0d5997008h,0311469a0h
+ DD 05e43fc61h,0b189b684h,0e0d3ab57h,0f3282375h,0b1181da8h,04fa34b67h,099ee52b8h,0621ed0b2h,0ad990676h,09b178de1h,056d54065h,0d51de67bh,07538c201h,02a2c27c4h,038a40f5ch,033856ec8h
+ DD 0be6cdcdeh,02522fc15h,09f0c6f89h,01e603f33h,0103e30a6h,07994edc3h,0220c853eh,0033a00dbh,0f7bb7fd7h,0d3cfa409h,0462d18f6h,070f8781eh,0687fe295h,0bbd82980h,0595669f3h,06eef4c32h
+ DD 02f7e85c3h,086a9303bh,071988f9bh,05fce4621h,0c138acb5h,05b935bf6h,025661212h,030ea7d67h,0e51ab9a2h,0ef1eb5f4h,0ae067c78h,00587c98ah,077ca9ca6h,0b3ce1b3ch,054b5f057h,02a553d4dh
+ DD 04da29ec2h,0c7898236h,0b9c57316h,0dbdd5d13h,02cd80d47h,0c57d6e6bh,0fe9e7391h,080b460cfh,0f963c31eh,098648cabh,0cc4d32fdh,067f9f633h,0fdf7c687h,00af42a9dh,00b015ea7h,055f292a3h
+ DD 0cd21ab3dh,089e468b2h,0c393d392h,0e504f022h,0a5013af9h,0ab21e1d4h,0c2c28acbh,0e3283f78h,0226bf99fh,0f38b35f6h,00e291e69h,0e8354274h,0b20c162dh,061673a15h,0b04fbdbeh,0c101dc75h
+ DD 0255bd617h,08323b4c2h,06c2a9154h,06c969693h,062679387h,0c6e65860h,0b8c88e23h,08e01db0ch,0893a5559h,033c42873h,047a3e149h,07630f04bh,0ddcf35f8h,0b5d80805h,077dfe732h,0582ca080h
+ DD 00b1894a0h,02c7156e1h,0d81c68c0h,092034001h,0c8b115b5h,0ed225d00h,083b907f2h,0237f9c22h,04470e2c0h,00ea2f32fh,058be4e95h,0b725f7c1h,0b1ae5463h,00f1dcafah,01ba2fc04h,059ed5187h
+ DD 0d0115d4dh,0f6e0f316h,0d3691599h,05180b12fh,0527f0a41h,0157e32c9h,0a8e0ecc0h,07b0b081dh,0bf4f0dd0h,06dbaaa8ah,04d252696h,099b289c7h,0dbf864feh,079b7755eh,076cad3abh,06974e2b1h
+ DD 006ddd657h,035dbbee2h,02ff3a96dh,0e7cbdd11h,0076be758h,088381968h,008c91f5dh,02d737e72h,086ec3776h,05f83ab62h,0945fa7a1h,098aa649dh,072ef0933h,0f477ec37h,0098c17b1h,066f52b1eh
+ DD 0d803738bh,09eec58fbh,0e4e86aa4h,091aaade7h,0a5b51492h,06b1ae617h,0bbc45974h,063272121h,0862c5129h,07e0e28f0h,03321a4a0h,00a8f79a9h,05041c88fh,0e26d1664h,053233e3ah,00571b805h
+ DD 0c9520711h,0d1b0ccdeh,03c8b84bfh,055a9e4edh,0a1fef314h,09426bd39h,06eb93f2bh,04f5f638eh,02bf9341bh,0ba2a1ed3h,04d42d5a9h,0d63c1321h,0316dc7c5h,0d2964a89h,0ca511851h,0d1759606h
+ DD 0f9e6ed35h,0d8a9201fh,06736925ah,0b7b5ee45h,099581af7h,00a83fbbch,064eeb051h,03076bc40h,002dec312h,05511c98ch,0238dcb78h,0270de898h,0539c08c9h,02cf4cf9ch,038d3b06eh,0a70cb65eh
+ DD 0cfe57bbdh,0b12ec10eh,035a0c2b5h,082c7b656h,0161c67bdh,0ddc7d5cdh,0ae3a32cch,0e32e8985h,0d11a5529h,07aba9444h,02427fa1ah,0e964ed02h,024a1770ah,01528392dh,012c72fcdh,0a152ce2ch
+ DD 08ec07649h,0714553a4h,0459dd453h,018b4c290h,07b64b110h,0ea32b714h,02e6f07a2h,0b871bfa5h,09e2e3c9bh,0b67112e5h,044aa90f6h,0fbf250e5h,0bd539006h,0f77aedb8h,0d172a66fh,03b0cdf9ah
+ DD 0f8c51187h,0edf69feah,0741e4da7h,005bb67ech,008114345h,047df0f32h,0bb9792b1h,056facb07h,08f6229e4h,0f3e007e9h,0526fba0fh,062d103f4h,0b0339d79h,04f33bef7h,0b59bfec1h,09841357bh
+ DD 0c34e6705h,0fa8dbb59h,07fdaa84ch,0c3c7180bh,0a4108537h,0f95872fch,0932a3e5ah,08750cc3bh,0b7275d7dh,0b61cc69dh,02e59b2e9h,0ffa0168bh,06ecbb493h,0ca032abch,02c9082d8h,01d86dbd3h
+ DD 0e28ef5bah,0ae1e0b67h,0cb18e169h,02c9a4699h,01e6bbd20h,00ecd0e33h,0af5e81d2h,0571b360eh,0101c1d45h,0cd9fea58h,018880452h,06651788eh,01f8dd446h,0a9972635h,0e37281d0h,044bed022h
+ DD 033da525dh,0094b2b2dh,013144fd8h,0f193678eh,0f4c1061dh,0b8ab5ba4h,0dccbe0f4h,04343b5fah,063812713h,0a8702371h,0f7611d93h,047bf6d2dh,0bd21e1d7h,046729b8ch,0d629e77dh,07484d4e0h
+ DD 060dbac1fh,0830e6eeah,0da06a2f7h,023d8c484h,050ca535bh,0896714b0h,0ebd97a9bh,0dc8d3644h,0b12177b4h,0106ef9fah,0534d5d9ch,0f79bf464h,0a6ab360bh,02537a349h,0a00c744fh,0c7c54253h
+ DD 0e5911a76h,0b3c7a047h,0647f1ee7h,061ffa5c8h,08f56ab42h,015aed36fh,0a3ff9ac9h,06a0d41b0h,0cc30d357h,068f469f5h,06b72be96h,0be9adf81h,0903ad461h,01cd926feh,0caca441bh,07e89e38fh
+ DD 0facf69d4h,0f0f82de5h,04775344ch,0363b7e76h,0b2e36d04h,06894f312h,011d1c9a5h,03c6cb4feh,04008e1f2h,085d9c339h,0249f326ch,05e9a85eah,0678c5e06h,0dc35c60ah,09f86fba9h,0c08b944fh
+ DD 089f71f0fh,0de40c02ch,0ff3da3c0h,0ad8f3e31h,042125dedh,03ea5096bh,0a7379183h,013879cbfh,06b306a0bh,06f4714a5h,067646c5eh,0359c2ea6h,007726368h,0facf8943h,065ff431eh,007a58935h
+ DD 068754ab0h,024d661d1h,06f429a76h,0801fce1dh,0a58ce769h,0c068a85fh,05d5eca2bh,0edc35c54h,0a3f660d1h,0ea31276fh,0b8fc7167h,0a0184ebeh,01d8db0aeh,00f20f21ah,056c35e12h,0d96d095fh
+ DD 0f8c2a25bh,0edf402b5h,0059204b6h,01bb772b9h,019b4e34ch,050cbeae2h,03fa0845ah,093109d80h,08ef59fb5h,054f7ccf7h,088070963h,03b438fe2h,031f3ba9bh,09e28c659h,0ead9da92h,09cc31b46h
+ DD 0b733aa5fh,03c2f0ba9h,0f05af235h,0dece47cbh,0a2ac82a5h,0f8e3f715h,02203f18ah,0c97ba641h,009c11060h,0c3af5504h,046af512dh,056ea2c05h,0f3f28146h,0fac28dafh,0959ef494h,087fab43ah
+ DD 0d4c5105fh,009891641h,06d7fbd65h,01ae80f8eh,0bee6bdb0h,09d67225fh,07fc4d860h,03b433b59h,093e85638h,044e66db6h,0e3e9862fh,0f7b59252h,0665c32ech,0db785157h,0ae362f50h,0702fefd7h
+ DD 00fefb0c3h,03754475dh,046d7c35dh,0d48fb56bh,0363798a4h,0a070b633h,08fdb98e6h,0ae89f3d2h,06363d14ch,0970b89c8h,067abd27dh,089817521h,044d5a021h,09bf7d474h,0cac72aeeh,0b3083bafh
+ DD 0be949a44h,0389741deh,0546a4fa5h,0638e9388h,0a0047bdch,03fe6419ch,0aaea57cah,07047f648h,041fbab17h,054e48a90h,0576bdba2h,0da8e0b28h,0c72afddch,0e807eebch,0f42577bfh,007d3336dh
+ DD 0bfe20925h,062a8c244h,08fdce867h,091c19ac3h,0dd387063h,05a96a5d5h,021d324f6h,061d587d4h,0a37173eah,0e87673a2h,053778b65h,023848008h,005bab43eh,010f8441eh,04621efbeh,0fa11fe12h
+ DD 081685d7bh,0047b772eh,0bf34a976h,023f27d81h,0915f48efh,0c27608e2h,0a521d5c3h,03b0b43fah,063ca7284h,07613fb26h,01d4db837h,07f5729b4h,0583b526bh,087b14898h,0bbadd3d1h,000b732a6h
+ DD 02048e396h,08e02f426h,0383d9de4h,0436b50b6h,0471e85adh,0f78d3481h,0d005c8d6h,08b01ea6ah,097015c07h,0d3c7afeeh,04e3ba2aeh,046cdf1a9h,083d3a1d2h,07a42e501h,0b541dff4h,0d54b5268h
+ DD 04e23e9bch,03f24cf30h,0126e3624h,04387f816h,03b0b6d61h,026a46a03h,08b2d777ch,0af1bc845h,0527de79ch,025c401bah,04261bbb6h,00e1346d4h,0287b4bc7h,04b96c44bh,05254562fh,0658493c7h
+ DD 0b8a24a20h,023f949feh,0f52ca53fh,017ebfed1h,0bcfb4853h,09b691bbeh,06278a05dh,05617ff6bh,0e3c99ebdh,0241b34c5h,01784156ah,0fc64242eh,0695d67dfh,04206482fh,0ee27c011h,0b967ce0eh
+ DD 021c80b5dh,065db3751h,0a31ecca0h,02e7a563ch,05238a07eh,0e56ffc4eh,032ced854h,03d6c2966h,0af70b885h,0e99d7d1ah,02d686459h,0afc3bad9h,00cc8ba5bh,09c78bf46h,018955aa3h,05a439519h
+ DD 05fe4e314h,0f8b517a8h,0fcb8906fh,0e60234d0h,0f2061b23h,0ffe542ach,06b4cb59ch,0287e191fh,009d877d8h,021857ddch,014678941h,01c23478ch,0b6e05ea4h,0bbf0c056h,0b01594feh,082da4b53h
+ DD 0fadb8608h,0f7526791h,07b74cdf6h,0049e832dh,0c2b90a34h,0a43581cch,09360b10ch,073639eb8h,0e1e4a71bh,04fba331fh,08072f919h,06ffd6b93h,065679032h,06e53271ch,0f14272ceh,067206444h
+ DD 0b2335834h,0c0f734a3h,090ef6860h,09526205ah,004e2bb0dh,0cb8be717h,002f383fah,02418871eh,04082c157h,0d7177681h,029c20073h,0cc914ad0h,0e587e728h,0f186c1ebh,061bcd5fdh,06fdb3c22h
+ DD 0f2f9f8e9h,030d014a6h,04fec49d2h,0963ece23h,09605a8d9h,0862025c5h,019f8929ah,039874445h,012bf476ah,001b6ff65h,009cf7d91h,0598a64d8h,093be56cah,0d7ec7749h,0cbb33615h,010899785h
+ DD 002eee3adh,0b8a092fdh,030145270h,0a86b3d35h,08512b675h,0323d98c6h,062ebb40fh,04b8bc785h,0413f9cdeh,07d301f54h,02bab5664h,0a5e4fb4fh,01cbfec23h,01d2b252dh,0e177120dh,0fcd576bbh
+ DD 083731a34h,004427d3eh,0ed836e8eh,02bb9028eh,0b612ca7ch,0b36acff8h,0d3d9c73ah,0b88fe5efh,0edea4eb3h,0be2a6bc6h,0488eec77h,043b93133h,0b17106e1h,0f41ff566h,0654efa32h,0469e9172h
+ DD 041c23fa3h,0b4480f04h,0c1989a2eh,0b4712eb0h,093a29ca7h,03ccbba0fh,0d619428ch,06e205c14h,0b3641686h,090db7957h,045ac8b4eh,00432691dh,0f64e0350h,007a759ach,09c972517h,00514d89ch
+ DD 0a8e67fc3h,01701147fh,0ab2085beh,09e2e0b8bh,0ac284e57h,0d5651824h,074893664h,0890d4325h,0c55e68a3h,08a7c5e6eh,04339c85ah,0bf12e90bh,0f922b655h,031846b85h,00bf4d700h,09a54ce4dh
+ DD 0f1a14295h,0d7f4e83ah,0b285d4f9h,0916f955ch,099ffdabah,0e57bb0e0h,0eab0d152h,028a43034h,0b8a9cef8h,00a36ffa2h,0b9ec051ah,05517407eh,0ea68e672h,09c796096h,0fb3c77fbh,0853db5fbh
+ DD 0e864a51ah,021474ba9h,06e8a1b8bh,06c267699h,094120a28h,07c823626h,08383a5dbh,0e61e9a48h,09f84216dh,07dd75003h,0ad43cd85h,0ab020d07h,0da12c659h,09437ae48h,0e65452adh,06449c2ebh
+ DD 02cf9d7c1h,0cc7c4c1ch,0ee95e5abh,01320886ah,0beae170ch,0bb7b9056h,0dbc0d662h,0c8a5b250h,0c11d2303h,04ed81432h,01f03769fh,07da66912h,084539828h,03ac7a5fdh,03bccdd02h,014dada94h
+ DD 07ef6b0d1h,08b84c321h,07c933f22h,052a9477ah,0fd440b82h,05ef6728ah,06ce4bd5eh,05c3bd859h,0f22c2d3eh,0918b80f5h,0b7bb6cc5h,0368d5040h,02695a11ch,0b66142a1h,0eb19ea70h,060ac583ah
+ DD 00eab2437h,0317cbb98h,05e2654c8h,08cc08c55h,0e6d8307fh,0fe2d6520h,057428993h,0e9f147f3h,0d2fd6cf1h,05f9c7d14h,02d4fcbb0h,0a3ecd064h,08e7341f7h,0ad83fef0h,03a63115ch,0643f23a0h
+ DD 0e65ab743h,0d38a78abh,035edc89ch,0bf7c75b1h,0530df568h,03dd8752eh,0e308c682h,0f85c4a76h,0e68acf37h,04c9955b2h,0ab32af85h,0a544df3dh,0a25cf493h,04b8ec3f5h,01a622febh,04d8f2764h
+ DD 0f0dcbc49h,07bb4f7aah,070bbb45bh,07de551f9h,09f2ca2e5h,0cfd0f3e4h,01f5c76efh,0ece58709h,0167d79aeh,032920eddh,0fa7d7ec1h,0039df8a2h,0bb30af91h,0f46206c0h,022676b59h,01ff5e2f5h
+ DD 06ea51d66h,011f4a039h,0807d7a26h,0506c1445h,0755a9b24h,060da5705h,01f1a319eh,08fc8cc32h,09433d67dh,083642d4dh,06a7dd296h,07fa5cb8fh,09b7bde07h,0576591dbh,0419716fbh,013173d25h
+ DD 0d5b340ffh,0ea30599dh,0b0fe76c5h,0fc6b5297h,0ab8f5adch,01c6968c8h,0901c928dh,0f723c7f5h,09773d402h,04203c321h,01b51dd47h,0df7c6aa3h,0552be23ch,03d49e37ah,00b5a6e87h,057febee8h
+ DD 07bd8e739h,0c5ecbee4h,0ae63bf75h,079d44994h,038fb8923h,0168bd00fh,0d0533130h,075d48ee4h,0db5cdf33h,0554f77aah,03c696769h,03396e896h,0d3fd674eh,02fdddbf2h,099d0e3e5h,0bbb8f6eeh
+ DD 0cbae2f70h,051b90651h,093aaa8ebh,0efc4bc05h,0dd1df499h,08ecd8689h,022f367a5h,01aee99a8h,0ae8274c5h,095d485b9h,07d30b39ch,06c14d445h,0bcc1ef81h,0bafea90bh,0a459a2edh,07c5f317ah
+ DD 04ef44227h,001211075h,0dc20f496h,0a17bed6eh,0819853cdh,00cdfe424h,0f71e2ce7h,013793298h,0dbbe307bh,03c1f3078h,076ee9936h,06dd1c20eh,0423caa20h,023ee4b57h,08efb840eh,04ac3793bh
+ DD 0ed1f8ca0h,0934438ebh,04ebb25a2h,03e546658h,0c069896fh,0c415af0eh,09a5aa43dh,0c13eddb0h,0d49eb8f6h,07a04204fh,0d74f1670h,0d0d5bdfch,056fc0558h,03697e286h,001cebadeh,010207371h
+ DD 00647a82bh,05f87e690h,08f40054fh,0908e0ed4h,079853803h,0a9f633d4h,04a28b252h,08ed13c9ah,01f460f64h,03e2ef676h,036d06336h,053930b9bh,08fc4979bh,0347073ach,05ecd5597h,084380e0eh
+ DD 0c4fe3c39h,0e3b22c6bh,06c7bebdfh,0ba4a8153h,025693459h,0f23ab6b7h,014922b11h,053bc3770h,05afc60dbh,04645c8abh,020b9f2a3h,0aa022355h,0ce0fc507h,052a2954ch,07ce1c2e7h,08c2731bbh
+ DD 018a0339dh,0f39608abh,03735436ch,0ac7a658dh,0cd992b4fh,0b22c2b07h,0f40dcfd4h,04e83daech,02f39ea3eh,08a34c7beh,0b0a56d2eh,0ef0c005fh,06edd8038h,062731f6ah,04e3cb075h,05721d740h
+ DD 0fbeeee1bh,01ea41511h,0ef1d0c05h,0d1ef5e73h,073c07d35h,042feefd1h,08a329493h,0e530a00ah,0f15ebfb0h,05d55b7feh,0d322491ah,0549de03ch,0745b3237h,0f7b5f602h,01ab6e2b6h,03632a3a2h
+ DD 00ef59f78h,00d3bba89h,0c9e52b9ah,00dfc6443h,072631447h,01dc79699h,0b3be20b1h,0ef033917h,0b1383948h,00c92735dh,0c0dd7d7dh,0c1fc29a2h,0403ed068h,06485b697h,0aac93bdch,013bfaab3h
+ DD 00deeaf52h,0410dc6a9h,04c641c15h,0b003fb02h,05bc504c4h,01384978ch,0864a6a77h,037640487h,0222a77dah,005991bc6h,05e47eb11h,062260a57h,0f21b432ch,0c7af6613h,0ab4953e9h,022f3acc9h
+ DD 08e41d155h,052934922h,03ac059efh,04d024568h,04d884411h,0b0201755h,0a59a178fh,0ce8055cfh,0f6204549h,0cd77d1afh,0c7066759h,0a0a00a3eh,00272c229h,0471071efh,0d3c4b6b0h,0009bcf6bh
+ DD 022305177h,02a2638a8h,041645bbfh,0d51d59dfh,0c0a7a3c0h,0a81142fdh,04c7063eeh,0a17eca6dh,060d9dcech,00bb887edh,020ad2455h,0d6d28e51h,0a67102bah,0ebed6308h,08bffa408h,0042c3114h
+ DD 08aa68e30h,0fd099ac5h,01483513eh,07a6a3d7ch,0ba2d8f0ch,0ffcc6b75h,01e78b954h,054dacf96h,0a4a9af89h,0f645696fh,006ac98ech,03a411940h,022a67a20h,041b8b3f6h,099dec626h,02d0b1e0fh
+ DD 040be34e8h,027c89192h,091907f35h,0c7162b37h,0a956702bh,090188ec1h,0df93769ch,0ca132f7dh,00e2025b4h,03ece44f9h,00c62f14ch,067aaec69h,022e3cc11h,0ad741418h,07ff9a50eh,0cf9b75c3h
+ DD 04d348272h,002fa2b16h,09959d56dh,0bd99d61ah,018762916h,0bc4f19dbh,049c1ac80h,0cc7cce50h,0d846bd83h,04d59ebaah,0a9202849h,08775a9dch,06e1f4ca9h,007ec4ae1h,0ba893f11h,027eb5875h
+ DD 0662cc565h,000284d51h,00db4138dh,082353a6bh,0aa32a594h,0d9c7aaaah,0a5669c47h,0f5528b5eh,02f23c5ffh,0f3220231h,06affa3a1h,0e3e8147ah,0202ddda0h,0fb423d5ch,06b871bd4h,03d6414ach
+ DD 0a51a168ah,0586f82e1h,048ae5448h,0b712c671h,076233eb8h,09a2e4bd1h,078811ca9h,00188223ah,0f7c18de1h,0553c5e21h,0b27bb286h,07682e451h,00e51e929h,03ed036b3h,0ec9cb34fh,0f487211bh
+ DD 00c24efc8h,00d094277h,0bef737a4h,00349fd04h,0514cdd28h,06d1c9dd2h,030da9521h,029c135ffh,0f78b0b6fh,0ea6e4508h,0678c143ch,0176f5dd2h,04be21e65h,008148418h,0e7df38c4h,027f7525ch
+ DD 0748ab1a4h,01fb70e09h,05efe4433h,09cba50a0h,015f75af2h,07846c7a6h,05ee73ea8h,02a7c2c57h,03f0a449ah,042e566a4h,0ad90fc3dh,045474c3bh,08b61d057h,07447be3dh,03a4ec092h,03e9d1cf1h
+ DD 0f380a6e6h,01603e453h,09b1437c2h,00b86e431h,0ef29610ah,07a4173f2h,0f03d57f7h,08fa729a7h,06c9c217eh,03e186f6eh,091919524h,0be1d3079h,0153d4fb1h,092a62a70h,0d68c2f71h,032ed3e34h
+ DD 09eb1a8b7h,0d785027fh,0c5b22fe8h,0bc37eb77h,0b9d6a191h,0466b34f0h,09a05f816h,0008a89afh,07d42c10ah,019b028fbh,049b3f6b8h,07fe8c92fh,0a5a0ade3h,058907cc0h,0559d1a7ch,0b3154f51h
+ DD 0d9790ed6h,05066efb6h,0a6aa793bh,0a77a0cbch,0223e042eh,01a915f3ch,069c5874bh,01c5def04h,073b6c1dah,00e830078h,0fcd8557ah,055cf85d2h,00460f3b1h,00f7c7c76h,046e58063h,087052acbh
+ DD 0907eae66h,009212b80h,04d721c89h,03cb068e0h,0dd45ac1ch,0a87941aeh,00daa0dbbh,0de8d5c0dh,0e3502e6eh,0da421fdch,04d89a084h,0c8944201h,0f0c24bfbh,07307ba5eh,020bde0efh,0da212bebh
+ DD 0f82ce682h,0ea2da24bh,007f71fe4h,0058d3816h,05ffad8deh,035a02462h,0aadcefabh,0cd7b05dch,01d9f54ech,0d442f8edh,0b2d3b5cah,08be3d618h,0e06b2ce2h,0e2220ed0h,01b0da4c0h,082699a5fh
+ DD 071c0c3a7h,03ff106f5h,00d34180ch,08f580f5ah,022d7d375h,04ebb120eh,0e9513675h,05e5782cch,099c82a70h,02275580ch,015ea8c4ch,0e8359fbfh,07b415e70h,053b48db8h,0100c6014h,0aacf2240h
+ DD 0e4652f1dh,09faaccf5h,0d56157b2h,0bd6fdd2ah,06261ec50h,0a4f4fb1fh,0476bcd52h,0244e55adh,0047d320bh,0881c9305h,06181263fh,01ca983d5h,0278fb8eeh,0354e9a44h,0396e4964h,0ad2dbc0fh
+ DD 09268b3deh,0723f3aa2h,0e6e0609ah,00d1ca29ah,06cf44252h,0794866aah,001af87edh,00b59f3e3h,07f4a6c51h,0e234e5ffh,061dc2f7eh,0a8768fd2h,00a94d81fh,0dafc7332h,006938ce1h,0d7f84282h
+ DD 00546063eh,0ae0b3c0eh,05d61abc6h,07fbadcb2h,0369ac400h,0d5d7a2c9h,0ae67d10ch,0a5978d09h,04f85eaach,0290f211eh,0facac681h,0e61e2ad1h,0388384cdh,0ae125225h,0ccfde30fh,0a7fb68e9h
+ DD 03daed4c2h,07a59b936h,02606f789h,080a9aa40h,0f6a6d90ah,0b40c1ea5h,0514d5885h,0948364d3h,070985182h,0062ebc60h,033310895h,0a6db5b0eh,0e329c2f5h,064a12175h,090ea237eh,0c5f25bd2h
+ DD 02d0a4c23h,07915c524h,06bb3cc52h,0eb5d26e4h,0c09e2c92h,0369a9116h,0cf182cf8h,00c527f92h,02aede0ach,09e591938h,06cc34939h,0b2922208h,099a34361h,03c9d8962h,0c1905fe6h,03c81836dh
+ DD 0a001ec5ah,04bfeb57fh,0a0dc5dbah,0e993f5bbh,0724a1380h,047884109h,032fe9a04h,08a0369abh,08c927db8h,0ea068d60h,094655741h,0bf5f37cfh,004b6c7eah,047d402a2h,06af259cbh,04551c295h
+ DD 0ed77ee8bh,0698b71e7h,0f309d5c7h,0bddf7bd0h,034e780cah,06201c22ch,04c295ef4h,0ab04f7d8h,04313a8ceh,01c947294h,092ca4cfeh,0e532e4ach,0d0a7a97ah,089738f80h,0a580fd5bh,0ec088c88h
+ DD 042ce9e51h,0612b1ecch,0b25fdd2ah,08f9840fdh,001e7f839h,03cda78c0h,0ece05480h,0546b3d3ah,080d30916h,0271719a9h,0584c20c4h,045497107h,05bc78608h,0af8f9478h,0277e2a4ch,028c7d484h
+ DD 088a2ffe4h,0fce01767h,028e169a5h,0dc506a35h,07af9c93ah,00ea10861h,003fa0e08h,01ed24361h,0a3d694e7h,096eaaa92h,0ef50bc74h,0c0f43b4dh,064114db4h,0ce6aa58ch,07c000fd4h,08218e8eah
+ DD 0185f8844h,0ac815dfbh,01557abfbh,0cd7e90cbh,0afbfecdfh,023d16655h,0085cac4ah,080f3271fh,0d0e62f47h,07fc39aa7h,0460a48e5h,088d519d1h,0d28f101eh,059559ac4h,0ca9ae816h,07981d9e9h
+ DD 09ac38203h,05c38652ch,057657fe5h,086eaf87fh,0e21f5416h,0568fc472h,0e7e597b5h,02afff39ch,0256d4eabh,03adbbb07h,08285ab89h,022598692h,0041caefeh,035f8112ah,0a5064c8bh,095df02e3h
+ DD 0c7004bf3h,04d63356eh,0db83c7deh,0230a08f4h,08709a7b7h,0ca27b270h,0cb9abd2dh,00d1c4cc4h,07550fee8h,08a0bc66eh,09cf7247eh,0369cd4c7h,092b5b7e7h,075562e84h,05802af7bh,08fed0da0h
+ DD 0e48fb889h,06a7091c2h,07b8a9d06h,026882c13h,01b82a0e2h,0a2498663h,03518152dh,0844ed736h,0d86e27c7h,0282f476fh,004afefdch,0a04edacah,06119e34dh,08b256ebch,00787d78bh,056a413e9h
+ DD 05a74be50h,082ee061dh,0dea16ff5h,0e41781c4h,099bfc8a2h,0e0b0c81eh,00b547e2dh,0624f4d69h,0bdcc9ae4h,03a83545dh,0409b1e8eh,02573dbb6h,0a6c93539h,0482960c4h,05ae18798h,0f01059adh
+ DD 03112795fh,0715c9f97h,0984e6ee1h,0e8244437h,0ecb66bcdh,055cb4858h,0abaffbeeh,07c136735h,05dbec38eh,054661595h,0388ad153h,051c0782ch,0c6e0952fh,09ba4c53ah,01b21dfa8h,027e6782ah
+ DD 04ed2dbc2h,0682f903dh,07c3b2d83h,00eba59c8h,09c7e9335h,08e9dc84dh,00eb226d7h,05f9b21b0h,0af267baeh,0e33bd394h,0be2e15aeh,0aa86cc25h,06a8ec500h,04f0bf67dh,0f9630658h,05846aa44h
+ DD 0e2c2bf15h,0feb09740h,0a9e99704h,0627a2205h,0c2fbc565h,0ec8d73d0h,0c20c8de8h,0223eed8fh,0a8363b49h,01ee32583h,0c9c2b0a6h,01a0b6cb9h,090dbc85ch,049f7c3d2h,01ef4c1ach,0a8dfbb97h
+ DD 065c7c2abh,0afb34d4ch,0e2c5ea84h,01d4610e7h,0973c4ab5h,0893f6d1bh,0945ba5c4h,0a3cdd7e9h,0064417eeh,060514983h,0ad6bdf2bh,01459b23ch,05cf726c3h,023b2c341h,032d6354ah,03a829635h
+ DD 0ab192c18h,0294f901fh,07030164fh,0ec5fcbfeh,0e2246ba6h,0e2e2fcb7h,0221a1a0ch,01e7c88b3h,0c92d88c5h,072c7dd93h,01106fb59h,041c2148eh,0a0f60f14h,0547dd4f5h,063960f31h,0ed9b52b2h
+ DD 0b0a5b358h,06c8349ebh,09e7e2ed6h,0b154c5c2h,0eda462dbh,0cad5eccfh,02de66b69h,0f2d6dbe4h,08665e5b2h,0426aedf3h,07b7f5723h,0488a8513h,08bcbb386h,015cc43b3h,0d791d879h,027ad0af3h
+ DD 0846e364fh,0c16c236eh,0dea50ca0h,07f33527ch,00926b86dh,0c4810775h,00598e70ch,06c2a3609h,0f024e924h,0a6755e52h,09db4afcah,0e0fa07a4h,066831790h,015c3ce7dh,0a6cbb0d6h,05b4ef350h
+ DD 0b6205969h,02c4aafc4h,0f6c7854fh,042563f02h,01d983b48h,0016aced5h,099949755h,0feb356d8h,0d1a39bd7h,08c2a2c81h,0e6934ae9h,08f44340fh,0447904dah,0148cf91ch,00f51a926h,07340185fh
+ DD 07409ab46h,02f8f00fbh,080e289b2h,0057e78e6h,0a888e5d1h,003e5022ch,09dede4e2h,03c87111ah,07809460bh,05b9b0e1ch,071c9abc7h,0e751c852h,0c7cc1dc9h,08b944e28h,01d3cfa08h,04f201ffah
+ DD 03e6721ceh,002fc905ch,0d0b3674ch,0d52d70dah,018810da4h,05dc2e5cah,05c69dd99h,0a984b273h,084de5ca4h,063b92527h,0c852dec4h,02f1c9872h,0c2e3de09h,018b03593h,09813dc2fh,019d70b01h
+ DD 0a6dc1d29h,042806b2dh,0f871e144h,0d3030009h,0aaf49276h,0a1feb333h,0c70bc04bh,0b5583b9eh,095695f20h,01db0be78h,089d012b5h,0fc841811h,005f61643h,06409f272h,0d5883128h,040d34174h
+ DD 067419833h,0d79196f5h,0863b7b08h,06059e252h,01c56700ch,084da1817h,0b28d3ec4h,05758ee56h,0013b0ea6h,07da2771dh,054c5e9b9h,0fddf524bh,024305d80h,07df4faf8h,03a97763fh,058f5c1bfh
+ DD 07c696042h,0a5af37f1h,04a2538deh,0d4cba22ch,09ea42600h,0211cb995h,07b069889h,0cd105f41h,0ddb81e74h,0b1e1cf19h,05157b8cah,0472f2d89h,0ee9db885h,0086fb008h,00f26d131h,0365cd570h
+ DD 0a2be7053h,0284b02bbh,07ab9a6d6h,0dcbbf7c6h,020f7a530h,04425559ch,0188767c8h,0961f2dfah,070dc80c4h,0e2fd9435h,0f0784120h,0104d6b63h,053567122h,07f592bc1h,0f688ad77h,0f6bc1246h
+ DD 00f15dde9h,005214c05h,00d5f2b82h,0a47a76a8h,062e82b62h,0bb254d30h,03ec955eeh,011a05fe0h,09d529b36h,07eaff46eh,08f9e3df6h,055ab1301h,099317698h,0c463e371h,0ccda47adh,0fd251438h
+ DD 023d695eah,0ca9c3547h,016e589b5h,048ce626eh,0b187d086h,06b5b64c7h,0b2207948h,0d02e1794h,07198111dh,08b58e98fh,0dcf9c3cch,090ca6305h,0f34089b0h,05691fe72h,0fc7c80ffh,060941af1h
+ DD 022eb51e5h,0a09bc0a2h,0aa9cf09ah,0c0bb7244h,080159f06h,036a8077fh,0dddc560eh,08b5c989eh,0512e1f43h,019d2f316h,0ad08ff62h,002eac554h,007d20b4eh,0012ab84ch,0d6d4e4e1h,037d1e115h
+ DD 0ab7b19a8h,0b6443e1ah,0def8cd45h,0f08d067eh,0685e03dah,063adf3e9h,04792b916h,0cf15a10eh,0b738a425h,0f44bcce5h,09636b2fdh,0ebe131d5h,07850d605h,094068841h,0b40d749dh,009684eaah
+ DD 072ba075bh,08c3c669ch,0ba469015h,089f78b55h,03e9f8ba8h,05706aadeh,0b32d7ed7h,06d8bd565h,0805f08d6h,025f4e63bh,0c3bcc1b5h,07f48200dh,0b025d847h,04e801968h,087cbe0a8h,074afac04h
+ DD 07e63d690h,043ed2c2bh,00223cdb8h,0efb6bbf0h,02884d3feh,04fec3caeh,0d75e25a4h,0065ecce6h,069f79071h,06c2294ceh,0044b8666h,00d9a8e5fh,017b69d8fh,05009f238h,0c5dfdaf7h,03c29f8feh
+ DD 0ebae68c4h,09067528fh,030c5ba21h,05b385632h,01fdd1aech,0540df119h,0cfba4c78h,0cf37825bh,0beb11454h,077eff980h,060c1b066h,040a1a991h,0f889a1c7h,0e8018980h,076c24be0h,0b9c52ae9h
+ DD 045650ef4h,005fbbcceh,08aa29ac7h,0ae000f10h,04f04c470h,0884b7172h,019bb5c25h,07cd4fde2h,0e8840869h,06477b22ah,05fbd0686h,0a8868859h,01116dfbah,0f23cc02eh,0d87d7776h,076cd563fh
+ DD 0a9d82abfh,0e2a37598h,0e6c170f5h,05f188ccbh,05066b087h,081682200h,0c7155adah,0da22c212h,0fbddb479h,0151e5d3ah,06d715b99h,04b606b84h,0f997cb2eh,04a73b54bh,03ecd8b66h,09a1bfe43h
+ DD 02a67d48ah,01c312809h,0031fa9e2h,0cd6a671eh,00e43a34ah,0bec3312ah,055ef47d3h,01d935639h,08fea73eah,05ea02489h,0a035afb2h,08247b364h,05265b54ch,0b58300a6h,0722c7148h,03286662fh
+ DD 0b4ec4c20h,0b77fd76bh,00f3fe3fdh,0f0a12fa7h,041d8c7e8h,0f845bbf5h,05ec10aa8h,0e4d969cah,043e232a3h,04c0053b7h,037f8a45ah,0dc7a3fach,020d81c8fh,03c4261c5h,0b00eab00h,0fd4b3453h
+ DD 0d36e3062h,076d48f86h,0a143ff02h,0626c5277h,0af76f42eh,0538174deh,06407ceach,02267aa86h,072e572d5h,0fad76351h,0ba7330ebh,0ab861af7h,0418d8657h,0a0a1c8c7h,020289a52h,0988821cbh
+ DD 0cccc18adh,079732522h,0f1a6e027h,0aadf3f8dh,017c2354dh,0f7382c93h,0d818b689h,05ce1680ch,0d9ecbee9h,0359ebbfch,01cae62ach,04330689ch,0c51ac38ah,0b55ce5b4h,0fe238ee8h,07921dfeah
+ DD 0271d1ca5h,03972bef8h,0e8aabd18h,03e423bc7h,044a3e5e3h,057b09f3fh,07b444d66h,05da886aeh,0a9964375h,068206634h,0699cd0ffh,0356a2fa3h,0dba515e9h,0af0faa24h,0b321d79ah,0536e1f5ch
+ DD 05c04e4eah,0d3b9913ah,0d6f11513h,0d549dcfeh,079fd1d94h,0ee227bf5h,0b43f2c67h,09f35afeeh,0f1314f53h,0d2638d24h,0cabcd822h,062baf948h,04ef48db0h,05542de29h,0fc5f6bb2h,0b3eb6a04h
+ DD 01208e16ah,023c110aeh,0f8363e24h,01a4d15b5h,0164be00bh,030716844h,0f6f4690dh,0a8e24824h,090b170cfh,0548773a2h,042f191f4h,0a1bef331h,09247aa97h,070f418d0h,048be9147h,0ea06028eh
+ DD 0dbfb894eh,0e13122f3h,0ce274b18h,0be9b79f6h,0ca58aadfh,085a49de5h,011487351h,024957758h,0bb939099h,0111def61h,026d13694h,01d6a974ah,0d3fc253bh,04474b4ceh,04c5db15eh,03a1485e6h
+ DD 0147c15b4h,0e79667b4h,07bc61301h,0e34f553bh,017094381h,0032b80f8h,0723eaa21h,055d8bafdh,0f1c0e74eh,05a987995h,0ebba289ch,05a9b292eh,0eb4c8251h,0413cd4b2h,0d162db0ah,098b5d243h
+ DD 068342520h,0bb47bf66h,0baa862d1h,008d68949h,0e906abcdh,011f349c7h,0ed7bf00eh,0454ce985h,0b55b803bh,0acab5c9eh,031e3c16dh,0b03468eah,0d273bf12h,05c24213dh,071587887h,0211538ebh
+ DD 0731dea2dh,0198e4a2fh,074ed7b2ah,0d5856cf2h,013a664feh,086a632ebh,0bda41291h,0932cd909h,0c0c4ddc0h,0850e95d4h,0347fc2c9h,0c0f422f8h,086076bcbh,0e68cbec4h,0cd6cd286h,0f9e7c0c0h
+ DD 00f5f27cah,065994ddbh,0a80d59ffh,0e85461fbh,066601023h,0ff05481ah,0fc9ebbfbh,0c665427ah,07587fd52h,0b0571a69h,08d49efceh,0935289f8h,0ea420688h,061becc60h,013a786afh,0b22639d9h
+ DD 0361ecf90h,01a8e6220h,025506463h,0001f23e0h,00a5c2b79h,0e4ae9b5dh,0d8149db5h,0ebc9cdadh,0934aa728h,0b33164a1h,0ae9b60f3h,0750eb00eh,09b9cfbfdh,05a91615bh,0ef45f7f6h,097015cbfh
+ DD 0bf5151dfh,0b462c4a5h,0b07118f2h,021adcc41h,0043fa42ch,0d60c545bh,0e96be1abh,0fc21aa54h,04e51ea80h,0e84bc32fh,0259b5d8dh,03dae45f0h,0c38f1b5eh,0bb73c7ebh,0e8ae617dh,0e405a74ah
+ DD 09f1c56bdh,0bb1ae9c6h,049f196a4h,08c176b98h,06875092bh,0c448f311h,09f976033h,0b5afe3deh,0145813e5h,0a8dafd49h,0e2b34226h,0687fc4d9h,04c7ff57fh,0f2dfc92dh,0401f1b46h,0004e3fc1h
+ DD 01430c9abh,05afddab6h,02238e997h,00bdd41d3h,0418042aeh,0f0947430h,0cdddc4cbh,071f9addah,0c52dd907h,07090c016h,029e2047fh,0d9bdf44dh,01b1011a6h,0e6f1fe80h,0d9acdc78h,0b63accbch
+ DD 01272a95bh,0cfc7e235h,0a6276ac8h,00c667717h,0e2d7eef7h,03c0d3709h,09a685b3eh,05add2b06h,014ea5d65h,0363ad32dh,08d7dd506h,0f8e01f06h,075b4aac6h,0c9ea2213h,00d353466h,0ed2a2bf9h
+ DD 0e9d3a7c3h,0439d79b5h,081b7f34bh,08e0ee5a6h,01dc4ba75h,0cf3dacf5h,0eb3310c7h,01d3d1773h,07747ae83h,0a8e67112h,0197d6b40h,031f43160h,0cd961400h,00521cceeh,0f6535768h,067246f11h
+ DD 0ef0c3133h,0702fcc5ah,07e16693bh,0247cc45dh,0c729b749h,0fd484e49h,0b218320fh,0522cef7dh,059ab93b3h,0e56ef405h,09f181071h,0225fba11h,015330ed0h,033bd6595h,01ddb32f7h,0c4be69d5h
+ DD 00448087ch,0264c7668h,071432daeh,0ac30903fh,000f9bf47h,03851b266h,06cdd6d03h,0400ed311h,0f8fd2424h,0045e79feh,0fa6da98bh,0fdfd974ah,00c1e673ah,045c9f641h,05b2c5168h,076f2e733h
+ DD 02a601753h,01adaebb5h,0c57c2d49h,0b286514ch,01e0bfd24h,0d8769670h,004478922h,0950c547eh,0e5d32bfeh,0d1d41969h,0750d6c3eh,030bc1472h,0e0e27f3ah,08f3679feh,0a4a6ee0ch,08f64a7dch
+ DD 0633dfb1fh,02fe59937h,0977f2547h,0ea82c395h,0661ea646h,0cbdfdf1ah,0b9085451h,0c7ccc591h,081761e13h,082177962h,09196885ch,0da57596fh,028ffbd70h,0bc17e849h,02671d36fh,01e6e0a41h
+ DD 04152fcf5h,061ae872ch,09e77e754h,0441c87b0h,0a34dff09h,0d0799dd5h,088a6b171h,0766b4e44h,011f1c792h,0dc06a512h,04be35c3eh,0ea02ae93h,0e90c469eh,0e5ca4d6dh,056e4ff5ch,04df4368eh
+ DD 04baef62eh,07817acabh,0a85b91e8h,09f5a2202h,06ce57610h,09666ebe6h,0f73bfe03h,032ad31f3h,025bcf4d6h,0628330a4h,0515056e6h,0ea950593h,0e1332156h,059811c89h,08c11b2d7h,0c89cf1feh
+ DD 004e60cc0h,075b63913h,04625d375h,0ce811e8dh,02d26e562h,0030e43fch,0608d36a0h,0fbb30b4bh,048528118h,0634ff82ch,0cd285911h,07c6fe085h,099358f28h,07f2830c0h,0665e6c09h,02e60a95eh
+ DD 09b785dbfh,008407d3dh,0a759bce7h,0530889abh,052f61239h,0f228e0e6h,06879be3ch,02b6d1461h,051a7bbf7h,0e6902c04h,076f24a64h,030ad99f0h,098bc6da0h,066d9317ah,0cb596ac0h,0f4f877f3h
+ DD 04c44f119h,0b05ff62dh,0e9b77416h,04555f536h,08caed63bh,0c7c0d059h,0c358b2a9h,00cd2b7ceh,046945fa3h,03f33287bh,0d67c8791h,0f8785b20h,09637bd08h,0c54a7a61h,018be79d7h,054d4598ch
+ DD 0c46d7ce1h,0889e5acbh,08b085877h,09a515bb7h,00b7a5050h,0fac1a03dh,0f2926035h,07d3e738ah,02a6cb0ebh,0861cc2ceh,08f7adc79h,06f2e2955h,033016376h,061c4d451h,05ad59090h,0d9fd2c80h
+ DD 0b2b836a1h,0e5a83738h,07c0d6622h,0855b41a0h,07cc19af1h,0186fe317h,0fdd99acbh,06465c1ffh,06974b99eh,046e5c23fh,0a2717cbeh,075a7cf8bh,0062be658h,04d2ebc3fh,05f209c98h,0094b4447h
+ DD 0b940cb5ah,04af285edh,07cc82f10h,06706d792h,0030526fah,0c8c8776ch,0a0da9140h,0fa8e6f76h,0591ee4f0h,077ea9d34h,040274166h,05f46e337h,0ea671457h,01bdf98bbh,0862a1fe2h,0d7c08b46h
+ DD 01c08ad63h,046cc303ch,04c845e7bh,099543440h,048f36bf7h,01b8fbdb5h,08c8273a7h,05b82c392h,0928435d5h,008f712c4h,079330380h,0071cf0f1h,0a8da054ah,0c74c2d24h,043c46b5ch,0cb0e7201h
+ DD 0c0b7eff3h,00ad7337ah,0c5e48b3ch,08552225eh,073f13a5fh,0e6f78b0ch,082349cbeh,05e70062eh,0e7073969h,06b8d5048h,0c33cb3d2h,0392d2a29h,04ecaa20fh,0ee4f727ch,02ccde707h,0a068c99eh
+ DD 0b87a2913h,0fcd5651fh,03cc252f0h,0ea3e3c15h,03b6cd3e4h,0777d92dfh,0c5a732e7h,07a414143h,0a71ff493h,0a895951ah,0bbd37cf6h,0fe980c92h,0decfeeffh,045bd5e64h,0a44c43e9h,0910dc2a9h
+ DD 0cca9f54dh,0cb403f26h,09303f6dbh,0928bbdfbh,0a9eee67ch,03c37951eh,0f79961c3h,03bd61a52h,0395c9a79h,009a238e6h,061eb352dh,06940ca2dh,0c1875631h,07d1e5c5eh,01e1b20d1h,01e19742ch
+ DD 023fc2e6eh,04633d908h,008959149h,0a76e29a9h,084ed7da5h,061069d9ch,05dbcad51h,00baa11cfh,0961849dah,0d01eec64h,0af3d8c28h,093b75f1fh,01ca2ee44h,057bc4f9fh,000e00558h,05a26322dh
+ DD 061a023efh,01888d658h,0b9e5246eh,01d72aab4h,0e5563ec0h,0a9a26348h,0c3439a43h,0a0971963h,0adb9b5b7h,0567dd54bh,0c45a524bh,073fac1a1h,0fe38e608h,08fe97ef7h,03f384f48h,0608748d2h
+ DD 0c486094fh,0b0571794h,08bf3a8d6h,0869254a3h,0310b0e25h,0148a8dd1h,09aa3f7d8h,099ab9f3fh,06706c02eh,00927c68ah,069790e6ch,022b5e76ch,06c71376ch,06c325260h,009ef6657h,053a57690h
+ DD 0edffcf3ah,08d63f852h,03c0a6f55h,0b4d2ed04h,012519b9eh,0db3aa8deh,01e0a569ah,05d38e9c4h,0303747e2h,0871528bfh,0f5b5c18dh,0a208e77ch,0ca6bf923h,09d129c88h,0bf02839fh,0bcbf197fh
+ DD 027323194h,09b9bf030h,0339ca59dh,03b055a8bh,00f669520h,0b46b2312h,0497e5f24h,019789f1fh,0aaf01801h,09c499468h,08b69d59ch,072ee1190h,0acf4c079h,08bd39595h,08e0cd048h,03ee11eceh
+ DD 01ed66f18h,0ebde86ech,0d61fce43h,0225d906bh,0e8bed74dh,05cab07d6h,027855ab7h,016e4617fh,0b2fbc3ddh,06568aaddh,08aeddf5bh,0edb5484fh,06dcf2fadh,0878f20e8h,0615f5699h,03516497ch
+ DD 0fa181e69h,0ef0a3fech,030d69a98h,09ea02f81h,066eab95dh,0b2e9cf8eh,024720021h,0520f2bebh,01df84361h,0621c540ah,071fa6d5dh,012037721h,00ff5f6ffh,06e3c7b51h,0abb2bef3h,0817a069bh
+ DD 0b294cda6h,083572fb6h,0b9039f34h,06ce9bf75h,0095cbb21h,020e012f0h,0d063f0dah,0a0aecc1bh,0f02909e5h,057c21c3ah,048ce9cdch,0c7d59ecfh,08ae336f8h,02732b844h,03f4f85f4h,0056e3723h
+ DD 089e800cah,08a10b531h,0145208fdh,050fe0c17h,0b714ba37h,09e43c0d3h,034189acch,0427d200eh,0e616e2c0h,005dee24fh,0ee1854c1h,09c25f4c8h,08f342a73h,04d3222a5h,0a027c952h,00807804fh
+ DD 04f0d56f3h,0c222653ah,0ca28b805h,0961e4047h,04a73434bh,02c03f8b0h,0ab712a19h,04c966787h,0864fee42h,0cc196c42h,05b0ece5ch,0c1be93dah,0c131c159h,0a87d9f22h,0dce45655h,02bb6d593h
+ DD 0b809b7ceh,022c49ec9h,0e2c72c2ch,08a41486bh,0fea0bf36h,0813b9420h,0a66dac69h,0b3d36ee9h,0328cc987h,06fddc08ah,03a326461h,00a3bcd2ch,0d810dbbah,07103c49dh,04b78a4c4h,0f9d81a28h
+ DD 0e4d55941h,03de865adh,030384087h,0dedafa5eh,04ef18b9bh,06f414abbh,0faee5268h,09ee9ea42h,037a55a4ah,0260faa16h,0015f93b9h,0eb19a514h,09e9c3598h,051d7ebd2h,01932178eh,0523fc56dh
+ DD 0b98fe684h,0501d070ch,0124a1458h,0d60fbe9ah,092bc6b3fh,0a45761c8h,0fe6f27cbh,0f5384858h,0b59e763bh,04b0271f7h,05b5a8e5eh,03d4606a9h,005a48292h,01eda5d9bh,0e6fec446h,0da7731d0h
+ DD 090d45871h,0a3e33693h,006166d8dh,0e9764040h,089a90403h,0b5c33682h,072f1d637h,04bd17983h,0d5d2c53ah,0a616679eh,0fdcf3b87h,05ec4bcd8h,0b66a694eh,0ae6d7613h,0e3fc27e5h,07460fc76h
+ DD 095caabeeh,070469b82h,0889501e3h,0de024ca5h,0076ed265h,06bdadc06h,05a0ef8b2h,00cb1236bh,00972ebf9h,04065ddbfh,022aca432h,0f1dd3875h,0744aff76h,0a88b97cfh,0fe8e3d24h,0d1359afdh
+ DD 091502cf3h,052a3ba2bh,0084db75dh,02c3832a8h,0de30b1c9h,004a12dddh,0e31fd60ch,07802eabch,0a37fddabh,033707327h,0faafa973h,065d6f2abh,011e6f91ah,03525c5b8h,05f46530bh,076aeb0c9h
+ DD 02f93a675h,0e8815ff6h,005f48679h,0a6ec9684h,0358ae884h,06dcbb556h,0e19e3873h,00af61472h,0a5f696beh,072334372h,06f22fb70h,0c65e57eah,0946cea90h,0268da30ch,065681b2ah,0136a8a87h
+ DD 00f9f44d4h,0ad5e81dch,02c46585ah,0f09a6960h,0c447d1b1h,0d1649164h,0879dc8b1h,03b4b36c8h,03b6b234ch,020d4177bh,01730d9d0h,0096a2505h,0ef80531dh,00611b9b8h,064bb495dh,0ba904b3bh
+ DD 093a3147ah,01192d9d4h,09a565545h,09f30a5dch,06ef07212h,090b1f9cbh,00d87fc13h,029958546h,0c17db9bah,0d3323effh,0cb1644a8h,0cb18548ch,04f49ffbch,018a306d4h,04c2e8684h,028d658f1h
+ DD 0a99f8c71h,044ba60cdh,04bf742ffh,067b7abdbh,0914b3f99h,066310f9ch,0f412c161h,0ae430a32h,088ace52fh,01e6776d3h,052d7067dh,04bc0fa24h,08f07cd1bh,003c286aah,0a985b2c1h,04cb8f38ch
+ DD 08c3bff36h,083ccbe80h,05263e575h,0005a0bd2h,0259bdcd1h,0460d7ddah,0fa5cab6bh,04a1c5642h,09fe4fc88h,02b7bdbb9h,0cc97bbb5h,009418e28h,0a12321aeh,0d8274fb4h,05c87b64eh,0b137007dh
+ DD 0c63c4962h,080531fe1h,0981fdb25h,050541e89h,0fd4c2b6bh,0dc1291a1h,0a6df4fcah,0c0693a17h,00117f203h,0b2c4604eh,00a99b8d0h,0245f1963h,0c6212c44h,0aedc20aah,0520f52a8h,0b1ed4e56h
+ DD 0f8547be3h,0fe48f575h,0a9e45f98h,00a7033cdh,018c50100h,04b45d3a9h,0a61d41dah,0b2a6cd6ah,057933c6bh,060bbb4f5h,02b0d7ffch,0a7538ebdh,08cd626b6h,09ea3ab8dh,03601625ah,08273a484h
+ DD 00168e508h,088859845h,099a94abdh,08cbc9bb2h,0fab0a671h,0713ac792h,06c9ebffch,0a3995b19h,01239e152h,0e711668eh,0bbb8dff4h,056892558h,0dbf17963h,08bfc7dabh,0b3de1253h,05b59fe5ah
+ DD 034a9f7aeh,07e3320ebh,0d751efe4h,0e5e8cf72h,0d9be2f37h,07ea003bch,0b6c08ef7h,0c0f551a0h,0038f6725h,056606268h,06d92d3b6h,01dd38e35h,0c3cbd686h,007dfce7ch,0651c5da8h,04e549e04h
+ DD 008b19340h,04058f93bh,0cac6d89dh,0c2fae6f4h,08f159cc7h,04bad8a8ch,0cb0b601ch,00ddba4b3h,01dd95f8ch,0da4fc7b5h,0cea5c255h,01d163cd7h,0274a8c4ch,030707d06h,02802e9ceh,079d9e008h
+ DD 0e6ddd505h,002a29ebfh,0b50bed1ah,037064e74h,0a7327d57h,03f6bae65h,0f83920bch,03846f5f1h,060df1b9bh,087c37491h,02d1da29fh,04cfb2895h,04ed1743ch,010a478cah,03edd47c6h,0390c6030h
+ DD 08c0a78deh,08f3e5312h,01e85df70h,0ccd02bdah,0a61b6582h,0d6c75c03h,0fc0eebd1h,00762921ch,0d85010c0h,0d34d0823h,00044cf1fh,0d73aaacbh,0a3b5e78ah,0fb4159bbh,0e5826f3fh,02287c7f7h
+ DD 0580b1a01h,04aeaf742h,060423b79h,0f080415dh,0a7dea144h,0e12622cdh,059d62472h,049ea4996h,0571f3913h,0b42991efh,0f5b25a8ah,00610f214h,030b79e8fh,047adc585h,007a065a2h,0f90e3df6h
+ DD 043e2e034h,05d0a5debh,0444024aah,053fb5a34h,06b0c9f7fh,0a8628c68h,0ac563656h,09c69c29ch,0bace47b6h,05a231febh,09ea5a2ech,0bdce0289h,09463853eh,005da1fach,0509e78aah,096812c52h
+ DD 057151692h,0d3fb5771h,0d98e1c44h,0eb2721f8h,032399be1h,0c0506087h,0d979d8b8h,0da5a5511h,0c6f56780h,0737ed55dh,00dc7a7f4h,0e20d3004h,0f5941a03h,002ce7301h,0ed30f83ah,091ef5215h
+ DD 04092d85fh,028727fc1h,05c49e41ah,072d223c6h,0ba6a4d81h,0a7cf30a2h,0b030d87dh,07c086209h,0fc588b09h,004844c7dh,05874bbb0h,0728cd499h,0e84c0495h,0cc1281eeh,0ec31958fh,00769b5bah
+ DD 0f99c2471h,0665c228bh,0191eb110h,0f2d8a11bh,0d36d7024h,04594f494h,0cdcb25a1h,0482ded8bh,0dadd4885h,0c958a9d8h,0f1d2b547h,07004477eh,02a0af550h,00a45f6efh,02f8d6351h,04fc739d6h
+ DD 0786f08a9h,075cdaf27h,042c2737fh,08700bb26h,01c4e2670h,0855a7141h,015076fefh,0810188c1h,0abcd3297h,0c251d0c9h,0f48108ebh,0ae4c8967h,018ceed30h,0bd146de7h,0c986bcedh,0f9d4f07ah
+ DD 083fa1e08h,05ad98ed5h,0beabd1fbh,07780d33eh,0903b1196h,0e330513ch,0a47bc8c4h,0ba11de9eh,002c2d064h,0684334dah,0a48de23bh,07ecf360dh,00a9089d8h,057a1b474h,0ff36734ch,0f28fa439h
+ DD 0ea4570b3h,0f2a482cbh,0a5ebcee9h,0ee65d68bh,0b9694cd5h,0988d0036h,037885d32h,053edd0e9h,0beb9bc6dh,0e37e3307h,09f5c6768h,0e9abb907h,051f2160fh,04396ccd5h,047336da6h,02500888ch
+ DD 0926fce43h,0383f9ed9h,004da2930h,0809dd1c7h,08a4cb227h,030f6f596h,073a56b38h,00d700c7fh,0ab64a065h,01825ea33h,01338df80h,0aab9b735h,09b63f57fh,01516100dh,027a6a634h,02574395ah
+ DD 0700a1acdh,0b5560fb6h,0fd999681h,0e823fd73h,06cb4e1bah,0da915d1fh,06ebe00a3h,00d030118h,089fca8cdh,0744fb0c9h,0f9da0e0bh,0970d01dbh,07931d76fh,00ad8c564h,0f659b96ah,0b15737bfh
+ DD 0a8b484e7h,0dc9933e8h,07a26dec7h,0b2fdbdf9h,09f1f0136h,02349e9a4h,070fddddbh,07860368eh,0f9ad3e18h,0d93d2c1ch,0689f4e79h,06d6c5f17h,0b24ff1b6h,07a544d91h,0fe16cd8ch,03e12a5ebh
+ DD 0a56b872fh,0543574e9h,0fcf68ea2h,0a1ad550ch,03f560ef7h,0689e37d2h,0c9d47a8bh,08c54b9cah,0088ac342h,046d40a4ah,01576c6d0h,0ec450c7ch,01f9689e9h,0b589e31ch,0b8781718h,0dacf2602h
+ DD 0c8cb6b42h,0a89237c6h,0b96ef381h,01326fc93h,0b5f07825h,055d56c6dh,07449e22dh,0acba2eeah,0633c3000h,074e0887ah,0d7cbcf71h,0cb6cd172h,0c36cf1beh,0309e81deh,060ae399bh,007a18a6dh
+ DD 09edce57eh,0b36c2679h,0df001d41h,052b892f4h,016a1f2c6h,0d884ae5dh,0efcc370ah,09b329424h,0bd2e21dfh,03120daf2h,002470a99h,055298d2dh,0a05db32eh,00b78af6ch,0601f5636h,05c76a331h
+ DD 0f8a4f29ch,0aae861ffh,0d68f8d49h,070dc9240h,081b1321ch,0960e649fh,08792e4ceh,03d2c801bh,042521876h,0f479f772h,0416c79b1h,00bed93bch,0263e5bc9h,0a67fbc05h,0521db049h,001e8e630h
+ DD 0c6f3431eh,076f26738h,0e3267541h,0e609cb02h,0818c877ch,0b10cff2dh,0786a13cbh,01f0e75ceh,01158544dh,0f4fdca64h,06cb71ed0h,05d777e89h,0a9aa4755h,03c233737h,0e527ab40h,07b453192h
+ DD 039f05ffeh,0db59f688h,06d82574eh,08f4f4be0h,0ee292d1bh,0cce3450ch,061ccd086h,0aa448a12h,0f7914967h,0abce91b3h,01908a5edh,04537f09bh,0f51042e7h,0a812421eh,0ec0b3a34h,0faf5cebch
+ DD 04ca6b39ah,0730ffd87h,002efd342h,070fb72edh,0d75c8edbh,0eb4735f9h,0c278aa51h,0c11f2157h,0bf3bfebfh,0c459f635h,06bd9601fh,03a1ff0b4h,0c420cb73h,0c9d12823h,03c2915a3h,03e9af3e2h
+ DD 0b41c3440h,0e0c82c72h,0e3039a5fh,0175239e5h,0558795a3h,0e1084b8ah,0d01e5c60h,0328d0a1dh,0d3788a04h,00a495f2eh,066c11a9fh,025d8ff16h,09ed692d6h,0f5155f05h,04f425fe4h,0954fa107h
+ DD 0e98aaa99h,0d16aabf2h,096b0f88ah,090cd8ba0h,0c154026ah,0957f4782h,052af56d2h,054ee0734h,045b4147ah,0bcf89e54h,09a52816ch,03d102f21h,039b62e77h,06808517eh,069169ad8h,092e25421h
+ DD 0bb608558h,0d721d871h,0f6d4ff9bh,060e4ebaeh,041f2763eh,00ba10819h,051ee3247h,0ca2e45beh,02bfd7a5fh,066d172ech,074d0b12dh,0528a8f2fh,0dabe70dch,0e17f1e38h,09f93983ch,01d5d7316h
+ DD 0df423e31h,051b2184ah,0aedb1a10h,0cb417291h,0625bcab9h,02054ca93h,0a98998f0h,054396860h,0a54ae57eh,04e53f6c4h,0ee648e9dh,00ffeb590h,06afaf6bch,0fbbdaadch,0aa3bfb8ah,0f88ae796h
+ DD 0d2359ed9h,0209f1d44h,0f3544ce2h,0ac68dd03h,0fd51e569h,0f378da47h,02cc80097h,0e1abd860h,0343b6e3ah,023ca18d9h,0b40a1baeh,0480797e8h,0533f3e67h,0d1f0c717h,006e6cdfch,044896970h
+ DD 052a82e8dh,08ca21055h,078460cdch,0b2caf785h,0e9037178h,04c1b7b62h,0db514b58h,0efc09d2ch,09113be5ch,05f2df9eeh,0b3f9271ch,02fbda78fh,08f83fc54h,0e09a81afh,08afb5141h,006b13866h
+ DD 043e3865dh,038f6480fh,01ddf47d9h,072dd77a8h,04c205ff7h,0f2a8e971h,09d088ad8h,046d449d8h,0185d706fh,0926619eah,0c7dd7f62h,0e47e02ebh,08cbc2031h,0e7f120a7h,0998d4ac9h,0c18bef00h
+ DD 06bdf22dah,018f37a9ch,090dc82dfh,0efbc432fh,05d703651h,0c52cef8eh,0d99881a5h,082887ba0h,0b920ec1dh,07cec9ddah,0ec3e8d3bh,0d0d7e8c3h,04ca88747h,0445bc395h,09fd53535h,0edeaa2e0h
+ DD 06cc87475h,0461b1d93h,06d2383bdh,0d92a52e2h,0d7903546h,0fabccb59h,03d14b112h,06111a761h,0b3d5f612h,00ae584feh,060e828ech,05ea69b8dh,054087030h,06c078985h,0ac4821feh,0649cab04h
+ DD 08bdce214h,025ecedcfh,086af7361h,0b5622f72h,07038b9e2h,00e1227aah,0ac20fa77h,0d0efb273h,079df975bh,0817ff88bh,01999503eh,0856bf286h,05038ec46h,0b4d5351fh,0fc42af6eh,0740a52c5h
+ DD 02cbb1a3fh,02e38bb15h,017a83429h,0c3eb99feh,0dd66bb74h,0ca4fcbf1h,0cde5e8fch,0880784d6h,0b4e7a0beh,0ddc84c1ch,0bd15a72fh,08780510dh,081ec30e1h,044bcf1afh,00a61073eh,0141e50a8h
+ DD 047be87aeh,00d955718h,0f76a4372h,068a61417h,0c607c3d3h,0f57e7e87h,05252f332h,0043afaf8h,01552a4d2h,0cc14e121h,0bb4d4ab4h,0b6dee692h,0a03816a4h,0b6ab74c8h,06f394a29h,084001ae4h
+ DD 0d795fb45h,05bed8344h,0b79f55a5h,057326e7dh,04accdffch,0c9533ce0h,03993fa04h,053473cafh,0a13df4c8h,07906eb93h,097cbe46fh,0a73e51f6h,00ae4ccf8h,0d1ab3ae1h,08a5b3dbch,025614508h
+ DD 011a71b27h,061eff962h,06bb7fa39h,0df71412bh,02bd7f3efh,0b31ba6b8h,069180d29h,0b0b9c415h,0014cdde5h,0eec14552h,0227b4bbbh,0702c624bh,0d3e988f3h,02b15e8c2h,0a4f7fd04h,0ee3bcc6dh
+ DD 042ac6c85h,09d00822ah,01df9f2b7h,02db0cea6h,042de1e58h,0d7cad2abh,02d6fbb61h,0346ed526h,01a2faf09h,0b3962995h,07c25612eh,02fa8a580h,07cf56490h,030ae04dah,00eea3961h,075662908h
+ DD 03d080847h,03609f5c5h,05241d4f6h,0cb081d39h,077961a63h,0b4fb3810h,02abb66fch,0c20c5984h,0f902f245h,03d40aa7ch,04e536b1eh,09cb12736h,099b3134fh,05eda24dah,05cd011afh,0afbd9c69h
+ DD 0c7088c7dh,09a16e30ah,03207389fh,05ab65710h,0e7407a53h,01b09547fh,04fdc6eabh,02322f9d7h,07430de4dh,0c0f2f22dh,0e68ca9a9h,019382696h,0918e5868h,017f1eff1h,0586f4204h,0e3b5b635h
+ DD 03fbc4341h,0146ef980h,05b5eed4eh,0359f2c80h,07482e41dh,09f35744eh,0f3b224c2h,09a9ac3ech,091fc50aeh,09161a6feh,0c613fa7ch,089ccc66bh,0c732f15ah,089268b14h,0b467ed03h,07cd6f4e2h
+ DD 0ce56b40eh,0fbf79869h,0c02dde98h,0f93e094ch,0edee2cd7h,0efe0c3a8h,0b268fd42h,090f3ffc0h,008241aedh,081a7fd56h,000b1afe8h,095ab7ad8h,03e310d52h,040127056h,009d9fc43h,0d3ffdeb1h
+ DD 0d11a8594h,0c8f85c91h,031cf6db8h,02e74d258h,002b5dfd0h,0829c7ca3h,069143c86h,0e389cfbeh,0941768d8h,0d01b6405h,003bf825dh,045103995h,056cd17e2h,0cc4ee166h,0ba037e79h,0bea3c283h
+ DD 0d9a47520h,04e1ac06eh,0af852404h,0fbfe18aah,08087648ah,05615f8e2h,0b9d150d9h,07301e47eh,0b299b977h,079f9f9ddh,0a5b78314h,076697a7bh,07d7c90e7h,010d67468h,0937210b5h,07afffe03h
+ DD 028c22ceeh,05aef3e4bh,009fd55aeh,0efb0ecd8h,00d2a5d6ah,04cea7132h,001db6357h,09cfb5fa1h,0f36e1ac5h,0395e0b57h,036cafb7dh,0008fa9adh,05308c4dbh,08f6cdf70h,095ed2477h,051527a37h
+ DD 05bd21311h,0ba0dee30h,0909c90d7h,06ed41b22h,07c8696d3h,0c5f6b758h,03ce83a80h,00db8eaa8h,0b24b4b6fh,0d297fe37h,0522d1f0dh,0fe58afe8h,08c98dbd9h,097358736h,09454a527h,06bc226cah
+ DD 0ce53c2d0h,0a12b384eh,05e4606dah,0779d897dh,073ec12b0h,0a53e47b0h,05756f1adh,0462dbbbah,0cafe37b6h,069fe09f2h,0ecce2e17h,0273d1ebfh,03cf607fdh,08ac1d538h,012e10c25h,08035f7ffh
+ DD 07e6c5520h,0854d34c7h,0dcb9ea58h,0c27df9efh,0d686666dh,0405f2369h,00417aa85h,029d1febfh,093470afeh,09846819eh,0e2a27f9eh,03e6a9669h,0e31e6504h,024d008a2h,09cb7680ah,0dba7cecfh
+ DD 0338d6e43h,0ecaff541h,04541d5cch,056f7dd73h,096bc88cah,0b5d426deh,09ed3a2c3h,048d94f6bh,02ef8279ch,06354a3bbh,00b1867f2h,0d575465bh,095225151h,0ef99b0ffh,0f94500d8h,0f3e19d88h
+ DD 0e32dd620h,092a83268h,0627849a2h,0913ec99fh,02c378882h,0edd8fdfah,0ee6f8cfeh,0af96f33eh,0dc3fa8a5h,0c06737e5h,0b0b03a1dh,0236bb531h,089f037b0h,033e59f29h,0d9a12a53h,013f9b5a7h
+ DD 051efb310h,00d0df6ceh,0958df5beh,0cb5b2eb4h,036158e59h,0d6459e29h,01466e336h,082aae2b9h,0411aa636h,0fb658a39h,0d4c0a933h,07152ecc5h,049f026b7h,0f10c758ah,0cb09311fh,0f4837f97h
+ DD 0c753c45fh,0ddfb02c4h,0f9c840feh,018ca81b6h,0b0f8a3e6h,0846fd09ah,0e7733dbch,0b1162addh,0236e3ab6h,07070ad20h,0b2a56326h,0f88cdaf5h,0997cbc7ah,005fc8719h,04b665272h,0442cd452h
+ DD 0b71698f5h,07807f364h,09f7b605eh,06ba418d2h,0a03b2cbbh,0fd20b00fh,0da54386fh,0883eca37h,0f3437f24h,0ff0be43fh,0a48bb33ch,0e910b432h,0329df765h,04963a128h,0be2fe6f7h,0ac1dd556h
+ DD 024a0a3fch,0557610f9h,0e881c3f9h,038e17bf4h,0ed0dac99h,06ba84fafh,059eeb918h,0d4a222c3h,013f542b6h,0c79c1dbeh,0e425d457h,01fc65e0dh,01debb779h,0effb754fh,09e08af60h,0638d8fd0h
+ DD 0626332d5h,0994f523ah,05561bb44h,07bc38833h,03d845ea2h,0005ed4b0h,0c2a1f08ah,0d39d3ee1h,0e7676b0dh,06561fdd3h,0fb706017h,0620e35ffh,0f264f9a8h,036ce424fh,0da2681f7h,0c4c3419fh
+ DD 069beb6e8h,0fb6afd2fh,06d700d03h,03a50b993h,00c83a14fh,0c840b2adh,054085befh,0573207beh,009fe7e5bh,05af882e3h,03b40a7e1h,0957678a4h,0543056e2h,0172d4bddh,00df13c0ah,09c1b26b4h
+ DD 0f405ff06h,01c30861ch,0486e828bh,0ebac86bdh,0636933fch,0e791a971h,07aeee947h,050e7c2beh,0fa90d767h,0c3d4a095h,0e670ab7bh,0ae60eb7bh,0397b056dh,017633a64h,0105012aah,093a21f33h
+ DD 0abb88643h,0663c370bh,022e21599h,091df36d7h,08b761671h,0183ba835h,0728f3bf1h,0381eea1dh,039966e6ch,0b9b2f1bah,0e7295492h,07c464a28h,009b26b7fh,00fd5f70ah,0fbe009dfh,0a9aba1f9h
+ DD 0369b87adh,0857c1f22h,032fca556h,03c00e5d9h,090b06466h,01ad74cabh,0550faaf2h,0a7112386h,06d9bd5f5h,07435e198h,059c3463fh,02dcc7e38h,0ca7bd4b2h,0dc7df748h,09dec2f31h,013cd4c08h
+ DD 0e3237710h,00d3b5df8h,0cbd2f7b0h,00dadb26eh,0e4aa082bh,09f5966abh,0350e966eh,0666ec8deh,0ee524216h,01bfd1ed5h,041dab0b6h,0cd93c59bh,0d186d6bah,0658a8435h,0159d1195h,01b7d34d2h
+ DD 022caf46bh,05936e460h,09a96fe4fh,06a45dd8fh,0b98f474eh,0f7925434h,00053ef15h,041410412h,041de97bfh,071cf8d12h,0bd80bef4h,0b8547b61h,0c4db0037h,0b47d3970h,0fef20dffh,0f1bcd328h
+ DD 010caad67h,031a92e09h,05531a1e1h,01f591960h,05f4fc840h,03bb852e0h,093a72c6ch,063e297cah,049abad67h,03c2b0b2eh,0ed3db0d9h,06ec405fch,07fef1d40h,0dc14a530h,0280896fch,0ccd19846h
+ DD 09bb81648h,000f83176h,0653120d0h,0d69eb485h,04ccabc62h,0d17d75f4h,0b749fcb1h,034a07f82h,0bbfb5554h,02c3af787h,062e283f8h,0b06ed4d0h,0a19213a0h,05722889fh,0dcf3c7b4h,0162b085eh
+ DD 0e0dd3ecah,0bcaecb31h,0e52f13a5h,0c6237fbch,027bac297h,0cc2b6b03h,0b917f54ah,02ae1cac5h,07845ae4fh,0474807d4h,0ce5972e0h,0fec7dd92h,01d7915bbh,0c3bd2541h,0d94907cah,066f85dc4h
+ DD 0bdbcf0cah,0d981b888h,0df279e9fh,0d75f5da6h,07054e934h,0128bbf24h,081db134bh,03c6ff6e5h,0047d26e4h,0795b7cf4h,05049ec37h,0f370f7b8h,0ced945afh,0c6712d4dh,0095642bch,0df30b5ech
+ DD 04896246eh,09b034c62h,0ee90bbd1h,05652c016h,087fedb73h,0eb38636fh,00135a613h,05e32f847h,0cf933c83h,00703b312h,01a7f47e6h,0d05bb76eh,0949c2415h,0825e4f0ch,07250d6f8h,0569e5622h
+ DD 06568013eh,0bbe9eb3ah,022f243fch,08dbd203fh,0b342734ah,09dbd7694h,046afa984h,08f6d12f8h,0c9eade29h,0b98610a2h,047dd0f18h,0bab4f323h,0671c0d46h,05779737bh,0d3e0a42ah,010b6a7c6h
+ DD 03035b41ch,0fb19ddf3h,099c45895h,0d336343fh,054c857e5h,061fe4938h,0ae4e57d5h,0c4d506beh,0bbc33f75h,03cd8c8cbh,09262c77dh,07281f08ah,0f11a2823h,0083f4ea6h,09fba2e33h,08895041eh
+ DD 09c438edfh,0fcdfea49h,091edba44h,07678dcc3h,0e2ba50f0h,0f07b3b87h,043948c1bh,0c13888efh,01140af42h,0c2135ad4h,0926ed1a7h,08e5104f3h,088f6695fh,0f24430cbh,06d73c120h,00ce0637bh
+ DD 0fe631e8fh,0b2db01e6h,0d7bdd24bh,01c5563d7h,0369ad44fh,08daea3bah,08187a9f9h,0000c81b6h,0aae1fd9ah,05f48a951h,08d5aed8ah,0e35626c7h,00498c622h,020952763h,0773aa504h,076d17634h
+ DD 0eb300f7ah,036d90ddah,0edb5e801h,09dcf7dfch,074d5244ch,0645cb268h,0348e3aa2h,0a127ee79h,0575f1dbbh,0488acc53h,080e6161eh,095037e85h,0292650d0h,057e59283h,014938216h,0abe67d99h
+ DD 03f8e1065h,03c7f944bh,0330e8924h,0ed908cb6h,06f530136h,008ee8fd5h,0d7ffc169h,02227b7d5h,0b5cd6dd5h,04f55c893h,0a62796e8h,082225e11h,0cb18e12ch,05c6cead1h,084f5a51ah,04381ae0ch
+ DD 07fafa4c8h,0345913d3h,00491aac0h,03d918082h,03e69264ch,09347871fh,0b4f4f0cdh,0bea9dd3ch,03eadd3e7h,0bda5d067h,00573bcd8h,00033c1b8h,05da2486ch,025589379h,086abbee7h,0cb89ee5bh
+ DD 022532e5dh,08fe0a8f3h,0727dfc4ch,0b6410ff0h,0226726dbh,0619b9d58h,07a2b2dc7h,05ec25669h,04c3beb01h,0af4d2e06h,07acea556h,0852123d0h,0f783487ah,00e9470fah,05664b3ebh,075a7ea04h
+ DD 06798e4bah,04ad78f35h,0c7d0e091h,09214e6e5h,0b1290403h,0c420b488h,0fc295749h,064049e0ah,03ae9841fh,003ef5af1h,0b0b662a6h,0dbe4ca19h,0fa453458h,046845c5fh,010b66722h,0f8dabf19h
+ DD 0cce2793bh,0b650f0aah,0c5ec47c1h,071db851eh,03b234fa9h,03eb78f3eh,0fc0106ceh,0b0c60f35h,0774eadbdh,005427121h,0ce323863h,025367fafh,0cd086976h,07541b5c9h,0dc507ad1h,04ff069e2h
+ DD 08776e667h,074145256h,0b23c6bb5h,06e76142ch,01b3a8a87h,0dbf30712h,098450836h,060e7363eh,0b7366d80h,05741450eh,04837dbdfh,0e4ee14cah,069d4316fh,0a765eb9bh,08ef43825h,004548dcah
+ DD 05ae888ebh,09c9f4e4ch,056e9ac99h,0733abb51h,0ba6ac029h,0daad3c20h,02ba3e38eh,09b8dd3d3h,00bc5d11ah,0a9bb4c92h,09c5f88a3h,0f20127a7h,0161d3cb8h,04f52b06eh,06afaf0a6h,026c1ff09h
+ DD 07189e71fh,032670d2fh,05ecf91e7h,0c6438748h,0db757a21h,015758e57h,0290a9ce5h,0427d09f8h,038384a7ah,0846a308fh,0b0732b99h,0aac3acb4h,017845819h,09e941009h,0a7ce5e03h,095cba111h
+ DD 0b00009c4h,06f3d4f7fh,08ff28b5fh,0b8396c27h,01c97975dh,0b1a9ae43h,0e5d9fed5h,09d7ba8afh,034f485b6h,0338cf09fh,064122516h,0bc0ddacch,005d471feh,0a450da12h,0628dd8c9h,04c3a6250h
+ DD 0d1295837h,069c7d103h,03807eb2fh,0a2893e50h,0bdb41491h,0d6e1e1deh,05e138235h,0c630745bh,048661ae1h,0c892109eh,0ea2b2674h,08d17e7ebh,0c328d6b5h,000ec0f87h,0f079ff9eh,06d858645h
+ DD 019115eadh,06cdf243eh,04bac4fcfh,01ce1393eh,09c29f25bh,02c960ed0h,09d388a05h,059be4d8eh,0d0def72bh,00d46e06ch,0e0342748h,0b923db5dh,0936d4a3dh,0f7d3aacdh,00b0b099eh,0558519cch
+ DD 0827097efh,03ea8ebf8h,0d054f55dh,0259353dbh,06d2ed089h,084c89abch,08e096a7ch,05c548b69h,0994b995dh,0d587f616h,0a5845601h,04d1531f6h,0451fd9f0h,0792ab31eh,065adf6cah,0c8b57bb2h
+ DD 01cd5ad73h,068440fcbh,06144da4fh,0b9c860e6h,08462beb8h,02ab286aah,0ef46797fh,0cc6b8fffh,020c8a471h,0ac820da4h,077ff7fafh,069ae05a1h,0bfb5da77h,0b9163f39h,02c73ab7ah,0bd03e590h
+ DD 0b2940d9eh,07e862b5eh,04b9af564h,03c663d86h,0bde3033dh,0d8309031h,0d42c5bc6h,0298231b2h,0552ad093h,042090d2ch,0ff854695h,0a4799d1ch,0d31f0d00h,00a88b5d6h,0a2f26b46h,0f8b40825h
+ DD 0f1bd7218h,0ec29b1edh,04b24c86eh,0d491c53bh,03395ea65h,0d2fe588fh,04456ef15h,06f3764f7h,0cdc34800h,0db43116dh,0c1e33955h,0cdbcd456h,074ab286bh,0efdb5540h,0d18c5d7ch,0948c7a51h
+ DD 07378058eh,0eb81aa37h,004411154h,041c746a1h,0fb828ac7h,0a10c73bch,09d972b29h,06439be91h,043a2fbadh,04bf3b4b0h,082b5e840h,039e6dadfh,06397bd4ch,04f716408h,07f1eeccbh,00f7de568h
+ DD 0d2ffbfc1h,05865c5a1h,04ccb6451h,0f74211fah,0c0b32558h,066368a88h,09ad7812eh,05b539dc2h,02f3af6f6h,0579483d0h,099934eceh,052132078h,0dcc9e983h,050b9650fh,0aee42b8ah,0ca989ec9h
+ DD 0d6f62f99h,06a44c829h,04c2a7c0ch,08f06a309h,098a0cb0ah,04ea2b3a0h,0beee8364h,05c547b70h,0682afe11h,0461d40e1h,07b41c0a8h,09e0fc77ah,0e20d5d36h,079e4aefdh,032dd9f63h,02916e520h
+ DD 03f883fafh,0f59e52e8h,02b868d35h,0396f9639h,04ca19881h,0c902a9dfh,0db2401a6h,00fc96822h,066f1c68dh,041237587h,0fb476c0dh,010fc6de3h,0841f5d90h,0f8b6b579h,0fa24f44ah,02ba8446ch
+ DD 0ef4a9975h,0a237b920h,02330435fh,060bb6004h,0cfb7e7b5h,0d6f4ab5ah,083435391h,0b2ac5097h,0b0d1ea67h,0f036ee2fh,074c56230h,0ae779a6ah,0ab838ae6h,059bff8c8h,09b38e6f0h,0cd83ca99h
+ DD 0e33deed3h,0bb27bef5h,0001892a8h,0e6356f6fh,07adfbd3eh,0bf3be6cch,033d1ac9dh,0aecbc81ch,0e6e861dch,0e4feb909h,053f5f801h,090a247a4h,027346e57h,001c50acbh,0461acc1bh,0ce29242eh
+ DD 02f998a91h,004dd214ah,0d4baf27bh,0271ee9b1h,0e8c26722h,07e3027d1h,01820dce5h,021d1645ch,07501779ch,0086f242ch,0fa0e8009h,0f0061407h,060187129h,0f23ce477h,00fde9bd0h,005bbdedbh
+ DD 025d98473h,0682f4832h,05c658427h,0f207fe85h,04166ffa1h,0b6fdd7bah,09eed799dh,00c314056h,04107e28fh,00db8048fh,041216840h,074ed3871h,056a3c06eh,074489f8fh,012777134h,01e1c005bh
+ DD 0f37ec3c3h,0db332a73h,0dd59eba0h,0c65259bdh,0db4d3257h,02291709ch,0bd389390h,09a793b25h,0e43756f0h,0f39fe34bh,09afb56c9h,02f76bdceh,061208b27h,09f37867ah,0089972c3h,0ea1d4307h
+ DD 08bdf623ah,08c595330h,08441fb7dh,05f5accdah,032ddfd95h,0fafa9418h,00fde9be7h,06ad40c5ah,0aeca8709h,043faba89h,02c248a9dh,0c64a7cf1h,072637a76h,016620252h,022b8d1bbh,0aee1c791h
+ DD 021a843b2h,0f0f798fdh,08d005cb1h,056e4ed4dh,01f0d8abeh,0355f7780h,034522326h,0197b04cfh,0fd42c13fh,041f9b31fh,0b40f933dh,05ef7feb2h,05d60bad4h,027326f42h,08c92cf89h,0027ecdb2h
+ DD 04e3352feh,004aae4d1h,073591b90h,008414d2fh,0b7da7d60h,05ed6124eh,04d13d4ech,0b985b931h,096bf36f9h,0a592d3abh,0bbdf51dfh,0012dbed5h,0df6c177dh,0a57963c0h,087ca29cfh,0010ec869h
+ DD 0bf926dffh,0ba1700f6h,0f4bf6bc2h,07c9fdbd1h,064da11f5h,0dc18dc8fh,0d938ae75h,0a6074b7ah,0e84f44a4h,014270066h,0d27b954eh,099998d38h,0b4f38e9ah,0c1be8ab2h,015c01016h,08bb55bbfh
+ DD 00ea2ab30h,0f73472b4h,0f73d68ddh,0d365a340h,019c2e1ebh,0c01a7168h,034061719h,032f49e37h,001d8b4d6h,0b73c57f1h,026b47700h,003c8423ch,0a4d8826ah,0321d0bc8h,04bc0e638h,06004213ch
+ DD 0c1c06681h,0f78c64a1h,0ef018e50h,016e0a16fh,0db42b2b3h,031cbdf91h,0e0d36f58h,0f8f4ffceh,04cc5e3e0h,0cdcc71cdh,0a129e3e0h,0d55c7cfah,00fb2cbf1h,0ccdb6ba0h,0c4bce3cbh,06aba0005h
+ DD 0d232cfc4h,0501cdb30h,0d58a3cefh,09ddcf12eh,087e09149h,002d2cf9ch,02c976257h,0dc5d7ec7h,00b50d7ddh,06447986eh,0807f112ah,088fdbaf7h,0b00ae9f6h,058c9822ah,06d3d27e0h,06abfb950h
+ DD 08a429f4fh,0d0a74487h,0db516609h,00649712bh,0e769b5dfh,0b826ba57h,01fc7aaf2h,082335df2h,05c93d995h,02389f067h,068677be6h,059ac367ah,021d9951bh,0a77985ffh,085011cceh,0038956fbh
+ DD 0bb734e37h,0608e48cbh,02be5b26fh,0c08c0bf2h,0f9b1a0d9h,017bbdd3bh,010483319h,0eac7d898h,0bc1a6deah,0c95c4bafh,0172aafdbh,0fdd0e2bfh,08235c41ah,040373cbch,0fb6f41d5h,014303f21h
+ DD 00408f237h,0ba063621h,0ecd2d1edh,0cad3b09ah,052abb6a2h,04667855ah,0aa8b417bh,0ba9157dch,04f013efbh,0fe7f3507h,0aa38c4a2h,01b112c4bh,09ba64345h,0a1406a60h,06993c80bh,0e53cba33h
+ DD 0ded40d23h,045466063h,054908e25h,03d5f1f4dh,0403c3c31h,09ebefe62h,00672a624h,0274ea0b5h,0451d1b71h,0ff818d99h,08f79cf79h,080e82643h,073ce37f5h,0a165df13h,0fe3a21fdh,0a744ef4fh
+ DD 0cf551396h,073f1e7f5h,0868c676bh,0c616898eh,08c442c36h,0671c28c7h,05e0a317dh,0cfe5e558h,07051f476h,01242d818h,014f03442h,056fad2a6h,00a44d0f6h,0262068bch,0ce6edf4eh,0dfa2cd6eh
+ DD 0d15d1517h,00f43813ah,0377d44f5h,061214cb2h,0c639b35fh,0d399aa29h,054c51c19h,042136d71h,008417221h,09774711bh,052545a57h,00a5546b3h,01150582dh,080624c41h,0fbc555bch,09ec5c418h
+ DD 0771849f1h,02c87dcadh,001d7bf6fh,0b0c932c5h,089116eb2h,06aa5cd3eh,051ca7bd3h,0d378c25ah,09e6e3e31h,0c612a0dah,0b68ad5d0h,00417a54dh,022c6edb8h,000451e4ah,0b42827ceh,09fbfe019h
+ DD 0ba9384a2h,02fa92505h,064ad69c1h,021b8596eh,0983b35a6h,08f4fcc49h,072754672h,0de093760h,0f7bffe6dh,02f14ccc8h,05d94263dh,027566bffh,02df3ec30h,0b5b4e9c6h,03e6ea6bah,094f1d7d5h
+ DD 0aaca5e9bh,097b7851ah,056713b97h,0518aa521h,0150a61f6h,03357e8c7h,0ec2c2b69h,07842e7e2h,06868a548h,08dffaf65h,0e068fc81h,0d963bd82h,065917733h,064da5c8bh,07b247328h,0927090ffh
+ DD 0d298c241h,0214bc9a7h,056807cfdh,0e3b697bah,04564eadbh,0ef1c7802h,0b48149c5h,0dde8cdcfh,05a4d2604h,0946bf0a7h,06c1538afh,027154d7fh,0de5b1fcch,095cc9230h,066864f82h,0d88519e9h
+ DD 07cb1282ch,0b828dd1ah,0be46973ah,0a08d7626h,0e708d6b2h,06baf8d40h,04daeb3f3h,072571fa1h,0f22dfd98h,085b1732fh,00087108dh,087ab01a7h,05988207ah,0aaaafea8h,069f00755h,0ccc832f8h
+ DD 036ff3bf0h,0964d950eh,0f0b34638h,08ad20f6fh,0b5d7585fh,04d9177b3h,0ef3f019fh,0cf839760h,08288c545h,0582fc5b3h,013116bd1h,02f8e4e9bh,0332120efh,0f91e1b2fh,02a17dd23h,0cf568724h
+ DD 0ca8d9d1ah,0488f1185h,0d987ded2h,0adf2c77dh,060c46124h,05f3039f0h,071e095f4h,0e5d70b75h,06260e70fh,082d58650h,0f750d105h,039d75ea7h,075bac364h,08cf3d0b1h,021d01329h,0f3a7564dh
+ DD 02f52d2a7h,0182f04cdh,0e2df565ah,04fde149ah,0a79fb2f7h,0b80c5eech,022ddc897h,0ab491d7bh,0c6312c7fh,099d76c18h,06aa41a57h,0ca0d5f3dh,0d15363a0h,071207325h,0beb252c2h,0e82aa265h
+ DD 0ec3128c2h,094ab4700h,08e383f49h,06c76d862h,0c03024ebh,0dc36b150h,053daac69h,0fb439477h,08dc79623h,0fc68764ah,0b440fbb2h,05b86995dh,0ccc5ee0dh,0d66879bfh,095aa8bd3h,005228942h
+ DD 01e6a75c1h,0b51a40a5h,00ea7d817h,024327c76h,007774597h,006630182h,097fa7164h,0d6fdbec3h,013c90f48h,020c99dfbh,0686ef263h,0d6ac5273h,0fef64eebh,0c6a50bdch,086fdfc32h,0cd87b281h
+ DD 03fcd3efch,0b24aa43eh,0b8088e9ah,0dd26c034h,0bd3d46eah,0a5ef4dc9h,08a4c6a6fh,0a2f99d58h,02f1da46ch,0ddabd355h,01afacdd1h,072c3f8ceh,092d40578h,0d90c4eeeh,0ca623b94h,0d28bb41fh
+ DD 0745edc11h,050fc0711h,03dc87558h,09dd9ad7dh,0b49d1e64h,0ce6931fbh,0c98bd0f9h,06c77a0a2h,06baf7cb1h,062b9a629h,0ccf72d22h,0cf065f91h,079639071h,07203cce9h,0f9cb732fh,009ae4885h
+ DD 0ee8314f3h,05e7c3bech,0dbea298fh,01c068aedh,07c80acech,008d381f1h,0e330495bh,003b56be8h,09222882dh,0aeffb8f2h,0c4af8bf7h,095ff38f6h,01fc57d8ch,050e32d35h,017b444f0h,06635be52h
+ DD 0a5177900h,004d15276h,0f6858752h,04e1dbb47h,0c615796ch,05b475622h,0691867bfh,0a6fa0387h,02844c6d0h,0ed7f5d56h,003a2477dh,0c633cf9bh,02d3721d6h,0f6be5c40h,0e9fd68e6h,0af312eb7h
+ DD 0e7417ce1h,0242792d2h,0970ee7f5h,0ff42bc71h,05c67a41eh,01ff4dc6dh,020882a58h,077709b7bh,0be217f2ch,03554731dh,05bb72177h,02af2a8cdh,0591dd059h,058eee769h,04bba6477h,0bb2930c9h
+ DD 07d930cfch,0863ee047h,0396fd1f4h,04c262ad1h,0039af7e1h,0f4765bc8h,05ba104f6h,02519834bh,0d105f961h,07cd61b4ch,0d63bca54h,0a5415da5h,088a1f17ch,0778280a0h,02329512ch,0c4968949h
+ DD 0cecdaa7ah,0174a9126h,00b13247bh,0fc8c7e0eh,03484c1c4h,029c110d2h,0831dfc3bh,0f8eb8757h,0c0067452h,0022f0212h,07b9b926ch,03f6f69eeh,0ef42daf4h,009032da0h,083f80de4h,079f00adeh
+ DD 081236c97h,06210db71h,03ee0781fh,074f7685bh,0a3e41372h,04df7da7bh,0b1a1553eh,02aae38b1h,0f6dd9d1bh,01688e222h,05b8b6487h,057695448h,04b2edeaah,0478d2127h,01e85956ah,0b2818fa5h
+ DD 0f176f2c0h,01e6adddah,0e2572658h,001ca4604h,085342ffbh,00a404dedh,0441838d6h,08cf60f96h,0c9071c4ah,09bbc691ch,034442803h,0fd588744h,0809c0d81h,097101c85h,08c456f7fh,0a7fb754ch
+ DD 0d51805e1h,0c95f3c5ch,0b299dca8h,0ab4ccd39h,047eaf500h,03e03d20bh,0d7b80893h,0fa3165c1h,0e160e552h,0005e8b54h,09019d11fh,0dc4972bah,00c9a4a7ah,021a6972eh,037840fd7h,0a52c258fh
+ DD 0c1e99d81h,0f8559ff4h,0a3c617c0h,008e1a7d6h,0248c6ba7h,0b398fd43h,0d1283794h,06ffedd91h,0d629d208h,08a6a59d2h,03490530eh,0a9d141d5h,038505989h,042f6fc18h,0479d94eeh,009bf250dh
+ DD 0b3822790h,0223ad3b1h,093b8971ch,06c5926c0h,075f7fa62h,0609efc7eh,01ec2d989h,045d66a6dh,0987d2792h,04422d663h,03eb31d2bh,04a73caadh,0a32cb9e6h,0f06c2ac1h,091aeba84h,0d9445c5fh
+ DD 0af71013fh,06af7a1d5h,00bedc946h,0e68216e5h,0d27370a0h,0f4cba30bh,0870421cch,07981afbfh,09449f0e1h,002496a67h,00a47edaeh,086cfc4beh,0b1feca22h,03073c936h,003f8f8fbh,0f5694612h
+ DD 0901515eah,0d063b723h,0749cf038h,04c6c77a5h,0ab9e5059h,06361e360h,0a76a37c0h,0596cf171h,06530ae7ah,0800f53fah,00792a7a6h,00f5e631eh,0efdb81c9h,05cc29c24h,03f9c40bah,0a269e868h
+ DD 02cb7191eh,0ec14f9e1h,0e5b08ea6h,078ea1bd8h,046332bb9h,03c65aa9bh,0bf80ce25h,084cc22b3h,0d49d5bf1h,00098e9e9h,019087da4h,0cd4ec1c6h,0aef6e357h,03c9d07c5h,09f8f64b8h,0839a0268h
+ DD 0c6d8607fh,0c5e9eb62h,06aa995e4h,0759689f5h,0bbb48317h,070464669h,0e402417dh,0921474bfh,02a354c8ch,0cabe135bh,0812fa4b5h,0d51e52d2h,053311fe8h,0ec741096h,0b864514bh,04f774535h
+ DD 05bde48f8h,0bcadd671h,02189bc7dh,0c9703873h,0c709ee8ah,05d45299eh,0845aaff8h,0d1287ee2h,0db1dbf1fh,07d1f8874h,0990c88d6h,0ea46588bh,084368313h,060ba649ah,060d543aeh,0d5fdcbceh
+ DD 0810d5ab0h,090b46d43h,004d7e5cch,06739d8f9h,00d337c33h,0021c1a58h,068e67c40h,000a61162h,0379f0a1fh,095ef413bh,0e9e2ab95h,0fe126605h,02f5f199ch,067578b85h,02cb84913h,0f5c00329h
+ DD 037577dd8h,0f7956430h,029c5fe88h,083b82af4h,0cdbdc132h,09c1bea26h,09c04339eh,0589fa086h,0b13799dfh,0033e9538h,0d295d034h,085fa8b21h,0bd9ddccah,0df17f73fh,0ddb66334h,0f32bd122h
+ DD 0858b044ch,055ef88a7h,05aa9e397h,01f0d69c2h,040d85559h,055fd9cc3h,07785ddb2h,0c774df72h,0d3bd2e1ch,05dcce9f6h,0a85dfed0h,0eb30da20h,0d3ed09c4h,05ed7f5bbh,082a9c1bdh,07d42a35ch
+ DD 09890272dh,0cf3de995h,03e713a10h,075f3432ah,0e28227b8h,05e13479fh,0fefacdc8h,0b8561ea9h,08332aafdh,0a6a297a0h,073809b62h,09b0d8bb5h,00c63036fh,0d2fa1cfdh,0bd64bda8h,07a16eb55h
+ DD 078e62ddch,03f5cf5f6h,007fd752bh,02267c454h,05e437bbeh,05e361b6bh,08354e075h,095c59501h,0f2b254d9h,0ec725f85h,02cb52b4eh,0844b617dh,0cf425fb5h,0ed8554f5h,02af9f312h,0ab67703eh
+ DD 03cf48283h,04cc34ec1h,09c8a705eh,0b09daa25h,05b7d4f84h,0d1e9d0d0h,0db38929dh,04df6ef64h,0aa21ba46h,0e16b0763h,0a293f8fbh,0c6b1d178h,0d520aabfh,00ff5b602h,0c339397ah,094d671bdh
+ DD 04f5792fah,07c7d98cfh,011215261h,07c5e0d67h,0a7c5a6d4h,09b19a631h,07a45274dh,0c8511a62h,0a5a60d99h,00c16621ch,0cf5e48cbh,0f7fbab88h,0f7ddee08h,0ab1e6ca2h,0e7867f3ch,083bd08ceh
+ DD 02ac13e27h,0f7e48e8ah,04eb1a9f5h,04494f6dfh,0981f0a62h,0edbf84ebh,0536438f0h,049badc32h,0004f7571h,050bea541h,0df1c94eeh,0bac67d10h,0b727bc31h,0253d73a1h,030686e28h,0b3d01cf2h
+ DD 055fd0b8bh,051b77b1bh,0feec3173h,0a099d183h,0670e72b7h,0202b1fb7h,0a8e1635fh,0adc88b33h,0f989d905h,034e8216ah,029b58d01h,0c2e68d20h,06fe55a93h,011f81c92h,08f296f40h,015f1462ah
+ DD 0ea3d62f2h,01915d375h,001c8977dh,0a17765a3h,0e47b26f6h,07559710ah,0535077a5h,0e0bd29c8h,008d84858h,0615f976dh,069ced5c1h,0370dfe85h,0a734fa56h,0bbc7503ch,091ac4574h,0fbb9f1ech
+ DD 0060dd7efh,095d7ec53h,06e657979h,0eef2dacdh,0e2a08235h,054511af3h,01f4aea3dh,01e324aa4h,0e6e67671h,0550e7e71h,0bf52faf7h,0bccd5190h,0223cc62ah,0f880d316h,02b32eb5dh,00d402c7eh
+ DD 0306a5a3bh,0a40bc039h,096783a1bh,04e0a41fdh,00253cdd4h,0a1e8d39ah,0c7388638h,06480be26h,02285f382h,0ee365e1dh,0ec0b5c36h,0188d8d8fh,01f0f4d82h,034ef1a48h,0a487d29ah,01a8f43e1h
+ DD 077aefb3ah,08168226dh,01e72c253h,0f69a751eh,0e9594df1h,08e04359ah,0d14c0467h,0475ffd7dh,03844e95ch,0b5a2c2b1h,0dd12ef94h,085caf647h,0f1063d00h,01ecd2a9fh,023843311h,01dd2e229h
+ DD 073d17244h,038f0e09dh,08fc653f1h,03ede7746h,0dc20e21ch,0ae4459f5h,06a8599eah,000db2ffah,030cfd905h,011682c39h,0a5c112a6h,04934d074h,0568bfe95h,0bdf063c5h,0016c441ah,0779a440ah
+ DD 097d6fbdch,00c23f218h,0e0776aach,0d3a5cd87h,0d712e8dbh,0cee37f72h,026f74e8dh,0fb28c70dh,0b61301a0h,0ffe0c728h,0d3724354h,0a6282168h,0768ffedch,07ff4cb00h,003b02de9h,0c51b3088h
+ DD 03902dda5h,0a5a8147ch,0fe6973b4h,035d2f706h,0c257457eh,05ac2efcfh,08700611bh,0933f48d4h,04912beb2h,0c365af88h,0162edf94h,07f5a4de6h,00c32f34bh,0c646ba7ch,0b2091074h,0632c6af3h
+ DD 0753e43a9h,058d4f2e3h,024d4e23fh,070e1d217h,0afede6a6h,0b24bf729h,0710c8b60h,07f4a94d8h,08d4faa6ah,0aad90a96h,0b066b690h,0d9ed0b32h,078b6dbfdh,052fcd37bh,08bd2b431h,00b64615eh
+ DD 0cfb9fad5h,0228e2048h,0240b76bdh,0beaa386dh,090dad7bch,02d6681c8h,006d38f5eh,03e553fc3h,09d5f9750h,0f27cdb9bh,0d28c5b0eh,03e85c52ah,05247c39bh,0190795afh,0bddd6828h,0547831ebh
+ DD 04a82f424h,0f327a227h,07e47f89dh,036919c78h,043c7392ch,0e4783919h,02316fefeh,0f101b9aah,01c5009d2h,0bcdc9e9ch,09cd18345h,0fb55ea13h,0a3ce77c7h,0f5b5e231h,0d2f2cb3dh,0de6b4527h
+ DD 09bb26f5fh,010f6a333h,0044d85b6h,01e85db8eh,094197e54h,0c3697a08h,0a7cb4ea8h,065e18cc0h,0a471fe6eh,0a38c4f50h,02f13439ch,0f031747ah,0c007318bh,053c4a6bah,01deccb3dh,0a8da3ee5h
+ DD 0558216b1h,00555b31ch,02f79e6c2h,090c7810ch,0fe8eed3ch,09b669f4dh,0e0fac126h,070398ec8h,0f701b235h,0a96a449eh,0eb94f395h,00ceecdb3h,0d0cb7431h,0285fc368h,016a18c64h,00d37bb52h
+ DD 0b880d2ddh,005110d38h,065930d57h,0a60f177bh,0f36235f5h,07da34a67h,0183816b9h,047f5e17ch,0db394af4h,0c7664b57h,07036f789h,039ba215dh,02f27b472h,046d2ca0eh,0f73a84b7h,0c42647eeh
+ DD 064488f1dh,044bc7545h,0f4cf85d5h,0aa922708h,053e4df63h,0721a01d5h,05db46cedh,0649c0c51h,03cffcb6ch,06bf0d64eh,050f71d96h,0e3bf93feh,0bcc194a0h,075044558h,06afdc554h,016ae3372h
+ DD 05ca48f3fh,0bfc01adfh,0e22a9b84h,064352f06h,0c1099e4ah,0cee54da1h,0fa1b89c0h,0bbda54e8h,06f6e55fbh,0166a3df5h,020176f88h,01ca44a24h,0dfb7b5ffh,0936afd88h,08611d4a0h,0e34c2437h
+ DD 086142103h,07effbb75h,01f34fc4dh,06704ba1bh,010c1b122h,07c2a468fh,08c6aace9h,036b3a610h,075a0d050h,0abfcc0a7h,03ce33e32h,0066f9197h,029fe09beh,0ce905ef4h,0a8376351h,089ee25bah
+ DD 0fd29dc76h,02a3ede22h,036f17260h,07fd32ed9h,0284b4126h,00cadcf68h,0a7951fc8h,063422f08h,00807e199h,0562b24f4h,022ad4490h,0fe9ce5d1h,00db2b1b4h,0c2f51b10h,0e4541d0dh,0eb3613ffh
+ DD 02680813bh,0bd2c4a05h,0561b08d6h,0527aa55dh,0a7205558h,0a9f8a40eh,0243d0bech,0e3eea56fh,0a0ff58b3h,07b853817h,01a69e627h,0b67d3f65h,0a869b5d6h,00b76bbb9h,0546723edh,0a3afeb82h
+ DD 03e554892h,05f24416dh,0430e2a45h,08413b53dh,09032a2a0h,099c56aeeh,0eec367b1h,009432bf6h,0daf0ecc1h,0552850c6h,05bc92048h,049ebce55h,054811307h,0dfb66ba6h,06f298597h,01b84f797h
+ DD 08d1d7a0dh,079590481h,03a6fa556h,0d9fabe03h,0ba9e5d35h,0a40f9c59h,0f6247577h,0cb1771c1h,0e9a6312bh,0542a47cah,0552dd8c5h,0a34b3560h,00d794716h,0fdf94de0h,09c623094h,0d46124a9h
+ DD 068afe8b4h,056b7435dh,06c0d8ea1h,027f20540h,073186898h,012b77e14h,07479490fh,0dbc3dd46h,0c03b0c05h,0951a9842h,07921bc96h,08b1b3bb3h,02b202e0ah,0a573b346h,047254d56h,077e4665dh
+ DD 0d23e3984h,008b70dfch,0ebd14236h,0ab86e8bch,057114ba7h,0aa3e07f8h,0ab0ef4f2h,05ac71689h,00139d9afh,088fca384h,076644af0h,072733f88h,065d74f4ah,0f122f72ah,0a5626c7ah,013931577h
+ DD 070f8d5a4h,0d5b5d9ebh,0d7bbb228h,0375adde7h,00c1c0b32h,031e88b86h,0173edbaah,0d1f568c4h,05459df02h,01592fc83h,00fcd9a7eh,02beac0fbh,01b473b0ah,0b0a6fdb8h,00fe8fc48h,0e3224c6fh
+ DD 0e87edf5bh,0680bd00eh,020e77cf5h,030385f02h,04d42d1b2h,0e9ab98c0h,0d3816d77h,072d191d2h,00917d9e5h,01564dacah,01f8fed7fh,0394eab59h,07fbb3896h,0a209aa8dh,0be6ac98eh,05564f3b9h
+ DD 0d73654efh,0ead21d05h,013d78d74h,068d1a9c4h,06d4973a0h,061e01708h,046e6d32ah,083da3500h,068ae0118h,06a3dfca4h,0d02da069h,0a1b9a4c9h,0ebab8302h,00b2ff9c7h,0944ba436h,098af07c3h
+ DD 0995f0f9fh,085997326h,071b58bc6h,0467fade0h,0bd625a2bh,047e4495ah,033c3b8cdh,0fdd2d01dh,0c693f9fah,02c38ae28h,0348f7999h,048622329h,02161f583h,097bf738eh,0565e8cc9h,015ee2fa7h
+ DD 05777e189h,0a1a5c845h,0456f2829h,0cc10bee0h,0da762bd5h,08ad95c56h,0e9d91da8h,0152e2214h,07cb23c74h,0975b0e72h,0a90c66dfh,0fd5d7670h,0225ffc53h,0b5b5b8adh,0faded2aeh,0ab6dff73h
+ DD 06f4cbe9dh,0ebd56781h,06a574bd7h,00ed8b249h,081a881fah,041c246feh,0c3db9c70h,091564805h,05b862809h,0d7c12b08h,055858d7bh,01facd1f1h,0af09e92ah,07693747ch,0189a425fh,03b69dcbah
+ DD 0967365efh,00be28e9fh,0e801f5c9h,057300eb2h,0d583352fh,093b8ac6ah,0cd05b2b7h,0a2cf1f89h,04dcc40cch,07c0c9b74h,0ada523fbh,0fee38c45h,01099cc4dh,0b49a4dech,069f069c6h,0325c377fh
+ DD 0476cc9ffh,0e12458ceh,0c6d4cb63h,0580e0b6ch,09072289bh,0d561c8b7h,0a619e6dah,00377f264h,088e591a5h,026685362h,07523ca2bh,0a453a7bdh,0c1df4533h,08a9536d2h,0be972f79h,0c8e50f2fh
+ DD 06d3549cfh,0d433e50fh,0facd665eh,06f33696fh,0ce11fcb4h,0695bfdach,0af7c9860h,0810ee252h,07159bb2ch,065450fe1h,0758b357bh,0f7dfbebeh,0d69fea72h,02b057e74h,092731745h,0d485717ah
+ DD 0ee36860ch,0896c42e8h,04113c22dh,0daf04dfdh,044104213h,01adbb7b7h,01fd394eah,0e5fd5fa1h,01a4e0551h,068235d94h,018d10151h,06772cfbeh,009984523h,0276071e3h,05a56ba98h,0e4e879deh
+ DD 0285b9491h,0aaafafb0h,01e4c705eh,001a0be88h,02ad9caabh,0ff1d4f5dh,0c37a233fh,06e349a4ah,04a1c6a16h,0cf1c1246h,029383260h,0d99e6b66h,05f6d5471h,0ea3d4366h,0ff8cc89bh,036974d04h
+ DD 0cfe89d80h,0c26c49a1h,0da9c8371h,0b42c026dh,0dad066d2h,0ca6c013ah,056a4f3eeh,0fb8f7228h,0d850935bh,008b579ech,0d631e1b3h,034c1a74ch,0ac198534h,0cb5fe596h,0e1f24f25h,039ff21f6h
+ DD 08f929057h,027f29e14h,0c0c853dfh,07a64ae06h,058e9c5ceh,0256cd183h,0ded092a5h,09d9cce82h,06e93b7c7h,0cc6e5979h,031bb9e27h,0e1e47092h,0aa9e29a0h,0b70b3083h,03785e644h,0bf181a75h
+ DD 08ead09f7h,0f53f2c65h,09780d14dh,01335e1d5h,0cd1b66bch,069cc20e0h,0bbe0bfc8h,09b670a37h,028efbeedh,0ce53dc81h,08326a6e5h,00c74e77ch,0b88e9a63h,03604e0d2h,013dc2248h,0bab38fcah
+ DD 05c0a3f1eh,08ed6e8c8h,07c87c37fh,0bcad2492h,09ee3b78dh,0fdfb62bbh,0cbceba46h,0eba8e477h,0eeaede4bh,037d38cb0h,07976deb6h,00bc498e8h,06b6147fbh,0b2944c04h,0f71f9609h,08b123f35h
+ DD 0de79dc24h,0a155dcc7h,0558f69cdh,0f1168a32h,00d1850dfh,0bac21595h,0b204c848h,015c8295bh,07d8184ffh,0f661aa36h,030447bdbh,0c396228eh,0bde4a59eh,011cd5143h,06beab5e6h,0e3a26e3bh
+ DD 01402b9d0h,0d3b3a13fh,02c7bc863h,0573441c3h,0578c3e6eh,04b301ec4h,00adaf57eh,0c26fc9c4h,07493cea3h,096e71bfdh,01af81456h,0d05d4b3fh,06a8c608fh,0daca2a8ah,00725b276h,053ef07f6h
+ DD 07824fc56h,007a5fbd2h,013289077h,034675218h,0e0c48349h,05bf69fd5h,0b6aa7875h,0a613ddd3h,05450d866h,07f78c19ch,08f84a481h,046f4409ch,090fce239h,09f1d1928h,0b2ce44b9h,0016c4168h
+ DD 0c7435978h,0bae023f0h,020e30e19h,0b152c888h,0e3fa6fafh,09c241645h,084823e60h,0735d95c1h,003955317h,003197573h,0f03b4995h,00b4b02a9h,070274600h,0076bf559h,0aaf57508h,032c5cc53h
+ DD 060624129h,0e8af6d1fh,09a5e2b5eh,0b7bc5d64h,05f082d72h,03814b048h,0ce19677ah,076f267f2h,0b36eed93h,0626c630fh,03bf56803h,055230cd7h,0ce2736a0h,078837949h,0aa6c55f1h,00d792d60h
+ DD 0d5c7c5d2h,00318dbfdh,0072b342dh,0b38f8da7h,07b8de38ah,03569bddch,0a1c94842h,0f25b5887h,02946ad60h,0b2d5b284h,0e9d1707eh,0854f29adh,02c6a4509h,0aa5159dch,057189837h,0899f94c0h
+ DD 0f4a55b03h,0cf6adc51h,035e3b2d5h,0261762deh,004827b51h,04cc43012h,0c6021442h,0cd22a113h,0247c9569h,0ce2fd61ah,0d152becah,059a50973h,063a716d4h,06c835a11h,0187dedcfh,0c26455edh
+ DD 049ce89e7h,027f536e0h,0cc890cb5h,018908539h,0d83c2aa1h,0308909abh,01ab73bd3h,0ecd3142bh,0b3f5ab84h,06a85bf59h,0f2bea4c6h,03c320a68h,06da4541fh,0ad8dc538h,0b7c41186h,0eaf34eb0h
+ DD 0977c97c4h,01c780129h,0c57eb9fah,05ff9beebh,0c822c478h,0a24d0524h,0461cd415h,0fd8eec2ah,0f027458ch,0fbde194eh,01d1be115h,0b4ff5319h,04866d6f4h,063f874d9h,0b21ad0c9h,035c75015h
+ DD 046ac49d2h,0a6b5c9d6h,083137aa9h,042c77c0bh,068225a38h,024d000fch,02fe1e907h,00f63cfc8h,0c6441f95h,022d1b01bh,0ec8e448fh,07d38f719h,0787fb1bah,09b33fa5fh,0190158dfh,094dcfda1h
+ DD 05f6d4a09h,0c47cb339h,0ee52b826h,06b4f355ch,0f51b930ah,03d100f5dh,09f668f69h,0f4512fach,0206c4c74h,0546781d5h,0cb4d2e48h,0d021d4d4h,0ca085c2dh,0494a54c2h,0520850a8h,0f1dbaca4h
+ DD 0490a1acah,063c79326h,041526b02h,0cb64dd9ch,0a2979258h,0bb772591h,048d97846h,03f582970h,07c213ba7h,0d66b70d1h,0e8a0ced4h,0c28febb5h,0c10338c1h,06b911831h,0bf0126f3h,00d54e389h
+ DD 04af206eeh,07048d460h,077e97cb9h,0786c88f6h,0ac64802eh,0d4375ae1h,0d53ec11ch,0469bcfe1h,047062230h,0fc9b340dh,0c5b4a3ach,0e743bb57h,059ef45ach,0fe00b4aah,059edf188h,029a4ef23h
+ DD 0b483689bh,040242efeh,0513ac262h,02575d3f6h,00ca6db72h,0f30037c8h,098864be2h,0c9fcce82h,00149362dh,084a112ffh,01c4ae971h,095e57582h,0945cf86ch,01fa4b1a8h,00b024a2fh,04525a734h
+ DD 08f338360h,0e76c8b62h,028edf32bh,0483ff593h,0298b1aech,067e8e90ah,0736d9a21h,09caab338h,066892709h,05c09d2fdh,0b55a1d41h,02496b4dch,0e24a4394h,093f5fb1ah,06fa8f6c1h,008c75049h
+ DD 0c905d85fh,0caead1c2h,00733ae57h,0e9d7f790h,0f07cdd94h,024c9a65ch,0a4b55931h,07389359ch,0367e45f7h,0f58709b7h,0cb7e7adch,01f203067h,0c7b72818h,082444bffh,0baac8033h,007303b35h
+ DD 0d13b7ea1h,01e1ee4e4h,0e0e74180h,0e6489b24h,07e70ef70h,0a5f2c610h,0bdd10894h,0a1655412h,07af4194eh,0555ebefbh,08e89bd9ch,0533c1c3ch,089895856h,0735b9b57h,0567f5c15h,015fb3cd2h
+ DD 0526f09fdh,0057fed45h,08128240ah,0e8a4f10ch,0ff2bfd8dh,09332efc4h,0bd35aa31h,0214e77a0h,014faa40eh,032896d73h,001e5f186h,0767867ech,017a1813eh,0c9adf8f1h,054741795h,0cb6cda78h
+ DD 0349d51aah,0b7521b6dh,0e3c7b8e9h,0f56b5a9eh,032a096dfh,0c6f1e5c9h,0a3635024h,0083667c4h,018087f2fh,0365ea135h,0d136e45dh,0f1b8eaach,073aec989h,0c8a0e484h,0142c9259h,0d75a324bh
+ DD 001dae185h,0b7b4d001h,09b7a94bch,045434e0bh,0fbd8cb0bh,0f54339afh,0e98ef49eh,0dcc4569eh,009a51299h,07789318ah,0b2b025d8h,081b4d206h,0fae85792h,0f64aa418h,0acd7baf7h,03e50258fh
+ DD 02996864bh,0dce84cdbh,01f485fa4h,0a2e67089h,0534c6a5ah,0b28b2bb6h,0c94b9d39h,031a7ec6bh,0d6bc20dah,01d217766h,086761190h,04acdb5ech,073701063h,068726328h,02128c29bh,04d24ee7ch
+ DD 0a19fd868h,0c072ebd3h,0db8ddd3bh,0612e481ch,01a64d852h,0b4e1d754h,0c4c6c4abh,000ef95ach,0aa0a6c46h,01536d2edh,043774790h,061294086h,0343fda10h,054af25e8h,0fd25d6f2h,09ff9d98dh
+ DD 0468b8835h,00746af7ch,0730ecea7h,0977a31cbh,0c2cf4a81h,0a5096b80h,06458c37ah,0aa986833h,0a6bd9d34h,06af29bf3h,033c5d854h,06a62fe9bh,0b7133b5eh,050e6c304h,07d6e6848h,004b60159h
+ DD 05579bea4h,04cd296dfh,05ceedaf1h,010e35ac8h,0e3bcc5b1h,004c4c5fdh,089412cf9h,095f9ee8ah,082b6eb0fh,02c9459eeh,095c2aaddh,02e845765h,0d327fcfeh,0774a84aeh,00368d476h,0d8c93722h
+ DD 0f83e8a3bh,00dbd5748h,08d2495f3h,0a579aa96h,0ae496e9bh,0535996a0h,0b7f9bcc2h,007afbfe9h,05b7bd293h,03ac1dc6dh,07022323dh,03b592cffh,09c0a3e76h,0ba0deb98h,04b197acbh,018e78e9fh
+ DD 0296c36efh,0211cde10h,082c4da77h,07ee89672h,0a57836dah,0b617d270h,09cb7560bh,0f0cd9c31h,0e455fe90h,001fdcbf7h,07e7334f3h,03fb53cbbh,04e7de4ech,0781e2ea4h,00b384fd0h,08adab3adh
+ DD 053d64829h,0129eee2fh,0a261492bh,07a471e17h,0e4cb4a2ch,0e4f9adb9h,097ba2c2dh,03d359f6fh,00aacd697h,0346c6786h,075c2f8a8h,092b444c3h,0d85df44eh,0c79fa117h,0398ddf31h,056782372h
+ DD 0bbbab3b8h,060e690f2h,08b04816bh,04851f8aeh,09c92e4d2h,0c72046abh,07cf3136bh,0518c74a1h,0f9877d4ch,0ff4eb50ah,0a919cabbh,014578d90h,0ac5eb2b6h,08218f8c4h,0542016e4h,0a3ccc547h
+ DD 0327f8349h,0025bf48eh,0f43cb641h,0f3e97346h,0500f1085h,0dc2bafdfh,02f063055h,057167876h,0411925a6h,05bd914b9h,0a1123de5h,07c078d48h,0182b165dh,0ee6bf835h,0ba519727h,0b11b5e5bh
+ DD 01eea7b85h,0e33ea76ch,092d4f85eh,02352b461h,0afe115bbh,0f101d334h,0889175a3h,0fabc1294h,05233f925h,07f6bcdc0h,0e77fec55h,0e0a802dbh,08069b659h,0bdb47b75h,0f98fbd74h,01c5e12deh
+ DD 04b8457eeh,0869c58c6h,04f7ea9f7h,0a5360f69h,0f460b38fh,0e576c09fh,022b7fb36h,06b70d548h,03bfae315h,03fd237f1h,0cbdff369h,033797852h,025b516f9h,097df25f5h,0ba38ad2dh,046f388f2h
+ DD 089d8ddbbh,0656c4658h,070f38ee8h,08830b26eh,0de1212b0h,04320fd5ch,0e4a2edb2h,0c34f30cfh,056ab64b8h,0abb131a3h,0d99c5d26h,07f77f0cch,0bf981d94h,066856a37h,0738bd76eh,019e76d09h
+ DD 096238f39h,0e76c8ac3h,0a830b366h,0c0a482beh,00b4eb499h,0b7b8eaffh,04bfb4865h,08ecd83bch,0a2f3776fh,0971b2cb7h,0f4b88adfh,0b42176a4h,0be1fa446h,0b9617df5h,0cd031bd2h,08b32d508h
+ DD 053b618c0h,01c6bd47dh,06a227923h,0c424f46ch,0dd92d964h,07303ffdeh,071b5abf2h,0e9712878h,0f815561dh,08f48a632h,0d3c055d1h,085f48ff5h,07525684fh,0222a1427h,067360cc3h,0d0d841a0h
+ DD 00b9267c6h,04245a926h,0cf07f863h,0c78913f1h,04d0d9e24h,0aa844c8eh,03d5f9017h,0a42ad522h,0a2c989d5h,0bd371749h,0e1f5e78eh,0928292dfh,00a1ea6dah,0493b383eh,013aee529h,05136fd8dh
+ DD 0f2c34a99h,0860c44b1h,0bf5855ach,03b00aca4h,0faaf37beh,0abf6aaa0h,02a53ec08h,065f43682h,0a11b12e1h,01d9a5801h,0e20ed475h,078a7ab2ch,09a41e0d5h,00de1067eh,0305023eah,030473f5fh
+ DD 0169c7d97h,0dd3ae09dh,0cfaef9cdh,05cd5baa4h,065a44803h,05cd7440bh,047f364deh,0dc13966ah,02b8357c1h,0077b2be8h,0e9d57c2ah,00cb1b4c5h,005ff363eh,07a4ceb32h,0ca35a9efh,0f310fa4dh
+ DD 0f97f68c6h,0dbb7b352h,00b02cf58h,00c773b50h,03c1f96d9h,0ea2e4821h,0eee01815h,0ffb357b0h,0e0f28039h,0b9c924cdh,046a3fbe4h,00b36c95ah,05e46db6ch,01faaaea4h,01928aaffh,0cae575c3h
+ DD 0a70dab86h,07f671302h,071c58cfch,0fcbd12a9h,0bee0cb92h,0cbef9acfh,0f8c1b583h,0573da0b9h,00d41d550h,04752fcfeh,02155cffeh,0e7eec0e3h,0545ae248h,00fc39fcbh,08065f44eh,0522cb8d1h
+ DD 070cbb96ch,0263c962ah,0bcd124a9h,0e034362ah,03c2ae58dh,0f120db28h,0fef6d507h,0b9a38d49h,01ff140fdh,0b1fd2a82h,020aee7e0h,0bd162f30h,0cb251949h,04e17a5d4h,04f7e1c3dh,02aebcb83h
+ DD 0937b0527h,0608eb25fh,0eb7d9997h,0f42e1e47h,0b8a53a29h,0eba699c4h,0e091b536h,01f921c71h,05b26bbd5h,0cce29e7bh,03b61a680h,07a8ef5edh,0ba1f1c7eh,0e5ef8043h,018158ddah,016ea8217h
+ DD 0599ff0f9h,001778a2bh,08104fc6bh,068a923d7h,0da694ff3h,05bfa44dfh,0f7667f12h,04f7199dbh,0e46f2a79h,0c06d8ff6h,0e9f8131dh,008b5deadh,0abb4ce7ch,002519a59h,0b42aec3eh,0c4f710bch
+ DD 078bde41ah,03d77b057h,0b4186b5ah,06474bf80h,088c65741h,0048b3f67h,003c7c154h,0c64519deh,00edfcc4fh,0df073846h,048f1aa6bh,0319aa737h,0ca909f77h,08b9f8a02h,07580bfefh,090258139h
+ DD 0c0c22719h,0d8bfd3cah,0c9ca151eh,0c60209e4h,0d9a1a69ch,07a744ab5h,014937f8fh,06de5048bh,0e115ac04h,0171938d8h,01c6b16d2h,07df70940h,07f8e94e7h,0a6aeb663h,02a2cf094h,0c130388eh
+ DD 077f54e6eh,01850be84h,065d60fe5h,09f258a72h,06c9146d6h,0ff7ff0c0h,0e63a830bh,0039aaf90h,09460342fh,038f27a73h,03f795f8ah,04703148ch,09681a97eh,01bb5467bh,0ecaeb594h,000931ba5h
+ DD 0786f337ch,0cdb6719dh,0e704397dh,0d9c01cd2h,0555c2fefh,00f4a3f20h,07c0af223h,000452509h,084db8e76h,054a58047h,093c8aa06h,03bacf1aah,0f7919422h,011ca957ch,078cdaa40h,050641053h
+ DD 09f7144aeh,07a303874h,043d4acfdh,0170c963fh,058ddd3efh,05e148149h,09e72dba8h,0a7bde582h,06fa68750h,00769da8bh,0572e0249h,0fa64e532h,02619ad31h,0fcaadf9dh,0a7b349cdh,087882daah
+ DD 06c67a775h,09f6eb731h,0efc5d0b1h,0cb10471ah,0e1b806b2h,0b433750ch,057b1ae7eh,019c5714dh,0ed03fd3fh,0c0dc8b7bh,031bc194eh,0dd03344fh,08c6320b5h,0a66c52a7h,0d0b6fd93h,08bc82ce3h
+ DD 0b35f1341h,0f8e13501h,025a43e42h,0e53156ddh,04daeb85ch,0d3adf27eh,0bbeddeb5h,0b81d8379h,02e435867h,01b0b546eh,0eba5dd60h,09020eb94h,08210cb9dh,037d91161h,05c91f1cfh,04c596b31h
+ DD 00e0b040dh,0b228a90fh,045ff897fh,0baf02d82h,000fa6122h,02aac79e6h,08e36f557h,024828817h,0113ec356h,0b9521d31h,015eff1f8h,09e48861eh,0e0d41715h,02aa1d412h,053f131b8h,071f86203h
+ DD 03fd19408h,0f60da8dah,0278d9d99h,04aa716dch,0a8c51c90h,0394531f7h,0f59db51ch,0b560b0e8h,0fa34bdadh,0a28fc992h,09cd4f8bdh,0f024fa14h,023a9d0d3h,05cf530f7h,0e28c9b56h,0615ca193h
+ DD 06f73c51eh,06d2a483dh,0ea0dc2ddh,0a4cb2412h,01eb917ffh,050663c41h,0eade299eh,03d3a74cfh,04a7a9202h,029b3990fh,0a7b15c3dh,0a9bccf59h,0a5df9208h,066a3ccdch,043f2f929h,048027c14h
+ DD 040b557f0h,0d385377ch,0cd684660h,0e001c366h,0e2183a27h,01b18ed6bh,063210329h,0879738d8h,0bda94882h,0a687c74bh,0a684b299h,0d1bbcc48h,0863b3724h,0af6f1112h,02c8ce9f8h,06943d1b4h
+ DD 0098cafb4h,0e044a3bbh,060d48cafh,027ed2310h,03a31b84dh,0542b5675h,0fcddbed7h,0cbf3dd50h,041b1d830h,025031f16h,0cb0c1e27h,0a7ec851dh,0b5ae75dbh,0ac1c8fe0h,008c52120h,0b24c7557h
+ DD 01d4636c3h,057f811dch,0681a9939h,0f8436526h,09c81adb3h,01f6bc6d9h,05b7d80d4h,0840f8ac3h,0f4387f1ah,0731a9811h,0b5156880h,07c501cd3h,0dfe68867h,0a5ca4a07h,05fcea120h,0f123d8f0h
+ DD 0d607039eh,01fbb0e71h,0cd3a4546h,02b70e215h,053324091h,032d2f01dh,0180ab19bh,0b796ff08h,03c57c4aah,032d87a86h,0b7c49a27h,02aed9cafh,031630d98h,09fb35each,05c3e20a3h,0338e8cdfh
+ DD 066cde8dbh,080f16182h,02d72fd36h,04e159980h,09b6e5072h,0d7b8f13bh,03b7b5dc1h,0f5213907h,08ce4396eh,04d431f1dh,0a7ed2142h,037a1a680h,0d01aaf6bh,0bf375696h,0e63aab66h,0aa1c0c54h
+ DD 04ed80940h,03014368bh,07a6fceddh,067e6d056h,0ca97579fh,07c208c49h,0a23597f6h,0fe3d7a81h,07e096ae2h,05e203202h,024b39366h,0b1f3e1e7h,02fdcdffch,026da26f3h,06097be83h,079422f1dh
+ DD 09db3b381h,0263a2cfbh,0d4df0a4bh,09c3a2deeh,07d04e61fh,0728d06e9h,042449325h,08b1adfbch,07e053a1bh,06ec1d939h,066daf707h,0ee2be5c7h,0810ac7abh,080ba1e14h,0f530f174h,0dd2ae778h
+ DD 0205b9d8bh,00435d97ah,0056756d4h,06eb8f064h,0b6f8210eh,0d5e88a8bh,0ec9fd9eah,0070ef12dh,03bcc876ah,04d849505h,0a7404ce3h,012a75338h,0b8a1db5eh,0d22b49e1h,014bfa5adh,0ec1f2051h
+ DD 0b6828f36h,0adbaeb79h,001bd5b9eh,09d7a0258h,01e844b0ch,0eda01e0dh,0887edfc9h,04b625175h,09669b621h,014109fddh,0f6f87b98h,088a2ca56h,0170df6bch,0fe2eb788h,0ffa473f9h,00cea06f4h
+ DD 0c4e83d33h,043ed81b5h,05efd488bh,0d9f35879h,09deb4d0fh,0164a620fh,0ac6a7394h,0c6927bdbh,09f9e0f03h,045c28df7h,0fcd7e1a9h,02868661eh,0ffa348f1h,07cf4e8d0h,0398538e0h,06bd4c284h
+ DD 0289a8619h,02618a091h,06671b173h,0ef796e60h,09090c632h,0664e46e5h,01e66f8fbh,0a38062d4h,00573274eh,06c744a20h,0a9271394h,0d07b67e4h,06bdc0e20h,0391223b2h,0eb0a05a7h,0be2d93f1h
+ DD 03f36d141h,0f23e2e53h,04dfca442h,0e84bb3d4h,06b7c023ah,0b804a48dh,076431c3bh,01e16a8fah,0ddd472e0h,01b5452adh,00d1ee127h,07d405ee7h,0ffa27599h,050fc6f1dh,0bf391b35h,0351ac53ch
+ DD 04444896bh,07efa14b8h,0f94027fbh,064974d2fh,0de84487dh,0efdcd0e8h,02b48989bh,08c45b260h,0d8463487h,0a8fcbbc2h,03fbc476ch,0d1b2b3f7h,0c8f443c0h,021d005b7h,040c0139ch,0518f2e67h
+ DD 006d75fc1h,056036e8ch,03249a89fh,02dcf7bb7h,0e245e7ddh,081dd1d3dh,0ebd6e2a7h,0f578dc4bh,0df2ce7a0h,04c028903h,09c39afach,0aee36288h,0146404abh,0dc847c31h,0a4e97818h,06304c0d8h
+ DD 0a91f6791h,0ae51dca2h,09baa9efch,02abe4190h,0559c7ac1h,0d9d2e2f4h,0fc9f773ah,0e82f4b51h,04073e81ch,0a7713027h,0fbb596fch,0c0276fach,0a684f70ch,01d819fc9h,0c9f7b1e0h,029b47fddh
+ DD 0459b1940h,0358de103h,05b013e93h,0ec881c59h,049532ad3h,051574c93h,0b37b46deh,02db1d445h,0df239fd8h,0c6445b87h,0151d24eeh,0c718af75h,0f43c6259h,0aea1c4a4h,070be02f7h,040c0e5d7h
+ DD 0721b33f2h,06a4590f4h,0fedf04eah,02124f1fbh,09745efe7h,0f8e53cdeh,065f046d9h,0e7e10432h,0e4d0c7e6h,0c3fca28eh,087253b1bh,0847e339ah,03743e643h,09b595348h,04fd12fc5h,0cb6a0a0bh
+ DD 027d02dcch,0fb6836c3h,07a68bcc2h,05ad00982h,0005e912dh,01b24b44ch,0811fdcfeh,0cc83d20fh,0666fba0ch,036527ec1h,014754635h,069948197h,0556da9c2h,0fcdcb1a8h,081a732b2h,0a5934267h
+ DD 0a714181dh,0ec1214edh,06067b341h,0609ac13bh,0a545df1fh,0ff4b4c97h,034d2076bh,0a1240501h,01409ca97h,06efa0c23h,020638c43h,0254cc1a8h,0dcfb46cdh,0d4e363afh,003942a27h,062c2adc3h
+ DD 056e46483h,0c67b9df0h,063736356h,0a55abb20h,0c551bc52h,0ab93c098h,0b15fe64bh,0382b49f9h,04dff8d47h,09ec221adh,0437df4d6h,079caf615h,0bb456509h,05f13dc64h,0191f0714h,0e4c589d9h
+ DD 03fd40e09h,027b6a8abh,077313ea9h,0e455842eh,01f55988bh,08b51d1e2h,0062bbbfch,05716dd73h,04e8bf3deh,0633c11e5h,01b85be3bh,09a0e77b6h,00911cca6h,056510729h,0efa6590fh,027e76495h
+ DD 0070d3aabh,0e4ac8b33h,09a2cd5e5h,02643672bh,01cfc9173h,052eff79bh,090a7c13fh,0665ca49bh,0b3efb998h,05a8dda59h,0052f1341h,08a5b922dh,03cf9a530h,0ae9ebbabh,0f56da4d7h,035986e7bh
+ DD 0ff3513cch,03a636b5ch,03198f7ddh,0bb0cf8bah,041f16f86h,0b8d40522h,0de13a7bfh,0760575d8h,09f7aa181h,036f74e16h,0f509ed1ch,0163a3ecfh,03c40a491h,06aead61fh,0dfe8fcaah,0158c95fch
+ DD 013cda46fh,0a3991b6eh,0342faed0h,079482415h,0666b5970h,0f3ba5bdeh,0b26ab6ddh,01d52e6bch,08608dd3dh,0768ba1e7h,0ea076586h,04930db2ah,0e7dc1afah,0d9575714h,0f7c58817h,01fc7bf7dh
+ DD 0d9eee96ch,06b47accdh,0e58cec37h,00ca277fbh,0e702c42ah,0113fe413h,0c47cbe51h,0dd1764eeh,07b3ed739h,0041e7cdeh,05ce9e1c0h,050cb7459h,02925b212h,035568513h,0001b081ch,07cff95c4h
+ DD 08088b454h,063ee4cbdh,09a9e0c8ah,0db7f32f7h,06b2447cbh,0b377d418h,0d370219bh,0e3e982aah,0c2a2a593h,006ccc1e4h,00773f24fh,072c36865h,095859423h,0a13b4da7h,075040c8fh,08bbf1d33h
+ DD 0da50c991h,0726f0973h,0822d6ee2h,048afcd5bh,020fd7771h,0e5fc718bh,0fd0807a1h,0b9e8e77dh,099a7703dh,07f5e0f44h,0618e36f3h,06972930eh,023807bbeh,02b7c77b8h,0cb27ff50h,0e5b82405h
+ DD 0bd379062h,0ba8b8be3h,02dce4a92h,0d64b7a1dh,0b2952e37h,0040a73c5h,0d438aecah,00a9e252eh,0c39d3bcbh,0dd43956bh,0b32b2d63h,01a31ca00h,05c417a18h,0d67133b8h,02ef442c8h,0d08e4790h
+ DD 0255c0980h,098cb1ae9h,02b4a739fh,04bd86381h,01e4a45a1h,05a5c31e1h,09cb0db2fh,01e5d55feh,08ff5cc29h,074661b06h,00eb8a4f4h,0026b389fh,058848c24h,0536b21a4h,081dc72b0h,02e5bf8ech
+ DD 0ad886aach,003c187d0h,0b771b645h,05c16878ah,0c74045abh,0b07dfc6fh,07800caedh,02c6360bfh,0b9c972a3h,024295bb5h,07c9a6dbah,0c9e6f88eh,092a79aa6h,090ffbf24h,041c26ac2h,0de29d50ah
+ DD 0d309cbe6h,09f0af483h,0e0bced4fh,05b020d8ah,0b38023e3h,0606e986dh,01abc6933h,0ad8f2c9dh,0e7400e93h,019292e1dh,052be5e4dh,0fe3e18a9h,02e0680bfh,0e8e9771dh,0c54db063h,08c5bec98h
+ DD 074a55d1fh,02af9662ah,0046f66d8h,0e3fbf28fh,0d4dc4794h,0a3a72ab4h,05c7c2dd8h,009779f45h,0c3d19d8dh,0d893bdafh,057d6a6dfh,0d5a75094h,0952e6255h,08cf8fef9h,0da9a8affh,03da67cfbh
+ DD 02c160dcdh,04c23f62ah,08f90eaefh,034e6c5e3h,0a9a65d5ah,035865519h,08fd38a3dh,007c48aaeh,050068527h,0b7e7aedah,01c90936ah,02c09ef23h,0e879324ch,031ecfeb6h,0fb0ec938h,0a0871f6bh
+ DD 0d84d835dh,0b1f0fb68h,0861dc1e6h,0c90caf39h,07594f8d7h,012e5b046h,065012b92h,026897ae2h,0a4d6755dh,0bcf68a08h,00991fbdah,0403ee41ch,03bbf17e8h,0733e343eh,0679b3d65h,0d2c7980dh
+ DD 0d2e11305h,033056232h,0f3c07a6fh,0966be492h,0bb15509dh,06a8878ffh,00a9b59a4h,0ff221101h,0abe30129h,06c9f564ah,0336e64cfh,0c6f2c940h,08b0c8022h,00fe75262h,06ae8db87h,0be0267e9h
+ DD 093bc042bh,022e192f1h,0b237c458h,0f085b534h,0832c4168h,0a0d192bdh,0bdf6271dh,07a76e9e3h,0b88911b5h,052a882fah,0b4db0eb5h,0c85345e4h,081a7c3ffh,0a3be02a6h,0f0ec0469h,051889c8ch
+ DD 0a5e829e5h,09d031369h,01607aa41h,0cbb4c6fch,0241d84c1h,075ac59a6h,08829e0eeh,0c043f2bfh,08ea5e185h,082a38f75h,0d87cbd9fh,08bda40b9h,02d8fc601h,09e65e75eh,0a35690b3h,03d515f74h
+ DD 0da79e5ach,0534acf4fh,08630215fh,068b83b3ah,0d085756eh,05c748b2eh,0e5d37cb2h,0b0317258h,0c5ccc2c4h,06735841ah,03d9d5069h,07d7dc96bh,0fd1754bdh,0a147e410h,0d399ddd5h,065296e94h
+ DD 0bc8fa5bch,0f6b5b2d0h,0500c277bh,08a5ead67h,0dfa08a5dh,0214625e6h,0959cf047h,051fdfedch,0289fca32h,06bc9430bh,09d9bdc3fh,0e36ff0cfh,058ea0edeh,02fe187cbh,05a900b3fh,0ed66af20h
+ DD 05fa9f4d6h,000e0968bh,037a362e7h,02d4066ceh,0bd07e772h,0a99a9748h,006a4f1d0h,0710989c0h,0ce40cbd8h,0d5dedf35h,01743293dh,0ab55c5f0h,08aa24e2ch,0766f1144h,0605fbcb4h,094d874f8h
+ DD 0a518001bh,0a365f0e8h,09d04ef0fh,0ee605eb6h,0ba8d4d25h,05a3915cdh,0b5113472h,044c0e1b8h,08b6740dch,0cbb024e8h,0ee1d4f0ch,089087a53h,01fc4e372h,0a88fa05ch,0af8b3af2h,08bf395cbh
+ DD 0deb8568bh,01e71c9a1h,080fb3d32h,0a35daea0h,02cf8fb81h,0e8b6f266h,09490696ah,06d51afe8h,051803a19h,081beac6eh,086219080h,0e3d24b7fh,0df6f463ch,0727cfd9dh,072284ee8h,08c6865cah
+ DD 0b743f4efh,032c88b7dh,0e7d11dceh,03793909bh,02ff2ebe8h,0d398f922h,0e5e49796h,02c70ca44h,0cb1131b1h,0df4d9929h,025888e79h,07826f298h,0f1d8740ah,04d3a112ch,0270afa8bh,000384cb6h
+ DD 03ab48095h,0cb64125bh,062d05106h,03451c256h,0a4955845h,0d73d577dh,0bf9f4433h,039570c16h,0adecf263h,0d7dfaad3h,0dc76e102h,0f1c3d8d1h,054c6a836h,05e774a58h,03e92d47bh,0dad4b672h
+ DD 0f0d796a0h,0be7e990fh,0df0e8b02h,05fc62478h,0030c00adh,08aae8bf4h,09004ba0fh,03d2db93bh,0d85d5ddch,0e48c8a79h,06bb07f34h,0e907caa7h,0a39eaed5h,058db343ah,0adaf5724h,00ea6e007h
+ DD 0d23233f3h,0e00df169h,077cb637fh,03e322796h,01da0cf6ch,01f897c0eh,031d6bbddh,0a651f5d8h,01a230c76h,0dd61af19h,0cdaa5e4ah,0bd527272h,0d0abcd7eh,0ca753636h,0370bd8dch,078bdd37ch
+ DD 017cd93feh,0c23916c2h,0dadce6e2h,065b97a4dh,0174e42f8h,0e04ed4ebh,0bb21480ah,01491ccaah,023196332h,0145a8280h,0587b479ah,03c3862d7h,001dcd0edh,09f4a88a3h,03ea12f1fh,04da2b7efh
+ DD 0b126e48eh,0f8e7ae33h,0f494e237h,0404a0b32h,0c55acadbh,09beac474h,0cbec9fd9h,04ee5cf3bh,07df3c8c3h,0336b33b9h,0b76808fdh,0bd905fe3h,0aa45c16ah,08f436981h,03dd27b62h,0255c5bfah
+ DD 0c3dd9b4dh,071965cbfh,0fc068a87h,0ce23edbfh,0745b029bh,0b78d4725h,0cefdd9bdh,074610713h,01266bf52h,07116f75fh,018e49bb6h,002046722h,03d6f19e3h,0df43df9fh,0e685cb2fh,0ef1bc7d0h
+ DD 07078c432h,0cddb27c1h,0b77fedb7h,0e1961b9ch,0c2290570h,01edc2f5ch,019cbd886h,02c3fefcah,0c2af389ah,0cf880a36h,0bda71ceah,096c610fdh,032aa8463h,0f03977a9h,08586d90ah,08eb7763fh
+ DD 02a296e77h,03f342454h,042837a35h,0c8718683h,06a09c731h,07dc71090h,051b816dbh,054778ffbh,0af06defdh,06b33bfech,08592b70bh,0fe3c105fh,061da6114h,0f937fda4h,04c266ad7h,03c13e651h
+ DD 0855938e8h,0e363a829h,09de54b72h,02eeb5d9eh,020ccfab9h,0beb93b0eh,025e61a25h,03dffbb5fh,01acc093dh,07f655e43h,03964ce61h,00cb6cc3dh,0e5e9b460h,06ab283a1h,0a1c7e72dh,055d787c5h
+ DD 0deadbf02h,04d2efd47h,0ac459068h,011e80219h,071f311f0h,0810c7626h,04ab6ef53h,0fa17ef8dh,093e43bffh,0af47fd25h,00be40632h,05cb5ff3fh,08ee61da3h,054687106h,0b08afd0fh,07764196eh
+ DD 0f0290a8fh,0831ab3edh,0cb47c387h,0cae81966h,0184efb4fh,0aad7deceh,04749110eh,0dcfc53b3h,04cb632f9h,06698f23ch,0b91f8067h,0c42a1ad6h,06284180ah,0b116a81dh,0e901326fh,0ebedf5f8h
+ DD 097e3e044h,0f2274c9fh,011d09fc9h,042018520h,0d18e6e23h,056a65f17h,0352b683ch,02ea61e2ah,0575eaa94h,027d291bch,0b8ff522dh,09e7bc721h,0a7f04d6fh,05f7268bfh,0aba41748h,05868c73fh
+ DD 07be0eeadh,09f85c2dbh,0ff719135h,0511e7842h,0c5ea90d7h,05a06b1e9h,026fab631h,00c19e283h,0e9206c55h,08af8f0cfh,03553c06ah,089389cb4h,0f65f8004h,039dbed97h,0c508991dh,00621b037h
+ DD 096e78cc4h,01c52e635h,00c06b4a8h,05385c8b2h,0b0e87d03h,0d84ddfdbh,0934bafadh,0c49dfb66h,059f70772h,07071e170h,03a1db56bh,03a073a84h,03b8af190h,003494903h,0d32920f0h,07d882de3h
+ DD 0b2cf8940h,091633f0ah,06f948f51h,072b0b178h,0782653c8h,02d28dc30h,0db903a05h,088829849h,06a19d2bbh,0b8095d0ch,086f782cbh,04b9e7f0ch,02d907064h,07af73988h,08b32643ch,0d12be0feh
+ DD 00e165dc3h,0358ed23dh,04e2378ceh,03d47ce62h,0feb8a087h,07e2bb0b9h,0e29e10b9h,03246e8aeh,003ce2b4dh,0459f4ec7h,0bbc077cfh,0e9b4ca1bh,00e9940c1h,02613b4f2h,0047d1eb1h,0fc598bb9h
+ DD 045036099h,09744c62bh,0167c65d8h,0a9dee742h,0dabe1943h,00c511525h,093c6c624h,0da110554h,0651a3be2h,0ae00a52ch,0884449a6h,0cda5111dh,0ff33bed1h,0063c06f4h,00d3d76b4h,073baaf9ah
+ DD 07fc63668h,052fb0c9dh,00c039cdeh,06886c9ddh,055b22351h,0602bd599h,0360c7c13h,0b00cab02h,081b69442h,08cb616bch,0b55c3ceeh,041486700h,0f49ba278h,071093281h,064a50710h,0ad956d9ch
+ DD 0638a7e81h,09561f28bh,05980ddc3h,054155cdfh,0d26f247ah,0b2db4a96h,04787d100h,09d774e4eh,0078637d2h,01a9e6e2eh,05e0ae06ah,01c363e2dh,0e9cfa354h,07493483eh,07f74b98dh,076843cb3h
+ DD 0d4b66947h,0baca6591h,004460a8ch,0b452ce98h,043768f55h,06830d246h,07dff12dfh,0f4197ed8h,0400dd0f7h,06521b472h,04b1e7093h,059f5ca8fh,0080338aeh,06feff11bh,0a29ca3c6h,00ada31f6h
+ DD 094a2c215h,024794eb6h,005a57ab4h,0d83a43abh,02a6f89feh,0264a543ah,0dd5ec7c2h,02c2a3868h,08439d9b2h,0d3373940h,00acd1f11h,0715ea672h,0e7e6cc19h,042c1d235h,0b990585ch,081ce6e96h
+ DD 0d809c7bdh,004e5dfe0h,08f1050abh,0d7b2580ch,0d8a4176fh,06d91ad78h,04e2e897ch,00af556eeh,0921de0ach,0162a8b73h,07ea78400h,052ac9c22h,0efce2174h,0ee2a4eeah,06d637f79h,0be61844eh
+ DD 0789a283bh,00491f1bch,0880836f4h,072d3ac3dh,088e5402dh,0aa1c5ea3h,0d5cc473dh,01b192421h,09dc84cach,05c0b9998h,09c6e75b8h,0b0a8482dh,03a191ce2h,0639961d0h,06d837930h,0da3bc865h
+ DD 0056e6f8fh,0ca990653h,064d133a7h,084861c41h,0746abe40h,08b403276h,0ebf8e303h,0b7b4d51ah,0220a255dh,005b43211h,002419e6eh,0c997152ch,0630c2feah,076ff47b6h,0281fdadeh,050518677h
+ DD 0cf902b0bh,03283b8bah,037db303bh,08d4b4eb5h,0755011bch,0cc89f42dh,0dd09d19bh,0b43d74bbh,08adba350h,065746bc9h,0b51c1927h,0364eaf8ch,010ad72ech,013c76596h,0f8d40c20h,030045121h
+ DD 0ea7b979bh,06d2d99b7h,0e6fb3bcdh,0cd78cd74h,086cffbfeh,011e45a9eh,0637024f6h,078a61cf4h,03d502295h,0d06bc872h,0458cb288h,0f1376854h,0342f8586h,0b9db26a1h,04beee09eh,0f33effcfh
+ DD 0b30cfb3ah,0d7e0c4cdh,06c9db4c8h,06d09b8c1h,007c8d9dfh,040ba1a42h,01c52c66dh,06fd495f7h,0275264dah,0fb0e169fh,0e57d8362h,080c2b746h,049ad7222h,0edd987f7h,04398ec7bh,0fdc229afh
+ DD 052666a58h,0b0d1ed84h,0e6a9c3c2h,04bcb6e00h,026906408h,03c57411ch,013556400h,0cfc20755h,05294dba3h,0a08b1c50h,08b7dd31eh,0a30ba286h,0991eca74h,0d70ba90eh,0e762c2b9h,0094e142ch
+ DD 0979f3925h,0b81d783eh,0af4c89a7h,01efd130ah,0fd1bf7fah,0525c2144h,01b265a9eh,04b296904h,0b9db65b6h,0ed8e9634h,003599d8ah,035c82e32h,0403563f3h,0daa7a54fh,0022c38abh,09df088adh
+ DD 0bb3fd30ah,0e5cfb066h,0eff0354eh,0429169dah,03524e36ch,0809cf852h,00155be1dh,0136f4fb3h,01fbba712h,04826af01h,0506ba1a1h,06ef0f0b4h,077aea73eh,0d9928b31h,05eaa244eh,0e2bf6af2h
+ DD 04237b64bh,08d084f12h,0e3ecfd07h,0688ebe99h,0f6845dd8h,057b8a70ch,05da4a325h,0808fc59ch,0a3585862h,0a9032b2bh,0edf29386h,0b66825d5h,0431ec29bh,0b5a5a8dbh,03a1e8dc8h,0bb143a98h
+ DD 012ae381bh,035ee94ceh,086ccda90h,03a7f176ch,04606eacah,0c63a657eh,043cd04dfh,09ae5a380h,0ed251b46h,09bec8d15h,0caca5e64h,01f5d6d30h,09ff20f07h,0347b3b35h,0f7e4b286h,04d65f034h
+ DD 0f111661eh,09e93ba24h,0b105eb04h,0edced484h,0f424b578h,096dc9ba1h,0e83e9069h,0bf8f66b7h,0d7ed8216h,0872d4df4h,08e2cbecfh,0bf07f377h,098e73754h,04281d899h,08aab8708h,0fec85fbbh
+ DD 0a5ba5b0bh,09a3c0deeh,042d05299h,0e6a116ceh,0e9b02d42h,0ae9775feh,0a1545cb6h,072b05200h,031a3b4eah,0bc506f7dh,08bbd9b32h,0e5893078h,0e4b12a97h,0c8bc5f37h,04a73b671h,06b000c06h
+ DD 0765fa7d0h,013b5bf22h,01d6a5370h,059805bf0h,04280db98h,067a5e29dh,0776b1ce3h,04f53916fh,033ddf626h,0714ff61fh,0a085d103h,04206238eh,0e5809ee3h,01c50d4b7h,085f8eb1dh,0999f450dh
+ DD 0e4c79e9bh,0658a6051h,0c66a9feah,01394cb73h,0c6be7b23h,027f31ed5h,05aa6f8feh,0f4c88f36h,04aaa499eh,00fb0721fh,0e3fb2a6bh,068b3a7d5h,03a92851dh,0a788097dh,0e96f4913h,0060e7f8ah
+ DD 01a3a93bch,082eebe73h,0a21adc1ah,042bbf465h,0ef030efdh,0c10b6fa4h,087b097bbh,0247aa4c7h,0f60c77dah,08b8dc632h,0c223523eh,06ffbc26ah,0344579cfh,0a4f6ff11h,0980250f6h,05825653ch
+ DD 0bc1aa2b9h,0b2dd097eh,037a0333ah,007889393h,037a0db38h,01cf55e71h,0792c1613h,02648487fh,03fcef261h,0dad01336h,00eabf129h,06239c81dh,09d276be2h,08ee761deh,01eda6ad3h,0406a7a34h
+ DD 04a493b31h,04bf367bah,09bf7f026h,054f20a52h,09795914bh,0b696e062h,08bf236ach,0cddab96dh,0ed25ea13h,04ff2c70ah,081cbbbe7h,0fa1d09ebh,0468544c5h,088fc8c87h,0696b3317h,0847a670dh
+ DD 064bcb626h,0f133421eh,026dee0b5h,0aea638c8h,0b310346ch,0d6e7680bh,0d5d4ced3h,0e06f4097h,07512a30bh,009961452h,0e589a59ah,0f3d867fdh,052d0c180h,02e73254fh,0333c74ach,09063d8a3h
+ DD 0d314e7bch,0eda6c595h,0467899edh,02ee7464bh,00a1ed5d3h,01cef423ch,069cc7613h,0217e76eah,0e7cda917h,027ccce1fh,08a893f16h,012d8016bh,09fc74f6bh,0bcd6de84h,0f3144e61h,0fa5817e2h
+ DD 00821ee4ch,01f354164h,00bc61992h,01583eab4h,01d72879fh,07490caf6h,0f76ae7b2h,0998ad9f3h,0a41157f7h,01e181950h,0e8da3a7eh,0a9d7e1e6h,08426b95fh,0963784ebh,0542e2a10h,00ee4ed6eh
+ DD 0ac751e7bh,0b79d4cc5h,0fd4211bdh,093f96472h,0c8de4fc6h,08c72d3d2h,0df44f064h,07b69cbf5h,0f4bf94e1h,03da90ca2h,0f12894e2h,01a5325f8h,07917d60bh,00a437f6ch,096c9cb5dh,09be70486h
+ DD 0e1dc5c05h,0b4d880bfh,0eebeeb57h,0d738addah,0df0fe6a3h,06f0119d3h,066eaaf5ah,05c686e55h,0dfd0b7ech,09cb10b50h,06a497c21h,0bdd0264bh,08c546c96h,0fc093514h,079dbf42ah,058a947fah
+ DD 049ccd6d7h,0c0b48d4eh,088bd5580h,0ff8fb02ch,007d473b2h,0c75235e9h,0a2188af3h,04fab1ac5h,097576ec0h,0030fa3bch,00b7e7d2fh,0e8c946e8h,070305600h,040a5c9cch,0c8b013b4h,06d8260a9h
+ DD 070bba85ch,00368304fh,0a4a0d311h,0ad090da1h,02415eec1h,07170e870h,08461ea47h,0bfba35feh,0c1e91938h,06279019ah,01afc415fh,0a47638f3h,0bcba0e0fh,036c65cbbh,0034e2c48h,002160efbh
+ DD 0615cd9e4h,0e6c51073h,0f1243c06h,0498ec047h,0b17b3d8ch,03e5a8809h,00cc565f1h,05cd99e61h,07851dafeh,081e312dfh,0a79061e2h,0f156f5bah,0880c590eh,080d62b71h,00a39faa1h,0bec9746fh
+ DD 0c8ed1f7ah,01d98a9c1h,0a81d5ff2h,009e43bb5h,00da0794ah,0d5f00f68h,0661aa836h,0412050d9h,090747e40h,0a89f7c4eh,0b62a3686h,06dc05ebbh,0308e3353h,0df4de847h,09fb53bb9h,053868fbbh
+ DD 0cfdcf7ddh,02b09d2c3h,0723fcab4h,041a9fce3h,007f57ca3h,073d905f7h,0ac8e1555h,0080f9fb1h,09ba7a531h,07c088e84h,0ed9a147fh,007d35586h,0af48c336h,0602846abh,00ccf0e79h,07320fd32h
+ DD 0b18bd1ffh,0aa780798h,0afdd2905h,052c2e300h,0434267cdh,0f27ea3d6h,015605b5fh,08b96d16dh,04b45706bh,07bb31049h,0743d25f8h,0e7f58b8eh,087f30076h,0e9b5e45bh,05d053d5ah,0d19448d6h
+ DD 0d3210a04h,01ecc8cb9h,0dafb5269h,06bc7d463h,067c3489fh,03e59b10ah,065641e1bh,01769788ch,0bd6cb838h,08a53b82dh,0236d5f22h,07066d6e6h,06908536eh,003aa1c61h,066ae9809h,0c971da0dh
+ DD 0c49a2fach,001b3a86bh,03092e77ah,03b8420c0h,07d6fb556h,002057300h,0bff40a87h,06941b2a1h,00658ff2ah,0140b6308h,03424ab36h,087804363h,05751e299h,00253bd51h,0449c3e3ah,0c75bcd76h
+ DD 07f8f875dh,092eb4090h,056c26bbfh,09c9d754eh,08110bbe7h,0158cea61h,0745f91eah,062a6b802h,0c6e7394bh,0a79c41aah,0ad57ef10h,0445b6a83h,06ea6f40ch,00c5277ebh,088633365h,0319fe96bh
+ DD 0385f63cbh,00b0fc61fh,022bdd127h,041250c84h,009e942c2h,067d153f1h,0c021ad5dh,060920d08h,0724d81a5h,0229f5746h,05bba3299h,0b7ffb892h,0de413032h,0518c51a1h,03c2fd94ch,02a9bfe77h
+ DD 03191f4fdh,0cbcde239h,0d3d6ada1h,043093e16h,058769606h,0184579f3h,0d236625ch,02c94a8b3h,05c437d8eh,06922b9c0h,0d8d9f3c8h,03d4ae423h,02e7090a2h,0f72c31c1h,0d76a55bdh,04ac3f5f3h
+ DD 06b6af991h,0342508fch,01b5cebbdh,00d527100h,0dd440dd7h,0b84740d0h,0780162fdh,0748ef841h,0dfc6fafbh,0a8dbfe0eh,0f7300f27h,0eadfdf05h,0feba4ec9h,07d06555fh,09e25fa97h,012c56f83h
+ DD 0d39b8c34h,077f84203h,03125eddbh,0ed8b1be6h,0f6e39dc5h,05bbf2441h,06a5d678ah,0b00f6ee6h,057d0ea99h,0ba456ecfh,017e06c43h,0dcae0f58h,00f5b4baah,001643de4h,0d161b9beh,02c324341h
+ DD 0e126d468h,080177f55h,076748e09h,0ed325f1fh,0cfa9bdc2h,06116004ah,03a9fb468h,02d8607e6h,06009d660h,00e573e27h,08d10c5a1h,03a525d2eh,03b9009a0h,0d26cb45ch,0de9d7448h,0b6b0cdc0h
+ DD 0e1337c26h,0949c9976h,0d73d68e5h,06faadebdh,0f1b768d9h,09e158614h,09cc4f069h,022dfa557h,0be93c6d6h,0ccd6da17h,0a504f5b9h,024866c61h,08d694da1h,02121353ch,00140b8c6h,01c6ca580h
+ DD 0e964021eh,0c245ad8ch,0032b82b3h,0b83bffbah,047ef9898h,0faa220c6h,0982c948ah,07e8d3ac6h,0bc2d124ah,01faa2091h,005b15ff4h,0bd54c3ddh,0c87c6fb7h,0386bf3abh,0fdeb6f66h,0fb2b0563h
+ DD 05b45afb4h,04e77c557h,0efb8912dh,0e9ded649h,042f6e557h,07ec9bbf5h,062671f00h,02570dfffh,088e084bdh,02b3bfb78h,0f37fe5b4h,0a024b238h,095649aeeh,044e7dc04h,05e7ec1d8h,0498ca255h
+ DD 0aaa07e86h,03bc766eah,0f3608586h,00db6facbh,0bdc259c8h,0badd2549h,0041c649fh,095af3c6eh,002e30afbh,0b36a928ch,0008a88b8h,09b5356adh,0cf1d9e9dh,04b67a5f1h,0a5d8d8ceh,0c6542e47h
+ DD 07adfb6cch,073061fe8h,098678141h,0cc826fd3h,03c80515ah,000e758b1h,041485083h,06afe3247h,0b6ae8a75h,00fcb08b9h,04acf51e1h,0b8cf388dh,06961b9d6h,0344a5560h,06a97fd0ch,01a6778b8h
+ DD 0ecc4c7e3h,0d840fdc1h,016db68cch,0de9fe47dh,0a3e216aah,0e95f89deh,09594a8beh,084f1a6a4h,05a7b162bh,07ddc7d72h,0adc817a3h,0c5cfda19h,078b58d46h,080a5d350h,082978f19h,093365b13h
+ DD 026a1fc90h,02e44d225h,04d70705dh,00d6d10d2h,0d70c45f4h,0d94b6b10h,0b216c079h,00f201022h,0658fde41h,0cec966c5h,07e27601dh,0a8d2bc7dh,0ff230be7h,0bfcce3e1h,00033ffb5h,03394ff6bh
+ DD 08132c9afh,0d890c509h,0361e7868h,0aac4b0ebh,0e82d15aah,05194ded3h,023ae6b7dh,04550bd2eh,0ea5399d4h,03fda318eh,091638b80h,0d989bffah,0a14aa12dh,05ea124d0h,03667b944h,01fb1b899h
+ DD 044c44d6ah,095ec7969h,057e86137h,091df144ah,073adac44h,0915fd620h,059a83801h,08f01732dh,03aa0a633h,0ec579d25h,0c9d6d59ch,006de5e7ch,0b1ef8010h,0c132f958h,0e65c1a02h,029476f96h
+ DD 0d34c3565h,0336a77c0h,01b9f1e9eh,0ef1105b2h,0f9e08002h,063e6d08bh,0c613809eh,09aff2f21h,03a80e75dh,0b5754f85h,06bbda681h,0de71853eh,08197fd7ah,086f041dfh,0127817fah,08b332e08h
+ DD 0b9c20cdah,005d99be8h,0d5cd0c98h,089f7aad5h,05bb94183h,07ef936feh,0b05cd7f2h,092ca0753h,074a1e035h,09d65db11h,013eaea92h,002628cc8h,049e4fbf2h,0f2d9e242h,0e384f8b7h,094fdfd9bh
+ DD 063428c6bh,065f56054h,090b409a5h,02f7205b2h,0ff45ae11h,0f778bb78h,0c5ee53b2h,0a13045beh,003ef77feh,0e00a14ffh,0ffef8befh,0689cd59fh,01e9ade22h,03578f0edh,06268b6a8h,0e99f3ec0h
+ DD 0ea1b3c3eh,0a2057d91h,0b8823a4ah,02d1a7053h,02cca451eh,0abbb336ah,02218bb5dh,0cd2466e3h,0c8cb762dh,03ac1f42fh,07690211fh,07e312aaeh,045d07450h,0ebb9bd73h,046c2213fh,0207c4b82h
+ DD 0375913ech,099d425c1h,067908220h,094e45e96h,0cd67dbf6h,0c08f3087h,0c0887056h,0a5670fbeh,066f5b8fch,06717b64ah,0786fec28h,0d5a56aeah,0c0ff4952h,0a8c3f55fh,0457ac49bh,0a77fefaeh
+ DD 098379d44h,029882d7ch,0509edc8ah,0d000bdfbh,0e66fe464h,0c6f95979h,0fa61bde0h,0504a6115h,0effea31ah,056b3b871h,0f0c21a54h,02d3de26dh,0834753bfh,021dbff31h,069269d86h,0e67ecf49h
+ DD 0151fe690h,07a176952h,07f2adb5fh,003515804h,0d1b62a8dh,0ee794b15h,0aae454e6h,0f004ceech,0f0386fach,00897ea7ch,0d1fca751h,03b62ff12h,01b7a04ech,0154181dfh,0fb5847ech,02008e04ah
+ DD 041dbd772h,0d147148eh,022942654h,02b419f73h,0e9c544f7h,0669f30d3h,0c8540149h,052a2c223h,0634dfb02h,05da9ee14h,0f47869f3h,05f074ff0h,0a3933acch,074ee878dh,04fe35ed1h,0e6510651h
+ DD 0f1012e7ah,0b3eb9482h,0a8a566aeh,051013cc0h,047c00d3bh,0dd5e9243h,0946bb0e5h,07fde089dh,0c731b4b3h,0030754feh,099fda062h,012a136a4h,05a1a35bch,07c1064b8h,0446c84efh,0bf1f5763h
+ DD 0a16d4b34h,0ed29a56dh,0dca21c4fh,07fba9d09h,06d8de486h,066d7ac00h,073a2a5e1h,060061987h,09da28ff0h,08b400f86h,043c4599ch,03133f708h,0ee28cb0dh,09911c9b8h,08e0af61dh,0cd7e2874h
+ DD 072ed91fch,05a85f0f2h,09cd4a373h,085214f31h,01925253ch,0881fe5beh,091e8bc76h,0d8dc98e0h,0585cc3a2h,07120affeh,0735bf97ah,0724952edh,03eb34581h,05581e7dch,0e52ee57dh,05cbff4f2h
+ DD 087d8cc7bh,08d320a0eh,0f1d280d0h,09beaa7f3h,09beec704h,07a0b9571h,05b7f0057h,09126332eh,08ed3bd6dh,001fbc1b4h,0d945eb24h,035bb2c12h,09a8ae255h,06404694eh,08d6abfb3h,0b6092eech
+ DD 0cc058865h,04d76143fh,06e249922h,07b0a5af2h,06a50d353h,08aef9440h,064f0e07ah,0e11e4bcch,0a14a90fah,04472993ah,0ba0c51d4h,07706e20ch,01532672dh,0f403292fh,021829382h,052573bfah
+ DD 03b5bdb83h,06a7bb6a9h,0a4a72318h,008da65c0h,063eb065fh,0c58d22aah,01b15d685h,01717596ch,0b266d88bh,0112df0d0h,05941945ah,0f688ae97h,07c292cach,0487386e3h,057d6985ch,042f3b50dh
+ DD 06a90fc34h,06da4f998h,065ca8a8dh,0c8f257d3h,06951f762h,0c2feabcah,074c323ach,0e1bc81d0h,0251a2a12h,01bc68f67h,0be8a70dch,010d86587h,0f0f84d2eh,0d648af7fh,06a43ac92h,0f0aa9ebch
+ DD 027596893h,069e3be04h,045bf452bh,0b6bb02a6h,0f4c698c8h,00875c11ah,0bece3794h,06652b5c7h,04f5c0499h,07b3755fdh,0b5532b38h,06ea16558h,0a2e96ef7h,0d1c69889h,061ed8f48h,09c773c3ah
+ DD 09b323abch,02b653a40h,0f0e1d791h,0e26605e1h,04a87157ah,045d41064h,0cbbce616h,08f9a78b7h,0c407edddh,0cf1e44aah,0a35b964fh,081ddd1d8h,0fd083999h,0473e339eh,08e796802h,06c94bddeh
+ DD 08545d185h,05a304adah,0738bb8cbh,082ae44eah,0df87e10eh,0628a35e3h,0a15b9fe3h,0d3624f3dh,014be4254h,0cc44209bh,0bdbc2ea5h,07d0efcbch,004c37bbeh,01f603362h,056a5852ch,021f363f5h
+ DD 0a8501550h,0a1503d1ch,0d8ab10bbh,02251e0e1h,06961c51ch,0de129c96h,081910f68h,01f7246a4h,05f2591f2h,02eb744eeh,05e627157h,03c47d33fh,022f3bd68h,04d6d62c9h,0cb8df856h,06120a64bh
+ DD 07b5d07dfh,03a9ac6c0h,07ef39783h,0a92b9558h,0ab3a9b4fh,0e128a134h,0b1252f05h,041c18807h,080ba9b1ch,0fc7ed089h,0c532a9ddh,0ac8dc6deh,055246809h,0bf829cefh,05b4ee80fh,0101b784fh
+ DD 0b6f11603h,0c09945bbh,041d2801eh,057b09dbeh,0a97534a8h,0fba5202fh,0c17b9614h,07fd8ae5fh,078308435h,0a50ba666h,0d3868c4dh,09572f77ch,02dd7aab0h,00cef7bfdh,02c7c79ffh,0e7958e08h
+ DD 025346689h,081262e42h,0b07c7004h,0716da290h,0b7950ee3h,035f911eah,0261d21b5h,06fd72969h,008b640d3h,052389803h,0887f12a1h,05b0026eeh,0742e9311h,020e21660h,05ff77ff7h,00ef6d541h
+ DD 0f9c41135h,0969127f0h,068a64993h,0f21d60c9h,0e541875ch,0656e5d0ch,0a1d3c233h,0f1e0f84eh,006002d60h,09bcca359h,006191552h,0be2da60ch,061181ec3h,05da8bbaeh,065806f19h,09f04b823h
+ DD 0d4b79bb8h,0f1604a7dh,052c878c8h,0aee806fbh,08d47b8e8h,034144f11h,0949f9054h,072edf52bh,02127015ah,0ebfca84eh,09cb7cef3h,09051d0c0h,0296deec8h,086e8fe58h,041010d74h,033b28188h
+ DD 0171b445fh,001079383h,08131ad4ch,09bcf21e3h,0c93987e8h,08cdfe205h,0c92e8c8fh,0e63f4152h,030add43dh,0729462a9h,0c980f05ah,062ebb143h,03b06e968h,04f3954e5h,0242cf6b1h,0fe1d75adh
+ DD 0af8685c8h,05f95c6c7h,02f8f01aah,0d4c1c8ceh,02574692ah,0c44bbe32h,0d4a4a068h,0b8003478h,02eca3cdbh,07c8fc6e5h,0ec04d399h,0ea1db16bh,08f2bc5cfh,0b05bc82eh,0f44793d2h,0763d517fh
+ DD 008bd98d0h,04451c1b8h,06575f240h,0644b1cd4h,07375d270h,06907eb33h,0fa2286bdh,056c8bebdh,0c4632b46h,0c713d2ach,0afd60242h,017da427ah,0c95c7546h,0313065b7h,0bf17a3deh,0f8239898h
+ DD 04c830320h,0f3b7963fh,0903203e3h,0842c7aa0h,0e7327afbh,0af22ca0ah,0967609b6h,038e13092h,0757558f1h,073b8fb62h,0f7eca8c1h,03cc3e831h,0f6331627h,0e4174474h,0c3c40234h,0a77989cah
+ DD 044a081e0h,0e5fd17a1h,0b70e296ah,0d797fb7dh,0481f719ch,02b472b30h,0fe6f8c52h,00e632a98h,0c5f0c284h,089ccd116h,02d987c62h,0f51088afh,04c2de6cfh,02a2bccdah,0f679f0f9h,0810f9efeh
+ DD 07ffe4b3eh,0b0f394b9h,0e5fa5d21h,00b691d21h,09dfbbc75h,0b0bd7747h,0faf78b00h,0d2830fdah,052434f57h,0f78c249ch,098096dabh,04b1f7545h,08ff8c0b3h,073bf6f94h,0454e134ch,034aef03dh
+ DD 0b7ac7ec5h,0f8d151f4h,0e50da7d5h,0d6ceb95ah,0dc3a0eb8h,0a1b492b0h,0b3dd2863h,075157b69h,0c5413d62h,0e2c4c74eh,0bc5fc4c7h,0be329ff7h,060fa9ddah,0835a2aeah,07445cb87h,0f117f5adh
+ DD 0b0166f7ah,0ae8317f4h,0ceec74e6h,0fbd3e3f7h,0e0874bfdh,0fdb516ach,0c681f3a3h,03d846019h,07c1620b0h,00b12ee5ch,02b63c501h,0ba68b4ddh,06668c51eh,0ac03cd32h,04e0bcb5bh,02a6279f7h
+ DD 06ae85c10h,017bd69b0h,01dfdd3a6h,072946979h,02c078bech,0d9a03268h,0bfd68a52h,041c6a658h,00e023900h,0cdea1024h,0b10d144dh,0baeec121h,0058ab8dch,05a600e74h,0bb89ccddh,01333af21h
+ DD 03aaba1f1h,0df25eae0h,03b7144cfh,02cada16eh,071ab98bch,0657ee27dh,07a6fc96eh,099088b4ch,03549dbd4h,005d5c0a0h,0f158c3ach,042cbdf8fh,087edd685h,03fb6b3b0h,086f064d0h,022071cf6h
+ DD 0ff2811e5h,0d2d6721fh,0fe7fae8ch,0db81b703h,0d3f1f7bbh,03cfb74efh,016cdeb5dh,00cdbcd76h,0566a808ch,04f39642ah,0340064d6h,002b74454h,00528fa6fh,0fabbadcah,0d3fc0bb6h,0e4c3074ch
+ DD 0b796d219h,0b32cb8b0h,034741dd9h,0c3e95f4fh,068edf6f5h,087212125h,0a2b9cb8eh,07a03aee4h,0f53a89aah,00cd3c376h,0948a28dch,00d8af9b1h,0902ab04fh,0cf86a3f4h,07f42002dh,08aacb62ah
+ DD 0f62ffd52h,0106985ebh,05797bf10h,0e670b54eh,0c5e30aefh,04b405209h,04365b5e9h,012c97a20h,01fe32093h,0104646ceh,03907a8c9h,013cb4ff6h,0d46e726bh,08b9f30d1h,0aba0f499h,0e1985e21h
+ DD 010a230cdh,0c573dea9h,0cd30f947h,024f46a93h,0abe2010ah,0f2623fcfh,073f00e4fh,03f278cb2h,050b920ebh,0ed55c67dh,08e760571h,0f1cb9a2dh,00895b709h,07c50d109h,0190d4369h,04207cf07h
+ DD 0c4127fe1h,03b027e81h,03ae9c566h,0a9f8b9adh,0acbfbba5h,05ab10851h,0569556f5h,0a747d648h,02ba97bf7h,0cc172b5ch,0bcfa3324h,015e0f77dh,07686279dh,0a345b797h,0e38003d3h,05a723480h
+ DD 08f5fcda8h,0fd8e139fh,0bdee5bfdh,0f3e558c4h,0e33f9f77h,0d76cbaf4h,071771969h,03a4c97a4h,0f6dce6a7h,0da27e84bh,013e6c2d1h,0ff373d96h,0d759a6e9h,0f115193ch,063d2262ch,03f9b7025h
+ DD 0317cd062h,0d9764a31h,0199f8332h,030779d8eh,016b11b0bh,0d8074106h,078aeaed8h,07917ab9fh,028fb1d8eh,0b67a9cbeh,0136eda33h,02e313563h,0a371a86ch,0010b7069h,06744e6b7h,044d90fa2h
+ DD 0d6b3e243h,068190867h,059048c48h,09fe6cd9dh,095731538h,0b900b028h,032cae04fh,0a012062fh,09399d082h,08107c8bch,041df12e2h,047e8c54ah,0b6ef3f73h,014ba5117h,081362f0bh,022260beah
+ DD 01a18cc20h,090ea261eh,02321d636h,02192999fh,0e311b6a0h,0ef64d314h,03b54a1f5h,0d7401e4ch,06fbca2bah,019019983h,08fbffc4bh,046ad3293h,03786bf40h,0a142d3f6h,0b67039fch,0eb5cbc26h
+ DD 0252bd479h,09cb0ae6ch,012b5848fh,005e0f88ah,0a5c97663h,078f6d2b2h,0c162225ch,06f6e149bh,0de601a89h,0e602235ch,0f373be1fh,0d17bbe98h,0a8471827h,0caf49a5bh,018aaa116h,07e1a0a85h
+ DD 0270580c3h,06c833196h,0f1c98a14h,01e233839h,0ae34e0a5h,067b2f7b4h,0d8ce7289h,047ac8745h,0100dd467h,02b74779ah,04ee50d09h,0274a4337h,083608bc9h,0603dcf13h,0c89e8388h,0cd9da6c3h
+ DD 0355116ach,02660199fh,0b6d18eedh,0cc38bb59h,02f4bc071h,03075f31fh,0265dc57eh,09774457fh,0c6db88bbh,006a6a9c8h,04ec98e04h,06429d07fh,005ecaa8bh,08d05e57bh,07872ea7bh,020f140b1h
+ DD 0ca494693h,0df8c0f09h,0f252e909h,048d3a020h,057b14b12h,04c5c29afh,0bf47ad1ch,07e6fa37dh,049a0c938h,066e7b506h,06be5f41fh,0b72c0d48h,0b2359412h,06a6242b8h,08e859480h,0cd35c774h
+ DD 087baa627h,012536feah,0f72aa680h,058c1fec1h,0601e5dc9h,06c29b637h,0de9e01b9h,09e3c3c1ch,02bcfe0b0h,0efc8127bh,02a12f50dh,035107102h,04879b397h,06ccd6cb1h,0f8a82f21h,0f792f804h
+ DD 0a9b46402h,0509d4804h,0c10f0850h,0edddf85dh,04b6208aah,0928410dch,0391012dch,0f6229c46h,07727b9b6h,0c5a7c41eh,0aa444842h,0289e4e4bh,0e9a947eah,0049ba1d9h,083c8debch,044f9e47fh
+ DD 0611f8b8eh,0fa77a1feh,0f518f427h,0fd2e416ah,0114ebac3h,0c5fffa70h,05d89697bh,0fe57c4e9h,0b1aaf613h,0fdd053ach,0ea585a45h,031df210fh,024985034h,0318cc10eh,05f1d6130h,01a38efd1h
+ DD 00b1e9e21h,0bf86f237h,01dbe88aah,0b258514dh,090c1baf9h,01e38a588h,0bdb9b692h,02936a01eh,06dd5b20ch,0d576de98h,070f98ecfh,0b586bf71h,0c42d2fd7h,0cccf0f12h,0fb35bd7bh,08717e61ch
+ DD 035e6fc06h,08b1e5722h,00b3e13d5h,03477728fh,0aa8a7372h,0150c294dh,03bfa528ah,0c0291d43h,0cec5a196h,0c6c8bc67h,05c2e8a7ch,0deeb31e4h,0fb6e1c51h,0ba93e244h,02e28e156h,0b9f8b71bh
+ DD 0968a2ab9h,0ce65a287h,046bbcb1fh,0e3c5ce69h,0e7ae3f30h,0f8c835b9h,0ff72b82bh,016bbee26h,0fd42cd22h,0665e2017h,0f8b1d2a0h,01e139970h,079204932h,0125cda29h,049c3bee5h,07aee94a5h
+ DD 089821a66h,068c70160h,08f981669h,0f7c37678h,048cc3645h,0d90829fch,0d70addfch,0346af049h,0370bf29ch,02057b232h,042e650eeh,0f90c73ceh,0a126ab90h,0e03386eah,0975a087bh,00e266e7eh
+ DD 00fca65d9h,080578eb9h,016af45b8h,07e2989eah,0cac75a4eh,07438212dh,04fef36b8h,038c7ca39h,0d402676ah,08650c494h,0f72c7c48h,026ab5a66h,0ce3a464eh,04e6cb426h,02b72f841h,0f8f99896h
+ DD 01a335cc8h,08c318491h,06a5913e4h,0563459bah,0c7b32919h,01b920d61h,0a02425adh,0805ab8b6h,08d006086h,02ac512dah,0bcf5c0fdh,06ca4846ah,0ac2138d7h,0afea51d8h,0344cd443h,0cb647545h
+ DD 0bd7d9040h,00429ee8fh,0819b9c96h,0ee66a2deh,0dea7d744h,054f9ec25h,0671721bbh,02ffea642h,0114344eah,04f19dbd1h,0fd0dbc8bh,004304536h,029ec7f91h,0014b50aah,0bb06014dh,0b5fc22feh
+ DD 01ee682e0h,060d963a9h,0fe85c727h,0df48abc0h,02e707c2dh,00cadba13h,0a645aeffh,0de608d3ah,0edafd883h,005f1c28bh,0bd94de1fh,03c362edeh,013593e41h,08dd0629dh,0766d6eafh,00a5e736fh
+ DD 0f68cf9d1h,0bfa92311h,0c1797556h,0a4f9ef87h,05601c209h,010d75a1fh,009b07361h,0651c374ch,088b5ceadh,049950b58h,06fa9dbaah,00ef00058h,04e15f33ah,0f51ddc26h,02ef46140h,01f8b5ca6h
+ DD 0ee9523f0h,0343ac0a3h,0975ea978h,0bb75eab2h,0107387f4h,01bccf332h,09ab0062eh,0790f9259h,01e4f6a5fh,0f1a363adh,062519a50h,006e08b84h,07265f1eeh,060915187h,093ae985eh,06a80ca34h
+ DD 0aaba4864h,081b29768h,08d52a7d6h,0b13cabf2h,08ead03f1h,0b5c36348h,081c7c1c0h,0c932ad95h,0cae1e27bh,05452708eh,01b0df648h,09dac4269h,0dfcdb8bch,0233e3f0ch,0ec540174h,0e6ceccdfh
+ DD 095081181h,0bd0d845eh,0699355d5h,0cc8a7920h,0c3b375a8h,0111c0f6dh,0fd51e0dch,0fd95bc6bh,06888523ah,04a106a26h,0cb01a06dh,04d142bd6h,0adb9b397h,079bfd289h,0e9863914h,00bdbfb94h
+ DD 01660f6a6h,029d8a229h,0551c042dh,07f6abcd6h,00ac3ffe8h,013039debh,0ec8523fbh,0a01be628h,00ca1c328h,06ea34103h,0b903928eh,0c74114bdh,09e9144b0h,08aa4ff4eh,07f9a4b17h,07064091fh
+ DD 0e447f2c4h,0a3f4f521h,0604291f0h,081b8da7ah,07d5926deh,0d680bc46h,034a1202fh,084f21fd5h,04e9df3d8h,01d1e3181h,039ab8d34h,01ca4861ah,05b19aa4ah,0809ddeech,04d329366h,059f72f7eh
+ DD 0386d5087h,0a2f93f41h,0dd67d64fh,040bf739ch,066702158h,0b4494205h,073b1e178h,0c33c65beh,038ca6153h,0cdcd657ch,0dc791976h,097f4519ah,0cd6e1f39h,0cc7c7f29h,07e3c3932h,038de9cfbh
+ DD 07b793f85h,0e448eba3h,0f067e914h,0e9f8dbf9h,0f114ae87h,0c0390266h,0cd6a8e2ah,039ed75a7h,07ffba390h,0adb14848h,06af9bc09h,067f8cb8bh,09c7476dbh,0322c3848h,052a538d6h,0a320fecfh
+ DD 0b2aced2bh,0e0493002h,0616bd430h,0dfba1809h,0c331be70h,0531c4644h,090d2e450h,0bc04d32eh,00f9f142dh,01805a0d1h,047ee5a23h,02c44a0c5h,03989b4e3h,031875a43h,00c063481h,06b1949fdh
+ DD 0be0f4492h,02dfb9e08h,0e9d5e517h,03ff0da03h,0f79466a8h,003dbe9a1h,015ea9932h,00b87bcd0h,0ab1f58abh,0eb64fc83h,0817edc8ah,06d9598dah,01d3b67e5h,0699cff66h,092635853h,0645c0f29h
+ DD 0eabaf21ch,0253cdd82h,02241659eh,082b9602ah,02d9f7091h,02cae07ech,08b48cd9bh,0be4c720ch,06f08d6c9h,06ce5bc03h,0af10bf40h,036e8a997h,03e10ff12h,083422d21h,0bcc12494h,07b26d3ebh
+ DD 0c9469ad6h,0b240d2d0h,030afa05bh,0c4a11b4dh,0dd6ba286h,04b604aceh,03ee2864ch,018486600h,08d9ce5beh,05869d6bah,0ff4bfb0dh,00d8f68c5h,05700cf73h,0b69f210bh,06d37c135h,061f6653ah
+ DD 05aff5a48h,0ff3d432bh,072ba3a69h,00d81c4b9h,0fa1899efh,0ee879ae9h,02d6acafdh,0bac7e2a0h,01c664399h,0d6d93f6ch,05bcb135dh,04c288de1h,09dab7cbfh,083031dabh,03abbf5f0h,0fe23feb0h
+ DD 0cdedca85h,09f1b2466h,01a09538ch,0140bb710h,05e11115dh,0ac8ae851h,06f03f59eh,00d63ff67h,07d234afbh,0755e5551h,07e208fc1h,061c2db4eh,0f28a4b5dh,0aa9859ceh,034af030fh,0bdd6d4fch
+ DD 03be01cb1h,0d1c4a26dh,0243aa07ch,09ba14ffch,0b2503502h,0f95cd3a9h,07d2a93abh,0e379bc06h,0d4ca8d68h,03efc18e9h,080bb412ah,0083558ech,09645a968h,0d903b940h,09ba6054fh,0a499f0b6h
+ DD 0b8349abeh,0208b573ch,030b4fc1ch,03baab3e5h,0cb524990h,087e978bah,0ccdf0e80h,03524194eh,07d4bcc42h,062711725h,0b90109bah,0e90a3d9bh,01323e1e0h,03b1bdd57h,05eae1599h,0b78e9bd5h
+ DD 09e03d278h,00794b746h,0d70e6297h,080178605h,099c97855h,0171792f8h,0f5a86b5ch,011b393eeh,0d8884f27h,048ef6582h,0bf19ba5fh,0bd44737ah,0a42062c6h,08698de4ch,061ce9c54h,08975eb80h
+ DD 0d7fe71f3h,0d50e57c7h,0bc97ce38h,015342190h,04df07b63h,051bda2deh,0200eb87dh,0ba12aeaeh,0a9b4f8f6h,0abe135d2h,0fad6d99ch,004619d65h,07994937ch,04a6683a7h,06f94f09ah,07a778c8bh
+ DD 020a71b89h,08c508623h,01c229165h,0241a2aedh,0aaf83a99h,0352be595h,01562bac8h,09fbfee7fh,05c4017e3h,0eaf658b9h,015120b86h,01dc7f9e0h,04c034d6fh,0d84f13ddh,0eaea3038h,0283dd737h
+ DD 0cd85d6a2h,0197f2609h,0fae60177h,06ebbc345h,04e12fedeh,0b80f031bh,007a2186bh,0de55d0c2h,024dcdd5ah,01fb3e37fh,07ed191fbh,08d602da5h,076023e0dh,0108fb056h,0459c20c0h,070178c71h
+ DD 03fe54cf0h,0fad5a386h,002bbb475h,0a4a3ec4fh,0919d94d7h,01aa5ec20h,0a81e4ab3h,05d3b63b5h,05ad3d2afh,07fa733d8h,0d1ac7a37h,0fbc586ddh,040779614h,0282925deh,0e74a242ah,0fe0ffffbh
+ DD 0906151e5h,03f39e67fh,055e10649h,0cea27f5fh,0c17cf7b7h,0dca1d4e1h,02fe2362dh,00c326d12h,07dd35df3h,005f7ac33h,0c396dbdfh,00c3b7639h,003b7db1ch,00912f5ach,05c9ed4a9h,09dea4b70h
+ DD 0aae3f639h,0475e6e53h,0fc278bach,0faba0e7ch,09490375fh,016f9e221h,0a5a7ed0ah,0aebf9746h,0f41ad5d6h,045f9af3fh,0b2e99224h,003c4623ch,0b3cf56aah,082c5bb5ch,034567ed3h,064311819h
+ DD 08be489ach,0ec57f211h,0b9a1104bh,02821895dh,06064e007h,0610dc875h,05b20d0feh,08e526f3fh,05b645aeeh,06e71ca77h,0800e10ffh,03d1dcb9fh,0189cf6deh,036b51162h,06bb17353h,02c5a3e30h
+ DD 02a6c6fbfh,0c186cd3eh,04bf97906h,0a74516fah,0279d6901h,05b4b8f4bh,02b573743h,00c4e57b4h,0b6e386b6h,075fdb229h,099deac27h,0b46793fdh,0cf712629h,0eeec47eah,0cbc3b2ddh,0e965f3c4h
+ DD 0425c6559h,08dd1fb83h,00af06fdah,07fc00ee6h,033d956dfh,0e98c9225h,04fbdc8a2h,00f1ef335h,0b79b8ea2h,02abb5145h,0bdbff288h,040fd2945h,0d7185db7h,06a814ac4h,0c084609ah,0c4329d6fh
+ DD 0ed1be45dh,0c9ba7b52h,0e4cd2c74h,0891dd20dh,0824139b1h,05a4d4a7fh,0b873c710h,066c17716h,02843c4e0h,05e5bc141h,0b97eb5bfh,0d5ac4817h,0450c95c7h,0c0f8af54h,0318406c5h,0c91b3fa0h
+ DD 0ab9d97f8h,0360c340ah,090a2d611h,0fb57bd07h,0a6a6f7e5h,04339ae3ch,02feb8a10h,09c1fcd2ah,0c7ea7432h,0972bcca9h,0308076f6h,01b0b924ch,02a5b4ca5h,080b2814ah,061ef3b29h,02f78f55bh
+ DD 0c18a414fh,0f838744ah,0903d0a86h,0c611eaaeh,02a453f55h,094dabc16h,014efb279h,0e6f2e3dah,09320dc3ch,05b7a6017h,08df6b5a4h,0692e382fh,02d40fa90h,03f5e15e0h,0643dd318h,0c87883aeh
+ DD 053544774h,0511053e4h,03adba2bch,0834d0ecch,0bae371f5h,04215d7f7h,06c8663bch,0fcfd57bfh,0d6901b1dh,0ded2383dh,0b5587dc3h,03b49fbb4h,007625f62h,0fd44a08dh,09de9b762h,03ee4d65bh
+ DD 00d63d1fah,064e5137dh,002a9d89fh,0658fc052h,050436309h,048894874h,0d598da61h,0e9ae30f8h,0818baf91h,02ed710d1h,08b6a0c20h,0e27e9e06h,01c1a6b44h,01e28dcfbh,0d6ac57dch,0883acb64h
+ DD 0c2c6ff70h,08735728dh,0c5dc2235h,079d6122fh,019e277f9h,023f5d003h,0dded8cc7h,07ee84e25h,063cd880ah,091a8afb0h,03574af60h,03f3ea7c6h,002de7f42h,00cfcdc84h,0b31aa152h,062d0792fh
+ DD 08a5807ceh,08e1b4e43h,0e4109a7eh,0ad283893h,0afd59ddah,0c30cc9cbh,03d8d8093h,0f65f36c6h,0a60d32b2h,0df31469eh,03e8191c8h,0ee93df4bh,0355bdeb5h,09c1017c5h,08616aa28h,0d2623185h
+ DD 0dec31a21h,0b02c83f9h,06ad9d573h,0988c8b23h,0a57be365h,053e983aeh,0646f834eh,0e968734dh,05da6309bh,09137ea8fh,0c1f1ce16h,010f3a624h,0ca440921h,0782a9ea2h,05b46f1b5h,0df94739eh
+ DD 0cce85c9bh,09f9be006h,0a4c7c2d3h,0360e70d6h,0aefa1e60h,02cd5beeah,08c3d2b6dh,064cf63c0h,0e1cf6f90h,0fb107fa3h,0d5e044e6h,0b7e937c6h,0ce34db9fh,074e8ca78h,03e210bd0h,04f8b36c1h
+ DD 034a35ea8h,01df165a4h,04d4412f6h,03418e0f7h,0518836c3h,05af1f8afh,0130e1965h,042ceef4dh,0543a1957h,05560ca0bh,0886cb123h,0c33761e5h,0fe98ed30h,066624b1fh,01090997dh,0f772f4bfh
+ DD 04885d410h,0f4e540bbh,09ba5f8d7h,07287f810h,0de98dfb1h,022d0d865h,0bcfbb8a3h,049ff51a1h,06bc3012eh,0b6b6fa53h,0170d541dh,03d31fd72h,04b0f4966h,08018724fh,087dbde07h,079e7399fh
+ DD 0f4f8b16ah,056f8410eh,0c47b266ah,097241afeh,06d9c87c1h,00a406b8eh,0cd42ab1bh,0803f3e02h,004dbec69h,07f0309a8h,03bbad05fh,0a83b85f7h,0ad8e197fh,0c6097273h,05067adc1h,0c097440eh
+ DD 03524ff16h,0730eafb6h,0823fc6ceh,0d7f9b51eh,0443e4ac0h,027bd0d32h,04d66f217h,040c59ad9h,017c387a4h,06c33136fh,0eb86804dh,05043b8d5h,0675a73c9h,074970312h,0f16669b6h,0838fdb31h
+ DD 0418e7dddh,0c507b6ddh,0472f19d6h,039888d93h,00c27eb4dh,07eae26beh,0fbabb884h,017b53ed3h,02b01ae4fh,0fc27021bh,0cf488682h,088462e87h,0215e2d87h,0bee096ech,0d242e29bh,0eb2fea9ah
+ DD 0b821fc28h,05d985b5fh,0dc1e2ad2h,089d2e197h,09030ba62h,055b566b8h,04f41b1c6h,0e3fd41b5h,0b9a96d61h,0b738ac2eh,0369443f4h,07f8567cah,0f803a440h,08698622dh,08fe2f4dch,02b586236h
+ DD 056b95bceh,0bbcc00c7h,0616da680h,05ec03906h,072214252h,079162ee6h,086a892d2h,043132b63h,02f3263bfh,04bdd3ff2h,09cd0a142h,0d5b3733ch,044415ccbh,0592eaa82h,08d5474eah,0663e8924h
+ DD 05236344eh,08058a25eh,0bda76ee6h,082e8df9dh,011cc3d22h,0dcf6efd8h,03b4ab529h,000089cdah,0bd38a3dbh,091d3a071h,0ef72b925h,04ea97fc0h,0ea3edf75h,00c9fc15bh,0a4348ed3h,05a6297cdh
+ DD 0ce7c42d4h,00d38ab35h,082feab10h,09fd493efh,082111b45h,046056b6dh,073efc5c3h,0da11dae1h,05545a7fbh,0dc740278h,040d507e6h,0bdb2601ch,07066fa58h,0121dfeebh,039ae8c2ah,0214369a8h
+ DD 006e0956ch,0195709cbh,0010cd34bh,04c9d254fh,00471a532h,0f51e13f7h,01e73054dh,0e19d6791h,0db5c7be3h,0f702a628h,0b24dde05h,0c7141218h,0f29b2e2eh,0dc18233ch,085342dbah,03a6bd1e8h
+ DD 0b311898ch,03f747fa0h,0cd0eac65h,0e2a272e4h,0f914d0bch,04bba5851h,0c4a43ee3h,07a1a9660h,0a1c8cde9h,0e5a367ceh,07271abe3h,09d958ba9h,03d1615cdh,0f3ff7eb6h,0f5ae20b0h,0a2280dceh
+ DD 0cf640147h,056dba5c1h,05e83d118h,0ea5a2e3dh,0da24c511h,004cd6b6dh,0e854d214h,01c0f4671h,069565381h,091a6b7a9h,0decf1f5bh,0dc966240h,0fcf5d009h,01b22d21ch,09021dbd5h,02a05f641h
+ DD 0d4312483h,08c0ed566h,0643e216fh,05179a95dh,017044493h,0cc185fech,054991a21h,0b3063339h,00081a726h,0d801ecdbh,04fa89bbbh,00149b0c6h,04391b6b9h,0afe9065ah,0d633f3a3h,0edc92786h
+ DD 0ae6a8e13h,0e408c24ah,09f3897abh,085833fdeh,0d81a0715h,043800e7eh,0b44ffc5fh,0de08e346h,0cdeff2e0h,07094184ch,0165eaed1h,049f9387bh,0777c468ah,0635d6129h,0538c2dd8h,08c0dcfd1h
+ DD 07a6a308bh,0d6d9d9e3h,04c2767d3h,062375830h,0f38cbeb6h,0874a8bc6h,0ccb6fd9eh,0d94d3f1ah,0ba21f248h,092a9735bh,06cd1efb0h,0272ad0e5h,005b03284h,07437b69ch,06948c225h,0e7f04702h
+ DD 0cba2ecech,08a56c04ah,0e3a73e41h,00c181270h,003e93725h,06cb34e9dh,0496521a9h,0f77c8713h,0fa7f9f90h,094569183h,08c9707adh,0f2e7aa4ch,026c1c9a3h,0ced2c9bah,040197507h,09109fe96h
+ DD 0e9adfe1ch,09ae868a9h,0314e39bbh,03984403dh,0f2fe378fh,0b5875720h,0ba44a628h,033f901e0h,03652438ch,0ea1125feh,09dd1f20bh,0ae9ec4e6h,0bebf7fbdh,01e740d9eh,042dbe79ch,06dbd3ddch
+ DD 0edd36776h,062082aech,0e9859039h,0f612c478h,0032f7065h,0a493b201h,04ff9b211h,0ebd4d8f2h,0aac4cb32h,03f23a0aah,015ed4005h,0ea3aadb7h,0afa27e63h,0acf17ea4h,0c11fd66ch,056125c1ah
+ DD 03794f8dch,0266344a4h,0483c5c36h,0dcca923ah,03f9d10a0h,02d6b6bbfh,081d9bdf3h,0b320c5cah,047b50a95h,0620e28ffh,0cef03371h,0933e3b01h,099100153h,0f081bf85h,0c3a8c8d6h,0183be9a0h
+ DD 0d6bbe24dh,04e3ddc5ah,053843795h,0c6c74630h,065ec2d4ch,078193dd7h,0cd3c89b2h,0b8df26cch,05a483f8dh,098dbe399h,07dd3313ah,072d8a957h,0ab0bd375h,065087294h,07c259d16h,0fcd89248h
+ DD 07613aa81h,08a9443d7h,085fe6584h,080100800h,07fb10288h,070fc4dbch,0e86beee8h,0f58280d3h,07c978c38h,014fdd82fh,00de44d7bh,0df1204c1h,04160252fh,0a08a1c84h,0c17646a5h,0591554cah
+ DD 0a05bd525h,0214a37d6h,007957b3ch,048d5f09bh,0d7109bc9h,00247cdcbh,030599ce7h,040f9e4bbh,0f46ad2ech,0c325fa03h,0c3e3f9eeh,000f766cfh,0d43a4577h,0ab556668h,03ee03b93h,068d30a61h
+ DD 077b46a08h,07ddc81eah,0c7480699h,0cf5a6477h,06633f683h,043a8cb34h,092363c60h,01b867e6bh,01f60558eh,043921114h,02f41450eh,0cdbcdd63h,0cc630e8bh,07fc04601h,097038b43h,0ea7c66d5h
+ DD 004e99fd8h,07259b8a5h,04785549ah,098a8dd12h,0840552e1h,00e459a7ch,04bb0909eh,0cdfcf4d0h,053758da7h,034a86db2h,0eac997e1h,0e643bb83h,0530c5b7eh,096400bd7h,0b41c8b52h,09f97af87h
+ DD 0fbeee3f9h,034fc8820h,049091afdh,093e53490h,09a31f35ch,0764b9be5h,057e3d924h,071f37864h,0943aa75eh,002fb34e0h,0ab8ff6e4h,0a18c9c58h,033cf0d19h,0080f31b1h,0083518a7h,05c9682dbh
+ DD 0b709c3deh,0873d4ca6h,03575b8f0h,064a84262h,0020154bbh,06275da1fh,0d17cf1abh,097678caah,0951a95c3h,08779795fh,050fccc08h,0dd35b163h,033d8f031h,032709627h,0498dd85ch,03c5ab10ah
+ DD 041dca566h,0b6c185c3h,0d8622aa3h,07de7fedah,0901b6dfbh,099e84d92h,07c4ad288h,030a02b0eh,02fd3cf36h,0c7c81daah,0df89e59fh,0d1319547h,0cd496733h,0b2be8184h,093d3412bh,0d5f449ebh
+ DD 025fe531dh,07ea41b1bh,06a1d5646h,0f9797432h,02bde501ah,086067f72h,00c85e89ch,0f91481c0h,0f8b05bc6h,0ca8ee465h,002e83cdah,01844e1cfh,0b4dbe33bh,0ca82114ah,04eabfde2h,00f9f8769h
+ DD 038b27fe2h,04936b1c0h,0aba402dfh,063b6359bh,0656bdbabh,040c0ea2fh,06580c39ch,09c992a89h,02a60aed1h,0600e8f15h,0e0bf49dfh,0eb089ca4h,02d42d99ah,09c233d7dh,04c6bc2fah,0648d3f95h
+ DD 0e1add3f3h,0dcc383a8h,04f64a348h,0f42c0c6ah,00030dbdbh,02abd176fh,07d6c215eh,04de501a3h,04b9a64bch,04a107c1fh,02496cd59h,0a77f0ad3h,07688dffbh,0fb78ac62h,067937d8eh,07025a2cah
+ DD 0d1a8f4e7h,0fde8b2d1h,07354927ch,0f5b3da47h,0d9205735h,0e48606a3h,0e177b917h,0ac477cc6h,0a883239ah,0fb1f73d2h,0cc8b8357h,0e12572f6h,0fb1f4f86h,09d355e9ch,0d9f3ec6eh,089b795f8h
+ DD 0b54398dch,027be56f1h,03fedeed5h,01890efd7h,09c6d0140h,062f77f1fh,0596f0ee4h,07ef0e314h,0cc61dab3h,050ca6631h,0f4866e4fh,04a39801dh,0ae363b39h,066c8d032h,02ead66aah,022c591e5h
+ DD 0de02a53eh,0954ba308h,0d389f357h,02a6c060fh,0fbf40b66h,0e6cfcde8h,0c6340ce1h,08e02fc56h,073adb4bah,0e4957795h,0a7b03805h,07b86122ch,00c8e6fa6h,063f83512h,0057d7804h,083660ea0h
+ DD 021ba473ch,0bad79105h,0ded5389dh,0b6c50beeh,0aa7c9bc0h,0ee2caf4dh,08c4e98a7h,0d97b8de4h,0ab3bbddbh,0a9f63e70h,02597815ah,03898aabfh,0ac15b3d9h,07659af89h,0703ce784h,0edf7725bh
+ DD 0e085116bh,025470fabh,087285310h,004a43375h,0e2bfd52fh,04e39187eh,07d9ebc74h,036166b44h,0fd4b322ch,092ad433ch,0ba79ab51h,0726aa817h,0c1db15ebh,0f96eacd8h,00476be63h,0faf71e91h
+ DD 0641fad98h,0dd69a640h,029622559h,0b7995918h,0de4199dch,003c6daa5h,0ad545eb4h,092cadc97h,0256534e4h,01028238bh,08595409ah,073e80ce6h,0d05dc59bh,0690d4c66h,0981dee80h,0c95f7b8fh
+ DD 0d856ac25h,0f4337014h,0ac524dcah,0441bd9ddh,05f0499f5h,0640b3d85h,0d5fda182h,039cf84a9h,0b2aa95a0h,004e7b055h,00ddf1860h,029e33f0ah,0423f6b43h,0082e74b5h,00aaa2b0fh,0217edeb9h
+ DD 083cbea55h,058b83f35h,0bc185d70h,0c485ee4dh,01e5f6992h,0833ff03bh,0cf0c0dd5h,0b5b9b9cch,04e9e8a50h,07caaee8eh,06269dafdh,0462e907bh,0fbe791c6h,06ed5cee9h,0ed430790h,068ca3259h
+ DD 013b5ba88h,02b72bdf2h,035ef0ac4h,060294c8ah,019b99b08h,09c3230edh,06c2589aah,0560fff17h,0d6770374h,0552b8487h,09a56f685h,0a373202dh,045f175d9h,0d3e7f907h,0d080d810h,03c2f315fh
+ DD 07b9520e8h,01130e9ddh,00af037b5h,0c078f9e2h,01e9c104ch,038cd2ec7h,0c472fe92h,00f684368h,06247e7efh,0d3f1b5edh,0396dfe21h,0b32d33a9h,04a9aa2c2h,046f59cf4h,0ff0f7e41h,069cd5168h
+ DD 04b3234dah,03f59da0fh,0b4579ebeh,0cf0b0235h,06d2476c7h,06d1cbb25h,09dc30f08h,04f0837e6h,0906f6e98h,09a4075bbh,0c761e7d1h,0253bb434h,06e73af10h,0de2e645fh,00c5f131ch,0b89a4060h
+ DD 0b8cc037fh,0d12840c5h,07405bb47h,03d093a5bh,0206348b8h,06202c253h,0c55a3ca7h,0bf5d57fch,08c3bef48h,089f6c90ch,05a0a960ah,023ac7623h,0552b42abh,0dfbd3d6bh,0132061f6h,03ef22458h
+ DD 0c97e6516h,0d74e9bdah,0c230f49eh,088779360h,01e74ea49h,0a6ec1de3h,03fb645a2h,0581dcee5h,08f483f14h,0baef2391h,0d137d13bh,06d2dddfch,0d2743a42h,054cde50eh,0e4d97e67h,089a34fc5h
+ DD 012e08ce5h,013f1f5b3h,0a7f0b2cah,0a80540b8h,001982805h,0854bcf77h,0233bea04h,0b8653ffdh,002b0b4c9h,08e7b8787h,09acb170ah,02675261fh,0930c14e5h,0061a9d90h,0def0abeah,0b59b30e0h
+ DD 00200ec7dh,01dc19ea6h,00bce132bh,0b6f4a3f9h,0f13e27e0h,0b8d5de90h,01fade16fh,0baee5ef0h,0e4c6cf38h,06f406aaah,0d1369815h,0ab4cfe06h,0efd550c6h,00dcffe87h,075ff7d39h,09d4f59c7h
+ DD 051deb6adh,0b02553b1h,0b1877749h,0812399a4h,0ca6006e1h,0ce90f71fh,0b02b6e77h,0c32363a6h,0dc36c64dh,002284fbeh,0a7e1ae61h,086c81e31h,0b909d94ah,02576c7e5h,0818b2bb0h,08b6f7d02h
+ DD 056faa38ah,0eca3ed07h,09305bb54h,0a3790e6ch,07bc73061h,0d784eedah,06dd50614h,0bd56d369h,0229a8aa9h,0d6575949h,04595ec28h,0dcca8f47h,006ab4fe6h,0814305c1h,024f43f16h,0c8c39768h
+ DD 0523f2b36h,0e2a45f36h,0920d93bbh,0995c6493h,090f1632bh,0f8afdab7h,01c295954h,079ebbecdh,079592f48h,0c7bb3ddbh,05f88e998h,067216a7bh,0bc01193eh,0d91f098bh,0b1db83fch,0f7d928a5h
+ DD 0e991f600h,055e38417h,02981a934h,02a91113eh,006b13bdeh,0cbc9d648h,00755ff44h,0b011b6ach,0045ec613h,06f4cb518h,0c2f5930ah,0522d2d31h,0382e65deh,05acae1afh,027bc966fh,057643067h
+ DD 01c7193f0h,05e12705dh,03be8858eh,0f0f32f47h,096c6dfc7h,0785c3d7dh,0bf31795dh,0d75b4a20h,0342659d4h,091acf17bh,044f0378fh,0e596ea34h,0ce52129dh,04515708fh,079f2f585h,017387e1eh
+ DD 049dee168h,072cfd2e9h,03e2af239h,01ae05223h,01d94066ah,0009e75beh,038abf413h,06cca31c7h,09bc49908h,0b50bd61dh,0f5e2bc1eh,04a9b4a8ch,0946f83ach,0eb6cc5f7h,0ebffab28h,027da93fch
+ DD 04821c8c5h,0ea314c96h,0a83c15f4h,08de49dedh,07af33004h,07a64cf20h,0c9627e10h,045f1bfebh,054b9df60h,0878b0626h,0a95c0b33h,05e4fdc3ch,0c2035d8eh,0e54a37cah,080f20b8ch,09087cda9h
+ DD 08319ade4h,036f61c23h,0de8cfdf8h,0766f287ah,0346f3705h,048821948h,016e4f4a2h,049a7b853h,05cedadfdh,0b9b3f8a7h,08db2a815h,08f562815h,001f68f95h,0c0b7d554h,0688a208eh,012971e27h
+ DD 0d0ff34fch,0c9f8b696h,01222718ch,020824de2h,00c95284dh,07213cf9fh,0dc158240h,0e2ad741bh,054043ccfh,00ee3a6dfh,0d84412b3h,016ff479bh,0dfc98af0h,0f6c74ee0h,052fcd2fbh,0a78a169fh
+ DD 099c930e9h,0d8ae8746h,049e117a5h,01d33e858h,06624759fh,07581fcb4h,05bedc01dh,0de50644fh,0caf3155eh,0beec5d00h,0bc73e75fh,0672d66ach,0270b01dbh,086b9d8c6h,050f55b79h,0d249ef83h
+ DD 073978fe3h,06131d6d4h,0754b00a1h,0cc4e4542h,057dfcfe9h,04e05df05h,051ef6bf0h,094b29cddh,09bc7edf2h,0e4530cffh,0d3da65f3h,08ac236fdh,0c8eb0b48h,00faf7d5fh,0660eb039h,04d2de14ch
+ DD 060430e54h,0c006bba7h,0da3289abh,010a2d0d6h,0d7979c59h,09c037a5dh,0a116d944h,004d1f3d3h,08a0983cdh,09ff22473h,0c883cabbh,028e25b38h,047a58995h,0e968dba5h,0774eebdfh,02c80b505h
+ DD 04a953bebh,0ee763b71h,01642e7f6h,0502e223fh,061d5e722h,06fe4b641h,0dbef5316h,09d37c5b0h,0f8330bc7h,00115ed70h,075a72789h,0139850e6h,0ffceccc2h,027d7faech,04fd9f7f6h,03016a860h
+ DD 04cd8f64ch,0c492ec64h,0279d7b51h,058a2d790h,01fc75256h,00ced1fc5h,08f433017h,03e658aedh,005da59ebh,00b61942eh,00ddc3722h,0ba3d60a3h,0742e7f87h,07c311cd1h,0f6b01b6eh,06473ffeeh
+ DD 0692ac542h,08303604fh,0227b91d3h,0f079ffe1h,015aaf9bdh,019f63e63h,0f1f344fbh,0f99ee565h,0d6219199h,08a1d661fh,0d48ce41ch,08c883bc6h,03c74d904h,01065118fh,00faf8b1bh,0713889eeh
+ DD 081a1b3beh,0972b3f8fh,0ce2764a0h,04f3ce145h,028c4f5f7h,0e2d0f1cch,0c7f3985bh,0deee0c0dh,0d39e25c3h,07df4adc0h,0c467a080h,040619820h,061cf5a58h,0440ebc93h,0422ad600h,0527729a6h
+ DD 0b1b76ba6h,0ca6c0937h,04d2026dch,01a2eab85h,019d9ae0ah,0b1715e15h,0bac4a026h,0f1ad9199h,007ea7b0eh,035b3dfb8h,03ed9eb89h,0edf5496fh,02d6d08abh,08932e5ffh,025bd2731h,0f314874eh
+ DD 03f73f449h,0efb26a75h,08d44fc79h,01d1c94f8h,03bc0dc4dh,049f0fbc5h,03698a0d0h,0b747ea0bh,0228d291eh,05218c3feh,043c129d6h,035b804b5h,0d1acc516h,0fac859b8h,095d6e668h,06c10697dh
+ DD 00876fd4eh,0c38e438fh,083d2f383h,045f0c307h,0b10934cbh,0203cc2ech,02c9d46eeh,06a8f2439h,065ccde7bh,0f16b431bh,027e76a6fh,041e2cd18h,04e3484d7h,0b9c8cf8fh,08315244ah,064426efdh
+ DD 0fc94dea3h,01c0a8e44h,0dad6a0b0h,034c8cdbfh,004113cefh,0919c3840h,015490ffah,0fd32fba4h,0795dcfb7h,058d190f6h,083588bafh,0fef01b03h,0ca1fc1c0h,09e6d1d63h,0f0a41ac9h,053173f96h
+ DD 0ba16f73bh,02b1d402ah,08cf9b9fch,02fb31014h,0446ef7bfh,02d51e60eh,0b91e1745h,0c731021bh,04fee99d4h,09d3b4724h,0fac5c1eah,04bca48b6h,0bbea9af7h,070f5f514h,0974c283ah,0751f55a5h
+ DD 0cb452fdbh,06e30251ah,050f30650h,031ee6965h,0933548d9h,0b0b3e508h,0f4b0ef5bh,0b8949a4fh,03c88f3bdh,0208b8326h,0db1d9989h,0ab147c30h,044d4df03h,0ed6515fdh,0e72eb0c5h,017a12f75h
+ DD 036cf69dbh,03b59796dh,056670c18h,01219eee9h,07a070d8eh,0fe3341f7h,0a327f90ch,09b70130bh,00ae18e0eh,036a32462h,046c0a638h,02021a623h,0c62eb0d4h,0251b5817h,04c762293h,087bfbcdfh
+ DD 0cdd61d64h,0f78ab505h,0c8c18857h,08c7a53fch,016147515h,0a653ce6fh,0ea7d52d5h,09c923aa5h,05c18871fh,0c24709cbh,073b3cc74h,07d53bec8h,0fdd1d4c4h,059264affh,0240da582h,05555917eh
+ DD 0548f5a0eh,0cae8bbdah,03bbfbbe1h,01910eabah,07677afc3h,0ae579685h,073ff0b5ch,049ea61f1h,04f7c3922h,078655478h,020c68eefh,095d337cdh,0df779ab9h,068f1e1e5h,0b5cf69a8h,014b491b0h
+ DD 028e3fe89h,07a6cbbe0h,0c5aac0ebh,0e7e1fee4h,0697e5140h,07f47eda5h,0b454921fh,04f450137h,095cd8185h,0db625f84h,0cdb2e583h,074be0ba1h,0dd5e6de4h,0aee4fd7ch,0e8101739h,04251437dh
+ DD 0ac620366h,0686d72a0h,0b6d59344h,04be3fb9ch,0a1eb75b9h,06e8b44e7h,091a5c10ch,084e39da3h,0b38f0409h,037cc1490h,02c2ade82h,002951943h,01190a2d8h,09b688783h,0231182bah,025627d14h
+ DD 0658a6d87h,06eb550aah,0cf9c7325h,01405aaa7h,05c8748c9h,0d147142eh,053ede0e0h,07f637e4fh,014ffad2ch,0f8ca2776h,0bafb6791h,0e58fb1bdh,0bf8f93fch,017158c23h,00a4a4655h,07f15b373h
+ DD 0d842ca72h,039d4add2h,03ed96305h,0a71e4391h,06700be14h,05bb09cbeh,0d8befcf6h,068d69d54h,037183bcfh,0a45f5367h,03370dff7h,07152b7bbh,0bf12525bh,0cf887baah,0d6d1e3cdh,0e7ac7bddh
+ DD 081fdad90h,025914f78h,00d2cf6abh,0cf638f56h,0cc054de5h,0b90bc03fh,018b06350h,0932811a7h,09bbd11ffh,02f00b330h,0b4044974h,076108a6fh,0a851d266h,0801bb9e0h,0bf8990c1h,00dd099beh
+ DD 0abe32986h,058c5aaaah,050d59c27h,00fe9dd2ah,08d307305h,084951ff4h,086529b78h,06c23f829h,00b136a79h,050bb2218h,077a20996h,07e2174deh,0c0bb4da6h,06f00a4b9h,0efdde8dah,089a25a17h
+ DD 0c11ee01dh,0f728a27eh,0e5f10dfbh,0f900553ah,002ec893ch,0189a83c8h,023f66d77h,03ca5bdc1h,097eada9fh,098781537h,010256230h,059c50ab3h,0323c69b3h,0346042d9h,02c460449h,01b715a6dh
+ DD 06ae06e0bh,0a41dd476h,09d42e25fh,0cdd7888eh,056b25a20h,00f395f74h,08700e27eh,0eadfe0aeh,069950093h,0b09d52a9h,0327f8d40h,03525d9cbh,067df886ah,0b8235a94h,0035faec2h,077e4b0ddh
+ DD 0517d7061h,0115eb20ah,06c2df683h,077fe3433h,0cdc6fc67h,06870ddc7h,00b87de83h,0b1610588h,0d9c4ddbeh,0343584cah,03d754be2h,0b3164f1ch,0c1e6c894h,00731ed3ah,04f6b904ch,026327dech
+ DD 097b5cd32h,09d49c6deh,0b5eceecdh,040835daeh,0d9ded7feh,0c66350edh,07a678804h,08aeebb5ch,05b8ee9ech,051d42fb7h,08e3ca118h,0d7a17bddh,02ef4400eh,040d7511ah,0875a66f4h,0c48990ach
+ DD 02199e347h,08de07d2ah,02a39e051h,0bee75556h,0916e51dch,056918786h,04a2d89ech,0eb191313h,037d341edh,06679610dh,056d51c2bh,0434fbb41h,0d7492dbah,0e54b7ee7h,059021493h,0aa33a79ah
+ DD 0e4bd6d3dh,049fc5054h,05ab551d0h,009540f04h,04942d3a6h,08acc9085h,02d28323bh,0231af02fh,00992c163h,093458cach,0888e3bb4h,01fef8e71h,0be8c268ch,027578da5h,0e805ec00h,0cc8be792h
+ DD 0c61c3855h,029267baeh,058c1fd3bh,0ebff429dh,08c0b93b8h,022d886c0h,02ddb8953h,0ca5e00b2h,0c3fed8b7h,0cf330117h,0819c01f6h,0d49ac6fah,03c0fbd54h,06ddaa6bdh,08049a2cfh,091743068h
+ DD 0aff2ef81h,0d67f981eh,02818ae80h,0c3654d35h,01b2aa892h,081d05044h,03d099328h,02db067bfh,0703dcc97h,0e7c79e86h,0e133e215h,0e66f9b37h,0e39a7a5ch,0cdf119a6h,0876f1b61h,047c60de3h
+ DD 0d860f1b2h,06e405939h,0f5ed4d4ah,03e9a1dbch,0c9b6bcbdh,03f23619eh,0734e4497h,05ee790cfh,05bdaf9bbh,0f0a834b1h,04ca295f0h,002cedda7h,0cb8e378ch,04619aa2bh,0cc987ea4h,0e5613244h
+ DD 076b23a50h,00bc022cch,00a6c21ceh,04a2793adh,089cac3f5h,038328780h,0cba26d56h,029176f1bh,04f6f59ebh,006296187h,08bdc658eh,086e9bca9h,057e30402h,02ca9c4d3h,0516a09bbh,05438b216h
+ DD 07672765ah,00a6a063ch,00547b9bfh,037a3ce64h,098b1a633h,042c099c8h,005ee6961h,0b5ab800dh,011a5acd6h,0f1963f59h,046201063h,0baee6157h,0a596210ah,036d9a649h,01ba7138ch,0aed04363h
+ DD 0a4a82b76h,0cf817d1ch,0f3806be9h,05586960eh,009dc6bb5h,07ab67c89h,0114fe7ebh,052ace7a0h,0cbbc9b70h,0cd987618h,0604ca5e1h,04f06fd5ah,06dbde133h,090af14cah,0948a3264h,01afe4322h
+ DD 0c44b2c6ch,0a70d2ca6h,00ef87dfeh,0ab726799h,02e696377h,0310f64dch,04c8126a0h,049b42e68h,0cea0b176h,00ea444c3h,0cb269182h,053a8ddf7h,0bbba9dcbh,0f3e674ebh,0d8669d33h,00d2878a8h
+ DD 0d019b6a3h,004b935d5h,0406f1e46h,0bb5cf88eh,05b57c111h,0a1912d16h,019ebfd78h,09803fc21h,0c07764a9h,04f231c9eh,0b75bd055h,0d93286eeh,08ee6c9deh,083a9457dh,06087ec90h,004695915h
+ DD 058d6cd46h,014c6dd8ah,08e6634d2h,09cb633b5h,0f81bc328h,0c1305047h,026a177e5h,012ede0e2h,0065a6f4fh,0332cca62h,067be487bh,0c3a47ecdh,00f47ed1ch,0741eb187h,0e7598b14h,099e66e58h
+ DD 063d0ff12h,06f0544cah,0b610a05fh,0e5efc784h,07cad7b47h,0f72917b1h,0f2cac0c0h,03ff6ea20h,0f21db8b7h,0cc23791bh,0d7d93565h,07dac70b1h,0694bdaadh,0682cda1dh,01023516dh,0eb88bb8ch
+ DD 0dfdbeb1bh,0c4c634b4h,0b4ee4deah,022f5ca72h,0e6524821h,01045a368h,0052b18b2h,0ed9e8a3fh,0b961f49ah,09b7f2cb1h,07b009670h,07fee2ec1h,022507a6dh,0350d8754h,04db55f1dh,0561bd711h
+ DD 0320bbcafh,04c189ccch,0df1de48ch,0568434cfh,00fa8f128h,06af1b00eh,08907583ch,0f0ba9d02h,032ff9f60h,0735a4004h,0c25dcf33h,03dd8e4b6h,042c74cefh,0f2230f16h,0013fa8adh,0d8117623h
+ DD 0f51fe76eh,036822876h,011d62589h,08a6811cch,046225718h,0c3fc7e65h,0c82fdbcdh,0b7df2c9fh,0dd7b205bh,03b1d4e52h,047a2e414h,0b6959478h,0efa91148h,005e4d793h,0fd2e9675h,0b47ed446h
+ DD 004c9d9bfh,01a7098b9h,01b793048h,0661e2881h,0b01ee461h,0b1a16966h,02954746fh,0bc521308h,02477de50h,0c909a0fch,07dbd51efh,0d80bb41ch,053294905h,0a85be7ech,083958f97h,06d465b18h
+ DD 0fb6840fdh,016f6f330h,03401e6c8h,0faaeb214h,0ccb5b4f8h,0af83d30fh,0266dec4bh,022885739h,07bc467dfh,051b4367ch,0d842d27ah,0926562e3h,00fea14a6h,0dfcb6614h,0f2734cd9h,0eb394daeh
+ DD 011c0be98h,03eeae5d2h,0814e8165h,0b1e6ed11h,0e52bce1ch,0191086bch,0a75a04dah,014b74cc6h,08c060985h,063cf1186h,02dbd7f7ch,0071047deh,0ce0942cah,04e433b8bh,0d8fec61dh,0ecbac447h
+ DD 0ebf3232fh,08f0ed0e2h,0c52a2eddh,0fff80f9eh,075b55fdbh,0ad9ab433h,0e42e0c11h,073ca7820h,0e6251b46h,06dace0a0h,04c0d932dh,089bc6b5ch,0095da19ah,03438cd77h,08d48bdfbh,02f24a939h
+ DD 0766561b7h,099b47e46h,00ed0322ah,0736600e6h,0638e1865h,006a47cb1h,0cb136000h,0927c1c2dh,00cc5df69h,029542337h,009d649a9h,099b37c02h,06aefdb27h,0c5f0043ch,01be95c27h,06cdd9987h
+ DD 0390420d2h,069850931h,00983efa4h,0299c40ach,0af39aeadh,03a05e778h,043a45193h,084274408h,091a711a0h,06bcd0fb9h,09f52ab17h,0461592c8h,0da3c6ed6h,0b49302b4h,0330d7067h,0c51fddc7h
+ DD 0da50d531h,094babeb6h,0a6a7b9dah,0521b840dh,0404bdc89h,05305151eh,0d0d07449h,01bcde201h,03b76a59ah,0f427a78bh,007791a1bh,0f84841ceh,0bf91ed1ch,0ebd314beh,0bf172943h,08e61d34ch
+ DD 05541b892h,01d5dc451h,0fc9d9e54h,0b186ee41h,0d5bf610dh,09d9f345eh,0f6acca9fh,03e7ba65dh,0a8369486h,09dda787ah,08eb5ba53h,009f9dab7h,0d6481bc3h,05afb2033h,0afa62104h,076f4ce30h
+ DD 0f4f066b5h,0a8fa00cfh,0461dafc2h,089ab5143h,0a3389998h,044339ed7h,0bc214903h,02ff862f1h,0b05556e3h,02c88f985h,03467081eh,0cd96058eh,0edc637eah,07d6a4176h,036a5acdch,0e1743d09h
+ DD 07eb37726h,066fd72e2h,01481a037h,0f7fa264eh,045f4aa79h,09fbd3bdeh,0767c3e22h,0ed1e0147h,082e7abe2h,07621f979h,045f633f8h,019eedc72h,06137bf3ah,0e69b155eh,0414ee94eh,0a0ad13ceh
+ DD 01c0e651ah,093e3d524h,002ce227eh,0ab1a6e2ah,04ab27ecah,0e7af1797h,0bd444f39h,0245446deh,056c07613h,059e22a21h,0f4275498h,043deafceh,067fd0946h,010834ccbh,047406edfh,0a75841e5h
+ DD 07b0ac93dh,0ebd6a677h,078f5e0d7h,0a6e37b0dh,076f5492bh,02516c096h,09ac05f3ah,01e4bf888h,04df0ba2bh,0cdb42ce0h,05062341bh,0935d5cfdh,082acac20h,08a303333h,05198b00eh,0429438c4h
+ DD 0049d33fah,01d083bc9h,0946f67ffh,058b82ddah,067a1d6a3h,0ac3e2db8h,01798aac8h,062e6beadh,0de46c58ch,0fc85980fh,069c8d7beh,0a7f69379h,0837b35ech,023557927h,0e0790c0ch,006a933d8h
+ DD 0077ff55dh,0827c0e9bh,0bb26e680h,053977798h,01d9cb54fh,059530874h,04aac53efh,0cca3f449h,0a07eda0fh,011dc5c87h,0fd6400c8h,0c138bccfh,013e5da72h,0549680d3h,04540617eh,0c93eed82h
+ DD 04d0b75c0h,0fd3db157h,06386075bh,09716eb42h,0817b2c16h,00639605ch,0f1e4f201h,009915109h,05cca6c3bh,035c9a928h,03505c900h,0b25f7d1ah,0630480c4h,0eb9f7d20h,02a1a501ch,0c3c7b8c6h
+ DD 05a1f8e24h,03f99183ch,09dd255f0h,0fdb118fah,0c27f62a6h,0b9b18b90h,0396ec191h,0e8f732f7h,00be786abh,0524a2d91h,00ac5a0f5h,05d32adefh,09725f694h,09b53d4d6h,00510ba89h,0032a76c6h
+ DD 0ebeb1544h,0840391a3h,03ed73ac3h,044b7b88ch,0256cb8b3h,0d24bae7ah,0e394cb12h,07ceb151ah,05bc1e6a8h,0bd6b66d0h,0090f07bfh,0ec70cecbh,07d937589h,0270644edh,05f1dccfeh,0ee9e1a3dh
+ DD 0745b98d2h,0b0d40a84h,02556ed40h,0da429a21h,085148cb9h,0f676ecedh,0ded18936h,05a22d40ch,070e8a4ceh,03bc4b9e5h,09eae0379h,0bfd1445bh,01a0bd47eh,0f23f2c0ch,0e1845531h,0a9c0bb31h
+ DD 00a4c3f6bh,09ddc4d60h,02c15ef44h,0bdfaad79h,07f484acch,0ce55a236h,0055b1f15h,008653ca7h,0538873a3h,02efa8724h,0ace1c7e7h,009299e5dh,0ade332bah,007afab66h,092dd71b7h,09be1fdf6h
+ DD 05758b11ch,0a49b5d59h,0c8654f40h,00b852893h,052379447h,0b63ef6f4h,0105e690ch,0d4957d29h,0646559b0h,07d484363h,049788a8eh,0f4a8273ch,034ce54a9h,0ee406cb8h,0f86fda9bh,01e1c260fh
+ DD 0cf6a4a81h,0e150e228h,01b488772h,01fa3b6a3h,0c5a9c15bh,01e6ff110h,08ad6aa47h,0c6133b91h,09dffa978h,08ac5d55ch,05f3965f2h,0ba1d1c1dh,07732b52fh,0f969f4e0h,0a5172a07h,0fceecdb5h
+ DD 010f2b8f5h,0b0120a5fh,05c4c2f63h,0c83a6cdfh,0f8f9c213h,04d47a491h,0d3f1bbd5h,0d9e1cce5h,0aba7e372h,00d91bc7ch,0dfd1a2dbh,0fcdc74c8h,0374618e5h,005efa800h,015a7925eh,011216969h
+ DD 0f6021c5dh,0d4c89823h,0eff14423h,0880d5e84h,06dcd1396h,06523bc5ah,0113c978bh,0d1acfdfch,0bbb66840h,0b0c164e8h,072b58459h,0f7f4301eh,0a638e8ech,0c29ad4a6h,046b78699h,0f5ab8961h
+ DD 00e954750h,09dbd7974h,064f9d2c6h,00121de88h,0d985232eh,02e597b42h,053451777h,055b6c3c5h,0519cb9fbh,0bb53e547h,08428600dh,0f134019fh,0e081791ah,05a473176h,035fb0c08h,02f3e2263h
+ DD 073d273b0h,0b28c3017h,07721ef9ah,0ccd21076h,0b650dc39h,0054cc292h,06188045eh,0662246deh,06b83c0d1h,0904b52fah,097e9cd46h,0a72df267h,0899725e4h,0886b43cdh,0d849ff22h,02b651688h
+ DD 002f34533h,060479b79h,00c77c148h,05e354c14h,0a8537c78h,0b4bb7581h,0efe1495fh,0188043d7h,08c1d5026h,09ba12f42h,093d4aaabh,02e0c8a26h,0aa57c450h,0bdba7b8bh,09bbdafefh,0140c9ad6h
+ DD 025ac0f18h,02067aa42h,004d1fbf3h,0f7b1295bh,0a4b04824h,014829111h,033bd5e91h,02ce3f192h,08f2e1b72h,09c7a1d55h,0302aa243h,0fe932286h,0d4be9554h,0497ca7b4h,0e0547a6eh,0b8e821b8h
+ DD 067e573e0h,0fb2838beh,04084c44bh,005891db9h,096c1c2c5h,091311373h,0d958444bh,06aebfa3fh,0e56e55c1h,0ac9cdce9h,02caa46d0h,07148ced3h,0b61fe8ebh,02e10c7efh,0ff97cf4dh,09fd835dah
+ DD 0081e9387h,0a36da109h,08c935828h,0fb9780d7h,0e540b015h,0d5940332h,0e0f466fah,0c9d7b51bh,0d6d9f671h,0faadcd41h,0b1a2ac17h,0ba6c1e28h,0ed201e5fh,0066a7833h,0f90f462bh,019d99719h
+ DD 0060b5f61h,0f431f462h,07bd057c2h,0a56f46b4h,047e1bf65h,0348dca6ch,041bcf1ffh,09a38783eh,0da710718h,07a5d33a9h,02e0aeaf6h,05a779987h,02d29d187h,0ca87314dh,0c687d733h,0fa0edc3eh
+ DD 06a31e09bh,09df33621h,0c1350e35h,0de89e44dh,04ca0cf52h,029214871h,00b88a538h,0df379672h,02591d61bh,0c92a510ah,0585b447bh,079aa87d7h,0e5287f77h,0f67db604h,05efe7a80h,01697c8bfh
+ DD 0cb198ac7h,01c894849h,00f264665h,0a884a93dh,09b200678h,02da964efh,0009834e6h,03c351b87h,0e2c4b44bh,0afb2ef9fh,03326790ch,0580f6c47h,00b02264ah,0b8480521h,042a194e2h,08ba6f9e2h
+ DD 08fb54738h,0fc87975fh,027c3ead3h,035160788h,0b74a085ah,0834116d2h,0a62fe996h,053c99a73h,05b81c51bh,087585be0h,0be0852b7h,0925bafa8h,0a84d19a7h,076a4fafdh,0585206d4h,039a45982h
+ DD 05eb03c0eh,0499b6ab6h,072bc3fdeh,0f19b7954h,06e3a80d2h,0a86b5b9ch,06d42819fh,0e4377508h,0bb3ee8a3h,0c1663650h,0b132075fh,075eb14fch,07ad834f6h,0a8ccc906h,0e6e92ffdh,0ea6a2474h
+ DD 00f8d6758h,09d72fd95h,0408c07ddh,0cb84e101h,0a5e23221h,0b9114bfdh,0e94e742ch,0358b5fe2h,095f40e75h,01c0577ech,03d73f3d6h,0f0155451h,0bd1b9b66h,09d55cd67h,0af8d63c7h,063e86e78h
+ DD 0d3c095f1h,039d934abh,0e4b76d71h,004b261beh,0e73e6984h,01d2e6970h,05e5fcb11h,0879fb23bh,0dfd75490h,011506c72h,061bcf1c1h,03a97d085h,0bf5e7007h,043201d82h,0798232a7h,07f0ac52fh
+ DD 06eb564d4h,02715cbc4h,09e570e29h,08d6c752ch,09ef5fd5dh,0f80247c8h,0d53eb514h,0c3c66b46h,00f87de56h,09666b401h,0c6c603b5h,0ce62c06fh,07e4fc942h,0ae7b4c60h,0663a9c19h,038ac0b77h
+ DD 04b049136h,0cb4d20eeh,0356a4613h,08b63bf12h,070e08128h,01221aef6h,04acb6b16h,0e62d8c51h,0379e7896h,071f64a67h,0cafd7fa5h,0b25237a2h,03841ba6ah,0f077bd98h,03cd16e7eh,0c4ac0244h
+ DD 021fea4cah,0548ba869h,0f3dfdac1h,0d36d0817h,0f4685fafh,009d8d71fh,0c52c459ah,08eff66beh,00b57235eh,0182faee7h,00106712bh,0ee3c39b1h,0c0fcdcb0h,05107331fh,0a51054bah,0669fb9dch
+ DD 0319d7682h,0b25101fbh,00a982feeh,0b0293129h,00261b344h,051c1c9b9h,0bfd371fah,00e008c5bh,00278ca33h,0d866dd1ch,0e5aa53b1h,0666f76a6h,06013a2cfh,0e5cfb779h,0a3521836h,01d3a1aadh
+ DD 073faa485h,0cedd2531h,0c0a76878h,0c8ee6c4fh,02a11667dh,0ddbccfc9h,01c2f695ah,01a418ea9h,051f73971h,0db11bd92h,0da2ed89fh,03e4b3c82h,0e73e0319h,09a44f3f4h,0303431afh,0d1e3de0fh
+ DD 050f75f9ch,03c5604ffh,07e752b22h,01d8eddf3h,03c9a1118h,00ef074ddh,0ccb86d7bh,0d0ffc172h,0037d90f2h,0abd1ece3h,06055856ch,0e3f307d6h,07e4c6dafh,0422f9328h,0334879a0h,0902aac66h
+ DD 094cdfadeh,0b6a1e7bfh,07fc6d634h,06c97e1edh,0a2fb63f8h,0662ad24dh,0a5928405h,0f81be1b9h,0d14b4206h,086d765e4h,08fa0db65h,0becc2e0eh,0b17fc76ch,0a28838e0h,0e37cf24eh,0e49a602ah
+ DD 0567193ech,076b4131ah,0e5f6e70bh,0af3c305ah,0031eebddh,09587bd39h,071bbe831h,05709def8h,00eb2b669h,057059983h,0875b7029h,04d80ce1bh,00364ac16h,0838a7da8h,0be1c83abh,02f431d23h
+ DD 0f9294dd3h,0e56812a6h,09b4b0d77h,0b448d01fh,004e8305ch,0f3ae6061h,094d8c63eh,02bead645h,084fd8b07h,00a85434dh,0f7a9dee5h,0537b983fh,0ef55bd85h,0edcc5f18h,021c6cf8bh,02041af62h
+ DD 0b940c71eh,08e52874ch,0db5f4b3ah,0211935a9h,0301b1dc3h,094350492h,029958620h,033d2646dh,0ef911404h,016b0d64bh,09a3c5ef4h,09d1f25eah,04a352c78h,020f200ebh,04bd0b428h,043929f2ch
+ DD 0c7196e29h,0a5656667h,09391be48h,07992c2f0h,09ee0cd6eh,0aaa97cbdh,03dc8c9bfh,051b0310ch,0dd9f22cbh,0237f8acfh,0b585d584h,0bb1d81a1h,08c416388h,08d5d85f5h,042fe474fh,00d6e5a5ah
+ DD 038235d4eh,0e7812766h,0496e3298h,01c62bd67h,03f175bc8h,08378660ch,017afdd4dh,04d04e189h,085a8068ch,032a81601h,092b29a85h,0db58e4e1h,0c70d8a3bh,0e8a65b86h,098a0403bh,05f0e6f4eh
+ DD 069ed2370h,008129684h,00871ee26h,034dc30bdh,07c9c5b05h,03a5ce948h,043a90c87h,07d487b80h,0dd0e7179h,04089ba37h,0b4041811h,045f80191h,098747ba5h,01c3e1058h,06e1ae592h,098c4e13ah
+ DD 0e82c9f9eh,0d44636e6h,0c33a1043h,0711db87ch,0aa8aec05h,06f431263h,02744a4aah,043ff120dh,0ae77779bh,0d3bd892fh,08cdc9f82h,0f0fe0cc9h,0f1c5b1bch,0ca5f7fe6h,044929a72h,0cc63a682h
+ DD 009dbe19ah,0c7eaba0ch,06b5c73c2h,02f3585adh,00ae50c30h,08ab8924bh,0638b30bah,017fcd27ah,010b3d5a5h,0af414d34h,02a9accf1h,009c107d2h,0946a6242h,015dac49fh,0d707d642h,0aec3df2ah
+ DD 03f894ae0h,02c2492b7h,0b75f18ceh,0f59df3e5h,08f53cad0h,07cb740d2h,0c4f01294h,03eb585fbh,032c7f717h,017da0c86h,0af943f4ch,0eb8c795bh,0f67c51d2h,04ee23fb5h,068889949h,0ef187575h
+ DD 00389168bh,0a6b4bdb2h,0ea577d03h,0c4ecd258h,055743082h,03a63782bh,0c72f08cdh,06f678f4ch,065e58dd8h,0553511cfh,0d402c0cdh,0d53b4e3eh,0a037c14ch,037de3e29h,0c05712aah,086b6c516h
+ DD 0b38dff6fh,02834da3eh,0ea636be8h,0be012c52h,061dd37f8h,0292d238ch,08f8142dbh,00e54523fh,0036a05d8h,0e31eb436h,01e93c0ffh,083e3cdffh,050821ddfh,03fd2fe0fh,0ff9eb33bh,0c8e19b0dh
+ DD 0b569a5feh,0c8cc943fh,0d4342d75h,0ad0090d4h,0caeca000h,082090b4bh,01bd410ebh,0ca39687fh,065959d77h,0e7bb0df7h,09c964999h,039d78218h,0b2415451h,0d87f62e8h,0bed76108h,0e5efb774h
+ DD 0e822f0d0h,03ea011a4h,05a8704f8h,0bc647ad1h,050c6820fh,0bb315b35h,0b7e76bech,0863dec3dh,0f017bfc7h,001ff5d3ah,0976b8229h,020054439h,00bbd0d3bh,0067fca37h,07f5e3d0fh,0f63dde64h
+ DD 02a4c94e9h,022dbefb3h,096f8278ah,0afbff0feh,03503793dh,080aea0b1h,05f06cd29h,0b2238029h,08ec3fecah,065703e57h,0393e7053h,006c38314h,07c6734c4h,0a0b751ebh,0c59f0f1eh,0d2e8a435h
+ DD 05e9ca895h,0147d9052h,0972072dfh,02f4dd31eh,0e6c6755ch,0a16fda8eh,0cf196558h,0c66826ffh,00cf43895h,01f1a76a3h,083c3097bh,0a9d604e0h,066390e0eh,0e1908309h,0b3c85effh,0a50bf753h
+ DD 0f6a70251h,00696bddeh,03c6ab16ah,0548b801bh,0a4d08762h,037fcf704h,0dff76c4eh,0090b3defh,069cb9158h,087e8cb89h,0995ece43h,044a90744h,00ad9fbf5h,0f85395f4h,04fb0c82dh,049b0f6c5h
+ DD 0adf7cccfh,075d9bc15h,0dfa1e1b0h,081a3e5d6h,0249bc17eh,08c39e444h,08ea7fd43h,0f37dccb2h,0907fba12h,0da654873h,04a372904h,035daa6dah,06283a6c5h,00564cfc6h,04a9395bfh,0d09fa4f6h
+ DD 0aeb19a36h,0688e9ec9h,0c7bfbfb4h,0d913f1ceh,061c2faa6h,0797b9a3ch,06a0a9c12h,02f979bech,0359679ech,0b5969d0fh,0079b0460h,0ebcf523dh,010fab870h,0fd6b0008h,09373a39ch,03f2edcdah
+ DD 06f568431h,00d64f9a7h,002f8898ch,0f848c27ch,0260b5bd5h,0f418ade1h,06973dee8h,0c1f3e323h,026c185ddh,046e9319ch,0546f0ac4h,06d85b7d8h,0247f9d57h,0427965f2h,0b0035f48h,0b519b636h
+ DD 0ab87d59ch,06b6163a9h,039caaa11h,0ff9f58c3h,03177387bh,04ac39cdeh,0873e77f9h,05f6557c2h,036a83041h,067504006h,075ef196ch,09b1c96cah,0b08c7940h,0f34283deh,01128c316h,07ea09644h
+ DD 06aa39dffh,0b510b3b5h,09f8e4d8ch,059b43da2h,09e4c4b9fh,0a8ce31fdh,0c1303c01h,00e20be26h,0e8ee47c9h,018187182h,07db98101h,0d9687cdbh,0a1e14ff6h,07a520e4dh,08836d572h,0429808bah
+ DD 04944b663h,0a37ca60dh,0a3f91ae5h,0f901f7a9h,09e36e3b1h,0e4e3e76eh,029d93250h,09aa219cfh,0056a2512h,0347fe275h,0de65d95ch,0a4d643d9h,0699fc3edh,09669d396h,0cf8c6bbeh,0b598dee2h
+ DD 0dda9e5c6h,0682ac1e5h,0caa9fc95h,04e0d3c72h,0772bea44h,017faaadeh,0ab0009c8h,05ef8428ch,0460ff016h,0cc4ce47ah,0725281cbh,0da6d12bfh,00223aad2h,044c67848h,036256e28h,06e342afah
+ DD 093a37c04h,01400bb0bh,0dd10bd96h,062b1bc9bh,00dac46b7h,07251adebh,07be4ef51h,07d33b92eh,0e61fa29ah,028b2a94bh,006422233h,04b2be13fh,0330d8d37h,036d6d062h,0b28ca005h,05ef80e1eh
+ DD 06d16768eh,0174d4699h,0628bf217h,09fc4ff6ah,0154e490dh,077705a94h,08d2d997ah,09d96dd28h,0ce5d72c4h,077e2d9d8h,0c11c714fh,09d06c5a4h,079e4a03eh,002aa5136h,0030ff28bh,01386b3c2h
+ DD 0fb283f61h,0fe82e8a6h,0f3abc3fbh,07df203e5h,03a4d3622h,0eec7c351h,0df762761h,0f7d17dbfh,0522055f0h,0c3956e44h,08fa748dbh,0de3012dbh,0bf1dcc14h,0ca9fcb63h,0be4e2f3ah,0a56d9dcfh
+ DD 08bcec9c2h,0b86186b6h,0680b9f06h,07cf24df9h,0c0d29281h,0c46b45eah,007b10e12h,0fff42bc5h,04d289427h,012263c40h,0b4848ec4h,03d5f1899h,0d040800ch,011f97010h,0300feb20h,0b4c5f529h
+ DD 0de94fdcbh,0cc543f8fh,0c7c2f05eh,0e96af739h,0882692e1h,0aa5e0036h,0950d4ae9h,009c75b68h,0b5932a7ah,062f63df2h,0de0979adh,02658252eh,0b5e69631h,02a19343fh,0525b666bh,0718c7501h
+ DD 0ea40dc3ah,026a42d69h,0aecc018fh,0dc84ad22h,03270f04ah,025c36c7bh,050fa72edh,046ba6d47h,093e58a8eh,06c37d1c5h,0120c088ch,0a2394731h,0cb6e86dah,0c3be4263h,07126d038h,02c417d36h
+ DD 08b6f8efah,05b70f9c5h,037718536h,0671a2faah,0b539c92bh,0d3ced3c6h,0a31203c2h,0e56f1bd9h,09ff3c8ebh,08b096ec4h,043491ceah,02deae432h,017943794h,02465c6ebh,020586843h,05d267e66h
+ DD 0b07159d0h,09d3d116dh,0c1896210h,0ae07a67fh,0bb961579h,08fc84d87h,01c1f8dd6h,030009e49h,0e3132819h,08a8caf22h,0f23ab4ffh,0cffa197ch,0205dd687h,058103a44h,00ded67a2h,057b796c3h
+ DD 0a1779ad7h,00b9c3a6ch,0357c09c5h,0a33cfe2eh,03db4a57eh,02ea29315h,08ebeb52eh,091959695h,0e546c879h,0118db9a6h,06295c8d6h,08e996df4h,055ec806bh,0dd990484h,0165c1035h,024f291cah
+ DD 0440e2229h,0cca523bbh,073ef4d04h,0324673a2h,03e11ec39h,0af3adf34h,0dc5968d3h,06136d7f1h,0b053a927h,07a7b2899h,0ae067ecdh,03eaa2661h,002779cd9h,08549b9c8h,0c53385eah,0061d7940h
+ DD 0f06d18bdh,03e0ba883h,0b2700843h,04ba6de53h,0591a9e4dh,0b966b668h,07f4fa0edh,093f67567h,04347237bh,05a02711bh,0e794608eh,0bc041e2fh,070f73d8ch,055af10f5h,0bb7564f7h,0d2d4d4f7h
+ DD 0b3e93ce7h,0d7d27a89h,05d3a2c1bh,0f7b5a875h,0255b218ah,0b29e68a0h,08af76754h,0b533837eh,0579fab2eh,0d1b05a73h,0ecd74385h,0b41055a1h,0445e9115h,0b2369274h,0f520274eh,02972a7c4h
+ DD 0f678e68ah,06c08334eh,099b057edh,04e4160f0h,052ccb69ah,03cfe11b8h,021c8f772h,02fd1823ah,03298f055h,0df7f072fh,0fec74a6eh,08c0566f9h,05bb4d041h,0e549e019h,09208d850h,07c3930bah
+ DD 0aaa2902bh,0e07141fch,0e4f69ad3h,0539ad799h,0813f9ffdh,0a6453f94h,0375bc2f7h,0c58d3c48h,05dc64e96h,0b3326fadh,0b240e354h,03aafcaa9h,0aca1e7a9h,01d1b0903h,01211b8a0h,04ceb9767h
+ DD 0e32a858eh,0eca83e49h,0ae907badh,04c32892eh,02eb9b494h,0d5b42ab6h,01eabae1bh,07fde3ee2h,0caf54957h,013b5ab09h,0e5f5d5d5h,0bfb028beh,02003e2c0h,0928a0650h,067476843h,090793aach
+ DD 0c81710a0h,05e942e79h,027ccadd4h,0557e4a36h,04bcf6d0ch,072a2bc56h,026d7b80ch,009ee5f43h,0d4292f19h,06b70dbe9h,063f16b18h,056f74c26h,035fbb42ah,0c23db0f7h,06ae10040h,0b606bdf6h
+ DD 0044573ach,01eb15d4dh,0556b0ba4h,07dc3cf86h,0c60df6f7h,097af9a33h,0a716ce8ch,00b1ef85ch,0c96958beh,02922f884h,035690963h,07c32fa94h,0eaa00061h,02d7f667ch,03547365ch,0eaaf7c17h
+ DD 087032d58h,01eb4de46h,05e2c79e0h,0c54f3d83h,05d04ef23h,007818df4h,0673d41b4h,055faa9c8h,089b95355h,0ced64f6fh,0b7415c84h,04860d2eah,0050ebad3h,05fdb9bd2h,06685a5bfh,0db53e0cch
+ DD 09feb6593h,0b830c031h,06accff17h,0dd87f310h,09f555c10h,02303ebabh,0287e7065h,094603695h,02e83358ch,0f88311c3h,0eefb0178h,0508dd9b4h,02dba8652h,07ca23706h,00047abe5h,062aac5a3h
+ DD 08b1ea7b3h,09a61d2a0h,0ae8b1485h,0d495ab63h,087052f99h,038740f84h,0b2974eeah,0178ebe5bh,05b36d17fh,0030bbccah,0aaf86eeah,0b5e4cce3h,068f8e9e0h,0b51a0220h,009eb3e75h,0a4348796h
+ DD 0eef1a752h,0be592309h,06f2aa1edh,05d7162d7h,00f007dd2h,0aebfb5edh,0c89edd22h,0255e14b2h,00303b697h,0ba85e072h,0f05720ffh,0c5d17e25h,05128ebb6h,002b58d6eh,0d754e113h,02c80242dh
+ DD 0abfae1cah,0919fca5fh,01a21459bh,0937afaach,01f66a4d2h,09e0ca91ch,023ec1331h,0194cc7f3h,08aa11690h,0ad25143ah,009b59e08h,0be40ad8dh,0e750860ah,037d60d9bh,0c6bf434ch,06c53b008h
+ DD 01356eb80h,0b572415dh,09578ded8h,0b8bf9da3h,05e8fb38bh,022658e36h,05af8cb22h,09b70ce22h,0829a8180h,07c00018ah,0b81ed295h,084329f93h,05f3cea83h,07c343ea2h,067586536h,038f8655fh
+ DD 01d3ec517h,0a661a0d0h,0512321aeh,098744652h,0eca92598h,0084ca591h,01dcb3febh,0a9bb9dc9h,078b4c240h,014c54355h,0610cafdch,05ed62a3bh,01b38846bh,007512f37h,0b0e38161h,0571bb70ah
+ DD 02da705d2h,0b556b95bh,0b1a08f98h,03ef8ada6h,0ddecfbe5h,085302ca7h,0943105cdh,00e530573h,021a9255dh,060554d55h,0f2f3802ah,063a32fa1h,0cd477875h,035c8c5b0h,06ad42da1h,097f458eah
+ DD 0eb6b242dh,0832d7080h,03b71e246h,0d30bd023h,0be31139dh,07027991bh,0462e4e53h,068797e91h,06b4e185ah,0423fe20ah,042d9b707h,082f2c67eh,04cf7811bh,025c81768h,0045bb95dh,0bd53005eh
+ DD 09d8e68fdh,0e5f649beh,01b044320h,0db0f0533h,0e0c33398h,0f6fde9b3h,066c8cfaeh,092f4209bh,01a739d4bh,0e9d1afcch,0a28ab8deh,009aea75fh,0eac6f1d0h,014375fb5h,0708f7aa5h,06420b560h
+ DD 06254dc41h,09eae499ch,07a837e7eh,07e293924h,0090524a7h,074aec08ch,08d6f55f2h,0f82b9219h,01402cec5h,0493c962eh,0fa2f30e7h,09f17ca17h,0e9b879cbh,0bcd783e8h,05a6f145fh,0ea3d8c14h
+ DD 05e0dee6eh,0dede15e7h,0dc628aa2h,074f24872h,07861bb93h,0d3e9c4feh,06187b2e0h,056d4822ah,0c59826f9h,0b66417cfh,02408169eh,0ca260969h,0c79ef885h,0edf69d06h,0dc7d138fh,000031f8ah
+ DD 00ebcf726h,0103c46e6h,06231470eh,04482b831h,0487c2109h,06f6dfacah,062e666efh,02e0ace97h,01f8d1f42h,03246a9d3h,0574944d2h,01b1e83f1h,0a57f334bh,013dfa63ah,09f025d81h,00cf8daedh
+ DD 000ee11c1h,030d78ea8h,0b5e3dd75h,0eb053cd4h,0d58c43c5h,09b65b13eh,0bd151663h,0c3ad49bdh,0b6427990h,099fd8e41h,0707eae1eh,012cf15bdh,01aabb71eh,029ad4f1bh,007545d0eh,05143e74dh
+ DD 0c88bdee1h,030266336h,05876767ch,025f29306h,0c6731996h,09c078571h,0ed552951h,0c88690b2h,0852705b4h,0274f2c2dh,04e09552dh,0b0bf8d44h,0986575d1h,07628beebh,07f864651h,0407be238h
+ DD 0a639fc6bh,00e5e3049h,086003625h,0e75c35d9h,05dcc1646h,00cf35bd8h,06c26273ah,08bcaced2h,0b5536742h,0e22ecf1dh,01a9e068bh,0013dd897h,08a7909c5h,017f411cbh,0861dd506h,05757ac98h
+ DD 01e935abbh,085de1f0dh,0154de37ah,0defd10b4h,0369cebb5h,0b8d9e392h,0761324beh,054d5ef9bh,074f17e26h,04d6341bah,078c1dde4h,0c0a0e3c8h,087d918fdh,0a6d77581h,002ca3a13h,066876015h
+ DD 0f36658f0h,0c7313e9ch,071f8057eh,0c433ef1ch,01b6a835ah,085326246h,07c86394ch,0c8f05398h,0e983c4a1h,0ff398cdfh,003b7b931h,0bf5e8162h,0b7b9045bh,093193c46h,0a4a6e46bh,01e4ebf5dh
+ DD 043a24fe7h,0f9942a60h,0ffb3492bh,029c1191eh,0902fde05h,09f662449h,06713c32dh,0c792a7ach,0b737982ch,02fd88ad8h,0a21e60e3h,07e3a0319h,07383591ah,009b0de44h,08310a456h,06df141eeh
+ DD 0e6d6f471h,0aec1a039h,01198d12eh,014b2ba0fh,03aeee5ach,0ebc1a160h,0e0b964ceh,0401f4836h,04fd03f66h,02ee43796h,0dd8f3f12h,03fdb4e49h,029380f18h,06ef267f6h,08da64d16h,03e8e9670h
+ DD 0207674f1h,0bc19180ch,033ae8fdbh,0112e09a7h,06aaeb71eh,099667554h,0e101b1c7h,079432af1h,0de2ddec6h,0d5eb558fh,05357753fh,081392d1fh,03ae1158ah,0a7a76b97h,04a899991h,0416fbbffh
+ DD 00d4a9dcfh,09e65fdfdh,0944ddf12h,07bc29e48h,03c856866h,0bc1a92d9h,06e98dfe2h,0273c6905h,0cdfaa6b8h,069fce418h,05061c69fh,0606bd823h,06af75e27h,042d495a0h,06d873a1fh,08ed3d505h
+ DD 06ab25b6ah,0af552841h,02b1a4523h,0c6c0ffc7h,021c99e03h,0ab18827bh,09034691bh,0060e8648h,093c7f398h,05207f90fh,082f8d10bh,09f4a96cbh,03ad0f9e3h,0dd71cd79h,0fc3a54f5h,084f435d2h
+ DD 08e33787fh,04b03c55bh,0a6384673h,0ef42f975h,05051b9f0h,0ff7304f7h,0741c87c2h,018aca1dch,02d4bfe80h,056f120a7h,0053e732ch,0fd823b3dh,07537ca16h,011bccfe4h,01b5a996bh,0df6c9c74h
+ DD 0904fc3fah,0ee7332c7h,0c7e3636ah,014a23f45h,0f091d9aah,0c38659c3h,0b12d8540h,04a995e5dh,0f3a5598ah,020a53bech,0b1eaa995h,056534b17h,0bf04e03ch,09ed3dca4h,0d8d56268h,0716c563ah
+ DD 01d6178e7h,027ba77a4h,068a1ff8eh,0e4c80c40h,00a13f63dh,075011099h,0a61d46f3h,07bf33521h,010b365bbh,00aff218eh,00fd7ea75h,081021804h,0a4b3a925h,005a3fd8ah,09b3db4e6h,0b829e75fh
+ DD 04d53e5fbh,06bdc75a5h,0d52717e3h,004a5dc02h,0e9a42ec2h,086af502fh,02630e382h,08867e8fbh,0bec9889bh,0bf845c6eh,0cb47c98dh,054f491f2h,0790c2a12h,0a3091fbah,0c20f708bh,0d7f6fd78h
+ DD 0acde5e17h,0a569ac30h,06852b4d7h,0d0f996d0h,04609ae54h,0e51d4bb5h,00daed061h,03fa37d17h,034b8fb41h,062a88684h,09efb64f1h,099a2acbdh,06448e1f2h,0b75c1a5eh,042b5a069h,0fa99951ah
+ DD 02f3b26e7h,06d956e89h,0da875247h,0f4709860h,02482dda3h,03ad15179h,0017d82f0h,0d64110e3h,0fad414e4h,014928d2ch,02ed02b24h,02b155f58h,0cb821bf1h,0481a141bh,04f81f5dah,012e3c770h
+ DD 09fff8381h,0e49c5de5h,05bbec894h,011053232h,0454d88c4h,0a0d051cch,01f8e531bh,04f6db89ch,0ca563a44h,034fe3fd6h,058da8ab9h,07f5c2215h,09474f0a1h,08445016dh,0cb7d8a0ah,017d34d61h
+ DD 01c474019h,08e9d3910h,0d52ceefbh,0caff2629h,0c1622c2bh,0f9cf3e32h,0e9071a05h,0d4b95e3ch,01594438ch,0fbbca61fh,004aadedfh,01eb6e6a6h,068e14940h,0853027f4h,0dfabda9ch,0221d322ah
+ DD 0b7cb179ah,0ed8ea9f6h,0b7934dcch,0dc7b764dh,05e09180dh,0fcb13940h,0b47dc2ddh,06629a6bfh,09f5a915eh,0bfc55e4eh,06204441eh,0b1db9d37h,0930c5f53h,0f82d68cfh,0cbb605b1h,017d3a142h
+ DD 0308780f2h,0dd5944eah,03845f5e4h,0dc8de761h,07624d7a3h,06beaba7dh,0304df11eh,01e709afdh,002170456h,095364376h,0c8f94b64h,0bf204b3ah,05680ca68h,04e53af7ch,0e0c67574h,00526074ah
+ DD 0ecd92af6h,095d8cef8h,06cd1745ah,0e6b9fa7ah,0a325c3e4h,03d546d3dh,09ae93aaeh,01f57691dh,09d2e1a33h,0e891f3feh,0ac063d35h,0d430093fh,05513a327h,0eda59b12h,05536f18fh,0dc2134f3h
+ DD 05c210286h,0aa51fe2ch,01cab658ch,03f68aaeeh,0f9357292h,05a23a00bh,07efdabedh,09a626f39h,0199d78e3h,0fe2b3bf3h,071bbc345h,0b7a2af77h,01e59802ch,03d19827ah,0b487a51ch,0823bbc15h
+ DD 099d0a422h,0856139f2h,0f456c6fbh,09ac3df65h,0701f8bd6h,0addf65c6h,03758df87h,0149f321eh,0721b7ebah,0b1ecf714h,031a3312ah,0e17df098h,0d5c4d581h,0db2fd6ech,08fcea1b3h,0fd02996fh
+ DD 07882f14fh,0e29fa63eh,007c6cadch,0c9f6dc35h,0b882bed0h,046f22d6fh,0d118e52ch,01a45755bh,07c4608cfh,09f2c7c27h,0568012c2h,07ccbdf32h,061729b0eh,0fcb0aeddh,0f7d75dbfh,07ca2ca9eh
+ DD 06f640f62h,0f58fecb1h,039f51946h,0e274b92bh,06288af44h,07f4dfc04h,0eac329e5h,00a91f32ah,0d6aaba31h,043ad274bh,00f6884f9h,0719a1640h,0daf91e20h,0685d29f6h,027e49d52h,05ec1cc33h
+ DD 03b54a059h,038f4de96h,0efbcfdb3h,00e0015e5h,04dbb8da6h,0177d23d9h,097a617adh,098724aa2h,0fdb6558eh,030f0885bh,0c7899a96h,0f9f7a28ah,0872dc112h,0d2ae8ac8h,073c3c459h,0fa0642cah
+ DD 0e7dfc8d6h,015296981h,01fb5b94ah,067cd4450h,00eddfd37h,00ec71cf1h,09a8eddc7h,0c7e5eeb3h,081d95028h,002ac8e3dh,070b0e35dh,00088f172h,0e1881fe3h,0ec041fabh,0d99e7faah,062cf71b8h
+ DD 0e0f222c2h,05043dea7h,072e65142h,0309d42ach,09216cd30h,094fe9dddh,00f87feech,0d6539c7dh,0432ac7d7h,003c5a57ch,0327fda10h,072692cf0h,0280698deh,0ec28c85fh,07ec283b1h,02331fb46h
+ DD 02867e633h,0d34bfa32h,00a9cc815h,078709a82h,0875e2fa5h,0b7fe6964h,09e98bfb5h,025cc064fh,0493a65c5h,09eb0151ch,053182464h,05fb5d941h,0f04618e2h,069e6f130h,0f89c8ab6h,0a8ecec22h
+ DD 0b96209bdh,0cd6ac88bh,0b3e1c9e0h,065fa8cdbh,04a8d8each,0a47d22f5h,08d33f963h,083895cdfh,0b56cd3d1h,0a8adca59h,0daf38232h,010c8350bh,0a5080a9fh,02b161fb3h,03af65b3ah,0be7f5c64h
+ DD 097403a11h,02c754039h,0121b96afh,094626cf7h,06a983ec2h,0431de7c4h,052cc3df7h,03780dd3ah,02baf8e3bh,0e28a0e46h,051d299aeh,0abe68aadh,0647a2408h,0603eb8f9h,05c750981h,014c61ed6h
+ DD 0c53352e7h,088b34414h,01337d46eh,05a34889ch,0f95f2bc8h,0612c1560h,0d4807a3ah,08a3f8441h,05224da68h,0680d9e97h,0c3eb00e9h,060cd6e88h,09a6bc375h,03875a98eh,04fd554c2h,0dc80f924h
+ DD 06ac77407h,06c4b3415h,025420681h,0a1e5ea8fh,04607a458h,0541bfa14h,096d7fbf9h,05dbc7e7ah,031590a47h,0646a851bh,015ee6df8h,0039e85bah,0d7b43fc0h,0d19fa231h,0299a0e04h,084bc8be8h
+ DD 0f20df03ah,02b9d2936h,08608d472h,024054382h,09149202ah,076b6ba04h,03670e7b7h,0b21c3831h,0d6fdee10h,0ddd93059h,078488e71h,09da47ad3h,0a0fcfb25h,099cc1dfdh,064696954h,042abde10h
+ DD 017eab9feh,014cc15fch,0d3e70972h,0d6e863e4h,06432112ch,029a7765ch,05b0774d8h,088660001h,02c088eaeh,03729175ah,08230b8d4h,013afbcaeh,0915f4379h,044768151h,0d8d22812h,0f086431ah
+ DD 0c298b974h,037461955h,0f8711e04h,0905fb5f0h,0fe969d18h,0787abf3ah,06f6a494eh,0392167c2h,028c511dah,0fc7a0d2dh,0b66a262dh,0f127c7dch,0fd63fdf0h,0f9c4bb95h,03913ef46h,090016589h
+ DD 011aa600dh,074d2a73ch,09fb5ab52h,02f5379bdh,07fb70068h,0e49e53a4h,0404aa9a7h,068dd39e5h,02ecaa9c3h,0b9b0cf57h,0e824826bh,0ba0e103bh,04631a3c4h,060c2198bh,0fa8966a2h,0c5ff84abh
+ DD 0ac95aff8h,02d6ebe22h,0b5a46d09h,01c9bb6dbh,053ee4f8dh,0419062dah,0bb97efefh,07b9042d0h,0830cf6bdh,00f87f080h,06ec8a6c6h,04861d19ah,0202f01aah,0d3a0daa1h,0f25afbd5h,0b0111674h
+ DD 01afb20d9h,06d00d6cfh,040671bc5h,013695000h,02485ea9bh,0913ab0dch,09eef61ach,01f2bed06h,06d799e20h,0850c8217h,03271c2deh,093415f37h,06c4f5910h,05afb06e9h,0c4e9e421h,0688a52dfh
+ DD 0e2a9a6dbh,030495ba3h,058f9268bh,04601303dh,07eb0f04fh,0be3b0dadh,04456936dh,04ea47250h,0d33fd3e7h,08caf8798h,0eb433708h,01ccd8a89h,087fd50adh,09effe3e8h,06b29c4dfh,0be240a56h
+ DD 0ca0e7ebdh,0ec4ffd98h,0e748616eh,0f586783ah,0c77baa99h,0a5b00d8fh,0b4f34c9ch,00acada29h,00fe723ach,036dad67dh,039c36c1eh,01d8e53a5h,01f4bea41h,0e4dd342dh,0ebc9e4e0h,064fd5e35h
+ DD 057908805h,096f01f90h,05ed480ddh,0b5b9ea3dh,03efd2dd0h,0366c5dc2h,06e9dfa27h,0ed2fe305h,06e9197e2h,04575e892h,0ab502a5dh,011719c09h,0e81f213fh,0264c7bech,055f5c457h,0741b9241h
+ DD 049a5f4f4h,078ac7b68h,09fc45b7dh,0f91d70a2h,0b0f5f355h,039b05544h,0eef930d9h,011f06bceh,0038d05e1h,0db84d25dh,0bacc1d51h,004838ee5h,09e8ee00bh,09da3ce86h,0c36eda1fh,0c3412057h
+ DD 064d9c2f4h,0ae80b913h,0a010a8ffh,07468bac3h,037359d41h,0dfd20037h,015efeacch,01a0f5ab8h,0659d0ce0h,07c25ad2fh,06785cff1h,04011bcbbh,07e2192c7h,0128b9912h,013ccb0e8h,0a549d8e1h
+ DD 0c85438b1h,0805588d8h,0bc25cb27h,05680332dh,01a4bfdf4h,0dcd1bc96h,0706f6566h,0779ff428h,0f059987ah,08bbee998h,0cc686de7h,0f6ce8cf2h,0953cfdb2h,0f8ad3c4ah,02205da36h,0d1d426d9h
+ DD 0c781a241h,0b3c0f13fh,0d75362a8h,03e89360eh,0c8a91184h,0ccd05863h,0efa8a7f4h,09bd0c9b7h,08a912a4bh,097ee4d53h,0bcf518fdh,0de5e15f8h,0c467e1e0h,06a055bf8h,01587e256h,010be4b4bh
+ DD 0668621c9h,0d90c14f2h,0ab9c92c1h,0d5518f51h,0d6d47b3ch,08e6a0100h,066716175h,0cbe980ddh,0ddd83683h,0500d3f10h,099cac73ch,03b6cb35dh,06083d550h,053730c8bh,0df0a1987h,0cf159767h
+ DD 043ad73b3h,084bfcf53h,04f035a94h,01b528c20h,033eeac69h,04294edf7h,0817f3240h,0b6283e83h,00a5f25b1h,0c3fdc959h,05844ee22h,0efaf8aa5h,0dbdde4deh,0de269ba5h,0c56133bfh,0e3347160h
+ DD 08d9ea9f8h,0c1184219h,0f3fc1ab5h,0090de5dbh,00bf22cdah,0404c37b1h,0f5618894h,07de20ec8h,0ecdaecabh,0754c588eh,088342743h,06ca4b0edh,0f4a938ech,076f08bddh,091493ccbh,0d182de89h
+ DD 0c8a4186ah,0d652c53eh,0946d8e33h,0b3e878dbh,05f37663ch,0088453c0h,0b407748bh,05cd9daaah,0586d5e72h,0a1f5197fh,0c443ca59h,047500be8h,0e2652424h,078ef35b2h,06dd7767dh,009c5d26fh
+ DD 0a74d3f7bh,07175a79ah,0cf5ea459h,00428fd8dh,0a5d1746dh,0511cb97ch,0e71d1278h,036363939h,010350bf4h,0cf2df955h,060aae782h,0b3817439h,03e688809h,0a748c0e4h,0d7a5a006h,098021fbfh
+ DD 00e367a98h,09076a70ch,00f62b7c2h,0bea1bc15h,030fe0343h,02645a68ch,0699dc14fh,0acaffa78h,0457bf9c4h,0f4469964h,00d2ead83h,00db6407bh,0b2c6f3ebh,068d56cadh,0f376356ch,03b512e73h
+ DD 0fce10408h,0e43b0e1fh,05a5e257dh,089ddc003h,00362e5b3h,0b0ae0d12h,0b0519161h,007f983c7h,05d5231e7h,0c2e94d15h,00b4f9513h,0cff22aedh,06ad0b0b5h,0b02588ddh,011d0dcd5h,0b967d1ach
+ DD 0cf777b6ch,08dac6bc6h,04c6d1959h,00062bdbdh,00ef5cc85h,053da71b5h,04006f14fh,007012c7dh,0ac47800dh,04617f962h,0c102ed75h,053365f2bh,04ab8c9d3h,0b422efcbh,034af31c9h,0195cb26bh
+ DD 005f2c4ceh,03a926e29h,09856966ch,0bd2bdecbh,085527015h,05d16ab3ah,04486c231h,09f81609eh,0da350002h,0d8b96b2ch,0fa1b7d36h,0bd054690h,0e71d79bch,0dc90ebf5h,008964e4eh,0f241b6f9h
+ DD 02fe3cd4ch,07c838643h,0b4bc633ch,0e0f33acbh,03d139f1fh,0b4a9ecech,0dc4a1f49h,005ce69cdh,0f5f98aafh,0a19d1b16h,06f23e0efh,045bb71d6h,046cdfdd3h,033789fcdh,0cee040cah,09b8e2978h
+ DD 0ae0a6828h,09c69b246h,07078d5aah,0ba533d24h,07bb4fbdbh,07a2e42c0h,07035385ch,0cfb4879ah,03281705bh,08c3dd30bh,0404fe081h,07e361c6ch,03f604edfh,07b21649ch,0e52ffe47h,05dbf6a3fh
+ DD 04b54d9bfh,0c41b7c23h,03511c3d9h,01374e681h,0c1b2b758h,01863bf16h,01e9e6a96h,090e78507h,05d86f174h,0ab4bf98dh,085e96fe4h,0d74e0bd3h,0cac5d344h,08afde39fh,0bd91b847h,090946dbch
+ DD 0fe1a838ch,0f5b42358h,0620ac9d8h,005aae6c5h,0a1ce5a0bh,08e193bd8h,04dabfd72h,08f710571h,0182caaach,08d8fdd48h,0040745cfh,08c4aeefah,0f3b93e6dh,073c6c30ah,016f42011h,0991241f3h
+ DD 0e457a477h,0a0158eeah,0ee6ddc05h,0d19857dbh,018c41671h,0b3265224h,03c2c0d58h,03ffdfc7eh,026ee7cdah,03a3a5254h,0df02c3a8h,0341b0869h,0723bbfc8h,0a023bf42h,014452691h,03d15002ah
+ DD 085edfa30h,05ef7324ch,087d4f3dah,025976554h,0dcb50c86h,0352f5bc0h,04832a96ch,08f6927b0h,055f2f94ch,0d08ee1bah,0344b45fah,06a996f99h,0a8aa455dh,0e133cb8dh,0758dc1f7h,05d0721ech
+ DD 079e5fb67h,06ba7a920h,070aa725eh,0e1331febh,07df5d837h,05080ccf5h,07ff72e21h,0e4cae01dh,00412a77dh,0d9243ee6h,0df449025h,006ff7cach,023ef5a31h,0be75f7cdh,00ddef7a8h,0bc957822h
+ DD 0b0ce1c55h,08cf7230ch,00bbfb607h,05b534d05h,00e16363bh,0ee1ef113h,0b4999e82h,027e0aa7ah,079362c41h,0ce1dac2dh,091bb6cb0h,067920c90h,02223df24h,01e648d63h,0e32e8f28h,00f7d9eefh
+ DD 0fa833834h,06943f39ah,0a6328562h,022951722h,04170fc10h,081d63dd5h,0aecc2e6dh,09f5fa58fh,0e77d9a3bh,0b66c8725h,06384ebe0h,011235ceah,05845e24ah,006a8c118h,0ebd093b1h,00137b286h
+ DD 044ace150h,0c589e1ceh,04381e97ch,0e0f8d3d9h,062c5a4b8h,059e99b11h,0fd0ec9f9h,090d262f7h,0283e13c9h,0fbc854c9h,0aedc7085h,02d04fde7h,047dcbecbh,0057d7765h,09a76fa5fh,08dbdf591h
+ DD 00de1e578h,0d0150695h,0e9f72bc6h,02e1463e7h,01b39eca5h,0ffa68441h,07c037f2fh,0673c8530h,0747f91dah,0d0d6a600h,0c9cb78e9h,0b08d43e1h,027b5cef5h,00fc0c644h,0a60a2fd6h,05c1d160ah
+ DD 028c8e13bh,0f98cae53h,0b2eddcd1h,0375f10c4h,05cce06adh,0d4eb8b7fh,080a2e1efh,0b4669f45h,05bbd8699h,0d593f9d0h,0e7976d13h,05528a4c9h,01c7e28d3h,03923e095h,03f6bb577h,0b9293790h
+ DD 0c42bd6d2h,0db567d6ah,0bb1f96aeh,06df86468h,04843b28eh,00efe5b1ah,06379b240h,0961bbb05h,070a6a26bh,0b6caf5f0h,0328e6e39h,070686c0dh,0895fc8d3h,080da06cfh,0b363fdc9h,0804d8810h
+ DD 0207f1670h,0be22877bh,04e615291h,09b0dd188h,097a3c2bfh,0625ae8dch,0439b86e8h,008584ef7h,0dcd898ffh,0de7190a5h,02058ee3dh,026286c40h,05f87b1c1h,03db0b217h,0102a6db5h,0cc334771h
+ DD 02f770fb1h,0d99de954h,04cd7535eh,097c1c620h,03f09cefch,0d3b6c448h,05a63b4f8h,0d725af15h,0c01e20ech,00c95d24fh,09ae7121fh,0dfd37494h,0ec77b7ech,07d6ddb72h,00353a4aeh,0fe079d3bh
+ DD 02e6ac8d2h,03066e70ah,0106e5c05h,09c6b5a43h,0ede59b8ch,052d3c6f5h,0fccec9aeh,030d6a5c3h,04fc0a9efh,0edec7c22h,095c16cedh,0190ff083h,094de0fdeh,0be12ec8fh,0852d3433h,00d131ab8h
+ DD 085701291h,042ace07eh,0194061a8h,094793ed9h,0d7f4a485h,030e83ed6h,0f9eeff4dh,09eec7269h,00c9d8005h,090acba59h,01e79b9d1h,05feca458h,01d506a1eh,08fbe5427h,02439cfa7h,0a32b2c8eh
+ DD 073dd0b4eh,01671c173h,044a054c6h,037a28214h,04e8b53f1h,081760a1bh,0f9f93b9eh,0a6c04224h,0cf671e3ch,018784b34h,0cda9b994h,081bbecd2h,0b2ab3848h,038831979h,0f2e03c2dh,0ef54feb7h
+ DD 0fb8088fah,0cf197ca7h,04ddc96c5h,001427247h,030777176h,0a2d2550ah,04d0cf71dh,053469898h,03a2aaac6h,06ce937b8h,05af38d9bh,0e9f91dc3h,0c8bf2899h,02598ad83h,0b5536c16h,08e706ac9h
+ DD 0f688dc98h,040dc7495h,0124c4afch,026490cd7h,01f18775ch,0e651ec84h,0b4fdaf4ah,0393ea6c3h,07f338e0dh,01e1f3343h,06053e7b5h,039fb832bh,0619e14d5h,046e702dah,0cdeef6e0h,0859cacd1h
+ DD 04462007dh,063b99ce7h,04cb5f5b7h,0b8ab48a5h,0f55edde7h,09ec673d2h,08cfaefdah,0d1567f74h,00887bcech,046381b6bh,0e178f3c2h,0694497ceh,01e6266cbh,05e6525e3h,0697d6413h,05931de26h
+ DD 00e58d493h,087f8df7ch,058b73f12h,0b1ae5ed0h,0dea0c34dh,0c368f784h,0859a91a0h,09bd0a120h,0cc863c68h,0b00d88b7h,03d1f4d65h,03a1cc11eh,00aa85593h,0ea38e0e7h,07dc4aee8h,037f13e98h
+ DD 0bc947badh,010d38667h,02a36ee2eh,0738e07ceh,0c577fcach,0c93470cdh,02782470dh,0dee1b616h,02e793d12h,036a25e67h,0e0f186dah,0d6aa6caeh,080e07af7h,0474d0fd9h,0ba8a5cd4h,0f7cdc47dh
+ DD 0ab15247fh,028af6d9dh,0493a537fh,07c789c10h,023a334e7h,07ac9b110h,012c9c277h,00236ac09h,01d7a5144h,0a7e5bd25h,0f13ec4ech,0098b9c2ah,0d3f0abcah,03639dacah,0a23960f9h,0642da81ah
+ DD 04f7269b1h,07d2e5c05h,0e287c385h,0fcf30777h,0f2a46f21h,010edc84fh,04f43fa36h,035441757h,0fd703431h,0f1327899h,016dd587ah,0a438d7a6h,0e9c8352dh,065c34c57h,05cc5a24eh,0a728edabh
+ DD 042531689h,0aed78abch,0010963efh,00a51a0e8h,0d717d9b3h,05776fa0ah,07dd3428bh,0f356c239h,08d3a3dach,029903fffh,03d94491fh,0409597fah,0bf4a56a4h,04cd7a5ffh,08adab462h,0e5096474h
+ DD 05c3427b0h,0a97b5126h,0d282c9bdh,06401405ch,0222c5c45h,03629f8d7h,0e8d50aedh,0b1c02c16h,0d9635bc9h,0bea2ed75h,06e24552fh,0226790c7h,065f1d066h,03c33f2a3h,06dfccc2eh,02a43463eh
+ DD 0db483761h,08cc3453ah,065d5672bh,0e7cc6085h,0de3efc87h,0277ed6cbh,069234eafh,019f2f368h,05c0b800bh,09aaf4317h,08b6da6e2h,01f1e7c89h,0b94ec75eh,06cfb4715h,0453118c2h,0d590dd5fh
+ DD 01f17a34ch,014e49da1h,0235a1456h,05420ab39h,02f50363bh,0b7637241h,0c3fabb6eh,07b15d623h,0e274e49ch,0a0ef40b1h,096b1860ah,05cf50744h,066afe5a4h,0d6583fbfh,0f47e3e9ah,044240510h
+ DD 011b2d595h,099254343h,0eec8df57h,0f1367499h,03e73dd05h,03cb12c61h,07dac102ah,0d248c033h,0a77739f5h,0cf154f13h,023d2af42h,0bf4288cbh,032e4a1cfh,0aa64c9b6h,0c8a208f3h,0ee8c07a8h
+ DD 06fe8393fh,0e10d4999h,0e91f3a32h,00f809a3fh,0802f63c8h,061096d1ch,057750d3dh,0289e1462h,09889feeah,0ed06167eh,0e0993909h,0d5c9c0e2h,056508ac6h,046fca0d8h,04f1b8e83h,091826047h
+ DD 09a4a2751h,04f2c877ah,0cae6feadh,071bd0072h,006aa1941h,038df8dcch,063beeaa8h,05a074b4ch,0c1cec8edh,0d6d65934h,0aabc03bdh,0a6ecb49eh,0de8a8415h,0aade91c2h,0691136e0h,0cfb0efdfh
+ DD 023ab3495h,011af45eeh,00b77463dh,0a132df88h,0815d06f4h,08923c15ch,00d61a436h,0c3ceb3f5h,0e88fb1dah,0af52291dh,01da12179h,0ea057974h,0d2fef720h,0b0d7218ch,08e1d8845h,06c0899c9h
+ DD 0752ddad7h,098157504h,0a1a68a97h,0d60bd74fh,0f658fb99h,07047a3a9h,05f8511e4h,01f5d86d6h,04b5a6d88h,0b8a4bc42h,01abefa7dh,069eb2c33h,013c9c510h,095bf39e8h,0d48aab43h,0f571960ah
+ DD 0704e23c6h,07e8cfbcfh,028aaa65bh,0c71b7d22h,0245e3c83h,0a041b2bdh,0d21854ffh,069b98834h,0963bfeech,089d227a3h,0de7da7cbh,099947aaah,0ee68a9b1h,01d9ee9dbh,0698ec368h,00a08f003h
+ DD 078ef2487h,0e9ea4094h,002cfec26h,0c8d2d415h,0b7dcf328h,0c52f9a6eh,085b6a937h,00ed489e3h,0bef3366eh,09b94986bh,0edddddb8h,00de59c70h,0eadddbe2h,0ffdb748ch,08266ea40h,09b9784bbh
+ DD 01a93507ah,0142b5502h,08d3c06cfh,0b4cd1187h,091ec3f40h,0df70e76ah,04e7553c2h,0484e81adh,0272e9d6eh,0830f87b5h,0c6ff514ah,0ea1c93e5h,0c4192a8eh,067cc2adch,042f4535ah,0c77e27e2h
+ DD 0d2b713c5h,09cdbab36h,0cf7b0cd3h,086274ea0h,009af826bh,0784680f3h,00c72dea3h,0bfcc837ah,0d6529b73h,0a8bdfe9dh,063a88002h,0708aa228h,0c91d45b9h,06c7a9a54h,0fd004f56h,0df1a38bbh
+ DD 0b8bad853h,02e8c9a26h,03723eae7h,02d52cea3h,056ca2830h,0054d6d81h,09a8dc411h,0a3317d14h,0fd4ddedah,0a08662feh,0b55d792bh,0ed2a153ah,0bfc6e944h,07035c16ah,000171cf3h,0b6bc5834h
+ DD 083d102b6h,0e27152b3h,00646b848h,0fe695a47h,0916e6d37h,0a5bb09d8h,00d17015eh,0b4269d64h,00a1d2285h,08d8156a1h,046d26d72h,0feef6c51h,04c5434a7h,09dac57c8h,059d39e31h,00282e5beh
+ DD 0721c486dh,0edfff181h,0bc58824eh,0301baf10h,000570031h,08136a6aah,01cddde68h,055aaf78ch,059c63952h,026829371h,08bc25bafh,03a3bd274h,0b7e52dc3h,0ecdf8657h,0fd78e6c8h,02dd8c087h
+ DD 0f5531461h,020553274h,05d95499bh,08b4a1281h,01a80f9d2h,0e2c8763ah,04ddec758h,0d1dbe32bh,030c34169h,0af12210dh,078baa533h,0ba74a953h,0a438f254h,03d133c6eh,0201bef5bh,0a431531ah
+ DD 0f669d7ech,015295e22h,0357fb515h,0ca374f64h,0eaa3fdb3h,08a8406ffh,0df3f2da8h,0106ae448h,033c8e9a1h,08f9b0a90h,071ad5885h,0234645e2h,01c0aed14h,03d083224h,07a942d46h,0f10a7d3eh
+ DD 040d5c9beh,07c11deeeh,0ba84ed98h,0b2bae7ffh,0aad58dddh,093e97139h,03f6d1fa3h,03d872796h,08569ff13h,0483aca81h,09a600f72h,08b89a5fbh,0c06f2b86h,04cbc27c3h,063ad9c0bh,022130713h
+ DD 048ac2840h,0b5358b1eh,0ecba9477h,018311294h,0a6946b43h,0da58f990h,09ab41819h,03098baf9h,04198da52h,066c4c158h,0146bfd1bh,0ab4fc17ch,0bf36a908h,02f0a4c3ch,058cf7838h,02ae9e34bh
+ DD 03fa11b1fh,0f411529eh,0974af2b4h,021e43677h,0c230793bh,07c20958eh,016e840f3h,0710ea885h,0c5dc67cfh,0fc0b21fch,088405718h,008d51647h,0cfe49eb7h,0d955c21fh,056dd4a1fh,09722a5d5h
+ DD 0c861baa5h,0c9ef50e2h,09505ac3eh,0c0c21a5dh,08b7c063fh,0af6b9a33h,02f4779c1h,0c6370339h,0638167c3h,022df99c7h,0795db30ch,0fe6ffe76h,0a4854989h,02b822d33h,030563aa5h,0fef031ddh
+ DD 0d57c667fh,016b09f82h,0cc0b76f1h,0c70312ceh,0c9118aech,0bf04a9e6h,03409d133h,082fcb419h,0ab45d44dh,01a8ab385h,0617b83a3h,0fba07222h,058e81b52h,0b05f50ddh,021ce5affh,01d8db553h
+ DD 0e344a873h,03097b8d4h,0fe36d53eh,07d8d116dh,07875e750h,06db22f58h,043e144eah,02dc5e373h,0e799eb95h,0c05f32e6h,06899e6ech,0e9e5f4dfh,01fab23d5h,0bdc3bd68h,073af60e6h,0b72b8ab7h
+ DD 02cecc84ah,08db27ae0h,07bdb871ch,0600016d8h,0d7c46f58h,042a44b13h,0c3a77d39h,0b8919727h,0dafd6088h,0cfc6bbbdh,06bd20d39h,01a740146h,098c41072h,08c747abdh,0bdf68ea1h,04c91e765h
+ DD 008819a78h,07c95e5cah,0c9587921h,0cf48b729h,0debbcc7dh,0091c7c5fh,0f0e05149h,06f287404h,026cd44ech,0f83b5ac2h,0cfea250eh,088ae32a6h,01d06ebc5h,06ac5047ah,0d434f781h,0c7e550b4h
+ DD 05c727bd2h,061ab1cf2h,01cf915b0h,02e4badb1h,0f69d3920h,01b4dadech,0f14c1dfeh,0e61b1ca6h,0bd6bd51fh,090b479cch,08045ec30h,08024e401h,025ef0e62h,0cab29ca3h,049e4ebc0h,04f2e9416h
+ DD 00ccced58h,045eb40ech,00da44f98h,025cd4b9ch,0871812c6h,043e06458h,016cef651h,099f80d55h,0ce6dc153h,0571340c9h,0d8665521h,0138d5117h,04e07014dh,0acdb45bch,084b60b91h,02f34bb38h
+ DD 02ae8921eh,0f44a4fd2h,0892ba1e2h,0b039288eh,0b1c180b2h,09da50174h,01693dc87h,06b70ab66h,0e7057481h,07e9babc9h,09c80dc41h,04581ddefh,051294682h,00c890da9h,03f4736e5h,00b5629d3h
+ DD 0b06f5b41h,02340c79eh,04e243469h,0a42e84ceh,0045a71a9h,0f9a20135h,0d27b6fb6h,0efbfb415h,09d33cd6fh,025ebea23h,0aa6c0af8h,09caedb88h,0d9ce6f96h,053dc7e9ah,051e0b15ah,03897f9fdh
+ DD 08e5d788eh,0f51cb1f8h,0e1d490eeh,01aec7ba8h,0cc58cb3ch,0265991e0h,09fc3ad31h,09f306e8ch,05040a0ach,05fed006eh,0fb476f2eh,0ca9d5043h,0beea7a23h,0a19c06e8h,00edabb63h,0d2865801h
+ DD 06967469ah,0db92293fh,08d8a8ed8h,02894d839h,0bbc77122h,087c9e406h,02ea3a26ah,08671c6f1h,0d7de9853h,0e42df8d6h,0b1f2bcc7h,02e3ce346h,0899d50cfh,0da601dfch,0fb1b598fh,0bfc913deh
+ DD 0e61f7908h,081c4909fh,09bbc7b29h,0192e304fh,0c104b338h,0c3ed8738h,0783f5d61h,0edbe9e47h,02db30660h,00c06e9beh,0c0eb7d8eh,0da3e613fh,0322e096eh,0d8fa3e97h,0d336e247h,0febd91e8h
+ DD 0df655a49h,08f13ccc4h,05eb20210h,0a9e00dfch,0c656b6eah,084631d0fh,0d8c0d947h,093a058cdh,067bd3448h,06846904ah,0f394fd5ch,04a3d4e1ah,0db225f52h,0c102c1a5h,0fc4f5e9ah,0e3455bbah
+ DD 04b9ad1ceh,06b36985bh,05bb7f793h,0a9818536h,048b1a416h,06c25e1d0h,03c81bee7h,01381dd53h,07a4a7620h,0d2a30d61h,039b8944ch,0c8412926h,07a97c33ah,03c1c6fbeh,0938664e7h,0941e541dh
+ DD 04a34f239h,0417499e8h,0b90402d5h,015fdb83ch,0433aa832h,0b75f46bfh,063215db1h,0b61e15afh,0a127f89ah,0aabe59d4h,007e816dah,05d541e0ch,0a618b692h,0aaba0659h,017266026h,055327733h
+ DD 095f57552h,0af53a0fch,06cacb0c9h,032947650h,0c821be01h,0253ff58dh,0a06f1146h,0b0309531h,005c2e54dh,059bbbdf5h,026e8dd22h,0158f27adh,0397e1e53h,0cc5b7ffbh,07fc1e50dh,0ae03f65bh
+ DD 09c95f0f9h,0a9784ebdh,024640771h,05ed9deb2h,0035561c4h,031244af7h,07ee857deh,087332f3ah,02b9e0d88h,009e16e9eh,056a06049h,052d910f4h,0a9592f48h,0507ed477h,02365d678h,085cb917bh
+ DD 04c8998d1h,0f8511c93h,0730ea58fh,02186a3f1h,0b2029db0h,050189626h,002ceb75ah,09137a6d9h,0748bc82ch,02fe17f37h,080469f8ch,087c2e931h,0bf891aa2h,0850f71cdh,075ec3d8dh,00ca1b89bh
+ DD 05e1cd3cdh,0516c43aah,09a887c28h,089397808h,0ddea1f9fh,00059c699h,08e6868f7h,07737d6fah,060f1524bh,06d93746ah,0ba052aa7h,036985e55h,0ed923ea5h,041b1d322h,025852a11h,03429759fh
+ DD 0092e9f41h,0beca6ec3h,062256bbdh,03a238c66h,070ad487dh,0d82958eah,065610d93h,04ac8aaf9h,05e4ccab0h,03fa101b1h,09de14bfbh,09bf430f2h,06531899dh,0a10f5cc6h,0ea8ce17dh,0590005fbh
+ DD 024544cb6h,0c437912fh,0d79ac2e3h,09987b71ah,0c058a212h,013e3d9ddh,0d2de9606h,000075aach,06cac8369h,080ab508bh,0f54f6c89h,087842be7h,06bc532a4h,0a7ad663dh,078a91bc8h,067813de7h
+ DD 0c3427239h,05dcb61ceh,0c56934d9h,05f3c7cf0h,0e3191591h,0c079e0fbh,0b01aada7h,0e40896bdh,00492d25fh,08d466791h,0e7408276h,08aeb30c9h,09287aacch,0e9437495h,079fe03d4h,023d4708dh
+ DD 0d0c05199h,08cda9cf2h,0fae78454h,0502fbc22h,0f572a182h,0c0bda9dfh,06158b372h,05f9b71b8h,02b82dd07h,0e0f33a59h,09523032eh,076302735h,0c4505a32h,07fe1a721h,0f796409fh,07b6e3e82h
+ DD 035d0b34ah,0e3417bc0h,08327c0a7h,0440b386bh,0ac0362d1h,08fb7262dh,0e0cdf943h,02c41114ch,0ad95a0b1h,02ba5cef1h,067d54362h,0c09b37a8h,001e486c9h,026d6cdd2h,042ff9297h,020477abfh
+ DD 0292a9287h,0a004dcb3h,077b092c7h,0ddc15cf6h,0806c0605h,0083a8464h,03db997b0h,04a68df70h,005bf7dd0h,09c134e45h,08ccf7f8ch,0a4e63d39h,041b5f8afh,0a6e6517fh,0ad7bc1cch,0aa8b9342h
+ DD 01e706ad9h,0126f35b5h,0c3a9ebdfh,0b99cebb4h,0bf608d90h,0a75389afh,0c6c89858h,076113c4fh,097e2b5aah,080de8eb0h,063b91304h,07e1022cch,06ccc066ch,03bdab605h,0b2edf900h,033cbb144h
+ DD 07af715d2h,0c4176471h,0d0134a96h,0e2f7f594h,0a41ec956h,02c1873efh,077821304h,0e4e7b4f6h,088d5374ah,0e5c8ff97h,080823d5bh,02b915e63h,0b2ee8fe2h,0ea6bc755h,0e7112651h,06657624ch
+ DD 0dace5acah,0157af101h,011a6a267h,0c4fdbcf2h,0c49c8609h,0daddf340h,0e9604a65h,097e49f52h,0937e2ad5h,09be8e790h,0326e17f1h,0846e2508h,00bbbc0dch,03f38007ah,0b11e16d6h,0cf03603fh
+ DD 07442f1d5h,0d6f800e0h,066e0e3abh,0475607d1h,0b7c64047h,082807f16h,0a749883dh,08858e1e3h,08231ee10h,05859120bh,0638a1eceh,01b80e7ebh,0c6aa73a4h,0cb72525ah,0844423ach,0a7cdea3dh
+ DD 0f8ae7c38h,05ed0c007h,03d740192h,06db07a5ch,05fe36db3h,0be5e9c2ah,076e95046h,0d5b9d57ah,08eba20f2h,054ac32e7h,071b9a352h,0ef11ca8fh,0ff98a658h,0305e373eh,0823eb667h,0ffe5a100h
+ DD 0e51732d2h,057477b11h,02538fc0eh,0dfd6eb28h,03b39eec5h,05c43b0cch,0cb36cc57h,06af12778h,006c425aeh,070b0852dh,05c221b9bh,06df92f8ch,0ce826d9ch,06c8d4f9eh,0b49359c3h,0f59aba7bh
+ DD 0da64309dh,05c8ed8d5h,091b30704h,061a6de56h,02f9b5808h,0d6b52f6ah,098c958a7h,00eee4194h,0771e4caah,0cddd9aabh,078bc21beh,083965dfdh,0b3b504f5h,002affce3h,0561c8291h,030847a21h
+ DD 052bfda05h,0d2eb2cf1h,06197b98ch,0e0e4c4e9h,0f8a1726fh,01d35076ch,02db11e3dh,06c06085bh,04463ba14h,015c0c4d7h,00030238ch,09d292f83h,03727536dh,01311ee8bh,0beaedc1eh,0feea86efh
+ DD 066131e2eh,0b9d18cd3h,080fe2682h,0f31d974fh,0e4160289h,0b6e49e0fh,008e92799h,07c48ec0bh,0d1989aa7h,0818111d8h,0ebf926f9h,0b34fa0aah,0a245474ah,0db5fe2f5h,03c7ca756h,0f80a6ebbh
+ DD 0afa05dd8h,0a7f96054h,0fcaf119eh,026dfcf21h,00564bb59h,0e20ef2e3h,061cb02b8h,0ef4dca50h,065d30672h,0cda7838ah,0fd657e86h,08b08d534h,046d595c8h,04c5b4395h,0425cb836h,039b58725h
+ DD 03de9abe3h,08ea61059h,09cdc03beh,040434881h,0cfedce8ch,09b261245h,0cf5234a1h,078c318b4h,0fde24c99h,0510bcf16h,0a2c2ff5dh,02a77cb75h,027960fb4h,09c895c2bh,0b0eda42bh,0d30ce975h
+ DD 01a62cc26h,0fda85393h,050c0e052h,023c69b96h,0bfc633f3h,0a227df15h,01bae7d48h,02ac78848h,0187d073dh,0487878f9h,0967f807dh,06c2be919h,0336e6d8fh,0765861d8h,0ce528a43h,088b8974ch
+ DD 0ff57d051h,009521177h,0fb6a1961h,02ff38037h,0a3d76ad4h,0fc0aba74h,025a7ec17h,07c764803h,048879bc8h,07532d75fh,058ce6bc1h,0ea7eacc0h,08e896c16h,0c82176b4h,02c750fedh,09a30e0b2h
+ DD 0421d3aa4h,0c37e2c2eh,0e84fa840h,0f926407ch,01454e41ch,018abc03dh,03f7af644h,026605ecdh,0d6a5eabfh,0242341a6h,0216b668eh,01edb84f4h,004010102h,0d836edb8h,0945e1d8ch,05b337ce7h
+ DD 0c055dc14h,0d2075c77h,081d89cdfh,02a0ffa25h,06ffdcbafh,08ce815eah,0fb648867h,0a3428878h,0884655fbh,0277699cfh,0364d3e41h,0fa5b5bd6h,0441e1cb7h,001f680c6h,0b70a7d67h,03fd61e66h
+ DD 0cc78cf66h,0666ba2dch,06fdbff77h,0b3018174h,0168d4668h,08d4dd0dbh,01dab3a2ah,0259455d0h,0cde3acech,0f58564c5h,013adb276h,077141925h,08a303f65h,0527d725dh,0e6f38f7bh,055deb6c9h
+ DD 0b1fa70fbh,0fd5bb657h,0d8073a00h,0fa07f50fh,0bca02500h,0f72e3aa7h,09975740dh,0f68f895dh,05cae2a6ah,030112060h,002874842h,001bd7218h,07ce47bd3h,03d423891h,0789544f6h,0a66663c1h
+ DD 03272d838h,0864d05d7h,0fa6295c5h,0e22924f9h,06c2fda32h,08189593fh,0b184b544h,0330d7189h,0bde1f714h,079efa62ch,0e5cb1a63h,035771c94h,0641c8332h,02f4826b8h,0c8cee854h,000a894fbh
+ DD 036194d40h,0b4b9a39bh,077612601h,0e857a7c5h,04ecf2f58h,0f4209dd2h,05a033487h,082b9e66dh,0e4e8b9ddh,0c1e36934h,0a42377d7h,0d2372c9dh,00e3ae43bh,051dc94c7h,004474f6fh,04c57761eh
+ DD 01058a318h,0dcdacd0ah,078053a9ah,0369cf3f5h,031c68de2h,0c6c3de50h,03c4b6d9fh,04653a576h,0aa4e5c97h,01688dd5ah,0b7ab3c74h,05be80aa1h,0bc65c283h,070cefe7ch,006867091h,057f95f13h
+ DD 04415503bh,0a39114e2h,04cbb17e9h,0c08ff7c6h,0d7dec966h,01eff674dh,053376f63h,06d4690afh,0ea74237bh,0ff6fe32eh,0cd57508eh,0c436d17eh,0edcc40feh,015aa28e1h,0581bbb44h,00d769c04h
+ DD 034eaacdah,0c240b6deh,02ba0f1deh,0d9e116e8h,079438e55h,0cbe45ec7h,096f752d7h,091787c9dh,0f129ac2fh,0897f532bh,05a36e22ch,0d307b7c8h,0749fb8f3h,091940675h,0157fdb28h,0d14f95d0h
+ DD 06ae55043h,0fe51d029h,044a87de1h,08931e98fh,009e4fee2h,0e57f1cc6h,04e072d92h,00d063b67h,0ed0e4316h,070a998b9h,0306aca46h,0e74a736bh,04fda97c7h,0ecf0fbf2h,03e178d93h,0a40f65cbh
+ DD 016df4285h,016253604h,0d0c56ae2h,0b0c9babbh,0cfc5cfc3h,073032b19h,009752056h,0e497e5c3h,0164bda96h,012096bb4h,0a0b74da1h,01ee42419h,0403826bah,08fc36243h,0dc09e660h,00c8f0069h
+ DD 0c27253c9h,08667e981h,092b36a45h,005a6aefbh,09cb7bb46h,0a62c4b36h,011f7027bh,08394f375h,05f109d0fh,0747bc79ch,05b8cc60ah,0cad88a76h,058f09e68h,080c5a66bh,0f6127each,0e753d451h
+ DD 05b0ec6f5h,0c44b74a1h,05289b2b8h,047989fe4h,058d6fc73h,0745f8484h,0f61c70abh,0ec362a6fh,0b3a8ad41h,0070c98a7h,07b63db51h,073a20fc0h,0f44c35f4h,0ed2c2173h,09acc9dcah,08a56149dh
+ DD 09ac6e0f4h,098f17881h,0a413b5edh,0360fdeafh,0a300b0fdh,00625b8f4h,05b3222d3h,0f1f4d76ah,0587f76b8h,09d6f5109h,02317fdb5h,08b4ee08dh,08c68b095h,088089bb7h,05808d9b9h,095570e9ah
+ DD 035d33ae7h,0a395c36fh,050bb5a94h,0200ea123h,00bafe84bh,020c789bdh,00919276ah,0243ef52dh,0e23ae233h,03934c577h,0a460d1ech,0b93807afh,0f8fa76a4h,0b72a53b1h,0c3ca4491h,0d8914cb0h
+ DD 03fb42622h,02e128494h,0500907d5h,03b2700ach,01a95ec63h,0f370fb09h,031b6dfbdh,0f8f30be2h,069e55f15h,0f2b2f8d2h,0cc1323e9h,01fead851h,0d9e5eef6h,0fa366010h,0e316107eh,064d487b0h
+ DD 0d23ddc82h,04c076b86h,07e0143f0h,003fd344ch,0317af2c5h,0a95362ffh,0e18b7a4fh,00add3db7h,08260e01bh,09c673e3fh,054a1cc91h,0fbeb49e5h,092f2e433h,091351bf2h,0851141ebh,0c755e7ech
+ DD 029607745h,0c9a95139h,0a26f2b28h,00ca07420h,04bc6f9ddh,0cb2790e7h,0adcaffc0h,0345bbb58h,0be0f27a2h,0c65ea38ch,0641fcb56h,067c24d7ch,0a9e2c757h,02c25f0a7h,016f16c49h,093f5cdb0h
+ DD 0c5ee30a1h,02ca5a9d7h,0b909b729h,0d1593635h,0dadeff48h,0804ce9f3h,0b07c30c3h,0ec464751h,09e49af6ah,089d65ff3h,06f3d01bch,0f2d6238ah,00bced843h,01095561eh,0c8a13fd8h,051789e12h
+ DD 0763231dfh,0d633f929h,0e7cbddefh,046df9f7dh,0cb265da8h,001c889c0h,0af4336d2h,0fce1ad10h,0fc6a0a7eh,08d110df6h,06da425dch,0dd431b98h,01834aabeh,0cdc4aeabh,08439b7fch,084deb124h
+ DD 03c2a5998h,08796f169h,07947190dh,09b9247b4h,011597014h,055b9d9a5h,07b1566eeh,07e9dd70dh,0cbcd5e64h,094ad78f7h,09bd4c032h,00359ac17h,07cc222aeh,03b11baafh,0ba78e812h,0a6a6e284h
+ DD 024cea1a0h,08392053fh,033621491h,0c97bce4ah,035399ee9h,07eb1db34h,0ece81ad1h,0473f78efh,0f63d3d0dh,041d72fe0h,0afab62fch,0e620b880h,093158383h,092096bc9h,08f896f6ch,041a21357h
+ DD 0c7dcfcabh,01b5ee2fah,09546e007h,0650acfdeh,0b1b02e07h,0c081b749h,0f9eca03dh,0da9e41a0h,0175a54abh,0013ba727h,0ea5d8d10h,0ca0cd190h,095fd96a9h,085ea52c0h,0bc5c3940h,02c591b9fh
+ DD 02bad4d5fh,06fb4d4e4h,0fef0059bh,0fa4c3590h,0f5122294h,06a10218ah,0a85751d1h,09a78a81ah,0a98e84e7h,004f20579h,04997e5b5h,0fe1242c0h,0ca21e1e4h,0e77a273bh,09411939dh,0fcc8b1efh
+ DD 092d0487ah,0e20ea302h,0294b91feh,01442dbech,0bb6b0e8fh,01f7a4afeh,06889c318h,01700ef74h,070f1fc62h,0f5bbffc3h,069c79ccah,03b31d4b6h,0a7f6340dh,0e8bc2aabh,0a725e10ah,0b0b08ab4h
+ DD 0ae340050h,044f05701h,01cf0c569h,0ba4b3016h,0fbe19a51h,05aa29f83h,0b71d752eh,01b9ed428h,0eb4819f5h,01666e54eh,09e18b75bh,0616cdfedh,03ee27b0bh,0112ed5beh,044c7de4dh,0fbf28319h
+ DD 0e0e60d84h,0d685ec85h,01db7ee78h,068037e30h,0003c4d6eh,05b65bdcdh,093e29a6ah,033e7363ah,008d0756ch,0995b3a61h,02faf134bh,0d727f85ch,01d337823h,0fac6edf7h,00439b8b4h,099b9aa50h
+ DD 0e2b4e075h,0722eb104h,0437c4926h,049987295h,046a9b82dh,0b1e4c0e4h,057a006f5h,0d0cb3197h,0d7808c56h,0f3de0f7dh,051f89772h,0b5c54d8fh,0adbd31aah,0500a114ah,0295f6cabh,09afaaaa6h
+ DD 004cf667ah,094705e21h,09d3935d7h,0fc2a811bh,06d09267ch,0560b0280h,0f780e53bh,0f19ed119h,0067b6269h,0f0227c09h,05caef599h,0967b8533h,068efeebch,0155b9243h,0c497bae6h,0cd6d34f5h
+ DD 06cceb370h,01dd8d5d3h,0a78d7bf9h,02aeac579h,070b67a62h,05d65017dh,017c53f67h,070c8e44fh,086a34d09h,0d1fc0950h,0e7134907h,0e0fca256h,080fdd315h,0e24fa29ch,0d87499adh,02c4acd03h
+ DD 03b5a9ba6h,0baaf7517h,012e51a51h,0b9cbe1f6h,05e154897h,0d88edae3h,077b66ca0h,0e4309c3ch,0f67f3746h,0f5555805h,0a36401ffh,085fc37bah,0d9499a53h,0df86e2cah,0ecbc955bh,06270b2a3h
+ DD 0974ad33bh,0afae64f5h,0fe7b2df1h,004d85977h,04ab03f73h,02a3db3ffh,08702740ah,00b87878ah,05a061732h,06d263f01h,0a32a1901h,0c25430ceh,0db155018h,0f7ebab3dh,063a9b78eh,03a86f693h
+ DD 0da9f3804h,0349ae368h,0a164349ch,0470f07feh,08562baa5h,0d52f4cc9h,02b290df3h,0c74a9e86h,043471a24h,0d3a1aa35h,0b8194511h,0239446beh,081dcd44dh,0bec2dd00h,0c42ac82dh,0ca3d7f0fh
+ DD 0fdaf4520h,01f3db085h,04549daf2h,0bb6d3e80h,019ad5c42h,0f5969d8ah,0dbfd1511h,07052b13dh,0682b9060h,011890d1bh,0ac34452ch,0a71d3883h,0783805b4h,0a438055bh,04725b23eh,043241277h
+ DD 04901bbedh,0f20cf96eh,0f432a2bbh,06419c710h,0dfa9cd7dh,057a0fbb9h,000daa249h,0589111e4h,07b60554eh,019809a33h,0ede283a4h,0ea5f8887h,0503bfd35h,02d713802h,0585d2a53h,0151bb0afh
+ DD 043b30ca8h,040b08f74h,0d9934583h,0e10b5bbah,0b51110adh,0e8a546d6h,028e0b6c5h,01dd50e66h,0cff2b821h,0292e9d54h,047281760h,03882555dh,03724d6e3h,0134838f8h,022ddcda1h,0f2c679e0h
+ DD 06d2a5768h,040ee8815h,01c1e7e2dh,07f227bd2h,0d04ff443h,0487ba134h,0c614e54bh,076e2ff3dh,0a3177ec7h,036b88d6fh,02328fff5h,0bf731d51h,049ba158eh,0758caea2h,002938188h,05ab8ff4ch
+ DD 035edc56dh,033e16056h,07e940d79h,05a69d349h,003866dcbh,06c4fd001h,04893cdefh,020a38f57h,0fac3a15bh,0fbf3e790h,07a4f8e6bh,06ed7ea2eh,0bc3aca86h,0a663eb4fh,0080d53f7h,022061ea5h
+ DD 0f546783fh,02480dfe6h,05a0a641eh,0d38bc6dah,02ede8965h,0fb093cd1h,0acb455cfh,089654db4h,026e1adeeh,0413cbf9ah,0373294d4h,0291f3764h,0648083feh,000797257h,0208cc341h,025f504d3h
+ DD 0c3a0ee43h,0635a8e5eh,0679898ffh,070aaebcah,05dc63d56h,09ee9f547h,0ffb34d00h,0ce987966h,05e26310ah,0f9f86b19h,0382a8ca8h,09e435484h,0c2352fe4h,0253bcb81h,04474b571h,0a4eac8b0h
+ DD 0c1ad8cf8h,0c1b97512h,099e0b697h,0193b4e9eh,001e85df0h,0939d2716h,0cd44eafdh,04fb265b3h,0e51e1ae2h,0321e7dcdh,0e3d8b096h,08e3a8ca6h,052604998h,08de46cb0h,039072aa7h,091099ad8h
+ DD 093aa96b8h,02617f91ch,07fca2e13h,00fc8716bh,095328723h,0a7106f5eh,0262e6522h,0d1c9c40bh,042b7c094h,0b9bafe86h,01543c021h,01873439dh,05cbefd5dh,0e1baa5deh,0521e8affh,0a363fc5eh
+ DD 0f862eaach,0efe6320dh,022c647dch,014419c63h,04e46d428h,00e06707ch,04a178f8fh,0cb6c834fh,0d30f917ch,00f993a45h,09879afeeh,0d4c4b049h,070500063h,0b6142a1eh,0a5d9d605h,07c9b41c3h
+ DD 02f8ba2c7h,0bc00fc2fh,07c67aa28h,00966eb2fh,05a786972h,013f7b516h,08a2fbba0h,03bfb7557h,05a2b9620h,0131c4f23h,06faf46beh,0bff3ed27h,07e172323h,09b4473d1h,0339f6246h,0421e8878h
+ DD 025a41632h,00fa8587ah,0a35b6c93h,0c0814124h,059ebb8dbh,02b18a9f5h,076edb29ch,0264e3357h,0c87c51e2h,0af245ccdh,0501e6214h,016b3015bh,00a3882ceh,0bb31c560h,0fec11e04h,06961bb94h
+ DD 0eff7a3a0h,03b825b8dh,0b1df7326h,0bec33738h,099604a1fh,068ad747ch,09a3bd499h,0d154c934h,01cc7a906h,0ac33506fh,06c560e8fh,073bb5392h,0263e3944h,06428fcbeh,01c387434h,0c11828d5h
+ DD 03e4b12ffh,03cd04be1h,02d88667ch,0c3aad9f9h,0248120cfh,0c52ddcf8h,02a389532h,0985a892eh,03bb85fa0h,0fbb4b21bh,08dfc6269h,0f95375e0h,07ee2aceah,0fb4fb06ch,0309c4d1fh,06785426eh
+ DD 0d8ceb147h,0659b17c8h,0b70a5554h,09b649eeeh,0ac6bc634h,06b7fa0b5h,01d6e732fh,0d99fe2c7h,08d3abba2h,030e6e762h,0a797b799h,018fee6e7h,0c696464dh,05c9d360dh,027bfde12h,0e3baeb48h
+ DD 0f23206d5h,02bf5db47h,01d260152h,02f6d3420h,03f8ff89ah,017b87653h,0378fa458h,05157c30ch,02d4fb936h,07517c5c5h,0e6518cdch,0ef22f7ach,0bf847a64h,0deb483e6h,092e0fa89h,0f5084558h
+ DD 0df7304d4h,0ab9659d8h,0ff210e8eh,0b71bcf1bh,0d73fbd60h,0a9a2438bh,05d11b4deh,04595cd1fh,04835859dh,09c0d329ah,07dbb6e56h,04a0f0d2dh,0df928a4eh,0c6038e5eh,08f5ad154h,0c9429621h
+ DD 0f23f2d92h,091213462h,060b94078h,06cab71bdh,0176cde20h,06bdd0a63h,0ee4d54bch,054c9b20ch,09f2ac02fh,03cd2d8aah,0206eedb0h,003f8e617h,093086434h,0c7f68e16h,092dd3db9h,0831469c5h
+ DD 08f981354h,08521df24h,03588a259h,0587e23ech,0d7a0992ch,0cbedf281h,038961407h,006930a55h,0be5bbe21h,009320debh,02491817fh,0a7ffa5b5h,009065160h,0e6c8b4d9h,0fff6d2a9h,0ac4f3992h
+ DD 03ae9c1bdh,07aa7a158h,0e37ce240h,0e0af6d98h,028ab38b4h,0e54342d9h,00a1c98cah,0e8b75007h,0e02358f2h,0efce86afh,0ea921228h,031b8b856h,00a1c67fch,0052a1912h,0e3aead59h,0b4069ea4h
+ DD 07fa03cb3h,03232d6e2h,00fdd7d88h,0db938e5bh,02ccbfc5dh,004c1d2cdh,0af3a580fh,0d2f45c12h,07883e614h,0592620b5h,0be7c5f26h,05fd27e68h,01567e1e3h,0139e45a9h,044d8aaafh,02cc71d2dh
+ DD 0e36d0757h,04a9090cdh,0d9a29382h,0f722d7b1h,004b48ddfh,0fb7fb04ch,0ebe16f43h,0628ad2a7h,020226040h,0cd3fbfb5h,05104b6c4h,06c34ecb1h,0c903c188h,030c0754eh,02d23cab0h,0ec336b08h
+ DD 01e206ee5h,0473d62a2h,08c49a633h,0f1e27480h,0e9f6b2c3h,087ab956ch,062b606eah,061830b48h,0e78e815fh,067cd6846h,04c02082ah,0fe40139fh,0952ec365h,052bbbfcbh,06b9836abh,074c11642h
+ DD 0558df019h,09f51439eh,0ac712b27h,0230da4bah,055185a24h,0518919e3h,084b78f50h,04dcefcddh,0a47d4c5ah,0a7d90fb2h,0b30e009eh,055ac9abfh,074eed273h,0fd2fc359h,0dbea8fafh,0b72d824ch
+ DD 04513e2cah,0ce721a74h,038240b2ch,00b418612h,0d5baa450h,005199968h,02b0e8c25h,0eb1757edh,03dfac6d5h,06ebc3e28h,048a237f5h,0b2431e2eh,052f61499h,02acb5e23h,0e06c936bh,05558a2a7h
+ DD 0cbb13d1bh,0d213f923h,05bfb9bfeh,098799f42h,0701144a9h,01ae8ddc9h,04c5595eeh,00b8b3bb6h,03ecebb21h,00ea9ef2eh,03671f9a7h,017cb6c4bh,0726f1d1fh,047ef464fh,06943a276h,0171b9484h
+ DD 07ef0329ch,051a4ae2dh,091c4402ah,008509222h,0afd45bbch,064a61d35h,03035a851h,038f096feh,0a1dec027h,0c7468b74h,04fc7dcbah,0e8cf10e7h,0f4a06353h,0ea35ff40h,08b77dd66h,00b4c0dfah
+ DD 0de7e5c19h,0779b8552h,0c1c0256ch,0fab28609h,0abd4743dh,064f58eeeh,07b6cc93bh,04e8ef838h,04cb1bf3dh,0ee650d26h,073dedf61h,04c1f9d09h,0bfb70cedh,0aef7c9d7h,01641de1eh,01ec0507eh
+ DD 0cde45079h,0cd7e5cc7h,0516ac9e4h,0de173c9ah,0c170315ch,0517a8494h,091d8e8fbh,0438fd905h,0c7d9630bh,05145c506h,0f47d4d75h,06457a87bh,00d9a80e8h,0d31646bfh,0cef3aabeh,0453add2bh
+ DD 0a607419dh,0c9941109h,0bb6bca80h,0faa71e62h,007c431f3h,034158c13h,0992bc47ah,0594abebch,0eb78399fh,06dfea691h,03f42cba4h,048aafb35h,0077c04f0h,0edcd65afh,0e884491ah,01a29a366h
+ DD 01c21f2bfh,0023a40e5h,0a5057aeeh,0f99a513ch,0bcab072eh,0a3fe7e25h,040e32bcfh,08568d2e1h,0d3f69d9fh,0904594ebh,007affab1h,0181a9733h,0b6e330f4h,0e4d68d76h,0c75a7fc1h,087a6dafbh
+ DD 0ef7d9289h,0549db2b5h,0197f015ah,02480d4a8h,0c40493b6h,061d5590bh,06f780331h,03a55b52eh,0309eadb0h,040eb8115h,092e5c625h,0dea7de5ah,0cc6a3d5ah,064d631f0h,093e8dd61h,09d5e9d7ch
+ DD 0206d3ffch,0f297bef5h,07d808bd4h,023d5e033h,0d24cf5bah,04a4f6912h,009cdaa8ah,0e4d8163bh,0d3082e8eh,00e0de9efh,00192f360h,04fe1246ch,04b8eee0ah,01f900150h,0f1da391bh,05219da81h
+ DD 0f7ea25aah,07bf6a5c1h,0fbb07d5fh,0d165e6bfh,089e78671h,0e3539361h,02bac4219h,0a3fcac89h,0f0baa8abh,0dfab6fd4h,0e2c1c2e5h,05a4adac1h,040d85849h,06cd75e31h,019b39181h,0ce263feah
+ DD 007032c72h,0cb6803d3h,0790968c8h,07f40d5ceh,0dce978f0h,0a6de86bdh,0368f751ch,025547c4fh,065fb2a9eh,0b1e685fdh,01eb9179ch,0ce69336fh,012504442h,0b15d1c27h,0b911a06bh,0b7df465ch
+ DD 0315980cdh,0b8d804a3h,0fa3bebf7h,0693bc492h,02253c504h,03578aeeeh,0cd2474a2h,0158de498h,0cfda8368h,01331f5c7h,078d7177eh,0d2d7bbb3h,0f3c1e46eh,0df61133ah,0d30e7be8h,05836ce7dh
+ DD 094f834cbh,083084f19h,0429ed782h,0d35653d4h,059e58243h,0a542f16fh,00470a22dh,0c2b52f65h,018f23d96h,0e3b6221bh,03f5252b4h,0cb05abach,087d61402h,0ca00938bh,0411933e4h,02f186cddh
+ DD 09a29a5c5h,0e042ece5h,03b6c8402h,0b19b3c07h,019d92684h,0c97667c7h,0ebc66372h,0b5624622h,03c04fa02h,00cb96e65h,08eaa39aah,083a7176ch,0eaa1633fh,02033561dh,04533df73h,045a9d086h
+ DD 03dc090bch,0e0542c1dh,0aa59c167h,082c996efh,00ee7fc4dh,0e3f735e8h,07c35db79h,07b179393h,0f8c5dbfdh,0b6419e25h,01f327b04h,04d9d7a1eh,0298dfca8h,0979f6f9bh,08de9366ah,0c7c5dff1h
+ DD 004c82bddh,01b7a588dh,0f8319dfdh,068005534h,0d8eb9580h,0de8a55b5h,08d5bca81h,05ea886dah,0252a0b4dh,0e8530a01h,035eaa0a1h,01bffb4feh,0d8e99563h,02ad828b1h,095f9cd87h,07de96ef5h
+ DD 0d77d970ch,04abb2d0ch,0d33ef9cbh,003cfb933h,08b211fe9h,0b0547c01h,0a56ed1c6h,02fe64809h,0c2ac98cch,0cb7d5624h,01a393e33h,02a1372c0h,029660521h,0c8d1ec1ch,0b37ac3e9h,0f3d31b04h
+ DD 05ece6e7ch,0a29ae9dfh,00facfb55h,00603ac8fh,0dda233a5h,0cfe85b7ah,0bd75f0b8h,0e618919fh,099bf1603h,0f555a3d2h,0f184255ah,01f43afc9h,0319a3e02h,0dcdaf341h,003903a39h,0d3b117efh
+ DD 065d1d131h,0e095da13h,0c37ad03eh,086f16367h,0462cd8ddh,05f37389eh,0d67a60e6h,0c103fa04h,0f4b478f0h,057c34344h,0e117c98dh,0ce91edd8h,0231fc12eh,0001777b0h,0b207bccbh,011ae47f2h
+ DD 020f8a242h,0d983cf8dh,0f22e1ad8h,07aff5b1dh,07fc4feb3h,068fd11d0h,0b0f1c3e1h,05d53ae90h,0ec041803h,050fb7905h,014404888h,085e3c977h,0ac628d8fh,00e67faedh,06668532ch,02e865150h
+ DD 06a67a6b0h,015acaaa4h,0b25cec41h,0f4cdee25h,0e4c6701eh,049ee565ah,0fc7d63d8h,02a04ca66h,0ef0543fbh,0eb105018h,0d1b0d81dh,0f709a4f5h,02915d333h,05b906ee6h,096f1f0abh,0f4a87412h
+ DD 04d82f4c2h,0b6b82fa7h,06804efb3h,090725a60h,0adc3425eh,0bc82ec46h,02787843eh,0b7b80581h,0dd1fc74ch,0df46d91ch,0e783a6c4h,0dc1c62cbh,01a04cbbah,059d1b9f3h,095e40764h,0d87f6f72h
+ DD 0317f4a76h,002b4cfc1h,091036bceh,08d2703ebh,0a5e72a56h,098206cc6h,0cf53fb0fh,057be9ed1h,0ef0b17ach,009374571h,0d9181b38h,074b2655eh,089935d0eh,0c8f80ea8h,091529936h,0c0d9e942h
+ DD 01e84e0e5h,019686041h,0aea34c93h,0a5db84d3h,07073a732h,0f9d5bb19h,06bcfd7c0h,0b8d2fe56h,0f3eb82fah,045775f36h,0fdff8b58h,08cb20ccch,08374c110h,01659b65fh,0330c789ah,0b8b4a422h
+ DD 06fe8208bh,075e3c3eah,0286e78feh,0bd74b9e4h,0d7d93a1ah,00be2e81bh,0dd0a5aaeh,07ed06e27h,06be8b800h,0721f5a58h,0d846db28h,0428299d1h,05be88ed3h,095cb8e6bh,01c034e11h,0c3186b23h
+ DD 08977d99bh,0a6312c9eh,083f531e7h,0be944331h,018d3b1d4h,08232c0c2h,0e1247b73h,0617aae8bh,0282aec3bh,040153fc4h,0f7b8f823h,0c6063d2fh,03304f94ch,068f10e58h,0ee676346h,031efae74h
+ DD 040a9b97ch,0badb6c6dh,04f666256h,014702c63h,05184b2e3h,0deb954f1h,094b6ca40h,05184a526h,0003c32eah,0fff05337h,0205974c7h,05aa374ddh,04b0dd71ah,09a763854h,0deb947ech,0459cd27fh
+ DD 0459c2b92h,0a6e28161h,075ee8ef5h,02f020fa8h,030b06310h,0b132ec2dh,0bc6a4530h,0c3e15899h,0aa3f451ah,0dc5f53feh,0c2d9acach,03a3c7f23h,06b27e58bh,02ec2f892h,0d742799fh,068466ee7h
+ DD 01fa26613h,098324dd4h,0bdc29d63h,0a2dc6dabh,0d712d657h,0f9675faah,021fd8d15h,0813994beh,0fd4f7553h,05ccbb722h,0f3a36b20h,05135ff8bh,069559df5h,044be28afh,09d41bf30h,040b65bedh
+ DD 03734e520h,0d98bf2a4h,0209bdcbah,05e3abbe3h,0bc945b35h,077c76553h,0c6ef14aah,05331c093h,076b60c80h,0518ffe29h,07ace16f8h,02285593bh,0be2b9784h,0ab1f64cch,0ab2421b6h,0e8f2c0d9h
+ DD 0c1df065ch,0617d7174h,05f6578fah,0afeeb5abh,0263b54a8h,016ff1329h,0c990dce3h,045c55808h,0ecc8c177h,042eab6c0h,05982ecaah,0799ea9b5h,0b607ef8eh,0f65da244h,032a3fc2ch,08ab226ceh
+ DD 07ea973dch,0745741e5h,020888f2eh,05c00ca70h,045fd9cf1h,07cdce3cfh,05507f872h,08a741ef1h,0196b4cech,047c51c2fh,0c97ea618h,070d08e43h,015b18a2bh,0930da15ch,02f610514h,033b6c678h
+ DD 007ac9794h,0c662e4f8h,0ba06cb79h,01eccf050h,0e7d954e5h,01ff08623h,024cf71c3h,06ef2c5fbh,067978453h,0b2c063d2h,01d654af8h,0a0cf3796h,07ebdaa37h,07cb242eah,0b86747e0h,0206e0b10h
+ DD 0d5ecfefch,0481dae5fh,0c2bff8fch,007084fd8h,0ea324596h,08040a01ah,0d4de4036h,04c646980h,0d65abfc3h,09eb8ab4eh,013541ec7h,0e01cb91fh,0fd695012h,08f029adbh,03c7569ech,09ae28483h
+ DD 0a66d80a1h,0a5614c9eh,075f5f911h,0680a3e44h,0ceba4fc1h,00c07b14dh,0a13071c1h,0891c285bh,0799ece3ch,0cac67cebh,041e07e27h,029b910a9h,0f2e43123h,066bdb409h,07ac9ecbeh,006f8b137h
+ DD 038547090h,05981fafdh,085e3415dh,019ab8b9fh,0c7e31b27h,0fc28c194h,06fbcbb42h,0843be0aah,0a6db836ch,0f3b1ed43h,001a45c05h,02a1330e4h,095c1a377h,04f19f3c5h,044b5ee33h,0a85f39d0h
+ DD 04ae52834h,03da18e6dh,07423dcb0h,05a403b39h,0f2374aefh,0bb555e0ah,01e8ca111h,02ad599c4h,0014b3bf8h,01b3a2fb9h,0f66d5007h,073092684h,0c4340102h,0079f1426h,08fddf4deh,01827cf81h
+ DD 0f10ff927h,0c83605f6h,023739fc6h,0d3871451h,0cac1c2cch,06d163450h,0a2ec1ac5h,06b521296h,06e3cb4a5h,00606c4f9h,0778abff7h,0e47d3f41h,0be8e3a45h,0425a8d5eh,0a6102160h,053ea9e97h
+ DD 039cbb688h,0477a106eh,0f3386d32h,0532401d2h,0b1b9b421h,08e564f64h,081dad33fh,0ca9b8388h,02093913eh,0b1422b4eh,069bc8112h,0533d2f92h,0ebe7b2c7h,03fa017beh,0caf197c6h,0b2767c4ah
+ DD 0aedbae9fh,0c925ff87h,036880a54h,07daf0eb9h,09c4d0e71h,09284ddf5h,0316f8cf5h,01581cf93h,03ac1f452h,03eeca887h,0fb6aeffeh,0b417fce9h,0eefb8dc3h,0a5918046h,002209400h,073d318ach
+ DD 0728693e5h,0e800400fh,0339927edh,0e87d814bh,057ea9910h,093e94d3bh,02245fb69h,0ff8a35b6h,07f200d34h,0043853d7h,00f653ce1h,0470f1e68h,059a06379h,081ac05bdh,003930c29h,0a14052c2h
+ DD 026bc2797h,06b72fab5h,099f16771h,013670d16h,01e3e48d1h,000170052h,0b7adf678h,0978fe401h,0d41c5dd4h,055ecfb92h,0c7b27da5h,05ff8e247h,0013fb606h,0e7518272h,02f547a3ch,05768d7e5h
+ DD 060017a5fh,0bb24eaa3h,09c64ce9bh,06b18e6e4h,0103dde07h,0c225c655h,07592f7eah,0fc3672aeh,0d06283a1h,09606ad77h,0e4d59d99h,0542fc650h,02a40e7c2h,0abb57c49h,0a8db9f55h,0ac948f13h
+ DD 0b04465c3h,06d4c9682h,06468bd15h,0e3d062fah,05f318d7eh,0a51729ach,09eb6fc95h,01fc87df6h,00591f652h,063d146a8h,0589621aah,0a861b8f7h,0ce31348ch,059f5f15ah,0440da6dah,08f663391h
+ DD 0b591ffa3h,0cfa778ach,04cdfebceh,0027ca9c5h,0444ea6b3h,0be8e05a5h,0a78d8254h,08aab4e69h,0b474d6b8h,02437f04fh,0045b3855h,06597ffd4h,0ca47ecaah,0bb0aea4eh,085c7ebfch,0568aae83h
+ DD 0c73b2383h,00e966e64h,0d17d8762h,049eb3447h,08da05dabh,0de107821h,0016b7236h,0443d8baah,0ea7610d6h,0163b63a5h,0ce1ca979h,0e47e4185h,080baa132h,0ae648b65h,00e0d5b64h,0ebf53de2h
+ DD 0d3c8c1cah,08d3bfcb4h,05d04b309h,00d914ef3h,03de7d395h,055ef6415h,026b850e8h,0bde1666fh,0d449ab19h,0dbe1ca6eh,0e89a2672h,08902b322h,0dacb7a53h,0b1674b7eh,0f52523ffh,08e9faf6eh
+ DD 09a85788bh,06ba535dah,0bd0626d4h,0d21f03aeh,0e873dc64h,0099f8c47h,0018ec97eh,0cda8564dh,0de92c68ch,03e8d7a5ch,073323cc4h,078e035a1h,0f880ff7ch,03ef26275h,0273eedaah,0a4ee3dffh
+ DD 0af4e18f8h,058823507h,00672f328h,0967ec9b5h,0559d3186h,09ded19d9h,06cdce39ch,05e2ab3deh,011c226dfh,0abad6e4dh,087723014h,0f9783f43h,01a885719h,09a49a0cfh,090da9dbfh,0fc0c1a5ah
+ DD 0571d92ach,08bbaec49h,04692517fh,0569e85feh,0a14ea4afh,08333b014h,012e5c5adh,032f2a62fh,006d89b85h,098c2ce3ah,02ff77a08h,0b90741aah,001f795a2h,02530defch,084b3c199h,0d6e5ba0bh
+ DD 012e4c936h,07d8e8451h,0bd0be17bh,0ae419f7dh,022262bc9h,0a583fc8ch,091bfe2bdh,06b842ac7h,0440d6827h,033cef4e9h,0ef81fb14h,05f69f4deh,0234fbb92h,0f16cf6f6h,0d9e7e158h,076ae3fc3h
+ DD 0e9740b33h,04e89f6c2h,04962d6a1h,0677bc85dh,068d10d15h,06c6d8a7fh,00257b1cdh,05f9a7224h,04ad85961h,07096b916h,0e657ab4ah,05f8c47f7h,0f7461d7eh,0de57d7d0h,080ce5ee2h,07eb6094dh
+ DD 034190547h,00b1e1dfdh,0f05dd150h,08a394f43h,097df44e6h,00a9eb24dh,087675719h,078ca06bfh,06ffeec22h,06f0b3462h,036cdd8fbh,09d91bceah,0a105be47h,0ac83363ch,0069710e3h,081ba76c1h
+ DD 028c682c6h,03d1b24cbh,08612575bh,027f25228h,0e8e66e98h,0b587c779h,0405eb1feh,07b0c03e9h,015b548e7h,0fdf0d030h,038b36af7h,0a8be76e0h,04f310c40h,04cdab04ah,0f47ecaech,06287223eh
+ DD 08b399320h,0678e6055h,0c01e4646h,061fe3fa6h,003261a5eh,0c482866bh,05c2f244ah,0dfcf45b8h,02f684b43h,08fab9a51h,0c7220a66h,0f796c654h,0f5afa58fh,01d90707eh,04fdbe0deh,02c421d97h
+ DD 0af2ebc2fh,0c4f4cda3h,0cb4efe24h,0a0af843dh,09ccd10b1h,053b857c1h,0914d3e04h,0ddc9d1ebh,062771debh,07bdec8bbh,091c5aa81h,0829277aah,0832391aeh,07af18dd6h,0c71a84cah,01740f316h
+ DD 0eeaf8c49h,08928e99ah,06e24d728h,0ee7aa73dh,0e72b156ch,04c5007c2h,0ed408a1dh,05fcf57c5h,0b6057604h,09f719e39h,0c2868bbfh,07d343c01h,07e103e2dh,02cca254bh,0f131bea2h,0e6eb38a9h
+ DD 08be762b4h,0b33e624fh,0058e3413h,02a9ee4d1h,067d805fah,0968e6369h,07db8bfd7h,09848949bh,0d23a8417h,05308d7e5h,0f3e29da5h,0892f3b1dh,03dee471fh,0c95c139eh,0d757e089h,08631594dh
+ DD 0de918dcch,0e0c82a3ch,026fdcf4bh,02e7b5994h,032cb1b2dh,082c50249h,07657ae07h,0ea613a9dh,0f1fdc9f7h,0c2eb5f6ch,0879fe682h,0b6eae8b8h,0591cbc7fh,0253dfee0h,03e1290e6h,0000da713h
+ DD 01f095615h,01083e2eah,014e68c33h,00a28ad77h,03d8818beh,06bfc0252h,0f35850cdh,0b585113ah,030df8aa1h,07d935f0bh,04ab7e3ach,0addda07ch,0552f00cbh,092c34299h,02909df6ch,0c33ed1deh
+ DD 080e87766h,022c2195dh,09ddf4ac0h,09e99e6d8h,065e74934h,009642e4eh,0ff1ff241h,02610ffa2h,0751c8159h,04d1d47d4h,0af3a9363h,0697b4985h,087477c33h,00318ca46h,09441eff3h,0a90cb565h
+ DD 036f024cbh,058bb3848h,036016168h,085be1f77h,0dc7e07f1h,06c59587ch,0af1d8f02h,0191be071h,0cca5e55ch,0bf169fa5h,0f7d04each,03864ba3ch,08d7d05dbh,0915e367fh,0a6549e5dh,0b48a876dh
+ DD 0580e40a2h,0ef89c656h,0728068bch,0f194ed8ch,0a47990c9h,074528045h,05e1a4649h,0f53fc7d7h,078593e7dh,0bec5ae9bh,041db65d7h,02cac4ee3h,004a3d39bh,0a8c1eb24h,003f8f3efh,053b7d634h
+ DD 03e07113ch,02dc40d48h,07d8b63aeh,06e4a5d39h,079684c2bh,05582a94bh,0622da26ch,0932b33d4h,00dbbf08dh,0f534f651h,064c23a52h,0211d07c9h,0ee5bdc9bh,00eeece0fh,0f7015558h,0df178168h
+ DD 00a712229h,0d4294635h,009273f8ch,093cbe448h,08f13bc83h,000b095efh,08798978ch,0bb741972h,056dbe6e7h,09d7309a2h,05a5d39ech,0e578ec56h,0851f9a31h,03961151bh,0e5709eb4h,02da7715dh
+ DD 053dfabf0h,0867f3017h,0b8e39259h,0728d2078h,0815d9958h,05c75a0cdh,016603be1h,0f84867a6h,070e35b1ch,0c865b13dh,019b03e2ch,002414468h,0ac1f3121h,0e46041dah,06f028a7ch,07c9017adh
+ DD 00a482873h,0abc96de9h,0b77e54d4h,04265d6b1h,0a57d88e7h,068c38e79h,09ce82de3h,0d461d766h,064a7e489h,0817a9ec5h,0a0def5f2h,0cc5675cdh,0985d494eh,09a00e785h,01b03514ah,0c626833fh
+ DD 083cdd60eh,0abe7905ah,0a1170184h,050602fb5h,0b023642ah,0689886cdh,0a6e1fb00h,0d568d090h,00259217fh,05b1922c7h,0c43141e4h,093831cd9h,00c95f86eh,0dfca3587h,0568ae828h,0dec2057ah
+ DD 0f98a759ah,0c44ea599h,0f7c23c1dh,055a0a7a2h,094c4f687h,0d5ffb6e6h,012848478h,03563cce2h,0e7b1fbe1h,0812b3517h,04f7338e0h,08a7dc979h,052d048dbh,0211ecee9h,0c86ea3b8h,02eea4056h
+ DD 0ba772b34h,0d8cb68a7h,05f4e2541h,0e16ed341h,00fec14dbh,09b32f6a6h,0391698beh,0eee376f7h,083674c02h,0e9a7aa17h,05843022ah,065832f97h,05ba4990fh,029f3a8dah,0fb8e3216h,079a59c3ah
+ DD 0bd19bb16h,09cdc4d2eh,0b3262d86h,0c6c7cfd0h,0969c0b47h,0d4ce14d0h,013e56128h,01fa352b7h,0973db6d3h,0383d55b8h,0e8e5b7bfh,071836850h,0e6bb571fh,0c7714596h,02d5b2dd2h,0259df31fh
+ DD 0913cc16dh,0568f8925h,0e1a26f5ah,018bc5b6dh,0f5f499aeh,0dfa413beh,0c3f0ae84h,0f8835dech,065a40ab0h,0b6e60bd8h,0194b377eh,065596439h,092084a69h,0bcd85625h,04f23ede0h,05ce433b9h
+ DD 06ad65143h,0e8e8f04fh,0d6e14af6h,011511827h,08295c0c7h,03d390a10h,0621eba16h,071e29ee4h,063717b46h,0a588fc09h,0e06ad4a2h,002be02feh,004c22b22h,0931558c6h,012f3c849h,0bb4d4bd6h
+ DD 020efd662h,054a4f496h,0c5952d14h,092ba6d20h,0cc9784c2h,02db8ea1eh,04b353644h,081cc10cah,04b4d7f6ch,040b570adh,084a1dcd2h,05c9f1d96h,03147e797h,001379f81h,02bd499f5h,0e5c6097bh
+ DD 0328e5e20h,040dcafa6h,054815550h,0f7b5244ah,047bfc978h,0b9a4f118h,0d25825b1h,00ea0e79fh,0646c7ecfh,0a50f96ebh,0446dea9dh,0eb811493h,0dfabcf69h,02af04677h,0c713f6e8h,0be3a068fh
+ DD 042e06189h,0860d523dh,04e3aff13h,0bf077941h,0c1b20650h,00b616dcah,02131300dh,0e66dd6d1h,0ff99abdeh,0d4a0fd67h,0c7aac50dh,0c9903550h,07c46b2d7h,0022ecf8bh,03abf92afh,03333b1e8h
+ DD 06c491c14h,011cc113ch,080dd3f88h,005976688h,029d932edh,0f5b4d9e7h,0a2c38b6dh,0e982aad8h,08be0dcf0h,06f925347h,065ca53f2h,0700080aeh,0443ca77fh,0d8131156h,0ec51f984h,0e92d6942h
+ DD 085dfe9aeh,0d2a08af8h,04d2a86cah,0d825d9a5h,039dff020h,02c53988dh,0430cdc40h,0f38b135ah,062a7150bh,00c918ae0h,00c340e9bh,0f31fd8deh,04dbbf02eh,0afa0e7aeh,05eba6239h,05847fb2ah
+ DD 0dccbac8bh,06b1647dch,006f485c8h,0b642aa78h,07038ecdfh,0873f3765h,0fa49d3feh,02ce5e865h,0c98c4400h,0ea223788h,0f1fa5279h,08104a8cdh,006becfd7h,0bcf7cc7ah,0c8f974aeh,049424316h
+ DD 084d6365dh,0c0da65e7h,08f759fb8h,0bcb7443fh,07ae81930h,035c712b1h,04c6e08abh,080428dffh,0a4faf843h,0f19dafefh,0ffa9855fh,0ced8538dh,0be3ac7ceh,020ac409ch,0882da71eh,0358c1fb6h
+ DD 0fd349961h,0afa9c0e5h,08421c2fch,02b2cfa51h,0f3a28d38h,02a80db17h,05d138e7eh,0a8aba539h,06e96eb8dh,052012d1dh,0cbaf9622h,065d8dea0h,0b264f56ch,057735447h,01b6c8da2h,0beebef3fh
+ DD 0ce785254h,0fc346d98h,0bb64a161h,0d50e8d72h,049794addh,0c03567c7h,0752c7ef6h,015a76065h,0961f23d6h,059f3a222h,073ecc0b0h,0378e4438h,05a82fde4h,0c74be434h,0d8b9cf34h,0ae509af2h
+ DD 0577f44a1h,04a61ee46h,0b611deebh,0e09b748ch,0f5f7b884h,0c0481b2ch,061acfa6bh,035626678h,0bf8d21e6h,037f4c518h,0b205a76dh,022d96531h,0954073c0h,037fb85e1h,065b3a567h,0bceafe4fh
+ DD 0be42a582h,0efecdef7h,065046be6h,0d3fc6080h,009e8dba9h,0c9af13c8h,0641491ffh,01e6c9847h,0d30c31f7h,03b574925h,0ac2a2122h,0b7eb72bah,0ef0859e7h,0776a0dach,021900942h,006fec314h
+ DD 0f8c22049h,02464bc10h,0875ebf69h,09bfbcce7h,04336326bh,0d7a88e2ah,05bc2acfah,0da05261ch,0eba7efc8h,0c29f5bdch,025dbbf2eh,0471237cah,02975f127h,0a72773f2h,004d0b326h,0dc744e8eh
+ DD 0a56edb73h,038a7ed16h,02c007e70h,064357e37h,05080b400h,0a167d15bh,023de4be1h,007b41164h,074c89883h,0b2d91e32h,02882e7edh,03c162821h,07503e482h,0ad6b36bah,00ea34331h,048434e8eh
+ DD 02c7ae0b9h,079f4f24fh,01939b44ah,0c46fbf81h,056595eb1h,076fefae8h,0cd5f29c7h,0417b66abh,0c5ceec20h,05f2332b2h,0e1a1cae2h,0d69661ffh,09b0286e6h,05ede7e52h,0e276b993h,09d062529h
+ DD 07e50122bh,0324794b0h,04af07ca5h,0dd744f8bh,0d63fc97bh,030a12f08h,076626d9dh,039650f1ah,01fa38477h,0101b47f7h,0d4dc124fh,03d815f19h,0b26eb58ah,01569ae95h,095fb1887h,0c3cde188h
+ DD 0f9539a48h,054e9f37bh,07408c1a5h,0b0100e06h,0ea580cbbh,0821d9811h,086e50c56h,08af52d35h,0dbbf698bh,0dfbd9d47h,003dc1c73h,02961a1eah,0e76a5df8h,0203d38f8h,06def707ah,008a53a68h
+ DD 01bee45d4h,026eefb48h,03c688036h,0b3cee346h,0c42f2469h,0463c5315h,081378162h,019d84d2eh,01c4d349fh,022d7c3c5h,0163d59c5h,065965844h,0b8abceaeh,0cf198c56h,0628559d5h,06fb1fb1bh
+ DD 007bf8fe3h,08bbffd06h,03467734bh,046259c58h,035f7f0d3h,0d8953ceah,0d65b0ff1h,01f0bece2h,0f3c72914h,0f7d5b4b3h,03cb53389h,029e8ea95h,0836b6d46h,04a365626h,0ea174fdeh,0e849f910h
+ DD 0f4737f21h,07ec62fbbh,06209f5ach,0d8dba5abh,0a5f9adbeh,024b5d7a9h,0a61dc768h,0707d28f7h,0caa999eah,07711460bh,01c92e4cch,0ba7b174dh,018d4bf2dh,03c4bab66h,0eb8bd279h,0b8f0c980h
+ DD 0324b4737h,0024bea9ah,032a83bcah,0fba9e423h,0a232dcedh,06e635643h,02571c8bah,099619367h,054b7032bh,0e8c9f357h,02442d54ah,0f936b3bah,08290c65ah,02263f0f0h,0ee2c7fdbh,048989780h
+ DD 013d4f95eh,0adc5d55ah,0ad9b8500h,0737cff85h,08a73f43dh,0271c557bh,0e18bc476h,0bed617a4h,07dfd8ab2h,066245401h,03a2870aah,0ae7b89aeh,023a7e545h,01b555f53h,0be057e4ch,06791e247h
+ DD 0324fa34dh,0860136adh,04cbeae28h,0ea111447h,0bedd3299h,0023a4270h,0c1c35c34h,03d5c3a7fh,08d0412d2h,0b0f6db67h,0fcdc6b9ah,0d92625e2h,04e28a982h,092ae5ccch,047a3ce7eh,0ea251c36h
+ DD 0790691bfh,09d658932h,006b736aeh,0ed610589h,0c0d63b6eh,0712c2f04h,0c63d488fh,05cf06fd5h,0d9588e41h,097363fach,02b93257eh,01f9bf762h,0667acaceh,0a9d1ffc4h,00a061ecfh,01cf4a1aah
+ DD 0dc1818d0h,040e48a49h,0a3621ab0h,00643ff39h,0e39ef639h,05768640ch,004d86854h,01fc099eah,0eccd28fdh,09130b9c3h,07eec54abh,0d743cbd2h,0e5b475b6h,0052b146fh,0900a7d1fh,0058d9a82h
+ DD 091262b72h,065e02292h,0bb0edf03h,096f924f9h,0fe206842h,05cfa59c8h,05eafa720h,0f6037004h,018d7dd96h,05f30699eh,0cbab2495h,0381e8782h,0dd8be949h,091669b46h,026aae8efh,0b40606f5h
+ DD 0fc6751a4h,02812b839h,0fba800efh,016196214h,04c1a2875h,04398d5cah,0653d8349h,0720c00eeh,0d820007ch,0c2699eb0h,0a39b5825h,0880ee660h,0471f6984h,070694694h,0e3dda99ah,0f7d16ea8h
+ DD 0c0519a23h,028d675b2h,04f6952e3h,09ebf94feh,0a2294a8ah,0f28bb767h,0fe0af3f5h,085512b4dh,099b16a0dh,018958ba8h,0ba7548a7h,095c2430ch,0a16be615h,0b30d1b10h,085bfb74ch,0e3ebbb97h
+ DD 018549fdbh,0a3273cfeh,04fcdb792h,0f6e200bfh,083aba56ch,054a76e18h,089ef6aa2h,073ec66f6h,0d1b9a305h,08d17add7h,0b7ae1b9dh,0a959c5b9h,06bcc094ah,088643522h,0d7d429b9h,0cc5616c4h
+ DD 0e6a33f7ch,0a6dada01h,09d4e70adh,0c6217a07h,009c15b7ch,0d619a818h,00e80c854h,0ea06b329h,0a5f5e7b9h,0174811ceh,0787c65f4h,066dfc310h,03316ab54h,04ea7bd69h,01dcc0f70h,0c12c4acbh
+ DD 01e407dd9h,0e4308d1ah,091afa997h,0e8a3587ch,0ab77b7a5h,0ea296c12h,0673c0d52h,0b5ad49e4h,07006085ah,040f9b2b2h,087bf6ec2h,0a88ff340h,04e3066a6h,0978603b1h,0b5e486e2h,0b3f99fc2h
+ DD 0b2e63645h,007b53f5eh,084c84232h,0be57e547h,07214d5cfh,0d779c216h,0029a3acah,0617969cdh,08a7017a0h,0d17668cdh,0be9b7ee8h,077b4d19ah,09c161776h,058fd0e93h,0d5968a72h,0a8c4f4efh
+ DD 067b3de77h,0296071cch,0634f7905h,0ae3c0b8eh,08a7100c9h,067e440c2h,0eb4b9b42h,0bb8c3c1bh,0c51b3583h,06d71e8eah,09525e642h,07591f5afh,013f509f3h,0f73a2f7bh,05619ac9bh,0618487aah
+ DD 09d61718ah,03a72e5f7h,07592d28ch,000413bcch,0963c35cfh,07d9b11d3h,0b90a46edh,077623bcfh,0dcdd2a50h,0deef273bh,00601846eh,04a741f9bh,00ec6e929h,033b89e51h,08b7f22cdh,0cb02319fh
+ DD 0084bae24h,0bbe1500dh,0343d2693h,02f0ae8d7h,07cdef811h,0acffb5f2h,0263fb94fh,0aa0c030ah,0a0f442deh,06eef0d61h,027b139d3h,0f92e1817h,00ad8bc28h,01ae6deb7h,0c0514130h,0a89e38dch
+ DD 0d2fdca23h,081eeb865h,0cc8ef895h,05a15ee08h,001905614h,0768fa10ah,0880ee19bh,0eff5b8efh,0cb1c8a0eh,0f0c0cabbh,0b8c838f9h,02e1ee9cdh,08a4a14c0h,00587d8b8h,02ff698e5h,0f6f27896h
+ DD 089ee6256h,0ed38ef1ch,06b353b45h,0f44ee1feh,070e903b3h,09115c0c7h,0818f31dfh,0c78ec0a1h,0b7dccbc6h,06c003324h,0163bbc25h,0d96dd1f3h,05cedd805h,033aa82ddh,07f7eb2f1h,0123aae4fh
+ DD 0a26262cdh,01723fcf5h,00060ebd5h,01f7f4d5dh,0b2eaa3afh,0f19c5c01h,09790accfh,02ccb9b14h,052324aa6h,01f9c1cadh,07247df54h,063200526h,0bac96f82h,05732fe42h,001a1c384h,052fe771fh
+ DD 0b1001684h,0546ca13dh,0a1709f75h,0b56b4eeeh,0d5db8672h,0266545a9h,01e8f3cfbh,0ed971c90h,0e3a07b29h,04e7d8691h,0e4b696b9h,07570d9ech,07bc7e9aeh,0dc5fa067h,0c82c4844h,068b44cafh
+ DD 0bf44da80h,0519d34b3h,05ab32e66h,0283834f9h,06278a000h,06e608797h,0627312f6h,01e62960eh,0e6901c55h,09b87b27bh,024fdbc1fh,080e78538h,02facc27dh,0bbbc0951h,0ac143b5ah,006394239h
+ DD 0376c1944h,035bb4a40h,063da1511h,07cb62694h,0b7148a3bh,0afd29161h,04e2ea2eeh,0a6f9d9edh,0880dd212h,015dc2ca2h,0a61139a9h,0903c3813h,06c0f8785h,02aa7b46dh,0901c60ffh,036ce2871h
+ DD 0e10d9c12h,0c683b028h,0032f33d3h,07573baa2h,067a31b58h,087a9b1f6h,0f4ffae12h,0fd3ed11ah,00cb2748eh,083dcaa9ah,05d6fdf16h,08239f018h,072753941h,0ba67b49ch,0c321cb36h,02beec455h
+ DD 03f8b84ceh,088015606h,08d38c86fh,076417083h,0598953ddh,0054f1ca7h,04e8e7429h,0c939e110h,05a914f2fh,09b1ac2b3h,0e74b8f9ch,039e35ed3h,0781b2fb0h,0d0debdb2h,02d997ba2h,01585638fh
+ DD 09e2fce99h,09c4b646eh,01e80857fh,068a21081h,03643b52ah,006d54e44h,00d8eb843h,0de8d6d63h,042146a0ah,070321563h,05eaa3622h,08ba826f2h,086138787h,0227a58bdh,010281d37h,043b6c03ch
+ DD 0b54dde39h,06326afbbh,0db6f2d5fh,0744e5e8ah,0cff158e1h,048b2a99ah,0ef87918fh,0a93c8fa0h,0de058c5ch,02182f956h,0936f9e7ah,0216235d2h,0d2e31e67h,0ace0c0dbh,0f23ac3e7h,0c96449bfh
+ DD 0170693bdh,07e9a2874h,0a45e6335h,0a28e14fdh,056427344h,05757f6b3h,0acf8edf9h,0822e4556h,0e6a285cdh,02b7a6ee2h,0a9df3af0h,05866f211h,0f845b844h,040dde2ddh,0110e5e49h,0986c3726h
+ DD 0f7172277h,073680c2ah,00cccb244h,057b94f0fh,02d438ca7h,0bdff7267h,0cf4663fdh,0bad1ce11h,0d8f71caeh,09813ed9dh,0961fdaa6h,0f43272a6h,0bd6d1637h,0beff0119h,030361978h,0febc4f91h
+ DD 02f41deffh,002b37a95h,0e63b89b7h,00e44a59ah,0143ff951h,0673257dch,0d752baf4h,019c02205h,0c4b7d692h,046c23069h,0fd1502ach,02e6392c3h,01b220846h,06057b1a2h,00c1b5b63h,0e51ff946h
+ DD 0566c5c43h,06e85cb51h,03597f046h,0cff9c919h,04994d94ah,09354e90ch,02147927dh,0e0a39332h,00dc1eb2bh,08427fac1h,02ff319fah,088cfd8c2h,001965274h,0e2d4e684h,067aaa746h,0fa2e067dh
+ DD 03e5f9f11h,0b6d92a7fh,0d6cb3b8eh,09afe153ah,0ddf800bdh,04d1a6dd7h,0caf17e19h,0f6c13cc0h,0325fc3eeh,015f6c58eh,0a31dc3b2h,071095400h,0afa3d3e7h,0168e7c07h,094c7ae2dh,03f8417a1h
+ DD 0813b230dh,0ec234772h,017344427h,0634d0f5fh,0d77fc56ah,011548ab1h,0ce06af77h,07fab1750h,04f7c4f83h,0b62c10a7h,0220a67d9h,0a7d2edc4h,0921209a0h,01c404170h,0face59f0h,00b9815a0h
+ DD 0319540c3h,02842589bh,0a283d6f8h,018490f59h,0daae9fcbh,0a2731f84h,0c3683ba0h,03db6d960h,014611069h,0c85c63bbh,00788bf05h,0b19436afh,0347460d2h,0905459dfh,0e11a7db1h,073f6e094h
+ DD 0b6357f37h,0dc7f938eh,02bd8aa62h,0c5d00f79h,02ca979fch,0c878dcb9h,0eb023a99h,037e83ed9h,01560bf3dh,06b23e273h,01d0fae61h,01086e459h,09a9414bdh,078248316h,0f0ea9ea1h,01b956bc0h
+ DD 0c31b9c38h,07b85bb91h,048ef57b5h,00c5aa90bh,0af3bab6fh,0dedeb169h,02d373685h,0e610ad73h,002ba8e15h,0f13870dfh,08ca7f771h,00337edb6h,0b62c036ch,0e4acf747h,0b6b94e81h,0d921d576h
+ DD 02c422f7ah,0dbc86439h,0ed348898h,0fb635362h,0c45bfcd1h,083084668h,02b315e11h,0c357c9e3h,05b2e5b8ch,0b173b540h,0e102b9a4h,07e946931h,07b0fb199h,017c890ebh,0d61b662bh,0ec225a83h
+ DD 0ee3c76cbh,0f306a3c8h,0d32a1f6eh,03cf11623h,06863e956h,0e6d5ab64h,05c005c26h,03b8a4cbeh,09ce6bb27h,0dcd529a5h,004d4b16fh,0c4afaa52h,07923798dh,0b0624a26h,06b307fabh,085e56df6h
+ DD 02bf29698h,00281893ch,0d7ce7603h,091fc19a4h,0ad9a558fh,075a5dca3h,04d50bf77h,040ceb3fah,0bc9ba369h,01baf6060h,0597888c2h,0927e1037h,086a34c07h,0d936bf19h,0c34ae980h,0d4cf10c1h
+ DD 0859dd614h,03a3e5334h,018d0c8eeh,09c475b5bh,007cd51d5h,063080d1fh,0b88b4326h,0c9c0d0a6h,0c234296fh,01ac98691h,094887fb6h,02a0a83a4h,00cea9cf2h,056511427h,0a24802f5h,05230a6e8h
+ DD 072e3d5c1h,0f7a2bf0fh,04f21439eh,037717446h,09ce30334h,0fedcbf25h,07ce202f9h,0e0030a78h,01202e9cah,06f2d9ebfh,075e6e591h,0e79dde6ch,0f1dac4f8h,0f52072afh,0bb9b404dh,06c8d087eh
+ DD 0bce913afh,0ad0fc73dh,0458a07cbh,0909e587bh,0d4f00c8ah,01300da84h,0b54466ach,0425cd048h,090e9d8bfh,0b59cb9beh,03e431b0eh,0991616dbh,0531aecffh,0d3aa117ah,059f4dc3bh,091af92d3h
+ DD 0e93fda29h,09b1ec292h,0e97d91bch,076bb6c17h,0aface1e6h,07509d95fh,0be855ae3h,03653fe47h,00f680e75h,073180b28h,0eeb6c26ch,075eefd1bh,0b66d4236h,0a4cdf29fh,06b5821d8h,02d70a997h
+ DD 020445c36h,07a3ee207h,059877174h,071d1ac82h,0949f73e9h,00fc539f7h,0982e3081h,0d05cf3d7h,07b1c7129h,08758e20bh,0569e61f2h,0ffadcc20h,059544c2dh,0b05d3a2fh,09fff5e53h,0be16f5c1h
+ DD 0aad58135h,073cf65b8h,0037aa5beh,0622c2119h,0646fd6a0h,079373b3fh,00d3978cfh,00e029db5h,094fba037h,08bdfc437h,0620797a6h,0aefbd687h,0bd30d38eh,03fa5382bh,0585d7464h,07627cfbfh
+ DD 04e4ca463h,0b2330fefh,03566cc63h,0bcef7287h,0cf780900h,0d161d2cah,05b54827dh,0135dc539h,027bf1bc6h,0638f052eh,007dfa06ch,010a224f0h,06d3321dah,0e973586dh,026152c8fh,08b0c5738h
+ DD 034606074h,007ef4f2ah,0a0f7047ah,080fe7fe8h,0e1a0e306h,03d1a8152h,088da5222h,032cf43d8h,05f02ffe6h,0bf89a95fh,0806ad3eah,03d9eb9a4h,079c8e55eh,0012c17bbh,099c81dach,0fdcd1a74h
+ DD 0b9556098h,07043178bh,0801c3886h,04090a1dfh,09b67b912h,0759800ffh,0232620c8h,03e5c0304h,070dceecah,04b9d3c4bh,0181f648eh,0bb2d3c15h,06e33345ch,0f981d837h,00cf2297ah,0b626289bh
+ DD 08baebdcfh,0766ac659h,075df01e5h,01a28ae09h,0375876d8h,0b71283dah,0607b9800h,04865a96dh,0237936b2h,025dd1bcdh,060417494h,0332f4f4bh,0370a2147h,0d0923d68h,0dc842203h,0497f5dfbh
+ DD 032be5e0fh,09dc74cbdh,017a01375h,07475bcb7h,050d872b1h,0438477c9h,0ffe1d63dh,0cec67879h,0d8578c70h,09b006014h,078bb6b8bh,0c9ad99a8h,011fb3806h,06799008eh,0cd44cab3h,0cfe81435h
+ DD 02f4fb344h,0a2ee1582h,0483fa6ebh,0b8823450h,0652c7749h,0622d323dh,0beb0a15bh,0d8474a98h,05d1c00d0h,0e43c154dh,00e3e7aach,07fd581d9h,02525ddf8h,02b44c619h,0b8ae9739h,067a033ebh
+ DD 09ef2d2e4h,0113ffec1h,0d5a0ea7fh,01bf6767eh,003714c0ah,057fff75eh,00a23e9eeh,0a23c422eh,0540f83afh,0dd5f6b2dh,055ea46a7h,0c2c2c27eh,0672a1208h,0eb6b4246h,0ae634f7ah,0d13599f7h
+ DD 0d7b32c6eh,0cf914b5ch,0eaf61814h,061a5a640h,0208a1bbbh,08dc3df8bh,0b6d79aa5h,0ef627fd6h,0c4c86bc8h,044232ffch,0061539feh,0e6f9231bh,0958b9533h,01d04f25ah,049e8c885h,0180cf934h
+ DD 09884aaf7h,089689595h,007b348a6h,0b1959be3h,03c147c87h,096250e57h,0dd0c61f8h,0ae0efb3ah,0ca8c325eh,0ed00745eh,0ecff3f70h,03c911696h,0319ad41dh,073acbc65h,0f0b1c7efh,07b01a020h
+ DD 063a1483fh,0ea32b293h,07a248f96h,089eabe71h,0343157e5h,09c6231d3h,0df3c546dh,093a375e5h,06a2afe69h,0e76e9343h,0e166c88eh,0c4f89100h,04f872093h,0248efd0dh,08fe0ea61h,0ae0eb3eah
+ DD 09d79046eh,0af89790dh,06cee0976h,04d650f2dh,043071ecah,0a3935d9ah,0283b0bfeh,066fcd2c9h,0696605f1h,00e665eb5h,0a54cd38dh,0e77e5d07h,043d950cfh,090ee050ah,0d32e69b5h,086ddebdah
+ DD 0fddf7415h,06ad94a3dh,03f6e8d5ah,0f7fa1309h,0e9957f75h,0c4831d1dh,0d5817447h,07de28501h,09e2aeb6bh,06f1d7078h,0f67a53c2h,0ba2b9ff4h,0df9defc3h,036963767h,00d38022ch,0479deed3h
+ DD 03a8631e8h,0d2edb89bh,07a213746h,08de855deh,0b00c5f11h,0b2056cb7h,02c9b85e4h,0deaefbd0h,0d150892dh,003f39a8dh,0218b7985h,037b84686h,0b7375f1ah,036296dd8h,0b78e898eh,0472cd4b1h
+ DD 0e9f05de9h,015dff651h,02ce98ba9h,0d4045069h,09b38024ch,08466a7aeh,0e5a6b5efh,0b910e700h,0b3aa8f0dh,0ae1c56eah,07eee74a6h,0bab2a507h,04b4c4620h,00dca11e2h,04c47d1f4h,0fd896e2eh
+ DD 0308fbd93h,0eb45ae53h,002c36fdah,046cd5a2eh,0baa48385h,06a3d4e90h,09dbe9960h,0dd55e62eh,02a81ede7h,0a1406aa0h,0f9274ea7h,06860dd14h,080414f86h,0cfdcb0c2h,022f94327h,0ff410b10h
+ DD 049ad467bh,05a33cc38h,00a7335f1h,0efb48b6ch,0b153a360h,014fb54a4h,0b52469cch,0604aa9d2h,0754e48e9h,05e9dc486h,037471e8eh,0693cb455h,08d3b37b6h,0fb2fd7cdh,0cf09ff07h,063345e16h
+ DD 023a5d896h,09910ba6bh,07fe4364eh,01fe19e35h,09a33c677h,06e1da8c3h,029fd9fd0h,015b4488bh,01a1f22bfh,01f439254h,0ab8163e8h,0920a8a70h,007e5658eh,03fd1b249h,0b6ec839bh,0f2c4f79ch
+ DD 04aa38d1bh,01abbc3d0h,0b5d9510eh,03b0db35ch,03e60dec0h,01754ac78h,0ea099b33h,053272fd7h,007a8e107h,05fb0494fh,06a8191fah,04a89e137h,03c4ad544h,0a113b7f6h,06cb9897bh,088a2e909h
+ DD 0b44a3f84h,017d55de3h,017c6c690h,0acb2f344h,010232390h,032088168h,06c733bf7h,0f2e8a61fh,09c2d7652h,0a774aab6h,0ed95c5bch,0fb5307e3h,04981f110h,0a05c73c2h,0a39458c9h,01baae31ch
+ DD 0cbea62e7h,01def185bh,0eaf63059h,0e8ac9eaeh,09921851ch,0098a8cfdh,03abe2f5bh,0d959c3f1h,020e40ae5h,0a4f19525h,007a24aa1h,0320789e3h,07392b2bch,0259e6927h,01918668bh,058f6c667h
+ DD 0c55d2d8bh,0ce1db2bbh,0f4f6ca56h,041d58bb7h,08f877614h,07650b680h,0f4c349edh,0905e16bah,0f661acach,0ed415140h,0cb2270afh,03b8784f0h,08a402cbah,03bc280ach,00937921ah,0d53f7146h
+ DD 0e5681e83h,0c03c8ee5h,0f6ac9e4ah,062126105h,0936b1a38h,09503a53fh,0782fecbdh,03d45e2d4h,076e8ae98h,069a5c439h,0bfb4b00eh,0b53b2eebh,072386c89h,0f1674712h,04268bce4h,030ca34a2h
+ DD 078341730h,07f1ed86ch,0b525e248h,08ef5beb8h,0b74fbf38h,0bbc489fdh,091a0b382h,038a92a0eh,022433ccfh,07a77ba3fh,0a29f05a9h,0de8362d6h,061189afch,07f6a30eah,059ef114fh,0693b5505h
+ DD 0cd1797a1h,050266bc0h,0f4b7af2dh,0ea17b47eh,03df9483eh,0d6c4025ch,0a37b18c9h,08cbb9d9fh,04d8424cfh,091cbfd9ch,0ab1c3506h,0db7048f1h,0028206a3h,09eaf641fh,025bdf6ceh,0f986f3f9h
+ DD 0224c08dch,0262143b5h,081b50c91h,02bbb09b4h,0aca8c84fh,0c16ed709h,0b2850ca8h,0a6210d9dh,009cb54d6h,06d8df67ah,0500919a4h,091eef6e0h,00f132857h,090f61381h,0f8d5028bh,09acede47h
+ DD 090b771c3h,0844d1b71h,0ba6426beh,0563b71e4h,0bdb802ffh,02efa2e83h,0ab5b4a41h,03410cbabh,030da84ddh,0555b2d26h,0ee1cc29ah,0d0711ae9h,02f547792h,0cf3e8c60h,0dc678b35h,003d7d5deh
+ DD 0ced806b8h,0071a2fa8h,0697f1478h,0222e6134h,0abfcdbbfh,0dc16fd5dh,0121b53b8h,044912ebfh,02496c27ch,0ac943674h,01ffc26b0h,08ea3176ch,013debf2ch,0b6e224ach,0f372a832h,0524cc235h
+ DD 09f6f1b18h,0d706e1d8h,044cce35bh,02552f005h,0a88e31fch,08c8326c2h,0f9552047h,0b5468b2ch,03ff90f2bh,0ce683e88h,02f0a5423h,077947bdfh,0ed56e328h,0d0a1b28bh,0c20134ach,0aee35253h
+ DD 03567962fh,07e98367dh,08188bffbh,0379ed61fh,0faf130a1h,073bba348h,0904ed734h,06c1f75e1h,03b4a79fch,018956642h,054ef4493h,0f20bc83dh,09111eca1h,0836d425dh,0009a8dcfh,0e5b5c318h
+ DD 013221bc5h,03360b25dh,06b3eeaf7h,0707baad2h,0743a95a1h,0d7279ed8h,0969e809fh,07450a875h,0e5d0338fh,032b6bd53h,02b883bbch,01e77f7afh,01063ecd0h,090da12cch,0c315be47h,0e2697b58h
+ DD 0da85d534h,02771a5bdh,0ff980eeah,053e78c1fh,0900385e7h,0adf1cf84h,0c9387b62h,07d3b14f6h,0cb8f2bd2h,0170e74b0h,0827fa993h,02d50b486h,0f6f32babh,0cdbe8c9ah,0c3b93ab8h,055e906b0h
+ DD 08fe280d1h,0747f22fch,0b2e114abh,0cd8e0de5h,0e10b68b0h,05ab7dbebh,0a480d4b2h,09dc63a9ch,04be1495fh,078d4bc3bh,09359122dh,025eb3db8h,00809cbdch,03f8ac05bh,0d37c702fh,0bf4187bbh
+ DD 01416a6a5h,084cea069h,043ef881ch,08f860c79h,038038a5dh,041311f8ah,0fc612067h,0e78c2ec0h,05ad73581h,0494d2e81h,059604097h,0b4cc9e00h,0f3612cbah,0ff558aech,09e36c39eh,035beef7ah
+ DD 0dbcf41b9h,01845c7cfh,0aea997c0h,05703662ah,0e402f6d8h,08b925afeh,04dd72162h,0d0a1b1aeh,003c41c4bh,09f47b375h,00391d042h,0a023829bh,0503b8b0ah,05f5045c3h,098c010e5h,0123c2688h
+ DD 036ba06eeh,0324ec0cch,03dd2cc0ch,0face3115h,0f333e91fh,0b364f3beh,028e832b0h,0ef8aff73h,02d05841bh,01e9bad04h,0356a21e2h,042f0e3dfh,04add627eh,0a3270bcbh,0d322e711h,0b09a8158h
+ DD 00fee104ah,086e326a1h,03703f65dh,0ad7788f8h,047bc4833h,07e765430h,02b9b893ah,06cee582bh,0e8f55a7bh,09cd2a167h,0d9e4190dh,0efbee3c6h,0d40c2e9dh,033ee7185h,0a380b548h,0844cc9c5h
+ DD 066926e04h,0323f8ecdh,08110c1bah,00001e38fh,0fc6a7f07h,08dbcac12h,00cec0827h,0d65e1d58h,0be76ca2dh,0d2cd4141h,0e892f33ah,07895cf5ch,0367139d2h,0956d230dh,0d012c4c1h,0a91abd3eh
+ DD 087eb36bfh,034fa4883h,0914b8fb4h,0c5f07102h,0adb9c95fh,090f0e579h,028888195h,0fe6ea8cbh,0edfa9284h,07b9b5065h,02b8c8d65h,06c510bd2h,0cbe8aafdh,0d7b8ebefh,096b1da07h,0edb3af98h
+ DD 06295d426h,028ff779dh,03fa3ad7bh,00c4f6ac7h,08b8e2604h,0ec44d054h,08b0050e1h,09b32a66dh,0f0476ce2h,01f943366h,0a602c7b4h,07554d953h,0524f2809h,0be35aca6h,0fd4edbeah,0b6881229h
+ DD 0508efb63h,0e8cd0c8fh,06abcefc7h,09eb5b5c8h,0b441ab4fh,0f5621f5fh,0b76a2b22h,079e6c046h,0e37a1f69h,074a4792ch,003542b60h,0cbd252cbh,0b3c20bd3h,0785f65d5h,04fabc60ch,08dea6143h
+ DD 0de673629h,045e21446h,0703c2d21h,057f7aa1eh,098c868c7h,0a0e99b7fh,08b641676h,04e42f66dh,091077896h,0602884dch,0c2c9885bh,0a0d690cfh,03b9a5187h,0feb4da33h,0153c87eeh,05f789598h
+ DD 052b16dbah,02192dd47h,03524c1b1h,0deefc0e6h,0e4383693h,0465ea76eh,0361b8d98h,079401711h,0f21a15cbh,0a5f9ace9h,0efee9aebh,073d26163h,0e677016ch,0cca844b3h,057eaee06h,06c122b07h
+ DD 015f09690h,0b782dce7h,02dfc0fc9h,0508b9b12h,065d89fc6h,09015ab4bh,0d6d5bb0fh,05e79dab7h,06c775aa2h,064f021f0h,037c7eca1h,0df09d8cch,0ef2fa506h,09a761367h,05b81eec6h,0ed4ca476h
+ DD 010bbb8b5h,0262ede36h,00641ada3h,00737ce83h,0e9831ccch,04c94288ah,08065e635h,0487fc1ceh,0b8bb3659h,0b13d7ab3h,0855e4120h,0dea5df3eh,085eb0244h,0b9a18573h,0a7cfe0a3h,01a1b8ea3h
+ DD 067b0867ch,03b837119h,09d364520h,08d5e0d08h,0d930f0e3h,052dccc1eh,0bf20bbafh,0efbbcec7h,00263ad10h,099cffcabh,0fcd18f8ah,0d8199e6dh,0e9f10617h,064e2773fh,008704848h,00079e8e1h
+ DD 08a342283h,01169989fh,0a83012e6h,08097799ch,08a6a9001h,0ece966cbh,0072ac7fch,093b3afefh,02db3d5bah,0e6893a2ah,089bf4fdch,0263dc462h,0e0396673h,08852dfc9h,03af362b6h,07ac70895h
+ DD 05c2f342bh,0bb9cce4dh,0b52d7aaeh,0bf80907ah,02161bcd0h,097f3d3cdh,00962744dh,0b25b0834h,06c3a1ddah,0c5b18ea5h,006c92317h,0fe4ec7ebh,0ad1c4afeh,0b787b890h,00ede801ah,0dccd9a92h
+ DD 0db58da1fh,09ac6dddah,0b8cae6eeh,022bbc12fh,0815c4a43h,0c6f8bcedh,0f96480c7h,08105a92ch,07a859d51h,00dc3dbf3h,03041196bh,0e3ec7ce6h,00d1067c9h,0d9f64b25h,03d1f8dd8h,0f2321321h
+ DD 076497ee8h,08b5c619ch,0c717370eh,05d2b0ac6h,04fcf68e1h,098204cb6h,062bc6792h,00bdec211h,0a63b1011h,06973ccefh,0e0de1ac5h,0f9e3fa97h,03d0e0c8bh,05efb693eh,0d2d4fcb4h,0037248e9h
+ DD 01ec34f9eh,080802dc9h,033810603h,0d8772d35h,0530cb4f3h,03f06d66ch,0c475c129h,07be5ed0dh,031e82b10h,0cb9e3c19h,0c9ff6b4ch,0c63d2857h,092a1b45eh,0b92118c6h,07285bbcah,00aec4414h
+ DD 01e29a3efh,0fc189ae7h,04c93302eh,0cbe906f0h,0ceaae10eh,0d0107914h,0b68e19f8h,0b7a23f34h,0efd2119dh,0e9d875c2h,0fcadc9c8h,003198c6eh,04da17113h,065591bf6h,03d443038h,03cf0bbf8h
+ DD 02b724759h,0ae485bb7h,0b2d4c63ah,0945353e1h,0de7d6f2ch,082159d07h,04ec5b109h,0389caef3h,0db65ef14h,04a8ebb53h,0dd99de43h,02dc2cb7eh,083f2405fh,0816fa3edh,0c14208a3h,073429bb9h
+ DD 0b01e6e27h,0b618d590h,0e180b2dch,0047e2ccdh,004aea4a9h,0d1b299b5h,09fa403a4h,0412c9e1eh,079407552h,088d28a36h,0f332b8e3h,049c50136h,0e668de19h,03a1b6fcch,075122b97h,0178851bch
+ DD 0fb85fa4ch,0b1e13752h,0383c8ce9h,0d61257ceh,0d2f74daeh,0d43da670h,0bf846bbbh,0a35aa23fh,04421fc83h,05e74235dh,0c363473bh,0f6df8ee0h,03c4aa158h,034d7f52ah,09bc6d22eh,050d05aabh
+ DD 0a64785f4h,08c56e735h,05f29cd07h,0bc56637bh,03ee35067h,053b2bb80h,0dc919270h,050235a0fh,0f2c4aa65h,0191ab6d8h,08396023bh,0c3475831h,0f0f805bah,080400ba5h,05ec0f80fh,08881065bh
+ DD 0cc1b5e83h,0c370e522h,0860b8bfbh,0de2d4ad1h,067b256dfh,0ad364df0h,0e0138997h,08f12502eh,07783920ah,0503fa0dch,0c0bc866ah,0e80014adh,0d3064ba6h,03f89b744h,0cba5dba5h,003511dcdh
+ DD 095a7b1a2h,0197dd46dh,03c6341fbh,09c4e7ad6h,0484c2eceh,0426eca29h,0de7f4f8ah,09211e489h,0c78ef1f4h,014997f6eh,006574586h,02b2c0910h,01c3eede8h,017286a6eh,00f60e018h,025f92e47h
+ DD 031890a36h,0805c5646h,057feea5bh,0703ef600h,0af3c3030h,0389f747ch,054dd3739h,0e0e5daebh,0c9c9f155h,0fe24a4c3h,0b5393962h,07e4bf176h,0af20bf29h,037183de2h,0f95a8c3bh,04a1bd7b5h
+ DD 046191d3dh,0a83b9699h,07b87f257h,0281fc8ddh,054107588h,0b18e2c13h,09b2bafe8h,06372def7h,00d8972cah,0daf4bb48h,056167a3fh,03f2dd4b7h,084310cf4h,01eace32dh,0e42700aah,0e3bcefafh
+ DD 0d785e73dh,05fe5691eh,02ea60467h,0a5db5ab6h,0dfc6514ah,002e23d41h,0e03c3665h,035e8048eh,01adaa0f8h,03f8b118fh,084ce1a5ah,028ec3b45h,02c6646b8h,0e8cacc6eh,0dbd0e40fh,01343d185h
+ DD 0caaa358ch,0e5d7f844h,09924182ah,01a1db7e4h,09c875d9ah,0d64cd42dh,0042eeec8h,0b37b515fh,07b165fbeh,04d4dd409h,0e206eff3h,0fc322ed9h,059b7e17eh,07dee4102h,08236ca00h,055a481c0h
+ DD 0c23fc975h,08c885312h,005d6297bh,015715806h,0f78edd39h,0a078868eh,003c45e52h,0956b31e0h,0ff7b33a6h,0470275d5h,00c7e673fh,0c8d5dc3ah,07e2f2598h,0419227b4h,04c14a975h,08b37b634h
+ DD 08b11888ch,0d0667ed6h,0803e25dch,05e0e8c3eh,0b987a24ah,034e5d0dch,0ae920323h,09f40ac3bh,034e0f63ah,05463de95h,06b6328f9h,0a128bf92h,0da64f1b7h,0491ccd7ch,0c47bde35h,07ef1ec27h
+ DD 0a36a2737h,0a857240fh,063621bc1h,035dc1366h,0d4fb6897h,07a3a6453h,0c929319dh,080f1a439h,0f8cb0ba0h,0fc18274bh,08078c5ebh,0b0b53766h,01e01d0efh,0fb0d4924h,0372ab09ch,050d7c67dh
+ DD 03aeac968h,0b4e370afh,0c4b63266h,0e4f7fee9h,0e3ac5664h,0b4acd4c2h,0ceb38cbfh,0f8910bd2h,0c9c0726eh,01c3ae50ch,0d97b40bfh,015309569h,0fd5a5a1bh,070884b7fh,0ef8314cdh,03890896ah
+ DD 0a5618c93h,058e1515ch,077d942d1h,0e665432bh,0b6f767a8h,0b32181bfh,03a604110h,0753794e8h,0e8c0dbcch,009afeb7ch,0598673a3h,031e02613h,07d46db00h,05d98e557h,09d985b28h,0fc21fb8ch
+ DD 0b0843e0bh,0c9040116h,069b04531h,053b1b3a8h,085d7d830h,0dd1649f0h,0cb7427e8h,0bb3bcc87h,0c93dce83h,077261100h,0a1922a2ah,07e79da61h,0f3149ce8h,0587a2b02h,0de92ec83h,0147e1384h
+ DD 0af077f30h,0484c83d3h,00658b53ah,0ea78f844h,0027aec53h,0912076c2h,093c8177dh,0f34714e3h,0c2376c84h,037ef5d15h,03d1aa783h,08315b659h,0ef852a90h,03a75c484h,016086bd4h,00ba0c58ah
+ DD 0529a6d48h,029688d7ah,0c2f19203h,09c7f250dh,0682e2df9h,0123042fbh,0ad8121bch,02b7587e7h,0e0182a65h,030fc0233h,0e3e1128ah,0b82ecf87h,093fb098fh,071682861h,085e9e6a7h,0043e21aeh
+ DD 066c834eah,0ab5b49d6h,047414287h,03be43e18h,0219a2a47h,0f40fb859h,0cc58df3ch,00e6559e9h,00c6615b4h,0fe1dfe8eh,056459d70h,014abc8fdh,005de0386h,07be0fa8eh,0e9035c7ch,08e63ef68h
+ DD 053b31e91h,0116401b4h,04436b4d8h,00cba7ad4h,0107afd66h,09151f9a0h,01f0ee4c4h,0afaca8d0h,09ee9761ch,075fe5c1dh,0f0c0588fh,03497a16bh,00304804ch,03ee2bebdh,0c2c990b9h,0a8fb9a60h
+ DD 039251114h,0d14d32feh,0cac73366h,036bf25bch,0dba7495ch,0c9562c66h,046ad348bh,0324d301bh,0d670407eh,09f46620ch,0e3733a01h,00ea8d4f1h,0b0c324e0h,0d396d532h,003c317cdh,05b211a0eh
+ DD 05ffe7b37h,0090d7d20h,01747d2dah,03b7f3efbh,0b54fc519h,0a2cb525fh,0f66a971eh,06e220932h,0b486d440h,0ddc160dfh,03fe13465h,07fcfec46h,076e4c151h,083da7e4eh,0d8d302b5h,0d6fa48a1h
+ DD 05872cd88h,0c6304f26h,0278b90a1h,0806c1d3ch,0caf0bc1ch,03553e725h,0bb9d8d5ch,0ff59e603h,07a0b85ddh,0a4550f32h,093ecc217h,0dec5720ah,069d62213h,00b88b741h,05b365955h,07212f245h
+ DD 0b5cae787h,020764111h,01dfd3124h,013cb7f58h,01175aefbh,02dca77dah,0ffaae775h,0eb75466bh,0db6cff32h,074d76f3bh,061fcda9ah,07440f37ah,0b525028bh,01bb3ac92h,0a1975f29h,020fbf8f7h
+ DD 0df83097fh,0982692e1h,0554b0800h,028738f6ch,0a2ce2f2fh,0dc703717h,040814194h,07913b93ch,01fe89636h,004924593h,0f78834a6h,07b98443fh,05114a5a1h,011c6ab01h,0ffba5f4ch,060deb383h
+ DD 001a982e6h,04caa54c6h,03491cd26h,01dd35e11h,07cbd6b05h,0973c315fh,052494724h,0cab00775h,06565e15ah,004659b1fh,08c8fb026h,0bf30f529h,0a8a0de37h,0fc21641bh,0fa5e5114h,0e9c7a366h
+ DD 052f03ad8h,0db849ca5h,0024e35c0h,0c7e8dbe9h,0cfc3c789h,0a1a2bbach,09c26f262h,0bf733e7dh,0b8444823h,0882ffbf5h,06bf8483bh,0b7224e88h,065bef640h,053023b8bh,0d4d5f8cdh,0aabfec91h
+ DD 0079ea1bdh,0a40e1510h,0d05d5d26h,01ad9addch,013e68d4fh,0db3f2eabh,0640f803fh,01cff1ae2h,0d4cee117h,0e0e7b749h,04036d909h,08e9f275bh,08f4d4c38h,0ce34e31dh,0d75130fch,022b37f69h
+ DD 0b4014604h,083e0f1fdh,089415078h,0a8ce9919h,041792efeh,082375b75h,097d4515bh,04f59bf5ch,0923a277dh,0ac4f324fh,0650f3406h,0d9bc9b7dh,08a39bc51h,0c6fa87d1h,05ccc108fh,082588530h
+ DD 082e4c634h,05ced3c9fh,03a4464f8h,08efb8314h,07a1dca25h,0e706381bh,05a2a412bh,06cd15a3ch,0bfcd8fb5h,09347a8fdh,06e54cd22h,031db2eefh,0f8d8932fh,0c4aeb11eh,0344411afh,011e7c1edh
+ DD 0dc9a151eh,02653050ch,03bb0a859h,09edbfc08h,0fd5691e7h,0926c81c7h,06f39019ah,09c1b2342h,07f8474b9h,064a81c8bh,001761819h,090657c07h,055e0375ah,0390b3331h,0b6ebc47dh,0c676c626h
+ DD 0b7d6dee8h,051623247h,079659313h,00948d927h,0e9ab35edh,099700161h,08ddde408h,006cc32b4h,0061ef338h,06f2fd664h,0c202e9edh,01606fa02h,0929ba99bh,055388bc1h,01e81df69h,0c4428c5eh
+ DD 0f91b0b2ah,0ce2028aeh,0f03dfd3fh,0ce870a23h,00affe8edh,066ec2c87h,0284d0c00h,0b205fb46h,044cefa48h,0bf5dffe7h,0a19876d7h,0b6fc37a8h,008b72863h,0becfa84ch,02576374fh,0d7205ff5h
+ DD 08887de41h,080330d32h,0869ea534h,05de0df0ch,03c56ea17h,013f42753h,0452b1a78h,0eb1f6069h,0e30ea15ch,050474396h,0c1494125h,0575816a1h,0fe6bb38fh,0be1ce55bh,096ae30f7h,0b901a948h
+ DD 0d8fc3548h,0e5af0f08h,0d73bfd08h,05010b5d0h,053fe655ah,0993d2880h,01c1309fdh,099f2630bh,0b4e3b76fh,0d8677bafh,0b840784bh,014e51ddch,0bf0092ceh,0326c750ch,0f528320fh,0c83d306bh
+ DD 077d4715ch,0c4456715h,06b703235h,0d30019f9h,0d669e986h,0207ccb2eh,0f6dbfc28h,057c824afh,0d8f92a23h,0f0eb532fh,09bb98fd2h,04a557fd4h,0c1e6199ah,0a57acea7h,08b94b1edh,00c663820h
+ DD 0f83a9266h,09b42be8fh,00101bd45h,0c7741c97h,007bd9cebh,095770c11h,08b2e0744h,01f50250ah,01477b654h,0f762eec8h,015efe59ah,0c65b900eh,09546a897h,088c96148h,0c30b4d7ch,07e8025b3h
+ DD 012045cf9h,0ae4065efh,09ccce8bdh,06fcb2cafh,0f2cf6525h,01fa0ba4eh,0cb72c312h,0f683125dh,0e312410eh,0a01da4eah,06cd8e830h,067e28677h,098fb3f07h,0abd95752h,0eef649a5h,005f11e11h
+ DD 09d3472c2h,0ba47faefh,0c77d1345h,03adff697h,0dd15afeeh,04761fa04h,0b9e69462h,064f1f61ah,09bfb9093h,0fa691fabh,0a1133dfeh,03df8ae8fh,058cc710dh,0cd5f8967h,016c7fe79h,0fbb88d50h
+ DD 0e88c50d1h,08e011b4ch,0a8771c4fh,07532e807h,0e2278ee4h,064c78a48h,03845072ah,00b283e83h,049e69274h,098a6f291h,01868b21ch,0b96e9668h,0b1a8908eh,038f0adc2h,01feb829dh,090afcff7h
+ DD 0210b0856h,09915a383h,0def04889h,0a5a80602h,07c64d509h,0800e9af9h,0b8996f6fh,081382d0bh,081927e27h,0490eba53h,04af50182h,046c63b32h,0d3ad62ceh,0784c5fd9h,0f8ae8736h,0e4fa1870h
+ DD 0d7466b25h,04ec9d0bch,0db235c65h,084ddbe1ah,0163c1688h,05e2645eeh,000eba747h,0570bd00eh,0128bfa0fh,0fa51b629h,06c1d3b68h,092fce1bdh,0b66778b1h,03e7361dch,05561d2bbh,09c7d249dh
+ DD 00bbc6229h,0a40b28bfh,0dfd91497h,01c83c05eh,0f083df05h,05f9f5154h,0eee66c9dh,0bac38b3ch,0ec0dfcfdh,0f71db7e3h,08b0a8416h,0f2ecda8eh,07812aa66h,052fddd86h,04e6f4272h,02896ef10h
+ DD 00fe9a745h,0ff27186ah,049ca70dbh,008249fcdh,0441cac49h,07425a2e6h,0ece5ff57h,0f4a0885ah,07d7ead58h,06e2cb731h,01898d104h,0f96cf7d6h,04f2c9a89h,0afe67c9dh,01c7bf5bch,089895a50h
+ DD 0573cecfah,0dc7cb8e5h,0d15f03e6h,066497eaeh,03f084420h,06bc0de69h,0acd532b0h,0323b9b36h,00115a3c1h,0cfed390ah,02d65ca0eh,09414c40bh,02f530c78h,0641406bdh,0833438f2h,029369a44h
+ DD 0903fa271h,0996884f5h,0b9da921eh,0e6da0fd2h,05db01e54h,0a6f2f269h,06876214eh,01ee3e9bdh,0e27a9497h,0a26e181ch,08e215e04h,036d254e4h,0252cabcah,042f32a6ch,080b57614h,099481487h
+ DD 040d9cae1h,04c4dfe69h,011a10f09h,005869580h,03491b64bh,0ca287b57h,03fd4a53bh,077862d5dh,050349126h,0bf94856eh,071c5268fh,02be30bd1h,0cbb650a6h,010393f19h,0778cf9fdh,0639531feh
+ DD 0b2935359h,002556a11h,0af8c126eh,0da38aa96h,00960167fh,047dbe6c2h,0501901cdh,037bbabb6h,02c947778h,0b6e979e0h,07a1a1dc6h,0d69a5175h,09d9faf0ch,0c3ed5095h,01d5fa5f0h,04dd9c096h
+ DD 064f16ea8h,0a0c4304dh,07e718623h,08b1cac16h,07c67f03eh,00b576546h,0cbd88c01h,0559cf5adh,00e2af19ah,0074877bbh,0a1228c92h,01f717ec1h,0326e8920h,070bcb800h,04f312804h,0ec6e2c5ch
+ DD 03fca4752h,0426aea7dh,02211f62ah,0f12c0949h,07be7b6b5h,024beecd8h,036d7a27dh,0b77eaf4ch,0fda78fd3h,0154c2781h,0264eeabeh,0848a83b0h,04ffe2bc4h,081287ef0h,0b6b6fc2ah,07b6d88c6h
+ DD 0ce417d99h,0805fb947h,08b916cc4h,04b93dcc3h,021273323h,072e65bb3h,06ea9886eh,0bcc1baddh,04bc5ee85h,00e223011h,0c18ee1e4h,0a561be74h,0a6bcf1f1h,0762fd2d4h,095231489h,050e6a5a4h
+ DD 0a00b500bh,0ca96001fh,05d7dcdf5h,05c098cfch,08c446a85h,0a64e2d2eh,0971f3c62h,0bae9bcf1h,08435a2c5h,04ec22683h,04bad4643h,08ceaed6ch,0ccccf4e3h,0e9f8fb47h,01ce3b21eh,0bd4f3fa4h
+ DD 0a3db3292h,0d79fb110h,0b536c66ah,0e28a37dah,08e49e6a9h,0279ce87bh,0fdcec8e3h,070ccfe8dh,03ba464b2h,02193e4e0h,0aca9a398h,00f39d60eh,0f82c12abh,07d7932afh,091e7e0f7h,0d8ff50edh
+ DD 0fa28a7e0h,0ea961058h,00bf5ec74h,0c726cf25h,0db229666h,0e74d55c8h,0a57f5799h,00bd9abbfh,04dfc47b3h,07479ef07h,00c52f91dh,0d9c65fc3h,036a8bde2h,08e0283feh,07d4b7280h,0a32a8b5eh
+ DD 012e83233h,06a677c61h,0dcc9bf28h,00fbb3512h,00d780f61h,0562e8ea5h,01dc4e89ch,00db8b22bh,089be0144h,00a6fd1fbh,0ca57113bh,08c77d246h,0ff09c91ch,04639075dh,05060824ch,05b47b17fh
+ DD 016287b52h,058aea2b0h,0d0cd8eb0h,0a1343520h,0c5d58573h,06148b4d0h,0291c68aeh,0dd2b6170h,01da3b3b7h,0a61b3929h,008c4ac10h,05f946d79h,07217d583h,04105d4a5h,025e6de5eh,05061da3dh
+ DD 0ec1b4991h,03113940dh,036f485aeh,0f12195e1h,0731a2ee0h,0a7507fb2h,06e9e196eh,095057a8eh,02e130136h,0a3c2c911h,033c60d15h,097dfbb36h,0b300ee2bh,0caf3c581h,0f4bac8b8h,077f25d90h
+ DD 06d840cd6h,0db1c4f98h,0e634288ch,0471d62c0h,0cec8a161h,08ec2f85eh,0fa6f4ae2h,041f37cbch,04b709985h,06793a20fh,0efa8985bh,07a7bd33bh,0938e6446h,02c6a3fbdh,02a8d47c1h,019042619h
+ DD 0cc36975fh,016848667h,09d5f1dfbh,002acf168h,0613baa94h,062d41ad4h,09f684670h,0b56fbb92h,0e9e40569h,0ce610d0dh,035489fefh,07b99c65fh,03df18b97h,00c88ad1bh,05d0e9edbh,081b7d9beh
+ DD 0c716cc0ah,0d85218c0h,085691c49h,0f4b5ff90h,0ce356ac6h,0a4fd666bh,04b327a7ah,017c72895h,0da6be7deh,0f93d5085h,03301d34eh,0ff71530eh,0d8f448e8h,04cd96442h,02ed18ffah,09283d331h
+ DD 02a849870h,04d33dd99h,041576335h,0a716964bh,0179be0e5h,0ff5e3a9bh,083b13632h,05b9d6b1bh,0a52f313bh,03b8bd7d4h,0637a4660h,0c9dd95a0h,00b3e218fh,030035962h,0c7b28a3ch,0ce1481a3h
+ DD 043228d83h,0ab41b43ah,04ad63f99h,024ae1c30h,046a51229h,08e525f1ah,0cd26d2b4h,014af860fh,03f714aa1h,0d6baef61h,0eb78795eh,0f51865adh,0e6a9d694h,0d3e21fceh,08a37b527h,082ceb1ddh
+
+.text$ ENDS
+.text$ SEGMENT ALIGN(256) 'CODE'
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+
+ALIGN 64
+$L$poly::
+ DQ 0ffffffffffffffffh,000000000ffffffffh,00000000000000000h,0ffffffff00000001h
+
+
+$L$RR::
+ DQ 00000000000000003h,0fffffffbffffffffh,0fffffffffffffffeh,000000004fffffffdh
+
+$L$One::
+ DD 1,1,1,1,1,1,1,1
+$L$Two::
+ DD 2,2,2,2,2,2,2,2
+$L$Three::
+ DD 3,3,3,3,3,3,3,3
+$L$ONE_mont::
+ DQ 00000000000000001h,0ffffffff00000000h,0ffffffffffffffffh,000000000fffffffeh
+
+
+$L$ord::
+ DQ 0f3b9cac2fc632551h,0bce6faada7179e84h,0ffffffffffffffffh,0ffffffff00000000h
+$L$ordK::
+ DQ 0ccd1c8aaee00bc4fh
+
+PUBLIC ecp_nistz256_mul_by_2
+
+ALIGN 64
+ecp_nistz256_mul_by_2 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_mul_by_2::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ push r12
+
+ push r13
+
+$L$mul_by_2_body::
+
+ mov r8,QWORD PTR[rsi]
+ xor r13,r13
+ mov r9,QWORD PTR[8+rsi]
+ add r8,r8
+ mov r10,QWORD PTR[16+rsi]
+ adc r9,r9
+ mov r11,QWORD PTR[24+rsi]
+ lea rsi,QWORD PTR[$L$poly]
+ mov rax,r8
+ adc r10,r10
+ adc r11,r11
+ mov rdx,r9
+ adc r13,0
+
+ sub r8,QWORD PTR[rsi]
+ mov rcx,r10
+ sbb r9,QWORD PTR[8+rsi]
+ sbb r10,QWORD PTR[16+rsi]
+ mov r12,r11
+ sbb r11,QWORD PTR[24+rsi]
+ sbb r13,0
+
+ cmovc r8,rax
+ cmovc r9,rdx
+ mov QWORD PTR[rdi],r8
+ cmovc r10,rcx
+ mov QWORD PTR[8+rdi],r9
+ cmovc r11,r12
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+
+ mov r13,QWORD PTR[rsp]
+
+ mov r12,QWORD PTR[8+rsp]
+
+ lea rsp,QWORD PTR[16+rsp]
+
+$L$mul_by_2_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_mul_by_2::
+ecp_nistz256_mul_by_2 ENDP
+
+
+
+PUBLIC ecp_nistz256_div_by_2
+
+ALIGN 32
+ecp_nistz256_div_by_2 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_div_by_2::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ push r12
+
+ push r13
+
+$L$div_by_2_body::
+
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[8+rsi]
+ mov r10,QWORD PTR[16+rsi]
+ mov rax,r8
+ mov r11,QWORD PTR[24+rsi]
+ lea rsi,QWORD PTR[$L$poly]
+
+ mov rdx,r9
+ xor r13,r13
+ add r8,QWORD PTR[rsi]
+ mov rcx,r10
+ adc r9,QWORD PTR[8+rsi]
+ adc r10,QWORD PTR[16+rsi]
+ mov r12,r11
+ adc r11,QWORD PTR[24+rsi]
+ adc r13,0
+ xor rsi,rsi
+ test rax,1
+
+ cmovz r8,rax
+ cmovz r9,rdx
+ cmovz r10,rcx
+ cmovz r11,r12
+ cmovz r13,rsi
+
+ mov rax,r9
+ shr r8,1
+ shl rax,63
+ mov rdx,r10
+ shr r9,1
+ or r8,rax
+ shl rdx,63
+ mov rcx,r11
+ shr r10,1
+ or r9,rdx
+ shl rcx,63
+ shr r11,1
+ shl r13,63
+ or r10,rcx
+ or r11,r13
+
+ mov QWORD PTR[rdi],r8
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+
+ mov r13,QWORD PTR[rsp]
+
+ mov r12,QWORD PTR[8+rsp]
+
+ lea rsp,QWORD PTR[16+rsp]
+
+$L$div_by_2_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_div_by_2::
+ecp_nistz256_div_by_2 ENDP
+
+
+
+PUBLIC ecp_nistz256_mul_by_3
+
+ALIGN 32
+ecp_nistz256_mul_by_3 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_mul_by_3::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ push r12
+
+ push r13
+
+$L$mul_by_3_body::
+
+ mov r8,QWORD PTR[rsi]
+ xor r13,r13
+ mov r9,QWORD PTR[8+rsi]
+ add r8,r8
+ mov r10,QWORD PTR[16+rsi]
+ adc r9,r9
+ mov r11,QWORD PTR[24+rsi]
+ mov rax,r8
+ adc r10,r10
+ adc r11,r11
+ mov rdx,r9
+ adc r13,0
+
+ sub r8,-1
+ mov rcx,r10
+ sbb r9,QWORD PTR[(($L$poly+8))]
+ sbb r10,0
+ mov r12,r11
+ sbb r11,QWORD PTR[(($L$poly+24))]
+ sbb r13,0
+
+ cmovc r8,rax
+ cmovc r9,rdx
+ cmovc r10,rcx
+ cmovc r11,r12
+
+ xor r13,r13
+ add r8,QWORD PTR[rsi]
+ adc r9,QWORD PTR[8+rsi]
+ mov rax,r8
+ adc r10,QWORD PTR[16+rsi]
+ adc r11,QWORD PTR[24+rsi]
+ mov rdx,r9
+ adc r13,0
+
+ sub r8,-1
+ mov rcx,r10
+ sbb r9,QWORD PTR[(($L$poly+8))]
+ sbb r10,0
+ mov r12,r11
+ sbb r11,QWORD PTR[(($L$poly+24))]
+ sbb r13,0
+
+ cmovc r8,rax
+ cmovc r9,rdx
+ mov QWORD PTR[rdi],r8
+ cmovc r10,rcx
+ mov QWORD PTR[8+rdi],r9
+ cmovc r11,r12
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+
+ mov r13,QWORD PTR[rsp]
+
+ mov r12,QWORD PTR[8+rsp]
+
+ lea rsp,QWORD PTR[16+rsp]
+
+$L$mul_by_3_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_mul_by_3::
+ecp_nistz256_mul_by_3 ENDP
+
+
+
+PUBLIC ecp_nistz256_add
+
+ALIGN 32
+ecp_nistz256_add PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_add::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ push r12
+
+ push r13
+
+$L$add_body::
+
+ mov r8,QWORD PTR[rsi]
+ xor r13,r13
+ mov r9,QWORD PTR[8+rsi]
+ mov r10,QWORD PTR[16+rsi]
+ mov r11,QWORD PTR[24+rsi]
+ lea rsi,QWORD PTR[$L$poly]
+
+ add r8,QWORD PTR[rdx]
+ adc r9,QWORD PTR[8+rdx]
+ mov rax,r8
+ adc r10,QWORD PTR[16+rdx]
+ adc r11,QWORD PTR[24+rdx]
+ mov rdx,r9
+ adc r13,0
+
+ sub r8,QWORD PTR[rsi]
+ mov rcx,r10
+ sbb r9,QWORD PTR[8+rsi]
+ sbb r10,QWORD PTR[16+rsi]
+ mov r12,r11
+ sbb r11,QWORD PTR[24+rsi]
+ sbb r13,0
+
+ cmovc r8,rax
+ cmovc r9,rdx
+ mov QWORD PTR[rdi],r8
+ cmovc r10,rcx
+ mov QWORD PTR[8+rdi],r9
+ cmovc r11,r12
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+
+ mov r13,QWORD PTR[rsp]
+
+ mov r12,QWORD PTR[8+rsp]
+
+ lea rsp,QWORD PTR[16+rsp]
+
+$L$add_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_add::
+ecp_nistz256_add ENDP
+
+
+
+PUBLIC ecp_nistz256_sub
+
+ALIGN 32
+ecp_nistz256_sub PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_sub::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ push r12
+
+ push r13
+
+$L$sub_body::
+
+ mov r8,QWORD PTR[rsi]
+ xor r13,r13
+ mov r9,QWORD PTR[8+rsi]
+ mov r10,QWORD PTR[16+rsi]
+ mov r11,QWORD PTR[24+rsi]
+ lea rsi,QWORD PTR[$L$poly]
+
+ sub r8,QWORD PTR[rdx]
+ sbb r9,QWORD PTR[8+rdx]
+ mov rax,r8
+ sbb r10,QWORD PTR[16+rdx]
+ sbb r11,QWORD PTR[24+rdx]
+ mov rdx,r9
+ sbb r13,0
+
+ add r8,QWORD PTR[rsi]
+ mov rcx,r10
+ adc r9,QWORD PTR[8+rsi]
+ adc r10,QWORD PTR[16+rsi]
+ mov r12,r11
+ adc r11,QWORD PTR[24+rsi]
+ test r13,r13
+
+ cmovz r8,rax
+ cmovz r9,rdx
+ mov QWORD PTR[rdi],r8
+ cmovz r10,rcx
+ mov QWORD PTR[8+rdi],r9
+ cmovz r11,r12
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+
+ mov r13,QWORD PTR[rsp]
+
+ mov r12,QWORD PTR[8+rsp]
+
+ lea rsp,QWORD PTR[16+rsp]
+
+$L$sub_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_sub::
+ecp_nistz256_sub ENDP
+
+
+
+PUBLIC ecp_nistz256_neg
+
+ALIGN 32
+ecp_nistz256_neg PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_neg::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ push r12
+
+ push r13
+
+$L$neg_body::
+
+ xor r8,r8
+ xor r9,r9
+ xor r10,r10
+ xor r11,r11
+ xor r13,r13
+
+ sub r8,QWORD PTR[rsi]
+ sbb r9,QWORD PTR[8+rsi]
+ sbb r10,QWORD PTR[16+rsi]
+ mov rax,r8
+ sbb r11,QWORD PTR[24+rsi]
+ lea rsi,QWORD PTR[$L$poly]
+ mov rdx,r9
+ sbb r13,0
+
+ add r8,QWORD PTR[rsi]
+ mov rcx,r10
+ adc r9,QWORD PTR[8+rsi]
+ adc r10,QWORD PTR[16+rsi]
+ mov r12,r11
+ adc r11,QWORD PTR[24+rsi]
+ test r13,r13
+
+ cmovz r8,rax
+ cmovz r9,rdx
+ mov QWORD PTR[rdi],r8
+ cmovz r10,rcx
+ mov QWORD PTR[8+rdi],r9
+ cmovz r11,r12
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+
+ mov r13,QWORD PTR[rsp]
+
+ mov r12,QWORD PTR[8+rsp]
+
+ lea rsp,QWORD PTR[16+rsp]
+
+$L$neg_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_neg::
+ecp_nistz256_neg ENDP
+
+
+
+
+
+
+PUBLIC ecp_nistz256_ord_mul_mont
+
+ALIGN 32
+ecp_nistz256_ord_mul_mont PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_ord_mul_mont::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ mov ecx,080100h
+ and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ cmp ecx,080100h
+ je $L$ecp_nistz256_ord_mul_montx
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$ord_mul_body::
+
+ mov rax,QWORD PTR[rdx]
+ mov rbx,rdx
+ lea r14,QWORD PTR[$L$ord]
+ mov r15,QWORD PTR[$L$ordK]
+
+
+ mov rcx,rax
+ mul QWORD PTR[rsi]
+ mov r8,rax
+ mov rax,rcx
+ mov r9,rdx
+
+ mul QWORD PTR[8+rsi]
+ add r9,rax
+ mov rax,rcx
+ adc rdx,0
+ mov r10,rdx
+
+ mul QWORD PTR[16+rsi]
+ add r10,rax
+ mov rax,rcx
+ adc rdx,0
+
+ mov r13,r8
+ imul r8,r15
+
+ mov r11,rdx
+ mul QWORD PTR[24+rsi]
+ add r11,rax
+ mov rax,r8
+ adc rdx,0
+ mov r12,rdx
+
+
+ mul QWORD PTR[r14]
+ mov rbp,r8
+ add r13,rax
+ mov rax,r8
+ adc rdx,0
+ mov rcx,rdx
+
+ sub r10,r8
+ sbb r8,0
+
+ mul QWORD PTR[8+r14]
+ add r9,rcx
+ adc rdx,0
+ add r9,rax
+ mov rax,rbp
+ adc r10,rdx
+ mov rdx,rbp
+ adc r8,0
+
+ shl rax,32
+ shr rdx,32
+ sub r11,rax
+ mov rax,QWORD PTR[8+rbx]
+ sbb rbp,rdx
+
+ add r11,r8
+ adc r12,rbp
+ adc r13,0
+
+
+ mov rcx,rax
+ mul QWORD PTR[rsi]
+ add r9,rax
+ mov rax,rcx
+ adc rdx,0
+ mov rbp,rdx
+
+ mul QWORD PTR[8+rsi]
+ add r10,rbp
+ adc rdx,0
+ add r10,rax
+ mov rax,rcx
+ adc rdx,0
+ mov rbp,rdx
+
+ mul QWORD PTR[16+rsi]
+ add r11,rbp
+ adc rdx,0
+ add r11,rax
+ mov rax,rcx
+ adc rdx,0
+
+ mov rcx,r9
+ imul r9,r15
+
+ mov rbp,rdx
+ mul QWORD PTR[24+rsi]
+ add r12,rbp
+ adc rdx,0
+ xor r8,r8
+ add r12,rax
+ mov rax,r9
+ adc r13,rdx
+ adc r8,0
+
+
+ mul QWORD PTR[r14]
+ mov rbp,r9
+ add rcx,rax
+ mov rax,r9
+ adc rcx,rdx
+
+ sub r11,r9
+ sbb r9,0
+
+ mul QWORD PTR[8+r14]
+ add r10,rcx
+ adc rdx,0
+ add r10,rax
+ mov rax,rbp
+ adc r11,rdx
+ mov rdx,rbp
+ adc r9,0
+
+ shl rax,32
+ shr rdx,32
+ sub r12,rax
+ mov rax,QWORD PTR[16+rbx]
+ sbb rbp,rdx
+
+ add r12,r9
+ adc r13,rbp
+ adc r8,0
+
+
+ mov rcx,rax
+ mul QWORD PTR[rsi]
+ add r10,rax
+ mov rax,rcx
+ adc rdx,0
+ mov rbp,rdx
+
+ mul QWORD PTR[8+rsi]
+ add r11,rbp
+ adc rdx,0
+ add r11,rax
+ mov rax,rcx
+ adc rdx,0
+ mov rbp,rdx
+
+ mul QWORD PTR[16+rsi]
+ add r12,rbp
+ adc rdx,0
+ add r12,rax
+ mov rax,rcx
+ adc rdx,0
+
+ mov rcx,r10
+ imul r10,r15
+
+ mov rbp,rdx
+ mul QWORD PTR[24+rsi]
+ add r13,rbp
+ adc rdx,0
+ xor r9,r9
+ add r13,rax
+ mov rax,r10
+ adc r8,rdx
+ adc r9,0
+
+
+ mul QWORD PTR[r14]
+ mov rbp,r10
+ add rcx,rax
+ mov rax,r10
+ adc rcx,rdx
+
+ sub r12,r10
+ sbb r10,0
+
+ mul QWORD PTR[8+r14]
+ add r11,rcx
+ adc rdx,0
+ add r11,rax
+ mov rax,rbp
+ adc r12,rdx
+ mov rdx,rbp
+ adc r10,0
+
+ shl rax,32
+ shr rdx,32
+ sub r13,rax
+ mov rax,QWORD PTR[24+rbx]
+ sbb rbp,rdx
+
+ add r13,r10
+ adc r8,rbp
+ adc r9,0
+
+
+ mov rcx,rax
+ mul QWORD PTR[rsi]
+ add r11,rax
+ mov rax,rcx
+ adc rdx,0
+ mov rbp,rdx
+
+ mul QWORD PTR[8+rsi]
+ add r12,rbp
+ adc rdx,0
+ add r12,rax
+ mov rax,rcx
+ adc rdx,0
+ mov rbp,rdx
+
+ mul QWORD PTR[16+rsi]
+ add r13,rbp
+ adc rdx,0
+ add r13,rax
+ mov rax,rcx
+ adc rdx,0
+
+ mov rcx,r11
+ imul r11,r15
+
+ mov rbp,rdx
+ mul QWORD PTR[24+rsi]
+ add r8,rbp
+ adc rdx,0
+ xor r10,r10
+ add r8,rax
+ mov rax,r11
+ adc r9,rdx
+ adc r10,0
+
+
+ mul QWORD PTR[r14]
+ mov rbp,r11
+ add rcx,rax
+ mov rax,r11
+ adc rcx,rdx
+
+ sub r13,r11
+ sbb r11,0
+
+ mul QWORD PTR[8+r14]
+ add r12,rcx
+ adc rdx,0
+ add r12,rax
+ mov rax,rbp
+ adc r13,rdx
+ mov rdx,rbp
+ adc r11,0
+
+ shl rax,32
+ shr rdx,32
+ sub r8,rax
+ sbb rbp,rdx
+
+ add r8,r11
+ adc r9,rbp
+ adc r10,0
+
+
+ mov rsi,r12
+ sub r12,QWORD PTR[r14]
+ mov r11,r13
+ sbb r13,QWORD PTR[8+r14]
+ mov rcx,r8
+ sbb r8,QWORD PTR[16+r14]
+ mov rbp,r9
+ sbb r9,QWORD PTR[24+r14]
+ sbb r10,0
+
+ cmovc r12,rsi
+ cmovc r13,r11
+ cmovc r8,rcx
+ cmovc r9,rbp
+
+ mov QWORD PTR[rdi],r12
+ mov QWORD PTR[8+rdi],r13
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbx,QWORD PTR[32+rsp]
+
+ mov rbp,QWORD PTR[40+rsp]
+
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$ord_mul_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_ord_mul_mont::
+ecp_nistz256_ord_mul_mont ENDP
+
+
+
+
+
+
+
+PUBLIC ecp_nistz256_ord_sqr_mont
+
+ALIGN 32
+ecp_nistz256_ord_sqr_mont PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_ord_sqr_mont::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ mov ecx,080100h
+ and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ cmp ecx,080100h
+ je $L$ecp_nistz256_ord_sqr_montx
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$ord_sqr_body::
+
+ mov r8,QWORD PTR[rsi]
+ mov rax,QWORD PTR[8+rsi]
+ mov r14,QWORD PTR[16+rsi]
+ mov r15,QWORD PTR[24+rsi]
+ lea rsi,QWORD PTR[$L$ord]
+ mov rbx,rdx
+ jmp $L$oop_ord_sqr
+
+ALIGN 32
+$L$oop_ord_sqr::
+
+ mov rbp,rax
+ mul r8
+ mov r9,rax
+DB 102,72,15,110,205
+ mov rax,r14
+ mov r10,rdx
+
+ mul r8
+ add r10,rax
+ mov rax,r15
+DB 102,73,15,110,214
+ adc rdx,0
+ mov r11,rdx
+
+ mul r8
+ add r11,rax
+ mov rax,r15
+DB 102,73,15,110,223
+ adc rdx,0
+ mov r12,rdx
+
+
+ mul r14
+ mov r13,rax
+ mov rax,r14
+ mov r14,rdx
+
+
+ mul rbp
+ add r11,rax
+ mov rax,r15
+ adc rdx,0
+ mov r15,rdx
+
+ mul rbp
+ add r12,rax
+ adc rdx,0
+
+ add r12,r15
+ adc r13,rdx
+ adc r14,0
+
+
+ xor r15,r15
+ mov rax,r8
+ add r9,r9
+ adc r10,r10
+ adc r11,r11
+ adc r12,r12
+ adc r13,r13
+ adc r14,r14
+ adc r15,0
+
+
+ mul rax
+ mov r8,rax
+DB 102,72,15,126,200
+ mov rbp,rdx
+
+ mul rax
+ add r9,rbp
+ adc r10,rax
+DB 102,72,15,126,208
+ adc rdx,0
+ mov rbp,rdx
+
+ mul rax
+ add r11,rbp
+ adc r12,rax
+DB 102,72,15,126,216
+ adc rdx,0
+ mov rbp,rdx
+
+ mov rcx,r8
+ imul r8,QWORD PTR[32+rsi]
+
+ mul rax
+ add r13,rbp
+ adc r14,rax
+ mov rax,QWORD PTR[rsi]
+ adc r15,rdx
+
+
+ mul r8
+ mov rbp,r8
+ add rcx,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rcx,rdx
+
+ sub r10,r8
+ sbb rbp,0
+
+ mul r8
+ add r9,rcx
+ adc rdx,0
+ add r9,rax
+ mov rax,r8
+ adc r10,rdx
+ mov rdx,r8
+ adc rbp,0
+
+ mov rcx,r9
+ imul r9,QWORD PTR[32+rsi]
+
+ shl rax,32
+ shr rdx,32
+ sub r11,rax
+ mov rax,QWORD PTR[rsi]
+ sbb r8,rdx
+
+ add r11,rbp
+ adc r8,0
+
+
+ mul r9
+ mov rbp,r9
+ add rcx,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rcx,rdx
+
+ sub r11,r9
+ sbb rbp,0
+
+ mul r9
+ add r10,rcx
+ adc rdx,0
+ add r10,rax
+ mov rax,r9
+ adc r11,rdx
+ mov rdx,r9
+ adc rbp,0
+
+ mov rcx,r10
+ imul r10,QWORD PTR[32+rsi]
+
+ shl rax,32
+ shr rdx,32
+ sub r8,rax
+ mov rax,QWORD PTR[rsi]
+ sbb r9,rdx
+
+ add r8,rbp
+ adc r9,0
+
+
+ mul r10
+ mov rbp,r10
+ add rcx,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rcx,rdx
+
+ sub r8,r10
+ sbb rbp,0
+
+ mul r10
+ add r11,rcx
+ adc rdx,0
+ add r11,rax
+ mov rax,r10
+ adc r8,rdx
+ mov rdx,r10
+ adc rbp,0
+
+ mov rcx,r11
+ imul r11,QWORD PTR[32+rsi]
+
+ shl rax,32
+ shr rdx,32
+ sub r9,rax
+ mov rax,QWORD PTR[rsi]
+ sbb r10,rdx
+
+ add r9,rbp
+ adc r10,0
+
+
+ mul r11
+ mov rbp,r11
+ add rcx,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rcx,rdx
+
+ sub r9,r11
+ sbb rbp,0
+
+ mul r11
+ add r8,rcx
+ adc rdx,0
+ add r8,rax
+ mov rax,r11
+ adc r9,rdx
+ mov rdx,r11
+ adc rbp,0
+
+ shl rax,32
+ shr rdx,32
+ sub r10,rax
+ sbb r11,rdx
+
+ add r10,rbp
+ adc r11,0
+
+
+ xor rdx,rdx
+ add r8,r12
+ adc r9,r13
+ mov r12,r8
+ adc r10,r14
+ adc r11,r15
+ mov rax,r9
+ adc rdx,0
+
+
+ sub r8,QWORD PTR[rsi]
+ mov r14,r10
+ sbb r9,QWORD PTR[8+rsi]
+ sbb r10,QWORD PTR[16+rsi]
+ mov r15,r11
+ sbb r11,QWORD PTR[24+rsi]
+ sbb rdx,0
+
+ cmovc r8,r12
+ cmovnc rax,r9
+ cmovnc r14,r10
+ cmovnc r15,r11
+
+ dec rbx
+ jnz $L$oop_ord_sqr
+
+ mov QWORD PTR[rdi],r8
+ mov QWORD PTR[8+rdi],rax
+ pxor xmm1,xmm1
+ mov QWORD PTR[16+rdi],r14
+ pxor xmm2,xmm2
+ mov QWORD PTR[24+rdi],r15
+ pxor xmm3,xmm3
+
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbx,QWORD PTR[32+rsp]
+
+ mov rbp,QWORD PTR[40+rsp]
+
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$ord_sqr_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_ord_sqr_mont::
+ecp_nistz256_ord_sqr_mont ENDP
+
+
+ALIGN 32
+ecp_nistz256_ord_mul_montx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_ord_mul_montx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$ecp_nistz256_ord_mul_montx::
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$ord_mulx_body::
+
+ mov rbx,rdx
+ mov rdx,QWORD PTR[rdx]
+ mov r9,QWORD PTR[rsi]
+ mov r10,QWORD PTR[8+rsi]
+ mov r11,QWORD PTR[16+rsi]
+ mov r12,QWORD PTR[24+rsi]
+ lea rsi,QWORD PTR[((-128))+rsi]
+ lea r14,QWORD PTR[(($L$ord-128))]
+ mov r15,QWORD PTR[$L$ordK]
+
+
+ mulx r9,r8,r9
+ mulx r10,rcx,r10
+ mulx r11,rbp,r11
+ add r9,rcx
+ mulx r12,rcx,r12
+ mov rdx,r8
+ mulx rax,rdx,r15
+ adc r10,rbp
+ adc r11,rcx
+ adc r12,0
+
+
+ xor r13,r13
+ mulx rbp,rcx,QWORD PTR[((0+128))+r14]
+ adcx r8,rcx
+ adox r9,rbp
+
+ mulx rbp,rcx,QWORD PTR[((8+128))+r14]
+ adcx r9,rcx
+ adox r10,rbp
+
+ mulx rbp,rcx,QWORD PTR[((16+128))+r14]
+ adcx r10,rcx
+ adox r11,rbp
+
+ mulx rbp,rcx,QWORD PTR[((24+128))+r14]
+ mov rdx,QWORD PTR[8+rbx]
+ adcx r11,rcx
+ adox r12,rbp
+ adcx r12,r8
+ adox r13,r8
+ adc r13,0
+
+
+ mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
+ adcx r9,rcx
+ adox r10,rbp
+
+ mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
+ adcx r10,rcx
+ adox r11,rbp
+
+ mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
+ mov rdx,r9
+ mulx rax,rdx,r15
+ adcx r12,rcx
+ adox r13,rbp
+
+ adcx r13,r8
+ adox r8,r8
+ adc r8,0
+
+
+ mulx rbp,rcx,QWORD PTR[((0+128))+r14]
+ adcx r9,rcx
+ adox r10,rbp
+
+ mulx rbp,rcx,QWORD PTR[((8+128))+r14]
+ adcx r10,rcx
+ adox r11,rbp
+
+ mulx rbp,rcx,QWORD PTR[((16+128))+r14]
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,QWORD PTR[((24+128))+r14]
+ mov rdx,QWORD PTR[16+rbx]
+ adcx r12,rcx
+ adox r13,rbp
+ adcx r13,r9
+ adox r8,r9
+ adc r8,0
+
+
+ mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
+ adcx r10,rcx
+ adox r11,rbp
+
+ mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
+ adcx r12,rcx
+ adox r13,rbp
+
+ mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
+ mov rdx,r10
+ mulx rax,rdx,r15
+ adcx r13,rcx
+ adox r8,rbp
+
+ adcx r8,r9
+ adox r9,r9
+ adc r9,0
+
+
+ mulx rbp,rcx,QWORD PTR[((0+128))+r14]
+ adcx r10,rcx
+ adox r11,rbp
+
+ mulx rbp,rcx,QWORD PTR[((8+128))+r14]
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,QWORD PTR[((16+128))+r14]
+ adcx r12,rcx
+ adox r13,rbp
+
+ mulx rbp,rcx,QWORD PTR[((24+128))+r14]
+ mov rdx,QWORD PTR[24+rbx]
+ adcx r13,rcx
+ adox r8,rbp
+ adcx r8,r10
+ adox r9,r10
+ adc r9,0
+
+
+ mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
+ adcx r12,rcx
+ adox r13,rbp
+
+ mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
+ adcx r13,rcx
+ adox r8,rbp
+
+ mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
+ mov rdx,r11
+ mulx rax,rdx,r15
+ adcx r8,rcx
+ adox r9,rbp
+
+ adcx r9,r10
+ adox r10,r10
+ adc r10,0
+
+
+ mulx rbp,rcx,QWORD PTR[((0+128))+r14]
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,QWORD PTR[((8+128))+r14]
+ adcx r12,rcx
+ adox r13,rbp
+
+ mulx rbp,rcx,QWORD PTR[((16+128))+r14]
+ adcx r13,rcx
+ adox r8,rbp
+
+ mulx rbp,rcx,QWORD PTR[((24+128))+r14]
+ lea r14,QWORD PTR[128+r14]
+ mov rbx,r12
+ adcx r8,rcx
+ adox r9,rbp
+ mov rdx,r13
+ adcx r9,r11
+ adox r10,r11
+ adc r10,0
+
+
+
+ mov rcx,r8
+ sub r12,QWORD PTR[r14]
+ sbb r13,QWORD PTR[8+r14]
+ sbb r8,QWORD PTR[16+r14]
+ mov rbp,r9
+ sbb r9,QWORD PTR[24+r14]
+ sbb r10,0
+
+ cmovc r12,rbx
+ cmovc r13,rdx
+ cmovc r8,rcx
+ cmovc r9,rbp
+
+ mov QWORD PTR[rdi],r12
+ mov QWORD PTR[8+rdi],r13
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbx,QWORD PTR[32+rsp]
+
+ mov rbp,QWORD PTR[40+rsp]
+
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$ord_mulx_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_ord_mul_montx::
+ecp_nistz256_ord_mul_montx ENDP
+
+
+ALIGN 32
+ecp_nistz256_ord_sqr_montx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_ord_sqr_montx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$ecp_nistz256_ord_sqr_montx::
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$ord_sqrx_body::
+
+ mov rbx,rdx
+ mov rdx,QWORD PTR[rsi]
+ mov r14,QWORD PTR[8+rsi]
+ mov r15,QWORD PTR[16+rsi]
+ mov r8,QWORD PTR[24+rsi]
+ lea rsi,QWORD PTR[$L$ord]
+ jmp $L$oop_ord_sqrx
+
+ALIGN 32
+$L$oop_ord_sqrx::
+ mulx r10,r9,r14
+ mulx r11,rcx,r15
+ mov rax,rdx
+DB 102,73,15,110,206
+ mulx r12,rbp,r8
+ mov rdx,r14
+ add r10,rcx
+DB 102,73,15,110,215
+ adc r11,rbp
+ adc r12,0
+ xor r13,r13
+
+ mulx rbp,rcx,r15
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,r8
+ mov rdx,r15
+ adcx r12,rcx
+ adox r13,rbp
+ adc r13,0
+
+ mulx r14,rcx,r8
+ mov rdx,rax
+DB 102,73,15,110,216
+ xor r15,r15
+ adcx r9,r9
+ adox r13,rcx
+ adcx r10,r10
+ adox r14,r15
+
+
+ mulx rbp,r8,rdx
+DB 102,72,15,126,202
+ adcx r11,r11
+ adox r9,rbp
+ adcx r12,r12
+ mulx rax,rcx,rdx
+DB 102,72,15,126,210
+ adcx r13,r13
+ adox r10,rcx
+ adcx r14,r14
+ mulx rbp,rcx,rdx
+DB 067h
+DB 102,72,15,126,218
+ adox r11,rax
+ adcx r15,r15
+ adox r12,rcx
+ adox r13,rbp
+ mulx rax,rcx,rdx
+ adox r14,rcx
+ adox r15,rax
+
+
+ mov rdx,r8
+ mulx rcx,rdx,QWORD PTR[32+rsi]
+
+ xor rax,rax
+ mulx rbp,rcx,QWORD PTR[rsi]
+ adcx r8,rcx
+ adox r9,rbp
+ mulx rbp,rcx,QWORD PTR[8+rsi]
+ adcx r9,rcx
+ adox r10,rbp
+ mulx rbp,rcx,QWORD PTR[16+rsi]
+ adcx r10,rcx
+ adox r11,rbp
+ mulx rbp,rcx,QWORD PTR[24+rsi]
+ adcx r11,rcx
+ adox r8,rbp
+ adcx r8,rax
+
+
+ mov rdx,r9
+ mulx rcx,rdx,QWORD PTR[32+rsi]
+
+ mulx rbp,rcx,QWORD PTR[rsi]
+ adox r9,rcx
+ adcx r10,rbp
+ mulx rbp,rcx,QWORD PTR[8+rsi]
+ adox r10,rcx
+ adcx r11,rbp
+ mulx rbp,rcx,QWORD PTR[16+rsi]
+ adox r11,rcx
+ adcx r8,rbp
+ mulx rbp,rcx,QWORD PTR[24+rsi]
+ adox r8,rcx
+ adcx r9,rbp
+ adox r9,rax
+
+
+ mov rdx,r10
+ mulx rcx,rdx,QWORD PTR[32+rsi]
+
+ mulx rbp,rcx,QWORD PTR[rsi]
+ adcx r10,rcx
+ adox r11,rbp
+ mulx rbp,rcx,QWORD PTR[8+rsi]
+ adcx r11,rcx
+ adox r8,rbp
+ mulx rbp,rcx,QWORD PTR[16+rsi]
+ adcx r8,rcx
+ adox r9,rbp
+ mulx rbp,rcx,QWORD PTR[24+rsi]
+ adcx r9,rcx
+ adox r10,rbp
+ adcx r10,rax
+
+
+ mov rdx,r11
+ mulx rcx,rdx,QWORD PTR[32+rsi]
+
+ mulx rbp,rcx,QWORD PTR[rsi]
+ adox r11,rcx
+ adcx r8,rbp
+ mulx rbp,rcx,QWORD PTR[8+rsi]
+ adox r8,rcx
+ adcx r9,rbp
+ mulx rbp,rcx,QWORD PTR[16+rsi]
+ adox r9,rcx
+ adcx r10,rbp
+ mulx rbp,rcx,QWORD PTR[24+rsi]
+ adox r10,rcx
+ adcx r11,rbp
+ adox r11,rax
+
+
+ add r12,r8
+ adc r9,r13
+ mov rdx,r12
+ adc r10,r14
+ adc r11,r15
+ mov r14,r9
+ adc rax,0
+
+
+ sub r12,QWORD PTR[rsi]
+ mov r15,r10
+ sbb r9,QWORD PTR[8+rsi]
+ sbb r10,QWORD PTR[16+rsi]
+ mov r8,r11
+ sbb r11,QWORD PTR[24+rsi]
+ sbb rax,0
+
+ cmovnc rdx,r12
+ cmovnc r14,r9
+ cmovnc r15,r10
+ cmovnc r8,r11
+
+ dec rbx
+ jnz $L$oop_ord_sqrx
+
+ mov QWORD PTR[rdi],rdx
+ mov QWORD PTR[8+rdi],r14
+ pxor xmm1,xmm1
+ mov QWORD PTR[16+rdi],r15
+ pxor xmm2,xmm2
+ mov QWORD PTR[24+rdi],r8
+ pxor xmm3,xmm3
+
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbx,QWORD PTR[32+rsp]
+
+ mov rbp,QWORD PTR[40+rsp]
+
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$ord_sqrx_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_ord_sqr_montx::
+ecp_nistz256_ord_sqr_montx ENDP
+
+
+
+
+PUBLIC ecp_nistz256_to_mont
+
+ALIGN 32
+ecp_nistz256_to_mont PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_to_mont::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ mov ecx,080100h
+ and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ lea rdx,QWORD PTR[$L$RR]
+ jmp $L$mul_mont
+
+$L$SEH_end_ecp_nistz256_to_mont::
+ecp_nistz256_to_mont ENDP
+
+
+
+
+
+
+
+PUBLIC ecp_nistz256_mul_mont
+
+ALIGN 32
+ecp_nistz256_mul_mont PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_mul_mont::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ mov ecx,080100h
+ and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+$L$mul_mont::
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$mul_body::
+ cmp ecx,080100h
+ je $L$mul_montx
+ mov rbx,rdx
+ mov rax,QWORD PTR[rdx]
+ mov r9,QWORD PTR[rsi]
+ mov r10,QWORD PTR[8+rsi]
+ mov r11,QWORD PTR[16+rsi]
+ mov r12,QWORD PTR[24+rsi]
+
+ call __ecp_nistz256_mul_montq
+ jmp $L$mul_mont_done
+
+ALIGN 32
+$L$mul_montx::
+ mov rbx,rdx
+ mov rdx,QWORD PTR[rdx]
+ mov r9,QWORD PTR[rsi]
+ mov r10,QWORD PTR[8+rsi]
+ mov r11,QWORD PTR[16+rsi]
+ mov r12,QWORD PTR[24+rsi]
+ lea rsi,QWORD PTR[((-128))+rsi]
+
+ call __ecp_nistz256_mul_montx
+$L$mul_mont_done::
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbx,QWORD PTR[32+rsp]
+
+ mov rbp,QWORD PTR[40+rsp]
+
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$mul_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_mul_mont::
+ecp_nistz256_mul_mont ENDP
+
+
+ALIGN 32
+__ecp_nistz256_mul_montq PROC PRIVATE
+
+
+
+ mov rbp,rax
+ mul r9
+ mov r14,QWORD PTR[(($L$poly+8))]
+ mov r8,rax
+ mov rax,rbp
+ mov r9,rdx
+
+ mul r10
+ mov r15,QWORD PTR[(($L$poly+24))]
+ add r9,rax
+ mov rax,rbp
+ adc rdx,0
+ mov r10,rdx
+
+ mul r11
+ add r10,rax
+ mov rax,rbp
+ adc rdx,0
+ mov r11,rdx
+
+ mul r12
+ add r11,rax
+ mov rax,r8
+ adc rdx,0
+ xor r13,r13
+ mov r12,rdx
+
+
+
+
+
+
+
+
+
+
+ mov rbp,r8
+ shl r8,32
+ mul r15
+ shr rbp,32
+ add r9,r8
+ adc r10,rbp
+ adc r11,rax
+ mov rax,QWORD PTR[8+rbx]
+ adc r12,rdx
+ adc r13,0
+ xor r8,r8
+
+
+
+ mov rbp,rax
+ mul QWORD PTR[rsi]
+ add r9,rax
+ mov rax,rbp
+ adc rdx,0
+ mov rcx,rdx
+
+ mul QWORD PTR[8+rsi]
+ add r10,rcx
+ adc rdx,0
+ add r10,rax
+ mov rax,rbp
+ adc rdx,0
+ mov rcx,rdx
+
+ mul QWORD PTR[16+rsi]
+ add r11,rcx
+ adc rdx,0
+ add r11,rax
+ mov rax,rbp
+ adc rdx,0
+ mov rcx,rdx
+
+ mul QWORD PTR[24+rsi]
+ add r12,rcx
+ adc rdx,0
+ add r12,rax
+ mov rax,r9
+ adc r13,rdx
+ adc r8,0
+
+
+
+ mov rbp,r9
+ shl r9,32
+ mul r15
+ shr rbp,32
+ add r10,r9
+ adc r11,rbp
+ adc r12,rax
+ mov rax,QWORD PTR[16+rbx]
+ adc r13,rdx
+ adc r8,0
+ xor r9,r9
+
+
+
+ mov rbp,rax
+ mul QWORD PTR[rsi]
+ add r10,rax
+ mov rax,rbp
+ adc rdx,0
+ mov rcx,rdx
+
+ mul QWORD PTR[8+rsi]
+ add r11,rcx
+ adc rdx,0
+ add r11,rax
+ mov rax,rbp
+ adc rdx,0
+ mov rcx,rdx
+
+ mul QWORD PTR[16+rsi]
+ add r12,rcx
+ adc rdx,0
+ add r12,rax
+ mov rax,rbp
+ adc rdx,0
+ mov rcx,rdx
+
+ mul QWORD PTR[24+rsi]
+ add r13,rcx
+ adc rdx,0
+ add r13,rax
+ mov rax,r10
+ adc r8,rdx
+ adc r9,0
+
+
+
+ mov rbp,r10
+ shl r10,32
+ mul r15
+ shr rbp,32
+ add r11,r10
+ adc r12,rbp
+ adc r13,rax
+ mov rax,QWORD PTR[24+rbx]
+ adc r8,rdx
+ adc r9,0
+ xor r10,r10
+
+
+
+ mov rbp,rax
+ mul QWORD PTR[rsi]
+ add r11,rax
+ mov rax,rbp
+ adc rdx,0
+ mov rcx,rdx
+
+ mul QWORD PTR[8+rsi]
+ add r12,rcx
+ adc rdx,0
+ add r12,rax
+ mov rax,rbp
+ adc rdx,0
+ mov rcx,rdx
+
+ mul QWORD PTR[16+rsi]
+ add r13,rcx
+ adc rdx,0
+ add r13,rax
+ mov rax,rbp
+ adc rdx,0
+ mov rcx,rdx
+
+ mul QWORD PTR[24+rsi]
+ add r8,rcx
+ adc rdx,0
+ add r8,rax
+ mov rax,r11
+ adc r9,rdx
+ adc r10,0
+
+
+
+ mov rbp,r11
+ shl r11,32
+ mul r15
+ shr rbp,32
+ add r12,r11
+ adc r13,rbp
+ mov rcx,r12
+ adc r8,rax
+ adc r9,rdx
+ mov rbp,r13
+ adc r10,0
+
+
+
+ sub r12,-1
+ mov rbx,r8
+ sbb r13,r14
+ sbb r8,0
+ mov rdx,r9
+ sbb r9,r15
+ sbb r10,0
+
+ cmovc r12,rcx
+ cmovc r13,rbp
+ mov QWORD PTR[rdi],r12
+ cmovc r8,rbx
+ mov QWORD PTR[8+rdi],r13
+ cmovc r9,rdx
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_mul_montq ENDP
+
+
+
+
+
+
+
+
+PUBLIC ecp_nistz256_sqr_mont
+
+ALIGN 32
+ecp_nistz256_sqr_mont PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_sqr_mont::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ mov ecx,080100h
+ and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$sqr_body::
+ cmp ecx,080100h
+ je $L$sqr_montx
+ mov rax,QWORD PTR[rsi]
+ mov r14,QWORD PTR[8+rsi]
+ mov r15,QWORD PTR[16+rsi]
+ mov r8,QWORD PTR[24+rsi]
+
+ call __ecp_nistz256_sqr_montq
+ jmp $L$sqr_mont_done
+
+ALIGN 32
+$L$sqr_montx::
+ mov rdx,QWORD PTR[rsi]
+ mov r14,QWORD PTR[8+rsi]
+ mov r15,QWORD PTR[16+rsi]
+ mov r8,QWORD PTR[24+rsi]
+ lea rsi,QWORD PTR[((-128))+rsi]
+
+ call __ecp_nistz256_sqr_montx
+$L$sqr_mont_done::
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbx,QWORD PTR[32+rsp]
+
+ mov rbp,QWORD PTR[40+rsp]
+
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$sqr_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_sqr_mont::
+ecp_nistz256_sqr_mont ENDP
+
+
+ALIGN 32
+__ecp_nistz256_sqr_montq PROC PRIVATE
+
+ mov r13,rax
+ mul r14
+ mov r9,rax
+ mov rax,r15
+ mov r10,rdx
+
+ mul r13
+ add r10,rax
+ mov rax,r8
+ adc rdx,0
+ mov r11,rdx
+
+ mul r13
+ add r11,rax
+ mov rax,r15
+ adc rdx,0
+ mov r12,rdx
+
+
+ mul r14
+ add r11,rax
+ mov rax,r8
+ adc rdx,0
+ mov rbp,rdx
+
+ mul r14
+ add r12,rax
+ mov rax,r8
+ adc rdx,0
+ add r12,rbp
+ mov r13,rdx
+ adc r13,0
+
+
+ mul r15
+ xor r15,r15
+ add r13,rax
+ mov rax,QWORD PTR[rsi]
+ mov r14,rdx
+ adc r14,0
+
+ add r9,r9
+ adc r10,r10
+ adc r11,r11
+ adc r12,r12
+ adc r13,r13
+ adc r14,r14
+ adc r15,0
+
+ mul rax
+ mov r8,rax
+ mov rax,QWORD PTR[8+rsi]
+ mov rcx,rdx
+
+ mul rax
+ add r9,rcx
+ adc r10,rax
+ mov rax,QWORD PTR[16+rsi]
+ adc rdx,0
+ mov rcx,rdx
+
+ mul rax
+ add r11,rcx
+ adc r12,rax
+ mov rax,QWORD PTR[24+rsi]
+ adc rdx,0
+ mov rcx,rdx
+
+ mul rax
+ add r13,rcx
+ adc r14,rax
+ mov rax,r8
+ adc r15,rdx
+
+ mov rsi,QWORD PTR[(($L$poly+8))]
+ mov rbp,QWORD PTR[(($L$poly+24))]
+
+
+
+
+ mov rcx,r8
+ shl r8,32
+ mul rbp
+ shr rcx,32
+ add r9,r8
+ adc r10,rcx
+ adc r11,rax
+ mov rax,r9
+ adc rdx,0
+
+
+
+ mov rcx,r9
+ shl r9,32
+ mov r8,rdx
+ mul rbp
+ shr rcx,32
+ add r10,r9
+ adc r11,rcx
+ adc r8,rax
+ mov rax,r10
+ adc rdx,0
+
+
+
+ mov rcx,r10
+ shl r10,32
+ mov r9,rdx
+ mul rbp
+ shr rcx,32
+ add r11,r10
+ adc r8,rcx
+ adc r9,rax
+ mov rax,r11
+ adc rdx,0
+
+
+
+ mov rcx,r11
+ shl r11,32
+ mov r10,rdx
+ mul rbp
+ shr rcx,32
+ add r8,r11
+ adc r9,rcx
+ adc r10,rax
+ adc rdx,0
+ xor r11,r11
+
+
+
+ add r12,r8
+ adc r13,r9
+ mov r8,r12
+ adc r14,r10
+ adc r15,rdx
+ mov r9,r13
+ adc r11,0
+
+ sub r12,-1
+ mov r10,r14
+ sbb r13,rsi
+ sbb r14,0
+ mov rcx,r15
+ sbb r15,rbp
+ sbb r11,0
+
+ cmovc r12,r8
+ cmovc r13,r9
+ mov QWORD PTR[rdi],r12
+ cmovc r14,r10
+ mov QWORD PTR[8+rdi],r13
+ cmovc r15,rcx
+ mov QWORD PTR[16+rdi],r14
+ mov QWORD PTR[24+rdi],r15
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_sqr_montq ENDP
+
+ALIGN 32
+__ecp_nistz256_mul_montx PROC PRIVATE
+
+
+
+ mulx r9,r8,r9
+ mulx r10,rcx,r10
+ mov r14,32
+ xor r13,r13
+ mulx r11,rbp,r11
+ mov r15,QWORD PTR[(($L$poly+24))]
+ adc r9,rcx
+ mulx r12,rcx,r12
+ mov rdx,r8
+ adc r10,rbp
+ shlx rbp,r8,r14
+ adc r11,rcx
+ shrx rcx,r8,r14
+ adc r12,0
+
+
+
+ add r9,rbp
+ adc r10,rcx
+
+ mulx rbp,rcx,r15
+ mov rdx,QWORD PTR[8+rbx]
+ adc r11,rcx
+ adc r12,rbp
+ adc r13,0
+ xor r8,r8
+
+
+
+ mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
+ adcx r9,rcx
+ adox r10,rbp
+
+ mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
+ adcx r10,rcx
+ adox r11,rbp
+
+ mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
+ mov rdx,r9
+ adcx r12,rcx
+ shlx rcx,r9,r14
+ adox r13,rbp
+ shrx rbp,r9,r14
+
+ adcx r13,r8
+ adox r8,r8
+ adc r8,0
+
+
+
+ add r10,rcx
+ adc r11,rbp
+
+ mulx rbp,rcx,r15
+ mov rdx,QWORD PTR[16+rbx]
+ adc r12,rcx
+ adc r13,rbp
+ adc r8,0
+ xor r9,r9
+
+
+
+ mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
+ adcx r10,rcx
+ adox r11,rbp
+
+ mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
+ adcx r12,rcx
+ adox r13,rbp
+
+ mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
+ mov rdx,r10
+ adcx r13,rcx
+ shlx rcx,r10,r14
+ adox r8,rbp
+ shrx rbp,r10,r14
+
+ adcx r8,r9
+ adox r9,r9
+ adc r9,0
+
+
+
+ add r11,rcx
+ adc r12,rbp
+
+ mulx rbp,rcx,r15
+ mov rdx,QWORD PTR[24+rbx]
+ adc r13,rcx
+ adc r8,rbp
+ adc r9,0
+ xor r10,r10
+
+
+
+ mulx rbp,rcx,QWORD PTR[((0+128))+rsi]
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,QWORD PTR[((8+128))+rsi]
+ adcx r12,rcx
+ adox r13,rbp
+
+ mulx rbp,rcx,QWORD PTR[((16+128))+rsi]
+ adcx r13,rcx
+ adox r8,rbp
+
+ mulx rbp,rcx,QWORD PTR[((24+128))+rsi]
+ mov rdx,r11
+ adcx r8,rcx
+ shlx rcx,r11,r14
+ adox r9,rbp
+ shrx rbp,r11,r14
+
+ adcx r9,r10
+ adox r10,r10
+ adc r10,0
+
+
+
+ add r12,rcx
+ adc r13,rbp
+
+ mulx rbp,rcx,r15
+ mov rbx,r12
+ mov r14,QWORD PTR[(($L$poly+8))]
+ adc r8,rcx
+ mov rdx,r13
+ adc r9,rbp
+ adc r10,0
+
+
+
+ xor eax,eax
+ mov rcx,r8
+ sbb r12,-1
+ sbb r13,r14
+ sbb r8,0
+ mov rbp,r9
+ sbb r9,r15
+ sbb r10,0
+
+ cmovc r12,rbx
+ cmovc r13,rdx
+ mov QWORD PTR[rdi],r12
+ cmovc r8,rcx
+ mov QWORD PTR[8+rdi],r13
+ cmovc r9,rbp
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_mul_montx ENDP
+
+
+ALIGN 32
+__ecp_nistz256_sqr_montx PROC PRIVATE
+
+ mulx r10,r9,r14
+ mulx r11,rcx,r15
+ xor eax,eax
+ adc r10,rcx
+ mulx r12,rbp,r8
+ mov rdx,r14
+ adc r11,rbp
+ adc r12,0
+ xor r13,r13
+
+
+ mulx rbp,rcx,r15
+ adcx r11,rcx
+ adox r12,rbp
+
+ mulx rbp,rcx,r8
+ mov rdx,r15
+ adcx r12,rcx
+ adox r13,rbp
+ adc r13,0
+
+
+ mulx r14,rcx,r8
+ mov rdx,QWORD PTR[((0+128))+rsi]
+ xor r15,r15
+ adcx r9,r9
+ adox r13,rcx
+ adcx r10,r10
+ adox r14,r15
+
+ mulx rbp,r8,rdx
+ mov rdx,QWORD PTR[((8+128))+rsi]
+ adcx r11,r11
+ adox r9,rbp
+ adcx r12,r12
+ mulx rax,rcx,rdx
+ mov rdx,QWORD PTR[((16+128))+rsi]
+ adcx r13,r13
+ adox r10,rcx
+ adcx r14,r14
+DB 067h
+ mulx rbp,rcx,rdx
+ mov rdx,QWORD PTR[((24+128))+rsi]
+ adox r11,rax
+ adcx r15,r15
+ adox r12,rcx
+ mov rsi,32
+ adox r13,rbp
+DB 067h,067h
+ mulx rax,rcx,rdx
+ mov rdx,QWORD PTR[(($L$poly+24))]
+ adox r14,rcx
+ shlx rcx,r8,rsi
+ adox r15,rax
+ shrx rax,r8,rsi
+ mov rbp,rdx
+
+
+ add r9,rcx
+ adc r10,rax
+
+ mulx r8,rcx,r8
+ adc r11,rcx
+ shlx rcx,r9,rsi
+ adc r8,0
+ shrx rax,r9,rsi
+
+
+ add r10,rcx
+ adc r11,rax
+
+ mulx r9,rcx,r9
+ adc r8,rcx
+ shlx rcx,r10,rsi
+ adc r9,0
+ shrx rax,r10,rsi
+
+
+ add r11,rcx
+ adc r8,rax
+
+ mulx r10,rcx,r10
+ adc r9,rcx
+ shlx rcx,r11,rsi
+ adc r10,0
+ shrx rax,r11,rsi
+
+
+ add r8,rcx
+ adc r9,rax
+
+ mulx r11,rcx,r11
+ adc r10,rcx
+ adc r11,0
+
+ xor rdx,rdx
+ add r12,r8
+ mov rsi,QWORD PTR[(($L$poly+8))]
+ adc r13,r9
+ mov r8,r12
+ adc r14,r10
+ adc r15,r11
+ mov r9,r13
+ adc rdx,0
+
+ sub r12,-1
+ mov r10,r14
+ sbb r13,rsi
+ sbb r14,0
+ mov r11,r15
+ sbb r15,rbp
+ sbb rdx,0
+
+ cmovc r12,r8
+ cmovc r13,r9
+ mov QWORD PTR[rdi],r12
+ cmovc r14,r10
+ mov QWORD PTR[8+rdi],r13
+ cmovc r15,r11
+ mov QWORD PTR[16+rdi],r14
+ mov QWORD PTR[24+rdi],r15
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_sqr_montx ENDP
+
+
+
+
+
+
+PUBLIC ecp_nistz256_from_mont
+
+ALIGN 32
+ecp_nistz256_from_mont PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_from_mont::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ push r12
+
+ push r13
+
+$L$from_body::
+
+ mov rax,QWORD PTR[rsi]
+ mov r13,QWORD PTR[(($L$poly+24))]
+ mov r9,QWORD PTR[8+rsi]
+ mov r10,QWORD PTR[16+rsi]
+ mov r11,QWORD PTR[24+rsi]
+ mov r8,rax
+ mov r12,QWORD PTR[(($L$poly+8))]
+
+
+
+ mov rcx,rax
+ shl r8,32
+ mul r13
+ shr rcx,32
+ add r9,r8
+ adc r10,rcx
+ adc r11,rax
+ mov rax,r9
+ adc rdx,0
+
+
+
+ mov rcx,r9
+ shl r9,32
+ mov r8,rdx
+ mul r13
+ shr rcx,32
+ add r10,r9
+ adc r11,rcx
+ adc r8,rax
+ mov rax,r10
+ adc rdx,0
+
+
+
+ mov rcx,r10
+ shl r10,32
+ mov r9,rdx
+ mul r13
+ shr rcx,32
+ add r11,r10
+ adc r8,rcx
+ adc r9,rax
+ mov rax,r11
+ adc rdx,0
+
+
+
+ mov rcx,r11
+ shl r11,32
+ mov r10,rdx
+ mul r13
+ shr rcx,32
+ add r8,r11
+ adc r9,rcx
+ mov rcx,r8
+ adc r10,rax
+ mov rsi,r9
+ adc rdx,0
+
+
+
+ sub r8,-1
+ mov rax,r10
+ sbb r9,r12
+ sbb r10,0
+ mov r11,rdx
+ sbb rdx,r13
+ sbb r13,r13
+
+ cmovnz r8,rcx
+ cmovnz r9,rsi
+ mov QWORD PTR[rdi],r8
+ cmovnz r10,rax
+ mov QWORD PTR[8+rdi],r9
+ cmovz r11,rdx
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+
+ mov r13,QWORD PTR[rsp]
+
+ mov r12,QWORD PTR[8+rsp]
+
+ lea rsp,QWORD PTR[16+rsp]
+
+$L$from_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_from_mont::
+ecp_nistz256_from_mont ENDP
+
+
+PUBLIC ecp_nistz256_scatter_w5
+
+ALIGN 32
+ecp_nistz256_scatter_w5 PROC PUBLIC
+
+ lea r8d,DWORD PTR[((-3))+r8*2+r8]
+ movdqa xmm0,XMMWORD PTR[rdx]
+ shl r8d,5
+ movdqa xmm1,XMMWORD PTR[16+rdx]
+ movdqa xmm2,XMMWORD PTR[32+rdx]
+ movdqa xmm3,XMMWORD PTR[48+rdx]
+ movdqa xmm4,XMMWORD PTR[64+rdx]
+ movdqa xmm5,XMMWORD PTR[80+rdx]
+ movdqa XMMWORD PTR[r8*1+rcx],xmm0
+ movdqa XMMWORD PTR[16+r8*1+rcx],xmm1
+ movdqa XMMWORD PTR[32+r8*1+rcx],xmm2
+ movdqa XMMWORD PTR[48+r8*1+rcx],xmm3
+ movdqa XMMWORD PTR[64+r8*1+rcx],xmm4
+ movdqa XMMWORD PTR[80+r8*1+rcx],xmm5
+
+ DB 0F3h,0C3h ;repret
+
+ecp_nistz256_scatter_w5 ENDP
+
+
+
+PUBLIC ecp_nistz256_gather_w5
+
+ALIGN 32
+ecp_nistz256_gather_w5 PROC PUBLIC
+
+ mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ test eax,32
+ jnz $L$avx2_gather_w5
+ lea rax,QWORD PTR[((-136))+rsp]
+$L$SEH_begin_ecp_nistz256_gather_w5::
+DB 048h,08dh,060h,0e0h
+DB 00fh,029h,070h,0e0h
+DB 00fh,029h,078h,0f0h
+DB 044h,00fh,029h,000h
+DB 044h,00fh,029h,048h,010h
+DB 044h,00fh,029h,050h,020h
+DB 044h,00fh,029h,058h,030h
+DB 044h,00fh,029h,060h,040h
+DB 044h,00fh,029h,068h,050h
+DB 044h,00fh,029h,070h,060h
+DB 044h,00fh,029h,078h,070h
+ movdqa xmm0,XMMWORD PTR[$L$One]
+ movd xmm1,r8d
+
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ pxor xmm6,xmm6
+ pxor xmm7,xmm7
+
+ movdqa xmm8,xmm0
+ pshufd xmm1,xmm1,0
+
+ mov rax,16
+$L$select_loop_sse_w5::
+
+ movdqa xmm15,xmm8
+ paddd xmm8,xmm0
+ pcmpeqd xmm15,xmm1
+
+ movdqa xmm9,XMMWORD PTR[rdx]
+ movdqa xmm10,XMMWORD PTR[16+rdx]
+ movdqa xmm11,XMMWORD PTR[32+rdx]
+ movdqa xmm12,XMMWORD PTR[48+rdx]
+ movdqa xmm13,XMMWORD PTR[64+rdx]
+ movdqa xmm14,XMMWORD PTR[80+rdx]
+ lea rdx,QWORD PTR[96+rdx]
+
+ pand xmm9,xmm15
+ pand xmm10,xmm15
+ por xmm2,xmm9
+ pand xmm11,xmm15
+ por xmm3,xmm10
+ pand xmm12,xmm15
+ por xmm4,xmm11
+ pand xmm13,xmm15
+ por xmm5,xmm12
+ pand xmm14,xmm15
+ por xmm6,xmm13
+ por xmm7,xmm14
+
+ dec rax
+ jnz $L$select_loop_sse_w5
+
+ movdqu XMMWORD PTR[rcx],xmm2
+ movdqu XMMWORD PTR[16+rcx],xmm3
+ movdqu XMMWORD PTR[32+rcx],xmm4
+ movdqu XMMWORD PTR[48+rcx],xmm5
+ movdqu XMMWORD PTR[64+rcx],xmm6
+ movdqu XMMWORD PTR[80+rcx],xmm7
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps xmm10,XMMWORD PTR[64+rsp]
+ movaps xmm11,XMMWORD PTR[80+rsp]
+ movaps xmm12,XMMWORD PTR[96+rsp]
+ movaps xmm13,XMMWORD PTR[112+rsp]
+ movaps xmm14,XMMWORD PTR[128+rsp]
+ movaps xmm15,XMMWORD PTR[144+rsp]
+ lea rsp,QWORD PTR[168+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_gather_w5::
+ecp_nistz256_gather_w5 ENDP
+
+
+
+PUBLIC ecp_nistz256_scatter_w7
+
+ALIGN 32
+ecp_nistz256_scatter_w7 PROC PUBLIC
+
+ movdqu xmm0,XMMWORD PTR[rdx]
+ shl r8d,6
+ movdqu xmm1,XMMWORD PTR[16+rdx]
+ movdqu xmm2,XMMWORD PTR[32+rdx]
+ movdqu xmm3,XMMWORD PTR[48+rdx]
+ movdqa XMMWORD PTR[r8*1+rcx],xmm0
+ movdqa XMMWORD PTR[16+r8*1+rcx],xmm1
+ movdqa XMMWORD PTR[32+r8*1+rcx],xmm2
+ movdqa XMMWORD PTR[48+r8*1+rcx],xmm3
+
+ DB 0F3h,0C3h ;repret
+
+ecp_nistz256_scatter_w7 ENDP
+
+
+
+PUBLIC ecp_nistz256_gather_w7
+
+ALIGN 32
+ecp_nistz256_gather_w7 PROC PUBLIC
+
+ mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ test eax,32
+ jnz $L$avx2_gather_w7
+ lea rax,QWORD PTR[((-136))+rsp]
+$L$SEH_begin_ecp_nistz256_gather_w7::
+DB 048h,08dh,060h,0e0h
+DB 00fh,029h,070h,0e0h
+DB 00fh,029h,078h,0f0h
+DB 044h,00fh,029h,000h
+DB 044h,00fh,029h,048h,010h
+DB 044h,00fh,029h,050h,020h
+DB 044h,00fh,029h,058h,030h
+DB 044h,00fh,029h,060h,040h
+DB 044h,00fh,029h,068h,050h
+DB 044h,00fh,029h,070h,060h
+DB 044h,00fh,029h,078h,070h
+ movdqa xmm8,XMMWORD PTR[$L$One]
+ movd xmm1,r8d
+
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+
+ movdqa xmm0,xmm8
+ pshufd xmm1,xmm1,0
+ mov rax,64
+
+$L$select_loop_sse_w7::
+ movdqa xmm15,xmm8
+ paddd xmm8,xmm0
+ movdqa xmm9,XMMWORD PTR[rdx]
+ movdqa xmm10,XMMWORD PTR[16+rdx]
+ pcmpeqd xmm15,xmm1
+ movdqa xmm11,XMMWORD PTR[32+rdx]
+ movdqa xmm12,XMMWORD PTR[48+rdx]
+ lea rdx,QWORD PTR[64+rdx]
+
+ pand xmm9,xmm15
+ pand xmm10,xmm15
+ por xmm2,xmm9
+ pand xmm11,xmm15
+ por xmm3,xmm10
+ pand xmm12,xmm15
+ por xmm4,xmm11
+ prefetcht0 [255+rdx]
+ por xmm5,xmm12
+
+ dec rax
+ jnz $L$select_loop_sse_w7
+
+ movdqu XMMWORD PTR[rcx],xmm2
+ movdqu XMMWORD PTR[16+rcx],xmm3
+ movdqu XMMWORD PTR[32+rcx],xmm4
+ movdqu XMMWORD PTR[48+rcx],xmm5
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps xmm10,XMMWORD PTR[64+rsp]
+ movaps xmm11,XMMWORD PTR[80+rsp]
+ movaps xmm12,XMMWORD PTR[96+rsp]
+ movaps xmm13,XMMWORD PTR[112+rsp]
+ movaps xmm14,XMMWORD PTR[128+rsp]
+ movaps xmm15,XMMWORD PTR[144+rsp]
+ lea rsp,QWORD PTR[168+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_gather_w7::
+ecp_nistz256_gather_w7 ENDP
+
+
+
+ALIGN 32
+ecp_nistz256_avx2_gather_w5 PROC PRIVATE
+
+$L$avx2_gather_w5::
+ vzeroupper
+ lea rax,QWORD PTR[((-136))+rsp]
+ mov r11,rsp
+$L$SEH_begin_ecp_nistz256_avx2_gather_w5::
+DB 048h,08dh,060h,0e0h
+DB 0c5h,0f8h,029h,070h,0e0h
+DB 0c5h,0f8h,029h,078h,0f0h
+DB 0c5h,078h,029h,040h,000h
+DB 0c5h,078h,029h,048h,010h
+DB 0c5h,078h,029h,050h,020h
+DB 0c5h,078h,029h,058h,030h
+DB 0c5h,078h,029h,060h,040h
+DB 0c5h,078h,029h,068h,050h
+DB 0c5h,078h,029h,070h,060h
+DB 0c5h,078h,029h,078h,070h
+ vmovdqa ymm0,YMMWORD PTR[$L$Two]
+
+ vpxor ymm2,ymm2,ymm2
+ vpxor ymm3,ymm3,ymm3
+ vpxor ymm4,ymm4,ymm4
+
+ vmovdqa ymm5,YMMWORD PTR[$L$One]
+ vmovdqa ymm10,YMMWORD PTR[$L$Two]
+
+ vmovd xmm1,r8d
+ vpermd ymm1,ymm2,ymm1
+
+ mov rax,8
+$L$select_loop_avx2_w5::
+
+ vmovdqa ymm6,YMMWORD PTR[rdx]
+ vmovdqa ymm7,YMMWORD PTR[32+rdx]
+ vmovdqa ymm8,YMMWORD PTR[64+rdx]
+
+ vmovdqa ymm11,YMMWORD PTR[96+rdx]
+ vmovdqa ymm12,YMMWORD PTR[128+rdx]
+ vmovdqa ymm13,YMMWORD PTR[160+rdx]
+
+ vpcmpeqd ymm9,ymm5,ymm1
+ vpcmpeqd ymm14,ymm10,ymm1
+
+ vpaddd ymm5,ymm5,ymm0
+ vpaddd ymm10,ymm10,ymm0
+ lea rdx,QWORD PTR[192+rdx]
+
+ vpand ymm6,ymm6,ymm9
+ vpand ymm7,ymm7,ymm9
+ vpand ymm8,ymm8,ymm9
+ vpand ymm11,ymm11,ymm14
+ vpand ymm12,ymm12,ymm14
+ vpand ymm13,ymm13,ymm14
+
+ vpxor ymm2,ymm2,ymm6
+ vpxor ymm3,ymm3,ymm7
+ vpxor ymm4,ymm4,ymm8
+ vpxor ymm2,ymm2,ymm11
+ vpxor ymm3,ymm3,ymm12
+ vpxor ymm4,ymm4,ymm13
+
+ dec rax
+ jnz $L$select_loop_avx2_w5
+
+ vmovdqu YMMWORD PTR[rcx],ymm2
+ vmovdqu YMMWORD PTR[32+rcx],ymm3
+ vmovdqu YMMWORD PTR[64+rcx],ymm4
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps xmm10,XMMWORD PTR[64+rsp]
+ movaps xmm11,XMMWORD PTR[80+rsp]
+ movaps xmm12,XMMWORD PTR[96+rsp]
+ movaps xmm13,XMMWORD PTR[112+rsp]
+ movaps xmm14,XMMWORD PTR[128+rsp]
+ movaps xmm15,XMMWORD PTR[144+rsp]
+ lea rsp,QWORD PTR[r11]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_avx2_gather_w5::
+ecp_nistz256_avx2_gather_w5 ENDP
+
+
+
+PUBLIC ecp_nistz256_avx2_gather_w7
+
+ALIGN 32
+ecp_nistz256_avx2_gather_w7 PROC PUBLIC
+
+$L$avx2_gather_w7::
+ vzeroupper
+ mov r11,rsp
+ lea rax,QWORD PTR[((-136))+rsp]
+$L$SEH_begin_ecp_nistz256_avx2_gather_w7::
+DB 048h,08dh,060h,0e0h
+DB 0c5h,0f8h,029h,070h,0e0h
+DB 0c5h,0f8h,029h,078h,0f0h
+DB 0c5h,078h,029h,040h,000h
+DB 0c5h,078h,029h,048h,010h
+DB 0c5h,078h,029h,050h,020h
+DB 0c5h,078h,029h,058h,030h
+DB 0c5h,078h,029h,060h,040h
+DB 0c5h,078h,029h,068h,050h
+DB 0c5h,078h,029h,070h,060h
+DB 0c5h,078h,029h,078h,070h
+ vmovdqa ymm0,YMMWORD PTR[$L$Three]
+
+ vpxor ymm2,ymm2,ymm2
+ vpxor ymm3,ymm3,ymm3
+
+ vmovdqa ymm4,YMMWORD PTR[$L$One]
+ vmovdqa ymm8,YMMWORD PTR[$L$Two]
+ vmovdqa ymm12,YMMWORD PTR[$L$Three]
+
+ vmovd xmm1,r8d
+ vpermd ymm1,ymm2,ymm1
+
+
+ mov rax,21
+$L$select_loop_avx2_w7::
+
+ vmovdqa ymm5,YMMWORD PTR[rdx]
+ vmovdqa ymm6,YMMWORD PTR[32+rdx]
+
+ vmovdqa ymm9,YMMWORD PTR[64+rdx]
+ vmovdqa ymm10,YMMWORD PTR[96+rdx]
+
+ vmovdqa ymm13,YMMWORD PTR[128+rdx]
+ vmovdqa ymm14,YMMWORD PTR[160+rdx]
+
+ vpcmpeqd ymm7,ymm4,ymm1
+ vpcmpeqd ymm11,ymm8,ymm1
+ vpcmpeqd ymm15,ymm12,ymm1
+
+ vpaddd ymm4,ymm4,ymm0
+ vpaddd ymm8,ymm8,ymm0
+ vpaddd ymm12,ymm12,ymm0
+ lea rdx,QWORD PTR[192+rdx]
+
+ vpand ymm5,ymm5,ymm7
+ vpand ymm6,ymm6,ymm7
+ vpand ymm9,ymm9,ymm11
+ vpand ymm10,ymm10,ymm11
+ vpand ymm13,ymm13,ymm15
+ vpand ymm14,ymm14,ymm15
+
+ vpxor ymm2,ymm2,ymm5
+ vpxor ymm3,ymm3,ymm6
+ vpxor ymm2,ymm2,ymm9
+ vpxor ymm3,ymm3,ymm10
+ vpxor ymm2,ymm2,ymm13
+ vpxor ymm3,ymm3,ymm14
+
+ dec rax
+ jnz $L$select_loop_avx2_w7
+
+
+ vmovdqa ymm5,YMMWORD PTR[rdx]
+ vmovdqa ymm6,YMMWORD PTR[32+rdx]
+
+ vpcmpeqd ymm7,ymm4,ymm1
+
+ vpand ymm5,ymm5,ymm7
+ vpand ymm6,ymm6,ymm7
+
+ vpxor ymm2,ymm2,ymm5
+ vpxor ymm3,ymm3,ymm6
+
+ vmovdqu YMMWORD PTR[rcx],ymm2
+ vmovdqu YMMWORD PTR[32+rcx],ymm3
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps xmm10,XMMWORD PTR[64+rsp]
+ movaps xmm11,XMMWORD PTR[80+rsp]
+ movaps xmm12,XMMWORD PTR[96+rsp]
+ movaps xmm13,XMMWORD PTR[112+rsp]
+ movaps xmm14,XMMWORD PTR[128+rsp]
+ movaps xmm15,XMMWORD PTR[144+rsp]
+ lea rsp,QWORD PTR[r11]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_avx2_gather_w7::
+ecp_nistz256_avx2_gather_w7 ENDP
+
+ALIGN 32
+__ecp_nistz256_add_toq PROC PRIVATE
+
+ xor r11,r11
+ add r12,QWORD PTR[rbx]
+ adc r13,QWORD PTR[8+rbx]
+ mov rax,r12
+ adc r8,QWORD PTR[16+rbx]
+ adc r9,QWORD PTR[24+rbx]
+ mov rbp,r13
+ adc r11,0
+
+ sub r12,-1
+ mov rcx,r8
+ sbb r13,r14
+ sbb r8,0
+ mov r10,r9
+ sbb r9,r15
+ sbb r11,0
+
+ cmovc r12,rax
+ cmovc r13,rbp
+ mov QWORD PTR[rdi],r12
+ cmovc r8,rcx
+ mov QWORD PTR[8+rdi],r13
+ cmovc r9,r10
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_add_toq ENDP
+
+
+ALIGN 32
+__ecp_nistz256_sub_fromq PROC PRIVATE
+
+ sub r12,QWORD PTR[rbx]
+ sbb r13,QWORD PTR[8+rbx]
+ mov rax,r12
+ sbb r8,QWORD PTR[16+rbx]
+ sbb r9,QWORD PTR[24+rbx]
+ mov rbp,r13
+ sbb r11,r11
+
+ add r12,-1
+ mov rcx,r8
+ adc r13,r14
+ adc r8,0
+ mov r10,r9
+ adc r9,r15
+ test r11,r11
+
+ cmovz r12,rax
+ cmovz r13,rbp
+ mov QWORD PTR[rdi],r12
+ cmovz r8,rcx
+ mov QWORD PTR[8+rdi],r13
+ cmovz r9,r10
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_sub_fromq ENDP
+
+
+ALIGN 32
+__ecp_nistz256_subq PROC PRIVATE
+
+ sub rax,r12
+ sbb rbp,r13
+ mov r12,rax
+ sbb rcx,r8
+ sbb r10,r9
+ mov r13,rbp
+ sbb r11,r11
+
+ add rax,-1
+ mov r8,rcx
+ adc rbp,r14
+ adc rcx,0
+ mov r9,r10
+ adc r10,r15
+ test r11,r11
+
+ cmovnz r12,rax
+ cmovnz r13,rbp
+ cmovnz r8,rcx
+ cmovnz r9,r10
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_subq ENDP
+
+
+ALIGN 32
+__ecp_nistz256_mul_by_2q PROC PRIVATE
+
+ xor r11,r11
+ add r12,r12
+ adc r13,r13
+ mov rax,r12
+ adc r8,r8
+ adc r9,r9
+ mov rbp,r13
+ adc r11,0
+
+ sub r12,-1
+ mov rcx,r8
+ sbb r13,r14
+ sbb r8,0
+ mov r10,r9
+ sbb r9,r15
+ sbb r11,0
+
+ cmovc r12,rax
+ cmovc r13,rbp
+ mov QWORD PTR[rdi],r12
+ cmovc r8,rcx
+ mov QWORD PTR[8+rdi],r13
+ cmovc r9,r10
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_mul_by_2q ENDP
+PUBLIC ecp_nistz256_point_double
+
+ALIGN 32
+ecp_nistz256_point_double PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_point_double::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ mov ecx,080100h
+ and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ cmp ecx,080100h
+ je $L$point_doublex
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,32*5+8
+
+$L$point_doubleq_body::
+
+$L$point_double_shortcutq::
+ movdqu xmm0,XMMWORD PTR[rsi]
+ mov rbx,rsi
+ movdqu xmm1,XMMWORD PTR[16+rsi]
+ mov r12,QWORD PTR[((32+0))+rsi]
+ mov r13,QWORD PTR[((32+8))+rsi]
+ mov r8,QWORD PTR[((32+16))+rsi]
+ mov r9,QWORD PTR[((32+24))+rsi]
+ mov r14,QWORD PTR[(($L$poly+8))]
+ mov r15,QWORD PTR[(($L$poly+24))]
+ movdqa XMMWORD PTR[96+rsp],xmm0
+ movdqa XMMWORD PTR[(96+16)+rsp],xmm1
+ lea r10,QWORD PTR[32+rdi]
+ lea r11,QWORD PTR[64+rdi]
+DB 102,72,15,110,199
+DB 102,73,15,110,202
+DB 102,73,15,110,211
+
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_mul_by_2q
+
+ mov rax,QWORD PTR[((64+0))+rsi]
+ mov r14,QWORD PTR[((64+8))+rsi]
+ mov r15,QWORD PTR[((64+16))+rsi]
+ mov r8,QWORD PTR[((64+24))+rsi]
+ lea rsi,QWORD PTR[((64-0))+rsi]
+ lea rdi,QWORD PTR[64+rsp]
+ call __ecp_nistz256_sqr_montq
+
+ mov rax,QWORD PTR[((0+0))+rsp]
+ mov r14,QWORD PTR[((8+0))+rsp]
+ lea rsi,QWORD PTR[((0+0))+rsp]
+ mov r15,QWORD PTR[((16+0))+rsp]
+ mov r8,QWORD PTR[((24+0))+rsp]
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_sqr_montq
+
+ mov rax,QWORD PTR[32+rbx]
+ mov r9,QWORD PTR[((64+0))+rbx]
+ mov r10,QWORD PTR[((64+8))+rbx]
+ mov r11,QWORD PTR[((64+16))+rbx]
+ mov r12,QWORD PTR[((64+24))+rbx]
+ lea rsi,QWORD PTR[((64-0))+rbx]
+ lea rbx,QWORD PTR[32+rbx]
+DB 102,72,15,126,215
+ call __ecp_nistz256_mul_montq
+ call __ecp_nistz256_mul_by_2q
+
+ mov r12,QWORD PTR[((96+0))+rsp]
+ mov r13,QWORD PTR[((96+8))+rsp]
+ lea rbx,QWORD PTR[64+rsp]
+ mov r8,QWORD PTR[((96+16))+rsp]
+ mov r9,QWORD PTR[((96+24))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_add_toq
+
+ mov r12,QWORD PTR[((96+0))+rsp]
+ mov r13,QWORD PTR[((96+8))+rsp]
+ lea rbx,QWORD PTR[64+rsp]
+ mov r8,QWORD PTR[((96+16))+rsp]
+ mov r9,QWORD PTR[((96+24))+rsp]
+ lea rdi,QWORD PTR[64+rsp]
+ call __ecp_nistz256_sub_fromq
+
+ mov rax,QWORD PTR[((0+0))+rsp]
+ mov r14,QWORD PTR[((8+0))+rsp]
+ lea rsi,QWORD PTR[((0+0))+rsp]
+ mov r15,QWORD PTR[((16+0))+rsp]
+ mov r8,QWORD PTR[((24+0))+rsp]
+DB 102,72,15,126,207
+ call __ecp_nistz256_sqr_montq
+ xor r9,r9
+ mov rax,r12
+ add r12,-1
+ mov r10,r13
+ adc r13,rsi
+ mov rcx,r14
+ adc r14,0
+ mov r8,r15
+ adc r15,rbp
+ adc r9,0
+ xor rsi,rsi
+ test rax,1
+
+ cmovz r12,rax
+ cmovz r13,r10
+ cmovz r14,rcx
+ cmovz r15,r8
+ cmovz r9,rsi
+
+ mov rax,r13
+ shr r12,1
+ shl rax,63
+ mov r10,r14
+ shr r13,1
+ or r12,rax
+ shl r10,63
+ mov rcx,r15
+ shr r14,1
+ or r13,r10
+ shl rcx,63
+ mov QWORD PTR[rdi],r12
+ shr r15,1
+ mov QWORD PTR[8+rdi],r13
+ shl r9,63
+ or r14,rcx
+ or r15,r9
+ mov QWORD PTR[16+rdi],r14
+ mov QWORD PTR[24+rdi],r15
+ mov rax,QWORD PTR[64+rsp]
+ lea rbx,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((0+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_mul_montq
+
+ lea rdi,QWORD PTR[128+rsp]
+ call __ecp_nistz256_mul_by_2q
+
+ lea rbx,QWORD PTR[32+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_add_toq
+
+ mov rax,QWORD PTR[96+rsp]
+ lea rbx,QWORD PTR[96+rsp]
+ mov r9,QWORD PTR[((0+0))+rsp]
+ mov r10,QWORD PTR[((8+0))+rsp]
+ lea rsi,QWORD PTR[((0+0))+rsp]
+ mov r11,QWORD PTR[((16+0))+rsp]
+ mov r12,QWORD PTR[((24+0))+rsp]
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_mul_montq
+
+ lea rdi,QWORD PTR[128+rsp]
+ call __ecp_nistz256_mul_by_2q
+
+ mov rax,QWORD PTR[((0+32))+rsp]
+ mov r14,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((0+32))+rsp]
+ mov r15,QWORD PTR[((16+32))+rsp]
+ mov r8,QWORD PTR[((24+32))+rsp]
+DB 102,72,15,126,199
+ call __ecp_nistz256_sqr_montq
+
+ lea rbx,QWORD PTR[128+rsp]
+ mov r8,r14
+ mov r9,r15
+ mov r14,rsi
+ mov r15,rbp
+ call __ecp_nistz256_sub_fromq
+
+ mov rax,QWORD PTR[((0+0))+rsp]
+ mov rbp,QWORD PTR[((0+8))+rsp]
+ mov rcx,QWORD PTR[((0+16))+rsp]
+ mov r10,QWORD PTR[((0+24))+rsp]
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_subq
+
+ mov rax,QWORD PTR[32+rsp]
+ lea rbx,QWORD PTR[32+rsp]
+ mov r14,r12
+ xor ecx,ecx
+ mov QWORD PTR[((0+0))+rsp],r12
+ mov r10,r13
+ mov QWORD PTR[((0+8))+rsp],r13
+ cmovz r11,r8
+ mov QWORD PTR[((0+16))+rsp],r8
+ lea rsi,QWORD PTR[((0-0))+rsp]
+ cmovz r12,r9
+ mov QWORD PTR[((0+24))+rsp],r9
+ mov r9,r14
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_mul_montq
+
+DB 102,72,15,126,203
+DB 102,72,15,126,207
+ call __ecp_nistz256_sub_fromq
+
+ lea rsi,QWORD PTR[((160+56))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbx,QWORD PTR[((-16))+rsi]
+
+ mov rbp,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$point_doubleq_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_point_double::
+ecp_nistz256_point_double ENDP
+PUBLIC ecp_nistz256_point_add
+
+ALIGN 32
+ecp_nistz256_point_add PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_point_add::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ mov ecx,080100h
+ and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ cmp ecx,080100h
+ je $L$point_addx
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,32*18+8
+
+$L$point_addq_body::
+
+ movdqu xmm0,XMMWORD PTR[rsi]
+ movdqu xmm1,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ movdqu xmm3,XMMWORD PTR[48+rsi]
+ movdqu xmm4,XMMWORD PTR[64+rsi]
+ movdqu xmm5,XMMWORD PTR[80+rsi]
+ mov rbx,rsi
+ mov rsi,rdx
+ movdqa XMMWORD PTR[384+rsp],xmm0
+ movdqa XMMWORD PTR[(384+16)+rsp],xmm1
+ movdqa XMMWORD PTR[416+rsp],xmm2
+ movdqa XMMWORD PTR[(416+16)+rsp],xmm3
+ movdqa XMMWORD PTR[448+rsp],xmm4
+ movdqa XMMWORD PTR[(448+16)+rsp],xmm5
+ por xmm5,xmm4
+
+ movdqu xmm0,XMMWORD PTR[rsi]
+ pshufd xmm3,xmm5,0b1h
+ movdqu xmm1,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ por xmm5,xmm3
+ movdqu xmm3,XMMWORD PTR[48+rsi]
+ mov rax,QWORD PTR[((64+0))+rsi]
+ mov r14,QWORD PTR[((64+8))+rsi]
+ mov r15,QWORD PTR[((64+16))+rsi]
+ mov r8,QWORD PTR[((64+24))+rsi]
+ movdqa XMMWORD PTR[480+rsp],xmm0
+ pshufd xmm4,xmm5,01eh
+ movdqa XMMWORD PTR[(480+16)+rsp],xmm1
+ movdqu xmm0,XMMWORD PTR[64+rsi]
+ movdqu xmm1,XMMWORD PTR[80+rsi]
+ movdqa XMMWORD PTR[512+rsp],xmm2
+ movdqa XMMWORD PTR[(512+16)+rsp],xmm3
+ por xmm5,xmm4
+ pxor xmm4,xmm4
+ por xmm1,xmm0
+DB 102,72,15,110,199
+
+ lea rsi,QWORD PTR[((64-0))+rsi]
+ mov QWORD PTR[((544+0))+rsp],rax
+ mov QWORD PTR[((544+8))+rsp],r14
+ mov QWORD PTR[((544+16))+rsp],r15
+ mov QWORD PTR[((544+24))+rsp],r8
+ lea rdi,QWORD PTR[96+rsp]
+ call __ecp_nistz256_sqr_montq
+
+ pcmpeqd xmm5,xmm4
+ pshufd xmm4,xmm1,0b1h
+ por xmm4,xmm1
+ pshufd xmm5,xmm5,0
+ pshufd xmm3,xmm4,01eh
+ por xmm4,xmm3
+ pxor xmm3,xmm3
+ pcmpeqd xmm4,xmm3
+ pshufd xmm4,xmm4,0
+ mov rax,QWORD PTR[((64+0))+rbx]
+ mov r14,QWORD PTR[((64+8))+rbx]
+ mov r15,QWORD PTR[((64+16))+rbx]
+ mov r8,QWORD PTR[((64+24))+rbx]
+DB 102,72,15,110,203
+
+ lea rsi,QWORD PTR[((64-0))+rbx]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_sqr_montq
+
+ mov rax,QWORD PTR[544+rsp]
+ lea rbx,QWORD PTR[544+rsp]
+ mov r9,QWORD PTR[((0+96))+rsp]
+ mov r10,QWORD PTR[((8+96))+rsp]
+ lea rsi,QWORD PTR[((0+96))+rsp]
+ mov r11,QWORD PTR[((16+96))+rsp]
+ mov r12,QWORD PTR[((24+96))+rsp]
+ lea rdi,QWORD PTR[224+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[448+rsp]
+ lea rbx,QWORD PTR[448+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((0+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[256+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[416+rsp]
+ lea rbx,QWORD PTR[416+rsp]
+ mov r9,QWORD PTR[((0+224))+rsp]
+ mov r10,QWORD PTR[((8+224))+rsp]
+ lea rsi,QWORD PTR[((0+224))+rsp]
+ mov r11,QWORD PTR[((16+224))+rsp]
+ mov r12,QWORD PTR[((24+224))+rsp]
+ lea rdi,QWORD PTR[224+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[512+rsp]
+ lea rbx,QWORD PTR[512+rsp]
+ mov r9,QWORD PTR[((0+256))+rsp]
+ mov r10,QWORD PTR[((8+256))+rsp]
+ lea rsi,QWORD PTR[((0+256))+rsp]
+ mov r11,QWORD PTR[((16+256))+rsp]
+ mov r12,QWORD PTR[((24+256))+rsp]
+ lea rdi,QWORD PTR[256+rsp]
+ call __ecp_nistz256_mul_montq
+
+ lea rbx,QWORD PTR[224+rsp]
+ lea rdi,QWORD PTR[64+rsp]
+ call __ecp_nistz256_sub_fromq
+
+ or r12,r13
+ movdqa xmm2,xmm4
+ or r12,r8
+ or r12,r9
+ por xmm2,xmm5
+DB 102,73,15,110,220
+
+ mov rax,QWORD PTR[384+rsp]
+ lea rbx,QWORD PTR[384+rsp]
+ mov r9,QWORD PTR[((0+96))+rsp]
+ mov r10,QWORD PTR[((8+96))+rsp]
+ lea rsi,QWORD PTR[((0+96))+rsp]
+ mov r11,QWORD PTR[((16+96))+rsp]
+ mov r12,QWORD PTR[((24+96))+rsp]
+ lea rdi,QWORD PTR[160+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[480+rsp]
+ lea rbx,QWORD PTR[480+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((0+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[192+rsp]
+ call __ecp_nistz256_mul_montq
+
+ lea rbx,QWORD PTR[160+rsp]
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_sub_fromq
+
+ or r12,r13
+ or r12,r8
+ or r12,r9
+
+DB 102,73,15,126,208
+DB 102,73,15,126,217
+
+ or r12,r8
+ or r12,r9
+
+
+DB 03eh
+ jnz $L$add_proceedq
+
+$L$add_doubleq::
+DB 102,72,15,126,206
+DB 102,72,15,126,199
+ add rsp,416
+
+ jmp $L$point_double_shortcutq
+
+
+ALIGN 32
+$L$add_proceedq::
+ mov rax,QWORD PTR[((0+64))+rsp]
+ mov r14,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((0+64))+rsp]
+ mov r15,QWORD PTR[((16+64))+rsp]
+ mov r8,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[96+rsp]
+ call __ecp_nistz256_sqr_montq
+
+ mov rax,QWORD PTR[448+rsp]
+ lea rbx,QWORD PTR[448+rsp]
+ mov r9,QWORD PTR[((0+0))+rsp]
+ mov r10,QWORD PTR[((8+0))+rsp]
+ lea rsi,QWORD PTR[((0+0))+rsp]
+ mov r11,QWORD PTR[((16+0))+rsp]
+ mov r12,QWORD PTR[((24+0))+rsp]
+ lea rdi,QWORD PTR[352+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[((0+0))+rsp]
+ mov r14,QWORD PTR[((8+0))+rsp]
+ lea rsi,QWORD PTR[((0+0))+rsp]
+ mov r15,QWORD PTR[((16+0))+rsp]
+ mov r8,QWORD PTR[((24+0))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_sqr_montq
+
+ mov rax,QWORD PTR[544+rsp]
+ lea rbx,QWORD PTR[544+rsp]
+ mov r9,QWORD PTR[((0+352))+rsp]
+ mov r10,QWORD PTR[((8+352))+rsp]
+ lea rsi,QWORD PTR[((0+352))+rsp]
+ mov r11,QWORD PTR[((16+352))+rsp]
+ mov r12,QWORD PTR[((24+352))+rsp]
+ lea rdi,QWORD PTR[352+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[rsp]
+ lea rbx,QWORD PTR[rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((0+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[128+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[160+rsp]
+ lea rbx,QWORD PTR[160+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((0+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[192+rsp]
+ call __ecp_nistz256_mul_montq
+
+
+
+
+ xor r11,r11
+ add r12,r12
+ lea rsi,QWORD PTR[96+rsp]
+ adc r13,r13
+ mov rax,r12
+ adc r8,r8
+ adc r9,r9
+ mov rbp,r13
+ adc r11,0
+
+ sub r12,-1
+ mov rcx,r8
+ sbb r13,r14
+ sbb r8,0
+ mov r10,r9
+ sbb r9,r15
+ sbb r11,0
+
+ cmovc r12,rax
+ mov rax,QWORD PTR[rsi]
+ cmovc r13,rbp
+ mov rbp,QWORD PTR[8+rsi]
+ cmovc r8,rcx
+ mov rcx,QWORD PTR[16+rsi]
+ cmovc r9,r10
+ mov r10,QWORD PTR[24+rsi]
+
+ call __ecp_nistz256_subq
+
+ lea rbx,QWORD PTR[128+rsp]
+ lea rdi,QWORD PTR[288+rsp]
+ call __ecp_nistz256_sub_fromq
+
+ mov rax,QWORD PTR[((192+0))+rsp]
+ mov rbp,QWORD PTR[((192+8))+rsp]
+ mov rcx,QWORD PTR[((192+16))+rsp]
+ mov r10,QWORD PTR[((192+24))+rsp]
+ lea rdi,QWORD PTR[320+rsp]
+
+ call __ecp_nistz256_subq
+
+ mov QWORD PTR[rdi],r12
+ mov QWORD PTR[8+rdi],r13
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+ mov rax,QWORD PTR[128+rsp]
+ lea rbx,QWORD PTR[128+rsp]
+ mov r9,QWORD PTR[((0+224))+rsp]
+ mov r10,QWORD PTR[((8+224))+rsp]
+ lea rsi,QWORD PTR[((0+224))+rsp]
+ mov r11,QWORD PTR[((16+224))+rsp]
+ mov r12,QWORD PTR[((24+224))+rsp]
+ lea rdi,QWORD PTR[256+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[320+rsp]
+ lea rbx,QWORD PTR[320+rsp]
+ mov r9,QWORD PTR[((0+64))+rsp]
+ mov r10,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((0+64))+rsp]
+ mov r11,QWORD PTR[((16+64))+rsp]
+ mov r12,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[320+rsp]
+ call __ecp_nistz256_mul_montq
+
+ lea rbx,QWORD PTR[256+rsp]
+ lea rdi,QWORD PTR[320+rsp]
+ call __ecp_nistz256_sub_fromq
+
+DB 102,72,15,126,199
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[352+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((352+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[544+rsp]
+ pand xmm3,XMMWORD PTR[((544+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[448+rsp]
+ pand xmm3,XMMWORD PTR[((448+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[64+rdi],xmm2
+ movdqu XMMWORD PTR[80+rdi],xmm3
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[288+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((288+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[480+rsp]
+ pand xmm3,XMMWORD PTR[((480+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[384+rsp]
+ pand xmm3,XMMWORD PTR[((384+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[rdi],xmm2
+ movdqu XMMWORD PTR[16+rdi],xmm3
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[320+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((320+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[512+rsp]
+ pand xmm3,XMMWORD PTR[((512+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[416+rsp]
+ pand xmm3,XMMWORD PTR[((416+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu XMMWORD PTR[48+rdi],xmm3
+
+$L$add_doneq::
+ lea rsi,QWORD PTR[((576+56))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbx,QWORD PTR[((-16))+rsi]
+
+ mov rbp,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$point_addq_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_point_add::
+ecp_nistz256_point_add ENDP
+PUBLIC ecp_nistz256_point_add_affine
+
+ALIGN 32
+ecp_nistz256_point_add_affine PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_point_add_affine::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ mov ecx,080100h
+ and ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ cmp ecx,080100h
+ je $L$point_add_affinex
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,32*15+8
+
+$L$add_affineq_body::
+
+ movdqu xmm0,XMMWORD PTR[rsi]
+ mov rbx,rdx
+ movdqu xmm1,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ movdqu xmm3,XMMWORD PTR[48+rsi]
+ movdqu xmm4,XMMWORD PTR[64+rsi]
+ movdqu xmm5,XMMWORD PTR[80+rsi]
+ mov rax,QWORD PTR[((64+0))+rsi]
+ mov r14,QWORD PTR[((64+8))+rsi]
+ mov r15,QWORD PTR[((64+16))+rsi]
+ mov r8,QWORD PTR[((64+24))+rsi]
+ movdqa XMMWORD PTR[320+rsp],xmm0
+ movdqa XMMWORD PTR[(320+16)+rsp],xmm1
+ movdqa XMMWORD PTR[352+rsp],xmm2
+ movdqa XMMWORD PTR[(352+16)+rsp],xmm3
+ movdqa XMMWORD PTR[384+rsp],xmm4
+ movdqa XMMWORD PTR[(384+16)+rsp],xmm5
+ por xmm5,xmm4
+
+ movdqu xmm0,XMMWORD PTR[rbx]
+ pshufd xmm3,xmm5,0b1h
+ movdqu xmm1,XMMWORD PTR[16+rbx]
+ movdqu xmm2,XMMWORD PTR[32+rbx]
+ por xmm5,xmm3
+ movdqu xmm3,XMMWORD PTR[48+rbx]
+ movdqa XMMWORD PTR[416+rsp],xmm0
+ pshufd xmm4,xmm5,01eh
+ movdqa XMMWORD PTR[(416+16)+rsp],xmm1
+ por xmm1,xmm0
+DB 102,72,15,110,199
+ movdqa XMMWORD PTR[448+rsp],xmm2
+ movdqa XMMWORD PTR[(448+16)+rsp],xmm3
+ por xmm3,xmm2
+ por xmm5,xmm4
+ pxor xmm4,xmm4
+ por xmm3,xmm1
+
+ lea rsi,QWORD PTR[((64-0))+rsi]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_sqr_montq
+
+ pcmpeqd xmm5,xmm4
+ pshufd xmm4,xmm3,0b1h
+ mov rax,QWORD PTR[rbx]
+
+ mov r9,r12
+ por xmm4,xmm3
+ pshufd xmm5,xmm5,0
+ pshufd xmm3,xmm4,01eh
+ mov r10,r13
+ por xmm4,xmm3
+ pxor xmm3,xmm3
+ mov r11,r14
+ pcmpeqd xmm4,xmm3
+ pshufd xmm4,xmm4,0
+
+ lea rsi,QWORD PTR[((32-0))+rsp]
+ mov r12,r15
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_mul_montq
+
+ lea rbx,QWORD PTR[320+rsp]
+ lea rdi,QWORD PTR[64+rsp]
+ call __ecp_nistz256_sub_fromq
+
+ mov rax,QWORD PTR[384+rsp]
+ lea rbx,QWORD PTR[384+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((0+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[384+rsp]
+ lea rbx,QWORD PTR[384+rsp]
+ mov r9,QWORD PTR[((0+64))+rsp]
+ mov r10,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((0+64))+rsp]
+ mov r11,QWORD PTR[((16+64))+rsp]
+ mov r12,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[288+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[448+rsp]
+ lea rbx,QWORD PTR[448+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((0+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_mul_montq
+
+ lea rbx,QWORD PTR[352+rsp]
+ lea rdi,QWORD PTR[96+rsp]
+ call __ecp_nistz256_sub_fromq
+
+ mov rax,QWORD PTR[((0+64))+rsp]
+ mov r14,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((0+64))+rsp]
+ mov r15,QWORD PTR[((16+64))+rsp]
+ mov r8,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[128+rsp]
+ call __ecp_nistz256_sqr_montq
+
+ mov rax,QWORD PTR[((0+96))+rsp]
+ mov r14,QWORD PTR[((8+96))+rsp]
+ lea rsi,QWORD PTR[((0+96))+rsp]
+ mov r15,QWORD PTR[((16+96))+rsp]
+ mov r8,QWORD PTR[((24+96))+rsp]
+ lea rdi,QWORD PTR[192+rsp]
+ call __ecp_nistz256_sqr_montq
+
+ mov rax,QWORD PTR[128+rsp]
+ lea rbx,QWORD PTR[128+rsp]
+ mov r9,QWORD PTR[((0+64))+rsp]
+ mov r10,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((0+64))+rsp]
+ mov r11,QWORD PTR[((16+64))+rsp]
+ mov r12,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[160+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[320+rsp]
+ lea rbx,QWORD PTR[320+rsp]
+ mov r9,QWORD PTR[((0+128))+rsp]
+ mov r10,QWORD PTR[((8+128))+rsp]
+ lea rsi,QWORD PTR[((0+128))+rsp]
+ mov r11,QWORD PTR[((16+128))+rsp]
+ mov r12,QWORD PTR[((24+128))+rsp]
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_mul_montq
+
+
+
+
+ xor r11,r11
+ add r12,r12
+ lea rsi,QWORD PTR[192+rsp]
+ adc r13,r13
+ mov rax,r12
+ adc r8,r8
+ adc r9,r9
+ mov rbp,r13
+ adc r11,0
+
+ sub r12,-1
+ mov rcx,r8
+ sbb r13,r14
+ sbb r8,0
+ mov r10,r9
+ sbb r9,r15
+ sbb r11,0
+
+ cmovc r12,rax
+ mov rax,QWORD PTR[rsi]
+ cmovc r13,rbp
+ mov rbp,QWORD PTR[8+rsi]
+ cmovc r8,rcx
+ mov rcx,QWORD PTR[16+rsi]
+ cmovc r9,r10
+ mov r10,QWORD PTR[24+rsi]
+
+ call __ecp_nistz256_subq
+
+ lea rbx,QWORD PTR[160+rsp]
+ lea rdi,QWORD PTR[224+rsp]
+ call __ecp_nistz256_sub_fromq
+
+ mov rax,QWORD PTR[((0+0))+rsp]
+ mov rbp,QWORD PTR[((0+8))+rsp]
+ mov rcx,QWORD PTR[((0+16))+rsp]
+ mov r10,QWORD PTR[((0+24))+rsp]
+ lea rdi,QWORD PTR[64+rsp]
+
+ call __ecp_nistz256_subq
+
+ mov QWORD PTR[rdi],r12
+ mov QWORD PTR[8+rdi],r13
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+ mov rax,QWORD PTR[352+rsp]
+ lea rbx,QWORD PTR[352+rsp]
+ mov r9,QWORD PTR[((0+160))+rsp]
+ mov r10,QWORD PTR[((8+160))+rsp]
+ lea rsi,QWORD PTR[((0+160))+rsp]
+ mov r11,QWORD PTR[((16+160))+rsp]
+ mov r12,QWORD PTR[((24+160))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_mul_montq
+
+ mov rax,QWORD PTR[96+rsp]
+ lea rbx,QWORD PTR[96+rsp]
+ mov r9,QWORD PTR[((0+64))+rsp]
+ mov r10,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((0+64))+rsp]
+ mov r11,QWORD PTR[((16+64))+rsp]
+ mov r12,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[64+rsp]
+ call __ecp_nistz256_mul_montq
+
+ lea rbx,QWORD PTR[32+rsp]
+ lea rdi,QWORD PTR[256+rsp]
+ call __ecp_nistz256_sub_fromq
+
+DB 102,72,15,126,199
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[288+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((288+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[$L$ONE_mont]
+ pand xmm3,XMMWORD PTR[(($L$ONE_mont+16))]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[384+rsp]
+ pand xmm3,XMMWORD PTR[((384+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[64+rdi],xmm2
+ movdqu XMMWORD PTR[80+rdi],xmm3
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[224+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((224+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[416+rsp]
+ pand xmm3,XMMWORD PTR[((416+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[320+rsp]
+ pand xmm3,XMMWORD PTR[((320+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[rdi],xmm2
+ movdqu XMMWORD PTR[16+rdi],xmm3
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[256+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((256+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[448+rsp]
+ pand xmm3,XMMWORD PTR[((448+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[352+rsp]
+ pand xmm3,XMMWORD PTR[((352+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu XMMWORD PTR[48+rdi],xmm3
+
+ lea rsi,QWORD PTR[((480+56))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbx,QWORD PTR[((-16))+rsi]
+
+ mov rbp,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$add_affineq_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_point_add_affine::
+ecp_nistz256_point_add_affine ENDP
+
+ALIGN 32
+__ecp_nistz256_add_tox PROC PRIVATE
+
+ xor r11,r11
+ adc r12,QWORD PTR[rbx]
+ adc r13,QWORD PTR[8+rbx]
+ mov rax,r12
+ adc r8,QWORD PTR[16+rbx]
+ adc r9,QWORD PTR[24+rbx]
+ mov rbp,r13
+ adc r11,0
+
+ xor r10,r10
+ sbb r12,-1
+ mov rcx,r8
+ sbb r13,r14
+ sbb r8,0
+ mov r10,r9
+ sbb r9,r15
+ sbb r11,0
+
+ cmovc r12,rax
+ cmovc r13,rbp
+ mov QWORD PTR[rdi],r12
+ cmovc r8,rcx
+ mov QWORD PTR[8+rdi],r13
+ cmovc r9,r10
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_add_tox ENDP
+
+
+ALIGN 32
+__ecp_nistz256_sub_fromx PROC PRIVATE
+
+ xor r11,r11
+ sbb r12,QWORD PTR[rbx]
+ sbb r13,QWORD PTR[8+rbx]
+ mov rax,r12
+ sbb r8,QWORD PTR[16+rbx]
+ sbb r9,QWORD PTR[24+rbx]
+ mov rbp,r13
+ sbb r11,0
+
+ xor r10,r10
+ adc r12,-1
+ mov rcx,r8
+ adc r13,r14
+ adc r8,0
+ mov r10,r9
+ adc r9,r15
+
+ bt r11,0
+ cmovnc r12,rax
+ cmovnc r13,rbp
+ mov QWORD PTR[rdi],r12
+ cmovnc r8,rcx
+ mov QWORD PTR[8+rdi],r13
+ cmovnc r9,r10
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_sub_fromx ENDP
+
+
+ALIGN 32
+__ecp_nistz256_subx PROC PRIVATE
+
+ xor r11,r11
+ sbb rax,r12
+ sbb rbp,r13
+ mov r12,rax
+ sbb rcx,r8
+ sbb r10,r9
+ mov r13,rbp
+ sbb r11,0
+
+ xor r9,r9
+ adc rax,-1
+ mov r8,rcx
+ adc rbp,r14
+ adc rcx,0
+ mov r9,r10
+ adc r10,r15
+
+ bt r11,0
+ cmovc r12,rax
+ cmovc r13,rbp
+ cmovc r8,rcx
+ cmovc r9,r10
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_subx ENDP
+
+
+ALIGN 32
+__ecp_nistz256_mul_by_2x PROC PRIVATE
+
+ xor r11,r11
+ adc r12,r12
+ adc r13,r13
+ mov rax,r12
+ adc r8,r8
+ adc r9,r9
+ mov rbp,r13
+ adc r11,0
+
+ xor r10,r10
+ sbb r12,-1
+ mov rcx,r8
+ sbb r13,r14
+ sbb r8,0
+ mov r10,r9
+ sbb r9,r15
+ sbb r11,0
+
+ cmovc r12,rax
+ cmovc r13,rbp
+ mov QWORD PTR[rdi],r12
+ cmovc r8,rcx
+ mov QWORD PTR[8+rdi],r13
+ cmovc r9,r10
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+
+ DB 0F3h,0C3h ;repret
+
+__ecp_nistz256_mul_by_2x ENDP
+
+ALIGN 32
+ecp_nistz256_point_doublex PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_point_doublex::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+$L$point_doublex::
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,32*5+8
+
+$L$point_doublex_body::
+
+$L$point_double_shortcutx::
+ movdqu xmm0,XMMWORD PTR[rsi]
+ mov rbx,rsi
+ movdqu xmm1,XMMWORD PTR[16+rsi]
+ mov r12,QWORD PTR[((32+0))+rsi]
+ mov r13,QWORD PTR[((32+8))+rsi]
+ mov r8,QWORD PTR[((32+16))+rsi]
+ mov r9,QWORD PTR[((32+24))+rsi]
+ mov r14,QWORD PTR[(($L$poly+8))]
+ mov r15,QWORD PTR[(($L$poly+24))]
+ movdqa XMMWORD PTR[96+rsp],xmm0
+ movdqa XMMWORD PTR[(96+16)+rsp],xmm1
+ lea r10,QWORD PTR[32+rdi]
+ lea r11,QWORD PTR[64+rdi]
+DB 102,72,15,110,199
+DB 102,73,15,110,202
+DB 102,73,15,110,211
+
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_mul_by_2x
+
+ mov rdx,QWORD PTR[((64+0))+rsi]
+ mov r14,QWORD PTR[((64+8))+rsi]
+ mov r15,QWORD PTR[((64+16))+rsi]
+ mov r8,QWORD PTR[((64+24))+rsi]
+ lea rsi,QWORD PTR[((64-128))+rsi]
+ lea rdi,QWORD PTR[64+rsp]
+ call __ecp_nistz256_sqr_montx
+
+ mov rdx,QWORD PTR[((0+0))+rsp]
+ mov r14,QWORD PTR[((8+0))+rsp]
+ lea rsi,QWORD PTR[((-128+0))+rsp]
+ mov r15,QWORD PTR[((16+0))+rsp]
+ mov r8,QWORD PTR[((24+0))+rsp]
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_sqr_montx
+
+ mov rdx,QWORD PTR[32+rbx]
+ mov r9,QWORD PTR[((64+0))+rbx]
+ mov r10,QWORD PTR[((64+8))+rbx]
+ mov r11,QWORD PTR[((64+16))+rbx]
+ mov r12,QWORD PTR[((64+24))+rbx]
+ lea rsi,QWORD PTR[((64-128))+rbx]
+ lea rbx,QWORD PTR[32+rbx]
+DB 102,72,15,126,215
+ call __ecp_nistz256_mul_montx
+ call __ecp_nistz256_mul_by_2x
+
+ mov r12,QWORD PTR[((96+0))+rsp]
+ mov r13,QWORD PTR[((96+8))+rsp]
+ lea rbx,QWORD PTR[64+rsp]
+ mov r8,QWORD PTR[((96+16))+rsp]
+ mov r9,QWORD PTR[((96+24))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_add_tox
+
+ mov r12,QWORD PTR[((96+0))+rsp]
+ mov r13,QWORD PTR[((96+8))+rsp]
+ lea rbx,QWORD PTR[64+rsp]
+ mov r8,QWORD PTR[((96+16))+rsp]
+ mov r9,QWORD PTR[((96+24))+rsp]
+ lea rdi,QWORD PTR[64+rsp]
+ call __ecp_nistz256_sub_fromx
+
+ mov rdx,QWORD PTR[((0+0))+rsp]
+ mov r14,QWORD PTR[((8+0))+rsp]
+ lea rsi,QWORD PTR[((-128+0))+rsp]
+ mov r15,QWORD PTR[((16+0))+rsp]
+ mov r8,QWORD PTR[((24+0))+rsp]
+DB 102,72,15,126,207
+ call __ecp_nistz256_sqr_montx
+ xor r9,r9
+ mov rax,r12
+ add r12,-1
+ mov r10,r13
+ adc r13,rsi
+ mov rcx,r14
+ adc r14,0
+ mov r8,r15
+ adc r15,rbp
+ adc r9,0
+ xor rsi,rsi
+ test rax,1
+
+ cmovz r12,rax
+ cmovz r13,r10
+ cmovz r14,rcx
+ cmovz r15,r8
+ cmovz r9,rsi
+
+ mov rax,r13
+ shr r12,1
+ shl rax,63
+ mov r10,r14
+ shr r13,1
+ or r12,rax
+ shl r10,63
+ mov rcx,r15
+ shr r14,1
+ or r13,r10
+ shl rcx,63
+ mov QWORD PTR[rdi],r12
+ shr r15,1
+ mov QWORD PTR[8+rdi],r13
+ shl r9,63
+ or r14,rcx
+ or r15,r9
+ mov QWORD PTR[16+rdi],r14
+ mov QWORD PTR[24+rdi],r15
+ mov rdx,QWORD PTR[64+rsp]
+ lea rbx,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((-128+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_mul_montx
+
+ lea rdi,QWORD PTR[128+rsp]
+ call __ecp_nistz256_mul_by_2x
+
+ lea rbx,QWORD PTR[32+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_add_tox
+
+ mov rdx,QWORD PTR[96+rsp]
+ lea rbx,QWORD PTR[96+rsp]
+ mov r9,QWORD PTR[((0+0))+rsp]
+ mov r10,QWORD PTR[((8+0))+rsp]
+ lea rsi,QWORD PTR[((-128+0))+rsp]
+ mov r11,QWORD PTR[((16+0))+rsp]
+ mov r12,QWORD PTR[((24+0))+rsp]
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_mul_montx
+
+ lea rdi,QWORD PTR[128+rsp]
+ call __ecp_nistz256_mul_by_2x
+
+ mov rdx,QWORD PTR[((0+32))+rsp]
+ mov r14,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((-128+32))+rsp]
+ mov r15,QWORD PTR[((16+32))+rsp]
+ mov r8,QWORD PTR[((24+32))+rsp]
+DB 102,72,15,126,199
+ call __ecp_nistz256_sqr_montx
+
+ lea rbx,QWORD PTR[128+rsp]
+ mov r8,r14
+ mov r9,r15
+ mov r14,rsi
+ mov r15,rbp
+ call __ecp_nistz256_sub_fromx
+
+ mov rax,QWORD PTR[((0+0))+rsp]
+ mov rbp,QWORD PTR[((0+8))+rsp]
+ mov rcx,QWORD PTR[((0+16))+rsp]
+ mov r10,QWORD PTR[((0+24))+rsp]
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_subx
+
+ mov rdx,QWORD PTR[32+rsp]
+ lea rbx,QWORD PTR[32+rsp]
+ mov r14,r12
+ xor ecx,ecx
+ mov QWORD PTR[((0+0))+rsp],r12
+ mov r10,r13
+ mov QWORD PTR[((0+8))+rsp],r13
+ cmovz r11,r8
+ mov QWORD PTR[((0+16))+rsp],r8
+ lea rsi,QWORD PTR[((0-128))+rsp]
+ cmovz r12,r9
+ mov QWORD PTR[((0+24))+rsp],r9
+ mov r9,r14
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_mul_montx
+
+DB 102,72,15,126,203
+DB 102,72,15,126,207
+ call __ecp_nistz256_sub_fromx
+
+ lea rsi,QWORD PTR[((160+56))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbx,QWORD PTR[((-16))+rsi]
+
+ mov rbp,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$point_doublex_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_point_doublex::
+ecp_nistz256_point_doublex ENDP
+
+ALIGN 32
+ecp_nistz256_point_addx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_point_addx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$point_addx::
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,32*18+8
+
+$L$point_addx_body::
+
+ movdqu xmm0,XMMWORD PTR[rsi]
+ movdqu xmm1,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ movdqu xmm3,XMMWORD PTR[48+rsi]
+ movdqu xmm4,XMMWORD PTR[64+rsi]
+ movdqu xmm5,XMMWORD PTR[80+rsi]
+ mov rbx,rsi
+ mov rsi,rdx
+ movdqa XMMWORD PTR[384+rsp],xmm0
+ movdqa XMMWORD PTR[(384+16)+rsp],xmm1
+ movdqa XMMWORD PTR[416+rsp],xmm2
+ movdqa XMMWORD PTR[(416+16)+rsp],xmm3
+ movdqa XMMWORD PTR[448+rsp],xmm4
+ movdqa XMMWORD PTR[(448+16)+rsp],xmm5
+ por xmm5,xmm4
+
+ movdqu xmm0,XMMWORD PTR[rsi]
+ pshufd xmm3,xmm5,0b1h
+ movdqu xmm1,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ por xmm5,xmm3
+ movdqu xmm3,XMMWORD PTR[48+rsi]
+ mov rdx,QWORD PTR[((64+0))+rsi]
+ mov r14,QWORD PTR[((64+8))+rsi]
+ mov r15,QWORD PTR[((64+16))+rsi]
+ mov r8,QWORD PTR[((64+24))+rsi]
+ movdqa XMMWORD PTR[480+rsp],xmm0
+ pshufd xmm4,xmm5,01eh
+ movdqa XMMWORD PTR[(480+16)+rsp],xmm1
+ movdqu xmm0,XMMWORD PTR[64+rsi]
+ movdqu xmm1,XMMWORD PTR[80+rsi]
+ movdqa XMMWORD PTR[512+rsp],xmm2
+ movdqa XMMWORD PTR[(512+16)+rsp],xmm3
+ por xmm5,xmm4
+ pxor xmm4,xmm4
+ por xmm1,xmm0
+DB 102,72,15,110,199
+
+ lea rsi,QWORD PTR[((64-128))+rsi]
+ mov QWORD PTR[((544+0))+rsp],rdx
+ mov QWORD PTR[((544+8))+rsp],r14
+ mov QWORD PTR[((544+16))+rsp],r15
+ mov QWORD PTR[((544+24))+rsp],r8
+ lea rdi,QWORD PTR[96+rsp]
+ call __ecp_nistz256_sqr_montx
+
+ pcmpeqd xmm5,xmm4
+ pshufd xmm4,xmm1,0b1h
+ por xmm4,xmm1
+ pshufd xmm5,xmm5,0
+ pshufd xmm3,xmm4,01eh
+ por xmm4,xmm3
+ pxor xmm3,xmm3
+ pcmpeqd xmm4,xmm3
+ pshufd xmm4,xmm4,0
+ mov rdx,QWORD PTR[((64+0))+rbx]
+ mov r14,QWORD PTR[((64+8))+rbx]
+ mov r15,QWORD PTR[((64+16))+rbx]
+ mov r8,QWORD PTR[((64+24))+rbx]
+DB 102,72,15,110,203
+
+ lea rsi,QWORD PTR[((64-128))+rbx]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_sqr_montx
+
+ mov rdx,QWORD PTR[544+rsp]
+ lea rbx,QWORD PTR[544+rsp]
+ mov r9,QWORD PTR[((0+96))+rsp]
+ mov r10,QWORD PTR[((8+96))+rsp]
+ lea rsi,QWORD PTR[((-128+96))+rsp]
+ mov r11,QWORD PTR[((16+96))+rsp]
+ mov r12,QWORD PTR[((24+96))+rsp]
+ lea rdi,QWORD PTR[224+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[448+rsp]
+ lea rbx,QWORD PTR[448+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((-128+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[256+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[416+rsp]
+ lea rbx,QWORD PTR[416+rsp]
+ mov r9,QWORD PTR[((0+224))+rsp]
+ mov r10,QWORD PTR[((8+224))+rsp]
+ lea rsi,QWORD PTR[((-128+224))+rsp]
+ mov r11,QWORD PTR[((16+224))+rsp]
+ mov r12,QWORD PTR[((24+224))+rsp]
+ lea rdi,QWORD PTR[224+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[512+rsp]
+ lea rbx,QWORD PTR[512+rsp]
+ mov r9,QWORD PTR[((0+256))+rsp]
+ mov r10,QWORD PTR[((8+256))+rsp]
+ lea rsi,QWORD PTR[((-128+256))+rsp]
+ mov r11,QWORD PTR[((16+256))+rsp]
+ mov r12,QWORD PTR[((24+256))+rsp]
+ lea rdi,QWORD PTR[256+rsp]
+ call __ecp_nistz256_mul_montx
+
+ lea rbx,QWORD PTR[224+rsp]
+ lea rdi,QWORD PTR[64+rsp]
+ call __ecp_nistz256_sub_fromx
+
+ or r12,r13
+ movdqa xmm2,xmm4
+ or r12,r8
+ or r12,r9
+ por xmm2,xmm5
+DB 102,73,15,110,220
+
+ mov rdx,QWORD PTR[384+rsp]
+ lea rbx,QWORD PTR[384+rsp]
+ mov r9,QWORD PTR[((0+96))+rsp]
+ mov r10,QWORD PTR[((8+96))+rsp]
+ lea rsi,QWORD PTR[((-128+96))+rsp]
+ mov r11,QWORD PTR[((16+96))+rsp]
+ mov r12,QWORD PTR[((24+96))+rsp]
+ lea rdi,QWORD PTR[160+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[480+rsp]
+ lea rbx,QWORD PTR[480+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((-128+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[192+rsp]
+ call __ecp_nistz256_mul_montx
+
+ lea rbx,QWORD PTR[160+rsp]
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_sub_fromx
+
+ or r12,r13
+ or r12,r8
+ or r12,r9
+
+DB 102,73,15,126,208
+DB 102,73,15,126,217
+
+ or r12,r8
+ or r12,r9
+
+
+DB 03eh
+ jnz $L$add_proceedx
+
+$L$add_doublex::
+DB 102,72,15,126,206
+DB 102,72,15,126,199
+ add rsp,416
+
+ jmp $L$point_double_shortcutx
+
+
+ALIGN 32
+$L$add_proceedx::
+ mov rdx,QWORD PTR[((0+64))+rsp]
+ mov r14,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((-128+64))+rsp]
+ mov r15,QWORD PTR[((16+64))+rsp]
+ mov r8,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[96+rsp]
+ call __ecp_nistz256_sqr_montx
+
+ mov rdx,QWORD PTR[448+rsp]
+ lea rbx,QWORD PTR[448+rsp]
+ mov r9,QWORD PTR[((0+0))+rsp]
+ mov r10,QWORD PTR[((8+0))+rsp]
+ lea rsi,QWORD PTR[((-128+0))+rsp]
+ mov r11,QWORD PTR[((16+0))+rsp]
+ mov r12,QWORD PTR[((24+0))+rsp]
+ lea rdi,QWORD PTR[352+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[((0+0))+rsp]
+ mov r14,QWORD PTR[((8+0))+rsp]
+ lea rsi,QWORD PTR[((-128+0))+rsp]
+ mov r15,QWORD PTR[((16+0))+rsp]
+ mov r8,QWORD PTR[((24+0))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_sqr_montx
+
+ mov rdx,QWORD PTR[544+rsp]
+ lea rbx,QWORD PTR[544+rsp]
+ mov r9,QWORD PTR[((0+352))+rsp]
+ mov r10,QWORD PTR[((8+352))+rsp]
+ lea rsi,QWORD PTR[((-128+352))+rsp]
+ mov r11,QWORD PTR[((16+352))+rsp]
+ mov r12,QWORD PTR[((24+352))+rsp]
+ lea rdi,QWORD PTR[352+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[rsp]
+ lea rbx,QWORD PTR[rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((-128+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[128+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[160+rsp]
+ lea rbx,QWORD PTR[160+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((-128+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[192+rsp]
+ call __ecp_nistz256_mul_montx
+
+
+
+
+ xor r11,r11
+ add r12,r12
+ lea rsi,QWORD PTR[96+rsp]
+ adc r13,r13
+ mov rax,r12
+ adc r8,r8
+ adc r9,r9
+ mov rbp,r13
+ adc r11,0
+
+ sub r12,-1
+ mov rcx,r8
+ sbb r13,r14
+ sbb r8,0
+ mov r10,r9
+ sbb r9,r15
+ sbb r11,0
+
+ cmovc r12,rax
+ mov rax,QWORD PTR[rsi]
+ cmovc r13,rbp
+ mov rbp,QWORD PTR[8+rsi]
+ cmovc r8,rcx
+ mov rcx,QWORD PTR[16+rsi]
+ cmovc r9,r10
+ mov r10,QWORD PTR[24+rsi]
+
+ call __ecp_nistz256_subx
+
+ lea rbx,QWORD PTR[128+rsp]
+ lea rdi,QWORD PTR[288+rsp]
+ call __ecp_nistz256_sub_fromx
+
+ mov rax,QWORD PTR[((192+0))+rsp]
+ mov rbp,QWORD PTR[((192+8))+rsp]
+ mov rcx,QWORD PTR[((192+16))+rsp]
+ mov r10,QWORD PTR[((192+24))+rsp]
+ lea rdi,QWORD PTR[320+rsp]
+
+ call __ecp_nistz256_subx
+
+ mov QWORD PTR[rdi],r12
+ mov QWORD PTR[8+rdi],r13
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+ mov rdx,QWORD PTR[128+rsp]
+ lea rbx,QWORD PTR[128+rsp]
+ mov r9,QWORD PTR[((0+224))+rsp]
+ mov r10,QWORD PTR[((8+224))+rsp]
+ lea rsi,QWORD PTR[((-128+224))+rsp]
+ mov r11,QWORD PTR[((16+224))+rsp]
+ mov r12,QWORD PTR[((24+224))+rsp]
+ lea rdi,QWORD PTR[256+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[320+rsp]
+ lea rbx,QWORD PTR[320+rsp]
+ mov r9,QWORD PTR[((0+64))+rsp]
+ mov r10,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((-128+64))+rsp]
+ mov r11,QWORD PTR[((16+64))+rsp]
+ mov r12,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[320+rsp]
+ call __ecp_nistz256_mul_montx
+
+ lea rbx,QWORD PTR[256+rsp]
+ lea rdi,QWORD PTR[320+rsp]
+ call __ecp_nistz256_sub_fromx
+
+DB 102,72,15,126,199
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[352+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((352+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[544+rsp]
+ pand xmm3,XMMWORD PTR[((544+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[448+rsp]
+ pand xmm3,XMMWORD PTR[((448+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[64+rdi],xmm2
+ movdqu XMMWORD PTR[80+rdi],xmm3
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[288+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((288+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[480+rsp]
+ pand xmm3,XMMWORD PTR[((480+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[384+rsp]
+ pand xmm3,XMMWORD PTR[((384+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[rdi],xmm2
+ movdqu XMMWORD PTR[16+rdi],xmm3
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[320+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((320+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[512+rsp]
+ pand xmm3,XMMWORD PTR[((512+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[416+rsp]
+ pand xmm3,XMMWORD PTR[((416+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu XMMWORD PTR[48+rdi],xmm3
+
+$L$add_donex::
+ lea rsi,QWORD PTR[((576+56))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbx,QWORD PTR[((-16))+rsi]
+
+ mov rbp,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$point_addx_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_point_addx::
+ecp_nistz256_point_addx ENDP
+
+ALIGN 32
+ecp_nistz256_point_add_affinex PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_ecp_nistz256_point_add_affinex::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$point_add_affinex::
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,32*15+8
+
+$L$add_affinex_body::
+
+ movdqu xmm0,XMMWORD PTR[rsi]
+ mov rbx,rdx
+ movdqu xmm1,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+ movdqu xmm3,XMMWORD PTR[48+rsi]
+ movdqu xmm4,XMMWORD PTR[64+rsi]
+ movdqu xmm5,XMMWORD PTR[80+rsi]
+ mov rdx,QWORD PTR[((64+0))+rsi]
+ mov r14,QWORD PTR[((64+8))+rsi]
+ mov r15,QWORD PTR[((64+16))+rsi]
+ mov r8,QWORD PTR[((64+24))+rsi]
+ movdqa XMMWORD PTR[320+rsp],xmm0
+ movdqa XMMWORD PTR[(320+16)+rsp],xmm1
+ movdqa XMMWORD PTR[352+rsp],xmm2
+ movdqa XMMWORD PTR[(352+16)+rsp],xmm3
+ movdqa XMMWORD PTR[384+rsp],xmm4
+ movdqa XMMWORD PTR[(384+16)+rsp],xmm5
+ por xmm5,xmm4
+
+ movdqu xmm0,XMMWORD PTR[rbx]
+ pshufd xmm3,xmm5,0b1h
+ movdqu xmm1,XMMWORD PTR[16+rbx]
+ movdqu xmm2,XMMWORD PTR[32+rbx]
+ por xmm5,xmm3
+ movdqu xmm3,XMMWORD PTR[48+rbx]
+ movdqa XMMWORD PTR[416+rsp],xmm0
+ pshufd xmm4,xmm5,01eh
+ movdqa XMMWORD PTR[(416+16)+rsp],xmm1
+ por xmm1,xmm0
+DB 102,72,15,110,199
+ movdqa XMMWORD PTR[448+rsp],xmm2
+ movdqa XMMWORD PTR[(448+16)+rsp],xmm3
+ por xmm3,xmm2
+ por xmm5,xmm4
+ pxor xmm4,xmm4
+ por xmm3,xmm1
+
+ lea rsi,QWORD PTR[((64-128))+rsi]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_sqr_montx
+
+ pcmpeqd xmm5,xmm4
+ pshufd xmm4,xmm3,0b1h
+ mov rdx,QWORD PTR[rbx]
+
+ mov r9,r12
+ por xmm4,xmm3
+ pshufd xmm5,xmm5,0
+ pshufd xmm3,xmm4,01eh
+ mov r10,r13
+ por xmm4,xmm3
+ pxor xmm3,xmm3
+ mov r11,r14
+ pcmpeqd xmm4,xmm3
+ pshufd xmm4,xmm4,0
+
+ lea rsi,QWORD PTR[((32-128))+rsp]
+ mov r12,r15
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_mul_montx
+
+ lea rbx,QWORD PTR[320+rsp]
+ lea rdi,QWORD PTR[64+rsp]
+ call __ecp_nistz256_sub_fromx
+
+ mov rdx,QWORD PTR[384+rsp]
+ lea rbx,QWORD PTR[384+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((-128+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[384+rsp]
+ lea rbx,QWORD PTR[384+rsp]
+ mov r9,QWORD PTR[((0+64))+rsp]
+ mov r10,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((-128+64))+rsp]
+ mov r11,QWORD PTR[((16+64))+rsp]
+ mov r12,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[288+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[448+rsp]
+ lea rbx,QWORD PTR[448+rsp]
+ mov r9,QWORD PTR[((0+32))+rsp]
+ mov r10,QWORD PTR[((8+32))+rsp]
+ lea rsi,QWORD PTR[((-128+32))+rsp]
+ mov r11,QWORD PTR[((16+32))+rsp]
+ mov r12,QWORD PTR[((24+32))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_mul_montx
+
+ lea rbx,QWORD PTR[352+rsp]
+ lea rdi,QWORD PTR[96+rsp]
+ call __ecp_nistz256_sub_fromx
+
+ mov rdx,QWORD PTR[((0+64))+rsp]
+ mov r14,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((-128+64))+rsp]
+ mov r15,QWORD PTR[((16+64))+rsp]
+ mov r8,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[128+rsp]
+ call __ecp_nistz256_sqr_montx
+
+ mov rdx,QWORD PTR[((0+96))+rsp]
+ mov r14,QWORD PTR[((8+96))+rsp]
+ lea rsi,QWORD PTR[((-128+96))+rsp]
+ mov r15,QWORD PTR[((16+96))+rsp]
+ mov r8,QWORD PTR[((24+96))+rsp]
+ lea rdi,QWORD PTR[192+rsp]
+ call __ecp_nistz256_sqr_montx
+
+ mov rdx,QWORD PTR[128+rsp]
+ lea rbx,QWORD PTR[128+rsp]
+ mov r9,QWORD PTR[((0+64))+rsp]
+ mov r10,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((-128+64))+rsp]
+ mov r11,QWORD PTR[((16+64))+rsp]
+ mov r12,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[160+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[320+rsp]
+ lea rbx,QWORD PTR[320+rsp]
+ mov r9,QWORD PTR[((0+128))+rsp]
+ mov r10,QWORD PTR[((8+128))+rsp]
+ lea rsi,QWORD PTR[((-128+128))+rsp]
+ mov r11,QWORD PTR[((16+128))+rsp]
+ mov r12,QWORD PTR[((24+128))+rsp]
+ lea rdi,QWORD PTR[rsp]
+ call __ecp_nistz256_mul_montx
+
+
+
+
+ xor r11,r11
+ add r12,r12
+ lea rsi,QWORD PTR[192+rsp]
+ adc r13,r13
+ mov rax,r12
+ adc r8,r8
+ adc r9,r9
+ mov rbp,r13
+ adc r11,0
+
+ sub r12,-1
+ mov rcx,r8
+ sbb r13,r14
+ sbb r8,0
+ mov r10,r9
+ sbb r9,r15
+ sbb r11,0
+
+ cmovc r12,rax
+ mov rax,QWORD PTR[rsi]
+ cmovc r13,rbp
+ mov rbp,QWORD PTR[8+rsi]
+ cmovc r8,rcx
+ mov rcx,QWORD PTR[16+rsi]
+ cmovc r9,r10
+ mov r10,QWORD PTR[24+rsi]
+
+ call __ecp_nistz256_subx
+
+ lea rbx,QWORD PTR[160+rsp]
+ lea rdi,QWORD PTR[224+rsp]
+ call __ecp_nistz256_sub_fromx
+
+ mov rax,QWORD PTR[((0+0))+rsp]
+ mov rbp,QWORD PTR[((0+8))+rsp]
+ mov rcx,QWORD PTR[((0+16))+rsp]
+ mov r10,QWORD PTR[((0+24))+rsp]
+ lea rdi,QWORD PTR[64+rsp]
+
+ call __ecp_nistz256_subx
+
+ mov QWORD PTR[rdi],r12
+ mov QWORD PTR[8+rdi],r13
+ mov QWORD PTR[16+rdi],r8
+ mov QWORD PTR[24+rdi],r9
+ mov rdx,QWORD PTR[352+rsp]
+ lea rbx,QWORD PTR[352+rsp]
+ mov r9,QWORD PTR[((0+160))+rsp]
+ mov r10,QWORD PTR[((8+160))+rsp]
+ lea rsi,QWORD PTR[((-128+160))+rsp]
+ mov r11,QWORD PTR[((16+160))+rsp]
+ mov r12,QWORD PTR[((24+160))+rsp]
+ lea rdi,QWORD PTR[32+rsp]
+ call __ecp_nistz256_mul_montx
+
+ mov rdx,QWORD PTR[96+rsp]
+ lea rbx,QWORD PTR[96+rsp]
+ mov r9,QWORD PTR[((0+64))+rsp]
+ mov r10,QWORD PTR[((8+64))+rsp]
+ lea rsi,QWORD PTR[((-128+64))+rsp]
+ mov r11,QWORD PTR[((16+64))+rsp]
+ mov r12,QWORD PTR[((24+64))+rsp]
+ lea rdi,QWORD PTR[64+rsp]
+ call __ecp_nistz256_mul_montx
+
+ lea rbx,QWORD PTR[32+rsp]
+ lea rdi,QWORD PTR[256+rsp]
+ call __ecp_nistz256_sub_fromx
+
+DB 102,72,15,126,199
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[288+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((288+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[$L$ONE_mont]
+ pand xmm3,XMMWORD PTR[(($L$ONE_mont+16))]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[384+rsp]
+ pand xmm3,XMMWORD PTR[((384+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[64+rdi],xmm2
+ movdqu XMMWORD PTR[80+rdi],xmm3
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[224+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((224+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[416+rsp]
+ pand xmm3,XMMWORD PTR[((416+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[320+rsp]
+ pand xmm3,XMMWORD PTR[((320+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[rdi],xmm2
+ movdqu XMMWORD PTR[16+rdi],xmm3
+
+ movdqa xmm0,xmm5
+ movdqa xmm1,xmm5
+ pandn xmm0,XMMWORD PTR[256+rsp]
+ movdqa xmm2,xmm5
+ pandn xmm1,XMMWORD PTR[((256+16))+rsp]
+ movdqa xmm3,xmm5
+ pand xmm2,XMMWORD PTR[448+rsp]
+ pand xmm3,XMMWORD PTR[((448+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+
+ movdqa xmm0,xmm4
+ movdqa xmm1,xmm4
+ pandn xmm0,xmm2
+ movdqa xmm2,xmm4
+ pandn xmm1,xmm3
+ movdqa xmm3,xmm4
+ pand xmm2,XMMWORD PTR[352+rsp]
+ pand xmm3,XMMWORD PTR[((352+16))+rsp]
+ por xmm2,xmm0
+ por xmm3,xmm1
+ movdqu XMMWORD PTR[32+rdi],xmm2
+ movdqu XMMWORD PTR[48+rdi],xmm3
+
+ lea rsi,QWORD PTR[((480+56))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbx,QWORD PTR[((-16))+rsi]
+
+ mov rbp,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$add_affinex_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_ecp_nistz256_point_add_affinex::
+ecp_nistz256_point_add_affinex ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+
+ALIGN 16
+short_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ lea rax,QWORD PTR[16+rax]
+
+ mov r12,QWORD PTR[((-8))+rax]
+ mov r13,QWORD PTR[((-16))+rax]
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+
+ jmp $L$common_seh_tail
+short_handler ENDP
+
+
+ALIGN 16
+full_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ mov r10d,DWORD PTR[8+r11]
+ lea rax,QWORD PTR[r10*1+rax]
+
+ mov rbp,QWORD PTR[((-8))+rax]
+ mov rbx,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+full_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_ecp_nistz256_mul_by_2
+ DD imagerel $L$SEH_end_ecp_nistz256_mul_by_2
+ DD imagerel $L$SEH_info_ecp_nistz256_mul_by_2
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_div_by_2
+ DD imagerel $L$SEH_end_ecp_nistz256_div_by_2
+ DD imagerel $L$SEH_info_ecp_nistz256_div_by_2
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_mul_by_3
+ DD imagerel $L$SEH_end_ecp_nistz256_mul_by_3
+ DD imagerel $L$SEH_info_ecp_nistz256_mul_by_3
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_add
+ DD imagerel $L$SEH_end_ecp_nistz256_add
+ DD imagerel $L$SEH_info_ecp_nistz256_add
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_sub
+ DD imagerel $L$SEH_end_ecp_nistz256_sub
+ DD imagerel $L$SEH_info_ecp_nistz256_sub
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_neg
+ DD imagerel $L$SEH_end_ecp_nistz256_neg
+ DD imagerel $L$SEH_info_ecp_nistz256_neg
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_ord_mul_mont
+ DD imagerel $L$SEH_end_ecp_nistz256_ord_mul_mont
+ DD imagerel $L$SEH_info_ecp_nistz256_ord_mul_mont
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_ord_sqr_mont
+ DD imagerel $L$SEH_end_ecp_nistz256_ord_sqr_mont
+ DD imagerel $L$SEH_info_ecp_nistz256_ord_sqr_mont
+ DD imagerel $L$SEH_begin_ecp_nistz256_ord_mul_montx
+ DD imagerel $L$SEH_end_ecp_nistz256_ord_mul_montx
+ DD imagerel $L$SEH_info_ecp_nistz256_ord_mul_montx
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_ord_sqr_montx
+ DD imagerel $L$SEH_end_ecp_nistz256_ord_sqr_montx
+ DD imagerel $L$SEH_info_ecp_nistz256_ord_sqr_montx
+ DD imagerel $L$SEH_begin_ecp_nistz256_to_mont
+ DD imagerel $L$SEH_end_ecp_nistz256_to_mont
+ DD imagerel $L$SEH_info_ecp_nistz256_to_mont
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_mul_mont
+ DD imagerel $L$SEH_end_ecp_nistz256_mul_mont
+ DD imagerel $L$SEH_info_ecp_nistz256_mul_mont
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_sqr_mont
+ DD imagerel $L$SEH_end_ecp_nistz256_sqr_mont
+ DD imagerel $L$SEH_info_ecp_nistz256_sqr_mont
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_from_mont
+ DD imagerel $L$SEH_end_ecp_nistz256_from_mont
+ DD imagerel $L$SEH_info_ecp_nistz256_from_mont
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_gather_w5
+ DD imagerel $L$SEH_end_ecp_nistz256_gather_w5
+ DD imagerel $L$SEH_info_ecp_nistz256_gather_wX
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_gather_w7
+ DD imagerel $L$SEH_end_ecp_nistz256_gather_w7
+ DD imagerel $L$SEH_info_ecp_nistz256_gather_wX
+ DD imagerel $L$SEH_begin_ecp_nistz256_avx2_gather_w5
+ DD imagerel $L$SEH_end_ecp_nistz256_avx2_gather_w5
+ DD imagerel $L$SEH_info_ecp_nistz256_avx2_gather_wX
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_avx2_gather_w7
+ DD imagerel $L$SEH_end_ecp_nistz256_avx2_gather_w7
+ DD imagerel $L$SEH_info_ecp_nistz256_avx2_gather_wX
+ DD imagerel $L$SEH_begin_ecp_nistz256_point_double
+ DD imagerel $L$SEH_end_ecp_nistz256_point_double
+ DD imagerel $L$SEH_info_ecp_nistz256_point_double
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_point_add
+ DD imagerel $L$SEH_end_ecp_nistz256_point_add
+ DD imagerel $L$SEH_info_ecp_nistz256_point_add
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_point_add_affine
+ DD imagerel $L$SEH_end_ecp_nistz256_point_add_affine
+ DD imagerel $L$SEH_info_ecp_nistz256_point_add_affine
+ DD imagerel $L$SEH_begin_ecp_nistz256_point_doublex
+ DD imagerel $L$SEH_end_ecp_nistz256_point_doublex
+ DD imagerel $L$SEH_info_ecp_nistz256_point_doublex
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_point_addx
+ DD imagerel $L$SEH_end_ecp_nistz256_point_addx
+ DD imagerel $L$SEH_info_ecp_nistz256_point_addx
+
+ DD imagerel $L$SEH_begin_ecp_nistz256_point_add_affinex
+ DD imagerel $L$SEH_end_ecp_nistz256_point_add_affinex
+ DD imagerel $L$SEH_info_ecp_nistz256_point_add_affinex
+
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_ecp_nistz256_mul_by_2::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$mul_by_2_body,imagerel $L$mul_by_2_epilogue
+$L$SEH_info_ecp_nistz256_div_by_2::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$div_by_2_body,imagerel $L$div_by_2_epilogue
+$L$SEH_info_ecp_nistz256_mul_by_3::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$mul_by_3_body,imagerel $L$mul_by_3_epilogue
+$L$SEH_info_ecp_nistz256_add::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$add_body,imagerel $L$add_epilogue
+$L$SEH_info_ecp_nistz256_sub::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$sub_body,imagerel $L$sub_epilogue
+$L$SEH_info_ecp_nistz256_neg::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$neg_body,imagerel $L$neg_epilogue
+$L$SEH_info_ecp_nistz256_ord_mul_mont::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$ord_mul_body,imagerel $L$ord_mul_epilogue
+ DD 48,0
+$L$SEH_info_ecp_nistz256_ord_sqr_mont::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$ord_sqr_body,imagerel $L$ord_sqr_epilogue
+ DD 48,0
+$L$SEH_info_ecp_nistz256_ord_mul_montx::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$ord_mulx_body,imagerel $L$ord_mulx_epilogue
+ DD 48,0
+$L$SEH_info_ecp_nistz256_ord_sqr_montx::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$ord_sqrx_body,imagerel $L$ord_sqrx_epilogue
+ DD 48,0
+$L$SEH_info_ecp_nistz256_to_mont::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$mul_body,imagerel $L$mul_epilogue
+ DD 48,0
+$L$SEH_info_ecp_nistz256_mul_mont::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$mul_body,imagerel $L$mul_epilogue
+ DD 48,0
+$L$SEH_info_ecp_nistz256_sqr_mont::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$sqr_body,imagerel $L$sqr_epilogue
+ DD 48,0
+$L$SEH_info_ecp_nistz256_from_mont::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$from_body,imagerel $L$from_epilogue
+$L$SEH_info_ecp_nistz256_gather_wX::
+DB 001h,033h,016h,000h
+DB 033h,0f8h,009h,000h
+DB 02eh,0e8h,008h,000h
+DB 029h,0d8h,007h,000h
+DB 024h,0c8h,006h,000h
+DB 01fh,0b8h,005h,000h
+DB 01ah,0a8h,004h,000h
+DB 015h,098h,003h,000h
+DB 010h,088h,002h,000h
+DB 00ch,078h,001h,000h
+DB 008h,068h,000h,000h
+DB 004h,001h,015h,000h
+ALIGN 8
+$L$SEH_info_ecp_nistz256_avx2_gather_wX::
+DB 001h,036h,017h,00bh
+DB 036h,0f8h,009h,000h
+DB 031h,0e8h,008h,000h
+DB 02ch,0d8h,007h,000h
+DB 027h,0c8h,006h,000h
+DB 022h,0b8h,005h,000h
+DB 01dh,0a8h,004h,000h
+DB 018h,098h,003h,000h
+DB 013h,088h,002h,000h
+DB 00eh,078h,001h,000h
+DB 009h,068h,000h,000h
+DB 004h,001h,015h,000h
+DB 000h,0b3h,000h,000h
+ALIGN 8
+$L$SEH_info_ecp_nistz256_point_double::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$point_doubleq_body,imagerel $L$point_doubleq_epilogue
+ DD 32*5+56,0
+$L$SEH_info_ecp_nistz256_point_add::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$point_addq_body,imagerel $L$point_addq_epilogue
+ DD 32*18+56,0
+$L$SEH_info_ecp_nistz256_point_add_affine::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$add_affineq_body,imagerel $L$add_affineq_epilogue
+ DD 32*15+56,0
+ALIGN 8
+$L$SEH_info_ecp_nistz256_point_doublex::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$point_doublex_body,imagerel $L$point_doublex_epilogue
+ DD 32*5+56,0
+$L$SEH_info_ecp_nistz256_point_addx::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$point_addx_body,imagerel $L$point_addx_epilogue
+ DD 32*18+56,0
+$L$SEH_info_ecp_nistz256_point_add_affinex::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$add_affinex_body,imagerel $L$add_affinex_epilogue
+ DD 32*15+56,0
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/ec/x25519-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/ec/x25519-x86_64.masm
index 37662eccbb..3c23d0bc7f 100644
--- a/contrib/libs/openssl/asm/windows/crypto/ec/x25519-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/ec/x25519-x86_64.masm
@@ -1,1074 +1,1074 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-PUBLIC x25519_fe51_mul
-
-ALIGN 32
-x25519_fe51_mul PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_x25519_fe51_mul::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-40))+rsp]
-
-$L$fe51_mul_body::
-
- mov rax,QWORD PTR[rsi]
- mov r11,QWORD PTR[rdx]
- mov r12,QWORD PTR[8+rdx]
- mov r13,QWORD PTR[16+rdx]
- mov rbp,QWORD PTR[24+rdx]
- mov r14,QWORD PTR[32+rdx]
-
- mov QWORD PTR[32+rsp],rdi
- mov rdi,rax
- mul r11
- mov QWORD PTR[rsp],r11
- mov rbx,rax
- mov rax,rdi
- mov rcx,rdx
- mul r12
- mov QWORD PTR[8+rsp],r12
- mov r8,rax
- mov rax,rdi
- lea r15,QWORD PTR[r14*8+r14]
- mov r9,rdx
- mul r13
- mov QWORD PTR[16+rsp],r13
- mov r10,rax
- mov rax,rdi
- lea rdi,QWORD PTR[r15*2+r14]
- mov r11,rdx
- mul rbp
- mov r12,rax
- mov rax,QWORD PTR[rsi]
- mov r13,rdx
- mul r14
- mov r14,rax
- mov rax,QWORD PTR[8+rsi]
- mov r15,rdx
-
- mul rdi
- add rbx,rax
- mov rax,QWORD PTR[16+rsi]
- adc rcx,rdx
- mul rdi
- add r8,rax
- mov rax,QWORD PTR[24+rsi]
- adc r9,rdx
- mul rdi
- add r10,rax
- mov rax,QWORD PTR[32+rsi]
- adc r11,rdx
- mul rdi
- imul rdi,rbp,19
- add r12,rax
- mov rax,QWORD PTR[8+rsi]
- adc r13,rdx
- mul rbp
- mov rbp,QWORD PTR[16+rsp]
- add r14,rax
- mov rax,QWORD PTR[16+rsi]
- adc r15,rdx
-
- mul rdi
- add rbx,rax
- mov rax,QWORD PTR[24+rsi]
- adc rcx,rdx
- mul rdi
- add r8,rax
- mov rax,QWORD PTR[32+rsi]
- adc r9,rdx
- mul rdi
- imul rdi,rbp,19
- add r10,rax
- mov rax,QWORD PTR[8+rsi]
- adc r11,rdx
- mul rbp
- add r12,rax
- mov rax,QWORD PTR[16+rsi]
- adc r13,rdx
- mul rbp
- mov rbp,QWORD PTR[8+rsp]
- add r14,rax
- mov rax,QWORD PTR[24+rsi]
- adc r15,rdx
-
- mul rdi
- add rbx,rax
- mov rax,QWORD PTR[32+rsi]
- adc rcx,rdx
- mul rdi
- add r8,rax
- mov rax,QWORD PTR[8+rsi]
- adc r9,rdx
- mul rbp
- imul rdi,rbp,19
- add r10,rax
- mov rax,QWORD PTR[16+rsi]
- adc r11,rdx
- mul rbp
- add r12,rax
- mov rax,QWORD PTR[24+rsi]
- adc r13,rdx
- mul rbp
- mov rbp,QWORD PTR[rsp]
- add r14,rax
- mov rax,QWORD PTR[32+rsi]
- adc r15,rdx
-
- mul rdi
- add rbx,rax
- mov rax,QWORD PTR[8+rsi]
- adc rcx,rdx
- mul rbp
- add r8,rax
- mov rax,QWORD PTR[16+rsi]
- adc r9,rdx
- mul rbp
- add r10,rax
- mov rax,QWORD PTR[24+rsi]
- adc r11,rdx
- mul rbp
- add r12,rax
- mov rax,QWORD PTR[32+rsi]
- adc r13,rdx
- mul rbp
- add r14,rax
- adc r15,rdx
-
- mov rdi,QWORD PTR[32+rsp]
- jmp $L$reduce51
-$L$fe51_mul_epilogue::
-
-$L$SEH_end_x25519_fe51_mul::
-x25519_fe51_mul ENDP
-
-PUBLIC x25519_fe51_sqr
-
-ALIGN 32
-x25519_fe51_sqr PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_x25519_fe51_sqr::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-40))+rsp]
-
-$L$fe51_sqr_body::
-
- mov rax,QWORD PTR[rsi]
- mov r15,QWORD PTR[16+rsi]
- mov rbp,QWORD PTR[32+rsi]
-
- mov QWORD PTR[32+rsp],rdi
- lea r14,QWORD PTR[rax*1+rax]
- mul rax
- mov rbx,rax
- mov rax,QWORD PTR[8+rsi]
- mov rcx,rdx
- mul r14
- mov r8,rax
- mov rax,r15
- mov QWORD PTR[rsp],r15
- mov r9,rdx
- mul r14
- mov r10,rax
- mov rax,QWORD PTR[24+rsi]
- mov r11,rdx
- imul rdi,rbp,19
- mul r14
- mov r12,rax
- mov rax,rbp
- mov r13,rdx
- mul r14
- mov r14,rax
- mov rax,rbp
- mov r15,rdx
-
- mul rdi
- add r12,rax
- mov rax,QWORD PTR[8+rsi]
- adc r13,rdx
-
- mov rsi,QWORD PTR[24+rsi]
- lea rbp,QWORD PTR[rax*1+rax]
- mul rax
- add r10,rax
- mov rax,QWORD PTR[rsp]
- adc r11,rdx
- mul rbp
- add r12,rax
- mov rax,rbp
- adc r13,rdx
- mul rsi
- add r14,rax
- mov rax,rbp
- adc r15,rdx
- imul rbp,rsi,19
- mul rdi
- add rbx,rax
- lea rax,QWORD PTR[rsi*1+rsi]
- adc rcx,rdx
-
- mul rdi
- add r10,rax
- mov rax,rsi
- adc r11,rdx
- mul rbp
- add r8,rax
- mov rax,QWORD PTR[rsp]
- adc r9,rdx
-
- lea rsi,QWORD PTR[rax*1+rax]
- mul rax
- add r14,rax
- mov rax,rbp
- adc r15,rdx
- mul rsi
- add rbx,rax
- mov rax,rsi
- adc rcx,rdx
- mul rdi
- add r8,rax
- adc r9,rdx
-
- mov rdi,QWORD PTR[32+rsp]
- jmp $L$reduce51
-
-ALIGN 32
-$L$reduce51::
- mov rbp,07ffffffffffffh
-
- mov rdx,r10
- shr r10,51
- shl r11,13
- and rdx,rbp
- or r11,r10
- add r12,r11
- adc r13,0
-
- mov rax,rbx
- shr rbx,51
- shl rcx,13
- and rax,rbp
- or rcx,rbx
- add r8,rcx
- adc r9,0
-
- mov rbx,r12
- shr r12,51
- shl r13,13
- and rbx,rbp
- or r13,r12
- add r14,r13
- adc r15,0
-
- mov rcx,r8
- shr r8,51
- shl r9,13
- and rcx,rbp
- or r9,r8
- add rdx,r9
-
- mov r10,r14
- shr r14,51
- shl r15,13
- and r10,rbp
- or r15,r14
-
- lea r14,QWORD PTR[r15*8+r15]
- lea r15,QWORD PTR[r14*2+r15]
- add rax,r15
-
- mov r8,rdx
- and rdx,rbp
- shr r8,51
- add rbx,r8
-
- mov r9,rax
- and rax,rbp
- shr r9,51
- add rcx,r9
-
- mov QWORD PTR[rdi],rax
- mov QWORD PTR[8+rdi],rcx
- mov QWORD PTR[16+rdi],rdx
- mov QWORD PTR[24+rdi],rbx
- mov QWORD PTR[32+rdi],r10
-
- mov r15,QWORD PTR[40+rsp]
-
- mov r14,QWORD PTR[48+rsp]
-
- mov r13,QWORD PTR[56+rsp]
-
- mov r12,QWORD PTR[64+rsp]
-
- mov rbx,QWORD PTR[72+rsp]
-
- mov rbp,QWORD PTR[80+rsp]
-
- lea rsp,QWORD PTR[88+rsp]
-
-$L$fe51_sqr_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_x25519_fe51_sqr::
-x25519_fe51_sqr ENDP
-
-PUBLIC x25519_fe51_mul121666
-
-ALIGN 32
-x25519_fe51_mul121666 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_x25519_fe51_mul121666::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-40))+rsp]
-
-$L$fe51_mul121666_body::
- mov eax,121666
-
- mul QWORD PTR[rsi]
- mov rbx,rax
- mov eax,121666
- mov rcx,rdx
- mul QWORD PTR[8+rsi]
- mov r8,rax
- mov eax,121666
- mov r9,rdx
- mul QWORD PTR[16+rsi]
- mov r10,rax
- mov eax,121666
- mov r11,rdx
- mul QWORD PTR[24+rsi]
- mov r12,rax
- mov eax,121666
- mov r13,rdx
- mul QWORD PTR[32+rsi]
- mov r14,rax
- mov r15,rdx
-
- jmp $L$reduce51
-$L$fe51_mul121666_epilogue::
-
-$L$SEH_end_x25519_fe51_mul121666::
-x25519_fe51_mul121666 ENDP
-EXTERN OPENSSL_ia32cap_P:NEAR
-PUBLIC x25519_fe64_eligible
-
-ALIGN 32
-x25519_fe64_eligible PROC PUBLIC
-
- mov ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- xor eax,eax
- and ecx,080100h
- cmp ecx,080100h
- cmove eax,ecx
- DB 0F3h,0C3h ;repret
-
-x25519_fe64_eligible ENDP
-
-PUBLIC x25519_fe64_mul
-
-ALIGN 32
-x25519_fe64_mul PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_x25519_fe64_mul::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- push rdi
-
- lea rsp,QWORD PTR[((-16))+rsp]
-
-$L$fe64_mul_body::
-
- mov rax,rdx
- mov rbp,QWORD PTR[rdx]
- mov rdx,QWORD PTR[rsi]
- mov rcx,QWORD PTR[8+rax]
- mov r14,QWORD PTR[16+rax]
- mov r15,QWORD PTR[24+rax]
-
- mulx rax,r8,rbp
- xor edi,edi
- mulx rbx,r9,rcx
- adcx r9,rax
- mulx rax,r10,r14
- adcx r10,rbx
- mulx r12,r11,r15
- mov rdx,QWORD PTR[8+rsi]
- adcx r11,rax
- mov QWORD PTR[rsp],r14
- adcx r12,rdi
-
- mulx rbx,rax,rbp
- adox r9,rax
- adcx r10,rbx
- mulx rbx,rax,rcx
- adox r10,rax
- adcx r11,rbx
- mulx rbx,rax,r14
- adox r11,rax
- adcx r12,rbx
- mulx r13,rax,r15
- mov rdx,QWORD PTR[16+rsi]
- adox r12,rax
- adcx r13,rdi
- adox r13,rdi
-
- mulx rbx,rax,rbp
- adcx r10,rax
- adox r11,rbx
- mulx rbx,rax,rcx
- adcx r11,rax
- adox r12,rbx
- mulx rbx,rax,r14
- adcx r12,rax
- adox r13,rbx
- mulx r14,rax,r15
- mov rdx,QWORD PTR[24+rsi]
- adcx r13,rax
- adox r14,rdi
- adcx r14,rdi
-
- mulx rbx,rax,rbp
- adox r11,rax
- adcx r12,rbx
- mulx rbx,rax,rcx
- adox r12,rax
- adcx r13,rbx
- mulx rbx,rax,QWORD PTR[rsp]
- adox r13,rax
- adcx r14,rbx
- mulx r15,rax,r15
- mov edx,38
- adox r14,rax
- adcx r15,rdi
- adox r15,rdi
-
- jmp $L$reduce64
-$L$fe64_mul_epilogue::
-
-$L$SEH_end_x25519_fe64_mul::
-x25519_fe64_mul ENDP
-
-PUBLIC x25519_fe64_sqr
-
-ALIGN 32
-x25519_fe64_sqr PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_x25519_fe64_sqr::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- push rbp
-
- push rbx
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- push rdi
-
- lea rsp,QWORD PTR[((-16))+rsp]
-
-$L$fe64_sqr_body::
-
- mov rdx,QWORD PTR[rsi]
- mov rcx,QWORD PTR[8+rsi]
- mov rbp,QWORD PTR[16+rsi]
- mov rsi,QWORD PTR[24+rsi]
-
-
- mulx r15,r8,rdx
- mulx rax,r9,rcx
- xor edi,edi
- mulx rbx,r10,rbp
- adcx r10,rax
- mulx r12,r11,rsi
- mov rdx,rcx
- adcx r11,rbx
- adcx r12,rdi
-
-
- mulx rbx,rax,rbp
- adox r11,rax
- adcx r12,rbx
- mulx r13,rax,rsi
- mov rdx,rbp
- adox r12,rax
- adcx r13,rdi
-
-
- mulx r14,rax,rsi
- mov rdx,rcx
- adox r13,rax
- adcx r14,rdi
- adox r14,rdi
-
- adcx r9,r9
- adox r9,r15
- adcx r10,r10
- mulx rbx,rax,rdx
- mov rdx,rbp
- adcx r11,r11
- adox r10,rax
- adcx r12,r12
- adox r11,rbx
- mulx rbx,rax,rdx
- mov rdx,rsi
- adcx r13,r13
- adox r12,rax
- adcx r14,r14
- adox r13,rbx
- mulx r15,rax,rdx
- mov edx,38
- adox r14,rax
- adcx r15,rdi
- adox r15,rdi
- jmp $L$reduce64
-
-ALIGN 32
-$L$reduce64::
- mulx rbx,rax,r12
- adcx r8,rax
- adox r9,rbx
- mulx rbx,rax,r13
- adcx r9,rax
- adox r10,rbx
- mulx rbx,rax,r14
- adcx r10,rax
- adox r11,rbx
- mulx r12,rax,r15
- adcx r11,rax
- adox r12,rdi
- adcx r12,rdi
-
- mov rdi,QWORD PTR[16+rsp]
- imul r12,rdx
-
- add r8,r12
- adc r9,0
- adc r10,0
- adc r11,0
-
- sbb rax,rax
- and rax,38
-
- add r8,rax
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
- mov QWORD PTR[rdi],r8
-
- mov r15,QWORD PTR[24+rsp]
-
- mov r14,QWORD PTR[32+rsp]
-
- mov r13,QWORD PTR[40+rsp]
-
- mov r12,QWORD PTR[48+rsp]
-
- mov rbx,QWORD PTR[56+rsp]
-
- mov rbp,QWORD PTR[64+rsp]
-
- lea rsp,QWORD PTR[72+rsp]
-
-$L$fe64_sqr_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_x25519_fe64_sqr::
-x25519_fe64_sqr ENDP
-
-PUBLIC x25519_fe64_mul121666
-
-ALIGN 32
-x25519_fe64_mul121666 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_x25519_fe64_mul121666::
- mov rdi,rcx
- mov rsi,rdx
-
-
-$L$fe64_mul121666_body::
-
- mov edx,121666
- mulx rcx,r8,QWORD PTR[rsi]
- mulx rax,r9,QWORD PTR[8+rsi]
- add r9,rcx
- mulx rcx,r10,QWORD PTR[16+rsi]
- adc r10,rax
- mulx rax,r11,QWORD PTR[24+rsi]
- adc r11,rcx
- adc rax,0
-
- imul rax,rax,38
-
- add r8,rax
- adc r9,0
- adc r10,0
- adc r11,0
-
- sbb rax,rax
- and rax,38
-
- add r8,rax
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
- mov QWORD PTR[rdi],r8
-
-$L$fe64_mul121666_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_x25519_fe64_mul121666::
-x25519_fe64_mul121666 ENDP
-
-PUBLIC x25519_fe64_add
-
-ALIGN 32
-x25519_fe64_add PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_x25519_fe64_add::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-$L$fe64_add_body::
-
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[8+rsi]
- mov r10,QWORD PTR[16+rsi]
- mov r11,QWORD PTR[24+rsi]
-
- add r8,QWORD PTR[rdx]
- adc r9,QWORD PTR[8+rdx]
- adc r10,QWORD PTR[16+rdx]
- adc r11,QWORD PTR[24+rdx]
-
- sbb rax,rax
- and rax,38
-
- add r8,rax
- adc r9,0
- adc r10,0
- mov QWORD PTR[8+rdi],r9
- adc r11,0
- mov QWORD PTR[16+rdi],r10
- sbb rax,rax
- mov QWORD PTR[24+rdi],r11
- and rax,38
-
- add r8,rax
- mov QWORD PTR[rdi],r8
-
-$L$fe64_add_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_x25519_fe64_add::
-x25519_fe64_add ENDP
-
-PUBLIC x25519_fe64_sub
-
-ALIGN 32
-x25519_fe64_sub PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_x25519_fe64_sub::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-$L$fe64_sub_body::
-
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[8+rsi]
- mov r10,QWORD PTR[16+rsi]
- mov r11,QWORD PTR[24+rsi]
-
- sub r8,QWORD PTR[rdx]
- sbb r9,QWORD PTR[8+rdx]
- sbb r10,QWORD PTR[16+rdx]
- sbb r11,QWORD PTR[24+rdx]
-
- sbb rax,rax
- and rax,38
-
- sub r8,rax
- sbb r9,0
- sbb r10,0
- mov QWORD PTR[8+rdi],r9
- sbb r11,0
- mov QWORD PTR[16+rdi],r10
- sbb rax,rax
- mov QWORD PTR[24+rdi],r11
- and rax,38
-
- sub r8,rax
- mov QWORD PTR[rdi],r8
-
-$L$fe64_sub_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_x25519_fe64_sub::
-x25519_fe64_sub ENDP
-
-PUBLIC x25519_fe64_tobytes
-
-ALIGN 32
-x25519_fe64_tobytes PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_x25519_fe64_tobytes::
- mov rdi,rcx
- mov rsi,rdx
-
-
-$L$fe64_to_body::
-
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[8+rsi]
- mov r10,QWORD PTR[16+rsi]
- mov r11,QWORD PTR[24+rsi]
-
-
- lea rax,QWORD PTR[r11*1+r11]
- sar r11,63
- shr rax,1
- and r11,19
- add r11,19
-
- add r8,r11
- adc r9,0
- adc r10,0
- adc rax,0
-
- lea r11,QWORD PTR[rax*1+rax]
- sar rax,63
- shr r11,1
- not rax
- and rax,19
-
- sub r8,rax
- sbb r9,0
- sbb r10,0
- sbb r11,0
-
- mov QWORD PTR[rdi],r8
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
-
-$L$fe64_to_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_x25519_fe64_tobytes::
-x25519_fe64_tobytes ENDP
-DB 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101
-DB 115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82
-DB 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112
-DB 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-
-ALIGN 16
-short_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
- jmp $L$common_seh_tail
-short_handler ENDP
-
-
-ALIGN 16
-full_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- mov r10d,DWORD PTR[8+r11]
- lea rax,QWORD PTR[r10*1+rax]
-
- mov rbp,QWORD PTR[((-8))+rax]
- mov rbx,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-full_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_x25519_fe51_mul
- DD imagerel $L$SEH_end_x25519_fe51_mul
- DD imagerel $L$SEH_info_x25519_fe51_mul
-
- DD imagerel $L$SEH_begin_x25519_fe51_sqr
- DD imagerel $L$SEH_end_x25519_fe51_sqr
- DD imagerel $L$SEH_info_x25519_fe51_sqr
-
- DD imagerel $L$SEH_begin_x25519_fe51_mul121666
- DD imagerel $L$SEH_end_x25519_fe51_mul121666
- DD imagerel $L$SEH_info_x25519_fe51_mul121666
- DD imagerel $L$SEH_begin_x25519_fe64_mul
- DD imagerel $L$SEH_end_x25519_fe64_mul
- DD imagerel $L$SEH_info_x25519_fe64_mul
-
- DD imagerel $L$SEH_begin_x25519_fe64_sqr
- DD imagerel $L$SEH_end_x25519_fe64_sqr
- DD imagerel $L$SEH_info_x25519_fe64_sqr
-
- DD imagerel $L$SEH_begin_x25519_fe64_mul121666
- DD imagerel $L$SEH_end_x25519_fe64_mul121666
- DD imagerel $L$SEH_info_x25519_fe64_mul121666
-
- DD imagerel $L$SEH_begin_x25519_fe64_add
- DD imagerel $L$SEH_end_x25519_fe64_add
- DD imagerel $L$SEH_info_x25519_fe64_add
-
- DD imagerel $L$SEH_begin_x25519_fe64_sub
- DD imagerel $L$SEH_end_x25519_fe64_sub
- DD imagerel $L$SEH_info_x25519_fe64_sub
-
- DD imagerel $L$SEH_begin_x25519_fe64_tobytes
- DD imagerel $L$SEH_end_x25519_fe64_tobytes
- DD imagerel $L$SEH_info_x25519_fe64_tobytes
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_x25519_fe51_mul::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$fe51_mul_body,imagerel $L$fe51_mul_epilogue
- DD 88,0
-$L$SEH_info_x25519_fe51_sqr::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$fe51_sqr_body,imagerel $L$fe51_sqr_epilogue
- DD 88,0
-$L$SEH_info_x25519_fe51_mul121666::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$fe51_mul121666_body,imagerel $L$fe51_mul121666_epilogue
- DD 88,0
-$L$SEH_info_x25519_fe64_mul::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$fe64_mul_body,imagerel $L$fe64_mul_epilogue
- DD 72,0
-$L$SEH_info_x25519_fe64_sqr::
-DB 9,0,0,0
- DD imagerel full_handler
- DD imagerel $L$fe64_sqr_body,imagerel $L$fe64_sqr_epilogue
- DD 72,0
-$L$SEH_info_x25519_fe64_mul121666::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$fe64_mul121666_body,imagerel $L$fe64_mul121666_epilogue
-$L$SEH_info_x25519_fe64_add::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$fe64_add_body,imagerel $L$fe64_add_epilogue
-$L$SEH_info_x25519_fe64_sub::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$fe64_sub_body,imagerel $L$fe64_sub_epilogue
-$L$SEH_info_x25519_fe64_tobytes::
-DB 9,0,0,0
- DD imagerel short_handler
- DD imagerel $L$fe64_to_body,imagerel $L$fe64_to_epilogue
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+PUBLIC x25519_fe51_mul
+
+ALIGN 32
+x25519_fe51_mul PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_x25519_fe51_mul::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-40))+rsp]
+
+$L$fe51_mul_body::
+
+ mov rax,QWORD PTR[rsi]
+ mov r11,QWORD PTR[rdx]
+ mov r12,QWORD PTR[8+rdx]
+ mov r13,QWORD PTR[16+rdx]
+ mov rbp,QWORD PTR[24+rdx]
+ mov r14,QWORD PTR[32+rdx]
+
+ mov QWORD PTR[32+rsp],rdi
+ mov rdi,rax
+ mul r11
+ mov QWORD PTR[rsp],r11
+ mov rbx,rax
+ mov rax,rdi
+ mov rcx,rdx
+ mul r12
+ mov QWORD PTR[8+rsp],r12
+ mov r8,rax
+ mov rax,rdi
+ lea r15,QWORD PTR[r14*8+r14]
+ mov r9,rdx
+ mul r13
+ mov QWORD PTR[16+rsp],r13
+ mov r10,rax
+ mov rax,rdi
+ lea rdi,QWORD PTR[r15*2+r14]
+ mov r11,rdx
+ mul rbp
+ mov r12,rax
+ mov rax,QWORD PTR[rsi]
+ mov r13,rdx
+ mul r14
+ mov r14,rax
+ mov rax,QWORD PTR[8+rsi]
+ mov r15,rdx
+
+ mul rdi
+ add rbx,rax
+ mov rax,QWORD PTR[16+rsi]
+ adc rcx,rdx
+ mul rdi
+ add r8,rax
+ mov rax,QWORD PTR[24+rsi]
+ adc r9,rdx
+ mul rdi
+ add r10,rax
+ mov rax,QWORD PTR[32+rsi]
+ adc r11,rdx
+ mul rdi
+ imul rdi,rbp,19
+ add r12,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc r13,rdx
+ mul rbp
+ mov rbp,QWORD PTR[16+rsp]
+ add r14,rax
+ mov rax,QWORD PTR[16+rsi]
+ adc r15,rdx
+
+ mul rdi
+ add rbx,rax
+ mov rax,QWORD PTR[24+rsi]
+ adc rcx,rdx
+ mul rdi
+ add r8,rax
+ mov rax,QWORD PTR[32+rsi]
+ adc r9,rdx
+ mul rdi
+ imul rdi,rbp,19
+ add r10,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc r11,rdx
+ mul rbp
+ add r12,rax
+ mov rax,QWORD PTR[16+rsi]
+ adc r13,rdx
+ mul rbp
+ mov rbp,QWORD PTR[8+rsp]
+ add r14,rax
+ mov rax,QWORD PTR[24+rsi]
+ adc r15,rdx
+
+ mul rdi
+ add rbx,rax
+ mov rax,QWORD PTR[32+rsi]
+ adc rcx,rdx
+ mul rdi
+ add r8,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc r9,rdx
+ mul rbp
+ imul rdi,rbp,19
+ add r10,rax
+ mov rax,QWORD PTR[16+rsi]
+ adc r11,rdx
+ mul rbp
+ add r12,rax
+ mov rax,QWORD PTR[24+rsi]
+ adc r13,rdx
+ mul rbp
+ mov rbp,QWORD PTR[rsp]
+ add r14,rax
+ mov rax,QWORD PTR[32+rsi]
+ adc r15,rdx
+
+ mul rdi
+ add rbx,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc rcx,rdx
+ mul rbp
+ add r8,rax
+ mov rax,QWORD PTR[16+rsi]
+ adc r9,rdx
+ mul rbp
+ add r10,rax
+ mov rax,QWORD PTR[24+rsi]
+ adc r11,rdx
+ mul rbp
+ add r12,rax
+ mov rax,QWORD PTR[32+rsi]
+ adc r13,rdx
+ mul rbp
+ add r14,rax
+ adc r15,rdx
+
+ mov rdi,QWORD PTR[32+rsp]
+ jmp $L$reduce51
+$L$fe51_mul_epilogue::
+
+$L$SEH_end_x25519_fe51_mul::
+x25519_fe51_mul ENDP
+
+PUBLIC x25519_fe51_sqr
+
+ALIGN 32
+x25519_fe51_sqr PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_x25519_fe51_sqr::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-40))+rsp]
+
+$L$fe51_sqr_body::
+
+ mov rax,QWORD PTR[rsi]
+ mov r15,QWORD PTR[16+rsi]
+ mov rbp,QWORD PTR[32+rsi]
+
+ mov QWORD PTR[32+rsp],rdi
+ lea r14,QWORD PTR[rax*1+rax]
+ mul rax
+ mov rbx,rax
+ mov rax,QWORD PTR[8+rsi]
+ mov rcx,rdx
+ mul r14
+ mov r8,rax
+ mov rax,r15
+ mov QWORD PTR[rsp],r15
+ mov r9,rdx
+ mul r14
+ mov r10,rax
+ mov rax,QWORD PTR[24+rsi]
+ mov r11,rdx
+ imul rdi,rbp,19
+ mul r14
+ mov r12,rax
+ mov rax,rbp
+ mov r13,rdx
+ mul r14
+ mov r14,rax
+ mov rax,rbp
+ mov r15,rdx
+
+ mul rdi
+ add r12,rax
+ mov rax,QWORD PTR[8+rsi]
+ adc r13,rdx
+
+ mov rsi,QWORD PTR[24+rsi]
+ lea rbp,QWORD PTR[rax*1+rax]
+ mul rax
+ add r10,rax
+ mov rax,QWORD PTR[rsp]
+ adc r11,rdx
+ mul rbp
+ add r12,rax
+ mov rax,rbp
+ adc r13,rdx
+ mul rsi
+ add r14,rax
+ mov rax,rbp
+ adc r15,rdx
+ imul rbp,rsi,19
+ mul rdi
+ add rbx,rax
+ lea rax,QWORD PTR[rsi*1+rsi]
+ adc rcx,rdx
+
+ mul rdi
+ add r10,rax
+ mov rax,rsi
+ adc r11,rdx
+ mul rbp
+ add r8,rax
+ mov rax,QWORD PTR[rsp]
+ adc r9,rdx
+
+ lea rsi,QWORD PTR[rax*1+rax]
+ mul rax
+ add r14,rax
+ mov rax,rbp
+ adc r15,rdx
+ mul rsi
+ add rbx,rax
+ mov rax,rsi
+ adc rcx,rdx
+ mul rdi
+ add r8,rax
+ adc r9,rdx
+
+ mov rdi,QWORD PTR[32+rsp]
+ jmp $L$reduce51
+
+ALIGN 32
+$L$reduce51::
+ mov rbp,07ffffffffffffh
+
+ mov rdx,r10
+ shr r10,51
+ shl r11,13
+ and rdx,rbp
+ or r11,r10
+ add r12,r11
+ adc r13,0
+
+ mov rax,rbx
+ shr rbx,51
+ shl rcx,13
+ and rax,rbp
+ or rcx,rbx
+ add r8,rcx
+ adc r9,0
+
+ mov rbx,r12
+ shr r12,51
+ shl r13,13
+ and rbx,rbp
+ or r13,r12
+ add r14,r13
+ adc r15,0
+
+ mov rcx,r8
+ shr r8,51
+ shl r9,13
+ and rcx,rbp
+ or r9,r8
+ add rdx,r9
+
+ mov r10,r14
+ shr r14,51
+ shl r15,13
+ and r10,rbp
+ or r15,r14
+
+ lea r14,QWORD PTR[r15*8+r15]
+ lea r15,QWORD PTR[r14*2+r15]
+ add rax,r15
+
+ mov r8,rdx
+ and rdx,rbp
+ shr r8,51
+ add rbx,r8
+
+ mov r9,rax
+ and rax,rbp
+ shr r9,51
+ add rcx,r9
+
+ mov QWORD PTR[rdi],rax
+ mov QWORD PTR[8+rdi],rcx
+ mov QWORD PTR[16+rdi],rdx
+ mov QWORD PTR[24+rdi],rbx
+ mov QWORD PTR[32+rdi],r10
+
+ mov r15,QWORD PTR[40+rsp]
+
+ mov r14,QWORD PTR[48+rsp]
+
+ mov r13,QWORD PTR[56+rsp]
+
+ mov r12,QWORD PTR[64+rsp]
+
+ mov rbx,QWORD PTR[72+rsp]
+
+ mov rbp,QWORD PTR[80+rsp]
+
+ lea rsp,QWORD PTR[88+rsp]
+
+$L$fe51_sqr_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_x25519_fe51_sqr::
+x25519_fe51_sqr ENDP
+
+PUBLIC x25519_fe51_mul121666
+
+ALIGN 32
+x25519_fe51_mul121666 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_x25519_fe51_mul121666::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-40))+rsp]
+
+$L$fe51_mul121666_body::
+ mov eax,121666
+
+ mul QWORD PTR[rsi]
+ mov rbx,rax
+ mov eax,121666
+ mov rcx,rdx
+ mul QWORD PTR[8+rsi]
+ mov r8,rax
+ mov eax,121666
+ mov r9,rdx
+ mul QWORD PTR[16+rsi]
+ mov r10,rax
+ mov eax,121666
+ mov r11,rdx
+ mul QWORD PTR[24+rsi]
+ mov r12,rax
+ mov eax,121666
+ mov r13,rdx
+ mul QWORD PTR[32+rsi]
+ mov r14,rax
+ mov r15,rdx
+
+ jmp $L$reduce51
+$L$fe51_mul121666_epilogue::
+
+$L$SEH_end_x25519_fe51_mul121666::
+x25519_fe51_mul121666 ENDP
+EXTERN OPENSSL_ia32cap_P:NEAR
+PUBLIC x25519_fe64_eligible
+
+ALIGN 32
+x25519_fe64_eligible PROC PUBLIC
+
+ mov ecx,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ xor eax,eax
+ and ecx,080100h
+ cmp ecx,080100h
+ cmove eax,ecx
+ DB 0F3h,0C3h ;repret
+
+x25519_fe64_eligible ENDP
+
+PUBLIC x25519_fe64_mul
+
+ALIGN 32
+x25519_fe64_mul PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_x25519_fe64_mul::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ push rdi
+
+ lea rsp,QWORD PTR[((-16))+rsp]
+
+$L$fe64_mul_body::
+
+ mov rax,rdx
+ mov rbp,QWORD PTR[rdx]
+ mov rdx,QWORD PTR[rsi]
+ mov rcx,QWORD PTR[8+rax]
+ mov r14,QWORD PTR[16+rax]
+ mov r15,QWORD PTR[24+rax]
+
+ mulx rax,r8,rbp
+ xor edi,edi
+ mulx rbx,r9,rcx
+ adcx r9,rax
+ mulx rax,r10,r14
+ adcx r10,rbx
+ mulx r12,r11,r15
+ mov rdx,QWORD PTR[8+rsi]
+ adcx r11,rax
+ mov QWORD PTR[rsp],r14
+ adcx r12,rdi
+
+ mulx rbx,rax,rbp
+ adox r9,rax
+ adcx r10,rbx
+ mulx rbx,rax,rcx
+ adox r10,rax
+ adcx r11,rbx
+ mulx rbx,rax,r14
+ adox r11,rax
+ adcx r12,rbx
+ mulx r13,rax,r15
+ mov rdx,QWORD PTR[16+rsi]
+ adox r12,rax
+ adcx r13,rdi
+ adox r13,rdi
+
+ mulx rbx,rax,rbp
+ adcx r10,rax
+ adox r11,rbx
+ mulx rbx,rax,rcx
+ adcx r11,rax
+ adox r12,rbx
+ mulx rbx,rax,r14
+ adcx r12,rax
+ adox r13,rbx
+ mulx r14,rax,r15
+ mov rdx,QWORD PTR[24+rsi]
+ adcx r13,rax
+ adox r14,rdi
+ adcx r14,rdi
+
+ mulx rbx,rax,rbp
+ adox r11,rax
+ adcx r12,rbx
+ mulx rbx,rax,rcx
+ adox r12,rax
+ adcx r13,rbx
+ mulx rbx,rax,QWORD PTR[rsp]
+ adox r13,rax
+ adcx r14,rbx
+ mulx r15,rax,r15
+ mov edx,38
+ adox r14,rax
+ adcx r15,rdi
+ adox r15,rdi
+
+ jmp $L$reduce64
+$L$fe64_mul_epilogue::
+
+$L$SEH_end_x25519_fe64_mul::
+x25519_fe64_mul ENDP
+
+PUBLIC x25519_fe64_sqr
+
+ALIGN 32
+x25519_fe64_sqr PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_x25519_fe64_sqr::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ push rdi
+
+ lea rsp,QWORD PTR[((-16))+rsp]
+
+$L$fe64_sqr_body::
+
+ mov rdx,QWORD PTR[rsi]
+ mov rcx,QWORD PTR[8+rsi]
+ mov rbp,QWORD PTR[16+rsi]
+ mov rsi,QWORD PTR[24+rsi]
+
+
+ mulx r15,r8,rdx
+ mulx rax,r9,rcx
+ xor edi,edi
+ mulx rbx,r10,rbp
+ adcx r10,rax
+ mulx r12,r11,rsi
+ mov rdx,rcx
+ adcx r11,rbx
+ adcx r12,rdi
+
+
+ mulx rbx,rax,rbp
+ adox r11,rax
+ adcx r12,rbx
+ mulx r13,rax,rsi
+ mov rdx,rbp
+ adox r12,rax
+ adcx r13,rdi
+
+
+ mulx r14,rax,rsi
+ mov rdx,rcx
+ adox r13,rax
+ adcx r14,rdi
+ adox r14,rdi
+
+ adcx r9,r9
+ adox r9,r15
+ adcx r10,r10
+ mulx rbx,rax,rdx
+ mov rdx,rbp
+ adcx r11,r11
+ adox r10,rax
+ adcx r12,r12
+ adox r11,rbx
+ mulx rbx,rax,rdx
+ mov rdx,rsi
+ adcx r13,r13
+ adox r12,rax
+ adcx r14,r14
+ adox r13,rbx
+ mulx r15,rax,rdx
+ mov edx,38
+ adox r14,rax
+ adcx r15,rdi
+ adox r15,rdi
+ jmp $L$reduce64
+
+ALIGN 32
+$L$reduce64::
+ mulx rbx,rax,r12
+ adcx r8,rax
+ adox r9,rbx
+ mulx rbx,rax,r13
+ adcx r9,rax
+ adox r10,rbx
+ mulx rbx,rax,r14
+ adcx r10,rax
+ adox r11,rbx
+ mulx r12,rax,r15
+ adcx r11,rax
+ adox r12,rdi
+ adcx r12,rdi
+
+ mov rdi,QWORD PTR[16+rsp]
+ imul r12,rdx
+
+ add r8,r12
+ adc r9,0
+ adc r10,0
+ adc r11,0
+
+ sbb rax,rax
+ and rax,38
+
+ add r8,rax
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+ mov QWORD PTR[rdi],r8
+
+ mov r15,QWORD PTR[24+rsp]
+
+ mov r14,QWORD PTR[32+rsp]
+
+ mov r13,QWORD PTR[40+rsp]
+
+ mov r12,QWORD PTR[48+rsp]
+
+ mov rbx,QWORD PTR[56+rsp]
+
+ mov rbp,QWORD PTR[64+rsp]
+
+ lea rsp,QWORD PTR[72+rsp]
+
+$L$fe64_sqr_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_x25519_fe64_sqr::
+x25519_fe64_sqr ENDP
+
+PUBLIC x25519_fe64_mul121666
+
+ALIGN 32
+x25519_fe64_mul121666 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_x25519_fe64_mul121666::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+$L$fe64_mul121666_body::
+
+ mov edx,121666
+ mulx rcx,r8,QWORD PTR[rsi]
+ mulx rax,r9,QWORD PTR[8+rsi]
+ add r9,rcx
+ mulx rcx,r10,QWORD PTR[16+rsi]
+ adc r10,rax
+ mulx rax,r11,QWORD PTR[24+rsi]
+ adc r11,rcx
+ adc rax,0
+
+ imul rax,rax,38
+
+ add r8,rax
+ adc r9,0
+ adc r10,0
+ adc r11,0
+
+ sbb rax,rax
+ and rax,38
+
+ add r8,rax
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+ mov QWORD PTR[rdi],r8
+
+$L$fe64_mul121666_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_x25519_fe64_mul121666::
+x25519_fe64_mul121666 ENDP
+
+PUBLIC x25519_fe64_add
+
+ALIGN 32
+x25519_fe64_add PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_x25519_fe64_add::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+$L$fe64_add_body::
+
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[8+rsi]
+ mov r10,QWORD PTR[16+rsi]
+ mov r11,QWORD PTR[24+rsi]
+
+ add r8,QWORD PTR[rdx]
+ adc r9,QWORD PTR[8+rdx]
+ adc r10,QWORD PTR[16+rdx]
+ adc r11,QWORD PTR[24+rdx]
+
+ sbb rax,rax
+ and rax,38
+
+ add r8,rax
+ adc r9,0
+ adc r10,0
+ mov QWORD PTR[8+rdi],r9
+ adc r11,0
+ mov QWORD PTR[16+rdi],r10
+ sbb rax,rax
+ mov QWORD PTR[24+rdi],r11
+ and rax,38
+
+ add r8,rax
+ mov QWORD PTR[rdi],r8
+
+$L$fe64_add_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_x25519_fe64_add::
+x25519_fe64_add ENDP
+
+PUBLIC x25519_fe64_sub
+
+ALIGN 32
+x25519_fe64_sub PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_x25519_fe64_sub::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+$L$fe64_sub_body::
+
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[8+rsi]
+ mov r10,QWORD PTR[16+rsi]
+ mov r11,QWORD PTR[24+rsi]
+
+ sub r8,QWORD PTR[rdx]
+ sbb r9,QWORD PTR[8+rdx]
+ sbb r10,QWORD PTR[16+rdx]
+ sbb r11,QWORD PTR[24+rdx]
+
+ sbb rax,rax
+ and rax,38
+
+ sub r8,rax
+ sbb r9,0
+ sbb r10,0
+ mov QWORD PTR[8+rdi],r9
+ sbb r11,0
+ mov QWORD PTR[16+rdi],r10
+ sbb rax,rax
+ mov QWORD PTR[24+rdi],r11
+ and rax,38
+
+ sub r8,rax
+ mov QWORD PTR[rdi],r8
+
+$L$fe64_sub_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_x25519_fe64_sub::
+x25519_fe64_sub ENDP
+
+PUBLIC x25519_fe64_tobytes
+
+ALIGN 32
+x25519_fe64_tobytes PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_x25519_fe64_tobytes::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+$L$fe64_to_body::
+
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[8+rsi]
+ mov r10,QWORD PTR[16+rsi]
+ mov r11,QWORD PTR[24+rsi]
+
+
+ lea rax,QWORD PTR[r11*1+r11]
+ sar r11,63
+ shr rax,1
+ and r11,19
+ add r11,19
+
+ add r8,r11
+ adc r9,0
+ adc r10,0
+ adc rax,0
+
+ lea r11,QWORD PTR[rax*1+rax]
+ sar rax,63
+ shr r11,1
+ not rax
+ and rax,19
+
+ sub r8,rax
+ sbb r9,0
+ sbb r10,0
+ sbb r11,0
+
+ mov QWORD PTR[rdi],r8
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+
+$L$fe64_to_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_x25519_fe64_tobytes::
+x25519_fe64_tobytes ENDP
+DB 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101
+DB 115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82
+DB 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112
+DB 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+
+ALIGN 16
+short_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+ jmp $L$common_seh_tail
+short_handler ENDP
+
+
+ALIGN 16
+full_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ mov r10d,DWORD PTR[8+r11]
+ lea rax,QWORD PTR[r10*1+rax]
+
+ mov rbp,QWORD PTR[((-8))+rax]
+ mov rbx,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+full_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_x25519_fe51_mul
+ DD imagerel $L$SEH_end_x25519_fe51_mul
+ DD imagerel $L$SEH_info_x25519_fe51_mul
+
+ DD imagerel $L$SEH_begin_x25519_fe51_sqr
+ DD imagerel $L$SEH_end_x25519_fe51_sqr
+ DD imagerel $L$SEH_info_x25519_fe51_sqr
+
+ DD imagerel $L$SEH_begin_x25519_fe51_mul121666
+ DD imagerel $L$SEH_end_x25519_fe51_mul121666
+ DD imagerel $L$SEH_info_x25519_fe51_mul121666
+ DD imagerel $L$SEH_begin_x25519_fe64_mul
+ DD imagerel $L$SEH_end_x25519_fe64_mul
+ DD imagerel $L$SEH_info_x25519_fe64_mul
+
+ DD imagerel $L$SEH_begin_x25519_fe64_sqr
+ DD imagerel $L$SEH_end_x25519_fe64_sqr
+ DD imagerel $L$SEH_info_x25519_fe64_sqr
+
+ DD imagerel $L$SEH_begin_x25519_fe64_mul121666
+ DD imagerel $L$SEH_end_x25519_fe64_mul121666
+ DD imagerel $L$SEH_info_x25519_fe64_mul121666
+
+ DD imagerel $L$SEH_begin_x25519_fe64_add
+ DD imagerel $L$SEH_end_x25519_fe64_add
+ DD imagerel $L$SEH_info_x25519_fe64_add
+
+ DD imagerel $L$SEH_begin_x25519_fe64_sub
+ DD imagerel $L$SEH_end_x25519_fe64_sub
+ DD imagerel $L$SEH_info_x25519_fe64_sub
+
+ DD imagerel $L$SEH_begin_x25519_fe64_tobytes
+ DD imagerel $L$SEH_end_x25519_fe64_tobytes
+ DD imagerel $L$SEH_info_x25519_fe64_tobytes
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_x25519_fe51_mul::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$fe51_mul_body,imagerel $L$fe51_mul_epilogue
+ DD 88,0
+$L$SEH_info_x25519_fe51_sqr::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$fe51_sqr_body,imagerel $L$fe51_sqr_epilogue
+ DD 88,0
+$L$SEH_info_x25519_fe51_mul121666::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$fe51_mul121666_body,imagerel $L$fe51_mul121666_epilogue
+ DD 88,0
+$L$SEH_info_x25519_fe64_mul::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$fe64_mul_body,imagerel $L$fe64_mul_epilogue
+ DD 72,0
+$L$SEH_info_x25519_fe64_sqr::
+DB 9,0,0,0
+ DD imagerel full_handler
+ DD imagerel $L$fe64_sqr_body,imagerel $L$fe64_sqr_epilogue
+ DD 72,0
+$L$SEH_info_x25519_fe64_mul121666::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$fe64_mul121666_body,imagerel $L$fe64_mul121666_epilogue
+$L$SEH_info_x25519_fe64_add::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$fe64_add_body,imagerel $L$fe64_add_epilogue
+$L$SEH_info_x25519_fe64_sub::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$fe64_sub_body,imagerel $L$fe64_sub_epilogue
+$L$SEH_info_x25519_fe64_tobytes::
+DB 9,0,0,0
+ DD imagerel short_handler
+ DD imagerel $L$fe64_to_body,imagerel $L$fe64_to_epilogue
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/md5/md5-586.masm b/contrib/libs/openssl/asm/windows/crypto/md5/md5-586.masm
index f6257caf4f..c183c2506d 100644
--- a/contrib/libs/openssl/asm/windows/crypto/md5/md5-586.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/md5/md5-586.masm
@@ -1,688 +1,688 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-ALIGN 16
-_md5_block_asm_data_order PROC PUBLIC
-$L_md5_block_asm_data_order_begin::
- push esi
- push edi
- mov edi,DWORD PTR 12[esp]
- mov esi,DWORD PTR 16[esp]
- mov ecx,DWORD PTR 20[esp]
- push ebp
- shl ecx,6
- push ebx
- add ecx,esi
- sub ecx,64
- mov eax,DWORD PTR [edi]
- push ecx
- mov ebx,DWORD PTR 4[edi]
- mov ecx,DWORD PTR 8[edi]
- mov edx,DWORD PTR 12[edi]
-$L000start:
- ;
- ; R0 section
- mov edi,ecx
- mov ebp,DWORD PTR [esi]
- ; R0 0
- xor edi,edx
- and edi,ebx
- lea eax,DWORD PTR 3614090360[ebp*1+eax]
- xor edi,edx
- mov ebp,DWORD PTR 4[esi]
- add eax,edi
- rol eax,7
- mov edi,ebx
- add eax,ebx
- ; R0 1
- xor edi,ecx
- and edi,eax
- lea edx,DWORD PTR 3905402710[ebp*1+edx]
- xor edi,ecx
- mov ebp,DWORD PTR 8[esi]
- add edx,edi
- rol edx,12
- mov edi,eax
- add edx,eax
- ; R0 2
- xor edi,ebx
- and edi,edx
- lea ecx,DWORD PTR 606105819[ebp*1+ecx]
- xor edi,ebx
- mov ebp,DWORD PTR 12[esi]
- add ecx,edi
- rol ecx,17
- mov edi,edx
- add ecx,edx
- ; R0 3
- xor edi,eax
- and edi,ecx
- lea ebx,DWORD PTR 3250441966[ebp*1+ebx]
- xor edi,eax
- mov ebp,DWORD PTR 16[esi]
- add ebx,edi
- rol ebx,22
- mov edi,ecx
- add ebx,ecx
- ; R0 4
- xor edi,edx
- and edi,ebx
- lea eax,DWORD PTR 4118548399[ebp*1+eax]
- xor edi,edx
- mov ebp,DWORD PTR 20[esi]
- add eax,edi
- rol eax,7
- mov edi,ebx
- add eax,ebx
- ; R0 5
- xor edi,ecx
- and edi,eax
- lea edx,DWORD PTR 1200080426[ebp*1+edx]
- xor edi,ecx
- mov ebp,DWORD PTR 24[esi]
- add edx,edi
- rol edx,12
- mov edi,eax
- add edx,eax
- ; R0 6
- xor edi,ebx
- and edi,edx
- lea ecx,DWORD PTR 2821735955[ebp*1+ecx]
- xor edi,ebx
- mov ebp,DWORD PTR 28[esi]
- add ecx,edi
- rol ecx,17
- mov edi,edx
- add ecx,edx
- ; R0 7
- xor edi,eax
- and edi,ecx
- lea ebx,DWORD PTR 4249261313[ebp*1+ebx]
- xor edi,eax
- mov ebp,DWORD PTR 32[esi]
- add ebx,edi
- rol ebx,22
- mov edi,ecx
- add ebx,ecx
- ; R0 8
- xor edi,edx
- and edi,ebx
- lea eax,DWORD PTR 1770035416[ebp*1+eax]
- xor edi,edx
- mov ebp,DWORD PTR 36[esi]
- add eax,edi
- rol eax,7
- mov edi,ebx
- add eax,ebx
- ; R0 9
- xor edi,ecx
- and edi,eax
- lea edx,DWORD PTR 2336552879[ebp*1+edx]
- xor edi,ecx
- mov ebp,DWORD PTR 40[esi]
- add edx,edi
- rol edx,12
- mov edi,eax
- add edx,eax
- ; R0 10
- xor edi,ebx
- and edi,edx
- lea ecx,DWORD PTR 4294925233[ebp*1+ecx]
- xor edi,ebx
- mov ebp,DWORD PTR 44[esi]
- add ecx,edi
- rol ecx,17
- mov edi,edx
- add ecx,edx
- ; R0 11
- xor edi,eax
- and edi,ecx
- lea ebx,DWORD PTR 2304563134[ebp*1+ebx]
- xor edi,eax
- mov ebp,DWORD PTR 48[esi]
- add ebx,edi
- rol ebx,22
- mov edi,ecx
- add ebx,ecx
- ; R0 12
- xor edi,edx
- and edi,ebx
- lea eax,DWORD PTR 1804603682[ebp*1+eax]
- xor edi,edx
- mov ebp,DWORD PTR 52[esi]
- add eax,edi
- rol eax,7
- mov edi,ebx
- add eax,ebx
- ; R0 13
- xor edi,ecx
- and edi,eax
- lea edx,DWORD PTR 4254626195[ebp*1+edx]
- xor edi,ecx
- mov ebp,DWORD PTR 56[esi]
- add edx,edi
- rol edx,12
- mov edi,eax
- add edx,eax
- ; R0 14
- xor edi,ebx
- and edi,edx
- lea ecx,DWORD PTR 2792965006[ebp*1+ecx]
- xor edi,ebx
- mov ebp,DWORD PTR 60[esi]
- add ecx,edi
- rol ecx,17
- mov edi,edx
- add ecx,edx
- ; R0 15
- xor edi,eax
- and edi,ecx
- lea ebx,DWORD PTR 1236535329[ebp*1+ebx]
- xor edi,eax
- mov ebp,DWORD PTR 4[esi]
- add ebx,edi
- rol ebx,22
- mov edi,ecx
- add ebx,ecx
- ;
- ; R1 section
- ; R1 16
- xor edi,ebx
- and edi,edx
- lea eax,DWORD PTR 4129170786[ebp*1+eax]
- xor edi,ecx
- mov ebp,DWORD PTR 24[esi]
- add eax,edi
- mov edi,ebx
- rol eax,5
- add eax,ebx
- ; R1 17
- xor edi,eax
- and edi,ecx
- lea edx,DWORD PTR 3225465664[ebp*1+edx]
- xor edi,ebx
- mov ebp,DWORD PTR 44[esi]
- add edx,edi
- mov edi,eax
- rol edx,9
- add edx,eax
- ; R1 18
- xor edi,edx
- and edi,ebx
- lea ecx,DWORD PTR 643717713[ebp*1+ecx]
- xor edi,eax
- mov ebp,DWORD PTR [esi]
- add ecx,edi
- mov edi,edx
- rol ecx,14
- add ecx,edx
- ; R1 19
- xor edi,ecx
- and edi,eax
- lea ebx,DWORD PTR 3921069994[ebp*1+ebx]
- xor edi,edx
- mov ebp,DWORD PTR 20[esi]
- add ebx,edi
- mov edi,ecx
- rol ebx,20
- add ebx,ecx
- ; R1 20
- xor edi,ebx
- and edi,edx
- lea eax,DWORD PTR 3593408605[ebp*1+eax]
- xor edi,ecx
- mov ebp,DWORD PTR 40[esi]
- add eax,edi
- mov edi,ebx
- rol eax,5
- add eax,ebx
- ; R1 21
- xor edi,eax
- and edi,ecx
- lea edx,DWORD PTR 38016083[ebp*1+edx]
- xor edi,ebx
- mov ebp,DWORD PTR 60[esi]
- add edx,edi
- mov edi,eax
- rol edx,9
- add edx,eax
- ; R1 22
- xor edi,edx
- and edi,ebx
- lea ecx,DWORD PTR 3634488961[ebp*1+ecx]
- xor edi,eax
- mov ebp,DWORD PTR 16[esi]
- add ecx,edi
- mov edi,edx
- rol ecx,14
- add ecx,edx
- ; R1 23
- xor edi,ecx
- and edi,eax
- lea ebx,DWORD PTR 3889429448[ebp*1+ebx]
- xor edi,edx
- mov ebp,DWORD PTR 36[esi]
- add ebx,edi
- mov edi,ecx
- rol ebx,20
- add ebx,ecx
- ; R1 24
- xor edi,ebx
- and edi,edx
- lea eax,DWORD PTR 568446438[ebp*1+eax]
- xor edi,ecx
- mov ebp,DWORD PTR 56[esi]
- add eax,edi
- mov edi,ebx
- rol eax,5
- add eax,ebx
- ; R1 25
- xor edi,eax
- and edi,ecx
- lea edx,DWORD PTR 3275163606[ebp*1+edx]
- xor edi,ebx
- mov ebp,DWORD PTR 12[esi]
- add edx,edi
- mov edi,eax
- rol edx,9
- add edx,eax
- ; R1 26
- xor edi,edx
- and edi,ebx
- lea ecx,DWORD PTR 4107603335[ebp*1+ecx]
- xor edi,eax
- mov ebp,DWORD PTR 32[esi]
- add ecx,edi
- mov edi,edx
- rol ecx,14
- add ecx,edx
- ; R1 27
- xor edi,ecx
- and edi,eax
- lea ebx,DWORD PTR 1163531501[ebp*1+ebx]
- xor edi,edx
- mov ebp,DWORD PTR 52[esi]
- add ebx,edi
- mov edi,ecx
- rol ebx,20
- add ebx,ecx
- ; R1 28
- xor edi,ebx
- and edi,edx
- lea eax,DWORD PTR 2850285829[ebp*1+eax]
- xor edi,ecx
- mov ebp,DWORD PTR 8[esi]
- add eax,edi
- mov edi,ebx
- rol eax,5
- add eax,ebx
- ; R1 29
- xor edi,eax
- and edi,ecx
- lea edx,DWORD PTR 4243563512[ebp*1+edx]
- xor edi,ebx
- mov ebp,DWORD PTR 28[esi]
- add edx,edi
- mov edi,eax
- rol edx,9
- add edx,eax
- ; R1 30
- xor edi,edx
- and edi,ebx
- lea ecx,DWORD PTR 1735328473[ebp*1+ecx]
- xor edi,eax
- mov ebp,DWORD PTR 48[esi]
- add ecx,edi
- mov edi,edx
- rol ecx,14
- add ecx,edx
- ; R1 31
- xor edi,ecx
- and edi,eax
- lea ebx,DWORD PTR 2368359562[ebp*1+ebx]
- xor edi,edx
- mov ebp,DWORD PTR 20[esi]
- add ebx,edi
- mov edi,ecx
- rol ebx,20
- add ebx,ecx
- ;
- ; R2 section
- ; R2 32
- xor edi,edx
- xor edi,ebx
- lea eax,DWORD PTR 4294588738[ebp*1+eax]
- add eax,edi
- mov ebp,DWORD PTR 32[esi]
- rol eax,4
- mov edi,ebx
- ; R2 33
- add eax,ebx
- xor edi,ecx
- lea edx,DWORD PTR 2272392833[ebp*1+edx]
- xor edi,eax
- mov ebp,DWORD PTR 44[esi]
- add edx,edi
- mov edi,eax
- rol edx,11
- add edx,eax
- ; R2 34
- xor edi,ebx
- xor edi,edx
- lea ecx,DWORD PTR 1839030562[ebp*1+ecx]
- add ecx,edi
- mov ebp,DWORD PTR 56[esi]
- rol ecx,16
- mov edi,edx
- ; R2 35
- add ecx,edx
- xor edi,eax
- lea ebx,DWORD PTR 4259657740[ebp*1+ebx]
- xor edi,ecx
- mov ebp,DWORD PTR 4[esi]
- add ebx,edi
- mov edi,ecx
- rol ebx,23
- add ebx,ecx
- ; R2 36
- xor edi,edx
- xor edi,ebx
- lea eax,DWORD PTR 2763975236[ebp*1+eax]
- add eax,edi
- mov ebp,DWORD PTR 16[esi]
- rol eax,4
- mov edi,ebx
- ; R2 37
- add eax,ebx
- xor edi,ecx
- lea edx,DWORD PTR 1272893353[ebp*1+edx]
- xor edi,eax
- mov ebp,DWORD PTR 28[esi]
- add edx,edi
- mov edi,eax
- rol edx,11
- add edx,eax
- ; R2 38
- xor edi,ebx
- xor edi,edx
- lea ecx,DWORD PTR 4139469664[ebp*1+ecx]
- add ecx,edi
- mov ebp,DWORD PTR 40[esi]
- rol ecx,16
- mov edi,edx
- ; R2 39
- add ecx,edx
- xor edi,eax
- lea ebx,DWORD PTR 3200236656[ebp*1+ebx]
- xor edi,ecx
- mov ebp,DWORD PTR 52[esi]
- add ebx,edi
- mov edi,ecx
- rol ebx,23
- add ebx,ecx
- ; R2 40
- xor edi,edx
- xor edi,ebx
- lea eax,DWORD PTR 681279174[ebp*1+eax]
- add eax,edi
- mov ebp,DWORD PTR [esi]
- rol eax,4
- mov edi,ebx
- ; R2 41
- add eax,ebx
- xor edi,ecx
- lea edx,DWORD PTR 3936430074[ebp*1+edx]
- xor edi,eax
- mov ebp,DWORD PTR 12[esi]
- add edx,edi
- mov edi,eax
- rol edx,11
- add edx,eax
- ; R2 42
- xor edi,ebx
- xor edi,edx
- lea ecx,DWORD PTR 3572445317[ebp*1+ecx]
- add ecx,edi
- mov ebp,DWORD PTR 24[esi]
- rol ecx,16
- mov edi,edx
- ; R2 43
- add ecx,edx
- xor edi,eax
- lea ebx,DWORD PTR 76029189[ebp*1+ebx]
- xor edi,ecx
- mov ebp,DWORD PTR 36[esi]
- add ebx,edi
- mov edi,ecx
- rol ebx,23
- add ebx,ecx
- ; R2 44
- xor edi,edx
- xor edi,ebx
- lea eax,DWORD PTR 3654602809[ebp*1+eax]
- add eax,edi
- mov ebp,DWORD PTR 48[esi]
- rol eax,4
- mov edi,ebx
- ; R2 45
- add eax,ebx
- xor edi,ecx
- lea edx,DWORD PTR 3873151461[ebp*1+edx]
- xor edi,eax
- mov ebp,DWORD PTR 60[esi]
- add edx,edi
- mov edi,eax
- rol edx,11
- add edx,eax
- ; R2 46
- xor edi,ebx
- xor edi,edx
- lea ecx,DWORD PTR 530742520[ebp*1+ecx]
- add ecx,edi
- mov ebp,DWORD PTR 8[esi]
- rol ecx,16
- mov edi,edx
- ; R2 47
- add ecx,edx
- xor edi,eax
- lea ebx,DWORD PTR 3299628645[ebp*1+ebx]
- xor edi,ecx
- mov ebp,DWORD PTR [esi]
- add ebx,edi
- mov edi,-1
- rol ebx,23
- add ebx,ecx
- ;
- ; R3 section
- ; R3 48
- xor edi,edx
- or edi,ebx
- lea eax,DWORD PTR 4096336452[ebp*1+eax]
- xor edi,ecx
- mov ebp,DWORD PTR 28[esi]
- add eax,edi
- mov edi,-1
- rol eax,6
- xor edi,ecx
- add eax,ebx
- ; R3 49
- or edi,eax
- lea edx,DWORD PTR 1126891415[ebp*1+edx]
- xor edi,ebx
- mov ebp,DWORD PTR 56[esi]
- add edx,edi
- mov edi,-1
- rol edx,10
- xor edi,ebx
- add edx,eax
- ; R3 50
- or edi,edx
- lea ecx,DWORD PTR 2878612391[ebp*1+ecx]
- xor edi,eax
- mov ebp,DWORD PTR 20[esi]
- add ecx,edi
- mov edi,-1
- rol ecx,15
- xor edi,eax
- add ecx,edx
- ; R3 51
- or edi,ecx
- lea ebx,DWORD PTR 4237533241[ebp*1+ebx]
- xor edi,edx
- mov ebp,DWORD PTR 48[esi]
- add ebx,edi
- mov edi,-1
- rol ebx,21
- xor edi,edx
- add ebx,ecx
- ; R3 52
- or edi,ebx
- lea eax,DWORD PTR 1700485571[ebp*1+eax]
- xor edi,ecx
- mov ebp,DWORD PTR 12[esi]
- add eax,edi
- mov edi,-1
- rol eax,6
- xor edi,ecx
- add eax,ebx
- ; R3 53
- or edi,eax
- lea edx,DWORD PTR 2399980690[ebp*1+edx]
- xor edi,ebx
- mov ebp,DWORD PTR 40[esi]
- add edx,edi
- mov edi,-1
- rol edx,10
- xor edi,ebx
- add edx,eax
- ; R3 54
- or edi,edx
- lea ecx,DWORD PTR 4293915773[ebp*1+ecx]
- xor edi,eax
- mov ebp,DWORD PTR 4[esi]
- add ecx,edi
- mov edi,-1
- rol ecx,15
- xor edi,eax
- add ecx,edx
- ; R3 55
- or edi,ecx
- lea ebx,DWORD PTR 2240044497[ebp*1+ebx]
- xor edi,edx
- mov ebp,DWORD PTR 32[esi]
- add ebx,edi
- mov edi,-1
- rol ebx,21
- xor edi,edx
- add ebx,ecx
- ; R3 56
- or edi,ebx
- lea eax,DWORD PTR 1873313359[ebp*1+eax]
- xor edi,ecx
- mov ebp,DWORD PTR 60[esi]
- add eax,edi
- mov edi,-1
- rol eax,6
- xor edi,ecx
- add eax,ebx
- ; R3 57
- or edi,eax
- lea edx,DWORD PTR 4264355552[ebp*1+edx]
- xor edi,ebx
- mov ebp,DWORD PTR 24[esi]
- add edx,edi
- mov edi,-1
- rol edx,10
- xor edi,ebx
- add edx,eax
- ; R3 58
- or edi,edx
- lea ecx,DWORD PTR 2734768916[ebp*1+ecx]
- xor edi,eax
- mov ebp,DWORD PTR 52[esi]
- add ecx,edi
- mov edi,-1
- rol ecx,15
- xor edi,eax
- add ecx,edx
- ; R3 59
- or edi,ecx
- lea ebx,DWORD PTR 1309151649[ebp*1+ebx]
- xor edi,edx
- mov ebp,DWORD PTR 16[esi]
- add ebx,edi
- mov edi,-1
- rol ebx,21
- xor edi,edx
- add ebx,ecx
- ; R3 60
- or edi,ebx
- lea eax,DWORD PTR 4149444226[ebp*1+eax]
- xor edi,ecx
- mov ebp,DWORD PTR 44[esi]
- add eax,edi
- mov edi,-1
- rol eax,6
- xor edi,ecx
- add eax,ebx
- ; R3 61
- or edi,eax
- lea edx,DWORD PTR 3174756917[ebp*1+edx]
- xor edi,ebx
- mov ebp,DWORD PTR 8[esi]
- add edx,edi
- mov edi,-1
- rol edx,10
- xor edi,ebx
- add edx,eax
- ; R3 62
- or edi,edx
- lea ecx,DWORD PTR 718787259[ebp*1+ecx]
- xor edi,eax
- mov ebp,DWORD PTR 36[esi]
- add ecx,edi
- mov edi,-1
- rol ecx,15
- xor edi,eax
- add ecx,edx
- ; R3 63
- or edi,ecx
- lea ebx,DWORD PTR 3951481745[ebp*1+ebx]
- xor edi,edx
- mov ebp,DWORD PTR 24[esp]
- add ebx,edi
- add esi,64
- rol ebx,21
- mov edi,DWORD PTR [ebp]
- add ebx,ecx
- add eax,edi
- mov edi,DWORD PTR 4[ebp]
- add ebx,edi
- mov edi,DWORD PTR 8[ebp]
- add ecx,edi
- mov edi,DWORD PTR 12[ebp]
- add edx,edi
- mov DWORD PTR [ebp],eax
- mov DWORD PTR 4[ebp],ebx
- mov edi,DWORD PTR [esp]
- mov DWORD PTR 8[ebp],ecx
- mov DWORD PTR 12[ebp],edx
- cmp edi,esi
- jae $L000start
- pop eax
- pop ebx
- pop ebp
- pop edi
- pop esi
- ret
-_md5_block_asm_data_order ENDP
-.text$ ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN 16
+_md5_block_asm_data_order PROC PUBLIC
+$L_md5_block_asm_data_order_begin::
+ push esi
+ push edi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov ecx,DWORD PTR 20[esp]
+ push ebp
+ shl ecx,6
+ push ebx
+ add ecx,esi
+ sub ecx,64
+ mov eax,DWORD PTR [edi]
+ push ecx
+ mov ebx,DWORD PTR 4[edi]
+ mov ecx,DWORD PTR 8[edi]
+ mov edx,DWORD PTR 12[edi]
+$L000start:
+ ;
+ ; R0 section
+ mov edi,ecx
+ mov ebp,DWORD PTR [esi]
+ ; R0 0
+ xor edi,edx
+ and edi,ebx
+ lea eax,DWORD PTR 3614090360[ebp*1+eax]
+ xor edi,edx
+ mov ebp,DWORD PTR 4[esi]
+ add eax,edi
+ rol eax,7
+ mov edi,ebx
+ add eax,ebx
+ ; R0 1
+ xor edi,ecx
+ and edi,eax
+ lea edx,DWORD PTR 3905402710[ebp*1+edx]
+ xor edi,ecx
+ mov ebp,DWORD PTR 8[esi]
+ add edx,edi
+ rol edx,12
+ mov edi,eax
+ add edx,eax
+ ; R0 2
+ xor edi,ebx
+ and edi,edx
+ lea ecx,DWORD PTR 606105819[ebp*1+ecx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 12[esi]
+ add ecx,edi
+ rol ecx,17
+ mov edi,edx
+ add ecx,edx
+ ; R0 3
+ xor edi,eax
+ and edi,ecx
+ lea ebx,DWORD PTR 3250441966[ebp*1+ebx]
+ xor edi,eax
+ mov ebp,DWORD PTR 16[esi]
+ add ebx,edi
+ rol ebx,22
+ mov edi,ecx
+ add ebx,ecx
+ ; R0 4
+ xor edi,edx
+ and edi,ebx
+ lea eax,DWORD PTR 4118548399[ebp*1+eax]
+ xor edi,edx
+ mov ebp,DWORD PTR 20[esi]
+ add eax,edi
+ rol eax,7
+ mov edi,ebx
+ add eax,ebx
+ ; R0 5
+ xor edi,ecx
+ and edi,eax
+ lea edx,DWORD PTR 1200080426[ebp*1+edx]
+ xor edi,ecx
+ mov ebp,DWORD PTR 24[esi]
+ add edx,edi
+ rol edx,12
+ mov edi,eax
+ add edx,eax
+ ; R0 6
+ xor edi,ebx
+ and edi,edx
+ lea ecx,DWORD PTR 2821735955[ebp*1+ecx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 28[esi]
+ add ecx,edi
+ rol ecx,17
+ mov edi,edx
+ add ecx,edx
+ ; R0 7
+ xor edi,eax
+ and edi,ecx
+ lea ebx,DWORD PTR 4249261313[ebp*1+ebx]
+ xor edi,eax
+ mov ebp,DWORD PTR 32[esi]
+ add ebx,edi
+ rol ebx,22
+ mov edi,ecx
+ add ebx,ecx
+ ; R0 8
+ xor edi,edx
+ and edi,ebx
+ lea eax,DWORD PTR 1770035416[ebp*1+eax]
+ xor edi,edx
+ mov ebp,DWORD PTR 36[esi]
+ add eax,edi
+ rol eax,7
+ mov edi,ebx
+ add eax,ebx
+ ; R0 9
+ xor edi,ecx
+ and edi,eax
+ lea edx,DWORD PTR 2336552879[ebp*1+edx]
+ xor edi,ecx
+ mov ebp,DWORD PTR 40[esi]
+ add edx,edi
+ rol edx,12
+ mov edi,eax
+ add edx,eax
+ ; R0 10
+ xor edi,ebx
+ and edi,edx
+ lea ecx,DWORD PTR 4294925233[ebp*1+ecx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 44[esi]
+ add ecx,edi
+ rol ecx,17
+ mov edi,edx
+ add ecx,edx
+ ; R0 11
+ xor edi,eax
+ and edi,ecx
+ lea ebx,DWORD PTR 2304563134[ebp*1+ebx]
+ xor edi,eax
+ mov ebp,DWORD PTR 48[esi]
+ add ebx,edi
+ rol ebx,22
+ mov edi,ecx
+ add ebx,ecx
+ ; R0 12
+ xor edi,edx
+ and edi,ebx
+ lea eax,DWORD PTR 1804603682[ebp*1+eax]
+ xor edi,edx
+ mov ebp,DWORD PTR 52[esi]
+ add eax,edi
+ rol eax,7
+ mov edi,ebx
+ add eax,ebx
+ ; R0 13
+ xor edi,ecx
+ and edi,eax
+ lea edx,DWORD PTR 4254626195[ebp*1+edx]
+ xor edi,ecx
+ mov ebp,DWORD PTR 56[esi]
+ add edx,edi
+ rol edx,12
+ mov edi,eax
+ add edx,eax
+ ; R0 14
+ xor edi,ebx
+ and edi,edx
+ lea ecx,DWORD PTR 2792965006[ebp*1+ecx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 60[esi]
+ add ecx,edi
+ rol ecx,17
+ mov edi,edx
+ add ecx,edx
+ ; R0 15
+ xor edi,eax
+ and edi,ecx
+ lea ebx,DWORD PTR 1236535329[ebp*1+ebx]
+ xor edi,eax
+ mov ebp,DWORD PTR 4[esi]
+ add ebx,edi
+ rol ebx,22
+ mov edi,ecx
+ add ebx,ecx
+ ;
+ ; R1 section
+ ; R1 16
+ xor edi,ebx
+ and edi,edx
+ lea eax,DWORD PTR 4129170786[ebp*1+eax]
+ xor edi,ecx
+ mov ebp,DWORD PTR 24[esi]
+ add eax,edi
+ mov edi,ebx
+ rol eax,5
+ add eax,ebx
+ ; R1 17
+ xor edi,eax
+ and edi,ecx
+ lea edx,DWORD PTR 3225465664[ebp*1+edx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 44[esi]
+ add edx,edi
+ mov edi,eax
+ rol edx,9
+ add edx,eax
+ ; R1 18
+ xor edi,edx
+ and edi,ebx
+ lea ecx,DWORD PTR 643717713[ebp*1+ecx]
+ xor edi,eax
+ mov ebp,DWORD PTR [esi]
+ add ecx,edi
+ mov edi,edx
+ rol ecx,14
+ add ecx,edx
+ ; R1 19
+ xor edi,ecx
+ and edi,eax
+ lea ebx,DWORD PTR 3921069994[ebp*1+ebx]
+ xor edi,edx
+ mov ebp,DWORD PTR 20[esi]
+ add ebx,edi
+ mov edi,ecx
+ rol ebx,20
+ add ebx,ecx
+ ; R1 20
+ xor edi,ebx
+ and edi,edx
+ lea eax,DWORD PTR 3593408605[ebp*1+eax]
+ xor edi,ecx
+ mov ebp,DWORD PTR 40[esi]
+ add eax,edi
+ mov edi,ebx
+ rol eax,5
+ add eax,ebx
+ ; R1 21
+ xor edi,eax
+ and edi,ecx
+ lea edx,DWORD PTR 38016083[ebp*1+edx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 60[esi]
+ add edx,edi
+ mov edi,eax
+ rol edx,9
+ add edx,eax
+ ; R1 22
+ xor edi,edx
+ and edi,ebx
+ lea ecx,DWORD PTR 3634488961[ebp*1+ecx]
+ xor edi,eax
+ mov ebp,DWORD PTR 16[esi]
+ add ecx,edi
+ mov edi,edx
+ rol ecx,14
+ add ecx,edx
+ ; R1 23
+ xor edi,ecx
+ and edi,eax
+ lea ebx,DWORD PTR 3889429448[ebp*1+ebx]
+ xor edi,edx
+ mov ebp,DWORD PTR 36[esi]
+ add ebx,edi
+ mov edi,ecx
+ rol ebx,20
+ add ebx,ecx
+ ; R1 24
+ xor edi,ebx
+ and edi,edx
+ lea eax,DWORD PTR 568446438[ebp*1+eax]
+ xor edi,ecx
+ mov ebp,DWORD PTR 56[esi]
+ add eax,edi
+ mov edi,ebx
+ rol eax,5
+ add eax,ebx
+ ; R1 25
+ xor edi,eax
+ and edi,ecx
+ lea edx,DWORD PTR 3275163606[ebp*1+edx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 12[esi]
+ add edx,edi
+ mov edi,eax
+ rol edx,9
+ add edx,eax
+ ; R1 26
+ xor edi,edx
+ and edi,ebx
+ lea ecx,DWORD PTR 4107603335[ebp*1+ecx]
+ xor edi,eax
+ mov ebp,DWORD PTR 32[esi]
+ add ecx,edi
+ mov edi,edx
+ rol ecx,14
+ add ecx,edx
+ ; R1 27
+ xor edi,ecx
+ and edi,eax
+ lea ebx,DWORD PTR 1163531501[ebp*1+ebx]
+ xor edi,edx
+ mov ebp,DWORD PTR 52[esi]
+ add ebx,edi
+ mov edi,ecx
+ rol ebx,20
+ add ebx,ecx
+ ; R1 28
+ xor edi,ebx
+ and edi,edx
+ lea eax,DWORD PTR 2850285829[ebp*1+eax]
+ xor edi,ecx
+ mov ebp,DWORD PTR 8[esi]
+ add eax,edi
+ mov edi,ebx
+ rol eax,5
+ add eax,ebx
+ ; R1 29
+ xor edi,eax
+ and edi,ecx
+ lea edx,DWORD PTR 4243563512[ebp*1+edx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 28[esi]
+ add edx,edi
+ mov edi,eax
+ rol edx,9
+ add edx,eax
+ ; R1 30
+ xor edi,edx
+ and edi,ebx
+ lea ecx,DWORD PTR 1735328473[ebp*1+ecx]
+ xor edi,eax
+ mov ebp,DWORD PTR 48[esi]
+ add ecx,edi
+ mov edi,edx
+ rol ecx,14
+ add ecx,edx
+ ; R1 31
+ xor edi,ecx
+ and edi,eax
+ lea ebx,DWORD PTR 2368359562[ebp*1+ebx]
+ xor edi,edx
+ mov ebp,DWORD PTR 20[esi]
+ add ebx,edi
+ mov edi,ecx
+ rol ebx,20
+ add ebx,ecx
+ ;
+ ; R2 section
+ ; R2 32
+ xor edi,edx
+ xor edi,ebx
+ lea eax,DWORD PTR 4294588738[ebp*1+eax]
+ add eax,edi
+ mov ebp,DWORD PTR 32[esi]
+ rol eax,4
+ mov edi,ebx
+ ; R2 33
+ add eax,ebx
+ xor edi,ecx
+ lea edx,DWORD PTR 2272392833[ebp*1+edx]
+ xor edi,eax
+ mov ebp,DWORD PTR 44[esi]
+ add edx,edi
+ mov edi,eax
+ rol edx,11
+ add edx,eax
+ ; R2 34
+ xor edi,ebx
+ xor edi,edx
+ lea ecx,DWORD PTR 1839030562[ebp*1+ecx]
+ add ecx,edi
+ mov ebp,DWORD PTR 56[esi]
+ rol ecx,16
+ mov edi,edx
+ ; R2 35
+ add ecx,edx
+ xor edi,eax
+ lea ebx,DWORD PTR 4259657740[ebp*1+ebx]
+ xor edi,ecx
+ mov ebp,DWORD PTR 4[esi]
+ add ebx,edi
+ mov edi,ecx
+ rol ebx,23
+ add ebx,ecx
+ ; R2 36
+ xor edi,edx
+ xor edi,ebx
+ lea eax,DWORD PTR 2763975236[ebp*1+eax]
+ add eax,edi
+ mov ebp,DWORD PTR 16[esi]
+ rol eax,4
+ mov edi,ebx
+ ; R2 37
+ add eax,ebx
+ xor edi,ecx
+ lea edx,DWORD PTR 1272893353[ebp*1+edx]
+ xor edi,eax
+ mov ebp,DWORD PTR 28[esi]
+ add edx,edi
+ mov edi,eax
+ rol edx,11
+ add edx,eax
+ ; R2 38
+ xor edi,ebx
+ xor edi,edx
+ lea ecx,DWORD PTR 4139469664[ebp*1+ecx]
+ add ecx,edi
+ mov ebp,DWORD PTR 40[esi]
+ rol ecx,16
+ mov edi,edx
+ ; R2 39
+ add ecx,edx
+ xor edi,eax
+ lea ebx,DWORD PTR 3200236656[ebp*1+ebx]
+ xor edi,ecx
+ mov ebp,DWORD PTR 52[esi]
+ add ebx,edi
+ mov edi,ecx
+ rol ebx,23
+ add ebx,ecx
+ ; R2 40
+ xor edi,edx
+ xor edi,ebx
+ lea eax,DWORD PTR 681279174[ebp*1+eax]
+ add eax,edi
+ mov ebp,DWORD PTR [esi]
+ rol eax,4
+ mov edi,ebx
+ ; R2 41
+ add eax,ebx
+ xor edi,ecx
+ lea edx,DWORD PTR 3936430074[ebp*1+edx]
+ xor edi,eax
+ mov ebp,DWORD PTR 12[esi]
+ add edx,edi
+ mov edi,eax
+ rol edx,11
+ add edx,eax
+ ; R2 42
+ xor edi,ebx
+ xor edi,edx
+ lea ecx,DWORD PTR 3572445317[ebp*1+ecx]
+ add ecx,edi
+ mov ebp,DWORD PTR 24[esi]
+ rol ecx,16
+ mov edi,edx
+ ; R2 43
+ add ecx,edx
+ xor edi,eax
+ lea ebx,DWORD PTR 76029189[ebp*1+ebx]
+ xor edi,ecx
+ mov ebp,DWORD PTR 36[esi]
+ add ebx,edi
+ mov edi,ecx
+ rol ebx,23
+ add ebx,ecx
+ ; R2 44
+ xor edi,edx
+ xor edi,ebx
+ lea eax,DWORD PTR 3654602809[ebp*1+eax]
+ add eax,edi
+ mov ebp,DWORD PTR 48[esi]
+ rol eax,4
+ mov edi,ebx
+ ; R2 45
+ add eax,ebx
+ xor edi,ecx
+ lea edx,DWORD PTR 3873151461[ebp*1+edx]
+ xor edi,eax
+ mov ebp,DWORD PTR 60[esi]
+ add edx,edi
+ mov edi,eax
+ rol edx,11
+ add edx,eax
+ ; R2 46
+ xor edi,ebx
+ xor edi,edx
+ lea ecx,DWORD PTR 530742520[ebp*1+ecx]
+ add ecx,edi
+ mov ebp,DWORD PTR 8[esi]
+ rol ecx,16
+ mov edi,edx
+ ; R2 47
+ add ecx,edx
+ xor edi,eax
+ lea ebx,DWORD PTR 3299628645[ebp*1+ebx]
+ xor edi,ecx
+ mov ebp,DWORD PTR [esi]
+ add ebx,edi
+ mov edi,-1
+ rol ebx,23
+ add ebx,ecx
+ ;
+ ; R3 section
+ ; R3 48
+ xor edi,edx
+ or edi,ebx
+ lea eax,DWORD PTR 4096336452[ebp*1+eax]
+ xor edi,ecx
+ mov ebp,DWORD PTR 28[esi]
+ add eax,edi
+ mov edi,-1
+ rol eax,6
+ xor edi,ecx
+ add eax,ebx
+ ; R3 49
+ or edi,eax
+ lea edx,DWORD PTR 1126891415[ebp*1+edx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 56[esi]
+ add edx,edi
+ mov edi,-1
+ rol edx,10
+ xor edi,ebx
+ add edx,eax
+ ; R3 50
+ or edi,edx
+ lea ecx,DWORD PTR 2878612391[ebp*1+ecx]
+ xor edi,eax
+ mov ebp,DWORD PTR 20[esi]
+ add ecx,edi
+ mov edi,-1
+ rol ecx,15
+ xor edi,eax
+ add ecx,edx
+ ; R3 51
+ or edi,ecx
+ lea ebx,DWORD PTR 4237533241[ebp*1+ebx]
+ xor edi,edx
+ mov ebp,DWORD PTR 48[esi]
+ add ebx,edi
+ mov edi,-1
+ rol ebx,21
+ xor edi,edx
+ add ebx,ecx
+ ; R3 52
+ or edi,ebx
+ lea eax,DWORD PTR 1700485571[ebp*1+eax]
+ xor edi,ecx
+ mov ebp,DWORD PTR 12[esi]
+ add eax,edi
+ mov edi,-1
+ rol eax,6
+ xor edi,ecx
+ add eax,ebx
+ ; R3 53
+ or edi,eax
+ lea edx,DWORD PTR 2399980690[ebp*1+edx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 40[esi]
+ add edx,edi
+ mov edi,-1
+ rol edx,10
+ xor edi,ebx
+ add edx,eax
+ ; R3 54
+ or edi,edx
+ lea ecx,DWORD PTR 4293915773[ebp*1+ecx]
+ xor edi,eax
+ mov ebp,DWORD PTR 4[esi]
+ add ecx,edi
+ mov edi,-1
+ rol ecx,15
+ xor edi,eax
+ add ecx,edx
+ ; R3 55
+ or edi,ecx
+ lea ebx,DWORD PTR 2240044497[ebp*1+ebx]
+ xor edi,edx
+ mov ebp,DWORD PTR 32[esi]
+ add ebx,edi
+ mov edi,-1
+ rol ebx,21
+ xor edi,edx
+ add ebx,ecx
+ ; R3 56
+ or edi,ebx
+ lea eax,DWORD PTR 1873313359[ebp*1+eax]
+ xor edi,ecx
+ mov ebp,DWORD PTR 60[esi]
+ add eax,edi
+ mov edi,-1
+ rol eax,6
+ xor edi,ecx
+ add eax,ebx
+ ; R3 57
+ or edi,eax
+ lea edx,DWORD PTR 4264355552[ebp*1+edx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 24[esi]
+ add edx,edi
+ mov edi,-1
+ rol edx,10
+ xor edi,ebx
+ add edx,eax
+ ; R3 58
+ or edi,edx
+ lea ecx,DWORD PTR 2734768916[ebp*1+ecx]
+ xor edi,eax
+ mov ebp,DWORD PTR 52[esi]
+ add ecx,edi
+ mov edi,-1
+ rol ecx,15
+ xor edi,eax
+ add ecx,edx
+ ; R3 59
+ or edi,ecx
+ lea ebx,DWORD PTR 1309151649[ebp*1+ebx]
+ xor edi,edx
+ mov ebp,DWORD PTR 16[esi]
+ add ebx,edi
+ mov edi,-1
+ rol ebx,21
+ xor edi,edx
+ add ebx,ecx
+ ; R3 60
+ or edi,ebx
+ lea eax,DWORD PTR 4149444226[ebp*1+eax]
+ xor edi,ecx
+ mov ebp,DWORD PTR 44[esi]
+ add eax,edi
+ mov edi,-1
+ rol eax,6
+ xor edi,ecx
+ add eax,ebx
+ ; R3 61
+ or edi,eax
+ lea edx,DWORD PTR 3174756917[ebp*1+edx]
+ xor edi,ebx
+ mov ebp,DWORD PTR 8[esi]
+ add edx,edi
+ mov edi,-1
+ rol edx,10
+ xor edi,ebx
+ add edx,eax
+ ; R3 62
+ or edi,edx
+ lea ecx,DWORD PTR 718787259[ebp*1+ecx]
+ xor edi,eax
+ mov ebp,DWORD PTR 36[esi]
+ add ecx,edi
+ mov edi,-1
+ rol ecx,15
+ xor edi,eax
+ add ecx,edx
+ ; R3 63
+ or edi,ecx
+ lea ebx,DWORD PTR 3951481745[ebp*1+ebx]
+ xor edi,edx
+ mov ebp,DWORD PTR 24[esp]
+ add ebx,edi
+ add esi,64
+ rol ebx,21
+ mov edi,DWORD PTR [ebp]
+ add ebx,ecx
+ add eax,edi
+ mov edi,DWORD PTR 4[ebp]
+ add ebx,edi
+ mov edi,DWORD PTR 8[ebp]
+ add ecx,edi
+ mov edi,DWORD PTR 12[ebp]
+ add edx,edi
+ mov DWORD PTR [ebp],eax
+ mov DWORD PTR 4[ebp],ebx
+ mov edi,DWORD PTR [esp]
+ mov DWORD PTR 8[ebp],ecx
+ mov DWORD PTR 12[ebp],edx
+ cmp edi,esi
+ jae $L000start
+ pop eax
+ pop ebx
+ pop ebp
+ pop edi
+ pop esi
+ ret
+_md5_block_asm_data_order ENDP
+.text$ ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/md5/md5-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/md5/md5-x86_64.masm
index 6598da08d1..515d86be90 100644
--- a/contrib/libs/openssl/asm/windows/crypto/md5/md5-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/md5/md5-x86_64.masm
@@ -1,788 +1,788 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-ALIGN 16
-
-PUBLIC md5_block_asm_data_order
-
-md5_block_asm_data_order PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_md5_block_asm_data_order::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- push rbp
-
- push rbx
-
- push r12
-
- push r14
-
- push r15
-
-$L$prologue::
-
-
-
-
- mov rbp,rdi
- shl rdx,6
- lea rdi,QWORD PTR[rdx*1+rsi]
- mov eax,DWORD PTR[rbp]
- mov ebx,DWORD PTR[4+rbp]
- mov ecx,DWORD PTR[8+rbp]
- mov edx,DWORD PTR[12+rbp]
-
-
-
-
-
-
-
- cmp rsi,rdi
- je $L$end
-
-
-$L$loop::
- mov r8d,eax
- mov r9d,ebx
- mov r14d,ecx
- mov r15d,edx
- mov r10d,DWORD PTR[rsi]
- mov r11d,edx
- xor r11d,ecx
- lea eax,DWORD PTR[((-680876936))+r10*1+rax]
- and r11d,ebx
- mov r10d,DWORD PTR[4+rsi]
- xor r11d,edx
- add eax,r11d
- rol eax,7
- mov r11d,ecx
- add eax,ebx
- xor r11d,ebx
- lea edx,DWORD PTR[((-389564586))+r10*1+rdx]
- and r11d,eax
- mov r10d,DWORD PTR[8+rsi]
- xor r11d,ecx
- add edx,r11d
- rol edx,12
- mov r11d,ebx
- add edx,eax
- xor r11d,eax
- lea ecx,DWORD PTR[606105819+r10*1+rcx]
- and r11d,edx
- mov r10d,DWORD PTR[12+rsi]
- xor r11d,ebx
- add ecx,r11d
- rol ecx,17
- mov r11d,eax
- add ecx,edx
- xor r11d,edx
- lea ebx,DWORD PTR[((-1044525330))+r10*1+rbx]
- and r11d,ecx
- mov r10d,DWORD PTR[16+rsi]
- xor r11d,eax
- add ebx,r11d
- rol ebx,22
- mov r11d,edx
- add ebx,ecx
- xor r11d,ecx
- lea eax,DWORD PTR[((-176418897))+r10*1+rax]
- and r11d,ebx
- mov r10d,DWORD PTR[20+rsi]
- xor r11d,edx
- add eax,r11d
- rol eax,7
- mov r11d,ecx
- add eax,ebx
- xor r11d,ebx
- lea edx,DWORD PTR[1200080426+r10*1+rdx]
- and r11d,eax
- mov r10d,DWORD PTR[24+rsi]
- xor r11d,ecx
- add edx,r11d
- rol edx,12
- mov r11d,ebx
- add edx,eax
- xor r11d,eax
- lea ecx,DWORD PTR[((-1473231341))+r10*1+rcx]
- and r11d,edx
- mov r10d,DWORD PTR[28+rsi]
- xor r11d,ebx
- add ecx,r11d
- rol ecx,17
- mov r11d,eax
- add ecx,edx
- xor r11d,edx
- lea ebx,DWORD PTR[((-45705983))+r10*1+rbx]
- and r11d,ecx
- mov r10d,DWORD PTR[32+rsi]
- xor r11d,eax
- add ebx,r11d
- rol ebx,22
- mov r11d,edx
- add ebx,ecx
- xor r11d,ecx
- lea eax,DWORD PTR[1770035416+r10*1+rax]
- and r11d,ebx
- mov r10d,DWORD PTR[36+rsi]
- xor r11d,edx
- add eax,r11d
- rol eax,7
- mov r11d,ecx
- add eax,ebx
- xor r11d,ebx
- lea edx,DWORD PTR[((-1958414417))+r10*1+rdx]
- and r11d,eax
- mov r10d,DWORD PTR[40+rsi]
- xor r11d,ecx
- add edx,r11d
- rol edx,12
- mov r11d,ebx
- add edx,eax
- xor r11d,eax
- lea ecx,DWORD PTR[((-42063))+r10*1+rcx]
- and r11d,edx
- mov r10d,DWORD PTR[44+rsi]
- xor r11d,ebx
- add ecx,r11d
- rol ecx,17
- mov r11d,eax
- add ecx,edx
- xor r11d,edx
- lea ebx,DWORD PTR[((-1990404162))+r10*1+rbx]
- and r11d,ecx
- mov r10d,DWORD PTR[48+rsi]
- xor r11d,eax
- add ebx,r11d
- rol ebx,22
- mov r11d,edx
- add ebx,ecx
- xor r11d,ecx
- lea eax,DWORD PTR[1804603682+r10*1+rax]
- and r11d,ebx
- mov r10d,DWORD PTR[52+rsi]
- xor r11d,edx
- add eax,r11d
- rol eax,7
- mov r11d,ecx
- add eax,ebx
- xor r11d,ebx
- lea edx,DWORD PTR[((-40341101))+r10*1+rdx]
- and r11d,eax
- mov r10d,DWORD PTR[56+rsi]
- xor r11d,ecx
- add edx,r11d
- rol edx,12
- mov r11d,ebx
- add edx,eax
- xor r11d,eax
- lea ecx,DWORD PTR[((-1502002290))+r10*1+rcx]
- and r11d,edx
- mov r10d,DWORD PTR[60+rsi]
- xor r11d,ebx
- add ecx,r11d
- rol ecx,17
- mov r11d,eax
- add ecx,edx
- xor r11d,edx
- lea ebx,DWORD PTR[1236535329+r10*1+rbx]
- and r11d,ecx
- mov r10d,DWORD PTR[4+rsi]
- xor r11d,eax
- add ebx,r11d
- rol ebx,22
- mov r11d,edx
- add ebx,ecx
- mov r11d,edx
- mov r12d,edx
- not r11d
- and r12d,ebx
- lea eax,DWORD PTR[((-165796510))+r10*1+rax]
- and r11d,ecx
- mov r10d,DWORD PTR[24+rsi]
- or r12d,r11d
- mov r11d,ecx
- add eax,r12d
- mov r12d,ecx
- rol eax,5
- add eax,ebx
- not r11d
- and r12d,eax
- lea edx,DWORD PTR[((-1069501632))+r10*1+rdx]
- and r11d,ebx
- mov r10d,DWORD PTR[44+rsi]
- or r12d,r11d
- mov r11d,ebx
- add edx,r12d
- mov r12d,ebx
- rol edx,9
- add edx,eax
- not r11d
- and r12d,edx
- lea ecx,DWORD PTR[643717713+r10*1+rcx]
- and r11d,eax
- mov r10d,DWORD PTR[rsi]
- or r12d,r11d
- mov r11d,eax
- add ecx,r12d
- mov r12d,eax
- rol ecx,14
- add ecx,edx
- not r11d
- and r12d,ecx
- lea ebx,DWORD PTR[((-373897302))+r10*1+rbx]
- and r11d,edx
- mov r10d,DWORD PTR[20+rsi]
- or r12d,r11d
- mov r11d,edx
- add ebx,r12d
- mov r12d,edx
- rol ebx,20
- add ebx,ecx
- not r11d
- and r12d,ebx
- lea eax,DWORD PTR[((-701558691))+r10*1+rax]
- and r11d,ecx
- mov r10d,DWORD PTR[40+rsi]
- or r12d,r11d
- mov r11d,ecx
- add eax,r12d
- mov r12d,ecx
- rol eax,5
- add eax,ebx
- not r11d
- and r12d,eax
- lea edx,DWORD PTR[38016083+r10*1+rdx]
- and r11d,ebx
- mov r10d,DWORD PTR[60+rsi]
- or r12d,r11d
- mov r11d,ebx
- add edx,r12d
- mov r12d,ebx
- rol edx,9
- add edx,eax
- not r11d
- and r12d,edx
- lea ecx,DWORD PTR[((-660478335))+r10*1+rcx]
- and r11d,eax
- mov r10d,DWORD PTR[16+rsi]
- or r12d,r11d
- mov r11d,eax
- add ecx,r12d
- mov r12d,eax
- rol ecx,14
- add ecx,edx
- not r11d
- and r12d,ecx
- lea ebx,DWORD PTR[((-405537848))+r10*1+rbx]
- and r11d,edx
- mov r10d,DWORD PTR[36+rsi]
- or r12d,r11d
- mov r11d,edx
- add ebx,r12d
- mov r12d,edx
- rol ebx,20
- add ebx,ecx
- not r11d
- and r12d,ebx
- lea eax,DWORD PTR[568446438+r10*1+rax]
- and r11d,ecx
- mov r10d,DWORD PTR[56+rsi]
- or r12d,r11d
- mov r11d,ecx
- add eax,r12d
- mov r12d,ecx
- rol eax,5
- add eax,ebx
- not r11d
- and r12d,eax
- lea edx,DWORD PTR[((-1019803690))+r10*1+rdx]
- and r11d,ebx
- mov r10d,DWORD PTR[12+rsi]
- or r12d,r11d
- mov r11d,ebx
- add edx,r12d
- mov r12d,ebx
- rol edx,9
- add edx,eax
- not r11d
- and r12d,edx
- lea ecx,DWORD PTR[((-187363961))+r10*1+rcx]
- and r11d,eax
- mov r10d,DWORD PTR[32+rsi]
- or r12d,r11d
- mov r11d,eax
- add ecx,r12d
- mov r12d,eax
- rol ecx,14
- add ecx,edx
- not r11d
- and r12d,ecx
- lea ebx,DWORD PTR[1163531501+r10*1+rbx]
- and r11d,edx
- mov r10d,DWORD PTR[52+rsi]
- or r12d,r11d
- mov r11d,edx
- add ebx,r12d
- mov r12d,edx
- rol ebx,20
- add ebx,ecx
- not r11d
- and r12d,ebx
- lea eax,DWORD PTR[((-1444681467))+r10*1+rax]
- and r11d,ecx
- mov r10d,DWORD PTR[8+rsi]
- or r12d,r11d
- mov r11d,ecx
- add eax,r12d
- mov r12d,ecx
- rol eax,5
- add eax,ebx
- not r11d
- and r12d,eax
- lea edx,DWORD PTR[((-51403784))+r10*1+rdx]
- and r11d,ebx
- mov r10d,DWORD PTR[28+rsi]
- or r12d,r11d
- mov r11d,ebx
- add edx,r12d
- mov r12d,ebx
- rol edx,9
- add edx,eax
- not r11d
- and r12d,edx
- lea ecx,DWORD PTR[1735328473+r10*1+rcx]
- and r11d,eax
- mov r10d,DWORD PTR[48+rsi]
- or r12d,r11d
- mov r11d,eax
- add ecx,r12d
- mov r12d,eax
- rol ecx,14
- add ecx,edx
- not r11d
- and r12d,ecx
- lea ebx,DWORD PTR[((-1926607734))+r10*1+rbx]
- and r11d,edx
- mov r10d,DWORD PTR[20+rsi]
- or r12d,r11d
- mov r11d,edx
- add ebx,r12d
- mov r12d,edx
- rol ebx,20
- add ebx,ecx
- mov r11d,ecx
- lea eax,DWORD PTR[((-378558))+r10*1+rax]
- xor r11d,edx
- mov r10d,DWORD PTR[32+rsi]
- xor r11d,ebx
- add eax,r11d
- mov r11d,ebx
- rol eax,4
- add eax,ebx
- lea edx,DWORD PTR[((-2022574463))+r10*1+rdx]
- xor r11d,ecx
- mov r10d,DWORD PTR[44+rsi]
- xor r11d,eax
- add edx,r11d
- rol edx,11
- mov r11d,eax
- add edx,eax
- lea ecx,DWORD PTR[1839030562+r10*1+rcx]
- xor r11d,ebx
- mov r10d,DWORD PTR[56+rsi]
- xor r11d,edx
- add ecx,r11d
- mov r11d,edx
- rol ecx,16
- add ecx,edx
- lea ebx,DWORD PTR[((-35309556))+r10*1+rbx]
- xor r11d,eax
- mov r10d,DWORD PTR[4+rsi]
- xor r11d,ecx
- add ebx,r11d
- rol ebx,23
- mov r11d,ecx
- add ebx,ecx
- lea eax,DWORD PTR[((-1530992060))+r10*1+rax]
- xor r11d,edx
- mov r10d,DWORD PTR[16+rsi]
- xor r11d,ebx
- add eax,r11d
- mov r11d,ebx
- rol eax,4
- add eax,ebx
- lea edx,DWORD PTR[1272893353+r10*1+rdx]
- xor r11d,ecx
- mov r10d,DWORD PTR[28+rsi]
- xor r11d,eax
- add edx,r11d
- rol edx,11
- mov r11d,eax
- add edx,eax
- lea ecx,DWORD PTR[((-155497632))+r10*1+rcx]
- xor r11d,ebx
- mov r10d,DWORD PTR[40+rsi]
- xor r11d,edx
- add ecx,r11d
- mov r11d,edx
- rol ecx,16
- add ecx,edx
- lea ebx,DWORD PTR[((-1094730640))+r10*1+rbx]
- xor r11d,eax
- mov r10d,DWORD PTR[52+rsi]
- xor r11d,ecx
- add ebx,r11d
- rol ebx,23
- mov r11d,ecx
- add ebx,ecx
- lea eax,DWORD PTR[681279174+r10*1+rax]
- xor r11d,edx
- mov r10d,DWORD PTR[rsi]
- xor r11d,ebx
- add eax,r11d
- mov r11d,ebx
- rol eax,4
- add eax,ebx
- lea edx,DWORD PTR[((-358537222))+r10*1+rdx]
- xor r11d,ecx
- mov r10d,DWORD PTR[12+rsi]
- xor r11d,eax
- add edx,r11d
- rol edx,11
- mov r11d,eax
- add edx,eax
- lea ecx,DWORD PTR[((-722521979))+r10*1+rcx]
- xor r11d,ebx
- mov r10d,DWORD PTR[24+rsi]
- xor r11d,edx
- add ecx,r11d
- mov r11d,edx
- rol ecx,16
- add ecx,edx
- lea ebx,DWORD PTR[76029189+r10*1+rbx]
- xor r11d,eax
- mov r10d,DWORD PTR[36+rsi]
- xor r11d,ecx
- add ebx,r11d
- rol ebx,23
- mov r11d,ecx
- add ebx,ecx
- lea eax,DWORD PTR[((-640364487))+r10*1+rax]
- xor r11d,edx
- mov r10d,DWORD PTR[48+rsi]
- xor r11d,ebx
- add eax,r11d
- mov r11d,ebx
- rol eax,4
- add eax,ebx
- lea edx,DWORD PTR[((-421815835))+r10*1+rdx]
- xor r11d,ecx
- mov r10d,DWORD PTR[60+rsi]
- xor r11d,eax
- add edx,r11d
- rol edx,11
- mov r11d,eax
- add edx,eax
- lea ecx,DWORD PTR[530742520+r10*1+rcx]
- xor r11d,ebx
- mov r10d,DWORD PTR[8+rsi]
- xor r11d,edx
- add ecx,r11d
- mov r11d,edx
- rol ecx,16
- add ecx,edx
- lea ebx,DWORD PTR[((-995338651))+r10*1+rbx]
- xor r11d,eax
- mov r10d,DWORD PTR[rsi]
- xor r11d,ecx
- add ebx,r11d
- rol ebx,23
- mov r11d,ecx
- add ebx,ecx
- mov r11d,0ffffffffh
- xor r11d,edx
- lea eax,DWORD PTR[((-198630844))+r10*1+rax]
- or r11d,ebx
- mov r10d,DWORD PTR[28+rsi]
- xor r11d,ecx
- add eax,r11d
- mov r11d,0ffffffffh
- rol eax,6
- xor r11d,ecx
- add eax,ebx
- lea edx,DWORD PTR[1126891415+r10*1+rdx]
- or r11d,eax
- mov r10d,DWORD PTR[56+rsi]
- xor r11d,ebx
- add edx,r11d
- mov r11d,0ffffffffh
- rol edx,10
- xor r11d,ebx
- add edx,eax
- lea ecx,DWORD PTR[((-1416354905))+r10*1+rcx]
- or r11d,edx
- mov r10d,DWORD PTR[20+rsi]
- xor r11d,eax
- add ecx,r11d
- mov r11d,0ffffffffh
- rol ecx,15
- xor r11d,eax
- add ecx,edx
- lea ebx,DWORD PTR[((-57434055))+r10*1+rbx]
- or r11d,ecx
- mov r10d,DWORD PTR[48+rsi]
- xor r11d,edx
- add ebx,r11d
- mov r11d,0ffffffffh
- rol ebx,21
- xor r11d,edx
- add ebx,ecx
- lea eax,DWORD PTR[1700485571+r10*1+rax]
- or r11d,ebx
- mov r10d,DWORD PTR[12+rsi]
- xor r11d,ecx
- add eax,r11d
- mov r11d,0ffffffffh
- rol eax,6
- xor r11d,ecx
- add eax,ebx
- lea edx,DWORD PTR[((-1894986606))+r10*1+rdx]
- or r11d,eax
- mov r10d,DWORD PTR[40+rsi]
- xor r11d,ebx
- add edx,r11d
- mov r11d,0ffffffffh
- rol edx,10
- xor r11d,ebx
- add edx,eax
- lea ecx,DWORD PTR[((-1051523))+r10*1+rcx]
- or r11d,edx
- mov r10d,DWORD PTR[4+rsi]
- xor r11d,eax
- add ecx,r11d
- mov r11d,0ffffffffh
- rol ecx,15
- xor r11d,eax
- add ecx,edx
- lea ebx,DWORD PTR[((-2054922799))+r10*1+rbx]
- or r11d,ecx
- mov r10d,DWORD PTR[32+rsi]
- xor r11d,edx
- add ebx,r11d
- mov r11d,0ffffffffh
- rol ebx,21
- xor r11d,edx
- add ebx,ecx
- lea eax,DWORD PTR[1873313359+r10*1+rax]
- or r11d,ebx
- mov r10d,DWORD PTR[60+rsi]
- xor r11d,ecx
- add eax,r11d
- mov r11d,0ffffffffh
- rol eax,6
- xor r11d,ecx
- add eax,ebx
- lea edx,DWORD PTR[((-30611744))+r10*1+rdx]
- or r11d,eax
- mov r10d,DWORD PTR[24+rsi]
- xor r11d,ebx
- add edx,r11d
- mov r11d,0ffffffffh
- rol edx,10
- xor r11d,ebx
- add edx,eax
- lea ecx,DWORD PTR[((-1560198380))+r10*1+rcx]
- or r11d,edx
- mov r10d,DWORD PTR[52+rsi]
- xor r11d,eax
- add ecx,r11d
- mov r11d,0ffffffffh
- rol ecx,15
- xor r11d,eax
- add ecx,edx
- lea ebx,DWORD PTR[1309151649+r10*1+rbx]
- or r11d,ecx
- mov r10d,DWORD PTR[16+rsi]
- xor r11d,edx
- add ebx,r11d
- mov r11d,0ffffffffh
- rol ebx,21
- xor r11d,edx
- add ebx,ecx
- lea eax,DWORD PTR[((-145523070))+r10*1+rax]
- or r11d,ebx
- mov r10d,DWORD PTR[44+rsi]
- xor r11d,ecx
- add eax,r11d
- mov r11d,0ffffffffh
- rol eax,6
- xor r11d,ecx
- add eax,ebx
- lea edx,DWORD PTR[((-1120210379))+r10*1+rdx]
- or r11d,eax
- mov r10d,DWORD PTR[8+rsi]
- xor r11d,ebx
- add edx,r11d
- mov r11d,0ffffffffh
- rol edx,10
- xor r11d,ebx
- add edx,eax
- lea ecx,DWORD PTR[718787259+r10*1+rcx]
- or r11d,edx
- mov r10d,DWORD PTR[36+rsi]
- xor r11d,eax
- add ecx,r11d
- mov r11d,0ffffffffh
- rol ecx,15
- xor r11d,eax
- add ecx,edx
- lea ebx,DWORD PTR[((-343485551))+r10*1+rbx]
- or r11d,ecx
- mov r10d,DWORD PTR[rsi]
- xor r11d,edx
- add ebx,r11d
- mov r11d,0ffffffffh
- rol ebx,21
- xor r11d,edx
- add ebx,ecx
-
- add eax,r8d
- add ebx,r9d
- add ecx,r14d
- add edx,r15d
-
-
- add rsi,64
- cmp rsi,rdi
- jb $L$loop
-
-
-$L$end::
- mov DWORD PTR[rbp],eax
- mov DWORD PTR[4+rbp],ebx
- mov DWORD PTR[8+rbp],ecx
- mov DWORD PTR[12+rbp],edx
-
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r12,QWORD PTR[16+rsp]
-
- mov rbx,QWORD PTR[24+rsp]
-
- mov rbp,QWORD PTR[32+rsp]
-
- add rsp,40
-
-$L$epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_md5_block_asm_data_order::
-md5_block_asm_data_order ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- lea r10,QWORD PTR[$L$prologue]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- lea r10,QWORD PTR[$L$epilogue]
- cmp rbx,r10
- jae $L$in_prologue
-
- lea rax,QWORD PTR[40+rax]
-
- mov rbp,QWORD PTR[((-8))+rax]
- mov rbx,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r14,QWORD PTR[((-32))+rax]
- mov r15,QWORD PTR[((-40))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_md5_block_asm_data_order
- DD imagerel $L$SEH_end_md5_block_asm_data_order
- DD imagerel $L$SEH_info_md5_block_asm_data_order
-
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_md5_block_asm_data_order::
-DB 9,0,0,0
- DD imagerel se_handler
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+ALIGN 16
+
+PUBLIC md5_block_asm_data_order
+
+md5_block_asm_data_order PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_md5_block_asm_data_order::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ push rbp
+
+ push rbx
+
+ push r12
+
+ push r14
+
+ push r15
+
+$L$prologue::
+
+
+
+
+ mov rbp,rdi
+ shl rdx,6
+ lea rdi,QWORD PTR[rdx*1+rsi]
+ mov eax,DWORD PTR[rbp]
+ mov ebx,DWORD PTR[4+rbp]
+ mov ecx,DWORD PTR[8+rbp]
+ mov edx,DWORD PTR[12+rbp]
+
+
+
+
+
+
+
+ cmp rsi,rdi
+ je $L$end
+
+
+$L$loop::
+ mov r8d,eax
+ mov r9d,ebx
+ mov r14d,ecx
+ mov r15d,edx
+ mov r10d,DWORD PTR[rsi]
+ mov r11d,edx
+ xor r11d,ecx
+ lea eax,DWORD PTR[((-680876936))+r10*1+rax]
+ and r11d,ebx
+ mov r10d,DWORD PTR[4+rsi]
+ xor r11d,edx
+ add eax,r11d
+ rol eax,7
+ mov r11d,ecx
+ add eax,ebx
+ xor r11d,ebx
+ lea edx,DWORD PTR[((-389564586))+r10*1+rdx]
+ and r11d,eax
+ mov r10d,DWORD PTR[8+rsi]
+ xor r11d,ecx
+ add edx,r11d
+ rol edx,12
+ mov r11d,ebx
+ add edx,eax
+ xor r11d,eax
+ lea ecx,DWORD PTR[606105819+r10*1+rcx]
+ and r11d,edx
+ mov r10d,DWORD PTR[12+rsi]
+ xor r11d,ebx
+ add ecx,r11d
+ rol ecx,17
+ mov r11d,eax
+ add ecx,edx
+ xor r11d,edx
+ lea ebx,DWORD PTR[((-1044525330))+r10*1+rbx]
+ and r11d,ecx
+ mov r10d,DWORD PTR[16+rsi]
+ xor r11d,eax
+ add ebx,r11d
+ rol ebx,22
+ mov r11d,edx
+ add ebx,ecx
+ xor r11d,ecx
+ lea eax,DWORD PTR[((-176418897))+r10*1+rax]
+ and r11d,ebx
+ mov r10d,DWORD PTR[20+rsi]
+ xor r11d,edx
+ add eax,r11d
+ rol eax,7
+ mov r11d,ecx
+ add eax,ebx
+ xor r11d,ebx
+ lea edx,DWORD PTR[1200080426+r10*1+rdx]
+ and r11d,eax
+ mov r10d,DWORD PTR[24+rsi]
+ xor r11d,ecx
+ add edx,r11d
+ rol edx,12
+ mov r11d,ebx
+ add edx,eax
+ xor r11d,eax
+ lea ecx,DWORD PTR[((-1473231341))+r10*1+rcx]
+ and r11d,edx
+ mov r10d,DWORD PTR[28+rsi]
+ xor r11d,ebx
+ add ecx,r11d
+ rol ecx,17
+ mov r11d,eax
+ add ecx,edx
+ xor r11d,edx
+ lea ebx,DWORD PTR[((-45705983))+r10*1+rbx]
+ and r11d,ecx
+ mov r10d,DWORD PTR[32+rsi]
+ xor r11d,eax
+ add ebx,r11d
+ rol ebx,22
+ mov r11d,edx
+ add ebx,ecx
+ xor r11d,ecx
+ lea eax,DWORD PTR[1770035416+r10*1+rax]
+ and r11d,ebx
+ mov r10d,DWORD PTR[36+rsi]
+ xor r11d,edx
+ add eax,r11d
+ rol eax,7
+ mov r11d,ecx
+ add eax,ebx
+ xor r11d,ebx
+ lea edx,DWORD PTR[((-1958414417))+r10*1+rdx]
+ and r11d,eax
+ mov r10d,DWORD PTR[40+rsi]
+ xor r11d,ecx
+ add edx,r11d
+ rol edx,12
+ mov r11d,ebx
+ add edx,eax
+ xor r11d,eax
+ lea ecx,DWORD PTR[((-42063))+r10*1+rcx]
+ and r11d,edx
+ mov r10d,DWORD PTR[44+rsi]
+ xor r11d,ebx
+ add ecx,r11d
+ rol ecx,17
+ mov r11d,eax
+ add ecx,edx
+ xor r11d,edx
+ lea ebx,DWORD PTR[((-1990404162))+r10*1+rbx]
+ and r11d,ecx
+ mov r10d,DWORD PTR[48+rsi]
+ xor r11d,eax
+ add ebx,r11d
+ rol ebx,22
+ mov r11d,edx
+ add ebx,ecx
+ xor r11d,ecx
+ lea eax,DWORD PTR[1804603682+r10*1+rax]
+ and r11d,ebx
+ mov r10d,DWORD PTR[52+rsi]
+ xor r11d,edx
+ add eax,r11d
+ rol eax,7
+ mov r11d,ecx
+ add eax,ebx
+ xor r11d,ebx
+ lea edx,DWORD PTR[((-40341101))+r10*1+rdx]
+ and r11d,eax
+ mov r10d,DWORD PTR[56+rsi]
+ xor r11d,ecx
+ add edx,r11d
+ rol edx,12
+ mov r11d,ebx
+ add edx,eax
+ xor r11d,eax
+ lea ecx,DWORD PTR[((-1502002290))+r10*1+rcx]
+ and r11d,edx
+ mov r10d,DWORD PTR[60+rsi]
+ xor r11d,ebx
+ add ecx,r11d
+ rol ecx,17
+ mov r11d,eax
+ add ecx,edx
+ xor r11d,edx
+ lea ebx,DWORD PTR[1236535329+r10*1+rbx]
+ and r11d,ecx
+ mov r10d,DWORD PTR[4+rsi]
+ xor r11d,eax
+ add ebx,r11d
+ rol ebx,22
+ mov r11d,edx
+ add ebx,ecx
+ mov r11d,edx
+ mov r12d,edx
+ not r11d
+ and r12d,ebx
+ lea eax,DWORD PTR[((-165796510))+r10*1+rax]
+ and r11d,ecx
+ mov r10d,DWORD PTR[24+rsi]
+ or r12d,r11d
+ mov r11d,ecx
+ add eax,r12d
+ mov r12d,ecx
+ rol eax,5
+ add eax,ebx
+ not r11d
+ and r12d,eax
+ lea edx,DWORD PTR[((-1069501632))+r10*1+rdx]
+ and r11d,ebx
+ mov r10d,DWORD PTR[44+rsi]
+ or r12d,r11d
+ mov r11d,ebx
+ add edx,r12d
+ mov r12d,ebx
+ rol edx,9
+ add edx,eax
+ not r11d
+ and r12d,edx
+ lea ecx,DWORD PTR[643717713+r10*1+rcx]
+ and r11d,eax
+ mov r10d,DWORD PTR[rsi]
+ or r12d,r11d
+ mov r11d,eax
+ add ecx,r12d
+ mov r12d,eax
+ rol ecx,14
+ add ecx,edx
+ not r11d
+ and r12d,ecx
+ lea ebx,DWORD PTR[((-373897302))+r10*1+rbx]
+ and r11d,edx
+ mov r10d,DWORD PTR[20+rsi]
+ or r12d,r11d
+ mov r11d,edx
+ add ebx,r12d
+ mov r12d,edx
+ rol ebx,20
+ add ebx,ecx
+ not r11d
+ and r12d,ebx
+ lea eax,DWORD PTR[((-701558691))+r10*1+rax]
+ and r11d,ecx
+ mov r10d,DWORD PTR[40+rsi]
+ or r12d,r11d
+ mov r11d,ecx
+ add eax,r12d
+ mov r12d,ecx
+ rol eax,5
+ add eax,ebx
+ not r11d
+ and r12d,eax
+ lea edx,DWORD PTR[38016083+r10*1+rdx]
+ and r11d,ebx
+ mov r10d,DWORD PTR[60+rsi]
+ or r12d,r11d
+ mov r11d,ebx
+ add edx,r12d
+ mov r12d,ebx
+ rol edx,9
+ add edx,eax
+ not r11d
+ and r12d,edx
+ lea ecx,DWORD PTR[((-660478335))+r10*1+rcx]
+ and r11d,eax
+ mov r10d,DWORD PTR[16+rsi]
+ or r12d,r11d
+ mov r11d,eax
+ add ecx,r12d
+ mov r12d,eax
+ rol ecx,14
+ add ecx,edx
+ not r11d
+ and r12d,ecx
+ lea ebx,DWORD PTR[((-405537848))+r10*1+rbx]
+ and r11d,edx
+ mov r10d,DWORD PTR[36+rsi]
+ or r12d,r11d
+ mov r11d,edx
+ add ebx,r12d
+ mov r12d,edx
+ rol ebx,20
+ add ebx,ecx
+ not r11d
+ and r12d,ebx
+ lea eax,DWORD PTR[568446438+r10*1+rax]
+ and r11d,ecx
+ mov r10d,DWORD PTR[56+rsi]
+ or r12d,r11d
+ mov r11d,ecx
+ add eax,r12d
+ mov r12d,ecx
+ rol eax,5
+ add eax,ebx
+ not r11d
+ and r12d,eax
+ lea edx,DWORD PTR[((-1019803690))+r10*1+rdx]
+ and r11d,ebx
+ mov r10d,DWORD PTR[12+rsi]
+ or r12d,r11d
+ mov r11d,ebx
+ add edx,r12d
+ mov r12d,ebx
+ rol edx,9
+ add edx,eax
+ not r11d
+ and r12d,edx
+ lea ecx,DWORD PTR[((-187363961))+r10*1+rcx]
+ and r11d,eax
+ mov r10d,DWORD PTR[32+rsi]
+ or r12d,r11d
+ mov r11d,eax
+ add ecx,r12d
+ mov r12d,eax
+ rol ecx,14
+ add ecx,edx
+ not r11d
+ and r12d,ecx
+ lea ebx,DWORD PTR[1163531501+r10*1+rbx]
+ and r11d,edx
+ mov r10d,DWORD PTR[52+rsi]
+ or r12d,r11d
+ mov r11d,edx
+ add ebx,r12d
+ mov r12d,edx
+ rol ebx,20
+ add ebx,ecx
+ not r11d
+ and r12d,ebx
+ lea eax,DWORD PTR[((-1444681467))+r10*1+rax]
+ and r11d,ecx
+ mov r10d,DWORD PTR[8+rsi]
+ or r12d,r11d
+ mov r11d,ecx
+ add eax,r12d
+ mov r12d,ecx
+ rol eax,5
+ add eax,ebx
+ not r11d
+ and r12d,eax
+ lea edx,DWORD PTR[((-51403784))+r10*1+rdx]
+ and r11d,ebx
+ mov r10d,DWORD PTR[28+rsi]
+ or r12d,r11d
+ mov r11d,ebx
+ add edx,r12d
+ mov r12d,ebx
+ rol edx,9
+ add edx,eax
+ not r11d
+ and r12d,edx
+ lea ecx,DWORD PTR[1735328473+r10*1+rcx]
+ and r11d,eax
+ mov r10d,DWORD PTR[48+rsi]
+ or r12d,r11d
+ mov r11d,eax
+ add ecx,r12d
+ mov r12d,eax
+ rol ecx,14
+ add ecx,edx
+ not r11d
+ and r12d,ecx
+ lea ebx,DWORD PTR[((-1926607734))+r10*1+rbx]
+ and r11d,edx
+ mov r10d,DWORD PTR[20+rsi]
+ or r12d,r11d
+ mov r11d,edx
+ add ebx,r12d
+ mov r12d,edx
+ rol ebx,20
+ add ebx,ecx
+ mov r11d,ecx
+ lea eax,DWORD PTR[((-378558))+r10*1+rax]
+ xor r11d,edx
+ mov r10d,DWORD PTR[32+rsi]
+ xor r11d,ebx
+ add eax,r11d
+ mov r11d,ebx
+ rol eax,4
+ add eax,ebx
+ lea edx,DWORD PTR[((-2022574463))+r10*1+rdx]
+ xor r11d,ecx
+ mov r10d,DWORD PTR[44+rsi]
+ xor r11d,eax
+ add edx,r11d
+ rol edx,11
+ mov r11d,eax
+ add edx,eax
+ lea ecx,DWORD PTR[1839030562+r10*1+rcx]
+ xor r11d,ebx
+ mov r10d,DWORD PTR[56+rsi]
+ xor r11d,edx
+ add ecx,r11d
+ mov r11d,edx
+ rol ecx,16
+ add ecx,edx
+ lea ebx,DWORD PTR[((-35309556))+r10*1+rbx]
+ xor r11d,eax
+ mov r10d,DWORD PTR[4+rsi]
+ xor r11d,ecx
+ add ebx,r11d
+ rol ebx,23
+ mov r11d,ecx
+ add ebx,ecx
+ lea eax,DWORD PTR[((-1530992060))+r10*1+rax]
+ xor r11d,edx
+ mov r10d,DWORD PTR[16+rsi]
+ xor r11d,ebx
+ add eax,r11d
+ mov r11d,ebx
+ rol eax,4
+ add eax,ebx
+ lea edx,DWORD PTR[1272893353+r10*1+rdx]
+ xor r11d,ecx
+ mov r10d,DWORD PTR[28+rsi]
+ xor r11d,eax
+ add edx,r11d
+ rol edx,11
+ mov r11d,eax
+ add edx,eax
+ lea ecx,DWORD PTR[((-155497632))+r10*1+rcx]
+ xor r11d,ebx
+ mov r10d,DWORD PTR[40+rsi]
+ xor r11d,edx
+ add ecx,r11d
+ mov r11d,edx
+ rol ecx,16
+ add ecx,edx
+ lea ebx,DWORD PTR[((-1094730640))+r10*1+rbx]
+ xor r11d,eax
+ mov r10d,DWORD PTR[52+rsi]
+ xor r11d,ecx
+ add ebx,r11d
+ rol ebx,23
+ mov r11d,ecx
+ add ebx,ecx
+ lea eax,DWORD PTR[681279174+r10*1+rax]
+ xor r11d,edx
+ mov r10d,DWORD PTR[rsi]
+ xor r11d,ebx
+ add eax,r11d
+ mov r11d,ebx
+ rol eax,4
+ add eax,ebx
+ lea edx,DWORD PTR[((-358537222))+r10*1+rdx]
+ xor r11d,ecx
+ mov r10d,DWORD PTR[12+rsi]
+ xor r11d,eax
+ add edx,r11d
+ rol edx,11
+ mov r11d,eax
+ add edx,eax
+ lea ecx,DWORD PTR[((-722521979))+r10*1+rcx]
+ xor r11d,ebx
+ mov r10d,DWORD PTR[24+rsi]
+ xor r11d,edx
+ add ecx,r11d
+ mov r11d,edx
+ rol ecx,16
+ add ecx,edx
+ lea ebx,DWORD PTR[76029189+r10*1+rbx]
+ xor r11d,eax
+ mov r10d,DWORD PTR[36+rsi]
+ xor r11d,ecx
+ add ebx,r11d
+ rol ebx,23
+ mov r11d,ecx
+ add ebx,ecx
+ lea eax,DWORD PTR[((-640364487))+r10*1+rax]
+ xor r11d,edx
+ mov r10d,DWORD PTR[48+rsi]
+ xor r11d,ebx
+ add eax,r11d
+ mov r11d,ebx
+ rol eax,4
+ add eax,ebx
+ lea edx,DWORD PTR[((-421815835))+r10*1+rdx]
+ xor r11d,ecx
+ mov r10d,DWORD PTR[60+rsi]
+ xor r11d,eax
+ add edx,r11d
+ rol edx,11
+ mov r11d,eax
+ add edx,eax
+ lea ecx,DWORD PTR[530742520+r10*1+rcx]
+ xor r11d,ebx
+ mov r10d,DWORD PTR[8+rsi]
+ xor r11d,edx
+ add ecx,r11d
+ mov r11d,edx
+ rol ecx,16
+ add ecx,edx
+ lea ebx,DWORD PTR[((-995338651))+r10*1+rbx]
+ xor r11d,eax
+ mov r10d,DWORD PTR[rsi]
+ xor r11d,ecx
+ add ebx,r11d
+ rol ebx,23
+ mov r11d,ecx
+ add ebx,ecx
+ mov r11d,0ffffffffh
+ xor r11d,edx
+ lea eax,DWORD PTR[((-198630844))+r10*1+rax]
+ or r11d,ebx
+ mov r10d,DWORD PTR[28+rsi]
+ xor r11d,ecx
+ add eax,r11d
+ mov r11d,0ffffffffh
+ rol eax,6
+ xor r11d,ecx
+ add eax,ebx
+ lea edx,DWORD PTR[1126891415+r10*1+rdx]
+ or r11d,eax
+ mov r10d,DWORD PTR[56+rsi]
+ xor r11d,ebx
+ add edx,r11d
+ mov r11d,0ffffffffh
+ rol edx,10
+ xor r11d,ebx
+ add edx,eax
+ lea ecx,DWORD PTR[((-1416354905))+r10*1+rcx]
+ or r11d,edx
+ mov r10d,DWORD PTR[20+rsi]
+ xor r11d,eax
+ add ecx,r11d
+ mov r11d,0ffffffffh
+ rol ecx,15
+ xor r11d,eax
+ add ecx,edx
+ lea ebx,DWORD PTR[((-57434055))+r10*1+rbx]
+ or r11d,ecx
+ mov r10d,DWORD PTR[48+rsi]
+ xor r11d,edx
+ add ebx,r11d
+ mov r11d,0ffffffffh
+ rol ebx,21
+ xor r11d,edx
+ add ebx,ecx
+ lea eax,DWORD PTR[1700485571+r10*1+rax]
+ or r11d,ebx
+ mov r10d,DWORD PTR[12+rsi]
+ xor r11d,ecx
+ add eax,r11d
+ mov r11d,0ffffffffh
+ rol eax,6
+ xor r11d,ecx
+ add eax,ebx
+ lea edx,DWORD PTR[((-1894986606))+r10*1+rdx]
+ or r11d,eax
+ mov r10d,DWORD PTR[40+rsi]
+ xor r11d,ebx
+ add edx,r11d
+ mov r11d,0ffffffffh
+ rol edx,10
+ xor r11d,ebx
+ add edx,eax
+ lea ecx,DWORD PTR[((-1051523))+r10*1+rcx]
+ or r11d,edx
+ mov r10d,DWORD PTR[4+rsi]
+ xor r11d,eax
+ add ecx,r11d
+ mov r11d,0ffffffffh
+ rol ecx,15
+ xor r11d,eax
+ add ecx,edx
+ lea ebx,DWORD PTR[((-2054922799))+r10*1+rbx]
+ or r11d,ecx
+ mov r10d,DWORD PTR[32+rsi]
+ xor r11d,edx
+ add ebx,r11d
+ mov r11d,0ffffffffh
+ rol ebx,21
+ xor r11d,edx
+ add ebx,ecx
+ lea eax,DWORD PTR[1873313359+r10*1+rax]
+ or r11d,ebx
+ mov r10d,DWORD PTR[60+rsi]
+ xor r11d,ecx
+ add eax,r11d
+ mov r11d,0ffffffffh
+ rol eax,6
+ xor r11d,ecx
+ add eax,ebx
+ lea edx,DWORD PTR[((-30611744))+r10*1+rdx]
+ or r11d,eax
+ mov r10d,DWORD PTR[24+rsi]
+ xor r11d,ebx
+ add edx,r11d
+ mov r11d,0ffffffffh
+ rol edx,10
+ xor r11d,ebx
+ add edx,eax
+ lea ecx,DWORD PTR[((-1560198380))+r10*1+rcx]
+ or r11d,edx
+ mov r10d,DWORD PTR[52+rsi]
+ xor r11d,eax
+ add ecx,r11d
+ mov r11d,0ffffffffh
+ rol ecx,15
+ xor r11d,eax
+ add ecx,edx
+ lea ebx,DWORD PTR[1309151649+r10*1+rbx]
+ or r11d,ecx
+ mov r10d,DWORD PTR[16+rsi]
+ xor r11d,edx
+ add ebx,r11d
+ mov r11d,0ffffffffh
+ rol ebx,21
+ xor r11d,edx
+ add ebx,ecx
+ lea eax,DWORD PTR[((-145523070))+r10*1+rax]
+ or r11d,ebx
+ mov r10d,DWORD PTR[44+rsi]
+ xor r11d,ecx
+ add eax,r11d
+ mov r11d,0ffffffffh
+ rol eax,6
+ xor r11d,ecx
+ add eax,ebx
+ lea edx,DWORD PTR[((-1120210379))+r10*1+rdx]
+ or r11d,eax
+ mov r10d,DWORD PTR[8+rsi]
+ xor r11d,ebx
+ add edx,r11d
+ mov r11d,0ffffffffh
+ rol edx,10
+ xor r11d,ebx
+ add edx,eax
+ lea ecx,DWORD PTR[718787259+r10*1+rcx]
+ or r11d,edx
+ mov r10d,DWORD PTR[36+rsi]
+ xor r11d,eax
+ add ecx,r11d
+ mov r11d,0ffffffffh
+ rol ecx,15
+ xor r11d,eax
+ add ecx,edx
+ lea ebx,DWORD PTR[((-343485551))+r10*1+rbx]
+ or r11d,ecx
+ mov r10d,DWORD PTR[rsi]
+ xor r11d,edx
+ add ebx,r11d
+ mov r11d,0ffffffffh
+ rol ebx,21
+ xor r11d,edx
+ add ebx,ecx
+
+ add eax,r8d
+ add ebx,r9d
+ add ecx,r14d
+ add edx,r15d
+
+
+ add rsi,64
+ cmp rsi,rdi
+ jb $L$loop
+
+
+$L$end::
+ mov DWORD PTR[rbp],eax
+ mov DWORD PTR[4+rbp],ebx
+ mov DWORD PTR[8+rbp],ecx
+ mov DWORD PTR[12+rbp],edx
+
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r12,QWORD PTR[16+rsp]
+
+ mov rbx,QWORD PTR[24+rsp]
+
+ mov rbp,QWORD PTR[32+rsp]
+
+ add rsp,40
+
+$L$epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_md5_block_asm_data_order::
+md5_block_asm_data_order ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$prologue]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea r10,QWORD PTR[$L$epilogue]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ lea rax,QWORD PTR[40+rax]
+
+ mov rbp,QWORD PTR[((-8))+rax]
+ mov rbx,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r14,QWORD PTR[((-32))+rax]
+ mov r15,QWORD PTR[((-40))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_md5_block_asm_data_order
+ DD imagerel $L$SEH_end_md5_block_asm_data_order
+ DD imagerel $L$SEH_info_md5_block_asm_data_order
+
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_md5_block_asm_data_order::
+DB 9,0,0,0
+ DD imagerel se_handler
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/modes/aesni-gcm-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/modes/aesni-gcm-x86_64.masm
index a41e86c8fb..6afa79b962 100644
--- a/contrib/libs/openssl/asm/windows/crypto/modes/aesni-gcm-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/modes/aesni-gcm-x86_64.masm
@@ -1,984 +1,984 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-
-ALIGN 32
-_aesni_ctr32_ghash_6x PROC PRIVATE
-
- vmovdqu xmm2,XMMWORD PTR[32+r11]
- sub rdx,6
- vpxor xmm4,xmm4,xmm4
- vmovdqu xmm15,XMMWORD PTR[((0-128))+rcx]
- vpaddb xmm10,xmm1,xmm2
- vpaddb xmm11,xmm10,xmm2
- vpaddb xmm12,xmm11,xmm2
- vpaddb xmm13,xmm12,xmm2
- vpaddb xmm14,xmm13,xmm2
- vpxor xmm9,xmm1,xmm15
- vmovdqu XMMWORD PTR[(16+8)+rsp],xmm4
- jmp $L$oop6x
-
-ALIGN 32
-$L$oop6x::
- add ebx,100663296
- jc $L$handle_ctr32
- vmovdqu xmm3,XMMWORD PTR[((0-32))+r9]
- vpaddb xmm1,xmm14,xmm2
- vpxor xmm10,xmm10,xmm15
- vpxor xmm11,xmm11,xmm15
-
-$L$resume_ctr32::
- vmovdqu XMMWORD PTR[r8],xmm1
- vpclmulqdq xmm5,xmm7,xmm3,010h
- vpxor xmm12,xmm12,xmm15
- vmovups xmm2,XMMWORD PTR[((16-128))+rcx]
- vpclmulqdq xmm6,xmm7,xmm3,001h
- xor r12,r12
- cmp r15,r14
-
- vaesenc xmm9,xmm9,xmm2
- vmovdqu xmm0,XMMWORD PTR[((48+8))+rsp]
- vpxor xmm13,xmm13,xmm15
- vpclmulqdq xmm1,xmm7,xmm3,000h
- vaesenc xmm10,xmm10,xmm2
- vpxor xmm14,xmm14,xmm15
- setnc r12b
- vpclmulqdq xmm7,xmm7,xmm3,011h
- vaesenc xmm11,xmm11,xmm2
- vmovdqu xmm3,XMMWORD PTR[((16-32))+r9]
- neg r12
- vaesenc xmm12,xmm12,xmm2
- vpxor xmm6,xmm6,xmm5
- vpclmulqdq xmm5,xmm0,xmm3,000h
- vpxor xmm8,xmm8,xmm4
- vaesenc xmm13,xmm13,xmm2
- vpxor xmm4,xmm1,xmm5
- and r12,060h
- vmovups xmm15,XMMWORD PTR[((32-128))+rcx]
- vpclmulqdq xmm1,xmm0,xmm3,010h
- vaesenc xmm14,xmm14,xmm2
-
- vpclmulqdq xmm2,xmm0,xmm3,001h
- lea r14,QWORD PTR[r12*1+r14]
- vaesenc xmm9,xmm9,xmm15
- vpxor xmm8,xmm8,XMMWORD PTR[((16+8))+rsp]
- vpclmulqdq xmm3,xmm0,xmm3,011h
- vmovdqu xmm0,XMMWORD PTR[((64+8))+rsp]
- vaesenc xmm10,xmm10,xmm15
- movbe r13,QWORD PTR[88+r14]
- vaesenc xmm11,xmm11,xmm15
- movbe r12,QWORD PTR[80+r14]
- vaesenc xmm12,xmm12,xmm15
- mov QWORD PTR[((32+8))+rsp],r13
- vaesenc xmm13,xmm13,xmm15
- mov QWORD PTR[((40+8))+rsp],r12
- vmovdqu xmm5,XMMWORD PTR[((48-32))+r9]
- vaesenc xmm14,xmm14,xmm15
-
- vmovups xmm15,XMMWORD PTR[((48-128))+rcx]
- vpxor xmm6,xmm6,xmm1
- vpclmulqdq xmm1,xmm0,xmm5,000h
- vaesenc xmm9,xmm9,xmm15
- vpxor xmm6,xmm6,xmm2
- vpclmulqdq xmm2,xmm0,xmm5,010h
- vaesenc xmm10,xmm10,xmm15
- vpxor xmm7,xmm7,xmm3
- vpclmulqdq xmm3,xmm0,xmm5,001h
- vaesenc xmm11,xmm11,xmm15
- vpclmulqdq xmm5,xmm0,xmm5,011h
- vmovdqu xmm0,XMMWORD PTR[((80+8))+rsp]
- vaesenc xmm12,xmm12,xmm15
- vaesenc xmm13,xmm13,xmm15
- vpxor xmm4,xmm4,xmm1
- vmovdqu xmm1,XMMWORD PTR[((64-32))+r9]
- vaesenc xmm14,xmm14,xmm15
-
- vmovups xmm15,XMMWORD PTR[((64-128))+rcx]
- vpxor xmm6,xmm6,xmm2
- vpclmulqdq xmm2,xmm0,xmm1,000h
- vaesenc xmm9,xmm9,xmm15
- vpxor xmm6,xmm6,xmm3
- vpclmulqdq xmm3,xmm0,xmm1,010h
- vaesenc xmm10,xmm10,xmm15
- movbe r13,QWORD PTR[72+r14]
- vpxor xmm7,xmm7,xmm5
- vpclmulqdq xmm5,xmm0,xmm1,001h
- vaesenc xmm11,xmm11,xmm15
- movbe r12,QWORD PTR[64+r14]
- vpclmulqdq xmm1,xmm0,xmm1,011h
- vmovdqu xmm0,XMMWORD PTR[((96+8))+rsp]
- vaesenc xmm12,xmm12,xmm15
- mov QWORD PTR[((48+8))+rsp],r13
- vaesenc xmm13,xmm13,xmm15
- mov QWORD PTR[((56+8))+rsp],r12
- vpxor xmm4,xmm4,xmm2
- vmovdqu xmm2,XMMWORD PTR[((96-32))+r9]
- vaesenc xmm14,xmm14,xmm15
-
- vmovups xmm15,XMMWORD PTR[((80-128))+rcx]
- vpxor xmm6,xmm6,xmm3
- vpclmulqdq xmm3,xmm0,xmm2,000h
- vaesenc xmm9,xmm9,xmm15
- vpxor xmm6,xmm6,xmm5
- vpclmulqdq xmm5,xmm0,xmm2,010h
- vaesenc xmm10,xmm10,xmm15
- movbe r13,QWORD PTR[56+r14]
- vpxor xmm7,xmm7,xmm1
- vpclmulqdq xmm1,xmm0,xmm2,001h
- vpxor xmm8,xmm8,XMMWORD PTR[((112+8))+rsp]
- vaesenc xmm11,xmm11,xmm15
- movbe r12,QWORD PTR[48+r14]
- vpclmulqdq xmm2,xmm0,xmm2,011h
- vaesenc xmm12,xmm12,xmm15
- mov QWORD PTR[((64+8))+rsp],r13
- vaesenc xmm13,xmm13,xmm15
- mov QWORD PTR[((72+8))+rsp],r12
- vpxor xmm4,xmm4,xmm3
- vmovdqu xmm3,XMMWORD PTR[((112-32))+r9]
- vaesenc xmm14,xmm14,xmm15
-
- vmovups xmm15,XMMWORD PTR[((96-128))+rcx]
- vpxor xmm6,xmm6,xmm5
- vpclmulqdq xmm5,xmm8,xmm3,010h
- vaesenc xmm9,xmm9,xmm15
- vpxor xmm6,xmm6,xmm1
- vpclmulqdq xmm1,xmm8,xmm3,001h
- vaesenc xmm10,xmm10,xmm15
- movbe r13,QWORD PTR[40+r14]
- vpxor xmm7,xmm7,xmm2
- vpclmulqdq xmm2,xmm8,xmm3,000h
- vaesenc xmm11,xmm11,xmm15
- movbe r12,QWORD PTR[32+r14]
- vpclmulqdq xmm8,xmm8,xmm3,011h
- vaesenc xmm12,xmm12,xmm15
- mov QWORD PTR[((80+8))+rsp],r13
- vaesenc xmm13,xmm13,xmm15
- mov QWORD PTR[((88+8))+rsp],r12
- vpxor xmm6,xmm6,xmm5
- vaesenc xmm14,xmm14,xmm15
- vpxor xmm6,xmm6,xmm1
-
- vmovups xmm15,XMMWORD PTR[((112-128))+rcx]
- vpslldq xmm5,xmm6,8
- vpxor xmm4,xmm4,xmm2
- vmovdqu xmm3,XMMWORD PTR[16+r11]
-
- vaesenc xmm9,xmm9,xmm15
- vpxor xmm7,xmm7,xmm8
- vaesenc xmm10,xmm10,xmm15
- vpxor xmm4,xmm4,xmm5
- movbe r13,QWORD PTR[24+r14]
- vaesenc xmm11,xmm11,xmm15
- movbe r12,QWORD PTR[16+r14]
- vpalignr xmm0,xmm4,xmm4,8
- vpclmulqdq xmm4,xmm4,xmm3,010h
- mov QWORD PTR[((96+8))+rsp],r13
- vaesenc xmm12,xmm12,xmm15
- mov QWORD PTR[((104+8))+rsp],r12
- vaesenc xmm13,xmm13,xmm15
- vmovups xmm1,XMMWORD PTR[((128-128))+rcx]
- vaesenc xmm14,xmm14,xmm15
-
- vaesenc xmm9,xmm9,xmm1
- vmovups xmm15,XMMWORD PTR[((144-128))+rcx]
- vaesenc xmm10,xmm10,xmm1
- vpsrldq xmm6,xmm6,8
- vaesenc xmm11,xmm11,xmm1
- vpxor xmm7,xmm7,xmm6
- vaesenc xmm12,xmm12,xmm1
- vpxor xmm4,xmm4,xmm0
- movbe r13,QWORD PTR[8+r14]
- vaesenc xmm13,xmm13,xmm1
- movbe r12,QWORD PTR[r14]
- vaesenc xmm14,xmm14,xmm1
- vmovups xmm1,XMMWORD PTR[((160-128))+rcx]
- cmp ebp,11
- jb $L$enc_tail
-
- vaesenc xmm9,xmm9,xmm15
- vaesenc xmm10,xmm10,xmm15
- vaesenc xmm11,xmm11,xmm15
- vaesenc xmm12,xmm12,xmm15
- vaesenc xmm13,xmm13,xmm15
- vaesenc xmm14,xmm14,xmm15
-
- vaesenc xmm9,xmm9,xmm1
- vaesenc xmm10,xmm10,xmm1
- vaesenc xmm11,xmm11,xmm1
- vaesenc xmm12,xmm12,xmm1
- vaesenc xmm13,xmm13,xmm1
- vmovups xmm15,XMMWORD PTR[((176-128))+rcx]
- vaesenc xmm14,xmm14,xmm1
- vmovups xmm1,XMMWORD PTR[((192-128))+rcx]
- je $L$enc_tail
-
- vaesenc xmm9,xmm9,xmm15
- vaesenc xmm10,xmm10,xmm15
- vaesenc xmm11,xmm11,xmm15
- vaesenc xmm12,xmm12,xmm15
- vaesenc xmm13,xmm13,xmm15
- vaesenc xmm14,xmm14,xmm15
-
- vaesenc xmm9,xmm9,xmm1
- vaesenc xmm10,xmm10,xmm1
- vaesenc xmm11,xmm11,xmm1
- vaesenc xmm12,xmm12,xmm1
- vaesenc xmm13,xmm13,xmm1
- vmovups xmm15,XMMWORD PTR[((208-128))+rcx]
- vaesenc xmm14,xmm14,xmm1
- vmovups xmm1,XMMWORD PTR[((224-128))+rcx]
- jmp $L$enc_tail
-
-ALIGN 32
-$L$handle_ctr32::
- vmovdqu xmm0,XMMWORD PTR[r11]
- vpshufb xmm6,xmm1,xmm0
- vmovdqu xmm5,XMMWORD PTR[48+r11]
- vpaddd xmm10,xmm6,XMMWORD PTR[64+r11]
- vpaddd xmm11,xmm6,xmm5
- vmovdqu xmm3,XMMWORD PTR[((0-32))+r9]
- vpaddd xmm12,xmm10,xmm5
- vpshufb xmm10,xmm10,xmm0
- vpaddd xmm13,xmm11,xmm5
- vpshufb xmm11,xmm11,xmm0
- vpxor xmm10,xmm10,xmm15
- vpaddd xmm14,xmm12,xmm5
- vpshufb xmm12,xmm12,xmm0
- vpxor xmm11,xmm11,xmm15
- vpaddd xmm1,xmm13,xmm5
- vpshufb xmm13,xmm13,xmm0
- vpshufb xmm14,xmm14,xmm0
- vpshufb xmm1,xmm1,xmm0
- jmp $L$resume_ctr32
-
-ALIGN 32
-$L$enc_tail::
- vaesenc xmm9,xmm9,xmm15
- vmovdqu XMMWORD PTR[(16+8)+rsp],xmm7
- vpalignr xmm8,xmm4,xmm4,8
- vaesenc xmm10,xmm10,xmm15
- vpclmulqdq xmm4,xmm4,xmm3,010h
- vpxor xmm2,xmm1,XMMWORD PTR[rdi]
- vaesenc xmm11,xmm11,xmm15
- vpxor xmm0,xmm1,XMMWORD PTR[16+rdi]
- vaesenc xmm12,xmm12,xmm15
- vpxor xmm5,xmm1,XMMWORD PTR[32+rdi]
- vaesenc xmm13,xmm13,xmm15
- vpxor xmm6,xmm1,XMMWORD PTR[48+rdi]
- vaesenc xmm14,xmm14,xmm15
- vpxor xmm7,xmm1,XMMWORD PTR[64+rdi]
- vpxor xmm3,xmm1,XMMWORD PTR[80+rdi]
- vmovdqu xmm1,XMMWORD PTR[r8]
-
- vaesenclast xmm9,xmm9,xmm2
- vmovdqu xmm2,XMMWORD PTR[32+r11]
- vaesenclast xmm10,xmm10,xmm0
- vpaddb xmm0,xmm1,xmm2
- mov QWORD PTR[((112+8))+rsp],r13
- lea rdi,QWORD PTR[96+rdi]
- vaesenclast xmm11,xmm11,xmm5
- vpaddb xmm5,xmm0,xmm2
- mov QWORD PTR[((120+8))+rsp],r12
- lea rsi,QWORD PTR[96+rsi]
- vmovdqu xmm15,XMMWORD PTR[((0-128))+rcx]
- vaesenclast xmm12,xmm12,xmm6
- vpaddb xmm6,xmm5,xmm2
- vaesenclast xmm13,xmm13,xmm7
- vpaddb xmm7,xmm6,xmm2
- vaesenclast xmm14,xmm14,xmm3
- vpaddb xmm3,xmm7,xmm2
-
- add r10,060h
- sub rdx,06h
- jc $L$6x_done
-
- vmovups XMMWORD PTR[(-96)+rsi],xmm9
- vpxor xmm9,xmm1,xmm15
- vmovups XMMWORD PTR[(-80)+rsi],xmm10
- vmovdqa xmm10,xmm0
- vmovups XMMWORD PTR[(-64)+rsi],xmm11
- vmovdqa xmm11,xmm5
- vmovups XMMWORD PTR[(-48)+rsi],xmm12
- vmovdqa xmm12,xmm6
- vmovups XMMWORD PTR[(-32)+rsi],xmm13
- vmovdqa xmm13,xmm7
- vmovups XMMWORD PTR[(-16)+rsi],xmm14
- vmovdqa xmm14,xmm3
- vmovdqu xmm7,XMMWORD PTR[((32+8))+rsp]
- jmp $L$oop6x
-
-$L$6x_done::
- vpxor xmm8,xmm8,XMMWORD PTR[((16+8))+rsp]
- vpxor xmm8,xmm8,xmm4
-
- DB 0F3h,0C3h ;repret
-
-_aesni_ctr32_ghash_6x ENDP
-PUBLIC aesni_gcm_decrypt
-
-ALIGN 32
-aesni_gcm_decrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_gcm_decrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- xor r10,r10
- cmp rdx,060h
- jb $L$gcm_dec_abort
-
- lea rax,QWORD PTR[rsp]
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[(-216)+rax],xmm6
- movaps XMMWORD PTR[(-200)+rax],xmm7
- movaps XMMWORD PTR[(-184)+rax],xmm8
- movaps XMMWORD PTR[(-168)+rax],xmm9
- movaps XMMWORD PTR[(-152)+rax],xmm10
- movaps XMMWORD PTR[(-136)+rax],xmm11
- movaps XMMWORD PTR[(-120)+rax],xmm12
- movaps XMMWORD PTR[(-104)+rax],xmm13
- movaps XMMWORD PTR[(-88)+rax],xmm14
- movaps XMMWORD PTR[(-72)+rax],xmm15
-$L$gcm_dec_body::
- vzeroupper
-
- vmovdqu xmm1,XMMWORD PTR[r8]
- add rsp,-128
- mov ebx,DWORD PTR[12+r8]
- lea r11,QWORD PTR[$L$bswap_mask]
- lea r14,QWORD PTR[((-128))+rcx]
- mov r15,0f80h
- vmovdqu xmm8,XMMWORD PTR[r9]
- and rsp,-128
- vmovdqu xmm0,XMMWORD PTR[r11]
- lea rcx,QWORD PTR[128+rcx]
- lea r9,QWORD PTR[((32+32))+r9]
- mov ebp,DWORD PTR[((240-128))+rcx]
- vpshufb xmm8,xmm8,xmm0
-
- and r14,r15
- and r15,rsp
- sub r15,r14
- jc $L$dec_no_key_aliasing
- cmp r15,768
- jnc $L$dec_no_key_aliasing
- sub rsp,r15
-$L$dec_no_key_aliasing::
-
- vmovdqu xmm7,XMMWORD PTR[80+rdi]
- lea r14,QWORD PTR[rdi]
- vmovdqu xmm4,XMMWORD PTR[64+rdi]
- lea r15,QWORD PTR[((-192))+rdx*1+rdi]
- vmovdqu xmm5,XMMWORD PTR[48+rdi]
- shr rdx,4
- xor r10,r10
- vmovdqu xmm6,XMMWORD PTR[32+rdi]
- vpshufb xmm7,xmm7,xmm0
- vmovdqu xmm2,XMMWORD PTR[16+rdi]
- vpshufb xmm4,xmm4,xmm0
- vmovdqu xmm3,XMMWORD PTR[rdi]
- vpshufb xmm5,xmm5,xmm0
- vmovdqu XMMWORD PTR[48+rsp],xmm4
- vpshufb xmm6,xmm6,xmm0
- vmovdqu XMMWORD PTR[64+rsp],xmm5
- vpshufb xmm2,xmm2,xmm0
- vmovdqu XMMWORD PTR[80+rsp],xmm6
- vpshufb xmm3,xmm3,xmm0
- vmovdqu XMMWORD PTR[96+rsp],xmm2
- vmovdqu XMMWORD PTR[112+rsp],xmm3
-
- call _aesni_ctr32_ghash_6x
-
- vmovups XMMWORD PTR[(-96)+rsi],xmm9
- vmovups XMMWORD PTR[(-80)+rsi],xmm10
- vmovups XMMWORD PTR[(-64)+rsi],xmm11
- vmovups XMMWORD PTR[(-48)+rsi],xmm12
- vmovups XMMWORD PTR[(-32)+rsi],xmm13
- vmovups XMMWORD PTR[(-16)+rsi],xmm14
-
- vpshufb xmm8,xmm8,XMMWORD PTR[r11]
- vmovdqu XMMWORD PTR[(-64)+r9],xmm8
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-216))+rax]
- movaps xmm7,XMMWORD PTR[((-200))+rax]
- movaps xmm8,XMMWORD PTR[((-184))+rax]
- movaps xmm9,XMMWORD PTR[((-168))+rax]
- movaps xmm10,XMMWORD PTR[((-152))+rax]
- movaps xmm11,XMMWORD PTR[((-136))+rax]
- movaps xmm12,XMMWORD PTR[((-120))+rax]
- movaps xmm13,XMMWORD PTR[((-104))+rax]
- movaps xmm14,XMMWORD PTR[((-88))+rax]
- movaps xmm15,XMMWORD PTR[((-72))+rax]
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$gcm_dec_abort::
- mov rax,r10
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_gcm_decrypt::
-aesni_gcm_decrypt ENDP
-
-ALIGN 32
-_aesni_ctr32_6x PROC PRIVATE
-
- vmovdqu xmm4,XMMWORD PTR[((0-128))+rcx]
- vmovdqu xmm2,XMMWORD PTR[32+r11]
- lea r13,QWORD PTR[((-1))+rbp]
- vmovups xmm15,XMMWORD PTR[((16-128))+rcx]
- lea r12,QWORD PTR[((32-128))+rcx]
- vpxor xmm9,xmm1,xmm4
- add ebx,100663296
- jc $L$handle_ctr32_2
- vpaddb xmm10,xmm1,xmm2
- vpaddb xmm11,xmm10,xmm2
- vpxor xmm10,xmm10,xmm4
- vpaddb xmm12,xmm11,xmm2
- vpxor xmm11,xmm11,xmm4
- vpaddb xmm13,xmm12,xmm2
- vpxor xmm12,xmm12,xmm4
- vpaddb xmm14,xmm13,xmm2
- vpxor xmm13,xmm13,xmm4
- vpaddb xmm1,xmm14,xmm2
- vpxor xmm14,xmm14,xmm4
- jmp $L$oop_ctr32
-
-ALIGN 16
-$L$oop_ctr32::
- vaesenc xmm9,xmm9,xmm15
- vaesenc xmm10,xmm10,xmm15
- vaesenc xmm11,xmm11,xmm15
- vaesenc xmm12,xmm12,xmm15
- vaesenc xmm13,xmm13,xmm15
- vaesenc xmm14,xmm14,xmm15
- vmovups xmm15,XMMWORD PTR[r12]
- lea r12,QWORD PTR[16+r12]
- dec r13d
- jnz $L$oop_ctr32
-
- vmovdqu xmm3,XMMWORD PTR[r12]
- vaesenc xmm9,xmm9,xmm15
- vpxor xmm4,xmm3,XMMWORD PTR[rdi]
- vaesenc xmm10,xmm10,xmm15
- vpxor xmm5,xmm3,XMMWORD PTR[16+rdi]
- vaesenc xmm11,xmm11,xmm15
- vpxor xmm6,xmm3,XMMWORD PTR[32+rdi]
- vaesenc xmm12,xmm12,xmm15
- vpxor xmm8,xmm3,XMMWORD PTR[48+rdi]
- vaesenc xmm13,xmm13,xmm15
- vpxor xmm2,xmm3,XMMWORD PTR[64+rdi]
- vaesenc xmm14,xmm14,xmm15
- vpxor xmm3,xmm3,XMMWORD PTR[80+rdi]
- lea rdi,QWORD PTR[96+rdi]
-
- vaesenclast xmm9,xmm9,xmm4
- vaesenclast xmm10,xmm10,xmm5
- vaesenclast xmm11,xmm11,xmm6
- vaesenclast xmm12,xmm12,xmm8
- vaesenclast xmm13,xmm13,xmm2
- vaesenclast xmm14,xmm14,xmm3
- vmovups XMMWORD PTR[rsi],xmm9
- vmovups XMMWORD PTR[16+rsi],xmm10
- vmovups XMMWORD PTR[32+rsi],xmm11
- vmovups XMMWORD PTR[48+rsi],xmm12
- vmovups XMMWORD PTR[64+rsi],xmm13
- vmovups XMMWORD PTR[80+rsi],xmm14
- lea rsi,QWORD PTR[96+rsi]
-
- DB 0F3h,0C3h ;repret
-ALIGN 32
-$L$handle_ctr32_2::
- vpshufb xmm6,xmm1,xmm0
- vmovdqu xmm5,XMMWORD PTR[48+r11]
- vpaddd xmm10,xmm6,XMMWORD PTR[64+r11]
- vpaddd xmm11,xmm6,xmm5
- vpaddd xmm12,xmm10,xmm5
- vpshufb xmm10,xmm10,xmm0
- vpaddd xmm13,xmm11,xmm5
- vpshufb xmm11,xmm11,xmm0
- vpxor xmm10,xmm10,xmm4
- vpaddd xmm14,xmm12,xmm5
- vpshufb xmm12,xmm12,xmm0
- vpxor xmm11,xmm11,xmm4
- vpaddd xmm1,xmm13,xmm5
- vpshufb xmm13,xmm13,xmm0
- vpxor xmm12,xmm12,xmm4
- vpshufb xmm14,xmm14,xmm0
- vpxor xmm13,xmm13,xmm4
- vpshufb xmm1,xmm1,xmm0
- vpxor xmm14,xmm14,xmm4
- jmp $L$oop_ctr32
-
-_aesni_ctr32_6x ENDP
-
-PUBLIC aesni_gcm_encrypt
-
-ALIGN 32
-aesni_gcm_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_aesni_gcm_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- xor r10,r10
- cmp rdx,060h*3
- jb $L$gcm_enc_abort
-
- lea rax,QWORD PTR[rsp]
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[(-216)+rax],xmm6
- movaps XMMWORD PTR[(-200)+rax],xmm7
- movaps XMMWORD PTR[(-184)+rax],xmm8
- movaps XMMWORD PTR[(-168)+rax],xmm9
- movaps XMMWORD PTR[(-152)+rax],xmm10
- movaps XMMWORD PTR[(-136)+rax],xmm11
- movaps XMMWORD PTR[(-120)+rax],xmm12
- movaps XMMWORD PTR[(-104)+rax],xmm13
- movaps XMMWORD PTR[(-88)+rax],xmm14
- movaps XMMWORD PTR[(-72)+rax],xmm15
-$L$gcm_enc_body::
- vzeroupper
-
- vmovdqu xmm1,XMMWORD PTR[r8]
- add rsp,-128
- mov ebx,DWORD PTR[12+r8]
- lea r11,QWORD PTR[$L$bswap_mask]
- lea r14,QWORD PTR[((-128))+rcx]
- mov r15,0f80h
- lea rcx,QWORD PTR[128+rcx]
- vmovdqu xmm0,XMMWORD PTR[r11]
- and rsp,-128
- mov ebp,DWORD PTR[((240-128))+rcx]
-
- and r14,r15
- and r15,rsp
- sub r15,r14
- jc $L$enc_no_key_aliasing
- cmp r15,768
- jnc $L$enc_no_key_aliasing
- sub rsp,r15
-$L$enc_no_key_aliasing::
-
- lea r14,QWORD PTR[rsi]
- lea r15,QWORD PTR[((-192))+rdx*1+rsi]
- shr rdx,4
-
- call _aesni_ctr32_6x
- vpshufb xmm8,xmm9,xmm0
- vpshufb xmm2,xmm10,xmm0
- vmovdqu XMMWORD PTR[112+rsp],xmm8
- vpshufb xmm4,xmm11,xmm0
- vmovdqu XMMWORD PTR[96+rsp],xmm2
- vpshufb xmm5,xmm12,xmm0
- vmovdqu XMMWORD PTR[80+rsp],xmm4
- vpshufb xmm6,xmm13,xmm0
- vmovdqu XMMWORD PTR[64+rsp],xmm5
- vpshufb xmm7,xmm14,xmm0
- vmovdqu XMMWORD PTR[48+rsp],xmm6
-
- call _aesni_ctr32_6x
-
- vmovdqu xmm8,XMMWORD PTR[r9]
- lea r9,QWORD PTR[((32+32))+r9]
- sub rdx,12
- mov r10,060h*2
- vpshufb xmm8,xmm8,xmm0
-
- call _aesni_ctr32_ghash_6x
- vmovdqu xmm7,XMMWORD PTR[32+rsp]
- vmovdqu xmm0,XMMWORD PTR[r11]
- vmovdqu xmm3,XMMWORD PTR[((0-32))+r9]
- vpunpckhqdq xmm1,xmm7,xmm7
- vmovdqu xmm15,XMMWORD PTR[((32-32))+r9]
- vmovups XMMWORD PTR[(-96)+rsi],xmm9
- vpshufb xmm9,xmm9,xmm0
- vpxor xmm1,xmm1,xmm7
- vmovups XMMWORD PTR[(-80)+rsi],xmm10
- vpshufb xmm10,xmm10,xmm0
- vmovups XMMWORD PTR[(-64)+rsi],xmm11
- vpshufb xmm11,xmm11,xmm0
- vmovups XMMWORD PTR[(-48)+rsi],xmm12
- vpshufb xmm12,xmm12,xmm0
- vmovups XMMWORD PTR[(-32)+rsi],xmm13
- vpshufb xmm13,xmm13,xmm0
- vmovups XMMWORD PTR[(-16)+rsi],xmm14
- vpshufb xmm14,xmm14,xmm0
- vmovdqu XMMWORD PTR[16+rsp],xmm9
- vmovdqu xmm6,XMMWORD PTR[48+rsp]
- vmovdqu xmm0,XMMWORD PTR[((16-32))+r9]
- vpunpckhqdq xmm2,xmm6,xmm6
- vpclmulqdq xmm5,xmm7,xmm3,000h
- vpxor xmm2,xmm2,xmm6
- vpclmulqdq xmm7,xmm7,xmm3,011h
- vpclmulqdq xmm1,xmm1,xmm15,000h
-
- vmovdqu xmm9,XMMWORD PTR[64+rsp]
- vpclmulqdq xmm4,xmm6,xmm0,000h
- vmovdqu xmm3,XMMWORD PTR[((48-32))+r9]
- vpxor xmm4,xmm4,xmm5
- vpunpckhqdq xmm5,xmm9,xmm9
- vpclmulqdq xmm6,xmm6,xmm0,011h
- vpxor xmm5,xmm5,xmm9
- vpxor xmm6,xmm6,xmm7
- vpclmulqdq xmm2,xmm2,xmm15,010h
- vmovdqu xmm15,XMMWORD PTR[((80-32))+r9]
- vpxor xmm2,xmm2,xmm1
-
- vmovdqu xmm1,XMMWORD PTR[80+rsp]
- vpclmulqdq xmm7,xmm9,xmm3,000h
- vmovdqu xmm0,XMMWORD PTR[((64-32))+r9]
- vpxor xmm7,xmm7,xmm4
- vpunpckhqdq xmm4,xmm1,xmm1
- vpclmulqdq xmm9,xmm9,xmm3,011h
- vpxor xmm4,xmm4,xmm1
- vpxor xmm9,xmm9,xmm6
- vpclmulqdq xmm5,xmm5,xmm15,000h
- vpxor xmm5,xmm5,xmm2
-
- vmovdqu xmm2,XMMWORD PTR[96+rsp]
- vpclmulqdq xmm6,xmm1,xmm0,000h
- vmovdqu xmm3,XMMWORD PTR[((96-32))+r9]
- vpxor xmm6,xmm6,xmm7
- vpunpckhqdq xmm7,xmm2,xmm2
- vpclmulqdq xmm1,xmm1,xmm0,011h
- vpxor xmm7,xmm7,xmm2
- vpxor xmm1,xmm1,xmm9
- vpclmulqdq xmm4,xmm4,xmm15,010h
- vmovdqu xmm15,XMMWORD PTR[((128-32))+r9]
- vpxor xmm4,xmm4,xmm5
-
- vpxor xmm8,xmm8,XMMWORD PTR[112+rsp]
- vpclmulqdq xmm5,xmm2,xmm3,000h
- vmovdqu xmm0,XMMWORD PTR[((112-32))+r9]
- vpunpckhqdq xmm9,xmm8,xmm8
- vpxor xmm5,xmm5,xmm6
- vpclmulqdq xmm2,xmm2,xmm3,011h
- vpxor xmm9,xmm9,xmm8
- vpxor xmm2,xmm2,xmm1
- vpclmulqdq xmm7,xmm7,xmm15,000h
- vpxor xmm4,xmm7,xmm4
-
- vpclmulqdq xmm6,xmm8,xmm0,000h
- vmovdqu xmm3,XMMWORD PTR[((0-32))+r9]
- vpunpckhqdq xmm1,xmm14,xmm14
- vpclmulqdq xmm8,xmm8,xmm0,011h
- vpxor xmm1,xmm1,xmm14
- vpxor xmm5,xmm6,xmm5
- vpclmulqdq xmm9,xmm9,xmm15,010h
- vmovdqu xmm15,XMMWORD PTR[((32-32))+r9]
- vpxor xmm7,xmm8,xmm2
- vpxor xmm6,xmm9,xmm4
-
- vmovdqu xmm0,XMMWORD PTR[((16-32))+r9]
- vpxor xmm9,xmm7,xmm5
- vpclmulqdq xmm4,xmm14,xmm3,000h
- vpxor xmm6,xmm6,xmm9
- vpunpckhqdq xmm2,xmm13,xmm13
- vpclmulqdq xmm14,xmm14,xmm3,011h
- vpxor xmm2,xmm2,xmm13
- vpslldq xmm9,xmm6,8
- vpclmulqdq xmm1,xmm1,xmm15,000h
- vpxor xmm8,xmm5,xmm9
- vpsrldq xmm6,xmm6,8
- vpxor xmm7,xmm7,xmm6
-
- vpclmulqdq xmm5,xmm13,xmm0,000h
- vmovdqu xmm3,XMMWORD PTR[((48-32))+r9]
- vpxor xmm5,xmm5,xmm4
- vpunpckhqdq xmm9,xmm12,xmm12
- vpclmulqdq xmm13,xmm13,xmm0,011h
- vpxor xmm9,xmm9,xmm12
- vpxor xmm13,xmm13,xmm14
- vpalignr xmm14,xmm8,xmm8,8
- vpclmulqdq xmm2,xmm2,xmm15,010h
- vmovdqu xmm15,XMMWORD PTR[((80-32))+r9]
- vpxor xmm2,xmm2,xmm1
-
- vpclmulqdq xmm4,xmm12,xmm3,000h
- vmovdqu xmm0,XMMWORD PTR[((64-32))+r9]
- vpxor xmm4,xmm4,xmm5
- vpunpckhqdq xmm1,xmm11,xmm11
- vpclmulqdq xmm12,xmm12,xmm3,011h
- vpxor xmm1,xmm1,xmm11
- vpxor xmm12,xmm12,xmm13
- vxorps xmm7,xmm7,XMMWORD PTR[16+rsp]
- vpclmulqdq xmm9,xmm9,xmm15,000h
- vpxor xmm9,xmm9,xmm2
-
- vpclmulqdq xmm8,xmm8,XMMWORD PTR[16+r11],010h
- vxorps xmm8,xmm8,xmm14
-
- vpclmulqdq xmm5,xmm11,xmm0,000h
- vmovdqu xmm3,XMMWORD PTR[((96-32))+r9]
- vpxor xmm5,xmm5,xmm4
- vpunpckhqdq xmm2,xmm10,xmm10
- vpclmulqdq xmm11,xmm11,xmm0,011h
- vpxor xmm2,xmm2,xmm10
- vpalignr xmm14,xmm8,xmm8,8
- vpxor xmm11,xmm11,xmm12
- vpclmulqdq xmm1,xmm1,xmm15,010h
- vmovdqu xmm15,XMMWORD PTR[((128-32))+r9]
- vpxor xmm1,xmm1,xmm9
-
- vxorps xmm14,xmm14,xmm7
- vpclmulqdq xmm8,xmm8,XMMWORD PTR[16+r11],010h
- vxorps xmm8,xmm8,xmm14
-
- vpclmulqdq xmm4,xmm10,xmm3,000h
- vmovdqu xmm0,XMMWORD PTR[((112-32))+r9]
- vpxor xmm4,xmm4,xmm5
- vpunpckhqdq xmm9,xmm8,xmm8
- vpclmulqdq xmm10,xmm10,xmm3,011h
- vpxor xmm9,xmm9,xmm8
- vpxor xmm10,xmm10,xmm11
- vpclmulqdq xmm2,xmm2,xmm15,000h
- vpxor xmm2,xmm2,xmm1
-
- vpclmulqdq xmm5,xmm8,xmm0,000h
- vpclmulqdq xmm7,xmm8,xmm0,011h
- vpxor xmm5,xmm5,xmm4
- vpclmulqdq xmm6,xmm9,xmm15,010h
- vpxor xmm7,xmm7,xmm10
- vpxor xmm6,xmm6,xmm2
-
- vpxor xmm4,xmm7,xmm5
- vpxor xmm6,xmm6,xmm4
- vpslldq xmm1,xmm6,8
- vmovdqu xmm3,XMMWORD PTR[16+r11]
- vpsrldq xmm6,xmm6,8
- vpxor xmm8,xmm5,xmm1
- vpxor xmm7,xmm7,xmm6
-
- vpalignr xmm2,xmm8,xmm8,8
- vpclmulqdq xmm8,xmm8,xmm3,010h
- vpxor xmm8,xmm8,xmm2
-
- vpalignr xmm2,xmm8,xmm8,8
- vpclmulqdq xmm8,xmm8,xmm3,010h
- vpxor xmm2,xmm2,xmm7
- vpxor xmm8,xmm8,xmm2
- vpshufb xmm8,xmm8,XMMWORD PTR[r11]
- vmovdqu XMMWORD PTR[(-64)+r9],xmm8
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-216))+rax]
- movaps xmm7,XMMWORD PTR[((-200))+rax]
- movaps xmm8,XMMWORD PTR[((-184))+rax]
- movaps xmm9,XMMWORD PTR[((-168))+rax]
- movaps xmm10,XMMWORD PTR[((-152))+rax]
- movaps xmm11,XMMWORD PTR[((-136))+rax]
- movaps xmm12,XMMWORD PTR[((-120))+rax]
- movaps xmm13,XMMWORD PTR[((-104))+rax]
- movaps xmm14,XMMWORD PTR[((-88))+rax]
- movaps xmm15,XMMWORD PTR[((-72))+rax]
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$gcm_enc_abort::
- mov rax,r10
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_aesni_gcm_encrypt::
-aesni_gcm_encrypt ENDP
-ALIGN 64
-$L$bswap_mask::
-DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
-$L$poly::
-DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0c2h
-$L$one_msb::
-DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
-$L$two_lsb::
-DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-$L$one_lsb::
-DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-DB 65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108
-DB 101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82
-DB 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112
-DB 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
-ALIGN 64
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-gcm_se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- mov rax,QWORD PTR[120+r8]
-
- mov r15,QWORD PTR[((-48))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov rbx,QWORD PTR[((-8))+rax]
- mov QWORD PTR[240+r8],r15
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[144+r8],rbx
-
- lea rsi,QWORD PTR[((-216))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-gcm_se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_aesni_gcm_decrypt
- DD imagerel $L$SEH_end_aesni_gcm_decrypt
- DD imagerel $L$SEH_gcm_dec_info
-
- DD imagerel $L$SEH_begin_aesni_gcm_encrypt
- DD imagerel $L$SEH_end_aesni_gcm_encrypt
- DD imagerel $L$SEH_gcm_enc_info
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_gcm_dec_info::
-DB 9,0,0,0
- DD imagerel gcm_se_handler
- DD imagerel $L$gcm_dec_body,imagerel $L$gcm_dec_abort
-$L$SEH_gcm_enc_info::
-DB 9,0,0,0
- DD imagerel gcm_se_handler
- DD imagerel $L$gcm_enc_body,imagerel $L$gcm_enc_abort
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+
+ALIGN 32
+_aesni_ctr32_ghash_6x PROC PRIVATE
+
+ vmovdqu xmm2,XMMWORD PTR[32+r11]
+ sub rdx,6
+ vpxor xmm4,xmm4,xmm4
+ vmovdqu xmm15,XMMWORD PTR[((0-128))+rcx]
+ vpaddb xmm10,xmm1,xmm2
+ vpaddb xmm11,xmm10,xmm2
+ vpaddb xmm12,xmm11,xmm2
+ vpaddb xmm13,xmm12,xmm2
+ vpaddb xmm14,xmm13,xmm2
+ vpxor xmm9,xmm1,xmm15
+ vmovdqu XMMWORD PTR[(16+8)+rsp],xmm4
+ jmp $L$oop6x
+
+ALIGN 32
+$L$oop6x::
+ add ebx,100663296
+ jc $L$handle_ctr32
+ vmovdqu xmm3,XMMWORD PTR[((0-32))+r9]
+ vpaddb xmm1,xmm14,xmm2
+ vpxor xmm10,xmm10,xmm15
+ vpxor xmm11,xmm11,xmm15
+
+$L$resume_ctr32::
+ vmovdqu XMMWORD PTR[r8],xmm1
+ vpclmulqdq xmm5,xmm7,xmm3,010h
+ vpxor xmm12,xmm12,xmm15
+ vmovups xmm2,XMMWORD PTR[((16-128))+rcx]
+ vpclmulqdq xmm6,xmm7,xmm3,001h
+ xor r12,r12
+ cmp r15,r14
+
+ vaesenc xmm9,xmm9,xmm2
+ vmovdqu xmm0,XMMWORD PTR[((48+8))+rsp]
+ vpxor xmm13,xmm13,xmm15
+ vpclmulqdq xmm1,xmm7,xmm3,000h
+ vaesenc xmm10,xmm10,xmm2
+ vpxor xmm14,xmm14,xmm15
+ setnc r12b
+ vpclmulqdq xmm7,xmm7,xmm3,011h
+ vaesenc xmm11,xmm11,xmm2
+ vmovdqu xmm3,XMMWORD PTR[((16-32))+r9]
+ neg r12
+ vaesenc xmm12,xmm12,xmm2
+ vpxor xmm6,xmm6,xmm5
+ vpclmulqdq xmm5,xmm0,xmm3,000h
+ vpxor xmm8,xmm8,xmm4
+ vaesenc xmm13,xmm13,xmm2
+ vpxor xmm4,xmm1,xmm5
+ and r12,060h
+ vmovups xmm15,XMMWORD PTR[((32-128))+rcx]
+ vpclmulqdq xmm1,xmm0,xmm3,010h
+ vaesenc xmm14,xmm14,xmm2
+
+ vpclmulqdq xmm2,xmm0,xmm3,001h
+ lea r14,QWORD PTR[r12*1+r14]
+ vaesenc xmm9,xmm9,xmm15
+ vpxor xmm8,xmm8,XMMWORD PTR[((16+8))+rsp]
+ vpclmulqdq xmm3,xmm0,xmm3,011h
+ vmovdqu xmm0,XMMWORD PTR[((64+8))+rsp]
+ vaesenc xmm10,xmm10,xmm15
+ movbe r13,QWORD PTR[88+r14]
+ vaesenc xmm11,xmm11,xmm15
+ movbe r12,QWORD PTR[80+r14]
+ vaesenc xmm12,xmm12,xmm15
+ mov QWORD PTR[((32+8))+rsp],r13
+ vaesenc xmm13,xmm13,xmm15
+ mov QWORD PTR[((40+8))+rsp],r12
+ vmovdqu xmm5,XMMWORD PTR[((48-32))+r9]
+ vaesenc xmm14,xmm14,xmm15
+
+ vmovups xmm15,XMMWORD PTR[((48-128))+rcx]
+ vpxor xmm6,xmm6,xmm1
+ vpclmulqdq xmm1,xmm0,xmm5,000h
+ vaesenc xmm9,xmm9,xmm15
+ vpxor xmm6,xmm6,xmm2
+ vpclmulqdq xmm2,xmm0,xmm5,010h
+ vaesenc xmm10,xmm10,xmm15
+ vpxor xmm7,xmm7,xmm3
+ vpclmulqdq xmm3,xmm0,xmm5,001h
+ vaesenc xmm11,xmm11,xmm15
+ vpclmulqdq xmm5,xmm0,xmm5,011h
+ vmovdqu xmm0,XMMWORD PTR[((80+8))+rsp]
+ vaesenc xmm12,xmm12,xmm15
+ vaesenc xmm13,xmm13,xmm15
+ vpxor xmm4,xmm4,xmm1
+ vmovdqu xmm1,XMMWORD PTR[((64-32))+r9]
+ vaesenc xmm14,xmm14,xmm15
+
+ vmovups xmm15,XMMWORD PTR[((64-128))+rcx]
+ vpxor xmm6,xmm6,xmm2
+ vpclmulqdq xmm2,xmm0,xmm1,000h
+ vaesenc xmm9,xmm9,xmm15
+ vpxor xmm6,xmm6,xmm3
+ vpclmulqdq xmm3,xmm0,xmm1,010h
+ vaesenc xmm10,xmm10,xmm15
+ movbe r13,QWORD PTR[72+r14]
+ vpxor xmm7,xmm7,xmm5
+ vpclmulqdq xmm5,xmm0,xmm1,001h
+ vaesenc xmm11,xmm11,xmm15
+ movbe r12,QWORD PTR[64+r14]
+ vpclmulqdq xmm1,xmm0,xmm1,011h
+ vmovdqu xmm0,XMMWORD PTR[((96+8))+rsp]
+ vaesenc xmm12,xmm12,xmm15
+ mov QWORD PTR[((48+8))+rsp],r13
+ vaesenc xmm13,xmm13,xmm15
+ mov QWORD PTR[((56+8))+rsp],r12
+ vpxor xmm4,xmm4,xmm2
+ vmovdqu xmm2,XMMWORD PTR[((96-32))+r9]
+ vaesenc xmm14,xmm14,xmm15
+
+ vmovups xmm15,XMMWORD PTR[((80-128))+rcx]
+ vpxor xmm6,xmm6,xmm3
+ vpclmulqdq xmm3,xmm0,xmm2,000h
+ vaesenc xmm9,xmm9,xmm15
+ vpxor xmm6,xmm6,xmm5
+ vpclmulqdq xmm5,xmm0,xmm2,010h
+ vaesenc xmm10,xmm10,xmm15
+ movbe r13,QWORD PTR[56+r14]
+ vpxor xmm7,xmm7,xmm1
+ vpclmulqdq xmm1,xmm0,xmm2,001h
+ vpxor xmm8,xmm8,XMMWORD PTR[((112+8))+rsp]
+ vaesenc xmm11,xmm11,xmm15
+ movbe r12,QWORD PTR[48+r14]
+ vpclmulqdq xmm2,xmm0,xmm2,011h
+ vaesenc xmm12,xmm12,xmm15
+ mov QWORD PTR[((64+8))+rsp],r13
+ vaesenc xmm13,xmm13,xmm15
+ mov QWORD PTR[((72+8))+rsp],r12
+ vpxor xmm4,xmm4,xmm3
+ vmovdqu xmm3,XMMWORD PTR[((112-32))+r9]
+ vaesenc xmm14,xmm14,xmm15
+
+ vmovups xmm15,XMMWORD PTR[((96-128))+rcx]
+ vpxor xmm6,xmm6,xmm5
+ vpclmulqdq xmm5,xmm8,xmm3,010h
+ vaesenc xmm9,xmm9,xmm15
+ vpxor xmm6,xmm6,xmm1
+ vpclmulqdq xmm1,xmm8,xmm3,001h
+ vaesenc xmm10,xmm10,xmm15
+ movbe r13,QWORD PTR[40+r14]
+ vpxor xmm7,xmm7,xmm2
+ vpclmulqdq xmm2,xmm8,xmm3,000h
+ vaesenc xmm11,xmm11,xmm15
+ movbe r12,QWORD PTR[32+r14]
+ vpclmulqdq xmm8,xmm8,xmm3,011h
+ vaesenc xmm12,xmm12,xmm15
+ mov QWORD PTR[((80+8))+rsp],r13
+ vaesenc xmm13,xmm13,xmm15
+ mov QWORD PTR[((88+8))+rsp],r12
+ vpxor xmm6,xmm6,xmm5
+ vaesenc xmm14,xmm14,xmm15
+ vpxor xmm6,xmm6,xmm1
+
+ vmovups xmm15,XMMWORD PTR[((112-128))+rcx]
+ vpslldq xmm5,xmm6,8
+ vpxor xmm4,xmm4,xmm2
+ vmovdqu xmm3,XMMWORD PTR[16+r11]
+
+ vaesenc xmm9,xmm9,xmm15
+ vpxor xmm7,xmm7,xmm8
+ vaesenc xmm10,xmm10,xmm15
+ vpxor xmm4,xmm4,xmm5
+ movbe r13,QWORD PTR[24+r14]
+ vaesenc xmm11,xmm11,xmm15
+ movbe r12,QWORD PTR[16+r14]
+ vpalignr xmm0,xmm4,xmm4,8
+ vpclmulqdq xmm4,xmm4,xmm3,010h
+ mov QWORD PTR[((96+8))+rsp],r13
+ vaesenc xmm12,xmm12,xmm15
+ mov QWORD PTR[((104+8))+rsp],r12
+ vaesenc xmm13,xmm13,xmm15
+ vmovups xmm1,XMMWORD PTR[((128-128))+rcx]
+ vaesenc xmm14,xmm14,xmm15
+
+ vaesenc xmm9,xmm9,xmm1
+ vmovups xmm15,XMMWORD PTR[((144-128))+rcx]
+ vaesenc xmm10,xmm10,xmm1
+ vpsrldq xmm6,xmm6,8
+ vaesenc xmm11,xmm11,xmm1
+ vpxor xmm7,xmm7,xmm6
+ vaesenc xmm12,xmm12,xmm1
+ vpxor xmm4,xmm4,xmm0
+ movbe r13,QWORD PTR[8+r14]
+ vaesenc xmm13,xmm13,xmm1
+ movbe r12,QWORD PTR[r14]
+ vaesenc xmm14,xmm14,xmm1
+ vmovups xmm1,XMMWORD PTR[((160-128))+rcx]
+ cmp ebp,11
+ jb $L$enc_tail
+
+ vaesenc xmm9,xmm9,xmm15
+ vaesenc xmm10,xmm10,xmm15
+ vaesenc xmm11,xmm11,xmm15
+ vaesenc xmm12,xmm12,xmm15
+ vaesenc xmm13,xmm13,xmm15
+ vaesenc xmm14,xmm14,xmm15
+
+ vaesenc xmm9,xmm9,xmm1
+ vaesenc xmm10,xmm10,xmm1
+ vaesenc xmm11,xmm11,xmm1
+ vaesenc xmm12,xmm12,xmm1
+ vaesenc xmm13,xmm13,xmm1
+ vmovups xmm15,XMMWORD PTR[((176-128))+rcx]
+ vaesenc xmm14,xmm14,xmm1
+ vmovups xmm1,XMMWORD PTR[((192-128))+rcx]
+ je $L$enc_tail
+
+ vaesenc xmm9,xmm9,xmm15
+ vaesenc xmm10,xmm10,xmm15
+ vaesenc xmm11,xmm11,xmm15
+ vaesenc xmm12,xmm12,xmm15
+ vaesenc xmm13,xmm13,xmm15
+ vaesenc xmm14,xmm14,xmm15
+
+ vaesenc xmm9,xmm9,xmm1
+ vaesenc xmm10,xmm10,xmm1
+ vaesenc xmm11,xmm11,xmm1
+ vaesenc xmm12,xmm12,xmm1
+ vaesenc xmm13,xmm13,xmm1
+ vmovups xmm15,XMMWORD PTR[((208-128))+rcx]
+ vaesenc xmm14,xmm14,xmm1
+ vmovups xmm1,XMMWORD PTR[((224-128))+rcx]
+ jmp $L$enc_tail
+
+ALIGN 32
+$L$handle_ctr32::
+ vmovdqu xmm0,XMMWORD PTR[r11]
+ vpshufb xmm6,xmm1,xmm0
+ vmovdqu xmm5,XMMWORD PTR[48+r11]
+ vpaddd xmm10,xmm6,XMMWORD PTR[64+r11]
+ vpaddd xmm11,xmm6,xmm5
+ vmovdqu xmm3,XMMWORD PTR[((0-32))+r9]
+ vpaddd xmm12,xmm10,xmm5
+ vpshufb xmm10,xmm10,xmm0
+ vpaddd xmm13,xmm11,xmm5
+ vpshufb xmm11,xmm11,xmm0
+ vpxor xmm10,xmm10,xmm15
+ vpaddd xmm14,xmm12,xmm5
+ vpshufb xmm12,xmm12,xmm0
+ vpxor xmm11,xmm11,xmm15
+ vpaddd xmm1,xmm13,xmm5
+ vpshufb xmm13,xmm13,xmm0
+ vpshufb xmm14,xmm14,xmm0
+ vpshufb xmm1,xmm1,xmm0
+ jmp $L$resume_ctr32
+
+ALIGN 32
+$L$enc_tail::
+ vaesenc xmm9,xmm9,xmm15
+ vmovdqu XMMWORD PTR[(16+8)+rsp],xmm7
+ vpalignr xmm8,xmm4,xmm4,8
+ vaesenc xmm10,xmm10,xmm15
+ vpclmulqdq xmm4,xmm4,xmm3,010h
+ vpxor xmm2,xmm1,XMMWORD PTR[rdi]
+ vaesenc xmm11,xmm11,xmm15
+ vpxor xmm0,xmm1,XMMWORD PTR[16+rdi]
+ vaesenc xmm12,xmm12,xmm15
+ vpxor xmm5,xmm1,XMMWORD PTR[32+rdi]
+ vaesenc xmm13,xmm13,xmm15
+ vpxor xmm6,xmm1,XMMWORD PTR[48+rdi]
+ vaesenc xmm14,xmm14,xmm15
+ vpxor xmm7,xmm1,XMMWORD PTR[64+rdi]
+ vpxor xmm3,xmm1,XMMWORD PTR[80+rdi]
+ vmovdqu xmm1,XMMWORD PTR[r8]
+
+ vaesenclast xmm9,xmm9,xmm2
+ vmovdqu xmm2,XMMWORD PTR[32+r11]
+ vaesenclast xmm10,xmm10,xmm0
+ vpaddb xmm0,xmm1,xmm2
+ mov QWORD PTR[((112+8))+rsp],r13
+ lea rdi,QWORD PTR[96+rdi]
+ vaesenclast xmm11,xmm11,xmm5
+ vpaddb xmm5,xmm0,xmm2
+ mov QWORD PTR[((120+8))+rsp],r12
+ lea rsi,QWORD PTR[96+rsi]
+ vmovdqu xmm15,XMMWORD PTR[((0-128))+rcx]
+ vaesenclast xmm12,xmm12,xmm6
+ vpaddb xmm6,xmm5,xmm2
+ vaesenclast xmm13,xmm13,xmm7
+ vpaddb xmm7,xmm6,xmm2
+ vaesenclast xmm14,xmm14,xmm3
+ vpaddb xmm3,xmm7,xmm2
+
+ add r10,060h
+ sub rdx,06h
+ jc $L$6x_done
+
+ vmovups XMMWORD PTR[(-96)+rsi],xmm9
+ vpxor xmm9,xmm1,xmm15
+ vmovups XMMWORD PTR[(-80)+rsi],xmm10
+ vmovdqa xmm10,xmm0
+ vmovups XMMWORD PTR[(-64)+rsi],xmm11
+ vmovdqa xmm11,xmm5
+ vmovups XMMWORD PTR[(-48)+rsi],xmm12
+ vmovdqa xmm12,xmm6
+ vmovups XMMWORD PTR[(-32)+rsi],xmm13
+ vmovdqa xmm13,xmm7
+ vmovups XMMWORD PTR[(-16)+rsi],xmm14
+ vmovdqa xmm14,xmm3
+ vmovdqu xmm7,XMMWORD PTR[((32+8))+rsp]
+ jmp $L$oop6x
+
+$L$6x_done::
+ vpxor xmm8,xmm8,XMMWORD PTR[((16+8))+rsp]
+ vpxor xmm8,xmm8,xmm4
+
+ DB 0F3h,0C3h ;repret
+
+_aesni_ctr32_ghash_6x ENDP
+PUBLIC aesni_gcm_decrypt
+
+ALIGN 32
+aesni_gcm_decrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_gcm_decrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ xor r10,r10
+ cmp rdx,060h
+ jb $L$gcm_dec_abort
+
+ lea rax,QWORD PTR[rsp]
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[(-216)+rax],xmm6
+ movaps XMMWORD PTR[(-200)+rax],xmm7
+ movaps XMMWORD PTR[(-184)+rax],xmm8
+ movaps XMMWORD PTR[(-168)+rax],xmm9
+ movaps XMMWORD PTR[(-152)+rax],xmm10
+ movaps XMMWORD PTR[(-136)+rax],xmm11
+ movaps XMMWORD PTR[(-120)+rax],xmm12
+ movaps XMMWORD PTR[(-104)+rax],xmm13
+ movaps XMMWORD PTR[(-88)+rax],xmm14
+ movaps XMMWORD PTR[(-72)+rax],xmm15
+$L$gcm_dec_body::
+ vzeroupper
+
+ vmovdqu xmm1,XMMWORD PTR[r8]
+ add rsp,-128
+ mov ebx,DWORD PTR[12+r8]
+ lea r11,QWORD PTR[$L$bswap_mask]
+ lea r14,QWORD PTR[((-128))+rcx]
+ mov r15,0f80h
+ vmovdqu xmm8,XMMWORD PTR[r9]
+ and rsp,-128
+ vmovdqu xmm0,XMMWORD PTR[r11]
+ lea rcx,QWORD PTR[128+rcx]
+ lea r9,QWORD PTR[((32+32))+r9]
+ mov ebp,DWORD PTR[((240-128))+rcx]
+ vpshufb xmm8,xmm8,xmm0
+
+ and r14,r15
+ and r15,rsp
+ sub r15,r14
+ jc $L$dec_no_key_aliasing
+ cmp r15,768
+ jnc $L$dec_no_key_aliasing
+ sub rsp,r15
+$L$dec_no_key_aliasing::
+
+ vmovdqu xmm7,XMMWORD PTR[80+rdi]
+ lea r14,QWORD PTR[rdi]
+ vmovdqu xmm4,XMMWORD PTR[64+rdi]
+ lea r15,QWORD PTR[((-192))+rdx*1+rdi]
+ vmovdqu xmm5,XMMWORD PTR[48+rdi]
+ shr rdx,4
+ xor r10,r10
+ vmovdqu xmm6,XMMWORD PTR[32+rdi]
+ vpshufb xmm7,xmm7,xmm0
+ vmovdqu xmm2,XMMWORD PTR[16+rdi]
+ vpshufb xmm4,xmm4,xmm0
+ vmovdqu xmm3,XMMWORD PTR[rdi]
+ vpshufb xmm5,xmm5,xmm0
+ vmovdqu XMMWORD PTR[48+rsp],xmm4
+ vpshufb xmm6,xmm6,xmm0
+ vmovdqu XMMWORD PTR[64+rsp],xmm5
+ vpshufb xmm2,xmm2,xmm0
+ vmovdqu XMMWORD PTR[80+rsp],xmm6
+ vpshufb xmm3,xmm3,xmm0
+ vmovdqu XMMWORD PTR[96+rsp],xmm2
+ vmovdqu XMMWORD PTR[112+rsp],xmm3
+
+ call _aesni_ctr32_ghash_6x
+
+ vmovups XMMWORD PTR[(-96)+rsi],xmm9
+ vmovups XMMWORD PTR[(-80)+rsi],xmm10
+ vmovups XMMWORD PTR[(-64)+rsi],xmm11
+ vmovups XMMWORD PTR[(-48)+rsi],xmm12
+ vmovups XMMWORD PTR[(-32)+rsi],xmm13
+ vmovups XMMWORD PTR[(-16)+rsi],xmm14
+
+ vpshufb xmm8,xmm8,XMMWORD PTR[r11]
+ vmovdqu XMMWORD PTR[(-64)+r9],xmm8
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-216))+rax]
+ movaps xmm7,XMMWORD PTR[((-200))+rax]
+ movaps xmm8,XMMWORD PTR[((-184))+rax]
+ movaps xmm9,XMMWORD PTR[((-168))+rax]
+ movaps xmm10,XMMWORD PTR[((-152))+rax]
+ movaps xmm11,XMMWORD PTR[((-136))+rax]
+ movaps xmm12,XMMWORD PTR[((-120))+rax]
+ movaps xmm13,XMMWORD PTR[((-104))+rax]
+ movaps xmm14,XMMWORD PTR[((-88))+rax]
+ movaps xmm15,XMMWORD PTR[((-72))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$gcm_dec_abort::
+ mov rax,r10
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_gcm_decrypt::
+aesni_gcm_decrypt ENDP
+
+ALIGN 32
+_aesni_ctr32_6x PROC PRIVATE
+
+ vmovdqu xmm4,XMMWORD PTR[((0-128))+rcx]
+ vmovdqu xmm2,XMMWORD PTR[32+r11]
+ lea r13,QWORD PTR[((-1))+rbp]
+ vmovups xmm15,XMMWORD PTR[((16-128))+rcx]
+ lea r12,QWORD PTR[((32-128))+rcx]
+ vpxor xmm9,xmm1,xmm4
+ add ebx,100663296
+ jc $L$handle_ctr32_2
+ vpaddb xmm10,xmm1,xmm2
+ vpaddb xmm11,xmm10,xmm2
+ vpxor xmm10,xmm10,xmm4
+ vpaddb xmm12,xmm11,xmm2
+ vpxor xmm11,xmm11,xmm4
+ vpaddb xmm13,xmm12,xmm2
+ vpxor xmm12,xmm12,xmm4
+ vpaddb xmm14,xmm13,xmm2
+ vpxor xmm13,xmm13,xmm4
+ vpaddb xmm1,xmm14,xmm2
+ vpxor xmm14,xmm14,xmm4
+ jmp $L$oop_ctr32
+
+ALIGN 16
+$L$oop_ctr32::
+ vaesenc xmm9,xmm9,xmm15
+ vaesenc xmm10,xmm10,xmm15
+ vaesenc xmm11,xmm11,xmm15
+ vaesenc xmm12,xmm12,xmm15
+ vaesenc xmm13,xmm13,xmm15
+ vaesenc xmm14,xmm14,xmm15
+ vmovups xmm15,XMMWORD PTR[r12]
+ lea r12,QWORD PTR[16+r12]
+ dec r13d
+ jnz $L$oop_ctr32
+
+ vmovdqu xmm3,XMMWORD PTR[r12]
+ vaesenc xmm9,xmm9,xmm15
+ vpxor xmm4,xmm3,XMMWORD PTR[rdi]
+ vaesenc xmm10,xmm10,xmm15
+ vpxor xmm5,xmm3,XMMWORD PTR[16+rdi]
+ vaesenc xmm11,xmm11,xmm15
+ vpxor xmm6,xmm3,XMMWORD PTR[32+rdi]
+ vaesenc xmm12,xmm12,xmm15
+ vpxor xmm8,xmm3,XMMWORD PTR[48+rdi]
+ vaesenc xmm13,xmm13,xmm15
+ vpxor xmm2,xmm3,XMMWORD PTR[64+rdi]
+ vaesenc xmm14,xmm14,xmm15
+ vpxor xmm3,xmm3,XMMWORD PTR[80+rdi]
+ lea rdi,QWORD PTR[96+rdi]
+
+ vaesenclast xmm9,xmm9,xmm4
+ vaesenclast xmm10,xmm10,xmm5
+ vaesenclast xmm11,xmm11,xmm6
+ vaesenclast xmm12,xmm12,xmm8
+ vaesenclast xmm13,xmm13,xmm2
+ vaesenclast xmm14,xmm14,xmm3
+ vmovups XMMWORD PTR[rsi],xmm9
+ vmovups XMMWORD PTR[16+rsi],xmm10
+ vmovups XMMWORD PTR[32+rsi],xmm11
+ vmovups XMMWORD PTR[48+rsi],xmm12
+ vmovups XMMWORD PTR[64+rsi],xmm13
+ vmovups XMMWORD PTR[80+rsi],xmm14
+ lea rsi,QWORD PTR[96+rsi]
+
+ DB 0F3h,0C3h ;repret
+ALIGN 32
+$L$handle_ctr32_2::
+ vpshufb xmm6,xmm1,xmm0
+ vmovdqu xmm5,XMMWORD PTR[48+r11]
+ vpaddd xmm10,xmm6,XMMWORD PTR[64+r11]
+ vpaddd xmm11,xmm6,xmm5
+ vpaddd xmm12,xmm10,xmm5
+ vpshufb xmm10,xmm10,xmm0
+ vpaddd xmm13,xmm11,xmm5
+ vpshufb xmm11,xmm11,xmm0
+ vpxor xmm10,xmm10,xmm4
+ vpaddd xmm14,xmm12,xmm5
+ vpshufb xmm12,xmm12,xmm0
+ vpxor xmm11,xmm11,xmm4
+ vpaddd xmm1,xmm13,xmm5
+ vpshufb xmm13,xmm13,xmm0
+ vpxor xmm12,xmm12,xmm4
+ vpshufb xmm14,xmm14,xmm0
+ vpxor xmm13,xmm13,xmm4
+ vpshufb xmm1,xmm1,xmm0
+ vpxor xmm14,xmm14,xmm4
+ jmp $L$oop_ctr32
+
+_aesni_ctr32_6x ENDP
+
+PUBLIC aesni_gcm_encrypt
+
+ALIGN 32
+aesni_gcm_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_aesni_gcm_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ xor r10,r10
+ cmp rdx,060h*3
+ jb $L$gcm_enc_abort
+
+ lea rax,QWORD PTR[rsp]
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[(-216)+rax],xmm6
+ movaps XMMWORD PTR[(-200)+rax],xmm7
+ movaps XMMWORD PTR[(-184)+rax],xmm8
+ movaps XMMWORD PTR[(-168)+rax],xmm9
+ movaps XMMWORD PTR[(-152)+rax],xmm10
+ movaps XMMWORD PTR[(-136)+rax],xmm11
+ movaps XMMWORD PTR[(-120)+rax],xmm12
+ movaps XMMWORD PTR[(-104)+rax],xmm13
+ movaps XMMWORD PTR[(-88)+rax],xmm14
+ movaps XMMWORD PTR[(-72)+rax],xmm15
+$L$gcm_enc_body::
+ vzeroupper
+
+ vmovdqu xmm1,XMMWORD PTR[r8]
+ add rsp,-128
+ mov ebx,DWORD PTR[12+r8]
+ lea r11,QWORD PTR[$L$bswap_mask]
+ lea r14,QWORD PTR[((-128))+rcx]
+ mov r15,0f80h
+ lea rcx,QWORD PTR[128+rcx]
+ vmovdqu xmm0,XMMWORD PTR[r11]
+ and rsp,-128
+ mov ebp,DWORD PTR[((240-128))+rcx]
+
+ and r14,r15
+ and r15,rsp
+ sub r15,r14
+ jc $L$enc_no_key_aliasing
+ cmp r15,768
+ jnc $L$enc_no_key_aliasing
+ sub rsp,r15
+$L$enc_no_key_aliasing::
+
+ lea r14,QWORD PTR[rsi]
+ lea r15,QWORD PTR[((-192))+rdx*1+rsi]
+ shr rdx,4
+
+ call _aesni_ctr32_6x
+ vpshufb xmm8,xmm9,xmm0
+ vpshufb xmm2,xmm10,xmm0
+ vmovdqu XMMWORD PTR[112+rsp],xmm8
+ vpshufb xmm4,xmm11,xmm0
+ vmovdqu XMMWORD PTR[96+rsp],xmm2
+ vpshufb xmm5,xmm12,xmm0
+ vmovdqu XMMWORD PTR[80+rsp],xmm4
+ vpshufb xmm6,xmm13,xmm0
+ vmovdqu XMMWORD PTR[64+rsp],xmm5
+ vpshufb xmm7,xmm14,xmm0
+ vmovdqu XMMWORD PTR[48+rsp],xmm6
+
+ call _aesni_ctr32_6x
+
+ vmovdqu xmm8,XMMWORD PTR[r9]
+ lea r9,QWORD PTR[((32+32))+r9]
+ sub rdx,12
+ mov r10,060h*2
+ vpshufb xmm8,xmm8,xmm0
+
+ call _aesni_ctr32_ghash_6x
+ vmovdqu xmm7,XMMWORD PTR[32+rsp]
+ vmovdqu xmm0,XMMWORD PTR[r11]
+ vmovdqu xmm3,XMMWORD PTR[((0-32))+r9]
+ vpunpckhqdq xmm1,xmm7,xmm7
+ vmovdqu xmm15,XMMWORD PTR[((32-32))+r9]
+ vmovups XMMWORD PTR[(-96)+rsi],xmm9
+ vpshufb xmm9,xmm9,xmm0
+ vpxor xmm1,xmm1,xmm7
+ vmovups XMMWORD PTR[(-80)+rsi],xmm10
+ vpshufb xmm10,xmm10,xmm0
+ vmovups XMMWORD PTR[(-64)+rsi],xmm11
+ vpshufb xmm11,xmm11,xmm0
+ vmovups XMMWORD PTR[(-48)+rsi],xmm12
+ vpshufb xmm12,xmm12,xmm0
+ vmovups XMMWORD PTR[(-32)+rsi],xmm13
+ vpshufb xmm13,xmm13,xmm0
+ vmovups XMMWORD PTR[(-16)+rsi],xmm14
+ vpshufb xmm14,xmm14,xmm0
+ vmovdqu XMMWORD PTR[16+rsp],xmm9
+ vmovdqu xmm6,XMMWORD PTR[48+rsp]
+ vmovdqu xmm0,XMMWORD PTR[((16-32))+r9]
+ vpunpckhqdq xmm2,xmm6,xmm6
+ vpclmulqdq xmm5,xmm7,xmm3,000h
+ vpxor xmm2,xmm2,xmm6
+ vpclmulqdq xmm7,xmm7,xmm3,011h
+ vpclmulqdq xmm1,xmm1,xmm15,000h
+
+ vmovdqu xmm9,XMMWORD PTR[64+rsp]
+ vpclmulqdq xmm4,xmm6,xmm0,000h
+ vmovdqu xmm3,XMMWORD PTR[((48-32))+r9]
+ vpxor xmm4,xmm4,xmm5
+ vpunpckhqdq xmm5,xmm9,xmm9
+ vpclmulqdq xmm6,xmm6,xmm0,011h
+ vpxor xmm5,xmm5,xmm9
+ vpxor xmm6,xmm6,xmm7
+ vpclmulqdq xmm2,xmm2,xmm15,010h
+ vmovdqu xmm15,XMMWORD PTR[((80-32))+r9]
+ vpxor xmm2,xmm2,xmm1
+
+ vmovdqu xmm1,XMMWORD PTR[80+rsp]
+ vpclmulqdq xmm7,xmm9,xmm3,000h
+ vmovdqu xmm0,XMMWORD PTR[((64-32))+r9]
+ vpxor xmm7,xmm7,xmm4
+ vpunpckhqdq xmm4,xmm1,xmm1
+ vpclmulqdq xmm9,xmm9,xmm3,011h
+ vpxor xmm4,xmm4,xmm1
+ vpxor xmm9,xmm9,xmm6
+ vpclmulqdq xmm5,xmm5,xmm15,000h
+ vpxor xmm5,xmm5,xmm2
+
+ vmovdqu xmm2,XMMWORD PTR[96+rsp]
+ vpclmulqdq xmm6,xmm1,xmm0,000h
+ vmovdqu xmm3,XMMWORD PTR[((96-32))+r9]
+ vpxor xmm6,xmm6,xmm7
+ vpunpckhqdq xmm7,xmm2,xmm2
+ vpclmulqdq xmm1,xmm1,xmm0,011h
+ vpxor xmm7,xmm7,xmm2
+ vpxor xmm1,xmm1,xmm9
+ vpclmulqdq xmm4,xmm4,xmm15,010h
+ vmovdqu xmm15,XMMWORD PTR[((128-32))+r9]
+ vpxor xmm4,xmm4,xmm5
+
+ vpxor xmm8,xmm8,XMMWORD PTR[112+rsp]
+ vpclmulqdq xmm5,xmm2,xmm3,000h
+ vmovdqu xmm0,XMMWORD PTR[((112-32))+r9]
+ vpunpckhqdq xmm9,xmm8,xmm8
+ vpxor xmm5,xmm5,xmm6
+ vpclmulqdq xmm2,xmm2,xmm3,011h
+ vpxor xmm9,xmm9,xmm8
+ vpxor xmm2,xmm2,xmm1
+ vpclmulqdq xmm7,xmm7,xmm15,000h
+ vpxor xmm4,xmm7,xmm4
+
+ vpclmulqdq xmm6,xmm8,xmm0,000h
+ vmovdqu xmm3,XMMWORD PTR[((0-32))+r9]
+ vpunpckhqdq xmm1,xmm14,xmm14
+ vpclmulqdq xmm8,xmm8,xmm0,011h
+ vpxor xmm1,xmm1,xmm14
+ vpxor xmm5,xmm6,xmm5
+ vpclmulqdq xmm9,xmm9,xmm15,010h
+ vmovdqu xmm15,XMMWORD PTR[((32-32))+r9]
+ vpxor xmm7,xmm8,xmm2
+ vpxor xmm6,xmm9,xmm4
+
+ vmovdqu xmm0,XMMWORD PTR[((16-32))+r9]
+ vpxor xmm9,xmm7,xmm5
+ vpclmulqdq xmm4,xmm14,xmm3,000h
+ vpxor xmm6,xmm6,xmm9
+ vpunpckhqdq xmm2,xmm13,xmm13
+ vpclmulqdq xmm14,xmm14,xmm3,011h
+ vpxor xmm2,xmm2,xmm13
+ vpslldq xmm9,xmm6,8
+ vpclmulqdq xmm1,xmm1,xmm15,000h
+ vpxor xmm8,xmm5,xmm9
+ vpsrldq xmm6,xmm6,8
+ vpxor xmm7,xmm7,xmm6
+
+ vpclmulqdq xmm5,xmm13,xmm0,000h
+ vmovdqu xmm3,XMMWORD PTR[((48-32))+r9]
+ vpxor xmm5,xmm5,xmm4
+ vpunpckhqdq xmm9,xmm12,xmm12
+ vpclmulqdq xmm13,xmm13,xmm0,011h
+ vpxor xmm9,xmm9,xmm12
+ vpxor xmm13,xmm13,xmm14
+ vpalignr xmm14,xmm8,xmm8,8
+ vpclmulqdq xmm2,xmm2,xmm15,010h
+ vmovdqu xmm15,XMMWORD PTR[((80-32))+r9]
+ vpxor xmm2,xmm2,xmm1
+
+ vpclmulqdq xmm4,xmm12,xmm3,000h
+ vmovdqu xmm0,XMMWORD PTR[((64-32))+r9]
+ vpxor xmm4,xmm4,xmm5
+ vpunpckhqdq xmm1,xmm11,xmm11
+ vpclmulqdq xmm12,xmm12,xmm3,011h
+ vpxor xmm1,xmm1,xmm11
+ vpxor xmm12,xmm12,xmm13
+ vxorps xmm7,xmm7,XMMWORD PTR[16+rsp]
+ vpclmulqdq xmm9,xmm9,xmm15,000h
+ vpxor xmm9,xmm9,xmm2
+
+ vpclmulqdq xmm8,xmm8,XMMWORD PTR[16+r11],010h
+ vxorps xmm8,xmm8,xmm14
+
+ vpclmulqdq xmm5,xmm11,xmm0,000h
+ vmovdqu xmm3,XMMWORD PTR[((96-32))+r9]
+ vpxor xmm5,xmm5,xmm4
+ vpunpckhqdq xmm2,xmm10,xmm10
+ vpclmulqdq xmm11,xmm11,xmm0,011h
+ vpxor xmm2,xmm2,xmm10
+ vpalignr xmm14,xmm8,xmm8,8
+ vpxor xmm11,xmm11,xmm12
+ vpclmulqdq xmm1,xmm1,xmm15,010h
+ vmovdqu xmm15,XMMWORD PTR[((128-32))+r9]
+ vpxor xmm1,xmm1,xmm9
+
+ vxorps xmm14,xmm14,xmm7
+ vpclmulqdq xmm8,xmm8,XMMWORD PTR[16+r11],010h
+ vxorps xmm8,xmm8,xmm14
+
+ vpclmulqdq xmm4,xmm10,xmm3,000h
+ vmovdqu xmm0,XMMWORD PTR[((112-32))+r9]
+ vpxor xmm4,xmm4,xmm5
+ vpunpckhqdq xmm9,xmm8,xmm8
+ vpclmulqdq xmm10,xmm10,xmm3,011h
+ vpxor xmm9,xmm9,xmm8
+ vpxor xmm10,xmm10,xmm11
+ vpclmulqdq xmm2,xmm2,xmm15,000h
+ vpxor xmm2,xmm2,xmm1
+
+ vpclmulqdq xmm5,xmm8,xmm0,000h
+ vpclmulqdq xmm7,xmm8,xmm0,011h
+ vpxor xmm5,xmm5,xmm4
+ vpclmulqdq xmm6,xmm9,xmm15,010h
+ vpxor xmm7,xmm7,xmm10
+ vpxor xmm6,xmm6,xmm2
+
+ vpxor xmm4,xmm7,xmm5
+ vpxor xmm6,xmm6,xmm4
+ vpslldq xmm1,xmm6,8
+ vmovdqu xmm3,XMMWORD PTR[16+r11]
+ vpsrldq xmm6,xmm6,8
+ vpxor xmm8,xmm5,xmm1
+ vpxor xmm7,xmm7,xmm6
+
+ vpalignr xmm2,xmm8,xmm8,8
+ vpclmulqdq xmm8,xmm8,xmm3,010h
+ vpxor xmm8,xmm8,xmm2
+
+ vpalignr xmm2,xmm8,xmm8,8
+ vpclmulqdq xmm8,xmm8,xmm3,010h
+ vpxor xmm2,xmm2,xmm7
+ vpxor xmm8,xmm8,xmm2
+ vpshufb xmm8,xmm8,XMMWORD PTR[r11]
+ vmovdqu XMMWORD PTR[(-64)+r9],xmm8
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-216))+rax]
+ movaps xmm7,XMMWORD PTR[((-200))+rax]
+ movaps xmm8,XMMWORD PTR[((-184))+rax]
+ movaps xmm9,XMMWORD PTR[((-168))+rax]
+ movaps xmm10,XMMWORD PTR[((-152))+rax]
+ movaps xmm11,XMMWORD PTR[((-136))+rax]
+ movaps xmm12,XMMWORD PTR[((-120))+rax]
+ movaps xmm13,XMMWORD PTR[((-104))+rax]
+ movaps xmm14,XMMWORD PTR[((-88))+rax]
+ movaps xmm15,XMMWORD PTR[((-72))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$gcm_enc_abort::
+ mov rax,r10
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_aesni_gcm_encrypt::
+aesni_gcm_encrypt ENDP
+ALIGN 64
+$L$bswap_mask::
+DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+$L$poly::
+DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0c2h
+$L$one_msb::
+DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+$L$two_lsb::
+DB 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+$L$one_lsb::
+DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+DB 65,69,83,45,78,73,32,71,67,77,32,109,111,100,117,108
+DB 101,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82
+DB 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112
+DB 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+ALIGN 64
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+gcm_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ mov rax,QWORD PTR[120+r8]
+
+ mov r15,QWORD PTR[((-48))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov QWORD PTR[240+r8],r15
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[144+r8],rbx
+
+ lea rsi,QWORD PTR[((-216))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+gcm_se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_aesni_gcm_decrypt
+ DD imagerel $L$SEH_end_aesni_gcm_decrypt
+ DD imagerel $L$SEH_gcm_dec_info
+
+ DD imagerel $L$SEH_begin_aesni_gcm_encrypt
+ DD imagerel $L$SEH_end_aesni_gcm_encrypt
+ DD imagerel $L$SEH_gcm_enc_info
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_gcm_dec_info::
+DB 9,0,0,0
+ DD imagerel gcm_se_handler
+ DD imagerel $L$gcm_dec_body,imagerel $L$gcm_dec_abort
+$L$SEH_gcm_enc_info::
+DB 9,0,0,0
+ DD imagerel gcm_se_handler
+ DD imagerel $L$gcm_enc_body,imagerel $L$gcm_enc_abort
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86.masm b/contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86.masm
index df1cc8f148..954bb943f4 100644
--- a/contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86.masm
@@ -1,1273 +1,1273 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-ALIGN 16
-_gcm_gmult_4bit_x86 PROC PUBLIC
-$L_gcm_gmult_4bit_x86_begin::
- push ebp
- push ebx
- push esi
- push edi
- sub esp,84
- mov edi,DWORD PTR 104[esp]
- mov esi,DWORD PTR 108[esp]
- mov ebp,DWORD PTR [edi]
- mov edx,DWORD PTR 4[edi]
- mov ecx,DWORD PTR 8[edi]
- mov ebx,DWORD PTR 12[edi]
- mov DWORD PTR 16[esp],0
- mov DWORD PTR 20[esp],471859200
- mov DWORD PTR 24[esp],943718400
- mov DWORD PTR 28[esp],610271232
- mov DWORD PTR 32[esp],1887436800
- mov DWORD PTR 36[esp],1822425088
- mov DWORD PTR 40[esp],1220542464
- mov DWORD PTR 44[esp],1423966208
- mov DWORD PTR 48[esp],3774873600
- mov DWORD PTR 52[esp],4246732800
- mov DWORD PTR 56[esp],3644850176
- mov DWORD PTR 60[esp],3311403008
- mov DWORD PTR 64[esp],2441084928
- mov DWORD PTR 68[esp],2376073216
- mov DWORD PTR 72[esp],2847932416
- mov DWORD PTR 76[esp],3051356160
- mov DWORD PTR [esp],ebp
- mov DWORD PTR 4[esp],edx
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 12[esp],ebx
- shr ebx,20
- and ebx,240
- mov ebp,DWORD PTR 4[ebx*1+esi]
- mov edx,DWORD PTR [ebx*1+esi]
- mov ecx,DWORD PTR 12[ebx*1+esi]
- mov ebx,DWORD PTR 8[ebx*1+esi]
- xor eax,eax
- mov edi,15
- jmp $L000x86_loop
-ALIGN 16
-$L000x86_loop:
- mov al,bl
- shrd ebx,ecx,4
- and al,15
- shrd ecx,edx,4
- shrd edx,ebp,4
- shr ebp,4
- xor ebp,DWORD PTR 16[eax*4+esp]
- mov al,BYTE PTR [edi*1+esp]
- and al,240
- xor ebx,DWORD PTR 8[eax*1+esi]
- xor ecx,DWORD PTR 12[eax*1+esi]
- xor edx,DWORD PTR [eax*1+esi]
- xor ebp,DWORD PTR 4[eax*1+esi]
- dec edi
- js $L001x86_break
- mov al,bl
- shrd ebx,ecx,4
- and al,15
- shrd ecx,edx,4
- shrd edx,ebp,4
- shr ebp,4
- xor ebp,DWORD PTR 16[eax*4+esp]
- mov al,BYTE PTR [edi*1+esp]
- shl al,4
- xor ebx,DWORD PTR 8[eax*1+esi]
- xor ecx,DWORD PTR 12[eax*1+esi]
- xor edx,DWORD PTR [eax*1+esi]
- xor ebp,DWORD PTR 4[eax*1+esi]
- jmp $L000x86_loop
-ALIGN 16
-$L001x86_break:
- bswap ebx
- bswap ecx
- bswap edx
- bswap ebp
- mov edi,DWORD PTR 104[esp]
- mov DWORD PTR 12[edi],ebx
- mov DWORD PTR 8[edi],ecx
- mov DWORD PTR 4[edi],edx
- mov DWORD PTR [edi],ebp
- add esp,84
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_gcm_gmult_4bit_x86 ENDP
-ALIGN 16
-_gcm_ghash_4bit_x86 PROC PUBLIC
-$L_gcm_ghash_4bit_x86_begin::
- push ebp
- push ebx
- push esi
- push edi
- sub esp,84
- mov ebx,DWORD PTR 104[esp]
- mov esi,DWORD PTR 108[esp]
- mov edi,DWORD PTR 112[esp]
- mov ecx,DWORD PTR 116[esp]
- add ecx,edi
- mov DWORD PTR 116[esp],ecx
- mov ebp,DWORD PTR [ebx]
- mov edx,DWORD PTR 4[ebx]
- mov ecx,DWORD PTR 8[ebx]
- mov ebx,DWORD PTR 12[ebx]
- mov DWORD PTR 16[esp],0
- mov DWORD PTR 20[esp],471859200
- mov DWORD PTR 24[esp],943718400
- mov DWORD PTR 28[esp],610271232
- mov DWORD PTR 32[esp],1887436800
- mov DWORD PTR 36[esp],1822425088
- mov DWORD PTR 40[esp],1220542464
- mov DWORD PTR 44[esp],1423966208
- mov DWORD PTR 48[esp],3774873600
- mov DWORD PTR 52[esp],4246732800
- mov DWORD PTR 56[esp],3644850176
- mov DWORD PTR 60[esp],3311403008
- mov DWORD PTR 64[esp],2441084928
- mov DWORD PTR 68[esp],2376073216
- mov DWORD PTR 72[esp],2847932416
- mov DWORD PTR 76[esp],3051356160
-ALIGN 16
-$L002x86_outer_loop:
- xor ebx,DWORD PTR 12[edi]
- xor ecx,DWORD PTR 8[edi]
- xor edx,DWORD PTR 4[edi]
- xor ebp,DWORD PTR [edi]
- mov DWORD PTR 12[esp],ebx
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 4[esp],edx
- mov DWORD PTR [esp],ebp
- shr ebx,20
- and ebx,240
- mov ebp,DWORD PTR 4[ebx*1+esi]
- mov edx,DWORD PTR [ebx*1+esi]
- mov ecx,DWORD PTR 12[ebx*1+esi]
- mov ebx,DWORD PTR 8[ebx*1+esi]
- xor eax,eax
- mov edi,15
- jmp $L003x86_loop
-ALIGN 16
-$L003x86_loop:
- mov al,bl
- shrd ebx,ecx,4
- and al,15
- shrd ecx,edx,4
- shrd edx,ebp,4
- shr ebp,4
- xor ebp,DWORD PTR 16[eax*4+esp]
- mov al,BYTE PTR [edi*1+esp]
- and al,240
- xor ebx,DWORD PTR 8[eax*1+esi]
- xor ecx,DWORD PTR 12[eax*1+esi]
- xor edx,DWORD PTR [eax*1+esi]
- xor ebp,DWORD PTR 4[eax*1+esi]
- dec edi
- js $L004x86_break
- mov al,bl
- shrd ebx,ecx,4
- and al,15
- shrd ecx,edx,4
- shrd edx,ebp,4
- shr ebp,4
- xor ebp,DWORD PTR 16[eax*4+esp]
- mov al,BYTE PTR [edi*1+esp]
- shl al,4
- xor ebx,DWORD PTR 8[eax*1+esi]
- xor ecx,DWORD PTR 12[eax*1+esi]
- xor edx,DWORD PTR [eax*1+esi]
- xor ebp,DWORD PTR 4[eax*1+esi]
- jmp $L003x86_loop
-ALIGN 16
-$L004x86_break:
- bswap ebx
- bswap ecx
- bswap edx
- bswap ebp
- mov edi,DWORD PTR 112[esp]
- lea edi,DWORD PTR 16[edi]
- cmp edi,DWORD PTR 116[esp]
- mov DWORD PTR 112[esp],edi
- jb $L002x86_outer_loop
- mov edi,DWORD PTR 104[esp]
- mov DWORD PTR 12[edi],ebx
- mov DWORD PTR 8[edi],ecx
- mov DWORD PTR 4[edi],edx
- mov DWORD PTR [edi],ebp
- add esp,84
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_gcm_ghash_4bit_x86 ENDP
-ALIGN 16
-_gcm_gmult_4bit_mmx PROC PUBLIC
-$L_gcm_gmult_4bit_mmx_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov edi,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- call $L005pic_point
-$L005pic_point:
- pop eax
- lea eax,DWORD PTR ($Lrem_4bit-$L005pic_point)[eax]
- movzx ebx,BYTE PTR 15[edi]
- xor ecx,ecx
- mov edx,ebx
- mov cl,dl
- mov ebp,14
- shl cl,4
- and edx,240
- movq mm0,QWORD PTR 8[ecx*1+esi]
- movq mm1,QWORD PTR [ecx*1+esi]
- movd ebx,mm0
- jmp $L006mmx_loop
-ALIGN 16
-$L006mmx_loop:
- psrlq mm0,4
- and ebx,15
- movq mm2,mm1
- psrlq mm1,4
- pxor mm0,QWORD PTR 8[edx*1+esi]
- mov cl,BYTE PTR [ebp*1+edi]
- psllq mm2,60
- pxor mm1,QWORD PTR [ebx*8+eax]
- dec ebp
- movd ebx,mm0
- pxor mm1,QWORD PTR [edx*1+esi]
- mov edx,ecx
- pxor mm0,mm2
- js $L007mmx_break
- shl cl,4
- and ebx,15
- psrlq mm0,4
- and edx,240
- movq mm2,mm1
- psrlq mm1,4
- pxor mm0,QWORD PTR 8[ecx*1+esi]
- psllq mm2,60
- pxor mm1,QWORD PTR [ebx*8+eax]
- movd ebx,mm0
- pxor mm1,QWORD PTR [ecx*1+esi]
- pxor mm0,mm2
- jmp $L006mmx_loop
-ALIGN 16
-$L007mmx_break:
- shl cl,4
- and ebx,15
- psrlq mm0,4
- and edx,240
- movq mm2,mm1
- psrlq mm1,4
- pxor mm0,QWORD PTR 8[ecx*1+esi]
- psllq mm2,60
- pxor mm1,QWORD PTR [ebx*8+eax]
- movd ebx,mm0
- pxor mm1,QWORD PTR [ecx*1+esi]
- pxor mm0,mm2
- psrlq mm0,4
- and ebx,15
- movq mm2,mm1
- psrlq mm1,4
- pxor mm0,QWORD PTR 8[edx*1+esi]
- psllq mm2,60
- pxor mm1,QWORD PTR [ebx*8+eax]
- movd ebx,mm0
- pxor mm1,QWORD PTR [edx*1+esi]
- pxor mm0,mm2
- psrlq mm0,32
- movd edx,mm1
- psrlq mm1,32
- movd ecx,mm0
- movd ebp,mm1
- bswap ebx
- bswap edx
- bswap ecx
- bswap ebp
- emms
- mov DWORD PTR 12[edi],ebx
- mov DWORD PTR 4[edi],edx
- mov DWORD PTR 8[edi],ecx
- mov DWORD PTR [edi],ebp
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_gcm_gmult_4bit_mmx ENDP
-ALIGN 16
-_gcm_ghash_4bit_mmx PROC PUBLIC
-$L_gcm_ghash_4bit_mmx_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov eax,DWORD PTR 20[esp]
- mov ebx,DWORD PTR 24[esp]
- mov ecx,DWORD PTR 28[esp]
- mov edx,DWORD PTR 32[esp]
- mov ebp,esp
- call $L008pic_point
-$L008pic_point:
- pop esi
- lea esi,DWORD PTR ($Lrem_8bit-$L008pic_point)[esi]
- sub esp,544
- and esp,-64
- sub esp,16
- add edx,ecx
- mov DWORD PTR 544[esp],eax
- mov DWORD PTR 552[esp],edx
- mov DWORD PTR 556[esp],ebp
- add ebx,128
- lea edi,DWORD PTR 144[esp]
- lea ebp,DWORD PTR 400[esp]
- mov edx,DWORD PTR [ebx-120]
- movq mm0,QWORD PTR [ebx-120]
- movq mm3,QWORD PTR [ebx-128]
- shl edx,4
- mov BYTE PTR [esp],dl
- mov edx,DWORD PTR [ebx-104]
- movq mm2,QWORD PTR [ebx-104]
- movq mm5,QWORD PTR [ebx-112]
- movq QWORD PTR [edi-128],mm0
- psrlq mm0,4
- movq QWORD PTR [edi],mm3
- movq mm7,mm3
- psrlq mm3,4
- shl edx,4
- mov BYTE PTR 1[esp],dl
- mov edx,DWORD PTR [ebx-88]
- movq mm1,QWORD PTR [ebx-88]
- psllq mm7,60
- movq mm4,QWORD PTR [ebx-96]
- por mm0,mm7
- movq QWORD PTR [edi-120],mm2
- psrlq mm2,4
- movq QWORD PTR 8[edi],mm5
- movq mm6,mm5
- movq QWORD PTR [ebp-128],mm0
- psrlq mm5,4
- movq QWORD PTR [ebp],mm3
- shl edx,4
- mov BYTE PTR 2[esp],dl
- mov edx,DWORD PTR [ebx-72]
- movq mm0,QWORD PTR [ebx-72]
- psllq mm6,60
- movq mm3,QWORD PTR [ebx-80]
- por mm2,mm6
- movq QWORD PTR [edi-112],mm1
- psrlq mm1,4
- movq QWORD PTR 16[edi],mm4
- movq mm7,mm4
- movq QWORD PTR [ebp-120],mm2
- psrlq mm4,4
- movq QWORD PTR 8[ebp],mm5
- shl edx,4
- mov BYTE PTR 3[esp],dl
- mov edx,DWORD PTR [ebx-56]
- movq mm2,QWORD PTR [ebx-56]
- psllq mm7,60
- movq mm5,QWORD PTR [ebx-64]
- por mm1,mm7
- movq QWORD PTR [edi-104],mm0
- psrlq mm0,4
- movq QWORD PTR 24[edi],mm3
- movq mm6,mm3
- movq QWORD PTR [ebp-112],mm1
- psrlq mm3,4
- movq QWORD PTR 16[ebp],mm4
- shl edx,4
- mov BYTE PTR 4[esp],dl
- mov edx,DWORD PTR [ebx-40]
- movq mm1,QWORD PTR [ebx-40]
- psllq mm6,60
- movq mm4,QWORD PTR [ebx-48]
- por mm0,mm6
- movq QWORD PTR [edi-96],mm2
- psrlq mm2,4
- movq QWORD PTR 32[edi],mm5
- movq mm7,mm5
- movq QWORD PTR [ebp-104],mm0
- psrlq mm5,4
- movq QWORD PTR 24[ebp],mm3
- shl edx,4
- mov BYTE PTR 5[esp],dl
- mov edx,DWORD PTR [ebx-24]
- movq mm0,QWORD PTR [ebx-24]
- psllq mm7,60
- movq mm3,QWORD PTR [ebx-32]
- por mm2,mm7
- movq QWORD PTR [edi-88],mm1
- psrlq mm1,4
- movq QWORD PTR 40[edi],mm4
- movq mm6,mm4
- movq QWORD PTR [ebp-96],mm2
- psrlq mm4,4
- movq QWORD PTR 32[ebp],mm5
- shl edx,4
- mov BYTE PTR 6[esp],dl
- mov edx,DWORD PTR [ebx-8]
- movq mm2,QWORD PTR [ebx-8]
- psllq mm6,60
- movq mm5,QWORD PTR [ebx-16]
- por mm1,mm6
- movq QWORD PTR [edi-80],mm0
- psrlq mm0,4
- movq QWORD PTR 48[edi],mm3
- movq mm7,mm3
- movq QWORD PTR [ebp-88],mm1
- psrlq mm3,4
- movq QWORD PTR 40[ebp],mm4
- shl edx,4
- mov BYTE PTR 7[esp],dl
- mov edx,DWORD PTR 8[ebx]
- movq mm1,QWORD PTR 8[ebx]
- psllq mm7,60
- movq mm4,QWORD PTR [ebx]
- por mm0,mm7
- movq QWORD PTR [edi-72],mm2
- psrlq mm2,4
- movq QWORD PTR 56[edi],mm5
- movq mm6,mm5
- movq QWORD PTR [ebp-80],mm0
- psrlq mm5,4
- movq QWORD PTR 48[ebp],mm3
- shl edx,4
- mov BYTE PTR 8[esp],dl
- mov edx,DWORD PTR 24[ebx]
- movq mm0,QWORD PTR 24[ebx]
- psllq mm6,60
- movq mm3,QWORD PTR 16[ebx]
- por mm2,mm6
- movq QWORD PTR [edi-64],mm1
- psrlq mm1,4
- movq QWORD PTR 64[edi],mm4
- movq mm7,mm4
- movq QWORD PTR [ebp-72],mm2
- psrlq mm4,4
- movq QWORD PTR 56[ebp],mm5
- shl edx,4
- mov BYTE PTR 9[esp],dl
- mov edx,DWORD PTR 40[ebx]
- movq mm2,QWORD PTR 40[ebx]
- psllq mm7,60
- movq mm5,QWORD PTR 32[ebx]
- por mm1,mm7
- movq QWORD PTR [edi-56],mm0
- psrlq mm0,4
- movq QWORD PTR 72[edi],mm3
- movq mm6,mm3
- movq QWORD PTR [ebp-64],mm1
- psrlq mm3,4
- movq QWORD PTR 64[ebp],mm4
- shl edx,4
- mov BYTE PTR 10[esp],dl
- mov edx,DWORD PTR 56[ebx]
- movq mm1,QWORD PTR 56[ebx]
- psllq mm6,60
- movq mm4,QWORD PTR 48[ebx]
- por mm0,mm6
- movq QWORD PTR [edi-48],mm2
- psrlq mm2,4
- movq QWORD PTR 80[edi],mm5
- movq mm7,mm5
- movq QWORD PTR [ebp-56],mm0
- psrlq mm5,4
- movq QWORD PTR 72[ebp],mm3
- shl edx,4
- mov BYTE PTR 11[esp],dl
- mov edx,DWORD PTR 72[ebx]
- movq mm0,QWORD PTR 72[ebx]
- psllq mm7,60
- movq mm3,QWORD PTR 64[ebx]
- por mm2,mm7
- movq QWORD PTR [edi-40],mm1
- psrlq mm1,4
- movq QWORD PTR 88[edi],mm4
- movq mm6,mm4
- movq QWORD PTR [ebp-48],mm2
- psrlq mm4,4
- movq QWORD PTR 80[ebp],mm5
- shl edx,4
- mov BYTE PTR 12[esp],dl
- mov edx,DWORD PTR 88[ebx]
- movq mm2,QWORD PTR 88[ebx]
- psllq mm6,60
- movq mm5,QWORD PTR 80[ebx]
- por mm1,mm6
- movq QWORD PTR [edi-32],mm0
- psrlq mm0,4
- movq QWORD PTR 96[edi],mm3
- movq mm7,mm3
- movq QWORD PTR [ebp-40],mm1
- psrlq mm3,4
- movq QWORD PTR 88[ebp],mm4
- shl edx,4
- mov BYTE PTR 13[esp],dl
- mov edx,DWORD PTR 104[ebx]
- movq mm1,QWORD PTR 104[ebx]
- psllq mm7,60
- movq mm4,QWORD PTR 96[ebx]
- por mm0,mm7
- movq QWORD PTR [edi-24],mm2
- psrlq mm2,4
- movq QWORD PTR 104[edi],mm5
- movq mm6,mm5
- movq QWORD PTR [ebp-32],mm0
- psrlq mm5,4
- movq QWORD PTR 96[ebp],mm3
- shl edx,4
- mov BYTE PTR 14[esp],dl
- mov edx,DWORD PTR 120[ebx]
- movq mm0,QWORD PTR 120[ebx]
- psllq mm6,60
- movq mm3,QWORD PTR 112[ebx]
- por mm2,mm6
- movq QWORD PTR [edi-16],mm1
- psrlq mm1,4
- movq QWORD PTR 112[edi],mm4
- movq mm7,mm4
- movq QWORD PTR [ebp-24],mm2
- psrlq mm4,4
- movq QWORD PTR 104[ebp],mm5
- shl edx,4
- mov BYTE PTR 15[esp],dl
- psllq mm7,60
- por mm1,mm7
- movq QWORD PTR [edi-8],mm0
- psrlq mm0,4
- movq QWORD PTR 120[edi],mm3
- movq mm6,mm3
- movq QWORD PTR [ebp-16],mm1
- psrlq mm3,4
- movq QWORD PTR 112[ebp],mm4
- psllq mm6,60
- por mm0,mm6
- movq QWORD PTR [ebp-8],mm0
- movq QWORD PTR 120[ebp],mm3
- movq mm6,QWORD PTR [eax]
- mov ebx,DWORD PTR 8[eax]
- mov edx,DWORD PTR 12[eax]
-ALIGN 16
-$L009outer:
- xor edx,DWORD PTR 12[ecx]
- xor ebx,DWORD PTR 8[ecx]
- pxor mm6,QWORD PTR [ecx]
- lea ecx,DWORD PTR 16[ecx]
- mov DWORD PTR 536[esp],ebx
- movq QWORD PTR 528[esp],mm6
- mov DWORD PTR 548[esp],ecx
- xor eax,eax
- rol edx,8
- mov al,dl
- mov ebp,eax
- and al,15
- shr ebp,4
- pxor mm0,mm0
- rol edx,8
- pxor mm1,mm1
- pxor mm2,mm2
- movq mm7,QWORD PTR 16[eax*8+esp]
- movq mm6,QWORD PTR 144[eax*8+esp]
- mov al,dl
- movd ebx,mm7
- psrlq mm7,8
- movq mm3,mm6
- mov edi,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[ebp*8+esp]
- and al,15
- psllq mm3,56
- shr edi,4
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[ebp*8+esp]
- xor bl,BYTE PTR [ebp*1+esp]
- mov al,dl
- movd ecx,mm7
- movzx ebx,bl
- psrlq mm7,8
- movq mm3,mm6
- mov ebp,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[edi*8+esp]
- and al,15
- psllq mm3,56
- shr ebp,4
- pinsrw mm2,WORD PTR [ebx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[edi*8+esp]
- xor cl,BYTE PTR [edi*1+esp]
- mov al,dl
- mov edx,DWORD PTR 536[esp]
- movd ebx,mm7
- movzx ecx,cl
- psrlq mm7,8
- movq mm3,mm6
- mov edi,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[ebp*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm2
- shr edi,4
- pinsrw mm1,WORD PTR [ecx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[ebp*8+esp]
- xor bl,BYTE PTR [ebp*1+esp]
- mov al,dl
- movd ecx,mm7
- movzx ebx,bl
- psrlq mm7,8
- movq mm3,mm6
- mov ebp,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[edi*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm1
- shr ebp,4
- pinsrw mm0,WORD PTR [ebx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[edi*8+esp]
- xor cl,BYTE PTR [edi*1+esp]
- mov al,dl
- movd ebx,mm7
- movzx ecx,cl
- psrlq mm7,8
- movq mm3,mm6
- mov edi,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[ebp*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm0
- shr edi,4
- pinsrw mm2,WORD PTR [ecx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[ebp*8+esp]
- xor bl,BYTE PTR [ebp*1+esp]
- mov al,dl
- movd ecx,mm7
- movzx ebx,bl
- psrlq mm7,8
- movq mm3,mm6
- mov ebp,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[edi*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm2
- shr ebp,4
- pinsrw mm1,WORD PTR [ebx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[edi*8+esp]
- xor cl,BYTE PTR [edi*1+esp]
- mov al,dl
- mov edx,DWORD PTR 532[esp]
- movd ebx,mm7
- movzx ecx,cl
- psrlq mm7,8
- movq mm3,mm6
- mov edi,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[ebp*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm1
- shr edi,4
- pinsrw mm0,WORD PTR [ecx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[ebp*8+esp]
- xor bl,BYTE PTR [ebp*1+esp]
- mov al,dl
- movd ecx,mm7
- movzx ebx,bl
- psrlq mm7,8
- movq mm3,mm6
- mov ebp,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[edi*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm0
- shr ebp,4
- pinsrw mm2,WORD PTR [ebx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[edi*8+esp]
- xor cl,BYTE PTR [edi*1+esp]
- mov al,dl
- movd ebx,mm7
- movzx ecx,cl
- psrlq mm7,8
- movq mm3,mm6
- mov edi,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[ebp*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm2
- shr edi,4
- pinsrw mm1,WORD PTR [ecx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[ebp*8+esp]
- xor bl,BYTE PTR [ebp*1+esp]
- mov al,dl
- movd ecx,mm7
- movzx ebx,bl
- psrlq mm7,8
- movq mm3,mm6
- mov ebp,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[edi*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm1
- shr ebp,4
- pinsrw mm0,WORD PTR [ebx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[edi*8+esp]
- xor cl,BYTE PTR [edi*1+esp]
- mov al,dl
- mov edx,DWORD PTR 528[esp]
- movd ebx,mm7
- movzx ecx,cl
- psrlq mm7,8
- movq mm3,mm6
- mov edi,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[ebp*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm0
- shr edi,4
- pinsrw mm2,WORD PTR [ecx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[ebp*8+esp]
- xor bl,BYTE PTR [ebp*1+esp]
- mov al,dl
- movd ecx,mm7
- movzx ebx,bl
- psrlq mm7,8
- movq mm3,mm6
- mov ebp,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[edi*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm2
- shr ebp,4
- pinsrw mm1,WORD PTR [ebx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[edi*8+esp]
- xor cl,BYTE PTR [edi*1+esp]
- mov al,dl
- movd ebx,mm7
- movzx ecx,cl
- psrlq mm7,8
- movq mm3,mm6
- mov edi,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[ebp*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm1
- shr edi,4
- pinsrw mm0,WORD PTR [ecx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[ebp*8+esp]
- xor bl,BYTE PTR [ebp*1+esp]
- mov al,dl
- movd ecx,mm7
- movzx ebx,bl
- psrlq mm7,8
- movq mm3,mm6
- mov ebp,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[edi*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm0
- shr ebp,4
- pinsrw mm2,WORD PTR [ebx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- rol edx,8
- pxor mm6,QWORD PTR 144[eax*8+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[edi*8+esp]
- xor cl,BYTE PTR [edi*1+esp]
- mov al,dl
- mov edx,DWORD PTR 524[esp]
- movd ebx,mm7
- movzx ecx,cl
- psrlq mm7,8
- movq mm3,mm6
- mov edi,eax
- psrlq mm6,8
- pxor mm7,QWORD PTR 272[ebp*8+esp]
- and al,15
- psllq mm3,56
- pxor mm6,mm2
- shr edi,4
- pinsrw mm1,WORD PTR [ecx*2+esi],2
- pxor mm7,QWORD PTR 16[eax*8+esp]
- pxor mm6,QWORD PTR 144[eax*8+esp]
- xor bl,BYTE PTR [ebp*1+esp]
- pxor mm7,mm3
- pxor mm6,QWORD PTR 400[ebp*8+esp]
- movzx ebx,bl
- pxor mm2,mm2
- psllq mm1,4
- movd ecx,mm7
- psrlq mm7,4
- movq mm3,mm6
- psrlq mm6,4
- shl ecx,4
- pxor mm7,QWORD PTR 16[edi*8+esp]
- psllq mm3,60
- movzx ecx,cl
- pxor mm7,mm3
- pxor mm6,QWORD PTR 144[edi*8+esp]
- pinsrw mm0,WORD PTR [ebx*2+esi],2
- pxor mm6,mm1
- movd edx,mm7
- pinsrw mm2,WORD PTR [ecx*2+esi],3
- psllq mm0,12
- pxor mm6,mm0
- psrlq mm7,32
- pxor mm6,mm2
- mov ecx,DWORD PTR 548[esp]
- movd ebx,mm7
- movq mm3,mm6
- psllw mm6,8
- psrlw mm3,8
- por mm6,mm3
- bswap edx
- pshufw mm6,mm6,27
- bswap ebx
- cmp ecx,DWORD PTR 552[esp]
- jne $L009outer
- mov eax,DWORD PTR 544[esp]
- mov DWORD PTR 12[eax],edx
- mov DWORD PTR 8[eax],ebx
- movq QWORD PTR [eax],mm6
- mov esp,DWORD PTR 556[esp]
- emms
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_gcm_ghash_4bit_mmx ENDP
-ALIGN 16
-_gcm_init_clmul PROC PUBLIC
-$L_gcm_init_clmul_begin::
- mov edx,DWORD PTR 4[esp]
- mov eax,DWORD PTR 8[esp]
- call $L010pic
-$L010pic:
- pop ecx
- lea ecx,DWORD PTR ($Lbswap-$L010pic)[ecx]
- movdqu xmm2,XMMWORD PTR [eax]
- pshufd xmm2,xmm2,78
- pshufd xmm4,xmm2,255
- movdqa xmm3,xmm2
- psllq xmm2,1
- pxor xmm5,xmm5
- psrlq xmm3,63
- pcmpgtd xmm5,xmm4
- pslldq xmm3,8
- por xmm2,xmm3
- pand xmm5,XMMWORD PTR 16[ecx]
- pxor xmm2,xmm5
- movdqa xmm0,xmm2
- movdqa xmm1,xmm0
- pshufd xmm3,xmm0,78
- pshufd xmm4,xmm2,78
- pxor xmm3,xmm0
- pxor xmm4,xmm2
-DB 102,15,58,68,194,0
-DB 102,15,58,68,202,17
-DB 102,15,58,68,220,0
- xorps xmm3,xmm0
- xorps xmm3,xmm1
- movdqa xmm4,xmm3
- psrldq xmm3,8
- pslldq xmm4,8
- pxor xmm1,xmm3
- pxor xmm0,xmm4
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
- pshufd xmm3,xmm2,78
- pshufd xmm4,xmm0,78
- pxor xmm3,xmm2
- movdqu XMMWORD PTR [edx],xmm2
- pxor xmm4,xmm0
- movdqu XMMWORD PTR 16[edx],xmm0
-DB 102,15,58,15,227,8
- movdqu XMMWORD PTR 32[edx],xmm4
- ret
-_gcm_init_clmul ENDP
-ALIGN 16
-_gcm_gmult_clmul PROC PUBLIC
-$L_gcm_gmult_clmul_begin::
- mov eax,DWORD PTR 4[esp]
- mov edx,DWORD PTR 8[esp]
- call $L011pic
-$L011pic:
- pop ecx
- lea ecx,DWORD PTR ($Lbswap-$L011pic)[ecx]
- movdqu xmm0,XMMWORD PTR [eax]
- movdqa xmm5,XMMWORD PTR [ecx]
- movups xmm2,XMMWORD PTR [edx]
-DB 102,15,56,0,197
- movups xmm4,XMMWORD PTR 32[edx]
- movdqa xmm1,xmm0
- pshufd xmm3,xmm0,78
- pxor xmm3,xmm0
-DB 102,15,58,68,194,0
-DB 102,15,58,68,202,17
-DB 102,15,58,68,220,0
- xorps xmm3,xmm0
- xorps xmm3,xmm1
- movdqa xmm4,xmm3
- psrldq xmm3,8
- pslldq xmm4,8
- pxor xmm1,xmm3
- pxor xmm0,xmm4
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
-DB 102,15,56,0,197
- movdqu XMMWORD PTR [eax],xmm0
- ret
-_gcm_gmult_clmul ENDP
-ALIGN 16
-_gcm_ghash_clmul PROC PUBLIC
-$L_gcm_ghash_clmul_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov eax,DWORD PTR 20[esp]
- mov edx,DWORD PTR 24[esp]
- mov esi,DWORD PTR 28[esp]
- mov ebx,DWORD PTR 32[esp]
- call $L012pic
-$L012pic:
- pop ecx
- lea ecx,DWORD PTR ($Lbswap-$L012pic)[ecx]
- movdqu xmm0,XMMWORD PTR [eax]
- movdqa xmm5,XMMWORD PTR [ecx]
- movdqu xmm2,XMMWORD PTR [edx]
-DB 102,15,56,0,197
- sub ebx,16
- jz $L013odd_tail
- movdqu xmm3,XMMWORD PTR [esi]
- movdqu xmm6,XMMWORD PTR 16[esi]
-DB 102,15,56,0,221
-DB 102,15,56,0,245
- movdqu xmm5,XMMWORD PTR 32[edx]
- pxor xmm0,xmm3
- pshufd xmm3,xmm6,78
- movdqa xmm7,xmm6
- pxor xmm3,xmm6
- lea esi,DWORD PTR 32[esi]
-DB 102,15,58,68,242,0
-DB 102,15,58,68,250,17
-DB 102,15,58,68,221,0
- movups xmm2,XMMWORD PTR 16[edx]
- nop
- sub ebx,32
- jbe $L014even_tail
- jmp $L015mod_loop
-ALIGN 32
-$L015mod_loop:
- pshufd xmm4,xmm0,78
- movdqa xmm1,xmm0
- pxor xmm4,xmm0
- nop
-DB 102,15,58,68,194,0
-DB 102,15,58,68,202,17
-DB 102,15,58,68,229,16
- movups xmm2,XMMWORD PTR [edx]
- xorps xmm0,xmm6
- movdqa xmm5,XMMWORD PTR [ecx]
- xorps xmm1,xmm7
- movdqu xmm7,XMMWORD PTR [esi]
- pxor xmm3,xmm0
- movdqu xmm6,XMMWORD PTR 16[esi]
- pxor xmm3,xmm1
-DB 102,15,56,0,253
- pxor xmm4,xmm3
- movdqa xmm3,xmm4
- psrldq xmm4,8
- pslldq xmm3,8
- pxor xmm1,xmm4
- pxor xmm0,xmm3
-DB 102,15,56,0,245
- pxor xmm1,xmm7
- movdqa xmm7,xmm6
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
-DB 102,15,58,68,242,0
- movups xmm5,XMMWORD PTR 32[edx]
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
- pshufd xmm3,xmm7,78
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm3,xmm7
- pxor xmm1,xmm4
-DB 102,15,58,68,250,17
- movups xmm2,XMMWORD PTR 16[edx]
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
-DB 102,15,58,68,221,0
- lea esi,DWORD PTR 32[esi]
- sub ebx,32
- ja $L015mod_loop
-$L014even_tail:
- pshufd xmm4,xmm0,78
- movdqa xmm1,xmm0
- pxor xmm4,xmm0
-DB 102,15,58,68,194,0
-DB 102,15,58,68,202,17
-DB 102,15,58,68,229,16
- movdqa xmm5,XMMWORD PTR [ecx]
- xorps xmm0,xmm6
- xorps xmm1,xmm7
- pxor xmm3,xmm0
- pxor xmm3,xmm1
- pxor xmm4,xmm3
- movdqa xmm3,xmm4
- psrldq xmm4,8
- pslldq xmm3,8
- pxor xmm1,xmm4
- pxor xmm0,xmm3
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
- test ebx,ebx
- jnz $L016done
- movups xmm2,XMMWORD PTR [edx]
-$L013odd_tail:
- movdqu xmm3,XMMWORD PTR [esi]
-DB 102,15,56,0,221
- pxor xmm0,xmm3
- movdqa xmm1,xmm0
- pshufd xmm3,xmm0,78
- pshufd xmm4,xmm2,78
- pxor xmm3,xmm0
- pxor xmm4,xmm2
-DB 102,15,58,68,194,0
-DB 102,15,58,68,202,17
-DB 102,15,58,68,220,0
- xorps xmm3,xmm0
- xorps xmm3,xmm1
- movdqa xmm4,xmm3
- psrldq xmm3,8
- pslldq xmm4,8
- pxor xmm1,xmm3
- pxor xmm0,xmm4
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
-$L016done:
-DB 102,15,56,0,197
- movdqu XMMWORD PTR [eax],xmm0
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_gcm_ghash_clmul ENDP
-ALIGN 64
-$Lbswap::
-DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
-DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194
-ALIGN 64
-$Lrem_8bit::
-DW 0,450,900,582,1800,1738,1164,1358
-DW 3600,4050,3476,3158,2328,2266,2716,2910
-DW 7200,7650,8100,7782,6952,6890,6316,6510
-DW 4656,5106,4532,4214,5432,5370,5820,6014
-DW 14400,14722,15300,14854,16200,16010,15564,15630
-DW 13904,14226,13780,13334,12632,12442,13020,13086
-DW 9312,9634,10212,9766,9064,8874,8428,8494
-DW 10864,11186,10740,10294,11640,11450,12028,12094
-DW 28800,28994,29444,29382,30600,30282,29708,30158
-DW 32400,32594,32020,31958,31128,30810,31260,31710
-DW 27808,28002,28452,28390,27560,27242,26668,27118
-DW 25264,25458,24884,24822,26040,25722,26172,26622
-DW 18624,18690,19268,19078,20424,19978,19532,19854
-DW 18128,18194,17748,17558,16856,16410,16988,17310
-DW 21728,21794,22372,22182,21480,21034,20588,20910
-DW 23280,23346,22900,22710,24056,23610,24188,24510
-DW 57600,57538,57988,58182,58888,59338,58764,58446
-DW 61200,61138,60564,60758,59416,59866,60316,59998
-DW 64800,64738,65188,65382,64040,64490,63916,63598
-DW 62256,62194,61620,61814,62520,62970,63420,63102
-DW 55616,55426,56004,56070,56904,57226,56780,56334
-DW 55120,54930,54484,54550,53336,53658,54236,53790
-DW 50528,50338,50916,50982,49768,50090,49644,49198
-DW 52080,51890,51444,51510,52344,52666,53244,52798
-DW 37248,36930,37380,37830,38536,38730,38156,38094
-DW 40848,40530,39956,40406,39064,39258,39708,39646
-DW 36256,35938,36388,36838,35496,35690,35116,35054
-DW 33712,33394,32820,33270,33976,34170,34620,34558
-DW 43456,43010,43588,43910,44744,44810,44364,44174
-DW 42960,42514,42068,42390,41176,41242,41820,41630
-DW 46560,46114,46692,47014,45800,45866,45420,45230
-DW 48112,47666,47220,47542,48376,48442,49020,48830
-ALIGN 64
-$Lrem_4bit::
-DD 0,0,0,471859200
-DD 0,943718400,0,610271232
-DD 0,1887436800,0,1822425088
-DD 0,1220542464,0,1423966208
-DD 0,3774873600,0,4246732800
-DD 0,3644850176,0,3311403008
-DD 0,2441084928,0,2376073216
-DD 0,2847932416,0,3051356160
-DB 71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67
-DB 82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112
-DB 112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62
-DB 0
-.text$ ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN 16
+_gcm_gmult_4bit_x86 PROC PUBLIC
+$L_gcm_gmult_4bit_x86_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ sub esp,84
+ mov edi,DWORD PTR 104[esp]
+ mov esi,DWORD PTR 108[esp]
+ mov ebp,DWORD PTR [edi]
+ mov edx,DWORD PTR 4[edi]
+ mov ecx,DWORD PTR 8[edi]
+ mov ebx,DWORD PTR 12[edi]
+ mov DWORD PTR 16[esp],0
+ mov DWORD PTR 20[esp],471859200
+ mov DWORD PTR 24[esp],943718400
+ mov DWORD PTR 28[esp],610271232
+ mov DWORD PTR 32[esp],1887436800
+ mov DWORD PTR 36[esp],1822425088
+ mov DWORD PTR 40[esp],1220542464
+ mov DWORD PTR 44[esp],1423966208
+ mov DWORD PTR 48[esp],3774873600
+ mov DWORD PTR 52[esp],4246732800
+ mov DWORD PTR 56[esp],3644850176
+ mov DWORD PTR 60[esp],3311403008
+ mov DWORD PTR 64[esp],2441084928
+ mov DWORD PTR 68[esp],2376073216
+ mov DWORD PTR 72[esp],2847932416
+ mov DWORD PTR 76[esp],3051356160
+ mov DWORD PTR [esp],ebp
+ mov DWORD PTR 4[esp],edx
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 12[esp],ebx
+ shr ebx,20
+ and ebx,240
+ mov ebp,DWORD PTR 4[ebx*1+esi]
+ mov edx,DWORD PTR [ebx*1+esi]
+ mov ecx,DWORD PTR 12[ebx*1+esi]
+ mov ebx,DWORD PTR 8[ebx*1+esi]
+ xor eax,eax
+ mov edi,15
+ jmp $L000x86_loop
+ALIGN 16
+$L000x86_loop:
+ mov al,bl
+ shrd ebx,ecx,4
+ and al,15
+ shrd ecx,edx,4
+ shrd edx,ebp,4
+ shr ebp,4
+ xor ebp,DWORD PTR 16[eax*4+esp]
+ mov al,BYTE PTR [edi*1+esp]
+ and al,240
+ xor ebx,DWORD PTR 8[eax*1+esi]
+ xor ecx,DWORD PTR 12[eax*1+esi]
+ xor edx,DWORD PTR [eax*1+esi]
+ xor ebp,DWORD PTR 4[eax*1+esi]
+ dec edi
+ js $L001x86_break
+ mov al,bl
+ shrd ebx,ecx,4
+ and al,15
+ shrd ecx,edx,4
+ shrd edx,ebp,4
+ shr ebp,4
+ xor ebp,DWORD PTR 16[eax*4+esp]
+ mov al,BYTE PTR [edi*1+esp]
+ shl al,4
+ xor ebx,DWORD PTR 8[eax*1+esi]
+ xor ecx,DWORD PTR 12[eax*1+esi]
+ xor edx,DWORD PTR [eax*1+esi]
+ xor ebp,DWORD PTR 4[eax*1+esi]
+ jmp $L000x86_loop
+ALIGN 16
+$L001x86_break:
+ bswap ebx
+ bswap ecx
+ bswap edx
+ bswap ebp
+ mov edi,DWORD PTR 104[esp]
+ mov DWORD PTR 12[edi],ebx
+ mov DWORD PTR 8[edi],ecx
+ mov DWORD PTR 4[edi],edx
+ mov DWORD PTR [edi],ebp
+ add esp,84
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_gcm_gmult_4bit_x86 ENDP
+ALIGN 16
+_gcm_ghash_4bit_x86 PROC PUBLIC
+$L_gcm_ghash_4bit_x86_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ sub esp,84
+ mov ebx,DWORD PTR 104[esp]
+ mov esi,DWORD PTR 108[esp]
+ mov edi,DWORD PTR 112[esp]
+ mov ecx,DWORD PTR 116[esp]
+ add ecx,edi
+ mov DWORD PTR 116[esp],ecx
+ mov ebp,DWORD PTR [ebx]
+ mov edx,DWORD PTR 4[ebx]
+ mov ecx,DWORD PTR 8[ebx]
+ mov ebx,DWORD PTR 12[ebx]
+ mov DWORD PTR 16[esp],0
+ mov DWORD PTR 20[esp],471859200
+ mov DWORD PTR 24[esp],943718400
+ mov DWORD PTR 28[esp],610271232
+ mov DWORD PTR 32[esp],1887436800
+ mov DWORD PTR 36[esp],1822425088
+ mov DWORD PTR 40[esp],1220542464
+ mov DWORD PTR 44[esp],1423966208
+ mov DWORD PTR 48[esp],3774873600
+ mov DWORD PTR 52[esp],4246732800
+ mov DWORD PTR 56[esp],3644850176
+ mov DWORD PTR 60[esp],3311403008
+ mov DWORD PTR 64[esp],2441084928
+ mov DWORD PTR 68[esp],2376073216
+ mov DWORD PTR 72[esp],2847932416
+ mov DWORD PTR 76[esp],3051356160
+ALIGN 16
+$L002x86_outer_loop:
+ xor ebx,DWORD PTR 12[edi]
+ xor ecx,DWORD PTR 8[edi]
+ xor edx,DWORD PTR 4[edi]
+ xor ebp,DWORD PTR [edi]
+ mov DWORD PTR 12[esp],ebx
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 4[esp],edx
+ mov DWORD PTR [esp],ebp
+ shr ebx,20
+ and ebx,240
+ mov ebp,DWORD PTR 4[ebx*1+esi]
+ mov edx,DWORD PTR [ebx*1+esi]
+ mov ecx,DWORD PTR 12[ebx*1+esi]
+ mov ebx,DWORD PTR 8[ebx*1+esi]
+ xor eax,eax
+ mov edi,15
+ jmp $L003x86_loop
+ALIGN 16
+$L003x86_loop:
+ mov al,bl
+ shrd ebx,ecx,4
+ and al,15
+ shrd ecx,edx,4
+ shrd edx,ebp,4
+ shr ebp,4
+ xor ebp,DWORD PTR 16[eax*4+esp]
+ mov al,BYTE PTR [edi*1+esp]
+ and al,240
+ xor ebx,DWORD PTR 8[eax*1+esi]
+ xor ecx,DWORD PTR 12[eax*1+esi]
+ xor edx,DWORD PTR [eax*1+esi]
+ xor ebp,DWORD PTR 4[eax*1+esi]
+ dec edi
+ js $L004x86_break
+ mov al,bl
+ shrd ebx,ecx,4
+ and al,15
+ shrd ecx,edx,4
+ shrd edx,ebp,4
+ shr ebp,4
+ xor ebp,DWORD PTR 16[eax*4+esp]
+ mov al,BYTE PTR [edi*1+esp]
+ shl al,4
+ xor ebx,DWORD PTR 8[eax*1+esi]
+ xor ecx,DWORD PTR 12[eax*1+esi]
+ xor edx,DWORD PTR [eax*1+esi]
+ xor ebp,DWORD PTR 4[eax*1+esi]
+ jmp $L003x86_loop
+ALIGN 16
+$L004x86_break:
+ bswap ebx
+ bswap ecx
+ bswap edx
+ bswap ebp
+ mov edi,DWORD PTR 112[esp]
+ lea edi,DWORD PTR 16[edi]
+ cmp edi,DWORD PTR 116[esp]
+ mov DWORD PTR 112[esp],edi
+ jb $L002x86_outer_loop
+ mov edi,DWORD PTR 104[esp]
+ mov DWORD PTR 12[edi],ebx
+ mov DWORD PTR 8[edi],ecx
+ mov DWORD PTR 4[edi],edx
+ mov DWORD PTR [edi],ebp
+ add esp,84
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_gcm_ghash_4bit_x86 ENDP
+ALIGN 16
+_gcm_gmult_4bit_mmx PROC PUBLIC
+$L_gcm_gmult_4bit_mmx_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ call $L005pic_point
+$L005pic_point:
+ pop eax
+ lea eax,DWORD PTR ($Lrem_4bit-$L005pic_point)[eax]
+ movzx ebx,BYTE PTR 15[edi]
+ xor ecx,ecx
+ mov edx,ebx
+ mov cl,dl
+ mov ebp,14
+ shl cl,4
+ and edx,240
+ movq mm0,QWORD PTR 8[ecx*1+esi]
+ movq mm1,QWORD PTR [ecx*1+esi]
+ movd ebx,mm0
+ jmp $L006mmx_loop
+ALIGN 16
+$L006mmx_loop:
+ psrlq mm0,4
+ and ebx,15
+ movq mm2,mm1
+ psrlq mm1,4
+ pxor mm0,QWORD PTR 8[edx*1+esi]
+ mov cl,BYTE PTR [ebp*1+edi]
+ psllq mm2,60
+ pxor mm1,QWORD PTR [ebx*8+eax]
+ dec ebp
+ movd ebx,mm0
+ pxor mm1,QWORD PTR [edx*1+esi]
+ mov edx,ecx
+ pxor mm0,mm2
+ js $L007mmx_break
+ shl cl,4
+ and ebx,15
+ psrlq mm0,4
+ and edx,240
+ movq mm2,mm1
+ psrlq mm1,4
+ pxor mm0,QWORD PTR 8[ecx*1+esi]
+ psllq mm2,60
+ pxor mm1,QWORD PTR [ebx*8+eax]
+ movd ebx,mm0
+ pxor mm1,QWORD PTR [ecx*1+esi]
+ pxor mm0,mm2
+ jmp $L006mmx_loop
+ALIGN 16
+$L007mmx_break:
+ shl cl,4
+ and ebx,15
+ psrlq mm0,4
+ and edx,240
+ movq mm2,mm1
+ psrlq mm1,4
+ pxor mm0,QWORD PTR 8[ecx*1+esi]
+ psllq mm2,60
+ pxor mm1,QWORD PTR [ebx*8+eax]
+ movd ebx,mm0
+ pxor mm1,QWORD PTR [ecx*1+esi]
+ pxor mm0,mm2
+ psrlq mm0,4
+ and ebx,15
+ movq mm2,mm1
+ psrlq mm1,4
+ pxor mm0,QWORD PTR 8[edx*1+esi]
+ psllq mm2,60
+ pxor mm1,QWORD PTR [ebx*8+eax]
+ movd ebx,mm0
+ pxor mm1,QWORD PTR [edx*1+esi]
+ pxor mm0,mm2
+ psrlq mm0,32
+ movd edx,mm1
+ psrlq mm1,32
+ movd ecx,mm0
+ movd ebp,mm1
+ bswap ebx
+ bswap edx
+ bswap ecx
+ bswap ebp
+ emms
+ mov DWORD PTR 12[edi],ebx
+ mov DWORD PTR 4[edi],edx
+ mov DWORD PTR 8[edi],ecx
+ mov DWORD PTR [edi],ebp
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_gcm_gmult_4bit_mmx ENDP
+ALIGN 16
+_gcm_ghash_4bit_mmx PROC PUBLIC
+$L_gcm_ghash_4bit_mmx_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov eax,DWORD PTR 20[esp]
+ mov ebx,DWORD PTR 24[esp]
+ mov ecx,DWORD PTR 28[esp]
+ mov edx,DWORD PTR 32[esp]
+ mov ebp,esp
+ call $L008pic_point
+$L008pic_point:
+ pop esi
+ lea esi,DWORD PTR ($Lrem_8bit-$L008pic_point)[esi]
+ sub esp,544
+ and esp,-64
+ sub esp,16
+ add edx,ecx
+ mov DWORD PTR 544[esp],eax
+ mov DWORD PTR 552[esp],edx
+ mov DWORD PTR 556[esp],ebp
+ add ebx,128
+ lea edi,DWORD PTR 144[esp]
+ lea ebp,DWORD PTR 400[esp]
+ mov edx,DWORD PTR [ebx-120]
+ movq mm0,QWORD PTR [ebx-120]
+ movq mm3,QWORD PTR [ebx-128]
+ shl edx,4
+ mov BYTE PTR [esp],dl
+ mov edx,DWORD PTR [ebx-104]
+ movq mm2,QWORD PTR [ebx-104]
+ movq mm5,QWORD PTR [ebx-112]
+ movq QWORD PTR [edi-128],mm0
+ psrlq mm0,4
+ movq QWORD PTR [edi],mm3
+ movq mm7,mm3
+ psrlq mm3,4
+ shl edx,4
+ mov BYTE PTR 1[esp],dl
+ mov edx,DWORD PTR [ebx-88]
+ movq mm1,QWORD PTR [ebx-88]
+ psllq mm7,60
+ movq mm4,QWORD PTR [ebx-96]
+ por mm0,mm7
+ movq QWORD PTR [edi-120],mm2
+ psrlq mm2,4
+ movq QWORD PTR 8[edi],mm5
+ movq mm6,mm5
+ movq QWORD PTR [ebp-128],mm0
+ psrlq mm5,4
+ movq QWORD PTR [ebp],mm3
+ shl edx,4
+ mov BYTE PTR 2[esp],dl
+ mov edx,DWORD PTR [ebx-72]
+ movq mm0,QWORD PTR [ebx-72]
+ psllq mm6,60
+ movq mm3,QWORD PTR [ebx-80]
+ por mm2,mm6
+ movq QWORD PTR [edi-112],mm1
+ psrlq mm1,4
+ movq QWORD PTR 16[edi],mm4
+ movq mm7,mm4
+ movq QWORD PTR [ebp-120],mm2
+ psrlq mm4,4
+ movq QWORD PTR 8[ebp],mm5
+ shl edx,4
+ mov BYTE PTR 3[esp],dl
+ mov edx,DWORD PTR [ebx-56]
+ movq mm2,QWORD PTR [ebx-56]
+ psllq mm7,60
+ movq mm5,QWORD PTR [ebx-64]
+ por mm1,mm7
+ movq QWORD PTR [edi-104],mm0
+ psrlq mm0,4
+ movq QWORD PTR 24[edi],mm3
+ movq mm6,mm3
+ movq QWORD PTR [ebp-112],mm1
+ psrlq mm3,4
+ movq QWORD PTR 16[ebp],mm4
+ shl edx,4
+ mov BYTE PTR 4[esp],dl
+ mov edx,DWORD PTR [ebx-40]
+ movq mm1,QWORD PTR [ebx-40]
+ psllq mm6,60
+ movq mm4,QWORD PTR [ebx-48]
+ por mm0,mm6
+ movq QWORD PTR [edi-96],mm2
+ psrlq mm2,4
+ movq QWORD PTR 32[edi],mm5
+ movq mm7,mm5
+ movq QWORD PTR [ebp-104],mm0
+ psrlq mm5,4
+ movq QWORD PTR 24[ebp],mm3
+ shl edx,4
+ mov BYTE PTR 5[esp],dl
+ mov edx,DWORD PTR [ebx-24]
+ movq mm0,QWORD PTR [ebx-24]
+ psllq mm7,60
+ movq mm3,QWORD PTR [ebx-32]
+ por mm2,mm7
+ movq QWORD PTR [edi-88],mm1
+ psrlq mm1,4
+ movq QWORD PTR 40[edi],mm4
+ movq mm6,mm4
+ movq QWORD PTR [ebp-96],mm2
+ psrlq mm4,4
+ movq QWORD PTR 32[ebp],mm5
+ shl edx,4
+ mov BYTE PTR 6[esp],dl
+ mov edx,DWORD PTR [ebx-8]
+ movq mm2,QWORD PTR [ebx-8]
+ psllq mm6,60
+ movq mm5,QWORD PTR [ebx-16]
+ por mm1,mm6
+ movq QWORD PTR [edi-80],mm0
+ psrlq mm0,4
+ movq QWORD PTR 48[edi],mm3
+ movq mm7,mm3
+ movq QWORD PTR [ebp-88],mm1
+ psrlq mm3,4
+ movq QWORD PTR 40[ebp],mm4
+ shl edx,4
+ mov BYTE PTR 7[esp],dl
+ mov edx,DWORD PTR 8[ebx]
+ movq mm1,QWORD PTR 8[ebx]
+ psllq mm7,60
+ movq mm4,QWORD PTR [ebx]
+ por mm0,mm7
+ movq QWORD PTR [edi-72],mm2
+ psrlq mm2,4
+ movq QWORD PTR 56[edi],mm5
+ movq mm6,mm5
+ movq QWORD PTR [ebp-80],mm0
+ psrlq mm5,4
+ movq QWORD PTR 48[ebp],mm3
+ shl edx,4
+ mov BYTE PTR 8[esp],dl
+ mov edx,DWORD PTR 24[ebx]
+ movq mm0,QWORD PTR 24[ebx]
+ psllq mm6,60
+ movq mm3,QWORD PTR 16[ebx]
+ por mm2,mm6
+ movq QWORD PTR [edi-64],mm1
+ psrlq mm1,4
+ movq QWORD PTR 64[edi],mm4
+ movq mm7,mm4
+ movq QWORD PTR [ebp-72],mm2
+ psrlq mm4,4
+ movq QWORD PTR 56[ebp],mm5
+ shl edx,4
+ mov BYTE PTR 9[esp],dl
+ mov edx,DWORD PTR 40[ebx]
+ movq mm2,QWORD PTR 40[ebx]
+ psllq mm7,60
+ movq mm5,QWORD PTR 32[ebx]
+ por mm1,mm7
+ movq QWORD PTR [edi-56],mm0
+ psrlq mm0,4
+ movq QWORD PTR 72[edi],mm3
+ movq mm6,mm3
+ movq QWORD PTR [ebp-64],mm1
+ psrlq mm3,4
+ movq QWORD PTR 64[ebp],mm4
+ shl edx,4
+ mov BYTE PTR 10[esp],dl
+ mov edx,DWORD PTR 56[ebx]
+ movq mm1,QWORD PTR 56[ebx]
+ psllq mm6,60
+ movq mm4,QWORD PTR 48[ebx]
+ por mm0,mm6
+ movq QWORD PTR [edi-48],mm2
+ psrlq mm2,4
+ movq QWORD PTR 80[edi],mm5
+ movq mm7,mm5
+ movq QWORD PTR [ebp-56],mm0
+ psrlq mm5,4
+ movq QWORD PTR 72[ebp],mm3
+ shl edx,4
+ mov BYTE PTR 11[esp],dl
+ mov edx,DWORD PTR 72[ebx]
+ movq mm0,QWORD PTR 72[ebx]
+ psllq mm7,60
+ movq mm3,QWORD PTR 64[ebx]
+ por mm2,mm7
+ movq QWORD PTR [edi-40],mm1
+ psrlq mm1,4
+ movq QWORD PTR 88[edi],mm4
+ movq mm6,mm4
+ movq QWORD PTR [ebp-48],mm2
+ psrlq mm4,4
+ movq QWORD PTR 80[ebp],mm5
+ shl edx,4
+ mov BYTE PTR 12[esp],dl
+ mov edx,DWORD PTR 88[ebx]
+ movq mm2,QWORD PTR 88[ebx]
+ psllq mm6,60
+ movq mm5,QWORD PTR 80[ebx]
+ por mm1,mm6
+ movq QWORD PTR [edi-32],mm0
+ psrlq mm0,4
+ movq QWORD PTR 96[edi],mm3
+ movq mm7,mm3
+ movq QWORD PTR [ebp-40],mm1
+ psrlq mm3,4
+ movq QWORD PTR 88[ebp],mm4
+ shl edx,4
+ mov BYTE PTR 13[esp],dl
+ mov edx,DWORD PTR 104[ebx]
+ movq mm1,QWORD PTR 104[ebx]
+ psllq mm7,60
+ movq mm4,QWORD PTR 96[ebx]
+ por mm0,mm7
+ movq QWORD PTR [edi-24],mm2
+ psrlq mm2,4
+ movq QWORD PTR 104[edi],mm5
+ movq mm6,mm5
+ movq QWORD PTR [ebp-32],mm0
+ psrlq mm5,4
+ movq QWORD PTR 96[ebp],mm3
+ shl edx,4
+ mov BYTE PTR 14[esp],dl
+ mov edx,DWORD PTR 120[ebx]
+ movq mm0,QWORD PTR 120[ebx]
+ psllq mm6,60
+ movq mm3,QWORD PTR 112[ebx]
+ por mm2,mm6
+ movq QWORD PTR [edi-16],mm1
+ psrlq mm1,4
+ movq QWORD PTR 112[edi],mm4
+ movq mm7,mm4
+ movq QWORD PTR [ebp-24],mm2
+ psrlq mm4,4
+ movq QWORD PTR 104[ebp],mm5
+ shl edx,4
+ mov BYTE PTR 15[esp],dl
+ psllq mm7,60
+ por mm1,mm7
+ movq QWORD PTR [edi-8],mm0
+ psrlq mm0,4
+ movq QWORD PTR 120[edi],mm3
+ movq mm6,mm3
+ movq QWORD PTR [ebp-16],mm1
+ psrlq mm3,4
+ movq QWORD PTR 112[ebp],mm4
+ psllq mm6,60
+ por mm0,mm6
+ movq QWORD PTR [ebp-8],mm0
+ movq QWORD PTR 120[ebp],mm3
+ movq mm6,QWORD PTR [eax]
+ mov ebx,DWORD PTR 8[eax]
+ mov edx,DWORD PTR 12[eax]
+ALIGN 16
+$L009outer:
+ xor edx,DWORD PTR 12[ecx]
+ xor ebx,DWORD PTR 8[ecx]
+ pxor mm6,QWORD PTR [ecx]
+ lea ecx,DWORD PTR 16[ecx]
+ mov DWORD PTR 536[esp],ebx
+ movq QWORD PTR 528[esp],mm6
+ mov DWORD PTR 548[esp],ecx
+ xor eax,eax
+ rol edx,8
+ mov al,dl
+ mov ebp,eax
+ and al,15
+ shr ebp,4
+ pxor mm0,mm0
+ rol edx,8
+ pxor mm1,mm1
+ pxor mm2,mm2
+ movq mm7,QWORD PTR 16[eax*8+esp]
+ movq mm6,QWORD PTR 144[eax*8+esp]
+ mov al,dl
+ movd ebx,mm7
+ psrlq mm7,8
+ movq mm3,mm6
+ mov edi,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[ebp*8+esp]
+ and al,15
+ psllq mm3,56
+ shr edi,4
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[ebp*8+esp]
+ xor bl,BYTE PTR [ebp*1+esp]
+ mov al,dl
+ movd ecx,mm7
+ movzx ebx,bl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov ebp,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[edi*8+esp]
+ and al,15
+ psllq mm3,56
+ shr ebp,4
+ pinsrw mm2,WORD PTR [ebx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[edi*8+esp]
+ xor cl,BYTE PTR [edi*1+esp]
+ mov al,dl
+ mov edx,DWORD PTR 536[esp]
+ movd ebx,mm7
+ movzx ecx,cl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov edi,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[ebp*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm2
+ shr edi,4
+ pinsrw mm1,WORD PTR [ecx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[ebp*8+esp]
+ xor bl,BYTE PTR [ebp*1+esp]
+ mov al,dl
+ movd ecx,mm7
+ movzx ebx,bl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov ebp,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[edi*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm1
+ shr ebp,4
+ pinsrw mm0,WORD PTR [ebx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[edi*8+esp]
+ xor cl,BYTE PTR [edi*1+esp]
+ mov al,dl
+ movd ebx,mm7
+ movzx ecx,cl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov edi,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[ebp*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm0
+ shr edi,4
+ pinsrw mm2,WORD PTR [ecx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[ebp*8+esp]
+ xor bl,BYTE PTR [ebp*1+esp]
+ mov al,dl
+ movd ecx,mm7
+ movzx ebx,bl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov ebp,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[edi*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm2
+ shr ebp,4
+ pinsrw mm1,WORD PTR [ebx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[edi*8+esp]
+ xor cl,BYTE PTR [edi*1+esp]
+ mov al,dl
+ mov edx,DWORD PTR 532[esp]
+ movd ebx,mm7
+ movzx ecx,cl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov edi,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[ebp*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm1
+ shr edi,4
+ pinsrw mm0,WORD PTR [ecx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[ebp*8+esp]
+ xor bl,BYTE PTR [ebp*1+esp]
+ mov al,dl
+ movd ecx,mm7
+ movzx ebx,bl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov ebp,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[edi*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm0
+ shr ebp,4
+ pinsrw mm2,WORD PTR [ebx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[edi*8+esp]
+ xor cl,BYTE PTR [edi*1+esp]
+ mov al,dl
+ movd ebx,mm7
+ movzx ecx,cl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov edi,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[ebp*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm2
+ shr edi,4
+ pinsrw mm1,WORD PTR [ecx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[ebp*8+esp]
+ xor bl,BYTE PTR [ebp*1+esp]
+ mov al,dl
+ movd ecx,mm7
+ movzx ebx,bl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov ebp,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[edi*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm1
+ shr ebp,4
+ pinsrw mm0,WORD PTR [ebx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[edi*8+esp]
+ xor cl,BYTE PTR [edi*1+esp]
+ mov al,dl
+ mov edx,DWORD PTR 528[esp]
+ movd ebx,mm7
+ movzx ecx,cl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov edi,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[ebp*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm0
+ shr edi,4
+ pinsrw mm2,WORD PTR [ecx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[ebp*8+esp]
+ xor bl,BYTE PTR [ebp*1+esp]
+ mov al,dl
+ movd ecx,mm7
+ movzx ebx,bl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov ebp,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[edi*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm2
+ shr ebp,4
+ pinsrw mm1,WORD PTR [ebx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[edi*8+esp]
+ xor cl,BYTE PTR [edi*1+esp]
+ mov al,dl
+ movd ebx,mm7
+ movzx ecx,cl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov edi,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[ebp*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm1
+ shr edi,4
+ pinsrw mm0,WORD PTR [ecx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[ebp*8+esp]
+ xor bl,BYTE PTR [ebp*1+esp]
+ mov al,dl
+ movd ecx,mm7
+ movzx ebx,bl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov ebp,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[edi*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm0
+ shr ebp,4
+ pinsrw mm2,WORD PTR [ebx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ rol edx,8
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[edi*8+esp]
+ xor cl,BYTE PTR [edi*1+esp]
+ mov al,dl
+ mov edx,DWORD PTR 524[esp]
+ movd ebx,mm7
+ movzx ecx,cl
+ psrlq mm7,8
+ movq mm3,mm6
+ mov edi,eax
+ psrlq mm6,8
+ pxor mm7,QWORD PTR 272[ebp*8+esp]
+ and al,15
+ psllq mm3,56
+ pxor mm6,mm2
+ shr edi,4
+ pinsrw mm1,WORD PTR [ecx*2+esi],2
+ pxor mm7,QWORD PTR 16[eax*8+esp]
+ pxor mm6,QWORD PTR 144[eax*8+esp]
+ xor bl,BYTE PTR [ebp*1+esp]
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 400[ebp*8+esp]
+ movzx ebx,bl
+ pxor mm2,mm2
+ psllq mm1,4
+ movd ecx,mm7
+ psrlq mm7,4
+ movq mm3,mm6
+ psrlq mm6,4
+ shl ecx,4
+ pxor mm7,QWORD PTR 16[edi*8+esp]
+ psllq mm3,60
+ movzx ecx,cl
+ pxor mm7,mm3
+ pxor mm6,QWORD PTR 144[edi*8+esp]
+ pinsrw mm0,WORD PTR [ebx*2+esi],2
+ pxor mm6,mm1
+ movd edx,mm7
+ pinsrw mm2,WORD PTR [ecx*2+esi],3
+ psllq mm0,12
+ pxor mm6,mm0
+ psrlq mm7,32
+ pxor mm6,mm2
+ mov ecx,DWORD PTR 548[esp]
+ movd ebx,mm7
+ movq mm3,mm6
+ psllw mm6,8
+ psrlw mm3,8
+ por mm6,mm3
+ bswap edx
+ pshufw mm6,mm6,27
+ bswap ebx
+ cmp ecx,DWORD PTR 552[esp]
+ jne $L009outer
+ mov eax,DWORD PTR 544[esp]
+ mov DWORD PTR 12[eax],edx
+ mov DWORD PTR 8[eax],ebx
+ movq QWORD PTR [eax],mm6
+ mov esp,DWORD PTR 556[esp]
+ emms
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_gcm_ghash_4bit_mmx ENDP
+ALIGN 16
+_gcm_init_clmul PROC PUBLIC
+$L_gcm_init_clmul_begin::
+ mov edx,DWORD PTR 4[esp]
+ mov eax,DWORD PTR 8[esp]
+ call $L010pic
+$L010pic:
+ pop ecx
+ lea ecx,DWORD PTR ($Lbswap-$L010pic)[ecx]
+ movdqu xmm2,XMMWORD PTR [eax]
+ pshufd xmm2,xmm2,78
+ pshufd xmm4,xmm2,255
+ movdqa xmm3,xmm2
+ psllq xmm2,1
+ pxor xmm5,xmm5
+ psrlq xmm3,63
+ pcmpgtd xmm5,xmm4
+ pslldq xmm3,8
+ por xmm2,xmm3
+ pand xmm5,XMMWORD PTR 16[ecx]
+ pxor xmm2,xmm5
+ movdqa xmm0,xmm2
+ movdqa xmm1,xmm0
+ pshufd xmm3,xmm0,78
+ pshufd xmm4,xmm2,78
+ pxor xmm3,xmm0
+ pxor xmm4,xmm2
+DB 102,15,58,68,194,0
+DB 102,15,58,68,202,17
+DB 102,15,58,68,220,0
+ xorps xmm3,xmm0
+ xorps xmm3,xmm1
+ movdqa xmm4,xmm3
+ psrldq xmm3,8
+ pslldq xmm4,8
+ pxor xmm1,xmm3
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+ pshufd xmm3,xmm2,78
+ pshufd xmm4,xmm0,78
+ pxor xmm3,xmm2
+ movdqu XMMWORD PTR [edx],xmm2
+ pxor xmm4,xmm0
+ movdqu XMMWORD PTR 16[edx],xmm0
+DB 102,15,58,15,227,8
+ movdqu XMMWORD PTR 32[edx],xmm4
+ ret
+_gcm_init_clmul ENDP
+ALIGN 16
+_gcm_gmult_clmul PROC PUBLIC
+$L_gcm_gmult_clmul_begin::
+ mov eax,DWORD PTR 4[esp]
+ mov edx,DWORD PTR 8[esp]
+ call $L011pic
+$L011pic:
+ pop ecx
+ lea ecx,DWORD PTR ($Lbswap-$L011pic)[ecx]
+ movdqu xmm0,XMMWORD PTR [eax]
+ movdqa xmm5,XMMWORD PTR [ecx]
+ movups xmm2,XMMWORD PTR [edx]
+DB 102,15,56,0,197
+ movups xmm4,XMMWORD PTR 32[edx]
+ movdqa xmm1,xmm0
+ pshufd xmm3,xmm0,78
+ pxor xmm3,xmm0
+DB 102,15,58,68,194,0
+DB 102,15,58,68,202,17
+DB 102,15,58,68,220,0
+ xorps xmm3,xmm0
+ xorps xmm3,xmm1
+ movdqa xmm4,xmm3
+ psrldq xmm3,8
+ pslldq xmm4,8
+ pxor xmm1,xmm3
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+DB 102,15,56,0,197
+ movdqu XMMWORD PTR [eax],xmm0
+ ret
+_gcm_gmult_clmul ENDP
+ALIGN 16
+_gcm_ghash_clmul PROC PUBLIC
+$L_gcm_ghash_clmul_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov eax,DWORD PTR 20[esp]
+ mov edx,DWORD PTR 24[esp]
+ mov esi,DWORD PTR 28[esp]
+ mov ebx,DWORD PTR 32[esp]
+ call $L012pic
+$L012pic:
+ pop ecx
+ lea ecx,DWORD PTR ($Lbswap-$L012pic)[ecx]
+ movdqu xmm0,XMMWORD PTR [eax]
+ movdqa xmm5,XMMWORD PTR [ecx]
+ movdqu xmm2,XMMWORD PTR [edx]
+DB 102,15,56,0,197
+ sub ebx,16
+ jz $L013odd_tail
+ movdqu xmm3,XMMWORD PTR [esi]
+ movdqu xmm6,XMMWORD PTR 16[esi]
+DB 102,15,56,0,221
+DB 102,15,56,0,245
+ movdqu xmm5,XMMWORD PTR 32[edx]
+ pxor xmm0,xmm3
+ pshufd xmm3,xmm6,78
+ movdqa xmm7,xmm6
+ pxor xmm3,xmm6
+ lea esi,DWORD PTR 32[esi]
+DB 102,15,58,68,242,0
+DB 102,15,58,68,250,17
+DB 102,15,58,68,221,0
+ movups xmm2,XMMWORD PTR 16[edx]
+ nop
+ sub ebx,32
+ jbe $L014even_tail
+ jmp $L015mod_loop
+ALIGN 32
+$L015mod_loop:
+ pshufd xmm4,xmm0,78
+ movdqa xmm1,xmm0
+ pxor xmm4,xmm0
+ nop
+DB 102,15,58,68,194,0
+DB 102,15,58,68,202,17
+DB 102,15,58,68,229,16
+ movups xmm2,XMMWORD PTR [edx]
+ xorps xmm0,xmm6
+ movdqa xmm5,XMMWORD PTR [ecx]
+ xorps xmm1,xmm7
+ movdqu xmm7,XMMWORD PTR [esi]
+ pxor xmm3,xmm0
+ movdqu xmm6,XMMWORD PTR 16[esi]
+ pxor xmm3,xmm1
+DB 102,15,56,0,253
+ pxor xmm4,xmm3
+ movdqa xmm3,xmm4
+ psrldq xmm4,8
+ pslldq xmm3,8
+ pxor xmm1,xmm4
+ pxor xmm0,xmm3
+DB 102,15,56,0,245
+ pxor xmm1,xmm7
+ movdqa xmm7,xmm6
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+DB 102,15,58,68,242,0
+ movups xmm5,XMMWORD PTR 32[edx]
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+ pshufd xmm3,xmm7,78
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm3,xmm7
+ pxor xmm1,xmm4
+DB 102,15,58,68,250,17
+ movups xmm2,XMMWORD PTR 16[edx]
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+DB 102,15,58,68,221,0
+ lea esi,DWORD PTR 32[esi]
+ sub ebx,32
+ ja $L015mod_loop
+$L014even_tail:
+ pshufd xmm4,xmm0,78
+ movdqa xmm1,xmm0
+ pxor xmm4,xmm0
+DB 102,15,58,68,194,0
+DB 102,15,58,68,202,17
+DB 102,15,58,68,229,16
+ movdqa xmm5,XMMWORD PTR [ecx]
+ xorps xmm0,xmm6
+ xorps xmm1,xmm7
+ pxor xmm3,xmm0
+ pxor xmm3,xmm1
+ pxor xmm4,xmm3
+ movdqa xmm3,xmm4
+ psrldq xmm4,8
+ pslldq xmm3,8
+ pxor xmm1,xmm4
+ pxor xmm0,xmm3
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+ test ebx,ebx
+ jnz $L016done
+ movups xmm2,XMMWORD PTR [edx]
+$L013odd_tail:
+ movdqu xmm3,XMMWORD PTR [esi]
+DB 102,15,56,0,221
+ pxor xmm0,xmm3
+ movdqa xmm1,xmm0
+ pshufd xmm3,xmm0,78
+ pshufd xmm4,xmm2,78
+ pxor xmm3,xmm0
+ pxor xmm4,xmm2
+DB 102,15,58,68,194,0
+DB 102,15,58,68,202,17
+DB 102,15,58,68,220,0
+ xorps xmm3,xmm0
+ xorps xmm3,xmm1
+ movdqa xmm4,xmm3
+ psrldq xmm3,8
+ pslldq xmm4,8
+ pxor xmm1,xmm3
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+$L016done:
+DB 102,15,56,0,197
+ movdqu XMMWORD PTR [eax],xmm0
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_gcm_ghash_clmul ENDP
+ALIGN 64
+$Lbswap::
+DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194
+ALIGN 64
+$Lrem_8bit::
+DW 0,450,900,582,1800,1738,1164,1358
+DW 3600,4050,3476,3158,2328,2266,2716,2910
+DW 7200,7650,8100,7782,6952,6890,6316,6510
+DW 4656,5106,4532,4214,5432,5370,5820,6014
+DW 14400,14722,15300,14854,16200,16010,15564,15630
+DW 13904,14226,13780,13334,12632,12442,13020,13086
+DW 9312,9634,10212,9766,9064,8874,8428,8494
+DW 10864,11186,10740,10294,11640,11450,12028,12094
+DW 28800,28994,29444,29382,30600,30282,29708,30158
+DW 32400,32594,32020,31958,31128,30810,31260,31710
+DW 27808,28002,28452,28390,27560,27242,26668,27118
+DW 25264,25458,24884,24822,26040,25722,26172,26622
+DW 18624,18690,19268,19078,20424,19978,19532,19854
+DW 18128,18194,17748,17558,16856,16410,16988,17310
+DW 21728,21794,22372,22182,21480,21034,20588,20910
+DW 23280,23346,22900,22710,24056,23610,24188,24510
+DW 57600,57538,57988,58182,58888,59338,58764,58446
+DW 61200,61138,60564,60758,59416,59866,60316,59998
+DW 64800,64738,65188,65382,64040,64490,63916,63598
+DW 62256,62194,61620,61814,62520,62970,63420,63102
+DW 55616,55426,56004,56070,56904,57226,56780,56334
+DW 55120,54930,54484,54550,53336,53658,54236,53790
+DW 50528,50338,50916,50982,49768,50090,49644,49198
+DW 52080,51890,51444,51510,52344,52666,53244,52798
+DW 37248,36930,37380,37830,38536,38730,38156,38094
+DW 40848,40530,39956,40406,39064,39258,39708,39646
+DW 36256,35938,36388,36838,35496,35690,35116,35054
+DW 33712,33394,32820,33270,33976,34170,34620,34558
+DW 43456,43010,43588,43910,44744,44810,44364,44174
+DW 42960,42514,42068,42390,41176,41242,41820,41630
+DW 46560,46114,46692,47014,45800,45866,45420,45230
+DW 48112,47666,47220,47542,48376,48442,49020,48830
+ALIGN 64
+$Lrem_4bit::
+DD 0,0,0,471859200
+DD 0,943718400,0,610271232
+DD 0,1887436800,0,1822425088
+DD 0,1220542464,0,1423966208
+DD 0,3774873600,0,4246732800
+DD 0,3644850176,0,3311403008
+DD 0,2441084928,0,2376073216
+DD 0,2847932416,0,3051356160
+DB 71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67
+DB 82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112
+DB 112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62
+DB 0
+.text$ ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86_64.masm
index 4dc3a29fa1..5115b801f0 100644
--- a/contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/modes/ghash-x86_64.masm
@@ -1,2073 +1,2073 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC gcm_gmult_4bit
-
-ALIGN 16
-gcm_gmult_4bit PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_gcm_gmult_4bit::
- mov rdi,rcx
- mov rsi,rdx
-
-
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,280
-
-$L$gmult_prologue::
-
- movzx r8,BYTE PTR[15+rdi]
- lea r11,QWORD PTR[$L$rem_4bit]
- xor rax,rax
- xor rbx,rbx
- mov al,r8b
- mov bl,r8b
- shl al,4
- mov rcx,14
- mov r8,QWORD PTR[8+rax*1+rsi]
- mov r9,QWORD PTR[rax*1+rsi]
- and bl,0f0h
- mov rdx,r8
- jmp $L$oop1
-
-ALIGN 16
-$L$oop1::
- shr r8,4
- and rdx,0fh
- mov r10,r9
- mov al,BYTE PTR[rcx*1+rdi]
- shr r9,4
- xor r8,QWORD PTR[8+rbx*1+rsi]
- shl r10,60
- xor r9,QWORD PTR[rbx*1+rsi]
- mov bl,al
- xor r9,QWORD PTR[rdx*8+r11]
- mov rdx,r8
- shl al,4
- xor r8,r10
- dec rcx
- js $L$break1
-
- shr r8,4
- and rdx,0fh
- mov r10,r9
- shr r9,4
- xor r8,QWORD PTR[8+rax*1+rsi]
- shl r10,60
- xor r9,QWORD PTR[rax*1+rsi]
- and bl,0f0h
- xor r9,QWORD PTR[rdx*8+r11]
- mov rdx,r8
- xor r8,r10
- jmp $L$oop1
-
-ALIGN 16
-$L$break1::
- shr r8,4
- and rdx,0fh
- mov r10,r9
- shr r9,4
- xor r8,QWORD PTR[8+rax*1+rsi]
- shl r10,60
- xor r9,QWORD PTR[rax*1+rsi]
- and bl,0f0h
- xor r9,QWORD PTR[rdx*8+r11]
- mov rdx,r8
- xor r8,r10
-
- shr r8,4
- and rdx,0fh
- mov r10,r9
- shr r9,4
- xor r8,QWORD PTR[8+rbx*1+rsi]
- shl r10,60
- xor r9,QWORD PTR[rbx*1+rsi]
- xor r8,r10
- xor r9,QWORD PTR[rdx*8+r11]
-
- bswap r8
- bswap r9
- mov QWORD PTR[8+rdi],r8
- mov QWORD PTR[rdi],r9
-
- lea rsi,QWORD PTR[((280+48))+rsp]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$gmult_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_gcm_gmult_4bit::
-gcm_gmult_4bit ENDP
-PUBLIC gcm_ghash_4bit
-
-ALIGN 16
-gcm_ghash_4bit PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_gcm_ghash_4bit::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,280
-
-$L$ghash_prologue::
- mov r14,rdx
- mov r15,rcx
- sub rsi,-128
- lea rbp,QWORD PTR[((16+128))+rsp]
- xor edx,edx
- mov r8,QWORD PTR[((0+0-128))+rsi]
- mov rax,QWORD PTR[((0+8-128))+rsi]
- mov dl,al
- shr rax,4
- mov r10,r8
- shr r8,4
- mov r9,QWORD PTR[((16+0-128))+rsi]
- shl dl,4
- mov rbx,QWORD PTR[((16+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[rsp],dl
- or rax,r10
- mov dl,bl
- shr rbx,4
- mov r10,r9
- shr r9,4
- mov QWORD PTR[rbp],r8
- mov r8,QWORD PTR[((32+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((0-128))+rbp],rax
- mov rax,QWORD PTR[((32+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[1+rsp],dl
- or rbx,r10
- mov dl,al
- shr rax,4
- mov r10,r8
- shr r8,4
- mov QWORD PTR[8+rbp],r9
- mov r9,QWORD PTR[((48+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((8-128))+rbp],rbx
- mov rbx,QWORD PTR[((48+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[2+rsp],dl
- or rax,r10
- mov dl,bl
- shr rbx,4
- mov r10,r9
- shr r9,4
- mov QWORD PTR[16+rbp],r8
- mov r8,QWORD PTR[((64+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((16-128))+rbp],rax
- mov rax,QWORD PTR[((64+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[3+rsp],dl
- or rbx,r10
- mov dl,al
- shr rax,4
- mov r10,r8
- shr r8,4
- mov QWORD PTR[24+rbp],r9
- mov r9,QWORD PTR[((80+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((24-128))+rbp],rbx
- mov rbx,QWORD PTR[((80+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[4+rsp],dl
- or rax,r10
- mov dl,bl
- shr rbx,4
- mov r10,r9
- shr r9,4
- mov QWORD PTR[32+rbp],r8
- mov r8,QWORD PTR[((96+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((32-128))+rbp],rax
- mov rax,QWORD PTR[((96+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[5+rsp],dl
- or rbx,r10
- mov dl,al
- shr rax,4
- mov r10,r8
- shr r8,4
- mov QWORD PTR[40+rbp],r9
- mov r9,QWORD PTR[((112+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((40-128))+rbp],rbx
- mov rbx,QWORD PTR[((112+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[6+rsp],dl
- or rax,r10
- mov dl,bl
- shr rbx,4
- mov r10,r9
- shr r9,4
- mov QWORD PTR[48+rbp],r8
- mov r8,QWORD PTR[((128+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((48-128))+rbp],rax
- mov rax,QWORD PTR[((128+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[7+rsp],dl
- or rbx,r10
- mov dl,al
- shr rax,4
- mov r10,r8
- shr r8,4
- mov QWORD PTR[56+rbp],r9
- mov r9,QWORD PTR[((144+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((56-128))+rbp],rbx
- mov rbx,QWORD PTR[((144+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[8+rsp],dl
- or rax,r10
- mov dl,bl
- shr rbx,4
- mov r10,r9
- shr r9,4
- mov QWORD PTR[64+rbp],r8
- mov r8,QWORD PTR[((160+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((64-128))+rbp],rax
- mov rax,QWORD PTR[((160+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[9+rsp],dl
- or rbx,r10
- mov dl,al
- shr rax,4
- mov r10,r8
- shr r8,4
- mov QWORD PTR[72+rbp],r9
- mov r9,QWORD PTR[((176+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((72-128))+rbp],rbx
- mov rbx,QWORD PTR[((176+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[10+rsp],dl
- or rax,r10
- mov dl,bl
- shr rbx,4
- mov r10,r9
- shr r9,4
- mov QWORD PTR[80+rbp],r8
- mov r8,QWORD PTR[((192+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((80-128))+rbp],rax
- mov rax,QWORD PTR[((192+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[11+rsp],dl
- or rbx,r10
- mov dl,al
- shr rax,4
- mov r10,r8
- shr r8,4
- mov QWORD PTR[88+rbp],r9
- mov r9,QWORD PTR[((208+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((88-128))+rbp],rbx
- mov rbx,QWORD PTR[((208+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[12+rsp],dl
- or rax,r10
- mov dl,bl
- shr rbx,4
- mov r10,r9
- shr r9,4
- mov QWORD PTR[96+rbp],r8
- mov r8,QWORD PTR[((224+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((96-128))+rbp],rax
- mov rax,QWORD PTR[((224+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[13+rsp],dl
- or rbx,r10
- mov dl,al
- shr rax,4
- mov r10,r8
- shr r8,4
- mov QWORD PTR[104+rbp],r9
- mov r9,QWORD PTR[((240+0-128))+rsi]
- shl dl,4
- mov QWORD PTR[((104-128))+rbp],rbx
- mov rbx,QWORD PTR[((240+8-128))+rsi]
- shl r10,60
- mov BYTE PTR[14+rsp],dl
- or rax,r10
- mov dl,bl
- shr rbx,4
- mov r10,r9
- shr r9,4
- mov QWORD PTR[112+rbp],r8
- shl dl,4
- mov QWORD PTR[((112-128))+rbp],rax
- shl r10,60
- mov BYTE PTR[15+rsp],dl
- or rbx,r10
- mov QWORD PTR[120+rbp],r9
- mov QWORD PTR[((120-128))+rbp],rbx
- add rsi,-128
- mov r8,QWORD PTR[8+rdi]
- mov r9,QWORD PTR[rdi]
- add r15,r14
- lea r11,QWORD PTR[$L$rem_8bit]
- jmp $L$outer_loop
-ALIGN 16
-$L$outer_loop::
- xor r9,QWORD PTR[r14]
- mov rdx,QWORD PTR[8+r14]
- lea r14,QWORD PTR[16+r14]
- xor rdx,r8
- mov QWORD PTR[rdi],r9
- mov QWORD PTR[8+rdi],rdx
- shr rdx,32
- xor rax,rax
- rol edx,8
- mov al,dl
- movzx ebx,dl
- shl al,4
- shr ebx,4
- rol edx,8
- mov r8,QWORD PTR[8+rax*1+rsi]
- mov r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- movzx ecx,dl
- shl al,4
- movzx r12,BYTE PTR[rbx*1+rsp]
- shr ecx,4
- xor r12,r8
- mov r10,r9
- shr r8,8
- movzx r12,r12b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rbx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rbx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r12,WORD PTR[r12*2+r11]
- movzx ebx,dl
- shl al,4
- movzx r13,BYTE PTR[rcx*1+rsp]
- shr ebx,4
- shl r12,48
- xor r13,r8
- mov r10,r9
- xor r9,r12
- shr r8,8
- movzx r13,r13b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rcx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rcx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r13,WORD PTR[r13*2+r11]
- movzx ecx,dl
- shl al,4
- movzx r12,BYTE PTR[rbx*1+rsp]
- shr ecx,4
- shl r13,48
- xor r12,r8
- mov r10,r9
- xor r9,r13
- shr r8,8
- movzx r12,r12b
- mov edx,DWORD PTR[8+rdi]
- shr r9,8
- xor r8,QWORD PTR[((-128))+rbx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rbx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r12,WORD PTR[r12*2+r11]
- movzx ebx,dl
- shl al,4
- movzx r13,BYTE PTR[rcx*1+rsp]
- shr ebx,4
- shl r12,48
- xor r13,r8
- mov r10,r9
- xor r9,r12
- shr r8,8
- movzx r13,r13b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rcx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rcx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r13,WORD PTR[r13*2+r11]
- movzx ecx,dl
- shl al,4
- movzx r12,BYTE PTR[rbx*1+rsp]
- shr ecx,4
- shl r13,48
- xor r12,r8
- mov r10,r9
- xor r9,r13
- shr r8,8
- movzx r12,r12b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rbx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rbx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r12,WORD PTR[r12*2+r11]
- movzx ebx,dl
- shl al,4
- movzx r13,BYTE PTR[rcx*1+rsp]
- shr ebx,4
- shl r12,48
- xor r13,r8
- mov r10,r9
- xor r9,r12
- shr r8,8
- movzx r13,r13b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rcx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rcx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r13,WORD PTR[r13*2+r11]
- movzx ecx,dl
- shl al,4
- movzx r12,BYTE PTR[rbx*1+rsp]
- shr ecx,4
- shl r13,48
- xor r12,r8
- mov r10,r9
- xor r9,r13
- shr r8,8
- movzx r12,r12b
- mov edx,DWORD PTR[4+rdi]
- shr r9,8
- xor r8,QWORD PTR[((-128))+rbx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rbx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r12,WORD PTR[r12*2+r11]
- movzx ebx,dl
- shl al,4
- movzx r13,BYTE PTR[rcx*1+rsp]
- shr ebx,4
- shl r12,48
- xor r13,r8
- mov r10,r9
- xor r9,r12
- shr r8,8
- movzx r13,r13b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rcx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rcx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r13,WORD PTR[r13*2+r11]
- movzx ecx,dl
- shl al,4
- movzx r12,BYTE PTR[rbx*1+rsp]
- shr ecx,4
- shl r13,48
- xor r12,r8
- mov r10,r9
- xor r9,r13
- shr r8,8
- movzx r12,r12b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rbx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rbx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r12,WORD PTR[r12*2+r11]
- movzx ebx,dl
- shl al,4
- movzx r13,BYTE PTR[rcx*1+rsp]
- shr ebx,4
- shl r12,48
- xor r13,r8
- mov r10,r9
- xor r9,r12
- shr r8,8
- movzx r13,r13b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rcx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rcx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r13,WORD PTR[r13*2+r11]
- movzx ecx,dl
- shl al,4
- movzx r12,BYTE PTR[rbx*1+rsp]
- shr ecx,4
- shl r13,48
- xor r12,r8
- mov r10,r9
- xor r9,r13
- shr r8,8
- movzx r12,r12b
- mov edx,DWORD PTR[rdi]
- shr r9,8
- xor r8,QWORD PTR[((-128))+rbx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rbx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r12,WORD PTR[r12*2+r11]
- movzx ebx,dl
- shl al,4
- movzx r13,BYTE PTR[rcx*1+rsp]
- shr ebx,4
- shl r12,48
- xor r13,r8
- mov r10,r9
- xor r9,r12
- shr r8,8
- movzx r13,r13b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rcx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rcx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r13,WORD PTR[r13*2+r11]
- movzx ecx,dl
- shl al,4
- movzx r12,BYTE PTR[rbx*1+rsp]
- shr ecx,4
- shl r13,48
- xor r12,r8
- mov r10,r9
- xor r9,r13
- shr r8,8
- movzx r12,r12b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rbx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rbx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r12,WORD PTR[r12*2+r11]
- movzx ebx,dl
- shl al,4
- movzx r13,BYTE PTR[rcx*1+rsp]
- shr ebx,4
- shl r12,48
- xor r13,r8
- mov r10,r9
- xor r9,r12
- shr r8,8
- movzx r13,r13b
- shr r9,8
- xor r8,QWORD PTR[((-128))+rcx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rcx*8+rbp]
- rol edx,8
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- mov al,dl
- xor r8,r10
- movzx r13,WORD PTR[r13*2+r11]
- movzx ecx,dl
- shl al,4
- movzx r12,BYTE PTR[rbx*1+rsp]
- and ecx,240
- shl r13,48
- xor r12,r8
- mov r10,r9
- xor r9,r13
- shr r8,8
- movzx r12,r12b
- mov edx,DWORD PTR[((-4))+rdi]
- shr r9,8
- xor r8,QWORD PTR[((-128))+rbx*8+rbp]
- shl r10,56
- xor r9,QWORD PTR[rbx*8+rbp]
- movzx r12,WORD PTR[r12*2+r11]
- xor r8,QWORD PTR[8+rax*1+rsi]
- xor r9,QWORD PTR[rax*1+rsi]
- shl r12,48
- xor r8,r10
- xor r9,r12
- movzx r13,r8b
- shr r8,4
- mov r10,r9
- shl r13b,4
- shr r9,4
- xor r8,QWORD PTR[8+rcx*1+rsi]
- movzx r13,WORD PTR[r13*2+r11]
- shl r10,60
- xor r9,QWORD PTR[rcx*1+rsi]
- xor r8,r10
- shl r13,48
- bswap r8
- xor r9,r13
- bswap r9
- cmp r14,r15
- jb $L$outer_loop
- mov QWORD PTR[8+rdi],r8
- mov QWORD PTR[rdi],r9
-
- lea rsi,QWORD PTR[((280+48))+rsp]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$ghash_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_gcm_ghash_4bit::
-gcm_ghash_4bit ENDP
-PUBLIC gcm_init_clmul
-
-ALIGN 16
-gcm_init_clmul PROC PUBLIC
-
-$L$_init_clmul::
-$L$SEH_begin_gcm_init_clmul::
-
-DB 048h,083h,0ech,018h
-DB 00fh,029h,034h,024h
- movdqu xmm2,XMMWORD PTR[rdx]
- pshufd xmm2,xmm2,78
-
-
- pshufd xmm4,xmm2,255
- movdqa xmm3,xmm2
- psllq xmm2,1
- pxor xmm5,xmm5
- psrlq xmm3,63
- pcmpgtd xmm5,xmm4
- pslldq xmm3,8
- por xmm2,xmm3
-
-
- pand xmm5,XMMWORD PTR[$L$0x1c2_polynomial]
- pxor xmm2,xmm5
-
-
- pshufd xmm6,xmm2,78
- movdqa xmm0,xmm2
- pxor xmm6,xmm2
- movdqa xmm1,xmm0
- pshufd xmm3,xmm0,78
- pxor xmm3,xmm0
-DB 102,15,58,68,194,0
-DB 102,15,58,68,202,17
-DB 102,15,58,68,222,0
- pxor xmm3,xmm0
- pxor xmm3,xmm1
-
- movdqa xmm4,xmm3
- psrldq xmm3,8
- pslldq xmm4,8
- pxor xmm1,xmm3
- pxor xmm0,xmm4
-
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
-
-
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
- pshufd xmm3,xmm2,78
- pshufd xmm4,xmm0,78
- pxor xmm3,xmm2
- movdqu XMMWORD PTR[rcx],xmm2
- pxor xmm4,xmm0
- movdqu XMMWORD PTR[16+rcx],xmm0
-DB 102,15,58,15,227,8
- movdqu XMMWORD PTR[32+rcx],xmm4
- movdqa xmm1,xmm0
- pshufd xmm3,xmm0,78
- pxor xmm3,xmm0
-DB 102,15,58,68,194,0
-DB 102,15,58,68,202,17
-DB 102,15,58,68,222,0
- pxor xmm3,xmm0
- pxor xmm3,xmm1
-
- movdqa xmm4,xmm3
- psrldq xmm3,8
- pslldq xmm4,8
- pxor xmm1,xmm3
- pxor xmm0,xmm4
-
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
-
-
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
- movdqa xmm5,xmm0
- movdqa xmm1,xmm0
- pshufd xmm3,xmm0,78
- pxor xmm3,xmm0
-DB 102,15,58,68,194,0
-DB 102,15,58,68,202,17
-DB 102,15,58,68,222,0
- pxor xmm3,xmm0
- pxor xmm3,xmm1
-
- movdqa xmm4,xmm3
- psrldq xmm3,8
- pslldq xmm4,8
- pxor xmm1,xmm3
- pxor xmm0,xmm4
-
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
-
-
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
- pshufd xmm3,xmm5,78
- pshufd xmm4,xmm0,78
- pxor xmm3,xmm5
- movdqu XMMWORD PTR[48+rcx],xmm5
- pxor xmm4,xmm0
- movdqu XMMWORD PTR[64+rcx],xmm0
-DB 102,15,58,15,227,8
- movdqu XMMWORD PTR[80+rcx],xmm4
- movaps xmm6,XMMWORD PTR[rsp]
- lea rsp,QWORD PTR[24+rsp]
-$L$SEH_end_gcm_init_clmul::
- DB 0F3h,0C3h ;repret
-
-gcm_init_clmul ENDP
-PUBLIC gcm_gmult_clmul
-
-ALIGN 16
-gcm_gmult_clmul PROC PUBLIC
-
-$L$_gmult_clmul::
- movdqu xmm0,XMMWORD PTR[rcx]
- movdqa xmm5,XMMWORD PTR[$L$bswap_mask]
- movdqu xmm2,XMMWORD PTR[rdx]
- movdqu xmm4,XMMWORD PTR[32+rdx]
-DB 102,15,56,0,197
- movdqa xmm1,xmm0
- pshufd xmm3,xmm0,78
- pxor xmm3,xmm0
-DB 102,15,58,68,194,0
-DB 102,15,58,68,202,17
-DB 102,15,58,68,220,0
- pxor xmm3,xmm0
- pxor xmm3,xmm1
-
- movdqa xmm4,xmm3
- psrldq xmm3,8
- pslldq xmm4,8
- pxor xmm1,xmm3
- pxor xmm0,xmm4
-
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
-
-
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
-DB 102,15,56,0,197
- movdqu XMMWORD PTR[rcx],xmm0
- DB 0F3h,0C3h ;repret
-
-gcm_gmult_clmul ENDP
-PUBLIC gcm_ghash_clmul
-
-ALIGN 32
-gcm_ghash_clmul PROC PUBLIC
-
-$L$_ghash_clmul::
- lea rax,QWORD PTR[((-136))+rsp]
-$L$SEH_begin_gcm_ghash_clmul::
-
-DB 048h,08dh,060h,0e0h
-DB 00fh,029h,070h,0e0h
-DB 00fh,029h,078h,0f0h
-DB 044h,00fh,029h,000h
-DB 044h,00fh,029h,048h,010h
-DB 044h,00fh,029h,050h,020h
-DB 044h,00fh,029h,058h,030h
-DB 044h,00fh,029h,060h,040h
-DB 044h,00fh,029h,068h,050h
-DB 044h,00fh,029h,070h,060h
-DB 044h,00fh,029h,078h,070h
- movdqa xmm10,XMMWORD PTR[$L$bswap_mask]
-
- movdqu xmm0,XMMWORD PTR[rcx]
- movdqu xmm2,XMMWORD PTR[rdx]
- movdqu xmm7,XMMWORD PTR[32+rdx]
-DB 102,65,15,56,0,194
-
- sub r9,010h
- jz $L$odd_tail
-
- movdqu xmm6,XMMWORD PTR[16+rdx]
- mov eax,DWORD PTR[((OPENSSL_ia32cap_P+4))]
- cmp r9,030h
- jb $L$skip4x
-
- and eax,71303168
- cmp eax,4194304
- je $L$skip4x
-
- sub r9,030h
- mov rax,0A040608020C0E000h
- movdqu xmm14,XMMWORD PTR[48+rdx]
- movdqu xmm15,XMMWORD PTR[64+rdx]
-
-
-
-
- movdqu xmm3,XMMWORD PTR[48+r8]
- movdqu xmm11,XMMWORD PTR[32+r8]
-DB 102,65,15,56,0,218
-DB 102,69,15,56,0,218
- movdqa xmm5,xmm3
- pshufd xmm4,xmm3,78
- pxor xmm4,xmm3
-DB 102,15,58,68,218,0
-DB 102,15,58,68,234,17
-DB 102,15,58,68,231,0
-
- movdqa xmm13,xmm11
- pshufd xmm12,xmm11,78
- pxor xmm12,xmm11
-DB 102,68,15,58,68,222,0
-DB 102,68,15,58,68,238,17
-DB 102,68,15,58,68,231,16
- xorps xmm3,xmm11
- xorps xmm5,xmm13
- movups xmm7,XMMWORD PTR[80+rdx]
- xorps xmm4,xmm12
-
- movdqu xmm11,XMMWORD PTR[16+r8]
- movdqu xmm8,XMMWORD PTR[r8]
-DB 102,69,15,56,0,218
-DB 102,69,15,56,0,194
- movdqa xmm13,xmm11
- pshufd xmm12,xmm11,78
- pxor xmm0,xmm8
- pxor xmm12,xmm11
-DB 102,69,15,58,68,222,0
- movdqa xmm1,xmm0
- pshufd xmm8,xmm0,78
- pxor xmm8,xmm0
-DB 102,69,15,58,68,238,17
-DB 102,68,15,58,68,231,0
- xorps xmm3,xmm11
- xorps xmm5,xmm13
-
- lea r8,QWORD PTR[64+r8]
- sub r9,040h
- jc $L$tail4x
-
- jmp $L$mod4_loop
-ALIGN 32
-$L$mod4_loop::
-DB 102,65,15,58,68,199,0
- xorps xmm4,xmm12
- movdqu xmm11,XMMWORD PTR[48+r8]
-DB 102,69,15,56,0,218
-DB 102,65,15,58,68,207,17
- xorps xmm0,xmm3
- movdqu xmm3,XMMWORD PTR[32+r8]
- movdqa xmm13,xmm11
-DB 102,68,15,58,68,199,16
- pshufd xmm12,xmm11,78
- xorps xmm1,xmm5
- pxor xmm12,xmm11
-DB 102,65,15,56,0,218
- movups xmm7,XMMWORD PTR[32+rdx]
- xorps xmm8,xmm4
-DB 102,68,15,58,68,218,0
- pshufd xmm4,xmm3,78
-
- pxor xmm8,xmm0
- movdqa xmm5,xmm3
- pxor xmm8,xmm1
- pxor xmm4,xmm3
- movdqa xmm9,xmm8
-DB 102,68,15,58,68,234,17
- pslldq xmm8,8
- psrldq xmm9,8
- pxor xmm0,xmm8
- movdqa xmm8,XMMWORD PTR[$L$7_mask]
- pxor xmm1,xmm9
-DB 102,76,15,110,200
-
- pand xmm8,xmm0
-DB 102,69,15,56,0,200
- pxor xmm9,xmm0
-DB 102,68,15,58,68,231,0
- psllq xmm9,57
- movdqa xmm8,xmm9
- pslldq xmm9,8
-DB 102,15,58,68,222,0
- psrldq xmm8,8
- pxor xmm0,xmm9
- pxor xmm1,xmm8
- movdqu xmm8,XMMWORD PTR[r8]
-
- movdqa xmm9,xmm0
- psrlq xmm0,1
-DB 102,15,58,68,238,17
- xorps xmm3,xmm11
- movdqu xmm11,XMMWORD PTR[16+r8]
-DB 102,69,15,56,0,218
-DB 102,15,58,68,231,16
- xorps xmm5,xmm13
- movups xmm7,XMMWORD PTR[80+rdx]
-DB 102,69,15,56,0,194
- pxor xmm1,xmm9
- pxor xmm9,xmm0
- psrlq xmm0,5
-
- movdqa xmm13,xmm11
- pxor xmm4,xmm12
- pshufd xmm12,xmm11,78
- pxor xmm0,xmm9
- pxor xmm1,xmm8
- pxor xmm12,xmm11
-DB 102,69,15,58,68,222,0
- psrlq xmm0,1
- pxor xmm0,xmm1
- movdqa xmm1,xmm0
-DB 102,69,15,58,68,238,17
- xorps xmm3,xmm11
- pshufd xmm8,xmm0,78
- pxor xmm8,xmm0
-
-DB 102,68,15,58,68,231,0
- xorps xmm5,xmm13
-
- lea r8,QWORD PTR[64+r8]
- sub r9,040h
- jnc $L$mod4_loop
-
-$L$tail4x::
-DB 102,65,15,58,68,199,0
-DB 102,65,15,58,68,207,17
-DB 102,68,15,58,68,199,16
- xorps xmm4,xmm12
- xorps xmm0,xmm3
- xorps xmm1,xmm5
- pxor xmm1,xmm0
- pxor xmm8,xmm4
-
- pxor xmm8,xmm1
- pxor xmm1,xmm0
-
- movdqa xmm9,xmm8
- psrldq xmm8,8
- pslldq xmm9,8
- pxor xmm1,xmm8
- pxor xmm0,xmm9
-
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
-
-
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
- add r9,040h
- jz $L$done
- movdqu xmm7,XMMWORD PTR[32+rdx]
- sub r9,010h
- jz $L$odd_tail
-$L$skip4x::
-
-
-
-
-
- movdqu xmm8,XMMWORD PTR[r8]
- movdqu xmm3,XMMWORD PTR[16+r8]
-DB 102,69,15,56,0,194
-DB 102,65,15,56,0,218
- pxor xmm0,xmm8
-
- movdqa xmm5,xmm3
- pshufd xmm4,xmm3,78
- pxor xmm4,xmm3
-DB 102,15,58,68,218,0
-DB 102,15,58,68,234,17
-DB 102,15,58,68,231,0
-
- lea r8,QWORD PTR[32+r8]
- nop
- sub r9,020h
- jbe $L$even_tail
- nop
- jmp $L$mod_loop
-
-ALIGN 32
-$L$mod_loop::
- movdqa xmm1,xmm0
- movdqa xmm8,xmm4
- pshufd xmm4,xmm0,78
- pxor xmm4,xmm0
-
-DB 102,15,58,68,198,0
-DB 102,15,58,68,206,17
-DB 102,15,58,68,231,16
-
- pxor xmm0,xmm3
- pxor xmm1,xmm5
- movdqu xmm9,XMMWORD PTR[r8]
- pxor xmm8,xmm0
-DB 102,69,15,56,0,202
- movdqu xmm3,XMMWORD PTR[16+r8]
-
- pxor xmm8,xmm1
- pxor xmm1,xmm9
- pxor xmm4,xmm8
-DB 102,65,15,56,0,218
- movdqa xmm8,xmm4
- psrldq xmm8,8
- pslldq xmm4,8
- pxor xmm1,xmm8
- pxor xmm0,xmm4
-
- movdqa xmm5,xmm3
-
- movdqa xmm9,xmm0
- movdqa xmm8,xmm0
- psllq xmm0,5
- pxor xmm8,xmm0
-DB 102,15,58,68,218,0
- psllq xmm0,1
- pxor xmm0,xmm8
- psllq xmm0,57
- movdqa xmm8,xmm0
- pslldq xmm0,8
- psrldq xmm8,8
- pxor xmm0,xmm9
- pshufd xmm4,xmm5,78
- pxor xmm1,xmm8
- pxor xmm4,xmm5
-
- movdqa xmm9,xmm0
- psrlq xmm0,1
-DB 102,15,58,68,234,17
- pxor xmm1,xmm9
- pxor xmm9,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm9
- lea r8,QWORD PTR[32+r8]
- psrlq xmm0,1
-DB 102,15,58,68,231,0
- pxor xmm0,xmm1
-
- sub r9,020h
- ja $L$mod_loop
-
-$L$even_tail::
- movdqa xmm1,xmm0
- movdqa xmm8,xmm4
- pshufd xmm4,xmm0,78
- pxor xmm4,xmm0
-
-DB 102,15,58,68,198,0
-DB 102,15,58,68,206,17
-DB 102,15,58,68,231,16
-
- pxor xmm0,xmm3
- pxor xmm1,xmm5
- pxor xmm8,xmm0
- pxor xmm8,xmm1
- pxor xmm4,xmm8
- movdqa xmm8,xmm4
- psrldq xmm8,8
- pslldq xmm4,8
- pxor xmm1,xmm8
- pxor xmm0,xmm4
-
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
-
-
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
- test r9,r9
- jnz $L$done
-
-$L$odd_tail::
- movdqu xmm8,XMMWORD PTR[r8]
-DB 102,69,15,56,0,194
- pxor xmm0,xmm8
- movdqa xmm1,xmm0
- pshufd xmm3,xmm0,78
- pxor xmm3,xmm0
-DB 102,15,58,68,194,0
-DB 102,15,58,68,202,17
-DB 102,15,58,68,223,0
- pxor xmm3,xmm0
- pxor xmm3,xmm1
-
- movdqa xmm4,xmm3
- psrldq xmm3,8
- pslldq xmm4,8
- pxor xmm1,xmm3
- pxor xmm0,xmm4
-
- movdqa xmm4,xmm0
- movdqa xmm3,xmm0
- psllq xmm0,5
- pxor xmm3,xmm0
- psllq xmm0,1
- pxor xmm0,xmm3
- psllq xmm0,57
- movdqa xmm3,xmm0
- pslldq xmm0,8
- psrldq xmm3,8
- pxor xmm0,xmm4
- pxor xmm1,xmm3
-
-
- movdqa xmm4,xmm0
- psrlq xmm0,1
- pxor xmm1,xmm4
- pxor xmm4,xmm0
- psrlq xmm0,5
- pxor xmm0,xmm4
- psrlq xmm0,1
- pxor xmm0,xmm1
-$L$done::
-DB 102,65,15,56,0,194
- movdqu XMMWORD PTR[rcx],xmm0
- movaps xmm6,XMMWORD PTR[rsp]
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps xmm10,XMMWORD PTR[64+rsp]
- movaps xmm11,XMMWORD PTR[80+rsp]
- movaps xmm12,XMMWORD PTR[96+rsp]
- movaps xmm13,XMMWORD PTR[112+rsp]
- movaps xmm14,XMMWORD PTR[128+rsp]
- movaps xmm15,XMMWORD PTR[144+rsp]
- lea rsp,QWORD PTR[168+rsp]
-$L$SEH_end_gcm_ghash_clmul::
- DB 0F3h,0C3h ;repret
-
-gcm_ghash_clmul ENDP
-PUBLIC gcm_init_avx
-
-ALIGN 32
-gcm_init_avx PROC PUBLIC
-
-$L$SEH_begin_gcm_init_avx::
-
-DB 048h,083h,0ech,018h
-DB 00fh,029h,034h,024h
- vzeroupper
-
- vmovdqu xmm2,XMMWORD PTR[rdx]
- vpshufd xmm2,xmm2,78
-
-
- vpshufd xmm4,xmm2,255
- vpsrlq xmm3,xmm2,63
- vpsllq xmm2,xmm2,1
- vpxor xmm5,xmm5,xmm5
- vpcmpgtd xmm5,xmm5,xmm4
- vpslldq xmm3,xmm3,8
- vpor xmm2,xmm2,xmm3
-
-
- vpand xmm5,xmm5,XMMWORD PTR[$L$0x1c2_polynomial]
- vpxor xmm2,xmm2,xmm5
-
- vpunpckhqdq xmm6,xmm2,xmm2
- vmovdqa xmm0,xmm2
- vpxor xmm6,xmm6,xmm2
- mov r10,4
- jmp $L$init_start_avx
-ALIGN 32
-$L$init_loop_avx::
- vpalignr xmm5,xmm4,xmm3,8
- vmovdqu XMMWORD PTR[(-16)+rcx],xmm5
- vpunpckhqdq xmm3,xmm0,xmm0
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm1,xmm0,xmm2,011h
- vpclmulqdq xmm0,xmm0,xmm2,000h
- vpclmulqdq xmm3,xmm3,xmm6,000h
- vpxor xmm4,xmm1,xmm0
- vpxor xmm3,xmm3,xmm4
-
- vpslldq xmm4,xmm3,8
- vpsrldq xmm3,xmm3,8
- vpxor xmm0,xmm0,xmm4
- vpxor xmm1,xmm1,xmm3
- vpsllq xmm3,xmm0,57
- vpsllq xmm4,xmm0,62
- vpxor xmm4,xmm4,xmm3
- vpsllq xmm3,xmm0,63
- vpxor xmm4,xmm4,xmm3
- vpslldq xmm3,xmm4,8
- vpsrldq xmm4,xmm4,8
- vpxor xmm0,xmm0,xmm3
- vpxor xmm1,xmm1,xmm4
-
- vpsrlq xmm4,xmm0,1
- vpxor xmm1,xmm1,xmm0
- vpxor xmm0,xmm0,xmm4
- vpsrlq xmm4,xmm4,5
- vpxor xmm0,xmm0,xmm4
- vpsrlq xmm0,xmm0,1
- vpxor xmm0,xmm0,xmm1
-$L$init_start_avx::
- vmovdqa xmm5,xmm0
- vpunpckhqdq xmm3,xmm0,xmm0
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm1,xmm0,xmm2,011h
- vpclmulqdq xmm0,xmm0,xmm2,000h
- vpclmulqdq xmm3,xmm3,xmm6,000h
- vpxor xmm4,xmm1,xmm0
- vpxor xmm3,xmm3,xmm4
-
- vpslldq xmm4,xmm3,8
- vpsrldq xmm3,xmm3,8
- vpxor xmm0,xmm0,xmm4
- vpxor xmm1,xmm1,xmm3
- vpsllq xmm3,xmm0,57
- vpsllq xmm4,xmm0,62
- vpxor xmm4,xmm4,xmm3
- vpsllq xmm3,xmm0,63
- vpxor xmm4,xmm4,xmm3
- vpslldq xmm3,xmm4,8
- vpsrldq xmm4,xmm4,8
- vpxor xmm0,xmm0,xmm3
- vpxor xmm1,xmm1,xmm4
-
- vpsrlq xmm4,xmm0,1
- vpxor xmm1,xmm1,xmm0
- vpxor xmm0,xmm0,xmm4
- vpsrlq xmm4,xmm4,5
- vpxor xmm0,xmm0,xmm4
- vpsrlq xmm0,xmm0,1
- vpxor xmm0,xmm0,xmm1
- vpshufd xmm3,xmm5,78
- vpshufd xmm4,xmm0,78
- vpxor xmm3,xmm3,xmm5
- vmovdqu XMMWORD PTR[rcx],xmm5
- vpxor xmm4,xmm4,xmm0
- vmovdqu XMMWORD PTR[16+rcx],xmm0
- lea rcx,QWORD PTR[48+rcx]
- sub r10,1
- jnz $L$init_loop_avx
-
- vpalignr xmm5,xmm3,xmm4,8
- vmovdqu XMMWORD PTR[(-16)+rcx],xmm5
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[rsp]
- lea rsp,QWORD PTR[24+rsp]
-$L$SEH_end_gcm_init_avx::
- DB 0F3h,0C3h ;repret
-
-gcm_init_avx ENDP
-PUBLIC gcm_gmult_avx
-
-ALIGN 32
-gcm_gmult_avx PROC PUBLIC
-
- jmp $L$_gmult_clmul
-
-gcm_gmult_avx ENDP
-PUBLIC gcm_ghash_avx
-
-ALIGN 32
-gcm_ghash_avx PROC PUBLIC
-
- lea rax,QWORD PTR[((-136))+rsp]
-$L$SEH_begin_gcm_ghash_avx::
-
-DB 048h,08dh,060h,0e0h
-DB 00fh,029h,070h,0e0h
-DB 00fh,029h,078h,0f0h
-DB 044h,00fh,029h,000h
-DB 044h,00fh,029h,048h,010h
-DB 044h,00fh,029h,050h,020h
-DB 044h,00fh,029h,058h,030h
-DB 044h,00fh,029h,060h,040h
-DB 044h,00fh,029h,068h,050h
-DB 044h,00fh,029h,070h,060h
-DB 044h,00fh,029h,078h,070h
- vzeroupper
-
- vmovdqu xmm10,XMMWORD PTR[rcx]
- lea r10,QWORD PTR[$L$0x1c2_polynomial]
- lea rdx,QWORD PTR[64+rdx]
- vmovdqu xmm13,XMMWORD PTR[$L$bswap_mask]
- vpshufb xmm10,xmm10,xmm13
- cmp r9,080h
- jb $L$short_avx
- sub r9,080h
-
- vmovdqu xmm14,XMMWORD PTR[112+r8]
- vmovdqu xmm6,XMMWORD PTR[((0-64))+rdx]
- vpshufb xmm14,xmm14,xmm13
- vmovdqu xmm7,XMMWORD PTR[((32-64))+rdx]
-
- vpunpckhqdq xmm9,xmm14,xmm14
- vmovdqu xmm15,XMMWORD PTR[96+r8]
- vpclmulqdq xmm0,xmm14,xmm6,000h
- vpxor xmm9,xmm9,xmm14
- vpshufb xmm15,xmm15,xmm13
- vpclmulqdq xmm1,xmm14,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((16-64))+rdx]
- vpunpckhqdq xmm8,xmm15,xmm15
- vmovdqu xmm14,XMMWORD PTR[80+r8]
- vpclmulqdq xmm2,xmm9,xmm7,000h
- vpxor xmm8,xmm8,xmm15
-
- vpshufb xmm14,xmm14,xmm13
- vpclmulqdq xmm3,xmm15,xmm6,000h
- vpunpckhqdq xmm9,xmm14,xmm14
- vpclmulqdq xmm4,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((48-64))+rdx]
- vpxor xmm9,xmm9,xmm14
- vmovdqu xmm15,XMMWORD PTR[64+r8]
- vpclmulqdq xmm5,xmm8,xmm7,010h
- vmovdqu xmm7,XMMWORD PTR[((80-64))+rdx]
-
- vpshufb xmm15,xmm15,xmm13
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm0,xmm14,xmm6,000h
- vpxor xmm4,xmm4,xmm1
- vpunpckhqdq xmm8,xmm15,xmm15
- vpclmulqdq xmm1,xmm14,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((64-64))+rdx]
- vpxor xmm5,xmm5,xmm2
- vpclmulqdq xmm2,xmm9,xmm7,000h
- vpxor xmm8,xmm8,xmm15
-
- vmovdqu xmm14,XMMWORD PTR[48+r8]
- vpxor xmm0,xmm0,xmm3
- vpclmulqdq xmm3,xmm15,xmm6,000h
- vpxor xmm1,xmm1,xmm4
- vpshufb xmm14,xmm14,xmm13
- vpclmulqdq xmm4,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((96-64))+rdx]
- vpxor xmm2,xmm2,xmm5
- vpunpckhqdq xmm9,xmm14,xmm14
- vpclmulqdq xmm5,xmm8,xmm7,010h
- vmovdqu xmm7,XMMWORD PTR[((128-64))+rdx]
- vpxor xmm9,xmm9,xmm14
-
- vmovdqu xmm15,XMMWORD PTR[32+r8]
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm0,xmm14,xmm6,000h
- vpxor xmm4,xmm4,xmm1
- vpshufb xmm15,xmm15,xmm13
- vpclmulqdq xmm1,xmm14,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((112-64))+rdx]
- vpxor xmm5,xmm5,xmm2
- vpunpckhqdq xmm8,xmm15,xmm15
- vpclmulqdq xmm2,xmm9,xmm7,000h
- vpxor xmm8,xmm8,xmm15
-
- vmovdqu xmm14,XMMWORD PTR[16+r8]
- vpxor xmm0,xmm0,xmm3
- vpclmulqdq xmm3,xmm15,xmm6,000h
- vpxor xmm1,xmm1,xmm4
- vpshufb xmm14,xmm14,xmm13
- vpclmulqdq xmm4,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((144-64))+rdx]
- vpxor xmm2,xmm2,xmm5
- vpunpckhqdq xmm9,xmm14,xmm14
- vpclmulqdq xmm5,xmm8,xmm7,010h
- vmovdqu xmm7,XMMWORD PTR[((176-64))+rdx]
- vpxor xmm9,xmm9,xmm14
-
- vmovdqu xmm15,XMMWORD PTR[r8]
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm0,xmm14,xmm6,000h
- vpxor xmm4,xmm4,xmm1
- vpshufb xmm15,xmm15,xmm13
- vpclmulqdq xmm1,xmm14,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((160-64))+rdx]
- vpxor xmm5,xmm5,xmm2
- vpclmulqdq xmm2,xmm9,xmm7,010h
-
- lea r8,QWORD PTR[128+r8]
- cmp r9,080h
- jb $L$tail_avx
-
- vpxor xmm15,xmm15,xmm10
- sub r9,080h
- jmp $L$oop8x_avx
-
-ALIGN 32
-$L$oop8x_avx::
- vpunpckhqdq xmm8,xmm15,xmm15
- vmovdqu xmm14,XMMWORD PTR[112+r8]
- vpxor xmm3,xmm3,xmm0
- vpxor xmm8,xmm8,xmm15
- vpclmulqdq xmm10,xmm15,xmm6,000h
- vpshufb xmm14,xmm14,xmm13
- vpxor xmm4,xmm4,xmm1
- vpclmulqdq xmm11,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((0-64))+rdx]
- vpunpckhqdq xmm9,xmm14,xmm14
- vpxor xmm5,xmm5,xmm2
- vpclmulqdq xmm12,xmm8,xmm7,000h
- vmovdqu xmm7,XMMWORD PTR[((32-64))+rdx]
- vpxor xmm9,xmm9,xmm14
-
- vmovdqu xmm15,XMMWORD PTR[96+r8]
- vpclmulqdq xmm0,xmm14,xmm6,000h
- vpxor xmm10,xmm10,xmm3
- vpshufb xmm15,xmm15,xmm13
- vpclmulqdq xmm1,xmm14,xmm6,011h
- vxorps xmm11,xmm11,xmm4
- vmovdqu xmm6,XMMWORD PTR[((16-64))+rdx]
- vpunpckhqdq xmm8,xmm15,xmm15
- vpclmulqdq xmm2,xmm9,xmm7,000h
- vpxor xmm12,xmm12,xmm5
- vxorps xmm8,xmm8,xmm15
-
- vmovdqu xmm14,XMMWORD PTR[80+r8]
- vpxor xmm12,xmm12,xmm10
- vpclmulqdq xmm3,xmm15,xmm6,000h
- vpxor xmm12,xmm12,xmm11
- vpslldq xmm9,xmm12,8
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm4,xmm15,xmm6,011h
- vpsrldq xmm12,xmm12,8
- vpxor xmm10,xmm10,xmm9
- vmovdqu xmm6,XMMWORD PTR[((48-64))+rdx]
- vpshufb xmm14,xmm14,xmm13
- vxorps xmm11,xmm11,xmm12
- vpxor xmm4,xmm4,xmm1
- vpunpckhqdq xmm9,xmm14,xmm14
- vpclmulqdq xmm5,xmm8,xmm7,010h
- vmovdqu xmm7,XMMWORD PTR[((80-64))+rdx]
- vpxor xmm9,xmm9,xmm14
- vpxor xmm5,xmm5,xmm2
-
- vmovdqu xmm15,XMMWORD PTR[64+r8]
- vpalignr xmm12,xmm10,xmm10,8
- vpclmulqdq xmm0,xmm14,xmm6,000h
- vpshufb xmm15,xmm15,xmm13
- vpxor xmm0,xmm0,xmm3
- vpclmulqdq xmm1,xmm14,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((64-64))+rdx]
- vpunpckhqdq xmm8,xmm15,xmm15
- vpxor xmm1,xmm1,xmm4
- vpclmulqdq xmm2,xmm9,xmm7,000h
- vxorps xmm8,xmm8,xmm15
- vpxor xmm2,xmm2,xmm5
-
- vmovdqu xmm14,XMMWORD PTR[48+r8]
- vpclmulqdq xmm10,xmm10,XMMWORD PTR[r10],010h
- vpclmulqdq xmm3,xmm15,xmm6,000h
- vpshufb xmm14,xmm14,xmm13
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm4,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((96-64))+rdx]
- vpunpckhqdq xmm9,xmm14,xmm14
- vpxor xmm4,xmm4,xmm1
- vpclmulqdq xmm5,xmm8,xmm7,010h
- vmovdqu xmm7,XMMWORD PTR[((128-64))+rdx]
- vpxor xmm9,xmm9,xmm14
- vpxor xmm5,xmm5,xmm2
-
- vmovdqu xmm15,XMMWORD PTR[32+r8]
- vpclmulqdq xmm0,xmm14,xmm6,000h
- vpshufb xmm15,xmm15,xmm13
- vpxor xmm0,xmm0,xmm3
- vpclmulqdq xmm1,xmm14,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((112-64))+rdx]
- vpunpckhqdq xmm8,xmm15,xmm15
- vpxor xmm1,xmm1,xmm4
- vpclmulqdq xmm2,xmm9,xmm7,000h
- vpxor xmm8,xmm8,xmm15
- vpxor xmm2,xmm2,xmm5
- vxorps xmm10,xmm10,xmm12
-
- vmovdqu xmm14,XMMWORD PTR[16+r8]
- vpalignr xmm12,xmm10,xmm10,8
- vpclmulqdq xmm3,xmm15,xmm6,000h
- vpshufb xmm14,xmm14,xmm13
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm4,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((144-64))+rdx]
- vpclmulqdq xmm10,xmm10,XMMWORD PTR[r10],010h
- vxorps xmm12,xmm12,xmm11
- vpunpckhqdq xmm9,xmm14,xmm14
- vpxor xmm4,xmm4,xmm1
- vpclmulqdq xmm5,xmm8,xmm7,010h
- vmovdqu xmm7,XMMWORD PTR[((176-64))+rdx]
- vpxor xmm9,xmm9,xmm14
- vpxor xmm5,xmm5,xmm2
-
- vmovdqu xmm15,XMMWORD PTR[r8]
- vpclmulqdq xmm0,xmm14,xmm6,000h
- vpshufb xmm15,xmm15,xmm13
- vpclmulqdq xmm1,xmm14,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((160-64))+rdx]
- vpxor xmm15,xmm15,xmm12
- vpclmulqdq xmm2,xmm9,xmm7,010h
- vpxor xmm15,xmm15,xmm10
-
- lea r8,QWORD PTR[128+r8]
- sub r9,080h
- jnc $L$oop8x_avx
-
- add r9,080h
- jmp $L$tail_no_xor_avx
-
-ALIGN 32
-$L$short_avx::
- vmovdqu xmm14,XMMWORD PTR[((-16))+r9*1+r8]
- lea r8,QWORD PTR[r9*1+r8]
- vmovdqu xmm6,XMMWORD PTR[((0-64))+rdx]
- vmovdqu xmm7,XMMWORD PTR[((32-64))+rdx]
- vpshufb xmm15,xmm14,xmm13
-
- vmovdqa xmm3,xmm0
- vmovdqa xmm4,xmm1
- vmovdqa xmm5,xmm2
- sub r9,010h
- jz $L$tail_avx
-
- vpunpckhqdq xmm8,xmm15,xmm15
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm0,xmm15,xmm6,000h
- vpxor xmm8,xmm8,xmm15
- vmovdqu xmm14,XMMWORD PTR[((-32))+r8]
- vpxor xmm4,xmm4,xmm1
- vpclmulqdq xmm1,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((16-64))+rdx]
- vpshufb xmm15,xmm14,xmm13
- vpxor xmm5,xmm5,xmm2
- vpclmulqdq xmm2,xmm8,xmm7,000h
- vpsrldq xmm7,xmm7,8
- sub r9,010h
- jz $L$tail_avx
-
- vpunpckhqdq xmm8,xmm15,xmm15
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm0,xmm15,xmm6,000h
- vpxor xmm8,xmm8,xmm15
- vmovdqu xmm14,XMMWORD PTR[((-48))+r8]
- vpxor xmm4,xmm4,xmm1
- vpclmulqdq xmm1,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((48-64))+rdx]
- vpshufb xmm15,xmm14,xmm13
- vpxor xmm5,xmm5,xmm2
- vpclmulqdq xmm2,xmm8,xmm7,000h
- vmovdqu xmm7,XMMWORD PTR[((80-64))+rdx]
- sub r9,010h
- jz $L$tail_avx
-
- vpunpckhqdq xmm8,xmm15,xmm15
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm0,xmm15,xmm6,000h
- vpxor xmm8,xmm8,xmm15
- vmovdqu xmm14,XMMWORD PTR[((-64))+r8]
- vpxor xmm4,xmm4,xmm1
- vpclmulqdq xmm1,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((64-64))+rdx]
- vpshufb xmm15,xmm14,xmm13
- vpxor xmm5,xmm5,xmm2
- vpclmulqdq xmm2,xmm8,xmm7,000h
- vpsrldq xmm7,xmm7,8
- sub r9,010h
- jz $L$tail_avx
-
- vpunpckhqdq xmm8,xmm15,xmm15
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm0,xmm15,xmm6,000h
- vpxor xmm8,xmm8,xmm15
- vmovdqu xmm14,XMMWORD PTR[((-80))+r8]
- vpxor xmm4,xmm4,xmm1
- vpclmulqdq xmm1,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((96-64))+rdx]
- vpshufb xmm15,xmm14,xmm13
- vpxor xmm5,xmm5,xmm2
- vpclmulqdq xmm2,xmm8,xmm7,000h
- vmovdqu xmm7,XMMWORD PTR[((128-64))+rdx]
- sub r9,010h
- jz $L$tail_avx
-
- vpunpckhqdq xmm8,xmm15,xmm15
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm0,xmm15,xmm6,000h
- vpxor xmm8,xmm8,xmm15
- vmovdqu xmm14,XMMWORD PTR[((-96))+r8]
- vpxor xmm4,xmm4,xmm1
- vpclmulqdq xmm1,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((112-64))+rdx]
- vpshufb xmm15,xmm14,xmm13
- vpxor xmm5,xmm5,xmm2
- vpclmulqdq xmm2,xmm8,xmm7,000h
- vpsrldq xmm7,xmm7,8
- sub r9,010h
- jz $L$tail_avx
-
- vpunpckhqdq xmm8,xmm15,xmm15
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm0,xmm15,xmm6,000h
- vpxor xmm8,xmm8,xmm15
- vmovdqu xmm14,XMMWORD PTR[((-112))+r8]
- vpxor xmm4,xmm4,xmm1
- vpclmulqdq xmm1,xmm15,xmm6,011h
- vmovdqu xmm6,XMMWORD PTR[((144-64))+rdx]
- vpshufb xmm15,xmm14,xmm13
- vpxor xmm5,xmm5,xmm2
- vpclmulqdq xmm2,xmm8,xmm7,000h
- vmovq xmm7,QWORD PTR[((184-64))+rdx]
- sub r9,010h
- jmp $L$tail_avx
-
-ALIGN 32
-$L$tail_avx::
- vpxor xmm15,xmm15,xmm10
-$L$tail_no_xor_avx::
- vpunpckhqdq xmm8,xmm15,xmm15
- vpxor xmm3,xmm3,xmm0
- vpclmulqdq xmm0,xmm15,xmm6,000h
- vpxor xmm8,xmm8,xmm15
- vpxor xmm4,xmm4,xmm1
- vpclmulqdq xmm1,xmm15,xmm6,011h
- vpxor xmm5,xmm5,xmm2
- vpclmulqdq xmm2,xmm8,xmm7,000h
-
- vmovdqu xmm12,XMMWORD PTR[r10]
-
- vpxor xmm10,xmm3,xmm0
- vpxor xmm11,xmm4,xmm1
- vpxor xmm5,xmm5,xmm2
-
- vpxor xmm5,xmm5,xmm10
- vpxor xmm5,xmm5,xmm11
- vpslldq xmm9,xmm5,8
- vpsrldq xmm5,xmm5,8
- vpxor xmm10,xmm10,xmm9
- vpxor xmm11,xmm11,xmm5
-
- vpclmulqdq xmm9,xmm10,xmm12,010h
- vpalignr xmm10,xmm10,xmm10,8
- vpxor xmm10,xmm10,xmm9
-
- vpclmulqdq xmm9,xmm10,xmm12,010h
- vpalignr xmm10,xmm10,xmm10,8
- vpxor xmm10,xmm10,xmm11
- vpxor xmm10,xmm10,xmm9
-
- cmp r9,0
- jne $L$short_avx
-
- vpshufb xmm10,xmm10,xmm13
- vmovdqu XMMWORD PTR[rcx],xmm10
- vzeroupper
- movaps xmm6,XMMWORD PTR[rsp]
- movaps xmm7,XMMWORD PTR[16+rsp]
- movaps xmm8,XMMWORD PTR[32+rsp]
- movaps xmm9,XMMWORD PTR[48+rsp]
- movaps xmm10,XMMWORD PTR[64+rsp]
- movaps xmm11,XMMWORD PTR[80+rsp]
- movaps xmm12,XMMWORD PTR[96+rsp]
- movaps xmm13,XMMWORD PTR[112+rsp]
- movaps xmm14,XMMWORD PTR[128+rsp]
- movaps xmm15,XMMWORD PTR[144+rsp]
- lea rsp,QWORD PTR[168+rsp]
-$L$SEH_end_gcm_ghash_avx::
- DB 0F3h,0C3h ;repret
-
-gcm_ghash_avx ENDP
-ALIGN 64
-$L$bswap_mask::
-DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
-$L$0x1c2_polynomial::
-DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0c2h
-$L$7_mask::
- DD 7,0,7,0
-$L$7_mask_poly::
- DD 7,0,450,0
-ALIGN 64
-
-$L$rem_4bit::
- DD 0,0,0,471859200,0,943718400,0,610271232
- DD 0,1887436800,0,1822425088,0,1220542464,0,1423966208
- DD 0,3774873600,0,4246732800,0,3644850176,0,3311403008
- DD 0,2441084928,0,2376073216,0,2847932416,0,3051356160
-
-$L$rem_8bit::
- DW 00000h,001C2h,00384h,00246h,00708h,006CAh,0048Ch,0054Eh
- DW 00E10h,00FD2h,00D94h,00C56h,00918h,008DAh,00A9Ch,00B5Eh
- DW 01C20h,01DE2h,01FA4h,01E66h,01B28h,01AEAh,018ACh,0196Eh
- DW 01230h,013F2h,011B4h,01076h,01538h,014FAh,016BCh,0177Eh
- DW 03840h,03982h,03BC4h,03A06h,03F48h,03E8Ah,03CCCh,03D0Eh
- DW 03650h,03792h,035D4h,03416h,03158h,0309Ah,032DCh,0331Eh
- DW 02460h,025A2h,027E4h,02626h,02368h,022AAh,020ECh,0212Eh
- DW 02A70h,02BB2h,029F4h,02836h,02D78h,02CBAh,02EFCh,02F3Eh
- DW 07080h,07142h,07304h,072C6h,07788h,0764Ah,0740Ch,075CEh
- DW 07E90h,07F52h,07D14h,07CD6h,07998h,0785Ah,07A1Ch,07BDEh
- DW 06CA0h,06D62h,06F24h,06EE6h,06BA8h,06A6Ah,0682Ch,069EEh
- DW 062B0h,06372h,06134h,060F6h,065B8h,0647Ah,0663Ch,067FEh
- DW 048C0h,04902h,04B44h,04A86h,04FC8h,04E0Ah,04C4Ch,04D8Eh
- DW 046D0h,04712h,04554h,04496h,041D8h,0401Ah,0425Ch,0439Eh
- DW 054E0h,05522h,05764h,056A6h,053E8h,0522Ah,0506Ch,051AEh
- DW 05AF0h,05B32h,05974h,058B6h,05DF8h,05C3Ah,05E7Ch,05FBEh
- DW 0E100h,0E0C2h,0E284h,0E346h,0E608h,0E7CAh,0E58Ch,0E44Eh
- DW 0EF10h,0EED2h,0EC94h,0ED56h,0E818h,0E9DAh,0EB9Ch,0EA5Eh
- DW 0FD20h,0FCE2h,0FEA4h,0FF66h,0FA28h,0FBEAh,0F9ACh,0F86Eh
- DW 0F330h,0F2F2h,0F0B4h,0F176h,0F438h,0F5FAh,0F7BCh,0F67Eh
- DW 0D940h,0D882h,0DAC4h,0DB06h,0DE48h,0DF8Ah,0DDCCh,0DC0Eh
- DW 0D750h,0D692h,0D4D4h,0D516h,0D058h,0D19Ah,0D3DCh,0D21Eh
- DW 0C560h,0C4A2h,0C6E4h,0C726h,0C268h,0C3AAh,0C1ECh,0C02Eh
- DW 0CB70h,0CAB2h,0C8F4h,0C936h,0CC78h,0CDBAh,0CFFCh,0CE3Eh
- DW 09180h,09042h,09204h,093C6h,09688h,0974Ah,0950Ch,094CEh
- DW 09F90h,09E52h,09C14h,09DD6h,09898h,0995Ah,09B1Ch,09ADEh
- DW 08DA0h,08C62h,08E24h,08FE6h,08AA8h,08B6Ah,0892Ch,088EEh
- DW 083B0h,08272h,08034h,081F6h,084B8h,0857Ah,0873Ch,086FEh
- DW 0A9C0h,0A802h,0AA44h,0AB86h,0AEC8h,0AF0Ah,0AD4Ch,0AC8Eh
- DW 0A7D0h,0A612h,0A454h,0A596h,0A0D8h,0A11Ah,0A35Ch,0A29Eh
- DW 0B5E0h,0B422h,0B664h,0B7A6h,0B2E8h,0B32Ah,0B16Ch,0B0AEh
- DW 0BBF0h,0BA32h,0B874h,0B9B6h,0BCF8h,0BD3Ah,0BF7Ch,0BEBEh
-
-DB 71,72,65,83,72,32,102,111,114,32,120,56,54,95,54,52
-DB 44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
-DB 60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
-DB 114,103,62,0
-ALIGN 64
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
-
- lea rax,QWORD PTR[((48+280))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_gcm_gmult_4bit
- DD imagerel $L$SEH_end_gcm_gmult_4bit
- DD imagerel $L$SEH_info_gcm_gmult_4bit
-
- DD imagerel $L$SEH_begin_gcm_ghash_4bit
- DD imagerel $L$SEH_end_gcm_ghash_4bit
- DD imagerel $L$SEH_info_gcm_ghash_4bit
-
- DD imagerel $L$SEH_begin_gcm_init_clmul
- DD imagerel $L$SEH_end_gcm_init_clmul
- DD imagerel $L$SEH_info_gcm_init_clmul
-
- DD imagerel $L$SEH_begin_gcm_ghash_clmul
- DD imagerel $L$SEH_end_gcm_ghash_clmul
- DD imagerel $L$SEH_info_gcm_ghash_clmul
- DD imagerel $L$SEH_begin_gcm_init_avx
- DD imagerel $L$SEH_end_gcm_init_avx
- DD imagerel $L$SEH_info_gcm_init_clmul
-
- DD imagerel $L$SEH_begin_gcm_ghash_avx
- DD imagerel $L$SEH_end_gcm_ghash_avx
- DD imagerel $L$SEH_info_gcm_ghash_clmul
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_gcm_gmult_4bit::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$gmult_prologue,imagerel $L$gmult_epilogue
-$L$SEH_info_gcm_ghash_4bit::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$ghash_prologue,imagerel $L$ghash_epilogue
-$L$SEH_info_gcm_init_clmul::
-DB 001h,008h,003h,000h
-DB 008h,068h,000h,000h
-DB 004h,022h,000h,000h
-$L$SEH_info_gcm_ghash_clmul::
-DB 001h,033h,016h,000h
-DB 033h,0f8h,009h,000h
-DB 02eh,0e8h,008h,000h
-DB 029h,0d8h,007h,000h
-DB 024h,0c8h,006h,000h
-DB 01fh,0b8h,005h,000h
-DB 01ah,0a8h,004h,000h
-DB 015h,098h,003h,000h
-DB 010h,088h,002h,000h
-DB 00ch,078h,001h,000h
-DB 008h,068h,000h,000h
-DB 004h,001h,015h,000h
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC gcm_gmult_4bit
+
+ALIGN 16
+gcm_gmult_4bit PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_gcm_gmult_4bit::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,280
+
+$L$gmult_prologue::
+
+ movzx r8,BYTE PTR[15+rdi]
+ lea r11,QWORD PTR[$L$rem_4bit]
+ xor rax,rax
+ xor rbx,rbx
+ mov al,r8b
+ mov bl,r8b
+ shl al,4
+ mov rcx,14
+ mov r8,QWORD PTR[8+rax*1+rsi]
+ mov r9,QWORD PTR[rax*1+rsi]
+ and bl,0f0h
+ mov rdx,r8
+ jmp $L$oop1
+
+ALIGN 16
+$L$oop1::
+ shr r8,4
+ and rdx,0fh
+ mov r10,r9
+ mov al,BYTE PTR[rcx*1+rdi]
+ shr r9,4
+ xor r8,QWORD PTR[8+rbx*1+rsi]
+ shl r10,60
+ xor r9,QWORD PTR[rbx*1+rsi]
+ mov bl,al
+ xor r9,QWORD PTR[rdx*8+r11]
+ mov rdx,r8
+ shl al,4
+ xor r8,r10
+ dec rcx
+ js $L$break1
+
+ shr r8,4
+ and rdx,0fh
+ mov r10,r9
+ shr r9,4
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ shl r10,60
+ xor r9,QWORD PTR[rax*1+rsi]
+ and bl,0f0h
+ xor r9,QWORD PTR[rdx*8+r11]
+ mov rdx,r8
+ xor r8,r10
+ jmp $L$oop1
+
+ALIGN 16
+$L$break1::
+ shr r8,4
+ and rdx,0fh
+ mov r10,r9
+ shr r9,4
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ shl r10,60
+ xor r9,QWORD PTR[rax*1+rsi]
+ and bl,0f0h
+ xor r9,QWORD PTR[rdx*8+r11]
+ mov rdx,r8
+ xor r8,r10
+
+ shr r8,4
+ and rdx,0fh
+ mov r10,r9
+ shr r9,4
+ xor r8,QWORD PTR[8+rbx*1+rsi]
+ shl r10,60
+ xor r9,QWORD PTR[rbx*1+rsi]
+ xor r8,r10
+ xor r9,QWORD PTR[rdx*8+r11]
+
+ bswap r8
+ bswap r9
+ mov QWORD PTR[8+rdi],r8
+ mov QWORD PTR[rdi],r9
+
+ lea rsi,QWORD PTR[((280+48))+rsp]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$gmult_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_gcm_gmult_4bit::
+gcm_gmult_4bit ENDP
+PUBLIC gcm_ghash_4bit
+
+ALIGN 16
+gcm_ghash_4bit PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_gcm_ghash_4bit::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,280
+
+$L$ghash_prologue::
+ mov r14,rdx
+ mov r15,rcx
+ sub rsi,-128
+ lea rbp,QWORD PTR[((16+128))+rsp]
+ xor edx,edx
+ mov r8,QWORD PTR[((0+0-128))+rsi]
+ mov rax,QWORD PTR[((0+8-128))+rsi]
+ mov dl,al
+ shr rax,4
+ mov r10,r8
+ shr r8,4
+ mov r9,QWORD PTR[((16+0-128))+rsi]
+ shl dl,4
+ mov rbx,QWORD PTR[((16+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[rsp],dl
+ or rax,r10
+ mov dl,bl
+ shr rbx,4
+ mov r10,r9
+ shr r9,4
+ mov QWORD PTR[rbp],r8
+ mov r8,QWORD PTR[((32+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((0-128))+rbp],rax
+ mov rax,QWORD PTR[((32+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[1+rsp],dl
+ or rbx,r10
+ mov dl,al
+ shr rax,4
+ mov r10,r8
+ shr r8,4
+ mov QWORD PTR[8+rbp],r9
+ mov r9,QWORD PTR[((48+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((8-128))+rbp],rbx
+ mov rbx,QWORD PTR[((48+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[2+rsp],dl
+ or rax,r10
+ mov dl,bl
+ shr rbx,4
+ mov r10,r9
+ shr r9,4
+ mov QWORD PTR[16+rbp],r8
+ mov r8,QWORD PTR[((64+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((16-128))+rbp],rax
+ mov rax,QWORD PTR[((64+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[3+rsp],dl
+ or rbx,r10
+ mov dl,al
+ shr rax,4
+ mov r10,r8
+ shr r8,4
+ mov QWORD PTR[24+rbp],r9
+ mov r9,QWORD PTR[((80+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((24-128))+rbp],rbx
+ mov rbx,QWORD PTR[((80+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[4+rsp],dl
+ or rax,r10
+ mov dl,bl
+ shr rbx,4
+ mov r10,r9
+ shr r9,4
+ mov QWORD PTR[32+rbp],r8
+ mov r8,QWORD PTR[((96+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((32-128))+rbp],rax
+ mov rax,QWORD PTR[((96+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[5+rsp],dl
+ or rbx,r10
+ mov dl,al
+ shr rax,4
+ mov r10,r8
+ shr r8,4
+ mov QWORD PTR[40+rbp],r9
+ mov r9,QWORD PTR[((112+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((40-128))+rbp],rbx
+ mov rbx,QWORD PTR[((112+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[6+rsp],dl
+ or rax,r10
+ mov dl,bl
+ shr rbx,4
+ mov r10,r9
+ shr r9,4
+ mov QWORD PTR[48+rbp],r8
+ mov r8,QWORD PTR[((128+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((48-128))+rbp],rax
+ mov rax,QWORD PTR[((128+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[7+rsp],dl
+ or rbx,r10
+ mov dl,al
+ shr rax,4
+ mov r10,r8
+ shr r8,4
+ mov QWORD PTR[56+rbp],r9
+ mov r9,QWORD PTR[((144+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((56-128))+rbp],rbx
+ mov rbx,QWORD PTR[((144+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[8+rsp],dl
+ or rax,r10
+ mov dl,bl
+ shr rbx,4
+ mov r10,r9
+ shr r9,4
+ mov QWORD PTR[64+rbp],r8
+ mov r8,QWORD PTR[((160+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((64-128))+rbp],rax
+ mov rax,QWORD PTR[((160+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[9+rsp],dl
+ or rbx,r10
+ mov dl,al
+ shr rax,4
+ mov r10,r8
+ shr r8,4
+ mov QWORD PTR[72+rbp],r9
+ mov r9,QWORD PTR[((176+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((72-128))+rbp],rbx
+ mov rbx,QWORD PTR[((176+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[10+rsp],dl
+ or rax,r10
+ mov dl,bl
+ shr rbx,4
+ mov r10,r9
+ shr r9,4
+ mov QWORD PTR[80+rbp],r8
+ mov r8,QWORD PTR[((192+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((80-128))+rbp],rax
+ mov rax,QWORD PTR[((192+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[11+rsp],dl
+ or rbx,r10
+ mov dl,al
+ shr rax,4
+ mov r10,r8
+ shr r8,4
+ mov QWORD PTR[88+rbp],r9
+ mov r9,QWORD PTR[((208+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((88-128))+rbp],rbx
+ mov rbx,QWORD PTR[((208+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[12+rsp],dl
+ or rax,r10
+ mov dl,bl
+ shr rbx,4
+ mov r10,r9
+ shr r9,4
+ mov QWORD PTR[96+rbp],r8
+ mov r8,QWORD PTR[((224+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((96-128))+rbp],rax
+ mov rax,QWORD PTR[((224+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[13+rsp],dl
+ or rbx,r10
+ mov dl,al
+ shr rax,4
+ mov r10,r8
+ shr r8,4
+ mov QWORD PTR[104+rbp],r9
+ mov r9,QWORD PTR[((240+0-128))+rsi]
+ shl dl,4
+ mov QWORD PTR[((104-128))+rbp],rbx
+ mov rbx,QWORD PTR[((240+8-128))+rsi]
+ shl r10,60
+ mov BYTE PTR[14+rsp],dl
+ or rax,r10
+ mov dl,bl
+ shr rbx,4
+ mov r10,r9
+ shr r9,4
+ mov QWORD PTR[112+rbp],r8
+ shl dl,4
+ mov QWORD PTR[((112-128))+rbp],rax
+ shl r10,60
+ mov BYTE PTR[15+rsp],dl
+ or rbx,r10
+ mov QWORD PTR[120+rbp],r9
+ mov QWORD PTR[((120-128))+rbp],rbx
+ add rsi,-128
+ mov r8,QWORD PTR[8+rdi]
+ mov r9,QWORD PTR[rdi]
+ add r15,r14
+ lea r11,QWORD PTR[$L$rem_8bit]
+ jmp $L$outer_loop
+ALIGN 16
+$L$outer_loop::
+ xor r9,QWORD PTR[r14]
+ mov rdx,QWORD PTR[8+r14]
+ lea r14,QWORD PTR[16+r14]
+ xor rdx,r8
+ mov QWORD PTR[rdi],r9
+ mov QWORD PTR[8+rdi],rdx
+ shr rdx,32
+ xor rax,rax
+ rol edx,8
+ mov al,dl
+ movzx ebx,dl
+ shl al,4
+ shr ebx,4
+ rol edx,8
+ mov r8,QWORD PTR[8+rax*1+rsi]
+ mov r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ movzx ecx,dl
+ shl al,4
+ movzx r12,BYTE PTR[rbx*1+rsp]
+ shr ecx,4
+ xor r12,r8
+ mov r10,r9
+ shr r8,8
+ movzx r12,r12b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rbx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rbx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r12,WORD PTR[r12*2+r11]
+ movzx ebx,dl
+ shl al,4
+ movzx r13,BYTE PTR[rcx*1+rsp]
+ shr ebx,4
+ shl r12,48
+ xor r13,r8
+ mov r10,r9
+ xor r9,r12
+ shr r8,8
+ movzx r13,r13b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rcx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rcx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r13,WORD PTR[r13*2+r11]
+ movzx ecx,dl
+ shl al,4
+ movzx r12,BYTE PTR[rbx*1+rsp]
+ shr ecx,4
+ shl r13,48
+ xor r12,r8
+ mov r10,r9
+ xor r9,r13
+ shr r8,8
+ movzx r12,r12b
+ mov edx,DWORD PTR[8+rdi]
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rbx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rbx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r12,WORD PTR[r12*2+r11]
+ movzx ebx,dl
+ shl al,4
+ movzx r13,BYTE PTR[rcx*1+rsp]
+ shr ebx,4
+ shl r12,48
+ xor r13,r8
+ mov r10,r9
+ xor r9,r12
+ shr r8,8
+ movzx r13,r13b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rcx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rcx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r13,WORD PTR[r13*2+r11]
+ movzx ecx,dl
+ shl al,4
+ movzx r12,BYTE PTR[rbx*1+rsp]
+ shr ecx,4
+ shl r13,48
+ xor r12,r8
+ mov r10,r9
+ xor r9,r13
+ shr r8,8
+ movzx r12,r12b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rbx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rbx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r12,WORD PTR[r12*2+r11]
+ movzx ebx,dl
+ shl al,4
+ movzx r13,BYTE PTR[rcx*1+rsp]
+ shr ebx,4
+ shl r12,48
+ xor r13,r8
+ mov r10,r9
+ xor r9,r12
+ shr r8,8
+ movzx r13,r13b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rcx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rcx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r13,WORD PTR[r13*2+r11]
+ movzx ecx,dl
+ shl al,4
+ movzx r12,BYTE PTR[rbx*1+rsp]
+ shr ecx,4
+ shl r13,48
+ xor r12,r8
+ mov r10,r9
+ xor r9,r13
+ shr r8,8
+ movzx r12,r12b
+ mov edx,DWORD PTR[4+rdi]
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rbx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rbx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r12,WORD PTR[r12*2+r11]
+ movzx ebx,dl
+ shl al,4
+ movzx r13,BYTE PTR[rcx*1+rsp]
+ shr ebx,4
+ shl r12,48
+ xor r13,r8
+ mov r10,r9
+ xor r9,r12
+ shr r8,8
+ movzx r13,r13b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rcx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rcx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r13,WORD PTR[r13*2+r11]
+ movzx ecx,dl
+ shl al,4
+ movzx r12,BYTE PTR[rbx*1+rsp]
+ shr ecx,4
+ shl r13,48
+ xor r12,r8
+ mov r10,r9
+ xor r9,r13
+ shr r8,8
+ movzx r12,r12b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rbx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rbx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r12,WORD PTR[r12*2+r11]
+ movzx ebx,dl
+ shl al,4
+ movzx r13,BYTE PTR[rcx*1+rsp]
+ shr ebx,4
+ shl r12,48
+ xor r13,r8
+ mov r10,r9
+ xor r9,r12
+ shr r8,8
+ movzx r13,r13b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rcx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rcx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r13,WORD PTR[r13*2+r11]
+ movzx ecx,dl
+ shl al,4
+ movzx r12,BYTE PTR[rbx*1+rsp]
+ shr ecx,4
+ shl r13,48
+ xor r12,r8
+ mov r10,r9
+ xor r9,r13
+ shr r8,8
+ movzx r12,r12b
+ mov edx,DWORD PTR[rdi]
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rbx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rbx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r12,WORD PTR[r12*2+r11]
+ movzx ebx,dl
+ shl al,4
+ movzx r13,BYTE PTR[rcx*1+rsp]
+ shr ebx,4
+ shl r12,48
+ xor r13,r8
+ mov r10,r9
+ xor r9,r12
+ shr r8,8
+ movzx r13,r13b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rcx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rcx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r13,WORD PTR[r13*2+r11]
+ movzx ecx,dl
+ shl al,4
+ movzx r12,BYTE PTR[rbx*1+rsp]
+ shr ecx,4
+ shl r13,48
+ xor r12,r8
+ mov r10,r9
+ xor r9,r13
+ shr r8,8
+ movzx r12,r12b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rbx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rbx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r12,WORD PTR[r12*2+r11]
+ movzx ebx,dl
+ shl al,4
+ movzx r13,BYTE PTR[rcx*1+rsp]
+ shr ebx,4
+ shl r12,48
+ xor r13,r8
+ mov r10,r9
+ xor r9,r12
+ shr r8,8
+ movzx r13,r13b
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rcx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rcx*8+rbp]
+ rol edx,8
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ mov al,dl
+ xor r8,r10
+ movzx r13,WORD PTR[r13*2+r11]
+ movzx ecx,dl
+ shl al,4
+ movzx r12,BYTE PTR[rbx*1+rsp]
+ and ecx,240
+ shl r13,48
+ xor r12,r8
+ mov r10,r9
+ xor r9,r13
+ shr r8,8
+ movzx r12,r12b
+ mov edx,DWORD PTR[((-4))+rdi]
+ shr r9,8
+ xor r8,QWORD PTR[((-128))+rbx*8+rbp]
+ shl r10,56
+ xor r9,QWORD PTR[rbx*8+rbp]
+ movzx r12,WORD PTR[r12*2+r11]
+ xor r8,QWORD PTR[8+rax*1+rsi]
+ xor r9,QWORD PTR[rax*1+rsi]
+ shl r12,48
+ xor r8,r10
+ xor r9,r12
+ movzx r13,r8b
+ shr r8,4
+ mov r10,r9
+ shl r13b,4
+ shr r9,4
+ xor r8,QWORD PTR[8+rcx*1+rsi]
+ movzx r13,WORD PTR[r13*2+r11]
+ shl r10,60
+ xor r9,QWORD PTR[rcx*1+rsi]
+ xor r8,r10
+ shl r13,48
+ bswap r8
+ xor r9,r13
+ bswap r9
+ cmp r14,r15
+ jb $L$outer_loop
+ mov QWORD PTR[8+rdi],r8
+ mov QWORD PTR[rdi],r9
+
+ lea rsi,QWORD PTR[((280+48))+rsp]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$ghash_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_gcm_ghash_4bit::
+gcm_ghash_4bit ENDP
+PUBLIC gcm_init_clmul
+
+ALIGN 16
+gcm_init_clmul PROC PUBLIC
+
+$L$_init_clmul::
+$L$SEH_begin_gcm_init_clmul::
+
+DB 048h,083h,0ech,018h
+DB 00fh,029h,034h,024h
+ movdqu xmm2,XMMWORD PTR[rdx]
+ pshufd xmm2,xmm2,78
+
+
+ pshufd xmm4,xmm2,255
+ movdqa xmm3,xmm2
+ psllq xmm2,1
+ pxor xmm5,xmm5
+ psrlq xmm3,63
+ pcmpgtd xmm5,xmm4
+ pslldq xmm3,8
+ por xmm2,xmm3
+
+
+ pand xmm5,XMMWORD PTR[$L$0x1c2_polynomial]
+ pxor xmm2,xmm5
+
+
+ pshufd xmm6,xmm2,78
+ movdqa xmm0,xmm2
+ pxor xmm6,xmm2
+ movdqa xmm1,xmm0
+ pshufd xmm3,xmm0,78
+ pxor xmm3,xmm0
+DB 102,15,58,68,194,0
+DB 102,15,58,68,202,17
+DB 102,15,58,68,222,0
+ pxor xmm3,xmm0
+ pxor xmm3,xmm1
+
+ movdqa xmm4,xmm3
+ psrldq xmm3,8
+ pslldq xmm4,8
+ pxor xmm1,xmm3
+ pxor xmm0,xmm4
+
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+
+
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+ pshufd xmm3,xmm2,78
+ pshufd xmm4,xmm0,78
+ pxor xmm3,xmm2
+ movdqu XMMWORD PTR[rcx],xmm2
+ pxor xmm4,xmm0
+ movdqu XMMWORD PTR[16+rcx],xmm0
+DB 102,15,58,15,227,8
+ movdqu XMMWORD PTR[32+rcx],xmm4
+ movdqa xmm1,xmm0
+ pshufd xmm3,xmm0,78
+ pxor xmm3,xmm0
+DB 102,15,58,68,194,0
+DB 102,15,58,68,202,17
+DB 102,15,58,68,222,0
+ pxor xmm3,xmm0
+ pxor xmm3,xmm1
+
+ movdqa xmm4,xmm3
+ psrldq xmm3,8
+ pslldq xmm4,8
+ pxor xmm1,xmm3
+ pxor xmm0,xmm4
+
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+
+
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+ movdqa xmm5,xmm0
+ movdqa xmm1,xmm0
+ pshufd xmm3,xmm0,78
+ pxor xmm3,xmm0
+DB 102,15,58,68,194,0
+DB 102,15,58,68,202,17
+DB 102,15,58,68,222,0
+ pxor xmm3,xmm0
+ pxor xmm3,xmm1
+
+ movdqa xmm4,xmm3
+ psrldq xmm3,8
+ pslldq xmm4,8
+ pxor xmm1,xmm3
+ pxor xmm0,xmm4
+
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+
+
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+ pshufd xmm3,xmm5,78
+ pshufd xmm4,xmm0,78
+ pxor xmm3,xmm5
+ movdqu XMMWORD PTR[48+rcx],xmm5
+ pxor xmm4,xmm0
+ movdqu XMMWORD PTR[64+rcx],xmm0
+DB 102,15,58,15,227,8
+ movdqu XMMWORD PTR[80+rcx],xmm4
+ movaps xmm6,XMMWORD PTR[rsp]
+ lea rsp,QWORD PTR[24+rsp]
+$L$SEH_end_gcm_init_clmul::
+ DB 0F3h,0C3h ;repret
+
+gcm_init_clmul ENDP
+PUBLIC gcm_gmult_clmul
+
+ALIGN 16
+gcm_gmult_clmul PROC PUBLIC
+
+$L$_gmult_clmul::
+ movdqu xmm0,XMMWORD PTR[rcx]
+ movdqa xmm5,XMMWORD PTR[$L$bswap_mask]
+ movdqu xmm2,XMMWORD PTR[rdx]
+ movdqu xmm4,XMMWORD PTR[32+rdx]
+DB 102,15,56,0,197
+ movdqa xmm1,xmm0
+ pshufd xmm3,xmm0,78
+ pxor xmm3,xmm0
+DB 102,15,58,68,194,0
+DB 102,15,58,68,202,17
+DB 102,15,58,68,220,0
+ pxor xmm3,xmm0
+ pxor xmm3,xmm1
+
+ movdqa xmm4,xmm3
+ psrldq xmm3,8
+ pslldq xmm4,8
+ pxor xmm1,xmm3
+ pxor xmm0,xmm4
+
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+
+
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+DB 102,15,56,0,197
+ movdqu XMMWORD PTR[rcx],xmm0
+ DB 0F3h,0C3h ;repret
+
+gcm_gmult_clmul ENDP
+PUBLIC gcm_ghash_clmul
+
+ALIGN 32
+gcm_ghash_clmul PROC PUBLIC
+
+$L$_ghash_clmul::
+ lea rax,QWORD PTR[((-136))+rsp]
+$L$SEH_begin_gcm_ghash_clmul::
+
+DB 048h,08dh,060h,0e0h
+DB 00fh,029h,070h,0e0h
+DB 00fh,029h,078h,0f0h
+DB 044h,00fh,029h,000h
+DB 044h,00fh,029h,048h,010h
+DB 044h,00fh,029h,050h,020h
+DB 044h,00fh,029h,058h,030h
+DB 044h,00fh,029h,060h,040h
+DB 044h,00fh,029h,068h,050h
+DB 044h,00fh,029h,070h,060h
+DB 044h,00fh,029h,078h,070h
+ movdqa xmm10,XMMWORD PTR[$L$bswap_mask]
+
+ movdqu xmm0,XMMWORD PTR[rcx]
+ movdqu xmm2,XMMWORD PTR[rdx]
+ movdqu xmm7,XMMWORD PTR[32+rdx]
+DB 102,65,15,56,0,194
+
+ sub r9,010h
+ jz $L$odd_tail
+
+ movdqu xmm6,XMMWORD PTR[16+rdx]
+ mov eax,DWORD PTR[((OPENSSL_ia32cap_P+4))]
+ cmp r9,030h
+ jb $L$skip4x
+
+ and eax,71303168
+ cmp eax,4194304
+ je $L$skip4x
+
+ sub r9,030h
+ mov rax,0A040608020C0E000h
+ movdqu xmm14,XMMWORD PTR[48+rdx]
+ movdqu xmm15,XMMWORD PTR[64+rdx]
+
+
+
+
+ movdqu xmm3,XMMWORD PTR[48+r8]
+ movdqu xmm11,XMMWORD PTR[32+r8]
+DB 102,65,15,56,0,218
+DB 102,69,15,56,0,218
+ movdqa xmm5,xmm3
+ pshufd xmm4,xmm3,78
+ pxor xmm4,xmm3
+DB 102,15,58,68,218,0
+DB 102,15,58,68,234,17
+DB 102,15,58,68,231,0
+
+ movdqa xmm13,xmm11
+ pshufd xmm12,xmm11,78
+ pxor xmm12,xmm11
+DB 102,68,15,58,68,222,0
+DB 102,68,15,58,68,238,17
+DB 102,68,15,58,68,231,16
+ xorps xmm3,xmm11
+ xorps xmm5,xmm13
+ movups xmm7,XMMWORD PTR[80+rdx]
+ xorps xmm4,xmm12
+
+ movdqu xmm11,XMMWORD PTR[16+r8]
+ movdqu xmm8,XMMWORD PTR[r8]
+DB 102,69,15,56,0,218
+DB 102,69,15,56,0,194
+ movdqa xmm13,xmm11
+ pshufd xmm12,xmm11,78
+ pxor xmm0,xmm8
+ pxor xmm12,xmm11
+DB 102,69,15,58,68,222,0
+ movdqa xmm1,xmm0
+ pshufd xmm8,xmm0,78
+ pxor xmm8,xmm0
+DB 102,69,15,58,68,238,17
+DB 102,68,15,58,68,231,0
+ xorps xmm3,xmm11
+ xorps xmm5,xmm13
+
+ lea r8,QWORD PTR[64+r8]
+ sub r9,040h
+ jc $L$tail4x
+
+ jmp $L$mod4_loop
+ALIGN 32
+$L$mod4_loop::
+DB 102,65,15,58,68,199,0
+ xorps xmm4,xmm12
+ movdqu xmm11,XMMWORD PTR[48+r8]
+DB 102,69,15,56,0,218
+DB 102,65,15,58,68,207,17
+ xorps xmm0,xmm3
+ movdqu xmm3,XMMWORD PTR[32+r8]
+ movdqa xmm13,xmm11
+DB 102,68,15,58,68,199,16
+ pshufd xmm12,xmm11,78
+ xorps xmm1,xmm5
+ pxor xmm12,xmm11
+DB 102,65,15,56,0,218
+ movups xmm7,XMMWORD PTR[32+rdx]
+ xorps xmm8,xmm4
+DB 102,68,15,58,68,218,0
+ pshufd xmm4,xmm3,78
+
+ pxor xmm8,xmm0
+ movdqa xmm5,xmm3
+ pxor xmm8,xmm1
+ pxor xmm4,xmm3
+ movdqa xmm9,xmm8
+DB 102,68,15,58,68,234,17
+ pslldq xmm8,8
+ psrldq xmm9,8
+ pxor xmm0,xmm8
+ movdqa xmm8,XMMWORD PTR[$L$7_mask]
+ pxor xmm1,xmm9
+DB 102,76,15,110,200
+
+ pand xmm8,xmm0
+DB 102,69,15,56,0,200
+ pxor xmm9,xmm0
+DB 102,68,15,58,68,231,0
+ psllq xmm9,57
+ movdqa xmm8,xmm9
+ pslldq xmm9,8
+DB 102,15,58,68,222,0
+ psrldq xmm8,8
+ pxor xmm0,xmm9
+ pxor xmm1,xmm8
+ movdqu xmm8,XMMWORD PTR[r8]
+
+ movdqa xmm9,xmm0
+ psrlq xmm0,1
+DB 102,15,58,68,238,17
+ xorps xmm3,xmm11
+ movdqu xmm11,XMMWORD PTR[16+r8]
+DB 102,69,15,56,0,218
+DB 102,15,58,68,231,16
+ xorps xmm5,xmm13
+ movups xmm7,XMMWORD PTR[80+rdx]
+DB 102,69,15,56,0,194
+ pxor xmm1,xmm9
+ pxor xmm9,xmm0
+ psrlq xmm0,5
+
+ movdqa xmm13,xmm11
+ pxor xmm4,xmm12
+ pshufd xmm12,xmm11,78
+ pxor xmm0,xmm9
+ pxor xmm1,xmm8
+ pxor xmm12,xmm11
+DB 102,69,15,58,68,222,0
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+ movdqa xmm1,xmm0
+DB 102,69,15,58,68,238,17
+ xorps xmm3,xmm11
+ pshufd xmm8,xmm0,78
+ pxor xmm8,xmm0
+
+DB 102,68,15,58,68,231,0
+ xorps xmm5,xmm13
+
+ lea r8,QWORD PTR[64+r8]
+ sub r9,040h
+ jnc $L$mod4_loop
+
+$L$tail4x::
+DB 102,65,15,58,68,199,0
+DB 102,65,15,58,68,207,17
+DB 102,68,15,58,68,199,16
+ xorps xmm4,xmm12
+ xorps xmm0,xmm3
+ xorps xmm1,xmm5
+ pxor xmm1,xmm0
+ pxor xmm8,xmm4
+
+ pxor xmm8,xmm1
+ pxor xmm1,xmm0
+
+ movdqa xmm9,xmm8
+ psrldq xmm8,8
+ pslldq xmm9,8
+ pxor xmm1,xmm8
+ pxor xmm0,xmm9
+
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+
+
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+ add r9,040h
+ jz $L$done
+ movdqu xmm7,XMMWORD PTR[32+rdx]
+ sub r9,010h
+ jz $L$odd_tail
+$L$skip4x::
+
+
+
+
+
+ movdqu xmm8,XMMWORD PTR[r8]
+ movdqu xmm3,XMMWORD PTR[16+r8]
+DB 102,69,15,56,0,194
+DB 102,65,15,56,0,218
+ pxor xmm0,xmm8
+
+ movdqa xmm5,xmm3
+ pshufd xmm4,xmm3,78
+ pxor xmm4,xmm3
+DB 102,15,58,68,218,0
+DB 102,15,58,68,234,17
+DB 102,15,58,68,231,0
+
+ lea r8,QWORD PTR[32+r8]
+ nop
+ sub r9,020h
+ jbe $L$even_tail
+ nop
+ jmp $L$mod_loop
+
+ALIGN 32
+$L$mod_loop::
+ movdqa xmm1,xmm0
+ movdqa xmm8,xmm4
+ pshufd xmm4,xmm0,78
+ pxor xmm4,xmm0
+
+DB 102,15,58,68,198,0
+DB 102,15,58,68,206,17
+DB 102,15,58,68,231,16
+
+ pxor xmm0,xmm3
+ pxor xmm1,xmm5
+ movdqu xmm9,XMMWORD PTR[r8]
+ pxor xmm8,xmm0
+DB 102,69,15,56,0,202
+ movdqu xmm3,XMMWORD PTR[16+r8]
+
+ pxor xmm8,xmm1
+ pxor xmm1,xmm9
+ pxor xmm4,xmm8
+DB 102,65,15,56,0,218
+ movdqa xmm8,xmm4
+ psrldq xmm8,8
+ pslldq xmm4,8
+ pxor xmm1,xmm8
+ pxor xmm0,xmm4
+
+ movdqa xmm5,xmm3
+
+ movdqa xmm9,xmm0
+ movdqa xmm8,xmm0
+ psllq xmm0,5
+ pxor xmm8,xmm0
+DB 102,15,58,68,218,0
+ psllq xmm0,1
+ pxor xmm0,xmm8
+ psllq xmm0,57
+ movdqa xmm8,xmm0
+ pslldq xmm0,8
+ psrldq xmm8,8
+ pxor xmm0,xmm9
+ pshufd xmm4,xmm5,78
+ pxor xmm1,xmm8
+ pxor xmm4,xmm5
+
+ movdqa xmm9,xmm0
+ psrlq xmm0,1
+DB 102,15,58,68,234,17
+ pxor xmm1,xmm9
+ pxor xmm9,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm9
+ lea r8,QWORD PTR[32+r8]
+ psrlq xmm0,1
+DB 102,15,58,68,231,0
+ pxor xmm0,xmm1
+
+ sub r9,020h
+ ja $L$mod_loop
+
+$L$even_tail::
+ movdqa xmm1,xmm0
+ movdqa xmm8,xmm4
+ pshufd xmm4,xmm0,78
+ pxor xmm4,xmm0
+
+DB 102,15,58,68,198,0
+DB 102,15,58,68,206,17
+DB 102,15,58,68,231,16
+
+ pxor xmm0,xmm3
+ pxor xmm1,xmm5
+ pxor xmm8,xmm0
+ pxor xmm8,xmm1
+ pxor xmm4,xmm8
+ movdqa xmm8,xmm4
+ psrldq xmm8,8
+ pslldq xmm4,8
+ pxor xmm1,xmm8
+ pxor xmm0,xmm4
+
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+
+
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+ test r9,r9
+ jnz $L$done
+
+$L$odd_tail::
+ movdqu xmm8,XMMWORD PTR[r8]
+DB 102,69,15,56,0,194
+ pxor xmm0,xmm8
+ movdqa xmm1,xmm0
+ pshufd xmm3,xmm0,78
+ pxor xmm3,xmm0
+DB 102,15,58,68,194,0
+DB 102,15,58,68,202,17
+DB 102,15,58,68,223,0
+ pxor xmm3,xmm0
+ pxor xmm3,xmm1
+
+ movdqa xmm4,xmm3
+ psrldq xmm3,8
+ pslldq xmm4,8
+ pxor xmm1,xmm3
+ pxor xmm0,xmm4
+
+ movdqa xmm4,xmm0
+ movdqa xmm3,xmm0
+ psllq xmm0,5
+ pxor xmm3,xmm0
+ psllq xmm0,1
+ pxor xmm0,xmm3
+ psllq xmm0,57
+ movdqa xmm3,xmm0
+ pslldq xmm0,8
+ psrldq xmm3,8
+ pxor xmm0,xmm4
+ pxor xmm1,xmm3
+
+
+ movdqa xmm4,xmm0
+ psrlq xmm0,1
+ pxor xmm1,xmm4
+ pxor xmm4,xmm0
+ psrlq xmm0,5
+ pxor xmm0,xmm4
+ psrlq xmm0,1
+ pxor xmm0,xmm1
+$L$done::
+DB 102,65,15,56,0,194
+ movdqu XMMWORD PTR[rcx],xmm0
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps xmm10,XMMWORD PTR[64+rsp]
+ movaps xmm11,XMMWORD PTR[80+rsp]
+ movaps xmm12,XMMWORD PTR[96+rsp]
+ movaps xmm13,XMMWORD PTR[112+rsp]
+ movaps xmm14,XMMWORD PTR[128+rsp]
+ movaps xmm15,XMMWORD PTR[144+rsp]
+ lea rsp,QWORD PTR[168+rsp]
+$L$SEH_end_gcm_ghash_clmul::
+ DB 0F3h,0C3h ;repret
+
+gcm_ghash_clmul ENDP
+PUBLIC gcm_init_avx
+
+ALIGN 32
+gcm_init_avx PROC PUBLIC
+
+$L$SEH_begin_gcm_init_avx::
+
+DB 048h,083h,0ech,018h
+DB 00fh,029h,034h,024h
+ vzeroupper
+
+ vmovdqu xmm2,XMMWORD PTR[rdx]
+ vpshufd xmm2,xmm2,78
+
+
+ vpshufd xmm4,xmm2,255
+ vpsrlq xmm3,xmm2,63
+ vpsllq xmm2,xmm2,1
+ vpxor xmm5,xmm5,xmm5
+ vpcmpgtd xmm5,xmm5,xmm4
+ vpslldq xmm3,xmm3,8
+ vpor xmm2,xmm2,xmm3
+
+
+ vpand xmm5,xmm5,XMMWORD PTR[$L$0x1c2_polynomial]
+ vpxor xmm2,xmm2,xmm5
+
+ vpunpckhqdq xmm6,xmm2,xmm2
+ vmovdqa xmm0,xmm2
+ vpxor xmm6,xmm6,xmm2
+ mov r10,4
+ jmp $L$init_start_avx
+ALIGN 32
+$L$init_loop_avx::
+ vpalignr xmm5,xmm4,xmm3,8
+ vmovdqu XMMWORD PTR[(-16)+rcx],xmm5
+ vpunpckhqdq xmm3,xmm0,xmm0
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm1,xmm0,xmm2,011h
+ vpclmulqdq xmm0,xmm0,xmm2,000h
+ vpclmulqdq xmm3,xmm3,xmm6,000h
+ vpxor xmm4,xmm1,xmm0
+ vpxor xmm3,xmm3,xmm4
+
+ vpslldq xmm4,xmm3,8
+ vpsrldq xmm3,xmm3,8
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm1,xmm1,xmm3
+ vpsllq xmm3,xmm0,57
+ vpsllq xmm4,xmm0,62
+ vpxor xmm4,xmm4,xmm3
+ vpsllq xmm3,xmm0,63
+ vpxor xmm4,xmm4,xmm3
+ vpslldq xmm3,xmm4,8
+ vpsrldq xmm4,xmm4,8
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm1,xmm1,xmm4
+
+ vpsrlq xmm4,xmm0,1
+ vpxor xmm1,xmm1,xmm0
+ vpxor xmm0,xmm0,xmm4
+ vpsrlq xmm4,xmm4,5
+ vpxor xmm0,xmm0,xmm4
+ vpsrlq xmm0,xmm0,1
+ vpxor xmm0,xmm0,xmm1
+$L$init_start_avx::
+ vmovdqa xmm5,xmm0
+ vpunpckhqdq xmm3,xmm0,xmm0
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm1,xmm0,xmm2,011h
+ vpclmulqdq xmm0,xmm0,xmm2,000h
+ vpclmulqdq xmm3,xmm3,xmm6,000h
+ vpxor xmm4,xmm1,xmm0
+ vpxor xmm3,xmm3,xmm4
+
+ vpslldq xmm4,xmm3,8
+ vpsrldq xmm3,xmm3,8
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm1,xmm1,xmm3
+ vpsllq xmm3,xmm0,57
+ vpsllq xmm4,xmm0,62
+ vpxor xmm4,xmm4,xmm3
+ vpsllq xmm3,xmm0,63
+ vpxor xmm4,xmm4,xmm3
+ vpslldq xmm3,xmm4,8
+ vpsrldq xmm4,xmm4,8
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm1,xmm1,xmm4
+
+ vpsrlq xmm4,xmm0,1
+ vpxor xmm1,xmm1,xmm0
+ vpxor xmm0,xmm0,xmm4
+ vpsrlq xmm4,xmm4,5
+ vpxor xmm0,xmm0,xmm4
+ vpsrlq xmm0,xmm0,1
+ vpxor xmm0,xmm0,xmm1
+ vpshufd xmm3,xmm5,78
+ vpshufd xmm4,xmm0,78
+ vpxor xmm3,xmm3,xmm5
+ vmovdqu XMMWORD PTR[rcx],xmm5
+ vpxor xmm4,xmm4,xmm0
+ vmovdqu XMMWORD PTR[16+rcx],xmm0
+ lea rcx,QWORD PTR[48+rcx]
+ sub r10,1
+ jnz $L$init_loop_avx
+
+ vpalignr xmm5,xmm3,xmm4,8
+ vmovdqu XMMWORD PTR[(-16)+rcx],xmm5
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[rsp]
+ lea rsp,QWORD PTR[24+rsp]
+$L$SEH_end_gcm_init_avx::
+ DB 0F3h,0C3h ;repret
+
+gcm_init_avx ENDP
+PUBLIC gcm_gmult_avx
+
+ALIGN 32
+gcm_gmult_avx PROC PUBLIC
+
+ jmp $L$_gmult_clmul
+
+gcm_gmult_avx ENDP
+PUBLIC gcm_ghash_avx
+
+ALIGN 32
+gcm_ghash_avx PROC PUBLIC
+
+ lea rax,QWORD PTR[((-136))+rsp]
+$L$SEH_begin_gcm_ghash_avx::
+
+DB 048h,08dh,060h,0e0h
+DB 00fh,029h,070h,0e0h
+DB 00fh,029h,078h,0f0h
+DB 044h,00fh,029h,000h
+DB 044h,00fh,029h,048h,010h
+DB 044h,00fh,029h,050h,020h
+DB 044h,00fh,029h,058h,030h
+DB 044h,00fh,029h,060h,040h
+DB 044h,00fh,029h,068h,050h
+DB 044h,00fh,029h,070h,060h
+DB 044h,00fh,029h,078h,070h
+ vzeroupper
+
+ vmovdqu xmm10,XMMWORD PTR[rcx]
+ lea r10,QWORD PTR[$L$0x1c2_polynomial]
+ lea rdx,QWORD PTR[64+rdx]
+ vmovdqu xmm13,XMMWORD PTR[$L$bswap_mask]
+ vpshufb xmm10,xmm10,xmm13
+ cmp r9,080h
+ jb $L$short_avx
+ sub r9,080h
+
+ vmovdqu xmm14,XMMWORD PTR[112+r8]
+ vmovdqu xmm6,XMMWORD PTR[((0-64))+rdx]
+ vpshufb xmm14,xmm14,xmm13
+ vmovdqu xmm7,XMMWORD PTR[((32-64))+rdx]
+
+ vpunpckhqdq xmm9,xmm14,xmm14
+ vmovdqu xmm15,XMMWORD PTR[96+r8]
+ vpclmulqdq xmm0,xmm14,xmm6,000h
+ vpxor xmm9,xmm9,xmm14
+ vpshufb xmm15,xmm15,xmm13
+ vpclmulqdq xmm1,xmm14,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((16-64))+rdx]
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vmovdqu xmm14,XMMWORD PTR[80+r8]
+ vpclmulqdq xmm2,xmm9,xmm7,000h
+ vpxor xmm8,xmm8,xmm15
+
+ vpshufb xmm14,xmm14,xmm13
+ vpclmulqdq xmm3,xmm15,xmm6,000h
+ vpunpckhqdq xmm9,xmm14,xmm14
+ vpclmulqdq xmm4,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((48-64))+rdx]
+ vpxor xmm9,xmm9,xmm14
+ vmovdqu xmm15,XMMWORD PTR[64+r8]
+ vpclmulqdq xmm5,xmm8,xmm7,010h
+ vmovdqu xmm7,XMMWORD PTR[((80-64))+rdx]
+
+ vpshufb xmm15,xmm15,xmm13
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm0,xmm14,xmm6,000h
+ vpxor xmm4,xmm4,xmm1
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpclmulqdq xmm1,xmm14,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((64-64))+rdx]
+ vpxor xmm5,xmm5,xmm2
+ vpclmulqdq xmm2,xmm9,xmm7,000h
+ vpxor xmm8,xmm8,xmm15
+
+ vmovdqu xmm14,XMMWORD PTR[48+r8]
+ vpxor xmm0,xmm0,xmm3
+ vpclmulqdq xmm3,xmm15,xmm6,000h
+ vpxor xmm1,xmm1,xmm4
+ vpshufb xmm14,xmm14,xmm13
+ vpclmulqdq xmm4,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((96-64))+rdx]
+ vpxor xmm2,xmm2,xmm5
+ vpunpckhqdq xmm9,xmm14,xmm14
+ vpclmulqdq xmm5,xmm8,xmm7,010h
+ vmovdqu xmm7,XMMWORD PTR[((128-64))+rdx]
+ vpxor xmm9,xmm9,xmm14
+
+ vmovdqu xmm15,XMMWORD PTR[32+r8]
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm0,xmm14,xmm6,000h
+ vpxor xmm4,xmm4,xmm1
+ vpshufb xmm15,xmm15,xmm13
+ vpclmulqdq xmm1,xmm14,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((112-64))+rdx]
+ vpxor xmm5,xmm5,xmm2
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpclmulqdq xmm2,xmm9,xmm7,000h
+ vpxor xmm8,xmm8,xmm15
+
+ vmovdqu xmm14,XMMWORD PTR[16+r8]
+ vpxor xmm0,xmm0,xmm3
+ vpclmulqdq xmm3,xmm15,xmm6,000h
+ vpxor xmm1,xmm1,xmm4
+ vpshufb xmm14,xmm14,xmm13
+ vpclmulqdq xmm4,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((144-64))+rdx]
+ vpxor xmm2,xmm2,xmm5
+ vpunpckhqdq xmm9,xmm14,xmm14
+ vpclmulqdq xmm5,xmm8,xmm7,010h
+ vmovdqu xmm7,XMMWORD PTR[((176-64))+rdx]
+ vpxor xmm9,xmm9,xmm14
+
+ vmovdqu xmm15,XMMWORD PTR[r8]
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm0,xmm14,xmm6,000h
+ vpxor xmm4,xmm4,xmm1
+ vpshufb xmm15,xmm15,xmm13
+ vpclmulqdq xmm1,xmm14,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((160-64))+rdx]
+ vpxor xmm5,xmm5,xmm2
+ vpclmulqdq xmm2,xmm9,xmm7,010h
+
+ lea r8,QWORD PTR[128+r8]
+ cmp r9,080h
+ jb $L$tail_avx
+
+ vpxor xmm15,xmm15,xmm10
+ sub r9,080h
+ jmp $L$oop8x_avx
+
+ALIGN 32
+$L$oop8x_avx::
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vmovdqu xmm14,XMMWORD PTR[112+r8]
+ vpxor xmm3,xmm3,xmm0
+ vpxor xmm8,xmm8,xmm15
+ vpclmulqdq xmm10,xmm15,xmm6,000h
+ vpshufb xmm14,xmm14,xmm13
+ vpxor xmm4,xmm4,xmm1
+ vpclmulqdq xmm11,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((0-64))+rdx]
+ vpunpckhqdq xmm9,xmm14,xmm14
+ vpxor xmm5,xmm5,xmm2
+ vpclmulqdq xmm12,xmm8,xmm7,000h
+ vmovdqu xmm7,XMMWORD PTR[((32-64))+rdx]
+ vpxor xmm9,xmm9,xmm14
+
+ vmovdqu xmm15,XMMWORD PTR[96+r8]
+ vpclmulqdq xmm0,xmm14,xmm6,000h
+ vpxor xmm10,xmm10,xmm3
+ vpshufb xmm15,xmm15,xmm13
+ vpclmulqdq xmm1,xmm14,xmm6,011h
+ vxorps xmm11,xmm11,xmm4
+ vmovdqu xmm6,XMMWORD PTR[((16-64))+rdx]
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpclmulqdq xmm2,xmm9,xmm7,000h
+ vpxor xmm12,xmm12,xmm5
+ vxorps xmm8,xmm8,xmm15
+
+ vmovdqu xmm14,XMMWORD PTR[80+r8]
+ vpxor xmm12,xmm12,xmm10
+ vpclmulqdq xmm3,xmm15,xmm6,000h
+ vpxor xmm12,xmm12,xmm11
+ vpslldq xmm9,xmm12,8
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm4,xmm15,xmm6,011h
+ vpsrldq xmm12,xmm12,8
+ vpxor xmm10,xmm10,xmm9
+ vmovdqu xmm6,XMMWORD PTR[((48-64))+rdx]
+ vpshufb xmm14,xmm14,xmm13
+ vxorps xmm11,xmm11,xmm12
+ vpxor xmm4,xmm4,xmm1
+ vpunpckhqdq xmm9,xmm14,xmm14
+ vpclmulqdq xmm5,xmm8,xmm7,010h
+ vmovdqu xmm7,XMMWORD PTR[((80-64))+rdx]
+ vpxor xmm9,xmm9,xmm14
+ vpxor xmm5,xmm5,xmm2
+
+ vmovdqu xmm15,XMMWORD PTR[64+r8]
+ vpalignr xmm12,xmm10,xmm10,8
+ vpclmulqdq xmm0,xmm14,xmm6,000h
+ vpshufb xmm15,xmm15,xmm13
+ vpxor xmm0,xmm0,xmm3
+ vpclmulqdq xmm1,xmm14,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((64-64))+rdx]
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpxor xmm1,xmm1,xmm4
+ vpclmulqdq xmm2,xmm9,xmm7,000h
+ vxorps xmm8,xmm8,xmm15
+ vpxor xmm2,xmm2,xmm5
+
+ vmovdqu xmm14,XMMWORD PTR[48+r8]
+ vpclmulqdq xmm10,xmm10,XMMWORD PTR[r10],010h
+ vpclmulqdq xmm3,xmm15,xmm6,000h
+ vpshufb xmm14,xmm14,xmm13
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm4,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((96-64))+rdx]
+ vpunpckhqdq xmm9,xmm14,xmm14
+ vpxor xmm4,xmm4,xmm1
+ vpclmulqdq xmm5,xmm8,xmm7,010h
+ vmovdqu xmm7,XMMWORD PTR[((128-64))+rdx]
+ vpxor xmm9,xmm9,xmm14
+ vpxor xmm5,xmm5,xmm2
+
+ vmovdqu xmm15,XMMWORD PTR[32+r8]
+ vpclmulqdq xmm0,xmm14,xmm6,000h
+ vpshufb xmm15,xmm15,xmm13
+ vpxor xmm0,xmm0,xmm3
+ vpclmulqdq xmm1,xmm14,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((112-64))+rdx]
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpxor xmm1,xmm1,xmm4
+ vpclmulqdq xmm2,xmm9,xmm7,000h
+ vpxor xmm8,xmm8,xmm15
+ vpxor xmm2,xmm2,xmm5
+ vxorps xmm10,xmm10,xmm12
+
+ vmovdqu xmm14,XMMWORD PTR[16+r8]
+ vpalignr xmm12,xmm10,xmm10,8
+ vpclmulqdq xmm3,xmm15,xmm6,000h
+ vpshufb xmm14,xmm14,xmm13
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm4,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((144-64))+rdx]
+ vpclmulqdq xmm10,xmm10,XMMWORD PTR[r10],010h
+ vxorps xmm12,xmm12,xmm11
+ vpunpckhqdq xmm9,xmm14,xmm14
+ vpxor xmm4,xmm4,xmm1
+ vpclmulqdq xmm5,xmm8,xmm7,010h
+ vmovdqu xmm7,XMMWORD PTR[((176-64))+rdx]
+ vpxor xmm9,xmm9,xmm14
+ vpxor xmm5,xmm5,xmm2
+
+ vmovdqu xmm15,XMMWORD PTR[r8]
+ vpclmulqdq xmm0,xmm14,xmm6,000h
+ vpshufb xmm15,xmm15,xmm13
+ vpclmulqdq xmm1,xmm14,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((160-64))+rdx]
+ vpxor xmm15,xmm15,xmm12
+ vpclmulqdq xmm2,xmm9,xmm7,010h
+ vpxor xmm15,xmm15,xmm10
+
+ lea r8,QWORD PTR[128+r8]
+ sub r9,080h
+ jnc $L$oop8x_avx
+
+ add r9,080h
+ jmp $L$tail_no_xor_avx
+
+ALIGN 32
+$L$short_avx::
+ vmovdqu xmm14,XMMWORD PTR[((-16))+r9*1+r8]
+ lea r8,QWORD PTR[r9*1+r8]
+ vmovdqu xmm6,XMMWORD PTR[((0-64))+rdx]
+ vmovdqu xmm7,XMMWORD PTR[((32-64))+rdx]
+ vpshufb xmm15,xmm14,xmm13
+
+ vmovdqa xmm3,xmm0
+ vmovdqa xmm4,xmm1
+ vmovdqa xmm5,xmm2
+ sub r9,010h
+ jz $L$tail_avx
+
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm0,xmm15,xmm6,000h
+ vpxor xmm8,xmm8,xmm15
+ vmovdqu xmm14,XMMWORD PTR[((-32))+r8]
+ vpxor xmm4,xmm4,xmm1
+ vpclmulqdq xmm1,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((16-64))+rdx]
+ vpshufb xmm15,xmm14,xmm13
+ vpxor xmm5,xmm5,xmm2
+ vpclmulqdq xmm2,xmm8,xmm7,000h
+ vpsrldq xmm7,xmm7,8
+ sub r9,010h
+ jz $L$tail_avx
+
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm0,xmm15,xmm6,000h
+ vpxor xmm8,xmm8,xmm15
+ vmovdqu xmm14,XMMWORD PTR[((-48))+r8]
+ vpxor xmm4,xmm4,xmm1
+ vpclmulqdq xmm1,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((48-64))+rdx]
+ vpshufb xmm15,xmm14,xmm13
+ vpxor xmm5,xmm5,xmm2
+ vpclmulqdq xmm2,xmm8,xmm7,000h
+ vmovdqu xmm7,XMMWORD PTR[((80-64))+rdx]
+ sub r9,010h
+ jz $L$tail_avx
+
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm0,xmm15,xmm6,000h
+ vpxor xmm8,xmm8,xmm15
+ vmovdqu xmm14,XMMWORD PTR[((-64))+r8]
+ vpxor xmm4,xmm4,xmm1
+ vpclmulqdq xmm1,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((64-64))+rdx]
+ vpshufb xmm15,xmm14,xmm13
+ vpxor xmm5,xmm5,xmm2
+ vpclmulqdq xmm2,xmm8,xmm7,000h
+ vpsrldq xmm7,xmm7,8
+ sub r9,010h
+ jz $L$tail_avx
+
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm0,xmm15,xmm6,000h
+ vpxor xmm8,xmm8,xmm15
+ vmovdqu xmm14,XMMWORD PTR[((-80))+r8]
+ vpxor xmm4,xmm4,xmm1
+ vpclmulqdq xmm1,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((96-64))+rdx]
+ vpshufb xmm15,xmm14,xmm13
+ vpxor xmm5,xmm5,xmm2
+ vpclmulqdq xmm2,xmm8,xmm7,000h
+ vmovdqu xmm7,XMMWORD PTR[((128-64))+rdx]
+ sub r9,010h
+ jz $L$tail_avx
+
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm0,xmm15,xmm6,000h
+ vpxor xmm8,xmm8,xmm15
+ vmovdqu xmm14,XMMWORD PTR[((-96))+r8]
+ vpxor xmm4,xmm4,xmm1
+ vpclmulqdq xmm1,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((112-64))+rdx]
+ vpshufb xmm15,xmm14,xmm13
+ vpxor xmm5,xmm5,xmm2
+ vpclmulqdq xmm2,xmm8,xmm7,000h
+ vpsrldq xmm7,xmm7,8
+ sub r9,010h
+ jz $L$tail_avx
+
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm0,xmm15,xmm6,000h
+ vpxor xmm8,xmm8,xmm15
+ vmovdqu xmm14,XMMWORD PTR[((-112))+r8]
+ vpxor xmm4,xmm4,xmm1
+ vpclmulqdq xmm1,xmm15,xmm6,011h
+ vmovdqu xmm6,XMMWORD PTR[((144-64))+rdx]
+ vpshufb xmm15,xmm14,xmm13
+ vpxor xmm5,xmm5,xmm2
+ vpclmulqdq xmm2,xmm8,xmm7,000h
+ vmovq xmm7,QWORD PTR[((184-64))+rdx]
+ sub r9,010h
+ jmp $L$tail_avx
+
+ALIGN 32
+$L$tail_avx::
+ vpxor xmm15,xmm15,xmm10
+$L$tail_no_xor_avx::
+ vpunpckhqdq xmm8,xmm15,xmm15
+ vpxor xmm3,xmm3,xmm0
+ vpclmulqdq xmm0,xmm15,xmm6,000h
+ vpxor xmm8,xmm8,xmm15
+ vpxor xmm4,xmm4,xmm1
+ vpclmulqdq xmm1,xmm15,xmm6,011h
+ vpxor xmm5,xmm5,xmm2
+ vpclmulqdq xmm2,xmm8,xmm7,000h
+
+ vmovdqu xmm12,XMMWORD PTR[r10]
+
+ vpxor xmm10,xmm3,xmm0
+ vpxor xmm11,xmm4,xmm1
+ vpxor xmm5,xmm5,xmm2
+
+ vpxor xmm5,xmm5,xmm10
+ vpxor xmm5,xmm5,xmm11
+ vpslldq xmm9,xmm5,8
+ vpsrldq xmm5,xmm5,8
+ vpxor xmm10,xmm10,xmm9
+ vpxor xmm11,xmm11,xmm5
+
+ vpclmulqdq xmm9,xmm10,xmm12,010h
+ vpalignr xmm10,xmm10,xmm10,8
+ vpxor xmm10,xmm10,xmm9
+
+ vpclmulqdq xmm9,xmm10,xmm12,010h
+ vpalignr xmm10,xmm10,xmm10,8
+ vpxor xmm10,xmm10,xmm11
+ vpxor xmm10,xmm10,xmm9
+
+ cmp r9,0
+ jne $L$short_avx
+
+ vpshufb xmm10,xmm10,xmm13
+ vmovdqu XMMWORD PTR[rcx],xmm10
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[rsp]
+ movaps xmm7,XMMWORD PTR[16+rsp]
+ movaps xmm8,XMMWORD PTR[32+rsp]
+ movaps xmm9,XMMWORD PTR[48+rsp]
+ movaps xmm10,XMMWORD PTR[64+rsp]
+ movaps xmm11,XMMWORD PTR[80+rsp]
+ movaps xmm12,XMMWORD PTR[96+rsp]
+ movaps xmm13,XMMWORD PTR[112+rsp]
+ movaps xmm14,XMMWORD PTR[128+rsp]
+ movaps xmm15,XMMWORD PTR[144+rsp]
+ lea rsp,QWORD PTR[168+rsp]
+$L$SEH_end_gcm_ghash_avx::
+ DB 0F3h,0C3h ;repret
+
+gcm_ghash_avx ENDP
+ALIGN 64
+$L$bswap_mask::
+DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+$L$0x1c2_polynomial::
+DB 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0c2h
+$L$7_mask::
+ DD 7,0,7,0
+$L$7_mask_poly::
+ DD 7,0,450,0
+ALIGN 64
+
+$L$rem_4bit::
+ DD 0,0,0,471859200,0,943718400,0,610271232
+ DD 0,1887436800,0,1822425088,0,1220542464,0,1423966208
+ DD 0,3774873600,0,4246732800,0,3644850176,0,3311403008
+ DD 0,2441084928,0,2376073216,0,2847932416,0,3051356160
+
+$L$rem_8bit::
+ DW 00000h,001C2h,00384h,00246h,00708h,006CAh,0048Ch,0054Eh
+ DW 00E10h,00FD2h,00D94h,00C56h,00918h,008DAh,00A9Ch,00B5Eh
+ DW 01C20h,01DE2h,01FA4h,01E66h,01B28h,01AEAh,018ACh,0196Eh
+ DW 01230h,013F2h,011B4h,01076h,01538h,014FAh,016BCh,0177Eh
+ DW 03840h,03982h,03BC4h,03A06h,03F48h,03E8Ah,03CCCh,03D0Eh
+ DW 03650h,03792h,035D4h,03416h,03158h,0309Ah,032DCh,0331Eh
+ DW 02460h,025A2h,027E4h,02626h,02368h,022AAh,020ECh,0212Eh
+ DW 02A70h,02BB2h,029F4h,02836h,02D78h,02CBAh,02EFCh,02F3Eh
+ DW 07080h,07142h,07304h,072C6h,07788h,0764Ah,0740Ch,075CEh
+ DW 07E90h,07F52h,07D14h,07CD6h,07998h,0785Ah,07A1Ch,07BDEh
+ DW 06CA0h,06D62h,06F24h,06EE6h,06BA8h,06A6Ah,0682Ch,069EEh
+ DW 062B0h,06372h,06134h,060F6h,065B8h,0647Ah,0663Ch,067FEh
+ DW 048C0h,04902h,04B44h,04A86h,04FC8h,04E0Ah,04C4Ch,04D8Eh
+ DW 046D0h,04712h,04554h,04496h,041D8h,0401Ah,0425Ch,0439Eh
+ DW 054E0h,05522h,05764h,056A6h,053E8h,0522Ah,0506Ch,051AEh
+ DW 05AF0h,05B32h,05974h,058B6h,05DF8h,05C3Ah,05E7Ch,05FBEh
+ DW 0E100h,0E0C2h,0E284h,0E346h,0E608h,0E7CAh,0E58Ch,0E44Eh
+ DW 0EF10h,0EED2h,0EC94h,0ED56h,0E818h,0E9DAh,0EB9Ch,0EA5Eh
+ DW 0FD20h,0FCE2h,0FEA4h,0FF66h,0FA28h,0FBEAh,0F9ACh,0F86Eh
+ DW 0F330h,0F2F2h,0F0B4h,0F176h,0F438h,0F5FAh,0F7BCh,0F67Eh
+ DW 0D940h,0D882h,0DAC4h,0DB06h,0DE48h,0DF8Ah,0DDCCh,0DC0Eh
+ DW 0D750h,0D692h,0D4D4h,0D516h,0D058h,0D19Ah,0D3DCh,0D21Eh
+ DW 0C560h,0C4A2h,0C6E4h,0C726h,0C268h,0C3AAh,0C1ECh,0C02Eh
+ DW 0CB70h,0CAB2h,0C8F4h,0C936h,0CC78h,0CDBAh,0CFFCh,0CE3Eh
+ DW 09180h,09042h,09204h,093C6h,09688h,0974Ah,0950Ch,094CEh
+ DW 09F90h,09E52h,09C14h,09DD6h,09898h,0995Ah,09B1Ch,09ADEh
+ DW 08DA0h,08C62h,08E24h,08FE6h,08AA8h,08B6Ah,0892Ch,088EEh
+ DW 083B0h,08272h,08034h,081F6h,084B8h,0857Ah,0873Ch,086FEh
+ DW 0A9C0h,0A802h,0AA44h,0AB86h,0AEC8h,0AF0Ah,0AD4Ch,0AC8Eh
+ DW 0A7D0h,0A612h,0A454h,0A596h,0A0D8h,0A11Ah,0A35Ch,0A29Eh
+ DW 0B5E0h,0B422h,0B664h,0B7A6h,0B2E8h,0B32Ah,0B16Ch,0B0AEh
+ DW 0BBF0h,0BA32h,0B874h,0B9B6h,0BCF8h,0BD3Ah,0BF7Ch,0BEBEh
+
+DB 71,72,65,83,72,32,102,111,114,32,120,56,54,95,54,52
+DB 44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
+DB 60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
+DB 114,103,62,0
+ALIGN 64
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ lea rax,QWORD PTR[((48+280))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_gcm_gmult_4bit
+ DD imagerel $L$SEH_end_gcm_gmult_4bit
+ DD imagerel $L$SEH_info_gcm_gmult_4bit
+
+ DD imagerel $L$SEH_begin_gcm_ghash_4bit
+ DD imagerel $L$SEH_end_gcm_ghash_4bit
+ DD imagerel $L$SEH_info_gcm_ghash_4bit
+
+ DD imagerel $L$SEH_begin_gcm_init_clmul
+ DD imagerel $L$SEH_end_gcm_init_clmul
+ DD imagerel $L$SEH_info_gcm_init_clmul
+
+ DD imagerel $L$SEH_begin_gcm_ghash_clmul
+ DD imagerel $L$SEH_end_gcm_ghash_clmul
+ DD imagerel $L$SEH_info_gcm_ghash_clmul
+ DD imagerel $L$SEH_begin_gcm_init_avx
+ DD imagerel $L$SEH_end_gcm_init_avx
+ DD imagerel $L$SEH_info_gcm_init_clmul
+
+ DD imagerel $L$SEH_begin_gcm_ghash_avx
+ DD imagerel $L$SEH_end_gcm_ghash_avx
+ DD imagerel $L$SEH_info_gcm_ghash_clmul
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_gcm_gmult_4bit::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$gmult_prologue,imagerel $L$gmult_epilogue
+$L$SEH_info_gcm_ghash_4bit::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$ghash_prologue,imagerel $L$ghash_epilogue
+$L$SEH_info_gcm_init_clmul::
+DB 001h,008h,003h,000h
+DB 008h,068h,000h,000h
+DB 004h,022h,000h,000h
+$L$SEH_info_gcm_ghash_clmul::
+DB 001h,033h,016h,000h
+DB 033h,0f8h,009h,000h
+DB 02eh,0e8h,008h,000h
+DB 029h,0d8h,007h,000h
+DB 024h,0c8h,006h,000h
+DB 01fh,0b8h,005h,000h
+DB 01ah,0a8h,004h,000h
+DB 015h,098h,003h,000h
+DB 010h,088h,002h,000h
+DB 00ch,078h,001h,000h
+DB 008h,068h,000h,000h
+DB 004h,001h,015h,000h
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/poly1305/poly1305-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/poly1305/poly1305-x86_64.masm
index ab5eab896f..012369df06 100644
--- a/contrib/libs/openssl/asm/windows/crypto/poly1305/poly1305-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/poly1305/poly1305-x86_64.masm
@@ -1,2385 +1,2385 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC poly1305_init
-
-PUBLIC poly1305_blocks
-
-PUBLIC poly1305_emit
-
-
-
-ALIGN 32
-poly1305_init PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_poly1305_init::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- xor rax,rax
- mov QWORD PTR[rdi],rax
- mov QWORD PTR[8+rdi],rax
- mov QWORD PTR[16+rdi],rax
-
- cmp rsi,0
- je $L$no_key
-
- lea r10,QWORD PTR[poly1305_blocks]
- lea r11,QWORD PTR[poly1305_emit]
- mov r9,QWORD PTR[((OPENSSL_ia32cap_P+4))]
- lea rax,QWORD PTR[poly1305_blocks_avx]
- lea rcx,QWORD PTR[poly1305_emit_avx]
- bt r9,28
- cmovc r10,rax
- cmovc r11,rcx
- lea rax,QWORD PTR[poly1305_blocks_avx2]
- bt r9,37
- cmovc r10,rax
- mov rax,00ffffffc0fffffffh
- mov rcx,00ffffffc0ffffffch
- and rax,QWORD PTR[rsi]
- and rcx,QWORD PTR[8+rsi]
- mov QWORD PTR[24+rdi],rax
- mov QWORD PTR[32+rdi],rcx
- mov QWORD PTR[rdx],r10
- mov QWORD PTR[8+rdx],r11
- mov eax,1
-$L$no_key::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_poly1305_init::
-poly1305_init ENDP
-
-
-ALIGN 32
-poly1305_blocks PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_poly1305_blocks::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
-
-$L$blocks::
- shr rdx,4
- jz $L$no_data
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$blocks_body::
-
- mov r15,rdx
-
- mov r11,QWORD PTR[24+rdi]
- mov r13,QWORD PTR[32+rdi]
-
- mov r14,QWORD PTR[rdi]
- mov rbx,QWORD PTR[8+rdi]
- mov rbp,QWORD PTR[16+rdi]
-
- mov r12,r13
- shr r13,2
- mov rax,r12
- add r13,r12
- jmp $L$oop
-
-ALIGN 32
-$L$oop::
- add r14,QWORD PTR[rsi]
- adc rbx,QWORD PTR[8+rsi]
- lea rsi,QWORD PTR[16+rsi]
- adc rbp,rcx
- mul r14
- mov r9,rax
- mov rax,r11
- mov r10,rdx
-
- mul r14
- mov r14,rax
- mov rax,r11
- mov r8,rdx
-
- mul rbx
- add r9,rax
- mov rax,r13
- adc r10,rdx
-
- mul rbx
- mov rbx,rbp
- add r14,rax
- adc r8,rdx
-
- imul rbx,r13
- add r9,rbx
- mov rbx,r8
- adc r10,0
-
- imul rbp,r11
- add rbx,r9
- mov rax,-4
- adc r10,rbp
-
- and rax,r10
- mov rbp,r10
- shr r10,2
- and rbp,3
- add rax,r10
- add r14,rax
- adc rbx,0
- adc rbp,0
- mov rax,r12
- dec r15
- jnz $L$oop
-
- mov QWORD PTR[rdi],r14
- mov QWORD PTR[8+rdi],rbx
- mov QWORD PTR[16+rdi],rbp
-
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbp,QWORD PTR[32+rsp]
-
- mov rbx,QWORD PTR[40+rsp]
-
- lea rsp,QWORD PTR[48+rsp]
-
-$L$no_data::
-$L$blocks_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_poly1305_blocks::
-poly1305_blocks ENDP
-
-
-ALIGN 32
-poly1305_emit PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_poly1305_emit::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$emit::
- mov r8,QWORD PTR[rdi]
- mov r9,QWORD PTR[8+rdi]
- mov r10,QWORD PTR[16+rdi]
-
- mov rax,r8
- add r8,5
- mov rcx,r9
- adc r9,0
- adc r10,0
- shr r10,2
- cmovnz rax,r8
- cmovnz rcx,r9
-
- add rax,QWORD PTR[rdx]
- adc rcx,QWORD PTR[8+rdx]
- mov QWORD PTR[rsi],rax
- mov QWORD PTR[8+rsi],rcx
-
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_poly1305_emit::
-poly1305_emit ENDP
-
-ALIGN 32
-__poly1305_block PROC PRIVATE
-
- mul r14
- mov r9,rax
- mov rax,r11
- mov r10,rdx
-
- mul r14
- mov r14,rax
- mov rax,r11
- mov r8,rdx
-
- mul rbx
- add r9,rax
- mov rax,r13
- adc r10,rdx
-
- mul rbx
- mov rbx,rbp
- add r14,rax
- adc r8,rdx
-
- imul rbx,r13
- add r9,rbx
- mov rbx,r8
- adc r10,0
-
- imul rbp,r11
- add rbx,r9
- mov rax,-4
- adc r10,rbp
-
- and rax,r10
- mov rbp,r10
- shr r10,2
- and rbp,3
- add rax,r10
- add r14,rax
- adc rbx,0
- adc rbp,0
- DB 0F3h,0C3h ;repret
-
-__poly1305_block ENDP
-
-
-ALIGN 32
-__poly1305_init_avx PROC PRIVATE
-
- mov r14,r11
- mov rbx,r12
- xor rbp,rbp
-
- lea rdi,QWORD PTR[((48+64))+rdi]
-
- mov rax,r12
- call __poly1305_block
-
- mov eax,03ffffffh
- mov edx,03ffffffh
- mov r8,r14
- and eax,r14d
- mov r9,r11
- and edx,r11d
- mov DWORD PTR[((-64))+rdi],eax
- shr r8,26
- mov DWORD PTR[((-60))+rdi],edx
- shr r9,26
-
- mov eax,03ffffffh
- mov edx,03ffffffh
- and eax,r8d
- and edx,r9d
- mov DWORD PTR[((-48))+rdi],eax
- lea eax,DWORD PTR[rax*4+rax]
- mov DWORD PTR[((-44))+rdi],edx
- lea edx,DWORD PTR[rdx*4+rdx]
- mov DWORD PTR[((-32))+rdi],eax
- shr r8,26
- mov DWORD PTR[((-28))+rdi],edx
- shr r9,26
-
- mov rax,rbx
- mov rdx,r12
- shl rax,12
- shl rdx,12
- or rax,r8
- or rdx,r9
- and eax,03ffffffh
- and edx,03ffffffh
- mov DWORD PTR[((-16))+rdi],eax
- lea eax,DWORD PTR[rax*4+rax]
- mov DWORD PTR[((-12))+rdi],edx
- lea edx,DWORD PTR[rdx*4+rdx]
- mov DWORD PTR[rdi],eax
- mov r8,rbx
- mov DWORD PTR[4+rdi],edx
- mov r9,r12
-
- mov eax,03ffffffh
- mov edx,03ffffffh
- shr r8,14
- shr r9,14
- and eax,r8d
- and edx,r9d
- mov DWORD PTR[16+rdi],eax
- lea eax,DWORD PTR[rax*4+rax]
- mov DWORD PTR[20+rdi],edx
- lea edx,DWORD PTR[rdx*4+rdx]
- mov DWORD PTR[32+rdi],eax
- shr r8,26
- mov DWORD PTR[36+rdi],edx
- shr r9,26
-
- mov rax,rbp
- shl rax,24
- or r8,rax
- mov DWORD PTR[48+rdi],r8d
- lea r8,QWORD PTR[r8*4+r8]
- mov DWORD PTR[52+rdi],r9d
- lea r9,QWORD PTR[r9*4+r9]
- mov DWORD PTR[64+rdi],r8d
- mov DWORD PTR[68+rdi],r9d
-
- mov rax,r12
- call __poly1305_block
-
- mov eax,03ffffffh
- mov r8,r14
- and eax,r14d
- shr r8,26
- mov DWORD PTR[((-52))+rdi],eax
-
- mov edx,03ffffffh
- and edx,r8d
- mov DWORD PTR[((-36))+rdi],edx
- lea edx,DWORD PTR[rdx*4+rdx]
- shr r8,26
- mov DWORD PTR[((-20))+rdi],edx
-
- mov rax,rbx
- shl rax,12
- or rax,r8
- and eax,03ffffffh
- mov DWORD PTR[((-4))+rdi],eax
- lea eax,DWORD PTR[rax*4+rax]
- mov r8,rbx
- mov DWORD PTR[12+rdi],eax
-
- mov edx,03ffffffh
- shr r8,14
- and edx,r8d
- mov DWORD PTR[28+rdi],edx
- lea edx,DWORD PTR[rdx*4+rdx]
- shr r8,26
- mov DWORD PTR[44+rdi],edx
-
- mov rax,rbp
- shl rax,24
- or r8,rax
- mov DWORD PTR[60+rdi],r8d
- lea r8,QWORD PTR[r8*4+r8]
- mov DWORD PTR[76+rdi],r8d
-
- mov rax,r12
- call __poly1305_block
-
- mov eax,03ffffffh
- mov r8,r14
- and eax,r14d
- shr r8,26
- mov DWORD PTR[((-56))+rdi],eax
-
- mov edx,03ffffffh
- and edx,r8d
- mov DWORD PTR[((-40))+rdi],edx
- lea edx,DWORD PTR[rdx*4+rdx]
- shr r8,26
- mov DWORD PTR[((-24))+rdi],edx
-
- mov rax,rbx
- shl rax,12
- or rax,r8
- and eax,03ffffffh
- mov DWORD PTR[((-8))+rdi],eax
- lea eax,DWORD PTR[rax*4+rax]
- mov r8,rbx
- mov DWORD PTR[8+rdi],eax
-
- mov edx,03ffffffh
- shr r8,14
- and edx,r8d
- mov DWORD PTR[24+rdi],edx
- lea edx,DWORD PTR[rdx*4+rdx]
- shr r8,26
- mov DWORD PTR[40+rdi],edx
-
- mov rax,rbp
- shl rax,24
- or r8,rax
- mov DWORD PTR[56+rdi],r8d
- lea r8,QWORD PTR[r8*4+r8]
- mov DWORD PTR[72+rdi],r8d
-
- lea rdi,QWORD PTR[((-48-64))+rdi]
- DB 0F3h,0C3h ;repret
-
-__poly1305_init_avx ENDP
-
-
-ALIGN 32
-poly1305_blocks_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_poly1305_blocks_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
-
- mov r8d,DWORD PTR[20+rdi]
- cmp rdx,128
- jae $L$blocks_avx
- test r8d,r8d
- jz $L$blocks
-
-$L$blocks_avx::
- and rdx,-16
- jz $L$no_data_avx
-
- vzeroupper
-
- test r8d,r8d
- jz $L$base2_64_avx
-
- test rdx,31
- jz $L$even_avx
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$blocks_avx_body::
-
- mov r15,rdx
-
- mov r8,QWORD PTR[rdi]
- mov r9,QWORD PTR[8+rdi]
- mov ebp,DWORD PTR[16+rdi]
-
- mov r11,QWORD PTR[24+rdi]
- mov r13,QWORD PTR[32+rdi]
-
-
- mov r14d,r8d
- and r8,-2147483648
- mov r12,r9
- mov ebx,r9d
- and r9,-2147483648
-
- shr r8,6
- shl r12,52
- add r14,r8
- shr rbx,12
- shr r9,18
- add r14,r12
- adc rbx,r9
-
- mov r8,rbp
- shl r8,40
- shr rbp,24
- add rbx,r8
- adc rbp,0
-
- mov r9,-4
- mov r8,rbp
- and r9,rbp
- shr r8,2
- and rbp,3
- add r8,r9
- add r14,r8
- adc rbx,0
- adc rbp,0
-
- mov r12,r13
- mov rax,r13
- shr r13,2
- add r13,r12
-
- add r14,QWORD PTR[rsi]
- adc rbx,QWORD PTR[8+rsi]
- lea rsi,QWORD PTR[16+rsi]
- adc rbp,rcx
-
- call __poly1305_block
-
- test rcx,rcx
- jz $L$store_base2_64_avx
-
-
- mov rax,r14
- mov rdx,r14
- shr r14,52
- mov r11,rbx
- mov r12,rbx
- shr rdx,26
- and rax,03ffffffh
- shl r11,12
- and rdx,03ffffffh
- shr rbx,14
- or r14,r11
- shl rbp,24
- and r14,03ffffffh
- shr r12,40
- and rbx,03ffffffh
- or rbp,r12
-
- sub r15,16
- jz $L$store_base2_26_avx
-
- vmovd xmm0,eax
- vmovd xmm1,edx
- vmovd xmm2,r14d
- vmovd xmm3,ebx
- vmovd xmm4,ebp
- jmp $L$proceed_avx
-
-ALIGN 32
-$L$store_base2_64_avx::
- mov QWORD PTR[rdi],r14
- mov QWORD PTR[8+rdi],rbx
- mov QWORD PTR[16+rdi],rbp
- jmp $L$done_avx
-
-ALIGN 16
-$L$store_base2_26_avx::
- mov DWORD PTR[rdi],eax
- mov DWORD PTR[4+rdi],edx
- mov DWORD PTR[8+rdi],r14d
- mov DWORD PTR[12+rdi],ebx
- mov DWORD PTR[16+rdi],ebp
-ALIGN 16
-$L$done_avx::
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbp,QWORD PTR[32+rsp]
-
- mov rbx,QWORD PTR[40+rsp]
-
- lea rsp,QWORD PTR[48+rsp]
-
-$L$no_data_avx::
-$L$blocks_avx_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-
-ALIGN 32
-$L$base2_64_avx::
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$base2_64_avx_body::
-
- mov r15,rdx
-
- mov r11,QWORD PTR[24+rdi]
- mov r13,QWORD PTR[32+rdi]
-
- mov r14,QWORD PTR[rdi]
- mov rbx,QWORD PTR[8+rdi]
- mov ebp,DWORD PTR[16+rdi]
-
- mov r12,r13
- mov rax,r13
- shr r13,2
- add r13,r12
-
- test rdx,31
- jz $L$init_avx
-
- add r14,QWORD PTR[rsi]
- adc rbx,QWORD PTR[8+rsi]
- lea rsi,QWORD PTR[16+rsi]
- adc rbp,rcx
- sub r15,16
-
- call __poly1305_block
-
-$L$init_avx::
-
- mov rax,r14
- mov rdx,r14
- shr r14,52
- mov r8,rbx
- mov r9,rbx
- shr rdx,26
- and rax,03ffffffh
- shl r8,12
- and rdx,03ffffffh
- shr rbx,14
- or r14,r8
- shl rbp,24
- and r14,03ffffffh
- shr r9,40
- and rbx,03ffffffh
- or rbp,r9
-
- vmovd xmm0,eax
- vmovd xmm1,edx
- vmovd xmm2,r14d
- vmovd xmm3,ebx
- vmovd xmm4,ebp
- mov DWORD PTR[20+rdi],1
-
- call __poly1305_init_avx
-
-$L$proceed_avx::
- mov rdx,r15
-
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbp,QWORD PTR[32+rsp]
-
- mov rbx,QWORD PTR[40+rsp]
-
- lea rax,QWORD PTR[48+rsp]
- lea rsp,QWORD PTR[48+rsp]
-
-$L$base2_64_avx_epilogue::
- jmp $L$do_avx
-
-
-ALIGN 32
-$L$even_avx::
-
- vmovd xmm0,DWORD PTR[rdi]
- vmovd xmm1,DWORD PTR[4+rdi]
- vmovd xmm2,DWORD PTR[8+rdi]
- vmovd xmm3,DWORD PTR[12+rdi]
- vmovd xmm4,DWORD PTR[16+rdi]
-
-$L$do_avx::
- lea r11,QWORD PTR[((-248))+rsp]
- sub rsp,0218h
- vmovdqa XMMWORD PTR[80+r11],xmm6
- vmovdqa XMMWORD PTR[96+r11],xmm7
- vmovdqa XMMWORD PTR[112+r11],xmm8
- vmovdqa XMMWORD PTR[128+r11],xmm9
- vmovdqa XMMWORD PTR[144+r11],xmm10
- vmovdqa XMMWORD PTR[160+r11],xmm11
- vmovdqa XMMWORD PTR[176+r11],xmm12
- vmovdqa XMMWORD PTR[192+r11],xmm13
- vmovdqa XMMWORD PTR[208+r11],xmm14
- vmovdqa XMMWORD PTR[224+r11],xmm15
-$L$do_avx_body::
- sub rdx,64
- lea rax,QWORD PTR[((-32))+rsi]
- cmovc rsi,rax
-
- vmovdqu xmm14,XMMWORD PTR[48+rdi]
- lea rdi,QWORD PTR[112+rdi]
- lea rcx,QWORD PTR[$L$const]
-
-
-
- vmovdqu xmm5,XMMWORD PTR[32+rsi]
- vmovdqu xmm6,XMMWORD PTR[48+rsi]
- vmovdqa xmm15,XMMWORD PTR[64+rcx]
-
- vpsrldq xmm7,xmm5,6
- vpsrldq xmm8,xmm6,6
- vpunpckhqdq xmm9,xmm5,xmm6
- vpunpcklqdq xmm5,xmm5,xmm6
- vpunpcklqdq xmm8,xmm7,xmm8
-
- vpsrlq xmm9,xmm9,40
- vpsrlq xmm6,xmm5,26
- vpand xmm5,xmm5,xmm15
- vpsrlq xmm7,xmm8,4
- vpand xmm6,xmm6,xmm15
- vpsrlq xmm8,xmm8,30
- vpand xmm7,xmm7,xmm15
- vpand xmm8,xmm8,xmm15
- vpor xmm9,xmm9,XMMWORD PTR[32+rcx]
-
- jbe $L$skip_loop_avx
-
-
- vmovdqu xmm11,XMMWORD PTR[((-48))+rdi]
- vmovdqu xmm12,XMMWORD PTR[((-32))+rdi]
- vpshufd xmm13,xmm14,0EEh
- vpshufd xmm10,xmm14,044h
- vmovdqa XMMWORD PTR[(-144)+r11],xmm13
- vmovdqa XMMWORD PTR[rsp],xmm10
- vpshufd xmm14,xmm11,0EEh
- vmovdqu xmm10,XMMWORD PTR[((-16))+rdi]
- vpshufd xmm11,xmm11,044h
- vmovdqa XMMWORD PTR[(-128)+r11],xmm14
- vmovdqa XMMWORD PTR[16+rsp],xmm11
- vpshufd xmm13,xmm12,0EEh
- vmovdqu xmm11,XMMWORD PTR[rdi]
- vpshufd xmm12,xmm12,044h
- vmovdqa XMMWORD PTR[(-112)+r11],xmm13
- vmovdqa XMMWORD PTR[32+rsp],xmm12
- vpshufd xmm14,xmm10,0EEh
- vmovdqu xmm12,XMMWORD PTR[16+rdi]
- vpshufd xmm10,xmm10,044h
- vmovdqa XMMWORD PTR[(-96)+r11],xmm14
- vmovdqa XMMWORD PTR[48+rsp],xmm10
- vpshufd xmm13,xmm11,0EEh
- vmovdqu xmm10,XMMWORD PTR[32+rdi]
- vpshufd xmm11,xmm11,044h
- vmovdqa XMMWORD PTR[(-80)+r11],xmm13
- vmovdqa XMMWORD PTR[64+rsp],xmm11
- vpshufd xmm14,xmm12,0EEh
- vmovdqu xmm11,XMMWORD PTR[48+rdi]
- vpshufd xmm12,xmm12,044h
- vmovdqa XMMWORD PTR[(-64)+r11],xmm14
- vmovdqa XMMWORD PTR[80+rsp],xmm12
- vpshufd xmm13,xmm10,0EEh
- vmovdqu xmm12,XMMWORD PTR[64+rdi]
- vpshufd xmm10,xmm10,044h
- vmovdqa XMMWORD PTR[(-48)+r11],xmm13
- vmovdqa XMMWORD PTR[96+rsp],xmm10
- vpshufd xmm14,xmm11,0EEh
- vpshufd xmm11,xmm11,044h
- vmovdqa XMMWORD PTR[(-32)+r11],xmm14
- vmovdqa XMMWORD PTR[112+rsp],xmm11
- vpshufd xmm13,xmm12,0EEh
- vmovdqa xmm14,XMMWORD PTR[rsp]
- vpshufd xmm12,xmm12,044h
- vmovdqa XMMWORD PTR[(-16)+r11],xmm13
- vmovdqa XMMWORD PTR[128+rsp],xmm12
-
- jmp $L$oop_avx
-
-ALIGN 32
-$L$oop_avx::
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- vpmuludq xmm10,xmm14,xmm5
- vpmuludq xmm11,xmm14,xmm6
- vmovdqa XMMWORD PTR[32+r11],xmm2
- vpmuludq xmm12,xmm14,xmm7
- vmovdqa xmm2,XMMWORD PTR[16+rsp]
- vpmuludq xmm13,xmm14,xmm8
- vpmuludq xmm14,xmm14,xmm9
-
- vmovdqa XMMWORD PTR[r11],xmm0
- vpmuludq xmm0,xmm9,XMMWORD PTR[32+rsp]
- vmovdqa XMMWORD PTR[16+r11],xmm1
- vpmuludq xmm1,xmm2,xmm8
- vpaddq xmm10,xmm10,xmm0
- vpaddq xmm14,xmm14,xmm1
- vmovdqa XMMWORD PTR[48+r11],xmm3
- vpmuludq xmm0,xmm2,xmm7
- vpmuludq xmm1,xmm2,xmm6
- vpaddq xmm13,xmm13,xmm0
- vmovdqa xmm3,XMMWORD PTR[48+rsp]
- vpaddq xmm12,xmm12,xmm1
- vmovdqa XMMWORD PTR[64+r11],xmm4
- vpmuludq xmm2,xmm2,xmm5
- vpmuludq xmm0,xmm3,xmm7
- vpaddq xmm11,xmm11,xmm2
-
- vmovdqa xmm4,XMMWORD PTR[64+rsp]
- vpaddq xmm14,xmm14,xmm0
- vpmuludq xmm1,xmm3,xmm6
- vpmuludq xmm3,xmm3,xmm5
- vpaddq xmm13,xmm13,xmm1
- vmovdqa xmm2,XMMWORD PTR[80+rsp]
- vpaddq xmm12,xmm12,xmm3
- vpmuludq xmm0,xmm4,xmm9
- vpmuludq xmm4,xmm4,xmm8
- vpaddq xmm11,xmm11,xmm0
- vmovdqa xmm3,XMMWORD PTR[96+rsp]
- vpaddq xmm10,xmm10,xmm4
-
- vmovdqa xmm4,XMMWORD PTR[128+rsp]
- vpmuludq xmm1,xmm2,xmm6
- vpmuludq xmm2,xmm2,xmm5
- vpaddq xmm14,xmm14,xmm1
- vpaddq xmm13,xmm13,xmm2
- vpmuludq xmm0,xmm3,xmm9
- vpmuludq xmm1,xmm3,xmm8
- vpaddq xmm12,xmm12,xmm0
- vmovdqu xmm0,XMMWORD PTR[rsi]
- vpaddq xmm11,xmm11,xmm1
- vpmuludq xmm3,xmm3,xmm7
- vpmuludq xmm7,xmm4,xmm7
- vpaddq xmm10,xmm10,xmm3
-
- vmovdqu xmm1,XMMWORD PTR[16+rsi]
- vpaddq xmm11,xmm11,xmm7
- vpmuludq xmm8,xmm4,xmm8
- vpmuludq xmm9,xmm4,xmm9
- vpsrldq xmm2,xmm0,6
- vpaddq xmm12,xmm12,xmm8
- vpaddq xmm13,xmm13,xmm9
- vpsrldq xmm3,xmm1,6
- vpmuludq xmm9,xmm5,XMMWORD PTR[112+rsp]
- vpmuludq xmm5,xmm4,xmm6
- vpunpckhqdq xmm4,xmm0,xmm1
- vpaddq xmm14,xmm14,xmm9
- vmovdqa xmm9,XMMWORD PTR[((-144))+r11]
- vpaddq xmm10,xmm10,xmm5
-
- vpunpcklqdq xmm0,xmm0,xmm1
- vpunpcklqdq xmm3,xmm2,xmm3
-
-
- vpsrldq xmm4,xmm4,5
- vpsrlq xmm1,xmm0,26
- vpand xmm0,xmm0,xmm15
- vpsrlq xmm2,xmm3,4
- vpand xmm1,xmm1,xmm15
- vpand xmm4,xmm4,XMMWORD PTR[rcx]
- vpsrlq xmm3,xmm3,30
- vpand xmm2,xmm2,xmm15
- vpand xmm3,xmm3,xmm15
- vpor xmm4,xmm4,XMMWORD PTR[32+rcx]
-
- vpaddq xmm0,xmm0,XMMWORD PTR[r11]
- vpaddq xmm1,xmm1,XMMWORD PTR[16+r11]
- vpaddq xmm2,xmm2,XMMWORD PTR[32+r11]
- vpaddq xmm3,xmm3,XMMWORD PTR[48+r11]
- vpaddq xmm4,xmm4,XMMWORD PTR[64+r11]
-
- lea rax,QWORD PTR[32+rsi]
- lea rsi,QWORD PTR[64+rsi]
- sub rdx,64
- cmovc rsi,rax
-
-
-
-
-
-
-
-
-
-
- vpmuludq xmm5,xmm9,xmm0
- vpmuludq xmm6,xmm9,xmm1
- vpaddq xmm10,xmm10,xmm5
- vpaddq xmm11,xmm11,xmm6
- vmovdqa xmm7,XMMWORD PTR[((-128))+r11]
- vpmuludq xmm5,xmm9,xmm2
- vpmuludq xmm6,xmm9,xmm3
- vpaddq xmm12,xmm12,xmm5
- vpaddq xmm13,xmm13,xmm6
- vpmuludq xmm9,xmm9,xmm4
- vpmuludq xmm5,xmm4,XMMWORD PTR[((-112))+r11]
- vpaddq xmm14,xmm14,xmm9
-
- vpaddq xmm10,xmm10,xmm5
- vpmuludq xmm6,xmm7,xmm2
- vpmuludq xmm5,xmm7,xmm3
- vpaddq xmm13,xmm13,xmm6
- vmovdqa xmm8,XMMWORD PTR[((-96))+r11]
- vpaddq xmm14,xmm14,xmm5
- vpmuludq xmm6,xmm7,xmm1
- vpmuludq xmm7,xmm7,xmm0
- vpaddq xmm12,xmm12,xmm6
- vpaddq xmm11,xmm11,xmm7
-
- vmovdqa xmm9,XMMWORD PTR[((-80))+r11]
- vpmuludq xmm5,xmm8,xmm2
- vpmuludq xmm6,xmm8,xmm1
- vpaddq xmm14,xmm14,xmm5
- vpaddq xmm13,xmm13,xmm6
- vmovdqa xmm7,XMMWORD PTR[((-64))+r11]
- vpmuludq xmm8,xmm8,xmm0
- vpmuludq xmm5,xmm9,xmm4
- vpaddq xmm12,xmm12,xmm8
- vpaddq xmm11,xmm11,xmm5
- vmovdqa xmm8,XMMWORD PTR[((-48))+r11]
- vpmuludq xmm9,xmm9,xmm3
- vpmuludq xmm6,xmm7,xmm1
- vpaddq xmm10,xmm10,xmm9
-
- vmovdqa xmm9,XMMWORD PTR[((-16))+r11]
- vpaddq xmm14,xmm14,xmm6
- vpmuludq xmm7,xmm7,xmm0
- vpmuludq xmm5,xmm8,xmm4
- vpaddq xmm13,xmm13,xmm7
- vpaddq xmm12,xmm12,xmm5
- vmovdqu xmm5,XMMWORD PTR[32+rsi]
- vpmuludq xmm7,xmm8,xmm3
- vpmuludq xmm8,xmm8,xmm2
- vpaddq xmm11,xmm11,xmm7
- vmovdqu xmm6,XMMWORD PTR[48+rsi]
- vpaddq xmm10,xmm10,xmm8
-
- vpmuludq xmm2,xmm9,xmm2
- vpmuludq xmm3,xmm9,xmm3
- vpsrldq xmm7,xmm5,6
- vpaddq xmm11,xmm11,xmm2
- vpmuludq xmm4,xmm9,xmm4
- vpsrldq xmm8,xmm6,6
- vpaddq xmm2,xmm12,xmm3
- vpaddq xmm3,xmm13,xmm4
- vpmuludq xmm4,xmm0,XMMWORD PTR[((-32))+r11]
- vpmuludq xmm0,xmm9,xmm1
- vpunpckhqdq xmm9,xmm5,xmm6
- vpaddq xmm4,xmm14,xmm4
- vpaddq xmm0,xmm10,xmm0
-
- vpunpcklqdq xmm5,xmm5,xmm6
- vpunpcklqdq xmm8,xmm7,xmm8
-
-
- vpsrldq xmm9,xmm9,5
- vpsrlq xmm6,xmm5,26
- vmovdqa xmm14,XMMWORD PTR[rsp]
- vpand xmm5,xmm5,xmm15
- vpsrlq xmm7,xmm8,4
- vpand xmm6,xmm6,xmm15
- vpand xmm9,xmm9,XMMWORD PTR[rcx]
- vpsrlq xmm8,xmm8,30
- vpand xmm7,xmm7,xmm15
- vpand xmm8,xmm8,xmm15
- vpor xmm9,xmm9,XMMWORD PTR[32+rcx]
-
-
-
-
-
- vpsrlq xmm13,xmm3,26
- vpand xmm3,xmm3,xmm15
- vpaddq xmm4,xmm4,xmm13
-
- vpsrlq xmm10,xmm0,26
- vpand xmm0,xmm0,xmm15
- vpaddq xmm1,xmm11,xmm10
-
- vpsrlq xmm10,xmm4,26
- vpand xmm4,xmm4,xmm15
-
- vpsrlq xmm11,xmm1,26
- vpand xmm1,xmm1,xmm15
- vpaddq xmm2,xmm2,xmm11
-
- vpaddq xmm0,xmm0,xmm10
- vpsllq xmm10,xmm10,2
- vpaddq xmm0,xmm0,xmm10
-
- vpsrlq xmm12,xmm2,26
- vpand xmm2,xmm2,xmm15
- vpaddq xmm3,xmm3,xmm12
-
- vpsrlq xmm10,xmm0,26
- vpand xmm0,xmm0,xmm15
- vpaddq xmm1,xmm1,xmm10
-
- vpsrlq xmm13,xmm3,26
- vpand xmm3,xmm3,xmm15
- vpaddq xmm4,xmm4,xmm13
-
- ja $L$oop_avx
-
-$L$skip_loop_avx::
-
-
-
- vpshufd xmm14,xmm14,010h
- add rdx,32
- jnz $L$ong_tail_avx
-
- vpaddq xmm7,xmm7,xmm2
- vpaddq xmm5,xmm5,xmm0
- vpaddq xmm6,xmm6,xmm1
- vpaddq xmm8,xmm8,xmm3
- vpaddq xmm9,xmm9,xmm4
-
-$L$ong_tail_avx::
- vmovdqa XMMWORD PTR[32+r11],xmm2
- vmovdqa XMMWORD PTR[r11],xmm0
- vmovdqa XMMWORD PTR[16+r11],xmm1
- vmovdqa XMMWORD PTR[48+r11],xmm3
- vmovdqa XMMWORD PTR[64+r11],xmm4
-
-
-
-
-
-
-
- vpmuludq xmm12,xmm14,xmm7
- vpmuludq xmm10,xmm14,xmm5
- vpshufd xmm2,XMMWORD PTR[((-48))+rdi],010h
- vpmuludq xmm11,xmm14,xmm6
- vpmuludq xmm13,xmm14,xmm8
- vpmuludq xmm14,xmm14,xmm9
-
- vpmuludq xmm0,xmm2,xmm8
- vpaddq xmm14,xmm14,xmm0
- vpshufd xmm3,XMMWORD PTR[((-32))+rdi],010h
- vpmuludq xmm1,xmm2,xmm7
- vpaddq xmm13,xmm13,xmm1
- vpshufd xmm4,XMMWORD PTR[((-16))+rdi],010h
- vpmuludq xmm0,xmm2,xmm6
- vpaddq xmm12,xmm12,xmm0
- vpmuludq xmm2,xmm2,xmm5
- vpaddq xmm11,xmm11,xmm2
- vpmuludq xmm3,xmm3,xmm9
- vpaddq xmm10,xmm10,xmm3
-
- vpshufd xmm2,XMMWORD PTR[rdi],010h
- vpmuludq xmm1,xmm4,xmm7
- vpaddq xmm14,xmm14,xmm1
- vpmuludq xmm0,xmm4,xmm6
- vpaddq xmm13,xmm13,xmm0
- vpshufd xmm3,XMMWORD PTR[16+rdi],010h
- vpmuludq xmm4,xmm4,xmm5
- vpaddq xmm12,xmm12,xmm4
- vpmuludq xmm1,xmm2,xmm9
- vpaddq xmm11,xmm11,xmm1
- vpshufd xmm4,XMMWORD PTR[32+rdi],010h
- vpmuludq xmm2,xmm2,xmm8
- vpaddq xmm10,xmm10,xmm2
-
- vpmuludq xmm0,xmm3,xmm6
- vpaddq xmm14,xmm14,xmm0
- vpmuludq xmm3,xmm3,xmm5
- vpaddq xmm13,xmm13,xmm3
- vpshufd xmm2,XMMWORD PTR[48+rdi],010h
- vpmuludq xmm1,xmm4,xmm9
- vpaddq xmm12,xmm12,xmm1
- vpshufd xmm3,XMMWORD PTR[64+rdi],010h
- vpmuludq xmm0,xmm4,xmm8
- vpaddq xmm11,xmm11,xmm0
- vpmuludq xmm4,xmm4,xmm7
- vpaddq xmm10,xmm10,xmm4
-
- vpmuludq xmm2,xmm2,xmm5
- vpaddq xmm14,xmm14,xmm2
- vpmuludq xmm1,xmm3,xmm9
- vpaddq xmm13,xmm13,xmm1
- vpmuludq xmm0,xmm3,xmm8
- vpaddq xmm12,xmm12,xmm0
- vpmuludq xmm1,xmm3,xmm7
- vpaddq xmm11,xmm11,xmm1
- vpmuludq xmm3,xmm3,xmm6
- vpaddq xmm10,xmm10,xmm3
-
- jz $L$short_tail_avx
-
- vmovdqu xmm0,XMMWORD PTR[rsi]
- vmovdqu xmm1,XMMWORD PTR[16+rsi]
-
- vpsrldq xmm2,xmm0,6
- vpsrldq xmm3,xmm1,6
- vpunpckhqdq xmm4,xmm0,xmm1
- vpunpcklqdq xmm0,xmm0,xmm1
- vpunpcklqdq xmm3,xmm2,xmm3
-
- vpsrlq xmm4,xmm4,40
- vpsrlq xmm1,xmm0,26
- vpand xmm0,xmm0,xmm15
- vpsrlq xmm2,xmm3,4
- vpand xmm1,xmm1,xmm15
- vpsrlq xmm3,xmm3,30
- vpand xmm2,xmm2,xmm15
- vpand xmm3,xmm3,xmm15
- vpor xmm4,xmm4,XMMWORD PTR[32+rcx]
-
- vpshufd xmm9,XMMWORD PTR[((-64))+rdi],032h
- vpaddq xmm0,xmm0,XMMWORD PTR[r11]
- vpaddq xmm1,xmm1,XMMWORD PTR[16+r11]
- vpaddq xmm2,xmm2,XMMWORD PTR[32+r11]
- vpaddq xmm3,xmm3,XMMWORD PTR[48+r11]
- vpaddq xmm4,xmm4,XMMWORD PTR[64+r11]
-
-
-
-
- vpmuludq xmm5,xmm9,xmm0
- vpaddq xmm10,xmm10,xmm5
- vpmuludq xmm6,xmm9,xmm1
- vpaddq xmm11,xmm11,xmm6
- vpmuludq xmm5,xmm9,xmm2
- vpaddq xmm12,xmm12,xmm5
- vpshufd xmm7,XMMWORD PTR[((-48))+rdi],032h
- vpmuludq xmm6,xmm9,xmm3
- vpaddq xmm13,xmm13,xmm6
- vpmuludq xmm9,xmm9,xmm4
- vpaddq xmm14,xmm14,xmm9
-
- vpmuludq xmm5,xmm7,xmm3
- vpaddq xmm14,xmm14,xmm5
- vpshufd xmm8,XMMWORD PTR[((-32))+rdi],032h
- vpmuludq xmm6,xmm7,xmm2
- vpaddq xmm13,xmm13,xmm6
- vpshufd xmm9,XMMWORD PTR[((-16))+rdi],032h
- vpmuludq xmm5,xmm7,xmm1
- vpaddq xmm12,xmm12,xmm5
- vpmuludq xmm7,xmm7,xmm0
- vpaddq xmm11,xmm11,xmm7
- vpmuludq xmm8,xmm8,xmm4
- vpaddq xmm10,xmm10,xmm8
-
- vpshufd xmm7,XMMWORD PTR[rdi],032h
- vpmuludq xmm6,xmm9,xmm2
- vpaddq xmm14,xmm14,xmm6
- vpmuludq xmm5,xmm9,xmm1
- vpaddq xmm13,xmm13,xmm5
- vpshufd xmm8,XMMWORD PTR[16+rdi],032h
- vpmuludq xmm9,xmm9,xmm0
- vpaddq xmm12,xmm12,xmm9
- vpmuludq xmm6,xmm7,xmm4
- vpaddq xmm11,xmm11,xmm6
- vpshufd xmm9,XMMWORD PTR[32+rdi],032h
- vpmuludq xmm7,xmm7,xmm3
- vpaddq xmm10,xmm10,xmm7
-
- vpmuludq xmm5,xmm8,xmm1
- vpaddq xmm14,xmm14,xmm5
- vpmuludq xmm8,xmm8,xmm0
- vpaddq xmm13,xmm13,xmm8
- vpshufd xmm7,XMMWORD PTR[48+rdi],032h
- vpmuludq xmm6,xmm9,xmm4
- vpaddq xmm12,xmm12,xmm6
- vpshufd xmm8,XMMWORD PTR[64+rdi],032h
- vpmuludq xmm5,xmm9,xmm3
- vpaddq xmm11,xmm11,xmm5
- vpmuludq xmm9,xmm9,xmm2
- vpaddq xmm10,xmm10,xmm9
-
- vpmuludq xmm7,xmm7,xmm0
- vpaddq xmm14,xmm14,xmm7
- vpmuludq xmm6,xmm8,xmm4
- vpaddq xmm13,xmm13,xmm6
- vpmuludq xmm5,xmm8,xmm3
- vpaddq xmm12,xmm12,xmm5
- vpmuludq xmm6,xmm8,xmm2
- vpaddq xmm11,xmm11,xmm6
- vpmuludq xmm8,xmm8,xmm1
- vpaddq xmm10,xmm10,xmm8
-
-$L$short_tail_avx::
-
-
-
- vpsrldq xmm9,xmm14,8
- vpsrldq xmm8,xmm13,8
- vpsrldq xmm6,xmm11,8
- vpsrldq xmm5,xmm10,8
- vpsrldq xmm7,xmm12,8
- vpaddq xmm13,xmm13,xmm8
- vpaddq xmm14,xmm14,xmm9
- vpaddq xmm10,xmm10,xmm5
- vpaddq xmm11,xmm11,xmm6
- vpaddq xmm12,xmm12,xmm7
-
-
-
-
- vpsrlq xmm3,xmm13,26
- vpand xmm13,xmm13,xmm15
- vpaddq xmm14,xmm14,xmm3
-
- vpsrlq xmm0,xmm10,26
- vpand xmm10,xmm10,xmm15
- vpaddq xmm11,xmm11,xmm0
-
- vpsrlq xmm4,xmm14,26
- vpand xmm14,xmm14,xmm15
-
- vpsrlq xmm1,xmm11,26
- vpand xmm11,xmm11,xmm15
- vpaddq xmm12,xmm12,xmm1
-
- vpaddq xmm10,xmm10,xmm4
- vpsllq xmm4,xmm4,2
- vpaddq xmm10,xmm10,xmm4
-
- vpsrlq xmm2,xmm12,26
- vpand xmm12,xmm12,xmm15
- vpaddq xmm13,xmm13,xmm2
-
- vpsrlq xmm0,xmm10,26
- vpand xmm10,xmm10,xmm15
- vpaddq xmm11,xmm11,xmm0
-
- vpsrlq xmm3,xmm13,26
- vpand xmm13,xmm13,xmm15
- vpaddq xmm14,xmm14,xmm3
-
- vmovd DWORD PTR[(-112)+rdi],xmm10
- vmovd DWORD PTR[(-108)+rdi],xmm11
- vmovd DWORD PTR[(-104)+rdi],xmm12
- vmovd DWORD PTR[(-100)+rdi],xmm13
- vmovd DWORD PTR[(-96)+rdi],xmm14
- vmovdqa xmm6,XMMWORD PTR[80+r11]
- vmovdqa xmm7,XMMWORD PTR[96+r11]
- vmovdqa xmm8,XMMWORD PTR[112+r11]
- vmovdqa xmm9,XMMWORD PTR[128+r11]
- vmovdqa xmm10,XMMWORD PTR[144+r11]
- vmovdqa xmm11,XMMWORD PTR[160+r11]
- vmovdqa xmm12,XMMWORD PTR[176+r11]
- vmovdqa xmm13,XMMWORD PTR[192+r11]
- vmovdqa xmm14,XMMWORD PTR[208+r11]
- vmovdqa xmm15,XMMWORD PTR[224+r11]
- lea rsp,QWORD PTR[248+r11]
-$L$do_avx_epilogue::
- vzeroupper
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_poly1305_blocks_avx::
-poly1305_blocks_avx ENDP
-
-
-ALIGN 32
-poly1305_emit_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_poly1305_emit_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- cmp DWORD PTR[20+rdi],0
- je $L$emit
-
- mov eax,DWORD PTR[rdi]
- mov ecx,DWORD PTR[4+rdi]
- mov r8d,DWORD PTR[8+rdi]
- mov r11d,DWORD PTR[12+rdi]
- mov r10d,DWORD PTR[16+rdi]
-
- shl rcx,26
- mov r9,r8
- shl r8,52
- add rax,rcx
- shr r9,12
- add r8,rax
- adc r9,0
-
- shl r11,14
- mov rax,r10
- shr r10,24
- add r9,r11
- shl rax,40
- add r9,rax
- adc r10,0
-
- mov rax,r10
- mov rcx,r10
- and r10,3
- shr rax,2
- and rcx,-4
- add rax,rcx
- add r8,rax
- adc r9,0
- adc r10,0
-
- mov rax,r8
- add r8,5
- mov rcx,r9
- adc r9,0
- adc r10,0
- shr r10,2
- cmovnz rax,r8
- cmovnz rcx,r9
-
- add rax,QWORD PTR[rdx]
- adc rcx,QWORD PTR[8+rdx]
- mov QWORD PTR[rsi],rax
- mov QWORD PTR[8+rsi],rcx
-
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_poly1305_emit_avx::
-poly1305_emit_avx ENDP
-
-ALIGN 32
-poly1305_blocks_avx2 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_poly1305_blocks_avx2::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
-
- mov r8d,DWORD PTR[20+rdi]
- cmp rdx,128
- jae $L$blocks_avx2
- test r8d,r8d
- jz $L$blocks
-
-$L$blocks_avx2::
- and rdx,-16
- jz $L$no_data_avx2
-
- vzeroupper
-
- test r8d,r8d
- jz $L$base2_64_avx2
-
- test rdx,63
- jz $L$even_avx2
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$blocks_avx2_body::
-
- mov r15,rdx
-
- mov r8,QWORD PTR[rdi]
- mov r9,QWORD PTR[8+rdi]
- mov ebp,DWORD PTR[16+rdi]
-
- mov r11,QWORD PTR[24+rdi]
- mov r13,QWORD PTR[32+rdi]
-
-
- mov r14d,r8d
- and r8,-2147483648
- mov r12,r9
- mov ebx,r9d
- and r9,-2147483648
-
- shr r8,6
- shl r12,52
- add r14,r8
- shr rbx,12
- shr r9,18
- add r14,r12
- adc rbx,r9
-
- mov r8,rbp
- shl r8,40
- shr rbp,24
- add rbx,r8
- adc rbp,0
-
- mov r9,-4
- mov r8,rbp
- and r9,rbp
- shr r8,2
- and rbp,3
- add r8,r9
- add r14,r8
- adc rbx,0
- adc rbp,0
-
- mov r12,r13
- mov rax,r13
- shr r13,2
- add r13,r12
-
-$L$base2_26_pre_avx2::
- add r14,QWORD PTR[rsi]
- adc rbx,QWORD PTR[8+rsi]
- lea rsi,QWORD PTR[16+rsi]
- adc rbp,rcx
- sub r15,16
-
- call __poly1305_block
- mov rax,r12
-
- test r15,63
- jnz $L$base2_26_pre_avx2
-
- test rcx,rcx
- jz $L$store_base2_64_avx2
-
-
- mov rax,r14
- mov rdx,r14
- shr r14,52
- mov r11,rbx
- mov r12,rbx
- shr rdx,26
- and rax,03ffffffh
- shl r11,12
- and rdx,03ffffffh
- shr rbx,14
- or r14,r11
- shl rbp,24
- and r14,03ffffffh
- shr r12,40
- and rbx,03ffffffh
- or rbp,r12
-
- test r15,r15
- jz $L$store_base2_26_avx2
-
- vmovd xmm0,eax
- vmovd xmm1,edx
- vmovd xmm2,r14d
- vmovd xmm3,ebx
- vmovd xmm4,ebp
- jmp $L$proceed_avx2
-
-ALIGN 32
-$L$store_base2_64_avx2::
- mov QWORD PTR[rdi],r14
- mov QWORD PTR[8+rdi],rbx
- mov QWORD PTR[16+rdi],rbp
- jmp $L$done_avx2
-
-ALIGN 16
-$L$store_base2_26_avx2::
- mov DWORD PTR[rdi],eax
- mov DWORD PTR[4+rdi],edx
- mov DWORD PTR[8+rdi],r14d
- mov DWORD PTR[12+rdi],ebx
- mov DWORD PTR[16+rdi],ebp
-ALIGN 16
-$L$done_avx2::
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbp,QWORD PTR[32+rsp]
-
- mov rbx,QWORD PTR[40+rsp]
-
- lea rsp,QWORD PTR[48+rsp]
-
-$L$no_data_avx2::
-$L$blocks_avx2_epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-
-ALIGN 32
-$L$base2_64_avx2::
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-$L$base2_64_avx2_body::
-
- mov r15,rdx
-
- mov r11,QWORD PTR[24+rdi]
- mov r13,QWORD PTR[32+rdi]
-
- mov r14,QWORD PTR[rdi]
- mov rbx,QWORD PTR[8+rdi]
- mov ebp,DWORD PTR[16+rdi]
-
- mov r12,r13
- mov rax,r13
- shr r13,2
- add r13,r12
-
- test rdx,63
- jz $L$init_avx2
-
-$L$base2_64_pre_avx2::
- add r14,QWORD PTR[rsi]
- adc rbx,QWORD PTR[8+rsi]
- lea rsi,QWORD PTR[16+rsi]
- adc rbp,rcx
- sub r15,16
-
- call __poly1305_block
- mov rax,r12
-
- test r15,63
- jnz $L$base2_64_pre_avx2
-
-$L$init_avx2::
-
- mov rax,r14
- mov rdx,r14
- shr r14,52
- mov r8,rbx
- mov r9,rbx
- shr rdx,26
- and rax,03ffffffh
- shl r8,12
- and rdx,03ffffffh
- shr rbx,14
- or r14,r8
- shl rbp,24
- and r14,03ffffffh
- shr r9,40
- and rbx,03ffffffh
- or rbp,r9
-
- vmovd xmm0,eax
- vmovd xmm1,edx
- vmovd xmm2,r14d
- vmovd xmm3,ebx
- vmovd xmm4,ebp
- mov DWORD PTR[20+rdi],1
-
- call __poly1305_init_avx
-
-$L$proceed_avx2::
- mov rdx,r15
- mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- mov r11d,3221291008
-
- mov r15,QWORD PTR[rsp]
-
- mov r14,QWORD PTR[8+rsp]
-
- mov r13,QWORD PTR[16+rsp]
-
- mov r12,QWORD PTR[24+rsp]
-
- mov rbp,QWORD PTR[32+rsp]
-
- mov rbx,QWORD PTR[40+rsp]
-
- lea rax,QWORD PTR[48+rsp]
- lea rsp,QWORD PTR[48+rsp]
-
-$L$base2_64_avx2_epilogue::
- jmp $L$do_avx2
-
-
-ALIGN 32
-$L$even_avx2::
-
- mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- vmovd xmm0,DWORD PTR[rdi]
- vmovd xmm1,DWORD PTR[4+rdi]
- vmovd xmm2,DWORD PTR[8+rdi]
- vmovd xmm3,DWORD PTR[12+rdi]
- vmovd xmm4,DWORD PTR[16+rdi]
-
-$L$do_avx2::
- lea r11,QWORD PTR[((-248))+rsp]
- sub rsp,01c8h
- vmovdqa XMMWORD PTR[80+r11],xmm6
- vmovdqa XMMWORD PTR[96+r11],xmm7
- vmovdqa XMMWORD PTR[112+r11],xmm8
- vmovdqa XMMWORD PTR[128+r11],xmm9
- vmovdqa XMMWORD PTR[144+r11],xmm10
- vmovdqa XMMWORD PTR[160+r11],xmm11
- vmovdqa XMMWORD PTR[176+r11],xmm12
- vmovdqa XMMWORD PTR[192+r11],xmm13
- vmovdqa XMMWORD PTR[208+r11],xmm14
- vmovdqa XMMWORD PTR[224+r11],xmm15
-$L$do_avx2_body::
- lea rcx,QWORD PTR[$L$const]
- lea rdi,QWORD PTR[((48+64))+rdi]
- vmovdqa ymm7,YMMWORD PTR[96+rcx]
-
-
- vmovdqu xmm9,XMMWORD PTR[((-64))+rdi]
- and rsp,-512
- vmovdqu xmm10,XMMWORD PTR[((-48))+rdi]
- vmovdqu xmm6,XMMWORD PTR[((-32))+rdi]
- vmovdqu xmm11,XMMWORD PTR[((-16))+rdi]
- vmovdqu xmm12,XMMWORD PTR[rdi]
- vmovdqu xmm13,XMMWORD PTR[16+rdi]
- lea rax,QWORD PTR[144+rsp]
- vmovdqu xmm14,XMMWORD PTR[32+rdi]
- vpermd ymm9,ymm7,ymm9
- vmovdqu xmm15,XMMWORD PTR[48+rdi]
- vpermd ymm10,ymm7,ymm10
- vmovdqu xmm5,XMMWORD PTR[64+rdi]
- vpermd ymm6,ymm7,ymm6
- vmovdqa YMMWORD PTR[rsp],ymm9
- vpermd ymm11,ymm7,ymm11
- vmovdqa YMMWORD PTR[(32-144)+rax],ymm10
- vpermd ymm12,ymm7,ymm12
- vmovdqa YMMWORD PTR[(64-144)+rax],ymm6
- vpermd ymm13,ymm7,ymm13
- vmovdqa YMMWORD PTR[(96-144)+rax],ymm11
- vpermd ymm14,ymm7,ymm14
- vmovdqa YMMWORD PTR[(128-144)+rax],ymm12
- vpermd ymm15,ymm7,ymm15
- vmovdqa YMMWORD PTR[(160-144)+rax],ymm13
- vpermd ymm5,ymm7,ymm5
- vmovdqa YMMWORD PTR[(192-144)+rax],ymm14
- vmovdqa YMMWORD PTR[(224-144)+rax],ymm15
- vmovdqa YMMWORD PTR[(256-144)+rax],ymm5
- vmovdqa ymm5,YMMWORD PTR[64+rcx]
-
-
-
- vmovdqu xmm7,XMMWORD PTR[rsi]
- vmovdqu xmm8,XMMWORD PTR[16+rsi]
- vinserti128 ymm7,ymm7,XMMWORD PTR[32+rsi],1
- vinserti128 ymm8,ymm8,XMMWORD PTR[48+rsi],1
- lea rsi,QWORD PTR[64+rsi]
-
- vpsrldq ymm9,ymm7,6
- vpsrldq ymm10,ymm8,6
- vpunpckhqdq ymm6,ymm7,ymm8
- vpunpcklqdq ymm9,ymm9,ymm10
- vpunpcklqdq ymm7,ymm7,ymm8
-
- vpsrlq ymm10,ymm9,30
- vpsrlq ymm9,ymm9,4
- vpsrlq ymm8,ymm7,26
- vpsrlq ymm6,ymm6,40
- vpand ymm9,ymm9,ymm5
- vpand ymm7,ymm7,ymm5
- vpand ymm8,ymm8,ymm5
- vpand ymm10,ymm10,ymm5
- vpor ymm6,ymm6,YMMWORD PTR[32+rcx]
-
- vpaddq ymm2,ymm9,ymm2
- sub rdx,64
- jz $L$tail_avx2
- jmp $L$oop_avx2
-
-ALIGN 32
-$L$oop_avx2::
-
-
-
-
-
-
-
-
- vpaddq ymm0,ymm7,ymm0
- vmovdqa ymm7,YMMWORD PTR[rsp]
- vpaddq ymm1,ymm8,ymm1
- vmovdqa ymm8,YMMWORD PTR[32+rsp]
- vpaddq ymm3,ymm10,ymm3
- vmovdqa ymm9,YMMWORD PTR[96+rsp]
- vpaddq ymm4,ymm6,ymm4
- vmovdqa ymm10,YMMWORD PTR[48+rax]
- vmovdqa ymm5,YMMWORD PTR[112+rax]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- vpmuludq ymm13,ymm7,ymm2
- vpmuludq ymm14,ymm8,ymm2
- vpmuludq ymm15,ymm9,ymm2
- vpmuludq ymm11,ymm10,ymm2
- vpmuludq ymm12,ymm5,ymm2
-
- vpmuludq ymm6,ymm8,ymm0
- vpmuludq ymm2,ymm8,ymm1
- vpaddq ymm12,ymm12,ymm6
- vpaddq ymm13,ymm13,ymm2
- vpmuludq ymm6,ymm8,ymm3
- vpmuludq ymm2,ymm4,YMMWORD PTR[64+rsp]
- vpaddq ymm15,ymm15,ymm6
- vpaddq ymm11,ymm11,ymm2
- vmovdqa ymm8,YMMWORD PTR[((-16))+rax]
-
- vpmuludq ymm6,ymm7,ymm0
- vpmuludq ymm2,ymm7,ymm1
- vpaddq ymm11,ymm11,ymm6
- vpaddq ymm12,ymm12,ymm2
- vpmuludq ymm6,ymm7,ymm3
- vpmuludq ymm2,ymm7,ymm4
- vmovdqu xmm7,XMMWORD PTR[rsi]
- vpaddq ymm14,ymm14,ymm6
- vpaddq ymm15,ymm15,ymm2
- vinserti128 ymm7,ymm7,XMMWORD PTR[32+rsi],1
-
- vpmuludq ymm6,ymm8,ymm3
- vpmuludq ymm2,ymm8,ymm4
- vmovdqu xmm8,XMMWORD PTR[16+rsi]
- vpaddq ymm11,ymm11,ymm6
- vpaddq ymm12,ymm12,ymm2
- vmovdqa ymm2,YMMWORD PTR[16+rax]
- vpmuludq ymm6,ymm9,ymm1
- vpmuludq ymm9,ymm9,ymm0
- vpaddq ymm14,ymm14,ymm6
- vpaddq ymm13,ymm13,ymm9
- vinserti128 ymm8,ymm8,XMMWORD PTR[48+rsi],1
- lea rsi,QWORD PTR[64+rsi]
-
- vpmuludq ymm6,ymm2,ymm1
- vpmuludq ymm2,ymm2,ymm0
- vpsrldq ymm9,ymm7,6
- vpaddq ymm15,ymm15,ymm6
- vpaddq ymm14,ymm14,ymm2
- vpmuludq ymm6,ymm10,ymm3
- vpmuludq ymm2,ymm10,ymm4
- vpsrldq ymm10,ymm8,6
- vpaddq ymm12,ymm12,ymm6
- vpaddq ymm13,ymm13,ymm2
- vpunpckhqdq ymm6,ymm7,ymm8
-
- vpmuludq ymm3,ymm5,ymm3
- vpmuludq ymm4,ymm5,ymm4
- vpunpcklqdq ymm7,ymm7,ymm8
- vpaddq ymm2,ymm13,ymm3
- vpaddq ymm3,ymm14,ymm4
- vpunpcklqdq ymm10,ymm9,ymm10
- vpmuludq ymm4,ymm0,YMMWORD PTR[80+rax]
- vpmuludq ymm0,ymm5,ymm1
- vmovdqa ymm5,YMMWORD PTR[64+rcx]
- vpaddq ymm4,ymm15,ymm4
- vpaddq ymm0,ymm11,ymm0
-
-
-
-
- vpsrlq ymm14,ymm3,26
- vpand ymm3,ymm3,ymm5
- vpaddq ymm4,ymm4,ymm14
-
- vpsrlq ymm11,ymm0,26
- vpand ymm0,ymm0,ymm5
- vpaddq ymm1,ymm12,ymm11
-
- vpsrlq ymm15,ymm4,26
- vpand ymm4,ymm4,ymm5
-
- vpsrlq ymm9,ymm10,4
-
- vpsrlq ymm12,ymm1,26
- vpand ymm1,ymm1,ymm5
- vpaddq ymm2,ymm2,ymm12
-
- vpaddq ymm0,ymm0,ymm15
- vpsllq ymm15,ymm15,2
- vpaddq ymm0,ymm0,ymm15
-
- vpand ymm9,ymm9,ymm5
- vpsrlq ymm8,ymm7,26
-
- vpsrlq ymm13,ymm2,26
- vpand ymm2,ymm2,ymm5
- vpaddq ymm3,ymm3,ymm13
-
- vpaddq ymm2,ymm2,ymm9
- vpsrlq ymm10,ymm10,30
-
- vpsrlq ymm11,ymm0,26
- vpand ymm0,ymm0,ymm5
- vpaddq ymm1,ymm1,ymm11
-
- vpsrlq ymm6,ymm6,40
-
- vpsrlq ymm14,ymm3,26
- vpand ymm3,ymm3,ymm5
- vpaddq ymm4,ymm4,ymm14
-
- vpand ymm7,ymm7,ymm5
- vpand ymm8,ymm8,ymm5
- vpand ymm10,ymm10,ymm5
- vpor ymm6,ymm6,YMMWORD PTR[32+rcx]
-
- sub rdx,64
- jnz $L$oop_avx2
-
-DB 066h,090h
-$L$tail_avx2::
-
-
-
-
-
-
-
- vpaddq ymm0,ymm7,ymm0
- vmovdqu ymm7,YMMWORD PTR[4+rsp]
- vpaddq ymm1,ymm8,ymm1
- vmovdqu ymm8,YMMWORD PTR[36+rsp]
- vpaddq ymm3,ymm10,ymm3
- vmovdqu ymm9,YMMWORD PTR[100+rsp]
- vpaddq ymm4,ymm6,ymm4
- vmovdqu ymm10,YMMWORD PTR[52+rax]
- vmovdqu ymm5,YMMWORD PTR[116+rax]
-
- vpmuludq ymm13,ymm7,ymm2
- vpmuludq ymm14,ymm8,ymm2
- vpmuludq ymm15,ymm9,ymm2
- vpmuludq ymm11,ymm10,ymm2
- vpmuludq ymm12,ymm5,ymm2
-
- vpmuludq ymm6,ymm8,ymm0
- vpmuludq ymm2,ymm8,ymm1
- vpaddq ymm12,ymm12,ymm6
- vpaddq ymm13,ymm13,ymm2
- vpmuludq ymm6,ymm8,ymm3
- vpmuludq ymm2,ymm4,YMMWORD PTR[68+rsp]
- vpaddq ymm15,ymm15,ymm6
- vpaddq ymm11,ymm11,ymm2
-
- vpmuludq ymm6,ymm7,ymm0
- vpmuludq ymm2,ymm7,ymm1
- vpaddq ymm11,ymm11,ymm6
- vmovdqu ymm8,YMMWORD PTR[((-12))+rax]
- vpaddq ymm12,ymm12,ymm2
- vpmuludq ymm6,ymm7,ymm3
- vpmuludq ymm2,ymm7,ymm4
- vpaddq ymm14,ymm14,ymm6
- vpaddq ymm15,ymm15,ymm2
-
- vpmuludq ymm6,ymm8,ymm3
- vpmuludq ymm2,ymm8,ymm4
- vpaddq ymm11,ymm11,ymm6
- vpaddq ymm12,ymm12,ymm2
- vmovdqu ymm2,YMMWORD PTR[20+rax]
- vpmuludq ymm6,ymm9,ymm1
- vpmuludq ymm9,ymm9,ymm0
- vpaddq ymm14,ymm14,ymm6
- vpaddq ymm13,ymm13,ymm9
-
- vpmuludq ymm6,ymm2,ymm1
- vpmuludq ymm2,ymm2,ymm0
- vpaddq ymm15,ymm15,ymm6
- vpaddq ymm14,ymm14,ymm2
- vpmuludq ymm6,ymm10,ymm3
- vpmuludq ymm2,ymm10,ymm4
- vpaddq ymm12,ymm12,ymm6
- vpaddq ymm13,ymm13,ymm2
-
- vpmuludq ymm3,ymm5,ymm3
- vpmuludq ymm4,ymm5,ymm4
- vpaddq ymm2,ymm13,ymm3
- vpaddq ymm3,ymm14,ymm4
- vpmuludq ymm4,ymm0,YMMWORD PTR[84+rax]
- vpmuludq ymm0,ymm5,ymm1
- vmovdqa ymm5,YMMWORD PTR[64+rcx]
- vpaddq ymm4,ymm15,ymm4
- vpaddq ymm0,ymm11,ymm0
-
-
-
-
- vpsrldq ymm8,ymm12,8
- vpsrldq ymm9,ymm2,8
- vpsrldq ymm10,ymm3,8
- vpsrldq ymm6,ymm4,8
- vpsrldq ymm7,ymm0,8
- vpaddq ymm12,ymm12,ymm8
- vpaddq ymm2,ymm2,ymm9
- vpaddq ymm3,ymm3,ymm10
- vpaddq ymm4,ymm4,ymm6
- vpaddq ymm0,ymm0,ymm7
-
- vpermq ymm10,ymm3,02h
- vpermq ymm6,ymm4,02h
- vpermq ymm7,ymm0,02h
- vpermq ymm8,ymm12,02h
- vpermq ymm9,ymm2,02h
- vpaddq ymm3,ymm3,ymm10
- vpaddq ymm4,ymm4,ymm6
- vpaddq ymm0,ymm0,ymm7
- vpaddq ymm12,ymm12,ymm8
- vpaddq ymm2,ymm2,ymm9
-
-
-
-
- vpsrlq ymm14,ymm3,26
- vpand ymm3,ymm3,ymm5
- vpaddq ymm4,ymm4,ymm14
-
- vpsrlq ymm11,ymm0,26
- vpand ymm0,ymm0,ymm5
- vpaddq ymm1,ymm12,ymm11
-
- vpsrlq ymm15,ymm4,26
- vpand ymm4,ymm4,ymm5
-
- vpsrlq ymm12,ymm1,26
- vpand ymm1,ymm1,ymm5
- vpaddq ymm2,ymm2,ymm12
-
- vpaddq ymm0,ymm0,ymm15
- vpsllq ymm15,ymm15,2
- vpaddq ymm0,ymm0,ymm15
-
- vpsrlq ymm13,ymm2,26
- vpand ymm2,ymm2,ymm5
- vpaddq ymm3,ymm3,ymm13
-
- vpsrlq ymm11,ymm0,26
- vpand ymm0,ymm0,ymm5
- vpaddq ymm1,ymm1,ymm11
-
- vpsrlq ymm14,ymm3,26
- vpand ymm3,ymm3,ymm5
- vpaddq ymm4,ymm4,ymm14
-
- vmovd DWORD PTR[(-112)+rdi],xmm0
- vmovd DWORD PTR[(-108)+rdi],xmm1
- vmovd DWORD PTR[(-104)+rdi],xmm2
- vmovd DWORD PTR[(-100)+rdi],xmm3
- vmovd DWORD PTR[(-96)+rdi],xmm4
- vmovdqa xmm6,XMMWORD PTR[80+r11]
- vmovdqa xmm7,XMMWORD PTR[96+r11]
- vmovdqa xmm8,XMMWORD PTR[112+r11]
- vmovdqa xmm9,XMMWORD PTR[128+r11]
- vmovdqa xmm10,XMMWORD PTR[144+r11]
- vmovdqa xmm11,XMMWORD PTR[160+r11]
- vmovdqa xmm12,XMMWORD PTR[176+r11]
- vmovdqa xmm13,XMMWORD PTR[192+r11]
- vmovdqa xmm14,XMMWORD PTR[208+r11]
- vmovdqa xmm15,XMMWORD PTR[224+r11]
- lea rsp,QWORD PTR[248+r11]
-$L$do_avx2_epilogue::
- vzeroupper
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_poly1305_blocks_avx2::
-poly1305_blocks_avx2 ENDP
-ALIGN 64
-$L$const::
-$L$mask24::
- DD 00ffffffh,0,00ffffffh,0,00ffffffh,0,00ffffffh,0
-$L$129::
- DD 16777216,0,16777216,0,16777216,0,16777216,0
-$L$mask26::
- DD 03ffffffh,0,03ffffffh,0,03ffffffh,0,03ffffffh,0
-$L$permd_avx2::
- DD 2,2,2,3,2,0,2,1
-$L$permd_avx512::
- DD 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7
-
-$L$2_44_inp_permd::
- DD 0,1,1,2,2,3,7,7
-$L$2_44_inp_shift::
- DQ 0,12,24,64
-$L$2_44_mask::
- DQ 0fffffffffffh,0fffffffffffh,03ffffffffffh,0ffffffffffffffffh
-$L$2_44_shift_rgt::
- DQ 44,44,42,64
-$L$2_44_shift_lft::
- DQ 8,8,10,64
-
-ALIGN 64
-$L$x_mask44::
- DQ 0fffffffffffh,0fffffffffffh,0fffffffffffh,0fffffffffffh
- DQ 0fffffffffffh,0fffffffffffh,0fffffffffffh,0fffffffffffh
-$L$x_mask42::
- DQ 03ffffffffffh,03ffffffffffh,03ffffffffffh,03ffffffffffh
- DQ 03ffffffffffh,03ffffffffffh,03ffffffffffh,03ffffffffffh
-DB 80,111,108,121,49,51,48,53,32,102,111,114,32,120,56,54
-DB 95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32
-DB 98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115
-DB 108,46,111,114,103,62,0
-ALIGN 16
-PUBLIC xor128_encrypt_n_pad
-
-ALIGN 16
-xor128_encrypt_n_pad PROC PUBLIC
-
- sub rdx,r8
- sub rcx,r8
- mov r10,r9
- shr r9,4
- jz $L$tail_enc
- nop
-$L$oop_enc_xmm::
- movdqu xmm0,XMMWORD PTR[r8*1+rdx]
- pxor xmm0,XMMWORD PTR[r8]
- movdqu XMMWORD PTR[r8*1+rcx],xmm0
- movdqa XMMWORD PTR[r8],xmm0
- lea r8,QWORD PTR[16+r8]
- dec r9
- jnz $L$oop_enc_xmm
-
- and r10,15
- jz $L$done_enc
-
-$L$tail_enc::
- mov r9,16
- sub r9,r10
- xor eax,eax
-$L$oop_enc_byte::
- mov al,BYTE PTR[r8*1+rdx]
- xor al,BYTE PTR[r8]
- mov BYTE PTR[r8*1+rcx],al
- mov BYTE PTR[r8],al
- lea r8,QWORD PTR[1+r8]
- dec r10
- jnz $L$oop_enc_byte
-
- xor eax,eax
-$L$oop_enc_pad::
- mov BYTE PTR[r8],al
- lea r8,QWORD PTR[1+r8]
- dec r9
- jnz $L$oop_enc_pad
-
-$L$done_enc::
- mov rax,r8
- DB 0F3h,0C3h ;repret
-
-xor128_encrypt_n_pad ENDP
-
-PUBLIC xor128_decrypt_n_pad
-
-ALIGN 16
-xor128_decrypt_n_pad PROC PUBLIC
-
- sub rdx,r8
- sub rcx,r8
- mov r10,r9
- shr r9,4
- jz $L$tail_dec
- nop
-$L$oop_dec_xmm::
- movdqu xmm0,XMMWORD PTR[r8*1+rdx]
- movdqa xmm1,XMMWORD PTR[r8]
- pxor xmm1,xmm0
- movdqu XMMWORD PTR[r8*1+rcx],xmm1
- movdqa XMMWORD PTR[r8],xmm0
- lea r8,QWORD PTR[16+r8]
- dec r9
- jnz $L$oop_dec_xmm
-
- pxor xmm1,xmm1
- and r10,15
- jz $L$done_dec
-
-$L$tail_dec::
- mov r9,16
- sub r9,r10
- xor eax,eax
- xor r11,r11
-$L$oop_dec_byte::
- mov r11b,BYTE PTR[r8*1+rdx]
- mov al,BYTE PTR[r8]
- xor al,r11b
- mov BYTE PTR[r8*1+rcx],al
- mov BYTE PTR[r8],r11b
- lea r8,QWORD PTR[1+r8]
- dec r10
- jnz $L$oop_dec_byte
-
- xor eax,eax
-$L$oop_dec_pad::
- mov BYTE PTR[r8],al
- lea r8,QWORD PTR[1+r8]
- dec r9
- jnz $L$oop_dec_pad
-
-$L$done_dec::
- mov rax,r8
- DB 0F3h,0C3h ;repret
-
-xor128_decrypt_n_pad ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- lea rax,QWORD PTR[48+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
- jmp $L$common_seh_tail
-se_handler ENDP
-
-
-ALIGN 16
-avx_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- mov rax,QWORD PTR[208+r8]
-
- lea rsi,QWORD PTR[80+rax]
- lea rax,QWORD PTR[248+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-avx_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_poly1305_init
- DD imagerel $L$SEH_end_poly1305_init
- DD imagerel $L$SEH_info_poly1305_init
-
- DD imagerel $L$SEH_begin_poly1305_blocks
- DD imagerel $L$SEH_end_poly1305_blocks
- DD imagerel $L$SEH_info_poly1305_blocks
-
- DD imagerel $L$SEH_begin_poly1305_emit
- DD imagerel $L$SEH_end_poly1305_emit
- DD imagerel $L$SEH_info_poly1305_emit
- DD imagerel $L$SEH_begin_poly1305_blocks_avx
- DD imagerel $L$base2_64_avx
- DD imagerel $L$SEH_info_poly1305_blocks_avx_1
-
- DD imagerel $L$base2_64_avx
- DD imagerel $L$even_avx
- DD imagerel $L$SEH_info_poly1305_blocks_avx_2
-
- DD imagerel $L$even_avx
- DD imagerel $L$SEH_end_poly1305_blocks_avx
- DD imagerel $L$SEH_info_poly1305_blocks_avx_3
-
- DD imagerel $L$SEH_begin_poly1305_emit_avx
- DD imagerel $L$SEH_end_poly1305_emit_avx
- DD imagerel $L$SEH_info_poly1305_emit_avx
- DD imagerel $L$SEH_begin_poly1305_blocks_avx2
- DD imagerel $L$base2_64_avx2
- DD imagerel $L$SEH_info_poly1305_blocks_avx2_1
-
- DD imagerel $L$base2_64_avx2
- DD imagerel $L$even_avx2
- DD imagerel $L$SEH_info_poly1305_blocks_avx2_2
-
- DD imagerel $L$even_avx2
- DD imagerel $L$SEH_end_poly1305_blocks_avx2
- DD imagerel $L$SEH_info_poly1305_blocks_avx2_3
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_poly1305_init::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$SEH_begin_poly1305_init,imagerel $L$SEH_begin_poly1305_init
-
-$L$SEH_info_poly1305_blocks::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$blocks_body,imagerel $L$blocks_epilogue
-
-$L$SEH_info_poly1305_emit::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$SEH_begin_poly1305_emit,imagerel $L$SEH_begin_poly1305_emit
-$L$SEH_info_poly1305_blocks_avx_1::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$blocks_avx_body,imagerel $L$blocks_avx_epilogue
-
-$L$SEH_info_poly1305_blocks_avx_2::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$base2_64_avx_body,imagerel $L$base2_64_avx_epilogue
-
-$L$SEH_info_poly1305_blocks_avx_3::
-DB 9,0,0,0
- DD imagerel avx_handler
- DD imagerel $L$do_avx_body,imagerel $L$do_avx_epilogue
-
-$L$SEH_info_poly1305_emit_avx::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$SEH_begin_poly1305_emit_avx,imagerel $L$SEH_begin_poly1305_emit_avx
-$L$SEH_info_poly1305_blocks_avx2_1::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$blocks_avx2_body,imagerel $L$blocks_avx2_epilogue
-
-$L$SEH_info_poly1305_blocks_avx2_2::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$base2_64_avx2_body,imagerel $L$base2_64_avx2_epilogue
-
-$L$SEH_info_poly1305_blocks_avx2_3::
-DB 9,0,0,0
- DD imagerel avx_handler
- DD imagerel $L$do_avx2_body,imagerel $L$do_avx2_epilogue
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC poly1305_init
+
+PUBLIC poly1305_blocks
+
+PUBLIC poly1305_emit
+
+
+
+ALIGN 32
+poly1305_init PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_poly1305_init::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ xor rax,rax
+ mov QWORD PTR[rdi],rax
+ mov QWORD PTR[8+rdi],rax
+ mov QWORD PTR[16+rdi],rax
+
+ cmp rsi,0
+ je $L$no_key
+
+ lea r10,QWORD PTR[poly1305_blocks]
+ lea r11,QWORD PTR[poly1305_emit]
+ mov r9,QWORD PTR[((OPENSSL_ia32cap_P+4))]
+ lea rax,QWORD PTR[poly1305_blocks_avx]
+ lea rcx,QWORD PTR[poly1305_emit_avx]
+ bt r9,28
+ cmovc r10,rax
+ cmovc r11,rcx
+ lea rax,QWORD PTR[poly1305_blocks_avx2]
+ bt r9,37
+ cmovc r10,rax
+ mov rax,00ffffffc0fffffffh
+ mov rcx,00ffffffc0ffffffch
+ and rax,QWORD PTR[rsi]
+ and rcx,QWORD PTR[8+rsi]
+ mov QWORD PTR[24+rdi],rax
+ mov QWORD PTR[32+rdi],rcx
+ mov QWORD PTR[rdx],r10
+ mov QWORD PTR[8+rdx],r11
+ mov eax,1
+$L$no_key::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_poly1305_init::
+poly1305_init ENDP
+
+
+ALIGN 32
+poly1305_blocks PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_poly1305_blocks::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+
+$L$blocks::
+ shr rdx,4
+ jz $L$no_data
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$blocks_body::
+
+ mov r15,rdx
+
+ mov r11,QWORD PTR[24+rdi]
+ mov r13,QWORD PTR[32+rdi]
+
+ mov r14,QWORD PTR[rdi]
+ mov rbx,QWORD PTR[8+rdi]
+ mov rbp,QWORD PTR[16+rdi]
+
+ mov r12,r13
+ shr r13,2
+ mov rax,r12
+ add r13,r12
+ jmp $L$oop
+
+ALIGN 32
+$L$oop::
+ add r14,QWORD PTR[rsi]
+ adc rbx,QWORD PTR[8+rsi]
+ lea rsi,QWORD PTR[16+rsi]
+ adc rbp,rcx
+ mul r14
+ mov r9,rax
+ mov rax,r11
+ mov r10,rdx
+
+ mul r14
+ mov r14,rax
+ mov rax,r11
+ mov r8,rdx
+
+ mul rbx
+ add r9,rax
+ mov rax,r13
+ adc r10,rdx
+
+ mul rbx
+ mov rbx,rbp
+ add r14,rax
+ adc r8,rdx
+
+ imul rbx,r13
+ add r9,rbx
+ mov rbx,r8
+ adc r10,0
+
+ imul rbp,r11
+ add rbx,r9
+ mov rax,-4
+ adc r10,rbp
+
+ and rax,r10
+ mov rbp,r10
+ shr r10,2
+ and rbp,3
+ add rax,r10
+ add r14,rax
+ adc rbx,0
+ adc rbp,0
+ mov rax,r12
+ dec r15
+ jnz $L$oop
+
+ mov QWORD PTR[rdi],r14
+ mov QWORD PTR[8+rdi],rbx
+ mov QWORD PTR[16+rdi],rbp
+
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbp,QWORD PTR[32+rsp]
+
+ mov rbx,QWORD PTR[40+rsp]
+
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$no_data::
+$L$blocks_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_poly1305_blocks::
+poly1305_blocks ENDP
+
+
+ALIGN 32
+poly1305_emit PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_poly1305_emit::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$emit::
+ mov r8,QWORD PTR[rdi]
+ mov r9,QWORD PTR[8+rdi]
+ mov r10,QWORD PTR[16+rdi]
+
+ mov rax,r8
+ add r8,5
+ mov rcx,r9
+ adc r9,0
+ adc r10,0
+ shr r10,2
+ cmovnz rax,r8
+ cmovnz rcx,r9
+
+ add rax,QWORD PTR[rdx]
+ adc rcx,QWORD PTR[8+rdx]
+ mov QWORD PTR[rsi],rax
+ mov QWORD PTR[8+rsi],rcx
+
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_poly1305_emit::
+poly1305_emit ENDP
+
+ALIGN 32
+__poly1305_block PROC PRIVATE
+
+ mul r14
+ mov r9,rax
+ mov rax,r11
+ mov r10,rdx
+
+ mul r14
+ mov r14,rax
+ mov rax,r11
+ mov r8,rdx
+
+ mul rbx
+ add r9,rax
+ mov rax,r13
+ adc r10,rdx
+
+ mul rbx
+ mov rbx,rbp
+ add r14,rax
+ adc r8,rdx
+
+ imul rbx,r13
+ add r9,rbx
+ mov rbx,r8
+ adc r10,0
+
+ imul rbp,r11
+ add rbx,r9
+ mov rax,-4
+ adc r10,rbp
+
+ and rax,r10
+ mov rbp,r10
+ shr r10,2
+ and rbp,3
+ add rax,r10
+ add r14,rax
+ adc rbx,0
+ adc rbp,0
+ DB 0F3h,0C3h ;repret
+
+__poly1305_block ENDP
+
+
+ALIGN 32
+__poly1305_init_avx PROC PRIVATE
+
+ mov r14,r11
+ mov rbx,r12
+ xor rbp,rbp
+
+ lea rdi,QWORD PTR[((48+64))+rdi]
+
+ mov rax,r12
+ call __poly1305_block
+
+ mov eax,03ffffffh
+ mov edx,03ffffffh
+ mov r8,r14
+ and eax,r14d
+ mov r9,r11
+ and edx,r11d
+ mov DWORD PTR[((-64))+rdi],eax
+ shr r8,26
+ mov DWORD PTR[((-60))+rdi],edx
+ shr r9,26
+
+ mov eax,03ffffffh
+ mov edx,03ffffffh
+ and eax,r8d
+ and edx,r9d
+ mov DWORD PTR[((-48))+rdi],eax
+ lea eax,DWORD PTR[rax*4+rax]
+ mov DWORD PTR[((-44))+rdi],edx
+ lea edx,DWORD PTR[rdx*4+rdx]
+ mov DWORD PTR[((-32))+rdi],eax
+ shr r8,26
+ mov DWORD PTR[((-28))+rdi],edx
+ shr r9,26
+
+ mov rax,rbx
+ mov rdx,r12
+ shl rax,12
+ shl rdx,12
+ or rax,r8
+ or rdx,r9
+ and eax,03ffffffh
+ and edx,03ffffffh
+ mov DWORD PTR[((-16))+rdi],eax
+ lea eax,DWORD PTR[rax*4+rax]
+ mov DWORD PTR[((-12))+rdi],edx
+ lea edx,DWORD PTR[rdx*4+rdx]
+ mov DWORD PTR[rdi],eax
+ mov r8,rbx
+ mov DWORD PTR[4+rdi],edx
+ mov r9,r12
+
+ mov eax,03ffffffh
+ mov edx,03ffffffh
+ shr r8,14
+ shr r9,14
+ and eax,r8d
+ and edx,r9d
+ mov DWORD PTR[16+rdi],eax
+ lea eax,DWORD PTR[rax*4+rax]
+ mov DWORD PTR[20+rdi],edx
+ lea edx,DWORD PTR[rdx*4+rdx]
+ mov DWORD PTR[32+rdi],eax
+ shr r8,26
+ mov DWORD PTR[36+rdi],edx
+ shr r9,26
+
+ mov rax,rbp
+ shl rax,24
+ or r8,rax
+ mov DWORD PTR[48+rdi],r8d
+ lea r8,QWORD PTR[r8*4+r8]
+ mov DWORD PTR[52+rdi],r9d
+ lea r9,QWORD PTR[r9*4+r9]
+ mov DWORD PTR[64+rdi],r8d
+ mov DWORD PTR[68+rdi],r9d
+
+ mov rax,r12
+ call __poly1305_block
+
+ mov eax,03ffffffh
+ mov r8,r14
+ and eax,r14d
+ shr r8,26
+ mov DWORD PTR[((-52))+rdi],eax
+
+ mov edx,03ffffffh
+ and edx,r8d
+ mov DWORD PTR[((-36))+rdi],edx
+ lea edx,DWORD PTR[rdx*4+rdx]
+ shr r8,26
+ mov DWORD PTR[((-20))+rdi],edx
+
+ mov rax,rbx
+ shl rax,12
+ or rax,r8
+ and eax,03ffffffh
+ mov DWORD PTR[((-4))+rdi],eax
+ lea eax,DWORD PTR[rax*4+rax]
+ mov r8,rbx
+ mov DWORD PTR[12+rdi],eax
+
+ mov edx,03ffffffh
+ shr r8,14
+ and edx,r8d
+ mov DWORD PTR[28+rdi],edx
+ lea edx,DWORD PTR[rdx*4+rdx]
+ shr r8,26
+ mov DWORD PTR[44+rdi],edx
+
+ mov rax,rbp
+ shl rax,24
+ or r8,rax
+ mov DWORD PTR[60+rdi],r8d
+ lea r8,QWORD PTR[r8*4+r8]
+ mov DWORD PTR[76+rdi],r8d
+
+ mov rax,r12
+ call __poly1305_block
+
+ mov eax,03ffffffh
+ mov r8,r14
+ and eax,r14d
+ shr r8,26
+ mov DWORD PTR[((-56))+rdi],eax
+
+ mov edx,03ffffffh
+ and edx,r8d
+ mov DWORD PTR[((-40))+rdi],edx
+ lea edx,DWORD PTR[rdx*4+rdx]
+ shr r8,26
+ mov DWORD PTR[((-24))+rdi],edx
+
+ mov rax,rbx
+ shl rax,12
+ or rax,r8
+ and eax,03ffffffh
+ mov DWORD PTR[((-8))+rdi],eax
+ lea eax,DWORD PTR[rax*4+rax]
+ mov r8,rbx
+ mov DWORD PTR[8+rdi],eax
+
+ mov edx,03ffffffh
+ shr r8,14
+ and edx,r8d
+ mov DWORD PTR[24+rdi],edx
+ lea edx,DWORD PTR[rdx*4+rdx]
+ shr r8,26
+ mov DWORD PTR[40+rdi],edx
+
+ mov rax,rbp
+ shl rax,24
+ or r8,rax
+ mov DWORD PTR[56+rdi],r8d
+ lea r8,QWORD PTR[r8*4+r8]
+ mov DWORD PTR[72+rdi],r8d
+
+ lea rdi,QWORD PTR[((-48-64))+rdi]
+ DB 0F3h,0C3h ;repret
+
+__poly1305_init_avx ENDP
+
+
+ALIGN 32
+poly1305_blocks_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_poly1305_blocks_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+
+ mov r8d,DWORD PTR[20+rdi]
+ cmp rdx,128
+ jae $L$blocks_avx
+ test r8d,r8d
+ jz $L$blocks
+
+$L$blocks_avx::
+ and rdx,-16
+ jz $L$no_data_avx
+
+ vzeroupper
+
+ test r8d,r8d
+ jz $L$base2_64_avx
+
+ test rdx,31
+ jz $L$even_avx
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$blocks_avx_body::
+
+ mov r15,rdx
+
+ mov r8,QWORD PTR[rdi]
+ mov r9,QWORD PTR[8+rdi]
+ mov ebp,DWORD PTR[16+rdi]
+
+ mov r11,QWORD PTR[24+rdi]
+ mov r13,QWORD PTR[32+rdi]
+
+
+ mov r14d,r8d
+ and r8,-2147483648
+ mov r12,r9
+ mov ebx,r9d
+ and r9,-2147483648
+
+ shr r8,6
+ shl r12,52
+ add r14,r8
+ shr rbx,12
+ shr r9,18
+ add r14,r12
+ adc rbx,r9
+
+ mov r8,rbp
+ shl r8,40
+ shr rbp,24
+ add rbx,r8
+ adc rbp,0
+
+ mov r9,-4
+ mov r8,rbp
+ and r9,rbp
+ shr r8,2
+ and rbp,3
+ add r8,r9
+ add r14,r8
+ adc rbx,0
+ adc rbp,0
+
+ mov r12,r13
+ mov rax,r13
+ shr r13,2
+ add r13,r12
+
+ add r14,QWORD PTR[rsi]
+ adc rbx,QWORD PTR[8+rsi]
+ lea rsi,QWORD PTR[16+rsi]
+ adc rbp,rcx
+
+ call __poly1305_block
+
+ test rcx,rcx
+ jz $L$store_base2_64_avx
+
+
+ mov rax,r14
+ mov rdx,r14
+ shr r14,52
+ mov r11,rbx
+ mov r12,rbx
+ shr rdx,26
+ and rax,03ffffffh
+ shl r11,12
+ and rdx,03ffffffh
+ shr rbx,14
+ or r14,r11
+ shl rbp,24
+ and r14,03ffffffh
+ shr r12,40
+ and rbx,03ffffffh
+ or rbp,r12
+
+ sub r15,16
+ jz $L$store_base2_26_avx
+
+ vmovd xmm0,eax
+ vmovd xmm1,edx
+ vmovd xmm2,r14d
+ vmovd xmm3,ebx
+ vmovd xmm4,ebp
+ jmp $L$proceed_avx
+
+ALIGN 32
+$L$store_base2_64_avx::
+ mov QWORD PTR[rdi],r14
+ mov QWORD PTR[8+rdi],rbx
+ mov QWORD PTR[16+rdi],rbp
+ jmp $L$done_avx
+
+ALIGN 16
+$L$store_base2_26_avx::
+ mov DWORD PTR[rdi],eax
+ mov DWORD PTR[4+rdi],edx
+ mov DWORD PTR[8+rdi],r14d
+ mov DWORD PTR[12+rdi],ebx
+ mov DWORD PTR[16+rdi],ebp
+ALIGN 16
+$L$done_avx::
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbp,QWORD PTR[32+rsp]
+
+ mov rbx,QWORD PTR[40+rsp]
+
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$no_data_avx::
+$L$blocks_avx_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+
+ALIGN 32
+$L$base2_64_avx::
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$base2_64_avx_body::
+
+ mov r15,rdx
+
+ mov r11,QWORD PTR[24+rdi]
+ mov r13,QWORD PTR[32+rdi]
+
+ mov r14,QWORD PTR[rdi]
+ mov rbx,QWORD PTR[8+rdi]
+ mov ebp,DWORD PTR[16+rdi]
+
+ mov r12,r13
+ mov rax,r13
+ shr r13,2
+ add r13,r12
+
+ test rdx,31
+ jz $L$init_avx
+
+ add r14,QWORD PTR[rsi]
+ adc rbx,QWORD PTR[8+rsi]
+ lea rsi,QWORD PTR[16+rsi]
+ adc rbp,rcx
+ sub r15,16
+
+ call __poly1305_block
+
+$L$init_avx::
+
+ mov rax,r14
+ mov rdx,r14
+ shr r14,52
+ mov r8,rbx
+ mov r9,rbx
+ shr rdx,26
+ and rax,03ffffffh
+ shl r8,12
+ and rdx,03ffffffh
+ shr rbx,14
+ or r14,r8
+ shl rbp,24
+ and r14,03ffffffh
+ shr r9,40
+ and rbx,03ffffffh
+ or rbp,r9
+
+ vmovd xmm0,eax
+ vmovd xmm1,edx
+ vmovd xmm2,r14d
+ vmovd xmm3,ebx
+ vmovd xmm4,ebp
+ mov DWORD PTR[20+rdi],1
+
+ call __poly1305_init_avx
+
+$L$proceed_avx::
+ mov rdx,r15
+
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbp,QWORD PTR[32+rsp]
+
+ mov rbx,QWORD PTR[40+rsp]
+
+ lea rax,QWORD PTR[48+rsp]
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$base2_64_avx_epilogue::
+ jmp $L$do_avx
+
+
+ALIGN 32
+$L$even_avx::
+
+ vmovd xmm0,DWORD PTR[rdi]
+ vmovd xmm1,DWORD PTR[4+rdi]
+ vmovd xmm2,DWORD PTR[8+rdi]
+ vmovd xmm3,DWORD PTR[12+rdi]
+ vmovd xmm4,DWORD PTR[16+rdi]
+
+$L$do_avx::
+ lea r11,QWORD PTR[((-248))+rsp]
+ sub rsp,0218h
+ vmovdqa XMMWORD PTR[80+r11],xmm6
+ vmovdqa XMMWORD PTR[96+r11],xmm7
+ vmovdqa XMMWORD PTR[112+r11],xmm8
+ vmovdqa XMMWORD PTR[128+r11],xmm9
+ vmovdqa XMMWORD PTR[144+r11],xmm10
+ vmovdqa XMMWORD PTR[160+r11],xmm11
+ vmovdqa XMMWORD PTR[176+r11],xmm12
+ vmovdqa XMMWORD PTR[192+r11],xmm13
+ vmovdqa XMMWORD PTR[208+r11],xmm14
+ vmovdqa XMMWORD PTR[224+r11],xmm15
+$L$do_avx_body::
+ sub rdx,64
+ lea rax,QWORD PTR[((-32))+rsi]
+ cmovc rsi,rax
+
+ vmovdqu xmm14,XMMWORD PTR[48+rdi]
+ lea rdi,QWORD PTR[112+rdi]
+ lea rcx,QWORD PTR[$L$const]
+
+
+
+ vmovdqu xmm5,XMMWORD PTR[32+rsi]
+ vmovdqu xmm6,XMMWORD PTR[48+rsi]
+ vmovdqa xmm15,XMMWORD PTR[64+rcx]
+
+ vpsrldq xmm7,xmm5,6
+ vpsrldq xmm8,xmm6,6
+ vpunpckhqdq xmm9,xmm5,xmm6
+ vpunpcklqdq xmm5,xmm5,xmm6
+ vpunpcklqdq xmm8,xmm7,xmm8
+
+ vpsrlq xmm9,xmm9,40
+ vpsrlq xmm6,xmm5,26
+ vpand xmm5,xmm5,xmm15
+ vpsrlq xmm7,xmm8,4
+ vpand xmm6,xmm6,xmm15
+ vpsrlq xmm8,xmm8,30
+ vpand xmm7,xmm7,xmm15
+ vpand xmm8,xmm8,xmm15
+ vpor xmm9,xmm9,XMMWORD PTR[32+rcx]
+
+ jbe $L$skip_loop_avx
+
+
+ vmovdqu xmm11,XMMWORD PTR[((-48))+rdi]
+ vmovdqu xmm12,XMMWORD PTR[((-32))+rdi]
+ vpshufd xmm13,xmm14,0EEh
+ vpshufd xmm10,xmm14,044h
+ vmovdqa XMMWORD PTR[(-144)+r11],xmm13
+ vmovdqa XMMWORD PTR[rsp],xmm10
+ vpshufd xmm14,xmm11,0EEh
+ vmovdqu xmm10,XMMWORD PTR[((-16))+rdi]
+ vpshufd xmm11,xmm11,044h
+ vmovdqa XMMWORD PTR[(-128)+r11],xmm14
+ vmovdqa XMMWORD PTR[16+rsp],xmm11
+ vpshufd xmm13,xmm12,0EEh
+ vmovdqu xmm11,XMMWORD PTR[rdi]
+ vpshufd xmm12,xmm12,044h
+ vmovdqa XMMWORD PTR[(-112)+r11],xmm13
+ vmovdqa XMMWORD PTR[32+rsp],xmm12
+ vpshufd xmm14,xmm10,0EEh
+ vmovdqu xmm12,XMMWORD PTR[16+rdi]
+ vpshufd xmm10,xmm10,044h
+ vmovdqa XMMWORD PTR[(-96)+r11],xmm14
+ vmovdqa XMMWORD PTR[48+rsp],xmm10
+ vpshufd xmm13,xmm11,0EEh
+ vmovdqu xmm10,XMMWORD PTR[32+rdi]
+ vpshufd xmm11,xmm11,044h
+ vmovdqa XMMWORD PTR[(-80)+r11],xmm13
+ vmovdqa XMMWORD PTR[64+rsp],xmm11
+ vpshufd xmm14,xmm12,0EEh
+ vmovdqu xmm11,XMMWORD PTR[48+rdi]
+ vpshufd xmm12,xmm12,044h
+ vmovdqa XMMWORD PTR[(-64)+r11],xmm14
+ vmovdqa XMMWORD PTR[80+rsp],xmm12
+ vpshufd xmm13,xmm10,0EEh
+ vmovdqu xmm12,XMMWORD PTR[64+rdi]
+ vpshufd xmm10,xmm10,044h
+ vmovdqa XMMWORD PTR[(-48)+r11],xmm13
+ vmovdqa XMMWORD PTR[96+rsp],xmm10
+ vpshufd xmm14,xmm11,0EEh
+ vpshufd xmm11,xmm11,044h
+ vmovdqa XMMWORD PTR[(-32)+r11],xmm14
+ vmovdqa XMMWORD PTR[112+rsp],xmm11
+ vpshufd xmm13,xmm12,0EEh
+ vmovdqa xmm14,XMMWORD PTR[rsp]
+ vpshufd xmm12,xmm12,044h
+ vmovdqa XMMWORD PTR[(-16)+r11],xmm13
+ vmovdqa XMMWORD PTR[128+rsp],xmm12
+
+ jmp $L$oop_avx
+
+ALIGN 32
+$L$oop_avx::
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ vpmuludq xmm10,xmm14,xmm5
+ vpmuludq xmm11,xmm14,xmm6
+ vmovdqa XMMWORD PTR[32+r11],xmm2
+ vpmuludq xmm12,xmm14,xmm7
+ vmovdqa xmm2,XMMWORD PTR[16+rsp]
+ vpmuludq xmm13,xmm14,xmm8
+ vpmuludq xmm14,xmm14,xmm9
+
+ vmovdqa XMMWORD PTR[r11],xmm0
+ vpmuludq xmm0,xmm9,XMMWORD PTR[32+rsp]
+ vmovdqa XMMWORD PTR[16+r11],xmm1
+ vpmuludq xmm1,xmm2,xmm8
+ vpaddq xmm10,xmm10,xmm0
+ vpaddq xmm14,xmm14,xmm1
+ vmovdqa XMMWORD PTR[48+r11],xmm3
+ vpmuludq xmm0,xmm2,xmm7
+ vpmuludq xmm1,xmm2,xmm6
+ vpaddq xmm13,xmm13,xmm0
+ vmovdqa xmm3,XMMWORD PTR[48+rsp]
+ vpaddq xmm12,xmm12,xmm1
+ vmovdqa XMMWORD PTR[64+r11],xmm4
+ vpmuludq xmm2,xmm2,xmm5
+ vpmuludq xmm0,xmm3,xmm7
+ vpaddq xmm11,xmm11,xmm2
+
+ vmovdqa xmm4,XMMWORD PTR[64+rsp]
+ vpaddq xmm14,xmm14,xmm0
+ vpmuludq xmm1,xmm3,xmm6
+ vpmuludq xmm3,xmm3,xmm5
+ vpaddq xmm13,xmm13,xmm1
+ vmovdqa xmm2,XMMWORD PTR[80+rsp]
+ vpaddq xmm12,xmm12,xmm3
+ vpmuludq xmm0,xmm4,xmm9
+ vpmuludq xmm4,xmm4,xmm8
+ vpaddq xmm11,xmm11,xmm0
+ vmovdqa xmm3,XMMWORD PTR[96+rsp]
+ vpaddq xmm10,xmm10,xmm4
+
+ vmovdqa xmm4,XMMWORD PTR[128+rsp]
+ vpmuludq xmm1,xmm2,xmm6
+ vpmuludq xmm2,xmm2,xmm5
+ vpaddq xmm14,xmm14,xmm1
+ vpaddq xmm13,xmm13,xmm2
+ vpmuludq xmm0,xmm3,xmm9
+ vpmuludq xmm1,xmm3,xmm8
+ vpaddq xmm12,xmm12,xmm0
+ vmovdqu xmm0,XMMWORD PTR[rsi]
+ vpaddq xmm11,xmm11,xmm1
+ vpmuludq xmm3,xmm3,xmm7
+ vpmuludq xmm7,xmm4,xmm7
+ vpaddq xmm10,xmm10,xmm3
+
+ vmovdqu xmm1,XMMWORD PTR[16+rsi]
+ vpaddq xmm11,xmm11,xmm7
+ vpmuludq xmm8,xmm4,xmm8
+ vpmuludq xmm9,xmm4,xmm9
+ vpsrldq xmm2,xmm0,6
+ vpaddq xmm12,xmm12,xmm8
+ vpaddq xmm13,xmm13,xmm9
+ vpsrldq xmm3,xmm1,6
+ vpmuludq xmm9,xmm5,XMMWORD PTR[112+rsp]
+ vpmuludq xmm5,xmm4,xmm6
+ vpunpckhqdq xmm4,xmm0,xmm1
+ vpaddq xmm14,xmm14,xmm9
+ vmovdqa xmm9,XMMWORD PTR[((-144))+r11]
+ vpaddq xmm10,xmm10,xmm5
+
+ vpunpcklqdq xmm0,xmm0,xmm1
+ vpunpcklqdq xmm3,xmm2,xmm3
+
+
+ vpsrldq xmm4,xmm4,5
+ vpsrlq xmm1,xmm0,26
+ vpand xmm0,xmm0,xmm15
+ vpsrlq xmm2,xmm3,4
+ vpand xmm1,xmm1,xmm15
+ vpand xmm4,xmm4,XMMWORD PTR[rcx]
+ vpsrlq xmm3,xmm3,30
+ vpand xmm2,xmm2,xmm15
+ vpand xmm3,xmm3,xmm15
+ vpor xmm4,xmm4,XMMWORD PTR[32+rcx]
+
+ vpaddq xmm0,xmm0,XMMWORD PTR[r11]
+ vpaddq xmm1,xmm1,XMMWORD PTR[16+r11]
+ vpaddq xmm2,xmm2,XMMWORD PTR[32+r11]
+ vpaddq xmm3,xmm3,XMMWORD PTR[48+r11]
+ vpaddq xmm4,xmm4,XMMWORD PTR[64+r11]
+
+ lea rax,QWORD PTR[32+rsi]
+ lea rsi,QWORD PTR[64+rsi]
+ sub rdx,64
+ cmovc rsi,rax
+
+
+
+
+
+
+
+
+
+
+ vpmuludq xmm5,xmm9,xmm0
+ vpmuludq xmm6,xmm9,xmm1
+ vpaddq xmm10,xmm10,xmm5
+ vpaddq xmm11,xmm11,xmm6
+ vmovdqa xmm7,XMMWORD PTR[((-128))+r11]
+ vpmuludq xmm5,xmm9,xmm2
+ vpmuludq xmm6,xmm9,xmm3
+ vpaddq xmm12,xmm12,xmm5
+ vpaddq xmm13,xmm13,xmm6
+ vpmuludq xmm9,xmm9,xmm4
+ vpmuludq xmm5,xmm4,XMMWORD PTR[((-112))+r11]
+ vpaddq xmm14,xmm14,xmm9
+
+ vpaddq xmm10,xmm10,xmm5
+ vpmuludq xmm6,xmm7,xmm2
+ vpmuludq xmm5,xmm7,xmm3
+ vpaddq xmm13,xmm13,xmm6
+ vmovdqa xmm8,XMMWORD PTR[((-96))+r11]
+ vpaddq xmm14,xmm14,xmm5
+ vpmuludq xmm6,xmm7,xmm1
+ vpmuludq xmm7,xmm7,xmm0
+ vpaddq xmm12,xmm12,xmm6
+ vpaddq xmm11,xmm11,xmm7
+
+ vmovdqa xmm9,XMMWORD PTR[((-80))+r11]
+ vpmuludq xmm5,xmm8,xmm2
+ vpmuludq xmm6,xmm8,xmm1
+ vpaddq xmm14,xmm14,xmm5
+ vpaddq xmm13,xmm13,xmm6
+ vmovdqa xmm7,XMMWORD PTR[((-64))+r11]
+ vpmuludq xmm8,xmm8,xmm0
+ vpmuludq xmm5,xmm9,xmm4
+ vpaddq xmm12,xmm12,xmm8
+ vpaddq xmm11,xmm11,xmm5
+ vmovdqa xmm8,XMMWORD PTR[((-48))+r11]
+ vpmuludq xmm9,xmm9,xmm3
+ vpmuludq xmm6,xmm7,xmm1
+ vpaddq xmm10,xmm10,xmm9
+
+ vmovdqa xmm9,XMMWORD PTR[((-16))+r11]
+ vpaddq xmm14,xmm14,xmm6
+ vpmuludq xmm7,xmm7,xmm0
+ vpmuludq xmm5,xmm8,xmm4
+ vpaddq xmm13,xmm13,xmm7
+ vpaddq xmm12,xmm12,xmm5
+ vmovdqu xmm5,XMMWORD PTR[32+rsi]
+ vpmuludq xmm7,xmm8,xmm3
+ vpmuludq xmm8,xmm8,xmm2
+ vpaddq xmm11,xmm11,xmm7
+ vmovdqu xmm6,XMMWORD PTR[48+rsi]
+ vpaddq xmm10,xmm10,xmm8
+
+ vpmuludq xmm2,xmm9,xmm2
+ vpmuludq xmm3,xmm9,xmm3
+ vpsrldq xmm7,xmm5,6
+ vpaddq xmm11,xmm11,xmm2
+ vpmuludq xmm4,xmm9,xmm4
+ vpsrldq xmm8,xmm6,6
+ vpaddq xmm2,xmm12,xmm3
+ vpaddq xmm3,xmm13,xmm4
+ vpmuludq xmm4,xmm0,XMMWORD PTR[((-32))+r11]
+ vpmuludq xmm0,xmm9,xmm1
+ vpunpckhqdq xmm9,xmm5,xmm6
+ vpaddq xmm4,xmm14,xmm4
+ vpaddq xmm0,xmm10,xmm0
+
+ vpunpcklqdq xmm5,xmm5,xmm6
+ vpunpcklqdq xmm8,xmm7,xmm8
+
+
+ vpsrldq xmm9,xmm9,5
+ vpsrlq xmm6,xmm5,26
+ vmovdqa xmm14,XMMWORD PTR[rsp]
+ vpand xmm5,xmm5,xmm15
+ vpsrlq xmm7,xmm8,4
+ vpand xmm6,xmm6,xmm15
+ vpand xmm9,xmm9,XMMWORD PTR[rcx]
+ vpsrlq xmm8,xmm8,30
+ vpand xmm7,xmm7,xmm15
+ vpand xmm8,xmm8,xmm15
+ vpor xmm9,xmm9,XMMWORD PTR[32+rcx]
+
+
+
+
+
+ vpsrlq xmm13,xmm3,26
+ vpand xmm3,xmm3,xmm15
+ vpaddq xmm4,xmm4,xmm13
+
+ vpsrlq xmm10,xmm0,26
+ vpand xmm0,xmm0,xmm15
+ vpaddq xmm1,xmm11,xmm10
+
+ vpsrlq xmm10,xmm4,26
+ vpand xmm4,xmm4,xmm15
+
+ vpsrlq xmm11,xmm1,26
+ vpand xmm1,xmm1,xmm15
+ vpaddq xmm2,xmm2,xmm11
+
+ vpaddq xmm0,xmm0,xmm10
+ vpsllq xmm10,xmm10,2
+ vpaddq xmm0,xmm0,xmm10
+
+ vpsrlq xmm12,xmm2,26
+ vpand xmm2,xmm2,xmm15
+ vpaddq xmm3,xmm3,xmm12
+
+ vpsrlq xmm10,xmm0,26
+ vpand xmm0,xmm0,xmm15
+ vpaddq xmm1,xmm1,xmm10
+
+ vpsrlq xmm13,xmm3,26
+ vpand xmm3,xmm3,xmm15
+ vpaddq xmm4,xmm4,xmm13
+
+ ja $L$oop_avx
+
+$L$skip_loop_avx::
+
+
+
+ vpshufd xmm14,xmm14,010h
+ add rdx,32
+ jnz $L$ong_tail_avx
+
+ vpaddq xmm7,xmm7,xmm2
+ vpaddq xmm5,xmm5,xmm0
+ vpaddq xmm6,xmm6,xmm1
+ vpaddq xmm8,xmm8,xmm3
+ vpaddq xmm9,xmm9,xmm4
+
+$L$ong_tail_avx::
+ vmovdqa XMMWORD PTR[32+r11],xmm2
+ vmovdqa XMMWORD PTR[r11],xmm0
+ vmovdqa XMMWORD PTR[16+r11],xmm1
+ vmovdqa XMMWORD PTR[48+r11],xmm3
+ vmovdqa XMMWORD PTR[64+r11],xmm4
+
+
+
+
+
+
+
+ vpmuludq xmm12,xmm14,xmm7
+ vpmuludq xmm10,xmm14,xmm5
+ vpshufd xmm2,XMMWORD PTR[((-48))+rdi],010h
+ vpmuludq xmm11,xmm14,xmm6
+ vpmuludq xmm13,xmm14,xmm8
+ vpmuludq xmm14,xmm14,xmm9
+
+ vpmuludq xmm0,xmm2,xmm8
+ vpaddq xmm14,xmm14,xmm0
+ vpshufd xmm3,XMMWORD PTR[((-32))+rdi],010h
+ vpmuludq xmm1,xmm2,xmm7
+ vpaddq xmm13,xmm13,xmm1
+ vpshufd xmm4,XMMWORD PTR[((-16))+rdi],010h
+ vpmuludq xmm0,xmm2,xmm6
+ vpaddq xmm12,xmm12,xmm0
+ vpmuludq xmm2,xmm2,xmm5
+ vpaddq xmm11,xmm11,xmm2
+ vpmuludq xmm3,xmm3,xmm9
+ vpaddq xmm10,xmm10,xmm3
+
+ vpshufd xmm2,XMMWORD PTR[rdi],010h
+ vpmuludq xmm1,xmm4,xmm7
+ vpaddq xmm14,xmm14,xmm1
+ vpmuludq xmm0,xmm4,xmm6
+ vpaddq xmm13,xmm13,xmm0
+ vpshufd xmm3,XMMWORD PTR[16+rdi],010h
+ vpmuludq xmm4,xmm4,xmm5
+ vpaddq xmm12,xmm12,xmm4
+ vpmuludq xmm1,xmm2,xmm9
+ vpaddq xmm11,xmm11,xmm1
+ vpshufd xmm4,XMMWORD PTR[32+rdi],010h
+ vpmuludq xmm2,xmm2,xmm8
+ vpaddq xmm10,xmm10,xmm2
+
+ vpmuludq xmm0,xmm3,xmm6
+ vpaddq xmm14,xmm14,xmm0
+ vpmuludq xmm3,xmm3,xmm5
+ vpaddq xmm13,xmm13,xmm3
+ vpshufd xmm2,XMMWORD PTR[48+rdi],010h
+ vpmuludq xmm1,xmm4,xmm9
+ vpaddq xmm12,xmm12,xmm1
+ vpshufd xmm3,XMMWORD PTR[64+rdi],010h
+ vpmuludq xmm0,xmm4,xmm8
+ vpaddq xmm11,xmm11,xmm0
+ vpmuludq xmm4,xmm4,xmm7
+ vpaddq xmm10,xmm10,xmm4
+
+ vpmuludq xmm2,xmm2,xmm5
+ vpaddq xmm14,xmm14,xmm2
+ vpmuludq xmm1,xmm3,xmm9
+ vpaddq xmm13,xmm13,xmm1
+ vpmuludq xmm0,xmm3,xmm8
+ vpaddq xmm12,xmm12,xmm0
+ vpmuludq xmm1,xmm3,xmm7
+ vpaddq xmm11,xmm11,xmm1
+ vpmuludq xmm3,xmm3,xmm6
+ vpaddq xmm10,xmm10,xmm3
+
+ jz $L$short_tail_avx
+
+ vmovdqu xmm0,XMMWORD PTR[rsi]
+ vmovdqu xmm1,XMMWORD PTR[16+rsi]
+
+ vpsrldq xmm2,xmm0,6
+ vpsrldq xmm3,xmm1,6
+ vpunpckhqdq xmm4,xmm0,xmm1
+ vpunpcklqdq xmm0,xmm0,xmm1
+ vpunpcklqdq xmm3,xmm2,xmm3
+
+ vpsrlq xmm4,xmm4,40
+ vpsrlq xmm1,xmm0,26
+ vpand xmm0,xmm0,xmm15
+ vpsrlq xmm2,xmm3,4
+ vpand xmm1,xmm1,xmm15
+ vpsrlq xmm3,xmm3,30
+ vpand xmm2,xmm2,xmm15
+ vpand xmm3,xmm3,xmm15
+ vpor xmm4,xmm4,XMMWORD PTR[32+rcx]
+
+ vpshufd xmm9,XMMWORD PTR[((-64))+rdi],032h
+ vpaddq xmm0,xmm0,XMMWORD PTR[r11]
+ vpaddq xmm1,xmm1,XMMWORD PTR[16+r11]
+ vpaddq xmm2,xmm2,XMMWORD PTR[32+r11]
+ vpaddq xmm3,xmm3,XMMWORD PTR[48+r11]
+ vpaddq xmm4,xmm4,XMMWORD PTR[64+r11]
+
+
+
+
+ vpmuludq xmm5,xmm9,xmm0
+ vpaddq xmm10,xmm10,xmm5
+ vpmuludq xmm6,xmm9,xmm1
+ vpaddq xmm11,xmm11,xmm6
+ vpmuludq xmm5,xmm9,xmm2
+ vpaddq xmm12,xmm12,xmm5
+ vpshufd xmm7,XMMWORD PTR[((-48))+rdi],032h
+ vpmuludq xmm6,xmm9,xmm3
+ vpaddq xmm13,xmm13,xmm6
+ vpmuludq xmm9,xmm9,xmm4
+ vpaddq xmm14,xmm14,xmm9
+
+ vpmuludq xmm5,xmm7,xmm3
+ vpaddq xmm14,xmm14,xmm5
+ vpshufd xmm8,XMMWORD PTR[((-32))+rdi],032h
+ vpmuludq xmm6,xmm7,xmm2
+ vpaddq xmm13,xmm13,xmm6
+ vpshufd xmm9,XMMWORD PTR[((-16))+rdi],032h
+ vpmuludq xmm5,xmm7,xmm1
+ vpaddq xmm12,xmm12,xmm5
+ vpmuludq xmm7,xmm7,xmm0
+ vpaddq xmm11,xmm11,xmm7
+ vpmuludq xmm8,xmm8,xmm4
+ vpaddq xmm10,xmm10,xmm8
+
+ vpshufd xmm7,XMMWORD PTR[rdi],032h
+ vpmuludq xmm6,xmm9,xmm2
+ vpaddq xmm14,xmm14,xmm6
+ vpmuludq xmm5,xmm9,xmm1
+ vpaddq xmm13,xmm13,xmm5
+ vpshufd xmm8,XMMWORD PTR[16+rdi],032h
+ vpmuludq xmm9,xmm9,xmm0
+ vpaddq xmm12,xmm12,xmm9
+ vpmuludq xmm6,xmm7,xmm4
+ vpaddq xmm11,xmm11,xmm6
+ vpshufd xmm9,XMMWORD PTR[32+rdi],032h
+ vpmuludq xmm7,xmm7,xmm3
+ vpaddq xmm10,xmm10,xmm7
+
+ vpmuludq xmm5,xmm8,xmm1
+ vpaddq xmm14,xmm14,xmm5
+ vpmuludq xmm8,xmm8,xmm0
+ vpaddq xmm13,xmm13,xmm8
+ vpshufd xmm7,XMMWORD PTR[48+rdi],032h
+ vpmuludq xmm6,xmm9,xmm4
+ vpaddq xmm12,xmm12,xmm6
+ vpshufd xmm8,XMMWORD PTR[64+rdi],032h
+ vpmuludq xmm5,xmm9,xmm3
+ vpaddq xmm11,xmm11,xmm5
+ vpmuludq xmm9,xmm9,xmm2
+ vpaddq xmm10,xmm10,xmm9
+
+ vpmuludq xmm7,xmm7,xmm0
+ vpaddq xmm14,xmm14,xmm7
+ vpmuludq xmm6,xmm8,xmm4
+ vpaddq xmm13,xmm13,xmm6
+ vpmuludq xmm5,xmm8,xmm3
+ vpaddq xmm12,xmm12,xmm5
+ vpmuludq xmm6,xmm8,xmm2
+ vpaddq xmm11,xmm11,xmm6
+ vpmuludq xmm8,xmm8,xmm1
+ vpaddq xmm10,xmm10,xmm8
+
+$L$short_tail_avx::
+
+
+
+ vpsrldq xmm9,xmm14,8
+ vpsrldq xmm8,xmm13,8
+ vpsrldq xmm6,xmm11,8
+ vpsrldq xmm5,xmm10,8
+ vpsrldq xmm7,xmm12,8
+ vpaddq xmm13,xmm13,xmm8
+ vpaddq xmm14,xmm14,xmm9
+ vpaddq xmm10,xmm10,xmm5
+ vpaddq xmm11,xmm11,xmm6
+ vpaddq xmm12,xmm12,xmm7
+
+
+
+
+ vpsrlq xmm3,xmm13,26
+ vpand xmm13,xmm13,xmm15
+ vpaddq xmm14,xmm14,xmm3
+
+ vpsrlq xmm0,xmm10,26
+ vpand xmm10,xmm10,xmm15
+ vpaddq xmm11,xmm11,xmm0
+
+ vpsrlq xmm4,xmm14,26
+ vpand xmm14,xmm14,xmm15
+
+ vpsrlq xmm1,xmm11,26
+ vpand xmm11,xmm11,xmm15
+ vpaddq xmm12,xmm12,xmm1
+
+ vpaddq xmm10,xmm10,xmm4
+ vpsllq xmm4,xmm4,2
+ vpaddq xmm10,xmm10,xmm4
+
+ vpsrlq xmm2,xmm12,26
+ vpand xmm12,xmm12,xmm15
+ vpaddq xmm13,xmm13,xmm2
+
+ vpsrlq xmm0,xmm10,26
+ vpand xmm10,xmm10,xmm15
+ vpaddq xmm11,xmm11,xmm0
+
+ vpsrlq xmm3,xmm13,26
+ vpand xmm13,xmm13,xmm15
+ vpaddq xmm14,xmm14,xmm3
+
+ vmovd DWORD PTR[(-112)+rdi],xmm10
+ vmovd DWORD PTR[(-108)+rdi],xmm11
+ vmovd DWORD PTR[(-104)+rdi],xmm12
+ vmovd DWORD PTR[(-100)+rdi],xmm13
+ vmovd DWORD PTR[(-96)+rdi],xmm14
+ vmovdqa xmm6,XMMWORD PTR[80+r11]
+ vmovdqa xmm7,XMMWORD PTR[96+r11]
+ vmovdqa xmm8,XMMWORD PTR[112+r11]
+ vmovdqa xmm9,XMMWORD PTR[128+r11]
+ vmovdqa xmm10,XMMWORD PTR[144+r11]
+ vmovdqa xmm11,XMMWORD PTR[160+r11]
+ vmovdqa xmm12,XMMWORD PTR[176+r11]
+ vmovdqa xmm13,XMMWORD PTR[192+r11]
+ vmovdqa xmm14,XMMWORD PTR[208+r11]
+ vmovdqa xmm15,XMMWORD PTR[224+r11]
+ lea rsp,QWORD PTR[248+r11]
+$L$do_avx_epilogue::
+ vzeroupper
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_poly1305_blocks_avx::
+poly1305_blocks_avx ENDP
+
+
+ALIGN 32
+poly1305_emit_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_poly1305_emit_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ cmp DWORD PTR[20+rdi],0
+ je $L$emit
+
+ mov eax,DWORD PTR[rdi]
+ mov ecx,DWORD PTR[4+rdi]
+ mov r8d,DWORD PTR[8+rdi]
+ mov r11d,DWORD PTR[12+rdi]
+ mov r10d,DWORD PTR[16+rdi]
+
+ shl rcx,26
+ mov r9,r8
+ shl r8,52
+ add rax,rcx
+ shr r9,12
+ add r8,rax
+ adc r9,0
+
+ shl r11,14
+ mov rax,r10
+ shr r10,24
+ add r9,r11
+ shl rax,40
+ add r9,rax
+ adc r10,0
+
+ mov rax,r10
+ mov rcx,r10
+ and r10,3
+ shr rax,2
+ and rcx,-4
+ add rax,rcx
+ add r8,rax
+ adc r9,0
+ adc r10,0
+
+ mov rax,r8
+ add r8,5
+ mov rcx,r9
+ adc r9,0
+ adc r10,0
+ shr r10,2
+ cmovnz rax,r8
+ cmovnz rcx,r9
+
+ add rax,QWORD PTR[rdx]
+ adc rcx,QWORD PTR[8+rdx]
+ mov QWORD PTR[rsi],rax
+ mov QWORD PTR[8+rsi],rcx
+
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_poly1305_emit_avx::
+poly1305_emit_avx ENDP
+
+ALIGN 32
+poly1305_blocks_avx2 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_poly1305_blocks_avx2::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+
+ mov r8d,DWORD PTR[20+rdi]
+ cmp rdx,128
+ jae $L$blocks_avx2
+ test r8d,r8d
+ jz $L$blocks
+
+$L$blocks_avx2::
+ and rdx,-16
+ jz $L$no_data_avx2
+
+ vzeroupper
+
+ test r8d,r8d
+ jz $L$base2_64_avx2
+
+ test rdx,63
+ jz $L$even_avx2
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$blocks_avx2_body::
+
+ mov r15,rdx
+
+ mov r8,QWORD PTR[rdi]
+ mov r9,QWORD PTR[8+rdi]
+ mov ebp,DWORD PTR[16+rdi]
+
+ mov r11,QWORD PTR[24+rdi]
+ mov r13,QWORD PTR[32+rdi]
+
+
+ mov r14d,r8d
+ and r8,-2147483648
+ mov r12,r9
+ mov ebx,r9d
+ and r9,-2147483648
+
+ shr r8,6
+ shl r12,52
+ add r14,r8
+ shr rbx,12
+ shr r9,18
+ add r14,r12
+ adc rbx,r9
+
+ mov r8,rbp
+ shl r8,40
+ shr rbp,24
+ add rbx,r8
+ adc rbp,0
+
+ mov r9,-4
+ mov r8,rbp
+ and r9,rbp
+ shr r8,2
+ and rbp,3
+ add r8,r9
+ add r14,r8
+ adc rbx,0
+ adc rbp,0
+
+ mov r12,r13
+ mov rax,r13
+ shr r13,2
+ add r13,r12
+
+$L$base2_26_pre_avx2::
+ add r14,QWORD PTR[rsi]
+ adc rbx,QWORD PTR[8+rsi]
+ lea rsi,QWORD PTR[16+rsi]
+ adc rbp,rcx
+ sub r15,16
+
+ call __poly1305_block
+ mov rax,r12
+
+ test r15,63
+ jnz $L$base2_26_pre_avx2
+
+ test rcx,rcx
+ jz $L$store_base2_64_avx2
+
+
+ mov rax,r14
+ mov rdx,r14
+ shr r14,52
+ mov r11,rbx
+ mov r12,rbx
+ shr rdx,26
+ and rax,03ffffffh
+ shl r11,12
+ and rdx,03ffffffh
+ shr rbx,14
+ or r14,r11
+ shl rbp,24
+ and r14,03ffffffh
+ shr r12,40
+ and rbx,03ffffffh
+ or rbp,r12
+
+ test r15,r15
+ jz $L$store_base2_26_avx2
+
+ vmovd xmm0,eax
+ vmovd xmm1,edx
+ vmovd xmm2,r14d
+ vmovd xmm3,ebx
+ vmovd xmm4,ebp
+ jmp $L$proceed_avx2
+
+ALIGN 32
+$L$store_base2_64_avx2::
+ mov QWORD PTR[rdi],r14
+ mov QWORD PTR[8+rdi],rbx
+ mov QWORD PTR[16+rdi],rbp
+ jmp $L$done_avx2
+
+ALIGN 16
+$L$store_base2_26_avx2::
+ mov DWORD PTR[rdi],eax
+ mov DWORD PTR[4+rdi],edx
+ mov DWORD PTR[8+rdi],r14d
+ mov DWORD PTR[12+rdi],ebx
+ mov DWORD PTR[16+rdi],ebp
+ALIGN 16
+$L$done_avx2::
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbp,QWORD PTR[32+rsp]
+
+ mov rbx,QWORD PTR[40+rsp]
+
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$no_data_avx2::
+$L$blocks_avx2_epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+
+ALIGN 32
+$L$base2_64_avx2::
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+$L$base2_64_avx2_body::
+
+ mov r15,rdx
+
+ mov r11,QWORD PTR[24+rdi]
+ mov r13,QWORD PTR[32+rdi]
+
+ mov r14,QWORD PTR[rdi]
+ mov rbx,QWORD PTR[8+rdi]
+ mov ebp,DWORD PTR[16+rdi]
+
+ mov r12,r13
+ mov rax,r13
+ shr r13,2
+ add r13,r12
+
+ test rdx,63
+ jz $L$init_avx2
+
+$L$base2_64_pre_avx2::
+ add r14,QWORD PTR[rsi]
+ adc rbx,QWORD PTR[8+rsi]
+ lea rsi,QWORD PTR[16+rsi]
+ adc rbp,rcx
+ sub r15,16
+
+ call __poly1305_block
+ mov rax,r12
+
+ test r15,63
+ jnz $L$base2_64_pre_avx2
+
+$L$init_avx2::
+
+ mov rax,r14
+ mov rdx,r14
+ shr r14,52
+ mov r8,rbx
+ mov r9,rbx
+ shr rdx,26
+ and rax,03ffffffh
+ shl r8,12
+ and rdx,03ffffffh
+ shr rbx,14
+ or r14,r8
+ shl rbp,24
+ and r14,03ffffffh
+ shr r9,40
+ and rbx,03ffffffh
+ or rbp,r9
+
+ vmovd xmm0,eax
+ vmovd xmm1,edx
+ vmovd xmm2,r14d
+ vmovd xmm3,ebx
+ vmovd xmm4,ebp
+ mov DWORD PTR[20+rdi],1
+
+ call __poly1305_init_avx
+
+$L$proceed_avx2::
+ mov rdx,r15
+ mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ mov r11d,3221291008
+
+ mov r15,QWORD PTR[rsp]
+
+ mov r14,QWORD PTR[8+rsp]
+
+ mov r13,QWORD PTR[16+rsp]
+
+ mov r12,QWORD PTR[24+rsp]
+
+ mov rbp,QWORD PTR[32+rsp]
+
+ mov rbx,QWORD PTR[40+rsp]
+
+ lea rax,QWORD PTR[48+rsp]
+ lea rsp,QWORD PTR[48+rsp]
+
+$L$base2_64_avx2_epilogue::
+ jmp $L$do_avx2
+
+
+ALIGN 32
+$L$even_avx2::
+
+ mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ vmovd xmm0,DWORD PTR[rdi]
+ vmovd xmm1,DWORD PTR[4+rdi]
+ vmovd xmm2,DWORD PTR[8+rdi]
+ vmovd xmm3,DWORD PTR[12+rdi]
+ vmovd xmm4,DWORD PTR[16+rdi]
+
+$L$do_avx2::
+ lea r11,QWORD PTR[((-248))+rsp]
+ sub rsp,01c8h
+ vmovdqa XMMWORD PTR[80+r11],xmm6
+ vmovdqa XMMWORD PTR[96+r11],xmm7
+ vmovdqa XMMWORD PTR[112+r11],xmm8
+ vmovdqa XMMWORD PTR[128+r11],xmm9
+ vmovdqa XMMWORD PTR[144+r11],xmm10
+ vmovdqa XMMWORD PTR[160+r11],xmm11
+ vmovdqa XMMWORD PTR[176+r11],xmm12
+ vmovdqa XMMWORD PTR[192+r11],xmm13
+ vmovdqa XMMWORD PTR[208+r11],xmm14
+ vmovdqa XMMWORD PTR[224+r11],xmm15
+$L$do_avx2_body::
+ lea rcx,QWORD PTR[$L$const]
+ lea rdi,QWORD PTR[((48+64))+rdi]
+ vmovdqa ymm7,YMMWORD PTR[96+rcx]
+
+
+ vmovdqu xmm9,XMMWORD PTR[((-64))+rdi]
+ and rsp,-512
+ vmovdqu xmm10,XMMWORD PTR[((-48))+rdi]
+ vmovdqu xmm6,XMMWORD PTR[((-32))+rdi]
+ vmovdqu xmm11,XMMWORD PTR[((-16))+rdi]
+ vmovdqu xmm12,XMMWORD PTR[rdi]
+ vmovdqu xmm13,XMMWORD PTR[16+rdi]
+ lea rax,QWORD PTR[144+rsp]
+ vmovdqu xmm14,XMMWORD PTR[32+rdi]
+ vpermd ymm9,ymm7,ymm9
+ vmovdqu xmm15,XMMWORD PTR[48+rdi]
+ vpermd ymm10,ymm7,ymm10
+ vmovdqu xmm5,XMMWORD PTR[64+rdi]
+ vpermd ymm6,ymm7,ymm6
+ vmovdqa YMMWORD PTR[rsp],ymm9
+ vpermd ymm11,ymm7,ymm11
+ vmovdqa YMMWORD PTR[(32-144)+rax],ymm10
+ vpermd ymm12,ymm7,ymm12
+ vmovdqa YMMWORD PTR[(64-144)+rax],ymm6
+ vpermd ymm13,ymm7,ymm13
+ vmovdqa YMMWORD PTR[(96-144)+rax],ymm11
+ vpermd ymm14,ymm7,ymm14
+ vmovdqa YMMWORD PTR[(128-144)+rax],ymm12
+ vpermd ymm15,ymm7,ymm15
+ vmovdqa YMMWORD PTR[(160-144)+rax],ymm13
+ vpermd ymm5,ymm7,ymm5
+ vmovdqa YMMWORD PTR[(192-144)+rax],ymm14
+ vmovdqa YMMWORD PTR[(224-144)+rax],ymm15
+ vmovdqa YMMWORD PTR[(256-144)+rax],ymm5
+ vmovdqa ymm5,YMMWORD PTR[64+rcx]
+
+
+
+ vmovdqu xmm7,XMMWORD PTR[rsi]
+ vmovdqu xmm8,XMMWORD PTR[16+rsi]
+ vinserti128 ymm7,ymm7,XMMWORD PTR[32+rsi],1
+ vinserti128 ymm8,ymm8,XMMWORD PTR[48+rsi],1
+ lea rsi,QWORD PTR[64+rsi]
+
+ vpsrldq ymm9,ymm7,6
+ vpsrldq ymm10,ymm8,6
+ vpunpckhqdq ymm6,ymm7,ymm8
+ vpunpcklqdq ymm9,ymm9,ymm10
+ vpunpcklqdq ymm7,ymm7,ymm8
+
+ vpsrlq ymm10,ymm9,30
+ vpsrlq ymm9,ymm9,4
+ vpsrlq ymm8,ymm7,26
+ vpsrlq ymm6,ymm6,40
+ vpand ymm9,ymm9,ymm5
+ vpand ymm7,ymm7,ymm5
+ vpand ymm8,ymm8,ymm5
+ vpand ymm10,ymm10,ymm5
+ vpor ymm6,ymm6,YMMWORD PTR[32+rcx]
+
+ vpaddq ymm2,ymm9,ymm2
+ sub rdx,64
+ jz $L$tail_avx2
+ jmp $L$oop_avx2
+
+ALIGN 32
+$L$oop_avx2::
+
+
+
+
+
+
+
+
+ vpaddq ymm0,ymm7,ymm0
+ vmovdqa ymm7,YMMWORD PTR[rsp]
+ vpaddq ymm1,ymm8,ymm1
+ vmovdqa ymm8,YMMWORD PTR[32+rsp]
+ vpaddq ymm3,ymm10,ymm3
+ vmovdqa ymm9,YMMWORD PTR[96+rsp]
+ vpaddq ymm4,ymm6,ymm4
+ vmovdqa ymm10,YMMWORD PTR[48+rax]
+ vmovdqa ymm5,YMMWORD PTR[112+rax]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ vpmuludq ymm13,ymm7,ymm2
+ vpmuludq ymm14,ymm8,ymm2
+ vpmuludq ymm15,ymm9,ymm2
+ vpmuludq ymm11,ymm10,ymm2
+ vpmuludq ymm12,ymm5,ymm2
+
+ vpmuludq ymm6,ymm8,ymm0
+ vpmuludq ymm2,ymm8,ymm1
+ vpaddq ymm12,ymm12,ymm6
+ vpaddq ymm13,ymm13,ymm2
+ vpmuludq ymm6,ymm8,ymm3
+ vpmuludq ymm2,ymm4,YMMWORD PTR[64+rsp]
+ vpaddq ymm15,ymm15,ymm6
+ vpaddq ymm11,ymm11,ymm2
+ vmovdqa ymm8,YMMWORD PTR[((-16))+rax]
+
+ vpmuludq ymm6,ymm7,ymm0
+ vpmuludq ymm2,ymm7,ymm1
+ vpaddq ymm11,ymm11,ymm6
+ vpaddq ymm12,ymm12,ymm2
+ vpmuludq ymm6,ymm7,ymm3
+ vpmuludq ymm2,ymm7,ymm4
+ vmovdqu xmm7,XMMWORD PTR[rsi]
+ vpaddq ymm14,ymm14,ymm6
+ vpaddq ymm15,ymm15,ymm2
+ vinserti128 ymm7,ymm7,XMMWORD PTR[32+rsi],1
+
+ vpmuludq ymm6,ymm8,ymm3
+ vpmuludq ymm2,ymm8,ymm4
+ vmovdqu xmm8,XMMWORD PTR[16+rsi]
+ vpaddq ymm11,ymm11,ymm6
+ vpaddq ymm12,ymm12,ymm2
+ vmovdqa ymm2,YMMWORD PTR[16+rax]
+ vpmuludq ymm6,ymm9,ymm1
+ vpmuludq ymm9,ymm9,ymm0
+ vpaddq ymm14,ymm14,ymm6
+ vpaddq ymm13,ymm13,ymm9
+ vinserti128 ymm8,ymm8,XMMWORD PTR[48+rsi],1
+ lea rsi,QWORD PTR[64+rsi]
+
+ vpmuludq ymm6,ymm2,ymm1
+ vpmuludq ymm2,ymm2,ymm0
+ vpsrldq ymm9,ymm7,6
+ vpaddq ymm15,ymm15,ymm6
+ vpaddq ymm14,ymm14,ymm2
+ vpmuludq ymm6,ymm10,ymm3
+ vpmuludq ymm2,ymm10,ymm4
+ vpsrldq ymm10,ymm8,6
+ vpaddq ymm12,ymm12,ymm6
+ vpaddq ymm13,ymm13,ymm2
+ vpunpckhqdq ymm6,ymm7,ymm8
+
+ vpmuludq ymm3,ymm5,ymm3
+ vpmuludq ymm4,ymm5,ymm4
+ vpunpcklqdq ymm7,ymm7,ymm8
+ vpaddq ymm2,ymm13,ymm3
+ vpaddq ymm3,ymm14,ymm4
+ vpunpcklqdq ymm10,ymm9,ymm10
+ vpmuludq ymm4,ymm0,YMMWORD PTR[80+rax]
+ vpmuludq ymm0,ymm5,ymm1
+ vmovdqa ymm5,YMMWORD PTR[64+rcx]
+ vpaddq ymm4,ymm15,ymm4
+ vpaddq ymm0,ymm11,ymm0
+
+
+
+
+ vpsrlq ymm14,ymm3,26
+ vpand ymm3,ymm3,ymm5
+ vpaddq ymm4,ymm4,ymm14
+
+ vpsrlq ymm11,ymm0,26
+ vpand ymm0,ymm0,ymm5
+ vpaddq ymm1,ymm12,ymm11
+
+ vpsrlq ymm15,ymm4,26
+ vpand ymm4,ymm4,ymm5
+
+ vpsrlq ymm9,ymm10,4
+
+ vpsrlq ymm12,ymm1,26
+ vpand ymm1,ymm1,ymm5
+ vpaddq ymm2,ymm2,ymm12
+
+ vpaddq ymm0,ymm0,ymm15
+ vpsllq ymm15,ymm15,2
+ vpaddq ymm0,ymm0,ymm15
+
+ vpand ymm9,ymm9,ymm5
+ vpsrlq ymm8,ymm7,26
+
+ vpsrlq ymm13,ymm2,26
+ vpand ymm2,ymm2,ymm5
+ vpaddq ymm3,ymm3,ymm13
+
+ vpaddq ymm2,ymm2,ymm9
+ vpsrlq ymm10,ymm10,30
+
+ vpsrlq ymm11,ymm0,26
+ vpand ymm0,ymm0,ymm5
+ vpaddq ymm1,ymm1,ymm11
+
+ vpsrlq ymm6,ymm6,40
+
+ vpsrlq ymm14,ymm3,26
+ vpand ymm3,ymm3,ymm5
+ vpaddq ymm4,ymm4,ymm14
+
+ vpand ymm7,ymm7,ymm5
+ vpand ymm8,ymm8,ymm5
+ vpand ymm10,ymm10,ymm5
+ vpor ymm6,ymm6,YMMWORD PTR[32+rcx]
+
+ sub rdx,64
+ jnz $L$oop_avx2
+
+DB 066h,090h
+$L$tail_avx2::
+
+
+
+
+
+
+
+ vpaddq ymm0,ymm7,ymm0
+ vmovdqu ymm7,YMMWORD PTR[4+rsp]
+ vpaddq ymm1,ymm8,ymm1
+ vmovdqu ymm8,YMMWORD PTR[36+rsp]
+ vpaddq ymm3,ymm10,ymm3
+ vmovdqu ymm9,YMMWORD PTR[100+rsp]
+ vpaddq ymm4,ymm6,ymm4
+ vmovdqu ymm10,YMMWORD PTR[52+rax]
+ vmovdqu ymm5,YMMWORD PTR[116+rax]
+
+ vpmuludq ymm13,ymm7,ymm2
+ vpmuludq ymm14,ymm8,ymm2
+ vpmuludq ymm15,ymm9,ymm2
+ vpmuludq ymm11,ymm10,ymm2
+ vpmuludq ymm12,ymm5,ymm2
+
+ vpmuludq ymm6,ymm8,ymm0
+ vpmuludq ymm2,ymm8,ymm1
+ vpaddq ymm12,ymm12,ymm6
+ vpaddq ymm13,ymm13,ymm2
+ vpmuludq ymm6,ymm8,ymm3
+ vpmuludq ymm2,ymm4,YMMWORD PTR[68+rsp]
+ vpaddq ymm15,ymm15,ymm6
+ vpaddq ymm11,ymm11,ymm2
+
+ vpmuludq ymm6,ymm7,ymm0
+ vpmuludq ymm2,ymm7,ymm1
+ vpaddq ymm11,ymm11,ymm6
+ vmovdqu ymm8,YMMWORD PTR[((-12))+rax]
+ vpaddq ymm12,ymm12,ymm2
+ vpmuludq ymm6,ymm7,ymm3
+ vpmuludq ymm2,ymm7,ymm4
+ vpaddq ymm14,ymm14,ymm6
+ vpaddq ymm15,ymm15,ymm2
+
+ vpmuludq ymm6,ymm8,ymm3
+ vpmuludq ymm2,ymm8,ymm4
+ vpaddq ymm11,ymm11,ymm6
+ vpaddq ymm12,ymm12,ymm2
+ vmovdqu ymm2,YMMWORD PTR[20+rax]
+ vpmuludq ymm6,ymm9,ymm1
+ vpmuludq ymm9,ymm9,ymm0
+ vpaddq ymm14,ymm14,ymm6
+ vpaddq ymm13,ymm13,ymm9
+
+ vpmuludq ymm6,ymm2,ymm1
+ vpmuludq ymm2,ymm2,ymm0
+ vpaddq ymm15,ymm15,ymm6
+ vpaddq ymm14,ymm14,ymm2
+ vpmuludq ymm6,ymm10,ymm3
+ vpmuludq ymm2,ymm10,ymm4
+ vpaddq ymm12,ymm12,ymm6
+ vpaddq ymm13,ymm13,ymm2
+
+ vpmuludq ymm3,ymm5,ymm3
+ vpmuludq ymm4,ymm5,ymm4
+ vpaddq ymm2,ymm13,ymm3
+ vpaddq ymm3,ymm14,ymm4
+ vpmuludq ymm4,ymm0,YMMWORD PTR[84+rax]
+ vpmuludq ymm0,ymm5,ymm1
+ vmovdqa ymm5,YMMWORD PTR[64+rcx]
+ vpaddq ymm4,ymm15,ymm4
+ vpaddq ymm0,ymm11,ymm0
+
+
+
+
+ vpsrldq ymm8,ymm12,8
+ vpsrldq ymm9,ymm2,8
+ vpsrldq ymm10,ymm3,8
+ vpsrldq ymm6,ymm4,8
+ vpsrldq ymm7,ymm0,8
+ vpaddq ymm12,ymm12,ymm8
+ vpaddq ymm2,ymm2,ymm9
+ vpaddq ymm3,ymm3,ymm10
+ vpaddq ymm4,ymm4,ymm6
+ vpaddq ymm0,ymm0,ymm7
+
+ vpermq ymm10,ymm3,02h
+ vpermq ymm6,ymm4,02h
+ vpermq ymm7,ymm0,02h
+ vpermq ymm8,ymm12,02h
+ vpermq ymm9,ymm2,02h
+ vpaddq ymm3,ymm3,ymm10
+ vpaddq ymm4,ymm4,ymm6
+ vpaddq ymm0,ymm0,ymm7
+ vpaddq ymm12,ymm12,ymm8
+ vpaddq ymm2,ymm2,ymm9
+
+
+
+
+ vpsrlq ymm14,ymm3,26
+ vpand ymm3,ymm3,ymm5
+ vpaddq ymm4,ymm4,ymm14
+
+ vpsrlq ymm11,ymm0,26
+ vpand ymm0,ymm0,ymm5
+ vpaddq ymm1,ymm12,ymm11
+
+ vpsrlq ymm15,ymm4,26
+ vpand ymm4,ymm4,ymm5
+
+ vpsrlq ymm12,ymm1,26
+ vpand ymm1,ymm1,ymm5
+ vpaddq ymm2,ymm2,ymm12
+
+ vpaddq ymm0,ymm0,ymm15
+ vpsllq ymm15,ymm15,2
+ vpaddq ymm0,ymm0,ymm15
+
+ vpsrlq ymm13,ymm2,26
+ vpand ymm2,ymm2,ymm5
+ vpaddq ymm3,ymm3,ymm13
+
+ vpsrlq ymm11,ymm0,26
+ vpand ymm0,ymm0,ymm5
+ vpaddq ymm1,ymm1,ymm11
+
+ vpsrlq ymm14,ymm3,26
+ vpand ymm3,ymm3,ymm5
+ vpaddq ymm4,ymm4,ymm14
+
+ vmovd DWORD PTR[(-112)+rdi],xmm0
+ vmovd DWORD PTR[(-108)+rdi],xmm1
+ vmovd DWORD PTR[(-104)+rdi],xmm2
+ vmovd DWORD PTR[(-100)+rdi],xmm3
+ vmovd DWORD PTR[(-96)+rdi],xmm4
+ vmovdqa xmm6,XMMWORD PTR[80+r11]
+ vmovdqa xmm7,XMMWORD PTR[96+r11]
+ vmovdqa xmm8,XMMWORD PTR[112+r11]
+ vmovdqa xmm9,XMMWORD PTR[128+r11]
+ vmovdqa xmm10,XMMWORD PTR[144+r11]
+ vmovdqa xmm11,XMMWORD PTR[160+r11]
+ vmovdqa xmm12,XMMWORD PTR[176+r11]
+ vmovdqa xmm13,XMMWORD PTR[192+r11]
+ vmovdqa xmm14,XMMWORD PTR[208+r11]
+ vmovdqa xmm15,XMMWORD PTR[224+r11]
+ lea rsp,QWORD PTR[248+r11]
+$L$do_avx2_epilogue::
+ vzeroupper
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_poly1305_blocks_avx2::
+poly1305_blocks_avx2 ENDP
+ALIGN 64
+$L$const::
+$L$mask24::
+ DD 00ffffffh,0,00ffffffh,0,00ffffffh,0,00ffffffh,0
+$L$129::
+ DD 16777216,0,16777216,0,16777216,0,16777216,0
+$L$mask26::
+ DD 03ffffffh,0,03ffffffh,0,03ffffffh,0,03ffffffh,0
+$L$permd_avx2::
+ DD 2,2,2,3,2,0,2,1
+$L$permd_avx512::
+ DD 0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7
+
+$L$2_44_inp_permd::
+ DD 0,1,1,2,2,3,7,7
+$L$2_44_inp_shift::
+ DQ 0,12,24,64
+$L$2_44_mask::
+ DQ 0fffffffffffh,0fffffffffffh,03ffffffffffh,0ffffffffffffffffh
+$L$2_44_shift_rgt::
+ DQ 44,44,42,64
+$L$2_44_shift_lft::
+ DQ 8,8,10,64
+
+ALIGN 64
+$L$x_mask44::
+ DQ 0fffffffffffh,0fffffffffffh,0fffffffffffh,0fffffffffffh
+ DQ 0fffffffffffh,0fffffffffffh,0fffffffffffh,0fffffffffffh
+$L$x_mask42::
+ DQ 03ffffffffffh,03ffffffffffh,03ffffffffffh,03ffffffffffh
+ DQ 03ffffffffffh,03ffffffffffh,03ffffffffffh,03ffffffffffh
+DB 80,111,108,121,49,51,48,53,32,102,111,114,32,120,56,54
+DB 95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32
+DB 98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115
+DB 108,46,111,114,103,62,0
+ALIGN 16
+PUBLIC xor128_encrypt_n_pad
+
+ALIGN 16
+xor128_encrypt_n_pad PROC PUBLIC
+
+ sub rdx,r8
+ sub rcx,r8
+ mov r10,r9
+ shr r9,4
+ jz $L$tail_enc
+ nop
+$L$oop_enc_xmm::
+ movdqu xmm0,XMMWORD PTR[r8*1+rdx]
+ pxor xmm0,XMMWORD PTR[r8]
+ movdqu XMMWORD PTR[r8*1+rcx],xmm0
+ movdqa XMMWORD PTR[r8],xmm0
+ lea r8,QWORD PTR[16+r8]
+ dec r9
+ jnz $L$oop_enc_xmm
+
+ and r10,15
+ jz $L$done_enc
+
+$L$tail_enc::
+ mov r9,16
+ sub r9,r10
+ xor eax,eax
+$L$oop_enc_byte::
+ mov al,BYTE PTR[r8*1+rdx]
+ xor al,BYTE PTR[r8]
+ mov BYTE PTR[r8*1+rcx],al
+ mov BYTE PTR[r8],al
+ lea r8,QWORD PTR[1+r8]
+ dec r10
+ jnz $L$oop_enc_byte
+
+ xor eax,eax
+$L$oop_enc_pad::
+ mov BYTE PTR[r8],al
+ lea r8,QWORD PTR[1+r8]
+ dec r9
+ jnz $L$oop_enc_pad
+
+$L$done_enc::
+ mov rax,r8
+ DB 0F3h,0C3h ;repret
+
+xor128_encrypt_n_pad ENDP
+
+PUBLIC xor128_decrypt_n_pad
+
+ALIGN 16
+xor128_decrypt_n_pad PROC PUBLIC
+
+ sub rdx,r8
+ sub rcx,r8
+ mov r10,r9
+ shr r9,4
+ jz $L$tail_dec
+ nop
+$L$oop_dec_xmm::
+ movdqu xmm0,XMMWORD PTR[r8*1+rdx]
+ movdqa xmm1,XMMWORD PTR[r8]
+ pxor xmm1,xmm0
+ movdqu XMMWORD PTR[r8*1+rcx],xmm1
+ movdqa XMMWORD PTR[r8],xmm0
+ lea r8,QWORD PTR[16+r8]
+ dec r9
+ jnz $L$oop_dec_xmm
+
+ pxor xmm1,xmm1
+ and r10,15
+ jz $L$done_dec
+
+$L$tail_dec::
+ mov r9,16
+ sub r9,r10
+ xor eax,eax
+ xor r11,r11
+$L$oop_dec_byte::
+ mov r11b,BYTE PTR[r8*1+rdx]
+ mov al,BYTE PTR[r8]
+ xor al,r11b
+ mov BYTE PTR[r8*1+rcx],al
+ mov BYTE PTR[r8],r11b
+ lea r8,QWORD PTR[1+r8]
+ dec r10
+ jnz $L$oop_dec_byte
+
+ xor eax,eax
+$L$oop_dec_pad::
+ mov BYTE PTR[r8],al
+ lea r8,QWORD PTR[1+r8]
+ dec r9
+ jnz $L$oop_dec_pad
+
+$L$done_dec::
+ mov rax,r8
+ DB 0F3h,0C3h ;repret
+
+xor128_decrypt_n_pad ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ lea rax,QWORD PTR[48+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+ jmp $L$common_seh_tail
+se_handler ENDP
+
+
+ALIGN 16
+avx_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ mov rax,QWORD PTR[208+r8]
+
+ lea rsi,QWORD PTR[80+rax]
+ lea rax,QWORD PTR[248+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+avx_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_poly1305_init
+ DD imagerel $L$SEH_end_poly1305_init
+ DD imagerel $L$SEH_info_poly1305_init
+
+ DD imagerel $L$SEH_begin_poly1305_blocks
+ DD imagerel $L$SEH_end_poly1305_blocks
+ DD imagerel $L$SEH_info_poly1305_blocks
+
+ DD imagerel $L$SEH_begin_poly1305_emit
+ DD imagerel $L$SEH_end_poly1305_emit
+ DD imagerel $L$SEH_info_poly1305_emit
+ DD imagerel $L$SEH_begin_poly1305_blocks_avx
+ DD imagerel $L$base2_64_avx
+ DD imagerel $L$SEH_info_poly1305_blocks_avx_1
+
+ DD imagerel $L$base2_64_avx
+ DD imagerel $L$even_avx
+ DD imagerel $L$SEH_info_poly1305_blocks_avx_2
+
+ DD imagerel $L$even_avx
+ DD imagerel $L$SEH_end_poly1305_blocks_avx
+ DD imagerel $L$SEH_info_poly1305_blocks_avx_3
+
+ DD imagerel $L$SEH_begin_poly1305_emit_avx
+ DD imagerel $L$SEH_end_poly1305_emit_avx
+ DD imagerel $L$SEH_info_poly1305_emit_avx
+ DD imagerel $L$SEH_begin_poly1305_blocks_avx2
+ DD imagerel $L$base2_64_avx2
+ DD imagerel $L$SEH_info_poly1305_blocks_avx2_1
+
+ DD imagerel $L$base2_64_avx2
+ DD imagerel $L$even_avx2
+ DD imagerel $L$SEH_info_poly1305_blocks_avx2_2
+
+ DD imagerel $L$even_avx2
+ DD imagerel $L$SEH_end_poly1305_blocks_avx2
+ DD imagerel $L$SEH_info_poly1305_blocks_avx2_3
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_poly1305_init::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$SEH_begin_poly1305_init,imagerel $L$SEH_begin_poly1305_init
+
+$L$SEH_info_poly1305_blocks::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$blocks_body,imagerel $L$blocks_epilogue
+
+$L$SEH_info_poly1305_emit::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$SEH_begin_poly1305_emit,imagerel $L$SEH_begin_poly1305_emit
+$L$SEH_info_poly1305_blocks_avx_1::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$blocks_avx_body,imagerel $L$blocks_avx_epilogue
+
+$L$SEH_info_poly1305_blocks_avx_2::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$base2_64_avx_body,imagerel $L$base2_64_avx_epilogue
+
+$L$SEH_info_poly1305_blocks_avx_3::
+DB 9,0,0,0
+ DD imagerel avx_handler
+ DD imagerel $L$do_avx_body,imagerel $L$do_avx_epilogue
+
+$L$SEH_info_poly1305_emit_avx::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$SEH_begin_poly1305_emit_avx,imagerel $L$SEH_begin_poly1305_emit_avx
+$L$SEH_info_poly1305_blocks_avx2_1::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$blocks_avx2_body,imagerel $L$blocks_avx2_epilogue
+
+$L$SEH_info_poly1305_blocks_avx2_2::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$base2_64_avx2_body,imagerel $L$base2_64_avx2_epilogue
+
+$L$SEH_info_poly1305_blocks_avx2_3::
+DB 9,0,0,0
+ DD imagerel avx_handler
+ DD imagerel $L$do_avx2_body,imagerel $L$do_avx2_epilogue
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-586.masm b/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-586.masm
index 2b946da87e..46eadde77b 100644
--- a/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-586.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-586.masm
@@ -1,387 +1,387 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-;EXTERN _OPENSSL_ia32cap_P:NEAR
-ALIGN 16
-_RC4 PROC PUBLIC
-$L_RC4_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov edi,DWORD PTR 20[esp]
- mov edx,DWORD PTR 24[esp]
- mov esi,DWORD PTR 28[esp]
- mov ebp,DWORD PTR 32[esp]
- xor eax,eax
- xor ebx,ebx
- cmp edx,0
- je $L000abort
- mov al,BYTE PTR [edi]
- mov bl,BYTE PTR 4[edi]
- add edi,8
- lea ecx,DWORD PTR [edx*1+esi]
- sub ebp,esi
- mov DWORD PTR 24[esp],ecx
- inc al
- cmp DWORD PTR 256[edi],-1
- je $L001RC4_CHAR
- mov ecx,DWORD PTR [eax*4+edi]
- and edx,-4
- jz $L002loop1
- mov DWORD PTR 32[esp],ebp
- test edx,-8
- jz $L003go4loop4
- lea ebp,DWORD PTR _OPENSSL_ia32cap_P
- bt DWORD PTR [ebp],26
- jnc $L003go4loop4
- mov ebp,DWORD PTR 32[esp]
- and edx,-8
- lea edx,DWORD PTR [edx*1+esi-8]
- mov DWORD PTR [edi-4],edx
- add bl,cl
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- inc eax
- add edx,ecx
- movzx eax,al
- movzx edx,dl
- movq mm0,QWORD PTR [esi]
- mov ecx,DWORD PTR [eax*4+edi]
- movd mm2,DWORD PTR [edx*4+edi]
- jmp $L004loop_mmx_enter
-ALIGN 16
-$L005loop_mmx:
- add bl,cl
- psllq mm1,56
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- inc eax
- add edx,ecx
- movzx eax,al
- movzx edx,dl
- pxor mm2,mm1
- movq mm0,QWORD PTR [esi]
- movq QWORD PTR [esi*1+ebp-8],mm2
- mov ecx,DWORD PTR [eax*4+edi]
- movd mm2,DWORD PTR [edx*4+edi]
-$L004loop_mmx_enter:
- add bl,cl
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- inc eax
- add edx,ecx
- movzx eax,al
- movzx edx,dl
- pxor mm2,mm0
- mov ecx,DWORD PTR [eax*4+edi]
- movd mm1,DWORD PTR [edx*4+edi]
- add bl,cl
- psllq mm1,8
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- inc eax
- add edx,ecx
- movzx eax,al
- movzx edx,dl
- pxor mm2,mm1
- mov ecx,DWORD PTR [eax*4+edi]
- movd mm1,DWORD PTR [edx*4+edi]
- add bl,cl
- psllq mm1,16
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- inc eax
- add edx,ecx
- movzx eax,al
- movzx edx,dl
- pxor mm2,mm1
- mov ecx,DWORD PTR [eax*4+edi]
- movd mm1,DWORD PTR [edx*4+edi]
- add bl,cl
- psllq mm1,24
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- inc eax
- add edx,ecx
- movzx eax,al
- movzx edx,dl
- pxor mm2,mm1
- mov ecx,DWORD PTR [eax*4+edi]
- movd mm1,DWORD PTR [edx*4+edi]
- add bl,cl
- psllq mm1,32
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- inc eax
- add edx,ecx
- movzx eax,al
- movzx edx,dl
- pxor mm2,mm1
- mov ecx,DWORD PTR [eax*4+edi]
- movd mm1,DWORD PTR [edx*4+edi]
- add bl,cl
- psllq mm1,40
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- inc eax
- add edx,ecx
- movzx eax,al
- movzx edx,dl
- pxor mm2,mm1
- mov ecx,DWORD PTR [eax*4+edi]
- movd mm1,DWORD PTR [edx*4+edi]
- add bl,cl
- psllq mm1,48
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- inc eax
- add edx,ecx
- movzx eax,al
- movzx edx,dl
- pxor mm2,mm1
- mov ecx,DWORD PTR [eax*4+edi]
- movd mm1,DWORD PTR [edx*4+edi]
- mov edx,ebx
- xor ebx,ebx
- mov bl,dl
- cmp esi,DWORD PTR [edi-4]
- lea esi,DWORD PTR 8[esi]
- jb $L005loop_mmx
- psllq mm1,56
- pxor mm2,mm1
- movq QWORD PTR [esi*1+ebp-8],mm2
- emms
- cmp esi,DWORD PTR 24[esp]
- je $L006done
- jmp $L002loop1
-ALIGN 16
-$L003go4loop4:
- lea edx,DWORD PTR [edx*1+esi-4]
- mov DWORD PTR 28[esp],edx
-$L007loop4:
- add bl,cl
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- add edx,ecx
- inc al
- and edx,255
- mov ecx,DWORD PTR [eax*4+edi]
- mov ebp,DWORD PTR [edx*4+edi]
- add bl,cl
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- add edx,ecx
- inc al
- and edx,255
- ror ebp,8
- mov ecx,DWORD PTR [eax*4+edi]
- or ebp,DWORD PTR [edx*4+edi]
- add bl,cl
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- add edx,ecx
- inc al
- and edx,255
- ror ebp,8
- mov ecx,DWORD PTR [eax*4+edi]
- or ebp,DWORD PTR [edx*4+edi]
- add bl,cl
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- add edx,ecx
- inc al
- and edx,255
- ror ebp,8
- mov ecx,DWORD PTR 32[esp]
- or ebp,DWORD PTR [edx*4+edi]
- ror ebp,8
- xor ebp,DWORD PTR [esi]
- cmp esi,DWORD PTR 28[esp]
- mov DWORD PTR [esi*1+ecx],ebp
- lea esi,DWORD PTR 4[esi]
- mov ecx,DWORD PTR [eax*4+edi]
- jb $L007loop4
- cmp esi,DWORD PTR 24[esp]
- je $L006done
- mov ebp,DWORD PTR 32[esp]
-ALIGN 16
-$L002loop1:
- add bl,cl
- mov edx,DWORD PTR [ebx*4+edi]
- mov DWORD PTR [ebx*4+edi],ecx
- mov DWORD PTR [eax*4+edi],edx
- add edx,ecx
- inc al
- and edx,255
- mov edx,DWORD PTR [edx*4+edi]
- xor dl,BYTE PTR [esi]
- lea esi,DWORD PTR 1[esi]
- mov ecx,DWORD PTR [eax*4+edi]
- cmp esi,DWORD PTR 24[esp]
- mov BYTE PTR [esi*1+ebp-1],dl
- jb $L002loop1
- jmp $L006done
-ALIGN 16
-$L001RC4_CHAR:
- movzx ecx,BYTE PTR [eax*1+edi]
-$L008cloop1:
- add bl,cl
- movzx edx,BYTE PTR [ebx*1+edi]
- mov BYTE PTR [ebx*1+edi],cl
- mov BYTE PTR [eax*1+edi],dl
- add dl,cl
- movzx edx,BYTE PTR [edx*1+edi]
- add al,1
- xor dl,BYTE PTR [esi]
- lea esi,DWORD PTR 1[esi]
- movzx ecx,BYTE PTR [eax*1+edi]
- cmp esi,DWORD PTR 24[esp]
- mov BYTE PTR [esi*1+ebp-1],dl
- jb $L008cloop1
-$L006done:
- dec al
- mov DWORD PTR [edi-4],ebx
- mov BYTE PTR [edi-8],al
-$L000abort:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_RC4 ENDP
-ALIGN 16
-_RC4_set_key PROC PUBLIC
-$L_RC4_set_key_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov edi,DWORD PTR 20[esp]
- mov ebp,DWORD PTR 24[esp]
- mov esi,DWORD PTR 28[esp]
- lea edx,DWORD PTR _OPENSSL_ia32cap_P
- lea edi,DWORD PTR 8[edi]
- lea esi,DWORD PTR [ebp*1+esi]
- neg ebp
- xor eax,eax
- mov DWORD PTR [edi-4],ebp
- bt DWORD PTR [edx],20
- jc $L009c1stloop
-ALIGN 16
-$L010w1stloop:
- mov DWORD PTR [eax*4+edi],eax
- add al,1
- jnc $L010w1stloop
- xor ecx,ecx
- xor edx,edx
-ALIGN 16
-$L011w2ndloop:
- mov eax,DWORD PTR [ecx*4+edi]
- add dl,BYTE PTR [ebp*1+esi]
- add dl,al
- add ebp,1
- mov ebx,DWORD PTR [edx*4+edi]
- jnz $L012wnowrap
- mov ebp,DWORD PTR [edi-4]
-$L012wnowrap:
- mov DWORD PTR [edx*4+edi],eax
- mov DWORD PTR [ecx*4+edi],ebx
- add cl,1
- jnc $L011w2ndloop
- jmp $L013exit
-ALIGN 16
-$L009c1stloop:
- mov BYTE PTR [eax*1+edi],al
- add al,1
- jnc $L009c1stloop
- xor ecx,ecx
- xor edx,edx
- xor ebx,ebx
-ALIGN 16
-$L014c2ndloop:
- mov al,BYTE PTR [ecx*1+edi]
- add dl,BYTE PTR [ebp*1+esi]
- add dl,al
- add ebp,1
- mov bl,BYTE PTR [edx*1+edi]
- jnz $L015cnowrap
- mov ebp,DWORD PTR [edi-4]
-$L015cnowrap:
- mov BYTE PTR [edx*1+edi],al
- mov BYTE PTR [ecx*1+edi],bl
- add cl,1
- jnc $L014c2ndloop
- mov DWORD PTR 256[edi],-1
-$L013exit:
- xor eax,eax
- mov DWORD PTR [edi-8],eax
- mov DWORD PTR [edi-4],eax
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_RC4_set_key ENDP
-ALIGN 16
-_RC4_options PROC PUBLIC
-$L_RC4_options_begin::
- call $L016pic_point
-$L016pic_point:
- pop eax
- lea eax,DWORD PTR ($L017opts-$L016pic_point)[eax]
- lea edx,DWORD PTR _OPENSSL_ia32cap_P
- mov edx,DWORD PTR [edx]
- bt edx,20
- jc $L0181xchar
- bt edx,26
- jnc $L019ret
- add eax,25
- ret
-$L0181xchar:
- add eax,12
-$L019ret:
- ret
-ALIGN 64
-$L017opts:
-DB 114,99,52,40,52,120,44,105,110,116,41,0
-DB 114,99,52,40,49,120,44,99,104,97,114,41,0
-DB 114,99,52,40,56,120,44,109,109,120,41,0
-DB 82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
-DB 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
-DB 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
-ALIGN 64
-_RC4_options ENDP
-.text$ ENDS
-.bss SEGMENT 'BSS'
-COMM _OPENSSL_ia32cap_P:DWORD:4
-.bss ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+;EXTERN _OPENSSL_ia32cap_P:NEAR
+ALIGN 16
+_RC4 PROC PUBLIC
+$L_RC4_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov edx,DWORD PTR 24[esp]
+ mov esi,DWORD PTR 28[esp]
+ mov ebp,DWORD PTR 32[esp]
+ xor eax,eax
+ xor ebx,ebx
+ cmp edx,0
+ je $L000abort
+ mov al,BYTE PTR [edi]
+ mov bl,BYTE PTR 4[edi]
+ add edi,8
+ lea ecx,DWORD PTR [edx*1+esi]
+ sub ebp,esi
+ mov DWORD PTR 24[esp],ecx
+ inc al
+ cmp DWORD PTR 256[edi],-1
+ je $L001RC4_CHAR
+ mov ecx,DWORD PTR [eax*4+edi]
+ and edx,-4
+ jz $L002loop1
+ mov DWORD PTR 32[esp],ebp
+ test edx,-8
+ jz $L003go4loop4
+ lea ebp,DWORD PTR _OPENSSL_ia32cap_P
+ bt DWORD PTR [ebp],26
+ jnc $L003go4loop4
+ mov ebp,DWORD PTR 32[esp]
+ and edx,-8
+ lea edx,DWORD PTR [edx*1+esi-8]
+ mov DWORD PTR [edi-4],edx
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ inc eax
+ add edx,ecx
+ movzx eax,al
+ movzx edx,dl
+ movq mm0,QWORD PTR [esi]
+ mov ecx,DWORD PTR [eax*4+edi]
+ movd mm2,DWORD PTR [edx*4+edi]
+ jmp $L004loop_mmx_enter
+ALIGN 16
+$L005loop_mmx:
+ add bl,cl
+ psllq mm1,56
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ inc eax
+ add edx,ecx
+ movzx eax,al
+ movzx edx,dl
+ pxor mm2,mm1
+ movq mm0,QWORD PTR [esi]
+ movq QWORD PTR [esi*1+ebp-8],mm2
+ mov ecx,DWORD PTR [eax*4+edi]
+ movd mm2,DWORD PTR [edx*4+edi]
+$L004loop_mmx_enter:
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ inc eax
+ add edx,ecx
+ movzx eax,al
+ movzx edx,dl
+ pxor mm2,mm0
+ mov ecx,DWORD PTR [eax*4+edi]
+ movd mm1,DWORD PTR [edx*4+edi]
+ add bl,cl
+ psllq mm1,8
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ inc eax
+ add edx,ecx
+ movzx eax,al
+ movzx edx,dl
+ pxor mm2,mm1
+ mov ecx,DWORD PTR [eax*4+edi]
+ movd mm1,DWORD PTR [edx*4+edi]
+ add bl,cl
+ psllq mm1,16
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ inc eax
+ add edx,ecx
+ movzx eax,al
+ movzx edx,dl
+ pxor mm2,mm1
+ mov ecx,DWORD PTR [eax*4+edi]
+ movd mm1,DWORD PTR [edx*4+edi]
+ add bl,cl
+ psllq mm1,24
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ inc eax
+ add edx,ecx
+ movzx eax,al
+ movzx edx,dl
+ pxor mm2,mm1
+ mov ecx,DWORD PTR [eax*4+edi]
+ movd mm1,DWORD PTR [edx*4+edi]
+ add bl,cl
+ psllq mm1,32
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ inc eax
+ add edx,ecx
+ movzx eax,al
+ movzx edx,dl
+ pxor mm2,mm1
+ mov ecx,DWORD PTR [eax*4+edi]
+ movd mm1,DWORD PTR [edx*4+edi]
+ add bl,cl
+ psllq mm1,40
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ inc eax
+ add edx,ecx
+ movzx eax,al
+ movzx edx,dl
+ pxor mm2,mm1
+ mov ecx,DWORD PTR [eax*4+edi]
+ movd mm1,DWORD PTR [edx*4+edi]
+ add bl,cl
+ psllq mm1,48
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ inc eax
+ add edx,ecx
+ movzx eax,al
+ movzx edx,dl
+ pxor mm2,mm1
+ mov ecx,DWORD PTR [eax*4+edi]
+ movd mm1,DWORD PTR [edx*4+edi]
+ mov edx,ebx
+ xor ebx,ebx
+ mov bl,dl
+ cmp esi,DWORD PTR [edi-4]
+ lea esi,DWORD PTR 8[esi]
+ jb $L005loop_mmx
+ psllq mm1,56
+ pxor mm2,mm1
+ movq QWORD PTR [esi*1+ebp-8],mm2
+ emms
+ cmp esi,DWORD PTR 24[esp]
+ je $L006done
+ jmp $L002loop1
+ALIGN 16
+$L003go4loop4:
+ lea edx,DWORD PTR [edx*1+esi-4]
+ mov DWORD PTR 28[esp],edx
+$L007loop4:
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ add edx,ecx
+ inc al
+ and edx,255
+ mov ecx,DWORD PTR [eax*4+edi]
+ mov ebp,DWORD PTR [edx*4+edi]
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ add edx,ecx
+ inc al
+ and edx,255
+ ror ebp,8
+ mov ecx,DWORD PTR [eax*4+edi]
+ or ebp,DWORD PTR [edx*4+edi]
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ add edx,ecx
+ inc al
+ and edx,255
+ ror ebp,8
+ mov ecx,DWORD PTR [eax*4+edi]
+ or ebp,DWORD PTR [edx*4+edi]
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ add edx,ecx
+ inc al
+ and edx,255
+ ror ebp,8
+ mov ecx,DWORD PTR 32[esp]
+ or ebp,DWORD PTR [edx*4+edi]
+ ror ebp,8
+ xor ebp,DWORD PTR [esi]
+ cmp esi,DWORD PTR 28[esp]
+ mov DWORD PTR [esi*1+ecx],ebp
+ lea esi,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR [eax*4+edi]
+ jb $L007loop4
+ cmp esi,DWORD PTR 24[esp]
+ je $L006done
+ mov ebp,DWORD PTR 32[esp]
+ALIGN 16
+$L002loop1:
+ add bl,cl
+ mov edx,DWORD PTR [ebx*4+edi]
+ mov DWORD PTR [ebx*4+edi],ecx
+ mov DWORD PTR [eax*4+edi],edx
+ add edx,ecx
+ inc al
+ and edx,255
+ mov edx,DWORD PTR [edx*4+edi]
+ xor dl,BYTE PTR [esi]
+ lea esi,DWORD PTR 1[esi]
+ mov ecx,DWORD PTR [eax*4+edi]
+ cmp esi,DWORD PTR 24[esp]
+ mov BYTE PTR [esi*1+ebp-1],dl
+ jb $L002loop1
+ jmp $L006done
+ALIGN 16
+$L001RC4_CHAR:
+ movzx ecx,BYTE PTR [eax*1+edi]
+$L008cloop1:
+ add bl,cl
+ movzx edx,BYTE PTR [ebx*1+edi]
+ mov BYTE PTR [ebx*1+edi],cl
+ mov BYTE PTR [eax*1+edi],dl
+ add dl,cl
+ movzx edx,BYTE PTR [edx*1+edi]
+ add al,1
+ xor dl,BYTE PTR [esi]
+ lea esi,DWORD PTR 1[esi]
+ movzx ecx,BYTE PTR [eax*1+edi]
+ cmp esi,DWORD PTR 24[esp]
+ mov BYTE PTR [esi*1+ebp-1],dl
+ jb $L008cloop1
+$L006done:
+ dec al
+ mov DWORD PTR [edi-4],ebx
+ mov BYTE PTR [edi-8],al
+$L000abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_RC4 ENDP
+ALIGN 16
+_RC4_set_key PROC PUBLIC
+$L_RC4_set_key_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov ebp,DWORD PTR 24[esp]
+ mov esi,DWORD PTR 28[esp]
+ lea edx,DWORD PTR _OPENSSL_ia32cap_P
+ lea edi,DWORD PTR 8[edi]
+ lea esi,DWORD PTR [ebp*1+esi]
+ neg ebp
+ xor eax,eax
+ mov DWORD PTR [edi-4],ebp
+ bt DWORD PTR [edx],20
+ jc $L009c1stloop
+ALIGN 16
+$L010w1stloop:
+ mov DWORD PTR [eax*4+edi],eax
+ add al,1
+ jnc $L010w1stloop
+ xor ecx,ecx
+ xor edx,edx
+ALIGN 16
+$L011w2ndloop:
+ mov eax,DWORD PTR [ecx*4+edi]
+ add dl,BYTE PTR [ebp*1+esi]
+ add dl,al
+ add ebp,1
+ mov ebx,DWORD PTR [edx*4+edi]
+ jnz $L012wnowrap
+ mov ebp,DWORD PTR [edi-4]
+$L012wnowrap:
+ mov DWORD PTR [edx*4+edi],eax
+ mov DWORD PTR [ecx*4+edi],ebx
+ add cl,1
+ jnc $L011w2ndloop
+ jmp $L013exit
+ALIGN 16
+$L009c1stloop:
+ mov BYTE PTR [eax*1+edi],al
+ add al,1
+ jnc $L009c1stloop
+ xor ecx,ecx
+ xor edx,edx
+ xor ebx,ebx
+ALIGN 16
+$L014c2ndloop:
+ mov al,BYTE PTR [ecx*1+edi]
+ add dl,BYTE PTR [ebp*1+esi]
+ add dl,al
+ add ebp,1
+ mov bl,BYTE PTR [edx*1+edi]
+ jnz $L015cnowrap
+ mov ebp,DWORD PTR [edi-4]
+$L015cnowrap:
+ mov BYTE PTR [edx*1+edi],al
+ mov BYTE PTR [ecx*1+edi],bl
+ add cl,1
+ jnc $L014c2ndloop
+ mov DWORD PTR 256[edi],-1
+$L013exit:
+ xor eax,eax
+ mov DWORD PTR [edi-8],eax
+ mov DWORD PTR [edi-4],eax
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_RC4_set_key ENDP
+ALIGN 16
+_RC4_options PROC PUBLIC
+$L_RC4_options_begin::
+ call $L016pic_point
+$L016pic_point:
+ pop eax
+ lea eax,DWORD PTR ($L017opts-$L016pic_point)[eax]
+ lea edx,DWORD PTR _OPENSSL_ia32cap_P
+ mov edx,DWORD PTR [edx]
+ bt edx,20
+ jc $L0181xchar
+ bt edx,26
+ jnc $L019ret
+ add eax,25
+ ret
+$L0181xchar:
+ add eax,12
+$L019ret:
+ ret
+ALIGN 64
+$L017opts:
+DB 114,99,52,40,52,120,44,105,110,116,41,0
+DB 114,99,52,40,49,120,44,99,104,97,114,41,0
+DB 114,99,52,40,56,120,44,109,109,120,41,0
+DB 82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
+DB 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
+DB 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+ALIGN 64
+_RC4_options ENDP
+.text$ ENDS
+.bss SEGMENT 'BSS'
+COMM _OPENSSL_ia32cap_P:DWORD:4
+.bss ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-md5-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-md5-x86_64.masm
index 7e8c869ce0..3c585a9103 100644
--- a/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-md5-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-md5-x86_64.masm
@@ -1,1390 +1,1390 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-ALIGN 16
-
-PUBLIC rc4_md5_enc
-
-rc4_md5_enc PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_rc4_md5_enc::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
- mov r8,QWORD PTR[40+rsp]
- mov r9,QWORD PTR[48+rsp]
-
-
-
- cmp r9,0
- je $L$abort
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,40
-
-$L$body::
- mov r11,rcx
- mov r12,r9
- mov r13,rsi
- mov r14,rdx
- mov r15,r8
- xor rbp,rbp
- xor rcx,rcx
-
- lea rdi,QWORD PTR[8+rdi]
- mov bpl,BYTE PTR[((-8))+rdi]
- mov cl,BYTE PTR[((-4))+rdi]
-
- inc bpl
- sub r14,r13
- mov eax,DWORD PTR[rbp*4+rdi]
- add cl,al
- lea rsi,QWORD PTR[rbp*4+rdi]
- shl r12,6
- add r12,r15
- mov QWORD PTR[16+rsp],r12
-
- mov QWORD PTR[24+rsp],r11
- mov r8d,DWORD PTR[r11]
- mov r9d,DWORD PTR[4+r11]
- mov r10d,DWORD PTR[8+r11]
- mov r11d,DWORD PTR[12+r11]
- jmp $L$oop
-
-ALIGN 16
-$L$oop::
- mov DWORD PTR[rsp],r8d
- mov DWORD PTR[4+rsp],r9d
- mov DWORD PTR[8+rsp],r10d
- mov r12d,r11d
- mov DWORD PTR[12+rsp],r11d
- pxor xmm0,xmm0
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r9d
- add r8d,DWORD PTR[r15]
- add al,dl
- mov ebx,DWORD PTR[4+rsi]
- add r8d,3614090360
- xor r12d,r11d
- movzx eax,al
- mov DWORD PTR[rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,7
- mov r12d,r10d
- movd xmm0,DWORD PTR[rax*4+rdi]
-
- add r8d,r9d
- pxor xmm1,xmm1
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r8d
- add r11d,DWORD PTR[4+r15]
- add bl,dl
- mov eax,DWORD PTR[8+rsi]
- add r11d,3905402710
- xor r12d,r10d
- movzx ebx,bl
- mov DWORD PTR[4+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,12
- mov r12d,r9d
- movd xmm1,DWORD PTR[rbx*4+rdi]
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r11d
- add r10d,DWORD PTR[8+r15]
- add al,dl
- mov ebx,DWORD PTR[12+rsi]
- add r10d,606105819
- xor r12d,r9d
- movzx eax,al
- mov DWORD PTR[8+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,17
- mov r12d,r8d
- pinsrw xmm0,WORD PTR[rax*4+rdi],1
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r10d
- add r9d,DWORD PTR[12+r15]
- add bl,dl
- mov eax,DWORD PTR[16+rsi]
- add r9d,3250441966
- xor r12d,r8d
- movzx ebx,bl
- mov DWORD PTR[12+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,22
- mov r12d,r11d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],1
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r9d
- add r8d,DWORD PTR[16+r15]
- add al,dl
- mov ebx,DWORD PTR[20+rsi]
- add r8d,4118548399
- xor r12d,r11d
- movzx eax,al
- mov DWORD PTR[16+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,7
- mov r12d,r10d
- pinsrw xmm0,WORD PTR[rax*4+rdi],2
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r8d
- add r11d,DWORD PTR[20+r15]
- add bl,dl
- mov eax,DWORD PTR[24+rsi]
- add r11d,1200080426
- xor r12d,r10d
- movzx ebx,bl
- mov DWORD PTR[20+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,12
- mov r12d,r9d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],2
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r11d
- add r10d,DWORD PTR[24+r15]
- add al,dl
- mov ebx,DWORD PTR[28+rsi]
- add r10d,2821735955
- xor r12d,r9d
- movzx eax,al
- mov DWORD PTR[24+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,17
- mov r12d,r8d
- pinsrw xmm0,WORD PTR[rax*4+rdi],3
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r10d
- add r9d,DWORD PTR[28+r15]
- add bl,dl
- mov eax,DWORD PTR[32+rsi]
- add r9d,4249261313
- xor r12d,r8d
- movzx ebx,bl
- mov DWORD PTR[28+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,22
- mov r12d,r11d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],3
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r9d
- add r8d,DWORD PTR[32+r15]
- add al,dl
- mov ebx,DWORD PTR[36+rsi]
- add r8d,1770035416
- xor r12d,r11d
- movzx eax,al
- mov DWORD PTR[32+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,7
- mov r12d,r10d
- pinsrw xmm0,WORD PTR[rax*4+rdi],4
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r8d
- add r11d,DWORD PTR[36+r15]
- add bl,dl
- mov eax,DWORD PTR[40+rsi]
- add r11d,2336552879
- xor r12d,r10d
- movzx ebx,bl
- mov DWORD PTR[36+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,12
- mov r12d,r9d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],4
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r11d
- add r10d,DWORD PTR[40+r15]
- add al,dl
- mov ebx,DWORD PTR[44+rsi]
- add r10d,4294925233
- xor r12d,r9d
- movzx eax,al
- mov DWORD PTR[40+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,17
- mov r12d,r8d
- pinsrw xmm0,WORD PTR[rax*4+rdi],5
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r10d
- add r9d,DWORD PTR[44+r15]
- add bl,dl
- mov eax,DWORD PTR[48+rsi]
- add r9d,2304563134
- xor r12d,r8d
- movzx ebx,bl
- mov DWORD PTR[44+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,22
- mov r12d,r11d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],5
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r9d
- add r8d,DWORD PTR[48+r15]
- add al,dl
- mov ebx,DWORD PTR[52+rsi]
- add r8d,1804603682
- xor r12d,r11d
- movzx eax,al
- mov DWORD PTR[48+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,7
- mov r12d,r10d
- pinsrw xmm0,WORD PTR[rax*4+rdi],6
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r8d
- add r11d,DWORD PTR[52+r15]
- add bl,dl
- mov eax,DWORD PTR[56+rsi]
- add r11d,4254626195
- xor r12d,r10d
- movzx ebx,bl
- mov DWORD PTR[52+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,12
- mov r12d,r9d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],6
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r11d
- add r10d,DWORD PTR[56+r15]
- add al,dl
- mov ebx,DWORD PTR[60+rsi]
- add r10d,2792965006
- xor r12d,r9d
- movzx eax,al
- mov DWORD PTR[56+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,17
- mov r12d,r8d
- pinsrw xmm0,WORD PTR[rax*4+rdi],7
-
- add r10d,r11d
- movdqu xmm2,XMMWORD PTR[r13]
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r10d
- add r9d,DWORD PTR[60+r15]
- add bl,dl
- mov eax,DWORD PTR[64+rsi]
- add r9d,1236535329
- xor r12d,r8d
- movzx ebx,bl
- mov DWORD PTR[60+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,22
- mov r12d,r10d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],7
-
- add r9d,r10d
- psllq xmm1,8
- pxor xmm2,xmm0
- pxor xmm2,xmm1
- pxor xmm0,xmm0
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r11d
- add r8d,DWORD PTR[4+r15]
- add al,dl
- mov ebx,DWORD PTR[68+rsi]
- add r8d,4129170786
- xor r12d,r10d
- movzx eax,al
- mov DWORD PTR[64+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,5
- mov r12d,r9d
- movd xmm0,DWORD PTR[rax*4+rdi]
-
- add r8d,r9d
- pxor xmm1,xmm1
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r10d
- add r11d,DWORD PTR[24+r15]
- add bl,dl
- mov eax,DWORD PTR[72+rsi]
- add r11d,3225465664
- xor r12d,r9d
- movzx ebx,bl
- mov DWORD PTR[68+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,9
- mov r12d,r8d
- movd xmm1,DWORD PTR[rbx*4+rdi]
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r9d
- add r10d,DWORD PTR[44+r15]
- add al,dl
- mov ebx,DWORD PTR[76+rsi]
- add r10d,643717713
- xor r12d,r8d
- movzx eax,al
- mov DWORD PTR[72+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,14
- mov r12d,r11d
- pinsrw xmm0,WORD PTR[rax*4+rdi],1
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r8d
- add r9d,DWORD PTR[r15]
- add bl,dl
- mov eax,DWORD PTR[80+rsi]
- add r9d,3921069994
- xor r12d,r11d
- movzx ebx,bl
- mov DWORD PTR[76+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,20
- mov r12d,r10d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],1
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r11d
- add r8d,DWORD PTR[20+r15]
- add al,dl
- mov ebx,DWORD PTR[84+rsi]
- add r8d,3593408605
- xor r12d,r10d
- movzx eax,al
- mov DWORD PTR[80+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,5
- mov r12d,r9d
- pinsrw xmm0,WORD PTR[rax*4+rdi],2
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r10d
- add r11d,DWORD PTR[40+r15]
- add bl,dl
- mov eax,DWORD PTR[88+rsi]
- add r11d,38016083
- xor r12d,r9d
- movzx ebx,bl
- mov DWORD PTR[84+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,9
- mov r12d,r8d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],2
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r9d
- add r10d,DWORD PTR[60+r15]
- add al,dl
- mov ebx,DWORD PTR[92+rsi]
- add r10d,3634488961
- xor r12d,r8d
- movzx eax,al
- mov DWORD PTR[88+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,14
- mov r12d,r11d
- pinsrw xmm0,WORD PTR[rax*4+rdi],3
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r8d
- add r9d,DWORD PTR[16+r15]
- add bl,dl
- mov eax,DWORD PTR[96+rsi]
- add r9d,3889429448
- xor r12d,r11d
- movzx ebx,bl
- mov DWORD PTR[92+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,20
- mov r12d,r10d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],3
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r11d
- add r8d,DWORD PTR[36+r15]
- add al,dl
- mov ebx,DWORD PTR[100+rsi]
- add r8d,568446438
- xor r12d,r10d
- movzx eax,al
- mov DWORD PTR[96+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,5
- mov r12d,r9d
- pinsrw xmm0,WORD PTR[rax*4+rdi],4
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r10d
- add r11d,DWORD PTR[56+r15]
- add bl,dl
- mov eax,DWORD PTR[104+rsi]
- add r11d,3275163606
- xor r12d,r9d
- movzx ebx,bl
- mov DWORD PTR[100+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,9
- mov r12d,r8d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],4
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r9d
- add r10d,DWORD PTR[12+r15]
- add al,dl
- mov ebx,DWORD PTR[108+rsi]
- add r10d,4107603335
- xor r12d,r8d
- movzx eax,al
- mov DWORD PTR[104+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,14
- mov r12d,r11d
- pinsrw xmm0,WORD PTR[rax*4+rdi],5
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r8d
- add r9d,DWORD PTR[32+r15]
- add bl,dl
- mov eax,DWORD PTR[112+rsi]
- add r9d,1163531501
- xor r12d,r11d
- movzx ebx,bl
- mov DWORD PTR[108+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,20
- mov r12d,r10d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],5
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r11d
- add r8d,DWORD PTR[52+r15]
- add al,dl
- mov ebx,DWORD PTR[116+rsi]
- add r8d,2850285829
- xor r12d,r10d
- movzx eax,al
- mov DWORD PTR[112+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,5
- mov r12d,r9d
- pinsrw xmm0,WORD PTR[rax*4+rdi],6
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r10d
- add r11d,DWORD PTR[8+r15]
- add bl,dl
- mov eax,DWORD PTR[120+rsi]
- add r11d,4243563512
- xor r12d,r9d
- movzx ebx,bl
- mov DWORD PTR[116+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,9
- mov r12d,r8d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],6
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],eax
- and r12d,r9d
- add r10d,DWORD PTR[28+r15]
- add al,dl
- mov ebx,DWORD PTR[124+rsi]
- add r10d,1735328473
- xor r12d,r8d
- movzx eax,al
- mov DWORD PTR[120+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,14
- mov r12d,r11d
- pinsrw xmm0,WORD PTR[rax*4+rdi],7
-
- add r10d,r11d
- movdqu xmm3,XMMWORD PTR[16+r13]
- add bpl,32
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],ebx
- and r12d,r8d
- add r9d,DWORD PTR[48+r15]
- add bl,dl
- mov eax,DWORD PTR[rbp*4+rdi]
- add r9d,2368359562
- xor r12d,r11d
- movzx ebx,bl
- mov DWORD PTR[124+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,20
- mov r12d,r11d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],7
-
- add r9d,r10d
- mov rsi,rcx
- xor rcx,rcx
- mov cl,sil
- lea rsi,QWORD PTR[rbp*4+rdi]
- psllq xmm1,8
- pxor xmm3,xmm0
- pxor xmm3,xmm1
- pxor xmm0,xmm0
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],eax
- xor r12d,r9d
- add r8d,DWORD PTR[20+r15]
- add al,dl
- mov ebx,DWORD PTR[4+rsi]
- add r8d,4294588738
- movzx eax,al
- add r8d,r12d
- mov DWORD PTR[rsi],edx
- add cl,bl
- rol r8d,4
- mov r12d,r10d
- movd xmm0,DWORD PTR[rax*4+rdi]
-
- add r8d,r9d
- pxor xmm1,xmm1
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],ebx
- xor r12d,r8d
- add r11d,DWORD PTR[32+r15]
- add bl,dl
- mov eax,DWORD PTR[8+rsi]
- add r11d,2272392833
- movzx ebx,bl
- add r11d,r12d
- mov DWORD PTR[4+rsi],edx
- add cl,al
- rol r11d,11
- mov r12d,r9d
- movd xmm1,DWORD PTR[rbx*4+rdi]
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],eax
- xor r12d,r11d
- add r10d,DWORD PTR[44+r15]
- add al,dl
- mov ebx,DWORD PTR[12+rsi]
- add r10d,1839030562
- movzx eax,al
- add r10d,r12d
- mov DWORD PTR[8+rsi],edx
- add cl,bl
- rol r10d,16
- mov r12d,r8d
- pinsrw xmm0,WORD PTR[rax*4+rdi],1
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],ebx
- xor r12d,r10d
- add r9d,DWORD PTR[56+r15]
- add bl,dl
- mov eax,DWORD PTR[16+rsi]
- add r9d,4259657740
- movzx ebx,bl
- add r9d,r12d
- mov DWORD PTR[12+rsi],edx
- add cl,al
- rol r9d,23
- mov r12d,r11d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],1
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],eax
- xor r12d,r9d
- add r8d,DWORD PTR[4+r15]
- add al,dl
- mov ebx,DWORD PTR[20+rsi]
- add r8d,2763975236
- movzx eax,al
- add r8d,r12d
- mov DWORD PTR[16+rsi],edx
- add cl,bl
- rol r8d,4
- mov r12d,r10d
- pinsrw xmm0,WORD PTR[rax*4+rdi],2
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],ebx
- xor r12d,r8d
- add r11d,DWORD PTR[16+r15]
- add bl,dl
- mov eax,DWORD PTR[24+rsi]
- add r11d,1272893353
- movzx ebx,bl
- add r11d,r12d
- mov DWORD PTR[20+rsi],edx
- add cl,al
- rol r11d,11
- mov r12d,r9d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],2
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],eax
- xor r12d,r11d
- add r10d,DWORD PTR[28+r15]
- add al,dl
- mov ebx,DWORD PTR[28+rsi]
- add r10d,4139469664
- movzx eax,al
- add r10d,r12d
- mov DWORD PTR[24+rsi],edx
- add cl,bl
- rol r10d,16
- mov r12d,r8d
- pinsrw xmm0,WORD PTR[rax*4+rdi],3
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],ebx
- xor r12d,r10d
- add r9d,DWORD PTR[40+r15]
- add bl,dl
- mov eax,DWORD PTR[32+rsi]
- add r9d,3200236656
- movzx ebx,bl
- add r9d,r12d
- mov DWORD PTR[28+rsi],edx
- add cl,al
- rol r9d,23
- mov r12d,r11d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],3
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],eax
- xor r12d,r9d
- add r8d,DWORD PTR[52+r15]
- add al,dl
- mov ebx,DWORD PTR[36+rsi]
- add r8d,681279174
- movzx eax,al
- add r8d,r12d
- mov DWORD PTR[32+rsi],edx
- add cl,bl
- rol r8d,4
- mov r12d,r10d
- pinsrw xmm0,WORD PTR[rax*4+rdi],4
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],ebx
- xor r12d,r8d
- add r11d,DWORD PTR[r15]
- add bl,dl
- mov eax,DWORD PTR[40+rsi]
- add r11d,3936430074
- movzx ebx,bl
- add r11d,r12d
- mov DWORD PTR[36+rsi],edx
- add cl,al
- rol r11d,11
- mov r12d,r9d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],4
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],eax
- xor r12d,r11d
- add r10d,DWORD PTR[12+r15]
- add al,dl
- mov ebx,DWORD PTR[44+rsi]
- add r10d,3572445317
- movzx eax,al
- add r10d,r12d
- mov DWORD PTR[40+rsi],edx
- add cl,bl
- rol r10d,16
- mov r12d,r8d
- pinsrw xmm0,WORD PTR[rax*4+rdi],5
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],ebx
- xor r12d,r10d
- add r9d,DWORD PTR[24+r15]
- add bl,dl
- mov eax,DWORD PTR[48+rsi]
- add r9d,76029189
- movzx ebx,bl
- add r9d,r12d
- mov DWORD PTR[44+rsi],edx
- add cl,al
- rol r9d,23
- mov r12d,r11d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],5
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],eax
- xor r12d,r9d
- add r8d,DWORD PTR[36+r15]
- add al,dl
- mov ebx,DWORD PTR[52+rsi]
- add r8d,3654602809
- movzx eax,al
- add r8d,r12d
- mov DWORD PTR[48+rsi],edx
- add cl,bl
- rol r8d,4
- mov r12d,r10d
- pinsrw xmm0,WORD PTR[rax*4+rdi],6
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],ebx
- xor r12d,r8d
- add r11d,DWORD PTR[48+r15]
- add bl,dl
- mov eax,DWORD PTR[56+rsi]
- add r11d,3873151461
- movzx ebx,bl
- add r11d,r12d
- mov DWORD PTR[52+rsi],edx
- add cl,al
- rol r11d,11
- mov r12d,r9d
- pinsrw xmm1,WORD PTR[rbx*4+rdi],6
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],eax
- xor r12d,r11d
- add r10d,DWORD PTR[60+r15]
- add al,dl
- mov ebx,DWORD PTR[60+rsi]
- add r10d,530742520
- movzx eax,al
- add r10d,r12d
- mov DWORD PTR[56+rsi],edx
- add cl,bl
- rol r10d,16
- mov r12d,r8d
- pinsrw xmm0,WORD PTR[rax*4+rdi],7
-
- add r10d,r11d
- movdqu xmm4,XMMWORD PTR[32+r13]
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],ebx
- xor r12d,r10d
- add r9d,DWORD PTR[8+r15]
- add bl,dl
- mov eax,DWORD PTR[64+rsi]
- add r9d,3299628645
- movzx ebx,bl
- add r9d,r12d
- mov DWORD PTR[60+rsi],edx
- add cl,al
- rol r9d,23
- mov r12d,-1
- pinsrw xmm1,WORD PTR[rbx*4+rdi],7
-
- add r9d,r10d
- psllq xmm1,8
- pxor xmm4,xmm0
- pxor xmm4,xmm1
- pxor xmm0,xmm0
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],eax
- or r12d,r9d
- add r8d,DWORD PTR[r15]
- add al,dl
- mov ebx,DWORD PTR[68+rsi]
- add r8d,4096336452
- movzx eax,al
- xor r12d,r10d
- mov DWORD PTR[64+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,6
- mov r12d,-1
- movd xmm0,DWORD PTR[rax*4+rdi]
-
- add r8d,r9d
- pxor xmm1,xmm1
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],ebx
- or r12d,r8d
- add r11d,DWORD PTR[28+r15]
- add bl,dl
- mov eax,DWORD PTR[72+rsi]
- add r11d,1126891415
- movzx ebx,bl
- xor r12d,r9d
- mov DWORD PTR[68+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,10
- mov r12d,-1
- movd xmm1,DWORD PTR[rbx*4+rdi]
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],eax
- or r12d,r11d
- add r10d,DWORD PTR[56+r15]
- add al,dl
- mov ebx,DWORD PTR[76+rsi]
- add r10d,2878612391
- movzx eax,al
- xor r12d,r8d
- mov DWORD PTR[72+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,15
- mov r12d,-1
- pinsrw xmm0,WORD PTR[rax*4+rdi],1
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],ebx
- or r12d,r10d
- add r9d,DWORD PTR[20+r15]
- add bl,dl
- mov eax,DWORD PTR[80+rsi]
- add r9d,4237533241
- movzx ebx,bl
- xor r12d,r11d
- mov DWORD PTR[76+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,21
- mov r12d,-1
- pinsrw xmm1,WORD PTR[rbx*4+rdi],1
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],eax
- or r12d,r9d
- add r8d,DWORD PTR[48+r15]
- add al,dl
- mov ebx,DWORD PTR[84+rsi]
- add r8d,1700485571
- movzx eax,al
- xor r12d,r10d
- mov DWORD PTR[80+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,6
- mov r12d,-1
- pinsrw xmm0,WORD PTR[rax*4+rdi],2
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],ebx
- or r12d,r8d
- add r11d,DWORD PTR[12+r15]
- add bl,dl
- mov eax,DWORD PTR[88+rsi]
- add r11d,2399980690
- movzx ebx,bl
- xor r12d,r9d
- mov DWORD PTR[84+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,10
- mov r12d,-1
- pinsrw xmm1,WORD PTR[rbx*4+rdi],2
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],eax
- or r12d,r11d
- add r10d,DWORD PTR[40+r15]
- add al,dl
- mov ebx,DWORD PTR[92+rsi]
- add r10d,4293915773
- movzx eax,al
- xor r12d,r8d
- mov DWORD PTR[88+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,15
- mov r12d,-1
- pinsrw xmm0,WORD PTR[rax*4+rdi],3
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],ebx
- or r12d,r10d
- add r9d,DWORD PTR[4+r15]
- add bl,dl
- mov eax,DWORD PTR[96+rsi]
- add r9d,2240044497
- movzx ebx,bl
- xor r12d,r11d
- mov DWORD PTR[92+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,21
- mov r12d,-1
- pinsrw xmm1,WORD PTR[rbx*4+rdi],3
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],eax
- or r12d,r9d
- add r8d,DWORD PTR[32+r15]
- add al,dl
- mov ebx,DWORD PTR[100+rsi]
- add r8d,1873313359
- movzx eax,al
- xor r12d,r10d
- mov DWORD PTR[96+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,6
- mov r12d,-1
- pinsrw xmm0,WORD PTR[rax*4+rdi],4
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],ebx
- or r12d,r8d
- add r11d,DWORD PTR[60+r15]
- add bl,dl
- mov eax,DWORD PTR[104+rsi]
- add r11d,4264355552
- movzx ebx,bl
- xor r12d,r9d
- mov DWORD PTR[100+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,10
- mov r12d,-1
- pinsrw xmm1,WORD PTR[rbx*4+rdi],4
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],eax
- or r12d,r11d
- add r10d,DWORD PTR[24+r15]
- add al,dl
- mov ebx,DWORD PTR[108+rsi]
- add r10d,2734768916
- movzx eax,al
- xor r12d,r8d
- mov DWORD PTR[104+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,15
- mov r12d,-1
- pinsrw xmm0,WORD PTR[rax*4+rdi],5
-
- add r10d,r11d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],ebx
- or r12d,r10d
- add r9d,DWORD PTR[52+r15]
- add bl,dl
- mov eax,DWORD PTR[112+rsi]
- add r9d,1309151649
- movzx ebx,bl
- xor r12d,r11d
- mov DWORD PTR[108+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,21
- mov r12d,-1
- pinsrw xmm1,WORD PTR[rbx*4+rdi],5
-
- add r9d,r10d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r11d
- mov DWORD PTR[rcx*4+rdi],eax
- or r12d,r9d
- add r8d,DWORD PTR[16+r15]
- add al,dl
- mov ebx,DWORD PTR[116+rsi]
- add r8d,4149444226
- movzx eax,al
- xor r12d,r10d
- mov DWORD PTR[112+rsi],edx
- add r8d,r12d
- add cl,bl
- rol r8d,6
- mov r12d,-1
- pinsrw xmm0,WORD PTR[rax*4+rdi],6
-
- add r8d,r9d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r10d
- mov DWORD PTR[rcx*4+rdi],ebx
- or r12d,r8d
- add r11d,DWORD PTR[44+r15]
- add bl,dl
- mov eax,DWORD PTR[120+rsi]
- add r11d,3174756917
- movzx ebx,bl
- xor r12d,r9d
- mov DWORD PTR[116+rsi],edx
- add r11d,r12d
- add cl,al
- rol r11d,10
- mov r12d,-1
- pinsrw xmm1,WORD PTR[rbx*4+rdi],6
-
- add r11d,r8d
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r9d
- mov DWORD PTR[rcx*4+rdi],eax
- or r12d,r11d
- add r10d,DWORD PTR[8+r15]
- add al,dl
- mov ebx,DWORD PTR[124+rsi]
- add r10d,718787259
- movzx eax,al
- xor r12d,r8d
- mov DWORD PTR[120+rsi],edx
- add r10d,r12d
- add cl,bl
- rol r10d,15
- mov r12d,-1
- pinsrw xmm0,WORD PTR[rax*4+rdi],7
-
- add r10d,r11d
- movdqu xmm5,XMMWORD PTR[48+r13]
- add bpl,32
- mov edx,DWORD PTR[rcx*4+rdi]
- xor r12d,r8d
- mov DWORD PTR[rcx*4+rdi],ebx
- or r12d,r10d
- add r9d,DWORD PTR[36+r15]
- add bl,dl
- mov eax,DWORD PTR[rbp*4+rdi]
- add r9d,3951481745
- movzx ebx,bl
- xor r12d,r11d
- mov DWORD PTR[124+rsi],edx
- add r9d,r12d
- add cl,al
- rol r9d,21
- mov r12d,-1
- pinsrw xmm1,WORD PTR[rbx*4+rdi],7
-
- add r9d,r10d
- mov rsi,rbp
- xor rbp,rbp
- mov bpl,sil
- mov rsi,rcx
- xor rcx,rcx
- mov cl,sil
- lea rsi,QWORD PTR[rbp*4+rdi]
- psllq xmm1,8
- pxor xmm5,xmm0
- pxor xmm5,xmm1
- add r8d,DWORD PTR[rsp]
- add r9d,DWORD PTR[4+rsp]
- add r10d,DWORD PTR[8+rsp]
- add r11d,DWORD PTR[12+rsp]
-
- movdqu XMMWORD PTR[r13*1+r14],xmm2
- movdqu XMMWORD PTR[16+r13*1+r14],xmm3
- movdqu XMMWORD PTR[32+r13*1+r14],xmm4
- movdqu XMMWORD PTR[48+r13*1+r14],xmm5
- lea r15,QWORD PTR[64+r15]
- lea r13,QWORD PTR[64+r13]
- cmp r15,QWORD PTR[16+rsp]
- jb $L$oop
-
- mov r12,QWORD PTR[24+rsp]
- sub cl,al
- mov DWORD PTR[r12],r8d
- mov DWORD PTR[4+r12],r9d
- mov DWORD PTR[8+r12],r10d
- mov DWORD PTR[12+r12],r11d
- sub bpl,1
- mov DWORD PTR[((-8))+rdi],ebp
- mov DWORD PTR[((-4))+rdi],ecx
-
- mov r15,QWORD PTR[40+rsp]
-
- mov r14,QWORD PTR[48+rsp]
-
- mov r13,QWORD PTR[56+rsp]
-
- mov r12,QWORD PTR[64+rsp]
-
- mov rbp,QWORD PTR[72+rsp]
-
- mov rbx,QWORD PTR[80+rsp]
-
- lea rsp,QWORD PTR[88+rsp]
-
-$L$epilogue::
-$L$abort::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_rc4_md5_enc::
-rc4_md5_enc ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- lea r10,QWORD PTR[$L$body]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- lea r10,QWORD PTR[$L$epilogue]
- cmp rbx,r10
- jae $L$in_prologue
-
- mov r15,QWORD PTR[40+rax]
- mov r14,QWORD PTR[48+rax]
- mov r13,QWORD PTR[56+rax]
- mov r12,QWORD PTR[64+rax]
- mov rbp,QWORD PTR[72+rax]
- mov rbx,QWORD PTR[80+rax]
- lea rax,QWORD PTR[88+rax]
-
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_rc4_md5_enc
- DD imagerel $L$SEH_end_rc4_md5_enc
- DD imagerel $L$SEH_info_rc4_md5_enc
-
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_rc4_md5_enc::
-DB 9,0,0,0
- DD imagerel se_handler
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+ALIGN 16
+
+PUBLIC rc4_md5_enc
+
+rc4_md5_enc PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_rc4_md5_enc::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+ mov r8,QWORD PTR[40+rsp]
+ mov r9,QWORD PTR[48+rsp]
+
+
+
+ cmp r9,0
+ je $L$abort
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,40
+
+$L$body::
+ mov r11,rcx
+ mov r12,r9
+ mov r13,rsi
+ mov r14,rdx
+ mov r15,r8
+ xor rbp,rbp
+ xor rcx,rcx
+
+ lea rdi,QWORD PTR[8+rdi]
+ mov bpl,BYTE PTR[((-8))+rdi]
+ mov cl,BYTE PTR[((-4))+rdi]
+
+ inc bpl
+ sub r14,r13
+ mov eax,DWORD PTR[rbp*4+rdi]
+ add cl,al
+ lea rsi,QWORD PTR[rbp*4+rdi]
+ shl r12,6
+ add r12,r15
+ mov QWORD PTR[16+rsp],r12
+
+ mov QWORD PTR[24+rsp],r11
+ mov r8d,DWORD PTR[r11]
+ mov r9d,DWORD PTR[4+r11]
+ mov r10d,DWORD PTR[8+r11]
+ mov r11d,DWORD PTR[12+r11]
+ jmp $L$oop
+
+ALIGN 16
+$L$oop::
+ mov DWORD PTR[rsp],r8d
+ mov DWORD PTR[4+rsp],r9d
+ mov DWORD PTR[8+rsp],r10d
+ mov r12d,r11d
+ mov DWORD PTR[12+rsp],r11d
+ pxor xmm0,xmm0
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r9d
+ add r8d,DWORD PTR[r15]
+ add al,dl
+ mov ebx,DWORD PTR[4+rsi]
+ add r8d,3614090360
+ xor r12d,r11d
+ movzx eax,al
+ mov DWORD PTR[rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,7
+ mov r12d,r10d
+ movd xmm0,DWORD PTR[rax*4+rdi]
+
+ add r8d,r9d
+ pxor xmm1,xmm1
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r8d
+ add r11d,DWORD PTR[4+r15]
+ add bl,dl
+ mov eax,DWORD PTR[8+rsi]
+ add r11d,3905402710
+ xor r12d,r10d
+ movzx ebx,bl
+ mov DWORD PTR[4+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,12
+ mov r12d,r9d
+ movd xmm1,DWORD PTR[rbx*4+rdi]
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r11d
+ add r10d,DWORD PTR[8+r15]
+ add al,dl
+ mov ebx,DWORD PTR[12+rsi]
+ add r10d,606105819
+ xor r12d,r9d
+ movzx eax,al
+ mov DWORD PTR[8+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,17
+ mov r12d,r8d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],1
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r10d
+ add r9d,DWORD PTR[12+r15]
+ add bl,dl
+ mov eax,DWORD PTR[16+rsi]
+ add r9d,3250441966
+ xor r12d,r8d
+ movzx ebx,bl
+ mov DWORD PTR[12+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,22
+ mov r12d,r11d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],1
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r9d
+ add r8d,DWORD PTR[16+r15]
+ add al,dl
+ mov ebx,DWORD PTR[20+rsi]
+ add r8d,4118548399
+ xor r12d,r11d
+ movzx eax,al
+ mov DWORD PTR[16+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,7
+ mov r12d,r10d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],2
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r8d
+ add r11d,DWORD PTR[20+r15]
+ add bl,dl
+ mov eax,DWORD PTR[24+rsi]
+ add r11d,1200080426
+ xor r12d,r10d
+ movzx ebx,bl
+ mov DWORD PTR[20+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,12
+ mov r12d,r9d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],2
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r11d
+ add r10d,DWORD PTR[24+r15]
+ add al,dl
+ mov ebx,DWORD PTR[28+rsi]
+ add r10d,2821735955
+ xor r12d,r9d
+ movzx eax,al
+ mov DWORD PTR[24+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,17
+ mov r12d,r8d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],3
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r10d
+ add r9d,DWORD PTR[28+r15]
+ add bl,dl
+ mov eax,DWORD PTR[32+rsi]
+ add r9d,4249261313
+ xor r12d,r8d
+ movzx ebx,bl
+ mov DWORD PTR[28+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,22
+ mov r12d,r11d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],3
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r9d
+ add r8d,DWORD PTR[32+r15]
+ add al,dl
+ mov ebx,DWORD PTR[36+rsi]
+ add r8d,1770035416
+ xor r12d,r11d
+ movzx eax,al
+ mov DWORD PTR[32+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,7
+ mov r12d,r10d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],4
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r8d
+ add r11d,DWORD PTR[36+r15]
+ add bl,dl
+ mov eax,DWORD PTR[40+rsi]
+ add r11d,2336552879
+ xor r12d,r10d
+ movzx ebx,bl
+ mov DWORD PTR[36+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,12
+ mov r12d,r9d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],4
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r11d
+ add r10d,DWORD PTR[40+r15]
+ add al,dl
+ mov ebx,DWORD PTR[44+rsi]
+ add r10d,4294925233
+ xor r12d,r9d
+ movzx eax,al
+ mov DWORD PTR[40+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,17
+ mov r12d,r8d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],5
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r10d
+ add r9d,DWORD PTR[44+r15]
+ add bl,dl
+ mov eax,DWORD PTR[48+rsi]
+ add r9d,2304563134
+ xor r12d,r8d
+ movzx ebx,bl
+ mov DWORD PTR[44+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,22
+ mov r12d,r11d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],5
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r9d
+ add r8d,DWORD PTR[48+r15]
+ add al,dl
+ mov ebx,DWORD PTR[52+rsi]
+ add r8d,1804603682
+ xor r12d,r11d
+ movzx eax,al
+ mov DWORD PTR[48+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,7
+ mov r12d,r10d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],6
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r8d
+ add r11d,DWORD PTR[52+r15]
+ add bl,dl
+ mov eax,DWORD PTR[56+rsi]
+ add r11d,4254626195
+ xor r12d,r10d
+ movzx ebx,bl
+ mov DWORD PTR[52+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,12
+ mov r12d,r9d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],6
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r11d
+ add r10d,DWORD PTR[56+r15]
+ add al,dl
+ mov ebx,DWORD PTR[60+rsi]
+ add r10d,2792965006
+ xor r12d,r9d
+ movzx eax,al
+ mov DWORD PTR[56+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,17
+ mov r12d,r8d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],7
+
+ add r10d,r11d
+ movdqu xmm2,XMMWORD PTR[r13]
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r10d
+ add r9d,DWORD PTR[60+r15]
+ add bl,dl
+ mov eax,DWORD PTR[64+rsi]
+ add r9d,1236535329
+ xor r12d,r8d
+ movzx ebx,bl
+ mov DWORD PTR[60+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,22
+ mov r12d,r10d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],7
+
+ add r9d,r10d
+ psllq xmm1,8
+ pxor xmm2,xmm0
+ pxor xmm2,xmm1
+ pxor xmm0,xmm0
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r11d
+ add r8d,DWORD PTR[4+r15]
+ add al,dl
+ mov ebx,DWORD PTR[68+rsi]
+ add r8d,4129170786
+ xor r12d,r10d
+ movzx eax,al
+ mov DWORD PTR[64+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,5
+ mov r12d,r9d
+ movd xmm0,DWORD PTR[rax*4+rdi]
+
+ add r8d,r9d
+ pxor xmm1,xmm1
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r10d
+ add r11d,DWORD PTR[24+r15]
+ add bl,dl
+ mov eax,DWORD PTR[72+rsi]
+ add r11d,3225465664
+ xor r12d,r9d
+ movzx ebx,bl
+ mov DWORD PTR[68+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,9
+ mov r12d,r8d
+ movd xmm1,DWORD PTR[rbx*4+rdi]
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r9d
+ add r10d,DWORD PTR[44+r15]
+ add al,dl
+ mov ebx,DWORD PTR[76+rsi]
+ add r10d,643717713
+ xor r12d,r8d
+ movzx eax,al
+ mov DWORD PTR[72+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,14
+ mov r12d,r11d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],1
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r8d
+ add r9d,DWORD PTR[r15]
+ add bl,dl
+ mov eax,DWORD PTR[80+rsi]
+ add r9d,3921069994
+ xor r12d,r11d
+ movzx ebx,bl
+ mov DWORD PTR[76+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,20
+ mov r12d,r10d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],1
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r11d
+ add r8d,DWORD PTR[20+r15]
+ add al,dl
+ mov ebx,DWORD PTR[84+rsi]
+ add r8d,3593408605
+ xor r12d,r10d
+ movzx eax,al
+ mov DWORD PTR[80+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,5
+ mov r12d,r9d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],2
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r10d
+ add r11d,DWORD PTR[40+r15]
+ add bl,dl
+ mov eax,DWORD PTR[88+rsi]
+ add r11d,38016083
+ xor r12d,r9d
+ movzx ebx,bl
+ mov DWORD PTR[84+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,9
+ mov r12d,r8d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],2
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r9d
+ add r10d,DWORD PTR[60+r15]
+ add al,dl
+ mov ebx,DWORD PTR[92+rsi]
+ add r10d,3634488961
+ xor r12d,r8d
+ movzx eax,al
+ mov DWORD PTR[88+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,14
+ mov r12d,r11d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],3
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r8d
+ add r9d,DWORD PTR[16+r15]
+ add bl,dl
+ mov eax,DWORD PTR[96+rsi]
+ add r9d,3889429448
+ xor r12d,r11d
+ movzx ebx,bl
+ mov DWORD PTR[92+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,20
+ mov r12d,r10d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],3
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r11d
+ add r8d,DWORD PTR[36+r15]
+ add al,dl
+ mov ebx,DWORD PTR[100+rsi]
+ add r8d,568446438
+ xor r12d,r10d
+ movzx eax,al
+ mov DWORD PTR[96+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,5
+ mov r12d,r9d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],4
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r10d
+ add r11d,DWORD PTR[56+r15]
+ add bl,dl
+ mov eax,DWORD PTR[104+rsi]
+ add r11d,3275163606
+ xor r12d,r9d
+ movzx ebx,bl
+ mov DWORD PTR[100+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,9
+ mov r12d,r8d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],4
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r9d
+ add r10d,DWORD PTR[12+r15]
+ add al,dl
+ mov ebx,DWORD PTR[108+rsi]
+ add r10d,4107603335
+ xor r12d,r8d
+ movzx eax,al
+ mov DWORD PTR[104+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,14
+ mov r12d,r11d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],5
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r8d
+ add r9d,DWORD PTR[32+r15]
+ add bl,dl
+ mov eax,DWORD PTR[112+rsi]
+ add r9d,1163531501
+ xor r12d,r11d
+ movzx ebx,bl
+ mov DWORD PTR[108+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,20
+ mov r12d,r10d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],5
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r11d
+ add r8d,DWORD PTR[52+r15]
+ add al,dl
+ mov ebx,DWORD PTR[116+rsi]
+ add r8d,2850285829
+ xor r12d,r10d
+ movzx eax,al
+ mov DWORD PTR[112+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,5
+ mov r12d,r9d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],6
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r10d
+ add r11d,DWORD PTR[8+r15]
+ add bl,dl
+ mov eax,DWORD PTR[120+rsi]
+ add r11d,4243563512
+ xor r12d,r9d
+ movzx ebx,bl
+ mov DWORD PTR[116+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,9
+ mov r12d,r8d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],6
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],eax
+ and r12d,r9d
+ add r10d,DWORD PTR[28+r15]
+ add al,dl
+ mov ebx,DWORD PTR[124+rsi]
+ add r10d,1735328473
+ xor r12d,r8d
+ movzx eax,al
+ mov DWORD PTR[120+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,14
+ mov r12d,r11d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],7
+
+ add r10d,r11d
+ movdqu xmm3,XMMWORD PTR[16+r13]
+ add bpl,32
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ and r12d,r8d
+ add r9d,DWORD PTR[48+r15]
+ add bl,dl
+ mov eax,DWORD PTR[rbp*4+rdi]
+ add r9d,2368359562
+ xor r12d,r11d
+ movzx ebx,bl
+ mov DWORD PTR[124+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,20
+ mov r12d,r11d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],7
+
+ add r9d,r10d
+ mov rsi,rcx
+ xor rcx,rcx
+ mov cl,sil
+ lea rsi,QWORD PTR[rbp*4+rdi]
+ psllq xmm1,8
+ pxor xmm3,xmm0
+ pxor xmm3,xmm1
+ pxor xmm0,xmm0
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],eax
+ xor r12d,r9d
+ add r8d,DWORD PTR[20+r15]
+ add al,dl
+ mov ebx,DWORD PTR[4+rsi]
+ add r8d,4294588738
+ movzx eax,al
+ add r8d,r12d
+ mov DWORD PTR[rsi],edx
+ add cl,bl
+ rol r8d,4
+ mov r12d,r10d
+ movd xmm0,DWORD PTR[rax*4+rdi]
+
+ add r8d,r9d
+ pxor xmm1,xmm1
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ xor r12d,r8d
+ add r11d,DWORD PTR[32+r15]
+ add bl,dl
+ mov eax,DWORD PTR[8+rsi]
+ add r11d,2272392833
+ movzx ebx,bl
+ add r11d,r12d
+ mov DWORD PTR[4+rsi],edx
+ add cl,al
+ rol r11d,11
+ mov r12d,r9d
+ movd xmm1,DWORD PTR[rbx*4+rdi]
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],eax
+ xor r12d,r11d
+ add r10d,DWORD PTR[44+r15]
+ add al,dl
+ mov ebx,DWORD PTR[12+rsi]
+ add r10d,1839030562
+ movzx eax,al
+ add r10d,r12d
+ mov DWORD PTR[8+rsi],edx
+ add cl,bl
+ rol r10d,16
+ mov r12d,r8d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],1
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ xor r12d,r10d
+ add r9d,DWORD PTR[56+r15]
+ add bl,dl
+ mov eax,DWORD PTR[16+rsi]
+ add r9d,4259657740
+ movzx ebx,bl
+ add r9d,r12d
+ mov DWORD PTR[12+rsi],edx
+ add cl,al
+ rol r9d,23
+ mov r12d,r11d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],1
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],eax
+ xor r12d,r9d
+ add r8d,DWORD PTR[4+r15]
+ add al,dl
+ mov ebx,DWORD PTR[20+rsi]
+ add r8d,2763975236
+ movzx eax,al
+ add r8d,r12d
+ mov DWORD PTR[16+rsi],edx
+ add cl,bl
+ rol r8d,4
+ mov r12d,r10d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],2
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ xor r12d,r8d
+ add r11d,DWORD PTR[16+r15]
+ add bl,dl
+ mov eax,DWORD PTR[24+rsi]
+ add r11d,1272893353
+ movzx ebx,bl
+ add r11d,r12d
+ mov DWORD PTR[20+rsi],edx
+ add cl,al
+ rol r11d,11
+ mov r12d,r9d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],2
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],eax
+ xor r12d,r11d
+ add r10d,DWORD PTR[28+r15]
+ add al,dl
+ mov ebx,DWORD PTR[28+rsi]
+ add r10d,4139469664
+ movzx eax,al
+ add r10d,r12d
+ mov DWORD PTR[24+rsi],edx
+ add cl,bl
+ rol r10d,16
+ mov r12d,r8d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],3
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ xor r12d,r10d
+ add r9d,DWORD PTR[40+r15]
+ add bl,dl
+ mov eax,DWORD PTR[32+rsi]
+ add r9d,3200236656
+ movzx ebx,bl
+ add r9d,r12d
+ mov DWORD PTR[28+rsi],edx
+ add cl,al
+ rol r9d,23
+ mov r12d,r11d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],3
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],eax
+ xor r12d,r9d
+ add r8d,DWORD PTR[52+r15]
+ add al,dl
+ mov ebx,DWORD PTR[36+rsi]
+ add r8d,681279174
+ movzx eax,al
+ add r8d,r12d
+ mov DWORD PTR[32+rsi],edx
+ add cl,bl
+ rol r8d,4
+ mov r12d,r10d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],4
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ xor r12d,r8d
+ add r11d,DWORD PTR[r15]
+ add bl,dl
+ mov eax,DWORD PTR[40+rsi]
+ add r11d,3936430074
+ movzx ebx,bl
+ add r11d,r12d
+ mov DWORD PTR[36+rsi],edx
+ add cl,al
+ rol r11d,11
+ mov r12d,r9d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],4
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],eax
+ xor r12d,r11d
+ add r10d,DWORD PTR[12+r15]
+ add al,dl
+ mov ebx,DWORD PTR[44+rsi]
+ add r10d,3572445317
+ movzx eax,al
+ add r10d,r12d
+ mov DWORD PTR[40+rsi],edx
+ add cl,bl
+ rol r10d,16
+ mov r12d,r8d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],5
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ xor r12d,r10d
+ add r9d,DWORD PTR[24+r15]
+ add bl,dl
+ mov eax,DWORD PTR[48+rsi]
+ add r9d,76029189
+ movzx ebx,bl
+ add r9d,r12d
+ mov DWORD PTR[44+rsi],edx
+ add cl,al
+ rol r9d,23
+ mov r12d,r11d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],5
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],eax
+ xor r12d,r9d
+ add r8d,DWORD PTR[36+r15]
+ add al,dl
+ mov ebx,DWORD PTR[52+rsi]
+ add r8d,3654602809
+ movzx eax,al
+ add r8d,r12d
+ mov DWORD PTR[48+rsi],edx
+ add cl,bl
+ rol r8d,4
+ mov r12d,r10d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],6
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ xor r12d,r8d
+ add r11d,DWORD PTR[48+r15]
+ add bl,dl
+ mov eax,DWORD PTR[56+rsi]
+ add r11d,3873151461
+ movzx ebx,bl
+ add r11d,r12d
+ mov DWORD PTR[52+rsi],edx
+ add cl,al
+ rol r11d,11
+ mov r12d,r9d
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],6
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],eax
+ xor r12d,r11d
+ add r10d,DWORD PTR[60+r15]
+ add al,dl
+ mov ebx,DWORD PTR[60+rsi]
+ add r10d,530742520
+ movzx eax,al
+ add r10d,r12d
+ mov DWORD PTR[56+rsi],edx
+ add cl,bl
+ rol r10d,16
+ mov r12d,r8d
+ pinsrw xmm0,WORD PTR[rax*4+rdi],7
+
+ add r10d,r11d
+ movdqu xmm4,XMMWORD PTR[32+r13]
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ xor r12d,r10d
+ add r9d,DWORD PTR[8+r15]
+ add bl,dl
+ mov eax,DWORD PTR[64+rsi]
+ add r9d,3299628645
+ movzx ebx,bl
+ add r9d,r12d
+ mov DWORD PTR[60+rsi],edx
+ add cl,al
+ rol r9d,23
+ mov r12d,-1
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],7
+
+ add r9d,r10d
+ psllq xmm1,8
+ pxor xmm4,xmm0
+ pxor xmm4,xmm1
+ pxor xmm0,xmm0
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],eax
+ or r12d,r9d
+ add r8d,DWORD PTR[r15]
+ add al,dl
+ mov ebx,DWORD PTR[68+rsi]
+ add r8d,4096336452
+ movzx eax,al
+ xor r12d,r10d
+ mov DWORD PTR[64+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,6
+ mov r12d,-1
+ movd xmm0,DWORD PTR[rax*4+rdi]
+
+ add r8d,r9d
+ pxor xmm1,xmm1
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ or r12d,r8d
+ add r11d,DWORD PTR[28+r15]
+ add bl,dl
+ mov eax,DWORD PTR[72+rsi]
+ add r11d,1126891415
+ movzx ebx,bl
+ xor r12d,r9d
+ mov DWORD PTR[68+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,10
+ mov r12d,-1
+ movd xmm1,DWORD PTR[rbx*4+rdi]
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],eax
+ or r12d,r11d
+ add r10d,DWORD PTR[56+r15]
+ add al,dl
+ mov ebx,DWORD PTR[76+rsi]
+ add r10d,2878612391
+ movzx eax,al
+ xor r12d,r8d
+ mov DWORD PTR[72+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,15
+ mov r12d,-1
+ pinsrw xmm0,WORD PTR[rax*4+rdi],1
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ or r12d,r10d
+ add r9d,DWORD PTR[20+r15]
+ add bl,dl
+ mov eax,DWORD PTR[80+rsi]
+ add r9d,4237533241
+ movzx ebx,bl
+ xor r12d,r11d
+ mov DWORD PTR[76+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,21
+ mov r12d,-1
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],1
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],eax
+ or r12d,r9d
+ add r8d,DWORD PTR[48+r15]
+ add al,dl
+ mov ebx,DWORD PTR[84+rsi]
+ add r8d,1700485571
+ movzx eax,al
+ xor r12d,r10d
+ mov DWORD PTR[80+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,6
+ mov r12d,-1
+ pinsrw xmm0,WORD PTR[rax*4+rdi],2
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ or r12d,r8d
+ add r11d,DWORD PTR[12+r15]
+ add bl,dl
+ mov eax,DWORD PTR[88+rsi]
+ add r11d,2399980690
+ movzx ebx,bl
+ xor r12d,r9d
+ mov DWORD PTR[84+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,10
+ mov r12d,-1
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],2
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],eax
+ or r12d,r11d
+ add r10d,DWORD PTR[40+r15]
+ add al,dl
+ mov ebx,DWORD PTR[92+rsi]
+ add r10d,4293915773
+ movzx eax,al
+ xor r12d,r8d
+ mov DWORD PTR[88+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,15
+ mov r12d,-1
+ pinsrw xmm0,WORD PTR[rax*4+rdi],3
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ or r12d,r10d
+ add r9d,DWORD PTR[4+r15]
+ add bl,dl
+ mov eax,DWORD PTR[96+rsi]
+ add r9d,2240044497
+ movzx ebx,bl
+ xor r12d,r11d
+ mov DWORD PTR[92+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,21
+ mov r12d,-1
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],3
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],eax
+ or r12d,r9d
+ add r8d,DWORD PTR[32+r15]
+ add al,dl
+ mov ebx,DWORD PTR[100+rsi]
+ add r8d,1873313359
+ movzx eax,al
+ xor r12d,r10d
+ mov DWORD PTR[96+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,6
+ mov r12d,-1
+ pinsrw xmm0,WORD PTR[rax*4+rdi],4
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ or r12d,r8d
+ add r11d,DWORD PTR[60+r15]
+ add bl,dl
+ mov eax,DWORD PTR[104+rsi]
+ add r11d,4264355552
+ movzx ebx,bl
+ xor r12d,r9d
+ mov DWORD PTR[100+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,10
+ mov r12d,-1
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],4
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],eax
+ or r12d,r11d
+ add r10d,DWORD PTR[24+r15]
+ add al,dl
+ mov ebx,DWORD PTR[108+rsi]
+ add r10d,2734768916
+ movzx eax,al
+ xor r12d,r8d
+ mov DWORD PTR[104+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,15
+ mov r12d,-1
+ pinsrw xmm0,WORD PTR[rax*4+rdi],5
+
+ add r10d,r11d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ or r12d,r10d
+ add r9d,DWORD PTR[52+r15]
+ add bl,dl
+ mov eax,DWORD PTR[112+rsi]
+ add r9d,1309151649
+ movzx ebx,bl
+ xor r12d,r11d
+ mov DWORD PTR[108+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,21
+ mov r12d,-1
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],5
+
+ add r9d,r10d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r11d
+ mov DWORD PTR[rcx*4+rdi],eax
+ or r12d,r9d
+ add r8d,DWORD PTR[16+r15]
+ add al,dl
+ mov ebx,DWORD PTR[116+rsi]
+ add r8d,4149444226
+ movzx eax,al
+ xor r12d,r10d
+ mov DWORD PTR[112+rsi],edx
+ add r8d,r12d
+ add cl,bl
+ rol r8d,6
+ mov r12d,-1
+ pinsrw xmm0,WORD PTR[rax*4+rdi],6
+
+ add r8d,r9d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r10d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ or r12d,r8d
+ add r11d,DWORD PTR[44+r15]
+ add bl,dl
+ mov eax,DWORD PTR[120+rsi]
+ add r11d,3174756917
+ movzx ebx,bl
+ xor r12d,r9d
+ mov DWORD PTR[116+rsi],edx
+ add r11d,r12d
+ add cl,al
+ rol r11d,10
+ mov r12d,-1
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],6
+
+ add r11d,r8d
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r9d
+ mov DWORD PTR[rcx*4+rdi],eax
+ or r12d,r11d
+ add r10d,DWORD PTR[8+r15]
+ add al,dl
+ mov ebx,DWORD PTR[124+rsi]
+ add r10d,718787259
+ movzx eax,al
+ xor r12d,r8d
+ mov DWORD PTR[120+rsi],edx
+ add r10d,r12d
+ add cl,bl
+ rol r10d,15
+ mov r12d,-1
+ pinsrw xmm0,WORD PTR[rax*4+rdi],7
+
+ add r10d,r11d
+ movdqu xmm5,XMMWORD PTR[48+r13]
+ add bpl,32
+ mov edx,DWORD PTR[rcx*4+rdi]
+ xor r12d,r8d
+ mov DWORD PTR[rcx*4+rdi],ebx
+ or r12d,r10d
+ add r9d,DWORD PTR[36+r15]
+ add bl,dl
+ mov eax,DWORD PTR[rbp*4+rdi]
+ add r9d,3951481745
+ movzx ebx,bl
+ xor r12d,r11d
+ mov DWORD PTR[124+rsi],edx
+ add r9d,r12d
+ add cl,al
+ rol r9d,21
+ mov r12d,-1
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],7
+
+ add r9d,r10d
+ mov rsi,rbp
+ xor rbp,rbp
+ mov bpl,sil
+ mov rsi,rcx
+ xor rcx,rcx
+ mov cl,sil
+ lea rsi,QWORD PTR[rbp*4+rdi]
+ psllq xmm1,8
+ pxor xmm5,xmm0
+ pxor xmm5,xmm1
+ add r8d,DWORD PTR[rsp]
+ add r9d,DWORD PTR[4+rsp]
+ add r10d,DWORD PTR[8+rsp]
+ add r11d,DWORD PTR[12+rsp]
+
+ movdqu XMMWORD PTR[r13*1+r14],xmm2
+ movdqu XMMWORD PTR[16+r13*1+r14],xmm3
+ movdqu XMMWORD PTR[32+r13*1+r14],xmm4
+ movdqu XMMWORD PTR[48+r13*1+r14],xmm5
+ lea r15,QWORD PTR[64+r15]
+ lea r13,QWORD PTR[64+r13]
+ cmp r15,QWORD PTR[16+rsp]
+ jb $L$oop
+
+ mov r12,QWORD PTR[24+rsp]
+ sub cl,al
+ mov DWORD PTR[r12],r8d
+ mov DWORD PTR[4+r12],r9d
+ mov DWORD PTR[8+r12],r10d
+ mov DWORD PTR[12+r12],r11d
+ sub bpl,1
+ mov DWORD PTR[((-8))+rdi],ebp
+ mov DWORD PTR[((-4))+rdi],ecx
+
+ mov r15,QWORD PTR[40+rsp]
+
+ mov r14,QWORD PTR[48+rsp]
+
+ mov r13,QWORD PTR[56+rsp]
+
+ mov r12,QWORD PTR[64+rsp]
+
+ mov rbp,QWORD PTR[72+rsp]
+
+ mov rbx,QWORD PTR[80+rsp]
+
+ lea rsp,QWORD PTR[88+rsp]
+
+$L$epilogue::
+$L$abort::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_rc4_md5_enc::
+rc4_md5_enc ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$body]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea r10,QWORD PTR[$L$epilogue]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ mov r15,QWORD PTR[40+rax]
+ mov r14,QWORD PTR[48+rax]
+ mov r13,QWORD PTR[56+rax]
+ mov r12,QWORD PTR[64+rax]
+ mov rbp,QWORD PTR[72+rax]
+ mov rbx,QWORD PTR[80+rax]
+ lea rax,QWORD PTR[88+rax]
+
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_rc4_md5_enc
+ DD imagerel $L$SEH_end_rc4_md5_enc
+ DD imagerel $L$SEH_info_rc4_md5_enc
+
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_rc4_md5_enc::
+DB 9,0,0,0
+ DD imagerel se_handler
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-x86_64.masm
index 1fb9f3677b..226300a119 100644
--- a/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/rc4/rc4-x86_64.masm
@@ -1,785 +1,785 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC RC4
-
-ALIGN 16
-RC4 PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_RC4::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
-
- or rsi,rsi
- jne $L$entry
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$entry::
- push rbx
-
- push r12
-
- push r13
-
-$L$prologue::
- mov r11,rsi
- mov r12,rdx
- mov r13,rcx
- xor r10,r10
- xor rcx,rcx
-
- lea rdi,QWORD PTR[8+rdi]
- mov r10b,BYTE PTR[((-8))+rdi]
- mov cl,BYTE PTR[((-4))+rdi]
- cmp DWORD PTR[256+rdi],-1
- je $L$RC4_CHAR
- mov r8d,DWORD PTR[OPENSSL_ia32cap_P]
- xor rbx,rbx
- inc r10b
- sub rbx,r10
- sub r13,r12
- mov eax,DWORD PTR[r10*4+rdi]
- test r11,-16
- jz $L$loop1
- bt r8d,30
- jc $L$intel
- and rbx,7
- lea rsi,QWORD PTR[1+r10]
- jz $L$oop8
- sub r11,rbx
-$L$oop8_warmup::
- add cl,al
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- mov DWORD PTR[r10*4+rdi],edx
- add al,dl
- inc r10b
- mov edx,DWORD PTR[rax*4+rdi]
- mov eax,DWORD PTR[r10*4+rdi]
- xor dl,BYTE PTR[r12]
- mov BYTE PTR[r13*1+r12],dl
- lea r12,QWORD PTR[1+r12]
- dec rbx
- jnz $L$oop8_warmup
-
- lea rsi,QWORD PTR[1+r10]
- jmp $L$oop8
-ALIGN 16
-$L$oop8::
- add cl,al
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- mov ebx,DWORD PTR[rsi*4+rdi]
- ror r8,8
- mov DWORD PTR[r10*4+rdi],edx
- add dl,al
- mov r8b,BYTE PTR[rdx*4+rdi]
- add cl,bl
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- mov eax,DWORD PTR[4+rsi*4+rdi]
- ror r8,8
- mov DWORD PTR[4+r10*4+rdi],edx
- add dl,bl
- mov r8b,BYTE PTR[rdx*4+rdi]
- add cl,al
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- mov ebx,DWORD PTR[8+rsi*4+rdi]
- ror r8,8
- mov DWORD PTR[8+r10*4+rdi],edx
- add dl,al
- mov r8b,BYTE PTR[rdx*4+rdi]
- add cl,bl
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- mov eax,DWORD PTR[12+rsi*4+rdi]
- ror r8,8
- mov DWORD PTR[12+r10*4+rdi],edx
- add dl,bl
- mov r8b,BYTE PTR[rdx*4+rdi]
- add cl,al
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- mov ebx,DWORD PTR[16+rsi*4+rdi]
- ror r8,8
- mov DWORD PTR[16+r10*4+rdi],edx
- add dl,al
- mov r8b,BYTE PTR[rdx*4+rdi]
- add cl,bl
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- mov eax,DWORD PTR[20+rsi*4+rdi]
- ror r8,8
- mov DWORD PTR[20+r10*4+rdi],edx
- add dl,bl
- mov r8b,BYTE PTR[rdx*4+rdi]
- add cl,al
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- mov ebx,DWORD PTR[24+rsi*4+rdi]
- ror r8,8
- mov DWORD PTR[24+r10*4+rdi],edx
- add dl,al
- mov r8b,BYTE PTR[rdx*4+rdi]
- add sil,8
- add cl,bl
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- mov eax,DWORD PTR[((-4))+rsi*4+rdi]
- ror r8,8
- mov DWORD PTR[28+r10*4+rdi],edx
- add dl,bl
- mov r8b,BYTE PTR[rdx*4+rdi]
- add r10b,8
- ror r8,8
- sub r11,8
-
- xor r8,QWORD PTR[r12]
- mov QWORD PTR[r13*1+r12],r8
- lea r12,QWORD PTR[8+r12]
-
- test r11,-8
- jnz $L$oop8
- cmp r11,0
- jne $L$loop1
- jmp $L$exit
-
-ALIGN 16
-$L$intel::
- test r11,-32
- jz $L$loop1
- and rbx,15
- jz $L$oop16_is_hot
- sub r11,rbx
-$L$oop16_warmup::
- add cl,al
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- mov DWORD PTR[r10*4+rdi],edx
- add al,dl
- inc r10b
- mov edx,DWORD PTR[rax*4+rdi]
- mov eax,DWORD PTR[r10*4+rdi]
- xor dl,BYTE PTR[r12]
- mov BYTE PTR[r13*1+r12],dl
- lea r12,QWORD PTR[1+r12]
- dec rbx
- jnz $L$oop16_warmup
-
- mov rbx,rcx
- xor rcx,rcx
- mov cl,bl
-
-$L$oop16_is_hot::
- lea rsi,QWORD PTR[r10*4+rdi]
- add cl,al
- mov edx,DWORD PTR[rcx*4+rdi]
- pxor xmm0,xmm0
- mov DWORD PTR[rcx*4+rdi],eax
- add al,dl
- mov ebx,DWORD PTR[4+rsi]
- movzx eax,al
- mov DWORD PTR[rsi],edx
- add cl,bl
- pinsrw xmm0,WORD PTR[rax*4+rdi],0
- jmp $L$oop16_enter
-ALIGN 16
-$L$oop16::
- add cl,al
- mov edx,DWORD PTR[rcx*4+rdi]
- pxor xmm2,xmm0
- psllq xmm1,8
- pxor xmm0,xmm0
- mov DWORD PTR[rcx*4+rdi],eax
- add al,dl
- mov ebx,DWORD PTR[4+rsi]
- movzx eax,al
- mov DWORD PTR[rsi],edx
- pxor xmm2,xmm1
- add cl,bl
- pinsrw xmm0,WORD PTR[rax*4+rdi],0
- movdqu XMMWORD PTR[r13*1+r12],xmm2
- lea r12,QWORD PTR[16+r12]
-$L$oop16_enter::
- mov edx,DWORD PTR[rcx*4+rdi]
- pxor xmm1,xmm1
- mov DWORD PTR[rcx*4+rdi],ebx
- add bl,dl
- mov eax,DWORD PTR[8+rsi]
- movzx ebx,bl
- mov DWORD PTR[4+rsi],edx
- add cl,al
- pinsrw xmm1,WORD PTR[rbx*4+rdi],0
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- add al,dl
- mov ebx,DWORD PTR[12+rsi]
- movzx eax,al
- mov DWORD PTR[8+rsi],edx
- add cl,bl
- pinsrw xmm0,WORD PTR[rax*4+rdi],1
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- add bl,dl
- mov eax,DWORD PTR[16+rsi]
- movzx ebx,bl
- mov DWORD PTR[12+rsi],edx
- add cl,al
- pinsrw xmm1,WORD PTR[rbx*4+rdi],1
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- add al,dl
- mov ebx,DWORD PTR[20+rsi]
- movzx eax,al
- mov DWORD PTR[16+rsi],edx
- add cl,bl
- pinsrw xmm0,WORD PTR[rax*4+rdi],2
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- add bl,dl
- mov eax,DWORD PTR[24+rsi]
- movzx ebx,bl
- mov DWORD PTR[20+rsi],edx
- add cl,al
- pinsrw xmm1,WORD PTR[rbx*4+rdi],2
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- add al,dl
- mov ebx,DWORD PTR[28+rsi]
- movzx eax,al
- mov DWORD PTR[24+rsi],edx
- add cl,bl
- pinsrw xmm0,WORD PTR[rax*4+rdi],3
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- add bl,dl
- mov eax,DWORD PTR[32+rsi]
- movzx ebx,bl
- mov DWORD PTR[28+rsi],edx
- add cl,al
- pinsrw xmm1,WORD PTR[rbx*4+rdi],3
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- add al,dl
- mov ebx,DWORD PTR[36+rsi]
- movzx eax,al
- mov DWORD PTR[32+rsi],edx
- add cl,bl
- pinsrw xmm0,WORD PTR[rax*4+rdi],4
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- add bl,dl
- mov eax,DWORD PTR[40+rsi]
- movzx ebx,bl
- mov DWORD PTR[36+rsi],edx
- add cl,al
- pinsrw xmm1,WORD PTR[rbx*4+rdi],4
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- add al,dl
- mov ebx,DWORD PTR[44+rsi]
- movzx eax,al
- mov DWORD PTR[40+rsi],edx
- add cl,bl
- pinsrw xmm0,WORD PTR[rax*4+rdi],5
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- add bl,dl
- mov eax,DWORD PTR[48+rsi]
- movzx ebx,bl
- mov DWORD PTR[44+rsi],edx
- add cl,al
- pinsrw xmm1,WORD PTR[rbx*4+rdi],5
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- add al,dl
- mov ebx,DWORD PTR[52+rsi]
- movzx eax,al
- mov DWORD PTR[48+rsi],edx
- add cl,bl
- pinsrw xmm0,WORD PTR[rax*4+rdi],6
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- add bl,dl
- mov eax,DWORD PTR[56+rsi]
- movzx ebx,bl
- mov DWORD PTR[52+rsi],edx
- add cl,al
- pinsrw xmm1,WORD PTR[rbx*4+rdi],6
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- add al,dl
- mov ebx,DWORD PTR[60+rsi]
- movzx eax,al
- mov DWORD PTR[56+rsi],edx
- add cl,bl
- pinsrw xmm0,WORD PTR[rax*4+rdi],7
- add r10b,16
- movdqu xmm2,XMMWORD PTR[r12]
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],ebx
- add bl,dl
- movzx ebx,bl
- mov DWORD PTR[60+rsi],edx
- lea rsi,QWORD PTR[r10*4+rdi]
- pinsrw xmm1,WORD PTR[rbx*4+rdi],7
- mov eax,DWORD PTR[rsi]
- mov rbx,rcx
- xor rcx,rcx
- sub r11,16
- mov cl,bl
- test r11,-16
- jnz $L$oop16
-
- psllq xmm1,8
- pxor xmm2,xmm0
- pxor xmm2,xmm1
- movdqu XMMWORD PTR[r13*1+r12],xmm2
- lea r12,QWORD PTR[16+r12]
-
- cmp r11,0
- jne $L$loop1
- jmp $L$exit
-
-ALIGN 16
-$L$loop1::
- add cl,al
- mov edx,DWORD PTR[rcx*4+rdi]
- mov DWORD PTR[rcx*4+rdi],eax
- mov DWORD PTR[r10*4+rdi],edx
- add al,dl
- inc r10b
- mov edx,DWORD PTR[rax*4+rdi]
- mov eax,DWORD PTR[r10*4+rdi]
- xor dl,BYTE PTR[r12]
- mov BYTE PTR[r13*1+r12],dl
- lea r12,QWORD PTR[1+r12]
- dec r11
- jnz $L$loop1
- jmp $L$exit
-
-ALIGN 16
-$L$RC4_CHAR::
- add r10b,1
- movzx eax,BYTE PTR[r10*1+rdi]
- test r11,-8
- jz $L$cloop1
- jmp $L$cloop8
-ALIGN 16
-$L$cloop8::
- mov r8d,DWORD PTR[r12]
- mov r9d,DWORD PTR[4+r12]
- add cl,al
- lea rsi,QWORD PTR[1+r10]
- movzx edx,BYTE PTR[rcx*1+rdi]
- movzx esi,sil
- movzx ebx,BYTE PTR[rsi*1+rdi]
- mov BYTE PTR[rcx*1+rdi],al
- cmp rcx,rsi
- mov BYTE PTR[r10*1+rdi],dl
- jne $L$cmov0
- mov rbx,rax
-$L$cmov0::
- add dl,al
- xor r8b,BYTE PTR[rdx*1+rdi]
- ror r8d,8
- add cl,bl
- lea r10,QWORD PTR[1+rsi]
- movzx edx,BYTE PTR[rcx*1+rdi]
- movzx r10d,r10b
- movzx eax,BYTE PTR[r10*1+rdi]
- mov BYTE PTR[rcx*1+rdi],bl
- cmp rcx,r10
- mov BYTE PTR[rsi*1+rdi],dl
- jne $L$cmov1
- mov rax,rbx
-$L$cmov1::
- add dl,bl
- xor r8b,BYTE PTR[rdx*1+rdi]
- ror r8d,8
- add cl,al
- lea rsi,QWORD PTR[1+r10]
- movzx edx,BYTE PTR[rcx*1+rdi]
- movzx esi,sil
- movzx ebx,BYTE PTR[rsi*1+rdi]
- mov BYTE PTR[rcx*1+rdi],al
- cmp rcx,rsi
- mov BYTE PTR[r10*1+rdi],dl
- jne $L$cmov2
- mov rbx,rax
-$L$cmov2::
- add dl,al
- xor r8b,BYTE PTR[rdx*1+rdi]
- ror r8d,8
- add cl,bl
- lea r10,QWORD PTR[1+rsi]
- movzx edx,BYTE PTR[rcx*1+rdi]
- movzx r10d,r10b
- movzx eax,BYTE PTR[r10*1+rdi]
- mov BYTE PTR[rcx*1+rdi],bl
- cmp rcx,r10
- mov BYTE PTR[rsi*1+rdi],dl
- jne $L$cmov3
- mov rax,rbx
-$L$cmov3::
- add dl,bl
- xor r8b,BYTE PTR[rdx*1+rdi]
- ror r8d,8
- add cl,al
- lea rsi,QWORD PTR[1+r10]
- movzx edx,BYTE PTR[rcx*1+rdi]
- movzx esi,sil
- movzx ebx,BYTE PTR[rsi*1+rdi]
- mov BYTE PTR[rcx*1+rdi],al
- cmp rcx,rsi
- mov BYTE PTR[r10*1+rdi],dl
- jne $L$cmov4
- mov rbx,rax
-$L$cmov4::
- add dl,al
- xor r9b,BYTE PTR[rdx*1+rdi]
- ror r9d,8
- add cl,bl
- lea r10,QWORD PTR[1+rsi]
- movzx edx,BYTE PTR[rcx*1+rdi]
- movzx r10d,r10b
- movzx eax,BYTE PTR[r10*1+rdi]
- mov BYTE PTR[rcx*1+rdi],bl
- cmp rcx,r10
- mov BYTE PTR[rsi*1+rdi],dl
- jne $L$cmov5
- mov rax,rbx
-$L$cmov5::
- add dl,bl
- xor r9b,BYTE PTR[rdx*1+rdi]
- ror r9d,8
- add cl,al
- lea rsi,QWORD PTR[1+r10]
- movzx edx,BYTE PTR[rcx*1+rdi]
- movzx esi,sil
- movzx ebx,BYTE PTR[rsi*1+rdi]
- mov BYTE PTR[rcx*1+rdi],al
- cmp rcx,rsi
- mov BYTE PTR[r10*1+rdi],dl
- jne $L$cmov6
- mov rbx,rax
-$L$cmov6::
- add dl,al
- xor r9b,BYTE PTR[rdx*1+rdi]
- ror r9d,8
- add cl,bl
- lea r10,QWORD PTR[1+rsi]
- movzx edx,BYTE PTR[rcx*1+rdi]
- movzx r10d,r10b
- movzx eax,BYTE PTR[r10*1+rdi]
- mov BYTE PTR[rcx*1+rdi],bl
- cmp rcx,r10
- mov BYTE PTR[rsi*1+rdi],dl
- jne $L$cmov7
- mov rax,rbx
-$L$cmov7::
- add dl,bl
- xor r9b,BYTE PTR[rdx*1+rdi]
- ror r9d,8
- lea r11,QWORD PTR[((-8))+r11]
- mov DWORD PTR[r13],r8d
- lea r12,QWORD PTR[8+r12]
- mov DWORD PTR[4+r13],r9d
- lea r13,QWORD PTR[8+r13]
-
- test r11,-8
- jnz $L$cloop8
- cmp r11,0
- jne $L$cloop1
- jmp $L$exit
-ALIGN 16
-$L$cloop1::
- add cl,al
- movzx ecx,cl
- movzx edx,BYTE PTR[rcx*1+rdi]
- mov BYTE PTR[rcx*1+rdi],al
- mov BYTE PTR[r10*1+rdi],dl
- add dl,al
- add r10b,1
- movzx edx,dl
- movzx r10d,r10b
- movzx edx,BYTE PTR[rdx*1+rdi]
- movzx eax,BYTE PTR[r10*1+rdi]
- xor dl,BYTE PTR[r12]
- lea r12,QWORD PTR[1+r12]
- mov BYTE PTR[r13],dl
- lea r13,QWORD PTR[1+r13]
- sub r11,1
- jnz $L$cloop1
- jmp $L$exit
-
-ALIGN 16
-$L$exit::
- sub r10b,1
- mov DWORD PTR[((-8))+rdi],r10d
- mov DWORD PTR[((-4))+rdi],ecx
-
- mov r13,QWORD PTR[rsp]
-
- mov r12,QWORD PTR[8+rsp]
-
- mov rbx,QWORD PTR[16+rsp]
-
- add rsp,24
-
-$L$epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_RC4::
-RC4 ENDP
-PUBLIC RC4_set_key
-
-ALIGN 16
-RC4_set_key PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_RC4_set_key::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- lea rdi,QWORD PTR[8+rdi]
- lea rdx,QWORD PTR[rsi*1+rdx]
- neg rsi
- mov rcx,rsi
- xor eax,eax
- xor r9,r9
- xor r10,r10
- xor r11,r11
-
- mov r8d,DWORD PTR[OPENSSL_ia32cap_P]
- bt r8d,20
- jc $L$c1stloop
- jmp $L$w1stloop
-
-ALIGN 16
-$L$w1stloop::
- mov DWORD PTR[rax*4+rdi],eax
- add al,1
- jnc $L$w1stloop
-
- xor r9,r9
- xor r8,r8
-ALIGN 16
-$L$w2ndloop::
- mov r10d,DWORD PTR[r9*4+rdi]
- add r8b,BYTE PTR[rsi*1+rdx]
- add r8b,r10b
- add rsi,1
- mov r11d,DWORD PTR[r8*4+rdi]
- cmovz rsi,rcx
- mov DWORD PTR[r8*4+rdi],r10d
- mov DWORD PTR[r9*4+rdi],r11d
- add r9b,1
- jnc $L$w2ndloop
- jmp $L$exit_key
-
-ALIGN 16
-$L$c1stloop::
- mov BYTE PTR[rax*1+rdi],al
- add al,1
- jnc $L$c1stloop
-
- xor r9,r9
- xor r8,r8
-ALIGN 16
-$L$c2ndloop::
- mov r10b,BYTE PTR[r9*1+rdi]
- add r8b,BYTE PTR[rsi*1+rdx]
- add r8b,r10b
- add rsi,1
- mov r11b,BYTE PTR[r8*1+rdi]
- jnz $L$cnowrap
- mov rsi,rcx
-$L$cnowrap::
- mov BYTE PTR[r8*1+rdi],r10b
- mov BYTE PTR[r9*1+rdi],r11b
- add r9b,1
- jnc $L$c2ndloop
- mov DWORD PTR[256+rdi],-1
-
-ALIGN 16
-$L$exit_key::
- xor eax,eax
- mov DWORD PTR[((-8))+rdi],eax
- mov DWORD PTR[((-4))+rdi],eax
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_RC4_set_key::
-RC4_set_key ENDP
-
-PUBLIC RC4_options
-
-ALIGN 16
-RC4_options PROC PUBLIC
-
- lea rax,QWORD PTR[$L$opts]
- mov edx,DWORD PTR[OPENSSL_ia32cap_P]
- bt edx,20
- jc $L$8xchar
- bt edx,30
- jnc $L$done
- add rax,25
- DB 0F3h,0C3h ;repret
-$L$8xchar::
- add rax,12
-$L$done::
- DB 0F3h,0C3h ;repret
-
-ALIGN 64
-$L$opts::
-DB 114,99,52,40,56,120,44,105,110,116,41,0
-DB 114,99,52,40,56,120,44,99,104,97,114,41,0
-DB 114,99,52,40,49,54,120,44,105,110,116,41,0
-DB 82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32
-DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
-DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
-DB 62,0
-ALIGN 64
-RC4_options ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-stream_se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- lea r10,QWORD PTR[$L$prologue]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- lea r10,QWORD PTR[$L$epilogue]
- cmp rbx,r10
- jae $L$in_prologue
-
- lea rax,QWORD PTR[24+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov r12,QWORD PTR[((-16))+rax]
- mov r13,QWORD PTR[((-24))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- jmp $L$common_seh_exit
-stream_se_handler ENDP
-
-
-ALIGN 16
-key_se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[152+r8]
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
-$L$common_seh_exit::
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-key_se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_RC4
- DD imagerel $L$SEH_end_RC4
- DD imagerel $L$SEH_info_RC4
-
- DD imagerel $L$SEH_begin_RC4_set_key
- DD imagerel $L$SEH_end_RC4_set_key
- DD imagerel $L$SEH_info_RC4_set_key
-
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_RC4::
-DB 9,0,0,0
- DD imagerel stream_se_handler
-$L$SEH_info_RC4_set_key::
-DB 9,0,0,0
- DD imagerel key_se_handler
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC RC4
+
+ALIGN 16
+RC4 PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_RC4::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+
+ or rsi,rsi
+ jne $L$entry
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$entry::
+ push rbx
+
+ push r12
+
+ push r13
+
+$L$prologue::
+ mov r11,rsi
+ mov r12,rdx
+ mov r13,rcx
+ xor r10,r10
+ xor rcx,rcx
+
+ lea rdi,QWORD PTR[8+rdi]
+ mov r10b,BYTE PTR[((-8))+rdi]
+ mov cl,BYTE PTR[((-4))+rdi]
+ cmp DWORD PTR[256+rdi],-1
+ je $L$RC4_CHAR
+ mov r8d,DWORD PTR[OPENSSL_ia32cap_P]
+ xor rbx,rbx
+ inc r10b
+ sub rbx,r10
+ sub r13,r12
+ mov eax,DWORD PTR[r10*4+rdi]
+ test r11,-16
+ jz $L$loop1
+ bt r8d,30
+ jc $L$intel
+ and rbx,7
+ lea rsi,QWORD PTR[1+r10]
+ jz $L$oop8
+ sub r11,rbx
+$L$oop8_warmup::
+ add cl,al
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ mov DWORD PTR[r10*4+rdi],edx
+ add al,dl
+ inc r10b
+ mov edx,DWORD PTR[rax*4+rdi]
+ mov eax,DWORD PTR[r10*4+rdi]
+ xor dl,BYTE PTR[r12]
+ mov BYTE PTR[r13*1+r12],dl
+ lea r12,QWORD PTR[1+r12]
+ dec rbx
+ jnz $L$oop8_warmup
+
+ lea rsi,QWORD PTR[1+r10]
+ jmp $L$oop8
+ALIGN 16
+$L$oop8::
+ add cl,al
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ mov ebx,DWORD PTR[rsi*4+rdi]
+ ror r8,8
+ mov DWORD PTR[r10*4+rdi],edx
+ add dl,al
+ mov r8b,BYTE PTR[rdx*4+rdi]
+ add cl,bl
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ mov eax,DWORD PTR[4+rsi*4+rdi]
+ ror r8,8
+ mov DWORD PTR[4+r10*4+rdi],edx
+ add dl,bl
+ mov r8b,BYTE PTR[rdx*4+rdi]
+ add cl,al
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ mov ebx,DWORD PTR[8+rsi*4+rdi]
+ ror r8,8
+ mov DWORD PTR[8+r10*4+rdi],edx
+ add dl,al
+ mov r8b,BYTE PTR[rdx*4+rdi]
+ add cl,bl
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ mov eax,DWORD PTR[12+rsi*4+rdi]
+ ror r8,8
+ mov DWORD PTR[12+r10*4+rdi],edx
+ add dl,bl
+ mov r8b,BYTE PTR[rdx*4+rdi]
+ add cl,al
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ mov ebx,DWORD PTR[16+rsi*4+rdi]
+ ror r8,8
+ mov DWORD PTR[16+r10*4+rdi],edx
+ add dl,al
+ mov r8b,BYTE PTR[rdx*4+rdi]
+ add cl,bl
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ mov eax,DWORD PTR[20+rsi*4+rdi]
+ ror r8,8
+ mov DWORD PTR[20+r10*4+rdi],edx
+ add dl,bl
+ mov r8b,BYTE PTR[rdx*4+rdi]
+ add cl,al
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ mov ebx,DWORD PTR[24+rsi*4+rdi]
+ ror r8,8
+ mov DWORD PTR[24+r10*4+rdi],edx
+ add dl,al
+ mov r8b,BYTE PTR[rdx*4+rdi]
+ add sil,8
+ add cl,bl
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ mov eax,DWORD PTR[((-4))+rsi*4+rdi]
+ ror r8,8
+ mov DWORD PTR[28+r10*4+rdi],edx
+ add dl,bl
+ mov r8b,BYTE PTR[rdx*4+rdi]
+ add r10b,8
+ ror r8,8
+ sub r11,8
+
+ xor r8,QWORD PTR[r12]
+ mov QWORD PTR[r13*1+r12],r8
+ lea r12,QWORD PTR[8+r12]
+
+ test r11,-8
+ jnz $L$oop8
+ cmp r11,0
+ jne $L$loop1
+ jmp $L$exit
+
+ALIGN 16
+$L$intel::
+ test r11,-32
+ jz $L$loop1
+ and rbx,15
+ jz $L$oop16_is_hot
+ sub r11,rbx
+$L$oop16_warmup::
+ add cl,al
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ mov DWORD PTR[r10*4+rdi],edx
+ add al,dl
+ inc r10b
+ mov edx,DWORD PTR[rax*4+rdi]
+ mov eax,DWORD PTR[r10*4+rdi]
+ xor dl,BYTE PTR[r12]
+ mov BYTE PTR[r13*1+r12],dl
+ lea r12,QWORD PTR[1+r12]
+ dec rbx
+ jnz $L$oop16_warmup
+
+ mov rbx,rcx
+ xor rcx,rcx
+ mov cl,bl
+
+$L$oop16_is_hot::
+ lea rsi,QWORD PTR[r10*4+rdi]
+ add cl,al
+ mov edx,DWORD PTR[rcx*4+rdi]
+ pxor xmm0,xmm0
+ mov DWORD PTR[rcx*4+rdi],eax
+ add al,dl
+ mov ebx,DWORD PTR[4+rsi]
+ movzx eax,al
+ mov DWORD PTR[rsi],edx
+ add cl,bl
+ pinsrw xmm0,WORD PTR[rax*4+rdi],0
+ jmp $L$oop16_enter
+ALIGN 16
+$L$oop16::
+ add cl,al
+ mov edx,DWORD PTR[rcx*4+rdi]
+ pxor xmm2,xmm0
+ psllq xmm1,8
+ pxor xmm0,xmm0
+ mov DWORD PTR[rcx*4+rdi],eax
+ add al,dl
+ mov ebx,DWORD PTR[4+rsi]
+ movzx eax,al
+ mov DWORD PTR[rsi],edx
+ pxor xmm2,xmm1
+ add cl,bl
+ pinsrw xmm0,WORD PTR[rax*4+rdi],0
+ movdqu XMMWORD PTR[r13*1+r12],xmm2
+ lea r12,QWORD PTR[16+r12]
+$L$oop16_enter::
+ mov edx,DWORD PTR[rcx*4+rdi]
+ pxor xmm1,xmm1
+ mov DWORD PTR[rcx*4+rdi],ebx
+ add bl,dl
+ mov eax,DWORD PTR[8+rsi]
+ movzx ebx,bl
+ mov DWORD PTR[4+rsi],edx
+ add cl,al
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],0
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ add al,dl
+ mov ebx,DWORD PTR[12+rsi]
+ movzx eax,al
+ mov DWORD PTR[8+rsi],edx
+ add cl,bl
+ pinsrw xmm0,WORD PTR[rax*4+rdi],1
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ add bl,dl
+ mov eax,DWORD PTR[16+rsi]
+ movzx ebx,bl
+ mov DWORD PTR[12+rsi],edx
+ add cl,al
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],1
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ add al,dl
+ mov ebx,DWORD PTR[20+rsi]
+ movzx eax,al
+ mov DWORD PTR[16+rsi],edx
+ add cl,bl
+ pinsrw xmm0,WORD PTR[rax*4+rdi],2
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ add bl,dl
+ mov eax,DWORD PTR[24+rsi]
+ movzx ebx,bl
+ mov DWORD PTR[20+rsi],edx
+ add cl,al
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],2
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ add al,dl
+ mov ebx,DWORD PTR[28+rsi]
+ movzx eax,al
+ mov DWORD PTR[24+rsi],edx
+ add cl,bl
+ pinsrw xmm0,WORD PTR[rax*4+rdi],3
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ add bl,dl
+ mov eax,DWORD PTR[32+rsi]
+ movzx ebx,bl
+ mov DWORD PTR[28+rsi],edx
+ add cl,al
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],3
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ add al,dl
+ mov ebx,DWORD PTR[36+rsi]
+ movzx eax,al
+ mov DWORD PTR[32+rsi],edx
+ add cl,bl
+ pinsrw xmm0,WORD PTR[rax*4+rdi],4
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ add bl,dl
+ mov eax,DWORD PTR[40+rsi]
+ movzx ebx,bl
+ mov DWORD PTR[36+rsi],edx
+ add cl,al
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],4
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ add al,dl
+ mov ebx,DWORD PTR[44+rsi]
+ movzx eax,al
+ mov DWORD PTR[40+rsi],edx
+ add cl,bl
+ pinsrw xmm0,WORD PTR[rax*4+rdi],5
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ add bl,dl
+ mov eax,DWORD PTR[48+rsi]
+ movzx ebx,bl
+ mov DWORD PTR[44+rsi],edx
+ add cl,al
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],5
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ add al,dl
+ mov ebx,DWORD PTR[52+rsi]
+ movzx eax,al
+ mov DWORD PTR[48+rsi],edx
+ add cl,bl
+ pinsrw xmm0,WORD PTR[rax*4+rdi],6
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ add bl,dl
+ mov eax,DWORD PTR[56+rsi]
+ movzx ebx,bl
+ mov DWORD PTR[52+rsi],edx
+ add cl,al
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],6
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ add al,dl
+ mov ebx,DWORD PTR[60+rsi]
+ movzx eax,al
+ mov DWORD PTR[56+rsi],edx
+ add cl,bl
+ pinsrw xmm0,WORD PTR[rax*4+rdi],7
+ add r10b,16
+ movdqu xmm2,XMMWORD PTR[r12]
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],ebx
+ add bl,dl
+ movzx ebx,bl
+ mov DWORD PTR[60+rsi],edx
+ lea rsi,QWORD PTR[r10*4+rdi]
+ pinsrw xmm1,WORD PTR[rbx*4+rdi],7
+ mov eax,DWORD PTR[rsi]
+ mov rbx,rcx
+ xor rcx,rcx
+ sub r11,16
+ mov cl,bl
+ test r11,-16
+ jnz $L$oop16
+
+ psllq xmm1,8
+ pxor xmm2,xmm0
+ pxor xmm2,xmm1
+ movdqu XMMWORD PTR[r13*1+r12],xmm2
+ lea r12,QWORD PTR[16+r12]
+
+ cmp r11,0
+ jne $L$loop1
+ jmp $L$exit
+
+ALIGN 16
+$L$loop1::
+ add cl,al
+ mov edx,DWORD PTR[rcx*4+rdi]
+ mov DWORD PTR[rcx*4+rdi],eax
+ mov DWORD PTR[r10*4+rdi],edx
+ add al,dl
+ inc r10b
+ mov edx,DWORD PTR[rax*4+rdi]
+ mov eax,DWORD PTR[r10*4+rdi]
+ xor dl,BYTE PTR[r12]
+ mov BYTE PTR[r13*1+r12],dl
+ lea r12,QWORD PTR[1+r12]
+ dec r11
+ jnz $L$loop1
+ jmp $L$exit
+
+ALIGN 16
+$L$RC4_CHAR::
+ add r10b,1
+ movzx eax,BYTE PTR[r10*1+rdi]
+ test r11,-8
+ jz $L$cloop1
+ jmp $L$cloop8
+ALIGN 16
+$L$cloop8::
+ mov r8d,DWORD PTR[r12]
+ mov r9d,DWORD PTR[4+r12]
+ add cl,al
+ lea rsi,QWORD PTR[1+r10]
+ movzx edx,BYTE PTR[rcx*1+rdi]
+ movzx esi,sil
+ movzx ebx,BYTE PTR[rsi*1+rdi]
+ mov BYTE PTR[rcx*1+rdi],al
+ cmp rcx,rsi
+ mov BYTE PTR[r10*1+rdi],dl
+ jne $L$cmov0
+ mov rbx,rax
+$L$cmov0::
+ add dl,al
+ xor r8b,BYTE PTR[rdx*1+rdi]
+ ror r8d,8
+ add cl,bl
+ lea r10,QWORD PTR[1+rsi]
+ movzx edx,BYTE PTR[rcx*1+rdi]
+ movzx r10d,r10b
+ movzx eax,BYTE PTR[r10*1+rdi]
+ mov BYTE PTR[rcx*1+rdi],bl
+ cmp rcx,r10
+ mov BYTE PTR[rsi*1+rdi],dl
+ jne $L$cmov1
+ mov rax,rbx
+$L$cmov1::
+ add dl,bl
+ xor r8b,BYTE PTR[rdx*1+rdi]
+ ror r8d,8
+ add cl,al
+ lea rsi,QWORD PTR[1+r10]
+ movzx edx,BYTE PTR[rcx*1+rdi]
+ movzx esi,sil
+ movzx ebx,BYTE PTR[rsi*1+rdi]
+ mov BYTE PTR[rcx*1+rdi],al
+ cmp rcx,rsi
+ mov BYTE PTR[r10*1+rdi],dl
+ jne $L$cmov2
+ mov rbx,rax
+$L$cmov2::
+ add dl,al
+ xor r8b,BYTE PTR[rdx*1+rdi]
+ ror r8d,8
+ add cl,bl
+ lea r10,QWORD PTR[1+rsi]
+ movzx edx,BYTE PTR[rcx*1+rdi]
+ movzx r10d,r10b
+ movzx eax,BYTE PTR[r10*1+rdi]
+ mov BYTE PTR[rcx*1+rdi],bl
+ cmp rcx,r10
+ mov BYTE PTR[rsi*1+rdi],dl
+ jne $L$cmov3
+ mov rax,rbx
+$L$cmov3::
+ add dl,bl
+ xor r8b,BYTE PTR[rdx*1+rdi]
+ ror r8d,8
+ add cl,al
+ lea rsi,QWORD PTR[1+r10]
+ movzx edx,BYTE PTR[rcx*1+rdi]
+ movzx esi,sil
+ movzx ebx,BYTE PTR[rsi*1+rdi]
+ mov BYTE PTR[rcx*1+rdi],al
+ cmp rcx,rsi
+ mov BYTE PTR[r10*1+rdi],dl
+ jne $L$cmov4
+ mov rbx,rax
+$L$cmov4::
+ add dl,al
+ xor r9b,BYTE PTR[rdx*1+rdi]
+ ror r9d,8
+ add cl,bl
+ lea r10,QWORD PTR[1+rsi]
+ movzx edx,BYTE PTR[rcx*1+rdi]
+ movzx r10d,r10b
+ movzx eax,BYTE PTR[r10*1+rdi]
+ mov BYTE PTR[rcx*1+rdi],bl
+ cmp rcx,r10
+ mov BYTE PTR[rsi*1+rdi],dl
+ jne $L$cmov5
+ mov rax,rbx
+$L$cmov5::
+ add dl,bl
+ xor r9b,BYTE PTR[rdx*1+rdi]
+ ror r9d,8
+ add cl,al
+ lea rsi,QWORD PTR[1+r10]
+ movzx edx,BYTE PTR[rcx*1+rdi]
+ movzx esi,sil
+ movzx ebx,BYTE PTR[rsi*1+rdi]
+ mov BYTE PTR[rcx*1+rdi],al
+ cmp rcx,rsi
+ mov BYTE PTR[r10*1+rdi],dl
+ jne $L$cmov6
+ mov rbx,rax
+$L$cmov6::
+ add dl,al
+ xor r9b,BYTE PTR[rdx*1+rdi]
+ ror r9d,8
+ add cl,bl
+ lea r10,QWORD PTR[1+rsi]
+ movzx edx,BYTE PTR[rcx*1+rdi]
+ movzx r10d,r10b
+ movzx eax,BYTE PTR[r10*1+rdi]
+ mov BYTE PTR[rcx*1+rdi],bl
+ cmp rcx,r10
+ mov BYTE PTR[rsi*1+rdi],dl
+ jne $L$cmov7
+ mov rax,rbx
+$L$cmov7::
+ add dl,bl
+ xor r9b,BYTE PTR[rdx*1+rdi]
+ ror r9d,8
+ lea r11,QWORD PTR[((-8))+r11]
+ mov DWORD PTR[r13],r8d
+ lea r12,QWORD PTR[8+r12]
+ mov DWORD PTR[4+r13],r9d
+ lea r13,QWORD PTR[8+r13]
+
+ test r11,-8
+ jnz $L$cloop8
+ cmp r11,0
+ jne $L$cloop1
+ jmp $L$exit
+ALIGN 16
+$L$cloop1::
+ add cl,al
+ movzx ecx,cl
+ movzx edx,BYTE PTR[rcx*1+rdi]
+ mov BYTE PTR[rcx*1+rdi],al
+ mov BYTE PTR[r10*1+rdi],dl
+ add dl,al
+ add r10b,1
+ movzx edx,dl
+ movzx r10d,r10b
+ movzx edx,BYTE PTR[rdx*1+rdi]
+ movzx eax,BYTE PTR[r10*1+rdi]
+ xor dl,BYTE PTR[r12]
+ lea r12,QWORD PTR[1+r12]
+ mov BYTE PTR[r13],dl
+ lea r13,QWORD PTR[1+r13]
+ sub r11,1
+ jnz $L$cloop1
+ jmp $L$exit
+
+ALIGN 16
+$L$exit::
+ sub r10b,1
+ mov DWORD PTR[((-8))+rdi],r10d
+ mov DWORD PTR[((-4))+rdi],ecx
+
+ mov r13,QWORD PTR[rsp]
+
+ mov r12,QWORD PTR[8+rsp]
+
+ mov rbx,QWORD PTR[16+rsp]
+
+ add rsp,24
+
+$L$epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_RC4::
+RC4 ENDP
+PUBLIC RC4_set_key
+
+ALIGN 16
+RC4_set_key PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_RC4_set_key::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ lea rdi,QWORD PTR[8+rdi]
+ lea rdx,QWORD PTR[rsi*1+rdx]
+ neg rsi
+ mov rcx,rsi
+ xor eax,eax
+ xor r9,r9
+ xor r10,r10
+ xor r11,r11
+
+ mov r8d,DWORD PTR[OPENSSL_ia32cap_P]
+ bt r8d,20
+ jc $L$c1stloop
+ jmp $L$w1stloop
+
+ALIGN 16
+$L$w1stloop::
+ mov DWORD PTR[rax*4+rdi],eax
+ add al,1
+ jnc $L$w1stloop
+
+ xor r9,r9
+ xor r8,r8
+ALIGN 16
+$L$w2ndloop::
+ mov r10d,DWORD PTR[r9*4+rdi]
+ add r8b,BYTE PTR[rsi*1+rdx]
+ add r8b,r10b
+ add rsi,1
+ mov r11d,DWORD PTR[r8*4+rdi]
+ cmovz rsi,rcx
+ mov DWORD PTR[r8*4+rdi],r10d
+ mov DWORD PTR[r9*4+rdi],r11d
+ add r9b,1
+ jnc $L$w2ndloop
+ jmp $L$exit_key
+
+ALIGN 16
+$L$c1stloop::
+ mov BYTE PTR[rax*1+rdi],al
+ add al,1
+ jnc $L$c1stloop
+
+ xor r9,r9
+ xor r8,r8
+ALIGN 16
+$L$c2ndloop::
+ mov r10b,BYTE PTR[r9*1+rdi]
+ add r8b,BYTE PTR[rsi*1+rdx]
+ add r8b,r10b
+ add rsi,1
+ mov r11b,BYTE PTR[r8*1+rdi]
+ jnz $L$cnowrap
+ mov rsi,rcx
+$L$cnowrap::
+ mov BYTE PTR[r8*1+rdi],r10b
+ mov BYTE PTR[r9*1+rdi],r11b
+ add r9b,1
+ jnc $L$c2ndloop
+ mov DWORD PTR[256+rdi],-1
+
+ALIGN 16
+$L$exit_key::
+ xor eax,eax
+ mov DWORD PTR[((-8))+rdi],eax
+ mov DWORD PTR[((-4))+rdi],eax
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_RC4_set_key::
+RC4_set_key ENDP
+
+PUBLIC RC4_options
+
+ALIGN 16
+RC4_options PROC PUBLIC
+
+ lea rax,QWORD PTR[$L$opts]
+ mov edx,DWORD PTR[OPENSSL_ia32cap_P]
+ bt edx,20
+ jc $L$8xchar
+ bt edx,30
+ jnc $L$done
+ add rax,25
+ DB 0F3h,0C3h ;repret
+$L$8xchar::
+ add rax,12
+$L$done::
+ DB 0F3h,0C3h ;repret
+
+ALIGN 64
+$L$opts::
+DB 114,99,52,40,56,120,44,105,110,116,41,0
+DB 114,99,52,40,56,120,44,99,104,97,114,41,0
+DB 114,99,52,40,49,54,120,44,105,110,116,41,0
+DB 82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32
+DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
+DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
+DB 62,0
+ALIGN 64
+RC4_options ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+stream_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$prologue]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea r10,QWORD PTR[$L$epilogue]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ lea rax,QWORD PTR[24+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov r12,QWORD PTR[((-16))+rax]
+ mov r13,QWORD PTR[((-24))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ jmp $L$common_seh_exit
+stream_se_handler ENDP
+
+
+ALIGN 16
+key_se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[152+r8]
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+$L$common_seh_exit::
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+key_se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_RC4
+ DD imagerel $L$SEH_end_RC4
+ DD imagerel $L$SEH_info_RC4
+
+ DD imagerel $L$SEH_begin_RC4_set_key
+ DD imagerel $L$SEH_end_RC4_set_key
+ DD imagerel $L$SEH_info_RC4_set_key
+
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_RC4::
+DB 9,0,0,0
+ DD imagerel stream_se_handler
+$L$SEH_info_RC4_set_key::
+DB 9,0,0,0
+ DD imagerel key_se_handler
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/sha/keccak1600-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/sha/keccak1600-x86_64.masm
index aefa92c720..9dd3d90baf 100644
--- a/contrib/libs/openssl/asm/windows/crypto/sha/keccak1600-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/sha/keccak1600-x86_64.masm
@@ -1,528 +1,528 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-
-ALIGN 32
-__KeccakF1600 PROC PRIVATE
-
- mov rax,QWORD PTR[60+rdi]
- mov rbx,QWORD PTR[68+rdi]
- mov rcx,QWORD PTR[76+rdi]
- mov rdx,QWORD PTR[84+rdi]
- mov rbp,QWORD PTR[92+rdi]
- jmp $L$oop
-
-ALIGN 32
-$L$oop::
- mov r8,QWORD PTR[((-100))+rdi]
- mov r9,QWORD PTR[((-52))+rdi]
- mov r10,QWORD PTR[((-4))+rdi]
- mov r11,QWORD PTR[44+rdi]
-
- xor rcx,QWORD PTR[((-84))+rdi]
- xor rdx,QWORD PTR[((-76))+rdi]
- xor rax,r8
- xor rbx,QWORD PTR[((-92))+rdi]
- xor rcx,QWORD PTR[((-44))+rdi]
- xor rax,QWORD PTR[((-60))+rdi]
- mov r12,rbp
- xor rbp,QWORD PTR[((-68))+rdi]
-
- xor rcx,r10
- xor rax,QWORD PTR[((-20))+rdi]
- xor rdx,QWORD PTR[((-36))+rdi]
- xor rbx,r9
- xor rbp,QWORD PTR[((-28))+rdi]
-
- xor rcx,QWORD PTR[36+rdi]
- xor rax,QWORD PTR[20+rdi]
- xor rdx,QWORD PTR[4+rdi]
- xor rbx,QWORD PTR[((-12))+rdi]
- xor rbp,QWORD PTR[12+rdi]
-
- mov r13,rcx
- rol rcx,1
- xor rcx,rax
- xor rdx,r11
-
- rol rax,1
- xor rax,rdx
- xor rbx,QWORD PTR[28+rdi]
-
- rol rdx,1
- xor rdx,rbx
- xor rbp,QWORD PTR[52+rdi]
-
- rol rbx,1
- xor rbx,rbp
-
- rol rbp,1
- xor rbp,r13
- xor r9,rcx
- xor r10,rdx
- rol r9,44
- xor r11,rbp
- xor r12,rax
- rol r10,43
- xor r8,rbx
- mov r13,r9
- rol r11,21
- or r9,r10
- xor r9,r8
- rol r12,14
-
- xor r9,QWORD PTR[r15]
- lea r15,QWORD PTR[8+r15]
-
- mov r14,r12
- and r12,r11
- mov QWORD PTR[((-100))+rsi],r9
- xor r12,r10
- not r10
- mov QWORD PTR[((-84))+rsi],r12
-
- or r10,r11
- mov r12,QWORD PTR[76+rdi]
- xor r10,r13
- mov QWORD PTR[((-92))+rsi],r10
-
- and r13,r8
- mov r9,QWORD PTR[((-28))+rdi]
- xor r13,r14
- mov r10,QWORD PTR[((-20))+rdi]
- mov QWORD PTR[((-68))+rsi],r13
-
- or r14,r8
- mov r8,QWORD PTR[((-76))+rdi]
- xor r14,r11
- mov r11,QWORD PTR[28+rdi]
- mov QWORD PTR[((-76))+rsi],r14
-
-
- xor r8,rbp
- xor r12,rdx
- rol r8,28
- xor r11,rcx
- xor r9,rax
- rol r12,61
- rol r11,45
- xor r10,rbx
- rol r9,20
- mov r13,r8
- or r8,r12
- rol r10,3
-
- xor r8,r11
- mov QWORD PTR[((-36))+rsi],r8
-
- mov r14,r9
- and r9,r13
- mov r8,QWORD PTR[((-92))+rdi]
- xor r9,r12
- not r12
- mov QWORD PTR[((-28))+rsi],r9
-
- or r12,r11
- mov r9,QWORD PTR[((-44))+rdi]
- xor r12,r10
- mov QWORD PTR[((-44))+rsi],r12
-
- and r11,r10
- mov r12,QWORD PTR[60+rdi]
- xor r11,r14
- mov QWORD PTR[((-52))+rsi],r11
-
- or r14,r10
- mov r10,QWORD PTR[4+rdi]
- xor r14,r13
- mov r11,QWORD PTR[52+rdi]
- mov QWORD PTR[((-60))+rsi],r14
-
-
- xor r10,rbp
- xor r11,rax
- rol r10,25
- xor r9,rdx
- rol r11,8
- xor r12,rbx
- rol r9,6
- xor r8,rcx
- rol r12,18
- mov r13,r10
- and r10,r11
- rol r8,1
-
- not r11
- xor r10,r9
- mov QWORD PTR[((-12))+rsi],r10
-
- mov r14,r12
- and r12,r11
- mov r10,QWORD PTR[((-12))+rdi]
- xor r12,r13
- mov QWORD PTR[((-4))+rsi],r12
-
- or r13,r9
- mov r12,QWORD PTR[84+rdi]
- xor r13,r8
- mov QWORD PTR[((-20))+rsi],r13
-
- and r9,r8
- xor r9,r14
- mov QWORD PTR[12+rsi],r9
-
- or r14,r8
- mov r9,QWORD PTR[((-60))+rdi]
- xor r14,r11
- mov r11,QWORD PTR[36+rdi]
- mov QWORD PTR[4+rsi],r14
-
-
- mov r8,QWORD PTR[((-68))+rdi]
-
- xor r10,rcx
- xor r11,rdx
- rol r10,10
- xor r9,rbx
- rol r11,15
- xor r12,rbp
- rol r9,36
- xor r8,rax
- rol r12,56
- mov r13,r10
- or r10,r11
- rol r8,27
-
- not r11
- xor r10,r9
- mov QWORD PTR[28+rsi],r10
-
- mov r14,r12
- or r12,r11
- xor r12,r13
- mov QWORD PTR[36+rsi],r12
-
- and r13,r9
- xor r13,r8
- mov QWORD PTR[20+rsi],r13
-
- or r9,r8
- xor r9,r14
- mov QWORD PTR[52+rsi],r9
-
- and r8,r14
- xor r8,r11
- mov QWORD PTR[44+rsi],r8
-
-
- xor rdx,QWORD PTR[((-84))+rdi]
- xor rbp,QWORD PTR[((-36))+rdi]
- rol rdx,62
- xor rcx,QWORD PTR[68+rdi]
- rol rbp,55
- xor rax,QWORD PTR[12+rdi]
- rol rcx,2
- xor rbx,QWORD PTR[20+rdi]
- xchg rdi,rsi
- rol rax,39
- rol rbx,41
- mov r13,rdx
- and rdx,rbp
- not rbp
- xor rdx,rcx
- mov QWORD PTR[92+rdi],rdx
-
- mov r14,rax
- and rax,rbp
- xor rax,r13
- mov QWORD PTR[60+rdi],rax
-
- or r13,rcx
- xor r13,rbx
- mov QWORD PTR[84+rdi],r13
-
- and rcx,rbx
- xor rcx,r14
- mov QWORD PTR[76+rdi],rcx
-
- or rbx,r14
- xor rbx,rbp
- mov QWORD PTR[68+rdi],rbx
-
- mov rbp,rdx
- mov rdx,r13
-
- test r15,255
- jnz $L$oop
-
- lea r15,QWORD PTR[((-192))+r15]
- DB 0F3h,0C3h ;repret
-
-__KeccakF1600 ENDP
-
-
-ALIGN 32
-KeccakF1600 PROC PRIVATE
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- lea rdi,QWORD PTR[100+rdi]
- sub rsp,200
-
-
- not QWORD PTR[((-92))+rdi]
- not QWORD PTR[((-84))+rdi]
- not QWORD PTR[((-36))+rdi]
- not QWORD PTR[((-4))+rdi]
- not QWORD PTR[36+rdi]
- not QWORD PTR[60+rdi]
-
- lea r15,QWORD PTR[iotas]
- lea rsi,QWORD PTR[100+rsp]
-
- call __KeccakF1600
-
- not QWORD PTR[((-92))+rdi]
- not QWORD PTR[((-84))+rdi]
- not QWORD PTR[((-36))+rdi]
- not QWORD PTR[((-4))+rdi]
- not QWORD PTR[36+rdi]
- not QWORD PTR[60+rdi]
- lea rdi,QWORD PTR[((-100))+rdi]
-
- add rsp,200
-
-
- pop r15
-
- pop r14
-
- pop r13
-
- pop r12
-
- pop rbp
-
- pop rbx
-
- DB 0F3h,0C3h ;repret
-
-KeccakF1600 ENDP
-PUBLIC SHA3_absorb
-
-ALIGN 32
-SHA3_absorb PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_SHA3_absorb::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- lea rdi,QWORD PTR[100+rdi]
- sub rsp,232
-
-
- mov r9,rsi
- lea rsi,QWORD PTR[100+rsp]
-
- not QWORD PTR[((-92))+rdi]
- not QWORD PTR[((-84))+rdi]
- not QWORD PTR[((-36))+rdi]
- not QWORD PTR[((-4))+rdi]
- not QWORD PTR[36+rdi]
- not QWORD PTR[60+rdi]
- lea r15,QWORD PTR[iotas]
-
- mov QWORD PTR[((216-100))+rsi],rcx
-
-$L$oop_absorb::
- cmp rdx,rcx
- jc $L$done_absorb
-
- shr rcx,3
- lea r8,QWORD PTR[((-100))+rdi]
-
-$L$block_absorb::
- mov rax,QWORD PTR[r9]
- lea r9,QWORD PTR[8+r9]
- xor rax,QWORD PTR[r8]
- lea r8,QWORD PTR[8+r8]
- sub rdx,8
- mov QWORD PTR[((-8))+r8],rax
- sub rcx,1
- jnz $L$block_absorb
-
- mov QWORD PTR[((200-100))+rsi],r9
- mov QWORD PTR[((208-100))+rsi],rdx
- call __KeccakF1600
- mov r9,QWORD PTR[((200-100))+rsi]
- mov rdx,QWORD PTR[((208-100))+rsi]
- mov rcx,QWORD PTR[((216-100))+rsi]
- jmp $L$oop_absorb
-
-ALIGN 32
-$L$done_absorb::
- mov rax,rdx
-
- not QWORD PTR[((-92))+rdi]
- not QWORD PTR[((-84))+rdi]
- not QWORD PTR[((-36))+rdi]
- not QWORD PTR[((-4))+rdi]
- not QWORD PTR[36+rdi]
- not QWORD PTR[60+rdi]
-
- add rsp,232
-
-
- pop r15
-
- pop r14
-
- pop r13
-
- pop r12
-
- pop rbp
-
- pop rbx
-
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_SHA3_absorb::
-SHA3_absorb ENDP
-PUBLIC SHA3_squeeze
-
-ALIGN 32
-SHA3_squeeze PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_SHA3_squeeze::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
-
- push r12
-
- push r13
-
- push r14
-
-
- shr rcx,3
- mov r8,rdi
- mov r12,rsi
- mov r13,rdx
- mov r14,rcx
- jmp $L$oop_squeeze
-
-ALIGN 32
-$L$oop_squeeze::
- cmp r13,8
- jb $L$tail_squeeze
-
- mov rax,QWORD PTR[r8]
- lea r8,QWORD PTR[8+r8]
- mov QWORD PTR[r12],rax
- lea r12,QWORD PTR[8+r12]
- sub r13,8
- jz $L$done_squeeze
-
- sub rcx,1
- jnz $L$oop_squeeze
-
- call KeccakF1600
- mov r8,rdi
- mov rcx,r14
- jmp $L$oop_squeeze
-
-$L$tail_squeeze::
- mov rsi,r8
- mov rdi,r12
- mov rcx,r13
-DB 0f3h,0a4h
-
-$L$done_squeeze::
- pop r14
-
- pop r13
-
- pop r12
-
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_SHA3_squeeze::
-SHA3_squeeze ENDP
-ALIGN 256
- DQ 0,0,0,0,0,0,0,0
-
-iotas::
- DQ 00000000000000001h
- DQ 00000000000008082h
- DQ 0800000000000808ah
- DQ 08000000080008000h
- DQ 0000000000000808bh
- DQ 00000000080000001h
- DQ 08000000080008081h
- DQ 08000000000008009h
- DQ 0000000000000008ah
- DQ 00000000000000088h
- DQ 00000000080008009h
- DQ 0000000008000000ah
- DQ 0000000008000808bh
- DQ 0800000000000008bh
- DQ 08000000000008089h
- DQ 08000000000008003h
- DQ 08000000000008002h
- DQ 08000000000000080h
- DQ 0000000000000800ah
- DQ 0800000008000000ah
- DQ 08000000080008081h
- DQ 08000000000008080h
- DQ 00000000080000001h
- DQ 08000000080008008h
-
-DB 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111
-DB 114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102
-DB 111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84
-DB 79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64
-DB 111,112,101,110,115,115,108,46,111,114,103,62,0
-
-.text$ ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+
+ALIGN 32
+__KeccakF1600 PROC PRIVATE
+
+ mov rax,QWORD PTR[60+rdi]
+ mov rbx,QWORD PTR[68+rdi]
+ mov rcx,QWORD PTR[76+rdi]
+ mov rdx,QWORD PTR[84+rdi]
+ mov rbp,QWORD PTR[92+rdi]
+ jmp $L$oop
+
+ALIGN 32
+$L$oop::
+ mov r8,QWORD PTR[((-100))+rdi]
+ mov r9,QWORD PTR[((-52))+rdi]
+ mov r10,QWORD PTR[((-4))+rdi]
+ mov r11,QWORD PTR[44+rdi]
+
+ xor rcx,QWORD PTR[((-84))+rdi]
+ xor rdx,QWORD PTR[((-76))+rdi]
+ xor rax,r8
+ xor rbx,QWORD PTR[((-92))+rdi]
+ xor rcx,QWORD PTR[((-44))+rdi]
+ xor rax,QWORD PTR[((-60))+rdi]
+ mov r12,rbp
+ xor rbp,QWORD PTR[((-68))+rdi]
+
+ xor rcx,r10
+ xor rax,QWORD PTR[((-20))+rdi]
+ xor rdx,QWORD PTR[((-36))+rdi]
+ xor rbx,r9
+ xor rbp,QWORD PTR[((-28))+rdi]
+
+ xor rcx,QWORD PTR[36+rdi]
+ xor rax,QWORD PTR[20+rdi]
+ xor rdx,QWORD PTR[4+rdi]
+ xor rbx,QWORD PTR[((-12))+rdi]
+ xor rbp,QWORD PTR[12+rdi]
+
+ mov r13,rcx
+ rol rcx,1
+ xor rcx,rax
+ xor rdx,r11
+
+ rol rax,1
+ xor rax,rdx
+ xor rbx,QWORD PTR[28+rdi]
+
+ rol rdx,1
+ xor rdx,rbx
+ xor rbp,QWORD PTR[52+rdi]
+
+ rol rbx,1
+ xor rbx,rbp
+
+ rol rbp,1
+ xor rbp,r13
+ xor r9,rcx
+ xor r10,rdx
+ rol r9,44
+ xor r11,rbp
+ xor r12,rax
+ rol r10,43
+ xor r8,rbx
+ mov r13,r9
+ rol r11,21
+ or r9,r10
+ xor r9,r8
+ rol r12,14
+
+ xor r9,QWORD PTR[r15]
+ lea r15,QWORD PTR[8+r15]
+
+ mov r14,r12
+ and r12,r11
+ mov QWORD PTR[((-100))+rsi],r9
+ xor r12,r10
+ not r10
+ mov QWORD PTR[((-84))+rsi],r12
+
+ or r10,r11
+ mov r12,QWORD PTR[76+rdi]
+ xor r10,r13
+ mov QWORD PTR[((-92))+rsi],r10
+
+ and r13,r8
+ mov r9,QWORD PTR[((-28))+rdi]
+ xor r13,r14
+ mov r10,QWORD PTR[((-20))+rdi]
+ mov QWORD PTR[((-68))+rsi],r13
+
+ or r14,r8
+ mov r8,QWORD PTR[((-76))+rdi]
+ xor r14,r11
+ mov r11,QWORD PTR[28+rdi]
+ mov QWORD PTR[((-76))+rsi],r14
+
+
+ xor r8,rbp
+ xor r12,rdx
+ rol r8,28
+ xor r11,rcx
+ xor r9,rax
+ rol r12,61
+ rol r11,45
+ xor r10,rbx
+ rol r9,20
+ mov r13,r8
+ or r8,r12
+ rol r10,3
+
+ xor r8,r11
+ mov QWORD PTR[((-36))+rsi],r8
+
+ mov r14,r9
+ and r9,r13
+ mov r8,QWORD PTR[((-92))+rdi]
+ xor r9,r12
+ not r12
+ mov QWORD PTR[((-28))+rsi],r9
+
+ or r12,r11
+ mov r9,QWORD PTR[((-44))+rdi]
+ xor r12,r10
+ mov QWORD PTR[((-44))+rsi],r12
+
+ and r11,r10
+ mov r12,QWORD PTR[60+rdi]
+ xor r11,r14
+ mov QWORD PTR[((-52))+rsi],r11
+
+ or r14,r10
+ mov r10,QWORD PTR[4+rdi]
+ xor r14,r13
+ mov r11,QWORD PTR[52+rdi]
+ mov QWORD PTR[((-60))+rsi],r14
+
+
+ xor r10,rbp
+ xor r11,rax
+ rol r10,25
+ xor r9,rdx
+ rol r11,8
+ xor r12,rbx
+ rol r9,6
+ xor r8,rcx
+ rol r12,18
+ mov r13,r10
+ and r10,r11
+ rol r8,1
+
+ not r11
+ xor r10,r9
+ mov QWORD PTR[((-12))+rsi],r10
+
+ mov r14,r12
+ and r12,r11
+ mov r10,QWORD PTR[((-12))+rdi]
+ xor r12,r13
+ mov QWORD PTR[((-4))+rsi],r12
+
+ or r13,r9
+ mov r12,QWORD PTR[84+rdi]
+ xor r13,r8
+ mov QWORD PTR[((-20))+rsi],r13
+
+ and r9,r8
+ xor r9,r14
+ mov QWORD PTR[12+rsi],r9
+
+ or r14,r8
+ mov r9,QWORD PTR[((-60))+rdi]
+ xor r14,r11
+ mov r11,QWORD PTR[36+rdi]
+ mov QWORD PTR[4+rsi],r14
+
+
+ mov r8,QWORD PTR[((-68))+rdi]
+
+ xor r10,rcx
+ xor r11,rdx
+ rol r10,10
+ xor r9,rbx
+ rol r11,15
+ xor r12,rbp
+ rol r9,36
+ xor r8,rax
+ rol r12,56
+ mov r13,r10
+ or r10,r11
+ rol r8,27
+
+ not r11
+ xor r10,r9
+ mov QWORD PTR[28+rsi],r10
+
+ mov r14,r12
+ or r12,r11
+ xor r12,r13
+ mov QWORD PTR[36+rsi],r12
+
+ and r13,r9
+ xor r13,r8
+ mov QWORD PTR[20+rsi],r13
+
+ or r9,r8
+ xor r9,r14
+ mov QWORD PTR[52+rsi],r9
+
+ and r8,r14
+ xor r8,r11
+ mov QWORD PTR[44+rsi],r8
+
+
+ xor rdx,QWORD PTR[((-84))+rdi]
+ xor rbp,QWORD PTR[((-36))+rdi]
+ rol rdx,62
+ xor rcx,QWORD PTR[68+rdi]
+ rol rbp,55
+ xor rax,QWORD PTR[12+rdi]
+ rol rcx,2
+ xor rbx,QWORD PTR[20+rdi]
+ xchg rdi,rsi
+ rol rax,39
+ rol rbx,41
+ mov r13,rdx
+ and rdx,rbp
+ not rbp
+ xor rdx,rcx
+ mov QWORD PTR[92+rdi],rdx
+
+ mov r14,rax
+ and rax,rbp
+ xor rax,r13
+ mov QWORD PTR[60+rdi],rax
+
+ or r13,rcx
+ xor r13,rbx
+ mov QWORD PTR[84+rdi],r13
+
+ and rcx,rbx
+ xor rcx,r14
+ mov QWORD PTR[76+rdi],rcx
+
+ or rbx,r14
+ xor rbx,rbp
+ mov QWORD PTR[68+rdi],rbx
+
+ mov rbp,rdx
+ mov rdx,r13
+
+ test r15,255
+ jnz $L$oop
+
+ lea r15,QWORD PTR[((-192))+r15]
+ DB 0F3h,0C3h ;repret
+
+__KeccakF1600 ENDP
+
+
+ALIGN 32
+KeccakF1600 PROC PRIVATE
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ lea rdi,QWORD PTR[100+rdi]
+ sub rsp,200
+
+
+ not QWORD PTR[((-92))+rdi]
+ not QWORD PTR[((-84))+rdi]
+ not QWORD PTR[((-36))+rdi]
+ not QWORD PTR[((-4))+rdi]
+ not QWORD PTR[36+rdi]
+ not QWORD PTR[60+rdi]
+
+ lea r15,QWORD PTR[iotas]
+ lea rsi,QWORD PTR[100+rsp]
+
+ call __KeccakF1600
+
+ not QWORD PTR[((-92))+rdi]
+ not QWORD PTR[((-84))+rdi]
+ not QWORD PTR[((-36))+rdi]
+ not QWORD PTR[((-4))+rdi]
+ not QWORD PTR[36+rdi]
+ not QWORD PTR[60+rdi]
+ lea rdi,QWORD PTR[((-100))+rdi]
+
+ add rsp,200
+
+
+ pop r15
+
+ pop r14
+
+ pop r13
+
+ pop r12
+
+ pop rbp
+
+ pop rbx
+
+ DB 0F3h,0C3h ;repret
+
+KeccakF1600 ENDP
+PUBLIC SHA3_absorb
+
+ALIGN 32
+SHA3_absorb PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_SHA3_absorb::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ lea rdi,QWORD PTR[100+rdi]
+ sub rsp,232
+
+
+ mov r9,rsi
+ lea rsi,QWORD PTR[100+rsp]
+
+ not QWORD PTR[((-92))+rdi]
+ not QWORD PTR[((-84))+rdi]
+ not QWORD PTR[((-36))+rdi]
+ not QWORD PTR[((-4))+rdi]
+ not QWORD PTR[36+rdi]
+ not QWORD PTR[60+rdi]
+ lea r15,QWORD PTR[iotas]
+
+ mov QWORD PTR[((216-100))+rsi],rcx
+
+$L$oop_absorb::
+ cmp rdx,rcx
+ jc $L$done_absorb
+
+ shr rcx,3
+ lea r8,QWORD PTR[((-100))+rdi]
+
+$L$block_absorb::
+ mov rax,QWORD PTR[r9]
+ lea r9,QWORD PTR[8+r9]
+ xor rax,QWORD PTR[r8]
+ lea r8,QWORD PTR[8+r8]
+ sub rdx,8
+ mov QWORD PTR[((-8))+r8],rax
+ sub rcx,1
+ jnz $L$block_absorb
+
+ mov QWORD PTR[((200-100))+rsi],r9
+ mov QWORD PTR[((208-100))+rsi],rdx
+ call __KeccakF1600
+ mov r9,QWORD PTR[((200-100))+rsi]
+ mov rdx,QWORD PTR[((208-100))+rsi]
+ mov rcx,QWORD PTR[((216-100))+rsi]
+ jmp $L$oop_absorb
+
+ALIGN 32
+$L$done_absorb::
+ mov rax,rdx
+
+ not QWORD PTR[((-92))+rdi]
+ not QWORD PTR[((-84))+rdi]
+ not QWORD PTR[((-36))+rdi]
+ not QWORD PTR[((-4))+rdi]
+ not QWORD PTR[36+rdi]
+ not QWORD PTR[60+rdi]
+
+ add rsp,232
+
+
+ pop r15
+
+ pop r14
+
+ pop r13
+
+ pop r12
+
+ pop rbp
+
+ pop rbx
+
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_SHA3_absorb::
+SHA3_absorb ENDP
+PUBLIC SHA3_squeeze
+
+ALIGN 32
+SHA3_squeeze PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_SHA3_squeeze::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+
+ push r12
+
+ push r13
+
+ push r14
+
+
+ shr rcx,3
+ mov r8,rdi
+ mov r12,rsi
+ mov r13,rdx
+ mov r14,rcx
+ jmp $L$oop_squeeze
+
+ALIGN 32
+$L$oop_squeeze::
+ cmp r13,8
+ jb $L$tail_squeeze
+
+ mov rax,QWORD PTR[r8]
+ lea r8,QWORD PTR[8+r8]
+ mov QWORD PTR[r12],rax
+ lea r12,QWORD PTR[8+r12]
+ sub r13,8
+ jz $L$done_squeeze
+
+ sub rcx,1
+ jnz $L$oop_squeeze
+
+ call KeccakF1600
+ mov r8,rdi
+ mov rcx,r14
+ jmp $L$oop_squeeze
+
+$L$tail_squeeze::
+ mov rsi,r8
+ mov rdi,r12
+ mov rcx,r13
+DB 0f3h,0a4h
+
+$L$done_squeeze::
+ pop r14
+
+ pop r13
+
+ pop r12
+
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_SHA3_squeeze::
+SHA3_squeeze ENDP
+ALIGN 256
+ DQ 0,0,0,0,0,0,0,0
+
+iotas::
+ DQ 00000000000000001h
+ DQ 00000000000008082h
+ DQ 0800000000000808ah
+ DQ 08000000080008000h
+ DQ 0000000000000808bh
+ DQ 00000000080000001h
+ DQ 08000000080008081h
+ DQ 08000000000008009h
+ DQ 0000000000000008ah
+ DQ 00000000000000088h
+ DQ 00000000080008009h
+ DQ 0000000008000000ah
+ DQ 0000000008000808bh
+ DQ 0800000000000008bh
+ DQ 08000000000008089h
+ DQ 08000000000008003h
+ DQ 08000000000008002h
+ DQ 08000000000000080h
+ DQ 0000000000000800ah
+ DQ 0800000008000000ah
+ DQ 08000000080008081h
+ DQ 08000000000008080h
+ DQ 00000000080000001h
+ DQ 08000000080008008h
+
+DB 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111
+DB 114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102
+DB 111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84
+DB 79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64
+DB 111,112,101,110,115,115,108,46,111,114,103,62,0
+
+.text$ ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/sha/sha1-586.masm b/contrib/libs/openssl/asm/windows/crypto/sha/sha1-586.masm
index 6970eab063..9cbefb962b 100644
--- a/contrib/libs/openssl/asm/windows/crypto/sha/sha1-586.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/sha/sha1-586.masm
@@ -1,3986 +1,3986 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-;EXTERN _OPENSSL_ia32cap_P:NEAR
-ALIGN 16
-_sha1_block_data_order PROC PUBLIC
-$L_sha1_block_data_order_begin::
- push ebp
- push ebx
- push esi
- push edi
- call $L000pic_point
-$L000pic_point:
- pop ebp
- lea esi,DWORD PTR _OPENSSL_ia32cap_P
- lea ebp,DWORD PTR ($LK_XX_XX-$L000pic_point)[ebp]
- mov eax,DWORD PTR [esi]
- mov edx,DWORD PTR 4[esi]
- test edx,512
- jz $L001x86
- mov ecx,DWORD PTR 8[esi]
- test eax,16777216
- jz $L001x86
- test ecx,536870912
- jnz $Lshaext_shortcut
- and edx,268435456
- and eax,1073741824
- or eax,edx
- cmp eax,1342177280
- je $Lavx_shortcut
- jmp $Lssse3_shortcut
-ALIGN 16
-$L001x86:
- mov ebp,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- sub esp,76
- shl eax,6
- add eax,esi
- mov DWORD PTR 104[esp],eax
- mov edi,DWORD PTR 16[ebp]
- jmp $L002loop
-ALIGN 16
-$L002loop:
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov edx,DWORD PTR 12[esi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],ebx
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 12[esp],edx
- mov eax,DWORD PTR 16[esi]
- mov ebx,DWORD PTR 20[esi]
- mov ecx,DWORD PTR 24[esi]
- mov edx,DWORD PTR 28[esi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- mov DWORD PTR 16[esp],eax
- mov DWORD PTR 20[esp],ebx
- mov DWORD PTR 24[esp],ecx
- mov DWORD PTR 28[esp],edx
- mov eax,DWORD PTR 32[esi]
- mov ebx,DWORD PTR 36[esi]
- mov ecx,DWORD PTR 40[esi]
- mov edx,DWORD PTR 44[esi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- mov DWORD PTR 32[esp],eax
- mov DWORD PTR 36[esp],ebx
- mov DWORD PTR 40[esp],ecx
- mov DWORD PTR 44[esp],edx
- mov eax,DWORD PTR 48[esi]
- mov ebx,DWORD PTR 52[esi]
- mov ecx,DWORD PTR 56[esi]
- mov edx,DWORD PTR 60[esi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- mov DWORD PTR 48[esp],eax
- mov DWORD PTR 52[esp],ebx
- mov DWORD PTR 56[esp],ecx
- mov DWORD PTR 60[esp],edx
- mov DWORD PTR 100[esp],esi
- mov eax,DWORD PTR [ebp]
- mov ebx,DWORD PTR 4[ebp]
- mov ecx,DWORD PTR 8[ebp]
- mov edx,DWORD PTR 12[ebp]
- ; 00_15 0
- mov esi,ecx
- mov ebp,eax
- rol ebp,5
- xor esi,edx
- add ebp,edi
- mov edi,DWORD PTR [esp]
- and esi,ebx
- ror ebx,2
- xor esi,edx
- lea ebp,DWORD PTR 1518500249[edi*1+ebp]
- add ebp,esi
- ; 00_15 1
- mov edi,ebx
- mov esi,ebp
- rol ebp,5
- xor edi,ecx
- add ebp,edx
- mov edx,DWORD PTR 4[esp]
- and edi,eax
- ror eax,2
- xor edi,ecx
- lea ebp,DWORD PTR 1518500249[edx*1+ebp]
- add ebp,edi
- ; 00_15 2
- mov edx,eax
- mov edi,ebp
- rol ebp,5
- xor edx,ebx
- add ebp,ecx
- mov ecx,DWORD PTR 8[esp]
- and edx,esi
- ror esi,2
- xor edx,ebx
- lea ebp,DWORD PTR 1518500249[ecx*1+ebp]
- add ebp,edx
- ; 00_15 3
- mov ecx,esi
- mov edx,ebp
- rol ebp,5
- xor ecx,eax
- add ebp,ebx
- mov ebx,DWORD PTR 12[esp]
- and ecx,edi
- ror edi,2
- xor ecx,eax
- lea ebp,DWORD PTR 1518500249[ebx*1+ebp]
- add ebp,ecx
- ; 00_15 4
- mov ebx,edi
- mov ecx,ebp
- rol ebp,5
- xor ebx,esi
- add ebp,eax
- mov eax,DWORD PTR 16[esp]
- and ebx,edx
- ror edx,2
- xor ebx,esi
- lea ebp,DWORD PTR 1518500249[eax*1+ebp]
- add ebp,ebx
- ; 00_15 5
- mov eax,edx
- mov ebx,ebp
- rol ebp,5
- xor eax,edi
- add ebp,esi
- mov esi,DWORD PTR 20[esp]
- and eax,ecx
- ror ecx,2
- xor eax,edi
- lea ebp,DWORD PTR 1518500249[esi*1+ebp]
- add ebp,eax
- ; 00_15 6
- mov esi,ecx
- mov eax,ebp
- rol ebp,5
- xor esi,edx
- add ebp,edi
- mov edi,DWORD PTR 24[esp]
- and esi,ebx
- ror ebx,2
- xor esi,edx
- lea ebp,DWORD PTR 1518500249[edi*1+ebp]
- add ebp,esi
- ; 00_15 7
- mov edi,ebx
- mov esi,ebp
- rol ebp,5
- xor edi,ecx
- add ebp,edx
- mov edx,DWORD PTR 28[esp]
- and edi,eax
- ror eax,2
- xor edi,ecx
- lea ebp,DWORD PTR 1518500249[edx*1+ebp]
- add ebp,edi
- ; 00_15 8
- mov edx,eax
- mov edi,ebp
- rol ebp,5
- xor edx,ebx
- add ebp,ecx
- mov ecx,DWORD PTR 32[esp]
- and edx,esi
- ror esi,2
- xor edx,ebx
- lea ebp,DWORD PTR 1518500249[ecx*1+ebp]
- add ebp,edx
- ; 00_15 9
- mov ecx,esi
- mov edx,ebp
- rol ebp,5
- xor ecx,eax
- add ebp,ebx
- mov ebx,DWORD PTR 36[esp]
- and ecx,edi
- ror edi,2
- xor ecx,eax
- lea ebp,DWORD PTR 1518500249[ebx*1+ebp]
- add ebp,ecx
- ; 00_15 10
- mov ebx,edi
- mov ecx,ebp
- rol ebp,5
- xor ebx,esi
- add ebp,eax
- mov eax,DWORD PTR 40[esp]
- and ebx,edx
- ror edx,2
- xor ebx,esi
- lea ebp,DWORD PTR 1518500249[eax*1+ebp]
- add ebp,ebx
- ; 00_15 11
- mov eax,edx
- mov ebx,ebp
- rol ebp,5
- xor eax,edi
- add ebp,esi
- mov esi,DWORD PTR 44[esp]
- and eax,ecx
- ror ecx,2
- xor eax,edi
- lea ebp,DWORD PTR 1518500249[esi*1+ebp]
- add ebp,eax
- ; 00_15 12
- mov esi,ecx
- mov eax,ebp
- rol ebp,5
- xor esi,edx
- add ebp,edi
- mov edi,DWORD PTR 48[esp]
- and esi,ebx
- ror ebx,2
- xor esi,edx
- lea ebp,DWORD PTR 1518500249[edi*1+ebp]
- add ebp,esi
- ; 00_15 13
- mov edi,ebx
- mov esi,ebp
- rol ebp,5
- xor edi,ecx
- add ebp,edx
- mov edx,DWORD PTR 52[esp]
- and edi,eax
- ror eax,2
- xor edi,ecx
- lea ebp,DWORD PTR 1518500249[edx*1+ebp]
- add ebp,edi
- ; 00_15 14
- mov edx,eax
- mov edi,ebp
- rol ebp,5
- xor edx,ebx
- add ebp,ecx
- mov ecx,DWORD PTR 56[esp]
- and edx,esi
- ror esi,2
- xor edx,ebx
- lea ebp,DWORD PTR 1518500249[ecx*1+ebp]
- add ebp,edx
- ; 00_15 15
- mov ecx,esi
- mov edx,ebp
- rol ebp,5
- xor ecx,eax
- add ebp,ebx
- mov ebx,DWORD PTR 60[esp]
- and ecx,edi
- ror edi,2
- xor ecx,eax
- lea ebp,DWORD PTR 1518500249[ebx*1+ebp]
- mov ebx,DWORD PTR [esp]
- add ecx,ebp
- ; 16_19 16
- mov ebp,edi
- xor ebx,DWORD PTR 8[esp]
- xor ebp,esi
- xor ebx,DWORD PTR 32[esp]
- and ebp,edx
- xor ebx,DWORD PTR 52[esp]
- rol ebx,1
- xor ebp,esi
- add eax,ebp
- mov ebp,ecx
- ror edx,2
- mov DWORD PTR [esp],ebx
- rol ebp,5
- lea ebx,DWORD PTR 1518500249[eax*1+ebx]
- mov eax,DWORD PTR 4[esp]
- add ebx,ebp
- ; 16_19 17
- mov ebp,edx
- xor eax,DWORD PTR 12[esp]
- xor ebp,edi
- xor eax,DWORD PTR 36[esp]
- and ebp,ecx
- xor eax,DWORD PTR 56[esp]
- rol eax,1
- xor ebp,edi
- add esi,ebp
- mov ebp,ebx
- ror ecx,2
- mov DWORD PTR 4[esp],eax
- rol ebp,5
- lea eax,DWORD PTR 1518500249[esi*1+eax]
- mov esi,DWORD PTR 8[esp]
- add eax,ebp
- ; 16_19 18
- mov ebp,ecx
- xor esi,DWORD PTR 16[esp]
- xor ebp,edx
- xor esi,DWORD PTR 40[esp]
- and ebp,ebx
- xor esi,DWORD PTR 60[esp]
- rol esi,1
- xor ebp,edx
- add edi,ebp
- mov ebp,eax
- ror ebx,2
- mov DWORD PTR 8[esp],esi
- rol ebp,5
- lea esi,DWORD PTR 1518500249[edi*1+esi]
- mov edi,DWORD PTR 12[esp]
- add esi,ebp
- ; 16_19 19
- mov ebp,ebx
- xor edi,DWORD PTR 20[esp]
- xor ebp,ecx
- xor edi,DWORD PTR 44[esp]
- and ebp,eax
- xor edi,DWORD PTR [esp]
- rol edi,1
- xor ebp,ecx
- add edx,ebp
- mov ebp,esi
- ror eax,2
- mov DWORD PTR 12[esp],edi
- rol ebp,5
- lea edi,DWORD PTR 1518500249[edx*1+edi]
- mov edx,DWORD PTR 16[esp]
- add edi,ebp
- ; 20_39 20
- mov ebp,esi
- xor edx,DWORD PTR 24[esp]
- xor ebp,eax
- xor edx,DWORD PTR 48[esp]
- xor ebp,ebx
- xor edx,DWORD PTR 4[esp]
- rol edx,1
- add ecx,ebp
- ror esi,2
- mov ebp,edi
- rol ebp,5
- mov DWORD PTR 16[esp],edx
- lea edx,DWORD PTR 1859775393[ecx*1+edx]
- mov ecx,DWORD PTR 20[esp]
- add edx,ebp
- ; 20_39 21
- mov ebp,edi
- xor ecx,DWORD PTR 28[esp]
- xor ebp,esi
- xor ecx,DWORD PTR 52[esp]
- xor ebp,eax
- xor ecx,DWORD PTR 8[esp]
- rol ecx,1
- add ebx,ebp
- ror edi,2
- mov ebp,edx
- rol ebp,5
- mov DWORD PTR 20[esp],ecx
- lea ecx,DWORD PTR 1859775393[ebx*1+ecx]
- mov ebx,DWORD PTR 24[esp]
- add ecx,ebp
- ; 20_39 22
- mov ebp,edx
- xor ebx,DWORD PTR 32[esp]
- xor ebp,edi
- xor ebx,DWORD PTR 56[esp]
- xor ebp,esi
- xor ebx,DWORD PTR 12[esp]
- rol ebx,1
- add eax,ebp
- ror edx,2
- mov ebp,ecx
- rol ebp,5
- mov DWORD PTR 24[esp],ebx
- lea ebx,DWORD PTR 1859775393[eax*1+ebx]
- mov eax,DWORD PTR 28[esp]
- add ebx,ebp
- ; 20_39 23
- mov ebp,ecx
- xor eax,DWORD PTR 36[esp]
- xor ebp,edx
- xor eax,DWORD PTR 60[esp]
- xor ebp,edi
- xor eax,DWORD PTR 16[esp]
- rol eax,1
- add esi,ebp
- ror ecx,2
- mov ebp,ebx
- rol ebp,5
- mov DWORD PTR 28[esp],eax
- lea eax,DWORD PTR 1859775393[esi*1+eax]
- mov esi,DWORD PTR 32[esp]
- add eax,ebp
- ; 20_39 24
- mov ebp,ebx
- xor esi,DWORD PTR 40[esp]
- xor ebp,ecx
- xor esi,DWORD PTR [esp]
- xor ebp,edx
- xor esi,DWORD PTR 20[esp]
- rol esi,1
- add edi,ebp
- ror ebx,2
- mov ebp,eax
- rol ebp,5
- mov DWORD PTR 32[esp],esi
- lea esi,DWORD PTR 1859775393[edi*1+esi]
- mov edi,DWORD PTR 36[esp]
- add esi,ebp
- ; 20_39 25
- mov ebp,eax
- xor edi,DWORD PTR 44[esp]
- xor ebp,ebx
- xor edi,DWORD PTR 4[esp]
- xor ebp,ecx
- xor edi,DWORD PTR 24[esp]
- rol edi,1
- add edx,ebp
- ror eax,2
- mov ebp,esi
- rol ebp,5
- mov DWORD PTR 36[esp],edi
- lea edi,DWORD PTR 1859775393[edx*1+edi]
- mov edx,DWORD PTR 40[esp]
- add edi,ebp
- ; 20_39 26
- mov ebp,esi
- xor edx,DWORD PTR 48[esp]
- xor ebp,eax
- xor edx,DWORD PTR 8[esp]
- xor ebp,ebx
- xor edx,DWORD PTR 28[esp]
- rol edx,1
- add ecx,ebp
- ror esi,2
- mov ebp,edi
- rol ebp,5
- mov DWORD PTR 40[esp],edx
- lea edx,DWORD PTR 1859775393[ecx*1+edx]
- mov ecx,DWORD PTR 44[esp]
- add edx,ebp
- ; 20_39 27
- mov ebp,edi
- xor ecx,DWORD PTR 52[esp]
- xor ebp,esi
- xor ecx,DWORD PTR 12[esp]
- xor ebp,eax
- xor ecx,DWORD PTR 32[esp]
- rol ecx,1
- add ebx,ebp
- ror edi,2
- mov ebp,edx
- rol ebp,5
- mov DWORD PTR 44[esp],ecx
- lea ecx,DWORD PTR 1859775393[ebx*1+ecx]
- mov ebx,DWORD PTR 48[esp]
- add ecx,ebp
- ; 20_39 28
- mov ebp,edx
- xor ebx,DWORD PTR 56[esp]
- xor ebp,edi
- xor ebx,DWORD PTR 16[esp]
- xor ebp,esi
- xor ebx,DWORD PTR 36[esp]
- rol ebx,1
- add eax,ebp
- ror edx,2
- mov ebp,ecx
- rol ebp,5
- mov DWORD PTR 48[esp],ebx
- lea ebx,DWORD PTR 1859775393[eax*1+ebx]
- mov eax,DWORD PTR 52[esp]
- add ebx,ebp
- ; 20_39 29
- mov ebp,ecx
- xor eax,DWORD PTR 60[esp]
- xor ebp,edx
- xor eax,DWORD PTR 20[esp]
- xor ebp,edi
- xor eax,DWORD PTR 40[esp]
- rol eax,1
- add esi,ebp
- ror ecx,2
- mov ebp,ebx
- rol ebp,5
- mov DWORD PTR 52[esp],eax
- lea eax,DWORD PTR 1859775393[esi*1+eax]
- mov esi,DWORD PTR 56[esp]
- add eax,ebp
- ; 20_39 30
- mov ebp,ebx
- xor esi,DWORD PTR [esp]
- xor ebp,ecx
- xor esi,DWORD PTR 24[esp]
- xor ebp,edx
- xor esi,DWORD PTR 44[esp]
- rol esi,1
- add edi,ebp
- ror ebx,2
- mov ebp,eax
- rol ebp,5
- mov DWORD PTR 56[esp],esi
- lea esi,DWORD PTR 1859775393[edi*1+esi]
- mov edi,DWORD PTR 60[esp]
- add esi,ebp
- ; 20_39 31
- mov ebp,eax
- xor edi,DWORD PTR 4[esp]
- xor ebp,ebx
- xor edi,DWORD PTR 28[esp]
- xor ebp,ecx
- xor edi,DWORD PTR 48[esp]
- rol edi,1
- add edx,ebp
- ror eax,2
- mov ebp,esi
- rol ebp,5
- mov DWORD PTR 60[esp],edi
- lea edi,DWORD PTR 1859775393[edx*1+edi]
- mov edx,DWORD PTR [esp]
- add edi,ebp
- ; 20_39 32
- mov ebp,esi
- xor edx,DWORD PTR 8[esp]
- xor ebp,eax
- xor edx,DWORD PTR 32[esp]
- xor ebp,ebx
- xor edx,DWORD PTR 52[esp]
- rol edx,1
- add ecx,ebp
- ror esi,2
- mov ebp,edi
- rol ebp,5
- mov DWORD PTR [esp],edx
- lea edx,DWORD PTR 1859775393[ecx*1+edx]
- mov ecx,DWORD PTR 4[esp]
- add edx,ebp
- ; 20_39 33
- mov ebp,edi
- xor ecx,DWORD PTR 12[esp]
- xor ebp,esi
- xor ecx,DWORD PTR 36[esp]
- xor ebp,eax
- xor ecx,DWORD PTR 56[esp]
- rol ecx,1
- add ebx,ebp
- ror edi,2
- mov ebp,edx
- rol ebp,5
- mov DWORD PTR 4[esp],ecx
- lea ecx,DWORD PTR 1859775393[ebx*1+ecx]
- mov ebx,DWORD PTR 8[esp]
- add ecx,ebp
- ; 20_39 34
- mov ebp,edx
- xor ebx,DWORD PTR 16[esp]
- xor ebp,edi
- xor ebx,DWORD PTR 40[esp]
- xor ebp,esi
- xor ebx,DWORD PTR 60[esp]
- rol ebx,1
- add eax,ebp
- ror edx,2
- mov ebp,ecx
- rol ebp,5
- mov DWORD PTR 8[esp],ebx
- lea ebx,DWORD PTR 1859775393[eax*1+ebx]
- mov eax,DWORD PTR 12[esp]
- add ebx,ebp
- ; 20_39 35
- mov ebp,ecx
- xor eax,DWORD PTR 20[esp]
- xor ebp,edx
- xor eax,DWORD PTR 44[esp]
- xor ebp,edi
- xor eax,DWORD PTR [esp]
- rol eax,1
- add esi,ebp
- ror ecx,2
- mov ebp,ebx
- rol ebp,5
- mov DWORD PTR 12[esp],eax
- lea eax,DWORD PTR 1859775393[esi*1+eax]
- mov esi,DWORD PTR 16[esp]
- add eax,ebp
- ; 20_39 36
- mov ebp,ebx
- xor esi,DWORD PTR 24[esp]
- xor ebp,ecx
- xor esi,DWORD PTR 48[esp]
- xor ebp,edx
- xor esi,DWORD PTR 4[esp]
- rol esi,1
- add edi,ebp
- ror ebx,2
- mov ebp,eax
- rol ebp,5
- mov DWORD PTR 16[esp],esi
- lea esi,DWORD PTR 1859775393[edi*1+esi]
- mov edi,DWORD PTR 20[esp]
- add esi,ebp
- ; 20_39 37
- mov ebp,eax
- xor edi,DWORD PTR 28[esp]
- xor ebp,ebx
- xor edi,DWORD PTR 52[esp]
- xor ebp,ecx
- xor edi,DWORD PTR 8[esp]
- rol edi,1
- add edx,ebp
- ror eax,2
- mov ebp,esi
- rol ebp,5
- mov DWORD PTR 20[esp],edi
- lea edi,DWORD PTR 1859775393[edx*1+edi]
- mov edx,DWORD PTR 24[esp]
- add edi,ebp
- ; 20_39 38
- mov ebp,esi
- xor edx,DWORD PTR 32[esp]
- xor ebp,eax
- xor edx,DWORD PTR 56[esp]
- xor ebp,ebx
- xor edx,DWORD PTR 12[esp]
- rol edx,1
- add ecx,ebp
- ror esi,2
- mov ebp,edi
- rol ebp,5
- mov DWORD PTR 24[esp],edx
- lea edx,DWORD PTR 1859775393[ecx*1+edx]
- mov ecx,DWORD PTR 28[esp]
- add edx,ebp
- ; 20_39 39
- mov ebp,edi
- xor ecx,DWORD PTR 36[esp]
- xor ebp,esi
- xor ecx,DWORD PTR 60[esp]
- xor ebp,eax
- xor ecx,DWORD PTR 16[esp]
- rol ecx,1
- add ebx,ebp
- ror edi,2
- mov ebp,edx
- rol ebp,5
- mov DWORD PTR 28[esp],ecx
- lea ecx,DWORD PTR 1859775393[ebx*1+ecx]
- mov ebx,DWORD PTR 32[esp]
- add ecx,ebp
- ; 40_59 40
- mov ebp,edi
- xor ebx,DWORD PTR 40[esp]
- xor ebp,esi
- xor ebx,DWORD PTR [esp]
- and ebp,edx
- xor ebx,DWORD PTR 20[esp]
- rol ebx,1
- add ebp,eax
- ror edx,2
- mov eax,ecx
- rol eax,5
- mov DWORD PTR 32[esp],ebx
- lea ebx,DWORD PTR 2400959708[ebp*1+ebx]
- mov ebp,edi
- add ebx,eax
- and ebp,esi
- mov eax,DWORD PTR 36[esp]
- add ebx,ebp
- ; 40_59 41
- mov ebp,edx
- xor eax,DWORD PTR 44[esp]
- xor ebp,edi
- xor eax,DWORD PTR 4[esp]
- and ebp,ecx
- xor eax,DWORD PTR 24[esp]
- rol eax,1
- add ebp,esi
- ror ecx,2
- mov esi,ebx
- rol esi,5
- mov DWORD PTR 36[esp],eax
- lea eax,DWORD PTR 2400959708[ebp*1+eax]
- mov ebp,edx
- add eax,esi
- and ebp,edi
- mov esi,DWORD PTR 40[esp]
- add eax,ebp
- ; 40_59 42
- mov ebp,ecx
- xor esi,DWORD PTR 48[esp]
- xor ebp,edx
- xor esi,DWORD PTR 8[esp]
- and ebp,ebx
- xor esi,DWORD PTR 28[esp]
- rol esi,1
- add ebp,edi
- ror ebx,2
- mov edi,eax
- rol edi,5
- mov DWORD PTR 40[esp],esi
- lea esi,DWORD PTR 2400959708[ebp*1+esi]
- mov ebp,ecx
- add esi,edi
- and ebp,edx
- mov edi,DWORD PTR 44[esp]
- add esi,ebp
- ; 40_59 43
- mov ebp,ebx
- xor edi,DWORD PTR 52[esp]
- xor ebp,ecx
- xor edi,DWORD PTR 12[esp]
- and ebp,eax
- xor edi,DWORD PTR 32[esp]
- rol edi,1
- add ebp,edx
- ror eax,2
- mov edx,esi
- rol edx,5
- mov DWORD PTR 44[esp],edi
- lea edi,DWORD PTR 2400959708[ebp*1+edi]
- mov ebp,ebx
- add edi,edx
- and ebp,ecx
- mov edx,DWORD PTR 48[esp]
- add edi,ebp
- ; 40_59 44
- mov ebp,eax
- xor edx,DWORD PTR 56[esp]
- xor ebp,ebx
- xor edx,DWORD PTR 16[esp]
- and ebp,esi
- xor edx,DWORD PTR 36[esp]
- rol edx,1
- add ebp,ecx
- ror esi,2
- mov ecx,edi
- rol ecx,5
- mov DWORD PTR 48[esp],edx
- lea edx,DWORD PTR 2400959708[ebp*1+edx]
- mov ebp,eax
- add edx,ecx
- and ebp,ebx
- mov ecx,DWORD PTR 52[esp]
- add edx,ebp
- ; 40_59 45
- mov ebp,esi
- xor ecx,DWORD PTR 60[esp]
- xor ebp,eax
- xor ecx,DWORD PTR 20[esp]
- and ebp,edi
- xor ecx,DWORD PTR 40[esp]
- rol ecx,1
- add ebp,ebx
- ror edi,2
- mov ebx,edx
- rol ebx,5
- mov DWORD PTR 52[esp],ecx
- lea ecx,DWORD PTR 2400959708[ebp*1+ecx]
- mov ebp,esi
- add ecx,ebx
- and ebp,eax
- mov ebx,DWORD PTR 56[esp]
- add ecx,ebp
- ; 40_59 46
- mov ebp,edi
- xor ebx,DWORD PTR [esp]
- xor ebp,esi
- xor ebx,DWORD PTR 24[esp]
- and ebp,edx
- xor ebx,DWORD PTR 44[esp]
- rol ebx,1
- add ebp,eax
- ror edx,2
- mov eax,ecx
- rol eax,5
- mov DWORD PTR 56[esp],ebx
- lea ebx,DWORD PTR 2400959708[ebp*1+ebx]
- mov ebp,edi
- add ebx,eax
- and ebp,esi
- mov eax,DWORD PTR 60[esp]
- add ebx,ebp
- ; 40_59 47
- mov ebp,edx
- xor eax,DWORD PTR 4[esp]
- xor ebp,edi
- xor eax,DWORD PTR 28[esp]
- and ebp,ecx
- xor eax,DWORD PTR 48[esp]
- rol eax,1
- add ebp,esi
- ror ecx,2
- mov esi,ebx
- rol esi,5
- mov DWORD PTR 60[esp],eax
- lea eax,DWORD PTR 2400959708[ebp*1+eax]
- mov ebp,edx
- add eax,esi
- and ebp,edi
- mov esi,DWORD PTR [esp]
- add eax,ebp
- ; 40_59 48
- mov ebp,ecx
- xor esi,DWORD PTR 8[esp]
- xor ebp,edx
- xor esi,DWORD PTR 32[esp]
- and ebp,ebx
- xor esi,DWORD PTR 52[esp]
- rol esi,1
- add ebp,edi
- ror ebx,2
- mov edi,eax
- rol edi,5
- mov DWORD PTR [esp],esi
- lea esi,DWORD PTR 2400959708[ebp*1+esi]
- mov ebp,ecx
- add esi,edi
- and ebp,edx
- mov edi,DWORD PTR 4[esp]
- add esi,ebp
- ; 40_59 49
- mov ebp,ebx
- xor edi,DWORD PTR 12[esp]
- xor ebp,ecx
- xor edi,DWORD PTR 36[esp]
- and ebp,eax
- xor edi,DWORD PTR 56[esp]
- rol edi,1
- add ebp,edx
- ror eax,2
- mov edx,esi
- rol edx,5
- mov DWORD PTR 4[esp],edi
- lea edi,DWORD PTR 2400959708[ebp*1+edi]
- mov ebp,ebx
- add edi,edx
- and ebp,ecx
- mov edx,DWORD PTR 8[esp]
- add edi,ebp
- ; 40_59 50
- mov ebp,eax
- xor edx,DWORD PTR 16[esp]
- xor ebp,ebx
- xor edx,DWORD PTR 40[esp]
- and ebp,esi
- xor edx,DWORD PTR 60[esp]
- rol edx,1
- add ebp,ecx
- ror esi,2
- mov ecx,edi
- rol ecx,5
- mov DWORD PTR 8[esp],edx
- lea edx,DWORD PTR 2400959708[ebp*1+edx]
- mov ebp,eax
- add edx,ecx
- and ebp,ebx
- mov ecx,DWORD PTR 12[esp]
- add edx,ebp
- ; 40_59 51
- mov ebp,esi
- xor ecx,DWORD PTR 20[esp]
- xor ebp,eax
- xor ecx,DWORD PTR 44[esp]
- and ebp,edi
- xor ecx,DWORD PTR [esp]
- rol ecx,1
- add ebp,ebx
- ror edi,2
- mov ebx,edx
- rol ebx,5
- mov DWORD PTR 12[esp],ecx
- lea ecx,DWORD PTR 2400959708[ebp*1+ecx]
- mov ebp,esi
- add ecx,ebx
- and ebp,eax
- mov ebx,DWORD PTR 16[esp]
- add ecx,ebp
- ; 40_59 52
- mov ebp,edi
- xor ebx,DWORD PTR 24[esp]
- xor ebp,esi
- xor ebx,DWORD PTR 48[esp]
- and ebp,edx
- xor ebx,DWORD PTR 4[esp]
- rol ebx,1
- add ebp,eax
- ror edx,2
- mov eax,ecx
- rol eax,5
- mov DWORD PTR 16[esp],ebx
- lea ebx,DWORD PTR 2400959708[ebp*1+ebx]
- mov ebp,edi
- add ebx,eax
- and ebp,esi
- mov eax,DWORD PTR 20[esp]
- add ebx,ebp
- ; 40_59 53
- mov ebp,edx
- xor eax,DWORD PTR 28[esp]
- xor ebp,edi
- xor eax,DWORD PTR 52[esp]
- and ebp,ecx
- xor eax,DWORD PTR 8[esp]
- rol eax,1
- add ebp,esi
- ror ecx,2
- mov esi,ebx
- rol esi,5
- mov DWORD PTR 20[esp],eax
- lea eax,DWORD PTR 2400959708[ebp*1+eax]
- mov ebp,edx
- add eax,esi
- and ebp,edi
- mov esi,DWORD PTR 24[esp]
- add eax,ebp
- ; 40_59 54
- mov ebp,ecx
- xor esi,DWORD PTR 32[esp]
- xor ebp,edx
- xor esi,DWORD PTR 56[esp]
- and ebp,ebx
- xor esi,DWORD PTR 12[esp]
- rol esi,1
- add ebp,edi
- ror ebx,2
- mov edi,eax
- rol edi,5
- mov DWORD PTR 24[esp],esi
- lea esi,DWORD PTR 2400959708[ebp*1+esi]
- mov ebp,ecx
- add esi,edi
- and ebp,edx
- mov edi,DWORD PTR 28[esp]
- add esi,ebp
- ; 40_59 55
- mov ebp,ebx
- xor edi,DWORD PTR 36[esp]
- xor ebp,ecx
- xor edi,DWORD PTR 60[esp]
- and ebp,eax
- xor edi,DWORD PTR 16[esp]
- rol edi,1
- add ebp,edx
- ror eax,2
- mov edx,esi
- rol edx,5
- mov DWORD PTR 28[esp],edi
- lea edi,DWORD PTR 2400959708[ebp*1+edi]
- mov ebp,ebx
- add edi,edx
- and ebp,ecx
- mov edx,DWORD PTR 32[esp]
- add edi,ebp
- ; 40_59 56
- mov ebp,eax
- xor edx,DWORD PTR 40[esp]
- xor ebp,ebx
- xor edx,DWORD PTR [esp]
- and ebp,esi
- xor edx,DWORD PTR 20[esp]
- rol edx,1
- add ebp,ecx
- ror esi,2
- mov ecx,edi
- rol ecx,5
- mov DWORD PTR 32[esp],edx
- lea edx,DWORD PTR 2400959708[ebp*1+edx]
- mov ebp,eax
- add edx,ecx
- and ebp,ebx
- mov ecx,DWORD PTR 36[esp]
- add edx,ebp
- ; 40_59 57
- mov ebp,esi
- xor ecx,DWORD PTR 44[esp]
- xor ebp,eax
- xor ecx,DWORD PTR 4[esp]
- and ebp,edi
- xor ecx,DWORD PTR 24[esp]
- rol ecx,1
- add ebp,ebx
- ror edi,2
- mov ebx,edx
- rol ebx,5
- mov DWORD PTR 36[esp],ecx
- lea ecx,DWORD PTR 2400959708[ebp*1+ecx]
- mov ebp,esi
- add ecx,ebx
- and ebp,eax
- mov ebx,DWORD PTR 40[esp]
- add ecx,ebp
- ; 40_59 58
- mov ebp,edi
- xor ebx,DWORD PTR 48[esp]
- xor ebp,esi
- xor ebx,DWORD PTR 8[esp]
- and ebp,edx
- xor ebx,DWORD PTR 28[esp]
- rol ebx,1
- add ebp,eax
- ror edx,2
- mov eax,ecx
- rol eax,5
- mov DWORD PTR 40[esp],ebx
- lea ebx,DWORD PTR 2400959708[ebp*1+ebx]
- mov ebp,edi
- add ebx,eax
- and ebp,esi
- mov eax,DWORD PTR 44[esp]
- add ebx,ebp
- ; 40_59 59
- mov ebp,edx
- xor eax,DWORD PTR 52[esp]
- xor ebp,edi
- xor eax,DWORD PTR 12[esp]
- and ebp,ecx
- xor eax,DWORD PTR 32[esp]
- rol eax,1
- add ebp,esi
- ror ecx,2
- mov esi,ebx
- rol esi,5
- mov DWORD PTR 44[esp],eax
- lea eax,DWORD PTR 2400959708[ebp*1+eax]
- mov ebp,edx
- add eax,esi
- and ebp,edi
- mov esi,DWORD PTR 48[esp]
- add eax,ebp
- ; 20_39 60
- mov ebp,ebx
- xor esi,DWORD PTR 56[esp]
- xor ebp,ecx
- xor esi,DWORD PTR 16[esp]
- xor ebp,edx
- xor esi,DWORD PTR 36[esp]
- rol esi,1
- add edi,ebp
- ror ebx,2
- mov ebp,eax
- rol ebp,5
- mov DWORD PTR 48[esp],esi
- lea esi,DWORD PTR 3395469782[edi*1+esi]
- mov edi,DWORD PTR 52[esp]
- add esi,ebp
- ; 20_39 61
- mov ebp,eax
- xor edi,DWORD PTR 60[esp]
- xor ebp,ebx
- xor edi,DWORD PTR 20[esp]
- xor ebp,ecx
- xor edi,DWORD PTR 40[esp]
- rol edi,1
- add edx,ebp
- ror eax,2
- mov ebp,esi
- rol ebp,5
- mov DWORD PTR 52[esp],edi
- lea edi,DWORD PTR 3395469782[edx*1+edi]
- mov edx,DWORD PTR 56[esp]
- add edi,ebp
- ; 20_39 62
- mov ebp,esi
- xor edx,DWORD PTR [esp]
- xor ebp,eax
- xor edx,DWORD PTR 24[esp]
- xor ebp,ebx
- xor edx,DWORD PTR 44[esp]
- rol edx,1
- add ecx,ebp
- ror esi,2
- mov ebp,edi
- rol ebp,5
- mov DWORD PTR 56[esp],edx
- lea edx,DWORD PTR 3395469782[ecx*1+edx]
- mov ecx,DWORD PTR 60[esp]
- add edx,ebp
- ; 20_39 63
- mov ebp,edi
- xor ecx,DWORD PTR 4[esp]
- xor ebp,esi
- xor ecx,DWORD PTR 28[esp]
- xor ebp,eax
- xor ecx,DWORD PTR 48[esp]
- rol ecx,1
- add ebx,ebp
- ror edi,2
- mov ebp,edx
- rol ebp,5
- mov DWORD PTR 60[esp],ecx
- lea ecx,DWORD PTR 3395469782[ebx*1+ecx]
- mov ebx,DWORD PTR [esp]
- add ecx,ebp
- ; 20_39 64
- mov ebp,edx
- xor ebx,DWORD PTR 8[esp]
- xor ebp,edi
- xor ebx,DWORD PTR 32[esp]
- xor ebp,esi
- xor ebx,DWORD PTR 52[esp]
- rol ebx,1
- add eax,ebp
- ror edx,2
- mov ebp,ecx
- rol ebp,5
- mov DWORD PTR [esp],ebx
- lea ebx,DWORD PTR 3395469782[eax*1+ebx]
- mov eax,DWORD PTR 4[esp]
- add ebx,ebp
- ; 20_39 65
- mov ebp,ecx
- xor eax,DWORD PTR 12[esp]
- xor ebp,edx
- xor eax,DWORD PTR 36[esp]
- xor ebp,edi
- xor eax,DWORD PTR 56[esp]
- rol eax,1
- add esi,ebp
- ror ecx,2
- mov ebp,ebx
- rol ebp,5
- mov DWORD PTR 4[esp],eax
- lea eax,DWORD PTR 3395469782[esi*1+eax]
- mov esi,DWORD PTR 8[esp]
- add eax,ebp
- ; 20_39 66
- mov ebp,ebx
- xor esi,DWORD PTR 16[esp]
- xor ebp,ecx
- xor esi,DWORD PTR 40[esp]
- xor ebp,edx
- xor esi,DWORD PTR 60[esp]
- rol esi,1
- add edi,ebp
- ror ebx,2
- mov ebp,eax
- rol ebp,5
- mov DWORD PTR 8[esp],esi
- lea esi,DWORD PTR 3395469782[edi*1+esi]
- mov edi,DWORD PTR 12[esp]
- add esi,ebp
- ; 20_39 67
- mov ebp,eax
- xor edi,DWORD PTR 20[esp]
- xor ebp,ebx
- xor edi,DWORD PTR 44[esp]
- xor ebp,ecx
- xor edi,DWORD PTR [esp]
- rol edi,1
- add edx,ebp
- ror eax,2
- mov ebp,esi
- rol ebp,5
- mov DWORD PTR 12[esp],edi
- lea edi,DWORD PTR 3395469782[edx*1+edi]
- mov edx,DWORD PTR 16[esp]
- add edi,ebp
- ; 20_39 68
- mov ebp,esi
- xor edx,DWORD PTR 24[esp]
- xor ebp,eax
- xor edx,DWORD PTR 48[esp]
- xor ebp,ebx
- xor edx,DWORD PTR 4[esp]
- rol edx,1
- add ecx,ebp
- ror esi,2
- mov ebp,edi
- rol ebp,5
- mov DWORD PTR 16[esp],edx
- lea edx,DWORD PTR 3395469782[ecx*1+edx]
- mov ecx,DWORD PTR 20[esp]
- add edx,ebp
- ; 20_39 69
- mov ebp,edi
- xor ecx,DWORD PTR 28[esp]
- xor ebp,esi
- xor ecx,DWORD PTR 52[esp]
- xor ebp,eax
- xor ecx,DWORD PTR 8[esp]
- rol ecx,1
- add ebx,ebp
- ror edi,2
- mov ebp,edx
- rol ebp,5
- mov DWORD PTR 20[esp],ecx
- lea ecx,DWORD PTR 3395469782[ebx*1+ecx]
- mov ebx,DWORD PTR 24[esp]
- add ecx,ebp
- ; 20_39 70
- mov ebp,edx
- xor ebx,DWORD PTR 32[esp]
- xor ebp,edi
- xor ebx,DWORD PTR 56[esp]
- xor ebp,esi
- xor ebx,DWORD PTR 12[esp]
- rol ebx,1
- add eax,ebp
- ror edx,2
- mov ebp,ecx
- rol ebp,5
- mov DWORD PTR 24[esp],ebx
- lea ebx,DWORD PTR 3395469782[eax*1+ebx]
- mov eax,DWORD PTR 28[esp]
- add ebx,ebp
- ; 20_39 71
- mov ebp,ecx
- xor eax,DWORD PTR 36[esp]
- xor ebp,edx
- xor eax,DWORD PTR 60[esp]
- xor ebp,edi
- xor eax,DWORD PTR 16[esp]
- rol eax,1
- add esi,ebp
- ror ecx,2
- mov ebp,ebx
- rol ebp,5
- mov DWORD PTR 28[esp],eax
- lea eax,DWORD PTR 3395469782[esi*1+eax]
- mov esi,DWORD PTR 32[esp]
- add eax,ebp
- ; 20_39 72
- mov ebp,ebx
- xor esi,DWORD PTR 40[esp]
- xor ebp,ecx
- xor esi,DWORD PTR [esp]
- xor ebp,edx
- xor esi,DWORD PTR 20[esp]
- rol esi,1
- add edi,ebp
- ror ebx,2
- mov ebp,eax
- rol ebp,5
- mov DWORD PTR 32[esp],esi
- lea esi,DWORD PTR 3395469782[edi*1+esi]
- mov edi,DWORD PTR 36[esp]
- add esi,ebp
- ; 20_39 73
- mov ebp,eax
- xor edi,DWORD PTR 44[esp]
- xor ebp,ebx
- xor edi,DWORD PTR 4[esp]
- xor ebp,ecx
- xor edi,DWORD PTR 24[esp]
- rol edi,1
- add edx,ebp
- ror eax,2
- mov ebp,esi
- rol ebp,5
- mov DWORD PTR 36[esp],edi
- lea edi,DWORD PTR 3395469782[edx*1+edi]
- mov edx,DWORD PTR 40[esp]
- add edi,ebp
- ; 20_39 74
- mov ebp,esi
- xor edx,DWORD PTR 48[esp]
- xor ebp,eax
- xor edx,DWORD PTR 8[esp]
- xor ebp,ebx
- xor edx,DWORD PTR 28[esp]
- rol edx,1
- add ecx,ebp
- ror esi,2
- mov ebp,edi
- rol ebp,5
- mov DWORD PTR 40[esp],edx
- lea edx,DWORD PTR 3395469782[ecx*1+edx]
- mov ecx,DWORD PTR 44[esp]
- add edx,ebp
- ; 20_39 75
- mov ebp,edi
- xor ecx,DWORD PTR 52[esp]
- xor ebp,esi
- xor ecx,DWORD PTR 12[esp]
- xor ebp,eax
- xor ecx,DWORD PTR 32[esp]
- rol ecx,1
- add ebx,ebp
- ror edi,2
- mov ebp,edx
- rol ebp,5
- mov DWORD PTR 44[esp],ecx
- lea ecx,DWORD PTR 3395469782[ebx*1+ecx]
- mov ebx,DWORD PTR 48[esp]
- add ecx,ebp
- ; 20_39 76
- mov ebp,edx
- xor ebx,DWORD PTR 56[esp]
- xor ebp,edi
- xor ebx,DWORD PTR 16[esp]
- xor ebp,esi
- xor ebx,DWORD PTR 36[esp]
- rol ebx,1
- add eax,ebp
- ror edx,2
- mov ebp,ecx
- rol ebp,5
- mov DWORD PTR 48[esp],ebx
- lea ebx,DWORD PTR 3395469782[eax*1+ebx]
- mov eax,DWORD PTR 52[esp]
- add ebx,ebp
- ; 20_39 77
- mov ebp,ecx
- xor eax,DWORD PTR 60[esp]
- xor ebp,edx
- xor eax,DWORD PTR 20[esp]
- xor ebp,edi
- xor eax,DWORD PTR 40[esp]
- rol eax,1
- add esi,ebp
- ror ecx,2
- mov ebp,ebx
- rol ebp,5
- lea eax,DWORD PTR 3395469782[esi*1+eax]
- mov esi,DWORD PTR 56[esp]
- add eax,ebp
- ; 20_39 78
- mov ebp,ebx
- xor esi,DWORD PTR [esp]
- xor ebp,ecx
- xor esi,DWORD PTR 24[esp]
- xor ebp,edx
- xor esi,DWORD PTR 44[esp]
- rol esi,1
- add edi,ebp
- ror ebx,2
- mov ebp,eax
- rol ebp,5
- lea esi,DWORD PTR 3395469782[edi*1+esi]
- mov edi,DWORD PTR 60[esp]
- add esi,ebp
- ; 20_39 79
- mov ebp,eax
- xor edi,DWORD PTR 4[esp]
- xor ebp,ebx
- xor edi,DWORD PTR 28[esp]
- xor ebp,ecx
- xor edi,DWORD PTR 48[esp]
- rol edi,1
- add edx,ebp
- ror eax,2
- mov ebp,esi
- rol ebp,5
- lea edi,DWORD PTR 3395469782[edx*1+edi]
- add edi,ebp
- mov ebp,DWORD PTR 96[esp]
- mov edx,DWORD PTR 100[esp]
- add edi,DWORD PTR [ebp]
- add esi,DWORD PTR 4[ebp]
- add eax,DWORD PTR 8[ebp]
- add ebx,DWORD PTR 12[ebp]
- add ecx,DWORD PTR 16[ebp]
- mov DWORD PTR [ebp],edi
- add edx,64
- mov DWORD PTR 4[ebp],esi
- cmp edx,DWORD PTR 104[esp]
- mov DWORD PTR 8[ebp],eax
- mov edi,ecx
- mov DWORD PTR 12[ebp],ebx
- mov esi,edx
- mov DWORD PTR 16[ebp],ecx
- jb $L002loop
- add esp,76
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_sha1_block_data_order ENDP
-ALIGN 16
-__sha1_block_data_order_shaext PROC PRIVATE
- push ebp
- push ebx
- push esi
- push edi
- call $L003pic_point
-$L003pic_point:
- pop ebp
- lea ebp,DWORD PTR ($LK_XX_XX-$L003pic_point)[ebp]
-$Lshaext_shortcut::
- mov edi,DWORD PTR 20[esp]
- mov ebx,esp
- mov esi,DWORD PTR 24[esp]
- mov ecx,DWORD PTR 28[esp]
- sub esp,32
- movdqu xmm0,XMMWORD PTR [edi]
- movd xmm1,DWORD PTR 16[edi]
- and esp,-32
- movdqa xmm3,XMMWORD PTR 80[ebp]
- movdqu xmm4,XMMWORD PTR [esi]
- pshufd xmm0,xmm0,27
- movdqu xmm5,XMMWORD PTR 16[esi]
- pshufd xmm1,xmm1,27
- movdqu xmm6,XMMWORD PTR 32[esi]
-DB 102,15,56,0,227
- movdqu xmm7,XMMWORD PTR 48[esi]
-DB 102,15,56,0,235
-DB 102,15,56,0,243
-DB 102,15,56,0,251
- jmp $L004loop_shaext
-ALIGN 16
-$L004loop_shaext:
- dec ecx
- lea eax,DWORD PTR 64[esi]
- movdqa XMMWORD PTR [esp],xmm1
- paddd xmm1,xmm4
- cmovne esi,eax
- movdqa XMMWORD PTR 16[esp],xmm0
-DB 15,56,201,229
- movdqa xmm2,xmm0
-DB 15,58,204,193,0
-DB 15,56,200,213
- pxor xmm4,xmm6
-DB 15,56,201,238
-DB 15,56,202,231
- movdqa xmm1,xmm0
-DB 15,58,204,194,0
-DB 15,56,200,206
- pxor xmm5,xmm7
-DB 15,56,202,236
-DB 15,56,201,247
- movdqa xmm2,xmm0
-DB 15,58,204,193,0
-DB 15,56,200,215
- pxor xmm6,xmm4
-DB 15,56,201,252
-DB 15,56,202,245
- movdqa xmm1,xmm0
-DB 15,58,204,194,0
-DB 15,56,200,204
- pxor xmm7,xmm5
-DB 15,56,202,254
-DB 15,56,201,229
- movdqa xmm2,xmm0
-DB 15,58,204,193,0
-DB 15,56,200,213
- pxor xmm4,xmm6
-DB 15,56,201,238
-DB 15,56,202,231
- movdqa xmm1,xmm0
-DB 15,58,204,194,1
-DB 15,56,200,206
- pxor xmm5,xmm7
-DB 15,56,202,236
-DB 15,56,201,247
- movdqa xmm2,xmm0
-DB 15,58,204,193,1
-DB 15,56,200,215
- pxor xmm6,xmm4
-DB 15,56,201,252
-DB 15,56,202,245
- movdqa xmm1,xmm0
-DB 15,58,204,194,1
-DB 15,56,200,204
- pxor xmm7,xmm5
-DB 15,56,202,254
-DB 15,56,201,229
- movdqa xmm2,xmm0
-DB 15,58,204,193,1
-DB 15,56,200,213
- pxor xmm4,xmm6
-DB 15,56,201,238
-DB 15,56,202,231
- movdqa xmm1,xmm0
-DB 15,58,204,194,1
-DB 15,56,200,206
- pxor xmm5,xmm7
-DB 15,56,202,236
-DB 15,56,201,247
- movdqa xmm2,xmm0
-DB 15,58,204,193,2
-DB 15,56,200,215
- pxor xmm6,xmm4
-DB 15,56,201,252
-DB 15,56,202,245
- movdqa xmm1,xmm0
-DB 15,58,204,194,2
-DB 15,56,200,204
- pxor xmm7,xmm5
-DB 15,56,202,254
-DB 15,56,201,229
- movdqa xmm2,xmm0
-DB 15,58,204,193,2
-DB 15,56,200,213
- pxor xmm4,xmm6
-DB 15,56,201,238
-DB 15,56,202,231
- movdqa xmm1,xmm0
-DB 15,58,204,194,2
-DB 15,56,200,206
- pxor xmm5,xmm7
-DB 15,56,202,236
-DB 15,56,201,247
- movdqa xmm2,xmm0
-DB 15,58,204,193,2
-DB 15,56,200,215
- pxor xmm6,xmm4
-DB 15,56,201,252
-DB 15,56,202,245
- movdqa xmm1,xmm0
-DB 15,58,204,194,3
-DB 15,56,200,204
- pxor xmm7,xmm5
-DB 15,56,202,254
- movdqu xmm4,XMMWORD PTR [esi]
- movdqa xmm2,xmm0
-DB 15,58,204,193,3
-DB 15,56,200,213
- movdqu xmm5,XMMWORD PTR 16[esi]
-DB 102,15,56,0,227
- movdqa xmm1,xmm0
-DB 15,58,204,194,3
-DB 15,56,200,206
- movdqu xmm6,XMMWORD PTR 32[esi]
-DB 102,15,56,0,235
- movdqa xmm2,xmm0
-DB 15,58,204,193,3
-DB 15,56,200,215
- movdqu xmm7,XMMWORD PTR 48[esi]
-DB 102,15,56,0,243
- movdqa xmm1,xmm0
-DB 15,58,204,194,3
- movdqa xmm2,XMMWORD PTR [esp]
-DB 102,15,56,0,251
-DB 15,56,200,202
- paddd xmm0,XMMWORD PTR 16[esp]
- jnz $L004loop_shaext
- pshufd xmm0,xmm0,27
- pshufd xmm1,xmm1,27
- movdqu XMMWORD PTR [edi],xmm0
- movd DWORD PTR 16[edi],xmm1
- mov esp,ebx
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-__sha1_block_data_order_shaext ENDP
-ALIGN 16
-__sha1_block_data_order_ssse3 PROC PRIVATE
- push ebp
- push ebx
- push esi
- push edi
- call $L005pic_point
-$L005pic_point:
- pop ebp
- lea ebp,DWORD PTR ($LK_XX_XX-$L005pic_point)[ebp]
-$Lssse3_shortcut::
- movdqa xmm7,XMMWORD PTR [ebp]
- movdqa xmm0,XMMWORD PTR 16[ebp]
- movdqa xmm1,XMMWORD PTR 32[ebp]
- movdqa xmm2,XMMWORD PTR 48[ebp]
- movdqa xmm6,XMMWORD PTR 64[ebp]
- mov edi,DWORD PTR 20[esp]
- mov ebp,DWORD PTR 24[esp]
- mov edx,DWORD PTR 28[esp]
- mov esi,esp
- sub esp,208
- and esp,-64
- movdqa XMMWORD PTR 112[esp],xmm0
- movdqa XMMWORD PTR 128[esp],xmm1
- movdqa XMMWORD PTR 144[esp],xmm2
- shl edx,6
- movdqa XMMWORD PTR 160[esp],xmm7
- add edx,ebp
- movdqa XMMWORD PTR 176[esp],xmm6
- add ebp,64
- mov DWORD PTR 192[esp],edi
- mov DWORD PTR 196[esp],ebp
- mov DWORD PTR 200[esp],edx
- mov DWORD PTR 204[esp],esi
- mov eax,DWORD PTR [edi]
- mov ebx,DWORD PTR 4[edi]
- mov ecx,DWORD PTR 8[edi]
- mov edx,DWORD PTR 12[edi]
- mov edi,DWORD PTR 16[edi]
- mov esi,ebx
- movdqu xmm0,XMMWORD PTR [ebp-64]
- movdqu xmm1,XMMWORD PTR [ebp-48]
- movdqu xmm2,XMMWORD PTR [ebp-32]
- movdqu xmm3,XMMWORD PTR [ebp-16]
-DB 102,15,56,0,198
-DB 102,15,56,0,206
-DB 102,15,56,0,214
- movdqa XMMWORD PTR 96[esp],xmm7
-DB 102,15,56,0,222
- paddd xmm0,xmm7
- paddd xmm1,xmm7
- paddd xmm2,xmm7
- movdqa XMMWORD PTR [esp],xmm0
- psubd xmm0,xmm7
- movdqa XMMWORD PTR 16[esp],xmm1
- psubd xmm1,xmm7
- movdqa XMMWORD PTR 32[esp],xmm2
- mov ebp,ecx
- psubd xmm2,xmm7
- xor ebp,edx
- pshufd xmm4,xmm0,238
- and esi,ebp
- jmp $L006loop
-ALIGN 16
-$L006loop:
- ror ebx,2
- xor esi,edx
- mov ebp,eax
- punpcklqdq xmm4,xmm1
- movdqa xmm6,xmm3
- add edi,DWORD PTR [esp]
- xor ebx,ecx
- paddd xmm7,xmm3
- movdqa XMMWORD PTR 64[esp],xmm0
- rol eax,5
- add edi,esi
- psrldq xmm6,4
- and ebp,ebx
- xor ebx,ecx
- pxor xmm4,xmm0
- add edi,eax
- ror eax,7
- pxor xmm6,xmm2
- xor ebp,ecx
- mov esi,edi
- add edx,DWORD PTR 4[esp]
- pxor xmm4,xmm6
- xor eax,ebx
- rol edi,5
- movdqa XMMWORD PTR 48[esp],xmm7
- add edx,ebp
- and esi,eax
- movdqa xmm0,xmm4
- xor eax,ebx
- add edx,edi
- ror edi,7
- movdqa xmm6,xmm4
- xor esi,ebx
- pslldq xmm0,12
- paddd xmm4,xmm4
- mov ebp,edx
- add ecx,DWORD PTR 8[esp]
- psrld xmm6,31
- xor edi,eax
- rol edx,5
- movdqa xmm7,xmm0
- add ecx,esi
- and ebp,edi
- xor edi,eax
- psrld xmm0,30
- add ecx,edx
- ror edx,7
- por xmm4,xmm6
- xor ebp,eax
- mov esi,ecx
- add ebx,DWORD PTR 12[esp]
- pslld xmm7,2
- xor edx,edi
- rol ecx,5
- pxor xmm4,xmm0
- movdqa xmm0,XMMWORD PTR 96[esp]
- add ebx,ebp
- and esi,edx
- pxor xmm4,xmm7
- pshufd xmm5,xmm1,238
- xor edx,edi
- add ebx,ecx
- ror ecx,7
- xor esi,edi
- mov ebp,ebx
- punpcklqdq xmm5,xmm2
- movdqa xmm7,xmm4
- add eax,DWORD PTR 16[esp]
- xor ecx,edx
- paddd xmm0,xmm4
- movdqa XMMWORD PTR 80[esp],xmm1
- rol ebx,5
- add eax,esi
- psrldq xmm7,4
- and ebp,ecx
- xor ecx,edx
- pxor xmm5,xmm1
- add eax,ebx
- ror ebx,7
- pxor xmm7,xmm3
- xor ebp,edx
- mov esi,eax
- add edi,DWORD PTR 20[esp]
- pxor xmm5,xmm7
- xor ebx,ecx
- rol eax,5
- movdqa XMMWORD PTR [esp],xmm0
- add edi,ebp
- and esi,ebx
- movdqa xmm1,xmm5
- xor ebx,ecx
- add edi,eax
- ror eax,7
- movdqa xmm7,xmm5
- xor esi,ecx
- pslldq xmm1,12
- paddd xmm5,xmm5
- mov ebp,edi
- add edx,DWORD PTR 24[esp]
- psrld xmm7,31
- xor eax,ebx
- rol edi,5
- movdqa xmm0,xmm1
- add edx,esi
- and ebp,eax
- xor eax,ebx
- psrld xmm1,30
- add edx,edi
- ror edi,7
- por xmm5,xmm7
- xor ebp,ebx
- mov esi,edx
- add ecx,DWORD PTR 28[esp]
- pslld xmm0,2
- xor edi,eax
- rol edx,5
- pxor xmm5,xmm1
- movdqa xmm1,XMMWORD PTR 112[esp]
- add ecx,ebp
- and esi,edi
- pxor xmm5,xmm0
- pshufd xmm6,xmm2,238
- xor edi,eax
- add ecx,edx
- ror edx,7
- xor esi,eax
- mov ebp,ecx
- punpcklqdq xmm6,xmm3
- movdqa xmm0,xmm5
- add ebx,DWORD PTR 32[esp]
- xor edx,edi
- paddd xmm1,xmm5
- movdqa XMMWORD PTR 96[esp],xmm2
- rol ecx,5
- add ebx,esi
- psrldq xmm0,4
- and ebp,edx
- xor edx,edi
- pxor xmm6,xmm2
- add ebx,ecx
- ror ecx,7
- pxor xmm0,xmm4
- xor ebp,edi
- mov esi,ebx
- add eax,DWORD PTR 36[esp]
- pxor xmm6,xmm0
- xor ecx,edx
- rol ebx,5
- movdqa XMMWORD PTR 16[esp],xmm1
- add eax,ebp
- and esi,ecx
- movdqa xmm2,xmm6
- xor ecx,edx
- add eax,ebx
- ror ebx,7
- movdqa xmm0,xmm6
- xor esi,edx
- pslldq xmm2,12
- paddd xmm6,xmm6
- mov ebp,eax
- add edi,DWORD PTR 40[esp]
- psrld xmm0,31
- xor ebx,ecx
- rol eax,5
- movdqa xmm1,xmm2
- add edi,esi
- and ebp,ebx
- xor ebx,ecx
- psrld xmm2,30
- add edi,eax
- ror eax,7
- por xmm6,xmm0
- xor ebp,ecx
- movdqa xmm0,XMMWORD PTR 64[esp]
- mov esi,edi
- add edx,DWORD PTR 44[esp]
- pslld xmm1,2
- xor eax,ebx
- rol edi,5
- pxor xmm6,xmm2
- movdqa xmm2,XMMWORD PTR 112[esp]
- add edx,ebp
- and esi,eax
- pxor xmm6,xmm1
- pshufd xmm7,xmm3,238
- xor eax,ebx
- add edx,edi
- ror edi,7
- xor esi,ebx
- mov ebp,edx
- punpcklqdq xmm7,xmm4
- movdqa xmm1,xmm6
- add ecx,DWORD PTR 48[esp]
- xor edi,eax
- paddd xmm2,xmm6
- movdqa XMMWORD PTR 64[esp],xmm3
- rol edx,5
- add ecx,esi
- psrldq xmm1,4
- and ebp,edi
- xor edi,eax
- pxor xmm7,xmm3
- add ecx,edx
- ror edx,7
- pxor xmm1,xmm5
- xor ebp,eax
- mov esi,ecx
- add ebx,DWORD PTR 52[esp]
- pxor xmm7,xmm1
- xor edx,edi
- rol ecx,5
- movdqa XMMWORD PTR 32[esp],xmm2
- add ebx,ebp
- and esi,edx
- movdqa xmm3,xmm7
- xor edx,edi
- add ebx,ecx
- ror ecx,7
- movdqa xmm1,xmm7
- xor esi,edi
- pslldq xmm3,12
- paddd xmm7,xmm7
- mov ebp,ebx
- add eax,DWORD PTR 56[esp]
- psrld xmm1,31
- xor ecx,edx
- rol ebx,5
- movdqa xmm2,xmm3
- add eax,esi
- and ebp,ecx
- xor ecx,edx
- psrld xmm3,30
- add eax,ebx
- ror ebx,7
- por xmm7,xmm1
- xor ebp,edx
- movdqa xmm1,XMMWORD PTR 80[esp]
- mov esi,eax
- add edi,DWORD PTR 60[esp]
- pslld xmm2,2
- xor ebx,ecx
- rol eax,5
- pxor xmm7,xmm3
- movdqa xmm3,XMMWORD PTR 112[esp]
- add edi,ebp
- and esi,ebx
- pxor xmm7,xmm2
- pshufd xmm2,xmm6,238
- xor ebx,ecx
- add edi,eax
- ror eax,7
- pxor xmm0,xmm4
- punpcklqdq xmm2,xmm7
- xor esi,ecx
- mov ebp,edi
- add edx,DWORD PTR [esp]
- pxor xmm0,xmm1
- movdqa XMMWORD PTR 80[esp],xmm4
- xor eax,ebx
- rol edi,5
- movdqa xmm4,xmm3
- add edx,esi
- paddd xmm3,xmm7
- and ebp,eax
- pxor xmm0,xmm2
- xor eax,ebx
- add edx,edi
- ror edi,7
- xor ebp,ebx
- movdqa xmm2,xmm0
- movdqa XMMWORD PTR 48[esp],xmm3
- mov esi,edx
- add ecx,DWORD PTR 4[esp]
- xor edi,eax
- rol edx,5
- pslld xmm0,2
- add ecx,ebp
- and esi,edi
- psrld xmm2,30
- xor edi,eax
- add ecx,edx
- ror edx,7
- xor esi,eax
- mov ebp,ecx
- add ebx,DWORD PTR 8[esp]
- xor edx,edi
- rol ecx,5
- por xmm0,xmm2
- add ebx,esi
- and ebp,edx
- movdqa xmm2,XMMWORD PTR 96[esp]
- xor edx,edi
- add ebx,ecx
- add eax,DWORD PTR 12[esp]
- xor ebp,edi
- mov esi,ebx
- pshufd xmm3,xmm7,238
- rol ebx,5
- add eax,ebp
- xor esi,edx
- ror ecx,7
- add eax,ebx
- add edi,DWORD PTR 16[esp]
- pxor xmm1,xmm5
- punpcklqdq xmm3,xmm0
- xor esi,ecx
- mov ebp,eax
- rol eax,5
- pxor xmm1,xmm2
- movdqa XMMWORD PTR 96[esp],xmm5
- add edi,esi
- xor ebp,ecx
- movdqa xmm5,xmm4
- ror ebx,7
- paddd xmm4,xmm0
- add edi,eax
- pxor xmm1,xmm3
- add edx,DWORD PTR 20[esp]
- xor ebp,ebx
- mov esi,edi
- rol edi,5
- movdqa xmm3,xmm1
- movdqa XMMWORD PTR [esp],xmm4
- add edx,ebp
- xor esi,ebx
- ror eax,7
- add edx,edi
- pslld xmm1,2
- add ecx,DWORD PTR 24[esp]
- xor esi,eax
- psrld xmm3,30
- mov ebp,edx
- rol edx,5
- add ecx,esi
- xor ebp,eax
- ror edi,7
- add ecx,edx
- por xmm1,xmm3
- add ebx,DWORD PTR 28[esp]
- xor ebp,edi
- movdqa xmm3,XMMWORD PTR 64[esp]
- mov esi,ecx
- rol ecx,5
- add ebx,ebp
- xor esi,edi
- ror edx,7
- pshufd xmm4,xmm0,238
- add ebx,ecx
- add eax,DWORD PTR 32[esp]
- pxor xmm2,xmm6
- punpcklqdq xmm4,xmm1
- xor esi,edx
- mov ebp,ebx
- rol ebx,5
- pxor xmm2,xmm3
- movdqa XMMWORD PTR 64[esp],xmm6
- add eax,esi
- xor ebp,edx
- movdqa xmm6,XMMWORD PTR 128[esp]
- ror ecx,7
- paddd xmm5,xmm1
- add eax,ebx
- pxor xmm2,xmm4
- add edi,DWORD PTR 36[esp]
- xor ebp,ecx
- mov esi,eax
- rol eax,5
- movdqa xmm4,xmm2
- movdqa XMMWORD PTR 16[esp],xmm5
- add edi,ebp
- xor esi,ecx
- ror ebx,7
- add edi,eax
- pslld xmm2,2
- add edx,DWORD PTR 40[esp]
- xor esi,ebx
- psrld xmm4,30
- mov ebp,edi
- rol edi,5
- add edx,esi
- xor ebp,ebx
- ror eax,7
- add edx,edi
- por xmm2,xmm4
- add ecx,DWORD PTR 44[esp]
- xor ebp,eax
- movdqa xmm4,XMMWORD PTR 80[esp]
- mov esi,edx
- rol edx,5
- add ecx,ebp
- xor esi,eax
- ror edi,7
- pshufd xmm5,xmm1,238
- add ecx,edx
- add ebx,DWORD PTR 48[esp]
- pxor xmm3,xmm7
- punpcklqdq xmm5,xmm2
- xor esi,edi
- mov ebp,ecx
- rol ecx,5
- pxor xmm3,xmm4
- movdqa XMMWORD PTR 80[esp],xmm7
- add ebx,esi
- xor ebp,edi
- movdqa xmm7,xmm6
- ror edx,7
- paddd xmm6,xmm2
- add ebx,ecx
- pxor xmm3,xmm5
- add eax,DWORD PTR 52[esp]
- xor ebp,edx
- mov esi,ebx
- rol ebx,5
- movdqa xmm5,xmm3
- movdqa XMMWORD PTR 32[esp],xmm6
- add eax,ebp
- xor esi,edx
- ror ecx,7
- add eax,ebx
- pslld xmm3,2
- add edi,DWORD PTR 56[esp]
- xor esi,ecx
- psrld xmm5,30
- mov ebp,eax
- rol eax,5
- add edi,esi
- xor ebp,ecx
- ror ebx,7
- add edi,eax
- por xmm3,xmm5
- add edx,DWORD PTR 60[esp]
- xor ebp,ebx
- movdqa xmm5,XMMWORD PTR 96[esp]
- mov esi,edi
- rol edi,5
- add edx,ebp
- xor esi,ebx
- ror eax,7
- pshufd xmm6,xmm2,238
- add edx,edi
- add ecx,DWORD PTR [esp]
- pxor xmm4,xmm0
- punpcklqdq xmm6,xmm3
- xor esi,eax
- mov ebp,edx
- rol edx,5
- pxor xmm4,xmm5
- movdqa XMMWORD PTR 96[esp],xmm0
- add ecx,esi
- xor ebp,eax
- movdqa xmm0,xmm7
- ror edi,7
- paddd xmm7,xmm3
- add ecx,edx
- pxor xmm4,xmm6
- add ebx,DWORD PTR 4[esp]
- xor ebp,edi
- mov esi,ecx
- rol ecx,5
- movdqa xmm6,xmm4
- movdqa XMMWORD PTR 48[esp],xmm7
- add ebx,ebp
- xor esi,edi
- ror edx,7
- add ebx,ecx
- pslld xmm4,2
- add eax,DWORD PTR 8[esp]
- xor esi,edx
- psrld xmm6,30
- mov ebp,ebx
- rol ebx,5
- add eax,esi
- xor ebp,edx
- ror ecx,7
- add eax,ebx
- por xmm4,xmm6
- add edi,DWORD PTR 12[esp]
- xor ebp,ecx
- movdqa xmm6,XMMWORD PTR 64[esp]
- mov esi,eax
- rol eax,5
- add edi,ebp
- xor esi,ecx
- ror ebx,7
- pshufd xmm7,xmm3,238
- add edi,eax
- add edx,DWORD PTR 16[esp]
- pxor xmm5,xmm1
- punpcklqdq xmm7,xmm4
- xor esi,ebx
- mov ebp,edi
- rol edi,5
- pxor xmm5,xmm6
- movdqa XMMWORD PTR 64[esp],xmm1
- add edx,esi
- xor ebp,ebx
- movdqa xmm1,xmm0
- ror eax,7
- paddd xmm0,xmm4
- add edx,edi
- pxor xmm5,xmm7
- add ecx,DWORD PTR 20[esp]
- xor ebp,eax
- mov esi,edx
- rol edx,5
- movdqa xmm7,xmm5
- movdqa XMMWORD PTR [esp],xmm0
- add ecx,ebp
- xor esi,eax
- ror edi,7
- add ecx,edx
- pslld xmm5,2
- add ebx,DWORD PTR 24[esp]
- xor esi,edi
- psrld xmm7,30
- mov ebp,ecx
- rol ecx,5
- add ebx,esi
- xor ebp,edi
- ror edx,7
- add ebx,ecx
- por xmm5,xmm7
- add eax,DWORD PTR 28[esp]
- movdqa xmm7,XMMWORD PTR 80[esp]
- ror ecx,7
- mov esi,ebx
- xor ebp,edx
- rol ebx,5
- pshufd xmm0,xmm4,238
- add eax,ebp
- xor esi,ecx
- xor ecx,edx
- add eax,ebx
- add edi,DWORD PTR 32[esp]
- pxor xmm6,xmm2
- punpcklqdq xmm0,xmm5
- and esi,ecx
- xor ecx,edx
- ror ebx,7
- pxor xmm6,xmm7
- movdqa XMMWORD PTR 80[esp],xmm2
- mov ebp,eax
- xor esi,ecx
- rol eax,5
- movdqa xmm2,xmm1
- add edi,esi
- paddd xmm1,xmm5
- xor ebp,ebx
- pxor xmm6,xmm0
- xor ebx,ecx
- add edi,eax
- add edx,DWORD PTR 36[esp]
- and ebp,ebx
- movdqa xmm0,xmm6
- movdqa XMMWORD PTR 16[esp],xmm1
- xor ebx,ecx
- ror eax,7
- mov esi,edi
- xor ebp,ebx
- rol edi,5
- pslld xmm6,2
- add edx,ebp
- xor esi,eax
- psrld xmm0,30
- xor eax,ebx
- add edx,edi
- add ecx,DWORD PTR 40[esp]
- and esi,eax
- xor eax,ebx
- ror edi,7
- por xmm6,xmm0
- mov ebp,edx
- xor esi,eax
- movdqa xmm0,XMMWORD PTR 96[esp]
- rol edx,5
- add ecx,esi
- xor ebp,edi
- xor edi,eax
- add ecx,edx
- pshufd xmm1,xmm5,238
- add ebx,DWORD PTR 44[esp]
- and ebp,edi
- xor edi,eax
- ror edx,7
- mov esi,ecx
- xor ebp,edi
- rol ecx,5
- add ebx,ebp
- xor esi,edx
- xor edx,edi
- add ebx,ecx
- add eax,DWORD PTR 48[esp]
- pxor xmm7,xmm3
- punpcklqdq xmm1,xmm6
- and esi,edx
- xor edx,edi
- ror ecx,7
- pxor xmm7,xmm0
- movdqa XMMWORD PTR 96[esp],xmm3
- mov ebp,ebx
- xor esi,edx
- rol ebx,5
- movdqa xmm3,XMMWORD PTR 144[esp]
- add eax,esi
- paddd xmm2,xmm6
- xor ebp,ecx
- pxor xmm7,xmm1
- xor ecx,edx
- add eax,ebx
- add edi,DWORD PTR 52[esp]
- and ebp,ecx
- movdqa xmm1,xmm7
- movdqa XMMWORD PTR 32[esp],xmm2
- xor ecx,edx
- ror ebx,7
- mov esi,eax
- xor ebp,ecx
- rol eax,5
- pslld xmm7,2
- add edi,ebp
- xor esi,ebx
- psrld xmm1,30
- xor ebx,ecx
- add edi,eax
- add edx,DWORD PTR 56[esp]
- and esi,ebx
- xor ebx,ecx
- ror eax,7
- por xmm7,xmm1
- mov ebp,edi
- xor esi,ebx
- movdqa xmm1,XMMWORD PTR 64[esp]
- rol edi,5
- add edx,esi
- xor ebp,eax
- xor eax,ebx
- add edx,edi
- pshufd xmm2,xmm6,238
- add ecx,DWORD PTR 60[esp]
- and ebp,eax
- xor eax,ebx
- ror edi,7
- mov esi,edx
- xor ebp,eax
- rol edx,5
- add ecx,ebp
- xor esi,edi
- xor edi,eax
- add ecx,edx
- add ebx,DWORD PTR [esp]
- pxor xmm0,xmm4
- punpcklqdq xmm2,xmm7
- and esi,edi
- xor edi,eax
- ror edx,7
- pxor xmm0,xmm1
- movdqa XMMWORD PTR 64[esp],xmm4
- mov ebp,ecx
- xor esi,edi
- rol ecx,5
- movdqa xmm4,xmm3
- add ebx,esi
- paddd xmm3,xmm7
- xor ebp,edx
- pxor xmm0,xmm2
- xor edx,edi
- add ebx,ecx
- add eax,DWORD PTR 4[esp]
- and ebp,edx
- movdqa xmm2,xmm0
- movdqa XMMWORD PTR 48[esp],xmm3
- xor edx,edi
- ror ecx,7
- mov esi,ebx
- xor ebp,edx
- rol ebx,5
- pslld xmm0,2
- add eax,ebp
- xor esi,ecx
- psrld xmm2,30
- xor ecx,edx
- add eax,ebx
- add edi,DWORD PTR 8[esp]
- and esi,ecx
- xor ecx,edx
- ror ebx,7
- por xmm0,xmm2
- mov ebp,eax
- xor esi,ecx
- movdqa xmm2,XMMWORD PTR 80[esp]
- rol eax,5
- add edi,esi
- xor ebp,ebx
- xor ebx,ecx
- add edi,eax
- pshufd xmm3,xmm7,238
- add edx,DWORD PTR 12[esp]
- and ebp,ebx
- xor ebx,ecx
- ror eax,7
- mov esi,edi
- xor ebp,ebx
- rol edi,5
- add edx,ebp
- xor esi,eax
- xor eax,ebx
- add edx,edi
- add ecx,DWORD PTR 16[esp]
- pxor xmm1,xmm5
- punpcklqdq xmm3,xmm0
- and esi,eax
- xor eax,ebx
- ror edi,7
- pxor xmm1,xmm2
- movdqa XMMWORD PTR 80[esp],xmm5
- mov ebp,edx
- xor esi,eax
- rol edx,5
- movdqa xmm5,xmm4
- add ecx,esi
- paddd xmm4,xmm0
- xor ebp,edi
- pxor xmm1,xmm3
- xor edi,eax
- add ecx,edx
- add ebx,DWORD PTR 20[esp]
- and ebp,edi
- movdqa xmm3,xmm1
- movdqa XMMWORD PTR [esp],xmm4
- xor edi,eax
- ror edx,7
- mov esi,ecx
- xor ebp,edi
- rol ecx,5
- pslld xmm1,2
- add ebx,ebp
- xor esi,edx
- psrld xmm3,30
- xor edx,edi
- add ebx,ecx
- add eax,DWORD PTR 24[esp]
- and esi,edx
- xor edx,edi
- ror ecx,7
- por xmm1,xmm3
- mov ebp,ebx
- xor esi,edx
- movdqa xmm3,XMMWORD PTR 96[esp]
- rol ebx,5
- add eax,esi
- xor ebp,ecx
- xor ecx,edx
- add eax,ebx
- pshufd xmm4,xmm0,238
- add edi,DWORD PTR 28[esp]
- and ebp,ecx
- xor ecx,edx
- ror ebx,7
- mov esi,eax
- xor ebp,ecx
- rol eax,5
- add edi,ebp
- xor esi,ebx
- xor ebx,ecx
- add edi,eax
- add edx,DWORD PTR 32[esp]
- pxor xmm2,xmm6
- punpcklqdq xmm4,xmm1
- and esi,ebx
- xor ebx,ecx
- ror eax,7
- pxor xmm2,xmm3
- movdqa XMMWORD PTR 96[esp],xmm6
- mov ebp,edi
- xor esi,ebx
- rol edi,5
- movdqa xmm6,xmm5
- add edx,esi
- paddd xmm5,xmm1
- xor ebp,eax
- pxor xmm2,xmm4
- xor eax,ebx
- add edx,edi
- add ecx,DWORD PTR 36[esp]
- and ebp,eax
- movdqa xmm4,xmm2
- movdqa XMMWORD PTR 16[esp],xmm5
- xor eax,ebx
- ror edi,7
- mov esi,edx
- xor ebp,eax
- rol edx,5
- pslld xmm2,2
- add ecx,ebp
- xor esi,edi
- psrld xmm4,30
- xor edi,eax
- add ecx,edx
- add ebx,DWORD PTR 40[esp]
- and esi,edi
- xor edi,eax
- ror edx,7
- por xmm2,xmm4
- mov ebp,ecx
- xor esi,edi
- movdqa xmm4,XMMWORD PTR 64[esp]
- rol ecx,5
- add ebx,esi
- xor ebp,edx
- xor edx,edi
- add ebx,ecx
- pshufd xmm5,xmm1,238
- add eax,DWORD PTR 44[esp]
- and ebp,edx
- xor edx,edi
- ror ecx,7
- mov esi,ebx
- xor ebp,edx
- rol ebx,5
- add eax,ebp
- xor esi,edx
- add eax,ebx
- add edi,DWORD PTR 48[esp]
- pxor xmm3,xmm7
- punpcklqdq xmm5,xmm2
- xor esi,ecx
- mov ebp,eax
- rol eax,5
- pxor xmm3,xmm4
- movdqa XMMWORD PTR 64[esp],xmm7
- add edi,esi
- xor ebp,ecx
- movdqa xmm7,xmm6
- ror ebx,7
- paddd xmm6,xmm2
- add edi,eax
- pxor xmm3,xmm5
- add edx,DWORD PTR 52[esp]
- xor ebp,ebx
- mov esi,edi
- rol edi,5
- movdqa xmm5,xmm3
- movdqa XMMWORD PTR 32[esp],xmm6
- add edx,ebp
- xor esi,ebx
- ror eax,7
- add edx,edi
- pslld xmm3,2
- add ecx,DWORD PTR 56[esp]
- xor esi,eax
- psrld xmm5,30
- mov ebp,edx
- rol edx,5
- add ecx,esi
- xor ebp,eax
- ror edi,7
- add ecx,edx
- por xmm3,xmm5
- add ebx,DWORD PTR 60[esp]
- xor ebp,edi
- mov esi,ecx
- rol ecx,5
- add ebx,ebp
- xor esi,edi
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR [esp]
- xor esi,edx
- mov ebp,ebx
- rol ebx,5
- add eax,esi
- xor ebp,edx
- ror ecx,7
- paddd xmm7,xmm3
- add eax,ebx
- add edi,DWORD PTR 4[esp]
- xor ebp,ecx
- mov esi,eax
- movdqa XMMWORD PTR 48[esp],xmm7
- rol eax,5
- add edi,ebp
- xor esi,ecx
- ror ebx,7
- add edi,eax
- add edx,DWORD PTR 8[esp]
- xor esi,ebx
- mov ebp,edi
- rol edi,5
- add edx,esi
- xor ebp,ebx
- ror eax,7
- add edx,edi
- add ecx,DWORD PTR 12[esp]
- xor ebp,eax
- mov esi,edx
- rol edx,5
- add ecx,ebp
- xor esi,eax
- ror edi,7
- add ecx,edx
- mov ebp,DWORD PTR 196[esp]
- cmp ebp,DWORD PTR 200[esp]
- je $L007done
- movdqa xmm7,XMMWORD PTR 160[esp]
- movdqa xmm6,XMMWORD PTR 176[esp]
- movdqu xmm0,XMMWORD PTR [ebp]
- movdqu xmm1,XMMWORD PTR 16[ebp]
- movdqu xmm2,XMMWORD PTR 32[ebp]
- movdqu xmm3,XMMWORD PTR 48[ebp]
- add ebp,64
-DB 102,15,56,0,198
- mov DWORD PTR 196[esp],ebp
- movdqa XMMWORD PTR 96[esp],xmm7
- add ebx,DWORD PTR 16[esp]
- xor esi,edi
- mov ebp,ecx
- rol ecx,5
- add ebx,esi
- xor ebp,edi
- ror edx,7
-DB 102,15,56,0,206
- add ebx,ecx
- add eax,DWORD PTR 20[esp]
- xor ebp,edx
- mov esi,ebx
- paddd xmm0,xmm7
- rol ebx,5
- add eax,ebp
- xor esi,edx
- ror ecx,7
- movdqa XMMWORD PTR [esp],xmm0
- add eax,ebx
- add edi,DWORD PTR 24[esp]
- xor esi,ecx
- mov ebp,eax
- psubd xmm0,xmm7
- rol eax,5
- add edi,esi
- xor ebp,ecx
- ror ebx,7
- add edi,eax
- add edx,DWORD PTR 28[esp]
- xor ebp,ebx
- mov esi,edi
- rol edi,5
- add edx,ebp
- xor esi,ebx
- ror eax,7
- add edx,edi
- add ecx,DWORD PTR 32[esp]
- xor esi,eax
- mov ebp,edx
- rol edx,5
- add ecx,esi
- xor ebp,eax
- ror edi,7
-DB 102,15,56,0,214
- add ecx,edx
- add ebx,DWORD PTR 36[esp]
- xor ebp,edi
- mov esi,ecx
- paddd xmm1,xmm7
- rol ecx,5
- add ebx,ebp
- xor esi,edi
- ror edx,7
- movdqa XMMWORD PTR 16[esp],xmm1
- add ebx,ecx
- add eax,DWORD PTR 40[esp]
- xor esi,edx
- mov ebp,ebx
- psubd xmm1,xmm7
- rol ebx,5
- add eax,esi
- xor ebp,edx
- ror ecx,7
- add eax,ebx
- add edi,DWORD PTR 44[esp]
- xor ebp,ecx
- mov esi,eax
- rol eax,5
- add edi,ebp
- xor esi,ecx
- ror ebx,7
- add edi,eax
- add edx,DWORD PTR 48[esp]
- xor esi,ebx
- mov ebp,edi
- rol edi,5
- add edx,esi
- xor ebp,ebx
- ror eax,7
-DB 102,15,56,0,222
- add edx,edi
- add ecx,DWORD PTR 52[esp]
- xor ebp,eax
- mov esi,edx
- paddd xmm2,xmm7
- rol edx,5
- add ecx,ebp
- xor esi,eax
- ror edi,7
- movdqa XMMWORD PTR 32[esp],xmm2
- add ecx,edx
- add ebx,DWORD PTR 56[esp]
- xor esi,edi
- mov ebp,ecx
- psubd xmm2,xmm7
- rol ecx,5
- add ebx,esi
- xor ebp,edi
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR 60[esp]
- xor ebp,edx
- mov esi,ebx
- rol ebx,5
- add eax,ebp
- ror ecx,7
- add eax,ebx
- mov ebp,DWORD PTR 192[esp]
- add eax,DWORD PTR [ebp]
- add esi,DWORD PTR 4[ebp]
- add ecx,DWORD PTR 8[ebp]
- mov DWORD PTR [ebp],eax
- add edx,DWORD PTR 12[ebp]
- mov DWORD PTR 4[ebp],esi
- add edi,DWORD PTR 16[ebp]
- mov DWORD PTR 8[ebp],ecx
- mov ebx,ecx
- mov DWORD PTR 12[ebp],edx
- xor ebx,edx
- mov DWORD PTR 16[ebp],edi
- mov ebp,esi
- pshufd xmm4,xmm0,238
- and esi,ebx
- mov ebx,ebp
- jmp $L006loop
-ALIGN 16
-$L007done:
- add ebx,DWORD PTR 16[esp]
- xor esi,edi
- mov ebp,ecx
- rol ecx,5
- add ebx,esi
- xor ebp,edi
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR 20[esp]
- xor ebp,edx
- mov esi,ebx
- rol ebx,5
- add eax,ebp
- xor esi,edx
- ror ecx,7
- add eax,ebx
- add edi,DWORD PTR 24[esp]
- xor esi,ecx
- mov ebp,eax
- rol eax,5
- add edi,esi
- xor ebp,ecx
- ror ebx,7
- add edi,eax
- add edx,DWORD PTR 28[esp]
- xor ebp,ebx
- mov esi,edi
- rol edi,5
- add edx,ebp
- xor esi,ebx
- ror eax,7
- add edx,edi
- add ecx,DWORD PTR 32[esp]
- xor esi,eax
- mov ebp,edx
- rol edx,5
- add ecx,esi
- xor ebp,eax
- ror edi,7
- add ecx,edx
- add ebx,DWORD PTR 36[esp]
- xor ebp,edi
- mov esi,ecx
- rol ecx,5
- add ebx,ebp
- xor esi,edi
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR 40[esp]
- xor esi,edx
- mov ebp,ebx
- rol ebx,5
- add eax,esi
- xor ebp,edx
- ror ecx,7
- add eax,ebx
- add edi,DWORD PTR 44[esp]
- xor ebp,ecx
- mov esi,eax
- rol eax,5
- add edi,ebp
- xor esi,ecx
- ror ebx,7
- add edi,eax
- add edx,DWORD PTR 48[esp]
- xor esi,ebx
- mov ebp,edi
- rol edi,5
- add edx,esi
- xor ebp,ebx
- ror eax,7
- add edx,edi
- add ecx,DWORD PTR 52[esp]
- xor ebp,eax
- mov esi,edx
- rol edx,5
- add ecx,ebp
- xor esi,eax
- ror edi,7
- add ecx,edx
- add ebx,DWORD PTR 56[esp]
- xor esi,edi
- mov ebp,ecx
- rol ecx,5
- add ebx,esi
- xor ebp,edi
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR 60[esp]
- xor ebp,edx
- mov esi,ebx
- rol ebx,5
- add eax,ebp
- ror ecx,7
- add eax,ebx
- mov ebp,DWORD PTR 192[esp]
- add eax,DWORD PTR [ebp]
- mov esp,DWORD PTR 204[esp]
- add esi,DWORD PTR 4[ebp]
- add ecx,DWORD PTR 8[ebp]
- mov DWORD PTR [ebp],eax
- add edx,DWORD PTR 12[ebp]
- mov DWORD PTR 4[ebp],esi
- add edi,DWORD PTR 16[ebp]
- mov DWORD PTR 8[ebp],ecx
- mov DWORD PTR 12[ebp],edx
- mov DWORD PTR 16[ebp],edi
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-__sha1_block_data_order_ssse3 ENDP
-ALIGN 16
-__sha1_block_data_order_avx PROC PRIVATE
- push ebp
- push ebx
- push esi
- push edi
- call $L008pic_point
-$L008pic_point:
- pop ebp
- lea ebp,DWORD PTR ($LK_XX_XX-$L008pic_point)[ebp]
-$Lavx_shortcut::
- vzeroall
- vmovdqa xmm7,XMMWORD PTR [ebp]
- vmovdqa xmm0,XMMWORD PTR 16[ebp]
- vmovdqa xmm1,XMMWORD PTR 32[ebp]
- vmovdqa xmm2,XMMWORD PTR 48[ebp]
- vmovdqa xmm6,XMMWORD PTR 64[ebp]
- mov edi,DWORD PTR 20[esp]
- mov ebp,DWORD PTR 24[esp]
- mov edx,DWORD PTR 28[esp]
- mov esi,esp
- sub esp,208
- and esp,-64
- vmovdqa XMMWORD PTR 112[esp],xmm0
- vmovdqa XMMWORD PTR 128[esp],xmm1
- vmovdqa XMMWORD PTR 144[esp],xmm2
- shl edx,6
- vmovdqa XMMWORD PTR 160[esp],xmm7
- add edx,ebp
- vmovdqa XMMWORD PTR 176[esp],xmm6
- add ebp,64
- mov DWORD PTR 192[esp],edi
- mov DWORD PTR 196[esp],ebp
- mov DWORD PTR 200[esp],edx
- mov DWORD PTR 204[esp],esi
- mov eax,DWORD PTR [edi]
- mov ebx,DWORD PTR 4[edi]
- mov ecx,DWORD PTR 8[edi]
- mov edx,DWORD PTR 12[edi]
- mov edi,DWORD PTR 16[edi]
- mov esi,ebx
- vmovdqu xmm0,XMMWORD PTR [ebp-64]
- vmovdqu xmm1,XMMWORD PTR [ebp-48]
- vmovdqu xmm2,XMMWORD PTR [ebp-32]
- vmovdqu xmm3,XMMWORD PTR [ebp-16]
- vpshufb xmm0,xmm0,xmm6
- vpshufb xmm1,xmm1,xmm6
- vpshufb xmm2,xmm2,xmm6
- vmovdqa XMMWORD PTR 96[esp],xmm7
- vpshufb xmm3,xmm3,xmm6
- vpaddd xmm4,xmm0,xmm7
- vpaddd xmm5,xmm1,xmm7
- vpaddd xmm6,xmm2,xmm7
- vmovdqa XMMWORD PTR [esp],xmm4
- mov ebp,ecx
- vmovdqa XMMWORD PTR 16[esp],xmm5
- xor ebp,edx
- vmovdqa XMMWORD PTR 32[esp],xmm6
- and esi,ebp
- jmp $L009loop
-ALIGN 16
-$L009loop:
- shrd ebx,ebx,2
- xor esi,edx
- vpalignr xmm4,xmm1,xmm0,8
- mov ebp,eax
- add edi,DWORD PTR [esp]
- vpaddd xmm7,xmm7,xmm3
- vmovdqa XMMWORD PTR 64[esp],xmm0
- xor ebx,ecx
- shld eax,eax,5
- vpsrldq xmm6,xmm3,4
- add edi,esi
- and ebp,ebx
- vpxor xmm4,xmm4,xmm0
- xor ebx,ecx
- add edi,eax
- vpxor xmm6,xmm6,xmm2
- shrd eax,eax,7
- xor ebp,ecx
- vmovdqa XMMWORD PTR 48[esp],xmm7
- mov esi,edi
- add edx,DWORD PTR 4[esp]
- vpxor xmm4,xmm4,xmm6
- xor eax,ebx
- shld edi,edi,5
- add edx,ebp
- and esi,eax
- vpsrld xmm6,xmm4,31
- xor eax,ebx
- add edx,edi
- shrd edi,edi,7
- xor esi,ebx
- vpslldq xmm0,xmm4,12
- vpaddd xmm4,xmm4,xmm4
- mov ebp,edx
- add ecx,DWORD PTR 8[esp]
- xor edi,eax
- shld edx,edx,5
- vpsrld xmm7,xmm0,30
- vpor xmm4,xmm4,xmm6
- add ecx,esi
- and ebp,edi
- xor edi,eax
- add ecx,edx
- vpslld xmm0,xmm0,2
- shrd edx,edx,7
- xor ebp,eax
- vpxor xmm4,xmm4,xmm7
- mov esi,ecx
- add ebx,DWORD PTR 12[esp]
- xor edx,edi
- shld ecx,ecx,5
- vpxor xmm4,xmm4,xmm0
- add ebx,ebp
- and esi,edx
- vmovdqa xmm0,XMMWORD PTR 96[esp]
- xor edx,edi
- add ebx,ecx
- shrd ecx,ecx,7
- xor esi,edi
- vpalignr xmm5,xmm2,xmm1,8
- mov ebp,ebx
- add eax,DWORD PTR 16[esp]
- vpaddd xmm0,xmm0,xmm4
- vmovdqa XMMWORD PTR 80[esp],xmm1
- xor ecx,edx
- shld ebx,ebx,5
- vpsrldq xmm7,xmm4,4
- add eax,esi
- and ebp,ecx
- vpxor xmm5,xmm5,xmm1
- xor ecx,edx
- add eax,ebx
- vpxor xmm7,xmm7,xmm3
- shrd ebx,ebx,7
- xor ebp,edx
- vmovdqa XMMWORD PTR [esp],xmm0
- mov esi,eax
- add edi,DWORD PTR 20[esp]
- vpxor xmm5,xmm5,xmm7
- xor ebx,ecx
- shld eax,eax,5
- add edi,ebp
- and esi,ebx
- vpsrld xmm7,xmm5,31
- xor ebx,ecx
- add edi,eax
- shrd eax,eax,7
- xor esi,ecx
- vpslldq xmm1,xmm5,12
- vpaddd xmm5,xmm5,xmm5
- mov ebp,edi
- add edx,DWORD PTR 24[esp]
- xor eax,ebx
- shld edi,edi,5
- vpsrld xmm0,xmm1,30
- vpor xmm5,xmm5,xmm7
- add edx,esi
- and ebp,eax
- xor eax,ebx
- add edx,edi
- vpslld xmm1,xmm1,2
- shrd edi,edi,7
- xor ebp,ebx
- vpxor xmm5,xmm5,xmm0
- mov esi,edx
- add ecx,DWORD PTR 28[esp]
- xor edi,eax
- shld edx,edx,5
- vpxor xmm5,xmm5,xmm1
- add ecx,ebp
- and esi,edi
- vmovdqa xmm1,XMMWORD PTR 112[esp]
- xor edi,eax
- add ecx,edx
- shrd edx,edx,7
- xor esi,eax
- vpalignr xmm6,xmm3,xmm2,8
- mov ebp,ecx
- add ebx,DWORD PTR 32[esp]
- vpaddd xmm1,xmm1,xmm5
- vmovdqa XMMWORD PTR 96[esp],xmm2
- xor edx,edi
- shld ecx,ecx,5
- vpsrldq xmm0,xmm5,4
- add ebx,esi
- and ebp,edx
- vpxor xmm6,xmm6,xmm2
- xor edx,edi
- add ebx,ecx
- vpxor xmm0,xmm0,xmm4
- shrd ecx,ecx,7
- xor ebp,edi
- vmovdqa XMMWORD PTR 16[esp],xmm1
- mov esi,ebx
- add eax,DWORD PTR 36[esp]
- vpxor xmm6,xmm6,xmm0
- xor ecx,edx
- shld ebx,ebx,5
- add eax,ebp
- and esi,ecx
- vpsrld xmm0,xmm6,31
- xor ecx,edx
- add eax,ebx
- shrd ebx,ebx,7
- xor esi,edx
- vpslldq xmm2,xmm6,12
- vpaddd xmm6,xmm6,xmm6
- mov ebp,eax
- add edi,DWORD PTR 40[esp]
- xor ebx,ecx
- shld eax,eax,5
- vpsrld xmm1,xmm2,30
- vpor xmm6,xmm6,xmm0
- add edi,esi
- and ebp,ebx
- xor ebx,ecx
- add edi,eax
- vpslld xmm2,xmm2,2
- vmovdqa xmm0,XMMWORD PTR 64[esp]
- shrd eax,eax,7
- xor ebp,ecx
- vpxor xmm6,xmm6,xmm1
- mov esi,edi
- add edx,DWORD PTR 44[esp]
- xor eax,ebx
- shld edi,edi,5
- vpxor xmm6,xmm6,xmm2
- add edx,ebp
- and esi,eax
- vmovdqa xmm2,XMMWORD PTR 112[esp]
- xor eax,ebx
- add edx,edi
- shrd edi,edi,7
- xor esi,ebx
- vpalignr xmm7,xmm4,xmm3,8
- mov ebp,edx
- add ecx,DWORD PTR 48[esp]
- vpaddd xmm2,xmm2,xmm6
- vmovdqa XMMWORD PTR 64[esp],xmm3
- xor edi,eax
- shld edx,edx,5
- vpsrldq xmm1,xmm6,4
- add ecx,esi
- and ebp,edi
- vpxor xmm7,xmm7,xmm3
- xor edi,eax
- add ecx,edx
- vpxor xmm1,xmm1,xmm5
- shrd edx,edx,7
- xor ebp,eax
- vmovdqa XMMWORD PTR 32[esp],xmm2
- mov esi,ecx
- add ebx,DWORD PTR 52[esp]
- vpxor xmm7,xmm7,xmm1
- xor edx,edi
- shld ecx,ecx,5
- add ebx,ebp
- and esi,edx
- vpsrld xmm1,xmm7,31
- xor edx,edi
- add ebx,ecx
- shrd ecx,ecx,7
- xor esi,edi
- vpslldq xmm3,xmm7,12
- vpaddd xmm7,xmm7,xmm7
- mov ebp,ebx
- add eax,DWORD PTR 56[esp]
- xor ecx,edx
- shld ebx,ebx,5
- vpsrld xmm2,xmm3,30
- vpor xmm7,xmm7,xmm1
- add eax,esi
- and ebp,ecx
- xor ecx,edx
- add eax,ebx
- vpslld xmm3,xmm3,2
- vmovdqa xmm1,XMMWORD PTR 80[esp]
- shrd ebx,ebx,7
- xor ebp,edx
- vpxor xmm7,xmm7,xmm2
- mov esi,eax
- add edi,DWORD PTR 60[esp]
- xor ebx,ecx
- shld eax,eax,5
- vpxor xmm7,xmm7,xmm3
- add edi,ebp
- and esi,ebx
- vmovdqa xmm3,XMMWORD PTR 112[esp]
- xor ebx,ecx
- add edi,eax
- vpalignr xmm2,xmm7,xmm6,8
- vpxor xmm0,xmm0,xmm4
- shrd eax,eax,7
- xor esi,ecx
- mov ebp,edi
- add edx,DWORD PTR [esp]
- vpxor xmm0,xmm0,xmm1
- vmovdqa XMMWORD PTR 80[esp],xmm4
- xor eax,ebx
- shld edi,edi,5
- vmovdqa xmm4,xmm3
- vpaddd xmm3,xmm3,xmm7
- add edx,esi
- and ebp,eax
- vpxor xmm0,xmm0,xmm2
- xor eax,ebx
- add edx,edi
- shrd edi,edi,7
- xor ebp,ebx
- vpsrld xmm2,xmm0,30
- vmovdqa XMMWORD PTR 48[esp],xmm3
- mov esi,edx
- add ecx,DWORD PTR 4[esp]
- xor edi,eax
- shld edx,edx,5
- vpslld xmm0,xmm0,2
- add ecx,ebp
- and esi,edi
- xor edi,eax
- add ecx,edx
- shrd edx,edx,7
- xor esi,eax
- mov ebp,ecx
- add ebx,DWORD PTR 8[esp]
- vpor xmm0,xmm0,xmm2
- xor edx,edi
- shld ecx,ecx,5
- vmovdqa xmm2,XMMWORD PTR 96[esp]
- add ebx,esi
- and ebp,edx
- xor edx,edi
- add ebx,ecx
- add eax,DWORD PTR 12[esp]
- xor ebp,edi
- mov esi,ebx
- shld ebx,ebx,5
- add eax,ebp
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- vpalignr xmm3,xmm0,xmm7,8
- vpxor xmm1,xmm1,xmm5
- add edi,DWORD PTR 16[esp]
- xor esi,ecx
- mov ebp,eax
- shld eax,eax,5
- vpxor xmm1,xmm1,xmm2
- vmovdqa XMMWORD PTR 96[esp],xmm5
- add edi,esi
- xor ebp,ecx
- vmovdqa xmm5,xmm4
- vpaddd xmm4,xmm4,xmm0
- shrd ebx,ebx,7
- add edi,eax
- vpxor xmm1,xmm1,xmm3
- add edx,DWORD PTR 20[esp]
- xor ebp,ebx
- mov esi,edi
- shld edi,edi,5
- vpsrld xmm3,xmm1,30
- vmovdqa XMMWORD PTR [esp],xmm4
- add edx,ebp
- xor esi,ebx
- shrd eax,eax,7
- add edx,edi
- vpslld xmm1,xmm1,2
- add ecx,DWORD PTR 24[esp]
- xor esi,eax
- mov ebp,edx
- shld edx,edx,5
- add ecx,esi
- xor ebp,eax
- shrd edi,edi,7
- add ecx,edx
- vpor xmm1,xmm1,xmm3
- add ebx,DWORD PTR 28[esp]
- xor ebp,edi
- vmovdqa xmm3,XMMWORD PTR 64[esp]
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,ebp
- xor esi,edi
- shrd edx,edx,7
- add ebx,ecx
- vpalignr xmm4,xmm1,xmm0,8
- vpxor xmm2,xmm2,xmm6
- add eax,DWORD PTR 32[esp]
- xor esi,edx
- mov ebp,ebx
- shld ebx,ebx,5
- vpxor xmm2,xmm2,xmm3
- vmovdqa XMMWORD PTR 64[esp],xmm6
- add eax,esi
- xor ebp,edx
- vmovdqa xmm6,XMMWORD PTR 128[esp]
- vpaddd xmm5,xmm5,xmm1
- shrd ecx,ecx,7
- add eax,ebx
- vpxor xmm2,xmm2,xmm4
- add edi,DWORD PTR 36[esp]
- xor ebp,ecx
- mov esi,eax
- shld eax,eax,5
- vpsrld xmm4,xmm2,30
- vmovdqa XMMWORD PTR 16[esp],xmm5
- add edi,ebp
- xor esi,ecx
- shrd ebx,ebx,7
- add edi,eax
- vpslld xmm2,xmm2,2
- add edx,DWORD PTR 40[esp]
- xor esi,ebx
- mov ebp,edi
- shld edi,edi,5
- add edx,esi
- xor ebp,ebx
- shrd eax,eax,7
- add edx,edi
- vpor xmm2,xmm2,xmm4
- add ecx,DWORD PTR 44[esp]
- xor ebp,eax
- vmovdqa xmm4,XMMWORD PTR 80[esp]
- mov esi,edx
- shld edx,edx,5
- add ecx,ebp
- xor esi,eax
- shrd edi,edi,7
- add ecx,edx
- vpalignr xmm5,xmm2,xmm1,8
- vpxor xmm3,xmm3,xmm7
- add ebx,DWORD PTR 48[esp]
- xor esi,edi
- mov ebp,ecx
- shld ecx,ecx,5
- vpxor xmm3,xmm3,xmm4
- vmovdqa XMMWORD PTR 80[esp],xmm7
- add ebx,esi
- xor ebp,edi
- vmovdqa xmm7,xmm6
- vpaddd xmm6,xmm6,xmm2
- shrd edx,edx,7
- add ebx,ecx
- vpxor xmm3,xmm3,xmm5
- add eax,DWORD PTR 52[esp]
- xor ebp,edx
- mov esi,ebx
- shld ebx,ebx,5
- vpsrld xmm5,xmm3,30
- vmovdqa XMMWORD PTR 32[esp],xmm6
- add eax,ebp
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- vpslld xmm3,xmm3,2
- add edi,DWORD PTR 56[esp]
- xor esi,ecx
- mov ebp,eax
- shld eax,eax,5
- add edi,esi
- xor ebp,ecx
- shrd ebx,ebx,7
- add edi,eax
- vpor xmm3,xmm3,xmm5
- add edx,DWORD PTR 60[esp]
- xor ebp,ebx
- vmovdqa xmm5,XMMWORD PTR 96[esp]
- mov esi,edi
- shld edi,edi,5
- add edx,ebp
- xor esi,ebx
- shrd eax,eax,7
- add edx,edi
- vpalignr xmm6,xmm3,xmm2,8
- vpxor xmm4,xmm4,xmm0
- add ecx,DWORD PTR [esp]
- xor esi,eax
- mov ebp,edx
- shld edx,edx,5
- vpxor xmm4,xmm4,xmm5
- vmovdqa XMMWORD PTR 96[esp],xmm0
- add ecx,esi
- xor ebp,eax
- vmovdqa xmm0,xmm7
- vpaddd xmm7,xmm7,xmm3
- shrd edi,edi,7
- add ecx,edx
- vpxor xmm4,xmm4,xmm6
- add ebx,DWORD PTR 4[esp]
- xor ebp,edi
- mov esi,ecx
- shld ecx,ecx,5
- vpsrld xmm6,xmm4,30
- vmovdqa XMMWORD PTR 48[esp],xmm7
- add ebx,ebp
- xor esi,edi
- shrd edx,edx,7
- add ebx,ecx
- vpslld xmm4,xmm4,2
- add eax,DWORD PTR 8[esp]
- xor esi,edx
- mov ebp,ebx
- shld ebx,ebx,5
- add eax,esi
- xor ebp,edx
- shrd ecx,ecx,7
- add eax,ebx
- vpor xmm4,xmm4,xmm6
- add edi,DWORD PTR 12[esp]
- xor ebp,ecx
- vmovdqa xmm6,XMMWORD PTR 64[esp]
- mov esi,eax
- shld eax,eax,5
- add edi,ebp
- xor esi,ecx
- shrd ebx,ebx,7
- add edi,eax
- vpalignr xmm7,xmm4,xmm3,8
- vpxor xmm5,xmm5,xmm1
- add edx,DWORD PTR 16[esp]
- xor esi,ebx
- mov ebp,edi
- shld edi,edi,5
- vpxor xmm5,xmm5,xmm6
- vmovdqa XMMWORD PTR 64[esp],xmm1
- add edx,esi
- xor ebp,ebx
- vmovdqa xmm1,xmm0
- vpaddd xmm0,xmm0,xmm4
- shrd eax,eax,7
- add edx,edi
- vpxor xmm5,xmm5,xmm7
- add ecx,DWORD PTR 20[esp]
- xor ebp,eax
- mov esi,edx
- shld edx,edx,5
- vpsrld xmm7,xmm5,30
- vmovdqa XMMWORD PTR [esp],xmm0
- add ecx,ebp
- xor esi,eax
- shrd edi,edi,7
- add ecx,edx
- vpslld xmm5,xmm5,2
- add ebx,DWORD PTR 24[esp]
- xor esi,edi
- mov ebp,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor ebp,edi
- shrd edx,edx,7
- add ebx,ecx
- vpor xmm5,xmm5,xmm7
- add eax,DWORD PTR 28[esp]
- vmovdqa xmm7,XMMWORD PTR 80[esp]
- shrd ecx,ecx,7
- mov esi,ebx
- xor ebp,edx
- shld ebx,ebx,5
- add eax,ebp
- xor esi,ecx
- xor ecx,edx
- add eax,ebx
- vpalignr xmm0,xmm5,xmm4,8
- vpxor xmm6,xmm6,xmm2
- add edi,DWORD PTR 32[esp]
- and esi,ecx
- xor ecx,edx
- shrd ebx,ebx,7
- vpxor xmm6,xmm6,xmm7
- vmovdqa XMMWORD PTR 80[esp],xmm2
- mov ebp,eax
- xor esi,ecx
- vmovdqa xmm2,xmm1
- vpaddd xmm1,xmm1,xmm5
- shld eax,eax,5
- add edi,esi
- vpxor xmm6,xmm6,xmm0
- xor ebp,ebx
- xor ebx,ecx
- add edi,eax
- add edx,DWORD PTR 36[esp]
- vpsrld xmm0,xmm6,30
- vmovdqa XMMWORD PTR 16[esp],xmm1
- and ebp,ebx
- xor ebx,ecx
- shrd eax,eax,7
- mov esi,edi
- vpslld xmm6,xmm6,2
- xor ebp,ebx
- shld edi,edi,5
- add edx,ebp
- xor esi,eax
- xor eax,ebx
- add edx,edi
- add ecx,DWORD PTR 40[esp]
- and esi,eax
- vpor xmm6,xmm6,xmm0
- xor eax,ebx
- shrd edi,edi,7
- vmovdqa xmm0,XMMWORD PTR 96[esp]
- mov ebp,edx
- xor esi,eax
- shld edx,edx,5
- add ecx,esi
- xor ebp,edi
- xor edi,eax
- add ecx,edx
- add ebx,DWORD PTR 44[esp]
- and ebp,edi
- xor edi,eax
- shrd edx,edx,7
- mov esi,ecx
- xor ebp,edi
- shld ecx,ecx,5
- add ebx,ebp
- xor esi,edx
- xor edx,edi
- add ebx,ecx
- vpalignr xmm1,xmm6,xmm5,8
- vpxor xmm7,xmm7,xmm3
- add eax,DWORD PTR 48[esp]
- and esi,edx
- xor edx,edi
- shrd ecx,ecx,7
- vpxor xmm7,xmm7,xmm0
- vmovdqa XMMWORD PTR 96[esp],xmm3
- mov ebp,ebx
- xor esi,edx
- vmovdqa xmm3,XMMWORD PTR 144[esp]
- vpaddd xmm2,xmm2,xmm6
- shld ebx,ebx,5
- add eax,esi
- vpxor xmm7,xmm7,xmm1
- xor ebp,ecx
- xor ecx,edx
- add eax,ebx
- add edi,DWORD PTR 52[esp]
- vpsrld xmm1,xmm7,30
- vmovdqa XMMWORD PTR 32[esp],xmm2
- and ebp,ecx
- xor ecx,edx
- shrd ebx,ebx,7
- mov esi,eax
- vpslld xmm7,xmm7,2
- xor ebp,ecx
- shld eax,eax,5
- add edi,ebp
- xor esi,ebx
- xor ebx,ecx
- add edi,eax
- add edx,DWORD PTR 56[esp]
- and esi,ebx
- vpor xmm7,xmm7,xmm1
- xor ebx,ecx
- shrd eax,eax,7
- vmovdqa xmm1,XMMWORD PTR 64[esp]
- mov ebp,edi
- xor esi,ebx
- shld edi,edi,5
- add edx,esi
- xor ebp,eax
- xor eax,ebx
- add edx,edi
- add ecx,DWORD PTR 60[esp]
- and ebp,eax
- xor eax,ebx
- shrd edi,edi,7
- mov esi,edx
- xor ebp,eax
- shld edx,edx,5
- add ecx,ebp
- xor esi,edi
- xor edi,eax
- add ecx,edx
- vpalignr xmm2,xmm7,xmm6,8
- vpxor xmm0,xmm0,xmm4
- add ebx,DWORD PTR [esp]
- and esi,edi
- xor edi,eax
- shrd edx,edx,7
- vpxor xmm0,xmm0,xmm1
- vmovdqa XMMWORD PTR 64[esp],xmm4
- mov ebp,ecx
- xor esi,edi
- vmovdqa xmm4,xmm3
- vpaddd xmm3,xmm3,xmm7
- shld ecx,ecx,5
- add ebx,esi
- vpxor xmm0,xmm0,xmm2
- xor ebp,edx
- xor edx,edi
- add ebx,ecx
- add eax,DWORD PTR 4[esp]
- vpsrld xmm2,xmm0,30
- vmovdqa XMMWORD PTR 48[esp],xmm3
- and ebp,edx
- xor edx,edi
- shrd ecx,ecx,7
- mov esi,ebx
- vpslld xmm0,xmm0,2
- xor ebp,edx
- shld ebx,ebx,5
- add eax,ebp
- xor esi,ecx
- xor ecx,edx
- add eax,ebx
- add edi,DWORD PTR 8[esp]
- and esi,ecx
- vpor xmm0,xmm0,xmm2
- xor ecx,edx
- shrd ebx,ebx,7
- vmovdqa xmm2,XMMWORD PTR 80[esp]
- mov ebp,eax
- xor esi,ecx
- shld eax,eax,5
- add edi,esi
- xor ebp,ebx
- xor ebx,ecx
- add edi,eax
- add edx,DWORD PTR 12[esp]
- and ebp,ebx
- xor ebx,ecx
- shrd eax,eax,7
- mov esi,edi
- xor ebp,ebx
- shld edi,edi,5
- add edx,ebp
- xor esi,eax
- xor eax,ebx
- add edx,edi
- vpalignr xmm3,xmm0,xmm7,8
- vpxor xmm1,xmm1,xmm5
- add ecx,DWORD PTR 16[esp]
- and esi,eax
- xor eax,ebx
- shrd edi,edi,7
- vpxor xmm1,xmm1,xmm2
- vmovdqa XMMWORD PTR 80[esp],xmm5
- mov ebp,edx
- xor esi,eax
- vmovdqa xmm5,xmm4
- vpaddd xmm4,xmm4,xmm0
- shld edx,edx,5
- add ecx,esi
- vpxor xmm1,xmm1,xmm3
- xor ebp,edi
- xor edi,eax
- add ecx,edx
- add ebx,DWORD PTR 20[esp]
- vpsrld xmm3,xmm1,30
- vmovdqa XMMWORD PTR [esp],xmm4
- and ebp,edi
- xor edi,eax
- shrd edx,edx,7
- mov esi,ecx
- vpslld xmm1,xmm1,2
- xor ebp,edi
- shld ecx,ecx,5
- add ebx,ebp
- xor esi,edx
- xor edx,edi
- add ebx,ecx
- add eax,DWORD PTR 24[esp]
- and esi,edx
- vpor xmm1,xmm1,xmm3
- xor edx,edi
- shrd ecx,ecx,7
- vmovdqa xmm3,XMMWORD PTR 96[esp]
- mov ebp,ebx
- xor esi,edx
- shld ebx,ebx,5
- add eax,esi
- xor ebp,ecx
- xor ecx,edx
- add eax,ebx
- add edi,DWORD PTR 28[esp]
- and ebp,ecx
- xor ecx,edx
- shrd ebx,ebx,7
- mov esi,eax
- xor ebp,ecx
- shld eax,eax,5
- add edi,ebp
- xor esi,ebx
- xor ebx,ecx
- add edi,eax
- vpalignr xmm4,xmm1,xmm0,8
- vpxor xmm2,xmm2,xmm6
- add edx,DWORD PTR 32[esp]
- and esi,ebx
- xor ebx,ecx
- shrd eax,eax,7
- vpxor xmm2,xmm2,xmm3
- vmovdqa XMMWORD PTR 96[esp],xmm6
- mov ebp,edi
- xor esi,ebx
- vmovdqa xmm6,xmm5
- vpaddd xmm5,xmm5,xmm1
- shld edi,edi,5
- add edx,esi
- vpxor xmm2,xmm2,xmm4
- xor ebp,eax
- xor eax,ebx
- add edx,edi
- add ecx,DWORD PTR 36[esp]
- vpsrld xmm4,xmm2,30
- vmovdqa XMMWORD PTR 16[esp],xmm5
- and ebp,eax
- xor eax,ebx
- shrd edi,edi,7
- mov esi,edx
- vpslld xmm2,xmm2,2
- xor ebp,eax
- shld edx,edx,5
- add ecx,ebp
- xor esi,edi
- xor edi,eax
- add ecx,edx
- add ebx,DWORD PTR 40[esp]
- and esi,edi
- vpor xmm2,xmm2,xmm4
- xor edi,eax
- shrd edx,edx,7
- vmovdqa xmm4,XMMWORD PTR 64[esp]
- mov ebp,ecx
- xor esi,edi
- shld ecx,ecx,5
- add ebx,esi
- xor ebp,edx
- xor edx,edi
- add ebx,ecx
- add eax,DWORD PTR 44[esp]
- and ebp,edx
- xor edx,edi
- shrd ecx,ecx,7
- mov esi,ebx
- xor ebp,edx
- shld ebx,ebx,5
- add eax,ebp
- xor esi,edx
- add eax,ebx
- vpalignr xmm5,xmm2,xmm1,8
- vpxor xmm3,xmm3,xmm7
- add edi,DWORD PTR 48[esp]
- xor esi,ecx
- mov ebp,eax
- shld eax,eax,5
- vpxor xmm3,xmm3,xmm4
- vmovdqa XMMWORD PTR 64[esp],xmm7
- add edi,esi
- xor ebp,ecx
- vmovdqa xmm7,xmm6
- vpaddd xmm6,xmm6,xmm2
- shrd ebx,ebx,7
- add edi,eax
- vpxor xmm3,xmm3,xmm5
- add edx,DWORD PTR 52[esp]
- xor ebp,ebx
- mov esi,edi
- shld edi,edi,5
- vpsrld xmm5,xmm3,30
- vmovdqa XMMWORD PTR 32[esp],xmm6
- add edx,ebp
- xor esi,ebx
- shrd eax,eax,7
- add edx,edi
- vpslld xmm3,xmm3,2
- add ecx,DWORD PTR 56[esp]
- xor esi,eax
- mov ebp,edx
- shld edx,edx,5
- add ecx,esi
- xor ebp,eax
- shrd edi,edi,7
- add ecx,edx
- vpor xmm3,xmm3,xmm5
- add ebx,DWORD PTR 60[esp]
- xor ebp,edi
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,ebp
- xor esi,edi
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR [esp]
- vpaddd xmm7,xmm7,xmm3
- xor esi,edx
- mov ebp,ebx
- shld ebx,ebx,5
- add eax,esi
- vmovdqa XMMWORD PTR 48[esp],xmm7
- xor ebp,edx
- shrd ecx,ecx,7
- add eax,ebx
- add edi,DWORD PTR 4[esp]
- xor ebp,ecx
- mov esi,eax
- shld eax,eax,5
- add edi,ebp
- xor esi,ecx
- shrd ebx,ebx,7
- add edi,eax
- add edx,DWORD PTR 8[esp]
- xor esi,ebx
- mov ebp,edi
- shld edi,edi,5
- add edx,esi
- xor ebp,ebx
- shrd eax,eax,7
- add edx,edi
- add ecx,DWORD PTR 12[esp]
- xor ebp,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,ebp
- xor esi,eax
- shrd edi,edi,7
- add ecx,edx
- mov ebp,DWORD PTR 196[esp]
- cmp ebp,DWORD PTR 200[esp]
- je $L010done
- vmovdqa xmm7,XMMWORD PTR 160[esp]
- vmovdqa xmm6,XMMWORD PTR 176[esp]
- vmovdqu xmm0,XMMWORD PTR [ebp]
- vmovdqu xmm1,XMMWORD PTR 16[ebp]
- vmovdqu xmm2,XMMWORD PTR 32[ebp]
- vmovdqu xmm3,XMMWORD PTR 48[ebp]
- add ebp,64
- vpshufb xmm0,xmm0,xmm6
- mov DWORD PTR 196[esp],ebp
- vmovdqa XMMWORD PTR 96[esp],xmm7
- add ebx,DWORD PTR 16[esp]
- xor esi,edi
- vpshufb xmm1,xmm1,xmm6
- mov ebp,ecx
- shld ecx,ecx,5
- vpaddd xmm4,xmm0,xmm7
- add ebx,esi
- xor ebp,edi
- shrd edx,edx,7
- add ebx,ecx
- vmovdqa XMMWORD PTR [esp],xmm4
- add eax,DWORD PTR 20[esp]
- xor ebp,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,ebp
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add edi,DWORD PTR 24[esp]
- xor esi,ecx
- mov ebp,eax
- shld eax,eax,5
- add edi,esi
- xor ebp,ecx
- shrd ebx,ebx,7
- add edi,eax
- add edx,DWORD PTR 28[esp]
- xor ebp,ebx
- mov esi,edi
- shld edi,edi,5
- add edx,ebp
- xor esi,ebx
- shrd eax,eax,7
- add edx,edi
- add ecx,DWORD PTR 32[esp]
- xor esi,eax
- vpshufb xmm2,xmm2,xmm6
- mov ebp,edx
- shld edx,edx,5
- vpaddd xmm5,xmm1,xmm7
- add ecx,esi
- xor ebp,eax
- shrd edi,edi,7
- add ecx,edx
- vmovdqa XMMWORD PTR 16[esp],xmm5
- add ebx,DWORD PTR 36[esp]
- xor ebp,edi
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,ebp
- xor esi,edi
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR 40[esp]
- xor esi,edx
- mov ebp,ebx
- shld ebx,ebx,5
- add eax,esi
- xor ebp,edx
- shrd ecx,ecx,7
- add eax,ebx
- add edi,DWORD PTR 44[esp]
- xor ebp,ecx
- mov esi,eax
- shld eax,eax,5
- add edi,ebp
- xor esi,ecx
- shrd ebx,ebx,7
- add edi,eax
- add edx,DWORD PTR 48[esp]
- xor esi,ebx
- vpshufb xmm3,xmm3,xmm6
- mov ebp,edi
- shld edi,edi,5
- vpaddd xmm6,xmm2,xmm7
- add edx,esi
- xor ebp,ebx
- shrd eax,eax,7
- add edx,edi
- vmovdqa XMMWORD PTR 32[esp],xmm6
- add ecx,DWORD PTR 52[esp]
- xor ebp,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,ebp
- xor esi,eax
- shrd edi,edi,7
- add ecx,edx
- add ebx,DWORD PTR 56[esp]
- xor esi,edi
- mov ebp,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor ebp,edi
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR 60[esp]
- xor ebp,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,ebp
- shrd ecx,ecx,7
- add eax,ebx
- mov ebp,DWORD PTR 192[esp]
- add eax,DWORD PTR [ebp]
- add esi,DWORD PTR 4[ebp]
- add ecx,DWORD PTR 8[ebp]
- mov DWORD PTR [ebp],eax
- add edx,DWORD PTR 12[ebp]
- mov DWORD PTR 4[ebp],esi
- add edi,DWORD PTR 16[ebp]
- mov ebx,ecx
- mov DWORD PTR 8[ebp],ecx
- xor ebx,edx
- mov DWORD PTR 12[ebp],edx
- mov DWORD PTR 16[ebp],edi
- mov ebp,esi
- and esi,ebx
- mov ebx,ebp
- jmp $L009loop
-ALIGN 16
-$L010done:
- add ebx,DWORD PTR 16[esp]
- xor esi,edi
- mov ebp,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor ebp,edi
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR 20[esp]
- xor ebp,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,ebp
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add edi,DWORD PTR 24[esp]
- xor esi,ecx
- mov ebp,eax
- shld eax,eax,5
- add edi,esi
- xor ebp,ecx
- shrd ebx,ebx,7
- add edi,eax
- add edx,DWORD PTR 28[esp]
- xor ebp,ebx
- mov esi,edi
- shld edi,edi,5
- add edx,ebp
- xor esi,ebx
- shrd eax,eax,7
- add edx,edi
- add ecx,DWORD PTR 32[esp]
- xor esi,eax
- mov ebp,edx
- shld edx,edx,5
- add ecx,esi
- xor ebp,eax
- shrd edi,edi,7
- add ecx,edx
- add ebx,DWORD PTR 36[esp]
- xor ebp,edi
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,ebp
- xor esi,edi
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR 40[esp]
- xor esi,edx
- mov ebp,ebx
- shld ebx,ebx,5
- add eax,esi
- xor ebp,edx
- shrd ecx,ecx,7
- add eax,ebx
- add edi,DWORD PTR 44[esp]
- xor ebp,ecx
- mov esi,eax
- shld eax,eax,5
- add edi,ebp
- xor esi,ecx
- shrd ebx,ebx,7
- add edi,eax
- add edx,DWORD PTR 48[esp]
- xor esi,ebx
- mov ebp,edi
- shld edi,edi,5
- add edx,esi
- xor ebp,ebx
- shrd eax,eax,7
- add edx,edi
- add ecx,DWORD PTR 52[esp]
- xor ebp,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,ebp
- xor esi,eax
- shrd edi,edi,7
- add ecx,edx
- add ebx,DWORD PTR 56[esp]
- xor esi,edi
- mov ebp,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor ebp,edi
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR 60[esp]
- xor ebp,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,ebp
- shrd ecx,ecx,7
- add eax,ebx
- vzeroall
- mov ebp,DWORD PTR 192[esp]
- add eax,DWORD PTR [ebp]
- mov esp,DWORD PTR 204[esp]
- add esi,DWORD PTR 4[ebp]
- add ecx,DWORD PTR 8[ebp]
- mov DWORD PTR [ebp],eax
- add edx,DWORD PTR 12[ebp]
- mov DWORD PTR 4[ebp],esi
- add edi,DWORD PTR 16[ebp]
- mov DWORD PTR 8[ebp],ecx
- mov DWORD PTR 12[ebp],edx
- mov DWORD PTR 16[ebp],edi
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-__sha1_block_data_order_avx ENDP
-ALIGN 64
-$LK_XX_XX::
-DD 1518500249,1518500249,1518500249,1518500249
-DD 1859775393,1859775393,1859775393,1859775393
-DD 2400959708,2400959708,2400959708,2400959708
-DD 3395469782,3395469782,3395469782,3395469782
-DD 66051,67438087,134810123,202182159
-DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
-DB 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115
-DB 102,111,114,109,32,102,111,114,32,120,56,54,44,32,67,82
-DB 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112
-DB 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
-.text$ ENDS
-.bss SEGMENT 'BSS'
-COMM _OPENSSL_ia32cap_P:DWORD:4
-.bss ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+;EXTERN _OPENSSL_ia32cap_P:NEAR
+ALIGN 16
+_sha1_block_data_order PROC PUBLIC
+$L_sha1_block_data_order_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ call $L000pic_point
+$L000pic_point:
+ pop ebp
+ lea esi,DWORD PTR _OPENSSL_ia32cap_P
+ lea ebp,DWORD PTR ($LK_XX_XX-$L000pic_point)[ebp]
+ mov eax,DWORD PTR [esi]
+ mov edx,DWORD PTR 4[esi]
+ test edx,512
+ jz $L001x86
+ mov ecx,DWORD PTR 8[esi]
+ test eax,16777216
+ jz $L001x86
+ test ecx,536870912
+ jnz $Lshaext_shortcut
+ and edx,268435456
+ and eax,1073741824
+ or eax,edx
+ cmp eax,1342177280
+ je $Lavx_shortcut
+ jmp $Lssse3_shortcut
+ALIGN 16
+$L001x86:
+ mov ebp,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ sub esp,76
+ shl eax,6
+ add eax,esi
+ mov DWORD PTR 104[esp],eax
+ mov edi,DWORD PTR 16[ebp]
+ jmp $L002loop
+ALIGN 16
+$L002loop:
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov edx,DWORD PTR 12[esi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ebx
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 12[esp],edx
+ mov eax,DWORD PTR 16[esi]
+ mov ebx,DWORD PTR 20[esi]
+ mov ecx,DWORD PTR 24[esi]
+ mov edx,DWORD PTR 28[esi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ mov DWORD PTR 16[esp],eax
+ mov DWORD PTR 20[esp],ebx
+ mov DWORD PTR 24[esp],ecx
+ mov DWORD PTR 28[esp],edx
+ mov eax,DWORD PTR 32[esi]
+ mov ebx,DWORD PTR 36[esi]
+ mov ecx,DWORD PTR 40[esi]
+ mov edx,DWORD PTR 44[esi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ mov DWORD PTR 32[esp],eax
+ mov DWORD PTR 36[esp],ebx
+ mov DWORD PTR 40[esp],ecx
+ mov DWORD PTR 44[esp],edx
+ mov eax,DWORD PTR 48[esi]
+ mov ebx,DWORD PTR 52[esi]
+ mov ecx,DWORD PTR 56[esi]
+ mov edx,DWORD PTR 60[esi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ mov DWORD PTR 48[esp],eax
+ mov DWORD PTR 52[esp],ebx
+ mov DWORD PTR 56[esp],ecx
+ mov DWORD PTR 60[esp],edx
+ mov DWORD PTR 100[esp],esi
+ mov eax,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 4[ebp]
+ mov ecx,DWORD PTR 8[ebp]
+ mov edx,DWORD PTR 12[ebp]
+ ; 00_15 0
+ mov esi,ecx
+ mov ebp,eax
+ rol ebp,5
+ xor esi,edx
+ add ebp,edi
+ mov edi,DWORD PTR [esp]
+ and esi,ebx
+ ror ebx,2
+ xor esi,edx
+ lea ebp,DWORD PTR 1518500249[edi*1+ebp]
+ add ebp,esi
+ ; 00_15 1
+ mov edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ xor edi,ecx
+ add ebp,edx
+ mov edx,DWORD PTR 4[esp]
+ and edi,eax
+ ror eax,2
+ xor edi,ecx
+ lea ebp,DWORD PTR 1518500249[edx*1+ebp]
+ add ebp,edi
+ ; 00_15 2
+ mov edx,eax
+ mov edi,ebp
+ rol ebp,5
+ xor edx,ebx
+ add ebp,ecx
+ mov ecx,DWORD PTR 8[esp]
+ and edx,esi
+ ror esi,2
+ xor edx,ebx
+ lea ebp,DWORD PTR 1518500249[ecx*1+ebp]
+ add ebp,edx
+ ; 00_15 3
+ mov ecx,esi
+ mov edx,ebp
+ rol ebp,5
+ xor ecx,eax
+ add ebp,ebx
+ mov ebx,DWORD PTR 12[esp]
+ and ecx,edi
+ ror edi,2
+ xor ecx,eax
+ lea ebp,DWORD PTR 1518500249[ebx*1+ebp]
+ add ebp,ecx
+ ; 00_15 4
+ mov ebx,edi
+ mov ecx,ebp
+ rol ebp,5
+ xor ebx,esi
+ add ebp,eax
+ mov eax,DWORD PTR 16[esp]
+ and ebx,edx
+ ror edx,2
+ xor ebx,esi
+ lea ebp,DWORD PTR 1518500249[eax*1+ebp]
+ add ebp,ebx
+ ; 00_15 5
+ mov eax,edx
+ mov ebx,ebp
+ rol ebp,5
+ xor eax,edi
+ add ebp,esi
+ mov esi,DWORD PTR 20[esp]
+ and eax,ecx
+ ror ecx,2
+ xor eax,edi
+ lea ebp,DWORD PTR 1518500249[esi*1+ebp]
+ add ebp,eax
+ ; 00_15 6
+ mov esi,ecx
+ mov eax,ebp
+ rol ebp,5
+ xor esi,edx
+ add ebp,edi
+ mov edi,DWORD PTR 24[esp]
+ and esi,ebx
+ ror ebx,2
+ xor esi,edx
+ lea ebp,DWORD PTR 1518500249[edi*1+ebp]
+ add ebp,esi
+ ; 00_15 7
+ mov edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ xor edi,ecx
+ add ebp,edx
+ mov edx,DWORD PTR 28[esp]
+ and edi,eax
+ ror eax,2
+ xor edi,ecx
+ lea ebp,DWORD PTR 1518500249[edx*1+ebp]
+ add ebp,edi
+ ; 00_15 8
+ mov edx,eax
+ mov edi,ebp
+ rol ebp,5
+ xor edx,ebx
+ add ebp,ecx
+ mov ecx,DWORD PTR 32[esp]
+ and edx,esi
+ ror esi,2
+ xor edx,ebx
+ lea ebp,DWORD PTR 1518500249[ecx*1+ebp]
+ add ebp,edx
+ ; 00_15 9
+ mov ecx,esi
+ mov edx,ebp
+ rol ebp,5
+ xor ecx,eax
+ add ebp,ebx
+ mov ebx,DWORD PTR 36[esp]
+ and ecx,edi
+ ror edi,2
+ xor ecx,eax
+ lea ebp,DWORD PTR 1518500249[ebx*1+ebp]
+ add ebp,ecx
+ ; 00_15 10
+ mov ebx,edi
+ mov ecx,ebp
+ rol ebp,5
+ xor ebx,esi
+ add ebp,eax
+ mov eax,DWORD PTR 40[esp]
+ and ebx,edx
+ ror edx,2
+ xor ebx,esi
+ lea ebp,DWORD PTR 1518500249[eax*1+ebp]
+ add ebp,ebx
+ ; 00_15 11
+ mov eax,edx
+ mov ebx,ebp
+ rol ebp,5
+ xor eax,edi
+ add ebp,esi
+ mov esi,DWORD PTR 44[esp]
+ and eax,ecx
+ ror ecx,2
+ xor eax,edi
+ lea ebp,DWORD PTR 1518500249[esi*1+ebp]
+ add ebp,eax
+ ; 00_15 12
+ mov esi,ecx
+ mov eax,ebp
+ rol ebp,5
+ xor esi,edx
+ add ebp,edi
+ mov edi,DWORD PTR 48[esp]
+ and esi,ebx
+ ror ebx,2
+ xor esi,edx
+ lea ebp,DWORD PTR 1518500249[edi*1+ebp]
+ add ebp,esi
+ ; 00_15 13
+ mov edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ xor edi,ecx
+ add ebp,edx
+ mov edx,DWORD PTR 52[esp]
+ and edi,eax
+ ror eax,2
+ xor edi,ecx
+ lea ebp,DWORD PTR 1518500249[edx*1+ebp]
+ add ebp,edi
+ ; 00_15 14
+ mov edx,eax
+ mov edi,ebp
+ rol ebp,5
+ xor edx,ebx
+ add ebp,ecx
+ mov ecx,DWORD PTR 56[esp]
+ and edx,esi
+ ror esi,2
+ xor edx,ebx
+ lea ebp,DWORD PTR 1518500249[ecx*1+ebp]
+ add ebp,edx
+ ; 00_15 15
+ mov ecx,esi
+ mov edx,ebp
+ rol ebp,5
+ xor ecx,eax
+ add ebp,ebx
+ mov ebx,DWORD PTR 60[esp]
+ and ecx,edi
+ ror edi,2
+ xor ecx,eax
+ lea ebp,DWORD PTR 1518500249[ebx*1+ebp]
+ mov ebx,DWORD PTR [esp]
+ add ecx,ebp
+ ; 16_19 16
+ mov ebp,edi
+ xor ebx,DWORD PTR 8[esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR 32[esp]
+ and ebp,edx
+ xor ebx,DWORD PTR 52[esp]
+ rol ebx,1
+ xor ebp,esi
+ add eax,ebp
+ mov ebp,ecx
+ ror edx,2
+ mov DWORD PTR [esp],ebx
+ rol ebp,5
+ lea ebx,DWORD PTR 1518500249[eax*1+ebx]
+ mov eax,DWORD PTR 4[esp]
+ add ebx,ebp
+ ; 16_19 17
+ mov ebp,edx
+ xor eax,DWORD PTR 12[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR 36[esp]
+ and ebp,ecx
+ xor eax,DWORD PTR 56[esp]
+ rol eax,1
+ xor ebp,edi
+ add esi,ebp
+ mov ebp,ebx
+ ror ecx,2
+ mov DWORD PTR 4[esp],eax
+ rol ebp,5
+ lea eax,DWORD PTR 1518500249[esi*1+eax]
+ mov esi,DWORD PTR 8[esp]
+ add eax,ebp
+ ; 16_19 18
+ mov ebp,ecx
+ xor esi,DWORD PTR 16[esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 40[esp]
+ and ebp,ebx
+ xor esi,DWORD PTR 60[esp]
+ rol esi,1
+ xor ebp,edx
+ add edi,ebp
+ mov ebp,eax
+ ror ebx,2
+ mov DWORD PTR 8[esp],esi
+ rol ebp,5
+ lea esi,DWORD PTR 1518500249[edi*1+esi]
+ mov edi,DWORD PTR 12[esp]
+ add esi,ebp
+ ; 16_19 19
+ mov ebp,ebx
+ xor edi,DWORD PTR 20[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR 44[esp]
+ and ebp,eax
+ xor edi,DWORD PTR [esp]
+ rol edi,1
+ xor ebp,ecx
+ add edx,ebp
+ mov ebp,esi
+ ror eax,2
+ mov DWORD PTR 12[esp],edi
+ rol ebp,5
+ lea edi,DWORD PTR 1518500249[edx*1+edi]
+ mov edx,DWORD PTR 16[esp]
+ add edi,ebp
+ ; 20_39 20
+ mov ebp,esi
+ xor edx,DWORD PTR 24[esp]
+ xor ebp,eax
+ xor edx,DWORD PTR 48[esp]
+ xor ebp,ebx
+ xor edx,DWORD PTR 4[esp]
+ rol edx,1
+ add ecx,ebp
+ ror esi,2
+ mov ebp,edi
+ rol ebp,5
+ mov DWORD PTR 16[esp],edx
+ lea edx,DWORD PTR 1859775393[ecx*1+edx]
+ mov ecx,DWORD PTR 20[esp]
+ add edx,ebp
+ ; 20_39 21
+ mov ebp,edi
+ xor ecx,DWORD PTR 28[esp]
+ xor ebp,esi
+ xor ecx,DWORD PTR 52[esp]
+ xor ebp,eax
+ xor ecx,DWORD PTR 8[esp]
+ rol ecx,1
+ add ebx,ebp
+ ror edi,2
+ mov ebp,edx
+ rol ebp,5
+ mov DWORD PTR 20[esp],ecx
+ lea ecx,DWORD PTR 1859775393[ebx*1+ecx]
+ mov ebx,DWORD PTR 24[esp]
+ add ecx,ebp
+ ; 20_39 22
+ mov ebp,edx
+ xor ebx,DWORD PTR 32[esp]
+ xor ebp,edi
+ xor ebx,DWORD PTR 56[esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR 12[esp]
+ rol ebx,1
+ add eax,ebp
+ ror edx,2
+ mov ebp,ecx
+ rol ebp,5
+ mov DWORD PTR 24[esp],ebx
+ lea ebx,DWORD PTR 1859775393[eax*1+ebx]
+ mov eax,DWORD PTR 28[esp]
+ add ebx,ebp
+ ; 20_39 23
+ mov ebp,ecx
+ xor eax,DWORD PTR 36[esp]
+ xor ebp,edx
+ xor eax,DWORD PTR 60[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR 16[esp]
+ rol eax,1
+ add esi,ebp
+ ror ecx,2
+ mov ebp,ebx
+ rol ebp,5
+ mov DWORD PTR 28[esp],eax
+ lea eax,DWORD PTR 1859775393[esi*1+eax]
+ mov esi,DWORD PTR 32[esp]
+ add eax,ebp
+ ; 20_39 24
+ mov ebp,ebx
+ xor esi,DWORD PTR 40[esp]
+ xor ebp,ecx
+ xor esi,DWORD PTR [esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 20[esp]
+ rol esi,1
+ add edi,ebp
+ ror ebx,2
+ mov ebp,eax
+ rol ebp,5
+ mov DWORD PTR 32[esp],esi
+ lea esi,DWORD PTR 1859775393[edi*1+esi]
+ mov edi,DWORD PTR 36[esp]
+ add esi,ebp
+ ; 20_39 25
+ mov ebp,eax
+ xor edi,DWORD PTR 44[esp]
+ xor ebp,ebx
+ xor edi,DWORD PTR 4[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR 24[esp]
+ rol edi,1
+ add edx,ebp
+ ror eax,2
+ mov ebp,esi
+ rol ebp,5
+ mov DWORD PTR 36[esp],edi
+ lea edi,DWORD PTR 1859775393[edx*1+edi]
+ mov edx,DWORD PTR 40[esp]
+ add edi,ebp
+ ; 20_39 26
+ mov ebp,esi
+ xor edx,DWORD PTR 48[esp]
+ xor ebp,eax
+ xor edx,DWORD PTR 8[esp]
+ xor ebp,ebx
+ xor edx,DWORD PTR 28[esp]
+ rol edx,1
+ add ecx,ebp
+ ror esi,2
+ mov ebp,edi
+ rol ebp,5
+ mov DWORD PTR 40[esp],edx
+ lea edx,DWORD PTR 1859775393[ecx*1+edx]
+ mov ecx,DWORD PTR 44[esp]
+ add edx,ebp
+ ; 20_39 27
+ mov ebp,edi
+ xor ecx,DWORD PTR 52[esp]
+ xor ebp,esi
+ xor ecx,DWORD PTR 12[esp]
+ xor ebp,eax
+ xor ecx,DWORD PTR 32[esp]
+ rol ecx,1
+ add ebx,ebp
+ ror edi,2
+ mov ebp,edx
+ rol ebp,5
+ mov DWORD PTR 44[esp],ecx
+ lea ecx,DWORD PTR 1859775393[ebx*1+ecx]
+ mov ebx,DWORD PTR 48[esp]
+ add ecx,ebp
+ ; 20_39 28
+ mov ebp,edx
+ xor ebx,DWORD PTR 56[esp]
+ xor ebp,edi
+ xor ebx,DWORD PTR 16[esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR 36[esp]
+ rol ebx,1
+ add eax,ebp
+ ror edx,2
+ mov ebp,ecx
+ rol ebp,5
+ mov DWORD PTR 48[esp],ebx
+ lea ebx,DWORD PTR 1859775393[eax*1+ebx]
+ mov eax,DWORD PTR 52[esp]
+ add ebx,ebp
+ ; 20_39 29
+ mov ebp,ecx
+ xor eax,DWORD PTR 60[esp]
+ xor ebp,edx
+ xor eax,DWORD PTR 20[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR 40[esp]
+ rol eax,1
+ add esi,ebp
+ ror ecx,2
+ mov ebp,ebx
+ rol ebp,5
+ mov DWORD PTR 52[esp],eax
+ lea eax,DWORD PTR 1859775393[esi*1+eax]
+ mov esi,DWORD PTR 56[esp]
+ add eax,ebp
+ ; 20_39 30
+ mov ebp,ebx
+ xor esi,DWORD PTR [esp]
+ xor ebp,ecx
+ xor esi,DWORD PTR 24[esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 44[esp]
+ rol esi,1
+ add edi,ebp
+ ror ebx,2
+ mov ebp,eax
+ rol ebp,5
+ mov DWORD PTR 56[esp],esi
+ lea esi,DWORD PTR 1859775393[edi*1+esi]
+ mov edi,DWORD PTR 60[esp]
+ add esi,ebp
+ ; 20_39 31
+ mov ebp,eax
+ xor edi,DWORD PTR 4[esp]
+ xor ebp,ebx
+ xor edi,DWORD PTR 28[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR 48[esp]
+ rol edi,1
+ add edx,ebp
+ ror eax,2
+ mov ebp,esi
+ rol ebp,5
+ mov DWORD PTR 60[esp],edi
+ lea edi,DWORD PTR 1859775393[edx*1+edi]
+ mov edx,DWORD PTR [esp]
+ add edi,ebp
+ ; 20_39 32
+ mov ebp,esi
+ xor edx,DWORD PTR 8[esp]
+ xor ebp,eax
+ xor edx,DWORD PTR 32[esp]
+ xor ebp,ebx
+ xor edx,DWORD PTR 52[esp]
+ rol edx,1
+ add ecx,ebp
+ ror esi,2
+ mov ebp,edi
+ rol ebp,5
+ mov DWORD PTR [esp],edx
+ lea edx,DWORD PTR 1859775393[ecx*1+edx]
+ mov ecx,DWORD PTR 4[esp]
+ add edx,ebp
+ ; 20_39 33
+ mov ebp,edi
+ xor ecx,DWORD PTR 12[esp]
+ xor ebp,esi
+ xor ecx,DWORD PTR 36[esp]
+ xor ebp,eax
+ xor ecx,DWORD PTR 56[esp]
+ rol ecx,1
+ add ebx,ebp
+ ror edi,2
+ mov ebp,edx
+ rol ebp,5
+ mov DWORD PTR 4[esp],ecx
+ lea ecx,DWORD PTR 1859775393[ebx*1+ecx]
+ mov ebx,DWORD PTR 8[esp]
+ add ecx,ebp
+ ; 20_39 34
+ mov ebp,edx
+ xor ebx,DWORD PTR 16[esp]
+ xor ebp,edi
+ xor ebx,DWORD PTR 40[esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR 60[esp]
+ rol ebx,1
+ add eax,ebp
+ ror edx,2
+ mov ebp,ecx
+ rol ebp,5
+ mov DWORD PTR 8[esp],ebx
+ lea ebx,DWORD PTR 1859775393[eax*1+ebx]
+ mov eax,DWORD PTR 12[esp]
+ add ebx,ebp
+ ; 20_39 35
+ mov ebp,ecx
+ xor eax,DWORD PTR 20[esp]
+ xor ebp,edx
+ xor eax,DWORD PTR 44[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR [esp]
+ rol eax,1
+ add esi,ebp
+ ror ecx,2
+ mov ebp,ebx
+ rol ebp,5
+ mov DWORD PTR 12[esp],eax
+ lea eax,DWORD PTR 1859775393[esi*1+eax]
+ mov esi,DWORD PTR 16[esp]
+ add eax,ebp
+ ; 20_39 36
+ mov ebp,ebx
+ xor esi,DWORD PTR 24[esp]
+ xor ebp,ecx
+ xor esi,DWORD PTR 48[esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 4[esp]
+ rol esi,1
+ add edi,ebp
+ ror ebx,2
+ mov ebp,eax
+ rol ebp,5
+ mov DWORD PTR 16[esp],esi
+ lea esi,DWORD PTR 1859775393[edi*1+esi]
+ mov edi,DWORD PTR 20[esp]
+ add esi,ebp
+ ; 20_39 37
+ mov ebp,eax
+ xor edi,DWORD PTR 28[esp]
+ xor ebp,ebx
+ xor edi,DWORD PTR 52[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR 8[esp]
+ rol edi,1
+ add edx,ebp
+ ror eax,2
+ mov ebp,esi
+ rol ebp,5
+ mov DWORD PTR 20[esp],edi
+ lea edi,DWORD PTR 1859775393[edx*1+edi]
+ mov edx,DWORD PTR 24[esp]
+ add edi,ebp
+ ; 20_39 38
+ mov ebp,esi
+ xor edx,DWORD PTR 32[esp]
+ xor ebp,eax
+ xor edx,DWORD PTR 56[esp]
+ xor ebp,ebx
+ xor edx,DWORD PTR 12[esp]
+ rol edx,1
+ add ecx,ebp
+ ror esi,2
+ mov ebp,edi
+ rol ebp,5
+ mov DWORD PTR 24[esp],edx
+ lea edx,DWORD PTR 1859775393[ecx*1+edx]
+ mov ecx,DWORD PTR 28[esp]
+ add edx,ebp
+ ; 20_39 39
+ mov ebp,edi
+ xor ecx,DWORD PTR 36[esp]
+ xor ebp,esi
+ xor ecx,DWORD PTR 60[esp]
+ xor ebp,eax
+ xor ecx,DWORD PTR 16[esp]
+ rol ecx,1
+ add ebx,ebp
+ ror edi,2
+ mov ebp,edx
+ rol ebp,5
+ mov DWORD PTR 28[esp],ecx
+ lea ecx,DWORD PTR 1859775393[ebx*1+ecx]
+ mov ebx,DWORD PTR 32[esp]
+ add ecx,ebp
+ ; 40_59 40
+ mov ebp,edi
+ xor ebx,DWORD PTR 40[esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR [esp]
+ and ebp,edx
+ xor ebx,DWORD PTR 20[esp]
+ rol ebx,1
+ add ebp,eax
+ ror edx,2
+ mov eax,ecx
+ rol eax,5
+ mov DWORD PTR 32[esp],ebx
+ lea ebx,DWORD PTR 2400959708[ebp*1+ebx]
+ mov ebp,edi
+ add ebx,eax
+ and ebp,esi
+ mov eax,DWORD PTR 36[esp]
+ add ebx,ebp
+ ; 40_59 41
+ mov ebp,edx
+ xor eax,DWORD PTR 44[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR 4[esp]
+ and ebp,ecx
+ xor eax,DWORD PTR 24[esp]
+ rol eax,1
+ add ebp,esi
+ ror ecx,2
+ mov esi,ebx
+ rol esi,5
+ mov DWORD PTR 36[esp],eax
+ lea eax,DWORD PTR 2400959708[ebp*1+eax]
+ mov ebp,edx
+ add eax,esi
+ and ebp,edi
+ mov esi,DWORD PTR 40[esp]
+ add eax,ebp
+ ; 40_59 42
+ mov ebp,ecx
+ xor esi,DWORD PTR 48[esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 8[esp]
+ and ebp,ebx
+ xor esi,DWORD PTR 28[esp]
+ rol esi,1
+ add ebp,edi
+ ror ebx,2
+ mov edi,eax
+ rol edi,5
+ mov DWORD PTR 40[esp],esi
+ lea esi,DWORD PTR 2400959708[ebp*1+esi]
+ mov ebp,ecx
+ add esi,edi
+ and ebp,edx
+ mov edi,DWORD PTR 44[esp]
+ add esi,ebp
+ ; 40_59 43
+ mov ebp,ebx
+ xor edi,DWORD PTR 52[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR 12[esp]
+ and ebp,eax
+ xor edi,DWORD PTR 32[esp]
+ rol edi,1
+ add ebp,edx
+ ror eax,2
+ mov edx,esi
+ rol edx,5
+ mov DWORD PTR 44[esp],edi
+ lea edi,DWORD PTR 2400959708[ebp*1+edi]
+ mov ebp,ebx
+ add edi,edx
+ and ebp,ecx
+ mov edx,DWORD PTR 48[esp]
+ add edi,ebp
+ ; 40_59 44
+ mov ebp,eax
+ xor edx,DWORD PTR 56[esp]
+ xor ebp,ebx
+ xor edx,DWORD PTR 16[esp]
+ and ebp,esi
+ xor edx,DWORD PTR 36[esp]
+ rol edx,1
+ add ebp,ecx
+ ror esi,2
+ mov ecx,edi
+ rol ecx,5
+ mov DWORD PTR 48[esp],edx
+ lea edx,DWORD PTR 2400959708[ebp*1+edx]
+ mov ebp,eax
+ add edx,ecx
+ and ebp,ebx
+ mov ecx,DWORD PTR 52[esp]
+ add edx,ebp
+ ; 40_59 45
+ mov ebp,esi
+ xor ecx,DWORD PTR 60[esp]
+ xor ebp,eax
+ xor ecx,DWORD PTR 20[esp]
+ and ebp,edi
+ xor ecx,DWORD PTR 40[esp]
+ rol ecx,1
+ add ebp,ebx
+ ror edi,2
+ mov ebx,edx
+ rol ebx,5
+ mov DWORD PTR 52[esp],ecx
+ lea ecx,DWORD PTR 2400959708[ebp*1+ecx]
+ mov ebp,esi
+ add ecx,ebx
+ and ebp,eax
+ mov ebx,DWORD PTR 56[esp]
+ add ecx,ebp
+ ; 40_59 46
+ mov ebp,edi
+ xor ebx,DWORD PTR [esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR 24[esp]
+ and ebp,edx
+ xor ebx,DWORD PTR 44[esp]
+ rol ebx,1
+ add ebp,eax
+ ror edx,2
+ mov eax,ecx
+ rol eax,5
+ mov DWORD PTR 56[esp],ebx
+ lea ebx,DWORD PTR 2400959708[ebp*1+ebx]
+ mov ebp,edi
+ add ebx,eax
+ and ebp,esi
+ mov eax,DWORD PTR 60[esp]
+ add ebx,ebp
+ ; 40_59 47
+ mov ebp,edx
+ xor eax,DWORD PTR 4[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR 28[esp]
+ and ebp,ecx
+ xor eax,DWORD PTR 48[esp]
+ rol eax,1
+ add ebp,esi
+ ror ecx,2
+ mov esi,ebx
+ rol esi,5
+ mov DWORD PTR 60[esp],eax
+ lea eax,DWORD PTR 2400959708[ebp*1+eax]
+ mov ebp,edx
+ add eax,esi
+ and ebp,edi
+ mov esi,DWORD PTR [esp]
+ add eax,ebp
+ ; 40_59 48
+ mov ebp,ecx
+ xor esi,DWORD PTR 8[esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 32[esp]
+ and ebp,ebx
+ xor esi,DWORD PTR 52[esp]
+ rol esi,1
+ add ebp,edi
+ ror ebx,2
+ mov edi,eax
+ rol edi,5
+ mov DWORD PTR [esp],esi
+ lea esi,DWORD PTR 2400959708[ebp*1+esi]
+ mov ebp,ecx
+ add esi,edi
+ and ebp,edx
+ mov edi,DWORD PTR 4[esp]
+ add esi,ebp
+ ; 40_59 49
+ mov ebp,ebx
+ xor edi,DWORD PTR 12[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR 36[esp]
+ and ebp,eax
+ xor edi,DWORD PTR 56[esp]
+ rol edi,1
+ add ebp,edx
+ ror eax,2
+ mov edx,esi
+ rol edx,5
+ mov DWORD PTR 4[esp],edi
+ lea edi,DWORD PTR 2400959708[ebp*1+edi]
+ mov ebp,ebx
+ add edi,edx
+ and ebp,ecx
+ mov edx,DWORD PTR 8[esp]
+ add edi,ebp
+ ; 40_59 50
+ mov ebp,eax
+ xor edx,DWORD PTR 16[esp]
+ xor ebp,ebx
+ xor edx,DWORD PTR 40[esp]
+ and ebp,esi
+ xor edx,DWORD PTR 60[esp]
+ rol edx,1
+ add ebp,ecx
+ ror esi,2
+ mov ecx,edi
+ rol ecx,5
+ mov DWORD PTR 8[esp],edx
+ lea edx,DWORD PTR 2400959708[ebp*1+edx]
+ mov ebp,eax
+ add edx,ecx
+ and ebp,ebx
+ mov ecx,DWORD PTR 12[esp]
+ add edx,ebp
+ ; 40_59 51
+ mov ebp,esi
+ xor ecx,DWORD PTR 20[esp]
+ xor ebp,eax
+ xor ecx,DWORD PTR 44[esp]
+ and ebp,edi
+ xor ecx,DWORD PTR [esp]
+ rol ecx,1
+ add ebp,ebx
+ ror edi,2
+ mov ebx,edx
+ rol ebx,5
+ mov DWORD PTR 12[esp],ecx
+ lea ecx,DWORD PTR 2400959708[ebp*1+ecx]
+ mov ebp,esi
+ add ecx,ebx
+ and ebp,eax
+ mov ebx,DWORD PTR 16[esp]
+ add ecx,ebp
+ ; 40_59 52
+ mov ebp,edi
+ xor ebx,DWORD PTR 24[esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR 48[esp]
+ and ebp,edx
+ xor ebx,DWORD PTR 4[esp]
+ rol ebx,1
+ add ebp,eax
+ ror edx,2
+ mov eax,ecx
+ rol eax,5
+ mov DWORD PTR 16[esp],ebx
+ lea ebx,DWORD PTR 2400959708[ebp*1+ebx]
+ mov ebp,edi
+ add ebx,eax
+ and ebp,esi
+ mov eax,DWORD PTR 20[esp]
+ add ebx,ebp
+ ; 40_59 53
+ mov ebp,edx
+ xor eax,DWORD PTR 28[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR 52[esp]
+ and ebp,ecx
+ xor eax,DWORD PTR 8[esp]
+ rol eax,1
+ add ebp,esi
+ ror ecx,2
+ mov esi,ebx
+ rol esi,5
+ mov DWORD PTR 20[esp],eax
+ lea eax,DWORD PTR 2400959708[ebp*1+eax]
+ mov ebp,edx
+ add eax,esi
+ and ebp,edi
+ mov esi,DWORD PTR 24[esp]
+ add eax,ebp
+ ; 40_59 54
+ mov ebp,ecx
+ xor esi,DWORD PTR 32[esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 56[esp]
+ and ebp,ebx
+ xor esi,DWORD PTR 12[esp]
+ rol esi,1
+ add ebp,edi
+ ror ebx,2
+ mov edi,eax
+ rol edi,5
+ mov DWORD PTR 24[esp],esi
+ lea esi,DWORD PTR 2400959708[ebp*1+esi]
+ mov ebp,ecx
+ add esi,edi
+ and ebp,edx
+ mov edi,DWORD PTR 28[esp]
+ add esi,ebp
+ ; 40_59 55
+ mov ebp,ebx
+ xor edi,DWORD PTR 36[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR 60[esp]
+ and ebp,eax
+ xor edi,DWORD PTR 16[esp]
+ rol edi,1
+ add ebp,edx
+ ror eax,2
+ mov edx,esi
+ rol edx,5
+ mov DWORD PTR 28[esp],edi
+ lea edi,DWORD PTR 2400959708[ebp*1+edi]
+ mov ebp,ebx
+ add edi,edx
+ and ebp,ecx
+ mov edx,DWORD PTR 32[esp]
+ add edi,ebp
+ ; 40_59 56
+ mov ebp,eax
+ xor edx,DWORD PTR 40[esp]
+ xor ebp,ebx
+ xor edx,DWORD PTR [esp]
+ and ebp,esi
+ xor edx,DWORD PTR 20[esp]
+ rol edx,1
+ add ebp,ecx
+ ror esi,2
+ mov ecx,edi
+ rol ecx,5
+ mov DWORD PTR 32[esp],edx
+ lea edx,DWORD PTR 2400959708[ebp*1+edx]
+ mov ebp,eax
+ add edx,ecx
+ and ebp,ebx
+ mov ecx,DWORD PTR 36[esp]
+ add edx,ebp
+ ; 40_59 57
+ mov ebp,esi
+ xor ecx,DWORD PTR 44[esp]
+ xor ebp,eax
+ xor ecx,DWORD PTR 4[esp]
+ and ebp,edi
+ xor ecx,DWORD PTR 24[esp]
+ rol ecx,1
+ add ebp,ebx
+ ror edi,2
+ mov ebx,edx
+ rol ebx,5
+ mov DWORD PTR 36[esp],ecx
+ lea ecx,DWORD PTR 2400959708[ebp*1+ecx]
+ mov ebp,esi
+ add ecx,ebx
+ and ebp,eax
+ mov ebx,DWORD PTR 40[esp]
+ add ecx,ebp
+ ; 40_59 58
+ mov ebp,edi
+ xor ebx,DWORD PTR 48[esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR 8[esp]
+ and ebp,edx
+ xor ebx,DWORD PTR 28[esp]
+ rol ebx,1
+ add ebp,eax
+ ror edx,2
+ mov eax,ecx
+ rol eax,5
+ mov DWORD PTR 40[esp],ebx
+ lea ebx,DWORD PTR 2400959708[ebp*1+ebx]
+ mov ebp,edi
+ add ebx,eax
+ and ebp,esi
+ mov eax,DWORD PTR 44[esp]
+ add ebx,ebp
+ ; 40_59 59
+ mov ebp,edx
+ xor eax,DWORD PTR 52[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR 12[esp]
+ and ebp,ecx
+ xor eax,DWORD PTR 32[esp]
+ rol eax,1
+ add ebp,esi
+ ror ecx,2
+ mov esi,ebx
+ rol esi,5
+ mov DWORD PTR 44[esp],eax
+ lea eax,DWORD PTR 2400959708[ebp*1+eax]
+ mov ebp,edx
+ add eax,esi
+ and ebp,edi
+ mov esi,DWORD PTR 48[esp]
+ add eax,ebp
+ ; 20_39 60
+ mov ebp,ebx
+ xor esi,DWORD PTR 56[esp]
+ xor ebp,ecx
+ xor esi,DWORD PTR 16[esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 36[esp]
+ rol esi,1
+ add edi,ebp
+ ror ebx,2
+ mov ebp,eax
+ rol ebp,5
+ mov DWORD PTR 48[esp],esi
+ lea esi,DWORD PTR 3395469782[edi*1+esi]
+ mov edi,DWORD PTR 52[esp]
+ add esi,ebp
+ ; 20_39 61
+ mov ebp,eax
+ xor edi,DWORD PTR 60[esp]
+ xor ebp,ebx
+ xor edi,DWORD PTR 20[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR 40[esp]
+ rol edi,1
+ add edx,ebp
+ ror eax,2
+ mov ebp,esi
+ rol ebp,5
+ mov DWORD PTR 52[esp],edi
+ lea edi,DWORD PTR 3395469782[edx*1+edi]
+ mov edx,DWORD PTR 56[esp]
+ add edi,ebp
+ ; 20_39 62
+ mov ebp,esi
+ xor edx,DWORD PTR [esp]
+ xor ebp,eax
+ xor edx,DWORD PTR 24[esp]
+ xor ebp,ebx
+ xor edx,DWORD PTR 44[esp]
+ rol edx,1
+ add ecx,ebp
+ ror esi,2
+ mov ebp,edi
+ rol ebp,5
+ mov DWORD PTR 56[esp],edx
+ lea edx,DWORD PTR 3395469782[ecx*1+edx]
+ mov ecx,DWORD PTR 60[esp]
+ add edx,ebp
+ ; 20_39 63
+ mov ebp,edi
+ xor ecx,DWORD PTR 4[esp]
+ xor ebp,esi
+ xor ecx,DWORD PTR 28[esp]
+ xor ebp,eax
+ xor ecx,DWORD PTR 48[esp]
+ rol ecx,1
+ add ebx,ebp
+ ror edi,2
+ mov ebp,edx
+ rol ebp,5
+ mov DWORD PTR 60[esp],ecx
+ lea ecx,DWORD PTR 3395469782[ebx*1+ecx]
+ mov ebx,DWORD PTR [esp]
+ add ecx,ebp
+ ; 20_39 64
+ mov ebp,edx
+ xor ebx,DWORD PTR 8[esp]
+ xor ebp,edi
+ xor ebx,DWORD PTR 32[esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR 52[esp]
+ rol ebx,1
+ add eax,ebp
+ ror edx,2
+ mov ebp,ecx
+ rol ebp,5
+ mov DWORD PTR [esp],ebx
+ lea ebx,DWORD PTR 3395469782[eax*1+ebx]
+ mov eax,DWORD PTR 4[esp]
+ add ebx,ebp
+ ; 20_39 65
+ mov ebp,ecx
+ xor eax,DWORD PTR 12[esp]
+ xor ebp,edx
+ xor eax,DWORD PTR 36[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR 56[esp]
+ rol eax,1
+ add esi,ebp
+ ror ecx,2
+ mov ebp,ebx
+ rol ebp,5
+ mov DWORD PTR 4[esp],eax
+ lea eax,DWORD PTR 3395469782[esi*1+eax]
+ mov esi,DWORD PTR 8[esp]
+ add eax,ebp
+ ; 20_39 66
+ mov ebp,ebx
+ xor esi,DWORD PTR 16[esp]
+ xor ebp,ecx
+ xor esi,DWORD PTR 40[esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 60[esp]
+ rol esi,1
+ add edi,ebp
+ ror ebx,2
+ mov ebp,eax
+ rol ebp,5
+ mov DWORD PTR 8[esp],esi
+ lea esi,DWORD PTR 3395469782[edi*1+esi]
+ mov edi,DWORD PTR 12[esp]
+ add esi,ebp
+ ; 20_39 67
+ mov ebp,eax
+ xor edi,DWORD PTR 20[esp]
+ xor ebp,ebx
+ xor edi,DWORD PTR 44[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR [esp]
+ rol edi,1
+ add edx,ebp
+ ror eax,2
+ mov ebp,esi
+ rol ebp,5
+ mov DWORD PTR 12[esp],edi
+ lea edi,DWORD PTR 3395469782[edx*1+edi]
+ mov edx,DWORD PTR 16[esp]
+ add edi,ebp
+ ; 20_39 68
+ mov ebp,esi
+ xor edx,DWORD PTR 24[esp]
+ xor ebp,eax
+ xor edx,DWORD PTR 48[esp]
+ xor ebp,ebx
+ xor edx,DWORD PTR 4[esp]
+ rol edx,1
+ add ecx,ebp
+ ror esi,2
+ mov ebp,edi
+ rol ebp,5
+ mov DWORD PTR 16[esp],edx
+ lea edx,DWORD PTR 3395469782[ecx*1+edx]
+ mov ecx,DWORD PTR 20[esp]
+ add edx,ebp
+ ; 20_39 69
+ mov ebp,edi
+ xor ecx,DWORD PTR 28[esp]
+ xor ebp,esi
+ xor ecx,DWORD PTR 52[esp]
+ xor ebp,eax
+ xor ecx,DWORD PTR 8[esp]
+ rol ecx,1
+ add ebx,ebp
+ ror edi,2
+ mov ebp,edx
+ rol ebp,5
+ mov DWORD PTR 20[esp],ecx
+ lea ecx,DWORD PTR 3395469782[ebx*1+ecx]
+ mov ebx,DWORD PTR 24[esp]
+ add ecx,ebp
+ ; 20_39 70
+ mov ebp,edx
+ xor ebx,DWORD PTR 32[esp]
+ xor ebp,edi
+ xor ebx,DWORD PTR 56[esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR 12[esp]
+ rol ebx,1
+ add eax,ebp
+ ror edx,2
+ mov ebp,ecx
+ rol ebp,5
+ mov DWORD PTR 24[esp],ebx
+ lea ebx,DWORD PTR 3395469782[eax*1+ebx]
+ mov eax,DWORD PTR 28[esp]
+ add ebx,ebp
+ ; 20_39 71
+ mov ebp,ecx
+ xor eax,DWORD PTR 36[esp]
+ xor ebp,edx
+ xor eax,DWORD PTR 60[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR 16[esp]
+ rol eax,1
+ add esi,ebp
+ ror ecx,2
+ mov ebp,ebx
+ rol ebp,5
+ mov DWORD PTR 28[esp],eax
+ lea eax,DWORD PTR 3395469782[esi*1+eax]
+ mov esi,DWORD PTR 32[esp]
+ add eax,ebp
+ ; 20_39 72
+ mov ebp,ebx
+ xor esi,DWORD PTR 40[esp]
+ xor ebp,ecx
+ xor esi,DWORD PTR [esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 20[esp]
+ rol esi,1
+ add edi,ebp
+ ror ebx,2
+ mov ebp,eax
+ rol ebp,5
+ mov DWORD PTR 32[esp],esi
+ lea esi,DWORD PTR 3395469782[edi*1+esi]
+ mov edi,DWORD PTR 36[esp]
+ add esi,ebp
+ ; 20_39 73
+ mov ebp,eax
+ xor edi,DWORD PTR 44[esp]
+ xor ebp,ebx
+ xor edi,DWORD PTR 4[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR 24[esp]
+ rol edi,1
+ add edx,ebp
+ ror eax,2
+ mov ebp,esi
+ rol ebp,5
+ mov DWORD PTR 36[esp],edi
+ lea edi,DWORD PTR 3395469782[edx*1+edi]
+ mov edx,DWORD PTR 40[esp]
+ add edi,ebp
+ ; 20_39 74
+ mov ebp,esi
+ xor edx,DWORD PTR 48[esp]
+ xor ebp,eax
+ xor edx,DWORD PTR 8[esp]
+ xor ebp,ebx
+ xor edx,DWORD PTR 28[esp]
+ rol edx,1
+ add ecx,ebp
+ ror esi,2
+ mov ebp,edi
+ rol ebp,5
+ mov DWORD PTR 40[esp],edx
+ lea edx,DWORD PTR 3395469782[ecx*1+edx]
+ mov ecx,DWORD PTR 44[esp]
+ add edx,ebp
+ ; 20_39 75
+ mov ebp,edi
+ xor ecx,DWORD PTR 52[esp]
+ xor ebp,esi
+ xor ecx,DWORD PTR 12[esp]
+ xor ebp,eax
+ xor ecx,DWORD PTR 32[esp]
+ rol ecx,1
+ add ebx,ebp
+ ror edi,2
+ mov ebp,edx
+ rol ebp,5
+ mov DWORD PTR 44[esp],ecx
+ lea ecx,DWORD PTR 3395469782[ebx*1+ecx]
+ mov ebx,DWORD PTR 48[esp]
+ add ecx,ebp
+ ; 20_39 76
+ mov ebp,edx
+ xor ebx,DWORD PTR 56[esp]
+ xor ebp,edi
+ xor ebx,DWORD PTR 16[esp]
+ xor ebp,esi
+ xor ebx,DWORD PTR 36[esp]
+ rol ebx,1
+ add eax,ebp
+ ror edx,2
+ mov ebp,ecx
+ rol ebp,5
+ mov DWORD PTR 48[esp],ebx
+ lea ebx,DWORD PTR 3395469782[eax*1+ebx]
+ mov eax,DWORD PTR 52[esp]
+ add ebx,ebp
+ ; 20_39 77
+ mov ebp,ecx
+ xor eax,DWORD PTR 60[esp]
+ xor ebp,edx
+ xor eax,DWORD PTR 20[esp]
+ xor ebp,edi
+ xor eax,DWORD PTR 40[esp]
+ rol eax,1
+ add esi,ebp
+ ror ecx,2
+ mov ebp,ebx
+ rol ebp,5
+ lea eax,DWORD PTR 3395469782[esi*1+eax]
+ mov esi,DWORD PTR 56[esp]
+ add eax,ebp
+ ; 20_39 78
+ mov ebp,ebx
+ xor esi,DWORD PTR [esp]
+ xor ebp,ecx
+ xor esi,DWORD PTR 24[esp]
+ xor ebp,edx
+ xor esi,DWORD PTR 44[esp]
+ rol esi,1
+ add edi,ebp
+ ror ebx,2
+ mov ebp,eax
+ rol ebp,5
+ lea esi,DWORD PTR 3395469782[edi*1+esi]
+ mov edi,DWORD PTR 60[esp]
+ add esi,ebp
+ ; 20_39 79
+ mov ebp,eax
+ xor edi,DWORD PTR 4[esp]
+ xor ebp,ebx
+ xor edi,DWORD PTR 28[esp]
+ xor ebp,ecx
+ xor edi,DWORD PTR 48[esp]
+ rol edi,1
+ add edx,ebp
+ ror eax,2
+ mov ebp,esi
+ rol ebp,5
+ lea edi,DWORD PTR 3395469782[edx*1+edi]
+ add edi,ebp
+ mov ebp,DWORD PTR 96[esp]
+ mov edx,DWORD PTR 100[esp]
+ add edi,DWORD PTR [ebp]
+ add esi,DWORD PTR 4[ebp]
+ add eax,DWORD PTR 8[ebp]
+ add ebx,DWORD PTR 12[ebp]
+ add ecx,DWORD PTR 16[ebp]
+ mov DWORD PTR [ebp],edi
+ add edx,64
+ mov DWORD PTR 4[ebp],esi
+ cmp edx,DWORD PTR 104[esp]
+ mov DWORD PTR 8[ebp],eax
+ mov edi,ecx
+ mov DWORD PTR 12[ebp],ebx
+ mov esi,edx
+ mov DWORD PTR 16[ebp],ecx
+ jb $L002loop
+ add esp,76
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_sha1_block_data_order ENDP
+ALIGN 16
+__sha1_block_data_order_shaext PROC PRIVATE
+ push ebp
+ push ebx
+ push esi
+ push edi
+ call $L003pic_point
+$L003pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($LK_XX_XX-$L003pic_point)[ebp]
+$Lshaext_shortcut::
+ mov edi,DWORD PTR 20[esp]
+ mov ebx,esp
+ mov esi,DWORD PTR 24[esp]
+ mov ecx,DWORD PTR 28[esp]
+ sub esp,32
+ movdqu xmm0,XMMWORD PTR [edi]
+ movd xmm1,DWORD PTR 16[edi]
+ and esp,-32
+ movdqa xmm3,XMMWORD PTR 80[ebp]
+ movdqu xmm4,XMMWORD PTR [esi]
+ pshufd xmm0,xmm0,27
+ movdqu xmm5,XMMWORD PTR 16[esi]
+ pshufd xmm1,xmm1,27
+ movdqu xmm6,XMMWORD PTR 32[esi]
+DB 102,15,56,0,227
+ movdqu xmm7,XMMWORD PTR 48[esi]
+DB 102,15,56,0,235
+DB 102,15,56,0,243
+DB 102,15,56,0,251
+ jmp $L004loop_shaext
+ALIGN 16
+$L004loop_shaext:
+ dec ecx
+ lea eax,DWORD PTR 64[esi]
+ movdqa XMMWORD PTR [esp],xmm1
+ paddd xmm1,xmm4
+ cmovne esi,eax
+ movdqa XMMWORD PTR 16[esp],xmm0
+DB 15,56,201,229
+ movdqa xmm2,xmm0
+DB 15,58,204,193,0
+DB 15,56,200,213
+ pxor xmm4,xmm6
+DB 15,56,201,238
+DB 15,56,202,231
+ movdqa xmm1,xmm0
+DB 15,58,204,194,0
+DB 15,56,200,206
+ pxor xmm5,xmm7
+DB 15,56,202,236
+DB 15,56,201,247
+ movdqa xmm2,xmm0
+DB 15,58,204,193,0
+DB 15,56,200,215
+ pxor xmm6,xmm4
+DB 15,56,201,252
+DB 15,56,202,245
+ movdqa xmm1,xmm0
+DB 15,58,204,194,0
+DB 15,56,200,204
+ pxor xmm7,xmm5
+DB 15,56,202,254
+DB 15,56,201,229
+ movdqa xmm2,xmm0
+DB 15,58,204,193,0
+DB 15,56,200,213
+ pxor xmm4,xmm6
+DB 15,56,201,238
+DB 15,56,202,231
+ movdqa xmm1,xmm0
+DB 15,58,204,194,1
+DB 15,56,200,206
+ pxor xmm5,xmm7
+DB 15,56,202,236
+DB 15,56,201,247
+ movdqa xmm2,xmm0
+DB 15,58,204,193,1
+DB 15,56,200,215
+ pxor xmm6,xmm4
+DB 15,56,201,252
+DB 15,56,202,245
+ movdqa xmm1,xmm0
+DB 15,58,204,194,1
+DB 15,56,200,204
+ pxor xmm7,xmm5
+DB 15,56,202,254
+DB 15,56,201,229
+ movdqa xmm2,xmm0
+DB 15,58,204,193,1
+DB 15,56,200,213
+ pxor xmm4,xmm6
+DB 15,56,201,238
+DB 15,56,202,231
+ movdqa xmm1,xmm0
+DB 15,58,204,194,1
+DB 15,56,200,206
+ pxor xmm5,xmm7
+DB 15,56,202,236
+DB 15,56,201,247
+ movdqa xmm2,xmm0
+DB 15,58,204,193,2
+DB 15,56,200,215
+ pxor xmm6,xmm4
+DB 15,56,201,252
+DB 15,56,202,245
+ movdqa xmm1,xmm0
+DB 15,58,204,194,2
+DB 15,56,200,204
+ pxor xmm7,xmm5
+DB 15,56,202,254
+DB 15,56,201,229
+ movdqa xmm2,xmm0
+DB 15,58,204,193,2
+DB 15,56,200,213
+ pxor xmm4,xmm6
+DB 15,56,201,238
+DB 15,56,202,231
+ movdqa xmm1,xmm0
+DB 15,58,204,194,2
+DB 15,56,200,206
+ pxor xmm5,xmm7
+DB 15,56,202,236
+DB 15,56,201,247
+ movdqa xmm2,xmm0
+DB 15,58,204,193,2
+DB 15,56,200,215
+ pxor xmm6,xmm4
+DB 15,56,201,252
+DB 15,56,202,245
+ movdqa xmm1,xmm0
+DB 15,58,204,194,3
+DB 15,56,200,204
+ pxor xmm7,xmm5
+DB 15,56,202,254
+ movdqu xmm4,XMMWORD PTR [esi]
+ movdqa xmm2,xmm0
+DB 15,58,204,193,3
+DB 15,56,200,213
+ movdqu xmm5,XMMWORD PTR 16[esi]
+DB 102,15,56,0,227
+ movdqa xmm1,xmm0
+DB 15,58,204,194,3
+DB 15,56,200,206
+ movdqu xmm6,XMMWORD PTR 32[esi]
+DB 102,15,56,0,235
+ movdqa xmm2,xmm0
+DB 15,58,204,193,3
+DB 15,56,200,215
+ movdqu xmm7,XMMWORD PTR 48[esi]
+DB 102,15,56,0,243
+ movdqa xmm1,xmm0
+DB 15,58,204,194,3
+ movdqa xmm2,XMMWORD PTR [esp]
+DB 102,15,56,0,251
+DB 15,56,200,202
+ paddd xmm0,XMMWORD PTR 16[esp]
+ jnz $L004loop_shaext
+ pshufd xmm0,xmm0,27
+ pshufd xmm1,xmm1,27
+ movdqu XMMWORD PTR [edi],xmm0
+ movd DWORD PTR 16[edi],xmm1
+ mov esp,ebx
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+__sha1_block_data_order_shaext ENDP
+ALIGN 16
+__sha1_block_data_order_ssse3 PROC PRIVATE
+ push ebp
+ push ebx
+ push esi
+ push edi
+ call $L005pic_point
+$L005pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($LK_XX_XX-$L005pic_point)[ebp]
+$Lssse3_shortcut::
+ movdqa xmm7,XMMWORD PTR [ebp]
+ movdqa xmm0,XMMWORD PTR 16[ebp]
+ movdqa xmm1,XMMWORD PTR 32[ebp]
+ movdqa xmm2,XMMWORD PTR 48[ebp]
+ movdqa xmm6,XMMWORD PTR 64[ebp]
+ mov edi,DWORD PTR 20[esp]
+ mov ebp,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov esi,esp
+ sub esp,208
+ and esp,-64
+ movdqa XMMWORD PTR 112[esp],xmm0
+ movdqa XMMWORD PTR 128[esp],xmm1
+ movdqa XMMWORD PTR 144[esp],xmm2
+ shl edx,6
+ movdqa XMMWORD PTR 160[esp],xmm7
+ add edx,ebp
+ movdqa XMMWORD PTR 176[esp],xmm6
+ add ebp,64
+ mov DWORD PTR 192[esp],edi
+ mov DWORD PTR 196[esp],ebp
+ mov DWORD PTR 200[esp],edx
+ mov DWORD PTR 204[esp],esi
+ mov eax,DWORD PTR [edi]
+ mov ebx,DWORD PTR 4[edi]
+ mov ecx,DWORD PTR 8[edi]
+ mov edx,DWORD PTR 12[edi]
+ mov edi,DWORD PTR 16[edi]
+ mov esi,ebx
+ movdqu xmm0,XMMWORD PTR [ebp-64]
+ movdqu xmm1,XMMWORD PTR [ebp-48]
+ movdqu xmm2,XMMWORD PTR [ebp-32]
+ movdqu xmm3,XMMWORD PTR [ebp-16]
+DB 102,15,56,0,198
+DB 102,15,56,0,206
+DB 102,15,56,0,214
+ movdqa XMMWORD PTR 96[esp],xmm7
+DB 102,15,56,0,222
+ paddd xmm0,xmm7
+ paddd xmm1,xmm7
+ paddd xmm2,xmm7
+ movdqa XMMWORD PTR [esp],xmm0
+ psubd xmm0,xmm7
+ movdqa XMMWORD PTR 16[esp],xmm1
+ psubd xmm1,xmm7
+ movdqa XMMWORD PTR 32[esp],xmm2
+ mov ebp,ecx
+ psubd xmm2,xmm7
+ xor ebp,edx
+ pshufd xmm4,xmm0,238
+ and esi,ebp
+ jmp $L006loop
+ALIGN 16
+$L006loop:
+ ror ebx,2
+ xor esi,edx
+ mov ebp,eax
+ punpcklqdq xmm4,xmm1
+ movdqa xmm6,xmm3
+ add edi,DWORD PTR [esp]
+ xor ebx,ecx
+ paddd xmm7,xmm3
+ movdqa XMMWORD PTR 64[esp],xmm0
+ rol eax,5
+ add edi,esi
+ psrldq xmm6,4
+ and ebp,ebx
+ xor ebx,ecx
+ pxor xmm4,xmm0
+ add edi,eax
+ ror eax,7
+ pxor xmm6,xmm2
+ xor ebp,ecx
+ mov esi,edi
+ add edx,DWORD PTR 4[esp]
+ pxor xmm4,xmm6
+ xor eax,ebx
+ rol edi,5
+ movdqa XMMWORD PTR 48[esp],xmm7
+ add edx,ebp
+ and esi,eax
+ movdqa xmm0,xmm4
+ xor eax,ebx
+ add edx,edi
+ ror edi,7
+ movdqa xmm6,xmm4
+ xor esi,ebx
+ pslldq xmm0,12
+ paddd xmm4,xmm4
+ mov ebp,edx
+ add ecx,DWORD PTR 8[esp]
+ psrld xmm6,31
+ xor edi,eax
+ rol edx,5
+ movdqa xmm7,xmm0
+ add ecx,esi
+ and ebp,edi
+ xor edi,eax
+ psrld xmm0,30
+ add ecx,edx
+ ror edx,7
+ por xmm4,xmm6
+ xor ebp,eax
+ mov esi,ecx
+ add ebx,DWORD PTR 12[esp]
+ pslld xmm7,2
+ xor edx,edi
+ rol ecx,5
+ pxor xmm4,xmm0
+ movdqa xmm0,XMMWORD PTR 96[esp]
+ add ebx,ebp
+ and esi,edx
+ pxor xmm4,xmm7
+ pshufd xmm5,xmm1,238
+ xor edx,edi
+ add ebx,ecx
+ ror ecx,7
+ xor esi,edi
+ mov ebp,ebx
+ punpcklqdq xmm5,xmm2
+ movdqa xmm7,xmm4
+ add eax,DWORD PTR 16[esp]
+ xor ecx,edx
+ paddd xmm0,xmm4
+ movdqa XMMWORD PTR 80[esp],xmm1
+ rol ebx,5
+ add eax,esi
+ psrldq xmm7,4
+ and ebp,ecx
+ xor ecx,edx
+ pxor xmm5,xmm1
+ add eax,ebx
+ ror ebx,7
+ pxor xmm7,xmm3
+ xor ebp,edx
+ mov esi,eax
+ add edi,DWORD PTR 20[esp]
+ pxor xmm5,xmm7
+ xor ebx,ecx
+ rol eax,5
+ movdqa XMMWORD PTR [esp],xmm0
+ add edi,ebp
+ and esi,ebx
+ movdqa xmm1,xmm5
+ xor ebx,ecx
+ add edi,eax
+ ror eax,7
+ movdqa xmm7,xmm5
+ xor esi,ecx
+ pslldq xmm1,12
+ paddd xmm5,xmm5
+ mov ebp,edi
+ add edx,DWORD PTR 24[esp]
+ psrld xmm7,31
+ xor eax,ebx
+ rol edi,5
+ movdqa xmm0,xmm1
+ add edx,esi
+ and ebp,eax
+ xor eax,ebx
+ psrld xmm1,30
+ add edx,edi
+ ror edi,7
+ por xmm5,xmm7
+ xor ebp,ebx
+ mov esi,edx
+ add ecx,DWORD PTR 28[esp]
+ pslld xmm0,2
+ xor edi,eax
+ rol edx,5
+ pxor xmm5,xmm1
+ movdqa xmm1,XMMWORD PTR 112[esp]
+ add ecx,ebp
+ and esi,edi
+ pxor xmm5,xmm0
+ pshufd xmm6,xmm2,238
+ xor edi,eax
+ add ecx,edx
+ ror edx,7
+ xor esi,eax
+ mov ebp,ecx
+ punpcklqdq xmm6,xmm3
+ movdqa xmm0,xmm5
+ add ebx,DWORD PTR 32[esp]
+ xor edx,edi
+ paddd xmm1,xmm5
+ movdqa XMMWORD PTR 96[esp],xmm2
+ rol ecx,5
+ add ebx,esi
+ psrldq xmm0,4
+ and ebp,edx
+ xor edx,edi
+ pxor xmm6,xmm2
+ add ebx,ecx
+ ror ecx,7
+ pxor xmm0,xmm4
+ xor ebp,edi
+ mov esi,ebx
+ add eax,DWORD PTR 36[esp]
+ pxor xmm6,xmm0
+ xor ecx,edx
+ rol ebx,5
+ movdqa XMMWORD PTR 16[esp],xmm1
+ add eax,ebp
+ and esi,ecx
+ movdqa xmm2,xmm6
+ xor ecx,edx
+ add eax,ebx
+ ror ebx,7
+ movdqa xmm0,xmm6
+ xor esi,edx
+ pslldq xmm2,12
+ paddd xmm6,xmm6
+ mov ebp,eax
+ add edi,DWORD PTR 40[esp]
+ psrld xmm0,31
+ xor ebx,ecx
+ rol eax,5
+ movdqa xmm1,xmm2
+ add edi,esi
+ and ebp,ebx
+ xor ebx,ecx
+ psrld xmm2,30
+ add edi,eax
+ ror eax,7
+ por xmm6,xmm0
+ xor ebp,ecx
+ movdqa xmm0,XMMWORD PTR 64[esp]
+ mov esi,edi
+ add edx,DWORD PTR 44[esp]
+ pslld xmm1,2
+ xor eax,ebx
+ rol edi,5
+ pxor xmm6,xmm2
+ movdqa xmm2,XMMWORD PTR 112[esp]
+ add edx,ebp
+ and esi,eax
+ pxor xmm6,xmm1
+ pshufd xmm7,xmm3,238
+ xor eax,ebx
+ add edx,edi
+ ror edi,7
+ xor esi,ebx
+ mov ebp,edx
+ punpcklqdq xmm7,xmm4
+ movdqa xmm1,xmm6
+ add ecx,DWORD PTR 48[esp]
+ xor edi,eax
+ paddd xmm2,xmm6
+ movdqa XMMWORD PTR 64[esp],xmm3
+ rol edx,5
+ add ecx,esi
+ psrldq xmm1,4
+ and ebp,edi
+ xor edi,eax
+ pxor xmm7,xmm3
+ add ecx,edx
+ ror edx,7
+ pxor xmm1,xmm5
+ xor ebp,eax
+ mov esi,ecx
+ add ebx,DWORD PTR 52[esp]
+ pxor xmm7,xmm1
+ xor edx,edi
+ rol ecx,5
+ movdqa XMMWORD PTR 32[esp],xmm2
+ add ebx,ebp
+ and esi,edx
+ movdqa xmm3,xmm7
+ xor edx,edi
+ add ebx,ecx
+ ror ecx,7
+ movdqa xmm1,xmm7
+ xor esi,edi
+ pslldq xmm3,12
+ paddd xmm7,xmm7
+ mov ebp,ebx
+ add eax,DWORD PTR 56[esp]
+ psrld xmm1,31
+ xor ecx,edx
+ rol ebx,5
+ movdqa xmm2,xmm3
+ add eax,esi
+ and ebp,ecx
+ xor ecx,edx
+ psrld xmm3,30
+ add eax,ebx
+ ror ebx,7
+ por xmm7,xmm1
+ xor ebp,edx
+ movdqa xmm1,XMMWORD PTR 80[esp]
+ mov esi,eax
+ add edi,DWORD PTR 60[esp]
+ pslld xmm2,2
+ xor ebx,ecx
+ rol eax,5
+ pxor xmm7,xmm3
+ movdqa xmm3,XMMWORD PTR 112[esp]
+ add edi,ebp
+ and esi,ebx
+ pxor xmm7,xmm2
+ pshufd xmm2,xmm6,238
+ xor ebx,ecx
+ add edi,eax
+ ror eax,7
+ pxor xmm0,xmm4
+ punpcklqdq xmm2,xmm7
+ xor esi,ecx
+ mov ebp,edi
+ add edx,DWORD PTR [esp]
+ pxor xmm0,xmm1
+ movdqa XMMWORD PTR 80[esp],xmm4
+ xor eax,ebx
+ rol edi,5
+ movdqa xmm4,xmm3
+ add edx,esi
+ paddd xmm3,xmm7
+ and ebp,eax
+ pxor xmm0,xmm2
+ xor eax,ebx
+ add edx,edi
+ ror edi,7
+ xor ebp,ebx
+ movdqa xmm2,xmm0
+ movdqa XMMWORD PTR 48[esp],xmm3
+ mov esi,edx
+ add ecx,DWORD PTR 4[esp]
+ xor edi,eax
+ rol edx,5
+ pslld xmm0,2
+ add ecx,ebp
+ and esi,edi
+ psrld xmm2,30
+ xor edi,eax
+ add ecx,edx
+ ror edx,7
+ xor esi,eax
+ mov ebp,ecx
+ add ebx,DWORD PTR 8[esp]
+ xor edx,edi
+ rol ecx,5
+ por xmm0,xmm2
+ add ebx,esi
+ and ebp,edx
+ movdqa xmm2,XMMWORD PTR 96[esp]
+ xor edx,edi
+ add ebx,ecx
+ add eax,DWORD PTR 12[esp]
+ xor ebp,edi
+ mov esi,ebx
+ pshufd xmm3,xmm7,238
+ rol ebx,5
+ add eax,ebp
+ xor esi,edx
+ ror ecx,7
+ add eax,ebx
+ add edi,DWORD PTR 16[esp]
+ pxor xmm1,xmm5
+ punpcklqdq xmm3,xmm0
+ xor esi,ecx
+ mov ebp,eax
+ rol eax,5
+ pxor xmm1,xmm2
+ movdqa XMMWORD PTR 96[esp],xmm5
+ add edi,esi
+ xor ebp,ecx
+ movdqa xmm5,xmm4
+ ror ebx,7
+ paddd xmm4,xmm0
+ add edi,eax
+ pxor xmm1,xmm3
+ add edx,DWORD PTR 20[esp]
+ xor ebp,ebx
+ mov esi,edi
+ rol edi,5
+ movdqa xmm3,xmm1
+ movdqa XMMWORD PTR [esp],xmm4
+ add edx,ebp
+ xor esi,ebx
+ ror eax,7
+ add edx,edi
+ pslld xmm1,2
+ add ecx,DWORD PTR 24[esp]
+ xor esi,eax
+ psrld xmm3,30
+ mov ebp,edx
+ rol edx,5
+ add ecx,esi
+ xor ebp,eax
+ ror edi,7
+ add ecx,edx
+ por xmm1,xmm3
+ add ebx,DWORD PTR 28[esp]
+ xor ebp,edi
+ movdqa xmm3,XMMWORD PTR 64[esp]
+ mov esi,ecx
+ rol ecx,5
+ add ebx,ebp
+ xor esi,edi
+ ror edx,7
+ pshufd xmm4,xmm0,238
+ add ebx,ecx
+ add eax,DWORD PTR 32[esp]
+ pxor xmm2,xmm6
+ punpcklqdq xmm4,xmm1
+ xor esi,edx
+ mov ebp,ebx
+ rol ebx,5
+ pxor xmm2,xmm3
+ movdqa XMMWORD PTR 64[esp],xmm6
+ add eax,esi
+ xor ebp,edx
+ movdqa xmm6,XMMWORD PTR 128[esp]
+ ror ecx,7
+ paddd xmm5,xmm1
+ add eax,ebx
+ pxor xmm2,xmm4
+ add edi,DWORD PTR 36[esp]
+ xor ebp,ecx
+ mov esi,eax
+ rol eax,5
+ movdqa xmm4,xmm2
+ movdqa XMMWORD PTR 16[esp],xmm5
+ add edi,ebp
+ xor esi,ecx
+ ror ebx,7
+ add edi,eax
+ pslld xmm2,2
+ add edx,DWORD PTR 40[esp]
+ xor esi,ebx
+ psrld xmm4,30
+ mov ebp,edi
+ rol edi,5
+ add edx,esi
+ xor ebp,ebx
+ ror eax,7
+ add edx,edi
+ por xmm2,xmm4
+ add ecx,DWORD PTR 44[esp]
+ xor ebp,eax
+ movdqa xmm4,XMMWORD PTR 80[esp]
+ mov esi,edx
+ rol edx,5
+ add ecx,ebp
+ xor esi,eax
+ ror edi,7
+ pshufd xmm5,xmm1,238
+ add ecx,edx
+ add ebx,DWORD PTR 48[esp]
+ pxor xmm3,xmm7
+ punpcklqdq xmm5,xmm2
+ xor esi,edi
+ mov ebp,ecx
+ rol ecx,5
+ pxor xmm3,xmm4
+ movdqa XMMWORD PTR 80[esp],xmm7
+ add ebx,esi
+ xor ebp,edi
+ movdqa xmm7,xmm6
+ ror edx,7
+ paddd xmm6,xmm2
+ add ebx,ecx
+ pxor xmm3,xmm5
+ add eax,DWORD PTR 52[esp]
+ xor ebp,edx
+ mov esi,ebx
+ rol ebx,5
+ movdqa xmm5,xmm3
+ movdqa XMMWORD PTR 32[esp],xmm6
+ add eax,ebp
+ xor esi,edx
+ ror ecx,7
+ add eax,ebx
+ pslld xmm3,2
+ add edi,DWORD PTR 56[esp]
+ xor esi,ecx
+ psrld xmm5,30
+ mov ebp,eax
+ rol eax,5
+ add edi,esi
+ xor ebp,ecx
+ ror ebx,7
+ add edi,eax
+ por xmm3,xmm5
+ add edx,DWORD PTR 60[esp]
+ xor ebp,ebx
+ movdqa xmm5,XMMWORD PTR 96[esp]
+ mov esi,edi
+ rol edi,5
+ add edx,ebp
+ xor esi,ebx
+ ror eax,7
+ pshufd xmm6,xmm2,238
+ add edx,edi
+ add ecx,DWORD PTR [esp]
+ pxor xmm4,xmm0
+ punpcklqdq xmm6,xmm3
+ xor esi,eax
+ mov ebp,edx
+ rol edx,5
+ pxor xmm4,xmm5
+ movdqa XMMWORD PTR 96[esp],xmm0
+ add ecx,esi
+ xor ebp,eax
+ movdqa xmm0,xmm7
+ ror edi,7
+ paddd xmm7,xmm3
+ add ecx,edx
+ pxor xmm4,xmm6
+ add ebx,DWORD PTR 4[esp]
+ xor ebp,edi
+ mov esi,ecx
+ rol ecx,5
+ movdqa xmm6,xmm4
+ movdqa XMMWORD PTR 48[esp],xmm7
+ add ebx,ebp
+ xor esi,edi
+ ror edx,7
+ add ebx,ecx
+ pslld xmm4,2
+ add eax,DWORD PTR 8[esp]
+ xor esi,edx
+ psrld xmm6,30
+ mov ebp,ebx
+ rol ebx,5
+ add eax,esi
+ xor ebp,edx
+ ror ecx,7
+ add eax,ebx
+ por xmm4,xmm6
+ add edi,DWORD PTR 12[esp]
+ xor ebp,ecx
+ movdqa xmm6,XMMWORD PTR 64[esp]
+ mov esi,eax
+ rol eax,5
+ add edi,ebp
+ xor esi,ecx
+ ror ebx,7
+ pshufd xmm7,xmm3,238
+ add edi,eax
+ add edx,DWORD PTR 16[esp]
+ pxor xmm5,xmm1
+ punpcklqdq xmm7,xmm4
+ xor esi,ebx
+ mov ebp,edi
+ rol edi,5
+ pxor xmm5,xmm6
+ movdqa XMMWORD PTR 64[esp],xmm1
+ add edx,esi
+ xor ebp,ebx
+ movdqa xmm1,xmm0
+ ror eax,7
+ paddd xmm0,xmm4
+ add edx,edi
+ pxor xmm5,xmm7
+ add ecx,DWORD PTR 20[esp]
+ xor ebp,eax
+ mov esi,edx
+ rol edx,5
+ movdqa xmm7,xmm5
+ movdqa XMMWORD PTR [esp],xmm0
+ add ecx,ebp
+ xor esi,eax
+ ror edi,7
+ add ecx,edx
+ pslld xmm5,2
+ add ebx,DWORD PTR 24[esp]
+ xor esi,edi
+ psrld xmm7,30
+ mov ebp,ecx
+ rol ecx,5
+ add ebx,esi
+ xor ebp,edi
+ ror edx,7
+ add ebx,ecx
+ por xmm5,xmm7
+ add eax,DWORD PTR 28[esp]
+ movdqa xmm7,XMMWORD PTR 80[esp]
+ ror ecx,7
+ mov esi,ebx
+ xor ebp,edx
+ rol ebx,5
+ pshufd xmm0,xmm4,238
+ add eax,ebp
+ xor esi,ecx
+ xor ecx,edx
+ add eax,ebx
+ add edi,DWORD PTR 32[esp]
+ pxor xmm6,xmm2
+ punpcklqdq xmm0,xmm5
+ and esi,ecx
+ xor ecx,edx
+ ror ebx,7
+ pxor xmm6,xmm7
+ movdqa XMMWORD PTR 80[esp],xmm2
+ mov ebp,eax
+ xor esi,ecx
+ rol eax,5
+ movdqa xmm2,xmm1
+ add edi,esi
+ paddd xmm1,xmm5
+ xor ebp,ebx
+ pxor xmm6,xmm0
+ xor ebx,ecx
+ add edi,eax
+ add edx,DWORD PTR 36[esp]
+ and ebp,ebx
+ movdqa xmm0,xmm6
+ movdqa XMMWORD PTR 16[esp],xmm1
+ xor ebx,ecx
+ ror eax,7
+ mov esi,edi
+ xor ebp,ebx
+ rol edi,5
+ pslld xmm6,2
+ add edx,ebp
+ xor esi,eax
+ psrld xmm0,30
+ xor eax,ebx
+ add edx,edi
+ add ecx,DWORD PTR 40[esp]
+ and esi,eax
+ xor eax,ebx
+ ror edi,7
+ por xmm6,xmm0
+ mov ebp,edx
+ xor esi,eax
+ movdqa xmm0,XMMWORD PTR 96[esp]
+ rol edx,5
+ add ecx,esi
+ xor ebp,edi
+ xor edi,eax
+ add ecx,edx
+ pshufd xmm1,xmm5,238
+ add ebx,DWORD PTR 44[esp]
+ and ebp,edi
+ xor edi,eax
+ ror edx,7
+ mov esi,ecx
+ xor ebp,edi
+ rol ecx,5
+ add ebx,ebp
+ xor esi,edx
+ xor edx,edi
+ add ebx,ecx
+ add eax,DWORD PTR 48[esp]
+ pxor xmm7,xmm3
+ punpcklqdq xmm1,xmm6
+ and esi,edx
+ xor edx,edi
+ ror ecx,7
+ pxor xmm7,xmm0
+ movdqa XMMWORD PTR 96[esp],xmm3
+ mov ebp,ebx
+ xor esi,edx
+ rol ebx,5
+ movdqa xmm3,XMMWORD PTR 144[esp]
+ add eax,esi
+ paddd xmm2,xmm6
+ xor ebp,ecx
+ pxor xmm7,xmm1
+ xor ecx,edx
+ add eax,ebx
+ add edi,DWORD PTR 52[esp]
+ and ebp,ecx
+ movdqa xmm1,xmm7
+ movdqa XMMWORD PTR 32[esp],xmm2
+ xor ecx,edx
+ ror ebx,7
+ mov esi,eax
+ xor ebp,ecx
+ rol eax,5
+ pslld xmm7,2
+ add edi,ebp
+ xor esi,ebx
+ psrld xmm1,30
+ xor ebx,ecx
+ add edi,eax
+ add edx,DWORD PTR 56[esp]
+ and esi,ebx
+ xor ebx,ecx
+ ror eax,7
+ por xmm7,xmm1
+ mov ebp,edi
+ xor esi,ebx
+ movdqa xmm1,XMMWORD PTR 64[esp]
+ rol edi,5
+ add edx,esi
+ xor ebp,eax
+ xor eax,ebx
+ add edx,edi
+ pshufd xmm2,xmm6,238
+ add ecx,DWORD PTR 60[esp]
+ and ebp,eax
+ xor eax,ebx
+ ror edi,7
+ mov esi,edx
+ xor ebp,eax
+ rol edx,5
+ add ecx,ebp
+ xor esi,edi
+ xor edi,eax
+ add ecx,edx
+ add ebx,DWORD PTR [esp]
+ pxor xmm0,xmm4
+ punpcklqdq xmm2,xmm7
+ and esi,edi
+ xor edi,eax
+ ror edx,7
+ pxor xmm0,xmm1
+ movdqa XMMWORD PTR 64[esp],xmm4
+ mov ebp,ecx
+ xor esi,edi
+ rol ecx,5
+ movdqa xmm4,xmm3
+ add ebx,esi
+ paddd xmm3,xmm7
+ xor ebp,edx
+ pxor xmm0,xmm2
+ xor edx,edi
+ add ebx,ecx
+ add eax,DWORD PTR 4[esp]
+ and ebp,edx
+ movdqa xmm2,xmm0
+ movdqa XMMWORD PTR 48[esp],xmm3
+ xor edx,edi
+ ror ecx,7
+ mov esi,ebx
+ xor ebp,edx
+ rol ebx,5
+ pslld xmm0,2
+ add eax,ebp
+ xor esi,ecx
+ psrld xmm2,30
+ xor ecx,edx
+ add eax,ebx
+ add edi,DWORD PTR 8[esp]
+ and esi,ecx
+ xor ecx,edx
+ ror ebx,7
+ por xmm0,xmm2
+ mov ebp,eax
+ xor esi,ecx
+ movdqa xmm2,XMMWORD PTR 80[esp]
+ rol eax,5
+ add edi,esi
+ xor ebp,ebx
+ xor ebx,ecx
+ add edi,eax
+ pshufd xmm3,xmm7,238
+ add edx,DWORD PTR 12[esp]
+ and ebp,ebx
+ xor ebx,ecx
+ ror eax,7
+ mov esi,edi
+ xor ebp,ebx
+ rol edi,5
+ add edx,ebp
+ xor esi,eax
+ xor eax,ebx
+ add edx,edi
+ add ecx,DWORD PTR 16[esp]
+ pxor xmm1,xmm5
+ punpcklqdq xmm3,xmm0
+ and esi,eax
+ xor eax,ebx
+ ror edi,7
+ pxor xmm1,xmm2
+ movdqa XMMWORD PTR 80[esp],xmm5
+ mov ebp,edx
+ xor esi,eax
+ rol edx,5
+ movdqa xmm5,xmm4
+ add ecx,esi
+ paddd xmm4,xmm0
+ xor ebp,edi
+ pxor xmm1,xmm3
+ xor edi,eax
+ add ecx,edx
+ add ebx,DWORD PTR 20[esp]
+ and ebp,edi
+ movdqa xmm3,xmm1
+ movdqa XMMWORD PTR [esp],xmm4
+ xor edi,eax
+ ror edx,7
+ mov esi,ecx
+ xor ebp,edi
+ rol ecx,5
+ pslld xmm1,2
+ add ebx,ebp
+ xor esi,edx
+ psrld xmm3,30
+ xor edx,edi
+ add ebx,ecx
+ add eax,DWORD PTR 24[esp]
+ and esi,edx
+ xor edx,edi
+ ror ecx,7
+ por xmm1,xmm3
+ mov ebp,ebx
+ xor esi,edx
+ movdqa xmm3,XMMWORD PTR 96[esp]
+ rol ebx,5
+ add eax,esi
+ xor ebp,ecx
+ xor ecx,edx
+ add eax,ebx
+ pshufd xmm4,xmm0,238
+ add edi,DWORD PTR 28[esp]
+ and ebp,ecx
+ xor ecx,edx
+ ror ebx,7
+ mov esi,eax
+ xor ebp,ecx
+ rol eax,5
+ add edi,ebp
+ xor esi,ebx
+ xor ebx,ecx
+ add edi,eax
+ add edx,DWORD PTR 32[esp]
+ pxor xmm2,xmm6
+ punpcklqdq xmm4,xmm1
+ and esi,ebx
+ xor ebx,ecx
+ ror eax,7
+ pxor xmm2,xmm3
+ movdqa XMMWORD PTR 96[esp],xmm6
+ mov ebp,edi
+ xor esi,ebx
+ rol edi,5
+ movdqa xmm6,xmm5
+ add edx,esi
+ paddd xmm5,xmm1
+ xor ebp,eax
+ pxor xmm2,xmm4
+ xor eax,ebx
+ add edx,edi
+ add ecx,DWORD PTR 36[esp]
+ and ebp,eax
+ movdqa xmm4,xmm2
+ movdqa XMMWORD PTR 16[esp],xmm5
+ xor eax,ebx
+ ror edi,7
+ mov esi,edx
+ xor ebp,eax
+ rol edx,5
+ pslld xmm2,2
+ add ecx,ebp
+ xor esi,edi
+ psrld xmm4,30
+ xor edi,eax
+ add ecx,edx
+ add ebx,DWORD PTR 40[esp]
+ and esi,edi
+ xor edi,eax
+ ror edx,7
+ por xmm2,xmm4
+ mov ebp,ecx
+ xor esi,edi
+ movdqa xmm4,XMMWORD PTR 64[esp]
+ rol ecx,5
+ add ebx,esi
+ xor ebp,edx
+ xor edx,edi
+ add ebx,ecx
+ pshufd xmm5,xmm1,238
+ add eax,DWORD PTR 44[esp]
+ and ebp,edx
+ xor edx,edi
+ ror ecx,7
+ mov esi,ebx
+ xor ebp,edx
+ rol ebx,5
+ add eax,ebp
+ xor esi,edx
+ add eax,ebx
+ add edi,DWORD PTR 48[esp]
+ pxor xmm3,xmm7
+ punpcklqdq xmm5,xmm2
+ xor esi,ecx
+ mov ebp,eax
+ rol eax,5
+ pxor xmm3,xmm4
+ movdqa XMMWORD PTR 64[esp],xmm7
+ add edi,esi
+ xor ebp,ecx
+ movdqa xmm7,xmm6
+ ror ebx,7
+ paddd xmm6,xmm2
+ add edi,eax
+ pxor xmm3,xmm5
+ add edx,DWORD PTR 52[esp]
+ xor ebp,ebx
+ mov esi,edi
+ rol edi,5
+ movdqa xmm5,xmm3
+ movdqa XMMWORD PTR 32[esp],xmm6
+ add edx,ebp
+ xor esi,ebx
+ ror eax,7
+ add edx,edi
+ pslld xmm3,2
+ add ecx,DWORD PTR 56[esp]
+ xor esi,eax
+ psrld xmm5,30
+ mov ebp,edx
+ rol edx,5
+ add ecx,esi
+ xor ebp,eax
+ ror edi,7
+ add ecx,edx
+ por xmm3,xmm5
+ add ebx,DWORD PTR 60[esp]
+ xor ebp,edi
+ mov esi,ecx
+ rol ecx,5
+ add ebx,ebp
+ xor esi,edi
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR [esp]
+ xor esi,edx
+ mov ebp,ebx
+ rol ebx,5
+ add eax,esi
+ xor ebp,edx
+ ror ecx,7
+ paddd xmm7,xmm3
+ add eax,ebx
+ add edi,DWORD PTR 4[esp]
+ xor ebp,ecx
+ mov esi,eax
+ movdqa XMMWORD PTR 48[esp],xmm7
+ rol eax,5
+ add edi,ebp
+ xor esi,ecx
+ ror ebx,7
+ add edi,eax
+ add edx,DWORD PTR 8[esp]
+ xor esi,ebx
+ mov ebp,edi
+ rol edi,5
+ add edx,esi
+ xor ebp,ebx
+ ror eax,7
+ add edx,edi
+ add ecx,DWORD PTR 12[esp]
+ xor ebp,eax
+ mov esi,edx
+ rol edx,5
+ add ecx,ebp
+ xor esi,eax
+ ror edi,7
+ add ecx,edx
+ mov ebp,DWORD PTR 196[esp]
+ cmp ebp,DWORD PTR 200[esp]
+ je $L007done
+ movdqa xmm7,XMMWORD PTR 160[esp]
+ movdqa xmm6,XMMWORD PTR 176[esp]
+ movdqu xmm0,XMMWORD PTR [ebp]
+ movdqu xmm1,XMMWORD PTR 16[ebp]
+ movdqu xmm2,XMMWORD PTR 32[ebp]
+ movdqu xmm3,XMMWORD PTR 48[ebp]
+ add ebp,64
+DB 102,15,56,0,198
+ mov DWORD PTR 196[esp],ebp
+ movdqa XMMWORD PTR 96[esp],xmm7
+ add ebx,DWORD PTR 16[esp]
+ xor esi,edi
+ mov ebp,ecx
+ rol ecx,5
+ add ebx,esi
+ xor ebp,edi
+ ror edx,7
+DB 102,15,56,0,206
+ add ebx,ecx
+ add eax,DWORD PTR 20[esp]
+ xor ebp,edx
+ mov esi,ebx
+ paddd xmm0,xmm7
+ rol ebx,5
+ add eax,ebp
+ xor esi,edx
+ ror ecx,7
+ movdqa XMMWORD PTR [esp],xmm0
+ add eax,ebx
+ add edi,DWORD PTR 24[esp]
+ xor esi,ecx
+ mov ebp,eax
+ psubd xmm0,xmm7
+ rol eax,5
+ add edi,esi
+ xor ebp,ecx
+ ror ebx,7
+ add edi,eax
+ add edx,DWORD PTR 28[esp]
+ xor ebp,ebx
+ mov esi,edi
+ rol edi,5
+ add edx,ebp
+ xor esi,ebx
+ ror eax,7
+ add edx,edi
+ add ecx,DWORD PTR 32[esp]
+ xor esi,eax
+ mov ebp,edx
+ rol edx,5
+ add ecx,esi
+ xor ebp,eax
+ ror edi,7
+DB 102,15,56,0,214
+ add ecx,edx
+ add ebx,DWORD PTR 36[esp]
+ xor ebp,edi
+ mov esi,ecx
+ paddd xmm1,xmm7
+ rol ecx,5
+ add ebx,ebp
+ xor esi,edi
+ ror edx,7
+ movdqa XMMWORD PTR 16[esp],xmm1
+ add ebx,ecx
+ add eax,DWORD PTR 40[esp]
+ xor esi,edx
+ mov ebp,ebx
+ psubd xmm1,xmm7
+ rol ebx,5
+ add eax,esi
+ xor ebp,edx
+ ror ecx,7
+ add eax,ebx
+ add edi,DWORD PTR 44[esp]
+ xor ebp,ecx
+ mov esi,eax
+ rol eax,5
+ add edi,ebp
+ xor esi,ecx
+ ror ebx,7
+ add edi,eax
+ add edx,DWORD PTR 48[esp]
+ xor esi,ebx
+ mov ebp,edi
+ rol edi,5
+ add edx,esi
+ xor ebp,ebx
+ ror eax,7
+DB 102,15,56,0,222
+ add edx,edi
+ add ecx,DWORD PTR 52[esp]
+ xor ebp,eax
+ mov esi,edx
+ paddd xmm2,xmm7
+ rol edx,5
+ add ecx,ebp
+ xor esi,eax
+ ror edi,7
+ movdqa XMMWORD PTR 32[esp],xmm2
+ add ecx,edx
+ add ebx,DWORD PTR 56[esp]
+ xor esi,edi
+ mov ebp,ecx
+ psubd xmm2,xmm7
+ rol ecx,5
+ add ebx,esi
+ xor ebp,edi
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR 60[esp]
+ xor ebp,edx
+ mov esi,ebx
+ rol ebx,5
+ add eax,ebp
+ ror ecx,7
+ add eax,ebx
+ mov ebp,DWORD PTR 192[esp]
+ add eax,DWORD PTR [ebp]
+ add esi,DWORD PTR 4[ebp]
+ add ecx,DWORD PTR 8[ebp]
+ mov DWORD PTR [ebp],eax
+ add edx,DWORD PTR 12[ebp]
+ mov DWORD PTR 4[ebp],esi
+ add edi,DWORD PTR 16[ebp]
+ mov DWORD PTR 8[ebp],ecx
+ mov ebx,ecx
+ mov DWORD PTR 12[ebp],edx
+ xor ebx,edx
+ mov DWORD PTR 16[ebp],edi
+ mov ebp,esi
+ pshufd xmm4,xmm0,238
+ and esi,ebx
+ mov ebx,ebp
+ jmp $L006loop
+ALIGN 16
+$L007done:
+ add ebx,DWORD PTR 16[esp]
+ xor esi,edi
+ mov ebp,ecx
+ rol ecx,5
+ add ebx,esi
+ xor ebp,edi
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR 20[esp]
+ xor ebp,edx
+ mov esi,ebx
+ rol ebx,5
+ add eax,ebp
+ xor esi,edx
+ ror ecx,7
+ add eax,ebx
+ add edi,DWORD PTR 24[esp]
+ xor esi,ecx
+ mov ebp,eax
+ rol eax,5
+ add edi,esi
+ xor ebp,ecx
+ ror ebx,7
+ add edi,eax
+ add edx,DWORD PTR 28[esp]
+ xor ebp,ebx
+ mov esi,edi
+ rol edi,5
+ add edx,ebp
+ xor esi,ebx
+ ror eax,7
+ add edx,edi
+ add ecx,DWORD PTR 32[esp]
+ xor esi,eax
+ mov ebp,edx
+ rol edx,5
+ add ecx,esi
+ xor ebp,eax
+ ror edi,7
+ add ecx,edx
+ add ebx,DWORD PTR 36[esp]
+ xor ebp,edi
+ mov esi,ecx
+ rol ecx,5
+ add ebx,ebp
+ xor esi,edi
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR 40[esp]
+ xor esi,edx
+ mov ebp,ebx
+ rol ebx,5
+ add eax,esi
+ xor ebp,edx
+ ror ecx,7
+ add eax,ebx
+ add edi,DWORD PTR 44[esp]
+ xor ebp,ecx
+ mov esi,eax
+ rol eax,5
+ add edi,ebp
+ xor esi,ecx
+ ror ebx,7
+ add edi,eax
+ add edx,DWORD PTR 48[esp]
+ xor esi,ebx
+ mov ebp,edi
+ rol edi,5
+ add edx,esi
+ xor ebp,ebx
+ ror eax,7
+ add edx,edi
+ add ecx,DWORD PTR 52[esp]
+ xor ebp,eax
+ mov esi,edx
+ rol edx,5
+ add ecx,ebp
+ xor esi,eax
+ ror edi,7
+ add ecx,edx
+ add ebx,DWORD PTR 56[esp]
+ xor esi,edi
+ mov ebp,ecx
+ rol ecx,5
+ add ebx,esi
+ xor ebp,edi
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR 60[esp]
+ xor ebp,edx
+ mov esi,ebx
+ rol ebx,5
+ add eax,ebp
+ ror ecx,7
+ add eax,ebx
+ mov ebp,DWORD PTR 192[esp]
+ add eax,DWORD PTR [ebp]
+ mov esp,DWORD PTR 204[esp]
+ add esi,DWORD PTR 4[ebp]
+ add ecx,DWORD PTR 8[ebp]
+ mov DWORD PTR [ebp],eax
+ add edx,DWORD PTR 12[ebp]
+ mov DWORD PTR 4[ebp],esi
+ add edi,DWORD PTR 16[ebp]
+ mov DWORD PTR 8[ebp],ecx
+ mov DWORD PTR 12[ebp],edx
+ mov DWORD PTR 16[ebp],edi
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+__sha1_block_data_order_ssse3 ENDP
+ALIGN 16
+__sha1_block_data_order_avx PROC PRIVATE
+ push ebp
+ push ebx
+ push esi
+ push edi
+ call $L008pic_point
+$L008pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($LK_XX_XX-$L008pic_point)[ebp]
+$Lavx_shortcut::
+ vzeroall
+ vmovdqa xmm7,XMMWORD PTR [ebp]
+ vmovdqa xmm0,XMMWORD PTR 16[ebp]
+ vmovdqa xmm1,XMMWORD PTR 32[ebp]
+ vmovdqa xmm2,XMMWORD PTR 48[ebp]
+ vmovdqa xmm6,XMMWORD PTR 64[ebp]
+ mov edi,DWORD PTR 20[esp]
+ mov ebp,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov esi,esp
+ sub esp,208
+ and esp,-64
+ vmovdqa XMMWORD PTR 112[esp],xmm0
+ vmovdqa XMMWORD PTR 128[esp],xmm1
+ vmovdqa XMMWORD PTR 144[esp],xmm2
+ shl edx,6
+ vmovdqa XMMWORD PTR 160[esp],xmm7
+ add edx,ebp
+ vmovdqa XMMWORD PTR 176[esp],xmm6
+ add ebp,64
+ mov DWORD PTR 192[esp],edi
+ mov DWORD PTR 196[esp],ebp
+ mov DWORD PTR 200[esp],edx
+ mov DWORD PTR 204[esp],esi
+ mov eax,DWORD PTR [edi]
+ mov ebx,DWORD PTR 4[edi]
+ mov ecx,DWORD PTR 8[edi]
+ mov edx,DWORD PTR 12[edi]
+ mov edi,DWORD PTR 16[edi]
+ mov esi,ebx
+ vmovdqu xmm0,XMMWORD PTR [ebp-64]
+ vmovdqu xmm1,XMMWORD PTR [ebp-48]
+ vmovdqu xmm2,XMMWORD PTR [ebp-32]
+ vmovdqu xmm3,XMMWORD PTR [ebp-16]
+ vpshufb xmm0,xmm0,xmm6
+ vpshufb xmm1,xmm1,xmm6
+ vpshufb xmm2,xmm2,xmm6
+ vmovdqa XMMWORD PTR 96[esp],xmm7
+ vpshufb xmm3,xmm3,xmm6
+ vpaddd xmm4,xmm0,xmm7
+ vpaddd xmm5,xmm1,xmm7
+ vpaddd xmm6,xmm2,xmm7
+ vmovdqa XMMWORD PTR [esp],xmm4
+ mov ebp,ecx
+ vmovdqa XMMWORD PTR 16[esp],xmm5
+ xor ebp,edx
+ vmovdqa XMMWORD PTR 32[esp],xmm6
+ and esi,ebp
+ jmp $L009loop
+ALIGN 16
+$L009loop:
+ shrd ebx,ebx,2
+ xor esi,edx
+ vpalignr xmm4,xmm1,xmm0,8
+ mov ebp,eax
+ add edi,DWORD PTR [esp]
+ vpaddd xmm7,xmm7,xmm3
+ vmovdqa XMMWORD PTR 64[esp],xmm0
+ xor ebx,ecx
+ shld eax,eax,5
+ vpsrldq xmm6,xmm3,4
+ add edi,esi
+ and ebp,ebx
+ vpxor xmm4,xmm4,xmm0
+ xor ebx,ecx
+ add edi,eax
+ vpxor xmm6,xmm6,xmm2
+ shrd eax,eax,7
+ xor ebp,ecx
+ vmovdqa XMMWORD PTR 48[esp],xmm7
+ mov esi,edi
+ add edx,DWORD PTR 4[esp]
+ vpxor xmm4,xmm4,xmm6
+ xor eax,ebx
+ shld edi,edi,5
+ add edx,ebp
+ and esi,eax
+ vpsrld xmm6,xmm4,31
+ xor eax,ebx
+ add edx,edi
+ shrd edi,edi,7
+ xor esi,ebx
+ vpslldq xmm0,xmm4,12
+ vpaddd xmm4,xmm4,xmm4
+ mov ebp,edx
+ add ecx,DWORD PTR 8[esp]
+ xor edi,eax
+ shld edx,edx,5
+ vpsrld xmm7,xmm0,30
+ vpor xmm4,xmm4,xmm6
+ add ecx,esi
+ and ebp,edi
+ xor edi,eax
+ add ecx,edx
+ vpslld xmm0,xmm0,2
+ shrd edx,edx,7
+ xor ebp,eax
+ vpxor xmm4,xmm4,xmm7
+ mov esi,ecx
+ add ebx,DWORD PTR 12[esp]
+ xor edx,edi
+ shld ecx,ecx,5
+ vpxor xmm4,xmm4,xmm0
+ add ebx,ebp
+ and esi,edx
+ vmovdqa xmm0,XMMWORD PTR 96[esp]
+ xor edx,edi
+ add ebx,ecx
+ shrd ecx,ecx,7
+ xor esi,edi
+ vpalignr xmm5,xmm2,xmm1,8
+ mov ebp,ebx
+ add eax,DWORD PTR 16[esp]
+ vpaddd xmm0,xmm0,xmm4
+ vmovdqa XMMWORD PTR 80[esp],xmm1
+ xor ecx,edx
+ shld ebx,ebx,5
+ vpsrldq xmm7,xmm4,4
+ add eax,esi
+ and ebp,ecx
+ vpxor xmm5,xmm5,xmm1
+ xor ecx,edx
+ add eax,ebx
+ vpxor xmm7,xmm7,xmm3
+ shrd ebx,ebx,7
+ xor ebp,edx
+ vmovdqa XMMWORD PTR [esp],xmm0
+ mov esi,eax
+ add edi,DWORD PTR 20[esp]
+ vpxor xmm5,xmm5,xmm7
+ xor ebx,ecx
+ shld eax,eax,5
+ add edi,ebp
+ and esi,ebx
+ vpsrld xmm7,xmm5,31
+ xor ebx,ecx
+ add edi,eax
+ shrd eax,eax,7
+ xor esi,ecx
+ vpslldq xmm1,xmm5,12
+ vpaddd xmm5,xmm5,xmm5
+ mov ebp,edi
+ add edx,DWORD PTR 24[esp]
+ xor eax,ebx
+ shld edi,edi,5
+ vpsrld xmm0,xmm1,30
+ vpor xmm5,xmm5,xmm7
+ add edx,esi
+ and ebp,eax
+ xor eax,ebx
+ add edx,edi
+ vpslld xmm1,xmm1,2
+ shrd edi,edi,7
+ xor ebp,ebx
+ vpxor xmm5,xmm5,xmm0
+ mov esi,edx
+ add ecx,DWORD PTR 28[esp]
+ xor edi,eax
+ shld edx,edx,5
+ vpxor xmm5,xmm5,xmm1
+ add ecx,ebp
+ and esi,edi
+ vmovdqa xmm1,XMMWORD PTR 112[esp]
+ xor edi,eax
+ add ecx,edx
+ shrd edx,edx,7
+ xor esi,eax
+ vpalignr xmm6,xmm3,xmm2,8
+ mov ebp,ecx
+ add ebx,DWORD PTR 32[esp]
+ vpaddd xmm1,xmm1,xmm5
+ vmovdqa XMMWORD PTR 96[esp],xmm2
+ xor edx,edi
+ shld ecx,ecx,5
+ vpsrldq xmm0,xmm5,4
+ add ebx,esi
+ and ebp,edx
+ vpxor xmm6,xmm6,xmm2
+ xor edx,edi
+ add ebx,ecx
+ vpxor xmm0,xmm0,xmm4
+ shrd ecx,ecx,7
+ xor ebp,edi
+ vmovdqa XMMWORD PTR 16[esp],xmm1
+ mov esi,ebx
+ add eax,DWORD PTR 36[esp]
+ vpxor xmm6,xmm6,xmm0
+ xor ecx,edx
+ shld ebx,ebx,5
+ add eax,ebp
+ and esi,ecx
+ vpsrld xmm0,xmm6,31
+ xor ecx,edx
+ add eax,ebx
+ shrd ebx,ebx,7
+ xor esi,edx
+ vpslldq xmm2,xmm6,12
+ vpaddd xmm6,xmm6,xmm6
+ mov ebp,eax
+ add edi,DWORD PTR 40[esp]
+ xor ebx,ecx
+ shld eax,eax,5
+ vpsrld xmm1,xmm2,30
+ vpor xmm6,xmm6,xmm0
+ add edi,esi
+ and ebp,ebx
+ xor ebx,ecx
+ add edi,eax
+ vpslld xmm2,xmm2,2
+ vmovdqa xmm0,XMMWORD PTR 64[esp]
+ shrd eax,eax,7
+ xor ebp,ecx
+ vpxor xmm6,xmm6,xmm1
+ mov esi,edi
+ add edx,DWORD PTR 44[esp]
+ xor eax,ebx
+ shld edi,edi,5
+ vpxor xmm6,xmm6,xmm2
+ add edx,ebp
+ and esi,eax
+ vmovdqa xmm2,XMMWORD PTR 112[esp]
+ xor eax,ebx
+ add edx,edi
+ shrd edi,edi,7
+ xor esi,ebx
+ vpalignr xmm7,xmm4,xmm3,8
+ mov ebp,edx
+ add ecx,DWORD PTR 48[esp]
+ vpaddd xmm2,xmm2,xmm6
+ vmovdqa XMMWORD PTR 64[esp],xmm3
+ xor edi,eax
+ shld edx,edx,5
+ vpsrldq xmm1,xmm6,4
+ add ecx,esi
+ and ebp,edi
+ vpxor xmm7,xmm7,xmm3
+ xor edi,eax
+ add ecx,edx
+ vpxor xmm1,xmm1,xmm5
+ shrd edx,edx,7
+ xor ebp,eax
+ vmovdqa XMMWORD PTR 32[esp],xmm2
+ mov esi,ecx
+ add ebx,DWORD PTR 52[esp]
+ vpxor xmm7,xmm7,xmm1
+ xor edx,edi
+ shld ecx,ecx,5
+ add ebx,ebp
+ and esi,edx
+ vpsrld xmm1,xmm7,31
+ xor edx,edi
+ add ebx,ecx
+ shrd ecx,ecx,7
+ xor esi,edi
+ vpslldq xmm3,xmm7,12
+ vpaddd xmm7,xmm7,xmm7
+ mov ebp,ebx
+ add eax,DWORD PTR 56[esp]
+ xor ecx,edx
+ shld ebx,ebx,5
+ vpsrld xmm2,xmm3,30
+ vpor xmm7,xmm7,xmm1
+ add eax,esi
+ and ebp,ecx
+ xor ecx,edx
+ add eax,ebx
+ vpslld xmm3,xmm3,2
+ vmovdqa xmm1,XMMWORD PTR 80[esp]
+ shrd ebx,ebx,7
+ xor ebp,edx
+ vpxor xmm7,xmm7,xmm2
+ mov esi,eax
+ add edi,DWORD PTR 60[esp]
+ xor ebx,ecx
+ shld eax,eax,5
+ vpxor xmm7,xmm7,xmm3
+ add edi,ebp
+ and esi,ebx
+ vmovdqa xmm3,XMMWORD PTR 112[esp]
+ xor ebx,ecx
+ add edi,eax
+ vpalignr xmm2,xmm7,xmm6,8
+ vpxor xmm0,xmm0,xmm4
+ shrd eax,eax,7
+ xor esi,ecx
+ mov ebp,edi
+ add edx,DWORD PTR [esp]
+ vpxor xmm0,xmm0,xmm1
+ vmovdqa XMMWORD PTR 80[esp],xmm4
+ xor eax,ebx
+ shld edi,edi,5
+ vmovdqa xmm4,xmm3
+ vpaddd xmm3,xmm3,xmm7
+ add edx,esi
+ and ebp,eax
+ vpxor xmm0,xmm0,xmm2
+ xor eax,ebx
+ add edx,edi
+ shrd edi,edi,7
+ xor ebp,ebx
+ vpsrld xmm2,xmm0,30
+ vmovdqa XMMWORD PTR 48[esp],xmm3
+ mov esi,edx
+ add ecx,DWORD PTR 4[esp]
+ xor edi,eax
+ shld edx,edx,5
+ vpslld xmm0,xmm0,2
+ add ecx,ebp
+ and esi,edi
+ xor edi,eax
+ add ecx,edx
+ shrd edx,edx,7
+ xor esi,eax
+ mov ebp,ecx
+ add ebx,DWORD PTR 8[esp]
+ vpor xmm0,xmm0,xmm2
+ xor edx,edi
+ shld ecx,ecx,5
+ vmovdqa xmm2,XMMWORD PTR 96[esp]
+ add ebx,esi
+ and ebp,edx
+ xor edx,edi
+ add ebx,ecx
+ add eax,DWORD PTR 12[esp]
+ xor ebp,edi
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,ebp
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpalignr xmm3,xmm0,xmm7,8
+ vpxor xmm1,xmm1,xmm5
+ add edi,DWORD PTR 16[esp]
+ xor esi,ecx
+ mov ebp,eax
+ shld eax,eax,5
+ vpxor xmm1,xmm1,xmm2
+ vmovdqa XMMWORD PTR 96[esp],xmm5
+ add edi,esi
+ xor ebp,ecx
+ vmovdqa xmm5,xmm4
+ vpaddd xmm4,xmm4,xmm0
+ shrd ebx,ebx,7
+ add edi,eax
+ vpxor xmm1,xmm1,xmm3
+ add edx,DWORD PTR 20[esp]
+ xor ebp,ebx
+ mov esi,edi
+ shld edi,edi,5
+ vpsrld xmm3,xmm1,30
+ vmovdqa XMMWORD PTR [esp],xmm4
+ add edx,ebp
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,edi
+ vpslld xmm1,xmm1,2
+ add ecx,DWORD PTR 24[esp]
+ xor esi,eax
+ mov ebp,edx
+ shld edx,edx,5
+ add ecx,esi
+ xor ebp,eax
+ shrd edi,edi,7
+ add ecx,edx
+ vpor xmm1,xmm1,xmm3
+ add ebx,DWORD PTR 28[esp]
+ xor ebp,edi
+ vmovdqa xmm3,XMMWORD PTR 64[esp]
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,ebp
+ xor esi,edi
+ shrd edx,edx,7
+ add ebx,ecx
+ vpalignr xmm4,xmm1,xmm0,8
+ vpxor xmm2,xmm2,xmm6
+ add eax,DWORD PTR 32[esp]
+ xor esi,edx
+ mov ebp,ebx
+ shld ebx,ebx,5
+ vpxor xmm2,xmm2,xmm3
+ vmovdqa XMMWORD PTR 64[esp],xmm6
+ add eax,esi
+ xor ebp,edx
+ vmovdqa xmm6,XMMWORD PTR 128[esp]
+ vpaddd xmm5,xmm5,xmm1
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpxor xmm2,xmm2,xmm4
+ add edi,DWORD PTR 36[esp]
+ xor ebp,ecx
+ mov esi,eax
+ shld eax,eax,5
+ vpsrld xmm4,xmm2,30
+ vmovdqa XMMWORD PTR 16[esp],xmm5
+ add edi,ebp
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add edi,eax
+ vpslld xmm2,xmm2,2
+ add edx,DWORD PTR 40[esp]
+ xor esi,ebx
+ mov ebp,edi
+ shld edi,edi,5
+ add edx,esi
+ xor ebp,ebx
+ shrd eax,eax,7
+ add edx,edi
+ vpor xmm2,xmm2,xmm4
+ add ecx,DWORD PTR 44[esp]
+ xor ebp,eax
+ vmovdqa xmm4,XMMWORD PTR 80[esp]
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,ebp
+ xor esi,eax
+ shrd edi,edi,7
+ add ecx,edx
+ vpalignr xmm5,xmm2,xmm1,8
+ vpxor xmm3,xmm3,xmm7
+ add ebx,DWORD PTR 48[esp]
+ xor esi,edi
+ mov ebp,ecx
+ shld ecx,ecx,5
+ vpxor xmm3,xmm3,xmm4
+ vmovdqa XMMWORD PTR 80[esp],xmm7
+ add ebx,esi
+ xor ebp,edi
+ vmovdqa xmm7,xmm6
+ vpaddd xmm6,xmm6,xmm2
+ shrd edx,edx,7
+ add ebx,ecx
+ vpxor xmm3,xmm3,xmm5
+ add eax,DWORD PTR 52[esp]
+ xor ebp,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ vpsrld xmm5,xmm3,30
+ vmovdqa XMMWORD PTR 32[esp],xmm6
+ add eax,ebp
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpslld xmm3,xmm3,2
+ add edi,DWORD PTR 56[esp]
+ xor esi,ecx
+ mov ebp,eax
+ shld eax,eax,5
+ add edi,esi
+ xor ebp,ecx
+ shrd ebx,ebx,7
+ add edi,eax
+ vpor xmm3,xmm3,xmm5
+ add edx,DWORD PTR 60[esp]
+ xor ebp,ebx
+ vmovdqa xmm5,XMMWORD PTR 96[esp]
+ mov esi,edi
+ shld edi,edi,5
+ add edx,ebp
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,edi
+ vpalignr xmm6,xmm3,xmm2,8
+ vpxor xmm4,xmm4,xmm0
+ add ecx,DWORD PTR [esp]
+ xor esi,eax
+ mov ebp,edx
+ shld edx,edx,5
+ vpxor xmm4,xmm4,xmm5
+ vmovdqa XMMWORD PTR 96[esp],xmm0
+ add ecx,esi
+ xor ebp,eax
+ vmovdqa xmm0,xmm7
+ vpaddd xmm7,xmm7,xmm3
+ shrd edi,edi,7
+ add ecx,edx
+ vpxor xmm4,xmm4,xmm6
+ add ebx,DWORD PTR 4[esp]
+ xor ebp,edi
+ mov esi,ecx
+ shld ecx,ecx,5
+ vpsrld xmm6,xmm4,30
+ vmovdqa XMMWORD PTR 48[esp],xmm7
+ add ebx,ebp
+ xor esi,edi
+ shrd edx,edx,7
+ add ebx,ecx
+ vpslld xmm4,xmm4,2
+ add eax,DWORD PTR 8[esp]
+ xor esi,edx
+ mov ebp,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ xor ebp,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpor xmm4,xmm4,xmm6
+ add edi,DWORD PTR 12[esp]
+ xor ebp,ecx
+ vmovdqa xmm6,XMMWORD PTR 64[esp]
+ mov esi,eax
+ shld eax,eax,5
+ add edi,ebp
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add edi,eax
+ vpalignr xmm7,xmm4,xmm3,8
+ vpxor xmm5,xmm5,xmm1
+ add edx,DWORD PTR 16[esp]
+ xor esi,ebx
+ mov ebp,edi
+ shld edi,edi,5
+ vpxor xmm5,xmm5,xmm6
+ vmovdqa XMMWORD PTR 64[esp],xmm1
+ add edx,esi
+ xor ebp,ebx
+ vmovdqa xmm1,xmm0
+ vpaddd xmm0,xmm0,xmm4
+ shrd eax,eax,7
+ add edx,edi
+ vpxor xmm5,xmm5,xmm7
+ add ecx,DWORD PTR 20[esp]
+ xor ebp,eax
+ mov esi,edx
+ shld edx,edx,5
+ vpsrld xmm7,xmm5,30
+ vmovdqa XMMWORD PTR [esp],xmm0
+ add ecx,ebp
+ xor esi,eax
+ shrd edi,edi,7
+ add ecx,edx
+ vpslld xmm5,xmm5,2
+ add ebx,DWORD PTR 24[esp]
+ xor esi,edi
+ mov ebp,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor ebp,edi
+ shrd edx,edx,7
+ add ebx,ecx
+ vpor xmm5,xmm5,xmm7
+ add eax,DWORD PTR 28[esp]
+ vmovdqa xmm7,XMMWORD PTR 80[esp]
+ shrd ecx,ecx,7
+ mov esi,ebx
+ xor ebp,edx
+ shld ebx,ebx,5
+ add eax,ebp
+ xor esi,ecx
+ xor ecx,edx
+ add eax,ebx
+ vpalignr xmm0,xmm5,xmm4,8
+ vpxor xmm6,xmm6,xmm2
+ add edi,DWORD PTR 32[esp]
+ and esi,ecx
+ xor ecx,edx
+ shrd ebx,ebx,7
+ vpxor xmm6,xmm6,xmm7
+ vmovdqa XMMWORD PTR 80[esp],xmm2
+ mov ebp,eax
+ xor esi,ecx
+ vmovdqa xmm2,xmm1
+ vpaddd xmm1,xmm1,xmm5
+ shld eax,eax,5
+ add edi,esi
+ vpxor xmm6,xmm6,xmm0
+ xor ebp,ebx
+ xor ebx,ecx
+ add edi,eax
+ add edx,DWORD PTR 36[esp]
+ vpsrld xmm0,xmm6,30
+ vmovdqa XMMWORD PTR 16[esp],xmm1
+ and ebp,ebx
+ xor ebx,ecx
+ shrd eax,eax,7
+ mov esi,edi
+ vpslld xmm6,xmm6,2
+ xor ebp,ebx
+ shld edi,edi,5
+ add edx,ebp
+ xor esi,eax
+ xor eax,ebx
+ add edx,edi
+ add ecx,DWORD PTR 40[esp]
+ and esi,eax
+ vpor xmm6,xmm6,xmm0
+ xor eax,ebx
+ shrd edi,edi,7
+ vmovdqa xmm0,XMMWORD PTR 96[esp]
+ mov ebp,edx
+ xor esi,eax
+ shld edx,edx,5
+ add ecx,esi
+ xor ebp,edi
+ xor edi,eax
+ add ecx,edx
+ add ebx,DWORD PTR 44[esp]
+ and ebp,edi
+ xor edi,eax
+ shrd edx,edx,7
+ mov esi,ecx
+ xor ebp,edi
+ shld ecx,ecx,5
+ add ebx,ebp
+ xor esi,edx
+ xor edx,edi
+ add ebx,ecx
+ vpalignr xmm1,xmm6,xmm5,8
+ vpxor xmm7,xmm7,xmm3
+ add eax,DWORD PTR 48[esp]
+ and esi,edx
+ xor edx,edi
+ shrd ecx,ecx,7
+ vpxor xmm7,xmm7,xmm0
+ vmovdqa XMMWORD PTR 96[esp],xmm3
+ mov ebp,ebx
+ xor esi,edx
+ vmovdqa xmm3,XMMWORD PTR 144[esp]
+ vpaddd xmm2,xmm2,xmm6
+ shld ebx,ebx,5
+ add eax,esi
+ vpxor xmm7,xmm7,xmm1
+ xor ebp,ecx
+ xor ecx,edx
+ add eax,ebx
+ add edi,DWORD PTR 52[esp]
+ vpsrld xmm1,xmm7,30
+ vmovdqa XMMWORD PTR 32[esp],xmm2
+ and ebp,ecx
+ xor ecx,edx
+ shrd ebx,ebx,7
+ mov esi,eax
+ vpslld xmm7,xmm7,2
+ xor ebp,ecx
+ shld eax,eax,5
+ add edi,ebp
+ xor esi,ebx
+ xor ebx,ecx
+ add edi,eax
+ add edx,DWORD PTR 56[esp]
+ and esi,ebx
+ vpor xmm7,xmm7,xmm1
+ xor ebx,ecx
+ shrd eax,eax,7
+ vmovdqa xmm1,XMMWORD PTR 64[esp]
+ mov ebp,edi
+ xor esi,ebx
+ shld edi,edi,5
+ add edx,esi
+ xor ebp,eax
+ xor eax,ebx
+ add edx,edi
+ add ecx,DWORD PTR 60[esp]
+ and ebp,eax
+ xor eax,ebx
+ shrd edi,edi,7
+ mov esi,edx
+ xor ebp,eax
+ shld edx,edx,5
+ add ecx,ebp
+ xor esi,edi
+ xor edi,eax
+ add ecx,edx
+ vpalignr xmm2,xmm7,xmm6,8
+ vpxor xmm0,xmm0,xmm4
+ add ebx,DWORD PTR [esp]
+ and esi,edi
+ xor edi,eax
+ shrd edx,edx,7
+ vpxor xmm0,xmm0,xmm1
+ vmovdqa XMMWORD PTR 64[esp],xmm4
+ mov ebp,ecx
+ xor esi,edi
+ vmovdqa xmm4,xmm3
+ vpaddd xmm3,xmm3,xmm7
+ shld ecx,ecx,5
+ add ebx,esi
+ vpxor xmm0,xmm0,xmm2
+ xor ebp,edx
+ xor edx,edi
+ add ebx,ecx
+ add eax,DWORD PTR 4[esp]
+ vpsrld xmm2,xmm0,30
+ vmovdqa XMMWORD PTR 48[esp],xmm3
+ and ebp,edx
+ xor edx,edi
+ shrd ecx,ecx,7
+ mov esi,ebx
+ vpslld xmm0,xmm0,2
+ xor ebp,edx
+ shld ebx,ebx,5
+ add eax,ebp
+ xor esi,ecx
+ xor ecx,edx
+ add eax,ebx
+ add edi,DWORD PTR 8[esp]
+ and esi,ecx
+ vpor xmm0,xmm0,xmm2
+ xor ecx,edx
+ shrd ebx,ebx,7
+ vmovdqa xmm2,XMMWORD PTR 80[esp]
+ mov ebp,eax
+ xor esi,ecx
+ shld eax,eax,5
+ add edi,esi
+ xor ebp,ebx
+ xor ebx,ecx
+ add edi,eax
+ add edx,DWORD PTR 12[esp]
+ and ebp,ebx
+ xor ebx,ecx
+ shrd eax,eax,7
+ mov esi,edi
+ xor ebp,ebx
+ shld edi,edi,5
+ add edx,ebp
+ xor esi,eax
+ xor eax,ebx
+ add edx,edi
+ vpalignr xmm3,xmm0,xmm7,8
+ vpxor xmm1,xmm1,xmm5
+ add ecx,DWORD PTR 16[esp]
+ and esi,eax
+ xor eax,ebx
+ shrd edi,edi,7
+ vpxor xmm1,xmm1,xmm2
+ vmovdqa XMMWORD PTR 80[esp],xmm5
+ mov ebp,edx
+ xor esi,eax
+ vmovdqa xmm5,xmm4
+ vpaddd xmm4,xmm4,xmm0
+ shld edx,edx,5
+ add ecx,esi
+ vpxor xmm1,xmm1,xmm3
+ xor ebp,edi
+ xor edi,eax
+ add ecx,edx
+ add ebx,DWORD PTR 20[esp]
+ vpsrld xmm3,xmm1,30
+ vmovdqa XMMWORD PTR [esp],xmm4
+ and ebp,edi
+ xor edi,eax
+ shrd edx,edx,7
+ mov esi,ecx
+ vpslld xmm1,xmm1,2
+ xor ebp,edi
+ shld ecx,ecx,5
+ add ebx,ebp
+ xor esi,edx
+ xor edx,edi
+ add ebx,ecx
+ add eax,DWORD PTR 24[esp]
+ and esi,edx
+ vpor xmm1,xmm1,xmm3
+ xor edx,edi
+ shrd ecx,ecx,7
+ vmovdqa xmm3,XMMWORD PTR 96[esp]
+ mov ebp,ebx
+ xor esi,edx
+ shld ebx,ebx,5
+ add eax,esi
+ xor ebp,ecx
+ xor ecx,edx
+ add eax,ebx
+ add edi,DWORD PTR 28[esp]
+ and ebp,ecx
+ xor ecx,edx
+ shrd ebx,ebx,7
+ mov esi,eax
+ xor ebp,ecx
+ shld eax,eax,5
+ add edi,ebp
+ xor esi,ebx
+ xor ebx,ecx
+ add edi,eax
+ vpalignr xmm4,xmm1,xmm0,8
+ vpxor xmm2,xmm2,xmm6
+ add edx,DWORD PTR 32[esp]
+ and esi,ebx
+ xor ebx,ecx
+ shrd eax,eax,7
+ vpxor xmm2,xmm2,xmm3
+ vmovdqa XMMWORD PTR 96[esp],xmm6
+ mov ebp,edi
+ xor esi,ebx
+ vmovdqa xmm6,xmm5
+ vpaddd xmm5,xmm5,xmm1
+ shld edi,edi,5
+ add edx,esi
+ vpxor xmm2,xmm2,xmm4
+ xor ebp,eax
+ xor eax,ebx
+ add edx,edi
+ add ecx,DWORD PTR 36[esp]
+ vpsrld xmm4,xmm2,30
+ vmovdqa XMMWORD PTR 16[esp],xmm5
+ and ebp,eax
+ xor eax,ebx
+ shrd edi,edi,7
+ mov esi,edx
+ vpslld xmm2,xmm2,2
+ xor ebp,eax
+ shld edx,edx,5
+ add ecx,ebp
+ xor esi,edi
+ xor edi,eax
+ add ecx,edx
+ add ebx,DWORD PTR 40[esp]
+ and esi,edi
+ vpor xmm2,xmm2,xmm4
+ xor edi,eax
+ shrd edx,edx,7
+ vmovdqa xmm4,XMMWORD PTR 64[esp]
+ mov ebp,ecx
+ xor esi,edi
+ shld ecx,ecx,5
+ add ebx,esi
+ xor ebp,edx
+ xor edx,edi
+ add ebx,ecx
+ add eax,DWORD PTR 44[esp]
+ and ebp,edx
+ xor edx,edi
+ shrd ecx,ecx,7
+ mov esi,ebx
+ xor ebp,edx
+ shld ebx,ebx,5
+ add eax,ebp
+ xor esi,edx
+ add eax,ebx
+ vpalignr xmm5,xmm2,xmm1,8
+ vpxor xmm3,xmm3,xmm7
+ add edi,DWORD PTR 48[esp]
+ xor esi,ecx
+ mov ebp,eax
+ shld eax,eax,5
+ vpxor xmm3,xmm3,xmm4
+ vmovdqa XMMWORD PTR 64[esp],xmm7
+ add edi,esi
+ xor ebp,ecx
+ vmovdqa xmm7,xmm6
+ vpaddd xmm6,xmm6,xmm2
+ shrd ebx,ebx,7
+ add edi,eax
+ vpxor xmm3,xmm3,xmm5
+ add edx,DWORD PTR 52[esp]
+ xor ebp,ebx
+ mov esi,edi
+ shld edi,edi,5
+ vpsrld xmm5,xmm3,30
+ vmovdqa XMMWORD PTR 32[esp],xmm6
+ add edx,ebp
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,edi
+ vpslld xmm3,xmm3,2
+ add ecx,DWORD PTR 56[esp]
+ xor esi,eax
+ mov ebp,edx
+ shld edx,edx,5
+ add ecx,esi
+ xor ebp,eax
+ shrd edi,edi,7
+ add ecx,edx
+ vpor xmm3,xmm3,xmm5
+ add ebx,DWORD PTR 60[esp]
+ xor ebp,edi
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,ebp
+ xor esi,edi
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR [esp]
+ vpaddd xmm7,xmm7,xmm3
+ xor esi,edx
+ mov ebp,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ vmovdqa XMMWORD PTR 48[esp],xmm7
+ xor ebp,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add edi,DWORD PTR 4[esp]
+ xor ebp,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add edi,ebp
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add edi,eax
+ add edx,DWORD PTR 8[esp]
+ xor esi,ebx
+ mov ebp,edi
+ shld edi,edi,5
+ add edx,esi
+ xor ebp,ebx
+ shrd eax,eax,7
+ add edx,edi
+ add ecx,DWORD PTR 12[esp]
+ xor ebp,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,ebp
+ xor esi,eax
+ shrd edi,edi,7
+ add ecx,edx
+ mov ebp,DWORD PTR 196[esp]
+ cmp ebp,DWORD PTR 200[esp]
+ je $L010done
+ vmovdqa xmm7,XMMWORD PTR 160[esp]
+ vmovdqa xmm6,XMMWORD PTR 176[esp]
+ vmovdqu xmm0,XMMWORD PTR [ebp]
+ vmovdqu xmm1,XMMWORD PTR 16[ebp]
+ vmovdqu xmm2,XMMWORD PTR 32[ebp]
+ vmovdqu xmm3,XMMWORD PTR 48[ebp]
+ add ebp,64
+ vpshufb xmm0,xmm0,xmm6
+ mov DWORD PTR 196[esp],ebp
+ vmovdqa XMMWORD PTR 96[esp],xmm7
+ add ebx,DWORD PTR 16[esp]
+ xor esi,edi
+ vpshufb xmm1,xmm1,xmm6
+ mov ebp,ecx
+ shld ecx,ecx,5
+ vpaddd xmm4,xmm0,xmm7
+ add ebx,esi
+ xor ebp,edi
+ shrd edx,edx,7
+ add ebx,ecx
+ vmovdqa XMMWORD PTR [esp],xmm4
+ add eax,DWORD PTR 20[esp]
+ xor ebp,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,ebp
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add edi,DWORD PTR 24[esp]
+ xor esi,ecx
+ mov ebp,eax
+ shld eax,eax,5
+ add edi,esi
+ xor ebp,ecx
+ shrd ebx,ebx,7
+ add edi,eax
+ add edx,DWORD PTR 28[esp]
+ xor ebp,ebx
+ mov esi,edi
+ shld edi,edi,5
+ add edx,ebp
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,edi
+ add ecx,DWORD PTR 32[esp]
+ xor esi,eax
+ vpshufb xmm2,xmm2,xmm6
+ mov ebp,edx
+ shld edx,edx,5
+ vpaddd xmm5,xmm1,xmm7
+ add ecx,esi
+ xor ebp,eax
+ shrd edi,edi,7
+ add ecx,edx
+ vmovdqa XMMWORD PTR 16[esp],xmm5
+ add ebx,DWORD PTR 36[esp]
+ xor ebp,edi
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,ebp
+ xor esi,edi
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR 40[esp]
+ xor esi,edx
+ mov ebp,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ xor ebp,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add edi,DWORD PTR 44[esp]
+ xor ebp,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add edi,ebp
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add edi,eax
+ add edx,DWORD PTR 48[esp]
+ xor esi,ebx
+ vpshufb xmm3,xmm3,xmm6
+ mov ebp,edi
+ shld edi,edi,5
+ vpaddd xmm6,xmm2,xmm7
+ add edx,esi
+ xor ebp,ebx
+ shrd eax,eax,7
+ add edx,edi
+ vmovdqa XMMWORD PTR 32[esp],xmm6
+ add ecx,DWORD PTR 52[esp]
+ xor ebp,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,ebp
+ xor esi,eax
+ shrd edi,edi,7
+ add ecx,edx
+ add ebx,DWORD PTR 56[esp]
+ xor esi,edi
+ mov ebp,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor ebp,edi
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR 60[esp]
+ xor ebp,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,ebp
+ shrd ecx,ecx,7
+ add eax,ebx
+ mov ebp,DWORD PTR 192[esp]
+ add eax,DWORD PTR [ebp]
+ add esi,DWORD PTR 4[ebp]
+ add ecx,DWORD PTR 8[ebp]
+ mov DWORD PTR [ebp],eax
+ add edx,DWORD PTR 12[ebp]
+ mov DWORD PTR 4[ebp],esi
+ add edi,DWORD PTR 16[ebp]
+ mov ebx,ecx
+ mov DWORD PTR 8[ebp],ecx
+ xor ebx,edx
+ mov DWORD PTR 12[ebp],edx
+ mov DWORD PTR 16[ebp],edi
+ mov ebp,esi
+ and esi,ebx
+ mov ebx,ebp
+ jmp $L009loop
+ALIGN 16
+$L010done:
+ add ebx,DWORD PTR 16[esp]
+ xor esi,edi
+ mov ebp,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor ebp,edi
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR 20[esp]
+ xor ebp,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,ebp
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add edi,DWORD PTR 24[esp]
+ xor esi,ecx
+ mov ebp,eax
+ shld eax,eax,5
+ add edi,esi
+ xor ebp,ecx
+ shrd ebx,ebx,7
+ add edi,eax
+ add edx,DWORD PTR 28[esp]
+ xor ebp,ebx
+ mov esi,edi
+ shld edi,edi,5
+ add edx,ebp
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,edi
+ add ecx,DWORD PTR 32[esp]
+ xor esi,eax
+ mov ebp,edx
+ shld edx,edx,5
+ add ecx,esi
+ xor ebp,eax
+ shrd edi,edi,7
+ add ecx,edx
+ add ebx,DWORD PTR 36[esp]
+ xor ebp,edi
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,ebp
+ xor esi,edi
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR 40[esp]
+ xor esi,edx
+ mov ebp,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ xor ebp,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add edi,DWORD PTR 44[esp]
+ xor ebp,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add edi,ebp
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add edi,eax
+ add edx,DWORD PTR 48[esp]
+ xor esi,ebx
+ mov ebp,edi
+ shld edi,edi,5
+ add edx,esi
+ xor ebp,ebx
+ shrd eax,eax,7
+ add edx,edi
+ add ecx,DWORD PTR 52[esp]
+ xor ebp,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,ebp
+ xor esi,eax
+ shrd edi,edi,7
+ add ecx,edx
+ add ebx,DWORD PTR 56[esp]
+ xor esi,edi
+ mov ebp,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor ebp,edi
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR 60[esp]
+ xor ebp,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,ebp
+ shrd ecx,ecx,7
+ add eax,ebx
+ vzeroall
+ mov ebp,DWORD PTR 192[esp]
+ add eax,DWORD PTR [ebp]
+ mov esp,DWORD PTR 204[esp]
+ add esi,DWORD PTR 4[ebp]
+ add ecx,DWORD PTR 8[ebp]
+ mov DWORD PTR [ebp],eax
+ add edx,DWORD PTR 12[ebp]
+ mov DWORD PTR 4[ebp],esi
+ add edi,DWORD PTR 16[ebp]
+ mov DWORD PTR 8[ebp],ecx
+ mov DWORD PTR 12[ebp],edx
+ mov DWORD PTR 16[ebp],edi
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+__sha1_block_data_order_avx ENDP
+ALIGN 64
+$LK_XX_XX::
+DD 1518500249,1518500249,1518500249,1518500249
+DD 1859775393,1859775393,1859775393,1859775393
+DD 2400959708,2400959708,2400959708,2400959708
+DD 3395469782,3395469782,3395469782,3395469782
+DD 66051,67438087,134810123,202182159
+DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+DB 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115
+DB 102,111,114,109,32,102,111,114,32,120,56,54,44,32,67,82
+DB 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112
+DB 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.text$ ENDS
+.bss SEGMENT 'BSS'
+COMM _OPENSSL_ia32cap_P:DWORD:4
+.bss ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/sha/sha1-mb-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/sha/sha1-mb-x86_64.masm
index ea50f6c7d2..a026616348 100644
--- a/contrib/libs/openssl/asm/windows/crypto/sha/sha1-mb-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/sha/sha1-mb-x86_64.masm
@@ -1,7579 +1,7579 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC sha1_multi_block
-
-ALIGN 32
-sha1_multi_block PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha1_multi_block::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- mov rcx,QWORD PTR[((OPENSSL_ia32cap_P+4))]
- bt rcx,61
- jc _shaext_shortcut
- test ecx,268435456
- jnz _avx_shortcut
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[(-120)+rax],xmm10
- movaps XMMWORD PTR[(-104)+rax],xmm11
- movaps XMMWORD PTR[(-88)+rax],xmm12
- movaps XMMWORD PTR[(-72)+rax],xmm13
- movaps XMMWORD PTR[(-56)+rax],xmm14
- movaps XMMWORD PTR[(-40)+rax],xmm15
- sub rsp,288
- and rsp,-256
- mov QWORD PTR[272+rsp],rax
-
-$L$body::
- lea rbp,QWORD PTR[K_XX_XX]
- lea rbx,QWORD PTR[256+rsp]
-
-$L$oop_grande::
- mov DWORD PTR[280+rsp],edx
- xor edx,edx
- mov r8,QWORD PTR[rsi]
- mov ecx,DWORD PTR[8+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[rbx],ecx
- cmovle r8,rbp
- mov r9,QWORD PTR[16+rsi]
- mov ecx,DWORD PTR[24+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[4+rbx],ecx
- cmovle r9,rbp
- mov r10,QWORD PTR[32+rsi]
- mov ecx,DWORD PTR[40+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[8+rbx],ecx
- cmovle r10,rbp
- mov r11,QWORD PTR[48+rsi]
- mov ecx,DWORD PTR[56+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[12+rbx],ecx
- cmovle r11,rbp
- test edx,edx
- jz $L$done
-
- movdqu xmm10,XMMWORD PTR[rdi]
- lea rax,QWORD PTR[128+rsp]
- movdqu xmm11,XMMWORD PTR[32+rdi]
- movdqu xmm12,XMMWORD PTR[64+rdi]
- movdqu xmm13,XMMWORD PTR[96+rdi]
- movdqu xmm14,XMMWORD PTR[128+rdi]
- movdqa xmm5,XMMWORD PTR[96+rbp]
- movdqa xmm15,XMMWORD PTR[((-32))+rbp]
- jmp $L$oop
-
-ALIGN 32
-$L$oop::
- movd xmm0,DWORD PTR[r8]
- lea r8,QWORD PTR[64+r8]
- movd xmm2,DWORD PTR[r9]
- lea r9,QWORD PTR[64+r9]
- movd xmm3,DWORD PTR[r10]
- lea r10,QWORD PTR[64+r10]
- movd xmm4,DWORD PTR[r11]
- lea r11,QWORD PTR[64+r11]
- punpckldq xmm0,xmm3
- movd xmm1,DWORD PTR[((-60))+r8]
- punpckldq xmm2,xmm4
- movd xmm9,DWORD PTR[((-60))+r9]
- punpckldq xmm0,xmm2
- movd xmm8,DWORD PTR[((-60))+r10]
-DB 102,15,56,0,197
- movd xmm7,DWORD PTR[((-60))+r11]
- punpckldq xmm1,xmm8
- movdqa xmm8,xmm10
- paddd xmm14,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm11
- movdqa xmm6,xmm11
- pslld xmm8,5
- pandn xmm7,xmm13
- pand xmm6,xmm12
- punpckldq xmm1,xmm9
- movdqa xmm9,xmm10
-
- movdqa XMMWORD PTR[(0-128)+rax],xmm0
- paddd xmm14,xmm0
- movd xmm2,DWORD PTR[((-56))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm11
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-56))+r9]
- pslld xmm7,30
- paddd xmm14,xmm6
-
- psrld xmm11,2
- paddd xmm14,xmm8
-DB 102,15,56,0,205
- movd xmm8,DWORD PTR[((-56))+r10]
- por xmm11,xmm7
- movd xmm7,DWORD PTR[((-56))+r11]
- punpckldq xmm2,xmm8
- movdqa xmm8,xmm14
- paddd xmm13,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm10
- movdqa xmm6,xmm10
- pslld xmm8,5
- pandn xmm7,xmm12
- pand xmm6,xmm11
- punpckldq xmm2,xmm9
- movdqa xmm9,xmm14
-
- movdqa XMMWORD PTR[(16-128)+rax],xmm1
- paddd xmm13,xmm1
- movd xmm3,DWORD PTR[((-52))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm10
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-52))+r9]
- pslld xmm7,30
- paddd xmm13,xmm6
-
- psrld xmm10,2
- paddd xmm13,xmm8
-DB 102,15,56,0,213
- movd xmm8,DWORD PTR[((-52))+r10]
- por xmm10,xmm7
- movd xmm7,DWORD PTR[((-52))+r11]
- punpckldq xmm3,xmm8
- movdqa xmm8,xmm13
- paddd xmm12,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm14
- movdqa xmm6,xmm14
- pslld xmm8,5
- pandn xmm7,xmm11
- pand xmm6,xmm10
- punpckldq xmm3,xmm9
- movdqa xmm9,xmm13
-
- movdqa XMMWORD PTR[(32-128)+rax],xmm2
- paddd xmm12,xmm2
- movd xmm4,DWORD PTR[((-48))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm14
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-48))+r9]
- pslld xmm7,30
- paddd xmm12,xmm6
-
- psrld xmm14,2
- paddd xmm12,xmm8
-DB 102,15,56,0,221
- movd xmm8,DWORD PTR[((-48))+r10]
- por xmm14,xmm7
- movd xmm7,DWORD PTR[((-48))+r11]
- punpckldq xmm4,xmm8
- movdqa xmm8,xmm12
- paddd xmm11,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm13
- movdqa xmm6,xmm13
- pslld xmm8,5
- pandn xmm7,xmm10
- pand xmm6,xmm14
- punpckldq xmm4,xmm9
- movdqa xmm9,xmm12
-
- movdqa XMMWORD PTR[(48-128)+rax],xmm3
- paddd xmm11,xmm3
- movd xmm0,DWORD PTR[((-44))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm13
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-44))+r9]
- pslld xmm7,30
- paddd xmm11,xmm6
-
- psrld xmm13,2
- paddd xmm11,xmm8
-DB 102,15,56,0,229
- movd xmm8,DWORD PTR[((-44))+r10]
- por xmm13,xmm7
- movd xmm7,DWORD PTR[((-44))+r11]
- punpckldq xmm0,xmm8
- movdqa xmm8,xmm11
- paddd xmm10,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm12
- movdqa xmm6,xmm12
- pslld xmm8,5
- pandn xmm7,xmm14
- pand xmm6,xmm13
- punpckldq xmm0,xmm9
- movdqa xmm9,xmm11
-
- movdqa XMMWORD PTR[(64-128)+rax],xmm4
- paddd xmm10,xmm4
- movd xmm1,DWORD PTR[((-40))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm12
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-40))+r9]
- pslld xmm7,30
- paddd xmm10,xmm6
-
- psrld xmm12,2
- paddd xmm10,xmm8
-DB 102,15,56,0,197
- movd xmm8,DWORD PTR[((-40))+r10]
- por xmm12,xmm7
- movd xmm7,DWORD PTR[((-40))+r11]
- punpckldq xmm1,xmm8
- movdqa xmm8,xmm10
- paddd xmm14,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm11
- movdqa xmm6,xmm11
- pslld xmm8,5
- pandn xmm7,xmm13
- pand xmm6,xmm12
- punpckldq xmm1,xmm9
- movdqa xmm9,xmm10
-
- movdqa XMMWORD PTR[(80-128)+rax],xmm0
- paddd xmm14,xmm0
- movd xmm2,DWORD PTR[((-36))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm11
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-36))+r9]
- pslld xmm7,30
- paddd xmm14,xmm6
-
- psrld xmm11,2
- paddd xmm14,xmm8
-DB 102,15,56,0,205
- movd xmm8,DWORD PTR[((-36))+r10]
- por xmm11,xmm7
- movd xmm7,DWORD PTR[((-36))+r11]
- punpckldq xmm2,xmm8
- movdqa xmm8,xmm14
- paddd xmm13,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm10
- movdqa xmm6,xmm10
- pslld xmm8,5
- pandn xmm7,xmm12
- pand xmm6,xmm11
- punpckldq xmm2,xmm9
- movdqa xmm9,xmm14
-
- movdqa XMMWORD PTR[(96-128)+rax],xmm1
- paddd xmm13,xmm1
- movd xmm3,DWORD PTR[((-32))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm10
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-32))+r9]
- pslld xmm7,30
- paddd xmm13,xmm6
-
- psrld xmm10,2
- paddd xmm13,xmm8
-DB 102,15,56,0,213
- movd xmm8,DWORD PTR[((-32))+r10]
- por xmm10,xmm7
- movd xmm7,DWORD PTR[((-32))+r11]
- punpckldq xmm3,xmm8
- movdqa xmm8,xmm13
- paddd xmm12,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm14
- movdqa xmm6,xmm14
- pslld xmm8,5
- pandn xmm7,xmm11
- pand xmm6,xmm10
- punpckldq xmm3,xmm9
- movdqa xmm9,xmm13
-
- movdqa XMMWORD PTR[(112-128)+rax],xmm2
- paddd xmm12,xmm2
- movd xmm4,DWORD PTR[((-28))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm14
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-28))+r9]
- pslld xmm7,30
- paddd xmm12,xmm6
-
- psrld xmm14,2
- paddd xmm12,xmm8
-DB 102,15,56,0,221
- movd xmm8,DWORD PTR[((-28))+r10]
- por xmm14,xmm7
- movd xmm7,DWORD PTR[((-28))+r11]
- punpckldq xmm4,xmm8
- movdqa xmm8,xmm12
- paddd xmm11,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm13
- movdqa xmm6,xmm13
- pslld xmm8,5
- pandn xmm7,xmm10
- pand xmm6,xmm14
- punpckldq xmm4,xmm9
- movdqa xmm9,xmm12
-
- movdqa XMMWORD PTR[(128-128)+rax],xmm3
- paddd xmm11,xmm3
- movd xmm0,DWORD PTR[((-24))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm13
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-24))+r9]
- pslld xmm7,30
- paddd xmm11,xmm6
-
- psrld xmm13,2
- paddd xmm11,xmm8
-DB 102,15,56,0,229
- movd xmm8,DWORD PTR[((-24))+r10]
- por xmm13,xmm7
- movd xmm7,DWORD PTR[((-24))+r11]
- punpckldq xmm0,xmm8
- movdqa xmm8,xmm11
- paddd xmm10,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm12
- movdqa xmm6,xmm12
- pslld xmm8,5
- pandn xmm7,xmm14
- pand xmm6,xmm13
- punpckldq xmm0,xmm9
- movdqa xmm9,xmm11
-
- movdqa XMMWORD PTR[(144-128)+rax],xmm4
- paddd xmm10,xmm4
- movd xmm1,DWORD PTR[((-20))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm12
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-20))+r9]
- pslld xmm7,30
- paddd xmm10,xmm6
-
- psrld xmm12,2
- paddd xmm10,xmm8
-DB 102,15,56,0,197
- movd xmm8,DWORD PTR[((-20))+r10]
- por xmm12,xmm7
- movd xmm7,DWORD PTR[((-20))+r11]
- punpckldq xmm1,xmm8
- movdqa xmm8,xmm10
- paddd xmm14,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm11
- movdqa xmm6,xmm11
- pslld xmm8,5
- pandn xmm7,xmm13
- pand xmm6,xmm12
- punpckldq xmm1,xmm9
- movdqa xmm9,xmm10
-
- movdqa XMMWORD PTR[(160-128)+rax],xmm0
- paddd xmm14,xmm0
- movd xmm2,DWORD PTR[((-16))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm11
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-16))+r9]
- pslld xmm7,30
- paddd xmm14,xmm6
-
- psrld xmm11,2
- paddd xmm14,xmm8
-DB 102,15,56,0,205
- movd xmm8,DWORD PTR[((-16))+r10]
- por xmm11,xmm7
- movd xmm7,DWORD PTR[((-16))+r11]
- punpckldq xmm2,xmm8
- movdqa xmm8,xmm14
- paddd xmm13,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm10
- movdqa xmm6,xmm10
- pslld xmm8,5
- pandn xmm7,xmm12
- pand xmm6,xmm11
- punpckldq xmm2,xmm9
- movdqa xmm9,xmm14
-
- movdqa XMMWORD PTR[(176-128)+rax],xmm1
- paddd xmm13,xmm1
- movd xmm3,DWORD PTR[((-12))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm10
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-12))+r9]
- pslld xmm7,30
- paddd xmm13,xmm6
-
- psrld xmm10,2
- paddd xmm13,xmm8
-DB 102,15,56,0,213
- movd xmm8,DWORD PTR[((-12))+r10]
- por xmm10,xmm7
- movd xmm7,DWORD PTR[((-12))+r11]
- punpckldq xmm3,xmm8
- movdqa xmm8,xmm13
- paddd xmm12,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm14
- movdqa xmm6,xmm14
- pslld xmm8,5
- pandn xmm7,xmm11
- pand xmm6,xmm10
- punpckldq xmm3,xmm9
- movdqa xmm9,xmm13
-
- movdqa XMMWORD PTR[(192-128)+rax],xmm2
- paddd xmm12,xmm2
- movd xmm4,DWORD PTR[((-8))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm14
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-8))+r9]
- pslld xmm7,30
- paddd xmm12,xmm6
-
- psrld xmm14,2
- paddd xmm12,xmm8
-DB 102,15,56,0,221
- movd xmm8,DWORD PTR[((-8))+r10]
- por xmm14,xmm7
- movd xmm7,DWORD PTR[((-8))+r11]
- punpckldq xmm4,xmm8
- movdqa xmm8,xmm12
- paddd xmm11,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm13
- movdqa xmm6,xmm13
- pslld xmm8,5
- pandn xmm7,xmm10
- pand xmm6,xmm14
- punpckldq xmm4,xmm9
- movdqa xmm9,xmm12
-
- movdqa XMMWORD PTR[(208-128)+rax],xmm3
- paddd xmm11,xmm3
- movd xmm0,DWORD PTR[((-4))+r8]
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm13
-
- por xmm8,xmm9
- movd xmm9,DWORD PTR[((-4))+r9]
- pslld xmm7,30
- paddd xmm11,xmm6
-
- psrld xmm13,2
- paddd xmm11,xmm8
-DB 102,15,56,0,229
- movd xmm8,DWORD PTR[((-4))+r10]
- por xmm13,xmm7
- movdqa xmm1,XMMWORD PTR[((0-128))+rax]
- movd xmm7,DWORD PTR[((-4))+r11]
- punpckldq xmm0,xmm8
- movdqa xmm8,xmm11
- paddd xmm10,xmm15
- punpckldq xmm9,xmm7
- movdqa xmm7,xmm12
- movdqa xmm6,xmm12
- pslld xmm8,5
- prefetcht0 [63+r8]
- pandn xmm7,xmm14
- pand xmm6,xmm13
- punpckldq xmm0,xmm9
- movdqa xmm9,xmm11
-
- movdqa XMMWORD PTR[(224-128)+rax],xmm4
- paddd xmm10,xmm4
- psrld xmm9,27
- pxor xmm6,xmm7
- movdqa xmm7,xmm12
- prefetcht0 [63+r9]
-
- por xmm8,xmm9
- pslld xmm7,30
- paddd xmm10,xmm6
- prefetcht0 [63+r10]
-
- psrld xmm12,2
- paddd xmm10,xmm8
-DB 102,15,56,0,197
- prefetcht0 [63+r11]
- por xmm12,xmm7
- movdqa xmm2,XMMWORD PTR[((16-128))+rax]
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((32-128))+rax]
-
- movdqa xmm8,xmm10
- pxor xmm1,XMMWORD PTR[((128-128))+rax]
- paddd xmm14,xmm15
- movdqa xmm7,xmm11
- pslld xmm8,5
- pxor xmm1,xmm3
- movdqa xmm6,xmm11
- pandn xmm7,xmm13
- movdqa xmm5,xmm1
- pand xmm6,xmm12
- movdqa xmm9,xmm10
- psrld xmm5,31
- paddd xmm1,xmm1
-
- movdqa XMMWORD PTR[(240-128)+rax],xmm0
- paddd xmm14,xmm0
- psrld xmm9,27
- pxor xmm6,xmm7
-
- movdqa xmm7,xmm11
- por xmm8,xmm9
- pslld xmm7,30
- paddd xmm14,xmm6
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((48-128))+rax]
-
- movdqa xmm8,xmm14
- pxor xmm2,XMMWORD PTR[((144-128))+rax]
- paddd xmm13,xmm15
- movdqa xmm7,xmm10
- pslld xmm8,5
- pxor xmm2,xmm4
- movdqa xmm6,xmm10
- pandn xmm7,xmm12
- movdqa xmm5,xmm2
- pand xmm6,xmm11
- movdqa xmm9,xmm14
- psrld xmm5,31
- paddd xmm2,xmm2
-
- movdqa XMMWORD PTR[(0-128)+rax],xmm1
- paddd xmm13,xmm1
- psrld xmm9,27
- pxor xmm6,xmm7
-
- movdqa xmm7,xmm10
- por xmm8,xmm9
- pslld xmm7,30
- paddd xmm13,xmm6
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((64-128))+rax]
-
- movdqa xmm8,xmm13
- pxor xmm3,XMMWORD PTR[((160-128))+rax]
- paddd xmm12,xmm15
- movdqa xmm7,xmm14
- pslld xmm8,5
- pxor xmm3,xmm0
- movdqa xmm6,xmm14
- pandn xmm7,xmm11
- movdqa xmm5,xmm3
- pand xmm6,xmm10
- movdqa xmm9,xmm13
- psrld xmm5,31
- paddd xmm3,xmm3
-
- movdqa XMMWORD PTR[(16-128)+rax],xmm2
- paddd xmm12,xmm2
- psrld xmm9,27
- pxor xmm6,xmm7
-
- movdqa xmm7,xmm14
- por xmm8,xmm9
- pslld xmm7,30
- paddd xmm12,xmm6
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((80-128))+rax]
-
- movdqa xmm8,xmm12
- pxor xmm4,XMMWORD PTR[((176-128))+rax]
- paddd xmm11,xmm15
- movdqa xmm7,xmm13
- pslld xmm8,5
- pxor xmm4,xmm1
- movdqa xmm6,xmm13
- pandn xmm7,xmm10
- movdqa xmm5,xmm4
- pand xmm6,xmm14
- movdqa xmm9,xmm12
- psrld xmm5,31
- paddd xmm4,xmm4
-
- movdqa XMMWORD PTR[(32-128)+rax],xmm3
- paddd xmm11,xmm3
- psrld xmm9,27
- pxor xmm6,xmm7
-
- movdqa xmm7,xmm13
- por xmm8,xmm9
- pslld xmm7,30
- paddd xmm11,xmm6
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((96-128))+rax]
-
- movdqa xmm8,xmm11
- pxor xmm0,XMMWORD PTR[((192-128))+rax]
- paddd xmm10,xmm15
- movdqa xmm7,xmm12
- pslld xmm8,5
- pxor xmm0,xmm2
- movdqa xmm6,xmm12
- pandn xmm7,xmm14
- movdqa xmm5,xmm0
- pand xmm6,xmm13
- movdqa xmm9,xmm11
- psrld xmm5,31
- paddd xmm0,xmm0
-
- movdqa XMMWORD PTR[(48-128)+rax],xmm4
- paddd xmm10,xmm4
- psrld xmm9,27
- pxor xmm6,xmm7
-
- movdqa xmm7,xmm12
- por xmm8,xmm9
- pslld xmm7,30
- paddd xmm10,xmm6
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- movdqa xmm15,XMMWORD PTR[rbp]
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((112-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm6,xmm13
- pxor xmm1,XMMWORD PTR[((208-128))+rax]
- paddd xmm14,xmm15
- pslld xmm8,5
- pxor xmm6,xmm11
-
- movdqa xmm9,xmm10
- movdqa XMMWORD PTR[(64-128)+rax],xmm0
- paddd xmm14,xmm0
- pxor xmm1,xmm3
- psrld xmm9,27
- pxor xmm6,xmm12
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- movdqa xmm5,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm14,xmm6
- paddd xmm1,xmm1
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((128-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm6,xmm12
- pxor xmm2,XMMWORD PTR[((224-128))+rax]
- paddd xmm13,xmm15
- pslld xmm8,5
- pxor xmm6,xmm10
-
- movdqa xmm9,xmm14
- movdqa XMMWORD PTR[(80-128)+rax],xmm1
- paddd xmm13,xmm1
- pxor xmm2,xmm4
- psrld xmm9,27
- pxor xmm6,xmm11
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- movdqa xmm5,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm13,xmm6
- paddd xmm2,xmm2
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((144-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm6,xmm11
- pxor xmm3,XMMWORD PTR[((240-128))+rax]
- paddd xmm12,xmm15
- pslld xmm8,5
- pxor xmm6,xmm14
-
- movdqa xmm9,xmm13
- movdqa XMMWORD PTR[(96-128)+rax],xmm2
- paddd xmm12,xmm2
- pxor xmm3,xmm0
- psrld xmm9,27
- pxor xmm6,xmm10
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- movdqa xmm5,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm12,xmm6
- paddd xmm3,xmm3
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((160-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm6,xmm10
- pxor xmm4,XMMWORD PTR[((0-128))+rax]
- paddd xmm11,xmm15
- pslld xmm8,5
- pxor xmm6,xmm13
-
- movdqa xmm9,xmm12
- movdqa XMMWORD PTR[(112-128)+rax],xmm3
- paddd xmm11,xmm3
- pxor xmm4,xmm1
- psrld xmm9,27
- pxor xmm6,xmm14
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- movdqa xmm5,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm11,xmm6
- paddd xmm4,xmm4
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((176-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm6,xmm14
- pxor xmm0,XMMWORD PTR[((16-128))+rax]
- paddd xmm10,xmm15
- pslld xmm8,5
- pxor xmm6,xmm12
-
- movdqa xmm9,xmm11
- movdqa XMMWORD PTR[(128-128)+rax],xmm4
- paddd xmm10,xmm4
- pxor xmm0,xmm2
- psrld xmm9,27
- pxor xmm6,xmm13
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- movdqa xmm5,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm10,xmm6
- paddd xmm0,xmm0
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((192-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm6,xmm13
- pxor xmm1,XMMWORD PTR[((32-128))+rax]
- paddd xmm14,xmm15
- pslld xmm8,5
- pxor xmm6,xmm11
-
- movdqa xmm9,xmm10
- movdqa XMMWORD PTR[(144-128)+rax],xmm0
- paddd xmm14,xmm0
- pxor xmm1,xmm3
- psrld xmm9,27
- pxor xmm6,xmm12
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- movdqa xmm5,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm14,xmm6
- paddd xmm1,xmm1
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((208-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm6,xmm12
- pxor xmm2,XMMWORD PTR[((48-128))+rax]
- paddd xmm13,xmm15
- pslld xmm8,5
- pxor xmm6,xmm10
-
- movdqa xmm9,xmm14
- movdqa XMMWORD PTR[(160-128)+rax],xmm1
- paddd xmm13,xmm1
- pxor xmm2,xmm4
- psrld xmm9,27
- pxor xmm6,xmm11
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- movdqa xmm5,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm13,xmm6
- paddd xmm2,xmm2
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((224-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm6,xmm11
- pxor xmm3,XMMWORD PTR[((64-128))+rax]
- paddd xmm12,xmm15
- pslld xmm8,5
- pxor xmm6,xmm14
-
- movdqa xmm9,xmm13
- movdqa XMMWORD PTR[(176-128)+rax],xmm2
- paddd xmm12,xmm2
- pxor xmm3,xmm0
- psrld xmm9,27
- pxor xmm6,xmm10
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- movdqa xmm5,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm12,xmm6
- paddd xmm3,xmm3
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((240-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm6,xmm10
- pxor xmm4,XMMWORD PTR[((80-128))+rax]
- paddd xmm11,xmm15
- pslld xmm8,5
- pxor xmm6,xmm13
-
- movdqa xmm9,xmm12
- movdqa XMMWORD PTR[(192-128)+rax],xmm3
- paddd xmm11,xmm3
- pxor xmm4,xmm1
- psrld xmm9,27
- pxor xmm6,xmm14
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- movdqa xmm5,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm11,xmm6
- paddd xmm4,xmm4
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((0-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm6,xmm14
- pxor xmm0,XMMWORD PTR[((96-128))+rax]
- paddd xmm10,xmm15
- pslld xmm8,5
- pxor xmm6,xmm12
-
- movdqa xmm9,xmm11
- movdqa XMMWORD PTR[(208-128)+rax],xmm4
- paddd xmm10,xmm4
- pxor xmm0,xmm2
- psrld xmm9,27
- pxor xmm6,xmm13
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- movdqa xmm5,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm10,xmm6
- paddd xmm0,xmm0
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((16-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm6,xmm13
- pxor xmm1,XMMWORD PTR[((112-128))+rax]
- paddd xmm14,xmm15
- pslld xmm8,5
- pxor xmm6,xmm11
-
- movdqa xmm9,xmm10
- movdqa XMMWORD PTR[(224-128)+rax],xmm0
- paddd xmm14,xmm0
- pxor xmm1,xmm3
- psrld xmm9,27
- pxor xmm6,xmm12
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- movdqa xmm5,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm14,xmm6
- paddd xmm1,xmm1
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((32-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm6,xmm12
- pxor xmm2,XMMWORD PTR[((128-128))+rax]
- paddd xmm13,xmm15
- pslld xmm8,5
- pxor xmm6,xmm10
-
- movdqa xmm9,xmm14
- movdqa XMMWORD PTR[(240-128)+rax],xmm1
- paddd xmm13,xmm1
- pxor xmm2,xmm4
- psrld xmm9,27
- pxor xmm6,xmm11
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- movdqa xmm5,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm13,xmm6
- paddd xmm2,xmm2
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((48-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm6,xmm11
- pxor xmm3,XMMWORD PTR[((144-128))+rax]
- paddd xmm12,xmm15
- pslld xmm8,5
- pxor xmm6,xmm14
-
- movdqa xmm9,xmm13
- movdqa XMMWORD PTR[(0-128)+rax],xmm2
- paddd xmm12,xmm2
- pxor xmm3,xmm0
- psrld xmm9,27
- pxor xmm6,xmm10
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- movdqa xmm5,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm12,xmm6
- paddd xmm3,xmm3
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((64-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm6,xmm10
- pxor xmm4,XMMWORD PTR[((160-128))+rax]
- paddd xmm11,xmm15
- pslld xmm8,5
- pxor xmm6,xmm13
-
- movdqa xmm9,xmm12
- movdqa XMMWORD PTR[(16-128)+rax],xmm3
- paddd xmm11,xmm3
- pxor xmm4,xmm1
- psrld xmm9,27
- pxor xmm6,xmm14
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- movdqa xmm5,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm11,xmm6
- paddd xmm4,xmm4
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((80-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm6,xmm14
- pxor xmm0,XMMWORD PTR[((176-128))+rax]
- paddd xmm10,xmm15
- pslld xmm8,5
- pxor xmm6,xmm12
-
- movdqa xmm9,xmm11
- movdqa XMMWORD PTR[(32-128)+rax],xmm4
- paddd xmm10,xmm4
- pxor xmm0,xmm2
- psrld xmm9,27
- pxor xmm6,xmm13
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- movdqa xmm5,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm10,xmm6
- paddd xmm0,xmm0
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((96-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm6,xmm13
- pxor xmm1,XMMWORD PTR[((192-128))+rax]
- paddd xmm14,xmm15
- pslld xmm8,5
- pxor xmm6,xmm11
-
- movdqa xmm9,xmm10
- movdqa XMMWORD PTR[(48-128)+rax],xmm0
- paddd xmm14,xmm0
- pxor xmm1,xmm3
- psrld xmm9,27
- pxor xmm6,xmm12
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- movdqa xmm5,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm14,xmm6
- paddd xmm1,xmm1
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((112-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm6,xmm12
- pxor xmm2,XMMWORD PTR[((208-128))+rax]
- paddd xmm13,xmm15
- pslld xmm8,5
- pxor xmm6,xmm10
-
- movdqa xmm9,xmm14
- movdqa XMMWORD PTR[(64-128)+rax],xmm1
- paddd xmm13,xmm1
- pxor xmm2,xmm4
- psrld xmm9,27
- pxor xmm6,xmm11
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- movdqa xmm5,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm13,xmm6
- paddd xmm2,xmm2
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((128-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm6,xmm11
- pxor xmm3,XMMWORD PTR[((224-128))+rax]
- paddd xmm12,xmm15
- pslld xmm8,5
- pxor xmm6,xmm14
-
- movdqa xmm9,xmm13
- movdqa XMMWORD PTR[(80-128)+rax],xmm2
- paddd xmm12,xmm2
- pxor xmm3,xmm0
- psrld xmm9,27
- pxor xmm6,xmm10
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- movdqa xmm5,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm12,xmm6
- paddd xmm3,xmm3
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((144-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm6,xmm10
- pxor xmm4,XMMWORD PTR[((240-128))+rax]
- paddd xmm11,xmm15
- pslld xmm8,5
- pxor xmm6,xmm13
-
- movdqa xmm9,xmm12
- movdqa XMMWORD PTR[(96-128)+rax],xmm3
- paddd xmm11,xmm3
- pxor xmm4,xmm1
- psrld xmm9,27
- pxor xmm6,xmm14
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- movdqa xmm5,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm11,xmm6
- paddd xmm4,xmm4
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((160-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm6,xmm14
- pxor xmm0,XMMWORD PTR[((0-128))+rax]
- paddd xmm10,xmm15
- pslld xmm8,5
- pxor xmm6,xmm12
-
- movdqa xmm9,xmm11
- movdqa XMMWORD PTR[(112-128)+rax],xmm4
- paddd xmm10,xmm4
- pxor xmm0,xmm2
- psrld xmm9,27
- pxor xmm6,xmm13
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- movdqa xmm5,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm10,xmm6
- paddd xmm0,xmm0
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- movdqa xmm15,XMMWORD PTR[32+rbp]
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((176-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm7,xmm13
- pxor xmm1,XMMWORD PTR[((16-128))+rax]
- pxor xmm1,xmm3
- paddd xmm14,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm10
- pand xmm7,xmm12
-
- movdqa xmm6,xmm13
- movdqa xmm5,xmm1
- psrld xmm9,27
- paddd xmm14,xmm7
- pxor xmm6,xmm12
-
- movdqa XMMWORD PTR[(128-128)+rax],xmm0
- paddd xmm14,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm11
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- paddd xmm1,xmm1
- paddd xmm14,xmm6
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((192-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm7,xmm12
- pxor xmm2,XMMWORD PTR[((32-128))+rax]
- pxor xmm2,xmm4
- paddd xmm13,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm14
- pand xmm7,xmm11
-
- movdqa xmm6,xmm12
- movdqa xmm5,xmm2
- psrld xmm9,27
- paddd xmm13,xmm7
- pxor xmm6,xmm11
-
- movdqa XMMWORD PTR[(144-128)+rax],xmm1
- paddd xmm13,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm10
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- paddd xmm2,xmm2
- paddd xmm13,xmm6
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((208-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm7,xmm11
- pxor xmm3,XMMWORD PTR[((48-128))+rax]
- pxor xmm3,xmm0
- paddd xmm12,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm13
- pand xmm7,xmm10
-
- movdqa xmm6,xmm11
- movdqa xmm5,xmm3
- psrld xmm9,27
- paddd xmm12,xmm7
- pxor xmm6,xmm10
-
- movdqa XMMWORD PTR[(160-128)+rax],xmm2
- paddd xmm12,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm14
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- paddd xmm3,xmm3
- paddd xmm12,xmm6
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((224-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm7,xmm10
- pxor xmm4,XMMWORD PTR[((64-128))+rax]
- pxor xmm4,xmm1
- paddd xmm11,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm12
- pand xmm7,xmm14
-
- movdqa xmm6,xmm10
- movdqa xmm5,xmm4
- psrld xmm9,27
- paddd xmm11,xmm7
- pxor xmm6,xmm14
-
- movdqa XMMWORD PTR[(176-128)+rax],xmm3
- paddd xmm11,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm13
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- paddd xmm4,xmm4
- paddd xmm11,xmm6
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((240-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm7,xmm14
- pxor xmm0,XMMWORD PTR[((80-128))+rax]
- pxor xmm0,xmm2
- paddd xmm10,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm11
- pand xmm7,xmm13
-
- movdqa xmm6,xmm14
- movdqa xmm5,xmm0
- psrld xmm9,27
- paddd xmm10,xmm7
- pxor xmm6,xmm13
-
- movdqa XMMWORD PTR[(192-128)+rax],xmm4
- paddd xmm10,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm12
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- paddd xmm0,xmm0
- paddd xmm10,xmm6
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((0-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm7,xmm13
- pxor xmm1,XMMWORD PTR[((96-128))+rax]
- pxor xmm1,xmm3
- paddd xmm14,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm10
- pand xmm7,xmm12
-
- movdqa xmm6,xmm13
- movdqa xmm5,xmm1
- psrld xmm9,27
- paddd xmm14,xmm7
- pxor xmm6,xmm12
-
- movdqa XMMWORD PTR[(208-128)+rax],xmm0
- paddd xmm14,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm11
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- paddd xmm1,xmm1
- paddd xmm14,xmm6
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((16-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm7,xmm12
- pxor xmm2,XMMWORD PTR[((112-128))+rax]
- pxor xmm2,xmm4
- paddd xmm13,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm14
- pand xmm7,xmm11
-
- movdqa xmm6,xmm12
- movdqa xmm5,xmm2
- psrld xmm9,27
- paddd xmm13,xmm7
- pxor xmm6,xmm11
-
- movdqa XMMWORD PTR[(224-128)+rax],xmm1
- paddd xmm13,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm10
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- paddd xmm2,xmm2
- paddd xmm13,xmm6
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((32-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm7,xmm11
- pxor xmm3,XMMWORD PTR[((128-128))+rax]
- pxor xmm3,xmm0
- paddd xmm12,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm13
- pand xmm7,xmm10
-
- movdqa xmm6,xmm11
- movdqa xmm5,xmm3
- psrld xmm9,27
- paddd xmm12,xmm7
- pxor xmm6,xmm10
-
- movdqa XMMWORD PTR[(240-128)+rax],xmm2
- paddd xmm12,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm14
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- paddd xmm3,xmm3
- paddd xmm12,xmm6
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((48-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm7,xmm10
- pxor xmm4,XMMWORD PTR[((144-128))+rax]
- pxor xmm4,xmm1
- paddd xmm11,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm12
- pand xmm7,xmm14
-
- movdqa xmm6,xmm10
- movdqa xmm5,xmm4
- psrld xmm9,27
- paddd xmm11,xmm7
- pxor xmm6,xmm14
-
- movdqa XMMWORD PTR[(0-128)+rax],xmm3
- paddd xmm11,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm13
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- paddd xmm4,xmm4
- paddd xmm11,xmm6
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((64-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm7,xmm14
- pxor xmm0,XMMWORD PTR[((160-128))+rax]
- pxor xmm0,xmm2
- paddd xmm10,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm11
- pand xmm7,xmm13
-
- movdqa xmm6,xmm14
- movdqa xmm5,xmm0
- psrld xmm9,27
- paddd xmm10,xmm7
- pxor xmm6,xmm13
-
- movdqa XMMWORD PTR[(16-128)+rax],xmm4
- paddd xmm10,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm12
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- paddd xmm0,xmm0
- paddd xmm10,xmm6
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((80-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm7,xmm13
- pxor xmm1,XMMWORD PTR[((176-128))+rax]
- pxor xmm1,xmm3
- paddd xmm14,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm10
- pand xmm7,xmm12
-
- movdqa xmm6,xmm13
- movdqa xmm5,xmm1
- psrld xmm9,27
- paddd xmm14,xmm7
- pxor xmm6,xmm12
-
- movdqa XMMWORD PTR[(32-128)+rax],xmm0
- paddd xmm14,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm11
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- paddd xmm1,xmm1
- paddd xmm14,xmm6
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((96-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm7,xmm12
- pxor xmm2,XMMWORD PTR[((192-128))+rax]
- pxor xmm2,xmm4
- paddd xmm13,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm14
- pand xmm7,xmm11
-
- movdqa xmm6,xmm12
- movdqa xmm5,xmm2
- psrld xmm9,27
- paddd xmm13,xmm7
- pxor xmm6,xmm11
-
- movdqa XMMWORD PTR[(48-128)+rax],xmm1
- paddd xmm13,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm10
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- paddd xmm2,xmm2
- paddd xmm13,xmm6
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((112-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm7,xmm11
- pxor xmm3,XMMWORD PTR[((208-128))+rax]
- pxor xmm3,xmm0
- paddd xmm12,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm13
- pand xmm7,xmm10
-
- movdqa xmm6,xmm11
- movdqa xmm5,xmm3
- psrld xmm9,27
- paddd xmm12,xmm7
- pxor xmm6,xmm10
-
- movdqa XMMWORD PTR[(64-128)+rax],xmm2
- paddd xmm12,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm14
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- paddd xmm3,xmm3
- paddd xmm12,xmm6
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((128-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm7,xmm10
- pxor xmm4,XMMWORD PTR[((224-128))+rax]
- pxor xmm4,xmm1
- paddd xmm11,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm12
- pand xmm7,xmm14
-
- movdqa xmm6,xmm10
- movdqa xmm5,xmm4
- psrld xmm9,27
- paddd xmm11,xmm7
- pxor xmm6,xmm14
-
- movdqa XMMWORD PTR[(80-128)+rax],xmm3
- paddd xmm11,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm13
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- paddd xmm4,xmm4
- paddd xmm11,xmm6
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((144-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm7,xmm14
- pxor xmm0,XMMWORD PTR[((240-128))+rax]
- pxor xmm0,xmm2
- paddd xmm10,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm11
- pand xmm7,xmm13
-
- movdqa xmm6,xmm14
- movdqa xmm5,xmm0
- psrld xmm9,27
- paddd xmm10,xmm7
- pxor xmm6,xmm13
-
- movdqa XMMWORD PTR[(96-128)+rax],xmm4
- paddd xmm10,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm12
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- paddd xmm0,xmm0
- paddd xmm10,xmm6
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((160-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm7,xmm13
- pxor xmm1,XMMWORD PTR[((0-128))+rax]
- pxor xmm1,xmm3
- paddd xmm14,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm10
- pand xmm7,xmm12
-
- movdqa xmm6,xmm13
- movdqa xmm5,xmm1
- psrld xmm9,27
- paddd xmm14,xmm7
- pxor xmm6,xmm12
-
- movdqa XMMWORD PTR[(112-128)+rax],xmm0
- paddd xmm14,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm11
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- paddd xmm1,xmm1
- paddd xmm14,xmm6
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((176-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm7,xmm12
- pxor xmm2,XMMWORD PTR[((16-128))+rax]
- pxor xmm2,xmm4
- paddd xmm13,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm14
- pand xmm7,xmm11
-
- movdqa xmm6,xmm12
- movdqa xmm5,xmm2
- psrld xmm9,27
- paddd xmm13,xmm7
- pxor xmm6,xmm11
-
- movdqa XMMWORD PTR[(128-128)+rax],xmm1
- paddd xmm13,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm10
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- paddd xmm2,xmm2
- paddd xmm13,xmm6
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((192-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm7,xmm11
- pxor xmm3,XMMWORD PTR[((32-128))+rax]
- pxor xmm3,xmm0
- paddd xmm12,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm13
- pand xmm7,xmm10
-
- movdqa xmm6,xmm11
- movdqa xmm5,xmm3
- psrld xmm9,27
- paddd xmm12,xmm7
- pxor xmm6,xmm10
-
- movdqa XMMWORD PTR[(144-128)+rax],xmm2
- paddd xmm12,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm14
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- paddd xmm3,xmm3
- paddd xmm12,xmm6
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((208-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm7,xmm10
- pxor xmm4,XMMWORD PTR[((48-128))+rax]
- pxor xmm4,xmm1
- paddd xmm11,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm12
- pand xmm7,xmm14
-
- movdqa xmm6,xmm10
- movdqa xmm5,xmm4
- psrld xmm9,27
- paddd xmm11,xmm7
- pxor xmm6,xmm14
-
- movdqa XMMWORD PTR[(160-128)+rax],xmm3
- paddd xmm11,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm13
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- paddd xmm4,xmm4
- paddd xmm11,xmm6
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((224-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm7,xmm14
- pxor xmm0,XMMWORD PTR[((64-128))+rax]
- pxor xmm0,xmm2
- paddd xmm10,xmm15
- pslld xmm8,5
- movdqa xmm9,xmm11
- pand xmm7,xmm13
-
- movdqa xmm6,xmm14
- movdqa xmm5,xmm0
- psrld xmm9,27
- paddd xmm10,xmm7
- pxor xmm6,xmm13
-
- movdqa XMMWORD PTR[(176-128)+rax],xmm4
- paddd xmm10,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- pand xmm6,xmm12
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- paddd xmm0,xmm0
- paddd xmm10,xmm6
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- movdqa xmm15,XMMWORD PTR[64+rbp]
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((240-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm6,xmm13
- pxor xmm1,XMMWORD PTR[((80-128))+rax]
- paddd xmm14,xmm15
- pslld xmm8,5
- pxor xmm6,xmm11
-
- movdqa xmm9,xmm10
- movdqa XMMWORD PTR[(192-128)+rax],xmm0
- paddd xmm14,xmm0
- pxor xmm1,xmm3
- psrld xmm9,27
- pxor xmm6,xmm12
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- movdqa xmm5,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm14,xmm6
- paddd xmm1,xmm1
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((0-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm6,xmm12
- pxor xmm2,XMMWORD PTR[((96-128))+rax]
- paddd xmm13,xmm15
- pslld xmm8,5
- pxor xmm6,xmm10
-
- movdqa xmm9,xmm14
- movdqa XMMWORD PTR[(208-128)+rax],xmm1
- paddd xmm13,xmm1
- pxor xmm2,xmm4
- psrld xmm9,27
- pxor xmm6,xmm11
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- movdqa xmm5,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm13,xmm6
- paddd xmm2,xmm2
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((16-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm6,xmm11
- pxor xmm3,XMMWORD PTR[((112-128))+rax]
- paddd xmm12,xmm15
- pslld xmm8,5
- pxor xmm6,xmm14
-
- movdqa xmm9,xmm13
- movdqa XMMWORD PTR[(224-128)+rax],xmm2
- paddd xmm12,xmm2
- pxor xmm3,xmm0
- psrld xmm9,27
- pxor xmm6,xmm10
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- movdqa xmm5,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm12,xmm6
- paddd xmm3,xmm3
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((32-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm6,xmm10
- pxor xmm4,XMMWORD PTR[((128-128))+rax]
- paddd xmm11,xmm15
- pslld xmm8,5
- pxor xmm6,xmm13
-
- movdqa xmm9,xmm12
- movdqa XMMWORD PTR[(240-128)+rax],xmm3
- paddd xmm11,xmm3
- pxor xmm4,xmm1
- psrld xmm9,27
- pxor xmm6,xmm14
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- movdqa xmm5,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm11,xmm6
- paddd xmm4,xmm4
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((48-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm6,xmm14
- pxor xmm0,XMMWORD PTR[((144-128))+rax]
- paddd xmm10,xmm15
- pslld xmm8,5
- pxor xmm6,xmm12
-
- movdqa xmm9,xmm11
- movdqa XMMWORD PTR[(0-128)+rax],xmm4
- paddd xmm10,xmm4
- pxor xmm0,xmm2
- psrld xmm9,27
- pxor xmm6,xmm13
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- movdqa xmm5,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm10,xmm6
- paddd xmm0,xmm0
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((64-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm6,xmm13
- pxor xmm1,XMMWORD PTR[((160-128))+rax]
- paddd xmm14,xmm15
- pslld xmm8,5
- pxor xmm6,xmm11
-
- movdqa xmm9,xmm10
- movdqa XMMWORD PTR[(16-128)+rax],xmm0
- paddd xmm14,xmm0
- pxor xmm1,xmm3
- psrld xmm9,27
- pxor xmm6,xmm12
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- movdqa xmm5,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm14,xmm6
- paddd xmm1,xmm1
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((80-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm6,xmm12
- pxor xmm2,XMMWORD PTR[((176-128))+rax]
- paddd xmm13,xmm15
- pslld xmm8,5
- pxor xmm6,xmm10
-
- movdqa xmm9,xmm14
- movdqa XMMWORD PTR[(32-128)+rax],xmm1
- paddd xmm13,xmm1
- pxor xmm2,xmm4
- psrld xmm9,27
- pxor xmm6,xmm11
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- movdqa xmm5,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm13,xmm6
- paddd xmm2,xmm2
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((96-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm6,xmm11
- pxor xmm3,XMMWORD PTR[((192-128))+rax]
- paddd xmm12,xmm15
- pslld xmm8,5
- pxor xmm6,xmm14
-
- movdqa xmm9,xmm13
- movdqa XMMWORD PTR[(48-128)+rax],xmm2
- paddd xmm12,xmm2
- pxor xmm3,xmm0
- psrld xmm9,27
- pxor xmm6,xmm10
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- movdqa xmm5,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm12,xmm6
- paddd xmm3,xmm3
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((112-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm6,xmm10
- pxor xmm4,XMMWORD PTR[((208-128))+rax]
- paddd xmm11,xmm15
- pslld xmm8,5
- pxor xmm6,xmm13
-
- movdqa xmm9,xmm12
- movdqa XMMWORD PTR[(64-128)+rax],xmm3
- paddd xmm11,xmm3
- pxor xmm4,xmm1
- psrld xmm9,27
- pxor xmm6,xmm14
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- movdqa xmm5,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm11,xmm6
- paddd xmm4,xmm4
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((128-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm6,xmm14
- pxor xmm0,XMMWORD PTR[((224-128))+rax]
- paddd xmm10,xmm15
- pslld xmm8,5
- pxor xmm6,xmm12
-
- movdqa xmm9,xmm11
- movdqa XMMWORD PTR[(80-128)+rax],xmm4
- paddd xmm10,xmm4
- pxor xmm0,xmm2
- psrld xmm9,27
- pxor xmm6,xmm13
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- movdqa xmm5,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm10,xmm6
- paddd xmm0,xmm0
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((144-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm6,xmm13
- pxor xmm1,XMMWORD PTR[((240-128))+rax]
- paddd xmm14,xmm15
- pslld xmm8,5
- pxor xmm6,xmm11
-
- movdqa xmm9,xmm10
- movdqa XMMWORD PTR[(96-128)+rax],xmm0
- paddd xmm14,xmm0
- pxor xmm1,xmm3
- psrld xmm9,27
- pxor xmm6,xmm12
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- movdqa xmm5,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm14,xmm6
- paddd xmm1,xmm1
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((160-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm6,xmm12
- pxor xmm2,XMMWORD PTR[((0-128))+rax]
- paddd xmm13,xmm15
- pslld xmm8,5
- pxor xmm6,xmm10
-
- movdqa xmm9,xmm14
- movdqa XMMWORD PTR[(112-128)+rax],xmm1
- paddd xmm13,xmm1
- pxor xmm2,xmm4
- psrld xmm9,27
- pxor xmm6,xmm11
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- movdqa xmm5,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm13,xmm6
- paddd xmm2,xmm2
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((176-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm6,xmm11
- pxor xmm3,XMMWORD PTR[((16-128))+rax]
- paddd xmm12,xmm15
- pslld xmm8,5
- pxor xmm6,xmm14
-
- movdqa xmm9,xmm13
- paddd xmm12,xmm2
- pxor xmm3,xmm0
- psrld xmm9,27
- pxor xmm6,xmm10
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- movdqa xmm5,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm12,xmm6
- paddd xmm3,xmm3
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((192-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm6,xmm10
- pxor xmm4,XMMWORD PTR[((32-128))+rax]
- paddd xmm11,xmm15
- pslld xmm8,5
- pxor xmm6,xmm13
-
- movdqa xmm9,xmm12
- paddd xmm11,xmm3
- pxor xmm4,xmm1
- psrld xmm9,27
- pxor xmm6,xmm14
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- movdqa xmm5,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm11,xmm6
- paddd xmm4,xmm4
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- pxor xmm0,xmm2
- movdqa xmm2,XMMWORD PTR[((208-128))+rax]
-
- movdqa xmm8,xmm11
- movdqa xmm6,xmm14
- pxor xmm0,XMMWORD PTR[((48-128))+rax]
- paddd xmm10,xmm15
- pslld xmm8,5
- pxor xmm6,xmm12
-
- movdqa xmm9,xmm11
- paddd xmm10,xmm4
- pxor xmm0,xmm2
- psrld xmm9,27
- pxor xmm6,xmm13
- movdqa xmm7,xmm12
-
- pslld xmm7,30
- movdqa xmm5,xmm0
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm10,xmm6
- paddd xmm0,xmm0
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm0,xmm5
- por xmm12,xmm7
- pxor xmm1,xmm3
- movdqa xmm3,XMMWORD PTR[((224-128))+rax]
-
- movdqa xmm8,xmm10
- movdqa xmm6,xmm13
- pxor xmm1,XMMWORD PTR[((64-128))+rax]
- paddd xmm14,xmm15
- pslld xmm8,5
- pxor xmm6,xmm11
-
- movdqa xmm9,xmm10
- paddd xmm14,xmm0
- pxor xmm1,xmm3
- psrld xmm9,27
- pxor xmm6,xmm12
- movdqa xmm7,xmm11
-
- pslld xmm7,30
- movdqa xmm5,xmm1
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm14,xmm6
- paddd xmm1,xmm1
-
- psrld xmm11,2
- paddd xmm14,xmm8
- por xmm1,xmm5
- por xmm11,xmm7
- pxor xmm2,xmm4
- movdqa xmm4,XMMWORD PTR[((240-128))+rax]
-
- movdqa xmm8,xmm14
- movdqa xmm6,xmm12
- pxor xmm2,XMMWORD PTR[((80-128))+rax]
- paddd xmm13,xmm15
- pslld xmm8,5
- pxor xmm6,xmm10
-
- movdqa xmm9,xmm14
- paddd xmm13,xmm1
- pxor xmm2,xmm4
- psrld xmm9,27
- pxor xmm6,xmm11
- movdqa xmm7,xmm10
-
- pslld xmm7,30
- movdqa xmm5,xmm2
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm13,xmm6
- paddd xmm2,xmm2
-
- psrld xmm10,2
- paddd xmm13,xmm8
- por xmm2,xmm5
- por xmm10,xmm7
- pxor xmm3,xmm0
- movdqa xmm0,XMMWORD PTR[((0-128))+rax]
-
- movdqa xmm8,xmm13
- movdqa xmm6,xmm11
- pxor xmm3,XMMWORD PTR[((96-128))+rax]
- paddd xmm12,xmm15
- pslld xmm8,5
- pxor xmm6,xmm14
-
- movdqa xmm9,xmm13
- paddd xmm12,xmm2
- pxor xmm3,xmm0
- psrld xmm9,27
- pxor xmm6,xmm10
- movdqa xmm7,xmm14
-
- pslld xmm7,30
- movdqa xmm5,xmm3
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm12,xmm6
- paddd xmm3,xmm3
-
- psrld xmm14,2
- paddd xmm12,xmm8
- por xmm3,xmm5
- por xmm14,xmm7
- pxor xmm4,xmm1
- movdqa xmm1,XMMWORD PTR[((16-128))+rax]
-
- movdqa xmm8,xmm12
- movdqa xmm6,xmm10
- pxor xmm4,XMMWORD PTR[((112-128))+rax]
- paddd xmm11,xmm15
- pslld xmm8,5
- pxor xmm6,xmm13
-
- movdqa xmm9,xmm12
- paddd xmm11,xmm3
- pxor xmm4,xmm1
- psrld xmm9,27
- pxor xmm6,xmm14
- movdqa xmm7,xmm13
-
- pslld xmm7,30
- movdqa xmm5,xmm4
- por xmm8,xmm9
- psrld xmm5,31
- paddd xmm11,xmm6
- paddd xmm4,xmm4
-
- psrld xmm13,2
- paddd xmm11,xmm8
- por xmm4,xmm5
- por xmm13,xmm7
- movdqa xmm8,xmm11
- paddd xmm10,xmm15
- movdqa xmm6,xmm14
- pslld xmm8,5
- pxor xmm6,xmm12
-
- movdqa xmm9,xmm11
- paddd xmm10,xmm4
- psrld xmm9,27
- movdqa xmm7,xmm12
- pxor xmm6,xmm13
-
- pslld xmm7,30
- por xmm8,xmm9
- paddd xmm10,xmm6
-
- psrld xmm12,2
- paddd xmm10,xmm8
- por xmm12,xmm7
- movdqa xmm0,XMMWORD PTR[rbx]
- mov ecx,1
- cmp ecx,DWORD PTR[rbx]
- pxor xmm8,xmm8
- cmovge r8,rbp
- cmp ecx,DWORD PTR[4+rbx]
- movdqa xmm1,xmm0
- cmovge r9,rbp
- cmp ecx,DWORD PTR[8+rbx]
- pcmpgtd xmm1,xmm8
- cmovge r10,rbp
- cmp ecx,DWORD PTR[12+rbx]
- paddd xmm0,xmm1
- cmovge r11,rbp
-
- movdqu xmm6,XMMWORD PTR[rdi]
- pand xmm10,xmm1
- movdqu xmm7,XMMWORD PTR[32+rdi]
- pand xmm11,xmm1
- paddd xmm10,xmm6
- movdqu xmm8,XMMWORD PTR[64+rdi]
- pand xmm12,xmm1
- paddd xmm11,xmm7
- movdqu xmm9,XMMWORD PTR[96+rdi]
- pand xmm13,xmm1
- paddd xmm12,xmm8
- movdqu xmm5,XMMWORD PTR[128+rdi]
- pand xmm14,xmm1
- movdqu XMMWORD PTR[rdi],xmm10
- paddd xmm13,xmm9
- movdqu XMMWORD PTR[32+rdi],xmm11
- paddd xmm14,xmm5
- movdqu XMMWORD PTR[64+rdi],xmm12
- movdqu XMMWORD PTR[96+rdi],xmm13
- movdqu XMMWORD PTR[128+rdi],xmm14
-
- movdqa XMMWORD PTR[rbx],xmm0
- movdqa xmm5,XMMWORD PTR[96+rbp]
- movdqa xmm15,XMMWORD PTR[((-32))+rbp]
- dec edx
- jnz $L$oop
-
- mov edx,DWORD PTR[280+rsp]
- lea rdi,QWORD PTR[16+rdi]
- lea rsi,QWORD PTR[64+rsi]
- dec edx
- jnz $L$oop_grande
-
-$L$done::
- mov rax,QWORD PTR[272+rsp]
-
- movaps xmm6,XMMWORD PTR[((-184))+rax]
- movaps xmm7,XMMWORD PTR[((-168))+rax]
- movaps xmm8,XMMWORD PTR[((-152))+rax]
- movaps xmm9,XMMWORD PTR[((-136))+rax]
- movaps xmm10,XMMWORD PTR[((-120))+rax]
- movaps xmm11,XMMWORD PTR[((-104))+rax]
- movaps xmm12,XMMWORD PTR[((-88))+rax]
- movaps xmm13,XMMWORD PTR[((-72))+rax]
- movaps xmm14,XMMWORD PTR[((-56))+rax]
- movaps xmm15,XMMWORD PTR[((-40))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha1_multi_block::
-sha1_multi_block ENDP
-
-ALIGN 32
-sha1_multi_block_shaext PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha1_multi_block_shaext::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-_shaext_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[(-120)+rax],xmm10
- movaps XMMWORD PTR[(-104)+rax],xmm11
- movaps XMMWORD PTR[(-88)+rax],xmm12
- movaps XMMWORD PTR[(-72)+rax],xmm13
- movaps XMMWORD PTR[(-56)+rax],xmm14
- movaps XMMWORD PTR[(-40)+rax],xmm15
- sub rsp,288
- shl edx,1
- and rsp,-256
- lea rdi,QWORD PTR[64+rdi]
- mov QWORD PTR[272+rsp],rax
-$L$body_shaext::
- lea rbx,QWORD PTR[256+rsp]
- movdqa xmm3,XMMWORD PTR[((K_XX_XX+128))]
-
-$L$oop_grande_shaext::
- mov DWORD PTR[280+rsp],edx
- xor edx,edx
- mov r8,QWORD PTR[rsi]
- mov ecx,DWORD PTR[8+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[rbx],ecx
- cmovle r8,rsp
- mov r9,QWORD PTR[16+rsi]
- mov ecx,DWORD PTR[24+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[4+rbx],ecx
- cmovle r9,rsp
- test edx,edx
- jz $L$done_shaext
-
- movq xmm0,QWORD PTR[((0-64))+rdi]
- movq xmm4,QWORD PTR[((32-64))+rdi]
- movq xmm5,QWORD PTR[((64-64))+rdi]
- movq xmm6,QWORD PTR[((96-64))+rdi]
- movq xmm7,QWORD PTR[((128-64))+rdi]
-
- punpckldq xmm0,xmm4
- punpckldq xmm5,xmm6
-
- movdqa xmm8,xmm0
- punpcklqdq xmm0,xmm5
- punpckhqdq xmm8,xmm5
-
- pshufd xmm1,xmm7,63
- pshufd xmm9,xmm7,127
- pshufd xmm0,xmm0,27
- pshufd xmm8,xmm8,27
- jmp $L$oop_shaext
-
-ALIGN 32
-$L$oop_shaext::
- movdqu xmm4,XMMWORD PTR[r8]
- movdqu xmm11,XMMWORD PTR[r9]
- movdqu xmm5,XMMWORD PTR[16+r8]
- movdqu xmm12,XMMWORD PTR[16+r9]
- movdqu xmm6,XMMWORD PTR[32+r8]
-DB 102,15,56,0,227
- movdqu xmm13,XMMWORD PTR[32+r9]
-DB 102,68,15,56,0,219
- movdqu xmm7,XMMWORD PTR[48+r8]
- lea r8,QWORD PTR[64+r8]
-DB 102,15,56,0,235
- movdqu xmm14,XMMWORD PTR[48+r9]
- lea r9,QWORD PTR[64+r9]
-DB 102,68,15,56,0,227
-
- movdqa XMMWORD PTR[80+rsp],xmm1
- paddd xmm1,xmm4
- movdqa XMMWORD PTR[112+rsp],xmm9
- paddd xmm9,xmm11
- movdqa XMMWORD PTR[64+rsp],xmm0
- movdqa xmm2,xmm0
- movdqa XMMWORD PTR[96+rsp],xmm8
- movdqa xmm10,xmm8
-DB 15,58,204,193,0
-DB 15,56,200,213
-DB 69,15,58,204,193,0
-DB 69,15,56,200,212
-DB 102,15,56,0,243
- prefetcht0 [127+r8]
-DB 15,56,201,229
-DB 102,68,15,56,0,235
- prefetcht0 [127+r9]
-DB 69,15,56,201,220
-
-DB 102,15,56,0,251
- movdqa xmm1,xmm0
-DB 102,68,15,56,0,243
- movdqa xmm9,xmm8
-DB 15,58,204,194,0
-DB 15,56,200,206
-DB 69,15,58,204,194,0
-DB 69,15,56,200,205
- pxor xmm4,xmm6
-DB 15,56,201,238
- pxor xmm11,xmm13
-DB 69,15,56,201,229
- movdqa xmm2,xmm0
- movdqa xmm10,xmm8
-DB 15,58,204,193,0
-DB 15,56,200,215
-DB 69,15,58,204,193,0
-DB 69,15,56,200,214
-DB 15,56,202,231
-DB 69,15,56,202,222
- pxor xmm5,xmm7
-DB 15,56,201,247
- pxor xmm12,xmm14
-DB 69,15,56,201,238
- movdqa xmm1,xmm0
- movdqa xmm9,xmm8
-DB 15,58,204,194,0
-DB 15,56,200,204
-DB 69,15,58,204,194,0
-DB 69,15,56,200,203
-DB 15,56,202,236
-DB 69,15,56,202,227
- pxor xmm6,xmm4
-DB 15,56,201,252
- pxor xmm13,xmm11
-DB 69,15,56,201,243
- movdqa xmm2,xmm0
- movdqa xmm10,xmm8
-DB 15,58,204,193,0
-DB 15,56,200,213
-DB 69,15,58,204,193,0
-DB 69,15,56,200,212
-DB 15,56,202,245
-DB 69,15,56,202,236
- pxor xmm7,xmm5
-DB 15,56,201,229
- pxor xmm14,xmm12
-DB 69,15,56,201,220
- movdqa xmm1,xmm0
- movdqa xmm9,xmm8
-DB 15,58,204,194,1
-DB 15,56,200,206
-DB 69,15,58,204,194,1
-DB 69,15,56,200,205
-DB 15,56,202,254
-DB 69,15,56,202,245
- pxor xmm4,xmm6
-DB 15,56,201,238
- pxor xmm11,xmm13
-DB 69,15,56,201,229
- movdqa xmm2,xmm0
- movdqa xmm10,xmm8
-DB 15,58,204,193,1
-DB 15,56,200,215
-DB 69,15,58,204,193,1
-DB 69,15,56,200,214
-DB 15,56,202,231
-DB 69,15,56,202,222
- pxor xmm5,xmm7
-DB 15,56,201,247
- pxor xmm12,xmm14
-DB 69,15,56,201,238
- movdqa xmm1,xmm0
- movdqa xmm9,xmm8
-DB 15,58,204,194,1
-DB 15,56,200,204
-DB 69,15,58,204,194,1
-DB 69,15,56,200,203
-DB 15,56,202,236
-DB 69,15,56,202,227
- pxor xmm6,xmm4
-DB 15,56,201,252
- pxor xmm13,xmm11
-DB 69,15,56,201,243
- movdqa xmm2,xmm0
- movdqa xmm10,xmm8
-DB 15,58,204,193,1
-DB 15,56,200,213
-DB 69,15,58,204,193,1
-DB 69,15,56,200,212
-DB 15,56,202,245
-DB 69,15,56,202,236
- pxor xmm7,xmm5
-DB 15,56,201,229
- pxor xmm14,xmm12
-DB 69,15,56,201,220
- movdqa xmm1,xmm0
- movdqa xmm9,xmm8
-DB 15,58,204,194,1
-DB 15,56,200,206
-DB 69,15,58,204,194,1
-DB 69,15,56,200,205
-DB 15,56,202,254
-DB 69,15,56,202,245
- pxor xmm4,xmm6
-DB 15,56,201,238
- pxor xmm11,xmm13
-DB 69,15,56,201,229
- movdqa xmm2,xmm0
- movdqa xmm10,xmm8
-DB 15,58,204,193,2
-DB 15,56,200,215
-DB 69,15,58,204,193,2
-DB 69,15,56,200,214
-DB 15,56,202,231
-DB 69,15,56,202,222
- pxor xmm5,xmm7
-DB 15,56,201,247
- pxor xmm12,xmm14
-DB 69,15,56,201,238
- movdqa xmm1,xmm0
- movdqa xmm9,xmm8
-DB 15,58,204,194,2
-DB 15,56,200,204
-DB 69,15,58,204,194,2
-DB 69,15,56,200,203
-DB 15,56,202,236
-DB 69,15,56,202,227
- pxor xmm6,xmm4
-DB 15,56,201,252
- pxor xmm13,xmm11
-DB 69,15,56,201,243
- movdqa xmm2,xmm0
- movdqa xmm10,xmm8
-DB 15,58,204,193,2
-DB 15,56,200,213
-DB 69,15,58,204,193,2
-DB 69,15,56,200,212
-DB 15,56,202,245
-DB 69,15,56,202,236
- pxor xmm7,xmm5
-DB 15,56,201,229
- pxor xmm14,xmm12
-DB 69,15,56,201,220
- movdqa xmm1,xmm0
- movdqa xmm9,xmm8
-DB 15,58,204,194,2
-DB 15,56,200,206
-DB 69,15,58,204,194,2
-DB 69,15,56,200,205
-DB 15,56,202,254
-DB 69,15,56,202,245
- pxor xmm4,xmm6
-DB 15,56,201,238
- pxor xmm11,xmm13
-DB 69,15,56,201,229
- movdqa xmm2,xmm0
- movdqa xmm10,xmm8
-DB 15,58,204,193,2
-DB 15,56,200,215
-DB 69,15,58,204,193,2
-DB 69,15,56,200,214
-DB 15,56,202,231
-DB 69,15,56,202,222
- pxor xmm5,xmm7
-DB 15,56,201,247
- pxor xmm12,xmm14
-DB 69,15,56,201,238
- movdqa xmm1,xmm0
- movdqa xmm9,xmm8
-DB 15,58,204,194,3
-DB 15,56,200,204
-DB 69,15,58,204,194,3
-DB 69,15,56,200,203
-DB 15,56,202,236
-DB 69,15,56,202,227
- pxor xmm6,xmm4
-DB 15,56,201,252
- pxor xmm13,xmm11
-DB 69,15,56,201,243
- movdqa xmm2,xmm0
- movdqa xmm10,xmm8
-DB 15,58,204,193,3
-DB 15,56,200,213
-DB 69,15,58,204,193,3
-DB 69,15,56,200,212
-DB 15,56,202,245
-DB 69,15,56,202,236
- pxor xmm7,xmm5
- pxor xmm14,xmm12
-
- mov ecx,1
- pxor xmm4,xmm4
- cmp ecx,DWORD PTR[rbx]
- cmovge r8,rsp
-
- movdqa xmm1,xmm0
- movdqa xmm9,xmm8
-DB 15,58,204,194,3
-DB 15,56,200,206
-DB 69,15,58,204,194,3
-DB 69,15,56,200,205
-DB 15,56,202,254
-DB 69,15,56,202,245
-
- cmp ecx,DWORD PTR[4+rbx]
- cmovge r9,rsp
- movq xmm6,QWORD PTR[rbx]
-
- movdqa xmm2,xmm0
- movdqa xmm10,xmm8
-DB 15,58,204,193,3
-DB 15,56,200,215
-DB 69,15,58,204,193,3
-DB 69,15,56,200,214
-
- pshufd xmm11,xmm6,000h
- pshufd xmm12,xmm6,055h
- movdqa xmm7,xmm6
- pcmpgtd xmm11,xmm4
- pcmpgtd xmm12,xmm4
-
- movdqa xmm1,xmm0
- movdqa xmm9,xmm8
-DB 15,58,204,194,3
-DB 15,56,200,204
-DB 69,15,58,204,194,3
-DB 68,15,56,200,204
-
- pcmpgtd xmm7,xmm4
- pand xmm0,xmm11
- pand xmm1,xmm11
- pand xmm8,xmm12
- pand xmm9,xmm12
- paddd xmm6,xmm7
-
- paddd xmm0,XMMWORD PTR[64+rsp]
- paddd xmm1,XMMWORD PTR[80+rsp]
- paddd xmm8,XMMWORD PTR[96+rsp]
- paddd xmm9,XMMWORD PTR[112+rsp]
-
- movq QWORD PTR[rbx],xmm6
- dec edx
- jnz $L$oop_shaext
-
- mov edx,DWORD PTR[280+rsp]
-
- pshufd xmm0,xmm0,27
- pshufd xmm8,xmm8,27
-
- movdqa xmm6,xmm0
- punpckldq xmm0,xmm8
- punpckhdq xmm6,xmm8
- punpckhdq xmm1,xmm9
- movq QWORD PTR[(0-64)+rdi],xmm0
- psrldq xmm0,8
- movq QWORD PTR[(64-64)+rdi],xmm6
- psrldq xmm6,8
- movq QWORD PTR[(32-64)+rdi],xmm0
- psrldq xmm1,8
- movq QWORD PTR[(96-64)+rdi],xmm6
- movq QWORD PTR[(128-64)+rdi],xmm1
-
- lea rdi,QWORD PTR[8+rdi]
- lea rsi,QWORD PTR[32+rsi]
- dec edx
- jnz $L$oop_grande_shaext
-
-$L$done_shaext::
-
- movaps xmm6,XMMWORD PTR[((-184))+rax]
- movaps xmm7,XMMWORD PTR[((-168))+rax]
- movaps xmm8,XMMWORD PTR[((-152))+rax]
- movaps xmm9,XMMWORD PTR[((-136))+rax]
- movaps xmm10,XMMWORD PTR[((-120))+rax]
- movaps xmm11,XMMWORD PTR[((-104))+rax]
- movaps xmm12,XMMWORD PTR[((-88))+rax]
- movaps xmm13,XMMWORD PTR[((-72))+rax]
- movaps xmm14,XMMWORD PTR[((-56))+rax]
- movaps xmm15,XMMWORD PTR[((-40))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$epilogue_shaext::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha1_multi_block_shaext::
-sha1_multi_block_shaext ENDP
-
-ALIGN 32
-sha1_multi_block_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha1_multi_block_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-_avx_shortcut::
- shr rcx,32
- cmp edx,2
- jb $L$avx
- test ecx,32
- jnz _avx2_shortcut
- jmp $L$avx
-ALIGN 32
-$L$avx::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[(-120)+rax],xmm10
- movaps XMMWORD PTR[(-104)+rax],xmm11
- movaps XMMWORD PTR[(-88)+rax],xmm12
- movaps XMMWORD PTR[(-72)+rax],xmm13
- movaps XMMWORD PTR[(-56)+rax],xmm14
- movaps XMMWORD PTR[(-40)+rax],xmm15
- sub rsp,288
- and rsp,-256
- mov QWORD PTR[272+rsp],rax
-
-$L$body_avx::
- lea rbp,QWORD PTR[K_XX_XX]
- lea rbx,QWORD PTR[256+rsp]
-
- vzeroupper
-$L$oop_grande_avx::
- mov DWORD PTR[280+rsp],edx
- xor edx,edx
- mov r8,QWORD PTR[rsi]
- mov ecx,DWORD PTR[8+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[rbx],ecx
- cmovle r8,rbp
- mov r9,QWORD PTR[16+rsi]
- mov ecx,DWORD PTR[24+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[4+rbx],ecx
- cmovle r9,rbp
- mov r10,QWORD PTR[32+rsi]
- mov ecx,DWORD PTR[40+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[8+rbx],ecx
- cmovle r10,rbp
- mov r11,QWORD PTR[48+rsi]
- mov ecx,DWORD PTR[56+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[12+rbx],ecx
- cmovle r11,rbp
- test edx,edx
- jz $L$done_avx
-
- vmovdqu xmm10,XMMWORD PTR[rdi]
- lea rax,QWORD PTR[128+rsp]
- vmovdqu xmm11,XMMWORD PTR[32+rdi]
- vmovdqu xmm12,XMMWORD PTR[64+rdi]
- vmovdqu xmm13,XMMWORD PTR[96+rdi]
- vmovdqu xmm14,XMMWORD PTR[128+rdi]
- vmovdqu xmm5,XMMWORD PTR[96+rbp]
- jmp $L$oop_avx
-
-ALIGN 32
-$L$oop_avx::
- vmovdqa xmm15,XMMWORD PTR[((-32))+rbp]
- vmovd xmm0,DWORD PTR[r8]
- lea r8,QWORD PTR[64+r8]
- vmovd xmm2,DWORD PTR[r9]
- lea r9,QWORD PTR[64+r9]
- vpinsrd xmm0,xmm0,DWORD PTR[r10],1
- lea r10,QWORD PTR[64+r10]
- vpinsrd xmm2,xmm2,DWORD PTR[r11],1
- lea r11,QWORD PTR[64+r11]
- vmovd xmm1,DWORD PTR[((-60))+r8]
- vpunpckldq xmm0,xmm0,xmm2
- vmovd xmm9,DWORD PTR[((-60))+r9]
- vpshufb xmm0,xmm0,xmm5
- vpinsrd xmm1,xmm1,DWORD PTR[((-60))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-60))+r11],1
- vpaddd xmm14,xmm14,xmm15
- vpslld xmm8,xmm10,5
- vpandn xmm7,xmm11,xmm13
- vpand xmm6,xmm11,xmm12
-
- vmovdqa XMMWORD PTR[(0-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpunpckldq xmm1,xmm1,xmm9
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm2,DWORD PTR[((-56))+r8]
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-56))+r9]
- vpaddd xmm14,xmm14,xmm6
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpshufb xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpinsrd xmm2,xmm2,DWORD PTR[((-56))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-56))+r11],1
- vpaddd xmm13,xmm13,xmm15
- vpslld xmm8,xmm14,5
- vpandn xmm7,xmm10,xmm12
- vpand xmm6,xmm10,xmm11
-
- vmovdqa XMMWORD PTR[(16-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpunpckldq xmm2,xmm2,xmm9
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm3,DWORD PTR[((-52))+r8]
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-52))+r9]
- vpaddd xmm13,xmm13,xmm6
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpshufb xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpinsrd xmm3,xmm3,DWORD PTR[((-52))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-52))+r11],1
- vpaddd xmm12,xmm12,xmm15
- vpslld xmm8,xmm13,5
- vpandn xmm7,xmm14,xmm11
- vpand xmm6,xmm14,xmm10
-
- vmovdqa XMMWORD PTR[(32-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpunpckldq xmm3,xmm3,xmm9
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm4,DWORD PTR[((-48))+r8]
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-48))+r9]
- vpaddd xmm12,xmm12,xmm6
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpshufb xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpinsrd xmm4,xmm4,DWORD PTR[((-48))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-48))+r11],1
- vpaddd xmm11,xmm11,xmm15
- vpslld xmm8,xmm12,5
- vpandn xmm7,xmm13,xmm10
- vpand xmm6,xmm13,xmm14
-
- vmovdqa XMMWORD PTR[(48-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpunpckldq xmm4,xmm4,xmm9
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm0,DWORD PTR[((-44))+r8]
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-44))+r9]
- vpaddd xmm11,xmm11,xmm6
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpshufb xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpinsrd xmm0,xmm0,DWORD PTR[((-44))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-44))+r11],1
- vpaddd xmm10,xmm10,xmm15
- vpslld xmm8,xmm11,5
- vpandn xmm7,xmm12,xmm14
- vpand xmm6,xmm12,xmm13
-
- vmovdqa XMMWORD PTR[(64-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpunpckldq xmm0,xmm0,xmm9
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm1,DWORD PTR[((-40))+r8]
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-40))+r9]
- vpaddd xmm10,xmm10,xmm6
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpshufb xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpinsrd xmm1,xmm1,DWORD PTR[((-40))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-40))+r11],1
- vpaddd xmm14,xmm14,xmm15
- vpslld xmm8,xmm10,5
- vpandn xmm7,xmm11,xmm13
- vpand xmm6,xmm11,xmm12
-
- vmovdqa XMMWORD PTR[(80-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpunpckldq xmm1,xmm1,xmm9
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm2,DWORD PTR[((-36))+r8]
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-36))+r9]
- vpaddd xmm14,xmm14,xmm6
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpshufb xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpinsrd xmm2,xmm2,DWORD PTR[((-36))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-36))+r11],1
- vpaddd xmm13,xmm13,xmm15
- vpslld xmm8,xmm14,5
- vpandn xmm7,xmm10,xmm12
- vpand xmm6,xmm10,xmm11
-
- vmovdqa XMMWORD PTR[(96-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpunpckldq xmm2,xmm2,xmm9
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm3,DWORD PTR[((-32))+r8]
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-32))+r9]
- vpaddd xmm13,xmm13,xmm6
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpshufb xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpinsrd xmm3,xmm3,DWORD PTR[((-32))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-32))+r11],1
- vpaddd xmm12,xmm12,xmm15
- vpslld xmm8,xmm13,5
- vpandn xmm7,xmm14,xmm11
- vpand xmm6,xmm14,xmm10
-
- vmovdqa XMMWORD PTR[(112-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpunpckldq xmm3,xmm3,xmm9
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm4,DWORD PTR[((-28))+r8]
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-28))+r9]
- vpaddd xmm12,xmm12,xmm6
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpshufb xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpinsrd xmm4,xmm4,DWORD PTR[((-28))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-28))+r11],1
- vpaddd xmm11,xmm11,xmm15
- vpslld xmm8,xmm12,5
- vpandn xmm7,xmm13,xmm10
- vpand xmm6,xmm13,xmm14
-
- vmovdqa XMMWORD PTR[(128-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpunpckldq xmm4,xmm4,xmm9
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm0,DWORD PTR[((-24))+r8]
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-24))+r9]
- vpaddd xmm11,xmm11,xmm6
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpshufb xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpinsrd xmm0,xmm0,DWORD PTR[((-24))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-24))+r11],1
- vpaddd xmm10,xmm10,xmm15
- vpslld xmm8,xmm11,5
- vpandn xmm7,xmm12,xmm14
- vpand xmm6,xmm12,xmm13
-
- vmovdqa XMMWORD PTR[(144-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpunpckldq xmm0,xmm0,xmm9
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm1,DWORD PTR[((-20))+r8]
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-20))+r9]
- vpaddd xmm10,xmm10,xmm6
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpshufb xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpinsrd xmm1,xmm1,DWORD PTR[((-20))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-20))+r11],1
- vpaddd xmm14,xmm14,xmm15
- vpslld xmm8,xmm10,5
- vpandn xmm7,xmm11,xmm13
- vpand xmm6,xmm11,xmm12
-
- vmovdqa XMMWORD PTR[(160-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpunpckldq xmm1,xmm1,xmm9
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm2,DWORD PTR[((-16))+r8]
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-16))+r9]
- vpaddd xmm14,xmm14,xmm6
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpshufb xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpinsrd xmm2,xmm2,DWORD PTR[((-16))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-16))+r11],1
- vpaddd xmm13,xmm13,xmm15
- vpslld xmm8,xmm14,5
- vpandn xmm7,xmm10,xmm12
- vpand xmm6,xmm10,xmm11
-
- vmovdqa XMMWORD PTR[(176-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpunpckldq xmm2,xmm2,xmm9
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm3,DWORD PTR[((-12))+r8]
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-12))+r9]
- vpaddd xmm13,xmm13,xmm6
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpshufb xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpinsrd xmm3,xmm3,DWORD PTR[((-12))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-12))+r11],1
- vpaddd xmm12,xmm12,xmm15
- vpslld xmm8,xmm13,5
- vpandn xmm7,xmm14,xmm11
- vpand xmm6,xmm14,xmm10
-
- vmovdqa XMMWORD PTR[(192-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpunpckldq xmm3,xmm3,xmm9
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm4,DWORD PTR[((-8))+r8]
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-8))+r9]
- vpaddd xmm12,xmm12,xmm6
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpshufb xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpinsrd xmm4,xmm4,DWORD PTR[((-8))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-8))+r11],1
- vpaddd xmm11,xmm11,xmm15
- vpslld xmm8,xmm12,5
- vpandn xmm7,xmm13,xmm10
- vpand xmm6,xmm13,xmm14
-
- vmovdqa XMMWORD PTR[(208-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpunpckldq xmm4,xmm4,xmm9
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm7
- vmovd xmm0,DWORD PTR[((-4))+r8]
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vmovd xmm9,DWORD PTR[((-4))+r9]
- vpaddd xmm11,xmm11,xmm6
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpshufb xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vmovdqa xmm1,XMMWORD PTR[((0-128))+rax]
- vpinsrd xmm0,xmm0,DWORD PTR[((-4))+r10],1
- vpinsrd xmm9,xmm9,DWORD PTR[((-4))+r11],1
- vpaddd xmm10,xmm10,xmm15
- prefetcht0 [63+r8]
- vpslld xmm8,xmm11,5
- vpandn xmm7,xmm12,xmm14
- vpand xmm6,xmm12,xmm13
-
- vmovdqa XMMWORD PTR[(224-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpunpckldq xmm0,xmm0,xmm9
- vpsrld xmm9,xmm11,27
- prefetcht0 [63+r9]
- vpxor xmm6,xmm6,xmm7
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- prefetcht0 [63+r10]
- vpaddd xmm10,xmm10,xmm6
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- prefetcht0 [63+r11]
- vpshufb xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vmovdqa xmm2,XMMWORD PTR[((16-128))+rax]
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((32-128))+rax]
-
- vpaddd xmm14,xmm14,xmm15
- vpslld xmm8,xmm10,5
- vpandn xmm7,xmm11,xmm13
-
- vpand xmm6,xmm11,xmm12
-
- vmovdqa XMMWORD PTR[(240-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpxor xmm1,xmm1,XMMWORD PTR[((128-128))+rax]
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm7
- vpxor xmm1,xmm1,xmm3
-
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm14,xmm14,xmm6
-
- vpsrld xmm5,xmm1,31
- vpaddd xmm1,xmm1,xmm1
-
- vpsrld xmm11,xmm11,2
-
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((48-128))+rax]
-
- vpaddd xmm13,xmm13,xmm15
- vpslld xmm8,xmm14,5
- vpandn xmm7,xmm10,xmm12
-
- vpand xmm6,xmm10,xmm11
-
- vmovdqa XMMWORD PTR[(0-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpxor xmm2,xmm2,XMMWORD PTR[((144-128))+rax]
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm7
- vpxor xmm2,xmm2,xmm4
-
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm13,xmm13,xmm6
-
- vpsrld xmm5,xmm2,31
- vpaddd xmm2,xmm2,xmm2
-
- vpsrld xmm10,xmm10,2
-
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((64-128))+rax]
-
- vpaddd xmm12,xmm12,xmm15
- vpslld xmm8,xmm13,5
- vpandn xmm7,xmm14,xmm11
-
- vpand xmm6,xmm14,xmm10
-
- vmovdqa XMMWORD PTR[(16-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpxor xmm3,xmm3,XMMWORD PTR[((160-128))+rax]
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm7
- vpxor xmm3,xmm3,xmm0
-
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm12,xmm12,xmm6
-
- vpsrld xmm5,xmm3,31
- vpaddd xmm3,xmm3,xmm3
-
- vpsrld xmm14,xmm14,2
-
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((80-128))+rax]
-
- vpaddd xmm11,xmm11,xmm15
- vpslld xmm8,xmm12,5
- vpandn xmm7,xmm13,xmm10
-
- vpand xmm6,xmm13,xmm14
-
- vmovdqa XMMWORD PTR[(32-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm4,XMMWORD PTR[((176-128))+rax]
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm7
- vpxor xmm4,xmm4,xmm1
-
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm11,xmm11,xmm6
-
- vpsrld xmm5,xmm4,31
- vpaddd xmm4,xmm4,xmm4
-
- vpsrld xmm13,xmm13,2
-
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((96-128))+rax]
-
- vpaddd xmm10,xmm10,xmm15
- vpslld xmm8,xmm11,5
- vpandn xmm7,xmm12,xmm14
-
- vpand xmm6,xmm12,xmm13
-
- vmovdqa XMMWORD PTR[(48-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpxor xmm0,xmm0,XMMWORD PTR[((192-128))+rax]
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm6,xmm7
- vpxor xmm0,xmm0,xmm2
-
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm10,xmm10,xmm6
-
- vpsrld xmm5,xmm0,31
- vpaddd xmm0,xmm0,xmm0
-
- vpsrld xmm12,xmm12,2
-
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vmovdqa xmm15,XMMWORD PTR[rbp]
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((112-128))+rax]
-
- vpslld xmm8,xmm10,5
- vpaddd xmm14,xmm14,xmm15
- vpxor xmm6,xmm13,xmm11
- vmovdqa XMMWORD PTR[(64-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpxor xmm1,xmm1,XMMWORD PTR[((208-128))+rax]
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm14,xmm14,xmm6
- vpsrld xmm5,xmm1,31
- vpaddd xmm1,xmm1,xmm1
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((128-128))+rax]
-
- vpslld xmm8,xmm14,5
- vpaddd xmm13,xmm13,xmm15
- vpxor xmm6,xmm12,xmm10
- vmovdqa XMMWORD PTR[(80-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpxor xmm2,xmm2,XMMWORD PTR[((224-128))+rax]
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm13,xmm13,xmm6
- vpsrld xmm5,xmm2,31
- vpaddd xmm2,xmm2,xmm2
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((144-128))+rax]
-
- vpslld xmm8,xmm13,5
- vpaddd xmm12,xmm12,xmm15
- vpxor xmm6,xmm11,xmm14
- vmovdqa XMMWORD PTR[(96-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpxor xmm3,xmm3,XMMWORD PTR[((240-128))+rax]
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm12,xmm12,xmm6
- vpsrld xmm5,xmm3,31
- vpaddd xmm3,xmm3,xmm3
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((160-128))+rax]
-
- vpslld xmm8,xmm12,5
- vpaddd xmm11,xmm11,xmm15
- vpxor xmm6,xmm10,xmm13
- vmovdqa XMMWORD PTR[(112-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm4,XMMWORD PTR[((0-128))+rax]
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm11,xmm11,xmm6
- vpsrld xmm5,xmm4,31
- vpaddd xmm4,xmm4,xmm4
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((176-128))+rax]
-
- vpslld xmm8,xmm11,5
- vpaddd xmm10,xmm10,xmm15
- vpxor xmm6,xmm14,xmm12
- vmovdqa XMMWORD PTR[(128-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpxor xmm0,xmm0,XMMWORD PTR[((16-128))+rax]
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm6,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm10,xmm10,xmm6
- vpsrld xmm5,xmm0,31
- vpaddd xmm0,xmm0,xmm0
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((192-128))+rax]
-
- vpslld xmm8,xmm10,5
- vpaddd xmm14,xmm14,xmm15
- vpxor xmm6,xmm13,xmm11
- vmovdqa XMMWORD PTR[(144-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpxor xmm1,xmm1,XMMWORD PTR[((32-128))+rax]
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm14,xmm14,xmm6
- vpsrld xmm5,xmm1,31
- vpaddd xmm1,xmm1,xmm1
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((208-128))+rax]
-
- vpslld xmm8,xmm14,5
- vpaddd xmm13,xmm13,xmm15
- vpxor xmm6,xmm12,xmm10
- vmovdqa XMMWORD PTR[(160-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpxor xmm2,xmm2,XMMWORD PTR[((48-128))+rax]
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm13,xmm13,xmm6
- vpsrld xmm5,xmm2,31
- vpaddd xmm2,xmm2,xmm2
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((224-128))+rax]
-
- vpslld xmm8,xmm13,5
- vpaddd xmm12,xmm12,xmm15
- vpxor xmm6,xmm11,xmm14
- vmovdqa XMMWORD PTR[(176-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpxor xmm3,xmm3,XMMWORD PTR[((64-128))+rax]
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm12,xmm12,xmm6
- vpsrld xmm5,xmm3,31
- vpaddd xmm3,xmm3,xmm3
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((240-128))+rax]
-
- vpslld xmm8,xmm12,5
- vpaddd xmm11,xmm11,xmm15
- vpxor xmm6,xmm10,xmm13
- vmovdqa XMMWORD PTR[(192-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm4,XMMWORD PTR[((80-128))+rax]
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm11,xmm11,xmm6
- vpsrld xmm5,xmm4,31
- vpaddd xmm4,xmm4,xmm4
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((0-128))+rax]
-
- vpslld xmm8,xmm11,5
- vpaddd xmm10,xmm10,xmm15
- vpxor xmm6,xmm14,xmm12
- vmovdqa XMMWORD PTR[(208-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpxor xmm0,xmm0,XMMWORD PTR[((96-128))+rax]
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm6,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm10,xmm10,xmm6
- vpsrld xmm5,xmm0,31
- vpaddd xmm0,xmm0,xmm0
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((16-128))+rax]
-
- vpslld xmm8,xmm10,5
- vpaddd xmm14,xmm14,xmm15
- vpxor xmm6,xmm13,xmm11
- vmovdqa XMMWORD PTR[(224-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpxor xmm1,xmm1,XMMWORD PTR[((112-128))+rax]
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm14,xmm14,xmm6
- vpsrld xmm5,xmm1,31
- vpaddd xmm1,xmm1,xmm1
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((32-128))+rax]
-
- vpslld xmm8,xmm14,5
- vpaddd xmm13,xmm13,xmm15
- vpxor xmm6,xmm12,xmm10
- vmovdqa XMMWORD PTR[(240-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpxor xmm2,xmm2,XMMWORD PTR[((128-128))+rax]
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm13,xmm13,xmm6
- vpsrld xmm5,xmm2,31
- vpaddd xmm2,xmm2,xmm2
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((48-128))+rax]
-
- vpslld xmm8,xmm13,5
- vpaddd xmm12,xmm12,xmm15
- vpxor xmm6,xmm11,xmm14
- vmovdqa XMMWORD PTR[(0-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpxor xmm3,xmm3,XMMWORD PTR[((144-128))+rax]
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm12,xmm12,xmm6
- vpsrld xmm5,xmm3,31
- vpaddd xmm3,xmm3,xmm3
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((64-128))+rax]
-
- vpslld xmm8,xmm12,5
- vpaddd xmm11,xmm11,xmm15
- vpxor xmm6,xmm10,xmm13
- vmovdqa XMMWORD PTR[(16-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm4,XMMWORD PTR[((160-128))+rax]
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm11,xmm11,xmm6
- vpsrld xmm5,xmm4,31
- vpaddd xmm4,xmm4,xmm4
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((80-128))+rax]
-
- vpslld xmm8,xmm11,5
- vpaddd xmm10,xmm10,xmm15
- vpxor xmm6,xmm14,xmm12
- vmovdqa XMMWORD PTR[(32-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpxor xmm0,xmm0,XMMWORD PTR[((176-128))+rax]
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm6,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm10,xmm10,xmm6
- vpsrld xmm5,xmm0,31
- vpaddd xmm0,xmm0,xmm0
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((96-128))+rax]
-
- vpslld xmm8,xmm10,5
- vpaddd xmm14,xmm14,xmm15
- vpxor xmm6,xmm13,xmm11
- vmovdqa XMMWORD PTR[(48-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpxor xmm1,xmm1,XMMWORD PTR[((192-128))+rax]
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm14,xmm14,xmm6
- vpsrld xmm5,xmm1,31
- vpaddd xmm1,xmm1,xmm1
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((112-128))+rax]
-
- vpslld xmm8,xmm14,5
- vpaddd xmm13,xmm13,xmm15
- vpxor xmm6,xmm12,xmm10
- vmovdqa XMMWORD PTR[(64-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpxor xmm2,xmm2,XMMWORD PTR[((208-128))+rax]
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm13,xmm13,xmm6
- vpsrld xmm5,xmm2,31
- vpaddd xmm2,xmm2,xmm2
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((128-128))+rax]
-
- vpslld xmm8,xmm13,5
- vpaddd xmm12,xmm12,xmm15
- vpxor xmm6,xmm11,xmm14
- vmovdqa XMMWORD PTR[(80-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpxor xmm3,xmm3,XMMWORD PTR[((224-128))+rax]
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm12,xmm12,xmm6
- vpsrld xmm5,xmm3,31
- vpaddd xmm3,xmm3,xmm3
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((144-128))+rax]
-
- vpslld xmm8,xmm12,5
- vpaddd xmm11,xmm11,xmm15
- vpxor xmm6,xmm10,xmm13
- vmovdqa XMMWORD PTR[(96-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm4,XMMWORD PTR[((240-128))+rax]
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm11,xmm11,xmm6
- vpsrld xmm5,xmm4,31
- vpaddd xmm4,xmm4,xmm4
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((160-128))+rax]
-
- vpslld xmm8,xmm11,5
- vpaddd xmm10,xmm10,xmm15
- vpxor xmm6,xmm14,xmm12
- vmovdqa XMMWORD PTR[(112-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpxor xmm0,xmm0,XMMWORD PTR[((0-128))+rax]
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm6,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm10,xmm10,xmm6
- vpsrld xmm5,xmm0,31
- vpaddd xmm0,xmm0,xmm0
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vmovdqa xmm15,XMMWORD PTR[32+rbp]
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((176-128))+rax]
-
- vpaddd xmm14,xmm14,xmm15
- vpslld xmm8,xmm10,5
- vpand xmm7,xmm13,xmm12
- vpxor xmm1,xmm1,XMMWORD PTR[((16-128))+rax]
-
- vpaddd xmm14,xmm14,xmm7
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm13,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vmovdqu XMMWORD PTR[(128-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm1,31
- vpand xmm6,xmm6,xmm11
- vpaddd xmm1,xmm1,xmm1
-
- vpslld xmm7,xmm11,30
- vpaddd xmm14,xmm14,xmm6
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((192-128))+rax]
-
- vpaddd xmm13,xmm13,xmm15
- vpslld xmm8,xmm14,5
- vpand xmm7,xmm12,xmm11
- vpxor xmm2,xmm2,XMMWORD PTR[((32-128))+rax]
-
- vpaddd xmm13,xmm13,xmm7
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm12,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vmovdqu XMMWORD PTR[(144-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm2,31
- vpand xmm6,xmm6,xmm10
- vpaddd xmm2,xmm2,xmm2
-
- vpslld xmm7,xmm10,30
- vpaddd xmm13,xmm13,xmm6
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((208-128))+rax]
-
- vpaddd xmm12,xmm12,xmm15
- vpslld xmm8,xmm13,5
- vpand xmm7,xmm11,xmm10
- vpxor xmm3,xmm3,XMMWORD PTR[((48-128))+rax]
-
- vpaddd xmm12,xmm12,xmm7
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm11,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vmovdqu XMMWORD PTR[(160-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm3,31
- vpand xmm6,xmm6,xmm14
- vpaddd xmm3,xmm3,xmm3
-
- vpslld xmm7,xmm14,30
- vpaddd xmm12,xmm12,xmm6
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((224-128))+rax]
-
- vpaddd xmm11,xmm11,xmm15
- vpslld xmm8,xmm12,5
- vpand xmm7,xmm10,xmm14
- vpxor xmm4,xmm4,XMMWORD PTR[((64-128))+rax]
-
- vpaddd xmm11,xmm11,xmm7
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm10,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vmovdqu XMMWORD PTR[(176-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm4,31
- vpand xmm6,xmm6,xmm13
- vpaddd xmm4,xmm4,xmm4
-
- vpslld xmm7,xmm13,30
- vpaddd xmm11,xmm11,xmm6
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((240-128))+rax]
-
- vpaddd xmm10,xmm10,xmm15
- vpslld xmm8,xmm11,5
- vpand xmm7,xmm14,xmm13
- vpxor xmm0,xmm0,XMMWORD PTR[((80-128))+rax]
-
- vpaddd xmm10,xmm10,xmm7
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm14,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vmovdqu XMMWORD PTR[(192-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm0,31
- vpand xmm6,xmm6,xmm12
- vpaddd xmm0,xmm0,xmm0
-
- vpslld xmm7,xmm12,30
- vpaddd xmm10,xmm10,xmm6
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((0-128))+rax]
-
- vpaddd xmm14,xmm14,xmm15
- vpslld xmm8,xmm10,5
- vpand xmm7,xmm13,xmm12
- vpxor xmm1,xmm1,XMMWORD PTR[((96-128))+rax]
-
- vpaddd xmm14,xmm14,xmm7
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm13,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vmovdqu XMMWORD PTR[(208-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm1,31
- vpand xmm6,xmm6,xmm11
- vpaddd xmm1,xmm1,xmm1
-
- vpslld xmm7,xmm11,30
- vpaddd xmm14,xmm14,xmm6
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((16-128))+rax]
-
- vpaddd xmm13,xmm13,xmm15
- vpslld xmm8,xmm14,5
- vpand xmm7,xmm12,xmm11
- vpxor xmm2,xmm2,XMMWORD PTR[((112-128))+rax]
-
- vpaddd xmm13,xmm13,xmm7
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm12,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vmovdqu XMMWORD PTR[(224-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm2,31
- vpand xmm6,xmm6,xmm10
- vpaddd xmm2,xmm2,xmm2
-
- vpslld xmm7,xmm10,30
- vpaddd xmm13,xmm13,xmm6
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((32-128))+rax]
-
- vpaddd xmm12,xmm12,xmm15
- vpslld xmm8,xmm13,5
- vpand xmm7,xmm11,xmm10
- vpxor xmm3,xmm3,XMMWORD PTR[((128-128))+rax]
-
- vpaddd xmm12,xmm12,xmm7
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm11,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vmovdqu XMMWORD PTR[(240-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm3,31
- vpand xmm6,xmm6,xmm14
- vpaddd xmm3,xmm3,xmm3
-
- vpslld xmm7,xmm14,30
- vpaddd xmm12,xmm12,xmm6
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((48-128))+rax]
-
- vpaddd xmm11,xmm11,xmm15
- vpslld xmm8,xmm12,5
- vpand xmm7,xmm10,xmm14
- vpxor xmm4,xmm4,XMMWORD PTR[((144-128))+rax]
-
- vpaddd xmm11,xmm11,xmm7
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm10,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vmovdqu XMMWORD PTR[(0-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm4,31
- vpand xmm6,xmm6,xmm13
- vpaddd xmm4,xmm4,xmm4
-
- vpslld xmm7,xmm13,30
- vpaddd xmm11,xmm11,xmm6
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((64-128))+rax]
-
- vpaddd xmm10,xmm10,xmm15
- vpslld xmm8,xmm11,5
- vpand xmm7,xmm14,xmm13
- vpxor xmm0,xmm0,XMMWORD PTR[((160-128))+rax]
-
- vpaddd xmm10,xmm10,xmm7
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm14,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vmovdqu XMMWORD PTR[(16-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm0,31
- vpand xmm6,xmm6,xmm12
- vpaddd xmm0,xmm0,xmm0
-
- vpslld xmm7,xmm12,30
- vpaddd xmm10,xmm10,xmm6
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((80-128))+rax]
-
- vpaddd xmm14,xmm14,xmm15
- vpslld xmm8,xmm10,5
- vpand xmm7,xmm13,xmm12
- vpxor xmm1,xmm1,XMMWORD PTR[((176-128))+rax]
-
- vpaddd xmm14,xmm14,xmm7
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm13,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vmovdqu XMMWORD PTR[(32-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm1,31
- vpand xmm6,xmm6,xmm11
- vpaddd xmm1,xmm1,xmm1
-
- vpslld xmm7,xmm11,30
- vpaddd xmm14,xmm14,xmm6
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((96-128))+rax]
-
- vpaddd xmm13,xmm13,xmm15
- vpslld xmm8,xmm14,5
- vpand xmm7,xmm12,xmm11
- vpxor xmm2,xmm2,XMMWORD PTR[((192-128))+rax]
-
- vpaddd xmm13,xmm13,xmm7
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm12,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vmovdqu XMMWORD PTR[(48-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm2,31
- vpand xmm6,xmm6,xmm10
- vpaddd xmm2,xmm2,xmm2
-
- vpslld xmm7,xmm10,30
- vpaddd xmm13,xmm13,xmm6
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((112-128))+rax]
-
- vpaddd xmm12,xmm12,xmm15
- vpslld xmm8,xmm13,5
- vpand xmm7,xmm11,xmm10
- vpxor xmm3,xmm3,XMMWORD PTR[((208-128))+rax]
-
- vpaddd xmm12,xmm12,xmm7
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm11,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vmovdqu XMMWORD PTR[(64-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm3,31
- vpand xmm6,xmm6,xmm14
- vpaddd xmm3,xmm3,xmm3
-
- vpslld xmm7,xmm14,30
- vpaddd xmm12,xmm12,xmm6
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((128-128))+rax]
-
- vpaddd xmm11,xmm11,xmm15
- vpslld xmm8,xmm12,5
- vpand xmm7,xmm10,xmm14
- vpxor xmm4,xmm4,XMMWORD PTR[((224-128))+rax]
-
- vpaddd xmm11,xmm11,xmm7
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm10,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vmovdqu XMMWORD PTR[(80-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm4,31
- vpand xmm6,xmm6,xmm13
- vpaddd xmm4,xmm4,xmm4
-
- vpslld xmm7,xmm13,30
- vpaddd xmm11,xmm11,xmm6
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((144-128))+rax]
-
- vpaddd xmm10,xmm10,xmm15
- vpslld xmm8,xmm11,5
- vpand xmm7,xmm14,xmm13
- vpxor xmm0,xmm0,XMMWORD PTR[((240-128))+rax]
-
- vpaddd xmm10,xmm10,xmm7
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm14,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vmovdqu XMMWORD PTR[(96-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm0,31
- vpand xmm6,xmm6,xmm12
- vpaddd xmm0,xmm0,xmm0
-
- vpslld xmm7,xmm12,30
- vpaddd xmm10,xmm10,xmm6
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((160-128))+rax]
-
- vpaddd xmm14,xmm14,xmm15
- vpslld xmm8,xmm10,5
- vpand xmm7,xmm13,xmm12
- vpxor xmm1,xmm1,XMMWORD PTR[((0-128))+rax]
-
- vpaddd xmm14,xmm14,xmm7
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm13,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vmovdqu XMMWORD PTR[(112-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm1,31
- vpand xmm6,xmm6,xmm11
- vpaddd xmm1,xmm1,xmm1
-
- vpslld xmm7,xmm11,30
- vpaddd xmm14,xmm14,xmm6
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((176-128))+rax]
-
- vpaddd xmm13,xmm13,xmm15
- vpslld xmm8,xmm14,5
- vpand xmm7,xmm12,xmm11
- vpxor xmm2,xmm2,XMMWORD PTR[((16-128))+rax]
-
- vpaddd xmm13,xmm13,xmm7
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm12,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vmovdqu XMMWORD PTR[(128-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm2,31
- vpand xmm6,xmm6,xmm10
- vpaddd xmm2,xmm2,xmm2
-
- vpslld xmm7,xmm10,30
- vpaddd xmm13,xmm13,xmm6
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((192-128))+rax]
-
- vpaddd xmm12,xmm12,xmm15
- vpslld xmm8,xmm13,5
- vpand xmm7,xmm11,xmm10
- vpxor xmm3,xmm3,XMMWORD PTR[((32-128))+rax]
-
- vpaddd xmm12,xmm12,xmm7
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm11,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vmovdqu XMMWORD PTR[(144-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm3,31
- vpand xmm6,xmm6,xmm14
- vpaddd xmm3,xmm3,xmm3
-
- vpslld xmm7,xmm14,30
- vpaddd xmm12,xmm12,xmm6
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((208-128))+rax]
-
- vpaddd xmm11,xmm11,xmm15
- vpslld xmm8,xmm12,5
- vpand xmm7,xmm10,xmm14
- vpxor xmm4,xmm4,XMMWORD PTR[((48-128))+rax]
-
- vpaddd xmm11,xmm11,xmm7
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm10,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vmovdqu XMMWORD PTR[(160-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm4,31
- vpand xmm6,xmm6,xmm13
- vpaddd xmm4,xmm4,xmm4
-
- vpslld xmm7,xmm13,30
- vpaddd xmm11,xmm11,xmm6
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((224-128))+rax]
-
- vpaddd xmm10,xmm10,xmm15
- vpslld xmm8,xmm11,5
- vpand xmm7,xmm14,xmm13
- vpxor xmm0,xmm0,XMMWORD PTR[((64-128))+rax]
-
- vpaddd xmm10,xmm10,xmm7
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm14,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vmovdqu XMMWORD PTR[(176-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpor xmm8,xmm8,xmm9
- vpsrld xmm5,xmm0,31
- vpand xmm6,xmm6,xmm12
- vpaddd xmm0,xmm0,xmm0
-
- vpslld xmm7,xmm12,30
- vpaddd xmm10,xmm10,xmm6
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vmovdqa xmm15,XMMWORD PTR[64+rbp]
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((240-128))+rax]
-
- vpslld xmm8,xmm10,5
- vpaddd xmm14,xmm14,xmm15
- vpxor xmm6,xmm13,xmm11
- vmovdqa XMMWORD PTR[(192-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpxor xmm1,xmm1,XMMWORD PTR[((80-128))+rax]
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm14,xmm14,xmm6
- vpsrld xmm5,xmm1,31
- vpaddd xmm1,xmm1,xmm1
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((0-128))+rax]
-
- vpslld xmm8,xmm14,5
- vpaddd xmm13,xmm13,xmm15
- vpxor xmm6,xmm12,xmm10
- vmovdqa XMMWORD PTR[(208-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpxor xmm2,xmm2,XMMWORD PTR[((96-128))+rax]
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm13,xmm13,xmm6
- vpsrld xmm5,xmm2,31
- vpaddd xmm2,xmm2,xmm2
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((16-128))+rax]
-
- vpslld xmm8,xmm13,5
- vpaddd xmm12,xmm12,xmm15
- vpxor xmm6,xmm11,xmm14
- vmovdqa XMMWORD PTR[(224-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpxor xmm3,xmm3,XMMWORD PTR[((112-128))+rax]
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm12,xmm12,xmm6
- vpsrld xmm5,xmm3,31
- vpaddd xmm3,xmm3,xmm3
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((32-128))+rax]
-
- vpslld xmm8,xmm12,5
- vpaddd xmm11,xmm11,xmm15
- vpxor xmm6,xmm10,xmm13
- vmovdqa XMMWORD PTR[(240-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm4,XMMWORD PTR[((128-128))+rax]
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm11,xmm11,xmm6
- vpsrld xmm5,xmm4,31
- vpaddd xmm4,xmm4,xmm4
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((48-128))+rax]
-
- vpslld xmm8,xmm11,5
- vpaddd xmm10,xmm10,xmm15
- vpxor xmm6,xmm14,xmm12
- vmovdqa XMMWORD PTR[(0-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpxor xmm0,xmm0,XMMWORD PTR[((144-128))+rax]
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm6,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm10,xmm10,xmm6
- vpsrld xmm5,xmm0,31
- vpaddd xmm0,xmm0,xmm0
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((64-128))+rax]
-
- vpslld xmm8,xmm10,5
- vpaddd xmm14,xmm14,xmm15
- vpxor xmm6,xmm13,xmm11
- vmovdqa XMMWORD PTR[(16-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpxor xmm1,xmm1,XMMWORD PTR[((160-128))+rax]
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm14,xmm14,xmm6
- vpsrld xmm5,xmm1,31
- vpaddd xmm1,xmm1,xmm1
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((80-128))+rax]
-
- vpslld xmm8,xmm14,5
- vpaddd xmm13,xmm13,xmm15
- vpxor xmm6,xmm12,xmm10
- vmovdqa XMMWORD PTR[(32-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpxor xmm2,xmm2,XMMWORD PTR[((176-128))+rax]
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm13,xmm13,xmm6
- vpsrld xmm5,xmm2,31
- vpaddd xmm2,xmm2,xmm2
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((96-128))+rax]
-
- vpslld xmm8,xmm13,5
- vpaddd xmm12,xmm12,xmm15
- vpxor xmm6,xmm11,xmm14
- vmovdqa XMMWORD PTR[(48-128)+rax],xmm2
- vpaddd xmm12,xmm12,xmm2
- vpxor xmm3,xmm3,XMMWORD PTR[((192-128))+rax]
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm12,xmm12,xmm6
- vpsrld xmm5,xmm3,31
- vpaddd xmm3,xmm3,xmm3
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((112-128))+rax]
-
- vpslld xmm8,xmm12,5
- vpaddd xmm11,xmm11,xmm15
- vpxor xmm6,xmm10,xmm13
- vmovdqa XMMWORD PTR[(64-128)+rax],xmm3
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm4,XMMWORD PTR[((208-128))+rax]
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm11,xmm11,xmm6
- vpsrld xmm5,xmm4,31
- vpaddd xmm4,xmm4,xmm4
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((128-128))+rax]
-
- vpslld xmm8,xmm11,5
- vpaddd xmm10,xmm10,xmm15
- vpxor xmm6,xmm14,xmm12
- vmovdqa XMMWORD PTR[(80-128)+rax],xmm4
- vpaddd xmm10,xmm10,xmm4
- vpxor xmm0,xmm0,XMMWORD PTR[((224-128))+rax]
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm6,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm10,xmm10,xmm6
- vpsrld xmm5,xmm0,31
- vpaddd xmm0,xmm0,xmm0
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((144-128))+rax]
-
- vpslld xmm8,xmm10,5
- vpaddd xmm14,xmm14,xmm15
- vpxor xmm6,xmm13,xmm11
- vmovdqa XMMWORD PTR[(96-128)+rax],xmm0
- vpaddd xmm14,xmm14,xmm0
- vpxor xmm1,xmm1,XMMWORD PTR[((240-128))+rax]
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm14,xmm14,xmm6
- vpsrld xmm5,xmm1,31
- vpaddd xmm1,xmm1,xmm1
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((160-128))+rax]
-
- vpslld xmm8,xmm14,5
- vpaddd xmm13,xmm13,xmm15
- vpxor xmm6,xmm12,xmm10
- vmovdqa XMMWORD PTR[(112-128)+rax],xmm1
- vpaddd xmm13,xmm13,xmm1
- vpxor xmm2,xmm2,XMMWORD PTR[((0-128))+rax]
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm13,xmm13,xmm6
- vpsrld xmm5,xmm2,31
- vpaddd xmm2,xmm2,xmm2
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((176-128))+rax]
-
- vpslld xmm8,xmm13,5
- vpaddd xmm12,xmm12,xmm15
- vpxor xmm6,xmm11,xmm14
- vpaddd xmm12,xmm12,xmm2
- vpxor xmm3,xmm3,XMMWORD PTR[((16-128))+rax]
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm12,xmm12,xmm6
- vpsrld xmm5,xmm3,31
- vpaddd xmm3,xmm3,xmm3
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((192-128))+rax]
-
- vpslld xmm8,xmm12,5
- vpaddd xmm11,xmm11,xmm15
- vpxor xmm6,xmm10,xmm13
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm4,XMMWORD PTR[((32-128))+rax]
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm11,xmm11,xmm6
- vpsrld xmm5,xmm4,31
- vpaddd xmm4,xmm4,xmm4
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpxor xmm0,xmm0,xmm2
- vmovdqa xmm2,XMMWORD PTR[((208-128))+rax]
-
- vpslld xmm8,xmm11,5
- vpaddd xmm10,xmm10,xmm15
- vpxor xmm6,xmm14,xmm12
- vpaddd xmm10,xmm10,xmm4
- vpxor xmm0,xmm0,XMMWORD PTR[((48-128))+rax]
- vpsrld xmm9,xmm11,27
- vpxor xmm6,xmm6,xmm13
- vpxor xmm0,xmm0,xmm2
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm10,xmm10,xmm6
- vpsrld xmm5,xmm0,31
- vpaddd xmm0,xmm0,xmm0
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm0,xmm0,xmm5
- vpor xmm12,xmm12,xmm7
- vpxor xmm1,xmm1,xmm3
- vmovdqa xmm3,XMMWORD PTR[((224-128))+rax]
-
- vpslld xmm8,xmm10,5
- vpaddd xmm14,xmm14,xmm15
- vpxor xmm6,xmm13,xmm11
- vpaddd xmm14,xmm14,xmm0
- vpxor xmm1,xmm1,XMMWORD PTR[((64-128))+rax]
- vpsrld xmm9,xmm10,27
- vpxor xmm6,xmm6,xmm12
- vpxor xmm1,xmm1,xmm3
-
- vpslld xmm7,xmm11,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm14,xmm14,xmm6
- vpsrld xmm5,xmm1,31
- vpaddd xmm1,xmm1,xmm1
-
- vpsrld xmm11,xmm11,2
- vpaddd xmm14,xmm14,xmm8
- vpor xmm1,xmm1,xmm5
- vpor xmm11,xmm11,xmm7
- vpxor xmm2,xmm2,xmm4
- vmovdqa xmm4,XMMWORD PTR[((240-128))+rax]
-
- vpslld xmm8,xmm14,5
- vpaddd xmm13,xmm13,xmm15
- vpxor xmm6,xmm12,xmm10
- vpaddd xmm13,xmm13,xmm1
- vpxor xmm2,xmm2,XMMWORD PTR[((80-128))+rax]
- vpsrld xmm9,xmm14,27
- vpxor xmm6,xmm6,xmm11
- vpxor xmm2,xmm2,xmm4
-
- vpslld xmm7,xmm10,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm13,xmm13,xmm6
- vpsrld xmm5,xmm2,31
- vpaddd xmm2,xmm2,xmm2
-
- vpsrld xmm10,xmm10,2
- vpaddd xmm13,xmm13,xmm8
- vpor xmm2,xmm2,xmm5
- vpor xmm10,xmm10,xmm7
- vpxor xmm3,xmm3,xmm0
- vmovdqa xmm0,XMMWORD PTR[((0-128))+rax]
-
- vpslld xmm8,xmm13,5
- vpaddd xmm12,xmm12,xmm15
- vpxor xmm6,xmm11,xmm14
- vpaddd xmm12,xmm12,xmm2
- vpxor xmm3,xmm3,XMMWORD PTR[((96-128))+rax]
- vpsrld xmm9,xmm13,27
- vpxor xmm6,xmm6,xmm10
- vpxor xmm3,xmm3,xmm0
-
- vpslld xmm7,xmm14,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm12,xmm12,xmm6
- vpsrld xmm5,xmm3,31
- vpaddd xmm3,xmm3,xmm3
-
- vpsrld xmm14,xmm14,2
- vpaddd xmm12,xmm12,xmm8
- vpor xmm3,xmm3,xmm5
- vpor xmm14,xmm14,xmm7
- vpxor xmm4,xmm4,xmm1
- vmovdqa xmm1,XMMWORD PTR[((16-128))+rax]
-
- vpslld xmm8,xmm12,5
- vpaddd xmm11,xmm11,xmm15
- vpxor xmm6,xmm10,xmm13
- vpaddd xmm11,xmm11,xmm3
- vpxor xmm4,xmm4,XMMWORD PTR[((112-128))+rax]
- vpsrld xmm9,xmm12,27
- vpxor xmm6,xmm6,xmm14
- vpxor xmm4,xmm4,xmm1
-
- vpslld xmm7,xmm13,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm11,xmm11,xmm6
- vpsrld xmm5,xmm4,31
- vpaddd xmm4,xmm4,xmm4
-
- vpsrld xmm13,xmm13,2
- vpaddd xmm11,xmm11,xmm8
- vpor xmm4,xmm4,xmm5
- vpor xmm13,xmm13,xmm7
- vpslld xmm8,xmm11,5
- vpaddd xmm10,xmm10,xmm15
- vpxor xmm6,xmm14,xmm12
-
- vpsrld xmm9,xmm11,27
- vpaddd xmm10,xmm10,xmm4
- vpxor xmm6,xmm6,xmm13
-
- vpslld xmm7,xmm12,30
- vpor xmm8,xmm8,xmm9
- vpaddd xmm10,xmm10,xmm6
-
- vpsrld xmm12,xmm12,2
- vpaddd xmm10,xmm10,xmm8
- vpor xmm12,xmm12,xmm7
- mov ecx,1
- cmp ecx,DWORD PTR[rbx]
- cmovge r8,rbp
- cmp ecx,DWORD PTR[4+rbx]
- cmovge r9,rbp
- cmp ecx,DWORD PTR[8+rbx]
- cmovge r10,rbp
- cmp ecx,DWORD PTR[12+rbx]
- cmovge r11,rbp
- vmovdqu xmm6,XMMWORD PTR[rbx]
- vpxor xmm8,xmm8,xmm8
- vmovdqa xmm7,xmm6
- vpcmpgtd xmm7,xmm7,xmm8
- vpaddd xmm6,xmm6,xmm7
-
- vpand xmm10,xmm10,xmm7
- vpand xmm11,xmm11,xmm7
- vpaddd xmm10,xmm10,XMMWORD PTR[rdi]
- vpand xmm12,xmm12,xmm7
- vpaddd xmm11,xmm11,XMMWORD PTR[32+rdi]
- vpand xmm13,xmm13,xmm7
- vpaddd xmm12,xmm12,XMMWORD PTR[64+rdi]
- vpand xmm14,xmm14,xmm7
- vpaddd xmm13,xmm13,XMMWORD PTR[96+rdi]
- vpaddd xmm14,xmm14,XMMWORD PTR[128+rdi]
- vmovdqu XMMWORD PTR[rdi],xmm10
- vmovdqu XMMWORD PTR[32+rdi],xmm11
- vmovdqu XMMWORD PTR[64+rdi],xmm12
- vmovdqu XMMWORD PTR[96+rdi],xmm13
- vmovdqu XMMWORD PTR[128+rdi],xmm14
-
- vmovdqu XMMWORD PTR[rbx],xmm6
- vmovdqu xmm5,XMMWORD PTR[96+rbp]
- dec edx
- jnz $L$oop_avx
-
- mov edx,DWORD PTR[280+rsp]
- lea rdi,QWORD PTR[16+rdi]
- lea rsi,QWORD PTR[64+rsi]
- dec edx
- jnz $L$oop_grande_avx
-
-$L$done_avx::
- mov rax,QWORD PTR[272+rsp]
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-184))+rax]
- movaps xmm7,XMMWORD PTR[((-168))+rax]
- movaps xmm8,XMMWORD PTR[((-152))+rax]
- movaps xmm9,XMMWORD PTR[((-136))+rax]
- movaps xmm10,XMMWORD PTR[((-120))+rax]
- movaps xmm11,XMMWORD PTR[((-104))+rax]
- movaps xmm12,XMMWORD PTR[((-88))+rax]
- movaps xmm13,XMMWORD PTR[((-72))+rax]
- movaps xmm14,XMMWORD PTR[((-56))+rax]
- movaps xmm15,XMMWORD PTR[((-40))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$epilogue_avx::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha1_multi_block_avx::
-sha1_multi_block_avx ENDP
-
-ALIGN 32
-sha1_multi_block_avx2 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha1_multi_block_avx2::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-_avx2_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[64+rsp],xmm10
- movaps XMMWORD PTR[80+rsp],xmm11
- movaps XMMWORD PTR[(-120)+rax],xmm12
- movaps XMMWORD PTR[(-104)+rax],xmm13
- movaps XMMWORD PTR[(-88)+rax],xmm14
- movaps XMMWORD PTR[(-72)+rax],xmm15
- sub rsp,576
- and rsp,-256
- mov QWORD PTR[544+rsp],rax
-
-$L$body_avx2::
- lea rbp,QWORD PTR[K_XX_XX]
- shr edx,1
-
- vzeroupper
-$L$oop_grande_avx2::
- mov DWORD PTR[552+rsp],edx
- xor edx,edx
- lea rbx,QWORD PTR[512+rsp]
- mov r12,QWORD PTR[rsi]
- mov ecx,DWORD PTR[8+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[rbx],ecx
- cmovle r12,rbp
- mov r13,QWORD PTR[16+rsi]
- mov ecx,DWORD PTR[24+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[4+rbx],ecx
- cmovle r13,rbp
- mov r14,QWORD PTR[32+rsi]
- mov ecx,DWORD PTR[40+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[8+rbx],ecx
- cmovle r14,rbp
- mov r15,QWORD PTR[48+rsi]
- mov ecx,DWORD PTR[56+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[12+rbx],ecx
- cmovle r15,rbp
- mov r8,QWORD PTR[64+rsi]
- mov ecx,DWORD PTR[72+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[16+rbx],ecx
- cmovle r8,rbp
- mov r9,QWORD PTR[80+rsi]
- mov ecx,DWORD PTR[88+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[20+rbx],ecx
- cmovle r9,rbp
- mov r10,QWORD PTR[96+rsi]
- mov ecx,DWORD PTR[104+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[24+rbx],ecx
- cmovle r10,rbp
- mov r11,QWORD PTR[112+rsi]
- mov ecx,DWORD PTR[120+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[28+rbx],ecx
- cmovle r11,rbp
- vmovdqu ymm0,YMMWORD PTR[rdi]
- lea rax,QWORD PTR[128+rsp]
- vmovdqu ymm1,YMMWORD PTR[32+rdi]
- lea rbx,QWORD PTR[((256+128))+rsp]
- vmovdqu ymm2,YMMWORD PTR[64+rdi]
- vmovdqu ymm3,YMMWORD PTR[96+rdi]
- vmovdqu ymm4,YMMWORD PTR[128+rdi]
- vmovdqu ymm9,YMMWORD PTR[96+rbp]
- jmp $L$oop_avx2
-
-ALIGN 32
-$L$oop_avx2::
- vmovdqa ymm15,YMMWORD PTR[((-32))+rbp]
- vmovd xmm10,DWORD PTR[r12]
- lea r12,QWORD PTR[64+r12]
- vmovd xmm12,DWORD PTR[r8]
- lea r8,QWORD PTR[64+r8]
- vmovd xmm7,DWORD PTR[r13]
- lea r13,QWORD PTR[64+r13]
- vmovd xmm6,DWORD PTR[r9]
- lea r9,QWORD PTR[64+r9]
- vpinsrd xmm10,xmm10,DWORD PTR[r14],1
- lea r14,QWORD PTR[64+r14]
- vpinsrd xmm12,xmm12,DWORD PTR[r10],1
- lea r10,QWORD PTR[64+r10]
- vpinsrd xmm7,xmm7,DWORD PTR[r15],1
- lea r15,QWORD PTR[64+r15]
- vpunpckldq ymm10,ymm10,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[r11],1
- lea r11,QWORD PTR[64+r11]
- vpunpckldq ymm12,ymm12,ymm6
- vmovd xmm11,DWORD PTR[((-60))+r12]
- vinserti128 ymm10,ymm10,xmm12,1
- vmovd xmm8,DWORD PTR[((-60))+r8]
- vpshufb ymm10,ymm10,ymm9
- vmovd xmm7,DWORD PTR[((-60))+r13]
- vmovd xmm6,DWORD PTR[((-60))+r9]
- vpinsrd xmm11,xmm11,DWORD PTR[((-60))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-60))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-60))+r15],1
- vpunpckldq ymm11,ymm11,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-60))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm4,ymm4,ymm15
- vpslld ymm7,ymm0,5
- vpandn ymm6,ymm1,ymm3
- vpand ymm5,ymm1,ymm2
-
- vmovdqa YMMWORD PTR[(0-128)+rax],ymm10
- vpaddd ymm4,ymm4,ymm10
- vinserti128 ymm11,ymm11,xmm8,1
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm12,DWORD PTR[((-56))+r12]
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-56))+r8]
- vpaddd ymm4,ymm4,ymm5
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpshufb ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vmovd xmm7,DWORD PTR[((-56))+r13]
- vmovd xmm6,DWORD PTR[((-56))+r9]
- vpinsrd xmm12,xmm12,DWORD PTR[((-56))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-56))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-56))+r15],1
- vpunpckldq ymm12,ymm12,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-56))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm3,ymm3,ymm15
- vpslld ymm7,ymm4,5
- vpandn ymm6,ymm0,ymm2
- vpand ymm5,ymm0,ymm1
-
- vmovdqa YMMWORD PTR[(32-128)+rax],ymm11
- vpaddd ymm3,ymm3,ymm11
- vinserti128 ymm12,ymm12,xmm8,1
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm13,DWORD PTR[((-52))+r12]
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-52))+r8]
- vpaddd ymm3,ymm3,ymm5
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpshufb ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vmovd xmm7,DWORD PTR[((-52))+r13]
- vmovd xmm6,DWORD PTR[((-52))+r9]
- vpinsrd xmm13,xmm13,DWORD PTR[((-52))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-52))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-52))+r15],1
- vpunpckldq ymm13,ymm13,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-52))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm2,ymm2,ymm15
- vpslld ymm7,ymm3,5
- vpandn ymm6,ymm4,ymm1
- vpand ymm5,ymm4,ymm0
-
- vmovdqa YMMWORD PTR[(64-128)+rax],ymm12
- vpaddd ymm2,ymm2,ymm12
- vinserti128 ymm13,ymm13,xmm8,1
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm14,DWORD PTR[((-48))+r12]
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-48))+r8]
- vpaddd ymm2,ymm2,ymm5
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpshufb ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vmovd xmm7,DWORD PTR[((-48))+r13]
- vmovd xmm6,DWORD PTR[((-48))+r9]
- vpinsrd xmm14,xmm14,DWORD PTR[((-48))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-48))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-48))+r15],1
- vpunpckldq ymm14,ymm14,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-48))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm1,ymm1,ymm15
- vpslld ymm7,ymm2,5
- vpandn ymm6,ymm3,ymm0
- vpand ymm5,ymm3,ymm4
-
- vmovdqa YMMWORD PTR[(96-128)+rax],ymm13
- vpaddd ymm1,ymm1,ymm13
- vinserti128 ymm14,ymm14,xmm8,1
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm10,DWORD PTR[((-44))+r12]
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-44))+r8]
- vpaddd ymm1,ymm1,ymm5
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpshufb ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vmovd xmm7,DWORD PTR[((-44))+r13]
- vmovd xmm6,DWORD PTR[((-44))+r9]
- vpinsrd xmm10,xmm10,DWORD PTR[((-44))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-44))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-44))+r15],1
- vpunpckldq ymm10,ymm10,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-44))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm0,ymm0,ymm15
- vpslld ymm7,ymm1,5
- vpandn ymm6,ymm2,ymm4
- vpand ymm5,ymm2,ymm3
-
- vmovdqa YMMWORD PTR[(128-128)+rax],ymm14
- vpaddd ymm0,ymm0,ymm14
- vinserti128 ymm10,ymm10,xmm8,1
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm11,DWORD PTR[((-40))+r12]
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-40))+r8]
- vpaddd ymm0,ymm0,ymm5
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpshufb ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vmovd xmm7,DWORD PTR[((-40))+r13]
- vmovd xmm6,DWORD PTR[((-40))+r9]
- vpinsrd xmm11,xmm11,DWORD PTR[((-40))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-40))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-40))+r15],1
- vpunpckldq ymm11,ymm11,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-40))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm4,ymm4,ymm15
- vpslld ymm7,ymm0,5
- vpandn ymm6,ymm1,ymm3
- vpand ymm5,ymm1,ymm2
-
- vmovdqa YMMWORD PTR[(160-128)+rax],ymm10
- vpaddd ymm4,ymm4,ymm10
- vinserti128 ymm11,ymm11,xmm8,1
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm12,DWORD PTR[((-36))+r12]
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-36))+r8]
- vpaddd ymm4,ymm4,ymm5
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpshufb ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vmovd xmm7,DWORD PTR[((-36))+r13]
- vmovd xmm6,DWORD PTR[((-36))+r9]
- vpinsrd xmm12,xmm12,DWORD PTR[((-36))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-36))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-36))+r15],1
- vpunpckldq ymm12,ymm12,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-36))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm3,ymm3,ymm15
- vpslld ymm7,ymm4,5
- vpandn ymm6,ymm0,ymm2
- vpand ymm5,ymm0,ymm1
-
- vmovdqa YMMWORD PTR[(192-128)+rax],ymm11
- vpaddd ymm3,ymm3,ymm11
- vinserti128 ymm12,ymm12,xmm8,1
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm13,DWORD PTR[((-32))+r12]
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-32))+r8]
- vpaddd ymm3,ymm3,ymm5
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpshufb ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vmovd xmm7,DWORD PTR[((-32))+r13]
- vmovd xmm6,DWORD PTR[((-32))+r9]
- vpinsrd xmm13,xmm13,DWORD PTR[((-32))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-32))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-32))+r15],1
- vpunpckldq ymm13,ymm13,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-32))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm2,ymm2,ymm15
- vpslld ymm7,ymm3,5
- vpandn ymm6,ymm4,ymm1
- vpand ymm5,ymm4,ymm0
-
- vmovdqa YMMWORD PTR[(224-128)+rax],ymm12
- vpaddd ymm2,ymm2,ymm12
- vinserti128 ymm13,ymm13,xmm8,1
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm14,DWORD PTR[((-28))+r12]
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-28))+r8]
- vpaddd ymm2,ymm2,ymm5
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpshufb ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vmovd xmm7,DWORD PTR[((-28))+r13]
- vmovd xmm6,DWORD PTR[((-28))+r9]
- vpinsrd xmm14,xmm14,DWORD PTR[((-28))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-28))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-28))+r15],1
- vpunpckldq ymm14,ymm14,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-28))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm1,ymm1,ymm15
- vpslld ymm7,ymm2,5
- vpandn ymm6,ymm3,ymm0
- vpand ymm5,ymm3,ymm4
-
- vmovdqa YMMWORD PTR[(256-256-128)+rbx],ymm13
- vpaddd ymm1,ymm1,ymm13
- vinserti128 ymm14,ymm14,xmm8,1
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm10,DWORD PTR[((-24))+r12]
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-24))+r8]
- vpaddd ymm1,ymm1,ymm5
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpshufb ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vmovd xmm7,DWORD PTR[((-24))+r13]
- vmovd xmm6,DWORD PTR[((-24))+r9]
- vpinsrd xmm10,xmm10,DWORD PTR[((-24))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-24))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-24))+r15],1
- vpunpckldq ymm10,ymm10,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-24))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm0,ymm0,ymm15
- vpslld ymm7,ymm1,5
- vpandn ymm6,ymm2,ymm4
- vpand ymm5,ymm2,ymm3
-
- vmovdqa YMMWORD PTR[(288-256-128)+rbx],ymm14
- vpaddd ymm0,ymm0,ymm14
- vinserti128 ymm10,ymm10,xmm8,1
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm11,DWORD PTR[((-20))+r12]
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-20))+r8]
- vpaddd ymm0,ymm0,ymm5
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpshufb ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vmovd xmm7,DWORD PTR[((-20))+r13]
- vmovd xmm6,DWORD PTR[((-20))+r9]
- vpinsrd xmm11,xmm11,DWORD PTR[((-20))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-20))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-20))+r15],1
- vpunpckldq ymm11,ymm11,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-20))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm4,ymm4,ymm15
- vpslld ymm7,ymm0,5
- vpandn ymm6,ymm1,ymm3
- vpand ymm5,ymm1,ymm2
-
- vmovdqa YMMWORD PTR[(320-256-128)+rbx],ymm10
- vpaddd ymm4,ymm4,ymm10
- vinserti128 ymm11,ymm11,xmm8,1
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm12,DWORD PTR[((-16))+r12]
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-16))+r8]
- vpaddd ymm4,ymm4,ymm5
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpshufb ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vmovd xmm7,DWORD PTR[((-16))+r13]
- vmovd xmm6,DWORD PTR[((-16))+r9]
- vpinsrd xmm12,xmm12,DWORD PTR[((-16))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-16))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-16))+r15],1
- vpunpckldq ymm12,ymm12,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-16))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm3,ymm3,ymm15
- vpslld ymm7,ymm4,5
- vpandn ymm6,ymm0,ymm2
- vpand ymm5,ymm0,ymm1
-
- vmovdqa YMMWORD PTR[(352-256-128)+rbx],ymm11
- vpaddd ymm3,ymm3,ymm11
- vinserti128 ymm12,ymm12,xmm8,1
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm13,DWORD PTR[((-12))+r12]
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-12))+r8]
- vpaddd ymm3,ymm3,ymm5
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpshufb ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vmovd xmm7,DWORD PTR[((-12))+r13]
- vmovd xmm6,DWORD PTR[((-12))+r9]
- vpinsrd xmm13,xmm13,DWORD PTR[((-12))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-12))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-12))+r15],1
- vpunpckldq ymm13,ymm13,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-12))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm2,ymm2,ymm15
- vpslld ymm7,ymm3,5
- vpandn ymm6,ymm4,ymm1
- vpand ymm5,ymm4,ymm0
-
- vmovdqa YMMWORD PTR[(384-256-128)+rbx],ymm12
- vpaddd ymm2,ymm2,ymm12
- vinserti128 ymm13,ymm13,xmm8,1
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm14,DWORD PTR[((-8))+r12]
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-8))+r8]
- vpaddd ymm2,ymm2,ymm5
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpshufb ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vmovd xmm7,DWORD PTR[((-8))+r13]
- vmovd xmm6,DWORD PTR[((-8))+r9]
- vpinsrd xmm14,xmm14,DWORD PTR[((-8))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-8))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-8))+r15],1
- vpunpckldq ymm14,ymm14,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-8))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm1,ymm1,ymm15
- vpslld ymm7,ymm2,5
- vpandn ymm6,ymm3,ymm0
- vpand ymm5,ymm3,ymm4
-
- vmovdqa YMMWORD PTR[(416-256-128)+rbx],ymm13
- vpaddd ymm1,ymm1,ymm13
- vinserti128 ymm14,ymm14,xmm8,1
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm6
- vmovd xmm10,DWORD PTR[((-4))+r12]
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vmovd xmm8,DWORD PTR[((-4))+r8]
- vpaddd ymm1,ymm1,ymm5
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpshufb ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vmovdqa ymm11,YMMWORD PTR[((0-128))+rax]
- vmovd xmm7,DWORD PTR[((-4))+r13]
- vmovd xmm6,DWORD PTR[((-4))+r9]
- vpinsrd xmm10,xmm10,DWORD PTR[((-4))+r14],1
- vpinsrd xmm8,xmm8,DWORD PTR[((-4))+r10],1
- vpinsrd xmm7,xmm7,DWORD PTR[((-4))+r15],1
- vpunpckldq ymm10,ymm10,ymm7
- vpinsrd xmm6,xmm6,DWORD PTR[((-4))+r11],1
- vpunpckldq ymm8,ymm8,ymm6
- vpaddd ymm0,ymm0,ymm15
- prefetcht0 [63+r12]
- vpslld ymm7,ymm1,5
- vpandn ymm6,ymm2,ymm4
- vpand ymm5,ymm2,ymm3
-
- vmovdqa YMMWORD PTR[(448-256-128)+rbx],ymm14
- vpaddd ymm0,ymm0,ymm14
- vinserti128 ymm10,ymm10,xmm8,1
- vpsrld ymm8,ymm1,27
- prefetcht0 [63+r13]
- vpxor ymm5,ymm5,ymm6
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- prefetcht0 [63+r14]
- vpaddd ymm0,ymm0,ymm5
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- prefetcht0 [63+r15]
- vpshufb ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vmovdqa ymm12,YMMWORD PTR[((32-128))+rax]
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((64-128))+rax]
-
- vpaddd ymm4,ymm4,ymm15
- vpslld ymm7,ymm0,5
- vpandn ymm6,ymm1,ymm3
- prefetcht0 [63+r8]
- vpand ymm5,ymm1,ymm2
-
- vmovdqa YMMWORD PTR[(480-256-128)+rbx],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpxor ymm11,ymm11,YMMWORD PTR[((256-256-128))+rbx]
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm6
- vpxor ymm11,ymm11,ymm13
- prefetcht0 [63+r9]
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm4,ymm4,ymm5
- prefetcht0 [63+r10]
- vpsrld ymm9,ymm11,31
- vpaddd ymm11,ymm11,ymm11
-
- vpsrld ymm1,ymm1,2
- prefetcht0 [63+r11]
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((96-128))+rax]
-
- vpaddd ymm3,ymm3,ymm15
- vpslld ymm7,ymm4,5
- vpandn ymm6,ymm0,ymm2
-
- vpand ymm5,ymm0,ymm1
-
- vmovdqa YMMWORD PTR[(0-128)+rax],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpxor ymm12,ymm12,YMMWORD PTR[((288-256-128))+rbx]
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm6
- vpxor ymm12,ymm12,ymm14
-
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm3,ymm3,ymm5
-
- vpsrld ymm9,ymm12,31
- vpaddd ymm12,ymm12,ymm12
-
- vpsrld ymm0,ymm0,2
-
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((128-128))+rax]
-
- vpaddd ymm2,ymm2,ymm15
- vpslld ymm7,ymm3,5
- vpandn ymm6,ymm4,ymm1
-
- vpand ymm5,ymm4,ymm0
-
- vmovdqa YMMWORD PTR[(32-128)+rax],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpxor ymm13,ymm13,YMMWORD PTR[((320-256-128))+rbx]
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm6
- vpxor ymm13,ymm13,ymm10
-
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm2,ymm2,ymm5
-
- vpsrld ymm9,ymm13,31
- vpaddd ymm13,ymm13,ymm13
-
- vpsrld ymm4,ymm4,2
-
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((160-128))+rax]
-
- vpaddd ymm1,ymm1,ymm15
- vpslld ymm7,ymm2,5
- vpandn ymm6,ymm3,ymm0
-
- vpand ymm5,ymm3,ymm4
-
- vmovdqa YMMWORD PTR[(64-128)+rax],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpxor ymm14,ymm14,YMMWORD PTR[((352-256-128))+rbx]
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm6
- vpxor ymm14,ymm14,ymm11
-
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm1,ymm1,ymm5
-
- vpsrld ymm9,ymm14,31
- vpaddd ymm14,ymm14,ymm14
-
- vpsrld ymm3,ymm3,2
-
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((192-128))+rax]
-
- vpaddd ymm0,ymm0,ymm15
- vpslld ymm7,ymm1,5
- vpandn ymm6,ymm2,ymm4
-
- vpand ymm5,ymm2,ymm3
-
- vmovdqa YMMWORD PTR[(96-128)+rax],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpxor ymm10,ymm10,YMMWORD PTR[((384-256-128))+rbx]
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm5,ymm6
- vpxor ymm10,ymm10,ymm12
-
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm0,ymm0,ymm5
-
- vpsrld ymm9,ymm10,31
- vpaddd ymm10,ymm10,ymm10
-
- vpsrld ymm2,ymm2,2
-
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vmovdqa ymm15,YMMWORD PTR[rbp]
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((224-128))+rax]
-
- vpslld ymm7,ymm0,5
- vpaddd ymm4,ymm4,ymm15
- vpxor ymm5,ymm3,ymm1
- vmovdqa YMMWORD PTR[(128-128)+rax],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpxor ymm11,ymm11,YMMWORD PTR[((416-256-128))+rbx]
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm4,ymm4,ymm5
- vpsrld ymm9,ymm11,31
- vpaddd ymm11,ymm11,ymm11
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((256-256-128))+rbx]
-
- vpslld ymm7,ymm4,5
- vpaddd ymm3,ymm3,ymm15
- vpxor ymm5,ymm2,ymm0
- vmovdqa YMMWORD PTR[(160-128)+rax],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpxor ymm12,ymm12,YMMWORD PTR[((448-256-128))+rbx]
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm3,ymm3,ymm5
- vpsrld ymm9,ymm12,31
- vpaddd ymm12,ymm12,ymm12
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((288-256-128))+rbx]
-
- vpslld ymm7,ymm3,5
- vpaddd ymm2,ymm2,ymm15
- vpxor ymm5,ymm1,ymm4
- vmovdqa YMMWORD PTR[(192-128)+rax],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpxor ymm13,ymm13,YMMWORD PTR[((480-256-128))+rbx]
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm2,ymm2,ymm5
- vpsrld ymm9,ymm13,31
- vpaddd ymm13,ymm13,ymm13
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((320-256-128))+rbx]
-
- vpslld ymm7,ymm2,5
- vpaddd ymm1,ymm1,ymm15
- vpxor ymm5,ymm0,ymm3
- vmovdqa YMMWORD PTR[(224-128)+rax],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpxor ymm14,ymm14,YMMWORD PTR[((0-128))+rax]
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm1,ymm1,ymm5
- vpsrld ymm9,ymm14,31
- vpaddd ymm14,ymm14,ymm14
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((352-256-128))+rbx]
-
- vpslld ymm7,ymm1,5
- vpaddd ymm0,ymm0,ymm15
- vpxor ymm5,ymm4,ymm2
- vmovdqa YMMWORD PTR[(256-256-128)+rbx],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpxor ymm10,ymm10,YMMWORD PTR[((32-128))+rax]
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm5,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm0,ymm0,ymm5
- vpsrld ymm9,ymm10,31
- vpaddd ymm10,ymm10,ymm10
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((384-256-128))+rbx]
-
- vpslld ymm7,ymm0,5
- vpaddd ymm4,ymm4,ymm15
- vpxor ymm5,ymm3,ymm1
- vmovdqa YMMWORD PTR[(288-256-128)+rbx],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpxor ymm11,ymm11,YMMWORD PTR[((64-128))+rax]
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm4,ymm4,ymm5
- vpsrld ymm9,ymm11,31
- vpaddd ymm11,ymm11,ymm11
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((416-256-128))+rbx]
-
- vpslld ymm7,ymm4,5
- vpaddd ymm3,ymm3,ymm15
- vpxor ymm5,ymm2,ymm0
- vmovdqa YMMWORD PTR[(320-256-128)+rbx],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpxor ymm12,ymm12,YMMWORD PTR[((96-128))+rax]
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm3,ymm3,ymm5
- vpsrld ymm9,ymm12,31
- vpaddd ymm12,ymm12,ymm12
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((448-256-128))+rbx]
-
- vpslld ymm7,ymm3,5
- vpaddd ymm2,ymm2,ymm15
- vpxor ymm5,ymm1,ymm4
- vmovdqa YMMWORD PTR[(352-256-128)+rbx],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpxor ymm13,ymm13,YMMWORD PTR[((128-128))+rax]
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm2,ymm2,ymm5
- vpsrld ymm9,ymm13,31
- vpaddd ymm13,ymm13,ymm13
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((480-256-128))+rbx]
-
- vpslld ymm7,ymm2,5
- vpaddd ymm1,ymm1,ymm15
- vpxor ymm5,ymm0,ymm3
- vmovdqa YMMWORD PTR[(384-256-128)+rbx],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpxor ymm14,ymm14,YMMWORD PTR[((160-128))+rax]
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm1,ymm1,ymm5
- vpsrld ymm9,ymm14,31
- vpaddd ymm14,ymm14,ymm14
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((0-128))+rax]
-
- vpslld ymm7,ymm1,5
- vpaddd ymm0,ymm0,ymm15
- vpxor ymm5,ymm4,ymm2
- vmovdqa YMMWORD PTR[(416-256-128)+rbx],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpxor ymm10,ymm10,YMMWORD PTR[((192-128))+rax]
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm5,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm0,ymm0,ymm5
- vpsrld ymm9,ymm10,31
- vpaddd ymm10,ymm10,ymm10
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((32-128))+rax]
-
- vpslld ymm7,ymm0,5
- vpaddd ymm4,ymm4,ymm15
- vpxor ymm5,ymm3,ymm1
- vmovdqa YMMWORD PTR[(448-256-128)+rbx],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpxor ymm11,ymm11,YMMWORD PTR[((224-128))+rax]
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm4,ymm4,ymm5
- vpsrld ymm9,ymm11,31
- vpaddd ymm11,ymm11,ymm11
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((64-128))+rax]
-
- vpslld ymm7,ymm4,5
- vpaddd ymm3,ymm3,ymm15
- vpxor ymm5,ymm2,ymm0
- vmovdqa YMMWORD PTR[(480-256-128)+rbx],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpxor ymm12,ymm12,YMMWORD PTR[((256-256-128))+rbx]
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm3,ymm3,ymm5
- vpsrld ymm9,ymm12,31
- vpaddd ymm12,ymm12,ymm12
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((96-128))+rax]
-
- vpslld ymm7,ymm3,5
- vpaddd ymm2,ymm2,ymm15
- vpxor ymm5,ymm1,ymm4
- vmovdqa YMMWORD PTR[(0-128)+rax],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpxor ymm13,ymm13,YMMWORD PTR[((288-256-128))+rbx]
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm2,ymm2,ymm5
- vpsrld ymm9,ymm13,31
- vpaddd ymm13,ymm13,ymm13
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((128-128))+rax]
-
- vpslld ymm7,ymm2,5
- vpaddd ymm1,ymm1,ymm15
- vpxor ymm5,ymm0,ymm3
- vmovdqa YMMWORD PTR[(32-128)+rax],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpxor ymm14,ymm14,YMMWORD PTR[((320-256-128))+rbx]
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm1,ymm1,ymm5
- vpsrld ymm9,ymm14,31
- vpaddd ymm14,ymm14,ymm14
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((160-128))+rax]
-
- vpslld ymm7,ymm1,5
- vpaddd ymm0,ymm0,ymm15
- vpxor ymm5,ymm4,ymm2
- vmovdqa YMMWORD PTR[(64-128)+rax],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpxor ymm10,ymm10,YMMWORD PTR[((352-256-128))+rbx]
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm5,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm0,ymm0,ymm5
- vpsrld ymm9,ymm10,31
- vpaddd ymm10,ymm10,ymm10
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((192-128))+rax]
-
- vpslld ymm7,ymm0,5
- vpaddd ymm4,ymm4,ymm15
- vpxor ymm5,ymm3,ymm1
- vmovdqa YMMWORD PTR[(96-128)+rax],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpxor ymm11,ymm11,YMMWORD PTR[((384-256-128))+rbx]
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm4,ymm4,ymm5
- vpsrld ymm9,ymm11,31
- vpaddd ymm11,ymm11,ymm11
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((224-128))+rax]
-
- vpslld ymm7,ymm4,5
- vpaddd ymm3,ymm3,ymm15
- vpxor ymm5,ymm2,ymm0
- vmovdqa YMMWORD PTR[(128-128)+rax],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpxor ymm12,ymm12,YMMWORD PTR[((416-256-128))+rbx]
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm3,ymm3,ymm5
- vpsrld ymm9,ymm12,31
- vpaddd ymm12,ymm12,ymm12
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((256-256-128))+rbx]
-
- vpslld ymm7,ymm3,5
- vpaddd ymm2,ymm2,ymm15
- vpxor ymm5,ymm1,ymm4
- vmovdqa YMMWORD PTR[(160-128)+rax],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpxor ymm13,ymm13,YMMWORD PTR[((448-256-128))+rbx]
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm2,ymm2,ymm5
- vpsrld ymm9,ymm13,31
- vpaddd ymm13,ymm13,ymm13
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((288-256-128))+rbx]
-
- vpslld ymm7,ymm2,5
- vpaddd ymm1,ymm1,ymm15
- vpxor ymm5,ymm0,ymm3
- vmovdqa YMMWORD PTR[(192-128)+rax],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpxor ymm14,ymm14,YMMWORD PTR[((480-256-128))+rbx]
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm1,ymm1,ymm5
- vpsrld ymm9,ymm14,31
- vpaddd ymm14,ymm14,ymm14
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((320-256-128))+rbx]
-
- vpslld ymm7,ymm1,5
- vpaddd ymm0,ymm0,ymm15
- vpxor ymm5,ymm4,ymm2
- vmovdqa YMMWORD PTR[(224-128)+rax],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpxor ymm10,ymm10,YMMWORD PTR[((0-128))+rax]
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm5,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm0,ymm0,ymm5
- vpsrld ymm9,ymm10,31
- vpaddd ymm10,ymm10,ymm10
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vmovdqa ymm15,YMMWORD PTR[32+rbp]
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((352-256-128))+rbx]
-
- vpaddd ymm4,ymm4,ymm15
- vpslld ymm7,ymm0,5
- vpand ymm6,ymm3,ymm2
- vpxor ymm11,ymm11,YMMWORD PTR[((32-128))+rax]
-
- vpaddd ymm4,ymm4,ymm6
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm3,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vmovdqu YMMWORD PTR[(256-256-128)+rbx],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm11,31
- vpand ymm5,ymm5,ymm1
- vpaddd ymm11,ymm11,ymm11
-
- vpslld ymm6,ymm1,30
- vpaddd ymm4,ymm4,ymm5
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((384-256-128))+rbx]
-
- vpaddd ymm3,ymm3,ymm15
- vpslld ymm7,ymm4,5
- vpand ymm6,ymm2,ymm1
- vpxor ymm12,ymm12,YMMWORD PTR[((64-128))+rax]
-
- vpaddd ymm3,ymm3,ymm6
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm2,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vmovdqu YMMWORD PTR[(288-256-128)+rbx],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm12,31
- vpand ymm5,ymm5,ymm0
- vpaddd ymm12,ymm12,ymm12
-
- vpslld ymm6,ymm0,30
- vpaddd ymm3,ymm3,ymm5
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((416-256-128))+rbx]
-
- vpaddd ymm2,ymm2,ymm15
- vpslld ymm7,ymm3,5
- vpand ymm6,ymm1,ymm0
- vpxor ymm13,ymm13,YMMWORD PTR[((96-128))+rax]
-
- vpaddd ymm2,ymm2,ymm6
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm1,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vmovdqu YMMWORD PTR[(320-256-128)+rbx],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm13,31
- vpand ymm5,ymm5,ymm4
- vpaddd ymm13,ymm13,ymm13
-
- vpslld ymm6,ymm4,30
- vpaddd ymm2,ymm2,ymm5
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((448-256-128))+rbx]
-
- vpaddd ymm1,ymm1,ymm15
- vpslld ymm7,ymm2,5
- vpand ymm6,ymm0,ymm4
- vpxor ymm14,ymm14,YMMWORD PTR[((128-128))+rax]
-
- vpaddd ymm1,ymm1,ymm6
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm0,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vmovdqu YMMWORD PTR[(352-256-128)+rbx],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm14,31
- vpand ymm5,ymm5,ymm3
- vpaddd ymm14,ymm14,ymm14
-
- vpslld ymm6,ymm3,30
- vpaddd ymm1,ymm1,ymm5
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((480-256-128))+rbx]
-
- vpaddd ymm0,ymm0,ymm15
- vpslld ymm7,ymm1,5
- vpand ymm6,ymm4,ymm3
- vpxor ymm10,ymm10,YMMWORD PTR[((160-128))+rax]
-
- vpaddd ymm0,ymm0,ymm6
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm4,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vmovdqu YMMWORD PTR[(384-256-128)+rbx],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm10,31
- vpand ymm5,ymm5,ymm2
- vpaddd ymm10,ymm10,ymm10
-
- vpslld ymm6,ymm2,30
- vpaddd ymm0,ymm0,ymm5
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((0-128))+rax]
-
- vpaddd ymm4,ymm4,ymm15
- vpslld ymm7,ymm0,5
- vpand ymm6,ymm3,ymm2
- vpxor ymm11,ymm11,YMMWORD PTR[((192-128))+rax]
-
- vpaddd ymm4,ymm4,ymm6
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm3,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vmovdqu YMMWORD PTR[(416-256-128)+rbx],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm11,31
- vpand ymm5,ymm5,ymm1
- vpaddd ymm11,ymm11,ymm11
-
- vpslld ymm6,ymm1,30
- vpaddd ymm4,ymm4,ymm5
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((32-128))+rax]
-
- vpaddd ymm3,ymm3,ymm15
- vpslld ymm7,ymm4,5
- vpand ymm6,ymm2,ymm1
- vpxor ymm12,ymm12,YMMWORD PTR[((224-128))+rax]
-
- vpaddd ymm3,ymm3,ymm6
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm2,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vmovdqu YMMWORD PTR[(448-256-128)+rbx],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm12,31
- vpand ymm5,ymm5,ymm0
- vpaddd ymm12,ymm12,ymm12
-
- vpslld ymm6,ymm0,30
- vpaddd ymm3,ymm3,ymm5
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((64-128))+rax]
-
- vpaddd ymm2,ymm2,ymm15
- vpslld ymm7,ymm3,5
- vpand ymm6,ymm1,ymm0
- vpxor ymm13,ymm13,YMMWORD PTR[((256-256-128))+rbx]
-
- vpaddd ymm2,ymm2,ymm6
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm1,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vmovdqu YMMWORD PTR[(480-256-128)+rbx],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm13,31
- vpand ymm5,ymm5,ymm4
- vpaddd ymm13,ymm13,ymm13
-
- vpslld ymm6,ymm4,30
- vpaddd ymm2,ymm2,ymm5
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((96-128))+rax]
-
- vpaddd ymm1,ymm1,ymm15
- vpslld ymm7,ymm2,5
- vpand ymm6,ymm0,ymm4
- vpxor ymm14,ymm14,YMMWORD PTR[((288-256-128))+rbx]
-
- vpaddd ymm1,ymm1,ymm6
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm0,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vmovdqu YMMWORD PTR[(0-128)+rax],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm14,31
- vpand ymm5,ymm5,ymm3
- vpaddd ymm14,ymm14,ymm14
-
- vpslld ymm6,ymm3,30
- vpaddd ymm1,ymm1,ymm5
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((128-128))+rax]
-
- vpaddd ymm0,ymm0,ymm15
- vpslld ymm7,ymm1,5
- vpand ymm6,ymm4,ymm3
- vpxor ymm10,ymm10,YMMWORD PTR[((320-256-128))+rbx]
-
- vpaddd ymm0,ymm0,ymm6
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm4,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vmovdqu YMMWORD PTR[(32-128)+rax],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm10,31
- vpand ymm5,ymm5,ymm2
- vpaddd ymm10,ymm10,ymm10
-
- vpslld ymm6,ymm2,30
- vpaddd ymm0,ymm0,ymm5
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((160-128))+rax]
-
- vpaddd ymm4,ymm4,ymm15
- vpslld ymm7,ymm0,5
- vpand ymm6,ymm3,ymm2
- vpxor ymm11,ymm11,YMMWORD PTR[((352-256-128))+rbx]
-
- vpaddd ymm4,ymm4,ymm6
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm3,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vmovdqu YMMWORD PTR[(64-128)+rax],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm11,31
- vpand ymm5,ymm5,ymm1
- vpaddd ymm11,ymm11,ymm11
-
- vpslld ymm6,ymm1,30
- vpaddd ymm4,ymm4,ymm5
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((192-128))+rax]
-
- vpaddd ymm3,ymm3,ymm15
- vpslld ymm7,ymm4,5
- vpand ymm6,ymm2,ymm1
- vpxor ymm12,ymm12,YMMWORD PTR[((384-256-128))+rbx]
-
- vpaddd ymm3,ymm3,ymm6
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm2,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vmovdqu YMMWORD PTR[(96-128)+rax],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm12,31
- vpand ymm5,ymm5,ymm0
- vpaddd ymm12,ymm12,ymm12
-
- vpslld ymm6,ymm0,30
- vpaddd ymm3,ymm3,ymm5
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((224-128))+rax]
-
- vpaddd ymm2,ymm2,ymm15
- vpslld ymm7,ymm3,5
- vpand ymm6,ymm1,ymm0
- vpxor ymm13,ymm13,YMMWORD PTR[((416-256-128))+rbx]
-
- vpaddd ymm2,ymm2,ymm6
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm1,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vmovdqu YMMWORD PTR[(128-128)+rax],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm13,31
- vpand ymm5,ymm5,ymm4
- vpaddd ymm13,ymm13,ymm13
-
- vpslld ymm6,ymm4,30
- vpaddd ymm2,ymm2,ymm5
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((256-256-128))+rbx]
-
- vpaddd ymm1,ymm1,ymm15
- vpslld ymm7,ymm2,5
- vpand ymm6,ymm0,ymm4
- vpxor ymm14,ymm14,YMMWORD PTR[((448-256-128))+rbx]
-
- vpaddd ymm1,ymm1,ymm6
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm0,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vmovdqu YMMWORD PTR[(160-128)+rax],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm14,31
- vpand ymm5,ymm5,ymm3
- vpaddd ymm14,ymm14,ymm14
-
- vpslld ymm6,ymm3,30
- vpaddd ymm1,ymm1,ymm5
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((288-256-128))+rbx]
-
- vpaddd ymm0,ymm0,ymm15
- vpslld ymm7,ymm1,5
- vpand ymm6,ymm4,ymm3
- vpxor ymm10,ymm10,YMMWORD PTR[((480-256-128))+rbx]
-
- vpaddd ymm0,ymm0,ymm6
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm4,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vmovdqu YMMWORD PTR[(192-128)+rax],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm10,31
- vpand ymm5,ymm5,ymm2
- vpaddd ymm10,ymm10,ymm10
-
- vpslld ymm6,ymm2,30
- vpaddd ymm0,ymm0,ymm5
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((320-256-128))+rbx]
-
- vpaddd ymm4,ymm4,ymm15
- vpslld ymm7,ymm0,5
- vpand ymm6,ymm3,ymm2
- vpxor ymm11,ymm11,YMMWORD PTR[((0-128))+rax]
-
- vpaddd ymm4,ymm4,ymm6
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm3,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vmovdqu YMMWORD PTR[(224-128)+rax],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm11,31
- vpand ymm5,ymm5,ymm1
- vpaddd ymm11,ymm11,ymm11
-
- vpslld ymm6,ymm1,30
- vpaddd ymm4,ymm4,ymm5
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((352-256-128))+rbx]
-
- vpaddd ymm3,ymm3,ymm15
- vpslld ymm7,ymm4,5
- vpand ymm6,ymm2,ymm1
- vpxor ymm12,ymm12,YMMWORD PTR[((32-128))+rax]
-
- vpaddd ymm3,ymm3,ymm6
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm2,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vmovdqu YMMWORD PTR[(256-256-128)+rbx],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm12,31
- vpand ymm5,ymm5,ymm0
- vpaddd ymm12,ymm12,ymm12
-
- vpslld ymm6,ymm0,30
- vpaddd ymm3,ymm3,ymm5
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((384-256-128))+rbx]
-
- vpaddd ymm2,ymm2,ymm15
- vpslld ymm7,ymm3,5
- vpand ymm6,ymm1,ymm0
- vpxor ymm13,ymm13,YMMWORD PTR[((64-128))+rax]
-
- vpaddd ymm2,ymm2,ymm6
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm1,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vmovdqu YMMWORD PTR[(288-256-128)+rbx],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm13,31
- vpand ymm5,ymm5,ymm4
- vpaddd ymm13,ymm13,ymm13
-
- vpslld ymm6,ymm4,30
- vpaddd ymm2,ymm2,ymm5
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((416-256-128))+rbx]
-
- vpaddd ymm1,ymm1,ymm15
- vpslld ymm7,ymm2,5
- vpand ymm6,ymm0,ymm4
- vpxor ymm14,ymm14,YMMWORD PTR[((96-128))+rax]
-
- vpaddd ymm1,ymm1,ymm6
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm0,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vmovdqu YMMWORD PTR[(320-256-128)+rbx],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm14,31
- vpand ymm5,ymm5,ymm3
- vpaddd ymm14,ymm14,ymm14
-
- vpslld ymm6,ymm3,30
- vpaddd ymm1,ymm1,ymm5
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((448-256-128))+rbx]
-
- vpaddd ymm0,ymm0,ymm15
- vpslld ymm7,ymm1,5
- vpand ymm6,ymm4,ymm3
- vpxor ymm10,ymm10,YMMWORD PTR[((128-128))+rax]
-
- vpaddd ymm0,ymm0,ymm6
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm4,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vmovdqu YMMWORD PTR[(352-256-128)+rbx],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpor ymm7,ymm7,ymm8
- vpsrld ymm9,ymm10,31
- vpand ymm5,ymm5,ymm2
- vpaddd ymm10,ymm10,ymm10
-
- vpslld ymm6,ymm2,30
- vpaddd ymm0,ymm0,ymm5
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vmovdqa ymm15,YMMWORD PTR[64+rbp]
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((480-256-128))+rbx]
-
- vpslld ymm7,ymm0,5
- vpaddd ymm4,ymm4,ymm15
- vpxor ymm5,ymm3,ymm1
- vmovdqa YMMWORD PTR[(384-256-128)+rbx],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpxor ymm11,ymm11,YMMWORD PTR[((160-128))+rax]
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm4,ymm4,ymm5
- vpsrld ymm9,ymm11,31
- vpaddd ymm11,ymm11,ymm11
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((0-128))+rax]
-
- vpslld ymm7,ymm4,5
- vpaddd ymm3,ymm3,ymm15
- vpxor ymm5,ymm2,ymm0
- vmovdqa YMMWORD PTR[(416-256-128)+rbx],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpxor ymm12,ymm12,YMMWORD PTR[((192-128))+rax]
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm3,ymm3,ymm5
- vpsrld ymm9,ymm12,31
- vpaddd ymm12,ymm12,ymm12
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((32-128))+rax]
-
- vpslld ymm7,ymm3,5
- vpaddd ymm2,ymm2,ymm15
- vpxor ymm5,ymm1,ymm4
- vmovdqa YMMWORD PTR[(448-256-128)+rbx],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpxor ymm13,ymm13,YMMWORD PTR[((224-128))+rax]
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm2,ymm2,ymm5
- vpsrld ymm9,ymm13,31
- vpaddd ymm13,ymm13,ymm13
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((64-128))+rax]
-
- vpslld ymm7,ymm2,5
- vpaddd ymm1,ymm1,ymm15
- vpxor ymm5,ymm0,ymm3
- vmovdqa YMMWORD PTR[(480-256-128)+rbx],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpxor ymm14,ymm14,YMMWORD PTR[((256-256-128))+rbx]
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm1,ymm1,ymm5
- vpsrld ymm9,ymm14,31
- vpaddd ymm14,ymm14,ymm14
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((96-128))+rax]
-
- vpslld ymm7,ymm1,5
- vpaddd ymm0,ymm0,ymm15
- vpxor ymm5,ymm4,ymm2
- vmovdqa YMMWORD PTR[(0-128)+rax],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpxor ymm10,ymm10,YMMWORD PTR[((288-256-128))+rbx]
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm5,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm0,ymm0,ymm5
- vpsrld ymm9,ymm10,31
- vpaddd ymm10,ymm10,ymm10
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((128-128))+rax]
-
- vpslld ymm7,ymm0,5
- vpaddd ymm4,ymm4,ymm15
- vpxor ymm5,ymm3,ymm1
- vmovdqa YMMWORD PTR[(32-128)+rax],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpxor ymm11,ymm11,YMMWORD PTR[((320-256-128))+rbx]
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm4,ymm4,ymm5
- vpsrld ymm9,ymm11,31
- vpaddd ymm11,ymm11,ymm11
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((160-128))+rax]
-
- vpslld ymm7,ymm4,5
- vpaddd ymm3,ymm3,ymm15
- vpxor ymm5,ymm2,ymm0
- vmovdqa YMMWORD PTR[(64-128)+rax],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpxor ymm12,ymm12,YMMWORD PTR[((352-256-128))+rbx]
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm3,ymm3,ymm5
- vpsrld ymm9,ymm12,31
- vpaddd ymm12,ymm12,ymm12
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((192-128))+rax]
-
- vpslld ymm7,ymm3,5
- vpaddd ymm2,ymm2,ymm15
- vpxor ymm5,ymm1,ymm4
- vmovdqa YMMWORD PTR[(96-128)+rax],ymm12
- vpaddd ymm2,ymm2,ymm12
- vpxor ymm13,ymm13,YMMWORD PTR[((384-256-128))+rbx]
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm2,ymm2,ymm5
- vpsrld ymm9,ymm13,31
- vpaddd ymm13,ymm13,ymm13
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((224-128))+rax]
-
- vpslld ymm7,ymm2,5
- vpaddd ymm1,ymm1,ymm15
- vpxor ymm5,ymm0,ymm3
- vmovdqa YMMWORD PTR[(128-128)+rax],ymm13
- vpaddd ymm1,ymm1,ymm13
- vpxor ymm14,ymm14,YMMWORD PTR[((416-256-128))+rbx]
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm1,ymm1,ymm5
- vpsrld ymm9,ymm14,31
- vpaddd ymm14,ymm14,ymm14
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((256-256-128))+rbx]
-
- vpslld ymm7,ymm1,5
- vpaddd ymm0,ymm0,ymm15
- vpxor ymm5,ymm4,ymm2
- vmovdqa YMMWORD PTR[(160-128)+rax],ymm14
- vpaddd ymm0,ymm0,ymm14
- vpxor ymm10,ymm10,YMMWORD PTR[((448-256-128))+rbx]
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm5,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm0,ymm0,ymm5
- vpsrld ymm9,ymm10,31
- vpaddd ymm10,ymm10,ymm10
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((288-256-128))+rbx]
-
- vpslld ymm7,ymm0,5
- vpaddd ymm4,ymm4,ymm15
- vpxor ymm5,ymm3,ymm1
- vmovdqa YMMWORD PTR[(192-128)+rax],ymm10
- vpaddd ymm4,ymm4,ymm10
- vpxor ymm11,ymm11,YMMWORD PTR[((480-256-128))+rbx]
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm4,ymm4,ymm5
- vpsrld ymm9,ymm11,31
- vpaddd ymm11,ymm11,ymm11
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((320-256-128))+rbx]
-
- vpslld ymm7,ymm4,5
- vpaddd ymm3,ymm3,ymm15
- vpxor ymm5,ymm2,ymm0
- vmovdqa YMMWORD PTR[(224-128)+rax],ymm11
- vpaddd ymm3,ymm3,ymm11
- vpxor ymm12,ymm12,YMMWORD PTR[((0-128))+rax]
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm3,ymm3,ymm5
- vpsrld ymm9,ymm12,31
- vpaddd ymm12,ymm12,ymm12
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((352-256-128))+rbx]
-
- vpslld ymm7,ymm3,5
- vpaddd ymm2,ymm2,ymm15
- vpxor ymm5,ymm1,ymm4
- vpaddd ymm2,ymm2,ymm12
- vpxor ymm13,ymm13,YMMWORD PTR[((32-128))+rax]
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm2,ymm2,ymm5
- vpsrld ymm9,ymm13,31
- vpaddd ymm13,ymm13,ymm13
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((384-256-128))+rbx]
-
- vpslld ymm7,ymm2,5
- vpaddd ymm1,ymm1,ymm15
- vpxor ymm5,ymm0,ymm3
- vpaddd ymm1,ymm1,ymm13
- vpxor ymm14,ymm14,YMMWORD PTR[((64-128))+rax]
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm1,ymm1,ymm5
- vpsrld ymm9,ymm14,31
- vpaddd ymm14,ymm14,ymm14
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpxor ymm10,ymm10,ymm12
- vmovdqa ymm12,YMMWORD PTR[((416-256-128))+rbx]
-
- vpslld ymm7,ymm1,5
- vpaddd ymm0,ymm0,ymm15
- vpxor ymm5,ymm4,ymm2
- vpaddd ymm0,ymm0,ymm14
- vpxor ymm10,ymm10,YMMWORD PTR[((96-128))+rax]
- vpsrld ymm8,ymm1,27
- vpxor ymm5,ymm5,ymm3
- vpxor ymm10,ymm10,ymm12
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm0,ymm0,ymm5
- vpsrld ymm9,ymm10,31
- vpaddd ymm10,ymm10,ymm10
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm10,ymm10,ymm9
- vpor ymm2,ymm2,ymm6
- vpxor ymm11,ymm11,ymm13
- vmovdqa ymm13,YMMWORD PTR[((448-256-128))+rbx]
-
- vpslld ymm7,ymm0,5
- vpaddd ymm4,ymm4,ymm15
- vpxor ymm5,ymm3,ymm1
- vpaddd ymm4,ymm4,ymm10
- vpxor ymm11,ymm11,YMMWORD PTR[((128-128))+rax]
- vpsrld ymm8,ymm0,27
- vpxor ymm5,ymm5,ymm2
- vpxor ymm11,ymm11,ymm13
-
- vpslld ymm6,ymm1,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm4,ymm4,ymm5
- vpsrld ymm9,ymm11,31
- vpaddd ymm11,ymm11,ymm11
-
- vpsrld ymm1,ymm1,2
- vpaddd ymm4,ymm4,ymm7
- vpor ymm11,ymm11,ymm9
- vpor ymm1,ymm1,ymm6
- vpxor ymm12,ymm12,ymm14
- vmovdqa ymm14,YMMWORD PTR[((480-256-128))+rbx]
-
- vpslld ymm7,ymm4,5
- vpaddd ymm3,ymm3,ymm15
- vpxor ymm5,ymm2,ymm0
- vpaddd ymm3,ymm3,ymm11
- vpxor ymm12,ymm12,YMMWORD PTR[((160-128))+rax]
- vpsrld ymm8,ymm4,27
- vpxor ymm5,ymm5,ymm1
- vpxor ymm12,ymm12,ymm14
-
- vpslld ymm6,ymm0,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm3,ymm3,ymm5
- vpsrld ymm9,ymm12,31
- vpaddd ymm12,ymm12,ymm12
-
- vpsrld ymm0,ymm0,2
- vpaddd ymm3,ymm3,ymm7
- vpor ymm12,ymm12,ymm9
- vpor ymm0,ymm0,ymm6
- vpxor ymm13,ymm13,ymm10
- vmovdqa ymm10,YMMWORD PTR[((0-128))+rax]
-
- vpslld ymm7,ymm3,5
- vpaddd ymm2,ymm2,ymm15
- vpxor ymm5,ymm1,ymm4
- vpaddd ymm2,ymm2,ymm12
- vpxor ymm13,ymm13,YMMWORD PTR[((192-128))+rax]
- vpsrld ymm8,ymm3,27
- vpxor ymm5,ymm5,ymm0
- vpxor ymm13,ymm13,ymm10
-
- vpslld ymm6,ymm4,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm2,ymm2,ymm5
- vpsrld ymm9,ymm13,31
- vpaddd ymm13,ymm13,ymm13
-
- vpsrld ymm4,ymm4,2
- vpaddd ymm2,ymm2,ymm7
- vpor ymm13,ymm13,ymm9
- vpor ymm4,ymm4,ymm6
- vpxor ymm14,ymm14,ymm11
- vmovdqa ymm11,YMMWORD PTR[((32-128))+rax]
-
- vpslld ymm7,ymm2,5
- vpaddd ymm1,ymm1,ymm15
- vpxor ymm5,ymm0,ymm3
- vpaddd ymm1,ymm1,ymm13
- vpxor ymm14,ymm14,YMMWORD PTR[((224-128))+rax]
- vpsrld ymm8,ymm2,27
- vpxor ymm5,ymm5,ymm4
- vpxor ymm14,ymm14,ymm11
-
- vpslld ymm6,ymm3,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm1,ymm1,ymm5
- vpsrld ymm9,ymm14,31
- vpaddd ymm14,ymm14,ymm14
-
- vpsrld ymm3,ymm3,2
- vpaddd ymm1,ymm1,ymm7
- vpor ymm14,ymm14,ymm9
- vpor ymm3,ymm3,ymm6
- vpslld ymm7,ymm1,5
- vpaddd ymm0,ymm0,ymm15
- vpxor ymm5,ymm4,ymm2
-
- vpsrld ymm8,ymm1,27
- vpaddd ymm0,ymm0,ymm14
- vpxor ymm5,ymm5,ymm3
-
- vpslld ymm6,ymm2,30
- vpor ymm7,ymm7,ymm8
- vpaddd ymm0,ymm0,ymm5
-
- vpsrld ymm2,ymm2,2
- vpaddd ymm0,ymm0,ymm7
- vpor ymm2,ymm2,ymm6
- mov ecx,1
- lea rbx,QWORD PTR[512+rsp]
- cmp ecx,DWORD PTR[rbx]
- cmovge r12,rbp
- cmp ecx,DWORD PTR[4+rbx]
- cmovge r13,rbp
- cmp ecx,DWORD PTR[8+rbx]
- cmovge r14,rbp
- cmp ecx,DWORD PTR[12+rbx]
- cmovge r15,rbp
- cmp ecx,DWORD PTR[16+rbx]
- cmovge r8,rbp
- cmp ecx,DWORD PTR[20+rbx]
- cmovge r9,rbp
- cmp ecx,DWORD PTR[24+rbx]
- cmovge r10,rbp
- cmp ecx,DWORD PTR[28+rbx]
- cmovge r11,rbp
- vmovdqu ymm5,YMMWORD PTR[rbx]
- vpxor ymm7,ymm7,ymm7
- vmovdqa ymm6,ymm5
- vpcmpgtd ymm6,ymm6,ymm7
- vpaddd ymm5,ymm5,ymm6
-
- vpand ymm0,ymm0,ymm6
- vpand ymm1,ymm1,ymm6
- vpaddd ymm0,ymm0,YMMWORD PTR[rdi]
- vpand ymm2,ymm2,ymm6
- vpaddd ymm1,ymm1,YMMWORD PTR[32+rdi]
- vpand ymm3,ymm3,ymm6
- vpaddd ymm2,ymm2,YMMWORD PTR[64+rdi]
- vpand ymm4,ymm4,ymm6
- vpaddd ymm3,ymm3,YMMWORD PTR[96+rdi]
- vpaddd ymm4,ymm4,YMMWORD PTR[128+rdi]
- vmovdqu YMMWORD PTR[rdi],ymm0
- vmovdqu YMMWORD PTR[32+rdi],ymm1
- vmovdqu YMMWORD PTR[64+rdi],ymm2
- vmovdqu YMMWORD PTR[96+rdi],ymm3
- vmovdqu YMMWORD PTR[128+rdi],ymm4
-
- vmovdqu YMMWORD PTR[rbx],ymm5
- lea rbx,QWORD PTR[((256+128))+rsp]
- vmovdqu ymm9,YMMWORD PTR[96+rbp]
- dec edx
- jnz $L$oop_avx2
-
-
-
-
-
-
-
-$L$done_avx2::
- mov rax,QWORD PTR[544+rsp]
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-216))+rax]
- movaps xmm7,XMMWORD PTR[((-200))+rax]
- movaps xmm8,XMMWORD PTR[((-184))+rax]
- movaps xmm9,XMMWORD PTR[((-168))+rax]
- movaps xmm10,XMMWORD PTR[((-152))+rax]
- movaps xmm11,XMMWORD PTR[((-136))+rax]
- movaps xmm12,XMMWORD PTR[((-120))+rax]
- movaps xmm13,XMMWORD PTR[((-104))+rax]
- movaps xmm14,XMMWORD PTR[((-88))+rax]
- movaps xmm15,XMMWORD PTR[((-72))+rax]
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$epilogue_avx2::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha1_multi_block_avx2::
-sha1_multi_block_avx2 ENDP
-
-ALIGN 256
- DD 05a827999h,05a827999h,05a827999h,05a827999h
- DD 05a827999h,05a827999h,05a827999h,05a827999h
-K_XX_XX::
- DD 06ed9eba1h,06ed9eba1h,06ed9eba1h,06ed9eba1h
- DD 06ed9eba1h,06ed9eba1h,06ed9eba1h,06ed9eba1h
- DD 08f1bbcdch,08f1bbcdch,08f1bbcdch,08f1bbcdch
- DD 08f1bbcdch,08f1bbcdch,08f1bbcdch,08f1bbcdch
- DD 0ca62c1d6h,0ca62c1d6h,0ca62c1d6h,0ca62c1d6h
- DD 0ca62c1d6h,0ca62c1d6h,0ca62c1d6h,0ca62c1d6h
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
-DB 0fh,0eh,0dh,0ch,0bh,0ah,09h,08h,07h,06h,05h,04h,03h,02h,01h,00h
-DB 83,72,65,49,32,109,117,108,116,105,45,98,108,111,99,107
-DB 32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120
-DB 56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77
-DB 83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110
-DB 115,115,108,46,111,114,103,62,0
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
-
- mov rax,QWORD PTR[272+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
-
- lea rsi,QWORD PTR[((-24-160))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-ALIGN 16
-avx2_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
-
- mov rax,QWORD PTR[544+r8]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
- lea rsi,QWORD PTR[((-56-160))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
- jmp $L$in_prologue
-avx2_handler ENDP
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_sha1_multi_block
- DD imagerel $L$SEH_end_sha1_multi_block
- DD imagerel $L$SEH_info_sha1_multi_block
- DD imagerel $L$SEH_begin_sha1_multi_block_shaext
- DD imagerel $L$SEH_end_sha1_multi_block_shaext
- DD imagerel $L$SEH_info_sha1_multi_block_shaext
- DD imagerel $L$SEH_begin_sha1_multi_block_avx
- DD imagerel $L$SEH_end_sha1_multi_block_avx
- DD imagerel $L$SEH_info_sha1_multi_block_avx
- DD imagerel $L$SEH_begin_sha1_multi_block_avx2
- DD imagerel $L$SEH_end_sha1_multi_block_avx2
- DD imagerel $L$SEH_info_sha1_multi_block_avx2
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_sha1_multi_block::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$body,imagerel $L$epilogue
-$L$SEH_info_sha1_multi_block_shaext::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$body_shaext,imagerel $L$epilogue_shaext
-$L$SEH_info_sha1_multi_block_avx::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$body_avx,imagerel $L$epilogue_avx
-$L$SEH_info_sha1_multi_block_avx2::
-DB 9,0,0,0
- DD imagerel avx2_handler
- DD imagerel $L$body_avx2,imagerel $L$epilogue_avx2
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC sha1_multi_block
+
+ALIGN 32
+sha1_multi_block PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha1_multi_block::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ mov rcx,QWORD PTR[((OPENSSL_ia32cap_P+4))]
+ bt rcx,61
+ jc _shaext_shortcut
+ test ecx,268435456
+ jnz _avx_shortcut
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[(-120)+rax],xmm10
+ movaps XMMWORD PTR[(-104)+rax],xmm11
+ movaps XMMWORD PTR[(-88)+rax],xmm12
+ movaps XMMWORD PTR[(-72)+rax],xmm13
+ movaps XMMWORD PTR[(-56)+rax],xmm14
+ movaps XMMWORD PTR[(-40)+rax],xmm15
+ sub rsp,288
+ and rsp,-256
+ mov QWORD PTR[272+rsp],rax
+
+$L$body::
+ lea rbp,QWORD PTR[K_XX_XX]
+ lea rbx,QWORD PTR[256+rsp]
+
+$L$oop_grande::
+ mov DWORD PTR[280+rsp],edx
+ xor edx,edx
+ mov r8,QWORD PTR[rsi]
+ mov ecx,DWORD PTR[8+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[rbx],ecx
+ cmovle r8,rbp
+ mov r9,QWORD PTR[16+rsi]
+ mov ecx,DWORD PTR[24+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[4+rbx],ecx
+ cmovle r9,rbp
+ mov r10,QWORD PTR[32+rsi]
+ mov ecx,DWORD PTR[40+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[8+rbx],ecx
+ cmovle r10,rbp
+ mov r11,QWORD PTR[48+rsi]
+ mov ecx,DWORD PTR[56+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[12+rbx],ecx
+ cmovle r11,rbp
+ test edx,edx
+ jz $L$done
+
+ movdqu xmm10,XMMWORD PTR[rdi]
+ lea rax,QWORD PTR[128+rsp]
+ movdqu xmm11,XMMWORD PTR[32+rdi]
+ movdqu xmm12,XMMWORD PTR[64+rdi]
+ movdqu xmm13,XMMWORD PTR[96+rdi]
+ movdqu xmm14,XMMWORD PTR[128+rdi]
+ movdqa xmm5,XMMWORD PTR[96+rbp]
+ movdqa xmm15,XMMWORD PTR[((-32))+rbp]
+ jmp $L$oop
+
+ALIGN 32
+$L$oop::
+ movd xmm0,DWORD PTR[r8]
+ lea r8,QWORD PTR[64+r8]
+ movd xmm2,DWORD PTR[r9]
+ lea r9,QWORD PTR[64+r9]
+ movd xmm3,DWORD PTR[r10]
+ lea r10,QWORD PTR[64+r10]
+ movd xmm4,DWORD PTR[r11]
+ lea r11,QWORD PTR[64+r11]
+ punpckldq xmm0,xmm3
+ movd xmm1,DWORD PTR[((-60))+r8]
+ punpckldq xmm2,xmm4
+ movd xmm9,DWORD PTR[((-60))+r9]
+ punpckldq xmm0,xmm2
+ movd xmm8,DWORD PTR[((-60))+r10]
+DB 102,15,56,0,197
+ movd xmm7,DWORD PTR[((-60))+r11]
+ punpckldq xmm1,xmm8
+ movdqa xmm8,xmm10
+ paddd xmm14,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm11
+ movdqa xmm6,xmm11
+ pslld xmm8,5
+ pandn xmm7,xmm13
+ pand xmm6,xmm12
+ punpckldq xmm1,xmm9
+ movdqa xmm9,xmm10
+
+ movdqa XMMWORD PTR[(0-128)+rax],xmm0
+ paddd xmm14,xmm0
+ movd xmm2,DWORD PTR[((-56))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm11
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-56))+r9]
+ pslld xmm7,30
+ paddd xmm14,xmm6
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+DB 102,15,56,0,205
+ movd xmm8,DWORD PTR[((-56))+r10]
+ por xmm11,xmm7
+ movd xmm7,DWORD PTR[((-56))+r11]
+ punpckldq xmm2,xmm8
+ movdqa xmm8,xmm14
+ paddd xmm13,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm10
+ movdqa xmm6,xmm10
+ pslld xmm8,5
+ pandn xmm7,xmm12
+ pand xmm6,xmm11
+ punpckldq xmm2,xmm9
+ movdqa xmm9,xmm14
+
+ movdqa XMMWORD PTR[(16-128)+rax],xmm1
+ paddd xmm13,xmm1
+ movd xmm3,DWORD PTR[((-52))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm10
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-52))+r9]
+ pslld xmm7,30
+ paddd xmm13,xmm6
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+DB 102,15,56,0,213
+ movd xmm8,DWORD PTR[((-52))+r10]
+ por xmm10,xmm7
+ movd xmm7,DWORD PTR[((-52))+r11]
+ punpckldq xmm3,xmm8
+ movdqa xmm8,xmm13
+ paddd xmm12,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm14
+ movdqa xmm6,xmm14
+ pslld xmm8,5
+ pandn xmm7,xmm11
+ pand xmm6,xmm10
+ punpckldq xmm3,xmm9
+ movdqa xmm9,xmm13
+
+ movdqa XMMWORD PTR[(32-128)+rax],xmm2
+ paddd xmm12,xmm2
+ movd xmm4,DWORD PTR[((-48))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm14
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-48))+r9]
+ pslld xmm7,30
+ paddd xmm12,xmm6
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+DB 102,15,56,0,221
+ movd xmm8,DWORD PTR[((-48))+r10]
+ por xmm14,xmm7
+ movd xmm7,DWORD PTR[((-48))+r11]
+ punpckldq xmm4,xmm8
+ movdqa xmm8,xmm12
+ paddd xmm11,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm13
+ movdqa xmm6,xmm13
+ pslld xmm8,5
+ pandn xmm7,xmm10
+ pand xmm6,xmm14
+ punpckldq xmm4,xmm9
+ movdqa xmm9,xmm12
+
+ movdqa XMMWORD PTR[(48-128)+rax],xmm3
+ paddd xmm11,xmm3
+ movd xmm0,DWORD PTR[((-44))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm13
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-44))+r9]
+ pslld xmm7,30
+ paddd xmm11,xmm6
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+DB 102,15,56,0,229
+ movd xmm8,DWORD PTR[((-44))+r10]
+ por xmm13,xmm7
+ movd xmm7,DWORD PTR[((-44))+r11]
+ punpckldq xmm0,xmm8
+ movdqa xmm8,xmm11
+ paddd xmm10,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm12
+ movdqa xmm6,xmm12
+ pslld xmm8,5
+ pandn xmm7,xmm14
+ pand xmm6,xmm13
+ punpckldq xmm0,xmm9
+ movdqa xmm9,xmm11
+
+ movdqa XMMWORD PTR[(64-128)+rax],xmm4
+ paddd xmm10,xmm4
+ movd xmm1,DWORD PTR[((-40))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm12
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-40))+r9]
+ pslld xmm7,30
+ paddd xmm10,xmm6
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+DB 102,15,56,0,197
+ movd xmm8,DWORD PTR[((-40))+r10]
+ por xmm12,xmm7
+ movd xmm7,DWORD PTR[((-40))+r11]
+ punpckldq xmm1,xmm8
+ movdqa xmm8,xmm10
+ paddd xmm14,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm11
+ movdqa xmm6,xmm11
+ pslld xmm8,5
+ pandn xmm7,xmm13
+ pand xmm6,xmm12
+ punpckldq xmm1,xmm9
+ movdqa xmm9,xmm10
+
+ movdqa XMMWORD PTR[(80-128)+rax],xmm0
+ paddd xmm14,xmm0
+ movd xmm2,DWORD PTR[((-36))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm11
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-36))+r9]
+ pslld xmm7,30
+ paddd xmm14,xmm6
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+DB 102,15,56,0,205
+ movd xmm8,DWORD PTR[((-36))+r10]
+ por xmm11,xmm7
+ movd xmm7,DWORD PTR[((-36))+r11]
+ punpckldq xmm2,xmm8
+ movdqa xmm8,xmm14
+ paddd xmm13,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm10
+ movdqa xmm6,xmm10
+ pslld xmm8,5
+ pandn xmm7,xmm12
+ pand xmm6,xmm11
+ punpckldq xmm2,xmm9
+ movdqa xmm9,xmm14
+
+ movdqa XMMWORD PTR[(96-128)+rax],xmm1
+ paddd xmm13,xmm1
+ movd xmm3,DWORD PTR[((-32))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm10
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-32))+r9]
+ pslld xmm7,30
+ paddd xmm13,xmm6
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+DB 102,15,56,0,213
+ movd xmm8,DWORD PTR[((-32))+r10]
+ por xmm10,xmm7
+ movd xmm7,DWORD PTR[((-32))+r11]
+ punpckldq xmm3,xmm8
+ movdqa xmm8,xmm13
+ paddd xmm12,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm14
+ movdqa xmm6,xmm14
+ pslld xmm8,5
+ pandn xmm7,xmm11
+ pand xmm6,xmm10
+ punpckldq xmm3,xmm9
+ movdqa xmm9,xmm13
+
+ movdqa XMMWORD PTR[(112-128)+rax],xmm2
+ paddd xmm12,xmm2
+ movd xmm4,DWORD PTR[((-28))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm14
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-28))+r9]
+ pslld xmm7,30
+ paddd xmm12,xmm6
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+DB 102,15,56,0,221
+ movd xmm8,DWORD PTR[((-28))+r10]
+ por xmm14,xmm7
+ movd xmm7,DWORD PTR[((-28))+r11]
+ punpckldq xmm4,xmm8
+ movdqa xmm8,xmm12
+ paddd xmm11,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm13
+ movdqa xmm6,xmm13
+ pslld xmm8,5
+ pandn xmm7,xmm10
+ pand xmm6,xmm14
+ punpckldq xmm4,xmm9
+ movdqa xmm9,xmm12
+
+ movdqa XMMWORD PTR[(128-128)+rax],xmm3
+ paddd xmm11,xmm3
+ movd xmm0,DWORD PTR[((-24))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm13
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-24))+r9]
+ pslld xmm7,30
+ paddd xmm11,xmm6
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+DB 102,15,56,0,229
+ movd xmm8,DWORD PTR[((-24))+r10]
+ por xmm13,xmm7
+ movd xmm7,DWORD PTR[((-24))+r11]
+ punpckldq xmm0,xmm8
+ movdqa xmm8,xmm11
+ paddd xmm10,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm12
+ movdqa xmm6,xmm12
+ pslld xmm8,5
+ pandn xmm7,xmm14
+ pand xmm6,xmm13
+ punpckldq xmm0,xmm9
+ movdqa xmm9,xmm11
+
+ movdqa XMMWORD PTR[(144-128)+rax],xmm4
+ paddd xmm10,xmm4
+ movd xmm1,DWORD PTR[((-20))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm12
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-20))+r9]
+ pslld xmm7,30
+ paddd xmm10,xmm6
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+DB 102,15,56,0,197
+ movd xmm8,DWORD PTR[((-20))+r10]
+ por xmm12,xmm7
+ movd xmm7,DWORD PTR[((-20))+r11]
+ punpckldq xmm1,xmm8
+ movdqa xmm8,xmm10
+ paddd xmm14,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm11
+ movdqa xmm6,xmm11
+ pslld xmm8,5
+ pandn xmm7,xmm13
+ pand xmm6,xmm12
+ punpckldq xmm1,xmm9
+ movdqa xmm9,xmm10
+
+ movdqa XMMWORD PTR[(160-128)+rax],xmm0
+ paddd xmm14,xmm0
+ movd xmm2,DWORD PTR[((-16))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm11
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-16))+r9]
+ pslld xmm7,30
+ paddd xmm14,xmm6
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+DB 102,15,56,0,205
+ movd xmm8,DWORD PTR[((-16))+r10]
+ por xmm11,xmm7
+ movd xmm7,DWORD PTR[((-16))+r11]
+ punpckldq xmm2,xmm8
+ movdqa xmm8,xmm14
+ paddd xmm13,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm10
+ movdqa xmm6,xmm10
+ pslld xmm8,5
+ pandn xmm7,xmm12
+ pand xmm6,xmm11
+ punpckldq xmm2,xmm9
+ movdqa xmm9,xmm14
+
+ movdqa XMMWORD PTR[(176-128)+rax],xmm1
+ paddd xmm13,xmm1
+ movd xmm3,DWORD PTR[((-12))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm10
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-12))+r9]
+ pslld xmm7,30
+ paddd xmm13,xmm6
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+DB 102,15,56,0,213
+ movd xmm8,DWORD PTR[((-12))+r10]
+ por xmm10,xmm7
+ movd xmm7,DWORD PTR[((-12))+r11]
+ punpckldq xmm3,xmm8
+ movdqa xmm8,xmm13
+ paddd xmm12,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm14
+ movdqa xmm6,xmm14
+ pslld xmm8,5
+ pandn xmm7,xmm11
+ pand xmm6,xmm10
+ punpckldq xmm3,xmm9
+ movdqa xmm9,xmm13
+
+ movdqa XMMWORD PTR[(192-128)+rax],xmm2
+ paddd xmm12,xmm2
+ movd xmm4,DWORD PTR[((-8))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm14
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-8))+r9]
+ pslld xmm7,30
+ paddd xmm12,xmm6
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+DB 102,15,56,0,221
+ movd xmm8,DWORD PTR[((-8))+r10]
+ por xmm14,xmm7
+ movd xmm7,DWORD PTR[((-8))+r11]
+ punpckldq xmm4,xmm8
+ movdqa xmm8,xmm12
+ paddd xmm11,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm13
+ movdqa xmm6,xmm13
+ pslld xmm8,5
+ pandn xmm7,xmm10
+ pand xmm6,xmm14
+ punpckldq xmm4,xmm9
+ movdqa xmm9,xmm12
+
+ movdqa XMMWORD PTR[(208-128)+rax],xmm3
+ paddd xmm11,xmm3
+ movd xmm0,DWORD PTR[((-4))+r8]
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm13
+
+ por xmm8,xmm9
+ movd xmm9,DWORD PTR[((-4))+r9]
+ pslld xmm7,30
+ paddd xmm11,xmm6
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+DB 102,15,56,0,229
+ movd xmm8,DWORD PTR[((-4))+r10]
+ por xmm13,xmm7
+ movdqa xmm1,XMMWORD PTR[((0-128))+rax]
+ movd xmm7,DWORD PTR[((-4))+r11]
+ punpckldq xmm0,xmm8
+ movdqa xmm8,xmm11
+ paddd xmm10,xmm15
+ punpckldq xmm9,xmm7
+ movdqa xmm7,xmm12
+ movdqa xmm6,xmm12
+ pslld xmm8,5
+ prefetcht0 [63+r8]
+ pandn xmm7,xmm14
+ pand xmm6,xmm13
+ punpckldq xmm0,xmm9
+ movdqa xmm9,xmm11
+
+ movdqa XMMWORD PTR[(224-128)+rax],xmm4
+ paddd xmm10,xmm4
+ psrld xmm9,27
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm12
+ prefetcht0 [63+r9]
+
+ por xmm8,xmm9
+ pslld xmm7,30
+ paddd xmm10,xmm6
+ prefetcht0 [63+r10]
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+DB 102,15,56,0,197
+ prefetcht0 [63+r11]
+ por xmm12,xmm7
+ movdqa xmm2,XMMWORD PTR[((16-128))+rax]
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((32-128))+rax]
+
+ movdqa xmm8,xmm10
+ pxor xmm1,XMMWORD PTR[((128-128))+rax]
+ paddd xmm14,xmm15
+ movdqa xmm7,xmm11
+ pslld xmm8,5
+ pxor xmm1,xmm3
+ movdqa xmm6,xmm11
+ pandn xmm7,xmm13
+ movdqa xmm5,xmm1
+ pand xmm6,xmm12
+ movdqa xmm9,xmm10
+ psrld xmm5,31
+ paddd xmm1,xmm1
+
+ movdqa XMMWORD PTR[(240-128)+rax],xmm0
+ paddd xmm14,xmm0
+ psrld xmm9,27
+ pxor xmm6,xmm7
+
+ movdqa xmm7,xmm11
+ por xmm8,xmm9
+ pslld xmm7,30
+ paddd xmm14,xmm6
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((48-128))+rax]
+
+ movdqa xmm8,xmm14
+ pxor xmm2,XMMWORD PTR[((144-128))+rax]
+ paddd xmm13,xmm15
+ movdqa xmm7,xmm10
+ pslld xmm8,5
+ pxor xmm2,xmm4
+ movdqa xmm6,xmm10
+ pandn xmm7,xmm12
+ movdqa xmm5,xmm2
+ pand xmm6,xmm11
+ movdqa xmm9,xmm14
+ psrld xmm5,31
+ paddd xmm2,xmm2
+
+ movdqa XMMWORD PTR[(0-128)+rax],xmm1
+ paddd xmm13,xmm1
+ psrld xmm9,27
+ pxor xmm6,xmm7
+
+ movdqa xmm7,xmm10
+ por xmm8,xmm9
+ pslld xmm7,30
+ paddd xmm13,xmm6
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((64-128))+rax]
+
+ movdqa xmm8,xmm13
+ pxor xmm3,XMMWORD PTR[((160-128))+rax]
+ paddd xmm12,xmm15
+ movdqa xmm7,xmm14
+ pslld xmm8,5
+ pxor xmm3,xmm0
+ movdqa xmm6,xmm14
+ pandn xmm7,xmm11
+ movdqa xmm5,xmm3
+ pand xmm6,xmm10
+ movdqa xmm9,xmm13
+ psrld xmm5,31
+ paddd xmm3,xmm3
+
+ movdqa XMMWORD PTR[(16-128)+rax],xmm2
+ paddd xmm12,xmm2
+ psrld xmm9,27
+ pxor xmm6,xmm7
+
+ movdqa xmm7,xmm14
+ por xmm8,xmm9
+ pslld xmm7,30
+ paddd xmm12,xmm6
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((80-128))+rax]
+
+ movdqa xmm8,xmm12
+ pxor xmm4,XMMWORD PTR[((176-128))+rax]
+ paddd xmm11,xmm15
+ movdqa xmm7,xmm13
+ pslld xmm8,5
+ pxor xmm4,xmm1
+ movdqa xmm6,xmm13
+ pandn xmm7,xmm10
+ movdqa xmm5,xmm4
+ pand xmm6,xmm14
+ movdqa xmm9,xmm12
+ psrld xmm5,31
+ paddd xmm4,xmm4
+
+ movdqa XMMWORD PTR[(32-128)+rax],xmm3
+ paddd xmm11,xmm3
+ psrld xmm9,27
+ pxor xmm6,xmm7
+
+ movdqa xmm7,xmm13
+ por xmm8,xmm9
+ pslld xmm7,30
+ paddd xmm11,xmm6
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((96-128))+rax]
+
+ movdqa xmm8,xmm11
+ pxor xmm0,XMMWORD PTR[((192-128))+rax]
+ paddd xmm10,xmm15
+ movdqa xmm7,xmm12
+ pslld xmm8,5
+ pxor xmm0,xmm2
+ movdqa xmm6,xmm12
+ pandn xmm7,xmm14
+ movdqa xmm5,xmm0
+ pand xmm6,xmm13
+ movdqa xmm9,xmm11
+ psrld xmm5,31
+ paddd xmm0,xmm0
+
+ movdqa XMMWORD PTR[(48-128)+rax],xmm4
+ paddd xmm10,xmm4
+ psrld xmm9,27
+ pxor xmm6,xmm7
+
+ movdqa xmm7,xmm12
+ por xmm8,xmm9
+ pslld xmm7,30
+ paddd xmm10,xmm6
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ movdqa xmm15,XMMWORD PTR[rbp]
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((112-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm6,xmm13
+ pxor xmm1,XMMWORD PTR[((208-128))+rax]
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm11
+
+ movdqa xmm9,xmm10
+ movdqa XMMWORD PTR[(64-128)+rax],xmm0
+ paddd xmm14,xmm0
+ pxor xmm1,xmm3
+ psrld xmm9,27
+ pxor xmm6,xmm12
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ movdqa xmm5,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm14,xmm6
+ paddd xmm1,xmm1
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((128-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm6,xmm12
+ pxor xmm2,XMMWORD PTR[((224-128))+rax]
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm10
+
+ movdqa xmm9,xmm14
+ movdqa XMMWORD PTR[(80-128)+rax],xmm1
+ paddd xmm13,xmm1
+ pxor xmm2,xmm4
+ psrld xmm9,27
+ pxor xmm6,xmm11
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ movdqa xmm5,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm13,xmm6
+ paddd xmm2,xmm2
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((144-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm6,xmm11
+ pxor xmm3,XMMWORD PTR[((240-128))+rax]
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm14
+
+ movdqa xmm9,xmm13
+ movdqa XMMWORD PTR[(96-128)+rax],xmm2
+ paddd xmm12,xmm2
+ pxor xmm3,xmm0
+ psrld xmm9,27
+ pxor xmm6,xmm10
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ movdqa xmm5,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm12,xmm6
+ paddd xmm3,xmm3
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((160-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm6,xmm10
+ pxor xmm4,XMMWORD PTR[((0-128))+rax]
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm13
+
+ movdqa xmm9,xmm12
+ movdqa XMMWORD PTR[(112-128)+rax],xmm3
+ paddd xmm11,xmm3
+ pxor xmm4,xmm1
+ psrld xmm9,27
+ pxor xmm6,xmm14
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ movdqa xmm5,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm11,xmm6
+ paddd xmm4,xmm4
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((176-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm6,xmm14
+ pxor xmm0,XMMWORD PTR[((16-128))+rax]
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm12
+
+ movdqa xmm9,xmm11
+ movdqa XMMWORD PTR[(128-128)+rax],xmm4
+ paddd xmm10,xmm4
+ pxor xmm0,xmm2
+ psrld xmm9,27
+ pxor xmm6,xmm13
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ movdqa xmm5,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm10,xmm6
+ paddd xmm0,xmm0
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((192-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm6,xmm13
+ pxor xmm1,XMMWORD PTR[((32-128))+rax]
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm11
+
+ movdqa xmm9,xmm10
+ movdqa XMMWORD PTR[(144-128)+rax],xmm0
+ paddd xmm14,xmm0
+ pxor xmm1,xmm3
+ psrld xmm9,27
+ pxor xmm6,xmm12
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ movdqa xmm5,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm14,xmm6
+ paddd xmm1,xmm1
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((208-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm6,xmm12
+ pxor xmm2,XMMWORD PTR[((48-128))+rax]
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm10
+
+ movdqa xmm9,xmm14
+ movdqa XMMWORD PTR[(160-128)+rax],xmm1
+ paddd xmm13,xmm1
+ pxor xmm2,xmm4
+ psrld xmm9,27
+ pxor xmm6,xmm11
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ movdqa xmm5,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm13,xmm6
+ paddd xmm2,xmm2
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((224-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm6,xmm11
+ pxor xmm3,XMMWORD PTR[((64-128))+rax]
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm14
+
+ movdqa xmm9,xmm13
+ movdqa XMMWORD PTR[(176-128)+rax],xmm2
+ paddd xmm12,xmm2
+ pxor xmm3,xmm0
+ psrld xmm9,27
+ pxor xmm6,xmm10
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ movdqa xmm5,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm12,xmm6
+ paddd xmm3,xmm3
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((240-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm6,xmm10
+ pxor xmm4,XMMWORD PTR[((80-128))+rax]
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm13
+
+ movdqa xmm9,xmm12
+ movdqa XMMWORD PTR[(192-128)+rax],xmm3
+ paddd xmm11,xmm3
+ pxor xmm4,xmm1
+ psrld xmm9,27
+ pxor xmm6,xmm14
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ movdqa xmm5,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm11,xmm6
+ paddd xmm4,xmm4
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((0-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm6,xmm14
+ pxor xmm0,XMMWORD PTR[((96-128))+rax]
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm12
+
+ movdqa xmm9,xmm11
+ movdqa XMMWORD PTR[(208-128)+rax],xmm4
+ paddd xmm10,xmm4
+ pxor xmm0,xmm2
+ psrld xmm9,27
+ pxor xmm6,xmm13
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ movdqa xmm5,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm10,xmm6
+ paddd xmm0,xmm0
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((16-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm6,xmm13
+ pxor xmm1,XMMWORD PTR[((112-128))+rax]
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm11
+
+ movdqa xmm9,xmm10
+ movdqa XMMWORD PTR[(224-128)+rax],xmm0
+ paddd xmm14,xmm0
+ pxor xmm1,xmm3
+ psrld xmm9,27
+ pxor xmm6,xmm12
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ movdqa xmm5,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm14,xmm6
+ paddd xmm1,xmm1
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((32-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm6,xmm12
+ pxor xmm2,XMMWORD PTR[((128-128))+rax]
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm10
+
+ movdqa xmm9,xmm14
+ movdqa XMMWORD PTR[(240-128)+rax],xmm1
+ paddd xmm13,xmm1
+ pxor xmm2,xmm4
+ psrld xmm9,27
+ pxor xmm6,xmm11
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ movdqa xmm5,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm13,xmm6
+ paddd xmm2,xmm2
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((48-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm6,xmm11
+ pxor xmm3,XMMWORD PTR[((144-128))+rax]
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm14
+
+ movdqa xmm9,xmm13
+ movdqa XMMWORD PTR[(0-128)+rax],xmm2
+ paddd xmm12,xmm2
+ pxor xmm3,xmm0
+ psrld xmm9,27
+ pxor xmm6,xmm10
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ movdqa xmm5,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm12,xmm6
+ paddd xmm3,xmm3
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((64-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm6,xmm10
+ pxor xmm4,XMMWORD PTR[((160-128))+rax]
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm13
+
+ movdqa xmm9,xmm12
+ movdqa XMMWORD PTR[(16-128)+rax],xmm3
+ paddd xmm11,xmm3
+ pxor xmm4,xmm1
+ psrld xmm9,27
+ pxor xmm6,xmm14
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ movdqa xmm5,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm11,xmm6
+ paddd xmm4,xmm4
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((80-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm6,xmm14
+ pxor xmm0,XMMWORD PTR[((176-128))+rax]
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm12
+
+ movdqa xmm9,xmm11
+ movdqa XMMWORD PTR[(32-128)+rax],xmm4
+ paddd xmm10,xmm4
+ pxor xmm0,xmm2
+ psrld xmm9,27
+ pxor xmm6,xmm13
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ movdqa xmm5,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm10,xmm6
+ paddd xmm0,xmm0
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((96-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm6,xmm13
+ pxor xmm1,XMMWORD PTR[((192-128))+rax]
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm11
+
+ movdqa xmm9,xmm10
+ movdqa XMMWORD PTR[(48-128)+rax],xmm0
+ paddd xmm14,xmm0
+ pxor xmm1,xmm3
+ psrld xmm9,27
+ pxor xmm6,xmm12
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ movdqa xmm5,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm14,xmm6
+ paddd xmm1,xmm1
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((112-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm6,xmm12
+ pxor xmm2,XMMWORD PTR[((208-128))+rax]
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm10
+
+ movdqa xmm9,xmm14
+ movdqa XMMWORD PTR[(64-128)+rax],xmm1
+ paddd xmm13,xmm1
+ pxor xmm2,xmm4
+ psrld xmm9,27
+ pxor xmm6,xmm11
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ movdqa xmm5,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm13,xmm6
+ paddd xmm2,xmm2
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((128-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm6,xmm11
+ pxor xmm3,XMMWORD PTR[((224-128))+rax]
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm14
+
+ movdqa xmm9,xmm13
+ movdqa XMMWORD PTR[(80-128)+rax],xmm2
+ paddd xmm12,xmm2
+ pxor xmm3,xmm0
+ psrld xmm9,27
+ pxor xmm6,xmm10
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ movdqa xmm5,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm12,xmm6
+ paddd xmm3,xmm3
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((144-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm6,xmm10
+ pxor xmm4,XMMWORD PTR[((240-128))+rax]
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm13
+
+ movdqa xmm9,xmm12
+ movdqa XMMWORD PTR[(96-128)+rax],xmm3
+ paddd xmm11,xmm3
+ pxor xmm4,xmm1
+ psrld xmm9,27
+ pxor xmm6,xmm14
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ movdqa xmm5,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm11,xmm6
+ paddd xmm4,xmm4
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((160-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm6,xmm14
+ pxor xmm0,XMMWORD PTR[((0-128))+rax]
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm12
+
+ movdqa xmm9,xmm11
+ movdqa XMMWORD PTR[(112-128)+rax],xmm4
+ paddd xmm10,xmm4
+ pxor xmm0,xmm2
+ psrld xmm9,27
+ pxor xmm6,xmm13
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ movdqa xmm5,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm10,xmm6
+ paddd xmm0,xmm0
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ movdqa xmm15,XMMWORD PTR[32+rbp]
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((176-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm7,xmm13
+ pxor xmm1,XMMWORD PTR[((16-128))+rax]
+ pxor xmm1,xmm3
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm10
+ pand xmm7,xmm12
+
+ movdqa xmm6,xmm13
+ movdqa xmm5,xmm1
+ psrld xmm9,27
+ paddd xmm14,xmm7
+ pxor xmm6,xmm12
+
+ movdqa XMMWORD PTR[(128-128)+rax],xmm0
+ paddd xmm14,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm11
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ paddd xmm1,xmm1
+ paddd xmm14,xmm6
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((192-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm7,xmm12
+ pxor xmm2,XMMWORD PTR[((32-128))+rax]
+ pxor xmm2,xmm4
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm14
+ pand xmm7,xmm11
+
+ movdqa xmm6,xmm12
+ movdqa xmm5,xmm2
+ psrld xmm9,27
+ paddd xmm13,xmm7
+ pxor xmm6,xmm11
+
+ movdqa XMMWORD PTR[(144-128)+rax],xmm1
+ paddd xmm13,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm10
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ paddd xmm2,xmm2
+ paddd xmm13,xmm6
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((208-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm7,xmm11
+ pxor xmm3,XMMWORD PTR[((48-128))+rax]
+ pxor xmm3,xmm0
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm13
+ pand xmm7,xmm10
+
+ movdqa xmm6,xmm11
+ movdqa xmm5,xmm3
+ psrld xmm9,27
+ paddd xmm12,xmm7
+ pxor xmm6,xmm10
+
+ movdqa XMMWORD PTR[(160-128)+rax],xmm2
+ paddd xmm12,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm14
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ paddd xmm3,xmm3
+ paddd xmm12,xmm6
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((224-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm7,xmm10
+ pxor xmm4,XMMWORD PTR[((64-128))+rax]
+ pxor xmm4,xmm1
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm12
+ pand xmm7,xmm14
+
+ movdqa xmm6,xmm10
+ movdqa xmm5,xmm4
+ psrld xmm9,27
+ paddd xmm11,xmm7
+ pxor xmm6,xmm14
+
+ movdqa XMMWORD PTR[(176-128)+rax],xmm3
+ paddd xmm11,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm13
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ paddd xmm4,xmm4
+ paddd xmm11,xmm6
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((240-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm7,xmm14
+ pxor xmm0,XMMWORD PTR[((80-128))+rax]
+ pxor xmm0,xmm2
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm11
+ pand xmm7,xmm13
+
+ movdqa xmm6,xmm14
+ movdqa xmm5,xmm0
+ psrld xmm9,27
+ paddd xmm10,xmm7
+ pxor xmm6,xmm13
+
+ movdqa XMMWORD PTR[(192-128)+rax],xmm4
+ paddd xmm10,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm12
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ paddd xmm0,xmm0
+ paddd xmm10,xmm6
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((0-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm7,xmm13
+ pxor xmm1,XMMWORD PTR[((96-128))+rax]
+ pxor xmm1,xmm3
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm10
+ pand xmm7,xmm12
+
+ movdqa xmm6,xmm13
+ movdqa xmm5,xmm1
+ psrld xmm9,27
+ paddd xmm14,xmm7
+ pxor xmm6,xmm12
+
+ movdqa XMMWORD PTR[(208-128)+rax],xmm0
+ paddd xmm14,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm11
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ paddd xmm1,xmm1
+ paddd xmm14,xmm6
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((16-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm7,xmm12
+ pxor xmm2,XMMWORD PTR[((112-128))+rax]
+ pxor xmm2,xmm4
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm14
+ pand xmm7,xmm11
+
+ movdqa xmm6,xmm12
+ movdqa xmm5,xmm2
+ psrld xmm9,27
+ paddd xmm13,xmm7
+ pxor xmm6,xmm11
+
+ movdqa XMMWORD PTR[(224-128)+rax],xmm1
+ paddd xmm13,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm10
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ paddd xmm2,xmm2
+ paddd xmm13,xmm6
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((32-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm7,xmm11
+ pxor xmm3,XMMWORD PTR[((128-128))+rax]
+ pxor xmm3,xmm0
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm13
+ pand xmm7,xmm10
+
+ movdqa xmm6,xmm11
+ movdqa xmm5,xmm3
+ psrld xmm9,27
+ paddd xmm12,xmm7
+ pxor xmm6,xmm10
+
+ movdqa XMMWORD PTR[(240-128)+rax],xmm2
+ paddd xmm12,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm14
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ paddd xmm3,xmm3
+ paddd xmm12,xmm6
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((48-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm7,xmm10
+ pxor xmm4,XMMWORD PTR[((144-128))+rax]
+ pxor xmm4,xmm1
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm12
+ pand xmm7,xmm14
+
+ movdqa xmm6,xmm10
+ movdqa xmm5,xmm4
+ psrld xmm9,27
+ paddd xmm11,xmm7
+ pxor xmm6,xmm14
+
+ movdqa XMMWORD PTR[(0-128)+rax],xmm3
+ paddd xmm11,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm13
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ paddd xmm4,xmm4
+ paddd xmm11,xmm6
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((64-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm7,xmm14
+ pxor xmm0,XMMWORD PTR[((160-128))+rax]
+ pxor xmm0,xmm2
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm11
+ pand xmm7,xmm13
+
+ movdqa xmm6,xmm14
+ movdqa xmm5,xmm0
+ psrld xmm9,27
+ paddd xmm10,xmm7
+ pxor xmm6,xmm13
+
+ movdqa XMMWORD PTR[(16-128)+rax],xmm4
+ paddd xmm10,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm12
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ paddd xmm0,xmm0
+ paddd xmm10,xmm6
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((80-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm7,xmm13
+ pxor xmm1,XMMWORD PTR[((176-128))+rax]
+ pxor xmm1,xmm3
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm10
+ pand xmm7,xmm12
+
+ movdqa xmm6,xmm13
+ movdqa xmm5,xmm1
+ psrld xmm9,27
+ paddd xmm14,xmm7
+ pxor xmm6,xmm12
+
+ movdqa XMMWORD PTR[(32-128)+rax],xmm0
+ paddd xmm14,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm11
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ paddd xmm1,xmm1
+ paddd xmm14,xmm6
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((96-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm7,xmm12
+ pxor xmm2,XMMWORD PTR[((192-128))+rax]
+ pxor xmm2,xmm4
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm14
+ pand xmm7,xmm11
+
+ movdqa xmm6,xmm12
+ movdqa xmm5,xmm2
+ psrld xmm9,27
+ paddd xmm13,xmm7
+ pxor xmm6,xmm11
+
+ movdqa XMMWORD PTR[(48-128)+rax],xmm1
+ paddd xmm13,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm10
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ paddd xmm2,xmm2
+ paddd xmm13,xmm6
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((112-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm7,xmm11
+ pxor xmm3,XMMWORD PTR[((208-128))+rax]
+ pxor xmm3,xmm0
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm13
+ pand xmm7,xmm10
+
+ movdqa xmm6,xmm11
+ movdqa xmm5,xmm3
+ psrld xmm9,27
+ paddd xmm12,xmm7
+ pxor xmm6,xmm10
+
+ movdqa XMMWORD PTR[(64-128)+rax],xmm2
+ paddd xmm12,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm14
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ paddd xmm3,xmm3
+ paddd xmm12,xmm6
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((128-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm7,xmm10
+ pxor xmm4,XMMWORD PTR[((224-128))+rax]
+ pxor xmm4,xmm1
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm12
+ pand xmm7,xmm14
+
+ movdqa xmm6,xmm10
+ movdqa xmm5,xmm4
+ psrld xmm9,27
+ paddd xmm11,xmm7
+ pxor xmm6,xmm14
+
+ movdqa XMMWORD PTR[(80-128)+rax],xmm3
+ paddd xmm11,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm13
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ paddd xmm4,xmm4
+ paddd xmm11,xmm6
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((144-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm7,xmm14
+ pxor xmm0,XMMWORD PTR[((240-128))+rax]
+ pxor xmm0,xmm2
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm11
+ pand xmm7,xmm13
+
+ movdqa xmm6,xmm14
+ movdqa xmm5,xmm0
+ psrld xmm9,27
+ paddd xmm10,xmm7
+ pxor xmm6,xmm13
+
+ movdqa XMMWORD PTR[(96-128)+rax],xmm4
+ paddd xmm10,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm12
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ paddd xmm0,xmm0
+ paddd xmm10,xmm6
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((160-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm7,xmm13
+ pxor xmm1,XMMWORD PTR[((0-128))+rax]
+ pxor xmm1,xmm3
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm10
+ pand xmm7,xmm12
+
+ movdqa xmm6,xmm13
+ movdqa xmm5,xmm1
+ psrld xmm9,27
+ paddd xmm14,xmm7
+ pxor xmm6,xmm12
+
+ movdqa XMMWORD PTR[(112-128)+rax],xmm0
+ paddd xmm14,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm11
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ paddd xmm1,xmm1
+ paddd xmm14,xmm6
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((176-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm7,xmm12
+ pxor xmm2,XMMWORD PTR[((16-128))+rax]
+ pxor xmm2,xmm4
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm14
+ pand xmm7,xmm11
+
+ movdqa xmm6,xmm12
+ movdqa xmm5,xmm2
+ psrld xmm9,27
+ paddd xmm13,xmm7
+ pxor xmm6,xmm11
+
+ movdqa XMMWORD PTR[(128-128)+rax],xmm1
+ paddd xmm13,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm10
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ paddd xmm2,xmm2
+ paddd xmm13,xmm6
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((192-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm7,xmm11
+ pxor xmm3,XMMWORD PTR[((32-128))+rax]
+ pxor xmm3,xmm0
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm13
+ pand xmm7,xmm10
+
+ movdqa xmm6,xmm11
+ movdqa xmm5,xmm3
+ psrld xmm9,27
+ paddd xmm12,xmm7
+ pxor xmm6,xmm10
+
+ movdqa XMMWORD PTR[(144-128)+rax],xmm2
+ paddd xmm12,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm14
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ paddd xmm3,xmm3
+ paddd xmm12,xmm6
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((208-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm7,xmm10
+ pxor xmm4,XMMWORD PTR[((48-128))+rax]
+ pxor xmm4,xmm1
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm12
+ pand xmm7,xmm14
+
+ movdqa xmm6,xmm10
+ movdqa xmm5,xmm4
+ psrld xmm9,27
+ paddd xmm11,xmm7
+ pxor xmm6,xmm14
+
+ movdqa XMMWORD PTR[(160-128)+rax],xmm3
+ paddd xmm11,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm13
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ paddd xmm4,xmm4
+ paddd xmm11,xmm6
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((224-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm7,xmm14
+ pxor xmm0,XMMWORD PTR[((64-128))+rax]
+ pxor xmm0,xmm2
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ movdqa xmm9,xmm11
+ pand xmm7,xmm13
+
+ movdqa xmm6,xmm14
+ movdqa xmm5,xmm0
+ psrld xmm9,27
+ paddd xmm10,xmm7
+ pxor xmm6,xmm13
+
+ movdqa XMMWORD PTR[(176-128)+rax],xmm4
+ paddd xmm10,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ pand xmm6,xmm12
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ paddd xmm0,xmm0
+ paddd xmm10,xmm6
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ movdqa xmm15,XMMWORD PTR[64+rbp]
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((240-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm6,xmm13
+ pxor xmm1,XMMWORD PTR[((80-128))+rax]
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm11
+
+ movdqa xmm9,xmm10
+ movdqa XMMWORD PTR[(192-128)+rax],xmm0
+ paddd xmm14,xmm0
+ pxor xmm1,xmm3
+ psrld xmm9,27
+ pxor xmm6,xmm12
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ movdqa xmm5,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm14,xmm6
+ paddd xmm1,xmm1
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((0-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm6,xmm12
+ pxor xmm2,XMMWORD PTR[((96-128))+rax]
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm10
+
+ movdqa xmm9,xmm14
+ movdqa XMMWORD PTR[(208-128)+rax],xmm1
+ paddd xmm13,xmm1
+ pxor xmm2,xmm4
+ psrld xmm9,27
+ pxor xmm6,xmm11
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ movdqa xmm5,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm13,xmm6
+ paddd xmm2,xmm2
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((16-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm6,xmm11
+ pxor xmm3,XMMWORD PTR[((112-128))+rax]
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm14
+
+ movdqa xmm9,xmm13
+ movdqa XMMWORD PTR[(224-128)+rax],xmm2
+ paddd xmm12,xmm2
+ pxor xmm3,xmm0
+ psrld xmm9,27
+ pxor xmm6,xmm10
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ movdqa xmm5,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm12,xmm6
+ paddd xmm3,xmm3
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((32-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm6,xmm10
+ pxor xmm4,XMMWORD PTR[((128-128))+rax]
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm13
+
+ movdqa xmm9,xmm12
+ movdqa XMMWORD PTR[(240-128)+rax],xmm3
+ paddd xmm11,xmm3
+ pxor xmm4,xmm1
+ psrld xmm9,27
+ pxor xmm6,xmm14
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ movdqa xmm5,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm11,xmm6
+ paddd xmm4,xmm4
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((48-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm6,xmm14
+ pxor xmm0,XMMWORD PTR[((144-128))+rax]
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm12
+
+ movdqa xmm9,xmm11
+ movdqa XMMWORD PTR[(0-128)+rax],xmm4
+ paddd xmm10,xmm4
+ pxor xmm0,xmm2
+ psrld xmm9,27
+ pxor xmm6,xmm13
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ movdqa xmm5,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm10,xmm6
+ paddd xmm0,xmm0
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((64-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm6,xmm13
+ pxor xmm1,XMMWORD PTR[((160-128))+rax]
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm11
+
+ movdqa xmm9,xmm10
+ movdqa XMMWORD PTR[(16-128)+rax],xmm0
+ paddd xmm14,xmm0
+ pxor xmm1,xmm3
+ psrld xmm9,27
+ pxor xmm6,xmm12
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ movdqa xmm5,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm14,xmm6
+ paddd xmm1,xmm1
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((80-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm6,xmm12
+ pxor xmm2,XMMWORD PTR[((176-128))+rax]
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm10
+
+ movdqa xmm9,xmm14
+ movdqa XMMWORD PTR[(32-128)+rax],xmm1
+ paddd xmm13,xmm1
+ pxor xmm2,xmm4
+ psrld xmm9,27
+ pxor xmm6,xmm11
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ movdqa xmm5,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm13,xmm6
+ paddd xmm2,xmm2
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((96-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm6,xmm11
+ pxor xmm3,XMMWORD PTR[((192-128))+rax]
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm14
+
+ movdqa xmm9,xmm13
+ movdqa XMMWORD PTR[(48-128)+rax],xmm2
+ paddd xmm12,xmm2
+ pxor xmm3,xmm0
+ psrld xmm9,27
+ pxor xmm6,xmm10
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ movdqa xmm5,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm12,xmm6
+ paddd xmm3,xmm3
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((112-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm6,xmm10
+ pxor xmm4,XMMWORD PTR[((208-128))+rax]
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm13
+
+ movdqa xmm9,xmm12
+ movdqa XMMWORD PTR[(64-128)+rax],xmm3
+ paddd xmm11,xmm3
+ pxor xmm4,xmm1
+ psrld xmm9,27
+ pxor xmm6,xmm14
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ movdqa xmm5,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm11,xmm6
+ paddd xmm4,xmm4
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((128-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm6,xmm14
+ pxor xmm0,XMMWORD PTR[((224-128))+rax]
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm12
+
+ movdqa xmm9,xmm11
+ movdqa XMMWORD PTR[(80-128)+rax],xmm4
+ paddd xmm10,xmm4
+ pxor xmm0,xmm2
+ psrld xmm9,27
+ pxor xmm6,xmm13
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ movdqa xmm5,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm10,xmm6
+ paddd xmm0,xmm0
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((144-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm6,xmm13
+ pxor xmm1,XMMWORD PTR[((240-128))+rax]
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm11
+
+ movdqa xmm9,xmm10
+ movdqa XMMWORD PTR[(96-128)+rax],xmm0
+ paddd xmm14,xmm0
+ pxor xmm1,xmm3
+ psrld xmm9,27
+ pxor xmm6,xmm12
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ movdqa xmm5,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm14,xmm6
+ paddd xmm1,xmm1
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((160-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm6,xmm12
+ pxor xmm2,XMMWORD PTR[((0-128))+rax]
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm10
+
+ movdqa xmm9,xmm14
+ movdqa XMMWORD PTR[(112-128)+rax],xmm1
+ paddd xmm13,xmm1
+ pxor xmm2,xmm4
+ psrld xmm9,27
+ pxor xmm6,xmm11
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ movdqa xmm5,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm13,xmm6
+ paddd xmm2,xmm2
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((176-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm6,xmm11
+ pxor xmm3,XMMWORD PTR[((16-128))+rax]
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm14
+
+ movdqa xmm9,xmm13
+ paddd xmm12,xmm2
+ pxor xmm3,xmm0
+ psrld xmm9,27
+ pxor xmm6,xmm10
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ movdqa xmm5,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm12,xmm6
+ paddd xmm3,xmm3
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((192-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm6,xmm10
+ pxor xmm4,XMMWORD PTR[((32-128))+rax]
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm13
+
+ movdqa xmm9,xmm12
+ paddd xmm11,xmm3
+ pxor xmm4,xmm1
+ psrld xmm9,27
+ pxor xmm6,xmm14
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ movdqa xmm5,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm11,xmm6
+ paddd xmm4,xmm4
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ pxor xmm0,xmm2
+ movdqa xmm2,XMMWORD PTR[((208-128))+rax]
+
+ movdqa xmm8,xmm11
+ movdqa xmm6,xmm14
+ pxor xmm0,XMMWORD PTR[((48-128))+rax]
+ paddd xmm10,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm12
+
+ movdqa xmm9,xmm11
+ paddd xmm10,xmm4
+ pxor xmm0,xmm2
+ psrld xmm9,27
+ pxor xmm6,xmm13
+ movdqa xmm7,xmm12
+
+ pslld xmm7,30
+ movdqa xmm5,xmm0
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm10,xmm6
+ paddd xmm0,xmm0
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm0,xmm5
+ por xmm12,xmm7
+ pxor xmm1,xmm3
+ movdqa xmm3,XMMWORD PTR[((224-128))+rax]
+
+ movdqa xmm8,xmm10
+ movdqa xmm6,xmm13
+ pxor xmm1,XMMWORD PTR[((64-128))+rax]
+ paddd xmm14,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm11
+
+ movdqa xmm9,xmm10
+ paddd xmm14,xmm0
+ pxor xmm1,xmm3
+ psrld xmm9,27
+ pxor xmm6,xmm12
+ movdqa xmm7,xmm11
+
+ pslld xmm7,30
+ movdqa xmm5,xmm1
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm14,xmm6
+ paddd xmm1,xmm1
+
+ psrld xmm11,2
+ paddd xmm14,xmm8
+ por xmm1,xmm5
+ por xmm11,xmm7
+ pxor xmm2,xmm4
+ movdqa xmm4,XMMWORD PTR[((240-128))+rax]
+
+ movdqa xmm8,xmm14
+ movdqa xmm6,xmm12
+ pxor xmm2,XMMWORD PTR[((80-128))+rax]
+ paddd xmm13,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm10
+
+ movdqa xmm9,xmm14
+ paddd xmm13,xmm1
+ pxor xmm2,xmm4
+ psrld xmm9,27
+ pxor xmm6,xmm11
+ movdqa xmm7,xmm10
+
+ pslld xmm7,30
+ movdqa xmm5,xmm2
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm13,xmm6
+ paddd xmm2,xmm2
+
+ psrld xmm10,2
+ paddd xmm13,xmm8
+ por xmm2,xmm5
+ por xmm10,xmm7
+ pxor xmm3,xmm0
+ movdqa xmm0,XMMWORD PTR[((0-128))+rax]
+
+ movdqa xmm8,xmm13
+ movdqa xmm6,xmm11
+ pxor xmm3,XMMWORD PTR[((96-128))+rax]
+ paddd xmm12,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm14
+
+ movdqa xmm9,xmm13
+ paddd xmm12,xmm2
+ pxor xmm3,xmm0
+ psrld xmm9,27
+ pxor xmm6,xmm10
+ movdqa xmm7,xmm14
+
+ pslld xmm7,30
+ movdqa xmm5,xmm3
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm12,xmm6
+ paddd xmm3,xmm3
+
+ psrld xmm14,2
+ paddd xmm12,xmm8
+ por xmm3,xmm5
+ por xmm14,xmm7
+ pxor xmm4,xmm1
+ movdqa xmm1,XMMWORD PTR[((16-128))+rax]
+
+ movdqa xmm8,xmm12
+ movdqa xmm6,xmm10
+ pxor xmm4,XMMWORD PTR[((112-128))+rax]
+ paddd xmm11,xmm15
+ pslld xmm8,5
+ pxor xmm6,xmm13
+
+ movdqa xmm9,xmm12
+ paddd xmm11,xmm3
+ pxor xmm4,xmm1
+ psrld xmm9,27
+ pxor xmm6,xmm14
+ movdqa xmm7,xmm13
+
+ pslld xmm7,30
+ movdqa xmm5,xmm4
+ por xmm8,xmm9
+ psrld xmm5,31
+ paddd xmm11,xmm6
+ paddd xmm4,xmm4
+
+ psrld xmm13,2
+ paddd xmm11,xmm8
+ por xmm4,xmm5
+ por xmm13,xmm7
+ movdqa xmm8,xmm11
+ paddd xmm10,xmm15
+ movdqa xmm6,xmm14
+ pslld xmm8,5
+ pxor xmm6,xmm12
+
+ movdqa xmm9,xmm11
+ paddd xmm10,xmm4
+ psrld xmm9,27
+ movdqa xmm7,xmm12
+ pxor xmm6,xmm13
+
+ pslld xmm7,30
+ por xmm8,xmm9
+ paddd xmm10,xmm6
+
+ psrld xmm12,2
+ paddd xmm10,xmm8
+ por xmm12,xmm7
+ movdqa xmm0,XMMWORD PTR[rbx]
+ mov ecx,1
+ cmp ecx,DWORD PTR[rbx]
+ pxor xmm8,xmm8
+ cmovge r8,rbp
+ cmp ecx,DWORD PTR[4+rbx]
+ movdqa xmm1,xmm0
+ cmovge r9,rbp
+ cmp ecx,DWORD PTR[8+rbx]
+ pcmpgtd xmm1,xmm8
+ cmovge r10,rbp
+ cmp ecx,DWORD PTR[12+rbx]
+ paddd xmm0,xmm1
+ cmovge r11,rbp
+
+ movdqu xmm6,XMMWORD PTR[rdi]
+ pand xmm10,xmm1
+ movdqu xmm7,XMMWORD PTR[32+rdi]
+ pand xmm11,xmm1
+ paddd xmm10,xmm6
+ movdqu xmm8,XMMWORD PTR[64+rdi]
+ pand xmm12,xmm1
+ paddd xmm11,xmm7
+ movdqu xmm9,XMMWORD PTR[96+rdi]
+ pand xmm13,xmm1
+ paddd xmm12,xmm8
+ movdqu xmm5,XMMWORD PTR[128+rdi]
+ pand xmm14,xmm1
+ movdqu XMMWORD PTR[rdi],xmm10
+ paddd xmm13,xmm9
+ movdqu XMMWORD PTR[32+rdi],xmm11
+ paddd xmm14,xmm5
+ movdqu XMMWORD PTR[64+rdi],xmm12
+ movdqu XMMWORD PTR[96+rdi],xmm13
+ movdqu XMMWORD PTR[128+rdi],xmm14
+
+ movdqa XMMWORD PTR[rbx],xmm0
+ movdqa xmm5,XMMWORD PTR[96+rbp]
+ movdqa xmm15,XMMWORD PTR[((-32))+rbp]
+ dec edx
+ jnz $L$oop
+
+ mov edx,DWORD PTR[280+rsp]
+ lea rdi,QWORD PTR[16+rdi]
+ lea rsi,QWORD PTR[64+rsi]
+ dec edx
+ jnz $L$oop_grande
+
+$L$done::
+ mov rax,QWORD PTR[272+rsp]
+
+ movaps xmm6,XMMWORD PTR[((-184))+rax]
+ movaps xmm7,XMMWORD PTR[((-168))+rax]
+ movaps xmm8,XMMWORD PTR[((-152))+rax]
+ movaps xmm9,XMMWORD PTR[((-136))+rax]
+ movaps xmm10,XMMWORD PTR[((-120))+rax]
+ movaps xmm11,XMMWORD PTR[((-104))+rax]
+ movaps xmm12,XMMWORD PTR[((-88))+rax]
+ movaps xmm13,XMMWORD PTR[((-72))+rax]
+ movaps xmm14,XMMWORD PTR[((-56))+rax]
+ movaps xmm15,XMMWORD PTR[((-40))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha1_multi_block::
+sha1_multi_block ENDP
+
+ALIGN 32
+sha1_multi_block_shaext PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha1_multi_block_shaext::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+_shaext_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[(-120)+rax],xmm10
+ movaps XMMWORD PTR[(-104)+rax],xmm11
+ movaps XMMWORD PTR[(-88)+rax],xmm12
+ movaps XMMWORD PTR[(-72)+rax],xmm13
+ movaps XMMWORD PTR[(-56)+rax],xmm14
+ movaps XMMWORD PTR[(-40)+rax],xmm15
+ sub rsp,288
+ shl edx,1
+ and rsp,-256
+ lea rdi,QWORD PTR[64+rdi]
+ mov QWORD PTR[272+rsp],rax
+$L$body_shaext::
+ lea rbx,QWORD PTR[256+rsp]
+ movdqa xmm3,XMMWORD PTR[((K_XX_XX+128))]
+
+$L$oop_grande_shaext::
+ mov DWORD PTR[280+rsp],edx
+ xor edx,edx
+ mov r8,QWORD PTR[rsi]
+ mov ecx,DWORD PTR[8+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[rbx],ecx
+ cmovle r8,rsp
+ mov r9,QWORD PTR[16+rsi]
+ mov ecx,DWORD PTR[24+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[4+rbx],ecx
+ cmovle r9,rsp
+ test edx,edx
+ jz $L$done_shaext
+
+ movq xmm0,QWORD PTR[((0-64))+rdi]
+ movq xmm4,QWORD PTR[((32-64))+rdi]
+ movq xmm5,QWORD PTR[((64-64))+rdi]
+ movq xmm6,QWORD PTR[((96-64))+rdi]
+ movq xmm7,QWORD PTR[((128-64))+rdi]
+
+ punpckldq xmm0,xmm4
+ punpckldq xmm5,xmm6
+
+ movdqa xmm8,xmm0
+ punpcklqdq xmm0,xmm5
+ punpckhqdq xmm8,xmm5
+
+ pshufd xmm1,xmm7,63
+ pshufd xmm9,xmm7,127
+ pshufd xmm0,xmm0,27
+ pshufd xmm8,xmm8,27
+ jmp $L$oop_shaext
+
+ALIGN 32
+$L$oop_shaext::
+ movdqu xmm4,XMMWORD PTR[r8]
+ movdqu xmm11,XMMWORD PTR[r9]
+ movdqu xmm5,XMMWORD PTR[16+r8]
+ movdqu xmm12,XMMWORD PTR[16+r9]
+ movdqu xmm6,XMMWORD PTR[32+r8]
+DB 102,15,56,0,227
+ movdqu xmm13,XMMWORD PTR[32+r9]
+DB 102,68,15,56,0,219
+ movdqu xmm7,XMMWORD PTR[48+r8]
+ lea r8,QWORD PTR[64+r8]
+DB 102,15,56,0,235
+ movdqu xmm14,XMMWORD PTR[48+r9]
+ lea r9,QWORD PTR[64+r9]
+DB 102,68,15,56,0,227
+
+ movdqa XMMWORD PTR[80+rsp],xmm1
+ paddd xmm1,xmm4
+ movdqa XMMWORD PTR[112+rsp],xmm9
+ paddd xmm9,xmm11
+ movdqa XMMWORD PTR[64+rsp],xmm0
+ movdqa xmm2,xmm0
+ movdqa XMMWORD PTR[96+rsp],xmm8
+ movdqa xmm10,xmm8
+DB 15,58,204,193,0
+DB 15,56,200,213
+DB 69,15,58,204,193,0
+DB 69,15,56,200,212
+DB 102,15,56,0,243
+ prefetcht0 [127+r8]
+DB 15,56,201,229
+DB 102,68,15,56,0,235
+ prefetcht0 [127+r9]
+DB 69,15,56,201,220
+
+DB 102,15,56,0,251
+ movdqa xmm1,xmm0
+DB 102,68,15,56,0,243
+ movdqa xmm9,xmm8
+DB 15,58,204,194,0
+DB 15,56,200,206
+DB 69,15,58,204,194,0
+DB 69,15,56,200,205
+ pxor xmm4,xmm6
+DB 15,56,201,238
+ pxor xmm11,xmm13
+DB 69,15,56,201,229
+ movdqa xmm2,xmm0
+ movdqa xmm10,xmm8
+DB 15,58,204,193,0
+DB 15,56,200,215
+DB 69,15,58,204,193,0
+DB 69,15,56,200,214
+DB 15,56,202,231
+DB 69,15,56,202,222
+ pxor xmm5,xmm7
+DB 15,56,201,247
+ pxor xmm12,xmm14
+DB 69,15,56,201,238
+ movdqa xmm1,xmm0
+ movdqa xmm9,xmm8
+DB 15,58,204,194,0
+DB 15,56,200,204
+DB 69,15,58,204,194,0
+DB 69,15,56,200,203
+DB 15,56,202,236
+DB 69,15,56,202,227
+ pxor xmm6,xmm4
+DB 15,56,201,252
+ pxor xmm13,xmm11
+DB 69,15,56,201,243
+ movdqa xmm2,xmm0
+ movdqa xmm10,xmm8
+DB 15,58,204,193,0
+DB 15,56,200,213
+DB 69,15,58,204,193,0
+DB 69,15,56,200,212
+DB 15,56,202,245
+DB 69,15,56,202,236
+ pxor xmm7,xmm5
+DB 15,56,201,229
+ pxor xmm14,xmm12
+DB 69,15,56,201,220
+ movdqa xmm1,xmm0
+ movdqa xmm9,xmm8
+DB 15,58,204,194,1
+DB 15,56,200,206
+DB 69,15,58,204,194,1
+DB 69,15,56,200,205
+DB 15,56,202,254
+DB 69,15,56,202,245
+ pxor xmm4,xmm6
+DB 15,56,201,238
+ pxor xmm11,xmm13
+DB 69,15,56,201,229
+ movdqa xmm2,xmm0
+ movdqa xmm10,xmm8
+DB 15,58,204,193,1
+DB 15,56,200,215
+DB 69,15,58,204,193,1
+DB 69,15,56,200,214
+DB 15,56,202,231
+DB 69,15,56,202,222
+ pxor xmm5,xmm7
+DB 15,56,201,247
+ pxor xmm12,xmm14
+DB 69,15,56,201,238
+ movdqa xmm1,xmm0
+ movdqa xmm9,xmm8
+DB 15,58,204,194,1
+DB 15,56,200,204
+DB 69,15,58,204,194,1
+DB 69,15,56,200,203
+DB 15,56,202,236
+DB 69,15,56,202,227
+ pxor xmm6,xmm4
+DB 15,56,201,252
+ pxor xmm13,xmm11
+DB 69,15,56,201,243
+ movdqa xmm2,xmm0
+ movdqa xmm10,xmm8
+DB 15,58,204,193,1
+DB 15,56,200,213
+DB 69,15,58,204,193,1
+DB 69,15,56,200,212
+DB 15,56,202,245
+DB 69,15,56,202,236
+ pxor xmm7,xmm5
+DB 15,56,201,229
+ pxor xmm14,xmm12
+DB 69,15,56,201,220
+ movdqa xmm1,xmm0
+ movdqa xmm9,xmm8
+DB 15,58,204,194,1
+DB 15,56,200,206
+DB 69,15,58,204,194,1
+DB 69,15,56,200,205
+DB 15,56,202,254
+DB 69,15,56,202,245
+ pxor xmm4,xmm6
+DB 15,56,201,238
+ pxor xmm11,xmm13
+DB 69,15,56,201,229
+ movdqa xmm2,xmm0
+ movdqa xmm10,xmm8
+DB 15,58,204,193,2
+DB 15,56,200,215
+DB 69,15,58,204,193,2
+DB 69,15,56,200,214
+DB 15,56,202,231
+DB 69,15,56,202,222
+ pxor xmm5,xmm7
+DB 15,56,201,247
+ pxor xmm12,xmm14
+DB 69,15,56,201,238
+ movdqa xmm1,xmm0
+ movdqa xmm9,xmm8
+DB 15,58,204,194,2
+DB 15,56,200,204
+DB 69,15,58,204,194,2
+DB 69,15,56,200,203
+DB 15,56,202,236
+DB 69,15,56,202,227
+ pxor xmm6,xmm4
+DB 15,56,201,252
+ pxor xmm13,xmm11
+DB 69,15,56,201,243
+ movdqa xmm2,xmm0
+ movdqa xmm10,xmm8
+DB 15,58,204,193,2
+DB 15,56,200,213
+DB 69,15,58,204,193,2
+DB 69,15,56,200,212
+DB 15,56,202,245
+DB 69,15,56,202,236
+ pxor xmm7,xmm5
+DB 15,56,201,229
+ pxor xmm14,xmm12
+DB 69,15,56,201,220
+ movdqa xmm1,xmm0
+ movdqa xmm9,xmm8
+DB 15,58,204,194,2
+DB 15,56,200,206
+DB 69,15,58,204,194,2
+DB 69,15,56,200,205
+DB 15,56,202,254
+DB 69,15,56,202,245
+ pxor xmm4,xmm6
+DB 15,56,201,238
+ pxor xmm11,xmm13
+DB 69,15,56,201,229
+ movdqa xmm2,xmm0
+ movdqa xmm10,xmm8
+DB 15,58,204,193,2
+DB 15,56,200,215
+DB 69,15,58,204,193,2
+DB 69,15,56,200,214
+DB 15,56,202,231
+DB 69,15,56,202,222
+ pxor xmm5,xmm7
+DB 15,56,201,247
+ pxor xmm12,xmm14
+DB 69,15,56,201,238
+ movdqa xmm1,xmm0
+ movdqa xmm9,xmm8
+DB 15,58,204,194,3
+DB 15,56,200,204
+DB 69,15,58,204,194,3
+DB 69,15,56,200,203
+DB 15,56,202,236
+DB 69,15,56,202,227
+ pxor xmm6,xmm4
+DB 15,56,201,252
+ pxor xmm13,xmm11
+DB 69,15,56,201,243
+ movdqa xmm2,xmm0
+ movdqa xmm10,xmm8
+DB 15,58,204,193,3
+DB 15,56,200,213
+DB 69,15,58,204,193,3
+DB 69,15,56,200,212
+DB 15,56,202,245
+DB 69,15,56,202,236
+ pxor xmm7,xmm5
+ pxor xmm14,xmm12
+
+ mov ecx,1
+ pxor xmm4,xmm4
+ cmp ecx,DWORD PTR[rbx]
+ cmovge r8,rsp
+
+ movdqa xmm1,xmm0
+ movdqa xmm9,xmm8
+DB 15,58,204,194,3
+DB 15,56,200,206
+DB 69,15,58,204,194,3
+DB 69,15,56,200,205
+DB 15,56,202,254
+DB 69,15,56,202,245
+
+ cmp ecx,DWORD PTR[4+rbx]
+ cmovge r9,rsp
+ movq xmm6,QWORD PTR[rbx]
+
+ movdqa xmm2,xmm0
+ movdqa xmm10,xmm8
+DB 15,58,204,193,3
+DB 15,56,200,215
+DB 69,15,58,204,193,3
+DB 69,15,56,200,214
+
+ pshufd xmm11,xmm6,000h
+ pshufd xmm12,xmm6,055h
+ movdqa xmm7,xmm6
+ pcmpgtd xmm11,xmm4
+ pcmpgtd xmm12,xmm4
+
+ movdqa xmm1,xmm0
+ movdqa xmm9,xmm8
+DB 15,58,204,194,3
+DB 15,56,200,204
+DB 69,15,58,204,194,3
+DB 68,15,56,200,204
+
+ pcmpgtd xmm7,xmm4
+ pand xmm0,xmm11
+ pand xmm1,xmm11
+ pand xmm8,xmm12
+ pand xmm9,xmm12
+ paddd xmm6,xmm7
+
+ paddd xmm0,XMMWORD PTR[64+rsp]
+ paddd xmm1,XMMWORD PTR[80+rsp]
+ paddd xmm8,XMMWORD PTR[96+rsp]
+ paddd xmm9,XMMWORD PTR[112+rsp]
+
+ movq QWORD PTR[rbx],xmm6
+ dec edx
+ jnz $L$oop_shaext
+
+ mov edx,DWORD PTR[280+rsp]
+
+ pshufd xmm0,xmm0,27
+ pshufd xmm8,xmm8,27
+
+ movdqa xmm6,xmm0
+ punpckldq xmm0,xmm8
+ punpckhdq xmm6,xmm8
+ punpckhdq xmm1,xmm9
+ movq QWORD PTR[(0-64)+rdi],xmm0
+ psrldq xmm0,8
+ movq QWORD PTR[(64-64)+rdi],xmm6
+ psrldq xmm6,8
+ movq QWORD PTR[(32-64)+rdi],xmm0
+ psrldq xmm1,8
+ movq QWORD PTR[(96-64)+rdi],xmm6
+ movq QWORD PTR[(128-64)+rdi],xmm1
+
+ lea rdi,QWORD PTR[8+rdi]
+ lea rsi,QWORD PTR[32+rsi]
+ dec edx
+ jnz $L$oop_grande_shaext
+
+$L$done_shaext::
+
+ movaps xmm6,XMMWORD PTR[((-184))+rax]
+ movaps xmm7,XMMWORD PTR[((-168))+rax]
+ movaps xmm8,XMMWORD PTR[((-152))+rax]
+ movaps xmm9,XMMWORD PTR[((-136))+rax]
+ movaps xmm10,XMMWORD PTR[((-120))+rax]
+ movaps xmm11,XMMWORD PTR[((-104))+rax]
+ movaps xmm12,XMMWORD PTR[((-88))+rax]
+ movaps xmm13,XMMWORD PTR[((-72))+rax]
+ movaps xmm14,XMMWORD PTR[((-56))+rax]
+ movaps xmm15,XMMWORD PTR[((-40))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$epilogue_shaext::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha1_multi_block_shaext::
+sha1_multi_block_shaext ENDP
+
+ALIGN 32
+sha1_multi_block_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha1_multi_block_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+_avx_shortcut::
+ shr rcx,32
+ cmp edx,2
+ jb $L$avx
+ test ecx,32
+ jnz _avx2_shortcut
+ jmp $L$avx
+ALIGN 32
+$L$avx::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[(-120)+rax],xmm10
+ movaps XMMWORD PTR[(-104)+rax],xmm11
+ movaps XMMWORD PTR[(-88)+rax],xmm12
+ movaps XMMWORD PTR[(-72)+rax],xmm13
+ movaps XMMWORD PTR[(-56)+rax],xmm14
+ movaps XMMWORD PTR[(-40)+rax],xmm15
+ sub rsp,288
+ and rsp,-256
+ mov QWORD PTR[272+rsp],rax
+
+$L$body_avx::
+ lea rbp,QWORD PTR[K_XX_XX]
+ lea rbx,QWORD PTR[256+rsp]
+
+ vzeroupper
+$L$oop_grande_avx::
+ mov DWORD PTR[280+rsp],edx
+ xor edx,edx
+ mov r8,QWORD PTR[rsi]
+ mov ecx,DWORD PTR[8+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[rbx],ecx
+ cmovle r8,rbp
+ mov r9,QWORD PTR[16+rsi]
+ mov ecx,DWORD PTR[24+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[4+rbx],ecx
+ cmovle r9,rbp
+ mov r10,QWORD PTR[32+rsi]
+ mov ecx,DWORD PTR[40+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[8+rbx],ecx
+ cmovle r10,rbp
+ mov r11,QWORD PTR[48+rsi]
+ mov ecx,DWORD PTR[56+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[12+rbx],ecx
+ cmovle r11,rbp
+ test edx,edx
+ jz $L$done_avx
+
+ vmovdqu xmm10,XMMWORD PTR[rdi]
+ lea rax,QWORD PTR[128+rsp]
+ vmovdqu xmm11,XMMWORD PTR[32+rdi]
+ vmovdqu xmm12,XMMWORD PTR[64+rdi]
+ vmovdqu xmm13,XMMWORD PTR[96+rdi]
+ vmovdqu xmm14,XMMWORD PTR[128+rdi]
+ vmovdqu xmm5,XMMWORD PTR[96+rbp]
+ jmp $L$oop_avx
+
+ALIGN 32
+$L$oop_avx::
+ vmovdqa xmm15,XMMWORD PTR[((-32))+rbp]
+ vmovd xmm0,DWORD PTR[r8]
+ lea r8,QWORD PTR[64+r8]
+ vmovd xmm2,DWORD PTR[r9]
+ lea r9,QWORD PTR[64+r9]
+ vpinsrd xmm0,xmm0,DWORD PTR[r10],1
+ lea r10,QWORD PTR[64+r10]
+ vpinsrd xmm2,xmm2,DWORD PTR[r11],1
+ lea r11,QWORD PTR[64+r11]
+ vmovd xmm1,DWORD PTR[((-60))+r8]
+ vpunpckldq xmm0,xmm0,xmm2
+ vmovd xmm9,DWORD PTR[((-60))+r9]
+ vpshufb xmm0,xmm0,xmm5
+ vpinsrd xmm1,xmm1,DWORD PTR[((-60))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-60))+r11],1
+ vpaddd xmm14,xmm14,xmm15
+ vpslld xmm8,xmm10,5
+ vpandn xmm7,xmm11,xmm13
+ vpand xmm6,xmm11,xmm12
+
+ vmovdqa XMMWORD PTR[(0-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpunpckldq xmm1,xmm1,xmm9
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm2,DWORD PTR[((-56))+r8]
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-56))+r9]
+ vpaddd xmm14,xmm14,xmm6
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpshufb xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpinsrd xmm2,xmm2,DWORD PTR[((-56))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-56))+r11],1
+ vpaddd xmm13,xmm13,xmm15
+ vpslld xmm8,xmm14,5
+ vpandn xmm7,xmm10,xmm12
+ vpand xmm6,xmm10,xmm11
+
+ vmovdqa XMMWORD PTR[(16-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpunpckldq xmm2,xmm2,xmm9
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm3,DWORD PTR[((-52))+r8]
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-52))+r9]
+ vpaddd xmm13,xmm13,xmm6
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpshufb xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpinsrd xmm3,xmm3,DWORD PTR[((-52))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-52))+r11],1
+ vpaddd xmm12,xmm12,xmm15
+ vpslld xmm8,xmm13,5
+ vpandn xmm7,xmm14,xmm11
+ vpand xmm6,xmm14,xmm10
+
+ vmovdqa XMMWORD PTR[(32-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpunpckldq xmm3,xmm3,xmm9
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm4,DWORD PTR[((-48))+r8]
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-48))+r9]
+ vpaddd xmm12,xmm12,xmm6
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpshufb xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpinsrd xmm4,xmm4,DWORD PTR[((-48))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-48))+r11],1
+ vpaddd xmm11,xmm11,xmm15
+ vpslld xmm8,xmm12,5
+ vpandn xmm7,xmm13,xmm10
+ vpand xmm6,xmm13,xmm14
+
+ vmovdqa XMMWORD PTR[(48-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpunpckldq xmm4,xmm4,xmm9
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm0,DWORD PTR[((-44))+r8]
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-44))+r9]
+ vpaddd xmm11,xmm11,xmm6
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpshufb xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpinsrd xmm0,xmm0,DWORD PTR[((-44))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-44))+r11],1
+ vpaddd xmm10,xmm10,xmm15
+ vpslld xmm8,xmm11,5
+ vpandn xmm7,xmm12,xmm14
+ vpand xmm6,xmm12,xmm13
+
+ vmovdqa XMMWORD PTR[(64-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpunpckldq xmm0,xmm0,xmm9
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm1,DWORD PTR[((-40))+r8]
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-40))+r9]
+ vpaddd xmm10,xmm10,xmm6
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpshufb xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpinsrd xmm1,xmm1,DWORD PTR[((-40))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-40))+r11],1
+ vpaddd xmm14,xmm14,xmm15
+ vpslld xmm8,xmm10,5
+ vpandn xmm7,xmm11,xmm13
+ vpand xmm6,xmm11,xmm12
+
+ vmovdqa XMMWORD PTR[(80-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpunpckldq xmm1,xmm1,xmm9
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm2,DWORD PTR[((-36))+r8]
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-36))+r9]
+ vpaddd xmm14,xmm14,xmm6
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpshufb xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpinsrd xmm2,xmm2,DWORD PTR[((-36))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-36))+r11],1
+ vpaddd xmm13,xmm13,xmm15
+ vpslld xmm8,xmm14,5
+ vpandn xmm7,xmm10,xmm12
+ vpand xmm6,xmm10,xmm11
+
+ vmovdqa XMMWORD PTR[(96-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpunpckldq xmm2,xmm2,xmm9
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm3,DWORD PTR[((-32))+r8]
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-32))+r9]
+ vpaddd xmm13,xmm13,xmm6
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpshufb xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpinsrd xmm3,xmm3,DWORD PTR[((-32))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-32))+r11],1
+ vpaddd xmm12,xmm12,xmm15
+ vpslld xmm8,xmm13,5
+ vpandn xmm7,xmm14,xmm11
+ vpand xmm6,xmm14,xmm10
+
+ vmovdqa XMMWORD PTR[(112-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpunpckldq xmm3,xmm3,xmm9
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm4,DWORD PTR[((-28))+r8]
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-28))+r9]
+ vpaddd xmm12,xmm12,xmm6
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpshufb xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpinsrd xmm4,xmm4,DWORD PTR[((-28))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-28))+r11],1
+ vpaddd xmm11,xmm11,xmm15
+ vpslld xmm8,xmm12,5
+ vpandn xmm7,xmm13,xmm10
+ vpand xmm6,xmm13,xmm14
+
+ vmovdqa XMMWORD PTR[(128-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpunpckldq xmm4,xmm4,xmm9
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm0,DWORD PTR[((-24))+r8]
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-24))+r9]
+ vpaddd xmm11,xmm11,xmm6
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpshufb xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpinsrd xmm0,xmm0,DWORD PTR[((-24))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-24))+r11],1
+ vpaddd xmm10,xmm10,xmm15
+ vpslld xmm8,xmm11,5
+ vpandn xmm7,xmm12,xmm14
+ vpand xmm6,xmm12,xmm13
+
+ vmovdqa XMMWORD PTR[(144-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpunpckldq xmm0,xmm0,xmm9
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm1,DWORD PTR[((-20))+r8]
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-20))+r9]
+ vpaddd xmm10,xmm10,xmm6
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpshufb xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpinsrd xmm1,xmm1,DWORD PTR[((-20))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-20))+r11],1
+ vpaddd xmm14,xmm14,xmm15
+ vpslld xmm8,xmm10,5
+ vpandn xmm7,xmm11,xmm13
+ vpand xmm6,xmm11,xmm12
+
+ vmovdqa XMMWORD PTR[(160-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpunpckldq xmm1,xmm1,xmm9
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm2,DWORD PTR[((-16))+r8]
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-16))+r9]
+ vpaddd xmm14,xmm14,xmm6
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpshufb xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpinsrd xmm2,xmm2,DWORD PTR[((-16))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-16))+r11],1
+ vpaddd xmm13,xmm13,xmm15
+ vpslld xmm8,xmm14,5
+ vpandn xmm7,xmm10,xmm12
+ vpand xmm6,xmm10,xmm11
+
+ vmovdqa XMMWORD PTR[(176-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpunpckldq xmm2,xmm2,xmm9
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm3,DWORD PTR[((-12))+r8]
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-12))+r9]
+ vpaddd xmm13,xmm13,xmm6
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpshufb xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpinsrd xmm3,xmm3,DWORD PTR[((-12))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-12))+r11],1
+ vpaddd xmm12,xmm12,xmm15
+ vpslld xmm8,xmm13,5
+ vpandn xmm7,xmm14,xmm11
+ vpand xmm6,xmm14,xmm10
+
+ vmovdqa XMMWORD PTR[(192-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpunpckldq xmm3,xmm3,xmm9
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm4,DWORD PTR[((-8))+r8]
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-8))+r9]
+ vpaddd xmm12,xmm12,xmm6
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpshufb xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpinsrd xmm4,xmm4,DWORD PTR[((-8))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-8))+r11],1
+ vpaddd xmm11,xmm11,xmm15
+ vpslld xmm8,xmm12,5
+ vpandn xmm7,xmm13,xmm10
+ vpand xmm6,xmm13,xmm14
+
+ vmovdqa XMMWORD PTR[(208-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpunpckldq xmm4,xmm4,xmm9
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm7
+ vmovd xmm0,DWORD PTR[((-4))+r8]
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vmovd xmm9,DWORD PTR[((-4))+r9]
+ vpaddd xmm11,xmm11,xmm6
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpshufb xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vmovdqa xmm1,XMMWORD PTR[((0-128))+rax]
+ vpinsrd xmm0,xmm0,DWORD PTR[((-4))+r10],1
+ vpinsrd xmm9,xmm9,DWORD PTR[((-4))+r11],1
+ vpaddd xmm10,xmm10,xmm15
+ prefetcht0 [63+r8]
+ vpslld xmm8,xmm11,5
+ vpandn xmm7,xmm12,xmm14
+ vpand xmm6,xmm12,xmm13
+
+ vmovdqa XMMWORD PTR[(224-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpunpckldq xmm0,xmm0,xmm9
+ vpsrld xmm9,xmm11,27
+ prefetcht0 [63+r9]
+ vpxor xmm6,xmm6,xmm7
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ prefetcht0 [63+r10]
+ vpaddd xmm10,xmm10,xmm6
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ prefetcht0 [63+r11]
+ vpshufb xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vmovdqa xmm2,XMMWORD PTR[((16-128))+rax]
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((32-128))+rax]
+
+ vpaddd xmm14,xmm14,xmm15
+ vpslld xmm8,xmm10,5
+ vpandn xmm7,xmm11,xmm13
+
+ vpand xmm6,xmm11,xmm12
+
+ vmovdqa XMMWORD PTR[(240-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpxor xmm1,xmm1,XMMWORD PTR[((128-128))+rax]
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm7
+ vpxor xmm1,xmm1,xmm3
+
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm14,xmm14,xmm6
+
+ vpsrld xmm5,xmm1,31
+ vpaddd xmm1,xmm1,xmm1
+
+ vpsrld xmm11,xmm11,2
+
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((48-128))+rax]
+
+ vpaddd xmm13,xmm13,xmm15
+ vpslld xmm8,xmm14,5
+ vpandn xmm7,xmm10,xmm12
+
+ vpand xmm6,xmm10,xmm11
+
+ vmovdqa XMMWORD PTR[(0-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpxor xmm2,xmm2,XMMWORD PTR[((144-128))+rax]
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm7
+ vpxor xmm2,xmm2,xmm4
+
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm13,xmm13,xmm6
+
+ vpsrld xmm5,xmm2,31
+ vpaddd xmm2,xmm2,xmm2
+
+ vpsrld xmm10,xmm10,2
+
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((64-128))+rax]
+
+ vpaddd xmm12,xmm12,xmm15
+ vpslld xmm8,xmm13,5
+ vpandn xmm7,xmm14,xmm11
+
+ vpand xmm6,xmm14,xmm10
+
+ vmovdqa XMMWORD PTR[(16-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpxor xmm3,xmm3,XMMWORD PTR[((160-128))+rax]
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm7
+ vpxor xmm3,xmm3,xmm0
+
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm12,xmm12,xmm6
+
+ vpsrld xmm5,xmm3,31
+ vpaddd xmm3,xmm3,xmm3
+
+ vpsrld xmm14,xmm14,2
+
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((80-128))+rax]
+
+ vpaddd xmm11,xmm11,xmm15
+ vpslld xmm8,xmm12,5
+ vpandn xmm7,xmm13,xmm10
+
+ vpand xmm6,xmm13,xmm14
+
+ vmovdqa XMMWORD PTR[(32-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm4,XMMWORD PTR[((176-128))+rax]
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm7
+ vpxor xmm4,xmm4,xmm1
+
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm11,xmm11,xmm6
+
+ vpsrld xmm5,xmm4,31
+ vpaddd xmm4,xmm4,xmm4
+
+ vpsrld xmm13,xmm13,2
+
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((96-128))+rax]
+
+ vpaddd xmm10,xmm10,xmm15
+ vpslld xmm8,xmm11,5
+ vpandn xmm7,xmm12,xmm14
+
+ vpand xmm6,xmm12,xmm13
+
+ vmovdqa XMMWORD PTR[(48-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpxor xmm0,xmm0,XMMWORD PTR[((192-128))+rax]
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm6,xmm7
+ vpxor xmm0,xmm0,xmm2
+
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm10,xmm10,xmm6
+
+ vpsrld xmm5,xmm0,31
+ vpaddd xmm0,xmm0,xmm0
+
+ vpsrld xmm12,xmm12,2
+
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vmovdqa xmm15,XMMWORD PTR[rbp]
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((112-128))+rax]
+
+ vpslld xmm8,xmm10,5
+ vpaddd xmm14,xmm14,xmm15
+ vpxor xmm6,xmm13,xmm11
+ vmovdqa XMMWORD PTR[(64-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpxor xmm1,xmm1,XMMWORD PTR[((208-128))+rax]
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm14,xmm14,xmm6
+ vpsrld xmm5,xmm1,31
+ vpaddd xmm1,xmm1,xmm1
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((128-128))+rax]
+
+ vpslld xmm8,xmm14,5
+ vpaddd xmm13,xmm13,xmm15
+ vpxor xmm6,xmm12,xmm10
+ vmovdqa XMMWORD PTR[(80-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpxor xmm2,xmm2,XMMWORD PTR[((224-128))+rax]
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm13,xmm13,xmm6
+ vpsrld xmm5,xmm2,31
+ vpaddd xmm2,xmm2,xmm2
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((144-128))+rax]
+
+ vpslld xmm8,xmm13,5
+ vpaddd xmm12,xmm12,xmm15
+ vpxor xmm6,xmm11,xmm14
+ vmovdqa XMMWORD PTR[(96-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpxor xmm3,xmm3,XMMWORD PTR[((240-128))+rax]
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm12,xmm12,xmm6
+ vpsrld xmm5,xmm3,31
+ vpaddd xmm3,xmm3,xmm3
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((160-128))+rax]
+
+ vpslld xmm8,xmm12,5
+ vpaddd xmm11,xmm11,xmm15
+ vpxor xmm6,xmm10,xmm13
+ vmovdqa XMMWORD PTR[(112-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm4,XMMWORD PTR[((0-128))+rax]
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm11,xmm11,xmm6
+ vpsrld xmm5,xmm4,31
+ vpaddd xmm4,xmm4,xmm4
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((176-128))+rax]
+
+ vpslld xmm8,xmm11,5
+ vpaddd xmm10,xmm10,xmm15
+ vpxor xmm6,xmm14,xmm12
+ vmovdqa XMMWORD PTR[(128-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpxor xmm0,xmm0,XMMWORD PTR[((16-128))+rax]
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm6,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm10,xmm10,xmm6
+ vpsrld xmm5,xmm0,31
+ vpaddd xmm0,xmm0,xmm0
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((192-128))+rax]
+
+ vpslld xmm8,xmm10,5
+ vpaddd xmm14,xmm14,xmm15
+ vpxor xmm6,xmm13,xmm11
+ vmovdqa XMMWORD PTR[(144-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpxor xmm1,xmm1,XMMWORD PTR[((32-128))+rax]
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm14,xmm14,xmm6
+ vpsrld xmm5,xmm1,31
+ vpaddd xmm1,xmm1,xmm1
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((208-128))+rax]
+
+ vpslld xmm8,xmm14,5
+ vpaddd xmm13,xmm13,xmm15
+ vpxor xmm6,xmm12,xmm10
+ vmovdqa XMMWORD PTR[(160-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpxor xmm2,xmm2,XMMWORD PTR[((48-128))+rax]
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm13,xmm13,xmm6
+ vpsrld xmm5,xmm2,31
+ vpaddd xmm2,xmm2,xmm2
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((224-128))+rax]
+
+ vpslld xmm8,xmm13,5
+ vpaddd xmm12,xmm12,xmm15
+ vpxor xmm6,xmm11,xmm14
+ vmovdqa XMMWORD PTR[(176-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpxor xmm3,xmm3,XMMWORD PTR[((64-128))+rax]
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm12,xmm12,xmm6
+ vpsrld xmm5,xmm3,31
+ vpaddd xmm3,xmm3,xmm3
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((240-128))+rax]
+
+ vpslld xmm8,xmm12,5
+ vpaddd xmm11,xmm11,xmm15
+ vpxor xmm6,xmm10,xmm13
+ vmovdqa XMMWORD PTR[(192-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm4,XMMWORD PTR[((80-128))+rax]
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm11,xmm11,xmm6
+ vpsrld xmm5,xmm4,31
+ vpaddd xmm4,xmm4,xmm4
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((0-128))+rax]
+
+ vpslld xmm8,xmm11,5
+ vpaddd xmm10,xmm10,xmm15
+ vpxor xmm6,xmm14,xmm12
+ vmovdqa XMMWORD PTR[(208-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpxor xmm0,xmm0,XMMWORD PTR[((96-128))+rax]
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm6,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm10,xmm10,xmm6
+ vpsrld xmm5,xmm0,31
+ vpaddd xmm0,xmm0,xmm0
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((16-128))+rax]
+
+ vpslld xmm8,xmm10,5
+ vpaddd xmm14,xmm14,xmm15
+ vpxor xmm6,xmm13,xmm11
+ vmovdqa XMMWORD PTR[(224-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpxor xmm1,xmm1,XMMWORD PTR[((112-128))+rax]
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm14,xmm14,xmm6
+ vpsrld xmm5,xmm1,31
+ vpaddd xmm1,xmm1,xmm1
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((32-128))+rax]
+
+ vpslld xmm8,xmm14,5
+ vpaddd xmm13,xmm13,xmm15
+ vpxor xmm6,xmm12,xmm10
+ vmovdqa XMMWORD PTR[(240-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpxor xmm2,xmm2,XMMWORD PTR[((128-128))+rax]
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm13,xmm13,xmm6
+ vpsrld xmm5,xmm2,31
+ vpaddd xmm2,xmm2,xmm2
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((48-128))+rax]
+
+ vpslld xmm8,xmm13,5
+ vpaddd xmm12,xmm12,xmm15
+ vpxor xmm6,xmm11,xmm14
+ vmovdqa XMMWORD PTR[(0-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpxor xmm3,xmm3,XMMWORD PTR[((144-128))+rax]
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm12,xmm12,xmm6
+ vpsrld xmm5,xmm3,31
+ vpaddd xmm3,xmm3,xmm3
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((64-128))+rax]
+
+ vpslld xmm8,xmm12,5
+ vpaddd xmm11,xmm11,xmm15
+ vpxor xmm6,xmm10,xmm13
+ vmovdqa XMMWORD PTR[(16-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm4,XMMWORD PTR[((160-128))+rax]
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm11,xmm11,xmm6
+ vpsrld xmm5,xmm4,31
+ vpaddd xmm4,xmm4,xmm4
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((80-128))+rax]
+
+ vpslld xmm8,xmm11,5
+ vpaddd xmm10,xmm10,xmm15
+ vpxor xmm6,xmm14,xmm12
+ vmovdqa XMMWORD PTR[(32-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpxor xmm0,xmm0,XMMWORD PTR[((176-128))+rax]
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm6,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm10,xmm10,xmm6
+ vpsrld xmm5,xmm0,31
+ vpaddd xmm0,xmm0,xmm0
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((96-128))+rax]
+
+ vpslld xmm8,xmm10,5
+ vpaddd xmm14,xmm14,xmm15
+ vpxor xmm6,xmm13,xmm11
+ vmovdqa XMMWORD PTR[(48-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpxor xmm1,xmm1,XMMWORD PTR[((192-128))+rax]
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm14,xmm14,xmm6
+ vpsrld xmm5,xmm1,31
+ vpaddd xmm1,xmm1,xmm1
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((112-128))+rax]
+
+ vpslld xmm8,xmm14,5
+ vpaddd xmm13,xmm13,xmm15
+ vpxor xmm6,xmm12,xmm10
+ vmovdqa XMMWORD PTR[(64-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpxor xmm2,xmm2,XMMWORD PTR[((208-128))+rax]
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm13,xmm13,xmm6
+ vpsrld xmm5,xmm2,31
+ vpaddd xmm2,xmm2,xmm2
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((128-128))+rax]
+
+ vpslld xmm8,xmm13,5
+ vpaddd xmm12,xmm12,xmm15
+ vpxor xmm6,xmm11,xmm14
+ vmovdqa XMMWORD PTR[(80-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpxor xmm3,xmm3,XMMWORD PTR[((224-128))+rax]
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm12,xmm12,xmm6
+ vpsrld xmm5,xmm3,31
+ vpaddd xmm3,xmm3,xmm3
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((144-128))+rax]
+
+ vpslld xmm8,xmm12,5
+ vpaddd xmm11,xmm11,xmm15
+ vpxor xmm6,xmm10,xmm13
+ vmovdqa XMMWORD PTR[(96-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm4,XMMWORD PTR[((240-128))+rax]
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm11,xmm11,xmm6
+ vpsrld xmm5,xmm4,31
+ vpaddd xmm4,xmm4,xmm4
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((160-128))+rax]
+
+ vpslld xmm8,xmm11,5
+ vpaddd xmm10,xmm10,xmm15
+ vpxor xmm6,xmm14,xmm12
+ vmovdqa XMMWORD PTR[(112-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpxor xmm0,xmm0,XMMWORD PTR[((0-128))+rax]
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm6,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm10,xmm10,xmm6
+ vpsrld xmm5,xmm0,31
+ vpaddd xmm0,xmm0,xmm0
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vmovdqa xmm15,XMMWORD PTR[32+rbp]
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((176-128))+rax]
+
+ vpaddd xmm14,xmm14,xmm15
+ vpslld xmm8,xmm10,5
+ vpand xmm7,xmm13,xmm12
+ vpxor xmm1,xmm1,XMMWORD PTR[((16-128))+rax]
+
+ vpaddd xmm14,xmm14,xmm7
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm13,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vmovdqu XMMWORD PTR[(128-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm1,31
+ vpand xmm6,xmm6,xmm11
+ vpaddd xmm1,xmm1,xmm1
+
+ vpslld xmm7,xmm11,30
+ vpaddd xmm14,xmm14,xmm6
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((192-128))+rax]
+
+ vpaddd xmm13,xmm13,xmm15
+ vpslld xmm8,xmm14,5
+ vpand xmm7,xmm12,xmm11
+ vpxor xmm2,xmm2,XMMWORD PTR[((32-128))+rax]
+
+ vpaddd xmm13,xmm13,xmm7
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm12,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vmovdqu XMMWORD PTR[(144-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm2,31
+ vpand xmm6,xmm6,xmm10
+ vpaddd xmm2,xmm2,xmm2
+
+ vpslld xmm7,xmm10,30
+ vpaddd xmm13,xmm13,xmm6
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((208-128))+rax]
+
+ vpaddd xmm12,xmm12,xmm15
+ vpslld xmm8,xmm13,5
+ vpand xmm7,xmm11,xmm10
+ vpxor xmm3,xmm3,XMMWORD PTR[((48-128))+rax]
+
+ vpaddd xmm12,xmm12,xmm7
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm11,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vmovdqu XMMWORD PTR[(160-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm3,31
+ vpand xmm6,xmm6,xmm14
+ vpaddd xmm3,xmm3,xmm3
+
+ vpslld xmm7,xmm14,30
+ vpaddd xmm12,xmm12,xmm6
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((224-128))+rax]
+
+ vpaddd xmm11,xmm11,xmm15
+ vpslld xmm8,xmm12,5
+ vpand xmm7,xmm10,xmm14
+ vpxor xmm4,xmm4,XMMWORD PTR[((64-128))+rax]
+
+ vpaddd xmm11,xmm11,xmm7
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm10,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vmovdqu XMMWORD PTR[(176-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm4,31
+ vpand xmm6,xmm6,xmm13
+ vpaddd xmm4,xmm4,xmm4
+
+ vpslld xmm7,xmm13,30
+ vpaddd xmm11,xmm11,xmm6
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((240-128))+rax]
+
+ vpaddd xmm10,xmm10,xmm15
+ vpslld xmm8,xmm11,5
+ vpand xmm7,xmm14,xmm13
+ vpxor xmm0,xmm0,XMMWORD PTR[((80-128))+rax]
+
+ vpaddd xmm10,xmm10,xmm7
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm14,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vmovdqu XMMWORD PTR[(192-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm0,31
+ vpand xmm6,xmm6,xmm12
+ vpaddd xmm0,xmm0,xmm0
+
+ vpslld xmm7,xmm12,30
+ vpaddd xmm10,xmm10,xmm6
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((0-128))+rax]
+
+ vpaddd xmm14,xmm14,xmm15
+ vpslld xmm8,xmm10,5
+ vpand xmm7,xmm13,xmm12
+ vpxor xmm1,xmm1,XMMWORD PTR[((96-128))+rax]
+
+ vpaddd xmm14,xmm14,xmm7
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm13,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vmovdqu XMMWORD PTR[(208-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm1,31
+ vpand xmm6,xmm6,xmm11
+ vpaddd xmm1,xmm1,xmm1
+
+ vpslld xmm7,xmm11,30
+ vpaddd xmm14,xmm14,xmm6
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((16-128))+rax]
+
+ vpaddd xmm13,xmm13,xmm15
+ vpslld xmm8,xmm14,5
+ vpand xmm7,xmm12,xmm11
+ vpxor xmm2,xmm2,XMMWORD PTR[((112-128))+rax]
+
+ vpaddd xmm13,xmm13,xmm7
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm12,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vmovdqu XMMWORD PTR[(224-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm2,31
+ vpand xmm6,xmm6,xmm10
+ vpaddd xmm2,xmm2,xmm2
+
+ vpslld xmm7,xmm10,30
+ vpaddd xmm13,xmm13,xmm6
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((32-128))+rax]
+
+ vpaddd xmm12,xmm12,xmm15
+ vpslld xmm8,xmm13,5
+ vpand xmm7,xmm11,xmm10
+ vpxor xmm3,xmm3,XMMWORD PTR[((128-128))+rax]
+
+ vpaddd xmm12,xmm12,xmm7
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm11,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vmovdqu XMMWORD PTR[(240-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm3,31
+ vpand xmm6,xmm6,xmm14
+ vpaddd xmm3,xmm3,xmm3
+
+ vpslld xmm7,xmm14,30
+ vpaddd xmm12,xmm12,xmm6
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((48-128))+rax]
+
+ vpaddd xmm11,xmm11,xmm15
+ vpslld xmm8,xmm12,5
+ vpand xmm7,xmm10,xmm14
+ vpxor xmm4,xmm4,XMMWORD PTR[((144-128))+rax]
+
+ vpaddd xmm11,xmm11,xmm7
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm10,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vmovdqu XMMWORD PTR[(0-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm4,31
+ vpand xmm6,xmm6,xmm13
+ vpaddd xmm4,xmm4,xmm4
+
+ vpslld xmm7,xmm13,30
+ vpaddd xmm11,xmm11,xmm6
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((64-128))+rax]
+
+ vpaddd xmm10,xmm10,xmm15
+ vpslld xmm8,xmm11,5
+ vpand xmm7,xmm14,xmm13
+ vpxor xmm0,xmm0,XMMWORD PTR[((160-128))+rax]
+
+ vpaddd xmm10,xmm10,xmm7
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm14,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vmovdqu XMMWORD PTR[(16-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm0,31
+ vpand xmm6,xmm6,xmm12
+ vpaddd xmm0,xmm0,xmm0
+
+ vpslld xmm7,xmm12,30
+ vpaddd xmm10,xmm10,xmm6
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((80-128))+rax]
+
+ vpaddd xmm14,xmm14,xmm15
+ vpslld xmm8,xmm10,5
+ vpand xmm7,xmm13,xmm12
+ vpxor xmm1,xmm1,XMMWORD PTR[((176-128))+rax]
+
+ vpaddd xmm14,xmm14,xmm7
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm13,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vmovdqu XMMWORD PTR[(32-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm1,31
+ vpand xmm6,xmm6,xmm11
+ vpaddd xmm1,xmm1,xmm1
+
+ vpslld xmm7,xmm11,30
+ vpaddd xmm14,xmm14,xmm6
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((96-128))+rax]
+
+ vpaddd xmm13,xmm13,xmm15
+ vpslld xmm8,xmm14,5
+ vpand xmm7,xmm12,xmm11
+ vpxor xmm2,xmm2,XMMWORD PTR[((192-128))+rax]
+
+ vpaddd xmm13,xmm13,xmm7
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm12,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vmovdqu XMMWORD PTR[(48-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm2,31
+ vpand xmm6,xmm6,xmm10
+ vpaddd xmm2,xmm2,xmm2
+
+ vpslld xmm7,xmm10,30
+ vpaddd xmm13,xmm13,xmm6
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((112-128))+rax]
+
+ vpaddd xmm12,xmm12,xmm15
+ vpslld xmm8,xmm13,5
+ vpand xmm7,xmm11,xmm10
+ vpxor xmm3,xmm3,XMMWORD PTR[((208-128))+rax]
+
+ vpaddd xmm12,xmm12,xmm7
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm11,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vmovdqu XMMWORD PTR[(64-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm3,31
+ vpand xmm6,xmm6,xmm14
+ vpaddd xmm3,xmm3,xmm3
+
+ vpslld xmm7,xmm14,30
+ vpaddd xmm12,xmm12,xmm6
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((128-128))+rax]
+
+ vpaddd xmm11,xmm11,xmm15
+ vpslld xmm8,xmm12,5
+ vpand xmm7,xmm10,xmm14
+ vpxor xmm4,xmm4,XMMWORD PTR[((224-128))+rax]
+
+ vpaddd xmm11,xmm11,xmm7
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm10,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vmovdqu XMMWORD PTR[(80-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm4,31
+ vpand xmm6,xmm6,xmm13
+ vpaddd xmm4,xmm4,xmm4
+
+ vpslld xmm7,xmm13,30
+ vpaddd xmm11,xmm11,xmm6
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((144-128))+rax]
+
+ vpaddd xmm10,xmm10,xmm15
+ vpslld xmm8,xmm11,5
+ vpand xmm7,xmm14,xmm13
+ vpxor xmm0,xmm0,XMMWORD PTR[((240-128))+rax]
+
+ vpaddd xmm10,xmm10,xmm7
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm14,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vmovdqu XMMWORD PTR[(96-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm0,31
+ vpand xmm6,xmm6,xmm12
+ vpaddd xmm0,xmm0,xmm0
+
+ vpslld xmm7,xmm12,30
+ vpaddd xmm10,xmm10,xmm6
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((160-128))+rax]
+
+ vpaddd xmm14,xmm14,xmm15
+ vpslld xmm8,xmm10,5
+ vpand xmm7,xmm13,xmm12
+ vpxor xmm1,xmm1,XMMWORD PTR[((0-128))+rax]
+
+ vpaddd xmm14,xmm14,xmm7
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm13,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vmovdqu XMMWORD PTR[(112-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm1,31
+ vpand xmm6,xmm6,xmm11
+ vpaddd xmm1,xmm1,xmm1
+
+ vpslld xmm7,xmm11,30
+ vpaddd xmm14,xmm14,xmm6
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((176-128))+rax]
+
+ vpaddd xmm13,xmm13,xmm15
+ vpslld xmm8,xmm14,5
+ vpand xmm7,xmm12,xmm11
+ vpxor xmm2,xmm2,XMMWORD PTR[((16-128))+rax]
+
+ vpaddd xmm13,xmm13,xmm7
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm12,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vmovdqu XMMWORD PTR[(128-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm2,31
+ vpand xmm6,xmm6,xmm10
+ vpaddd xmm2,xmm2,xmm2
+
+ vpslld xmm7,xmm10,30
+ vpaddd xmm13,xmm13,xmm6
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((192-128))+rax]
+
+ vpaddd xmm12,xmm12,xmm15
+ vpslld xmm8,xmm13,5
+ vpand xmm7,xmm11,xmm10
+ vpxor xmm3,xmm3,XMMWORD PTR[((32-128))+rax]
+
+ vpaddd xmm12,xmm12,xmm7
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm11,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vmovdqu XMMWORD PTR[(144-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm3,31
+ vpand xmm6,xmm6,xmm14
+ vpaddd xmm3,xmm3,xmm3
+
+ vpslld xmm7,xmm14,30
+ vpaddd xmm12,xmm12,xmm6
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((208-128))+rax]
+
+ vpaddd xmm11,xmm11,xmm15
+ vpslld xmm8,xmm12,5
+ vpand xmm7,xmm10,xmm14
+ vpxor xmm4,xmm4,XMMWORD PTR[((48-128))+rax]
+
+ vpaddd xmm11,xmm11,xmm7
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm10,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vmovdqu XMMWORD PTR[(160-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm4,31
+ vpand xmm6,xmm6,xmm13
+ vpaddd xmm4,xmm4,xmm4
+
+ vpslld xmm7,xmm13,30
+ vpaddd xmm11,xmm11,xmm6
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((224-128))+rax]
+
+ vpaddd xmm10,xmm10,xmm15
+ vpslld xmm8,xmm11,5
+ vpand xmm7,xmm14,xmm13
+ vpxor xmm0,xmm0,XMMWORD PTR[((64-128))+rax]
+
+ vpaddd xmm10,xmm10,xmm7
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm14,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vmovdqu XMMWORD PTR[(176-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpor xmm8,xmm8,xmm9
+ vpsrld xmm5,xmm0,31
+ vpand xmm6,xmm6,xmm12
+ vpaddd xmm0,xmm0,xmm0
+
+ vpslld xmm7,xmm12,30
+ vpaddd xmm10,xmm10,xmm6
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vmovdqa xmm15,XMMWORD PTR[64+rbp]
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((240-128))+rax]
+
+ vpslld xmm8,xmm10,5
+ vpaddd xmm14,xmm14,xmm15
+ vpxor xmm6,xmm13,xmm11
+ vmovdqa XMMWORD PTR[(192-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpxor xmm1,xmm1,XMMWORD PTR[((80-128))+rax]
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm14,xmm14,xmm6
+ vpsrld xmm5,xmm1,31
+ vpaddd xmm1,xmm1,xmm1
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((0-128))+rax]
+
+ vpslld xmm8,xmm14,5
+ vpaddd xmm13,xmm13,xmm15
+ vpxor xmm6,xmm12,xmm10
+ vmovdqa XMMWORD PTR[(208-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpxor xmm2,xmm2,XMMWORD PTR[((96-128))+rax]
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm13,xmm13,xmm6
+ vpsrld xmm5,xmm2,31
+ vpaddd xmm2,xmm2,xmm2
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((16-128))+rax]
+
+ vpslld xmm8,xmm13,5
+ vpaddd xmm12,xmm12,xmm15
+ vpxor xmm6,xmm11,xmm14
+ vmovdqa XMMWORD PTR[(224-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpxor xmm3,xmm3,XMMWORD PTR[((112-128))+rax]
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm12,xmm12,xmm6
+ vpsrld xmm5,xmm3,31
+ vpaddd xmm3,xmm3,xmm3
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((32-128))+rax]
+
+ vpslld xmm8,xmm12,5
+ vpaddd xmm11,xmm11,xmm15
+ vpxor xmm6,xmm10,xmm13
+ vmovdqa XMMWORD PTR[(240-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm4,XMMWORD PTR[((128-128))+rax]
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm11,xmm11,xmm6
+ vpsrld xmm5,xmm4,31
+ vpaddd xmm4,xmm4,xmm4
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((48-128))+rax]
+
+ vpslld xmm8,xmm11,5
+ vpaddd xmm10,xmm10,xmm15
+ vpxor xmm6,xmm14,xmm12
+ vmovdqa XMMWORD PTR[(0-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpxor xmm0,xmm0,XMMWORD PTR[((144-128))+rax]
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm6,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm10,xmm10,xmm6
+ vpsrld xmm5,xmm0,31
+ vpaddd xmm0,xmm0,xmm0
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((64-128))+rax]
+
+ vpslld xmm8,xmm10,5
+ vpaddd xmm14,xmm14,xmm15
+ vpxor xmm6,xmm13,xmm11
+ vmovdqa XMMWORD PTR[(16-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpxor xmm1,xmm1,XMMWORD PTR[((160-128))+rax]
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm14,xmm14,xmm6
+ vpsrld xmm5,xmm1,31
+ vpaddd xmm1,xmm1,xmm1
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((80-128))+rax]
+
+ vpslld xmm8,xmm14,5
+ vpaddd xmm13,xmm13,xmm15
+ vpxor xmm6,xmm12,xmm10
+ vmovdqa XMMWORD PTR[(32-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpxor xmm2,xmm2,XMMWORD PTR[((176-128))+rax]
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm13,xmm13,xmm6
+ vpsrld xmm5,xmm2,31
+ vpaddd xmm2,xmm2,xmm2
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((96-128))+rax]
+
+ vpslld xmm8,xmm13,5
+ vpaddd xmm12,xmm12,xmm15
+ vpxor xmm6,xmm11,xmm14
+ vmovdqa XMMWORD PTR[(48-128)+rax],xmm2
+ vpaddd xmm12,xmm12,xmm2
+ vpxor xmm3,xmm3,XMMWORD PTR[((192-128))+rax]
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm12,xmm12,xmm6
+ vpsrld xmm5,xmm3,31
+ vpaddd xmm3,xmm3,xmm3
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((112-128))+rax]
+
+ vpslld xmm8,xmm12,5
+ vpaddd xmm11,xmm11,xmm15
+ vpxor xmm6,xmm10,xmm13
+ vmovdqa XMMWORD PTR[(64-128)+rax],xmm3
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm4,XMMWORD PTR[((208-128))+rax]
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm11,xmm11,xmm6
+ vpsrld xmm5,xmm4,31
+ vpaddd xmm4,xmm4,xmm4
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((128-128))+rax]
+
+ vpslld xmm8,xmm11,5
+ vpaddd xmm10,xmm10,xmm15
+ vpxor xmm6,xmm14,xmm12
+ vmovdqa XMMWORD PTR[(80-128)+rax],xmm4
+ vpaddd xmm10,xmm10,xmm4
+ vpxor xmm0,xmm0,XMMWORD PTR[((224-128))+rax]
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm6,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm10,xmm10,xmm6
+ vpsrld xmm5,xmm0,31
+ vpaddd xmm0,xmm0,xmm0
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((144-128))+rax]
+
+ vpslld xmm8,xmm10,5
+ vpaddd xmm14,xmm14,xmm15
+ vpxor xmm6,xmm13,xmm11
+ vmovdqa XMMWORD PTR[(96-128)+rax],xmm0
+ vpaddd xmm14,xmm14,xmm0
+ vpxor xmm1,xmm1,XMMWORD PTR[((240-128))+rax]
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm14,xmm14,xmm6
+ vpsrld xmm5,xmm1,31
+ vpaddd xmm1,xmm1,xmm1
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((160-128))+rax]
+
+ vpslld xmm8,xmm14,5
+ vpaddd xmm13,xmm13,xmm15
+ vpxor xmm6,xmm12,xmm10
+ vmovdqa XMMWORD PTR[(112-128)+rax],xmm1
+ vpaddd xmm13,xmm13,xmm1
+ vpxor xmm2,xmm2,XMMWORD PTR[((0-128))+rax]
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm13,xmm13,xmm6
+ vpsrld xmm5,xmm2,31
+ vpaddd xmm2,xmm2,xmm2
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((176-128))+rax]
+
+ vpslld xmm8,xmm13,5
+ vpaddd xmm12,xmm12,xmm15
+ vpxor xmm6,xmm11,xmm14
+ vpaddd xmm12,xmm12,xmm2
+ vpxor xmm3,xmm3,XMMWORD PTR[((16-128))+rax]
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm12,xmm12,xmm6
+ vpsrld xmm5,xmm3,31
+ vpaddd xmm3,xmm3,xmm3
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((192-128))+rax]
+
+ vpslld xmm8,xmm12,5
+ vpaddd xmm11,xmm11,xmm15
+ vpxor xmm6,xmm10,xmm13
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm4,XMMWORD PTR[((32-128))+rax]
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm11,xmm11,xmm6
+ vpsrld xmm5,xmm4,31
+ vpaddd xmm4,xmm4,xmm4
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpxor xmm0,xmm0,xmm2
+ vmovdqa xmm2,XMMWORD PTR[((208-128))+rax]
+
+ vpslld xmm8,xmm11,5
+ vpaddd xmm10,xmm10,xmm15
+ vpxor xmm6,xmm14,xmm12
+ vpaddd xmm10,xmm10,xmm4
+ vpxor xmm0,xmm0,XMMWORD PTR[((48-128))+rax]
+ vpsrld xmm9,xmm11,27
+ vpxor xmm6,xmm6,xmm13
+ vpxor xmm0,xmm0,xmm2
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm10,xmm10,xmm6
+ vpsrld xmm5,xmm0,31
+ vpaddd xmm0,xmm0,xmm0
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm0,xmm0,xmm5
+ vpor xmm12,xmm12,xmm7
+ vpxor xmm1,xmm1,xmm3
+ vmovdqa xmm3,XMMWORD PTR[((224-128))+rax]
+
+ vpslld xmm8,xmm10,5
+ vpaddd xmm14,xmm14,xmm15
+ vpxor xmm6,xmm13,xmm11
+ vpaddd xmm14,xmm14,xmm0
+ vpxor xmm1,xmm1,XMMWORD PTR[((64-128))+rax]
+ vpsrld xmm9,xmm10,27
+ vpxor xmm6,xmm6,xmm12
+ vpxor xmm1,xmm1,xmm3
+
+ vpslld xmm7,xmm11,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm14,xmm14,xmm6
+ vpsrld xmm5,xmm1,31
+ vpaddd xmm1,xmm1,xmm1
+
+ vpsrld xmm11,xmm11,2
+ vpaddd xmm14,xmm14,xmm8
+ vpor xmm1,xmm1,xmm5
+ vpor xmm11,xmm11,xmm7
+ vpxor xmm2,xmm2,xmm4
+ vmovdqa xmm4,XMMWORD PTR[((240-128))+rax]
+
+ vpslld xmm8,xmm14,5
+ vpaddd xmm13,xmm13,xmm15
+ vpxor xmm6,xmm12,xmm10
+ vpaddd xmm13,xmm13,xmm1
+ vpxor xmm2,xmm2,XMMWORD PTR[((80-128))+rax]
+ vpsrld xmm9,xmm14,27
+ vpxor xmm6,xmm6,xmm11
+ vpxor xmm2,xmm2,xmm4
+
+ vpslld xmm7,xmm10,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm13,xmm13,xmm6
+ vpsrld xmm5,xmm2,31
+ vpaddd xmm2,xmm2,xmm2
+
+ vpsrld xmm10,xmm10,2
+ vpaddd xmm13,xmm13,xmm8
+ vpor xmm2,xmm2,xmm5
+ vpor xmm10,xmm10,xmm7
+ vpxor xmm3,xmm3,xmm0
+ vmovdqa xmm0,XMMWORD PTR[((0-128))+rax]
+
+ vpslld xmm8,xmm13,5
+ vpaddd xmm12,xmm12,xmm15
+ vpxor xmm6,xmm11,xmm14
+ vpaddd xmm12,xmm12,xmm2
+ vpxor xmm3,xmm3,XMMWORD PTR[((96-128))+rax]
+ vpsrld xmm9,xmm13,27
+ vpxor xmm6,xmm6,xmm10
+ vpxor xmm3,xmm3,xmm0
+
+ vpslld xmm7,xmm14,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm12,xmm12,xmm6
+ vpsrld xmm5,xmm3,31
+ vpaddd xmm3,xmm3,xmm3
+
+ vpsrld xmm14,xmm14,2
+ vpaddd xmm12,xmm12,xmm8
+ vpor xmm3,xmm3,xmm5
+ vpor xmm14,xmm14,xmm7
+ vpxor xmm4,xmm4,xmm1
+ vmovdqa xmm1,XMMWORD PTR[((16-128))+rax]
+
+ vpslld xmm8,xmm12,5
+ vpaddd xmm11,xmm11,xmm15
+ vpxor xmm6,xmm10,xmm13
+ vpaddd xmm11,xmm11,xmm3
+ vpxor xmm4,xmm4,XMMWORD PTR[((112-128))+rax]
+ vpsrld xmm9,xmm12,27
+ vpxor xmm6,xmm6,xmm14
+ vpxor xmm4,xmm4,xmm1
+
+ vpslld xmm7,xmm13,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm11,xmm11,xmm6
+ vpsrld xmm5,xmm4,31
+ vpaddd xmm4,xmm4,xmm4
+
+ vpsrld xmm13,xmm13,2
+ vpaddd xmm11,xmm11,xmm8
+ vpor xmm4,xmm4,xmm5
+ vpor xmm13,xmm13,xmm7
+ vpslld xmm8,xmm11,5
+ vpaddd xmm10,xmm10,xmm15
+ vpxor xmm6,xmm14,xmm12
+
+ vpsrld xmm9,xmm11,27
+ vpaddd xmm10,xmm10,xmm4
+ vpxor xmm6,xmm6,xmm13
+
+ vpslld xmm7,xmm12,30
+ vpor xmm8,xmm8,xmm9
+ vpaddd xmm10,xmm10,xmm6
+
+ vpsrld xmm12,xmm12,2
+ vpaddd xmm10,xmm10,xmm8
+ vpor xmm12,xmm12,xmm7
+ mov ecx,1
+ cmp ecx,DWORD PTR[rbx]
+ cmovge r8,rbp
+ cmp ecx,DWORD PTR[4+rbx]
+ cmovge r9,rbp
+ cmp ecx,DWORD PTR[8+rbx]
+ cmovge r10,rbp
+ cmp ecx,DWORD PTR[12+rbx]
+ cmovge r11,rbp
+ vmovdqu xmm6,XMMWORD PTR[rbx]
+ vpxor xmm8,xmm8,xmm8
+ vmovdqa xmm7,xmm6
+ vpcmpgtd xmm7,xmm7,xmm8
+ vpaddd xmm6,xmm6,xmm7
+
+ vpand xmm10,xmm10,xmm7
+ vpand xmm11,xmm11,xmm7
+ vpaddd xmm10,xmm10,XMMWORD PTR[rdi]
+ vpand xmm12,xmm12,xmm7
+ vpaddd xmm11,xmm11,XMMWORD PTR[32+rdi]
+ vpand xmm13,xmm13,xmm7
+ vpaddd xmm12,xmm12,XMMWORD PTR[64+rdi]
+ vpand xmm14,xmm14,xmm7
+ vpaddd xmm13,xmm13,XMMWORD PTR[96+rdi]
+ vpaddd xmm14,xmm14,XMMWORD PTR[128+rdi]
+ vmovdqu XMMWORD PTR[rdi],xmm10
+ vmovdqu XMMWORD PTR[32+rdi],xmm11
+ vmovdqu XMMWORD PTR[64+rdi],xmm12
+ vmovdqu XMMWORD PTR[96+rdi],xmm13
+ vmovdqu XMMWORD PTR[128+rdi],xmm14
+
+ vmovdqu XMMWORD PTR[rbx],xmm6
+ vmovdqu xmm5,XMMWORD PTR[96+rbp]
+ dec edx
+ jnz $L$oop_avx
+
+ mov edx,DWORD PTR[280+rsp]
+ lea rdi,QWORD PTR[16+rdi]
+ lea rsi,QWORD PTR[64+rsi]
+ dec edx
+ jnz $L$oop_grande_avx
+
+$L$done_avx::
+ mov rax,QWORD PTR[272+rsp]
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-184))+rax]
+ movaps xmm7,XMMWORD PTR[((-168))+rax]
+ movaps xmm8,XMMWORD PTR[((-152))+rax]
+ movaps xmm9,XMMWORD PTR[((-136))+rax]
+ movaps xmm10,XMMWORD PTR[((-120))+rax]
+ movaps xmm11,XMMWORD PTR[((-104))+rax]
+ movaps xmm12,XMMWORD PTR[((-88))+rax]
+ movaps xmm13,XMMWORD PTR[((-72))+rax]
+ movaps xmm14,XMMWORD PTR[((-56))+rax]
+ movaps xmm15,XMMWORD PTR[((-40))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$epilogue_avx::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha1_multi_block_avx::
+sha1_multi_block_avx ENDP
+
+ALIGN 32
+sha1_multi_block_avx2 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha1_multi_block_avx2::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+_avx2_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[64+rsp],xmm10
+ movaps XMMWORD PTR[80+rsp],xmm11
+ movaps XMMWORD PTR[(-120)+rax],xmm12
+ movaps XMMWORD PTR[(-104)+rax],xmm13
+ movaps XMMWORD PTR[(-88)+rax],xmm14
+ movaps XMMWORD PTR[(-72)+rax],xmm15
+ sub rsp,576
+ and rsp,-256
+ mov QWORD PTR[544+rsp],rax
+
+$L$body_avx2::
+ lea rbp,QWORD PTR[K_XX_XX]
+ shr edx,1
+
+ vzeroupper
+$L$oop_grande_avx2::
+ mov DWORD PTR[552+rsp],edx
+ xor edx,edx
+ lea rbx,QWORD PTR[512+rsp]
+ mov r12,QWORD PTR[rsi]
+ mov ecx,DWORD PTR[8+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[rbx],ecx
+ cmovle r12,rbp
+ mov r13,QWORD PTR[16+rsi]
+ mov ecx,DWORD PTR[24+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[4+rbx],ecx
+ cmovle r13,rbp
+ mov r14,QWORD PTR[32+rsi]
+ mov ecx,DWORD PTR[40+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[8+rbx],ecx
+ cmovle r14,rbp
+ mov r15,QWORD PTR[48+rsi]
+ mov ecx,DWORD PTR[56+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[12+rbx],ecx
+ cmovle r15,rbp
+ mov r8,QWORD PTR[64+rsi]
+ mov ecx,DWORD PTR[72+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[16+rbx],ecx
+ cmovle r8,rbp
+ mov r9,QWORD PTR[80+rsi]
+ mov ecx,DWORD PTR[88+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[20+rbx],ecx
+ cmovle r9,rbp
+ mov r10,QWORD PTR[96+rsi]
+ mov ecx,DWORD PTR[104+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[24+rbx],ecx
+ cmovle r10,rbp
+ mov r11,QWORD PTR[112+rsi]
+ mov ecx,DWORD PTR[120+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[28+rbx],ecx
+ cmovle r11,rbp
+ vmovdqu ymm0,YMMWORD PTR[rdi]
+ lea rax,QWORD PTR[128+rsp]
+ vmovdqu ymm1,YMMWORD PTR[32+rdi]
+ lea rbx,QWORD PTR[((256+128))+rsp]
+ vmovdqu ymm2,YMMWORD PTR[64+rdi]
+ vmovdqu ymm3,YMMWORD PTR[96+rdi]
+ vmovdqu ymm4,YMMWORD PTR[128+rdi]
+ vmovdqu ymm9,YMMWORD PTR[96+rbp]
+ jmp $L$oop_avx2
+
+ALIGN 32
+$L$oop_avx2::
+ vmovdqa ymm15,YMMWORD PTR[((-32))+rbp]
+ vmovd xmm10,DWORD PTR[r12]
+ lea r12,QWORD PTR[64+r12]
+ vmovd xmm12,DWORD PTR[r8]
+ lea r8,QWORD PTR[64+r8]
+ vmovd xmm7,DWORD PTR[r13]
+ lea r13,QWORD PTR[64+r13]
+ vmovd xmm6,DWORD PTR[r9]
+ lea r9,QWORD PTR[64+r9]
+ vpinsrd xmm10,xmm10,DWORD PTR[r14],1
+ lea r14,QWORD PTR[64+r14]
+ vpinsrd xmm12,xmm12,DWORD PTR[r10],1
+ lea r10,QWORD PTR[64+r10]
+ vpinsrd xmm7,xmm7,DWORD PTR[r15],1
+ lea r15,QWORD PTR[64+r15]
+ vpunpckldq ymm10,ymm10,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[r11],1
+ lea r11,QWORD PTR[64+r11]
+ vpunpckldq ymm12,ymm12,ymm6
+ vmovd xmm11,DWORD PTR[((-60))+r12]
+ vinserti128 ymm10,ymm10,xmm12,1
+ vmovd xmm8,DWORD PTR[((-60))+r8]
+ vpshufb ymm10,ymm10,ymm9
+ vmovd xmm7,DWORD PTR[((-60))+r13]
+ vmovd xmm6,DWORD PTR[((-60))+r9]
+ vpinsrd xmm11,xmm11,DWORD PTR[((-60))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-60))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-60))+r15],1
+ vpunpckldq ymm11,ymm11,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-60))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm4,ymm4,ymm15
+ vpslld ymm7,ymm0,5
+ vpandn ymm6,ymm1,ymm3
+ vpand ymm5,ymm1,ymm2
+
+ vmovdqa YMMWORD PTR[(0-128)+rax],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vinserti128 ymm11,ymm11,xmm8,1
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm12,DWORD PTR[((-56))+r12]
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-56))+r8]
+ vpaddd ymm4,ymm4,ymm5
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpshufb ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vmovd xmm7,DWORD PTR[((-56))+r13]
+ vmovd xmm6,DWORD PTR[((-56))+r9]
+ vpinsrd xmm12,xmm12,DWORD PTR[((-56))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-56))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-56))+r15],1
+ vpunpckldq ymm12,ymm12,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-56))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm3,ymm3,ymm15
+ vpslld ymm7,ymm4,5
+ vpandn ymm6,ymm0,ymm2
+ vpand ymm5,ymm0,ymm1
+
+ vmovdqa YMMWORD PTR[(32-128)+rax],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vinserti128 ymm12,ymm12,xmm8,1
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm13,DWORD PTR[((-52))+r12]
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-52))+r8]
+ vpaddd ymm3,ymm3,ymm5
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpshufb ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vmovd xmm7,DWORD PTR[((-52))+r13]
+ vmovd xmm6,DWORD PTR[((-52))+r9]
+ vpinsrd xmm13,xmm13,DWORD PTR[((-52))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-52))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-52))+r15],1
+ vpunpckldq ymm13,ymm13,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-52))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm2,ymm2,ymm15
+ vpslld ymm7,ymm3,5
+ vpandn ymm6,ymm4,ymm1
+ vpand ymm5,ymm4,ymm0
+
+ vmovdqa YMMWORD PTR[(64-128)+rax],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vinserti128 ymm13,ymm13,xmm8,1
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm14,DWORD PTR[((-48))+r12]
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-48))+r8]
+ vpaddd ymm2,ymm2,ymm5
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpshufb ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vmovd xmm7,DWORD PTR[((-48))+r13]
+ vmovd xmm6,DWORD PTR[((-48))+r9]
+ vpinsrd xmm14,xmm14,DWORD PTR[((-48))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-48))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-48))+r15],1
+ vpunpckldq ymm14,ymm14,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-48))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm1,ymm1,ymm15
+ vpslld ymm7,ymm2,5
+ vpandn ymm6,ymm3,ymm0
+ vpand ymm5,ymm3,ymm4
+
+ vmovdqa YMMWORD PTR[(96-128)+rax],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vinserti128 ymm14,ymm14,xmm8,1
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm10,DWORD PTR[((-44))+r12]
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-44))+r8]
+ vpaddd ymm1,ymm1,ymm5
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpshufb ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vmovd xmm7,DWORD PTR[((-44))+r13]
+ vmovd xmm6,DWORD PTR[((-44))+r9]
+ vpinsrd xmm10,xmm10,DWORD PTR[((-44))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-44))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-44))+r15],1
+ vpunpckldq ymm10,ymm10,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-44))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm0,ymm0,ymm15
+ vpslld ymm7,ymm1,5
+ vpandn ymm6,ymm2,ymm4
+ vpand ymm5,ymm2,ymm3
+
+ vmovdqa YMMWORD PTR[(128-128)+rax],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vinserti128 ymm10,ymm10,xmm8,1
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm11,DWORD PTR[((-40))+r12]
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-40))+r8]
+ vpaddd ymm0,ymm0,ymm5
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpshufb ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vmovd xmm7,DWORD PTR[((-40))+r13]
+ vmovd xmm6,DWORD PTR[((-40))+r9]
+ vpinsrd xmm11,xmm11,DWORD PTR[((-40))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-40))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-40))+r15],1
+ vpunpckldq ymm11,ymm11,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-40))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm4,ymm4,ymm15
+ vpslld ymm7,ymm0,5
+ vpandn ymm6,ymm1,ymm3
+ vpand ymm5,ymm1,ymm2
+
+ vmovdqa YMMWORD PTR[(160-128)+rax],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vinserti128 ymm11,ymm11,xmm8,1
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm12,DWORD PTR[((-36))+r12]
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-36))+r8]
+ vpaddd ymm4,ymm4,ymm5
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpshufb ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vmovd xmm7,DWORD PTR[((-36))+r13]
+ vmovd xmm6,DWORD PTR[((-36))+r9]
+ vpinsrd xmm12,xmm12,DWORD PTR[((-36))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-36))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-36))+r15],1
+ vpunpckldq ymm12,ymm12,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-36))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm3,ymm3,ymm15
+ vpslld ymm7,ymm4,5
+ vpandn ymm6,ymm0,ymm2
+ vpand ymm5,ymm0,ymm1
+
+ vmovdqa YMMWORD PTR[(192-128)+rax],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vinserti128 ymm12,ymm12,xmm8,1
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm13,DWORD PTR[((-32))+r12]
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-32))+r8]
+ vpaddd ymm3,ymm3,ymm5
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpshufb ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vmovd xmm7,DWORD PTR[((-32))+r13]
+ vmovd xmm6,DWORD PTR[((-32))+r9]
+ vpinsrd xmm13,xmm13,DWORD PTR[((-32))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-32))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-32))+r15],1
+ vpunpckldq ymm13,ymm13,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-32))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm2,ymm2,ymm15
+ vpslld ymm7,ymm3,5
+ vpandn ymm6,ymm4,ymm1
+ vpand ymm5,ymm4,ymm0
+
+ vmovdqa YMMWORD PTR[(224-128)+rax],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vinserti128 ymm13,ymm13,xmm8,1
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm14,DWORD PTR[((-28))+r12]
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-28))+r8]
+ vpaddd ymm2,ymm2,ymm5
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpshufb ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vmovd xmm7,DWORD PTR[((-28))+r13]
+ vmovd xmm6,DWORD PTR[((-28))+r9]
+ vpinsrd xmm14,xmm14,DWORD PTR[((-28))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-28))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-28))+r15],1
+ vpunpckldq ymm14,ymm14,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-28))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm1,ymm1,ymm15
+ vpslld ymm7,ymm2,5
+ vpandn ymm6,ymm3,ymm0
+ vpand ymm5,ymm3,ymm4
+
+ vmovdqa YMMWORD PTR[(256-256-128)+rbx],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vinserti128 ymm14,ymm14,xmm8,1
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm10,DWORD PTR[((-24))+r12]
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-24))+r8]
+ vpaddd ymm1,ymm1,ymm5
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpshufb ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vmovd xmm7,DWORD PTR[((-24))+r13]
+ vmovd xmm6,DWORD PTR[((-24))+r9]
+ vpinsrd xmm10,xmm10,DWORD PTR[((-24))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-24))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-24))+r15],1
+ vpunpckldq ymm10,ymm10,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-24))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm0,ymm0,ymm15
+ vpslld ymm7,ymm1,5
+ vpandn ymm6,ymm2,ymm4
+ vpand ymm5,ymm2,ymm3
+
+ vmovdqa YMMWORD PTR[(288-256-128)+rbx],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vinserti128 ymm10,ymm10,xmm8,1
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm11,DWORD PTR[((-20))+r12]
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-20))+r8]
+ vpaddd ymm0,ymm0,ymm5
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpshufb ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vmovd xmm7,DWORD PTR[((-20))+r13]
+ vmovd xmm6,DWORD PTR[((-20))+r9]
+ vpinsrd xmm11,xmm11,DWORD PTR[((-20))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-20))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-20))+r15],1
+ vpunpckldq ymm11,ymm11,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-20))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm4,ymm4,ymm15
+ vpslld ymm7,ymm0,5
+ vpandn ymm6,ymm1,ymm3
+ vpand ymm5,ymm1,ymm2
+
+ vmovdqa YMMWORD PTR[(320-256-128)+rbx],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vinserti128 ymm11,ymm11,xmm8,1
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm12,DWORD PTR[((-16))+r12]
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-16))+r8]
+ vpaddd ymm4,ymm4,ymm5
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpshufb ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vmovd xmm7,DWORD PTR[((-16))+r13]
+ vmovd xmm6,DWORD PTR[((-16))+r9]
+ vpinsrd xmm12,xmm12,DWORD PTR[((-16))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-16))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-16))+r15],1
+ vpunpckldq ymm12,ymm12,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-16))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm3,ymm3,ymm15
+ vpslld ymm7,ymm4,5
+ vpandn ymm6,ymm0,ymm2
+ vpand ymm5,ymm0,ymm1
+
+ vmovdqa YMMWORD PTR[(352-256-128)+rbx],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vinserti128 ymm12,ymm12,xmm8,1
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm13,DWORD PTR[((-12))+r12]
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-12))+r8]
+ vpaddd ymm3,ymm3,ymm5
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpshufb ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vmovd xmm7,DWORD PTR[((-12))+r13]
+ vmovd xmm6,DWORD PTR[((-12))+r9]
+ vpinsrd xmm13,xmm13,DWORD PTR[((-12))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-12))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-12))+r15],1
+ vpunpckldq ymm13,ymm13,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-12))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm2,ymm2,ymm15
+ vpslld ymm7,ymm3,5
+ vpandn ymm6,ymm4,ymm1
+ vpand ymm5,ymm4,ymm0
+
+ vmovdqa YMMWORD PTR[(384-256-128)+rbx],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vinserti128 ymm13,ymm13,xmm8,1
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm14,DWORD PTR[((-8))+r12]
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-8))+r8]
+ vpaddd ymm2,ymm2,ymm5
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpshufb ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vmovd xmm7,DWORD PTR[((-8))+r13]
+ vmovd xmm6,DWORD PTR[((-8))+r9]
+ vpinsrd xmm14,xmm14,DWORD PTR[((-8))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-8))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-8))+r15],1
+ vpunpckldq ymm14,ymm14,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-8))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm1,ymm1,ymm15
+ vpslld ymm7,ymm2,5
+ vpandn ymm6,ymm3,ymm0
+ vpand ymm5,ymm3,ymm4
+
+ vmovdqa YMMWORD PTR[(416-256-128)+rbx],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vinserti128 ymm14,ymm14,xmm8,1
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm6
+ vmovd xmm10,DWORD PTR[((-4))+r12]
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vmovd xmm8,DWORD PTR[((-4))+r8]
+ vpaddd ymm1,ymm1,ymm5
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpshufb ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vmovdqa ymm11,YMMWORD PTR[((0-128))+rax]
+ vmovd xmm7,DWORD PTR[((-4))+r13]
+ vmovd xmm6,DWORD PTR[((-4))+r9]
+ vpinsrd xmm10,xmm10,DWORD PTR[((-4))+r14],1
+ vpinsrd xmm8,xmm8,DWORD PTR[((-4))+r10],1
+ vpinsrd xmm7,xmm7,DWORD PTR[((-4))+r15],1
+ vpunpckldq ymm10,ymm10,ymm7
+ vpinsrd xmm6,xmm6,DWORD PTR[((-4))+r11],1
+ vpunpckldq ymm8,ymm8,ymm6
+ vpaddd ymm0,ymm0,ymm15
+ prefetcht0 [63+r12]
+ vpslld ymm7,ymm1,5
+ vpandn ymm6,ymm2,ymm4
+ vpand ymm5,ymm2,ymm3
+
+ vmovdqa YMMWORD PTR[(448-256-128)+rbx],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vinserti128 ymm10,ymm10,xmm8,1
+ vpsrld ymm8,ymm1,27
+ prefetcht0 [63+r13]
+ vpxor ymm5,ymm5,ymm6
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ prefetcht0 [63+r14]
+ vpaddd ymm0,ymm0,ymm5
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ prefetcht0 [63+r15]
+ vpshufb ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vmovdqa ymm12,YMMWORD PTR[((32-128))+rax]
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((64-128))+rax]
+
+ vpaddd ymm4,ymm4,ymm15
+ vpslld ymm7,ymm0,5
+ vpandn ymm6,ymm1,ymm3
+ prefetcht0 [63+r8]
+ vpand ymm5,ymm1,ymm2
+
+ vmovdqa YMMWORD PTR[(480-256-128)+rbx],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpxor ymm11,ymm11,YMMWORD PTR[((256-256-128))+rbx]
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm6
+ vpxor ymm11,ymm11,ymm13
+ prefetcht0 [63+r9]
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm4,ymm4,ymm5
+ prefetcht0 [63+r10]
+ vpsrld ymm9,ymm11,31
+ vpaddd ymm11,ymm11,ymm11
+
+ vpsrld ymm1,ymm1,2
+ prefetcht0 [63+r11]
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((96-128))+rax]
+
+ vpaddd ymm3,ymm3,ymm15
+ vpslld ymm7,ymm4,5
+ vpandn ymm6,ymm0,ymm2
+
+ vpand ymm5,ymm0,ymm1
+
+ vmovdqa YMMWORD PTR[(0-128)+rax],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpxor ymm12,ymm12,YMMWORD PTR[((288-256-128))+rbx]
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm6
+ vpxor ymm12,ymm12,ymm14
+
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm3,ymm3,ymm5
+
+ vpsrld ymm9,ymm12,31
+ vpaddd ymm12,ymm12,ymm12
+
+ vpsrld ymm0,ymm0,2
+
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((128-128))+rax]
+
+ vpaddd ymm2,ymm2,ymm15
+ vpslld ymm7,ymm3,5
+ vpandn ymm6,ymm4,ymm1
+
+ vpand ymm5,ymm4,ymm0
+
+ vmovdqa YMMWORD PTR[(32-128)+rax],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpxor ymm13,ymm13,YMMWORD PTR[((320-256-128))+rbx]
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm6
+ vpxor ymm13,ymm13,ymm10
+
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm2,ymm2,ymm5
+
+ vpsrld ymm9,ymm13,31
+ vpaddd ymm13,ymm13,ymm13
+
+ vpsrld ymm4,ymm4,2
+
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((160-128))+rax]
+
+ vpaddd ymm1,ymm1,ymm15
+ vpslld ymm7,ymm2,5
+ vpandn ymm6,ymm3,ymm0
+
+ vpand ymm5,ymm3,ymm4
+
+ vmovdqa YMMWORD PTR[(64-128)+rax],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpxor ymm14,ymm14,YMMWORD PTR[((352-256-128))+rbx]
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm6
+ vpxor ymm14,ymm14,ymm11
+
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm1,ymm1,ymm5
+
+ vpsrld ymm9,ymm14,31
+ vpaddd ymm14,ymm14,ymm14
+
+ vpsrld ymm3,ymm3,2
+
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((192-128))+rax]
+
+ vpaddd ymm0,ymm0,ymm15
+ vpslld ymm7,ymm1,5
+ vpandn ymm6,ymm2,ymm4
+
+ vpand ymm5,ymm2,ymm3
+
+ vmovdqa YMMWORD PTR[(96-128)+rax],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpxor ymm10,ymm10,YMMWORD PTR[((384-256-128))+rbx]
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm5,ymm6
+ vpxor ymm10,ymm10,ymm12
+
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm0,ymm0,ymm5
+
+ vpsrld ymm9,ymm10,31
+ vpaddd ymm10,ymm10,ymm10
+
+ vpsrld ymm2,ymm2,2
+
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vmovdqa ymm15,YMMWORD PTR[rbp]
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((224-128))+rax]
+
+ vpslld ymm7,ymm0,5
+ vpaddd ymm4,ymm4,ymm15
+ vpxor ymm5,ymm3,ymm1
+ vmovdqa YMMWORD PTR[(128-128)+rax],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpxor ymm11,ymm11,YMMWORD PTR[((416-256-128))+rbx]
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm4,ymm4,ymm5
+ vpsrld ymm9,ymm11,31
+ vpaddd ymm11,ymm11,ymm11
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((256-256-128))+rbx]
+
+ vpslld ymm7,ymm4,5
+ vpaddd ymm3,ymm3,ymm15
+ vpxor ymm5,ymm2,ymm0
+ vmovdqa YMMWORD PTR[(160-128)+rax],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpxor ymm12,ymm12,YMMWORD PTR[((448-256-128))+rbx]
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm3,ymm3,ymm5
+ vpsrld ymm9,ymm12,31
+ vpaddd ymm12,ymm12,ymm12
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((288-256-128))+rbx]
+
+ vpslld ymm7,ymm3,5
+ vpaddd ymm2,ymm2,ymm15
+ vpxor ymm5,ymm1,ymm4
+ vmovdqa YMMWORD PTR[(192-128)+rax],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpxor ymm13,ymm13,YMMWORD PTR[((480-256-128))+rbx]
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm2,ymm2,ymm5
+ vpsrld ymm9,ymm13,31
+ vpaddd ymm13,ymm13,ymm13
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((320-256-128))+rbx]
+
+ vpslld ymm7,ymm2,5
+ vpaddd ymm1,ymm1,ymm15
+ vpxor ymm5,ymm0,ymm3
+ vmovdqa YMMWORD PTR[(224-128)+rax],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpxor ymm14,ymm14,YMMWORD PTR[((0-128))+rax]
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm1,ymm1,ymm5
+ vpsrld ymm9,ymm14,31
+ vpaddd ymm14,ymm14,ymm14
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((352-256-128))+rbx]
+
+ vpslld ymm7,ymm1,5
+ vpaddd ymm0,ymm0,ymm15
+ vpxor ymm5,ymm4,ymm2
+ vmovdqa YMMWORD PTR[(256-256-128)+rbx],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpxor ymm10,ymm10,YMMWORD PTR[((32-128))+rax]
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm5,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm0,ymm0,ymm5
+ vpsrld ymm9,ymm10,31
+ vpaddd ymm10,ymm10,ymm10
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((384-256-128))+rbx]
+
+ vpslld ymm7,ymm0,5
+ vpaddd ymm4,ymm4,ymm15
+ vpxor ymm5,ymm3,ymm1
+ vmovdqa YMMWORD PTR[(288-256-128)+rbx],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpxor ymm11,ymm11,YMMWORD PTR[((64-128))+rax]
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm4,ymm4,ymm5
+ vpsrld ymm9,ymm11,31
+ vpaddd ymm11,ymm11,ymm11
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((416-256-128))+rbx]
+
+ vpslld ymm7,ymm4,5
+ vpaddd ymm3,ymm3,ymm15
+ vpxor ymm5,ymm2,ymm0
+ vmovdqa YMMWORD PTR[(320-256-128)+rbx],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpxor ymm12,ymm12,YMMWORD PTR[((96-128))+rax]
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm3,ymm3,ymm5
+ vpsrld ymm9,ymm12,31
+ vpaddd ymm12,ymm12,ymm12
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((448-256-128))+rbx]
+
+ vpslld ymm7,ymm3,5
+ vpaddd ymm2,ymm2,ymm15
+ vpxor ymm5,ymm1,ymm4
+ vmovdqa YMMWORD PTR[(352-256-128)+rbx],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpxor ymm13,ymm13,YMMWORD PTR[((128-128))+rax]
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm2,ymm2,ymm5
+ vpsrld ymm9,ymm13,31
+ vpaddd ymm13,ymm13,ymm13
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((480-256-128))+rbx]
+
+ vpslld ymm7,ymm2,5
+ vpaddd ymm1,ymm1,ymm15
+ vpxor ymm5,ymm0,ymm3
+ vmovdqa YMMWORD PTR[(384-256-128)+rbx],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpxor ymm14,ymm14,YMMWORD PTR[((160-128))+rax]
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm1,ymm1,ymm5
+ vpsrld ymm9,ymm14,31
+ vpaddd ymm14,ymm14,ymm14
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((0-128))+rax]
+
+ vpslld ymm7,ymm1,5
+ vpaddd ymm0,ymm0,ymm15
+ vpxor ymm5,ymm4,ymm2
+ vmovdqa YMMWORD PTR[(416-256-128)+rbx],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpxor ymm10,ymm10,YMMWORD PTR[((192-128))+rax]
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm5,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm0,ymm0,ymm5
+ vpsrld ymm9,ymm10,31
+ vpaddd ymm10,ymm10,ymm10
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((32-128))+rax]
+
+ vpslld ymm7,ymm0,5
+ vpaddd ymm4,ymm4,ymm15
+ vpxor ymm5,ymm3,ymm1
+ vmovdqa YMMWORD PTR[(448-256-128)+rbx],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpxor ymm11,ymm11,YMMWORD PTR[((224-128))+rax]
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm4,ymm4,ymm5
+ vpsrld ymm9,ymm11,31
+ vpaddd ymm11,ymm11,ymm11
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((64-128))+rax]
+
+ vpslld ymm7,ymm4,5
+ vpaddd ymm3,ymm3,ymm15
+ vpxor ymm5,ymm2,ymm0
+ vmovdqa YMMWORD PTR[(480-256-128)+rbx],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpxor ymm12,ymm12,YMMWORD PTR[((256-256-128))+rbx]
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm3,ymm3,ymm5
+ vpsrld ymm9,ymm12,31
+ vpaddd ymm12,ymm12,ymm12
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((96-128))+rax]
+
+ vpslld ymm7,ymm3,5
+ vpaddd ymm2,ymm2,ymm15
+ vpxor ymm5,ymm1,ymm4
+ vmovdqa YMMWORD PTR[(0-128)+rax],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpxor ymm13,ymm13,YMMWORD PTR[((288-256-128))+rbx]
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm2,ymm2,ymm5
+ vpsrld ymm9,ymm13,31
+ vpaddd ymm13,ymm13,ymm13
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((128-128))+rax]
+
+ vpslld ymm7,ymm2,5
+ vpaddd ymm1,ymm1,ymm15
+ vpxor ymm5,ymm0,ymm3
+ vmovdqa YMMWORD PTR[(32-128)+rax],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpxor ymm14,ymm14,YMMWORD PTR[((320-256-128))+rbx]
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm1,ymm1,ymm5
+ vpsrld ymm9,ymm14,31
+ vpaddd ymm14,ymm14,ymm14
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((160-128))+rax]
+
+ vpslld ymm7,ymm1,5
+ vpaddd ymm0,ymm0,ymm15
+ vpxor ymm5,ymm4,ymm2
+ vmovdqa YMMWORD PTR[(64-128)+rax],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpxor ymm10,ymm10,YMMWORD PTR[((352-256-128))+rbx]
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm5,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm0,ymm0,ymm5
+ vpsrld ymm9,ymm10,31
+ vpaddd ymm10,ymm10,ymm10
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((192-128))+rax]
+
+ vpslld ymm7,ymm0,5
+ vpaddd ymm4,ymm4,ymm15
+ vpxor ymm5,ymm3,ymm1
+ vmovdqa YMMWORD PTR[(96-128)+rax],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpxor ymm11,ymm11,YMMWORD PTR[((384-256-128))+rbx]
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm4,ymm4,ymm5
+ vpsrld ymm9,ymm11,31
+ vpaddd ymm11,ymm11,ymm11
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((224-128))+rax]
+
+ vpslld ymm7,ymm4,5
+ vpaddd ymm3,ymm3,ymm15
+ vpxor ymm5,ymm2,ymm0
+ vmovdqa YMMWORD PTR[(128-128)+rax],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpxor ymm12,ymm12,YMMWORD PTR[((416-256-128))+rbx]
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm3,ymm3,ymm5
+ vpsrld ymm9,ymm12,31
+ vpaddd ymm12,ymm12,ymm12
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((256-256-128))+rbx]
+
+ vpslld ymm7,ymm3,5
+ vpaddd ymm2,ymm2,ymm15
+ vpxor ymm5,ymm1,ymm4
+ vmovdqa YMMWORD PTR[(160-128)+rax],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpxor ymm13,ymm13,YMMWORD PTR[((448-256-128))+rbx]
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm2,ymm2,ymm5
+ vpsrld ymm9,ymm13,31
+ vpaddd ymm13,ymm13,ymm13
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((288-256-128))+rbx]
+
+ vpslld ymm7,ymm2,5
+ vpaddd ymm1,ymm1,ymm15
+ vpxor ymm5,ymm0,ymm3
+ vmovdqa YMMWORD PTR[(192-128)+rax],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpxor ymm14,ymm14,YMMWORD PTR[((480-256-128))+rbx]
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm1,ymm1,ymm5
+ vpsrld ymm9,ymm14,31
+ vpaddd ymm14,ymm14,ymm14
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((320-256-128))+rbx]
+
+ vpslld ymm7,ymm1,5
+ vpaddd ymm0,ymm0,ymm15
+ vpxor ymm5,ymm4,ymm2
+ vmovdqa YMMWORD PTR[(224-128)+rax],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpxor ymm10,ymm10,YMMWORD PTR[((0-128))+rax]
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm5,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm0,ymm0,ymm5
+ vpsrld ymm9,ymm10,31
+ vpaddd ymm10,ymm10,ymm10
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vmovdqa ymm15,YMMWORD PTR[32+rbp]
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((352-256-128))+rbx]
+
+ vpaddd ymm4,ymm4,ymm15
+ vpslld ymm7,ymm0,5
+ vpand ymm6,ymm3,ymm2
+ vpxor ymm11,ymm11,YMMWORD PTR[((32-128))+rax]
+
+ vpaddd ymm4,ymm4,ymm6
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm3,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vmovdqu YMMWORD PTR[(256-256-128)+rbx],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm11,31
+ vpand ymm5,ymm5,ymm1
+ vpaddd ymm11,ymm11,ymm11
+
+ vpslld ymm6,ymm1,30
+ vpaddd ymm4,ymm4,ymm5
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((384-256-128))+rbx]
+
+ vpaddd ymm3,ymm3,ymm15
+ vpslld ymm7,ymm4,5
+ vpand ymm6,ymm2,ymm1
+ vpxor ymm12,ymm12,YMMWORD PTR[((64-128))+rax]
+
+ vpaddd ymm3,ymm3,ymm6
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm2,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vmovdqu YMMWORD PTR[(288-256-128)+rbx],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm12,31
+ vpand ymm5,ymm5,ymm0
+ vpaddd ymm12,ymm12,ymm12
+
+ vpslld ymm6,ymm0,30
+ vpaddd ymm3,ymm3,ymm5
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((416-256-128))+rbx]
+
+ vpaddd ymm2,ymm2,ymm15
+ vpslld ymm7,ymm3,5
+ vpand ymm6,ymm1,ymm0
+ vpxor ymm13,ymm13,YMMWORD PTR[((96-128))+rax]
+
+ vpaddd ymm2,ymm2,ymm6
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm1,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vmovdqu YMMWORD PTR[(320-256-128)+rbx],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm13,31
+ vpand ymm5,ymm5,ymm4
+ vpaddd ymm13,ymm13,ymm13
+
+ vpslld ymm6,ymm4,30
+ vpaddd ymm2,ymm2,ymm5
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((448-256-128))+rbx]
+
+ vpaddd ymm1,ymm1,ymm15
+ vpslld ymm7,ymm2,5
+ vpand ymm6,ymm0,ymm4
+ vpxor ymm14,ymm14,YMMWORD PTR[((128-128))+rax]
+
+ vpaddd ymm1,ymm1,ymm6
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm0,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vmovdqu YMMWORD PTR[(352-256-128)+rbx],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm14,31
+ vpand ymm5,ymm5,ymm3
+ vpaddd ymm14,ymm14,ymm14
+
+ vpslld ymm6,ymm3,30
+ vpaddd ymm1,ymm1,ymm5
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((480-256-128))+rbx]
+
+ vpaddd ymm0,ymm0,ymm15
+ vpslld ymm7,ymm1,5
+ vpand ymm6,ymm4,ymm3
+ vpxor ymm10,ymm10,YMMWORD PTR[((160-128))+rax]
+
+ vpaddd ymm0,ymm0,ymm6
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm4,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vmovdqu YMMWORD PTR[(384-256-128)+rbx],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm10,31
+ vpand ymm5,ymm5,ymm2
+ vpaddd ymm10,ymm10,ymm10
+
+ vpslld ymm6,ymm2,30
+ vpaddd ymm0,ymm0,ymm5
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((0-128))+rax]
+
+ vpaddd ymm4,ymm4,ymm15
+ vpslld ymm7,ymm0,5
+ vpand ymm6,ymm3,ymm2
+ vpxor ymm11,ymm11,YMMWORD PTR[((192-128))+rax]
+
+ vpaddd ymm4,ymm4,ymm6
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm3,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vmovdqu YMMWORD PTR[(416-256-128)+rbx],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm11,31
+ vpand ymm5,ymm5,ymm1
+ vpaddd ymm11,ymm11,ymm11
+
+ vpslld ymm6,ymm1,30
+ vpaddd ymm4,ymm4,ymm5
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((32-128))+rax]
+
+ vpaddd ymm3,ymm3,ymm15
+ vpslld ymm7,ymm4,5
+ vpand ymm6,ymm2,ymm1
+ vpxor ymm12,ymm12,YMMWORD PTR[((224-128))+rax]
+
+ vpaddd ymm3,ymm3,ymm6
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm2,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vmovdqu YMMWORD PTR[(448-256-128)+rbx],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm12,31
+ vpand ymm5,ymm5,ymm0
+ vpaddd ymm12,ymm12,ymm12
+
+ vpslld ymm6,ymm0,30
+ vpaddd ymm3,ymm3,ymm5
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((64-128))+rax]
+
+ vpaddd ymm2,ymm2,ymm15
+ vpslld ymm7,ymm3,5
+ vpand ymm6,ymm1,ymm0
+ vpxor ymm13,ymm13,YMMWORD PTR[((256-256-128))+rbx]
+
+ vpaddd ymm2,ymm2,ymm6
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm1,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vmovdqu YMMWORD PTR[(480-256-128)+rbx],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm13,31
+ vpand ymm5,ymm5,ymm4
+ vpaddd ymm13,ymm13,ymm13
+
+ vpslld ymm6,ymm4,30
+ vpaddd ymm2,ymm2,ymm5
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((96-128))+rax]
+
+ vpaddd ymm1,ymm1,ymm15
+ vpslld ymm7,ymm2,5
+ vpand ymm6,ymm0,ymm4
+ vpxor ymm14,ymm14,YMMWORD PTR[((288-256-128))+rbx]
+
+ vpaddd ymm1,ymm1,ymm6
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm0,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vmovdqu YMMWORD PTR[(0-128)+rax],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm14,31
+ vpand ymm5,ymm5,ymm3
+ vpaddd ymm14,ymm14,ymm14
+
+ vpslld ymm6,ymm3,30
+ vpaddd ymm1,ymm1,ymm5
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((128-128))+rax]
+
+ vpaddd ymm0,ymm0,ymm15
+ vpslld ymm7,ymm1,5
+ vpand ymm6,ymm4,ymm3
+ vpxor ymm10,ymm10,YMMWORD PTR[((320-256-128))+rbx]
+
+ vpaddd ymm0,ymm0,ymm6
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm4,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vmovdqu YMMWORD PTR[(32-128)+rax],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm10,31
+ vpand ymm5,ymm5,ymm2
+ vpaddd ymm10,ymm10,ymm10
+
+ vpslld ymm6,ymm2,30
+ vpaddd ymm0,ymm0,ymm5
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((160-128))+rax]
+
+ vpaddd ymm4,ymm4,ymm15
+ vpslld ymm7,ymm0,5
+ vpand ymm6,ymm3,ymm2
+ vpxor ymm11,ymm11,YMMWORD PTR[((352-256-128))+rbx]
+
+ vpaddd ymm4,ymm4,ymm6
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm3,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vmovdqu YMMWORD PTR[(64-128)+rax],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm11,31
+ vpand ymm5,ymm5,ymm1
+ vpaddd ymm11,ymm11,ymm11
+
+ vpslld ymm6,ymm1,30
+ vpaddd ymm4,ymm4,ymm5
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((192-128))+rax]
+
+ vpaddd ymm3,ymm3,ymm15
+ vpslld ymm7,ymm4,5
+ vpand ymm6,ymm2,ymm1
+ vpxor ymm12,ymm12,YMMWORD PTR[((384-256-128))+rbx]
+
+ vpaddd ymm3,ymm3,ymm6
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm2,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vmovdqu YMMWORD PTR[(96-128)+rax],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm12,31
+ vpand ymm5,ymm5,ymm0
+ vpaddd ymm12,ymm12,ymm12
+
+ vpslld ymm6,ymm0,30
+ vpaddd ymm3,ymm3,ymm5
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((224-128))+rax]
+
+ vpaddd ymm2,ymm2,ymm15
+ vpslld ymm7,ymm3,5
+ vpand ymm6,ymm1,ymm0
+ vpxor ymm13,ymm13,YMMWORD PTR[((416-256-128))+rbx]
+
+ vpaddd ymm2,ymm2,ymm6
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm1,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vmovdqu YMMWORD PTR[(128-128)+rax],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm13,31
+ vpand ymm5,ymm5,ymm4
+ vpaddd ymm13,ymm13,ymm13
+
+ vpslld ymm6,ymm4,30
+ vpaddd ymm2,ymm2,ymm5
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((256-256-128))+rbx]
+
+ vpaddd ymm1,ymm1,ymm15
+ vpslld ymm7,ymm2,5
+ vpand ymm6,ymm0,ymm4
+ vpxor ymm14,ymm14,YMMWORD PTR[((448-256-128))+rbx]
+
+ vpaddd ymm1,ymm1,ymm6
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm0,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vmovdqu YMMWORD PTR[(160-128)+rax],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm14,31
+ vpand ymm5,ymm5,ymm3
+ vpaddd ymm14,ymm14,ymm14
+
+ vpslld ymm6,ymm3,30
+ vpaddd ymm1,ymm1,ymm5
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((288-256-128))+rbx]
+
+ vpaddd ymm0,ymm0,ymm15
+ vpslld ymm7,ymm1,5
+ vpand ymm6,ymm4,ymm3
+ vpxor ymm10,ymm10,YMMWORD PTR[((480-256-128))+rbx]
+
+ vpaddd ymm0,ymm0,ymm6
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm4,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vmovdqu YMMWORD PTR[(192-128)+rax],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm10,31
+ vpand ymm5,ymm5,ymm2
+ vpaddd ymm10,ymm10,ymm10
+
+ vpslld ymm6,ymm2,30
+ vpaddd ymm0,ymm0,ymm5
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((320-256-128))+rbx]
+
+ vpaddd ymm4,ymm4,ymm15
+ vpslld ymm7,ymm0,5
+ vpand ymm6,ymm3,ymm2
+ vpxor ymm11,ymm11,YMMWORD PTR[((0-128))+rax]
+
+ vpaddd ymm4,ymm4,ymm6
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm3,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vmovdqu YMMWORD PTR[(224-128)+rax],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm11,31
+ vpand ymm5,ymm5,ymm1
+ vpaddd ymm11,ymm11,ymm11
+
+ vpslld ymm6,ymm1,30
+ vpaddd ymm4,ymm4,ymm5
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((352-256-128))+rbx]
+
+ vpaddd ymm3,ymm3,ymm15
+ vpslld ymm7,ymm4,5
+ vpand ymm6,ymm2,ymm1
+ vpxor ymm12,ymm12,YMMWORD PTR[((32-128))+rax]
+
+ vpaddd ymm3,ymm3,ymm6
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm2,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vmovdqu YMMWORD PTR[(256-256-128)+rbx],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm12,31
+ vpand ymm5,ymm5,ymm0
+ vpaddd ymm12,ymm12,ymm12
+
+ vpslld ymm6,ymm0,30
+ vpaddd ymm3,ymm3,ymm5
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((384-256-128))+rbx]
+
+ vpaddd ymm2,ymm2,ymm15
+ vpslld ymm7,ymm3,5
+ vpand ymm6,ymm1,ymm0
+ vpxor ymm13,ymm13,YMMWORD PTR[((64-128))+rax]
+
+ vpaddd ymm2,ymm2,ymm6
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm1,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vmovdqu YMMWORD PTR[(288-256-128)+rbx],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm13,31
+ vpand ymm5,ymm5,ymm4
+ vpaddd ymm13,ymm13,ymm13
+
+ vpslld ymm6,ymm4,30
+ vpaddd ymm2,ymm2,ymm5
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((416-256-128))+rbx]
+
+ vpaddd ymm1,ymm1,ymm15
+ vpslld ymm7,ymm2,5
+ vpand ymm6,ymm0,ymm4
+ vpxor ymm14,ymm14,YMMWORD PTR[((96-128))+rax]
+
+ vpaddd ymm1,ymm1,ymm6
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm0,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vmovdqu YMMWORD PTR[(320-256-128)+rbx],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm14,31
+ vpand ymm5,ymm5,ymm3
+ vpaddd ymm14,ymm14,ymm14
+
+ vpslld ymm6,ymm3,30
+ vpaddd ymm1,ymm1,ymm5
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((448-256-128))+rbx]
+
+ vpaddd ymm0,ymm0,ymm15
+ vpslld ymm7,ymm1,5
+ vpand ymm6,ymm4,ymm3
+ vpxor ymm10,ymm10,YMMWORD PTR[((128-128))+rax]
+
+ vpaddd ymm0,ymm0,ymm6
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm4,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vmovdqu YMMWORD PTR[(352-256-128)+rbx],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpor ymm7,ymm7,ymm8
+ vpsrld ymm9,ymm10,31
+ vpand ymm5,ymm5,ymm2
+ vpaddd ymm10,ymm10,ymm10
+
+ vpslld ymm6,ymm2,30
+ vpaddd ymm0,ymm0,ymm5
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vmovdqa ymm15,YMMWORD PTR[64+rbp]
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((480-256-128))+rbx]
+
+ vpslld ymm7,ymm0,5
+ vpaddd ymm4,ymm4,ymm15
+ vpxor ymm5,ymm3,ymm1
+ vmovdqa YMMWORD PTR[(384-256-128)+rbx],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpxor ymm11,ymm11,YMMWORD PTR[((160-128))+rax]
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm4,ymm4,ymm5
+ vpsrld ymm9,ymm11,31
+ vpaddd ymm11,ymm11,ymm11
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((0-128))+rax]
+
+ vpslld ymm7,ymm4,5
+ vpaddd ymm3,ymm3,ymm15
+ vpxor ymm5,ymm2,ymm0
+ vmovdqa YMMWORD PTR[(416-256-128)+rbx],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpxor ymm12,ymm12,YMMWORD PTR[((192-128))+rax]
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm3,ymm3,ymm5
+ vpsrld ymm9,ymm12,31
+ vpaddd ymm12,ymm12,ymm12
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((32-128))+rax]
+
+ vpslld ymm7,ymm3,5
+ vpaddd ymm2,ymm2,ymm15
+ vpxor ymm5,ymm1,ymm4
+ vmovdqa YMMWORD PTR[(448-256-128)+rbx],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpxor ymm13,ymm13,YMMWORD PTR[((224-128))+rax]
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm2,ymm2,ymm5
+ vpsrld ymm9,ymm13,31
+ vpaddd ymm13,ymm13,ymm13
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((64-128))+rax]
+
+ vpslld ymm7,ymm2,5
+ vpaddd ymm1,ymm1,ymm15
+ vpxor ymm5,ymm0,ymm3
+ vmovdqa YMMWORD PTR[(480-256-128)+rbx],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpxor ymm14,ymm14,YMMWORD PTR[((256-256-128))+rbx]
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm1,ymm1,ymm5
+ vpsrld ymm9,ymm14,31
+ vpaddd ymm14,ymm14,ymm14
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((96-128))+rax]
+
+ vpslld ymm7,ymm1,5
+ vpaddd ymm0,ymm0,ymm15
+ vpxor ymm5,ymm4,ymm2
+ vmovdqa YMMWORD PTR[(0-128)+rax],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpxor ymm10,ymm10,YMMWORD PTR[((288-256-128))+rbx]
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm5,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm0,ymm0,ymm5
+ vpsrld ymm9,ymm10,31
+ vpaddd ymm10,ymm10,ymm10
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((128-128))+rax]
+
+ vpslld ymm7,ymm0,5
+ vpaddd ymm4,ymm4,ymm15
+ vpxor ymm5,ymm3,ymm1
+ vmovdqa YMMWORD PTR[(32-128)+rax],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpxor ymm11,ymm11,YMMWORD PTR[((320-256-128))+rbx]
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm4,ymm4,ymm5
+ vpsrld ymm9,ymm11,31
+ vpaddd ymm11,ymm11,ymm11
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((160-128))+rax]
+
+ vpslld ymm7,ymm4,5
+ vpaddd ymm3,ymm3,ymm15
+ vpxor ymm5,ymm2,ymm0
+ vmovdqa YMMWORD PTR[(64-128)+rax],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpxor ymm12,ymm12,YMMWORD PTR[((352-256-128))+rbx]
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm3,ymm3,ymm5
+ vpsrld ymm9,ymm12,31
+ vpaddd ymm12,ymm12,ymm12
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((192-128))+rax]
+
+ vpslld ymm7,ymm3,5
+ vpaddd ymm2,ymm2,ymm15
+ vpxor ymm5,ymm1,ymm4
+ vmovdqa YMMWORD PTR[(96-128)+rax],ymm12
+ vpaddd ymm2,ymm2,ymm12
+ vpxor ymm13,ymm13,YMMWORD PTR[((384-256-128))+rbx]
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm2,ymm2,ymm5
+ vpsrld ymm9,ymm13,31
+ vpaddd ymm13,ymm13,ymm13
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((224-128))+rax]
+
+ vpslld ymm7,ymm2,5
+ vpaddd ymm1,ymm1,ymm15
+ vpxor ymm5,ymm0,ymm3
+ vmovdqa YMMWORD PTR[(128-128)+rax],ymm13
+ vpaddd ymm1,ymm1,ymm13
+ vpxor ymm14,ymm14,YMMWORD PTR[((416-256-128))+rbx]
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm1,ymm1,ymm5
+ vpsrld ymm9,ymm14,31
+ vpaddd ymm14,ymm14,ymm14
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((256-256-128))+rbx]
+
+ vpslld ymm7,ymm1,5
+ vpaddd ymm0,ymm0,ymm15
+ vpxor ymm5,ymm4,ymm2
+ vmovdqa YMMWORD PTR[(160-128)+rax],ymm14
+ vpaddd ymm0,ymm0,ymm14
+ vpxor ymm10,ymm10,YMMWORD PTR[((448-256-128))+rbx]
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm5,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm0,ymm0,ymm5
+ vpsrld ymm9,ymm10,31
+ vpaddd ymm10,ymm10,ymm10
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((288-256-128))+rbx]
+
+ vpslld ymm7,ymm0,5
+ vpaddd ymm4,ymm4,ymm15
+ vpxor ymm5,ymm3,ymm1
+ vmovdqa YMMWORD PTR[(192-128)+rax],ymm10
+ vpaddd ymm4,ymm4,ymm10
+ vpxor ymm11,ymm11,YMMWORD PTR[((480-256-128))+rbx]
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm4,ymm4,ymm5
+ vpsrld ymm9,ymm11,31
+ vpaddd ymm11,ymm11,ymm11
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((320-256-128))+rbx]
+
+ vpslld ymm7,ymm4,5
+ vpaddd ymm3,ymm3,ymm15
+ vpxor ymm5,ymm2,ymm0
+ vmovdqa YMMWORD PTR[(224-128)+rax],ymm11
+ vpaddd ymm3,ymm3,ymm11
+ vpxor ymm12,ymm12,YMMWORD PTR[((0-128))+rax]
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm3,ymm3,ymm5
+ vpsrld ymm9,ymm12,31
+ vpaddd ymm12,ymm12,ymm12
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((352-256-128))+rbx]
+
+ vpslld ymm7,ymm3,5
+ vpaddd ymm2,ymm2,ymm15
+ vpxor ymm5,ymm1,ymm4
+ vpaddd ymm2,ymm2,ymm12
+ vpxor ymm13,ymm13,YMMWORD PTR[((32-128))+rax]
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm2,ymm2,ymm5
+ vpsrld ymm9,ymm13,31
+ vpaddd ymm13,ymm13,ymm13
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((384-256-128))+rbx]
+
+ vpslld ymm7,ymm2,5
+ vpaddd ymm1,ymm1,ymm15
+ vpxor ymm5,ymm0,ymm3
+ vpaddd ymm1,ymm1,ymm13
+ vpxor ymm14,ymm14,YMMWORD PTR[((64-128))+rax]
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm1,ymm1,ymm5
+ vpsrld ymm9,ymm14,31
+ vpaddd ymm14,ymm14,ymm14
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpxor ymm10,ymm10,ymm12
+ vmovdqa ymm12,YMMWORD PTR[((416-256-128))+rbx]
+
+ vpslld ymm7,ymm1,5
+ vpaddd ymm0,ymm0,ymm15
+ vpxor ymm5,ymm4,ymm2
+ vpaddd ymm0,ymm0,ymm14
+ vpxor ymm10,ymm10,YMMWORD PTR[((96-128))+rax]
+ vpsrld ymm8,ymm1,27
+ vpxor ymm5,ymm5,ymm3
+ vpxor ymm10,ymm10,ymm12
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm0,ymm0,ymm5
+ vpsrld ymm9,ymm10,31
+ vpaddd ymm10,ymm10,ymm10
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm10,ymm10,ymm9
+ vpor ymm2,ymm2,ymm6
+ vpxor ymm11,ymm11,ymm13
+ vmovdqa ymm13,YMMWORD PTR[((448-256-128))+rbx]
+
+ vpslld ymm7,ymm0,5
+ vpaddd ymm4,ymm4,ymm15
+ vpxor ymm5,ymm3,ymm1
+ vpaddd ymm4,ymm4,ymm10
+ vpxor ymm11,ymm11,YMMWORD PTR[((128-128))+rax]
+ vpsrld ymm8,ymm0,27
+ vpxor ymm5,ymm5,ymm2
+ vpxor ymm11,ymm11,ymm13
+
+ vpslld ymm6,ymm1,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm4,ymm4,ymm5
+ vpsrld ymm9,ymm11,31
+ vpaddd ymm11,ymm11,ymm11
+
+ vpsrld ymm1,ymm1,2
+ vpaddd ymm4,ymm4,ymm7
+ vpor ymm11,ymm11,ymm9
+ vpor ymm1,ymm1,ymm6
+ vpxor ymm12,ymm12,ymm14
+ vmovdqa ymm14,YMMWORD PTR[((480-256-128))+rbx]
+
+ vpslld ymm7,ymm4,5
+ vpaddd ymm3,ymm3,ymm15
+ vpxor ymm5,ymm2,ymm0
+ vpaddd ymm3,ymm3,ymm11
+ vpxor ymm12,ymm12,YMMWORD PTR[((160-128))+rax]
+ vpsrld ymm8,ymm4,27
+ vpxor ymm5,ymm5,ymm1
+ vpxor ymm12,ymm12,ymm14
+
+ vpslld ymm6,ymm0,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm3,ymm3,ymm5
+ vpsrld ymm9,ymm12,31
+ vpaddd ymm12,ymm12,ymm12
+
+ vpsrld ymm0,ymm0,2
+ vpaddd ymm3,ymm3,ymm7
+ vpor ymm12,ymm12,ymm9
+ vpor ymm0,ymm0,ymm6
+ vpxor ymm13,ymm13,ymm10
+ vmovdqa ymm10,YMMWORD PTR[((0-128))+rax]
+
+ vpslld ymm7,ymm3,5
+ vpaddd ymm2,ymm2,ymm15
+ vpxor ymm5,ymm1,ymm4
+ vpaddd ymm2,ymm2,ymm12
+ vpxor ymm13,ymm13,YMMWORD PTR[((192-128))+rax]
+ vpsrld ymm8,ymm3,27
+ vpxor ymm5,ymm5,ymm0
+ vpxor ymm13,ymm13,ymm10
+
+ vpslld ymm6,ymm4,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm2,ymm2,ymm5
+ vpsrld ymm9,ymm13,31
+ vpaddd ymm13,ymm13,ymm13
+
+ vpsrld ymm4,ymm4,2
+ vpaddd ymm2,ymm2,ymm7
+ vpor ymm13,ymm13,ymm9
+ vpor ymm4,ymm4,ymm6
+ vpxor ymm14,ymm14,ymm11
+ vmovdqa ymm11,YMMWORD PTR[((32-128))+rax]
+
+ vpslld ymm7,ymm2,5
+ vpaddd ymm1,ymm1,ymm15
+ vpxor ymm5,ymm0,ymm3
+ vpaddd ymm1,ymm1,ymm13
+ vpxor ymm14,ymm14,YMMWORD PTR[((224-128))+rax]
+ vpsrld ymm8,ymm2,27
+ vpxor ymm5,ymm5,ymm4
+ vpxor ymm14,ymm14,ymm11
+
+ vpslld ymm6,ymm3,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm1,ymm1,ymm5
+ vpsrld ymm9,ymm14,31
+ vpaddd ymm14,ymm14,ymm14
+
+ vpsrld ymm3,ymm3,2
+ vpaddd ymm1,ymm1,ymm7
+ vpor ymm14,ymm14,ymm9
+ vpor ymm3,ymm3,ymm6
+ vpslld ymm7,ymm1,5
+ vpaddd ymm0,ymm0,ymm15
+ vpxor ymm5,ymm4,ymm2
+
+ vpsrld ymm8,ymm1,27
+ vpaddd ymm0,ymm0,ymm14
+ vpxor ymm5,ymm5,ymm3
+
+ vpslld ymm6,ymm2,30
+ vpor ymm7,ymm7,ymm8
+ vpaddd ymm0,ymm0,ymm5
+
+ vpsrld ymm2,ymm2,2
+ vpaddd ymm0,ymm0,ymm7
+ vpor ymm2,ymm2,ymm6
+ mov ecx,1
+ lea rbx,QWORD PTR[512+rsp]
+ cmp ecx,DWORD PTR[rbx]
+ cmovge r12,rbp
+ cmp ecx,DWORD PTR[4+rbx]
+ cmovge r13,rbp
+ cmp ecx,DWORD PTR[8+rbx]
+ cmovge r14,rbp
+ cmp ecx,DWORD PTR[12+rbx]
+ cmovge r15,rbp
+ cmp ecx,DWORD PTR[16+rbx]
+ cmovge r8,rbp
+ cmp ecx,DWORD PTR[20+rbx]
+ cmovge r9,rbp
+ cmp ecx,DWORD PTR[24+rbx]
+ cmovge r10,rbp
+ cmp ecx,DWORD PTR[28+rbx]
+ cmovge r11,rbp
+ vmovdqu ymm5,YMMWORD PTR[rbx]
+ vpxor ymm7,ymm7,ymm7
+ vmovdqa ymm6,ymm5
+ vpcmpgtd ymm6,ymm6,ymm7
+ vpaddd ymm5,ymm5,ymm6
+
+ vpand ymm0,ymm0,ymm6
+ vpand ymm1,ymm1,ymm6
+ vpaddd ymm0,ymm0,YMMWORD PTR[rdi]
+ vpand ymm2,ymm2,ymm6
+ vpaddd ymm1,ymm1,YMMWORD PTR[32+rdi]
+ vpand ymm3,ymm3,ymm6
+ vpaddd ymm2,ymm2,YMMWORD PTR[64+rdi]
+ vpand ymm4,ymm4,ymm6
+ vpaddd ymm3,ymm3,YMMWORD PTR[96+rdi]
+ vpaddd ymm4,ymm4,YMMWORD PTR[128+rdi]
+ vmovdqu YMMWORD PTR[rdi],ymm0
+ vmovdqu YMMWORD PTR[32+rdi],ymm1
+ vmovdqu YMMWORD PTR[64+rdi],ymm2
+ vmovdqu YMMWORD PTR[96+rdi],ymm3
+ vmovdqu YMMWORD PTR[128+rdi],ymm4
+
+ vmovdqu YMMWORD PTR[rbx],ymm5
+ lea rbx,QWORD PTR[((256+128))+rsp]
+ vmovdqu ymm9,YMMWORD PTR[96+rbp]
+ dec edx
+ jnz $L$oop_avx2
+
+
+
+
+
+
+
+$L$done_avx2::
+ mov rax,QWORD PTR[544+rsp]
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-216))+rax]
+ movaps xmm7,XMMWORD PTR[((-200))+rax]
+ movaps xmm8,XMMWORD PTR[((-184))+rax]
+ movaps xmm9,XMMWORD PTR[((-168))+rax]
+ movaps xmm10,XMMWORD PTR[((-152))+rax]
+ movaps xmm11,XMMWORD PTR[((-136))+rax]
+ movaps xmm12,XMMWORD PTR[((-120))+rax]
+ movaps xmm13,XMMWORD PTR[((-104))+rax]
+ movaps xmm14,XMMWORD PTR[((-88))+rax]
+ movaps xmm15,XMMWORD PTR[((-72))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$epilogue_avx2::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha1_multi_block_avx2::
+sha1_multi_block_avx2 ENDP
+
+ALIGN 256
+ DD 05a827999h,05a827999h,05a827999h,05a827999h
+ DD 05a827999h,05a827999h,05a827999h,05a827999h
+K_XX_XX::
+ DD 06ed9eba1h,06ed9eba1h,06ed9eba1h,06ed9eba1h
+ DD 06ed9eba1h,06ed9eba1h,06ed9eba1h,06ed9eba1h
+ DD 08f1bbcdch,08f1bbcdch,08f1bbcdch,08f1bbcdch
+ DD 08f1bbcdch,08f1bbcdch,08f1bbcdch,08f1bbcdch
+ DD 0ca62c1d6h,0ca62c1d6h,0ca62c1d6h,0ca62c1d6h
+ DD 0ca62c1d6h,0ca62c1d6h,0ca62c1d6h,0ca62c1d6h
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+DB 0fh,0eh,0dh,0ch,0bh,0ah,09h,08h,07h,06h,05h,04h,03h,02h,01h,00h
+DB 83,72,65,49,32,109,117,108,116,105,45,98,108,111,99,107
+DB 32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120
+DB 56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77
+DB 83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110
+DB 115,115,108,46,111,114,103,62,0
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ mov rax,QWORD PTR[272+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+
+ lea rsi,QWORD PTR[((-24-160))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+ALIGN 16
+avx2_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ mov rax,QWORD PTR[544+r8]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+ lea rsi,QWORD PTR[((-56-160))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+ jmp $L$in_prologue
+avx2_handler ENDP
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_sha1_multi_block
+ DD imagerel $L$SEH_end_sha1_multi_block
+ DD imagerel $L$SEH_info_sha1_multi_block
+ DD imagerel $L$SEH_begin_sha1_multi_block_shaext
+ DD imagerel $L$SEH_end_sha1_multi_block_shaext
+ DD imagerel $L$SEH_info_sha1_multi_block_shaext
+ DD imagerel $L$SEH_begin_sha1_multi_block_avx
+ DD imagerel $L$SEH_end_sha1_multi_block_avx
+ DD imagerel $L$SEH_info_sha1_multi_block_avx
+ DD imagerel $L$SEH_begin_sha1_multi_block_avx2
+ DD imagerel $L$SEH_end_sha1_multi_block_avx2
+ DD imagerel $L$SEH_info_sha1_multi_block_avx2
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_sha1_multi_block::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$body,imagerel $L$epilogue
+$L$SEH_info_sha1_multi_block_shaext::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$body_shaext,imagerel $L$epilogue_shaext
+$L$SEH_info_sha1_multi_block_avx::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$body_avx,imagerel $L$epilogue_avx
+$L$SEH_info_sha1_multi_block_avx2::
+DB 9,0,0,0
+ DD imagerel avx2_handler
+ DD imagerel $L$body_avx2,imagerel $L$epilogue_avx2
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/sha/sha1-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/sha/sha1-x86_64.masm
index 3c38eb6e2e..c0cdf802f4 100644
--- a/contrib/libs/openssl/asm/windows/crypto/sha/sha1-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/sha/sha1-x86_64.masm
@@ -1,5772 +1,5772 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC sha1_block_data_order
-
-ALIGN 16
-sha1_block_data_order PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha1_block_data_order::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- mov r9d,DWORD PTR[((OPENSSL_ia32cap_P+0))]
- mov r8d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
- mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
- test r8d,512
- jz $L$ialu
- test r10d,536870912
- jnz _shaext_shortcut
- and r10d,296
- cmp r10d,296
- je _avx2_shortcut
- and r8d,268435456
- and r9d,1073741824
- or r8d,r9d
- cmp r8d,1342177280
- je _avx_shortcut
- jmp _ssse3_shortcut
-
-ALIGN 16
-$L$ialu::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- mov r8,rdi
- sub rsp,72
- mov r9,rsi
- and rsp,-64
- mov r10,rdx
- mov QWORD PTR[64+rsp],rax
-
-$L$prologue::
-
- mov esi,DWORD PTR[r8]
- mov edi,DWORD PTR[4+r8]
- mov r11d,DWORD PTR[8+r8]
- mov r12d,DWORD PTR[12+r8]
- mov r13d,DWORD PTR[16+r8]
- jmp $L$loop
-
-ALIGN 16
-$L$loop::
- mov edx,DWORD PTR[r9]
- bswap edx
- mov ebp,DWORD PTR[4+r9]
- mov eax,r12d
- mov DWORD PTR[rsp],edx
- mov ecx,esi
- bswap ebp
- xor eax,r11d
- rol ecx,5
- and eax,edi
- lea r13d,DWORD PTR[1518500249+r13*1+rdx]
- add r13d,ecx
- xor eax,r12d
- rol edi,30
- add r13d,eax
- mov r14d,DWORD PTR[8+r9]
- mov eax,r11d
- mov DWORD PTR[4+rsp],ebp
- mov ecx,r13d
- bswap r14d
- xor eax,edi
- rol ecx,5
- and eax,esi
- lea r12d,DWORD PTR[1518500249+r12*1+rbp]
- add r12d,ecx
- xor eax,r11d
- rol esi,30
- add r12d,eax
- mov edx,DWORD PTR[12+r9]
- mov eax,edi
- mov DWORD PTR[8+rsp],r14d
- mov ecx,r12d
- bswap edx
- xor eax,esi
- rol ecx,5
- and eax,r13d
- lea r11d,DWORD PTR[1518500249+r11*1+r14]
- add r11d,ecx
- xor eax,edi
- rol r13d,30
- add r11d,eax
- mov ebp,DWORD PTR[16+r9]
- mov eax,esi
- mov DWORD PTR[12+rsp],edx
- mov ecx,r11d
- bswap ebp
- xor eax,r13d
- rol ecx,5
- and eax,r12d
- lea edi,DWORD PTR[1518500249+rdi*1+rdx]
- add edi,ecx
- xor eax,esi
- rol r12d,30
- add edi,eax
- mov r14d,DWORD PTR[20+r9]
- mov eax,r13d
- mov DWORD PTR[16+rsp],ebp
- mov ecx,edi
- bswap r14d
- xor eax,r12d
- rol ecx,5
- and eax,r11d
- lea esi,DWORD PTR[1518500249+rsi*1+rbp]
- add esi,ecx
- xor eax,r13d
- rol r11d,30
- add esi,eax
- mov edx,DWORD PTR[24+r9]
- mov eax,r12d
- mov DWORD PTR[20+rsp],r14d
- mov ecx,esi
- bswap edx
- xor eax,r11d
- rol ecx,5
- and eax,edi
- lea r13d,DWORD PTR[1518500249+r13*1+r14]
- add r13d,ecx
- xor eax,r12d
- rol edi,30
- add r13d,eax
- mov ebp,DWORD PTR[28+r9]
- mov eax,r11d
- mov DWORD PTR[24+rsp],edx
- mov ecx,r13d
- bswap ebp
- xor eax,edi
- rol ecx,5
- and eax,esi
- lea r12d,DWORD PTR[1518500249+r12*1+rdx]
- add r12d,ecx
- xor eax,r11d
- rol esi,30
- add r12d,eax
- mov r14d,DWORD PTR[32+r9]
- mov eax,edi
- mov DWORD PTR[28+rsp],ebp
- mov ecx,r12d
- bswap r14d
- xor eax,esi
- rol ecx,5
- and eax,r13d
- lea r11d,DWORD PTR[1518500249+r11*1+rbp]
- add r11d,ecx
- xor eax,edi
- rol r13d,30
- add r11d,eax
- mov edx,DWORD PTR[36+r9]
- mov eax,esi
- mov DWORD PTR[32+rsp],r14d
- mov ecx,r11d
- bswap edx
- xor eax,r13d
- rol ecx,5
- and eax,r12d
- lea edi,DWORD PTR[1518500249+rdi*1+r14]
- add edi,ecx
- xor eax,esi
- rol r12d,30
- add edi,eax
- mov ebp,DWORD PTR[40+r9]
- mov eax,r13d
- mov DWORD PTR[36+rsp],edx
- mov ecx,edi
- bswap ebp
- xor eax,r12d
- rol ecx,5
- and eax,r11d
- lea esi,DWORD PTR[1518500249+rsi*1+rdx]
- add esi,ecx
- xor eax,r13d
- rol r11d,30
- add esi,eax
- mov r14d,DWORD PTR[44+r9]
- mov eax,r12d
- mov DWORD PTR[40+rsp],ebp
- mov ecx,esi
- bswap r14d
- xor eax,r11d
- rol ecx,5
- and eax,edi
- lea r13d,DWORD PTR[1518500249+r13*1+rbp]
- add r13d,ecx
- xor eax,r12d
- rol edi,30
- add r13d,eax
- mov edx,DWORD PTR[48+r9]
- mov eax,r11d
- mov DWORD PTR[44+rsp],r14d
- mov ecx,r13d
- bswap edx
- xor eax,edi
- rol ecx,5
- and eax,esi
- lea r12d,DWORD PTR[1518500249+r12*1+r14]
- add r12d,ecx
- xor eax,r11d
- rol esi,30
- add r12d,eax
- mov ebp,DWORD PTR[52+r9]
- mov eax,edi
- mov DWORD PTR[48+rsp],edx
- mov ecx,r12d
- bswap ebp
- xor eax,esi
- rol ecx,5
- and eax,r13d
- lea r11d,DWORD PTR[1518500249+r11*1+rdx]
- add r11d,ecx
- xor eax,edi
- rol r13d,30
- add r11d,eax
- mov r14d,DWORD PTR[56+r9]
- mov eax,esi
- mov DWORD PTR[52+rsp],ebp
- mov ecx,r11d
- bswap r14d
- xor eax,r13d
- rol ecx,5
- and eax,r12d
- lea edi,DWORD PTR[1518500249+rdi*1+rbp]
- add edi,ecx
- xor eax,esi
- rol r12d,30
- add edi,eax
- mov edx,DWORD PTR[60+r9]
- mov eax,r13d
- mov DWORD PTR[56+rsp],r14d
- mov ecx,edi
- bswap edx
- xor eax,r12d
- rol ecx,5
- and eax,r11d
- lea esi,DWORD PTR[1518500249+rsi*1+r14]
- add esi,ecx
- xor eax,r13d
- rol r11d,30
- add esi,eax
- xor ebp,DWORD PTR[rsp]
- mov eax,r12d
- mov DWORD PTR[60+rsp],edx
- mov ecx,esi
- xor ebp,DWORD PTR[8+rsp]
- xor eax,r11d
- rol ecx,5
- xor ebp,DWORD PTR[32+rsp]
- and eax,edi
- lea r13d,DWORD PTR[1518500249+r13*1+rdx]
- rol edi,30
- xor eax,r12d
- add r13d,ecx
- rol ebp,1
- add r13d,eax
- xor r14d,DWORD PTR[4+rsp]
- mov eax,r11d
- mov DWORD PTR[rsp],ebp
- mov ecx,r13d
- xor r14d,DWORD PTR[12+rsp]
- xor eax,edi
- rol ecx,5
- xor r14d,DWORD PTR[36+rsp]
- and eax,esi
- lea r12d,DWORD PTR[1518500249+r12*1+rbp]
- rol esi,30
- xor eax,r11d
- add r12d,ecx
- rol r14d,1
- add r12d,eax
- xor edx,DWORD PTR[8+rsp]
- mov eax,edi
- mov DWORD PTR[4+rsp],r14d
- mov ecx,r12d
- xor edx,DWORD PTR[16+rsp]
- xor eax,esi
- rol ecx,5
- xor edx,DWORD PTR[40+rsp]
- and eax,r13d
- lea r11d,DWORD PTR[1518500249+r11*1+r14]
- rol r13d,30
- xor eax,edi
- add r11d,ecx
- rol edx,1
- add r11d,eax
- xor ebp,DWORD PTR[12+rsp]
- mov eax,esi
- mov DWORD PTR[8+rsp],edx
- mov ecx,r11d
- xor ebp,DWORD PTR[20+rsp]
- xor eax,r13d
- rol ecx,5
- xor ebp,DWORD PTR[44+rsp]
- and eax,r12d
- lea edi,DWORD PTR[1518500249+rdi*1+rdx]
- rol r12d,30
- xor eax,esi
- add edi,ecx
- rol ebp,1
- add edi,eax
- xor r14d,DWORD PTR[16+rsp]
- mov eax,r13d
- mov DWORD PTR[12+rsp],ebp
- mov ecx,edi
- xor r14d,DWORD PTR[24+rsp]
- xor eax,r12d
- rol ecx,5
- xor r14d,DWORD PTR[48+rsp]
- and eax,r11d
- lea esi,DWORD PTR[1518500249+rsi*1+rbp]
- rol r11d,30
- xor eax,r13d
- add esi,ecx
- rol r14d,1
- add esi,eax
- xor edx,DWORD PTR[20+rsp]
- mov eax,edi
- mov DWORD PTR[16+rsp],r14d
- mov ecx,esi
- xor edx,DWORD PTR[28+rsp]
- xor eax,r12d
- rol ecx,5
- xor edx,DWORD PTR[52+rsp]
- lea r13d,DWORD PTR[1859775393+r13*1+r14]
- xor eax,r11d
- add r13d,ecx
- rol edi,30
- add r13d,eax
- rol edx,1
- xor ebp,DWORD PTR[24+rsp]
- mov eax,esi
- mov DWORD PTR[20+rsp],edx
- mov ecx,r13d
- xor ebp,DWORD PTR[32+rsp]
- xor eax,r11d
- rol ecx,5
- xor ebp,DWORD PTR[56+rsp]
- lea r12d,DWORD PTR[1859775393+r12*1+rdx]
- xor eax,edi
- add r12d,ecx
- rol esi,30
- add r12d,eax
- rol ebp,1
- xor r14d,DWORD PTR[28+rsp]
- mov eax,r13d
- mov DWORD PTR[24+rsp],ebp
- mov ecx,r12d
- xor r14d,DWORD PTR[36+rsp]
- xor eax,edi
- rol ecx,5
- xor r14d,DWORD PTR[60+rsp]
- lea r11d,DWORD PTR[1859775393+r11*1+rbp]
- xor eax,esi
- add r11d,ecx
- rol r13d,30
- add r11d,eax
- rol r14d,1
- xor edx,DWORD PTR[32+rsp]
- mov eax,r12d
- mov DWORD PTR[28+rsp],r14d
- mov ecx,r11d
- xor edx,DWORD PTR[40+rsp]
- xor eax,esi
- rol ecx,5
- xor edx,DWORD PTR[rsp]
- lea edi,DWORD PTR[1859775393+rdi*1+r14]
- xor eax,r13d
- add edi,ecx
- rol r12d,30
- add edi,eax
- rol edx,1
- xor ebp,DWORD PTR[36+rsp]
- mov eax,r11d
- mov DWORD PTR[32+rsp],edx
- mov ecx,edi
- xor ebp,DWORD PTR[44+rsp]
- xor eax,r13d
- rol ecx,5
- xor ebp,DWORD PTR[4+rsp]
- lea esi,DWORD PTR[1859775393+rsi*1+rdx]
- xor eax,r12d
- add esi,ecx
- rol r11d,30
- add esi,eax
- rol ebp,1
- xor r14d,DWORD PTR[40+rsp]
- mov eax,edi
- mov DWORD PTR[36+rsp],ebp
- mov ecx,esi
- xor r14d,DWORD PTR[48+rsp]
- xor eax,r12d
- rol ecx,5
- xor r14d,DWORD PTR[8+rsp]
- lea r13d,DWORD PTR[1859775393+r13*1+rbp]
- xor eax,r11d
- add r13d,ecx
- rol edi,30
- add r13d,eax
- rol r14d,1
- xor edx,DWORD PTR[44+rsp]
- mov eax,esi
- mov DWORD PTR[40+rsp],r14d
- mov ecx,r13d
- xor edx,DWORD PTR[52+rsp]
- xor eax,r11d
- rol ecx,5
- xor edx,DWORD PTR[12+rsp]
- lea r12d,DWORD PTR[1859775393+r12*1+r14]
- xor eax,edi
- add r12d,ecx
- rol esi,30
- add r12d,eax
- rol edx,1
- xor ebp,DWORD PTR[48+rsp]
- mov eax,r13d
- mov DWORD PTR[44+rsp],edx
- mov ecx,r12d
- xor ebp,DWORD PTR[56+rsp]
- xor eax,edi
- rol ecx,5
- xor ebp,DWORD PTR[16+rsp]
- lea r11d,DWORD PTR[1859775393+r11*1+rdx]
- xor eax,esi
- add r11d,ecx
- rol r13d,30
- add r11d,eax
- rol ebp,1
- xor r14d,DWORD PTR[52+rsp]
- mov eax,r12d
- mov DWORD PTR[48+rsp],ebp
- mov ecx,r11d
- xor r14d,DWORD PTR[60+rsp]
- xor eax,esi
- rol ecx,5
- xor r14d,DWORD PTR[20+rsp]
- lea edi,DWORD PTR[1859775393+rdi*1+rbp]
- xor eax,r13d
- add edi,ecx
- rol r12d,30
- add edi,eax
- rol r14d,1
- xor edx,DWORD PTR[56+rsp]
- mov eax,r11d
- mov DWORD PTR[52+rsp],r14d
- mov ecx,edi
- xor edx,DWORD PTR[rsp]
- xor eax,r13d
- rol ecx,5
- xor edx,DWORD PTR[24+rsp]
- lea esi,DWORD PTR[1859775393+rsi*1+r14]
- xor eax,r12d
- add esi,ecx
- rol r11d,30
- add esi,eax
- rol edx,1
- xor ebp,DWORD PTR[60+rsp]
- mov eax,edi
- mov DWORD PTR[56+rsp],edx
- mov ecx,esi
- xor ebp,DWORD PTR[4+rsp]
- xor eax,r12d
- rol ecx,5
- xor ebp,DWORD PTR[28+rsp]
- lea r13d,DWORD PTR[1859775393+r13*1+rdx]
- xor eax,r11d
- add r13d,ecx
- rol edi,30
- add r13d,eax
- rol ebp,1
- xor r14d,DWORD PTR[rsp]
- mov eax,esi
- mov DWORD PTR[60+rsp],ebp
- mov ecx,r13d
- xor r14d,DWORD PTR[8+rsp]
- xor eax,r11d
- rol ecx,5
- xor r14d,DWORD PTR[32+rsp]
- lea r12d,DWORD PTR[1859775393+r12*1+rbp]
- xor eax,edi
- add r12d,ecx
- rol esi,30
- add r12d,eax
- rol r14d,1
- xor edx,DWORD PTR[4+rsp]
- mov eax,r13d
- mov DWORD PTR[rsp],r14d
- mov ecx,r12d
- xor edx,DWORD PTR[12+rsp]
- xor eax,edi
- rol ecx,5
- xor edx,DWORD PTR[36+rsp]
- lea r11d,DWORD PTR[1859775393+r11*1+r14]
- xor eax,esi
- add r11d,ecx
- rol r13d,30
- add r11d,eax
- rol edx,1
- xor ebp,DWORD PTR[8+rsp]
- mov eax,r12d
- mov DWORD PTR[4+rsp],edx
- mov ecx,r11d
- xor ebp,DWORD PTR[16+rsp]
- xor eax,esi
- rol ecx,5
- xor ebp,DWORD PTR[40+rsp]
- lea edi,DWORD PTR[1859775393+rdi*1+rdx]
- xor eax,r13d
- add edi,ecx
- rol r12d,30
- add edi,eax
- rol ebp,1
- xor r14d,DWORD PTR[12+rsp]
- mov eax,r11d
- mov DWORD PTR[8+rsp],ebp
- mov ecx,edi
- xor r14d,DWORD PTR[20+rsp]
- xor eax,r13d
- rol ecx,5
- xor r14d,DWORD PTR[44+rsp]
- lea esi,DWORD PTR[1859775393+rsi*1+rbp]
- xor eax,r12d
- add esi,ecx
- rol r11d,30
- add esi,eax
- rol r14d,1
- xor edx,DWORD PTR[16+rsp]
- mov eax,edi
- mov DWORD PTR[12+rsp],r14d
- mov ecx,esi
- xor edx,DWORD PTR[24+rsp]
- xor eax,r12d
- rol ecx,5
- xor edx,DWORD PTR[48+rsp]
- lea r13d,DWORD PTR[1859775393+r13*1+r14]
- xor eax,r11d
- add r13d,ecx
- rol edi,30
- add r13d,eax
- rol edx,1
- xor ebp,DWORD PTR[20+rsp]
- mov eax,esi
- mov DWORD PTR[16+rsp],edx
- mov ecx,r13d
- xor ebp,DWORD PTR[28+rsp]
- xor eax,r11d
- rol ecx,5
- xor ebp,DWORD PTR[52+rsp]
- lea r12d,DWORD PTR[1859775393+r12*1+rdx]
- xor eax,edi
- add r12d,ecx
- rol esi,30
- add r12d,eax
- rol ebp,1
- xor r14d,DWORD PTR[24+rsp]
- mov eax,r13d
- mov DWORD PTR[20+rsp],ebp
- mov ecx,r12d
- xor r14d,DWORD PTR[32+rsp]
- xor eax,edi
- rol ecx,5
- xor r14d,DWORD PTR[56+rsp]
- lea r11d,DWORD PTR[1859775393+r11*1+rbp]
- xor eax,esi
- add r11d,ecx
- rol r13d,30
- add r11d,eax
- rol r14d,1
- xor edx,DWORD PTR[28+rsp]
- mov eax,r12d
- mov DWORD PTR[24+rsp],r14d
- mov ecx,r11d
- xor edx,DWORD PTR[36+rsp]
- xor eax,esi
- rol ecx,5
- xor edx,DWORD PTR[60+rsp]
- lea edi,DWORD PTR[1859775393+rdi*1+r14]
- xor eax,r13d
- add edi,ecx
- rol r12d,30
- add edi,eax
- rol edx,1
- xor ebp,DWORD PTR[32+rsp]
- mov eax,r11d
- mov DWORD PTR[28+rsp],edx
- mov ecx,edi
- xor ebp,DWORD PTR[40+rsp]
- xor eax,r13d
- rol ecx,5
- xor ebp,DWORD PTR[rsp]
- lea esi,DWORD PTR[1859775393+rsi*1+rdx]
- xor eax,r12d
- add esi,ecx
- rol r11d,30
- add esi,eax
- rol ebp,1
- xor r14d,DWORD PTR[36+rsp]
- mov eax,r12d
- mov DWORD PTR[32+rsp],ebp
- mov ebx,r12d
- xor r14d,DWORD PTR[44+rsp]
- and eax,r11d
- mov ecx,esi
- xor r14d,DWORD PTR[4+rsp]
- lea r13d,DWORD PTR[((-1894007588))+r13*1+rbp]
- xor ebx,r11d
- rol ecx,5
- add r13d,eax
- rol r14d,1
- and ebx,edi
- add r13d,ecx
- rol edi,30
- add r13d,ebx
- xor edx,DWORD PTR[40+rsp]
- mov eax,r11d
- mov DWORD PTR[36+rsp],r14d
- mov ebx,r11d
- xor edx,DWORD PTR[48+rsp]
- and eax,edi
- mov ecx,r13d
- xor edx,DWORD PTR[8+rsp]
- lea r12d,DWORD PTR[((-1894007588))+r12*1+r14]
- xor ebx,edi
- rol ecx,5
- add r12d,eax
- rol edx,1
- and ebx,esi
- add r12d,ecx
- rol esi,30
- add r12d,ebx
- xor ebp,DWORD PTR[44+rsp]
- mov eax,edi
- mov DWORD PTR[40+rsp],edx
- mov ebx,edi
- xor ebp,DWORD PTR[52+rsp]
- and eax,esi
- mov ecx,r12d
- xor ebp,DWORD PTR[12+rsp]
- lea r11d,DWORD PTR[((-1894007588))+r11*1+rdx]
- xor ebx,esi
- rol ecx,5
- add r11d,eax
- rol ebp,1
- and ebx,r13d
- add r11d,ecx
- rol r13d,30
- add r11d,ebx
- xor r14d,DWORD PTR[48+rsp]
- mov eax,esi
- mov DWORD PTR[44+rsp],ebp
- mov ebx,esi
- xor r14d,DWORD PTR[56+rsp]
- and eax,r13d
- mov ecx,r11d
- xor r14d,DWORD PTR[16+rsp]
- lea edi,DWORD PTR[((-1894007588))+rdi*1+rbp]
- xor ebx,r13d
- rol ecx,5
- add edi,eax
- rol r14d,1
- and ebx,r12d
- add edi,ecx
- rol r12d,30
- add edi,ebx
- xor edx,DWORD PTR[52+rsp]
- mov eax,r13d
- mov DWORD PTR[48+rsp],r14d
- mov ebx,r13d
- xor edx,DWORD PTR[60+rsp]
- and eax,r12d
- mov ecx,edi
- xor edx,DWORD PTR[20+rsp]
- lea esi,DWORD PTR[((-1894007588))+rsi*1+r14]
- xor ebx,r12d
- rol ecx,5
- add esi,eax
- rol edx,1
- and ebx,r11d
- add esi,ecx
- rol r11d,30
- add esi,ebx
- xor ebp,DWORD PTR[56+rsp]
- mov eax,r12d
- mov DWORD PTR[52+rsp],edx
- mov ebx,r12d
- xor ebp,DWORD PTR[rsp]
- and eax,r11d
- mov ecx,esi
- xor ebp,DWORD PTR[24+rsp]
- lea r13d,DWORD PTR[((-1894007588))+r13*1+rdx]
- xor ebx,r11d
- rol ecx,5
- add r13d,eax
- rol ebp,1
- and ebx,edi
- add r13d,ecx
- rol edi,30
- add r13d,ebx
- xor r14d,DWORD PTR[60+rsp]
- mov eax,r11d
- mov DWORD PTR[56+rsp],ebp
- mov ebx,r11d
- xor r14d,DWORD PTR[4+rsp]
- and eax,edi
- mov ecx,r13d
- xor r14d,DWORD PTR[28+rsp]
- lea r12d,DWORD PTR[((-1894007588))+r12*1+rbp]
- xor ebx,edi
- rol ecx,5
- add r12d,eax
- rol r14d,1
- and ebx,esi
- add r12d,ecx
- rol esi,30
- add r12d,ebx
- xor edx,DWORD PTR[rsp]
- mov eax,edi
- mov DWORD PTR[60+rsp],r14d
- mov ebx,edi
- xor edx,DWORD PTR[8+rsp]
- and eax,esi
- mov ecx,r12d
- xor edx,DWORD PTR[32+rsp]
- lea r11d,DWORD PTR[((-1894007588))+r11*1+r14]
- xor ebx,esi
- rol ecx,5
- add r11d,eax
- rol edx,1
- and ebx,r13d
- add r11d,ecx
- rol r13d,30
- add r11d,ebx
- xor ebp,DWORD PTR[4+rsp]
- mov eax,esi
- mov DWORD PTR[rsp],edx
- mov ebx,esi
- xor ebp,DWORD PTR[12+rsp]
- and eax,r13d
- mov ecx,r11d
- xor ebp,DWORD PTR[36+rsp]
- lea edi,DWORD PTR[((-1894007588))+rdi*1+rdx]
- xor ebx,r13d
- rol ecx,5
- add edi,eax
- rol ebp,1
- and ebx,r12d
- add edi,ecx
- rol r12d,30
- add edi,ebx
- xor r14d,DWORD PTR[8+rsp]
- mov eax,r13d
- mov DWORD PTR[4+rsp],ebp
- mov ebx,r13d
- xor r14d,DWORD PTR[16+rsp]
- and eax,r12d
- mov ecx,edi
- xor r14d,DWORD PTR[40+rsp]
- lea esi,DWORD PTR[((-1894007588))+rsi*1+rbp]
- xor ebx,r12d
- rol ecx,5
- add esi,eax
- rol r14d,1
- and ebx,r11d
- add esi,ecx
- rol r11d,30
- add esi,ebx
- xor edx,DWORD PTR[12+rsp]
- mov eax,r12d
- mov DWORD PTR[8+rsp],r14d
- mov ebx,r12d
- xor edx,DWORD PTR[20+rsp]
- and eax,r11d
- mov ecx,esi
- xor edx,DWORD PTR[44+rsp]
- lea r13d,DWORD PTR[((-1894007588))+r13*1+r14]
- xor ebx,r11d
- rol ecx,5
- add r13d,eax
- rol edx,1
- and ebx,edi
- add r13d,ecx
- rol edi,30
- add r13d,ebx
- xor ebp,DWORD PTR[16+rsp]
- mov eax,r11d
- mov DWORD PTR[12+rsp],edx
- mov ebx,r11d
- xor ebp,DWORD PTR[24+rsp]
- and eax,edi
- mov ecx,r13d
- xor ebp,DWORD PTR[48+rsp]
- lea r12d,DWORD PTR[((-1894007588))+r12*1+rdx]
- xor ebx,edi
- rol ecx,5
- add r12d,eax
- rol ebp,1
- and ebx,esi
- add r12d,ecx
- rol esi,30
- add r12d,ebx
- xor r14d,DWORD PTR[20+rsp]
- mov eax,edi
- mov DWORD PTR[16+rsp],ebp
- mov ebx,edi
- xor r14d,DWORD PTR[28+rsp]
- and eax,esi
- mov ecx,r12d
- xor r14d,DWORD PTR[52+rsp]
- lea r11d,DWORD PTR[((-1894007588))+r11*1+rbp]
- xor ebx,esi
- rol ecx,5
- add r11d,eax
- rol r14d,1
- and ebx,r13d
- add r11d,ecx
- rol r13d,30
- add r11d,ebx
- xor edx,DWORD PTR[24+rsp]
- mov eax,esi
- mov DWORD PTR[20+rsp],r14d
- mov ebx,esi
- xor edx,DWORD PTR[32+rsp]
- and eax,r13d
- mov ecx,r11d
- xor edx,DWORD PTR[56+rsp]
- lea edi,DWORD PTR[((-1894007588))+rdi*1+r14]
- xor ebx,r13d
- rol ecx,5
- add edi,eax
- rol edx,1
- and ebx,r12d
- add edi,ecx
- rol r12d,30
- add edi,ebx
- xor ebp,DWORD PTR[28+rsp]
- mov eax,r13d
- mov DWORD PTR[24+rsp],edx
- mov ebx,r13d
- xor ebp,DWORD PTR[36+rsp]
- and eax,r12d
- mov ecx,edi
- xor ebp,DWORD PTR[60+rsp]
- lea esi,DWORD PTR[((-1894007588))+rsi*1+rdx]
- xor ebx,r12d
- rol ecx,5
- add esi,eax
- rol ebp,1
- and ebx,r11d
- add esi,ecx
- rol r11d,30
- add esi,ebx
- xor r14d,DWORD PTR[32+rsp]
- mov eax,r12d
- mov DWORD PTR[28+rsp],ebp
- mov ebx,r12d
- xor r14d,DWORD PTR[40+rsp]
- and eax,r11d
- mov ecx,esi
- xor r14d,DWORD PTR[rsp]
- lea r13d,DWORD PTR[((-1894007588))+r13*1+rbp]
- xor ebx,r11d
- rol ecx,5
- add r13d,eax
- rol r14d,1
- and ebx,edi
- add r13d,ecx
- rol edi,30
- add r13d,ebx
- xor edx,DWORD PTR[36+rsp]
- mov eax,r11d
- mov DWORD PTR[32+rsp],r14d
- mov ebx,r11d
- xor edx,DWORD PTR[44+rsp]
- and eax,edi
- mov ecx,r13d
- xor edx,DWORD PTR[4+rsp]
- lea r12d,DWORD PTR[((-1894007588))+r12*1+r14]
- xor ebx,edi
- rol ecx,5
- add r12d,eax
- rol edx,1
- and ebx,esi
- add r12d,ecx
- rol esi,30
- add r12d,ebx
- xor ebp,DWORD PTR[40+rsp]
- mov eax,edi
- mov DWORD PTR[36+rsp],edx
- mov ebx,edi
- xor ebp,DWORD PTR[48+rsp]
- and eax,esi
- mov ecx,r12d
- xor ebp,DWORD PTR[8+rsp]
- lea r11d,DWORD PTR[((-1894007588))+r11*1+rdx]
- xor ebx,esi
- rol ecx,5
- add r11d,eax
- rol ebp,1
- and ebx,r13d
- add r11d,ecx
- rol r13d,30
- add r11d,ebx
- xor r14d,DWORD PTR[44+rsp]
- mov eax,esi
- mov DWORD PTR[40+rsp],ebp
- mov ebx,esi
- xor r14d,DWORD PTR[52+rsp]
- and eax,r13d
- mov ecx,r11d
- xor r14d,DWORD PTR[12+rsp]
- lea edi,DWORD PTR[((-1894007588))+rdi*1+rbp]
- xor ebx,r13d
- rol ecx,5
- add edi,eax
- rol r14d,1
- and ebx,r12d
- add edi,ecx
- rol r12d,30
- add edi,ebx
- xor edx,DWORD PTR[48+rsp]
- mov eax,r13d
- mov DWORD PTR[44+rsp],r14d
- mov ebx,r13d
- xor edx,DWORD PTR[56+rsp]
- and eax,r12d
- mov ecx,edi
- xor edx,DWORD PTR[16+rsp]
- lea esi,DWORD PTR[((-1894007588))+rsi*1+r14]
- xor ebx,r12d
- rol ecx,5
- add esi,eax
- rol edx,1
- and ebx,r11d
- add esi,ecx
- rol r11d,30
- add esi,ebx
- xor ebp,DWORD PTR[52+rsp]
- mov eax,edi
- mov DWORD PTR[48+rsp],edx
- mov ecx,esi
- xor ebp,DWORD PTR[60+rsp]
- xor eax,r12d
- rol ecx,5
- xor ebp,DWORD PTR[20+rsp]
- lea r13d,DWORD PTR[((-899497514))+r13*1+rdx]
- xor eax,r11d
- add r13d,ecx
- rol edi,30
- add r13d,eax
- rol ebp,1
- xor r14d,DWORD PTR[56+rsp]
- mov eax,esi
- mov DWORD PTR[52+rsp],ebp
- mov ecx,r13d
- xor r14d,DWORD PTR[rsp]
- xor eax,r11d
- rol ecx,5
- xor r14d,DWORD PTR[24+rsp]
- lea r12d,DWORD PTR[((-899497514))+r12*1+rbp]
- xor eax,edi
- add r12d,ecx
- rol esi,30
- add r12d,eax
- rol r14d,1
- xor edx,DWORD PTR[60+rsp]
- mov eax,r13d
- mov DWORD PTR[56+rsp],r14d
- mov ecx,r12d
- xor edx,DWORD PTR[4+rsp]
- xor eax,edi
- rol ecx,5
- xor edx,DWORD PTR[28+rsp]
- lea r11d,DWORD PTR[((-899497514))+r11*1+r14]
- xor eax,esi
- add r11d,ecx
- rol r13d,30
- add r11d,eax
- rol edx,1
- xor ebp,DWORD PTR[rsp]
- mov eax,r12d
- mov DWORD PTR[60+rsp],edx
- mov ecx,r11d
- xor ebp,DWORD PTR[8+rsp]
- xor eax,esi
- rol ecx,5
- xor ebp,DWORD PTR[32+rsp]
- lea edi,DWORD PTR[((-899497514))+rdi*1+rdx]
- xor eax,r13d
- add edi,ecx
- rol r12d,30
- add edi,eax
- rol ebp,1
- xor r14d,DWORD PTR[4+rsp]
- mov eax,r11d
- mov DWORD PTR[rsp],ebp
- mov ecx,edi
- xor r14d,DWORD PTR[12+rsp]
- xor eax,r13d
- rol ecx,5
- xor r14d,DWORD PTR[36+rsp]
- lea esi,DWORD PTR[((-899497514))+rsi*1+rbp]
- xor eax,r12d
- add esi,ecx
- rol r11d,30
- add esi,eax
- rol r14d,1
- xor edx,DWORD PTR[8+rsp]
- mov eax,edi
- mov DWORD PTR[4+rsp],r14d
- mov ecx,esi
- xor edx,DWORD PTR[16+rsp]
- xor eax,r12d
- rol ecx,5
- xor edx,DWORD PTR[40+rsp]
- lea r13d,DWORD PTR[((-899497514))+r13*1+r14]
- xor eax,r11d
- add r13d,ecx
- rol edi,30
- add r13d,eax
- rol edx,1
- xor ebp,DWORD PTR[12+rsp]
- mov eax,esi
- mov DWORD PTR[8+rsp],edx
- mov ecx,r13d
- xor ebp,DWORD PTR[20+rsp]
- xor eax,r11d
- rol ecx,5
- xor ebp,DWORD PTR[44+rsp]
- lea r12d,DWORD PTR[((-899497514))+r12*1+rdx]
- xor eax,edi
- add r12d,ecx
- rol esi,30
- add r12d,eax
- rol ebp,1
- xor r14d,DWORD PTR[16+rsp]
- mov eax,r13d
- mov DWORD PTR[12+rsp],ebp
- mov ecx,r12d
- xor r14d,DWORD PTR[24+rsp]
- xor eax,edi
- rol ecx,5
- xor r14d,DWORD PTR[48+rsp]
- lea r11d,DWORD PTR[((-899497514))+r11*1+rbp]
- xor eax,esi
- add r11d,ecx
- rol r13d,30
- add r11d,eax
- rol r14d,1
- xor edx,DWORD PTR[20+rsp]
- mov eax,r12d
- mov DWORD PTR[16+rsp],r14d
- mov ecx,r11d
- xor edx,DWORD PTR[28+rsp]
- xor eax,esi
- rol ecx,5
- xor edx,DWORD PTR[52+rsp]
- lea edi,DWORD PTR[((-899497514))+rdi*1+r14]
- xor eax,r13d
- add edi,ecx
- rol r12d,30
- add edi,eax
- rol edx,1
- xor ebp,DWORD PTR[24+rsp]
- mov eax,r11d
- mov DWORD PTR[20+rsp],edx
- mov ecx,edi
- xor ebp,DWORD PTR[32+rsp]
- xor eax,r13d
- rol ecx,5
- xor ebp,DWORD PTR[56+rsp]
- lea esi,DWORD PTR[((-899497514))+rsi*1+rdx]
- xor eax,r12d
- add esi,ecx
- rol r11d,30
- add esi,eax
- rol ebp,1
- xor r14d,DWORD PTR[28+rsp]
- mov eax,edi
- mov DWORD PTR[24+rsp],ebp
- mov ecx,esi
- xor r14d,DWORD PTR[36+rsp]
- xor eax,r12d
- rol ecx,5
- xor r14d,DWORD PTR[60+rsp]
- lea r13d,DWORD PTR[((-899497514))+r13*1+rbp]
- xor eax,r11d
- add r13d,ecx
- rol edi,30
- add r13d,eax
- rol r14d,1
- xor edx,DWORD PTR[32+rsp]
- mov eax,esi
- mov DWORD PTR[28+rsp],r14d
- mov ecx,r13d
- xor edx,DWORD PTR[40+rsp]
- xor eax,r11d
- rol ecx,5
- xor edx,DWORD PTR[rsp]
- lea r12d,DWORD PTR[((-899497514))+r12*1+r14]
- xor eax,edi
- add r12d,ecx
- rol esi,30
- add r12d,eax
- rol edx,1
- xor ebp,DWORD PTR[36+rsp]
- mov eax,r13d
-
- mov ecx,r12d
- xor ebp,DWORD PTR[44+rsp]
- xor eax,edi
- rol ecx,5
- xor ebp,DWORD PTR[4+rsp]
- lea r11d,DWORD PTR[((-899497514))+r11*1+rdx]
- xor eax,esi
- add r11d,ecx
- rol r13d,30
- add r11d,eax
- rol ebp,1
- xor r14d,DWORD PTR[40+rsp]
- mov eax,r12d
-
- mov ecx,r11d
- xor r14d,DWORD PTR[48+rsp]
- xor eax,esi
- rol ecx,5
- xor r14d,DWORD PTR[8+rsp]
- lea edi,DWORD PTR[((-899497514))+rdi*1+rbp]
- xor eax,r13d
- add edi,ecx
- rol r12d,30
- add edi,eax
- rol r14d,1
- xor edx,DWORD PTR[44+rsp]
- mov eax,r11d
-
- mov ecx,edi
- xor edx,DWORD PTR[52+rsp]
- xor eax,r13d
- rol ecx,5
- xor edx,DWORD PTR[12+rsp]
- lea esi,DWORD PTR[((-899497514))+rsi*1+r14]
- xor eax,r12d
- add esi,ecx
- rol r11d,30
- add esi,eax
- rol edx,1
- xor ebp,DWORD PTR[48+rsp]
- mov eax,edi
-
- mov ecx,esi
- xor ebp,DWORD PTR[56+rsp]
- xor eax,r12d
- rol ecx,5
- xor ebp,DWORD PTR[16+rsp]
- lea r13d,DWORD PTR[((-899497514))+r13*1+rdx]
- xor eax,r11d
- add r13d,ecx
- rol edi,30
- add r13d,eax
- rol ebp,1
- xor r14d,DWORD PTR[52+rsp]
- mov eax,esi
-
- mov ecx,r13d
- xor r14d,DWORD PTR[60+rsp]
- xor eax,r11d
- rol ecx,5
- xor r14d,DWORD PTR[20+rsp]
- lea r12d,DWORD PTR[((-899497514))+r12*1+rbp]
- xor eax,edi
- add r12d,ecx
- rol esi,30
- add r12d,eax
- rol r14d,1
- xor edx,DWORD PTR[56+rsp]
- mov eax,r13d
-
- mov ecx,r12d
- xor edx,DWORD PTR[rsp]
- xor eax,edi
- rol ecx,5
- xor edx,DWORD PTR[24+rsp]
- lea r11d,DWORD PTR[((-899497514))+r11*1+r14]
- xor eax,esi
- add r11d,ecx
- rol r13d,30
- add r11d,eax
- rol edx,1
- xor ebp,DWORD PTR[60+rsp]
- mov eax,r12d
-
- mov ecx,r11d
- xor ebp,DWORD PTR[4+rsp]
- xor eax,esi
- rol ecx,5
- xor ebp,DWORD PTR[28+rsp]
- lea edi,DWORD PTR[((-899497514))+rdi*1+rdx]
- xor eax,r13d
- add edi,ecx
- rol r12d,30
- add edi,eax
- rol ebp,1
- mov eax,r11d
- mov ecx,edi
- xor eax,r13d
- lea esi,DWORD PTR[((-899497514))+rsi*1+rbp]
- rol ecx,5
- xor eax,r12d
- add esi,ecx
- rol r11d,30
- add esi,eax
- add esi,DWORD PTR[r8]
- add edi,DWORD PTR[4+r8]
- add r11d,DWORD PTR[8+r8]
- add r12d,DWORD PTR[12+r8]
- add r13d,DWORD PTR[16+r8]
- mov DWORD PTR[r8],esi
- mov DWORD PTR[4+r8],edi
- mov DWORD PTR[8+r8],r11d
- mov DWORD PTR[12+r8],r12d
- mov DWORD PTR[16+r8],r13d
-
- sub r10,1
- lea r9,QWORD PTR[64+r9]
- jnz $L$loop
-
- mov rsi,QWORD PTR[64+rsp]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha1_block_data_order::
-sha1_block_data_order ENDP
-
-ALIGN 32
-sha1_block_data_order_shaext PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha1_block_data_order_shaext::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-_shaext_shortcut::
-
- lea rsp,QWORD PTR[((-72))+rsp]
- movaps XMMWORD PTR[(-8-64)+rax],xmm6
- movaps XMMWORD PTR[(-8-48)+rax],xmm7
- movaps XMMWORD PTR[(-8-32)+rax],xmm8
- movaps XMMWORD PTR[(-8-16)+rax],xmm9
-$L$prologue_shaext::
- movdqu xmm0,XMMWORD PTR[rdi]
- movd xmm1,DWORD PTR[16+rdi]
- movdqa xmm3,XMMWORD PTR[((K_XX_XX+160))]
-
- movdqu xmm4,XMMWORD PTR[rsi]
- pshufd xmm0,xmm0,27
- movdqu xmm5,XMMWORD PTR[16+rsi]
- pshufd xmm1,xmm1,27
- movdqu xmm6,XMMWORD PTR[32+rsi]
-DB 102,15,56,0,227
- movdqu xmm7,XMMWORD PTR[48+rsi]
-DB 102,15,56,0,235
-DB 102,15,56,0,243
- movdqa xmm9,xmm1
-DB 102,15,56,0,251
- jmp $L$oop_shaext
-
-ALIGN 16
-$L$oop_shaext::
- dec rdx
- lea r8,QWORD PTR[64+rsi]
- paddd xmm1,xmm4
- cmovne rsi,r8
- movdqa xmm8,xmm0
-DB 15,56,201,229
- movdqa xmm2,xmm0
-DB 15,58,204,193,0
-DB 15,56,200,213
- pxor xmm4,xmm6
-DB 15,56,201,238
-DB 15,56,202,231
-
- movdqa xmm1,xmm0
-DB 15,58,204,194,0
-DB 15,56,200,206
- pxor xmm5,xmm7
-DB 15,56,202,236
-DB 15,56,201,247
- movdqa xmm2,xmm0
-DB 15,58,204,193,0
-DB 15,56,200,215
- pxor xmm6,xmm4
-DB 15,56,201,252
-DB 15,56,202,245
-
- movdqa xmm1,xmm0
-DB 15,58,204,194,0
-DB 15,56,200,204
- pxor xmm7,xmm5
-DB 15,56,202,254
-DB 15,56,201,229
- movdqa xmm2,xmm0
-DB 15,58,204,193,0
-DB 15,56,200,213
- pxor xmm4,xmm6
-DB 15,56,201,238
-DB 15,56,202,231
-
- movdqa xmm1,xmm0
-DB 15,58,204,194,1
-DB 15,56,200,206
- pxor xmm5,xmm7
-DB 15,56,202,236
-DB 15,56,201,247
- movdqa xmm2,xmm0
-DB 15,58,204,193,1
-DB 15,56,200,215
- pxor xmm6,xmm4
-DB 15,56,201,252
-DB 15,56,202,245
-
- movdqa xmm1,xmm0
-DB 15,58,204,194,1
-DB 15,56,200,204
- pxor xmm7,xmm5
-DB 15,56,202,254
-DB 15,56,201,229
- movdqa xmm2,xmm0
-DB 15,58,204,193,1
-DB 15,56,200,213
- pxor xmm4,xmm6
-DB 15,56,201,238
-DB 15,56,202,231
-
- movdqa xmm1,xmm0
-DB 15,58,204,194,1
-DB 15,56,200,206
- pxor xmm5,xmm7
-DB 15,56,202,236
-DB 15,56,201,247
- movdqa xmm2,xmm0
-DB 15,58,204,193,2
-DB 15,56,200,215
- pxor xmm6,xmm4
-DB 15,56,201,252
-DB 15,56,202,245
-
- movdqa xmm1,xmm0
-DB 15,58,204,194,2
-DB 15,56,200,204
- pxor xmm7,xmm5
-DB 15,56,202,254
-DB 15,56,201,229
- movdqa xmm2,xmm0
-DB 15,58,204,193,2
-DB 15,56,200,213
- pxor xmm4,xmm6
-DB 15,56,201,238
-DB 15,56,202,231
-
- movdqa xmm1,xmm0
-DB 15,58,204,194,2
-DB 15,56,200,206
- pxor xmm5,xmm7
-DB 15,56,202,236
-DB 15,56,201,247
- movdqa xmm2,xmm0
-DB 15,58,204,193,2
-DB 15,56,200,215
- pxor xmm6,xmm4
-DB 15,56,201,252
-DB 15,56,202,245
-
- movdqa xmm1,xmm0
-DB 15,58,204,194,3
-DB 15,56,200,204
- pxor xmm7,xmm5
-DB 15,56,202,254
- movdqu xmm4,XMMWORD PTR[rsi]
- movdqa xmm2,xmm0
-DB 15,58,204,193,3
-DB 15,56,200,213
- movdqu xmm5,XMMWORD PTR[16+rsi]
-DB 102,15,56,0,227
-
- movdqa xmm1,xmm0
-DB 15,58,204,194,3
-DB 15,56,200,206
- movdqu xmm6,XMMWORD PTR[32+rsi]
-DB 102,15,56,0,235
-
- movdqa xmm2,xmm0
-DB 15,58,204,193,3
-DB 15,56,200,215
- movdqu xmm7,XMMWORD PTR[48+rsi]
-DB 102,15,56,0,243
-
- movdqa xmm1,xmm0
-DB 15,58,204,194,3
-DB 65,15,56,200,201
-DB 102,15,56,0,251
-
- paddd xmm0,xmm8
- movdqa xmm9,xmm1
-
- jnz $L$oop_shaext
-
- pshufd xmm0,xmm0,27
- pshufd xmm1,xmm1,27
- movdqu XMMWORD PTR[rdi],xmm0
- movd DWORD PTR[16+rdi],xmm1
- movaps xmm6,XMMWORD PTR[((-8-64))+rax]
- movaps xmm7,XMMWORD PTR[((-8-48))+rax]
- movaps xmm8,XMMWORD PTR[((-8-32))+rax]
- movaps xmm9,XMMWORD PTR[((-8-16))+rax]
- mov rsp,rax
-$L$epilogue_shaext::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha1_block_data_order_shaext::
-sha1_block_data_order_shaext ENDP
-
-ALIGN 16
-sha1_block_data_order_ssse3 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha1_block_data_order_ssse3::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-_ssse3_shortcut::
-
- mov r11,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- lea rsp,QWORD PTR[((-160))+rsp]
- movaps XMMWORD PTR[(-40-96)+r11],xmm6
- movaps XMMWORD PTR[(-40-80)+r11],xmm7
- movaps XMMWORD PTR[(-40-64)+r11],xmm8
- movaps XMMWORD PTR[(-40-48)+r11],xmm9
- movaps XMMWORD PTR[(-40-32)+r11],xmm10
- movaps XMMWORD PTR[(-40-16)+r11],xmm11
-$L$prologue_ssse3::
- and rsp,-64
- mov r8,rdi
- mov r9,rsi
- mov r10,rdx
-
- shl r10,6
- add r10,r9
- lea r14,QWORD PTR[((K_XX_XX+64))]
-
- mov eax,DWORD PTR[r8]
- mov ebx,DWORD PTR[4+r8]
- mov ecx,DWORD PTR[8+r8]
- mov edx,DWORD PTR[12+r8]
- mov esi,ebx
- mov ebp,DWORD PTR[16+r8]
- mov edi,ecx
- xor edi,edx
- and esi,edi
-
- movdqa xmm6,XMMWORD PTR[64+r14]
- movdqa xmm9,XMMWORD PTR[((-64))+r14]
- movdqu xmm0,XMMWORD PTR[r9]
- movdqu xmm1,XMMWORD PTR[16+r9]
- movdqu xmm2,XMMWORD PTR[32+r9]
- movdqu xmm3,XMMWORD PTR[48+r9]
-DB 102,15,56,0,198
-DB 102,15,56,0,206
-DB 102,15,56,0,214
- add r9,64
- paddd xmm0,xmm9
-DB 102,15,56,0,222
- paddd xmm1,xmm9
- paddd xmm2,xmm9
- movdqa XMMWORD PTR[rsp],xmm0
- psubd xmm0,xmm9
- movdqa XMMWORD PTR[16+rsp],xmm1
- psubd xmm1,xmm9
- movdqa XMMWORD PTR[32+rsp],xmm2
- psubd xmm2,xmm9
- jmp $L$oop_ssse3
-ALIGN 16
-$L$oop_ssse3::
- ror ebx,2
- pshufd xmm4,xmm0,238
- xor esi,edx
- movdqa xmm8,xmm3
- paddd xmm9,xmm3
- mov edi,eax
- add ebp,DWORD PTR[rsp]
- punpcklqdq xmm4,xmm1
- xor ebx,ecx
- rol eax,5
- add ebp,esi
- psrldq xmm8,4
- and edi,ebx
- xor ebx,ecx
- pxor xmm4,xmm0
- add ebp,eax
- ror eax,7
- pxor xmm8,xmm2
- xor edi,ecx
- mov esi,ebp
- add edx,DWORD PTR[4+rsp]
- pxor xmm4,xmm8
- xor eax,ebx
- rol ebp,5
- movdqa XMMWORD PTR[48+rsp],xmm9
- add edx,edi
- and esi,eax
- movdqa xmm10,xmm4
- xor eax,ebx
- add edx,ebp
- ror ebp,7
- movdqa xmm8,xmm4
- xor esi,ebx
- pslldq xmm10,12
- paddd xmm4,xmm4
- mov edi,edx
- add ecx,DWORD PTR[8+rsp]
- psrld xmm8,31
- xor ebp,eax
- rol edx,5
- add ecx,esi
- movdqa xmm9,xmm10
- and edi,ebp
- xor ebp,eax
- psrld xmm10,30
- add ecx,edx
- ror edx,7
- por xmm4,xmm8
- xor edi,eax
- mov esi,ecx
- add ebx,DWORD PTR[12+rsp]
- pslld xmm9,2
- pxor xmm4,xmm10
- xor edx,ebp
- movdqa xmm10,XMMWORD PTR[((-64))+r14]
- rol ecx,5
- add ebx,edi
- and esi,edx
- pxor xmm4,xmm9
- xor edx,ebp
- add ebx,ecx
- ror ecx,7
- pshufd xmm5,xmm1,238
- xor esi,ebp
- movdqa xmm9,xmm4
- paddd xmm10,xmm4
- mov edi,ebx
- add eax,DWORD PTR[16+rsp]
- punpcklqdq xmm5,xmm2
- xor ecx,edx
- rol ebx,5
- add eax,esi
- psrldq xmm9,4
- and edi,ecx
- xor ecx,edx
- pxor xmm5,xmm1
- add eax,ebx
- ror ebx,7
- pxor xmm9,xmm3
- xor edi,edx
- mov esi,eax
- add ebp,DWORD PTR[20+rsp]
- pxor xmm5,xmm9
- xor ebx,ecx
- rol eax,5
- movdqa XMMWORD PTR[rsp],xmm10
- add ebp,edi
- and esi,ebx
- movdqa xmm8,xmm5
- xor ebx,ecx
- add ebp,eax
- ror eax,7
- movdqa xmm9,xmm5
- xor esi,ecx
- pslldq xmm8,12
- paddd xmm5,xmm5
- mov edi,ebp
- add edx,DWORD PTR[24+rsp]
- psrld xmm9,31
- xor eax,ebx
- rol ebp,5
- add edx,esi
- movdqa xmm10,xmm8
- and edi,eax
- xor eax,ebx
- psrld xmm8,30
- add edx,ebp
- ror ebp,7
- por xmm5,xmm9
- xor edi,ebx
- mov esi,edx
- add ecx,DWORD PTR[28+rsp]
- pslld xmm10,2
- pxor xmm5,xmm8
- xor ebp,eax
- movdqa xmm8,XMMWORD PTR[((-32))+r14]
- rol edx,5
- add ecx,edi
- and esi,ebp
- pxor xmm5,xmm10
- xor ebp,eax
- add ecx,edx
- ror edx,7
- pshufd xmm6,xmm2,238
- xor esi,eax
- movdqa xmm10,xmm5
- paddd xmm8,xmm5
- mov edi,ecx
- add ebx,DWORD PTR[32+rsp]
- punpcklqdq xmm6,xmm3
- xor edx,ebp
- rol ecx,5
- add ebx,esi
- psrldq xmm10,4
- and edi,edx
- xor edx,ebp
- pxor xmm6,xmm2
- add ebx,ecx
- ror ecx,7
- pxor xmm10,xmm4
- xor edi,ebp
- mov esi,ebx
- add eax,DWORD PTR[36+rsp]
- pxor xmm6,xmm10
- xor ecx,edx
- rol ebx,5
- movdqa XMMWORD PTR[16+rsp],xmm8
- add eax,edi
- and esi,ecx
- movdqa xmm9,xmm6
- xor ecx,edx
- add eax,ebx
- ror ebx,7
- movdqa xmm10,xmm6
- xor esi,edx
- pslldq xmm9,12
- paddd xmm6,xmm6
- mov edi,eax
- add ebp,DWORD PTR[40+rsp]
- psrld xmm10,31
- xor ebx,ecx
- rol eax,5
- add ebp,esi
- movdqa xmm8,xmm9
- and edi,ebx
- xor ebx,ecx
- psrld xmm9,30
- add ebp,eax
- ror eax,7
- por xmm6,xmm10
- xor edi,ecx
- mov esi,ebp
- add edx,DWORD PTR[44+rsp]
- pslld xmm8,2
- pxor xmm6,xmm9
- xor eax,ebx
- movdqa xmm9,XMMWORD PTR[((-32))+r14]
- rol ebp,5
- add edx,edi
- and esi,eax
- pxor xmm6,xmm8
- xor eax,ebx
- add edx,ebp
- ror ebp,7
- pshufd xmm7,xmm3,238
- xor esi,ebx
- movdqa xmm8,xmm6
- paddd xmm9,xmm6
- mov edi,edx
- add ecx,DWORD PTR[48+rsp]
- punpcklqdq xmm7,xmm4
- xor ebp,eax
- rol edx,5
- add ecx,esi
- psrldq xmm8,4
- and edi,ebp
- xor ebp,eax
- pxor xmm7,xmm3
- add ecx,edx
- ror edx,7
- pxor xmm8,xmm5
- xor edi,eax
- mov esi,ecx
- add ebx,DWORD PTR[52+rsp]
- pxor xmm7,xmm8
- xor edx,ebp
- rol ecx,5
- movdqa XMMWORD PTR[32+rsp],xmm9
- add ebx,edi
- and esi,edx
- movdqa xmm10,xmm7
- xor edx,ebp
- add ebx,ecx
- ror ecx,7
- movdqa xmm8,xmm7
- xor esi,ebp
- pslldq xmm10,12
- paddd xmm7,xmm7
- mov edi,ebx
- add eax,DWORD PTR[56+rsp]
- psrld xmm8,31
- xor ecx,edx
- rol ebx,5
- add eax,esi
- movdqa xmm9,xmm10
- and edi,ecx
- xor ecx,edx
- psrld xmm10,30
- add eax,ebx
- ror ebx,7
- por xmm7,xmm8
- xor edi,edx
- mov esi,eax
- add ebp,DWORD PTR[60+rsp]
- pslld xmm9,2
- pxor xmm7,xmm10
- xor ebx,ecx
- movdqa xmm10,XMMWORD PTR[((-32))+r14]
- rol eax,5
- add ebp,edi
- and esi,ebx
- pxor xmm7,xmm9
- pshufd xmm9,xmm6,238
- xor ebx,ecx
- add ebp,eax
- ror eax,7
- pxor xmm0,xmm4
- xor esi,ecx
- mov edi,ebp
- add edx,DWORD PTR[rsp]
- punpcklqdq xmm9,xmm7
- xor eax,ebx
- rol ebp,5
- pxor xmm0,xmm1
- add edx,esi
- and edi,eax
- movdqa xmm8,xmm10
- xor eax,ebx
- paddd xmm10,xmm7
- add edx,ebp
- pxor xmm0,xmm9
- ror ebp,7
- xor edi,ebx
- mov esi,edx
- add ecx,DWORD PTR[4+rsp]
- movdqa xmm9,xmm0
- xor ebp,eax
- rol edx,5
- movdqa XMMWORD PTR[48+rsp],xmm10
- add ecx,edi
- and esi,ebp
- xor ebp,eax
- pslld xmm0,2
- add ecx,edx
- ror edx,7
- psrld xmm9,30
- xor esi,eax
- mov edi,ecx
- add ebx,DWORD PTR[8+rsp]
- por xmm0,xmm9
- xor edx,ebp
- rol ecx,5
- pshufd xmm10,xmm7,238
- add ebx,esi
- and edi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[12+rsp]
- xor edi,ebp
- mov esi,ebx
- rol ebx,5
- add eax,edi
- xor esi,edx
- ror ecx,7
- add eax,ebx
- pxor xmm1,xmm5
- add ebp,DWORD PTR[16+rsp]
- xor esi,ecx
- punpcklqdq xmm10,xmm0
- mov edi,eax
- rol eax,5
- pxor xmm1,xmm2
- add ebp,esi
- xor edi,ecx
- movdqa xmm9,xmm8
- ror ebx,7
- paddd xmm8,xmm0
- add ebp,eax
- pxor xmm1,xmm10
- add edx,DWORD PTR[20+rsp]
- xor edi,ebx
- mov esi,ebp
- rol ebp,5
- movdqa xmm10,xmm1
- add edx,edi
- xor esi,ebx
- movdqa XMMWORD PTR[rsp],xmm8
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[24+rsp]
- pslld xmm1,2
- xor esi,eax
- mov edi,edx
- psrld xmm10,30
- rol edx,5
- add ecx,esi
- xor edi,eax
- ror ebp,7
- por xmm1,xmm10
- add ecx,edx
- add ebx,DWORD PTR[28+rsp]
- pshufd xmm8,xmm0,238
- xor edi,ebp
- mov esi,ecx
- rol ecx,5
- add ebx,edi
- xor esi,ebp
- ror edx,7
- add ebx,ecx
- pxor xmm2,xmm6
- add eax,DWORD PTR[32+rsp]
- xor esi,edx
- punpcklqdq xmm8,xmm1
- mov edi,ebx
- rol ebx,5
- pxor xmm2,xmm3
- add eax,esi
- xor edi,edx
- movdqa xmm10,XMMWORD PTR[r14]
- ror ecx,7
- paddd xmm9,xmm1
- add eax,ebx
- pxor xmm2,xmm8
- add ebp,DWORD PTR[36+rsp]
- xor edi,ecx
- mov esi,eax
- rol eax,5
- movdqa xmm8,xmm2
- add ebp,edi
- xor esi,ecx
- movdqa XMMWORD PTR[16+rsp],xmm9
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[40+rsp]
- pslld xmm2,2
- xor esi,ebx
- mov edi,ebp
- psrld xmm8,30
- rol ebp,5
- add edx,esi
- xor edi,ebx
- ror eax,7
- por xmm2,xmm8
- add edx,ebp
- add ecx,DWORD PTR[44+rsp]
- pshufd xmm9,xmm1,238
- xor edi,eax
- mov esi,edx
- rol edx,5
- add ecx,edi
- xor esi,eax
- ror ebp,7
- add ecx,edx
- pxor xmm3,xmm7
- add ebx,DWORD PTR[48+rsp]
- xor esi,ebp
- punpcklqdq xmm9,xmm2
- mov edi,ecx
- rol ecx,5
- pxor xmm3,xmm4
- add ebx,esi
- xor edi,ebp
- movdqa xmm8,xmm10
- ror edx,7
- paddd xmm10,xmm2
- add ebx,ecx
- pxor xmm3,xmm9
- add eax,DWORD PTR[52+rsp]
- xor edi,edx
- mov esi,ebx
- rol ebx,5
- movdqa xmm9,xmm3
- add eax,edi
- xor esi,edx
- movdqa XMMWORD PTR[32+rsp],xmm10
- ror ecx,7
- add eax,ebx
- add ebp,DWORD PTR[56+rsp]
- pslld xmm3,2
- xor esi,ecx
- mov edi,eax
- psrld xmm9,30
- rol eax,5
- add ebp,esi
- xor edi,ecx
- ror ebx,7
- por xmm3,xmm9
- add ebp,eax
- add edx,DWORD PTR[60+rsp]
- pshufd xmm10,xmm2,238
- xor edi,ebx
- mov esi,ebp
- rol ebp,5
- add edx,edi
- xor esi,ebx
- ror eax,7
- add edx,ebp
- pxor xmm4,xmm0
- add ecx,DWORD PTR[rsp]
- xor esi,eax
- punpcklqdq xmm10,xmm3
- mov edi,edx
- rol edx,5
- pxor xmm4,xmm5
- add ecx,esi
- xor edi,eax
- movdqa xmm9,xmm8
- ror ebp,7
- paddd xmm8,xmm3
- add ecx,edx
- pxor xmm4,xmm10
- add ebx,DWORD PTR[4+rsp]
- xor edi,ebp
- mov esi,ecx
- rol ecx,5
- movdqa xmm10,xmm4
- add ebx,edi
- xor esi,ebp
- movdqa XMMWORD PTR[48+rsp],xmm8
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[8+rsp]
- pslld xmm4,2
- xor esi,edx
- mov edi,ebx
- psrld xmm10,30
- rol ebx,5
- add eax,esi
- xor edi,edx
- ror ecx,7
- por xmm4,xmm10
- add eax,ebx
- add ebp,DWORD PTR[12+rsp]
- pshufd xmm8,xmm3,238
- xor edi,ecx
- mov esi,eax
- rol eax,5
- add ebp,edi
- xor esi,ecx
- ror ebx,7
- add ebp,eax
- pxor xmm5,xmm1
- add edx,DWORD PTR[16+rsp]
- xor esi,ebx
- punpcklqdq xmm8,xmm4
- mov edi,ebp
- rol ebp,5
- pxor xmm5,xmm6
- add edx,esi
- xor edi,ebx
- movdqa xmm10,xmm9
- ror eax,7
- paddd xmm9,xmm4
- add edx,ebp
- pxor xmm5,xmm8
- add ecx,DWORD PTR[20+rsp]
- xor edi,eax
- mov esi,edx
- rol edx,5
- movdqa xmm8,xmm5
- add ecx,edi
- xor esi,eax
- movdqa XMMWORD PTR[rsp],xmm9
- ror ebp,7
- add ecx,edx
- add ebx,DWORD PTR[24+rsp]
- pslld xmm5,2
- xor esi,ebp
- mov edi,ecx
- psrld xmm8,30
- rol ecx,5
- add ebx,esi
- xor edi,ebp
- ror edx,7
- por xmm5,xmm8
- add ebx,ecx
- add eax,DWORD PTR[28+rsp]
- pshufd xmm9,xmm4,238
- ror ecx,7
- mov esi,ebx
- xor edi,edx
- rol ebx,5
- add eax,edi
- xor esi,ecx
- xor ecx,edx
- add eax,ebx
- pxor xmm6,xmm2
- add ebp,DWORD PTR[32+rsp]
- and esi,ecx
- xor ecx,edx
- ror ebx,7
- punpcklqdq xmm9,xmm5
- mov edi,eax
- xor esi,ecx
- pxor xmm6,xmm7
- rol eax,5
- add ebp,esi
- movdqa xmm8,xmm10
- xor edi,ebx
- paddd xmm10,xmm5
- xor ebx,ecx
- pxor xmm6,xmm9
- add ebp,eax
- add edx,DWORD PTR[36+rsp]
- and edi,ebx
- xor ebx,ecx
- ror eax,7
- movdqa xmm9,xmm6
- mov esi,ebp
- xor edi,ebx
- movdqa XMMWORD PTR[16+rsp],xmm10
- rol ebp,5
- add edx,edi
- xor esi,eax
- pslld xmm6,2
- xor eax,ebx
- add edx,ebp
- psrld xmm9,30
- add ecx,DWORD PTR[40+rsp]
- and esi,eax
- xor eax,ebx
- por xmm6,xmm9
- ror ebp,7
- mov edi,edx
- xor esi,eax
- rol edx,5
- pshufd xmm10,xmm5,238
- add ecx,esi
- xor edi,ebp
- xor ebp,eax
- add ecx,edx
- add ebx,DWORD PTR[44+rsp]
- and edi,ebp
- xor ebp,eax
- ror edx,7
- mov esi,ecx
- xor edi,ebp
- rol ecx,5
- add ebx,edi
- xor esi,edx
- xor edx,ebp
- add ebx,ecx
- pxor xmm7,xmm3
- add eax,DWORD PTR[48+rsp]
- and esi,edx
- xor edx,ebp
- ror ecx,7
- punpcklqdq xmm10,xmm6
- mov edi,ebx
- xor esi,edx
- pxor xmm7,xmm0
- rol ebx,5
- add eax,esi
- movdqa xmm9,XMMWORD PTR[32+r14]
- xor edi,ecx
- paddd xmm8,xmm6
- xor ecx,edx
- pxor xmm7,xmm10
- add eax,ebx
- add ebp,DWORD PTR[52+rsp]
- and edi,ecx
- xor ecx,edx
- ror ebx,7
- movdqa xmm10,xmm7
- mov esi,eax
- xor edi,ecx
- movdqa XMMWORD PTR[32+rsp],xmm8
- rol eax,5
- add ebp,edi
- xor esi,ebx
- pslld xmm7,2
- xor ebx,ecx
- add ebp,eax
- psrld xmm10,30
- add edx,DWORD PTR[56+rsp]
- and esi,ebx
- xor ebx,ecx
- por xmm7,xmm10
- ror eax,7
- mov edi,ebp
- xor esi,ebx
- rol ebp,5
- pshufd xmm8,xmm6,238
- add edx,esi
- xor edi,eax
- xor eax,ebx
- add edx,ebp
- add ecx,DWORD PTR[60+rsp]
- and edi,eax
- xor eax,ebx
- ror ebp,7
- mov esi,edx
- xor edi,eax
- rol edx,5
- add ecx,edi
- xor esi,ebp
- xor ebp,eax
- add ecx,edx
- pxor xmm0,xmm4
- add ebx,DWORD PTR[rsp]
- and esi,ebp
- xor ebp,eax
- ror edx,7
- punpcklqdq xmm8,xmm7
- mov edi,ecx
- xor esi,ebp
- pxor xmm0,xmm1
- rol ecx,5
- add ebx,esi
- movdqa xmm10,xmm9
- xor edi,edx
- paddd xmm9,xmm7
- xor edx,ebp
- pxor xmm0,xmm8
- add ebx,ecx
- add eax,DWORD PTR[4+rsp]
- and edi,edx
- xor edx,ebp
- ror ecx,7
- movdqa xmm8,xmm0
- mov esi,ebx
- xor edi,edx
- movdqa XMMWORD PTR[48+rsp],xmm9
- rol ebx,5
- add eax,edi
- xor esi,ecx
- pslld xmm0,2
- xor ecx,edx
- add eax,ebx
- psrld xmm8,30
- add ebp,DWORD PTR[8+rsp]
- and esi,ecx
- xor ecx,edx
- por xmm0,xmm8
- ror ebx,7
- mov edi,eax
- xor esi,ecx
- rol eax,5
- pshufd xmm9,xmm7,238
- add ebp,esi
- xor edi,ebx
- xor ebx,ecx
- add ebp,eax
- add edx,DWORD PTR[12+rsp]
- and edi,ebx
- xor ebx,ecx
- ror eax,7
- mov esi,ebp
- xor edi,ebx
- rol ebp,5
- add edx,edi
- xor esi,eax
- xor eax,ebx
- add edx,ebp
- pxor xmm1,xmm5
- add ecx,DWORD PTR[16+rsp]
- and esi,eax
- xor eax,ebx
- ror ebp,7
- punpcklqdq xmm9,xmm0
- mov edi,edx
- xor esi,eax
- pxor xmm1,xmm2
- rol edx,5
- add ecx,esi
- movdqa xmm8,xmm10
- xor edi,ebp
- paddd xmm10,xmm0
- xor ebp,eax
- pxor xmm1,xmm9
- add ecx,edx
- add ebx,DWORD PTR[20+rsp]
- and edi,ebp
- xor ebp,eax
- ror edx,7
- movdqa xmm9,xmm1
- mov esi,ecx
- xor edi,ebp
- movdqa XMMWORD PTR[rsp],xmm10
- rol ecx,5
- add ebx,edi
- xor esi,edx
- pslld xmm1,2
- xor edx,ebp
- add ebx,ecx
- psrld xmm9,30
- add eax,DWORD PTR[24+rsp]
- and esi,edx
- xor edx,ebp
- por xmm1,xmm9
- ror ecx,7
- mov edi,ebx
- xor esi,edx
- rol ebx,5
- pshufd xmm10,xmm0,238
- add eax,esi
- xor edi,ecx
- xor ecx,edx
- add eax,ebx
- add ebp,DWORD PTR[28+rsp]
- and edi,ecx
- xor ecx,edx
- ror ebx,7
- mov esi,eax
- xor edi,ecx
- rol eax,5
- add ebp,edi
- xor esi,ebx
- xor ebx,ecx
- add ebp,eax
- pxor xmm2,xmm6
- add edx,DWORD PTR[32+rsp]
- and esi,ebx
- xor ebx,ecx
- ror eax,7
- punpcklqdq xmm10,xmm1
- mov edi,ebp
- xor esi,ebx
- pxor xmm2,xmm3
- rol ebp,5
- add edx,esi
- movdqa xmm9,xmm8
- xor edi,eax
- paddd xmm8,xmm1
- xor eax,ebx
- pxor xmm2,xmm10
- add edx,ebp
- add ecx,DWORD PTR[36+rsp]
- and edi,eax
- xor eax,ebx
- ror ebp,7
- movdqa xmm10,xmm2
- mov esi,edx
- xor edi,eax
- movdqa XMMWORD PTR[16+rsp],xmm8
- rol edx,5
- add ecx,edi
- xor esi,ebp
- pslld xmm2,2
- xor ebp,eax
- add ecx,edx
- psrld xmm10,30
- add ebx,DWORD PTR[40+rsp]
- and esi,ebp
- xor ebp,eax
- por xmm2,xmm10
- ror edx,7
- mov edi,ecx
- xor esi,ebp
- rol ecx,5
- pshufd xmm8,xmm1,238
- add ebx,esi
- xor edi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[44+rsp]
- and edi,edx
- xor edx,ebp
- ror ecx,7
- mov esi,ebx
- xor edi,edx
- rol ebx,5
- add eax,edi
- xor esi,edx
- add eax,ebx
- pxor xmm3,xmm7
- add ebp,DWORD PTR[48+rsp]
- xor esi,ecx
- punpcklqdq xmm8,xmm2
- mov edi,eax
- rol eax,5
- pxor xmm3,xmm4
- add ebp,esi
- xor edi,ecx
- movdqa xmm10,xmm9
- ror ebx,7
- paddd xmm9,xmm2
- add ebp,eax
- pxor xmm3,xmm8
- add edx,DWORD PTR[52+rsp]
- xor edi,ebx
- mov esi,ebp
- rol ebp,5
- movdqa xmm8,xmm3
- add edx,edi
- xor esi,ebx
- movdqa XMMWORD PTR[32+rsp],xmm9
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[56+rsp]
- pslld xmm3,2
- xor esi,eax
- mov edi,edx
- psrld xmm8,30
- rol edx,5
- add ecx,esi
- xor edi,eax
- ror ebp,7
- por xmm3,xmm8
- add ecx,edx
- add ebx,DWORD PTR[60+rsp]
- xor edi,ebp
- mov esi,ecx
- rol ecx,5
- add ebx,edi
- xor esi,ebp
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[rsp]
- xor esi,edx
- mov edi,ebx
- rol ebx,5
- paddd xmm10,xmm3
- add eax,esi
- xor edi,edx
- movdqa XMMWORD PTR[48+rsp],xmm10
- ror ecx,7
- add eax,ebx
- add ebp,DWORD PTR[4+rsp]
- xor edi,ecx
- mov esi,eax
- rol eax,5
- add ebp,edi
- xor esi,ecx
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[8+rsp]
- xor esi,ebx
- mov edi,ebp
- rol ebp,5
- add edx,esi
- xor edi,ebx
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[12+rsp]
- xor edi,eax
- mov esi,edx
- rol edx,5
- add ecx,edi
- xor esi,eax
- ror ebp,7
- add ecx,edx
- cmp r9,r10
- je $L$done_ssse3
- movdqa xmm6,XMMWORD PTR[64+r14]
- movdqa xmm9,XMMWORD PTR[((-64))+r14]
- movdqu xmm0,XMMWORD PTR[r9]
- movdqu xmm1,XMMWORD PTR[16+r9]
- movdqu xmm2,XMMWORD PTR[32+r9]
- movdqu xmm3,XMMWORD PTR[48+r9]
-DB 102,15,56,0,198
- add r9,64
- add ebx,DWORD PTR[16+rsp]
- xor esi,ebp
- mov edi,ecx
-DB 102,15,56,0,206
- rol ecx,5
- add ebx,esi
- xor edi,ebp
- ror edx,7
- paddd xmm0,xmm9
- add ebx,ecx
- add eax,DWORD PTR[20+rsp]
- xor edi,edx
- mov esi,ebx
- movdqa XMMWORD PTR[rsp],xmm0
- rol ebx,5
- add eax,edi
- xor esi,edx
- ror ecx,7
- psubd xmm0,xmm9
- add eax,ebx
- add ebp,DWORD PTR[24+rsp]
- xor esi,ecx
- mov edi,eax
- rol eax,5
- add ebp,esi
- xor edi,ecx
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[28+rsp]
- xor edi,ebx
- mov esi,ebp
- rol ebp,5
- add edx,edi
- xor esi,ebx
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[32+rsp]
- xor esi,eax
- mov edi,edx
-DB 102,15,56,0,214
- rol edx,5
- add ecx,esi
- xor edi,eax
- ror ebp,7
- paddd xmm1,xmm9
- add ecx,edx
- add ebx,DWORD PTR[36+rsp]
- xor edi,ebp
- mov esi,ecx
- movdqa XMMWORD PTR[16+rsp],xmm1
- rol ecx,5
- add ebx,edi
- xor esi,ebp
- ror edx,7
- psubd xmm1,xmm9
- add ebx,ecx
- add eax,DWORD PTR[40+rsp]
- xor esi,edx
- mov edi,ebx
- rol ebx,5
- add eax,esi
- xor edi,edx
- ror ecx,7
- add eax,ebx
- add ebp,DWORD PTR[44+rsp]
- xor edi,ecx
- mov esi,eax
- rol eax,5
- add ebp,edi
- xor esi,ecx
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[48+rsp]
- xor esi,ebx
- mov edi,ebp
-DB 102,15,56,0,222
- rol ebp,5
- add edx,esi
- xor edi,ebx
- ror eax,7
- paddd xmm2,xmm9
- add edx,ebp
- add ecx,DWORD PTR[52+rsp]
- xor edi,eax
- mov esi,edx
- movdqa XMMWORD PTR[32+rsp],xmm2
- rol edx,5
- add ecx,edi
- xor esi,eax
- ror ebp,7
- psubd xmm2,xmm9
- add ecx,edx
- add ebx,DWORD PTR[56+rsp]
- xor esi,ebp
- mov edi,ecx
- rol ecx,5
- add ebx,esi
- xor edi,ebp
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[60+rsp]
- xor edi,edx
- mov esi,ebx
- rol ebx,5
- add eax,edi
- ror ecx,7
- add eax,ebx
- add eax,DWORD PTR[r8]
- add esi,DWORD PTR[4+r8]
- add ecx,DWORD PTR[8+r8]
- add edx,DWORD PTR[12+r8]
- mov DWORD PTR[r8],eax
- add ebp,DWORD PTR[16+r8]
- mov DWORD PTR[4+r8],esi
- mov ebx,esi
- mov DWORD PTR[8+r8],ecx
- mov edi,ecx
- mov DWORD PTR[12+r8],edx
- xor edi,edx
- mov DWORD PTR[16+r8],ebp
- and esi,edi
- jmp $L$oop_ssse3
-
-ALIGN 16
-$L$done_ssse3::
- add ebx,DWORD PTR[16+rsp]
- xor esi,ebp
- mov edi,ecx
- rol ecx,5
- add ebx,esi
- xor edi,ebp
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[20+rsp]
- xor edi,edx
- mov esi,ebx
- rol ebx,5
- add eax,edi
- xor esi,edx
- ror ecx,7
- add eax,ebx
- add ebp,DWORD PTR[24+rsp]
- xor esi,ecx
- mov edi,eax
- rol eax,5
- add ebp,esi
- xor edi,ecx
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[28+rsp]
- xor edi,ebx
- mov esi,ebp
- rol ebp,5
- add edx,edi
- xor esi,ebx
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[32+rsp]
- xor esi,eax
- mov edi,edx
- rol edx,5
- add ecx,esi
- xor edi,eax
- ror ebp,7
- add ecx,edx
- add ebx,DWORD PTR[36+rsp]
- xor edi,ebp
- mov esi,ecx
- rol ecx,5
- add ebx,edi
- xor esi,ebp
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[40+rsp]
- xor esi,edx
- mov edi,ebx
- rol ebx,5
- add eax,esi
- xor edi,edx
- ror ecx,7
- add eax,ebx
- add ebp,DWORD PTR[44+rsp]
- xor edi,ecx
- mov esi,eax
- rol eax,5
- add ebp,edi
- xor esi,ecx
- ror ebx,7
- add ebp,eax
- add edx,DWORD PTR[48+rsp]
- xor esi,ebx
- mov edi,ebp
- rol ebp,5
- add edx,esi
- xor edi,ebx
- ror eax,7
- add edx,ebp
- add ecx,DWORD PTR[52+rsp]
- xor edi,eax
- mov esi,edx
- rol edx,5
- add ecx,edi
- xor esi,eax
- ror ebp,7
- add ecx,edx
- add ebx,DWORD PTR[56+rsp]
- xor esi,ebp
- mov edi,ecx
- rol ecx,5
- add ebx,esi
- xor edi,ebp
- ror edx,7
- add ebx,ecx
- add eax,DWORD PTR[60+rsp]
- xor edi,edx
- mov esi,ebx
- rol ebx,5
- add eax,edi
- ror ecx,7
- add eax,ebx
- add eax,DWORD PTR[r8]
- add esi,DWORD PTR[4+r8]
- add ecx,DWORD PTR[8+r8]
- mov DWORD PTR[r8],eax
- add edx,DWORD PTR[12+r8]
- mov DWORD PTR[4+r8],esi
- add ebp,DWORD PTR[16+r8]
- mov DWORD PTR[8+r8],ecx
- mov DWORD PTR[12+r8],edx
- mov DWORD PTR[16+r8],ebp
- movaps xmm6,XMMWORD PTR[((-40-96))+r11]
- movaps xmm7,XMMWORD PTR[((-40-80))+r11]
- movaps xmm8,XMMWORD PTR[((-40-64))+r11]
- movaps xmm9,XMMWORD PTR[((-40-48))+r11]
- movaps xmm10,XMMWORD PTR[((-40-32))+r11]
- movaps xmm11,XMMWORD PTR[((-40-16))+r11]
- mov r14,QWORD PTR[((-40))+r11]
-
- mov r13,QWORD PTR[((-32))+r11]
-
- mov r12,QWORD PTR[((-24))+r11]
-
- mov rbp,QWORD PTR[((-16))+r11]
-
- mov rbx,QWORD PTR[((-8))+r11]
-
- lea rsp,QWORD PTR[r11]
-
-$L$epilogue_ssse3::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha1_block_data_order_ssse3::
-sha1_block_data_order_ssse3 ENDP
-
-ALIGN 16
-sha1_block_data_order_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha1_block_data_order_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-_avx_shortcut::
-
- mov r11,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- lea rsp,QWORD PTR[((-160))+rsp]
- vzeroupper
- vmovaps XMMWORD PTR[(-40-96)+r11],xmm6
- vmovaps XMMWORD PTR[(-40-80)+r11],xmm7
- vmovaps XMMWORD PTR[(-40-64)+r11],xmm8
- vmovaps XMMWORD PTR[(-40-48)+r11],xmm9
- vmovaps XMMWORD PTR[(-40-32)+r11],xmm10
- vmovaps XMMWORD PTR[(-40-16)+r11],xmm11
-$L$prologue_avx::
- and rsp,-64
- mov r8,rdi
- mov r9,rsi
- mov r10,rdx
-
- shl r10,6
- add r10,r9
- lea r14,QWORD PTR[((K_XX_XX+64))]
-
- mov eax,DWORD PTR[r8]
- mov ebx,DWORD PTR[4+r8]
- mov ecx,DWORD PTR[8+r8]
- mov edx,DWORD PTR[12+r8]
- mov esi,ebx
- mov ebp,DWORD PTR[16+r8]
- mov edi,ecx
- xor edi,edx
- and esi,edi
-
- vmovdqa xmm6,XMMWORD PTR[64+r14]
- vmovdqa xmm11,XMMWORD PTR[((-64))+r14]
- vmovdqu xmm0,XMMWORD PTR[r9]
- vmovdqu xmm1,XMMWORD PTR[16+r9]
- vmovdqu xmm2,XMMWORD PTR[32+r9]
- vmovdqu xmm3,XMMWORD PTR[48+r9]
- vpshufb xmm0,xmm0,xmm6
- add r9,64
- vpshufb xmm1,xmm1,xmm6
- vpshufb xmm2,xmm2,xmm6
- vpshufb xmm3,xmm3,xmm6
- vpaddd xmm4,xmm0,xmm11
- vpaddd xmm5,xmm1,xmm11
- vpaddd xmm6,xmm2,xmm11
- vmovdqa XMMWORD PTR[rsp],xmm4
- vmovdqa XMMWORD PTR[16+rsp],xmm5
- vmovdqa XMMWORD PTR[32+rsp],xmm6
- jmp $L$oop_avx
-ALIGN 16
-$L$oop_avx::
- shrd ebx,ebx,2
- xor esi,edx
- vpalignr xmm4,xmm1,xmm0,8
- mov edi,eax
- add ebp,DWORD PTR[rsp]
- vpaddd xmm9,xmm11,xmm3
- xor ebx,ecx
- shld eax,eax,5
- vpsrldq xmm8,xmm3,4
- add ebp,esi
- and edi,ebx
- vpxor xmm4,xmm4,xmm0
- xor ebx,ecx
- add ebp,eax
- vpxor xmm8,xmm8,xmm2
- shrd eax,eax,7
- xor edi,ecx
- mov esi,ebp
- add edx,DWORD PTR[4+rsp]
- vpxor xmm4,xmm4,xmm8
- xor eax,ebx
- shld ebp,ebp,5
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- add edx,edi
- and esi,eax
- vpsrld xmm8,xmm4,31
- xor eax,ebx
- add edx,ebp
- shrd ebp,ebp,7
- xor esi,ebx
- vpslldq xmm10,xmm4,12
- vpaddd xmm4,xmm4,xmm4
- mov edi,edx
- add ecx,DWORD PTR[8+rsp]
- xor ebp,eax
- shld edx,edx,5
- vpsrld xmm9,xmm10,30
- vpor xmm4,xmm4,xmm8
- add ecx,esi
- and edi,ebp
- xor ebp,eax
- add ecx,edx
- vpslld xmm10,xmm10,2
- vpxor xmm4,xmm4,xmm9
- shrd edx,edx,7
- xor edi,eax
- mov esi,ecx
- add ebx,DWORD PTR[12+rsp]
- vpxor xmm4,xmm4,xmm10
- xor edx,ebp
- shld ecx,ecx,5
- add ebx,edi
- and esi,edx
- xor edx,ebp
- add ebx,ecx
- shrd ecx,ecx,7
- xor esi,ebp
- vpalignr xmm5,xmm2,xmm1,8
- mov edi,ebx
- add eax,DWORD PTR[16+rsp]
- vpaddd xmm9,xmm11,xmm4
- xor ecx,edx
- shld ebx,ebx,5
- vpsrldq xmm8,xmm4,4
- add eax,esi
- and edi,ecx
- vpxor xmm5,xmm5,xmm1
- xor ecx,edx
- add eax,ebx
- vpxor xmm8,xmm8,xmm3
- shrd ebx,ebx,7
- xor edi,edx
- mov esi,eax
- add ebp,DWORD PTR[20+rsp]
- vpxor xmm5,xmm5,xmm8
- xor ebx,ecx
- shld eax,eax,5
- vmovdqa XMMWORD PTR[rsp],xmm9
- add ebp,edi
- and esi,ebx
- vpsrld xmm8,xmm5,31
- xor ebx,ecx
- add ebp,eax
- shrd eax,eax,7
- xor esi,ecx
- vpslldq xmm10,xmm5,12
- vpaddd xmm5,xmm5,xmm5
- mov edi,ebp
- add edx,DWORD PTR[24+rsp]
- xor eax,ebx
- shld ebp,ebp,5
- vpsrld xmm9,xmm10,30
- vpor xmm5,xmm5,xmm8
- add edx,esi
- and edi,eax
- xor eax,ebx
- add edx,ebp
- vpslld xmm10,xmm10,2
- vpxor xmm5,xmm5,xmm9
- shrd ebp,ebp,7
- xor edi,ebx
- mov esi,edx
- add ecx,DWORD PTR[28+rsp]
- vpxor xmm5,xmm5,xmm10
- xor ebp,eax
- shld edx,edx,5
- vmovdqa xmm11,XMMWORD PTR[((-32))+r14]
- add ecx,edi
- and esi,ebp
- xor ebp,eax
- add ecx,edx
- shrd edx,edx,7
- xor esi,eax
- vpalignr xmm6,xmm3,xmm2,8
- mov edi,ecx
- add ebx,DWORD PTR[32+rsp]
- vpaddd xmm9,xmm11,xmm5
- xor edx,ebp
- shld ecx,ecx,5
- vpsrldq xmm8,xmm5,4
- add ebx,esi
- and edi,edx
- vpxor xmm6,xmm6,xmm2
- xor edx,ebp
- add ebx,ecx
- vpxor xmm8,xmm8,xmm4
- shrd ecx,ecx,7
- xor edi,ebp
- mov esi,ebx
- add eax,DWORD PTR[36+rsp]
- vpxor xmm6,xmm6,xmm8
- xor ecx,edx
- shld ebx,ebx,5
- vmovdqa XMMWORD PTR[16+rsp],xmm9
- add eax,edi
- and esi,ecx
- vpsrld xmm8,xmm6,31
- xor ecx,edx
- add eax,ebx
- shrd ebx,ebx,7
- xor esi,edx
- vpslldq xmm10,xmm6,12
- vpaddd xmm6,xmm6,xmm6
- mov edi,eax
- add ebp,DWORD PTR[40+rsp]
- xor ebx,ecx
- shld eax,eax,5
- vpsrld xmm9,xmm10,30
- vpor xmm6,xmm6,xmm8
- add ebp,esi
- and edi,ebx
- xor ebx,ecx
- add ebp,eax
- vpslld xmm10,xmm10,2
- vpxor xmm6,xmm6,xmm9
- shrd eax,eax,7
- xor edi,ecx
- mov esi,ebp
- add edx,DWORD PTR[44+rsp]
- vpxor xmm6,xmm6,xmm10
- xor eax,ebx
- shld ebp,ebp,5
- add edx,edi
- and esi,eax
- xor eax,ebx
- add edx,ebp
- shrd ebp,ebp,7
- xor esi,ebx
- vpalignr xmm7,xmm4,xmm3,8
- mov edi,edx
- add ecx,DWORD PTR[48+rsp]
- vpaddd xmm9,xmm11,xmm6
- xor ebp,eax
- shld edx,edx,5
- vpsrldq xmm8,xmm6,4
- add ecx,esi
- and edi,ebp
- vpxor xmm7,xmm7,xmm3
- xor ebp,eax
- add ecx,edx
- vpxor xmm8,xmm8,xmm5
- shrd edx,edx,7
- xor edi,eax
- mov esi,ecx
- add ebx,DWORD PTR[52+rsp]
- vpxor xmm7,xmm7,xmm8
- xor edx,ebp
- shld ecx,ecx,5
- vmovdqa XMMWORD PTR[32+rsp],xmm9
- add ebx,edi
- and esi,edx
- vpsrld xmm8,xmm7,31
- xor edx,ebp
- add ebx,ecx
- shrd ecx,ecx,7
- xor esi,ebp
- vpslldq xmm10,xmm7,12
- vpaddd xmm7,xmm7,xmm7
- mov edi,ebx
- add eax,DWORD PTR[56+rsp]
- xor ecx,edx
- shld ebx,ebx,5
- vpsrld xmm9,xmm10,30
- vpor xmm7,xmm7,xmm8
- add eax,esi
- and edi,ecx
- xor ecx,edx
- add eax,ebx
- vpslld xmm10,xmm10,2
- vpxor xmm7,xmm7,xmm9
- shrd ebx,ebx,7
- xor edi,edx
- mov esi,eax
- add ebp,DWORD PTR[60+rsp]
- vpxor xmm7,xmm7,xmm10
- xor ebx,ecx
- shld eax,eax,5
- add ebp,edi
- and esi,ebx
- xor ebx,ecx
- add ebp,eax
- vpalignr xmm8,xmm7,xmm6,8
- vpxor xmm0,xmm0,xmm4
- shrd eax,eax,7
- xor esi,ecx
- mov edi,ebp
- add edx,DWORD PTR[rsp]
- vpxor xmm0,xmm0,xmm1
- xor eax,ebx
- shld ebp,ebp,5
- vpaddd xmm9,xmm11,xmm7
- add edx,esi
- and edi,eax
- vpxor xmm0,xmm0,xmm8
- xor eax,ebx
- add edx,ebp
- shrd ebp,ebp,7
- xor edi,ebx
- vpsrld xmm8,xmm0,30
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- mov esi,edx
- add ecx,DWORD PTR[4+rsp]
- xor ebp,eax
- shld edx,edx,5
- vpslld xmm0,xmm0,2
- add ecx,edi
- and esi,ebp
- xor ebp,eax
- add ecx,edx
- shrd edx,edx,7
- xor esi,eax
- mov edi,ecx
- add ebx,DWORD PTR[8+rsp]
- vpor xmm0,xmm0,xmm8
- xor edx,ebp
- shld ecx,ecx,5
- add ebx,esi
- and edi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[12+rsp]
- xor edi,ebp
- mov esi,ebx
- shld ebx,ebx,5
- add eax,edi
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- vpalignr xmm8,xmm0,xmm7,8
- vpxor xmm1,xmm1,xmm5
- add ebp,DWORD PTR[16+rsp]
- xor esi,ecx
- mov edi,eax
- shld eax,eax,5
- vpxor xmm1,xmm1,xmm2
- add ebp,esi
- xor edi,ecx
- vpaddd xmm9,xmm11,xmm0
- shrd ebx,ebx,7
- add ebp,eax
- vpxor xmm1,xmm1,xmm8
- add edx,DWORD PTR[20+rsp]
- xor edi,ebx
- mov esi,ebp
- shld ebp,ebp,5
- vpsrld xmm8,xmm1,30
- vmovdqa XMMWORD PTR[rsp],xmm9
- add edx,edi
- xor esi,ebx
- shrd eax,eax,7
- add edx,ebp
- vpslld xmm1,xmm1,2
- add ecx,DWORD PTR[24+rsp]
- xor esi,eax
- mov edi,edx
- shld edx,edx,5
- add ecx,esi
- xor edi,eax
- shrd ebp,ebp,7
- add ecx,edx
- vpor xmm1,xmm1,xmm8
- add ebx,DWORD PTR[28+rsp]
- xor edi,ebp
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,edi
- xor esi,ebp
- shrd edx,edx,7
- add ebx,ecx
- vpalignr xmm8,xmm1,xmm0,8
- vpxor xmm2,xmm2,xmm6
- add eax,DWORD PTR[32+rsp]
- xor esi,edx
- mov edi,ebx
- shld ebx,ebx,5
- vpxor xmm2,xmm2,xmm3
- add eax,esi
- xor edi,edx
- vpaddd xmm9,xmm11,xmm1
- vmovdqa xmm11,XMMWORD PTR[r14]
- shrd ecx,ecx,7
- add eax,ebx
- vpxor xmm2,xmm2,xmm8
- add ebp,DWORD PTR[36+rsp]
- xor edi,ecx
- mov esi,eax
- shld eax,eax,5
- vpsrld xmm8,xmm2,30
- vmovdqa XMMWORD PTR[16+rsp],xmm9
- add ebp,edi
- xor esi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- vpslld xmm2,xmm2,2
- add edx,DWORD PTR[40+rsp]
- xor esi,ebx
- mov edi,ebp
- shld ebp,ebp,5
- add edx,esi
- xor edi,ebx
- shrd eax,eax,7
- add edx,ebp
- vpor xmm2,xmm2,xmm8
- add ecx,DWORD PTR[44+rsp]
- xor edi,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,edi
- xor esi,eax
- shrd ebp,ebp,7
- add ecx,edx
- vpalignr xmm8,xmm2,xmm1,8
- vpxor xmm3,xmm3,xmm7
- add ebx,DWORD PTR[48+rsp]
- xor esi,ebp
- mov edi,ecx
- shld ecx,ecx,5
- vpxor xmm3,xmm3,xmm4
- add ebx,esi
- xor edi,ebp
- vpaddd xmm9,xmm11,xmm2
- shrd edx,edx,7
- add ebx,ecx
- vpxor xmm3,xmm3,xmm8
- add eax,DWORD PTR[52+rsp]
- xor edi,edx
- mov esi,ebx
- shld ebx,ebx,5
- vpsrld xmm8,xmm3,30
- vmovdqa XMMWORD PTR[32+rsp],xmm9
- add eax,edi
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- vpslld xmm3,xmm3,2
- add ebp,DWORD PTR[56+rsp]
- xor esi,ecx
- mov edi,eax
- shld eax,eax,5
- add ebp,esi
- xor edi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- vpor xmm3,xmm3,xmm8
- add edx,DWORD PTR[60+rsp]
- xor edi,ebx
- mov esi,ebp
- shld ebp,ebp,5
- add edx,edi
- xor esi,ebx
- shrd eax,eax,7
- add edx,ebp
- vpalignr xmm8,xmm3,xmm2,8
- vpxor xmm4,xmm4,xmm0
- add ecx,DWORD PTR[rsp]
- xor esi,eax
- mov edi,edx
- shld edx,edx,5
- vpxor xmm4,xmm4,xmm5
- add ecx,esi
- xor edi,eax
- vpaddd xmm9,xmm11,xmm3
- shrd ebp,ebp,7
- add ecx,edx
- vpxor xmm4,xmm4,xmm8
- add ebx,DWORD PTR[4+rsp]
- xor edi,ebp
- mov esi,ecx
- shld ecx,ecx,5
- vpsrld xmm8,xmm4,30
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- add ebx,edi
- xor esi,ebp
- shrd edx,edx,7
- add ebx,ecx
- vpslld xmm4,xmm4,2
- add eax,DWORD PTR[8+rsp]
- xor esi,edx
- mov edi,ebx
- shld ebx,ebx,5
- add eax,esi
- xor edi,edx
- shrd ecx,ecx,7
- add eax,ebx
- vpor xmm4,xmm4,xmm8
- add ebp,DWORD PTR[12+rsp]
- xor edi,ecx
- mov esi,eax
- shld eax,eax,5
- add ebp,edi
- xor esi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- vpalignr xmm8,xmm4,xmm3,8
- vpxor xmm5,xmm5,xmm1
- add edx,DWORD PTR[16+rsp]
- xor esi,ebx
- mov edi,ebp
- shld ebp,ebp,5
- vpxor xmm5,xmm5,xmm6
- add edx,esi
- xor edi,ebx
- vpaddd xmm9,xmm11,xmm4
- shrd eax,eax,7
- add edx,ebp
- vpxor xmm5,xmm5,xmm8
- add ecx,DWORD PTR[20+rsp]
- xor edi,eax
- mov esi,edx
- shld edx,edx,5
- vpsrld xmm8,xmm5,30
- vmovdqa XMMWORD PTR[rsp],xmm9
- add ecx,edi
- xor esi,eax
- shrd ebp,ebp,7
- add ecx,edx
- vpslld xmm5,xmm5,2
- add ebx,DWORD PTR[24+rsp]
- xor esi,ebp
- mov edi,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor edi,ebp
- shrd edx,edx,7
- add ebx,ecx
- vpor xmm5,xmm5,xmm8
- add eax,DWORD PTR[28+rsp]
- shrd ecx,ecx,7
- mov esi,ebx
- xor edi,edx
- shld ebx,ebx,5
- add eax,edi
- xor esi,ecx
- xor ecx,edx
- add eax,ebx
- vpalignr xmm8,xmm5,xmm4,8
- vpxor xmm6,xmm6,xmm2
- add ebp,DWORD PTR[32+rsp]
- and esi,ecx
- xor ecx,edx
- shrd ebx,ebx,7
- vpxor xmm6,xmm6,xmm7
- mov edi,eax
- xor esi,ecx
- vpaddd xmm9,xmm11,xmm5
- shld eax,eax,5
- add ebp,esi
- vpxor xmm6,xmm6,xmm8
- xor edi,ebx
- xor ebx,ecx
- add ebp,eax
- add edx,DWORD PTR[36+rsp]
- vpsrld xmm8,xmm6,30
- vmovdqa XMMWORD PTR[16+rsp],xmm9
- and edi,ebx
- xor ebx,ecx
- shrd eax,eax,7
- mov esi,ebp
- vpslld xmm6,xmm6,2
- xor edi,ebx
- shld ebp,ebp,5
- add edx,edi
- xor esi,eax
- xor eax,ebx
- add edx,ebp
- add ecx,DWORD PTR[40+rsp]
- and esi,eax
- vpor xmm6,xmm6,xmm8
- xor eax,ebx
- shrd ebp,ebp,7
- mov edi,edx
- xor esi,eax
- shld edx,edx,5
- add ecx,esi
- xor edi,ebp
- xor ebp,eax
- add ecx,edx
- add ebx,DWORD PTR[44+rsp]
- and edi,ebp
- xor ebp,eax
- shrd edx,edx,7
- mov esi,ecx
- xor edi,ebp
- shld ecx,ecx,5
- add ebx,edi
- xor esi,edx
- xor edx,ebp
- add ebx,ecx
- vpalignr xmm8,xmm6,xmm5,8
- vpxor xmm7,xmm7,xmm3
- add eax,DWORD PTR[48+rsp]
- and esi,edx
- xor edx,ebp
- shrd ecx,ecx,7
- vpxor xmm7,xmm7,xmm0
- mov edi,ebx
- xor esi,edx
- vpaddd xmm9,xmm11,xmm6
- vmovdqa xmm11,XMMWORD PTR[32+r14]
- shld ebx,ebx,5
- add eax,esi
- vpxor xmm7,xmm7,xmm8
- xor edi,ecx
- xor ecx,edx
- add eax,ebx
- add ebp,DWORD PTR[52+rsp]
- vpsrld xmm8,xmm7,30
- vmovdqa XMMWORD PTR[32+rsp],xmm9
- and edi,ecx
- xor ecx,edx
- shrd ebx,ebx,7
- mov esi,eax
- vpslld xmm7,xmm7,2
- xor edi,ecx
- shld eax,eax,5
- add ebp,edi
- xor esi,ebx
- xor ebx,ecx
- add ebp,eax
- add edx,DWORD PTR[56+rsp]
- and esi,ebx
- vpor xmm7,xmm7,xmm8
- xor ebx,ecx
- shrd eax,eax,7
- mov edi,ebp
- xor esi,ebx
- shld ebp,ebp,5
- add edx,esi
- xor edi,eax
- xor eax,ebx
- add edx,ebp
- add ecx,DWORD PTR[60+rsp]
- and edi,eax
- xor eax,ebx
- shrd ebp,ebp,7
- mov esi,edx
- xor edi,eax
- shld edx,edx,5
- add ecx,edi
- xor esi,ebp
- xor ebp,eax
- add ecx,edx
- vpalignr xmm8,xmm7,xmm6,8
- vpxor xmm0,xmm0,xmm4
- add ebx,DWORD PTR[rsp]
- and esi,ebp
- xor ebp,eax
- shrd edx,edx,7
- vpxor xmm0,xmm0,xmm1
- mov edi,ecx
- xor esi,ebp
- vpaddd xmm9,xmm11,xmm7
- shld ecx,ecx,5
- add ebx,esi
- vpxor xmm0,xmm0,xmm8
- xor edi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[4+rsp]
- vpsrld xmm8,xmm0,30
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- and edi,edx
- xor edx,ebp
- shrd ecx,ecx,7
- mov esi,ebx
- vpslld xmm0,xmm0,2
- xor edi,edx
- shld ebx,ebx,5
- add eax,edi
- xor esi,ecx
- xor ecx,edx
- add eax,ebx
- add ebp,DWORD PTR[8+rsp]
- and esi,ecx
- vpor xmm0,xmm0,xmm8
- xor ecx,edx
- shrd ebx,ebx,7
- mov edi,eax
- xor esi,ecx
- shld eax,eax,5
- add ebp,esi
- xor edi,ebx
- xor ebx,ecx
- add ebp,eax
- add edx,DWORD PTR[12+rsp]
- and edi,ebx
- xor ebx,ecx
- shrd eax,eax,7
- mov esi,ebp
- xor edi,ebx
- shld ebp,ebp,5
- add edx,edi
- xor esi,eax
- xor eax,ebx
- add edx,ebp
- vpalignr xmm8,xmm0,xmm7,8
- vpxor xmm1,xmm1,xmm5
- add ecx,DWORD PTR[16+rsp]
- and esi,eax
- xor eax,ebx
- shrd ebp,ebp,7
- vpxor xmm1,xmm1,xmm2
- mov edi,edx
- xor esi,eax
- vpaddd xmm9,xmm11,xmm0
- shld edx,edx,5
- add ecx,esi
- vpxor xmm1,xmm1,xmm8
- xor edi,ebp
- xor ebp,eax
- add ecx,edx
- add ebx,DWORD PTR[20+rsp]
- vpsrld xmm8,xmm1,30
- vmovdqa XMMWORD PTR[rsp],xmm9
- and edi,ebp
- xor ebp,eax
- shrd edx,edx,7
- mov esi,ecx
- vpslld xmm1,xmm1,2
- xor edi,ebp
- shld ecx,ecx,5
- add ebx,edi
- xor esi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[24+rsp]
- and esi,edx
- vpor xmm1,xmm1,xmm8
- xor edx,ebp
- shrd ecx,ecx,7
- mov edi,ebx
- xor esi,edx
- shld ebx,ebx,5
- add eax,esi
- xor edi,ecx
- xor ecx,edx
- add eax,ebx
- add ebp,DWORD PTR[28+rsp]
- and edi,ecx
- xor ecx,edx
- shrd ebx,ebx,7
- mov esi,eax
- xor edi,ecx
- shld eax,eax,5
- add ebp,edi
- xor esi,ebx
- xor ebx,ecx
- add ebp,eax
- vpalignr xmm8,xmm1,xmm0,8
- vpxor xmm2,xmm2,xmm6
- add edx,DWORD PTR[32+rsp]
- and esi,ebx
- xor ebx,ecx
- shrd eax,eax,7
- vpxor xmm2,xmm2,xmm3
- mov edi,ebp
- xor esi,ebx
- vpaddd xmm9,xmm11,xmm1
- shld ebp,ebp,5
- add edx,esi
- vpxor xmm2,xmm2,xmm8
- xor edi,eax
- xor eax,ebx
- add edx,ebp
- add ecx,DWORD PTR[36+rsp]
- vpsrld xmm8,xmm2,30
- vmovdqa XMMWORD PTR[16+rsp],xmm9
- and edi,eax
- xor eax,ebx
- shrd ebp,ebp,7
- mov esi,edx
- vpslld xmm2,xmm2,2
- xor edi,eax
- shld edx,edx,5
- add ecx,edi
- xor esi,ebp
- xor ebp,eax
- add ecx,edx
- add ebx,DWORD PTR[40+rsp]
- and esi,ebp
- vpor xmm2,xmm2,xmm8
- xor ebp,eax
- shrd edx,edx,7
- mov edi,ecx
- xor esi,ebp
- shld ecx,ecx,5
- add ebx,esi
- xor edi,edx
- xor edx,ebp
- add ebx,ecx
- add eax,DWORD PTR[44+rsp]
- and edi,edx
- xor edx,ebp
- shrd ecx,ecx,7
- mov esi,ebx
- xor edi,edx
- shld ebx,ebx,5
- add eax,edi
- xor esi,edx
- add eax,ebx
- vpalignr xmm8,xmm2,xmm1,8
- vpxor xmm3,xmm3,xmm7
- add ebp,DWORD PTR[48+rsp]
- xor esi,ecx
- mov edi,eax
- shld eax,eax,5
- vpxor xmm3,xmm3,xmm4
- add ebp,esi
- xor edi,ecx
- vpaddd xmm9,xmm11,xmm2
- shrd ebx,ebx,7
- add ebp,eax
- vpxor xmm3,xmm3,xmm8
- add edx,DWORD PTR[52+rsp]
- xor edi,ebx
- mov esi,ebp
- shld ebp,ebp,5
- vpsrld xmm8,xmm3,30
- vmovdqa XMMWORD PTR[32+rsp],xmm9
- add edx,edi
- xor esi,ebx
- shrd eax,eax,7
- add edx,ebp
- vpslld xmm3,xmm3,2
- add ecx,DWORD PTR[56+rsp]
- xor esi,eax
- mov edi,edx
- shld edx,edx,5
- add ecx,esi
- xor edi,eax
- shrd ebp,ebp,7
- add ecx,edx
- vpor xmm3,xmm3,xmm8
- add ebx,DWORD PTR[60+rsp]
- xor edi,ebp
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,edi
- xor esi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[rsp]
- vpaddd xmm9,xmm11,xmm3
- xor esi,edx
- mov edi,ebx
- shld ebx,ebx,5
- add eax,esi
- vmovdqa XMMWORD PTR[48+rsp],xmm9
- xor edi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add ebp,DWORD PTR[4+rsp]
- xor edi,ecx
- mov esi,eax
- shld eax,eax,5
- add ebp,edi
- xor esi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- add edx,DWORD PTR[8+rsp]
- xor esi,ebx
- mov edi,ebp
- shld ebp,ebp,5
- add edx,esi
- xor edi,ebx
- shrd eax,eax,7
- add edx,ebp
- add ecx,DWORD PTR[12+rsp]
- xor edi,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,edi
- xor esi,eax
- shrd ebp,ebp,7
- add ecx,edx
- cmp r9,r10
- je $L$done_avx
- vmovdqa xmm6,XMMWORD PTR[64+r14]
- vmovdqa xmm11,XMMWORD PTR[((-64))+r14]
- vmovdqu xmm0,XMMWORD PTR[r9]
- vmovdqu xmm1,XMMWORD PTR[16+r9]
- vmovdqu xmm2,XMMWORD PTR[32+r9]
- vmovdqu xmm3,XMMWORD PTR[48+r9]
- vpshufb xmm0,xmm0,xmm6
- add r9,64
- add ebx,DWORD PTR[16+rsp]
- xor esi,ebp
- vpshufb xmm1,xmm1,xmm6
- mov edi,ecx
- shld ecx,ecx,5
- vpaddd xmm4,xmm0,xmm11
- add ebx,esi
- xor edi,ebp
- shrd edx,edx,7
- add ebx,ecx
- vmovdqa XMMWORD PTR[rsp],xmm4
- add eax,DWORD PTR[20+rsp]
- xor edi,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,edi
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add ebp,DWORD PTR[24+rsp]
- xor esi,ecx
- mov edi,eax
- shld eax,eax,5
- add ebp,esi
- xor edi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- add edx,DWORD PTR[28+rsp]
- xor edi,ebx
- mov esi,ebp
- shld ebp,ebp,5
- add edx,edi
- xor esi,ebx
- shrd eax,eax,7
- add edx,ebp
- add ecx,DWORD PTR[32+rsp]
- xor esi,eax
- vpshufb xmm2,xmm2,xmm6
- mov edi,edx
- shld edx,edx,5
- vpaddd xmm5,xmm1,xmm11
- add ecx,esi
- xor edi,eax
- shrd ebp,ebp,7
- add ecx,edx
- vmovdqa XMMWORD PTR[16+rsp],xmm5
- add ebx,DWORD PTR[36+rsp]
- xor edi,ebp
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,edi
- xor esi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[40+rsp]
- xor esi,edx
- mov edi,ebx
- shld ebx,ebx,5
- add eax,esi
- xor edi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add ebp,DWORD PTR[44+rsp]
- xor edi,ecx
- mov esi,eax
- shld eax,eax,5
- add ebp,edi
- xor esi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- add edx,DWORD PTR[48+rsp]
- xor esi,ebx
- vpshufb xmm3,xmm3,xmm6
- mov edi,ebp
- shld ebp,ebp,5
- vpaddd xmm6,xmm2,xmm11
- add edx,esi
- xor edi,ebx
- shrd eax,eax,7
- add edx,ebp
- vmovdqa XMMWORD PTR[32+rsp],xmm6
- add ecx,DWORD PTR[52+rsp]
- xor edi,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,edi
- xor esi,eax
- shrd ebp,ebp,7
- add ecx,edx
- add ebx,DWORD PTR[56+rsp]
- xor esi,ebp
- mov edi,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor edi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[60+rsp]
- xor edi,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,edi
- shrd ecx,ecx,7
- add eax,ebx
- add eax,DWORD PTR[r8]
- add esi,DWORD PTR[4+r8]
- add ecx,DWORD PTR[8+r8]
- add edx,DWORD PTR[12+r8]
- mov DWORD PTR[r8],eax
- add ebp,DWORD PTR[16+r8]
- mov DWORD PTR[4+r8],esi
- mov ebx,esi
- mov DWORD PTR[8+r8],ecx
- mov edi,ecx
- mov DWORD PTR[12+r8],edx
- xor edi,edx
- mov DWORD PTR[16+r8],ebp
- and esi,edi
- jmp $L$oop_avx
-
-ALIGN 16
-$L$done_avx::
- add ebx,DWORD PTR[16+rsp]
- xor esi,ebp
- mov edi,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor edi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[20+rsp]
- xor edi,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,edi
- xor esi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add ebp,DWORD PTR[24+rsp]
- xor esi,ecx
- mov edi,eax
- shld eax,eax,5
- add ebp,esi
- xor edi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- add edx,DWORD PTR[28+rsp]
- xor edi,ebx
- mov esi,ebp
- shld ebp,ebp,5
- add edx,edi
- xor esi,ebx
- shrd eax,eax,7
- add edx,ebp
- add ecx,DWORD PTR[32+rsp]
- xor esi,eax
- mov edi,edx
- shld edx,edx,5
- add ecx,esi
- xor edi,eax
- shrd ebp,ebp,7
- add ecx,edx
- add ebx,DWORD PTR[36+rsp]
- xor edi,ebp
- mov esi,ecx
- shld ecx,ecx,5
- add ebx,edi
- xor esi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[40+rsp]
- xor esi,edx
- mov edi,ebx
- shld ebx,ebx,5
- add eax,esi
- xor edi,edx
- shrd ecx,ecx,7
- add eax,ebx
- add ebp,DWORD PTR[44+rsp]
- xor edi,ecx
- mov esi,eax
- shld eax,eax,5
- add ebp,edi
- xor esi,ecx
- shrd ebx,ebx,7
- add ebp,eax
- add edx,DWORD PTR[48+rsp]
- xor esi,ebx
- mov edi,ebp
- shld ebp,ebp,5
- add edx,esi
- xor edi,ebx
- shrd eax,eax,7
- add edx,ebp
- add ecx,DWORD PTR[52+rsp]
- xor edi,eax
- mov esi,edx
- shld edx,edx,5
- add ecx,edi
- xor esi,eax
- shrd ebp,ebp,7
- add ecx,edx
- add ebx,DWORD PTR[56+rsp]
- xor esi,ebp
- mov edi,ecx
- shld ecx,ecx,5
- add ebx,esi
- xor edi,ebp
- shrd edx,edx,7
- add ebx,ecx
- add eax,DWORD PTR[60+rsp]
- xor edi,edx
- mov esi,ebx
- shld ebx,ebx,5
- add eax,edi
- shrd ecx,ecx,7
- add eax,ebx
- vzeroupper
-
- add eax,DWORD PTR[r8]
- add esi,DWORD PTR[4+r8]
- add ecx,DWORD PTR[8+r8]
- mov DWORD PTR[r8],eax
- add edx,DWORD PTR[12+r8]
- mov DWORD PTR[4+r8],esi
- add ebp,DWORD PTR[16+r8]
- mov DWORD PTR[8+r8],ecx
- mov DWORD PTR[12+r8],edx
- mov DWORD PTR[16+r8],ebp
- movaps xmm6,XMMWORD PTR[((-40-96))+r11]
- movaps xmm7,XMMWORD PTR[((-40-80))+r11]
- movaps xmm8,XMMWORD PTR[((-40-64))+r11]
- movaps xmm9,XMMWORD PTR[((-40-48))+r11]
- movaps xmm10,XMMWORD PTR[((-40-32))+r11]
- movaps xmm11,XMMWORD PTR[((-40-16))+r11]
- mov r14,QWORD PTR[((-40))+r11]
-
- mov r13,QWORD PTR[((-32))+r11]
-
- mov r12,QWORD PTR[((-24))+r11]
-
- mov rbp,QWORD PTR[((-16))+r11]
-
- mov rbx,QWORD PTR[((-8))+r11]
-
- lea rsp,QWORD PTR[r11]
-
-$L$epilogue_avx::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha1_block_data_order_avx::
-sha1_block_data_order_avx ENDP
-
-ALIGN 16
-sha1_block_data_order_avx2 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha1_block_data_order_avx2::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-_avx2_shortcut::
-
- mov r11,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- vzeroupper
- lea rsp,QWORD PTR[((-96))+rsp]
- vmovaps XMMWORD PTR[(-40-96)+r11],xmm6
- vmovaps XMMWORD PTR[(-40-80)+r11],xmm7
- vmovaps XMMWORD PTR[(-40-64)+r11],xmm8
- vmovaps XMMWORD PTR[(-40-48)+r11],xmm9
- vmovaps XMMWORD PTR[(-40-32)+r11],xmm10
- vmovaps XMMWORD PTR[(-40-16)+r11],xmm11
-$L$prologue_avx2::
- mov r8,rdi
- mov r9,rsi
- mov r10,rdx
-
- lea rsp,QWORD PTR[((-640))+rsp]
- shl r10,6
- lea r13,QWORD PTR[64+r9]
- and rsp,-128
- add r10,r9
- lea r14,QWORD PTR[((K_XX_XX+64))]
-
- mov eax,DWORD PTR[r8]
- cmp r13,r10
- cmovae r13,r9
- mov ebp,DWORD PTR[4+r8]
- mov ecx,DWORD PTR[8+r8]
- mov edx,DWORD PTR[12+r8]
- mov esi,DWORD PTR[16+r8]
- vmovdqu ymm6,YMMWORD PTR[64+r14]
-
- vmovdqu xmm0,XMMWORD PTR[r9]
- vmovdqu xmm1,XMMWORD PTR[16+r9]
- vmovdqu xmm2,XMMWORD PTR[32+r9]
- vmovdqu xmm3,XMMWORD PTR[48+r9]
- lea r9,QWORD PTR[64+r9]
- vinserti128 ymm0,ymm0,XMMWORD PTR[r13],1
- vinserti128 ymm1,ymm1,XMMWORD PTR[16+r13],1
- vpshufb ymm0,ymm0,ymm6
- vinserti128 ymm2,ymm2,XMMWORD PTR[32+r13],1
- vpshufb ymm1,ymm1,ymm6
- vinserti128 ymm3,ymm3,XMMWORD PTR[48+r13],1
- vpshufb ymm2,ymm2,ymm6
- vmovdqu ymm11,YMMWORD PTR[((-64))+r14]
- vpshufb ymm3,ymm3,ymm6
-
- vpaddd ymm4,ymm0,ymm11
- vpaddd ymm5,ymm1,ymm11
- vmovdqu YMMWORD PTR[rsp],ymm4
- vpaddd ymm6,ymm2,ymm11
- vmovdqu YMMWORD PTR[32+rsp],ymm5
- vpaddd ymm7,ymm3,ymm11
- vmovdqu YMMWORD PTR[64+rsp],ymm6
- vmovdqu YMMWORD PTR[96+rsp],ymm7
- vpalignr ymm4,ymm1,ymm0,8
- vpsrldq ymm8,ymm3,4
- vpxor ymm4,ymm4,ymm0
- vpxor ymm8,ymm8,ymm2
- vpxor ymm4,ymm4,ymm8
- vpsrld ymm8,ymm4,31
- vpslldq ymm10,ymm4,12
- vpaddd ymm4,ymm4,ymm4
- vpsrld ymm9,ymm10,30
- vpor ymm4,ymm4,ymm8
- vpslld ymm10,ymm10,2
- vpxor ymm4,ymm4,ymm9
- vpxor ymm4,ymm4,ymm10
- vpaddd ymm9,ymm4,ymm11
- vmovdqu YMMWORD PTR[128+rsp],ymm9
- vpalignr ymm5,ymm2,ymm1,8
- vpsrldq ymm8,ymm4,4
- vpxor ymm5,ymm5,ymm1
- vpxor ymm8,ymm8,ymm3
- vpxor ymm5,ymm5,ymm8
- vpsrld ymm8,ymm5,31
- vmovdqu ymm11,YMMWORD PTR[((-32))+r14]
- vpslldq ymm10,ymm5,12
- vpaddd ymm5,ymm5,ymm5
- vpsrld ymm9,ymm10,30
- vpor ymm5,ymm5,ymm8
- vpslld ymm10,ymm10,2
- vpxor ymm5,ymm5,ymm9
- vpxor ymm5,ymm5,ymm10
- vpaddd ymm9,ymm5,ymm11
- vmovdqu YMMWORD PTR[160+rsp],ymm9
- vpalignr ymm6,ymm3,ymm2,8
- vpsrldq ymm8,ymm5,4
- vpxor ymm6,ymm6,ymm2
- vpxor ymm8,ymm8,ymm4
- vpxor ymm6,ymm6,ymm8
- vpsrld ymm8,ymm6,31
- vpslldq ymm10,ymm6,12
- vpaddd ymm6,ymm6,ymm6
- vpsrld ymm9,ymm10,30
- vpor ymm6,ymm6,ymm8
- vpslld ymm10,ymm10,2
- vpxor ymm6,ymm6,ymm9
- vpxor ymm6,ymm6,ymm10
- vpaddd ymm9,ymm6,ymm11
- vmovdqu YMMWORD PTR[192+rsp],ymm9
- vpalignr ymm7,ymm4,ymm3,8
- vpsrldq ymm8,ymm6,4
- vpxor ymm7,ymm7,ymm3
- vpxor ymm8,ymm8,ymm5
- vpxor ymm7,ymm7,ymm8
- vpsrld ymm8,ymm7,31
- vpslldq ymm10,ymm7,12
- vpaddd ymm7,ymm7,ymm7
- vpsrld ymm9,ymm10,30
- vpor ymm7,ymm7,ymm8
- vpslld ymm10,ymm10,2
- vpxor ymm7,ymm7,ymm9
- vpxor ymm7,ymm7,ymm10
- vpaddd ymm9,ymm7,ymm11
- vmovdqu YMMWORD PTR[224+rsp],ymm9
- lea r13,QWORD PTR[128+rsp]
- jmp $L$oop_avx2
-ALIGN 32
-$L$oop_avx2::
- rorx ebx,ebp,2
- andn edi,ebp,edx
- and ebp,ecx
- xor ebp,edi
- jmp $L$align32_1
-ALIGN 32
-$L$align32_1::
- vpalignr ymm8,ymm7,ymm6,8
- vpxor ymm0,ymm0,ymm4
- add esi,DWORD PTR[((-128))+r13]
- andn edi,eax,ecx
- vpxor ymm0,ymm0,ymm1
- add esi,ebp
- rorx r12d,eax,27
- rorx ebp,eax,2
- vpxor ymm0,ymm0,ymm8
- and eax,ebx
- add esi,r12d
- xor eax,edi
- vpsrld ymm8,ymm0,30
- vpslld ymm0,ymm0,2
- add edx,DWORD PTR[((-124))+r13]
- andn edi,esi,ebx
- add edx,eax
- rorx r12d,esi,27
- rorx eax,esi,2
- and esi,ebp
- vpor ymm0,ymm0,ymm8
- add edx,r12d
- xor esi,edi
- add ecx,DWORD PTR[((-120))+r13]
- andn edi,edx,ebp
- vpaddd ymm9,ymm0,ymm11
- add ecx,esi
- rorx r12d,edx,27
- rorx esi,edx,2
- and edx,eax
- vmovdqu YMMWORD PTR[256+rsp],ymm9
- add ecx,r12d
- xor edx,edi
- add ebx,DWORD PTR[((-116))+r13]
- andn edi,ecx,eax
- add ebx,edx
- rorx r12d,ecx,27
- rorx edx,ecx,2
- and ecx,esi
- add ebx,r12d
- xor ecx,edi
- add ebp,DWORD PTR[((-96))+r13]
- andn edi,ebx,esi
- add ebp,ecx
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- and ebx,edx
- add ebp,r12d
- xor ebx,edi
- vpalignr ymm8,ymm0,ymm7,8
- vpxor ymm1,ymm1,ymm5
- add eax,DWORD PTR[((-92))+r13]
- andn edi,ebp,edx
- vpxor ymm1,ymm1,ymm2
- add eax,ebx
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- vpxor ymm1,ymm1,ymm8
- and ebp,ecx
- add eax,r12d
- xor ebp,edi
- vpsrld ymm8,ymm1,30
- vpslld ymm1,ymm1,2
- add esi,DWORD PTR[((-88))+r13]
- andn edi,eax,ecx
- add esi,ebp
- rorx r12d,eax,27
- rorx ebp,eax,2
- and eax,ebx
- vpor ymm1,ymm1,ymm8
- add esi,r12d
- xor eax,edi
- add edx,DWORD PTR[((-84))+r13]
- andn edi,esi,ebx
- vpaddd ymm9,ymm1,ymm11
- add edx,eax
- rorx r12d,esi,27
- rorx eax,esi,2
- and esi,ebp
- vmovdqu YMMWORD PTR[288+rsp],ymm9
- add edx,r12d
- xor esi,edi
- add ecx,DWORD PTR[((-64))+r13]
- andn edi,edx,ebp
- add ecx,esi
- rorx r12d,edx,27
- rorx esi,edx,2
- and edx,eax
- add ecx,r12d
- xor edx,edi
- add ebx,DWORD PTR[((-60))+r13]
- andn edi,ecx,eax
- add ebx,edx
- rorx r12d,ecx,27
- rorx edx,ecx,2
- and ecx,esi
- add ebx,r12d
- xor ecx,edi
- vpalignr ymm8,ymm1,ymm0,8
- vpxor ymm2,ymm2,ymm6
- add ebp,DWORD PTR[((-56))+r13]
- andn edi,ebx,esi
- vpxor ymm2,ymm2,ymm3
- vmovdqu ymm11,YMMWORD PTR[r14]
- add ebp,ecx
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- vpxor ymm2,ymm2,ymm8
- and ebx,edx
- add ebp,r12d
- xor ebx,edi
- vpsrld ymm8,ymm2,30
- vpslld ymm2,ymm2,2
- add eax,DWORD PTR[((-52))+r13]
- andn edi,ebp,edx
- add eax,ebx
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- and ebp,ecx
- vpor ymm2,ymm2,ymm8
- add eax,r12d
- xor ebp,edi
- add esi,DWORD PTR[((-32))+r13]
- andn edi,eax,ecx
- vpaddd ymm9,ymm2,ymm11
- add esi,ebp
- rorx r12d,eax,27
- rorx ebp,eax,2
- and eax,ebx
- vmovdqu YMMWORD PTR[320+rsp],ymm9
- add esi,r12d
- xor eax,edi
- add edx,DWORD PTR[((-28))+r13]
- andn edi,esi,ebx
- add edx,eax
- rorx r12d,esi,27
- rorx eax,esi,2
- and esi,ebp
- add edx,r12d
- xor esi,edi
- add ecx,DWORD PTR[((-24))+r13]
- andn edi,edx,ebp
- add ecx,esi
- rorx r12d,edx,27
- rorx esi,edx,2
- and edx,eax
- add ecx,r12d
- xor edx,edi
- vpalignr ymm8,ymm2,ymm1,8
- vpxor ymm3,ymm3,ymm7
- add ebx,DWORD PTR[((-20))+r13]
- andn edi,ecx,eax
- vpxor ymm3,ymm3,ymm4
- add ebx,edx
- rorx r12d,ecx,27
- rorx edx,ecx,2
- vpxor ymm3,ymm3,ymm8
- and ecx,esi
- add ebx,r12d
- xor ecx,edi
- vpsrld ymm8,ymm3,30
- vpslld ymm3,ymm3,2
- add ebp,DWORD PTR[r13]
- andn edi,ebx,esi
- add ebp,ecx
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- and ebx,edx
- vpor ymm3,ymm3,ymm8
- add ebp,r12d
- xor ebx,edi
- add eax,DWORD PTR[4+r13]
- andn edi,ebp,edx
- vpaddd ymm9,ymm3,ymm11
- add eax,ebx
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- and ebp,ecx
- vmovdqu YMMWORD PTR[352+rsp],ymm9
- add eax,r12d
- xor ebp,edi
- add esi,DWORD PTR[8+r13]
- andn edi,eax,ecx
- add esi,ebp
- rorx r12d,eax,27
- rorx ebp,eax,2
- and eax,ebx
- add esi,r12d
- xor eax,edi
- add edx,DWORD PTR[12+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- vpalignr ymm8,ymm3,ymm2,8
- vpxor ymm4,ymm4,ymm0
- add ecx,DWORD PTR[32+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- vpxor ymm4,ymm4,ymm5
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- vpxor ymm4,ymm4,ymm8
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[36+r13]
- vpsrld ymm8,ymm4,30
- vpslld ymm4,ymm4,2
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- vpor ymm4,ymm4,ymm8
- add ebp,DWORD PTR[40+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- vpaddd ymm9,ymm4,ymm11
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- add eax,DWORD PTR[44+r13]
- vmovdqu YMMWORD PTR[384+rsp],ymm9
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- add esi,DWORD PTR[64+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- vpalignr ymm8,ymm4,ymm3,8
- vpxor ymm5,ymm5,ymm1
- add edx,DWORD PTR[68+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- vpxor ymm5,ymm5,ymm6
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- vpxor ymm5,ymm5,ymm8
- add edx,r12d
- xor esi,ebx
- add ecx,DWORD PTR[72+r13]
- vpsrld ymm8,ymm5,30
- vpslld ymm5,ymm5,2
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- vpor ymm5,ymm5,ymm8
- add ebx,DWORD PTR[76+r13]
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- vpaddd ymm9,ymm5,ymm11
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- add ebp,DWORD PTR[96+r13]
- vmovdqu YMMWORD PTR[416+rsp],ymm9
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- add eax,DWORD PTR[100+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- vpalignr ymm8,ymm5,ymm4,8
- vpxor ymm6,ymm6,ymm2
- add esi,DWORD PTR[104+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- vpxor ymm6,ymm6,ymm7
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- vpxor ymm6,ymm6,ymm8
- add esi,r12d
- xor eax,ecx
- add edx,DWORD PTR[108+r13]
- lea r13,QWORD PTR[256+r13]
- vpsrld ymm8,ymm6,30
- vpslld ymm6,ymm6,2
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- vpor ymm6,ymm6,ymm8
- add ecx,DWORD PTR[((-128))+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- vpaddd ymm9,ymm6,ymm11
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[((-124))+r13]
- vmovdqu YMMWORD PTR[448+rsp],ymm9
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- add ebp,DWORD PTR[((-120))+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- vpalignr ymm8,ymm6,ymm5,8
- vpxor ymm7,ymm7,ymm3
- add eax,DWORD PTR[((-116))+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- vpxor ymm7,ymm7,ymm0
- vmovdqu ymm11,YMMWORD PTR[32+r14]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- vpxor ymm7,ymm7,ymm8
- add eax,r12d
- xor ebp,edx
- add esi,DWORD PTR[((-96))+r13]
- vpsrld ymm8,ymm7,30
- vpslld ymm7,ymm7,2
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- vpor ymm7,ymm7,ymm8
- add edx,DWORD PTR[((-92))+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- vpaddd ymm9,ymm7,ymm11
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- add ecx,DWORD PTR[((-88))+r13]
- vmovdqu YMMWORD PTR[480+rsp],ymm9
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[((-84))+r13]
- mov edi,esi
- xor edi,eax
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- and ecx,edi
- jmp $L$align32_2
-ALIGN 32
-$L$align32_2::
- vpalignr ymm8,ymm7,ymm6,8
- vpxor ymm0,ymm0,ymm4
- add ebp,DWORD PTR[((-64))+r13]
- xor ecx,esi
- vpxor ymm0,ymm0,ymm1
- mov edi,edx
- xor edi,esi
- lea ebp,DWORD PTR[rbp*1+rcx]
- vpxor ymm0,ymm0,ymm8
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- vpsrld ymm8,ymm0,30
- vpslld ymm0,ymm0,2
- add ebp,r12d
- and ebx,edi
- add eax,DWORD PTR[((-60))+r13]
- xor ebx,edx
- mov edi,ecx
- xor edi,edx
- vpor ymm0,ymm0,ymm8
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- vpaddd ymm9,ymm0,ymm11
- add eax,r12d
- and ebp,edi
- add esi,DWORD PTR[((-56))+r13]
- xor ebp,ecx
- vmovdqu YMMWORD PTR[512+rsp],ymm9
- mov edi,ebx
- xor edi,ecx
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- and eax,edi
- add edx,DWORD PTR[((-52))+r13]
- xor eax,ebx
- mov edi,ebp
- xor edi,ebx
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- and esi,edi
- add ecx,DWORD PTR[((-32))+r13]
- xor esi,ebp
- mov edi,eax
- xor edi,ebp
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- and edx,edi
- vpalignr ymm8,ymm0,ymm7,8
- vpxor ymm1,ymm1,ymm5
- add ebx,DWORD PTR[((-28))+r13]
- xor edx,eax
- vpxor ymm1,ymm1,ymm2
- mov edi,esi
- xor edi,eax
- lea ebx,DWORD PTR[rdx*1+rbx]
- vpxor ymm1,ymm1,ymm8
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- vpsrld ymm8,ymm1,30
- vpslld ymm1,ymm1,2
- add ebx,r12d
- and ecx,edi
- add ebp,DWORD PTR[((-24))+r13]
- xor ecx,esi
- mov edi,edx
- xor edi,esi
- vpor ymm1,ymm1,ymm8
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- vpaddd ymm9,ymm1,ymm11
- add ebp,r12d
- and ebx,edi
- add eax,DWORD PTR[((-20))+r13]
- xor ebx,edx
- vmovdqu YMMWORD PTR[544+rsp],ymm9
- mov edi,ecx
- xor edi,edx
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- and ebp,edi
- add esi,DWORD PTR[r13]
- xor ebp,ecx
- mov edi,ebx
- xor edi,ecx
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- and eax,edi
- add edx,DWORD PTR[4+r13]
- xor eax,ebx
- mov edi,ebp
- xor edi,ebx
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- and esi,edi
- vpalignr ymm8,ymm1,ymm0,8
- vpxor ymm2,ymm2,ymm6
- add ecx,DWORD PTR[8+r13]
- xor esi,ebp
- vpxor ymm2,ymm2,ymm3
- mov edi,eax
- xor edi,ebp
- lea ecx,DWORD PTR[rsi*1+rcx]
- vpxor ymm2,ymm2,ymm8
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- vpsrld ymm8,ymm2,30
- vpslld ymm2,ymm2,2
- add ecx,r12d
- and edx,edi
- add ebx,DWORD PTR[12+r13]
- xor edx,eax
- mov edi,esi
- xor edi,eax
- vpor ymm2,ymm2,ymm8
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- vpaddd ymm9,ymm2,ymm11
- add ebx,r12d
- and ecx,edi
- add ebp,DWORD PTR[32+r13]
- xor ecx,esi
- vmovdqu YMMWORD PTR[576+rsp],ymm9
- mov edi,edx
- xor edi,esi
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- and ebx,edi
- add eax,DWORD PTR[36+r13]
- xor ebx,edx
- mov edi,ecx
- xor edi,edx
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- and ebp,edi
- add esi,DWORD PTR[40+r13]
- xor ebp,ecx
- mov edi,ebx
- xor edi,ecx
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- and eax,edi
- vpalignr ymm8,ymm2,ymm1,8
- vpxor ymm3,ymm3,ymm7
- add edx,DWORD PTR[44+r13]
- xor eax,ebx
- vpxor ymm3,ymm3,ymm4
- mov edi,ebp
- xor edi,ebx
- lea edx,DWORD PTR[rax*1+rdx]
- vpxor ymm3,ymm3,ymm8
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- vpsrld ymm8,ymm3,30
- vpslld ymm3,ymm3,2
- add edx,r12d
- and esi,edi
- add ecx,DWORD PTR[64+r13]
- xor esi,ebp
- mov edi,eax
- xor edi,ebp
- vpor ymm3,ymm3,ymm8
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- vpaddd ymm9,ymm3,ymm11
- add ecx,r12d
- and edx,edi
- add ebx,DWORD PTR[68+r13]
- xor edx,eax
- vmovdqu YMMWORD PTR[608+rsp],ymm9
- mov edi,esi
- xor edi,eax
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- and ecx,edi
- add ebp,DWORD PTR[72+r13]
- xor ecx,esi
- mov edi,edx
- xor edi,esi
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- and ebx,edi
- add eax,DWORD PTR[76+r13]
- xor ebx,edx
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- add esi,DWORD PTR[96+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- add edx,DWORD PTR[100+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- add ecx,DWORD PTR[104+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[108+r13]
- lea r13,QWORD PTR[256+r13]
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- add ebp,DWORD PTR[((-128))+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- add eax,DWORD PTR[((-124))+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- add esi,DWORD PTR[((-120))+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- add edx,DWORD PTR[((-116))+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- add ecx,DWORD PTR[((-96))+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[((-92))+r13]
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- add ebp,DWORD PTR[((-88))+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- add eax,DWORD PTR[((-84))+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- add esi,DWORD PTR[((-64))+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- add edx,DWORD PTR[((-60))+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- add ecx,DWORD PTR[((-56))+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[((-52))+r13]
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- add ebp,DWORD PTR[((-32))+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- add eax,DWORD PTR[((-28))+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- add esi,DWORD PTR[((-24))+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- add edx,DWORD PTR[((-20))+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- add edx,r12d
- lea r13,QWORD PTR[128+r9]
- lea rdi,QWORD PTR[128+r9]
- cmp r13,r10
- cmovae r13,r9
-
-
- add edx,DWORD PTR[r8]
- add esi,DWORD PTR[4+r8]
- add ebp,DWORD PTR[8+r8]
- mov DWORD PTR[r8],edx
- add ebx,DWORD PTR[12+r8]
- mov DWORD PTR[4+r8],esi
- mov eax,edx
- add ecx,DWORD PTR[16+r8]
- mov r12d,ebp
- mov DWORD PTR[8+r8],ebp
- mov edx,ebx
-
- mov DWORD PTR[12+r8],ebx
- mov ebp,esi
- mov DWORD PTR[16+r8],ecx
-
- mov esi,ecx
- mov ecx,r12d
-
-
- cmp r9,r10
- je $L$done_avx2
- vmovdqu ymm6,YMMWORD PTR[64+r14]
- cmp rdi,r10
- ja $L$ast_avx2
-
- vmovdqu xmm0,XMMWORD PTR[((-64))+rdi]
- vmovdqu xmm1,XMMWORD PTR[((-48))+rdi]
- vmovdqu xmm2,XMMWORD PTR[((-32))+rdi]
- vmovdqu xmm3,XMMWORD PTR[((-16))+rdi]
- vinserti128 ymm0,ymm0,XMMWORD PTR[r13],1
- vinserti128 ymm1,ymm1,XMMWORD PTR[16+r13],1
- vinserti128 ymm2,ymm2,XMMWORD PTR[32+r13],1
- vinserti128 ymm3,ymm3,XMMWORD PTR[48+r13],1
- jmp $L$ast_avx2
-
-ALIGN 32
-$L$ast_avx2::
- lea r13,QWORD PTR[((128+16))+rsp]
- rorx ebx,ebp,2
- andn edi,ebp,edx
- and ebp,ecx
- xor ebp,edi
- sub r9,-128
- add esi,DWORD PTR[((-128))+r13]
- andn edi,eax,ecx
- add esi,ebp
- rorx r12d,eax,27
- rorx ebp,eax,2
- and eax,ebx
- add esi,r12d
- xor eax,edi
- add edx,DWORD PTR[((-124))+r13]
- andn edi,esi,ebx
- add edx,eax
- rorx r12d,esi,27
- rorx eax,esi,2
- and esi,ebp
- add edx,r12d
- xor esi,edi
- add ecx,DWORD PTR[((-120))+r13]
- andn edi,edx,ebp
- add ecx,esi
- rorx r12d,edx,27
- rorx esi,edx,2
- and edx,eax
- add ecx,r12d
- xor edx,edi
- add ebx,DWORD PTR[((-116))+r13]
- andn edi,ecx,eax
- add ebx,edx
- rorx r12d,ecx,27
- rorx edx,ecx,2
- and ecx,esi
- add ebx,r12d
- xor ecx,edi
- add ebp,DWORD PTR[((-96))+r13]
- andn edi,ebx,esi
- add ebp,ecx
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- and ebx,edx
- add ebp,r12d
- xor ebx,edi
- add eax,DWORD PTR[((-92))+r13]
- andn edi,ebp,edx
- add eax,ebx
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- and ebp,ecx
- add eax,r12d
- xor ebp,edi
- add esi,DWORD PTR[((-88))+r13]
- andn edi,eax,ecx
- add esi,ebp
- rorx r12d,eax,27
- rorx ebp,eax,2
- and eax,ebx
- add esi,r12d
- xor eax,edi
- add edx,DWORD PTR[((-84))+r13]
- andn edi,esi,ebx
- add edx,eax
- rorx r12d,esi,27
- rorx eax,esi,2
- and esi,ebp
- add edx,r12d
- xor esi,edi
- add ecx,DWORD PTR[((-64))+r13]
- andn edi,edx,ebp
- add ecx,esi
- rorx r12d,edx,27
- rorx esi,edx,2
- and edx,eax
- add ecx,r12d
- xor edx,edi
- add ebx,DWORD PTR[((-60))+r13]
- andn edi,ecx,eax
- add ebx,edx
- rorx r12d,ecx,27
- rorx edx,ecx,2
- and ecx,esi
- add ebx,r12d
- xor ecx,edi
- add ebp,DWORD PTR[((-56))+r13]
- andn edi,ebx,esi
- add ebp,ecx
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- and ebx,edx
- add ebp,r12d
- xor ebx,edi
- add eax,DWORD PTR[((-52))+r13]
- andn edi,ebp,edx
- add eax,ebx
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- and ebp,ecx
- add eax,r12d
- xor ebp,edi
- add esi,DWORD PTR[((-32))+r13]
- andn edi,eax,ecx
- add esi,ebp
- rorx r12d,eax,27
- rorx ebp,eax,2
- and eax,ebx
- add esi,r12d
- xor eax,edi
- add edx,DWORD PTR[((-28))+r13]
- andn edi,esi,ebx
- add edx,eax
- rorx r12d,esi,27
- rorx eax,esi,2
- and esi,ebp
- add edx,r12d
- xor esi,edi
- add ecx,DWORD PTR[((-24))+r13]
- andn edi,edx,ebp
- add ecx,esi
- rorx r12d,edx,27
- rorx esi,edx,2
- and edx,eax
- add ecx,r12d
- xor edx,edi
- add ebx,DWORD PTR[((-20))+r13]
- andn edi,ecx,eax
- add ebx,edx
- rorx r12d,ecx,27
- rorx edx,ecx,2
- and ecx,esi
- add ebx,r12d
- xor ecx,edi
- add ebp,DWORD PTR[r13]
- andn edi,ebx,esi
- add ebp,ecx
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- and ebx,edx
- add ebp,r12d
- xor ebx,edi
- add eax,DWORD PTR[4+r13]
- andn edi,ebp,edx
- add eax,ebx
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- and ebp,ecx
- add eax,r12d
- xor ebp,edi
- add esi,DWORD PTR[8+r13]
- andn edi,eax,ecx
- add esi,ebp
- rorx r12d,eax,27
- rorx ebp,eax,2
- and eax,ebx
- add esi,r12d
- xor eax,edi
- add edx,DWORD PTR[12+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- add ecx,DWORD PTR[32+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[36+r13]
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- add ebp,DWORD PTR[40+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- add eax,DWORD PTR[44+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- add esi,DWORD PTR[64+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- vmovdqu ymm11,YMMWORD PTR[((-64))+r14]
- vpshufb ymm0,ymm0,ymm6
- add edx,DWORD PTR[68+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- add ecx,DWORD PTR[72+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[76+r13]
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- add ebp,DWORD PTR[96+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- add eax,DWORD PTR[100+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- vpshufb ymm1,ymm1,ymm6
- vpaddd ymm8,ymm0,ymm11
- add esi,DWORD PTR[104+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- add edx,DWORD PTR[108+r13]
- lea r13,QWORD PTR[256+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- add ecx,DWORD PTR[((-128))+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[((-124))+r13]
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- add ebp,DWORD PTR[((-120))+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- vmovdqu YMMWORD PTR[rsp],ymm8
- vpshufb ymm2,ymm2,ymm6
- vpaddd ymm9,ymm1,ymm11
- add eax,DWORD PTR[((-116))+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- add esi,DWORD PTR[((-96))+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- add edx,DWORD PTR[((-92))+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- add ecx,DWORD PTR[((-88))+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[((-84))+r13]
- mov edi,esi
- xor edi,eax
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- and ecx,edi
- vmovdqu YMMWORD PTR[32+rsp],ymm9
- vpshufb ymm3,ymm3,ymm6
- vpaddd ymm6,ymm2,ymm11
- add ebp,DWORD PTR[((-64))+r13]
- xor ecx,esi
- mov edi,edx
- xor edi,esi
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- and ebx,edi
- add eax,DWORD PTR[((-60))+r13]
- xor ebx,edx
- mov edi,ecx
- xor edi,edx
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- and ebp,edi
- add esi,DWORD PTR[((-56))+r13]
- xor ebp,ecx
- mov edi,ebx
- xor edi,ecx
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- and eax,edi
- add edx,DWORD PTR[((-52))+r13]
- xor eax,ebx
- mov edi,ebp
- xor edi,ebx
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- and esi,edi
- add ecx,DWORD PTR[((-32))+r13]
- xor esi,ebp
- mov edi,eax
- xor edi,ebp
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- and edx,edi
- jmp $L$align32_3
-ALIGN 32
-$L$align32_3::
- vmovdqu YMMWORD PTR[64+rsp],ymm6
- vpaddd ymm7,ymm3,ymm11
- add ebx,DWORD PTR[((-28))+r13]
- xor edx,eax
- mov edi,esi
- xor edi,eax
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- and ecx,edi
- add ebp,DWORD PTR[((-24))+r13]
- xor ecx,esi
- mov edi,edx
- xor edi,esi
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- and ebx,edi
- add eax,DWORD PTR[((-20))+r13]
- xor ebx,edx
- mov edi,ecx
- xor edi,edx
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- and ebp,edi
- add esi,DWORD PTR[r13]
- xor ebp,ecx
- mov edi,ebx
- xor edi,ecx
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- and eax,edi
- add edx,DWORD PTR[4+r13]
- xor eax,ebx
- mov edi,ebp
- xor edi,ebx
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- and esi,edi
- vmovdqu YMMWORD PTR[96+rsp],ymm7
- add ecx,DWORD PTR[8+r13]
- xor esi,ebp
- mov edi,eax
- xor edi,ebp
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- and edx,edi
- add ebx,DWORD PTR[12+r13]
- xor edx,eax
- mov edi,esi
- xor edi,eax
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- and ecx,edi
- add ebp,DWORD PTR[32+r13]
- xor ecx,esi
- mov edi,edx
- xor edi,esi
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- and ebx,edi
- add eax,DWORD PTR[36+r13]
- xor ebx,edx
- mov edi,ecx
- xor edi,edx
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- and ebp,edi
- add esi,DWORD PTR[40+r13]
- xor ebp,ecx
- mov edi,ebx
- xor edi,ecx
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- and eax,edi
- vpalignr ymm4,ymm1,ymm0,8
- add edx,DWORD PTR[44+r13]
- xor eax,ebx
- mov edi,ebp
- xor edi,ebx
- vpsrldq ymm8,ymm3,4
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- vpxor ymm4,ymm4,ymm0
- vpxor ymm8,ymm8,ymm2
- xor esi,ebp
- add edx,r12d
- vpxor ymm4,ymm4,ymm8
- and esi,edi
- add ecx,DWORD PTR[64+r13]
- xor esi,ebp
- mov edi,eax
- vpsrld ymm8,ymm4,31
- xor edi,ebp
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- vpslldq ymm10,ymm4,12
- vpaddd ymm4,ymm4,ymm4
- rorx esi,edx,2
- xor edx,eax
- vpsrld ymm9,ymm10,30
- vpor ymm4,ymm4,ymm8
- add ecx,r12d
- and edx,edi
- vpslld ymm10,ymm10,2
- vpxor ymm4,ymm4,ymm9
- add ebx,DWORD PTR[68+r13]
- xor edx,eax
- vpxor ymm4,ymm4,ymm10
- mov edi,esi
- xor edi,eax
- lea ebx,DWORD PTR[rdx*1+rbx]
- vpaddd ymm9,ymm4,ymm11
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- vmovdqu YMMWORD PTR[128+rsp],ymm9
- add ebx,r12d
- and ecx,edi
- add ebp,DWORD PTR[72+r13]
- xor ecx,esi
- mov edi,edx
- xor edi,esi
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- and ebx,edi
- add eax,DWORD PTR[76+r13]
- xor ebx,edx
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- vpalignr ymm5,ymm2,ymm1,8
- add esi,DWORD PTR[96+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- vpsrldq ymm8,ymm4,4
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- vpxor ymm5,ymm5,ymm1
- vpxor ymm8,ymm8,ymm3
- add edx,DWORD PTR[100+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- vpxor ymm5,ymm5,ymm8
- rorx r12d,esi,27
- rorx eax,esi,2
- xor esi,ebp
- add edx,r12d
- vpsrld ymm8,ymm5,31
- vmovdqu ymm11,YMMWORD PTR[((-32))+r14]
- xor esi,ebx
- add ecx,DWORD PTR[104+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- vpslldq ymm10,ymm5,12
- vpaddd ymm5,ymm5,ymm5
- rorx r12d,edx,27
- rorx esi,edx,2
- vpsrld ymm9,ymm10,30
- vpor ymm5,ymm5,ymm8
- xor edx,eax
- add ecx,r12d
- vpslld ymm10,ymm10,2
- vpxor ymm5,ymm5,ymm9
- xor edx,ebp
- add ebx,DWORD PTR[108+r13]
- lea r13,QWORD PTR[256+r13]
- vpxor ymm5,ymm5,ymm10
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- vpaddd ymm9,ymm5,ymm11
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- vmovdqu YMMWORD PTR[160+rsp],ymm9
- add ebp,DWORD PTR[((-128))+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- vpalignr ymm6,ymm3,ymm2,8
- add eax,DWORD PTR[((-124))+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- vpsrldq ymm8,ymm5,4
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- vpxor ymm6,ymm6,ymm2
- vpxor ymm8,ymm8,ymm4
- add esi,DWORD PTR[((-120))+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- vpxor ymm6,ymm6,ymm8
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- vpsrld ymm8,ymm6,31
- xor eax,ecx
- add edx,DWORD PTR[((-116))+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- vpslldq ymm10,ymm6,12
- vpaddd ymm6,ymm6,ymm6
- rorx r12d,esi,27
- rorx eax,esi,2
- vpsrld ymm9,ymm10,30
- vpor ymm6,ymm6,ymm8
- xor esi,ebp
- add edx,r12d
- vpslld ymm10,ymm10,2
- vpxor ymm6,ymm6,ymm9
- xor esi,ebx
- add ecx,DWORD PTR[((-96))+r13]
- vpxor ymm6,ymm6,ymm10
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- vpaddd ymm9,ymm6,ymm11
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- vmovdqu YMMWORD PTR[192+rsp],ymm9
- add ebx,DWORD PTR[((-92))+r13]
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- vpalignr ymm7,ymm4,ymm3,8
- add ebp,DWORD PTR[((-88))+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- vpsrldq ymm8,ymm6,4
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- vpxor ymm7,ymm7,ymm3
- vpxor ymm8,ymm8,ymm5
- add eax,DWORD PTR[((-84))+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- vpxor ymm7,ymm7,ymm8
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- vpsrld ymm8,ymm7,31
- xor ebp,edx
- add esi,DWORD PTR[((-64))+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- vpslldq ymm10,ymm7,12
- vpaddd ymm7,ymm7,ymm7
- rorx r12d,eax,27
- rorx ebp,eax,2
- vpsrld ymm9,ymm10,30
- vpor ymm7,ymm7,ymm8
- xor eax,ebx
- add esi,r12d
- vpslld ymm10,ymm10,2
- vpxor ymm7,ymm7,ymm9
- xor eax,ecx
- add edx,DWORD PTR[((-60))+r13]
- vpxor ymm7,ymm7,ymm10
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- rorx eax,esi,2
- vpaddd ymm9,ymm7,ymm11
- xor esi,ebp
- add edx,r12d
- xor esi,ebx
- vmovdqu YMMWORD PTR[224+rsp],ymm9
- add ecx,DWORD PTR[((-56))+r13]
- lea ecx,DWORD PTR[rsi*1+rcx]
- rorx r12d,edx,27
- rorx esi,edx,2
- xor edx,eax
- add ecx,r12d
- xor edx,ebp
- add ebx,DWORD PTR[((-52))+r13]
- lea ebx,DWORD PTR[rdx*1+rbx]
- rorx r12d,ecx,27
- rorx edx,ecx,2
- xor ecx,esi
- add ebx,r12d
- xor ecx,eax
- add ebp,DWORD PTR[((-32))+r13]
- lea ebp,DWORD PTR[rbp*1+rcx]
- rorx r12d,ebx,27
- rorx ecx,ebx,2
- xor ebx,edx
- add ebp,r12d
- xor ebx,esi
- add eax,DWORD PTR[((-28))+r13]
- lea eax,DWORD PTR[rbx*1+rax]
- rorx r12d,ebp,27
- rorx ebx,ebp,2
- xor ebp,ecx
- add eax,r12d
- xor ebp,edx
- add esi,DWORD PTR[((-24))+r13]
- lea esi,DWORD PTR[rbp*1+rsi]
- rorx r12d,eax,27
- rorx ebp,eax,2
- xor eax,ebx
- add esi,r12d
- xor eax,ecx
- add edx,DWORD PTR[((-20))+r13]
- lea edx,DWORD PTR[rax*1+rdx]
- rorx r12d,esi,27
- add edx,r12d
- lea r13,QWORD PTR[128+rsp]
-
-
- add edx,DWORD PTR[r8]
- add esi,DWORD PTR[4+r8]
- add ebp,DWORD PTR[8+r8]
- mov DWORD PTR[r8],edx
- add ebx,DWORD PTR[12+r8]
- mov DWORD PTR[4+r8],esi
- mov eax,edx
- add ecx,DWORD PTR[16+r8]
- mov r12d,ebp
- mov DWORD PTR[8+r8],ebp
- mov edx,ebx
-
- mov DWORD PTR[12+r8],ebx
- mov ebp,esi
- mov DWORD PTR[16+r8],ecx
-
- mov esi,ecx
- mov ecx,r12d
-
-
- cmp r9,r10
- jbe $L$oop_avx2
-
-$L$done_avx2::
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-40-96))+r11]
- movaps xmm7,XMMWORD PTR[((-40-80))+r11]
- movaps xmm8,XMMWORD PTR[((-40-64))+r11]
- movaps xmm9,XMMWORD PTR[((-40-48))+r11]
- movaps xmm10,XMMWORD PTR[((-40-32))+r11]
- movaps xmm11,XMMWORD PTR[((-40-16))+r11]
- mov r14,QWORD PTR[((-40))+r11]
-
- mov r13,QWORD PTR[((-32))+r11]
-
- mov r12,QWORD PTR[((-24))+r11]
-
- mov rbp,QWORD PTR[((-16))+r11]
-
- mov rbx,QWORD PTR[((-8))+r11]
-
- lea rsp,QWORD PTR[r11]
-
-$L$epilogue_avx2::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha1_block_data_order_avx2::
-sha1_block_data_order_avx2 ENDP
-ALIGN 64
-K_XX_XX::
- DD 05a827999h,05a827999h,05a827999h,05a827999h
- DD 05a827999h,05a827999h,05a827999h,05a827999h
- DD 06ed9eba1h,06ed9eba1h,06ed9eba1h,06ed9eba1h
- DD 06ed9eba1h,06ed9eba1h,06ed9eba1h,06ed9eba1h
- DD 08f1bbcdch,08f1bbcdch,08f1bbcdch,08f1bbcdch
- DD 08f1bbcdch,08f1bbcdch,08f1bbcdch,08f1bbcdch
- DD 0ca62c1d6h,0ca62c1d6h,0ca62c1d6h,0ca62c1d6h
- DD 0ca62c1d6h,0ca62c1d6h,0ca62c1d6h,0ca62c1d6h
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
-DB 0fh,0eh,0dh,0ch,0bh,0ah,09h,08h,07h,06h,05h,04h,03h,02h,01h,00h
-DB 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115
-DB 102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44
-DB 32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60
-DB 97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114
-DB 103,62,0
-ALIGN 64
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- lea r10,QWORD PTR[$L$prologue]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[152+r8]
-
- lea r10,QWORD PTR[$L$epilogue]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- mov rax,QWORD PTR[64+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
-
- jmp $L$common_seh_tail
-se_handler ENDP
-
-ALIGN 16
-shaext_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- lea r10,QWORD PTR[$L$prologue_shaext]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- lea r10,QWORD PTR[$L$epilogue_shaext]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- lea rsi,QWORD PTR[((-8-64))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,8
- DD 0a548f3fch
-
- jmp $L$common_seh_tail
-shaext_handler ENDP
-
-ALIGN 16
-ssse3_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$common_seh_tail
-
- mov rax,QWORD PTR[208+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$common_seh_tail
-
- lea rsi,QWORD PTR[((-40-96))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,12
- DD 0a548f3fch
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
-
-$L$common_seh_tail::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-ssse3_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_sha1_block_data_order
- DD imagerel $L$SEH_end_sha1_block_data_order
- DD imagerel $L$SEH_info_sha1_block_data_order
- DD imagerel $L$SEH_begin_sha1_block_data_order_shaext
- DD imagerel $L$SEH_end_sha1_block_data_order_shaext
- DD imagerel $L$SEH_info_sha1_block_data_order_shaext
- DD imagerel $L$SEH_begin_sha1_block_data_order_ssse3
- DD imagerel $L$SEH_end_sha1_block_data_order_ssse3
- DD imagerel $L$SEH_info_sha1_block_data_order_ssse3
- DD imagerel $L$SEH_begin_sha1_block_data_order_avx
- DD imagerel $L$SEH_end_sha1_block_data_order_avx
- DD imagerel $L$SEH_info_sha1_block_data_order_avx
- DD imagerel $L$SEH_begin_sha1_block_data_order_avx2
- DD imagerel $L$SEH_end_sha1_block_data_order_avx2
- DD imagerel $L$SEH_info_sha1_block_data_order_avx2
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_sha1_block_data_order::
-DB 9,0,0,0
- DD imagerel se_handler
-$L$SEH_info_sha1_block_data_order_shaext::
-DB 9,0,0,0
- DD imagerel shaext_handler
-$L$SEH_info_sha1_block_data_order_ssse3::
-DB 9,0,0,0
- DD imagerel ssse3_handler
- DD imagerel $L$prologue_ssse3,imagerel $L$epilogue_ssse3
-$L$SEH_info_sha1_block_data_order_avx::
-DB 9,0,0,0
- DD imagerel ssse3_handler
- DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
-$L$SEH_info_sha1_block_data_order_avx2::
-DB 9,0,0,0
- DD imagerel ssse3_handler
- DD imagerel $L$prologue_avx2,imagerel $L$epilogue_avx2
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC sha1_block_data_order
+
+ALIGN 16
+sha1_block_data_order PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha1_block_data_order::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ mov r9d,DWORD PTR[((OPENSSL_ia32cap_P+0))]
+ mov r8d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
+ mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+8))]
+ test r8d,512
+ jz $L$ialu
+ test r10d,536870912
+ jnz _shaext_shortcut
+ and r10d,296
+ cmp r10d,296
+ je _avx2_shortcut
+ and r8d,268435456
+ and r9d,1073741824
+ or r8d,r9d
+ cmp r8d,1342177280
+ je _avx_shortcut
+ jmp _ssse3_shortcut
+
+ALIGN 16
+$L$ialu::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ mov r8,rdi
+ sub rsp,72
+ mov r9,rsi
+ and rsp,-64
+ mov r10,rdx
+ mov QWORD PTR[64+rsp],rax
+
+$L$prologue::
+
+ mov esi,DWORD PTR[r8]
+ mov edi,DWORD PTR[4+r8]
+ mov r11d,DWORD PTR[8+r8]
+ mov r12d,DWORD PTR[12+r8]
+ mov r13d,DWORD PTR[16+r8]
+ jmp $L$loop
+
+ALIGN 16
+$L$loop::
+ mov edx,DWORD PTR[r9]
+ bswap edx
+ mov ebp,DWORD PTR[4+r9]
+ mov eax,r12d
+ mov DWORD PTR[rsp],edx
+ mov ecx,esi
+ bswap ebp
+ xor eax,r11d
+ rol ecx,5
+ and eax,edi
+ lea r13d,DWORD PTR[1518500249+r13*1+rdx]
+ add r13d,ecx
+ xor eax,r12d
+ rol edi,30
+ add r13d,eax
+ mov r14d,DWORD PTR[8+r9]
+ mov eax,r11d
+ mov DWORD PTR[4+rsp],ebp
+ mov ecx,r13d
+ bswap r14d
+ xor eax,edi
+ rol ecx,5
+ and eax,esi
+ lea r12d,DWORD PTR[1518500249+r12*1+rbp]
+ add r12d,ecx
+ xor eax,r11d
+ rol esi,30
+ add r12d,eax
+ mov edx,DWORD PTR[12+r9]
+ mov eax,edi
+ mov DWORD PTR[8+rsp],r14d
+ mov ecx,r12d
+ bswap edx
+ xor eax,esi
+ rol ecx,5
+ and eax,r13d
+ lea r11d,DWORD PTR[1518500249+r11*1+r14]
+ add r11d,ecx
+ xor eax,edi
+ rol r13d,30
+ add r11d,eax
+ mov ebp,DWORD PTR[16+r9]
+ mov eax,esi
+ mov DWORD PTR[12+rsp],edx
+ mov ecx,r11d
+ bswap ebp
+ xor eax,r13d
+ rol ecx,5
+ and eax,r12d
+ lea edi,DWORD PTR[1518500249+rdi*1+rdx]
+ add edi,ecx
+ xor eax,esi
+ rol r12d,30
+ add edi,eax
+ mov r14d,DWORD PTR[20+r9]
+ mov eax,r13d
+ mov DWORD PTR[16+rsp],ebp
+ mov ecx,edi
+ bswap r14d
+ xor eax,r12d
+ rol ecx,5
+ and eax,r11d
+ lea esi,DWORD PTR[1518500249+rsi*1+rbp]
+ add esi,ecx
+ xor eax,r13d
+ rol r11d,30
+ add esi,eax
+ mov edx,DWORD PTR[24+r9]
+ mov eax,r12d
+ mov DWORD PTR[20+rsp],r14d
+ mov ecx,esi
+ bswap edx
+ xor eax,r11d
+ rol ecx,5
+ and eax,edi
+ lea r13d,DWORD PTR[1518500249+r13*1+r14]
+ add r13d,ecx
+ xor eax,r12d
+ rol edi,30
+ add r13d,eax
+ mov ebp,DWORD PTR[28+r9]
+ mov eax,r11d
+ mov DWORD PTR[24+rsp],edx
+ mov ecx,r13d
+ bswap ebp
+ xor eax,edi
+ rol ecx,5
+ and eax,esi
+ lea r12d,DWORD PTR[1518500249+r12*1+rdx]
+ add r12d,ecx
+ xor eax,r11d
+ rol esi,30
+ add r12d,eax
+ mov r14d,DWORD PTR[32+r9]
+ mov eax,edi
+ mov DWORD PTR[28+rsp],ebp
+ mov ecx,r12d
+ bswap r14d
+ xor eax,esi
+ rol ecx,5
+ and eax,r13d
+ lea r11d,DWORD PTR[1518500249+r11*1+rbp]
+ add r11d,ecx
+ xor eax,edi
+ rol r13d,30
+ add r11d,eax
+ mov edx,DWORD PTR[36+r9]
+ mov eax,esi
+ mov DWORD PTR[32+rsp],r14d
+ mov ecx,r11d
+ bswap edx
+ xor eax,r13d
+ rol ecx,5
+ and eax,r12d
+ lea edi,DWORD PTR[1518500249+rdi*1+r14]
+ add edi,ecx
+ xor eax,esi
+ rol r12d,30
+ add edi,eax
+ mov ebp,DWORD PTR[40+r9]
+ mov eax,r13d
+ mov DWORD PTR[36+rsp],edx
+ mov ecx,edi
+ bswap ebp
+ xor eax,r12d
+ rol ecx,5
+ and eax,r11d
+ lea esi,DWORD PTR[1518500249+rsi*1+rdx]
+ add esi,ecx
+ xor eax,r13d
+ rol r11d,30
+ add esi,eax
+ mov r14d,DWORD PTR[44+r9]
+ mov eax,r12d
+ mov DWORD PTR[40+rsp],ebp
+ mov ecx,esi
+ bswap r14d
+ xor eax,r11d
+ rol ecx,5
+ and eax,edi
+ lea r13d,DWORD PTR[1518500249+r13*1+rbp]
+ add r13d,ecx
+ xor eax,r12d
+ rol edi,30
+ add r13d,eax
+ mov edx,DWORD PTR[48+r9]
+ mov eax,r11d
+ mov DWORD PTR[44+rsp],r14d
+ mov ecx,r13d
+ bswap edx
+ xor eax,edi
+ rol ecx,5
+ and eax,esi
+ lea r12d,DWORD PTR[1518500249+r12*1+r14]
+ add r12d,ecx
+ xor eax,r11d
+ rol esi,30
+ add r12d,eax
+ mov ebp,DWORD PTR[52+r9]
+ mov eax,edi
+ mov DWORD PTR[48+rsp],edx
+ mov ecx,r12d
+ bswap ebp
+ xor eax,esi
+ rol ecx,5
+ and eax,r13d
+ lea r11d,DWORD PTR[1518500249+r11*1+rdx]
+ add r11d,ecx
+ xor eax,edi
+ rol r13d,30
+ add r11d,eax
+ mov r14d,DWORD PTR[56+r9]
+ mov eax,esi
+ mov DWORD PTR[52+rsp],ebp
+ mov ecx,r11d
+ bswap r14d
+ xor eax,r13d
+ rol ecx,5
+ and eax,r12d
+ lea edi,DWORD PTR[1518500249+rdi*1+rbp]
+ add edi,ecx
+ xor eax,esi
+ rol r12d,30
+ add edi,eax
+ mov edx,DWORD PTR[60+r9]
+ mov eax,r13d
+ mov DWORD PTR[56+rsp],r14d
+ mov ecx,edi
+ bswap edx
+ xor eax,r12d
+ rol ecx,5
+ and eax,r11d
+ lea esi,DWORD PTR[1518500249+rsi*1+r14]
+ add esi,ecx
+ xor eax,r13d
+ rol r11d,30
+ add esi,eax
+ xor ebp,DWORD PTR[rsp]
+ mov eax,r12d
+ mov DWORD PTR[60+rsp],edx
+ mov ecx,esi
+ xor ebp,DWORD PTR[8+rsp]
+ xor eax,r11d
+ rol ecx,5
+ xor ebp,DWORD PTR[32+rsp]
+ and eax,edi
+ lea r13d,DWORD PTR[1518500249+r13*1+rdx]
+ rol edi,30
+ xor eax,r12d
+ add r13d,ecx
+ rol ebp,1
+ add r13d,eax
+ xor r14d,DWORD PTR[4+rsp]
+ mov eax,r11d
+ mov DWORD PTR[rsp],ebp
+ mov ecx,r13d
+ xor r14d,DWORD PTR[12+rsp]
+ xor eax,edi
+ rol ecx,5
+ xor r14d,DWORD PTR[36+rsp]
+ and eax,esi
+ lea r12d,DWORD PTR[1518500249+r12*1+rbp]
+ rol esi,30
+ xor eax,r11d
+ add r12d,ecx
+ rol r14d,1
+ add r12d,eax
+ xor edx,DWORD PTR[8+rsp]
+ mov eax,edi
+ mov DWORD PTR[4+rsp],r14d
+ mov ecx,r12d
+ xor edx,DWORD PTR[16+rsp]
+ xor eax,esi
+ rol ecx,5
+ xor edx,DWORD PTR[40+rsp]
+ and eax,r13d
+ lea r11d,DWORD PTR[1518500249+r11*1+r14]
+ rol r13d,30
+ xor eax,edi
+ add r11d,ecx
+ rol edx,1
+ add r11d,eax
+ xor ebp,DWORD PTR[12+rsp]
+ mov eax,esi
+ mov DWORD PTR[8+rsp],edx
+ mov ecx,r11d
+ xor ebp,DWORD PTR[20+rsp]
+ xor eax,r13d
+ rol ecx,5
+ xor ebp,DWORD PTR[44+rsp]
+ and eax,r12d
+ lea edi,DWORD PTR[1518500249+rdi*1+rdx]
+ rol r12d,30
+ xor eax,esi
+ add edi,ecx
+ rol ebp,1
+ add edi,eax
+ xor r14d,DWORD PTR[16+rsp]
+ mov eax,r13d
+ mov DWORD PTR[12+rsp],ebp
+ mov ecx,edi
+ xor r14d,DWORD PTR[24+rsp]
+ xor eax,r12d
+ rol ecx,5
+ xor r14d,DWORD PTR[48+rsp]
+ and eax,r11d
+ lea esi,DWORD PTR[1518500249+rsi*1+rbp]
+ rol r11d,30
+ xor eax,r13d
+ add esi,ecx
+ rol r14d,1
+ add esi,eax
+ xor edx,DWORD PTR[20+rsp]
+ mov eax,edi
+ mov DWORD PTR[16+rsp],r14d
+ mov ecx,esi
+ xor edx,DWORD PTR[28+rsp]
+ xor eax,r12d
+ rol ecx,5
+ xor edx,DWORD PTR[52+rsp]
+ lea r13d,DWORD PTR[1859775393+r13*1+r14]
+ xor eax,r11d
+ add r13d,ecx
+ rol edi,30
+ add r13d,eax
+ rol edx,1
+ xor ebp,DWORD PTR[24+rsp]
+ mov eax,esi
+ mov DWORD PTR[20+rsp],edx
+ mov ecx,r13d
+ xor ebp,DWORD PTR[32+rsp]
+ xor eax,r11d
+ rol ecx,5
+ xor ebp,DWORD PTR[56+rsp]
+ lea r12d,DWORD PTR[1859775393+r12*1+rdx]
+ xor eax,edi
+ add r12d,ecx
+ rol esi,30
+ add r12d,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[28+rsp]
+ mov eax,r13d
+ mov DWORD PTR[24+rsp],ebp
+ mov ecx,r12d
+ xor r14d,DWORD PTR[36+rsp]
+ xor eax,edi
+ rol ecx,5
+ xor r14d,DWORD PTR[60+rsp]
+ lea r11d,DWORD PTR[1859775393+r11*1+rbp]
+ xor eax,esi
+ add r11d,ecx
+ rol r13d,30
+ add r11d,eax
+ rol r14d,1
+ xor edx,DWORD PTR[32+rsp]
+ mov eax,r12d
+ mov DWORD PTR[28+rsp],r14d
+ mov ecx,r11d
+ xor edx,DWORD PTR[40+rsp]
+ xor eax,esi
+ rol ecx,5
+ xor edx,DWORD PTR[rsp]
+ lea edi,DWORD PTR[1859775393+rdi*1+r14]
+ xor eax,r13d
+ add edi,ecx
+ rol r12d,30
+ add edi,eax
+ rol edx,1
+ xor ebp,DWORD PTR[36+rsp]
+ mov eax,r11d
+ mov DWORD PTR[32+rsp],edx
+ mov ecx,edi
+ xor ebp,DWORD PTR[44+rsp]
+ xor eax,r13d
+ rol ecx,5
+ xor ebp,DWORD PTR[4+rsp]
+ lea esi,DWORD PTR[1859775393+rsi*1+rdx]
+ xor eax,r12d
+ add esi,ecx
+ rol r11d,30
+ add esi,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[40+rsp]
+ mov eax,edi
+ mov DWORD PTR[36+rsp],ebp
+ mov ecx,esi
+ xor r14d,DWORD PTR[48+rsp]
+ xor eax,r12d
+ rol ecx,5
+ xor r14d,DWORD PTR[8+rsp]
+ lea r13d,DWORD PTR[1859775393+r13*1+rbp]
+ xor eax,r11d
+ add r13d,ecx
+ rol edi,30
+ add r13d,eax
+ rol r14d,1
+ xor edx,DWORD PTR[44+rsp]
+ mov eax,esi
+ mov DWORD PTR[40+rsp],r14d
+ mov ecx,r13d
+ xor edx,DWORD PTR[52+rsp]
+ xor eax,r11d
+ rol ecx,5
+ xor edx,DWORD PTR[12+rsp]
+ lea r12d,DWORD PTR[1859775393+r12*1+r14]
+ xor eax,edi
+ add r12d,ecx
+ rol esi,30
+ add r12d,eax
+ rol edx,1
+ xor ebp,DWORD PTR[48+rsp]
+ mov eax,r13d
+ mov DWORD PTR[44+rsp],edx
+ mov ecx,r12d
+ xor ebp,DWORD PTR[56+rsp]
+ xor eax,edi
+ rol ecx,5
+ xor ebp,DWORD PTR[16+rsp]
+ lea r11d,DWORD PTR[1859775393+r11*1+rdx]
+ xor eax,esi
+ add r11d,ecx
+ rol r13d,30
+ add r11d,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[52+rsp]
+ mov eax,r12d
+ mov DWORD PTR[48+rsp],ebp
+ mov ecx,r11d
+ xor r14d,DWORD PTR[60+rsp]
+ xor eax,esi
+ rol ecx,5
+ xor r14d,DWORD PTR[20+rsp]
+ lea edi,DWORD PTR[1859775393+rdi*1+rbp]
+ xor eax,r13d
+ add edi,ecx
+ rol r12d,30
+ add edi,eax
+ rol r14d,1
+ xor edx,DWORD PTR[56+rsp]
+ mov eax,r11d
+ mov DWORD PTR[52+rsp],r14d
+ mov ecx,edi
+ xor edx,DWORD PTR[rsp]
+ xor eax,r13d
+ rol ecx,5
+ xor edx,DWORD PTR[24+rsp]
+ lea esi,DWORD PTR[1859775393+rsi*1+r14]
+ xor eax,r12d
+ add esi,ecx
+ rol r11d,30
+ add esi,eax
+ rol edx,1
+ xor ebp,DWORD PTR[60+rsp]
+ mov eax,edi
+ mov DWORD PTR[56+rsp],edx
+ mov ecx,esi
+ xor ebp,DWORD PTR[4+rsp]
+ xor eax,r12d
+ rol ecx,5
+ xor ebp,DWORD PTR[28+rsp]
+ lea r13d,DWORD PTR[1859775393+r13*1+rdx]
+ xor eax,r11d
+ add r13d,ecx
+ rol edi,30
+ add r13d,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[rsp]
+ mov eax,esi
+ mov DWORD PTR[60+rsp],ebp
+ mov ecx,r13d
+ xor r14d,DWORD PTR[8+rsp]
+ xor eax,r11d
+ rol ecx,5
+ xor r14d,DWORD PTR[32+rsp]
+ lea r12d,DWORD PTR[1859775393+r12*1+rbp]
+ xor eax,edi
+ add r12d,ecx
+ rol esi,30
+ add r12d,eax
+ rol r14d,1
+ xor edx,DWORD PTR[4+rsp]
+ mov eax,r13d
+ mov DWORD PTR[rsp],r14d
+ mov ecx,r12d
+ xor edx,DWORD PTR[12+rsp]
+ xor eax,edi
+ rol ecx,5
+ xor edx,DWORD PTR[36+rsp]
+ lea r11d,DWORD PTR[1859775393+r11*1+r14]
+ xor eax,esi
+ add r11d,ecx
+ rol r13d,30
+ add r11d,eax
+ rol edx,1
+ xor ebp,DWORD PTR[8+rsp]
+ mov eax,r12d
+ mov DWORD PTR[4+rsp],edx
+ mov ecx,r11d
+ xor ebp,DWORD PTR[16+rsp]
+ xor eax,esi
+ rol ecx,5
+ xor ebp,DWORD PTR[40+rsp]
+ lea edi,DWORD PTR[1859775393+rdi*1+rdx]
+ xor eax,r13d
+ add edi,ecx
+ rol r12d,30
+ add edi,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[12+rsp]
+ mov eax,r11d
+ mov DWORD PTR[8+rsp],ebp
+ mov ecx,edi
+ xor r14d,DWORD PTR[20+rsp]
+ xor eax,r13d
+ rol ecx,5
+ xor r14d,DWORD PTR[44+rsp]
+ lea esi,DWORD PTR[1859775393+rsi*1+rbp]
+ xor eax,r12d
+ add esi,ecx
+ rol r11d,30
+ add esi,eax
+ rol r14d,1
+ xor edx,DWORD PTR[16+rsp]
+ mov eax,edi
+ mov DWORD PTR[12+rsp],r14d
+ mov ecx,esi
+ xor edx,DWORD PTR[24+rsp]
+ xor eax,r12d
+ rol ecx,5
+ xor edx,DWORD PTR[48+rsp]
+ lea r13d,DWORD PTR[1859775393+r13*1+r14]
+ xor eax,r11d
+ add r13d,ecx
+ rol edi,30
+ add r13d,eax
+ rol edx,1
+ xor ebp,DWORD PTR[20+rsp]
+ mov eax,esi
+ mov DWORD PTR[16+rsp],edx
+ mov ecx,r13d
+ xor ebp,DWORD PTR[28+rsp]
+ xor eax,r11d
+ rol ecx,5
+ xor ebp,DWORD PTR[52+rsp]
+ lea r12d,DWORD PTR[1859775393+r12*1+rdx]
+ xor eax,edi
+ add r12d,ecx
+ rol esi,30
+ add r12d,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[24+rsp]
+ mov eax,r13d
+ mov DWORD PTR[20+rsp],ebp
+ mov ecx,r12d
+ xor r14d,DWORD PTR[32+rsp]
+ xor eax,edi
+ rol ecx,5
+ xor r14d,DWORD PTR[56+rsp]
+ lea r11d,DWORD PTR[1859775393+r11*1+rbp]
+ xor eax,esi
+ add r11d,ecx
+ rol r13d,30
+ add r11d,eax
+ rol r14d,1
+ xor edx,DWORD PTR[28+rsp]
+ mov eax,r12d
+ mov DWORD PTR[24+rsp],r14d
+ mov ecx,r11d
+ xor edx,DWORD PTR[36+rsp]
+ xor eax,esi
+ rol ecx,5
+ xor edx,DWORD PTR[60+rsp]
+ lea edi,DWORD PTR[1859775393+rdi*1+r14]
+ xor eax,r13d
+ add edi,ecx
+ rol r12d,30
+ add edi,eax
+ rol edx,1
+ xor ebp,DWORD PTR[32+rsp]
+ mov eax,r11d
+ mov DWORD PTR[28+rsp],edx
+ mov ecx,edi
+ xor ebp,DWORD PTR[40+rsp]
+ xor eax,r13d
+ rol ecx,5
+ xor ebp,DWORD PTR[rsp]
+ lea esi,DWORD PTR[1859775393+rsi*1+rdx]
+ xor eax,r12d
+ add esi,ecx
+ rol r11d,30
+ add esi,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[36+rsp]
+ mov eax,r12d
+ mov DWORD PTR[32+rsp],ebp
+ mov ebx,r12d
+ xor r14d,DWORD PTR[44+rsp]
+ and eax,r11d
+ mov ecx,esi
+ xor r14d,DWORD PTR[4+rsp]
+ lea r13d,DWORD PTR[((-1894007588))+r13*1+rbp]
+ xor ebx,r11d
+ rol ecx,5
+ add r13d,eax
+ rol r14d,1
+ and ebx,edi
+ add r13d,ecx
+ rol edi,30
+ add r13d,ebx
+ xor edx,DWORD PTR[40+rsp]
+ mov eax,r11d
+ mov DWORD PTR[36+rsp],r14d
+ mov ebx,r11d
+ xor edx,DWORD PTR[48+rsp]
+ and eax,edi
+ mov ecx,r13d
+ xor edx,DWORD PTR[8+rsp]
+ lea r12d,DWORD PTR[((-1894007588))+r12*1+r14]
+ xor ebx,edi
+ rol ecx,5
+ add r12d,eax
+ rol edx,1
+ and ebx,esi
+ add r12d,ecx
+ rol esi,30
+ add r12d,ebx
+ xor ebp,DWORD PTR[44+rsp]
+ mov eax,edi
+ mov DWORD PTR[40+rsp],edx
+ mov ebx,edi
+ xor ebp,DWORD PTR[52+rsp]
+ and eax,esi
+ mov ecx,r12d
+ xor ebp,DWORD PTR[12+rsp]
+ lea r11d,DWORD PTR[((-1894007588))+r11*1+rdx]
+ xor ebx,esi
+ rol ecx,5
+ add r11d,eax
+ rol ebp,1
+ and ebx,r13d
+ add r11d,ecx
+ rol r13d,30
+ add r11d,ebx
+ xor r14d,DWORD PTR[48+rsp]
+ mov eax,esi
+ mov DWORD PTR[44+rsp],ebp
+ mov ebx,esi
+ xor r14d,DWORD PTR[56+rsp]
+ and eax,r13d
+ mov ecx,r11d
+ xor r14d,DWORD PTR[16+rsp]
+ lea edi,DWORD PTR[((-1894007588))+rdi*1+rbp]
+ xor ebx,r13d
+ rol ecx,5
+ add edi,eax
+ rol r14d,1
+ and ebx,r12d
+ add edi,ecx
+ rol r12d,30
+ add edi,ebx
+ xor edx,DWORD PTR[52+rsp]
+ mov eax,r13d
+ mov DWORD PTR[48+rsp],r14d
+ mov ebx,r13d
+ xor edx,DWORD PTR[60+rsp]
+ and eax,r12d
+ mov ecx,edi
+ xor edx,DWORD PTR[20+rsp]
+ lea esi,DWORD PTR[((-1894007588))+rsi*1+r14]
+ xor ebx,r12d
+ rol ecx,5
+ add esi,eax
+ rol edx,1
+ and ebx,r11d
+ add esi,ecx
+ rol r11d,30
+ add esi,ebx
+ xor ebp,DWORD PTR[56+rsp]
+ mov eax,r12d
+ mov DWORD PTR[52+rsp],edx
+ mov ebx,r12d
+ xor ebp,DWORD PTR[rsp]
+ and eax,r11d
+ mov ecx,esi
+ xor ebp,DWORD PTR[24+rsp]
+ lea r13d,DWORD PTR[((-1894007588))+r13*1+rdx]
+ xor ebx,r11d
+ rol ecx,5
+ add r13d,eax
+ rol ebp,1
+ and ebx,edi
+ add r13d,ecx
+ rol edi,30
+ add r13d,ebx
+ xor r14d,DWORD PTR[60+rsp]
+ mov eax,r11d
+ mov DWORD PTR[56+rsp],ebp
+ mov ebx,r11d
+ xor r14d,DWORD PTR[4+rsp]
+ and eax,edi
+ mov ecx,r13d
+ xor r14d,DWORD PTR[28+rsp]
+ lea r12d,DWORD PTR[((-1894007588))+r12*1+rbp]
+ xor ebx,edi
+ rol ecx,5
+ add r12d,eax
+ rol r14d,1
+ and ebx,esi
+ add r12d,ecx
+ rol esi,30
+ add r12d,ebx
+ xor edx,DWORD PTR[rsp]
+ mov eax,edi
+ mov DWORD PTR[60+rsp],r14d
+ mov ebx,edi
+ xor edx,DWORD PTR[8+rsp]
+ and eax,esi
+ mov ecx,r12d
+ xor edx,DWORD PTR[32+rsp]
+ lea r11d,DWORD PTR[((-1894007588))+r11*1+r14]
+ xor ebx,esi
+ rol ecx,5
+ add r11d,eax
+ rol edx,1
+ and ebx,r13d
+ add r11d,ecx
+ rol r13d,30
+ add r11d,ebx
+ xor ebp,DWORD PTR[4+rsp]
+ mov eax,esi
+ mov DWORD PTR[rsp],edx
+ mov ebx,esi
+ xor ebp,DWORD PTR[12+rsp]
+ and eax,r13d
+ mov ecx,r11d
+ xor ebp,DWORD PTR[36+rsp]
+ lea edi,DWORD PTR[((-1894007588))+rdi*1+rdx]
+ xor ebx,r13d
+ rol ecx,5
+ add edi,eax
+ rol ebp,1
+ and ebx,r12d
+ add edi,ecx
+ rol r12d,30
+ add edi,ebx
+ xor r14d,DWORD PTR[8+rsp]
+ mov eax,r13d
+ mov DWORD PTR[4+rsp],ebp
+ mov ebx,r13d
+ xor r14d,DWORD PTR[16+rsp]
+ and eax,r12d
+ mov ecx,edi
+ xor r14d,DWORD PTR[40+rsp]
+ lea esi,DWORD PTR[((-1894007588))+rsi*1+rbp]
+ xor ebx,r12d
+ rol ecx,5
+ add esi,eax
+ rol r14d,1
+ and ebx,r11d
+ add esi,ecx
+ rol r11d,30
+ add esi,ebx
+ xor edx,DWORD PTR[12+rsp]
+ mov eax,r12d
+ mov DWORD PTR[8+rsp],r14d
+ mov ebx,r12d
+ xor edx,DWORD PTR[20+rsp]
+ and eax,r11d
+ mov ecx,esi
+ xor edx,DWORD PTR[44+rsp]
+ lea r13d,DWORD PTR[((-1894007588))+r13*1+r14]
+ xor ebx,r11d
+ rol ecx,5
+ add r13d,eax
+ rol edx,1
+ and ebx,edi
+ add r13d,ecx
+ rol edi,30
+ add r13d,ebx
+ xor ebp,DWORD PTR[16+rsp]
+ mov eax,r11d
+ mov DWORD PTR[12+rsp],edx
+ mov ebx,r11d
+ xor ebp,DWORD PTR[24+rsp]
+ and eax,edi
+ mov ecx,r13d
+ xor ebp,DWORD PTR[48+rsp]
+ lea r12d,DWORD PTR[((-1894007588))+r12*1+rdx]
+ xor ebx,edi
+ rol ecx,5
+ add r12d,eax
+ rol ebp,1
+ and ebx,esi
+ add r12d,ecx
+ rol esi,30
+ add r12d,ebx
+ xor r14d,DWORD PTR[20+rsp]
+ mov eax,edi
+ mov DWORD PTR[16+rsp],ebp
+ mov ebx,edi
+ xor r14d,DWORD PTR[28+rsp]
+ and eax,esi
+ mov ecx,r12d
+ xor r14d,DWORD PTR[52+rsp]
+ lea r11d,DWORD PTR[((-1894007588))+r11*1+rbp]
+ xor ebx,esi
+ rol ecx,5
+ add r11d,eax
+ rol r14d,1
+ and ebx,r13d
+ add r11d,ecx
+ rol r13d,30
+ add r11d,ebx
+ xor edx,DWORD PTR[24+rsp]
+ mov eax,esi
+ mov DWORD PTR[20+rsp],r14d
+ mov ebx,esi
+ xor edx,DWORD PTR[32+rsp]
+ and eax,r13d
+ mov ecx,r11d
+ xor edx,DWORD PTR[56+rsp]
+ lea edi,DWORD PTR[((-1894007588))+rdi*1+r14]
+ xor ebx,r13d
+ rol ecx,5
+ add edi,eax
+ rol edx,1
+ and ebx,r12d
+ add edi,ecx
+ rol r12d,30
+ add edi,ebx
+ xor ebp,DWORD PTR[28+rsp]
+ mov eax,r13d
+ mov DWORD PTR[24+rsp],edx
+ mov ebx,r13d
+ xor ebp,DWORD PTR[36+rsp]
+ and eax,r12d
+ mov ecx,edi
+ xor ebp,DWORD PTR[60+rsp]
+ lea esi,DWORD PTR[((-1894007588))+rsi*1+rdx]
+ xor ebx,r12d
+ rol ecx,5
+ add esi,eax
+ rol ebp,1
+ and ebx,r11d
+ add esi,ecx
+ rol r11d,30
+ add esi,ebx
+ xor r14d,DWORD PTR[32+rsp]
+ mov eax,r12d
+ mov DWORD PTR[28+rsp],ebp
+ mov ebx,r12d
+ xor r14d,DWORD PTR[40+rsp]
+ and eax,r11d
+ mov ecx,esi
+ xor r14d,DWORD PTR[rsp]
+ lea r13d,DWORD PTR[((-1894007588))+r13*1+rbp]
+ xor ebx,r11d
+ rol ecx,5
+ add r13d,eax
+ rol r14d,1
+ and ebx,edi
+ add r13d,ecx
+ rol edi,30
+ add r13d,ebx
+ xor edx,DWORD PTR[36+rsp]
+ mov eax,r11d
+ mov DWORD PTR[32+rsp],r14d
+ mov ebx,r11d
+ xor edx,DWORD PTR[44+rsp]
+ and eax,edi
+ mov ecx,r13d
+ xor edx,DWORD PTR[4+rsp]
+ lea r12d,DWORD PTR[((-1894007588))+r12*1+r14]
+ xor ebx,edi
+ rol ecx,5
+ add r12d,eax
+ rol edx,1
+ and ebx,esi
+ add r12d,ecx
+ rol esi,30
+ add r12d,ebx
+ xor ebp,DWORD PTR[40+rsp]
+ mov eax,edi
+ mov DWORD PTR[36+rsp],edx
+ mov ebx,edi
+ xor ebp,DWORD PTR[48+rsp]
+ and eax,esi
+ mov ecx,r12d
+ xor ebp,DWORD PTR[8+rsp]
+ lea r11d,DWORD PTR[((-1894007588))+r11*1+rdx]
+ xor ebx,esi
+ rol ecx,5
+ add r11d,eax
+ rol ebp,1
+ and ebx,r13d
+ add r11d,ecx
+ rol r13d,30
+ add r11d,ebx
+ xor r14d,DWORD PTR[44+rsp]
+ mov eax,esi
+ mov DWORD PTR[40+rsp],ebp
+ mov ebx,esi
+ xor r14d,DWORD PTR[52+rsp]
+ and eax,r13d
+ mov ecx,r11d
+ xor r14d,DWORD PTR[12+rsp]
+ lea edi,DWORD PTR[((-1894007588))+rdi*1+rbp]
+ xor ebx,r13d
+ rol ecx,5
+ add edi,eax
+ rol r14d,1
+ and ebx,r12d
+ add edi,ecx
+ rol r12d,30
+ add edi,ebx
+ xor edx,DWORD PTR[48+rsp]
+ mov eax,r13d
+ mov DWORD PTR[44+rsp],r14d
+ mov ebx,r13d
+ xor edx,DWORD PTR[56+rsp]
+ and eax,r12d
+ mov ecx,edi
+ xor edx,DWORD PTR[16+rsp]
+ lea esi,DWORD PTR[((-1894007588))+rsi*1+r14]
+ xor ebx,r12d
+ rol ecx,5
+ add esi,eax
+ rol edx,1
+ and ebx,r11d
+ add esi,ecx
+ rol r11d,30
+ add esi,ebx
+ xor ebp,DWORD PTR[52+rsp]
+ mov eax,edi
+ mov DWORD PTR[48+rsp],edx
+ mov ecx,esi
+ xor ebp,DWORD PTR[60+rsp]
+ xor eax,r12d
+ rol ecx,5
+ xor ebp,DWORD PTR[20+rsp]
+ lea r13d,DWORD PTR[((-899497514))+r13*1+rdx]
+ xor eax,r11d
+ add r13d,ecx
+ rol edi,30
+ add r13d,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[56+rsp]
+ mov eax,esi
+ mov DWORD PTR[52+rsp],ebp
+ mov ecx,r13d
+ xor r14d,DWORD PTR[rsp]
+ xor eax,r11d
+ rol ecx,5
+ xor r14d,DWORD PTR[24+rsp]
+ lea r12d,DWORD PTR[((-899497514))+r12*1+rbp]
+ xor eax,edi
+ add r12d,ecx
+ rol esi,30
+ add r12d,eax
+ rol r14d,1
+ xor edx,DWORD PTR[60+rsp]
+ mov eax,r13d
+ mov DWORD PTR[56+rsp],r14d
+ mov ecx,r12d
+ xor edx,DWORD PTR[4+rsp]
+ xor eax,edi
+ rol ecx,5
+ xor edx,DWORD PTR[28+rsp]
+ lea r11d,DWORD PTR[((-899497514))+r11*1+r14]
+ xor eax,esi
+ add r11d,ecx
+ rol r13d,30
+ add r11d,eax
+ rol edx,1
+ xor ebp,DWORD PTR[rsp]
+ mov eax,r12d
+ mov DWORD PTR[60+rsp],edx
+ mov ecx,r11d
+ xor ebp,DWORD PTR[8+rsp]
+ xor eax,esi
+ rol ecx,5
+ xor ebp,DWORD PTR[32+rsp]
+ lea edi,DWORD PTR[((-899497514))+rdi*1+rdx]
+ xor eax,r13d
+ add edi,ecx
+ rol r12d,30
+ add edi,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[4+rsp]
+ mov eax,r11d
+ mov DWORD PTR[rsp],ebp
+ mov ecx,edi
+ xor r14d,DWORD PTR[12+rsp]
+ xor eax,r13d
+ rol ecx,5
+ xor r14d,DWORD PTR[36+rsp]
+ lea esi,DWORD PTR[((-899497514))+rsi*1+rbp]
+ xor eax,r12d
+ add esi,ecx
+ rol r11d,30
+ add esi,eax
+ rol r14d,1
+ xor edx,DWORD PTR[8+rsp]
+ mov eax,edi
+ mov DWORD PTR[4+rsp],r14d
+ mov ecx,esi
+ xor edx,DWORD PTR[16+rsp]
+ xor eax,r12d
+ rol ecx,5
+ xor edx,DWORD PTR[40+rsp]
+ lea r13d,DWORD PTR[((-899497514))+r13*1+r14]
+ xor eax,r11d
+ add r13d,ecx
+ rol edi,30
+ add r13d,eax
+ rol edx,1
+ xor ebp,DWORD PTR[12+rsp]
+ mov eax,esi
+ mov DWORD PTR[8+rsp],edx
+ mov ecx,r13d
+ xor ebp,DWORD PTR[20+rsp]
+ xor eax,r11d
+ rol ecx,5
+ xor ebp,DWORD PTR[44+rsp]
+ lea r12d,DWORD PTR[((-899497514))+r12*1+rdx]
+ xor eax,edi
+ add r12d,ecx
+ rol esi,30
+ add r12d,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[16+rsp]
+ mov eax,r13d
+ mov DWORD PTR[12+rsp],ebp
+ mov ecx,r12d
+ xor r14d,DWORD PTR[24+rsp]
+ xor eax,edi
+ rol ecx,5
+ xor r14d,DWORD PTR[48+rsp]
+ lea r11d,DWORD PTR[((-899497514))+r11*1+rbp]
+ xor eax,esi
+ add r11d,ecx
+ rol r13d,30
+ add r11d,eax
+ rol r14d,1
+ xor edx,DWORD PTR[20+rsp]
+ mov eax,r12d
+ mov DWORD PTR[16+rsp],r14d
+ mov ecx,r11d
+ xor edx,DWORD PTR[28+rsp]
+ xor eax,esi
+ rol ecx,5
+ xor edx,DWORD PTR[52+rsp]
+ lea edi,DWORD PTR[((-899497514))+rdi*1+r14]
+ xor eax,r13d
+ add edi,ecx
+ rol r12d,30
+ add edi,eax
+ rol edx,1
+ xor ebp,DWORD PTR[24+rsp]
+ mov eax,r11d
+ mov DWORD PTR[20+rsp],edx
+ mov ecx,edi
+ xor ebp,DWORD PTR[32+rsp]
+ xor eax,r13d
+ rol ecx,5
+ xor ebp,DWORD PTR[56+rsp]
+ lea esi,DWORD PTR[((-899497514))+rsi*1+rdx]
+ xor eax,r12d
+ add esi,ecx
+ rol r11d,30
+ add esi,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[28+rsp]
+ mov eax,edi
+ mov DWORD PTR[24+rsp],ebp
+ mov ecx,esi
+ xor r14d,DWORD PTR[36+rsp]
+ xor eax,r12d
+ rol ecx,5
+ xor r14d,DWORD PTR[60+rsp]
+ lea r13d,DWORD PTR[((-899497514))+r13*1+rbp]
+ xor eax,r11d
+ add r13d,ecx
+ rol edi,30
+ add r13d,eax
+ rol r14d,1
+ xor edx,DWORD PTR[32+rsp]
+ mov eax,esi
+ mov DWORD PTR[28+rsp],r14d
+ mov ecx,r13d
+ xor edx,DWORD PTR[40+rsp]
+ xor eax,r11d
+ rol ecx,5
+ xor edx,DWORD PTR[rsp]
+ lea r12d,DWORD PTR[((-899497514))+r12*1+r14]
+ xor eax,edi
+ add r12d,ecx
+ rol esi,30
+ add r12d,eax
+ rol edx,1
+ xor ebp,DWORD PTR[36+rsp]
+ mov eax,r13d
+
+ mov ecx,r12d
+ xor ebp,DWORD PTR[44+rsp]
+ xor eax,edi
+ rol ecx,5
+ xor ebp,DWORD PTR[4+rsp]
+ lea r11d,DWORD PTR[((-899497514))+r11*1+rdx]
+ xor eax,esi
+ add r11d,ecx
+ rol r13d,30
+ add r11d,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[40+rsp]
+ mov eax,r12d
+
+ mov ecx,r11d
+ xor r14d,DWORD PTR[48+rsp]
+ xor eax,esi
+ rol ecx,5
+ xor r14d,DWORD PTR[8+rsp]
+ lea edi,DWORD PTR[((-899497514))+rdi*1+rbp]
+ xor eax,r13d
+ add edi,ecx
+ rol r12d,30
+ add edi,eax
+ rol r14d,1
+ xor edx,DWORD PTR[44+rsp]
+ mov eax,r11d
+
+ mov ecx,edi
+ xor edx,DWORD PTR[52+rsp]
+ xor eax,r13d
+ rol ecx,5
+ xor edx,DWORD PTR[12+rsp]
+ lea esi,DWORD PTR[((-899497514))+rsi*1+r14]
+ xor eax,r12d
+ add esi,ecx
+ rol r11d,30
+ add esi,eax
+ rol edx,1
+ xor ebp,DWORD PTR[48+rsp]
+ mov eax,edi
+
+ mov ecx,esi
+ xor ebp,DWORD PTR[56+rsp]
+ xor eax,r12d
+ rol ecx,5
+ xor ebp,DWORD PTR[16+rsp]
+ lea r13d,DWORD PTR[((-899497514))+r13*1+rdx]
+ xor eax,r11d
+ add r13d,ecx
+ rol edi,30
+ add r13d,eax
+ rol ebp,1
+ xor r14d,DWORD PTR[52+rsp]
+ mov eax,esi
+
+ mov ecx,r13d
+ xor r14d,DWORD PTR[60+rsp]
+ xor eax,r11d
+ rol ecx,5
+ xor r14d,DWORD PTR[20+rsp]
+ lea r12d,DWORD PTR[((-899497514))+r12*1+rbp]
+ xor eax,edi
+ add r12d,ecx
+ rol esi,30
+ add r12d,eax
+ rol r14d,1
+ xor edx,DWORD PTR[56+rsp]
+ mov eax,r13d
+
+ mov ecx,r12d
+ xor edx,DWORD PTR[rsp]
+ xor eax,edi
+ rol ecx,5
+ xor edx,DWORD PTR[24+rsp]
+ lea r11d,DWORD PTR[((-899497514))+r11*1+r14]
+ xor eax,esi
+ add r11d,ecx
+ rol r13d,30
+ add r11d,eax
+ rol edx,1
+ xor ebp,DWORD PTR[60+rsp]
+ mov eax,r12d
+
+ mov ecx,r11d
+ xor ebp,DWORD PTR[4+rsp]
+ xor eax,esi
+ rol ecx,5
+ xor ebp,DWORD PTR[28+rsp]
+ lea edi,DWORD PTR[((-899497514))+rdi*1+rdx]
+ xor eax,r13d
+ add edi,ecx
+ rol r12d,30
+ add edi,eax
+ rol ebp,1
+ mov eax,r11d
+ mov ecx,edi
+ xor eax,r13d
+ lea esi,DWORD PTR[((-899497514))+rsi*1+rbp]
+ rol ecx,5
+ xor eax,r12d
+ add esi,ecx
+ rol r11d,30
+ add esi,eax
+ add esi,DWORD PTR[r8]
+ add edi,DWORD PTR[4+r8]
+ add r11d,DWORD PTR[8+r8]
+ add r12d,DWORD PTR[12+r8]
+ add r13d,DWORD PTR[16+r8]
+ mov DWORD PTR[r8],esi
+ mov DWORD PTR[4+r8],edi
+ mov DWORD PTR[8+r8],r11d
+ mov DWORD PTR[12+r8],r12d
+ mov DWORD PTR[16+r8],r13d
+
+ sub r10,1
+ lea r9,QWORD PTR[64+r9]
+ jnz $L$loop
+
+ mov rsi,QWORD PTR[64+rsp]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha1_block_data_order::
+sha1_block_data_order ENDP
+
+ALIGN 32
+sha1_block_data_order_shaext PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha1_block_data_order_shaext::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+_shaext_shortcut::
+
+ lea rsp,QWORD PTR[((-72))+rsp]
+ movaps XMMWORD PTR[(-8-64)+rax],xmm6
+ movaps XMMWORD PTR[(-8-48)+rax],xmm7
+ movaps XMMWORD PTR[(-8-32)+rax],xmm8
+ movaps XMMWORD PTR[(-8-16)+rax],xmm9
+$L$prologue_shaext::
+ movdqu xmm0,XMMWORD PTR[rdi]
+ movd xmm1,DWORD PTR[16+rdi]
+ movdqa xmm3,XMMWORD PTR[((K_XX_XX+160))]
+
+ movdqu xmm4,XMMWORD PTR[rsi]
+ pshufd xmm0,xmm0,27
+ movdqu xmm5,XMMWORD PTR[16+rsi]
+ pshufd xmm1,xmm1,27
+ movdqu xmm6,XMMWORD PTR[32+rsi]
+DB 102,15,56,0,227
+ movdqu xmm7,XMMWORD PTR[48+rsi]
+DB 102,15,56,0,235
+DB 102,15,56,0,243
+ movdqa xmm9,xmm1
+DB 102,15,56,0,251
+ jmp $L$oop_shaext
+
+ALIGN 16
+$L$oop_shaext::
+ dec rdx
+ lea r8,QWORD PTR[64+rsi]
+ paddd xmm1,xmm4
+ cmovne rsi,r8
+ movdqa xmm8,xmm0
+DB 15,56,201,229
+ movdqa xmm2,xmm0
+DB 15,58,204,193,0
+DB 15,56,200,213
+ pxor xmm4,xmm6
+DB 15,56,201,238
+DB 15,56,202,231
+
+ movdqa xmm1,xmm0
+DB 15,58,204,194,0
+DB 15,56,200,206
+ pxor xmm5,xmm7
+DB 15,56,202,236
+DB 15,56,201,247
+ movdqa xmm2,xmm0
+DB 15,58,204,193,0
+DB 15,56,200,215
+ pxor xmm6,xmm4
+DB 15,56,201,252
+DB 15,56,202,245
+
+ movdqa xmm1,xmm0
+DB 15,58,204,194,0
+DB 15,56,200,204
+ pxor xmm7,xmm5
+DB 15,56,202,254
+DB 15,56,201,229
+ movdqa xmm2,xmm0
+DB 15,58,204,193,0
+DB 15,56,200,213
+ pxor xmm4,xmm6
+DB 15,56,201,238
+DB 15,56,202,231
+
+ movdqa xmm1,xmm0
+DB 15,58,204,194,1
+DB 15,56,200,206
+ pxor xmm5,xmm7
+DB 15,56,202,236
+DB 15,56,201,247
+ movdqa xmm2,xmm0
+DB 15,58,204,193,1
+DB 15,56,200,215
+ pxor xmm6,xmm4
+DB 15,56,201,252
+DB 15,56,202,245
+
+ movdqa xmm1,xmm0
+DB 15,58,204,194,1
+DB 15,56,200,204
+ pxor xmm7,xmm5
+DB 15,56,202,254
+DB 15,56,201,229
+ movdqa xmm2,xmm0
+DB 15,58,204,193,1
+DB 15,56,200,213
+ pxor xmm4,xmm6
+DB 15,56,201,238
+DB 15,56,202,231
+
+ movdqa xmm1,xmm0
+DB 15,58,204,194,1
+DB 15,56,200,206
+ pxor xmm5,xmm7
+DB 15,56,202,236
+DB 15,56,201,247
+ movdqa xmm2,xmm0
+DB 15,58,204,193,2
+DB 15,56,200,215
+ pxor xmm6,xmm4
+DB 15,56,201,252
+DB 15,56,202,245
+
+ movdqa xmm1,xmm0
+DB 15,58,204,194,2
+DB 15,56,200,204
+ pxor xmm7,xmm5
+DB 15,56,202,254
+DB 15,56,201,229
+ movdqa xmm2,xmm0
+DB 15,58,204,193,2
+DB 15,56,200,213
+ pxor xmm4,xmm6
+DB 15,56,201,238
+DB 15,56,202,231
+
+ movdqa xmm1,xmm0
+DB 15,58,204,194,2
+DB 15,56,200,206
+ pxor xmm5,xmm7
+DB 15,56,202,236
+DB 15,56,201,247
+ movdqa xmm2,xmm0
+DB 15,58,204,193,2
+DB 15,56,200,215
+ pxor xmm6,xmm4
+DB 15,56,201,252
+DB 15,56,202,245
+
+ movdqa xmm1,xmm0
+DB 15,58,204,194,3
+DB 15,56,200,204
+ pxor xmm7,xmm5
+DB 15,56,202,254
+ movdqu xmm4,XMMWORD PTR[rsi]
+ movdqa xmm2,xmm0
+DB 15,58,204,193,3
+DB 15,56,200,213
+ movdqu xmm5,XMMWORD PTR[16+rsi]
+DB 102,15,56,0,227
+
+ movdqa xmm1,xmm0
+DB 15,58,204,194,3
+DB 15,56,200,206
+ movdqu xmm6,XMMWORD PTR[32+rsi]
+DB 102,15,56,0,235
+
+ movdqa xmm2,xmm0
+DB 15,58,204,193,3
+DB 15,56,200,215
+ movdqu xmm7,XMMWORD PTR[48+rsi]
+DB 102,15,56,0,243
+
+ movdqa xmm1,xmm0
+DB 15,58,204,194,3
+DB 65,15,56,200,201
+DB 102,15,56,0,251
+
+ paddd xmm0,xmm8
+ movdqa xmm9,xmm1
+
+ jnz $L$oop_shaext
+
+ pshufd xmm0,xmm0,27
+ pshufd xmm1,xmm1,27
+ movdqu XMMWORD PTR[rdi],xmm0
+ movd DWORD PTR[16+rdi],xmm1
+ movaps xmm6,XMMWORD PTR[((-8-64))+rax]
+ movaps xmm7,XMMWORD PTR[((-8-48))+rax]
+ movaps xmm8,XMMWORD PTR[((-8-32))+rax]
+ movaps xmm9,XMMWORD PTR[((-8-16))+rax]
+ mov rsp,rax
+$L$epilogue_shaext::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha1_block_data_order_shaext::
+sha1_block_data_order_shaext ENDP
+
+ALIGN 16
+sha1_block_data_order_ssse3 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha1_block_data_order_ssse3::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+_ssse3_shortcut::
+
+ mov r11,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ lea rsp,QWORD PTR[((-160))+rsp]
+ movaps XMMWORD PTR[(-40-96)+r11],xmm6
+ movaps XMMWORD PTR[(-40-80)+r11],xmm7
+ movaps XMMWORD PTR[(-40-64)+r11],xmm8
+ movaps XMMWORD PTR[(-40-48)+r11],xmm9
+ movaps XMMWORD PTR[(-40-32)+r11],xmm10
+ movaps XMMWORD PTR[(-40-16)+r11],xmm11
+$L$prologue_ssse3::
+ and rsp,-64
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rdx
+
+ shl r10,6
+ add r10,r9
+ lea r14,QWORD PTR[((K_XX_XX+64))]
+
+ mov eax,DWORD PTR[r8]
+ mov ebx,DWORD PTR[4+r8]
+ mov ecx,DWORD PTR[8+r8]
+ mov edx,DWORD PTR[12+r8]
+ mov esi,ebx
+ mov ebp,DWORD PTR[16+r8]
+ mov edi,ecx
+ xor edi,edx
+ and esi,edi
+
+ movdqa xmm6,XMMWORD PTR[64+r14]
+ movdqa xmm9,XMMWORD PTR[((-64))+r14]
+ movdqu xmm0,XMMWORD PTR[r9]
+ movdqu xmm1,XMMWORD PTR[16+r9]
+ movdqu xmm2,XMMWORD PTR[32+r9]
+ movdqu xmm3,XMMWORD PTR[48+r9]
+DB 102,15,56,0,198
+DB 102,15,56,0,206
+DB 102,15,56,0,214
+ add r9,64
+ paddd xmm0,xmm9
+DB 102,15,56,0,222
+ paddd xmm1,xmm9
+ paddd xmm2,xmm9
+ movdqa XMMWORD PTR[rsp],xmm0
+ psubd xmm0,xmm9
+ movdqa XMMWORD PTR[16+rsp],xmm1
+ psubd xmm1,xmm9
+ movdqa XMMWORD PTR[32+rsp],xmm2
+ psubd xmm2,xmm9
+ jmp $L$oop_ssse3
+ALIGN 16
+$L$oop_ssse3::
+ ror ebx,2
+ pshufd xmm4,xmm0,238
+ xor esi,edx
+ movdqa xmm8,xmm3
+ paddd xmm9,xmm3
+ mov edi,eax
+ add ebp,DWORD PTR[rsp]
+ punpcklqdq xmm4,xmm1
+ xor ebx,ecx
+ rol eax,5
+ add ebp,esi
+ psrldq xmm8,4
+ and edi,ebx
+ xor ebx,ecx
+ pxor xmm4,xmm0
+ add ebp,eax
+ ror eax,7
+ pxor xmm8,xmm2
+ xor edi,ecx
+ mov esi,ebp
+ add edx,DWORD PTR[4+rsp]
+ pxor xmm4,xmm8
+ xor eax,ebx
+ rol ebp,5
+ movdqa XMMWORD PTR[48+rsp],xmm9
+ add edx,edi
+ and esi,eax
+ movdqa xmm10,xmm4
+ xor eax,ebx
+ add edx,ebp
+ ror ebp,7
+ movdqa xmm8,xmm4
+ xor esi,ebx
+ pslldq xmm10,12
+ paddd xmm4,xmm4
+ mov edi,edx
+ add ecx,DWORD PTR[8+rsp]
+ psrld xmm8,31
+ xor ebp,eax
+ rol edx,5
+ add ecx,esi
+ movdqa xmm9,xmm10
+ and edi,ebp
+ xor ebp,eax
+ psrld xmm10,30
+ add ecx,edx
+ ror edx,7
+ por xmm4,xmm8
+ xor edi,eax
+ mov esi,ecx
+ add ebx,DWORD PTR[12+rsp]
+ pslld xmm9,2
+ pxor xmm4,xmm10
+ xor edx,ebp
+ movdqa xmm10,XMMWORD PTR[((-64))+r14]
+ rol ecx,5
+ add ebx,edi
+ and esi,edx
+ pxor xmm4,xmm9
+ xor edx,ebp
+ add ebx,ecx
+ ror ecx,7
+ pshufd xmm5,xmm1,238
+ xor esi,ebp
+ movdqa xmm9,xmm4
+ paddd xmm10,xmm4
+ mov edi,ebx
+ add eax,DWORD PTR[16+rsp]
+ punpcklqdq xmm5,xmm2
+ xor ecx,edx
+ rol ebx,5
+ add eax,esi
+ psrldq xmm9,4
+ and edi,ecx
+ xor ecx,edx
+ pxor xmm5,xmm1
+ add eax,ebx
+ ror ebx,7
+ pxor xmm9,xmm3
+ xor edi,edx
+ mov esi,eax
+ add ebp,DWORD PTR[20+rsp]
+ pxor xmm5,xmm9
+ xor ebx,ecx
+ rol eax,5
+ movdqa XMMWORD PTR[rsp],xmm10
+ add ebp,edi
+ and esi,ebx
+ movdqa xmm8,xmm5
+ xor ebx,ecx
+ add ebp,eax
+ ror eax,7
+ movdqa xmm9,xmm5
+ xor esi,ecx
+ pslldq xmm8,12
+ paddd xmm5,xmm5
+ mov edi,ebp
+ add edx,DWORD PTR[24+rsp]
+ psrld xmm9,31
+ xor eax,ebx
+ rol ebp,5
+ add edx,esi
+ movdqa xmm10,xmm8
+ and edi,eax
+ xor eax,ebx
+ psrld xmm8,30
+ add edx,ebp
+ ror ebp,7
+ por xmm5,xmm9
+ xor edi,ebx
+ mov esi,edx
+ add ecx,DWORD PTR[28+rsp]
+ pslld xmm10,2
+ pxor xmm5,xmm8
+ xor ebp,eax
+ movdqa xmm8,XMMWORD PTR[((-32))+r14]
+ rol edx,5
+ add ecx,edi
+ and esi,ebp
+ pxor xmm5,xmm10
+ xor ebp,eax
+ add ecx,edx
+ ror edx,7
+ pshufd xmm6,xmm2,238
+ xor esi,eax
+ movdqa xmm10,xmm5
+ paddd xmm8,xmm5
+ mov edi,ecx
+ add ebx,DWORD PTR[32+rsp]
+ punpcklqdq xmm6,xmm3
+ xor edx,ebp
+ rol ecx,5
+ add ebx,esi
+ psrldq xmm10,4
+ and edi,edx
+ xor edx,ebp
+ pxor xmm6,xmm2
+ add ebx,ecx
+ ror ecx,7
+ pxor xmm10,xmm4
+ xor edi,ebp
+ mov esi,ebx
+ add eax,DWORD PTR[36+rsp]
+ pxor xmm6,xmm10
+ xor ecx,edx
+ rol ebx,5
+ movdqa XMMWORD PTR[16+rsp],xmm8
+ add eax,edi
+ and esi,ecx
+ movdqa xmm9,xmm6
+ xor ecx,edx
+ add eax,ebx
+ ror ebx,7
+ movdqa xmm10,xmm6
+ xor esi,edx
+ pslldq xmm9,12
+ paddd xmm6,xmm6
+ mov edi,eax
+ add ebp,DWORD PTR[40+rsp]
+ psrld xmm10,31
+ xor ebx,ecx
+ rol eax,5
+ add ebp,esi
+ movdqa xmm8,xmm9
+ and edi,ebx
+ xor ebx,ecx
+ psrld xmm9,30
+ add ebp,eax
+ ror eax,7
+ por xmm6,xmm10
+ xor edi,ecx
+ mov esi,ebp
+ add edx,DWORD PTR[44+rsp]
+ pslld xmm8,2
+ pxor xmm6,xmm9
+ xor eax,ebx
+ movdqa xmm9,XMMWORD PTR[((-32))+r14]
+ rol ebp,5
+ add edx,edi
+ and esi,eax
+ pxor xmm6,xmm8
+ xor eax,ebx
+ add edx,ebp
+ ror ebp,7
+ pshufd xmm7,xmm3,238
+ xor esi,ebx
+ movdqa xmm8,xmm6
+ paddd xmm9,xmm6
+ mov edi,edx
+ add ecx,DWORD PTR[48+rsp]
+ punpcklqdq xmm7,xmm4
+ xor ebp,eax
+ rol edx,5
+ add ecx,esi
+ psrldq xmm8,4
+ and edi,ebp
+ xor ebp,eax
+ pxor xmm7,xmm3
+ add ecx,edx
+ ror edx,7
+ pxor xmm8,xmm5
+ xor edi,eax
+ mov esi,ecx
+ add ebx,DWORD PTR[52+rsp]
+ pxor xmm7,xmm8
+ xor edx,ebp
+ rol ecx,5
+ movdqa XMMWORD PTR[32+rsp],xmm9
+ add ebx,edi
+ and esi,edx
+ movdqa xmm10,xmm7
+ xor edx,ebp
+ add ebx,ecx
+ ror ecx,7
+ movdqa xmm8,xmm7
+ xor esi,ebp
+ pslldq xmm10,12
+ paddd xmm7,xmm7
+ mov edi,ebx
+ add eax,DWORD PTR[56+rsp]
+ psrld xmm8,31
+ xor ecx,edx
+ rol ebx,5
+ add eax,esi
+ movdqa xmm9,xmm10
+ and edi,ecx
+ xor ecx,edx
+ psrld xmm10,30
+ add eax,ebx
+ ror ebx,7
+ por xmm7,xmm8
+ xor edi,edx
+ mov esi,eax
+ add ebp,DWORD PTR[60+rsp]
+ pslld xmm9,2
+ pxor xmm7,xmm10
+ xor ebx,ecx
+ movdqa xmm10,XMMWORD PTR[((-32))+r14]
+ rol eax,5
+ add ebp,edi
+ and esi,ebx
+ pxor xmm7,xmm9
+ pshufd xmm9,xmm6,238
+ xor ebx,ecx
+ add ebp,eax
+ ror eax,7
+ pxor xmm0,xmm4
+ xor esi,ecx
+ mov edi,ebp
+ add edx,DWORD PTR[rsp]
+ punpcklqdq xmm9,xmm7
+ xor eax,ebx
+ rol ebp,5
+ pxor xmm0,xmm1
+ add edx,esi
+ and edi,eax
+ movdqa xmm8,xmm10
+ xor eax,ebx
+ paddd xmm10,xmm7
+ add edx,ebp
+ pxor xmm0,xmm9
+ ror ebp,7
+ xor edi,ebx
+ mov esi,edx
+ add ecx,DWORD PTR[4+rsp]
+ movdqa xmm9,xmm0
+ xor ebp,eax
+ rol edx,5
+ movdqa XMMWORD PTR[48+rsp],xmm10
+ add ecx,edi
+ and esi,ebp
+ xor ebp,eax
+ pslld xmm0,2
+ add ecx,edx
+ ror edx,7
+ psrld xmm9,30
+ xor esi,eax
+ mov edi,ecx
+ add ebx,DWORD PTR[8+rsp]
+ por xmm0,xmm9
+ xor edx,ebp
+ rol ecx,5
+ pshufd xmm10,xmm7,238
+ add ebx,esi
+ and edi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[12+rsp]
+ xor edi,ebp
+ mov esi,ebx
+ rol ebx,5
+ add eax,edi
+ xor esi,edx
+ ror ecx,7
+ add eax,ebx
+ pxor xmm1,xmm5
+ add ebp,DWORD PTR[16+rsp]
+ xor esi,ecx
+ punpcklqdq xmm10,xmm0
+ mov edi,eax
+ rol eax,5
+ pxor xmm1,xmm2
+ add ebp,esi
+ xor edi,ecx
+ movdqa xmm9,xmm8
+ ror ebx,7
+ paddd xmm8,xmm0
+ add ebp,eax
+ pxor xmm1,xmm10
+ add edx,DWORD PTR[20+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ movdqa xmm10,xmm1
+ add edx,edi
+ xor esi,ebx
+ movdqa XMMWORD PTR[rsp],xmm8
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[24+rsp]
+ pslld xmm1,2
+ xor esi,eax
+ mov edi,edx
+ psrld xmm10,30
+ rol edx,5
+ add ecx,esi
+ xor edi,eax
+ ror ebp,7
+ por xmm1,xmm10
+ add ecx,edx
+ add ebx,DWORD PTR[28+rsp]
+ pshufd xmm8,xmm0,238
+ xor edi,ebp
+ mov esi,ecx
+ rol ecx,5
+ add ebx,edi
+ xor esi,ebp
+ ror edx,7
+ add ebx,ecx
+ pxor xmm2,xmm6
+ add eax,DWORD PTR[32+rsp]
+ xor esi,edx
+ punpcklqdq xmm8,xmm1
+ mov edi,ebx
+ rol ebx,5
+ pxor xmm2,xmm3
+ add eax,esi
+ xor edi,edx
+ movdqa xmm10,XMMWORD PTR[r14]
+ ror ecx,7
+ paddd xmm9,xmm1
+ add eax,ebx
+ pxor xmm2,xmm8
+ add ebp,DWORD PTR[36+rsp]
+ xor edi,ecx
+ mov esi,eax
+ rol eax,5
+ movdqa xmm8,xmm2
+ add ebp,edi
+ xor esi,ecx
+ movdqa XMMWORD PTR[16+rsp],xmm9
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[40+rsp]
+ pslld xmm2,2
+ xor esi,ebx
+ mov edi,ebp
+ psrld xmm8,30
+ rol ebp,5
+ add edx,esi
+ xor edi,ebx
+ ror eax,7
+ por xmm2,xmm8
+ add edx,ebp
+ add ecx,DWORD PTR[44+rsp]
+ pshufd xmm9,xmm1,238
+ xor edi,eax
+ mov esi,edx
+ rol edx,5
+ add ecx,edi
+ xor esi,eax
+ ror ebp,7
+ add ecx,edx
+ pxor xmm3,xmm7
+ add ebx,DWORD PTR[48+rsp]
+ xor esi,ebp
+ punpcklqdq xmm9,xmm2
+ mov edi,ecx
+ rol ecx,5
+ pxor xmm3,xmm4
+ add ebx,esi
+ xor edi,ebp
+ movdqa xmm8,xmm10
+ ror edx,7
+ paddd xmm10,xmm2
+ add ebx,ecx
+ pxor xmm3,xmm9
+ add eax,DWORD PTR[52+rsp]
+ xor edi,edx
+ mov esi,ebx
+ rol ebx,5
+ movdqa xmm9,xmm3
+ add eax,edi
+ xor esi,edx
+ movdqa XMMWORD PTR[32+rsp],xmm10
+ ror ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[56+rsp]
+ pslld xmm3,2
+ xor esi,ecx
+ mov edi,eax
+ psrld xmm9,30
+ rol eax,5
+ add ebp,esi
+ xor edi,ecx
+ ror ebx,7
+ por xmm3,xmm9
+ add ebp,eax
+ add edx,DWORD PTR[60+rsp]
+ pshufd xmm10,xmm2,238
+ xor edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ add edx,edi
+ xor esi,ebx
+ ror eax,7
+ add edx,ebp
+ pxor xmm4,xmm0
+ add ecx,DWORD PTR[rsp]
+ xor esi,eax
+ punpcklqdq xmm10,xmm3
+ mov edi,edx
+ rol edx,5
+ pxor xmm4,xmm5
+ add ecx,esi
+ xor edi,eax
+ movdqa xmm9,xmm8
+ ror ebp,7
+ paddd xmm8,xmm3
+ add ecx,edx
+ pxor xmm4,xmm10
+ add ebx,DWORD PTR[4+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ rol ecx,5
+ movdqa xmm10,xmm4
+ add ebx,edi
+ xor esi,ebp
+ movdqa XMMWORD PTR[48+rsp],xmm8
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[8+rsp]
+ pslld xmm4,2
+ xor esi,edx
+ mov edi,ebx
+ psrld xmm10,30
+ rol ebx,5
+ add eax,esi
+ xor edi,edx
+ ror ecx,7
+ por xmm4,xmm10
+ add eax,ebx
+ add ebp,DWORD PTR[12+rsp]
+ pshufd xmm8,xmm3,238
+ xor edi,ecx
+ mov esi,eax
+ rol eax,5
+ add ebp,edi
+ xor esi,ecx
+ ror ebx,7
+ add ebp,eax
+ pxor xmm5,xmm1
+ add edx,DWORD PTR[16+rsp]
+ xor esi,ebx
+ punpcklqdq xmm8,xmm4
+ mov edi,ebp
+ rol ebp,5
+ pxor xmm5,xmm6
+ add edx,esi
+ xor edi,ebx
+ movdqa xmm10,xmm9
+ ror eax,7
+ paddd xmm9,xmm4
+ add edx,ebp
+ pxor xmm5,xmm8
+ add ecx,DWORD PTR[20+rsp]
+ xor edi,eax
+ mov esi,edx
+ rol edx,5
+ movdqa xmm8,xmm5
+ add ecx,edi
+ xor esi,eax
+ movdqa XMMWORD PTR[rsp],xmm9
+ ror ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[24+rsp]
+ pslld xmm5,2
+ xor esi,ebp
+ mov edi,ecx
+ psrld xmm8,30
+ rol ecx,5
+ add ebx,esi
+ xor edi,ebp
+ ror edx,7
+ por xmm5,xmm8
+ add ebx,ecx
+ add eax,DWORD PTR[28+rsp]
+ pshufd xmm9,xmm4,238
+ ror ecx,7
+ mov esi,ebx
+ xor edi,edx
+ rol ebx,5
+ add eax,edi
+ xor esi,ecx
+ xor ecx,edx
+ add eax,ebx
+ pxor xmm6,xmm2
+ add ebp,DWORD PTR[32+rsp]
+ and esi,ecx
+ xor ecx,edx
+ ror ebx,7
+ punpcklqdq xmm9,xmm5
+ mov edi,eax
+ xor esi,ecx
+ pxor xmm6,xmm7
+ rol eax,5
+ add ebp,esi
+ movdqa xmm8,xmm10
+ xor edi,ebx
+ paddd xmm10,xmm5
+ xor ebx,ecx
+ pxor xmm6,xmm9
+ add ebp,eax
+ add edx,DWORD PTR[36+rsp]
+ and edi,ebx
+ xor ebx,ecx
+ ror eax,7
+ movdqa xmm9,xmm6
+ mov esi,ebp
+ xor edi,ebx
+ movdqa XMMWORD PTR[16+rsp],xmm10
+ rol ebp,5
+ add edx,edi
+ xor esi,eax
+ pslld xmm6,2
+ xor eax,ebx
+ add edx,ebp
+ psrld xmm9,30
+ add ecx,DWORD PTR[40+rsp]
+ and esi,eax
+ xor eax,ebx
+ por xmm6,xmm9
+ ror ebp,7
+ mov edi,edx
+ xor esi,eax
+ rol edx,5
+ pshufd xmm10,xmm5,238
+ add ecx,esi
+ xor edi,ebp
+ xor ebp,eax
+ add ecx,edx
+ add ebx,DWORD PTR[44+rsp]
+ and edi,ebp
+ xor ebp,eax
+ ror edx,7
+ mov esi,ecx
+ xor edi,ebp
+ rol ecx,5
+ add ebx,edi
+ xor esi,edx
+ xor edx,ebp
+ add ebx,ecx
+ pxor xmm7,xmm3
+ add eax,DWORD PTR[48+rsp]
+ and esi,edx
+ xor edx,ebp
+ ror ecx,7
+ punpcklqdq xmm10,xmm6
+ mov edi,ebx
+ xor esi,edx
+ pxor xmm7,xmm0
+ rol ebx,5
+ add eax,esi
+ movdqa xmm9,XMMWORD PTR[32+r14]
+ xor edi,ecx
+ paddd xmm8,xmm6
+ xor ecx,edx
+ pxor xmm7,xmm10
+ add eax,ebx
+ add ebp,DWORD PTR[52+rsp]
+ and edi,ecx
+ xor ecx,edx
+ ror ebx,7
+ movdqa xmm10,xmm7
+ mov esi,eax
+ xor edi,ecx
+ movdqa XMMWORD PTR[32+rsp],xmm8
+ rol eax,5
+ add ebp,edi
+ xor esi,ebx
+ pslld xmm7,2
+ xor ebx,ecx
+ add ebp,eax
+ psrld xmm10,30
+ add edx,DWORD PTR[56+rsp]
+ and esi,ebx
+ xor ebx,ecx
+ por xmm7,xmm10
+ ror eax,7
+ mov edi,ebp
+ xor esi,ebx
+ rol ebp,5
+ pshufd xmm8,xmm6,238
+ add edx,esi
+ xor edi,eax
+ xor eax,ebx
+ add edx,ebp
+ add ecx,DWORD PTR[60+rsp]
+ and edi,eax
+ xor eax,ebx
+ ror ebp,7
+ mov esi,edx
+ xor edi,eax
+ rol edx,5
+ add ecx,edi
+ xor esi,ebp
+ xor ebp,eax
+ add ecx,edx
+ pxor xmm0,xmm4
+ add ebx,DWORD PTR[rsp]
+ and esi,ebp
+ xor ebp,eax
+ ror edx,7
+ punpcklqdq xmm8,xmm7
+ mov edi,ecx
+ xor esi,ebp
+ pxor xmm0,xmm1
+ rol ecx,5
+ add ebx,esi
+ movdqa xmm10,xmm9
+ xor edi,edx
+ paddd xmm9,xmm7
+ xor edx,ebp
+ pxor xmm0,xmm8
+ add ebx,ecx
+ add eax,DWORD PTR[4+rsp]
+ and edi,edx
+ xor edx,ebp
+ ror ecx,7
+ movdqa xmm8,xmm0
+ mov esi,ebx
+ xor edi,edx
+ movdqa XMMWORD PTR[48+rsp],xmm9
+ rol ebx,5
+ add eax,edi
+ xor esi,ecx
+ pslld xmm0,2
+ xor ecx,edx
+ add eax,ebx
+ psrld xmm8,30
+ add ebp,DWORD PTR[8+rsp]
+ and esi,ecx
+ xor ecx,edx
+ por xmm0,xmm8
+ ror ebx,7
+ mov edi,eax
+ xor esi,ecx
+ rol eax,5
+ pshufd xmm9,xmm7,238
+ add ebp,esi
+ xor edi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ add edx,DWORD PTR[12+rsp]
+ and edi,ebx
+ xor ebx,ecx
+ ror eax,7
+ mov esi,ebp
+ xor edi,ebx
+ rol ebp,5
+ add edx,edi
+ xor esi,eax
+ xor eax,ebx
+ add edx,ebp
+ pxor xmm1,xmm5
+ add ecx,DWORD PTR[16+rsp]
+ and esi,eax
+ xor eax,ebx
+ ror ebp,7
+ punpcklqdq xmm9,xmm0
+ mov edi,edx
+ xor esi,eax
+ pxor xmm1,xmm2
+ rol edx,5
+ add ecx,esi
+ movdqa xmm8,xmm10
+ xor edi,ebp
+ paddd xmm10,xmm0
+ xor ebp,eax
+ pxor xmm1,xmm9
+ add ecx,edx
+ add ebx,DWORD PTR[20+rsp]
+ and edi,ebp
+ xor ebp,eax
+ ror edx,7
+ movdqa xmm9,xmm1
+ mov esi,ecx
+ xor edi,ebp
+ movdqa XMMWORD PTR[rsp],xmm10
+ rol ecx,5
+ add ebx,edi
+ xor esi,edx
+ pslld xmm1,2
+ xor edx,ebp
+ add ebx,ecx
+ psrld xmm9,30
+ add eax,DWORD PTR[24+rsp]
+ and esi,edx
+ xor edx,ebp
+ por xmm1,xmm9
+ ror ecx,7
+ mov edi,ebx
+ xor esi,edx
+ rol ebx,5
+ pshufd xmm10,xmm0,238
+ add eax,esi
+ xor edi,ecx
+ xor ecx,edx
+ add eax,ebx
+ add ebp,DWORD PTR[28+rsp]
+ and edi,ecx
+ xor ecx,edx
+ ror ebx,7
+ mov esi,eax
+ xor edi,ecx
+ rol eax,5
+ add ebp,edi
+ xor esi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ pxor xmm2,xmm6
+ add edx,DWORD PTR[32+rsp]
+ and esi,ebx
+ xor ebx,ecx
+ ror eax,7
+ punpcklqdq xmm10,xmm1
+ mov edi,ebp
+ xor esi,ebx
+ pxor xmm2,xmm3
+ rol ebp,5
+ add edx,esi
+ movdqa xmm9,xmm8
+ xor edi,eax
+ paddd xmm8,xmm1
+ xor eax,ebx
+ pxor xmm2,xmm10
+ add edx,ebp
+ add ecx,DWORD PTR[36+rsp]
+ and edi,eax
+ xor eax,ebx
+ ror ebp,7
+ movdqa xmm10,xmm2
+ mov esi,edx
+ xor edi,eax
+ movdqa XMMWORD PTR[16+rsp],xmm8
+ rol edx,5
+ add ecx,edi
+ xor esi,ebp
+ pslld xmm2,2
+ xor ebp,eax
+ add ecx,edx
+ psrld xmm10,30
+ add ebx,DWORD PTR[40+rsp]
+ and esi,ebp
+ xor ebp,eax
+ por xmm2,xmm10
+ ror edx,7
+ mov edi,ecx
+ xor esi,ebp
+ rol ecx,5
+ pshufd xmm8,xmm1,238
+ add ebx,esi
+ xor edi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[44+rsp]
+ and edi,edx
+ xor edx,ebp
+ ror ecx,7
+ mov esi,ebx
+ xor edi,edx
+ rol ebx,5
+ add eax,edi
+ xor esi,edx
+ add eax,ebx
+ pxor xmm3,xmm7
+ add ebp,DWORD PTR[48+rsp]
+ xor esi,ecx
+ punpcklqdq xmm8,xmm2
+ mov edi,eax
+ rol eax,5
+ pxor xmm3,xmm4
+ add ebp,esi
+ xor edi,ecx
+ movdqa xmm10,xmm9
+ ror ebx,7
+ paddd xmm9,xmm2
+ add ebp,eax
+ pxor xmm3,xmm8
+ add edx,DWORD PTR[52+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ movdqa xmm8,xmm3
+ add edx,edi
+ xor esi,ebx
+ movdqa XMMWORD PTR[32+rsp],xmm9
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[56+rsp]
+ pslld xmm3,2
+ xor esi,eax
+ mov edi,edx
+ psrld xmm8,30
+ rol edx,5
+ add ecx,esi
+ xor edi,eax
+ ror ebp,7
+ por xmm3,xmm8
+ add ecx,edx
+ add ebx,DWORD PTR[60+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ rol ecx,5
+ add ebx,edi
+ xor esi,ebp
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[rsp]
+ xor esi,edx
+ mov edi,ebx
+ rol ebx,5
+ paddd xmm10,xmm3
+ add eax,esi
+ xor edi,edx
+ movdqa XMMWORD PTR[48+rsp],xmm10
+ ror ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[4+rsp]
+ xor edi,ecx
+ mov esi,eax
+ rol eax,5
+ add ebp,edi
+ xor esi,ecx
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[8+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ rol ebp,5
+ add edx,esi
+ xor edi,ebx
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[12+rsp]
+ xor edi,eax
+ mov esi,edx
+ rol edx,5
+ add ecx,edi
+ xor esi,eax
+ ror ebp,7
+ add ecx,edx
+ cmp r9,r10
+ je $L$done_ssse3
+ movdqa xmm6,XMMWORD PTR[64+r14]
+ movdqa xmm9,XMMWORD PTR[((-64))+r14]
+ movdqu xmm0,XMMWORD PTR[r9]
+ movdqu xmm1,XMMWORD PTR[16+r9]
+ movdqu xmm2,XMMWORD PTR[32+r9]
+ movdqu xmm3,XMMWORD PTR[48+r9]
+DB 102,15,56,0,198
+ add r9,64
+ add ebx,DWORD PTR[16+rsp]
+ xor esi,ebp
+ mov edi,ecx
+DB 102,15,56,0,206
+ rol ecx,5
+ add ebx,esi
+ xor edi,ebp
+ ror edx,7
+ paddd xmm0,xmm9
+ add ebx,ecx
+ add eax,DWORD PTR[20+rsp]
+ xor edi,edx
+ mov esi,ebx
+ movdqa XMMWORD PTR[rsp],xmm0
+ rol ebx,5
+ add eax,edi
+ xor esi,edx
+ ror ecx,7
+ psubd xmm0,xmm9
+ add eax,ebx
+ add ebp,DWORD PTR[24+rsp]
+ xor esi,ecx
+ mov edi,eax
+ rol eax,5
+ add ebp,esi
+ xor edi,ecx
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[28+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ add edx,edi
+ xor esi,ebx
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[32+rsp]
+ xor esi,eax
+ mov edi,edx
+DB 102,15,56,0,214
+ rol edx,5
+ add ecx,esi
+ xor edi,eax
+ ror ebp,7
+ paddd xmm1,xmm9
+ add ecx,edx
+ add ebx,DWORD PTR[36+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ movdqa XMMWORD PTR[16+rsp],xmm1
+ rol ecx,5
+ add ebx,edi
+ xor esi,ebp
+ ror edx,7
+ psubd xmm1,xmm9
+ add ebx,ecx
+ add eax,DWORD PTR[40+rsp]
+ xor esi,edx
+ mov edi,ebx
+ rol ebx,5
+ add eax,esi
+ xor edi,edx
+ ror ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[44+rsp]
+ xor edi,ecx
+ mov esi,eax
+ rol eax,5
+ add ebp,edi
+ xor esi,ecx
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[48+rsp]
+ xor esi,ebx
+ mov edi,ebp
+DB 102,15,56,0,222
+ rol ebp,5
+ add edx,esi
+ xor edi,ebx
+ ror eax,7
+ paddd xmm2,xmm9
+ add edx,ebp
+ add ecx,DWORD PTR[52+rsp]
+ xor edi,eax
+ mov esi,edx
+ movdqa XMMWORD PTR[32+rsp],xmm2
+ rol edx,5
+ add ecx,edi
+ xor esi,eax
+ ror ebp,7
+ psubd xmm2,xmm9
+ add ecx,edx
+ add ebx,DWORD PTR[56+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ rol ecx,5
+ add ebx,esi
+ xor edi,ebp
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[60+rsp]
+ xor edi,edx
+ mov esi,ebx
+ rol ebx,5
+ add eax,edi
+ ror ecx,7
+ add eax,ebx
+ add eax,DWORD PTR[r8]
+ add esi,DWORD PTR[4+r8]
+ add ecx,DWORD PTR[8+r8]
+ add edx,DWORD PTR[12+r8]
+ mov DWORD PTR[r8],eax
+ add ebp,DWORD PTR[16+r8]
+ mov DWORD PTR[4+r8],esi
+ mov ebx,esi
+ mov DWORD PTR[8+r8],ecx
+ mov edi,ecx
+ mov DWORD PTR[12+r8],edx
+ xor edi,edx
+ mov DWORD PTR[16+r8],ebp
+ and esi,edi
+ jmp $L$oop_ssse3
+
+ALIGN 16
+$L$done_ssse3::
+ add ebx,DWORD PTR[16+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ rol ecx,5
+ add ebx,esi
+ xor edi,ebp
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[20+rsp]
+ xor edi,edx
+ mov esi,ebx
+ rol ebx,5
+ add eax,edi
+ xor esi,edx
+ ror ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[24+rsp]
+ xor esi,ecx
+ mov edi,eax
+ rol eax,5
+ add ebp,esi
+ xor edi,ecx
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[28+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ rol ebp,5
+ add edx,edi
+ xor esi,ebx
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[32+rsp]
+ xor esi,eax
+ mov edi,edx
+ rol edx,5
+ add ecx,esi
+ xor edi,eax
+ ror ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[36+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ rol ecx,5
+ add ebx,edi
+ xor esi,ebp
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[40+rsp]
+ xor esi,edx
+ mov edi,ebx
+ rol ebx,5
+ add eax,esi
+ xor edi,edx
+ ror ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[44+rsp]
+ xor edi,ecx
+ mov esi,eax
+ rol eax,5
+ add ebp,edi
+ xor esi,ecx
+ ror ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[48+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ rol ebp,5
+ add edx,esi
+ xor edi,ebx
+ ror eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[52+rsp]
+ xor edi,eax
+ mov esi,edx
+ rol edx,5
+ add ecx,edi
+ xor esi,eax
+ ror ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[56+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ rol ecx,5
+ add ebx,esi
+ xor edi,ebp
+ ror edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[60+rsp]
+ xor edi,edx
+ mov esi,ebx
+ rol ebx,5
+ add eax,edi
+ ror ecx,7
+ add eax,ebx
+ add eax,DWORD PTR[r8]
+ add esi,DWORD PTR[4+r8]
+ add ecx,DWORD PTR[8+r8]
+ mov DWORD PTR[r8],eax
+ add edx,DWORD PTR[12+r8]
+ mov DWORD PTR[4+r8],esi
+ add ebp,DWORD PTR[16+r8]
+ mov DWORD PTR[8+r8],ecx
+ mov DWORD PTR[12+r8],edx
+ mov DWORD PTR[16+r8],ebp
+ movaps xmm6,XMMWORD PTR[((-40-96))+r11]
+ movaps xmm7,XMMWORD PTR[((-40-80))+r11]
+ movaps xmm8,XMMWORD PTR[((-40-64))+r11]
+ movaps xmm9,XMMWORD PTR[((-40-48))+r11]
+ movaps xmm10,XMMWORD PTR[((-40-32))+r11]
+ movaps xmm11,XMMWORD PTR[((-40-16))+r11]
+ mov r14,QWORD PTR[((-40))+r11]
+
+ mov r13,QWORD PTR[((-32))+r11]
+
+ mov r12,QWORD PTR[((-24))+r11]
+
+ mov rbp,QWORD PTR[((-16))+r11]
+
+ mov rbx,QWORD PTR[((-8))+r11]
+
+ lea rsp,QWORD PTR[r11]
+
+$L$epilogue_ssse3::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha1_block_data_order_ssse3::
+sha1_block_data_order_ssse3 ENDP
+
+ALIGN 16
+sha1_block_data_order_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha1_block_data_order_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+_avx_shortcut::
+
+ mov r11,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ lea rsp,QWORD PTR[((-160))+rsp]
+ vzeroupper
+ vmovaps XMMWORD PTR[(-40-96)+r11],xmm6
+ vmovaps XMMWORD PTR[(-40-80)+r11],xmm7
+ vmovaps XMMWORD PTR[(-40-64)+r11],xmm8
+ vmovaps XMMWORD PTR[(-40-48)+r11],xmm9
+ vmovaps XMMWORD PTR[(-40-32)+r11],xmm10
+ vmovaps XMMWORD PTR[(-40-16)+r11],xmm11
+$L$prologue_avx::
+ and rsp,-64
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rdx
+
+ shl r10,6
+ add r10,r9
+ lea r14,QWORD PTR[((K_XX_XX+64))]
+
+ mov eax,DWORD PTR[r8]
+ mov ebx,DWORD PTR[4+r8]
+ mov ecx,DWORD PTR[8+r8]
+ mov edx,DWORD PTR[12+r8]
+ mov esi,ebx
+ mov ebp,DWORD PTR[16+r8]
+ mov edi,ecx
+ xor edi,edx
+ and esi,edi
+
+ vmovdqa xmm6,XMMWORD PTR[64+r14]
+ vmovdqa xmm11,XMMWORD PTR[((-64))+r14]
+ vmovdqu xmm0,XMMWORD PTR[r9]
+ vmovdqu xmm1,XMMWORD PTR[16+r9]
+ vmovdqu xmm2,XMMWORD PTR[32+r9]
+ vmovdqu xmm3,XMMWORD PTR[48+r9]
+ vpshufb xmm0,xmm0,xmm6
+ add r9,64
+ vpshufb xmm1,xmm1,xmm6
+ vpshufb xmm2,xmm2,xmm6
+ vpshufb xmm3,xmm3,xmm6
+ vpaddd xmm4,xmm0,xmm11
+ vpaddd xmm5,xmm1,xmm11
+ vpaddd xmm6,xmm2,xmm11
+ vmovdqa XMMWORD PTR[rsp],xmm4
+ vmovdqa XMMWORD PTR[16+rsp],xmm5
+ vmovdqa XMMWORD PTR[32+rsp],xmm6
+ jmp $L$oop_avx
+ALIGN 16
+$L$oop_avx::
+ shrd ebx,ebx,2
+ xor esi,edx
+ vpalignr xmm4,xmm1,xmm0,8
+ mov edi,eax
+ add ebp,DWORD PTR[rsp]
+ vpaddd xmm9,xmm11,xmm3
+ xor ebx,ecx
+ shld eax,eax,5
+ vpsrldq xmm8,xmm3,4
+ add ebp,esi
+ and edi,ebx
+ vpxor xmm4,xmm4,xmm0
+ xor ebx,ecx
+ add ebp,eax
+ vpxor xmm8,xmm8,xmm2
+ shrd eax,eax,7
+ xor edi,ecx
+ mov esi,ebp
+ add edx,DWORD PTR[4+rsp]
+ vpxor xmm4,xmm4,xmm8
+ xor eax,ebx
+ shld ebp,ebp,5
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ add edx,edi
+ and esi,eax
+ vpsrld xmm8,xmm4,31
+ xor eax,ebx
+ add edx,ebp
+ shrd ebp,ebp,7
+ xor esi,ebx
+ vpslldq xmm10,xmm4,12
+ vpaddd xmm4,xmm4,xmm4
+ mov edi,edx
+ add ecx,DWORD PTR[8+rsp]
+ xor ebp,eax
+ shld edx,edx,5
+ vpsrld xmm9,xmm10,30
+ vpor xmm4,xmm4,xmm8
+ add ecx,esi
+ and edi,ebp
+ xor ebp,eax
+ add ecx,edx
+ vpslld xmm10,xmm10,2
+ vpxor xmm4,xmm4,xmm9
+ shrd edx,edx,7
+ xor edi,eax
+ mov esi,ecx
+ add ebx,DWORD PTR[12+rsp]
+ vpxor xmm4,xmm4,xmm10
+ xor edx,ebp
+ shld ecx,ecx,5
+ add ebx,edi
+ and esi,edx
+ xor edx,ebp
+ add ebx,ecx
+ shrd ecx,ecx,7
+ xor esi,ebp
+ vpalignr xmm5,xmm2,xmm1,8
+ mov edi,ebx
+ add eax,DWORD PTR[16+rsp]
+ vpaddd xmm9,xmm11,xmm4
+ xor ecx,edx
+ shld ebx,ebx,5
+ vpsrldq xmm8,xmm4,4
+ add eax,esi
+ and edi,ecx
+ vpxor xmm5,xmm5,xmm1
+ xor ecx,edx
+ add eax,ebx
+ vpxor xmm8,xmm8,xmm3
+ shrd ebx,ebx,7
+ xor edi,edx
+ mov esi,eax
+ add ebp,DWORD PTR[20+rsp]
+ vpxor xmm5,xmm5,xmm8
+ xor ebx,ecx
+ shld eax,eax,5
+ vmovdqa XMMWORD PTR[rsp],xmm9
+ add ebp,edi
+ and esi,ebx
+ vpsrld xmm8,xmm5,31
+ xor ebx,ecx
+ add ebp,eax
+ shrd eax,eax,7
+ xor esi,ecx
+ vpslldq xmm10,xmm5,12
+ vpaddd xmm5,xmm5,xmm5
+ mov edi,ebp
+ add edx,DWORD PTR[24+rsp]
+ xor eax,ebx
+ shld ebp,ebp,5
+ vpsrld xmm9,xmm10,30
+ vpor xmm5,xmm5,xmm8
+ add edx,esi
+ and edi,eax
+ xor eax,ebx
+ add edx,ebp
+ vpslld xmm10,xmm10,2
+ vpxor xmm5,xmm5,xmm9
+ shrd ebp,ebp,7
+ xor edi,ebx
+ mov esi,edx
+ add ecx,DWORD PTR[28+rsp]
+ vpxor xmm5,xmm5,xmm10
+ xor ebp,eax
+ shld edx,edx,5
+ vmovdqa xmm11,XMMWORD PTR[((-32))+r14]
+ add ecx,edi
+ and esi,ebp
+ xor ebp,eax
+ add ecx,edx
+ shrd edx,edx,7
+ xor esi,eax
+ vpalignr xmm6,xmm3,xmm2,8
+ mov edi,ecx
+ add ebx,DWORD PTR[32+rsp]
+ vpaddd xmm9,xmm11,xmm5
+ xor edx,ebp
+ shld ecx,ecx,5
+ vpsrldq xmm8,xmm5,4
+ add ebx,esi
+ and edi,edx
+ vpxor xmm6,xmm6,xmm2
+ xor edx,ebp
+ add ebx,ecx
+ vpxor xmm8,xmm8,xmm4
+ shrd ecx,ecx,7
+ xor edi,ebp
+ mov esi,ebx
+ add eax,DWORD PTR[36+rsp]
+ vpxor xmm6,xmm6,xmm8
+ xor ecx,edx
+ shld ebx,ebx,5
+ vmovdqa XMMWORD PTR[16+rsp],xmm9
+ add eax,edi
+ and esi,ecx
+ vpsrld xmm8,xmm6,31
+ xor ecx,edx
+ add eax,ebx
+ shrd ebx,ebx,7
+ xor esi,edx
+ vpslldq xmm10,xmm6,12
+ vpaddd xmm6,xmm6,xmm6
+ mov edi,eax
+ add ebp,DWORD PTR[40+rsp]
+ xor ebx,ecx
+ shld eax,eax,5
+ vpsrld xmm9,xmm10,30
+ vpor xmm6,xmm6,xmm8
+ add ebp,esi
+ and edi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ vpslld xmm10,xmm10,2
+ vpxor xmm6,xmm6,xmm9
+ shrd eax,eax,7
+ xor edi,ecx
+ mov esi,ebp
+ add edx,DWORD PTR[44+rsp]
+ vpxor xmm6,xmm6,xmm10
+ xor eax,ebx
+ shld ebp,ebp,5
+ add edx,edi
+ and esi,eax
+ xor eax,ebx
+ add edx,ebp
+ shrd ebp,ebp,7
+ xor esi,ebx
+ vpalignr xmm7,xmm4,xmm3,8
+ mov edi,edx
+ add ecx,DWORD PTR[48+rsp]
+ vpaddd xmm9,xmm11,xmm6
+ xor ebp,eax
+ shld edx,edx,5
+ vpsrldq xmm8,xmm6,4
+ add ecx,esi
+ and edi,ebp
+ vpxor xmm7,xmm7,xmm3
+ xor ebp,eax
+ add ecx,edx
+ vpxor xmm8,xmm8,xmm5
+ shrd edx,edx,7
+ xor edi,eax
+ mov esi,ecx
+ add ebx,DWORD PTR[52+rsp]
+ vpxor xmm7,xmm7,xmm8
+ xor edx,ebp
+ shld ecx,ecx,5
+ vmovdqa XMMWORD PTR[32+rsp],xmm9
+ add ebx,edi
+ and esi,edx
+ vpsrld xmm8,xmm7,31
+ xor edx,ebp
+ add ebx,ecx
+ shrd ecx,ecx,7
+ xor esi,ebp
+ vpslldq xmm10,xmm7,12
+ vpaddd xmm7,xmm7,xmm7
+ mov edi,ebx
+ add eax,DWORD PTR[56+rsp]
+ xor ecx,edx
+ shld ebx,ebx,5
+ vpsrld xmm9,xmm10,30
+ vpor xmm7,xmm7,xmm8
+ add eax,esi
+ and edi,ecx
+ xor ecx,edx
+ add eax,ebx
+ vpslld xmm10,xmm10,2
+ vpxor xmm7,xmm7,xmm9
+ shrd ebx,ebx,7
+ xor edi,edx
+ mov esi,eax
+ add ebp,DWORD PTR[60+rsp]
+ vpxor xmm7,xmm7,xmm10
+ xor ebx,ecx
+ shld eax,eax,5
+ add ebp,edi
+ and esi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ vpalignr xmm8,xmm7,xmm6,8
+ vpxor xmm0,xmm0,xmm4
+ shrd eax,eax,7
+ xor esi,ecx
+ mov edi,ebp
+ add edx,DWORD PTR[rsp]
+ vpxor xmm0,xmm0,xmm1
+ xor eax,ebx
+ shld ebp,ebp,5
+ vpaddd xmm9,xmm11,xmm7
+ add edx,esi
+ and edi,eax
+ vpxor xmm0,xmm0,xmm8
+ xor eax,ebx
+ add edx,ebp
+ shrd ebp,ebp,7
+ xor edi,ebx
+ vpsrld xmm8,xmm0,30
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ mov esi,edx
+ add ecx,DWORD PTR[4+rsp]
+ xor ebp,eax
+ shld edx,edx,5
+ vpslld xmm0,xmm0,2
+ add ecx,edi
+ and esi,ebp
+ xor ebp,eax
+ add ecx,edx
+ shrd edx,edx,7
+ xor esi,eax
+ mov edi,ecx
+ add ebx,DWORD PTR[8+rsp]
+ vpor xmm0,xmm0,xmm8
+ xor edx,ebp
+ shld ecx,ecx,5
+ add ebx,esi
+ and edi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[12+rsp]
+ xor edi,ebp
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpalignr xmm8,xmm0,xmm7,8
+ vpxor xmm1,xmm1,xmm5
+ add ebp,DWORD PTR[16+rsp]
+ xor esi,ecx
+ mov edi,eax
+ shld eax,eax,5
+ vpxor xmm1,xmm1,xmm2
+ add ebp,esi
+ xor edi,ecx
+ vpaddd xmm9,xmm11,xmm0
+ shrd ebx,ebx,7
+ add ebp,eax
+ vpxor xmm1,xmm1,xmm8
+ add edx,DWORD PTR[20+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ shld ebp,ebp,5
+ vpsrld xmm8,xmm1,30
+ vmovdqa XMMWORD PTR[rsp],xmm9
+ add edx,edi
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ vpslld xmm1,xmm1,2
+ add ecx,DWORD PTR[24+rsp]
+ xor esi,eax
+ mov edi,edx
+ shld edx,edx,5
+ add ecx,esi
+ xor edi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ vpor xmm1,xmm1,xmm8
+ add ebx,DWORD PTR[28+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ vpalignr xmm8,xmm1,xmm0,8
+ vpxor xmm2,xmm2,xmm6
+ add eax,DWORD PTR[32+rsp]
+ xor esi,edx
+ mov edi,ebx
+ shld ebx,ebx,5
+ vpxor xmm2,xmm2,xmm3
+ add eax,esi
+ xor edi,edx
+ vpaddd xmm9,xmm11,xmm1
+ vmovdqa xmm11,XMMWORD PTR[r14]
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpxor xmm2,xmm2,xmm8
+ add ebp,DWORD PTR[36+rsp]
+ xor edi,ecx
+ mov esi,eax
+ shld eax,eax,5
+ vpsrld xmm8,xmm2,30
+ vmovdqa XMMWORD PTR[16+rsp],xmm9
+ add ebp,edi
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ vpslld xmm2,xmm2,2
+ add edx,DWORD PTR[40+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ shld ebp,ebp,5
+ add edx,esi
+ xor edi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ vpor xmm2,xmm2,xmm8
+ add ecx,DWORD PTR[44+rsp]
+ xor edi,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,edi
+ xor esi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ vpalignr xmm8,xmm2,xmm1,8
+ vpxor xmm3,xmm3,xmm7
+ add ebx,DWORD PTR[48+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ shld ecx,ecx,5
+ vpxor xmm3,xmm3,xmm4
+ add ebx,esi
+ xor edi,ebp
+ vpaddd xmm9,xmm11,xmm2
+ shrd edx,edx,7
+ add ebx,ecx
+ vpxor xmm3,xmm3,xmm8
+ add eax,DWORD PTR[52+rsp]
+ xor edi,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ vpsrld xmm8,xmm3,30
+ vmovdqa XMMWORD PTR[32+rsp],xmm9
+ add eax,edi
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpslld xmm3,xmm3,2
+ add ebp,DWORD PTR[56+rsp]
+ xor esi,ecx
+ mov edi,eax
+ shld eax,eax,5
+ add ebp,esi
+ xor edi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ vpor xmm3,xmm3,xmm8
+ add edx,DWORD PTR[60+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ shld ebp,ebp,5
+ add edx,edi
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ vpalignr xmm8,xmm3,xmm2,8
+ vpxor xmm4,xmm4,xmm0
+ add ecx,DWORD PTR[rsp]
+ xor esi,eax
+ mov edi,edx
+ shld edx,edx,5
+ vpxor xmm4,xmm4,xmm5
+ add ecx,esi
+ xor edi,eax
+ vpaddd xmm9,xmm11,xmm3
+ shrd ebp,ebp,7
+ add ecx,edx
+ vpxor xmm4,xmm4,xmm8
+ add ebx,DWORD PTR[4+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ shld ecx,ecx,5
+ vpsrld xmm8,xmm4,30
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ add ebx,edi
+ xor esi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ vpslld xmm4,xmm4,2
+ add eax,DWORD PTR[8+rsp]
+ xor esi,edx
+ mov edi,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ xor edi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ vpor xmm4,xmm4,xmm8
+ add ebp,DWORD PTR[12+rsp]
+ xor edi,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ vpalignr xmm8,xmm4,xmm3,8
+ vpxor xmm5,xmm5,xmm1
+ add edx,DWORD PTR[16+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ shld ebp,ebp,5
+ vpxor xmm5,xmm5,xmm6
+ add edx,esi
+ xor edi,ebx
+ vpaddd xmm9,xmm11,xmm4
+ shrd eax,eax,7
+ add edx,ebp
+ vpxor xmm5,xmm5,xmm8
+ add ecx,DWORD PTR[20+rsp]
+ xor edi,eax
+ mov esi,edx
+ shld edx,edx,5
+ vpsrld xmm8,xmm5,30
+ vmovdqa XMMWORD PTR[rsp],xmm9
+ add ecx,edi
+ xor esi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ vpslld xmm5,xmm5,2
+ add ebx,DWORD PTR[24+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor edi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ vpor xmm5,xmm5,xmm8
+ add eax,DWORD PTR[28+rsp]
+ shrd ecx,ecx,7
+ mov esi,ebx
+ xor edi,edx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,ecx
+ xor ecx,edx
+ add eax,ebx
+ vpalignr xmm8,xmm5,xmm4,8
+ vpxor xmm6,xmm6,xmm2
+ add ebp,DWORD PTR[32+rsp]
+ and esi,ecx
+ xor ecx,edx
+ shrd ebx,ebx,7
+ vpxor xmm6,xmm6,xmm7
+ mov edi,eax
+ xor esi,ecx
+ vpaddd xmm9,xmm11,xmm5
+ shld eax,eax,5
+ add ebp,esi
+ vpxor xmm6,xmm6,xmm8
+ xor edi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ add edx,DWORD PTR[36+rsp]
+ vpsrld xmm8,xmm6,30
+ vmovdqa XMMWORD PTR[16+rsp],xmm9
+ and edi,ebx
+ xor ebx,ecx
+ shrd eax,eax,7
+ mov esi,ebp
+ vpslld xmm6,xmm6,2
+ xor edi,ebx
+ shld ebp,ebp,5
+ add edx,edi
+ xor esi,eax
+ xor eax,ebx
+ add edx,ebp
+ add ecx,DWORD PTR[40+rsp]
+ and esi,eax
+ vpor xmm6,xmm6,xmm8
+ xor eax,ebx
+ shrd ebp,ebp,7
+ mov edi,edx
+ xor esi,eax
+ shld edx,edx,5
+ add ecx,esi
+ xor edi,ebp
+ xor ebp,eax
+ add ecx,edx
+ add ebx,DWORD PTR[44+rsp]
+ and edi,ebp
+ xor ebp,eax
+ shrd edx,edx,7
+ mov esi,ecx
+ xor edi,ebp
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,edx
+ xor edx,ebp
+ add ebx,ecx
+ vpalignr xmm8,xmm6,xmm5,8
+ vpxor xmm7,xmm7,xmm3
+ add eax,DWORD PTR[48+rsp]
+ and esi,edx
+ xor edx,ebp
+ shrd ecx,ecx,7
+ vpxor xmm7,xmm7,xmm0
+ mov edi,ebx
+ xor esi,edx
+ vpaddd xmm9,xmm11,xmm6
+ vmovdqa xmm11,XMMWORD PTR[32+r14]
+ shld ebx,ebx,5
+ add eax,esi
+ vpxor xmm7,xmm7,xmm8
+ xor edi,ecx
+ xor ecx,edx
+ add eax,ebx
+ add ebp,DWORD PTR[52+rsp]
+ vpsrld xmm8,xmm7,30
+ vmovdqa XMMWORD PTR[32+rsp],xmm9
+ and edi,ecx
+ xor ecx,edx
+ shrd ebx,ebx,7
+ mov esi,eax
+ vpslld xmm7,xmm7,2
+ xor edi,ecx
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ add edx,DWORD PTR[56+rsp]
+ and esi,ebx
+ vpor xmm7,xmm7,xmm8
+ xor ebx,ecx
+ shrd eax,eax,7
+ mov edi,ebp
+ xor esi,ebx
+ shld ebp,ebp,5
+ add edx,esi
+ xor edi,eax
+ xor eax,ebx
+ add edx,ebp
+ add ecx,DWORD PTR[60+rsp]
+ and edi,eax
+ xor eax,ebx
+ shrd ebp,ebp,7
+ mov esi,edx
+ xor edi,eax
+ shld edx,edx,5
+ add ecx,edi
+ xor esi,ebp
+ xor ebp,eax
+ add ecx,edx
+ vpalignr xmm8,xmm7,xmm6,8
+ vpxor xmm0,xmm0,xmm4
+ add ebx,DWORD PTR[rsp]
+ and esi,ebp
+ xor ebp,eax
+ shrd edx,edx,7
+ vpxor xmm0,xmm0,xmm1
+ mov edi,ecx
+ xor esi,ebp
+ vpaddd xmm9,xmm11,xmm7
+ shld ecx,ecx,5
+ add ebx,esi
+ vpxor xmm0,xmm0,xmm8
+ xor edi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[4+rsp]
+ vpsrld xmm8,xmm0,30
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ and edi,edx
+ xor edx,ebp
+ shrd ecx,ecx,7
+ mov esi,ebx
+ vpslld xmm0,xmm0,2
+ xor edi,edx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,ecx
+ xor ecx,edx
+ add eax,ebx
+ add ebp,DWORD PTR[8+rsp]
+ and esi,ecx
+ vpor xmm0,xmm0,xmm8
+ xor ecx,edx
+ shrd ebx,ebx,7
+ mov edi,eax
+ xor esi,ecx
+ shld eax,eax,5
+ add ebp,esi
+ xor edi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ add edx,DWORD PTR[12+rsp]
+ and edi,ebx
+ xor ebx,ecx
+ shrd eax,eax,7
+ mov esi,ebp
+ xor edi,ebx
+ shld ebp,ebp,5
+ add edx,edi
+ xor esi,eax
+ xor eax,ebx
+ add edx,ebp
+ vpalignr xmm8,xmm0,xmm7,8
+ vpxor xmm1,xmm1,xmm5
+ add ecx,DWORD PTR[16+rsp]
+ and esi,eax
+ xor eax,ebx
+ shrd ebp,ebp,7
+ vpxor xmm1,xmm1,xmm2
+ mov edi,edx
+ xor esi,eax
+ vpaddd xmm9,xmm11,xmm0
+ shld edx,edx,5
+ add ecx,esi
+ vpxor xmm1,xmm1,xmm8
+ xor edi,ebp
+ xor ebp,eax
+ add ecx,edx
+ add ebx,DWORD PTR[20+rsp]
+ vpsrld xmm8,xmm1,30
+ vmovdqa XMMWORD PTR[rsp],xmm9
+ and edi,ebp
+ xor ebp,eax
+ shrd edx,edx,7
+ mov esi,ecx
+ vpslld xmm1,xmm1,2
+ xor edi,ebp
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[24+rsp]
+ and esi,edx
+ vpor xmm1,xmm1,xmm8
+ xor edx,ebp
+ shrd ecx,ecx,7
+ mov edi,ebx
+ xor esi,edx
+ shld ebx,ebx,5
+ add eax,esi
+ xor edi,ecx
+ xor ecx,edx
+ add eax,ebx
+ add ebp,DWORD PTR[28+rsp]
+ and edi,ecx
+ xor ecx,edx
+ shrd ebx,ebx,7
+ mov esi,eax
+ xor edi,ecx
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ebx
+ xor ebx,ecx
+ add ebp,eax
+ vpalignr xmm8,xmm1,xmm0,8
+ vpxor xmm2,xmm2,xmm6
+ add edx,DWORD PTR[32+rsp]
+ and esi,ebx
+ xor ebx,ecx
+ shrd eax,eax,7
+ vpxor xmm2,xmm2,xmm3
+ mov edi,ebp
+ xor esi,ebx
+ vpaddd xmm9,xmm11,xmm1
+ shld ebp,ebp,5
+ add edx,esi
+ vpxor xmm2,xmm2,xmm8
+ xor edi,eax
+ xor eax,ebx
+ add edx,ebp
+ add ecx,DWORD PTR[36+rsp]
+ vpsrld xmm8,xmm2,30
+ vmovdqa XMMWORD PTR[16+rsp],xmm9
+ and edi,eax
+ xor eax,ebx
+ shrd ebp,ebp,7
+ mov esi,edx
+ vpslld xmm2,xmm2,2
+ xor edi,eax
+ shld edx,edx,5
+ add ecx,edi
+ xor esi,ebp
+ xor ebp,eax
+ add ecx,edx
+ add ebx,DWORD PTR[40+rsp]
+ and esi,ebp
+ vpor xmm2,xmm2,xmm8
+ xor ebp,eax
+ shrd edx,edx,7
+ mov edi,ecx
+ xor esi,ebp
+ shld ecx,ecx,5
+ add ebx,esi
+ xor edi,edx
+ xor edx,ebp
+ add ebx,ecx
+ add eax,DWORD PTR[44+rsp]
+ and edi,edx
+ xor edx,ebp
+ shrd ecx,ecx,7
+ mov esi,ebx
+ xor edi,edx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,edx
+ add eax,ebx
+ vpalignr xmm8,xmm2,xmm1,8
+ vpxor xmm3,xmm3,xmm7
+ add ebp,DWORD PTR[48+rsp]
+ xor esi,ecx
+ mov edi,eax
+ shld eax,eax,5
+ vpxor xmm3,xmm3,xmm4
+ add ebp,esi
+ xor edi,ecx
+ vpaddd xmm9,xmm11,xmm2
+ shrd ebx,ebx,7
+ add ebp,eax
+ vpxor xmm3,xmm3,xmm8
+ add edx,DWORD PTR[52+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ shld ebp,ebp,5
+ vpsrld xmm8,xmm3,30
+ vmovdqa XMMWORD PTR[32+rsp],xmm9
+ add edx,edi
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ vpslld xmm3,xmm3,2
+ add ecx,DWORD PTR[56+rsp]
+ xor esi,eax
+ mov edi,edx
+ shld edx,edx,5
+ add ecx,esi
+ xor edi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ vpor xmm3,xmm3,xmm8
+ add ebx,DWORD PTR[60+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[rsp]
+ vpaddd xmm9,xmm11,xmm3
+ xor esi,edx
+ mov edi,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ vmovdqa XMMWORD PTR[48+rsp],xmm9
+ xor edi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[4+rsp]
+ xor edi,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[8+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ shld ebp,ebp,5
+ add edx,esi
+ xor edi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[12+rsp]
+ xor edi,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,edi
+ xor esi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ cmp r9,r10
+ je $L$done_avx
+ vmovdqa xmm6,XMMWORD PTR[64+r14]
+ vmovdqa xmm11,XMMWORD PTR[((-64))+r14]
+ vmovdqu xmm0,XMMWORD PTR[r9]
+ vmovdqu xmm1,XMMWORD PTR[16+r9]
+ vmovdqu xmm2,XMMWORD PTR[32+r9]
+ vmovdqu xmm3,XMMWORD PTR[48+r9]
+ vpshufb xmm0,xmm0,xmm6
+ add r9,64
+ add ebx,DWORD PTR[16+rsp]
+ xor esi,ebp
+ vpshufb xmm1,xmm1,xmm6
+ mov edi,ecx
+ shld ecx,ecx,5
+ vpaddd xmm4,xmm0,xmm11
+ add ebx,esi
+ xor edi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ vmovdqa XMMWORD PTR[rsp],xmm4
+ add eax,DWORD PTR[20+rsp]
+ xor edi,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[24+rsp]
+ xor esi,ecx
+ mov edi,eax
+ shld eax,eax,5
+ add ebp,esi
+ xor edi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[28+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ shld ebp,ebp,5
+ add edx,edi
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[32+rsp]
+ xor esi,eax
+ vpshufb xmm2,xmm2,xmm6
+ mov edi,edx
+ shld edx,edx,5
+ vpaddd xmm5,xmm1,xmm11
+ add ecx,esi
+ xor edi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ vmovdqa XMMWORD PTR[16+rsp],xmm5
+ add ebx,DWORD PTR[36+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[40+rsp]
+ xor esi,edx
+ mov edi,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ xor edi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[44+rsp]
+ xor edi,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[48+rsp]
+ xor esi,ebx
+ vpshufb xmm3,xmm3,xmm6
+ mov edi,ebp
+ shld ebp,ebp,5
+ vpaddd xmm6,xmm2,xmm11
+ add edx,esi
+ xor edi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ vmovdqa XMMWORD PTR[32+rsp],xmm6
+ add ecx,DWORD PTR[52+rsp]
+ xor edi,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,edi
+ xor esi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[56+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor edi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[60+rsp]
+ xor edi,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,edi
+ shrd ecx,ecx,7
+ add eax,ebx
+ add eax,DWORD PTR[r8]
+ add esi,DWORD PTR[4+r8]
+ add ecx,DWORD PTR[8+r8]
+ add edx,DWORD PTR[12+r8]
+ mov DWORD PTR[r8],eax
+ add ebp,DWORD PTR[16+r8]
+ mov DWORD PTR[4+r8],esi
+ mov ebx,esi
+ mov DWORD PTR[8+r8],ecx
+ mov edi,ecx
+ mov DWORD PTR[12+r8],edx
+ xor edi,edx
+ mov DWORD PTR[16+r8],ebp
+ and esi,edi
+ jmp $L$oop_avx
+
+ALIGN 16
+$L$done_avx::
+ add ebx,DWORD PTR[16+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor edi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[20+rsp]
+ xor edi,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,edi
+ xor esi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[24+rsp]
+ xor esi,ecx
+ mov edi,eax
+ shld eax,eax,5
+ add ebp,esi
+ xor edi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[28+rsp]
+ xor edi,ebx
+ mov esi,ebp
+ shld ebp,ebp,5
+ add edx,edi
+ xor esi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[32+rsp]
+ xor esi,eax
+ mov edi,edx
+ shld edx,edx,5
+ add ecx,esi
+ xor edi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[36+rsp]
+ xor edi,ebp
+ mov esi,ecx
+ shld ecx,ecx,5
+ add ebx,edi
+ xor esi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[40+rsp]
+ xor esi,edx
+ mov edi,ebx
+ shld ebx,ebx,5
+ add eax,esi
+ xor edi,edx
+ shrd ecx,ecx,7
+ add eax,ebx
+ add ebp,DWORD PTR[44+rsp]
+ xor edi,ecx
+ mov esi,eax
+ shld eax,eax,5
+ add ebp,edi
+ xor esi,ecx
+ shrd ebx,ebx,7
+ add ebp,eax
+ add edx,DWORD PTR[48+rsp]
+ xor esi,ebx
+ mov edi,ebp
+ shld ebp,ebp,5
+ add edx,esi
+ xor edi,ebx
+ shrd eax,eax,7
+ add edx,ebp
+ add ecx,DWORD PTR[52+rsp]
+ xor edi,eax
+ mov esi,edx
+ shld edx,edx,5
+ add ecx,edi
+ xor esi,eax
+ shrd ebp,ebp,7
+ add ecx,edx
+ add ebx,DWORD PTR[56+rsp]
+ xor esi,ebp
+ mov edi,ecx
+ shld ecx,ecx,5
+ add ebx,esi
+ xor edi,ebp
+ shrd edx,edx,7
+ add ebx,ecx
+ add eax,DWORD PTR[60+rsp]
+ xor edi,edx
+ mov esi,ebx
+ shld ebx,ebx,5
+ add eax,edi
+ shrd ecx,ecx,7
+ add eax,ebx
+ vzeroupper
+
+ add eax,DWORD PTR[r8]
+ add esi,DWORD PTR[4+r8]
+ add ecx,DWORD PTR[8+r8]
+ mov DWORD PTR[r8],eax
+ add edx,DWORD PTR[12+r8]
+ mov DWORD PTR[4+r8],esi
+ add ebp,DWORD PTR[16+r8]
+ mov DWORD PTR[8+r8],ecx
+ mov DWORD PTR[12+r8],edx
+ mov DWORD PTR[16+r8],ebp
+ movaps xmm6,XMMWORD PTR[((-40-96))+r11]
+ movaps xmm7,XMMWORD PTR[((-40-80))+r11]
+ movaps xmm8,XMMWORD PTR[((-40-64))+r11]
+ movaps xmm9,XMMWORD PTR[((-40-48))+r11]
+ movaps xmm10,XMMWORD PTR[((-40-32))+r11]
+ movaps xmm11,XMMWORD PTR[((-40-16))+r11]
+ mov r14,QWORD PTR[((-40))+r11]
+
+ mov r13,QWORD PTR[((-32))+r11]
+
+ mov r12,QWORD PTR[((-24))+r11]
+
+ mov rbp,QWORD PTR[((-16))+r11]
+
+ mov rbx,QWORD PTR[((-8))+r11]
+
+ lea rsp,QWORD PTR[r11]
+
+$L$epilogue_avx::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha1_block_data_order_avx::
+sha1_block_data_order_avx ENDP
+
+ALIGN 16
+sha1_block_data_order_avx2 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha1_block_data_order_avx2::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+_avx2_shortcut::
+
+ mov r11,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ vzeroupper
+ lea rsp,QWORD PTR[((-96))+rsp]
+ vmovaps XMMWORD PTR[(-40-96)+r11],xmm6
+ vmovaps XMMWORD PTR[(-40-80)+r11],xmm7
+ vmovaps XMMWORD PTR[(-40-64)+r11],xmm8
+ vmovaps XMMWORD PTR[(-40-48)+r11],xmm9
+ vmovaps XMMWORD PTR[(-40-32)+r11],xmm10
+ vmovaps XMMWORD PTR[(-40-16)+r11],xmm11
+$L$prologue_avx2::
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rdx
+
+ lea rsp,QWORD PTR[((-640))+rsp]
+ shl r10,6
+ lea r13,QWORD PTR[64+r9]
+ and rsp,-128
+ add r10,r9
+ lea r14,QWORD PTR[((K_XX_XX+64))]
+
+ mov eax,DWORD PTR[r8]
+ cmp r13,r10
+ cmovae r13,r9
+ mov ebp,DWORD PTR[4+r8]
+ mov ecx,DWORD PTR[8+r8]
+ mov edx,DWORD PTR[12+r8]
+ mov esi,DWORD PTR[16+r8]
+ vmovdqu ymm6,YMMWORD PTR[64+r14]
+
+ vmovdqu xmm0,XMMWORD PTR[r9]
+ vmovdqu xmm1,XMMWORD PTR[16+r9]
+ vmovdqu xmm2,XMMWORD PTR[32+r9]
+ vmovdqu xmm3,XMMWORD PTR[48+r9]
+ lea r9,QWORD PTR[64+r9]
+ vinserti128 ymm0,ymm0,XMMWORD PTR[r13],1
+ vinserti128 ymm1,ymm1,XMMWORD PTR[16+r13],1
+ vpshufb ymm0,ymm0,ymm6
+ vinserti128 ymm2,ymm2,XMMWORD PTR[32+r13],1
+ vpshufb ymm1,ymm1,ymm6
+ vinserti128 ymm3,ymm3,XMMWORD PTR[48+r13],1
+ vpshufb ymm2,ymm2,ymm6
+ vmovdqu ymm11,YMMWORD PTR[((-64))+r14]
+ vpshufb ymm3,ymm3,ymm6
+
+ vpaddd ymm4,ymm0,ymm11
+ vpaddd ymm5,ymm1,ymm11
+ vmovdqu YMMWORD PTR[rsp],ymm4
+ vpaddd ymm6,ymm2,ymm11
+ vmovdqu YMMWORD PTR[32+rsp],ymm5
+ vpaddd ymm7,ymm3,ymm11
+ vmovdqu YMMWORD PTR[64+rsp],ymm6
+ vmovdqu YMMWORD PTR[96+rsp],ymm7
+ vpalignr ymm4,ymm1,ymm0,8
+ vpsrldq ymm8,ymm3,4
+ vpxor ymm4,ymm4,ymm0
+ vpxor ymm8,ymm8,ymm2
+ vpxor ymm4,ymm4,ymm8
+ vpsrld ymm8,ymm4,31
+ vpslldq ymm10,ymm4,12
+ vpaddd ymm4,ymm4,ymm4
+ vpsrld ymm9,ymm10,30
+ vpor ymm4,ymm4,ymm8
+ vpslld ymm10,ymm10,2
+ vpxor ymm4,ymm4,ymm9
+ vpxor ymm4,ymm4,ymm10
+ vpaddd ymm9,ymm4,ymm11
+ vmovdqu YMMWORD PTR[128+rsp],ymm9
+ vpalignr ymm5,ymm2,ymm1,8
+ vpsrldq ymm8,ymm4,4
+ vpxor ymm5,ymm5,ymm1
+ vpxor ymm8,ymm8,ymm3
+ vpxor ymm5,ymm5,ymm8
+ vpsrld ymm8,ymm5,31
+ vmovdqu ymm11,YMMWORD PTR[((-32))+r14]
+ vpslldq ymm10,ymm5,12
+ vpaddd ymm5,ymm5,ymm5
+ vpsrld ymm9,ymm10,30
+ vpor ymm5,ymm5,ymm8
+ vpslld ymm10,ymm10,2
+ vpxor ymm5,ymm5,ymm9
+ vpxor ymm5,ymm5,ymm10
+ vpaddd ymm9,ymm5,ymm11
+ vmovdqu YMMWORD PTR[160+rsp],ymm9
+ vpalignr ymm6,ymm3,ymm2,8
+ vpsrldq ymm8,ymm5,4
+ vpxor ymm6,ymm6,ymm2
+ vpxor ymm8,ymm8,ymm4
+ vpxor ymm6,ymm6,ymm8
+ vpsrld ymm8,ymm6,31
+ vpslldq ymm10,ymm6,12
+ vpaddd ymm6,ymm6,ymm6
+ vpsrld ymm9,ymm10,30
+ vpor ymm6,ymm6,ymm8
+ vpslld ymm10,ymm10,2
+ vpxor ymm6,ymm6,ymm9
+ vpxor ymm6,ymm6,ymm10
+ vpaddd ymm9,ymm6,ymm11
+ vmovdqu YMMWORD PTR[192+rsp],ymm9
+ vpalignr ymm7,ymm4,ymm3,8
+ vpsrldq ymm8,ymm6,4
+ vpxor ymm7,ymm7,ymm3
+ vpxor ymm8,ymm8,ymm5
+ vpxor ymm7,ymm7,ymm8
+ vpsrld ymm8,ymm7,31
+ vpslldq ymm10,ymm7,12
+ vpaddd ymm7,ymm7,ymm7
+ vpsrld ymm9,ymm10,30
+ vpor ymm7,ymm7,ymm8
+ vpslld ymm10,ymm10,2
+ vpxor ymm7,ymm7,ymm9
+ vpxor ymm7,ymm7,ymm10
+ vpaddd ymm9,ymm7,ymm11
+ vmovdqu YMMWORD PTR[224+rsp],ymm9
+ lea r13,QWORD PTR[128+rsp]
+ jmp $L$oop_avx2
+ALIGN 32
+$L$oop_avx2::
+ rorx ebx,ebp,2
+ andn edi,ebp,edx
+ and ebp,ecx
+ xor ebp,edi
+ jmp $L$align32_1
+ALIGN 32
+$L$align32_1::
+ vpalignr ymm8,ymm7,ymm6,8
+ vpxor ymm0,ymm0,ymm4
+ add esi,DWORD PTR[((-128))+r13]
+ andn edi,eax,ecx
+ vpxor ymm0,ymm0,ymm1
+ add esi,ebp
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ vpxor ymm0,ymm0,ymm8
+ and eax,ebx
+ add esi,r12d
+ xor eax,edi
+ vpsrld ymm8,ymm0,30
+ vpslld ymm0,ymm0,2
+ add edx,DWORD PTR[((-124))+r13]
+ andn edi,esi,ebx
+ add edx,eax
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ and esi,ebp
+ vpor ymm0,ymm0,ymm8
+ add edx,r12d
+ xor esi,edi
+ add ecx,DWORD PTR[((-120))+r13]
+ andn edi,edx,ebp
+ vpaddd ymm9,ymm0,ymm11
+ add ecx,esi
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ and edx,eax
+ vmovdqu YMMWORD PTR[256+rsp],ymm9
+ add ecx,r12d
+ xor edx,edi
+ add ebx,DWORD PTR[((-116))+r13]
+ andn edi,ecx,eax
+ add ebx,edx
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ and ecx,esi
+ add ebx,r12d
+ xor ecx,edi
+ add ebp,DWORD PTR[((-96))+r13]
+ andn edi,ebx,esi
+ add ebp,ecx
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ and ebx,edx
+ add ebp,r12d
+ xor ebx,edi
+ vpalignr ymm8,ymm0,ymm7,8
+ vpxor ymm1,ymm1,ymm5
+ add eax,DWORD PTR[((-92))+r13]
+ andn edi,ebp,edx
+ vpxor ymm1,ymm1,ymm2
+ add eax,ebx
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ vpxor ymm1,ymm1,ymm8
+ and ebp,ecx
+ add eax,r12d
+ xor ebp,edi
+ vpsrld ymm8,ymm1,30
+ vpslld ymm1,ymm1,2
+ add esi,DWORD PTR[((-88))+r13]
+ andn edi,eax,ecx
+ add esi,ebp
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ and eax,ebx
+ vpor ymm1,ymm1,ymm8
+ add esi,r12d
+ xor eax,edi
+ add edx,DWORD PTR[((-84))+r13]
+ andn edi,esi,ebx
+ vpaddd ymm9,ymm1,ymm11
+ add edx,eax
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ and esi,ebp
+ vmovdqu YMMWORD PTR[288+rsp],ymm9
+ add edx,r12d
+ xor esi,edi
+ add ecx,DWORD PTR[((-64))+r13]
+ andn edi,edx,ebp
+ add ecx,esi
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ and edx,eax
+ add ecx,r12d
+ xor edx,edi
+ add ebx,DWORD PTR[((-60))+r13]
+ andn edi,ecx,eax
+ add ebx,edx
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ and ecx,esi
+ add ebx,r12d
+ xor ecx,edi
+ vpalignr ymm8,ymm1,ymm0,8
+ vpxor ymm2,ymm2,ymm6
+ add ebp,DWORD PTR[((-56))+r13]
+ andn edi,ebx,esi
+ vpxor ymm2,ymm2,ymm3
+ vmovdqu ymm11,YMMWORD PTR[r14]
+ add ebp,ecx
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ vpxor ymm2,ymm2,ymm8
+ and ebx,edx
+ add ebp,r12d
+ xor ebx,edi
+ vpsrld ymm8,ymm2,30
+ vpslld ymm2,ymm2,2
+ add eax,DWORD PTR[((-52))+r13]
+ andn edi,ebp,edx
+ add eax,ebx
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ and ebp,ecx
+ vpor ymm2,ymm2,ymm8
+ add eax,r12d
+ xor ebp,edi
+ add esi,DWORD PTR[((-32))+r13]
+ andn edi,eax,ecx
+ vpaddd ymm9,ymm2,ymm11
+ add esi,ebp
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ and eax,ebx
+ vmovdqu YMMWORD PTR[320+rsp],ymm9
+ add esi,r12d
+ xor eax,edi
+ add edx,DWORD PTR[((-28))+r13]
+ andn edi,esi,ebx
+ add edx,eax
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ and esi,ebp
+ add edx,r12d
+ xor esi,edi
+ add ecx,DWORD PTR[((-24))+r13]
+ andn edi,edx,ebp
+ add ecx,esi
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ and edx,eax
+ add ecx,r12d
+ xor edx,edi
+ vpalignr ymm8,ymm2,ymm1,8
+ vpxor ymm3,ymm3,ymm7
+ add ebx,DWORD PTR[((-20))+r13]
+ andn edi,ecx,eax
+ vpxor ymm3,ymm3,ymm4
+ add ebx,edx
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ vpxor ymm3,ymm3,ymm8
+ and ecx,esi
+ add ebx,r12d
+ xor ecx,edi
+ vpsrld ymm8,ymm3,30
+ vpslld ymm3,ymm3,2
+ add ebp,DWORD PTR[r13]
+ andn edi,ebx,esi
+ add ebp,ecx
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ and ebx,edx
+ vpor ymm3,ymm3,ymm8
+ add ebp,r12d
+ xor ebx,edi
+ add eax,DWORD PTR[4+r13]
+ andn edi,ebp,edx
+ vpaddd ymm9,ymm3,ymm11
+ add eax,ebx
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ and ebp,ecx
+ vmovdqu YMMWORD PTR[352+rsp],ymm9
+ add eax,r12d
+ xor ebp,edi
+ add esi,DWORD PTR[8+r13]
+ andn edi,eax,ecx
+ add esi,ebp
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ and eax,ebx
+ add esi,r12d
+ xor eax,edi
+ add edx,DWORD PTR[12+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ vpalignr ymm8,ymm3,ymm2,8
+ vpxor ymm4,ymm4,ymm0
+ add ecx,DWORD PTR[32+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ vpxor ymm4,ymm4,ymm5
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ vpxor ymm4,ymm4,ymm8
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[36+r13]
+ vpsrld ymm8,ymm4,30
+ vpslld ymm4,ymm4,2
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ vpor ymm4,ymm4,ymm8
+ add ebp,DWORD PTR[40+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ vpaddd ymm9,ymm4,ymm11
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ add eax,DWORD PTR[44+r13]
+ vmovdqu YMMWORD PTR[384+rsp],ymm9
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ add esi,DWORD PTR[64+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ vpalignr ymm8,ymm4,ymm3,8
+ vpxor ymm5,ymm5,ymm1
+ add edx,DWORD PTR[68+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ vpxor ymm5,ymm5,ymm6
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ vpxor ymm5,ymm5,ymm8
+ add edx,r12d
+ xor esi,ebx
+ add ecx,DWORD PTR[72+r13]
+ vpsrld ymm8,ymm5,30
+ vpslld ymm5,ymm5,2
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ vpor ymm5,ymm5,ymm8
+ add ebx,DWORD PTR[76+r13]
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ vpaddd ymm9,ymm5,ymm11
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ add ebp,DWORD PTR[96+r13]
+ vmovdqu YMMWORD PTR[416+rsp],ymm9
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ add eax,DWORD PTR[100+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ vpalignr ymm8,ymm5,ymm4,8
+ vpxor ymm6,ymm6,ymm2
+ add esi,DWORD PTR[104+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ vpxor ymm6,ymm6,ymm7
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ vpxor ymm6,ymm6,ymm8
+ add esi,r12d
+ xor eax,ecx
+ add edx,DWORD PTR[108+r13]
+ lea r13,QWORD PTR[256+r13]
+ vpsrld ymm8,ymm6,30
+ vpslld ymm6,ymm6,2
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ vpor ymm6,ymm6,ymm8
+ add ecx,DWORD PTR[((-128))+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ vpaddd ymm9,ymm6,ymm11
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[((-124))+r13]
+ vmovdqu YMMWORD PTR[448+rsp],ymm9
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ add ebp,DWORD PTR[((-120))+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ vpalignr ymm8,ymm6,ymm5,8
+ vpxor ymm7,ymm7,ymm3
+ add eax,DWORD PTR[((-116))+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ vpxor ymm7,ymm7,ymm0
+ vmovdqu ymm11,YMMWORD PTR[32+r14]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ vpxor ymm7,ymm7,ymm8
+ add eax,r12d
+ xor ebp,edx
+ add esi,DWORD PTR[((-96))+r13]
+ vpsrld ymm8,ymm7,30
+ vpslld ymm7,ymm7,2
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ vpor ymm7,ymm7,ymm8
+ add edx,DWORD PTR[((-92))+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ vpaddd ymm9,ymm7,ymm11
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ add ecx,DWORD PTR[((-88))+r13]
+ vmovdqu YMMWORD PTR[480+rsp],ymm9
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[((-84))+r13]
+ mov edi,esi
+ xor edi,eax
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ and ecx,edi
+ jmp $L$align32_2
+ALIGN 32
+$L$align32_2::
+ vpalignr ymm8,ymm7,ymm6,8
+ vpxor ymm0,ymm0,ymm4
+ add ebp,DWORD PTR[((-64))+r13]
+ xor ecx,esi
+ vpxor ymm0,ymm0,ymm1
+ mov edi,edx
+ xor edi,esi
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ vpxor ymm0,ymm0,ymm8
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ vpsrld ymm8,ymm0,30
+ vpslld ymm0,ymm0,2
+ add ebp,r12d
+ and ebx,edi
+ add eax,DWORD PTR[((-60))+r13]
+ xor ebx,edx
+ mov edi,ecx
+ xor edi,edx
+ vpor ymm0,ymm0,ymm8
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ vpaddd ymm9,ymm0,ymm11
+ add eax,r12d
+ and ebp,edi
+ add esi,DWORD PTR[((-56))+r13]
+ xor ebp,ecx
+ vmovdqu YMMWORD PTR[512+rsp],ymm9
+ mov edi,ebx
+ xor edi,ecx
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ and eax,edi
+ add edx,DWORD PTR[((-52))+r13]
+ xor eax,ebx
+ mov edi,ebp
+ xor edi,ebx
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ and esi,edi
+ add ecx,DWORD PTR[((-32))+r13]
+ xor esi,ebp
+ mov edi,eax
+ xor edi,ebp
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ and edx,edi
+ vpalignr ymm8,ymm0,ymm7,8
+ vpxor ymm1,ymm1,ymm5
+ add ebx,DWORD PTR[((-28))+r13]
+ xor edx,eax
+ vpxor ymm1,ymm1,ymm2
+ mov edi,esi
+ xor edi,eax
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ vpxor ymm1,ymm1,ymm8
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ vpsrld ymm8,ymm1,30
+ vpslld ymm1,ymm1,2
+ add ebx,r12d
+ and ecx,edi
+ add ebp,DWORD PTR[((-24))+r13]
+ xor ecx,esi
+ mov edi,edx
+ xor edi,esi
+ vpor ymm1,ymm1,ymm8
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ vpaddd ymm9,ymm1,ymm11
+ add ebp,r12d
+ and ebx,edi
+ add eax,DWORD PTR[((-20))+r13]
+ xor ebx,edx
+ vmovdqu YMMWORD PTR[544+rsp],ymm9
+ mov edi,ecx
+ xor edi,edx
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ and ebp,edi
+ add esi,DWORD PTR[r13]
+ xor ebp,ecx
+ mov edi,ebx
+ xor edi,ecx
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ and eax,edi
+ add edx,DWORD PTR[4+r13]
+ xor eax,ebx
+ mov edi,ebp
+ xor edi,ebx
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ and esi,edi
+ vpalignr ymm8,ymm1,ymm0,8
+ vpxor ymm2,ymm2,ymm6
+ add ecx,DWORD PTR[8+r13]
+ xor esi,ebp
+ vpxor ymm2,ymm2,ymm3
+ mov edi,eax
+ xor edi,ebp
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ vpxor ymm2,ymm2,ymm8
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ vpsrld ymm8,ymm2,30
+ vpslld ymm2,ymm2,2
+ add ecx,r12d
+ and edx,edi
+ add ebx,DWORD PTR[12+r13]
+ xor edx,eax
+ mov edi,esi
+ xor edi,eax
+ vpor ymm2,ymm2,ymm8
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ vpaddd ymm9,ymm2,ymm11
+ add ebx,r12d
+ and ecx,edi
+ add ebp,DWORD PTR[32+r13]
+ xor ecx,esi
+ vmovdqu YMMWORD PTR[576+rsp],ymm9
+ mov edi,edx
+ xor edi,esi
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ and ebx,edi
+ add eax,DWORD PTR[36+r13]
+ xor ebx,edx
+ mov edi,ecx
+ xor edi,edx
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ and ebp,edi
+ add esi,DWORD PTR[40+r13]
+ xor ebp,ecx
+ mov edi,ebx
+ xor edi,ecx
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ and eax,edi
+ vpalignr ymm8,ymm2,ymm1,8
+ vpxor ymm3,ymm3,ymm7
+ add edx,DWORD PTR[44+r13]
+ xor eax,ebx
+ vpxor ymm3,ymm3,ymm4
+ mov edi,ebp
+ xor edi,ebx
+ lea edx,DWORD PTR[rax*1+rdx]
+ vpxor ymm3,ymm3,ymm8
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ vpsrld ymm8,ymm3,30
+ vpslld ymm3,ymm3,2
+ add edx,r12d
+ and esi,edi
+ add ecx,DWORD PTR[64+r13]
+ xor esi,ebp
+ mov edi,eax
+ xor edi,ebp
+ vpor ymm3,ymm3,ymm8
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ vpaddd ymm9,ymm3,ymm11
+ add ecx,r12d
+ and edx,edi
+ add ebx,DWORD PTR[68+r13]
+ xor edx,eax
+ vmovdqu YMMWORD PTR[608+rsp],ymm9
+ mov edi,esi
+ xor edi,eax
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ and ecx,edi
+ add ebp,DWORD PTR[72+r13]
+ xor ecx,esi
+ mov edi,edx
+ xor edi,esi
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ and ebx,edi
+ add eax,DWORD PTR[76+r13]
+ xor ebx,edx
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ add esi,DWORD PTR[96+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ add edx,DWORD PTR[100+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ add ecx,DWORD PTR[104+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[108+r13]
+ lea r13,QWORD PTR[256+r13]
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ add ebp,DWORD PTR[((-128))+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ add eax,DWORD PTR[((-124))+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ add esi,DWORD PTR[((-120))+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ add edx,DWORD PTR[((-116))+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ add ecx,DWORD PTR[((-96))+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[((-92))+r13]
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ add ebp,DWORD PTR[((-88))+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ add eax,DWORD PTR[((-84))+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ add esi,DWORD PTR[((-64))+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ add edx,DWORD PTR[((-60))+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ add ecx,DWORD PTR[((-56))+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[((-52))+r13]
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ add ebp,DWORD PTR[((-32))+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ add eax,DWORD PTR[((-28))+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ add esi,DWORD PTR[((-24))+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ add edx,DWORD PTR[((-20))+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ add edx,r12d
+ lea r13,QWORD PTR[128+r9]
+ lea rdi,QWORD PTR[128+r9]
+ cmp r13,r10
+ cmovae r13,r9
+
+
+ add edx,DWORD PTR[r8]
+ add esi,DWORD PTR[4+r8]
+ add ebp,DWORD PTR[8+r8]
+ mov DWORD PTR[r8],edx
+ add ebx,DWORD PTR[12+r8]
+ mov DWORD PTR[4+r8],esi
+ mov eax,edx
+ add ecx,DWORD PTR[16+r8]
+ mov r12d,ebp
+ mov DWORD PTR[8+r8],ebp
+ mov edx,ebx
+
+ mov DWORD PTR[12+r8],ebx
+ mov ebp,esi
+ mov DWORD PTR[16+r8],ecx
+
+ mov esi,ecx
+ mov ecx,r12d
+
+
+ cmp r9,r10
+ je $L$done_avx2
+ vmovdqu ymm6,YMMWORD PTR[64+r14]
+ cmp rdi,r10
+ ja $L$ast_avx2
+
+ vmovdqu xmm0,XMMWORD PTR[((-64))+rdi]
+ vmovdqu xmm1,XMMWORD PTR[((-48))+rdi]
+ vmovdqu xmm2,XMMWORD PTR[((-32))+rdi]
+ vmovdqu xmm3,XMMWORD PTR[((-16))+rdi]
+ vinserti128 ymm0,ymm0,XMMWORD PTR[r13],1
+ vinserti128 ymm1,ymm1,XMMWORD PTR[16+r13],1
+ vinserti128 ymm2,ymm2,XMMWORD PTR[32+r13],1
+ vinserti128 ymm3,ymm3,XMMWORD PTR[48+r13],1
+ jmp $L$ast_avx2
+
+ALIGN 32
+$L$ast_avx2::
+ lea r13,QWORD PTR[((128+16))+rsp]
+ rorx ebx,ebp,2
+ andn edi,ebp,edx
+ and ebp,ecx
+ xor ebp,edi
+ sub r9,-128
+ add esi,DWORD PTR[((-128))+r13]
+ andn edi,eax,ecx
+ add esi,ebp
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ and eax,ebx
+ add esi,r12d
+ xor eax,edi
+ add edx,DWORD PTR[((-124))+r13]
+ andn edi,esi,ebx
+ add edx,eax
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ and esi,ebp
+ add edx,r12d
+ xor esi,edi
+ add ecx,DWORD PTR[((-120))+r13]
+ andn edi,edx,ebp
+ add ecx,esi
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ and edx,eax
+ add ecx,r12d
+ xor edx,edi
+ add ebx,DWORD PTR[((-116))+r13]
+ andn edi,ecx,eax
+ add ebx,edx
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ and ecx,esi
+ add ebx,r12d
+ xor ecx,edi
+ add ebp,DWORD PTR[((-96))+r13]
+ andn edi,ebx,esi
+ add ebp,ecx
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ and ebx,edx
+ add ebp,r12d
+ xor ebx,edi
+ add eax,DWORD PTR[((-92))+r13]
+ andn edi,ebp,edx
+ add eax,ebx
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ and ebp,ecx
+ add eax,r12d
+ xor ebp,edi
+ add esi,DWORD PTR[((-88))+r13]
+ andn edi,eax,ecx
+ add esi,ebp
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ and eax,ebx
+ add esi,r12d
+ xor eax,edi
+ add edx,DWORD PTR[((-84))+r13]
+ andn edi,esi,ebx
+ add edx,eax
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ and esi,ebp
+ add edx,r12d
+ xor esi,edi
+ add ecx,DWORD PTR[((-64))+r13]
+ andn edi,edx,ebp
+ add ecx,esi
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ and edx,eax
+ add ecx,r12d
+ xor edx,edi
+ add ebx,DWORD PTR[((-60))+r13]
+ andn edi,ecx,eax
+ add ebx,edx
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ and ecx,esi
+ add ebx,r12d
+ xor ecx,edi
+ add ebp,DWORD PTR[((-56))+r13]
+ andn edi,ebx,esi
+ add ebp,ecx
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ and ebx,edx
+ add ebp,r12d
+ xor ebx,edi
+ add eax,DWORD PTR[((-52))+r13]
+ andn edi,ebp,edx
+ add eax,ebx
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ and ebp,ecx
+ add eax,r12d
+ xor ebp,edi
+ add esi,DWORD PTR[((-32))+r13]
+ andn edi,eax,ecx
+ add esi,ebp
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ and eax,ebx
+ add esi,r12d
+ xor eax,edi
+ add edx,DWORD PTR[((-28))+r13]
+ andn edi,esi,ebx
+ add edx,eax
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ and esi,ebp
+ add edx,r12d
+ xor esi,edi
+ add ecx,DWORD PTR[((-24))+r13]
+ andn edi,edx,ebp
+ add ecx,esi
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ and edx,eax
+ add ecx,r12d
+ xor edx,edi
+ add ebx,DWORD PTR[((-20))+r13]
+ andn edi,ecx,eax
+ add ebx,edx
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ and ecx,esi
+ add ebx,r12d
+ xor ecx,edi
+ add ebp,DWORD PTR[r13]
+ andn edi,ebx,esi
+ add ebp,ecx
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ and ebx,edx
+ add ebp,r12d
+ xor ebx,edi
+ add eax,DWORD PTR[4+r13]
+ andn edi,ebp,edx
+ add eax,ebx
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ and ebp,ecx
+ add eax,r12d
+ xor ebp,edi
+ add esi,DWORD PTR[8+r13]
+ andn edi,eax,ecx
+ add esi,ebp
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ and eax,ebx
+ add esi,r12d
+ xor eax,edi
+ add edx,DWORD PTR[12+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ add ecx,DWORD PTR[32+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[36+r13]
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ add ebp,DWORD PTR[40+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ add eax,DWORD PTR[44+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ add esi,DWORD PTR[64+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ vmovdqu ymm11,YMMWORD PTR[((-64))+r14]
+ vpshufb ymm0,ymm0,ymm6
+ add edx,DWORD PTR[68+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ add ecx,DWORD PTR[72+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[76+r13]
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ add ebp,DWORD PTR[96+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ add eax,DWORD PTR[100+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ vpshufb ymm1,ymm1,ymm6
+ vpaddd ymm8,ymm0,ymm11
+ add esi,DWORD PTR[104+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ add edx,DWORD PTR[108+r13]
+ lea r13,QWORD PTR[256+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ add ecx,DWORD PTR[((-128))+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[((-124))+r13]
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ add ebp,DWORD PTR[((-120))+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ vmovdqu YMMWORD PTR[rsp],ymm8
+ vpshufb ymm2,ymm2,ymm6
+ vpaddd ymm9,ymm1,ymm11
+ add eax,DWORD PTR[((-116))+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ add esi,DWORD PTR[((-96))+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ add edx,DWORD PTR[((-92))+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ add ecx,DWORD PTR[((-88))+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[((-84))+r13]
+ mov edi,esi
+ xor edi,eax
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ and ecx,edi
+ vmovdqu YMMWORD PTR[32+rsp],ymm9
+ vpshufb ymm3,ymm3,ymm6
+ vpaddd ymm6,ymm2,ymm11
+ add ebp,DWORD PTR[((-64))+r13]
+ xor ecx,esi
+ mov edi,edx
+ xor edi,esi
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ and ebx,edi
+ add eax,DWORD PTR[((-60))+r13]
+ xor ebx,edx
+ mov edi,ecx
+ xor edi,edx
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ and ebp,edi
+ add esi,DWORD PTR[((-56))+r13]
+ xor ebp,ecx
+ mov edi,ebx
+ xor edi,ecx
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ and eax,edi
+ add edx,DWORD PTR[((-52))+r13]
+ xor eax,ebx
+ mov edi,ebp
+ xor edi,ebx
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ and esi,edi
+ add ecx,DWORD PTR[((-32))+r13]
+ xor esi,ebp
+ mov edi,eax
+ xor edi,ebp
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ and edx,edi
+ jmp $L$align32_3
+ALIGN 32
+$L$align32_3::
+ vmovdqu YMMWORD PTR[64+rsp],ymm6
+ vpaddd ymm7,ymm3,ymm11
+ add ebx,DWORD PTR[((-28))+r13]
+ xor edx,eax
+ mov edi,esi
+ xor edi,eax
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ and ecx,edi
+ add ebp,DWORD PTR[((-24))+r13]
+ xor ecx,esi
+ mov edi,edx
+ xor edi,esi
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ and ebx,edi
+ add eax,DWORD PTR[((-20))+r13]
+ xor ebx,edx
+ mov edi,ecx
+ xor edi,edx
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ and ebp,edi
+ add esi,DWORD PTR[r13]
+ xor ebp,ecx
+ mov edi,ebx
+ xor edi,ecx
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ and eax,edi
+ add edx,DWORD PTR[4+r13]
+ xor eax,ebx
+ mov edi,ebp
+ xor edi,ebx
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ and esi,edi
+ vmovdqu YMMWORD PTR[96+rsp],ymm7
+ add ecx,DWORD PTR[8+r13]
+ xor esi,ebp
+ mov edi,eax
+ xor edi,ebp
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ and edx,edi
+ add ebx,DWORD PTR[12+r13]
+ xor edx,eax
+ mov edi,esi
+ xor edi,eax
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ and ecx,edi
+ add ebp,DWORD PTR[32+r13]
+ xor ecx,esi
+ mov edi,edx
+ xor edi,esi
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ and ebx,edi
+ add eax,DWORD PTR[36+r13]
+ xor ebx,edx
+ mov edi,ecx
+ xor edi,edx
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ and ebp,edi
+ add esi,DWORD PTR[40+r13]
+ xor ebp,ecx
+ mov edi,ebx
+ xor edi,ecx
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ and eax,edi
+ vpalignr ymm4,ymm1,ymm0,8
+ add edx,DWORD PTR[44+r13]
+ xor eax,ebx
+ mov edi,ebp
+ xor edi,ebx
+ vpsrldq ymm8,ymm3,4
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ vpxor ymm4,ymm4,ymm0
+ vpxor ymm8,ymm8,ymm2
+ xor esi,ebp
+ add edx,r12d
+ vpxor ymm4,ymm4,ymm8
+ and esi,edi
+ add ecx,DWORD PTR[64+r13]
+ xor esi,ebp
+ mov edi,eax
+ vpsrld ymm8,ymm4,31
+ xor edi,ebp
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ vpslldq ymm10,ymm4,12
+ vpaddd ymm4,ymm4,ymm4
+ rorx esi,edx,2
+ xor edx,eax
+ vpsrld ymm9,ymm10,30
+ vpor ymm4,ymm4,ymm8
+ add ecx,r12d
+ and edx,edi
+ vpslld ymm10,ymm10,2
+ vpxor ymm4,ymm4,ymm9
+ add ebx,DWORD PTR[68+r13]
+ xor edx,eax
+ vpxor ymm4,ymm4,ymm10
+ mov edi,esi
+ xor edi,eax
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ vpaddd ymm9,ymm4,ymm11
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ vmovdqu YMMWORD PTR[128+rsp],ymm9
+ add ebx,r12d
+ and ecx,edi
+ add ebp,DWORD PTR[72+r13]
+ xor ecx,esi
+ mov edi,edx
+ xor edi,esi
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ and ebx,edi
+ add eax,DWORD PTR[76+r13]
+ xor ebx,edx
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ vpalignr ymm5,ymm2,ymm1,8
+ add esi,DWORD PTR[96+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ vpsrldq ymm8,ymm4,4
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ vpxor ymm5,ymm5,ymm1
+ vpxor ymm8,ymm8,ymm3
+ add edx,DWORD PTR[100+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ vpxor ymm5,ymm5,ymm8
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ xor esi,ebp
+ add edx,r12d
+ vpsrld ymm8,ymm5,31
+ vmovdqu ymm11,YMMWORD PTR[((-32))+r14]
+ xor esi,ebx
+ add ecx,DWORD PTR[104+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ vpslldq ymm10,ymm5,12
+ vpaddd ymm5,ymm5,ymm5
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ vpsrld ymm9,ymm10,30
+ vpor ymm5,ymm5,ymm8
+ xor edx,eax
+ add ecx,r12d
+ vpslld ymm10,ymm10,2
+ vpxor ymm5,ymm5,ymm9
+ xor edx,ebp
+ add ebx,DWORD PTR[108+r13]
+ lea r13,QWORD PTR[256+r13]
+ vpxor ymm5,ymm5,ymm10
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ vpaddd ymm9,ymm5,ymm11
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ vmovdqu YMMWORD PTR[160+rsp],ymm9
+ add ebp,DWORD PTR[((-128))+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ vpalignr ymm6,ymm3,ymm2,8
+ add eax,DWORD PTR[((-124))+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ vpsrldq ymm8,ymm5,4
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ vpxor ymm6,ymm6,ymm2
+ vpxor ymm8,ymm8,ymm4
+ add esi,DWORD PTR[((-120))+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ vpxor ymm6,ymm6,ymm8
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ vpsrld ymm8,ymm6,31
+ xor eax,ecx
+ add edx,DWORD PTR[((-116))+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ vpslldq ymm10,ymm6,12
+ vpaddd ymm6,ymm6,ymm6
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ vpsrld ymm9,ymm10,30
+ vpor ymm6,ymm6,ymm8
+ xor esi,ebp
+ add edx,r12d
+ vpslld ymm10,ymm10,2
+ vpxor ymm6,ymm6,ymm9
+ xor esi,ebx
+ add ecx,DWORD PTR[((-96))+r13]
+ vpxor ymm6,ymm6,ymm10
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ vpaddd ymm9,ymm6,ymm11
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ vmovdqu YMMWORD PTR[192+rsp],ymm9
+ add ebx,DWORD PTR[((-92))+r13]
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ vpalignr ymm7,ymm4,ymm3,8
+ add ebp,DWORD PTR[((-88))+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ vpsrldq ymm8,ymm6,4
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ vpxor ymm7,ymm7,ymm3
+ vpxor ymm8,ymm8,ymm5
+ add eax,DWORD PTR[((-84))+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ vpxor ymm7,ymm7,ymm8
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ vpsrld ymm8,ymm7,31
+ xor ebp,edx
+ add esi,DWORD PTR[((-64))+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ vpslldq ymm10,ymm7,12
+ vpaddd ymm7,ymm7,ymm7
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ vpsrld ymm9,ymm10,30
+ vpor ymm7,ymm7,ymm8
+ xor eax,ebx
+ add esi,r12d
+ vpslld ymm10,ymm10,2
+ vpxor ymm7,ymm7,ymm9
+ xor eax,ecx
+ add edx,DWORD PTR[((-60))+r13]
+ vpxor ymm7,ymm7,ymm10
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ rorx eax,esi,2
+ vpaddd ymm9,ymm7,ymm11
+ xor esi,ebp
+ add edx,r12d
+ xor esi,ebx
+ vmovdqu YMMWORD PTR[224+rsp],ymm9
+ add ecx,DWORD PTR[((-56))+r13]
+ lea ecx,DWORD PTR[rsi*1+rcx]
+ rorx r12d,edx,27
+ rorx esi,edx,2
+ xor edx,eax
+ add ecx,r12d
+ xor edx,ebp
+ add ebx,DWORD PTR[((-52))+r13]
+ lea ebx,DWORD PTR[rdx*1+rbx]
+ rorx r12d,ecx,27
+ rorx edx,ecx,2
+ xor ecx,esi
+ add ebx,r12d
+ xor ecx,eax
+ add ebp,DWORD PTR[((-32))+r13]
+ lea ebp,DWORD PTR[rbp*1+rcx]
+ rorx r12d,ebx,27
+ rorx ecx,ebx,2
+ xor ebx,edx
+ add ebp,r12d
+ xor ebx,esi
+ add eax,DWORD PTR[((-28))+r13]
+ lea eax,DWORD PTR[rbx*1+rax]
+ rorx r12d,ebp,27
+ rorx ebx,ebp,2
+ xor ebp,ecx
+ add eax,r12d
+ xor ebp,edx
+ add esi,DWORD PTR[((-24))+r13]
+ lea esi,DWORD PTR[rbp*1+rsi]
+ rorx r12d,eax,27
+ rorx ebp,eax,2
+ xor eax,ebx
+ add esi,r12d
+ xor eax,ecx
+ add edx,DWORD PTR[((-20))+r13]
+ lea edx,DWORD PTR[rax*1+rdx]
+ rorx r12d,esi,27
+ add edx,r12d
+ lea r13,QWORD PTR[128+rsp]
+
+
+ add edx,DWORD PTR[r8]
+ add esi,DWORD PTR[4+r8]
+ add ebp,DWORD PTR[8+r8]
+ mov DWORD PTR[r8],edx
+ add ebx,DWORD PTR[12+r8]
+ mov DWORD PTR[4+r8],esi
+ mov eax,edx
+ add ecx,DWORD PTR[16+r8]
+ mov r12d,ebp
+ mov DWORD PTR[8+r8],ebp
+ mov edx,ebx
+
+ mov DWORD PTR[12+r8],ebx
+ mov ebp,esi
+ mov DWORD PTR[16+r8],ecx
+
+ mov esi,ecx
+ mov ecx,r12d
+
+
+ cmp r9,r10
+ jbe $L$oop_avx2
+
+$L$done_avx2::
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-40-96))+r11]
+ movaps xmm7,XMMWORD PTR[((-40-80))+r11]
+ movaps xmm8,XMMWORD PTR[((-40-64))+r11]
+ movaps xmm9,XMMWORD PTR[((-40-48))+r11]
+ movaps xmm10,XMMWORD PTR[((-40-32))+r11]
+ movaps xmm11,XMMWORD PTR[((-40-16))+r11]
+ mov r14,QWORD PTR[((-40))+r11]
+
+ mov r13,QWORD PTR[((-32))+r11]
+
+ mov r12,QWORD PTR[((-24))+r11]
+
+ mov rbp,QWORD PTR[((-16))+r11]
+
+ mov rbx,QWORD PTR[((-8))+r11]
+
+ lea rsp,QWORD PTR[r11]
+
+$L$epilogue_avx2::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha1_block_data_order_avx2::
+sha1_block_data_order_avx2 ENDP
+ALIGN 64
+K_XX_XX::
+ DD 05a827999h,05a827999h,05a827999h,05a827999h
+ DD 05a827999h,05a827999h,05a827999h,05a827999h
+ DD 06ed9eba1h,06ed9eba1h,06ed9eba1h,06ed9eba1h
+ DD 06ed9eba1h,06ed9eba1h,06ed9eba1h,06ed9eba1h
+ DD 08f1bbcdch,08f1bbcdch,08f1bbcdch,08f1bbcdch
+ DD 08f1bbcdch,08f1bbcdch,08f1bbcdch,08f1bbcdch
+ DD 0ca62c1d6h,0ca62c1d6h,0ca62c1d6h,0ca62c1d6h
+ DD 0ca62c1d6h,0ca62c1d6h,0ca62c1d6h,0ca62c1d6h
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+DB 0fh,0eh,0dh,0ch,0bh,0ah,09h,08h,07h,06h,05h,04h,03h,02h,01h,00h
+DB 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115
+DB 102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44
+DB 32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60
+DB 97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114
+DB 103,62,0
+ALIGN 64
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$prologue]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea r10,QWORD PTR[$L$epilogue]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ mov rax,QWORD PTR[64+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+
+ jmp $L$common_seh_tail
+se_handler ENDP
+
+ALIGN 16
+shaext_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$prologue_shaext]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ lea r10,QWORD PTR[$L$epilogue_shaext]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ lea rsi,QWORD PTR[((-8-64))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,8
+ DD 0a548f3fch
+
+ jmp $L$common_seh_tail
+shaext_handler ENDP
+
+ALIGN 16
+ssse3_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$common_seh_tail
+
+ mov rax,QWORD PTR[208+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$common_seh_tail
+
+ lea rsi,QWORD PTR[((-40-96))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,12
+ DD 0a548f3fch
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+
+$L$common_seh_tail::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+ssse3_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_sha1_block_data_order
+ DD imagerel $L$SEH_end_sha1_block_data_order
+ DD imagerel $L$SEH_info_sha1_block_data_order
+ DD imagerel $L$SEH_begin_sha1_block_data_order_shaext
+ DD imagerel $L$SEH_end_sha1_block_data_order_shaext
+ DD imagerel $L$SEH_info_sha1_block_data_order_shaext
+ DD imagerel $L$SEH_begin_sha1_block_data_order_ssse3
+ DD imagerel $L$SEH_end_sha1_block_data_order_ssse3
+ DD imagerel $L$SEH_info_sha1_block_data_order_ssse3
+ DD imagerel $L$SEH_begin_sha1_block_data_order_avx
+ DD imagerel $L$SEH_end_sha1_block_data_order_avx
+ DD imagerel $L$SEH_info_sha1_block_data_order_avx
+ DD imagerel $L$SEH_begin_sha1_block_data_order_avx2
+ DD imagerel $L$SEH_end_sha1_block_data_order_avx2
+ DD imagerel $L$SEH_info_sha1_block_data_order_avx2
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_sha1_block_data_order::
+DB 9,0,0,0
+ DD imagerel se_handler
+$L$SEH_info_sha1_block_data_order_shaext::
+DB 9,0,0,0
+ DD imagerel shaext_handler
+$L$SEH_info_sha1_block_data_order_ssse3::
+DB 9,0,0,0
+ DD imagerel ssse3_handler
+ DD imagerel $L$prologue_ssse3,imagerel $L$epilogue_ssse3
+$L$SEH_info_sha1_block_data_order_avx::
+DB 9,0,0,0
+ DD imagerel ssse3_handler
+ DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
+$L$SEH_info_sha1_block_data_order_avx2::
+DB 9,0,0,0
+ DD imagerel ssse3_handler
+ DD imagerel $L$prologue_avx2,imagerel $L$epilogue_avx2
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/sha/sha256-586.masm b/contrib/libs/openssl/asm/windows/crypto/sha/sha256-586.masm
index a83eef4f2a..7810ba8b84 100644
--- a/contrib/libs/openssl/asm/windows/crypto/sha/sha256-586.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/sha/sha256-586.masm
@@ -1,6817 +1,6817 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-;EXTERN _OPENSSL_ia32cap_P:NEAR
-ALIGN 16
-_sha256_block_data_order PROC PUBLIC
-$L_sha256_block_data_order_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov ebx,esp
- call $L000pic_point
-$L000pic_point:
- pop ebp
- lea ebp,DWORD PTR ($L001K256-$L000pic_point)[ebp]
- sub esp,16
- and esp,-64
- shl eax,6
- add eax,edi
- mov DWORD PTR [esp],esi
- mov DWORD PTR 4[esp],edi
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],ebx
- lea edx,DWORD PTR _OPENSSL_ia32cap_P
- mov ecx,DWORD PTR [edx]
- mov ebx,DWORD PTR 4[edx]
- test ecx,1048576
- jnz $L002loop
- mov edx,DWORD PTR 8[edx]
- test ecx,16777216
- jz $L003no_xmm
- and ecx,1073741824
- and ebx,268435968
- test edx,536870912
- jnz $L004shaext
- or ecx,ebx
- and ecx,1342177280
- cmp ecx,1342177280
- je $L005AVX
- test ebx,512
- jnz $L006SSSE3
-$L003no_xmm:
- sub eax,edi
- cmp eax,256
- jae $L007unrolled
- jmp $L002loop
-ALIGN 16
-$L002loop:
- mov eax,DWORD PTR [edi]
- mov ebx,DWORD PTR 4[edi]
- mov ecx,DWORD PTR 8[edi]
- bswap eax
- mov edx,DWORD PTR 12[edi]
- bswap ebx
- push eax
- bswap ecx
- push ebx
- bswap edx
- push ecx
- push edx
- mov eax,DWORD PTR 16[edi]
- mov ebx,DWORD PTR 20[edi]
- mov ecx,DWORD PTR 24[edi]
- bswap eax
- mov edx,DWORD PTR 28[edi]
- bswap ebx
- push eax
- bswap ecx
- push ebx
- bswap edx
- push ecx
- push edx
- mov eax,DWORD PTR 32[edi]
- mov ebx,DWORD PTR 36[edi]
- mov ecx,DWORD PTR 40[edi]
- bswap eax
- mov edx,DWORD PTR 44[edi]
- bswap ebx
- push eax
- bswap ecx
- push ebx
- bswap edx
- push ecx
- push edx
- mov eax,DWORD PTR 48[edi]
- mov ebx,DWORD PTR 52[edi]
- mov ecx,DWORD PTR 56[edi]
- bswap eax
- mov edx,DWORD PTR 60[edi]
- bswap ebx
- push eax
- bswap ecx
- push ebx
- bswap edx
- push ecx
- push edx
- add edi,64
- lea esp,DWORD PTR [esp-36]
- mov DWORD PTR 104[esp],edi
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov edi,DWORD PTR 12[esi]
- mov DWORD PTR 8[esp],ebx
- xor ebx,ecx
- mov DWORD PTR 12[esp],ecx
- mov DWORD PTR 16[esp],edi
- mov DWORD PTR [esp],ebx
- mov edx,DWORD PTR 16[esi]
- mov ebx,DWORD PTR 20[esi]
- mov ecx,DWORD PTR 24[esi]
- mov edi,DWORD PTR 28[esi]
- mov DWORD PTR 24[esp],ebx
- mov DWORD PTR 28[esp],ecx
- mov DWORD PTR 32[esp],edi
-ALIGN 16
-$L00800_15:
- mov ecx,edx
- mov esi,DWORD PTR 24[esp]
- ror ecx,14
- mov edi,DWORD PTR 28[esp]
- xor ecx,edx
- xor esi,edi
- mov ebx,DWORD PTR 96[esp]
- ror ecx,5
- and esi,edx
- mov DWORD PTR 20[esp],edx
- xor edx,ecx
- add ebx,DWORD PTR 32[esp]
- xor esi,edi
- ror edx,6
- mov ecx,eax
- add ebx,esi
- ror ecx,9
- add ebx,edx
- mov edi,DWORD PTR 8[esp]
- xor ecx,eax
- mov DWORD PTR 4[esp],eax
- lea esp,DWORD PTR [esp-4]
- ror ecx,11
- mov esi,DWORD PTR [ebp]
- xor ecx,eax
- mov edx,DWORD PTR 20[esp]
- xor eax,edi
- ror ecx,2
- add ebx,esi
- mov DWORD PTR [esp],eax
- add edx,ebx
- and eax,DWORD PTR 4[esp]
- add ebx,ecx
- xor eax,edi
- add ebp,4
- add eax,ebx
- cmp esi,3248222580
- jne $L00800_15
- mov ecx,DWORD PTR 156[esp]
- jmp $L00916_63
-ALIGN 16
-$L00916_63:
- mov ebx,ecx
- mov esi,DWORD PTR 104[esp]
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 160[esp]
- shr edi,10
- add ebx,DWORD PTR 124[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 24[esp]
- ror ecx,14
- add ebx,edi
- mov edi,DWORD PTR 28[esp]
- xor ecx,edx
- xor esi,edi
- mov DWORD PTR 96[esp],ebx
- ror ecx,5
- and esi,edx
- mov DWORD PTR 20[esp],edx
- xor edx,ecx
- add ebx,DWORD PTR 32[esp]
- xor esi,edi
- ror edx,6
- mov ecx,eax
- add ebx,esi
- ror ecx,9
- add ebx,edx
- mov edi,DWORD PTR 8[esp]
- xor ecx,eax
- mov DWORD PTR 4[esp],eax
- lea esp,DWORD PTR [esp-4]
- ror ecx,11
- mov esi,DWORD PTR [ebp]
- xor ecx,eax
- mov edx,DWORD PTR 20[esp]
- xor eax,edi
- ror ecx,2
- add ebx,esi
- mov DWORD PTR [esp],eax
- add edx,ebx
- and eax,DWORD PTR 4[esp]
- add ebx,ecx
- xor eax,edi
- mov ecx,DWORD PTR 156[esp]
- add ebp,4
- add eax,ebx
- cmp esi,3329325298
- jne $L00916_63
- mov esi,DWORD PTR 356[esp]
- mov ebx,DWORD PTR 8[esp]
- mov ecx,DWORD PTR 16[esp]
- add eax,DWORD PTR [esi]
- add ebx,DWORD PTR 4[esi]
- add edi,DWORD PTR 8[esi]
- add ecx,DWORD PTR 12[esi]
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],edi
- mov DWORD PTR 12[esi],ecx
- mov eax,DWORD PTR 24[esp]
- mov ebx,DWORD PTR 28[esp]
- mov ecx,DWORD PTR 32[esp]
- mov edi,DWORD PTR 360[esp]
- add edx,DWORD PTR 16[esi]
- add eax,DWORD PTR 20[esi]
- add ebx,DWORD PTR 24[esi]
- add ecx,DWORD PTR 28[esi]
- mov DWORD PTR 16[esi],edx
- mov DWORD PTR 20[esi],eax
- mov DWORD PTR 24[esi],ebx
- mov DWORD PTR 28[esi],ecx
- lea esp,DWORD PTR 356[esp]
- sub ebp,256
- cmp edi,DWORD PTR 8[esp]
- jb $L002loop
- mov esp,DWORD PTR 12[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-ALIGN 64
-$L001K256:
-DD 1116352408,1899447441,3049323471,3921009573
-DD 961987163,1508970993,2453635748,2870763221
-DD 3624381080,310598401,607225278,1426881987
-DD 1925078388,2162078206,2614888103,3248222580
-DD 3835390401,4022224774,264347078,604807628
-DD 770255983,1249150122,1555081692,1996064986
-DD 2554220882,2821834349,2952996808,3210313671
-DD 3336571891,3584528711,113926993,338241895
-DD 666307205,773529912,1294757372,1396182291
-DD 1695183700,1986661051,2177026350,2456956037
-DD 2730485921,2820302411,3259730800,3345764771
-DD 3516065817,3600352804,4094571909,275423344
-DD 430227734,506948616,659060556,883997877
-DD 958139571,1322822218,1537002063,1747873779
-DD 1955562222,2024104815,2227730452,2361852424
-DD 2428436474,2756734187,3204031479,3329325298
-DD 66051,67438087,134810123,202182159
-DB 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
-DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
-DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
-DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
-DB 62,0
-ALIGN 16
-$L007unrolled:
- lea esp,DWORD PTR [esp-96]
- mov eax,DWORD PTR [esi]
- mov ebp,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov ebx,DWORD PTR 12[esi]
- mov DWORD PTR 4[esp],ebp
- xor ebp,ecx
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 12[esp],ebx
- mov edx,DWORD PTR 16[esi]
- mov ebx,DWORD PTR 20[esi]
- mov ecx,DWORD PTR 24[esi]
- mov esi,DWORD PTR 28[esi]
- mov DWORD PTR 20[esp],ebx
- mov DWORD PTR 24[esp],ecx
- mov DWORD PTR 28[esp],esi
- jmp $L010grand_loop
-ALIGN 16
-$L010grand_loop:
- mov ebx,DWORD PTR [edi]
- mov ecx,DWORD PTR 4[edi]
- bswap ebx
- mov esi,DWORD PTR 8[edi]
- bswap ecx
- mov DWORD PTR 32[esp],ebx
- bswap esi
- mov DWORD PTR 36[esp],ecx
- mov DWORD PTR 40[esp],esi
- mov ebx,DWORD PTR 12[edi]
- mov ecx,DWORD PTR 16[edi]
- bswap ebx
- mov esi,DWORD PTR 20[edi]
- bswap ecx
- mov DWORD PTR 44[esp],ebx
- bswap esi
- mov DWORD PTR 48[esp],ecx
- mov DWORD PTR 52[esp],esi
- mov ebx,DWORD PTR 24[edi]
- mov ecx,DWORD PTR 28[edi]
- bswap ebx
- mov esi,DWORD PTR 32[edi]
- bswap ecx
- mov DWORD PTR 56[esp],ebx
- bswap esi
- mov DWORD PTR 60[esp],ecx
- mov DWORD PTR 64[esp],esi
- mov ebx,DWORD PTR 36[edi]
- mov ecx,DWORD PTR 40[edi]
- bswap ebx
- mov esi,DWORD PTR 44[edi]
- bswap ecx
- mov DWORD PTR 68[esp],ebx
- bswap esi
- mov DWORD PTR 72[esp],ecx
- mov DWORD PTR 76[esp],esi
- mov ebx,DWORD PTR 48[edi]
- mov ecx,DWORD PTR 52[edi]
- bswap ebx
- mov esi,DWORD PTR 56[edi]
- bswap ecx
- mov DWORD PTR 80[esp],ebx
- bswap esi
- mov DWORD PTR 84[esp],ecx
- mov DWORD PTR 88[esp],esi
- mov ebx,DWORD PTR 60[edi]
- add edi,64
- bswap ebx
- mov DWORD PTR 100[esp],edi
- mov DWORD PTR 92[esp],ebx
- mov ecx,edx
- mov esi,DWORD PTR 20[esp]
- ror edx,14
- mov edi,DWORD PTR 24[esp]
- xor edx,ecx
- mov ebx,DWORD PTR 32[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 28[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 4[esp]
- xor ecx,eax
- mov DWORD PTR [esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 1116352408[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 12[esp]
- add ebp,ecx
- mov esi,edx
- mov ecx,DWORD PTR 16[esp]
- ror edx,14
- mov edi,DWORD PTR 20[esp]
- xor edx,esi
- mov ebx,DWORD PTR 36[esp]
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 12[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 24[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR [esp]
- xor esi,ebp
- mov DWORD PTR 28[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 1899447441[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,esi
- mov ecx,edx
- mov esi,DWORD PTR 12[esp]
- ror edx,14
- mov edi,DWORD PTR 16[esp]
- xor edx,ecx
- mov ebx,DWORD PTR 40[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 20[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 28[esp]
- xor ecx,eax
- mov DWORD PTR 24[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 3049323471[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 4[esp]
- add ebp,ecx
- mov esi,edx
- mov ecx,DWORD PTR 8[esp]
- ror edx,14
- mov edi,DWORD PTR 12[esp]
- xor edx,esi
- mov ebx,DWORD PTR 44[esp]
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 4[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 16[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 24[esp]
- xor esi,ebp
- mov DWORD PTR 20[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 3921009573[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- ror esi,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,esi
- mov ecx,edx
- mov esi,DWORD PTR 4[esp]
- ror edx,14
- mov edi,DWORD PTR 8[esp]
- xor edx,ecx
- mov ebx,DWORD PTR 48[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 12[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 20[esp]
- xor ecx,eax
- mov DWORD PTR 16[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 961987163[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 28[esp]
- add ebp,ecx
- mov esi,edx
- mov ecx,DWORD PTR [esp]
- ror edx,14
- mov edi,DWORD PTR 4[esp]
- xor edx,esi
- mov ebx,DWORD PTR 52[esp]
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 28[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 8[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 16[esp]
- xor esi,ebp
- mov DWORD PTR 12[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 1508970993[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,esi
- mov ecx,edx
- mov esi,DWORD PTR 28[esp]
- ror edx,14
- mov edi,DWORD PTR [esp]
- xor edx,ecx
- mov ebx,DWORD PTR 56[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 4[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 12[esp]
- xor ecx,eax
- mov DWORD PTR 8[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 2453635748[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 20[esp]
- add ebp,ecx
- mov esi,edx
- mov ecx,DWORD PTR 24[esp]
- ror edx,14
- mov edi,DWORD PTR 28[esp]
- xor edx,esi
- mov ebx,DWORD PTR 60[esp]
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 20[esp],esi
- xor edx,esi
- add ebx,DWORD PTR [esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 8[esp]
- xor esi,ebp
- mov DWORD PTR 4[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 2870763221[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,esi
- mov ecx,edx
- mov esi,DWORD PTR 20[esp]
- ror edx,14
- mov edi,DWORD PTR 24[esp]
- xor edx,ecx
- mov ebx,DWORD PTR 64[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 28[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 4[esp]
- xor ecx,eax
- mov DWORD PTR [esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 3624381080[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 12[esp]
- add ebp,ecx
- mov esi,edx
- mov ecx,DWORD PTR 16[esp]
- ror edx,14
- mov edi,DWORD PTR 20[esp]
- xor edx,esi
- mov ebx,DWORD PTR 68[esp]
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 12[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 24[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR [esp]
- xor esi,ebp
- mov DWORD PTR 28[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 310598401[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,esi
- mov ecx,edx
- mov esi,DWORD PTR 12[esp]
- ror edx,14
- mov edi,DWORD PTR 16[esp]
- xor edx,ecx
- mov ebx,DWORD PTR 72[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 20[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 28[esp]
- xor ecx,eax
- mov DWORD PTR 24[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 607225278[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 4[esp]
- add ebp,ecx
- mov esi,edx
- mov ecx,DWORD PTR 8[esp]
- ror edx,14
- mov edi,DWORD PTR 12[esp]
- xor edx,esi
- mov ebx,DWORD PTR 76[esp]
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 4[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 16[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 24[esp]
- xor esi,ebp
- mov DWORD PTR 20[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 1426881987[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- ror esi,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,esi
- mov ecx,edx
- mov esi,DWORD PTR 4[esp]
- ror edx,14
- mov edi,DWORD PTR 8[esp]
- xor edx,ecx
- mov ebx,DWORD PTR 80[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 12[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 20[esp]
- xor ecx,eax
- mov DWORD PTR 16[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 1925078388[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 28[esp]
- add ebp,ecx
- mov esi,edx
- mov ecx,DWORD PTR [esp]
- ror edx,14
- mov edi,DWORD PTR 4[esp]
- xor edx,esi
- mov ebx,DWORD PTR 84[esp]
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 28[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 8[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 16[esp]
- xor esi,ebp
- mov DWORD PTR 12[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 2162078206[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,esi
- mov ecx,edx
- mov esi,DWORD PTR 28[esp]
- ror edx,14
- mov edi,DWORD PTR [esp]
- xor edx,ecx
- mov ebx,DWORD PTR 88[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 4[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 12[esp]
- xor ecx,eax
- mov DWORD PTR 8[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 2614888103[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 20[esp]
- add ebp,ecx
- mov esi,edx
- mov ecx,DWORD PTR 24[esp]
- ror edx,14
- mov edi,DWORD PTR 28[esp]
- xor edx,esi
- mov ebx,DWORD PTR 92[esp]
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 20[esp],esi
- xor edx,esi
- add ebx,DWORD PTR [esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 8[esp]
- xor esi,ebp
- mov DWORD PTR 4[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 3248222580[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 36[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,esi
- mov esi,DWORD PTR 88[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 32[esp]
- shr edi,10
- add ebx,DWORD PTR 68[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 20[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 24[esp]
- xor edx,ecx
- mov DWORD PTR 32[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 28[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 4[esp]
- xor ecx,eax
- mov DWORD PTR [esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 3835390401[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 40[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 12[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 92[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 36[esp]
- shr edi,10
- add ebx,DWORD PTR 72[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 16[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 20[esp]
- xor edx,esi
- mov DWORD PTR 36[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 12[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 24[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR [esp]
- xor esi,ebp
- mov DWORD PTR 28[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 4022224774[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 44[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,esi
- mov esi,DWORD PTR 32[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 40[esp]
- shr edi,10
- add ebx,DWORD PTR 76[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 12[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 16[esp]
- xor edx,ecx
- mov DWORD PTR 40[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 20[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 28[esp]
- xor ecx,eax
- mov DWORD PTR 24[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 264347078[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 48[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 4[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 36[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 44[esp]
- shr edi,10
- add ebx,DWORD PTR 80[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 8[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 12[esp]
- xor edx,esi
- mov DWORD PTR 44[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 4[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 16[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 24[esp]
- xor esi,ebp
- mov DWORD PTR 20[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 604807628[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 52[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,esi
- mov esi,DWORD PTR 40[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 48[esp]
- shr edi,10
- add ebx,DWORD PTR 84[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 4[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 8[esp]
- xor edx,ecx
- mov DWORD PTR 48[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 12[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 20[esp]
- xor ecx,eax
- mov DWORD PTR 16[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 770255983[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 56[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 28[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 44[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 52[esp]
- shr edi,10
- add ebx,DWORD PTR 88[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR [esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 4[esp]
- xor edx,esi
- mov DWORD PTR 52[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 28[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 8[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 16[esp]
- xor esi,ebp
- mov DWORD PTR 12[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 1249150122[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 60[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,esi
- mov esi,DWORD PTR 48[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 56[esp]
- shr edi,10
- add ebx,DWORD PTR 92[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 28[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR [esp]
- xor edx,ecx
- mov DWORD PTR 56[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 4[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 12[esp]
- xor ecx,eax
- mov DWORD PTR 8[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 1555081692[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 64[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 20[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 52[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 60[esp]
- shr edi,10
- add ebx,DWORD PTR 32[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 24[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 28[esp]
- xor edx,esi
- mov DWORD PTR 60[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 20[esp],esi
- xor edx,esi
- add ebx,DWORD PTR [esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 8[esp]
- xor esi,ebp
- mov DWORD PTR 4[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 1996064986[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 68[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,esi
- mov esi,DWORD PTR 56[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 64[esp]
- shr edi,10
- add ebx,DWORD PTR 36[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 20[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 24[esp]
- xor edx,ecx
- mov DWORD PTR 64[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 28[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 4[esp]
- xor ecx,eax
- mov DWORD PTR [esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 2554220882[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 72[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 12[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 60[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 68[esp]
- shr edi,10
- add ebx,DWORD PTR 40[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 16[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 20[esp]
- xor edx,esi
- mov DWORD PTR 68[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 12[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 24[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR [esp]
- xor esi,ebp
- mov DWORD PTR 28[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 2821834349[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 76[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,esi
- mov esi,DWORD PTR 64[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 72[esp]
- shr edi,10
- add ebx,DWORD PTR 44[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 12[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 16[esp]
- xor edx,ecx
- mov DWORD PTR 72[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 20[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 28[esp]
- xor ecx,eax
- mov DWORD PTR 24[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 2952996808[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 80[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 4[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 68[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 76[esp]
- shr edi,10
- add ebx,DWORD PTR 48[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 8[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 12[esp]
- xor edx,esi
- mov DWORD PTR 76[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 4[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 16[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 24[esp]
- xor esi,ebp
- mov DWORD PTR 20[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 3210313671[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 84[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,esi
- mov esi,DWORD PTR 72[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 80[esp]
- shr edi,10
- add ebx,DWORD PTR 52[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 4[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 8[esp]
- xor edx,ecx
- mov DWORD PTR 80[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 12[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 20[esp]
- xor ecx,eax
- mov DWORD PTR 16[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 3336571891[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 88[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 28[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 76[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 84[esp]
- shr edi,10
- add ebx,DWORD PTR 56[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR [esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 4[esp]
- xor edx,esi
- mov DWORD PTR 84[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 28[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 8[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 16[esp]
- xor esi,ebp
- mov DWORD PTR 12[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 3584528711[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 92[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,esi
- mov esi,DWORD PTR 80[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 88[esp]
- shr edi,10
- add ebx,DWORD PTR 60[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 28[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR [esp]
- xor edx,ecx
- mov DWORD PTR 88[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 4[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 12[esp]
- xor ecx,eax
- mov DWORD PTR 8[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 113926993[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 32[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 20[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 84[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 92[esp]
- shr edi,10
- add ebx,DWORD PTR 64[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 24[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 28[esp]
- xor edx,esi
- mov DWORD PTR 92[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 20[esp],esi
- xor edx,esi
- add ebx,DWORD PTR [esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 8[esp]
- xor esi,ebp
- mov DWORD PTR 4[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 338241895[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 36[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,esi
- mov esi,DWORD PTR 88[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 32[esp]
- shr edi,10
- add ebx,DWORD PTR 68[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 20[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 24[esp]
- xor edx,ecx
- mov DWORD PTR 32[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 28[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 4[esp]
- xor ecx,eax
- mov DWORD PTR [esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 666307205[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 40[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 12[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 92[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 36[esp]
- shr edi,10
- add ebx,DWORD PTR 72[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 16[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 20[esp]
- xor edx,esi
- mov DWORD PTR 36[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 12[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 24[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR [esp]
- xor esi,ebp
- mov DWORD PTR 28[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 773529912[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 44[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,esi
- mov esi,DWORD PTR 32[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 40[esp]
- shr edi,10
- add ebx,DWORD PTR 76[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 12[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 16[esp]
- xor edx,ecx
- mov DWORD PTR 40[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 20[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 28[esp]
- xor ecx,eax
- mov DWORD PTR 24[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 1294757372[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 48[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 4[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 36[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 44[esp]
- shr edi,10
- add ebx,DWORD PTR 80[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 8[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 12[esp]
- xor edx,esi
- mov DWORD PTR 44[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 4[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 16[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 24[esp]
- xor esi,ebp
- mov DWORD PTR 20[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 1396182291[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 52[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,esi
- mov esi,DWORD PTR 40[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 48[esp]
- shr edi,10
- add ebx,DWORD PTR 84[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 4[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 8[esp]
- xor edx,ecx
- mov DWORD PTR 48[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 12[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 20[esp]
- xor ecx,eax
- mov DWORD PTR 16[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 1695183700[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 56[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 28[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 44[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 52[esp]
- shr edi,10
- add ebx,DWORD PTR 88[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR [esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 4[esp]
- xor edx,esi
- mov DWORD PTR 52[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 28[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 8[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 16[esp]
- xor esi,ebp
- mov DWORD PTR 12[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 1986661051[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 60[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,esi
- mov esi,DWORD PTR 48[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 56[esp]
- shr edi,10
- add ebx,DWORD PTR 92[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 28[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR [esp]
- xor edx,ecx
- mov DWORD PTR 56[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 4[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 12[esp]
- xor ecx,eax
- mov DWORD PTR 8[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 2177026350[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 64[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 20[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 52[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 60[esp]
- shr edi,10
- add ebx,DWORD PTR 32[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 24[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 28[esp]
- xor edx,esi
- mov DWORD PTR 60[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 20[esp],esi
- xor edx,esi
- add ebx,DWORD PTR [esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 8[esp]
- xor esi,ebp
- mov DWORD PTR 4[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 2456956037[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 68[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,esi
- mov esi,DWORD PTR 56[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 64[esp]
- shr edi,10
- add ebx,DWORD PTR 36[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 20[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 24[esp]
- xor edx,ecx
- mov DWORD PTR 64[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 28[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 4[esp]
- xor ecx,eax
- mov DWORD PTR [esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 2730485921[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 72[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 12[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 60[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 68[esp]
- shr edi,10
- add ebx,DWORD PTR 40[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 16[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 20[esp]
- xor edx,esi
- mov DWORD PTR 68[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 12[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 24[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR [esp]
- xor esi,ebp
- mov DWORD PTR 28[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 2820302411[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 76[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,esi
- mov esi,DWORD PTR 64[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 72[esp]
- shr edi,10
- add ebx,DWORD PTR 44[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 12[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 16[esp]
- xor edx,ecx
- mov DWORD PTR 72[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 20[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 28[esp]
- xor ecx,eax
- mov DWORD PTR 24[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 3259730800[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 80[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 4[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 68[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 76[esp]
- shr edi,10
- add ebx,DWORD PTR 48[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 8[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 12[esp]
- xor edx,esi
- mov DWORD PTR 76[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 4[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 16[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 24[esp]
- xor esi,ebp
- mov DWORD PTR 20[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 3345764771[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 84[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,esi
- mov esi,DWORD PTR 72[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 80[esp]
- shr edi,10
- add ebx,DWORD PTR 52[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 4[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 8[esp]
- xor edx,ecx
- mov DWORD PTR 80[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 12[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 20[esp]
- xor ecx,eax
- mov DWORD PTR 16[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 3516065817[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 88[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 28[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 76[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 84[esp]
- shr edi,10
- add ebx,DWORD PTR 56[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR [esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 4[esp]
- xor edx,esi
- mov DWORD PTR 84[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 28[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 8[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 16[esp]
- xor esi,ebp
- mov DWORD PTR 12[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 3600352804[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 92[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,esi
- mov esi,DWORD PTR 80[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 88[esp]
- shr edi,10
- add ebx,DWORD PTR 60[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 28[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR [esp]
- xor edx,ecx
- mov DWORD PTR 88[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 4[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 12[esp]
- xor ecx,eax
- mov DWORD PTR 8[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 4094571909[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 32[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 20[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 84[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 92[esp]
- shr edi,10
- add ebx,DWORD PTR 64[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 24[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 28[esp]
- xor edx,esi
- mov DWORD PTR 92[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 20[esp],esi
- xor edx,esi
- add ebx,DWORD PTR [esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 8[esp]
- xor esi,ebp
- mov DWORD PTR 4[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 275423344[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 36[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,esi
- mov esi,DWORD PTR 88[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 32[esp]
- shr edi,10
- add ebx,DWORD PTR 68[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 20[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 24[esp]
- xor edx,ecx
- mov DWORD PTR 32[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 28[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 4[esp]
- xor ecx,eax
- mov DWORD PTR [esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 430227734[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 40[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 12[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 92[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 36[esp]
- shr edi,10
- add ebx,DWORD PTR 72[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 16[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 20[esp]
- xor edx,esi
- mov DWORD PTR 36[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 12[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 24[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR [esp]
- xor esi,ebp
- mov DWORD PTR 28[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 506948616[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 44[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,esi
- mov esi,DWORD PTR 32[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 40[esp]
- shr edi,10
- add ebx,DWORD PTR 76[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 12[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 16[esp]
- xor edx,ecx
- mov DWORD PTR 40[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 20[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 28[esp]
- xor ecx,eax
- mov DWORD PTR 24[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 659060556[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 48[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 4[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 36[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 44[esp]
- shr edi,10
- add ebx,DWORD PTR 80[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 8[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 12[esp]
- xor edx,esi
- mov DWORD PTR 44[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 4[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 16[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 24[esp]
- xor esi,ebp
- mov DWORD PTR 20[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 883997877[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 52[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,esi
- mov esi,DWORD PTR 40[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 48[esp]
- shr edi,10
- add ebx,DWORD PTR 84[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 4[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 8[esp]
- xor edx,ecx
- mov DWORD PTR 48[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 12[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 20[esp]
- xor ecx,eax
- mov DWORD PTR 16[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 958139571[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 56[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 28[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 44[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 52[esp]
- shr edi,10
- add ebx,DWORD PTR 88[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR [esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 4[esp]
- xor edx,esi
- mov DWORD PTR 52[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 28[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 8[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 16[esp]
- xor esi,ebp
- mov DWORD PTR 12[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 1322822218[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 60[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,esi
- mov esi,DWORD PTR 48[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 56[esp]
- shr edi,10
- add ebx,DWORD PTR 92[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 28[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR [esp]
- xor edx,ecx
- mov DWORD PTR 56[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 4[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 12[esp]
- xor ecx,eax
- mov DWORD PTR 8[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 1537002063[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 64[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 20[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 52[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 60[esp]
- shr edi,10
- add ebx,DWORD PTR 32[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 24[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 28[esp]
- xor edx,esi
- mov DWORD PTR 60[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 20[esp],esi
- xor edx,esi
- add ebx,DWORD PTR [esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 8[esp]
- xor esi,ebp
- mov DWORD PTR 4[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 1747873779[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 68[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,esi
- mov esi,DWORD PTR 56[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 64[esp]
- shr edi,10
- add ebx,DWORD PTR 36[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 20[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 24[esp]
- xor edx,ecx
- mov DWORD PTR 64[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 28[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 4[esp]
- xor ecx,eax
- mov DWORD PTR [esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 1955562222[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 72[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 12[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 60[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 68[esp]
- shr edi,10
- add ebx,DWORD PTR 40[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 16[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 20[esp]
- xor edx,esi
- mov DWORD PTR 68[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 12[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 24[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR [esp]
- xor esi,ebp
- mov DWORD PTR 28[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 2024104815[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 76[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,esi
- mov esi,DWORD PTR 64[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 72[esp]
- shr edi,10
- add ebx,DWORD PTR 44[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 12[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 16[esp]
- xor edx,ecx
- mov DWORD PTR 72[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 20[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 28[esp]
- xor ecx,eax
- mov DWORD PTR 24[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 2227730452[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 80[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 4[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 68[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 76[esp]
- shr edi,10
- add ebx,DWORD PTR 48[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 8[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 12[esp]
- xor edx,esi
- mov DWORD PTR 76[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 4[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 16[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 24[esp]
- xor esi,ebp
- mov DWORD PTR 20[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 2361852424[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 84[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,esi
- mov esi,DWORD PTR 72[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 80[esp]
- shr edi,10
- add ebx,DWORD PTR 52[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 4[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 8[esp]
- xor edx,ecx
- mov DWORD PTR 80[esp],ebx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 12[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 20[esp]
- xor ecx,eax
- mov DWORD PTR 16[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 2428436474[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 88[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 28[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 76[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 84[esp]
- shr edi,10
- add ebx,DWORD PTR 56[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR [esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 4[esp]
- xor edx,esi
- mov DWORD PTR 84[esp],ebx
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 28[esp],esi
- xor edx,esi
- add ebx,DWORD PTR 8[esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 16[esp]
- xor esi,ebp
- mov DWORD PTR 12[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 2756734187[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- mov ecx,DWORD PTR 92[esp]
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,esi
- mov esi,DWORD PTR 80[esp]
- mov ebx,ecx
- ror ecx,11
- mov edi,esi
- ror esi,2
- xor ecx,ebx
- shr ebx,3
- ror ecx,7
- xor esi,edi
- xor ebx,ecx
- ror esi,17
- add ebx,DWORD PTR 88[esp]
- shr edi,10
- add ebx,DWORD PTR 60[esp]
- mov ecx,edx
- xor edi,esi
- mov esi,DWORD PTR 28[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR [esp]
- xor edx,ecx
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- add ebx,DWORD PTR 4[esp]
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add ebx,edi
- ror ecx,9
- mov esi,eax
- mov edi,DWORD PTR 12[esp]
- xor ecx,eax
- mov DWORD PTR 8[esp],eax
- xor eax,edi
- ror ecx,11
- and ebp,eax
- lea edx,DWORD PTR 3204031479[edx*1+ebx]
- xor ecx,esi
- xor ebp,edi
- mov esi,DWORD PTR 32[esp]
- ror ecx,2
- add ebp,edx
- add edx,DWORD PTR 20[esp]
- add ebp,ecx
- mov ecx,DWORD PTR 84[esp]
- mov ebx,esi
- ror esi,11
- mov edi,ecx
- ror ecx,2
- xor esi,ebx
- shr ebx,3
- ror esi,7
- xor ecx,edi
- xor ebx,esi
- ror ecx,17
- add ebx,DWORD PTR 92[esp]
- shr edi,10
- add ebx,DWORD PTR 64[esp]
- mov esi,edx
- xor edi,ecx
- mov ecx,DWORD PTR 24[esp]
- ror edx,14
- add ebx,edi
- mov edi,DWORD PTR 28[esp]
- xor edx,esi
- xor ecx,edi
- ror edx,5
- and ecx,esi
- mov DWORD PTR 20[esp],esi
- xor edx,esi
- add ebx,DWORD PTR [esp]
- xor edi,ecx
- ror edx,6
- mov esi,ebp
- add ebx,edi
- ror esi,9
- mov ecx,ebp
- mov edi,DWORD PTR 8[esp]
- xor esi,ebp
- mov DWORD PTR 4[esp],ebp
- xor ebp,edi
- ror esi,11
- and eax,ebp
- lea edx,DWORD PTR 3329325298[edx*1+ebx]
- xor esi,ecx
- xor eax,edi
- ror esi,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,esi
- mov esi,DWORD PTR 96[esp]
- xor ebp,edi
- mov ecx,DWORD PTR 12[esp]
- add eax,DWORD PTR [esi]
- add ebp,DWORD PTR 4[esi]
- add edi,DWORD PTR 8[esi]
- add ecx,DWORD PTR 12[esi]
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebp
- mov DWORD PTR 8[esi],edi
- mov DWORD PTR 12[esi],ecx
- mov DWORD PTR 4[esp],ebp
- xor ebp,edi
- mov DWORD PTR 8[esp],edi
- mov DWORD PTR 12[esp],ecx
- mov edi,DWORD PTR 20[esp]
- mov ebx,DWORD PTR 24[esp]
- mov ecx,DWORD PTR 28[esp]
- add edx,DWORD PTR 16[esi]
- add edi,DWORD PTR 20[esi]
- add ebx,DWORD PTR 24[esi]
- add ecx,DWORD PTR 28[esi]
- mov DWORD PTR 16[esi],edx
- mov DWORD PTR 20[esi],edi
- mov DWORD PTR 24[esi],ebx
- mov DWORD PTR 28[esi],ecx
- mov DWORD PTR 20[esp],edi
- mov edi,DWORD PTR 100[esp]
- mov DWORD PTR 24[esp],ebx
- mov DWORD PTR 28[esp],ecx
- cmp edi,DWORD PTR 104[esp]
- jb $L010grand_loop
- mov esp,DWORD PTR 108[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-ALIGN 32
-$L004shaext:
- sub esp,32
- movdqu xmm1,XMMWORD PTR [esi]
- lea ebp,DWORD PTR 128[ebp]
- movdqu xmm2,XMMWORD PTR 16[esi]
- movdqa xmm7,XMMWORD PTR 128[ebp]
- pshufd xmm0,xmm1,27
- pshufd xmm1,xmm1,177
- pshufd xmm2,xmm2,27
-DB 102,15,58,15,202,8
- punpcklqdq xmm2,xmm0
- jmp $L011loop_shaext
-ALIGN 16
-$L011loop_shaext:
- movdqu xmm3,XMMWORD PTR [edi]
- movdqu xmm4,XMMWORD PTR 16[edi]
- movdqu xmm5,XMMWORD PTR 32[edi]
-DB 102,15,56,0,223
- movdqu xmm6,XMMWORD PTR 48[edi]
- movdqa XMMWORD PTR 16[esp],xmm2
- movdqa xmm0,XMMWORD PTR [ebp-128]
- paddd xmm0,xmm3
-DB 102,15,56,0,231
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- nop
- movdqa XMMWORD PTR [esp],xmm1
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR [ebp-112]
- paddd xmm0,xmm4
-DB 102,15,56,0,239
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- lea edi,DWORD PTR 64[edi]
-DB 15,56,204,220
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR [ebp-96]
- paddd xmm0,xmm5
-DB 102,15,56,0,247
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm6
-DB 102,15,58,15,253,4
- nop
- paddd xmm3,xmm7
-DB 15,56,204,229
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR [ebp-80]
- paddd xmm0,xmm6
-DB 15,56,205,222
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm3
-DB 102,15,58,15,254,4
- nop
- paddd xmm4,xmm7
-DB 15,56,204,238
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR [ebp-64]
- paddd xmm0,xmm3
-DB 15,56,205,227
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm4
-DB 102,15,58,15,251,4
- nop
- paddd xmm5,xmm7
-DB 15,56,204,243
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR [ebp-48]
- paddd xmm0,xmm4
-DB 15,56,205,236
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm5
-DB 102,15,58,15,252,4
- nop
- paddd xmm6,xmm7
-DB 15,56,204,220
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR [ebp-32]
- paddd xmm0,xmm5
-DB 15,56,205,245
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm6
-DB 102,15,58,15,253,4
- nop
- paddd xmm3,xmm7
-DB 15,56,204,229
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR [ebp-16]
- paddd xmm0,xmm6
-DB 15,56,205,222
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm3
-DB 102,15,58,15,254,4
- nop
- paddd xmm4,xmm7
-DB 15,56,204,238
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR [ebp]
- paddd xmm0,xmm3
-DB 15,56,205,227
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm4
-DB 102,15,58,15,251,4
- nop
- paddd xmm5,xmm7
-DB 15,56,204,243
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR 16[ebp]
- paddd xmm0,xmm4
-DB 15,56,205,236
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm5
-DB 102,15,58,15,252,4
- nop
- paddd xmm6,xmm7
-DB 15,56,204,220
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR 32[ebp]
- paddd xmm0,xmm5
-DB 15,56,205,245
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm6
-DB 102,15,58,15,253,4
- nop
- paddd xmm3,xmm7
-DB 15,56,204,229
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR 48[ebp]
- paddd xmm0,xmm6
-DB 15,56,205,222
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm3
-DB 102,15,58,15,254,4
- nop
- paddd xmm4,xmm7
-DB 15,56,204,238
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR 64[ebp]
- paddd xmm0,xmm3
-DB 15,56,205,227
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm4
-DB 102,15,58,15,251,4
- nop
- paddd xmm5,xmm7
-DB 15,56,204,243
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR 80[ebp]
- paddd xmm0,xmm4
-DB 15,56,205,236
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- movdqa xmm7,xmm5
-DB 102,15,58,15,252,4
-DB 15,56,203,202
- paddd xmm6,xmm7
- movdqa xmm0,XMMWORD PTR 96[ebp]
- paddd xmm0,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
-DB 15,56,205,245
- movdqa xmm7,XMMWORD PTR 128[ebp]
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR 112[ebp]
- paddd xmm0,xmm6
- nop
-DB 15,56,203,209
- pshufd xmm0,xmm0,14
- cmp eax,edi
- nop
-DB 15,56,203,202
- paddd xmm2,XMMWORD PTR 16[esp]
- paddd xmm1,XMMWORD PTR [esp]
- jnz $L011loop_shaext
- pshufd xmm2,xmm2,177
- pshufd xmm7,xmm1,27
- pshufd xmm1,xmm1,177
- punpckhqdq xmm1,xmm2
-DB 102,15,58,15,215,8
- mov esp,DWORD PTR 44[esp]
- movdqu XMMWORD PTR [esi],xmm1
- movdqu XMMWORD PTR 16[esi],xmm2
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-ALIGN 32
-$L006SSSE3:
- lea esp,DWORD PTR [esp-96]
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov edi,DWORD PTR 12[esi]
- mov DWORD PTR 4[esp],ebx
- xor ebx,ecx
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 12[esp],edi
- mov edx,DWORD PTR 16[esi]
- mov edi,DWORD PTR 20[esi]
- mov ecx,DWORD PTR 24[esi]
- mov esi,DWORD PTR 28[esi]
- mov DWORD PTR 20[esp],edi
- mov edi,DWORD PTR 100[esp]
- mov DWORD PTR 24[esp],ecx
- mov DWORD PTR 28[esp],esi
- movdqa xmm7,XMMWORD PTR 256[ebp]
- jmp $L012grand_ssse3
-ALIGN 16
-$L012grand_ssse3:
- movdqu xmm0,XMMWORD PTR [edi]
- movdqu xmm1,XMMWORD PTR 16[edi]
- movdqu xmm2,XMMWORD PTR 32[edi]
- movdqu xmm3,XMMWORD PTR 48[edi]
- add edi,64
-DB 102,15,56,0,199
- mov DWORD PTR 100[esp],edi
-DB 102,15,56,0,207
- movdqa xmm4,XMMWORD PTR [ebp]
-DB 102,15,56,0,215
- movdqa xmm5,XMMWORD PTR 16[ebp]
- paddd xmm4,xmm0
-DB 102,15,56,0,223
- movdqa xmm6,XMMWORD PTR 32[ebp]
- paddd xmm5,xmm1
- movdqa xmm7,XMMWORD PTR 48[ebp]
- movdqa XMMWORD PTR 32[esp],xmm4
- paddd xmm6,xmm2
- movdqa XMMWORD PTR 48[esp],xmm5
- paddd xmm7,xmm3
- movdqa XMMWORD PTR 64[esp],xmm6
- movdqa XMMWORD PTR 80[esp],xmm7
- jmp $L013ssse3_00_47
-ALIGN 16
-$L013ssse3_00_47:
- add ebp,64
- mov ecx,edx
- movdqa xmm4,xmm1
- ror edx,14
- mov esi,DWORD PTR 20[esp]
- movdqa xmm7,xmm3
- xor edx,ecx
- mov edi,DWORD PTR 24[esp]
-DB 102,15,58,15,224,4
- xor esi,edi
- ror edx,5
- and esi,ecx
-DB 102,15,58,15,250,4
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- xor edi,esi
- movdqa xmm5,xmm4
- ror edx,6
- mov ecx,eax
- movdqa xmm6,xmm4
- add edx,edi
- mov edi,DWORD PTR 4[esp]
- psrld xmm4,3
- mov esi,eax
- ror ecx,9
- paddd xmm0,xmm7
- mov DWORD PTR [esp],eax
- xor ecx,eax
- psrld xmm6,7
- xor eax,edi
- add edx,DWORD PTR 28[esp]
- ror ecx,11
- and ebx,eax
- pshufd xmm7,xmm3,250
- xor ecx,esi
- add edx,DWORD PTR 32[esp]
- pslld xmm5,14
- xor ebx,edi
- ror ecx,2
- pxor xmm4,xmm6
- add ebx,edx
- add edx,DWORD PTR 12[esp]
- psrld xmm6,11
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- pxor xmm4,xmm5
- mov esi,DWORD PTR 16[esp]
- xor edx,ecx
- pslld xmm5,11
- mov edi,DWORD PTR 20[esp]
- xor esi,edi
- ror edx,5
- pxor xmm4,xmm6
- and esi,ecx
- mov DWORD PTR 12[esp],ecx
- movdqa xmm6,xmm7
- xor edx,ecx
- xor edi,esi
- ror edx,6
- pxor xmm4,xmm5
- mov ecx,ebx
- add edx,edi
- psrld xmm7,10
- mov edi,DWORD PTR [esp]
- mov esi,ebx
- ror ecx,9
- paddd xmm0,xmm4
- mov DWORD PTR 28[esp],ebx
- xor ecx,ebx
- psrlq xmm6,17
- xor ebx,edi
- add edx,DWORD PTR 24[esp]
- ror ecx,11
- pxor xmm7,xmm6
- and eax,ebx
- xor ecx,esi
- psrlq xmm6,2
- add edx,DWORD PTR 36[esp]
- xor eax,edi
- ror ecx,2
- pxor xmm7,xmm6
- add eax,edx
- add edx,DWORD PTR 8[esp]
- pshufd xmm7,xmm7,128
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 12[esp]
- xor edx,ecx
- mov edi,DWORD PTR 16[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- psrldq xmm7,8
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- xor edi,esi
- paddd xmm0,xmm7
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 28[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR 24[esp],eax
- pshufd xmm7,xmm0,80
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 20[esp]
- movdqa xmm6,xmm7
- ror ecx,11
- psrld xmm7,10
- and ebx,eax
- psrlq xmm6,17
- xor ecx,esi
- add edx,DWORD PTR 40[esp]
- xor ebx,edi
- ror ecx,2
- pxor xmm7,xmm6
- add ebx,edx
- add edx,DWORD PTR 4[esp]
- psrlq xmm6,2
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- pxor xmm7,xmm6
- mov esi,DWORD PTR 8[esp]
- xor edx,ecx
- mov edi,DWORD PTR 12[esp]
- pshufd xmm7,xmm7,8
- xor esi,edi
- ror edx,5
- movdqa xmm6,XMMWORD PTR [ebp]
- and esi,ecx
- mov DWORD PTR 4[esp],ecx
- pslldq xmm7,8
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 24[esp]
- mov esi,ebx
- ror ecx,9
- paddd xmm0,xmm7
- mov DWORD PTR 20[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 16[esp]
- paddd xmm6,xmm0
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 44[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,ecx
- movdqa XMMWORD PTR 32[esp],xmm6
- mov ecx,edx
- movdqa xmm4,xmm2
- ror edx,14
- mov esi,DWORD PTR 4[esp]
- movdqa xmm7,xmm0
- xor edx,ecx
- mov edi,DWORD PTR 8[esp]
-DB 102,15,58,15,225,4
- xor esi,edi
- ror edx,5
- and esi,ecx
-DB 102,15,58,15,251,4
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- xor edi,esi
- movdqa xmm5,xmm4
- ror edx,6
- mov ecx,eax
- movdqa xmm6,xmm4
- add edx,edi
- mov edi,DWORD PTR 20[esp]
- psrld xmm4,3
- mov esi,eax
- ror ecx,9
- paddd xmm1,xmm7
- mov DWORD PTR 16[esp],eax
- xor ecx,eax
- psrld xmm6,7
- xor eax,edi
- add edx,DWORD PTR 12[esp]
- ror ecx,11
- and ebx,eax
- pshufd xmm7,xmm0,250
- xor ecx,esi
- add edx,DWORD PTR 48[esp]
- pslld xmm5,14
- xor ebx,edi
- ror ecx,2
- pxor xmm4,xmm6
- add ebx,edx
- add edx,DWORD PTR 28[esp]
- psrld xmm6,11
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- pxor xmm4,xmm5
- mov esi,DWORD PTR [esp]
- xor edx,ecx
- pslld xmm5,11
- mov edi,DWORD PTR 4[esp]
- xor esi,edi
- ror edx,5
- pxor xmm4,xmm6
- and esi,ecx
- mov DWORD PTR 28[esp],ecx
- movdqa xmm6,xmm7
- xor edx,ecx
- xor edi,esi
- ror edx,6
- pxor xmm4,xmm5
- mov ecx,ebx
- add edx,edi
- psrld xmm7,10
- mov edi,DWORD PTR 16[esp]
- mov esi,ebx
- ror ecx,9
- paddd xmm1,xmm4
- mov DWORD PTR 12[esp],ebx
- xor ecx,ebx
- psrlq xmm6,17
- xor ebx,edi
- add edx,DWORD PTR 8[esp]
- ror ecx,11
- pxor xmm7,xmm6
- and eax,ebx
- xor ecx,esi
- psrlq xmm6,2
- add edx,DWORD PTR 52[esp]
- xor eax,edi
- ror ecx,2
- pxor xmm7,xmm6
- add eax,edx
- add edx,DWORD PTR 24[esp]
- pshufd xmm7,xmm7,128
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 28[esp]
- xor edx,ecx
- mov edi,DWORD PTR [esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- psrldq xmm7,8
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- xor edi,esi
- paddd xmm1,xmm7
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 12[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR 8[esp],eax
- pshufd xmm7,xmm1,80
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 4[esp]
- movdqa xmm6,xmm7
- ror ecx,11
- psrld xmm7,10
- and ebx,eax
- psrlq xmm6,17
- xor ecx,esi
- add edx,DWORD PTR 56[esp]
- xor ebx,edi
- ror ecx,2
- pxor xmm7,xmm6
- add ebx,edx
- add edx,DWORD PTR 20[esp]
- psrlq xmm6,2
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- pxor xmm7,xmm6
- mov esi,DWORD PTR 24[esp]
- xor edx,ecx
- mov edi,DWORD PTR 28[esp]
- pshufd xmm7,xmm7,8
- xor esi,edi
- ror edx,5
- movdqa xmm6,XMMWORD PTR 16[ebp]
- and esi,ecx
- mov DWORD PTR 20[esp],ecx
- pslldq xmm7,8
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 8[esp]
- mov esi,ebx
- ror ecx,9
- paddd xmm1,xmm7
- mov DWORD PTR 4[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR [esp]
- paddd xmm6,xmm1
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 60[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,ecx
- movdqa XMMWORD PTR 48[esp],xmm6
- mov ecx,edx
- movdqa xmm4,xmm3
- ror edx,14
- mov esi,DWORD PTR 20[esp]
- movdqa xmm7,xmm1
- xor edx,ecx
- mov edi,DWORD PTR 24[esp]
-DB 102,15,58,15,226,4
- xor esi,edi
- ror edx,5
- and esi,ecx
-DB 102,15,58,15,248,4
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- xor edi,esi
- movdqa xmm5,xmm4
- ror edx,6
- mov ecx,eax
- movdqa xmm6,xmm4
- add edx,edi
- mov edi,DWORD PTR 4[esp]
- psrld xmm4,3
- mov esi,eax
- ror ecx,9
- paddd xmm2,xmm7
- mov DWORD PTR [esp],eax
- xor ecx,eax
- psrld xmm6,7
- xor eax,edi
- add edx,DWORD PTR 28[esp]
- ror ecx,11
- and ebx,eax
- pshufd xmm7,xmm1,250
- xor ecx,esi
- add edx,DWORD PTR 64[esp]
- pslld xmm5,14
- xor ebx,edi
- ror ecx,2
- pxor xmm4,xmm6
- add ebx,edx
- add edx,DWORD PTR 12[esp]
- psrld xmm6,11
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- pxor xmm4,xmm5
- mov esi,DWORD PTR 16[esp]
- xor edx,ecx
- pslld xmm5,11
- mov edi,DWORD PTR 20[esp]
- xor esi,edi
- ror edx,5
- pxor xmm4,xmm6
- and esi,ecx
- mov DWORD PTR 12[esp],ecx
- movdqa xmm6,xmm7
- xor edx,ecx
- xor edi,esi
- ror edx,6
- pxor xmm4,xmm5
- mov ecx,ebx
- add edx,edi
- psrld xmm7,10
- mov edi,DWORD PTR [esp]
- mov esi,ebx
- ror ecx,9
- paddd xmm2,xmm4
- mov DWORD PTR 28[esp],ebx
- xor ecx,ebx
- psrlq xmm6,17
- xor ebx,edi
- add edx,DWORD PTR 24[esp]
- ror ecx,11
- pxor xmm7,xmm6
- and eax,ebx
- xor ecx,esi
- psrlq xmm6,2
- add edx,DWORD PTR 68[esp]
- xor eax,edi
- ror ecx,2
- pxor xmm7,xmm6
- add eax,edx
- add edx,DWORD PTR 8[esp]
- pshufd xmm7,xmm7,128
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 12[esp]
- xor edx,ecx
- mov edi,DWORD PTR 16[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- psrldq xmm7,8
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- xor edi,esi
- paddd xmm2,xmm7
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 28[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR 24[esp],eax
- pshufd xmm7,xmm2,80
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 20[esp]
- movdqa xmm6,xmm7
- ror ecx,11
- psrld xmm7,10
- and ebx,eax
- psrlq xmm6,17
- xor ecx,esi
- add edx,DWORD PTR 72[esp]
- xor ebx,edi
- ror ecx,2
- pxor xmm7,xmm6
- add ebx,edx
- add edx,DWORD PTR 4[esp]
- psrlq xmm6,2
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- pxor xmm7,xmm6
- mov esi,DWORD PTR 8[esp]
- xor edx,ecx
- mov edi,DWORD PTR 12[esp]
- pshufd xmm7,xmm7,8
- xor esi,edi
- ror edx,5
- movdqa xmm6,XMMWORD PTR 32[ebp]
- and esi,ecx
- mov DWORD PTR 4[esp],ecx
- pslldq xmm7,8
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 24[esp]
- mov esi,ebx
- ror ecx,9
- paddd xmm2,xmm7
- mov DWORD PTR 20[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 16[esp]
- paddd xmm6,xmm2
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 76[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,ecx
- movdqa XMMWORD PTR 64[esp],xmm6
- mov ecx,edx
- movdqa xmm4,xmm0
- ror edx,14
- mov esi,DWORD PTR 4[esp]
- movdqa xmm7,xmm2
- xor edx,ecx
- mov edi,DWORD PTR 8[esp]
-DB 102,15,58,15,227,4
- xor esi,edi
- ror edx,5
- and esi,ecx
-DB 102,15,58,15,249,4
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- xor edi,esi
- movdqa xmm5,xmm4
- ror edx,6
- mov ecx,eax
- movdqa xmm6,xmm4
- add edx,edi
- mov edi,DWORD PTR 20[esp]
- psrld xmm4,3
- mov esi,eax
- ror ecx,9
- paddd xmm3,xmm7
- mov DWORD PTR 16[esp],eax
- xor ecx,eax
- psrld xmm6,7
- xor eax,edi
- add edx,DWORD PTR 12[esp]
- ror ecx,11
- and ebx,eax
- pshufd xmm7,xmm2,250
- xor ecx,esi
- add edx,DWORD PTR 80[esp]
- pslld xmm5,14
- xor ebx,edi
- ror ecx,2
- pxor xmm4,xmm6
- add ebx,edx
- add edx,DWORD PTR 28[esp]
- psrld xmm6,11
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- pxor xmm4,xmm5
- mov esi,DWORD PTR [esp]
- xor edx,ecx
- pslld xmm5,11
- mov edi,DWORD PTR 4[esp]
- xor esi,edi
- ror edx,5
- pxor xmm4,xmm6
- and esi,ecx
- mov DWORD PTR 28[esp],ecx
- movdqa xmm6,xmm7
- xor edx,ecx
- xor edi,esi
- ror edx,6
- pxor xmm4,xmm5
- mov ecx,ebx
- add edx,edi
- psrld xmm7,10
- mov edi,DWORD PTR 16[esp]
- mov esi,ebx
- ror ecx,9
- paddd xmm3,xmm4
- mov DWORD PTR 12[esp],ebx
- xor ecx,ebx
- psrlq xmm6,17
- xor ebx,edi
- add edx,DWORD PTR 8[esp]
- ror ecx,11
- pxor xmm7,xmm6
- and eax,ebx
- xor ecx,esi
- psrlq xmm6,2
- add edx,DWORD PTR 84[esp]
- xor eax,edi
- ror ecx,2
- pxor xmm7,xmm6
- add eax,edx
- add edx,DWORD PTR 24[esp]
- pshufd xmm7,xmm7,128
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 28[esp]
- xor edx,ecx
- mov edi,DWORD PTR [esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- psrldq xmm7,8
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- xor edi,esi
- paddd xmm3,xmm7
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 12[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR 8[esp],eax
- pshufd xmm7,xmm3,80
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 4[esp]
- movdqa xmm6,xmm7
- ror ecx,11
- psrld xmm7,10
- and ebx,eax
- psrlq xmm6,17
- xor ecx,esi
- add edx,DWORD PTR 88[esp]
- xor ebx,edi
- ror ecx,2
- pxor xmm7,xmm6
- add ebx,edx
- add edx,DWORD PTR 20[esp]
- psrlq xmm6,2
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- pxor xmm7,xmm6
- mov esi,DWORD PTR 24[esp]
- xor edx,ecx
- mov edi,DWORD PTR 28[esp]
- pshufd xmm7,xmm7,8
- xor esi,edi
- ror edx,5
- movdqa xmm6,XMMWORD PTR 48[ebp]
- and esi,ecx
- mov DWORD PTR 20[esp],ecx
- pslldq xmm7,8
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 8[esp]
- mov esi,ebx
- ror ecx,9
- paddd xmm3,xmm7
- mov DWORD PTR 4[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR [esp]
- paddd xmm6,xmm3
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 92[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,ecx
- movdqa XMMWORD PTR 80[esp],xmm6
- cmp DWORD PTR 64[ebp],66051
- jne $L013ssse3_00_47
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 20[esp]
- xor edx,ecx
- mov edi,DWORD PTR 24[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 4[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR [esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 28[esp]
- ror ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 32[esp]
- xor ebx,edi
- ror ecx,2
- add ebx,edx
- add edx,DWORD PTR 12[esp]
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 16[esp]
- xor edx,ecx
- mov edi,DWORD PTR 20[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 12[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR [esp]
- mov esi,ebx
- ror ecx,9
- mov DWORD PTR 28[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 24[esp]
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 36[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 12[esp]
- xor edx,ecx
- mov edi,DWORD PTR 16[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 28[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR 24[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 20[esp]
- ror ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 40[esp]
- xor ebx,edi
- ror ecx,2
- add ebx,edx
- add edx,DWORD PTR 4[esp]
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 8[esp]
- xor edx,ecx
- mov edi,DWORD PTR 12[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 4[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 24[esp]
- mov esi,ebx
- ror ecx,9
- mov DWORD PTR 20[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 16[esp]
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 44[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 4[esp]
- xor edx,ecx
- mov edi,DWORD PTR 8[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 20[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR 16[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 12[esp]
- ror ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 48[esp]
- xor ebx,edi
- ror ecx,2
- add ebx,edx
- add edx,DWORD PTR 28[esp]
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR [esp]
- xor edx,ecx
- mov edi,DWORD PTR 4[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 28[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 16[esp]
- mov esi,ebx
- ror ecx,9
- mov DWORD PTR 12[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 8[esp]
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 52[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 28[esp]
- xor edx,ecx
- mov edi,DWORD PTR [esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 12[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR 8[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 4[esp]
- ror ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 56[esp]
- xor ebx,edi
- ror ecx,2
- add ebx,edx
- add edx,DWORD PTR 20[esp]
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 24[esp]
- xor edx,ecx
- mov edi,DWORD PTR 28[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 20[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 8[esp]
- mov esi,ebx
- ror ecx,9
- mov DWORD PTR 4[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR [esp]
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 60[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 20[esp]
- xor edx,ecx
- mov edi,DWORD PTR 24[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 4[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR [esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 28[esp]
- ror ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 64[esp]
- xor ebx,edi
- ror ecx,2
- add ebx,edx
- add edx,DWORD PTR 12[esp]
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 16[esp]
- xor edx,ecx
- mov edi,DWORD PTR 20[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 12[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR [esp]
- mov esi,ebx
- ror ecx,9
- mov DWORD PTR 28[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 24[esp]
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 68[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 12[esp]
- xor edx,ecx
- mov edi,DWORD PTR 16[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 28[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR 24[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 20[esp]
- ror ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 72[esp]
- xor ebx,edi
- ror ecx,2
- add ebx,edx
- add edx,DWORD PTR 4[esp]
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 8[esp]
- xor edx,ecx
- mov edi,DWORD PTR 12[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 4[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 24[esp]
- mov esi,ebx
- ror ecx,9
- mov DWORD PTR 20[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 16[esp]
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 76[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 4[esp]
- xor edx,ecx
- mov edi,DWORD PTR 8[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 20[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR 16[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 12[esp]
- ror ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 80[esp]
- xor ebx,edi
- ror ecx,2
- add ebx,edx
- add edx,DWORD PTR 28[esp]
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR [esp]
- xor edx,ecx
- mov edi,DWORD PTR 4[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 28[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 16[esp]
- mov esi,ebx
- ror ecx,9
- mov DWORD PTR 12[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 8[esp]
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 84[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 28[esp]
- xor edx,ecx
- mov edi,DWORD PTR [esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 12[esp]
- mov esi,eax
- ror ecx,9
- mov DWORD PTR 8[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 4[esp]
- ror ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 88[esp]
- xor ebx,edi
- ror ecx,2
- add ebx,edx
- add edx,DWORD PTR 20[esp]
- add ebx,ecx
- mov ecx,edx
- ror edx,14
- mov esi,DWORD PTR 24[esp]
- xor edx,ecx
- mov edi,DWORD PTR 28[esp]
- xor esi,edi
- ror edx,5
- and esi,ecx
- mov DWORD PTR 20[esp],ecx
- xor edx,ecx
- xor edi,esi
- ror edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 8[esp]
- mov esi,ebx
- ror ecx,9
- mov DWORD PTR 4[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR [esp]
- ror ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 92[esp]
- xor eax,edi
- ror ecx,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,ecx
- mov esi,DWORD PTR 96[esp]
- xor ebx,edi
- mov ecx,DWORD PTR 12[esp]
- add eax,DWORD PTR [esi]
- add ebx,DWORD PTR 4[esi]
- add edi,DWORD PTR 8[esi]
- add ecx,DWORD PTR 12[esi]
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],edi
- mov DWORD PTR 12[esi],ecx
- mov DWORD PTR 4[esp],ebx
- xor ebx,edi
- mov DWORD PTR 8[esp],edi
- mov DWORD PTR 12[esp],ecx
- mov edi,DWORD PTR 20[esp]
- mov ecx,DWORD PTR 24[esp]
- add edx,DWORD PTR 16[esi]
- add edi,DWORD PTR 20[esi]
- add ecx,DWORD PTR 24[esi]
- mov DWORD PTR 16[esi],edx
- mov DWORD PTR 20[esi],edi
- mov DWORD PTR 20[esp],edi
- mov edi,DWORD PTR 28[esp]
- mov DWORD PTR 24[esi],ecx
- add edi,DWORD PTR 28[esi]
- mov DWORD PTR 24[esp],ecx
- mov DWORD PTR 28[esi],edi
- mov DWORD PTR 28[esp],edi
- mov edi,DWORD PTR 100[esp]
- movdqa xmm7,XMMWORD PTR 64[ebp]
- sub ebp,192
- cmp edi,DWORD PTR 104[esp]
- jb $L012grand_ssse3
- mov esp,DWORD PTR 108[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-ALIGN 32
-$L005AVX:
- and edx,264
- cmp edx,264
- je $L014AVX_BMI
- lea esp,DWORD PTR [esp-96]
- vzeroall
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov edi,DWORD PTR 12[esi]
- mov DWORD PTR 4[esp],ebx
- xor ebx,ecx
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 12[esp],edi
- mov edx,DWORD PTR 16[esi]
- mov edi,DWORD PTR 20[esi]
- mov ecx,DWORD PTR 24[esi]
- mov esi,DWORD PTR 28[esi]
- mov DWORD PTR 20[esp],edi
- mov edi,DWORD PTR 100[esp]
- mov DWORD PTR 24[esp],ecx
- mov DWORD PTR 28[esp],esi
- vmovdqa xmm7,XMMWORD PTR 256[ebp]
- jmp $L015grand_avx
-ALIGN 32
-$L015grand_avx:
- vmovdqu xmm0,XMMWORD PTR [edi]
- vmovdqu xmm1,XMMWORD PTR 16[edi]
- vmovdqu xmm2,XMMWORD PTR 32[edi]
- vmovdqu xmm3,XMMWORD PTR 48[edi]
- add edi,64
- vpshufb xmm0,xmm0,xmm7
- mov DWORD PTR 100[esp],edi
- vpshufb xmm1,xmm1,xmm7
- vpshufb xmm2,xmm2,xmm7
- vpaddd xmm4,xmm0,XMMWORD PTR [ebp]
- vpshufb xmm3,xmm3,xmm7
- vpaddd xmm5,xmm1,XMMWORD PTR 16[ebp]
- vpaddd xmm6,xmm2,XMMWORD PTR 32[ebp]
- vpaddd xmm7,xmm3,XMMWORD PTR 48[ebp]
- vmovdqa XMMWORD PTR 32[esp],xmm4
- vmovdqa XMMWORD PTR 48[esp],xmm5
- vmovdqa XMMWORD PTR 64[esp],xmm6
- vmovdqa XMMWORD PTR 80[esp],xmm7
- jmp $L016avx_00_47
-ALIGN 16
-$L016avx_00_47:
- add ebp,64
- vpalignr xmm4,xmm1,xmm0,4
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 20[esp]
- vpalignr xmm7,xmm3,xmm2,4
- xor edx,ecx
- mov edi,DWORD PTR 24[esp]
- xor esi,edi
- vpsrld xmm6,xmm4,7
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- vpaddd xmm0,xmm0,xmm7
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrld xmm7,xmm4,3
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 4[esp]
- vpslld xmm5,xmm4,14
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR [esp],eax
- vpxor xmm4,xmm7,xmm6
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 28[esp]
- vpshufd xmm7,xmm3,250
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- vpsrld xmm6,xmm6,11
- add edx,DWORD PTR 32[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- vpxor xmm4,xmm4,xmm5
- add ebx,edx
- add edx,DWORD PTR 12[esp]
- add ebx,ecx
- vpslld xmm5,xmm5,11
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 16[esp]
- vpxor xmm4,xmm4,xmm6
- xor edx,ecx
- mov edi,DWORD PTR 20[esp]
- xor esi,edi
- vpsrld xmm6,xmm7,10
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 12[esp],ecx
- vpxor xmm4,xmm4,xmm5
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrlq xmm5,xmm7,17
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR [esp]
- vpaddd xmm0,xmm0,xmm4
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 28[esp],ebx
- vpxor xmm6,xmm6,xmm5
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 24[esp]
- vpsrlq xmm7,xmm7,19
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- vpxor xmm6,xmm6,xmm7
- add edx,DWORD PTR 36[esp]
- xor eax,edi
- shrd ecx,ecx,2
- vpshufd xmm7,xmm6,132
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,ecx
- vpsrldq xmm7,xmm7,8
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 12[esp]
- vpaddd xmm0,xmm0,xmm7
- xor edx,ecx
- mov edi,DWORD PTR 16[esp]
- xor esi,edi
- vpshufd xmm7,xmm0,80
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- vpsrld xmm6,xmm7,10
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrlq xmm5,xmm7,17
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 28[esp]
- vpxor xmm6,xmm6,xmm5
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 24[esp],eax
- vpsrlq xmm7,xmm7,19
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 20[esp]
- vpxor xmm6,xmm6,xmm7
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- vpshufd xmm7,xmm6,232
- add edx,DWORD PTR 40[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- vpslldq xmm7,xmm7,8
- add ebx,edx
- add edx,DWORD PTR 4[esp]
- add ebx,ecx
- vpaddd xmm0,xmm0,xmm7
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 8[esp]
- vpaddd xmm6,xmm0,XMMWORD PTR [ebp]
- xor edx,ecx
- mov edi,DWORD PTR 12[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 4[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 24[esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 20[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 16[esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 44[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,ecx
- vmovdqa XMMWORD PTR 32[esp],xmm6
- vpalignr xmm4,xmm2,xmm1,4
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 4[esp]
- vpalignr xmm7,xmm0,xmm3,4
- xor edx,ecx
- mov edi,DWORD PTR 8[esp]
- xor esi,edi
- vpsrld xmm6,xmm4,7
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- vpaddd xmm1,xmm1,xmm7
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrld xmm7,xmm4,3
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 20[esp]
- vpslld xmm5,xmm4,14
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 16[esp],eax
- vpxor xmm4,xmm7,xmm6
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 12[esp]
- vpshufd xmm7,xmm0,250
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- vpsrld xmm6,xmm6,11
- add edx,DWORD PTR 48[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- vpxor xmm4,xmm4,xmm5
- add ebx,edx
- add edx,DWORD PTR 28[esp]
- add ebx,ecx
- vpslld xmm5,xmm5,11
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR [esp]
- vpxor xmm4,xmm4,xmm6
- xor edx,ecx
- mov edi,DWORD PTR 4[esp]
- xor esi,edi
- vpsrld xmm6,xmm7,10
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 28[esp],ecx
- vpxor xmm4,xmm4,xmm5
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrlq xmm5,xmm7,17
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 16[esp]
- vpaddd xmm1,xmm1,xmm4
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 12[esp],ebx
- vpxor xmm6,xmm6,xmm5
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 8[esp]
- vpsrlq xmm7,xmm7,19
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- vpxor xmm6,xmm6,xmm7
- add edx,DWORD PTR 52[esp]
- xor eax,edi
- shrd ecx,ecx,2
- vpshufd xmm7,xmm6,132
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,ecx
- vpsrldq xmm7,xmm7,8
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 28[esp]
- vpaddd xmm1,xmm1,xmm7
- xor edx,ecx
- mov edi,DWORD PTR [esp]
- xor esi,edi
- vpshufd xmm7,xmm1,80
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- vpsrld xmm6,xmm7,10
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrlq xmm5,xmm7,17
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 12[esp]
- vpxor xmm6,xmm6,xmm5
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 8[esp],eax
- vpsrlq xmm7,xmm7,19
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 4[esp]
- vpxor xmm6,xmm6,xmm7
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- vpshufd xmm7,xmm6,232
- add edx,DWORD PTR 56[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- vpslldq xmm7,xmm7,8
- add ebx,edx
- add edx,DWORD PTR 20[esp]
- add ebx,ecx
- vpaddd xmm1,xmm1,xmm7
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 24[esp]
- vpaddd xmm6,xmm1,XMMWORD PTR 16[ebp]
- xor edx,ecx
- mov edi,DWORD PTR 28[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 20[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 8[esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 4[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR [esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 60[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,ecx
- vmovdqa XMMWORD PTR 48[esp],xmm6
- vpalignr xmm4,xmm3,xmm2,4
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 20[esp]
- vpalignr xmm7,xmm1,xmm0,4
- xor edx,ecx
- mov edi,DWORD PTR 24[esp]
- xor esi,edi
- vpsrld xmm6,xmm4,7
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- vpaddd xmm2,xmm2,xmm7
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrld xmm7,xmm4,3
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 4[esp]
- vpslld xmm5,xmm4,14
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR [esp],eax
- vpxor xmm4,xmm7,xmm6
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 28[esp]
- vpshufd xmm7,xmm1,250
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- vpsrld xmm6,xmm6,11
- add edx,DWORD PTR 64[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- vpxor xmm4,xmm4,xmm5
- add ebx,edx
- add edx,DWORD PTR 12[esp]
- add ebx,ecx
- vpslld xmm5,xmm5,11
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 16[esp]
- vpxor xmm4,xmm4,xmm6
- xor edx,ecx
- mov edi,DWORD PTR 20[esp]
- xor esi,edi
- vpsrld xmm6,xmm7,10
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 12[esp],ecx
- vpxor xmm4,xmm4,xmm5
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrlq xmm5,xmm7,17
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR [esp]
- vpaddd xmm2,xmm2,xmm4
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 28[esp],ebx
- vpxor xmm6,xmm6,xmm5
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 24[esp]
- vpsrlq xmm7,xmm7,19
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- vpxor xmm6,xmm6,xmm7
- add edx,DWORD PTR 68[esp]
- xor eax,edi
- shrd ecx,ecx,2
- vpshufd xmm7,xmm6,132
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,ecx
- vpsrldq xmm7,xmm7,8
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 12[esp]
- vpaddd xmm2,xmm2,xmm7
- xor edx,ecx
- mov edi,DWORD PTR 16[esp]
- xor esi,edi
- vpshufd xmm7,xmm2,80
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- vpsrld xmm6,xmm7,10
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrlq xmm5,xmm7,17
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 28[esp]
- vpxor xmm6,xmm6,xmm5
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 24[esp],eax
- vpsrlq xmm7,xmm7,19
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 20[esp]
- vpxor xmm6,xmm6,xmm7
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- vpshufd xmm7,xmm6,232
- add edx,DWORD PTR 72[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- vpslldq xmm7,xmm7,8
- add ebx,edx
- add edx,DWORD PTR 4[esp]
- add ebx,ecx
- vpaddd xmm2,xmm2,xmm7
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 8[esp]
- vpaddd xmm6,xmm2,XMMWORD PTR 32[ebp]
- xor edx,ecx
- mov edi,DWORD PTR 12[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 4[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 24[esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 20[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 16[esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 76[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,ecx
- vmovdqa XMMWORD PTR 64[esp],xmm6
- vpalignr xmm4,xmm0,xmm3,4
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 4[esp]
- vpalignr xmm7,xmm2,xmm1,4
- xor edx,ecx
- mov edi,DWORD PTR 8[esp]
- xor esi,edi
- vpsrld xmm6,xmm4,7
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- vpaddd xmm3,xmm3,xmm7
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrld xmm7,xmm4,3
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 20[esp]
- vpslld xmm5,xmm4,14
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 16[esp],eax
- vpxor xmm4,xmm7,xmm6
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 12[esp]
- vpshufd xmm7,xmm2,250
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- vpsrld xmm6,xmm6,11
- add edx,DWORD PTR 80[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- vpxor xmm4,xmm4,xmm5
- add ebx,edx
- add edx,DWORD PTR 28[esp]
- add ebx,ecx
- vpslld xmm5,xmm5,11
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR [esp]
- vpxor xmm4,xmm4,xmm6
- xor edx,ecx
- mov edi,DWORD PTR 4[esp]
- xor esi,edi
- vpsrld xmm6,xmm7,10
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 28[esp],ecx
- vpxor xmm4,xmm4,xmm5
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrlq xmm5,xmm7,17
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 16[esp]
- vpaddd xmm3,xmm3,xmm4
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 12[esp],ebx
- vpxor xmm6,xmm6,xmm5
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 8[esp]
- vpsrlq xmm7,xmm7,19
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- vpxor xmm6,xmm6,xmm7
- add edx,DWORD PTR 84[esp]
- xor eax,edi
- shrd ecx,ecx,2
- vpshufd xmm7,xmm6,132
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,ecx
- vpsrldq xmm7,xmm7,8
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 28[esp]
- vpaddd xmm3,xmm3,xmm7
- xor edx,ecx
- mov edi,DWORD PTR [esp]
- xor esi,edi
- vpshufd xmm7,xmm3,80
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- vpsrld xmm6,xmm7,10
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- vpsrlq xmm5,xmm7,17
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 12[esp]
- vpxor xmm6,xmm6,xmm5
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 8[esp],eax
- vpsrlq xmm7,xmm7,19
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 4[esp]
- vpxor xmm6,xmm6,xmm7
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- vpshufd xmm7,xmm6,232
- add edx,DWORD PTR 88[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- vpslldq xmm7,xmm7,8
- add ebx,edx
- add edx,DWORD PTR 20[esp]
- add ebx,ecx
- vpaddd xmm3,xmm3,xmm7
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 24[esp]
- vpaddd xmm6,xmm3,XMMWORD PTR 48[ebp]
- xor edx,ecx
- mov edi,DWORD PTR 28[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 20[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 8[esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 4[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR [esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 92[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,ecx
- vmovdqa XMMWORD PTR 80[esp],xmm6
- cmp DWORD PTR 64[ebp],66051
- jne $L016avx_00_47
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 20[esp]
- xor edx,ecx
- mov edi,DWORD PTR 24[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 4[esp]
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR [esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 28[esp]
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 32[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- add ebx,edx
- add edx,DWORD PTR 12[esp]
- add ebx,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 16[esp]
- xor edx,ecx
- mov edi,DWORD PTR 20[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 12[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR [esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 28[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 24[esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 36[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 12[esp]
- xor edx,ecx
- mov edi,DWORD PTR 16[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 28[esp]
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 24[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 20[esp]
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 40[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- add ebx,edx
- add edx,DWORD PTR 4[esp]
- add ebx,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 8[esp]
- xor edx,ecx
- mov edi,DWORD PTR 12[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 4[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 24[esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 20[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 16[esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 44[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 4[esp]
- xor edx,ecx
- mov edi,DWORD PTR 8[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 20[esp]
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 16[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 12[esp]
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 48[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- add ebx,edx
- add edx,DWORD PTR 28[esp]
- add ebx,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR [esp]
- xor edx,ecx
- mov edi,DWORD PTR 4[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 28[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 16[esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 12[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 8[esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 52[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 28[esp]
- xor edx,ecx
- mov edi,DWORD PTR [esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 12[esp]
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 8[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 4[esp]
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 56[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- add ebx,edx
- add edx,DWORD PTR 20[esp]
- add ebx,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 24[esp]
- xor edx,ecx
- mov edi,DWORD PTR 28[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 20[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 8[esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 4[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR [esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 60[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 20[esp]
- xor edx,ecx
- mov edi,DWORD PTR 24[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 16[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 4[esp]
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR [esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 28[esp]
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 64[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- add ebx,edx
- add edx,DWORD PTR 12[esp]
- add ebx,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 16[esp]
- xor edx,ecx
- mov edi,DWORD PTR 20[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 12[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR [esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 28[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 24[esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 68[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR 8[esp]
- add eax,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 12[esp]
- xor edx,ecx
- mov edi,DWORD PTR 16[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 8[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 28[esp]
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 24[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 20[esp]
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 72[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- add ebx,edx
- add edx,DWORD PTR 4[esp]
- add ebx,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 8[esp]
- xor edx,ecx
- mov edi,DWORD PTR 12[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 4[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 24[esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 20[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 16[esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 76[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR [esp]
- add eax,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 4[esp]
- xor edx,ecx
- mov edi,DWORD PTR 8[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR [esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 20[esp]
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 16[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 12[esp]
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 80[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- add ebx,edx
- add edx,DWORD PTR 28[esp]
- add ebx,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR [esp]
- xor edx,ecx
- mov edi,DWORD PTR 4[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 28[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 16[esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 12[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR 8[esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 84[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR 24[esp]
- add eax,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 28[esp]
- xor edx,ecx
- mov edi,DWORD PTR [esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 24[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,eax
- add edx,edi
- mov edi,DWORD PTR 12[esp]
- mov esi,eax
- shrd ecx,ecx,9
- mov DWORD PTR 8[esp],eax
- xor ecx,eax
- xor eax,edi
- add edx,DWORD PTR 4[esp]
- shrd ecx,ecx,11
- and ebx,eax
- xor ecx,esi
- add edx,DWORD PTR 88[esp]
- xor ebx,edi
- shrd ecx,ecx,2
- add ebx,edx
- add edx,DWORD PTR 20[esp]
- add ebx,ecx
- mov ecx,edx
- shrd edx,edx,14
- mov esi,DWORD PTR 24[esp]
- xor edx,ecx
- mov edi,DWORD PTR 28[esp]
- xor esi,edi
- shrd edx,edx,5
- and esi,ecx
- mov DWORD PTR 20[esp],ecx
- xor edx,ecx
- xor edi,esi
- shrd edx,edx,6
- mov ecx,ebx
- add edx,edi
- mov edi,DWORD PTR 8[esp]
- mov esi,ebx
- shrd ecx,ecx,9
- mov DWORD PTR 4[esp],ebx
- xor ecx,ebx
- xor ebx,edi
- add edx,DWORD PTR [esp]
- shrd ecx,ecx,11
- and eax,ebx
- xor ecx,esi
- add edx,DWORD PTR 92[esp]
- xor eax,edi
- shrd ecx,ecx,2
- add eax,edx
- add edx,DWORD PTR 16[esp]
- add eax,ecx
- mov esi,DWORD PTR 96[esp]
- xor ebx,edi
- mov ecx,DWORD PTR 12[esp]
- add eax,DWORD PTR [esi]
- add ebx,DWORD PTR 4[esi]
- add edi,DWORD PTR 8[esi]
- add ecx,DWORD PTR 12[esi]
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],edi
- mov DWORD PTR 12[esi],ecx
- mov DWORD PTR 4[esp],ebx
- xor ebx,edi
- mov DWORD PTR 8[esp],edi
- mov DWORD PTR 12[esp],ecx
- mov edi,DWORD PTR 20[esp]
- mov ecx,DWORD PTR 24[esp]
- add edx,DWORD PTR 16[esi]
- add edi,DWORD PTR 20[esi]
- add ecx,DWORD PTR 24[esi]
- mov DWORD PTR 16[esi],edx
- mov DWORD PTR 20[esi],edi
- mov DWORD PTR 20[esp],edi
- mov edi,DWORD PTR 28[esp]
- mov DWORD PTR 24[esi],ecx
- add edi,DWORD PTR 28[esi]
- mov DWORD PTR 24[esp],ecx
- mov DWORD PTR 28[esi],edi
- mov DWORD PTR 28[esp],edi
- mov edi,DWORD PTR 100[esp]
- vmovdqa xmm7,XMMWORD PTR 64[ebp]
- sub ebp,192
- cmp edi,DWORD PTR 104[esp]
- jb $L015grand_avx
- mov esp,DWORD PTR 108[esp]
- vzeroall
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-ALIGN 32
-$L014AVX_BMI:
- lea esp,DWORD PTR [esp-96]
- vzeroall
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov edi,DWORD PTR 12[esi]
- mov DWORD PTR 4[esp],ebx
- xor ebx,ecx
- mov DWORD PTR 8[esp],ecx
- mov DWORD PTR 12[esp],edi
- mov edx,DWORD PTR 16[esi]
- mov edi,DWORD PTR 20[esi]
- mov ecx,DWORD PTR 24[esi]
- mov esi,DWORD PTR 28[esi]
- mov DWORD PTR 20[esp],edi
- mov edi,DWORD PTR 100[esp]
- mov DWORD PTR 24[esp],ecx
- mov DWORD PTR 28[esp],esi
- vmovdqa xmm7,XMMWORD PTR 256[ebp]
- jmp $L017grand_avx_bmi
-ALIGN 32
-$L017grand_avx_bmi:
- vmovdqu xmm0,XMMWORD PTR [edi]
- vmovdqu xmm1,XMMWORD PTR 16[edi]
- vmovdqu xmm2,XMMWORD PTR 32[edi]
- vmovdqu xmm3,XMMWORD PTR 48[edi]
- add edi,64
- vpshufb xmm0,xmm0,xmm7
- mov DWORD PTR 100[esp],edi
- vpshufb xmm1,xmm1,xmm7
- vpshufb xmm2,xmm2,xmm7
- vpaddd xmm4,xmm0,XMMWORD PTR [ebp]
- vpshufb xmm3,xmm3,xmm7
- vpaddd xmm5,xmm1,XMMWORD PTR 16[ebp]
- vpaddd xmm6,xmm2,XMMWORD PTR 32[ebp]
- vpaddd xmm7,xmm3,XMMWORD PTR 48[ebp]
- vmovdqa XMMWORD PTR 32[esp],xmm4
- vmovdqa XMMWORD PTR 48[esp],xmm5
- vmovdqa XMMWORD PTR 64[esp],xmm6
- vmovdqa XMMWORD PTR 80[esp],xmm7
- jmp $L018avx_bmi_00_47
-ALIGN 16
-$L018avx_bmi_00_47:
- add ebp,64
- vpalignr xmm4,xmm1,xmm0,4
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 16[esp],edx
- vpalignr xmm7,xmm3,xmm2,4
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 24[esp]
- vpsrld xmm6,xmm4,7
- xor ecx,edi
- and edx,DWORD PTR 20[esp]
- mov DWORD PTR [esp],eax
- vpaddd xmm0,xmm0,xmm7
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- vpsrld xmm7,xmm4,3
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- vpslld xmm5,xmm4,14
- mov edi,DWORD PTR 4[esp]
- xor ecx,esi
- xor eax,edi
- vpxor xmm4,xmm7,xmm6
- add edx,DWORD PTR 28[esp]
- and ebx,eax
- add edx,DWORD PTR 32[esp]
- vpshufd xmm7,xmm3,250
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 12[esp]
- vpsrld xmm6,xmm6,11
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpxor xmm4,xmm4,xmm5
- mov DWORD PTR 12[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpslld xmm5,xmm5,11
- andn esi,edx,DWORD PTR 20[esp]
- xor ecx,edi
- and edx,DWORD PTR 16[esp]
- vpxor xmm4,xmm4,xmm6
- mov DWORD PTR 28[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- vpsrld xmm6,xmm7,10
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- vpxor xmm4,xmm4,xmm5
- mov edi,DWORD PTR [esp]
- xor ecx,esi
- xor ebx,edi
- vpsrlq xmm5,xmm7,17
- add edx,DWORD PTR 24[esp]
- and eax,ebx
- add edx,DWORD PTR 36[esp]
- vpaddd xmm0,xmm0,xmm4
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 8[esp]
- vpxor xmm6,xmm6,xmm5
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpsrlq xmm7,xmm7,19
- mov DWORD PTR 8[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpxor xmm6,xmm6,xmm7
- andn esi,edx,DWORD PTR 16[esp]
- xor ecx,edi
- and edx,DWORD PTR 12[esp]
- vpshufd xmm7,xmm6,132
- mov DWORD PTR 24[esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- vpsrldq xmm7,xmm7,8
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- vpaddd xmm0,xmm0,xmm7
- mov edi,DWORD PTR 28[esp]
- xor ecx,esi
- xor eax,edi
- vpshufd xmm7,xmm0,80
- add edx,DWORD PTR 20[esp]
- and ebx,eax
- add edx,DWORD PTR 40[esp]
- vpsrld xmm6,xmm7,10
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 4[esp]
- vpsrlq xmm5,xmm7,17
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpxor xmm6,xmm6,xmm5
- mov DWORD PTR 4[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpsrlq xmm7,xmm7,19
- andn esi,edx,DWORD PTR 12[esp]
- xor ecx,edi
- and edx,DWORD PTR 8[esp]
- vpxor xmm6,xmm6,xmm7
- mov DWORD PTR 20[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- vpshufd xmm7,xmm6,232
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- vpslldq xmm7,xmm7,8
- mov edi,DWORD PTR 24[esp]
- xor ecx,esi
- xor ebx,edi
- vpaddd xmm0,xmm0,xmm7
- add edx,DWORD PTR 16[esp]
- and eax,ebx
- add edx,DWORD PTR 44[esp]
- vpaddd xmm6,xmm0,XMMWORD PTR [ebp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR [esp]
- lea eax,DWORD PTR [ecx*1+eax]
- vmovdqa XMMWORD PTR 32[esp],xmm6
- vpalignr xmm4,xmm2,xmm1,4
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR [esp],edx
- vpalignr xmm7,xmm0,xmm3,4
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 8[esp]
- vpsrld xmm6,xmm4,7
- xor ecx,edi
- and edx,DWORD PTR 4[esp]
- mov DWORD PTR 16[esp],eax
- vpaddd xmm1,xmm1,xmm7
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- vpsrld xmm7,xmm4,3
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- vpslld xmm5,xmm4,14
- mov edi,DWORD PTR 20[esp]
- xor ecx,esi
- xor eax,edi
- vpxor xmm4,xmm7,xmm6
- add edx,DWORD PTR 12[esp]
- and ebx,eax
- add edx,DWORD PTR 48[esp]
- vpshufd xmm7,xmm0,250
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 28[esp]
- vpsrld xmm6,xmm6,11
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpxor xmm4,xmm4,xmm5
- mov DWORD PTR 28[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpslld xmm5,xmm5,11
- andn esi,edx,DWORD PTR 4[esp]
- xor ecx,edi
- and edx,DWORD PTR [esp]
- vpxor xmm4,xmm4,xmm6
- mov DWORD PTR 12[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- vpsrld xmm6,xmm7,10
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- vpxor xmm4,xmm4,xmm5
- mov edi,DWORD PTR 16[esp]
- xor ecx,esi
- xor ebx,edi
- vpsrlq xmm5,xmm7,17
- add edx,DWORD PTR 8[esp]
- and eax,ebx
- add edx,DWORD PTR 52[esp]
- vpaddd xmm1,xmm1,xmm4
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 24[esp]
- vpxor xmm6,xmm6,xmm5
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpsrlq xmm7,xmm7,19
- mov DWORD PTR 24[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpxor xmm6,xmm6,xmm7
- andn esi,edx,DWORD PTR [esp]
- xor ecx,edi
- and edx,DWORD PTR 28[esp]
- vpshufd xmm7,xmm6,132
- mov DWORD PTR 8[esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- vpsrldq xmm7,xmm7,8
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- vpaddd xmm1,xmm1,xmm7
- mov edi,DWORD PTR 12[esp]
- xor ecx,esi
- xor eax,edi
- vpshufd xmm7,xmm1,80
- add edx,DWORD PTR 4[esp]
- and ebx,eax
- add edx,DWORD PTR 56[esp]
- vpsrld xmm6,xmm7,10
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 20[esp]
- vpsrlq xmm5,xmm7,17
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpxor xmm6,xmm6,xmm5
- mov DWORD PTR 20[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpsrlq xmm7,xmm7,19
- andn esi,edx,DWORD PTR 28[esp]
- xor ecx,edi
- and edx,DWORD PTR 24[esp]
- vpxor xmm6,xmm6,xmm7
- mov DWORD PTR 4[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- vpshufd xmm7,xmm6,232
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- vpslldq xmm7,xmm7,8
- mov edi,DWORD PTR 8[esp]
- xor ecx,esi
- xor ebx,edi
- vpaddd xmm1,xmm1,xmm7
- add edx,DWORD PTR [esp]
- and eax,ebx
- add edx,DWORD PTR 60[esp]
- vpaddd xmm6,xmm1,XMMWORD PTR 16[ebp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 16[esp]
- lea eax,DWORD PTR [ecx*1+eax]
- vmovdqa XMMWORD PTR 48[esp],xmm6
- vpalignr xmm4,xmm3,xmm2,4
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 16[esp],edx
- vpalignr xmm7,xmm1,xmm0,4
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 24[esp]
- vpsrld xmm6,xmm4,7
- xor ecx,edi
- and edx,DWORD PTR 20[esp]
- mov DWORD PTR [esp],eax
- vpaddd xmm2,xmm2,xmm7
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- vpsrld xmm7,xmm4,3
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- vpslld xmm5,xmm4,14
- mov edi,DWORD PTR 4[esp]
- xor ecx,esi
- xor eax,edi
- vpxor xmm4,xmm7,xmm6
- add edx,DWORD PTR 28[esp]
- and ebx,eax
- add edx,DWORD PTR 64[esp]
- vpshufd xmm7,xmm1,250
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 12[esp]
- vpsrld xmm6,xmm6,11
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpxor xmm4,xmm4,xmm5
- mov DWORD PTR 12[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpslld xmm5,xmm5,11
- andn esi,edx,DWORD PTR 20[esp]
- xor ecx,edi
- and edx,DWORD PTR 16[esp]
- vpxor xmm4,xmm4,xmm6
- mov DWORD PTR 28[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- vpsrld xmm6,xmm7,10
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- vpxor xmm4,xmm4,xmm5
- mov edi,DWORD PTR [esp]
- xor ecx,esi
- xor ebx,edi
- vpsrlq xmm5,xmm7,17
- add edx,DWORD PTR 24[esp]
- and eax,ebx
- add edx,DWORD PTR 68[esp]
- vpaddd xmm2,xmm2,xmm4
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 8[esp]
- vpxor xmm6,xmm6,xmm5
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpsrlq xmm7,xmm7,19
- mov DWORD PTR 8[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpxor xmm6,xmm6,xmm7
- andn esi,edx,DWORD PTR 16[esp]
- xor ecx,edi
- and edx,DWORD PTR 12[esp]
- vpshufd xmm7,xmm6,132
- mov DWORD PTR 24[esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- vpsrldq xmm7,xmm7,8
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- vpaddd xmm2,xmm2,xmm7
- mov edi,DWORD PTR 28[esp]
- xor ecx,esi
- xor eax,edi
- vpshufd xmm7,xmm2,80
- add edx,DWORD PTR 20[esp]
- and ebx,eax
- add edx,DWORD PTR 72[esp]
- vpsrld xmm6,xmm7,10
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 4[esp]
- vpsrlq xmm5,xmm7,17
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpxor xmm6,xmm6,xmm5
- mov DWORD PTR 4[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpsrlq xmm7,xmm7,19
- andn esi,edx,DWORD PTR 12[esp]
- xor ecx,edi
- and edx,DWORD PTR 8[esp]
- vpxor xmm6,xmm6,xmm7
- mov DWORD PTR 20[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- vpshufd xmm7,xmm6,232
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- vpslldq xmm7,xmm7,8
- mov edi,DWORD PTR 24[esp]
- xor ecx,esi
- xor ebx,edi
- vpaddd xmm2,xmm2,xmm7
- add edx,DWORD PTR 16[esp]
- and eax,ebx
- add edx,DWORD PTR 76[esp]
- vpaddd xmm6,xmm2,XMMWORD PTR 32[ebp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR [esp]
- lea eax,DWORD PTR [ecx*1+eax]
- vmovdqa XMMWORD PTR 64[esp],xmm6
- vpalignr xmm4,xmm0,xmm3,4
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR [esp],edx
- vpalignr xmm7,xmm2,xmm1,4
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 8[esp]
- vpsrld xmm6,xmm4,7
- xor ecx,edi
- and edx,DWORD PTR 4[esp]
- mov DWORD PTR 16[esp],eax
- vpaddd xmm3,xmm3,xmm7
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- vpsrld xmm7,xmm4,3
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- vpslld xmm5,xmm4,14
- mov edi,DWORD PTR 20[esp]
- xor ecx,esi
- xor eax,edi
- vpxor xmm4,xmm7,xmm6
- add edx,DWORD PTR 12[esp]
- and ebx,eax
- add edx,DWORD PTR 80[esp]
- vpshufd xmm7,xmm2,250
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 28[esp]
- vpsrld xmm6,xmm6,11
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpxor xmm4,xmm4,xmm5
- mov DWORD PTR 28[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpslld xmm5,xmm5,11
- andn esi,edx,DWORD PTR 4[esp]
- xor ecx,edi
- and edx,DWORD PTR [esp]
- vpxor xmm4,xmm4,xmm6
- mov DWORD PTR 12[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- vpsrld xmm6,xmm7,10
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- vpxor xmm4,xmm4,xmm5
- mov edi,DWORD PTR 16[esp]
- xor ecx,esi
- xor ebx,edi
- vpsrlq xmm5,xmm7,17
- add edx,DWORD PTR 8[esp]
- and eax,ebx
- add edx,DWORD PTR 84[esp]
- vpaddd xmm3,xmm3,xmm4
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 24[esp]
- vpxor xmm6,xmm6,xmm5
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpsrlq xmm7,xmm7,19
- mov DWORD PTR 24[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpxor xmm6,xmm6,xmm7
- andn esi,edx,DWORD PTR [esp]
- xor ecx,edi
- and edx,DWORD PTR 28[esp]
- vpshufd xmm7,xmm6,132
- mov DWORD PTR 8[esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- vpsrldq xmm7,xmm7,8
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- vpaddd xmm3,xmm3,xmm7
- mov edi,DWORD PTR 12[esp]
- xor ecx,esi
- xor eax,edi
- vpshufd xmm7,xmm3,80
- add edx,DWORD PTR 4[esp]
- and ebx,eax
- add edx,DWORD PTR 88[esp]
- vpsrld xmm6,xmm7,10
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 20[esp]
- vpsrlq xmm5,xmm7,17
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- vpxor xmm6,xmm6,xmm5
- mov DWORD PTR 20[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- vpsrlq xmm7,xmm7,19
- andn esi,edx,DWORD PTR 28[esp]
- xor ecx,edi
- and edx,DWORD PTR 24[esp]
- vpxor xmm6,xmm6,xmm7
- mov DWORD PTR 4[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- vpshufd xmm7,xmm6,232
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- vpslldq xmm7,xmm7,8
- mov edi,DWORD PTR 8[esp]
- xor ecx,esi
- xor ebx,edi
- vpaddd xmm3,xmm3,xmm7
- add edx,DWORD PTR [esp]
- and eax,ebx
- add edx,DWORD PTR 92[esp]
- vpaddd xmm6,xmm3,XMMWORD PTR 48[ebp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 16[esp]
- lea eax,DWORD PTR [ecx*1+eax]
- vmovdqa XMMWORD PTR 80[esp],xmm6
- cmp DWORD PTR 64[ebp],66051
- jne $L018avx_bmi_00_47
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 16[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 24[esp]
- xor ecx,edi
- and edx,DWORD PTR 20[esp]
- mov DWORD PTR [esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- mov edi,DWORD PTR 4[esp]
- xor ecx,esi
- xor eax,edi
- add edx,DWORD PTR 28[esp]
- and ebx,eax
- add edx,DWORD PTR 32[esp]
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 12[esp]
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 12[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 20[esp]
- xor ecx,edi
- and edx,DWORD PTR 16[esp]
- mov DWORD PTR 28[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- mov edi,DWORD PTR [esp]
- xor ecx,esi
- xor ebx,edi
- add edx,DWORD PTR 24[esp]
- and eax,ebx
- add edx,DWORD PTR 36[esp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 8[esp]
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 8[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 16[esp]
- xor ecx,edi
- and edx,DWORD PTR 12[esp]
- mov DWORD PTR 24[esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- mov edi,DWORD PTR 28[esp]
- xor ecx,esi
- xor eax,edi
- add edx,DWORD PTR 20[esp]
- and ebx,eax
- add edx,DWORD PTR 40[esp]
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 4[esp]
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 4[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 12[esp]
- xor ecx,edi
- and edx,DWORD PTR 8[esp]
- mov DWORD PTR 20[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- mov edi,DWORD PTR 24[esp]
- xor ecx,esi
- xor ebx,edi
- add edx,DWORD PTR 16[esp]
- and eax,ebx
- add edx,DWORD PTR 44[esp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR [esp]
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR [esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 8[esp]
- xor ecx,edi
- and edx,DWORD PTR 4[esp]
- mov DWORD PTR 16[esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- mov edi,DWORD PTR 20[esp]
- xor ecx,esi
- xor eax,edi
- add edx,DWORD PTR 12[esp]
- and ebx,eax
- add edx,DWORD PTR 48[esp]
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 28[esp]
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 28[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 4[esp]
- xor ecx,edi
- and edx,DWORD PTR [esp]
- mov DWORD PTR 12[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- mov edi,DWORD PTR 16[esp]
- xor ecx,esi
- xor ebx,edi
- add edx,DWORD PTR 8[esp]
- and eax,ebx
- add edx,DWORD PTR 52[esp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 24[esp]
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 24[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR [esp]
- xor ecx,edi
- and edx,DWORD PTR 28[esp]
- mov DWORD PTR 8[esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- mov edi,DWORD PTR 12[esp]
- xor ecx,esi
- xor eax,edi
- add edx,DWORD PTR 4[esp]
- and ebx,eax
- add edx,DWORD PTR 56[esp]
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 20[esp]
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 20[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 28[esp]
- xor ecx,edi
- and edx,DWORD PTR 24[esp]
- mov DWORD PTR 4[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- mov edi,DWORD PTR 8[esp]
- xor ecx,esi
- xor ebx,edi
- add edx,DWORD PTR [esp]
- and eax,ebx
- add edx,DWORD PTR 60[esp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 16[esp]
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 16[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 24[esp]
- xor ecx,edi
- and edx,DWORD PTR 20[esp]
- mov DWORD PTR [esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- mov edi,DWORD PTR 4[esp]
- xor ecx,esi
- xor eax,edi
- add edx,DWORD PTR 28[esp]
- and ebx,eax
- add edx,DWORD PTR 64[esp]
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 12[esp]
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 12[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 20[esp]
- xor ecx,edi
- and edx,DWORD PTR 16[esp]
- mov DWORD PTR 28[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- mov edi,DWORD PTR [esp]
- xor ecx,esi
- xor ebx,edi
- add edx,DWORD PTR 24[esp]
- and eax,ebx
- add edx,DWORD PTR 68[esp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 8[esp]
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 8[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 16[esp]
- xor ecx,edi
- and edx,DWORD PTR 12[esp]
- mov DWORD PTR 24[esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- mov edi,DWORD PTR 28[esp]
- xor ecx,esi
- xor eax,edi
- add edx,DWORD PTR 20[esp]
- and ebx,eax
- add edx,DWORD PTR 72[esp]
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 4[esp]
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 4[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 12[esp]
- xor ecx,edi
- and edx,DWORD PTR 8[esp]
- mov DWORD PTR 20[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- mov edi,DWORD PTR 24[esp]
- xor ecx,esi
- xor ebx,edi
- add edx,DWORD PTR 16[esp]
- and eax,ebx
- add edx,DWORD PTR 76[esp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR [esp]
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR [esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 8[esp]
- xor ecx,edi
- and edx,DWORD PTR 4[esp]
- mov DWORD PTR 16[esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- mov edi,DWORD PTR 20[esp]
- xor ecx,esi
- xor eax,edi
- add edx,DWORD PTR 12[esp]
- and ebx,eax
- add edx,DWORD PTR 80[esp]
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 28[esp]
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 28[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 4[esp]
- xor ecx,edi
- and edx,DWORD PTR [esp]
- mov DWORD PTR 12[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- mov edi,DWORD PTR 16[esp]
- xor ecx,esi
- xor ebx,edi
- add edx,DWORD PTR 8[esp]
- and eax,ebx
- add edx,DWORD PTR 84[esp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 24[esp]
- lea eax,DWORD PTR [ecx*1+eax]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 24[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR [esp]
- xor ecx,edi
- and edx,DWORD PTR 28[esp]
- mov DWORD PTR 8[esp],eax
- or edx,esi
- rorx edi,eax,2
- rorx esi,eax,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,eax,22
- xor esi,edi
- mov edi,DWORD PTR 12[esp]
- xor ecx,esi
- xor eax,edi
- add edx,DWORD PTR 4[esp]
- and ebx,eax
- add edx,DWORD PTR 88[esp]
- xor ebx,edi
- add ecx,edx
- add edx,DWORD PTR 20[esp]
- lea ebx,DWORD PTR [ecx*1+ebx]
- rorx ecx,edx,6
- rorx esi,edx,11
- mov DWORD PTR 20[esp],edx
- rorx edi,edx,25
- xor ecx,esi
- andn esi,edx,DWORD PTR 28[esp]
- xor ecx,edi
- and edx,DWORD PTR 24[esp]
- mov DWORD PTR 4[esp],ebx
- or edx,esi
- rorx edi,ebx,2
- rorx esi,ebx,13
- lea edx,DWORD PTR [ecx*1+edx]
- rorx ecx,ebx,22
- xor esi,edi
- mov edi,DWORD PTR 8[esp]
- xor ecx,esi
- xor ebx,edi
- add edx,DWORD PTR [esp]
- and eax,ebx
- add edx,DWORD PTR 92[esp]
- xor eax,edi
- add ecx,edx
- add edx,DWORD PTR 16[esp]
- lea eax,DWORD PTR [ecx*1+eax]
- mov esi,DWORD PTR 96[esp]
- xor ebx,edi
- mov ecx,DWORD PTR 12[esp]
- add eax,DWORD PTR [esi]
- add ebx,DWORD PTR 4[esi]
- add edi,DWORD PTR 8[esi]
- add ecx,DWORD PTR 12[esi]
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- mov DWORD PTR 8[esi],edi
- mov DWORD PTR 12[esi],ecx
- mov DWORD PTR 4[esp],ebx
- xor ebx,edi
- mov DWORD PTR 8[esp],edi
- mov DWORD PTR 12[esp],ecx
- mov edi,DWORD PTR 20[esp]
- mov ecx,DWORD PTR 24[esp]
- add edx,DWORD PTR 16[esi]
- add edi,DWORD PTR 20[esi]
- add ecx,DWORD PTR 24[esi]
- mov DWORD PTR 16[esi],edx
- mov DWORD PTR 20[esi],edi
- mov DWORD PTR 20[esp],edi
- mov edi,DWORD PTR 28[esp]
- mov DWORD PTR 24[esi],ecx
- add edi,DWORD PTR 28[esi]
- mov DWORD PTR 24[esp],ecx
- mov DWORD PTR 28[esi],edi
- mov DWORD PTR 28[esp],edi
- mov edi,DWORD PTR 100[esp]
- vmovdqa xmm7,XMMWORD PTR 64[ebp]
- sub ebp,192
- cmp edi,DWORD PTR 104[esp]
- jb $L017grand_avx_bmi
- mov esp,DWORD PTR 108[esp]
- vzeroall
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_sha256_block_data_order ENDP
-.text$ ENDS
-.bss SEGMENT 'BSS'
-COMM _OPENSSL_ia32cap_P:DWORD:4
-.bss ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+;EXTERN _OPENSSL_ia32cap_P:NEAR
+ALIGN 16
+_sha256_block_data_order PROC PUBLIC
+$L_sha256_block_data_order_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov ebx,esp
+ call $L000pic_point
+$L000pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($L001K256-$L000pic_point)[ebp]
+ sub esp,16
+ and esp,-64
+ shl eax,6
+ add eax,edi
+ mov DWORD PTR [esp],esi
+ mov DWORD PTR 4[esp],edi
+ mov DWORD PTR 8[esp],eax
+ mov DWORD PTR 12[esp],ebx
+ lea edx,DWORD PTR _OPENSSL_ia32cap_P
+ mov ecx,DWORD PTR [edx]
+ mov ebx,DWORD PTR 4[edx]
+ test ecx,1048576
+ jnz $L002loop
+ mov edx,DWORD PTR 8[edx]
+ test ecx,16777216
+ jz $L003no_xmm
+ and ecx,1073741824
+ and ebx,268435968
+ test edx,536870912
+ jnz $L004shaext
+ or ecx,ebx
+ and ecx,1342177280
+ cmp ecx,1342177280
+ je $L005AVX
+ test ebx,512
+ jnz $L006SSSE3
+$L003no_xmm:
+ sub eax,edi
+ cmp eax,256
+ jae $L007unrolled
+ jmp $L002loop
+ALIGN 16
+$L002loop:
+ mov eax,DWORD PTR [edi]
+ mov ebx,DWORD PTR 4[edi]
+ mov ecx,DWORD PTR 8[edi]
+ bswap eax
+ mov edx,DWORD PTR 12[edi]
+ bswap ebx
+ push eax
+ bswap ecx
+ push ebx
+ bswap edx
+ push ecx
+ push edx
+ mov eax,DWORD PTR 16[edi]
+ mov ebx,DWORD PTR 20[edi]
+ mov ecx,DWORD PTR 24[edi]
+ bswap eax
+ mov edx,DWORD PTR 28[edi]
+ bswap ebx
+ push eax
+ bswap ecx
+ push ebx
+ bswap edx
+ push ecx
+ push edx
+ mov eax,DWORD PTR 32[edi]
+ mov ebx,DWORD PTR 36[edi]
+ mov ecx,DWORD PTR 40[edi]
+ bswap eax
+ mov edx,DWORD PTR 44[edi]
+ bswap ebx
+ push eax
+ bswap ecx
+ push ebx
+ bswap edx
+ push ecx
+ push edx
+ mov eax,DWORD PTR 48[edi]
+ mov ebx,DWORD PTR 52[edi]
+ mov ecx,DWORD PTR 56[edi]
+ bswap eax
+ mov edx,DWORD PTR 60[edi]
+ bswap ebx
+ push eax
+ bswap ecx
+ push ebx
+ bswap edx
+ push ecx
+ push edx
+ add edi,64
+ lea esp,DWORD PTR [esp-36]
+ mov DWORD PTR 104[esp],edi
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov edi,DWORD PTR 12[esi]
+ mov DWORD PTR 8[esp],ebx
+ xor ebx,ecx
+ mov DWORD PTR 12[esp],ecx
+ mov DWORD PTR 16[esp],edi
+ mov DWORD PTR [esp],ebx
+ mov edx,DWORD PTR 16[esi]
+ mov ebx,DWORD PTR 20[esi]
+ mov ecx,DWORD PTR 24[esi]
+ mov edi,DWORD PTR 28[esi]
+ mov DWORD PTR 24[esp],ebx
+ mov DWORD PTR 28[esp],ecx
+ mov DWORD PTR 32[esp],edi
+ALIGN 16
+$L00800_15:
+ mov ecx,edx
+ mov esi,DWORD PTR 24[esp]
+ ror ecx,14
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,edx
+ xor esi,edi
+ mov ebx,DWORD PTR 96[esp]
+ ror ecx,5
+ and esi,edx
+ mov DWORD PTR 20[esp],edx
+ xor edx,ecx
+ add ebx,DWORD PTR 32[esp]
+ xor esi,edi
+ ror edx,6
+ mov ecx,eax
+ add ebx,esi
+ ror ecx,9
+ add ebx,edx
+ mov edi,DWORD PTR 8[esp]
+ xor ecx,eax
+ mov DWORD PTR 4[esp],eax
+ lea esp,DWORD PTR [esp-4]
+ ror ecx,11
+ mov esi,DWORD PTR [ebp]
+ xor ecx,eax
+ mov edx,DWORD PTR 20[esp]
+ xor eax,edi
+ ror ecx,2
+ add ebx,esi
+ mov DWORD PTR [esp],eax
+ add edx,ebx
+ and eax,DWORD PTR 4[esp]
+ add ebx,ecx
+ xor eax,edi
+ add ebp,4
+ add eax,ebx
+ cmp esi,3248222580
+ jne $L00800_15
+ mov ecx,DWORD PTR 156[esp]
+ jmp $L00916_63
+ALIGN 16
+$L00916_63:
+ mov ebx,ecx
+ mov esi,DWORD PTR 104[esp]
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 160[esp]
+ shr edi,10
+ add ebx,DWORD PTR 124[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 24[esp]
+ ror ecx,14
+ add ebx,edi
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,edx
+ xor esi,edi
+ mov DWORD PTR 96[esp],ebx
+ ror ecx,5
+ and esi,edx
+ mov DWORD PTR 20[esp],edx
+ xor edx,ecx
+ add ebx,DWORD PTR 32[esp]
+ xor esi,edi
+ ror edx,6
+ mov ecx,eax
+ add ebx,esi
+ ror ecx,9
+ add ebx,edx
+ mov edi,DWORD PTR 8[esp]
+ xor ecx,eax
+ mov DWORD PTR 4[esp],eax
+ lea esp,DWORD PTR [esp-4]
+ ror ecx,11
+ mov esi,DWORD PTR [ebp]
+ xor ecx,eax
+ mov edx,DWORD PTR 20[esp]
+ xor eax,edi
+ ror ecx,2
+ add ebx,esi
+ mov DWORD PTR [esp],eax
+ add edx,ebx
+ and eax,DWORD PTR 4[esp]
+ add ebx,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 156[esp]
+ add ebp,4
+ add eax,ebx
+ cmp esi,3329325298
+ jne $L00916_63
+ mov esi,DWORD PTR 356[esp]
+ mov ebx,DWORD PTR 8[esp]
+ mov ecx,DWORD PTR 16[esp]
+ add eax,DWORD PTR [esi]
+ add ebx,DWORD PTR 4[esi]
+ add edi,DWORD PTR 8[esi]
+ add ecx,DWORD PTR 12[esi]
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],edi
+ mov DWORD PTR 12[esi],ecx
+ mov eax,DWORD PTR 24[esp]
+ mov ebx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ mov edi,DWORD PTR 360[esp]
+ add edx,DWORD PTR 16[esi]
+ add eax,DWORD PTR 20[esi]
+ add ebx,DWORD PTR 24[esi]
+ add ecx,DWORD PTR 28[esi]
+ mov DWORD PTR 16[esi],edx
+ mov DWORD PTR 20[esi],eax
+ mov DWORD PTR 24[esi],ebx
+ mov DWORD PTR 28[esi],ecx
+ lea esp,DWORD PTR 356[esp]
+ sub ebp,256
+ cmp edi,DWORD PTR 8[esp]
+ jb $L002loop
+ mov esp,DWORD PTR 12[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+ALIGN 64
+$L001K256:
+DD 1116352408,1899447441,3049323471,3921009573
+DD 961987163,1508970993,2453635748,2870763221
+DD 3624381080,310598401,607225278,1426881987
+DD 1925078388,2162078206,2614888103,3248222580
+DD 3835390401,4022224774,264347078,604807628
+DD 770255983,1249150122,1555081692,1996064986
+DD 2554220882,2821834349,2952996808,3210313671
+DD 3336571891,3584528711,113926993,338241895
+DD 666307205,773529912,1294757372,1396182291
+DD 1695183700,1986661051,2177026350,2456956037
+DD 2730485921,2820302411,3259730800,3345764771
+DD 3516065817,3600352804,4094571909,275423344
+DD 430227734,506948616,659060556,883997877
+DD 958139571,1322822218,1537002063,1747873779
+DD 1955562222,2024104815,2227730452,2361852424
+DD 2428436474,2756734187,3204031479,3329325298
+DD 66051,67438087,134810123,202182159
+DB 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
+DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
+DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
+DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
+DB 62,0
+ALIGN 16
+$L007unrolled:
+ lea esp,DWORD PTR [esp-96]
+ mov eax,DWORD PTR [esi]
+ mov ebp,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov ebx,DWORD PTR 12[esi]
+ mov DWORD PTR 4[esp],ebp
+ xor ebp,ecx
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 12[esp],ebx
+ mov edx,DWORD PTR 16[esi]
+ mov ebx,DWORD PTR 20[esi]
+ mov ecx,DWORD PTR 24[esi]
+ mov esi,DWORD PTR 28[esi]
+ mov DWORD PTR 20[esp],ebx
+ mov DWORD PTR 24[esp],ecx
+ mov DWORD PTR 28[esp],esi
+ jmp $L010grand_loop
+ALIGN 16
+$L010grand_loop:
+ mov ebx,DWORD PTR [edi]
+ mov ecx,DWORD PTR 4[edi]
+ bswap ebx
+ mov esi,DWORD PTR 8[edi]
+ bswap ecx
+ mov DWORD PTR 32[esp],ebx
+ bswap esi
+ mov DWORD PTR 36[esp],ecx
+ mov DWORD PTR 40[esp],esi
+ mov ebx,DWORD PTR 12[edi]
+ mov ecx,DWORD PTR 16[edi]
+ bswap ebx
+ mov esi,DWORD PTR 20[edi]
+ bswap ecx
+ mov DWORD PTR 44[esp],ebx
+ bswap esi
+ mov DWORD PTR 48[esp],ecx
+ mov DWORD PTR 52[esp],esi
+ mov ebx,DWORD PTR 24[edi]
+ mov ecx,DWORD PTR 28[edi]
+ bswap ebx
+ mov esi,DWORD PTR 32[edi]
+ bswap ecx
+ mov DWORD PTR 56[esp],ebx
+ bswap esi
+ mov DWORD PTR 60[esp],ecx
+ mov DWORD PTR 64[esp],esi
+ mov ebx,DWORD PTR 36[edi]
+ mov ecx,DWORD PTR 40[edi]
+ bswap ebx
+ mov esi,DWORD PTR 44[edi]
+ bswap ecx
+ mov DWORD PTR 68[esp],ebx
+ bswap esi
+ mov DWORD PTR 72[esp],ecx
+ mov DWORD PTR 76[esp],esi
+ mov ebx,DWORD PTR 48[edi]
+ mov ecx,DWORD PTR 52[edi]
+ bswap ebx
+ mov esi,DWORD PTR 56[edi]
+ bswap ecx
+ mov DWORD PTR 80[esp],ebx
+ bswap esi
+ mov DWORD PTR 84[esp],ecx
+ mov DWORD PTR 88[esp],esi
+ mov ebx,DWORD PTR 60[edi]
+ add edi,64
+ bswap ebx
+ mov DWORD PTR 100[esp],edi
+ mov DWORD PTR 92[esp],ebx
+ mov ecx,edx
+ mov esi,DWORD PTR 20[esp]
+ ror edx,14
+ mov edi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov ebx,DWORD PTR 32[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 28[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,eax
+ mov DWORD PTR [esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 1116352408[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 12[esp]
+ add ebp,ecx
+ mov esi,edx
+ mov ecx,DWORD PTR 16[esp]
+ ror edx,14
+ mov edi,DWORD PTR 20[esp]
+ xor edx,esi
+ mov ebx,DWORD PTR 36[esp]
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 12[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 24[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR [esp]
+ xor esi,ebp
+ mov DWORD PTR 28[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 1899447441[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,esi
+ mov ecx,edx
+ mov esi,DWORD PTR 12[esp]
+ ror edx,14
+ mov edi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov ebx,DWORD PTR 40[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 20[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,eax
+ mov DWORD PTR 24[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 3049323471[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 4[esp]
+ add ebp,ecx
+ mov esi,edx
+ mov ecx,DWORD PTR 8[esp]
+ ror edx,14
+ mov edi,DWORD PTR 12[esp]
+ xor edx,esi
+ mov ebx,DWORD PTR 44[esp]
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 4[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 16[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 24[esp]
+ xor esi,ebp
+ mov DWORD PTR 20[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 3921009573[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,esi
+ mov ecx,edx
+ mov esi,DWORD PTR 4[esp]
+ ror edx,14
+ mov edi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov ebx,DWORD PTR 48[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 12[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,eax
+ mov DWORD PTR 16[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 961987163[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 28[esp]
+ add ebp,ecx
+ mov esi,edx
+ mov ecx,DWORD PTR [esp]
+ ror edx,14
+ mov edi,DWORD PTR 4[esp]
+ xor edx,esi
+ mov ebx,DWORD PTR 52[esp]
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 28[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 8[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 16[esp]
+ xor esi,ebp
+ mov DWORD PTR 12[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 1508970993[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,esi
+ mov ecx,edx
+ mov esi,DWORD PTR 28[esp]
+ ror edx,14
+ mov edi,DWORD PTR [esp]
+ xor edx,ecx
+ mov ebx,DWORD PTR 56[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 4[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,eax
+ mov DWORD PTR 8[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 2453635748[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 20[esp]
+ add ebp,ecx
+ mov esi,edx
+ mov ecx,DWORD PTR 24[esp]
+ ror edx,14
+ mov edi,DWORD PTR 28[esp]
+ xor edx,esi
+ mov ebx,DWORD PTR 60[esp]
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 20[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR [esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 8[esp]
+ xor esi,ebp
+ mov DWORD PTR 4[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 2870763221[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,esi
+ mov ecx,edx
+ mov esi,DWORD PTR 20[esp]
+ ror edx,14
+ mov edi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov ebx,DWORD PTR 64[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 28[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,eax
+ mov DWORD PTR [esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 3624381080[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 12[esp]
+ add ebp,ecx
+ mov esi,edx
+ mov ecx,DWORD PTR 16[esp]
+ ror edx,14
+ mov edi,DWORD PTR 20[esp]
+ xor edx,esi
+ mov ebx,DWORD PTR 68[esp]
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 12[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 24[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR [esp]
+ xor esi,ebp
+ mov DWORD PTR 28[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 310598401[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,esi
+ mov ecx,edx
+ mov esi,DWORD PTR 12[esp]
+ ror edx,14
+ mov edi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov ebx,DWORD PTR 72[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 20[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,eax
+ mov DWORD PTR 24[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 607225278[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 4[esp]
+ add ebp,ecx
+ mov esi,edx
+ mov ecx,DWORD PTR 8[esp]
+ ror edx,14
+ mov edi,DWORD PTR 12[esp]
+ xor edx,esi
+ mov ebx,DWORD PTR 76[esp]
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 4[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 16[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 24[esp]
+ xor esi,ebp
+ mov DWORD PTR 20[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 1426881987[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,esi
+ mov ecx,edx
+ mov esi,DWORD PTR 4[esp]
+ ror edx,14
+ mov edi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov ebx,DWORD PTR 80[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 12[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,eax
+ mov DWORD PTR 16[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 1925078388[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 28[esp]
+ add ebp,ecx
+ mov esi,edx
+ mov ecx,DWORD PTR [esp]
+ ror edx,14
+ mov edi,DWORD PTR 4[esp]
+ xor edx,esi
+ mov ebx,DWORD PTR 84[esp]
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 28[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 8[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 16[esp]
+ xor esi,ebp
+ mov DWORD PTR 12[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 2162078206[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,esi
+ mov ecx,edx
+ mov esi,DWORD PTR 28[esp]
+ ror edx,14
+ mov edi,DWORD PTR [esp]
+ xor edx,ecx
+ mov ebx,DWORD PTR 88[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 4[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,eax
+ mov DWORD PTR 8[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 2614888103[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 20[esp]
+ add ebp,ecx
+ mov esi,edx
+ mov ecx,DWORD PTR 24[esp]
+ ror edx,14
+ mov edi,DWORD PTR 28[esp]
+ xor edx,esi
+ mov ebx,DWORD PTR 92[esp]
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 20[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR [esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 8[esp]
+ xor esi,ebp
+ mov DWORD PTR 4[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 3248222580[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 36[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,esi
+ mov esi,DWORD PTR 88[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 32[esp]
+ shr edi,10
+ add ebx,DWORD PTR 68[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 20[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov DWORD PTR 32[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 28[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,eax
+ mov DWORD PTR [esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 3835390401[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 40[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 12[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 92[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 36[esp]
+ shr edi,10
+ add ebx,DWORD PTR 72[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 16[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 20[esp]
+ xor edx,esi
+ mov DWORD PTR 36[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 12[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 24[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR [esp]
+ xor esi,ebp
+ mov DWORD PTR 28[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 4022224774[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 44[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,esi
+ mov esi,DWORD PTR 32[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 40[esp]
+ shr edi,10
+ add ebx,DWORD PTR 76[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 12[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov DWORD PTR 40[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 20[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,eax
+ mov DWORD PTR 24[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 264347078[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 48[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 4[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 36[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 44[esp]
+ shr edi,10
+ add ebx,DWORD PTR 80[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 8[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 12[esp]
+ xor edx,esi
+ mov DWORD PTR 44[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 4[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 16[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 24[esp]
+ xor esi,ebp
+ mov DWORD PTR 20[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 604807628[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 52[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,esi
+ mov esi,DWORD PTR 40[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 48[esp]
+ shr edi,10
+ add ebx,DWORD PTR 84[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 4[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov DWORD PTR 48[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 12[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,eax
+ mov DWORD PTR 16[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 770255983[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 56[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 28[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 44[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 52[esp]
+ shr edi,10
+ add ebx,DWORD PTR 88[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR [esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 4[esp]
+ xor edx,esi
+ mov DWORD PTR 52[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 28[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 8[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 16[esp]
+ xor esi,ebp
+ mov DWORD PTR 12[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 1249150122[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 60[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,esi
+ mov esi,DWORD PTR 48[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 56[esp]
+ shr edi,10
+ add ebx,DWORD PTR 92[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 28[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR [esp]
+ xor edx,ecx
+ mov DWORD PTR 56[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 4[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,eax
+ mov DWORD PTR 8[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 1555081692[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 64[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 20[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 52[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 60[esp]
+ shr edi,10
+ add ebx,DWORD PTR 32[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 24[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 28[esp]
+ xor edx,esi
+ mov DWORD PTR 60[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 20[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR [esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 8[esp]
+ xor esi,ebp
+ mov DWORD PTR 4[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 1996064986[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 68[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,esi
+ mov esi,DWORD PTR 56[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 64[esp]
+ shr edi,10
+ add ebx,DWORD PTR 36[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 20[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov DWORD PTR 64[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 28[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,eax
+ mov DWORD PTR [esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 2554220882[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 72[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 12[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 60[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 68[esp]
+ shr edi,10
+ add ebx,DWORD PTR 40[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 16[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 20[esp]
+ xor edx,esi
+ mov DWORD PTR 68[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 12[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 24[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR [esp]
+ xor esi,ebp
+ mov DWORD PTR 28[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 2821834349[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 76[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,esi
+ mov esi,DWORD PTR 64[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 72[esp]
+ shr edi,10
+ add ebx,DWORD PTR 44[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 12[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov DWORD PTR 72[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 20[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,eax
+ mov DWORD PTR 24[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 2952996808[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 80[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 4[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 68[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 76[esp]
+ shr edi,10
+ add ebx,DWORD PTR 48[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 8[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 12[esp]
+ xor edx,esi
+ mov DWORD PTR 76[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 4[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 16[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 24[esp]
+ xor esi,ebp
+ mov DWORD PTR 20[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 3210313671[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 84[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,esi
+ mov esi,DWORD PTR 72[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 80[esp]
+ shr edi,10
+ add ebx,DWORD PTR 52[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 4[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov DWORD PTR 80[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 12[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,eax
+ mov DWORD PTR 16[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 3336571891[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 88[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 28[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 76[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 84[esp]
+ shr edi,10
+ add ebx,DWORD PTR 56[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR [esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 4[esp]
+ xor edx,esi
+ mov DWORD PTR 84[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 28[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 8[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 16[esp]
+ xor esi,ebp
+ mov DWORD PTR 12[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 3584528711[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 92[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,esi
+ mov esi,DWORD PTR 80[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 88[esp]
+ shr edi,10
+ add ebx,DWORD PTR 60[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 28[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR [esp]
+ xor edx,ecx
+ mov DWORD PTR 88[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 4[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,eax
+ mov DWORD PTR 8[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 113926993[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 32[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 20[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 84[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 92[esp]
+ shr edi,10
+ add ebx,DWORD PTR 64[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 24[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 28[esp]
+ xor edx,esi
+ mov DWORD PTR 92[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 20[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR [esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 8[esp]
+ xor esi,ebp
+ mov DWORD PTR 4[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 338241895[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 36[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,esi
+ mov esi,DWORD PTR 88[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 32[esp]
+ shr edi,10
+ add ebx,DWORD PTR 68[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 20[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov DWORD PTR 32[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 28[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,eax
+ mov DWORD PTR [esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 666307205[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 40[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 12[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 92[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 36[esp]
+ shr edi,10
+ add ebx,DWORD PTR 72[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 16[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 20[esp]
+ xor edx,esi
+ mov DWORD PTR 36[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 12[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 24[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR [esp]
+ xor esi,ebp
+ mov DWORD PTR 28[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 773529912[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 44[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,esi
+ mov esi,DWORD PTR 32[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 40[esp]
+ shr edi,10
+ add ebx,DWORD PTR 76[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 12[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov DWORD PTR 40[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 20[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,eax
+ mov DWORD PTR 24[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 1294757372[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 48[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 4[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 36[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 44[esp]
+ shr edi,10
+ add ebx,DWORD PTR 80[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 8[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 12[esp]
+ xor edx,esi
+ mov DWORD PTR 44[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 4[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 16[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 24[esp]
+ xor esi,ebp
+ mov DWORD PTR 20[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 1396182291[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 52[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,esi
+ mov esi,DWORD PTR 40[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 48[esp]
+ shr edi,10
+ add ebx,DWORD PTR 84[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 4[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov DWORD PTR 48[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 12[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,eax
+ mov DWORD PTR 16[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 1695183700[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 56[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 28[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 44[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 52[esp]
+ shr edi,10
+ add ebx,DWORD PTR 88[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR [esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 4[esp]
+ xor edx,esi
+ mov DWORD PTR 52[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 28[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 8[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 16[esp]
+ xor esi,ebp
+ mov DWORD PTR 12[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 1986661051[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 60[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,esi
+ mov esi,DWORD PTR 48[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 56[esp]
+ shr edi,10
+ add ebx,DWORD PTR 92[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 28[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR [esp]
+ xor edx,ecx
+ mov DWORD PTR 56[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 4[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,eax
+ mov DWORD PTR 8[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 2177026350[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 64[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 20[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 52[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 60[esp]
+ shr edi,10
+ add ebx,DWORD PTR 32[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 24[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 28[esp]
+ xor edx,esi
+ mov DWORD PTR 60[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 20[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR [esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 8[esp]
+ xor esi,ebp
+ mov DWORD PTR 4[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 2456956037[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 68[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,esi
+ mov esi,DWORD PTR 56[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 64[esp]
+ shr edi,10
+ add ebx,DWORD PTR 36[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 20[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov DWORD PTR 64[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 28[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,eax
+ mov DWORD PTR [esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 2730485921[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 72[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 12[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 60[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 68[esp]
+ shr edi,10
+ add ebx,DWORD PTR 40[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 16[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 20[esp]
+ xor edx,esi
+ mov DWORD PTR 68[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 12[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 24[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR [esp]
+ xor esi,ebp
+ mov DWORD PTR 28[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 2820302411[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 76[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,esi
+ mov esi,DWORD PTR 64[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 72[esp]
+ shr edi,10
+ add ebx,DWORD PTR 44[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 12[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov DWORD PTR 72[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 20[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,eax
+ mov DWORD PTR 24[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 3259730800[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 80[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 4[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 68[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 76[esp]
+ shr edi,10
+ add ebx,DWORD PTR 48[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 8[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 12[esp]
+ xor edx,esi
+ mov DWORD PTR 76[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 4[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 16[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 24[esp]
+ xor esi,ebp
+ mov DWORD PTR 20[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 3345764771[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 84[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,esi
+ mov esi,DWORD PTR 72[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 80[esp]
+ shr edi,10
+ add ebx,DWORD PTR 52[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 4[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov DWORD PTR 80[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 12[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,eax
+ mov DWORD PTR 16[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 3516065817[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 88[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 28[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 76[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 84[esp]
+ shr edi,10
+ add ebx,DWORD PTR 56[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR [esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 4[esp]
+ xor edx,esi
+ mov DWORD PTR 84[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 28[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 8[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 16[esp]
+ xor esi,ebp
+ mov DWORD PTR 12[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 3600352804[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 92[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,esi
+ mov esi,DWORD PTR 80[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 88[esp]
+ shr edi,10
+ add ebx,DWORD PTR 60[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 28[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR [esp]
+ xor edx,ecx
+ mov DWORD PTR 88[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 4[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,eax
+ mov DWORD PTR 8[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 4094571909[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 32[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 20[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 84[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 92[esp]
+ shr edi,10
+ add ebx,DWORD PTR 64[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 24[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 28[esp]
+ xor edx,esi
+ mov DWORD PTR 92[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 20[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR [esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 8[esp]
+ xor esi,ebp
+ mov DWORD PTR 4[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 275423344[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 36[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,esi
+ mov esi,DWORD PTR 88[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 32[esp]
+ shr edi,10
+ add ebx,DWORD PTR 68[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 20[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov DWORD PTR 32[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 28[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,eax
+ mov DWORD PTR [esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 430227734[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 40[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 12[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 92[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 36[esp]
+ shr edi,10
+ add ebx,DWORD PTR 72[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 16[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 20[esp]
+ xor edx,esi
+ mov DWORD PTR 36[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 12[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 24[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR [esp]
+ xor esi,ebp
+ mov DWORD PTR 28[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 506948616[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 44[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,esi
+ mov esi,DWORD PTR 32[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 40[esp]
+ shr edi,10
+ add ebx,DWORD PTR 76[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 12[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov DWORD PTR 40[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 20[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,eax
+ mov DWORD PTR 24[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 659060556[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 48[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 4[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 36[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 44[esp]
+ shr edi,10
+ add ebx,DWORD PTR 80[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 8[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 12[esp]
+ xor edx,esi
+ mov DWORD PTR 44[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 4[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 16[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 24[esp]
+ xor esi,ebp
+ mov DWORD PTR 20[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 883997877[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 52[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,esi
+ mov esi,DWORD PTR 40[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 48[esp]
+ shr edi,10
+ add ebx,DWORD PTR 84[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 4[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov DWORD PTR 48[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 12[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,eax
+ mov DWORD PTR 16[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 958139571[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 56[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 28[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 44[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 52[esp]
+ shr edi,10
+ add ebx,DWORD PTR 88[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR [esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 4[esp]
+ xor edx,esi
+ mov DWORD PTR 52[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 28[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 8[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 16[esp]
+ xor esi,ebp
+ mov DWORD PTR 12[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 1322822218[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 60[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,esi
+ mov esi,DWORD PTR 48[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 56[esp]
+ shr edi,10
+ add ebx,DWORD PTR 92[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 28[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR [esp]
+ xor edx,ecx
+ mov DWORD PTR 56[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 4[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,eax
+ mov DWORD PTR 8[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 1537002063[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 64[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 20[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 52[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 60[esp]
+ shr edi,10
+ add ebx,DWORD PTR 32[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 24[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 28[esp]
+ xor edx,esi
+ mov DWORD PTR 60[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 20[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR [esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 8[esp]
+ xor esi,ebp
+ mov DWORD PTR 4[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 1747873779[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 68[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,esi
+ mov esi,DWORD PTR 56[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 64[esp]
+ shr edi,10
+ add ebx,DWORD PTR 36[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 20[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov DWORD PTR 64[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 28[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,eax
+ mov DWORD PTR [esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 1955562222[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 72[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 12[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 60[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 68[esp]
+ shr edi,10
+ add ebx,DWORD PTR 40[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 16[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 20[esp]
+ xor edx,esi
+ mov DWORD PTR 68[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 12[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 24[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR [esp]
+ xor esi,ebp
+ mov DWORD PTR 28[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 2024104815[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 76[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,esi
+ mov esi,DWORD PTR 64[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 72[esp]
+ shr edi,10
+ add ebx,DWORD PTR 44[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 12[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov DWORD PTR 72[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 20[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,eax
+ mov DWORD PTR 24[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 2227730452[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 80[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 4[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 68[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 76[esp]
+ shr edi,10
+ add ebx,DWORD PTR 48[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 8[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 12[esp]
+ xor edx,esi
+ mov DWORD PTR 76[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 4[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 16[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 24[esp]
+ xor esi,ebp
+ mov DWORD PTR 20[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 2361852424[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 84[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,esi
+ mov esi,DWORD PTR 72[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 80[esp]
+ shr edi,10
+ add ebx,DWORD PTR 52[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 4[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov DWORD PTR 80[esp],ebx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 12[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,eax
+ mov DWORD PTR 16[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 2428436474[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 88[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 28[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 76[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 84[esp]
+ shr edi,10
+ add ebx,DWORD PTR 56[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR [esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 4[esp]
+ xor edx,esi
+ mov DWORD PTR 84[esp],ebx
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 28[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR 8[esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 16[esp]
+ xor esi,ebp
+ mov DWORD PTR 12[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 2756734187[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ mov ecx,DWORD PTR 92[esp]
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,esi
+ mov esi,DWORD PTR 80[esp]
+ mov ebx,ecx
+ ror ecx,11
+ mov edi,esi
+ ror esi,2
+ xor ecx,ebx
+ shr ebx,3
+ ror ecx,7
+ xor esi,edi
+ xor ebx,ecx
+ ror esi,17
+ add ebx,DWORD PTR 88[esp]
+ shr edi,10
+ add ebx,DWORD PTR 60[esp]
+ mov ecx,edx
+ xor edi,esi
+ mov esi,DWORD PTR 28[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR [esp]
+ xor edx,ecx
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ add ebx,DWORD PTR 4[esp]
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add ebx,edi
+ ror ecx,9
+ mov esi,eax
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,eax
+ mov DWORD PTR 8[esp],eax
+ xor eax,edi
+ ror ecx,11
+ and ebp,eax
+ lea edx,DWORD PTR 3204031479[edx*1+ebx]
+ xor ecx,esi
+ xor ebp,edi
+ mov esi,DWORD PTR 32[esp]
+ ror ecx,2
+ add ebp,edx
+ add edx,DWORD PTR 20[esp]
+ add ebp,ecx
+ mov ecx,DWORD PTR 84[esp]
+ mov ebx,esi
+ ror esi,11
+ mov edi,ecx
+ ror ecx,2
+ xor esi,ebx
+ shr ebx,3
+ ror esi,7
+ xor ecx,edi
+ xor ebx,esi
+ ror ecx,17
+ add ebx,DWORD PTR 92[esp]
+ shr edi,10
+ add ebx,DWORD PTR 64[esp]
+ mov esi,edx
+ xor edi,ecx
+ mov ecx,DWORD PTR 24[esp]
+ ror edx,14
+ add ebx,edi
+ mov edi,DWORD PTR 28[esp]
+ xor edx,esi
+ xor ecx,edi
+ ror edx,5
+ and ecx,esi
+ mov DWORD PTR 20[esp],esi
+ xor edx,esi
+ add ebx,DWORD PTR [esp]
+ xor edi,ecx
+ ror edx,6
+ mov esi,ebp
+ add ebx,edi
+ ror esi,9
+ mov ecx,ebp
+ mov edi,DWORD PTR 8[esp]
+ xor esi,ebp
+ mov DWORD PTR 4[esp],ebp
+ xor ebp,edi
+ ror esi,11
+ and eax,ebp
+ lea edx,DWORD PTR 3329325298[edx*1+ebx]
+ xor esi,ecx
+ xor eax,edi
+ ror esi,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,esi
+ mov esi,DWORD PTR 96[esp]
+ xor ebp,edi
+ mov ecx,DWORD PTR 12[esp]
+ add eax,DWORD PTR [esi]
+ add ebp,DWORD PTR 4[esi]
+ add edi,DWORD PTR 8[esi]
+ add ecx,DWORD PTR 12[esi]
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebp
+ mov DWORD PTR 8[esi],edi
+ mov DWORD PTR 12[esi],ecx
+ mov DWORD PTR 4[esp],ebp
+ xor ebp,edi
+ mov DWORD PTR 8[esp],edi
+ mov DWORD PTR 12[esp],ecx
+ mov edi,DWORD PTR 20[esp]
+ mov ebx,DWORD PTR 24[esp]
+ mov ecx,DWORD PTR 28[esp]
+ add edx,DWORD PTR 16[esi]
+ add edi,DWORD PTR 20[esi]
+ add ebx,DWORD PTR 24[esi]
+ add ecx,DWORD PTR 28[esi]
+ mov DWORD PTR 16[esi],edx
+ mov DWORD PTR 20[esi],edi
+ mov DWORD PTR 24[esi],ebx
+ mov DWORD PTR 28[esi],ecx
+ mov DWORD PTR 20[esp],edi
+ mov edi,DWORD PTR 100[esp]
+ mov DWORD PTR 24[esp],ebx
+ mov DWORD PTR 28[esp],ecx
+ cmp edi,DWORD PTR 104[esp]
+ jb $L010grand_loop
+ mov esp,DWORD PTR 108[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+ALIGN 32
+$L004shaext:
+ sub esp,32
+ movdqu xmm1,XMMWORD PTR [esi]
+ lea ebp,DWORD PTR 128[ebp]
+ movdqu xmm2,XMMWORD PTR 16[esi]
+ movdqa xmm7,XMMWORD PTR 128[ebp]
+ pshufd xmm0,xmm1,27
+ pshufd xmm1,xmm1,177
+ pshufd xmm2,xmm2,27
+DB 102,15,58,15,202,8
+ punpcklqdq xmm2,xmm0
+ jmp $L011loop_shaext
+ALIGN 16
+$L011loop_shaext:
+ movdqu xmm3,XMMWORD PTR [edi]
+ movdqu xmm4,XMMWORD PTR 16[edi]
+ movdqu xmm5,XMMWORD PTR 32[edi]
+DB 102,15,56,0,223
+ movdqu xmm6,XMMWORD PTR 48[edi]
+ movdqa XMMWORD PTR 16[esp],xmm2
+ movdqa xmm0,XMMWORD PTR [ebp-128]
+ paddd xmm0,xmm3
+DB 102,15,56,0,231
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ nop
+ movdqa XMMWORD PTR [esp],xmm1
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR [ebp-112]
+ paddd xmm0,xmm4
+DB 102,15,56,0,239
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ lea edi,DWORD PTR 64[edi]
+DB 15,56,204,220
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR [ebp-96]
+ paddd xmm0,xmm5
+DB 102,15,56,0,247
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm6
+DB 102,15,58,15,253,4
+ nop
+ paddd xmm3,xmm7
+DB 15,56,204,229
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR [ebp-80]
+ paddd xmm0,xmm6
+DB 15,56,205,222
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm3
+DB 102,15,58,15,254,4
+ nop
+ paddd xmm4,xmm7
+DB 15,56,204,238
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR [ebp-64]
+ paddd xmm0,xmm3
+DB 15,56,205,227
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm4
+DB 102,15,58,15,251,4
+ nop
+ paddd xmm5,xmm7
+DB 15,56,204,243
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR [ebp-48]
+ paddd xmm0,xmm4
+DB 15,56,205,236
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm5
+DB 102,15,58,15,252,4
+ nop
+ paddd xmm6,xmm7
+DB 15,56,204,220
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR [ebp-32]
+ paddd xmm0,xmm5
+DB 15,56,205,245
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm6
+DB 102,15,58,15,253,4
+ nop
+ paddd xmm3,xmm7
+DB 15,56,204,229
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR [ebp-16]
+ paddd xmm0,xmm6
+DB 15,56,205,222
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm3
+DB 102,15,58,15,254,4
+ nop
+ paddd xmm4,xmm7
+DB 15,56,204,238
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR [ebp]
+ paddd xmm0,xmm3
+DB 15,56,205,227
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm4
+DB 102,15,58,15,251,4
+ nop
+ paddd xmm5,xmm7
+DB 15,56,204,243
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR 16[ebp]
+ paddd xmm0,xmm4
+DB 15,56,205,236
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm5
+DB 102,15,58,15,252,4
+ nop
+ paddd xmm6,xmm7
+DB 15,56,204,220
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR 32[ebp]
+ paddd xmm0,xmm5
+DB 15,56,205,245
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm6
+DB 102,15,58,15,253,4
+ nop
+ paddd xmm3,xmm7
+DB 15,56,204,229
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR 48[ebp]
+ paddd xmm0,xmm6
+DB 15,56,205,222
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm3
+DB 102,15,58,15,254,4
+ nop
+ paddd xmm4,xmm7
+DB 15,56,204,238
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR 64[ebp]
+ paddd xmm0,xmm3
+DB 15,56,205,227
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm4
+DB 102,15,58,15,251,4
+ nop
+ paddd xmm5,xmm7
+DB 15,56,204,243
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR 80[ebp]
+ paddd xmm0,xmm4
+DB 15,56,205,236
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ movdqa xmm7,xmm5
+DB 102,15,58,15,252,4
+DB 15,56,203,202
+ paddd xmm6,xmm7
+ movdqa xmm0,XMMWORD PTR 96[ebp]
+ paddd xmm0,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+DB 15,56,205,245
+ movdqa xmm7,XMMWORD PTR 128[ebp]
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR 112[ebp]
+ paddd xmm0,xmm6
+ nop
+DB 15,56,203,209
+ pshufd xmm0,xmm0,14
+ cmp eax,edi
+ nop
+DB 15,56,203,202
+ paddd xmm2,XMMWORD PTR 16[esp]
+ paddd xmm1,XMMWORD PTR [esp]
+ jnz $L011loop_shaext
+ pshufd xmm2,xmm2,177
+ pshufd xmm7,xmm1,27
+ pshufd xmm1,xmm1,177
+ punpckhqdq xmm1,xmm2
+DB 102,15,58,15,215,8
+ mov esp,DWORD PTR 44[esp]
+ movdqu XMMWORD PTR [esi],xmm1
+ movdqu XMMWORD PTR 16[esi],xmm2
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+ALIGN 32
+$L006SSSE3:
+ lea esp,DWORD PTR [esp-96]
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov edi,DWORD PTR 12[esi]
+ mov DWORD PTR 4[esp],ebx
+ xor ebx,ecx
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 12[esp],edi
+ mov edx,DWORD PTR 16[esi]
+ mov edi,DWORD PTR 20[esi]
+ mov ecx,DWORD PTR 24[esi]
+ mov esi,DWORD PTR 28[esi]
+ mov DWORD PTR 20[esp],edi
+ mov edi,DWORD PTR 100[esp]
+ mov DWORD PTR 24[esp],ecx
+ mov DWORD PTR 28[esp],esi
+ movdqa xmm7,XMMWORD PTR 256[ebp]
+ jmp $L012grand_ssse3
+ALIGN 16
+$L012grand_ssse3:
+ movdqu xmm0,XMMWORD PTR [edi]
+ movdqu xmm1,XMMWORD PTR 16[edi]
+ movdqu xmm2,XMMWORD PTR 32[edi]
+ movdqu xmm3,XMMWORD PTR 48[edi]
+ add edi,64
+DB 102,15,56,0,199
+ mov DWORD PTR 100[esp],edi
+DB 102,15,56,0,207
+ movdqa xmm4,XMMWORD PTR [ebp]
+DB 102,15,56,0,215
+ movdqa xmm5,XMMWORD PTR 16[ebp]
+ paddd xmm4,xmm0
+DB 102,15,56,0,223
+ movdqa xmm6,XMMWORD PTR 32[ebp]
+ paddd xmm5,xmm1
+ movdqa xmm7,XMMWORD PTR 48[ebp]
+ movdqa XMMWORD PTR 32[esp],xmm4
+ paddd xmm6,xmm2
+ movdqa XMMWORD PTR 48[esp],xmm5
+ paddd xmm7,xmm3
+ movdqa XMMWORD PTR 64[esp],xmm6
+ movdqa XMMWORD PTR 80[esp],xmm7
+ jmp $L013ssse3_00_47
+ALIGN 16
+$L013ssse3_00_47:
+ add ebp,64
+ mov ecx,edx
+ movdqa xmm4,xmm1
+ ror edx,14
+ mov esi,DWORD PTR 20[esp]
+ movdqa xmm7,xmm3
+ xor edx,ecx
+ mov edi,DWORD PTR 24[esp]
+DB 102,15,58,15,224,4
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+DB 102,15,58,15,250,4
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ movdqa xmm5,xmm4
+ ror edx,6
+ mov ecx,eax
+ movdqa xmm6,xmm4
+ add edx,edi
+ mov edi,DWORD PTR 4[esp]
+ psrld xmm4,3
+ mov esi,eax
+ ror ecx,9
+ paddd xmm0,xmm7
+ mov DWORD PTR [esp],eax
+ xor ecx,eax
+ psrld xmm6,7
+ xor eax,edi
+ add edx,DWORD PTR 28[esp]
+ ror ecx,11
+ and ebx,eax
+ pshufd xmm7,xmm3,250
+ xor ecx,esi
+ add edx,DWORD PTR 32[esp]
+ pslld xmm5,14
+ xor ebx,edi
+ ror ecx,2
+ pxor xmm4,xmm6
+ add ebx,edx
+ add edx,DWORD PTR 12[esp]
+ psrld xmm6,11
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ pxor xmm4,xmm5
+ mov esi,DWORD PTR 16[esp]
+ xor edx,ecx
+ pslld xmm5,11
+ mov edi,DWORD PTR 20[esp]
+ xor esi,edi
+ ror edx,5
+ pxor xmm4,xmm6
+ and esi,ecx
+ mov DWORD PTR 12[esp],ecx
+ movdqa xmm6,xmm7
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ pxor xmm4,xmm5
+ mov ecx,ebx
+ add edx,edi
+ psrld xmm7,10
+ mov edi,DWORD PTR [esp]
+ mov esi,ebx
+ ror ecx,9
+ paddd xmm0,xmm4
+ mov DWORD PTR 28[esp],ebx
+ xor ecx,ebx
+ psrlq xmm6,17
+ xor ebx,edi
+ add edx,DWORD PTR 24[esp]
+ ror ecx,11
+ pxor xmm7,xmm6
+ and eax,ebx
+ xor ecx,esi
+ psrlq xmm6,2
+ add edx,DWORD PTR 36[esp]
+ xor eax,edi
+ ror ecx,2
+ pxor xmm7,xmm6
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ pshufd xmm7,xmm7,128
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 12[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 16[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ psrldq xmm7,8
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ paddd xmm0,xmm7
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 28[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR 24[esp],eax
+ pshufd xmm7,xmm0,80
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 20[esp]
+ movdqa xmm6,xmm7
+ ror ecx,11
+ psrld xmm7,10
+ and ebx,eax
+ psrlq xmm6,17
+ xor ecx,esi
+ add edx,DWORD PTR 40[esp]
+ xor ebx,edi
+ ror ecx,2
+ pxor xmm7,xmm6
+ add ebx,edx
+ add edx,DWORD PTR 4[esp]
+ psrlq xmm6,2
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ pxor xmm7,xmm6
+ mov esi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 12[esp]
+ pshufd xmm7,xmm7,8
+ xor esi,edi
+ ror edx,5
+ movdqa xmm6,XMMWORD PTR [ebp]
+ and esi,ecx
+ mov DWORD PTR 4[esp],ecx
+ pslldq xmm7,8
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 24[esp]
+ mov esi,ebx
+ ror ecx,9
+ paddd xmm0,xmm7
+ mov DWORD PTR 20[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 16[esp]
+ paddd xmm6,xmm0
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 44[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,ecx
+ movdqa XMMWORD PTR 32[esp],xmm6
+ mov ecx,edx
+ movdqa xmm4,xmm2
+ ror edx,14
+ mov esi,DWORD PTR 4[esp]
+ movdqa xmm7,xmm0
+ xor edx,ecx
+ mov edi,DWORD PTR 8[esp]
+DB 102,15,58,15,225,4
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+DB 102,15,58,15,251,4
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ movdqa xmm5,xmm4
+ ror edx,6
+ mov ecx,eax
+ movdqa xmm6,xmm4
+ add edx,edi
+ mov edi,DWORD PTR 20[esp]
+ psrld xmm4,3
+ mov esi,eax
+ ror ecx,9
+ paddd xmm1,xmm7
+ mov DWORD PTR 16[esp],eax
+ xor ecx,eax
+ psrld xmm6,7
+ xor eax,edi
+ add edx,DWORD PTR 12[esp]
+ ror ecx,11
+ and ebx,eax
+ pshufd xmm7,xmm0,250
+ xor ecx,esi
+ add edx,DWORD PTR 48[esp]
+ pslld xmm5,14
+ xor ebx,edi
+ ror ecx,2
+ pxor xmm4,xmm6
+ add ebx,edx
+ add edx,DWORD PTR 28[esp]
+ psrld xmm6,11
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ pxor xmm4,xmm5
+ mov esi,DWORD PTR [esp]
+ xor edx,ecx
+ pslld xmm5,11
+ mov edi,DWORD PTR 4[esp]
+ xor esi,edi
+ ror edx,5
+ pxor xmm4,xmm6
+ and esi,ecx
+ mov DWORD PTR 28[esp],ecx
+ movdqa xmm6,xmm7
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ pxor xmm4,xmm5
+ mov ecx,ebx
+ add edx,edi
+ psrld xmm7,10
+ mov edi,DWORD PTR 16[esp]
+ mov esi,ebx
+ ror ecx,9
+ paddd xmm1,xmm4
+ mov DWORD PTR 12[esp],ebx
+ xor ecx,ebx
+ psrlq xmm6,17
+ xor ebx,edi
+ add edx,DWORD PTR 8[esp]
+ ror ecx,11
+ pxor xmm7,xmm6
+ and eax,ebx
+ xor ecx,esi
+ psrlq xmm6,2
+ add edx,DWORD PTR 52[esp]
+ xor eax,edi
+ ror ecx,2
+ pxor xmm7,xmm6
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ pshufd xmm7,xmm7,128
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 28[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR [esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ psrldq xmm7,8
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ paddd xmm1,xmm7
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR 8[esp],eax
+ pshufd xmm7,xmm1,80
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 4[esp]
+ movdqa xmm6,xmm7
+ ror ecx,11
+ psrld xmm7,10
+ and ebx,eax
+ psrlq xmm6,17
+ xor ecx,esi
+ add edx,DWORD PTR 56[esp]
+ xor ebx,edi
+ ror ecx,2
+ pxor xmm7,xmm6
+ add ebx,edx
+ add edx,DWORD PTR 20[esp]
+ psrlq xmm6,2
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ pxor xmm7,xmm6
+ mov esi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 28[esp]
+ pshufd xmm7,xmm7,8
+ xor esi,edi
+ ror edx,5
+ movdqa xmm6,XMMWORD PTR 16[ebp]
+ and esi,ecx
+ mov DWORD PTR 20[esp],ecx
+ pslldq xmm7,8
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 8[esp]
+ mov esi,ebx
+ ror ecx,9
+ paddd xmm1,xmm7
+ mov DWORD PTR 4[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR [esp]
+ paddd xmm6,xmm1
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 60[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,ecx
+ movdqa XMMWORD PTR 48[esp],xmm6
+ mov ecx,edx
+ movdqa xmm4,xmm3
+ ror edx,14
+ mov esi,DWORD PTR 20[esp]
+ movdqa xmm7,xmm1
+ xor edx,ecx
+ mov edi,DWORD PTR 24[esp]
+DB 102,15,58,15,226,4
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+DB 102,15,58,15,248,4
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ movdqa xmm5,xmm4
+ ror edx,6
+ mov ecx,eax
+ movdqa xmm6,xmm4
+ add edx,edi
+ mov edi,DWORD PTR 4[esp]
+ psrld xmm4,3
+ mov esi,eax
+ ror ecx,9
+ paddd xmm2,xmm7
+ mov DWORD PTR [esp],eax
+ xor ecx,eax
+ psrld xmm6,7
+ xor eax,edi
+ add edx,DWORD PTR 28[esp]
+ ror ecx,11
+ and ebx,eax
+ pshufd xmm7,xmm1,250
+ xor ecx,esi
+ add edx,DWORD PTR 64[esp]
+ pslld xmm5,14
+ xor ebx,edi
+ ror ecx,2
+ pxor xmm4,xmm6
+ add ebx,edx
+ add edx,DWORD PTR 12[esp]
+ psrld xmm6,11
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ pxor xmm4,xmm5
+ mov esi,DWORD PTR 16[esp]
+ xor edx,ecx
+ pslld xmm5,11
+ mov edi,DWORD PTR 20[esp]
+ xor esi,edi
+ ror edx,5
+ pxor xmm4,xmm6
+ and esi,ecx
+ mov DWORD PTR 12[esp],ecx
+ movdqa xmm6,xmm7
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ pxor xmm4,xmm5
+ mov ecx,ebx
+ add edx,edi
+ psrld xmm7,10
+ mov edi,DWORD PTR [esp]
+ mov esi,ebx
+ ror ecx,9
+ paddd xmm2,xmm4
+ mov DWORD PTR 28[esp],ebx
+ xor ecx,ebx
+ psrlq xmm6,17
+ xor ebx,edi
+ add edx,DWORD PTR 24[esp]
+ ror ecx,11
+ pxor xmm7,xmm6
+ and eax,ebx
+ xor ecx,esi
+ psrlq xmm6,2
+ add edx,DWORD PTR 68[esp]
+ xor eax,edi
+ ror ecx,2
+ pxor xmm7,xmm6
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ pshufd xmm7,xmm7,128
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 12[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 16[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ psrldq xmm7,8
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ paddd xmm2,xmm7
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 28[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR 24[esp],eax
+ pshufd xmm7,xmm2,80
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 20[esp]
+ movdqa xmm6,xmm7
+ ror ecx,11
+ psrld xmm7,10
+ and ebx,eax
+ psrlq xmm6,17
+ xor ecx,esi
+ add edx,DWORD PTR 72[esp]
+ xor ebx,edi
+ ror ecx,2
+ pxor xmm7,xmm6
+ add ebx,edx
+ add edx,DWORD PTR 4[esp]
+ psrlq xmm6,2
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ pxor xmm7,xmm6
+ mov esi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 12[esp]
+ pshufd xmm7,xmm7,8
+ xor esi,edi
+ ror edx,5
+ movdqa xmm6,XMMWORD PTR 32[ebp]
+ and esi,ecx
+ mov DWORD PTR 4[esp],ecx
+ pslldq xmm7,8
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 24[esp]
+ mov esi,ebx
+ ror ecx,9
+ paddd xmm2,xmm7
+ mov DWORD PTR 20[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 16[esp]
+ paddd xmm6,xmm2
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 76[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,ecx
+ movdqa XMMWORD PTR 64[esp],xmm6
+ mov ecx,edx
+ movdqa xmm4,xmm0
+ ror edx,14
+ mov esi,DWORD PTR 4[esp]
+ movdqa xmm7,xmm2
+ xor edx,ecx
+ mov edi,DWORD PTR 8[esp]
+DB 102,15,58,15,227,4
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+DB 102,15,58,15,249,4
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ movdqa xmm5,xmm4
+ ror edx,6
+ mov ecx,eax
+ movdqa xmm6,xmm4
+ add edx,edi
+ mov edi,DWORD PTR 20[esp]
+ psrld xmm4,3
+ mov esi,eax
+ ror ecx,9
+ paddd xmm3,xmm7
+ mov DWORD PTR 16[esp],eax
+ xor ecx,eax
+ psrld xmm6,7
+ xor eax,edi
+ add edx,DWORD PTR 12[esp]
+ ror ecx,11
+ and ebx,eax
+ pshufd xmm7,xmm2,250
+ xor ecx,esi
+ add edx,DWORD PTR 80[esp]
+ pslld xmm5,14
+ xor ebx,edi
+ ror ecx,2
+ pxor xmm4,xmm6
+ add ebx,edx
+ add edx,DWORD PTR 28[esp]
+ psrld xmm6,11
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ pxor xmm4,xmm5
+ mov esi,DWORD PTR [esp]
+ xor edx,ecx
+ pslld xmm5,11
+ mov edi,DWORD PTR 4[esp]
+ xor esi,edi
+ ror edx,5
+ pxor xmm4,xmm6
+ and esi,ecx
+ mov DWORD PTR 28[esp],ecx
+ movdqa xmm6,xmm7
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ pxor xmm4,xmm5
+ mov ecx,ebx
+ add edx,edi
+ psrld xmm7,10
+ mov edi,DWORD PTR 16[esp]
+ mov esi,ebx
+ ror ecx,9
+ paddd xmm3,xmm4
+ mov DWORD PTR 12[esp],ebx
+ xor ecx,ebx
+ psrlq xmm6,17
+ xor ebx,edi
+ add edx,DWORD PTR 8[esp]
+ ror ecx,11
+ pxor xmm7,xmm6
+ and eax,ebx
+ xor ecx,esi
+ psrlq xmm6,2
+ add edx,DWORD PTR 84[esp]
+ xor eax,edi
+ ror ecx,2
+ pxor xmm7,xmm6
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ pshufd xmm7,xmm7,128
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 28[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR [esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ psrldq xmm7,8
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ paddd xmm3,xmm7
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR 8[esp],eax
+ pshufd xmm7,xmm3,80
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 4[esp]
+ movdqa xmm6,xmm7
+ ror ecx,11
+ psrld xmm7,10
+ and ebx,eax
+ psrlq xmm6,17
+ xor ecx,esi
+ add edx,DWORD PTR 88[esp]
+ xor ebx,edi
+ ror ecx,2
+ pxor xmm7,xmm6
+ add ebx,edx
+ add edx,DWORD PTR 20[esp]
+ psrlq xmm6,2
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ pxor xmm7,xmm6
+ mov esi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 28[esp]
+ pshufd xmm7,xmm7,8
+ xor esi,edi
+ ror edx,5
+ movdqa xmm6,XMMWORD PTR 48[ebp]
+ and esi,ecx
+ mov DWORD PTR 20[esp],ecx
+ pslldq xmm7,8
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 8[esp]
+ mov esi,ebx
+ ror ecx,9
+ paddd xmm3,xmm7
+ mov DWORD PTR 4[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR [esp]
+ paddd xmm6,xmm3
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 92[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,ecx
+ movdqa XMMWORD PTR 80[esp],xmm6
+ cmp DWORD PTR 64[ebp],66051
+ jne $L013ssse3_00_47
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 20[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 24[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 4[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR [esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 28[esp]
+ ror ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 32[esp]
+ xor ebx,edi
+ ror ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 12[esp]
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 20[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 12[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR [esp]
+ mov esi,ebx
+ ror ecx,9
+ mov DWORD PTR 28[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 24[esp]
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 36[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 12[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 16[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 28[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR 24[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 20[esp]
+ ror ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 40[esp]
+ xor ebx,edi
+ ror ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 4[esp]
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 12[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 4[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 24[esp]
+ mov esi,ebx
+ ror ecx,9
+ mov DWORD PTR 20[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 16[esp]
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 44[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 4[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 8[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR 16[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 12[esp]
+ ror ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 48[esp]
+ xor ebx,edi
+ ror ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 28[esp]
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR [esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 4[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 28[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 16[esp]
+ mov esi,ebx
+ ror ecx,9
+ mov DWORD PTR 12[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 8[esp]
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 52[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 28[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR [esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR 8[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 4[esp]
+ ror ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 56[esp]
+ xor ebx,edi
+ ror ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 20[esp]
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 28[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 20[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 8[esp]
+ mov esi,ebx
+ ror ecx,9
+ mov DWORD PTR 4[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR [esp]
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 60[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 20[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 24[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 4[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR [esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 28[esp]
+ ror ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 64[esp]
+ xor ebx,edi
+ ror ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 12[esp]
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 20[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 12[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR [esp]
+ mov esi,ebx
+ ror ecx,9
+ mov DWORD PTR 28[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 24[esp]
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 68[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 12[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 16[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 28[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR 24[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 20[esp]
+ ror ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 72[esp]
+ xor ebx,edi
+ ror ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 4[esp]
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 12[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 4[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 24[esp]
+ mov esi,ebx
+ ror ecx,9
+ mov DWORD PTR 20[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 16[esp]
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 76[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 4[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 8[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR 16[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 12[esp]
+ ror ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 80[esp]
+ xor ebx,edi
+ ror ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 28[esp]
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR [esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 4[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 28[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 16[esp]
+ mov esi,ebx
+ ror ecx,9
+ mov DWORD PTR 12[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 8[esp]
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 84[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 28[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR [esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,eax
+ ror ecx,9
+ mov DWORD PTR 8[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 4[esp]
+ ror ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 88[esp]
+ xor ebx,edi
+ ror ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 20[esp]
+ add ebx,ecx
+ mov ecx,edx
+ ror edx,14
+ mov esi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 28[esp]
+ xor esi,edi
+ ror edx,5
+ and esi,ecx
+ mov DWORD PTR 20[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ ror edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 8[esp]
+ mov esi,ebx
+ ror ecx,9
+ mov DWORD PTR 4[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR [esp]
+ ror ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 92[esp]
+ xor eax,edi
+ ror ecx,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,ecx
+ mov esi,DWORD PTR 96[esp]
+ xor ebx,edi
+ mov ecx,DWORD PTR 12[esp]
+ add eax,DWORD PTR [esi]
+ add ebx,DWORD PTR 4[esi]
+ add edi,DWORD PTR 8[esi]
+ add ecx,DWORD PTR 12[esi]
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],edi
+ mov DWORD PTR 12[esi],ecx
+ mov DWORD PTR 4[esp],ebx
+ xor ebx,edi
+ mov DWORD PTR 8[esp],edi
+ mov DWORD PTR 12[esp],ecx
+ mov edi,DWORD PTR 20[esp]
+ mov ecx,DWORD PTR 24[esp]
+ add edx,DWORD PTR 16[esi]
+ add edi,DWORD PTR 20[esi]
+ add ecx,DWORD PTR 24[esi]
+ mov DWORD PTR 16[esi],edx
+ mov DWORD PTR 20[esi],edi
+ mov DWORD PTR 20[esp],edi
+ mov edi,DWORD PTR 28[esp]
+ mov DWORD PTR 24[esi],ecx
+ add edi,DWORD PTR 28[esi]
+ mov DWORD PTR 24[esp],ecx
+ mov DWORD PTR 28[esi],edi
+ mov DWORD PTR 28[esp],edi
+ mov edi,DWORD PTR 100[esp]
+ movdqa xmm7,XMMWORD PTR 64[ebp]
+ sub ebp,192
+ cmp edi,DWORD PTR 104[esp]
+ jb $L012grand_ssse3
+ mov esp,DWORD PTR 108[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+ALIGN 32
+$L005AVX:
+ and edx,264
+ cmp edx,264
+ je $L014AVX_BMI
+ lea esp,DWORD PTR [esp-96]
+ vzeroall
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov edi,DWORD PTR 12[esi]
+ mov DWORD PTR 4[esp],ebx
+ xor ebx,ecx
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 12[esp],edi
+ mov edx,DWORD PTR 16[esi]
+ mov edi,DWORD PTR 20[esi]
+ mov ecx,DWORD PTR 24[esi]
+ mov esi,DWORD PTR 28[esi]
+ mov DWORD PTR 20[esp],edi
+ mov edi,DWORD PTR 100[esp]
+ mov DWORD PTR 24[esp],ecx
+ mov DWORD PTR 28[esp],esi
+ vmovdqa xmm7,XMMWORD PTR 256[ebp]
+ jmp $L015grand_avx
+ALIGN 32
+$L015grand_avx:
+ vmovdqu xmm0,XMMWORD PTR [edi]
+ vmovdqu xmm1,XMMWORD PTR 16[edi]
+ vmovdqu xmm2,XMMWORD PTR 32[edi]
+ vmovdqu xmm3,XMMWORD PTR 48[edi]
+ add edi,64
+ vpshufb xmm0,xmm0,xmm7
+ mov DWORD PTR 100[esp],edi
+ vpshufb xmm1,xmm1,xmm7
+ vpshufb xmm2,xmm2,xmm7
+ vpaddd xmm4,xmm0,XMMWORD PTR [ebp]
+ vpshufb xmm3,xmm3,xmm7
+ vpaddd xmm5,xmm1,XMMWORD PTR 16[ebp]
+ vpaddd xmm6,xmm2,XMMWORD PTR 32[ebp]
+ vpaddd xmm7,xmm3,XMMWORD PTR 48[ebp]
+ vmovdqa XMMWORD PTR 32[esp],xmm4
+ vmovdqa XMMWORD PTR 48[esp],xmm5
+ vmovdqa XMMWORD PTR 64[esp],xmm6
+ vmovdqa XMMWORD PTR 80[esp],xmm7
+ jmp $L016avx_00_47
+ALIGN 16
+$L016avx_00_47:
+ add ebp,64
+ vpalignr xmm4,xmm1,xmm0,4
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 20[esp]
+ vpalignr xmm7,xmm3,xmm2,4
+ xor edx,ecx
+ mov edi,DWORD PTR 24[esp]
+ xor esi,edi
+ vpsrld xmm6,xmm4,7
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ vpaddd xmm0,xmm0,xmm7
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrld xmm7,xmm4,3
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 4[esp]
+ vpslld xmm5,xmm4,14
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR [esp],eax
+ vpxor xmm4,xmm7,xmm6
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 28[esp]
+ vpshufd xmm7,xmm3,250
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ vpsrld xmm6,xmm6,11
+ add edx,DWORD PTR 32[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ vpxor xmm4,xmm4,xmm5
+ add ebx,edx
+ add edx,DWORD PTR 12[esp]
+ add ebx,ecx
+ vpslld xmm5,xmm5,11
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 16[esp]
+ vpxor xmm4,xmm4,xmm6
+ xor edx,ecx
+ mov edi,DWORD PTR 20[esp]
+ xor esi,edi
+ vpsrld xmm6,xmm7,10
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 12[esp],ecx
+ vpxor xmm4,xmm4,xmm5
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrlq xmm5,xmm7,17
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR [esp]
+ vpaddd xmm0,xmm0,xmm4
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 28[esp],ebx
+ vpxor xmm6,xmm6,xmm5
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 24[esp]
+ vpsrlq xmm7,xmm7,19
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ vpxor xmm6,xmm6,xmm7
+ add edx,DWORD PTR 36[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ vpshufd xmm7,xmm6,132
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,ecx
+ vpsrldq xmm7,xmm7,8
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 12[esp]
+ vpaddd xmm0,xmm0,xmm7
+ xor edx,ecx
+ mov edi,DWORD PTR 16[esp]
+ xor esi,edi
+ vpshufd xmm7,xmm0,80
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ vpsrld xmm6,xmm7,10
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrlq xmm5,xmm7,17
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 28[esp]
+ vpxor xmm6,xmm6,xmm5
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 24[esp],eax
+ vpsrlq xmm7,xmm7,19
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 20[esp]
+ vpxor xmm6,xmm6,xmm7
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ vpshufd xmm7,xmm6,232
+ add edx,DWORD PTR 40[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ vpslldq xmm7,xmm7,8
+ add ebx,edx
+ add edx,DWORD PTR 4[esp]
+ add ebx,ecx
+ vpaddd xmm0,xmm0,xmm7
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 8[esp]
+ vpaddd xmm6,xmm0,XMMWORD PTR [ebp]
+ xor edx,ecx
+ mov edi,DWORD PTR 12[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 4[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 24[esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 20[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 16[esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 44[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,ecx
+ vmovdqa XMMWORD PTR 32[esp],xmm6
+ vpalignr xmm4,xmm2,xmm1,4
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 4[esp]
+ vpalignr xmm7,xmm0,xmm3,4
+ xor edx,ecx
+ mov edi,DWORD PTR 8[esp]
+ xor esi,edi
+ vpsrld xmm6,xmm4,7
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ vpaddd xmm1,xmm1,xmm7
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrld xmm7,xmm4,3
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 20[esp]
+ vpslld xmm5,xmm4,14
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 16[esp],eax
+ vpxor xmm4,xmm7,xmm6
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 12[esp]
+ vpshufd xmm7,xmm0,250
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ vpsrld xmm6,xmm6,11
+ add edx,DWORD PTR 48[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ vpxor xmm4,xmm4,xmm5
+ add ebx,edx
+ add edx,DWORD PTR 28[esp]
+ add ebx,ecx
+ vpslld xmm5,xmm5,11
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR [esp]
+ vpxor xmm4,xmm4,xmm6
+ xor edx,ecx
+ mov edi,DWORD PTR 4[esp]
+ xor esi,edi
+ vpsrld xmm6,xmm7,10
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 28[esp],ecx
+ vpxor xmm4,xmm4,xmm5
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrlq xmm5,xmm7,17
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 16[esp]
+ vpaddd xmm1,xmm1,xmm4
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 12[esp],ebx
+ vpxor xmm6,xmm6,xmm5
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 8[esp]
+ vpsrlq xmm7,xmm7,19
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ vpxor xmm6,xmm6,xmm7
+ add edx,DWORD PTR 52[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ vpshufd xmm7,xmm6,132
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,ecx
+ vpsrldq xmm7,xmm7,8
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 28[esp]
+ vpaddd xmm1,xmm1,xmm7
+ xor edx,ecx
+ mov edi,DWORD PTR [esp]
+ xor esi,edi
+ vpshufd xmm7,xmm1,80
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ vpsrld xmm6,xmm7,10
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrlq xmm5,xmm7,17
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 12[esp]
+ vpxor xmm6,xmm6,xmm5
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 8[esp],eax
+ vpsrlq xmm7,xmm7,19
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 4[esp]
+ vpxor xmm6,xmm6,xmm7
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ vpshufd xmm7,xmm6,232
+ add edx,DWORD PTR 56[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ vpslldq xmm7,xmm7,8
+ add ebx,edx
+ add edx,DWORD PTR 20[esp]
+ add ebx,ecx
+ vpaddd xmm1,xmm1,xmm7
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 24[esp]
+ vpaddd xmm6,xmm1,XMMWORD PTR 16[ebp]
+ xor edx,ecx
+ mov edi,DWORD PTR 28[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 20[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 8[esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 4[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR [esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 60[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,ecx
+ vmovdqa XMMWORD PTR 48[esp],xmm6
+ vpalignr xmm4,xmm3,xmm2,4
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 20[esp]
+ vpalignr xmm7,xmm1,xmm0,4
+ xor edx,ecx
+ mov edi,DWORD PTR 24[esp]
+ xor esi,edi
+ vpsrld xmm6,xmm4,7
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ vpaddd xmm2,xmm2,xmm7
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrld xmm7,xmm4,3
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 4[esp]
+ vpslld xmm5,xmm4,14
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR [esp],eax
+ vpxor xmm4,xmm7,xmm6
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 28[esp]
+ vpshufd xmm7,xmm1,250
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ vpsrld xmm6,xmm6,11
+ add edx,DWORD PTR 64[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ vpxor xmm4,xmm4,xmm5
+ add ebx,edx
+ add edx,DWORD PTR 12[esp]
+ add ebx,ecx
+ vpslld xmm5,xmm5,11
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 16[esp]
+ vpxor xmm4,xmm4,xmm6
+ xor edx,ecx
+ mov edi,DWORD PTR 20[esp]
+ xor esi,edi
+ vpsrld xmm6,xmm7,10
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 12[esp],ecx
+ vpxor xmm4,xmm4,xmm5
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrlq xmm5,xmm7,17
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR [esp]
+ vpaddd xmm2,xmm2,xmm4
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 28[esp],ebx
+ vpxor xmm6,xmm6,xmm5
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 24[esp]
+ vpsrlq xmm7,xmm7,19
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ vpxor xmm6,xmm6,xmm7
+ add edx,DWORD PTR 68[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ vpshufd xmm7,xmm6,132
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,ecx
+ vpsrldq xmm7,xmm7,8
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 12[esp]
+ vpaddd xmm2,xmm2,xmm7
+ xor edx,ecx
+ mov edi,DWORD PTR 16[esp]
+ xor esi,edi
+ vpshufd xmm7,xmm2,80
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ vpsrld xmm6,xmm7,10
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrlq xmm5,xmm7,17
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 28[esp]
+ vpxor xmm6,xmm6,xmm5
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 24[esp],eax
+ vpsrlq xmm7,xmm7,19
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 20[esp]
+ vpxor xmm6,xmm6,xmm7
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ vpshufd xmm7,xmm6,232
+ add edx,DWORD PTR 72[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ vpslldq xmm7,xmm7,8
+ add ebx,edx
+ add edx,DWORD PTR 4[esp]
+ add ebx,ecx
+ vpaddd xmm2,xmm2,xmm7
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 8[esp]
+ vpaddd xmm6,xmm2,XMMWORD PTR 32[ebp]
+ xor edx,ecx
+ mov edi,DWORD PTR 12[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 4[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 24[esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 20[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 16[esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 76[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,ecx
+ vmovdqa XMMWORD PTR 64[esp],xmm6
+ vpalignr xmm4,xmm0,xmm3,4
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 4[esp]
+ vpalignr xmm7,xmm2,xmm1,4
+ xor edx,ecx
+ mov edi,DWORD PTR 8[esp]
+ xor esi,edi
+ vpsrld xmm6,xmm4,7
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ vpaddd xmm3,xmm3,xmm7
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrld xmm7,xmm4,3
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 20[esp]
+ vpslld xmm5,xmm4,14
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 16[esp],eax
+ vpxor xmm4,xmm7,xmm6
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 12[esp]
+ vpshufd xmm7,xmm2,250
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ vpsrld xmm6,xmm6,11
+ add edx,DWORD PTR 80[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ vpxor xmm4,xmm4,xmm5
+ add ebx,edx
+ add edx,DWORD PTR 28[esp]
+ add ebx,ecx
+ vpslld xmm5,xmm5,11
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR [esp]
+ vpxor xmm4,xmm4,xmm6
+ xor edx,ecx
+ mov edi,DWORD PTR 4[esp]
+ xor esi,edi
+ vpsrld xmm6,xmm7,10
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 28[esp],ecx
+ vpxor xmm4,xmm4,xmm5
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrlq xmm5,xmm7,17
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 16[esp]
+ vpaddd xmm3,xmm3,xmm4
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 12[esp],ebx
+ vpxor xmm6,xmm6,xmm5
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 8[esp]
+ vpsrlq xmm7,xmm7,19
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ vpxor xmm6,xmm6,xmm7
+ add edx,DWORD PTR 84[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ vpshufd xmm7,xmm6,132
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,ecx
+ vpsrldq xmm7,xmm7,8
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 28[esp]
+ vpaddd xmm3,xmm3,xmm7
+ xor edx,ecx
+ mov edi,DWORD PTR [esp]
+ xor esi,edi
+ vpshufd xmm7,xmm3,80
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ vpsrld xmm6,xmm7,10
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ vpsrlq xmm5,xmm7,17
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 12[esp]
+ vpxor xmm6,xmm6,xmm5
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 8[esp],eax
+ vpsrlq xmm7,xmm7,19
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 4[esp]
+ vpxor xmm6,xmm6,xmm7
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ vpshufd xmm7,xmm6,232
+ add edx,DWORD PTR 88[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ vpslldq xmm7,xmm7,8
+ add ebx,edx
+ add edx,DWORD PTR 20[esp]
+ add ebx,ecx
+ vpaddd xmm3,xmm3,xmm7
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 24[esp]
+ vpaddd xmm6,xmm3,XMMWORD PTR 48[ebp]
+ xor edx,ecx
+ mov edi,DWORD PTR 28[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 20[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 8[esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 4[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR [esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 92[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,ecx
+ vmovdqa XMMWORD PTR 80[esp],xmm6
+ cmp DWORD PTR 64[ebp],66051
+ jne $L016avx_00_47
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 20[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 24[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 4[esp]
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR [esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 28[esp]
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 32[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 12[esp]
+ add ebx,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 20[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 12[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR [esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 28[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 24[esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 36[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 12[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 16[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 28[esp]
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 24[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 20[esp]
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 40[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 4[esp]
+ add ebx,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 12[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 4[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 24[esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 20[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 16[esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 44[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 4[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 8[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 16[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 12[esp]
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 48[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 28[esp]
+ add ebx,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR [esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 4[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 28[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 16[esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 12[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 8[esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 52[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 28[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR [esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 8[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 4[esp]
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 56[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 20[esp]
+ add ebx,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 28[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 20[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 8[esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 4[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR [esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 60[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 20[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 24[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 16[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 4[esp]
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR [esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 28[esp]
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 64[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 12[esp]
+ add ebx,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 16[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 20[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 12[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR [esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 28[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 24[esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 68[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR 8[esp]
+ add eax,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 12[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 16[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 8[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 28[esp]
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 24[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 20[esp]
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 72[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 4[esp]
+ add ebx,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 8[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 12[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 4[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 24[esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 20[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 16[esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 76[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR [esp]
+ add eax,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 4[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 8[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR [esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 16[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 12[esp]
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 80[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 28[esp]
+ add ebx,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR [esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 4[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 28[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 16[esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 12[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR 8[esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 84[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR 24[esp]
+ add eax,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 28[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR [esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 24[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,eax
+ add edx,edi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,eax
+ shrd ecx,ecx,9
+ mov DWORD PTR 8[esp],eax
+ xor ecx,eax
+ xor eax,edi
+ add edx,DWORD PTR 4[esp]
+ shrd ecx,ecx,11
+ and ebx,eax
+ xor ecx,esi
+ add edx,DWORD PTR 88[esp]
+ xor ebx,edi
+ shrd ecx,ecx,2
+ add ebx,edx
+ add edx,DWORD PTR 20[esp]
+ add ebx,ecx
+ mov ecx,edx
+ shrd edx,edx,14
+ mov esi,DWORD PTR 24[esp]
+ xor edx,ecx
+ mov edi,DWORD PTR 28[esp]
+ xor esi,edi
+ shrd edx,edx,5
+ and esi,ecx
+ mov DWORD PTR 20[esp],ecx
+ xor edx,ecx
+ xor edi,esi
+ shrd edx,edx,6
+ mov ecx,ebx
+ add edx,edi
+ mov edi,DWORD PTR 8[esp]
+ mov esi,ebx
+ shrd ecx,ecx,9
+ mov DWORD PTR 4[esp],ebx
+ xor ecx,ebx
+ xor ebx,edi
+ add edx,DWORD PTR [esp]
+ shrd ecx,ecx,11
+ and eax,ebx
+ xor ecx,esi
+ add edx,DWORD PTR 92[esp]
+ xor eax,edi
+ shrd ecx,ecx,2
+ add eax,edx
+ add edx,DWORD PTR 16[esp]
+ add eax,ecx
+ mov esi,DWORD PTR 96[esp]
+ xor ebx,edi
+ mov ecx,DWORD PTR 12[esp]
+ add eax,DWORD PTR [esi]
+ add ebx,DWORD PTR 4[esi]
+ add edi,DWORD PTR 8[esi]
+ add ecx,DWORD PTR 12[esi]
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],edi
+ mov DWORD PTR 12[esi],ecx
+ mov DWORD PTR 4[esp],ebx
+ xor ebx,edi
+ mov DWORD PTR 8[esp],edi
+ mov DWORD PTR 12[esp],ecx
+ mov edi,DWORD PTR 20[esp]
+ mov ecx,DWORD PTR 24[esp]
+ add edx,DWORD PTR 16[esi]
+ add edi,DWORD PTR 20[esi]
+ add ecx,DWORD PTR 24[esi]
+ mov DWORD PTR 16[esi],edx
+ mov DWORD PTR 20[esi],edi
+ mov DWORD PTR 20[esp],edi
+ mov edi,DWORD PTR 28[esp]
+ mov DWORD PTR 24[esi],ecx
+ add edi,DWORD PTR 28[esi]
+ mov DWORD PTR 24[esp],ecx
+ mov DWORD PTR 28[esi],edi
+ mov DWORD PTR 28[esp],edi
+ mov edi,DWORD PTR 100[esp]
+ vmovdqa xmm7,XMMWORD PTR 64[ebp]
+ sub ebp,192
+ cmp edi,DWORD PTR 104[esp]
+ jb $L015grand_avx
+ mov esp,DWORD PTR 108[esp]
+ vzeroall
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+ALIGN 32
+$L014AVX_BMI:
+ lea esp,DWORD PTR [esp-96]
+ vzeroall
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov edi,DWORD PTR 12[esi]
+ mov DWORD PTR 4[esp],ebx
+ xor ebx,ecx
+ mov DWORD PTR 8[esp],ecx
+ mov DWORD PTR 12[esp],edi
+ mov edx,DWORD PTR 16[esi]
+ mov edi,DWORD PTR 20[esi]
+ mov ecx,DWORD PTR 24[esi]
+ mov esi,DWORD PTR 28[esi]
+ mov DWORD PTR 20[esp],edi
+ mov edi,DWORD PTR 100[esp]
+ mov DWORD PTR 24[esp],ecx
+ mov DWORD PTR 28[esp],esi
+ vmovdqa xmm7,XMMWORD PTR 256[ebp]
+ jmp $L017grand_avx_bmi
+ALIGN 32
+$L017grand_avx_bmi:
+ vmovdqu xmm0,XMMWORD PTR [edi]
+ vmovdqu xmm1,XMMWORD PTR 16[edi]
+ vmovdqu xmm2,XMMWORD PTR 32[edi]
+ vmovdqu xmm3,XMMWORD PTR 48[edi]
+ add edi,64
+ vpshufb xmm0,xmm0,xmm7
+ mov DWORD PTR 100[esp],edi
+ vpshufb xmm1,xmm1,xmm7
+ vpshufb xmm2,xmm2,xmm7
+ vpaddd xmm4,xmm0,XMMWORD PTR [ebp]
+ vpshufb xmm3,xmm3,xmm7
+ vpaddd xmm5,xmm1,XMMWORD PTR 16[ebp]
+ vpaddd xmm6,xmm2,XMMWORD PTR 32[ebp]
+ vpaddd xmm7,xmm3,XMMWORD PTR 48[ebp]
+ vmovdqa XMMWORD PTR 32[esp],xmm4
+ vmovdqa XMMWORD PTR 48[esp],xmm5
+ vmovdqa XMMWORD PTR 64[esp],xmm6
+ vmovdqa XMMWORD PTR 80[esp],xmm7
+ jmp $L018avx_bmi_00_47
+ALIGN 16
+$L018avx_bmi_00_47:
+ add ebp,64
+ vpalignr xmm4,xmm1,xmm0,4
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 16[esp],edx
+ vpalignr xmm7,xmm3,xmm2,4
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 24[esp]
+ vpsrld xmm6,xmm4,7
+ xor ecx,edi
+ and edx,DWORD PTR 20[esp]
+ mov DWORD PTR [esp],eax
+ vpaddd xmm0,xmm0,xmm7
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ vpsrld xmm7,xmm4,3
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ vpslld xmm5,xmm4,14
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,esi
+ xor eax,edi
+ vpxor xmm4,xmm7,xmm6
+ add edx,DWORD PTR 28[esp]
+ and ebx,eax
+ add edx,DWORD PTR 32[esp]
+ vpshufd xmm7,xmm3,250
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 12[esp]
+ vpsrld xmm6,xmm6,11
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpxor xmm4,xmm4,xmm5
+ mov DWORD PTR 12[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpslld xmm5,xmm5,11
+ andn esi,edx,DWORD PTR 20[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 16[esp]
+ vpxor xmm4,xmm4,xmm6
+ mov DWORD PTR 28[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ vpsrld xmm6,xmm7,10
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ vpxor xmm4,xmm4,xmm5
+ mov edi,DWORD PTR [esp]
+ xor ecx,esi
+ xor ebx,edi
+ vpsrlq xmm5,xmm7,17
+ add edx,DWORD PTR 24[esp]
+ and eax,ebx
+ add edx,DWORD PTR 36[esp]
+ vpaddd xmm0,xmm0,xmm4
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 8[esp]
+ vpxor xmm6,xmm6,xmm5
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpsrlq xmm7,xmm7,19
+ mov DWORD PTR 8[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpxor xmm6,xmm6,xmm7
+ andn esi,edx,DWORD PTR 16[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 12[esp]
+ vpshufd xmm7,xmm6,132
+ mov DWORD PTR 24[esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ vpsrldq xmm7,xmm7,8
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ vpaddd xmm0,xmm0,xmm7
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,esi
+ xor eax,edi
+ vpshufd xmm7,xmm0,80
+ add edx,DWORD PTR 20[esp]
+ and ebx,eax
+ add edx,DWORD PTR 40[esp]
+ vpsrld xmm6,xmm7,10
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 4[esp]
+ vpsrlq xmm5,xmm7,17
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpxor xmm6,xmm6,xmm5
+ mov DWORD PTR 4[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpsrlq xmm7,xmm7,19
+ andn esi,edx,DWORD PTR 12[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 8[esp]
+ vpxor xmm6,xmm6,xmm7
+ mov DWORD PTR 20[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ vpshufd xmm7,xmm6,232
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ vpslldq xmm7,xmm7,8
+ mov edi,DWORD PTR 24[esp]
+ xor ecx,esi
+ xor ebx,edi
+ vpaddd xmm0,xmm0,xmm7
+ add edx,DWORD PTR 16[esp]
+ and eax,ebx
+ add edx,DWORD PTR 44[esp]
+ vpaddd xmm6,xmm0,XMMWORD PTR [ebp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR [esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ vmovdqa XMMWORD PTR 32[esp],xmm6
+ vpalignr xmm4,xmm2,xmm1,4
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR [esp],edx
+ vpalignr xmm7,xmm0,xmm3,4
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 8[esp]
+ vpsrld xmm6,xmm4,7
+ xor ecx,edi
+ and edx,DWORD PTR 4[esp]
+ mov DWORD PTR 16[esp],eax
+ vpaddd xmm1,xmm1,xmm7
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ vpsrld xmm7,xmm4,3
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ vpslld xmm5,xmm4,14
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,esi
+ xor eax,edi
+ vpxor xmm4,xmm7,xmm6
+ add edx,DWORD PTR 12[esp]
+ and ebx,eax
+ add edx,DWORD PTR 48[esp]
+ vpshufd xmm7,xmm0,250
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 28[esp]
+ vpsrld xmm6,xmm6,11
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpxor xmm4,xmm4,xmm5
+ mov DWORD PTR 28[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpslld xmm5,xmm5,11
+ andn esi,edx,DWORD PTR 4[esp]
+ xor ecx,edi
+ and edx,DWORD PTR [esp]
+ vpxor xmm4,xmm4,xmm6
+ mov DWORD PTR 12[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ vpsrld xmm6,xmm7,10
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ vpxor xmm4,xmm4,xmm5
+ mov edi,DWORD PTR 16[esp]
+ xor ecx,esi
+ xor ebx,edi
+ vpsrlq xmm5,xmm7,17
+ add edx,DWORD PTR 8[esp]
+ and eax,ebx
+ add edx,DWORD PTR 52[esp]
+ vpaddd xmm1,xmm1,xmm4
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 24[esp]
+ vpxor xmm6,xmm6,xmm5
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpsrlq xmm7,xmm7,19
+ mov DWORD PTR 24[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpxor xmm6,xmm6,xmm7
+ andn esi,edx,DWORD PTR [esp]
+ xor ecx,edi
+ and edx,DWORD PTR 28[esp]
+ vpshufd xmm7,xmm6,132
+ mov DWORD PTR 8[esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ vpsrldq xmm7,xmm7,8
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ vpaddd xmm1,xmm1,xmm7
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,esi
+ xor eax,edi
+ vpshufd xmm7,xmm1,80
+ add edx,DWORD PTR 4[esp]
+ and ebx,eax
+ add edx,DWORD PTR 56[esp]
+ vpsrld xmm6,xmm7,10
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 20[esp]
+ vpsrlq xmm5,xmm7,17
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpxor xmm6,xmm6,xmm5
+ mov DWORD PTR 20[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpsrlq xmm7,xmm7,19
+ andn esi,edx,DWORD PTR 28[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 24[esp]
+ vpxor xmm6,xmm6,xmm7
+ mov DWORD PTR 4[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ vpshufd xmm7,xmm6,232
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ vpslldq xmm7,xmm7,8
+ mov edi,DWORD PTR 8[esp]
+ xor ecx,esi
+ xor ebx,edi
+ vpaddd xmm1,xmm1,xmm7
+ add edx,DWORD PTR [esp]
+ and eax,ebx
+ add edx,DWORD PTR 60[esp]
+ vpaddd xmm6,xmm1,XMMWORD PTR 16[ebp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 16[esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ vmovdqa XMMWORD PTR 48[esp],xmm6
+ vpalignr xmm4,xmm3,xmm2,4
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 16[esp],edx
+ vpalignr xmm7,xmm1,xmm0,4
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 24[esp]
+ vpsrld xmm6,xmm4,7
+ xor ecx,edi
+ and edx,DWORD PTR 20[esp]
+ mov DWORD PTR [esp],eax
+ vpaddd xmm2,xmm2,xmm7
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ vpsrld xmm7,xmm4,3
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ vpslld xmm5,xmm4,14
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,esi
+ xor eax,edi
+ vpxor xmm4,xmm7,xmm6
+ add edx,DWORD PTR 28[esp]
+ and ebx,eax
+ add edx,DWORD PTR 64[esp]
+ vpshufd xmm7,xmm1,250
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 12[esp]
+ vpsrld xmm6,xmm6,11
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpxor xmm4,xmm4,xmm5
+ mov DWORD PTR 12[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpslld xmm5,xmm5,11
+ andn esi,edx,DWORD PTR 20[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 16[esp]
+ vpxor xmm4,xmm4,xmm6
+ mov DWORD PTR 28[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ vpsrld xmm6,xmm7,10
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ vpxor xmm4,xmm4,xmm5
+ mov edi,DWORD PTR [esp]
+ xor ecx,esi
+ xor ebx,edi
+ vpsrlq xmm5,xmm7,17
+ add edx,DWORD PTR 24[esp]
+ and eax,ebx
+ add edx,DWORD PTR 68[esp]
+ vpaddd xmm2,xmm2,xmm4
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 8[esp]
+ vpxor xmm6,xmm6,xmm5
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpsrlq xmm7,xmm7,19
+ mov DWORD PTR 8[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpxor xmm6,xmm6,xmm7
+ andn esi,edx,DWORD PTR 16[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 12[esp]
+ vpshufd xmm7,xmm6,132
+ mov DWORD PTR 24[esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ vpsrldq xmm7,xmm7,8
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ vpaddd xmm2,xmm2,xmm7
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,esi
+ xor eax,edi
+ vpshufd xmm7,xmm2,80
+ add edx,DWORD PTR 20[esp]
+ and ebx,eax
+ add edx,DWORD PTR 72[esp]
+ vpsrld xmm6,xmm7,10
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 4[esp]
+ vpsrlq xmm5,xmm7,17
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpxor xmm6,xmm6,xmm5
+ mov DWORD PTR 4[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpsrlq xmm7,xmm7,19
+ andn esi,edx,DWORD PTR 12[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 8[esp]
+ vpxor xmm6,xmm6,xmm7
+ mov DWORD PTR 20[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ vpshufd xmm7,xmm6,232
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ vpslldq xmm7,xmm7,8
+ mov edi,DWORD PTR 24[esp]
+ xor ecx,esi
+ xor ebx,edi
+ vpaddd xmm2,xmm2,xmm7
+ add edx,DWORD PTR 16[esp]
+ and eax,ebx
+ add edx,DWORD PTR 76[esp]
+ vpaddd xmm6,xmm2,XMMWORD PTR 32[ebp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR [esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ vmovdqa XMMWORD PTR 64[esp],xmm6
+ vpalignr xmm4,xmm0,xmm3,4
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR [esp],edx
+ vpalignr xmm7,xmm2,xmm1,4
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 8[esp]
+ vpsrld xmm6,xmm4,7
+ xor ecx,edi
+ and edx,DWORD PTR 4[esp]
+ mov DWORD PTR 16[esp],eax
+ vpaddd xmm3,xmm3,xmm7
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ vpsrld xmm7,xmm4,3
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ vpslld xmm5,xmm4,14
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,esi
+ xor eax,edi
+ vpxor xmm4,xmm7,xmm6
+ add edx,DWORD PTR 12[esp]
+ and ebx,eax
+ add edx,DWORD PTR 80[esp]
+ vpshufd xmm7,xmm2,250
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 28[esp]
+ vpsrld xmm6,xmm6,11
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpxor xmm4,xmm4,xmm5
+ mov DWORD PTR 28[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpslld xmm5,xmm5,11
+ andn esi,edx,DWORD PTR 4[esp]
+ xor ecx,edi
+ and edx,DWORD PTR [esp]
+ vpxor xmm4,xmm4,xmm6
+ mov DWORD PTR 12[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ vpsrld xmm6,xmm7,10
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ vpxor xmm4,xmm4,xmm5
+ mov edi,DWORD PTR 16[esp]
+ xor ecx,esi
+ xor ebx,edi
+ vpsrlq xmm5,xmm7,17
+ add edx,DWORD PTR 8[esp]
+ and eax,ebx
+ add edx,DWORD PTR 84[esp]
+ vpaddd xmm3,xmm3,xmm4
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 24[esp]
+ vpxor xmm6,xmm6,xmm5
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpsrlq xmm7,xmm7,19
+ mov DWORD PTR 24[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpxor xmm6,xmm6,xmm7
+ andn esi,edx,DWORD PTR [esp]
+ xor ecx,edi
+ and edx,DWORD PTR 28[esp]
+ vpshufd xmm7,xmm6,132
+ mov DWORD PTR 8[esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ vpsrldq xmm7,xmm7,8
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ vpaddd xmm3,xmm3,xmm7
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,esi
+ xor eax,edi
+ vpshufd xmm7,xmm3,80
+ add edx,DWORD PTR 4[esp]
+ and ebx,eax
+ add edx,DWORD PTR 88[esp]
+ vpsrld xmm6,xmm7,10
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 20[esp]
+ vpsrlq xmm5,xmm7,17
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ vpxor xmm6,xmm6,xmm5
+ mov DWORD PTR 20[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ vpsrlq xmm7,xmm7,19
+ andn esi,edx,DWORD PTR 28[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 24[esp]
+ vpxor xmm6,xmm6,xmm7
+ mov DWORD PTR 4[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ vpshufd xmm7,xmm6,232
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ vpslldq xmm7,xmm7,8
+ mov edi,DWORD PTR 8[esp]
+ xor ecx,esi
+ xor ebx,edi
+ vpaddd xmm3,xmm3,xmm7
+ add edx,DWORD PTR [esp]
+ and eax,ebx
+ add edx,DWORD PTR 92[esp]
+ vpaddd xmm6,xmm3,XMMWORD PTR 48[ebp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 16[esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ vmovdqa XMMWORD PTR 80[esp],xmm6
+ cmp DWORD PTR 64[ebp],66051
+ jne $L018avx_bmi_00_47
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 16[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 24[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 20[esp]
+ mov DWORD PTR [esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,esi
+ xor eax,edi
+ add edx,DWORD PTR 28[esp]
+ and ebx,eax
+ add edx,DWORD PTR 32[esp]
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 12[esp]
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 12[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 20[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 16[esp]
+ mov DWORD PTR 28[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ mov edi,DWORD PTR [esp]
+ xor ecx,esi
+ xor ebx,edi
+ add edx,DWORD PTR 24[esp]
+ and eax,ebx
+ add edx,DWORD PTR 36[esp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 8[esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 8[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 16[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 12[esp]
+ mov DWORD PTR 24[esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,esi
+ xor eax,edi
+ add edx,DWORD PTR 20[esp]
+ and ebx,eax
+ add edx,DWORD PTR 40[esp]
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 4[esp]
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 4[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 12[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 8[esp]
+ mov DWORD PTR 20[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ mov edi,DWORD PTR 24[esp]
+ xor ecx,esi
+ xor ebx,edi
+ add edx,DWORD PTR 16[esp]
+ and eax,ebx
+ add edx,DWORD PTR 44[esp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR [esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR [esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 8[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 4[esp]
+ mov DWORD PTR 16[esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,esi
+ xor eax,edi
+ add edx,DWORD PTR 12[esp]
+ and ebx,eax
+ add edx,DWORD PTR 48[esp]
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 28[esp]
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 28[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 4[esp]
+ xor ecx,edi
+ and edx,DWORD PTR [esp]
+ mov DWORD PTR 12[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ mov edi,DWORD PTR 16[esp]
+ xor ecx,esi
+ xor ebx,edi
+ add edx,DWORD PTR 8[esp]
+ and eax,ebx
+ add edx,DWORD PTR 52[esp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 24[esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 24[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR [esp]
+ xor ecx,edi
+ and edx,DWORD PTR 28[esp]
+ mov DWORD PTR 8[esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,esi
+ xor eax,edi
+ add edx,DWORD PTR 4[esp]
+ and ebx,eax
+ add edx,DWORD PTR 56[esp]
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 20[esp]
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 20[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 28[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 24[esp]
+ mov DWORD PTR 4[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ mov edi,DWORD PTR 8[esp]
+ xor ecx,esi
+ xor ebx,edi
+ add edx,DWORD PTR [esp]
+ and eax,ebx
+ add edx,DWORD PTR 60[esp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 16[esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 16[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 24[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 20[esp]
+ mov DWORD PTR [esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ mov edi,DWORD PTR 4[esp]
+ xor ecx,esi
+ xor eax,edi
+ add edx,DWORD PTR 28[esp]
+ and ebx,eax
+ add edx,DWORD PTR 64[esp]
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 12[esp]
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 12[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 20[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 16[esp]
+ mov DWORD PTR 28[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ mov edi,DWORD PTR [esp]
+ xor ecx,esi
+ xor ebx,edi
+ add edx,DWORD PTR 24[esp]
+ and eax,ebx
+ add edx,DWORD PTR 68[esp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 8[esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 8[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 16[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 12[esp]
+ mov DWORD PTR 24[esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ mov edi,DWORD PTR 28[esp]
+ xor ecx,esi
+ xor eax,edi
+ add edx,DWORD PTR 20[esp]
+ and ebx,eax
+ add edx,DWORD PTR 72[esp]
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 4[esp]
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 4[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 12[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 8[esp]
+ mov DWORD PTR 20[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ mov edi,DWORD PTR 24[esp]
+ xor ecx,esi
+ xor ebx,edi
+ add edx,DWORD PTR 16[esp]
+ and eax,ebx
+ add edx,DWORD PTR 76[esp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR [esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR [esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 8[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 4[esp]
+ mov DWORD PTR 16[esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ mov edi,DWORD PTR 20[esp]
+ xor ecx,esi
+ xor eax,edi
+ add edx,DWORD PTR 12[esp]
+ and ebx,eax
+ add edx,DWORD PTR 80[esp]
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 28[esp]
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 28[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 4[esp]
+ xor ecx,edi
+ and edx,DWORD PTR [esp]
+ mov DWORD PTR 12[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ mov edi,DWORD PTR 16[esp]
+ xor ecx,esi
+ xor ebx,edi
+ add edx,DWORD PTR 8[esp]
+ and eax,ebx
+ add edx,DWORD PTR 84[esp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 24[esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 24[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR [esp]
+ xor ecx,edi
+ and edx,DWORD PTR 28[esp]
+ mov DWORD PTR 8[esp],eax
+ or edx,esi
+ rorx edi,eax,2
+ rorx esi,eax,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,eax,22
+ xor esi,edi
+ mov edi,DWORD PTR 12[esp]
+ xor ecx,esi
+ xor eax,edi
+ add edx,DWORD PTR 4[esp]
+ and ebx,eax
+ add edx,DWORD PTR 88[esp]
+ xor ebx,edi
+ add ecx,edx
+ add edx,DWORD PTR 20[esp]
+ lea ebx,DWORD PTR [ecx*1+ebx]
+ rorx ecx,edx,6
+ rorx esi,edx,11
+ mov DWORD PTR 20[esp],edx
+ rorx edi,edx,25
+ xor ecx,esi
+ andn esi,edx,DWORD PTR 28[esp]
+ xor ecx,edi
+ and edx,DWORD PTR 24[esp]
+ mov DWORD PTR 4[esp],ebx
+ or edx,esi
+ rorx edi,ebx,2
+ rorx esi,ebx,13
+ lea edx,DWORD PTR [ecx*1+edx]
+ rorx ecx,ebx,22
+ xor esi,edi
+ mov edi,DWORD PTR 8[esp]
+ xor ecx,esi
+ xor ebx,edi
+ add edx,DWORD PTR [esp]
+ and eax,ebx
+ add edx,DWORD PTR 92[esp]
+ xor eax,edi
+ add ecx,edx
+ add edx,DWORD PTR 16[esp]
+ lea eax,DWORD PTR [ecx*1+eax]
+ mov esi,DWORD PTR 96[esp]
+ xor ebx,edi
+ mov ecx,DWORD PTR 12[esp]
+ add eax,DWORD PTR [esi]
+ add ebx,DWORD PTR 4[esi]
+ add edi,DWORD PTR 8[esi]
+ add ecx,DWORD PTR 12[esi]
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ mov DWORD PTR 8[esi],edi
+ mov DWORD PTR 12[esi],ecx
+ mov DWORD PTR 4[esp],ebx
+ xor ebx,edi
+ mov DWORD PTR 8[esp],edi
+ mov DWORD PTR 12[esp],ecx
+ mov edi,DWORD PTR 20[esp]
+ mov ecx,DWORD PTR 24[esp]
+ add edx,DWORD PTR 16[esi]
+ add edi,DWORD PTR 20[esi]
+ add ecx,DWORD PTR 24[esi]
+ mov DWORD PTR 16[esi],edx
+ mov DWORD PTR 20[esi],edi
+ mov DWORD PTR 20[esp],edi
+ mov edi,DWORD PTR 28[esp]
+ mov DWORD PTR 24[esi],ecx
+ add edi,DWORD PTR 28[esi]
+ mov DWORD PTR 24[esp],ecx
+ mov DWORD PTR 28[esi],edi
+ mov DWORD PTR 28[esp],edi
+ mov edi,DWORD PTR 100[esp]
+ vmovdqa xmm7,XMMWORD PTR 64[ebp]
+ sub ebp,192
+ cmp edi,DWORD PTR 104[esp]
+ jb $L017grand_avx_bmi
+ mov esp,DWORD PTR 108[esp]
+ vzeroall
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_sha256_block_data_order ENDP
+.text$ ENDS
+.bss SEGMENT 'BSS'
+COMM _OPENSSL_ia32cap_P:DWORD:4
+.bss ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/sha/sha256-mb-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/sha/sha256-mb-x86_64.masm
index 1b2421d10a..0200210c28 100644
--- a/contrib/libs/openssl/asm/windows/crypto/sha/sha256-mb-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/sha/sha256-mb-x86_64.masm
@@ -1,8260 +1,8260 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-
-PUBLIC sha256_multi_block
-
-ALIGN 32
-sha256_multi_block PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha256_multi_block::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- mov rcx,QWORD PTR[((OPENSSL_ia32cap_P+4))]
- bt rcx,61
- jc _shaext_shortcut
- test ecx,268435456
- jnz _avx_shortcut
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[(-120)+rax],xmm10
- movaps XMMWORD PTR[(-104)+rax],xmm11
- movaps XMMWORD PTR[(-88)+rax],xmm12
- movaps XMMWORD PTR[(-72)+rax],xmm13
- movaps XMMWORD PTR[(-56)+rax],xmm14
- movaps XMMWORD PTR[(-40)+rax],xmm15
- sub rsp,288
- and rsp,-256
- mov QWORD PTR[272+rsp],rax
-
-$L$body::
- lea rbp,QWORD PTR[((K256+128))]
- lea rbx,QWORD PTR[256+rsp]
- lea rdi,QWORD PTR[128+rdi]
-
-$L$oop_grande::
- mov DWORD PTR[280+rsp],edx
- xor edx,edx
- mov r8,QWORD PTR[rsi]
- mov ecx,DWORD PTR[8+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[rbx],ecx
- cmovle r8,rbp
- mov r9,QWORD PTR[16+rsi]
- mov ecx,DWORD PTR[24+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[4+rbx],ecx
- cmovle r9,rbp
- mov r10,QWORD PTR[32+rsi]
- mov ecx,DWORD PTR[40+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[8+rbx],ecx
- cmovle r10,rbp
- mov r11,QWORD PTR[48+rsi]
- mov ecx,DWORD PTR[56+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[12+rbx],ecx
- cmovle r11,rbp
- test edx,edx
- jz $L$done
-
- movdqu xmm8,XMMWORD PTR[((0-128))+rdi]
- lea rax,QWORD PTR[128+rsp]
- movdqu xmm9,XMMWORD PTR[((32-128))+rdi]
- movdqu xmm10,XMMWORD PTR[((64-128))+rdi]
- movdqu xmm11,XMMWORD PTR[((96-128))+rdi]
- movdqu xmm12,XMMWORD PTR[((128-128))+rdi]
- movdqu xmm13,XMMWORD PTR[((160-128))+rdi]
- movdqu xmm14,XMMWORD PTR[((192-128))+rdi]
- movdqu xmm15,XMMWORD PTR[((224-128))+rdi]
- movdqu xmm6,XMMWORD PTR[$L$pbswap]
- jmp $L$oop
-
-ALIGN 32
-$L$oop::
- movdqa xmm4,xmm10
- pxor xmm4,xmm9
- movd xmm5,DWORD PTR[r8]
- movd xmm0,DWORD PTR[r9]
- movd xmm1,DWORD PTR[r10]
- movd xmm2,DWORD PTR[r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm12
-DB 102,15,56,0,238
- movdqa xmm2,xmm12
-
- psrld xmm7,6
- movdqa xmm1,xmm12
- pslld xmm2,7
- movdqa XMMWORD PTR[(0-128)+rax],xmm5
- paddd xmm5,xmm15
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-128))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm12
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm12
- pslld xmm2,26-21
- pandn xmm0,xmm14
- pand xmm3,xmm13
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm8
- pxor xmm7,xmm2
- movdqa xmm2,xmm8
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm9
- movdqa xmm7,xmm8
- pslld xmm2,10
- pxor xmm3,xmm8
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm15,xmm9
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm15,xmm4
- paddd xmm11,xmm5
- pxor xmm7,xmm2
-
- paddd xmm15,xmm5
- paddd xmm15,xmm7
- movd xmm5,DWORD PTR[4+r8]
- movd xmm0,DWORD PTR[4+r9]
- movd xmm1,DWORD PTR[4+r10]
- movd xmm2,DWORD PTR[4+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm11
-
- movdqa xmm2,xmm11
-DB 102,15,56,0,238
- psrld xmm7,6
- movdqa xmm1,xmm11
- pslld xmm2,7
- movdqa XMMWORD PTR[(16-128)+rax],xmm5
- paddd xmm5,xmm14
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-96))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm11
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm11
- pslld xmm2,26-21
- pandn xmm0,xmm13
- pand xmm4,xmm12
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm15
- pxor xmm7,xmm2
- movdqa xmm2,xmm15
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm8
- movdqa xmm7,xmm15
- pslld xmm2,10
- pxor xmm4,xmm15
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm14,xmm8
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm14,xmm3
- paddd xmm10,xmm5
- pxor xmm7,xmm2
-
- paddd xmm14,xmm5
- paddd xmm14,xmm7
- movd xmm5,DWORD PTR[8+r8]
- movd xmm0,DWORD PTR[8+r9]
- movd xmm1,DWORD PTR[8+r10]
- movd xmm2,DWORD PTR[8+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm10
-DB 102,15,56,0,238
- movdqa xmm2,xmm10
-
- psrld xmm7,6
- movdqa xmm1,xmm10
- pslld xmm2,7
- movdqa XMMWORD PTR[(32-128)+rax],xmm5
- paddd xmm5,xmm13
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-64))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm10
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm10
- pslld xmm2,26-21
- pandn xmm0,xmm12
- pand xmm3,xmm11
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm14
- pxor xmm7,xmm2
- movdqa xmm2,xmm14
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm15
- movdqa xmm7,xmm14
- pslld xmm2,10
- pxor xmm3,xmm14
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm13,xmm15
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm13,xmm4
- paddd xmm9,xmm5
- pxor xmm7,xmm2
-
- paddd xmm13,xmm5
- paddd xmm13,xmm7
- movd xmm5,DWORD PTR[12+r8]
- movd xmm0,DWORD PTR[12+r9]
- movd xmm1,DWORD PTR[12+r10]
- movd xmm2,DWORD PTR[12+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm9
-
- movdqa xmm2,xmm9
-DB 102,15,56,0,238
- psrld xmm7,6
- movdqa xmm1,xmm9
- pslld xmm2,7
- movdqa XMMWORD PTR[(48-128)+rax],xmm5
- paddd xmm5,xmm12
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-32))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm9
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm9
- pslld xmm2,26-21
- pandn xmm0,xmm11
- pand xmm4,xmm10
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm13
- pxor xmm7,xmm2
- movdqa xmm2,xmm13
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm14
- movdqa xmm7,xmm13
- pslld xmm2,10
- pxor xmm4,xmm13
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm12,xmm14
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm12,xmm3
- paddd xmm8,xmm5
- pxor xmm7,xmm2
-
- paddd xmm12,xmm5
- paddd xmm12,xmm7
- movd xmm5,DWORD PTR[16+r8]
- movd xmm0,DWORD PTR[16+r9]
- movd xmm1,DWORD PTR[16+r10]
- movd xmm2,DWORD PTR[16+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm8
-DB 102,15,56,0,238
- movdqa xmm2,xmm8
-
- psrld xmm7,6
- movdqa xmm1,xmm8
- pslld xmm2,7
- movdqa XMMWORD PTR[(64-128)+rax],xmm5
- paddd xmm5,xmm11
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm8
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm8
- pslld xmm2,26-21
- pandn xmm0,xmm10
- pand xmm3,xmm9
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm12
- pxor xmm7,xmm2
- movdqa xmm2,xmm12
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm13
- movdqa xmm7,xmm12
- pslld xmm2,10
- pxor xmm3,xmm12
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm11,xmm13
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm11,xmm4
- paddd xmm15,xmm5
- pxor xmm7,xmm2
-
- paddd xmm11,xmm5
- paddd xmm11,xmm7
- movd xmm5,DWORD PTR[20+r8]
- movd xmm0,DWORD PTR[20+r9]
- movd xmm1,DWORD PTR[20+r10]
- movd xmm2,DWORD PTR[20+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm15
-
- movdqa xmm2,xmm15
-DB 102,15,56,0,238
- psrld xmm7,6
- movdqa xmm1,xmm15
- pslld xmm2,7
- movdqa XMMWORD PTR[(80-128)+rax],xmm5
- paddd xmm5,xmm10
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[32+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm15
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm15
- pslld xmm2,26-21
- pandn xmm0,xmm9
- pand xmm4,xmm8
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm11
- pxor xmm7,xmm2
- movdqa xmm2,xmm11
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm12
- movdqa xmm7,xmm11
- pslld xmm2,10
- pxor xmm4,xmm11
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm10,xmm12
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm10,xmm3
- paddd xmm14,xmm5
- pxor xmm7,xmm2
-
- paddd xmm10,xmm5
- paddd xmm10,xmm7
- movd xmm5,DWORD PTR[24+r8]
- movd xmm0,DWORD PTR[24+r9]
- movd xmm1,DWORD PTR[24+r10]
- movd xmm2,DWORD PTR[24+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm14
-DB 102,15,56,0,238
- movdqa xmm2,xmm14
-
- psrld xmm7,6
- movdqa xmm1,xmm14
- pslld xmm2,7
- movdqa XMMWORD PTR[(96-128)+rax],xmm5
- paddd xmm5,xmm9
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[64+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm14
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm14
- pslld xmm2,26-21
- pandn xmm0,xmm8
- pand xmm3,xmm15
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm10
- pxor xmm7,xmm2
- movdqa xmm2,xmm10
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm11
- movdqa xmm7,xmm10
- pslld xmm2,10
- pxor xmm3,xmm10
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm9,xmm11
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm9,xmm4
- paddd xmm13,xmm5
- pxor xmm7,xmm2
-
- paddd xmm9,xmm5
- paddd xmm9,xmm7
- movd xmm5,DWORD PTR[28+r8]
- movd xmm0,DWORD PTR[28+r9]
- movd xmm1,DWORD PTR[28+r10]
- movd xmm2,DWORD PTR[28+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm13
-
- movdqa xmm2,xmm13
-DB 102,15,56,0,238
- psrld xmm7,6
- movdqa xmm1,xmm13
- pslld xmm2,7
- movdqa XMMWORD PTR[(112-128)+rax],xmm5
- paddd xmm5,xmm8
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[96+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm13
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm13
- pslld xmm2,26-21
- pandn xmm0,xmm15
- pand xmm4,xmm14
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm9
- pxor xmm7,xmm2
- movdqa xmm2,xmm9
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm10
- movdqa xmm7,xmm9
- pslld xmm2,10
- pxor xmm4,xmm9
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm8,xmm10
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm8,xmm3
- paddd xmm12,xmm5
- pxor xmm7,xmm2
-
- paddd xmm8,xmm5
- paddd xmm8,xmm7
- lea rbp,QWORD PTR[256+rbp]
- movd xmm5,DWORD PTR[32+r8]
- movd xmm0,DWORD PTR[32+r9]
- movd xmm1,DWORD PTR[32+r10]
- movd xmm2,DWORD PTR[32+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm12
-DB 102,15,56,0,238
- movdqa xmm2,xmm12
-
- psrld xmm7,6
- movdqa xmm1,xmm12
- pslld xmm2,7
- movdqa XMMWORD PTR[(128-128)+rax],xmm5
- paddd xmm5,xmm15
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-128))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm12
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm12
- pslld xmm2,26-21
- pandn xmm0,xmm14
- pand xmm3,xmm13
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm8
- pxor xmm7,xmm2
- movdqa xmm2,xmm8
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm9
- movdqa xmm7,xmm8
- pslld xmm2,10
- pxor xmm3,xmm8
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm15,xmm9
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm15,xmm4
- paddd xmm11,xmm5
- pxor xmm7,xmm2
-
- paddd xmm15,xmm5
- paddd xmm15,xmm7
- movd xmm5,DWORD PTR[36+r8]
- movd xmm0,DWORD PTR[36+r9]
- movd xmm1,DWORD PTR[36+r10]
- movd xmm2,DWORD PTR[36+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm11
-
- movdqa xmm2,xmm11
-DB 102,15,56,0,238
- psrld xmm7,6
- movdqa xmm1,xmm11
- pslld xmm2,7
- movdqa XMMWORD PTR[(144-128)+rax],xmm5
- paddd xmm5,xmm14
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-96))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm11
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm11
- pslld xmm2,26-21
- pandn xmm0,xmm13
- pand xmm4,xmm12
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm15
- pxor xmm7,xmm2
- movdqa xmm2,xmm15
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm8
- movdqa xmm7,xmm15
- pslld xmm2,10
- pxor xmm4,xmm15
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm14,xmm8
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm14,xmm3
- paddd xmm10,xmm5
- pxor xmm7,xmm2
-
- paddd xmm14,xmm5
- paddd xmm14,xmm7
- movd xmm5,DWORD PTR[40+r8]
- movd xmm0,DWORD PTR[40+r9]
- movd xmm1,DWORD PTR[40+r10]
- movd xmm2,DWORD PTR[40+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm10
-DB 102,15,56,0,238
- movdqa xmm2,xmm10
-
- psrld xmm7,6
- movdqa xmm1,xmm10
- pslld xmm2,7
- movdqa XMMWORD PTR[(160-128)+rax],xmm5
- paddd xmm5,xmm13
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-64))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm10
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm10
- pslld xmm2,26-21
- pandn xmm0,xmm12
- pand xmm3,xmm11
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm14
- pxor xmm7,xmm2
- movdqa xmm2,xmm14
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm15
- movdqa xmm7,xmm14
- pslld xmm2,10
- pxor xmm3,xmm14
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm13,xmm15
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm13,xmm4
- paddd xmm9,xmm5
- pxor xmm7,xmm2
-
- paddd xmm13,xmm5
- paddd xmm13,xmm7
- movd xmm5,DWORD PTR[44+r8]
- movd xmm0,DWORD PTR[44+r9]
- movd xmm1,DWORD PTR[44+r10]
- movd xmm2,DWORD PTR[44+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm9
-
- movdqa xmm2,xmm9
-DB 102,15,56,0,238
- psrld xmm7,6
- movdqa xmm1,xmm9
- pslld xmm2,7
- movdqa XMMWORD PTR[(176-128)+rax],xmm5
- paddd xmm5,xmm12
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-32))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm9
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm9
- pslld xmm2,26-21
- pandn xmm0,xmm11
- pand xmm4,xmm10
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm13
- pxor xmm7,xmm2
- movdqa xmm2,xmm13
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm14
- movdqa xmm7,xmm13
- pslld xmm2,10
- pxor xmm4,xmm13
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm12,xmm14
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm12,xmm3
- paddd xmm8,xmm5
- pxor xmm7,xmm2
-
- paddd xmm12,xmm5
- paddd xmm12,xmm7
- movd xmm5,DWORD PTR[48+r8]
- movd xmm0,DWORD PTR[48+r9]
- movd xmm1,DWORD PTR[48+r10]
- movd xmm2,DWORD PTR[48+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm8
-DB 102,15,56,0,238
- movdqa xmm2,xmm8
-
- psrld xmm7,6
- movdqa xmm1,xmm8
- pslld xmm2,7
- movdqa XMMWORD PTR[(192-128)+rax],xmm5
- paddd xmm5,xmm11
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm8
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm8
- pslld xmm2,26-21
- pandn xmm0,xmm10
- pand xmm3,xmm9
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm12
- pxor xmm7,xmm2
- movdqa xmm2,xmm12
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm13
- movdqa xmm7,xmm12
- pslld xmm2,10
- pxor xmm3,xmm12
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm11,xmm13
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm11,xmm4
- paddd xmm15,xmm5
- pxor xmm7,xmm2
-
- paddd xmm11,xmm5
- paddd xmm11,xmm7
- movd xmm5,DWORD PTR[52+r8]
- movd xmm0,DWORD PTR[52+r9]
- movd xmm1,DWORD PTR[52+r10]
- movd xmm2,DWORD PTR[52+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm15
-
- movdqa xmm2,xmm15
-DB 102,15,56,0,238
- psrld xmm7,6
- movdqa xmm1,xmm15
- pslld xmm2,7
- movdqa XMMWORD PTR[(208-128)+rax],xmm5
- paddd xmm5,xmm10
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[32+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm15
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm15
- pslld xmm2,26-21
- pandn xmm0,xmm9
- pand xmm4,xmm8
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm11
- pxor xmm7,xmm2
- movdqa xmm2,xmm11
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm12
- movdqa xmm7,xmm11
- pslld xmm2,10
- pxor xmm4,xmm11
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm10,xmm12
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm10,xmm3
- paddd xmm14,xmm5
- pxor xmm7,xmm2
-
- paddd xmm10,xmm5
- paddd xmm10,xmm7
- movd xmm5,DWORD PTR[56+r8]
- movd xmm0,DWORD PTR[56+r9]
- movd xmm1,DWORD PTR[56+r10]
- movd xmm2,DWORD PTR[56+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm14
-DB 102,15,56,0,238
- movdqa xmm2,xmm14
-
- psrld xmm7,6
- movdqa xmm1,xmm14
- pslld xmm2,7
- movdqa XMMWORD PTR[(224-128)+rax],xmm5
- paddd xmm5,xmm9
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[64+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm14
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm14
- pslld xmm2,26-21
- pandn xmm0,xmm8
- pand xmm3,xmm15
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm10
- pxor xmm7,xmm2
- movdqa xmm2,xmm10
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm11
- movdqa xmm7,xmm10
- pslld xmm2,10
- pxor xmm3,xmm10
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm9,xmm11
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm9,xmm4
- paddd xmm13,xmm5
- pxor xmm7,xmm2
-
- paddd xmm9,xmm5
- paddd xmm9,xmm7
- movd xmm5,DWORD PTR[60+r8]
- lea r8,QWORD PTR[64+r8]
- movd xmm0,DWORD PTR[60+r9]
- lea r9,QWORD PTR[64+r9]
- movd xmm1,DWORD PTR[60+r10]
- lea r10,QWORD PTR[64+r10]
- movd xmm2,DWORD PTR[60+r11]
- lea r11,QWORD PTR[64+r11]
- punpckldq xmm5,xmm1
- punpckldq xmm0,xmm2
- punpckldq xmm5,xmm0
- movdqa xmm7,xmm13
-
- movdqa xmm2,xmm13
-DB 102,15,56,0,238
- psrld xmm7,6
- movdqa xmm1,xmm13
- pslld xmm2,7
- movdqa XMMWORD PTR[(240-128)+rax],xmm5
- paddd xmm5,xmm8
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[96+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm13
- prefetcht0 [63+r8]
- pxor xmm7,xmm2
- movdqa xmm4,xmm13
- pslld xmm2,26-21
- pandn xmm0,xmm15
- pand xmm4,xmm14
- pxor xmm7,xmm1
-
- prefetcht0 [63+r9]
- movdqa xmm1,xmm9
- pxor xmm7,xmm2
- movdqa xmm2,xmm9
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm10
- movdqa xmm7,xmm9
- pslld xmm2,10
- pxor xmm4,xmm9
-
- prefetcht0 [63+r10]
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
- prefetcht0 [63+r11]
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm8,xmm10
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm8,xmm3
- paddd xmm12,xmm5
- pxor xmm7,xmm2
-
- paddd xmm8,xmm5
- paddd xmm8,xmm7
- lea rbp,QWORD PTR[256+rbp]
- movdqu xmm5,XMMWORD PTR[((0-128))+rax]
- mov ecx,3
- jmp $L$oop_16_xx
-ALIGN 32
-$L$oop_16_xx::
- movdqa xmm6,XMMWORD PTR[((16-128))+rax]
- paddd xmm5,XMMWORD PTR[((144-128))+rax]
-
- movdqa xmm7,xmm6
- movdqa xmm1,xmm6
- psrld xmm7,3
- movdqa xmm2,xmm6
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((224-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm3,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm3
-
- psrld xmm3,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- psrld xmm3,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm3
- pxor xmm0,xmm1
- paddd xmm5,xmm0
- movdqa xmm7,xmm12
-
- movdqa xmm2,xmm12
-
- psrld xmm7,6
- movdqa xmm1,xmm12
- pslld xmm2,7
- movdqa XMMWORD PTR[(0-128)+rax],xmm5
- paddd xmm5,xmm15
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-128))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm12
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm12
- pslld xmm2,26-21
- pandn xmm0,xmm14
- pand xmm3,xmm13
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm8
- pxor xmm7,xmm2
- movdqa xmm2,xmm8
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm9
- movdqa xmm7,xmm8
- pslld xmm2,10
- pxor xmm3,xmm8
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm15,xmm9
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm15,xmm4
- paddd xmm11,xmm5
- pxor xmm7,xmm2
-
- paddd xmm15,xmm5
- paddd xmm15,xmm7
- movdqa xmm5,XMMWORD PTR[((32-128))+rax]
- paddd xmm6,XMMWORD PTR[((160-128))+rax]
-
- movdqa xmm7,xmm5
- movdqa xmm1,xmm5
- psrld xmm7,3
- movdqa xmm2,xmm5
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((240-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm4,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm4
-
- psrld xmm4,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- psrld xmm4,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm4
- pxor xmm0,xmm1
- paddd xmm6,xmm0
- movdqa xmm7,xmm11
-
- movdqa xmm2,xmm11
-
- psrld xmm7,6
- movdqa xmm1,xmm11
- pslld xmm2,7
- movdqa XMMWORD PTR[(16-128)+rax],xmm6
- paddd xmm6,xmm14
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm6,XMMWORD PTR[((-96))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm11
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm11
- pslld xmm2,26-21
- pandn xmm0,xmm13
- pand xmm4,xmm12
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm15
- pxor xmm7,xmm2
- movdqa xmm2,xmm15
- psrld xmm1,2
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm8
- movdqa xmm7,xmm15
- pslld xmm2,10
- pxor xmm4,xmm15
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm6,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm14,xmm8
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm14,xmm3
- paddd xmm10,xmm6
- pxor xmm7,xmm2
-
- paddd xmm14,xmm6
- paddd xmm14,xmm7
- movdqa xmm6,XMMWORD PTR[((48-128))+rax]
- paddd xmm5,XMMWORD PTR[((176-128))+rax]
-
- movdqa xmm7,xmm6
- movdqa xmm1,xmm6
- psrld xmm7,3
- movdqa xmm2,xmm6
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((0-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm3,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm3
-
- psrld xmm3,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- psrld xmm3,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm3
- pxor xmm0,xmm1
- paddd xmm5,xmm0
- movdqa xmm7,xmm10
-
- movdqa xmm2,xmm10
-
- psrld xmm7,6
- movdqa xmm1,xmm10
- pslld xmm2,7
- movdqa XMMWORD PTR[(32-128)+rax],xmm5
- paddd xmm5,xmm13
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-64))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm10
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm10
- pslld xmm2,26-21
- pandn xmm0,xmm12
- pand xmm3,xmm11
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm14
- pxor xmm7,xmm2
- movdqa xmm2,xmm14
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm15
- movdqa xmm7,xmm14
- pslld xmm2,10
- pxor xmm3,xmm14
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm13,xmm15
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm13,xmm4
- paddd xmm9,xmm5
- pxor xmm7,xmm2
-
- paddd xmm13,xmm5
- paddd xmm13,xmm7
- movdqa xmm5,XMMWORD PTR[((64-128))+rax]
- paddd xmm6,XMMWORD PTR[((192-128))+rax]
-
- movdqa xmm7,xmm5
- movdqa xmm1,xmm5
- psrld xmm7,3
- movdqa xmm2,xmm5
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((16-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm4,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm4
-
- psrld xmm4,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- psrld xmm4,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm4
- pxor xmm0,xmm1
- paddd xmm6,xmm0
- movdqa xmm7,xmm9
-
- movdqa xmm2,xmm9
-
- psrld xmm7,6
- movdqa xmm1,xmm9
- pslld xmm2,7
- movdqa XMMWORD PTR[(48-128)+rax],xmm6
- paddd xmm6,xmm12
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm6,XMMWORD PTR[((-32))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm9
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm9
- pslld xmm2,26-21
- pandn xmm0,xmm11
- pand xmm4,xmm10
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm13
- pxor xmm7,xmm2
- movdqa xmm2,xmm13
- psrld xmm1,2
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm14
- movdqa xmm7,xmm13
- pslld xmm2,10
- pxor xmm4,xmm13
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm6,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm12,xmm14
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm12,xmm3
- paddd xmm8,xmm6
- pxor xmm7,xmm2
-
- paddd xmm12,xmm6
- paddd xmm12,xmm7
- movdqa xmm6,XMMWORD PTR[((80-128))+rax]
- paddd xmm5,XMMWORD PTR[((208-128))+rax]
-
- movdqa xmm7,xmm6
- movdqa xmm1,xmm6
- psrld xmm7,3
- movdqa xmm2,xmm6
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((32-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm3,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm3
-
- psrld xmm3,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- psrld xmm3,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm3
- pxor xmm0,xmm1
- paddd xmm5,xmm0
- movdqa xmm7,xmm8
-
- movdqa xmm2,xmm8
-
- psrld xmm7,6
- movdqa xmm1,xmm8
- pslld xmm2,7
- movdqa XMMWORD PTR[(64-128)+rax],xmm5
- paddd xmm5,xmm11
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm8
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm8
- pslld xmm2,26-21
- pandn xmm0,xmm10
- pand xmm3,xmm9
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm12
- pxor xmm7,xmm2
- movdqa xmm2,xmm12
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm13
- movdqa xmm7,xmm12
- pslld xmm2,10
- pxor xmm3,xmm12
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm11,xmm13
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm11,xmm4
- paddd xmm15,xmm5
- pxor xmm7,xmm2
-
- paddd xmm11,xmm5
- paddd xmm11,xmm7
- movdqa xmm5,XMMWORD PTR[((96-128))+rax]
- paddd xmm6,XMMWORD PTR[((224-128))+rax]
-
- movdqa xmm7,xmm5
- movdqa xmm1,xmm5
- psrld xmm7,3
- movdqa xmm2,xmm5
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((48-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm4,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm4
-
- psrld xmm4,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- psrld xmm4,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm4
- pxor xmm0,xmm1
- paddd xmm6,xmm0
- movdqa xmm7,xmm15
-
- movdqa xmm2,xmm15
-
- psrld xmm7,6
- movdqa xmm1,xmm15
- pslld xmm2,7
- movdqa XMMWORD PTR[(80-128)+rax],xmm6
- paddd xmm6,xmm10
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm6,XMMWORD PTR[32+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm15
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm15
- pslld xmm2,26-21
- pandn xmm0,xmm9
- pand xmm4,xmm8
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm11
- pxor xmm7,xmm2
- movdqa xmm2,xmm11
- psrld xmm1,2
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm12
- movdqa xmm7,xmm11
- pslld xmm2,10
- pxor xmm4,xmm11
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm6,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm10,xmm12
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm10,xmm3
- paddd xmm14,xmm6
- pxor xmm7,xmm2
-
- paddd xmm10,xmm6
- paddd xmm10,xmm7
- movdqa xmm6,XMMWORD PTR[((112-128))+rax]
- paddd xmm5,XMMWORD PTR[((240-128))+rax]
-
- movdqa xmm7,xmm6
- movdqa xmm1,xmm6
- psrld xmm7,3
- movdqa xmm2,xmm6
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((64-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm3,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm3
-
- psrld xmm3,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- psrld xmm3,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm3
- pxor xmm0,xmm1
- paddd xmm5,xmm0
- movdqa xmm7,xmm14
-
- movdqa xmm2,xmm14
-
- psrld xmm7,6
- movdqa xmm1,xmm14
- pslld xmm2,7
- movdqa XMMWORD PTR[(96-128)+rax],xmm5
- paddd xmm5,xmm9
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[64+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm14
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm14
- pslld xmm2,26-21
- pandn xmm0,xmm8
- pand xmm3,xmm15
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm10
- pxor xmm7,xmm2
- movdqa xmm2,xmm10
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm11
- movdqa xmm7,xmm10
- pslld xmm2,10
- pxor xmm3,xmm10
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm9,xmm11
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm9,xmm4
- paddd xmm13,xmm5
- pxor xmm7,xmm2
-
- paddd xmm9,xmm5
- paddd xmm9,xmm7
- movdqa xmm5,XMMWORD PTR[((128-128))+rax]
- paddd xmm6,XMMWORD PTR[((0-128))+rax]
-
- movdqa xmm7,xmm5
- movdqa xmm1,xmm5
- psrld xmm7,3
- movdqa xmm2,xmm5
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((80-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm4,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm4
-
- psrld xmm4,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- psrld xmm4,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm4
- pxor xmm0,xmm1
- paddd xmm6,xmm0
- movdqa xmm7,xmm13
-
- movdqa xmm2,xmm13
-
- psrld xmm7,6
- movdqa xmm1,xmm13
- pslld xmm2,7
- movdqa XMMWORD PTR[(112-128)+rax],xmm6
- paddd xmm6,xmm8
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm6,XMMWORD PTR[96+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm13
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm13
- pslld xmm2,26-21
- pandn xmm0,xmm15
- pand xmm4,xmm14
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm9
- pxor xmm7,xmm2
- movdqa xmm2,xmm9
- psrld xmm1,2
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm10
- movdqa xmm7,xmm9
- pslld xmm2,10
- pxor xmm4,xmm9
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm6,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm8,xmm10
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm8,xmm3
- paddd xmm12,xmm6
- pxor xmm7,xmm2
-
- paddd xmm8,xmm6
- paddd xmm8,xmm7
- lea rbp,QWORD PTR[256+rbp]
- movdqa xmm6,XMMWORD PTR[((144-128))+rax]
- paddd xmm5,XMMWORD PTR[((16-128))+rax]
-
- movdqa xmm7,xmm6
- movdqa xmm1,xmm6
- psrld xmm7,3
- movdqa xmm2,xmm6
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((96-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm3,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm3
-
- psrld xmm3,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- psrld xmm3,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm3
- pxor xmm0,xmm1
- paddd xmm5,xmm0
- movdqa xmm7,xmm12
-
- movdqa xmm2,xmm12
-
- psrld xmm7,6
- movdqa xmm1,xmm12
- pslld xmm2,7
- movdqa XMMWORD PTR[(128-128)+rax],xmm5
- paddd xmm5,xmm15
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-128))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm12
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm12
- pslld xmm2,26-21
- pandn xmm0,xmm14
- pand xmm3,xmm13
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm8
- pxor xmm7,xmm2
- movdqa xmm2,xmm8
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm9
- movdqa xmm7,xmm8
- pslld xmm2,10
- pxor xmm3,xmm8
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm15,xmm9
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm15,xmm4
- paddd xmm11,xmm5
- pxor xmm7,xmm2
-
- paddd xmm15,xmm5
- paddd xmm15,xmm7
- movdqa xmm5,XMMWORD PTR[((160-128))+rax]
- paddd xmm6,XMMWORD PTR[((32-128))+rax]
-
- movdqa xmm7,xmm5
- movdqa xmm1,xmm5
- psrld xmm7,3
- movdqa xmm2,xmm5
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((112-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm4,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm4
-
- psrld xmm4,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- psrld xmm4,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm4
- pxor xmm0,xmm1
- paddd xmm6,xmm0
- movdqa xmm7,xmm11
-
- movdqa xmm2,xmm11
-
- psrld xmm7,6
- movdqa xmm1,xmm11
- pslld xmm2,7
- movdqa XMMWORD PTR[(144-128)+rax],xmm6
- paddd xmm6,xmm14
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm6,XMMWORD PTR[((-96))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm11
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm11
- pslld xmm2,26-21
- pandn xmm0,xmm13
- pand xmm4,xmm12
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm15
- pxor xmm7,xmm2
- movdqa xmm2,xmm15
- psrld xmm1,2
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm8
- movdqa xmm7,xmm15
- pslld xmm2,10
- pxor xmm4,xmm15
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm6,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm14,xmm8
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm14,xmm3
- paddd xmm10,xmm6
- pxor xmm7,xmm2
-
- paddd xmm14,xmm6
- paddd xmm14,xmm7
- movdqa xmm6,XMMWORD PTR[((176-128))+rax]
- paddd xmm5,XMMWORD PTR[((48-128))+rax]
-
- movdqa xmm7,xmm6
- movdqa xmm1,xmm6
- psrld xmm7,3
- movdqa xmm2,xmm6
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((128-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm3,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm3
-
- psrld xmm3,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- psrld xmm3,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm3
- pxor xmm0,xmm1
- paddd xmm5,xmm0
- movdqa xmm7,xmm10
-
- movdqa xmm2,xmm10
-
- psrld xmm7,6
- movdqa xmm1,xmm10
- pslld xmm2,7
- movdqa XMMWORD PTR[(160-128)+rax],xmm5
- paddd xmm5,xmm13
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[((-64))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm10
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm10
- pslld xmm2,26-21
- pandn xmm0,xmm12
- pand xmm3,xmm11
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm14
- pxor xmm7,xmm2
- movdqa xmm2,xmm14
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm15
- movdqa xmm7,xmm14
- pslld xmm2,10
- pxor xmm3,xmm14
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm13,xmm15
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm13,xmm4
- paddd xmm9,xmm5
- pxor xmm7,xmm2
-
- paddd xmm13,xmm5
- paddd xmm13,xmm7
- movdqa xmm5,XMMWORD PTR[((192-128))+rax]
- paddd xmm6,XMMWORD PTR[((64-128))+rax]
-
- movdqa xmm7,xmm5
- movdqa xmm1,xmm5
- psrld xmm7,3
- movdqa xmm2,xmm5
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((144-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm4,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm4
-
- psrld xmm4,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- psrld xmm4,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm4
- pxor xmm0,xmm1
- paddd xmm6,xmm0
- movdqa xmm7,xmm9
-
- movdqa xmm2,xmm9
-
- psrld xmm7,6
- movdqa xmm1,xmm9
- pslld xmm2,7
- movdqa XMMWORD PTR[(176-128)+rax],xmm6
- paddd xmm6,xmm12
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm6,XMMWORD PTR[((-32))+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm9
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm9
- pslld xmm2,26-21
- pandn xmm0,xmm11
- pand xmm4,xmm10
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm13
- pxor xmm7,xmm2
- movdqa xmm2,xmm13
- psrld xmm1,2
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm14
- movdqa xmm7,xmm13
- pslld xmm2,10
- pxor xmm4,xmm13
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm6,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm12,xmm14
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm12,xmm3
- paddd xmm8,xmm6
- pxor xmm7,xmm2
-
- paddd xmm12,xmm6
- paddd xmm12,xmm7
- movdqa xmm6,XMMWORD PTR[((208-128))+rax]
- paddd xmm5,XMMWORD PTR[((80-128))+rax]
-
- movdqa xmm7,xmm6
- movdqa xmm1,xmm6
- psrld xmm7,3
- movdqa xmm2,xmm6
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((160-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm3,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm3
-
- psrld xmm3,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- psrld xmm3,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm3
- pxor xmm0,xmm1
- paddd xmm5,xmm0
- movdqa xmm7,xmm8
-
- movdqa xmm2,xmm8
-
- psrld xmm7,6
- movdqa xmm1,xmm8
- pslld xmm2,7
- movdqa XMMWORD PTR[(192-128)+rax],xmm5
- paddd xmm5,xmm11
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm8
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm8
- pslld xmm2,26-21
- pandn xmm0,xmm10
- pand xmm3,xmm9
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm12
- pxor xmm7,xmm2
- movdqa xmm2,xmm12
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm13
- movdqa xmm7,xmm12
- pslld xmm2,10
- pxor xmm3,xmm12
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm11,xmm13
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm11,xmm4
- paddd xmm15,xmm5
- pxor xmm7,xmm2
-
- paddd xmm11,xmm5
- paddd xmm11,xmm7
- movdqa xmm5,XMMWORD PTR[((224-128))+rax]
- paddd xmm6,XMMWORD PTR[((96-128))+rax]
-
- movdqa xmm7,xmm5
- movdqa xmm1,xmm5
- psrld xmm7,3
- movdqa xmm2,xmm5
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((176-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm4,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm4
-
- psrld xmm4,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- psrld xmm4,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm4
- pxor xmm0,xmm1
- paddd xmm6,xmm0
- movdqa xmm7,xmm15
-
- movdqa xmm2,xmm15
-
- psrld xmm7,6
- movdqa xmm1,xmm15
- pslld xmm2,7
- movdqa XMMWORD PTR[(208-128)+rax],xmm6
- paddd xmm6,xmm10
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm6,XMMWORD PTR[32+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm15
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm15
- pslld xmm2,26-21
- pandn xmm0,xmm9
- pand xmm4,xmm8
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm11
- pxor xmm7,xmm2
- movdqa xmm2,xmm11
- psrld xmm1,2
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm12
- movdqa xmm7,xmm11
- pslld xmm2,10
- pxor xmm4,xmm11
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm6,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm10,xmm12
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm10,xmm3
- paddd xmm14,xmm6
- pxor xmm7,xmm2
-
- paddd xmm10,xmm6
- paddd xmm10,xmm7
- movdqa xmm6,XMMWORD PTR[((240-128))+rax]
- paddd xmm5,XMMWORD PTR[((112-128))+rax]
-
- movdqa xmm7,xmm6
- movdqa xmm1,xmm6
- psrld xmm7,3
- movdqa xmm2,xmm6
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((192-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm3,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm3
-
- psrld xmm3,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- psrld xmm3,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm3
- pxor xmm0,xmm1
- paddd xmm5,xmm0
- movdqa xmm7,xmm14
-
- movdqa xmm2,xmm14
-
- psrld xmm7,6
- movdqa xmm1,xmm14
- pslld xmm2,7
- movdqa XMMWORD PTR[(224-128)+rax],xmm5
- paddd xmm5,xmm9
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm5,XMMWORD PTR[64+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm14
-
- pxor xmm7,xmm2
- movdqa xmm3,xmm14
- pslld xmm2,26-21
- pandn xmm0,xmm8
- pand xmm3,xmm15
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm10
- pxor xmm7,xmm2
- movdqa xmm2,xmm10
- psrld xmm1,2
- paddd xmm5,xmm7
- pxor xmm0,xmm3
- movdqa xmm3,xmm11
- movdqa xmm7,xmm10
- pslld xmm2,10
- pxor xmm3,xmm10
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm5,xmm0
- pslld xmm2,19-10
- pand xmm4,xmm3
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm9,xmm11
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm9,xmm4
- paddd xmm13,xmm5
- pxor xmm7,xmm2
-
- paddd xmm9,xmm5
- paddd xmm9,xmm7
- movdqa xmm5,XMMWORD PTR[((0-128))+rax]
- paddd xmm6,XMMWORD PTR[((128-128))+rax]
-
- movdqa xmm7,xmm5
- movdqa xmm1,xmm5
- psrld xmm7,3
- movdqa xmm2,xmm5
-
- psrld xmm1,7
- movdqa xmm0,XMMWORD PTR[((208-128))+rax]
- pslld xmm2,14
- pxor xmm7,xmm1
- psrld xmm1,18-7
- movdqa xmm4,xmm0
- pxor xmm7,xmm2
- pslld xmm2,25-14
- pxor xmm7,xmm1
- psrld xmm0,10
- movdqa xmm1,xmm4
-
- psrld xmm4,17
- pxor xmm7,xmm2
- pslld xmm1,13
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- psrld xmm4,19-17
- pxor xmm0,xmm1
- pslld xmm1,15-13
- pxor xmm0,xmm4
- pxor xmm0,xmm1
- paddd xmm6,xmm0
- movdqa xmm7,xmm13
-
- movdqa xmm2,xmm13
-
- psrld xmm7,6
- movdqa xmm1,xmm13
- pslld xmm2,7
- movdqa XMMWORD PTR[(240-128)+rax],xmm6
- paddd xmm6,xmm8
-
- psrld xmm1,11
- pxor xmm7,xmm2
- pslld xmm2,21-7
- paddd xmm6,XMMWORD PTR[96+rbp]
- pxor xmm7,xmm1
-
- psrld xmm1,25-11
- movdqa xmm0,xmm13
-
- pxor xmm7,xmm2
- movdqa xmm4,xmm13
- pslld xmm2,26-21
- pandn xmm0,xmm15
- pand xmm4,xmm14
- pxor xmm7,xmm1
-
-
- movdqa xmm1,xmm9
- pxor xmm7,xmm2
- movdqa xmm2,xmm9
- psrld xmm1,2
- paddd xmm6,xmm7
- pxor xmm0,xmm4
- movdqa xmm4,xmm10
- movdqa xmm7,xmm9
- pslld xmm2,10
- pxor xmm4,xmm9
-
-
- psrld xmm7,13
- pxor xmm1,xmm2
- paddd xmm6,xmm0
- pslld xmm2,19-10
- pand xmm3,xmm4
- pxor xmm1,xmm7
-
-
- psrld xmm7,22-13
- pxor xmm1,xmm2
- movdqa xmm8,xmm10
- pslld xmm2,30-19
- pxor xmm7,xmm1
- pxor xmm8,xmm3
- paddd xmm12,xmm6
- pxor xmm7,xmm2
-
- paddd xmm8,xmm6
- paddd xmm8,xmm7
- lea rbp,QWORD PTR[256+rbp]
- dec ecx
- jnz $L$oop_16_xx
-
- mov ecx,1
- lea rbp,QWORD PTR[((K256+128))]
-
- movdqa xmm7,XMMWORD PTR[rbx]
- cmp ecx,DWORD PTR[rbx]
- pxor xmm0,xmm0
- cmovge r8,rbp
- cmp ecx,DWORD PTR[4+rbx]
- movdqa xmm6,xmm7
- cmovge r9,rbp
- cmp ecx,DWORD PTR[8+rbx]
- pcmpgtd xmm6,xmm0
- cmovge r10,rbp
- cmp ecx,DWORD PTR[12+rbx]
- paddd xmm7,xmm6
- cmovge r11,rbp
-
- movdqu xmm0,XMMWORD PTR[((0-128))+rdi]
- pand xmm8,xmm6
- movdqu xmm1,XMMWORD PTR[((32-128))+rdi]
- pand xmm9,xmm6
- movdqu xmm2,XMMWORD PTR[((64-128))+rdi]
- pand xmm10,xmm6
- movdqu xmm5,XMMWORD PTR[((96-128))+rdi]
- pand xmm11,xmm6
- paddd xmm8,xmm0
- movdqu xmm0,XMMWORD PTR[((128-128))+rdi]
- pand xmm12,xmm6
- paddd xmm9,xmm1
- movdqu xmm1,XMMWORD PTR[((160-128))+rdi]
- pand xmm13,xmm6
- paddd xmm10,xmm2
- movdqu xmm2,XMMWORD PTR[((192-128))+rdi]
- pand xmm14,xmm6
- paddd xmm11,xmm5
- movdqu xmm5,XMMWORD PTR[((224-128))+rdi]
- pand xmm15,xmm6
- paddd xmm12,xmm0
- paddd xmm13,xmm1
- movdqu XMMWORD PTR[(0-128)+rdi],xmm8
- paddd xmm14,xmm2
- movdqu XMMWORD PTR[(32-128)+rdi],xmm9
- paddd xmm15,xmm5
- movdqu XMMWORD PTR[(64-128)+rdi],xmm10
- movdqu XMMWORD PTR[(96-128)+rdi],xmm11
- movdqu XMMWORD PTR[(128-128)+rdi],xmm12
- movdqu XMMWORD PTR[(160-128)+rdi],xmm13
- movdqu XMMWORD PTR[(192-128)+rdi],xmm14
- movdqu XMMWORD PTR[(224-128)+rdi],xmm15
-
- movdqa XMMWORD PTR[rbx],xmm7
- movdqa xmm6,XMMWORD PTR[$L$pbswap]
- dec edx
- jnz $L$oop
-
- mov edx,DWORD PTR[280+rsp]
- lea rdi,QWORD PTR[16+rdi]
- lea rsi,QWORD PTR[64+rsi]
- dec edx
- jnz $L$oop_grande
-
-$L$done::
- mov rax,QWORD PTR[272+rsp]
-
- movaps xmm6,XMMWORD PTR[((-184))+rax]
- movaps xmm7,XMMWORD PTR[((-168))+rax]
- movaps xmm8,XMMWORD PTR[((-152))+rax]
- movaps xmm9,XMMWORD PTR[((-136))+rax]
- movaps xmm10,XMMWORD PTR[((-120))+rax]
- movaps xmm11,XMMWORD PTR[((-104))+rax]
- movaps xmm12,XMMWORD PTR[((-88))+rax]
- movaps xmm13,XMMWORD PTR[((-72))+rax]
- movaps xmm14,XMMWORD PTR[((-56))+rax]
- movaps xmm15,XMMWORD PTR[((-40))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha256_multi_block::
-sha256_multi_block ENDP
-
-ALIGN 32
-sha256_multi_block_shaext PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha256_multi_block_shaext::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-_shaext_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[(-120)+rax],xmm10
- movaps XMMWORD PTR[(-104)+rax],xmm11
- movaps XMMWORD PTR[(-88)+rax],xmm12
- movaps XMMWORD PTR[(-72)+rax],xmm13
- movaps XMMWORD PTR[(-56)+rax],xmm14
- movaps XMMWORD PTR[(-40)+rax],xmm15
- sub rsp,288
- shl edx,1
- and rsp,-256
- lea rdi,QWORD PTR[128+rdi]
- mov QWORD PTR[272+rsp],rax
-$L$body_shaext::
- lea rbx,QWORD PTR[256+rsp]
- lea rbp,QWORD PTR[((K256_shaext+128))]
-
-$L$oop_grande_shaext::
- mov DWORD PTR[280+rsp],edx
- xor edx,edx
- mov r8,QWORD PTR[rsi]
- mov ecx,DWORD PTR[8+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[rbx],ecx
- cmovle r8,rsp
- mov r9,QWORD PTR[16+rsi]
- mov ecx,DWORD PTR[24+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[4+rbx],ecx
- cmovle r9,rsp
- test edx,edx
- jz $L$done_shaext
-
- movq xmm12,QWORD PTR[((0-128))+rdi]
- movq xmm4,QWORD PTR[((32-128))+rdi]
- movq xmm13,QWORD PTR[((64-128))+rdi]
- movq xmm5,QWORD PTR[((96-128))+rdi]
- movq xmm8,QWORD PTR[((128-128))+rdi]
- movq xmm9,QWORD PTR[((160-128))+rdi]
- movq xmm10,QWORD PTR[((192-128))+rdi]
- movq xmm11,QWORD PTR[((224-128))+rdi]
-
- punpckldq xmm12,xmm4
- punpckldq xmm13,xmm5
- punpckldq xmm8,xmm9
- punpckldq xmm10,xmm11
- movdqa xmm3,XMMWORD PTR[((K256_shaext-16))]
-
- movdqa xmm14,xmm12
- movdqa xmm15,xmm13
- punpcklqdq xmm12,xmm8
- punpcklqdq xmm13,xmm10
- punpckhqdq xmm14,xmm8
- punpckhqdq xmm15,xmm10
-
- pshufd xmm12,xmm12,27
- pshufd xmm13,xmm13,27
- pshufd xmm14,xmm14,27
- pshufd xmm15,xmm15,27
- jmp $L$oop_shaext
-
-ALIGN 32
-$L$oop_shaext::
- movdqu xmm4,XMMWORD PTR[r8]
- movdqu xmm8,XMMWORD PTR[r9]
- movdqu xmm5,XMMWORD PTR[16+r8]
- movdqu xmm9,XMMWORD PTR[16+r9]
- movdqu xmm6,XMMWORD PTR[32+r8]
-DB 102,15,56,0,227
- movdqu xmm10,XMMWORD PTR[32+r9]
-DB 102,68,15,56,0,195
- movdqu xmm7,XMMWORD PTR[48+r8]
- lea r8,QWORD PTR[64+r8]
- movdqu xmm11,XMMWORD PTR[48+r9]
- lea r9,QWORD PTR[64+r9]
-
- movdqa xmm0,XMMWORD PTR[((0-128))+rbp]
-DB 102,15,56,0,235
- paddd xmm0,xmm4
- pxor xmm4,xmm12
- movdqa xmm1,xmm0
- movdqa xmm2,XMMWORD PTR[((0-128))+rbp]
-DB 102,68,15,56,0,203
- paddd xmm2,xmm8
- movdqa XMMWORD PTR[80+rsp],xmm13
-DB 69,15,56,203,236
- pxor xmm8,xmm14
- movdqa xmm0,xmm2
- movdqa XMMWORD PTR[112+rsp],xmm15
-DB 69,15,56,203,254
- pshufd xmm0,xmm1,00eh
- pxor xmm4,xmm12
- movdqa XMMWORD PTR[64+rsp],xmm12
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- pxor xmm8,xmm14
- movdqa XMMWORD PTR[96+rsp],xmm14
- movdqa xmm1,XMMWORD PTR[((16-128))+rbp]
- paddd xmm1,xmm5
-DB 102,15,56,0,243
-DB 69,15,56,203,247
-
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((16-128))+rbp]
- paddd xmm2,xmm9
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- prefetcht0 [127+r8]
-DB 102,15,56,0,251
-DB 102,68,15,56,0,211
- prefetcht0 [127+r9]
-DB 69,15,56,203,254
- pshufd xmm0,xmm1,00eh
-DB 102,68,15,56,0,219
-DB 15,56,204,229
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((32-128))+rbp]
- paddd xmm1,xmm6
-DB 69,15,56,203,247
-
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((32-128))+rbp]
- paddd xmm2,xmm10
-DB 69,15,56,203,236
-DB 69,15,56,204,193
- movdqa xmm0,xmm2
- movdqa xmm3,xmm7
-DB 69,15,56,203,254
- pshufd xmm0,xmm1,00eh
-DB 102,15,58,15,222,4
- paddd xmm4,xmm3
- movdqa xmm3,xmm11
-DB 102,65,15,58,15,218,4
-DB 15,56,204,238
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((48-128))+rbp]
- paddd xmm1,xmm7
-DB 69,15,56,203,247
-DB 69,15,56,204,202
-
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((48-128))+rbp]
- paddd xmm8,xmm3
- paddd xmm2,xmm11
-DB 15,56,205,231
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm4
-DB 102,15,58,15,223,4
-DB 69,15,56,203,254
-DB 69,15,56,205,195
- pshufd xmm0,xmm1,00eh
- paddd xmm5,xmm3
- movdqa xmm3,xmm8
-DB 102,65,15,58,15,219,4
-DB 15,56,204,247
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((64-128))+rbp]
- paddd xmm1,xmm4
-DB 69,15,56,203,247
-DB 69,15,56,204,211
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((64-128))+rbp]
- paddd xmm9,xmm3
- paddd xmm2,xmm8
-DB 15,56,205,236
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm5
-DB 102,15,58,15,220,4
-DB 69,15,56,203,254
-DB 69,15,56,205,200
- pshufd xmm0,xmm1,00eh
- paddd xmm6,xmm3
- movdqa xmm3,xmm9
-DB 102,65,15,58,15,216,4
-DB 15,56,204,252
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((80-128))+rbp]
- paddd xmm1,xmm5
-DB 69,15,56,203,247
-DB 69,15,56,204,216
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((80-128))+rbp]
- paddd xmm10,xmm3
- paddd xmm2,xmm9
-DB 15,56,205,245
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm6
-DB 102,15,58,15,221,4
-DB 69,15,56,203,254
-DB 69,15,56,205,209
- pshufd xmm0,xmm1,00eh
- paddd xmm7,xmm3
- movdqa xmm3,xmm10
-DB 102,65,15,58,15,217,4
-DB 15,56,204,229
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((96-128))+rbp]
- paddd xmm1,xmm6
-DB 69,15,56,203,247
-DB 69,15,56,204,193
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((96-128))+rbp]
- paddd xmm11,xmm3
- paddd xmm2,xmm10
-DB 15,56,205,254
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm7
-DB 102,15,58,15,222,4
-DB 69,15,56,203,254
-DB 69,15,56,205,218
- pshufd xmm0,xmm1,00eh
- paddd xmm4,xmm3
- movdqa xmm3,xmm11
-DB 102,65,15,58,15,218,4
-DB 15,56,204,238
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((112-128))+rbp]
- paddd xmm1,xmm7
-DB 69,15,56,203,247
-DB 69,15,56,204,202
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((112-128))+rbp]
- paddd xmm8,xmm3
- paddd xmm2,xmm11
-DB 15,56,205,231
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm4
-DB 102,15,58,15,223,4
-DB 69,15,56,203,254
-DB 69,15,56,205,195
- pshufd xmm0,xmm1,00eh
- paddd xmm5,xmm3
- movdqa xmm3,xmm8
-DB 102,65,15,58,15,219,4
-DB 15,56,204,247
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((128-128))+rbp]
- paddd xmm1,xmm4
-DB 69,15,56,203,247
-DB 69,15,56,204,211
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((128-128))+rbp]
- paddd xmm9,xmm3
- paddd xmm2,xmm8
-DB 15,56,205,236
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm5
-DB 102,15,58,15,220,4
-DB 69,15,56,203,254
-DB 69,15,56,205,200
- pshufd xmm0,xmm1,00eh
- paddd xmm6,xmm3
- movdqa xmm3,xmm9
-DB 102,65,15,58,15,216,4
-DB 15,56,204,252
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((144-128))+rbp]
- paddd xmm1,xmm5
-DB 69,15,56,203,247
-DB 69,15,56,204,216
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((144-128))+rbp]
- paddd xmm10,xmm3
- paddd xmm2,xmm9
-DB 15,56,205,245
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm6
-DB 102,15,58,15,221,4
-DB 69,15,56,203,254
-DB 69,15,56,205,209
- pshufd xmm0,xmm1,00eh
- paddd xmm7,xmm3
- movdqa xmm3,xmm10
-DB 102,65,15,58,15,217,4
-DB 15,56,204,229
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((160-128))+rbp]
- paddd xmm1,xmm6
-DB 69,15,56,203,247
-DB 69,15,56,204,193
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((160-128))+rbp]
- paddd xmm11,xmm3
- paddd xmm2,xmm10
-DB 15,56,205,254
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm7
-DB 102,15,58,15,222,4
-DB 69,15,56,203,254
-DB 69,15,56,205,218
- pshufd xmm0,xmm1,00eh
- paddd xmm4,xmm3
- movdqa xmm3,xmm11
-DB 102,65,15,58,15,218,4
-DB 15,56,204,238
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((176-128))+rbp]
- paddd xmm1,xmm7
-DB 69,15,56,203,247
-DB 69,15,56,204,202
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((176-128))+rbp]
- paddd xmm8,xmm3
- paddd xmm2,xmm11
-DB 15,56,205,231
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm4
-DB 102,15,58,15,223,4
-DB 69,15,56,203,254
-DB 69,15,56,205,195
- pshufd xmm0,xmm1,00eh
- paddd xmm5,xmm3
- movdqa xmm3,xmm8
-DB 102,65,15,58,15,219,4
-DB 15,56,204,247
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((192-128))+rbp]
- paddd xmm1,xmm4
-DB 69,15,56,203,247
-DB 69,15,56,204,211
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((192-128))+rbp]
- paddd xmm9,xmm3
- paddd xmm2,xmm8
-DB 15,56,205,236
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm5
-DB 102,15,58,15,220,4
-DB 69,15,56,203,254
-DB 69,15,56,205,200
- pshufd xmm0,xmm1,00eh
- paddd xmm6,xmm3
- movdqa xmm3,xmm9
-DB 102,65,15,58,15,216,4
-DB 15,56,204,252
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((208-128))+rbp]
- paddd xmm1,xmm5
-DB 69,15,56,203,247
-DB 69,15,56,204,216
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((208-128))+rbp]
- paddd xmm10,xmm3
- paddd xmm2,xmm9
-DB 15,56,205,245
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- movdqa xmm3,xmm6
-DB 102,15,58,15,221,4
-DB 69,15,56,203,254
-DB 69,15,56,205,209
- pshufd xmm0,xmm1,00eh
- paddd xmm7,xmm3
- movdqa xmm3,xmm10
-DB 102,65,15,58,15,217,4
- nop
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm1,XMMWORD PTR[((224-128))+rbp]
- paddd xmm1,xmm6
-DB 69,15,56,203,247
-
- movdqa xmm0,xmm1
- movdqa xmm2,XMMWORD PTR[((224-128))+rbp]
- paddd xmm11,xmm3
- paddd xmm2,xmm10
-DB 15,56,205,254
- nop
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- mov ecx,1
- pxor xmm6,xmm6
-DB 69,15,56,203,254
-DB 69,15,56,205,218
- pshufd xmm0,xmm1,00eh
- movdqa xmm1,XMMWORD PTR[((240-128))+rbp]
- paddd xmm1,xmm7
- movq xmm7,QWORD PTR[rbx]
- nop
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- movdqa xmm2,XMMWORD PTR[((240-128))+rbp]
- paddd xmm2,xmm11
-DB 69,15,56,203,247
-
- movdqa xmm0,xmm1
- cmp ecx,DWORD PTR[rbx]
- cmovge r8,rsp
- cmp ecx,DWORD PTR[4+rbx]
- cmovge r9,rsp
- pshufd xmm9,xmm7,000h
-DB 69,15,56,203,236
- movdqa xmm0,xmm2
- pshufd xmm10,xmm7,055h
- movdqa xmm11,xmm7
-DB 69,15,56,203,254
- pshufd xmm0,xmm1,00eh
- pcmpgtd xmm9,xmm6
- pcmpgtd xmm10,xmm6
-DB 69,15,56,203,229
- pshufd xmm0,xmm2,00eh
- pcmpgtd xmm11,xmm6
- movdqa xmm3,XMMWORD PTR[((K256_shaext-16))]
-DB 69,15,56,203,247
-
- pand xmm13,xmm9
- pand xmm15,xmm10
- pand xmm12,xmm9
- pand xmm14,xmm10
- paddd xmm11,xmm7
-
- paddd xmm13,XMMWORD PTR[80+rsp]
- paddd xmm15,XMMWORD PTR[112+rsp]
- paddd xmm12,XMMWORD PTR[64+rsp]
- paddd xmm14,XMMWORD PTR[96+rsp]
-
- movq QWORD PTR[rbx],xmm11
- dec edx
- jnz $L$oop_shaext
-
- mov edx,DWORD PTR[280+rsp]
-
- pshufd xmm12,xmm12,27
- pshufd xmm13,xmm13,27
- pshufd xmm14,xmm14,27
- pshufd xmm15,xmm15,27
-
- movdqa xmm5,xmm12
- movdqa xmm6,xmm13
- punpckldq xmm12,xmm14
- punpckhdq xmm5,xmm14
- punpckldq xmm13,xmm15
- punpckhdq xmm6,xmm15
-
- movq QWORD PTR[(0-128)+rdi],xmm12
- psrldq xmm12,8
- movq QWORD PTR[(128-128)+rdi],xmm5
- psrldq xmm5,8
- movq QWORD PTR[(32-128)+rdi],xmm12
- movq QWORD PTR[(160-128)+rdi],xmm5
-
- movq QWORD PTR[(64-128)+rdi],xmm13
- psrldq xmm13,8
- movq QWORD PTR[(192-128)+rdi],xmm6
- psrldq xmm6,8
- movq QWORD PTR[(96-128)+rdi],xmm13
- movq QWORD PTR[(224-128)+rdi],xmm6
-
- lea rdi,QWORD PTR[8+rdi]
- lea rsi,QWORD PTR[32+rsi]
- dec edx
- jnz $L$oop_grande_shaext
-
-$L$done_shaext::
-
- movaps xmm6,XMMWORD PTR[((-184))+rax]
- movaps xmm7,XMMWORD PTR[((-168))+rax]
- movaps xmm8,XMMWORD PTR[((-152))+rax]
- movaps xmm9,XMMWORD PTR[((-136))+rax]
- movaps xmm10,XMMWORD PTR[((-120))+rax]
- movaps xmm11,XMMWORD PTR[((-104))+rax]
- movaps xmm12,XMMWORD PTR[((-88))+rax]
- movaps xmm13,XMMWORD PTR[((-72))+rax]
- movaps xmm14,XMMWORD PTR[((-56))+rax]
- movaps xmm15,XMMWORD PTR[((-40))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$epilogue_shaext::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha256_multi_block_shaext::
-sha256_multi_block_shaext ENDP
-
-ALIGN 32
-sha256_multi_block_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha256_multi_block_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-_avx_shortcut::
- shr rcx,32
- cmp edx,2
- jb $L$avx
- test ecx,32
- jnz _avx2_shortcut
- jmp $L$avx
-ALIGN 32
-$L$avx::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[(-120)+rax],xmm10
- movaps XMMWORD PTR[(-104)+rax],xmm11
- movaps XMMWORD PTR[(-88)+rax],xmm12
- movaps XMMWORD PTR[(-72)+rax],xmm13
- movaps XMMWORD PTR[(-56)+rax],xmm14
- movaps XMMWORD PTR[(-40)+rax],xmm15
- sub rsp,288
- and rsp,-256
- mov QWORD PTR[272+rsp],rax
-
-$L$body_avx::
- lea rbp,QWORD PTR[((K256+128))]
- lea rbx,QWORD PTR[256+rsp]
- lea rdi,QWORD PTR[128+rdi]
-
-$L$oop_grande_avx::
- mov DWORD PTR[280+rsp],edx
- xor edx,edx
- mov r8,QWORD PTR[rsi]
- mov ecx,DWORD PTR[8+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[rbx],ecx
- cmovle r8,rbp
- mov r9,QWORD PTR[16+rsi]
- mov ecx,DWORD PTR[24+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[4+rbx],ecx
- cmovle r9,rbp
- mov r10,QWORD PTR[32+rsi]
- mov ecx,DWORD PTR[40+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[8+rbx],ecx
- cmovle r10,rbp
- mov r11,QWORD PTR[48+rsi]
- mov ecx,DWORD PTR[56+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[12+rbx],ecx
- cmovle r11,rbp
- test edx,edx
- jz $L$done_avx
-
- vmovdqu xmm8,XMMWORD PTR[((0-128))+rdi]
- lea rax,QWORD PTR[128+rsp]
- vmovdqu xmm9,XMMWORD PTR[((32-128))+rdi]
- vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
- vmovdqu xmm11,XMMWORD PTR[((96-128))+rdi]
- vmovdqu xmm12,XMMWORD PTR[((128-128))+rdi]
- vmovdqu xmm13,XMMWORD PTR[((160-128))+rdi]
- vmovdqu xmm14,XMMWORD PTR[((192-128))+rdi]
- vmovdqu xmm15,XMMWORD PTR[((224-128))+rdi]
- vmovdqu xmm6,XMMWORD PTR[$L$pbswap]
- jmp $L$oop_avx
-
-ALIGN 32
-$L$oop_avx::
- vpxor xmm4,xmm10,xmm9
- vmovd xmm5,DWORD PTR[r8]
- vmovd xmm0,DWORD PTR[r9]
- vpinsrd xmm5,xmm5,DWORD PTR[r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm12,6
- vpslld xmm2,xmm12,26
- vmovdqu XMMWORD PTR[(0-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm15
-
- vpsrld xmm1,xmm12,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm12,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-128))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm12,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm12,7
- vpandn xmm0,xmm12,xmm14
- vpand xmm3,xmm12,xmm13
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm15,xmm8,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm8,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm9,xmm8
-
- vpxor xmm15,xmm15,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm8,13
-
- vpslld xmm2,xmm8,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm15,xmm1
-
- vpsrld xmm1,xmm8,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm8,10
- vpxor xmm15,xmm9,xmm4
- vpaddd xmm11,xmm11,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm15,xmm15,xmm5
- vpaddd xmm15,xmm15,xmm7
- vmovd xmm5,DWORD PTR[4+r8]
- vmovd xmm0,DWORD PTR[4+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[4+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[4+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm11,6
- vpslld xmm2,xmm11,26
- vmovdqu XMMWORD PTR[(16-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm14
-
- vpsrld xmm1,xmm11,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm11,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-96))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm11,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm11,7
- vpandn xmm0,xmm11,xmm13
- vpand xmm4,xmm11,xmm12
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm14,xmm15,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm15,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm8,xmm15
-
- vpxor xmm14,xmm14,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm15,13
-
- vpslld xmm2,xmm15,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm14,xmm1
-
- vpsrld xmm1,xmm15,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm15,10
- vpxor xmm14,xmm8,xmm3
- vpaddd xmm10,xmm10,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm14,xmm14,xmm5
- vpaddd xmm14,xmm14,xmm7
- vmovd xmm5,DWORD PTR[8+r8]
- vmovd xmm0,DWORD PTR[8+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[8+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[8+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm10,6
- vpslld xmm2,xmm10,26
- vmovdqu XMMWORD PTR[(32-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm13
-
- vpsrld xmm1,xmm10,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm10,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-64))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm10,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm10,7
- vpandn xmm0,xmm10,xmm12
- vpand xmm3,xmm10,xmm11
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm13,xmm14,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm14,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm15,xmm14
-
- vpxor xmm13,xmm13,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm14,13
-
- vpslld xmm2,xmm14,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm13,xmm1
-
- vpsrld xmm1,xmm14,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm14,10
- vpxor xmm13,xmm15,xmm4
- vpaddd xmm9,xmm9,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm13,xmm13,xmm5
- vpaddd xmm13,xmm13,xmm7
- vmovd xmm5,DWORD PTR[12+r8]
- vmovd xmm0,DWORD PTR[12+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[12+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[12+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm9,6
- vpslld xmm2,xmm9,26
- vmovdqu XMMWORD PTR[(48-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm12
-
- vpsrld xmm1,xmm9,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm9,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-32))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm9,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm9,7
- vpandn xmm0,xmm9,xmm11
- vpand xmm4,xmm9,xmm10
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm12,xmm13,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm13,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm14,xmm13
-
- vpxor xmm12,xmm12,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm13,13
-
- vpslld xmm2,xmm13,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm12,xmm1
-
- vpsrld xmm1,xmm13,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm13,10
- vpxor xmm12,xmm14,xmm3
- vpaddd xmm8,xmm8,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm12,xmm12,xmm5
- vpaddd xmm12,xmm12,xmm7
- vmovd xmm5,DWORD PTR[16+r8]
- vmovd xmm0,DWORD PTR[16+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[16+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[16+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm8,6
- vpslld xmm2,xmm8,26
- vmovdqu XMMWORD PTR[(64-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm11
-
- vpsrld xmm1,xmm8,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm8,21
- vpaddd xmm5,xmm5,XMMWORD PTR[rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm8,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm8,7
- vpandn xmm0,xmm8,xmm10
- vpand xmm3,xmm8,xmm9
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm11,xmm12,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm12,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm13,xmm12
-
- vpxor xmm11,xmm11,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm12,13
-
- vpslld xmm2,xmm12,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm11,xmm1
-
- vpsrld xmm1,xmm12,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm12,10
- vpxor xmm11,xmm13,xmm4
- vpaddd xmm15,xmm15,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm11,xmm11,xmm5
- vpaddd xmm11,xmm11,xmm7
- vmovd xmm5,DWORD PTR[20+r8]
- vmovd xmm0,DWORD PTR[20+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[20+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[20+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm15,6
- vpslld xmm2,xmm15,26
- vmovdqu XMMWORD PTR[(80-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm10
-
- vpsrld xmm1,xmm15,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm15,21
- vpaddd xmm5,xmm5,XMMWORD PTR[32+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm15,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm15,7
- vpandn xmm0,xmm15,xmm9
- vpand xmm4,xmm15,xmm8
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm10,xmm11,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm11,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm12,xmm11
-
- vpxor xmm10,xmm10,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm11,13
-
- vpslld xmm2,xmm11,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm10,xmm1
-
- vpsrld xmm1,xmm11,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm11,10
- vpxor xmm10,xmm12,xmm3
- vpaddd xmm14,xmm14,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm10,xmm10,xmm5
- vpaddd xmm10,xmm10,xmm7
- vmovd xmm5,DWORD PTR[24+r8]
- vmovd xmm0,DWORD PTR[24+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[24+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[24+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm14,6
- vpslld xmm2,xmm14,26
- vmovdqu XMMWORD PTR[(96-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm9
-
- vpsrld xmm1,xmm14,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm14,21
- vpaddd xmm5,xmm5,XMMWORD PTR[64+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm14,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm14,7
- vpandn xmm0,xmm14,xmm8
- vpand xmm3,xmm14,xmm15
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm9,xmm10,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm10,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm11,xmm10
-
- vpxor xmm9,xmm9,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm10,13
-
- vpslld xmm2,xmm10,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm9,xmm1
-
- vpsrld xmm1,xmm10,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm10,10
- vpxor xmm9,xmm11,xmm4
- vpaddd xmm13,xmm13,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm9,xmm9,xmm5
- vpaddd xmm9,xmm9,xmm7
- vmovd xmm5,DWORD PTR[28+r8]
- vmovd xmm0,DWORD PTR[28+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[28+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[28+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm13,6
- vpslld xmm2,xmm13,26
- vmovdqu XMMWORD PTR[(112-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm8
-
- vpsrld xmm1,xmm13,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm13,21
- vpaddd xmm5,xmm5,XMMWORD PTR[96+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm13,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm13,7
- vpandn xmm0,xmm13,xmm15
- vpand xmm4,xmm13,xmm14
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm8,xmm9,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm9,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm10,xmm9
-
- vpxor xmm8,xmm8,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm9,13
-
- vpslld xmm2,xmm9,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm8,xmm1
-
- vpsrld xmm1,xmm9,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm9,10
- vpxor xmm8,xmm10,xmm3
- vpaddd xmm12,xmm12,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm8,xmm8,xmm5
- vpaddd xmm8,xmm8,xmm7
- add rbp,256
- vmovd xmm5,DWORD PTR[32+r8]
- vmovd xmm0,DWORD PTR[32+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[32+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[32+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm12,6
- vpslld xmm2,xmm12,26
- vmovdqu XMMWORD PTR[(128-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm15
-
- vpsrld xmm1,xmm12,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm12,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-128))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm12,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm12,7
- vpandn xmm0,xmm12,xmm14
- vpand xmm3,xmm12,xmm13
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm15,xmm8,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm8,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm9,xmm8
-
- vpxor xmm15,xmm15,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm8,13
-
- vpslld xmm2,xmm8,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm15,xmm1
-
- vpsrld xmm1,xmm8,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm8,10
- vpxor xmm15,xmm9,xmm4
- vpaddd xmm11,xmm11,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm15,xmm15,xmm5
- vpaddd xmm15,xmm15,xmm7
- vmovd xmm5,DWORD PTR[36+r8]
- vmovd xmm0,DWORD PTR[36+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[36+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[36+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm11,6
- vpslld xmm2,xmm11,26
- vmovdqu XMMWORD PTR[(144-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm14
-
- vpsrld xmm1,xmm11,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm11,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-96))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm11,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm11,7
- vpandn xmm0,xmm11,xmm13
- vpand xmm4,xmm11,xmm12
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm14,xmm15,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm15,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm8,xmm15
-
- vpxor xmm14,xmm14,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm15,13
-
- vpslld xmm2,xmm15,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm14,xmm1
-
- vpsrld xmm1,xmm15,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm15,10
- vpxor xmm14,xmm8,xmm3
- vpaddd xmm10,xmm10,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm14,xmm14,xmm5
- vpaddd xmm14,xmm14,xmm7
- vmovd xmm5,DWORD PTR[40+r8]
- vmovd xmm0,DWORD PTR[40+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[40+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[40+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm10,6
- vpslld xmm2,xmm10,26
- vmovdqu XMMWORD PTR[(160-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm13
-
- vpsrld xmm1,xmm10,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm10,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-64))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm10,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm10,7
- vpandn xmm0,xmm10,xmm12
- vpand xmm3,xmm10,xmm11
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm13,xmm14,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm14,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm15,xmm14
-
- vpxor xmm13,xmm13,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm14,13
-
- vpslld xmm2,xmm14,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm13,xmm1
-
- vpsrld xmm1,xmm14,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm14,10
- vpxor xmm13,xmm15,xmm4
- vpaddd xmm9,xmm9,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm13,xmm13,xmm5
- vpaddd xmm13,xmm13,xmm7
- vmovd xmm5,DWORD PTR[44+r8]
- vmovd xmm0,DWORD PTR[44+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[44+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[44+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm9,6
- vpslld xmm2,xmm9,26
- vmovdqu XMMWORD PTR[(176-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm12
-
- vpsrld xmm1,xmm9,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm9,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-32))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm9,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm9,7
- vpandn xmm0,xmm9,xmm11
- vpand xmm4,xmm9,xmm10
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm12,xmm13,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm13,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm14,xmm13
-
- vpxor xmm12,xmm12,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm13,13
-
- vpslld xmm2,xmm13,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm12,xmm1
-
- vpsrld xmm1,xmm13,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm13,10
- vpxor xmm12,xmm14,xmm3
- vpaddd xmm8,xmm8,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm12,xmm12,xmm5
- vpaddd xmm12,xmm12,xmm7
- vmovd xmm5,DWORD PTR[48+r8]
- vmovd xmm0,DWORD PTR[48+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[48+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[48+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm8,6
- vpslld xmm2,xmm8,26
- vmovdqu XMMWORD PTR[(192-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm11
-
- vpsrld xmm1,xmm8,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm8,21
- vpaddd xmm5,xmm5,XMMWORD PTR[rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm8,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm8,7
- vpandn xmm0,xmm8,xmm10
- vpand xmm3,xmm8,xmm9
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm11,xmm12,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm12,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm13,xmm12
-
- vpxor xmm11,xmm11,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm12,13
-
- vpslld xmm2,xmm12,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm11,xmm1
-
- vpsrld xmm1,xmm12,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm12,10
- vpxor xmm11,xmm13,xmm4
- vpaddd xmm15,xmm15,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm11,xmm11,xmm5
- vpaddd xmm11,xmm11,xmm7
- vmovd xmm5,DWORD PTR[52+r8]
- vmovd xmm0,DWORD PTR[52+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[52+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[52+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm15,6
- vpslld xmm2,xmm15,26
- vmovdqu XMMWORD PTR[(208-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm10
-
- vpsrld xmm1,xmm15,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm15,21
- vpaddd xmm5,xmm5,XMMWORD PTR[32+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm15,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm15,7
- vpandn xmm0,xmm15,xmm9
- vpand xmm4,xmm15,xmm8
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm10,xmm11,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm11,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm12,xmm11
-
- vpxor xmm10,xmm10,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm11,13
-
- vpslld xmm2,xmm11,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm10,xmm1
-
- vpsrld xmm1,xmm11,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm11,10
- vpxor xmm10,xmm12,xmm3
- vpaddd xmm14,xmm14,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm10,xmm10,xmm5
- vpaddd xmm10,xmm10,xmm7
- vmovd xmm5,DWORD PTR[56+r8]
- vmovd xmm0,DWORD PTR[56+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[56+r10],1
- vpinsrd xmm0,xmm0,DWORD PTR[56+r11],1
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm14,6
- vpslld xmm2,xmm14,26
- vmovdqu XMMWORD PTR[(224-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm9
-
- vpsrld xmm1,xmm14,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm14,21
- vpaddd xmm5,xmm5,XMMWORD PTR[64+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm14,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm14,7
- vpandn xmm0,xmm14,xmm8
- vpand xmm3,xmm14,xmm15
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm9,xmm10,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm10,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm11,xmm10
-
- vpxor xmm9,xmm9,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm10,13
-
- vpslld xmm2,xmm10,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm9,xmm1
-
- vpsrld xmm1,xmm10,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm10,10
- vpxor xmm9,xmm11,xmm4
- vpaddd xmm13,xmm13,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm9,xmm9,xmm5
- vpaddd xmm9,xmm9,xmm7
- vmovd xmm5,DWORD PTR[60+r8]
- lea r8,QWORD PTR[64+r8]
- vmovd xmm0,DWORD PTR[60+r9]
- lea r9,QWORD PTR[64+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[60+r10],1
- lea r10,QWORD PTR[64+r10]
- vpinsrd xmm0,xmm0,DWORD PTR[60+r11],1
- lea r11,QWORD PTR[64+r11]
- vpunpckldq xmm5,xmm5,xmm0
- vpshufb xmm5,xmm5,xmm6
- vpsrld xmm7,xmm13,6
- vpslld xmm2,xmm13,26
- vmovdqu XMMWORD PTR[(240-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm8
-
- vpsrld xmm1,xmm13,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm13,21
- vpaddd xmm5,xmm5,XMMWORD PTR[96+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm13,25
- vpxor xmm7,xmm7,xmm2
- prefetcht0 [63+r8]
- vpslld xmm2,xmm13,7
- vpandn xmm0,xmm13,xmm15
- vpand xmm4,xmm13,xmm14
- prefetcht0 [63+r9]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm8,xmm9,2
- vpxor xmm7,xmm7,xmm2
- prefetcht0 [63+r10]
- vpslld xmm1,xmm9,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm10,xmm9
- prefetcht0 [63+r11]
- vpxor xmm8,xmm8,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm9,13
-
- vpslld xmm2,xmm9,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm8,xmm1
-
- vpsrld xmm1,xmm9,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm9,10
- vpxor xmm8,xmm10,xmm3
- vpaddd xmm12,xmm12,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm8,xmm8,xmm5
- vpaddd xmm8,xmm8,xmm7
- add rbp,256
- vmovdqu xmm5,XMMWORD PTR[((0-128))+rax]
- mov ecx,3
- jmp $L$oop_16_xx_avx
-ALIGN 32
-$L$oop_16_xx_avx::
- vmovdqu xmm6,XMMWORD PTR[((16-128))+rax]
- vpaddd xmm5,xmm5,XMMWORD PTR[((144-128))+rax]
-
- vpsrld xmm7,xmm6,3
- vpsrld xmm1,xmm6,7
- vpslld xmm2,xmm6,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm6,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm6,14
- vmovdqu xmm0,XMMWORD PTR[((224-128))+rax]
- vpsrld xmm3,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm7,xmm3,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm5,xmm5,xmm7
- vpsrld xmm7,xmm12,6
- vpslld xmm2,xmm12,26
- vmovdqu XMMWORD PTR[(0-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm15
-
- vpsrld xmm1,xmm12,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm12,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-128))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm12,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm12,7
- vpandn xmm0,xmm12,xmm14
- vpand xmm3,xmm12,xmm13
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm15,xmm8,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm8,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm9,xmm8
-
- vpxor xmm15,xmm15,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm8,13
-
- vpslld xmm2,xmm8,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm15,xmm1
-
- vpsrld xmm1,xmm8,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm8,10
- vpxor xmm15,xmm9,xmm4
- vpaddd xmm11,xmm11,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm15,xmm15,xmm5
- vpaddd xmm15,xmm15,xmm7
- vmovdqu xmm5,XMMWORD PTR[((32-128))+rax]
- vpaddd xmm6,xmm6,XMMWORD PTR[((160-128))+rax]
-
- vpsrld xmm7,xmm5,3
- vpsrld xmm1,xmm5,7
- vpslld xmm2,xmm5,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm5,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm5,14
- vmovdqu xmm0,XMMWORD PTR[((240-128))+rax]
- vpsrld xmm4,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm6,xmm6,xmm7
- vpxor xmm7,xmm4,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm6,xmm6,xmm7
- vpsrld xmm7,xmm11,6
- vpslld xmm2,xmm11,26
- vmovdqu XMMWORD PTR[(16-128)+rax],xmm6
- vpaddd xmm6,xmm6,xmm14
-
- vpsrld xmm1,xmm11,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm11,21
- vpaddd xmm6,xmm6,XMMWORD PTR[((-96))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm11,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm11,7
- vpandn xmm0,xmm11,xmm13
- vpand xmm4,xmm11,xmm12
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm14,xmm15,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm15,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm8,xmm15
-
- vpxor xmm14,xmm14,xmm1
- vpaddd xmm6,xmm6,xmm7
-
- vpsrld xmm1,xmm15,13
-
- vpslld xmm2,xmm15,19
- vpaddd xmm6,xmm6,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm14,xmm1
-
- vpsrld xmm1,xmm15,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm15,10
- vpxor xmm14,xmm8,xmm3
- vpaddd xmm10,xmm10,xmm6
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm14,xmm14,xmm6
- vpaddd xmm14,xmm14,xmm7
- vmovdqu xmm6,XMMWORD PTR[((48-128))+rax]
- vpaddd xmm5,xmm5,XMMWORD PTR[((176-128))+rax]
-
- vpsrld xmm7,xmm6,3
- vpsrld xmm1,xmm6,7
- vpslld xmm2,xmm6,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm6,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm6,14
- vmovdqu xmm0,XMMWORD PTR[((0-128))+rax]
- vpsrld xmm3,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm7,xmm3,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm5,xmm5,xmm7
- vpsrld xmm7,xmm10,6
- vpslld xmm2,xmm10,26
- vmovdqu XMMWORD PTR[(32-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm13
-
- vpsrld xmm1,xmm10,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm10,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-64))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm10,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm10,7
- vpandn xmm0,xmm10,xmm12
- vpand xmm3,xmm10,xmm11
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm13,xmm14,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm14,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm15,xmm14
-
- vpxor xmm13,xmm13,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm14,13
-
- vpslld xmm2,xmm14,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm13,xmm1
-
- vpsrld xmm1,xmm14,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm14,10
- vpxor xmm13,xmm15,xmm4
- vpaddd xmm9,xmm9,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm13,xmm13,xmm5
- vpaddd xmm13,xmm13,xmm7
- vmovdqu xmm5,XMMWORD PTR[((64-128))+rax]
- vpaddd xmm6,xmm6,XMMWORD PTR[((192-128))+rax]
-
- vpsrld xmm7,xmm5,3
- vpsrld xmm1,xmm5,7
- vpslld xmm2,xmm5,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm5,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm5,14
- vmovdqu xmm0,XMMWORD PTR[((16-128))+rax]
- vpsrld xmm4,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm6,xmm6,xmm7
- vpxor xmm7,xmm4,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm6,xmm6,xmm7
- vpsrld xmm7,xmm9,6
- vpslld xmm2,xmm9,26
- vmovdqu XMMWORD PTR[(48-128)+rax],xmm6
- vpaddd xmm6,xmm6,xmm12
-
- vpsrld xmm1,xmm9,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm9,21
- vpaddd xmm6,xmm6,XMMWORD PTR[((-32))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm9,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm9,7
- vpandn xmm0,xmm9,xmm11
- vpand xmm4,xmm9,xmm10
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm12,xmm13,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm13,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm14,xmm13
-
- vpxor xmm12,xmm12,xmm1
- vpaddd xmm6,xmm6,xmm7
-
- vpsrld xmm1,xmm13,13
-
- vpslld xmm2,xmm13,19
- vpaddd xmm6,xmm6,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm12,xmm1
-
- vpsrld xmm1,xmm13,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm13,10
- vpxor xmm12,xmm14,xmm3
- vpaddd xmm8,xmm8,xmm6
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm12,xmm12,xmm6
- vpaddd xmm12,xmm12,xmm7
- vmovdqu xmm6,XMMWORD PTR[((80-128))+rax]
- vpaddd xmm5,xmm5,XMMWORD PTR[((208-128))+rax]
-
- vpsrld xmm7,xmm6,3
- vpsrld xmm1,xmm6,7
- vpslld xmm2,xmm6,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm6,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm6,14
- vmovdqu xmm0,XMMWORD PTR[((32-128))+rax]
- vpsrld xmm3,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm7,xmm3,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm5,xmm5,xmm7
- vpsrld xmm7,xmm8,6
- vpslld xmm2,xmm8,26
- vmovdqu XMMWORD PTR[(64-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm11
-
- vpsrld xmm1,xmm8,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm8,21
- vpaddd xmm5,xmm5,XMMWORD PTR[rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm8,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm8,7
- vpandn xmm0,xmm8,xmm10
- vpand xmm3,xmm8,xmm9
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm11,xmm12,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm12,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm13,xmm12
-
- vpxor xmm11,xmm11,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm12,13
-
- vpslld xmm2,xmm12,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm11,xmm1
-
- vpsrld xmm1,xmm12,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm12,10
- vpxor xmm11,xmm13,xmm4
- vpaddd xmm15,xmm15,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm11,xmm11,xmm5
- vpaddd xmm11,xmm11,xmm7
- vmovdqu xmm5,XMMWORD PTR[((96-128))+rax]
- vpaddd xmm6,xmm6,XMMWORD PTR[((224-128))+rax]
-
- vpsrld xmm7,xmm5,3
- vpsrld xmm1,xmm5,7
- vpslld xmm2,xmm5,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm5,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm5,14
- vmovdqu xmm0,XMMWORD PTR[((48-128))+rax]
- vpsrld xmm4,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm6,xmm6,xmm7
- vpxor xmm7,xmm4,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm6,xmm6,xmm7
- vpsrld xmm7,xmm15,6
- vpslld xmm2,xmm15,26
- vmovdqu XMMWORD PTR[(80-128)+rax],xmm6
- vpaddd xmm6,xmm6,xmm10
-
- vpsrld xmm1,xmm15,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm15,21
- vpaddd xmm6,xmm6,XMMWORD PTR[32+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm15,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm15,7
- vpandn xmm0,xmm15,xmm9
- vpand xmm4,xmm15,xmm8
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm10,xmm11,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm11,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm12,xmm11
-
- vpxor xmm10,xmm10,xmm1
- vpaddd xmm6,xmm6,xmm7
-
- vpsrld xmm1,xmm11,13
-
- vpslld xmm2,xmm11,19
- vpaddd xmm6,xmm6,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm10,xmm1
-
- vpsrld xmm1,xmm11,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm11,10
- vpxor xmm10,xmm12,xmm3
- vpaddd xmm14,xmm14,xmm6
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm10,xmm10,xmm6
- vpaddd xmm10,xmm10,xmm7
- vmovdqu xmm6,XMMWORD PTR[((112-128))+rax]
- vpaddd xmm5,xmm5,XMMWORD PTR[((240-128))+rax]
-
- vpsrld xmm7,xmm6,3
- vpsrld xmm1,xmm6,7
- vpslld xmm2,xmm6,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm6,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm6,14
- vmovdqu xmm0,XMMWORD PTR[((64-128))+rax]
- vpsrld xmm3,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm7,xmm3,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm5,xmm5,xmm7
- vpsrld xmm7,xmm14,6
- vpslld xmm2,xmm14,26
- vmovdqu XMMWORD PTR[(96-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm9
-
- vpsrld xmm1,xmm14,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm14,21
- vpaddd xmm5,xmm5,XMMWORD PTR[64+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm14,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm14,7
- vpandn xmm0,xmm14,xmm8
- vpand xmm3,xmm14,xmm15
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm9,xmm10,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm10,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm11,xmm10
-
- vpxor xmm9,xmm9,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm10,13
-
- vpslld xmm2,xmm10,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm9,xmm1
-
- vpsrld xmm1,xmm10,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm10,10
- vpxor xmm9,xmm11,xmm4
- vpaddd xmm13,xmm13,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm9,xmm9,xmm5
- vpaddd xmm9,xmm9,xmm7
- vmovdqu xmm5,XMMWORD PTR[((128-128))+rax]
- vpaddd xmm6,xmm6,XMMWORD PTR[((0-128))+rax]
-
- vpsrld xmm7,xmm5,3
- vpsrld xmm1,xmm5,7
- vpslld xmm2,xmm5,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm5,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm5,14
- vmovdqu xmm0,XMMWORD PTR[((80-128))+rax]
- vpsrld xmm4,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm6,xmm6,xmm7
- vpxor xmm7,xmm4,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm6,xmm6,xmm7
- vpsrld xmm7,xmm13,6
- vpslld xmm2,xmm13,26
- vmovdqu XMMWORD PTR[(112-128)+rax],xmm6
- vpaddd xmm6,xmm6,xmm8
-
- vpsrld xmm1,xmm13,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm13,21
- vpaddd xmm6,xmm6,XMMWORD PTR[96+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm13,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm13,7
- vpandn xmm0,xmm13,xmm15
- vpand xmm4,xmm13,xmm14
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm8,xmm9,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm9,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm10,xmm9
-
- vpxor xmm8,xmm8,xmm1
- vpaddd xmm6,xmm6,xmm7
-
- vpsrld xmm1,xmm9,13
-
- vpslld xmm2,xmm9,19
- vpaddd xmm6,xmm6,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm8,xmm1
-
- vpsrld xmm1,xmm9,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm9,10
- vpxor xmm8,xmm10,xmm3
- vpaddd xmm12,xmm12,xmm6
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm8,xmm8,xmm6
- vpaddd xmm8,xmm8,xmm7
- add rbp,256
- vmovdqu xmm6,XMMWORD PTR[((144-128))+rax]
- vpaddd xmm5,xmm5,XMMWORD PTR[((16-128))+rax]
-
- vpsrld xmm7,xmm6,3
- vpsrld xmm1,xmm6,7
- vpslld xmm2,xmm6,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm6,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm6,14
- vmovdqu xmm0,XMMWORD PTR[((96-128))+rax]
- vpsrld xmm3,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm7,xmm3,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm5,xmm5,xmm7
- vpsrld xmm7,xmm12,6
- vpslld xmm2,xmm12,26
- vmovdqu XMMWORD PTR[(128-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm15
-
- vpsrld xmm1,xmm12,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm12,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-128))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm12,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm12,7
- vpandn xmm0,xmm12,xmm14
- vpand xmm3,xmm12,xmm13
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm15,xmm8,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm8,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm9,xmm8
-
- vpxor xmm15,xmm15,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm8,13
-
- vpslld xmm2,xmm8,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm15,xmm1
-
- vpsrld xmm1,xmm8,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm8,10
- vpxor xmm15,xmm9,xmm4
- vpaddd xmm11,xmm11,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm15,xmm15,xmm5
- vpaddd xmm15,xmm15,xmm7
- vmovdqu xmm5,XMMWORD PTR[((160-128))+rax]
- vpaddd xmm6,xmm6,XMMWORD PTR[((32-128))+rax]
-
- vpsrld xmm7,xmm5,3
- vpsrld xmm1,xmm5,7
- vpslld xmm2,xmm5,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm5,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm5,14
- vmovdqu xmm0,XMMWORD PTR[((112-128))+rax]
- vpsrld xmm4,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm6,xmm6,xmm7
- vpxor xmm7,xmm4,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm6,xmm6,xmm7
- vpsrld xmm7,xmm11,6
- vpslld xmm2,xmm11,26
- vmovdqu XMMWORD PTR[(144-128)+rax],xmm6
- vpaddd xmm6,xmm6,xmm14
-
- vpsrld xmm1,xmm11,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm11,21
- vpaddd xmm6,xmm6,XMMWORD PTR[((-96))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm11,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm11,7
- vpandn xmm0,xmm11,xmm13
- vpand xmm4,xmm11,xmm12
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm14,xmm15,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm15,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm8,xmm15
-
- vpxor xmm14,xmm14,xmm1
- vpaddd xmm6,xmm6,xmm7
-
- vpsrld xmm1,xmm15,13
-
- vpslld xmm2,xmm15,19
- vpaddd xmm6,xmm6,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm14,xmm1
-
- vpsrld xmm1,xmm15,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm15,10
- vpxor xmm14,xmm8,xmm3
- vpaddd xmm10,xmm10,xmm6
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm14,xmm14,xmm6
- vpaddd xmm14,xmm14,xmm7
- vmovdqu xmm6,XMMWORD PTR[((176-128))+rax]
- vpaddd xmm5,xmm5,XMMWORD PTR[((48-128))+rax]
-
- vpsrld xmm7,xmm6,3
- vpsrld xmm1,xmm6,7
- vpslld xmm2,xmm6,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm6,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm6,14
- vmovdqu xmm0,XMMWORD PTR[((128-128))+rax]
- vpsrld xmm3,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm7,xmm3,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm5,xmm5,xmm7
- vpsrld xmm7,xmm10,6
- vpslld xmm2,xmm10,26
- vmovdqu XMMWORD PTR[(160-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm13
-
- vpsrld xmm1,xmm10,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm10,21
- vpaddd xmm5,xmm5,XMMWORD PTR[((-64))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm10,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm10,7
- vpandn xmm0,xmm10,xmm12
- vpand xmm3,xmm10,xmm11
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm13,xmm14,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm14,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm15,xmm14
-
- vpxor xmm13,xmm13,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm14,13
-
- vpslld xmm2,xmm14,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm13,xmm1
-
- vpsrld xmm1,xmm14,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm14,10
- vpxor xmm13,xmm15,xmm4
- vpaddd xmm9,xmm9,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm13,xmm13,xmm5
- vpaddd xmm13,xmm13,xmm7
- vmovdqu xmm5,XMMWORD PTR[((192-128))+rax]
- vpaddd xmm6,xmm6,XMMWORD PTR[((64-128))+rax]
-
- vpsrld xmm7,xmm5,3
- vpsrld xmm1,xmm5,7
- vpslld xmm2,xmm5,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm5,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm5,14
- vmovdqu xmm0,XMMWORD PTR[((144-128))+rax]
- vpsrld xmm4,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm6,xmm6,xmm7
- vpxor xmm7,xmm4,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm6,xmm6,xmm7
- vpsrld xmm7,xmm9,6
- vpslld xmm2,xmm9,26
- vmovdqu XMMWORD PTR[(176-128)+rax],xmm6
- vpaddd xmm6,xmm6,xmm12
-
- vpsrld xmm1,xmm9,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm9,21
- vpaddd xmm6,xmm6,XMMWORD PTR[((-32))+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm9,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm9,7
- vpandn xmm0,xmm9,xmm11
- vpand xmm4,xmm9,xmm10
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm12,xmm13,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm13,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm14,xmm13
-
- vpxor xmm12,xmm12,xmm1
- vpaddd xmm6,xmm6,xmm7
-
- vpsrld xmm1,xmm13,13
-
- vpslld xmm2,xmm13,19
- vpaddd xmm6,xmm6,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm12,xmm1
-
- vpsrld xmm1,xmm13,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm13,10
- vpxor xmm12,xmm14,xmm3
- vpaddd xmm8,xmm8,xmm6
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm12,xmm12,xmm6
- vpaddd xmm12,xmm12,xmm7
- vmovdqu xmm6,XMMWORD PTR[((208-128))+rax]
- vpaddd xmm5,xmm5,XMMWORD PTR[((80-128))+rax]
-
- vpsrld xmm7,xmm6,3
- vpsrld xmm1,xmm6,7
- vpslld xmm2,xmm6,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm6,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm6,14
- vmovdqu xmm0,XMMWORD PTR[((160-128))+rax]
- vpsrld xmm3,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm7,xmm3,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm5,xmm5,xmm7
- vpsrld xmm7,xmm8,6
- vpslld xmm2,xmm8,26
- vmovdqu XMMWORD PTR[(192-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm11
-
- vpsrld xmm1,xmm8,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm8,21
- vpaddd xmm5,xmm5,XMMWORD PTR[rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm8,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm8,7
- vpandn xmm0,xmm8,xmm10
- vpand xmm3,xmm8,xmm9
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm11,xmm12,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm12,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm13,xmm12
-
- vpxor xmm11,xmm11,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm12,13
-
- vpslld xmm2,xmm12,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm11,xmm1
-
- vpsrld xmm1,xmm12,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm12,10
- vpxor xmm11,xmm13,xmm4
- vpaddd xmm15,xmm15,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm11,xmm11,xmm5
- vpaddd xmm11,xmm11,xmm7
- vmovdqu xmm5,XMMWORD PTR[((224-128))+rax]
- vpaddd xmm6,xmm6,XMMWORD PTR[((96-128))+rax]
-
- vpsrld xmm7,xmm5,3
- vpsrld xmm1,xmm5,7
- vpslld xmm2,xmm5,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm5,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm5,14
- vmovdqu xmm0,XMMWORD PTR[((176-128))+rax]
- vpsrld xmm4,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm6,xmm6,xmm7
- vpxor xmm7,xmm4,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm6,xmm6,xmm7
- vpsrld xmm7,xmm15,6
- vpslld xmm2,xmm15,26
- vmovdqu XMMWORD PTR[(208-128)+rax],xmm6
- vpaddd xmm6,xmm6,xmm10
-
- vpsrld xmm1,xmm15,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm15,21
- vpaddd xmm6,xmm6,XMMWORD PTR[32+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm15,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm15,7
- vpandn xmm0,xmm15,xmm9
- vpand xmm4,xmm15,xmm8
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm10,xmm11,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm11,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm12,xmm11
-
- vpxor xmm10,xmm10,xmm1
- vpaddd xmm6,xmm6,xmm7
-
- vpsrld xmm1,xmm11,13
-
- vpslld xmm2,xmm11,19
- vpaddd xmm6,xmm6,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm10,xmm1
-
- vpsrld xmm1,xmm11,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm11,10
- vpxor xmm10,xmm12,xmm3
- vpaddd xmm14,xmm14,xmm6
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm10,xmm10,xmm6
- vpaddd xmm10,xmm10,xmm7
- vmovdqu xmm6,XMMWORD PTR[((240-128))+rax]
- vpaddd xmm5,xmm5,XMMWORD PTR[((112-128))+rax]
-
- vpsrld xmm7,xmm6,3
- vpsrld xmm1,xmm6,7
- vpslld xmm2,xmm6,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm6,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm6,14
- vmovdqu xmm0,XMMWORD PTR[((192-128))+rax]
- vpsrld xmm3,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm5,xmm5,xmm7
- vpxor xmm7,xmm3,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm5,xmm5,xmm7
- vpsrld xmm7,xmm14,6
- vpslld xmm2,xmm14,26
- vmovdqu XMMWORD PTR[(224-128)+rax],xmm5
- vpaddd xmm5,xmm5,xmm9
-
- vpsrld xmm1,xmm14,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm14,21
- vpaddd xmm5,xmm5,XMMWORD PTR[64+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm14,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm14,7
- vpandn xmm0,xmm14,xmm8
- vpand xmm3,xmm14,xmm15
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm9,xmm10,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm10,30
- vpxor xmm0,xmm0,xmm3
- vpxor xmm3,xmm11,xmm10
-
- vpxor xmm9,xmm9,xmm1
- vpaddd xmm5,xmm5,xmm7
-
- vpsrld xmm1,xmm10,13
-
- vpslld xmm2,xmm10,19
- vpaddd xmm5,xmm5,xmm0
- vpand xmm4,xmm4,xmm3
-
- vpxor xmm7,xmm9,xmm1
-
- vpsrld xmm1,xmm10,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm10,10
- vpxor xmm9,xmm11,xmm4
- vpaddd xmm13,xmm13,xmm5
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm9,xmm9,xmm5
- vpaddd xmm9,xmm9,xmm7
- vmovdqu xmm5,XMMWORD PTR[((0-128))+rax]
- vpaddd xmm6,xmm6,XMMWORD PTR[((128-128))+rax]
-
- vpsrld xmm7,xmm5,3
- vpsrld xmm1,xmm5,7
- vpslld xmm2,xmm5,25
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm5,18
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm5,14
- vmovdqu xmm0,XMMWORD PTR[((208-128))+rax]
- vpsrld xmm4,xmm0,10
-
- vpxor xmm7,xmm7,xmm1
- vpsrld xmm1,xmm0,17
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,15
- vpaddd xmm6,xmm6,xmm7
- vpxor xmm7,xmm4,xmm1
- vpsrld xmm1,xmm0,19
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm0,13
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
- vpaddd xmm6,xmm6,xmm7
- vpsrld xmm7,xmm13,6
- vpslld xmm2,xmm13,26
- vmovdqu XMMWORD PTR[(240-128)+rax],xmm6
- vpaddd xmm6,xmm6,xmm8
-
- vpsrld xmm1,xmm13,11
- vpxor xmm7,xmm7,xmm2
- vpslld xmm2,xmm13,21
- vpaddd xmm6,xmm6,XMMWORD PTR[96+rbp]
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm1,xmm13,25
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm13,7
- vpandn xmm0,xmm13,xmm15
- vpand xmm4,xmm13,xmm14
-
- vpxor xmm7,xmm7,xmm1
-
- vpsrld xmm8,xmm9,2
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm1,xmm9,30
- vpxor xmm0,xmm0,xmm4
- vpxor xmm4,xmm10,xmm9
-
- vpxor xmm8,xmm8,xmm1
- vpaddd xmm6,xmm6,xmm7
-
- vpsrld xmm1,xmm9,13
-
- vpslld xmm2,xmm9,19
- vpaddd xmm6,xmm6,xmm0
- vpand xmm3,xmm3,xmm4
-
- vpxor xmm7,xmm8,xmm1
-
- vpsrld xmm1,xmm9,22
- vpxor xmm7,xmm7,xmm2
-
- vpslld xmm2,xmm9,10
- vpxor xmm8,xmm10,xmm3
- vpaddd xmm12,xmm12,xmm6
-
- vpxor xmm7,xmm7,xmm1
- vpxor xmm7,xmm7,xmm2
-
- vpaddd xmm8,xmm8,xmm6
- vpaddd xmm8,xmm8,xmm7
- add rbp,256
- dec ecx
- jnz $L$oop_16_xx_avx
-
- mov ecx,1
- lea rbp,QWORD PTR[((K256+128))]
- cmp ecx,DWORD PTR[rbx]
- cmovge r8,rbp
- cmp ecx,DWORD PTR[4+rbx]
- cmovge r9,rbp
- cmp ecx,DWORD PTR[8+rbx]
- cmovge r10,rbp
- cmp ecx,DWORD PTR[12+rbx]
- cmovge r11,rbp
- vmovdqa xmm7,XMMWORD PTR[rbx]
- vpxor xmm0,xmm0,xmm0
- vmovdqa xmm6,xmm7
- vpcmpgtd xmm6,xmm6,xmm0
- vpaddd xmm7,xmm7,xmm6
-
- vmovdqu xmm0,XMMWORD PTR[((0-128))+rdi]
- vpand xmm8,xmm8,xmm6
- vmovdqu xmm1,XMMWORD PTR[((32-128))+rdi]
- vpand xmm9,xmm9,xmm6
- vmovdqu xmm2,XMMWORD PTR[((64-128))+rdi]
- vpand xmm10,xmm10,xmm6
- vmovdqu xmm5,XMMWORD PTR[((96-128))+rdi]
- vpand xmm11,xmm11,xmm6
- vpaddd xmm8,xmm8,xmm0
- vmovdqu xmm0,XMMWORD PTR[((128-128))+rdi]
- vpand xmm12,xmm12,xmm6
- vpaddd xmm9,xmm9,xmm1
- vmovdqu xmm1,XMMWORD PTR[((160-128))+rdi]
- vpand xmm13,xmm13,xmm6
- vpaddd xmm10,xmm10,xmm2
- vmovdqu xmm2,XMMWORD PTR[((192-128))+rdi]
- vpand xmm14,xmm14,xmm6
- vpaddd xmm11,xmm11,xmm5
- vmovdqu xmm5,XMMWORD PTR[((224-128))+rdi]
- vpand xmm15,xmm15,xmm6
- vpaddd xmm12,xmm12,xmm0
- vpaddd xmm13,xmm13,xmm1
- vmovdqu XMMWORD PTR[(0-128)+rdi],xmm8
- vpaddd xmm14,xmm14,xmm2
- vmovdqu XMMWORD PTR[(32-128)+rdi],xmm9
- vpaddd xmm15,xmm15,xmm5
- vmovdqu XMMWORD PTR[(64-128)+rdi],xmm10
- vmovdqu XMMWORD PTR[(96-128)+rdi],xmm11
- vmovdqu XMMWORD PTR[(128-128)+rdi],xmm12
- vmovdqu XMMWORD PTR[(160-128)+rdi],xmm13
- vmovdqu XMMWORD PTR[(192-128)+rdi],xmm14
- vmovdqu XMMWORD PTR[(224-128)+rdi],xmm15
-
- vmovdqu XMMWORD PTR[rbx],xmm7
- vmovdqu xmm6,XMMWORD PTR[$L$pbswap]
- dec edx
- jnz $L$oop_avx
-
- mov edx,DWORD PTR[280+rsp]
- lea rdi,QWORD PTR[16+rdi]
- lea rsi,QWORD PTR[64+rsi]
- dec edx
- jnz $L$oop_grande_avx
-
-$L$done_avx::
- mov rax,QWORD PTR[272+rsp]
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-184))+rax]
- movaps xmm7,XMMWORD PTR[((-168))+rax]
- movaps xmm8,XMMWORD PTR[((-152))+rax]
- movaps xmm9,XMMWORD PTR[((-136))+rax]
- movaps xmm10,XMMWORD PTR[((-120))+rax]
- movaps xmm11,XMMWORD PTR[((-104))+rax]
- movaps xmm12,XMMWORD PTR[((-88))+rax]
- movaps xmm13,XMMWORD PTR[((-72))+rax]
- movaps xmm14,XMMWORD PTR[((-56))+rax]
- movaps xmm15,XMMWORD PTR[((-40))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$epilogue_avx::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha256_multi_block_avx::
-sha256_multi_block_avx ENDP
-
-ALIGN 32
-sha256_multi_block_avx2 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha256_multi_block_avx2::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-_avx2_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- lea rsp,QWORD PTR[((-168))+rsp]
- movaps XMMWORD PTR[rsp],xmm6
- movaps XMMWORD PTR[16+rsp],xmm7
- movaps XMMWORD PTR[32+rsp],xmm8
- movaps XMMWORD PTR[48+rsp],xmm9
- movaps XMMWORD PTR[64+rsp],xmm10
- movaps XMMWORD PTR[80+rsp],xmm11
- movaps XMMWORD PTR[(-120)+rax],xmm12
- movaps XMMWORD PTR[(-104)+rax],xmm13
- movaps XMMWORD PTR[(-88)+rax],xmm14
- movaps XMMWORD PTR[(-72)+rax],xmm15
- sub rsp,576
- and rsp,-256
- mov QWORD PTR[544+rsp],rax
-
-$L$body_avx2::
- lea rbp,QWORD PTR[((K256+128))]
- lea rdi,QWORD PTR[128+rdi]
-
-$L$oop_grande_avx2::
- mov DWORD PTR[552+rsp],edx
- xor edx,edx
- lea rbx,QWORD PTR[512+rsp]
- mov r12,QWORD PTR[rsi]
- mov ecx,DWORD PTR[8+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[rbx],ecx
- cmovle r12,rbp
- mov r13,QWORD PTR[16+rsi]
- mov ecx,DWORD PTR[24+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[4+rbx],ecx
- cmovle r13,rbp
- mov r14,QWORD PTR[32+rsi]
- mov ecx,DWORD PTR[40+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[8+rbx],ecx
- cmovle r14,rbp
- mov r15,QWORD PTR[48+rsi]
- mov ecx,DWORD PTR[56+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[12+rbx],ecx
- cmovle r15,rbp
- mov r8,QWORD PTR[64+rsi]
- mov ecx,DWORD PTR[72+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[16+rbx],ecx
- cmovle r8,rbp
- mov r9,QWORD PTR[80+rsi]
- mov ecx,DWORD PTR[88+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[20+rbx],ecx
- cmovle r9,rbp
- mov r10,QWORD PTR[96+rsi]
- mov ecx,DWORD PTR[104+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[24+rbx],ecx
- cmovle r10,rbp
- mov r11,QWORD PTR[112+rsi]
- mov ecx,DWORD PTR[120+rsi]
- cmp ecx,edx
- cmovg edx,ecx
- test ecx,ecx
- mov DWORD PTR[28+rbx],ecx
- cmovle r11,rbp
- vmovdqu ymm8,YMMWORD PTR[((0-128))+rdi]
- lea rax,QWORD PTR[128+rsp]
- vmovdqu ymm9,YMMWORD PTR[((32-128))+rdi]
- lea rbx,QWORD PTR[((256+128))+rsp]
- vmovdqu ymm10,YMMWORD PTR[((64-128))+rdi]
- vmovdqu ymm11,YMMWORD PTR[((96-128))+rdi]
- vmovdqu ymm12,YMMWORD PTR[((128-128))+rdi]
- vmovdqu ymm13,YMMWORD PTR[((160-128))+rdi]
- vmovdqu ymm14,YMMWORD PTR[((192-128))+rdi]
- vmovdqu ymm15,YMMWORD PTR[((224-128))+rdi]
- vmovdqu ymm6,YMMWORD PTR[$L$pbswap]
- jmp $L$oop_avx2
-
-ALIGN 32
-$L$oop_avx2::
- vpxor ymm4,ymm10,ymm9
- vmovd xmm5,DWORD PTR[r12]
- vmovd xmm0,DWORD PTR[r8]
- vmovd xmm1,DWORD PTR[r13]
- vmovd xmm2,DWORD PTR[r9]
- vpinsrd xmm5,xmm5,DWORD PTR[r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm12,6
- vpslld ymm2,ymm12,26
- vmovdqu YMMWORD PTR[(0-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm15
-
- vpsrld ymm1,ymm12,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm12,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-128))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm12,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm12,7
- vpandn ymm0,ymm12,ymm14
- vpand ymm3,ymm12,ymm13
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm15,ymm8,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm8,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm9,ymm8
-
- vpxor ymm15,ymm15,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm8,13
-
- vpslld ymm2,ymm8,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm15,ymm1
-
- vpsrld ymm1,ymm8,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm8,10
- vpxor ymm15,ymm9,ymm4
- vpaddd ymm11,ymm11,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm15,ymm15,ymm5
- vpaddd ymm15,ymm15,ymm7
- vmovd xmm5,DWORD PTR[4+r12]
- vmovd xmm0,DWORD PTR[4+r8]
- vmovd xmm1,DWORD PTR[4+r13]
- vmovd xmm2,DWORD PTR[4+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[4+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[4+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[4+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[4+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm11,6
- vpslld ymm2,ymm11,26
- vmovdqu YMMWORD PTR[(32-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm14
-
- vpsrld ymm1,ymm11,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm11,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-96))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm11,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm11,7
- vpandn ymm0,ymm11,ymm13
- vpand ymm4,ymm11,ymm12
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm14,ymm15,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm15,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm8,ymm15
-
- vpxor ymm14,ymm14,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm15,13
-
- vpslld ymm2,ymm15,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm14,ymm1
-
- vpsrld ymm1,ymm15,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm15,10
- vpxor ymm14,ymm8,ymm3
- vpaddd ymm10,ymm10,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm14,ymm14,ymm5
- vpaddd ymm14,ymm14,ymm7
- vmovd xmm5,DWORD PTR[8+r12]
- vmovd xmm0,DWORD PTR[8+r8]
- vmovd xmm1,DWORD PTR[8+r13]
- vmovd xmm2,DWORD PTR[8+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[8+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[8+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[8+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[8+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm10,6
- vpslld ymm2,ymm10,26
- vmovdqu YMMWORD PTR[(64-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm13
-
- vpsrld ymm1,ymm10,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm10,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-64))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm10,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm10,7
- vpandn ymm0,ymm10,ymm12
- vpand ymm3,ymm10,ymm11
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm13,ymm14,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm14,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm15,ymm14
-
- vpxor ymm13,ymm13,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm14,13
-
- vpslld ymm2,ymm14,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm13,ymm1
-
- vpsrld ymm1,ymm14,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm14,10
- vpxor ymm13,ymm15,ymm4
- vpaddd ymm9,ymm9,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm13,ymm13,ymm5
- vpaddd ymm13,ymm13,ymm7
- vmovd xmm5,DWORD PTR[12+r12]
- vmovd xmm0,DWORD PTR[12+r8]
- vmovd xmm1,DWORD PTR[12+r13]
- vmovd xmm2,DWORD PTR[12+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[12+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[12+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[12+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[12+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm9,6
- vpslld ymm2,ymm9,26
- vmovdqu YMMWORD PTR[(96-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm12
-
- vpsrld ymm1,ymm9,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm9,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-32))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm9,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm9,7
- vpandn ymm0,ymm9,ymm11
- vpand ymm4,ymm9,ymm10
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm12,ymm13,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm13,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm14,ymm13
-
- vpxor ymm12,ymm12,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm13,13
-
- vpslld ymm2,ymm13,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm12,ymm1
-
- vpsrld ymm1,ymm13,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm13,10
- vpxor ymm12,ymm14,ymm3
- vpaddd ymm8,ymm8,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm12,ymm12,ymm5
- vpaddd ymm12,ymm12,ymm7
- vmovd xmm5,DWORD PTR[16+r12]
- vmovd xmm0,DWORD PTR[16+r8]
- vmovd xmm1,DWORD PTR[16+r13]
- vmovd xmm2,DWORD PTR[16+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[16+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[16+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[16+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[16+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm8,6
- vpslld ymm2,ymm8,26
- vmovdqu YMMWORD PTR[(128-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm11
-
- vpsrld ymm1,ymm8,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm8,21
- vpaddd ymm5,ymm5,YMMWORD PTR[rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm8,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm8,7
- vpandn ymm0,ymm8,ymm10
- vpand ymm3,ymm8,ymm9
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm11,ymm12,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm12,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm13,ymm12
-
- vpxor ymm11,ymm11,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm12,13
-
- vpslld ymm2,ymm12,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm11,ymm1
-
- vpsrld ymm1,ymm12,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm12,10
- vpxor ymm11,ymm13,ymm4
- vpaddd ymm15,ymm15,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm11,ymm11,ymm5
- vpaddd ymm11,ymm11,ymm7
- vmovd xmm5,DWORD PTR[20+r12]
- vmovd xmm0,DWORD PTR[20+r8]
- vmovd xmm1,DWORD PTR[20+r13]
- vmovd xmm2,DWORD PTR[20+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[20+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[20+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[20+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[20+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm15,6
- vpslld ymm2,ymm15,26
- vmovdqu YMMWORD PTR[(160-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm10
-
- vpsrld ymm1,ymm15,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm15,21
- vpaddd ymm5,ymm5,YMMWORD PTR[32+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm15,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm15,7
- vpandn ymm0,ymm15,ymm9
- vpand ymm4,ymm15,ymm8
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm10,ymm11,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm11,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm12,ymm11
-
- vpxor ymm10,ymm10,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm11,13
-
- vpslld ymm2,ymm11,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm10,ymm1
-
- vpsrld ymm1,ymm11,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm11,10
- vpxor ymm10,ymm12,ymm3
- vpaddd ymm14,ymm14,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm10,ymm10,ymm5
- vpaddd ymm10,ymm10,ymm7
- vmovd xmm5,DWORD PTR[24+r12]
- vmovd xmm0,DWORD PTR[24+r8]
- vmovd xmm1,DWORD PTR[24+r13]
- vmovd xmm2,DWORD PTR[24+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[24+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[24+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[24+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[24+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm14,6
- vpslld ymm2,ymm14,26
- vmovdqu YMMWORD PTR[(192-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm9
-
- vpsrld ymm1,ymm14,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm14,21
- vpaddd ymm5,ymm5,YMMWORD PTR[64+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm14,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm14,7
- vpandn ymm0,ymm14,ymm8
- vpand ymm3,ymm14,ymm15
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm9,ymm10,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm10,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm11,ymm10
-
- vpxor ymm9,ymm9,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm10,13
-
- vpslld ymm2,ymm10,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm9,ymm1
-
- vpsrld ymm1,ymm10,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm10,10
- vpxor ymm9,ymm11,ymm4
- vpaddd ymm13,ymm13,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm9,ymm9,ymm5
- vpaddd ymm9,ymm9,ymm7
- vmovd xmm5,DWORD PTR[28+r12]
- vmovd xmm0,DWORD PTR[28+r8]
- vmovd xmm1,DWORD PTR[28+r13]
- vmovd xmm2,DWORD PTR[28+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[28+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[28+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[28+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[28+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm13,6
- vpslld ymm2,ymm13,26
- vmovdqu YMMWORD PTR[(224-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm8
-
- vpsrld ymm1,ymm13,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm13,21
- vpaddd ymm5,ymm5,YMMWORD PTR[96+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm13,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm13,7
- vpandn ymm0,ymm13,ymm15
- vpand ymm4,ymm13,ymm14
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm8,ymm9,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm9,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm10,ymm9
-
- vpxor ymm8,ymm8,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm9,13
-
- vpslld ymm2,ymm9,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm8,ymm1
-
- vpsrld ymm1,ymm9,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm9,10
- vpxor ymm8,ymm10,ymm3
- vpaddd ymm12,ymm12,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm8,ymm8,ymm5
- vpaddd ymm8,ymm8,ymm7
- add rbp,256
- vmovd xmm5,DWORD PTR[32+r12]
- vmovd xmm0,DWORD PTR[32+r8]
- vmovd xmm1,DWORD PTR[32+r13]
- vmovd xmm2,DWORD PTR[32+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[32+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[32+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[32+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[32+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm12,6
- vpslld ymm2,ymm12,26
- vmovdqu YMMWORD PTR[(256-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm15
-
- vpsrld ymm1,ymm12,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm12,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-128))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm12,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm12,7
- vpandn ymm0,ymm12,ymm14
- vpand ymm3,ymm12,ymm13
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm15,ymm8,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm8,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm9,ymm8
-
- vpxor ymm15,ymm15,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm8,13
-
- vpslld ymm2,ymm8,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm15,ymm1
-
- vpsrld ymm1,ymm8,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm8,10
- vpxor ymm15,ymm9,ymm4
- vpaddd ymm11,ymm11,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm15,ymm15,ymm5
- vpaddd ymm15,ymm15,ymm7
- vmovd xmm5,DWORD PTR[36+r12]
- vmovd xmm0,DWORD PTR[36+r8]
- vmovd xmm1,DWORD PTR[36+r13]
- vmovd xmm2,DWORD PTR[36+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[36+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[36+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[36+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[36+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm11,6
- vpslld ymm2,ymm11,26
- vmovdqu YMMWORD PTR[(288-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm14
-
- vpsrld ymm1,ymm11,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm11,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-96))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm11,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm11,7
- vpandn ymm0,ymm11,ymm13
- vpand ymm4,ymm11,ymm12
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm14,ymm15,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm15,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm8,ymm15
-
- vpxor ymm14,ymm14,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm15,13
-
- vpslld ymm2,ymm15,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm14,ymm1
-
- vpsrld ymm1,ymm15,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm15,10
- vpxor ymm14,ymm8,ymm3
- vpaddd ymm10,ymm10,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm14,ymm14,ymm5
- vpaddd ymm14,ymm14,ymm7
- vmovd xmm5,DWORD PTR[40+r12]
- vmovd xmm0,DWORD PTR[40+r8]
- vmovd xmm1,DWORD PTR[40+r13]
- vmovd xmm2,DWORD PTR[40+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[40+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[40+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[40+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[40+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm10,6
- vpslld ymm2,ymm10,26
- vmovdqu YMMWORD PTR[(320-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm13
-
- vpsrld ymm1,ymm10,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm10,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-64))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm10,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm10,7
- vpandn ymm0,ymm10,ymm12
- vpand ymm3,ymm10,ymm11
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm13,ymm14,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm14,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm15,ymm14
-
- vpxor ymm13,ymm13,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm14,13
-
- vpslld ymm2,ymm14,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm13,ymm1
-
- vpsrld ymm1,ymm14,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm14,10
- vpxor ymm13,ymm15,ymm4
- vpaddd ymm9,ymm9,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm13,ymm13,ymm5
- vpaddd ymm13,ymm13,ymm7
- vmovd xmm5,DWORD PTR[44+r12]
- vmovd xmm0,DWORD PTR[44+r8]
- vmovd xmm1,DWORD PTR[44+r13]
- vmovd xmm2,DWORD PTR[44+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[44+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[44+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[44+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[44+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm9,6
- vpslld ymm2,ymm9,26
- vmovdqu YMMWORD PTR[(352-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm12
-
- vpsrld ymm1,ymm9,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm9,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-32))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm9,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm9,7
- vpandn ymm0,ymm9,ymm11
- vpand ymm4,ymm9,ymm10
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm12,ymm13,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm13,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm14,ymm13
-
- vpxor ymm12,ymm12,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm13,13
-
- vpslld ymm2,ymm13,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm12,ymm1
-
- vpsrld ymm1,ymm13,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm13,10
- vpxor ymm12,ymm14,ymm3
- vpaddd ymm8,ymm8,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm12,ymm12,ymm5
- vpaddd ymm12,ymm12,ymm7
- vmovd xmm5,DWORD PTR[48+r12]
- vmovd xmm0,DWORD PTR[48+r8]
- vmovd xmm1,DWORD PTR[48+r13]
- vmovd xmm2,DWORD PTR[48+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[48+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[48+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[48+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[48+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm8,6
- vpslld ymm2,ymm8,26
- vmovdqu YMMWORD PTR[(384-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm11
-
- vpsrld ymm1,ymm8,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm8,21
- vpaddd ymm5,ymm5,YMMWORD PTR[rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm8,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm8,7
- vpandn ymm0,ymm8,ymm10
- vpand ymm3,ymm8,ymm9
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm11,ymm12,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm12,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm13,ymm12
-
- vpxor ymm11,ymm11,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm12,13
-
- vpslld ymm2,ymm12,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm11,ymm1
-
- vpsrld ymm1,ymm12,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm12,10
- vpxor ymm11,ymm13,ymm4
- vpaddd ymm15,ymm15,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm11,ymm11,ymm5
- vpaddd ymm11,ymm11,ymm7
- vmovd xmm5,DWORD PTR[52+r12]
- vmovd xmm0,DWORD PTR[52+r8]
- vmovd xmm1,DWORD PTR[52+r13]
- vmovd xmm2,DWORD PTR[52+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[52+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[52+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[52+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[52+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm15,6
- vpslld ymm2,ymm15,26
- vmovdqu YMMWORD PTR[(416-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm10
-
- vpsrld ymm1,ymm15,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm15,21
- vpaddd ymm5,ymm5,YMMWORD PTR[32+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm15,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm15,7
- vpandn ymm0,ymm15,ymm9
- vpand ymm4,ymm15,ymm8
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm10,ymm11,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm11,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm12,ymm11
-
- vpxor ymm10,ymm10,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm11,13
-
- vpslld ymm2,ymm11,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm10,ymm1
-
- vpsrld ymm1,ymm11,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm11,10
- vpxor ymm10,ymm12,ymm3
- vpaddd ymm14,ymm14,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm10,ymm10,ymm5
- vpaddd ymm10,ymm10,ymm7
- vmovd xmm5,DWORD PTR[56+r12]
- vmovd xmm0,DWORD PTR[56+r8]
- vmovd xmm1,DWORD PTR[56+r13]
- vmovd xmm2,DWORD PTR[56+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[56+r14],1
- vpinsrd xmm0,xmm0,DWORD PTR[56+r10],1
- vpinsrd xmm1,xmm1,DWORD PTR[56+r15],1
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[56+r11],1
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm14,6
- vpslld ymm2,ymm14,26
- vmovdqu YMMWORD PTR[(448-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm9
-
- vpsrld ymm1,ymm14,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm14,21
- vpaddd ymm5,ymm5,YMMWORD PTR[64+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm14,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm14,7
- vpandn ymm0,ymm14,ymm8
- vpand ymm3,ymm14,ymm15
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm9,ymm10,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm10,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm11,ymm10
-
- vpxor ymm9,ymm9,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm10,13
-
- vpslld ymm2,ymm10,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm9,ymm1
-
- vpsrld ymm1,ymm10,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm10,10
- vpxor ymm9,ymm11,ymm4
- vpaddd ymm13,ymm13,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm9,ymm9,ymm5
- vpaddd ymm9,ymm9,ymm7
- vmovd xmm5,DWORD PTR[60+r12]
- lea r12,QWORD PTR[64+r12]
- vmovd xmm0,DWORD PTR[60+r8]
- lea r8,QWORD PTR[64+r8]
- vmovd xmm1,DWORD PTR[60+r13]
- lea r13,QWORD PTR[64+r13]
- vmovd xmm2,DWORD PTR[60+r9]
- lea r9,QWORD PTR[64+r9]
- vpinsrd xmm5,xmm5,DWORD PTR[60+r14],1
- lea r14,QWORD PTR[64+r14]
- vpinsrd xmm0,xmm0,DWORD PTR[60+r10],1
- lea r10,QWORD PTR[64+r10]
- vpinsrd xmm1,xmm1,DWORD PTR[60+r15],1
- lea r15,QWORD PTR[64+r15]
- vpunpckldq ymm5,ymm5,ymm1
- vpinsrd xmm2,xmm2,DWORD PTR[60+r11],1
- lea r11,QWORD PTR[64+r11]
- vpunpckldq ymm0,ymm0,ymm2
- vinserti128 ymm5,ymm5,xmm0,1
- vpshufb ymm5,ymm5,ymm6
- vpsrld ymm7,ymm13,6
- vpslld ymm2,ymm13,26
- vmovdqu YMMWORD PTR[(480-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm8
-
- vpsrld ymm1,ymm13,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm13,21
- vpaddd ymm5,ymm5,YMMWORD PTR[96+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm13,25
- vpxor ymm7,ymm7,ymm2
- prefetcht0 [63+r12]
- vpslld ymm2,ymm13,7
- vpandn ymm0,ymm13,ymm15
- vpand ymm4,ymm13,ymm14
- prefetcht0 [63+r13]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm8,ymm9,2
- vpxor ymm7,ymm7,ymm2
- prefetcht0 [63+r14]
- vpslld ymm1,ymm9,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm10,ymm9
- prefetcht0 [63+r15]
- vpxor ymm8,ymm8,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm9,13
- prefetcht0 [63+r8]
- vpslld ymm2,ymm9,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm3,ymm3,ymm4
- prefetcht0 [63+r9]
- vpxor ymm7,ymm8,ymm1
-
- vpsrld ymm1,ymm9,22
- vpxor ymm7,ymm7,ymm2
- prefetcht0 [63+r10]
- vpslld ymm2,ymm9,10
- vpxor ymm8,ymm10,ymm3
- vpaddd ymm12,ymm12,ymm5
- prefetcht0 [63+r11]
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm8,ymm8,ymm5
- vpaddd ymm8,ymm8,ymm7
- add rbp,256
- vmovdqu ymm5,YMMWORD PTR[((0-128))+rax]
- mov ecx,3
- jmp $L$oop_16_xx_avx2
-ALIGN 32
-$L$oop_16_xx_avx2::
- vmovdqu ymm6,YMMWORD PTR[((32-128))+rax]
- vpaddd ymm5,ymm5,YMMWORD PTR[((288-256-128))+rbx]
-
- vpsrld ymm7,ymm6,3
- vpsrld ymm1,ymm6,7
- vpslld ymm2,ymm6,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm6,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm6,14
- vmovdqu ymm0,YMMWORD PTR[((448-256-128))+rbx]
- vpsrld ymm3,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm5,ymm5,ymm7
- vpxor ymm7,ymm3,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm5,ymm5,ymm7
- vpsrld ymm7,ymm12,6
- vpslld ymm2,ymm12,26
- vmovdqu YMMWORD PTR[(0-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm15
-
- vpsrld ymm1,ymm12,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm12,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-128))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm12,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm12,7
- vpandn ymm0,ymm12,ymm14
- vpand ymm3,ymm12,ymm13
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm15,ymm8,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm8,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm9,ymm8
-
- vpxor ymm15,ymm15,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm8,13
-
- vpslld ymm2,ymm8,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm15,ymm1
-
- vpsrld ymm1,ymm8,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm8,10
- vpxor ymm15,ymm9,ymm4
- vpaddd ymm11,ymm11,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm15,ymm15,ymm5
- vpaddd ymm15,ymm15,ymm7
- vmovdqu ymm5,YMMWORD PTR[((64-128))+rax]
- vpaddd ymm6,ymm6,YMMWORD PTR[((320-256-128))+rbx]
-
- vpsrld ymm7,ymm5,3
- vpsrld ymm1,ymm5,7
- vpslld ymm2,ymm5,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm5,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm5,14
- vmovdqu ymm0,YMMWORD PTR[((480-256-128))+rbx]
- vpsrld ymm4,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm6,ymm6,ymm7
- vpxor ymm7,ymm4,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm6,ymm6,ymm7
- vpsrld ymm7,ymm11,6
- vpslld ymm2,ymm11,26
- vmovdqu YMMWORD PTR[(32-128)+rax],ymm6
- vpaddd ymm6,ymm6,ymm14
-
- vpsrld ymm1,ymm11,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm11,21
- vpaddd ymm6,ymm6,YMMWORD PTR[((-96))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm11,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm11,7
- vpandn ymm0,ymm11,ymm13
- vpand ymm4,ymm11,ymm12
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm14,ymm15,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm15,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm8,ymm15
-
- vpxor ymm14,ymm14,ymm1
- vpaddd ymm6,ymm6,ymm7
-
- vpsrld ymm1,ymm15,13
-
- vpslld ymm2,ymm15,19
- vpaddd ymm6,ymm6,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm14,ymm1
-
- vpsrld ymm1,ymm15,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm15,10
- vpxor ymm14,ymm8,ymm3
- vpaddd ymm10,ymm10,ymm6
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm14,ymm14,ymm6
- vpaddd ymm14,ymm14,ymm7
- vmovdqu ymm6,YMMWORD PTR[((96-128))+rax]
- vpaddd ymm5,ymm5,YMMWORD PTR[((352-256-128))+rbx]
-
- vpsrld ymm7,ymm6,3
- vpsrld ymm1,ymm6,7
- vpslld ymm2,ymm6,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm6,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm6,14
- vmovdqu ymm0,YMMWORD PTR[((0-128))+rax]
- vpsrld ymm3,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm5,ymm5,ymm7
- vpxor ymm7,ymm3,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm5,ymm5,ymm7
- vpsrld ymm7,ymm10,6
- vpslld ymm2,ymm10,26
- vmovdqu YMMWORD PTR[(64-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm13
-
- vpsrld ymm1,ymm10,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm10,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-64))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm10,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm10,7
- vpandn ymm0,ymm10,ymm12
- vpand ymm3,ymm10,ymm11
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm13,ymm14,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm14,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm15,ymm14
-
- vpxor ymm13,ymm13,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm14,13
-
- vpslld ymm2,ymm14,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm13,ymm1
-
- vpsrld ymm1,ymm14,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm14,10
- vpxor ymm13,ymm15,ymm4
- vpaddd ymm9,ymm9,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm13,ymm13,ymm5
- vpaddd ymm13,ymm13,ymm7
- vmovdqu ymm5,YMMWORD PTR[((128-128))+rax]
- vpaddd ymm6,ymm6,YMMWORD PTR[((384-256-128))+rbx]
-
- vpsrld ymm7,ymm5,3
- vpsrld ymm1,ymm5,7
- vpslld ymm2,ymm5,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm5,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm5,14
- vmovdqu ymm0,YMMWORD PTR[((32-128))+rax]
- vpsrld ymm4,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm6,ymm6,ymm7
- vpxor ymm7,ymm4,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm6,ymm6,ymm7
- vpsrld ymm7,ymm9,6
- vpslld ymm2,ymm9,26
- vmovdqu YMMWORD PTR[(96-128)+rax],ymm6
- vpaddd ymm6,ymm6,ymm12
-
- vpsrld ymm1,ymm9,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm9,21
- vpaddd ymm6,ymm6,YMMWORD PTR[((-32))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm9,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm9,7
- vpandn ymm0,ymm9,ymm11
- vpand ymm4,ymm9,ymm10
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm12,ymm13,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm13,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm14,ymm13
-
- vpxor ymm12,ymm12,ymm1
- vpaddd ymm6,ymm6,ymm7
-
- vpsrld ymm1,ymm13,13
-
- vpslld ymm2,ymm13,19
- vpaddd ymm6,ymm6,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm12,ymm1
-
- vpsrld ymm1,ymm13,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm13,10
- vpxor ymm12,ymm14,ymm3
- vpaddd ymm8,ymm8,ymm6
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm12,ymm12,ymm6
- vpaddd ymm12,ymm12,ymm7
- vmovdqu ymm6,YMMWORD PTR[((160-128))+rax]
- vpaddd ymm5,ymm5,YMMWORD PTR[((416-256-128))+rbx]
-
- vpsrld ymm7,ymm6,3
- vpsrld ymm1,ymm6,7
- vpslld ymm2,ymm6,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm6,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm6,14
- vmovdqu ymm0,YMMWORD PTR[((64-128))+rax]
- vpsrld ymm3,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm5,ymm5,ymm7
- vpxor ymm7,ymm3,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm5,ymm5,ymm7
- vpsrld ymm7,ymm8,6
- vpslld ymm2,ymm8,26
- vmovdqu YMMWORD PTR[(128-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm11
-
- vpsrld ymm1,ymm8,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm8,21
- vpaddd ymm5,ymm5,YMMWORD PTR[rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm8,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm8,7
- vpandn ymm0,ymm8,ymm10
- vpand ymm3,ymm8,ymm9
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm11,ymm12,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm12,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm13,ymm12
-
- vpxor ymm11,ymm11,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm12,13
-
- vpslld ymm2,ymm12,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm11,ymm1
-
- vpsrld ymm1,ymm12,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm12,10
- vpxor ymm11,ymm13,ymm4
- vpaddd ymm15,ymm15,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm11,ymm11,ymm5
- vpaddd ymm11,ymm11,ymm7
- vmovdqu ymm5,YMMWORD PTR[((192-128))+rax]
- vpaddd ymm6,ymm6,YMMWORD PTR[((448-256-128))+rbx]
-
- vpsrld ymm7,ymm5,3
- vpsrld ymm1,ymm5,7
- vpslld ymm2,ymm5,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm5,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm5,14
- vmovdqu ymm0,YMMWORD PTR[((96-128))+rax]
- vpsrld ymm4,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm6,ymm6,ymm7
- vpxor ymm7,ymm4,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm6,ymm6,ymm7
- vpsrld ymm7,ymm15,6
- vpslld ymm2,ymm15,26
- vmovdqu YMMWORD PTR[(160-128)+rax],ymm6
- vpaddd ymm6,ymm6,ymm10
-
- vpsrld ymm1,ymm15,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm15,21
- vpaddd ymm6,ymm6,YMMWORD PTR[32+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm15,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm15,7
- vpandn ymm0,ymm15,ymm9
- vpand ymm4,ymm15,ymm8
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm10,ymm11,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm11,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm12,ymm11
-
- vpxor ymm10,ymm10,ymm1
- vpaddd ymm6,ymm6,ymm7
-
- vpsrld ymm1,ymm11,13
-
- vpslld ymm2,ymm11,19
- vpaddd ymm6,ymm6,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm10,ymm1
-
- vpsrld ymm1,ymm11,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm11,10
- vpxor ymm10,ymm12,ymm3
- vpaddd ymm14,ymm14,ymm6
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm10,ymm10,ymm6
- vpaddd ymm10,ymm10,ymm7
- vmovdqu ymm6,YMMWORD PTR[((224-128))+rax]
- vpaddd ymm5,ymm5,YMMWORD PTR[((480-256-128))+rbx]
-
- vpsrld ymm7,ymm6,3
- vpsrld ymm1,ymm6,7
- vpslld ymm2,ymm6,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm6,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm6,14
- vmovdqu ymm0,YMMWORD PTR[((128-128))+rax]
- vpsrld ymm3,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm5,ymm5,ymm7
- vpxor ymm7,ymm3,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm5,ymm5,ymm7
- vpsrld ymm7,ymm14,6
- vpslld ymm2,ymm14,26
- vmovdqu YMMWORD PTR[(192-128)+rax],ymm5
- vpaddd ymm5,ymm5,ymm9
-
- vpsrld ymm1,ymm14,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm14,21
- vpaddd ymm5,ymm5,YMMWORD PTR[64+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm14,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm14,7
- vpandn ymm0,ymm14,ymm8
- vpand ymm3,ymm14,ymm15
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm9,ymm10,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm10,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm11,ymm10
-
- vpxor ymm9,ymm9,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm10,13
-
- vpslld ymm2,ymm10,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm9,ymm1
-
- vpsrld ymm1,ymm10,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm10,10
- vpxor ymm9,ymm11,ymm4
- vpaddd ymm13,ymm13,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm9,ymm9,ymm5
- vpaddd ymm9,ymm9,ymm7
- vmovdqu ymm5,YMMWORD PTR[((256-256-128))+rbx]
- vpaddd ymm6,ymm6,YMMWORD PTR[((0-128))+rax]
-
- vpsrld ymm7,ymm5,3
- vpsrld ymm1,ymm5,7
- vpslld ymm2,ymm5,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm5,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm5,14
- vmovdqu ymm0,YMMWORD PTR[((160-128))+rax]
- vpsrld ymm4,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm6,ymm6,ymm7
- vpxor ymm7,ymm4,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm6,ymm6,ymm7
- vpsrld ymm7,ymm13,6
- vpslld ymm2,ymm13,26
- vmovdqu YMMWORD PTR[(224-128)+rax],ymm6
- vpaddd ymm6,ymm6,ymm8
-
- vpsrld ymm1,ymm13,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm13,21
- vpaddd ymm6,ymm6,YMMWORD PTR[96+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm13,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm13,7
- vpandn ymm0,ymm13,ymm15
- vpand ymm4,ymm13,ymm14
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm8,ymm9,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm9,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm10,ymm9
-
- vpxor ymm8,ymm8,ymm1
- vpaddd ymm6,ymm6,ymm7
-
- vpsrld ymm1,ymm9,13
-
- vpslld ymm2,ymm9,19
- vpaddd ymm6,ymm6,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm8,ymm1
-
- vpsrld ymm1,ymm9,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm9,10
- vpxor ymm8,ymm10,ymm3
- vpaddd ymm12,ymm12,ymm6
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm8,ymm8,ymm6
- vpaddd ymm8,ymm8,ymm7
- add rbp,256
- vmovdqu ymm6,YMMWORD PTR[((288-256-128))+rbx]
- vpaddd ymm5,ymm5,YMMWORD PTR[((32-128))+rax]
-
- vpsrld ymm7,ymm6,3
- vpsrld ymm1,ymm6,7
- vpslld ymm2,ymm6,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm6,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm6,14
- vmovdqu ymm0,YMMWORD PTR[((192-128))+rax]
- vpsrld ymm3,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm5,ymm5,ymm7
- vpxor ymm7,ymm3,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm5,ymm5,ymm7
- vpsrld ymm7,ymm12,6
- vpslld ymm2,ymm12,26
- vmovdqu YMMWORD PTR[(256-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm15
-
- vpsrld ymm1,ymm12,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm12,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-128))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm12,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm12,7
- vpandn ymm0,ymm12,ymm14
- vpand ymm3,ymm12,ymm13
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm15,ymm8,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm8,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm9,ymm8
-
- vpxor ymm15,ymm15,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm8,13
-
- vpslld ymm2,ymm8,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm15,ymm1
-
- vpsrld ymm1,ymm8,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm8,10
- vpxor ymm15,ymm9,ymm4
- vpaddd ymm11,ymm11,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm15,ymm15,ymm5
- vpaddd ymm15,ymm15,ymm7
- vmovdqu ymm5,YMMWORD PTR[((320-256-128))+rbx]
- vpaddd ymm6,ymm6,YMMWORD PTR[((64-128))+rax]
-
- vpsrld ymm7,ymm5,3
- vpsrld ymm1,ymm5,7
- vpslld ymm2,ymm5,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm5,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm5,14
- vmovdqu ymm0,YMMWORD PTR[((224-128))+rax]
- vpsrld ymm4,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm6,ymm6,ymm7
- vpxor ymm7,ymm4,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm6,ymm6,ymm7
- vpsrld ymm7,ymm11,6
- vpslld ymm2,ymm11,26
- vmovdqu YMMWORD PTR[(288-256-128)+rbx],ymm6
- vpaddd ymm6,ymm6,ymm14
-
- vpsrld ymm1,ymm11,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm11,21
- vpaddd ymm6,ymm6,YMMWORD PTR[((-96))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm11,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm11,7
- vpandn ymm0,ymm11,ymm13
- vpand ymm4,ymm11,ymm12
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm14,ymm15,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm15,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm8,ymm15
-
- vpxor ymm14,ymm14,ymm1
- vpaddd ymm6,ymm6,ymm7
-
- vpsrld ymm1,ymm15,13
-
- vpslld ymm2,ymm15,19
- vpaddd ymm6,ymm6,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm14,ymm1
-
- vpsrld ymm1,ymm15,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm15,10
- vpxor ymm14,ymm8,ymm3
- vpaddd ymm10,ymm10,ymm6
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm14,ymm14,ymm6
- vpaddd ymm14,ymm14,ymm7
- vmovdqu ymm6,YMMWORD PTR[((352-256-128))+rbx]
- vpaddd ymm5,ymm5,YMMWORD PTR[((96-128))+rax]
-
- vpsrld ymm7,ymm6,3
- vpsrld ymm1,ymm6,7
- vpslld ymm2,ymm6,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm6,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm6,14
- vmovdqu ymm0,YMMWORD PTR[((256-256-128))+rbx]
- vpsrld ymm3,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm5,ymm5,ymm7
- vpxor ymm7,ymm3,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm5,ymm5,ymm7
- vpsrld ymm7,ymm10,6
- vpslld ymm2,ymm10,26
- vmovdqu YMMWORD PTR[(320-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm13
-
- vpsrld ymm1,ymm10,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm10,21
- vpaddd ymm5,ymm5,YMMWORD PTR[((-64))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm10,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm10,7
- vpandn ymm0,ymm10,ymm12
- vpand ymm3,ymm10,ymm11
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm13,ymm14,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm14,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm15,ymm14
-
- vpxor ymm13,ymm13,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm14,13
-
- vpslld ymm2,ymm14,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm13,ymm1
-
- vpsrld ymm1,ymm14,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm14,10
- vpxor ymm13,ymm15,ymm4
- vpaddd ymm9,ymm9,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm13,ymm13,ymm5
- vpaddd ymm13,ymm13,ymm7
- vmovdqu ymm5,YMMWORD PTR[((384-256-128))+rbx]
- vpaddd ymm6,ymm6,YMMWORD PTR[((128-128))+rax]
-
- vpsrld ymm7,ymm5,3
- vpsrld ymm1,ymm5,7
- vpslld ymm2,ymm5,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm5,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm5,14
- vmovdqu ymm0,YMMWORD PTR[((288-256-128))+rbx]
- vpsrld ymm4,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm6,ymm6,ymm7
- vpxor ymm7,ymm4,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm6,ymm6,ymm7
- vpsrld ymm7,ymm9,6
- vpslld ymm2,ymm9,26
- vmovdqu YMMWORD PTR[(352-256-128)+rbx],ymm6
- vpaddd ymm6,ymm6,ymm12
-
- vpsrld ymm1,ymm9,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm9,21
- vpaddd ymm6,ymm6,YMMWORD PTR[((-32))+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm9,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm9,7
- vpandn ymm0,ymm9,ymm11
- vpand ymm4,ymm9,ymm10
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm12,ymm13,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm13,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm14,ymm13
-
- vpxor ymm12,ymm12,ymm1
- vpaddd ymm6,ymm6,ymm7
-
- vpsrld ymm1,ymm13,13
-
- vpslld ymm2,ymm13,19
- vpaddd ymm6,ymm6,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm12,ymm1
-
- vpsrld ymm1,ymm13,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm13,10
- vpxor ymm12,ymm14,ymm3
- vpaddd ymm8,ymm8,ymm6
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm12,ymm12,ymm6
- vpaddd ymm12,ymm12,ymm7
- vmovdqu ymm6,YMMWORD PTR[((416-256-128))+rbx]
- vpaddd ymm5,ymm5,YMMWORD PTR[((160-128))+rax]
-
- vpsrld ymm7,ymm6,3
- vpsrld ymm1,ymm6,7
- vpslld ymm2,ymm6,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm6,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm6,14
- vmovdqu ymm0,YMMWORD PTR[((320-256-128))+rbx]
- vpsrld ymm3,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm5,ymm5,ymm7
- vpxor ymm7,ymm3,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm5,ymm5,ymm7
- vpsrld ymm7,ymm8,6
- vpslld ymm2,ymm8,26
- vmovdqu YMMWORD PTR[(384-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm11
-
- vpsrld ymm1,ymm8,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm8,21
- vpaddd ymm5,ymm5,YMMWORD PTR[rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm8,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm8,7
- vpandn ymm0,ymm8,ymm10
- vpand ymm3,ymm8,ymm9
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm11,ymm12,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm12,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm13,ymm12
-
- vpxor ymm11,ymm11,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm12,13
-
- vpslld ymm2,ymm12,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm11,ymm1
-
- vpsrld ymm1,ymm12,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm12,10
- vpxor ymm11,ymm13,ymm4
- vpaddd ymm15,ymm15,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm11,ymm11,ymm5
- vpaddd ymm11,ymm11,ymm7
- vmovdqu ymm5,YMMWORD PTR[((448-256-128))+rbx]
- vpaddd ymm6,ymm6,YMMWORD PTR[((192-128))+rax]
-
- vpsrld ymm7,ymm5,3
- vpsrld ymm1,ymm5,7
- vpslld ymm2,ymm5,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm5,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm5,14
- vmovdqu ymm0,YMMWORD PTR[((352-256-128))+rbx]
- vpsrld ymm4,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm6,ymm6,ymm7
- vpxor ymm7,ymm4,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm6,ymm6,ymm7
- vpsrld ymm7,ymm15,6
- vpslld ymm2,ymm15,26
- vmovdqu YMMWORD PTR[(416-256-128)+rbx],ymm6
- vpaddd ymm6,ymm6,ymm10
-
- vpsrld ymm1,ymm15,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm15,21
- vpaddd ymm6,ymm6,YMMWORD PTR[32+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm15,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm15,7
- vpandn ymm0,ymm15,ymm9
- vpand ymm4,ymm15,ymm8
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm10,ymm11,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm11,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm12,ymm11
-
- vpxor ymm10,ymm10,ymm1
- vpaddd ymm6,ymm6,ymm7
-
- vpsrld ymm1,ymm11,13
-
- vpslld ymm2,ymm11,19
- vpaddd ymm6,ymm6,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm10,ymm1
-
- vpsrld ymm1,ymm11,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm11,10
- vpxor ymm10,ymm12,ymm3
- vpaddd ymm14,ymm14,ymm6
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm10,ymm10,ymm6
- vpaddd ymm10,ymm10,ymm7
- vmovdqu ymm6,YMMWORD PTR[((480-256-128))+rbx]
- vpaddd ymm5,ymm5,YMMWORD PTR[((224-128))+rax]
-
- vpsrld ymm7,ymm6,3
- vpsrld ymm1,ymm6,7
- vpslld ymm2,ymm6,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm6,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm6,14
- vmovdqu ymm0,YMMWORD PTR[((384-256-128))+rbx]
- vpsrld ymm3,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm5,ymm5,ymm7
- vpxor ymm7,ymm3,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm5,ymm5,ymm7
- vpsrld ymm7,ymm14,6
- vpslld ymm2,ymm14,26
- vmovdqu YMMWORD PTR[(448-256-128)+rbx],ymm5
- vpaddd ymm5,ymm5,ymm9
-
- vpsrld ymm1,ymm14,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm14,21
- vpaddd ymm5,ymm5,YMMWORD PTR[64+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm14,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm14,7
- vpandn ymm0,ymm14,ymm8
- vpand ymm3,ymm14,ymm15
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm9,ymm10,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm10,30
- vpxor ymm0,ymm0,ymm3
- vpxor ymm3,ymm11,ymm10
-
- vpxor ymm9,ymm9,ymm1
- vpaddd ymm5,ymm5,ymm7
-
- vpsrld ymm1,ymm10,13
-
- vpslld ymm2,ymm10,19
- vpaddd ymm5,ymm5,ymm0
- vpand ymm4,ymm4,ymm3
-
- vpxor ymm7,ymm9,ymm1
-
- vpsrld ymm1,ymm10,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm10,10
- vpxor ymm9,ymm11,ymm4
- vpaddd ymm13,ymm13,ymm5
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm9,ymm9,ymm5
- vpaddd ymm9,ymm9,ymm7
- vmovdqu ymm5,YMMWORD PTR[((0-128))+rax]
- vpaddd ymm6,ymm6,YMMWORD PTR[((256-256-128))+rbx]
-
- vpsrld ymm7,ymm5,3
- vpsrld ymm1,ymm5,7
- vpslld ymm2,ymm5,25
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm5,18
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm5,14
- vmovdqu ymm0,YMMWORD PTR[((416-256-128))+rbx]
- vpsrld ymm4,ymm0,10
-
- vpxor ymm7,ymm7,ymm1
- vpsrld ymm1,ymm0,17
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,15
- vpaddd ymm6,ymm6,ymm7
- vpxor ymm7,ymm4,ymm1
- vpsrld ymm1,ymm0,19
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm0,13
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
- vpaddd ymm6,ymm6,ymm7
- vpsrld ymm7,ymm13,6
- vpslld ymm2,ymm13,26
- vmovdqu YMMWORD PTR[(480-256-128)+rbx],ymm6
- vpaddd ymm6,ymm6,ymm8
-
- vpsrld ymm1,ymm13,11
- vpxor ymm7,ymm7,ymm2
- vpslld ymm2,ymm13,21
- vpaddd ymm6,ymm6,YMMWORD PTR[96+rbp]
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm1,ymm13,25
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm13,7
- vpandn ymm0,ymm13,ymm15
- vpand ymm4,ymm13,ymm14
-
- vpxor ymm7,ymm7,ymm1
-
- vpsrld ymm8,ymm9,2
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm1,ymm9,30
- vpxor ymm0,ymm0,ymm4
- vpxor ymm4,ymm10,ymm9
-
- vpxor ymm8,ymm8,ymm1
- vpaddd ymm6,ymm6,ymm7
-
- vpsrld ymm1,ymm9,13
-
- vpslld ymm2,ymm9,19
- vpaddd ymm6,ymm6,ymm0
- vpand ymm3,ymm3,ymm4
-
- vpxor ymm7,ymm8,ymm1
-
- vpsrld ymm1,ymm9,22
- vpxor ymm7,ymm7,ymm2
-
- vpslld ymm2,ymm9,10
- vpxor ymm8,ymm10,ymm3
- vpaddd ymm12,ymm12,ymm6
-
- vpxor ymm7,ymm7,ymm1
- vpxor ymm7,ymm7,ymm2
-
- vpaddd ymm8,ymm8,ymm6
- vpaddd ymm8,ymm8,ymm7
- add rbp,256
- dec ecx
- jnz $L$oop_16_xx_avx2
-
- mov ecx,1
- lea rbx,QWORD PTR[512+rsp]
- lea rbp,QWORD PTR[((K256+128))]
- cmp ecx,DWORD PTR[rbx]
- cmovge r12,rbp
- cmp ecx,DWORD PTR[4+rbx]
- cmovge r13,rbp
- cmp ecx,DWORD PTR[8+rbx]
- cmovge r14,rbp
- cmp ecx,DWORD PTR[12+rbx]
- cmovge r15,rbp
- cmp ecx,DWORD PTR[16+rbx]
- cmovge r8,rbp
- cmp ecx,DWORD PTR[20+rbx]
- cmovge r9,rbp
- cmp ecx,DWORD PTR[24+rbx]
- cmovge r10,rbp
- cmp ecx,DWORD PTR[28+rbx]
- cmovge r11,rbp
- vmovdqa ymm7,YMMWORD PTR[rbx]
- vpxor ymm0,ymm0,ymm0
- vmovdqa ymm6,ymm7
- vpcmpgtd ymm6,ymm6,ymm0
- vpaddd ymm7,ymm7,ymm6
-
- vmovdqu ymm0,YMMWORD PTR[((0-128))+rdi]
- vpand ymm8,ymm8,ymm6
- vmovdqu ymm1,YMMWORD PTR[((32-128))+rdi]
- vpand ymm9,ymm9,ymm6
- vmovdqu ymm2,YMMWORD PTR[((64-128))+rdi]
- vpand ymm10,ymm10,ymm6
- vmovdqu ymm5,YMMWORD PTR[((96-128))+rdi]
- vpand ymm11,ymm11,ymm6
- vpaddd ymm8,ymm8,ymm0
- vmovdqu ymm0,YMMWORD PTR[((128-128))+rdi]
- vpand ymm12,ymm12,ymm6
- vpaddd ymm9,ymm9,ymm1
- vmovdqu ymm1,YMMWORD PTR[((160-128))+rdi]
- vpand ymm13,ymm13,ymm6
- vpaddd ymm10,ymm10,ymm2
- vmovdqu ymm2,YMMWORD PTR[((192-128))+rdi]
- vpand ymm14,ymm14,ymm6
- vpaddd ymm11,ymm11,ymm5
- vmovdqu ymm5,YMMWORD PTR[((224-128))+rdi]
- vpand ymm15,ymm15,ymm6
- vpaddd ymm12,ymm12,ymm0
- vpaddd ymm13,ymm13,ymm1
- vmovdqu YMMWORD PTR[(0-128)+rdi],ymm8
- vpaddd ymm14,ymm14,ymm2
- vmovdqu YMMWORD PTR[(32-128)+rdi],ymm9
- vpaddd ymm15,ymm15,ymm5
- vmovdqu YMMWORD PTR[(64-128)+rdi],ymm10
- vmovdqu YMMWORD PTR[(96-128)+rdi],ymm11
- vmovdqu YMMWORD PTR[(128-128)+rdi],ymm12
- vmovdqu YMMWORD PTR[(160-128)+rdi],ymm13
- vmovdqu YMMWORD PTR[(192-128)+rdi],ymm14
- vmovdqu YMMWORD PTR[(224-128)+rdi],ymm15
-
- vmovdqu YMMWORD PTR[rbx],ymm7
- lea rbx,QWORD PTR[((256+128))+rsp]
- vmovdqu ymm6,YMMWORD PTR[$L$pbswap]
- dec edx
- jnz $L$oop_avx2
-
-
-
-
-
-
-
-$L$done_avx2::
- mov rax,QWORD PTR[544+rsp]
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((-216))+rax]
- movaps xmm7,XMMWORD PTR[((-200))+rax]
- movaps xmm8,XMMWORD PTR[((-184))+rax]
- movaps xmm9,XMMWORD PTR[((-168))+rax]
- movaps xmm10,XMMWORD PTR[((-152))+rax]
- movaps xmm11,XMMWORD PTR[((-136))+rax]
- movaps xmm12,XMMWORD PTR[((-120))+rax]
- movaps xmm13,XMMWORD PTR[((-104))+rax]
- movaps xmm14,XMMWORD PTR[((-88))+rax]
- movaps xmm15,XMMWORD PTR[((-72))+rax]
- mov r15,QWORD PTR[((-48))+rax]
-
- mov r14,QWORD PTR[((-40))+rax]
-
- mov r13,QWORD PTR[((-32))+rax]
-
- mov r12,QWORD PTR[((-24))+rax]
-
- mov rbp,QWORD PTR[((-16))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
-
- lea rsp,QWORD PTR[rax]
-
-$L$epilogue_avx2::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha256_multi_block_avx2::
-sha256_multi_block_avx2 ENDP
-ALIGN 256
-K256::
- DD 1116352408,1116352408,1116352408,1116352408
- DD 1116352408,1116352408,1116352408,1116352408
- DD 1899447441,1899447441,1899447441,1899447441
- DD 1899447441,1899447441,1899447441,1899447441
- DD 3049323471,3049323471,3049323471,3049323471
- DD 3049323471,3049323471,3049323471,3049323471
- DD 3921009573,3921009573,3921009573,3921009573
- DD 3921009573,3921009573,3921009573,3921009573
- DD 961987163,961987163,961987163,961987163
- DD 961987163,961987163,961987163,961987163
- DD 1508970993,1508970993,1508970993,1508970993
- DD 1508970993,1508970993,1508970993,1508970993
- DD 2453635748,2453635748,2453635748,2453635748
- DD 2453635748,2453635748,2453635748,2453635748
- DD 2870763221,2870763221,2870763221,2870763221
- DD 2870763221,2870763221,2870763221,2870763221
- DD 3624381080,3624381080,3624381080,3624381080
- DD 3624381080,3624381080,3624381080,3624381080
- DD 310598401,310598401,310598401,310598401
- DD 310598401,310598401,310598401,310598401
- DD 607225278,607225278,607225278,607225278
- DD 607225278,607225278,607225278,607225278
- DD 1426881987,1426881987,1426881987,1426881987
- DD 1426881987,1426881987,1426881987,1426881987
- DD 1925078388,1925078388,1925078388,1925078388
- DD 1925078388,1925078388,1925078388,1925078388
- DD 2162078206,2162078206,2162078206,2162078206
- DD 2162078206,2162078206,2162078206,2162078206
- DD 2614888103,2614888103,2614888103,2614888103
- DD 2614888103,2614888103,2614888103,2614888103
- DD 3248222580,3248222580,3248222580,3248222580
- DD 3248222580,3248222580,3248222580,3248222580
- DD 3835390401,3835390401,3835390401,3835390401
- DD 3835390401,3835390401,3835390401,3835390401
- DD 4022224774,4022224774,4022224774,4022224774
- DD 4022224774,4022224774,4022224774,4022224774
- DD 264347078,264347078,264347078,264347078
- DD 264347078,264347078,264347078,264347078
- DD 604807628,604807628,604807628,604807628
- DD 604807628,604807628,604807628,604807628
- DD 770255983,770255983,770255983,770255983
- DD 770255983,770255983,770255983,770255983
- DD 1249150122,1249150122,1249150122,1249150122
- DD 1249150122,1249150122,1249150122,1249150122
- DD 1555081692,1555081692,1555081692,1555081692
- DD 1555081692,1555081692,1555081692,1555081692
- DD 1996064986,1996064986,1996064986,1996064986
- DD 1996064986,1996064986,1996064986,1996064986
- DD 2554220882,2554220882,2554220882,2554220882
- DD 2554220882,2554220882,2554220882,2554220882
- DD 2821834349,2821834349,2821834349,2821834349
- DD 2821834349,2821834349,2821834349,2821834349
- DD 2952996808,2952996808,2952996808,2952996808
- DD 2952996808,2952996808,2952996808,2952996808
- DD 3210313671,3210313671,3210313671,3210313671
- DD 3210313671,3210313671,3210313671,3210313671
- DD 3336571891,3336571891,3336571891,3336571891
- DD 3336571891,3336571891,3336571891,3336571891
- DD 3584528711,3584528711,3584528711,3584528711
- DD 3584528711,3584528711,3584528711,3584528711
- DD 113926993,113926993,113926993,113926993
- DD 113926993,113926993,113926993,113926993
- DD 338241895,338241895,338241895,338241895
- DD 338241895,338241895,338241895,338241895
- DD 666307205,666307205,666307205,666307205
- DD 666307205,666307205,666307205,666307205
- DD 773529912,773529912,773529912,773529912
- DD 773529912,773529912,773529912,773529912
- DD 1294757372,1294757372,1294757372,1294757372
- DD 1294757372,1294757372,1294757372,1294757372
- DD 1396182291,1396182291,1396182291,1396182291
- DD 1396182291,1396182291,1396182291,1396182291
- DD 1695183700,1695183700,1695183700,1695183700
- DD 1695183700,1695183700,1695183700,1695183700
- DD 1986661051,1986661051,1986661051,1986661051
- DD 1986661051,1986661051,1986661051,1986661051
- DD 2177026350,2177026350,2177026350,2177026350
- DD 2177026350,2177026350,2177026350,2177026350
- DD 2456956037,2456956037,2456956037,2456956037
- DD 2456956037,2456956037,2456956037,2456956037
- DD 2730485921,2730485921,2730485921,2730485921
- DD 2730485921,2730485921,2730485921,2730485921
- DD 2820302411,2820302411,2820302411,2820302411
- DD 2820302411,2820302411,2820302411,2820302411
- DD 3259730800,3259730800,3259730800,3259730800
- DD 3259730800,3259730800,3259730800,3259730800
- DD 3345764771,3345764771,3345764771,3345764771
- DD 3345764771,3345764771,3345764771,3345764771
- DD 3516065817,3516065817,3516065817,3516065817
- DD 3516065817,3516065817,3516065817,3516065817
- DD 3600352804,3600352804,3600352804,3600352804
- DD 3600352804,3600352804,3600352804,3600352804
- DD 4094571909,4094571909,4094571909,4094571909
- DD 4094571909,4094571909,4094571909,4094571909
- DD 275423344,275423344,275423344,275423344
- DD 275423344,275423344,275423344,275423344
- DD 430227734,430227734,430227734,430227734
- DD 430227734,430227734,430227734,430227734
- DD 506948616,506948616,506948616,506948616
- DD 506948616,506948616,506948616,506948616
- DD 659060556,659060556,659060556,659060556
- DD 659060556,659060556,659060556,659060556
- DD 883997877,883997877,883997877,883997877
- DD 883997877,883997877,883997877,883997877
- DD 958139571,958139571,958139571,958139571
- DD 958139571,958139571,958139571,958139571
- DD 1322822218,1322822218,1322822218,1322822218
- DD 1322822218,1322822218,1322822218,1322822218
- DD 1537002063,1537002063,1537002063,1537002063
- DD 1537002063,1537002063,1537002063,1537002063
- DD 1747873779,1747873779,1747873779,1747873779
- DD 1747873779,1747873779,1747873779,1747873779
- DD 1955562222,1955562222,1955562222,1955562222
- DD 1955562222,1955562222,1955562222,1955562222
- DD 2024104815,2024104815,2024104815,2024104815
- DD 2024104815,2024104815,2024104815,2024104815
- DD 2227730452,2227730452,2227730452,2227730452
- DD 2227730452,2227730452,2227730452,2227730452
- DD 2361852424,2361852424,2361852424,2361852424
- DD 2361852424,2361852424,2361852424,2361852424
- DD 2428436474,2428436474,2428436474,2428436474
- DD 2428436474,2428436474,2428436474,2428436474
- DD 2756734187,2756734187,2756734187,2756734187
- DD 2756734187,2756734187,2756734187,2756734187
- DD 3204031479,3204031479,3204031479,3204031479
- DD 3204031479,3204031479,3204031479,3204031479
- DD 3329325298,3329325298,3329325298,3329325298
- DD 3329325298,3329325298,3329325298,3329325298
-$L$pbswap::
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
-K256_shaext::
- DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
- DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
- DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
- DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
- DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
- DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
- DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
- DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
- DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
- DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
- DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
- DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
- DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
- DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
- DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
- DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
-DB 83,72,65,50,53,54,32,109,117,108,116,105,45,98,108,111
-DB 99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114
-DB 32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71
-DB 65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112
-DB 101,110,115,115,108,46,111,114,103,62,0
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
-
- mov rax,QWORD PTR[272+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
-
- lea rsi,QWORD PTR[((-24-160))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-ALIGN 16
-avx2_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
-
- mov rax,QWORD PTR[544+r8]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
- lea rsi,QWORD PTR[((-56-160))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,20
- DD 0a548f3fch
-
- jmp $L$in_prologue
-avx2_handler ENDP
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_sha256_multi_block
- DD imagerel $L$SEH_end_sha256_multi_block
- DD imagerel $L$SEH_info_sha256_multi_block
- DD imagerel $L$SEH_begin_sha256_multi_block_shaext
- DD imagerel $L$SEH_end_sha256_multi_block_shaext
- DD imagerel $L$SEH_info_sha256_multi_block_shaext
- DD imagerel $L$SEH_begin_sha256_multi_block_avx
- DD imagerel $L$SEH_end_sha256_multi_block_avx
- DD imagerel $L$SEH_info_sha256_multi_block_avx
- DD imagerel $L$SEH_begin_sha256_multi_block_avx2
- DD imagerel $L$SEH_end_sha256_multi_block_avx2
- DD imagerel $L$SEH_info_sha256_multi_block_avx2
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_sha256_multi_block::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$body,imagerel $L$epilogue
-$L$SEH_info_sha256_multi_block_shaext::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$body_shaext,imagerel $L$epilogue_shaext
-$L$SEH_info_sha256_multi_block_avx::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$body_avx,imagerel $L$epilogue_avx
-$L$SEH_info_sha256_multi_block_avx2::
-DB 9,0,0,0
- DD imagerel avx2_handler
- DD imagerel $L$body_avx2,imagerel $L$epilogue_avx2
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+
+PUBLIC sha256_multi_block
+
+ALIGN 32
+sha256_multi_block PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha256_multi_block::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ mov rcx,QWORD PTR[((OPENSSL_ia32cap_P+4))]
+ bt rcx,61
+ jc _shaext_shortcut
+ test ecx,268435456
+ jnz _avx_shortcut
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[(-120)+rax],xmm10
+ movaps XMMWORD PTR[(-104)+rax],xmm11
+ movaps XMMWORD PTR[(-88)+rax],xmm12
+ movaps XMMWORD PTR[(-72)+rax],xmm13
+ movaps XMMWORD PTR[(-56)+rax],xmm14
+ movaps XMMWORD PTR[(-40)+rax],xmm15
+ sub rsp,288
+ and rsp,-256
+ mov QWORD PTR[272+rsp],rax
+
+$L$body::
+ lea rbp,QWORD PTR[((K256+128))]
+ lea rbx,QWORD PTR[256+rsp]
+ lea rdi,QWORD PTR[128+rdi]
+
+$L$oop_grande::
+ mov DWORD PTR[280+rsp],edx
+ xor edx,edx
+ mov r8,QWORD PTR[rsi]
+ mov ecx,DWORD PTR[8+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[rbx],ecx
+ cmovle r8,rbp
+ mov r9,QWORD PTR[16+rsi]
+ mov ecx,DWORD PTR[24+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[4+rbx],ecx
+ cmovle r9,rbp
+ mov r10,QWORD PTR[32+rsi]
+ mov ecx,DWORD PTR[40+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[8+rbx],ecx
+ cmovle r10,rbp
+ mov r11,QWORD PTR[48+rsi]
+ mov ecx,DWORD PTR[56+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[12+rbx],ecx
+ cmovle r11,rbp
+ test edx,edx
+ jz $L$done
+
+ movdqu xmm8,XMMWORD PTR[((0-128))+rdi]
+ lea rax,QWORD PTR[128+rsp]
+ movdqu xmm9,XMMWORD PTR[((32-128))+rdi]
+ movdqu xmm10,XMMWORD PTR[((64-128))+rdi]
+ movdqu xmm11,XMMWORD PTR[((96-128))+rdi]
+ movdqu xmm12,XMMWORD PTR[((128-128))+rdi]
+ movdqu xmm13,XMMWORD PTR[((160-128))+rdi]
+ movdqu xmm14,XMMWORD PTR[((192-128))+rdi]
+ movdqu xmm15,XMMWORD PTR[((224-128))+rdi]
+ movdqu xmm6,XMMWORD PTR[$L$pbswap]
+ jmp $L$oop
+
+ALIGN 32
+$L$oop::
+ movdqa xmm4,xmm10
+ pxor xmm4,xmm9
+ movd xmm5,DWORD PTR[r8]
+ movd xmm0,DWORD PTR[r9]
+ movd xmm1,DWORD PTR[r10]
+ movd xmm2,DWORD PTR[r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm12
+DB 102,15,56,0,238
+ movdqa xmm2,xmm12
+
+ psrld xmm7,6
+ movdqa xmm1,xmm12
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(0-128)+rax],xmm5
+ paddd xmm5,xmm15
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-128))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm12
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm12
+ pslld xmm2,26-21
+ pandn xmm0,xmm14
+ pand xmm3,xmm13
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm8
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm8
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm9
+ movdqa xmm7,xmm8
+ pslld xmm2,10
+ pxor xmm3,xmm8
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm15,xmm9
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm15,xmm4
+ paddd xmm11,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm15,xmm5
+ paddd xmm15,xmm7
+ movd xmm5,DWORD PTR[4+r8]
+ movd xmm0,DWORD PTR[4+r9]
+ movd xmm1,DWORD PTR[4+r10]
+ movd xmm2,DWORD PTR[4+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm11
+
+ movdqa xmm2,xmm11
+DB 102,15,56,0,238
+ psrld xmm7,6
+ movdqa xmm1,xmm11
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(16-128)+rax],xmm5
+ paddd xmm5,xmm14
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-96))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm11
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm11
+ pslld xmm2,26-21
+ pandn xmm0,xmm13
+ pand xmm4,xmm12
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm15
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm15
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm8
+ movdqa xmm7,xmm15
+ pslld xmm2,10
+ pxor xmm4,xmm15
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm14,xmm8
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm14,xmm3
+ paddd xmm10,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm14,xmm5
+ paddd xmm14,xmm7
+ movd xmm5,DWORD PTR[8+r8]
+ movd xmm0,DWORD PTR[8+r9]
+ movd xmm1,DWORD PTR[8+r10]
+ movd xmm2,DWORD PTR[8+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm10
+DB 102,15,56,0,238
+ movdqa xmm2,xmm10
+
+ psrld xmm7,6
+ movdqa xmm1,xmm10
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(32-128)+rax],xmm5
+ paddd xmm5,xmm13
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-64))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm10
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm10
+ pslld xmm2,26-21
+ pandn xmm0,xmm12
+ pand xmm3,xmm11
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm14
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm14
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm15
+ movdqa xmm7,xmm14
+ pslld xmm2,10
+ pxor xmm3,xmm14
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm13,xmm15
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm13,xmm4
+ paddd xmm9,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm13,xmm5
+ paddd xmm13,xmm7
+ movd xmm5,DWORD PTR[12+r8]
+ movd xmm0,DWORD PTR[12+r9]
+ movd xmm1,DWORD PTR[12+r10]
+ movd xmm2,DWORD PTR[12+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm9
+
+ movdqa xmm2,xmm9
+DB 102,15,56,0,238
+ psrld xmm7,6
+ movdqa xmm1,xmm9
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(48-128)+rax],xmm5
+ paddd xmm5,xmm12
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-32))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm9
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm9
+ pslld xmm2,26-21
+ pandn xmm0,xmm11
+ pand xmm4,xmm10
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm13
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm13
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm14
+ movdqa xmm7,xmm13
+ pslld xmm2,10
+ pxor xmm4,xmm13
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm12,xmm14
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm12,xmm3
+ paddd xmm8,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm12,xmm5
+ paddd xmm12,xmm7
+ movd xmm5,DWORD PTR[16+r8]
+ movd xmm0,DWORD PTR[16+r9]
+ movd xmm1,DWORD PTR[16+r10]
+ movd xmm2,DWORD PTR[16+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm8
+DB 102,15,56,0,238
+ movdqa xmm2,xmm8
+
+ psrld xmm7,6
+ movdqa xmm1,xmm8
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(64-128)+rax],xmm5
+ paddd xmm5,xmm11
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm8
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm8
+ pslld xmm2,26-21
+ pandn xmm0,xmm10
+ pand xmm3,xmm9
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm12
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm12
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm13
+ movdqa xmm7,xmm12
+ pslld xmm2,10
+ pxor xmm3,xmm12
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm11,xmm13
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm11,xmm4
+ paddd xmm15,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm11,xmm5
+ paddd xmm11,xmm7
+ movd xmm5,DWORD PTR[20+r8]
+ movd xmm0,DWORD PTR[20+r9]
+ movd xmm1,DWORD PTR[20+r10]
+ movd xmm2,DWORD PTR[20+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm15
+
+ movdqa xmm2,xmm15
+DB 102,15,56,0,238
+ psrld xmm7,6
+ movdqa xmm1,xmm15
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(80-128)+rax],xmm5
+ paddd xmm5,xmm10
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[32+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm15
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm15
+ pslld xmm2,26-21
+ pandn xmm0,xmm9
+ pand xmm4,xmm8
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm11
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm11
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm12
+ movdqa xmm7,xmm11
+ pslld xmm2,10
+ pxor xmm4,xmm11
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm10,xmm12
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm10,xmm3
+ paddd xmm14,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm10,xmm5
+ paddd xmm10,xmm7
+ movd xmm5,DWORD PTR[24+r8]
+ movd xmm0,DWORD PTR[24+r9]
+ movd xmm1,DWORD PTR[24+r10]
+ movd xmm2,DWORD PTR[24+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm14
+DB 102,15,56,0,238
+ movdqa xmm2,xmm14
+
+ psrld xmm7,6
+ movdqa xmm1,xmm14
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(96-128)+rax],xmm5
+ paddd xmm5,xmm9
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[64+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm14
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm14
+ pslld xmm2,26-21
+ pandn xmm0,xmm8
+ pand xmm3,xmm15
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm10
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm10
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm11
+ movdqa xmm7,xmm10
+ pslld xmm2,10
+ pxor xmm3,xmm10
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm9,xmm11
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm9,xmm4
+ paddd xmm13,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm9,xmm5
+ paddd xmm9,xmm7
+ movd xmm5,DWORD PTR[28+r8]
+ movd xmm0,DWORD PTR[28+r9]
+ movd xmm1,DWORD PTR[28+r10]
+ movd xmm2,DWORD PTR[28+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm13
+
+ movdqa xmm2,xmm13
+DB 102,15,56,0,238
+ psrld xmm7,6
+ movdqa xmm1,xmm13
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(112-128)+rax],xmm5
+ paddd xmm5,xmm8
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[96+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm13
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm13
+ pslld xmm2,26-21
+ pandn xmm0,xmm15
+ pand xmm4,xmm14
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm9
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm9
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm10
+ movdqa xmm7,xmm9
+ pslld xmm2,10
+ pxor xmm4,xmm9
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm8,xmm10
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm8,xmm3
+ paddd xmm12,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm8,xmm5
+ paddd xmm8,xmm7
+ lea rbp,QWORD PTR[256+rbp]
+ movd xmm5,DWORD PTR[32+r8]
+ movd xmm0,DWORD PTR[32+r9]
+ movd xmm1,DWORD PTR[32+r10]
+ movd xmm2,DWORD PTR[32+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm12
+DB 102,15,56,0,238
+ movdqa xmm2,xmm12
+
+ psrld xmm7,6
+ movdqa xmm1,xmm12
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(128-128)+rax],xmm5
+ paddd xmm5,xmm15
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-128))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm12
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm12
+ pslld xmm2,26-21
+ pandn xmm0,xmm14
+ pand xmm3,xmm13
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm8
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm8
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm9
+ movdqa xmm7,xmm8
+ pslld xmm2,10
+ pxor xmm3,xmm8
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm15,xmm9
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm15,xmm4
+ paddd xmm11,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm15,xmm5
+ paddd xmm15,xmm7
+ movd xmm5,DWORD PTR[36+r8]
+ movd xmm0,DWORD PTR[36+r9]
+ movd xmm1,DWORD PTR[36+r10]
+ movd xmm2,DWORD PTR[36+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm11
+
+ movdqa xmm2,xmm11
+DB 102,15,56,0,238
+ psrld xmm7,6
+ movdqa xmm1,xmm11
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(144-128)+rax],xmm5
+ paddd xmm5,xmm14
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-96))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm11
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm11
+ pslld xmm2,26-21
+ pandn xmm0,xmm13
+ pand xmm4,xmm12
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm15
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm15
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm8
+ movdqa xmm7,xmm15
+ pslld xmm2,10
+ pxor xmm4,xmm15
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm14,xmm8
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm14,xmm3
+ paddd xmm10,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm14,xmm5
+ paddd xmm14,xmm7
+ movd xmm5,DWORD PTR[40+r8]
+ movd xmm0,DWORD PTR[40+r9]
+ movd xmm1,DWORD PTR[40+r10]
+ movd xmm2,DWORD PTR[40+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm10
+DB 102,15,56,0,238
+ movdqa xmm2,xmm10
+
+ psrld xmm7,6
+ movdqa xmm1,xmm10
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(160-128)+rax],xmm5
+ paddd xmm5,xmm13
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-64))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm10
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm10
+ pslld xmm2,26-21
+ pandn xmm0,xmm12
+ pand xmm3,xmm11
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm14
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm14
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm15
+ movdqa xmm7,xmm14
+ pslld xmm2,10
+ pxor xmm3,xmm14
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm13,xmm15
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm13,xmm4
+ paddd xmm9,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm13,xmm5
+ paddd xmm13,xmm7
+ movd xmm5,DWORD PTR[44+r8]
+ movd xmm0,DWORD PTR[44+r9]
+ movd xmm1,DWORD PTR[44+r10]
+ movd xmm2,DWORD PTR[44+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm9
+
+ movdqa xmm2,xmm9
+DB 102,15,56,0,238
+ psrld xmm7,6
+ movdqa xmm1,xmm9
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(176-128)+rax],xmm5
+ paddd xmm5,xmm12
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-32))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm9
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm9
+ pslld xmm2,26-21
+ pandn xmm0,xmm11
+ pand xmm4,xmm10
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm13
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm13
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm14
+ movdqa xmm7,xmm13
+ pslld xmm2,10
+ pxor xmm4,xmm13
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm12,xmm14
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm12,xmm3
+ paddd xmm8,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm12,xmm5
+ paddd xmm12,xmm7
+ movd xmm5,DWORD PTR[48+r8]
+ movd xmm0,DWORD PTR[48+r9]
+ movd xmm1,DWORD PTR[48+r10]
+ movd xmm2,DWORD PTR[48+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm8
+DB 102,15,56,0,238
+ movdqa xmm2,xmm8
+
+ psrld xmm7,6
+ movdqa xmm1,xmm8
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(192-128)+rax],xmm5
+ paddd xmm5,xmm11
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm8
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm8
+ pslld xmm2,26-21
+ pandn xmm0,xmm10
+ pand xmm3,xmm9
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm12
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm12
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm13
+ movdqa xmm7,xmm12
+ pslld xmm2,10
+ pxor xmm3,xmm12
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm11,xmm13
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm11,xmm4
+ paddd xmm15,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm11,xmm5
+ paddd xmm11,xmm7
+ movd xmm5,DWORD PTR[52+r8]
+ movd xmm0,DWORD PTR[52+r9]
+ movd xmm1,DWORD PTR[52+r10]
+ movd xmm2,DWORD PTR[52+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm15
+
+ movdqa xmm2,xmm15
+DB 102,15,56,0,238
+ psrld xmm7,6
+ movdqa xmm1,xmm15
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(208-128)+rax],xmm5
+ paddd xmm5,xmm10
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[32+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm15
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm15
+ pslld xmm2,26-21
+ pandn xmm0,xmm9
+ pand xmm4,xmm8
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm11
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm11
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm12
+ movdqa xmm7,xmm11
+ pslld xmm2,10
+ pxor xmm4,xmm11
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm10,xmm12
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm10,xmm3
+ paddd xmm14,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm10,xmm5
+ paddd xmm10,xmm7
+ movd xmm5,DWORD PTR[56+r8]
+ movd xmm0,DWORD PTR[56+r9]
+ movd xmm1,DWORD PTR[56+r10]
+ movd xmm2,DWORD PTR[56+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm14
+DB 102,15,56,0,238
+ movdqa xmm2,xmm14
+
+ psrld xmm7,6
+ movdqa xmm1,xmm14
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(224-128)+rax],xmm5
+ paddd xmm5,xmm9
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[64+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm14
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm14
+ pslld xmm2,26-21
+ pandn xmm0,xmm8
+ pand xmm3,xmm15
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm10
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm10
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm11
+ movdqa xmm7,xmm10
+ pslld xmm2,10
+ pxor xmm3,xmm10
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm9,xmm11
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm9,xmm4
+ paddd xmm13,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm9,xmm5
+ paddd xmm9,xmm7
+ movd xmm5,DWORD PTR[60+r8]
+ lea r8,QWORD PTR[64+r8]
+ movd xmm0,DWORD PTR[60+r9]
+ lea r9,QWORD PTR[64+r9]
+ movd xmm1,DWORD PTR[60+r10]
+ lea r10,QWORD PTR[64+r10]
+ movd xmm2,DWORD PTR[60+r11]
+ lea r11,QWORD PTR[64+r11]
+ punpckldq xmm5,xmm1
+ punpckldq xmm0,xmm2
+ punpckldq xmm5,xmm0
+ movdqa xmm7,xmm13
+
+ movdqa xmm2,xmm13
+DB 102,15,56,0,238
+ psrld xmm7,6
+ movdqa xmm1,xmm13
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(240-128)+rax],xmm5
+ paddd xmm5,xmm8
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[96+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm13
+ prefetcht0 [63+r8]
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm13
+ pslld xmm2,26-21
+ pandn xmm0,xmm15
+ pand xmm4,xmm14
+ pxor xmm7,xmm1
+
+ prefetcht0 [63+r9]
+ movdqa xmm1,xmm9
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm9
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm10
+ movdqa xmm7,xmm9
+ pslld xmm2,10
+ pxor xmm4,xmm9
+
+ prefetcht0 [63+r10]
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+ prefetcht0 [63+r11]
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm8,xmm10
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm8,xmm3
+ paddd xmm12,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm8,xmm5
+ paddd xmm8,xmm7
+ lea rbp,QWORD PTR[256+rbp]
+ movdqu xmm5,XMMWORD PTR[((0-128))+rax]
+ mov ecx,3
+ jmp $L$oop_16_xx
+ALIGN 32
+$L$oop_16_xx::
+ movdqa xmm6,XMMWORD PTR[((16-128))+rax]
+ paddd xmm5,XMMWORD PTR[((144-128))+rax]
+
+ movdqa xmm7,xmm6
+ movdqa xmm1,xmm6
+ psrld xmm7,3
+ movdqa xmm2,xmm6
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((224-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm3,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm3
+
+ psrld xmm3,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ psrld xmm3,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm3
+ pxor xmm0,xmm1
+ paddd xmm5,xmm0
+ movdqa xmm7,xmm12
+
+ movdqa xmm2,xmm12
+
+ psrld xmm7,6
+ movdqa xmm1,xmm12
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(0-128)+rax],xmm5
+ paddd xmm5,xmm15
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-128))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm12
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm12
+ pslld xmm2,26-21
+ pandn xmm0,xmm14
+ pand xmm3,xmm13
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm8
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm8
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm9
+ movdqa xmm7,xmm8
+ pslld xmm2,10
+ pxor xmm3,xmm8
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm15,xmm9
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm15,xmm4
+ paddd xmm11,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm15,xmm5
+ paddd xmm15,xmm7
+ movdqa xmm5,XMMWORD PTR[((32-128))+rax]
+ paddd xmm6,XMMWORD PTR[((160-128))+rax]
+
+ movdqa xmm7,xmm5
+ movdqa xmm1,xmm5
+ psrld xmm7,3
+ movdqa xmm2,xmm5
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((240-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm4,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm4
+
+ psrld xmm4,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ psrld xmm4,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm4
+ pxor xmm0,xmm1
+ paddd xmm6,xmm0
+ movdqa xmm7,xmm11
+
+ movdqa xmm2,xmm11
+
+ psrld xmm7,6
+ movdqa xmm1,xmm11
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(16-128)+rax],xmm6
+ paddd xmm6,xmm14
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm6,XMMWORD PTR[((-96))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm11
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm11
+ pslld xmm2,26-21
+ pandn xmm0,xmm13
+ pand xmm4,xmm12
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm15
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm15
+ psrld xmm1,2
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm8
+ movdqa xmm7,xmm15
+ pslld xmm2,10
+ pxor xmm4,xmm15
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm6,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm14,xmm8
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm14,xmm3
+ paddd xmm10,xmm6
+ pxor xmm7,xmm2
+
+ paddd xmm14,xmm6
+ paddd xmm14,xmm7
+ movdqa xmm6,XMMWORD PTR[((48-128))+rax]
+ paddd xmm5,XMMWORD PTR[((176-128))+rax]
+
+ movdqa xmm7,xmm6
+ movdqa xmm1,xmm6
+ psrld xmm7,3
+ movdqa xmm2,xmm6
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((0-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm3,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm3
+
+ psrld xmm3,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ psrld xmm3,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm3
+ pxor xmm0,xmm1
+ paddd xmm5,xmm0
+ movdqa xmm7,xmm10
+
+ movdqa xmm2,xmm10
+
+ psrld xmm7,6
+ movdqa xmm1,xmm10
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(32-128)+rax],xmm5
+ paddd xmm5,xmm13
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-64))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm10
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm10
+ pslld xmm2,26-21
+ pandn xmm0,xmm12
+ pand xmm3,xmm11
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm14
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm14
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm15
+ movdqa xmm7,xmm14
+ pslld xmm2,10
+ pxor xmm3,xmm14
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm13,xmm15
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm13,xmm4
+ paddd xmm9,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm13,xmm5
+ paddd xmm13,xmm7
+ movdqa xmm5,XMMWORD PTR[((64-128))+rax]
+ paddd xmm6,XMMWORD PTR[((192-128))+rax]
+
+ movdqa xmm7,xmm5
+ movdqa xmm1,xmm5
+ psrld xmm7,3
+ movdqa xmm2,xmm5
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((16-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm4,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm4
+
+ psrld xmm4,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ psrld xmm4,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm4
+ pxor xmm0,xmm1
+ paddd xmm6,xmm0
+ movdqa xmm7,xmm9
+
+ movdqa xmm2,xmm9
+
+ psrld xmm7,6
+ movdqa xmm1,xmm9
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(48-128)+rax],xmm6
+ paddd xmm6,xmm12
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm6,XMMWORD PTR[((-32))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm9
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm9
+ pslld xmm2,26-21
+ pandn xmm0,xmm11
+ pand xmm4,xmm10
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm13
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm13
+ psrld xmm1,2
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm14
+ movdqa xmm7,xmm13
+ pslld xmm2,10
+ pxor xmm4,xmm13
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm6,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm12,xmm14
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm12,xmm3
+ paddd xmm8,xmm6
+ pxor xmm7,xmm2
+
+ paddd xmm12,xmm6
+ paddd xmm12,xmm7
+ movdqa xmm6,XMMWORD PTR[((80-128))+rax]
+ paddd xmm5,XMMWORD PTR[((208-128))+rax]
+
+ movdqa xmm7,xmm6
+ movdqa xmm1,xmm6
+ psrld xmm7,3
+ movdqa xmm2,xmm6
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((32-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm3,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm3
+
+ psrld xmm3,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ psrld xmm3,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm3
+ pxor xmm0,xmm1
+ paddd xmm5,xmm0
+ movdqa xmm7,xmm8
+
+ movdqa xmm2,xmm8
+
+ psrld xmm7,6
+ movdqa xmm1,xmm8
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(64-128)+rax],xmm5
+ paddd xmm5,xmm11
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm8
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm8
+ pslld xmm2,26-21
+ pandn xmm0,xmm10
+ pand xmm3,xmm9
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm12
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm12
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm13
+ movdqa xmm7,xmm12
+ pslld xmm2,10
+ pxor xmm3,xmm12
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm11,xmm13
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm11,xmm4
+ paddd xmm15,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm11,xmm5
+ paddd xmm11,xmm7
+ movdqa xmm5,XMMWORD PTR[((96-128))+rax]
+ paddd xmm6,XMMWORD PTR[((224-128))+rax]
+
+ movdqa xmm7,xmm5
+ movdqa xmm1,xmm5
+ psrld xmm7,3
+ movdqa xmm2,xmm5
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((48-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm4,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm4
+
+ psrld xmm4,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ psrld xmm4,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm4
+ pxor xmm0,xmm1
+ paddd xmm6,xmm0
+ movdqa xmm7,xmm15
+
+ movdqa xmm2,xmm15
+
+ psrld xmm7,6
+ movdqa xmm1,xmm15
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(80-128)+rax],xmm6
+ paddd xmm6,xmm10
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm6,XMMWORD PTR[32+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm15
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm15
+ pslld xmm2,26-21
+ pandn xmm0,xmm9
+ pand xmm4,xmm8
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm11
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm11
+ psrld xmm1,2
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm12
+ movdqa xmm7,xmm11
+ pslld xmm2,10
+ pxor xmm4,xmm11
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm6,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm10,xmm12
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm10,xmm3
+ paddd xmm14,xmm6
+ pxor xmm7,xmm2
+
+ paddd xmm10,xmm6
+ paddd xmm10,xmm7
+ movdqa xmm6,XMMWORD PTR[((112-128))+rax]
+ paddd xmm5,XMMWORD PTR[((240-128))+rax]
+
+ movdqa xmm7,xmm6
+ movdqa xmm1,xmm6
+ psrld xmm7,3
+ movdqa xmm2,xmm6
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((64-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm3,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm3
+
+ psrld xmm3,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ psrld xmm3,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm3
+ pxor xmm0,xmm1
+ paddd xmm5,xmm0
+ movdqa xmm7,xmm14
+
+ movdqa xmm2,xmm14
+
+ psrld xmm7,6
+ movdqa xmm1,xmm14
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(96-128)+rax],xmm5
+ paddd xmm5,xmm9
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[64+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm14
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm14
+ pslld xmm2,26-21
+ pandn xmm0,xmm8
+ pand xmm3,xmm15
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm10
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm10
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm11
+ movdqa xmm7,xmm10
+ pslld xmm2,10
+ pxor xmm3,xmm10
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm9,xmm11
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm9,xmm4
+ paddd xmm13,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm9,xmm5
+ paddd xmm9,xmm7
+ movdqa xmm5,XMMWORD PTR[((128-128))+rax]
+ paddd xmm6,XMMWORD PTR[((0-128))+rax]
+
+ movdqa xmm7,xmm5
+ movdqa xmm1,xmm5
+ psrld xmm7,3
+ movdqa xmm2,xmm5
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((80-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm4,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm4
+
+ psrld xmm4,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ psrld xmm4,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm4
+ pxor xmm0,xmm1
+ paddd xmm6,xmm0
+ movdqa xmm7,xmm13
+
+ movdqa xmm2,xmm13
+
+ psrld xmm7,6
+ movdqa xmm1,xmm13
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(112-128)+rax],xmm6
+ paddd xmm6,xmm8
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm6,XMMWORD PTR[96+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm13
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm13
+ pslld xmm2,26-21
+ pandn xmm0,xmm15
+ pand xmm4,xmm14
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm9
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm9
+ psrld xmm1,2
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm10
+ movdqa xmm7,xmm9
+ pslld xmm2,10
+ pxor xmm4,xmm9
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm6,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm8,xmm10
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm8,xmm3
+ paddd xmm12,xmm6
+ pxor xmm7,xmm2
+
+ paddd xmm8,xmm6
+ paddd xmm8,xmm7
+ lea rbp,QWORD PTR[256+rbp]
+ movdqa xmm6,XMMWORD PTR[((144-128))+rax]
+ paddd xmm5,XMMWORD PTR[((16-128))+rax]
+
+ movdqa xmm7,xmm6
+ movdqa xmm1,xmm6
+ psrld xmm7,3
+ movdqa xmm2,xmm6
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((96-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm3,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm3
+
+ psrld xmm3,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ psrld xmm3,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm3
+ pxor xmm0,xmm1
+ paddd xmm5,xmm0
+ movdqa xmm7,xmm12
+
+ movdqa xmm2,xmm12
+
+ psrld xmm7,6
+ movdqa xmm1,xmm12
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(128-128)+rax],xmm5
+ paddd xmm5,xmm15
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-128))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm12
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm12
+ pslld xmm2,26-21
+ pandn xmm0,xmm14
+ pand xmm3,xmm13
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm8
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm8
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm9
+ movdqa xmm7,xmm8
+ pslld xmm2,10
+ pxor xmm3,xmm8
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm15,xmm9
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm15,xmm4
+ paddd xmm11,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm15,xmm5
+ paddd xmm15,xmm7
+ movdqa xmm5,XMMWORD PTR[((160-128))+rax]
+ paddd xmm6,XMMWORD PTR[((32-128))+rax]
+
+ movdqa xmm7,xmm5
+ movdqa xmm1,xmm5
+ psrld xmm7,3
+ movdqa xmm2,xmm5
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((112-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm4,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm4
+
+ psrld xmm4,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ psrld xmm4,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm4
+ pxor xmm0,xmm1
+ paddd xmm6,xmm0
+ movdqa xmm7,xmm11
+
+ movdqa xmm2,xmm11
+
+ psrld xmm7,6
+ movdqa xmm1,xmm11
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(144-128)+rax],xmm6
+ paddd xmm6,xmm14
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm6,XMMWORD PTR[((-96))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm11
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm11
+ pslld xmm2,26-21
+ pandn xmm0,xmm13
+ pand xmm4,xmm12
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm15
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm15
+ psrld xmm1,2
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm8
+ movdqa xmm7,xmm15
+ pslld xmm2,10
+ pxor xmm4,xmm15
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm6,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm14,xmm8
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm14,xmm3
+ paddd xmm10,xmm6
+ pxor xmm7,xmm2
+
+ paddd xmm14,xmm6
+ paddd xmm14,xmm7
+ movdqa xmm6,XMMWORD PTR[((176-128))+rax]
+ paddd xmm5,XMMWORD PTR[((48-128))+rax]
+
+ movdqa xmm7,xmm6
+ movdqa xmm1,xmm6
+ psrld xmm7,3
+ movdqa xmm2,xmm6
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((128-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm3,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm3
+
+ psrld xmm3,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ psrld xmm3,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm3
+ pxor xmm0,xmm1
+ paddd xmm5,xmm0
+ movdqa xmm7,xmm10
+
+ movdqa xmm2,xmm10
+
+ psrld xmm7,6
+ movdqa xmm1,xmm10
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(160-128)+rax],xmm5
+ paddd xmm5,xmm13
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[((-64))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm10
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm10
+ pslld xmm2,26-21
+ pandn xmm0,xmm12
+ pand xmm3,xmm11
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm14
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm14
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm15
+ movdqa xmm7,xmm14
+ pslld xmm2,10
+ pxor xmm3,xmm14
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm13,xmm15
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm13,xmm4
+ paddd xmm9,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm13,xmm5
+ paddd xmm13,xmm7
+ movdqa xmm5,XMMWORD PTR[((192-128))+rax]
+ paddd xmm6,XMMWORD PTR[((64-128))+rax]
+
+ movdqa xmm7,xmm5
+ movdqa xmm1,xmm5
+ psrld xmm7,3
+ movdqa xmm2,xmm5
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((144-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm4,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm4
+
+ psrld xmm4,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ psrld xmm4,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm4
+ pxor xmm0,xmm1
+ paddd xmm6,xmm0
+ movdqa xmm7,xmm9
+
+ movdqa xmm2,xmm9
+
+ psrld xmm7,6
+ movdqa xmm1,xmm9
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(176-128)+rax],xmm6
+ paddd xmm6,xmm12
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm6,XMMWORD PTR[((-32))+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm9
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm9
+ pslld xmm2,26-21
+ pandn xmm0,xmm11
+ pand xmm4,xmm10
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm13
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm13
+ psrld xmm1,2
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm14
+ movdqa xmm7,xmm13
+ pslld xmm2,10
+ pxor xmm4,xmm13
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm6,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm12,xmm14
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm12,xmm3
+ paddd xmm8,xmm6
+ pxor xmm7,xmm2
+
+ paddd xmm12,xmm6
+ paddd xmm12,xmm7
+ movdqa xmm6,XMMWORD PTR[((208-128))+rax]
+ paddd xmm5,XMMWORD PTR[((80-128))+rax]
+
+ movdqa xmm7,xmm6
+ movdqa xmm1,xmm6
+ psrld xmm7,3
+ movdqa xmm2,xmm6
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((160-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm3,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm3
+
+ psrld xmm3,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ psrld xmm3,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm3
+ pxor xmm0,xmm1
+ paddd xmm5,xmm0
+ movdqa xmm7,xmm8
+
+ movdqa xmm2,xmm8
+
+ psrld xmm7,6
+ movdqa xmm1,xmm8
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(192-128)+rax],xmm5
+ paddd xmm5,xmm11
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm8
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm8
+ pslld xmm2,26-21
+ pandn xmm0,xmm10
+ pand xmm3,xmm9
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm12
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm12
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm13
+ movdqa xmm7,xmm12
+ pslld xmm2,10
+ pxor xmm3,xmm12
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm11,xmm13
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm11,xmm4
+ paddd xmm15,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm11,xmm5
+ paddd xmm11,xmm7
+ movdqa xmm5,XMMWORD PTR[((224-128))+rax]
+ paddd xmm6,XMMWORD PTR[((96-128))+rax]
+
+ movdqa xmm7,xmm5
+ movdqa xmm1,xmm5
+ psrld xmm7,3
+ movdqa xmm2,xmm5
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((176-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm4,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm4
+
+ psrld xmm4,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ psrld xmm4,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm4
+ pxor xmm0,xmm1
+ paddd xmm6,xmm0
+ movdqa xmm7,xmm15
+
+ movdqa xmm2,xmm15
+
+ psrld xmm7,6
+ movdqa xmm1,xmm15
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(208-128)+rax],xmm6
+ paddd xmm6,xmm10
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm6,XMMWORD PTR[32+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm15
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm15
+ pslld xmm2,26-21
+ pandn xmm0,xmm9
+ pand xmm4,xmm8
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm11
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm11
+ psrld xmm1,2
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm12
+ movdqa xmm7,xmm11
+ pslld xmm2,10
+ pxor xmm4,xmm11
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm6,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm10,xmm12
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm10,xmm3
+ paddd xmm14,xmm6
+ pxor xmm7,xmm2
+
+ paddd xmm10,xmm6
+ paddd xmm10,xmm7
+ movdqa xmm6,XMMWORD PTR[((240-128))+rax]
+ paddd xmm5,XMMWORD PTR[((112-128))+rax]
+
+ movdqa xmm7,xmm6
+ movdqa xmm1,xmm6
+ psrld xmm7,3
+ movdqa xmm2,xmm6
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((192-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm3,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm3
+
+ psrld xmm3,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ psrld xmm3,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm3
+ pxor xmm0,xmm1
+ paddd xmm5,xmm0
+ movdqa xmm7,xmm14
+
+ movdqa xmm2,xmm14
+
+ psrld xmm7,6
+ movdqa xmm1,xmm14
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(224-128)+rax],xmm5
+ paddd xmm5,xmm9
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm5,XMMWORD PTR[64+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm14
+
+ pxor xmm7,xmm2
+ movdqa xmm3,xmm14
+ pslld xmm2,26-21
+ pandn xmm0,xmm8
+ pand xmm3,xmm15
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm10
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm10
+ psrld xmm1,2
+ paddd xmm5,xmm7
+ pxor xmm0,xmm3
+ movdqa xmm3,xmm11
+ movdqa xmm7,xmm10
+ pslld xmm2,10
+ pxor xmm3,xmm10
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm5,xmm0
+ pslld xmm2,19-10
+ pand xmm4,xmm3
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm9,xmm11
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm9,xmm4
+ paddd xmm13,xmm5
+ pxor xmm7,xmm2
+
+ paddd xmm9,xmm5
+ paddd xmm9,xmm7
+ movdqa xmm5,XMMWORD PTR[((0-128))+rax]
+ paddd xmm6,XMMWORD PTR[((128-128))+rax]
+
+ movdqa xmm7,xmm5
+ movdqa xmm1,xmm5
+ psrld xmm7,3
+ movdqa xmm2,xmm5
+
+ psrld xmm1,7
+ movdqa xmm0,XMMWORD PTR[((208-128))+rax]
+ pslld xmm2,14
+ pxor xmm7,xmm1
+ psrld xmm1,18-7
+ movdqa xmm4,xmm0
+ pxor xmm7,xmm2
+ pslld xmm2,25-14
+ pxor xmm7,xmm1
+ psrld xmm0,10
+ movdqa xmm1,xmm4
+
+ psrld xmm4,17
+ pxor xmm7,xmm2
+ pslld xmm1,13
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ psrld xmm4,19-17
+ pxor xmm0,xmm1
+ pslld xmm1,15-13
+ pxor xmm0,xmm4
+ pxor xmm0,xmm1
+ paddd xmm6,xmm0
+ movdqa xmm7,xmm13
+
+ movdqa xmm2,xmm13
+
+ psrld xmm7,6
+ movdqa xmm1,xmm13
+ pslld xmm2,7
+ movdqa XMMWORD PTR[(240-128)+rax],xmm6
+ paddd xmm6,xmm8
+
+ psrld xmm1,11
+ pxor xmm7,xmm2
+ pslld xmm2,21-7
+ paddd xmm6,XMMWORD PTR[96+rbp]
+ pxor xmm7,xmm1
+
+ psrld xmm1,25-11
+ movdqa xmm0,xmm13
+
+ pxor xmm7,xmm2
+ movdqa xmm4,xmm13
+ pslld xmm2,26-21
+ pandn xmm0,xmm15
+ pand xmm4,xmm14
+ pxor xmm7,xmm1
+
+
+ movdqa xmm1,xmm9
+ pxor xmm7,xmm2
+ movdqa xmm2,xmm9
+ psrld xmm1,2
+ paddd xmm6,xmm7
+ pxor xmm0,xmm4
+ movdqa xmm4,xmm10
+ movdqa xmm7,xmm9
+ pslld xmm2,10
+ pxor xmm4,xmm9
+
+
+ psrld xmm7,13
+ pxor xmm1,xmm2
+ paddd xmm6,xmm0
+ pslld xmm2,19-10
+ pand xmm3,xmm4
+ pxor xmm1,xmm7
+
+
+ psrld xmm7,22-13
+ pxor xmm1,xmm2
+ movdqa xmm8,xmm10
+ pslld xmm2,30-19
+ pxor xmm7,xmm1
+ pxor xmm8,xmm3
+ paddd xmm12,xmm6
+ pxor xmm7,xmm2
+
+ paddd xmm8,xmm6
+ paddd xmm8,xmm7
+ lea rbp,QWORD PTR[256+rbp]
+ dec ecx
+ jnz $L$oop_16_xx
+
+ mov ecx,1
+ lea rbp,QWORD PTR[((K256+128))]
+
+ movdqa xmm7,XMMWORD PTR[rbx]
+ cmp ecx,DWORD PTR[rbx]
+ pxor xmm0,xmm0
+ cmovge r8,rbp
+ cmp ecx,DWORD PTR[4+rbx]
+ movdqa xmm6,xmm7
+ cmovge r9,rbp
+ cmp ecx,DWORD PTR[8+rbx]
+ pcmpgtd xmm6,xmm0
+ cmovge r10,rbp
+ cmp ecx,DWORD PTR[12+rbx]
+ paddd xmm7,xmm6
+ cmovge r11,rbp
+
+ movdqu xmm0,XMMWORD PTR[((0-128))+rdi]
+ pand xmm8,xmm6
+ movdqu xmm1,XMMWORD PTR[((32-128))+rdi]
+ pand xmm9,xmm6
+ movdqu xmm2,XMMWORD PTR[((64-128))+rdi]
+ pand xmm10,xmm6
+ movdqu xmm5,XMMWORD PTR[((96-128))+rdi]
+ pand xmm11,xmm6
+ paddd xmm8,xmm0
+ movdqu xmm0,XMMWORD PTR[((128-128))+rdi]
+ pand xmm12,xmm6
+ paddd xmm9,xmm1
+ movdqu xmm1,XMMWORD PTR[((160-128))+rdi]
+ pand xmm13,xmm6
+ paddd xmm10,xmm2
+ movdqu xmm2,XMMWORD PTR[((192-128))+rdi]
+ pand xmm14,xmm6
+ paddd xmm11,xmm5
+ movdqu xmm5,XMMWORD PTR[((224-128))+rdi]
+ pand xmm15,xmm6
+ paddd xmm12,xmm0
+ paddd xmm13,xmm1
+ movdqu XMMWORD PTR[(0-128)+rdi],xmm8
+ paddd xmm14,xmm2
+ movdqu XMMWORD PTR[(32-128)+rdi],xmm9
+ paddd xmm15,xmm5
+ movdqu XMMWORD PTR[(64-128)+rdi],xmm10
+ movdqu XMMWORD PTR[(96-128)+rdi],xmm11
+ movdqu XMMWORD PTR[(128-128)+rdi],xmm12
+ movdqu XMMWORD PTR[(160-128)+rdi],xmm13
+ movdqu XMMWORD PTR[(192-128)+rdi],xmm14
+ movdqu XMMWORD PTR[(224-128)+rdi],xmm15
+
+ movdqa XMMWORD PTR[rbx],xmm7
+ movdqa xmm6,XMMWORD PTR[$L$pbswap]
+ dec edx
+ jnz $L$oop
+
+ mov edx,DWORD PTR[280+rsp]
+ lea rdi,QWORD PTR[16+rdi]
+ lea rsi,QWORD PTR[64+rsi]
+ dec edx
+ jnz $L$oop_grande
+
+$L$done::
+ mov rax,QWORD PTR[272+rsp]
+
+ movaps xmm6,XMMWORD PTR[((-184))+rax]
+ movaps xmm7,XMMWORD PTR[((-168))+rax]
+ movaps xmm8,XMMWORD PTR[((-152))+rax]
+ movaps xmm9,XMMWORD PTR[((-136))+rax]
+ movaps xmm10,XMMWORD PTR[((-120))+rax]
+ movaps xmm11,XMMWORD PTR[((-104))+rax]
+ movaps xmm12,XMMWORD PTR[((-88))+rax]
+ movaps xmm13,XMMWORD PTR[((-72))+rax]
+ movaps xmm14,XMMWORD PTR[((-56))+rax]
+ movaps xmm15,XMMWORD PTR[((-40))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha256_multi_block::
+sha256_multi_block ENDP
+
+ALIGN 32
+sha256_multi_block_shaext PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha256_multi_block_shaext::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+_shaext_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[(-120)+rax],xmm10
+ movaps XMMWORD PTR[(-104)+rax],xmm11
+ movaps XMMWORD PTR[(-88)+rax],xmm12
+ movaps XMMWORD PTR[(-72)+rax],xmm13
+ movaps XMMWORD PTR[(-56)+rax],xmm14
+ movaps XMMWORD PTR[(-40)+rax],xmm15
+ sub rsp,288
+ shl edx,1
+ and rsp,-256
+ lea rdi,QWORD PTR[128+rdi]
+ mov QWORD PTR[272+rsp],rax
+$L$body_shaext::
+ lea rbx,QWORD PTR[256+rsp]
+ lea rbp,QWORD PTR[((K256_shaext+128))]
+
+$L$oop_grande_shaext::
+ mov DWORD PTR[280+rsp],edx
+ xor edx,edx
+ mov r8,QWORD PTR[rsi]
+ mov ecx,DWORD PTR[8+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[rbx],ecx
+ cmovle r8,rsp
+ mov r9,QWORD PTR[16+rsi]
+ mov ecx,DWORD PTR[24+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[4+rbx],ecx
+ cmovle r9,rsp
+ test edx,edx
+ jz $L$done_shaext
+
+ movq xmm12,QWORD PTR[((0-128))+rdi]
+ movq xmm4,QWORD PTR[((32-128))+rdi]
+ movq xmm13,QWORD PTR[((64-128))+rdi]
+ movq xmm5,QWORD PTR[((96-128))+rdi]
+ movq xmm8,QWORD PTR[((128-128))+rdi]
+ movq xmm9,QWORD PTR[((160-128))+rdi]
+ movq xmm10,QWORD PTR[((192-128))+rdi]
+ movq xmm11,QWORD PTR[((224-128))+rdi]
+
+ punpckldq xmm12,xmm4
+ punpckldq xmm13,xmm5
+ punpckldq xmm8,xmm9
+ punpckldq xmm10,xmm11
+ movdqa xmm3,XMMWORD PTR[((K256_shaext-16))]
+
+ movdqa xmm14,xmm12
+ movdqa xmm15,xmm13
+ punpcklqdq xmm12,xmm8
+ punpcklqdq xmm13,xmm10
+ punpckhqdq xmm14,xmm8
+ punpckhqdq xmm15,xmm10
+
+ pshufd xmm12,xmm12,27
+ pshufd xmm13,xmm13,27
+ pshufd xmm14,xmm14,27
+ pshufd xmm15,xmm15,27
+ jmp $L$oop_shaext
+
+ALIGN 32
+$L$oop_shaext::
+ movdqu xmm4,XMMWORD PTR[r8]
+ movdqu xmm8,XMMWORD PTR[r9]
+ movdqu xmm5,XMMWORD PTR[16+r8]
+ movdqu xmm9,XMMWORD PTR[16+r9]
+ movdqu xmm6,XMMWORD PTR[32+r8]
+DB 102,15,56,0,227
+ movdqu xmm10,XMMWORD PTR[32+r9]
+DB 102,68,15,56,0,195
+ movdqu xmm7,XMMWORD PTR[48+r8]
+ lea r8,QWORD PTR[64+r8]
+ movdqu xmm11,XMMWORD PTR[48+r9]
+ lea r9,QWORD PTR[64+r9]
+
+ movdqa xmm0,XMMWORD PTR[((0-128))+rbp]
+DB 102,15,56,0,235
+ paddd xmm0,xmm4
+ pxor xmm4,xmm12
+ movdqa xmm1,xmm0
+ movdqa xmm2,XMMWORD PTR[((0-128))+rbp]
+DB 102,68,15,56,0,203
+ paddd xmm2,xmm8
+ movdqa XMMWORD PTR[80+rsp],xmm13
+DB 69,15,56,203,236
+ pxor xmm8,xmm14
+ movdqa xmm0,xmm2
+ movdqa XMMWORD PTR[112+rsp],xmm15
+DB 69,15,56,203,254
+ pshufd xmm0,xmm1,00eh
+ pxor xmm4,xmm12
+ movdqa XMMWORD PTR[64+rsp],xmm12
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ pxor xmm8,xmm14
+ movdqa XMMWORD PTR[96+rsp],xmm14
+ movdqa xmm1,XMMWORD PTR[((16-128))+rbp]
+ paddd xmm1,xmm5
+DB 102,15,56,0,243
+DB 69,15,56,203,247
+
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((16-128))+rbp]
+ paddd xmm2,xmm9
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ prefetcht0 [127+r8]
+DB 102,15,56,0,251
+DB 102,68,15,56,0,211
+ prefetcht0 [127+r9]
+DB 69,15,56,203,254
+ pshufd xmm0,xmm1,00eh
+DB 102,68,15,56,0,219
+DB 15,56,204,229
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((32-128))+rbp]
+ paddd xmm1,xmm6
+DB 69,15,56,203,247
+
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((32-128))+rbp]
+ paddd xmm2,xmm10
+DB 69,15,56,203,236
+DB 69,15,56,204,193
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm7
+DB 69,15,56,203,254
+ pshufd xmm0,xmm1,00eh
+DB 102,15,58,15,222,4
+ paddd xmm4,xmm3
+ movdqa xmm3,xmm11
+DB 102,65,15,58,15,218,4
+DB 15,56,204,238
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((48-128))+rbp]
+ paddd xmm1,xmm7
+DB 69,15,56,203,247
+DB 69,15,56,204,202
+
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((48-128))+rbp]
+ paddd xmm8,xmm3
+ paddd xmm2,xmm11
+DB 15,56,205,231
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm4
+DB 102,15,58,15,223,4
+DB 69,15,56,203,254
+DB 69,15,56,205,195
+ pshufd xmm0,xmm1,00eh
+ paddd xmm5,xmm3
+ movdqa xmm3,xmm8
+DB 102,65,15,58,15,219,4
+DB 15,56,204,247
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((64-128))+rbp]
+ paddd xmm1,xmm4
+DB 69,15,56,203,247
+DB 69,15,56,204,211
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((64-128))+rbp]
+ paddd xmm9,xmm3
+ paddd xmm2,xmm8
+DB 15,56,205,236
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm5
+DB 102,15,58,15,220,4
+DB 69,15,56,203,254
+DB 69,15,56,205,200
+ pshufd xmm0,xmm1,00eh
+ paddd xmm6,xmm3
+ movdqa xmm3,xmm9
+DB 102,65,15,58,15,216,4
+DB 15,56,204,252
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((80-128))+rbp]
+ paddd xmm1,xmm5
+DB 69,15,56,203,247
+DB 69,15,56,204,216
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((80-128))+rbp]
+ paddd xmm10,xmm3
+ paddd xmm2,xmm9
+DB 15,56,205,245
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm6
+DB 102,15,58,15,221,4
+DB 69,15,56,203,254
+DB 69,15,56,205,209
+ pshufd xmm0,xmm1,00eh
+ paddd xmm7,xmm3
+ movdqa xmm3,xmm10
+DB 102,65,15,58,15,217,4
+DB 15,56,204,229
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((96-128))+rbp]
+ paddd xmm1,xmm6
+DB 69,15,56,203,247
+DB 69,15,56,204,193
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((96-128))+rbp]
+ paddd xmm11,xmm3
+ paddd xmm2,xmm10
+DB 15,56,205,254
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm7
+DB 102,15,58,15,222,4
+DB 69,15,56,203,254
+DB 69,15,56,205,218
+ pshufd xmm0,xmm1,00eh
+ paddd xmm4,xmm3
+ movdqa xmm3,xmm11
+DB 102,65,15,58,15,218,4
+DB 15,56,204,238
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((112-128))+rbp]
+ paddd xmm1,xmm7
+DB 69,15,56,203,247
+DB 69,15,56,204,202
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((112-128))+rbp]
+ paddd xmm8,xmm3
+ paddd xmm2,xmm11
+DB 15,56,205,231
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm4
+DB 102,15,58,15,223,4
+DB 69,15,56,203,254
+DB 69,15,56,205,195
+ pshufd xmm0,xmm1,00eh
+ paddd xmm5,xmm3
+ movdqa xmm3,xmm8
+DB 102,65,15,58,15,219,4
+DB 15,56,204,247
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((128-128))+rbp]
+ paddd xmm1,xmm4
+DB 69,15,56,203,247
+DB 69,15,56,204,211
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((128-128))+rbp]
+ paddd xmm9,xmm3
+ paddd xmm2,xmm8
+DB 15,56,205,236
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm5
+DB 102,15,58,15,220,4
+DB 69,15,56,203,254
+DB 69,15,56,205,200
+ pshufd xmm0,xmm1,00eh
+ paddd xmm6,xmm3
+ movdqa xmm3,xmm9
+DB 102,65,15,58,15,216,4
+DB 15,56,204,252
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((144-128))+rbp]
+ paddd xmm1,xmm5
+DB 69,15,56,203,247
+DB 69,15,56,204,216
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((144-128))+rbp]
+ paddd xmm10,xmm3
+ paddd xmm2,xmm9
+DB 15,56,205,245
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm6
+DB 102,15,58,15,221,4
+DB 69,15,56,203,254
+DB 69,15,56,205,209
+ pshufd xmm0,xmm1,00eh
+ paddd xmm7,xmm3
+ movdqa xmm3,xmm10
+DB 102,65,15,58,15,217,4
+DB 15,56,204,229
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((160-128))+rbp]
+ paddd xmm1,xmm6
+DB 69,15,56,203,247
+DB 69,15,56,204,193
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((160-128))+rbp]
+ paddd xmm11,xmm3
+ paddd xmm2,xmm10
+DB 15,56,205,254
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm7
+DB 102,15,58,15,222,4
+DB 69,15,56,203,254
+DB 69,15,56,205,218
+ pshufd xmm0,xmm1,00eh
+ paddd xmm4,xmm3
+ movdqa xmm3,xmm11
+DB 102,65,15,58,15,218,4
+DB 15,56,204,238
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((176-128))+rbp]
+ paddd xmm1,xmm7
+DB 69,15,56,203,247
+DB 69,15,56,204,202
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((176-128))+rbp]
+ paddd xmm8,xmm3
+ paddd xmm2,xmm11
+DB 15,56,205,231
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm4
+DB 102,15,58,15,223,4
+DB 69,15,56,203,254
+DB 69,15,56,205,195
+ pshufd xmm0,xmm1,00eh
+ paddd xmm5,xmm3
+ movdqa xmm3,xmm8
+DB 102,65,15,58,15,219,4
+DB 15,56,204,247
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((192-128))+rbp]
+ paddd xmm1,xmm4
+DB 69,15,56,203,247
+DB 69,15,56,204,211
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((192-128))+rbp]
+ paddd xmm9,xmm3
+ paddd xmm2,xmm8
+DB 15,56,205,236
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm5
+DB 102,15,58,15,220,4
+DB 69,15,56,203,254
+DB 69,15,56,205,200
+ pshufd xmm0,xmm1,00eh
+ paddd xmm6,xmm3
+ movdqa xmm3,xmm9
+DB 102,65,15,58,15,216,4
+DB 15,56,204,252
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((208-128))+rbp]
+ paddd xmm1,xmm5
+DB 69,15,56,203,247
+DB 69,15,56,204,216
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((208-128))+rbp]
+ paddd xmm10,xmm3
+ paddd xmm2,xmm9
+DB 15,56,205,245
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ movdqa xmm3,xmm6
+DB 102,15,58,15,221,4
+DB 69,15,56,203,254
+DB 69,15,56,205,209
+ pshufd xmm0,xmm1,00eh
+ paddd xmm7,xmm3
+ movdqa xmm3,xmm10
+DB 102,65,15,58,15,217,4
+ nop
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm1,XMMWORD PTR[((224-128))+rbp]
+ paddd xmm1,xmm6
+DB 69,15,56,203,247
+
+ movdqa xmm0,xmm1
+ movdqa xmm2,XMMWORD PTR[((224-128))+rbp]
+ paddd xmm11,xmm3
+ paddd xmm2,xmm10
+DB 15,56,205,254
+ nop
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ mov ecx,1
+ pxor xmm6,xmm6
+DB 69,15,56,203,254
+DB 69,15,56,205,218
+ pshufd xmm0,xmm1,00eh
+ movdqa xmm1,XMMWORD PTR[((240-128))+rbp]
+ paddd xmm1,xmm7
+ movq xmm7,QWORD PTR[rbx]
+ nop
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ movdqa xmm2,XMMWORD PTR[((240-128))+rbp]
+ paddd xmm2,xmm11
+DB 69,15,56,203,247
+
+ movdqa xmm0,xmm1
+ cmp ecx,DWORD PTR[rbx]
+ cmovge r8,rsp
+ cmp ecx,DWORD PTR[4+rbx]
+ cmovge r9,rsp
+ pshufd xmm9,xmm7,000h
+DB 69,15,56,203,236
+ movdqa xmm0,xmm2
+ pshufd xmm10,xmm7,055h
+ movdqa xmm11,xmm7
+DB 69,15,56,203,254
+ pshufd xmm0,xmm1,00eh
+ pcmpgtd xmm9,xmm6
+ pcmpgtd xmm10,xmm6
+DB 69,15,56,203,229
+ pshufd xmm0,xmm2,00eh
+ pcmpgtd xmm11,xmm6
+ movdqa xmm3,XMMWORD PTR[((K256_shaext-16))]
+DB 69,15,56,203,247
+
+ pand xmm13,xmm9
+ pand xmm15,xmm10
+ pand xmm12,xmm9
+ pand xmm14,xmm10
+ paddd xmm11,xmm7
+
+ paddd xmm13,XMMWORD PTR[80+rsp]
+ paddd xmm15,XMMWORD PTR[112+rsp]
+ paddd xmm12,XMMWORD PTR[64+rsp]
+ paddd xmm14,XMMWORD PTR[96+rsp]
+
+ movq QWORD PTR[rbx],xmm11
+ dec edx
+ jnz $L$oop_shaext
+
+ mov edx,DWORD PTR[280+rsp]
+
+ pshufd xmm12,xmm12,27
+ pshufd xmm13,xmm13,27
+ pshufd xmm14,xmm14,27
+ pshufd xmm15,xmm15,27
+
+ movdqa xmm5,xmm12
+ movdqa xmm6,xmm13
+ punpckldq xmm12,xmm14
+ punpckhdq xmm5,xmm14
+ punpckldq xmm13,xmm15
+ punpckhdq xmm6,xmm15
+
+ movq QWORD PTR[(0-128)+rdi],xmm12
+ psrldq xmm12,8
+ movq QWORD PTR[(128-128)+rdi],xmm5
+ psrldq xmm5,8
+ movq QWORD PTR[(32-128)+rdi],xmm12
+ movq QWORD PTR[(160-128)+rdi],xmm5
+
+ movq QWORD PTR[(64-128)+rdi],xmm13
+ psrldq xmm13,8
+ movq QWORD PTR[(192-128)+rdi],xmm6
+ psrldq xmm6,8
+ movq QWORD PTR[(96-128)+rdi],xmm13
+ movq QWORD PTR[(224-128)+rdi],xmm6
+
+ lea rdi,QWORD PTR[8+rdi]
+ lea rsi,QWORD PTR[32+rsi]
+ dec edx
+ jnz $L$oop_grande_shaext
+
+$L$done_shaext::
+
+ movaps xmm6,XMMWORD PTR[((-184))+rax]
+ movaps xmm7,XMMWORD PTR[((-168))+rax]
+ movaps xmm8,XMMWORD PTR[((-152))+rax]
+ movaps xmm9,XMMWORD PTR[((-136))+rax]
+ movaps xmm10,XMMWORD PTR[((-120))+rax]
+ movaps xmm11,XMMWORD PTR[((-104))+rax]
+ movaps xmm12,XMMWORD PTR[((-88))+rax]
+ movaps xmm13,XMMWORD PTR[((-72))+rax]
+ movaps xmm14,XMMWORD PTR[((-56))+rax]
+ movaps xmm15,XMMWORD PTR[((-40))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$epilogue_shaext::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha256_multi_block_shaext::
+sha256_multi_block_shaext ENDP
+
+ALIGN 32
+sha256_multi_block_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha256_multi_block_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+_avx_shortcut::
+ shr rcx,32
+ cmp edx,2
+ jb $L$avx
+ test ecx,32
+ jnz _avx2_shortcut
+ jmp $L$avx
+ALIGN 32
+$L$avx::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[(-120)+rax],xmm10
+ movaps XMMWORD PTR[(-104)+rax],xmm11
+ movaps XMMWORD PTR[(-88)+rax],xmm12
+ movaps XMMWORD PTR[(-72)+rax],xmm13
+ movaps XMMWORD PTR[(-56)+rax],xmm14
+ movaps XMMWORD PTR[(-40)+rax],xmm15
+ sub rsp,288
+ and rsp,-256
+ mov QWORD PTR[272+rsp],rax
+
+$L$body_avx::
+ lea rbp,QWORD PTR[((K256+128))]
+ lea rbx,QWORD PTR[256+rsp]
+ lea rdi,QWORD PTR[128+rdi]
+
+$L$oop_grande_avx::
+ mov DWORD PTR[280+rsp],edx
+ xor edx,edx
+ mov r8,QWORD PTR[rsi]
+ mov ecx,DWORD PTR[8+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[rbx],ecx
+ cmovle r8,rbp
+ mov r9,QWORD PTR[16+rsi]
+ mov ecx,DWORD PTR[24+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[4+rbx],ecx
+ cmovle r9,rbp
+ mov r10,QWORD PTR[32+rsi]
+ mov ecx,DWORD PTR[40+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[8+rbx],ecx
+ cmovle r10,rbp
+ mov r11,QWORD PTR[48+rsi]
+ mov ecx,DWORD PTR[56+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[12+rbx],ecx
+ cmovle r11,rbp
+ test edx,edx
+ jz $L$done_avx
+
+ vmovdqu xmm8,XMMWORD PTR[((0-128))+rdi]
+ lea rax,QWORD PTR[128+rsp]
+ vmovdqu xmm9,XMMWORD PTR[((32-128))+rdi]
+ vmovdqu xmm10,XMMWORD PTR[((64-128))+rdi]
+ vmovdqu xmm11,XMMWORD PTR[((96-128))+rdi]
+ vmovdqu xmm12,XMMWORD PTR[((128-128))+rdi]
+ vmovdqu xmm13,XMMWORD PTR[((160-128))+rdi]
+ vmovdqu xmm14,XMMWORD PTR[((192-128))+rdi]
+ vmovdqu xmm15,XMMWORD PTR[((224-128))+rdi]
+ vmovdqu xmm6,XMMWORD PTR[$L$pbswap]
+ jmp $L$oop_avx
+
+ALIGN 32
+$L$oop_avx::
+ vpxor xmm4,xmm10,xmm9
+ vmovd xmm5,DWORD PTR[r8]
+ vmovd xmm0,DWORD PTR[r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm12,6
+ vpslld xmm2,xmm12,26
+ vmovdqu XMMWORD PTR[(0-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm15
+
+ vpsrld xmm1,xmm12,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm12,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-128))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm12,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm12,7
+ vpandn xmm0,xmm12,xmm14
+ vpand xmm3,xmm12,xmm13
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm15,xmm8,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm8,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm9,xmm8
+
+ vpxor xmm15,xmm15,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm8,13
+
+ vpslld xmm2,xmm8,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm15,xmm1
+
+ vpsrld xmm1,xmm8,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm8,10
+ vpxor xmm15,xmm9,xmm4
+ vpaddd xmm11,xmm11,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm15,xmm15,xmm5
+ vpaddd xmm15,xmm15,xmm7
+ vmovd xmm5,DWORD PTR[4+r8]
+ vmovd xmm0,DWORD PTR[4+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[4+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[4+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm11,6
+ vpslld xmm2,xmm11,26
+ vmovdqu XMMWORD PTR[(16-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm14
+
+ vpsrld xmm1,xmm11,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm11,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-96))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm11,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm11,7
+ vpandn xmm0,xmm11,xmm13
+ vpand xmm4,xmm11,xmm12
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm14,xmm15,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm15,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm8,xmm15
+
+ vpxor xmm14,xmm14,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm15,13
+
+ vpslld xmm2,xmm15,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm14,xmm1
+
+ vpsrld xmm1,xmm15,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm15,10
+ vpxor xmm14,xmm8,xmm3
+ vpaddd xmm10,xmm10,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm14,xmm14,xmm5
+ vpaddd xmm14,xmm14,xmm7
+ vmovd xmm5,DWORD PTR[8+r8]
+ vmovd xmm0,DWORD PTR[8+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[8+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[8+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm10,6
+ vpslld xmm2,xmm10,26
+ vmovdqu XMMWORD PTR[(32-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm13
+
+ vpsrld xmm1,xmm10,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm10,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-64))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm10,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm10,7
+ vpandn xmm0,xmm10,xmm12
+ vpand xmm3,xmm10,xmm11
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm13,xmm14,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm14,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm15,xmm14
+
+ vpxor xmm13,xmm13,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm14,13
+
+ vpslld xmm2,xmm14,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm13,xmm1
+
+ vpsrld xmm1,xmm14,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm14,10
+ vpxor xmm13,xmm15,xmm4
+ vpaddd xmm9,xmm9,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm13,xmm13,xmm5
+ vpaddd xmm13,xmm13,xmm7
+ vmovd xmm5,DWORD PTR[12+r8]
+ vmovd xmm0,DWORD PTR[12+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[12+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[12+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm9,6
+ vpslld xmm2,xmm9,26
+ vmovdqu XMMWORD PTR[(48-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm12
+
+ vpsrld xmm1,xmm9,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm9,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-32))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm9,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm9,7
+ vpandn xmm0,xmm9,xmm11
+ vpand xmm4,xmm9,xmm10
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm12,xmm13,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm13,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm14,xmm13
+
+ vpxor xmm12,xmm12,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm13,13
+
+ vpslld xmm2,xmm13,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm12,xmm1
+
+ vpsrld xmm1,xmm13,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm13,10
+ vpxor xmm12,xmm14,xmm3
+ vpaddd xmm8,xmm8,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm12,xmm12,xmm5
+ vpaddd xmm12,xmm12,xmm7
+ vmovd xmm5,DWORD PTR[16+r8]
+ vmovd xmm0,DWORD PTR[16+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[16+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[16+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm8,6
+ vpslld xmm2,xmm8,26
+ vmovdqu XMMWORD PTR[(64-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm11
+
+ vpsrld xmm1,xmm8,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm8,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm8,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm8,7
+ vpandn xmm0,xmm8,xmm10
+ vpand xmm3,xmm8,xmm9
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm11,xmm12,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm12,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm13,xmm12
+
+ vpxor xmm11,xmm11,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm12,13
+
+ vpslld xmm2,xmm12,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm11,xmm1
+
+ vpsrld xmm1,xmm12,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm12,10
+ vpxor xmm11,xmm13,xmm4
+ vpaddd xmm15,xmm15,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm11,xmm11,xmm5
+ vpaddd xmm11,xmm11,xmm7
+ vmovd xmm5,DWORD PTR[20+r8]
+ vmovd xmm0,DWORD PTR[20+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[20+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[20+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm15,6
+ vpslld xmm2,xmm15,26
+ vmovdqu XMMWORD PTR[(80-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm10
+
+ vpsrld xmm1,xmm15,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm15,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[32+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm15,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm15,7
+ vpandn xmm0,xmm15,xmm9
+ vpand xmm4,xmm15,xmm8
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm10,xmm11,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm11,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm12,xmm11
+
+ vpxor xmm10,xmm10,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm11,13
+
+ vpslld xmm2,xmm11,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm10,xmm1
+
+ vpsrld xmm1,xmm11,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm11,10
+ vpxor xmm10,xmm12,xmm3
+ vpaddd xmm14,xmm14,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm10,xmm10,xmm5
+ vpaddd xmm10,xmm10,xmm7
+ vmovd xmm5,DWORD PTR[24+r8]
+ vmovd xmm0,DWORD PTR[24+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[24+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[24+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm14,6
+ vpslld xmm2,xmm14,26
+ vmovdqu XMMWORD PTR[(96-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm9
+
+ vpsrld xmm1,xmm14,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm14,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[64+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm14,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm14,7
+ vpandn xmm0,xmm14,xmm8
+ vpand xmm3,xmm14,xmm15
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm9,xmm10,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm10,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm11,xmm10
+
+ vpxor xmm9,xmm9,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm10,13
+
+ vpslld xmm2,xmm10,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm9,xmm1
+
+ vpsrld xmm1,xmm10,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm10,10
+ vpxor xmm9,xmm11,xmm4
+ vpaddd xmm13,xmm13,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm9,xmm9,xmm5
+ vpaddd xmm9,xmm9,xmm7
+ vmovd xmm5,DWORD PTR[28+r8]
+ vmovd xmm0,DWORD PTR[28+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[28+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[28+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm13,6
+ vpslld xmm2,xmm13,26
+ vmovdqu XMMWORD PTR[(112-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm8
+
+ vpsrld xmm1,xmm13,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm13,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[96+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm13,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm13,7
+ vpandn xmm0,xmm13,xmm15
+ vpand xmm4,xmm13,xmm14
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm8,xmm9,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm9,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm10,xmm9
+
+ vpxor xmm8,xmm8,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm9,13
+
+ vpslld xmm2,xmm9,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm8,xmm1
+
+ vpsrld xmm1,xmm9,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm9,10
+ vpxor xmm8,xmm10,xmm3
+ vpaddd xmm12,xmm12,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm8,xmm8,xmm5
+ vpaddd xmm8,xmm8,xmm7
+ add rbp,256
+ vmovd xmm5,DWORD PTR[32+r8]
+ vmovd xmm0,DWORD PTR[32+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[32+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[32+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm12,6
+ vpslld xmm2,xmm12,26
+ vmovdqu XMMWORD PTR[(128-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm15
+
+ vpsrld xmm1,xmm12,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm12,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-128))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm12,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm12,7
+ vpandn xmm0,xmm12,xmm14
+ vpand xmm3,xmm12,xmm13
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm15,xmm8,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm8,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm9,xmm8
+
+ vpxor xmm15,xmm15,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm8,13
+
+ vpslld xmm2,xmm8,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm15,xmm1
+
+ vpsrld xmm1,xmm8,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm8,10
+ vpxor xmm15,xmm9,xmm4
+ vpaddd xmm11,xmm11,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm15,xmm15,xmm5
+ vpaddd xmm15,xmm15,xmm7
+ vmovd xmm5,DWORD PTR[36+r8]
+ vmovd xmm0,DWORD PTR[36+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[36+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[36+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm11,6
+ vpslld xmm2,xmm11,26
+ vmovdqu XMMWORD PTR[(144-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm14
+
+ vpsrld xmm1,xmm11,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm11,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-96))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm11,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm11,7
+ vpandn xmm0,xmm11,xmm13
+ vpand xmm4,xmm11,xmm12
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm14,xmm15,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm15,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm8,xmm15
+
+ vpxor xmm14,xmm14,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm15,13
+
+ vpslld xmm2,xmm15,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm14,xmm1
+
+ vpsrld xmm1,xmm15,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm15,10
+ vpxor xmm14,xmm8,xmm3
+ vpaddd xmm10,xmm10,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm14,xmm14,xmm5
+ vpaddd xmm14,xmm14,xmm7
+ vmovd xmm5,DWORD PTR[40+r8]
+ vmovd xmm0,DWORD PTR[40+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[40+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[40+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm10,6
+ vpslld xmm2,xmm10,26
+ vmovdqu XMMWORD PTR[(160-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm13
+
+ vpsrld xmm1,xmm10,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm10,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-64))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm10,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm10,7
+ vpandn xmm0,xmm10,xmm12
+ vpand xmm3,xmm10,xmm11
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm13,xmm14,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm14,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm15,xmm14
+
+ vpxor xmm13,xmm13,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm14,13
+
+ vpslld xmm2,xmm14,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm13,xmm1
+
+ vpsrld xmm1,xmm14,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm14,10
+ vpxor xmm13,xmm15,xmm4
+ vpaddd xmm9,xmm9,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm13,xmm13,xmm5
+ vpaddd xmm13,xmm13,xmm7
+ vmovd xmm5,DWORD PTR[44+r8]
+ vmovd xmm0,DWORD PTR[44+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[44+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[44+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm9,6
+ vpslld xmm2,xmm9,26
+ vmovdqu XMMWORD PTR[(176-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm12
+
+ vpsrld xmm1,xmm9,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm9,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-32))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm9,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm9,7
+ vpandn xmm0,xmm9,xmm11
+ vpand xmm4,xmm9,xmm10
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm12,xmm13,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm13,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm14,xmm13
+
+ vpxor xmm12,xmm12,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm13,13
+
+ vpslld xmm2,xmm13,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm12,xmm1
+
+ vpsrld xmm1,xmm13,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm13,10
+ vpxor xmm12,xmm14,xmm3
+ vpaddd xmm8,xmm8,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm12,xmm12,xmm5
+ vpaddd xmm12,xmm12,xmm7
+ vmovd xmm5,DWORD PTR[48+r8]
+ vmovd xmm0,DWORD PTR[48+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[48+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[48+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm8,6
+ vpslld xmm2,xmm8,26
+ vmovdqu XMMWORD PTR[(192-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm11
+
+ vpsrld xmm1,xmm8,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm8,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm8,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm8,7
+ vpandn xmm0,xmm8,xmm10
+ vpand xmm3,xmm8,xmm9
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm11,xmm12,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm12,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm13,xmm12
+
+ vpxor xmm11,xmm11,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm12,13
+
+ vpslld xmm2,xmm12,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm11,xmm1
+
+ vpsrld xmm1,xmm12,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm12,10
+ vpxor xmm11,xmm13,xmm4
+ vpaddd xmm15,xmm15,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm11,xmm11,xmm5
+ vpaddd xmm11,xmm11,xmm7
+ vmovd xmm5,DWORD PTR[52+r8]
+ vmovd xmm0,DWORD PTR[52+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[52+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[52+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm15,6
+ vpslld xmm2,xmm15,26
+ vmovdqu XMMWORD PTR[(208-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm10
+
+ vpsrld xmm1,xmm15,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm15,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[32+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm15,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm15,7
+ vpandn xmm0,xmm15,xmm9
+ vpand xmm4,xmm15,xmm8
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm10,xmm11,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm11,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm12,xmm11
+
+ vpxor xmm10,xmm10,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm11,13
+
+ vpslld xmm2,xmm11,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm10,xmm1
+
+ vpsrld xmm1,xmm11,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm11,10
+ vpxor xmm10,xmm12,xmm3
+ vpaddd xmm14,xmm14,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm10,xmm10,xmm5
+ vpaddd xmm10,xmm10,xmm7
+ vmovd xmm5,DWORD PTR[56+r8]
+ vmovd xmm0,DWORD PTR[56+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[56+r10],1
+ vpinsrd xmm0,xmm0,DWORD PTR[56+r11],1
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm14,6
+ vpslld xmm2,xmm14,26
+ vmovdqu XMMWORD PTR[(224-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm9
+
+ vpsrld xmm1,xmm14,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm14,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[64+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm14,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm14,7
+ vpandn xmm0,xmm14,xmm8
+ vpand xmm3,xmm14,xmm15
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm9,xmm10,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm10,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm11,xmm10
+
+ vpxor xmm9,xmm9,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm10,13
+
+ vpslld xmm2,xmm10,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm9,xmm1
+
+ vpsrld xmm1,xmm10,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm10,10
+ vpxor xmm9,xmm11,xmm4
+ vpaddd xmm13,xmm13,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm9,xmm9,xmm5
+ vpaddd xmm9,xmm9,xmm7
+ vmovd xmm5,DWORD PTR[60+r8]
+ lea r8,QWORD PTR[64+r8]
+ vmovd xmm0,DWORD PTR[60+r9]
+ lea r9,QWORD PTR[64+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[60+r10],1
+ lea r10,QWORD PTR[64+r10]
+ vpinsrd xmm0,xmm0,DWORD PTR[60+r11],1
+ lea r11,QWORD PTR[64+r11]
+ vpunpckldq xmm5,xmm5,xmm0
+ vpshufb xmm5,xmm5,xmm6
+ vpsrld xmm7,xmm13,6
+ vpslld xmm2,xmm13,26
+ vmovdqu XMMWORD PTR[(240-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm8
+
+ vpsrld xmm1,xmm13,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm13,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[96+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm13,25
+ vpxor xmm7,xmm7,xmm2
+ prefetcht0 [63+r8]
+ vpslld xmm2,xmm13,7
+ vpandn xmm0,xmm13,xmm15
+ vpand xmm4,xmm13,xmm14
+ prefetcht0 [63+r9]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm8,xmm9,2
+ vpxor xmm7,xmm7,xmm2
+ prefetcht0 [63+r10]
+ vpslld xmm1,xmm9,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm10,xmm9
+ prefetcht0 [63+r11]
+ vpxor xmm8,xmm8,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm9,13
+
+ vpslld xmm2,xmm9,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm8,xmm1
+
+ vpsrld xmm1,xmm9,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm9,10
+ vpxor xmm8,xmm10,xmm3
+ vpaddd xmm12,xmm12,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm8,xmm8,xmm5
+ vpaddd xmm8,xmm8,xmm7
+ add rbp,256
+ vmovdqu xmm5,XMMWORD PTR[((0-128))+rax]
+ mov ecx,3
+ jmp $L$oop_16_xx_avx
+ALIGN 32
+$L$oop_16_xx_avx::
+ vmovdqu xmm6,XMMWORD PTR[((16-128))+rax]
+ vpaddd xmm5,xmm5,XMMWORD PTR[((144-128))+rax]
+
+ vpsrld xmm7,xmm6,3
+ vpsrld xmm1,xmm6,7
+ vpslld xmm2,xmm6,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm6,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm6,14
+ vmovdqu xmm0,XMMWORD PTR[((224-128))+rax]
+ vpsrld xmm3,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm7,xmm3,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vpsrld xmm7,xmm12,6
+ vpslld xmm2,xmm12,26
+ vmovdqu XMMWORD PTR[(0-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm15
+
+ vpsrld xmm1,xmm12,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm12,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-128))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm12,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm12,7
+ vpandn xmm0,xmm12,xmm14
+ vpand xmm3,xmm12,xmm13
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm15,xmm8,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm8,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm9,xmm8
+
+ vpxor xmm15,xmm15,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm8,13
+
+ vpslld xmm2,xmm8,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm15,xmm1
+
+ vpsrld xmm1,xmm8,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm8,10
+ vpxor xmm15,xmm9,xmm4
+ vpaddd xmm11,xmm11,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm15,xmm15,xmm5
+ vpaddd xmm15,xmm15,xmm7
+ vmovdqu xmm5,XMMWORD PTR[((32-128))+rax]
+ vpaddd xmm6,xmm6,XMMWORD PTR[((160-128))+rax]
+
+ vpsrld xmm7,xmm5,3
+ vpsrld xmm1,xmm5,7
+ vpslld xmm2,xmm5,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm5,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm5,14
+ vmovdqu xmm0,XMMWORD PTR[((240-128))+rax]
+ vpsrld xmm4,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm6,xmm6,xmm7
+ vpxor xmm7,xmm4,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm6,xmm6,xmm7
+ vpsrld xmm7,xmm11,6
+ vpslld xmm2,xmm11,26
+ vmovdqu XMMWORD PTR[(16-128)+rax],xmm6
+ vpaddd xmm6,xmm6,xmm14
+
+ vpsrld xmm1,xmm11,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm11,21
+ vpaddd xmm6,xmm6,XMMWORD PTR[((-96))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm11,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm11,7
+ vpandn xmm0,xmm11,xmm13
+ vpand xmm4,xmm11,xmm12
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm14,xmm15,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm15,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm8,xmm15
+
+ vpxor xmm14,xmm14,xmm1
+ vpaddd xmm6,xmm6,xmm7
+
+ vpsrld xmm1,xmm15,13
+
+ vpslld xmm2,xmm15,19
+ vpaddd xmm6,xmm6,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm14,xmm1
+
+ vpsrld xmm1,xmm15,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm15,10
+ vpxor xmm14,xmm8,xmm3
+ vpaddd xmm10,xmm10,xmm6
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm14,xmm14,xmm6
+ vpaddd xmm14,xmm14,xmm7
+ vmovdqu xmm6,XMMWORD PTR[((48-128))+rax]
+ vpaddd xmm5,xmm5,XMMWORD PTR[((176-128))+rax]
+
+ vpsrld xmm7,xmm6,3
+ vpsrld xmm1,xmm6,7
+ vpslld xmm2,xmm6,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm6,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm6,14
+ vmovdqu xmm0,XMMWORD PTR[((0-128))+rax]
+ vpsrld xmm3,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm7,xmm3,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vpsrld xmm7,xmm10,6
+ vpslld xmm2,xmm10,26
+ vmovdqu XMMWORD PTR[(32-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm13
+
+ vpsrld xmm1,xmm10,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm10,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-64))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm10,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm10,7
+ vpandn xmm0,xmm10,xmm12
+ vpand xmm3,xmm10,xmm11
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm13,xmm14,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm14,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm15,xmm14
+
+ vpxor xmm13,xmm13,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm14,13
+
+ vpslld xmm2,xmm14,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm13,xmm1
+
+ vpsrld xmm1,xmm14,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm14,10
+ vpxor xmm13,xmm15,xmm4
+ vpaddd xmm9,xmm9,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm13,xmm13,xmm5
+ vpaddd xmm13,xmm13,xmm7
+ vmovdqu xmm5,XMMWORD PTR[((64-128))+rax]
+ vpaddd xmm6,xmm6,XMMWORD PTR[((192-128))+rax]
+
+ vpsrld xmm7,xmm5,3
+ vpsrld xmm1,xmm5,7
+ vpslld xmm2,xmm5,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm5,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm5,14
+ vmovdqu xmm0,XMMWORD PTR[((16-128))+rax]
+ vpsrld xmm4,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm6,xmm6,xmm7
+ vpxor xmm7,xmm4,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm6,xmm6,xmm7
+ vpsrld xmm7,xmm9,6
+ vpslld xmm2,xmm9,26
+ vmovdqu XMMWORD PTR[(48-128)+rax],xmm6
+ vpaddd xmm6,xmm6,xmm12
+
+ vpsrld xmm1,xmm9,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm9,21
+ vpaddd xmm6,xmm6,XMMWORD PTR[((-32))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm9,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm9,7
+ vpandn xmm0,xmm9,xmm11
+ vpand xmm4,xmm9,xmm10
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm12,xmm13,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm13,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm14,xmm13
+
+ vpxor xmm12,xmm12,xmm1
+ vpaddd xmm6,xmm6,xmm7
+
+ vpsrld xmm1,xmm13,13
+
+ vpslld xmm2,xmm13,19
+ vpaddd xmm6,xmm6,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm12,xmm1
+
+ vpsrld xmm1,xmm13,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm13,10
+ vpxor xmm12,xmm14,xmm3
+ vpaddd xmm8,xmm8,xmm6
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm12,xmm12,xmm6
+ vpaddd xmm12,xmm12,xmm7
+ vmovdqu xmm6,XMMWORD PTR[((80-128))+rax]
+ vpaddd xmm5,xmm5,XMMWORD PTR[((208-128))+rax]
+
+ vpsrld xmm7,xmm6,3
+ vpsrld xmm1,xmm6,7
+ vpslld xmm2,xmm6,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm6,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm6,14
+ vmovdqu xmm0,XMMWORD PTR[((32-128))+rax]
+ vpsrld xmm3,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm7,xmm3,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vpsrld xmm7,xmm8,6
+ vpslld xmm2,xmm8,26
+ vmovdqu XMMWORD PTR[(64-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm11
+
+ vpsrld xmm1,xmm8,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm8,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm8,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm8,7
+ vpandn xmm0,xmm8,xmm10
+ vpand xmm3,xmm8,xmm9
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm11,xmm12,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm12,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm13,xmm12
+
+ vpxor xmm11,xmm11,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm12,13
+
+ vpslld xmm2,xmm12,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm11,xmm1
+
+ vpsrld xmm1,xmm12,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm12,10
+ vpxor xmm11,xmm13,xmm4
+ vpaddd xmm15,xmm15,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm11,xmm11,xmm5
+ vpaddd xmm11,xmm11,xmm7
+ vmovdqu xmm5,XMMWORD PTR[((96-128))+rax]
+ vpaddd xmm6,xmm6,XMMWORD PTR[((224-128))+rax]
+
+ vpsrld xmm7,xmm5,3
+ vpsrld xmm1,xmm5,7
+ vpslld xmm2,xmm5,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm5,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm5,14
+ vmovdqu xmm0,XMMWORD PTR[((48-128))+rax]
+ vpsrld xmm4,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm6,xmm6,xmm7
+ vpxor xmm7,xmm4,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm6,xmm6,xmm7
+ vpsrld xmm7,xmm15,6
+ vpslld xmm2,xmm15,26
+ vmovdqu XMMWORD PTR[(80-128)+rax],xmm6
+ vpaddd xmm6,xmm6,xmm10
+
+ vpsrld xmm1,xmm15,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm15,21
+ vpaddd xmm6,xmm6,XMMWORD PTR[32+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm15,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm15,7
+ vpandn xmm0,xmm15,xmm9
+ vpand xmm4,xmm15,xmm8
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm10,xmm11,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm11,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm12,xmm11
+
+ vpxor xmm10,xmm10,xmm1
+ vpaddd xmm6,xmm6,xmm7
+
+ vpsrld xmm1,xmm11,13
+
+ vpslld xmm2,xmm11,19
+ vpaddd xmm6,xmm6,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm10,xmm1
+
+ vpsrld xmm1,xmm11,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm11,10
+ vpxor xmm10,xmm12,xmm3
+ vpaddd xmm14,xmm14,xmm6
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm10,xmm10,xmm6
+ vpaddd xmm10,xmm10,xmm7
+ vmovdqu xmm6,XMMWORD PTR[((112-128))+rax]
+ vpaddd xmm5,xmm5,XMMWORD PTR[((240-128))+rax]
+
+ vpsrld xmm7,xmm6,3
+ vpsrld xmm1,xmm6,7
+ vpslld xmm2,xmm6,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm6,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm6,14
+ vmovdqu xmm0,XMMWORD PTR[((64-128))+rax]
+ vpsrld xmm3,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm7,xmm3,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vpsrld xmm7,xmm14,6
+ vpslld xmm2,xmm14,26
+ vmovdqu XMMWORD PTR[(96-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm9
+
+ vpsrld xmm1,xmm14,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm14,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[64+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm14,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm14,7
+ vpandn xmm0,xmm14,xmm8
+ vpand xmm3,xmm14,xmm15
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm9,xmm10,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm10,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm11,xmm10
+
+ vpxor xmm9,xmm9,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm10,13
+
+ vpslld xmm2,xmm10,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm9,xmm1
+
+ vpsrld xmm1,xmm10,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm10,10
+ vpxor xmm9,xmm11,xmm4
+ vpaddd xmm13,xmm13,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm9,xmm9,xmm5
+ vpaddd xmm9,xmm9,xmm7
+ vmovdqu xmm5,XMMWORD PTR[((128-128))+rax]
+ vpaddd xmm6,xmm6,XMMWORD PTR[((0-128))+rax]
+
+ vpsrld xmm7,xmm5,3
+ vpsrld xmm1,xmm5,7
+ vpslld xmm2,xmm5,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm5,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm5,14
+ vmovdqu xmm0,XMMWORD PTR[((80-128))+rax]
+ vpsrld xmm4,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm6,xmm6,xmm7
+ vpxor xmm7,xmm4,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm6,xmm6,xmm7
+ vpsrld xmm7,xmm13,6
+ vpslld xmm2,xmm13,26
+ vmovdqu XMMWORD PTR[(112-128)+rax],xmm6
+ vpaddd xmm6,xmm6,xmm8
+
+ vpsrld xmm1,xmm13,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm13,21
+ vpaddd xmm6,xmm6,XMMWORD PTR[96+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm13,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm13,7
+ vpandn xmm0,xmm13,xmm15
+ vpand xmm4,xmm13,xmm14
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm8,xmm9,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm9,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm10,xmm9
+
+ vpxor xmm8,xmm8,xmm1
+ vpaddd xmm6,xmm6,xmm7
+
+ vpsrld xmm1,xmm9,13
+
+ vpslld xmm2,xmm9,19
+ vpaddd xmm6,xmm6,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm8,xmm1
+
+ vpsrld xmm1,xmm9,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm9,10
+ vpxor xmm8,xmm10,xmm3
+ vpaddd xmm12,xmm12,xmm6
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm8,xmm8,xmm6
+ vpaddd xmm8,xmm8,xmm7
+ add rbp,256
+ vmovdqu xmm6,XMMWORD PTR[((144-128))+rax]
+ vpaddd xmm5,xmm5,XMMWORD PTR[((16-128))+rax]
+
+ vpsrld xmm7,xmm6,3
+ vpsrld xmm1,xmm6,7
+ vpslld xmm2,xmm6,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm6,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm6,14
+ vmovdqu xmm0,XMMWORD PTR[((96-128))+rax]
+ vpsrld xmm3,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm7,xmm3,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vpsrld xmm7,xmm12,6
+ vpslld xmm2,xmm12,26
+ vmovdqu XMMWORD PTR[(128-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm15
+
+ vpsrld xmm1,xmm12,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm12,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-128))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm12,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm12,7
+ vpandn xmm0,xmm12,xmm14
+ vpand xmm3,xmm12,xmm13
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm15,xmm8,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm8,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm9,xmm8
+
+ vpxor xmm15,xmm15,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm8,13
+
+ vpslld xmm2,xmm8,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm15,xmm1
+
+ vpsrld xmm1,xmm8,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm8,10
+ vpxor xmm15,xmm9,xmm4
+ vpaddd xmm11,xmm11,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm15,xmm15,xmm5
+ vpaddd xmm15,xmm15,xmm7
+ vmovdqu xmm5,XMMWORD PTR[((160-128))+rax]
+ vpaddd xmm6,xmm6,XMMWORD PTR[((32-128))+rax]
+
+ vpsrld xmm7,xmm5,3
+ vpsrld xmm1,xmm5,7
+ vpslld xmm2,xmm5,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm5,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm5,14
+ vmovdqu xmm0,XMMWORD PTR[((112-128))+rax]
+ vpsrld xmm4,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm6,xmm6,xmm7
+ vpxor xmm7,xmm4,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm6,xmm6,xmm7
+ vpsrld xmm7,xmm11,6
+ vpslld xmm2,xmm11,26
+ vmovdqu XMMWORD PTR[(144-128)+rax],xmm6
+ vpaddd xmm6,xmm6,xmm14
+
+ vpsrld xmm1,xmm11,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm11,21
+ vpaddd xmm6,xmm6,XMMWORD PTR[((-96))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm11,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm11,7
+ vpandn xmm0,xmm11,xmm13
+ vpand xmm4,xmm11,xmm12
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm14,xmm15,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm15,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm8,xmm15
+
+ vpxor xmm14,xmm14,xmm1
+ vpaddd xmm6,xmm6,xmm7
+
+ vpsrld xmm1,xmm15,13
+
+ vpslld xmm2,xmm15,19
+ vpaddd xmm6,xmm6,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm14,xmm1
+
+ vpsrld xmm1,xmm15,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm15,10
+ vpxor xmm14,xmm8,xmm3
+ vpaddd xmm10,xmm10,xmm6
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm14,xmm14,xmm6
+ vpaddd xmm14,xmm14,xmm7
+ vmovdqu xmm6,XMMWORD PTR[((176-128))+rax]
+ vpaddd xmm5,xmm5,XMMWORD PTR[((48-128))+rax]
+
+ vpsrld xmm7,xmm6,3
+ vpsrld xmm1,xmm6,7
+ vpslld xmm2,xmm6,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm6,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm6,14
+ vmovdqu xmm0,XMMWORD PTR[((128-128))+rax]
+ vpsrld xmm3,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm7,xmm3,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vpsrld xmm7,xmm10,6
+ vpslld xmm2,xmm10,26
+ vmovdqu XMMWORD PTR[(160-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm13
+
+ vpsrld xmm1,xmm10,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm10,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[((-64))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm10,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm10,7
+ vpandn xmm0,xmm10,xmm12
+ vpand xmm3,xmm10,xmm11
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm13,xmm14,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm14,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm15,xmm14
+
+ vpxor xmm13,xmm13,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm14,13
+
+ vpslld xmm2,xmm14,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm13,xmm1
+
+ vpsrld xmm1,xmm14,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm14,10
+ vpxor xmm13,xmm15,xmm4
+ vpaddd xmm9,xmm9,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm13,xmm13,xmm5
+ vpaddd xmm13,xmm13,xmm7
+ vmovdqu xmm5,XMMWORD PTR[((192-128))+rax]
+ vpaddd xmm6,xmm6,XMMWORD PTR[((64-128))+rax]
+
+ vpsrld xmm7,xmm5,3
+ vpsrld xmm1,xmm5,7
+ vpslld xmm2,xmm5,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm5,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm5,14
+ vmovdqu xmm0,XMMWORD PTR[((144-128))+rax]
+ vpsrld xmm4,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm6,xmm6,xmm7
+ vpxor xmm7,xmm4,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm6,xmm6,xmm7
+ vpsrld xmm7,xmm9,6
+ vpslld xmm2,xmm9,26
+ vmovdqu XMMWORD PTR[(176-128)+rax],xmm6
+ vpaddd xmm6,xmm6,xmm12
+
+ vpsrld xmm1,xmm9,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm9,21
+ vpaddd xmm6,xmm6,XMMWORD PTR[((-32))+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm9,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm9,7
+ vpandn xmm0,xmm9,xmm11
+ vpand xmm4,xmm9,xmm10
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm12,xmm13,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm13,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm14,xmm13
+
+ vpxor xmm12,xmm12,xmm1
+ vpaddd xmm6,xmm6,xmm7
+
+ vpsrld xmm1,xmm13,13
+
+ vpslld xmm2,xmm13,19
+ vpaddd xmm6,xmm6,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm12,xmm1
+
+ vpsrld xmm1,xmm13,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm13,10
+ vpxor xmm12,xmm14,xmm3
+ vpaddd xmm8,xmm8,xmm6
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm12,xmm12,xmm6
+ vpaddd xmm12,xmm12,xmm7
+ vmovdqu xmm6,XMMWORD PTR[((208-128))+rax]
+ vpaddd xmm5,xmm5,XMMWORD PTR[((80-128))+rax]
+
+ vpsrld xmm7,xmm6,3
+ vpsrld xmm1,xmm6,7
+ vpslld xmm2,xmm6,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm6,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm6,14
+ vmovdqu xmm0,XMMWORD PTR[((160-128))+rax]
+ vpsrld xmm3,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm7,xmm3,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vpsrld xmm7,xmm8,6
+ vpslld xmm2,xmm8,26
+ vmovdqu XMMWORD PTR[(192-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm11
+
+ vpsrld xmm1,xmm8,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm8,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm8,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm8,7
+ vpandn xmm0,xmm8,xmm10
+ vpand xmm3,xmm8,xmm9
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm11,xmm12,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm12,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm13,xmm12
+
+ vpxor xmm11,xmm11,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm12,13
+
+ vpslld xmm2,xmm12,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm11,xmm1
+
+ vpsrld xmm1,xmm12,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm12,10
+ vpxor xmm11,xmm13,xmm4
+ vpaddd xmm15,xmm15,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm11,xmm11,xmm5
+ vpaddd xmm11,xmm11,xmm7
+ vmovdqu xmm5,XMMWORD PTR[((224-128))+rax]
+ vpaddd xmm6,xmm6,XMMWORD PTR[((96-128))+rax]
+
+ vpsrld xmm7,xmm5,3
+ vpsrld xmm1,xmm5,7
+ vpslld xmm2,xmm5,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm5,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm5,14
+ vmovdqu xmm0,XMMWORD PTR[((176-128))+rax]
+ vpsrld xmm4,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm6,xmm6,xmm7
+ vpxor xmm7,xmm4,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm6,xmm6,xmm7
+ vpsrld xmm7,xmm15,6
+ vpslld xmm2,xmm15,26
+ vmovdqu XMMWORD PTR[(208-128)+rax],xmm6
+ vpaddd xmm6,xmm6,xmm10
+
+ vpsrld xmm1,xmm15,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm15,21
+ vpaddd xmm6,xmm6,XMMWORD PTR[32+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm15,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm15,7
+ vpandn xmm0,xmm15,xmm9
+ vpand xmm4,xmm15,xmm8
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm10,xmm11,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm11,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm12,xmm11
+
+ vpxor xmm10,xmm10,xmm1
+ vpaddd xmm6,xmm6,xmm7
+
+ vpsrld xmm1,xmm11,13
+
+ vpslld xmm2,xmm11,19
+ vpaddd xmm6,xmm6,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm10,xmm1
+
+ vpsrld xmm1,xmm11,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm11,10
+ vpxor xmm10,xmm12,xmm3
+ vpaddd xmm14,xmm14,xmm6
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm10,xmm10,xmm6
+ vpaddd xmm10,xmm10,xmm7
+ vmovdqu xmm6,XMMWORD PTR[((240-128))+rax]
+ vpaddd xmm5,xmm5,XMMWORD PTR[((112-128))+rax]
+
+ vpsrld xmm7,xmm6,3
+ vpsrld xmm1,xmm6,7
+ vpslld xmm2,xmm6,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm6,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm6,14
+ vmovdqu xmm0,XMMWORD PTR[((192-128))+rax]
+ vpsrld xmm3,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm5,xmm5,xmm7
+ vpxor xmm7,xmm3,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm5,xmm5,xmm7
+ vpsrld xmm7,xmm14,6
+ vpslld xmm2,xmm14,26
+ vmovdqu XMMWORD PTR[(224-128)+rax],xmm5
+ vpaddd xmm5,xmm5,xmm9
+
+ vpsrld xmm1,xmm14,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm14,21
+ vpaddd xmm5,xmm5,XMMWORD PTR[64+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm14,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm14,7
+ vpandn xmm0,xmm14,xmm8
+ vpand xmm3,xmm14,xmm15
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm9,xmm10,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm10,30
+ vpxor xmm0,xmm0,xmm3
+ vpxor xmm3,xmm11,xmm10
+
+ vpxor xmm9,xmm9,xmm1
+ vpaddd xmm5,xmm5,xmm7
+
+ vpsrld xmm1,xmm10,13
+
+ vpslld xmm2,xmm10,19
+ vpaddd xmm5,xmm5,xmm0
+ vpand xmm4,xmm4,xmm3
+
+ vpxor xmm7,xmm9,xmm1
+
+ vpsrld xmm1,xmm10,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm10,10
+ vpxor xmm9,xmm11,xmm4
+ vpaddd xmm13,xmm13,xmm5
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm9,xmm9,xmm5
+ vpaddd xmm9,xmm9,xmm7
+ vmovdqu xmm5,XMMWORD PTR[((0-128))+rax]
+ vpaddd xmm6,xmm6,XMMWORD PTR[((128-128))+rax]
+
+ vpsrld xmm7,xmm5,3
+ vpsrld xmm1,xmm5,7
+ vpslld xmm2,xmm5,25
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm5,18
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm5,14
+ vmovdqu xmm0,XMMWORD PTR[((208-128))+rax]
+ vpsrld xmm4,xmm0,10
+
+ vpxor xmm7,xmm7,xmm1
+ vpsrld xmm1,xmm0,17
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,15
+ vpaddd xmm6,xmm6,xmm7
+ vpxor xmm7,xmm4,xmm1
+ vpsrld xmm1,xmm0,19
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm0,13
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+ vpaddd xmm6,xmm6,xmm7
+ vpsrld xmm7,xmm13,6
+ vpslld xmm2,xmm13,26
+ vmovdqu XMMWORD PTR[(240-128)+rax],xmm6
+ vpaddd xmm6,xmm6,xmm8
+
+ vpsrld xmm1,xmm13,11
+ vpxor xmm7,xmm7,xmm2
+ vpslld xmm2,xmm13,21
+ vpaddd xmm6,xmm6,XMMWORD PTR[96+rbp]
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm1,xmm13,25
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm13,7
+ vpandn xmm0,xmm13,xmm15
+ vpand xmm4,xmm13,xmm14
+
+ vpxor xmm7,xmm7,xmm1
+
+ vpsrld xmm8,xmm9,2
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm1,xmm9,30
+ vpxor xmm0,xmm0,xmm4
+ vpxor xmm4,xmm10,xmm9
+
+ vpxor xmm8,xmm8,xmm1
+ vpaddd xmm6,xmm6,xmm7
+
+ vpsrld xmm1,xmm9,13
+
+ vpslld xmm2,xmm9,19
+ vpaddd xmm6,xmm6,xmm0
+ vpand xmm3,xmm3,xmm4
+
+ vpxor xmm7,xmm8,xmm1
+
+ vpsrld xmm1,xmm9,22
+ vpxor xmm7,xmm7,xmm2
+
+ vpslld xmm2,xmm9,10
+ vpxor xmm8,xmm10,xmm3
+ vpaddd xmm12,xmm12,xmm6
+
+ vpxor xmm7,xmm7,xmm1
+ vpxor xmm7,xmm7,xmm2
+
+ vpaddd xmm8,xmm8,xmm6
+ vpaddd xmm8,xmm8,xmm7
+ add rbp,256
+ dec ecx
+ jnz $L$oop_16_xx_avx
+
+ mov ecx,1
+ lea rbp,QWORD PTR[((K256+128))]
+ cmp ecx,DWORD PTR[rbx]
+ cmovge r8,rbp
+ cmp ecx,DWORD PTR[4+rbx]
+ cmovge r9,rbp
+ cmp ecx,DWORD PTR[8+rbx]
+ cmovge r10,rbp
+ cmp ecx,DWORD PTR[12+rbx]
+ cmovge r11,rbp
+ vmovdqa xmm7,XMMWORD PTR[rbx]
+ vpxor xmm0,xmm0,xmm0
+ vmovdqa xmm6,xmm7
+ vpcmpgtd xmm6,xmm6,xmm0
+ vpaddd xmm7,xmm7,xmm6
+
+ vmovdqu xmm0,XMMWORD PTR[((0-128))+rdi]
+ vpand xmm8,xmm8,xmm6
+ vmovdqu xmm1,XMMWORD PTR[((32-128))+rdi]
+ vpand xmm9,xmm9,xmm6
+ vmovdqu xmm2,XMMWORD PTR[((64-128))+rdi]
+ vpand xmm10,xmm10,xmm6
+ vmovdqu xmm5,XMMWORD PTR[((96-128))+rdi]
+ vpand xmm11,xmm11,xmm6
+ vpaddd xmm8,xmm8,xmm0
+ vmovdqu xmm0,XMMWORD PTR[((128-128))+rdi]
+ vpand xmm12,xmm12,xmm6
+ vpaddd xmm9,xmm9,xmm1
+ vmovdqu xmm1,XMMWORD PTR[((160-128))+rdi]
+ vpand xmm13,xmm13,xmm6
+ vpaddd xmm10,xmm10,xmm2
+ vmovdqu xmm2,XMMWORD PTR[((192-128))+rdi]
+ vpand xmm14,xmm14,xmm6
+ vpaddd xmm11,xmm11,xmm5
+ vmovdqu xmm5,XMMWORD PTR[((224-128))+rdi]
+ vpand xmm15,xmm15,xmm6
+ vpaddd xmm12,xmm12,xmm0
+ vpaddd xmm13,xmm13,xmm1
+ vmovdqu XMMWORD PTR[(0-128)+rdi],xmm8
+ vpaddd xmm14,xmm14,xmm2
+ vmovdqu XMMWORD PTR[(32-128)+rdi],xmm9
+ vpaddd xmm15,xmm15,xmm5
+ vmovdqu XMMWORD PTR[(64-128)+rdi],xmm10
+ vmovdqu XMMWORD PTR[(96-128)+rdi],xmm11
+ vmovdqu XMMWORD PTR[(128-128)+rdi],xmm12
+ vmovdqu XMMWORD PTR[(160-128)+rdi],xmm13
+ vmovdqu XMMWORD PTR[(192-128)+rdi],xmm14
+ vmovdqu XMMWORD PTR[(224-128)+rdi],xmm15
+
+ vmovdqu XMMWORD PTR[rbx],xmm7
+ vmovdqu xmm6,XMMWORD PTR[$L$pbswap]
+ dec edx
+ jnz $L$oop_avx
+
+ mov edx,DWORD PTR[280+rsp]
+ lea rdi,QWORD PTR[16+rdi]
+ lea rsi,QWORD PTR[64+rsi]
+ dec edx
+ jnz $L$oop_grande_avx
+
+$L$done_avx::
+ mov rax,QWORD PTR[272+rsp]
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-184))+rax]
+ movaps xmm7,XMMWORD PTR[((-168))+rax]
+ movaps xmm8,XMMWORD PTR[((-152))+rax]
+ movaps xmm9,XMMWORD PTR[((-136))+rax]
+ movaps xmm10,XMMWORD PTR[((-120))+rax]
+ movaps xmm11,XMMWORD PTR[((-104))+rax]
+ movaps xmm12,XMMWORD PTR[((-88))+rax]
+ movaps xmm13,XMMWORD PTR[((-72))+rax]
+ movaps xmm14,XMMWORD PTR[((-56))+rax]
+ movaps xmm15,XMMWORD PTR[((-40))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$epilogue_avx::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha256_multi_block_avx::
+sha256_multi_block_avx ENDP
+
+ALIGN 32
+sha256_multi_block_avx2 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha256_multi_block_avx2::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+_avx2_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ lea rsp,QWORD PTR[((-168))+rsp]
+ movaps XMMWORD PTR[rsp],xmm6
+ movaps XMMWORD PTR[16+rsp],xmm7
+ movaps XMMWORD PTR[32+rsp],xmm8
+ movaps XMMWORD PTR[48+rsp],xmm9
+ movaps XMMWORD PTR[64+rsp],xmm10
+ movaps XMMWORD PTR[80+rsp],xmm11
+ movaps XMMWORD PTR[(-120)+rax],xmm12
+ movaps XMMWORD PTR[(-104)+rax],xmm13
+ movaps XMMWORD PTR[(-88)+rax],xmm14
+ movaps XMMWORD PTR[(-72)+rax],xmm15
+ sub rsp,576
+ and rsp,-256
+ mov QWORD PTR[544+rsp],rax
+
+$L$body_avx2::
+ lea rbp,QWORD PTR[((K256+128))]
+ lea rdi,QWORD PTR[128+rdi]
+
+$L$oop_grande_avx2::
+ mov DWORD PTR[552+rsp],edx
+ xor edx,edx
+ lea rbx,QWORD PTR[512+rsp]
+ mov r12,QWORD PTR[rsi]
+ mov ecx,DWORD PTR[8+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[rbx],ecx
+ cmovle r12,rbp
+ mov r13,QWORD PTR[16+rsi]
+ mov ecx,DWORD PTR[24+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[4+rbx],ecx
+ cmovle r13,rbp
+ mov r14,QWORD PTR[32+rsi]
+ mov ecx,DWORD PTR[40+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[8+rbx],ecx
+ cmovle r14,rbp
+ mov r15,QWORD PTR[48+rsi]
+ mov ecx,DWORD PTR[56+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[12+rbx],ecx
+ cmovle r15,rbp
+ mov r8,QWORD PTR[64+rsi]
+ mov ecx,DWORD PTR[72+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[16+rbx],ecx
+ cmovle r8,rbp
+ mov r9,QWORD PTR[80+rsi]
+ mov ecx,DWORD PTR[88+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[20+rbx],ecx
+ cmovle r9,rbp
+ mov r10,QWORD PTR[96+rsi]
+ mov ecx,DWORD PTR[104+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[24+rbx],ecx
+ cmovle r10,rbp
+ mov r11,QWORD PTR[112+rsi]
+ mov ecx,DWORD PTR[120+rsi]
+ cmp ecx,edx
+ cmovg edx,ecx
+ test ecx,ecx
+ mov DWORD PTR[28+rbx],ecx
+ cmovle r11,rbp
+ vmovdqu ymm8,YMMWORD PTR[((0-128))+rdi]
+ lea rax,QWORD PTR[128+rsp]
+ vmovdqu ymm9,YMMWORD PTR[((32-128))+rdi]
+ lea rbx,QWORD PTR[((256+128))+rsp]
+ vmovdqu ymm10,YMMWORD PTR[((64-128))+rdi]
+ vmovdqu ymm11,YMMWORD PTR[((96-128))+rdi]
+ vmovdqu ymm12,YMMWORD PTR[((128-128))+rdi]
+ vmovdqu ymm13,YMMWORD PTR[((160-128))+rdi]
+ vmovdqu ymm14,YMMWORD PTR[((192-128))+rdi]
+ vmovdqu ymm15,YMMWORD PTR[((224-128))+rdi]
+ vmovdqu ymm6,YMMWORD PTR[$L$pbswap]
+ jmp $L$oop_avx2
+
+ALIGN 32
+$L$oop_avx2::
+ vpxor ymm4,ymm10,ymm9
+ vmovd xmm5,DWORD PTR[r12]
+ vmovd xmm0,DWORD PTR[r8]
+ vmovd xmm1,DWORD PTR[r13]
+ vmovd xmm2,DWORD PTR[r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm12,6
+ vpslld ymm2,ymm12,26
+ vmovdqu YMMWORD PTR[(0-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm15
+
+ vpsrld ymm1,ymm12,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm12,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-128))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm12,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm12,7
+ vpandn ymm0,ymm12,ymm14
+ vpand ymm3,ymm12,ymm13
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm15,ymm8,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm8,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm9,ymm8
+
+ vpxor ymm15,ymm15,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm8,13
+
+ vpslld ymm2,ymm8,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm15,ymm1
+
+ vpsrld ymm1,ymm8,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm8,10
+ vpxor ymm15,ymm9,ymm4
+ vpaddd ymm11,ymm11,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm15,ymm15,ymm5
+ vpaddd ymm15,ymm15,ymm7
+ vmovd xmm5,DWORD PTR[4+r12]
+ vmovd xmm0,DWORD PTR[4+r8]
+ vmovd xmm1,DWORD PTR[4+r13]
+ vmovd xmm2,DWORD PTR[4+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[4+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[4+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[4+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[4+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm11,6
+ vpslld ymm2,ymm11,26
+ vmovdqu YMMWORD PTR[(32-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm14
+
+ vpsrld ymm1,ymm11,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm11,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-96))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm11,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm11,7
+ vpandn ymm0,ymm11,ymm13
+ vpand ymm4,ymm11,ymm12
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm14,ymm15,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm15,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm8,ymm15
+
+ vpxor ymm14,ymm14,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm15,13
+
+ vpslld ymm2,ymm15,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm14,ymm1
+
+ vpsrld ymm1,ymm15,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm15,10
+ vpxor ymm14,ymm8,ymm3
+ vpaddd ymm10,ymm10,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm14,ymm14,ymm5
+ vpaddd ymm14,ymm14,ymm7
+ vmovd xmm5,DWORD PTR[8+r12]
+ vmovd xmm0,DWORD PTR[8+r8]
+ vmovd xmm1,DWORD PTR[8+r13]
+ vmovd xmm2,DWORD PTR[8+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[8+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[8+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[8+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[8+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm10,6
+ vpslld ymm2,ymm10,26
+ vmovdqu YMMWORD PTR[(64-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm13
+
+ vpsrld ymm1,ymm10,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm10,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-64))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm10,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm10,7
+ vpandn ymm0,ymm10,ymm12
+ vpand ymm3,ymm10,ymm11
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm13,ymm14,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm14,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm15,ymm14
+
+ vpxor ymm13,ymm13,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm14,13
+
+ vpslld ymm2,ymm14,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm13,ymm1
+
+ vpsrld ymm1,ymm14,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm14,10
+ vpxor ymm13,ymm15,ymm4
+ vpaddd ymm9,ymm9,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm13,ymm13,ymm5
+ vpaddd ymm13,ymm13,ymm7
+ vmovd xmm5,DWORD PTR[12+r12]
+ vmovd xmm0,DWORD PTR[12+r8]
+ vmovd xmm1,DWORD PTR[12+r13]
+ vmovd xmm2,DWORD PTR[12+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[12+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[12+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[12+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[12+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm9,6
+ vpslld ymm2,ymm9,26
+ vmovdqu YMMWORD PTR[(96-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm12
+
+ vpsrld ymm1,ymm9,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm9,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-32))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm9,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm9,7
+ vpandn ymm0,ymm9,ymm11
+ vpand ymm4,ymm9,ymm10
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm12,ymm13,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm13,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm14,ymm13
+
+ vpxor ymm12,ymm12,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm13,13
+
+ vpslld ymm2,ymm13,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm12,ymm1
+
+ vpsrld ymm1,ymm13,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm13,10
+ vpxor ymm12,ymm14,ymm3
+ vpaddd ymm8,ymm8,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm12,ymm12,ymm5
+ vpaddd ymm12,ymm12,ymm7
+ vmovd xmm5,DWORD PTR[16+r12]
+ vmovd xmm0,DWORD PTR[16+r8]
+ vmovd xmm1,DWORD PTR[16+r13]
+ vmovd xmm2,DWORD PTR[16+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[16+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[16+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[16+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[16+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm8,6
+ vpslld ymm2,ymm8,26
+ vmovdqu YMMWORD PTR[(128-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm11
+
+ vpsrld ymm1,ymm8,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm8,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm8,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm8,7
+ vpandn ymm0,ymm8,ymm10
+ vpand ymm3,ymm8,ymm9
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm11,ymm12,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm12,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm13,ymm12
+
+ vpxor ymm11,ymm11,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm12,13
+
+ vpslld ymm2,ymm12,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm11,ymm1
+
+ vpsrld ymm1,ymm12,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm12,10
+ vpxor ymm11,ymm13,ymm4
+ vpaddd ymm15,ymm15,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm11,ymm11,ymm5
+ vpaddd ymm11,ymm11,ymm7
+ vmovd xmm5,DWORD PTR[20+r12]
+ vmovd xmm0,DWORD PTR[20+r8]
+ vmovd xmm1,DWORD PTR[20+r13]
+ vmovd xmm2,DWORD PTR[20+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[20+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[20+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[20+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[20+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm15,6
+ vpslld ymm2,ymm15,26
+ vmovdqu YMMWORD PTR[(160-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm10
+
+ vpsrld ymm1,ymm15,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm15,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[32+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm15,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm15,7
+ vpandn ymm0,ymm15,ymm9
+ vpand ymm4,ymm15,ymm8
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm10,ymm11,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm11,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm12,ymm11
+
+ vpxor ymm10,ymm10,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm11,13
+
+ vpslld ymm2,ymm11,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm10,ymm1
+
+ vpsrld ymm1,ymm11,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm11,10
+ vpxor ymm10,ymm12,ymm3
+ vpaddd ymm14,ymm14,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm10,ymm10,ymm5
+ vpaddd ymm10,ymm10,ymm7
+ vmovd xmm5,DWORD PTR[24+r12]
+ vmovd xmm0,DWORD PTR[24+r8]
+ vmovd xmm1,DWORD PTR[24+r13]
+ vmovd xmm2,DWORD PTR[24+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[24+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[24+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[24+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[24+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm14,6
+ vpslld ymm2,ymm14,26
+ vmovdqu YMMWORD PTR[(192-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm9
+
+ vpsrld ymm1,ymm14,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm14,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[64+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm14,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm14,7
+ vpandn ymm0,ymm14,ymm8
+ vpand ymm3,ymm14,ymm15
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm9,ymm10,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm10,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm11,ymm10
+
+ vpxor ymm9,ymm9,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm10,13
+
+ vpslld ymm2,ymm10,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm9,ymm1
+
+ vpsrld ymm1,ymm10,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm10,10
+ vpxor ymm9,ymm11,ymm4
+ vpaddd ymm13,ymm13,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm9,ymm9,ymm5
+ vpaddd ymm9,ymm9,ymm7
+ vmovd xmm5,DWORD PTR[28+r12]
+ vmovd xmm0,DWORD PTR[28+r8]
+ vmovd xmm1,DWORD PTR[28+r13]
+ vmovd xmm2,DWORD PTR[28+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[28+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[28+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[28+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[28+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm13,6
+ vpslld ymm2,ymm13,26
+ vmovdqu YMMWORD PTR[(224-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm8
+
+ vpsrld ymm1,ymm13,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm13,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[96+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm13,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm13,7
+ vpandn ymm0,ymm13,ymm15
+ vpand ymm4,ymm13,ymm14
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm8,ymm9,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm9,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm10,ymm9
+
+ vpxor ymm8,ymm8,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm9,13
+
+ vpslld ymm2,ymm9,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm8,ymm1
+
+ vpsrld ymm1,ymm9,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm9,10
+ vpxor ymm8,ymm10,ymm3
+ vpaddd ymm12,ymm12,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm8,ymm8,ymm5
+ vpaddd ymm8,ymm8,ymm7
+ add rbp,256
+ vmovd xmm5,DWORD PTR[32+r12]
+ vmovd xmm0,DWORD PTR[32+r8]
+ vmovd xmm1,DWORD PTR[32+r13]
+ vmovd xmm2,DWORD PTR[32+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[32+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[32+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[32+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[32+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm12,6
+ vpslld ymm2,ymm12,26
+ vmovdqu YMMWORD PTR[(256-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm15
+
+ vpsrld ymm1,ymm12,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm12,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-128))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm12,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm12,7
+ vpandn ymm0,ymm12,ymm14
+ vpand ymm3,ymm12,ymm13
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm15,ymm8,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm8,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm9,ymm8
+
+ vpxor ymm15,ymm15,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm8,13
+
+ vpslld ymm2,ymm8,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm15,ymm1
+
+ vpsrld ymm1,ymm8,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm8,10
+ vpxor ymm15,ymm9,ymm4
+ vpaddd ymm11,ymm11,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm15,ymm15,ymm5
+ vpaddd ymm15,ymm15,ymm7
+ vmovd xmm5,DWORD PTR[36+r12]
+ vmovd xmm0,DWORD PTR[36+r8]
+ vmovd xmm1,DWORD PTR[36+r13]
+ vmovd xmm2,DWORD PTR[36+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[36+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[36+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[36+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[36+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm11,6
+ vpslld ymm2,ymm11,26
+ vmovdqu YMMWORD PTR[(288-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm14
+
+ vpsrld ymm1,ymm11,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm11,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-96))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm11,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm11,7
+ vpandn ymm0,ymm11,ymm13
+ vpand ymm4,ymm11,ymm12
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm14,ymm15,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm15,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm8,ymm15
+
+ vpxor ymm14,ymm14,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm15,13
+
+ vpslld ymm2,ymm15,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm14,ymm1
+
+ vpsrld ymm1,ymm15,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm15,10
+ vpxor ymm14,ymm8,ymm3
+ vpaddd ymm10,ymm10,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm14,ymm14,ymm5
+ vpaddd ymm14,ymm14,ymm7
+ vmovd xmm5,DWORD PTR[40+r12]
+ vmovd xmm0,DWORD PTR[40+r8]
+ vmovd xmm1,DWORD PTR[40+r13]
+ vmovd xmm2,DWORD PTR[40+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[40+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[40+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[40+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[40+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm10,6
+ vpslld ymm2,ymm10,26
+ vmovdqu YMMWORD PTR[(320-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm13
+
+ vpsrld ymm1,ymm10,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm10,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-64))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm10,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm10,7
+ vpandn ymm0,ymm10,ymm12
+ vpand ymm3,ymm10,ymm11
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm13,ymm14,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm14,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm15,ymm14
+
+ vpxor ymm13,ymm13,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm14,13
+
+ vpslld ymm2,ymm14,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm13,ymm1
+
+ vpsrld ymm1,ymm14,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm14,10
+ vpxor ymm13,ymm15,ymm4
+ vpaddd ymm9,ymm9,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm13,ymm13,ymm5
+ vpaddd ymm13,ymm13,ymm7
+ vmovd xmm5,DWORD PTR[44+r12]
+ vmovd xmm0,DWORD PTR[44+r8]
+ vmovd xmm1,DWORD PTR[44+r13]
+ vmovd xmm2,DWORD PTR[44+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[44+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[44+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[44+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[44+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm9,6
+ vpslld ymm2,ymm9,26
+ vmovdqu YMMWORD PTR[(352-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm12
+
+ vpsrld ymm1,ymm9,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm9,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-32))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm9,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm9,7
+ vpandn ymm0,ymm9,ymm11
+ vpand ymm4,ymm9,ymm10
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm12,ymm13,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm13,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm14,ymm13
+
+ vpxor ymm12,ymm12,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm13,13
+
+ vpslld ymm2,ymm13,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm12,ymm1
+
+ vpsrld ymm1,ymm13,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm13,10
+ vpxor ymm12,ymm14,ymm3
+ vpaddd ymm8,ymm8,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm12,ymm12,ymm5
+ vpaddd ymm12,ymm12,ymm7
+ vmovd xmm5,DWORD PTR[48+r12]
+ vmovd xmm0,DWORD PTR[48+r8]
+ vmovd xmm1,DWORD PTR[48+r13]
+ vmovd xmm2,DWORD PTR[48+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[48+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[48+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[48+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[48+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm8,6
+ vpslld ymm2,ymm8,26
+ vmovdqu YMMWORD PTR[(384-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm11
+
+ vpsrld ymm1,ymm8,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm8,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm8,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm8,7
+ vpandn ymm0,ymm8,ymm10
+ vpand ymm3,ymm8,ymm9
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm11,ymm12,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm12,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm13,ymm12
+
+ vpxor ymm11,ymm11,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm12,13
+
+ vpslld ymm2,ymm12,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm11,ymm1
+
+ vpsrld ymm1,ymm12,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm12,10
+ vpxor ymm11,ymm13,ymm4
+ vpaddd ymm15,ymm15,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm11,ymm11,ymm5
+ vpaddd ymm11,ymm11,ymm7
+ vmovd xmm5,DWORD PTR[52+r12]
+ vmovd xmm0,DWORD PTR[52+r8]
+ vmovd xmm1,DWORD PTR[52+r13]
+ vmovd xmm2,DWORD PTR[52+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[52+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[52+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[52+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[52+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm15,6
+ vpslld ymm2,ymm15,26
+ vmovdqu YMMWORD PTR[(416-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm10
+
+ vpsrld ymm1,ymm15,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm15,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[32+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm15,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm15,7
+ vpandn ymm0,ymm15,ymm9
+ vpand ymm4,ymm15,ymm8
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm10,ymm11,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm11,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm12,ymm11
+
+ vpxor ymm10,ymm10,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm11,13
+
+ vpslld ymm2,ymm11,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm10,ymm1
+
+ vpsrld ymm1,ymm11,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm11,10
+ vpxor ymm10,ymm12,ymm3
+ vpaddd ymm14,ymm14,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm10,ymm10,ymm5
+ vpaddd ymm10,ymm10,ymm7
+ vmovd xmm5,DWORD PTR[56+r12]
+ vmovd xmm0,DWORD PTR[56+r8]
+ vmovd xmm1,DWORD PTR[56+r13]
+ vmovd xmm2,DWORD PTR[56+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[56+r14],1
+ vpinsrd xmm0,xmm0,DWORD PTR[56+r10],1
+ vpinsrd xmm1,xmm1,DWORD PTR[56+r15],1
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[56+r11],1
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm14,6
+ vpslld ymm2,ymm14,26
+ vmovdqu YMMWORD PTR[(448-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm9
+
+ vpsrld ymm1,ymm14,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm14,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[64+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm14,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm14,7
+ vpandn ymm0,ymm14,ymm8
+ vpand ymm3,ymm14,ymm15
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm9,ymm10,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm10,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm11,ymm10
+
+ vpxor ymm9,ymm9,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm10,13
+
+ vpslld ymm2,ymm10,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm9,ymm1
+
+ vpsrld ymm1,ymm10,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm10,10
+ vpxor ymm9,ymm11,ymm4
+ vpaddd ymm13,ymm13,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm9,ymm9,ymm5
+ vpaddd ymm9,ymm9,ymm7
+ vmovd xmm5,DWORD PTR[60+r12]
+ lea r12,QWORD PTR[64+r12]
+ vmovd xmm0,DWORD PTR[60+r8]
+ lea r8,QWORD PTR[64+r8]
+ vmovd xmm1,DWORD PTR[60+r13]
+ lea r13,QWORD PTR[64+r13]
+ vmovd xmm2,DWORD PTR[60+r9]
+ lea r9,QWORD PTR[64+r9]
+ vpinsrd xmm5,xmm5,DWORD PTR[60+r14],1
+ lea r14,QWORD PTR[64+r14]
+ vpinsrd xmm0,xmm0,DWORD PTR[60+r10],1
+ lea r10,QWORD PTR[64+r10]
+ vpinsrd xmm1,xmm1,DWORD PTR[60+r15],1
+ lea r15,QWORD PTR[64+r15]
+ vpunpckldq ymm5,ymm5,ymm1
+ vpinsrd xmm2,xmm2,DWORD PTR[60+r11],1
+ lea r11,QWORD PTR[64+r11]
+ vpunpckldq ymm0,ymm0,ymm2
+ vinserti128 ymm5,ymm5,xmm0,1
+ vpshufb ymm5,ymm5,ymm6
+ vpsrld ymm7,ymm13,6
+ vpslld ymm2,ymm13,26
+ vmovdqu YMMWORD PTR[(480-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm8
+
+ vpsrld ymm1,ymm13,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm13,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[96+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm13,25
+ vpxor ymm7,ymm7,ymm2
+ prefetcht0 [63+r12]
+ vpslld ymm2,ymm13,7
+ vpandn ymm0,ymm13,ymm15
+ vpand ymm4,ymm13,ymm14
+ prefetcht0 [63+r13]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm8,ymm9,2
+ vpxor ymm7,ymm7,ymm2
+ prefetcht0 [63+r14]
+ vpslld ymm1,ymm9,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm10,ymm9
+ prefetcht0 [63+r15]
+ vpxor ymm8,ymm8,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm9,13
+ prefetcht0 [63+r8]
+ vpslld ymm2,ymm9,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm3,ymm3,ymm4
+ prefetcht0 [63+r9]
+ vpxor ymm7,ymm8,ymm1
+
+ vpsrld ymm1,ymm9,22
+ vpxor ymm7,ymm7,ymm2
+ prefetcht0 [63+r10]
+ vpslld ymm2,ymm9,10
+ vpxor ymm8,ymm10,ymm3
+ vpaddd ymm12,ymm12,ymm5
+ prefetcht0 [63+r11]
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm8,ymm8,ymm5
+ vpaddd ymm8,ymm8,ymm7
+ add rbp,256
+ vmovdqu ymm5,YMMWORD PTR[((0-128))+rax]
+ mov ecx,3
+ jmp $L$oop_16_xx_avx2
+ALIGN 32
+$L$oop_16_xx_avx2::
+ vmovdqu ymm6,YMMWORD PTR[((32-128))+rax]
+ vpaddd ymm5,ymm5,YMMWORD PTR[((288-256-128))+rbx]
+
+ vpsrld ymm7,ymm6,3
+ vpsrld ymm1,ymm6,7
+ vpslld ymm2,ymm6,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm6,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm6,14
+ vmovdqu ymm0,YMMWORD PTR[((448-256-128))+rbx]
+ vpsrld ymm3,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm5,ymm5,ymm7
+ vpxor ymm7,ymm3,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm5,ymm5,ymm7
+ vpsrld ymm7,ymm12,6
+ vpslld ymm2,ymm12,26
+ vmovdqu YMMWORD PTR[(0-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm15
+
+ vpsrld ymm1,ymm12,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm12,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-128))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm12,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm12,7
+ vpandn ymm0,ymm12,ymm14
+ vpand ymm3,ymm12,ymm13
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm15,ymm8,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm8,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm9,ymm8
+
+ vpxor ymm15,ymm15,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm8,13
+
+ vpslld ymm2,ymm8,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm15,ymm1
+
+ vpsrld ymm1,ymm8,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm8,10
+ vpxor ymm15,ymm9,ymm4
+ vpaddd ymm11,ymm11,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm15,ymm15,ymm5
+ vpaddd ymm15,ymm15,ymm7
+ vmovdqu ymm5,YMMWORD PTR[((64-128))+rax]
+ vpaddd ymm6,ymm6,YMMWORD PTR[((320-256-128))+rbx]
+
+ vpsrld ymm7,ymm5,3
+ vpsrld ymm1,ymm5,7
+ vpslld ymm2,ymm5,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm5,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm5,14
+ vmovdqu ymm0,YMMWORD PTR[((480-256-128))+rbx]
+ vpsrld ymm4,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm6,ymm6,ymm7
+ vpxor ymm7,ymm4,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm6,ymm6,ymm7
+ vpsrld ymm7,ymm11,6
+ vpslld ymm2,ymm11,26
+ vmovdqu YMMWORD PTR[(32-128)+rax],ymm6
+ vpaddd ymm6,ymm6,ymm14
+
+ vpsrld ymm1,ymm11,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm11,21
+ vpaddd ymm6,ymm6,YMMWORD PTR[((-96))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm11,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm11,7
+ vpandn ymm0,ymm11,ymm13
+ vpand ymm4,ymm11,ymm12
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm14,ymm15,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm15,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm8,ymm15
+
+ vpxor ymm14,ymm14,ymm1
+ vpaddd ymm6,ymm6,ymm7
+
+ vpsrld ymm1,ymm15,13
+
+ vpslld ymm2,ymm15,19
+ vpaddd ymm6,ymm6,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm14,ymm1
+
+ vpsrld ymm1,ymm15,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm15,10
+ vpxor ymm14,ymm8,ymm3
+ vpaddd ymm10,ymm10,ymm6
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm14,ymm14,ymm6
+ vpaddd ymm14,ymm14,ymm7
+ vmovdqu ymm6,YMMWORD PTR[((96-128))+rax]
+ vpaddd ymm5,ymm5,YMMWORD PTR[((352-256-128))+rbx]
+
+ vpsrld ymm7,ymm6,3
+ vpsrld ymm1,ymm6,7
+ vpslld ymm2,ymm6,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm6,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm6,14
+ vmovdqu ymm0,YMMWORD PTR[((0-128))+rax]
+ vpsrld ymm3,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm5,ymm5,ymm7
+ vpxor ymm7,ymm3,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm5,ymm5,ymm7
+ vpsrld ymm7,ymm10,6
+ vpslld ymm2,ymm10,26
+ vmovdqu YMMWORD PTR[(64-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm13
+
+ vpsrld ymm1,ymm10,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm10,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-64))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm10,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm10,7
+ vpandn ymm0,ymm10,ymm12
+ vpand ymm3,ymm10,ymm11
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm13,ymm14,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm14,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm15,ymm14
+
+ vpxor ymm13,ymm13,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm14,13
+
+ vpslld ymm2,ymm14,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm13,ymm1
+
+ vpsrld ymm1,ymm14,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm14,10
+ vpxor ymm13,ymm15,ymm4
+ vpaddd ymm9,ymm9,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm13,ymm13,ymm5
+ vpaddd ymm13,ymm13,ymm7
+ vmovdqu ymm5,YMMWORD PTR[((128-128))+rax]
+ vpaddd ymm6,ymm6,YMMWORD PTR[((384-256-128))+rbx]
+
+ vpsrld ymm7,ymm5,3
+ vpsrld ymm1,ymm5,7
+ vpslld ymm2,ymm5,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm5,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm5,14
+ vmovdqu ymm0,YMMWORD PTR[((32-128))+rax]
+ vpsrld ymm4,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm6,ymm6,ymm7
+ vpxor ymm7,ymm4,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm6,ymm6,ymm7
+ vpsrld ymm7,ymm9,6
+ vpslld ymm2,ymm9,26
+ vmovdqu YMMWORD PTR[(96-128)+rax],ymm6
+ vpaddd ymm6,ymm6,ymm12
+
+ vpsrld ymm1,ymm9,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm9,21
+ vpaddd ymm6,ymm6,YMMWORD PTR[((-32))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm9,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm9,7
+ vpandn ymm0,ymm9,ymm11
+ vpand ymm4,ymm9,ymm10
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm12,ymm13,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm13,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm14,ymm13
+
+ vpxor ymm12,ymm12,ymm1
+ vpaddd ymm6,ymm6,ymm7
+
+ vpsrld ymm1,ymm13,13
+
+ vpslld ymm2,ymm13,19
+ vpaddd ymm6,ymm6,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm12,ymm1
+
+ vpsrld ymm1,ymm13,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm13,10
+ vpxor ymm12,ymm14,ymm3
+ vpaddd ymm8,ymm8,ymm6
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm12,ymm12,ymm6
+ vpaddd ymm12,ymm12,ymm7
+ vmovdqu ymm6,YMMWORD PTR[((160-128))+rax]
+ vpaddd ymm5,ymm5,YMMWORD PTR[((416-256-128))+rbx]
+
+ vpsrld ymm7,ymm6,3
+ vpsrld ymm1,ymm6,7
+ vpslld ymm2,ymm6,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm6,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm6,14
+ vmovdqu ymm0,YMMWORD PTR[((64-128))+rax]
+ vpsrld ymm3,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm5,ymm5,ymm7
+ vpxor ymm7,ymm3,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm5,ymm5,ymm7
+ vpsrld ymm7,ymm8,6
+ vpslld ymm2,ymm8,26
+ vmovdqu YMMWORD PTR[(128-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm11
+
+ vpsrld ymm1,ymm8,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm8,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm8,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm8,7
+ vpandn ymm0,ymm8,ymm10
+ vpand ymm3,ymm8,ymm9
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm11,ymm12,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm12,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm13,ymm12
+
+ vpxor ymm11,ymm11,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm12,13
+
+ vpslld ymm2,ymm12,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm11,ymm1
+
+ vpsrld ymm1,ymm12,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm12,10
+ vpxor ymm11,ymm13,ymm4
+ vpaddd ymm15,ymm15,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm11,ymm11,ymm5
+ vpaddd ymm11,ymm11,ymm7
+ vmovdqu ymm5,YMMWORD PTR[((192-128))+rax]
+ vpaddd ymm6,ymm6,YMMWORD PTR[((448-256-128))+rbx]
+
+ vpsrld ymm7,ymm5,3
+ vpsrld ymm1,ymm5,7
+ vpslld ymm2,ymm5,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm5,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm5,14
+ vmovdqu ymm0,YMMWORD PTR[((96-128))+rax]
+ vpsrld ymm4,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm6,ymm6,ymm7
+ vpxor ymm7,ymm4,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm6,ymm6,ymm7
+ vpsrld ymm7,ymm15,6
+ vpslld ymm2,ymm15,26
+ vmovdqu YMMWORD PTR[(160-128)+rax],ymm6
+ vpaddd ymm6,ymm6,ymm10
+
+ vpsrld ymm1,ymm15,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm15,21
+ vpaddd ymm6,ymm6,YMMWORD PTR[32+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm15,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm15,7
+ vpandn ymm0,ymm15,ymm9
+ vpand ymm4,ymm15,ymm8
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm10,ymm11,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm11,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm12,ymm11
+
+ vpxor ymm10,ymm10,ymm1
+ vpaddd ymm6,ymm6,ymm7
+
+ vpsrld ymm1,ymm11,13
+
+ vpslld ymm2,ymm11,19
+ vpaddd ymm6,ymm6,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm10,ymm1
+
+ vpsrld ymm1,ymm11,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm11,10
+ vpxor ymm10,ymm12,ymm3
+ vpaddd ymm14,ymm14,ymm6
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm10,ymm10,ymm6
+ vpaddd ymm10,ymm10,ymm7
+ vmovdqu ymm6,YMMWORD PTR[((224-128))+rax]
+ vpaddd ymm5,ymm5,YMMWORD PTR[((480-256-128))+rbx]
+
+ vpsrld ymm7,ymm6,3
+ vpsrld ymm1,ymm6,7
+ vpslld ymm2,ymm6,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm6,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm6,14
+ vmovdqu ymm0,YMMWORD PTR[((128-128))+rax]
+ vpsrld ymm3,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm5,ymm5,ymm7
+ vpxor ymm7,ymm3,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm5,ymm5,ymm7
+ vpsrld ymm7,ymm14,6
+ vpslld ymm2,ymm14,26
+ vmovdqu YMMWORD PTR[(192-128)+rax],ymm5
+ vpaddd ymm5,ymm5,ymm9
+
+ vpsrld ymm1,ymm14,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm14,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[64+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm14,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm14,7
+ vpandn ymm0,ymm14,ymm8
+ vpand ymm3,ymm14,ymm15
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm9,ymm10,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm10,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm11,ymm10
+
+ vpxor ymm9,ymm9,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm10,13
+
+ vpslld ymm2,ymm10,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm9,ymm1
+
+ vpsrld ymm1,ymm10,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm10,10
+ vpxor ymm9,ymm11,ymm4
+ vpaddd ymm13,ymm13,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm9,ymm9,ymm5
+ vpaddd ymm9,ymm9,ymm7
+ vmovdqu ymm5,YMMWORD PTR[((256-256-128))+rbx]
+ vpaddd ymm6,ymm6,YMMWORD PTR[((0-128))+rax]
+
+ vpsrld ymm7,ymm5,3
+ vpsrld ymm1,ymm5,7
+ vpslld ymm2,ymm5,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm5,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm5,14
+ vmovdqu ymm0,YMMWORD PTR[((160-128))+rax]
+ vpsrld ymm4,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm6,ymm6,ymm7
+ vpxor ymm7,ymm4,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm6,ymm6,ymm7
+ vpsrld ymm7,ymm13,6
+ vpslld ymm2,ymm13,26
+ vmovdqu YMMWORD PTR[(224-128)+rax],ymm6
+ vpaddd ymm6,ymm6,ymm8
+
+ vpsrld ymm1,ymm13,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm13,21
+ vpaddd ymm6,ymm6,YMMWORD PTR[96+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm13,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm13,7
+ vpandn ymm0,ymm13,ymm15
+ vpand ymm4,ymm13,ymm14
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm8,ymm9,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm9,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm10,ymm9
+
+ vpxor ymm8,ymm8,ymm1
+ vpaddd ymm6,ymm6,ymm7
+
+ vpsrld ymm1,ymm9,13
+
+ vpslld ymm2,ymm9,19
+ vpaddd ymm6,ymm6,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm8,ymm1
+
+ vpsrld ymm1,ymm9,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm9,10
+ vpxor ymm8,ymm10,ymm3
+ vpaddd ymm12,ymm12,ymm6
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm8,ymm8,ymm6
+ vpaddd ymm8,ymm8,ymm7
+ add rbp,256
+ vmovdqu ymm6,YMMWORD PTR[((288-256-128))+rbx]
+ vpaddd ymm5,ymm5,YMMWORD PTR[((32-128))+rax]
+
+ vpsrld ymm7,ymm6,3
+ vpsrld ymm1,ymm6,7
+ vpslld ymm2,ymm6,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm6,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm6,14
+ vmovdqu ymm0,YMMWORD PTR[((192-128))+rax]
+ vpsrld ymm3,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm5,ymm5,ymm7
+ vpxor ymm7,ymm3,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm5,ymm5,ymm7
+ vpsrld ymm7,ymm12,6
+ vpslld ymm2,ymm12,26
+ vmovdqu YMMWORD PTR[(256-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm15
+
+ vpsrld ymm1,ymm12,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm12,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-128))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm12,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm12,7
+ vpandn ymm0,ymm12,ymm14
+ vpand ymm3,ymm12,ymm13
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm15,ymm8,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm8,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm9,ymm8
+
+ vpxor ymm15,ymm15,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm8,13
+
+ vpslld ymm2,ymm8,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm15,ymm1
+
+ vpsrld ymm1,ymm8,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm8,10
+ vpxor ymm15,ymm9,ymm4
+ vpaddd ymm11,ymm11,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm15,ymm15,ymm5
+ vpaddd ymm15,ymm15,ymm7
+ vmovdqu ymm5,YMMWORD PTR[((320-256-128))+rbx]
+ vpaddd ymm6,ymm6,YMMWORD PTR[((64-128))+rax]
+
+ vpsrld ymm7,ymm5,3
+ vpsrld ymm1,ymm5,7
+ vpslld ymm2,ymm5,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm5,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm5,14
+ vmovdqu ymm0,YMMWORD PTR[((224-128))+rax]
+ vpsrld ymm4,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm6,ymm6,ymm7
+ vpxor ymm7,ymm4,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm6,ymm6,ymm7
+ vpsrld ymm7,ymm11,6
+ vpslld ymm2,ymm11,26
+ vmovdqu YMMWORD PTR[(288-256-128)+rbx],ymm6
+ vpaddd ymm6,ymm6,ymm14
+
+ vpsrld ymm1,ymm11,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm11,21
+ vpaddd ymm6,ymm6,YMMWORD PTR[((-96))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm11,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm11,7
+ vpandn ymm0,ymm11,ymm13
+ vpand ymm4,ymm11,ymm12
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm14,ymm15,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm15,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm8,ymm15
+
+ vpxor ymm14,ymm14,ymm1
+ vpaddd ymm6,ymm6,ymm7
+
+ vpsrld ymm1,ymm15,13
+
+ vpslld ymm2,ymm15,19
+ vpaddd ymm6,ymm6,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm14,ymm1
+
+ vpsrld ymm1,ymm15,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm15,10
+ vpxor ymm14,ymm8,ymm3
+ vpaddd ymm10,ymm10,ymm6
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm14,ymm14,ymm6
+ vpaddd ymm14,ymm14,ymm7
+ vmovdqu ymm6,YMMWORD PTR[((352-256-128))+rbx]
+ vpaddd ymm5,ymm5,YMMWORD PTR[((96-128))+rax]
+
+ vpsrld ymm7,ymm6,3
+ vpsrld ymm1,ymm6,7
+ vpslld ymm2,ymm6,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm6,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm6,14
+ vmovdqu ymm0,YMMWORD PTR[((256-256-128))+rbx]
+ vpsrld ymm3,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm5,ymm5,ymm7
+ vpxor ymm7,ymm3,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm5,ymm5,ymm7
+ vpsrld ymm7,ymm10,6
+ vpslld ymm2,ymm10,26
+ vmovdqu YMMWORD PTR[(320-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm13
+
+ vpsrld ymm1,ymm10,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm10,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[((-64))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm10,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm10,7
+ vpandn ymm0,ymm10,ymm12
+ vpand ymm3,ymm10,ymm11
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm13,ymm14,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm14,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm15,ymm14
+
+ vpxor ymm13,ymm13,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm14,13
+
+ vpslld ymm2,ymm14,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm13,ymm1
+
+ vpsrld ymm1,ymm14,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm14,10
+ vpxor ymm13,ymm15,ymm4
+ vpaddd ymm9,ymm9,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm13,ymm13,ymm5
+ vpaddd ymm13,ymm13,ymm7
+ vmovdqu ymm5,YMMWORD PTR[((384-256-128))+rbx]
+ vpaddd ymm6,ymm6,YMMWORD PTR[((128-128))+rax]
+
+ vpsrld ymm7,ymm5,3
+ vpsrld ymm1,ymm5,7
+ vpslld ymm2,ymm5,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm5,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm5,14
+ vmovdqu ymm0,YMMWORD PTR[((288-256-128))+rbx]
+ vpsrld ymm4,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm6,ymm6,ymm7
+ vpxor ymm7,ymm4,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm6,ymm6,ymm7
+ vpsrld ymm7,ymm9,6
+ vpslld ymm2,ymm9,26
+ vmovdqu YMMWORD PTR[(352-256-128)+rbx],ymm6
+ vpaddd ymm6,ymm6,ymm12
+
+ vpsrld ymm1,ymm9,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm9,21
+ vpaddd ymm6,ymm6,YMMWORD PTR[((-32))+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm9,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm9,7
+ vpandn ymm0,ymm9,ymm11
+ vpand ymm4,ymm9,ymm10
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm12,ymm13,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm13,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm14,ymm13
+
+ vpxor ymm12,ymm12,ymm1
+ vpaddd ymm6,ymm6,ymm7
+
+ vpsrld ymm1,ymm13,13
+
+ vpslld ymm2,ymm13,19
+ vpaddd ymm6,ymm6,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm12,ymm1
+
+ vpsrld ymm1,ymm13,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm13,10
+ vpxor ymm12,ymm14,ymm3
+ vpaddd ymm8,ymm8,ymm6
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm12,ymm12,ymm6
+ vpaddd ymm12,ymm12,ymm7
+ vmovdqu ymm6,YMMWORD PTR[((416-256-128))+rbx]
+ vpaddd ymm5,ymm5,YMMWORD PTR[((160-128))+rax]
+
+ vpsrld ymm7,ymm6,3
+ vpsrld ymm1,ymm6,7
+ vpslld ymm2,ymm6,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm6,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm6,14
+ vmovdqu ymm0,YMMWORD PTR[((320-256-128))+rbx]
+ vpsrld ymm3,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm5,ymm5,ymm7
+ vpxor ymm7,ymm3,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm5,ymm5,ymm7
+ vpsrld ymm7,ymm8,6
+ vpslld ymm2,ymm8,26
+ vmovdqu YMMWORD PTR[(384-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm11
+
+ vpsrld ymm1,ymm8,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm8,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm8,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm8,7
+ vpandn ymm0,ymm8,ymm10
+ vpand ymm3,ymm8,ymm9
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm11,ymm12,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm12,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm13,ymm12
+
+ vpxor ymm11,ymm11,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm12,13
+
+ vpslld ymm2,ymm12,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm11,ymm1
+
+ vpsrld ymm1,ymm12,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm12,10
+ vpxor ymm11,ymm13,ymm4
+ vpaddd ymm15,ymm15,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm11,ymm11,ymm5
+ vpaddd ymm11,ymm11,ymm7
+ vmovdqu ymm5,YMMWORD PTR[((448-256-128))+rbx]
+ vpaddd ymm6,ymm6,YMMWORD PTR[((192-128))+rax]
+
+ vpsrld ymm7,ymm5,3
+ vpsrld ymm1,ymm5,7
+ vpslld ymm2,ymm5,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm5,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm5,14
+ vmovdqu ymm0,YMMWORD PTR[((352-256-128))+rbx]
+ vpsrld ymm4,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm6,ymm6,ymm7
+ vpxor ymm7,ymm4,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm6,ymm6,ymm7
+ vpsrld ymm7,ymm15,6
+ vpslld ymm2,ymm15,26
+ vmovdqu YMMWORD PTR[(416-256-128)+rbx],ymm6
+ vpaddd ymm6,ymm6,ymm10
+
+ vpsrld ymm1,ymm15,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm15,21
+ vpaddd ymm6,ymm6,YMMWORD PTR[32+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm15,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm15,7
+ vpandn ymm0,ymm15,ymm9
+ vpand ymm4,ymm15,ymm8
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm10,ymm11,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm11,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm12,ymm11
+
+ vpxor ymm10,ymm10,ymm1
+ vpaddd ymm6,ymm6,ymm7
+
+ vpsrld ymm1,ymm11,13
+
+ vpslld ymm2,ymm11,19
+ vpaddd ymm6,ymm6,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm10,ymm1
+
+ vpsrld ymm1,ymm11,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm11,10
+ vpxor ymm10,ymm12,ymm3
+ vpaddd ymm14,ymm14,ymm6
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm10,ymm10,ymm6
+ vpaddd ymm10,ymm10,ymm7
+ vmovdqu ymm6,YMMWORD PTR[((480-256-128))+rbx]
+ vpaddd ymm5,ymm5,YMMWORD PTR[((224-128))+rax]
+
+ vpsrld ymm7,ymm6,3
+ vpsrld ymm1,ymm6,7
+ vpslld ymm2,ymm6,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm6,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm6,14
+ vmovdqu ymm0,YMMWORD PTR[((384-256-128))+rbx]
+ vpsrld ymm3,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm5,ymm5,ymm7
+ vpxor ymm7,ymm3,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm5,ymm5,ymm7
+ vpsrld ymm7,ymm14,6
+ vpslld ymm2,ymm14,26
+ vmovdqu YMMWORD PTR[(448-256-128)+rbx],ymm5
+ vpaddd ymm5,ymm5,ymm9
+
+ vpsrld ymm1,ymm14,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm14,21
+ vpaddd ymm5,ymm5,YMMWORD PTR[64+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm14,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm14,7
+ vpandn ymm0,ymm14,ymm8
+ vpand ymm3,ymm14,ymm15
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm9,ymm10,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm10,30
+ vpxor ymm0,ymm0,ymm3
+ vpxor ymm3,ymm11,ymm10
+
+ vpxor ymm9,ymm9,ymm1
+ vpaddd ymm5,ymm5,ymm7
+
+ vpsrld ymm1,ymm10,13
+
+ vpslld ymm2,ymm10,19
+ vpaddd ymm5,ymm5,ymm0
+ vpand ymm4,ymm4,ymm3
+
+ vpxor ymm7,ymm9,ymm1
+
+ vpsrld ymm1,ymm10,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm10,10
+ vpxor ymm9,ymm11,ymm4
+ vpaddd ymm13,ymm13,ymm5
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm9,ymm9,ymm5
+ vpaddd ymm9,ymm9,ymm7
+ vmovdqu ymm5,YMMWORD PTR[((0-128))+rax]
+ vpaddd ymm6,ymm6,YMMWORD PTR[((256-256-128))+rbx]
+
+ vpsrld ymm7,ymm5,3
+ vpsrld ymm1,ymm5,7
+ vpslld ymm2,ymm5,25
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm5,18
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm5,14
+ vmovdqu ymm0,YMMWORD PTR[((416-256-128))+rbx]
+ vpsrld ymm4,ymm0,10
+
+ vpxor ymm7,ymm7,ymm1
+ vpsrld ymm1,ymm0,17
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,15
+ vpaddd ymm6,ymm6,ymm7
+ vpxor ymm7,ymm4,ymm1
+ vpsrld ymm1,ymm0,19
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm0,13
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+ vpaddd ymm6,ymm6,ymm7
+ vpsrld ymm7,ymm13,6
+ vpslld ymm2,ymm13,26
+ vmovdqu YMMWORD PTR[(480-256-128)+rbx],ymm6
+ vpaddd ymm6,ymm6,ymm8
+
+ vpsrld ymm1,ymm13,11
+ vpxor ymm7,ymm7,ymm2
+ vpslld ymm2,ymm13,21
+ vpaddd ymm6,ymm6,YMMWORD PTR[96+rbp]
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm1,ymm13,25
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm13,7
+ vpandn ymm0,ymm13,ymm15
+ vpand ymm4,ymm13,ymm14
+
+ vpxor ymm7,ymm7,ymm1
+
+ vpsrld ymm8,ymm9,2
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm1,ymm9,30
+ vpxor ymm0,ymm0,ymm4
+ vpxor ymm4,ymm10,ymm9
+
+ vpxor ymm8,ymm8,ymm1
+ vpaddd ymm6,ymm6,ymm7
+
+ vpsrld ymm1,ymm9,13
+
+ vpslld ymm2,ymm9,19
+ vpaddd ymm6,ymm6,ymm0
+ vpand ymm3,ymm3,ymm4
+
+ vpxor ymm7,ymm8,ymm1
+
+ vpsrld ymm1,ymm9,22
+ vpxor ymm7,ymm7,ymm2
+
+ vpslld ymm2,ymm9,10
+ vpxor ymm8,ymm10,ymm3
+ vpaddd ymm12,ymm12,ymm6
+
+ vpxor ymm7,ymm7,ymm1
+ vpxor ymm7,ymm7,ymm2
+
+ vpaddd ymm8,ymm8,ymm6
+ vpaddd ymm8,ymm8,ymm7
+ add rbp,256
+ dec ecx
+ jnz $L$oop_16_xx_avx2
+
+ mov ecx,1
+ lea rbx,QWORD PTR[512+rsp]
+ lea rbp,QWORD PTR[((K256+128))]
+ cmp ecx,DWORD PTR[rbx]
+ cmovge r12,rbp
+ cmp ecx,DWORD PTR[4+rbx]
+ cmovge r13,rbp
+ cmp ecx,DWORD PTR[8+rbx]
+ cmovge r14,rbp
+ cmp ecx,DWORD PTR[12+rbx]
+ cmovge r15,rbp
+ cmp ecx,DWORD PTR[16+rbx]
+ cmovge r8,rbp
+ cmp ecx,DWORD PTR[20+rbx]
+ cmovge r9,rbp
+ cmp ecx,DWORD PTR[24+rbx]
+ cmovge r10,rbp
+ cmp ecx,DWORD PTR[28+rbx]
+ cmovge r11,rbp
+ vmovdqa ymm7,YMMWORD PTR[rbx]
+ vpxor ymm0,ymm0,ymm0
+ vmovdqa ymm6,ymm7
+ vpcmpgtd ymm6,ymm6,ymm0
+ vpaddd ymm7,ymm7,ymm6
+
+ vmovdqu ymm0,YMMWORD PTR[((0-128))+rdi]
+ vpand ymm8,ymm8,ymm6
+ vmovdqu ymm1,YMMWORD PTR[((32-128))+rdi]
+ vpand ymm9,ymm9,ymm6
+ vmovdqu ymm2,YMMWORD PTR[((64-128))+rdi]
+ vpand ymm10,ymm10,ymm6
+ vmovdqu ymm5,YMMWORD PTR[((96-128))+rdi]
+ vpand ymm11,ymm11,ymm6
+ vpaddd ymm8,ymm8,ymm0
+ vmovdqu ymm0,YMMWORD PTR[((128-128))+rdi]
+ vpand ymm12,ymm12,ymm6
+ vpaddd ymm9,ymm9,ymm1
+ vmovdqu ymm1,YMMWORD PTR[((160-128))+rdi]
+ vpand ymm13,ymm13,ymm6
+ vpaddd ymm10,ymm10,ymm2
+ vmovdqu ymm2,YMMWORD PTR[((192-128))+rdi]
+ vpand ymm14,ymm14,ymm6
+ vpaddd ymm11,ymm11,ymm5
+ vmovdqu ymm5,YMMWORD PTR[((224-128))+rdi]
+ vpand ymm15,ymm15,ymm6
+ vpaddd ymm12,ymm12,ymm0
+ vpaddd ymm13,ymm13,ymm1
+ vmovdqu YMMWORD PTR[(0-128)+rdi],ymm8
+ vpaddd ymm14,ymm14,ymm2
+ vmovdqu YMMWORD PTR[(32-128)+rdi],ymm9
+ vpaddd ymm15,ymm15,ymm5
+ vmovdqu YMMWORD PTR[(64-128)+rdi],ymm10
+ vmovdqu YMMWORD PTR[(96-128)+rdi],ymm11
+ vmovdqu YMMWORD PTR[(128-128)+rdi],ymm12
+ vmovdqu YMMWORD PTR[(160-128)+rdi],ymm13
+ vmovdqu YMMWORD PTR[(192-128)+rdi],ymm14
+ vmovdqu YMMWORD PTR[(224-128)+rdi],ymm15
+
+ vmovdqu YMMWORD PTR[rbx],ymm7
+ lea rbx,QWORD PTR[((256+128))+rsp]
+ vmovdqu ymm6,YMMWORD PTR[$L$pbswap]
+ dec edx
+ jnz $L$oop_avx2
+
+
+
+
+
+
+
+$L$done_avx2::
+ mov rax,QWORD PTR[544+rsp]
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((-216))+rax]
+ movaps xmm7,XMMWORD PTR[((-200))+rax]
+ movaps xmm8,XMMWORD PTR[((-184))+rax]
+ movaps xmm9,XMMWORD PTR[((-168))+rax]
+ movaps xmm10,XMMWORD PTR[((-152))+rax]
+ movaps xmm11,XMMWORD PTR[((-136))+rax]
+ movaps xmm12,XMMWORD PTR[((-120))+rax]
+ movaps xmm13,XMMWORD PTR[((-104))+rax]
+ movaps xmm14,XMMWORD PTR[((-88))+rax]
+ movaps xmm15,XMMWORD PTR[((-72))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+
+ mov r14,QWORD PTR[((-40))+rax]
+
+ mov r13,QWORD PTR[((-32))+rax]
+
+ mov r12,QWORD PTR[((-24))+rax]
+
+ mov rbp,QWORD PTR[((-16))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+
+ lea rsp,QWORD PTR[rax]
+
+$L$epilogue_avx2::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha256_multi_block_avx2::
+sha256_multi_block_avx2 ENDP
+ALIGN 256
+K256::
+ DD 1116352408,1116352408,1116352408,1116352408
+ DD 1116352408,1116352408,1116352408,1116352408
+ DD 1899447441,1899447441,1899447441,1899447441
+ DD 1899447441,1899447441,1899447441,1899447441
+ DD 3049323471,3049323471,3049323471,3049323471
+ DD 3049323471,3049323471,3049323471,3049323471
+ DD 3921009573,3921009573,3921009573,3921009573
+ DD 3921009573,3921009573,3921009573,3921009573
+ DD 961987163,961987163,961987163,961987163
+ DD 961987163,961987163,961987163,961987163
+ DD 1508970993,1508970993,1508970993,1508970993
+ DD 1508970993,1508970993,1508970993,1508970993
+ DD 2453635748,2453635748,2453635748,2453635748
+ DD 2453635748,2453635748,2453635748,2453635748
+ DD 2870763221,2870763221,2870763221,2870763221
+ DD 2870763221,2870763221,2870763221,2870763221
+ DD 3624381080,3624381080,3624381080,3624381080
+ DD 3624381080,3624381080,3624381080,3624381080
+ DD 310598401,310598401,310598401,310598401
+ DD 310598401,310598401,310598401,310598401
+ DD 607225278,607225278,607225278,607225278
+ DD 607225278,607225278,607225278,607225278
+ DD 1426881987,1426881987,1426881987,1426881987
+ DD 1426881987,1426881987,1426881987,1426881987
+ DD 1925078388,1925078388,1925078388,1925078388
+ DD 1925078388,1925078388,1925078388,1925078388
+ DD 2162078206,2162078206,2162078206,2162078206
+ DD 2162078206,2162078206,2162078206,2162078206
+ DD 2614888103,2614888103,2614888103,2614888103
+ DD 2614888103,2614888103,2614888103,2614888103
+ DD 3248222580,3248222580,3248222580,3248222580
+ DD 3248222580,3248222580,3248222580,3248222580
+ DD 3835390401,3835390401,3835390401,3835390401
+ DD 3835390401,3835390401,3835390401,3835390401
+ DD 4022224774,4022224774,4022224774,4022224774
+ DD 4022224774,4022224774,4022224774,4022224774
+ DD 264347078,264347078,264347078,264347078
+ DD 264347078,264347078,264347078,264347078
+ DD 604807628,604807628,604807628,604807628
+ DD 604807628,604807628,604807628,604807628
+ DD 770255983,770255983,770255983,770255983
+ DD 770255983,770255983,770255983,770255983
+ DD 1249150122,1249150122,1249150122,1249150122
+ DD 1249150122,1249150122,1249150122,1249150122
+ DD 1555081692,1555081692,1555081692,1555081692
+ DD 1555081692,1555081692,1555081692,1555081692
+ DD 1996064986,1996064986,1996064986,1996064986
+ DD 1996064986,1996064986,1996064986,1996064986
+ DD 2554220882,2554220882,2554220882,2554220882
+ DD 2554220882,2554220882,2554220882,2554220882
+ DD 2821834349,2821834349,2821834349,2821834349
+ DD 2821834349,2821834349,2821834349,2821834349
+ DD 2952996808,2952996808,2952996808,2952996808
+ DD 2952996808,2952996808,2952996808,2952996808
+ DD 3210313671,3210313671,3210313671,3210313671
+ DD 3210313671,3210313671,3210313671,3210313671
+ DD 3336571891,3336571891,3336571891,3336571891
+ DD 3336571891,3336571891,3336571891,3336571891
+ DD 3584528711,3584528711,3584528711,3584528711
+ DD 3584528711,3584528711,3584528711,3584528711
+ DD 113926993,113926993,113926993,113926993
+ DD 113926993,113926993,113926993,113926993
+ DD 338241895,338241895,338241895,338241895
+ DD 338241895,338241895,338241895,338241895
+ DD 666307205,666307205,666307205,666307205
+ DD 666307205,666307205,666307205,666307205
+ DD 773529912,773529912,773529912,773529912
+ DD 773529912,773529912,773529912,773529912
+ DD 1294757372,1294757372,1294757372,1294757372
+ DD 1294757372,1294757372,1294757372,1294757372
+ DD 1396182291,1396182291,1396182291,1396182291
+ DD 1396182291,1396182291,1396182291,1396182291
+ DD 1695183700,1695183700,1695183700,1695183700
+ DD 1695183700,1695183700,1695183700,1695183700
+ DD 1986661051,1986661051,1986661051,1986661051
+ DD 1986661051,1986661051,1986661051,1986661051
+ DD 2177026350,2177026350,2177026350,2177026350
+ DD 2177026350,2177026350,2177026350,2177026350
+ DD 2456956037,2456956037,2456956037,2456956037
+ DD 2456956037,2456956037,2456956037,2456956037
+ DD 2730485921,2730485921,2730485921,2730485921
+ DD 2730485921,2730485921,2730485921,2730485921
+ DD 2820302411,2820302411,2820302411,2820302411
+ DD 2820302411,2820302411,2820302411,2820302411
+ DD 3259730800,3259730800,3259730800,3259730800
+ DD 3259730800,3259730800,3259730800,3259730800
+ DD 3345764771,3345764771,3345764771,3345764771
+ DD 3345764771,3345764771,3345764771,3345764771
+ DD 3516065817,3516065817,3516065817,3516065817
+ DD 3516065817,3516065817,3516065817,3516065817
+ DD 3600352804,3600352804,3600352804,3600352804
+ DD 3600352804,3600352804,3600352804,3600352804
+ DD 4094571909,4094571909,4094571909,4094571909
+ DD 4094571909,4094571909,4094571909,4094571909
+ DD 275423344,275423344,275423344,275423344
+ DD 275423344,275423344,275423344,275423344
+ DD 430227734,430227734,430227734,430227734
+ DD 430227734,430227734,430227734,430227734
+ DD 506948616,506948616,506948616,506948616
+ DD 506948616,506948616,506948616,506948616
+ DD 659060556,659060556,659060556,659060556
+ DD 659060556,659060556,659060556,659060556
+ DD 883997877,883997877,883997877,883997877
+ DD 883997877,883997877,883997877,883997877
+ DD 958139571,958139571,958139571,958139571
+ DD 958139571,958139571,958139571,958139571
+ DD 1322822218,1322822218,1322822218,1322822218
+ DD 1322822218,1322822218,1322822218,1322822218
+ DD 1537002063,1537002063,1537002063,1537002063
+ DD 1537002063,1537002063,1537002063,1537002063
+ DD 1747873779,1747873779,1747873779,1747873779
+ DD 1747873779,1747873779,1747873779,1747873779
+ DD 1955562222,1955562222,1955562222,1955562222
+ DD 1955562222,1955562222,1955562222,1955562222
+ DD 2024104815,2024104815,2024104815,2024104815
+ DD 2024104815,2024104815,2024104815,2024104815
+ DD 2227730452,2227730452,2227730452,2227730452
+ DD 2227730452,2227730452,2227730452,2227730452
+ DD 2361852424,2361852424,2361852424,2361852424
+ DD 2361852424,2361852424,2361852424,2361852424
+ DD 2428436474,2428436474,2428436474,2428436474
+ DD 2428436474,2428436474,2428436474,2428436474
+ DD 2756734187,2756734187,2756734187,2756734187
+ DD 2756734187,2756734187,2756734187,2756734187
+ DD 3204031479,3204031479,3204031479,3204031479
+ DD 3204031479,3204031479,3204031479,3204031479
+ DD 3329325298,3329325298,3329325298,3329325298
+ DD 3329325298,3329325298,3329325298,3329325298
+$L$pbswap::
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+K256_shaext::
+ DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
+ DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
+ DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
+ DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
+ DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
+ DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
+ DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
+ DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
+ DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
+ DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
+ DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
+ DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
+ DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
+ DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
+ DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
+ DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
+DB 83,72,65,50,53,54,32,109,117,108,116,105,45,98,108,111
+DB 99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114
+DB 32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71
+DB 65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112
+DB 101,110,115,115,108,46,111,114,103,62,0
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ mov rax,QWORD PTR[272+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+
+ lea rsi,QWORD PTR[((-24-160))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+ALIGN 16
+avx2_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ mov rax,QWORD PTR[544+r8]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+ lea rsi,QWORD PTR[((-56-160))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,20
+ DD 0a548f3fch
+
+ jmp $L$in_prologue
+avx2_handler ENDP
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_sha256_multi_block
+ DD imagerel $L$SEH_end_sha256_multi_block
+ DD imagerel $L$SEH_info_sha256_multi_block
+ DD imagerel $L$SEH_begin_sha256_multi_block_shaext
+ DD imagerel $L$SEH_end_sha256_multi_block_shaext
+ DD imagerel $L$SEH_info_sha256_multi_block_shaext
+ DD imagerel $L$SEH_begin_sha256_multi_block_avx
+ DD imagerel $L$SEH_end_sha256_multi_block_avx
+ DD imagerel $L$SEH_info_sha256_multi_block_avx
+ DD imagerel $L$SEH_begin_sha256_multi_block_avx2
+ DD imagerel $L$SEH_end_sha256_multi_block_avx2
+ DD imagerel $L$SEH_info_sha256_multi_block_avx2
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_sha256_multi_block::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$body,imagerel $L$epilogue
+$L$SEH_info_sha256_multi_block_shaext::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$body_shaext,imagerel $L$epilogue_shaext
+$L$SEH_info_sha256_multi_block_avx::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$body_avx,imagerel $L$epilogue_avx
+$L$SEH_info_sha256_multi_block_avx2::
+DB 9,0,0,0
+ DD imagerel avx2_handler
+ DD imagerel $L$body_avx2,imagerel $L$epilogue_avx2
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/sha/sha256-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/sha/sha256-x86_64.masm
index 09b3eac722..a1faf417c3 100644
--- a/contrib/libs/openssl/asm/windows/crypto/sha/sha256-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/sha/sha256-x86_64.masm
@@ -1,5717 +1,5717 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-PUBLIC sha256_block_data_order
-
-ALIGN 16
-sha256_block_data_order PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha256_block_data_order::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- lea r11,QWORD PTR[OPENSSL_ia32cap_P]
- mov r9d,DWORD PTR[r11]
- mov r10d,DWORD PTR[4+r11]
- mov r11d,DWORD PTR[8+r11]
- test r11d,536870912
- jnz _shaext_shortcut
- and r11d,296
- cmp r11d,296
- je $L$avx2_shortcut
- and r9d,1073741824
- and r10d,268435968
- or r10d,r9d
- cmp r10d,1342177792
- je $L$avx_shortcut
- test r10d,512
- jnz $L$ssse3_shortcut
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- shl rdx,4
- sub rsp,16*4+4*8
- lea rdx,QWORD PTR[rdx*4+rsi]
- and rsp,-64
- mov QWORD PTR[((64+0))+rsp],rdi
- mov QWORD PTR[((64+8))+rsp],rsi
- mov QWORD PTR[((64+16))+rsp],rdx
- mov QWORD PTR[88+rsp],rax
-
-$L$prologue::
-
- mov eax,DWORD PTR[rdi]
- mov ebx,DWORD PTR[4+rdi]
- mov ecx,DWORD PTR[8+rdi]
- mov edx,DWORD PTR[12+rdi]
- mov r8d,DWORD PTR[16+rdi]
- mov r9d,DWORD PTR[20+rdi]
- mov r10d,DWORD PTR[24+rdi]
- mov r11d,DWORD PTR[28+rdi]
- jmp $L$loop
-
-ALIGN 16
-$L$loop::
- mov edi,ebx
- lea rbp,QWORD PTR[K256]
- xor edi,ecx
- mov r12d,DWORD PTR[rsi]
- mov r13d,r8d
- mov r14d,eax
- bswap r12d
- ror r13d,14
- mov r15d,r9d
-
- xor r13d,r8d
- ror r14d,9
- xor r15d,r10d
-
- mov DWORD PTR[rsp],r12d
- xor r14d,eax
- and r15d,r8d
-
- ror r13d,5
- add r12d,r11d
- xor r15d,r10d
-
- ror r14d,11
- xor r13d,r8d
- add r12d,r15d
-
- mov r15d,eax
- add r12d,DWORD PTR[rbp]
- xor r14d,eax
-
- xor r15d,ebx
- ror r13d,6
- mov r11d,ebx
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor r11d,edi
- add edx,r12d
- add r11d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add r11d,r14d
- mov r12d,DWORD PTR[4+rsi]
- mov r13d,edx
- mov r14d,r11d
- bswap r12d
- ror r13d,14
- mov edi,r8d
-
- xor r13d,edx
- ror r14d,9
- xor edi,r9d
-
- mov DWORD PTR[4+rsp],r12d
- xor r14d,r11d
- and edi,edx
-
- ror r13d,5
- add r12d,r10d
- xor edi,r9d
-
- ror r14d,11
- xor r13d,edx
- add r12d,edi
-
- mov edi,r11d
- add r12d,DWORD PTR[rbp]
- xor r14d,r11d
-
- xor edi,eax
- ror r13d,6
- mov r10d,eax
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor r10d,r15d
- add ecx,r12d
- add r10d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add r10d,r14d
- mov r12d,DWORD PTR[8+rsi]
- mov r13d,ecx
- mov r14d,r10d
- bswap r12d
- ror r13d,14
- mov r15d,edx
-
- xor r13d,ecx
- ror r14d,9
- xor r15d,r8d
-
- mov DWORD PTR[8+rsp],r12d
- xor r14d,r10d
- and r15d,ecx
-
- ror r13d,5
- add r12d,r9d
- xor r15d,r8d
-
- ror r14d,11
- xor r13d,ecx
- add r12d,r15d
-
- mov r15d,r10d
- add r12d,DWORD PTR[rbp]
- xor r14d,r10d
-
- xor r15d,r11d
- ror r13d,6
- mov r9d,r11d
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor r9d,edi
- add ebx,r12d
- add r9d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add r9d,r14d
- mov r12d,DWORD PTR[12+rsi]
- mov r13d,ebx
- mov r14d,r9d
- bswap r12d
- ror r13d,14
- mov edi,ecx
-
- xor r13d,ebx
- ror r14d,9
- xor edi,edx
-
- mov DWORD PTR[12+rsp],r12d
- xor r14d,r9d
- and edi,ebx
-
- ror r13d,5
- add r12d,r8d
- xor edi,edx
-
- ror r14d,11
- xor r13d,ebx
- add r12d,edi
-
- mov edi,r9d
- add r12d,DWORD PTR[rbp]
- xor r14d,r9d
-
- xor edi,r10d
- ror r13d,6
- mov r8d,r10d
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor r8d,r15d
- add eax,r12d
- add r8d,r12d
-
- lea rbp,QWORD PTR[20+rbp]
- add r8d,r14d
- mov r12d,DWORD PTR[16+rsi]
- mov r13d,eax
- mov r14d,r8d
- bswap r12d
- ror r13d,14
- mov r15d,ebx
-
- xor r13d,eax
- ror r14d,9
- xor r15d,ecx
-
- mov DWORD PTR[16+rsp],r12d
- xor r14d,r8d
- and r15d,eax
-
- ror r13d,5
- add r12d,edx
- xor r15d,ecx
-
- ror r14d,11
- xor r13d,eax
- add r12d,r15d
-
- mov r15d,r8d
- add r12d,DWORD PTR[rbp]
- xor r14d,r8d
-
- xor r15d,r9d
- ror r13d,6
- mov edx,r9d
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor edx,edi
- add r11d,r12d
- add edx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add edx,r14d
- mov r12d,DWORD PTR[20+rsi]
- mov r13d,r11d
- mov r14d,edx
- bswap r12d
- ror r13d,14
- mov edi,eax
-
- xor r13d,r11d
- ror r14d,9
- xor edi,ebx
-
- mov DWORD PTR[20+rsp],r12d
- xor r14d,edx
- and edi,r11d
-
- ror r13d,5
- add r12d,ecx
- xor edi,ebx
-
- ror r14d,11
- xor r13d,r11d
- add r12d,edi
-
- mov edi,edx
- add r12d,DWORD PTR[rbp]
- xor r14d,edx
-
- xor edi,r8d
- ror r13d,6
- mov ecx,r8d
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor ecx,r15d
- add r10d,r12d
- add ecx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add ecx,r14d
- mov r12d,DWORD PTR[24+rsi]
- mov r13d,r10d
- mov r14d,ecx
- bswap r12d
- ror r13d,14
- mov r15d,r11d
-
- xor r13d,r10d
- ror r14d,9
- xor r15d,eax
-
- mov DWORD PTR[24+rsp],r12d
- xor r14d,ecx
- and r15d,r10d
-
- ror r13d,5
- add r12d,ebx
- xor r15d,eax
-
- ror r14d,11
- xor r13d,r10d
- add r12d,r15d
-
- mov r15d,ecx
- add r12d,DWORD PTR[rbp]
- xor r14d,ecx
-
- xor r15d,edx
- ror r13d,6
- mov ebx,edx
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor ebx,edi
- add r9d,r12d
- add ebx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add ebx,r14d
- mov r12d,DWORD PTR[28+rsi]
- mov r13d,r9d
- mov r14d,ebx
- bswap r12d
- ror r13d,14
- mov edi,r10d
-
- xor r13d,r9d
- ror r14d,9
- xor edi,r11d
-
- mov DWORD PTR[28+rsp],r12d
- xor r14d,ebx
- and edi,r9d
-
- ror r13d,5
- add r12d,eax
- xor edi,r11d
-
- ror r14d,11
- xor r13d,r9d
- add r12d,edi
-
- mov edi,ebx
- add r12d,DWORD PTR[rbp]
- xor r14d,ebx
-
- xor edi,ecx
- ror r13d,6
- mov eax,ecx
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor eax,r15d
- add r8d,r12d
- add eax,r12d
-
- lea rbp,QWORD PTR[20+rbp]
- add eax,r14d
- mov r12d,DWORD PTR[32+rsi]
- mov r13d,r8d
- mov r14d,eax
- bswap r12d
- ror r13d,14
- mov r15d,r9d
-
- xor r13d,r8d
- ror r14d,9
- xor r15d,r10d
-
- mov DWORD PTR[32+rsp],r12d
- xor r14d,eax
- and r15d,r8d
-
- ror r13d,5
- add r12d,r11d
- xor r15d,r10d
-
- ror r14d,11
- xor r13d,r8d
- add r12d,r15d
-
- mov r15d,eax
- add r12d,DWORD PTR[rbp]
- xor r14d,eax
-
- xor r15d,ebx
- ror r13d,6
- mov r11d,ebx
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor r11d,edi
- add edx,r12d
- add r11d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add r11d,r14d
- mov r12d,DWORD PTR[36+rsi]
- mov r13d,edx
- mov r14d,r11d
- bswap r12d
- ror r13d,14
- mov edi,r8d
-
- xor r13d,edx
- ror r14d,9
- xor edi,r9d
-
- mov DWORD PTR[36+rsp],r12d
- xor r14d,r11d
- and edi,edx
-
- ror r13d,5
- add r12d,r10d
- xor edi,r9d
-
- ror r14d,11
- xor r13d,edx
- add r12d,edi
-
- mov edi,r11d
- add r12d,DWORD PTR[rbp]
- xor r14d,r11d
-
- xor edi,eax
- ror r13d,6
- mov r10d,eax
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor r10d,r15d
- add ecx,r12d
- add r10d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add r10d,r14d
- mov r12d,DWORD PTR[40+rsi]
- mov r13d,ecx
- mov r14d,r10d
- bswap r12d
- ror r13d,14
- mov r15d,edx
-
- xor r13d,ecx
- ror r14d,9
- xor r15d,r8d
-
- mov DWORD PTR[40+rsp],r12d
- xor r14d,r10d
- and r15d,ecx
-
- ror r13d,5
- add r12d,r9d
- xor r15d,r8d
-
- ror r14d,11
- xor r13d,ecx
- add r12d,r15d
-
- mov r15d,r10d
- add r12d,DWORD PTR[rbp]
- xor r14d,r10d
-
- xor r15d,r11d
- ror r13d,6
- mov r9d,r11d
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor r9d,edi
- add ebx,r12d
- add r9d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add r9d,r14d
- mov r12d,DWORD PTR[44+rsi]
- mov r13d,ebx
- mov r14d,r9d
- bswap r12d
- ror r13d,14
- mov edi,ecx
-
- xor r13d,ebx
- ror r14d,9
- xor edi,edx
-
- mov DWORD PTR[44+rsp],r12d
- xor r14d,r9d
- and edi,ebx
-
- ror r13d,5
- add r12d,r8d
- xor edi,edx
-
- ror r14d,11
- xor r13d,ebx
- add r12d,edi
-
- mov edi,r9d
- add r12d,DWORD PTR[rbp]
- xor r14d,r9d
-
- xor edi,r10d
- ror r13d,6
- mov r8d,r10d
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor r8d,r15d
- add eax,r12d
- add r8d,r12d
-
- lea rbp,QWORD PTR[20+rbp]
- add r8d,r14d
- mov r12d,DWORD PTR[48+rsi]
- mov r13d,eax
- mov r14d,r8d
- bswap r12d
- ror r13d,14
- mov r15d,ebx
-
- xor r13d,eax
- ror r14d,9
- xor r15d,ecx
-
- mov DWORD PTR[48+rsp],r12d
- xor r14d,r8d
- and r15d,eax
-
- ror r13d,5
- add r12d,edx
- xor r15d,ecx
-
- ror r14d,11
- xor r13d,eax
- add r12d,r15d
-
- mov r15d,r8d
- add r12d,DWORD PTR[rbp]
- xor r14d,r8d
-
- xor r15d,r9d
- ror r13d,6
- mov edx,r9d
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor edx,edi
- add r11d,r12d
- add edx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add edx,r14d
- mov r12d,DWORD PTR[52+rsi]
- mov r13d,r11d
- mov r14d,edx
- bswap r12d
- ror r13d,14
- mov edi,eax
-
- xor r13d,r11d
- ror r14d,9
- xor edi,ebx
-
- mov DWORD PTR[52+rsp],r12d
- xor r14d,edx
- and edi,r11d
-
- ror r13d,5
- add r12d,ecx
- xor edi,ebx
-
- ror r14d,11
- xor r13d,r11d
- add r12d,edi
-
- mov edi,edx
- add r12d,DWORD PTR[rbp]
- xor r14d,edx
-
- xor edi,r8d
- ror r13d,6
- mov ecx,r8d
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor ecx,r15d
- add r10d,r12d
- add ecx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add ecx,r14d
- mov r12d,DWORD PTR[56+rsi]
- mov r13d,r10d
- mov r14d,ecx
- bswap r12d
- ror r13d,14
- mov r15d,r11d
-
- xor r13d,r10d
- ror r14d,9
- xor r15d,eax
-
- mov DWORD PTR[56+rsp],r12d
- xor r14d,ecx
- and r15d,r10d
-
- ror r13d,5
- add r12d,ebx
- xor r15d,eax
-
- ror r14d,11
- xor r13d,r10d
- add r12d,r15d
-
- mov r15d,ecx
- add r12d,DWORD PTR[rbp]
- xor r14d,ecx
-
- xor r15d,edx
- ror r13d,6
- mov ebx,edx
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor ebx,edi
- add r9d,r12d
- add ebx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- add ebx,r14d
- mov r12d,DWORD PTR[60+rsi]
- mov r13d,r9d
- mov r14d,ebx
- bswap r12d
- ror r13d,14
- mov edi,r10d
-
- xor r13d,r9d
- ror r14d,9
- xor edi,r11d
-
- mov DWORD PTR[60+rsp],r12d
- xor r14d,ebx
- and edi,r9d
-
- ror r13d,5
- add r12d,eax
- xor edi,r11d
-
- ror r14d,11
- xor r13d,r9d
- add r12d,edi
-
- mov edi,ebx
- add r12d,DWORD PTR[rbp]
- xor r14d,ebx
-
- xor edi,ecx
- ror r13d,6
- mov eax,ecx
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor eax,r15d
- add r8d,r12d
- add eax,r12d
-
- lea rbp,QWORD PTR[20+rbp]
- jmp $L$rounds_16_xx
-ALIGN 16
-$L$rounds_16_xx::
- mov r13d,DWORD PTR[4+rsp]
- mov r15d,DWORD PTR[56+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add eax,r14d
- mov r14d,r15d
- ror r15d,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor r15d,r14d
- shr r14d,10
-
- ror r15d,17
- xor r12d,r13d
- xor r15d,r14d
- add r12d,DWORD PTR[36+rsp]
-
- add r12d,DWORD PTR[rsp]
- mov r13d,r8d
- add r12d,r15d
- mov r14d,eax
- ror r13d,14
- mov r15d,r9d
-
- xor r13d,r8d
- ror r14d,9
- xor r15d,r10d
-
- mov DWORD PTR[rsp],r12d
- xor r14d,eax
- and r15d,r8d
-
- ror r13d,5
- add r12d,r11d
- xor r15d,r10d
-
- ror r14d,11
- xor r13d,r8d
- add r12d,r15d
-
- mov r15d,eax
- add r12d,DWORD PTR[rbp]
- xor r14d,eax
-
- xor r15d,ebx
- ror r13d,6
- mov r11d,ebx
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor r11d,edi
- add edx,r12d
- add r11d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[8+rsp]
- mov edi,DWORD PTR[60+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add r11d,r14d
- mov r14d,edi
- ror edi,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor edi,r14d
- shr r14d,10
-
- ror edi,17
- xor r12d,r13d
- xor edi,r14d
- add r12d,DWORD PTR[40+rsp]
-
- add r12d,DWORD PTR[4+rsp]
- mov r13d,edx
- add r12d,edi
- mov r14d,r11d
- ror r13d,14
- mov edi,r8d
-
- xor r13d,edx
- ror r14d,9
- xor edi,r9d
-
- mov DWORD PTR[4+rsp],r12d
- xor r14d,r11d
- and edi,edx
-
- ror r13d,5
- add r12d,r10d
- xor edi,r9d
-
- ror r14d,11
- xor r13d,edx
- add r12d,edi
-
- mov edi,r11d
- add r12d,DWORD PTR[rbp]
- xor r14d,r11d
-
- xor edi,eax
- ror r13d,6
- mov r10d,eax
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor r10d,r15d
- add ecx,r12d
- add r10d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[12+rsp]
- mov r15d,DWORD PTR[rsp]
-
- mov r12d,r13d
- ror r13d,11
- add r10d,r14d
- mov r14d,r15d
- ror r15d,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor r15d,r14d
- shr r14d,10
-
- ror r15d,17
- xor r12d,r13d
- xor r15d,r14d
- add r12d,DWORD PTR[44+rsp]
-
- add r12d,DWORD PTR[8+rsp]
- mov r13d,ecx
- add r12d,r15d
- mov r14d,r10d
- ror r13d,14
- mov r15d,edx
-
- xor r13d,ecx
- ror r14d,9
- xor r15d,r8d
-
- mov DWORD PTR[8+rsp],r12d
- xor r14d,r10d
- and r15d,ecx
-
- ror r13d,5
- add r12d,r9d
- xor r15d,r8d
-
- ror r14d,11
- xor r13d,ecx
- add r12d,r15d
-
- mov r15d,r10d
- add r12d,DWORD PTR[rbp]
- xor r14d,r10d
-
- xor r15d,r11d
- ror r13d,6
- mov r9d,r11d
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor r9d,edi
- add ebx,r12d
- add r9d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[16+rsp]
- mov edi,DWORD PTR[4+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add r9d,r14d
- mov r14d,edi
- ror edi,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor edi,r14d
- shr r14d,10
-
- ror edi,17
- xor r12d,r13d
- xor edi,r14d
- add r12d,DWORD PTR[48+rsp]
-
- add r12d,DWORD PTR[12+rsp]
- mov r13d,ebx
- add r12d,edi
- mov r14d,r9d
- ror r13d,14
- mov edi,ecx
-
- xor r13d,ebx
- ror r14d,9
- xor edi,edx
-
- mov DWORD PTR[12+rsp],r12d
- xor r14d,r9d
- and edi,ebx
-
- ror r13d,5
- add r12d,r8d
- xor edi,edx
-
- ror r14d,11
- xor r13d,ebx
- add r12d,edi
-
- mov edi,r9d
- add r12d,DWORD PTR[rbp]
- xor r14d,r9d
-
- xor edi,r10d
- ror r13d,6
- mov r8d,r10d
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor r8d,r15d
- add eax,r12d
- add r8d,r12d
-
- lea rbp,QWORD PTR[20+rbp]
- mov r13d,DWORD PTR[20+rsp]
- mov r15d,DWORD PTR[8+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add r8d,r14d
- mov r14d,r15d
- ror r15d,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor r15d,r14d
- shr r14d,10
-
- ror r15d,17
- xor r12d,r13d
- xor r15d,r14d
- add r12d,DWORD PTR[52+rsp]
-
- add r12d,DWORD PTR[16+rsp]
- mov r13d,eax
- add r12d,r15d
- mov r14d,r8d
- ror r13d,14
- mov r15d,ebx
-
- xor r13d,eax
- ror r14d,9
- xor r15d,ecx
-
- mov DWORD PTR[16+rsp],r12d
- xor r14d,r8d
- and r15d,eax
-
- ror r13d,5
- add r12d,edx
- xor r15d,ecx
-
- ror r14d,11
- xor r13d,eax
- add r12d,r15d
-
- mov r15d,r8d
- add r12d,DWORD PTR[rbp]
- xor r14d,r8d
-
- xor r15d,r9d
- ror r13d,6
- mov edx,r9d
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor edx,edi
- add r11d,r12d
- add edx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[24+rsp]
- mov edi,DWORD PTR[12+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add edx,r14d
- mov r14d,edi
- ror edi,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor edi,r14d
- shr r14d,10
-
- ror edi,17
- xor r12d,r13d
- xor edi,r14d
- add r12d,DWORD PTR[56+rsp]
-
- add r12d,DWORD PTR[20+rsp]
- mov r13d,r11d
- add r12d,edi
- mov r14d,edx
- ror r13d,14
- mov edi,eax
-
- xor r13d,r11d
- ror r14d,9
- xor edi,ebx
-
- mov DWORD PTR[20+rsp],r12d
- xor r14d,edx
- and edi,r11d
-
- ror r13d,5
- add r12d,ecx
- xor edi,ebx
-
- ror r14d,11
- xor r13d,r11d
- add r12d,edi
-
- mov edi,edx
- add r12d,DWORD PTR[rbp]
- xor r14d,edx
-
- xor edi,r8d
- ror r13d,6
- mov ecx,r8d
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor ecx,r15d
- add r10d,r12d
- add ecx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[28+rsp]
- mov r15d,DWORD PTR[16+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add ecx,r14d
- mov r14d,r15d
- ror r15d,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor r15d,r14d
- shr r14d,10
-
- ror r15d,17
- xor r12d,r13d
- xor r15d,r14d
- add r12d,DWORD PTR[60+rsp]
-
- add r12d,DWORD PTR[24+rsp]
- mov r13d,r10d
- add r12d,r15d
- mov r14d,ecx
- ror r13d,14
- mov r15d,r11d
-
- xor r13d,r10d
- ror r14d,9
- xor r15d,eax
-
- mov DWORD PTR[24+rsp],r12d
- xor r14d,ecx
- and r15d,r10d
-
- ror r13d,5
- add r12d,ebx
- xor r15d,eax
-
- ror r14d,11
- xor r13d,r10d
- add r12d,r15d
-
- mov r15d,ecx
- add r12d,DWORD PTR[rbp]
- xor r14d,ecx
-
- xor r15d,edx
- ror r13d,6
- mov ebx,edx
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor ebx,edi
- add r9d,r12d
- add ebx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[32+rsp]
- mov edi,DWORD PTR[20+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add ebx,r14d
- mov r14d,edi
- ror edi,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor edi,r14d
- shr r14d,10
-
- ror edi,17
- xor r12d,r13d
- xor edi,r14d
- add r12d,DWORD PTR[rsp]
-
- add r12d,DWORD PTR[28+rsp]
- mov r13d,r9d
- add r12d,edi
- mov r14d,ebx
- ror r13d,14
- mov edi,r10d
-
- xor r13d,r9d
- ror r14d,9
- xor edi,r11d
-
- mov DWORD PTR[28+rsp],r12d
- xor r14d,ebx
- and edi,r9d
-
- ror r13d,5
- add r12d,eax
- xor edi,r11d
-
- ror r14d,11
- xor r13d,r9d
- add r12d,edi
-
- mov edi,ebx
- add r12d,DWORD PTR[rbp]
- xor r14d,ebx
-
- xor edi,ecx
- ror r13d,6
- mov eax,ecx
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor eax,r15d
- add r8d,r12d
- add eax,r12d
-
- lea rbp,QWORD PTR[20+rbp]
- mov r13d,DWORD PTR[36+rsp]
- mov r15d,DWORD PTR[24+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add eax,r14d
- mov r14d,r15d
- ror r15d,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor r15d,r14d
- shr r14d,10
-
- ror r15d,17
- xor r12d,r13d
- xor r15d,r14d
- add r12d,DWORD PTR[4+rsp]
-
- add r12d,DWORD PTR[32+rsp]
- mov r13d,r8d
- add r12d,r15d
- mov r14d,eax
- ror r13d,14
- mov r15d,r9d
-
- xor r13d,r8d
- ror r14d,9
- xor r15d,r10d
-
- mov DWORD PTR[32+rsp],r12d
- xor r14d,eax
- and r15d,r8d
-
- ror r13d,5
- add r12d,r11d
- xor r15d,r10d
-
- ror r14d,11
- xor r13d,r8d
- add r12d,r15d
-
- mov r15d,eax
- add r12d,DWORD PTR[rbp]
- xor r14d,eax
-
- xor r15d,ebx
- ror r13d,6
- mov r11d,ebx
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor r11d,edi
- add edx,r12d
- add r11d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[40+rsp]
- mov edi,DWORD PTR[28+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add r11d,r14d
- mov r14d,edi
- ror edi,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor edi,r14d
- shr r14d,10
-
- ror edi,17
- xor r12d,r13d
- xor edi,r14d
- add r12d,DWORD PTR[8+rsp]
-
- add r12d,DWORD PTR[36+rsp]
- mov r13d,edx
- add r12d,edi
- mov r14d,r11d
- ror r13d,14
- mov edi,r8d
-
- xor r13d,edx
- ror r14d,9
- xor edi,r9d
-
- mov DWORD PTR[36+rsp],r12d
- xor r14d,r11d
- and edi,edx
-
- ror r13d,5
- add r12d,r10d
- xor edi,r9d
-
- ror r14d,11
- xor r13d,edx
- add r12d,edi
-
- mov edi,r11d
- add r12d,DWORD PTR[rbp]
- xor r14d,r11d
-
- xor edi,eax
- ror r13d,6
- mov r10d,eax
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor r10d,r15d
- add ecx,r12d
- add r10d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[44+rsp]
- mov r15d,DWORD PTR[32+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add r10d,r14d
- mov r14d,r15d
- ror r15d,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor r15d,r14d
- shr r14d,10
-
- ror r15d,17
- xor r12d,r13d
- xor r15d,r14d
- add r12d,DWORD PTR[12+rsp]
-
- add r12d,DWORD PTR[40+rsp]
- mov r13d,ecx
- add r12d,r15d
- mov r14d,r10d
- ror r13d,14
- mov r15d,edx
-
- xor r13d,ecx
- ror r14d,9
- xor r15d,r8d
-
- mov DWORD PTR[40+rsp],r12d
- xor r14d,r10d
- and r15d,ecx
-
- ror r13d,5
- add r12d,r9d
- xor r15d,r8d
-
- ror r14d,11
- xor r13d,ecx
- add r12d,r15d
-
- mov r15d,r10d
- add r12d,DWORD PTR[rbp]
- xor r14d,r10d
-
- xor r15d,r11d
- ror r13d,6
- mov r9d,r11d
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor r9d,edi
- add ebx,r12d
- add r9d,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[48+rsp]
- mov edi,DWORD PTR[36+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add r9d,r14d
- mov r14d,edi
- ror edi,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor edi,r14d
- shr r14d,10
-
- ror edi,17
- xor r12d,r13d
- xor edi,r14d
- add r12d,DWORD PTR[16+rsp]
-
- add r12d,DWORD PTR[44+rsp]
- mov r13d,ebx
- add r12d,edi
- mov r14d,r9d
- ror r13d,14
- mov edi,ecx
-
- xor r13d,ebx
- ror r14d,9
- xor edi,edx
-
- mov DWORD PTR[44+rsp],r12d
- xor r14d,r9d
- and edi,ebx
-
- ror r13d,5
- add r12d,r8d
- xor edi,edx
-
- ror r14d,11
- xor r13d,ebx
- add r12d,edi
-
- mov edi,r9d
- add r12d,DWORD PTR[rbp]
- xor r14d,r9d
-
- xor edi,r10d
- ror r13d,6
- mov r8d,r10d
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor r8d,r15d
- add eax,r12d
- add r8d,r12d
-
- lea rbp,QWORD PTR[20+rbp]
- mov r13d,DWORD PTR[52+rsp]
- mov r15d,DWORD PTR[40+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add r8d,r14d
- mov r14d,r15d
- ror r15d,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor r15d,r14d
- shr r14d,10
-
- ror r15d,17
- xor r12d,r13d
- xor r15d,r14d
- add r12d,DWORD PTR[20+rsp]
-
- add r12d,DWORD PTR[48+rsp]
- mov r13d,eax
- add r12d,r15d
- mov r14d,r8d
- ror r13d,14
- mov r15d,ebx
-
- xor r13d,eax
- ror r14d,9
- xor r15d,ecx
-
- mov DWORD PTR[48+rsp],r12d
- xor r14d,r8d
- and r15d,eax
-
- ror r13d,5
- add r12d,edx
- xor r15d,ecx
-
- ror r14d,11
- xor r13d,eax
- add r12d,r15d
-
- mov r15d,r8d
- add r12d,DWORD PTR[rbp]
- xor r14d,r8d
-
- xor r15d,r9d
- ror r13d,6
- mov edx,r9d
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor edx,edi
- add r11d,r12d
- add edx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[56+rsp]
- mov edi,DWORD PTR[44+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add edx,r14d
- mov r14d,edi
- ror edi,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor edi,r14d
- shr r14d,10
-
- ror edi,17
- xor r12d,r13d
- xor edi,r14d
- add r12d,DWORD PTR[24+rsp]
-
- add r12d,DWORD PTR[52+rsp]
- mov r13d,r11d
- add r12d,edi
- mov r14d,edx
- ror r13d,14
- mov edi,eax
-
- xor r13d,r11d
- ror r14d,9
- xor edi,ebx
-
- mov DWORD PTR[52+rsp],r12d
- xor r14d,edx
- and edi,r11d
-
- ror r13d,5
- add r12d,ecx
- xor edi,ebx
-
- ror r14d,11
- xor r13d,r11d
- add r12d,edi
-
- mov edi,edx
- add r12d,DWORD PTR[rbp]
- xor r14d,edx
-
- xor edi,r8d
- ror r13d,6
- mov ecx,r8d
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor ecx,r15d
- add r10d,r12d
- add ecx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[60+rsp]
- mov r15d,DWORD PTR[48+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add ecx,r14d
- mov r14d,r15d
- ror r15d,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor r15d,r14d
- shr r14d,10
-
- ror r15d,17
- xor r12d,r13d
- xor r15d,r14d
- add r12d,DWORD PTR[28+rsp]
-
- add r12d,DWORD PTR[56+rsp]
- mov r13d,r10d
- add r12d,r15d
- mov r14d,ecx
- ror r13d,14
- mov r15d,r11d
-
- xor r13d,r10d
- ror r14d,9
- xor r15d,eax
-
- mov DWORD PTR[56+rsp],r12d
- xor r14d,ecx
- and r15d,r10d
-
- ror r13d,5
- add r12d,ebx
- xor r15d,eax
-
- ror r14d,11
- xor r13d,r10d
- add r12d,r15d
-
- mov r15d,ecx
- add r12d,DWORD PTR[rbp]
- xor r14d,ecx
-
- xor r15d,edx
- ror r13d,6
- mov ebx,edx
-
- and edi,r15d
- ror r14d,2
- add r12d,r13d
-
- xor ebx,edi
- add r9d,r12d
- add ebx,r12d
-
- lea rbp,QWORD PTR[4+rbp]
- mov r13d,DWORD PTR[rsp]
- mov edi,DWORD PTR[52+rsp]
-
- mov r12d,r13d
- ror r13d,11
- add ebx,r14d
- mov r14d,edi
- ror edi,2
-
- xor r13d,r12d
- shr r12d,3
- ror r13d,7
- xor edi,r14d
- shr r14d,10
-
- ror edi,17
- xor r12d,r13d
- xor edi,r14d
- add r12d,DWORD PTR[32+rsp]
-
- add r12d,DWORD PTR[60+rsp]
- mov r13d,r9d
- add r12d,edi
- mov r14d,ebx
- ror r13d,14
- mov edi,r10d
-
- xor r13d,r9d
- ror r14d,9
- xor edi,r11d
-
- mov DWORD PTR[60+rsp],r12d
- xor r14d,ebx
- and edi,r9d
-
- ror r13d,5
- add r12d,eax
- xor edi,r11d
-
- ror r14d,11
- xor r13d,r9d
- add r12d,edi
-
- mov edi,ebx
- add r12d,DWORD PTR[rbp]
- xor r14d,ebx
-
- xor edi,ecx
- ror r13d,6
- mov eax,ecx
-
- and r15d,edi
- ror r14d,2
- add r12d,r13d
-
- xor eax,r15d
- add r8d,r12d
- add eax,r12d
-
- lea rbp,QWORD PTR[20+rbp]
- cmp BYTE PTR[3+rbp],0
- jnz $L$rounds_16_xx
-
- mov rdi,QWORD PTR[((64+0))+rsp]
- add eax,r14d
- lea rsi,QWORD PTR[64+rsi]
-
- add eax,DWORD PTR[rdi]
- add ebx,DWORD PTR[4+rdi]
- add ecx,DWORD PTR[8+rdi]
- add edx,DWORD PTR[12+rdi]
- add r8d,DWORD PTR[16+rdi]
- add r9d,DWORD PTR[20+rdi]
- add r10d,DWORD PTR[24+rdi]
- add r11d,DWORD PTR[28+rdi]
-
- cmp rsi,QWORD PTR[((64+16))+rsp]
-
- mov DWORD PTR[rdi],eax
- mov DWORD PTR[4+rdi],ebx
- mov DWORD PTR[8+rdi],ecx
- mov DWORD PTR[12+rdi],edx
- mov DWORD PTR[16+rdi],r8d
- mov DWORD PTR[20+rdi],r9d
- mov DWORD PTR[24+rdi],r10d
- mov DWORD PTR[28+rdi],r11d
- jb $L$loop
-
- mov rsi,QWORD PTR[88+rsp]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha256_block_data_order::
-sha256_block_data_order ENDP
-ALIGN 64
-
-K256::
- DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
- DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
- DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
- DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
- DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
- DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
- DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
- DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
- DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
- DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
- DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
- DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
- DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
- DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
- DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
- DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
- DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
- DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
- DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
- DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
- DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
- DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
- DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
- DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
- DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
- DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
- DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
- DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
- DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
- DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
- DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
- DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
-
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
- DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
- DD 003020100h,00b0a0908h,0ffffffffh,0ffffffffh
- DD 003020100h,00b0a0908h,0ffffffffh,0ffffffffh
- DD 0ffffffffh,0ffffffffh,003020100h,00b0a0908h
- DD 0ffffffffh,0ffffffffh,003020100h,00b0a0908h
-DB 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
-DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54
-DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
-DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
-DB 111,114,103,62,0
-
-ALIGN 64
-sha256_block_data_order_shaext PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha256_block_data_order_shaext::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-_shaext_shortcut::
-
- lea rsp,QWORD PTR[((-88))+rsp]
- movaps XMMWORD PTR[(-8-80)+rax],xmm6
- movaps XMMWORD PTR[(-8-64)+rax],xmm7
- movaps XMMWORD PTR[(-8-48)+rax],xmm8
- movaps XMMWORD PTR[(-8-32)+rax],xmm9
- movaps XMMWORD PTR[(-8-16)+rax],xmm10
-$L$prologue_shaext::
- lea rcx,QWORD PTR[((K256+128))]
- movdqu xmm1,XMMWORD PTR[rdi]
- movdqu xmm2,XMMWORD PTR[16+rdi]
- movdqa xmm7,XMMWORD PTR[((512-128))+rcx]
-
- pshufd xmm0,xmm1,01bh
- pshufd xmm1,xmm1,0b1h
- pshufd xmm2,xmm2,01bh
- movdqa xmm8,xmm7
-DB 102,15,58,15,202,8
- punpcklqdq xmm2,xmm0
- jmp $L$oop_shaext
-
-ALIGN 16
-$L$oop_shaext::
- movdqu xmm3,XMMWORD PTR[rsi]
- movdqu xmm4,XMMWORD PTR[16+rsi]
- movdqu xmm5,XMMWORD PTR[32+rsi]
-DB 102,15,56,0,223
- movdqu xmm6,XMMWORD PTR[48+rsi]
-
- movdqa xmm0,XMMWORD PTR[((0-128))+rcx]
- paddd xmm0,xmm3
-DB 102,15,56,0,231
- movdqa xmm10,xmm2
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- nop
- movdqa xmm9,xmm1
-DB 15,56,203,202
-
- movdqa xmm0,XMMWORD PTR[((32-128))+rcx]
- paddd xmm0,xmm4
-DB 102,15,56,0,239
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- lea rsi,QWORD PTR[64+rsi]
-DB 15,56,204,220
-DB 15,56,203,202
-
- movdqa xmm0,XMMWORD PTR[((64-128))+rcx]
- paddd xmm0,xmm5
-DB 102,15,56,0,247
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm6
-DB 102,15,58,15,253,4
- nop
- paddd xmm3,xmm7
-DB 15,56,204,229
-DB 15,56,203,202
-
- movdqa xmm0,XMMWORD PTR[((96-128))+rcx]
- paddd xmm0,xmm6
-DB 15,56,205,222
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm3
-DB 102,15,58,15,254,4
- nop
- paddd xmm4,xmm7
-DB 15,56,204,238
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((128-128))+rcx]
- paddd xmm0,xmm3
-DB 15,56,205,227
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm4
-DB 102,15,58,15,251,4
- nop
- paddd xmm5,xmm7
-DB 15,56,204,243
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((160-128))+rcx]
- paddd xmm0,xmm4
-DB 15,56,205,236
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm5
-DB 102,15,58,15,252,4
- nop
- paddd xmm6,xmm7
-DB 15,56,204,220
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((192-128))+rcx]
- paddd xmm0,xmm5
-DB 15,56,205,245
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm6
-DB 102,15,58,15,253,4
- nop
- paddd xmm3,xmm7
-DB 15,56,204,229
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((224-128))+rcx]
- paddd xmm0,xmm6
-DB 15,56,205,222
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm3
-DB 102,15,58,15,254,4
- nop
- paddd xmm4,xmm7
-DB 15,56,204,238
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((256-128))+rcx]
- paddd xmm0,xmm3
-DB 15,56,205,227
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm4
-DB 102,15,58,15,251,4
- nop
- paddd xmm5,xmm7
-DB 15,56,204,243
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((288-128))+rcx]
- paddd xmm0,xmm4
-DB 15,56,205,236
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm5
-DB 102,15,58,15,252,4
- nop
- paddd xmm6,xmm7
-DB 15,56,204,220
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((320-128))+rcx]
- paddd xmm0,xmm5
-DB 15,56,205,245
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm6
-DB 102,15,58,15,253,4
- nop
- paddd xmm3,xmm7
-DB 15,56,204,229
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((352-128))+rcx]
- paddd xmm0,xmm6
-DB 15,56,205,222
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm3
-DB 102,15,58,15,254,4
- nop
- paddd xmm4,xmm7
-DB 15,56,204,238
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((384-128))+rcx]
- paddd xmm0,xmm3
-DB 15,56,205,227
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm4
-DB 102,15,58,15,251,4
- nop
- paddd xmm5,xmm7
-DB 15,56,204,243
-DB 15,56,203,202
- movdqa xmm0,XMMWORD PTR[((416-128))+rcx]
- paddd xmm0,xmm4
-DB 15,56,205,236
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- movdqa xmm7,xmm5
-DB 102,15,58,15,252,4
-DB 15,56,203,202
- paddd xmm6,xmm7
-
- movdqa xmm0,XMMWORD PTR[((448-128))+rcx]
- paddd xmm0,xmm5
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
-DB 15,56,205,245
- movdqa xmm7,xmm8
-DB 15,56,203,202
-
- movdqa xmm0,XMMWORD PTR[((480-128))+rcx]
- paddd xmm0,xmm6
- nop
-DB 15,56,203,209
- pshufd xmm0,xmm0,00eh
- dec rdx
- nop
-DB 15,56,203,202
-
- paddd xmm2,xmm10
- paddd xmm1,xmm9
- jnz $L$oop_shaext
-
- pshufd xmm2,xmm2,0b1h
- pshufd xmm7,xmm1,01bh
- pshufd xmm1,xmm1,0b1h
- punpckhqdq xmm1,xmm2
-DB 102,15,58,15,215,8
-
- movdqu XMMWORD PTR[rdi],xmm1
- movdqu XMMWORD PTR[16+rdi],xmm2
- movaps xmm6,XMMWORD PTR[((-8-80))+rax]
- movaps xmm7,XMMWORD PTR[((-8-64))+rax]
- movaps xmm8,XMMWORD PTR[((-8-48))+rax]
- movaps xmm9,XMMWORD PTR[((-8-32))+rax]
- movaps xmm10,XMMWORD PTR[((-8-16))+rax]
- mov rsp,rax
-$L$epilogue_shaext::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha256_block_data_order_shaext::
-sha256_block_data_order_shaext ENDP
-
-ALIGN 64
-sha256_block_data_order_ssse3 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha256_block_data_order_ssse3::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$ssse3_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- shl rdx,4
- sub rsp,160
- lea rdx,QWORD PTR[rdx*4+rsi]
- and rsp,-64
- mov QWORD PTR[((64+0))+rsp],rdi
- mov QWORD PTR[((64+8))+rsp],rsi
- mov QWORD PTR[((64+16))+rsp],rdx
- mov QWORD PTR[88+rsp],rax
-
- movaps XMMWORD PTR[(64+32)+rsp],xmm6
- movaps XMMWORD PTR[(64+48)+rsp],xmm7
- movaps XMMWORD PTR[(64+64)+rsp],xmm8
- movaps XMMWORD PTR[(64+80)+rsp],xmm9
-$L$prologue_ssse3::
-
- mov eax,DWORD PTR[rdi]
- mov ebx,DWORD PTR[4+rdi]
- mov ecx,DWORD PTR[8+rdi]
- mov edx,DWORD PTR[12+rdi]
- mov r8d,DWORD PTR[16+rdi]
- mov r9d,DWORD PTR[20+rdi]
- mov r10d,DWORD PTR[24+rdi]
- mov r11d,DWORD PTR[28+rdi]
-
-
- jmp $L$loop_ssse3
-ALIGN 16
-$L$loop_ssse3::
- movdqa xmm7,XMMWORD PTR[((K256+512))]
- movdqu xmm0,XMMWORD PTR[rsi]
- movdqu xmm1,XMMWORD PTR[16+rsi]
- movdqu xmm2,XMMWORD PTR[32+rsi]
-DB 102,15,56,0,199
- movdqu xmm3,XMMWORD PTR[48+rsi]
- lea rbp,QWORD PTR[K256]
-DB 102,15,56,0,207
- movdqa xmm4,XMMWORD PTR[rbp]
- movdqa xmm5,XMMWORD PTR[32+rbp]
-DB 102,15,56,0,215
- paddd xmm4,xmm0
- movdqa xmm6,XMMWORD PTR[64+rbp]
-DB 102,15,56,0,223
- movdqa xmm7,XMMWORD PTR[96+rbp]
- paddd xmm5,xmm1
- paddd xmm6,xmm2
- paddd xmm7,xmm3
- movdqa XMMWORD PTR[rsp],xmm4
- mov r14d,eax
- movdqa XMMWORD PTR[16+rsp],xmm5
- mov edi,ebx
- movdqa XMMWORD PTR[32+rsp],xmm6
- xor edi,ecx
- movdqa XMMWORD PTR[48+rsp],xmm7
- mov r13d,r8d
- jmp $L$ssse3_00_47
-
-ALIGN 16
-$L$ssse3_00_47::
- sub rbp,-128
- ror r13d,14
- movdqa xmm4,xmm1
- mov eax,r14d
- mov r12d,r9d
- movdqa xmm7,xmm3
- ror r14d,9
- xor r13d,r8d
- xor r12d,r10d
- ror r13d,5
- xor r14d,eax
-DB 102,15,58,15,224,4
- and r12d,r8d
- xor r13d,r8d
-DB 102,15,58,15,250,4
- add r11d,DWORD PTR[rsp]
- mov r15d,eax
- xor r12d,r10d
- ror r14d,11
- movdqa xmm5,xmm4
- xor r15d,ebx
- add r11d,r12d
- movdqa xmm6,xmm4
- ror r13d,6
- and edi,r15d
- psrld xmm4,3
- xor r14d,eax
- add r11d,r13d
- xor edi,ebx
- paddd xmm0,xmm7
- ror r14d,2
- add edx,r11d
- psrld xmm6,7
- add r11d,edi
- mov r13d,edx
- pshufd xmm7,xmm3,250
- add r14d,r11d
- ror r13d,14
- pslld xmm5,14
- mov r11d,r14d
- mov r12d,r8d
- pxor xmm4,xmm6
- ror r14d,9
- xor r13d,edx
- xor r12d,r9d
- ror r13d,5
- psrld xmm6,11
- xor r14d,r11d
- pxor xmm4,xmm5
- and r12d,edx
- xor r13d,edx
- pslld xmm5,11
- add r10d,DWORD PTR[4+rsp]
- mov edi,r11d
- pxor xmm4,xmm6
- xor r12d,r9d
- ror r14d,11
- movdqa xmm6,xmm7
- xor edi,eax
- add r10d,r12d
- pxor xmm4,xmm5
- ror r13d,6
- and r15d,edi
- xor r14d,r11d
- psrld xmm7,10
- add r10d,r13d
- xor r15d,eax
- paddd xmm0,xmm4
- ror r14d,2
- add ecx,r10d
- psrlq xmm6,17
- add r10d,r15d
- mov r13d,ecx
- add r14d,r10d
- pxor xmm7,xmm6
- ror r13d,14
- mov r10d,r14d
- mov r12d,edx
- ror r14d,9
- psrlq xmm6,2
- xor r13d,ecx
- xor r12d,r8d
- pxor xmm7,xmm6
- ror r13d,5
- xor r14d,r10d
- and r12d,ecx
- pshufd xmm7,xmm7,128
- xor r13d,ecx
- add r9d,DWORD PTR[8+rsp]
- mov r15d,r10d
- psrldq xmm7,8
- xor r12d,r8d
- ror r14d,11
- xor r15d,r11d
- add r9d,r12d
- ror r13d,6
- paddd xmm0,xmm7
- and edi,r15d
- xor r14d,r10d
- add r9d,r13d
- pshufd xmm7,xmm0,80
- xor edi,r11d
- ror r14d,2
- add ebx,r9d
- movdqa xmm6,xmm7
- add r9d,edi
- mov r13d,ebx
- psrld xmm7,10
- add r14d,r9d
- ror r13d,14
- psrlq xmm6,17
- mov r9d,r14d
- mov r12d,ecx
- pxor xmm7,xmm6
- ror r14d,9
- xor r13d,ebx
- xor r12d,edx
- ror r13d,5
- xor r14d,r9d
- psrlq xmm6,2
- and r12d,ebx
- xor r13d,ebx
- add r8d,DWORD PTR[12+rsp]
- pxor xmm7,xmm6
- mov edi,r9d
- xor r12d,edx
- ror r14d,11
- pshufd xmm7,xmm7,8
- xor edi,r10d
- add r8d,r12d
- movdqa xmm6,XMMWORD PTR[rbp]
- ror r13d,6
- and r15d,edi
- pslldq xmm7,8
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- paddd xmm0,xmm7
- ror r14d,2
- add eax,r8d
- add r8d,r15d
- paddd xmm6,xmm0
- mov r13d,eax
- add r14d,r8d
- movdqa XMMWORD PTR[rsp],xmm6
- ror r13d,14
- movdqa xmm4,xmm2
- mov r8d,r14d
- mov r12d,ebx
- movdqa xmm7,xmm0
- ror r14d,9
- xor r13d,eax
- xor r12d,ecx
- ror r13d,5
- xor r14d,r8d
-DB 102,15,58,15,225,4
- and r12d,eax
- xor r13d,eax
-DB 102,15,58,15,251,4
- add edx,DWORD PTR[16+rsp]
- mov r15d,r8d
- xor r12d,ecx
- ror r14d,11
- movdqa xmm5,xmm4
- xor r15d,r9d
- add edx,r12d
- movdqa xmm6,xmm4
- ror r13d,6
- and edi,r15d
- psrld xmm4,3
- xor r14d,r8d
- add edx,r13d
- xor edi,r9d
- paddd xmm1,xmm7
- ror r14d,2
- add r11d,edx
- psrld xmm6,7
- add edx,edi
- mov r13d,r11d
- pshufd xmm7,xmm0,250
- add r14d,edx
- ror r13d,14
- pslld xmm5,14
- mov edx,r14d
- mov r12d,eax
- pxor xmm4,xmm6
- ror r14d,9
- xor r13d,r11d
- xor r12d,ebx
- ror r13d,5
- psrld xmm6,11
- xor r14d,edx
- pxor xmm4,xmm5
- and r12d,r11d
- xor r13d,r11d
- pslld xmm5,11
- add ecx,DWORD PTR[20+rsp]
- mov edi,edx
- pxor xmm4,xmm6
- xor r12d,ebx
- ror r14d,11
- movdqa xmm6,xmm7
- xor edi,r8d
- add ecx,r12d
- pxor xmm4,xmm5
- ror r13d,6
- and r15d,edi
- xor r14d,edx
- psrld xmm7,10
- add ecx,r13d
- xor r15d,r8d
- paddd xmm1,xmm4
- ror r14d,2
- add r10d,ecx
- psrlq xmm6,17
- add ecx,r15d
- mov r13d,r10d
- add r14d,ecx
- pxor xmm7,xmm6
- ror r13d,14
- mov ecx,r14d
- mov r12d,r11d
- ror r14d,9
- psrlq xmm6,2
- xor r13d,r10d
- xor r12d,eax
- pxor xmm7,xmm6
- ror r13d,5
- xor r14d,ecx
- and r12d,r10d
- pshufd xmm7,xmm7,128
- xor r13d,r10d
- add ebx,DWORD PTR[24+rsp]
- mov r15d,ecx
- psrldq xmm7,8
- xor r12d,eax
- ror r14d,11
- xor r15d,edx
- add ebx,r12d
- ror r13d,6
- paddd xmm1,xmm7
- and edi,r15d
- xor r14d,ecx
- add ebx,r13d
- pshufd xmm7,xmm1,80
- xor edi,edx
- ror r14d,2
- add r9d,ebx
- movdqa xmm6,xmm7
- add ebx,edi
- mov r13d,r9d
- psrld xmm7,10
- add r14d,ebx
- ror r13d,14
- psrlq xmm6,17
- mov ebx,r14d
- mov r12d,r10d
- pxor xmm7,xmm6
- ror r14d,9
- xor r13d,r9d
- xor r12d,r11d
- ror r13d,5
- xor r14d,ebx
- psrlq xmm6,2
- and r12d,r9d
- xor r13d,r9d
- add eax,DWORD PTR[28+rsp]
- pxor xmm7,xmm6
- mov edi,ebx
- xor r12d,r11d
- ror r14d,11
- pshufd xmm7,xmm7,8
- xor edi,ecx
- add eax,r12d
- movdqa xmm6,XMMWORD PTR[32+rbp]
- ror r13d,6
- and r15d,edi
- pslldq xmm7,8
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- paddd xmm1,xmm7
- ror r14d,2
- add r8d,eax
- add eax,r15d
- paddd xmm6,xmm1
- mov r13d,r8d
- add r14d,eax
- movdqa XMMWORD PTR[16+rsp],xmm6
- ror r13d,14
- movdqa xmm4,xmm3
- mov eax,r14d
- mov r12d,r9d
- movdqa xmm7,xmm1
- ror r14d,9
- xor r13d,r8d
- xor r12d,r10d
- ror r13d,5
- xor r14d,eax
-DB 102,15,58,15,226,4
- and r12d,r8d
- xor r13d,r8d
-DB 102,15,58,15,248,4
- add r11d,DWORD PTR[32+rsp]
- mov r15d,eax
- xor r12d,r10d
- ror r14d,11
- movdqa xmm5,xmm4
- xor r15d,ebx
- add r11d,r12d
- movdqa xmm6,xmm4
- ror r13d,6
- and edi,r15d
- psrld xmm4,3
- xor r14d,eax
- add r11d,r13d
- xor edi,ebx
- paddd xmm2,xmm7
- ror r14d,2
- add edx,r11d
- psrld xmm6,7
- add r11d,edi
- mov r13d,edx
- pshufd xmm7,xmm1,250
- add r14d,r11d
- ror r13d,14
- pslld xmm5,14
- mov r11d,r14d
- mov r12d,r8d
- pxor xmm4,xmm6
- ror r14d,9
- xor r13d,edx
- xor r12d,r9d
- ror r13d,5
- psrld xmm6,11
- xor r14d,r11d
- pxor xmm4,xmm5
- and r12d,edx
- xor r13d,edx
- pslld xmm5,11
- add r10d,DWORD PTR[36+rsp]
- mov edi,r11d
- pxor xmm4,xmm6
- xor r12d,r9d
- ror r14d,11
- movdqa xmm6,xmm7
- xor edi,eax
- add r10d,r12d
- pxor xmm4,xmm5
- ror r13d,6
- and r15d,edi
- xor r14d,r11d
- psrld xmm7,10
- add r10d,r13d
- xor r15d,eax
- paddd xmm2,xmm4
- ror r14d,2
- add ecx,r10d
- psrlq xmm6,17
- add r10d,r15d
- mov r13d,ecx
- add r14d,r10d
- pxor xmm7,xmm6
- ror r13d,14
- mov r10d,r14d
- mov r12d,edx
- ror r14d,9
- psrlq xmm6,2
- xor r13d,ecx
- xor r12d,r8d
- pxor xmm7,xmm6
- ror r13d,5
- xor r14d,r10d
- and r12d,ecx
- pshufd xmm7,xmm7,128
- xor r13d,ecx
- add r9d,DWORD PTR[40+rsp]
- mov r15d,r10d
- psrldq xmm7,8
- xor r12d,r8d
- ror r14d,11
- xor r15d,r11d
- add r9d,r12d
- ror r13d,6
- paddd xmm2,xmm7
- and edi,r15d
- xor r14d,r10d
- add r9d,r13d
- pshufd xmm7,xmm2,80
- xor edi,r11d
- ror r14d,2
- add ebx,r9d
- movdqa xmm6,xmm7
- add r9d,edi
- mov r13d,ebx
- psrld xmm7,10
- add r14d,r9d
- ror r13d,14
- psrlq xmm6,17
- mov r9d,r14d
- mov r12d,ecx
- pxor xmm7,xmm6
- ror r14d,9
- xor r13d,ebx
- xor r12d,edx
- ror r13d,5
- xor r14d,r9d
- psrlq xmm6,2
- and r12d,ebx
- xor r13d,ebx
- add r8d,DWORD PTR[44+rsp]
- pxor xmm7,xmm6
- mov edi,r9d
- xor r12d,edx
- ror r14d,11
- pshufd xmm7,xmm7,8
- xor edi,r10d
- add r8d,r12d
- movdqa xmm6,XMMWORD PTR[64+rbp]
- ror r13d,6
- and r15d,edi
- pslldq xmm7,8
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- paddd xmm2,xmm7
- ror r14d,2
- add eax,r8d
- add r8d,r15d
- paddd xmm6,xmm2
- mov r13d,eax
- add r14d,r8d
- movdqa XMMWORD PTR[32+rsp],xmm6
- ror r13d,14
- movdqa xmm4,xmm0
- mov r8d,r14d
- mov r12d,ebx
- movdqa xmm7,xmm2
- ror r14d,9
- xor r13d,eax
- xor r12d,ecx
- ror r13d,5
- xor r14d,r8d
-DB 102,15,58,15,227,4
- and r12d,eax
- xor r13d,eax
-DB 102,15,58,15,249,4
- add edx,DWORD PTR[48+rsp]
- mov r15d,r8d
- xor r12d,ecx
- ror r14d,11
- movdqa xmm5,xmm4
- xor r15d,r9d
- add edx,r12d
- movdqa xmm6,xmm4
- ror r13d,6
- and edi,r15d
- psrld xmm4,3
- xor r14d,r8d
- add edx,r13d
- xor edi,r9d
- paddd xmm3,xmm7
- ror r14d,2
- add r11d,edx
- psrld xmm6,7
- add edx,edi
- mov r13d,r11d
- pshufd xmm7,xmm2,250
- add r14d,edx
- ror r13d,14
- pslld xmm5,14
- mov edx,r14d
- mov r12d,eax
- pxor xmm4,xmm6
- ror r14d,9
- xor r13d,r11d
- xor r12d,ebx
- ror r13d,5
- psrld xmm6,11
- xor r14d,edx
- pxor xmm4,xmm5
- and r12d,r11d
- xor r13d,r11d
- pslld xmm5,11
- add ecx,DWORD PTR[52+rsp]
- mov edi,edx
- pxor xmm4,xmm6
- xor r12d,ebx
- ror r14d,11
- movdqa xmm6,xmm7
- xor edi,r8d
- add ecx,r12d
- pxor xmm4,xmm5
- ror r13d,6
- and r15d,edi
- xor r14d,edx
- psrld xmm7,10
- add ecx,r13d
- xor r15d,r8d
- paddd xmm3,xmm4
- ror r14d,2
- add r10d,ecx
- psrlq xmm6,17
- add ecx,r15d
- mov r13d,r10d
- add r14d,ecx
- pxor xmm7,xmm6
- ror r13d,14
- mov ecx,r14d
- mov r12d,r11d
- ror r14d,9
- psrlq xmm6,2
- xor r13d,r10d
- xor r12d,eax
- pxor xmm7,xmm6
- ror r13d,5
- xor r14d,ecx
- and r12d,r10d
- pshufd xmm7,xmm7,128
- xor r13d,r10d
- add ebx,DWORD PTR[56+rsp]
- mov r15d,ecx
- psrldq xmm7,8
- xor r12d,eax
- ror r14d,11
- xor r15d,edx
- add ebx,r12d
- ror r13d,6
- paddd xmm3,xmm7
- and edi,r15d
- xor r14d,ecx
- add ebx,r13d
- pshufd xmm7,xmm3,80
- xor edi,edx
- ror r14d,2
- add r9d,ebx
- movdqa xmm6,xmm7
- add ebx,edi
- mov r13d,r9d
- psrld xmm7,10
- add r14d,ebx
- ror r13d,14
- psrlq xmm6,17
- mov ebx,r14d
- mov r12d,r10d
- pxor xmm7,xmm6
- ror r14d,9
- xor r13d,r9d
- xor r12d,r11d
- ror r13d,5
- xor r14d,ebx
- psrlq xmm6,2
- and r12d,r9d
- xor r13d,r9d
- add eax,DWORD PTR[60+rsp]
- pxor xmm7,xmm6
- mov edi,ebx
- xor r12d,r11d
- ror r14d,11
- pshufd xmm7,xmm7,8
- xor edi,ecx
- add eax,r12d
- movdqa xmm6,XMMWORD PTR[96+rbp]
- ror r13d,6
- and r15d,edi
- pslldq xmm7,8
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- paddd xmm3,xmm7
- ror r14d,2
- add r8d,eax
- add eax,r15d
- paddd xmm6,xmm3
- mov r13d,r8d
- add r14d,eax
- movdqa XMMWORD PTR[48+rsp],xmm6
- cmp BYTE PTR[131+rbp],0
- jne $L$ssse3_00_47
- ror r13d,14
- mov eax,r14d
- mov r12d,r9d
- ror r14d,9
- xor r13d,r8d
- xor r12d,r10d
- ror r13d,5
- xor r14d,eax
- and r12d,r8d
- xor r13d,r8d
- add r11d,DWORD PTR[rsp]
- mov r15d,eax
- xor r12d,r10d
- ror r14d,11
- xor r15d,ebx
- add r11d,r12d
- ror r13d,6
- and edi,r15d
- xor r14d,eax
- add r11d,r13d
- xor edi,ebx
- ror r14d,2
- add edx,r11d
- add r11d,edi
- mov r13d,edx
- add r14d,r11d
- ror r13d,14
- mov r11d,r14d
- mov r12d,r8d
- ror r14d,9
- xor r13d,edx
- xor r12d,r9d
- ror r13d,5
- xor r14d,r11d
- and r12d,edx
- xor r13d,edx
- add r10d,DWORD PTR[4+rsp]
- mov edi,r11d
- xor r12d,r9d
- ror r14d,11
- xor edi,eax
- add r10d,r12d
- ror r13d,6
- and r15d,edi
- xor r14d,r11d
- add r10d,r13d
- xor r15d,eax
- ror r14d,2
- add ecx,r10d
- add r10d,r15d
- mov r13d,ecx
- add r14d,r10d
- ror r13d,14
- mov r10d,r14d
- mov r12d,edx
- ror r14d,9
- xor r13d,ecx
- xor r12d,r8d
- ror r13d,5
- xor r14d,r10d
- and r12d,ecx
- xor r13d,ecx
- add r9d,DWORD PTR[8+rsp]
- mov r15d,r10d
- xor r12d,r8d
- ror r14d,11
- xor r15d,r11d
- add r9d,r12d
- ror r13d,6
- and edi,r15d
- xor r14d,r10d
- add r9d,r13d
- xor edi,r11d
- ror r14d,2
- add ebx,r9d
- add r9d,edi
- mov r13d,ebx
- add r14d,r9d
- ror r13d,14
- mov r9d,r14d
- mov r12d,ecx
- ror r14d,9
- xor r13d,ebx
- xor r12d,edx
- ror r13d,5
- xor r14d,r9d
- and r12d,ebx
- xor r13d,ebx
- add r8d,DWORD PTR[12+rsp]
- mov edi,r9d
- xor r12d,edx
- ror r14d,11
- xor edi,r10d
- add r8d,r12d
- ror r13d,6
- and r15d,edi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- ror r14d,2
- add eax,r8d
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- ror r13d,14
- mov r8d,r14d
- mov r12d,ebx
- ror r14d,9
- xor r13d,eax
- xor r12d,ecx
- ror r13d,5
- xor r14d,r8d
- and r12d,eax
- xor r13d,eax
- add edx,DWORD PTR[16+rsp]
- mov r15d,r8d
- xor r12d,ecx
- ror r14d,11
- xor r15d,r9d
- add edx,r12d
- ror r13d,6
- and edi,r15d
- xor r14d,r8d
- add edx,r13d
- xor edi,r9d
- ror r14d,2
- add r11d,edx
- add edx,edi
- mov r13d,r11d
- add r14d,edx
- ror r13d,14
- mov edx,r14d
- mov r12d,eax
- ror r14d,9
- xor r13d,r11d
- xor r12d,ebx
- ror r13d,5
- xor r14d,edx
- and r12d,r11d
- xor r13d,r11d
- add ecx,DWORD PTR[20+rsp]
- mov edi,edx
- xor r12d,ebx
- ror r14d,11
- xor edi,r8d
- add ecx,r12d
- ror r13d,6
- and r15d,edi
- xor r14d,edx
- add ecx,r13d
- xor r15d,r8d
- ror r14d,2
- add r10d,ecx
- add ecx,r15d
- mov r13d,r10d
- add r14d,ecx
- ror r13d,14
- mov ecx,r14d
- mov r12d,r11d
- ror r14d,9
- xor r13d,r10d
- xor r12d,eax
- ror r13d,5
- xor r14d,ecx
- and r12d,r10d
- xor r13d,r10d
- add ebx,DWORD PTR[24+rsp]
- mov r15d,ecx
- xor r12d,eax
- ror r14d,11
- xor r15d,edx
- add ebx,r12d
- ror r13d,6
- and edi,r15d
- xor r14d,ecx
- add ebx,r13d
- xor edi,edx
- ror r14d,2
- add r9d,ebx
- add ebx,edi
- mov r13d,r9d
- add r14d,ebx
- ror r13d,14
- mov ebx,r14d
- mov r12d,r10d
- ror r14d,9
- xor r13d,r9d
- xor r12d,r11d
- ror r13d,5
- xor r14d,ebx
- and r12d,r9d
- xor r13d,r9d
- add eax,DWORD PTR[28+rsp]
- mov edi,ebx
- xor r12d,r11d
- ror r14d,11
- xor edi,ecx
- add eax,r12d
- ror r13d,6
- and r15d,edi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- ror r14d,2
- add r8d,eax
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- ror r13d,14
- mov eax,r14d
- mov r12d,r9d
- ror r14d,9
- xor r13d,r8d
- xor r12d,r10d
- ror r13d,5
- xor r14d,eax
- and r12d,r8d
- xor r13d,r8d
- add r11d,DWORD PTR[32+rsp]
- mov r15d,eax
- xor r12d,r10d
- ror r14d,11
- xor r15d,ebx
- add r11d,r12d
- ror r13d,6
- and edi,r15d
- xor r14d,eax
- add r11d,r13d
- xor edi,ebx
- ror r14d,2
- add edx,r11d
- add r11d,edi
- mov r13d,edx
- add r14d,r11d
- ror r13d,14
- mov r11d,r14d
- mov r12d,r8d
- ror r14d,9
- xor r13d,edx
- xor r12d,r9d
- ror r13d,5
- xor r14d,r11d
- and r12d,edx
- xor r13d,edx
- add r10d,DWORD PTR[36+rsp]
- mov edi,r11d
- xor r12d,r9d
- ror r14d,11
- xor edi,eax
- add r10d,r12d
- ror r13d,6
- and r15d,edi
- xor r14d,r11d
- add r10d,r13d
- xor r15d,eax
- ror r14d,2
- add ecx,r10d
- add r10d,r15d
- mov r13d,ecx
- add r14d,r10d
- ror r13d,14
- mov r10d,r14d
- mov r12d,edx
- ror r14d,9
- xor r13d,ecx
- xor r12d,r8d
- ror r13d,5
- xor r14d,r10d
- and r12d,ecx
- xor r13d,ecx
- add r9d,DWORD PTR[40+rsp]
- mov r15d,r10d
- xor r12d,r8d
- ror r14d,11
- xor r15d,r11d
- add r9d,r12d
- ror r13d,6
- and edi,r15d
- xor r14d,r10d
- add r9d,r13d
- xor edi,r11d
- ror r14d,2
- add ebx,r9d
- add r9d,edi
- mov r13d,ebx
- add r14d,r9d
- ror r13d,14
- mov r9d,r14d
- mov r12d,ecx
- ror r14d,9
- xor r13d,ebx
- xor r12d,edx
- ror r13d,5
- xor r14d,r9d
- and r12d,ebx
- xor r13d,ebx
- add r8d,DWORD PTR[44+rsp]
- mov edi,r9d
- xor r12d,edx
- ror r14d,11
- xor edi,r10d
- add r8d,r12d
- ror r13d,6
- and r15d,edi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- ror r14d,2
- add eax,r8d
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- ror r13d,14
- mov r8d,r14d
- mov r12d,ebx
- ror r14d,9
- xor r13d,eax
- xor r12d,ecx
- ror r13d,5
- xor r14d,r8d
- and r12d,eax
- xor r13d,eax
- add edx,DWORD PTR[48+rsp]
- mov r15d,r8d
- xor r12d,ecx
- ror r14d,11
- xor r15d,r9d
- add edx,r12d
- ror r13d,6
- and edi,r15d
- xor r14d,r8d
- add edx,r13d
- xor edi,r9d
- ror r14d,2
- add r11d,edx
- add edx,edi
- mov r13d,r11d
- add r14d,edx
- ror r13d,14
- mov edx,r14d
- mov r12d,eax
- ror r14d,9
- xor r13d,r11d
- xor r12d,ebx
- ror r13d,5
- xor r14d,edx
- and r12d,r11d
- xor r13d,r11d
- add ecx,DWORD PTR[52+rsp]
- mov edi,edx
- xor r12d,ebx
- ror r14d,11
- xor edi,r8d
- add ecx,r12d
- ror r13d,6
- and r15d,edi
- xor r14d,edx
- add ecx,r13d
- xor r15d,r8d
- ror r14d,2
- add r10d,ecx
- add ecx,r15d
- mov r13d,r10d
- add r14d,ecx
- ror r13d,14
- mov ecx,r14d
- mov r12d,r11d
- ror r14d,9
- xor r13d,r10d
- xor r12d,eax
- ror r13d,5
- xor r14d,ecx
- and r12d,r10d
- xor r13d,r10d
- add ebx,DWORD PTR[56+rsp]
- mov r15d,ecx
- xor r12d,eax
- ror r14d,11
- xor r15d,edx
- add ebx,r12d
- ror r13d,6
- and edi,r15d
- xor r14d,ecx
- add ebx,r13d
- xor edi,edx
- ror r14d,2
- add r9d,ebx
- add ebx,edi
- mov r13d,r9d
- add r14d,ebx
- ror r13d,14
- mov ebx,r14d
- mov r12d,r10d
- ror r14d,9
- xor r13d,r9d
- xor r12d,r11d
- ror r13d,5
- xor r14d,ebx
- and r12d,r9d
- xor r13d,r9d
- add eax,DWORD PTR[60+rsp]
- mov edi,ebx
- xor r12d,r11d
- ror r14d,11
- xor edi,ecx
- add eax,r12d
- ror r13d,6
- and r15d,edi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- ror r14d,2
- add r8d,eax
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- mov rdi,QWORD PTR[((64+0))+rsp]
- mov eax,r14d
-
- add eax,DWORD PTR[rdi]
- lea rsi,QWORD PTR[64+rsi]
- add ebx,DWORD PTR[4+rdi]
- add ecx,DWORD PTR[8+rdi]
- add edx,DWORD PTR[12+rdi]
- add r8d,DWORD PTR[16+rdi]
- add r9d,DWORD PTR[20+rdi]
- add r10d,DWORD PTR[24+rdi]
- add r11d,DWORD PTR[28+rdi]
-
- cmp rsi,QWORD PTR[((64+16))+rsp]
-
- mov DWORD PTR[rdi],eax
- mov DWORD PTR[4+rdi],ebx
- mov DWORD PTR[8+rdi],ecx
- mov DWORD PTR[12+rdi],edx
- mov DWORD PTR[16+rdi],r8d
- mov DWORD PTR[20+rdi],r9d
- mov DWORD PTR[24+rdi],r10d
- mov DWORD PTR[28+rdi],r11d
- jb $L$loop_ssse3
-
- mov rsi,QWORD PTR[88+rsp]
-
- movaps xmm6,XMMWORD PTR[((64+32))+rsp]
- movaps xmm7,XMMWORD PTR[((64+48))+rsp]
- movaps xmm8,XMMWORD PTR[((64+64))+rsp]
- movaps xmm9,XMMWORD PTR[((64+80))+rsp]
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue_ssse3::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha256_block_data_order_ssse3::
-sha256_block_data_order_ssse3 ENDP
-
-ALIGN 64
-sha256_block_data_order_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha256_block_data_order_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$avx_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- shl rdx,4
- sub rsp,160
- lea rdx,QWORD PTR[rdx*4+rsi]
- and rsp,-64
- mov QWORD PTR[((64+0))+rsp],rdi
- mov QWORD PTR[((64+8))+rsp],rsi
- mov QWORD PTR[((64+16))+rsp],rdx
- mov QWORD PTR[88+rsp],rax
-
- movaps XMMWORD PTR[(64+32)+rsp],xmm6
- movaps XMMWORD PTR[(64+48)+rsp],xmm7
- movaps XMMWORD PTR[(64+64)+rsp],xmm8
- movaps XMMWORD PTR[(64+80)+rsp],xmm9
-$L$prologue_avx::
-
- vzeroupper
- mov eax,DWORD PTR[rdi]
- mov ebx,DWORD PTR[4+rdi]
- mov ecx,DWORD PTR[8+rdi]
- mov edx,DWORD PTR[12+rdi]
- mov r8d,DWORD PTR[16+rdi]
- mov r9d,DWORD PTR[20+rdi]
- mov r10d,DWORD PTR[24+rdi]
- mov r11d,DWORD PTR[28+rdi]
- vmovdqa xmm8,XMMWORD PTR[((K256+512+32))]
- vmovdqa xmm9,XMMWORD PTR[((K256+512+64))]
- jmp $L$loop_avx
-ALIGN 16
-$L$loop_avx::
- vmovdqa xmm7,XMMWORD PTR[((K256+512))]
- vmovdqu xmm0,XMMWORD PTR[rsi]
- vmovdqu xmm1,XMMWORD PTR[16+rsi]
- vmovdqu xmm2,XMMWORD PTR[32+rsi]
- vmovdqu xmm3,XMMWORD PTR[48+rsi]
- vpshufb xmm0,xmm0,xmm7
- lea rbp,QWORD PTR[K256]
- vpshufb xmm1,xmm1,xmm7
- vpshufb xmm2,xmm2,xmm7
- vpaddd xmm4,xmm0,XMMWORD PTR[rbp]
- vpshufb xmm3,xmm3,xmm7
- vpaddd xmm5,xmm1,XMMWORD PTR[32+rbp]
- vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
- vpaddd xmm7,xmm3,XMMWORD PTR[96+rbp]
- vmovdqa XMMWORD PTR[rsp],xmm4
- mov r14d,eax
- vmovdqa XMMWORD PTR[16+rsp],xmm5
- mov edi,ebx
- vmovdqa XMMWORD PTR[32+rsp],xmm6
- xor edi,ecx
- vmovdqa XMMWORD PTR[48+rsp],xmm7
- mov r13d,r8d
- jmp $L$avx_00_47
-
-ALIGN 16
-$L$avx_00_47::
- sub rbp,-128
- vpalignr xmm4,xmm1,xmm0,4
- shrd r13d,r13d,14
- mov eax,r14d
- mov r12d,r9d
- vpalignr xmm7,xmm3,xmm2,4
- shrd r14d,r14d,9
- xor r13d,r8d
- xor r12d,r10d
- vpsrld xmm6,xmm4,7
- shrd r13d,r13d,5
- xor r14d,eax
- and r12d,r8d
- vpaddd xmm0,xmm0,xmm7
- xor r13d,r8d
- add r11d,DWORD PTR[rsp]
- mov r15d,eax
- vpsrld xmm7,xmm4,3
- xor r12d,r10d
- shrd r14d,r14d,11
- xor r15d,ebx
- vpslld xmm5,xmm4,14
- add r11d,r12d
- shrd r13d,r13d,6
- and edi,r15d
- vpxor xmm4,xmm7,xmm6
- xor r14d,eax
- add r11d,r13d
- xor edi,ebx
- vpshufd xmm7,xmm3,250
- shrd r14d,r14d,2
- add edx,r11d
- add r11d,edi
- vpsrld xmm6,xmm6,11
- mov r13d,edx
- add r14d,r11d
- shrd r13d,r13d,14
- vpxor xmm4,xmm4,xmm5
- mov r11d,r14d
- mov r12d,r8d
- shrd r14d,r14d,9
- vpslld xmm5,xmm5,11
- xor r13d,edx
- xor r12d,r9d
- shrd r13d,r13d,5
- vpxor xmm4,xmm4,xmm6
- xor r14d,r11d
- and r12d,edx
- xor r13d,edx
- vpsrld xmm6,xmm7,10
- add r10d,DWORD PTR[4+rsp]
- mov edi,r11d
- xor r12d,r9d
- vpxor xmm4,xmm4,xmm5
- shrd r14d,r14d,11
- xor edi,eax
- add r10d,r12d
- vpsrlq xmm7,xmm7,17
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,r11d
- vpaddd xmm0,xmm0,xmm4
- add r10d,r13d
- xor r15d,eax
- shrd r14d,r14d,2
- vpxor xmm6,xmm6,xmm7
- add ecx,r10d
- add r10d,r15d
- mov r13d,ecx
- vpsrlq xmm7,xmm7,2
- add r14d,r10d
- shrd r13d,r13d,14
- mov r10d,r14d
- vpxor xmm6,xmm6,xmm7
- mov r12d,edx
- shrd r14d,r14d,9
- xor r13d,ecx
- vpshufb xmm6,xmm6,xmm8
- xor r12d,r8d
- shrd r13d,r13d,5
- xor r14d,r10d
- vpaddd xmm0,xmm0,xmm6
- and r12d,ecx
- xor r13d,ecx
- add r9d,DWORD PTR[8+rsp]
- vpshufd xmm7,xmm0,80
- mov r15d,r10d
- xor r12d,r8d
- shrd r14d,r14d,11
- vpsrld xmm6,xmm7,10
- xor r15d,r11d
- add r9d,r12d
- shrd r13d,r13d,6
- vpsrlq xmm7,xmm7,17
- and edi,r15d
- xor r14d,r10d
- add r9d,r13d
- vpxor xmm6,xmm6,xmm7
- xor edi,r11d
- shrd r14d,r14d,2
- add ebx,r9d
- vpsrlq xmm7,xmm7,2
- add r9d,edi
- mov r13d,ebx
- add r14d,r9d
- vpxor xmm6,xmm6,xmm7
- shrd r13d,r13d,14
- mov r9d,r14d
- mov r12d,ecx
- vpshufb xmm6,xmm6,xmm9
- shrd r14d,r14d,9
- xor r13d,ebx
- xor r12d,edx
- vpaddd xmm0,xmm0,xmm6
- shrd r13d,r13d,5
- xor r14d,r9d
- and r12d,ebx
- vpaddd xmm6,xmm0,XMMWORD PTR[rbp]
- xor r13d,ebx
- add r8d,DWORD PTR[12+rsp]
- mov edi,r9d
- xor r12d,edx
- shrd r14d,r14d,11
- xor edi,r10d
- add r8d,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- shrd r14d,r14d,2
- add eax,r8d
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- vmovdqa XMMWORD PTR[rsp],xmm6
- vpalignr xmm4,xmm2,xmm1,4
- shrd r13d,r13d,14
- mov r8d,r14d
- mov r12d,ebx
- vpalignr xmm7,xmm0,xmm3,4
- shrd r14d,r14d,9
- xor r13d,eax
- xor r12d,ecx
- vpsrld xmm6,xmm4,7
- shrd r13d,r13d,5
- xor r14d,r8d
- and r12d,eax
- vpaddd xmm1,xmm1,xmm7
- xor r13d,eax
- add edx,DWORD PTR[16+rsp]
- mov r15d,r8d
- vpsrld xmm7,xmm4,3
- xor r12d,ecx
- shrd r14d,r14d,11
- xor r15d,r9d
- vpslld xmm5,xmm4,14
- add edx,r12d
- shrd r13d,r13d,6
- and edi,r15d
- vpxor xmm4,xmm7,xmm6
- xor r14d,r8d
- add edx,r13d
- xor edi,r9d
- vpshufd xmm7,xmm0,250
- shrd r14d,r14d,2
- add r11d,edx
- add edx,edi
- vpsrld xmm6,xmm6,11
- mov r13d,r11d
- add r14d,edx
- shrd r13d,r13d,14
- vpxor xmm4,xmm4,xmm5
- mov edx,r14d
- mov r12d,eax
- shrd r14d,r14d,9
- vpslld xmm5,xmm5,11
- xor r13d,r11d
- xor r12d,ebx
- shrd r13d,r13d,5
- vpxor xmm4,xmm4,xmm6
- xor r14d,edx
- and r12d,r11d
- xor r13d,r11d
- vpsrld xmm6,xmm7,10
- add ecx,DWORD PTR[20+rsp]
- mov edi,edx
- xor r12d,ebx
- vpxor xmm4,xmm4,xmm5
- shrd r14d,r14d,11
- xor edi,r8d
- add ecx,r12d
- vpsrlq xmm7,xmm7,17
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,edx
- vpaddd xmm1,xmm1,xmm4
- add ecx,r13d
- xor r15d,r8d
- shrd r14d,r14d,2
- vpxor xmm6,xmm6,xmm7
- add r10d,ecx
- add ecx,r15d
- mov r13d,r10d
- vpsrlq xmm7,xmm7,2
- add r14d,ecx
- shrd r13d,r13d,14
- mov ecx,r14d
- vpxor xmm6,xmm6,xmm7
- mov r12d,r11d
- shrd r14d,r14d,9
- xor r13d,r10d
- vpshufb xmm6,xmm6,xmm8
- xor r12d,eax
- shrd r13d,r13d,5
- xor r14d,ecx
- vpaddd xmm1,xmm1,xmm6
- and r12d,r10d
- xor r13d,r10d
- add ebx,DWORD PTR[24+rsp]
- vpshufd xmm7,xmm1,80
- mov r15d,ecx
- xor r12d,eax
- shrd r14d,r14d,11
- vpsrld xmm6,xmm7,10
- xor r15d,edx
- add ebx,r12d
- shrd r13d,r13d,6
- vpsrlq xmm7,xmm7,17
- and edi,r15d
- xor r14d,ecx
- add ebx,r13d
- vpxor xmm6,xmm6,xmm7
- xor edi,edx
- shrd r14d,r14d,2
- add r9d,ebx
- vpsrlq xmm7,xmm7,2
- add ebx,edi
- mov r13d,r9d
- add r14d,ebx
- vpxor xmm6,xmm6,xmm7
- shrd r13d,r13d,14
- mov ebx,r14d
- mov r12d,r10d
- vpshufb xmm6,xmm6,xmm9
- shrd r14d,r14d,9
- xor r13d,r9d
- xor r12d,r11d
- vpaddd xmm1,xmm1,xmm6
- shrd r13d,r13d,5
- xor r14d,ebx
- and r12d,r9d
- vpaddd xmm6,xmm1,XMMWORD PTR[32+rbp]
- xor r13d,r9d
- add eax,DWORD PTR[28+rsp]
- mov edi,ebx
- xor r12d,r11d
- shrd r14d,r14d,11
- xor edi,ecx
- add eax,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- shrd r14d,r14d,2
- add r8d,eax
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- vmovdqa XMMWORD PTR[16+rsp],xmm6
- vpalignr xmm4,xmm3,xmm2,4
- shrd r13d,r13d,14
- mov eax,r14d
- mov r12d,r9d
- vpalignr xmm7,xmm1,xmm0,4
- shrd r14d,r14d,9
- xor r13d,r8d
- xor r12d,r10d
- vpsrld xmm6,xmm4,7
- shrd r13d,r13d,5
- xor r14d,eax
- and r12d,r8d
- vpaddd xmm2,xmm2,xmm7
- xor r13d,r8d
- add r11d,DWORD PTR[32+rsp]
- mov r15d,eax
- vpsrld xmm7,xmm4,3
- xor r12d,r10d
- shrd r14d,r14d,11
- xor r15d,ebx
- vpslld xmm5,xmm4,14
- add r11d,r12d
- shrd r13d,r13d,6
- and edi,r15d
- vpxor xmm4,xmm7,xmm6
- xor r14d,eax
- add r11d,r13d
- xor edi,ebx
- vpshufd xmm7,xmm1,250
- shrd r14d,r14d,2
- add edx,r11d
- add r11d,edi
- vpsrld xmm6,xmm6,11
- mov r13d,edx
- add r14d,r11d
- shrd r13d,r13d,14
- vpxor xmm4,xmm4,xmm5
- mov r11d,r14d
- mov r12d,r8d
- shrd r14d,r14d,9
- vpslld xmm5,xmm5,11
- xor r13d,edx
- xor r12d,r9d
- shrd r13d,r13d,5
- vpxor xmm4,xmm4,xmm6
- xor r14d,r11d
- and r12d,edx
- xor r13d,edx
- vpsrld xmm6,xmm7,10
- add r10d,DWORD PTR[36+rsp]
- mov edi,r11d
- xor r12d,r9d
- vpxor xmm4,xmm4,xmm5
- shrd r14d,r14d,11
- xor edi,eax
- add r10d,r12d
- vpsrlq xmm7,xmm7,17
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,r11d
- vpaddd xmm2,xmm2,xmm4
- add r10d,r13d
- xor r15d,eax
- shrd r14d,r14d,2
- vpxor xmm6,xmm6,xmm7
- add ecx,r10d
- add r10d,r15d
- mov r13d,ecx
- vpsrlq xmm7,xmm7,2
- add r14d,r10d
- shrd r13d,r13d,14
- mov r10d,r14d
- vpxor xmm6,xmm6,xmm7
- mov r12d,edx
- shrd r14d,r14d,9
- xor r13d,ecx
- vpshufb xmm6,xmm6,xmm8
- xor r12d,r8d
- shrd r13d,r13d,5
- xor r14d,r10d
- vpaddd xmm2,xmm2,xmm6
- and r12d,ecx
- xor r13d,ecx
- add r9d,DWORD PTR[40+rsp]
- vpshufd xmm7,xmm2,80
- mov r15d,r10d
- xor r12d,r8d
- shrd r14d,r14d,11
- vpsrld xmm6,xmm7,10
- xor r15d,r11d
- add r9d,r12d
- shrd r13d,r13d,6
- vpsrlq xmm7,xmm7,17
- and edi,r15d
- xor r14d,r10d
- add r9d,r13d
- vpxor xmm6,xmm6,xmm7
- xor edi,r11d
- shrd r14d,r14d,2
- add ebx,r9d
- vpsrlq xmm7,xmm7,2
- add r9d,edi
- mov r13d,ebx
- add r14d,r9d
- vpxor xmm6,xmm6,xmm7
- shrd r13d,r13d,14
- mov r9d,r14d
- mov r12d,ecx
- vpshufb xmm6,xmm6,xmm9
- shrd r14d,r14d,9
- xor r13d,ebx
- xor r12d,edx
- vpaddd xmm2,xmm2,xmm6
- shrd r13d,r13d,5
- xor r14d,r9d
- and r12d,ebx
- vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
- xor r13d,ebx
- add r8d,DWORD PTR[44+rsp]
- mov edi,r9d
- xor r12d,edx
- shrd r14d,r14d,11
- xor edi,r10d
- add r8d,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- shrd r14d,r14d,2
- add eax,r8d
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- vmovdqa XMMWORD PTR[32+rsp],xmm6
- vpalignr xmm4,xmm0,xmm3,4
- shrd r13d,r13d,14
- mov r8d,r14d
- mov r12d,ebx
- vpalignr xmm7,xmm2,xmm1,4
- shrd r14d,r14d,9
- xor r13d,eax
- xor r12d,ecx
- vpsrld xmm6,xmm4,7
- shrd r13d,r13d,5
- xor r14d,r8d
- and r12d,eax
- vpaddd xmm3,xmm3,xmm7
- xor r13d,eax
- add edx,DWORD PTR[48+rsp]
- mov r15d,r8d
- vpsrld xmm7,xmm4,3
- xor r12d,ecx
- shrd r14d,r14d,11
- xor r15d,r9d
- vpslld xmm5,xmm4,14
- add edx,r12d
- shrd r13d,r13d,6
- and edi,r15d
- vpxor xmm4,xmm7,xmm6
- xor r14d,r8d
- add edx,r13d
- xor edi,r9d
- vpshufd xmm7,xmm2,250
- shrd r14d,r14d,2
- add r11d,edx
- add edx,edi
- vpsrld xmm6,xmm6,11
- mov r13d,r11d
- add r14d,edx
- shrd r13d,r13d,14
- vpxor xmm4,xmm4,xmm5
- mov edx,r14d
- mov r12d,eax
- shrd r14d,r14d,9
- vpslld xmm5,xmm5,11
- xor r13d,r11d
- xor r12d,ebx
- shrd r13d,r13d,5
- vpxor xmm4,xmm4,xmm6
- xor r14d,edx
- and r12d,r11d
- xor r13d,r11d
- vpsrld xmm6,xmm7,10
- add ecx,DWORD PTR[52+rsp]
- mov edi,edx
- xor r12d,ebx
- vpxor xmm4,xmm4,xmm5
- shrd r14d,r14d,11
- xor edi,r8d
- add ecx,r12d
- vpsrlq xmm7,xmm7,17
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,edx
- vpaddd xmm3,xmm3,xmm4
- add ecx,r13d
- xor r15d,r8d
- shrd r14d,r14d,2
- vpxor xmm6,xmm6,xmm7
- add r10d,ecx
- add ecx,r15d
- mov r13d,r10d
- vpsrlq xmm7,xmm7,2
- add r14d,ecx
- shrd r13d,r13d,14
- mov ecx,r14d
- vpxor xmm6,xmm6,xmm7
- mov r12d,r11d
- shrd r14d,r14d,9
- xor r13d,r10d
- vpshufb xmm6,xmm6,xmm8
- xor r12d,eax
- shrd r13d,r13d,5
- xor r14d,ecx
- vpaddd xmm3,xmm3,xmm6
- and r12d,r10d
- xor r13d,r10d
- add ebx,DWORD PTR[56+rsp]
- vpshufd xmm7,xmm3,80
- mov r15d,ecx
- xor r12d,eax
- shrd r14d,r14d,11
- vpsrld xmm6,xmm7,10
- xor r15d,edx
- add ebx,r12d
- shrd r13d,r13d,6
- vpsrlq xmm7,xmm7,17
- and edi,r15d
- xor r14d,ecx
- add ebx,r13d
- vpxor xmm6,xmm6,xmm7
- xor edi,edx
- shrd r14d,r14d,2
- add r9d,ebx
- vpsrlq xmm7,xmm7,2
- add ebx,edi
- mov r13d,r9d
- add r14d,ebx
- vpxor xmm6,xmm6,xmm7
- shrd r13d,r13d,14
- mov ebx,r14d
- mov r12d,r10d
- vpshufb xmm6,xmm6,xmm9
- shrd r14d,r14d,9
- xor r13d,r9d
- xor r12d,r11d
- vpaddd xmm3,xmm3,xmm6
- shrd r13d,r13d,5
- xor r14d,ebx
- and r12d,r9d
- vpaddd xmm6,xmm3,XMMWORD PTR[96+rbp]
- xor r13d,r9d
- add eax,DWORD PTR[60+rsp]
- mov edi,ebx
- xor r12d,r11d
- shrd r14d,r14d,11
- xor edi,ecx
- add eax,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- shrd r14d,r14d,2
- add r8d,eax
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- vmovdqa XMMWORD PTR[48+rsp],xmm6
- cmp BYTE PTR[131+rbp],0
- jne $L$avx_00_47
- shrd r13d,r13d,14
- mov eax,r14d
- mov r12d,r9d
- shrd r14d,r14d,9
- xor r13d,r8d
- xor r12d,r10d
- shrd r13d,r13d,5
- xor r14d,eax
- and r12d,r8d
- xor r13d,r8d
- add r11d,DWORD PTR[rsp]
- mov r15d,eax
- xor r12d,r10d
- shrd r14d,r14d,11
- xor r15d,ebx
- add r11d,r12d
- shrd r13d,r13d,6
- and edi,r15d
- xor r14d,eax
- add r11d,r13d
- xor edi,ebx
- shrd r14d,r14d,2
- add edx,r11d
- add r11d,edi
- mov r13d,edx
- add r14d,r11d
- shrd r13d,r13d,14
- mov r11d,r14d
- mov r12d,r8d
- shrd r14d,r14d,9
- xor r13d,edx
- xor r12d,r9d
- shrd r13d,r13d,5
- xor r14d,r11d
- and r12d,edx
- xor r13d,edx
- add r10d,DWORD PTR[4+rsp]
- mov edi,r11d
- xor r12d,r9d
- shrd r14d,r14d,11
- xor edi,eax
- add r10d,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,r11d
- add r10d,r13d
- xor r15d,eax
- shrd r14d,r14d,2
- add ecx,r10d
- add r10d,r15d
- mov r13d,ecx
- add r14d,r10d
- shrd r13d,r13d,14
- mov r10d,r14d
- mov r12d,edx
- shrd r14d,r14d,9
- xor r13d,ecx
- xor r12d,r8d
- shrd r13d,r13d,5
- xor r14d,r10d
- and r12d,ecx
- xor r13d,ecx
- add r9d,DWORD PTR[8+rsp]
- mov r15d,r10d
- xor r12d,r8d
- shrd r14d,r14d,11
- xor r15d,r11d
- add r9d,r12d
- shrd r13d,r13d,6
- and edi,r15d
- xor r14d,r10d
- add r9d,r13d
- xor edi,r11d
- shrd r14d,r14d,2
- add ebx,r9d
- add r9d,edi
- mov r13d,ebx
- add r14d,r9d
- shrd r13d,r13d,14
- mov r9d,r14d
- mov r12d,ecx
- shrd r14d,r14d,9
- xor r13d,ebx
- xor r12d,edx
- shrd r13d,r13d,5
- xor r14d,r9d
- and r12d,ebx
- xor r13d,ebx
- add r8d,DWORD PTR[12+rsp]
- mov edi,r9d
- xor r12d,edx
- shrd r14d,r14d,11
- xor edi,r10d
- add r8d,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- shrd r14d,r14d,2
- add eax,r8d
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- shrd r13d,r13d,14
- mov r8d,r14d
- mov r12d,ebx
- shrd r14d,r14d,9
- xor r13d,eax
- xor r12d,ecx
- shrd r13d,r13d,5
- xor r14d,r8d
- and r12d,eax
- xor r13d,eax
- add edx,DWORD PTR[16+rsp]
- mov r15d,r8d
- xor r12d,ecx
- shrd r14d,r14d,11
- xor r15d,r9d
- add edx,r12d
- shrd r13d,r13d,6
- and edi,r15d
- xor r14d,r8d
- add edx,r13d
- xor edi,r9d
- shrd r14d,r14d,2
- add r11d,edx
- add edx,edi
- mov r13d,r11d
- add r14d,edx
- shrd r13d,r13d,14
- mov edx,r14d
- mov r12d,eax
- shrd r14d,r14d,9
- xor r13d,r11d
- xor r12d,ebx
- shrd r13d,r13d,5
- xor r14d,edx
- and r12d,r11d
- xor r13d,r11d
- add ecx,DWORD PTR[20+rsp]
- mov edi,edx
- xor r12d,ebx
- shrd r14d,r14d,11
- xor edi,r8d
- add ecx,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,edx
- add ecx,r13d
- xor r15d,r8d
- shrd r14d,r14d,2
- add r10d,ecx
- add ecx,r15d
- mov r13d,r10d
- add r14d,ecx
- shrd r13d,r13d,14
- mov ecx,r14d
- mov r12d,r11d
- shrd r14d,r14d,9
- xor r13d,r10d
- xor r12d,eax
- shrd r13d,r13d,5
- xor r14d,ecx
- and r12d,r10d
- xor r13d,r10d
- add ebx,DWORD PTR[24+rsp]
- mov r15d,ecx
- xor r12d,eax
- shrd r14d,r14d,11
- xor r15d,edx
- add ebx,r12d
- shrd r13d,r13d,6
- and edi,r15d
- xor r14d,ecx
- add ebx,r13d
- xor edi,edx
- shrd r14d,r14d,2
- add r9d,ebx
- add ebx,edi
- mov r13d,r9d
- add r14d,ebx
- shrd r13d,r13d,14
- mov ebx,r14d
- mov r12d,r10d
- shrd r14d,r14d,9
- xor r13d,r9d
- xor r12d,r11d
- shrd r13d,r13d,5
- xor r14d,ebx
- and r12d,r9d
- xor r13d,r9d
- add eax,DWORD PTR[28+rsp]
- mov edi,ebx
- xor r12d,r11d
- shrd r14d,r14d,11
- xor edi,ecx
- add eax,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- shrd r14d,r14d,2
- add r8d,eax
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- shrd r13d,r13d,14
- mov eax,r14d
- mov r12d,r9d
- shrd r14d,r14d,9
- xor r13d,r8d
- xor r12d,r10d
- shrd r13d,r13d,5
- xor r14d,eax
- and r12d,r8d
- xor r13d,r8d
- add r11d,DWORD PTR[32+rsp]
- mov r15d,eax
- xor r12d,r10d
- shrd r14d,r14d,11
- xor r15d,ebx
- add r11d,r12d
- shrd r13d,r13d,6
- and edi,r15d
- xor r14d,eax
- add r11d,r13d
- xor edi,ebx
- shrd r14d,r14d,2
- add edx,r11d
- add r11d,edi
- mov r13d,edx
- add r14d,r11d
- shrd r13d,r13d,14
- mov r11d,r14d
- mov r12d,r8d
- shrd r14d,r14d,9
- xor r13d,edx
- xor r12d,r9d
- shrd r13d,r13d,5
- xor r14d,r11d
- and r12d,edx
- xor r13d,edx
- add r10d,DWORD PTR[36+rsp]
- mov edi,r11d
- xor r12d,r9d
- shrd r14d,r14d,11
- xor edi,eax
- add r10d,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,r11d
- add r10d,r13d
- xor r15d,eax
- shrd r14d,r14d,2
- add ecx,r10d
- add r10d,r15d
- mov r13d,ecx
- add r14d,r10d
- shrd r13d,r13d,14
- mov r10d,r14d
- mov r12d,edx
- shrd r14d,r14d,9
- xor r13d,ecx
- xor r12d,r8d
- shrd r13d,r13d,5
- xor r14d,r10d
- and r12d,ecx
- xor r13d,ecx
- add r9d,DWORD PTR[40+rsp]
- mov r15d,r10d
- xor r12d,r8d
- shrd r14d,r14d,11
- xor r15d,r11d
- add r9d,r12d
- shrd r13d,r13d,6
- and edi,r15d
- xor r14d,r10d
- add r9d,r13d
- xor edi,r11d
- shrd r14d,r14d,2
- add ebx,r9d
- add r9d,edi
- mov r13d,ebx
- add r14d,r9d
- shrd r13d,r13d,14
- mov r9d,r14d
- mov r12d,ecx
- shrd r14d,r14d,9
- xor r13d,ebx
- xor r12d,edx
- shrd r13d,r13d,5
- xor r14d,r9d
- and r12d,ebx
- xor r13d,ebx
- add r8d,DWORD PTR[44+rsp]
- mov edi,r9d
- xor r12d,edx
- shrd r14d,r14d,11
- xor edi,r10d
- add r8d,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,r9d
- add r8d,r13d
- xor r15d,r10d
- shrd r14d,r14d,2
- add eax,r8d
- add r8d,r15d
- mov r13d,eax
- add r14d,r8d
- shrd r13d,r13d,14
- mov r8d,r14d
- mov r12d,ebx
- shrd r14d,r14d,9
- xor r13d,eax
- xor r12d,ecx
- shrd r13d,r13d,5
- xor r14d,r8d
- and r12d,eax
- xor r13d,eax
- add edx,DWORD PTR[48+rsp]
- mov r15d,r8d
- xor r12d,ecx
- shrd r14d,r14d,11
- xor r15d,r9d
- add edx,r12d
- shrd r13d,r13d,6
- and edi,r15d
- xor r14d,r8d
- add edx,r13d
- xor edi,r9d
- shrd r14d,r14d,2
- add r11d,edx
- add edx,edi
- mov r13d,r11d
- add r14d,edx
- shrd r13d,r13d,14
- mov edx,r14d
- mov r12d,eax
- shrd r14d,r14d,9
- xor r13d,r11d
- xor r12d,ebx
- shrd r13d,r13d,5
- xor r14d,edx
- and r12d,r11d
- xor r13d,r11d
- add ecx,DWORD PTR[52+rsp]
- mov edi,edx
- xor r12d,ebx
- shrd r14d,r14d,11
- xor edi,r8d
- add ecx,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,edx
- add ecx,r13d
- xor r15d,r8d
- shrd r14d,r14d,2
- add r10d,ecx
- add ecx,r15d
- mov r13d,r10d
- add r14d,ecx
- shrd r13d,r13d,14
- mov ecx,r14d
- mov r12d,r11d
- shrd r14d,r14d,9
- xor r13d,r10d
- xor r12d,eax
- shrd r13d,r13d,5
- xor r14d,ecx
- and r12d,r10d
- xor r13d,r10d
- add ebx,DWORD PTR[56+rsp]
- mov r15d,ecx
- xor r12d,eax
- shrd r14d,r14d,11
- xor r15d,edx
- add ebx,r12d
- shrd r13d,r13d,6
- and edi,r15d
- xor r14d,ecx
- add ebx,r13d
- xor edi,edx
- shrd r14d,r14d,2
- add r9d,ebx
- add ebx,edi
- mov r13d,r9d
- add r14d,ebx
- shrd r13d,r13d,14
- mov ebx,r14d
- mov r12d,r10d
- shrd r14d,r14d,9
- xor r13d,r9d
- xor r12d,r11d
- shrd r13d,r13d,5
- xor r14d,ebx
- and r12d,r9d
- xor r13d,r9d
- add eax,DWORD PTR[60+rsp]
- mov edi,ebx
- xor r12d,r11d
- shrd r14d,r14d,11
- xor edi,ecx
- add eax,r12d
- shrd r13d,r13d,6
- and r15d,edi
- xor r14d,ebx
- add eax,r13d
- xor r15d,ecx
- shrd r14d,r14d,2
- add r8d,eax
- add eax,r15d
- mov r13d,r8d
- add r14d,eax
- mov rdi,QWORD PTR[((64+0))+rsp]
- mov eax,r14d
-
- add eax,DWORD PTR[rdi]
- lea rsi,QWORD PTR[64+rsi]
- add ebx,DWORD PTR[4+rdi]
- add ecx,DWORD PTR[8+rdi]
- add edx,DWORD PTR[12+rdi]
- add r8d,DWORD PTR[16+rdi]
- add r9d,DWORD PTR[20+rdi]
- add r10d,DWORD PTR[24+rdi]
- add r11d,DWORD PTR[28+rdi]
-
- cmp rsi,QWORD PTR[((64+16))+rsp]
-
- mov DWORD PTR[rdi],eax
- mov DWORD PTR[4+rdi],ebx
- mov DWORD PTR[8+rdi],ecx
- mov DWORD PTR[12+rdi],edx
- mov DWORD PTR[16+rdi],r8d
- mov DWORD PTR[20+rdi],r9d
- mov DWORD PTR[24+rdi],r10d
- mov DWORD PTR[28+rdi],r11d
- jb $L$loop_avx
-
- mov rsi,QWORD PTR[88+rsp]
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((64+32))+rsp]
- movaps xmm7,XMMWORD PTR[((64+48))+rsp]
- movaps xmm8,XMMWORD PTR[((64+64))+rsp]
- movaps xmm9,XMMWORD PTR[((64+80))+rsp]
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue_avx::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha256_block_data_order_avx::
-sha256_block_data_order_avx ENDP
-
-ALIGN 64
-sha256_block_data_order_avx2 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha256_block_data_order_avx2::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$avx2_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,608
- shl rdx,4
- and rsp,-256*4
- lea rdx,QWORD PTR[rdx*4+rsi]
- add rsp,448
- mov QWORD PTR[((64+0))+rsp],rdi
- mov QWORD PTR[((64+8))+rsp],rsi
- mov QWORD PTR[((64+16))+rsp],rdx
- mov QWORD PTR[88+rsp],rax
-
- movaps XMMWORD PTR[(64+32)+rsp],xmm6
- movaps XMMWORD PTR[(64+48)+rsp],xmm7
- movaps XMMWORD PTR[(64+64)+rsp],xmm8
- movaps XMMWORD PTR[(64+80)+rsp],xmm9
-$L$prologue_avx2::
-
- vzeroupper
- sub rsi,-16*4
- mov eax,DWORD PTR[rdi]
- mov r12,rsi
- mov ebx,DWORD PTR[4+rdi]
- cmp rsi,rdx
- mov ecx,DWORD PTR[8+rdi]
- cmove r12,rsp
- mov edx,DWORD PTR[12+rdi]
- mov r8d,DWORD PTR[16+rdi]
- mov r9d,DWORD PTR[20+rdi]
- mov r10d,DWORD PTR[24+rdi]
- mov r11d,DWORD PTR[28+rdi]
- vmovdqa ymm8,YMMWORD PTR[((K256+512+32))]
- vmovdqa ymm9,YMMWORD PTR[((K256+512+64))]
- jmp $L$oop_avx2
-ALIGN 16
-$L$oop_avx2::
- vmovdqa ymm7,YMMWORD PTR[((K256+512))]
- vmovdqu xmm0,XMMWORD PTR[((-64+0))+rsi]
- vmovdqu xmm1,XMMWORD PTR[((-64+16))+rsi]
- vmovdqu xmm2,XMMWORD PTR[((-64+32))+rsi]
- vmovdqu xmm3,XMMWORD PTR[((-64+48))+rsi]
-
- vinserti128 ymm0,ymm0,XMMWORD PTR[r12],1
- vinserti128 ymm1,ymm1,XMMWORD PTR[16+r12],1
- vpshufb ymm0,ymm0,ymm7
- vinserti128 ymm2,ymm2,XMMWORD PTR[32+r12],1
- vpshufb ymm1,ymm1,ymm7
- vinserti128 ymm3,ymm3,XMMWORD PTR[48+r12],1
-
- lea rbp,QWORD PTR[K256]
- vpshufb ymm2,ymm2,ymm7
- vpaddd ymm4,ymm0,YMMWORD PTR[rbp]
- vpshufb ymm3,ymm3,ymm7
- vpaddd ymm5,ymm1,YMMWORD PTR[32+rbp]
- vpaddd ymm6,ymm2,YMMWORD PTR[64+rbp]
- vpaddd ymm7,ymm3,YMMWORD PTR[96+rbp]
- vmovdqa YMMWORD PTR[rsp],ymm4
- xor r14d,r14d
- vmovdqa YMMWORD PTR[32+rsp],ymm5
- lea rsp,QWORD PTR[((-64))+rsp]
- mov edi,ebx
- vmovdqa YMMWORD PTR[rsp],ymm6
- xor edi,ecx
- vmovdqa YMMWORD PTR[32+rsp],ymm7
- mov r12d,r9d
- sub rbp,-16*2*4
- jmp $L$avx2_00_47
-
-ALIGN 16
-$L$avx2_00_47::
- lea rsp,QWORD PTR[((-64))+rsp]
- vpalignr ymm4,ymm1,ymm0,4
- add r11d,DWORD PTR[((0+128))+rsp]
- and r12d,r8d
- rorx r13d,r8d,25
- vpalignr ymm7,ymm3,ymm2,4
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- vpsrld ymm6,ymm4,7
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- vpaddd ymm0,ymm0,ymm7
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- vpsrld ymm7,ymm4,3
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- vpslld ymm5,ymm4,14
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- vpxor ymm4,ymm7,ymm6
- and edi,r15d
- xor r14d,r12d
- xor edi,ebx
- vpshufd ymm7,ymm3,250
- xor r14d,r13d
- lea r11d,DWORD PTR[rdi*1+r11]
- mov r12d,r8d
- vpsrld ymm6,ymm6,11
- add r10d,DWORD PTR[((4+128))+rsp]
- and r12d,edx
- rorx r13d,edx,25
- vpxor ymm4,ymm4,ymm5
- rorx edi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- vpslld ymm5,ymm5,11
- andn r12d,edx,r9d
- xor r13d,edi
- rorx r14d,edx,6
- vpxor ymm4,ymm4,ymm6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov edi,r11d
- vpsrld ymm6,ymm7,10
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor edi,eax
- vpxor ymm4,ymm4,ymm5
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- vpsrlq ymm7,ymm7,17
- and r15d,edi
- xor r14d,r12d
- xor r15d,eax
- vpaddd ymm0,ymm0,ymm4
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- vpxor ymm6,ymm6,ymm7
- add r9d,DWORD PTR[((8+128))+rsp]
- and r12d,ecx
- rorx r13d,ecx,25
- vpsrlq ymm7,ymm7,2
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- vpxor ymm6,ymm6,ymm7
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- vpshufb ymm6,ymm6,ymm8
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- vpaddd ymm0,ymm0,ymm6
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- vpshufd ymm7,ymm0,80
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- vpsrld ymm6,ymm7,10
- and edi,r15d
- xor r14d,r12d
- xor edi,r11d
- vpsrlq ymm7,ymm7,17
- xor r14d,r13d
- lea r9d,DWORD PTR[rdi*1+r9]
- mov r12d,ecx
- vpxor ymm6,ymm6,ymm7
- add r8d,DWORD PTR[((12+128))+rsp]
- and r12d,ebx
- rorx r13d,ebx,25
- vpsrlq ymm7,ymm7,2
- rorx edi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- vpxor ymm6,ymm6,ymm7
- andn r12d,ebx,edx
- xor r13d,edi
- rorx r14d,ebx,6
- vpshufb ymm6,ymm6,ymm9
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov edi,r9d
- vpaddd ymm0,ymm0,ymm6
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor edi,r10d
- vpaddd ymm6,ymm0,YMMWORD PTR[rbp]
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- and r15d,edi
- xor r14d,r12d
- xor r15d,r10d
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- vmovdqa YMMWORD PTR[rsp],ymm6
- vpalignr ymm4,ymm2,ymm1,4
- add edx,DWORD PTR[((32+128))+rsp]
- and r12d,eax
- rorx r13d,eax,25
- vpalignr ymm7,ymm0,ymm3,4
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- vpsrld ymm6,ymm4,7
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- vpaddd ymm1,ymm1,ymm7
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- vpsrld ymm7,ymm4,3
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- vpslld ymm5,ymm4,14
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- vpxor ymm4,ymm7,ymm6
- and edi,r15d
- xor r14d,r12d
- xor edi,r9d
- vpshufd ymm7,ymm0,250
- xor r14d,r13d
- lea edx,DWORD PTR[rdi*1+rdx]
- mov r12d,eax
- vpsrld ymm6,ymm6,11
- add ecx,DWORD PTR[((36+128))+rsp]
- and r12d,r11d
- rorx r13d,r11d,25
- vpxor ymm4,ymm4,ymm5
- rorx edi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- vpslld ymm5,ymm5,11
- andn r12d,r11d,ebx
- xor r13d,edi
- rorx r14d,r11d,6
- vpxor ymm4,ymm4,ymm6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov edi,edx
- vpsrld ymm6,ymm7,10
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor edi,r8d
- vpxor ymm4,ymm4,ymm5
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- vpsrlq ymm7,ymm7,17
- and r15d,edi
- xor r14d,r12d
- xor r15d,r8d
- vpaddd ymm1,ymm1,ymm4
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- vpxor ymm6,ymm6,ymm7
- add ebx,DWORD PTR[((40+128))+rsp]
- and r12d,r10d
- rorx r13d,r10d,25
- vpsrlq ymm7,ymm7,2
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- vpxor ymm6,ymm6,ymm7
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- vpshufb ymm6,ymm6,ymm8
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- vpaddd ymm1,ymm1,ymm6
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- vpshufd ymm7,ymm1,80
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- vpsrld ymm6,ymm7,10
- and edi,r15d
- xor r14d,r12d
- xor edi,edx
- vpsrlq ymm7,ymm7,17
- xor r14d,r13d
- lea ebx,DWORD PTR[rdi*1+rbx]
- mov r12d,r10d
- vpxor ymm6,ymm6,ymm7
- add eax,DWORD PTR[((44+128))+rsp]
- and r12d,r9d
- rorx r13d,r9d,25
- vpsrlq ymm7,ymm7,2
- rorx edi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- vpxor ymm6,ymm6,ymm7
- andn r12d,r9d,r11d
- xor r13d,edi
- rorx r14d,r9d,6
- vpshufb ymm6,ymm6,ymm9
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov edi,ebx
- vpaddd ymm1,ymm1,ymm6
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor edi,ecx
- vpaddd ymm6,ymm1,YMMWORD PTR[32+rbp]
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- and r15d,edi
- xor r14d,r12d
- xor r15d,ecx
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- vmovdqa YMMWORD PTR[32+rsp],ymm6
- lea rsp,QWORD PTR[((-64))+rsp]
- vpalignr ymm4,ymm3,ymm2,4
- add r11d,DWORD PTR[((0+128))+rsp]
- and r12d,r8d
- rorx r13d,r8d,25
- vpalignr ymm7,ymm1,ymm0,4
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- vpsrld ymm6,ymm4,7
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- vpaddd ymm2,ymm2,ymm7
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- vpsrld ymm7,ymm4,3
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- vpslld ymm5,ymm4,14
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- vpxor ymm4,ymm7,ymm6
- and edi,r15d
- xor r14d,r12d
- xor edi,ebx
- vpshufd ymm7,ymm1,250
- xor r14d,r13d
- lea r11d,DWORD PTR[rdi*1+r11]
- mov r12d,r8d
- vpsrld ymm6,ymm6,11
- add r10d,DWORD PTR[((4+128))+rsp]
- and r12d,edx
- rorx r13d,edx,25
- vpxor ymm4,ymm4,ymm5
- rorx edi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- vpslld ymm5,ymm5,11
- andn r12d,edx,r9d
- xor r13d,edi
- rorx r14d,edx,6
- vpxor ymm4,ymm4,ymm6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov edi,r11d
- vpsrld ymm6,ymm7,10
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor edi,eax
- vpxor ymm4,ymm4,ymm5
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- vpsrlq ymm7,ymm7,17
- and r15d,edi
- xor r14d,r12d
- xor r15d,eax
- vpaddd ymm2,ymm2,ymm4
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- vpxor ymm6,ymm6,ymm7
- add r9d,DWORD PTR[((8+128))+rsp]
- and r12d,ecx
- rorx r13d,ecx,25
- vpsrlq ymm7,ymm7,2
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- vpxor ymm6,ymm6,ymm7
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- vpshufb ymm6,ymm6,ymm8
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- vpaddd ymm2,ymm2,ymm6
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- vpshufd ymm7,ymm2,80
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- vpsrld ymm6,ymm7,10
- and edi,r15d
- xor r14d,r12d
- xor edi,r11d
- vpsrlq ymm7,ymm7,17
- xor r14d,r13d
- lea r9d,DWORD PTR[rdi*1+r9]
- mov r12d,ecx
- vpxor ymm6,ymm6,ymm7
- add r8d,DWORD PTR[((12+128))+rsp]
- and r12d,ebx
- rorx r13d,ebx,25
- vpsrlq ymm7,ymm7,2
- rorx edi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- vpxor ymm6,ymm6,ymm7
- andn r12d,ebx,edx
- xor r13d,edi
- rorx r14d,ebx,6
- vpshufb ymm6,ymm6,ymm9
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov edi,r9d
- vpaddd ymm2,ymm2,ymm6
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor edi,r10d
- vpaddd ymm6,ymm2,YMMWORD PTR[64+rbp]
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- and r15d,edi
- xor r14d,r12d
- xor r15d,r10d
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- vmovdqa YMMWORD PTR[rsp],ymm6
- vpalignr ymm4,ymm0,ymm3,4
- add edx,DWORD PTR[((32+128))+rsp]
- and r12d,eax
- rorx r13d,eax,25
- vpalignr ymm7,ymm2,ymm1,4
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- vpsrld ymm6,ymm4,7
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- vpaddd ymm3,ymm3,ymm7
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- vpsrld ymm7,ymm4,3
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- vpslld ymm5,ymm4,14
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- vpxor ymm4,ymm7,ymm6
- and edi,r15d
- xor r14d,r12d
- xor edi,r9d
- vpshufd ymm7,ymm2,250
- xor r14d,r13d
- lea edx,DWORD PTR[rdi*1+rdx]
- mov r12d,eax
- vpsrld ymm6,ymm6,11
- add ecx,DWORD PTR[((36+128))+rsp]
- and r12d,r11d
- rorx r13d,r11d,25
- vpxor ymm4,ymm4,ymm5
- rorx edi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- vpslld ymm5,ymm5,11
- andn r12d,r11d,ebx
- xor r13d,edi
- rorx r14d,r11d,6
- vpxor ymm4,ymm4,ymm6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov edi,edx
- vpsrld ymm6,ymm7,10
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor edi,r8d
- vpxor ymm4,ymm4,ymm5
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- vpsrlq ymm7,ymm7,17
- and r15d,edi
- xor r14d,r12d
- xor r15d,r8d
- vpaddd ymm3,ymm3,ymm4
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- vpxor ymm6,ymm6,ymm7
- add ebx,DWORD PTR[((40+128))+rsp]
- and r12d,r10d
- rorx r13d,r10d,25
- vpsrlq ymm7,ymm7,2
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- vpxor ymm6,ymm6,ymm7
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- vpshufb ymm6,ymm6,ymm8
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- vpaddd ymm3,ymm3,ymm6
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- vpshufd ymm7,ymm3,80
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- vpsrld ymm6,ymm7,10
- and edi,r15d
- xor r14d,r12d
- xor edi,edx
- vpsrlq ymm7,ymm7,17
- xor r14d,r13d
- lea ebx,DWORD PTR[rdi*1+rbx]
- mov r12d,r10d
- vpxor ymm6,ymm6,ymm7
- add eax,DWORD PTR[((44+128))+rsp]
- and r12d,r9d
- rorx r13d,r9d,25
- vpsrlq ymm7,ymm7,2
- rorx edi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- vpxor ymm6,ymm6,ymm7
- andn r12d,r9d,r11d
- xor r13d,edi
- rorx r14d,r9d,6
- vpshufb ymm6,ymm6,ymm9
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov edi,ebx
- vpaddd ymm3,ymm3,ymm6
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor edi,ecx
- vpaddd ymm6,ymm3,YMMWORD PTR[96+rbp]
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- and r15d,edi
- xor r14d,r12d
- xor r15d,ecx
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- vmovdqa YMMWORD PTR[32+rsp],ymm6
- lea rbp,QWORD PTR[128+rbp]
- cmp BYTE PTR[3+rbp],0
- jne $L$avx2_00_47
- add r11d,DWORD PTR[((0+64))+rsp]
- and r12d,r8d
- rorx r13d,r8d,25
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- and edi,r15d
- xor r14d,r12d
- xor edi,ebx
- xor r14d,r13d
- lea r11d,DWORD PTR[rdi*1+r11]
- mov r12d,r8d
- add r10d,DWORD PTR[((4+64))+rsp]
- and r12d,edx
- rorx r13d,edx,25
- rorx edi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- andn r12d,edx,r9d
- xor r13d,edi
- rorx r14d,edx,6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov edi,r11d
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor edi,eax
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- and r15d,edi
- xor r14d,r12d
- xor r15d,eax
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- add r9d,DWORD PTR[((8+64))+rsp]
- and r12d,ecx
- rorx r13d,ecx,25
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- and edi,r15d
- xor r14d,r12d
- xor edi,r11d
- xor r14d,r13d
- lea r9d,DWORD PTR[rdi*1+r9]
- mov r12d,ecx
- add r8d,DWORD PTR[((12+64))+rsp]
- and r12d,ebx
- rorx r13d,ebx,25
- rorx edi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- andn r12d,ebx,edx
- xor r13d,edi
- rorx r14d,ebx,6
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov edi,r9d
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor edi,r10d
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- and r15d,edi
- xor r14d,r12d
- xor r15d,r10d
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- add edx,DWORD PTR[((32+64))+rsp]
- and r12d,eax
- rorx r13d,eax,25
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- and edi,r15d
- xor r14d,r12d
- xor edi,r9d
- xor r14d,r13d
- lea edx,DWORD PTR[rdi*1+rdx]
- mov r12d,eax
- add ecx,DWORD PTR[((36+64))+rsp]
- and r12d,r11d
- rorx r13d,r11d,25
- rorx edi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- andn r12d,r11d,ebx
- xor r13d,edi
- rorx r14d,r11d,6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov edi,edx
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor edi,r8d
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- and r15d,edi
- xor r14d,r12d
- xor r15d,r8d
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- add ebx,DWORD PTR[((40+64))+rsp]
- and r12d,r10d
- rorx r13d,r10d,25
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- and edi,r15d
- xor r14d,r12d
- xor edi,edx
- xor r14d,r13d
- lea ebx,DWORD PTR[rdi*1+rbx]
- mov r12d,r10d
- add eax,DWORD PTR[((44+64))+rsp]
- and r12d,r9d
- rorx r13d,r9d,25
- rorx edi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- andn r12d,r9d,r11d
- xor r13d,edi
- rorx r14d,r9d,6
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov edi,ebx
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor edi,ecx
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- and r15d,edi
- xor r14d,r12d
- xor r15d,ecx
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- add r11d,DWORD PTR[rsp]
- and r12d,r8d
- rorx r13d,r8d,25
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- and edi,r15d
- xor r14d,r12d
- xor edi,ebx
- xor r14d,r13d
- lea r11d,DWORD PTR[rdi*1+r11]
- mov r12d,r8d
- add r10d,DWORD PTR[4+rsp]
- and r12d,edx
- rorx r13d,edx,25
- rorx edi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- andn r12d,edx,r9d
- xor r13d,edi
- rorx r14d,edx,6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov edi,r11d
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor edi,eax
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- and r15d,edi
- xor r14d,r12d
- xor r15d,eax
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- add r9d,DWORD PTR[8+rsp]
- and r12d,ecx
- rorx r13d,ecx,25
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- and edi,r15d
- xor r14d,r12d
- xor edi,r11d
- xor r14d,r13d
- lea r9d,DWORD PTR[rdi*1+r9]
- mov r12d,ecx
- add r8d,DWORD PTR[12+rsp]
- and r12d,ebx
- rorx r13d,ebx,25
- rorx edi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- andn r12d,ebx,edx
- xor r13d,edi
- rorx r14d,ebx,6
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov edi,r9d
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor edi,r10d
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- and r15d,edi
- xor r14d,r12d
- xor r15d,r10d
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- add edx,DWORD PTR[32+rsp]
- and r12d,eax
- rorx r13d,eax,25
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- and edi,r15d
- xor r14d,r12d
- xor edi,r9d
- xor r14d,r13d
- lea edx,DWORD PTR[rdi*1+rdx]
- mov r12d,eax
- add ecx,DWORD PTR[36+rsp]
- and r12d,r11d
- rorx r13d,r11d,25
- rorx edi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- andn r12d,r11d,ebx
- xor r13d,edi
- rorx r14d,r11d,6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov edi,edx
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor edi,r8d
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- and r15d,edi
- xor r14d,r12d
- xor r15d,r8d
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- add ebx,DWORD PTR[40+rsp]
- and r12d,r10d
- rorx r13d,r10d,25
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- and edi,r15d
- xor r14d,r12d
- xor edi,edx
- xor r14d,r13d
- lea ebx,DWORD PTR[rdi*1+rbx]
- mov r12d,r10d
- add eax,DWORD PTR[44+rsp]
- and r12d,r9d
- rorx r13d,r9d,25
- rorx edi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- andn r12d,r9d,r11d
- xor r13d,edi
- rorx r14d,r9d,6
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov edi,ebx
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor edi,ecx
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- and r15d,edi
- xor r14d,r12d
- xor r15d,ecx
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- mov rdi,QWORD PTR[512+rsp]
- add eax,r14d
-
- lea rbp,QWORD PTR[448+rsp]
-
- add eax,DWORD PTR[rdi]
- add ebx,DWORD PTR[4+rdi]
- add ecx,DWORD PTR[8+rdi]
- add edx,DWORD PTR[12+rdi]
- add r8d,DWORD PTR[16+rdi]
- add r9d,DWORD PTR[20+rdi]
- add r10d,DWORD PTR[24+rdi]
- add r11d,DWORD PTR[28+rdi]
-
- mov DWORD PTR[rdi],eax
- mov DWORD PTR[4+rdi],ebx
- mov DWORD PTR[8+rdi],ecx
- mov DWORD PTR[12+rdi],edx
- mov DWORD PTR[16+rdi],r8d
- mov DWORD PTR[20+rdi],r9d
- mov DWORD PTR[24+rdi],r10d
- mov DWORD PTR[28+rdi],r11d
-
- cmp rsi,QWORD PTR[80+rbp]
- je $L$done_avx2
-
- xor r14d,r14d
- mov edi,ebx
- xor edi,ecx
- mov r12d,r9d
- jmp $L$ower_avx2
-ALIGN 16
-$L$ower_avx2::
- add r11d,DWORD PTR[((0+16))+rbp]
- and r12d,r8d
- rorx r13d,r8d,25
- rorx r15d,r8d,11
- lea eax,DWORD PTR[r14*1+rax]
- lea r11d,DWORD PTR[r12*1+r11]
- andn r12d,r8d,r10d
- xor r13d,r15d
- rorx r14d,r8d,6
- lea r11d,DWORD PTR[r12*1+r11]
- xor r13d,r14d
- mov r15d,eax
- rorx r12d,eax,22
- lea r11d,DWORD PTR[r13*1+r11]
- xor r15d,ebx
- rorx r14d,eax,13
- rorx r13d,eax,2
- lea edx,DWORD PTR[r11*1+rdx]
- and edi,r15d
- xor r14d,r12d
- xor edi,ebx
- xor r14d,r13d
- lea r11d,DWORD PTR[rdi*1+r11]
- mov r12d,r8d
- add r10d,DWORD PTR[((4+16))+rbp]
- and r12d,edx
- rorx r13d,edx,25
- rorx edi,edx,11
- lea r11d,DWORD PTR[r14*1+r11]
- lea r10d,DWORD PTR[r12*1+r10]
- andn r12d,edx,r9d
- xor r13d,edi
- rorx r14d,edx,6
- lea r10d,DWORD PTR[r12*1+r10]
- xor r13d,r14d
- mov edi,r11d
- rorx r12d,r11d,22
- lea r10d,DWORD PTR[r13*1+r10]
- xor edi,eax
- rorx r14d,r11d,13
- rorx r13d,r11d,2
- lea ecx,DWORD PTR[r10*1+rcx]
- and r15d,edi
- xor r14d,r12d
- xor r15d,eax
- xor r14d,r13d
- lea r10d,DWORD PTR[r15*1+r10]
- mov r12d,edx
- add r9d,DWORD PTR[((8+16))+rbp]
- and r12d,ecx
- rorx r13d,ecx,25
- rorx r15d,ecx,11
- lea r10d,DWORD PTR[r14*1+r10]
- lea r9d,DWORD PTR[r12*1+r9]
- andn r12d,ecx,r8d
- xor r13d,r15d
- rorx r14d,ecx,6
- lea r9d,DWORD PTR[r12*1+r9]
- xor r13d,r14d
- mov r15d,r10d
- rorx r12d,r10d,22
- lea r9d,DWORD PTR[r13*1+r9]
- xor r15d,r11d
- rorx r14d,r10d,13
- rorx r13d,r10d,2
- lea ebx,DWORD PTR[r9*1+rbx]
- and edi,r15d
- xor r14d,r12d
- xor edi,r11d
- xor r14d,r13d
- lea r9d,DWORD PTR[rdi*1+r9]
- mov r12d,ecx
- add r8d,DWORD PTR[((12+16))+rbp]
- and r12d,ebx
- rorx r13d,ebx,25
- rorx edi,ebx,11
- lea r9d,DWORD PTR[r14*1+r9]
- lea r8d,DWORD PTR[r12*1+r8]
- andn r12d,ebx,edx
- xor r13d,edi
- rorx r14d,ebx,6
- lea r8d,DWORD PTR[r12*1+r8]
- xor r13d,r14d
- mov edi,r9d
- rorx r12d,r9d,22
- lea r8d,DWORD PTR[r13*1+r8]
- xor edi,r10d
- rorx r14d,r9d,13
- rorx r13d,r9d,2
- lea eax,DWORD PTR[r8*1+rax]
- and r15d,edi
- xor r14d,r12d
- xor r15d,r10d
- xor r14d,r13d
- lea r8d,DWORD PTR[r15*1+r8]
- mov r12d,ebx
- add edx,DWORD PTR[((32+16))+rbp]
- and r12d,eax
- rorx r13d,eax,25
- rorx r15d,eax,11
- lea r8d,DWORD PTR[r14*1+r8]
- lea edx,DWORD PTR[r12*1+rdx]
- andn r12d,eax,ecx
- xor r13d,r15d
- rorx r14d,eax,6
- lea edx,DWORD PTR[r12*1+rdx]
- xor r13d,r14d
- mov r15d,r8d
- rorx r12d,r8d,22
- lea edx,DWORD PTR[r13*1+rdx]
- xor r15d,r9d
- rorx r14d,r8d,13
- rorx r13d,r8d,2
- lea r11d,DWORD PTR[rdx*1+r11]
- and edi,r15d
- xor r14d,r12d
- xor edi,r9d
- xor r14d,r13d
- lea edx,DWORD PTR[rdi*1+rdx]
- mov r12d,eax
- add ecx,DWORD PTR[((36+16))+rbp]
- and r12d,r11d
- rorx r13d,r11d,25
- rorx edi,r11d,11
- lea edx,DWORD PTR[r14*1+rdx]
- lea ecx,DWORD PTR[r12*1+rcx]
- andn r12d,r11d,ebx
- xor r13d,edi
- rorx r14d,r11d,6
- lea ecx,DWORD PTR[r12*1+rcx]
- xor r13d,r14d
- mov edi,edx
- rorx r12d,edx,22
- lea ecx,DWORD PTR[r13*1+rcx]
- xor edi,r8d
- rorx r14d,edx,13
- rorx r13d,edx,2
- lea r10d,DWORD PTR[rcx*1+r10]
- and r15d,edi
- xor r14d,r12d
- xor r15d,r8d
- xor r14d,r13d
- lea ecx,DWORD PTR[r15*1+rcx]
- mov r12d,r11d
- add ebx,DWORD PTR[((40+16))+rbp]
- and r12d,r10d
- rorx r13d,r10d,25
- rorx r15d,r10d,11
- lea ecx,DWORD PTR[r14*1+rcx]
- lea ebx,DWORD PTR[r12*1+rbx]
- andn r12d,r10d,eax
- xor r13d,r15d
- rorx r14d,r10d,6
- lea ebx,DWORD PTR[r12*1+rbx]
- xor r13d,r14d
- mov r15d,ecx
- rorx r12d,ecx,22
- lea ebx,DWORD PTR[r13*1+rbx]
- xor r15d,edx
- rorx r14d,ecx,13
- rorx r13d,ecx,2
- lea r9d,DWORD PTR[rbx*1+r9]
- and edi,r15d
- xor r14d,r12d
- xor edi,edx
- xor r14d,r13d
- lea ebx,DWORD PTR[rdi*1+rbx]
- mov r12d,r10d
- add eax,DWORD PTR[((44+16))+rbp]
- and r12d,r9d
- rorx r13d,r9d,25
- rorx edi,r9d,11
- lea ebx,DWORD PTR[r14*1+rbx]
- lea eax,DWORD PTR[r12*1+rax]
- andn r12d,r9d,r11d
- xor r13d,edi
- rorx r14d,r9d,6
- lea eax,DWORD PTR[r12*1+rax]
- xor r13d,r14d
- mov edi,ebx
- rorx r12d,ebx,22
- lea eax,DWORD PTR[r13*1+rax]
- xor edi,ecx
- rorx r14d,ebx,13
- rorx r13d,ebx,2
- lea r8d,DWORD PTR[rax*1+r8]
- and r15d,edi
- xor r14d,r12d
- xor r15d,ecx
- xor r14d,r13d
- lea eax,DWORD PTR[r15*1+rax]
- mov r12d,r9d
- lea rbp,QWORD PTR[((-64))+rbp]
- cmp rbp,rsp
- jae $L$ower_avx2
-
- mov rdi,QWORD PTR[512+rsp]
- add eax,r14d
-
- lea rsp,QWORD PTR[448+rsp]
-
-
-
- add eax,DWORD PTR[rdi]
- add ebx,DWORD PTR[4+rdi]
- add ecx,DWORD PTR[8+rdi]
- add edx,DWORD PTR[12+rdi]
- add r8d,DWORD PTR[16+rdi]
- add r9d,DWORD PTR[20+rdi]
- lea rsi,QWORD PTR[128+rsi]
- add r10d,DWORD PTR[24+rdi]
- mov r12,rsi
- add r11d,DWORD PTR[28+rdi]
- cmp rsi,QWORD PTR[((64+16))+rsp]
-
- mov DWORD PTR[rdi],eax
- cmove r12,rsp
- mov DWORD PTR[4+rdi],ebx
- mov DWORD PTR[8+rdi],ecx
- mov DWORD PTR[12+rdi],edx
- mov DWORD PTR[16+rdi],r8d
- mov DWORD PTR[20+rdi],r9d
- mov DWORD PTR[24+rdi],r10d
- mov DWORD PTR[28+rdi],r11d
-
- jbe $L$oop_avx2
- lea rbp,QWORD PTR[rsp]
-
-
-
-
-$L$done_avx2::
- mov rsi,QWORD PTR[88+rbp]
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((64+32))+rbp]
- movaps xmm7,XMMWORD PTR[((64+48))+rbp]
- movaps xmm8,XMMWORD PTR[((64+64))+rbp]
- movaps xmm9,XMMWORD PTR[((64+80))+rbp]
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue_avx2::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha256_block_data_order_avx2::
-sha256_block_data_order_avx2 ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
- lea r10,QWORD PTR[$L$avx2_shortcut]
- cmp rbx,r10
- jb $L$not_in_avx2
-
- and rax,-256*4
- add rax,448
-$L$not_in_avx2::
- mov rsi,rax
- mov rax,QWORD PTR[((64+24))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
- lea r10,QWORD PTR[$L$epilogue]
- cmp rbx,r10
- jb $L$in_prologue
-
- lea rsi,QWORD PTR[((64+32))+rsi]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,8
- DD 0a548f3fch
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-ALIGN 16
-shaext_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- lea r10,QWORD PTR[$L$prologue_shaext]
- cmp rbx,r10
- jb $L$in_prologue
-
- lea r10,QWORD PTR[$L$epilogue_shaext]
- cmp rbx,r10
- jae $L$in_prologue
-
- lea rsi,QWORD PTR[((-8-80))+rax]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,10
- DD 0a548f3fch
-
- jmp $L$in_prologue
-shaext_handler ENDP
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_sha256_block_data_order
- DD imagerel $L$SEH_end_sha256_block_data_order
- DD imagerel $L$SEH_info_sha256_block_data_order
- DD imagerel $L$SEH_begin_sha256_block_data_order_shaext
- DD imagerel $L$SEH_end_sha256_block_data_order_shaext
- DD imagerel $L$SEH_info_sha256_block_data_order_shaext
- DD imagerel $L$SEH_begin_sha256_block_data_order_ssse3
- DD imagerel $L$SEH_end_sha256_block_data_order_ssse3
- DD imagerel $L$SEH_info_sha256_block_data_order_ssse3
- DD imagerel $L$SEH_begin_sha256_block_data_order_avx
- DD imagerel $L$SEH_end_sha256_block_data_order_avx
- DD imagerel $L$SEH_info_sha256_block_data_order_avx
- DD imagerel $L$SEH_begin_sha256_block_data_order_avx2
- DD imagerel $L$SEH_end_sha256_block_data_order_avx2
- DD imagerel $L$SEH_info_sha256_block_data_order_avx2
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_sha256_block_data_order::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue,imagerel $L$epilogue
-$L$SEH_info_sha256_block_data_order_shaext::
-DB 9,0,0,0
- DD imagerel shaext_handler
-$L$SEH_info_sha256_block_data_order_ssse3::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue_ssse3,imagerel $L$epilogue_ssse3
-$L$SEH_info_sha256_block_data_order_avx::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
-$L$SEH_info_sha256_block_data_order_avx2::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue_avx2,imagerel $L$epilogue_avx2
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+PUBLIC sha256_block_data_order
+
+ALIGN 16
+sha256_block_data_order PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha256_block_data_order::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ lea r11,QWORD PTR[OPENSSL_ia32cap_P]
+ mov r9d,DWORD PTR[r11]
+ mov r10d,DWORD PTR[4+r11]
+ mov r11d,DWORD PTR[8+r11]
+ test r11d,536870912
+ jnz _shaext_shortcut
+ and r11d,296
+ cmp r11d,296
+ je $L$avx2_shortcut
+ and r9d,1073741824
+ and r10d,268435968
+ or r10d,r9d
+ cmp r10d,1342177792
+ je $L$avx_shortcut
+ test r10d,512
+ jnz $L$ssse3_shortcut
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ shl rdx,4
+ sub rsp,16*4+4*8
+ lea rdx,QWORD PTR[rdx*4+rsi]
+ and rsp,-64
+ mov QWORD PTR[((64+0))+rsp],rdi
+ mov QWORD PTR[((64+8))+rsp],rsi
+ mov QWORD PTR[((64+16))+rsp],rdx
+ mov QWORD PTR[88+rsp],rax
+
+$L$prologue::
+
+ mov eax,DWORD PTR[rdi]
+ mov ebx,DWORD PTR[4+rdi]
+ mov ecx,DWORD PTR[8+rdi]
+ mov edx,DWORD PTR[12+rdi]
+ mov r8d,DWORD PTR[16+rdi]
+ mov r9d,DWORD PTR[20+rdi]
+ mov r10d,DWORD PTR[24+rdi]
+ mov r11d,DWORD PTR[28+rdi]
+ jmp $L$loop
+
+ALIGN 16
+$L$loop::
+ mov edi,ebx
+ lea rbp,QWORD PTR[K256]
+ xor edi,ecx
+ mov r12d,DWORD PTR[rsi]
+ mov r13d,r8d
+ mov r14d,eax
+ bswap r12d
+ ror r13d,14
+ mov r15d,r9d
+
+ xor r13d,r8d
+ ror r14d,9
+ xor r15d,r10d
+
+ mov DWORD PTR[rsp],r12d
+ xor r14d,eax
+ and r15d,r8d
+
+ ror r13d,5
+ add r12d,r11d
+ xor r15d,r10d
+
+ ror r14d,11
+ xor r13d,r8d
+ add r12d,r15d
+
+ mov r15d,eax
+ add r12d,DWORD PTR[rbp]
+ xor r14d,eax
+
+ xor r15d,ebx
+ ror r13d,6
+ mov r11d,ebx
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor r11d,edi
+ add edx,r12d
+ add r11d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add r11d,r14d
+ mov r12d,DWORD PTR[4+rsi]
+ mov r13d,edx
+ mov r14d,r11d
+ bswap r12d
+ ror r13d,14
+ mov edi,r8d
+
+ xor r13d,edx
+ ror r14d,9
+ xor edi,r9d
+
+ mov DWORD PTR[4+rsp],r12d
+ xor r14d,r11d
+ and edi,edx
+
+ ror r13d,5
+ add r12d,r10d
+ xor edi,r9d
+
+ ror r14d,11
+ xor r13d,edx
+ add r12d,edi
+
+ mov edi,r11d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r11d
+
+ xor edi,eax
+ ror r13d,6
+ mov r10d,eax
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor r10d,r15d
+ add ecx,r12d
+ add r10d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add r10d,r14d
+ mov r12d,DWORD PTR[8+rsi]
+ mov r13d,ecx
+ mov r14d,r10d
+ bswap r12d
+ ror r13d,14
+ mov r15d,edx
+
+ xor r13d,ecx
+ ror r14d,9
+ xor r15d,r8d
+
+ mov DWORD PTR[8+rsp],r12d
+ xor r14d,r10d
+ and r15d,ecx
+
+ ror r13d,5
+ add r12d,r9d
+ xor r15d,r8d
+
+ ror r14d,11
+ xor r13d,ecx
+ add r12d,r15d
+
+ mov r15d,r10d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r10d
+
+ xor r15d,r11d
+ ror r13d,6
+ mov r9d,r11d
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor r9d,edi
+ add ebx,r12d
+ add r9d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add r9d,r14d
+ mov r12d,DWORD PTR[12+rsi]
+ mov r13d,ebx
+ mov r14d,r9d
+ bswap r12d
+ ror r13d,14
+ mov edi,ecx
+
+ xor r13d,ebx
+ ror r14d,9
+ xor edi,edx
+
+ mov DWORD PTR[12+rsp],r12d
+ xor r14d,r9d
+ and edi,ebx
+
+ ror r13d,5
+ add r12d,r8d
+ xor edi,edx
+
+ ror r14d,11
+ xor r13d,ebx
+ add r12d,edi
+
+ mov edi,r9d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r9d
+
+ xor edi,r10d
+ ror r13d,6
+ mov r8d,r10d
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor r8d,r15d
+ add eax,r12d
+ add r8d,r12d
+
+ lea rbp,QWORD PTR[20+rbp]
+ add r8d,r14d
+ mov r12d,DWORD PTR[16+rsi]
+ mov r13d,eax
+ mov r14d,r8d
+ bswap r12d
+ ror r13d,14
+ mov r15d,ebx
+
+ xor r13d,eax
+ ror r14d,9
+ xor r15d,ecx
+
+ mov DWORD PTR[16+rsp],r12d
+ xor r14d,r8d
+ and r15d,eax
+
+ ror r13d,5
+ add r12d,edx
+ xor r15d,ecx
+
+ ror r14d,11
+ xor r13d,eax
+ add r12d,r15d
+
+ mov r15d,r8d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r8d
+
+ xor r15d,r9d
+ ror r13d,6
+ mov edx,r9d
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor edx,edi
+ add r11d,r12d
+ add edx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add edx,r14d
+ mov r12d,DWORD PTR[20+rsi]
+ mov r13d,r11d
+ mov r14d,edx
+ bswap r12d
+ ror r13d,14
+ mov edi,eax
+
+ xor r13d,r11d
+ ror r14d,9
+ xor edi,ebx
+
+ mov DWORD PTR[20+rsp],r12d
+ xor r14d,edx
+ and edi,r11d
+
+ ror r13d,5
+ add r12d,ecx
+ xor edi,ebx
+
+ ror r14d,11
+ xor r13d,r11d
+ add r12d,edi
+
+ mov edi,edx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,edx
+
+ xor edi,r8d
+ ror r13d,6
+ mov ecx,r8d
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor ecx,r15d
+ add r10d,r12d
+ add ecx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add ecx,r14d
+ mov r12d,DWORD PTR[24+rsi]
+ mov r13d,r10d
+ mov r14d,ecx
+ bswap r12d
+ ror r13d,14
+ mov r15d,r11d
+
+ xor r13d,r10d
+ ror r14d,9
+ xor r15d,eax
+
+ mov DWORD PTR[24+rsp],r12d
+ xor r14d,ecx
+ and r15d,r10d
+
+ ror r13d,5
+ add r12d,ebx
+ xor r15d,eax
+
+ ror r14d,11
+ xor r13d,r10d
+ add r12d,r15d
+
+ mov r15d,ecx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,ecx
+
+ xor r15d,edx
+ ror r13d,6
+ mov ebx,edx
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor ebx,edi
+ add r9d,r12d
+ add ebx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add ebx,r14d
+ mov r12d,DWORD PTR[28+rsi]
+ mov r13d,r9d
+ mov r14d,ebx
+ bswap r12d
+ ror r13d,14
+ mov edi,r10d
+
+ xor r13d,r9d
+ ror r14d,9
+ xor edi,r11d
+
+ mov DWORD PTR[28+rsp],r12d
+ xor r14d,ebx
+ and edi,r9d
+
+ ror r13d,5
+ add r12d,eax
+ xor edi,r11d
+
+ ror r14d,11
+ xor r13d,r9d
+ add r12d,edi
+
+ mov edi,ebx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,ebx
+
+ xor edi,ecx
+ ror r13d,6
+ mov eax,ecx
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor eax,r15d
+ add r8d,r12d
+ add eax,r12d
+
+ lea rbp,QWORD PTR[20+rbp]
+ add eax,r14d
+ mov r12d,DWORD PTR[32+rsi]
+ mov r13d,r8d
+ mov r14d,eax
+ bswap r12d
+ ror r13d,14
+ mov r15d,r9d
+
+ xor r13d,r8d
+ ror r14d,9
+ xor r15d,r10d
+
+ mov DWORD PTR[32+rsp],r12d
+ xor r14d,eax
+ and r15d,r8d
+
+ ror r13d,5
+ add r12d,r11d
+ xor r15d,r10d
+
+ ror r14d,11
+ xor r13d,r8d
+ add r12d,r15d
+
+ mov r15d,eax
+ add r12d,DWORD PTR[rbp]
+ xor r14d,eax
+
+ xor r15d,ebx
+ ror r13d,6
+ mov r11d,ebx
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor r11d,edi
+ add edx,r12d
+ add r11d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add r11d,r14d
+ mov r12d,DWORD PTR[36+rsi]
+ mov r13d,edx
+ mov r14d,r11d
+ bswap r12d
+ ror r13d,14
+ mov edi,r8d
+
+ xor r13d,edx
+ ror r14d,9
+ xor edi,r9d
+
+ mov DWORD PTR[36+rsp],r12d
+ xor r14d,r11d
+ and edi,edx
+
+ ror r13d,5
+ add r12d,r10d
+ xor edi,r9d
+
+ ror r14d,11
+ xor r13d,edx
+ add r12d,edi
+
+ mov edi,r11d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r11d
+
+ xor edi,eax
+ ror r13d,6
+ mov r10d,eax
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor r10d,r15d
+ add ecx,r12d
+ add r10d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add r10d,r14d
+ mov r12d,DWORD PTR[40+rsi]
+ mov r13d,ecx
+ mov r14d,r10d
+ bswap r12d
+ ror r13d,14
+ mov r15d,edx
+
+ xor r13d,ecx
+ ror r14d,9
+ xor r15d,r8d
+
+ mov DWORD PTR[40+rsp],r12d
+ xor r14d,r10d
+ and r15d,ecx
+
+ ror r13d,5
+ add r12d,r9d
+ xor r15d,r8d
+
+ ror r14d,11
+ xor r13d,ecx
+ add r12d,r15d
+
+ mov r15d,r10d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r10d
+
+ xor r15d,r11d
+ ror r13d,6
+ mov r9d,r11d
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor r9d,edi
+ add ebx,r12d
+ add r9d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add r9d,r14d
+ mov r12d,DWORD PTR[44+rsi]
+ mov r13d,ebx
+ mov r14d,r9d
+ bswap r12d
+ ror r13d,14
+ mov edi,ecx
+
+ xor r13d,ebx
+ ror r14d,9
+ xor edi,edx
+
+ mov DWORD PTR[44+rsp],r12d
+ xor r14d,r9d
+ and edi,ebx
+
+ ror r13d,5
+ add r12d,r8d
+ xor edi,edx
+
+ ror r14d,11
+ xor r13d,ebx
+ add r12d,edi
+
+ mov edi,r9d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r9d
+
+ xor edi,r10d
+ ror r13d,6
+ mov r8d,r10d
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor r8d,r15d
+ add eax,r12d
+ add r8d,r12d
+
+ lea rbp,QWORD PTR[20+rbp]
+ add r8d,r14d
+ mov r12d,DWORD PTR[48+rsi]
+ mov r13d,eax
+ mov r14d,r8d
+ bswap r12d
+ ror r13d,14
+ mov r15d,ebx
+
+ xor r13d,eax
+ ror r14d,9
+ xor r15d,ecx
+
+ mov DWORD PTR[48+rsp],r12d
+ xor r14d,r8d
+ and r15d,eax
+
+ ror r13d,5
+ add r12d,edx
+ xor r15d,ecx
+
+ ror r14d,11
+ xor r13d,eax
+ add r12d,r15d
+
+ mov r15d,r8d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r8d
+
+ xor r15d,r9d
+ ror r13d,6
+ mov edx,r9d
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor edx,edi
+ add r11d,r12d
+ add edx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add edx,r14d
+ mov r12d,DWORD PTR[52+rsi]
+ mov r13d,r11d
+ mov r14d,edx
+ bswap r12d
+ ror r13d,14
+ mov edi,eax
+
+ xor r13d,r11d
+ ror r14d,9
+ xor edi,ebx
+
+ mov DWORD PTR[52+rsp],r12d
+ xor r14d,edx
+ and edi,r11d
+
+ ror r13d,5
+ add r12d,ecx
+ xor edi,ebx
+
+ ror r14d,11
+ xor r13d,r11d
+ add r12d,edi
+
+ mov edi,edx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,edx
+
+ xor edi,r8d
+ ror r13d,6
+ mov ecx,r8d
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor ecx,r15d
+ add r10d,r12d
+ add ecx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add ecx,r14d
+ mov r12d,DWORD PTR[56+rsi]
+ mov r13d,r10d
+ mov r14d,ecx
+ bswap r12d
+ ror r13d,14
+ mov r15d,r11d
+
+ xor r13d,r10d
+ ror r14d,9
+ xor r15d,eax
+
+ mov DWORD PTR[56+rsp],r12d
+ xor r14d,ecx
+ and r15d,r10d
+
+ ror r13d,5
+ add r12d,ebx
+ xor r15d,eax
+
+ ror r14d,11
+ xor r13d,r10d
+ add r12d,r15d
+
+ mov r15d,ecx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,ecx
+
+ xor r15d,edx
+ ror r13d,6
+ mov ebx,edx
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor ebx,edi
+ add r9d,r12d
+ add ebx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ add ebx,r14d
+ mov r12d,DWORD PTR[60+rsi]
+ mov r13d,r9d
+ mov r14d,ebx
+ bswap r12d
+ ror r13d,14
+ mov edi,r10d
+
+ xor r13d,r9d
+ ror r14d,9
+ xor edi,r11d
+
+ mov DWORD PTR[60+rsp],r12d
+ xor r14d,ebx
+ and edi,r9d
+
+ ror r13d,5
+ add r12d,eax
+ xor edi,r11d
+
+ ror r14d,11
+ xor r13d,r9d
+ add r12d,edi
+
+ mov edi,ebx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,ebx
+
+ xor edi,ecx
+ ror r13d,6
+ mov eax,ecx
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor eax,r15d
+ add r8d,r12d
+ add eax,r12d
+
+ lea rbp,QWORD PTR[20+rbp]
+ jmp $L$rounds_16_xx
+ALIGN 16
+$L$rounds_16_xx::
+ mov r13d,DWORD PTR[4+rsp]
+ mov r15d,DWORD PTR[56+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add eax,r14d
+ mov r14d,r15d
+ ror r15d,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor r15d,r14d
+ shr r14d,10
+
+ ror r15d,17
+ xor r12d,r13d
+ xor r15d,r14d
+ add r12d,DWORD PTR[36+rsp]
+
+ add r12d,DWORD PTR[rsp]
+ mov r13d,r8d
+ add r12d,r15d
+ mov r14d,eax
+ ror r13d,14
+ mov r15d,r9d
+
+ xor r13d,r8d
+ ror r14d,9
+ xor r15d,r10d
+
+ mov DWORD PTR[rsp],r12d
+ xor r14d,eax
+ and r15d,r8d
+
+ ror r13d,5
+ add r12d,r11d
+ xor r15d,r10d
+
+ ror r14d,11
+ xor r13d,r8d
+ add r12d,r15d
+
+ mov r15d,eax
+ add r12d,DWORD PTR[rbp]
+ xor r14d,eax
+
+ xor r15d,ebx
+ ror r13d,6
+ mov r11d,ebx
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor r11d,edi
+ add edx,r12d
+ add r11d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[8+rsp]
+ mov edi,DWORD PTR[60+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add r11d,r14d
+ mov r14d,edi
+ ror edi,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor edi,r14d
+ shr r14d,10
+
+ ror edi,17
+ xor r12d,r13d
+ xor edi,r14d
+ add r12d,DWORD PTR[40+rsp]
+
+ add r12d,DWORD PTR[4+rsp]
+ mov r13d,edx
+ add r12d,edi
+ mov r14d,r11d
+ ror r13d,14
+ mov edi,r8d
+
+ xor r13d,edx
+ ror r14d,9
+ xor edi,r9d
+
+ mov DWORD PTR[4+rsp],r12d
+ xor r14d,r11d
+ and edi,edx
+
+ ror r13d,5
+ add r12d,r10d
+ xor edi,r9d
+
+ ror r14d,11
+ xor r13d,edx
+ add r12d,edi
+
+ mov edi,r11d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r11d
+
+ xor edi,eax
+ ror r13d,6
+ mov r10d,eax
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor r10d,r15d
+ add ecx,r12d
+ add r10d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[12+rsp]
+ mov r15d,DWORD PTR[rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add r10d,r14d
+ mov r14d,r15d
+ ror r15d,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor r15d,r14d
+ shr r14d,10
+
+ ror r15d,17
+ xor r12d,r13d
+ xor r15d,r14d
+ add r12d,DWORD PTR[44+rsp]
+
+ add r12d,DWORD PTR[8+rsp]
+ mov r13d,ecx
+ add r12d,r15d
+ mov r14d,r10d
+ ror r13d,14
+ mov r15d,edx
+
+ xor r13d,ecx
+ ror r14d,9
+ xor r15d,r8d
+
+ mov DWORD PTR[8+rsp],r12d
+ xor r14d,r10d
+ and r15d,ecx
+
+ ror r13d,5
+ add r12d,r9d
+ xor r15d,r8d
+
+ ror r14d,11
+ xor r13d,ecx
+ add r12d,r15d
+
+ mov r15d,r10d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r10d
+
+ xor r15d,r11d
+ ror r13d,6
+ mov r9d,r11d
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor r9d,edi
+ add ebx,r12d
+ add r9d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[16+rsp]
+ mov edi,DWORD PTR[4+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add r9d,r14d
+ mov r14d,edi
+ ror edi,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor edi,r14d
+ shr r14d,10
+
+ ror edi,17
+ xor r12d,r13d
+ xor edi,r14d
+ add r12d,DWORD PTR[48+rsp]
+
+ add r12d,DWORD PTR[12+rsp]
+ mov r13d,ebx
+ add r12d,edi
+ mov r14d,r9d
+ ror r13d,14
+ mov edi,ecx
+
+ xor r13d,ebx
+ ror r14d,9
+ xor edi,edx
+
+ mov DWORD PTR[12+rsp],r12d
+ xor r14d,r9d
+ and edi,ebx
+
+ ror r13d,5
+ add r12d,r8d
+ xor edi,edx
+
+ ror r14d,11
+ xor r13d,ebx
+ add r12d,edi
+
+ mov edi,r9d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r9d
+
+ xor edi,r10d
+ ror r13d,6
+ mov r8d,r10d
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor r8d,r15d
+ add eax,r12d
+ add r8d,r12d
+
+ lea rbp,QWORD PTR[20+rbp]
+ mov r13d,DWORD PTR[20+rsp]
+ mov r15d,DWORD PTR[8+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add r8d,r14d
+ mov r14d,r15d
+ ror r15d,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor r15d,r14d
+ shr r14d,10
+
+ ror r15d,17
+ xor r12d,r13d
+ xor r15d,r14d
+ add r12d,DWORD PTR[52+rsp]
+
+ add r12d,DWORD PTR[16+rsp]
+ mov r13d,eax
+ add r12d,r15d
+ mov r14d,r8d
+ ror r13d,14
+ mov r15d,ebx
+
+ xor r13d,eax
+ ror r14d,9
+ xor r15d,ecx
+
+ mov DWORD PTR[16+rsp],r12d
+ xor r14d,r8d
+ and r15d,eax
+
+ ror r13d,5
+ add r12d,edx
+ xor r15d,ecx
+
+ ror r14d,11
+ xor r13d,eax
+ add r12d,r15d
+
+ mov r15d,r8d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r8d
+
+ xor r15d,r9d
+ ror r13d,6
+ mov edx,r9d
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor edx,edi
+ add r11d,r12d
+ add edx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[24+rsp]
+ mov edi,DWORD PTR[12+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add edx,r14d
+ mov r14d,edi
+ ror edi,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor edi,r14d
+ shr r14d,10
+
+ ror edi,17
+ xor r12d,r13d
+ xor edi,r14d
+ add r12d,DWORD PTR[56+rsp]
+
+ add r12d,DWORD PTR[20+rsp]
+ mov r13d,r11d
+ add r12d,edi
+ mov r14d,edx
+ ror r13d,14
+ mov edi,eax
+
+ xor r13d,r11d
+ ror r14d,9
+ xor edi,ebx
+
+ mov DWORD PTR[20+rsp],r12d
+ xor r14d,edx
+ and edi,r11d
+
+ ror r13d,5
+ add r12d,ecx
+ xor edi,ebx
+
+ ror r14d,11
+ xor r13d,r11d
+ add r12d,edi
+
+ mov edi,edx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,edx
+
+ xor edi,r8d
+ ror r13d,6
+ mov ecx,r8d
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor ecx,r15d
+ add r10d,r12d
+ add ecx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[28+rsp]
+ mov r15d,DWORD PTR[16+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add ecx,r14d
+ mov r14d,r15d
+ ror r15d,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor r15d,r14d
+ shr r14d,10
+
+ ror r15d,17
+ xor r12d,r13d
+ xor r15d,r14d
+ add r12d,DWORD PTR[60+rsp]
+
+ add r12d,DWORD PTR[24+rsp]
+ mov r13d,r10d
+ add r12d,r15d
+ mov r14d,ecx
+ ror r13d,14
+ mov r15d,r11d
+
+ xor r13d,r10d
+ ror r14d,9
+ xor r15d,eax
+
+ mov DWORD PTR[24+rsp],r12d
+ xor r14d,ecx
+ and r15d,r10d
+
+ ror r13d,5
+ add r12d,ebx
+ xor r15d,eax
+
+ ror r14d,11
+ xor r13d,r10d
+ add r12d,r15d
+
+ mov r15d,ecx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,ecx
+
+ xor r15d,edx
+ ror r13d,6
+ mov ebx,edx
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor ebx,edi
+ add r9d,r12d
+ add ebx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[32+rsp]
+ mov edi,DWORD PTR[20+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add ebx,r14d
+ mov r14d,edi
+ ror edi,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor edi,r14d
+ shr r14d,10
+
+ ror edi,17
+ xor r12d,r13d
+ xor edi,r14d
+ add r12d,DWORD PTR[rsp]
+
+ add r12d,DWORD PTR[28+rsp]
+ mov r13d,r9d
+ add r12d,edi
+ mov r14d,ebx
+ ror r13d,14
+ mov edi,r10d
+
+ xor r13d,r9d
+ ror r14d,9
+ xor edi,r11d
+
+ mov DWORD PTR[28+rsp],r12d
+ xor r14d,ebx
+ and edi,r9d
+
+ ror r13d,5
+ add r12d,eax
+ xor edi,r11d
+
+ ror r14d,11
+ xor r13d,r9d
+ add r12d,edi
+
+ mov edi,ebx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,ebx
+
+ xor edi,ecx
+ ror r13d,6
+ mov eax,ecx
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor eax,r15d
+ add r8d,r12d
+ add eax,r12d
+
+ lea rbp,QWORD PTR[20+rbp]
+ mov r13d,DWORD PTR[36+rsp]
+ mov r15d,DWORD PTR[24+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add eax,r14d
+ mov r14d,r15d
+ ror r15d,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor r15d,r14d
+ shr r14d,10
+
+ ror r15d,17
+ xor r12d,r13d
+ xor r15d,r14d
+ add r12d,DWORD PTR[4+rsp]
+
+ add r12d,DWORD PTR[32+rsp]
+ mov r13d,r8d
+ add r12d,r15d
+ mov r14d,eax
+ ror r13d,14
+ mov r15d,r9d
+
+ xor r13d,r8d
+ ror r14d,9
+ xor r15d,r10d
+
+ mov DWORD PTR[32+rsp],r12d
+ xor r14d,eax
+ and r15d,r8d
+
+ ror r13d,5
+ add r12d,r11d
+ xor r15d,r10d
+
+ ror r14d,11
+ xor r13d,r8d
+ add r12d,r15d
+
+ mov r15d,eax
+ add r12d,DWORD PTR[rbp]
+ xor r14d,eax
+
+ xor r15d,ebx
+ ror r13d,6
+ mov r11d,ebx
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor r11d,edi
+ add edx,r12d
+ add r11d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[40+rsp]
+ mov edi,DWORD PTR[28+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add r11d,r14d
+ mov r14d,edi
+ ror edi,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor edi,r14d
+ shr r14d,10
+
+ ror edi,17
+ xor r12d,r13d
+ xor edi,r14d
+ add r12d,DWORD PTR[8+rsp]
+
+ add r12d,DWORD PTR[36+rsp]
+ mov r13d,edx
+ add r12d,edi
+ mov r14d,r11d
+ ror r13d,14
+ mov edi,r8d
+
+ xor r13d,edx
+ ror r14d,9
+ xor edi,r9d
+
+ mov DWORD PTR[36+rsp],r12d
+ xor r14d,r11d
+ and edi,edx
+
+ ror r13d,5
+ add r12d,r10d
+ xor edi,r9d
+
+ ror r14d,11
+ xor r13d,edx
+ add r12d,edi
+
+ mov edi,r11d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r11d
+
+ xor edi,eax
+ ror r13d,6
+ mov r10d,eax
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor r10d,r15d
+ add ecx,r12d
+ add r10d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[44+rsp]
+ mov r15d,DWORD PTR[32+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add r10d,r14d
+ mov r14d,r15d
+ ror r15d,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor r15d,r14d
+ shr r14d,10
+
+ ror r15d,17
+ xor r12d,r13d
+ xor r15d,r14d
+ add r12d,DWORD PTR[12+rsp]
+
+ add r12d,DWORD PTR[40+rsp]
+ mov r13d,ecx
+ add r12d,r15d
+ mov r14d,r10d
+ ror r13d,14
+ mov r15d,edx
+
+ xor r13d,ecx
+ ror r14d,9
+ xor r15d,r8d
+
+ mov DWORD PTR[40+rsp],r12d
+ xor r14d,r10d
+ and r15d,ecx
+
+ ror r13d,5
+ add r12d,r9d
+ xor r15d,r8d
+
+ ror r14d,11
+ xor r13d,ecx
+ add r12d,r15d
+
+ mov r15d,r10d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r10d
+
+ xor r15d,r11d
+ ror r13d,6
+ mov r9d,r11d
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor r9d,edi
+ add ebx,r12d
+ add r9d,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[48+rsp]
+ mov edi,DWORD PTR[36+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add r9d,r14d
+ mov r14d,edi
+ ror edi,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor edi,r14d
+ shr r14d,10
+
+ ror edi,17
+ xor r12d,r13d
+ xor edi,r14d
+ add r12d,DWORD PTR[16+rsp]
+
+ add r12d,DWORD PTR[44+rsp]
+ mov r13d,ebx
+ add r12d,edi
+ mov r14d,r9d
+ ror r13d,14
+ mov edi,ecx
+
+ xor r13d,ebx
+ ror r14d,9
+ xor edi,edx
+
+ mov DWORD PTR[44+rsp],r12d
+ xor r14d,r9d
+ and edi,ebx
+
+ ror r13d,5
+ add r12d,r8d
+ xor edi,edx
+
+ ror r14d,11
+ xor r13d,ebx
+ add r12d,edi
+
+ mov edi,r9d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r9d
+
+ xor edi,r10d
+ ror r13d,6
+ mov r8d,r10d
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor r8d,r15d
+ add eax,r12d
+ add r8d,r12d
+
+ lea rbp,QWORD PTR[20+rbp]
+ mov r13d,DWORD PTR[52+rsp]
+ mov r15d,DWORD PTR[40+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add r8d,r14d
+ mov r14d,r15d
+ ror r15d,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor r15d,r14d
+ shr r14d,10
+
+ ror r15d,17
+ xor r12d,r13d
+ xor r15d,r14d
+ add r12d,DWORD PTR[20+rsp]
+
+ add r12d,DWORD PTR[48+rsp]
+ mov r13d,eax
+ add r12d,r15d
+ mov r14d,r8d
+ ror r13d,14
+ mov r15d,ebx
+
+ xor r13d,eax
+ ror r14d,9
+ xor r15d,ecx
+
+ mov DWORD PTR[48+rsp],r12d
+ xor r14d,r8d
+ and r15d,eax
+
+ ror r13d,5
+ add r12d,edx
+ xor r15d,ecx
+
+ ror r14d,11
+ xor r13d,eax
+ add r12d,r15d
+
+ mov r15d,r8d
+ add r12d,DWORD PTR[rbp]
+ xor r14d,r8d
+
+ xor r15d,r9d
+ ror r13d,6
+ mov edx,r9d
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor edx,edi
+ add r11d,r12d
+ add edx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[56+rsp]
+ mov edi,DWORD PTR[44+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add edx,r14d
+ mov r14d,edi
+ ror edi,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor edi,r14d
+ shr r14d,10
+
+ ror edi,17
+ xor r12d,r13d
+ xor edi,r14d
+ add r12d,DWORD PTR[24+rsp]
+
+ add r12d,DWORD PTR[52+rsp]
+ mov r13d,r11d
+ add r12d,edi
+ mov r14d,edx
+ ror r13d,14
+ mov edi,eax
+
+ xor r13d,r11d
+ ror r14d,9
+ xor edi,ebx
+
+ mov DWORD PTR[52+rsp],r12d
+ xor r14d,edx
+ and edi,r11d
+
+ ror r13d,5
+ add r12d,ecx
+ xor edi,ebx
+
+ ror r14d,11
+ xor r13d,r11d
+ add r12d,edi
+
+ mov edi,edx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,edx
+
+ xor edi,r8d
+ ror r13d,6
+ mov ecx,r8d
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor ecx,r15d
+ add r10d,r12d
+ add ecx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[60+rsp]
+ mov r15d,DWORD PTR[48+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add ecx,r14d
+ mov r14d,r15d
+ ror r15d,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor r15d,r14d
+ shr r14d,10
+
+ ror r15d,17
+ xor r12d,r13d
+ xor r15d,r14d
+ add r12d,DWORD PTR[28+rsp]
+
+ add r12d,DWORD PTR[56+rsp]
+ mov r13d,r10d
+ add r12d,r15d
+ mov r14d,ecx
+ ror r13d,14
+ mov r15d,r11d
+
+ xor r13d,r10d
+ ror r14d,9
+ xor r15d,eax
+
+ mov DWORD PTR[56+rsp],r12d
+ xor r14d,ecx
+ and r15d,r10d
+
+ ror r13d,5
+ add r12d,ebx
+ xor r15d,eax
+
+ ror r14d,11
+ xor r13d,r10d
+ add r12d,r15d
+
+ mov r15d,ecx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,ecx
+
+ xor r15d,edx
+ ror r13d,6
+ mov ebx,edx
+
+ and edi,r15d
+ ror r14d,2
+ add r12d,r13d
+
+ xor ebx,edi
+ add r9d,r12d
+ add ebx,r12d
+
+ lea rbp,QWORD PTR[4+rbp]
+ mov r13d,DWORD PTR[rsp]
+ mov edi,DWORD PTR[52+rsp]
+
+ mov r12d,r13d
+ ror r13d,11
+ add ebx,r14d
+ mov r14d,edi
+ ror edi,2
+
+ xor r13d,r12d
+ shr r12d,3
+ ror r13d,7
+ xor edi,r14d
+ shr r14d,10
+
+ ror edi,17
+ xor r12d,r13d
+ xor edi,r14d
+ add r12d,DWORD PTR[32+rsp]
+
+ add r12d,DWORD PTR[60+rsp]
+ mov r13d,r9d
+ add r12d,edi
+ mov r14d,ebx
+ ror r13d,14
+ mov edi,r10d
+
+ xor r13d,r9d
+ ror r14d,9
+ xor edi,r11d
+
+ mov DWORD PTR[60+rsp],r12d
+ xor r14d,ebx
+ and edi,r9d
+
+ ror r13d,5
+ add r12d,eax
+ xor edi,r11d
+
+ ror r14d,11
+ xor r13d,r9d
+ add r12d,edi
+
+ mov edi,ebx
+ add r12d,DWORD PTR[rbp]
+ xor r14d,ebx
+
+ xor edi,ecx
+ ror r13d,6
+ mov eax,ecx
+
+ and r15d,edi
+ ror r14d,2
+ add r12d,r13d
+
+ xor eax,r15d
+ add r8d,r12d
+ add eax,r12d
+
+ lea rbp,QWORD PTR[20+rbp]
+ cmp BYTE PTR[3+rbp],0
+ jnz $L$rounds_16_xx
+
+ mov rdi,QWORD PTR[((64+0))+rsp]
+ add eax,r14d
+ lea rsi,QWORD PTR[64+rsi]
+
+ add eax,DWORD PTR[rdi]
+ add ebx,DWORD PTR[4+rdi]
+ add ecx,DWORD PTR[8+rdi]
+ add edx,DWORD PTR[12+rdi]
+ add r8d,DWORD PTR[16+rdi]
+ add r9d,DWORD PTR[20+rdi]
+ add r10d,DWORD PTR[24+rdi]
+ add r11d,DWORD PTR[28+rdi]
+
+ cmp rsi,QWORD PTR[((64+16))+rsp]
+
+ mov DWORD PTR[rdi],eax
+ mov DWORD PTR[4+rdi],ebx
+ mov DWORD PTR[8+rdi],ecx
+ mov DWORD PTR[12+rdi],edx
+ mov DWORD PTR[16+rdi],r8d
+ mov DWORD PTR[20+rdi],r9d
+ mov DWORD PTR[24+rdi],r10d
+ mov DWORD PTR[28+rdi],r11d
+ jb $L$loop
+
+ mov rsi,QWORD PTR[88+rsp]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha256_block_data_order::
+sha256_block_data_order ENDP
+ALIGN 64
+
+K256::
+ DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
+ DD 0428a2f98h,071374491h,0b5c0fbcfh,0e9b5dba5h
+ DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
+ DD 03956c25bh,059f111f1h,0923f82a4h,0ab1c5ed5h
+ DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
+ DD 0d807aa98h,012835b01h,0243185beh,0550c7dc3h
+ DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
+ DD 072be5d74h,080deb1feh,09bdc06a7h,0c19bf174h
+ DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
+ DD 0e49b69c1h,0efbe4786h,00fc19dc6h,0240ca1cch
+ DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
+ DD 02de92c6fh,04a7484aah,05cb0a9dch,076f988dah
+ DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
+ DD 0983e5152h,0a831c66dh,0b00327c8h,0bf597fc7h
+ DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
+ DD 0c6e00bf3h,0d5a79147h,006ca6351h,014292967h
+ DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
+ DD 027b70a85h,02e1b2138h,04d2c6dfch,053380d13h
+ DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
+ DD 0650a7354h,0766a0abbh,081c2c92eh,092722c85h
+ DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
+ DD 0a2bfe8a1h,0a81a664bh,0c24b8b70h,0c76c51a3h
+ DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
+ DD 0d192e819h,0d6990624h,0f40e3585h,0106aa070h
+ DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
+ DD 019a4c116h,01e376c08h,02748774ch,034b0bcb5h
+ DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
+ DD 0391c0cb3h,04ed8aa4ah,05b9cca4fh,0682e6ff3h
+ DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
+ DD 0748f82eeh,078a5636fh,084c87814h,08cc70208h
+ DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
+ DD 090befffah,0a4506cebh,0bef9a3f7h,0c67178f2h
+
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+ DD 000010203h,004050607h,008090a0bh,00c0d0e0fh
+ DD 003020100h,00b0a0908h,0ffffffffh,0ffffffffh
+ DD 003020100h,00b0a0908h,0ffffffffh,0ffffffffh
+ DD 0ffffffffh,0ffffffffh,003020100h,00b0a0908h
+ DD 0ffffffffh,0ffffffffh,003020100h,00b0a0908h
+DB 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
+DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54
+DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
+DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
+DB 111,114,103,62,0
+
+ALIGN 64
+sha256_block_data_order_shaext PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha256_block_data_order_shaext::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+_shaext_shortcut::
+
+ lea rsp,QWORD PTR[((-88))+rsp]
+ movaps XMMWORD PTR[(-8-80)+rax],xmm6
+ movaps XMMWORD PTR[(-8-64)+rax],xmm7
+ movaps XMMWORD PTR[(-8-48)+rax],xmm8
+ movaps XMMWORD PTR[(-8-32)+rax],xmm9
+ movaps XMMWORD PTR[(-8-16)+rax],xmm10
+$L$prologue_shaext::
+ lea rcx,QWORD PTR[((K256+128))]
+ movdqu xmm1,XMMWORD PTR[rdi]
+ movdqu xmm2,XMMWORD PTR[16+rdi]
+ movdqa xmm7,XMMWORD PTR[((512-128))+rcx]
+
+ pshufd xmm0,xmm1,01bh
+ pshufd xmm1,xmm1,0b1h
+ pshufd xmm2,xmm2,01bh
+ movdqa xmm8,xmm7
+DB 102,15,58,15,202,8
+ punpcklqdq xmm2,xmm0
+ jmp $L$oop_shaext
+
+ALIGN 16
+$L$oop_shaext::
+ movdqu xmm3,XMMWORD PTR[rsi]
+ movdqu xmm4,XMMWORD PTR[16+rsi]
+ movdqu xmm5,XMMWORD PTR[32+rsi]
+DB 102,15,56,0,223
+ movdqu xmm6,XMMWORD PTR[48+rsi]
+
+ movdqa xmm0,XMMWORD PTR[((0-128))+rcx]
+ paddd xmm0,xmm3
+DB 102,15,56,0,231
+ movdqa xmm10,xmm2
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ nop
+ movdqa xmm9,xmm1
+DB 15,56,203,202
+
+ movdqa xmm0,XMMWORD PTR[((32-128))+rcx]
+ paddd xmm0,xmm4
+DB 102,15,56,0,239
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ lea rsi,QWORD PTR[64+rsi]
+DB 15,56,204,220
+DB 15,56,203,202
+
+ movdqa xmm0,XMMWORD PTR[((64-128))+rcx]
+ paddd xmm0,xmm5
+DB 102,15,56,0,247
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm6
+DB 102,15,58,15,253,4
+ nop
+ paddd xmm3,xmm7
+DB 15,56,204,229
+DB 15,56,203,202
+
+ movdqa xmm0,XMMWORD PTR[((96-128))+rcx]
+ paddd xmm0,xmm6
+DB 15,56,205,222
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm3
+DB 102,15,58,15,254,4
+ nop
+ paddd xmm4,xmm7
+DB 15,56,204,238
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((128-128))+rcx]
+ paddd xmm0,xmm3
+DB 15,56,205,227
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm4
+DB 102,15,58,15,251,4
+ nop
+ paddd xmm5,xmm7
+DB 15,56,204,243
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((160-128))+rcx]
+ paddd xmm0,xmm4
+DB 15,56,205,236
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm5
+DB 102,15,58,15,252,4
+ nop
+ paddd xmm6,xmm7
+DB 15,56,204,220
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((192-128))+rcx]
+ paddd xmm0,xmm5
+DB 15,56,205,245
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm6
+DB 102,15,58,15,253,4
+ nop
+ paddd xmm3,xmm7
+DB 15,56,204,229
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((224-128))+rcx]
+ paddd xmm0,xmm6
+DB 15,56,205,222
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm3
+DB 102,15,58,15,254,4
+ nop
+ paddd xmm4,xmm7
+DB 15,56,204,238
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((256-128))+rcx]
+ paddd xmm0,xmm3
+DB 15,56,205,227
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm4
+DB 102,15,58,15,251,4
+ nop
+ paddd xmm5,xmm7
+DB 15,56,204,243
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((288-128))+rcx]
+ paddd xmm0,xmm4
+DB 15,56,205,236
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm5
+DB 102,15,58,15,252,4
+ nop
+ paddd xmm6,xmm7
+DB 15,56,204,220
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((320-128))+rcx]
+ paddd xmm0,xmm5
+DB 15,56,205,245
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm6
+DB 102,15,58,15,253,4
+ nop
+ paddd xmm3,xmm7
+DB 15,56,204,229
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((352-128))+rcx]
+ paddd xmm0,xmm6
+DB 15,56,205,222
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm3
+DB 102,15,58,15,254,4
+ nop
+ paddd xmm4,xmm7
+DB 15,56,204,238
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((384-128))+rcx]
+ paddd xmm0,xmm3
+DB 15,56,205,227
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm4
+DB 102,15,58,15,251,4
+ nop
+ paddd xmm5,xmm7
+DB 15,56,204,243
+DB 15,56,203,202
+ movdqa xmm0,XMMWORD PTR[((416-128))+rcx]
+ paddd xmm0,xmm4
+DB 15,56,205,236
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ movdqa xmm7,xmm5
+DB 102,15,58,15,252,4
+DB 15,56,203,202
+ paddd xmm6,xmm7
+
+ movdqa xmm0,XMMWORD PTR[((448-128))+rcx]
+ paddd xmm0,xmm5
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+DB 15,56,205,245
+ movdqa xmm7,xmm8
+DB 15,56,203,202
+
+ movdqa xmm0,XMMWORD PTR[((480-128))+rcx]
+ paddd xmm0,xmm6
+ nop
+DB 15,56,203,209
+ pshufd xmm0,xmm0,00eh
+ dec rdx
+ nop
+DB 15,56,203,202
+
+ paddd xmm2,xmm10
+ paddd xmm1,xmm9
+ jnz $L$oop_shaext
+
+ pshufd xmm2,xmm2,0b1h
+ pshufd xmm7,xmm1,01bh
+ pshufd xmm1,xmm1,0b1h
+ punpckhqdq xmm1,xmm2
+DB 102,15,58,15,215,8
+
+ movdqu XMMWORD PTR[rdi],xmm1
+ movdqu XMMWORD PTR[16+rdi],xmm2
+ movaps xmm6,XMMWORD PTR[((-8-80))+rax]
+ movaps xmm7,XMMWORD PTR[((-8-64))+rax]
+ movaps xmm8,XMMWORD PTR[((-8-48))+rax]
+ movaps xmm9,XMMWORD PTR[((-8-32))+rax]
+ movaps xmm10,XMMWORD PTR[((-8-16))+rax]
+ mov rsp,rax
+$L$epilogue_shaext::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha256_block_data_order_shaext::
+sha256_block_data_order_shaext ENDP
+
+ALIGN 64
+sha256_block_data_order_ssse3 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha256_block_data_order_ssse3::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$ssse3_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ shl rdx,4
+ sub rsp,160
+ lea rdx,QWORD PTR[rdx*4+rsi]
+ and rsp,-64
+ mov QWORD PTR[((64+0))+rsp],rdi
+ mov QWORD PTR[((64+8))+rsp],rsi
+ mov QWORD PTR[((64+16))+rsp],rdx
+ mov QWORD PTR[88+rsp],rax
+
+ movaps XMMWORD PTR[(64+32)+rsp],xmm6
+ movaps XMMWORD PTR[(64+48)+rsp],xmm7
+ movaps XMMWORD PTR[(64+64)+rsp],xmm8
+ movaps XMMWORD PTR[(64+80)+rsp],xmm9
+$L$prologue_ssse3::
+
+ mov eax,DWORD PTR[rdi]
+ mov ebx,DWORD PTR[4+rdi]
+ mov ecx,DWORD PTR[8+rdi]
+ mov edx,DWORD PTR[12+rdi]
+ mov r8d,DWORD PTR[16+rdi]
+ mov r9d,DWORD PTR[20+rdi]
+ mov r10d,DWORD PTR[24+rdi]
+ mov r11d,DWORD PTR[28+rdi]
+
+
+ jmp $L$loop_ssse3
+ALIGN 16
+$L$loop_ssse3::
+ movdqa xmm7,XMMWORD PTR[((K256+512))]
+ movdqu xmm0,XMMWORD PTR[rsi]
+ movdqu xmm1,XMMWORD PTR[16+rsi]
+ movdqu xmm2,XMMWORD PTR[32+rsi]
+DB 102,15,56,0,199
+ movdqu xmm3,XMMWORD PTR[48+rsi]
+ lea rbp,QWORD PTR[K256]
+DB 102,15,56,0,207
+ movdqa xmm4,XMMWORD PTR[rbp]
+ movdqa xmm5,XMMWORD PTR[32+rbp]
+DB 102,15,56,0,215
+ paddd xmm4,xmm0
+ movdqa xmm6,XMMWORD PTR[64+rbp]
+DB 102,15,56,0,223
+ movdqa xmm7,XMMWORD PTR[96+rbp]
+ paddd xmm5,xmm1
+ paddd xmm6,xmm2
+ paddd xmm7,xmm3
+ movdqa XMMWORD PTR[rsp],xmm4
+ mov r14d,eax
+ movdqa XMMWORD PTR[16+rsp],xmm5
+ mov edi,ebx
+ movdqa XMMWORD PTR[32+rsp],xmm6
+ xor edi,ecx
+ movdqa XMMWORD PTR[48+rsp],xmm7
+ mov r13d,r8d
+ jmp $L$ssse3_00_47
+
+ALIGN 16
+$L$ssse3_00_47::
+ sub rbp,-128
+ ror r13d,14
+ movdqa xmm4,xmm1
+ mov eax,r14d
+ mov r12d,r9d
+ movdqa xmm7,xmm3
+ ror r14d,9
+ xor r13d,r8d
+ xor r12d,r10d
+ ror r13d,5
+ xor r14d,eax
+DB 102,15,58,15,224,4
+ and r12d,r8d
+ xor r13d,r8d
+DB 102,15,58,15,250,4
+ add r11d,DWORD PTR[rsp]
+ mov r15d,eax
+ xor r12d,r10d
+ ror r14d,11
+ movdqa xmm5,xmm4
+ xor r15d,ebx
+ add r11d,r12d
+ movdqa xmm6,xmm4
+ ror r13d,6
+ and edi,r15d
+ psrld xmm4,3
+ xor r14d,eax
+ add r11d,r13d
+ xor edi,ebx
+ paddd xmm0,xmm7
+ ror r14d,2
+ add edx,r11d
+ psrld xmm6,7
+ add r11d,edi
+ mov r13d,edx
+ pshufd xmm7,xmm3,250
+ add r14d,r11d
+ ror r13d,14
+ pslld xmm5,14
+ mov r11d,r14d
+ mov r12d,r8d
+ pxor xmm4,xmm6
+ ror r14d,9
+ xor r13d,edx
+ xor r12d,r9d
+ ror r13d,5
+ psrld xmm6,11
+ xor r14d,r11d
+ pxor xmm4,xmm5
+ and r12d,edx
+ xor r13d,edx
+ pslld xmm5,11
+ add r10d,DWORD PTR[4+rsp]
+ mov edi,r11d
+ pxor xmm4,xmm6
+ xor r12d,r9d
+ ror r14d,11
+ movdqa xmm6,xmm7
+ xor edi,eax
+ add r10d,r12d
+ pxor xmm4,xmm5
+ ror r13d,6
+ and r15d,edi
+ xor r14d,r11d
+ psrld xmm7,10
+ add r10d,r13d
+ xor r15d,eax
+ paddd xmm0,xmm4
+ ror r14d,2
+ add ecx,r10d
+ psrlq xmm6,17
+ add r10d,r15d
+ mov r13d,ecx
+ add r14d,r10d
+ pxor xmm7,xmm6
+ ror r13d,14
+ mov r10d,r14d
+ mov r12d,edx
+ ror r14d,9
+ psrlq xmm6,2
+ xor r13d,ecx
+ xor r12d,r8d
+ pxor xmm7,xmm6
+ ror r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ pshufd xmm7,xmm7,128
+ xor r13d,ecx
+ add r9d,DWORD PTR[8+rsp]
+ mov r15d,r10d
+ psrldq xmm7,8
+ xor r12d,r8d
+ ror r14d,11
+ xor r15d,r11d
+ add r9d,r12d
+ ror r13d,6
+ paddd xmm0,xmm7
+ and edi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ pshufd xmm7,xmm0,80
+ xor edi,r11d
+ ror r14d,2
+ add ebx,r9d
+ movdqa xmm6,xmm7
+ add r9d,edi
+ mov r13d,ebx
+ psrld xmm7,10
+ add r14d,r9d
+ ror r13d,14
+ psrlq xmm6,17
+ mov r9d,r14d
+ mov r12d,ecx
+ pxor xmm7,xmm6
+ ror r14d,9
+ xor r13d,ebx
+ xor r12d,edx
+ ror r13d,5
+ xor r14d,r9d
+ psrlq xmm6,2
+ and r12d,ebx
+ xor r13d,ebx
+ add r8d,DWORD PTR[12+rsp]
+ pxor xmm7,xmm6
+ mov edi,r9d
+ xor r12d,edx
+ ror r14d,11
+ pshufd xmm7,xmm7,8
+ xor edi,r10d
+ add r8d,r12d
+ movdqa xmm6,XMMWORD PTR[rbp]
+ ror r13d,6
+ and r15d,edi
+ pslldq xmm7,8
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ paddd xmm0,xmm7
+ ror r14d,2
+ add eax,r8d
+ add r8d,r15d
+ paddd xmm6,xmm0
+ mov r13d,eax
+ add r14d,r8d
+ movdqa XMMWORD PTR[rsp],xmm6
+ ror r13d,14
+ movdqa xmm4,xmm2
+ mov r8d,r14d
+ mov r12d,ebx
+ movdqa xmm7,xmm0
+ ror r14d,9
+ xor r13d,eax
+ xor r12d,ecx
+ ror r13d,5
+ xor r14d,r8d
+DB 102,15,58,15,225,4
+ and r12d,eax
+ xor r13d,eax
+DB 102,15,58,15,251,4
+ add edx,DWORD PTR[16+rsp]
+ mov r15d,r8d
+ xor r12d,ecx
+ ror r14d,11
+ movdqa xmm5,xmm4
+ xor r15d,r9d
+ add edx,r12d
+ movdqa xmm6,xmm4
+ ror r13d,6
+ and edi,r15d
+ psrld xmm4,3
+ xor r14d,r8d
+ add edx,r13d
+ xor edi,r9d
+ paddd xmm1,xmm7
+ ror r14d,2
+ add r11d,edx
+ psrld xmm6,7
+ add edx,edi
+ mov r13d,r11d
+ pshufd xmm7,xmm0,250
+ add r14d,edx
+ ror r13d,14
+ pslld xmm5,14
+ mov edx,r14d
+ mov r12d,eax
+ pxor xmm4,xmm6
+ ror r14d,9
+ xor r13d,r11d
+ xor r12d,ebx
+ ror r13d,5
+ psrld xmm6,11
+ xor r14d,edx
+ pxor xmm4,xmm5
+ and r12d,r11d
+ xor r13d,r11d
+ pslld xmm5,11
+ add ecx,DWORD PTR[20+rsp]
+ mov edi,edx
+ pxor xmm4,xmm6
+ xor r12d,ebx
+ ror r14d,11
+ movdqa xmm6,xmm7
+ xor edi,r8d
+ add ecx,r12d
+ pxor xmm4,xmm5
+ ror r13d,6
+ and r15d,edi
+ xor r14d,edx
+ psrld xmm7,10
+ add ecx,r13d
+ xor r15d,r8d
+ paddd xmm1,xmm4
+ ror r14d,2
+ add r10d,ecx
+ psrlq xmm6,17
+ add ecx,r15d
+ mov r13d,r10d
+ add r14d,ecx
+ pxor xmm7,xmm6
+ ror r13d,14
+ mov ecx,r14d
+ mov r12d,r11d
+ ror r14d,9
+ psrlq xmm6,2
+ xor r13d,r10d
+ xor r12d,eax
+ pxor xmm7,xmm6
+ ror r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ pshufd xmm7,xmm7,128
+ xor r13d,r10d
+ add ebx,DWORD PTR[24+rsp]
+ mov r15d,ecx
+ psrldq xmm7,8
+ xor r12d,eax
+ ror r14d,11
+ xor r15d,edx
+ add ebx,r12d
+ ror r13d,6
+ paddd xmm1,xmm7
+ and edi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ pshufd xmm7,xmm1,80
+ xor edi,edx
+ ror r14d,2
+ add r9d,ebx
+ movdqa xmm6,xmm7
+ add ebx,edi
+ mov r13d,r9d
+ psrld xmm7,10
+ add r14d,ebx
+ ror r13d,14
+ psrlq xmm6,17
+ mov ebx,r14d
+ mov r12d,r10d
+ pxor xmm7,xmm6
+ ror r14d,9
+ xor r13d,r9d
+ xor r12d,r11d
+ ror r13d,5
+ xor r14d,ebx
+ psrlq xmm6,2
+ and r12d,r9d
+ xor r13d,r9d
+ add eax,DWORD PTR[28+rsp]
+ pxor xmm7,xmm6
+ mov edi,ebx
+ xor r12d,r11d
+ ror r14d,11
+ pshufd xmm7,xmm7,8
+ xor edi,ecx
+ add eax,r12d
+ movdqa xmm6,XMMWORD PTR[32+rbp]
+ ror r13d,6
+ and r15d,edi
+ pslldq xmm7,8
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ paddd xmm1,xmm7
+ ror r14d,2
+ add r8d,eax
+ add eax,r15d
+ paddd xmm6,xmm1
+ mov r13d,r8d
+ add r14d,eax
+ movdqa XMMWORD PTR[16+rsp],xmm6
+ ror r13d,14
+ movdqa xmm4,xmm3
+ mov eax,r14d
+ mov r12d,r9d
+ movdqa xmm7,xmm1
+ ror r14d,9
+ xor r13d,r8d
+ xor r12d,r10d
+ ror r13d,5
+ xor r14d,eax
+DB 102,15,58,15,226,4
+ and r12d,r8d
+ xor r13d,r8d
+DB 102,15,58,15,248,4
+ add r11d,DWORD PTR[32+rsp]
+ mov r15d,eax
+ xor r12d,r10d
+ ror r14d,11
+ movdqa xmm5,xmm4
+ xor r15d,ebx
+ add r11d,r12d
+ movdqa xmm6,xmm4
+ ror r13d,6
+ and edi,r15d
+ psrld xmm4,3
+ xor r14d,eax
+ add r11d,r13d
+ xor edi,ebx
+ paddd xmm2,xmm7
+ ror r14d,2
+ add edx,r11d
+ psrld xmm6,7
+ add r11d,edi
+ mov r13d,edx
+ pshufd xmm7,xmm1,250
+ add r14d,r11d
+ ror r13d,14
+ pslld xmm5,14
+ mov r11d,r14d
+ mov r12d,r8d
+ pxor xmm4,xmm6
+ ror r14d,9
+ xor r13d,edx
+ xor r12d,r9d
+ ror r13d,5
+ psrld xmm6,11
+ xor r14d,r11d
+ pxor xmm4,xmm5
+ and r12d,edx
+ xor r13d,edx
+ pslld xmm5,11
+ add r10d,DWORD PTR[36+rsp]
+ mov edi,r11d
+ pxor xmm4,xmm6
+ xor r12d,r9d
+ ror r14d,11
+ movdqa xmm6,xmm7
+ xor edi,eax
+ add r10d,r12d
+ pxor xmm4,xmm5
+ ror r13d,6
+ and r15d,edi
+ xor r14d,r11d
+ psrld xmm7,10
+ add r10d,r13d
+ xor r15d,eax
+ paddd xmm2,xmm4
+ ror r14d,2
+ add ecx,r10d
+ psrlq xmm6,17
+ add r10d,r15d
+ mov r13d,ecx
+ add r14d,r10d
+ pxor xmm7,xmm6
+ ror r13d,14
+ mov r10d,r14d
+ mov r12d,edx
+ ror r14d,9
+ psrlq xmm6,2
+ xor r13d,ecx
+ xor r12d,r8d
+ pxor xmm7,xmm6
+ ror r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ pshufd xmm7,xmm7,128
+ xor r13d,ecx
+ add r9d,DWORD PTR[40+rsp]
+ mov r15d,r10d
+ psrldq xmm7,8
+ xor r12d,r8d
+ ror r14d,11
+ xor r15d,r11d
+ add r9d,r12d
+ ror r13d,6
+ paddd xmm2,xmm7
+ and edi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ pshufd xmm7,xmm2,80
+ xor edi,r11d
+ ror r14d,2
+ add ebx,r9d
+ movdqa xmm6,xmm7
+ add r9d,edi
+ mov r13d,ebx
+ psrld xmm7,10
+ add r14d,r9d
+ ror r13d,14
+ psrlq xmm6,17
+ mov r9d,r14d
+ mov r12d,ecx
+ pxor xmm7,xmm6
+ ror r14d,9
+ xor r13d,ebx
+ xor r12d,edx
+ ror r13d,5
+ xor r14d,r9d
+ psrlq xmm6,2
+ and r12d,ebx
+ xor r13d,ebx
+ add r8d,DWORD PTR[44+rsp]
+ pxor xmm7,xmm6
+ mov edi,r9d
+ xor r12d,edx
+ ror r14d,11
+ pshufd xmm7,xmm7,8
+ xor edi,r10d
+ add r8d,r12d
+ movdqa xmm6,XMMWORD PTR[64+rbp]
+ ror r13d,6
+ and r15d,edi
+ pslldq xmm7,8
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ paddd xmm2,xmm7
+ ror r14d,2
+ add eax,r8d
+ add r8d,r15d
+ paddd xmm6,xmm2
+ mov r13d,eax
+ add r14d,r8d
+ movdqa XMMWORD PTR[32+rsp],xmm6
+ ror r13d,14
+ movdqa xmm4,xmm0
+ mov r8d,r14d
+ mov r12d,ebx
+ movdqa xmm7,xmm2
+ ror r14d,9
+ xor r13d,eax
+ xor r12d,ecx
+ ror r13d,5
+ xor r14d,r8d
+DB 102,15,58,15,227,4
+ and r12d,eax
+ xor r13d,eax
+DB 102,15,58,15,249,4
+ add edx,DWORD PTR[48+rsp]
+ mov r15d,r8d
+ xor r12d,ecx
+ ror r14d,11
+ movdqa xmm5,xmm4
+ xor r15d,r9d
+ add edx,r12d
+ movdqa xmm6,xmm4
+ ror r13d,6
+ and edi,r15d
+ psrld xmm4,3
+ xor r14d,r8d
+ add edx,r13d
+ xor edi,r9d
+ paddd xmm3,xmm7
+ ror r14d,2
+ add r11d,edx
+ psrld xmm6,7
+ add edx,edi
+ mov r13d,r11d
+ pshufd xmm7,xmm2,250
+ add r14d,edx
+ ror r13d,14
+ pslld xmm5,14
+ mov edx,r14d
+ mov r12d,eax
+ pxor xmm4,xmm6
+ ror r14d,9
+ xor r13d,r11d
+ xor r12d,ebx
+ ror r13d,5
+ psrld xmm6,11
+ xor r14d,edx
+ pxor xmm4,xmm5
+ and r12d,r11d
+ xor r13d,r11d
+ pslld xmm5,11
+ add ecx,DWORD PTR[52+rsp]
+ mov edi,edx
+ pxor xmm4,xmm6
+ xor r12d,ebx
+ ror r14d,11
+ movdqa xmm6,xmm7
+ xor edi,r8d
+ add ecx,r12d
+ pxor xmm4,xmm5
+ ror r13d,6
+ and r15d,edi
+ xor r14d,edx
+ psrld xmm7,10
+ add ecx,r13d
+ xor r15d,r8d
+ paddd xmm3,xmm4
+ ror r14d,2
+ add r10d,ecx
+ psrlq xmm6,17
+ add ecx,r15d
+ mov r13d,r10d
+ add r14d,ecx
+ pxor xmm7,xmm6
+ ror r13d,14
+ mov ecx,r14d
+ mov r12d,r11d
+ ror r14d,9
+ psrlq xmm6,2
+ xor r13d,r10d
+ xor r12d,eax
+ pxor xmm7,xmm6
+ ror r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ pshufd xmm7,xmm7,128
+ xor r13d,r10d
+ add ebx,DWORD PTR[56+rsp]
+ mov r15d,ecx
+ psrldq xmm7,8
+ xor r12d,eax
+ ror r14d,11
+ xor r15d,edx
+ add ebx,r12d
+ ror r13d,6
+ paddd xmm3,xmm7
+ and edi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ pshufd xmm7,xmm3,80
+ xor edi,edx
+ ror r14d,2
+ add r9d,ebx
+ movdqa xmm6,xmm7
+ add ebx,edi
+ mov r13d,r9d
+ psrld xmm7,10
+ add r14d,ebx
+ ror r13d,14
+ psrlq xmm6,17
+ mov ebx,r14d
+ mov r12d,r10d
+ pxor xmm7,xmm6
+ ror r14d,9
+ xor r13d,r9d
+ xor r12d,r11d
+ ror r13d,5
+ xor r14d,ebx
+ psrlq xmm6,2
+ and r12d,r9d
+ xor r13d,r9d
+ add eax,DWORD PTR[60+rsp]
+ pxor xmm7,xmm6
+ mov edi,ebx
+ xor r12d,r11d
+ ror r14d,11
+ pshufd xmm7,xmm7,8
+ xor edi,ecx
+ add eax,r12d
+ movdqa xmm6,XMMWORD PTR[96+rbp]
+ ror r13d,6
+ and r15d,edi
+ pslldq xmm7,8
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ paddd xmm3,xmm7
+ ror r14d,2
+ add r8d,eax
+ add eax,r15d
+ paddd xmm6,xmm3
+ mov r13d,r8d
+ add r14d,eax
+ movdqa XMMWORD PTR[48+rsp],xmm6
+ cmp BYTE PTR[131+rbp],0
+ jne $L$ssse3_00_47
+ ror r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ ror r14d,9
+ xor r13d,r8d
+ xor r12d,r10d
+ ror r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ xor r13d,r8d
+ add r11d,DWORD PTR[rsp]
+ mov r15d,eax
+ xor r12d,r10d
+ ror r14d,11
+ xor r15d,ebx
+ add r11d,r12d
+ ror r13d,6
+ and edi,r15d
+ xor r14d,eax
+ add r11d,r13d
+ xor edi,ebx
+ ror r14d,2
+ add edx,r11d
+ add r11d,edi
+ mov r13d,edx
+ add r14d,r11d
+ ror r13d,14
+ mov r11d,r14d
+ mov r12d,r8d
+ ror r14d,9
+ xor r13d,edx
+ xor r12d,r9d
+ ror r13d,5
+ xor r14d,r11d
+ and r12d,edx
+ xor r13d,edx
+ add r10d,DWORD PTR[4+rsp]
+ mov edi,r11d
+ xor r12d,r9d
+ ror r14d,11
+ xor edi,eax
+ add r10d,r12d
+ ror r13d,6
+ and r15d,edi
+ xor r14d,r11d
+ add r10d,r13d
+ xor r15d,eax
+ ror r14d,2
+ add ecx,r10d
+ add r10d,r15d
+ mov r13d,ecx
+ add r14d,r10d
+ ror r13d,14
+ mov r10d,r14d
+ mov r12d,edx
+ ror r14d,9
+ xor r13d,ecx
+ xor r12d,r8d
+ ror r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ xor r13d,ecx
+ add r9d,DWORD PTR[8+rsp]
+ mov r15d,r10d
+ xor r12d,r8d
+ ror r14d,11
+ xor r15d,r11d
+ add r9d,r12d
+ ror r13d,6
+ and edi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ xor edi,r11d
+ ror r14d,2
+ add ebx,r9d
+ add r9d,edi
+ mov r13d,ebx
+ add r14d,r9d
+ ror r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ ror r14d,9
+ xor r13d,ebx
+ xor r12d,edx
+ ror r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ xor r13d,ebx
+ add r8d,DWORD PTR[12+rsp]
+ mov edi,r9d
+ xor r12d,edx
+ ror r14d,11
+ xor edi,r10d
+ add r8d,r12d
+ ror r13d,6
+ and r15d,edi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ ror r14d,2
+ add eax,r8d
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ ror r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ ror r14d,9
+ xor r13d,eax
+ xor r12d,ecx
+ ror r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ xor r13d,eax
+ add edx,DWORD PTR[16+rsp]
+ mov r15d,r8d
+ xor r12d,ecx
+ ror r14d,11
+ xor r15d,r9d
+ add edx,r12d
+ ror r13d,6
+ and edi,r15d
+ xor r14d,r8d
+ add edx,r13d
+ xor edi,r9d
+ ror r14d,2
+ add r11d,edx
+ add edx,edi
+ mov r13d,r11d
+ add r14d,edx
+ ror r13d,14
+ mov edx,r14d
+ mov r12d,eax
+ ror r14d,9
+ xor r13d,r11d
+ xor r12d,ebx
+ ror r13d,5
+ xor r14d,edx
+ and r12d,r11d
+ xor r13d,r11d
+ add ecx,DWORD PTR[20+rsp]
+ mov edi,edx
+ xor r12d,ebx
+ ror r14d,11
+ xor edi,r8d
+ add ecx,r12d
+ ror r13d,6
+ and r15d,edi
+ xor r14d,edx
+ add ecx,r13d
+ xor r15d,r8d
+ ror r14d,2
+ add r10d,ecx
+ add ecx,r15d
+ mov r13d,r10d
+ add r14d,ecx
+ ror r13d,14
+ mov ecx,r14d
+ mov r12d,r11d
+ ror r14d,9
+ xor r13d,r10d
+ xor r12d,eax
+ ror r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ xor r13d,r10d
+ add ebx,DWORD PTR[24+rsp]
+ mov r15d,ecx
+ xor r12d,eax
+ ror r14d,11
+ xor r15d,edx
+ add ebx,r12d
+ ror r13d,6
+ and edi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ xor edi,edx
+ ror r14d,2
+ add r9d,ebx
+ add ebx,edi
+ mov r13d,r9d
+ add r14d,ebx
+ ror r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ ror r14d,9
+ xor r13d,r9d
+ xor r12d,r11d
+ ror r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ xor r13d,r9d
+ add eax,DWORD PTR[28+rsp]
+ mov edi,ebx
+ xor r12d,r11d
+ ror r14d,11
+ xor edi,ecx
+ add eax,r12d
+ ror r13d,6
+ and r15d,edi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ ror r14d,2
+ add r8d,eax
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ ror r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ ror r14d,9
+ xor r13d,r8d
+ xor r12d,r10d
+ ror r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ xor r13d,r8d
+ add r11d,DWORD PTR[32+rsp]
+ mov r15d,eax
+ xor r12d,r10d
+ ror r14d,11
+ xor r15d,ebx
+ add r11d,r12d
+ ror r13d,6
+ and edi,r15d
+ xor r14d,eax
+ add r11d,r13d
+ xor edi,ebx
+ ror r14d,2
+ add edx,r11d
+ add r11d,edi
+ mov r13d,edx
+ add r14d,r11d
+ ror r13d,14
+ mov r11d,r14d
+ mov r12d,r8d
+ ror r14d,9
+ xor r13d,edx
+ xor r12d,r9d
+ ror r13d,5
+ xor r14d,r11d
+ and r12d,edx
+ xor r13d,edx
+ add r10d,DWORD PTR[36+rsp]
+ mov edi,r11d
+ xor r12d,r9d
+ ror r14d,11
+ xor edi,eax
+ add r10d,r12d
+ ror r13d,6
+ and r15d,edi
+ xor r14d,r11d
+ add r10d,r13d
+ xor r15d,eax
+ ror r14d,2
+ add ecx,r10d
+ add r10d,r15d
+ mov r13d,ecx
+ add r14d,r10d
+ ror r13d,14
+ mov r10d,r14d
+ mov r12d,edx
+ ror r14d,9
+ xor r13d,ecx
+ xor r12d,r8d
+ ror r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ xor r13d,ecx
+ add r9d,DWORD PTR[40+rsp]
+ mov r15d,r10d
+ xor r12d,r8d
+ ror r14d,11
+ xor r15d,r11d
+ add r9d,r12d
+ ror r13d,6
+ and edi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ xor edi,r11d
+ ror r14d,2
+ add ebx,r9d
+ add r9d,edi
+ mov r13d,ebx
+ add r14d,r9d
+ ror r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ ror r14d,9
+ xor r13d,ebx
+ xor r12d,edx
+ ror r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ xor r13d,ebx
+ add r8d,DWORD PTR[44+rsp]
+ mov edi,r9d
+ xor r12d,edx
+ ror r14d,11
+ xor edi,r10d
+ add r8d,r12d
+ ror r13d,6
+ and r15d,edi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ ror r14d,2
+ add eax,r8d
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ ror r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ ror r14d,9
+ xor r13d,eax
+ xor r12d,ecx
+ ror r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ xor r13d,eax
+ add edx,DWORD PTR[48+rsp]
+ mov r15d,r8d
+ xor r12d,ecx
+ ror r14d,11
+ xor r15d,r9d
+ add edx,r12d
+ ror r13d,6
+ and edi,r15d
+ xor r14d,r8d
+ add edx,r13d
+ xor edi,r9d
+ ror r14d,2
+ add r11d,edx
+ add edx,edi
+ mov r13d,r11d
+ add r14d,edx
+ ror r13d,14
+ mov edx,r14d
+ mov r12d,eax
+ ror r14d,9
+ xor r13d,r11d
+ xor r12d,ebx
+ ror r13d,5
+ xor r14d,edx
+ and r12d,r11d
+ xor r13d,r11d
+ add ecx,DWORD PTR[52+rsp]
+ mov edi,edx
+ xor r12d,ebx
+ ror r14d,11
+ xor edi,r8d
+ add ecx,r12d
+ ror r13d,6
+ and r15d,edi
+ xor r14d,edx
+ add ecx,r13d
+ xor r15d,r8d
+ ror r14d,2
+ add r10d,ecx
+ add ecx,r15d
+ mov r13d,r10d
+ add r14d,ecx
+ ror r13d,14
+ mov ecx,r14d
+ mov r12d,r11d
+ ror r14d,9
+ xor r13d,r10d
+ xor r12d,eax
+ ror r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ xor r13d,r10d
+ add ebx,DWORD PTR[56+rsp]
+ mov r15d,ecx
+ xor r12d,eax
+ ror r14d,11
+ xor r15d,edx
+ add ebx,r12d
+ ror r13d,6
+ and edi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ xor edi,edx
+ ror r14d,2
+ add r9d,ebx
+ add ebx,edi
+ mov r13d,r9d
+ add r14d,ebx
+ ror r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ ror r14d,9
+ xor r13d,r9d
+ xor r12d,r11d
+ ror r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ xor r13d,r9d
+ add eax,DWORD PTR[60+rsp]
+ mov edi,ebx
+ xor r12d,r11d
+ ror r14d,11
+ xor edi,ecx
+ add eax,r12d
+ ror r13d,6
+ and r15d,edi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ ror r14d,2
+ add r8d,eax
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ mov rdi,QWORD PTR[((64+0))+rsp]
+ mov eax,r14d
+
+ add eax,DWORD PTR[rdi]
+ lea rsi,QWORD PTR[64+rsi]
+ add ebx,DWORD PTR[4+rdi]
+ add ecx,DWORD PTR[8+rdi]
+ add edx,DWORD PTR[12+rdi]
+ add r8d,DWORD PTR[16+rdi]
+ add r9d,DWORD PTR[20+rdi]
+ add r10d,DWORD PTR[24+rdi]
+ add r11d,DWORD PTR[28+rdi]
+
+ cmp rsi,QWORD PTR[((64+16))+rsp]
+
+ mov DWORD PTR[rdi],eax
+ mov DWORD PTR[4+rdi],ebx
+ mov DWORD PTR[8+rdi],ecx
+ mov DWORD PTR[12+rdi],edx
+ mov DWORD PTR[16+rdi],r8d
+ mov DWORD PTR[20+rdi],r9d
+ mov DWORD PTR[24+rdi],r10d
+ mov DWORD PTR[28+rdi],r11d
+ jb $L$loop_ssse3
+
+ mov rsi,QWORD PTR[88+rsp]
+
+ movaps xmm6,XMMWORD PTR[((64+32))+rsp]
+ movaps xmm7,XMMWORD PTR[((64+48))+rsp]
+ movaps xmm8,XMMWORD PTR[((64+64))+rsp]
+ movaps xmm9,XMMWORD PTR[((64+80))+rsp]
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue_ssse3::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha256_block_data_order_ssse3::
+sha256_block_data_order_ssse3 ENDP
+
+ALIGN 64
+sha256_block_data_order_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha256_block_data_order_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$avx_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ shl rdx,4
+ sub rsp,160
+ lea rdx,QWORD PTR[rdx*4+rsi]
+ and rsp,-64
+ mov QWORD PTR[((64+0))+rsp],rdi
+ mov QWORD PTR[((64+8))+rsp],rsi
+ mov QWORD PTR[((64+16))+rsp],rdx
+ mov QWORD PTR[88+rsp],rax
+
+ movaps XMMWORD PTR[(64+32)+rsp],xmm6
+ movaps XMMWORD PTR[(64+48)+rsp],xmm7
+ movaps XMMWORD PTR[(64+64)+rsp],xmm8
+ movaps XMMWORD PTR[(64+80)+rsp],xmm9
+$L$prologue_avx::
+
+ vzeroupper
+ mov eax,DWORD PTR[rdi]
+ mov ebx,DWORD PTR[4+rdi]
+ mov ecx,DWORD PTR[8+rdi]
+ mov edx,DWORD PTR[12+rdi]
+ mov r8d,DWORD PTR[16+rdi]
+ mov r9d,DWORD PTR[20+rdi]
+ mov r10d,DWORD PTR[24+rdi]
+ mov r11d,DWORD PTR[28+rdi]
+ vmovdqa xmm8,XMMWORD PTR[((K256+512+32))]
+ vmovdqa xmm9,XMMWORD PTR[((K256+512+64))]
+ jmp $L$loop_avx
+ALIGN 16
+$L$loop_avx::
+ vmovdqa xmm7,XMMWORD PTR[((K256+512))]
+ vmovdqu xmm0,XMMWORD PTR[rsi]
+ vmovdqu xmm1,XMMWORD PTR[16+rsi]
+ vmovdqu xmm2,XMMWORD PTR[32+rsi]
+ vmovdqu xmm3,XMMWORD PTR[48+rsi]
+ vpshufb xmm0,xmm0,xmm7
+ lea rbp,QWORD PTR[K256]
+ vpshufb xmm1,xmm1,xmm7
+ vpshufb xmm2,xmm2,xmm7
+ vpaddd xmm4,xmm0,XMMWORD PTR[rbp]
+ vpshufb xmm3,xmm3,xmm7
+ vpaddd xmm5,xmm1,XMMWORD PTR[32+rbp]
+ vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
+ vpaddd xmm7,xmm3,XMMWORD PTR[96+rbp]
+ vmovdqa XMMWORD PTR[rsp],xmm4
+ mov r14d,eax
+ vmovdqa XMMWORD PTR[16+rsp],xmm5
+ mov edi,ebx
+ vmovdqa XMMWORD PTR[32+rsp],xmm6
+ xor edi,ecx
+ vmovdqa XMMWORD PTR[48+rsp],xmm7
+ mov r13d,r8d
+ jmp $L$avx_00_47
+
+ALIGN 16
+$L$avx_00_47::
+ sub rbp,-128
+ vpalignr xmm4,xmm1,xmm0,4
+ shrd r13d,r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ vpalignr xmm7,xmm3,xmm2,4
+ shrd r14d,r14d,9
+ xor r13d,r8d
+ xor r12d,r10d
+ vpsrld xmm6,xmm4,7
+ shrd r13d,r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ vpaddd xmm0,xmm0,xmm7
+ xor r13d,r8d
+ add r11d,DWORD PTR[rsp]
+ mov r15d,eax
+ vpsrld xmm7,xmm4,3
+ xor r12d,r10d
+ shrd r14d,r14d,11
+ xor r15d,ebx
+ vpslld xmm5,xmm4,14
+ add r11d,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ vpxor xmm4,xmm7,xmm6
+ xor r14d,eax
+ add r11d,r13d
+ xor edi,ebx
+ vpshufd xmm7,xmm3,250
+ shrd r14d,r14d,2
+ add edx,r11d
+ add r11d,edi
+ vpsrld xmm6,xmm6,11
+ mov r13d,edx
+ add r14d,r11d
+ shrd r13d,r13d,14
+ vpxor xmm4,xmm4,xmm5
+ mov r11d,r14d
+ mov r12d,r8d
+ shrd r14d,r14d,9
+ vpslld xmm5,xmm5,11
+ xor r13d,edx
+ xor r12d,r9d
+ shrd r13d,r13d,5
+ vpxor xmm4,xmm4,xmm6
+ xor r14d,r11d
+ and r12d,edx
+ xor r13d,edx
+ vpsrld xmm6,xmm7,10
+ add r10d,DWORD PTR[4+rsp]
+ mov edi,r11d
+ xor r12d,r9d
+ vpxor xmm4,xmm4,xmm5
+ shrd r14d,r14d,11
+ xor edi,eax
+ add r10d,r12d
+ vpsrlq xmm7,xmm7,17
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,r11d
+ vpaddd xmm0,xmm0,xmm4
+ add r10d,r13d
+ xor r15d,eax
+ shrd r14d,r14d,2
+ vpxor xmm6,xmm6,xmm7
+ add ecx,r10d
+ add r10d,r15d
+ mov r13d,ecx
+ vpsrlq xmm7,xmm7,2
+ add r14d,r10d
+ shrd r13d,r13d,14
+ mov r10d,r14d
+ vpxor xmm6,xmm6,xmm7
+ mov r12d,edx
+ shrd r14d,r14d,9
+ xor r13d,ecx
+ vpshufb xmm6,xmm6,xmm8
+ xor r12d,r8d
+ shrd r13d,r13d,5
+ xor r14d,r10d
+ vpaddd xmm0,xmm0,xmm6
+ and r12d,ecx
+ xor r13d,ecx
+ add r9d,DWORD PTR[8+rsp]
+ vpshufd xmm7,xmm0,80
+ mov r15d,r10d
+ xor r12d,r8d
+ shrd r14d,r14d,11
+ vpsrld xmm6,xmm7,10
+ xor r15d,r11d
+ add r9d,r12d
+ shrd r13d,r13d,6
+ vpsrlq xmm7,xmm7,17
+ and edi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ vpxor xmm6,xmm6,xmm7
+ xor edi,r11d
+ shrd r14d,r14d,2
+ add ebx,r9d
+ vpsrlq xmm7,xmm7,2
+ add r9d,edi
+ mov r13d,ebx
+ add r14d,r9d
+ vpxor xmm6,xmm6,xmm7
+ shrd r13d,r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ vpshufb xmm6,xmm6,xmm9
+ shrd r14d,r14d,9
+ xor r13d,ebx
+ xor r12d,edx
+ vpaddd xmm0,xmm0,xmm6
+ shrd r13d,r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ vpaddd xmm6,xmm0,XMMWORD PTR[rbp]
+ xor r13d,ebx
+ add r8d,DWORD PTR[12+rsp]
+ mov edi,r9d
+ xor r12d,edx
+ shrd r14d,r14d,11
+ xor edi,r10d
+ add r8d,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ shrd r14d,r14d,2
+ add eax,r8d
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ vmovdqa XMMWORD PTR[rsp],xmm6
+ vpalignr xmm4,xmm2,xmm1,4
+ shrd r13d,r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ vpalignr xmm7,xmm0,xmm3,4
+ shrd r14d,r14d,9
+ xor r13d,eax
+ xor r12d,ecx
+ vpsrld xmm6,xmm4,7
+ shrd r13d,r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ vpaddd xmm1,xmm1,xmm7
+ xor r13d,eax
+ add edx,DWORD PTR[16+rsp]
+ mov r15d,r8d
+ vpsrld xmm7,xmm4,3
+ xor r12d,ecx
+ shrd r14d,r14d,11
+ xor r15d,r9d
+ vpslld xmm5,xmm4,14
+ add edx,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ vpxor xmm4,xmm7,xmm6
+ xor r14d,r8d
+ add edx,r13d
+ xor edi,r9d
+ vpshufd xmm7,xmm0,250
+ shrd r14d,r14d,2
+ add r11d,edx
+ add edx,edi
+ vpsrld xmm6,xmm6,11
+ mov r13d,r11d
+ add r14d,edx
+ shrd r13d,r13d,14
+ vpxor xmm4,xmm4,xmm5
+ mov edx,r14d
+ mov r12d,eax
+ shrd r14d,r14d,9
+ vpslld xmm5,xmm5,11
+ xor r13d,r11d
+ xor r12d,ebx
+ shrd r13d,r13d,5
+ vpxor xmm4,xmm4,xmm6
+ xor r14d,edx
+ and r12d,r11d
+ xor r13d,r11d
+ vpsrld xmm6,xmm7,10
+ add ecx,DWORD PTR[20+rsp]
+ mov edi,edx
+ xor r12d,ebx
+ vpxor xmm4,xmm4,xmm5
+ shrd r14d,r14d,11
+ xor edi,r8d
+ add ecx,r12d
+ vpsrlq xmm7,xmm7,17
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,edx
+ vpaddd xmm1,xmm1,xmm4
+ add ecx,r13d
+ xor r15d,r8d
+ shrd r14d,r14d,2
+ vpxor xmm6,xmm6,xmm7
+ add r10d,ecx
+ add ecx,r15d
+ mov r13d,r10d
+ vpsrlq xmm7,xmm7,2
+ add r14d,ecx
+ shrd r13d,r13d,14
+ mov ecx,r14d
+ vpxor xmm6,xmm6,xmm7
+ mov r12d,r11d
+ shrd r14d,r14d,9
+ xor r13d,r10d
+ vpshufb xmm6,xmm6,xmm8
+ xor r12d,eax
+ shrd r13d,r13d,5
+ xor r14d,ecx
+ vpaddd xmm1,xmm1,xmm6
+ and r12d,r10d
+ xor r13d,r10d
+ add ebx,DWORD PTR[24+rsp]
+ vpshufd xmm7,xmm1,80
+ mov r15d,ecx
+ xor r12d,eax
+ shrd r14d,r14d,11
+ vpsrld xmm6,xmm7,10
+ xor r15d,edx
+ add ebx,r12d
+ shrd r13d,r13d,6
+ vpsrlq xmm7,xmm7,17
+ and edi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ vpxor xmm6,xmm6,xmm7
+ xor edi,edx
+ shrd r14d,r14d,2
+ add r9d,ebx
+ vpsrlq xmm7,xmm7,2
+ add ebx,edi
+ mov r13d,r9d
+ add r14d,ebx
+ vpxor xmm6,xmm6,xmm7
+ shrd r13d,r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ vpshufb xmm6,xmm6,xmm9
+ shrd r14d,r14d,9
+ xor r13d,r9d
+ xor r12d,r11d
+ vpaddd xmm1,xmm1,xmm6
+ shrd r13d,r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ vpaddd xmm6,xmm1,XMMWORD PTR[32+rbp]
+ xor r13d,r9d
+ add eax,DWORD PTR[28+rsp]
+ mov edi,ebx
+ xor r12d,r11d
+ shrd r14d,r14d,11
+ xor edi,ecx
+ add eax,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ shrd r14d,r14d,2
+ add r8d,eax
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ vmovdqa XMMWORD PTR[16+rsp],xmm6
+ vpalignr xmm4,xmm3,xmm2,4
+ shrd r13d,r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ vpalignr xmm7,xmm1,xmm0,4
+ shrd r14d,r14d,9
+ xor r13d,r8d
+ xor r12d,r10d
+ vpsrld xmm6,xmm4,7
+ shrd r13d,r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ vpaddd xmm2,xmm2,xmm7
+ xor r13d,r8d
+ add r11d,DWORD PTR[32+rsp]
+ mov r15d,eax
+ vpsrld xmm7,xmm4,3
+ xor r12d,r10d
+ shrd r14d,r14d,11
+ xor r15d,ebx
+ vpslld xmm5,xmm4,14
+ add r11d,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ vpxor xmm4,xmm7,xmm6
+ xor r14d,eax
+ add r11d,r13d
+ xor edi,ebx
+ vpshufd xmm7,xmm1,250
+ shrd r14d,r14d,2
+ add edx,r11d
+ add r11d,edi
+ vpsrld xmm6,xmm6,11
+ mov r13d,edx
+ add r14d,r11d
+ shrd r13d,r13d,14
+ vpxor xmm4,xmm4,xmm5
+ mov r11d,r14d
+ mov r12d,r8d
+ shrd r14d,r14d,9
+ vpslld xmm5,xmm5,11
+ xor r13d,edx
+ xor r12d,r9d
+ shrd r13d,r13d,5
+ vpxor xmm4,xmm4,xmm6
+ xor r14d,r11d
+ and r12d,edx
+ xor r13d,edx
+ vpsrld xmm6,xmm7,10
+ add r10d,DWORD PTR[36+rsp]
+ mov edi,r11d
+ xor r12d,r9d
+ vpxor xmm4,xmm4,xmm5
+ shrd r14d,r14d,11
+ xor edi,eax
+ add r10d,r12d
+ vpsrlq xmm7,xmm7,17
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,r11d
+ vpaddd xmm2,xmm2,xmm4
+ add r10d,r13d
+ xor r15d,eax
+ shrd r14d,r14d,2
+ vpxor xmm6,xmm6,xmm7
+ add ecx,r10d
+ add r10d,r15d
+ mov r13d,ecx
+ vpsrlq xmm7,xmm7,2
+ add r14d,r10d
+ shrd r13d,r13d,14
+ mov r10d,r14d
+ vpxor xmm6,xmm6,xmm7
+ mov r12d,edx
+ shrd r14d,r14d,9
+ xor r13d,ecx
+ vpshufb xmm6,xmm6,xmm8
+ xor r12d,r8d
+ shrd r13d,r13d,5
+ xor r14d,r10d
+ vpaddd xmm2,xmm2,xmm6
+ and r12d,ecx
+ xor r13d,ecx
+ add r9d,DWORD PTR[40+rsp]
+ vpshufd xmm7,xmm2,80
+ mov r15d,r10d
+ xor r12d,r8d
+ shrd r14d,r14d,11
+ vpsrld xmm6,xmm7,10
+ xor r15d,r11d
+ add r9d,r12d
+ shrd r13d,r13d,6
+ vpsrlq xmm7,xmm7,17
+ and edi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ vpxor xmm6,xmm6,xmm7
+ xor edi,r11d
+ shrd r14d,r14d,2
+ add ebx,r9d
+ vpsrlq xmm7,xmm7,2
+ add r9d,edi
+ mov r13d,ebx
+ add r14d,r9d
+ vpxor xmm6,xmm6,xmm7
+ shrd r13d,r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ vpshufb xmm6,xmm6,xmm9
+ shrd r14d,r14d,9
+ xor r13d,ebx
+ xor r12d,edx
+ vpaddd xmm2,xmm2,xmm6
+ shrd r13d,r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ vpaddd xmm6,xmm2,XMMWORD PTR[64+rbp]
+ xor r13d,ebx
+ add r8d,DWORD PTR[44+rsp]
+ mov edi,r9d
+ xor r12d,edx
+ shrd r14d,r14d,11
+ xor edi,r10d
+ add r8d,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ shrd r14d,r14d,2
+ add eax,r8d
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ vmovdqa XMMWORD PTR[32+rsp],xmm6
+ vpalignr xmm4,xmm0,xmm3,4
+ shrd r13d,r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ vpalignr xmm7,xmm2,xmm1,4
+ shrd r14d,r14d,9
+ xor r13d,eax
+ xor r12d,ecx
+ vpsrld xmm6,xmm4,7
+ shrd r13d,r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ vpaddd xmm3,xmm3,xmm7
+ xor r13d,eax
+ add edx,DWORD PTR[48+rsp]
+ mov r15d,r8d
+ vpsrld xmm7,xmm4,3
+ xor r12d,ecx
+ shrd r14d,r14d,11
+ xor r15d,r9d
+ vpslld xmm5,xmm4,14
+ add edx,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ vpxor xmm4,xmm7,xmm6
+ xor r14d,r8d
+ add edx,r13d
+ xor edi,r9d
+ vpshufd xmm7,xmm2,250
+ shrd r14d,r14d,2
+ add r11d,edx
+ add edx,edi
+ vpsrld xmm6,xmm6,11
+ mov r13d,r11d
+ add r14d,edx
+ shrd r13d,r13d,14
+ vpxor xmm4,xmm4,xmm5
+ mov edx,r14d
+ mov r12d,eax
+ shrd r14d,r14d,9
+ vpslld xmm5,xmm5,11
+ xor r13d,r11d
+ xor r12d,ebx
+ shrd r13d,r13d,5
+ vpxor xmm4,xmm4,xmm6
+ xor r14d,edx
+ and r12d,r11d
+ xor r13d,r11d
+ vpsrld xmm6,xmm7,10
+ add ecx,DWORD PTR[52+rsp]
+ mov edi,edx
+ xor r12d,ebx
+ vpxor xmm4,xmm4,xmm5
+ shrd r14d,r14d,11
+ xor edi,r8d
+ add ecx,r12d
+ vpsrlq xmm7,xmm7,17
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,edx
+ vpaddd xmm3,xmm3,xmm4
+ add ecx,r13d
+ xor r15d,r8d
+ shrd r14d,r14d,2
+ vpxor xmm6,xmm6,xmm7
+ add r10d,ecx
+ add ecx,r15d
+ mov r13d,r10d
+ vpsrlq xmm7,xmm7,2
+ add r14d,ecx
+ shrd r13d,r13d,14
+ mov ecx,r14d
+ vpxor xmm6,xmm6,xmm7
+ mov r12d,r11d
+ shrd r14d,r14d,9
+ xor r13d,r10d
+ vpshufb xmm6,xmm6,xmm8
+ xor r12d,eax
+ shrd r13d,r13d,5
+ xor r14d,ecx
+ vpaddd xmm3,xmm3,xmm6
+ and r12d,r10d
+ xor r13d,r10d
+ add ebx,DWORD PTR[56+rsp]
+ vpshufd xmm7,xmm3,80
+ mov r15d,ecx
+ xor r12d,eax
+ shrd r14d,r14d,11
+ vpsrld xmm6,xmm7,10
+ xor r15d,edx
+ add ebx,r12d
+ shrd r13d,r13d,6
+ vpsrlq xmm7,xmm7,17
+ and edi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ vpxor xmm6,xmm6,xmm7
+ xor edi,edx
+ shrd r14d,r14d,2
+ add r9d,ebx
+ vpsrlq xmm7,xmm7,2
+ add ebx,edi
+ mov r13d,r9d
+ add r14d,ebx
+ vpxor xmm6,xmm6,xmm7
+ shrd r13d,r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ vpshufb xmm6,xmm6,xmm9
+ shrd r14d,r14d,9
+ xor r13d,r9d
+ xor r12d,r11d
+ vpaddd xmm3,xmm3,xmm6
+ shrd r13d,r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ vpaddd xmm6,xmm3,XMMWORD PTR[96+rbp]
+ xor r13d,r9d
+ add eax,DWORD PTR[60+rsp]
+ mov edi,ebx
+ xor r12d,r11d
+ shrd r14d,r14d,11
+ xor edi,ecx
+ add eax,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ shrd r14d,r14d,2
+ add r8d,eax
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ vmovdqa XMMWORD PTR[48+rsp],xmm6
+ cmp BYTE PTR[131+rbp],0
+ jne $L$avx_00_47
+ shrd r13d,r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ shrd r14d,r14d,9
+ xor r13d,r8d
+ xor r12d,r10d
+ shrd r13d,r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ xor r13d,r8d
+ add r11d,DWORD PTR[rsp]
+ mov r15d,eax
+ xor r12d,r10d
+ shrd r14d,r14d,11
+ xor r15d,ebx
+ add r11d,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ xor r14d,eax
+ add r11d,r13d
+ xor edi,ebx
+ shrd r14d,r14d,2
+ add edx,r11d
+ add r11d,edi
+ mov r13d,edx
+ add r14d,r11d
+ shrd r13d,r13d,14
+ mov r11d,r14d
+ mov r12d,r8d
+ shrd r14d,r14d,9
+ xor r13d,edx
+ xor r12d,r9d
+ shrd r13d,r13d,5
+ xor r14d,r11d
+ and r12d,edx
+ xor r13d,edx
+ add r10d,DWORD PTR[4+rsp]
+ mov edi,r11d
+ xor r12d,r9d
+ shrd r14d,r14d,11
+ xor edi,eax
+ add r10d,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,r11d
+ add r10d,r13d
+ xor r15d,eax
+ shrd r14d,r14d,2
+ add ecx,r10d
+ add r10d,r15d
+ mov r13d,ecx
+ add r14d,r10d
+ shrd r13d,r13d,14
+ mov r10d,r14d
+ mov r12d,edx
+ shrd r14d,r14d,9
+ xor r13d,ecx
+ xor r12d,r8d
+ shrd r13d,r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ xor r13d,ecx
+ add r9d,DWORD PTR[8+rsp]
+ mov r15d,r10d
+ xor r12d,r8d
+ shrd r14d,r14d,11
+ xor r15d,r11d
+ add r9d,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ xor edi,r11d
+ shrd r14d,r14d,2
+ add ebx,r9d
+ add r9d,edi
+ mov r13d,ebx
+ add r14d,r9d
+ shrd r13d,r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ shrd r14d,r14d,9
+ xor r13d,ebx
+ xor r12d,edx
+ shrd r13d,r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ xor r13d,ebx
+ add r8d,DWORD PTR[12+rsp]
+ mov edi,r9d
+ xor r12d,edx
+ shrd r14d,r14d,11
+ xor edi,r10d
+ add r8d,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ shrd r14d,r14d,2
+ add eax,r8d
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ shrd r13d,r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ shrd r14d,r14d,9
+ xor r13d,eax
+ xor r12d,ecx
+ shrd r13d,r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ xor r13d,eax
+ add edx,DWORD PTR[16+rsp]
+ mov r15d,r8d
+ xor r12d,ecx
+ shrd r14d,r14d,11
+ xor r15d,r9d
+ add edx,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ xor r14d,r8d
+ add edx,r13d
+ xor edi,r9d
+ shrd r14d,r14d,2
+ add r11d,edx
+ add edx,edi
+ mov r13d,r11d
+ add r14d,edx
+ shrd r13d,r13d,14
+ mov edx,r14d
+ mov r12d,eax
+ shrd r14d,r14d,9
+ xor r13d,r11d
+ xor r12d,ebx
+ shrd r13d,r13d,5
+ xor r14d,edx
+ and r12d,r11d
+ xor r13d,r11d
+ add ecx,DWORD PTR[20+rsp]
+ mov edi,edx
+ xor r12d,ebx
+ shrd r14d,r14d,11
+ xor edi,r8d
+ add ecx,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,edx
+ add ecx,r13d
+ xor r15d,r8d
+ shrd r14d,r14d,2
+ add r10d,ecx
+ add ecx,r15d
+ mov r13d,r10d
+ add r14d,ecx
+ shrd r13d,r13d,14
+ mov ecx,r14d
+ mov r12d,r11d
+ shrd r14d,r14d,9
+ xor r13d,r10d
+ xor r12d,eax
+ shrd r13d,r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ xor r13d,r10d
+ add ebx,DWORD PTR[24+rsp]
+ mov r15d,ecx
+ xor r12d,eax
+ shrd r14d,r14d,11
+ xor r15d,edx
+ add ebx,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ xor edi,edx
+ shrd r14d,r14d,2
+ add r9d,ebx
+ add ebx,edi
+ mov r13d,r9d
+ add r14d,ebx
+ shrd r13d,r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ shrd r14d,r14d,9
+ xor r13d,r9d
+ xor r12d,r11d
+ shrd r13d,r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ xor r13d,r9d
+ add eax,DWORD PTR[28+rsp]
+ mov edi,ebx
+ xor r12d,r11d
+ shrd r14d,r14d,11
+ xor edi,ecx
+ add eax,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ shrd r14d,r14d,2
+ add r8d,eax
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ shrd r13d,r13d,14
+ mov eax,r14d
+ mov r12d,r9d
+ shrd r14d,r14d,9
+ xor r13d,r8d
+ xor r12d,r10d
+ shrd r13d,r13d,5
+ xor r14d,eax
+ and r12d,r8d
+ xor r13d,r8d
+ add r11d,DWORD PTR[32+rsp]
+ mov r15d,eax
+ xor r12d,r10d
+ shrd r14d,r14d,11
+ xor r15d,ebx
+ add r11d,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ xor r14d,eax
+ add r11d,r13d
+ xor edi,ebx
+ shrd r14d,r14d,2
+ add edx,r11d
+ add r11d,edi
+ mov r13d,edx
+ add r14d,r11d
+ shrd r13d,r13d,14
+ mov r11d,r14d
+ mov r12d,r8d
+ shrd r14d,r14d,9
+ xor r13d,edx
+ xor r12d,r9d
+ shrd r13d,r13d,5
+ xor r14d,r11d
+ and r12d,edx
+ xor r13d,edx
+ add r10d,DWORD PTR[36+rsp]
+ mov edi,r11d
+ xor r12d,r9d
+ shrd r14d,r14d,11
+ xor edi,eax
+ add r10d,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,r11d
+ add r10d,r13d
+ xor r15d,eax
+ shrd r14d,r14d,2
+ add ecx,r10d
+ add r10d,r15d
+ mov r13d,ecx
+ add r14d,r10d
+ shrd r13d,r13d,14
+ mov r10d,r14d
+ mov r12d,edx
+ shrd r14d,r14d,9
+ xor r13d,ecx
+ xor r12d,r8d
+ shrd r13d,r13d,5
+ xor r14d,r10d
+ and r12d,ecx
+ xor r13d,ecx
+ add r9d,DWORD PTR[40+rsp]
+ mov r15d,r10d
+ xor r12d,r8d
+ shrd r14d,r14d,11
+ xor r15d,r11d
+ add r9d,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ xor r14d,r10d
+ add r9d,r13d
+ xor edi,r11d
+ shrd r14d,r14d,2
+ add ebx,r9d
+ add r9d,edi
+ mov r13d,ebx
+ add r14d,r9d
+ shrd r13d,r13d,14
+ mov r9d,r14d
+ mov r12d,ecx
+ shrd r14d,r14d,9
+ xor r13d,ebx
+ xor r12d,edx
+ shrd r13d,r13d,5
+ xor r14d,r9d
+ and r12d,ebx
+ xor r13d,ebx
+ add r8d,DWORD PTR[44+rsp]
+ mov edi,r9d
+ xor r12d,edx
+ shrd r14d,r14d,11
+ xor edi,r10d
+ add r8d,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,r9d
+ add r8d,r13d
+ xor r15d,r10d
+ shrd r14d,r14d,2
+ add eax,r8d
+ add r8d,r15d
+ mov r13d,eax
+ add r14d,r8d
+ shrd r13d,r13d,14
+ mov r8d,r14d
+ mov r12d,ebx
+ shrd r14d,r14d,9
+ xor r13d,eax
+ xor r12d,ecx
+ shrd r13d,r13d,5
+ xor r14d,r8d
+ and r12d,eax
+ xor r13d,eax
+ add edx,DWORD PTR[48+rsp]
+ mov r15d,r8d
+ xor r12d,ecx
+ shrd r14d,r14d,11
+ xor r15d,r9d
+ add edx,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ xor r14d,r8d
+ add edx,r13d
+ xor edi,r9d
+ shrd r14d,r14d,2
+ add r11d,edx
+ add edx,edi
+ mov r13d,r11d
+ add r14d,edx
+ shrd r13d,r13d,14
+ mov edx,r14d
+ mov r12d,eax
+ shrd r14d,r14d,9
+ xor r13d,r11d
+ xor r12d,ebx
+ shrd r13d,r13d,5
+ xor r14d,edx
+ and r12d,r11d
+ xor r13d,r11d
+ add ecx,DWORD PTR[52+rsp]
+ mov edi,edx
+ xor r12d,ebx
+ shrd r14d,r14d,11
+ xor edi,r8d
+ add ecx,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,edx
+ add ecx,r13d
+ xor r15d,r8d
+ shrd r14d,r14d,2
+ add r10d,ecx
+ add ecx,r15d
+ mov r13d,r10d
+ add r14d,ecx
+ shrd r13d,r13d,14
+ mov ecx,r14d
+ mov r12d,r11d
+ shrd r14d,r14d,9
+ xor r13d,r10d
+ xor r12d,eax
+ shrd r13d,r13d,5
+ xor r14d,ecx
+ and r12d,r10d
+ xor r13d,r10d
+ add ebx,DWORD PTR[56+rsp]
+ mov r15d,ecx
+ xor r12d,eax
+ shrd r14d,r14d,11
+ xor r15d,edx
+ add ebx,r12d
+ shrd r13d,r13d,6
+ and edi,r15d
+ xor r14d,ecx
+ add ebx,r13d
+ xor edi,edx
+ shrd r14d,r14d,2
+ add r9d,ebx
+ add ebx,edi
+ mov r13d,r9d
+ add r14d,ebx
+ shrd r13d,r13d,14
+ mov ebx,r14d
+ mov r12d,r10d
+ shrd r14d,r14d,9
+ xor r13d,r9d
+ xor r12d,r11d
+ shrd r13d,r13d,5
+ xor r14d,ebx
+ and r12d,r9d
+ xor r13d,r9d
+ add eax,DWORD PTR[60+rsp]
+ mov edi,ebx
+ xor r12d,r11d
+ shrd r14d,r14d,11
+ xor edi,ecx
+ add eax,r12d
+ shrd r13d,r13d,6
+ and r15d,edi
+ xor r14d,ebx
+ add eax,r13d
+ xor r15d,ecx
+ shrd r14d,r14d,2
+ add r8d,eax
+ add eax,r15d
+ mov r13d,r8d
+ add r14d,eax
+ mov rdi,QWORD PTR[((64+0))+rsp]
+ mov eax,r14d
+
+ add eax,DWORD PTR[rdi]
+ lea rsi,QWORD PTR[64+rsi]
+ add ebx,DWORD PTR[4+rdi]
+ add ecx,DWORD PTR[8+rdi]
+ add edx,DWORD PTR[12+rdi]
+ add r8d,DWORD PTR[16+rdi]
+ add r9d,DWORD PTR[20+rdi]
+ add r10d,DWORD PTR[24+rdi]
+ add r11d,DWORD PTR[28+rdi]
+
+ cmp rsi,QWORD PTR[((64+16))+rsp]
+
+ mov DWORD PTR[rdi],eax
+ mov DWORD PTR[4+rdi],ebx
+ mov DWORD PTR[8+rdi],ecx
+ mov DWORD PTR[12+rdi],edx
+ mov DWORD PTR[16+rdi],r8d
+ mov DWORD PTR[20+rdi],r9d
+ mov DWORD PTR[24+rdi],r10d
+ mov DWORD PTR[28+rdi],r11d
+ jb $L$loop_avx
+
+ mov rsi,QWORD PTR[88+rsp]
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((64+32))+rsp]
+ movaps xmm7,XMMWORD PTR[((64+48))+rsp]
+ movaps xmm8,XMMWORD PTR[((64+64))+rsp]
+ movaps xmm9,XMMWORD PTR[((64+80))+rsp]
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue_avx::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha256_block_data_order_avx::
+sha256_block_data_order_avx ENDP
+
+ALIGN 64
+sha256_block_data_order_avx2 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha256_block_data_order_avx2::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$avx2_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,608
+ shl rdx,4
+ and rsp,-256*4
+ lea rdx,QWORD PTR[rdx*4+rsi]
+ add rsp,448
+ mov QWORD PTR[((64+0))+rsp],rdi
+ mov QWORD PTR[((64+8))+rsp],rsi
+ mov QWORD PTR[((64+16))+rsp],rdx
+ mov QWORD PTR[88+rsp],rax
+
+ movaps XMMWORD PTR[(64+32)+rsp],xmm6
+ movaps XMMWORD PTR[(64+48)+rsp],xmm7
+ movaps XMMWORD PTR[(64+64)+rsp],xmm8
+ movaps XMMWORD PTR[(64+80)+rsp],xmm9
+$L$prologue_avx2::
+
+ vzeroupper
+ sub rsi,-16*4
+ mov eax,DWORD PTR[rdi]
+ mov r12,rsi
+ mov ebx,DWORD PTR[4+rdi]
+ cmp rsi,rdx
+ mov ecx,DWORD PTR[8+rdi]
+ cmove r12,rsp
+ mov edx,DWORD PTR[12+rdi]
+ mov r8d,DWORD PTR[16+rdi]
+ mov r9d,DWORD PTR[20+rdi]
+ mov r10d,DWORD PTR[24+rdi]
+ mov r11d,DWORD PTR[28+rdi]
+ vmovdqa ymm8,YMMWORD PTR[((K256+512+32))]
+ vmovdqa ymm9,YMMWORD PTR[((K256+512+64))]
+ jmp $L$oop_avx2
+ALIGN 16
+$L$oop_avx2::
+ vmovdqa ymm7,YMMWORD PTR[((K256+512))]
+ vmovdqu xmm0,XMMWORD PTR[((-64+0))+rsi]
+ vmovdqu xmm1,XMMWORD PTR[((-64+16))+rsi]
+ vmovdqu xmm2,XMMWORD PTR[((-64+32))+rsi]
+ vmovdqu xmm3,XMMWORD PTR[((-64+48))+rsi]
+
+ vinserti128 ymm0,ymm0,XMMWORD PTR[r12],1
+ vinserti128 ymm1,ymm1,XMMWORD PTR[16+r12],1
+ vpshufb ymm0,ymm0,ymm7
+ vinserti128 ymm2,ymm2,XMMWORD PTR[32+r12],1
+ vpshufb ymm1,ymm1,ymm7
+ vinserti128 ymm3,ymm3,XMMWORD PTR[48+r12],1
+
+ lea rbp,QWORD PTR[K256]
+ vpshufb ymm2,ymm2,ymm7
+ vpaddd ymm4,ymm0,YMMWORD PTR[rbp]
+ vpshufb ymm3,ymm3,ymm7
+ vpaddd ymm5,ymm1,YMMWORD PTR[32+rbp]
+ vpaddd ymm6,ymm2,YMMWORD PTR[64+rbp]
+ vpaddd ymm7,ymm3,YMMWORD PTR[96+rbp]
+ vmovdqa YMMWORD PTR[rsp],ymm4
+ xor r14d,r14d
+ vmovdqa YMMWORD PTR[32+rsp],ymm5
+ lea rsp,QWORD PTR[((-64))+rsp]
+ mov edi,ebx
+ vmovdqa YMMWORD PTR[rsp],ymm6
+ xor edi,ecx
+ vmovdqa YMMWORD PTR[32+rsp],ymm7
+ mov r12d,r9d
+ sub rbp,-16*2*4
+ jmp $L$avx2_00_47
+
+ALIGN 16
+$L$avx2_00_47::
+ lea rsp,QWORD PTR[((-64))+rsp]
+ vpalignr ymm4,ymm1,ymm0,4
+ add r11d,DWORD PTR[((0+128))+rsp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ vpalignr ymm7,ymm3,ymm2,4
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ vpsrld ymm6,ymm4,7
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ vpaddd ymm0,ymm0,ymm7
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ vpsrld ymm7,ymm4,3
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ vpslld ymm5,ymm4,14
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ vpxor ymm4,ymm7,ymm6
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,ebx
+ vpshufd ymm7,ymm3,250
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rdi*1+r11]
+ mov r12d,r8d
+ vpsrld ymm6,ymm6,11
+ add r10d,DWORD PTR[((4+128))+rsp]
+ and r12d,edx
+ rorx r13d,edx,25
+ vpxor ymm4,ymm4,ymm5
+ rorx edi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ vpslld ymm5,ymm5,11
+ andn r12d,edx,r9d
+ xor r13d,edi
+ rorx r14d,edx,6
+ vpxor ymm4,ymm4,ymm6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov edi,r11d
+ vpsrld ymm6,ymm7,10
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor edi,eax
+ vpxor ymm4,ymm4,ymm5
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ vpsrlq ymm7,ymm7,17
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,eax
+ vpaddd ymm0,ymm0,ymm4
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ vpxor ymm6,ymm6,ymm7
+ add r9d,DWORD PTR[((8+128))+rsp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ vpsrlq ymm7,ymm7,2
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ vpshufb ymm6,ymm6,ymm8
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ vpaddd ymm0,ymm0,ymm6
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ vpshufd ymm7,ymm0,80
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ vpsrld ymm6,ymm7,10
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,r11d
+ vpsrlq ymm7,ymm7,17
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rdi*1+r9]
+ mov r12d,ecx
+ vpxor ymm6,ymm6,ymm7
+ add r8d,DWORD PTR[((12+128))+rsp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ vpsrlq ymm7,ymm7,2
+ rorx edi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,ebx,edx
+ xor r13d,edi
+ rorx r14d,ebx,6
+ vpshufb ymm6,ymm6,ymm9
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov edi,r9d
+ vpaddd ymm0,ymm0,ymm6
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor edi,r10d
+ vpaddd ymm6,ymm0,YMMWORD PTR[rbp]
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,r10d
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ vmovdqa YMMWORD PTR[rsp],ymm6
+ vpalignr ymm4,ymm2,ymm1,4
+ add edx,DWORD PTR[((32+128))+rsp]
+ and r12d,eax
+ rorx r13d,eax,25
+ vpalignr ymm7,ymm0,ymm3,4
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ vpsrld ymm6,ymm4,7
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ vpaddd ymm1,ymm1,ymm7
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ vpsrld ymm7,ymm4,3
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ vpslld ymm5,ymm4,14
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ vpxor ymm4,ymm7,ymm6
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,r9d
+ vpshufd ymm7,ymm0,250
+ xor r14d,r13d
+ lea edx,DWORD PTR[rdi*1+rdx]
+ mov r12d,eax
+ vpsrld ymm6,ymm6,11
+ add ecx,DWORD PTR[((36+128))+rsp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ vpxor ymm4,ymm4,ymm5
+ rorx edi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ vpslld ymm5,ymm5,11
+ andn r12d,r11d,ebx
+ xor r13d,edi
+ rorx r14d,r11d,6
+ vpxor ymm4,ymm4,ymm6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov edi,edx
+ vpsrld ymm6,ymm7,10
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor edi,r8d
+ vpxor ymm4,ymm4,ymm5
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ vpsrlq ymm7,ymm7,17
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,r8d
+ vpaddd ymm1,ymm1,ymm4
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ vpxor ymm6,ymm6,ymm7
+ add ebx,DWORD PTR[((40+128))+rsp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ vpsrlq ymm7,ymm7,2
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ vpshufb ymm6,ymm6,ymm8
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ vpaddd ymm1,ymm1,ymm6
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ vpshufd ymm7,ymm1,80
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ vpsrld ymm6,ymm7,10
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,edx
+ vpsrlq ymm7,ymm7,17
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rdi*1+rbx]
+ mov r12d,r10d
+ vpxor ymm6,ymm6,ymm7
+ add eax,DWORD PTR[((44+128))+rsp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ vpsrlq ymm7,ymm7,2
+ rorx edi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,r9d,r11d
+ xor r13d,edi
+ rorx r14d,r9d,6
+ vpshufb ymm6,ymm6,ymm9
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov edi,ebx
+ vpaddd ymm1,ymm1,ymm6
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor edi,ecx
+ vpaddd ymm6,ymm1,YMMWORD PTR[32+rbp]
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,ecx
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ vmovdqa YMMWORD PTR[32+rsp],ymm6
+ lea rsp,QWORD PTR[((-64))+rsp]
+ vpalignr ymm4,ymm3,ymm2,4
+ add r11d,DWORD PTR[((0+128))+rsp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ vpalignr ymm7,ymm1,ymm0,4
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ vpsrld ymm6,ymm4,7
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ vpaddd ymm2,ymm2,ymm7
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ vpsrld ymm7,ymm4,3
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ vpslld ymm5,ymm4,14
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ vpxor ymm4,ymm7,ymm6
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,ebx
+ vpshufd ymm7,ymm1,250
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rdi*1+r11]
+ mov r12d,r8d
+ vpsrld ymm6,ymm6,11
+ add r10d,DWORD PTR[((4+128))+rsp]
+ and r12d,edx
+ rorx r13d,edx,25
+ vpxor ymm4,ymm4,ymm5
+ rorx edi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ vpslld ymm5,ymm5,11
+ andn r12d,edx,r9d
+ xor r13d,edi
+ rorx r14d,edx,6
+ vpxor ymm4,ymm4,ymm6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov edi,r11d
+ vpsrld ymm6,ymm7,10
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor edi,eax
+ vpxor ymm4,ymm4,ymm5
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ vpsrlq ymm7,ymm7,17
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,eax
+ vpaddd ymm2,ymm2,ymm4
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ vpxor ymm6,ymm6,ymm7
+ add r9d,DWORD PTR[((8+128))+rsp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ vpsrlq ymm7,ymm7,2
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ vpshufb ymm6,ymm6,ymm8
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ vpaddd ymm2,ymm2,ymm6
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ vpshufd ymm7,ymm2,80
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ vpsrld ymm6,ymm7,10
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,r11d
+ vpsrlq ymm7,ymm7,17
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rdi*1+r9]
+ mov r12d,ecx
+ vpxor ymm6,ymm6,ymm7
+ add r8d,DWORD PTR[((12+128))+rsp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ vpsrlq ymm7,ymm7,2
+ rorx edi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,ebx,edx
+ xor r13d,edi
+ rorx r14d,ebx,6
+ vpshufb ymm6,ymm6,ymm9
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov edi,r9d
+ vpaddd ymm2,ymm2,ymm6
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor edi,r10d
+ vpaddd ymm6,ymm2,YMMWORD PTR[64+rbp]
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,r10d
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ vmovdqa YMMWORD PTR[rsp],ymm6
+ vpalignr ymm4,ymm0,ymm3,4
+ add edx,DWORD PTR[((32+128))+rsp]
+ and r12d,eax
+ rorx r13d,eax,25
+ vpalignr ymm7,ymm2,ymm1,4
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ vpsrld ymm6,ymm4,7
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ vpaddd ymm3,ymm3,ymm7
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ vpsrld ymm7,ymm4,3
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ vpslld ymm5,ymm4,14
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ vpxor ymm4,ymm7,ymm6
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,r9d
+ vpshufd ymm7,ymm2,250
+ xor r14d,r13d
+ lea edx,DWORD PTR[rdi*1+rdx]
+ mov r12d,eax
+ vpsrld ymm6,ymm6,11
+ add ecx,DWORD PTR[((36+128))+rsp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ vpxor ymm4,ymm4,ymm5
+ rorx edi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ vpslld ymm5,ymm5,11
+ andn r12d,r11d,ebx
+ xor r13d,edi
+ rorx r14d,r11d,6
+ vpxor ymm4,ymm4,ymm6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov edi,edx
+ vpsrld ymm6,ymm7,10
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor edi,r8d
+ vpxor ymm4,ymm4,ymm5
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ vpsrlq ymm7,ymm7,17
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,r8d
+ vpaddd ymm3,ymm3,ymm4
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ vpxor ymm6,ymm6,ymm7
+ add ebx,DWORD PTR[((40+128))+rsp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ vpsrlq ymm7,ymm7,2
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ vpshufb ymm6,ymm6,ymm8
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ vpaddd ymm3,ymm3,ymm6
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ vpshufd ymm7,ymm3,80
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ vpsrld ymm6,ymm7,10
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,edx
+ vpsrlq ymm7,ymm7,17
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rdi*1+rbx]
+ mov r12d,r10d
+ vpxor ymm6,ymm6,ymm7
+ add eax,DWORD PTR[((44+128))+rsp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ vpsrlq ymm7,ymm7,2
+ rorx edi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ vpxor ymm6,ymm6,ymm7
+ andn r12d,r9d,r11d
+ xor r13d,edi
+ rorx r14d,r9d,6
+ vpshufb ymm6,ymm6,ymm9
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov edi,ebx
+ vpaddd ymm3,ymm3,ymm6
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor edi,ecx
+ vpaddd ymm6,ymm3,YMMWORD PTR[96+rbp]
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,ecx
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ vmovdqa YMMWORD PTR[32+rsp],ymm6
+ lea rbp,QWORD PTR[128+rbp]
+ cmp BYTE PTR[3+rbp],0
+ jne $L$avx2_00_47
+ add r11d,DWORD PTR[((0+64))+rsp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,ebx
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rdi*1+r11]
+ mov r12d,r8d
+ add r10d,DWORD PTR[((4+64))+rsp]
+ and r12d,edx
+ rorx r13d,edx,25
+ rorx edi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ andn r12d,edx,r9d
+ xor r13d,edi
+ rorx r14d,edx,6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov edi,r11d
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor edi,eax
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,eax
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ add r9d,DWORD PTR[((8+64))+rsp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,r11d
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rdi*1+r9]
+ mov r12d,ecx
+ add r8d,DWORD PTR[((12+64))+rsp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ rorx edi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ andn r12d,ebx,edx
+ xor r13d,edi
+ rorx r14d,ebx,6
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov edi,r9d
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor edi,r10d
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,r10d
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ add edx,DWORD PTR[((32+64))+rsp]
+ and r12d,eax
+ rorx r13d,eax,25
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,r9d
+ xor r14d,r13d
+ lea edx,DWORD PTR[rdi*1+rdx]
+ mov r12d,eax
+ add ecx,DWORD PTR[((36+64))+rsp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ rorx edi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ andn r12d,r11d,ebx
+ xor r13d,edi
+ rorx r14d,r11d,6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov edi,edx
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor edi,r8d
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,r8d
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ add ebx,DWORD PTR[((40+64))+rsp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,edx
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rdi*1+rbx]
+ mov r12d,r10d
+ add eax,DWORD PTR[((44+64))+rsp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ rorx edi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ andn r12d,r9d,r11d
+ xor r13d,edi
+ rorx r14d,r9d,6
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov edi,ebx
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor edi,ecx
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,ecx
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ add r11d,DWORD PTR[rsp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,ebx
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rdi*1+r11]
+ mov r12d,r8d
+ add r10d,DWORD PTR[4+rsp]
+ and r12d,edx
+ rorx r13d,edx,25
+ rorx edi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ andn r12d,edx,r9d
+ xor r13d,edi
+ rorx r14d,edx,6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov edi,r11d
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor edi,eax
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,eax
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ add r9d,DWORD PTR[8+rsp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,r11d
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rdi*1+r9]
+ mov r12d,ecx
+ add r8d,DWORD PTR[12+rsp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ rorx edi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ andn r12d,ebx,edx
+ xor r13d,edi
+ rorx r14d,ebx,6
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov edi,r9d
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor edi,r10d
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,r10d
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ add edx,DWORD PTR[32+rsp]
+ and r12d,eax
+ rorx r13d,eax,25
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,r9d
+ xor r14d,r13d
+ lea edx,DWORD PTR[rdi*1+rdx]
+ mov r12d,eax
+ add ecx,DWORD PTR[36+rsp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ rorx edi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ andn r12d,r11d,ebx
+ xor r13d,edi
+ rorx r14d,r11d,6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov edi,edx
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor edi,r8d
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,r8d
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ add ebx,DWORD PTR[40+rsp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,edx
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rdi*1+rbx]
+ mov r12d,r10d
+ add eax,DWORD PTR[44+rsp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ rorx edi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ andn r12d,r9d,r11d
+ xor r13d,edi
+ rorx r14d,r9d,6
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov edi,ebx
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor edi,ecx
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,ecx
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ mov rdi,QWORD PTR[512+rsp]
+ add eax,r14d
+
+ lea rbp,QWORD PTR[448+rsp]
+
+ add eax,DWORD PTR[rdi]
+ add ebx,DWORD PTR[4+rdi]
+ add ecx,DWORD PTR[8+rdi]
+ add edx,DWORD PTR[12+rdi]
+ add r8d,DWORD PTR[16+rdi]
+ add r9d,DWORD PTR[20+rdi]
+ add r10d,DWORD PTR[24+rdi]
+ add r11d,DWORD PTR[28+rdi]
+
+ mov DWORD PTR[rdi],eax
+ mov DWORD PTR[4+rdi],ebx
+ mov DWORD PTR[8+rdi],ecx
+ mov DWORD PTR[12+rdi],edx
+ mov DWORD PTR[16+rdi],r8d
+ mov DWORD PTR[20+rdi],r9d
+ mov DWORD PTR[24+rdi],r10d
+ mov DWORD PTR[28+rdi],r11d
+
+ cmp rsi,QWORD PTR[80+rbp]
+ je $L$done_avx2
+
+ xor r14d,r14d
+ mov edi,ebx
+ xor edi,ecx
+ mov r12d,r9d
+ jmp $L$ower_avx2
+ALIGN 16
+$L$ower_avx2::
+ add r11d,DWORD PTR[((0+16))+rbp]
+ and r12d,r8d
+ rorx r13d,r8d,25
+ rorx r15d,r8d,11
+ lea eax,DWORD PTR[r14*1+rax]
+ lea r11d,DWORD PTR[r12*1+r11]
+ andn r12d,r8d,r10d
+ xor r13d,r15d
+ rorx r14d,r8d,6
+ lea r11d,DWORD PTR[r12*1+r11]
+ xor r13d,r14d
+ mov r15d,eax
+ rorx r12d,eax,22
+ lea r11d,DWORD PTR[r13*1+r11]
+ xor r15d,ebx
+ rorx r14d,eax,13
+ rorx r13d,eax,2
+ lea edx,DWORD PTR[r11*1+rdx]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,ebx
+ xor r14d,r13d
+ lea r11d,DWORD PTR[rdi*1+r11]
+ mov r12d,r8d
+ add r10d,DWORD PTR[((4+16))+rbp]
+ and r12d,edx
+ rorx r13d,edx,25
+ rorx edi,edx,11
+ lea r11d,DWORD PTR[r14*1+r11]
+ lea r10d,DWORD PTR[r12*1+r10]
+ andn r12d,edx,r9d
+ xor r13d,edi
+ rorx r14d,edx,6
+ lea r10d,DWORD PTR[r12*1+r10]
+ xor r13d,r14d
+ mov edi,r11d
+ rorx r12d,r11d,22
+ lea r10d,DWORD PTR[r13*1+r10]
+ xor edi,eax
+ rorx r14d,r11d,13
+ rorx r13d,r11d,2
+ lea ecx,DWORD PTR[r10*1+rcx]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,eax
+ xor r14d,r13d
+ lea r10d,DWORD PTR[r15*1+r10]
+ mov r12d,edx
+ add r9d,DWORD PTR[((8+16))+rbp]
+ and r12d,ecx
+ rorx r13d,ecx,25
+ rorx r15d,ecx,11
+ lea r10d,DWORD PTR[r14*1+r10]
+ lea r9d,DWORD PTR[r12*1+r9]
+ andn r12d,ecx,r8d
+ xor r13d,r15d
+ rorx r14d,ecx,6
+ lea r9d,DWORD PTR[r12*1+r9]
+ xor r13d,r14d
+ mov r15d,r10d
+ rorx r12d,r10d,22
+ lea r9d,DWORD PTR[r13*1+r9]
+ xor r15d,r11d
+ rorx r14d,r10d,13
+ rorx r13d,r10d,2
+ lea ebx,DWORD PTR[r9*1+rbx]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,r11d
+ xor r14d,r13d
+ lea r9d,DWORD PTR[rdi*1+r9]
+ mov r12d,ecx
+ add r8d,DWORD PTR[((12+16))+rbp]
+ and r12d,ebx
+ rorx r13d,ebx,25
+ rorx edi,ebx,11
+ lea r9d,DWORD PTR[r14*1+r9]
+ lea r8d,DWORD PTR[r12*1+r8]
+ andn r12d,ebx,edx
+ xor r13d,edi
+ rorx r14d,ebx,6
+ lea r8d,DWORD PTR[r12*1+r8]
+ xor r13d,r14d
+ mov edi,r9d
+ rorx r12d,r9d,22
+ lea r8d,DWORD PTR[r13*1+r8]
+ xor edi,r10d
+ rorx r14d,r9d,13
+ rorx r13d,r9d,2
+ lea eax,DWORD PTR[r8*1+rax]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,r10d
+ xor r14d,r13d
+ lea r8d,DWORD PTR[r15*1+r8]
+ mov r12d,ebx
+ add edx,DWORD PTR[((32+16))+rbp]
+ and r12d,eax
+ rorx r13d,eax,25
+ rorx r15d,eax,11
+ lea r8d,DWORD PTR[r14*1+r8]
+ lea edx,DWORD PTR[r12*1+rdx]
+ andn r12d,eax,ecx
+ xor r13d,r15d
+ rorx r14d,eax,6
+ lea edx,DWORD PTR[r12*1+rdx]
+ xor r13d,r14d
+ mov r15d,r8d
+ rorx r12d,r8d,22
+ lea edx,DWORD PTR[r13*1+rdx]
+ xor r15d,r9d
+ rorx r14d,r8d,13
+ rorx r13d,r8d,2
+ lea r11d,DWORD PTR[rdx*1+r11]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,r9d
+ xor r14d,r13d
+ lea edx,DWORD PTR[rdi*1+rdx]
+ mov r12d,eax
+ add ecx,DWORD PTR[((36+16))+rbp]
+ and r12d,r11d
+ rorx r13d,r11d,25
+ rorx edi,r11d,11
+ lea edx,DWORD PTR[r14*1+rdx]
+ lea ecx,DWORD PTR[r12*1+rcx]
+ andn r12d,r11d,ebx
+ xor r13d,edi
+ rorx r14d,r11d,6
+ lea ecx,DWORD PTR[r12*1+rcx]
+ xor r13d,r14d
+ mov edi,edx
+ rorx r12d,edx,22
+ lea ecx,DWORD PTR[r13*1+rcx]
+ xor edi,r8d
+ rorx r14d,edx,13
+ rorx r13d,edx,2
+ lea r10d,DWORD PTR[rcx*1+r10]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,r8d
+ xor r14d,r13d
+ lea ecx,DWORD PTR[r15*1+rcx]
+ mov r12d,r11d
+ add ebx,DWORD PTR[((40+16))+rbp]
+ and r12d,r10d
+ rorx r13d,r10d,25
+ rorx r15d,r10d,11
+ lea ecx,DWORD PTR[r14*1+rcx]
+ lea ebx,DWORD PTR[r12*1+rbx]
+ andn r12d,r10d,eax
+ xor r13d,r15d
+ rorx r14d,r10d,6
+ lea ebx,DWORD PTR[r12*1+rbx]
+ xor r13d,r14d
+ mov r15d,ecx
+ rorx r12d,ecx,22
+ lea ebx,DWORD PTR[r13*1+rbx]
+ xor r15d,edx
+ rorx r14d,ecx,13
+ rorx r13d,ecx,2
+ lea r9d,DWORD PTR[rbx*1+r9]
+ and edi,r15d
+ xor r14d,r12d
+ xor edi,edx
+ xor r14d,r13d
+ lea ebx,DWORD PTR[rdi*1+rbx]
+ mov r12d,r10d
+ add eax,DWORD PTR[((44+16))+rbp]
+ and r12d,r9d
+ rorx r13d,r9d,25
+ rorx edi,r9d,11
+ lea ebx,DWORD PTR[r14*1+rbx]
+ lea eax,DWORD PTR[r12*1+rax]
+ andn r12d,r9d,r11d
+ xor r13d,edi
+ rorx r14d,r9d,6
+ lea eax,DWORD PTR[r12*1+rax]
+ xor r13d,r14d
+ mov edi,ebx
+ rorx r12d,ebx,22
+ lea eax,DWORD PTR[r13*1+rax]
+ xor edi,ecx
+ rorx r14d,ebx,13
+ rorx r13d,ebx,2
+ lea r8d,DWORD PTR[rax*1+r8]
+ and r15d,edi
+ xor r14d,r12d
+ xor r15d,ecx
+ xor r14d,r13d
+ lea eax,DWORD PTR[r15*1+rax]
+ mov r12d,r9d
+ lea rbp,QWORD PTR[((-64))+rbp]
+ cmp rbp,rsp
+ jae $L$ower_avx2
+
+ mov rdi,QWORD PTR[512+rsp]
+ add eax,r14d
+
+ lea rsp,QWORD PTR[448+rsp]
+
+
+
+ add eax,DWORD PTR[rdi]
+ add ebx,DWORD PTR[4+rdi]
+ add ecx,DWORD PTR[8+rdi]
+ add edx,DWORD PTR[12+rdi]
+ add r8d,DWORD PTR[16+rdi]
+ add r9d,DWORD PTR[20+rdi]
+ lea rsi,QWORD PTR[128+rsi]
+ add r10d,DWORD PTR[24+rdi]
+ mov r12,rsi
+ add r11d,DWORD PTR[28+rdi]
+ cmp rsi,QWORD PTR[((64+16))+rsp]
+
+ mov DWORD PTR[rdi],eax
+ cmove r12,rsp
+ mov DWORD PTR[4+rdi],ebx
+ mov DWORD PTR[8+rdi],ecx
+ mov DWORD PTR[12+rdi],edx
+ mov DWORD PTR[16+rdi],r8d
+ mov DWORD PTR[20+rdi],r9d
+ mov DWORD PTR[24+rdi],r10d
+ mov DWORD PTR[28+rdi],r11d
+
+ jbe $L$oop_avx2
+ lea rbp,QWORD PTR[rsp]
+
+
+
+
+$L$done_avx2::
+ mov rsi,QWORD PTR[88+rbp]
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((64+32))+rbp]
+ movaps xmm7,XMMWORD PTR[((64+48))+rbp]
+ movaps xmm8,XMMWORD PTR[((64+64))+rbp]
+ movaps xmm9,XMMWORD PTR[((64+80))+rbp]
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue_avx2::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha256_block_data_order_avx2::
+sha256_block_data_order_avx2 ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+ lea r10,QWORD PTR[$L$avx2_shortcut]
+ cmp rbx,r10
+ jb $L$not_in_avx2
+
+ and rax,-256*4
+ add rax,448
+$L$not_in_avx2::
+ mov rsi,rax
+ mov rax,QWORD PTR[((64+24))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+ lea r10,QWORD PTR[$L$epilogue]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ lea rsi,QWORD PTR[((64+32))+rsi]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,8
+ DD 0a548f3fch
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+ALIGN 16
+shaext_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$prologue_shaext]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ lea r10,QWORD PTR[$L$epilogue_shaext]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ lea rsi,QWORD PTR[((-8-80))+rax]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,10
+ DD 0a548f3fch
+
+ jmp $L$in_prologue
+shaext_handler ENDP
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_sha256_block_data_order
+ DD imagerel $L$SEH_end_sha256_block_data_order
+ DD imagerel $L$SEH_info_sha256_block_data_order
+ DD imagerel $L$SEH_begin_sha256_block_data_order_shaext
+ DD imagerel $L$SEH_end_sha256_block_data_order_shaext
+ DD imagerel $L$SEH_info_sha256_block_data_order_shaext
+ DD imagerel $L$SEH_begin_sha256_block_data_order_ssse3
+ DD imagerel $L$SEH_end_sha256_block_data_order_ssse3
+ DD imagerel $L$SEH_info_sha256_block_data_order_ssse3
+ DD imagerel $L$SEH_begin_sha256_block_data_order_avx
+ DD imagerel $L$SEH_end_sha256_block_data_order_avx
+ DD imagerel $L$SEH_info_sha256_block_data_order_avx
+ DD imagerel $L$SEH_begin_sha256_block_data_order_avx2
+ DD imagerel $L$SEH_end_sha256_block_data_order_avx2
+ DD imagerel $L$SEH_info_sha256_block_data_order_avx2
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_sha256_block_data_order::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue,imagerel $L$epilogue
+$L$SEH_info_sha256_block_data_order_shaext::
+DB 9,0,0,0
+ DD imagerel shaext_handler
+$L$SEH_info_sha256_block_data_order_ssse3::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue_ssse3,imagerel $L$epilogue_ssse3
+$L$SEH_info_sha256_block_data_order_avx::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
+$L$SEH_info_sha256_block_data_order_avx2::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue_avx2,imagerel $L$epilogue_avx2
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/sha/sha512-586.masm b/contrib/libs/openssl/asm/windows/crypto/sha/sha512-586.masm
index bb60ddeb69..d7af6c00a5 100644
--- a/contrib/libs/openssl/asm/windows/crypto/sha/sha512-586.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/sha/sha512-586.masm
@@ -1,2848 +1,2848 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-;EXTERN _OPENSSL_ia32cap_P:NEAR
-ALIGN 16
-_sha512_block_data_order PROC PUBLIC
-$L_sha512_block_data_order_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov esi,DWORD PTR 20[esp]
- mov edi,DWORD PTR 24[esp]
- mov eax,DWORD PTR 28[esp]
- mov ebx,esp
- call $L000pic_point
-$L000pic_point:
- pop ebp
- lea ebp,DWORD PTR ($L001K512-$L000pic_point)[ebp]
- sub esp,16
- and esp,-64
- shl eax,7
- add eax,edi
- mov DWORD PTR [esp],esi
- mov DWORD PTR 4[esp],edi
- mov DWORD PTR 8[esp],eax
- mov DWORD PTR 12[esp],ebx
- lea edx,DWORD PTR _OPENSSL_ia32cap_P
- mov ecx,DWORD PTR [edx]
- test ecx,67108864
- jz $L002loop_x86
- mov edx,DWORD PTR 4[edx]
- movq mm0,QWORD PTR [esi]
- and ecx,16777216
- movq mm1,QWORD PTR 8[esi]
- and edx,512
- movq mm2,QWORD PTR 16[esi]
- or ecx,edx
- movq mm3,QWORD PTR 24[esi]
- movq mm4,QWORD PTR 32[esi]
- movq mm5,QWORD PTR 40[esi]
- movq mm6,QWORD PTR 48[esi]
- movq mm7,QWORD PTR 56[esi]
- cmp ecx,16777728
- je $L003SSSE3
- sub esp,80
- jmp $L004loop_sse2
-ALIGN 16
-$L004loop_sse2:
- movq QWORD PTR 8[esp],mm1
- movq QWORD PTR 16[esp],mm2
- movq QWORD PTR 24[esp],mm3
- movq QWORD PTR 40[esp],mm5
- movq QWORD PTR 48[esp],mm6
- pxor mm2,mm1
- movq QWORD PTR 56[esp],mm7
- movq mm3,mm0
- mov eax,DWORD PTR [edi]
- mov ebx,DWORD PTR 4[edi]
- add edi,8
- mov edx,15
- bswap eax
- bswap ebx
- jmp $L00500_14_sse2
-ALIGN 16
-$L00500_14_sse2:
- movd mm1,eax
- mov eax,DWORD PTR [edi]
- movd mm7,ebx
- mov ebx,DWORD PTR 4[edi]
- add edi,8
- bswap eax
- bswap ebx
- punpckldq mm7,mm1
- movq mm1,mm4
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 32[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- movq mm0,mm3
- movq QWORD PTR 72[esp],mm7
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR [esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 56[esp]
- pxor mm3,mm1
- psllq mm4,4
- paddq mm7,QWORD PTR [ebp]
- pxor mm3,mm4
- movq mm4,QWORD PTR 24[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 8[esp]
- psrlq mm5,6
- pxor mm7,mm6
- sub esp,8
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 40[esp]
- paddq mm3,mm2
- movq mm2,mm0
- add ebp,8
- paddq mm3,mm6
- movq mm6,QWORD PTR 48[esp]
- dec edx
- jnz $L00500_14_sse2
- movd mm1,eax
- movd mm7,ebx
- punpckldq mm7,mm1
- movq mm1,mm4
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 32[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- movq mm0,mm3
- movq QWORD PTR 72[esp],mm7
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR [esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 56[esp]
- pxor mm3,mm1
- psllq mm4,4
- paddq mm7,QWORD PTR [ebp]
- pxor mm3,mm4
- movq mm4,QWORD PTR 24[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 8[esp]
- psrlq mm5,6
- pxor mm7,mm6
- sub esp,8
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm7,QWORD PTR 192[esp]
- paddq mm3,mm2
- movq mm2,mm0
- add ebp,8
- paddq mm3,mm6
- pxor mm0,mm0
- mov edx,32
- jmp $L00616_79_sse2
-ALIGN 16
-$L00616_79_sse2:
- movq mm5,QWORD PTR 88[esp]
- movq mm1,mm7
- psrlq mm7,1
- movq mm6,mm5
- psrlq mm5,6
- psllq mm1,56
- paddq mm0,mm3
- movq mm3,mm7
- psrlq mm7,6
- pxor mm3,mm1
- psllq mm1,7
- pxor mm3,mm7
- psrlq mm7,1
- pxor mm3,mm1
- movq mm1,mm5
- psrlq mm5,13
- pxor mm7,mm3
- psllq mm6,3
- pxor mm1,mm5
- paddq mm7,QWORD PTR 200[esp]
- pxor mm1,mm6
- psrlq mm5,42
- paddq mm7,QWORD PTR 128[esp]
- pxor mm1,mm5
- psllq mm6,42
- movq mm5,QWORD PTR 40[esp]
- pxor mm1,mm6
- movq mm6,QWORD PTR 48[esp]
- paddq mm7,mm1
- movq mm1,mm4
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 32[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- movq QWORD PTR 72[esp],mm7
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR [esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 56[esp]
- pxor mm3,mm1
- psllq mm4,4
- paddq mm7,QWORD PTR [ebp]
- pxor mm3,mm4
- movq mm4,QWORD PTR 24[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 8[esp]
- psrlq mm5,6
- pxor mm7,mm6
- sub esp,8
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm7,QWORD PTR 192[esp]
- paddq mm2,mm6
- add ebp,8
- movq mm5,QWORD PTR 88[esp]
- movq mm1,mm7
- psrlq mm7,1
- movq mm6,mm5
- psrlq mm5,6
- psllq mm1,56
- paddq mm2,mm3
- movq mm3,mm7
- psrlq mm7,6
- pxor mm3,mm1
- psllq mm1,7
- pxor mm3,mm7
- psrlq mm7,1
- pxor mm3,mm1
- movq mm1,mm5
- psrlq mm5,13
- pxor mm7,mm3
- psllq mm6,3
- pxor mm1,mm5
- paddq mm7,QWORD PTR 200[esp]
- pxor mm1,mm6
- psrlq mm5,42
- paddq mm7,QWORD PTR 128[esp]
- pxor mm1,mm5
- psllq mm6,42
- movq mm5,QWORD PTR 40[esp]
- pxor mm1,mm6
- movq mm6,QWORD PTR 48[esp]
- paddq mm7,mm1
- movq mm1,mm4
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 32[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- movq QWORD PTR 72[esp],mm7
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR [esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 56[esp]
- pxor mm3,mm1
- psllq mm4,4
- paddq mm7,QWORD PTR [ebp]
- pxor mm3,mm4
- movq mm4,QWORD PTR 24[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 8[esp]
- psrlq mm5,6
- pxor mm7,mm6
- sub esp,8
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm7,QWORD PTR 192[esp]
- paddq mm0,mm6
- add ebp,8
- dec edx
- jnz $L00616_79_sse2
- paddq mm0,mm3
- movq mm1,QWORD PTR 8[esp]
- movq mm3,QWORD PTR 24[esp]
- movq mm5,QWORD PTR 40[esp]
- movq mm6,QWORD PTR 48[esp]
- movq mm7,QWORD PTR 56[esp]
- pxor mm2,mm1
- paddq mm0,QWORD PTR [esi]
- paddq mm1,QWORD PTR 8[esi]
- paddq mm2,QWORD PTR 16[esi]
- paddq mm3,QWORD PTR 24[esi]
- paddq mm4,QWORD PTR 32[esi]
- paddq mm5,QWORD PTR 40[esi]
- paddq mm6,QWORD PTR 48[esi]
- paddq mm7,QWORD PTR 56[esi]
- mov eax,640
- movq QWORD PTR [esi],mm0
- movq QWORD PTR 8[esi],mm1
- movq QWORD PTR 16[esi],mm2
- movq QWORD PTR 24[esi],mm3
- movq QWORD PTR 32[esi],mm4
- movq QWORD PTR 40[esi],mm5
- movq QWORD PTR 48[esi],mm6
- movq QWORD PTR 56[esi],mm7
- lea esp,DWORD PTR [eax*1+esp]
- sub ebp,eax
- cmp edi,DWORD PTR 88[esp]
- jb $L004loop_sse2
- mov esp,DWORD PTR 92[esp]
- emms
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-ALIGN 32
-$L003SSSE3:
- lea edx,DWORD PTR [esp-64]
- sub esp,256
- movdqa xmm1,XMMWORD PTR 640[ebp]
- movdqu xmm0,XMMWORD PTR [edi]
-DB 102,15,56,0,193
- movdqa xmm3,XMMWORD PTR [ebp]
- movdqa xmm2,xmm1
- movdqu xmm1,XMMWORD PTR 16[edi]
- paddq xmm3,xmm0
-DB 102,15,56,0,202
- movdqa XMMWORD PTR [edx-128],xmm3
- movdqa xmm4,XMMWORD PTR 16[ebp]
- movdqa xmm3,xmm2
- movdqu xmm2,XMMWORD PTR 32[edi]
- paddq xmm4,xmm1
-DB 102,15,56,0,211
- movdqa XMMWORD PTR [edx-112],xmm4
- movdqa xmm5,XMMWORD PTR 32[ebp]
- movdqa xmm4,xmm3
- movdqu xmm3,XMMWORD PTR 48[edi]
- paddq xmm5,xmm2
-DB 102,15,56,0,220
- movdqa XMMWORD PTR [edx-96],xmm5
- movdqa xmm6,XMMWORD PTR 48[ebp]
- movdqa xmm5,xmm4
- movdqu xmm4,XMMWORD PTR 64[edi]
- paddq xmm6,xmm3
-DB 102,15,56,0,229
- movdqa XMMWORD PTR [edx-80],xmm6
- movdqa xmm7,XMMWORD PTR 64[ebp]
- movdqa xmm6,xmm5
- movdqu xmm5,XMMWORD PTR 80[edi]
- paddq xmm7,xmm4
-DB 102,15,56,0,238
- movdqa XMMWORD PTR [edx-64],xmm7
- movdqa XMMWORD PTR [edx],xmm0
- movdqa xmm0,XMMWORD PTR 80[ebp]
- movdqa xmm7,xmm6
- movdqu xmm6,XMMWORD PTR 96[edi]
- paddq xmm0,xmm5
-DB 102,15,56,0,247
- movdqa XMMWORD PTR [edx-48],xmm0
- movdqa XMMWORD PTR 16[edx],xmm1
- movdqa xmm1,XMMWORD PTR 96[ebp]
- movdqa xmm0,xmm7
- movdqu xmm7,XMMWORD PTR 112[edi]
- paddq xmm1,xmm6
-DB 102,15,56,0,248
- movdqa XMMWORD PTR [edx-32],xmm1
- movdqa XMMWORD PTR 32[edx],xmm2
- movdqa xmm2,XMMWORD PTR 112[ebp]
- movdqa xmm0,XMMWORD PTR [edx]
- paddq xmm2,xmm7
- movdqa XMMWORD PTR [edx-16],xmm2
- nop
-ALIGN 32
-$L007loop_ssse3:
- movdqa xmm2,XMMWORD PTR 16[edx]
- movdqa XMMWORD PTR 48[edx],xmm3
- lea ebp,DWORD PTR 128[ebp]
- movq QWORD PTR 8[esp],mm1
- mov ebx,edi
- movq QWORD PTR 16[esp],mm2
- lea edi,DWORD PTR 128[edi]
- movq QWORD PTR 24[esp],mm3
- cmp edi,eax
- movq QWORD PTR 40[esp],mm5
- cmovb ebx,edi
- movq QWORD PTR 48[esp],mm6
- mov ecx,4
- pxor mm2,mm1
- movq QWORD PTR 56[esp],mm7
- pxor mm3,mm3
- jmp $L00800_47_ssse3
-ALIGN 32
-$L00800_47_ssse3:
- movdqa xmm3,xmm5
- movdqa xmm1,xmm2
-DB 102,15,58,15,208,8
- movdqa XMMWORD PTR [edx],xmm4
-DB 102,15,58,15,220,8
- movdqa xmm4,xmm2
- psrlq xmm2,7
- paddq xmm0,xmm3
- movdqa xmm3,xmm4
- psrlq xmm4,1
- psllq xmm3,56
- pxor xmm2,xmm4
- psrlq xmm4,7
- pxor xmm2,xmm3
- psllq xmm3,7
- pxor xmm2,xmm4
- movdqa xmm4,xmm7
- pxor xmm2,xmm3
- movdqa xmm3,xmm7
- psrlq xmm4,6
- paddq xmm0,xmm2
- movdqa xmm2,xmm7
- psrlq xmm3,19
- psllq xmm2,3
- pxor xmm4,xmm3
- psrlq xmm3,42
- pxor xmm4,xmm2
- psllq xmm2,42
- pxor xmm4,xmm3
- movdqa xmm3,XMMWORD PTR 32[edx]
- pxor xmm4,xmm2
- movdqa xmm2,XMMWORD PTR [ebp]
- movq mm1,mm4
- paddq xmm0,xmm4
- movq mm7,QWORD PTR [edx-128]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 32[esp],mm4
- paddq xmm2,xmm0
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR [esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 56[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 24[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 8[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 32[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 40[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-120]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 24[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 56[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 48[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 16[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR [esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 24[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 32[esp]
- movdqa XMMWORD PTR [edx-128],xmm2
- movdqa xmm4,xmm6
- movdqa xmm2,xmm3
-DB 102,15,58,15,217,8
- movdqa XMMWORD PTR 16[edx],xmm5
-DB 102,15,58,15,229,8
- movdqa xmm5,xmm3
- psrlq xmm3,7
- paddq xmm1,xmm4
- movdqa xmm4,xmm5
- psrlq xmm5,1
- psllq xmm4,56
- pxor xmm3,xmm5
- psrlq xmm5,7
- pxor xmm3,xmm4
- psllq xmm4,7
- pxor xmm3,xmm5
- movdqa xmm5,xmm0
- pxor xmm3,xmm4
- movdqa xmm4,xmm0
- psrlq xmm5,6
- paddq xmm1,xmm3
- movdqa xmm3,xmm0
- psrlq xmm4,19
- psllq xmm3,3
- pxor xmm5,xmm4
- psrlq xmm4,42
- pxor xmm5,xmm3
- psllq xmm3,42
- pxor xmm5,xmm4
- movdqa xmm4,XMMWORD PTR 48[edx]
- pxor xmm5,xmm3
- movdqa xmm3,XMMWORD PTR 16[ebp]
- movq mm1,mm4
- paddq xmm1,xmm5
- movq mm7,QWORD PTR [edx-112]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 16[esp],mm4
- paddq xmm3,xmm1
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 48[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 40[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 8[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 56[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 16[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 24[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-104]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 8[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 40[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 32[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR [esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 48[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 8[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 16[esp]
- movdqa XMMWORD PTR [edx-112],xmm3
- movdqa xmm5,xmm7
- movdqa xmm3,xmm4
-DB 102,15,58,15,226,8
- movdqa XMMWORD PTR 32[edx],xmm6
-DB 102,15,58,15,238,8
- movdqa xmm6,xmm4
- psrlq xmm4,7
- paddq xmm2,xmm5
- movdqa xmm5,xmm6
- psrlq xmm6,1
- psllq xmm5,56
- pxor xmm4,xmm6
- psrlq xmm6,7
- pxor xmm4,xmm5
- psllq xmm5,7
- pxor xmm4,xmm6
- movdqa xmm6,xmm1
- pxor xmm4,xmm5
- movdqa xmm5,xmm1
- psrlq xmm6,6
- paddq xmm2,xmm4
- movdqa xmm4,xmm1
- psrlq xmm5,19
- psllq xmm4,3
- pxor xmm6,xmm5
- psrlq xmm5,42
- pxor xmm6,xmm4
- psllq xmm4,42
- pxor xmm6,xmm5
- movdqa xmm5,XMMWORD PTR [edx]
- pxor xmm6,xmm4
- movdqa xmm4,XMMWORD PTR 32[ebp]
- movq mm1,mm4
- paddq xmm2,xmm6
- movq mm7,QWORD PTR [edx-96]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR [esp],mm4
- paddq xmm4,xmm2
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 32[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 24[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 56[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 40[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR [esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 8[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-88]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 56[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 24[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 16[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 48[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 32[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 56[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR [esp]
- movdqa XMMWORD PTR [edx-96],xmm4
- movdqa xmm6,xmm0
- movdqa xmm4,xmm5
-DB 102,15,58,15,235,8
- movdqa XMMWORD PTR 48[edx],xmm7
-DB 102,15,58,15,247,8
- movdqa xmm7,xmm5
- psrlq xmm5,7
- paddq xmm3,xmm6
- movdqa xmm6,xmm7
- psrlq xmm7,1
- psllq xmm6,56
- pxor xmm5,xmm7
- psrlq xmm7,7
- pxor xmm5,xmm6
- psllq xmm6,7
- pxor xmm5,xmm7
- movdqa xmm7,xmm2
- pxor xmm5,xmm6
- movdqa xmm6,xmm2
- psrlq xmm7,6
- paddq xmm3,xmm5
- movdqa xmm5,xmm2
- psrlq xmm6,19
- psllq xmm5,3
- pxor xmm7,xmm6
- psrlq xmm6,42
- pxor xmm7,xmm5
- psllq xmm5,42
- pxor xmm7,xmm6
- movdqa xmm6,XMMWORD PTR 16[edx]
- pxor xmm7,xmm5
- movdqa xmm5,XMMWORD PTR 48[ebp]
- movq mm1,mm4
- paddq xmm3,xmm7
- movq mm7,QWORD PTR [edx-80]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 48[esp],mm4
- paddq xmm5,xmm3
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 16[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 8[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 40[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 24[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 48[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 56[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-72]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 40[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 8[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR [esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 32[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 16[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 40[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 48[esp]
- movdqa XMMWORD PTR [edx-80],xmm5
- movdqa xmm7,xmm1
- movdqa xmm5,xmm6
-DB 102,15,58,15,244,8
- movdqa XMMWORD PTR [edx],xmm0
-DB 102,15,58,15,248,8
- movdqa xmm0,xmm6
- psrlq xmm6,7
- paddq xmm4,xmm7
- movdqa xmm7,xmm0
- psrlq xmm0,1
- psllq xmm7,56
- pxor xmm6,xmm0
- psrlq xmm0,7
- pxor xmm6,xmm7
- psllq xmm7,7
- pxor xmm6,xmm0
- movdqa xmm0,xmm3
- pxor xmm6,xmm7
- movdqa xmm7,xmm3
- psrlq xmm0,6
- paddq xmm4,xmm6
- movdqa xmm6,xmm3
- psrlq xmm7,19
- psllq xmm6,3
- pxor xmm0,xmm7
- psrlq xmm7,42
- pxor xmm0,xmm6
- psllq xmm6,42
- pxor xmm0,xmm7
- movdqa xmm7,XMMWORD PTR 32[edx]
- pxor xmm0,xmm6
- movdqa xmm6,XMMWORD PTR 64[ebp]
- movq mm1,mm4
- paddq xmm4,xmm0
- movq mm7,QWORD PTR [edx-64]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 32[esp],mm4
- paddq xmm6,xmm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR [esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 56[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 24[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 8[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 32[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 40[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-56]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 24[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 56[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 48[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 16[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR [esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 24[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 32[esp]
- movdqa XMMWORD PTR [edx-64],xmm6
- movdqa xmm0,xmm2
- movdqa xmm6,xmm7
-DB 102,15,58,15,253,8
- movdqa XMMWORD PTR 16[edx],xmm1
-DB 102,15,58,15,193,8
- movdqa xmm1,xmm7
- psrlq xmm7,7
- paddq xmm5,xmm0
- movdqa xmm0,xmm1
- psrlq xmm1,1
- psllq xmm0,56
- pxor xmm7,xmm1
- psrlq xmm1,7
- pxor xmm7,xmm0
- psllq xmm0,7
- pxor xmm7,xmm1
- movdqa xmm1,xmm4
- pxor xmm7,xmm0
- movdqa xmm0,xmm4
- psrlq xmm1,6
- paddq xmm5,xmm7
- movdqa xmm7,xmm4
- psrlq xmm0,19
- psllq xmm7,3
- pxor xmm1,xmm0
- psrlq xmm0,42
- pxor xmm1,xmm7
- psllq xmm7,42
- pxor xmm1,xmm0
- movdqa xmm0,XMMWORD PTR 48[edx]
- pxor xmm1,xmm7
- movdqa xmm7,XMMWORD PTR 80[ebp]
- movq mm1,mm4
- paddq xmm5,xmm1
- movq mm7,QWORD PTR [edx-48]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 16[esp],mm4
- paddq xmm7,xmm5
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 48[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 40[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 8[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 56[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 16[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 24[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-40]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 8[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 40[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 32[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR [esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 48[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 8[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 16[esp]
- movdqa XMMWORD PTR [edx-48],xmm7
- movdqa xmm1,xmm3
- movdqa xmm7,xmm0
-DB 102,15,58,15,198,8
- movdqa XMMWORD PTR 32[edx],xmm2
-DB 102,15,58,15,202,8
- movdqa xmm2,xmm0
- psrlq xmm0,7
- paddq xmm6,xmm1
- movdqa xmm1,xmm2
- psrlq xmm2,1
- psllq xmm1,56
- pxor xmm0,xmm2
- psrlq xmm2,7
- pxor xmm0,xmm1
- psllq xmm1,7
- pxor xmm0,xmm2
- movdqa xmm2,xmm5
- pxor xmm0,xmm1
- movdqa xmm1,xmm5
- psrlq xmm2,6
- paddq xmm6,xmm0
- movdqa xmm0,xmm5
- psrlq xmm1,19
- psllq xmm0,3
- pxor xmm2,xmm1
- psrlq xmm1,42
- pxor xmm2,xmm0
- psllq xmm0,42
- pxor xmm2,xmm1
- movdqa xmm1,XMMWORD PTR [edx]
- pxor xmm2,xmm0
- movdqa xmm0,XMMWORD PTR 96[ebp]
- movq mm1,mm4
- paddq xmm6,xmm2
- movq mm7,QWORD PTR [edx-32]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR [esp],mm4
- paddq xmm0,xmm6
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 32[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 24[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 56[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 40[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR [esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 8[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-24]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 56[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 24[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 16[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 48[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 32[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 56[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR [esp]
- movdqa XMMWORD PTR [edx-32],xmm0
- movdqa xmm2,xmm4
- movdqa xmm0,xmm1
-DB 102,15,58,15,207,8
- movdqa XMMWORD PTR 48[edx],xmm3
-DB 102,15,58,15,211,8
- movdqa xmm3,xmm1
- psrlq xmm1,7
- paddq xmm7,xmm2
- movdqa xmm2,xmm3
- psrlq xmm3,1
- psllq xmm2,56
- pxor xmm1,xmm3
- psrlq xmm3,7
- pxor xmm1,xmm2
- psllq xmm2,7
- pxor xmm1,xmm3
- movdqa xmm3,xmm6
- pxor xmm1,xmm2
- movdqa xmm2,xmm6
- psrlq xmm3,6
- paddq xmm7,xmm1
- movdqa xmm1,xmm6
- psrlq xmm2,19
- psllq xmm1,3
- pxor xmm3,xmm2
- psrlq xmm2,42
- pxor xmm3,xmm1
- psllq xmm1,42
- pxor xmm3,xmm2
- movdqa xmm2,XMMWORD PTR 16[edx]
- pxor xmm3,xmm1
- movdqa xmm1,XMMWORD PTR 112[ebp]
- movq mm1,mm4
- paddq xmm7,xmm3
- movq mm7,QWORD PTR [edx-16]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 48[esp],mm4
- paddq xmm1,xmm7
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 16[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 8[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 40[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 24[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 48[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 56[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-8]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 40[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 8[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR [esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 32[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 16[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 40[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 48[esp]
- movdqa XMMWORD PTR [edx-16],xmm1
- lea ebp,DWORD PTR 128[ebp]
- dec ecx
- jnz $L00800_47_ssse3
- movdqa xmm1,XMMWORD PTR [ebp]
- lea ebp,DWORD PTR [ebp-640]
- movdqu xmm0,XMMWORD PTR [ebx]
-DB 102,15,56,0,193
- movdqa xmm3,XMMWORD PTR [ebp]
- movdqa xmm2,xmm1
- movdqu xmm1,XMMWORD PTR 16[ebx]
- paddq xmm3,xmm0
-DB 102,15,56,0,202
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-128]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 32[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR [esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 56[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 24[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 8[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 32[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 40[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-120]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 24[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 56[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 48[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 16[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR [esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 24[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 32[esp]
- movdqa XMMWORD PTR [edx-128],xmm3
- movdqa xmm4,XMMWORD PTR 16[ebp]
- movdqa xmm3,xmm2
- movdqu xmm2,XMMWORD PTR 32[ebx]
- paddq xmm4,xmm1
-DB 102,15,56,0,211
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-112]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 16[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 48[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 40[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 8[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 56[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 16[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 24[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-104]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 8[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 40[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 32[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR [esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 48[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 8[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 16[esp]
- movdqa XMMWORD PTR [edx-112],xmm4
- movdqa xmm5,XMMWORD PTR 32[ebp]
- movdqa xmm4,xmm3
- movdqu xmm3,XMMWORD PTR 48[ebx]
- paddq xmm5,xmm2
-DB 102,15,56,0,220
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-96]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR [esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 32[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 24[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 56[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 40[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR [esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 8[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-88]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 56[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 24[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 16[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 48[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 32[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 56[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR [esp]
- movdqa XMMWORD PTR [edx-96],xmm5
- movdqa xmm6,XMMWORD PTR 48[ebp]
- movdqa xmm5,xmm4
- movdqu xmm4,XMMWORD PTR 64[ebx]
- paddq xmm6,xmm3
-DB 102,15,56,0,229
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-80]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 48[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 16[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 8[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 40[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 24[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 48[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 56[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-72]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 40[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 8[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR [esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 32[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 16[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 40[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 48[esp]
- movdqa XMMWORD PTR [edx-80],xmm6
- movdqa xmm7,XMMWORD PTR 64[ebp]
- movdqa xmm6,xmm5
- movdqu xmm5,XMMWORD PTR 80[ebx]
- paddq xmm7,xmm4
-DB 102,15,56,0,238
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-64]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 32[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR [esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 56[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 24[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 8[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 32[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 40[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-56]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 24[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 56[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 48[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 16[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR [esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 24[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 32[esp]
- movdqa XMMWORD PTR [edx-64],xmm7
- movdqa XMMWORD PTR [edx],xmm0
- movdqa xmm0,XMMWORD PTR 80[ebp]
- movdqa xmm7,xmm6
- movdqu xmm6,XMMWORD PTR 96[ebx]
- paddq xmm0,xmm5
-DB 102,15,56,0,247
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-48]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 16[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 48[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 40[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 8[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 56[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 16[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 24[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-40]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 8[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 40[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 32[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR [esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 48[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 8[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 16[esp]
- movdqa XMMWORD PTR [edx-48],xmm0
- movdqa XMMWORD PTR 16[edx],xmm1
- movdqa xmm1,XMMWORD PTR 96[ebp]
- movdqa xmm0,xmm7
- movdqu xmm7,XMMWORD PTR 112[ebx]
- paddq xmm1,xmm6
-DB 102,15,56,0,248
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-32]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR [esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 32[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 24[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 56[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 40[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR [esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 8[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-24]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 56[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 24[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 16[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 48[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 32[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 56[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR [esp]
- movdqa XMMWORD PTR [edx-32],xmm1
- movdqa XMMWORD PTR 32[edx],xmm2
- movdqa xmm2,XMMWORD PTR 112[ebp]
- movdqa xmm0,XMMWORD PTR [edx]
- paddq xmm2,xmm7
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-16]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 48[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm0,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 16[esp],mm0
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR 8[esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 40[esp]
- paddq mm3,mm7
- movq mm5,mm0
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm0
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 24[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm0,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm2,mm0
- psllq mm6,6
- pxor mm7,mm5
- pxor mm2,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 48[esp]
- paddq mm2,mm6
- movq mm6,QWORD PTR 56[esp]
- movq mm1,mm4
- movq mm7,QWORD PTR [edx-8]
- pxor mm5,mm6
- psrlq mm1,14
- movq QWORD PTR 40[esp],mm4
- pand mm5,mm4
- psllq mm4,23
- paddq mm2,mm3
- movq mm3,mm1
- psrlq mm1,4
- pxor mm5,mm6
- pxor mm3,mm4
- psllq mm4,23
- pxor mm3,mm1
- movq QWORD PTR 8[esp],mm2
- paddq mm7,mm5
- pxor mm3,mm4
- psrlq mm1,23
- paddq mm7,QWORD PTR [esp]
- pxor mm3,mm1
- psllq mm4,4
- pxor mm3,mm4
- movq mm4,QWORD PTR 32[esp]
- paddq mm3,mm7
- movq mm5,mm2
- psrlq mm5,28
- paddq mm4,mm3
- movq mm6,mm2
- movq mm7,mm5
- psllq mm6,25
- movq mm1,QWORD PTR 16[esp]
- psrlq mm5,6
- pxor mm7,mm6
- psllq mm6,5
- pxor mm7,mm5
- pxor mm2,mm1
- psrlq mm5,5
- pxor mm7,mm6
- pand mm0,mm2
- psllq mm6,6
- pxor mm7,mm5
- pxor mm0,mm1
- pxor mm6,mm7
- movq mm5,QWORD PTR 40[esp]
- paddq mm0,mm6
- movq mm6,QWORD PTR 48[esp]
- movdqa XMMWORD PTR [edx-16],xmm2
- movq mm1,QWORD PTR 8[esp]
- paddq mm0,mm3
- movq mm3,QWORD PTR 24[esp]
- movq mm7,QWORD PTR 56[esp]
- pxor mm2,mm1
- paddq mm0,QWORD PTR [esi]
- paddq mm1,QWORD PTR 8[esi]
- paddq mm2,QWORD PTR 16[esi]
- paddq mm3,QWORD PTR 24[esi]
- paddq mm4,QWORD PTR 32[esi]
- paddq mm5,QWORD PTR 40[esi]
- paddq mm6,QWORD PTR 48[esi]
- paddq mm7,QWORD PTR 56[esi]
- movq QWORD PTR [esi],mm0
- movq QWORD PTR 8[esi],mm1
- movq QWORD PTR 16[esi],mm2
- movq QWORD PTR 24[esi],mm3
- movq QWORD PTR 32[esi],mm4
- movq QWORD PTR 40[esi],mm5
- movq QWORD PTR 48[esi],mm6
- movq QWORD PTR 56[esi],mm7
- cmp edi,eax
- jb $L007loop_ssse3
- mov esp,DWORD PTR 76[edx]
- emms
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-ALIGN 16
-$L002loop_x86:
- mov eax,DWORD PTR [edi]
- mov ebx,DWORD PTR 4[edi]
- mov ecx,DWORD PTR 8[edi]
- mov edx,DWORD PTR 12[edi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- push eax
- push ebx
- push ecx
- push edx
- mov eax,DWORD PTR 16[edi]
- mov ebx,DWORD PTR 20[edi]
- mov ecx,DWORD PTR 24[edi]
- mov edx,DWORD PTR 28[edi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- push eax
- push ebx
- push ecx
- push edx
- mov eax,DWORD PTR 32[edi]
- mov ebx,DWORD PTR 36[edi]
- mov ecx,DWORD PTR 40[edi]
- mov edx,DWORD PTR 44[edi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- push eax
- push ebx
- push ecx
- push edx
- mov eax,DWORD PTR 48[edi]
- mov ebx,DWORD PTR 52[edi]
- mov ecx,DWORD PTR 56[edi]
- mov edx,DWORD PTR 60[edi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- push eax
- push ebx
- push ecx
- push edx
- mov eax,DWORD PTR 64[edi]
- mov ebx,DWORD PTR 68[edi]
- mov ecx,DWORD PTR 72[edi]
- mov edx,DWORD PTR 76[edi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- push eax
- push ebx
- push ecx
- push edx
- mov eax,DWORD PTR 80[edi]
- mov ebx,DWORD PTR 84[edi]
- mov ecx,DWORD PTR 88[edi]
- mov edx,DWORD PTR 92[edi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- push eax
- push ebx
- push ecx
- push edx
- mov eax,DWORD PTR 96[edi]
- mov ebx,DWORD PTR 100[edi]
- mov ecx,DWORD PTR 104[edi]
- mov edx,DWORD PTR 108[edi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- push eax
- push ebx
- push ecx
- push edx
- mov eax,DWORD PTR 112[edi]
- mov ebx,DWORD PTR 116[edi]
- mov ecx,DWORD PTR 120[edi]
- mov edx,DWORD PTR 124[edi]
- bswap eax
- bswap ebx
- bswap ecx
- bswap edx
- push eax
- push ebx
- push ecx
- push edx
- add edi,128
- sub esp,72
- mov DWORD PTR 204[esp],edi
- lea edi,DWORD PTR 8[esp]
- mov ecx,16
-DD 2784229001
-ALIGN 16
-$L00900_15_x86:
- mov ecx,DWORD PTR 40[esp]
- mov edx,DWORD PTR 44[esp]
- mov esi,ecx
- shr ecx,9
- mov edi,edx
- shr edx,9
- mov ebx,ecx
- shl esi,14
- mov eax,edx
- shl edi,14
- xor ebx,esi
- shr ecx,5
- xor eax,edi
- shr edx,5
- xor eax,ecx
- shl esi,4
- xor ebx,edx
- shl edi,4
- xor ebx,esi
- shr ecx,4
- xor eax,edi
- shr edx,4
- xor eax,ecx
- shl esi,5
- xor ebx,edx
- shl edi,5
- xor eax,esi
- xor ebx,edi
- mov ecx,DWORD PTR 48[esp]
- mov edx,DWORD PTR 52[esp]
- mov esi,DWORD PTR 56[esp]
- mov edi,DWORD PTR 60[esp]
- add eax,DWORD PTR 64[esp]
- adc ebx,DWORD PTR 68[esp]
- xor ecx,esi
- xor edx,edi
- and ecx,DWORD PTR 40[esp]
- and edx,DWORD PTR 44[esp]
- add eax,DWORD PTR 192[esp]
- adc ebx,DWORD PTR 196[esp]
- xor ecx,esi
- xor edx,edi
- mov esi,DWORD PTR [ebp]
- mov edi,DWORD PTR 4[ebp]
- add eax,ecx
- adc ebx,edx
- mov ecx,DWORD PTR 32[esp]
- mov edx,DWORD PTR 36[esp]
- add eax,esi
- adc ebx,edi
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],ebx
- add eax,ecx
- adc ebx,edx
- mov ecx,DWORD PTR 8[esp]
- mov edx,DWORD PTR 12[esp]
- mov DWORD PTR 32[esp],eax
- mov DWORD PTR 36[esp],ebx
- mov esi,ecx
- shr ecx,2
- mov edi,edx
- shr edx,2
- mov ebx,ecx
- shl esi,4
- mov eax,edx
- shl edi,4
- xor ebx,esi
- shr ecx,5
- xor eax,edi
- shr edx,5
- xor ebx,ecx
- shl esi,21
- xor eax,edx
- shl edi,21
- xor eax,esi
- shr ecx,21
- xor ebx,edi
- shr edx,21
- xor eax,ecx
- shl esi,5
- xor ebx,edx
- shl edi,5
- xor eax,esi
- xor ebx,edi
- mov ecx,DWORD PTR 8[esp]
- mov edx,DWORD PTR 12[esp]
- mov esi,DWORD PTR 16[esp]
- mov edi,DWORD PTR 20[esp]
- add eax,DWORD PTR [esp]
- adc ebx,DWORD PTR 4[esp]
- or ecx,esi
- or edx,edi
- and ecx,DWORD PTR 24[esp]
- and edx,DWORD PTR 28[esp]
- and esi,DWORD PTR 8[esp]
- and edi,DWORD PTR 12[esp]
- or ecx,esi
- or edx,edi
- add eax,ecx
- adc ebx,edx
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],ebx
- mov dl,BYTE PTR [ebp]
- sub esp,8
- lea ebp,DWORD PTR 8[ebp]
- cmp dl,148
- jne $L00900_15_x86
-ALIGN 16
-$L01016_79_x86:
- mov ecx,DWORD PTR 312[esp]
- mov edx,DWORD PTR 316[esp]
- mov esi,ecx
- shr ecx,1
- mov edi,edx
- shr edx,1
- mov eax,ecx
- shl esi,24
- mov ebx,edx
- shl edi,24
- xor ebx,esi
- shr ecx,6
- xor eax,edi
- shr edx,6
- xor eax,ecx
- shl esi,7
- xor ebx,edx
- shl edi,1
- xor ebx,esi
- shr ecx,1
- xor eax,edi
- shr edx,1
- xor eax,ecx
- shl edi,6
- xor ebx,edx
- xor eax,edi
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],ebx
- mov ecx,DWORD PTR 208[esp]
- mov edx,DWORD PTR 212[esp]
- mov esi,ecx
- shr ecx,6
- mov edi,edx
- shr edx,6
- mov eax,ecx
- shl esi,3
- mov ebx,edx
- shl edi,3
- xor eax,esi
- shr ecx,13
- xor ebx,edi
- shr edx,13
- xor eax,ecx
- shl esi,10
- xor ebx,edx
- shl edi,10
- xor ebx,esi
- shr ecx,10
- xor eax,edi
- shr edx,10
- xor ebx,ecx
- shl edi,13
- xor eax,edx
- xor eax,edi
- mov ecx,DWORD PTR 320[esp]
- mov edx,DWORD PTR 324[esp]
- add eax,DWORD PTR [esp]
- adc ebx,DWORD PTR 4[esp]
- mov esi,DWORD PTR 248[esp]
- mov edi,DWORD PTR 252[esp]
- add eax,ecx
- adc ebx,edx
- add eax,esi
- adc ebx,edi
- mov DWORD PTR 192[esp],eax
- mov DWORD PTR 196[esp],ebx
- mov ecx,DWORD PTR 40[esp]
- mov edx,DWORD PTR 44[esp]
- mov esi,ecx
- shr ecx,9
- mov edi,edx
- shr edx,9
- mov ebx,ecx
- shl esi,14
- mov eax,edx
- shl edi,14
- xor ebx,esi
- shr ecx,5
- xor eax,edi
- shr edx,5
- xor eax,ecx
- shl esi,4
- xor ebx,edx
- shl edi,4
- xor ebx,esi
- shr ecx,4
- xor eax,edi
- shr edx,4
- xor eax,ecx
- shl esi,5
- xor ebx,edx
- shl edi,5
- xor eax,esi
- xor ebx,edi
- mov ecx,DWORD PTR 48[esp]
- mov edx,DWORD PTR 52[esp]
- mov esi,DWORD PTR 56[esp]
- mov edi,DWORD PTR 60[esp]
- add eax,DWORD PTR 64[esp]
- adc ebx,DWORD PTR 68[esp]
- xor ecx,esi
- xor edx,edi
- and ecx,DWORD PTR 40[esp]
- and edx,DWORD PTR 44[esp]
- add eax,DWORD PTR 192[esp]
- adc ebx,DWORD PTR 196[esp]
- xor ecx,esi
- xor edx,edi
- mov esi,DWORD PTR [ebp]
- mov edi,DWORD PTR 4[ebp]
- add eax,ecx
- adc ebx,edx
- mov ecx,DWORD PTR 32[esp]
- mov edx,DWORD PTR 36[esp]
- add eax,esi
- adc ebx,edi
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],ebx
- add eax,ecx
- adc ebx,edx
- mov ecx,DWORD PTR 8[esp]
- mov edx,DWORD PTR 12[esp]
- mov DWORD PTR 32[esp],eax
- mov DWORD PTR 36[esp],ebx
- mov esi,ecx
- shr ecx,2
- mov edi,edx
- shr edx,2
- mov ebx,ecx
- shl esi,4
- mov eax,edx
- shl edi,4
- xor ebx,esi
- shr ecx,5
- xor eax,edi
- shr edx,5
- xor ebx,ecx
- shl esi,21
- xor eax,edx
- shl edi,21
- xor eax,esi
- shr ecx,21
- xor ebx,edi
- shr edx,21
- xor eax,ecx
- shl esi,5
- xor ebx,edx
- shl edi,5
- xor eax,esi
- xor ebx,edi
- mov ecx,DWORD PTR 8[esp]
- mov edx,DWORD PTR 12[esp]
- mov esi,DWORD PTR 16[esp]
- mov edi,DWORD PTR 20[esp]
- add eax,DWORD PTR [esp]
- adc ebx,DWORD PTR 4[esp]
- or ecx,esi
- or edx,edi
- and ecx,DWORD PTR 24[esp]
- and edx,DWORD PTR 28[esp]
- and esi,DWORD PTR 8[esp]
- and edi,DWORD PTR 12[esp]
- or ecx,esi
- or edx,edi
- add eax,ecx
- adc ebx,edx
- mov DWORD PTR [esp],eax
- mov DWORD PTR 4[esp],ebx
- mov dl,BYTE PTR [ebp]
- sub esp,8
- lea ebp,DWORD PTR 8[ebp]
- cmp dl,23
- jne $L01016_79_x86
- mov esi,DWORD PTR 840[esp]
- mov edi,DWORD PTR 844[esp]
- mov eax,DWORD PTR [esi]
- mov ebx,DWORD PTR 4[esi]
- mov ecx,DWORD PTR 8[esi]
- mov edx,DWORD PTR 12[esi]
- add eax,DWORD PTR 8[esp]
- adc ebx,DWORD PTR 12[esp]
- mov DWORD PTR [esi],eax
- mov DWORD PTR 4[esi],ebx
- add ecx,DWORD PTR 16[esp]
- adc edx,DWORD PTR 20[esp]
- mov DWORD PTR 8[esi],ecx
- mov DWORD PTR 12[esi],edx
- mov eax,DWORD PTR 16[esi]
- mov ebx,DWORD PTR 20[esi]
- mov ecx,DWORD PTR 24[esi]
- mov edx,DWORD PTR 28[esi]
- add eax,DWORD PTR 24[esp]
- adc ebx,DWORD PTR 28[esp]
- mov DWORD PTR 16[esi],eax
- mov DWORD PTR 20[esi],ebx
- add ecx,DWORD PTR 32[esp]
- adc edx,DWORD PTR 36[esp]
- mov DWORD PTR 24[esi],ecx
- mov DWORD PTR 28[esi],edx
- mov eax,DWORD PTR 32[esi]
- mov ebx,DWORD PTR 36[esi]
- mov ecx,DWORD PTR 40[esi]
- mov edx,DWORD PTR 44[esi]
- add eax,DWORD PTR 40[esp]
- adc ebx,DWORD PTR 44[esp]
- mov DWORD PTR 32[esi],eax
- mov DWORD PTR 36[esi],ebx
- add ecx,DWORD PTR 48[esp]
- adc edx,DWORD PTR 52[esp]
- mov DWORD PTR 40[esi],ecx
- mov DWORD PTR 44[esi],edx
- mov eax,DWORD PTR 48[esi]
- mov ebx,DWORD PTR 52[esi]
- mov ecx,DWORD PTR 56[esi]
- mov edx,DWORD PTR 60[esi]
- add eax,DWORD PTR 56[esp]
- adc ebx,DWORD PTR 60[esp]
- mov DWORD PTR 48[esi],eax
- mov DWORD PTR 52[esi],ebx
- add ecx,DWORD PTR 64[esp]
- adc edx,DWORD PTR 68[esp]
- mov DWORD PTR 56[esi],ecx
- mov DWORD PTR 60[esi],edx
- add esp,840
- sub ebp,640
- cmp edi,DWORD PTR 8[esp]
- jb $L002loop_x86
- mov esp,DWORD PTR 12[esp]
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-ALIGN 64
-$L001K512:
-DD 3609767458,1116352408
-DD 602891725,1899447441
-DD 3964484399,3049323471
-DD 2173295548,3921009573
-DD 4081628472,961987163
-DD 3053834265,1508970993
-DD 2937671579,2453635748
-DD 3664609560,2870763221
-DD 2734883394,3624381080
-DD 1164996542,310598401
-DD 1323610764,607225278
-DD 3590304994,1426881987
-DD 4068182383,1925078388
-DD 991336113,2162078206
-DD 633803317,2614888103
-DD 3479774868,3248222580
-DD 2666613458,3835390401
-DD 944711139,4022224774
-DD 2341262773,264347078
-DD 2007800933,604807628
-DD 1495990901,770255983
-DD 1856431235,1249150122
-DD 3175218132,1555081692
-DD 2198950837,1996064986
-DD 3999719339,2554220882
-DD 766784016,2821834349
-DD 2566594879,2952996808
-DD 3203337956,3210313671
-DD 1034457026,3336571891
-DD 2466948901,3584528711
-DD 3758326383,113926993
-DD 168717936,338241895
-DD 1188179964,666307205
-DD 1546045734,773529912
-DD 1522805485,1294757372
-DD 2643833823,1396182291
-DD 2343527390,1695183700
-DD 1014477480,1986661051
-DD 1206759142,2177026350
-DD 344077627,2456956037
-DD 1290863460,2730485921
-DD 3158454273,2820302411
-DD 3505952657,3259730800
-DD 106217008,3345764771
-DD 3606008344,3516065817
-DD 1432725776,3600352804
-DD 1467031594,4094571909
-DD 851169720,275423344
-DD 3100823752,430227734
-DD 1363258195,506948616
-DD 3750685593,659060556
-DD 3785050280,883997877
-DD 3318307427,958139571
-DD 3812723403,1322822218
-DD 2003034995,1537002063
-DD 3602036899,1747873779
-DD 1575990012,1955562222
-DD 1125592928,2024104815
-DD 2716904306,2227730452
-DD 442776044,2361852424
-DD 593698344,2428436474
-DD 3733110249,2756734187
-DD 2999351573,3204031479
-DD 3815920427,3329325298
-DD 3928383900,3391569614
-DD 566280711,3515267271
-DD 3454069534,3940187606
-DD 4000239992,4118630271
-DD 1914138554,116418474
-DD 2731055270,174292421
-DD 3203993006,289380356
-DD 320620315,460393269
-DD 587496836,685471733
-DD 1086792851,852142971
-DD 365543100,1017036298
-DD 2618297676,1126000580
-DD 3409855158,1288033470
-DD 4234509866,1501505948
-DD 987167468,1607167915
-DD 1246189591,1816402316
-DD 67438087,66051
-DD 202182159,134810123
-_sha512_block_data_order ENDP
-DB 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
-DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
-DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
-DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
-DB 62,0
-.text$ ENDS
-.bss SEGMENT 'BSS'
-COMM _OPENSSL_ia32cap_P:DWORD:4
-.bss ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+;EXTERN _OPENSSL_ia32cap_P:NEAR
+ALIGN 16
+_sha512_block_data_order PROC PUBLIC
+$L_sha512_block_data_order_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov esi,DWORD PTR 20[esp]
+ mov edi,DWORD PTR 24[esp]
+ mov eax,DWORD PTR 28[esp]
+ mov ebx,esp
+ call $L000pic_point
+$L000pic_point:
+ pop ebp
+ lea ebp,DWORD PTR ($L001K512-$L000pic_point)[ebp]
+ sub esp,16
+ and esp,-64
+ shl eax,7
+ add eax,edi
+ mov DWORD PTR [esp],esi
+ mov DWORD PTR 4[esp],edi
+ mov DWORD PTR 8[esp],eax
+ mov DWORD PTR 12[esp],ebx
+ lea edx,DWORD PTR _OPENSSL_ia32cap_P
+ mov ecx,DWORD PTR [edx]
+ test ecx,67108864
+ jz $L002loop_x86
+ mov edx,DWORD PTR 4[edx]
+ movq mm0,QWORD PTR [esi]
+ and ecx,16777216
+ movq mm1,QWORD PTR 8[esi]
+ and edx,512
+ movq mm2,QWORD PTR 16[esi]
+ or ecx,edx
+ movq mm3,QWORD PTR 24[esi]
+ movq mm4,QWORD PTR 32[esi]
+ movq mm5,QWORD PTR 40[esi]
+ movq mm6,QWORD PTR 48[esi]
+ movq mm7,QWORD PTR 56[esi]
+ cmp ecx,16777728
+ je $L003SSSE3
+ sub esp,80
+ jmp $L004loop_sse2
+ALIGN 16
+$L004loop_sse2:
+ movq QWORD PTR 8[esp],mm1
+ movq QWORD PTR 16[esp],mm2
+ movq QWORD PTR 24[esp],mm3
+ movq QWORD PTR 40[esp],mm5
+ movq QWORD PTR 48[esp],mm6
+ pxor mm2,mm1
+ movq QWORD PTR 56[esp],mm7
+ movq mm3,mm0
+ mov eax,DWORD PTR [edi]
+ mov ebx,DWORD PTR 4[edi]
+ add edi,8
+ mov edx,15
+ bswap eax
+ bswap ebx
+ jmp $L00500_14_sse2
+ALIGN 16
+$L00500_14_sse2:
+ movd mm1,eax
+ mov eax,DWORD PTR [edi]
+ movd mm7,ebx
+ mov ebx,DWORD PTR 4[edi]
+ add edi,8
+ bswap eax
+ bswap ebx
+ punpckldq mm7,mm1
+ movq mm1,mm4
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 32[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ movq mm0,mm3
+ movq QWORD PTR 72[esp],mm7
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR [esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 56[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ paddq mm7,QWORD PTR [ebp]
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 24[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 8[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ sub esp,8
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 40[esp]
+ paddq mm3,mm2
+ movq mm2,mm0
+ add ebp,8
+ paddq mm3,mm6
+ movq mm6,QWORD PTR 48[esp]
+ dec edx
+ jnz $L00500_14_sse2
+ movd mm1,eax
+ movd mm7,ebx
+ punpckldq mm7,mm1
+ movq mm1,mm4
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 32[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ movq mm0,mm3
+ movq QWORD PTR 72[esp],mm7
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR [esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 56[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ paddq mm7,QWORD PTR [ebp]
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 24[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 8[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ sub esp,8
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm7,QWORD PTR 192[esp]
+ paddq mm3,mm2
+ movq mm2,mm0
+ add ebp,8
+ paddq mm3,mm6
+ pxor mm0,mm0
+ mov edx,32
+ jmp $L00616_79_sse2
+ALIGN 16
+$L00616_79_sse2:
+ movq mm5,QWORD PTR 88[esp]
+ movq mm1,mm7
+ psrlq mm7,1
+ movq mm6,mm5
+ psrlq mm5,6
+ psllq mm1,56
+ paddq mm0,mm3
+ movq mm3,mm7
+ psrlq mm7,6
+ pxor mm3,mm1
+ psllq mm1,7
+ pxor mm3,mm7
+ psrlq mm7,1
+ pxor mm3,mm1
+ movq mm1,mm5
+ psrlq mm5,13
+ pxor mm7,mm3
+ psllq mm6,3
+ pxor mm1,mm5
+ paddq mm7,QWORD PTR 200[esp]
+ pxor mm1,mm6
+ psrlq mm5,42
+ paddq mm7,QWORD PTR 128[esp]
+ pxor mm1,mm5
+ psllq mm6,42
+ movq mm5,QWORD PTR 40[esp]
+ pxor mm1,mm6
+ movq mm6,QWORD PTR 48[esp]
+ paddq mm7,mm1
+ movq mm1,mm4
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 32[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ movq QWORD PTR 72[esp],mm7
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR [esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 56[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ paddq mm7,QWORD PTR [ebp]
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 24[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 8[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ sub esp,8
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm7,QWORD PTR 192[esp]
+ paddq mm2,mm6
+ add ebp,8
+ movq mm5,QWORD PTR 88[esp]
+ movq mm1,mm7
+ psrlq mm7,1
+ movq mm6,mm5
+ psrlq mm5,6
+ psllq mm1,56
+ paddq mm2,mm3
+ movq mm3,mm7
+ psrlq mm7,6
+ pxor mm3,mm1
+ psllq mm1,7
+ pxor mm3,mm7
+ psrlq mm7,1
+ pxor mm3,mm1
+ movq mm1,mm5
+ psrlq mm5,13
+ pxor mm7,mm3
+ psllq mm6,3
+ pxor mm1,mm5
+ paddq mm7,QWORD PTR 200[esp]
+ pxor mm1,mm6
+ psrlq mm5,42
+ paddq mm7,QWORD PTR 128[esp]
+ pxor mm1,mm5
+ psllq mm6,42
+ movq mm5,QWORD PTR 40[esp]
+ pxor mm1,mm6
+ movq mm6,QWORD PTR 48[esp]
+ paddq mm7,mm1
+ movq mm1,mm4
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 32[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ movq QWORD PTR 72[esp],mm7
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR [esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 56[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ paddq mm7,QWORD PTR [ebp]
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 24[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 8[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ sub esp,8
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm7,QWORD PTR 192[esp]
+ paddq mm0,mm6
+ add ebp,8
+ dec edx
+ jnz $L00616_79_sse2
+ paddq mm0,mm3
+ movq mm1,QWORD PTR 8[esp]
+ movq mm3,QWORD PTR 24[esp]
+ movq mm5,QWORD PTR 40[esp]
+ movq mm6,QWORD PTR 48[esp]
+ movq mm7,QWORD PTR 56[esp]
+ pxor mm2,mm1
+ paddq mm0,QWORD PTR [esi]
+ paddq mm1,QWORD PTR 8[esi]
+ paddq mm2,QWORD PTR 16[esi]
+ paddq mm3,QWORD PTR 24[esi]
+ paddq mm4,QWORD PTR 32[esi]
+ paddq mm5,QWORD PTR 40[esi]
+ paddq mm6,QWORD PTR 48[esi]
+ paddq mm7,QWORD PTR 56[esi]
+ mov eax,640
+ movq QWORD PTR [esi],mm0
+ movq QWORD PTR 8[esi],mm1
+ movq QWORD PTR 16[esi],mm2
+ movq QWORD PTR 24[esi],mm3
+ movq QWORD PTR 32[esi],mm4
+ movq QWORD PTR 40[esi],mm5
+ movq QWORD PTR 48[esi],mm6
+ movq QWORD PTR 56[esi],mm7
+ lea esp,DWORD PTR [eax*1+esp]
+ sub ebp,eax
+ cmp edi,DWORD PTR 88[esp]
+ jb $L004loop_sse2
+ mov esp,DWORD PTR 92[esp]
+ emms
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+ALIGN 32
+$L003SSSE3:
+ lea edx,DWORD PTR [esp-64]
+ sub esp,256
+ movdqa xmm1,XMMWORD PTR 640[ebp]
+ movdqu xmm0,XMMWORD PTR [edi]
+DB 102,15,56,0,193
+ movdqa xmm3,XMMWORD PTR [ebp]
+ movdqa xmm2,xmm1
+ movdqu xmm1,XMMWORD PTR 16[edi]
+ paddq xmm3,xmm0
+DB 102,15,56,0,202
+ movdqa XMMWORD PTR [edx-128],xmm3
+ movdqa xmm4,XMMWORD PTR 16[ebp]
+ movdqa xmm3,xmm2
+ movdqu xmm2,XMMWORD PTR 32[edi]
+ paddq xmm4,xmm1
+DB 102,15,56,0,211
+ movdqa XMMWORD PTR [edx-112],xmm4
+ movdqa xmm5,XMMWORD PTR 32[ebp]
+ movdqa xmm4,xmm3
+ movdqu xmm3,XMMWORD PTR 48[edi]
+ paddq xmm5,xmm2
+DB 102,15,56,0,220
+ movdqa XMMWORD PTR [edx-96],xmm5
+ movdqa xmm6,XMMWORD PTR 48[ebp]
+ movdqa xmm5,xmm4
+ movdqu xmm4,XMMWORD PTR 64[edi]
+ paddq xmm6,xmm3
+DB 102,15,56,0,229
+ movdqa XMMWORD PTR [edx-80],xmm6
+ movdqa xmm7,XMMWORD PTR 64[ebp]
+ movdqa xmm6,xmm5
+ movdqu xmm5,XMMWORD PTR 80[edi]
+ paddq xmm7,xmm4
+DB 102,15,56,0,238
+ movdqa XMMWORD PTR [edx-64],xmm7
+ movdqa XMMWORD PTR [edx],xmm0
+ movdqa xmm0,XMMWORD PTR 80[ebp]
+ movdqa xmm7,xmm6
+ movdqu xmm6,XMMWORD PTR 96[edi]
+ paddq xmm0,xmm5
+DB 102,15,56,0,247
+ movdqa XMMWORD PTR [edx-48],xmm0
+ movdqa XMMWORD PTR 16[edx],xmm1
+ movdqa xmm1,XMMWORD PTR 96[ebp]
+ movdqa xmm0,xmm7
+ movdqu xmm7,XMMWORD PTR 112[edi]
+ paddq xmm1,xmm6
+DB 102,15,56,0,248
+ movdqa XMMWORD PTR [edx-32],xmm1
+ movdqa XMMWORD PTR 32[edx],xmm2
+ movdqa xmm2,XMMWORD PTR 112[ebp]
+ movdqa xmm0,XMMWORD PTR [edx]
+ paddq xmm2,xmm7
+ movdqa XMMWORD PTR [edx-16],xmm2
+ nop
+ALIGN 32
+$L007loop_ssse3:
+ movdqa xmm2,XMMWORD PTR 16[edx]
+ movdqa XMMWORD PTR 48[edx],xmm3
+ lea ebp,DWORD PTR 128[ebp]
+ movq QWORD PTR 8[esp],mm1
+ mov ebx,edi
+ movq QWORD PTR 16[esp],mm2
+ lea edi,DWORD PTR 128[edi]
+ movq QWORD PTR 24[esp],mm3
+ cmp edi,eax
+ movq QWORD PTR 40[esp],mm5
+ cmovb ebx,edi
+ movq QWORD PTR 48[esp],mm6
+ mov ecx,4
+ pxor mm2,mm1
+ movq QWORD PTR 56[esp],mm7
+ pxor mm3,mm3
+ jmp $L00800_47_ssse3
+ALIGN 32
+$L00800_47_ssse3:
+ movdqa xmm3,xmm5
+ movdqa xmm1,xmm2
+DB 102,15,58,15,208,8
+ movdqa XMMWORD PTR [edx],xmm4
+DB 102,15,58,15,220,8
+ movdqa xmm4,xmm2
+ psrlq xmm2,7
+ paddq xmm0,xmm3
+ movdqa xmm3,xmm4
+ psrlq xmm4,1
+ psllq xmm3,56
+ pxor xmm2,xmm4
+ psrlq xmm4,7
+ pxor xmm2,xmm3
+ psllq xmm3,7
+ pxor xmm2,xmm4
+ movdqa xmm4,xmm7
+ pxor xmm2,xmm3
+ movdqa xmm3,xmm7
+ psrlq xmm4,6
+ paddq xmm0,xmm2
+ movdqa xmm2,xmm7
+ psrlq xmm3,19
+ psllq xmm2,3
+ pxor xmm4,xmm3
+ psrlq xmm3,42
+ pxor xmm4,xmm2
+ psllq xmm2,42
+ pxor xmm4,xmm3
+ movdqa xmm3,XMMWORD PTR 32[edx]
+ pxor xmm4,xmm2
+ movdqa xmm2,XMMWORD PTR [ebp]
+ movq mm1,mm4
+ paddq xmm0,xmm4
+ movq mm7,QWORD PTR [edx-128]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 32[esp],mm4
+ paddq xmm2,xmm0
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR [esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 56[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 24[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 8[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 32[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 40[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-120]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 24[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 56[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 48[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 16[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR [esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 24[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 32[esp]
+ movdqa XMMWORD PTR [edx-128],xmm2
+ movdqa xmm4,xmm6
+ movdqa xmm2,xmm3
+DB 102,15,58,15,217,8
+ movdqa XMMWORD PTR 16[edx],xmm5
+DB 102,15,58,15,229,8
+ movdqa xmm5,xmm3
+ psrlq xmm3,7
+ paddq xmm1,xmm4
+ movdqa xmm4,xmm5
+ psrlq xmm5,1
+ psllq xmm4,56
+ pxor xmm3,xmm5
+ psrlq xmm5,7
+ pxor xmm3,xmm4
+ psllq xmm4,7
+ pxor xmm3,xmm5
+ movdqa xmm5,xmm0
+ pxor xmm3,xmm4
+ movdqa xmm4,xmm0
+ psrlq xmm5,6
+ paddq xmm1,xmm3
+ movdqa xmm3,xmm0
+ psrlq xmm4,19
+ psllq xmm3,3
+ pxor xmm5,xmm4
+ psrlq xmm4,42
+ pxor xmm5,xmm3
+ psllq xmm3,42
+ pxor xmm5,xmm4
+ movdqa xmm4,XMMWORD PTR 48[edx]
+ pxor xmm5,xmm3
+ movdqa xmm3,XMMWORD PTR 16[ebp]
+ movq mm1,mm4
+ paddq xmm1,xmm5
+ movq mm7,QWORD PTR [edx-112]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 16[esp],mm4
+ paddq xmm3,xmm1
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 48[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 40[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 8[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 56[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 16[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 24[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-104]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 8[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 40[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 32[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR [esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 48[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 8[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 16[esp]
+ movdqa XMMWORD PTR [edx-112],xmm3
+ movdqa xmm5,xmm7
+ movdqa xmm3,xmm4
+DB 102,15,58,15,226,8
+ movdqa XMMWORD PTR 32[edx],xmm6
+DB 102,15,58,15,238,8
+ movdqa xmm6,xmm4
+ psrlq xmm4,7
+ paddq xmm2,xmm5
+ movdqa xmm5,xmm6
+ psrlq xmm6,1
+ psllq xmm5,56
+ pxor xmm4,xmm6
+ psrlq xmm6,7
+ pxor xmm4,xmm5
+ psllq xmm5,7
+ pxor xmm4,xmm6
+ movdqa xmm6,xmm1
+ pxor xmm4,xmm5
+ movdqa xmm5,xmm1
+ psrlq xmm6,6
+ paddq xmm2,xmm4
+ movdqa xmm4,xmm1
+ psrlq xmm5,19
+ psllq xmm4,3
+ pxor xmm6,xmm5
+ psrlq xmm5,42
+ pxor xmm6,xmm4
+ psllq xmm4,42
+ pxor xmm6,xmm5
+ movdqa xmm5,XMMWORD PTR [edx]
+ pxor xmm6,xmm4
+ movdqa xmm4,XMMWORD PTR 32[ebp]
+ movq mm1,mm4
+ paddq xmm2,xmm6
+ movq mm7,QWORD PTR [edx-96]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR [esp],mm4
+ paddq xmm4,xmm2
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 32[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 24[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 56[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 40[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR [esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 8[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-88]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 56[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 24[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 16[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 48[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 32[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 56[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR [esp]
+ movdqa XMMWORD PTR [edx-96],xmm4
+ movdqa xmm6,xmm0
+ movdqa xmm4,xmm5
+DB 102,15,58,15,235,8
+ movdqa XMMWORD PTR 48[edx],xmm7
+DB 102,15,58,15,247,8
+ movdqa xmm7,xmm5
+ psrlq xmm5,7
+ paddq xmm3,xmm6
+ movdqa xmm6,xmm7
+ psrlq xmm7,1
+ psllq xmm6,56
+ pxor xmm5,xmm7
+ psrlq xmm7,7
+ pxor xmm5,xmm6
+ psllq xmm6,7
+ pxor xmm5,xmm7
+ movdqa xmm7,xmm2
+ pxor xmm5,xmm6
+ movdqa xmm6,xmm2
+ psrlq xmm7,6
+ paddq xmm3,xmm5
+ movdqa xmm5,xmm2
+ psrlq xmm6,19
+ psllq xmm5,3
+ pxor xmm7,xmm6
+ psrlq xmm6,42
+ pxor xmm7,xmm5
+ psllq xmm5,42
+ pxor xmm7,xmm6
+ movdqa xmm6,XMMWORD PTR 16[edx]
+ pxor xmm7,xmm5
+ movdqa xmm5,XMMWORD PTR 48[ebp]
+ movq mm1,mm4
+ paddq xmm3,xmm7
+ movq mm7,QWORD PTR [edx-80]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 48[esp],mm4
+ paddq xmm5,xmm3
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 16[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 8[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 40[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 24[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 48[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 56[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-72]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 40[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 8[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR [esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 32[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 16[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 40[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 48[esp]
+ movdqa XMMWORD PTR [edx-80],xmm5
+ movdqa xmm7,xmm1
+ movdqa xmm5,xmm6
+DB 102,15,58,15,244,8
+ movdqa XMMWORD PTR [edx],xmm0
+DB 102,15,58,15,248,8
+ movdqa xmm0,xmm6
+ psrlq xmm6,7
+ paddq xmm4,xmm7
+ movdqa xmm7,xmm0
+ psrlq xmm0,1
+ psllq xmm7,56
+ pxor xmm6,xmm0
+ psrlq xmm0,7
+ pxor xmm6,xmm7
+ psllq xmm7,7
+ pxor xmm6,xmm0
+ movdqa xmm0,xmm3
+ pxor xmm6,xmm7
+ movdqa xmm7,xmm3
+ psrlq xmm0,6
+ paddq xmm4,xmm6
+ movdqa xmm6,xmm3
+ psrlq xmm7,19
+ psllq xmm6,3
+ pxor xmm0,xmm7
+ psrlq xmm7,42
+ pxor xmm0,xmm6
+ psllq xmm6,42
+ pxor xmm0,xmm7
+ movdqa xmm7,XMMWORD PTR 32[edx]
+ pxor xmm0,xmm6
+ movdqa xmm6,XMMWORD PTR 64[ebp]
+ movq mm1,mm4
+ paddq xmm4,xmm0
+ movq mm7,QWORD PTR [edx-64]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 32[esp],mm4
+ paddq xmm6,xmm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR [esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 56[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 24[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 8[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 32[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 40[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-56]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 24[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 56[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 48[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 16[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR [esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 24[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 32[esp]
+ movdqa XMMWORD PTR [edx-64],xmm6
+ movdqa xmm0,xmm2
+ movdqa xmm6,xmm7
+DB 102,15,58,15,253,8
+ movdqa XMMWORD PTR 16[edx],xmm1
+DB 102,15,58,15,193,8
+ movdqa xmm1,xmm7
+ psrlq xmm7,7
+ paddq xmm5,xmm0
+ movdqa xmm0,xmm1
+ psrlq xmm1,1
+ psllq xmm0,56
+ pxor xmm7,xmm1
+ psrlq xmm1,7
+ pxor xmm7,xmm0
+ psllq xmm0,7
+ pxor xmm7,xmm1
+ movdqa xmm1,xmm4
+ pxor xmm7,xmm0
+ movdqa xmm0,xmm4
+ psrlq xmm1,6
+ paddq xmm5,xmm7
+ movdqa xmm7,xmm4
+ psrlq xmm0,19
+ psllq xmm7,3
+ pxor xmm1,xmm0
+ psrlq xmm0,42
+ pxor xmm1,xmm7
+ psllq xmm7,42
+ pxor xmm1,xmm0
+ movdqa xmm0,XMMWORD PTR 48[edx]
+ pxor xmm1,xmm7
+ movdqa xmm7,XMMWORD PTR 80[ebp]
+ movq mm1,mm4
+ paddq xmm5,xmm1
+ movq mm7,QWORD PTR [edx-48]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 16[esp],mm4
+ paddq xmm7,xmm5
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 48[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 40[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 8[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 56[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 16[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 24[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-40]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 8[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 40[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 32[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR [esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 48[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 8[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 16[esp]
+ movdqa XMMWORD PTR [edx-48],xmm7
+ movdqa xmm1,xmm3
+ movdqa xmm7,xmm0
+DB 102,15,58,15,198,8
+ movdqa XMMWORD PTR 32[edx],xmm2
+DB 102,15,58,15,202,8
+ movdqa xmm2,xmm0
+ psrlq xmm0,7
+ paddq xmm6,xmm1
+ movdqa xmm1,xmm2
+ psrlq xmm2,1
+ psllq xmm1,56
+ pxor xmm0,xmm2
+ psrlq xmm2,7
+ pxor xmm0,xmm1
+ psllq xmm1,7
+ pxor xmm0,xmm2
+ movdqa xmm2,xmm5
+ pxor xmm0,xmm1
+ movdqa xmm1,xmm5
+ psrlq xmm2,6
+ paddq xmm6,xmm0
+ movdqa xmm0,xmm5
+ psrlq xmm1,19
+ psllq xmm0,3
+ pxor xmm2,xmm1
+ psrlq xmm1,42
+ pxor xmm2,xmm0
+ psllq xmm0,42
+ pxor xmm2,xmm1
+ movdqa xmm1,XMMWORD PTR [edx]
+ pxor xmm2,xmm0
+ movdqa xmm0,XMMWORD PTR 96[ebp]
+ movq mm1,mm4
+ paddq xmm6,xmm2
+ movq mm7,QWORD PTR [edx-32]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR [esp],mm4
+ paddq xmm0,xmm6
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 32[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 24[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 56[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 40[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR [esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 8[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-24]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 56[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 24[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 16[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 48[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 32[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 56[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR [esp]
+ movdqa XMMWORD PTR [edx-32],xmm0
+ movdqa xmm2,xmm4
+ movdqa xmm0,xmm1
+DB 102,15,58,15,207,8
+ movdqa XMMWORD PTR 48[edx],xmm3
+DB 102,15,58,15,211,8
+ movdqa xmm3,xmm1
+ psrlq xmm1,7
+ paddq xmm7,xmm2
+ movdqa xmm2,xmm3
+ psrlq xmm3,1
+ psllq xmm2,56
+ pxor xmm1,xmm3
+ psrlq xmm3,7
+ pxor xmm1,xmm2
+ psllq xmm2,7
+ pxor xmm1,xmm3
+ movdqa xmm3,xmm6
+ pxor xmm1,xmm2
+ movdqa xmm2,xmm6
+ psrlq xmm3,6
+ paddq xmm7,xmm1
+ movdqa xmm1,xmm6
+ psrlq xmm2,19
+ psllq xmm1,3
+ pxor xmm3,xmm2
+ psrlq xmm2,42
+ pxor xmm3,xmm1
+ psllq xmm1,42
+ pxor xmm3,xmm2
+ movdqa xmm2,XMMWORD PTR 16[edx]
+ pxor xmm3,xmm1
+ movdqa xmm1,XMMWORD PTR 112[ebp]
+ movq mm1,mm4
+ paddq xmm7,xmm3
+ movq mm7,QWORD PTR [edx-16]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 48[esp],mm4
+ paddq xmm1,xmm7
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 16[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 8[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 40[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 24[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 48[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 56[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-8]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 40[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 8[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR [esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 32[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 16[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 40[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 48[esp]
+ movdqa XMMWORD PTR [edx-16],xmm1
+ lea ebp,DWORD PTR 128[ebp]
+ dec ecx
+ jnz $L00800_47_ssse3
+ movdqa xmm1,XMMWORD PTR [ebp]
+ lea ebp,DWORD PTR [ebp-640]
+ movdqu xmm0,XMMWORD PTR [ebx]
+DB 102,15,56,0,193
+ movdqa xmm3,XMMWORD PTR [ebp]
+ movdqa xmm2,xmm1
+ movdqu xmm1,XMMWORD PTR 16[ebx]
+ paddq xmm3,xmm0
+DB 102,15,56,0,202
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-128]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 32[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR [esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 56[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 24[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 8[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 32[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 40[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-120]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 24[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 56[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 48[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 16[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR [esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 24[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 32[esp]
+ movdqa XMMWORD PTR [edx-128],xmm3
+ movdqa xmm4,XMMWORD PTR 16[ebp]
+ movdqa xmm3,xmm2
+ movdqu xmm2,XMMWORD PTR 32[ebx]
+ paddq xmm4,xmm1
+DB 102,15,56,0,211
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-112]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 16[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 48[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 40[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 8[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 56[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 16[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 24[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-104]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 8[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 40[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 32[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR [esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 48[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 8[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 16[esp]
+ movdqa XMMWORD PTR [edx-112],xmm4
+ movdqa xmm5,XMMWORD PTR 32[ebp]
+ movdqa xmm4,xmm3
+ movdqu xmm3,XMMWORD PTR 48[ebx]
+ paddq xmm5,xmm2
+DB 102,15,56,0,220
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-96]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR [esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 32[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 24[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 56[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 40[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR [esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 8[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-88]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 56[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 24[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 16[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 48[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 32[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 56[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR [esp]
+ movdqa XMMWORD PTR [edx-96],xmm5
+ movdqa xmm6,XMMWORD PTR 48[ebp]
+ movdqa xmm5,xmm4
+ movdqu xmm4,XMMWORD PTR 64[ebx]
+ paddq xmm6,xmm3
+DB 102,15,56,0,229
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-80]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 48[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 16[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 8[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 40[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 24[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 48[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 56[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-72]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 40[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 8[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR [esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 32[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 16[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 40[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 48[esp]
+ movdqa XMMWORD PTR [edx-80],xmm6
+ movdqa xmm7,XMMWORD PTR 64[ebp]
+ movdqa xmm6,xmm5
+ movdqu xmm5,XMMWORD PTR 80[ebx]
+ paddq xmm7,xmm4
+DB 102,15,56,0,238
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-64]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 32[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR [esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 56[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 24[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 8[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 32[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 40[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-56]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 24[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 56[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 48[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 16[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR [esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 24[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 32[esp]
+ movdqa XMMWORD PTR [edx-64],xmm7
+ movdqa XMMWORD PTR [edx],xmm0
+ movdqa xmm0,XMMWORD PTR 80[ebp]
+ movdqa xmm7,xmm6
+ movdqu xmm6,XMMWORD PTR 96[ebx]
+ paddq xmm0,xmm5
+DB 102,15,56,0,247
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-48]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 16[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 48[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 40[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 8[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 56[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 16[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 24[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-40]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 8[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 40[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 32[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR [esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 48[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 8[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 16[esp]
+ movdqa XMMWORD PTR [edx-48],xmm0
+ movdqa XMMWORD PTR 16[edx],xmm1
+ movdqa xmm1,XMMWORD PTR 96[ebp]
+ movdqa xmm0,xmm7
+ movdqu xmm7,XMMWORD PTR 112[ebx]
+ paddq xmm1,xmm6
+DB 102,15,56,0,248
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-32]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR [esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 32[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 24[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 56[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 40[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR [esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 8[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-24]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 56[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 24[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 16[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 48[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 32[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 56[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR [esp]
+ movdqa XMMWORD PTR [edx-32],xmm1
+ movdqa XMMWORD PTR 32[edx],xmm2
+ movdqa xmm2,XMMWORD PTR 112[ebp]
+ movdqa xmm0,XMMWORD PTR [edx]
+ paddq xmm2,xmm7
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-16]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 48[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm0,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 16[esp],mm0
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR 8[esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 40[esp]
+ paddq mm3,mm7
+ movq mm5,mm0
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm0
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 24[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm0,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm2,mm0
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm2,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 48[esp]
+ paddq mm2,mm6
+ movq mm6,QWORD PTR 56[esp]
+ movq mm1,mm4
+ movq mm7,QWORD PTR [edx-8]
+ pxor mm5,mm6
+ psrlq mm1,14
+ movq QWORD PTR 40[esp],mm4
+ pand mm5,mm4
+ psllq mm4,23
+ paddq mm2,mm3
+ movq mm3,mm1
+ psrlq mm1,4
+ pxor mm5,mm6
+ pxor mm3,mm4
+ psllq mm4,23
+ pxor mm3,mm1
+ movq QWORD PTR 8[esp],mm2
+ paddq mm7,mm5
+ pxor mm3,mm4
+ psrlq mm1,23
+ paddq mm7,QWORD PTR [esp]
+ pxor mm3,mm1
+ psllq mm4,4
+ pxor mm3,mm4
+ movq mm4,QWORD PTR 32[esp]
+ paddq mm3,mm7
+ movq mm5,mm2
+ psrlq mm5,28
+ paddq mm4,mm3
+ movq mm6,mm2
+ movq mm7,mm5
+ psllq mm6,25
+ movq mm1,QWORD PTR 16[esp]
+ psrlq mm5,6
+ pxor mm7,mm6
+ psllq mm6,5
+ pxor mm7,mm5
+ pxor mm2,mm1
+ psrlq mm5,5
+ pxor mm7,mm6
+ pand mm0,mm2
+ psllq mm6,6
+ pxor mm7,mm5
+ pxor mm0,mm1
+ pxor mm6,mm7
+ movq mm5,QWORD PTR 40[esp]
+ paddq mm0,mm6
+ movq mm6,QWORD PTR 48[esp]
+ movdqa XMMWORD PTR [edx-16],xmm2
+ movq mm1,QWORD PTR 8[esp]
+ paddq mm0,mm3
+ movq mm3,QWORD PTR 24[esp]
+ movq mm7,QWORD PTR 56[esp]
+ pxor mm2,mm1
+ paddq mm0,QWORD PTR [esi]
+ paddq mm1,QWORD PTR 8[esi]
+ paddq mm2,QWORD PTR 16[esi]
+ paddq mm3,QWORD PTR 24[esi]
+ paddq mm4,QWORD PTR 32[esi]
+ paddq mm5,QWORD PTR 40[esi]
+ paddq mm6,QWORD PTR 48[esi]
+ paddq mm7,QWORD PTR 56[esi]
+ movq QWORD PTR [esi],mm0
+ movq QWORD PTR 8[esi],mm1
+ movq QWORD PTR 16[esi],mm2
+ movq QWORD PTR 24[esi],mm3
+ movq QWORD PTR 32[esi],mm4
+ movq QWORD PTR 40[esi],mm5
+ movq QWORD PTR 48[esi],mm6
+ movq QWORD PTR 56[esi],mm7
+ cmp edi,eax
+ jb $L007loop_ssse3
+ mov esp,DWORD PTR 76[edx]
+ emms
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+ALIGN 16
+$L002loop_x86:
+ mov eax,DWORD PTR [edi]
+ mov ebx,DWORD PTR 4[edi]
+ mov ecx,DWORD PTR 8[edi]
+ mov edx,DWORD PTR 12[edi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ push eax
+ push ebx
+ push ecx
+ push edx
+ mov eax,DWORD PTR 16[edi]
+ mov ebx,DWORD PTR 20[edi]
+ mov ecx,DWORD PTR 24[edi]
+ mov edx,DWORD PTR 28[edi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ push eax
+ push ebx
+ push ecx
+ push edx
+ mov eax,DWORD PTR 32[edi]
+ mov ebx,DWORD PTR 36[edi]
+ mov ecx,DWORD PTR 40[edi]
+ mov edx,DWORD PTR 44[edi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ push eax
+ push ebx
+ push ecx
+ push edx
+ mov eax,DWORD PTR 48[edi]
+ mov ebx,DWORD PTR 52[edi]
+ mov ecx,DWORD PTR 56[edi]
+ mov edx,DWORD PTR 60[edi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ push eax
+ push ebx
+ push ecx
+ push edx
+ mov eax,DWORD PTR 64[edi]
+ mov ebx,DWORD PTR 68[edi]
+ mov ecx,DWORD PTR 72[edi]
+ mov edx,DWORD PTR 76[edi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ push eax
+ push ebx
+ push ecx
+ push edx
+ mov eax,DWORD PTR 80[edi]
+ mov ebx,DWORD PTR 84[edi]
+ mov ecx,DWORD PTR 88[edi]
+ mov edx,DWORD PTR 92[edi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ push eax
+ push ebx
+ push ecx
+ push edx
+ mov eax,DWORD PTR 96[edi]
+ mov ebx,DWORD PTR 100[edi]
+ mov ecx,DWORD PTR 104[edi]
+ mov edx,DWORD PTR 108[edi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ push eax
+ push ebx
+ push ecx
+ push edx
+ mov eax,DWORD PTR 112[edi]
+ mov ebx,DWORD PTR 116[edi]
+ mov ecx,DWORD PTR 120[edi]
+ mov edx,DWORD PTR 124[edi]
+ bswap eax
+ bswap ebx
+ bswap ecx
+ bswap edx
+ push eax
+ push ebx
+ push ecx
+ push edx
+ add edi,128
+ sub esp,72
+ mov DWORD PTR 204[esp],edi
+ lea edi,DWORD PTR 8[esp]
+ mov ecx,16
+DD 2784229001
+ALIGN 16
+$L00900_15_x86:
+ mov ecx,DWORD PTR 40[esp]
+ mov edx,DWORD PTR 44[esp]
+ mov esi,ecx
+ shr ecx,9
+ mov edi,edx
+ shr edx,9
+ mov ebx,ecx
+ shl esi,14
+ mov eax,edx
+ shl edi,14
+ xor ebx,esi
+ shr ecx,5
+ xor eax,edi
+ shr edx,5
+ xor eax,ecx
+ shl esi,4
+ xor ebx,edx
+ shl edi,4
+ xor ebx,esi
+ shr ecx,4
+ xor eax,edi
+ shr edx,4
+ xor eax,ecx
+ shl esi,5
+ xor ebx,edx
+ shl edi,5
+ xor eax,esi
+ xor ebx,edi
+ mov ecx,DWORD PTR 48[esp]
+ mov edx,DWORD PTR 52[esp]
+ mov esi,DWORD PTR 56[esp]
+ mov edi,DWORD PTR 60[esp]
+ add eax,DWORD PTR 64[esp]
+ adc ebx,DWORD PTR 68[esp]
+ xor ecx,esi
+ xor edx,edi
+ and ecx,DWORD PTR 40[esp]
+ and edx,DWORD PTR 44[esp]
+ add eax,DWORD PTR 192[esp]
+ adc ebx,DWORD PTR 196[esp]
+ xor ecx,esi
+ xor edx,edi
+ mov esi,DWORD PTR [ebp]
+ mov edi,DWORD PTR 4[ebp]
+ add eax,ecx
+ adc ebx,edx
+ mov ecx,DWORD PTR 32[esp]
+ mov edx,DWORD PTR 36[esp]
+ add eax,esi
+ adc ebx,edi
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ebx
+ add eax,ecx
+ adc ebx,edx
+ mov ecx,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+ mov DWORD PTR 32[esp],eax
+ mov DWORD PTR 36[esp],ebx
+ mov esi,ecx
+ shr ecx,2
+ mov edi,edx
+ shr edx,2
+ mov ebx,ecx
+ shl esi,4
+ mov eax,edx
+ shl edi,4
+ xor ebx,esi
+ shr ecx,5
+ xor eax,edi
+ shr edx,5
+ xor ebx,ecx
+ shl esi,21
+ xor eax,edx
+ shl edi,21
+ xor eax,esi
+ shr ecx,21
+ xor ebx,edi
+ shr edx,21
+ xor eax,ecx
+ shl esi,5
+ xor ebx,edx
+ shl edi,5
+ xor eax,esi
+ xor ebx,edi
+ mov ecx,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov edi,DWORD PTR 20[esp]
+ add eax,DWORD PTR [esp]
+ adc ebx,DWORD PTR 4[esp]
+ or ecx,esi
+ or edx,edi
+ and ecx,DWORD PTR 24[esp]
+ and edx,DWORD PTR 28[esp]
+ and esi,DWORD PTR 8[esp]
+ and edi,DWORD PTR 12[esp]
+ or ecx,esi
+ or edx,edi
+ add eax,ecx
+ adc ebx,edx
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ebx
+ mov dl,BYTE PTR [ebp]
+ sub esp,8
+ lea ebp,DWORD PTR 8[ebp]
+ cmp dl,148
+ jne $L00900_15_x86
+ALIGN 16
+$L01016_79_x86:
+ mov ecx,DWORD PTR 312[esp]
+ mov edx,DWORD PTR 316[esp]
+ mov esi,ecx
+ shr ecx,1
+ mov edi,edx
+ shr edx,1
+ mov eax,ecx
+ shl esi,24
+ mov ebx,edx
+ shl edi,24
+ xor ebx,esi
+ shr ecx,6
+ xor eax,edi
+ shr edx,6
+ xor eax,ecx
+ shl esi,7
+ xor ebx,edx
+ shl edi,1
+ xor ebx,esi
+ shr ecx,1
+ xor eax,edi
+ shr edx,1
+ xor eax,ecx
+ shl edi,6
+ xor ebx,edx
+ xor eax,edi
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ebx
+ mov ecx,DWORD PTR 208[esp]
+ mov edx,DWORD PTR 212[esp]
+ mov esi,ecx
+ shr ecx,6
+ mov edi,edx
+ shr edx,6
+ mov eax,ecx
+ shl esi,3
+ mov ebx,edx
+ shl edi,3
+ xor eax,esi
+ shr ecx,13
+ xor ebx,edi
+ shr edx,13
+ xor eax,ecx
+ shl esi,10
+ xor ebx,edx
+ shl edi,10
+ xor ebx,esi
+ shr ecx,10
+ xor eax,edi
+ shr edx,10
+ xor ebx,ecx
+ shl edi,13
+ xor eax,edx
+ xor eax,edi
+ mov ecx,DWORD PTR 320[esp]
+ mov edx,DWORD PTR 324[esp]
+ add eax,DWORD PTR [esp]
+ adc ebx,DWORD PTR 4[esp]
+ mov esi,DWORD PTR 248[esp]
+ mov edi,DWORD PTR 252[esp]
+ add eax,ecx
+ adc ebx,edx
+ add eax,esi
+ adc ebx,edi
+ mov DWORD PTR 192[esp],eax
+ mov DWORD PTR 196[esp],ebx
+ mov ecx,DWORD PTR 40[esp]
+ mov edx,DWORD PTR 44[esp]
+ mov esi,ecx
+ shr ecx,9
+ mov edi,edx
+ shr edx,9
+ mov ebx,ecx
+ shl esi,14
+ mov eax,edx
+ shl edi,14
+ xor ebx,esi
+ shr ecx,5
+ xor eax,edi
+ shr edx,5
+ xor eax,ecx
+ shl esi,4
+ xor ebx,edx
+ shl edi,4
+ xor ebx,esi
+ shr ecx,4
+ xor eax,edi
+ shr edx,4
+ xor eax,ecx
+ shl esi,5
+ xor ebx,edx
+ shl edi,5
+ xor eax,esi
+ xor ebx,edi
+ mov ecx,DWORD PTR 48[esp]
+ mov edx,DWORD PTR 52[esp]
+ mov esi,DWORD PTR 56[esp]
+ mov edi,DWORD PTR 60[esp]
+ add eax,DWORD PTR 64[esp]
+ adc ebx,DWORD PTR 68[esp]
+ xor ecx,esi
+ xor edx,edi
+ and ecx,DWORD PTR 40[esp]
+ and edx,DWORD PTR 44[esp]
+ add eax,DWORD PTR 192[esp]
+ adc ebx,DWORD PTR 196[esp]
+ xor ecx,esi
+ xor edx,edi
+ mov esi,DWORD PTR [ebp]
+ mov edi,DWORD PTR 4[ebp]
+ add eax,ecx
+ adc ebx,edx
+ mov ecx,DWORD PTR 32[esp]
+ mov edx,DWORD PTR 36[esp]
+ add eax,esi
+ adc ebx,edi
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ebx
+ add eax,ecx
+ adc ebx,edx
+ mov ecx,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+ mov DWORD PTR 32[esp],eax
+ mov DWORD PTR 36[esp],ebx
+ mov esi,ecx
+ shr ecx,2
+ mov edi,edx
+ shr edx,2
+ mov ebx,ecx
+ shl esi,4
+ mov eax,edx
+ shl edi,4
+ xor ebx,esi
+ shr ecx,5
+ xor eax,edi
+ shr edx,5
+ xor ebx,ecx
+ shl esi,21
+ xor eax,edx
+ shl edi,21
+ xor eax,esi
+ shr ecx,21
+ xor ebx,edi
+ shr edx,21
+ xor eax,ecx
+ shl esi,5
+ xor ebx,edx
+ shl edi,5
+ xor eax,esi
+ xor ebx,edi
+ mov ecx,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov edi,DWORD PTR 20[esp]
+ add eax,DWORD PTR [esp]
+ adc ebx,DWORD PTR 4[esp]
+ or ecx,esi
+ or edx,edi
+ and ecx,DWORD PTR 24[esp]
+ and edx,DWORD PTR 28[esp]
+ and esi,DWORD PTR 8[esp]
+ and edi,DWORD PTR 12[esp]
+ or ecx,esi
+ or edx,edi
+ add eax,ecx
+ adc ebx,edx
+ mov DWORD PTR [esp],eax
+ mov DWORD PTR 4[esp],ebx
+ mov dl,BYTE PTR [ebp]
+ sub esp,8
+ lea ebp,DWORD PTR 8[ebp]
+ cmp dl,23
+ jne $L01016_79_x86
+ mov esi,DWORD PTR 840[esp]
+ mov edi,DWORD PTR 844[esp]
+ mov eax,DWORD PTR [esi]
+ mov ebx,DWORD PTR 4[esi]
+ mov ecx,DWORD PTR 8[esi]
+ mov edx,DWORD PTR 12[esi]
+ add eax,DWORD PTR 8[esp]
+ adc ebx,DWORD PTR 12[esp]
+ mov DWORD PTR [esi],eax
+ mov DWORD PTR 4[esi],ebx
+ add ecx,DWORD PTR 16[esp]
+ adc edx,DWORD PTR 20[esp]
+ mov DWORD PTR 8[esi],ecx
+ mov DWORD PTR 12[esi],edx
+ mov eax,DWORD PTR 16[esi]
+ mov ebx,DWORD PTR 20[esi]
+ mov ecx,DWORD PTR 24[esi]
+ mov edx,DWORD PTR 28[esi]
+ add eax,DWORD PTR 24[esp]
+ adc ebx,DWORD PTR 28[esp]
+ mov DWORD PTR 16[esi],eax
+ mov DWORD PTR 20[esi],ebx
+ add ecx,DWORD PTR 32[esp]
+ adc edx,DWORD PTR 36[esp]
+ mov DWORD PTR 24[esi],ecx
+ mov DWORD PTR 28[esi],edx
+ mov eax,DWORD PTR 32[esi]
+ mov ebx,DWORD PTR 36[esi]
+ mov ecx,DWORD PTR 40[esi]
+ mov edx,DWORD PTR 44[esi]
+ add eax,DWORD PTR 40[esp]
+ adc ebx,DWORD PTR 44[esp]
+ mov DWORD PTR 32[esi],eax
+ mov DWORD PTR 36[esi],ebx
+ add ecx,DWORD PTR 48[esp]
+ adc edx,DWORD PTR 52[esp]
+ mov DWORD PTR 40[esi],ecx
+ mov DWORD PTR 44[esi],edx
+ mov eax,DWORD PTR 48[esi]
+ mov ebx,DWORD PTR 52[esi]
+ mov ecx,DWORD PTR 56[esi]
+ mov edx,DWORD PTR 60[esi]
+ add eax,DWORD PTR 56[esp]
+ adc ebx,DWORD PTR 60[esp]
+ mov DWORD PTR 48[esi],eax
+ mov DWORD PTR 52[esi],ebx
+ add ecx,DWORD PTR 64[esp]
+ adc edx,DWORD PTR 68[esp]
+ mov DWORD PTR 56[esi],ecx
+ mov DWORD PTR 60[esi],edx
+ add esp,840
+ sub ebp,640
+ cmp edi,DWORD PTR 8[esp]
+ jb $L002loop_x86
+ mov esp,DWORD PTR 12[esp]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+ALIGN 64
+$L001K512:
+DD 3609767458,1116352408
+DD 602891725,1899447441
+DD 3964484399,3049323471
+DD 2173295548,3921009573
+DD 4081628472,961987163
+DD 3053834265,1508970993
+DD 2937671579,2453635748
+DD 3664609560,2870763221
+DD 2734883394,3624381080
+DD 1164996542,310598401
+DD 1323610764,607225278
+DD 3590304994,1426881987
+DD 4068182383,1925078388
+DD 991336113,2162078206
+DD 633803317,2614888103
+DD 3479774868,3248222580
+DD 2666613458,3835390401
+DD 944711139,4022224774
+DD 2341262773,264347078
+DD 2007800933,604807628
+DD 1495990901,770255983
+DD 1856431235,1249150122
+DD 3175218132,1555081692
+DD 2198950837,1996064986
+DD 3999719339,2554220882
+DD 766784016,2821834349
+DD 2566594879,2952996808
+DD 3203337956,3210313671
+DD 1034457026,3336571891
+DD 2466948901,3584528711
+DD 3758326383,113926993
+DD 168717936,338241895
+DD 1188179964,666307205
+DD 1546045734,773529912
+DD 1522805485,1294757372
+DD 2643833823,1396182291
+DD 2343527390,1695183700
+DD 1014477480,1986661051
+DD 1206759142,2177026350
+DD 344077627,2456956037
+DD 1290863460,2730485921
+DD 3158454273,2820302411
+DD 3505952657,3259730800
+DD 106217008,3345764771
+DD 3606008344,3516065817
+DD 1432725776,3600352804
+DD 1467031594,4094571909
+DD 851169720,275423344
+DD 3100823752,430227734
+DD 1363258195,506948616
+DD 3750685593,659060556
+DD 3785050280,883997877
+DD 3318307427,958139571
+DD 3812723403,1322822218
+DD 2003034995,1537002063
+DD 3602036899,1747873779
+DD 1575990012,1955562222
+DD 1125592928,2024104815
+DD 2716904306,2227730452
+DD 442776044,2361852424
+DD 593698344,2428436474
+DD 3733110249,2756734187
+DD 2999351573,3204031479
+DD 3815920427,3329325298
+DD 3928383900,3391569614
+DD 566280711,3515267271
+DD 3454069534,3940187606
+DD 4000239992,4118630271
+DD 1914138554,116418474
+DD 2731055270,174292421
+DD 3203993006,289380356
+DD 320620315,460393269
+DD 587496836,685471733
+DD 1086792851,852142971
+DD 365543100,1017036298
+DD 2618297676,1126000580
+DD 3409855158,1288033470
+DD 4234509866,1501505948
+DD 987167468,1607167915
+DD 1246189591,1816402316
+DD 67438087,66051
+DD 202182159,134810123
+_sha512_block_data_order ENDP
+DB 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
+DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
+DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
+DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
+DB 62,0
+.text$ ENDS
+.bss SEGMENT 'BSS'
+COMM _OPENSSL_ia32cap_P:DWORD:4
+.bss ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/sha/sha512-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/sha/sha512-x86_64.masm
index 975495c4e3..e0391c9623 100644
--- a/contrib/libs/openssl/asm/windows/crypto/sha/sha512-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/sha/sha512-x86_64.masm
@@ -1,5670 +1,5670 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-EXTERN OPENSSL_ia32cap_P:NEAR
-PUBLIC sha512_block_data_order
-
-ALIGN 16
-sha512_block_data_order PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha512_block_data_order::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- lea r11,QWORD PTR[OPENSSL_ia32cap_P]
- mov r9d,DWORD PTR[r11]
- mov r10d,DWORD PTR[4+r11]
- mov r11d,DWORD PTR[8+r11]
- test r10d,2048
- jnz $L$xop_shortcut
- and r11d,296
- cmp r11d,296
- je $L$avx2_shortcut
- and r9d,1073741824
- and r10d,268435968
- or r10d,r9d
- cmp r10d,1342177792
- je $L$avx_shortcut
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- shl rdx,4
- sub rsp,16*8+4*8
- lea rdx,QWORD PTR[rdx*8+rsi]
- and rsp,-64
- mov QWORD PTR[((128+0))+rsp],rdi
- mov QWORD PTR[((128+8))+rsp],rsi
- mov QWORD PTR[((128+16))+rsp],rdx
- mov QWORD PTR[152+rsp],rax
-
-$L$prologue::
-
- mov rax,QWORD PTR[rdi]
- mov rbx,QWORD PTR[8+rdi]
- mov rcx,QWORD PTR[16+rdi]
- mov rdx,QWORD PTR[24+rdi]
- mov r8,QWORD PTR[32+rdi]
- mov r9,QWORD PTR[40+rdi]
- mov r10,QWORD PTR[48+rdi]
- mov r11,QWORD PTR[56+rdi]
- jmp $L$loop
-
-ALIGN 16
-$L$loop::
- mov rdi,rbx
- lea rbp,QWORD PTR[K512]
- xor rdi,rcx
- mov r12,QWORD PTR[rsi]
- mov r13,r8
- mov r14,rax
- bswap r12
- ror r13,23
- mov r15,r9
-
- xor r13,r8
- ror r14,5
- xor r15,r10
-
- mov QWORD PTR[rsp],r12
- xor r14,rax
- and r15,r8
-
- ror r13,4
- add r12,r11
- xor r15,r10
-
- ror r14,6
- xor r13,r8
- add r12,r15
-
- mov r15,rax
- add r12,QWORD PTR[rbp]
- xor r14,rax
-
- xor r15,rbx
- ror r13,14
- mov r11,rbx
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor r11,rdi
- add rdx,r12
- add r11,r12
-
- lea rbp,QWORD PTR[8+rbp]
- add r11,r14
- mov r12,QWORD PTR[8+rsi]
- mov r13,rdx
- mov r14,r11
- bswap r12
- ror r13,23
- mov rdi,r8
-
- xor r13,rdx
- ror r14,5
- xor rdi,r9
-
- mov QWORD PTR[8+rsp],r12
- xor r14,r11
- and rdi,rdx
-
- ror r13,4
- add r12,r10
- xor rdi,r9
-
- ror r14,6
- xor r13,rdx
- add r12,rdi
-
- mov rdi,r11
- add r12,QWORD PTR[rbp]
- xor r14,r11
-
- xor rdi,rax
- ror r13,14
- mov r10,rax
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor r10,r15
- add rcx,r12
- add r10,r12
-
- lea rbp,QWORD PTR[24+rbp]
- add r10,r14
- mov r12,QWORD PTR[16+rsi]
- mov r13,rcx
- mov r14,r10
- bswap r12
- ror r13,23
- mov r15,rdx
-
- xor r13,rcx
- ror r14,5
- xor r15,r8
-
- mov QWORD PTR[16+rsp],r12
- xor r14,r10
- and r15,rcx
-
- ror r13,4
- add r12,r9
- xor r15,r8
-
- ror r14,6
- xor r13,rcx
- add r12,r15
-
- mov r15,r10
- add r12,QWORD PTR[rbp]
- xor r14,r10
-
- xor r15,r11
- ror r13,14
- mov r9,r11
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor r9,rdi
- add rbx,r12
- add r9,r12
-
- lea rbp,QWORD PTR[8+rbp]
- add r9,r14
- mov r12,QWORD PTR[24+rsi]
- mov r13,rbx
- mov r14,r9
- bswap r12
- ror r13,23
- mov rdi,rcx
-
- xor r13,rbx
- ror r14,5
- xor rdi,rdx
-
- mov QWORD PTR[24+rsp],r12
- xor r14,r9
- and rdi,rbx
-
- ror r13,4
- add r12,r8
- xor rdi,rdx
-
- ror r14,6
- xor r13,rbx
- add r12,rdi
-
- mov rdi,r9
- add r12,QWORD PTR[rbp]
- xor r14,r9
-
- xor rdi,r10
- ror r13,14
- mov r8,r10
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor r8,r15
- add rax,r12
- add r8,r12
-
- lea rbp,QWORD PTR[24+rbp]
- add r8,r14
- mov r12,QWORD PTR[32+rsi]
- mov r13,rax
- mov r14,r8
- bswap r12
- ror r13,23
- mov r15,rbx
-
- xor r13,rax
- ror r14,5
- xor r15,rcx
-
- mov QWORD PTR[32+rsp],r12
- xor r14,r8
- and r15,rax
-
- ror r13,4
- add r12,rdx
- xor r15,rcx
-
- ror r14,6
- xor r13,rax
- add r12,r15
-
- mov r15,r8
- add r12,QWORD PTR[rbp]
- xor r14,r8
-
- xor r15,r9
- ror r13,14
- mov rdx,r9
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor rdx,rdi
- add r11,r12
- add rdx,r12
-
- lea rbp,QWORD PTR[8+rbp]
- add rdx,r14
- mov r12,QWORD PTR[40+rsi]
- mov r13,r11
- mov r14,rdx
- bswap r12
- ror r13,23
- mov rdi,rax
-
- xor r13,r11
- ror r14,5
- xor rdi,rbx
-
- mov QWORD PTR[40+rsp],r12
- xor r14,rdx
- and rdi,r11
-
- ror r13,4
- add r12,rcx
- xor rdi,rbx
-
- ror r14,6
- xor r13,r11
- add r12,rdi
-
- mov rdi,rdx
- add r12,QWORD PTR[rbp]
- xor r14,rdx
-
- xor rdi,r8
- ror r13,14
- mov rcx,r8
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor rcx,r15
- add r10,r12
- add rcx,r12
-
- lea rbp,QWORD PTR[24+rbp]
- add rcx,r14
- mov r12,QWORD PTR[48+rsi]
- mov r13,r10
- mov r14,rcx
- bswap r12
- ror r13,23
- mov r15,r11
-
- xor r13,r10
- ror r14,5
- xor r15,rax
-
- mov QWORD PTR[48+rsp],r12
- xor r14,rcx
- and r15,r10
-
- ror r13,4
- add r12,rbx
- xor r15,rax
-
- ror r14,6
- xor r13,r10
- add r12,r15
-
- mov r15,rcx
- add r12,QWORD PTR[rbp]
- xor r14,rcx
-
- xor r15,rdx
- ror r13,14
- mov rbx,rdx
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor rbx,rdi
- add r9,r12
- add rbx,r12
-
- lea rbp,QWORD PTR[8+rbp]
- add rbx,r14
- mov r12,QWORD PTR[56+rsi]
- mov r13,r9
- mov r14,rbx
- bswap r12
- ror r13,23
- mov rdi,r10
-
- xor r13,r9
- ror r14,5
- xor rdi,r11
-
- mov QWORD PTR[56+rsp],r12
- xor r14,rbx
- and rdi,r9
-
- ror r13,4
- add r12,rax
- xor rdi,r11
-
- ror r14,6
- xor r13,r9
- add r12,rdi
-
- mov rdi,rbx
- add r12,QWORD PTR[rbp]
- xor r14,rbx
-
- xor rdi,rcx
- ror r13,14
- mov rax,rcx
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor rax,r15
- add r8,r12
- add rax,r12
-
- lea rbp,QWORD PTR[24+rbp]
- add rax,r14
- mov r12,QWORD PTR[64+rsi]
- mov r13,r8
- mov r14,rax
- bswap r12
- ror r13,23
- mov r15,r9
-
- xor r13,r8
- ror r14,5
- xor r15,r10
-
- mov QWORD PTR[64+rsp],r12
- xor r14,rax
- and r15,r8
-
- ror r13,4
- add r12,r11
- xor r15,r10
-
- ror r14,6
- xor r13,r8
- add r12,r15
-
- mov r15,rax
- add r12,QWORD PTR[rbp]
- xor r14,rax
-
- xor r15,rbx
- ror r13,14
- mov r11,rbx
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor r11,rdi
- add rdx,r12
- add r11,r12
-
- lea rbp,QWORD PTR[8+rbp]
- add r11,r14
- mov r12,QWORD PTR[72+rsi]
- mov r13,rdx
- mov r14,r11
- bswap r12
- ror r13,23
- mov rdi,r8
-
- xor r13,rdx
- ror r14,5
- xor rdi,r9
-
- mov QWORD PTR[72+rsp],r12
- xor r14,r11
- and rdi,rdx
-
- ror r13,4
- add r12,r10
- xor rdi,r9
-
- ror r14,6
- xor r13,rdx
- add r12,rdi
-
- mov rdi,r11
- add r12,QWORD PTR[rbp]
- xor r14,r11
-
- xor rdi,rax
- ror r13,14
- mov r10,rax
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor r10,r15
- add rcx,r12
- add r10,r12
-
- lea rbp,QWORD PTR[24+rbp]
- add r10,r14
- mov r12,QWORD PTR[80+rsi]
- mov r13,rcx
- mov r14,r10
- bswap r12
- ror r13,23
- mov r15,rdx
-
- xor r13,rcx
- ror r14,5
- xor r15,r8
-
- mov QWORD PTR[80+rsp],r12
- xor r14,r10
- and r15,rcx
-
- ror r13,4
- add r12,r9
- xor r15,r8
-
- ror r14,6
- xor r13,rcx
- add r12,r15
-
- mov r15,r10
- add r12,QWORD PTR[rbp]
- xor r14,r10
-
- xor r15,r11
- ror r13,14
- mov r9,r11
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor r9,rdi
- add rbx,r12
- add r9,r12
-
- lea rbp,QWORD PTR[8+rbp]
- add r9,r14
- mov r12,QWORD PTR[88+rsi]
- mov r13,rbx
- mov r14,r9
- bswap r12
- ror r13,23
- mov rdi,rcx
-
- xor r13,rbx
- ror r14,5
- xor rdi,rdx
-
- mov QWORD PTR[88+rsp],r12
- xor r14,r9
- and rdi,rbx
-
- ror r13,4
- add r12,r8
- xor rdi,rdx
-
- ror r14,6
- xor r13,rbx
- add r12,rdi
-
- mov rdi,r9
- add r12,QWORD PTR[rbp]
- xor r14,r9
-
- xor rdi,r10
- ror r13,14
- mov r8,r10
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor r8,r15
- add rax,r12
- add r8,r12
-
- lea rbp,QWORD PTR[24+rbp]
- add r8,r14
- mov r12,QWORD PTR[96+rsi]
- mov r13,rax
- mov r14,r8
- bswap r12
- ror r13,23
- mov r15,rbx
-
- xor r13,rax
- ror r14,5
- xor r15,rcx
-
- mov QWORD PTR[96+rsp],r12
- xor r14,r8
- and r15,rax
-
- ror r13,4
- add r12,rdx
- xor r15,rcx
-
- ror r14,6
- xor r13,rax
- add r12,r15
-
- mov r15,r8
- add r12,QWORD PTR[rbp]
- xor r14,r8
-
- xor r15,r9
- ror r13,14
- mov rdx,r9
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor rdx,rdi
- add r11,r12
- add rdx,r12
-
- lea rbp,QWORD PTR[8+rbp]
- add rdx,r14
- mov r12,QWORD PTR[104+rsi]
- mov r13,r11
- mov r14,rdx
- bswap r12
- ror r13,23
- mov rdi,rax
-
- xor r13,r11
- ror r14,5
- xor rdi,rbx
-
- mov QWORD PTR[104+rsp],r12
- xor r14,rdx
- and rdi,r11
-
- ror r13,4
- add r12,rcx
- xor rdi,rbx
-
- ror r14,6
- xor r13,r11
- add r12,rdi
-
- mov rdi,rdx
- add r12,QWORD PTR[rbp]
- xor r14,rdx
-
- xor rdi,r8
- ror r13,14
- mov rcx,r8
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor rcx,r15
- add r10,r12
- add rcx,r12
-
- lea rbp,QWORD PTR[24+rbp]
- add rcx,r14
- mov r12,QWORD PTR[112+rsi]
- mov r13,r10
- mov r14,rcx
- bswap r12
- ror r13,23
- mov r15,r11
-
- xor r13,r10
- ror r14,5
- xor r15,rax
-
- mov QWORD PTR[112+rsp],r12
- xor r14,rcx
- and r15,r10
-
- ror r13,4
- add r12,rbx
- xor r15,rax
-
- ror r14,6
- xor r13,r10
- add r12,r15
-
- mov r15,rcx
- add r12,QWORD PTR[rbp]
- xor r14,rcx
-
- xor r15,rdx
- ror r13,14
- mov rbx,rdx
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor rbx,rdi
- add r9,r12
- add rbx,r12
-
- lea rbp,QWORD PTR[8+rbp]
- add rbx,r14
- mov r12,QWORD PTR[120+rsi]
- mov r13,r9
- mov r14,rbx
- bswap r12
- ror r13,23
- mov rdi,r10
-
- xor r13,r9
- ror r14,5
- xor rdi,r11
-
- mov QWORD PTR[120+rsp],r12
- xor r14,rbx
- and rdi,r9
-
- ror r13,4
- add r12,rax
- xor rdi,r11
-
- ror r14,6
- xor r13,r9
- add r12,rdi
-
- mov rdi,rbx
- add r12,QWORD PTR[rbp]
- xor r14,rbx
-
- xor rdi,rcx
- ror r13,14
- mov rax,rcx
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor rax,r15
- add r8,r12
- add rax,r12
-
- lea rbp,QWORD PTR[24+rbp]
- jmp $L$rounds_16_xx
-ALIGN 16
-$L$rounds_16_xx::
- mov r13,QWORD PTR[8+rsp]
- mov r15,QWORD PTR[112+rsp]
-
- mov r12,r13
- ror r13,7
- add rax,r14
- mov r14,r15
- ror r15,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor r15,r14
- shr r14,6
-
- ror r15,19
- xor r12,r13
- xor r15,r14
- add r12,QWORD PTR[72+rsp]
-
- add r12,QWORD PTR[rsp]
- mov r13,r8
- add r12,r15
- mov r14,rax
- ror r13,23
- mov r15,r9
-
- xor r13,r8
- ror r14,5
- xor r15,r10
-
- mov QWORD PTR[rsp],r12
- xor r14,rax
- and r15,r8
-
- ror r13,4
- add r12,r11
- xor r15,r10
-
- ror r14,6
- xor r13,r8
- add r12,r15
-
- mov r15,rax
- add r12,QWORD PTR[rbp]
- xor r14,rax
-
- xor r15,rbx
- ror r13,14
- mov r11,rbx
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor r11,rdi
- add rdx,r12
- add r11,r12
-
- lea rbp,QWORD PTR[8+rbp]
- mov r13,QWORD PTR[16+rsp]
- mov rdi,QWORD PTR[120+rsp]
-
- mov r12,r13
- ror r13,7
- add r11,r14
- mov r14,rdi
- ror rdi,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor rdi,r14
- shr r14,6
-
- ror rdi,19
- xor r12,r13
- xor rdi,r14
- add r12,QWORD PTR[80+rsp]
-
- add r12,QWORD PTR[8+rsp]
- mov r13,rdx
- add r12,rdi
- mov r14,r11
- ror r13,23
- mov rdi,r8
-
- xor r13,rdx
- ror r14,5
- xor rdi,r9
-
- mov QWORD PTR[8+rsp],r12
- xor r14,r11
- and rdi,rdx
-
- ror r13,4
- add r12,r10
- xor rdi,r9
-
- ror r14,6
- xor r13,rdx
- add r12,rdi
-
- mov rdi,r11
- add r12,QWORD PTR[rbp]
- xor r14,r11
-
- xor rdi,rax
- ror r13,14
- mov r10,rax
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor r10,r15
- add rcx,r12
- add r10,r12
-
- lea rbp,QWORD PTR[24+rbp]
- mov r13,QWORD PTR[24+rsp]
- mov r15,QWORD PTR[rsp]
-
- mov r12,r13
- ror r13,7
- add r10,r14
- mov r14,r15
- ror r15,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor r15,r14
- shr r14,6
-
- ror r15,19
- xor r12,r13
- xor r15,r14
- add r12,QWORD PTR[88+rsp]
-
- add r12,QWORD PTR[16+rsp]
- mov r13,rcx
- add r12,r15
- mov r14,r10
- ror r13,23
- mov r15,rdx
-
- xor r13,rcx
- ror r14,5
- xor r15,r8
-
- mov QWORD PTR[16+rsp],r12
- xor r14,r10
- and r15,rcx
-
- ror r13,4
- add r12,r9
- xor r15,r8
-
- ror r14,6
- xor r13,rcx
- add r12,r15
-
- mov r15,r10
- add r12,QWORD PTR[rbp]
- xor r14,r10
-
- xor r15,r11
- ror r13,14
- mov r9,r11
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor r9,rdi
- add rbx,r12
- add r9,r12
-
- lea rbp,QWORD PTR[8+rbp]
- mov r13,QWORD PTR[32+rsp]
- mov rdi,QWORD PTR[8+rsp]
-
- mov r12,r13
- ror r13,7
- add r9,r14
- mov r14,rdi
- ror rdi,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor rdi,r14
- shr r14,6
-
- ror rdi,19
- xor r12,r13
- xor rdi,r14
- add r12,QWORD PTR[96+rsp]
-
- add r12,QWORD PTR[24+rsp]
- mov r13,rbx
- add r12,rdi
- mov r14,r9
- ror r13,23
- mov rdi,rcx
-
- xor r13,rbx
- ror r14,5
- xor rdi,rdx
-
- mov QWORD PTR[24+rsp],r12
- xor r14,r9
- and rdi,rbx
-
- ror r13,4
- add r12,r8
- xor rdi,rdx
-
- ror r14,6
- xor r13,rbx
- add r12,rdi
-
- mov rdi,r9
- add r12,QWORD PTR[rbp]
- xor r14,r9
-
- xor rdi,r10
- ror r13,14
- mov r8,r10
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor r8,r15
- add rax,r12
- add r8,r12
-
- lea rbp,QWORD PTR[24+rbp]
- mov r13,QWORD PTR[40+rsp]
- mov r15,QWORD PTR[16+rsp]
-
- mov r12,r13
- ror r13,7
- add r8,r14
- mov r14,r15
- ror r15,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor r15,r14
- shr r14,6
-
- ror r15,19
- xor r12,r13
- xor r15,r14
- add r12,QWORD PTR[104+rsp]
-
- add r12,QWORD PTR[32+rsp]
- mov r13,rax
- add r12,r15
- mov r14,r8
- ror r13,23
- mov r15,rbx
-
- xor r13,rax
- ror r14,5
- xor r15,rcx
-
- mov QWORD PTR[32+rsp],r12
- xor r14,r8
- and r15,rax
-
- ror r13,4
- add r12,rdx
- xor r15,rcx
-
- ror r14,6
- xor r13,rax
- add r12,r15
-
- mov r15,r8
- add r12,QWORD PTR[rbp]
- xor r14,r8
-
- xor r15,r9
- ror r13,14
- mov rdx,r9
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor rdx,rdi
- add r11,r12
- add rdx,r12
-
- lea rbp,QWORD PTR[8+rbp]
- mov r13,QWORD PTR[48+rsp]
- mov rdi,QWORD PTR[24+rsp]
-
- mov r12,r13
- ror r13,7
- add rdx,r14
- mov r14,rdi
- ror rdi,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor rdi,r14
- shr r14,6
-
- ror rdi,19
- xor r12,r13
- xor rdi,r14
- add r12,QWORD PTR[112+rsp]
-
- add r12,QWORD PTR[40+rsp]
- mov r13,r11
- add r12,rdi
- mov r14,rdx
- ror r13,23
- mov rdi,rax
-
- xor r13,r11
- ror r14,5
- xor rdi,rbx
-
- mov QWORD PTR[40+rsp],r12
- xor r14,rdx
- and rdi,r11
-
- ror r13,4
- add r12,rcx
- xor rdi,rbx
-
- ror r14,6
- xor r13,r11
- add r12,rdi
-
- mov rdi,rdx
- add r12,QWORD PTR[rbp]
- xor r14,rdx
-
- xor rdi,r8
- ror r13,14
- mov rcx,r8
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor rcx,r15
- add r10,r12
- add rcx,r12
-
- lea rbp,QWORD PTR[24+rbp]
- mov r13,QWORD PTR[56+rsp]
- mov r15,QWORD PTR[32+rsp]
-
- mov r12,r13
- ror r13,7
- add rcx,r14
- mov r14,r15
- ror r15,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor r15,r14
- shr r14,6
-
- ror r15,19
- xor r12,r13
- xor r15,r14
- add r12,QWORD PTR[120+rsp]
-
- add r12,QWORD PTR[48+rsp]
- mov r13,r10
- add r12,r15
- mov r14,rcx
- ror r13,23
- mov r15,r11
-
- xor r13,r10
- ror r14,5
- xor r15,rax
-
- mov QWORD PTR[48+rsp],r12
- xor r14,rcx
- and r15,r10
-
- ror r13,4
- add r12,rbx
- xor r15,rax
-
- ror r14,6
- xor r13,r10
- add r12,r15
-
- mov r15,rcx
- add r12,QWORD PTR[rbp]
- xor r14,rcx
-
- xor r15,rdx
- ror r13,14
- mov rbx,rdx
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor rbx,rdi
- add r9,r12
- add rbx,r12
-
- lea rbp,QWORD PTR[8+rbp]
- mov r13,QWORD PTR[64+rsp]
- mov rdi,QWORD PTR[40+rsp]
-
- mov r12,r13
- ror r13,7
- add rbx,r14
- mov r14,rdi
- ror rdi,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor rdi,r14
- shr r14,6
-
- ror rdi,19
- xor r12,r13
- xor rdi,r14
- add r12,QWORD PTR[rsp]
-
- add r12,QWORD PTR[56+rsp]
- mov r13,r9
- add r12,rdi
- mov r14,rbx
- ror r13,23
- mov rdi,r10
-
- xor r13,r9
- ror r14,5
- xor rdi,r11
-
- mov QWORD PTR[56+rsp],r12
- xor r14,rbx
- and rdi,r9
-
- ror r13,4
- add r12,rax
- xor rdi,r11
-
- ror r14,6
- xor r13,r9
- add r12,rdi
-
- mov rdi,rbx
- add r12,QWORD PTR[rbp]
- xor r14,rbx
-
- xor rdi,rcx
- ror r13,14
- mov rax,rcx
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor rax,r15
- add r8,r12
- add rax,r12
-
- lea rbp,QWORD PTR[24+rbp]
- mov r13,QWORD PTR[72+rsp]
- mov r15,QWORD PTR[48+rsp]
-
- mov r12,r13
- ror r13,7
- add rax,r14
- mov r14,r15
- ror r15,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor r15,r14
- shr r14,6
-
- ror r15,19
- xor r12,r13
- xor r15,r14
- add r12,QWORD PTR[8+rsp]
-
- add r12,QWORD PTR[64+rsp]
- mov r13,r8
- add r12,r15
- mov r14,rax
- ror r13,23
- mov r15,r9
-
- xor r13,r8
- ror r14,5
- xor r15,r10
-
- mov QWORD PTR[64+rsp],r12
- xor r14,rax
- and r15,r8
-
- ror r13,4
- add r12,r11
- xor r15,r10
-
- ror r14,6
- xor r13,r8
- add r12,r15
-
- mov r15,rax
- add r12,QWORD PTR[rbp]
- xor r14,rax
-
- xor r15,rbx
- ror r13,14
- mov r11,rbx
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor r11,rdi
- add rdx,r12
- add r11,r12
-
- lea rbp,QWORD PTR[8+rbp]
- mov r13,QWORD PTR[80+rsp]
- mov rdi,QWORD PTR[56+rsp]
-
- mov r12,r13
- ror r13,7
- add r11,r14
- mov r14,rdi
- ror rdi,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor rdi,r14
- shr r14,6
-
- ror rdi,19
- xor r12,r13
- xor rdi,r14
- add r12,QWORD PTR[16+rsp]
-
- add r12,QWORD PTR[72+rsp]
- mov r13,rdx
- add r12,rdi
- mov r14,r11
- ror r13,23
- mov rdi,r8
-
- xor r13,rdx
- ror r14,5
- xor rdi,r9
-
- mov QWORD PTR[72+rsp],r12
- xor r14,r11
- and rdi,rdx
-
- ror r13,4
- add r12,r10
- xor rdi,r9
-
- ror r14,6
- xor r13,rdx
- add r12,rdi
-
- mov rdi,r11
- add r12,QWORD PTR[rbp]
- xor r14,r11
-
- xor rdi,rax
- ror r13,14
- mov r10,rax
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor r10,r15
- add rcx,r12
- add r10,r12
-
- lea rbp,QWORD PTR[24+rbp]
- mov r13,QWORD PTR[88+rsp]
- mov r15,QWORD PTR[64+rsp]
-
- mov r12,r13
- ror r13,7
- add r10,r14
- mov r14,r15
- ror r15,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor r15,r14
- shr r14,6
-
- ror r15,19
- xor r12,r13
- xor r15,r14
- add r12,QWORD PTR[24+rsp]
-
- add r12,QWORD PTR[80+rsp]
- mov r13,rcx
- add r12,r15
- mov r14,r10
- ror r13,23
- mov r15,rdx
-
- xor r13,rcx
- ror r14,5
- xor r15,r8
-
- mov QWORD PTR[80+rsp],r12
- xor r14,r10
- and r15,rcx
-
- ror r13,4
- add r12,r9
- xor r15,r8
-
- ror r14,6
- xor r13,rcx
- add r12,r15
-
- mov r15,r10
- add r12,QWORD PTR[rbp]
- xor r14,r10
-
- xor r15,r11
- ror r13,14
- mov r9,r11
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor r9,rdi
- add rbx,r12
- add r9,r12
-
- lea rbp,QWORD PTR[8+rbp]
- mov r13,QWORD PTR[96+rsp]
- mov rdi,QWORD PTR[72+rsp]
-
- mov r12,r13
- ror r13,7
- add r9,r14
- mov r14,rdi
- ror rdi,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor rdi,r14
- shr r14,6
-
- ror rdi,19
- xor r12,r13
- xor rdi,r14
- add r12,QWORD PTR[32+rsp]
-
- add r12,QWORD PTR[88+rsp]
- mov r13,rbx
- add r12,rdi
- mov r14,r9
- ror r13,23
- mov rdi,rcx
-
- xor r13,rbx
- ror r14,5
- xor rdi,rdx
-
- mov QWORD PTR[88+rsp],r12
- xor r14,r9
- and rdi,rbx
-
- ror r13,4
- add r12,r8
- xor rdi,rdx
-
- ror r14,6
- xor r13,rbx
- add r12,rdi
-
- mov rdi,r9
- add r12,QWORD PTR[rbp]
- xor r14,r9
-
- xor rdi,r10
- ror r13,14
- mov r8,r10
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor r8,r15
- add rax,r12
- add r8,r12
-
- lea rbp,QWORD PTR[24+rbp]
- mov r13,QWORD PTR[104+rsp]
- mov r15,QWORD PTR[80+rsp]
-
- mov r12,r13
- ror r13,7
- add r8,r14
- mov r14,r15
- ror r15,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor r15,r14
- shr r14,6
-
- ror r15,19
- xor r12,r13
- xor r15,r14
- add r12,QWORD PTR[40+rsp]
-
- add r12,QWORD PTR[96+rsp]
- mov r13,rax
- add r12,r15
- mov r14,r8
- ror r13,23
- mov r15,rbx
-
- xor r13,rax
- ror r14,5
- xor r15,rcx
-
- mov QWORD PTR[96+rsp],r12
- xor r14,r8
- and r15,rax
-
- ror r13,4
- add r12,rdx
- xor r15,rcx
-
- ror r14,6
- xor r13,rax
- add r12,r15
-
- mov r15,r8
- add r12,QWORD PTR[rbp]
- xor r14,r8
-
- xor r15,r9
- ror r13,14
- mov rdx,r9
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor rdx,rdi
- add r11,r12
- add rdx,r12
-
- lea rbp,QWORD PTR[8+rbp]
- mov r13,QWORD PTR[112+rsp]
- mov rdi,QWORD PTR[88+rsp]
-
- mov r12,r13
- ror r13,7
- add rdx,r14
- mov r14,rdi
- ror rdi,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor rdi,r14
- shr r14,6
-
- ror rdi,19
- xor r12,r13
- xor rdi,r14
- add r12,QWORD PTR[48+rsp]
-
- add r12,QWORD PTR[104+rsp]
- mov r13,r11
- add r12,rdi
- mov r14,rdx
- ror r13,23
- mov rdi,rax
-
- xor r13,r11
- ror r14,5
- xor rdi,rbx
-
- mov QWORD PTR[104+rsp],r12
- xor r14,rdx
- and rdi,r11
-
- ror r13,4
- add r12,rcx
- xor rdi,rbx
-
- ror r14,6
- xor r13,r11
- add r12,rdi
-
- mov rdi,rdx
- add r12,QWORD PTR[rbp]
- xor r14,rdx
-
- xor rdi,r8
- ror r13,14
- mov rcx,r8
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor rcx,r15
- add r10,r12
- add rcx,r12
-
- lea rbp,QWORD PTR[24+rbp]
- mov r13,QWORD PTR[120+rsp]
- mov r15,QWORD PTR[96+rsp]
-
- mov r12,r13
- ror r13,7
- add rcx,r14
- mov r14,r15
- ror r15,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor r15,r14
- shr r14,6
-
- ror r15,19
- xor r12,r13
- xor r15,r14
- add r12,QWORD PTR[56+rsp]
-
- add r12,QWORD PTR[112+rsp]
- mov r13,r10
- add r12,r15
- mov r14,rcx
- ror r13,23
- mov r15,r11
-
- xor r13,r10
- ror r14,5
- xor r15,rax
-
- mov QWORD PTR[112+rsp],r12
- xor r14,rcx
- and r15,r10
-
- ror r13,4
- add r12,rbx
- xor r15,rax
-
- ror r14,6
- xor r13,r10
- add r12,r15
-
- mov r15,rcx
- add r12,QWORD PTR[rbp]
- xor r14,rcx
-
- xor r15,rdx
- ror r13,14
- mov rbx,rdx
-
- and rdi,r15
- ror r14,28
- add r12,r13
-
- xor rbx,rdi
- add r9,r12
- add rbx,r12
-
- lea rbp,QWORD PTR[8+rbp]
- mov r13,QWORD PTR[rsp]
- mov rdi,QWORD PTR[104+rsp]
-
- mov r12,r13
- ror r13,7
- add rbx,r14
- mov r14,rdi
- ror rdi,42
-
- xor r13,r12
- shr r12,7
- ror r13,1
- xor rdi,r14
- shr r14,6
-
- ror rdi,19
- xor r12,r13
- xor rdi,r14
- add r12,QWORD PTR[64+rsp]
-
- add r12,QWORD PTR[120+rsp]
- mov r13,r9
- add r12,rdi
- mov r14,rbx
- ror r13,23
- mov rdi,r10
-
- xor r13,r9
- ror r14,5
- xor rdi,r11
-
- mov QWORD PTR[120+rsp],r12
- xor r14,rbx
- and rdi,r9
-
- ror r13,4
- add r12,rax
- xor rdi,r11
-
- ror r14,6
- xor r13,r9
- add r12,rdi
-
- mov rdi,rbx
- add r12,QWORD PTR[rbp]
- xor r14,rbx
-
- xor rdi,rcx
- ror r13,14
- mov rax,rcx
-
- and r15,rdi
- ror r14,28
- add r12,r13
-
- xor rax,r15
- add r8,r12
- add rax,r12
-
- lea rbp,QWORD PTR[24+rbp]
- cmp BYTE PTR[7+rbp],0
- jnz $L$rounds_16_xx
-
- mov rdi,QWORD PTR[((128+0))+rsp]
- add rax,r14
- lea rsi,QWORD PTR[128+rsi]
-
- add rax,QWORD PTR[rdi]
- add rbx,QWORD PTR[8+rdi]
- add rcx,QWORD PTR[16+rdi]
- add rdx,QWORD PTR[24+rdi]
- add r8,QWORD PTR[32+rdi]
- add r9,QWORD PTR[40+rdi]
- add r10,QWORD PTR[48+rdi]
- add r11,QWORD PTR[56+rdi]
-
- cmp rsi,QWORD PTR[((128+16))+rsp]
-
- mov QWORD PTR[rdi],rax
- mov QWORD PTR[8+rdi],rbx
- mov QWORD PTR[16+rdi],rcx
- mov QWORD PTR[24+rdi],rdx
- mov QWORD PTR[32+rdi],r8
- mov QWORD PTR[40+rdi],r9
- mov QWORD PTR[48+rdi],r10
- mov QWORD PTR[56+rdi],r11
- jb $L$loop
-
- mov rsi,QWORD PTR[152+rsp]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha512_block_data_order::
-sha512_block_data_order ENDP
-ALIGN 64
-
-K512::
- DQ 0428a2f98d728ae22h,07137449123ef65cdh
- DQ 0428a2f98d728ae22h,07137449123ef65cdh
- DQ 0b5c0fbcfec4d3b2fh,0e9b5dba58189dbbch
- DQ 0b5c0fbcfec4d3b2fh,0e9b5dba58189dbbch
- DQ 03956c25bf348b538h,059f111f1b605d019h
- DQ 03956c25bf348b538h,059f111f1b605d019h
- DQ 0923f82a4af194f9bh,0ab1c5ed5da6d8118h
- DQ 0923f82a4af194f9bh,0ab1c5ed5da6d8118h
- DQ 0d807aa98a3030242h,012835b0145706fbeh
- DQ 0d807aa98a3030242h,012835b0145706fbeh
- DQ 0243185be4ee4b28ch,0550c7dc3d5ffb4e2h
- DQ 0243185be4ee4b28ch,0550c7dc3d5ffb4e2h
- DQ 072be5d74f27b896fh,080deb1fe3b1696b1h
- DQ 072be5d74f27b896fh,080deb1fe3b1696b1h
- DQ 09bdc06a725c71235h,0c19bf174cf692694h
- DQ 09bdc06a725c71235h,0c19bf174cf692694h
- DQ 0e49b69c19ef14ad2h,0efbe4786384f25e3h
- DQ 0e49b69c19ef14ad2h,0efbe4786384f25e3h
- DQ 00fc19dc68b8cd5b5h,0240ca1cc77ac9c65h
- DQ 00fc19dc68b8cd5b5h,0240ca1cc77ac9c65h
- DQ 02de92c6f592b0275h,04a7484aa6ea6e483h
- DQ 02de92c6f592b0275h,04a7484aa6ea6e483h
- DQ 05cb0a9dcbd41fbd4h,076f988da831153b5h
- DQ 05cb0a9dcbd41fbd4h,076f988da831153b5h
- DQ 0983e5152ee66dfabh,0a831c66d2db43210h
- DQ 0983e5152ee66dfabh,0a831c66d2db43210h
- DQ 0b00327c898fb213fh,0bf597fc7beef0ee4h
- DQ 0b00327c898fb213fh,0bf597fc7beef0ee4h
- DQ 0c6e00bf33da88fc2h,0d5a79147930aa725h
- DQ 0c6e00bf33da88fc2h,0d5a79147930aa725h
- DQ 006ca6351e003826fh,0142929670a0e6e70h
- DQ 006ca6351e003826fh,0142929670a0e6e70h
- DQ 027b70a8546d22ffch,02e1b21385c26c926h
- DQ 027b70a8546d22ffch,02e1b21385c26c926h
- DQ 04d2c6dfc5ac42aedh,053380d139d95b3dfh
- DQ 04d2c6dfc5ac42aedh,053380d139d95b3dfh
- DQ 0650a73548baf63deh,0766a0abb3c77b2a8h
- DQ 0650a73548baf63deh,0766a0abb3c77b2a8h
- DQ 081c2c92e47edaee6h,092722c851482353bh
- DQ 081c2c92e47edaee6h,092722c851482353bh
- DQ 0a2bfe8a14cf10364h,0a81a664bbc423001h
- DQ 0a2bfe8a14cf10364h,0a81a664bbc423001h
- DQ 0c24b8b70d0f89791h,0c76c51a30654be30h
- DQ 0c24b8b70d0f89791h,0c76c51a30654be30h
- DQ 0d192e819d6ef5218h,0d69906245565a910h
- DQ 0d192e819d6ef5218h,0d69906245565a910h
- DQ 0f40e35855771202ah,0106aa07032bbd1b8h
- DQ 0f40e35855771202ah,0106aa07032bbd1b8h
- DQ 019a4c116b8d2d0c8h,01e376c085141ab53h
- DQ 019a4c116b8d2d0c8h,01e376c085141ab53h
- DQ 02748774cdf8eeb99h,034b0bcb5e19b48a8h
- DQ 02748774cdf8eeb99h,034b0bcb5e19b48a8h
- DQ 0391c0cb3c5c95a63h,04ed8aa4ae3418acbh
- DQ 0391c0cb3c5c95a63h,04ed8aa4ae3418acbh
- DQ 05b9cca4f7763e373h,0682e6ff3d6b2b8a3h
- DQ 05b9cca4f7763e373h,0682e6ff3d6b2b8a3h
- DQ 0748f82ee5defb2fch,078a5636f43172f60h
- DQ 0748f82ee5defb2fch,078a5636f43172f60h
- DQ 084c87814a1f0ab72h,08cc702081a6439ech
- DQ 084c87814a1f0ab72h,08cc702081a6439ech
- DQ 090befffa23631e28h,0a4506cebde82bde9h
- DQ 090befffa23631e28h,0a4506cebde82bde9h
- DQ 0bef9a3f7b2c67915h,0c67178f2e372532bh
- DQ 0bef9a3f7b2c67915h,0c67178f2e372532bh
- DQ 0ca273eceea26619ch,0d186b8c721c0c207h
- DQ 0ca273eceea26619ch,0d186b8c721c0c207h
- DQ 0eada7dd6cde0eb1eh,0f57d4f7fee6ed178h
- DQ 0eada7dd6cde0eb1eh,0f57d4f7fee6ed178h
- DQ 006f067aa72176fbah,00a637dc5a2c898a6h
- DQ 006f067aa72176fbah,00a637dc5a2c898a6h
- DQ 0113f9804bef90daeh,01b710b35131c471bh
- DQ 0113f9804bef90daeh,01b710b35131c471bh
- DQ 028db77f523047d84h,032caab7b40c72493h
- DQ 028db77f523047d84h,032caab7b40c72493h
- DQ 03c9ebe0a15c9bebch,0431d67c49c100d4ch
- DQ 03c9ebe0a15c9bebch,0431d67c49c100d4ch
- DQ 04cc5d4becb3e42b6h,0597f299cfc657e2ah
- DQ 04cc5d4becb3e42b6h,0597f299cfc657e2ah
- DQ 05fcb6fab3ad6faech,06c44198c4a475817h
- DQ 05fcb6fab3ad6faech,06c44198c4a475817h
-
- DQ 00001020304050607h,008090a0b0c0d0e0fh
- DQ 00001020304050607h,008090a0b0c0d0e0fh
-DB 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
-DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54
-DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
-DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
-DB 111,114,103,62,0
-
-ALIGN 64
-sha512_block_data_order_xop PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha512_block_data_order_xop::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$xop_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- shl rdx,4
- sub rsp,256
- lea rdx,QWORD PTR[rdx*8+rsi]
- and rsp,-64
- mov QWORD PTR[((128+0))+rsp],rdi
- mov QWORD PTR[((128+8))+rsp],rsi
- mov QWORD PTR[((128+16))+rsp],rdx
- mov QWORD PTR[152+rsp],rax
-
- movaps XMMWORD PTR[(128+32)+rsp],xmm6
- movaps XMMWORD PTR[(128+48)+rsp],xmm7
- movaps XMMWORD PTR[(128+64)+rsp],xmm8
- movaps XMMWORD PTR[(128+80)+rsp],xmm9
- movaps XMMWORD PTR[(128+96)+rsp],xmm10
- movaps XMMWORD PTR[(128+112)+rsp],xmm11
-$L$prologue_xop::
-
- vzeroupper
- mov rax,QWORD PTR[rdi]
- mov rbx,QWORD PTR[8+rdi]
- mov rcx,QWORD PTR[16+rdi]
- mov rdx,QWORD PTR[24+rdi]
- mov r8,QWORD PTR[32+rdi]
- mov r9,QWORD PTR[40+rdi]
- mov r10,QWORD PTR[48+rdi]
- mov r11,QWORD PTR[56+rdi]
- jmp $L$loop_xop
-ALIGN 16
-$L$loop_xop::
- vmovdqa xmm11,XMMWORD PTR[((K512+1280))]
- vmovdqu xmm0,XMMWORD PTR[rsi]
- lea rbp,QWORD PTR[((K512+128))]
- vmovdqu xmm1,XMMWORD PTR[16+rsi]
- vmovdqu xmm2,XMMWORD PTR[32+rsi]
- vpshufb xmm0,xmm0,xmm11
- vmovdqu xmm3,XMMWORD PTR[48+rsi]
- vpshufb xmm1,xmm1,xmm11
- vmovdqu xmm4,XMMWORD PTR[64+rsi]
- vpshufb xmm2,xmm2,xmm11
- vmovdqu xmm5,XMMWORD PTR[80+rsi]
- vpshufb xmm3,xmm3,xmm11
- vmovdqu xmm6,XMMWORD PTR[96+rsi]
- vpshufb xmm4,xmm4,xmm11
- vmovdqu xmm7,XMMWORD PTR[112+rsi]
- vpshufb xmm5,xmm5,xmm11
- vpaddq xmm8,xmm0,XMMWORD PTR[((-128))+rbp]
- vpshufb xmm6,xmm6,xmm11
- vpaddq xmm9,xmm1,XMMWORD PTR[((-96))+rbp]
- vpshufb xmm7,xmm7,xmm11
- vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
- vpaddq xmm11,xmm3,XMMWORD PTR[((-32))+rbp]
- vmovdqa XMMWORD PTR[rsp],xmm8
- vpaddq xmm8,xmm4,XMMWORD PTR[rbp]
- vmovdqa XMMWORD PTR[16+rsp],xmm9
- vpaddq xmm9,xmm5,XMMWORD PTR[32+rbp]
- vmovdqa XMMWORD PTR[32+rsp],xmm10
- vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
- vmovdqa XMMWORD PTR[48+rsp],xmm11
- vpaddq xmm11,xmm7,XMMWORD PTR[96+rbp]
- vmovdqa XMMWORD PTR[64+rsp],xmm8
- mov r14,rax
- vmovdqa XMMWORD PTR[80+rsp],xmm9
- mov rdi,rbx
- vmovdqa XMMWORD PTR[96+rsp],xmm10
- xor rdi,rcx
- vmovdqa XMMWORD PTR[112+rsp],xmm11
- mov r13,r8
- jmp $L$xop_00_47
-
-ALIGN 16
-$L$xop_00_47::
- add rbp,256
- vpalignr xmm8,xmm1,xmm0,8
- ror r13,23
- mov rax,r14
- vpalignr xmm11,xmm5,xmm4,8
- mov r12,r9
- ror r14,5
-DB 143,72,120,195,200,56
- xor r13,r8
- xor r12,r10
- vpsrlq xmm8,xmm8,7
- ror r13,4
- xor r14,rax
- vpaddq xmm0,xmm0,xmm11
- and r12,r8
- xor r13,r8
- add r11,QWORD PTR[rsp]
- mov r15,rax
-DB 143,72,120,195,209,7
- xor r12,r10
- ror r14,6
- vpxor xmm8,xmm8,xmm9
- xor r15,rbx
- add r11,r12
- ror r13,14
- and rdi,r15
-DB 143,104,120,195,223,3
- xor r14,rax
- add r11,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,rbx
- ror r14,28
- vpsrlq xmm10,xmm7,6
- add rdx,r11
- add r11,rdi
- vpaddq xmm0,xmm0,xmm8
- mov r13,rdx
- add r14,r11
-DB 143,72,120,195,203,42
- ror r13,23
- mov r11,r14
- vpxor xmm11,xmm11,xmm10
- mov r12,r8
- ror r14,5
- xor r13,rdx
- xor r12,r9
- vpxor xmm11,xmm11,xmm9
- ror r13,4
- xor r14,r11
- and r12,rdx
- xor r13,rdx
- vpaddq xmm0,xmm0,xmm11
- add r10,QWORD PTR[8+rsp]
- mov rdi,r11
- xor r12,r9
- ror r14,6
- vpaddq xmm10,xmm0,XMMWORD PTR[((-128))+rbp]
- xor rdi,rax
- add r10,r12
- ror r13,14
- and r15,rdi
- xor r14,r11
- add r10,r13
- xor r15,rax
- ror r14,28
- add rcx,r10
- add r10,r15
- mov r13,rcx
- add r14,r10
- vmovdqa XMMWORD PTR[rsp],xmm10
- vpalignr xmm8,xmm2,xmm1,8
- ror r13,23
- mov r10,r14
- vpalignr xmm11,xmm6,xmm5,8
- mov r12,rdx
- ror r14,5
-DB 143,72,120,195,200,56
- xor r13,rcx
- xor r12,r8
- vpsrlq xmm8,xmm8,7
- ror r13,4
- xor r14,r10
- vpaddq xmm1,xmm1,xmm11
- and r12,rcx
- xor r13,rcx
- add r9,QWORD PTR[16+rsp]
- mov r15,r10
-DB 143,72,120,195,209,7
- xor r12,r8
- ror r14,6
- vpxor xmm8,xmm8,xmm9
- xor r15,r11
- add r9,r12
- ror r13,14
- and rdi,r15
-DB 143,104,120,195,216,3
- xor r14,r10
- add r9,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,r11
- ror r14,28
- vpsrlq xmm10,xmm0,6
- add rbx,r9
- add r9,rdi
- vpaddq xmm1,xmm1,xmm8
- mov r13,rbx
- add r14,r9
-DB 143,72,120,195,203,42
- ror r13,23
- mov r9,r14
- vpxor xmm11,xmm11,xmm10
- mov r12,rcx
- ror r14,5
- xor r13,rbx
- xor r12,rdx
- vpxor xmm11,xmm11,xmm9
- ror r13,4
- xor r14,r9
- and r12,rbx
- xor r13,rbx
- vpaddq xmm1,xmm1,xmm11
- add r8,QWORD PTR[24+rsp]
- mov rdi,r9
- xor r12,rdx
- ror r14,6
- vpaddq xmm10,xmm1,XMMWORD PTR[((-96))+rbp]
- xor rdi,r10
- add r8,r12
- ror r13,14
- and r15,rdi
- xor r14,r9
- add r8,r13
- xor r15,r10
- ror r14,28
- add rax,r8
- add r8,r15
- mov r13,rax
- add r14,r8
- vmovdqa XMMWORD PTR[16+rsp],xmm10
- vpalignr xmm8,xmm3,xmm2,8
- ror r13,23
- mov r8,r14
- vpalignr xmm11,xmm7,xmm6,8
- mov r12,rbx
- ror r14,5
-DB 143,72,120,195,200,56
- xor r13,rax
- xor r12,rcx
- vpsrlq xmm8,xmm8,7
- ror r13,4
- xor r14,r8
- vpaddq xmm2,xmm2,xmm11
- and r12,rax
- xor r13,rax
- add rdx,QWORD PTR[32+rsp]
- mov r15,r8
-DB 143,72,120,195,209,7
- xor r12,rcx
- ror r14,6
- vpxor xmm8,xmm8,xmm9
- xor r15,r9
- add rdx,r12
- ror r13,14
- and rdi,r15
-DB 143,104,120,195,217,3
- xor r14,r8
- add rdx,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,r9
- ror r14,28
- vpsrlq xmm10,xmm1,6
- add r11,rdx
- add rdx,rdi
- vpaddq xmm2,xmm2,xmm8
- mov r13,r11
- add r14,rdx
-DB 143,72,120,195,203,42
- ror r13,23
- mov rdx,r14
- vpxor xmm11,xmm11,xmm10
- mov r12,rax
- ror r14,5
- xor r13,r11
- xor r12,rbx
- vpxor xmm11,xmm11,xmm9
- ror r13,4
- xor r14,rdx
- and r12,r11
- xor r13,r11
- vpaddq xmm2,xmm2,xmm11
- add rcx,QWORD PTR[40+rsp]
- mov rdi,rdx
- xor r12,rbx
- ror r14,6
- vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
- xor rdi,r8
- add rcx,r12
- ror r13,14
- and r15,rdi
- xor r14,rdx
- add rcx,r13
- xor r15,r8
- ror r14,28
- add r10,rcx
- add rcx,r15
- mov r13,r10
- add r14,rcx
- vmovdqa XMMWORD PTR[32+rsp],xmm10
- vpalignr xmm8,xmm4,xmm3,8
- ror r13,23
- mov rcx,r14
- vpalignr xmm11,xmm0,xmm7,8
- mov r12,r11
- ror r14,5
-DB 143,72,120,195,200,56
- xor r13,r10
- xor r12,rax
- vpsrlq xmm8,xmm8,7
- ror r13,4
- xor r14,rcx
- vpaddq xmm3,xmm3,xmm11
- and r12,r10
- xor r13,r10
- add rbx,QWORD PTR[48+rsp]
- mov r15,rcx
-DB 143,72,120,195,209,7
- xor r12,rax
- ror r14,6
- vpxor xmm8,xmm8,xmm9
- xor r15,rdx
- add rbx,r12
- ror r13,14
- and rdi,r15
-DB 143,104,120,195,218,3
- xor r14,rcx
- add rbx,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,rdx
- ror r14,28
- vpsrlq xmm10,xmm2,6
- add r9,rbx
- add rbx,rdi
- vpaddq xmm3,xmm3,xmm8
- mov r13,r9
- add r14,rbx
-DB 143,72,120,195,203,42
- ror r13,23
- mov rbx,r14
- vpxor xmm11,xmm11,xmm10
- mov r12,r10
- ror r14,5
- xor r13,r9
- xor r12,r11
- vpxor xmm11,xmm11,xmm9
- ror r13,4
- xor r14,rbx
- and r12,r9
- xor r13,r9
- vpaddq xmm3,xmm3,xmm11
- add rax,QWORD PTR[56+rsp]
- mov rdi,rbx
- xor r12,r11
- ror r14,6
- vpaddq xmm10,xmm3,XMMWORD PTR[((-32))+rbp]
- xor rdi,rcx
- add rax,r12
- ror r13,14
- and r15,rdi
- xor r14,rbx
- add rax,r13
- xor r15,rcx
- ror r14,28
- add r8,rax
- add rax,r15
- mov r13,r8
- add r14,rax
- vmovdqa XMMWORD PTR[48+rsp],xmm10
- vpalignr xmm8,xmm5,xmm4,8
- ror r13,23
- mov rax,r14
- vpalignr xmm11,xmm1,xmm0,8
- mov r12,r9
- ror r14,5
-DB 143,72,120,195,200,56
- xor r13,r8
- xor r12,r10
- vpsrlq xmm8,xmm8,7
- ror r13,4
- xor r14,rax
- vpaddq xmm4,xmm4,xmm11
- and r12,r8
- xor r13,r8
- add r11,QWORD PTR[64+rsp]
- mov r15,rax
-DB 143,72,120,195,209,7
- xor r12,r10
- ror r14,6
- vpxor xmm8,xmm8,xmm9
- xor r15,rbx
- add r11,r12
- ror r13,14
- and rdi,r15
-DB 143,104,120,195,219,3
- xor r14,rax
- add r11,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,rbx
- ror r14,28
- vpsrlq xmm10,xmm3,6
- add rdx,r11
- add r11,rdi
- vpaddq xmm4,xmm4,xmm8
- mov r13,rdx
- add r14,r11
-DB 143,72,120,195,203,42
- ror r13,23
- mov r11,r14
- vpxor xmm11,xmm11,xmm10
- mov r12,r8
- ror r14,5
- xor r13,rdx
- xor r12,r9
- vpxor xmm11,xmm11,xmm9
- ror r13,4
- xor r14,r11
- and r12,rdx
- xor r13,rdx
- vpaddq xmm4,xmm4,xmm11
- add r10,QWORD PTR[72+rsp]
- mov rdi,r11
- xor r12,r9
- ror r14,6
- vpaddq xmm10,xmm4,XMMWORD PTR[rbp]
- xor rdi,rax
- add r10,r12
- ror r13,14
- and r15,rdi
- xor r14,r11
- add r10,r13
- xor r15,rax
- ror r14,28
- add rcx,r10
- add r10,r15
- mov r13,rcx
- add r14,r10
- vmovdqa XMMWORD PTR[64+rsp],xmm10
- vpalignr xmm8,xmm6,xmm5,8
- ror r13,23
- mov r10,r14
- vpalignr xmm11,xmm2,xmm1,8
- mov r12,rdx
- ror r14,5
-DB 143,72,120,195,200,56
- xor r13,rcx
- xor r12,r8
- vpsrlq xmm8,xmm8,7
- ror r13,4
- xor r14,r10
- vpaddq xmm5,xmm5,xmm11
- and r12,rcx
- xor r13,rcx
- add r9,QWORD PTR[80+rsp]
- mov r15,r10
-DB 143,72,120,195,209,7
- xor r12,r8
- ror r14,6
- vpxor xmm8,xmm8,xmm9
- xor r15,r11
- add r9,r12
- ror r13,14
- and rdi,r15
-DB 143,104,120,195,220,3
- xor r14,r10
- add r9,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,r11
- ror r14,28
- vpsrlq xmm10,xmm4,6
- add rbx,r9
- add r9,rdi
- vpaddq xmm5,xmm5,xmm8
- mov r13,rbx
- add r14,r9
-DB 143,72,120,195,203,42
- ror r13,23
- mov r9,r14
- vpxor xmm11,xmm11,xmm10
- mov r12,rcx
- ror r14,5
- xor r13,rbx
- xor r12,rdx
- vpxor xmm11,xmm11,xmm9
- ror r13,4
- xor r14,r9
- and r12,rbx
- xor r13,rbx
- vpaddq xmm5,xmm5,xmm11
- add r8,QWORD PTR[88+rsp]
- mov rdi,r9
- xor r12,rdx
- ror r14,6
- vpaddq xmm10,xmm5,XMMWORD PTR[32+rbp]
- xor rdi,r10
- add r8,r12
- ror r13,14
- and r15,rdi
- xor r14,r9
- add r8,r13
- xor r15,r10
- ror r14,28
- add rax,r8
- add r8,r15
- mov r13,rax
- add r14,r8
- vmovdqa XMMWORD PTR[80+rsp],xmm10
- vpalignr xmm8,xmm7,xmm6,8
- ror r13,23
- mov r8,r14
- vpalignr xmm11,xmm3,xmm2,8
- mov r12,rbx
- ror r14,5
-DB 143,72,120,195,200,56
- xor r13,rax
- xor r12,rcx
- vpsrlq xmm8,xmm8,7
- ror r13,4
- xor r14,r8
- vpaddq xmm6,xmm6,xmm11
- and r12,rax
- xor r13,rax
- add rdx,QWORD PTR[96+rsp]
- mov r15,r8
-DB 143,72,120,195,209,7
- xor r12,rcx
- ror r14,6
- vpxor xmm8,xmm8,xmm9
- xor r15,r9
- add rdx,r12
- ror r13,14
- and rdi,r15
-DB 143,104,120,195,221,3
- xor r14,r8
- add rdx,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,r9
- ror r14,28
- vpsrlq xmm10,xmm5,6
- add r11,rdx
- add rdx,rdi
- vpaddq xmm6,xmm6,xmm8
- mov r13,r11
- add r14,rdx
-DB 143,72,120,195,203,42
- ror r13,23
- mov rdx,r14
- vpxor xmm11,xmm11,xmm10
- mov r12,rax
- ror r14,5
- xor r13,r11
- xor r12,rbx
- vpxor xmm11,xmm11,xmm9
- ror r13,4
- xor r14,rdx
- and r12,r11
- xor r13,r11
- vpaddq xmm6,xmm6,xmm11
- add rcx,QWORD PTR[104+rsp]
- mov rdi,rdx
- xor r12,rbx
- ror r14,6
- vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
- xor rdi,r8
- add rcx,r12
- ror r13,14
- and r15,rdi
- xor r14,rdx
- add rcx,r13
- xor r15,r8
- ror r14,28
- add r10,rcx
- add rcx,r15
- mov r13,r10
- add r14,rcx
- vmovdqa XMMWORD PTR[96+rsp],xmm10
- vpalignr xmm8,xmm0,xmm7,8
- ror r13,23
- mov rcx,r14
- vpalignr xmm11,xmm4,xmm3,8
- mov r12,r11
- ror r14,5
-DB 143,72,120,195,200,56
- xor r13,r10
- xor r12,rax
- vpsrlq xmm8,xmm8,7
- ror r13,4
- xor r14,rcx
- vpaddq xmm7,xmm7,xmm11
- and r12,r10
- xor r13,r10
- add rbx,QWORD PTR[112+rsp]
- mov r15,rcx
-DB 143,72,120,195,209,7
- xor r12,rax
- ror r14,6
- vpxor xmm8,xmm8,xmm9
- xor r15,rdx
- add rbx,r12
- ror r13,14
- and rdi,r15
-DB 143,104,120,195,222,3
- xor r14,rcx
- add rbx,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,rdx
- ror r14,28
- vpsrlq xmm10,xmm6,6
- add r9,rbx
- add rbx,rdi
- vpaddq xmm7,xmm7,xmm8
- mov r13,r9
- add r14,rbx
-DB 143,72,120,195,203,42
- ror r13,23
- mov rbx,r14
- vpxor xmm11,xmm11,xmm10
- mov r12,r10
- ror r14,5
- xor r13,r9
- xor r12,r11
- vpxor xmm11,xmm11,xmm9
- ror r13,4
- xor r14,rbx
- and r12,r9
- xor r13,r9
- vpaddq xmm7,xmm7,xmm11
- add rax,QWORD PTR[120+rsp]
- mov rdi,rbx
- xor r12,r11
- ror r14,6
- vpaddq xmm10,xmm7,XMMWORD PTR[96+rbp]
- xor rdi,rcx
- add rax,r12
- ror r13,14
- and r15,rdi
- xor r14,rbx
- add rax,r13
- xor r15,rcx
- ror r14,28
- add r8,rax
- add rax,r15
- mov r13,r8
- add r14,rax
- vmovdqa XMMWORD PTR[112+rsp],xmm10
- cmp BYTE PTR[135+rbp],0
- jne $L$xop_00_47
- ror r13,23
- mov rax,r14
- mov r12,r9
- ror r14,5
- xor r13,r8
- xor r12,r10
- ror r13,4
- xor r14,rax
- and r12,r8
- xor r13,r8
- add r11,QWORD PTR[rsp]
- mov r15,rax
- xor r12,r10
- ror r14,6
- xor r15,rbx
- add r11,r12
- ror r13,14
- and rdi,r15
- xor r14,rax
- add r11,r13
- xor rdi,rbx
- ror r14,28
- add rdx,r11
- add r11,rdi
- mov r13,rdx
- add r14,r11
- ror r13,23
- mov r11,r14
- mov r12,r8
- ror r14,5
- xor r13,rdx
- xor r12,r9
- ror r13,4
- xor r14,r11
- and r12,rdx
- xor r13,rdx
- add r10,QWORD PTR[8+rsp]
- mov rdi,r11
- xor r12,r9
- ror r14,6
- xor rdi,rax
- add r10,r12
- ror r13,14
- and r15,rdi
- xor r14,r11
- add r10,r13
- xor r15,rax
- ror r14,28
- add rcx,r10
- add r10,r15
- mov r13,rcx
- add r14,r10
- ror r13,23
- mov r10,r14
- mov r12,rdx
- ror r14,5
- xor r13,rcx
- xor r12,r8
- ror r13,4
- xor r14,r10
- and r12,rcx
- xor r13,rcx
- add r9,QWORD PTR[16+rsp]
- mov r15,r10
- xor r12,r8
- ror r14,6
- xor r15,r11
- add r9,r12
- ror r13,14
- and rdi,r15
- xor r14,r10
- add r9,r13
- xor rdi,r11
- ror r14,28
- add rbx,r9
- add r9,rdi
- mov r13,rbx
- add r14,r9
- ror r13,23
- mov r9,r14
- mov r12,rcx
- ror r14,5
- xor r13,rbx
- xor r12,rdx
- ror r13,4
- xor r14,r9
- and r12,rbx
- xor r13,rbx
- add r8,QWORD PTR[24+rsp]
- mov rdi,r9
- xor r12,rdx
- ror r14,6
- xor rdi,r10
- add r8,r12
- ror r13,14
- and r15,rdi
- xor r14,r9
- add r8,r13
- xor r15,r10
- ror r14,28
- add rax,r8
- add r8,r15
- mov r13,rax
- add r14,r8
- ror r13,23
- mov r8,r14
- mov r12,rbx
- ror r14,5
- xor r13,rax
- xor r12,rcx
- ror r13,4
- xor r14,r8
- and r12,rax
- xor r13,rax
- add rdx,QWORD PTR[32+rsp]
- mov r15,r8
- xor r12,rcx
- ror r14,6
- xor r15,r9
- add rdx,r12
- ror r13,14
- and rdi,r15
- xor r14,r8
- add rdx,r13
- xor rdi,r9
- ror r14,28
- add r11,rdx
- add rdx,rdi
- mov r13,r11
- add r14,rdx
- ror r13,23
- mov rdx,r14
- mov r12,rax
- ror r14,5
- xor r13,r11
- xor r12,rbx
- ror r13,4
- xor r14,rdx
- and r12,r11
- xor r13,r11
- add rcx,QWORD PTR[40+rsp]
- mov rdi,rdx
- xor r12,rbx
- ror r14,6
- xor rdi,r8
- add rcx,r12
- ror r13,14
- and r15,rdi
- xor r14,rdx
- add rcx,r13
- xor r15,r8
- ror r14,28
- add r10,rcx
- add rcx,r15
- mov r13,r10
- add r14,rcx
- ror r13,23
- mov rcx,r14
- mov r12,r11
- ror r14,5
- xor r13,r10
- xor r12,rax
- ror r13,4
- xor r14,rcx
- and r12,r10
- xor r13,r10
- add rbx,QWORD PTR[48+rsp]
- mov r15,rcx
- xor r12,rax
- ror r14,6
- xor r15,rdx
- add rbx,r12
- ror r13,14
- and rdi,r15
- xor r14,rcx
- add rbx,r13
- xor rdi,rdx
- ror r14,28
- add r9,rbx
- add rbx,rdi
- mov r13,r9
- add r14,rbx
- ror r13,23
- mov rbx,r14
- mov r12,r10
- ror r14,5
- xor r13,r9
- xor r12,r11
- ror r13,4
- xor r14,rbx
- and r12,r9
- xor r13,r9
- add rax,QWORD PTR[56+rsp]
- mov rdi,rbx
- xor r12,r11
- ror r14,6
- xor rdi,rcx
- add rax,r12
- ror r13,14
- and r15,rdi
- xor r14,rbx
- add rax,r13
- xor r15,rcx
- ror r14,28
- add r8,rax
- add rax,r15
- mov r13,r8
- add r14,rax
- ror r13,23
- mov rax,r14
- mov r12,r9
- ror r14,5
- xor r13,r8
- xor r12,r10
- ror r13,4
- xor r14,rax
- and r12,r8
- xor r13,r8
- add r11,QWORD PTR[64+rsp]
- mov r15,rax
- xor r12,r10
- ror r14,6
- xor r15,rbx
- add r11,r12
- ror r13,14
- and rdi,r15
- xor r14,rax
- add r11,r13
- xor rdi,rbx
- ror r14,28
- add rdx,r11
- add r11,rdi
- mov r13,rdx
- add r14,r11
- ror r13,23
- mov r11,r14
- mov r12,r8
- ror r14,5
- xor r13,rdx
- xor r12,r9
- ror r13,4
- xor r14,r11
- and r12,rdx
- xor r13,rdx
- add r10,QWORD PTR[72+rsp]
- mov rdi,r11
- xor r12,r9
- ror r14,6
- xor rdi,rax
- add r10,r12
- ror r13,14
- and r15,rdi
- xor r14,r11
- add r10,r13
- xor r15,rax
- ror r14,28
- add rcx,r10
- add r10,r15
- mov r13,rcx
- add r14,r10
- ror r13,23
- mov r10,r14
- mov r12,rdx
- ror r14,5
- xor r13,rcx
- xor r12,r8
- ror r13,4
- xor r14,r10
- and r12,rcx
- xor r13,rcx
- add r9,QWORD PTR[80+rsp]
- mov r15,r10
- xor r12,r8
- ror r14,6
- xor r15,r11
- add r9,r12
- ror r13,14
- and rdi,r15
- xor r14,r10
- add r9,r13
- xor rdi,r11
- ror r14,28
- add rbx,r9
- add r9,rdi
- mov r13,rbx
- add r14,r9
- ror r13,23
- mov r9,r14
- mov r12,rcx
- ror r14,5
- xor r13,rbx
- xor r12,rdx
- ror r13,4
- xor r14,r9
- and r12,rbx
- xor r13,rbx
- add r8,QWORD PTR[88+rsp]
- mov rdi,r9
- xor r12,rdx
- ror r14,6
- xor rdi,r10
- add r8,r12
- ror r13,14
- and r15,rdi
- xor r14,r9
- add r8,r13
- xor r15,r10
- ror r14,28
- add rax,r8
- add r8,r15
- mov r13,rax
- add r14,r8
- ror r13,23
- mov r8,r14
- mov r12,rbx
- ror r14,5
- xor r13,rax
- xor r12,rcx
- ror r13,4
- xor r14,r8
- and r12,rax
- xor r13,rax
- add rdx,QWORD PTR[96+rsp]
- mov r15,r8
- xor r12,rcx
- ror r14,6
- xor r15,r9
- add rdx,r12
- ror r13,14
- and rdi,r15
- xor r14,r8
- add rdx,r13
- xor rdi,r9
- ror r14,28
- add r11,rdx
- add rdx,rdi
- mov r13,r11
- add r14,rdx
- ror r13,23
- mov rdx,r14
- mov r12,rax
- ror r14,5
- xor r13,r11
- xor r12,rbx
- ror r13,4
- xor r14,rdx
- and r12,r11
- xor r13,r11
- add rcx,QWORD PTR[104+rsp]
- mov rdi,rdx
- xor r12,rbx
- ror r14,6
- xor rdi,r8
- add rcx,r12
- ror r13,14
- and r15,rdi
- xor r14,rdx
- add rcx,r13
- xor r15,r8
- ror r14,28
- add r10,rcx
- add rcx,r15
- mov r13,r10
- add r14,rcx
- ror r13,23
- mov rcx,r14
- mov r12,r11
- ror r14,5
- xor r13,r10
- xor r12,rax
- ror r13,4
- xor r14,rcx
- and r12,r10
- xor r13,r10
- add rbx,QWORD PTR[112+rsp]
- mov r15,rcx
- xor r12,rax
- ror r14,6
- xor r15,rdx
- add rbx,r12
- ror r13,14
- and rdi,r15
- xor r14,rcx
- add rbx,r13
- xor rdi,rdx
- ror r14,28
- add r9,rbx
- add rbx,rdi
- mov r13,r9
- add r14,rbx
- ror r13,23
- mov rbx,r14
- mov r12,r10
- ror r14,5
- xor r13,r9
- xor r12,r11
- ror r13,4
- xor r14,rbx
- and r12,r9
- xor r13,r9
- add rax,QWORD PTR[120+rsp]
- mov rdi,rbx
- xor r12,r11
- ror r14,6
- xor rdi,rcx
- add rax,r12
- ror r13,14
- and r15,rdi
- xor r14,rbx
- add rax,r13
- xor r15,rcx
- ror r14,28
- add r8,rax
- add rax,r15
- mov r13,r8
- add r14,rax
- mov rdi,QWORD PTR[((128+0))+rsp]
- mov rax,r14
-
- add rax,QWORD PTR[rdi]
- lea rsi,QWORD PTR[128+rsi]
- add rbx,QWORD PTR[8+rdi]
- add rcx,QWORD PTR[16+rdi]
- add rdx,QWORD PTR[24+rdi]
- add r8,QWORD PTR[32+rdi]
- add r9,QWORD PTR[40+rdi]
- add r10,QWORD PTR[48+rdi]
- add r11,QWORD PTR[56+rdi]
-
- cmp rsi,QWORD PTR[((128+16))+rsp]
-
- mov QWORD PTR[rdi],rax
- mov QWORD PTR[8+rdi],rbx
- mov QWORD PTR[16+rdi],rcx
- mov QWORD PTR[24+rdi],rdx
- mov QWORD PTR[32+rdi],r8
- mov QWORD PTR[40+rdi],r9
- mov QWORD PTR[48+rdi],r10
- mov QWORD PTR[56+rdi],r11
- jb $L$loop_xop
-
- mov rsi,QWORD PTR[152+rsp]
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((128+32))+rsp]
- movaps xmm7,XMMWORD PTR[((128+48))+rsp]
- movaps xmm8,XMMWORD PTR[((128+64))+rsp]
- movaps xmm9,XMMWORD PTR[((128+80))+rsp]
- movaps xmm10,XMMWORD PTR[((128+96))+rsp]
- movaps xmm11,XMMWORD PTR[((128+112))+rsp]
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue_xop::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha512_block_data_order_xop::
-sha512_block_data_order_xop ENDP
-
-ALIGN 64
-sha512_block_data_order_avx PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha512_block_data_order_avx::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$avx_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- shl rdx,4
- sub rsp,256
- lea rdx,QWORD PTR[rdx*8+rsi]
- and rsp,-64
- mov QWORD PTR[((128+0))+rsp],rdi
- mov QWORD PTR[((128+8))+rsp],rsi
- mov QWORD PTR[((128+16))+rsp],rdx
- mov QWORD PTR[152+rsp],rax
-
- movaps XMMWORD PTR[(128+32)+rsp],xmm6
- movaps XMMWORD PTR[(128+48)+rsp],xmm7
- movaps XMMWORD PTR[(128+64)+rsp],xmm8
- movaps XMMWORD PTR[(128+80)+rsp],xmm9
- movaps XMMWORD PTR[(128+96)+rsp],xmm10
- movaps XMMWORD PTR[(128+112)+rsp],xmm11
-$L$prologue_avx::
-
- vzeroupper
- mov rax,QWORD PTR[rdi]
- mov rbx,QWORD PTR[8+rdi]
- mov rcx,QWORD PTR[16+rdi]
- mov rdx,QWORD PTR[24+rdi]
- mov r8,QWORD PTR[32+rdi]
- mov r9,QWORD PTR[40+rdi]
- mov r10,QWORD PTR[48+rdi]
- mov r11,QWORD PTR[56+rdi]
- jmp $L$loop_avx
-ALIGN 16
-$L$loop_avx::
- vmovdqa xmm11,XMMWORD PTR[((K512+1280))]
- vmovdqu xmm0,XMMWORD PTR[rsi]
- lea rbp,QWORD PTR[((K512+128))]
- vmovdqu xmm1,XMMWORD PTR[16+rsi]
- vmovdqu xmm2,XMMWORD PTR[32+rsi]
- vpshufb xmm0,xmm0,xmm11
- vmovdqu xmm3,XMMWORD PTR[48+rsi]
- vpshufb xmm1,xmm1,xmm11
- vmovdqu xmm4,XMMWORD PTR[64+rsi]
- vpshufb xmm2,xmm2,xmm11
- vmovdqu xmm5,XMMWORD PTR[80+rsi]
- vpshufb xmm3,xmm3,xmm11
- vmovdqu xmm6,XMMWORD PTR[96+rsi]
- vpshufb xmm4,xmm4,xmm11
- vmovdqu xmm7,XMMWORD PTR[112+rsi]
- vpshufb xmm5,xmm5,xmm11
- vpaddq xmm8,xmm0,XMMWORD PTR[((-128))+rbp]
- vpshufb xmm6,xmm6,xmm11
- vpaddq xmm9,xmm1,XMMWORD PTR[((-96))+rbp]
- vpshufb xmm7,xmm7,xmm11
- vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
- vpaddq xmm11,xmm3,XMMWORD PTR[((-32))+rbp]
- vmovdqa XMMWORD PTR[rsp],xmm8
- vpaddq xmm8,xmm4,XMMWORD PTR[rbp]
- vmovdqa XMMWORD PTR[16+rsp],xmm9
- vpaddq xmm9,xmm5,XMMWORD PTR[32+rbp]
- vmovdqa XMMWORD PTR[32+rsp],xmm10
- vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
- vmovdqa XMMWORD PTR[48+rsp],xmm11
- vpaddq xmm11,xmm7,XMMWORD PTR[96+rbp]
- vmovdqa XMMWORD PTR[64+rsp],xmm8
- mov r14,rax
- vmovdqa XMMWORD PTR[80+rsp],xmm9
- mov rdi,rbx
- vmovdqa XMMWORD PTR[96+rsp],xmm10
- xor rdi,rcx
- vmovdqa XMMWORD PTR[112+rsp],xmm11
- mov r13,r8
- jmp $L$avx_00_47
-
-ALIGN 16
-$L$avx_00_47::
- add rbp,256
- vpalignr xmm8,xmm1,xmm0,8
- shrd r13,r13,23
- mov rax,r14
- vpalignr xmm11,xmm5,xmm4,8
- mov r12,r9
- shrd r14,r14,5
- vpsrlq xmm10,xmm8,1
- xor r13,r8
- xor r12,r10
- vpaddq xmm0,xmm0,xmm11
- shrd r13,r13,4
- xor r14,rax
- vpsrlq xmm11,xmm8,7
- and r12,r8
- xor r13,r8
- vpsllq xmm9,xmm8,56
- add r11,QWORD PTR[rsp]
- mov r15,rax
- vpxor xmm8,xmm11,xmm10
- xor r12,r10
- shrd r14,r14,6
- vpsrlq xmm10,xmm10,7
- xor r15,rbx
- add r11,r12
- vpxor xmm8,xmm8,xmm9
- shrd r13,r13,14
- and rdi,r15
- vpsllq xmm9,xmm9,7
- xor r14,rax
- add r11,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,rbx
- shrd r14,r14,28
- vpsrlq xmm11,xmm7,6
- add rdx,r11
- add r11,rdi
- vpxor xmm8,xmm8,xmm9
- mov r13,rdx
- add r14,r11
- vpsllq xmm10,xmm7,3
- shrd r13,r13,23
- mov r11,r14
- vpaddq xmm0,xmm0,xmm8
- mov r12,r8
- shrd r14,r14,5
- vpsrlq xmm9,xmm7,19
- xor r13,rdx
- xor r12,r9
- vpxor xmm11,xmm11,xmm10
- shrd r13,r13,4
- xor r14,r11
- vpsllq xmm10,xmm10,42
- and r12,rdx
- xor r13,rdx
- vpxor xmm11,xmm11,xmm9
- add r10,QWORD PTR[8+rsp]
- mov rdi,r11
- vpsrlq xmm9,xmm9,42
- xor r12,r9
- shrd r14,r14,6
- vpxor xmm11,xmm11,xmm10
- xor rdi,rax
- add r10,r12
- vpxor xmm11,xmm11,xmm9
- shrd r13,r13,14
- and r15,rdi
- vpaddq xmm0,xmm0,xmm11
- xor r14,r11
- add r10,r13
- vpaddq xmm10,xmm0,XMMWORD PTR[((-128))+rbp]
- xor r15,rax
- shrd r14,r14,28
- add rcx,r10
- add r10,r15
- mov r13,rcx
- add r14,r10
- vmovdqa XMMWORD PTR[rsp],xmm10
- vpalignr xmm8,xmm2,xmm1,8
- shrd r13,r13,23
- mov r10,r14
- vpalignr xmm11,xmm6,xmm5,8
- mov r12,rdx
- shrd r14,r14,5
- vpsrlq xmm10,xmm8,1
- xor r13,rcx
- xor r12,r8
- vpaddq xmm1,xmm1,xmm11
- shrd r13,r13,4
- xor r14,r10
- vpsrlq xmm11,xmm8,7
- and r12,rcx
- xor r13,rcx
- vpsllq xmm9,xmm8,56
- add r9,QWORD PTR[16+rsp]
- mov r15,r10
- vpxor xmm8,xmm11,xmm10
- xor r12,r8
- shrd r14,r14,6
- vpsrlq xmm10,xmm10,7
- xor r15,r11
- add r9,r12
- vpxor xmm8,xmm8,xmm9
- shrd r13,r13,14
- and rdi,r15
- vpsllq xmm9,xmm9,7
- xor r14,r10
- add r9,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,r11
- shrd r14,r14,28
- vpsrlq xmm11,xmm0,6
- add rbx,r9
- add r9,rdi
- vpxor xmm8,xmm8,xmm9
- mov r13,rbx
- add r14,r9
- vpsllq xmm10,xmm0,3
- shrd r13,r13,23
- mov r9,r14
- vpaddq xmm1,xmm1,xmm8
- mov r12,rcx
- shrd r14,r14,5
- vpsrlq xmm9,xmm0,19
- xor r13,rbx
- xor r12,rdx
- vpxor xmm11,xmm11,xmm10
- shrd r13,r13,4
- xor r14,r9
- vpsllq xmm10,xmm10,42
- and r12,rbx
- xor r13,rbx
- vpxor xmm11,xmm11,xmm9
- add r8,QWORD PTR[24+rsp]
- mov rdi,r9
- vpsrlq xmm9,xmm9,42
- xor r12,rdx
- shrd r14,r14,6
- vpxor xmm11,xmm11,xmm10
- xor rdi,r10
- add r8,r12
- vpxor xmm11,xmm11,xmm9
- shrd r13,r13,14
- and r15,rdi
- vpaddq xmm1,xmm1,xmm11
- xor r14,r9
- add r8,r13
- vpaddq xmm10,xmm1,XMMWORD PTR[((-96))+rbp]
- xor r15,r10
- shrd r14,r14,28
- add rax,r8
- add r8,r15
- mov r13,rax
- add r14,r8
- vmovdqa XMMWORD PTR[16+rsp],xmm10
- vpalignr xmm8,xmm3,xmm2,8
- shrd r13,r13,23
- mov r8,r14
- vpalignr xmm11,xmm7,xmm6,8
- mov r12,rbx
- shrd r14,r14,5
- vpsrlq xmm10,xmm8,1
- xor r13,rax
- xor r12,rcx
- vpaddq xmm2,xmm2,xmm11
- shrd r13,r13,4
- xor r14,r8
- vpsrlq xmm11,xmm8,7
- and r12,rax
- xor r13,rax
- vpsllq xmm9,xmm8,56
- add rdx,QWORD PTR[32+rsp]
- mov r15,r8
- vpxor xmm8,xmm11,xmm10
- xor r12,rcx
- shrd r14,r14,6
- vpsrlq xmm10,xmm10,7
- xor r15,r9
- add rdx,r12
- vpxor xmm8,xmm8,xmm9
- shrd r13,r13,14
- and rdi,r15
- vpsllq xmm9,xmm9,7
- xor r14,r8
- add rdx,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,r9
- shrd r14,r14,28
- vpsrlq xmm11,xmm1,6
- add r11,rdx
- add rdx,rdi
- vpxor xmm8,xmm8,xmm9
- mov r13,r11
- add r14,rdx
- vpsllq xmm10,xmm1,3
- shrd r13,r13,23
- mov rdx,r14
- vpaddq xmm2,xmm2,xmm8
- mov r12,rax
- shrd r14,r14,5
- vpsrlq xmm9,xmm1,19
- xor r13,r11
- xor r12,rbx
- vpxor xmm11,xmm11,xmm10
- shrd r13,r13,4
- xor r14,rdx
- vpsllq xmm10,xmm10,42
- and r12,r11
- xor r13,r11
- vpxor xmm11,xmm11,xmm9
- add rcx,QWORD PTR[40+rsp]
- mov rdi,rdx
- vpsrlq xmm9,xmm9,42
- xor r12,rbx
- shrd r14,r14,6
- vpxor xmm11,xmm11,xmm10
- xor rdi,r8
- add rcx,r12
- vpxor xmm11,xmm11,xmm9
- shrd r13,r13,14
- and r15,rdi
- vpaddq xmm2,xmm2,xmm11
- xor r14,rdx
- add rcx,r13
- vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
- xor r15,r8
- shrd r14,r14,28
- add r10,rcx
- add rcx,r15
- mov r13,r10
- add r14,rcx
- vmovdqa XMMWORD PTR[32+rsp],xmm10
- vpalignr xmm8,xmm4,xmm3,8
- shrd r13,r13,23
- mov rcx,r14
- vpalignr xmm11,xmm0,xmm7,8
- mov r12,r11
- shrd r14,r14,5
- vpsrlq xmm10,xmm8,1
- xor r13,r10
- xor r12,rax
- vpaddq xmm3,xmm3,xmm11
- shrd r13,r13,4
- xor r14,rcx
- vpsrlq xmm11,xmm8,7
- and r12,r10
- xor r13,r10
- vpsllq xmm9,xmm8,56
- add rbx,QWORD PTR[48+rsp]
- mov r15,rcx
- vpxor xmm8,xmm11,xmm10
- xor r12,rax
- shrd r14,r14,6
- vpsrlq xmm10,xmm10,7
- xor r15,rdx
- add rbx,r12
- vpxor xmm8,xmm8,xmm9
- shrd r13,r13,14
- and rdi,r15
- vpsllq xmm9,xmm9,7
- xor r14,rcx
- add rbx,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,rdx
- shrd r14,r14,28
- vpsrlq xmm11,xmm2,6
- add r9,rbx
- add rbx,rdi
- vpxor xmm8,xmm8,xmm9
- mov r13,r9
- add r14,rbx
- vpsllq xmm10,xmm2,3
- shrd r13,r13,23
- mov rbx,r14
- vpaddq xmm3,xmm3,xmm8
- mov r12,r10
- shrd r14,r14,5
- vpsrlq xmm9,xmm2,19
- xor r13,r9
- xor r12,r11
- vpxor xmm11,xmm11,xmm10
- shrd r13,r13,4
- xor r14,rbx
- vpsllq xmm10,xmm10,42
- and r12,r9
- xor r13,r9
- vpxor xmm11,xmm11,xmm9
- add rax,QWORD PTR[56+rsp]
- mov rdi,rbx
- vpsrlq xmm9,xmm9,42
- xor r12,r11
- shrd r14,r14,6
- vpxor xmm11,xmm11,xmm10
- xor rdi,rcx
- add rax,r12
- vpxor xmm11,xmm11,xmm9
- shrd r13,r13,14
- and r15,rdi
- vpaddq xmm3,xmm3,xmm11
- xor r14,rbx
- add rax,r13
- vpaddq xmm10,xmm3,XMMWORD PTR[((-32))+rbp]
- xor r15,rcx
- shrd r14,r14,28
- add r8,rax
- add rax,r15
- mov r13,r8
- add r14,rax
- vmovdqa XMMWORD PTR[48+rsp],xmm10
- vpalignr xmm8,xmm5,xmm4,8
- shrd r13,r13,23
- mov rax,r14
- vpalignr xmm11,xmm1,xmm0,8
- mov r12,r9
- shrd r14,r14,5
- vpsrlq xmm10,xmm8,1
- xor r13,r8
- xor r12,r10
- vpaddq xmm4,xmm4,xmm11
- shrd r13,r13,4
- xor r14,rax
- vpsrlq xmm11,xmm8,7
- and r12,r8
- xor r13,r8
- vpsllq xmm9,xmm8,56
- add r11,QWORD PTR[64+rsp]
- mov r15,rax
- vpxor xmm8,xmm11,xmm10
- xor r12,r10
- shrd r14,r14,6
- vpsrlq xmm10,xmm10,7
- xor r15,rbx
- add r11,r12
- vpxor xmm8,xmm8,xmm9
- shrd r13,r13,14
- and rdi,r15
- vpsllq xmm9,xmm9,7
- xor r14,rax
- add r11,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,rbx
- shrd r14,r14,28
- vpsrlq xmm11,xmm3,6
- add rdx,r11
- add r11,rdi
- vpxor xmm8,xmm8,xmm9
- mov r13,rdx
- add r14,r11
- vpsllq xmm10,xmm3,3
- shrd r13,r13,23
- mov r11,r14
- vpaddq xmm4,xmm4,xmm8
- mov r12,r8
- shrd r14,r14,5
- vpsrlq xmm9,xmm3,19
- xor r13,rdx
- xor r12,r9
- vpxor xmm11,xmm11,xmm10
- shrd r13,r13,4
- xor r14,r11
- vpsllq xmm10,xmm10,42
- and r12,rdx
- xor r13,rdx
- vpxor xmm11,xmm11,xmm9
- add r10,QWORD PTR[72+rsp]
- mov rdi,r11
- vpsrlq xmm9,xmm9,42
- xor r12,r9
- shrd r14,r14,6
- vpxor xmm11,xmm11,xmm10
- xor rdi,rax
- add r10,r12
- vpxor xmm11,xmm11,xmm9
- shrd r13,r13,14
- and r15,rdi
- vpaddq xmm4,xmm4,xmm11
- xor r14,r11
- add r10,r13
- vpaddq xmm10,xmm4,XMMWORD PTR[rbp]
- xor r15,rax
- shrd r14,r14,28
- add rcx,r10
- add r10,r15
- mov r13,rcx
- add r14,r10
- vmovdqa XMMWORD PTR[64+rsp],xmm10
- vpalignr xmm8,xmm6,xmm5,8
- shrd r13,r13,23
- mov r10,r14
- vpalignr xmm11,xmm2,xmm1,8
- mov r12,rdx
- shrd r14,r14,5
- vpsrlq xmm10,xmm8,1
- xor r13,rcx
- xor r12,r8
- vpaddq xmm5,xmm5,xmm11
- shrd r13,r13,4
- xor r14,r10
- vpsrlq xmm11,xmm8,7
- and r12,rcx
- xor r13,rcx
- vpsllq xmm9,xmm8,56
- add r9,QWORD PTR[80+rsp]
- mov r15,r10
- vpxor xmm8,xmm11,xmm10
- xor r12,r8
- shrd r14,r14,6
- vpsrlq xmm10,xmm10,7
- xor r15,r11
- add r9,r12
- vpxor xmm8,xmm8,xmm9
- shrd r13,r13,14
- and rdi,r15
- vpsllq xmm9,xmm9,7
- xor r14,r10
- add r9,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,r11
- shrd r14,r14,28
- vpsrlq xmm11,xmm4,6
- add rbx,r9
- add r9,rdi
- vpxor xmm8,xmm8,xmm9
- mov r13,rbx
- add r14,r9
- vpsllq xmm10,xmm4,3
- shrd r13,r13,23
- mov r9,r14
- vpaddq xmm5,xmm5,xmm8
- mov r12,rcx
- shrd r14,r14,5
- vpsrlq xmm9,xmm4,19
- xor r13,rbx
- xor r12,rdx
- vpxor xmm11,xmm11,xmm10
- shrd r13,r13,4
- xor r14,r9
- vpsllq xmm10,xmm10,42
- and r12,rbx
- xor r13,rbx
- vpxor xmm11,xmm11,xmm9
- add r8,QWORD PTR[88+rsp]
- mov rdi,r9
- vpsrlq xmm9,xmm9,42
- xor r12,rdx
- shrd r14,r14,6
- vpxor xmm11,xmm11,xmm10
- xor rdi,r10
- add r8,r12
- vpxor xmm11,xmm11,xmm9
- shrd r13,r13,14
- and r15,rdi
- vpaddq xmm5,xmm5,xmm11
- xor r14,r9
- add r8,r13
- vpaddq xmm10,xmm5,XMMWORD PTR[32+rbp]
- xor r15,r10
- shrd r14,r14,28
- add rax,r8
- add r8,r15
- mov r13,rax
- add r14,r8
- vmovdqa XMMWORD PTR[80+rsp],xmm10
- vpalignr xmm8,xmm7,xmm6,8
- shrd r13,r13,23
- mov r8,r14
- vpalignr xmm11,xmm3,xmm2,8
- mov r12,rbx
- shrd r14,r14,5
- vpsrlq xmm10,xmm8,1
- xor r13,rax
- xor r12,rcx
- vpaddq xmm6,xmm6,xmm11
- shrd r13,r13,4
- xor r14,r8
- vpsrlq xmm11,xmm8,7
- and r12,rax
- xor r13,rax
- vpsllq xmm9,xmm8,56
- add rdx,QWORD PTR[96+rsp]
- mov r15,r8
- vpxor xmm8,xmm11,xmm10
- xor r12,rcx
- shrd r14,r14,6
- vpsrlq xmm10,xmm10,7
- xor r15,r9
- add rdx,r12
- vpxor xmm8,xmm8,xmm9
- shrd r13,r13,14
- and rdi,r15
- vpsllq xmm9,xmm9,7
- xor r14,r8
- add rdx,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,r9
- shrd r14,r14,28
- vpsrlq xmm11,xmm5,6
- add r11,rdx
- add rdx,rdi
- vpxor xmm8,xmm8,xmm9
- mov r13,r11
- add r14,rdx
- vpsllq xmm10,xmm5,3
- shrd r13,r13,23
- mov rdx,r14
- vpaddq xmm6,xmm6,xmm8
- mov r12,rax
- shrd r14,r14,5
- vpsrlq xmm9,xmm5,19
- xor r13,r11
- xor r12,rbx
- vpxor xmm11,xmm11,xmm10
- shrd r13,r13,4
- xor r14,rdx
- vpsllq xmm10,xmm10,42
- and r12,r11
- xor r13,r11
- vpxor xmm11,xmm11,xmm9
- add rcx,QWORD PTR[104+rsp]
- mov rdi,rdx
- vpsrlq xmm9,xmm9,42
- xor r12,rbx
- shrd r14,r14,6
- vpxor xmm11,xmm11,xmm10
- xor rdi,r8
- add rcx,r12
- vpxor xmm11,xmm11,xmm9
- shrd r13,r13,14
- and r15,rdi
- vpaddq xmm6,xmm6,xmm11
- xor r14,rdx
- add rcx,r13
- vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
- xor r15,r8
- shrd r14,r14,28
- add r10,rcx
- add rcx,r15
- mov r13,r10
- add r14,rcx
- vmovdqa XMMWORD PTR[96+rsp],xmm10
- vpalignr xmm8,xmm0,xmm7,8
- shrd r13,r13,23
- mov rcx,r14
- vpalignr xmm11,xmm4,xmm3,8
- mov r12,r11
- shrd r14,r14,5
- vpsrlq xmm10,xmm8,1
- xor r13,r10
- xor r12,rax
- vpaddq xmm7,xmm7,xmm11
- shrd r13,r13,4
- xor r14,rcx
- vpsrlq xmm11,xmm8,7
- and r12,r10
- xor r13,r10
- vpsllq xmm9,xmm8,56
- add rbx,QWORD PTR[112+rsp]
- mov r15,rcx
- vpxor xmm8,xmm11,xmm10
- xor r12,rax
- shrd r14,r14,6
- vpsrlq xmm10,xmm10,7
- xor r15,rdx
- add rbx,r12
- vpxor xmm8,xmm8,xmm9
- shrd r13,r13,14
- and rdi,r15
- vpsllq xmm9,xmm9,7
- xor r14,rcx
- add rbx,r13
- vpxor xmm8,xmm8,xmm10
- xor rdi,rdx
- shrd r14,r14,28
- vpsrlq xmm11,xmm6,6
- add r9,rbx
- add rbx,rdi
- vpxor xmm8,xmm8,xmm9
- mov r13,r9
- add r14,rbx
- vpsllq xmm10,xmm6,3
- shrd r13,r13,23
- mov rbx,r14
- vpaddq xmm7,xmm7,xmm8
- mov r12,r10
- shrd r14,r14,5
- vpsrlq xmm9,xmm6,19
- xor r13,r9
- xor r12,r11
- vpxor xmm11,xmm11,xmm10
- shrd r13,r13,4
- xor r14,rbx
- vpsllq xmm10,xmm10,42
- and r12,r9
- xor r13,r9
- vpxor xmm11,xmm11,xmm9
- add rax,QWORD PTR[120+rsp]
- mov rdi,rbx
- vpsrlq xmm9,xmm9,42
- xor r12,r11
- shrd r14,r14,6
- vpxor xmm11,xmm11,xmm10
- xor rdi,rcx
- add rax,r12
- vpxor xmm11,xmm11,xmm9
- shrd r13,r13,14
- and r15,rdi
- vpaddq xmm7,xmm7,xmm11
- xor r14,rbx
- add rax,r13
- vpaddq xmm10,xmm7,XMMWORD PTR[96+rbp]
- xor r15,rcx
- shrd r14,r14,28
- add r8,rax
- add rax,r15
- mov r13,r8
- add r14,rax
- vmovdqa XMMWORD PTR[112+rsp],xmm10
- cmp BYTE PTR[135+rbp],0
- jne $L$avx_00_47
- shrd r13,r13,23
- mov rax,r14
- mov r12,r9
- shrd r14,r14,5
- xor r13,r8
- xor r12,r10
- shrd r13,r13,4
- xor r14,rax
- and r12,r8
- xor r13,r8
- add r11,QWORD PTR[rsp]
- mov r15,rax
- xor r12,r10
- shrd r14,r14,6
- xor r15,rbx
- add r11,r12
- shrd r13,r13,14
- and rdi,r15
- xor r14,rax
- add r11,r13
- xor rdi,rbx
- shrd r14,r14,28
- add rdx,r11
- add r11,rdi
- mov r13,rdx
- add r14,r11
- shrd r13,r13,23
- mov r11,r14
- mov r12,r8
- shrd r14,r14,5
- xor r13,rdx
- xor r12,r9
- shrd r13,r13,4
- xor r14,r11
- and r12,rdx
- xor r13,rdx
- add r10,QWORD PTR[8+rsp]
- mov rdi,r11
- xor r12,r9
- shrd r14,r14,6
- xor rdi,rax
- add r10,r12
- shrd r13,r13,14
- and r15,rdi
- xor r14,r11
- add r10,r13
- xor r15,rax
- shrd r14,r14,28
- add rcx,r10
- add r10,r15
- mov r13,rcx
- add r14,r10
- shrd r13,r13,23
- mov r10,r14
- mov r12,rdx
- shrd r14,r14,5
- xor r13,rcx
- xor r12,r8
- shrd r13,r13,4
- xor r14,r10
- and r12,rcx
- xor r13,rcx
- add r9,QWORD PTR[16+rsp]
- mov r15,r10
- xor r12,r8
- shrd r14,r14,6
- xor r15,r11
- add r9,r12
- shrd r13,r13,14
- and rdi,r15
- xor r14,r10
- add r9,r13
- xor rdi,r11
- shrd r14,r14,28
- add rbx,r9
- add r9,rdi
- mov r13,rbx
- add r14,r9
- shrd r13,r13,23
- mov r9,r14
- mov r12,rcx
- shrd r14,r14,5
- xor r13,rbx
- xor r12,rdx
- shrd r13,r13,4
- xor r14,r9
- and r12,rbx
- xor r13,rbx
- add r8,QWORD PTR[24+rsp]
- mov rdi,r9
- xor r12,rdx
- shrd r14,r14,6
- xor rdi,r10
- add r8,r12
- shrd r13,r13,14
- and r15,rdi
- xor r14,r9
- add r8,r13
- xor r15,r10
- shrd r14,r14,28
- add rax,r8
- add r8,r15
- mov r13,rax
- add r14,r8
- shrd r13,r13,23
- mov r8,r14
- mov r12,rbx
- shrd r14,r14,5
- xor r13,rax
- xor r12,rcx
- shrd r13,r13,4
- xor r14,r8
- and r12,rax
- xor r13,rax
- add rdx,QWORD PTR[32+rsp]
- mov r15,r8
- xor r12,rcx
- shrd r14,r14,6
- xor r15,r9
- add rdx,r12
- shrd r13,r13,14
- and rdi,r15
- xor r14,r8
- add rdx,r13
- xor rdi,r9
- shrd r14,r14,28
- add r11,rdx
- add rdx,rdi
- mov r13,r11
- add r14,rdx
- shrd r13,r13,23
- mov rdx,r14
- mov r12,rax
- shrd r14,r14,5
- xor r13,r11
- xor r12,rbx
- shrd r13,r13,4
- xor r14,rdx
- and r12,r11
- xor r13,r11
- add rcx,QWORD PTR[40+rsp]
- mov rdi,rdx
- xor r12,rbx
- shrd r14,r14,6
- xor rdi,r8
- add rcx,r12
- shrd r13,r13,14
- and r15,rdi
- xor r14,rdx
- add rcx,r13
- xor r15,r8
- shrd r14,r14,28
- add r10,rcx
- add rcx,r15
- mov r13,r10
- add r14,rcx
- shrd r13,r13,23
- mov rcx,r14
- mov r12,r11
- shrd r14,r14,5
- xor r13,r10
- xor r12,rax
- shrd r13,r13,4
- xor r14,rcx
- and r12,r10
- xor r13,r10
- add rbx,QWORD PTR[48+rsp]
- mov r15,rcx
- xor r12,rax
- shrd r14,r14,6
- xor r15,rdx
- add rbx,r12
- shrd r13,r13,14
- and rdi,r15
- xor r14,rcx
- add rbx,r13
- xor rdi,rdx
- shrd r14,r14,28
- add r9,rbx
- add rbx,rdi
- mov r13,r9
- add r14,rbx
- shrd r13,r13,23
- mov rbx,r14
- mov r12,r10
- shrd r14,r14,5
- xor r13,r9
- xor r12,r11
- shrd r13,r13,4
- xor r14,rbx
- and r12,r9
- xor r13,r9
- add rax,QWORD PTR[56+rsp]
- mov rdi,rbx
- xor r12,r11
- shrd r14,r14,6
- xor rdi,rcx
- add rax,r12
- shrd r13,r13,14
- and r15,rdi
- xor r14,rbx
- add rax,r13
- xor r15,rcx
- shrd r14,r14,28
- add r8,rax
- add rax,r15
- mov r13,r8
- add r14,rax
- shrd r13,r13,23
- mov rax,r14
- mov r12,r9
- shrd r14,r14,5
- xor r13,r8
- xor r12,r10
- shrd r13,r13,4
- xor r14,rax
- and r12,r8
- xor r13,r8
- add r11,QWORD PTR[64+rsp]
- mov r15,rax
- xor r12,r10
- shrd r14,r14,6
- xor r15,rbx
- add r11,r12
- shrd r13,r13,14
- and rdi,r15
- xor r14,rax
- add r11,r13
- xor rdi,rbx
- shrd r14,r14,28
- add rdx,r11
- add r11,rdi
- mov r13,rdx
- add r14,r11
- shrd r13,r13,23
- mov r11,r14
- mov r12,r8
- shrd r14,r14,5
- xor r13,rdx
- xor r12,r9
- shrd r13,r13,4
- xor r14,r11
- and r12,rdx
- xor r13,rdx
- add r10,QWORD PTR[72+rsp]
- mov rdi,r11
- xor r12,r9
- shrd r14,r14,6
- xor rdi,rax
- add r10,r12
- shrd r13,r13,14
- and r15,rdi
- xor r14,r11
- add r10,r13
- xor r15,rax
- shrd r14,r14,28
- add rcx,r10
- add r10,r15
- mov r13,rcx
- add r14,r10
- shrd r13,r13,23
- mov r10,r14
- mov r12,rdx
- shrd r14,r14,5
- xor r13,rcx
- xor r12,r8
- shrd r13,r13,4
- xor r14,r10
- and r12,rcx
- xor r13,rcx
- add r9,QWORD PTR[80+rsp]
- mov r15,r10
- xor r12,r8
- shrd r14,r14,6
- xor r15,r11
- add r9,r12
- shrd r13,r13,14
- and rdi,r15
- xor r14,r10
- add r9,r13
- xor rdi,r11
- shrd r14,r14,28
- add rbx,r9
- add r9,rdi
- mov r13,rbx
- add r14,r9
- shrd r13,r13,23
- mov r9,r14
- mov r12,rcx
- shrd r14,r14,5
- xor r13,rbx
- xor r12,rdx
- shrd r13,r13,4
- xor r14,r9
- and r12,rbx
- xor r13,rbx
- add r8,QWORD PTR[88+rsp]
- mov rdi,r9
- xor r12,rdx
- shrd r14,r14,6
- xor rdi,r10
- add r8,r12
- shrd r13,r13,14
- and r15,rdi
- xor r14,r9
- add r8,r13
- xor r15,r10
- shrd r14,r14,28
- add rax,r8
- add r8,r15
- mov r13,rax
- add r14,r8
- shrd r13,r13,23
- mov r8,r14
- mov r12,rbx
- shrd r14,r14,5
- xor r13,rax
- xor r12,rcx
- shrd r13,r13,4
- xor r14,r8
- and r12,rax
- xor r13,rax
- add rdx,QWORD PTR[96+rsp]
- mov r15,r8
- xor r12,rcx
- shrd r14,r14,6
- xor r15,r9
- add rdx,r12
- shrd r13,r13,14
- and rdi,r15
- xor r14,r8
- add rdx,r13
- xor rdi,r9
- shrd r14,r14,28
- add r11,rdx
- add rdx,rdi
- mov r13,r11
- add r14,rdx
- shrd r13,r13,23
- mov rdx,r14
- mov r12,rax
- shrd r14,r14,5
- xor r13,r11
- xor r12,rbx
- shrd r13,r13,4
- xor r14,rdx
- and r12,r11
- xor r13,r11
- add rcx,QWORD PTR[104+rsp]
- mov rdi,rdx
- xor r12,rbx
- shrd r14,r14,6
- xor rdi,r8
- add rcx,r12
- shrd r13,r13,14
- and r15,rdi
- xor r14,rdx
- add rcx,r13
- xor r15,r8
- shrd r14,r14,28
- add r10,rcx
- add rcx,r15
- mov r13,r10
- add r14,rcx
- shrd r13,r13,23
- mov rcx,r14
- mov r12,r11
- shrd r14,r14,5
- xor r13,r10
- xor r12,rax
- shrd r13,r13,4
- xor r14,rcx
- and r12,r10
- xor r13,r10
- add rbx,QWORD PTR[112+rsp]
- mov r15,rcx
- xor r12,rax
- shrd r14,r14,6
- xor r15,rdx
- add rbx,r12
- shrd r13,r13,14
- and rdi,r15
- xor r14,rcx
- add rbx,r13
- xor rdi,rdx
- shrd r14,r14,28
- add r9,rbx
- add rbx,rdi
- mov r13,r9
- add r14,rbx
- shrd r13,r13,23
- mov rbx,r14
- mov r12,r10
- shrd r14,r14,5
- xor r13,r9
- xor r12,r11
- shrd r13,r13,4
- xor r14,rbx
- and r12,r9
- xor r13,r9
- add rax,QWORD PTR[120+rsp]
- mov rdi,rbx
- xor r12,r11
- shrd r14,r14,6
- xor rdi,rcx
- add rax,r12
- shrd r13,r13,14
- and r15,rdi
- xor r14,rbx
- add rax,r13
- xor r15,rcx
- shrd r14,r14,28
- add r8,rax
- add rax,r15
- mov r13,r8
- add r14,rax
- mov rdi,QWORD PTR[((128+0))+rsp]
- mov rax,r14
-
- add rax,QWORD PTR[rdi]
- lea rsi,QWORD PTR[128+rsi]
- add rbx,QWORD PTR[8+rdi]
- add rcx,QWORD PTR[16+rdi]
- add rdx,QWORD PTR[24+rdi]
- add r8,QWORD PTR[32+rdi]
- add r9,QWORD PTR[40+rdi]
- add r10,QWORD PTR[48+rdi]
- add r11,QWORD PTR[56+rdi]
-
- cmp rsi,QWORD PTR[((128+16))+rsp]
-
- mov QWORD PTR[rdi],rax
- mov QWORD PTR[8+rdi],rbx
- mov QWORD PTR[16+rdi],rcx
- mov QWORD PTR[24+rdi],rdx
- mov QWORD PTR[32+rdi],r8
- mov QWORD PTR[40+rdi],r9
- mov QWORD PTR[48+rdi],r10
- mov QWORD PTR[56+rdi],r11
- jb $L$loop_avx
-
- mov rsi,QWORD PTR[152+rsp]
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((128+32))+rsp]
- movaps xmm7,XMMWORD PTR[((128+48))+rsp]
- movaps xmm8,XMMWORD PTR[((128+64))+rsp]
- movaps xmm9,XMMWORD PTR[((128+80))+rsp]
- movaps xmm10,XMMWORD PTR[((128+96))+rsp]
- movaps xmm11,XMMWORD PTR[((128+112))+rsp]
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue_avx::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha512_block_data_order_avx::
-sha512_block_data_order_avx ENDP
-
-ALIGN 64
-sha512_block_data_order_avx2 PROC PRIVATE
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_sha512_block_data_order_avx2::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
-$L$avx2_shortcut::
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
- sub rsp,1408
- shl rdx,4
- and rsp,-256*8
- lea rdx,QWORD PTR[rdx*8+rsi]
- add rsp,1152
- mov QWORD PTR[((128+0))+rsp],rdi
- mov QWORD PTR[((128+8))+rsp],rsi
- mov QWORD PTR[((128+16))+rsp],rdx
- mov QWORD PTR[152+rsp],rax
-
- movaps XMMWORD PTR[(128+32)+rsp],xmm6
- movaps XMMWORD PTR[(128+48)+rsp],xmm7
- movaps XMMWORD PTR[(128+64)+rsp],xmm8
- movaps XMMWORD PTR[(128+80)+rsp],xmm9
- movaps XMMWORD PTR[(128+96)+rsp],xmm10
- movaps XMMWORD PTR[(128+112)+rsp],xmm11
-$L$prologue_avx2::
-
- vzeroupper
- sub rsi,-16*8
- mov rax,QWORD PTR[rdi]
- mov r12,rsi
- mov rbx,QWORD PTR[8+rdi]
- cmp rsi,rdx
- mov rcx,QWORD PTR[16+rdi]
- cmove r12,rsp
- mov rdx,QWORD PTR[24+rdi]
- mov r8,QWORD PTR[32+rdi]
- mov r9,QWORD PTR[40+rdi]
- mov r10,QWORD PTR[48+rdi]
- mov r11,QWORD PTR[56+rdi]
- jmp $L$oop_avx2
-ALIGN 16
-$L$oop_avx2::
- vmovdqu xmm0,XMMWORD PTR[((-128))+rsi]
- vmovdqu xmm1,XMMWORD PTR[((-128+16))+rsi]
- vmovdqu xmm2,XMMWORD PTR[((-128+32))+rsi]
- lea rbp,QWORD PTR[((K512+128))]
- vmovdqu xmm3,XMMWORD PTR[((-128+48))+rsi]
- vmovdqu xmm4,XMMWORD PTR[((-128+64))+rsi]
- vmovdqu xmm5,XMMWORD PTR[((-128+80))+rsi]
- vmovdqu xmm6,XMMWORD PTR[((-128+96))+rsi]
- vmovdqu xmm7,XMMWORD PTR[((-128+112))+rsi]
-
- vmovdqa ymm10,YMMWORD PTR[1152+rbp]
- vinserti128 ymm0,ymm0,XMMWORD PTR[r12],1
- vinserti128 ymm1,ymm1,XMMWORD PTR[16+r12],1
- vpshufb ymm0,ymm0,ymm10
- vinserti128 ymm2,ymm2,XMMWORD PTR[32+r12],1
- vpshufb ymm1,ymm1,ymm10
- vinserti128 ymm3,ymm3,XMMWORD PTR[48+r12],1
- vpshufb ymm2,ymm2,ymm10
- vinserti128 ymm4,ymm4,XMMWORD PTR[64+r12],1
- vpshufb ymm3,ymm3,ymm10
- vinserti128 ymm5,ymm5,XMMWORD PTR[80+r12],1
- vpshufb ymm4,ymm4,ymm10
- vinserti128 ymm6,ymm6,XMMWORD PTR[96+r12],1
- vpshufb ymm5,ymm5,ymm10
- vinserti128 ymm7,ymm7,XMMWORD PTR[112+r12],1
-
- vpaddq ymm8,ymm0,YMMWORD PTR[((-128))+rbp]
- vpshufb ymm6,ymm6,ymm10
- vpaddq ymm9,ymm1,YMMWORD PTR[((-96))+rbp]
- vpshufb ymm7,ymm7,ymm10
- vpaddq ymm10,ymm2,YMMWORD PTR[((-64))+rbp]
- vpaddq ymm11,ymm3,YMMWORD PTR[((-32))+rbp]
- vmovdqa YMMWORD PTR[rsp],ymm8
- vpaddq ymm8,ymm4,YMMWORD PTR[rbp]
- vmovdqa YMMWORD PTR[32+rsp],ymm9
- vpaddq ymm9,ymm5,YMMWORD PTR[32+rbp]
- vmovdqa YMMWORD PTR[64+rsp],ymm10
- vpaddq ymm10,ymm6,YMMWORD PTR[64+rbp]
- vmovdqa YMMWORD PTR[96+rsp],ymm11
- lea rsp,QWORD PTR[((-128))+rsp]
- vpaddq ymm11,ymm7,YMMWORD PTR[96+rbp]
- vmovdqa YMMWORD PTR[rsp],ymm8
- xor r14,r14
- vmovdqa YMMWORD PTR[32+rsp],ymm9
- mov rdi,rbx
- vmovdqa YMMWORD PTR[64+rsp],ymm10
- xor rdi,rcx
- vmovdqa YMMWORD PTR[96+rsp],ymm11
- mov r12,r9
- add rbp,16*2*8
- jmp $L$avx2_00_47
-
-ALIGN 16
-$L$avx2_00_47::
- lea rsp,QWORD PTR[((-128))+rsp]
- vpalignr ymm8,ymm1,ymm0,8
- add r11,QWORD PTR[((0+256))+rsp]
- and r12,r8
- rorx r13,r8,41
- vpalignr ymm11,ymm5,ymm4,8
- rorx r15,r8,18
- lea rax,QWORD PTR[r14*1+rax]
- lea r11,QWORD PTR[r12*1+r11]
- vpsrlq ymm10,ymm8,1
- andn r12,r8,r10
- xor r13,r15
- rorx r14,r8,14
- vpaddq ymm0,ymm0,ymm11
- vpsrlq ymm11,ymm8,7
- lea r11,QWORD PTR[r12*1+r11]
- xor r13,r14
- mov r15,rax
- vpsllq ymm9,ymm8,56
- vpxor ymm8,ymm11,ymm10
- rorx r12,rax,39
- lea r11,QWORD PTR[r13*1+r11]
- xor r15,rbx
- vpsrlq ymm10,ymm10,7
- vpxor ymm8,ymm8,ymm9
- rorx r14,rax,34
- rorx r13,rax,28
- lea rdx,QWORD PTR[r11*1+rdx]
- vpsllq ymm9,ymm9,7
- vpxor ymm8,ymm8,ymm10
- and rdi,r15
- xor r14,r12
- xor rdi,rbx
- vpsrlq ymm11,ymm7,6
- vpxor ymm8,ymm8,ymm9
- xor r14,r13
- lea r11,QWORD PTR[rdi*1+r11]
- mov r12,r8
- vpsllq ymm10,ymm7,3
- vpaddq ymm0,ymm0,ymm8
- add r10,QWORD PTR[((8+256))+rsp]
- and r12,rdx
- rorx r13,rdx,41
- vpsrlq ymm9,ymm7,19
- vpxor ymm11,ymm11,ymm10
- rorx rdi,rdx,18
- lea r11,QWORD PTR[r14*1+r11]
- lea r10,QWORD PTR[r12*1+r10]
- vpsllq ymm10,ymm10,42
- vpxor ymm11,ymm11,ymm9
- andn r12,rdx,r9
- xor r13,rdi
- rorx r14,rdx,14
- vpsrlq ymm9,ymm9,42
- vpxor ymm11,ymm11,ymm10
- lea r10,QWORD PTR[r12*1+r10]
- xor r13,r14
- mov rdi,r11
- vpxor ymm11,ymm11,ymm9
- rorx r12,r11,39
- lea r10,QWORD PTR[r13*1+r10]
- xor rdi,rax
- vpaddq ymm0,ymm0,ymm11
- rorx r14,r11,34
- rorx r13,r11,28
- lea rcx,QWORD PTR[r10*1+rcx]
- vpaddq ymm10,ymm0,YMMWORD PTR[((-128))+rbp]
- and r15,rdi
- xor r14,r12
- xor r15,rax
- xor r14,r13
- lea r10,QWORD PTR[r15*1+r10]
- mov r12,rdx
- vmovdqa YMMWORD PTR[rsp],ymm10
- vpalignr ymm8,ymm2,ymm1,8
- add r9,QWORD PTR[((32+256))+rsp]
- and r12,rcx
- rorx r13,rcx,41
- vpalignr ymm11,ymm6,ymm5,8
- rorx r15,rcx,18
- lea r10,QWORD PTR[r14*1+r10]
- lea r9,QWORD PTR[r12*1+r9]
- vpsrlq ymm10,ymm8,1
- andn r12,rcx,r8
- xor r13,r15
- rorx r14,rcx,14
- vpaddq ymm1,ymm1,ymm11
- vpsrlq ymm11,ymm8,7
- lea r9,QWORD PTR[r12*1+r9]
- xor r13,r14
- mov r15,r10
- vpsllq ymm9,ymm8,56
- vpxor ymm8,ymm11,ymm10
- rorx r12,r10,39
- lea r9,QWORD PTR[r13*1+r9]
- xor r15,r11
- vpsrlq ymm10,ymm10,7
- vpxor ymm8,ymm8,ymm9
- rorx r14,r10,34
- rorx r13,r10,28
- lea rbx,QWORD PTR[r9*1+rbx]
- vpsllq ymm9,ymm9,7
- vpxor ymm8,ymm8,ymm10
- and rdi,r15
- xor r14,r12
- xor rdi,r11
- vpsrlq ymm11,ymm0,6
- vpxor ymm8,ymm8,ymm9
- xor r14,r13
- lea r9,QWORD PTR[rdi*1+r9]
- mov r12,rcx
- vpsllq ymm10,ymm0,3
- vpaddq ymm1,ymm1,ymm8
- add r8,QWORD PTR[((40+256))+rsp]
- and r12,rbx
- rorx r13,rbx,41
- vpsrlq ymm9,ymm0,19
- vpxor ymm11,ymm11,ymm10
- rorx rdi,rbx,18
- lea r9,QWORD PTR[r14*1+r9]
- lea r8,QWORD PTR[r12*1+r8]
- vpsllq ymm10,ymm10,42
- vpxor ymm11,ymm11,ymm9
- andn r12,rbx,rdx
- xor r13,rdi
- rorx r14,rbx,14
- vpsrlq ymm9,ymm9,42
- vpxor ymm11,ymm11,ymm10
- lea r8,QWORD PTR[r12*1+r8]
- xor r13,r14
- mov rdi,r9
- vpxor ymm11,ymm11,ymm9
- rorx r12,r9,39
- lea r8,QWORD PTR[r13*1+r8]
- xor rdi,r10
- vpaddq ymm1,ymm1,ymm11
- rorx r14,r9,34
- rorx r13,r9,28
- lea rax,QWORD PTR[r8*1+rax]
- vpaddq ymm10,ymm1,YMMWORD PTR[((-96))+rbp]
- and r15,rdi
- xor r14,r12
- xor r15,r10
- xor r14,r13
- lea r8,QWORD PTR[r15*1+r8]
- mov r12,rbx
- vmovdqa YMMWORD PTR[32+rsp],ymm10
- vpalignr ymm8,ymm3,ymm2,8
- add rdx,QWORD PTR[((64+256))+rsp]
- and r12,rax
- rorx r13,rax,41
- vpalignr ymm11,ymm7,ymm6,8
- rorx r15,rax,18
- lea r8,QWORD PTR[r14*1+r8]
- lea rdx,QWORD PTR[r12*1+rdx]
- vpsrlq ymm10,ymm8,1
- andn r12,rax,rcx
- xor r13,r15
- rorx r14,rax,14
- vpaddq ymm2,ymm2,ymm11
- vpsrlq ymm11,ymm8,7
- lea rdx,QWORD PTR[r12*1+rdx]
- xor r13,r14
- mov r15,r8
- vpsllq ymm9,ymm8,56
- vpxor ymm8,ymm11,ymm10
- rorx r12,r8,39
- lea rdx,QWORD PTR[r13*1+rdx]
- xor r15,r9
- vpsrlq ymm10,ymm10,7
- vpxor ymm8,ymm8,ymm9
- rorx r14,r8,34
- rorx r13,r8,28
- lea r11,QWORD PTR[rdx*1+r11]
- vpsllq ymm9,ymm9,7
- vpxor ymm8,ymm8,ymm10
- and rdi,r15
- xor r14,r12
- xor rdi,r9
- vpsrlq ymm11,ymm1,6
- vpxor ymm8,ymm8,ymm9
- xor r14,r13
- lea rdx,QWORD PTR[rdi*1+rdx]
- mov r12,rax
- vpsllq ymm10,ymm1,3
- vpaddq ymm2,ymm2,ymm8
- add rcx,QWORD PTR[((72+256))+rsp]
- and r12,r11
- rorx r13,r11,41
- vpsrlq ymm9,ymm1,19
- vpxor ymm11,ymm11,ymm10
- rorx rdi,r11,18
- lea rdx,QWORD PTR[r14*1+rdx]
- lea rcx,QWORD PTR[r12*1+rcx]
- vpsllq ymm10,ymm10,42
- vpxor ymm11,ymm11,ymm9
- andn r12,r11,rbx
- xor r13,rdi
- rorx r14,r11,14
- vpsrlq ymm9,ymm9,42
- vpxor ymm11,ymm11,ymm10
- lea rcx,QWORD PTR[r12*1+rcx]
- xor r13,r14
- mov rdi,rdx
- vpxor ymm11,ymm11,ymm9
- rorx r12,rdx,39
- lea rcx,QWORD PTR[r13*1+rcx]
- xor rdi,r8
- vpaddq ymm2,ymm2,ymm11
- rorx r14,rdx,34
- rorx r13,rdx,28
- lea r10,QWORD PTR[rcx*1+r10]
- vpaddq ymm10,ymm2,YMMWORD PTR[((-64))+rbp]
- and r15,rdi
- xor r14,r12
- xor r15,r8
- xor r14,r13
- lea rcx,QWORD PTR[r15*1+rcx]
- mov r12,r11
- vmovdqa YMMWORD PTR[64+rsp],ymm10
- vpalignr ymm8,ymm4,ymm3,8
- add rbx,QWORD PTR[((96+256))+rsp]
- and r12,r10
- rorx r13,r10,41
- vpalignr ymm11,ymm0,ymm7,8
- rorx r15,r10,18
- lea rcx,QWORD PTR[r14*1+rcx]
- lea rbx,QWORD PTR[r12*1+rbx]
- vpsrlq ymm10,ymm8,1
- andn r12,r10,rax
- xor r13,r15
- rorx r14,r10,14
- vpaddq ymm3,ymm3,ymm11
- vpsrlq ymm11,ymm8,7
- lea rbx,QWORD PTR[r12*1+rbx]
- xor r13,r14
- mov r15,rcx
- vpsllq ymm9,ymm8,56
- vpxor ymm8,ymm11,ymm10
- rorx r12,rcx,39
- lea rbx,QWORD PTR[r13*1+rbx]
- xor r15,rdx
- vpsrlq ymm10,ymm10,7
- vpxor ymm8,ymm8,ymm9
- rorx r14,rcx,34
- rorx r13,rcx,28
- lea r9,QWORD PTR[rbx*1+r9]
- vpsllq ymm9,ymm9,7
- vpxor ymm8,ymm8,ymm10
- and rdi,r15
- xor r14,r12
- xor rdi,rdx
- vpsrlq ymm11,ymm2,6
- vpxor ymm8,ymm8,ymm9
- xor r14,r13
- lea rbx,QWORD PTR[rdi*1+rbx]
- mov r12,r10
- vpsllq ymm10,ymm2,3
- vpaddq ymm3,ymm3,ymm8
- add rax,QWORD PTR[((104+256))+rsp]
- and r12,r9
- rorx r13,r9,41
- vpsrlq ymm9,ymm2,19
- vpxor ymm11,ymm11,ymm10
- rorx rdi,r9,18
- lea rbx,QWORD PTR[r14*1+rbx]
- lea rax,QWORD PTR[r12*1+rax]
- vpsllq ymm10,ymm10,42
- vpxor ymm11,ymm11,ymm9
- andn r12,r9,r11
- xor r13,rdi
- rorx r14,r9,14
- vpsrlq ymm9,ymm9,42
- vpxor ymm11,ymm11,ymm10
- lea rax,QWORD PTR[r12*1+rax]
- xor r13,r14
- mov rdi,rbx
- vpxor ymm11,ymm11,ymm9
- rorx r12,rbx,39
- lea rax,QWORD PTR[r13*1+rax]
- xor rdi,rcx
- vpaddq ymm3,ymm3,ymm11
- rorx r14,rbx,34
- rorx r13,rbx,28
- lea r8,QWORD PTR[rax*1+r8]
- vpaddq ymm10,ymm3,YMMWORD PTR[((-32))+rbp]
- and r15,rdi
- xor r14,r12
- xor r15,rcx
- xor r14,r13
- lea rax,QWORD PTR[r15*1+rax]
- mov r12,r9
- vmovdqa YMMWORD PTR[96+rsp],ymm10
- lea rsp,QWORD PTR[((-128))+rsp]
- vpalignr ymm8,ymm5,ymm4,8
- add r11,QWORD PTR[((0+256))+rsp]
- and r12,r8
- rorx r13,r8,41
- vpalignr ymm11,ymm1,ymm0,8
- rorx r15,r8,18
- lea rax,QWORD PTR[r14*1+rax]
- lea r11,QWORD PTR[r12*1+r11]
- vpsrlq ymm10,ymm8,1
- andn r12,r8,r10
- xor r13,r15
- rorx r14,r8,14
- vpaddq ymm4,ymm4,ymm11
- vpsrlq ymm11,ymm8,7
- lea r11,QWORD PTR[r12*1+r11]
- xor r13,r14
- mov r15,rax
- vpsllq ymm9,ymm8,56
- vpxor ymm8,ymm11,ymm10
- rorx r12,rax,39
- lea r11,QWORD PTR[r13*1+r11]
- xor r15,rbx
- vpsrlq ymm10,ymm10,7
- vpxor ymm8,ymm8,ymm9
- rorx r14,rax,34
- rorx r13,rax,28
- lea rdx,QWORD PTR[r11*1+rdx]
- vpsllq ymm9,ymm9,7
- vpxor ymm8,ymm8,ymm10
- and rdi,r15
- xor r14,r12
- xor rdi,rbx
- vpsrlq ymm11,ymm3,6
- vpxor ymm8,ymm8,ymm9
- xor r14,r13
- lea r11,QWORD PTR[rdi*1+r11]
- mov r12,r8
- vpsllq ymm10,ymm3,3
- vpaddq ymm4,ymm4,ymm8
- add r10,QWORD PTR[((8+256))+rsp]
- and r12,rdx
- rorx r13,rdx,41
- vpsrlq ymm9,ymm3,19
- vpxor ymm11,ymm11,ymm10
- rorx rdi,rdx,18
- lea r11,QWORD PTR[r14*1+r11]
- lea r10,QWORD PTR[r12*1+r10]
- vpsllq ymm10,ymm10,42
- vpxor ymm11,ymm11,ymm9
- andn r12,rdx,r9
- xor r13,rdi
- rorx r14,rdx,14
- vpsrlq ymm9,ymm9,42
- vpxor ymm11,ymm11,ymm10
- lea r10,QWORD PTR[r12*1+r10]
- xor r13,r14
- mov rdi,r11
- vpxor ymm11,ymm11,ymm9
- rorx r12,r11,39
- lea r10,QWORD PTR[r13*1+r10]
- xor rdi,rax
- vpaddq ymm4,ymm4,ymm11
- rorx r14,r11,34
- rorx r13,r11,28
- lea rcx,QWORD PTR[r10*1+rcx]
- vpaddq ymm10,ymm4,YMMWORD PTR[rbp]
- and r15,rdi
- xor r14,r12
- xor r15,rax
- xor r14,r13
- lea r10,QWORD PTR[r15*1+r10]
- mov r12,rdx
- vmovdqa YMMWORD PTR[rsp],ymm10
- vpalignr ymm8,ymm6,ymm5,8
- add r9,QWORD PTR[((32+256))+rsp]
- and r12,rcx
- rorx r13,rcx,41
- vpalignr ymm11,ymm2,ymm1,8
- rorx r15,rcx,18
- lea r10,QWORD PTR[r14*1+r10]
- lea r9,QWORD PTR[r12*1+r9]
- vpsrlq ymm10,ymm8,1
- andn r12,rcx,r8
- xor r13,r15
- rorx r14,rcx,14
- vpaddq ymm5,ymm5,ymm11
- vpsrlq ymm11,ymm8,7
- lea r9,QWORD PTR[r12*1+r9]
- xor r13,r14
- mov r15,r10
- vpsllq ymm9,ymm8,56
- vpxor ymm8,ymm11,ymm10
- rorx r12,r10,39
- lea r9,QWORD PTR[r13*1+r9]
- xor r15,r11
- vpsrlq ymm10,ymm10,7
- vpxor ymm8,ymm8,ymm9
- rorx r14,r10,34
- rorx r13,r10,28
- lea rbx,QWORD PTR[r9*1+rbx]
- vpsllq ymm9,ymm9,7
- vpxor ymm8,ymm8,ymm10
- and rdi,r15
- xor r14,r12
- xor rdi,r11
- vpsrlq ymm11,ymm4,6
- vpxor ymm8,ymm8,ymm9
- xor r14,r13
- lea r9,QWORD PTR[rdi*1+r9]
- mov r12,rcx
- vpsllq ymm10,ymm4,3
- vpaddq ymm5,ymm5,ymm8
- add r8,QWORD PTR[((40+256))+rsp]
- and r12,rbx
- rorx r13,rbx,41
- vpsrlq ymm9,ymm4,19
- vpxor ymm11,ymm11,ymm10
- rorx rdi,rbx,18
- lea r9,QWORD PTR[r14*1+r9]
- lea r8,QWORD PTR[r12*1+r8]
- vpsllq ymm10,ymm10,42
- vpxor ymm11,ymm11,ymm9
- andn r12,rbx,rdx
- xor r13,rdi
- rorx r14,rbx,14
- vpsrlq ymm9,ymm9,42
- vpxor ymm11,ymm11,ymm10
- lea r8,QWORD PTR[r12*1+r8]
- xor r13,r14
- mov rdi,r9
- vpxor ymm11,ymm11,ymm9
- rorx r12,r9,39
- lea r8,QWORD PTR[r13*1+r8]
- xor rdi,r10
- vpaddq ymm5,ymm5,ymm11
- rorx r14,r9,34
- rorx r13,r9,28
- lea rax,QWORD PTR[r8*1+rax]
- vpaddq ymm10,ymm5,YMMWORD PTR[32+rbp]
- and r15,rdi
- xor r14,r12
- xor r15,r10
- xor r14,r13
- lea r8,QWORD PTR[r15*1+r8]
- mov r12,rbx
- vmovdqa YMMWORD PTR[32+rsp],ymm10
- vpalignr ymm8,ymm7,ymm6,8
- add rdx,QWORD PTR[((64+256))+rsp]
- and r12,rax
- rorx r13,rax,41
- vpalignr ymm11,ymm3,ymm2,8
- rorx r15,rax,18
- lea r8,QWORD PTR[r14*1+r8]
- lea rdx,QWORD PTR[r12*1+rdx]
- vpsrlq ymm10,ymm8,1
- andn r12,rax,rcx
- xor r13,r15
- rorx r14,rax,14
- vpaddq ymm6,ymm6,ymm11
- vpsrlq ymm11,ymm8,7
- lea rdx,QWORD PTR[r12*1+rdx]
- xor r13,r14
- mov r15,r8
- vpsllq ymm9,ymm8,56
- vpxor ymm8,ymm11,ymm10
- rorx r12,r8,39
- lea rdx,QWORD PTR[r13*1+rdx]
- xor r15,r9
- vpsrlq ymm10,ymm10,7
- vpxor ymm8,ymm8,ymm9
- rorx r14,r8,34
- rorx r13,r8,28
- lea r11,QWORD PTR[rdx*1+r11]
- vpsllq ymm9,ymm9,7
- vpxor ymm8,ymm8,ymm10
- and rdi,r15
- xor r14,r12
- xor rdi,r9
- vpsrlq ymm11,ymm5,6
- vpxor ymm8,ymm8,ymm9
- xor r14,r13
- lea rdx,QWORD PTR[rdi*1+rdx]
- mov r12,rax
- vpsllq ymm10,ymm5,3
- vpaddq ymm6,ymm6,ymm8
- add rcx,QWORD PTR[((72+256))+rsp]
- and r12,r11
- rorx r13,r11,41
- vpsrlq ymm9,ymm5,19
- vpxor ymm11,ymm11,ymm10
- rorx rdi,r11,18
- lea rdx,QWORD PTR[r14*1+rdx]
- lea rcx,QWORD PTR[r12*1+rcx]
- vpsllq ymm10,ymm10,42
- vpxor ymm11,ymm11,ymm9
- andn r12,r11,rbx
- xor r13,rdi
- rorx r14,r11,14
- vpsrlq ymm9,ymm9,42
- vpxor ymm11,ymm11,ymm10
- lea rcx,QWORD PTR[r12*1+rcx]
- xor r13,r14
- mov rdi,rdx
- vpxor ymm11,ymm11,ymm9
- rorx r12,rdx,39
- lea rcx,QWORD PTR[r13*1+rcx]
- xor rdi,r8
- vpaddq ymm6,ymm6,ymm11
- rorx r14,rdx,34
- rorx r13,rdx,28
- lea r10,QWORD PTR[rcx*1+r10]
- vpaddq ymm10,ymm6,YMMWORD PTR[64+rbp]
- and r15,rdi
- xor r14,r12
- xor r15,r8
- xor r14,r13
- lea rcx,QWORD PTR[r15*1+rcx]
- mov r12,r11
- vmovdqa YMMWORD PTR[64+rsp],ymm10
- vpalignr ymm8,ymm0,ymm7,8
- add rbx,QWORD PTR[((96+256))+rsp]
- and r12,r10
- rorx r13,r10,41
- vpalignr ymm11,ymm4,ymm3,8
- rorx r15,r10,18
- lea rcx,QWORD PTR[r14*1+rcx]
- lea rbx,QWORD PTR[r12*1+rbx]
- vpsrlq ymm10,ymm8,1
- andn r12,r10,rax
- xor r13,r15
- rorx r14,r10,14
- vpaddq ymm7,ymm7,ymm11
- vpsrlq ymm11,ymm8,7
- lea rbx,QWORD PTR[r12*1+rbx]
- xor r13,r14
- mov r15,rcx
- vpsllq ymm9,ymm8,56
- vpxor ymm8,ymm11,ymm10
- rorx r12,rcx,39
- lea rbx,QWORD PTR[r13*1+rbx]
- xor r15,rdx
- vpsrlq ymm10,ymm10,7
- vpxor ymm8,ymm8,ymm9
- rorx r14,rcx,34
- rorx r13,rcx,28
- lea r9,QWORD PTR[rbx*1+r9]
- vpsllq ymm9,ymm9,7
- vpxor ymm8,ymm8,ymm10
- and rdi,r15
- xor r14,r12
- xor rdi,rdx
- vpsrlq ymm11,ymm6,6
- vpxor ymm8,ymm8,ymm9
- xor r14,r13
- lea rbx,QWORD PTR[rdi*1+rbx]
- mov r12,r10
- vpsllq ymm10,ymm6,3
- vpaddq ymm7,ymm7,ymm8
- add rax,QWORD PTR[((104+256))+rsp]
- and r12,r9
- rorx r13,r9,41
- vpsrlq ymm9,ymm6,19
- vpxor ymm11,ymm11,ymm10
- rorx rdi,r9,18
- lea rbx,QWORD PTR[r14*1+rbx]
- lea rax,QWORD PTR[r12*1+rax]
- vpsllq ymm10,ymm10,42
- vpxor ymm11,ymm11,ymm9
- andn r12,r9,r11
- xor r13,rdi
- rorx r14,r9,14
- vpsrlq ymm9,ymm9,42
- vpxor ymm11,ymm11,ymm10
- lea rax,QWORD PTR[r12*1+rax]
- xor r13,r14
- mov rdi,rbx
- vpxor ymm11,ymm11,ymm9
- rorx r12,rbx,39
- lea rax,QWORD PTR[r13*1+rax]
- xor rdi,rcx
- vpaddq ymm7,ymm7,ymm11
- rorx r14,rbx,34
- rorx r13,rbx,28
- lea r8,QWORD PTR[rax*1+r8]
- vpaddq ymm10,ymm7,YMMWORD PTR[96+rbp]
- and r15,rdi
- xor r14,r12
- xor r15,rcx
- xor r14,r13
- lea rax,QWORD PTR[r15*1+rax]
- mov r12,r9
- vmovdqa YMMWORD PTR[96+rsp],ymm10
- lea rbp,QWORD PTR[256+rbp]
- cmp BYTE PTR[((-121))+rbp],0
- jne $L$avx2_00_47
- add r11,QWORD PTR[((0+128))+rsp]
- and r12,r8
- rorx r13,r8,41
- rorx r15,r8,18
- lea rax,QWORD PTR[r14*1+rax]
- lea r11,QWORD PTR[r12*1+r11]
- andn r12,r8,r10
- xor r13,r15
- rorx r14,r8,14
- lea r11,QWORD PTR[r12*1+r11]
- xor r13,r14
- mov r15,rax
- rorx r12,rax,39
- lea r11,QWORD PTR[r13*1+r11]
- xor r15,rbx
- rorx r14,rax,34
- rorx r13,rax,28
- lea rdx,QWORD PTR[r11*1+rdx]
- and rdi,r15
- xor r14,r12
- xor rdi,rbx
- xor r14,r13
- lea r11,QWORD PTR[rdi*1+r11]
- mov r12,r8
- add r10,QWORD PTR[((8+128))+rsp]
- and r12,rdx
- rorx r13,rdx,41
- rorx rdi,rdx,18
- lea r11,QWORD PTR[r14*1+r11]
- lea r10,QWORD PTR[r12*1+r10]
- andn r12,rdx,r9
- xor r13,rdi
- rorx r14,rdx,14
- lea r10,QWORD PTR[r12*1+r10]
- xor r13,r14
- mov rdi,r11
- rorx r12,r11,39
- lea r10,QWORD PTR[r13*1+r10]
- xor rdi,rax
- rorx r14,r11,34
- rorx r13,r11,28
- lea rcx,QWORD PTR[r10*1+rcx]
- and r15,rdi
- xor r14,r12
- xor r15,rax
- xor r14,r13
- lea r10,QWORD PTR[r15*1+r10]
- mov r12,rdx
- add r9,QWORD PTR[((32+128))+rsp]
- and r12,rcx
- rorx r13,rcx,41
- rorx r15,rcx,18
- lea r10,QWORD PTR[r14*1+r10]
- lea r9,QWORD PTR[r12*1+r9]
- andn r12,rcx,r8
- xor r13,r15
- rorx r14,rcx,14
- lea r9,QWORD PTR[r12*1+r9]
- xor r13,r14
- mov r15,r10
- rorx r12,r10,39
- lea r9,QWORD PTR[r13*1+r9]
- xor r15,r11
- rorx r14,r10,34
- rorx r13,r10,28
- lea rbx,QWORD PTR[r9*1+rbx]
- and rdi,r15
- xor r14,r12
- xor rdi,r11
- xor r14,r13
- lea r9,QWORD PTR[rdi*1+r9]
- mov r12,rcx
- add r8,QWORD PTR[((40+128))+rsp]
- and r12,rbx
- rorx r13,rbx,41
- rorx rdi,rbx,18
- lea r9,QWORD PTR[r14*1+r9]
- lea r8,QWORD PTR[r12*1+r8]
- andn r12,rbx,rdx
- xor r13,rdi
- rorx r14,rbx,14
- lea r8,QWORD PTR[r12*1+r8]
- xor r13,r14
- mov rdi,r9
- rorx r12,r9,39
- lea r8,QWORD PTR[r13*1+r8]
- xor rdi,r10
- rorx r14,r9,34
- rorx r13,r9,28
- lea rax,QWORD PTR[r8*1+rax]
- and r15,rdi
- xor r14,r12
- xor r15,r10
- xor r14,r13
- lea r8,QWORD PTR[r15*1+r8]
- mov r12,rbx
- add rdx,QWORD PTR[((64+128))+rsp]
- and r12,rax
- rorx r13,rax,41
- rorx r15,rax,18
- lea r8,QWORD PTR[r14*1+r8]
- lea rdx,QWORD PTR[r12*1+rdx]
- andn r12,rax,rcx
- xor r13,r15
- rorx r14,rax,14
- lea rdx,QWORD PTR[r12*1+rdx]
- xor r13,r14
- mov r15,r8
- rorx r12,r8,39
- lea rdx,QWORD PTR[r13*1+rdx]
- xor r15,r9
- rorx r14,r8,34
- rorx r13,r8,28
- lea r11,QWORD PTR[rdx*1+r11]
- and rdi,r15
- xor r14,r12
- xor rdi,r9
- xor r14,r13
- lea rdx,QWORD PTR[rdi*1+rdx]
- mov r12,rax
- add rcx,QWORD PTR[((72+128))+rsp]
- and r12,r11
- rorx r13,r11,41
- rorx rdi,r11,18
- lea rdx,QWORD PTR[r14*1+rdx]
- lea rcx,QWORD PTR[r12*1+rcx]
- andn r12,r11,rbx
- xor r13,rdi
- rorx r14,r11,14
- lea rcx,QWORD PTR[r12*1+rcx]
- xor r13,r14
- mov rdi,rdx
- rorx r12,rdx,39
- lea rcx,QWORD PTR[r13*1+rcx]
- xor rdi,r8
- rorx r14,rdx,34
- rorx r13,rdx,28
- lea r10,QWORD PTR[rcx*1+r10]
- and r15,rdi
- xor r14,r12
- xor r15,r8
- xor r14,r13
- lea rcx,QWORD PTR[r15*1+rcx]
- mov r12,r11
- add rbx,QWORD PTR[((96+128))+rsp]
- and r12,r10
- rorx r13,r10,41
- rorx r15,r10,18
- lea rcx,QWORD PTR[r14*1+rcx]
- lea rbx,QWORD PTR[r12*1+rbx]
- andn r12,r10,rax
- xor r13,r15
- rorx r14,r10,14
- lea rbx,QWORD PTR[r12*1+rbx]
- xor r13,r14
- mov r15,rcx
- rorx r12,rcx,39
- lea rbx,QWORD PTR[r13*1+rbx]
- xor r15,rdx
- rorx r14,rcx,34
- rorx r13,rcx,28
- lea r9,QWORD PTR[rbx*1+r9]
- and rdi,r15
- xor r14,r12
- xor rdi,rdx
- xor r14,r13
- lea rbx,QWORD PTR[rdi*1+rbx]
- mov r12,r10
- add rax,QWORD PTR[((104+128))+rsp]
- and r12,r9
- rorx r13,r9,41
- rorx rdi,r9,18
- lea rbx,QWORD PTR[r14*1+rbx]
- lea rax,QWORD PTR[r12*1+rax]
- andn r12,r9,r11
- xor r13,rdi
- rorx r14,r9,14
- lea rax,QWORD PTR[r12*1+rax]
- xor r13,r14
- mov rdi,rbx
- rorx r12,rbx,39
- lea rax,QWORD PTR[r13*1+rax]
- xor rdi,rcx
- rorx r14,rbx,34
- rorx r13,rbx,28
- lea r8,QWORD PTR[rax*1+r8]
- and r15,rdi
- xor r14,r12
- xor r15,rcx
- xor r14,r13
- lea rax,QWORD PTR[r15*1+rax]
- mov r12,r9
- add r11,QWORD PTR[rsp]
- and r12,r8
- rorx r13,r8,41
- rorx r15,r8,18
- lea rax,QWORD PTR[r14*1+rax]
- lea r11,QWORD PTR[r12*1+r11]
- andn r12,r8,r10
- xor r13,r15
- rorx r14,r8,14
- lea r11,QWORD PTR[r12*1+r11]
- xor r13,r14
- mov r15,rax
- rorx r12,rax,39
- lea r11,QWORD PTR[r13*1+r11]
- xor r15,rbx
- rorx r14,rax,34
- rorx r13,rax,28
- lea rdx,QWORD PTR[r11*1+rdx]
- and rdi,r15
- xor r14,r12
- xor rdi,rbx
- xor r14,r13
- lea r11,QWORD PTR[rdi*1+r11]
- mov r12,r8
- add r10,QWORD PTR[8+rsp]
- and r12,rdx
- rorx r13,rdx,41
- rorx rdi,rdx,18
- lea r11,QWORD PTR[r14*1+r11]
- lea r10,QWORD PTR[r12*1+r10]
- andn r12,rdx,r9
- xor r13,rdi
- rorx r14,rdx,14
- lea r10,QWORD PTR[r12*1+r10]
- xor r13,r14
- mov rdi,r11
- rorx r12,r11,39
- lea r10,QWORD PTR[r13*1+r10]
- xor rdi,rax
- rorx r14,r11,34
- rorx r13,r11,28
- lea rcx,QWORD PTR[r10*1+rcx]
- and r15,rdi
- xor r14,r12
- xor r15,rax
- xor r14,r13
- lea r10,QWORD PTR[r15*1+r10]
- mov r12,rdx
- add r9,QWORD PTR[32+rsp]
- and r12,rcx
- rorx r13,rcx,41
- rorx r15,rcx,18
- lea r10,QWORD PTR[r14*1+r10]
- lea r9,QWORD PTR[r12*1+r9]
- andn r12,rcx,r8
- xor r13,r15
- rorx r14,rcx,14
- lea r9,QWORD PTR[r12*1+r9]
- xor r13,r14
- mov r15,r10
- rorx r12,r10,39
- lea r9,QWORD PTR[r13*1+r9]
- xor r15,r11
- rorx r14,r10,34
- rorx r13,r10,28
- lea rbx,QWORD PTR[r9*1+rbx]
- and rdi,r15
- xor r14,r12
- xor rdi,r11
- xor r14,r13
- lea r9,QWORD PTR[rdi*1+r9]
- mov r12,rcx
- add r8,QWORD PTR[40+rsp]
- and r12,rbx
- rorx r13,rbx,41
- rorx rdi,rbx,18
- lea r9,QWORD PTR[r14*1+r9]
- lea r8,QWORD PTR[r12*1+r8]
- andn r12,rbx,rdx
- xor r13,rdi
- rorx r14,rbx,14
- lea r8,QWORD PTR[r12*1+r8]
- xor r13,r14
- mov rdi,r9
- rorx r12,r9,39
- lea r8,QWORD PTR[r13*1+r8]
- xor rdi,r10
- rorx r14,r9,34
- rorx r13,r9,28
- lea rax,QWORD PTR[r8*1+rax]
- and r15,rdi
- xor r14,r12
- xor r15,r10
- xor r14,r13
- lea r8,QWORD PTR[r15*1+r8]
- mov r12,rbx
- add rdx,QWORD PTR[64+rsp]
- and r12,rax
- rorx r13,rax,41
- rorx r15,rax,18
- lea r8,QWORD PTR[r14*1+r8]
- lea rdx,QWORD PTR[r12*1+rdx]
- andn r12,rax,rcx
- xor r13,r15
- rorx r14,rax,14
- lea rdx,QWORD PTR[r12*1+rdx]
- xor r13,r14
- mov r15,r8
- rorx r12,r8,39
- lea rdx,QWORD PTR[r13*1+rdx]
- xor r15,r9
- rorx r14,r8,34
- rorx r13,r8,28
- lea r11,QWORD PTR[rdx*1+r11]
- and rdi,r15
- xor r14,r12
- xor rdi,r9
- xor r14,r13
- lea rdx,QWORD PTR[rdi*1+rdx]
- mov r12,rax
- add rcx,QWORD PTR[72+rsp]
- and r12,r11
- rorx r13,r11,41
- rorx rdi,r11,18
- lea rdx,QWORD PTR[r14*1+rdx]
- lea rcx,QWORD PTR[r12*1+rcx]
- andn r12,r11,rbx
- xor r13,rdi
- rorx r14,r11,14
- lea rcx,QWORD PTR[r12*1+rcx]
- xor r13,r14
- mov rdi,rdx
- rorx r12,rdx,39
- lea rcx,QWORD PTR[r13*1+rcx]
- xor rdi,r8
- rorx r14,rdx,34
- rorx r13,rdx,28
- lea r10,QWORD PTR[rcx*1+r10]
- and r15,rdi
- xor r14,r12
- xor r15,r8
- xor r14,r13
- lea rcx,QWORD PTR[r15*1+rcx]
- mov r12,r11
- add rbx,QWORD PTR[96+rsp]
- and r12,r10
- rorx r13,r10,41
- rorx r15,r10,18
- lea rcx,QWORD PTR[r14*1+rcx]
- lea rbx,QWORD PTR[r12*1+rbx]
- andn r12,r10,rax
- xor r13,r15
- rorx r14,r10,14
- lea rbx,QWORD PTR[r12*1+rbx]
- xor r13,r14
- mov r15,rcx
- rorx r12,rcx,39
- lea rbx,QWORD PTR[r13*1+rbx]
- xor r15,rdx
- rorx r14,rcx,34
- rorx r13,rcx,28
- lea r9,QWORD PTR[rbx*1+r9]
- and rdi,r15
- xor r14,r12
- xor rdi,rdx
- xor r14,r13
- lea rbx,QWORD PTR[rdi*1+rbx]
- mov r12,r10
- add rax,QWORD PTR[104+rsp]
- and r12,r9
- rorx r13,r9,41
- rorx rdi,r9,18
- lea rbx,QWORD PTR[r14*1+rbx]
- lea rax,QWORD PTR[r12*1+rax]
- andn r12,r9,r11
- xor r13,rdi
- rorx r14,r9,14
- lea rax,QWORD PTR[r12*1+rax]
- xor r13,r14
- mov rdi,rbx
- rorx r12,rbx,39
- lea rax,QWORD PTR[r13*1+rax]
- xor rdi,rcx
- rorx r14,rbx,34
- rorx r13,rbx,28
- lea r8,QWORD PTR[rax*1+r8]
- and r15,rdi
- xor r14,r12
- xor r15,rcx
- xor r14,r13
- lea rax,QWORD PTR[r15*1+rax]
- mov r12,r9
- mov rdi,QWORD PTR[1280+rsp]
- add rax,r14
-
- lea rbp,QWORD PTR[1152+rsp]
-
- add rax,QWORD PTR[rdi]
- add rbx,QWORD PTR[8+rdi]
- add rcx,QWORD PTR[16+rdi]
- add rdx,QWORD PTR[24+rdi]
- add r8,QWORD PTR[32+rdi]
- add r9,QWORD PTR[40+rdi]
- add r10,QWORD PTR[48+rdi]
- add r11,QWORD PTR[56+rdi]
-
- mov QWORD PTR[rdi],rax
- mov QWORD PTR[8+rdi],rbx
- mov QWORD PTR[16+rdi],rcx
- mov QWORD PTR[24+rdi],rdx
- mov QWORD PTR[32+rdi],r8
- mov QWORD PTR[40+rdi],r9
- mov QWORD PTR[48+rdi],r10
- mov QWORD PTR[56+rdi],r11
-
- cmp rsi,QWORD PTR[144+rbp]
- je $L$done_avx2
-
- xor r14,r14
- mov rdi,rbx
- xor rdi,rcx
- mov r12,r9
- jmp $L$ower_avx2
-ALIGN 16
-$L$ower_avx2::
- add r11,QWORD PTR[((0+16))+rbp]
- and r12,r8
- rorx r13,r8,41
- rorx r15,r8,18
- lea rax,QWORD PTR[r14*1+rax]
- lea r11,QWORD PTR[r12*1+r11]
- andn r12,r8,r10
- xor r13,r15
- rorx r14,r8,14
- lea r11,QWORD PTR[r12*1+r11]
- xor r13,r14
- mov r15,rax
- rorx r12,rax,39
- lea r11,QWORD PTR[r13*1+r11]
- xor r15,rbx
- rorx r14,rax,34
- rorx r13,rax,28
- lea rdx,QWORD PTR[r11*1+rdx]
- and rdi,r15
- xor r14,r12
- xor rdi,rbx
- xor r14,r13
- lea r11,QWORD PTR[rdi*1+r11]
- mov r12,r8
- add r10,QWORD PTR[((8+16))+rbp]
- and r12,rdx
- rorx r13,rdx,41
- rorx rdi,rdx,18
- lea r11,QWORD PTR[r14*1+r11]
- lea r10,QWORD PTR[r12*1+r10]
- andn r12,rdx,r9
- xor r13,rdi
- rorx r14,rdx,14
- lea r10,QWORD PTR[r12*1+r10]
- xor r13,r14
- mov rdi,r11
- rorx r12,r11,39
- lea r10,QWORD PTR[r13*1+r10]
- xor rdi,rax
- rorx r14,r11,34
- rorx r13,r11,28
- lea rcx,QWORD PTR[r10*1+rcx]
- and r15,rdi
- xor r14,r12
- xor r15,rax
- xor r14,r13
- lea r10,QWORD PTR[r15*1+r10]
- mov r12,rdx
- add r9,QWORD PTR[((32+16))+rbp]
- and r12,rcx
- rorx r13,rcx,41
- rorx r15,rcx,18
- lea r10,QWORD PTR[r14*1+r10]
- lea r9,QWORD PTR[r12*1+r9]
- andn r12,rcx,r8
- xor r13,r15
- rorx r14,rcx,14
- lea r9,QWORD PTR[r12*1+r9]
- xor r13,r14
- mov r15,r10
- rorx r12,r10,39
- lea r9,QWORD PTR[r13*1+r9]
- xor r15,r11
- rorx r14,r10,34
- rorx r13,r10,28
- lea rbx,QWORD PTR[r9*1+rbx]
- and rdi,r15
- xor r14,r12
- xor rdi,r11
- xor r14,r13
- lea r9,QWORD PTR[rdi*1+r9]
- mov r12,rcx
- add r8,QWORD PTR[((40+16))+rbp]
- and r12,rbx
- rorx r13,rbx,41
- rorx rdi,rbx,18
- lea r9,QWORD PTR[r14*1+r9]
- lea r8,QWORD PTR[r12*1+r8]
- andn r12,rbx,rdx
- xor r13,rdi
- rorx r14,rbx,14
- lea r8,QWORD PTR[r12*1+r8]
- xor r13,r14
- mov rdi,r9
- rorx r12,r9,39
- lea r8,QWORD PTR[r13*1+r8]
- xor rdi,r10
- rorx r14,r9,34
- rorx r13,r9,28
- lea rax,QWORD PTR[r8*1+rax]
- and r15,rdi
- xor r14,r12
- xor r15,r10
- xor r14,r13
- lea r8,QWORD PTR[r15*1+r8]
- mov r12,rbx
- add rdx,QWORD PTR[((64+16))+rbp]
- and r12,rax
- rorx r13,rax,41
- rorx r15,rax,18
- lea r8,QWORD PTR[r14*1+r8]
- lea rdx,QWORD PTR[r12*1+rdx]
- andn r12,rax,rcx
- xor r13,r15
- rorx r14,rax,14
- lea rdx,QWORD PTR[r12*1+rdx]
- xor r13,r14
- mov r15,r8
- rorx r12,r8,39
- lea rdx,QWORD PTR[r13*1+rdx]
- xor r15,r9
- rorx r14,r8,34
- rorx r13,r8,28
- lea r11,QWORD PTR[rdx*1+r11]
- and rdi,r15
- xor r14,r12
- xor rdi,r9
- xor r14,r13
- lea rdx,QWORD PTR[rdi*1+rdx]
- mov r12,rax
- add rcx,QWORD PTR[((72+16))+rbp]
- and r12,r11
- rorx r13,r11,41
- rorx rdi,r11,18
- lea rdx,QWORD PTR[r14*1+rdx]
- lea rcx,QWORD PTR[r12*1+rcx]
- andn r12,r11,rbx
- xor r13,rdi
- rorx r14,r11,14
- lea rcx,QWORD PTR[r12*1+rcx]
- xor r13,r14
- mov rdi,rdx
- rorx r12,rdx,39
- lea rcx,QWORD PTR[r13*1+rcx]
- xor rdi,r8
- rorx r14,rdx,34
- rorx r13,rdx,28
- lea r10,QWORD PTR[rcx*1+r10]
- and r15,rdi
- xor r14,r12
- xor r15,r8
- xor r14,r13
- lea rcx,QWORD PTR[r15*1+rcx]
- mov r12,r11
- add rbx,QWORD PTR[((96+16))+rbp]
- and r12,r10
- rorx r13,r10,41
- rorx r15,r10,18
- lea rcx,QWORD PTR[r14*1+rcx]
- lea rbx,QWORD PTR[r12*1+rbx]
- andn r12,r10,rax
- xor r13,r15
- rorx r14,r10,14
- lea rbx,QWORD PTR[r12*1+rbx]
- xor r13,r14
- mov r15,rcx
- rorx r12,rcx,39
- lea rbx,QWORD PTR[r13*1+rbx]
- xor r15,rdx
- rorx r14,rcx,34
- rorx r13,rcx,28
- lea r9,QWORD PTR[rbx*1+r9]
- and rdi,r15
- xor r14,r12
- xor rdi,rdx
- xor r14,r13
- lea rbx,QWORD PTR[rdi*1+rbx]
- mov r12,r10
- add rax,QWORD PTR[((104+16))+rbp]
- and r12,r9
- rorx r13,r9,41
- rorx rdi,r9,18
- lea rbx,QWORD PTR[r14*1+rbx]
- lea rax,QWORD PTR[r12*1+rax]
- andn r12,r9,r11
- xor r13,rdi
- rorx r14,r9,14
- lea rax,QWORD PTR[r12*1+rax]
- xor r13,r14
- mov rdi,rbx
- rorx r12,rbx,39
- lea rax,QWORD PTR[r13*1+rax]
- xor rdi,rcx
- rorx r14,rbx,34
- rorx r13,rbx,28
- lea r8,QWORD PTR[rax*1+r8]
- and r15,rdi
- xor r14,r12
- xor r15,rcx
- xor r14,r13
- lea rax,QWORD PTR[r15*1+rax]
- mov r12,r9
- lea rbp,QWORD PTR[((-128))+rbp]
- cmp rbp,rsp
- jae $L$ower_avx2
-
- mov rdi,QWORD PTR[1280+rsp]
- add rax,r14
-
- lea rsp,QWORD PTR[1152+rsp]
-
-
-
- add rax,QWORD PTR[rdi]
- add rbx,QWORD PTR[8+rdi]
- add rcx,QWORD PTR[16+rdi]
- add rdx,QWORD PTR[24+rdi]
- add r8,QWORD PTR[32+rdi]
- add r9,QWORD PTR[40+rdi]
- lea rsi,QWORD PTR[256+rsi]
- add r10,QWORD PTR[48+rdi]
- mov r12,rsi
- add r11,QWORD PTR[56+rdi]
- cmp rsi,QWORD PTR[((128+16))+rsp]
-
- mov QWORD PTR[rdi],rax
- cmove r12,rsp
- mov QWORD PTR[8+rdi],rbx
- mov QWORD PTR[16+rdi],rcx
- mov QWORD PTR[24+rdi],rdx
- mov QWORD PTR[32+rdi],r8
- mov QWORD PTR[40+rdi],r9
- mov QWORD PTR[48+rdi],r10
- mov QWORD PTR[56+rdi],r11
-
- jbe $L$oop_avx2
- lea rbp,QWORD PTR[rsp]
-
-
-
-
-$L$done_avx2::
- mov rsi,QWORD PTR[152+rbp]
-
- vzeroupper
- movaps xmm6,XMMWORD PTR[((128+32))+rbp]
- movaps xmm7,XMMWORD PTR[((128+48))+rbp]
- movaps xmm8,XMMWORD PTR[((128+64))+rbp]
- movaps xmm9,XMMWORD PTR[((128+80))+rbp]
- movaps xmm10,XMMWORD PTR[((128+96))+rbp]
- movaps xmm11,XMMWORD PTR[((128+112))+rbp]
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue_avx2::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_sha512_block_data_order_avx2::
-sha512_block_data_order_avx2 ENDP
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- mov rsi,QWORD PTR[8+r9]
- mov r11,QWORD PTR[56+r9]
-
- mov r10d,DWORD PTR[r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- mov r10d,DWORD PTR[4+r11]
- lea r10,QWORD PTR[r10*1+rsi]
- cmp rbx,r10
- jae $L$in_prologue
- lea r10,QWORD PTR[$L$avx2_shortcut]
- cmp rbx,r10
- jb $L$not_in_avx2
-
- and rax,-256*8
- add rax,1152
-$L$not_in_avx2::
- mov rsi,rax
- mov rax,QWORD PTR[((128+24))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
- lea r10,QWORD PTR[$L$epilogue]
- cmp rbx,r10
- jb $L$in_prologue
-
- lea rsi,QWORD PTR[((128+32))+rsi]
- lea rdi,QWORD PTR[512+r8]
- mov ecx,12
- DD 0a548f3fch
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_sha512_block_data_order
- DD imagerel $L$SEH_end_sha512_block_data_order
- DD imagerel $L$SEH_info_sha512_block_data_order
- DD imagerel $L$SEH_begin_sha512_block_data_order_xop
- DD imagerel $L$SEH_end_sha512_block_data_order_xop
- DD imagerel $L$SEH_info_sha512_block_data_order_xop
- DD imagerel $L$SEH_begin_sha512_block_data_order_avx
- DD imagerel $L$SEH_end_sha512_block_data_order_avx
- DD imagerel $L$SEH_info_sha512_block_data_order_avx
- DD imagerel $L$SEH_begin_sha512_block_data_order_avx2
- DD imagerel $L$SEH_end_sha512_block_data_order_avx2
- DD imagerel $L$SEH_info_sha512_block_data_order_avx2
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_sha512_block_data_order::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue,imagerel $L$epilogue
-$L$SEH_info_sha512_block_data_order_xop::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue_xop,imagerel $L$epilogue_xop
-$L$SEH_info_sha512_block_data_order_avx::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
-$L$SEH_info_sha512_block_data_order_avx2::
-DB 9,0,0,0
- DD imagerel se_handler
- DD imagerel $L$prologue_avx2,imagerel $L$epilogue_avx2
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+EXTERN OPENSSL_ia32cap_P:NEAR
+PUBLIC sha512_block_data_order
+
+ALIGN 16
+sha512_block_data_order PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha512_block_data_order::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ lea r11,QWORD PTR[OPENSSL_ia32cap_P]
+ mov r9d,DWORD PTR[r11]
+ mov r10d,DWORD PTR[4+r11]
+ mov r11d,DWORD PTR[8+r11]
+ test r10d,2048
+ jnz $L$xop_shortcut
+ and r11d,296
+ cmp r11d,296
+ je $L$avx2_shortcut
+ and r9d,1073741824
+ and r10d,268435968
+ or r10d,r9d
+ cmp r10d,1342177792
+ je $L$avx_shortcut
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ shl rdx,4
+ sub rsp,16*8+4*8
+ lea rdx,QWORD PTR[rdx*8+rsi]
+ and rsp,-64
+ mov QWORD PTR[((128+0))+rsp],rdi
+ mov QWORD PTR[((128+8))+rsp],rsi
+ mov QWORD PTR[((128+16))+rsp],rdx
+ mov QWORD PTR[152+rsp],rax
+
+$L$prologue::
+
+ mov rax,QWORD PTR[rdi]
+ mov rbx,QWORD PTR[8+rdi]
+ mov rcx,QWORD PTR[16+rdi]
+ mov rdx,QWORD PTR[24+rdi]
+ mov r8,QWORD PTR[32+rdi]
+ mov r9,QWORD PTR[40+rdi]
+ mov r10,QWORD PTR[48+rdi]
+ mov r11,QWORD PTR[56+rdi]
+ jmp $L$loop
+
+ALIGN 16
+$L$loop::
+ mov rdi,rbx
+ lea rbp,QWORD PTR[K512]
+ xor rdi,rcx
+ mov r12,QWORD PTR[rsi]
+ mov r13,r8
+ mov r14,rax
+ bswap r12
+ ror r13,23
+ mov r15,r9
+
+ xor r13,r8
+ ror r14,5
+ xor r15,r10
+
+ mov QWORD PTR[rsp],r12
+ xor r14,rax
+ and r15,r8
+
+ ror r13,4
+ add r12,r11
+ xor r15,r10
+
+ ror r14,6
+ xor r13,r8
+ add r12,r15
+
+ mov r15,rax
+ add r12,QWORD PTR[rbp]
+ xor r14,rax
+
+ xor r15,rbx
+ ror r13,14
+ mov r11,rbx
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor r11,rdi
+ add rdx,r12
+ add r11,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ add r11,r14
+ mov r12,QWORD PTR[8+rsi]
+ mov r13,rdx
+ mov r14,r11
+ bswap r12
+ ror r13,23
+ mov rdi,r8
+
+ xor r13,rdx
+ ror r14,5
+ xor rdi,r9
+
+ mov QWORD PTR[8+rsp],r12
+ xor r14,r11
+ and rdi,rdx
+
+ ror r13,4
+ add r12,r10
+ xor rdi,r9
+
+ ror r14,6
+ xor r13,rdx
+ add r12,rdi
+
+ mov rdi,r11
+ add r12,QWORD PTR[rbp]
+ xor r14,r11
+
+ xor rdi,rax
+ ror r13,14
+ mov r10,rax
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor r10,r15
+ add rcx,r12
+ add r10,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ add r10,r14
+ mov r12,QWORD PTR[16+rsi]
+ mov r13,rcx
+ mov r14,r10
+ bswap r12
+ ror r13,23
+ mov r15,rdx
+
+ xor r13,rcx
+ ror r14,5
+ xor r15,r8
+
+ mov QWORD PTR[16+rsp],r12
+ xor r14,r10
+ and r15,rcx
+
+ ror r13,4
+ add r12,r9
+ xor r15,r8
+
+ ror r14,6
+ xor r13,rcx
+ add r12,r15
+
+ mov r15,r10
+ add r12,QWORD PTR[rbp]
+ xor r14,r10
+
+ xor r15,r11
+ ror r13,14
+ mov r9,r11
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor r9,rdi
+ add rbx,r12
+ add r9,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ add r9,r14
+ mov r12,QWORD PTR[24+rsi]
+ mov r13,rbx
+ mov r14,r9
+ bswap r12
+ ror r13,23
+ mov rdi,rcx
+
+ xor r13,rbx
+ ror r14,5
+ xor rdi,rdx
+
+ mov QWORD PTR[24+rsp],r12
+ xor r14,r9
+ and rdi,rbx
+
+ ror r13,4
+ add r12,r8
+ xor rdi,rdx
+
+ ror r14,6
+ xor r13,rbx
+ add r12,rdi
+
+ mov rdi,r9
+ add r12,QWORD PTR[rbp]
+ xor r14,r9
+
+ xor rdi,r10
+ ror r13,14
+ mov r8,r10
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor r8,r15
+ add rax,r12
+ add r8,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ add r8,r14
+ mov r12,QWORD PTR[32+rsi]
+ mov r13,rax
+ mov r14,r8
+ bswap r12
+ ror r13,23
+ mov r15,rbx
+
+ xor r13,rax
+ ror r14,5
+ xor r15,rcx
+
+ mov QWORD PTR[32+rsp],r12
+ xor r14,r8
+ and r15,rax
+
+ ror r13,4
+ add r12,rdx
+ xor r15,rcx
+
+ ror r14,6
+ xor r13,rax
+ add r12,r15
+
+ mov r15,r8
+ add r12,QWORD PTR[rbp]
+ xor r14,r8
+
+ xor r15,r9
+ ror r13,14
+ mov rdx,r9
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor rdx,rdi
+ add r11,r12
+ add rdx,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ add rdx,r14
+ mov r12,QWORD PTR[40+rsi]
+ mov r13,r11
+ mov r14,rdx
+ bswap r12
+ ror r13,23
+ mov rdi,rax
+
+ xor r13,r11
+ ror r14,5
+ xor rdi,rbx
+
+ mov QWORD PTR[40+rsp],r12
+ xor r14,rdx
+ and rdi,r11
+
+ ror r13,4
+ add r12,rcx
+ xor rdi,rbx
+
+ ror r14,6
+ xor r13,r11
+ add r12,rdi
+
+ mov rdi,rdx
+ add r12,QWORD PTR[rbp]
+ xor r14,rdx
+
+ xor rdi,r8
+ ror r13,14
+ mov rcx,r8
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor rcx,r15
+ add r10,r12
+ add rcx,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ add rcx,r14
+ mov r12,QWORD PTR[48+rsi]
+ mov r13,r10
+ mov r14,rcx
+ bswap r12
+ ror r13,23
+ mov r15,r11
+
+ xor r13,r10
+ ror r14,5
+ xor r15,rax
+
+ mov QWORD PTR[48+rsp],r12
+ xor r14,rcx
+ and r15,r10
+
+ ror r13,4
+ add r12,rbx
+ xor r15,rax
+
+ ror r14,6
+ xor r13,r10
+ add r12,r15
+
+ mov r15,rcx
+ add r12,QWORD PTR[rbp]
+ xor r14,rcx
+
+ xor r15,rdx
+ ror r13,14
+ mov rbx,rdx
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor rbx,rdi
+ add r9,r12
+ add rbx,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ add rbx,r14
+ mov r12,QWORD PTR[56+rsi]
+ mov r13,r9
+ mov r14,rbx
+ bswap r12
+ ror r13,23
+ mov rdi,r10
+
+ xor r13,r9
+ ror r14,5
+ xor rdi,r11
+
+ mov QWORD PTR[56+rsp],r12
+ xor r14,rbx
+ and rdi,r9
+
+ ror r13,4
+ add r12,rax
+ xor rdi,r11
+
+ ror r14,6
+ xor r13,r9
+ add r12,rdi
+
+ mov rdi,rbx
+ add r12,QWORD PTR[rbp]
+ xor r14,rbx
+
+ xor rdi,rcx
+ ror r13,14
+ mov rax,rcx
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor rax,r15
+ add r8,r12
+ add rax,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ add rax,r14
+ mov r12,QWORD PTR[64+rsi]
+ mov r13,r8
+ mov r14,rax
+ bswap r12
+ ror r13,23
+ mov r15,r9
+
+ xor r13,r8
+ ror r14,5
+ xor r15,r10
+
+ mov QWORD PTR[64+rsp],r12
+ xor r14,rax
+ and r15,r8
+
+ ror r13,4
+ add r12,r11
+ xor r15,r10
+
+ ror r14,6
+ xor r13,r8
+ add r12,r15
+
+ mov r15,rax
+ add r12,QWORD PTR[rbp]
+ xor r14,rax
+
+ xor r15,rbx
+ ror r13,14
+ mov r11,rbx
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor r11,rdi
+ add rdx,r12
+ add r11,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ add r11,r14
+ mov r12,QWORD PTR[72+rsi]
+ mov r13,rdx
+ mov r14,r11
+ bswap r12
+ ror r13,23
+ mov rdi,r8
+
+ xor r13,rdx
+ ror r14,5
+ xor rdi,r9
+
+ mov QWORD PTR[72+rsp],r12
+ xor r14,r11
+ and rdi,rdx
+
+ ror r13,4
+ add r12,r10
+ xor rdi,r9
+
+ ror r14,6
+ xor r13,rdx
+ add r12,rdi
+
+ mov rdi,r11
+ add r12,QWORD PTR[rbp]
+ xor r14,r11
+
+ xor rdi,rax
+ ror r13,14
+ mov r10,rax
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor r10,r15
+ add rcx,r12
+ add r10,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ add r10,r14
+ mov r12,QWORD PTR[80+rsi]
+ mov r13,rcx
+ mov r14,r10
+ bswap r12
+ ror r13,23
+ mov r15,rdx
+
+ xor r13,rcx
+ ror r14,5
+ xor r15,r8
+
+ mov QWORD PTR[80+rsp],r12
+ xor r14,r10
+ and r15,rcx
+
+ ror r13,4
+ add r12,r9
+ xor r15,r8
+
+ ror r14,6
+ xor r13,rcx
+ add r12,r15
+
+ mov r15,r10
+ add r12,QWORD PTR[rbp]
+ xor r14,r10
+
+ xor r15,r11
+ ror r13,14
+ mov r9,r11
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor r9,rdi
+ add rbx,r12
+ add r9,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ add r9,r14
+ mov r12,QWORD PTR[88+rsi]
+ mov r13,rbx
+ mov r14,r9
+ bswap r12
+ ror r13,23
+ mov rdi,rcx
+
+ xor r13,rbx
+ ror r14,5
+ xor rdi,rdx
+
+ mov QWORD PTR[88+rsp],r12
+ xor r14,r9
+ and rdi,rbx
+
+ ror r13,4
+ add r12,r8
+ xor rdi,rdx
+
+ ror r14,6
+ xor r13,rbx
+ add r12,rdi
+
+ mov rdi,r9
+ add r12,QWORD PTR[rbp]
+ xor r14,r9
+
+ xor rdi,r10
+ ror r13,14
+ mov r8,r10
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor r8,r15
+ add rax,r12
+ add r8,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ add r8,r14
+ mov r12,QWORD PTR[96+rsi]
+ mov r13,rax
+ mov r14,r8
+ bswap r12
+ ror r13,23
+ mov r15,rbx
+
+ xor r13,rax
+ ror r14,5
+ xor r15,rcx
+
+ mov QWORD PTR[96+rsp],r12
+ xor r14,r8
+ and r15,rax
+
+ ror r13,4
+ add r12,rdx
+ xor r15,rcx
+
+ ror r14,6
+ xor r13,rax
+ add r12,r15
+
+ mov r15,r8
+ add r12,QWORD PTR[rbp]
+ xor r14,r8
+
+ xor r15,r9
+ ror r13,14
+ mov rdx,r9
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor rdx,rdi
+ add r11,r12
+ add rdx,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ add rdx,r14
+ mov r12,QWORD PTR[104+rsi]
+ mov r13,r11
+ mov r14,rdx
+ bswap r12
+ ror r13,23
+ mov rdi,rax
+
+ xor r13,r11
+ ror r14,5
+ xor rdi,rbx
+
+ mov QWORD PTR[104+rsp],r12
+ xor r14,rdx
+ and rdi,r11
+
+ ror r13,4
+ add r12,rcx
+ xor rdi,rbx
+
+ ror r14,6
+ xor r13,r11
+ add r12,rdi
+
+ mov rdi,rdx
+ add r12,QWORD PTR[rbp]
+ xor r14,rdx
+
+ xor rdi,r8
+ ror r13,14
+ mov rcx,r8
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor rcx,r15
+ add r10,r12
+ add rcx,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ add rcx,r14
+ mov r12,QWORD PTR[112+rsi]
+ mov r13,r10
+ mov r14,rcx
+ bswap r12
+ ror r13,23
+ mov r15,r11
+
+ xor r13,r10
+ ror r14,5
+ xor r15,rax
+
+ mov QWORD PTR[112+rsp],r12
+ xor r14,rcx
+ and r15,r10
+
+ ror r13,4
+ add r12,rbx
+ xor r15,rax
+
+ ror r14,6
+ xor r13,r10
+ add r12,r15
+
+ mov r15,rcx
+ add r12,QWORD PTR[rbp]
+ xor r14,rcx
+
+ xor r15,rdx
+ ror r13,14
+ mov rbx,rdx
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor rbx,rdi
+ add r9,r12
+ add rbx,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ add rbx,r14
+ mov r12,QWORD PTR[120+rsi]
+ mov r13,r9
+ mov r14,rbx
+ bswap r12
+ ror r13,23
+ mov rdi,r10
+
+ xor r13,r9
+ ror r14,5
+ xor rdi,r11
+
+ mov QWORD PTR[120+rsp],r12
+ xor r14,rbx
+ and rdi,r9
+
+ ror r13,4
+ add r12,rax
+ xor rdi,r11
+
+ ror r14,6
+ xor r13,r9
+ add r12,rdi
+
+ mov rdi,rbx
+ add r12,QWORD PTR[rbp]
+ xor r14,rbx
+
+ xor rdi,rcx
+ ror r13,14
+ mov rax,rcx
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor rax,r15
+ add r8,r12
+ add rax,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ jmp $L$rounds_16_xx
+ALIGN 16
+$L$rounds_16_xx::
+ mov r13,QWORD PTR[8+rsp]
+ mov r15,QWORD PTR[112+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add rax,r14
+ mov r14,r15
+ ror r15,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor r15,r14
+ shr r14,6
+
+ ror r15,19
+ xor r12,r13
+ xor r15,r14
+ add r12,QWORD PTR[72+rsp]
+
+ add r12,QWORD PTR[rsp]
+ mov r13,r8
+ add r12,r15
+ mov r14,rax
+ ror r13,23
+ mov r15,r9
+
+ xor r13,r8
+ ror r14,5
+ xor r15,r10
+
+ mov QWORD PTR[rsp],r12
+ xor r14,rax
+ and r15,r8
+
+ ror r13,4
+ add r12,r11
+ xor r15,r10
+
+ ror r14,6
+ xor r13,r8
+ add r12,r15
+
+ mov r15,rax
+ add r12,QWORD PTR[rbp]
+ xor r14,rax
+
+ xor r15,rbx
+ ror r13,14
+ mov r11,rbx
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor r11,rdi
+ add rdx,r12
+ add r11,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ mov r13,QWORD PTR[16+rsp]
+ mov rdi,QWORD PTR[120+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add r11,r14
+ mov r14,rdi
+ ror rdi,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor rdi,r14
+ shr r14,6
+
+ ror rdi,19
+ xor r12,r13
+ xor rdi,r14
+ add r12,QWORD PTR[80+rsp]
+
+ add r12,QWORD PTR[8+rsp]
+ mov r13,rdx
+ add r12,rdi
+ mov r14,r11
+ ror r13,23
+ mov rdi,r8
+
+ xor r13,rdx
+ ror r14,5
+ xor rdi,r9
+
+ mov QWORD PTR[8+rsp],r12
+ xor r14,r11
+ and rdi,rdx
+
+ ror r13,4
+ add r12,r10
+ xor rdi,r9
+
+ ror r14,6
+ xor r13,rdx
+ add r12,rdi
+
+ mov rdi,r11
+ add r12,QWORD PTR[rbp]
+ xor r14,r11
+
+ xor rdi,rax
+ ror r13,14
+ mov r10,rax
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor r10,r15
+ add rcx,r12
+ add r10,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ mov r13,QWORD PTR[24+rsp]
+ mov r15,QWORD PTR[rsp]
+
+ mov r12,r13
+ ror r13,7
+ add r10,r14
+ mov r14,r15
+ ror r15,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor r15,r14
+ shr r14,6
+
+ ror r15,19
+ xor r12,r13
+ xor r15,r14
+ add r12,QWORD PTR[88+rsp]
+
+ add r12,QWORD PTR[16+rsp]
+ mov r13,rcx
+ add r12,r15
+ mov r14,r10
+ ror r13,23
+ mov r15,rdx
+
+ xor r13,rcx
+ ror r14,5
+ xor r15,r8
+
+ mov QWORD PTR[16+rsp],r12
+ xor r14,r10
+ and r15,rcx
+
+ ror r13,4
+ add r12,r9
+ xor r15,r8
+
+ ror r14,6
+ xor r13,rcx
+ add r12,r15
+
+ mov r15,r10
+ add r12,QWORD PTR[rbp]
+ xor r14,r10
+
+ xor r15,r11
+ ror r13,14
+ mov r9,r11
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor r9,rdi
+ add rbx,r12
+ add r9,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ mov r13,QWORD PTR[32+rsp]
+ mov rdi,QWORD PTR[8+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add r9,r14
+ mov r14,rdi
+ ror rdi,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor rdi,r14
+ shr r14,6
+
+ ror rdi,19
+ xor r12,r13
+ xor rdi,r14
+ add r12,QWORD PTR[96+rsp]
+
+ add r12,QWORD PTR[24+rsp]
+ mov r13,rbx
+ add r12,rdi
+ mov r14,r9
+ ror r13,23
+ mov rdi,rcx
+
+ xor r13,rbx
+ ror r14,5
+ xor rdi,rdx
+
+ mov QWORD PTR[24+rsp],r12
+ xor r14,r9
+ and rdi,rbx
+
+ ror r13,4
+ add r12,r8
+ xor rdi,rdx
+
+ ror r14,6
+ xor r13,rbx
+ add r12,rdi
+
+ mov rdi,r9
+ add r12,QWORD PTR[rbp]
+ xor r14,r9
+
+ xor rdi,r10
+ ror r13,14
+ mov r8,r10
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor r8,r15
+ add rax,r12
+ add r8,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ mov r13,QWORD PTR[40+rsp]
+ mov r15,QWORD PTR[16+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add r8,r14
+ mov r14,r15
+ ror r15,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor r15,r14
+ shr r14,6
+
+ ror r15,19
+ xor r12,r13
+ xor r15,r14
+ add r12,QWORD PTR[104+rsp]
+
+ add r12,QWORD PTR[32+rsp]
+ mov r13,rax
+ add r12,r15
+ mov r14,r8
+ ror r13,23
+ mov r15,rbx
+
+ xor r13,rax
+ ror r14,5
+ xor r15,rcx
+
+ mov QWORD PTR[32+rsp],r12
+ xor r14,r8
+ and r15,rax
+
+ ror r13,4
+ add r12,rdx
+ xor r15,rcx
+
+ ror r14,6
+ xor r13,rax
+ add r12,r15
+
+ mov r15,r8
+ add r12,QWORD PTR[rbp]
+ xor r14,r8
+
+ xor r15,r9
+ ror r13,14
+ mov rdx,r9
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor rdx,rdi
+ add r11,r12
+ add rdx,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ mov r13,QWORD PTR[48+rsp]
+ mov rdi,QWORD PTR[24+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add rdx,r14
+ mov r14,rdi
+ ror rdi,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor rdi,r14
+ shr r14,6
+
+ ror rdi,19
+ xor r12,r13
+ xor rdi,r14
+ add r12,QWORD PTR[112+rsp]
+
+ add r12,QWORD PTR[40+rsp]
+ mov r13,r11
+ add r12,rdi
+ mov r14,rdx
+ ror r13,23
+ mov rdi,rax
+
+ xor r13,r11
+ ror r14,5
+ xor rdi,rbx
+
+ mov QWORD PTR[40+rsp],r12
+ xor r14,rdx
+ and rdi,r11
+
+ ror r13,4
+ add r12,rcx
+ xor rdi,rbx
+
+ ror r14,6
+ xor r13,r11
+ add r12,rdi
+
+ mov rdi,rdx
+ add r12,QWORD PTR[rbp]
+ xor r14,rdx
+
+ xor rdi,r8
+ ror r13,14
+ mov rcx,r8
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor rcx,r15
+ add r10,r12
+ add rcx,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ mov r13,QWORD PTR[56+rsp]
+ mov r15,QWORD PTR[32+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add rcx,r14
+ mov r14,r15
+ ror r15,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor r15,r14
+ shr r14,6
+
+ ror r15,19
+ xor r12,r13
+ xor r15,r14
+ add r12,QWORD PTR[120+rsp]
+
+ add r12,QWORD PTR[48+rsp]
+ mov r13,r10
+ add r12,r15
+ mov r14,rcx
+ ror r13,23
+ mov r15,r11
+
+ xor r13,r10
+ ror r14,5
+ xor r15,rax
+
+ mov QWORD PTR[48+rsp],r12
+ xor r14,rcx
+ and r15,r10
+
+ ror r13,4
+ add r12,rbx
+ xor r15,rax
+
+ ror r14,6
+ xor r13,r10
+ add r12,r15
+
+ mov r15,rcx
+ add r12,QWORD PTR[rbp]
+ xor r14,rcx
+
+ xor r15,rdx
+ ror r13,14
+ mov rbx,rdx
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor rbx,rdi
+ add r9,r12
+ add rbx,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ mov r13,QWORD PTR[64+rsp]
+ mov rdi,QWORD PTR[40+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add rbx,r14
+ mov r14,rdi
+ ror rdi,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor rdi,r14
+ shr r14,6
+
+ ror rdi,19
+ xor r12,r13
+ xor rdi,r14
+ add r12,QWORD PTR[rsp]
+
+ add r12,QWORD PTR[56+rsp]
+ mov r13,r9
+ add r12,rdi
+ mov r14,rbx
+ ror r13,23
+ mov rdi,r10
+
+ xor r13,r9
+ ror r14,5
+ xor rdi,r11
+
+ mov QWORD PTR[56+rsp],r12
+ xor r14,rbx
+ and rdi,r9
+
+ ror r13,4
+ add r12,rax
+ xor rdi,r11
+
+ ror r14,6
+ xor r13,r9
+ add r12,rdi
+
+ mov rdi,rbx
+ add r12,QWORD PTR[rbp]
+ xor r14,rbx
+
+ xor rdi,rcx
+ ror r13,14
+ mov rax,rcx
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor rax,r15
+ add r8,r12
+ add rax,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ mov r13,QWORD PTR[72+rsp]
+ mov r15,QWORD PTR[48+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add rax,r14
+ mov r14,r15
+ ror r15,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor r15,r14
+ shr r14,6
+
+ ror r15,19
+ xor r12,r13
+ xor r15,r14
+ add r12,QWORD PTR[8+rsp]
+
+ add r12,QWORD PTR[64+rsp]
+ mov r13,r8
+ add r12,r15
+ mov r14,rax
+ ror r13,23
+ mov r15,r9
+
+ xor r13,r8
+ ror r14,5
+ xor r15,r10
+
+ mov QWORD PTR[64+rsp],r12
+ xor r14,rax
+ and r15,r8
+
+ ror r13,4
+ add r12,r11
+ xor r15,r10
+
+ ror r14,6
+ xor r13,r8
+ add r12,r15
+
+ mov r15,rax
+ add r12,QWORD PTR[rbp]
+ xor r14,rax
+
+ xor r15,rbx
+ ror r13,14
+ mov r11,rbx
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor r11,rdi
+ add rdx,r12
+ add r11,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ mov r13,QWORD PTR[80+rsp]
+ mov rdi,QWORD PTR[56+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add r11,r14
+ mov r14,rdi
+ ror rdi,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor rdi,r14
+ shr r14,6
+
+ ror rdi,19
+ xor r12,r13
+ xor rdi,r14
+ add r12,QWORD PTR[16+rsp]
+
+ add r12,QWORD PTR[72+rsp]
+ mov r13,rdx
+ add r12,rdi
+ mov r14,r11
+ ror r13,23
+ mov rdi,r8
+
+ xor r13,rdx
+ ror r14,5
+ xor rdi,r9
+
+ mov QWORD PTR[72+rsp],r12
+ xor r14,r11
+ and rdi,rdx
+
+ ror r13,4
+ add r12,r10
+ xor rdi,r9
+
+ ror r14,6
+ xor r13,rdx
+ add r12,rdi
+
+ mov rdi,r11
+ add r12,QWORD PTR[rbp]
+ xor r14,r11
+
+ xor rdi,rax
+ ror r13,14
+ mov r10,rax
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor r10,r15
+ add rcx,r12
+ add r10,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ mov r13,QWORD PTR[88+rsp]
+ mov r15,QWORD PTR[64+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add r10,r14
+ mov r14,r15
+ ror r15,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor r15,r14
+ shr r14,6
+
+ ror r15,19
+ xor r12,r13
+ xor r15,r14
+ add r12,QWORD PTR[24+rsp]
+
+ add r12,QWORD PTR[80+rsp]
+ mov r13,rcx
+ add r12,r15
+ mov r14,r10
+ ror r13,23
+ mov r15,rdx
+
+ xor r13,rcx
+ ror r14,5
+ xor r15,r8
+
+ mov QWORD PTR[80+rsp],r12
+ xor r14,r10
+ and r15,rcx
+
+ ror r13,4
+ add r12,r9
+ xor r15,r8
+
+ ror r14,6
+ xor r13,rcx
+ add r12,r15
+
+ mov r15,r10
+ add r12,QWORD PTR[rbp]
+ xor r14,r10
+
+ xor r15,r11
+ ror r13,14
+ mov r9,r11
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor r9,rdi
+ add rbx,r12
+ add r9,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ mov r13,QWORD PTR[96+rsp]
+ mov rdi,QWORD PTR[72+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add r9,r14
+ mov r14,rdi
+ ror rdi,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor rdi,r14
+ shr r14,6
+
+ ror rdi,19
+ xor r12,r13
+ xor rdi,r14
+ add r12,QWORD PTR[32+rsp]
+
+ add r12,QWORD PTR[88+rsp]
+ mov r13,rbx
+ add r12,rdi
+ mov r14,r9
+ ror r13,23
+ mov rdi,rcx
+
+ xor r13,rbx
+ ror r14,5
+ xor rdi,rdx
+
+ mov QWORD PTR[88+rsp],r12
+ xor r14,r9
+ and rdi,rbx
+
+ ror r13,4
+ add r12,r8
+ xor rdi,rdx
+
+ ror r14,6
+ xor r13,rbx
+ add r12,rdi
+
+ mov rdi,r9
+ add r12,QWORD PTR[rbp]
+ xor r14,r9
+
+ xor rdi,r10
+ ror r13,14
+ mov r8,r10
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor r8,r15
+ add rax,r12
+ add r8,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ mov r13,QWORD PTR[104+rsp]
+ mov r15,QWORD PTR[80+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add r8,r14
+ mov r14,r15
+ ror r15,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor r15,r14
+ shr r14,6
+
+ ror r15,19
+ xor r12,r13
+ xor r15,r14
+ add r12,QWORD PTR[40+rsp]
+
+ add r12,QWORD PTR[96+rsp]
+ mov r13,rax
+ add r12,r15
+ mov r14,r8
+ ror r13,23
+ mov r15,rbx
+
+ xor r13,rax
+ ror r14,5
+ xor r15,rcx
+
+ mov QWORD PTR[96+rsp],r12
+ xor r14,r8
+ and r15,rax
+
+ ror r13,4
+ add r12,rdx
+ xor r15,rcx
+
+ ror r14,6
+ xor r13,rax
+ add r12,r15
+
+ mov r15,r8
+ add r12,QWORD PTR[rbp]
+ xor r14,r8
+
+ xor r15,r9
+ ror r13,14
+ mov rdx,r9
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor rdx,rdi
+ add r11,r12
+ add rdx,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ mov r13,QWORD PTR[112+rsp]
+ mov rdi,QWORD PTR[88+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add rdx,r14
+ mov r14,rdi
+ ror rdi,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor rdi,r14
+ shr r14,6
+
+ ror rdi,19
+ xor r12,r13
+ xor rdi,r14
+ add r12,QWORD PTR[48+rsp]
+
+ add r12,QWORD PTR[104+rsp]
+ mov r13,r11
+ add r12,rdi
+ mov r14,rdx
+ ror r13,23
+ mov rdi,rax
+
+ xor r13,r11
+ ror r14,5
+ xor rdi,rbx
+
+ mov QWORD PTR[104+rsp],r12
+ xor r14,rdx
+ and rdi,r11
+
+ ror r13,4
+ add r12,rcx
+ xor rdi,rbx
+
+ ror r14,6
+ xor r13,r11
+ add r12,rdi
+
+ mov rdi,rdx
+ add r12,QWORD PTR[rbp]
+ xor r14,rdx
+
+ xor rdi,r8
+ ror r13,14
+ mov rcx,r8
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor rcx,r15
+ add r10,r12
+ add rcx,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ mov r13,QWORD PTR[120+rsp]
+ mov r15,QWORD PTR[96+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add rcx,r14
+ mov r14,r15
+ ror r15,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor r15,r14
+ shr r14,6
+
+ ror r15,19
+ xor r12,r13
+ xor r15,r14
+ add r12,QWORD PTR[56+rsp]
+
+ add r12,QWORD PTR[112+rsp]
+ mov r13,r10
+ add r12,r15
+ mov r14,rcx
+ ror r13,23
+ mov r15,r11
+
+ xor r13,r10
+ ror r14,5
+ xor r15,rax
+
+ mov QWORD PTR[112+rsp],r12
+ xor r14,rcx
+ and r15,r10
+
+ ror r13,4
+ add r12,rbx
+ xor r15,rax
+
+ ror r14,6
+ xor r13,r10
+ add r12,r15
+
+ mov r15,rcx
+ add r12,QWORD PTR[rbp]
+ xor r14,rcx
+
+ xor r15,rdx
+ ror r13,14
+ mov rbx,rdx
+
+ and rdi,r15
+ ror r14,28
+ add r12,r13
+
+ xor rbx,rdi
+ add r9,r12
+ add rbx,r12
+
+ lea rbp,QWORD PTR[8+rbp]
+ mov r13,QWORD PTR[rsp]
+ mov rdi,QWORD PTR[104+rsp]
+
+ mov r12,r13
+ ror r13,7
+ add rbx,r14
+ mov r14,rdi
+ ror rdi,42
+
+ xor r13,r12
+ shr r12,7
+ ror r13,1
+ xor rdi,r14
+ shr r14,6
+
+ ror rdi,19
+ xor r12,r13
+ xor rdi,r14
+ add r12,QWORD PTR[64+rsp]
+
+ add r12,QWORD PTR[120+rsp]
+ mov r13,r9
+ add r12,rdi
+ mov r14,rbx
+ ror r13,23
+ mov rdi,r10
+
+ xor r13,r9
+ ror r14,5
+ xor rdi,r11
+
+ mov QWORD PTR[120+rsp],r12
+ xor r14,rbx
+ and rdi,r9
+
+ ror r13,4
+ add r12,rax
+ xor rdi,r11
+
+ ror r14,6
+ xor r13,r9
+ add r12,rdi
+
+ mov rdi,rbx
+ add r12,QWORD PTR[rbp]
+ xor r14,rbx
+
+ xor rdi,rcx
+ ror r13,14
+ mov rax,rcx
+
+ and r15,rdi
+ ror r14,28
+ add r12,r13
+
+ xor rax,r15
+ add r8,r12
+ add rax,r12
+
+ lea rbp,QWORD PTR[24+rbp]
+ cmp BYTE PTR[7+rbp],0
+ jnz $L$rounds_16_xx
+
+ mov rdi,QWORD PTR[((128+0))+rsp]
+ add rax,r14
+ lea rsi,QWORD PTR[128+rsi]
+
+ add rax,QWORD PTR[rdi]
+ add rbx,QWORD PTR[8+rdi]
+ add rcx,QWORD PTR[16+rdi]
+ add rdx,QWORD PTR[24+rdi]
+ add r8,QWORD PTR[32+rdi]
+ add r9,QWORD PTR[40+rdi]
+ add r10,QWORD PTR[48+rdi]
+ add r11,QWORD PTR[56+rdi]
+
+ cmp rsi,QWORD PTR[((128+16))+rsp]
+
+ mov QWORD PTR[rdi],rax
+ mov QWORD PTR[8+rdi],rbx
+ mov QWORD PTR[16+rdi],rcx
+ mov QWORD PTR[24+rdi],rdx
+ mov QWORD PTR[32+rdi],r8
+ mov QWORD PTR[40+rdi],r9
+ mov QWORD PTR[48+rdi],r10
+ mov QWORD PTR[56+rdi],r11
+ jb $L$loop
+
+ mov rsi,QWORD PTR[152+rsp]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha512_block_data_order::
+sha512_block_data_order ENDP
+ALIGN 64
+
+K512::
+ DQ 0428a2f98d728ae22h,07137449123ef65cdh
+ DQ 0428a2f98d728ae22h,07137449123ef65cdh
+ DQ 0b5c0fbcfec4d3b2fh,0e9b5dba58189dbbch
+ DQ 0b5c0fbcfec4d3b2fh,0e9b5dba58189dbbch
+ DQ 03956c25bf348b538h,059f111f1b605d019h
+ DQ 03956c25bf348b538h,059f111f1b605d019h
+ DQ 0923f82a4af194f9bh,0ab1c5ed5da6d8118h
+ DQ 0923f82a4af194f9bh,0ab1c5ed5da6d8118h
+ DQ 0d807aa98a3030242h,012835b0145706fbeh
+ DQ 0d807aa98a3030242h,012835b0145706fbeh
+ DQ 0243185be4ee4b28ch,0550c7dc3d5ffb4e2h
+ DQ 0243185be4ee4b28ch,0550c7dc3d5ffb4e2h
+ DQ 072be5d74f27b896fh,080deb1fe3b1696b1h
+ DQ 072be5d74f27b896fh,080deb1fe3b1696b1h
+ DQ 09bdc06a725c71235h,0c19bf174cf692694h
+ DQ 09bdc06a725c71235h,0c19bf174cf692694h
+ DQ 0e49b69c19ef14ad2h,0efbe4786384f25e3h
+ DQ 0e49b69c19ef14ad2h,0efbe4786384f25e3h
+ DQ 00fc19dc68b8cd5b5h,0240ca1cc77ac9c65h
+ DQ 00fc19dc68b8cd5b5h,0240ca1cc77ac9c65h
+ DQ 02de92c6f592b0275h,04a7484aa6ea6e483h
+ DQ 02de92c6f592b0275h,04a7484aa6ea6e483h
+ DQ 05cb0a9dcbd41fbd4h,076f988da831153b5h
+ DQ 05cb0a9dcbd41fbd4h,076f988da831153b5h
+ DQ 0983e5152ee66dfabh,0a831c66d2db43210h
+ DQ 0983e5152ee66dfabh,0a831c66d2db43210h
+ DQ 0b00327c898fb213fh,0bf597fc7beef0ee4h
+ DQ 0b00327c898fb213fh,0bf597fc7beef0ee4h
+ DQ 0c6e00bf33da88fc2h,0d5a79147930aa725h
+ DQ 0c6e00bf33da88fc2h,0d5a79147930aa725h
+ DQ 006ca6351e003826fh,0142929670a0e6e70h
+ DQ 006ca6351e003826fh,0142929670a0e6e70h
+ DQ 027b70a8546d22ffch,02e1b21385c26c926h
+ DQ 027b70a8546d22ffch,02e1b21385c26c926h
+ DQ 04d2c6dfc5ac42aedh,053380d139d95b3dfh
+ DQ 04d2c6dfc5ac42aedh,053380d139d95b3dfh
+ DQ 0650a73548baf63deh,0766a0abb3c77b2a8h
+ DQ 0650a73548baf63deh,0766a0abb3c77b2a8h
+ DQ 081c2c92e47edaee6h,092722c851482353bh
+ DQ 081c2c92e47edaee6h,092722c851482353bh
+ DQ 0a2bfe8a14cf10364h,0a81a664bbc423001h
+ DQ 0a2bfe8a14cf10364h,0a81a664bbc423001h
+ DQ 0c24b8b70d0f89791h,0c76c51a30654be30h
+ DQ 0c24b8b70d0f89791h,0c76c51a30654be30h
+ DQ 0d192e819d6ef5218h,0d69906245565a910h
+ DQ 0d192e819d6ef5218h,0d69906245565a910h
+ DQ 0f40e35855771202ah,0106aa07032bbd1b8h
+ DQ 0f40e35855771202ah,0106aa07032bbd1b8h
+ DQ 019a4c116b8d2d0c8h,01e376c085141ab53h
+ DQ 019a4c116b8d2d0c8h,01e376c085141ab53h
+ DQ 02748774cdf8eeb99h,034b0bcb5e19b48a8h
+ DQ 02748774cdf8eeb99h,034b0bcb5e19b48a8h
+ DQ 0391c0cb3c5c95a63h,04ed8aa4ae3418acbh
+ DQ 0391c0cb3c5c95a63h,04ed8aa4ae3418acbh
+ DQ 05b9cca4f7763e373h,0682e6ff3d6b2b8a3h
+ DQ 05b9cca4f7763e373h,0682e6ff3d6b2b8a3h
+ DQ 0748f82ee5defb2fch,078a5636f43172f60h
+ DQ 0748f82ee5defb2fch,078a5636f43172f60h
+ DQ 084c87814a1f0ab72h,08cc702081a6439ech
+ DQ 084c87814a1f0ab72h,08cc702081a6439ech
+ DQ 090befffa23631e28h,0a4506cebde82bde9h
+ DQ 090befffa23631e28h,0a4506cebde82bde9h
+ DQ 0bef9a3f7b2c67915h,0c67178f2e372532bh
+ DQ 0bef9a3f7b2c67915h,0c67178f2e372532bh
+ DQ 0ca273eceea26619ch,0d186b8c721c0c207h
+ DQ 0ca273eceea26619ch,0d186b8c721c0c207h
+ DQ 0eada7dd6cde0eb1eh,0f57d4f7fee6ed178h
+ DQ 0eada7dd6cde0eb1eh,0f57d4f7fee6ed178h
+ DQ 006f067aa72176fbah,00a637dc5a2c898a6h
+ DQ 006f067aa72176fbah,00a637dc5a2c898a6h
+ DQ 0113f9804bef90daeh,01b710b35131c471bh
+ DQ 0113f9804bef90daeh,01b710b35131c471bh
+ DQ 028db77f523047d84h,032caab7b40c72493h
+ DQ 028db77f523047d84h,032caab7b40c72493h
+ DQ 03c9ebe0a15c9bebch,0431d67c49c100d4ch
+ DQ 03c9ebe0a15c9bebch,0431d67c49c100d4ch
+ DQ 04cc5d4becb3e42b6h,0597f299cfc657e2ah
+ DQ 04cc5d4becb3e42b6h,0597f299cfc657e2ah
+ DQ 05fcb6fab3ad6faech,06c44198c4a475817h
+ DQ 05fcb6fab3ad6faech,06c44198c4a475817h
+
+ DQ 00001020304050607h,008090a0b0c0d0e0fh
+ DQ 00001020304050607h,008090a0b0c0d0e0fh
+DB 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
+DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54
+DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
+DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
+DB 111,114,103,62,0
+
+ALIGN 64
+sha512_block_data_order_xop PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha512_block_data_order_xop::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$xop_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ shl rdx,4
+ sub rsp,256
+ lea rdx,QWORD PTR[rdx*8+rsi]
+ and rsp,-64
+ mov QWORD PTR[((128+0))+rsp],rdi
+ mov QWORD PTR[((128+8))+rsp],rsi
+ mov QWORD PTR[((128+16))+rsp],rdx
+ mov QWORD PTR[152+rsp],rax
+
+ movaps XMMWORD PTR[(128+32)+rsp],xmm6
+ movaps XMMWORD PTR[(128+48)+rsp],xmm7
+ movaps XMMWORD PTR[(128+64)+rsp],xmm8
+ movaps XMMWORD PTR[(128+80)+rsp],xmm9
+ movaps XMMWORD PTR[(128+96)+rsp],xmm10
+ movaps XMMWORD PTR[(128+112)+rsp],xmm11
+$L$prologue_xop::
+
+ vzeroupper
+ mov rax,QWORD PTR[rdi]
+ mov rbx,QWORD PTR[8+rdi]
+ mov rcx,QWORD PTR[16+rdi]
+ mov rdx,QWORD PTR[24+rdi]
+ mov r8,QWORD PTR[32+rdi]
+ mov r9,QWORD PTR[40+rdi]
+ mov r10,QWORD PTR[48+rdi]
+ mov r11,QWORD PTR[56+rdi]
+ jmp $L$loop_xop
+ALIGN 16
+$L$loop_xop::
+ vmovdqa xmm11,XMMWORD PTR[((K512+1280))]
+ vmovdqu xmm0,XMMWORD PTR[rsi]
+ lea rbp,QWORD PTR[((K512+128))]
+ vmovdqu xmm1,XMMWORD PTR[16+rsi]
+ vmovdqu xmm2,XMMWORD PTR[32+rsi]
+ vpshufb xmm0,xmm0,xmm11
+ vmovdqu xmm3,XMMWORD PTR[48+rsi]
+ vpshufb xmm1,xmm1,xmm11
+ vmovdqu xmm4,XMMWORD PTR[64+rsi]
+ vpshufb xmm2,xmm2,xmm11
+ vmovdqu xmm5,XMMWORD PTR[80+rsi]
+ vpshufb xmm3,xmm3,xmm11
+ vmovdqu xmm6,XMMWORD PTR[96+rsi]
+ vpshufb xmm4,xmm4,xmm11
+ vmovdqu xmm7,XMMWORD PTR[112+rsi]
+ vpshufb xmm5,xmm5,xmm11
+ vpaddq xmm8,xmm0,XMMWORD PTR[((-128))+rbp]
+ vpshufb xmm6,xmm6,xmm11
+ vpaddq xmm9,xmm1,XMMWORD PTR[((-96))+rbp]
+ vpshufb xmm7,xmm7,xmm11
+ vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
+ vpaddq xmm11,xmm3,XMMWORD PTR[((-32))+rbp]
+ vmovdqa XMMWORD PTR[rsp],xmm8
+ vpaddq xmm8,xmm4,XMMWORD PTR[rbp]
+ vmovdqa XMMWORD PTR[16+rsp],xmm9
+ vpaddq xmm9,xmm5,XMMWORD PTR[32+rbp]
+ vmovdqa XMMWORD PTR[32+rsp],xmm10
+ vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
+ vmovdqa XMMWORD PTR[48+rsp],xmm11
+ vpaddq xmm11,xmm7,XMMWORD PTR[96+rbp]
+ vmovdqa XMMWORD PTR[64+rsp],xmm8
+ mov r14,rax
+ vmovdqa XMMWORD PTR[80+rsp],xmm9
+ mov rdi,rbx
+ vmovdqa XMMWORD PTR[96+rsp],xmm10
+ xor rdi,rcx
+ vmovdqa XMMWORD PTR[112+rsp],xmm11
+ mov r13,r8
+ jmp $L$xop_00_47
+
+ALIGN 16
+$L$xop_00_47::
+ add rbp,256
+ vpalignr xmm8,xmm1,xmm0,8
+ ror r13,23
+ mov rax,r14
+ vpalignr xmm11,xmm5,xmm4,8
+ mov r12,r9
+ ror r14,5
+DB 143,72,120,195,200,56
+ xor r13,r8
+ xor r12,r10
+ vpsrlq xmm8,xmm8,7
+ ror r13,4
+ xor r14,rax
+ vpaddq xmm0,xmm0,xmm11
+ and r12,r8
+ xor r13,r8
+ add r11,QWORD PTR[rsp]
+ mov r15,rax
+DB 143,72,120,195,209,7
+ xor r12,r10
+ ror r14,6
+ vpxor xmm8,xmm8,xmm9
+ xor r15,rbx
+ add r11,r12
+ ror r13,14
+ and rdi,r15
+DB 143,104,120,195,223,3
+ xor r14,rax
+ add r11,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,rbx
+ ror r14,28
+ vpsrlq xmm10,xmm7,6
+ add rdx,r11
+ add r11,rdi
+ vpaddq xmm0,xmm0,xmm8
+ mov r13,rdx
+ add r14,r11
+DB 143,72,120,195,203,42
+ ror r13,23
+ mov r11,r14
+ vpxor xmm11,xmm11,xmm10
+ mov r12,r8
+ ror r14,5
+ xor r13,rdx
+ xor r12,r9
+ vpxor xmm11,xmm11,xmm9
+ ror r13,4
+ xor r14,r11
+ and r12,rdx
+ xor r13,rdx
+ vpaddq xmm0,xmm0,xmm11
+ add r10,QWORD PTR[8+rsp]
+ mov rdi,r11
+ xor r12,r9
+ ror r14,6
+ vpaddq xmm10,xmm0,XMMWORD PTR[((-128))+rbp]
+ xor rdi,rax
+ add r10,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,r11
+ add r10,r13
+ xor r15,rax
+ ror r14,28
+ add rcx,r10
+ add r10,r15
+ mov r13,rcx
+ add r14,r10
+ vmovdqa XMMWORD PTR[rsp],xmm10
+ vpalignr xmm8,xmm2,xmm1,8
+ ror r13,23
+ mov r10,r14
+ vpalignr xmm11,xmm6,xmm5,8
+ mov r12,rdx
+ ror r14,5
+DB 143,72,120,195,200,56
+ xor r13,rcx
+ xor r12,r8
+ vpsrlq xmm8,xmm8,7
+ ror r13,4
+ xor r14,r10
+ vpaddq xmm1,xmm1,xmm11
+ and r12,rcx
+ xor r13,rcx
+ add r9,QWORD PTR[16+rsp]
+ mov r15,r10
+DB 143,72,120,195,209,7
+ xor r12,r8
+ ror r14,6
+ vpxor xmm8,xmm8,xmm9
+ xor r15,r11
+ add r9,r12
+ ror r13,14
+ and rdi,r15
+DB 143,104,120,195,216,3
+ xor r14,r10
+ add r9,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,r11
+ ror r14,28
+ vpsrlq xmm10,xmm0,6
+ add rbx,r9
+ add r9,rdi
+ vpaddq xmm1,xmm1,xmm8
+ mov r13,rbx
+ add r14,r9
+DB 143,72,120,195,203,42
+ ror r13,23
+ mov r9,r14
+ vpxor xmm11,xmm11,xmm10
+ mov r12,rcx
+ ror r14,5
+ xor r13,rbx
+ xor r12,rdx
+ vpxor xmm11,xmm11,xmm9
+ ror r13,4
+ xor r14,r9
+ and r12,rbx
+ xor r13,rbx
+ vpaddq xmm1,xmm1,xmm11
+ add r8,QWORD PTR[24+rsp]
+ mov rdi,r9
+ xor r12,rdx
+ ror r14,6
+ vpaddq xmm10,xmm1,XMMWORD PTR[((-96))+rbp]
+ xor rdi,r10
+ add r8,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,r9
+ add r8,r13
+ xor r15,r10
+ ror r14,28
+ add rax,r8
+ add r8,r15
+ mov r13,rax
+ add r14,r8
+ vmovdqa XMMWORD PTR[16+rsp],xmm10
+ vpalignr xmm8,xmm3,xmm2,8
+ ror r13,23
+ mov r8,r14
+ vpalignr xmm11,xmm7,xmm6,8
+ mov r12,rbx
+ ror r14,5
+DB 143,72,120,195,200,56
+ xor r13,rax
+ xor r12,rcx
+ vpsrlq xmm8,xmm8,7
+ ror r13,4
+ xor r14,r8
+ vpaddq xmm2,xmm2,xmm11
+ and r12,rax
+ xor r13,rax
+ add rdx,QWORD PTR[32+rsp]
+ mov r15,r8
+DB 143,72,120,195,209,7
+ xor r12,rcx
+ ror r14,6
+ vpxor xmm8,xmm8,xmm9
+ xor r15,r9
+ add rdx,r12
+ ror r13,14
+ and rdi,r15
+DB 143,104,120,195,217,3
+ xor r14,r8
+ add rdx,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,r9
+ ror r14,28
+ vpsrlq xmm10,xmm1,6
+ add r11,rdx
+ add rdx,rdi
+ vpaddq xmm2,xmm2,xmm8
+ mov r13,r11
+ add r14,rdx
+DB 143,72,120,195,203,42
+ ror r13,23
+ mov rdx,r14
+ vpxor xmm11,xmm11,xmm10
+ mov r12,rax
+ ror r14,5
+ xor r13,r11
+ xor r12,rbx
+ vpxor xmm11,xmm11,xmm9
+ ror r13,4
+ xor r14,rdx
+ and r12,r11
+ xor r13,r11
+ vpaddq xmm2,xmm2,xmm11
+ add rcx,QWORD PTR[40+rsp]
+ mov rdi,rdx
+ xor r12,rbx
+ ror r14,6
+ vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
+ xor rdi,r8
+ add rcx,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,rdx
+ add rcx,r13
+ xor r15,r8
+ ror r14,28
+ add r10,rcx
+ add rcx,r15
+ mov r13,r10
+ add r14,rcx
+ vmovdqa XMMWORD PTR[32+rsp],xmm10
+ vpalignr xmm8,xmm4,xmm3,8
+ ror r13,23
+ mov rcx,r14
+ vpalignr xmm11,xmm0,xmm7,8
+ mov r12,r11
+ ror r14,5
+DB 143,72,120,195,200,56
+ xor r13,r10
+ xor r12,rax
+ vpsrlq xmm8,xmm8,7
+ ror r13,4
+ xor r14,rcx
+ vpaddq xmm3,xmm3,xmm11
+ and r12,r10
+ xor r13,r10
+ add rbx,QWORD PTR[48+rsp]
+ mov r15,rcx
+DB 143,72,120,195,209,7
+ xor r12,rax
+ ror r14,6
+ vpxor xmm8,xmm8,xmm9
+ xor r15,rdx
+ add rbx,r12
+ ror r13,14
+ and rdi,r15
+DB 143,104,120,195,218,3
+ xor r14,rcx
+ add rbx,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,rdx
+ ror r14,28
+ vpsrlq xmm10,xmm2,6
+ add r9,rbx
+ add rbx,rdi
+ vpaddq xmm3,xmm3,xmm8
+ mov r13,r9
+ add r14,rbx
+DB 143,72,120,195,203,42
+ ror r13,23
+ mov rbx,r14
+ vpxor xmm11,xmm11,xmm10
+ mov r12,r10
+ ror r14,5
+ xor r13,r9
+ xor r12,r11
+ vpxor xmm11,xmm11,xmm9
+ ror r13,4
+ xor r14,rbx
+ and r12,r9
+ xor r13,r9
+ vpaddq xmm3,xmm3,xmm11
+ add rax,QWORD PTR[56+rsp]
+ mov rdi,rbx
+ xor r12,r11
+ ror r14,6
+ vpaddq xmm10,xmm3,XMMWORD PTR[((-32))+rbp]
+ xor rdi,rcx
+ add rax,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,rbx
+ add rax,r13
+ xor r15,rcx
+ ror r14,28
+ add r8,rax
+ add rax,r15
+ mov r13,r8
+ add r14,rax
+ vmovdqa XMMWORD PTR[48+rsp],xmm10
+ vpalignr xmm8,xmm5,xmm4,8
+ ror r13,23
+ mov rax,r14
+ vpalignr xmm11,xmm1,xmm0,8
+ mov r12,r9
+ ror r14,5
+DB 143,72,120,195,200,56
+ xor r13,r8
+ xor r12,r10
+ vpsrlq xmm8,xmm8,7
+ ror r13,4
+ xor r14,rax
+ vpaddq xmm4,xmm4,xmm11
+ and r12,r8
+ xor r13,r8
+ add r11,QWORD PTR[64+rsp]
+ mov r15,rax
+DB 143,72,120,195,209,7
+ xor r12,r10
+ ror r14,6
+ vpxor xmm8,xmm8,xmm9
+ xor r15,rbx
+ add r11,r12
+ ror r13,14
+ and rdi,r15
+DB 143,104,120,195,219,3
+ xor r14,rax
+ add r11,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,rbx
+ ror r14,28
+ vpsrlq xmm10,xmm3,6
+ add rdx,r11
+ add r11,rdi
+ vpaddq xmm4,xmm4,xmm8
+ mov r13,rdx
+ add r14,r11
+DB 143,72,120,195,203,42
+ ror r13,23
+ mov r11,r14
+ vpxor xmm11,xmm11,xmm10
+ mov r12,r8
+ ror r14,5
+ xor r13,rdx
+ xor r12,r9
+ vpxor xmm11,xmm11,xmm9
+ ror r13,4
+ xor r14,r11
+ and r12,rdx
+ xor r13,rdx
+ vpaddq xmm4,xmm4,xmm11
+ add r10,QWORD PTR[72+rsp]
+ mov rdi,r11
+ xor r12,r9
+ ror r14,6
+ vpaddq xmm10,xmm4,XMMWORD PTR[rbp]
+ xor rdi,rax
+ add r10,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,r11
+ add r10,r13
+ xor r15,rax
+ ror r14,28
+ add rcx,r10
+ add r10,r15
+ mov r13,rcx
+ add r14,r10
+ vmovdqa XMMWORD PTR[64+rsp],xmm10
+ vpalignr xmm8,xmm6,xmm5,8
+ ror r13,23
+ mov r10,r14
+ vpalignr xmm11,xmm2,xmm1,8
+ mov r12,rdx
+ ror r14,5
+DB 143,72,120,195,200,56
+ xor r13,rcx
+ xor r12,r8
+ vpsrlq xmm8,xmm8,7
+ ror r13,4
+ xor r14,r10
+ vpaddq xmm5,xmm5,xmm11
+ and r12,rcx
+ xor r13,rcx
+ add r9,QWORD PTR[80+rsp]
+ mov r15,r10
+DB 143,72,120,195,209,7
+ xor r12,r8
+ ror r14,6
+ vpxor xmm8,xmm8,xmm9
+ xor r15,r11
+ add r9,r12
+ ror r13,14
+ and rdi,r15
+DB 143,104,120,195,220,3
+ xor r14,r10
+ add r9,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,r11
+ ror r14,28
+ vpsrlq xmm10,xmm4,6
+ add rbx,r9
+ add r9,rdi
+ vpaddq xmm5,xmm5,xmm8
+ mov r13,rbx
+ add r14,r9
+DB 143,72,120,195,203,42
+ ror r13,23
+ mov r9,r14
+ vpxor xmm11,xmm11,xmm10
+ mov r12,rcx
+ ror r14,5
+ xor r13,rbx
+ xor r12,rdx
+ vpxor xmm11,xmm11,xmm9
+ ror r13,4
+ xor r14,r9
+ and r12,rbx
+ xor r13,rbx
+ vpaddq xmm5,xmm5,xmm11
+ add r8,QWORD PTR[88+rsp]
+ mov rdi,r9
+ xor r12,rdx
+ ror r14,6
+ vpaddq xmm10,xmm5,XMMWORD PTR[32+rbp]
+ xor rdi,r10
+ add r8,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,r9
+ add r8,r13
+ xor r15,r10
+ ror r14,28
+ add rax,r8
+ add r8,r15
+ mov r13,rax
+ add r14,r8
+ vmovdqa XMMWORD PTR[80+rsp],xmm10
+ vpalignr xmm8,xmm7,xmm6,8
+ ror r13,23
+ mov r8,r14
+ vpalignr xmm11,xmm3,xmm2,8
+ mov r12,rbx
+ ror r14,5
+DB 143,72,120,195,200,56
+ xor r13,rax
+ xor r12,rcx
+ vpsrlq xmm8,xmm8,7
+ ror r13,4
+ xor r14,r8
+ vpaddq xmm6,xmm6,xmm11
+ and r12,rax
+ xor r13,rax
+ add rdx,QWORD PTR[96+rsp]
+ mov r15,r8
+DB 143,72,120,195,209,7
+ xor r12,rcx
+ ror r14,6
+ vpxor xmm8,xmm8,xmm9
+ xor r15,r9
+ add rdx,r12
+ ror r13,14
+ and rdi,r15
+DB 143,104,120,195,221,3
+ xor r14,r8
+ add rdx,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,r9
+ ror r14,28
+ vpsrlq xmm10,xmm5,6
+ add r11,rdx
+ add rdx,rdi
+ vpaddq xmm6,xmm6,xmm8
+ mov r13,r11
+ add r14,rdx
+DB 143,72,120,195,203,42
+ ror r13,23
+ mov rdx,r14
+ vpxor xmm11,xmm11,xmm10
+ mov r12,rax
+ ror r14,5
+ xor r13,r11
+ xor r12,rbx
+ vpxor xmm11,xmm11,xmm9
+ ror r13,4
+ xor r14,rdx
+ and r12,r11
+ xor r13,r11
+ vpaddq xmm6,xmm6,xmm11
+ add rcx,QWORD PTR[104+rsp]
+ mov rdi,rdx
+ xor r12,rbx
+ ror r14,6
+ vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
+ xor rdi,r8
+ add rcx,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,rdx
+ add rcx,r13
+ xor r15,r8
+ ror r14,28
+ add r10,rcx
+ add rcx,r15
+ mov r13,r10
+ add r14,rcx
+ vmovdqa XMMWORD PTR[96+rsp],xmm10
+ vpalignr xmm8,xmm0,xmm7,8
+ ror r13,23
+ mov rcx,r14
+ vpalignr xmm11,xmm4,xmm3,8
+ mov r12,r11
+ ror r14,5
+DB 143,72,120,195,200,56
+ xor r13,r10
+ xor r12,rax
+ vpsrlq xmm8,xmm8,7
+ ror r13,4
+ xor r14,rcx
+ vpaddq xmm7,xmm7,xmm11
+ and r12,r10
+ xor r13,r10
+ add rbx,QWORD PTR[112+rsp]
+ mov r15,rcx
+DB 143,72,120,195,209,7
+ xor r12,rax
+ ror r14,6
+ vpxor xmm8,xmm8,xmm9
+ xor r15,rdx
+ add rbx,r12
+ ror r13,14
+ and rdi,r15
+DB 143,104,120,195,222,3
+ xor r14,rcx
+ add rbx,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,rdx
+ ror r14,28
+ vpsrlq xmm10,xmm6,6
+ add r9,rbx
+ add rbx,rdi
+ vpaddq xmm7,xmm7,xmm8
+ mov r13,r9
+ add r14,rbx
+DB 143,72,120,195,203,42
+ ror r13,23
+ mov rbx,r14
+ vpxor xmm11,xmm11,xmm10
+ mov r12,r10
+ ror r14,5
+ xor r13,r9
+ xor r12,r11
+ vpxor xmm11,xmm11,xmm9
+ ror r13,4
+ xor r14,rbx
+ and r12,r9
+ xor r13,r9
+ vpaddq xmm7,xmm7,xmm11
+ add rax,QWORD PTR[120+rsp]
+ mov rdi,rbx
+ xor r12,r11
+ ror r14,6
+ vpaddq xmm10,xmm7,XMMWORD PTR[96+rbp]
+ xor rdi,rcx
+ add rax,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,rbx
+ add rax,r13
+ xor r15,rcx
+ ror r14,28
+ add r8,rax
+ add rax,r15
+ mov r13,r8
+ add r14,rax
+ vmovdqa XMMWORD PTR[112+rsp],xmm10
+ cmp BYTE PTR[135+rbp],0
+ jne $L$xop_00_47
+ ror r13,23
+ mov rax,r14
+ mov r12,r9
+ ror r14,5
+ xor r13,r8
+ xor r12,r10
+ ror r13,4
+ xor r14,rax
+ and r12,r8
+ xor r13,r8
+ add r11,QWORD PTR[rsp]
+ mov r15,rax
+ xor r12,r10
+ ror r14,6
+ xor r15,rbx
+ add r11,r12
+ ror r13,14
+ and rdi,r15
+ xor r14,rax
+ add r11,r13
+ xor rdi,rbx
+ ror r14,28
+ add rdx,r11
+ add r11,rdi
+ mov r13,rdx
+ add r14,r11
+ ror r13,23
+ mov r11,r14
+ mov r12,r8
+ ror r14,5
+ xor r13,rdx
+ xor r12,r9
+ ror r13,4
+ xor r14,r11
+ and r12,rdx
+ xor r13,rdx
+ add r10,QWORD PTR[8+rsp]
+ mov rdi,r11
+ xor r12,r9
+ ror r14,6
+ xor rdi,rax
+ add r10,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,r11
+ add r10,r13
+ xor r15,rax
+ ror r14,28
+ add rcx,r10
+ add r10,r15
+ mov r13,rcx
+ add r14,r10
+ ror r13,23
+ mov r10,r14
+ mov r12,rdx
+ ror r14,5
+ xor r13,rcx
+ xor r12,r8
+ ror r13,4
+ xor r14,r10
+ and r12,rcx
+ xor r13,rcx
+ add r9,QWORD PTR[16+rsp]
+ mov r15,r10
+ xor r12,r8
+ ror r14,6
+ xor r15,r11
+ add r9,r12
+ ror r13,14
+ and rdi,r15
+ xor r14,r10
+ add r9,r13
+ xor rdi,r11
+ ror r14,28
+ add rbx,r9
+ add r9,rdi
+ mov r13,rbx
+ add r14,r9
+ ror r13,23
+ mov r9,r14
+ mov r12,rcx
+ ror r14,5
+ xor r13,rbx
+ xor r12,rdx
+ ror r13,4
+ xor r14,r9
+ and r12,rbx
+ xor r13,rbx
+ add r8,QWORD PTR[24+rsp]
+ mov rdi,r9
+ xor r12,rdx
+ ror r14,6
+ xor rdi,r10
+ add r8,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,r9
+ add r8,r13
+ xor r15,r10
+ ror r14,28
+ add rax,r8
+ add r8,r15
+ mov r13,rax
+ add r14,r8
+ ror r13,23
+ mov r8,r14
+ mov r12,rbx
+ ror r14,5
+ xor r13,rax
+ xor r12,rcx
+ ror r13,4
+ xor r14,r8
+ and r12,rax
+ xor r13,rax
+ add rdx,QWORD PTR[32+rsp]
+ mov r15,r8
+ xor r12,rcx
+ ror r14,6
+ xor r15,r9
+ add rdx,r12
+ ror r13,14
+ and rdi,r15
+ xor r14,r8
+ add rdx,r13
+ xor rdi,r9
+ ror r14,28
+ add r11,rdx
+ add rdx,rdi
+ mov r13,r11
+ add r14,rdx
+ ror r13,23
+ mov rdx,r14
+ mov r12,rax
+ ror r14,5
+ xor r13,r11
+ xor r12,rbx
+ ror r13,4
+ xor r14,rdx
+ and r12,r11
+ xor r13,r11
+ add rcx,QWORD PTR[40+rsp]
+ mov rdi,rdx
+ xor r12,rbx
+ ror r14,6
+ xor rdi,r8
+ add rcx,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,rdx
+ add rcx,r13
+ xor r15,r8
+ ror r14,28
+ add r10,rcx
+ add rcx,r15
+ mov r13,r10
+ add r14,rcx
+ ror r13,23
+ mov rcx,r14
+ mov r12,r11
+ ror r14,5
+ xor r13,r10
+ xor r12,rax
+ ror r13,4
+ xor r14,rcx
+ and r12,r10
+ xor r13,r10
+ add rbx,QWORD PTR[48+rsp]
+ mov r15,rcx
+ xor r12,rax
+ ror r14,6
+ xor r15,rdx
+ add rbx,r12
+ ror r13,14
+ and rdi,r15
+ xor r14,rcx
+ add rbx,r13
+ xor rdi,rdx
+ ror r14,28
+ add r9,rbx
+ add rbx,rdi
+ mov r13,r9
+ add r14,rbx
+ ror r13,23
+ mov rbx,r14
+ mov r12,r10
+ ror r14,5
+ xor r13,r9
+ xor r12,r11
+ ror r13,4
+ xor r14,rbx
+ and r12,r9
+ xor r13,r9
+ add rax,QWORD PTR[56+rsp]
+ mov rdi,rbx
+ xor r12,r11
+ ror r14,6
+ xor rdi,rcx
+ add rax,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,rbx
+ add rax,r13
+ xor r15,rcx
+ ror r14,28
+ add r8,rax
+ add rax,r15
+ mov r13,r8
+ add r14,rax
+ ror r13,23
+ mov rax,r14
+ mov r12,r9
+ ror r14,5
+ xor r13,r8
+ xor r12,r10
+ ror r13,4
+ xor r14,rax
+ and r12,r8
+ xor r13,r8
+ add r11,QWORD PTR[64+rsp]
+ mov r15,rax
+ xor r12,r10
+ ror r14,6
+ xor r15,rbx
+ add r11,r12
+ ror r13,14
+ and rdi,r15
+ xor r14,rax
+ add r11,r13
+ xor rdi,rbx
+ ror r14,28
+ add rdx,r11
+ add r11,rdi
+ mov r13,rdx
+ add r14,r11
+ ror r13,23
+ mov r11,r14
+ mov r12,r8
+ ror r14,5
+ xor r13,rdx
+ xor r12,r9
+ ror r13,4
+ xor r14,r11
+ and r12,rdx
+ xor r13,rdx
+ add r10,QWORD PTR[72+rsp]
+ mov rdi,r11
+ xor r12,r9
+ ror r14,6
+ xor rdi,rax
+ add r10,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,r11
+ add r10,r13
+ xor r15,rax
+ ror r14,28
+ add rcx,r10
+ add r10,r15
+ mov r13,rcx
+ add r14,r10
+ ror r13,23
+ mov r10,r14
+ mov r12,rdx
+ ror r14,5
+ xor r13,rcx
+ xor r12,r8
+ ror r13,4
+ xor r14,r10
+ and r12,rcx
+ xor r13,rcx
+ add r9,QWORD PTR[80+rsp]
+ mov r15,r10
+ xor r12,r8
+ ror r14,6
+ xor r15,r11
+ add r9,r12
+ ror r13,14
+ and rdi,r15
+ xor r14,r10
+ add r9,r13
+ xor rdi,r11
+ ror r14,28
+ add rbx,r9
+ add r9,rdi
+ mov r13,rbx
+ add r14,r9
+ ror r13,23
+ mov r9,r14
+ mov r12,rcx
+ ror r14,5
+ xor r13,rbx
+ xor r12,rdx
+ ror r13,4
+ xor r14,r9
+ and r12,rbx
+ xor r13,rbx
+ add r8,QWORD PTR[88+rsp]
+ mov rdi,r9
+ xor r12,rdx
+ ror r14,6
+ xor rdi,r10
+ add r8,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,r9
+ add r8,r13
+ xor r15,r10
+ ror r14,28
+ add rax,r8
+ add r8,r15
+ mov r13,rax
+ add r14,r8
+ ror r13,23
+ mov r8,r14
+ mov r12,rbx
+ ror r14,5
+ xor r13,rax
+ xor r12,rcx
+ ror r13,4
+ xor r14,r8
+ and r12,rax
+ xor r13,rax
+ add rdx,QWORD PTR[96+rsp]
+ mov r15,r8
+ xor r12,rcx
+ ror r14,6
+ xor r15,r9
+ add rdx,r12
+ ror r13,14
+ and rdi,r15
+ xor r14,r8
+ add rdx,r13
+ xor rdi,r9
+ ror r14,28
+ add r11,rdx
+ add rdx,rdi
+ mov r13,r11
+ add r14,rdx
+ ror r13,23
+ mov rdx,r14
+ mov r12,rax
+ ror r14,5
+ xor r13,r11
+ xor r12,rbx
+ ror r13,4
+ xor r14,rdx
+ and r12,r11
+ xor r13,r11
+ add rcx,QWORD PTR[104+rsp]
+ mov rdi,rdx
+ xor r12,rbx
+ ror r14,6
+ xor rdi,r8
+ add rcx,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,rdx
+ add rcx,r13
+ xor r15,r8
+ ror r14,28
+ add r10,rcx
+ add rcx,r15
+ mov r13,r10
+ add r14,rcx
+ ror r13,23
+ mov rcx,r14
+ mov r12,r11
+ ror r14,5
+ xor r13,r10
+ xor r12,rax
+ ror r13,4
+ xor r14,rcx
+ and r12,r10
+ xor r13,r10
+ add rbx,QWORD PTR[112+rsp]
+ mov r15,rcx
+ xor r12,rax
+ ror r14,6
+ xor r15,rdx
+ add rbx,r12
+ ror r13,14
+ and rdi,r15
+ xor r14,rcx
+ add rbx,r13
+ xor rdi,rdx
+ ror r14,28
+ add r9,rbx
+ add rbx,rdi
+ mov r13,r9
+ add r14,rbx
+ ror r13,23
+ mov rbx,r14
+ mov r12,r10
+ ror r14,5
+ xor r13,r9
+ xor r12,r11
+ ror r13,4
+ xor r14,rbx
+ and r12,r9
+ xor r13,r9
+ add rax,QWORD PTR[120+rsp]
+ mov rdi,rbx
+ xor r12,r11
+ ror r14,6
+ xor rdi,rcx
+ add rax,r12
+ ror r13,14
+ and r15,rdi
+ xor r14,rbx
+ add rax,r13
+ xor r15,rcx
+ ror r14,28
+ add r8,rax
+ add rax,r15
+ mov r13,r8
+ add r14,rax
+ mov rdi,QWORD PTR[((128+0))+rsp]
+ mov rax,r14
+
+ add rax,QWORD PTR[rdi]
+ lea rsi,QWORD PTR[128+rsi]
+ add rbx,QWORD PTR[8+rdi]
+ add rcx,QWORD PTR[16+rdi]
+ add rdx,QWORD PTR[24+rdi]
+ add r8,QWORD PTR[32+rdi]
+ add r9,QWORD PTR[40+rdi]
+ add r10,QWORD PTR[48+rdi]
+ add r11,QWORD PTR[56+rdi]
+
+ cmp rsi,QWORD PTR[((128+16))+rsp]
+
+ mov QWORD PTR[rdi],rax
+ mov QWORD PTR[8+rdi],rbx
+ mov QWORD PTR[16+rdi],rcx
+ mov QWORD PTR[24+rdi],rdx
+ mov QWORD PTR[32+rdi],r8
+ mov QWORD PTR[40+rdi],r9
+ mov QWORD PTR[48+rdi],r10
+ mov QWORD PTR[56+rdi],r11
+ jb $L$loop_xop
+
+ mov rsi,QWORD PTR[152+rsp]
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((128+32))+rsp]
+ movaps xmm7,XMMWORD PTR[((128+48))+rsp]
+ movaps xmm8,XMMWORD PTR[((128+64))+rsp]
+ movaps xmm9,XMMWORD PTR[((128+80))+rsp]
+ movaps xmm10,XMMWORD PTR[((128+96))+rsp]
+ movaps xmm11,XMMWORD PTR[((128+112))+rsp]
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue_xop::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha512_block_data_order_xop::
+sha512_block_data_order_xop ENDP
+
+ALIGN 64
+sha512_block_data_order_avx PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha512_block_data_order_avx::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$avx_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ shl rdx,4
+ sub rsp,256
+ lea rdx,QWORD PTR[rdx*8+rsi]
+ and rsp,-64
+ mov QWORD PTR[((128+0))+rsp],rdi
+ mov QWORD PTR[((128+8))+rsp],rsi
+ mov QWORD PTR[((128+16))+rsp],rdx
+ mov QWORD PTR[152+rsp],rax
+
+ movaps XMMWORD PTR[(128+32)+rsp],xmm6
+ movaps XMMWORD PTR[(128+48)+rsp],xmm7
+ movaps XMMWORD PTR[(128+64)+rsp],xmm8
+ movaps XMMWORD PTR[(128+80)+rsp],xmm9
+ movaps XMMWORD PTR[(128+96)+rsp],xmm10
+ movaps XMMWORD PTR[(128+112)+rsp],xmm11
+$L$prologue_avx::
+
+ vzeroupper
+ mov rax,QWORD PTR[rdi]
+ mov rbx,QWORD PTR[8+rdi]
+ mov rcx,QWORD PTR[16+rdi]
+ mov rdx,QWORD PTR[24+rdi]
+ mov r8,QWORD PTR[32+rdi]
+ mov r9,QWORD PTR[40+rdi]
+ mov r10,QWORD PTR[48+rdi]
+ mov r11,QWORD PTR[56+rdi]
+ jmp $L$loop_avx
+ALIGN 16
+$L$loop_avx::
+ vmovdqa xmm11,XMMWORD PTR[((K512+1280))]
+ vmovdqu xmm0,XMMWORD PTR[rsi]
+ lea rbp,QWORD PTR[((K512+128))]
+ vmovdqu xmm1,XMMWORD PTR[16+rsi]
+ vmovdqu xmm2,XMMWORD PTR[32+rsi]
+ vpshufb xmm0,xmm0,xmm11
+ vmovdqu xmm3,XMMWORD PTR[48+rsi]
+ vpshufb xmm1,xmm1,xmm11
+ vmovdqu xmm4,XMMWORD PTR[64+rsi]
+ vpshufb xmm2,xmm2,xmm11
+ vmovdqu xmm5,XMMWORD PTR[80+rsi]
+ vpshufb xmm3,xmm3,xmm11
+ vmovdqu xmm6,XMMWORD PTR[96+rsi]
+ vpshufb xmm4,xmm4,xmm11
+ vmovdqu xmm7,XMMWORD PTR[112+rsi]
+ vpshufb xmm5,xmm5,xmm11
+ vpaddq xmm8,xmm0,XMMWORD PTR[((-128))+rbp]
+ vpshufb xmm6,xmm6,xmm11
+ vpaddq xmm9,xmm1,XMMWORD PTR[((-96))+rbp]
+ vpshufb xmm7,xmm7,xmm11
+ vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
+ vpaddq xmm11,xmm3,XMMWORD PTR[((-32))+rbp]
+ vmovdqa XMMWORD PTR[rsp],xmm8
+ vpaddq xmm8,xmm4,XMMWORD PTR[rbp]
+ vmovdqa XMMWORD PTR[16+rsp],xmm9
+ vpaddq xmm9,xmm5,XMMWORD PTR[32+rbp]
+ vmovdqa XMMWORD PTR[32+rsp],xmm10
+ vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
+ vmovdqa XMMWORD PTR[48+rsp],xmm11
+ vpaddq xmm11,xmm7,XMMWORD PTR[96+rbp]
+ vmovdqa XMMWORD PTR[64+rsp],xmm8
+ mov r14,rax
+ vmovdqa XMMWORD PTR[80+rsp],xmm9
+ mov rdi,rbx
+ vmovdqa XMMWORD PTR[96+rsp],xmm10
+ xor rdi,rcx
+ vmovdqa XMMWORD PTR[112+rsp],xmm11
+ mov r13,r8
+ jmp $L$avx_00_47
+
+ALIGN 16
+$L$avx_00_47::
+ add rbp,256
+ vpalignr xmm8,xmm1,xmm0,8
+ shrd r13,r13,23
+ mov rax,r14
+ vpalignr xmm11,xmm5,xmm4,8
+ mov r12,r9
+ shrd r14,r14,5
+ vpsrlq xmm10,xmm8,1
+ xor r13,r8
+ xor r12,r10
+ vpaddq xmm0,xmm0,xmm11
+ shrd r13,r13,4
+ xor r14,rax
+ vpsrlq xmm11,xmm8,7
+ and r12,r8
+ xor r13,r8
+ vpsllq xmm9,xmm8,56
+ add r11,QWORD PTR[rsp]
+ mov r15,rax
+ vpxor xmm8,xmm11,xmm10
+ xor r12,r10
+ shrd r14,r14,6
+ vpsrlq xmm10,xmm10,7
+ xor r15,rbx
+ add r11,r12
+ vpxor xmm8,xmm8,xmm9
+ shrd r13,r13,14
+ and rdi,r15
+ vpsllq xmm9,xmm9,7
+ xor r14,rax
+ add r11,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,rbx
+ shrd r14,r14,28
+ vpsrlq xmm11,xmm7,6
+ add rdx,r11
+ add r11,rdi
+ vpxor xmm8,xmm8,xmm9
+ mov r13,rdx
+ add r14,r11
+ vpsllq xmm10,xmm7,3
+ shrd r13,r13,23
+ mov r11,r14
+ vpaddq xmm0,xmm0,xmm8
+ mov r12,r8
+ shrd r14,r14,5
+ vpsrlq xmm9,xmm7,19
+ xor r13,rdx
+ xor r12,r9
+ vpxor xmm11,xmm11,xmm10
+ shrd r13,r13,4
+ xor r14,r11
+ vpsllq xmm10,xmm10,42
+ and r12,rdx
+ xor r13,rdx
+ vpxor xmm11,xmm11,xmm9
+ add r10,QWORD PTR[8+rsp]
+ mov rdi,r11
+ vpsrlq xmm9,xmm9,42
+ xor r12,r9
+ shrd r14,r14,6
+ vpxor xmm11,xmm11,xmm10
+ xor rdi,rax
+ add r10,r12
+ vpxor xmm11,xmm11,xmm9
+ shrd r13,r13,14
+ and r15,rdi
+ vpaddq xmm0,xmm0,xmm11
+ xor r14,r11
+ add r10,r13
+ vpaddq xmm10,xmm0,XMMWORD PTR[((-128))+rbp]
+ xor r15,rax
+ shrd r14,r14,28
+ add rcx,r10
+ add r10,r15
+ mov r13,rcx
+ add r14,r10
+ vmovdqa XMMWORD PTR[rsp],xmm10
+ vpalignr xmm8,xmm2,xmm1,8
+ shrd r13,r13,23
+ mov r10,r14
+ vpalignr xmm11,xmm6,xmm5,8
+ mov r12,rdx
+ shrd r14,r14,5
+ vpsrlq xmm10,xmm8,1
+ xor r13,rcx
+ xor r12,r8
+ vpaddq xmm1,xmm1,xmm11
+ shrd r13,r13,4
+ xor r14,r10
+ vpsrlq xmm11,xmm8,7
+ and r12,rcx
+ xor r13,rcx
+ vpsllq xmm9,xmm8,56
+ add r9,QWORD PTR[16+rsp]
+ mov r15,r10
+ vpxor xmm8,xmm11,xmm10
+ xor r12,r8
+ shrd r14,r14,6
+ vpsrlq xmm10,xmm10,7
+ xor r15,r11
+ add r9,r12
+ vpxor xmm8,xmm8,xmm9
+ shrd r13,r13,14
+ and rdi,r15
+ vpsllq xmm9,xmm9,7
+ xor r14,r10
+ add r9,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,r11
+ shrd r14,r14,28
+ vpsrlq xmm11,xmm0,6
+ add rbx,r9
+ add r9,rdi
+ vpxor xmm8,xmm8,xmm9
+ mov r13,rbx
+ add r14,r9
+ vpsllq xmm10,xmm0,3
+ shrd r13,r13,23
+ mov r9,r14
+ vpaddq xmm1,xmm1,xmm8
+ mov r12,rcx
+ shrd r14,r14,5
+ vpsrlq xmm9,xmm0,19
+ xor r13,rbx
+ xor r12,rdx
+ vpxor xmm11,xmm11,xmm10
+ shrd r13,r13,4
+ xor r14,r9
+ vpsllq xmm10,xmm10,42
+ and r12,rbx
+ xor r13,rbx
+ vpxor xmm11,xmm11,xmm9
+ add r8,QWORD PTR[24+rsp]
+ mov rdi,r9
+ vpsrlq xmm9,xmm9,42
+ xor r12,rdx
+ shrd r14,r14,6
+ vpxor xmm11,xmm11,xmm10
+ xor rdi,r10
+ add r8,r12
+ vpxor xmm11,xmm11,xmm9
+ shrd r13,r13,14
+ and r15,rdi
+ vpaddq xmm1,xmm1,xmm11
+ xor r14,r9
+ add r8,r13
+ vpaddq xmm10,xmm1,XMMWORD PTR[((-96))+rbp]
+ xor r15,r10
+ shrd r14,r14,28
+ add rax,r8
+ add r8,r15
+ mov r13,rax
+ add r14,r8
+ vmovdqa XMMWORD PTR[16+rsp],xmm10
+ vpalignr xmm8,xmm3,xmm2,8
+ shrd r13,r13,23
+ mov r8,r14
+ vpalignr xmm11,xmm7,xmm6,8
+ mov r12,rbx
+ shrd r14,r14,5
+ vpsrlq xmm10,xmm8,1
+ xor r13,rax
+ xor r12,rcx
+ vpaddq xmm2,xmm2,xmm11
+ shrd r13,r13,4
+ xor r14,r8
+ vpsrlq xmm11,xmm8,7
+ and r12,rax
+ xor r13,rax
+ vpsllq xmm9,xmm8,56
+ add rdx,QWORD PTR[32+rsp]
+ mov r15,r8
+ vpxor xmm8,xmm11,xmm10
+ xor r12,rcx
+ shrd r14,r14,6
+ vpsrlq xmm10,xmm10,7
+ xor r15,r9
+ add rdx,r12
+ vpxor xmm8,xmm8,xmm9
+ shrd r13,r13,14
+ and rdi,r15
+ vpsllq xmm9,xmm9,7
+ xor r14,r8
+ add rdx,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,r9
+ shrd r14,r14,28
+ vpsrlq xmm11,xmm1,6
+ add r11,rdx
+ add rdx,rdi
+ vpxor xmm8,xmm8,xmm9
+ mov r13,r11
+ add r14,rdx
+ vpsllq xmm10,xmm1,3
+ shrd r13,r13,23
+ mov rdx,r14
+ vpaddq xmm2,xmm2,xmm8
+ mov r12,rax
+ shrd r14,r14,5
+ vpsrlq xmm9,xmm1,19
+ xor r13,r11
+ xor r12,rbx
+ vpxor xmm11,xmm11,xmm10
+ shrd r13,r13,4
+ xor r14,rdx
+ vpsllq xmm10,xmm10,42
+ and r12,r11
+ xor r13,r11
+ vpxor xmm11,xmm11,xmm9
+ add rcx,QWORD PTR[40+rsp]
+ mov rdi,rdx
+ vpsrlq xmm9,xmm9,42
+ xor r12,rbx
+ shrd r14,r14,6
+ vpxor xmm11,xmm11,xmm10
+ xor rdi,r8
+ add rcx,r12
+ vpxor xmm11,xmm11,xmm9
+ shrd r13,r13,14
+ and r15,rdi
+ vpaddq xmm2,xmm2,xmm11
+ xor r14,rdx
+ add rcx,r13
+ vpaddq xmm10,xmm2,XMMWORD PTR[((-64))+rbp]
+ xor r15,r8
+ shrd r14,r14,28
+ add r10,rcx
+ add rcx,r15
+ mov r13,r10
+ add r14,rcx
+ vmovdqa XMMWORD PTR[32+rsp],xmm10
+ vpalignr xmm8,xmm4,xmm3,8
+ shrd r13,r13,23
+ mov rcx,r14
+ vpalignr xmm11,xmm0,xmm7,8
+ mov r12,r11
+ shrd r14,r14,5
+ vpsrlq xmm10,xmm8,1
+ xor r13,r10
+ xor r12,rax
+ vpaddq xmm3,xmm3,xmm11
+ shrd r13,r13,4
+ xor r14,rcx
+ vpsrlq xmm11,xmm8,7
+ and r12,r10
+ xor r13,r10
+ vpsllq xmm9,xmm8,56
+ add rbx,QWORD PTR[48+rsp]
+ mov r15,rcx
+ vpxor xmm8,xmm11,xmm10
+ xor r12,rax
+ shrd r14,r14,6
+ vpsrlq xmm10,xmm10,7
+ xor r15,rdx
+ add rbx,r12
+ vpxor xmm8,xmm8,xmm9
+ shrd r13,r13,14
+ and rdi,r15
+ vpsllq xmm9,xmm9,7
+ xor r14,rcx
+ add rbx,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,rdx
+ shrd r14,r14,28
+ vpsrlq xmm11,xmm2,6
+ add r9,rbx
+ add rbx,rdi
+ vpxor xmm8,xmm8,xmm9
+ mov r13,r9
+ add r14,rbx
+ vpsllq xmm10,xmm2,3
+ shrd r13,r13,23
+ mov rbx,r14
+ vpaddq xmm3,xmm3,xmm8
+ mov r12,r10
+ shrd r14,r14,5
+ vpsrlq xmm9,xmm2,19
+ xor r13,r9
+ xor r12,r11
+ vpxor xmm11,xmm11,xmm10
+ shrd r13,r13,4
+ xor r14,rbx
+ vpsllq xmm10,xmm10,42
+ and r12,r9
+ xor r13,r9
+ vpxor xmm11,xmm11,xmm9
+ add rax,QWORD PTR[56+rsp]
+ mov rdi,rbx
+ vpsrlq xmm9,xmm9,42
+ xor r12,r11
+ shrd r14,r14,6
+ vpxor xmm11,xmm11,xmm10
+ xor rdi,rcx
+ add rax,r12
+ vpxor xmm11,xmm11,xmm9
+ shrd r13,r13,14
+ and r15,rdi
+ vpaddq xmm3,xmm3,xmm11
+ xor r14,rbx
+ add rax,r13
+ vpaddq xmm10,xmm3,XMMWORD PTR[((-32))+rbp]
+ xor r15,rcx
+ shrd r14,r14,28
+ add r8,rax
+ add rax,r15
+ mov r13,r8
+ add r14,rax
+ vmovdqa XMMWORD PTR[48+rsp],xmm10
+ vpalignr xmm8,xmm5,xmm4,8
+ shrd r13,r13,23
+ mov rax,r14
+ vpalignr xmm11,xmm1,xmm0,8
+ mov r12,r9
+ shrd r14,r14,5
+ vpsrlq xmm10,xmm8,1
+ xor r13,r8
+ xor r12,r10
+ vpaddq xmm4,xmm4,xmm11
+ shrd r13,r13,4
+ xor r14,rax
+ vpsrlq xmm11,xmm8,7
+ and r12,r8
+ xor r13,r8
+ vpsllq xmm9,xmm8,56
+ add r11,QWORD PTR[64+rsp]
+ mov r15,rax
+ vpxor xmm8,xmm11,xmm10
+ xor r12,r10
+ shrd r14,r14,6
+ vpsrlq xmm10,xmm10,7
+ xor r15,rbx
+ add r11,r12
+ vpxor xmm8,xmm8,xmm9
+ shrd r13,r13,14
+ and rdi,r15
+ vpsllq xmm9,xmm9,7
+ xor r14,rax
+ add r11,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,rbx
+ shrd r14,r14,28
+ vpsrlq xmm11,xmm3,6
+ add rdx,r11
+ add r11,rdi
+ vpxor xmm8,xmm8,xmm9
+ mov r13,rdx
+ add r14,r11
+ vpsllq xmm10,xmm3,3
+ shrd r13,r13,23
+ mov r11,r14
+ vpaddq xmm4,xmm4,xmm8
+ mov r12,r8
+ shrd r14,r14,5
+ vpsrlq xmm9,xmm3,19
+ xor r13,rdx
+ xor r12,r9
+ vpxor xmm11,xmm11,xmm10
+ shrd r13,r13,4
+ xor r14,r11
+ vpsllq xmm10,xmm10,42
+ and r12,rdx
+ xor r13,rdx
+ vpxor xmm11,xmm11,xmm9
+ add r10,QWORD PTR[72+rsp]
+ mov rdi,r11
+ vpsrlq xmm9,xmm9,42
+ xor r12,r9
+ shrd r14,r14,6
+ vpxor xmm11,xmm11,xmm10
+ xor rdi,rax
+ add r10,r12
+ vpxor xmm11,xmm11,xmm9
+ shrd r13,r13,14
+ and r15,rdi
+ vpaddq xmm4,xmm4,xmm11
+ xor r14,r11
+ add r10,r13
+ vpaddq xmm10,xmm4,XMMWORD PTR[rbp]
+ xor r15,rax
+ shrd r14,r14,28
+ add rcx,r10
+ add r10,r15
+ mov r13,rcx
+ add r14,r10
+ vmovdqa XMMWORD PTR[64+rsp],xmm10
+ vpalignr xmm8,xmm6,xmm5,8
+ shrd r13,r13,23
+ mov r10,r14
+ vpalignr xmm11,xmm2,xmm1,8
+ mov r12,rdx
+ shrd r14,r14,5
+ vpsrlq xmm10,xmm8,1
+ xor r13,rcx
+ xor r12,r8
+ vpaddq xmm5,xmm5,xmm11
+ shrd r13,r13,4
+ xor r14,r10
+ vpsrlq xmm11,xmm8,7
+ and r12,rcx
+ xor r13,rcx
+ vpsllq xmm9,xmm8,56
+ add r9,QWORD PTR[80+rsp]
+ mov r15,r10
+ vpxor xmm8,xmm11,xmm10
+ xor r12,r8
+ shrd r14,r14,6
+ vpsrlq xmm10,xmm10,7
+ xor r15,r11
+ add r9,r12
+ vpxor xmm8,xmm8,xmm9
+ shrd r13,r13,14
+ and rdi,r15
+ vpsllq xmm9,xmm9,7
+ xor r14,r10
+ add r9,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,r11
+ shrd r14,r14,28
+ vpsrlq xmm11,xmm4,6
+ add rbx,r9
+ add r9,rdi
+ vpxor xmm8,xmm8,xmm9
+ mov r13,rbx
+ add r14,r9
+ vpsllq xmm10,xmm4,3
+ shrd r13,r13,23
+ mov r9,r14
+ vpaddq xmm5,xmm5,xmm8
+ mov r12,rcx
+ shrd r14,r14,5
+ vpsrlq xmm9,xmm4,19
+ xor r13,rbx
+ xor r12,rdx
+ vpxor xmm11,xmm11,xmm10
+ shrd r13,r13,4
+ xor r14,r9
+ vpsllq xmm10,xmm10,42
+ and r12,rbx
+ xor r13,rbx
+ vpxor xmm11,xmm11,xmm9
+ add r8,QWORD PTR[88+rsp]
+ mov rdi,r9
+ vpsrlq xmm9,xmm9,42
+ xor r12,rdx
+ shrd r14,r14,6
+ vpxor xmm11,xmm11,xmm10
+ xor rdi,r10
+ add r8,r12
+ vpxor xmm11,xmm11,xmm9
+ shrd r13,r13,14
+ and r15,rdi
+ vpaddq xmm5,xmm5,xmm11
+ xor r14,r9
+ add r8,r13
+ vpaddq xmm10,xmm5,XMMWORD PTR[32+rbp]
+ xor r15,r10
+ shrd r14,r14,28
+ add rax,r8
+ add r8,r15
+ mov r13,rax
+ add r14,r8
+ vmovdqa XMMWORD PTR[80+rsp],xmm10
+ vpalignr xmm8,xmm7,xmm6,8
+ shrd r13,r13,23
+ mov r8,r14
+ vpalignr xmm11,xmm3,xmm2,8
+ mov r12,rbx
+ shrd r14,r14,5
+ vpsrlq xmm10,xmm8,1
+ xor r13,rax
+ xor r12,rcx
+ vpaddq xmm6,xmm6,xmm11
+ shrd r13,r13,4
+ xor r14,r8
+ vpsrlq xmm11,xmm8,7
+ and r12,rax
+ xor r13,rax
+ vpsllq xmm9,xmm8,56
+ add rdx,QWORD PTR[96+rsp]
+ mov r15,r8
+ vpxor xmm8,xmm11,xmm10
+ xor r12,rcx
+ shrd r14,r14,6
+ vpsrlq xmm10,xmm10,7
+ xor r15,r9
+ add rdx,r12
+ vpxor xmm8,xmm8,xmm9
+ shrd r13,r13,14
+ and rdi,r15
+ vpsllq xmm9,xmm9,7
+ xor r14,r8
+ add rdx,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,r9
+ shrd r14,r14,28
+ vpsrlq xmm11,xmm5,6
+ add r11,rdx
+ add rdx,rdi
+ vpxor xmm8,xmm8,xmm9
+ mov r13,r11
+ add r14,rdx
+ vpsllq xmm10,xmm5,3
+ shrd r13,r13,23
+ mov rdx,r14
+ vpaddq xmm6,xmm6,xmm8
+ mov r12,rax
+ shrd r14,r14,5
+ vpsrlq xmm9,xmm5,19
+ xor r13,r11
+ xor r12,rbx
+ vpxor xmm11,xmm11,xmm10
+ shrd r13,r13,4
+ xor r14,rdx
+ vpsllq xmm10,xmm10,42
+ and r12,r11
+ xor r13,r11
+ vpxor xmm11,xmm11,xmm9
+ add rcx,QWORD PTR[104+rsp]
+ mov rdi,rdx
+ vpsrlq xmm9,xmm9,42
+ xor r12,rbx
+ shrd r14,r14,6
+ vpxor xmm11,xmm11,xmm10
+ xor rdi,r8
+ add rcx,r12
+ vpxor xmm11,xmm11,xmm9
+ shrd r13,r13,14
+ and r15,rdi
+ vpaddq xmm6,xmm6,xmm11
+ xor r14,rdx
+ add rcx,r13
+ vpaddq xmm10,xmm6,XMMWORD PTR[64+rbp]
+ xor r15,r8
+ shrd r14,r14,28
+ add r10,rcx
+ add rcx,r15
+ mov r13,r10
+ add r14,rcx
+ vmovdqa XMMWORD PTR[96+rsp],xmm10
+ vpalignr xmm8,xmm0,xmm7,8
+ shrd r13,r13,23
+ mov rcx,r14
+ vpalignr xmm11,xmm4,xmm3,8
+ mov r12,r11
+ shrd r14,r14,5
+ vpsrlq xmm10,xmm8,1
+ xor r13,r10
+ xor r12,rax
+ vpaddq xmm7,xmm7,xmm11
+ shrd r13,r13,4
+ xor r14,rcx
+ vpsrlq xmm11,xmm8,7
+ and r12,r10
+ xor r13,r10
+ vpsllq xmm9,xmm8,56
+ add rbx,QWORD PTR[112+rsp]
+ mov r15,rcx
+ vpxor xmm8,xmm11,xmm10
+ xor r12,rax
+ shrd r14,r14,6
+ vpsrlq xmm10,xmm10,7
+ xor r15,rdx
+ add rbx,r12
+ vpxor xmm8,xmm8,xmm9
+ shrd r13,r13,14
+ and rdi,r15
+ vpsllq xmm9,xmm9,7
+ xor r14,rcx
+ add rbx,r13
+ vpxor xmm8,xmm8,xmm10
+ xor rdi,rdx
+ shrd r14,r14,28
+ vpsrlq xmm11,xmm6,6
+ add r9,rbx
+ add rbx,rdi
+ vpxor xmm8,xmm8,xmm9
+ mov r13,r9
+ add r14,rbx
+ vpsllq xmm10,xmm6,3
+ shrd r13,r13,23
+ mov rbx,r14
+ vpaddq xmm7,xmm7,xmm8
+ mov r12,r10
+ shrd r14,r14,5
+ vpsrlq xmm9,xmm6,19
+ xor r13,r9
+ xor r12,r11
+ vpxor xmm11,xmm11,xmm10
+ shrd r13,r13,4
+ xor r14,rbx
+ vpsllq xmm10,xmm10,42
+ and r12,r9
+ xor r13,r9
+ vpxor xmm11,xmm11,xmm9
+ add rax,QWORD PTR[120+rsp]
+ mov rdi,rbx
+ vpsrlq xmm9,xmm9,42
+ xor r12,r11
+ shrd r14,r14,6
+ vpxor xmm11,xmm11,xmm10
+ xor rdi,rcx
+ add rax,r12
+ vpxor xmm11,xmm11,xmm9
+ shrd r13,r13,14
+ and r15,rdi
+ vpaddq xmm7,xmm7,xmm11
+ xor r14,rbx
+ add rax,r13
+ vpaddq xmm10,xmm7,XMMWORD PTR[96+rbp]
+ xor r15,rcx
+ shrd r14,r14,28
+ add r8,rax
+ add rax,r15
+ mov r13,r8
+ add r14,rax
+ vmovdqa XMMWORD PTR[112+rsp],xmm10
+ cmp BYTE PTR[135+rbp],0
+ jne $L$avx_00_47
+ shrd r13,r13,23
+ mov rax,r14
+ mov r12,r9
+ shrd r14,r14,5
+ xor r13,r8
+ xor r12,r10
+ shrd r13,r13,4
+ xor r14,rax
+ and r12,r8
+ xor r13,r8
+ add r11,QWORD PTR[rsp]
+ mov r15,rax
+ xor r12,r10
+ shrd r14,r14,6
+ xor r15,rbx
+ add r11,r12
+ shrd r13,r13,14
+ and rdi,r15
+ xor r14,rax
+ add r11,r13
+ xor rdi,rbx
+ shrd r14,r14,28
+ add rdx,r11
+ add r11,rdi
+ mov r13,rdx
+ add r14,r11
+ shrd r13,r13,23
+ mov r11,r14
+ mov r12,r8
+ shrd r14,r14,5
+ xor r13,rdx
+ xor r12,r9
+ shrd r13,r13,4
+ xor r14,r11
+ and r12,rdx
+ xor r13,rdx
+ add r10,QWORD PTR[8+rsp]
+ mov rdi,r11
+ xor r12,r9
+ shrd r14,r14,6
+ xor rdi,rax
+ add r10,r12
+ shrd r13,r13,14
+ and r15,rdi
+ xor r14,r11
+ add r10,r13
+ xor r15,rax
+ shrd r14,r14,28
+ add rcx,r10
+ add r10,r15
+ mov r13,rcx
+ add r14,r10
+ shrd r13,r13,23
+ mov r10,r14
+ mov r12,rdx
+ shrd r14,r14,5
+ xor r13,rcx
+ xor r12,r8
+ shrd r13,r13,4
+ xor r14,r10
+ and r12,rcx
+ xor r13,rcx
+ add r9,QWORD PTR[16+rsp]
+ mov r15,r10
+ xor r12,r8
+ shrd r14,r14,6
+ xor r15,r11
+ add r9,r12
+ shrd r13,r13,14
+ and rdi,r15
+ xor r14,r10
+ add r9,r13
+ xor rdi,r11
+ shrd r14,r14,28
+ add rbx,r9
+ add r9,rdi
+ mov r13,rbx
+ add r14,r9
+ shrd r13,r13,23
+ mov r9,r14
+ mov r12,rcx
+ shrd r14,r14,5
+ xor r13,rbx
+ xor r12,rdx
+ shrd r13,r13,4
+ xor r14,r9
+ and r12,rbx
+ xor r13,rbx
+ add r8,QWORD PTR[24+rsp]
+ mov rdi,r9
+ xor r12,rdx
+ shrd r14,r14,6
+ xor rdi,r10
+ add r8,r12
+ shrd r13,r13,14
+ and r15,rdi
+ xor r14,r9
+ add r8,r13
+ xor r15,r10
+ shrd r14,r14,28
+ add rax,r8
+ add r8,r15
+ mov r13,rax
+ add r14,r8
+ shrd r13,r13,23
+ mov r8,r14
+ mov r12,rbx
+ shrd r14,r14,5
+ xor r13,rax
+ xor r12,rcx
+ shrd r13,r13,4
+ xor r14,r8
+ and r12,rax
+ xor r13,rax
+ add rdx,QWORD PTR[32+rsp]
+ mov r15,r8
+ xor r12,rcx
+ shrd r14,r14,6
+ xor r15,r9
+ add rdx,r12
+ shrd r13,r13,14
+ and rdi,r15
+ xor r14,r8
+ add rdx,r13
+ xor rdi,r9
+ shrd r14,r14,28
+ add r11,rdx
+ add rdx,rdi
+ mov r13,r11
+ add r14,rdx
+ shrd r13,r13,23
+ mov rdx,r14
+ mov r12,rax
+ shrd r14,r14,5
+ xor r13,r11
+ xor r12,rbx
+ shrd r13,r13,4
+ xor r14,rdx
+ and r12,r11
+ xor r13,r11
+ add rcx,QWORD PTR[40+rsp]
+ mov rdi,rdx
+ xor r12,rbx
+ shrd r14,r14,6
+ xor rdi,r8
+ add rcx,r12
+ shrd r13,r13,14
+ and r15,rdi
+ xor r14,rdx
+ add rcx,r13
+ xor r15,r8
+ shrd r14,r14,28
+ add r10,rcx
+ add rcx,r15
+ mov r13,r10
+ add r14,rcx
+ shrd r13,r13,23
+ mov rcx,r14
+ mov r12,r11
+ shrd r14,r14,5
+ xor r13,r10
+ xor r12,rax
+ shrd r13,r13,4
+ xor r14,rcx
+ and r12,r10
+ xor r13,r10
+ add rbx,QWORD PTR[48+rsp]
+ mov r15,rcx
+ xor r12,rax
+ shrd r14,r14,6
+ xor r15,rdx
+ add rbx,r12
+ shrd r13,r13,14
+ and rdi,r15
+ xor r14,rcx
+ add rbx,r13
+ xor rdi,rdx
+ shrd r14,r14,28
+ add r9,rbx
+ add rbx,rdi
+ mov r13,r9
+ add r14,rbx
+ shrd r13,r13,23
+ mov rbx,r14
+ mov r12,r10
+ shrd r14,r14,5
+ xor r13,r9
+ xor r12,r11
+ shrd r13,r13,4
+ xor r14,rbx
+ and r12,r9
+ xor r13,r9
+ add rax,QWORD PTR[56+rsp]
+ mov rdi,rbx
+ xor r12,r11
+ shrd r14,r14,6
+ xor rdi,rcx
+ add rax,r12
+ shrd r13,r13,14
+ and r15,rdi
+ xor r14,rbx
+ add rax,r13
+ xor r15,rcx
+ shrd r14,r14,28
+ add r8,rax
+ add rax,r15
+ mov r13,r8
+ add r14,rax
+ shrd r13,r13,23
+ mov rax,r14
+ mov r12,r9
+ shrd r14,r14,5
+ xor r13,r8
+ xor r12,r10
+ shrd r13,r13,4
+ xor r14,rax
+ and r12,r8
+ xor r13,r8
+ add r11,QWORD PTR[64+rsp]
+ mov r15,rax
+ xor r12,r10
+ shrd r14,r14,6
+ xor r15,rbx
+ add r11,r12
+ shrd r13,r13,14
+ and rdi,r15
+ xor r14,rax
+ add r11,r13
+ xor rdi,rbx
+ shrd r14,r14,28
+ add rdx,r11
+ add r11,rdi
+ mov r13,rdx
+ add r14,r11
+ shrd r13,r13,23
+ mov r11,r14
+ mov r12,r8
+ shrd r14,r14,5
+ xor r13,rdx
+ xor r12,r9
+ shrd r13,r13,4
+ xor r14,r11
+ and r12,rdx
+ xor r13,rdx
+ add r10,QWORD PTR[72+rsp]
+ mov rdi,r11
+ xor r12,r9
+ shrd r14,r14,6
+ xor rdi,rax
+ add r10,r12
+ shrd r13,r13,14
+ and r15,rdi
+ xor r14,r11
+ add r10,r13
+ xor r15,rax
+ shrd r14,r14,28
+ add rcx,r10
+ add r10,r15
+ mov r13,rcx
+ add r14,r10
+ shrd r13,r13,23
+ mov r10,r14
+ mov r12,rdx
+ shrd r14,r14,5
+ xor r13,rcx
+ xor r12,r8
+ shrd r13,r13,4
+ xor r14,r10
+ and r12,rcx
+ xor r13,rcx
+ add r9,QWORD PTR[80+rsp]
+ mov r15,r10
+ xor r12,r8
+ shrd r14,r14,6
+ xor r15,r11
+ add r9,r12
+ shrd r13,r13,14
+ and rdi,r15
+ xor r14,r10
+ add r9,r13
+ xor rdi,r11
+ shrd r14,r14,28
+ add rbx,r9
+ add r9,rdi
+ mov r13,rbx
+ add r14,r9
+ shrd r13,r13,23
+ mov r9,r14
+ mov r12,rcx
+ shrd r14,r14,5
+ xor r13,rbx
+ xor r12,rdx
+ shrd r13,r13,4
+ xor r14,r9
+ and r12,rbx
+ xor r13,rbx
+ add r8,QWORD PTR[88+rsp]
+ mov rdi,r9
+ xor r12,rdx
+ shrd r14,r14,6
+ xor rdi,r10
+ add r8,r12
+ shrd r13,r13,14
+ and r15,rdi
+ xor r14,r9
+ add r8,r13
+ xor r15,r10
+ shrd r14,r14,28
+ add rax,r8
+ add r8,r15
+ mov r13,rax
+ add r14,r8
+ shrd r13,r13,23
+ mov r8,r14
+ mov r12,rbx
+ shrd r14,r14,5
+ xor r13,rax
+ xor r12,rcx
+ shrd r13,r13,4
+ xor r14,r8
+ and r12,rax
+ xor r13,rax
+ add rdx,QWORD PTR[96+rsp]
+ mov r15,r8
+ xor r12,rcx
+ shrd r14,r14,6
+ xor r15,r9
+ add rdx,r12
+ shrd r13,r13,14
+ and rdi,r15
+ xor r14,r8
+ add rdx,r13
+ xor rdi,r9
+ shrd r14,r14,28
+ add r11,rdx
+ add rdx,rdi
+ mov r13,r11
+ add r14,rdx
+ shrd r13,r13,23
+ mov rdx,r14
+ mov r12,rax
+ shrd r14,r14,5
+ xor r13,r11
+ xor r12,rbx
+ shrd r13,r13,4
+ xor r14,rdx
+ and r12,r11
+ xor r13,r11
+ add rcx,QWORD PTR[104+rsp]
+ mov rdi,rdx
+ xor r12,rbx
+ shrd r14,r14,6
+ xor rdi,r8
+ add rcx,r12
+ shrd r13,r13,14
+ and r15,rdi
+ xor r14,rdx
+ add rcx,r13
+ xor r15,r8
+ shrd r14,r14,28
+ add r10,rcx
+ add rcx,r15
+ mov r13,r10
+ add r14,rcx
+ shrd r13,r13,23
+ mov rcx,r14
+ mov r12,r11
+ shrd r14,r14,5
+ xor r13,r10
+ xor r12,rax
+ shrd r13,r13,4
+ xor r14,rcx
+ and r12,r10
+ xor r13,r10
+ add rbx,QWORD PTR[112+rsp]
+ mov r15,rcx
+ xor r12,rax
+ shrd r14,r14,6
+ xor r15,rdx
+ add rbx,r12
+ shrd r13,r13,14
+ and rdi,r15
+ xor r14,rcx
+ add rbx,r13
+ xor rdi,rdx
+ shrd r14,r14,28
+ add r9,rbx
+ add rbx,rdi
+ mov r13,r9
+ add r14,rbx
+ shrd r13,r13,23
+ mov rbx,r14
+ mov r12,r10
+ shrd r14,r14,5
+ xor r13,r9
+ xor r12,r11
+ shrd r13,r13,4
+ xor r14,rbx
+ and r12,r9
+ xor r13,r9
+ add rax,QWORD PTR[120+rsp]
+ mov rdi,rbx
+ xor r12,r11
+ shrd r14,r14,6
+ xor rdi,rcx
+ add rax,r12
+ shrd r13,r13,14
+ and r15,rdi
+ xor r14,rbx
+ add rax,r13
+ xor r15,rcx
+ shrd r14,r14,28
+ add r8,rax
+ add rax,r15
+ mov r13,r8
+ add r14,rax
+ mov rdi,QWORD PTR[((128+0))+rsp]
+ mov rax,r14
+
+ add rax,QWORD PTR[rdi]
+ lea rsi,QWORD PTR[128+rsi]
+ add rbx,QWORD PTR[8+rdi]
+ add rcx,QWORD PTR[16+rdi]
+ add rdx,QWORD PTR[24+rdi]
+ add r8,QWORD PTR[32+rdi]
+ add r9,QWORD PTR[40+rdi]
+ add r10,QWORD PTR[48+rdi]
+ add r11,QWORD PTR[56+rdi]
+
+ cmp rsi,QWORD PTR[((128+16))+rsp]
+
+ mov QWORD PTR[rdi],rax
+ mov QWORD PTR[8+rdi],rbx
+ mov QWORD PTR[16+rdi],rcx
+ mov QWORD PTR[24+rdi],rdx
+ mov QWORD PTR[32+rdi],r8
+ mov QWORD PTR[40+rdi],r9
+ mov QWORD PTR[48+rdi],r10
+ mov QWORD PTR[56+rdi],r11
+ jb $L$loop_avx
+
+ mov rsi,QWORD PTR[152+rsp]
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((128+32))+rsp]
+ movaps xmm7,XMMWORD PTR[((128+48))+rsp]
+ movaps xmm8,XMMWORD PTR[((128+64))+rsp]
+ movaps xmm9,XMMWORD PTR[((128+80))+rsp]
+ movaps xmm10,XMMWORD PTR[((128+96))+rsp]
+ movaps xmm11,XMMWORD PTR[((128+112))+rsp]
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue_avx::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha512_block_data_order_avx::
+sha512_block_data_order_avx ENDP
+
+ALIGN 64
+sha512_block_data_order_avx2 PROC PRIVATE
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_sha512_block_data_order_avx2::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+$L$avx2_shortcut::
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+ sub rsp,1408
+ shl rdx,4
+ and rsp,-256*8
+ lea rdx,QWORD PTR[rdx*8+rsi]
+ add rsp,1152
+ mov QWORD PTR[((128+0))+rsp],rdi
+ mov QWORD PTR[((128+8))+rsp],rsi
+ mov QWORD PTR[((128+16))+rsp],rdx
+ mov QWORD PTR[152+rsp],rax
+
+ movaps XMMWORD PTR[(128+32)+rsp],xmm6
+ movaps XMMWORD PTR[(128+48)+rsp],xmm7
+ movaps XMMWORD PTR[(128+64)+rsp],xmm8
+ movaps XMMWORD PTR[(128+80)+rsp],xmm9
+ movaps XMMWORD PTR[(128+96)+rsp],xmm10
+ movaps XMMWORD PTR[(128+112)+rsp],xmm11
+$L$prologue_avx2::
+
+ vzeroupper
+ sub rsi,-16*8
+ mov rax,QWORD PTR[rdi]
+ mov r12,rsi
+ mov rbx,QWORD PTR[8+rdi]
+ cmp rsi,rdx
+ mov rcx,QWORD PTR[16+rdi]
+ cmove r12,rsp
+ mov rdx,QWORD PTR[24+rdi]
+ mov r8,QWORD PTR[32+rdi]
+ mov r9,QWORD PTR[40+rdi]
+ mov r10,QWORD PTR[48+rdi]
+ mov r11,QWORD PTR[56+rdi]
+ jmp $L$oop_avx2
+ALIGN 16
+$L$oop_avx2::
+ vmovdqu xmm0,XMMWORD PTR[((-128))+rsi]
+ vmovdqu xmm1,XMMWORD PTR[((-128+16))+rsi]
+ vmovdqu xmm2,XMMWORD PTR[((-128+32))+rsi]
+ lea rbp,QWORD PTR[((K512+128))]
+ vmovdqu xmm3,XMMWORD PTR[((-128+48))+rsi]
+ vmovdqu xmm4,XMMWORD PTR[((-128+64))+rsi]
+ vmovdqu xmm5,XMMWORD PTR[((-128+80))+rsi]
+ vmovdqu xmm6,XMMWORD PTR[((-128+96))+rsi]
+ vmovdqu xmm7,XMMWORD PTR[((-128+112))+rsi]
+
+ vmovdqa ymm10,YMMWORD PTR[1152+rbp]
+ vinserti128 ymm0,ymm0,XMMWORD PTR[r12],1
+ vinserti128 ymm1,ymm1,XMMWORD PTR[16+r12],1
+ vpshufb ymm0,ymm0,ymm10
+ vinserti128 ymm2,ymm2,XMMWORD PTR[32+r12],1
+ vpshufb ymm1,ymm1,ymm10
+ vinserti128 ymm3,ymm3,XMMWORD PTR[48+r12],1
+ vpshufb ymm2,ymm2,ymm10
+ vinserti128 ymm4,ymm4,XMMWORD PTR[64+r12],1
+ vpshufb ymm3,ymm3,ymm10
+ vinserti128 ymm5,ymm5,XMMWORD PTR[80+r12],1
+ vpshufb ymm4,ymm4,ymm10
+ vinserti128 ymm6,ymm6,XMMWORD PTR[96+r12],1
+ vpshufb ymm5,ymm5,ymm10
+ vinserti128 ymm7,ymm7,XMMWORD PTR[112+r12],1
+
+ vpaddq ymm8,ymm0,YMMWORD PTR[((-128))+rbp]
+ vpshufb ymm6,ymm6,ymm10
+ vpaddq ymm9,ymm1,YMMWORD PTR[((-96))+rbp]
+ vpshufb ymm7,ymm7,ymm10
+ vpaddq ymm10,ymm2,YMMWORD PTR[((-64))+rbp]
+ vpaddq ymm11,ymm3,YMMWORD PTR[((-32))+rbp]
+ vmovdqa YMMWORD PTR[rsp],ymm8
+ vpaddq ymm8,ymm4,YMMWORD PTR[rbp]
+ vmovdqa YMMWORD PTR[32+rsp],ymm9
+ vpaddq ymm9,ymm5,YMMWORD PTR[32+rbp]
+ vmovdqa YMMWORD PTR[64+rsp],ymm10
+ vpaddq ymm10,ymm6,YMMWORD PTR[64+rbp]
+ vmovdqa YMMWORD PTR[96+rsp],ymm11
+ lea rsp,QWORD PTR[((-128))+rsp]
+ vpaddq ymm11,ymm7,YMMWORD PTR[96+rbp]
+ vmovdqa YMMWORD PTR[rsp],ymm8
+ xor r14,r14
+ vmovdqa YMMWORD PTR[32+rsp],ymm9
+ mov rdi,rbx
+ vmovdqa YMMWORD PTR[64+rsp],ymm10
+ xor rdi,rcx
+ vmovdqa YMMWORD PTR[96+rsp],ymm11
+ mov r12,r9
+ add rbp,16*2*8
+ jmp $L$avx2_00_47
+
+ALIGN 16
+$L$avx2_00_47::
+ lea rsp,QWORD PTR[((-128))+rsp]
+ vpalignr ymm8,ymm1,ymm0,8
+ add r11,QWORD PTR[((0+256))+rsp]
+ and r12,r8
+ rorx r13,r8,41
+ vpalignr ymm11,ymm5,ymm4,8
+ rorx r15,r8,18
+ lea rax,QWORD PTR[r14*1+rax]
+ lea r11,QWORD PTR[r12*1+r11]
+ vpsrlq ymm10,ymm8,1
+ andn r12,r8,r10
+ xor r13,r15
+ rorx r14,r8,14
+ vpaddq ymm0,ymm0,ymm11
+ vpsrlq ymm11,ymm8,7
+ lea r11,QWORD PTR[r12*1+r11]
+ xor r13,r14
+ mov r15,rax
+ vpsllq ymm9,ymm8,56
+ vpxor ymm8,ymm11,ymm10
+ rorx r12,rax,39
+ lea r11,QWORD PTR[r13*1+r11]
+ xor r15,rbx
+ vpsrlq ymm10,ymm10,7
+ vpxor ymm8,ymm8,ymm9
+ rorx r14,rax,34
+ rorx r13,rax,28
+ lea rdx,QWORD PTR[r11*1+rdx]
+ vpsllq ymm9,ymm9,7
+ vpxor ymm8,ymm8,ymm10
+ and rdi,r15
+ xor r14,r12
+ xor rdi,rbx
+ vpsrlq ymm11,ymm7,6
+ vpxor ymm8,ymm8,ymm9
+ xor r14,r13
+ lea r11,QWORD PTR[rdi*1+r11]
+ mov r12,r8
+ vpsllq ymm10,ymm7,3
+ vpaddq ymm0,ymm0,ymm8
+ add r10,QWORD PTR[((8+256))+rsp]
+ and r12,rdx
+ rorx r13,rdx,41
+ vpsrlq ymm9,ymm7,19
+ vpxor ymm11,ymm11,ymm10
+ rorx rdi,rdx,18
+ lea r11,QWORD PTR[r14*1+r11]
+ lea r10,QWORD PTR[r12*1+r10]
+ vpsllq ymm10,ymm10,42
+ vpxor ymm11,ymm11,ymm9
+ andn r12,rdx,r9
+ xor r13,rdi
+ rorx r14,rdx,14
+ vpsrlq ymm9,ymm9,42
+ vpxor ymm11,ymm11,ymm10
+ lea r10,QWORD PTR[r12*1+r10]
+ xor r13,r14
+ mov rdi,r11
+ vpxor ymm11,ymm11,ymm9
+ rorx r12,r11,39
+ lea r10,QWORD PTR[r13*1+r10]
+ xor rdi,rax
+ vpaddq ymm0,ymm0,ymm11
+ rorx r14,r11,34
+ rorx r13,r11,28
+ lea rcx,QWORD PTR[r10*1+rcx]
+ vpaddq ymm10,ymm0,YMMWORD PTR[((-128))+rbp]
+ and r15,rdi
+ xor r14,r12
+ xor r15,rax
+ xor r14,r13
+ lea r10,QWORD PTR[r15*1+r10]
+ mov r12,rdx
+ vmovdqa YMMWORD PTR[rsp],ymm10
+ vpalignr ymm8,ymm2,ymm1,8
+ add r9,QWORD PTR[((32+256))+rsp]
+ and r12,rcx
+ rorx r13,rcx,41
+ vpalignr ymm11,ymm6,ymm5,8
+ rorx r15,rcx,18
+ lea r10,QWORD PTR[r14*1+r10]
+ lea r9,QWORD PTR[r12*1+r9]
+ vpsrlq ymm10,ymm8,1
+ andn r12,rcx,r8
+ xor r13,r15
+ rorx r14,rcx,14
+ vpaddq ymm1,ymm1,ymm11
+ vpsrlq ymm11,ymm8,7
+ lea r9,QWORD PTR[r12*1+r9]
+ xor r13,r14
+ mov r15,r10
+ vpsllq ymm9,ymm8,56
+ vpxor ymm8,ymm11,ymm10
+ rorx r12,r10,39
+ lea r9,QWORD PTR[r13*1+r9]
+ xor r15,r11
+ vpsrlq ymm10,ymm10,7
+ vpxor ymm8,ymm8,ymm9
+ rorx r14,r10,34
+ rorx r13,r10,28
+ lea rbx,QWORD PTR[r9*1+rbx]
+ vpsllq ymm9,ymm9,7
+ vpxor ymm8,ymm8,ymm10
+ and rdi,r15
+ xor r14,r12
+ xor rdi,r11
+ vpsrlq ymm11,ymm0,6
+ vpxor ymm8,ymm8,ymm9
+ xor r14,r13
+ lea r9,QWORD PTR[rdi*1+r9]
+ mov r12,rcx
+ vpsllq ymm10,ymm0,3
+ vpaddq ymm1,ymm1,ymm8
+ add r8,QWORD PTR[((40+256))+rsp]
+ and r12,rbx
+ rorx r13,rbx,41
+ vpsrlq ymm9,ymm0,19
+ vpxor ymm11,ymm11,ymm10
+ rorx rdi,rbx,18
+ lea r9,QWORD PTR[r14*1+r9]
+ lea r8,QWORD PTR[r12*1+r8]
+ vpsllq ymm10,ymm10,42
+ vpxor ymm11,ymm11,ymm9
+ andn r12,rbx,rdx
+ xor r13,rdi
+ rorx r14,rbx,14
+ vpsrlq ymm9,ymm9,42
+ vpxor ymm11,ymm11,ymm10
+ lea r8,QWORD PTR[r12*1+r8]
+ xor r13,r14
+ mov rdi,r9
+ vpxor ymm11,ymm11,ymm9
+ rorx r12,r9,39
+ lea r8,QWORD PTR[r13*1+r8]
+ xor rdi,r10
+ vpaddq ymm1,ymm1,ymm11
+ rorx r14,r9,34
+ rorx r13,r9,28
+ lea rax,QWORD PTR[r8*1+rax]
+ vpaddq ymm10,ymm1,YMMWORD PTR[((-96))+rbp]
+ and r15,rdi
+ xor r14,r12
+ xor r15,r10
+ xor r14,r13
+ lea r8,QWORD PTR[r15*1+r8]
+ mov r12,rbx
+ vmovdqa YMMWORD PTR[32+rsp],ymm10
+ vpalignr ymm8,ymm3,ymm2,8
+ add rdx,QWORD PTR[((64+256))+rsp]
+ and r12,rax
+ rorx r13,rax,41
+ vpalignr ymm11,ymm7,ymm6,8
+ rorx r15,rax,18
+ lea r8,QWORD PTR[r14*1+r8]
+ lea rdx,QWORD PTR[r12*1+rdx]
+ vpsrlq ymm10,ymm8,1
+ andn r12,rax,rcx
+ xor r13,r15
+ rorx r14,rax,14
+ vpaddq ymm2,ymm2,ymm11
+ vpsrlq ymm11,ymm8,7
+ lea rdx,QWORD PTR[r12*1+rdx]
+ xor r13,r14
+ mov r15,r8
+ vpsllq ymm9,ymm8,56
+ vpxor ymm8,ymm11,ymm10
+ rorx r12,r8,39
+ lea rdx,QWORD PTR[r13*1+rdx]
+ xor r15,r9
+ vpsrlq ymm10,ymm10,7
+ vpxor ymm8,ymm8,ymm9
+ rorx r14,r8,34
+ rorx r13,r8,28
+ lea r11,QWORD PTR[rdx*1+r11]
+ vpsllq ymm9,ymm9,7
+ vpxor ymm8,ymm8,ymm10
+ and rdi,r15
+ xor r14,r12
+ xor rdi,r9
+ vpsrlq ymm11,ymm1,6
+ vpxor ymm8,ymm8,ymm9
+ xor r14,r13
+ lea rdx,QWORD PTR[rdi*1+rdx]
+ mov r12,rax
+ vpsllq ymm10,ymm1,3
+ vpaddq ymm2,ymm2,ymm8
+ add rcx,QWORD PTR[((72+256))+rsp]
+ and r12,r11
+ rorx r13,r11,41
+ vpsrlq ymm9,ymm1,19
+ vpxor ymm11,ymm11,ymm10
+ rorx rdi,r11,18
+ lea rdx,QWORD PTR[r14*1+rdx]
+ lea rcx,QWORD PTR[r12*1+rcx]
+ vpsllq ymm10,ymm10,42
+ vpxor ymm11,ymm11,ymm9
+ andn r12,r11,rbx
+ xor r13,rdi
+ rorx r14,r11,14
+ vpsrlq ymm9,ymm9,42
+ vpxor ymm11,ymm11,ymm10
+ lea rcx,QWORD PTR[r12*1+rcx]
+ xor r13,r14
+ mov rdi,rdx
+ vpxor ymm11,ymm11,ymm9
+ rorx r12,rdx,39
+ lea rcx,QWORD PTR[r13*1+rcx]
+ xor rdi,r8
+ vpaddq ymm2,ymm2,ymm11
+ rorx r14,rdx,34
+ rorx r13,rdx,28
+ lea r10,QWORD PTR[rcx*1+r10]
+ vpaddq ymm10,ymm2,YMMWORD PTR[((-64))+rbp]
+ and r15,rdi
+ xor r14,r12
+ xor r15,r8
+ xor r14,r13
+ lea rcx,QWORD PTR[r15*1+rcx]
+ mov r12,r11
+ vmovdqa YMMWORD PTR[64+rsp],ymm10
+ vpalignr ymm8,ymm4,ymm3,8
+ add rbx,QWORD PTR[((96+256))+rsp]
+ and r12,r10
+ rorx r13,r10,41
+ vpalignr ymm11,ymm0,ymm7,8
+ rorx r15,r10,18
+ lea rcx,QWORD PTR[r14*1+rcx]
+ lea rbx,QWORD PTR[r12*1+rbx]
+ vpsrlq ymm10,ymm8,1
+ andn r12,r10,rax
+ xor r13,r15
+ rorx r14,r10,14
+ vpaddq ymm3,ymm3,ymm11
+ vpsrlq ymm11,ymm8,7
+ lea rbx,QWORD PTR[r12*1+rbx]
+ xor r13,r14
+ mov r15,rcx
+ vpsllq ymm9,ymm8,56
+ vpxor ymm8,ymm11,ymm10
+ rorx r12,rcx,39
+ lea rbx,QWORD PTR[r13*1+rbx]
+ xor r15,rdx
+ vpsrlq ymm10,ymm10,7
+ vpxor ymm8,ymm8,ymm9
+ rorx r14,rcx,34
+ rorx r13,rcx,28
+ lea r9,QWORD PTR[rbx*1+r9]
+ vpsllq ymm9,ymm9,7
+ vpxor ymm8,ymm8,ymm10
+ and rdi,r15
+ xor r14,r12
+ xor rdi,rdx
+ vpsrlq ymm11,ymm2,6
+ vpxor ymm8,ymm8,ymm9
+ xor r14,r13
+ lea rbx,QWORD PTR[rdi*1+rbx]
+ mov r12,r10
+ vpsllq ymm10,ymm2,3
+ vpaddq ymm3,ymm3,ymm8
+ add rax,QWORD PTR[((104+256))+rsp]
+ and r12,r9
+ rorx r13,r9,41
+ vpsrlq ymm9,ymm2,19
+ vpxor ymm11,ymm11,ymm10
+ rorx rdi,r9,18
+ lea rbx,QWORD PTR[r14*1+rbx]
+ lea rax,QWORD PTR[r12*1+rax]
+ vpsllq ymm10,ymm10,42
+ vpxor ymm11,ymm11,ymm9
+ andn r12,r9,r11
+ xor r13,rdi
+ rorx r14,r9,14
+ vpsrlq ymm9,ymm9,42
+ vpxor ymm11,ymm11,ymm10
+ lea rax,QWORD PTR[r12*1+rax]
+ xor r13,r14
+ mov rdi,rbx
+ vpxor ymm11,ymm11,ymm9
+ rorx r12,rbx,39
+ lea rax,QWORD PTR[r13*1+rax]
+ xor rdi,rcx
+ vpaddq ymm3,ymm3,ymm11
+ rorx r14,rbx,34
+ rorx r13,rbx,28
+ lea r8,QWORD PTR[rax*1+r8]
+ vpaddq ymm10,ymm3,YMMWORD PTR[((-32))+rbp]
+ and r15,rdi
+ xor r14,r12
+ xor r15,rcx
+ xor r14,r13
+ lea rax,QWORD PTR[r15*1+rax]
+ mov r12,r9
+ vmovdqa YMMWORD PTR[96+rsp],ymm10
+ lea rsp,QWORD PTR[((-128))+rsp]
+ vpalignr ymm8,ymm5,ymm4,8
+ add r11,QWORD PTR[((0+256))+rsp]
+ and r12,r8
+ rorx r13,r8,41
+ vpalignr ymm11,ymm1,ymm0,8
+ rorx r15,r8,18
+ lea rax,QWORD PTR[r14*1+rax]
+ lea r11,QWORD PTR[r12*1+r11]
+ vpsrlq ymm10,ymm8,1
+ andn r12,r8,r10
+ xor r13,r15
+ rorx r14,r8,14
+ vpaddq ymm4,ymm4,ymm11
+ vpsrlq ymm11,ymm8,7
+ lea r11,QWORD PTR[r12*1+r11]
+ xor r13,r14
+ mov r15,rax
+ vpsllq ymm9,ymm8,56
+ vpxor ymm8,ymm11,ymm10
+ rorx r12,rax,39
+ lea r11,QWORD PTR[r13*1+r11]
+ xor r15,rbx
+ vpsrlq ymm10,ymm10,7
+ vpxor ymm8,ymm8,ymm9
+ rorx r14,rax,34
+ rorx r13,rax,28
+ lea rdx,QWORD PTR[r11*1+rdx]
+ vpsllq ymm9,ymm9,7
+ vpxor ymm8,ymm8,ymm10
+ and rdi,r15
+ xor r14,r12
+ xor rdi,rbx
+ vpsrlq ymm11,ymm3,6
+ vpxor ymm8,ymm8,ymm9
+ xor r14,r13
+ lea r11,QWORD PTR[rdi*1+r11]
+ mov r12,r8
+ vpsllq ymm10,ymm3,3
+ vpaddq ymm4,ymm4,ymm8
+ add r10,QWORD PTR[((8+256))+rsp]
+ and r12,rdx
+ rorx r13,rdx,41
+ vpsrlq ymm9,ymm3,19
+ vpxor ymm11,ymm11,ymm10
+ rorx rdi,rdx,18
+ lea r11,QWORD PTR[r14*1+r11]
+ lea r10,QWORD PTR[r12*1+r10]
+ vpsllq ymm10,ymm10,42
+ vpxor ymm11,ymm11,ymm9
+ andn r12,rdx,r9
+ xor r13,rdi
+ rorx r14,rdx,14
+ vpsrlq ymm9,ymm9,42
+ vpxor ymm11,ymm11,ymm10
+ lea r10,QWORD PTR[r12*1+r10]
+ xor r13,r14
+ mov rdi,r11
+ vpxor ymm11,ymm11,ymm9
+ rorx r12,r11,39
+ lea r10,QWORD PTR[r13*1+r10]
+ xor rdi,rax
+ vpaddq ymm4,ymm4,ymm11
+ rorx r14,r11,34
+ rorx r13,r11,28
+ lea rcx,QWORD PTR[r10*1+rcx]
+ vpaddq ymm10,ymm4,YMMWORD PTR[rbp]
+ and r15,rdi
+ xor r14,r12
+ xor r15,rax
+ xor r14,r13
+ lea r10,QWORD PTR[r15*1+r10]
+ mov r12,rdx
+ vmovdqa YMMWORD PTR[rsp],ymm10
+ vpalignr ymm8,ymm6,ymm5,8
+ add r9,QWORD PTR[((32+256))+rsp]
+ and r12,rcx
+ rorx r13,rcx,41
+ vpalignr ymm11,ymm2,ymm1,8
+ rorx r15,rcx,18
+ lea r10,QWORD PTR[r14*1+r10]
+ lea r9,QWORD PTR[r12*1+r9]
+ vpsrlq ymm10,ymm8,1
+ andn r12,rcx,r8
+ xor r13,r15
+ rorx r14,rcx,14
+ vpaddq ymm5,ymm5,ymm11
+ vpsrlq ymm11,ymm8,7
+ lea r9,QWORD PTR[r12*1+r9]
+ xor r13,r14
+ mov r15,r10
+ vpsllq ymm9,ymm8,56
+ vpxor ymm8,ymm11,ymm10
+ rorx r12,r10,39
+ lea r9,QWORD PTR[r13*1+r9]
+ xor r15,r11
+ vpsrlq ymm10,ymm10,7
+ vpxor ymm8,ymm8,ymm9
+ rorx r14,r10,34
+ rorx r13,r10,28
+ lea rbx,QWORD PTR[r9*1+rbx]
+ vpsllq ymm9,ymm9,7
+ vpxor ymm8,ymm8,ymm10
+ and rdi,r15
+ xor r14,r12
+ xor rdi,r11
+ vpsrlq ymm11,ymm4,6
+ vpxor ymm8,ymm8,ymm9
+ xor r14,r13
+ lea r9,QWORD PTR[rdi*1+r9]
+ mov r12,rcx
+ vpsllq ymm10,ymm4,3
+ vpaddq ymm5,ymm5,ymm8
+ add r8,QWORD PTR[((40+256))+rsp]
+ and r12,rbx
+ rorx r13,rbx,41
+ vpsrlq ymm9,ymm4,19
+ vpxor ymm11,ymm11,ymm10
+ rorx rdi,rbx,18
+ lea r9,QWORD PTR[r14*1+r9]
+ lea r8,QWORD PTR[r12*1+r8]
+ vpsllq ymm10,ymm10,42
+ vpxor ymm11,ymm11,ymm9
+ andn r12,rbx,rdx
+ xor r13,rdi
+ rorx r14,rbx,14
+ vpsrlq ymm9,ymm9,42
+ vpxor ymm11,ymm11,ymm10
+ lea r8,QWORD PTR[r12*1+r8]
+ xor r13,r14
+ mov rdi,r9
+ vpxor ymm11,ymm11,ymm9
+ rorx r12,r9,39
+ lea r8,QWORD PTR[r13*1+r8]
+ xor rdi,r10
+ vpaddq ymm5,ymm5,ymm11
+ rorx r14,r9,34
+ rorx r13,r9,28
+ lea rax,QWORD PTR[r8*1+rax]
+ vpaddq ymm10,ymm5,YMMWORD PTR[32+rbp]
+ and r15,rdi
+ xor r14,r12
+ xor r15,r10
+ xor r14,r13
+ lea r8,QWORD PTR[r15*1+r8]
+ mov r12,rbx
+ vmovdqa YMMWORD PTR[32+rsp],ymm10
+ vpalignr ymm8,ymm7,ymm6,8
+ add rdx,QWORD PTR[((64+256))+rsp]
+ and r12,rax
+ rorx r13,rax,41
+ vpalignr ymm11,ymm3,ymm2,8
+ rorx r15,rax,18
+ lea r8,QWORD PTR[r14*1+r8]
+ lea rdx,QWORD PTR[r12*1+rdx]
+ vpsrlq ymm10,ymm8,1
+ andn r12,rax,rcx
+ xor r13,r15
+ rorx r14,rax,14
+ vpaddq ymm6,ymm6,ymm11
+ vpsrlq ymm11,ymm8,7
+ lea rdx,QWORD PTR[r12*1+rdx]
+ xor r13,r14
+ mov r15,r8
+ vpsllq ymm9,ymm8,56
+ vpxor ymm8,ymm11,ymm10
+ rorx r12,r8,39
+ lea rdx,QWORD PTR[r13*1+rdx]
+ xor r15,r9
+ vpsrlq ymm10,ymm10,7
+ vpxor ymm8,ymm8,ymm9
+ rorx r14,r8,34
+ rorx r13,r8,28
+ lea r11,QWORD PTR[rdx*1+r11]
+ vpsllq ymm9,ymm9,7
+ vpxor ymm8,ymm8,ymm10
+ and rdi,r15
+ xor r14,r12
+ xor rdi,r9
+ vpsrlq ymm11,ymm5,6
+ vpxor ymm8,ymm8,ymm9
+ xor r14,r13
+ lea rdx,QWORD PTR[rdi*1+rdx]
+ mov r12,rax
+ vpsllq ymm10,ymm5,3
+ vpaddq ymm6,ymm6,ymm8
+ add rcx,QWORD PTR[((72+256))+rsp]
+ and r12,r11
+ rorx r13,r11,41
+ vpsrlq ymm9,ymm5,19
+ vpxor ymm11,ymm11,ymm10
+ rorx rdi,r11,18
+ lea rdx,QWORD PTR[r14*1+rdx]
+ lea rcx,QWORD PTR[r12*1+rcx]
+ vpsllq ymm10,ymm10,42
+ vpxor ymm11,ymm11,ymm9
+ andn r12,r11,rbx
+ xor r13,rdi
+ rorx r14,r11,14
+ vpsrlq ymm9,ymm9,42
+ vpxor ymm11,ymm11,ymm10
+ lea rcx,QWORD PTR[r12*1+rcx]
+ xor r13,r14
+ mov rdi,rdx
+ vpxor ymm11,ymm11,ymm9
+ rorx r12,rdx,39
+ lea rcx,QWORD PTR[r13*1+rcx]
+ xor rdi,r8
+ vpaddq ymm6,ymm6,ymm11
+ rorx r14,rdx,34
+ rorx r13,rdx,28
+ lea r10,QWORD PTR[rcx*1+r10]
+ vpaddq ymm10,ymm6,YMMWORD PTR[64+rbp]
+ and r15,rdi
+ xor r14,r12
+ xor r15,r8
+ xor r14,r13
+ lea rcx,QWORD PTR[r15*1+rcx]
+ mov r12,r11
+ vmovdqa YMMWORD PTR[64+rsp],ymm10
+ vpalignr ymm8,ymm0,ymm7,8
+ add rbx,QWORD PTR[((96+256))+rsp]
+ and r12,r10
+ rorx r13,r10,41
+ vpalignr ymm11,ymm4,ymm3,8
+ rorx r15,r10,18
+ lea rcx,QWORD PTR[r14*1+rcx]
+ lea rbx,QWORD PTR[r12*1+rbx]
+ vpsrlq ymm10,ymm8,1
+ andn r12,r10,rax
+ xor r13,r15
+ rorx r14,r10,14
+ vpaddq ymm7,ymm7,ymm11
+ vpsrlq ymm11,ymm8,7
+ lea rbx,QWORD PTR[r12*1+rbx]
+ xor r13,r14
+ mov r15,rcx
+ vpsllq ymm9,ymm8,56
+ vpxor ymm8,ymm11,ymm10
+ rorx r12,rcx,39
+ lea rbx,QWORD PTR[r13*1+rbx]
+ xor r15,rdx
+ vpsrlq ymm10,ymm10,7
+ vpxor ymm8,ymm8,ymm9
+ rorx r14,rcx,34
+ rorx r13,rcx,28
+ lea r9,QWORD PTR[rbx*1+r9]
+ vpsllq ymm9,ymm9,7
+ vpxor ymm8,ymm8,ymm10
+ and rdi,r15
+ xor r14,r12
+ xor rdi,rdx
+ vpsrlq ymm11,ymm6,6
+ vpxor ymm8,ymm8,ymm9
+ xor r14,r13
+ lea rbx,QWORD PTR[rdi*1+rbx]
+ mov r12,r10
+ vpsllq ymm10,ymm6,3
+ vpaddq ymm7,ymm7,ymm8
+ add rax,QWORD PTR[((104+256))+rsp]
+ and r12,r9
+ rorx r13,r9,41
+ vpsrlq ymm9,ymm6,19
+ vpxor ymm11,ymm11,ymm10
+ rorx rdi,r9,18
+ lea rbx,QWORD PTR[r14*1+rbx]
+ lea rax,QWORD PTR[r12*1+rax]
+ vpsllq ymm10,ymm10,42
+ vpxor ymm11,ymm11,ymm9
+ andn r12,r9,r11
+ xor r13,rdi
+ rorx r14,r9,14
+ vpsrlq ymm9,ymm9,42
+ vpxor ymm11,ymm11,ymm10
+ lea rax,QWORD PTR[r12*1+rax]
+ xor r13,r14
+ mov rdi,rbx
+ vpxor ymm11,ymm11,ymm9
+ rorx r12,rbx,39
+ lea rax,QWORD PTR[r13*1+rax]
+ xor rdi,rcx
+ vpaddq ymm7,ymm7,ymm11
+ rorx r14,rbx,34
+ rorx r13,rbx,28
+ lea r8,QWORD PTR[rax*1+r8]
+ vpaddq ymm10,ymm7,YMMWORD PTR[96+rbp]
+ and r15,rdi
+ xor r14,r12
+ xor r15,rcx
+ xor r14,r13
+ lea rax,QWORD PTR[r15*1+rax]
+ mov r12,r9
+ vmovdqa YMMWORD PTR[96+rsp],ymm10
+ lea rbp,QWORD PTR[256+rbp]
+ cmp BYTE PTR[((-121))+rbp],0
+ jne $L$avx2_00_47
+ add r11,QWORD PTR[((0+128))+rsp]
+ and r12,r8
+ rorx r13,r8,41
+ rorx r15,r8,18
+ lea rax,QWORD PTR[r14*1+rax]
+ lea r11,QWORD PTR[r12*1+r11]
+ andn r12,r8,r10
+ xor r13,r15
+ rorx r14,r8,14
+ lea r11,QWORD PTR[r12*1+r11]
+ xor r13,r14
+ mov r15,rax
+ rorx r12,rax,39
+ lea r11,QWORD PTR[r13*1+r11]
+ xor r15,rbx
+ rorx r14,rax,34
+ rorx r13,rax,28
+ lea rdx,QWORD PTR[r11*1+rdx]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,rbx
+ xor r14,r13
+ lea r11,QWORD PTR[rdi*1+r11]
+ mov r12,r8
+ add r10,QWORD PTR[((8+128))+rsp]
+ and r12,rdx
+ rorx r13,rdx,41
+ rorx rdi,rdx,18
+ lea r11,QWORD PTR[r14*1+r11]
+ lea r10,QWORD PTR[r12*1+r10]
+ andn r12,rdx,r9
+ xor r13,rdi
+ rorx r14,rdx,14
+ lea r10,QWORD PTR[r12*1+r10]
+ xor r13,r14
+ mov rdi,r11
+ rorx r12,r11,39
+ lea r10,QWORD PTR[r13*1+r10]
+ xor rdi,rax
+ rorx r14,r11,34
+ rorx r13,r11,28
+ lea rcx,QWORD PTR[r10*1+rcx]
+ and r15,rdi
+ xor r14,r12
+ xor r15,rax
+ xor r14,r13
+ lea r10,QWORD PTR[r15*1+r10]
+ mov r12,rdx
+ add r9,QWORD PTR[((32+128))+rsp]
+ and r12,rcx
+ rorx r13,rcx,41
+ rorx r15,rcx,18
+ lea r10,QWORD PTR[r14*1+r10]
+ lea r9,QWORD PTR[r12*1+r9]
+ andn r12,rcx,r8
+ xor r13,r15
+ rorx r14,rcx,14
+ lea r9,QWORD PTR[r12*1+r9]
+ xor r13,r14
+ mov r15,r10
+ rorx r12,r10,39
+ lea r9,QWORD PTR[r13*1+r9]
+ xor r15,r11
+ rorx r14,r10,34
+ rorx r13,r10,28
+ lea rbx,QWORD PTR[r9*1+rbx]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,r11
+ xor r14,r13
+ lea r9,QWORD PTR[rdi*1+r9]
+ mov r12,rcx
+ add r8,QWORD PTR[((40+128))+rsp]
+ and r12,rbx
+ rorx r13,rbx,41
+ rorx rdi,rbx,18
+ lea r9,QWORD PTR[r14*1+r9]
+ lea r8,QWORD PTR[r12*1+r8]
+ andn r12,rbx,rdx
+ xor r13,rdi
+ rorx r14,rbx,14
+ lea r8,QWORD PTR[r12*1+r8]
+ xor r13,r14
+ mov rdi,r9
+ rorx r12,r9,39
+ lea r8,QWORD PTR[r13*1+r8]
+ xor rdi,r10
+ rorx r14,r9,34
+ rorx r13,r9,28
+ lea rax,QWORD PTR[r8*1+rax]
+ and r15,rdi
+ xor r14,r12
+ xor r15,r10
+ xor r14,r13
+ lea r8,QWORD PTR[r15*1+r8]
+ mov r12,rbx
+ add rdx,QWORD PTR[((64+128))+rsp]
+ and r12,rax
+ rorx r13,rax,41
+ rorx r15,rax,18
+ lea r8,QWORD PTR[r14*1+r8]
+ lea rdx,QWORD PTR[r12*1+rdx]
+ andn r12,rax,rcx
+ xor r13,r15
+ rorx r14,rax,14
+ lea rdx,QWORD PTR[r12*1+rdx]
+ xor r13,r14
+ mov r15,r8
+ rorx r12,r8,39
+ lea rdx,QWORD PTR[r13*1+rdx]
+ xor r15,r9
+ rorx r14,r8,34
+ rorx r13,r8,28
+ lea r11,QWORD PTR[rdx*1+r11]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,r9
+ xor r14,r13
+ lea rdx,QWORD PTR[rdi*1+rdx]
+ mov r12,rax
+ add rcx,QWORD PTR[((72+128))+rsp]
+ and r12,r11
+ rorx r13,r11,41
+ rorx rdi,r11,18
+ lea rdx,QWORD PTR[r14*1+rdx]
+ lea rcx,QWORD PTR[r12*1+rcx]
+ andn r12,r11,rbx
+ xor r13,rdi
+ rorx r14,r11,14
+ lea rcx,QWORD PTR[r12*1+rcx]
+ xor r13,r14
+ mov rdi,rdx
+ rorx r12,rdx,39
+ lea rcx,QWORD PTR[r13*1+rcx]
+ xor rdi,r8
+ rorx r14,rdx,34
+ rorx r13,rdx,28
+ lea r10,QWORD PTR[rcx*1+r10]
+ and r15,rdi
+ xor r14,r12
+ xor r15,r8
+ xor r14,r13
+ lea rcx,QWORD PTR[r15*1+rcx]
+ mov r12,r11
+ add rbx,QWORD PTR[((96+128))+rsp]
+ and r12,r10
+ rorx r13,r10,41
+ rorx r15,r10,18
+ lea rcx,QWORD PTR[r14*1+rcx]
+ lea rbx,QWORD PTR[r12*1+rbx]
+ andn r12,r10,rax
+ xor r13,r15
+ rorx r14,r10,14
+ lea rbx,QWORD PTR[r12*1+rbx]
+ xor r13,r14
+ mov r15,rcx
+ rorx r12,rcx,39
+ lea rbx,QWORD PTR[r13*1+rbx]
+ xor r15,rdx
+ rorx r14,rcx,34
+ rorx r13,rcx,28
+ lea r9,QWORD PTR[rbx*1+r9]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,rdx
+ xor r14,r13
+ lea rbx,QWORD PTR[rdi*1+rbx]
+ mov r12,r10
+ add rax,QWORD PTR[((104+128))+rsp]
+ and r12,r9
+ rorx r13,r9,41
+ rorx rdi,r9,18
+ lea rbx,QWORD PTR[r14*1+rbx]
+ lea rax,QWORD PTR[r12*1+rax]
+ andn r12,r9,r11
+ xor r13,rdi
+ rorx r14,r9,14
+ lea rax,QWORD PTR[r12*1+rax]
+ xor r13,r14
+ mov rdi,rbx
+ rorx r12,rbx,39
+ lea rax,QWORD PTR[r13*1+rax]
+ xor rdi,rcx
+ rorx r14,rbx,34
+ rorx r13,rbx,28
+ lea r8,QWORD PTR[rax*1+r8]
+ and r15,rdi
+ xor r14,r12
+ xor r15,rcx
+ xor r14,r13
+ lea rax,QWORD PTR[r15*1+rax]
+ mov r12,r9
+ add r11,QWORD PTR[rsp]
+ and r12,r8
+ rorx r13,r8,41
+ rorx r15,r8,18
+ lea rax,QWORD PTR[r14*1+rax]
+ lea r11,QWORD PTR[r12*1+r11]
+ andn r12,r8,r10
+ xor r13,r15
+ rorx r14,r8,14
+ lea r11,QWORD PTR[r12*1+r11]
+ xor r13,r14
+ mov r15,rax
+ rorx r12,rax,39
+ lea r11,QWORD PTR[r13*1+r11]
+ xor r15,rbx
+ rorx r14,rax,34
+ rorx r13,rax,28
+ lea rdx,QWORD PTR[r11*1+rdx]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,rbx
+ xor r14,r13
+ lea r11,QWORD PTR[rdi*1+r11]
+ mov r12,r8
+ add r10,QWORD PTR[8+rsp]
+ and r12,rdx
+ rorx r13,rdx,41
+ rorx rdi,rdx,18
+ lea r11,QWORD PTR[r14*1+r11]
+ lea r10,QWORD PTR[r12*1+r10]
+ andn r12,rdx,r9
+ xor r13,rdi
+ rorx r14,rdx,14
+ lea r10,QWORD PTR[r12*1+r10]
+ xor r13,r14
+ mov rdi,r11
+ rorx r12,r11,39
+ lea r10,QWORD PTR[r13*1+r10]
+ xor rdi,rax
+ rorx r14,r11,34
+ rorx r13,r11,28
+ lea rcx,QWORD PTR[r10*1+rcx]
+ and r15,rdi
+ xor r14,r12
+ xor r15,rax
+ xor r14,r13
+ lea r10,QWORD PTR[r15*1+r10]
+ mov r12,rdx
+ add r9,QWORD PTR[32+rsp]
+ and r12,rcx
+ rorx r13,rcx,41
+ rorx r15,rcx,18
+ lea r10,QWORD PTR[r14*1+r10]
+ lea r9,QWORD PTR[r12*1+r9]
+ andn r12,rcx,r8
+ xor r13,r15
+ rorx r14,rcx,14
+ lea r9,QWORD PTR[r12*1+r9]
+ xor r13,r14
+ mov r15,r10
+ rorx r12,r10,39
+ lea r9,QWORD PTR[r13*1+r9]
+ xor r15,r11
+ rorx r14,r10,34
+ rorx r13,r10,28
+ lea rbx,QWORD PTR[r9*1+rbx]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,r11
+ xor r14,r13
+ lea r9,QWORD PTR[rdi*1+r9]
+ mov r12,rcx
+ add r8,QWORD PTR[40+rsp]
+ and r12,rbx
+ rorx r13,rbx,41
+ rorx rdi,rbx,18
+ lea r9,QWORD PTR[r14*1+r9]
+ lea r8,QWORD PTR[r12*1+r8]
+ andn r12,rbx,rdx
+ xor r13,rdi
+ rorx r14,rbx,14
+ lea r8,QWORD PTR[r12*1+r8]
+ xor r13,r14
+ mov rdi,r9
+ rorx r12,r9,39
+ lea r8,QWORD PTR[r13*1+r8]
+ xor rdi,r10
+ rorx r14,r9,34
+ rorx r13,r9,28
+ lea rax,QWORD PTR[r8*1+rax]
+ and r15,rdi
+ xor r14,r12
+ xor r15,r10
+ xor r14,r13
+ lea r8,QWORD PTR[r15*1+r8]
+ mov r12,rbx
+ add rdx,QWORD PTR[64+rsp]
+ and r12,rax
+ rorx r13,rax,41
+ rorx r15,rax,18
+ lea r8,QWORD PTR[r14*1+r8]
+ lea rdx,QWORD PTR[r12*1+rdx]
+ andn r12,rax,rcx
+ xor r13,r15
+ rorx r14,rax,14
+ lea rdx,QWORD PTR[r12*1+rdx]
+ xor r13,r14
+ mov r15,r8
+ rorx r12,r8,39
+ lea rdx,QWORD PTR[r13*1+rdx]
+ xor r15,r9
+ rorx r14,r8,34
+ rorx r13,r8,28
+ lea r11,QWORD PTR[rdx*1+r11]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,r9
+ xor r14,r13
+ lea rdx,QWORD PTR[rdi*1+rdx]
+ mov r12,rax
+ add rcx,QWORD PTR[72+rsp]
+ and r12,r11
+ rorx r13,r11,41
+ rorx rdi,r11,18
+ lea rdx,QWORD PTR[r14*1+rdx]
+ lea rcx,QWORD PTR[r12*1+rcx]
+ andn r12,r11,rbx
+ xor r13,rdi
+ rorx r14,r11,14
+ lea rcx,QWORD PTR[r12*1+rcx]
+ xor r13,r14
+ mov rdi,rdx
+ rorx r12,rdx,39
+ lea rcx,QWORD PTR[r13*1+rcx]
+ xor rdi,r8
+ rorx r14,rdx,34
+ rorx r13,rdx,28
+ lea r10,QWORD PTR[rcx*1+r10]
+ and r15,rdi
+ xor r14,r12
+ xor r15,r8
+ xor r14,r13
+ lea rcx,QWORD PTR[r15*1+rcx]
+ mov r12,r11
+ add rbx,QWORD PTR[96+rsp]
+ and r12,r10
+ rorx r13,r10,41
+ rorx r15,r10,18
+ lea rcx,QWORD PTR[r14*1+rcx]
+ lea rbx,QWORD PTR[r12*1+rbx]
+ andn r12,r10,rax
+ xor r13,r15
+ rorx r14,r10,14
+ lea rbx,QWORD PTR[r12*1+rbx]
+ xor r13,r14
+ mov r15,rcx
+ rorx r12,rcx,39
+ lea rbx,QWORD PTR[r13*1+rbx]
+ xor r15,rdx
+ rorx r14,rcx,34
+ rorx r13,rcx,28
+ lea r9,QWORD PTR[rbx*1+r9]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,rdx
+ xor r14,r13
+ lea rbx,QWORD PTR[rdi*1+rbx]
+ mov r12,r10
+ add rax,QWORD PTR[104+rsp]
+ and r12,r9
+ rorx r13,r9,41
+ rorx rdi,r9,18
+ lea rbx,QWORD PTR[r14*1+rbx]
+ lea rax,QWORD PTR[r12*1+rax]
+ andn r12,r9,r11
+ xor r13,rdi
+ rorx r14,r9,14
+ lea rax,QWORD PTR[r12*1+rax]
+ xor r13,r14
+ mov rdi,rbx
+ rorx r12,rbx,39
+ lea rax,QWORD PTR[r13*1+rax]
+ xor rdi,rcx
+ rorx r14,rbx,34
+ rorx r13,rbx,28
+ lea r8,QWORD PTR[rax*1+r8]
+ and r15,rdi
+ xor r14,r12
+ xor r15,rcx
+ xor r14,r13
+ lea rax,QWORD PTR[r15*1+rax]
+ mov r12,r9
+ mov rdi,QWORD PTR[1280+rsp]
+ add rax,r14
+
+ lea rbp,QWORD PTR[1152+rsp]
+
+ add rax,QWORD PTR[rdi]
+ add rbx,QWORD PTR[8+rdi]
+ add rcx,QWORD PTR[16+rdi]
+ add rdx,QWORD PTR[24+rdi]
+ add r8,QWORD PTR[32+rdi]
+ add r9,QWORD PTR[40+rdi]
+ add r10,QWORD PTR[48+rdi]
+ add r11,QWORD PTR[56+rdi]
+
+ mov QWORD PTR[rdi],rax
+ mov QWORD PTR[8+rdi],rbx
+ mov QWORD PTR[16+rdi],rcx
+ mov QWORD PTR[24+rdi],rdx
+ mov QWORD PTR[32+rdi],r8
+ mov QWORD PTR[40+rdi],r9
+ mov QWORD PTR[48+rdi],r10
+ mov QWORD PTR[56+rdi],r11
+
+ cmp rsi,QWORD PTR[144+rbp]
+ je $L$done_avx2
+
+ xor r14,r14
+ mov rdi,rbx
+ xor rdi,rcx
+ mov r12,r9
+ jmp $L$ower_avx2
+ALIGN 16
+$L$ower_avx2::
+ add r11,QWORD PTR[((0+16))+rbp]
+ and r12,r8
+ rorx r13,r8,41
+ rorx r15,r8,18
+ lea rax,QWORD PTR[r14*1+rax]
+ lea r11,QWORD PTR[r12*1+r11]
+ andn r12,r8,r10
+ xor r13,r15
+ rorx r14,r8,14
+ lea r11,QWORD PTR[r12*1+r11]
+ xor r13,r14
+ mov r15,rax
+ rorx r12,rax,39
+ lea r11,QWORD PTR[r13*1+r11]
+ xor r15,rbx
+ rorx r14,rax,34
+ rorx r13,rax,28
+ lea rdx,QWORD PTR[r11*1+rdx]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,rbx
+ xor r14,r13
+ lea r11,QWORD PTR[rdi*1+r11]
+ mov r12,r8
+ add r10,QWORD PTR[((8+16))+rbp]
+ and r12,rdx
+ rorx r13,rdx,41
+ rorx rdi,rdx,18
+ lea r11,QWORD PTR[r14*1+r11]
+ lea r10,QWORD PTR[r12*1+r10]
+ andn r12,rdx,r9
+ xor r13,rdi
+ rorx r14,rdx,14
+ lea r10,QWORD PTR[r12*1+r10]
+ xor r13,r14
+ mov rdi,r11
+ rorx r12,r11,39
+ lea r10,QWORD PTR[r13*1+r10]
+ xor rdi,rax
+ rorx r14,r11,34
+ rorx r13,r11,28
+ lea rcx,QWORD PTR[r10*1+rcx]
+ and r15,rdi
+ xor r14,r12
+ xor r15,rax
+ xor r14,r13
+ lea r10,QWORD PTR[r15*1+r10]
+ mov r12,rdx
+ add r9,QWORD PTR[((32+16))+rbp]
+ and r12,rcx
+ rorx r13,rcx,41
+ rorx r15,rcx,18
+ lea r10,QWORD PTR[r14*1+r10]
+ lea r9,QWORD PTR[r12*1+r9]
+ andn r12,rcx,r8
+ xor r13,r15
+ rorx r14,rcx,14
+ lea r9,QWORD PTR[r12*1+r9]
+ xor r13,r14
+ mov r15,r10
+ rorx r12,r10,39
+ lea r9,QWORD PTR[r13*1+r9]
+ xor r15,r11
+ rorx r14,r10,34
+ rorx r13,r10,28
+ lea rbx,QWORD PTR[r9*1+rbx]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,r11
+ xor r14,r13
+ lea r9,QWORD PTR[rdi*1+r9]
+ mov r12,rcx
+ add r8,QWORD PTR[((40+16))+rbp]
+ and r12,rbx
+ rorx r13,rbx,41
+ rorx rdi,rbx,18
+ lea r9,QWORD PTR[r14*1+r9]
+ lea r8,QWORD PTR[r12*1+r8]
+ andn r12,rbx,rdx
+ xor r13,rdi
+ rorx r14,rbx,14
+ lea r8,QWORD PTR[r12*1+r8]
+ xor r13,r14
+ mov rdi,r9
+ rorx r12,r9,39
+ lea r8,QWORD PTR[r13*1+r8]
+ xor rdi,r10
+ rorx r14,r9,34
+ rorx r13,r9,28
+ lea rax,QWORD PTR[r8*1+rax]
+ and r15,rdi
+ xor r14,r12
+ xor r15,r10
+ xor r14,r13
+ lea r8,QWORD PTR[r15*1+r8]
+ mov r12,rbx
+ add rdx,QWORD PTR[((64+16))+rbp]
+ and r12,rax
+ rorx r13,rax,41
+ rorx r15,rax,18
+ lea r8,QWORD PTR[r14*1+r8]
+ lea rdx,QWORD PTR[r12*1+rdx]
+ andn r12,rax,rcx
+ xor r13,r15
+ rorx r14,rax,14
+ lea rdx,QWORD PTR[r12*1+rdx]
+ xor r13,r14
+ mov r15,r8
+ rorx r12,r8,39
+ lea rdx,QWORD PTR[r13*1+rdx]
+ xor r15,r9
+ rorx r14,r8,34
+ rorx r13,r8,28
+ lea r11,QWORD PTR[rdx*1+r11]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,r9
+ xor r14,r13
+ lea rdx,QWORD PTR[rdi*1+rdx]
+ mov r12,rax
+ add rcx,QWORD PTR[((72+16))+rbp]
+ and r12,r11
+ rorx r13,r11,41
+ rorx rdi,r11,18
+ lea rdx,QWORD PTR[r14*1+rdx]
+ lea rcx,QWORD PTR[r12*1+rcx]
+ andn r12,r11,rbx
+ xor r13,rdi
+ rorx r14,r11,14
+ lea rcx,QWORD PTR[r12*1+rcx]
+ xor r13,r14
+ mov rdi,rdx
+ rorx r12,rdx,39
+ lea rcx,QWORD PTR[r13*1+rcx]
+ xor rdi,r8
+ rorx r14,rdx,34
+ rorx r13,rdx,28
+ lea r10,QWORD PTR[rcx*1+r10]
+ and r15,rdi
+ xor r14,r12
+ xor r15,r8
+ xor r14,r13
+ lea rcx,QWORD PTR[r15*1+rcx]
+ mov r12,r11
+ add rbx,QWORD PTR[((96+16))+rbp]
+ and r12,r10
+ rorx r13,r10,41
+ rorx r15,r10,18
+ lea rcx,QWORD PTR[r14*1+rcx]
+ lea rbx,QWORD PTR[r12*1+rbx]
+ andn r12,r10,rax
+ xor r13,r15
+ rorx r14,r10,14
+ lea rbx,QWORD PTR[r12*1+rbx]
+ xor r13,r14
+ mov r15,rcx
+ rorx r12,rcx,39
+ lea rbx,QWORD PTR[r13*1+rbx]
+ xor r15,rdx
+ rorx r14,rcx,34
+ rorx r13,rcx,28
+ lea r9,QWORD PTR[rbx*1+r9]
+ and rdi,r15
+ xor r14,r12
+ xor rdi,rdx
+ xor r14,r13
+ lea rbx,QWORD PTR[rdi*1+rbx]
+ mov r12,r10
+ add rax,QWORD PTR[((104+16))+rbp]
+ and r12,r9
+ rorx r13,r9,41
+ rorx rdi,r9,18
+ lea rbx,QWORD PTR[r14*1+rbx]
+ lea rax,QWORD PTR[r12*1+rax]
+ andn r12,r9,r11
+ xor r13,rdi
+ rorx r14,r9,14
+ lea rax,QWORD PTR[r12*1+rax]
+ xor r13,r14
+ mov rdi,rbx
+ rorx r12,rbx,39
+ lea rax,QWORD PTR[r13*1+rax]
+ xor rdi,rcx
+ rorx r14,rbx,34
+ rorx r13,rbx,28
+ lea r8,QWORD PTR[rax*1+r8]
+ and r15,rdi
+ xor r14,r12
+ xor r15,rcx
+ xor r14,r13
+ lea rax,QWORD PTR[r15*1+rax]
+ mov r12,r9
+ lea rbp,QWORD PTR[((-128))+rbp]
+ cmp rbp,rsp
+ jae $L$ower_avx2
+
+ mov rdi,QWORD PTR[1280+rsp]
+ add rax,r14
+
+ lea rsp,QWORD PTR[1152+rsp]
+
+
+
+ add rax,QWORD PTR[rdi]
+ add rbx,QWORD PTR[8+rdi]
+ add rcx,QWORD PTR[16+rdi]
+ add rdx,QWORD PTR[24+rdi]
+ add r8,QWORD PTR[32+rdi]
+ add r9,QWORD PTR[40+rdi]
+ lea rsi,QWORD PTR[256+rsi]
+ add r10,QWORD PTR[48+rdi]
+ mov r12,rsi
+ add r11,QWORD PTR[56+rdi]
+ cmp rsi,QWORD PTR[((128+16))+rsp]
+
+ mov QWORD PTR[rdi],rax
+ cmove r12,rsp
+ mov QWORD PTR[8+rdi],rbx
+ mov QWORD PTR[16+rdi],rcx
+ mov QWORD PTR[24+rdi],rdx
+ mov QWORD PTR[32+rdi],r8
+ mov QWORD PTR[40+rdi],r9
+ mov QWORD PTR[48+rdi],r10
+ mov QWORD PTR[56+rdi],r11
+
+ jbe $L$oop_avx2
+ lea rbp,QWORD PTR[rsp]
+
+
+
+
+$L$done_avx2::
+ mov rsi,QWORD PTR[152+rbp]
+
+ vzeroupper
+ movaps xmm6,XMMWORD PTR[((128+32))+rbp]
+ movaps xmm7,XMMWORD PTR[((128+48))+rbp]
+ movaps xmm8,XMMWORD PTR[((128+64))+rbp]
+ movaps xmm9,XMMWORD PTR[((128+80))+rbp]
+ movaps xmm10,XMMWORD PTR[((128+96))+rbp]
+ movaps xmm11,XMMWORD PTR[((128+112))+rbp]
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue_avx2::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_sha512_block_data_order_avx2::
+sha512_block_data_order_avx2 ENDP
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ mov rsi,QWORD PTR[8+r9]
+ mov r11,QWORD PTR[56+r9]
+
+ mov r10d,DWORD PTR[r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ mov r10d,DWORD PTR[4+r11]
+ lea r10,QWORD PTR[r10*1+rsi]
+ cmp rbx,r10
+ jae $L$in_prologue
+ lea r10,QWORD PTR[$L$avx2_shortcut]
+ cmp rbx,r10
+ jb $L$not_in_avx2
+
+ and rax,-256*8
+ add rax,1152
+$L$not_in_avx2::
+ mov rsi,rax
+ mov rax,QWORD PTR[((128+24))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+ lea r10,QWORD PTR[$L$epilogue]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ lea rsi,QWORD PTR[((128+32))+rsi]
+ lea rdi,QWORD PTR[512+r8]
+ mov ecx,12
+ DD 0a548f3fch
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_sha512_block_data_order
+ DD imagerel $L$SEH_end_sha512_block_data_order
+ DD imagerel $L$SEH_info_sha512_block_data_order
+ DD imagerel $L$SEH_begin_sha512_block_data_order_xop
+ DD imagerel $L$SEH_end_sha512_block_data_order_xop
+ DD imagerel $L$SEH_info_sha512_block_data_order_xop
+ DD imagerel $L$SEH_begin_sha512_block_data_order_avx
+ DD imagerel $L$SEH_end_sha512_block_data_order_avx
+ DD imagerel $L$SEH_info_sha512_block_data_order_avx
+ DD imagerel $L$SEH_begin_sha512_block_data_order_avx2
+ DD imagerel $L$SEH_end_sha512_block_data_order_avx2
+ DD imagerel $L$SEH_info_sha512_block_data_order_avx2
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_sha512_block_data_order::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue,imagerel $L$epilogue
+$L$SEH_info_sha512_block_data_order_xop::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue_xop,imagerel $L$epilogue_xop
+$L$SEH_info_sha512_block_data_order_avx::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue_avx,imagerel $L$epilogue_avx
+$L$SEH_info_sha512_block_data_order_avx2::
+DB 9,0,0,0
+ DD imagerel se_handler
+ DD imagerel $L$prologue_avx2,imagerel $L$epilogue_avx2
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/uplink-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/uplink-x86_64.masm
index 31d6ad785b..6d844cdecf 100644
--- a/contrib/libs/openssl/asm/windows/crypto/uplink-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/uplink-x86_64.masm
@@ -1,504 +1,504 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-EXTERN OPENSSL_Uplink:NEAR
-PUBLIC OPENSSL_UplinkTable
-
-ALIGN 16
-_lazy1 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,1
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[8+rax]
-_lazy1_end::
-_lazy1 ENDP
-
-ALIGN 16
-_lazy2 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,2
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[16+rax]
-_lazy2_end::
-_lazy2 ENDP
-
-ALIGN 16
-_lazy3 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,3
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[24+rax]
-_lazy3_end::
-_lazy3 ENDP
-
-ALIGN 16
-_lazy4 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,4
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[32+rax]
-_lazy4_end::
-_lazy4 ENDP
-
-ALIGN 16
-_lazy5 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,5
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[40+rax]
-_lazy5_end::
-_lazy5 ENDP
-
-ALIGN 16
-_lazy6 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,6
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[48+rax]
-_lazy6_end::
-_lazy6 ENDP
-
-ALIGN 16
-_lazy7 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,7
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[56+rax]
-_lazy7_end::
-_lazy7 ENDP
-
-ALIGN 16
-_lazy8 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,8
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[64+rax]
-_lazy8_end::
-_lazy8 ENDP
-
-ALIGN 16
-_lazy9 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,9
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[72+rax]
-_lazy9_end::
-_lazy9 ENDP
-
-ALIGN 16
-_lazy10 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,10
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[80+rax]
-_lazy10_end::
-_lazy10 ENDP
-
-ALIGN 16
-_lazy11 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,11
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[88+rax]
-_lazy11_end::
-_lazy11 ENDP
-
-ALIGN 16
-_lazy12 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,12
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[96+rax]
-_lazy12_end::
-_lazy12 ENDP
-
-ALIGN 16
-_lazy13 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,13
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[104+rax]
-_lazy13_end::
-_lazy13 ENDP
-
-ALIGN 16
-_lazy14 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,14
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[112+rax]
-_lazy14_end::
-_lazy14 ENDP
-
-ALIGN 16
-_lazy15 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,15
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[120+rax]
-_lazy15_end::
-_lazy15 ENDP
-
-ALIGN 16
-_lazy16 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,16
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[128+rax]
-_lazy16_end::
-_lazy16 ENDP
-
-ALIGN 16
-_lazy17 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,17
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[136+rax]
-_lazy17_end::
-_lazy17 ENDP
-
-ALIGN 16
-_lazy18 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,18
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[144+rax]
-_lazy18_end::
-_lazy18 ENDP
-
-ALIGN 16
-_lazy19 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,19
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[152+rax]
-_lazy19_end::
-_lazy19 ENDP
-
-ALIGN 16
-_lazy20 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,20
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[160+rax]
-_lazy20_end::
-_lazy20 ENDP
-
-ALIGN 16
-_lazy21 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,21
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[168+rax]
-_lazy21_end::
-_lazy21 ENDP
-
-ALIGN 16
-_lazy22 PROC PRIVATE
-DB 048h,083h,0ECh,028h
- mov QWORD PTR[48+rsp],rcx
- mov QWORD PTR[56+rsp],rdx
- mov QWORD PTR[64+rsp],r8
- mov QWORD PTR[72+rsp],r9
- lea rcx,QWORD PTR[OPENSSL_UplinkTable]
- mov rdx,22
- call OPENSSL_Uplink
- mov rcx,QWORD PTR[48+rsp]
- mov rdx,QWORD PTR[56+rsp]
- mov r8,QWORD PTR[64+rsp]
- mov r9,QWORD PTR[72+rsp]
- lea rax,QWORD PTR[OPENSSL_UplinkTable]
- add rsp,40
- jmp QWORD PTR[176+rax]
-_lazy22_end::
-_lazy22 ENDP
-.text$ ENDS
-_DATA SEGMENT
-OPENSSL_UplinkTable::
- DQ 22
- DQ _lazy1
- DQ _lazy2
- DQ _lazy3
- DQ _lazy4
- DQ _lazy5
- DQ _lazy6
- DQ _lazy7
- DQ _lazy8
- DQ _lazy9
- DQ _lazy10
- DQ _lazy11
- DQ _lazy12
- DQ _lazy13
- DQ _lazy14
- DQ _lazy15
- DQ _lazy16
- DQ _lazy17
- DQ _lazy18
- DQ _lazy19
- DQ _lazy20
- DQ _lazy21
- DQ _lazy22
-_DATA ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel _lazy1,imagerel _lazy1_end,imagerel _lazy_unwind_info
- DD imagerel _lazy2,imagerel _lazy2_end,imagerel _lazy_unwind_info
- DD imagerel _lazy3,imagerel _lazy3_end,imagerel _lazy_unwind_info
- DD imagerel _lazy4,imagerel _lazy4_end,imagerel _lazy_unwind_info
- DD imagerel _lazy5,imagerel _lazy5_end,imagerel _lazy_unwind_info
- DD imagerel _lazy6,imagerel _lazy6_end,imagerel _lazy_unwind_info
- DD imagerel _lazy7,imagerel _lazy7_end,imagerel _lazy_unwind_info
- DD imagerel _lazy8,imagerel _lazy8_end,imagerel _lazy_unwind_info
- DD imagerel _lazy9,imagerel _lazy9_end,imagerel _lazy_unwind_info
- DD imagerel _lazy10,imagerel _lazy10_end,imagerel _lazy_unwind_info
- DD imagerel _lazy11,imagerel _lazy11_end,imagerel _lazy_unwind_info
- DD imagerel _lazy12,imagerel _lazy12_end,imagerel _lazy_unwind_info
- DD imagerel _lazy13,imagerel _lazy13_end,imagerel _lazy_unwind_info
- DD imagerel _lazy14,imagerel _lazy14_end,imagerel _lazy_unwind_info
- DD imagerel _lazy15,imagerel _lazy15_end,imagerel _lazy_unwind_info
- DD imagerel _lazy16,imagerel _lazy16_end,imagerel _lazy_unwind_info
- DD imagerel _lazy17,imagerel _lazy17_end,imagerel _lazy_unwind_info
- DD imagerel _lazy18,imagerel _lazy18_end,imagerel _lazy_unwind_info
- DD imagerel _lazy19,imagerel _lazy19_end,imagerel _lazy_unwind_info
- DD imagerel _lazy20,imagerel _lazy20_end,imagerel _lazy_unwind_info
- DD imagerel _lazy21,imagerel _lazy21_end,imagerel _lazy_unwind_info
- DD imagerel _lazy22,imagerel _lazy22_end,imagerel _lazy_unwind_info
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-_lazy_unwind_info::
-DB 001h,004h,001h,000h
-DB 004h,042h,000h,000h
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+EXTERN OPENSSL_Uplink:NEAR
+PUBLIC OPENSSL_UplinkTable
+
+ALIGN 16
+_lazy1 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,1
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[8+rax]
+_lazy1_end::
+_lazy1 ENDP
+
+ALIGN 16
+_lazy2 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,2
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[16+rax]
+_lazy2_end::
+_lazy2 ENDP
+
+ALIGN 16
+_lazy3 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,3
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[24+rax]
+_lazy3_end::
+_lazy3 ENDP
+
+ALIGN 16
+_lazy4 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,4
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[32+rax]
+_lazy4_end::
+_lazy4 ENDP
+
+ALIGN 16
+_lazy5 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,5
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[40+rax]
+_lazy5_end::
+_lazy5 ENDP
+
+ALIGN 16
+_lazy6 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,6
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[48+rax]
+_lazy6_end::
+_lazy6 ENDP
+
+ALIGN 16
+_lazy7 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,7
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[56+rax]
+_lazy7_end::
+_lazy7 ENDP
+
+ALIGN 16
+_lazy8 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,8
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[64+rax]
+_lazy8_end::
+_lazy8 ENDP
+
+ALIGN 16
+_lazy9 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,9
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[72+rax]
+_lazy9_end::
+_lazy9 ENDP
+
+ALIGN 16
+_lazy10 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,10
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[80+rax]
+_lazy10_end::
+_lazy10 ENDP
+
+ALIGN 16
+_lazy11 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,11
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[88+rax]
+_lazy11_end::
+_lazy11 ENDP
+
+ALIGN 16
+_lazy12 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,12
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[96+rax]
+_lazy12_end::
+_lazy12 ENDP
+
+ALIGN 16
+_lazy13 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,13
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[104+rax]
+_lazy13_end::
+_lazy13 ENDP
+
+ALIGN 16
+_lazy14 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,14
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[112+rax]
+_lazy14_end::
+_lazy14 ENDP
+
+ALIGN 16
+_lazy15 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,15
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[120+rax]
+_lazy15_end::
+_lazy15 ENDP
+
+ALIGN 16
+_lazy16 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,16
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[128+rax]
+_lazy16_end::
+_lazy16 ENDP
+
+ALIGN 16
+_lazy17 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,17
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[136+rax]
+_lazy17_end::
+_lazy17 ENDP
+
+ALIGN 16
+_lazy18 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,18
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[144+rax]
+_lazy18_end::
+_lazy18 ENDP
+
+ALIGN 16
+_lazy19 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,19
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[152+rax]
+_lazy19_end::
+_lazy19 ENDP
+
+ALIGN 16
+_lazy20 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,20
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[160+rax]
+_lazy20_end::
+_lazy20 ENDP
+
+ALIGN 16
+_lazy21 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,21
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[168+rax]
+_lazy21_end::
+_lazy21 ENDP
+
+ALIGN 16
+_lazy22 PROC PRIVATE
+DB 048h,083h,0ECh,028h
+ mov QWORD PTR[48+rsp],rcx
+ mov QWORD PTR[56+rsp],rdx
+ mov QWORD PTR[64+rsp],r8
+ mov QWORD PTR[72+rsp],r9
+ lea rcx,QWORD PTR[OPENSSL_UplinkTable]
+ mov rdx,22
+ call OPENSSL_Uplink
+ mov rcx,QWORD PTR[48+rsp]
+ mov rdx,QWORD PTR[56+rsp]
+ mov r8,QWORD PTR[64+rsp]
+ mov r9,QWORD PTR[72+rsp]
+ lea rax,QWORD PTR[OPENSSL_UplinkTable]
+ add rsp,40
+ jmp QWORD PTR[176+rax]
+_lazy22_end::
+_lazy22 ENDP
+.text$ ENDS
+_DATA SEGMENT
+OPENSSL_UplinkTable::
+ DQ 22
+ DQ _lazy1
+ DQ _lazy2
+ DQ _lazy3
+ DQ _lazy4
+ DQ _lazy5
+ DQ _lazy6
+ DQ _lazy7
+ DQ _lazy8
+ DQ _lazy9
+ DQ _lazy10
+ DQ _lazy11
+ DQ _lazy12
+ DQ _lazy13
+ DQ _lazy14
+ DQ _lazy15
+ DQ _lazy16
+ DQ _lazy17
+ DQ _lazy18
+ DQ _lazy19
+ DQ _lazy20
+ DQ _lazy21
+ DQ _lazy22
+_DATA ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel _lazy1,imagerel _lazy1_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy2,imagerel _lazy2_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy3,imagerel _lazy3_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy4,imagerel _lazy4_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy5,imagerel _lazy5_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy6,imagerel _lazy6_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy7,imagerel _lazy7_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy8,imagerel _lazy8_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy9,imagerel _lazy9_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy10,imagerel _lazy10_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy11,imagerel _lazy11_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy12,imagerel _lazy12_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy13,imagerel _lazy13_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy14,imagerel _lazy14_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy15,imagerel _lazy15_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy16,imagerel _lazy16_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy17,imagerel _lazy17_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy18,imagerel _lazy18_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy19,imagerel _lazy19_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy20,imagerel _lazy20_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy21,imagerel _lazy21_end,imagerel _lazy_unwind_info
+ DD imagerel _lazy22,imagerel _lazy22_end,imagerel _lazy_unwind_info
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+_lazy_unwind_info::
+DB 001h,004h,001h,000h
+DB 004h,042h,000h,000h
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/whrlpool/wp-x86_64.masm b/contrib/libs/openssl/asm/windows/crypto/whrlpool/wp-x86_64.masm
index f0102e87fe..c5c15dd3a6 100644
--- a/contrib/libs/openssl/asm/windows/crypto/whrlpool/wp-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/whrlpool/wp-x86_64.masm
@@ -1,991 +1,991 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-PUBLIC whirlpool_block
-
-ALIGN 16
-whirlpool_block PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_whirlpool_block::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
-
- mov rax,rsp
-
- push rbx
-
- push rbp
-
- push r12
-
- push r13
-
- push r14
-
- push r15
-
-
- sub rsp,128+40
- and rsp,-64
-
- lea r10,QWORD PTR[128+rsp]
- mov QWORD PTR[r10],rdi
- mov QWORD PTR[8+r10],rsi
- mov QWORD PTR[16+r10],rdx
- mov QWORD PTR[32+r10],rax
-
-$L$prologue::
-
- mov rbx,r10
- lea rbp,QWORD PTR[$L$table]
-
- xor rcx,rcx
- xor rdx,rdx
- mov r8,QWORD PTR[rdi]
- mov r9,QWORD PTR[8+rdi]
- mov r10,QWORD PTR[16+rdi]
- mov r11,QWORD PTR[24+rdi]
- mov r12,QWORD PTR[32+rdi]
- mov r13,QWORD PTR[40+rdi]
- mov r14,QWORD PTR[48+rdi]
- mov r15,QWORD PTR[56+rdi]
-$L$outerloop::
- mov QWORD PTR[rsp],r8
- mov QWORD PTR[8+rsp],r9
- mov QWORD PTR[16+rsp],r10
- mov QWORD PTR[24+rsp],r11
- mov QWORD PTR[32+rsp],r12
- mov QWORD PTR[40+rsp],r13
- mov QWORD PTR[48+rsp],r14
- mov QWORD PTR[56+rsp],r15
- xor r8,QWORD PTR[rsi]
- xor r9,QWORD PTR[8+rsi]
- xor r10,QWORD PTR[16+rsi]
- xor r11,QWORD PTR[24+rsi]
- xor r12,QWORD PTR[32+rsi]
- xor r13,QWORD PTR[40+rsi]
- xor r14,QWORD PTR[48+rsi]
- xor r15,QWORD PTR[56+rsi]
- mov QWORD PTR[((64+0))+rsp],r8
- mov QWORD PTR[((64+8))+rsp],r9
- mov QWORD PTR[((64+16))+rsp],r10
- mov QWORD PTR[((64+24))+rsp],r11
- mov QWORD PTR[((64+32))+rsp],r12
- mov QWORD PTR[((64+40))+rsp],r13
- mov QWORD PTR[((64+48))+rsp],r14
- mov QWORD PTR[((64+56))+rsp],r15
- xor rsi,rsi
- mov QWORD PTR[24+rbx],rsi
- jmp $L$round
-ALIGN 16
-$L$round::
- mov r8,QWORD PTR[4096+rsi*8+rbp]
- mov eax,DWORD PTR[rsp]
- mov ebx,DWORD PTR[4+rsp]
- movzx ecx,al
- movzx edx,ah
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r8,QWORD PTR[rsi*8+rbp]
- mov r9,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((0+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- mov r10,QWORD PTR[6+rsi*8+rbp]
- mov r11,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- mov r12,QWORD PTR[4+rsi*8+rbp]
- mov r13,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((0+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- mov r14,QWORD PTR[2+rsi*8+rbp]
- mov r15,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r9,QWORD PTR[rsi*8+rbp]
- xor r10,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((8+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r11,QWORD PTR[6+rsi*8+rbp]
- xor r12,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r13,QWORD PTR[4+rsi*8+rbp]
- xor r14,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((8+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r15,QWORD PTR[2+rsi*8+rbp]
- xor r8,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r10,QWORD PTR[rsi*8+rbp]
- xor r11,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((16+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r12,QWORD PTR[6+rsi*8+rbp]
- xor r13,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r14,QWORD PTR[4+rsi*8+rbp]
- xor r15,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((16+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r8,QWORD PTR[2+rsi*8+rbp]
- xor r9,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r11,QWORD PTR[rsi*8+rbp]
- xor r12,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((24+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r13,QWORD PTR[6+rsi*8+rbp]
- xor r14,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r15,QWORD PTR[4+rsi*8+rbp]
- xor r8,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((24+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r9,QWORD PTR[2+rsi*8+rbp]
- xor r10,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r12,QWORD PTR[rsi*8+rbp]
- xor r13,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((32+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r14,QWORD PTR[6+rsi*8+rbp]
- xor r15,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r8,QWORD PTR[4+rsi*8+rbp]
- xor r9,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((32+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r10,QWORD PTR[2+rsi*8+rbp]
- xor r11,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r13,QWORD PTR[rsi*8+rbp]
- xor r14,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((40+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r15,QWORD PTR[6+rsi*8+rbp]
- xor r8,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r9,QWORD PTR[4+rsi*8+rbp]
- xor r10,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((40+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r11,QWORD PTR[2+rsi*8+rbp]
- xor r12,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r14,QWORD PTR[rsi*8+rbp]
- xor r15,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((48+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r8,QWORD PTR[6+rsi*8+rbp]
- xor r9,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r10,QWORD PTR[4+rsi*8+rbp]
- xor r11,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((48+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r12,QWORD PTR[2+rsi*8+rbp]
- xor r13,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r15,QWORD PTR[rsi*8+rbp]
- xor r8,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((56+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r9,QWORD PTR[6+rsi*8+rbp]
- xor r10,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r11,QWORD PTR[4+rsi*8+rbp]
- xor r12,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((56+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r13,QWORD PTR[2+rsi*8+rbp]
- xor r14,QWORD PTR[1+rdi*8+rbp]
- mov QWORD PTR[rsp],r8
- mov QWORD PTR[8+rsp],r9
- mov QWORD PTR[16+rsp],r10
- mov QWORD PTR[24+rsp],r11
- mov QWORD PTR[32+rsp],r12
- mov QWORD PTR[40+rsp],r13
- mov QWORD PTR[48+rsp],r14
- mov QWORD PTR[56+rsp],r15
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r8,QWORD PTR[rsi*8+rbp]
- xor r9,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((64+0+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r10,QWORD PTR[6+rsi*8+rbp]
- xor r11,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r12,QWORD PTR[4+rsi*8+rbp]
- xor r13,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((64+0+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r14,QWORD PTR[2+rsi*8+rbp]
- xor r15,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r9,QWORD PTR[rsi*8+rbp]
- xor r10,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((64+8+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r11,QWORD PTR[6+rsi*8+rbp]
- xor r12,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r13,QWORD PTR[4+rsi*8+rbp]
- xor r14,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((64+8+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r15,QWORD PTR[2+rsi*8+rbp]
- xor r8,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r10,QWORD PTR[rsi*8+rbp]
- xor r11,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((64+16+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r12,QWORD PTR[6+rsi*8+rbp]
- xor r13,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r14,QWORD PTR[4+rsi*8+rbp]
- xor r15,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((64+16+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r8,QWORD PTR[2+rsi*8+rbp]
- xor r9,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r11,QWORD PTR[rsi*8+rbp]
- xor r12,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((64+24+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r13,QWORD PTR[6+rsi*8+rbp]
- xor r14,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r15,QWORD PTR[4+rsi*8+rbp]
- xor r8,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((64+24+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r9,QWORD PTR[2+rsi*8+rbp]
- xor r10,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r12,QWORD PTR[rsi*8+rbp]
- xor r13,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((64+32+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r14,QWORD PTR[6+rsi*8+rbp]
- xor r15,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r8,QWORD PTR[4+rsi*8+rbp]
- xor r9,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((64+32+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r10,QWORD PTR[2+rsi*8+rbp]
- xor r11,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r13,QWORD PTR[rsi*8+rbp]
- xor r14,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((64+40+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r15,QWORD PTR[6+rsi*8+rbp]
- xor r8,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r9,QWORD PTR[4+rsi*8+rbp]
- xor r10,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((64+40+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r11,QWORD PTR[2+rsi*8+rbp]
- xor r12,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r14,QWORD PTR[rsi*8+rbp]
- xor r15,QWORD PTR[7+rdi*8+rbp]
- mov eax,DWORD PTR[((64+48+8))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r8,QWORD PTR[6+rsi*8+rbp]
- xor r9,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r10,QWORD PTR[4+rsi*8+rbp]
- xor r11,QWORD PTR[3+rdi*8+rbp]
- mov ebx,DWORD PTR[((64+48+8+4))+rsp]
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r12,QWORD PTR[2+rsi*8+rbp]
- xor r13,QWORD PTR[1+rdi*8+rbp]
- shr eax,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r15,QWORD PTR[rsi*8+rbp]
- xor r8,QWORD PTR[7+rdi*8+rbp]
-
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r9,QWORD PTR[6+rsi*8+rbp]
- xor r10,QWORD PTR[5+rdi*8+rbp]
- shr ebx,16
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,bl
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,bh
- xor r11,QWORD PTR[4+rsi*8+rbp]
- xor r12,QWORD PTR[3+rdi*8+rbp]
-
- lea rsi,QWORD PTR[rcx*1+rcx]
- movzx ecx,al
- lea rdi,QWORD PTR[rdx*1+rdx]
- movzx edx,ah
- xor r13,QWORD PTR[2+rsi*8+rbp]
- xor r14,QWORD PTR[1+rdi*8+rbp]
- lea rbx,QWORD PTR[128+rsp]
- mov rsi,QWORD PTR[24+rbx]
- add rsi,1
- cmp rsi,10
- je $L$roundsdone
-
- mov QWORD PTR[24+rbx],rsi
- mov QWORD PTR[((64+0))+rsp],r8
- mov QWORD PTR[((64+8))+rsp],r9
- mov QWORD PTR[((64+16))+rsp],r10
- mov QWORD PTR[((64+24))+rsp],r11
- mov QWORD PTR[((64+32))+rsp],r12
- mov QWORD PTR[((64+40))+rsp],r13
- mov QWORD PTR[((64+48))+rsp],r14
- mov QWORD PTR[((64+56))+rsp],r15
- jmp $L$round
-ALIGN 16
-$L$roundsdone::
- mov rdi,QWORD PTR[rbx]
- mov rsi,QWORD PTR[8+rbx]
- mov rax,QWORD PTR[16+rbx]
- xor r8,QWORD PTR[rsi]
- xor r9,QWORD PTR[8+rsi]
- xor r10,QWORD PTR[16+rsi]
- xor r11,QWORD PTR[24+rsi]
- xor r12,QWORD PTR[32+rsi]
- xor r13,QWORD PTR[40+rsi]
- xor r14,QWORD PTR[48+rsi]
- xor r15,QWORD PTR[56+rsi]
- xor r8,QWORD PTR[rdi]
- xor r9,QWORD PTR[8+rdi]
- xor r10,QWORD PTR[16+rdi]
- xor r11,QWORD PTR[24+rdi]
- xor r12,QWORD PTR[32+rdi]
- xor r13,QWORD PTR[40+rdi]
- xor r14,QWORD PTR[48+rdi]
- xor r15,QWORD PTR[56+rdi]
- mov QWORD PTR[rdi],r8
- mov QWORD PTR[8+rdi],r9
- mov QWORD PTR[16+rdi],r10
- mov QWORD PTR[24+rdi],r11
- mov QWORD PTR[32+rdi],r12
- mov QWORD PTR[40+rdi],r13
- mov QWORD PTR[48+rdi],r14
- mov QWORD PTR[56+rdi],r15
- lea rsi,QWORD PTR[64+rsi]
- sub rax,1
- jz $L$alldone
- mov QWORD PTR[8+rbx],rsi
- mov QWORD PTR[16+rbx],rax
- jmp $L$outerloop
-$L$alldone::
- mov rsi,QWORD PTR[32+rbx]
-
- mov r15,QWORD PTR[((-48))+rsi]
-
- mov r14,QWORD PTR[((-40))+rsi]
-
- mov r13,QWORD PTR[((-32))+rsi]
-
- mov r12,QWORD PTR[((-24))+rsi]
-
- mov rbp,QWORD PTR[((-16))+rsi]
-
- mov rbx,QWORD PTR[((-8))+rsi]
-
- lea rsp,QWORD PTR[rsi]
-
-$L$epilogue::
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_whirlpool_block::
-whirlpool_block ENDP
-
-ALIGN 64
-
-$L$table::
-DB 24,24,96,24,192,120,48,216,24,24,96,24,192,120,48,216
-DB 35,35,140,35,5,175,70,38,35,35,140,35,5,175,70,38
-DB 198,198,63,198,126,249,145,184,198,198,63,198,126,249,145,184
-DB 232,232,135,232,19,111,205,251,232,232,135,232,19,111,205,251
-DB 135,135,38,135,76,161,19,203,135,135,38,135,76,161,19,203
-DB 184,184,218,184,169,98,109,17,184,184,218,184,169,98,109,17
-DB 1,1,4,1,8,5,2,9,1,1,4,1,8,5,2,9
-DB 79,79,33,79,66,110,158,13,79,79,33,79,66,110,158,13
-DB 54,54,216,54,173,238,108,155,54,54,216,54,173,238,108,155
-DB 166,166,162,166,89,4,81,255,166,166,162,166,89,4,81,255
-DB 210,210,111,210,222,189,185,12,210,210,111,210,222,189,185,12
-DB 245,245,243,245,251,6,247,14,245,245,243,245,251,6,247,14
-DB 121,121,249,121,239,128,242,150,121,121,249,121,239,128,242,150
-DB 111,111,161,111,95,206,222,48,111,111,161,111,95,206,222,48
-DB 145,145,126,145,252,239,63,109,145,145,126,145,252,239,63,109
-DB 82,82,85,82,170,7,164,248,82,82,85,82,170,7,164,248
-DB 96,96,157,96,39,253,192,71,96,96,157,96,39,253,192,71
-DB 188,188,202,188,137,118,101,53,188,188,202,188,137,118,101,53
-DB 155,155,86,155,172,205,43,55,155,155,86,155,172,205,43,55
-DB 142,142,2,142,4,140,1,138,142,142,2,142,4,140,1,138
-DB 163,163,182,163,113,21,91,210,163,163,182,163,113,21,91,210
-DB 12,12,48,12,96,60,24,108,12,12,48,12,96,60,24,108
-DB 123,123,241,123,255,138,246,132,123,123,241,123,255,138,246,132
-DB 53,53,212,53,181,225,106,128,53,53,212,53,181,225,106,128
-DB 29,29,116,29,232,105,58,245,29,29,116,29,232,105,58,245
-DB 224,224,167,224,83,71,221,179,224,224,167,224,83,71,221,179
-DB 215,215,123,215,246,172,179,33,215,215,123,215,246,172,179,33
-DB 194,194,47,194,94,237,153,156,194,194,47,194,94,237,153,156
-DB 46,46,184,46,109,150,92,67,46,46,184,46,109,150,92,67
-DB 75,75,49,75,98,122,150,41,75,75,49,75,98,122,150,41
-DB 254,254,223,254,163,33,225,93,254,254,223,254,163,33,225,93
-DB 87,87,65,87,130,22,174,213,87,87,65,87,130,22,174,213
-DB 21,21,84,21,168,65,42,189,21,21,84,21,168,65,42,189
-DB 119,119,193,119,159,182,238,232,119,119,193,119,159,182,238,232
-DB 55,55,220,55,165,235,110,146,55,55,220,55,165,235,110,146
-DB 229,229,179,229,123,86,215,158,229,229,179,229,123,86,215,158
-DB 159,159,70,159,140,217,35,19,159,159,70,159,140,217,35,19
-DB 240,240,231,240,211,23,253,35,240,240,231,240,211,23,253,35
-DB 74,74,53,74,106,127,148,32,74,74,53,74,106,127,148,32
-DB 218,218,79,218,158,149,169,68,218,218,79,218,158,149,169,68
-DB 88,88,125,88,250,37,176,162,88,88,125,88,250,37,176,162
-DB 201,201,3,201,6,202,143,207,201,201,3,201,6,202,143,207
-DB 41,41,164,41,85,141,82,124,41,41,164,41,85,141,82,124
-DB 10,10,40,10,80,34,20,90,10,10,40,10,80,34,20,90
-DB 177,177,254,177,225,79,127,80,177,177,254,177,225,79,127,80
-DB 160,160,186,160,105,26,93,201,160,160,186,160,105,26,93,201
-DB 107,107,177,107,127,218,214,20,107,107,177,107,127,218,214,20
-DB 133,133,46,133,92,171,23,217,133,133,46,133,92,171,23,217
-DB 189,189,206,189,129,115,103,60,189,189,206,189,129,115,103,60
-DB 93,93,105,93,210,52,186,143,93,93,105,93,210,52,186,143
-DB 16,16,64,16,128,80,32,144,16,16,64,16,128,80,32,144
-DB 244,244,247,244,243,3,245,7,244,244,247,244,243,3,245,7
-DB 203,203,11,203,22,192,139,221,203,203,11,203,22,192,139,221
-DB 62,62,248,62,237,198,124,211,62,62,248,62,237,198,124,211
-DB 5,5,20,5,40,17,10,45,5,5,20,5,40,17,10,45
-DB 103,103,129,103,31,230,206,120,103,103,129,103,31,230,206,120
-DB 228,228,183,228,115,83,213,151,228,228,183,228,115,83,213,151
-DB 39,39,156,39,37,187,78,2,39,39,156,39,37,187,78,2
-DB 65,65,25,65,50,88,130,115,65,65,25,65,50,88,130,115
-DB 139,139,22,139,44,157,11,167,139,139,22,139,44,157,11,167
-DB 167,167,166,167,81,1,83,246,167,167,166,167,81,1,83,246
-DB 125,125,233,125,207,148,250,178,125,125,233,125,207,148,250,178
-DB 149,149,110,149,220,251,55,73,149,149,110,149,220,251,55,73
-DB 216,216,71,216,142,159,173,86,216,216,71,216,142,159,173,86
-DB 251,251,203,251,139,48,235,112,251,251,203,251,139,48,235,112
-DB 238,238,159,238,35,113,193,205,238,238,159,238,35,113,193,205
-DB 124,124,237,124,199,145,248,187,124,124,237,124,199,145,248,187
-DB 102,102,133,102,23,227,204,113,102,102,133,102,23,227,204,113
-DB 221,221,83,221,166,142,167,123,221,221,83,221,166,142,167,123
-DB 23,23,92,23,184,75,46,175,23,23,92,23,184,75,46,175
-DB 71,71,1,71,2,70,142,69,71,71,1,71,2,70,142,69
-DB 158,158,66,158,132,220,33,26,158,158,66,158,132,220,33,26
-DB 202,202,15,202,30,197,137,212,202,202,15,202,30,197,137,212
-DB 45,45,180,45,117,153,90,88,45,45,180,45,117,153,90,88
-DB 191,191,198,191,145,121,99,46,191,191,198,191,145,121,99,46
-DB 7,7,28,7,56,27,14,63,7,7,28,7,56,27,14,63
-DB 173,173,142,173,1,35,71,172,173,173,142,173,1,35,71,172
-DB 90,90,117,90,234,47,180,176,90,90,117,90,234,47,180,176
-DB 131,131,54,131,108,181,27,239,131,131,54,131,108,181,27,239
-DB 51,51,204,51,133,255,102,182,51,51,204,51,133,255,102,182
-DB 99,99,145,99,63,242,198,92,99,99,145,99,63,242,198,92
-DB 2,2,8,2,16,10,4,18,2,2,8,2,16,10,4,18
-DB 170,170,146,170,57,56,73,147,170,170,146,170,57,56,73,147
-DB 113,113,217,113,175,168,226,222,113,113,217,113,175,168,226,222
-DB 200,200,7,200,14,207,141,198,200,200,7,200,14,207,141,198
-DB 25,25,100,25,200,125,50,209,25,25,100,25,200,125,50,209
-DB 73,73,57,73,114,112,146,59,73,73,57,73,114,112,146,59
-DB 217,217,67,217,134,154,175,95,217,217,67,217,134,154,175,95
-DB 242,242,239,242,195,29,249,49,242,242,239,242,195,29,249,49
-DB 227,227,171,227,75,72,219,168,227,227,171,227,75,72,219,168
-DB 91,91,113,91,226,42,182,185,91,91,113,91,226,42,182,185
-DB 136,136,26,136,52,146,13,188,136,136,26,136,52,146,13,188
-DB 154,154,82,154,164,200,41,62,154,154,82,154,164,200,41,62
-DB 38,38,152,38,45,190,76,11,38,38,152,38,45,190,76,11
-DB 50,50,200,50,141,250,100,191,50,50,200,50,141,250,100,191
-DB 176,176,250,176,233,74,125,89,176,176,250,176,233,74,125,89
-DB 233,233,131,233,27,106,207,242,233,233,131,233,27,106,207,242
-DB 15,15,60,15,120,51,30,119,15,15,60,15,120,51,30,119
-DB 213,213,115,213,230,166,183,51,213,213,115,213,230,166,183,51
-DB 128,128,58,128,116,186,29,244,128,128,58,128,116,186,29,244
-DB 190,190,194,190,153,124,97,39,190,190,194,190,153,124,97,39
-DB 205,205,19,205,38,222,135,235,205,205,19,205,38,222,135,235
-DB 52,52,208,52,189,228,104,137,52,52,208,52,189,228,104,137
-DB 72,72,61,72,122,117,144,50,72,72,61,72,122,117,144,50
-DB 255,255,219,255,171,36,227,84,255,255,219,255,171,36,227,84
-DB 122,122,245,122,247,143,244,141,122,122,245,122,247,143,244,141
-DB 144,144,122,144,244,234,61,100,144,144,122,144,244,234,61,100
-DB 95,95,97,95,194,62,190,157,95,95,97,95,194,62,190,157
-DB 32,32,128,32,29,160,64,61,32,32,128,32,29,160,64,61
-DB 104,104,189,104,103,213,208,15,104,104,189,104,103,213,208,15
-DB 26,26,104,26,208,114,52,202,26,26,104,26,208,114,52,202
-DB 174,174,130,174,25,44,65,183,174,174,130,174,25,44,65,183
-DB 180,180,234,180,201,94,117,125,180,180,234,180,201,94,117,125
-DB 84,84,77,84,154,25,168,206,84,84,77,84,154,25,168,206
-DB 147,147,118,147,236,229,59,127,147,147,118,147,236,229,59,127
-DB 34,34,136,34,13,170,68,47,34,34,136,34,13,170,68,47
-DB 100,100,141,100,7,233,200,99,100,100,141,100,7,233,200,99
-DB 241,241,227,241,219,18,255,42,241,241,227,241,219,18,255,42
-DB 115,115,209,115,191,162,230,204,115,115,209,115,191,162,230,204
-DB 18,18,72,18,144,90,36,130,18,18,72,18,144,90,36,130
-DB 64,64,29,64,58,93,128,122,64,64,29,64,58,93,128,122
-DB 8,8,32,8,64,40,16,72,8,8,32,8,64,40,16,72
-DB 195,195,43,195,86,232,155,149,195,195,43,195,86,232,155,149
-DB 236,236,151,236,51,123,197,223,236,236,151,236,51,123,197,223
-DB 219,219,75,219,150,144,171,77,219,219,75,219,150,144,171,77
-DB 161,161,190,161,97,31,95,192,161,161,190,161,97,31,95,192
-DB 141,141,14,141,28,131,7,145,141,141,14,141,28,131,7,145
-DB 61,61,244,61,245,201,122,200,61,61,244,61,245,201,122,200
-DB 151,151,102,151,204,241,51,91,151,151,102,151,204,241,51,91
-DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-DB 207,207,27,207,54,212,131,249,207,207,27,207,54,212,131,249
-DB 43,43,172,43,69,135,86,110,43,43,172,43,69,135,86,110
-DB 118,118,197,118,151,179,236,225,118,118,197,118,151,179,236,225
-DB 130,130,50,130,100,176,25,230,130,130,50,130,100,176,25,230
-DB 214,214,127,214,254,169,177,40,214,214,127,214,254,169,177,40
-DB 27,27,108,27,216,119,54,195,27,27,108,27,216,119,54,195
-DB 181,181,238,181,193,91,119,116,181,181,238,181,193,91,119,116
-DB 175,175,134,175,17,41,67,190,175,175,134,175,17,41,67,190
-DB 106,106,181,106,119,223,212,29,106,106,181,106,119,223,212,29
-DB 80,80,93,80,186,13,160,234,80,80,93,80,186,13,160,234
-DB 69,69,9,69,18,76,138,87,69,69,9,69,18,76,138,87
-DB 243,243,235,243,203,24,251,56,243,243,235,243,203,24,251,56
-DB 48,48,192,48,157,240,96,173,48,48,192,48,157,240,96,173
-DB 239,239,155,239,43,116,195,196,239,239,155,239,43,116,195,196
-DB 63,63,252,63,229,195,126,218,63,63,252,63,229,195,126,218
-DB 85,85,73,85,146,28,170,199,85,85,73,85,146,28,170,199
-DB 162,162,178,162,121,16,89,219,162,162,178,162,121,16,89,219
-DB 234,234,143,234,3,101,201,233,234,234,143,234,3,101,201,233
-DB 101,101,137,101,15,236,202,106,101,101,137,101,15,236,202,106
-DB 186,186,210,186,185,104,105,3,186,186,210,186,185,104,105,3
-DB 47,47,188,47,101,147,94,74,47,47,188,47,101,147,94,74
-DB 192,192,39,192,78,231,157,142,192,192,39,192,78,231,157,142
-DB 222,222,95,222,190,129,161,96,222,222,95,222,190,129,161,96
-DB 28,28,112,28,224,108,56,252,28,28,112,28,224,108,56,252
-DB 253,253,211,253,187,46,231,70,253,253,211,253,187,46,231,70
-DB 77,77,41,77,82,100,154,31,77,77,41,77,82,100,154,31
-DB 146,146,114,146,228,224,57,118,146,146,114,146,228,224,57,118
-DB 117,117,201,117,143,188,234,250,117,117,201,117,143,188,234,250
-DB 6,6,24,6,48,30,12,54,6,6,24,6,48,30,12,54
-DB 138,138,18,138,36,152,9,174,138,138,18,138,36,152,9,174
-DB 178,178,242,178,249,64,121,75,178,178,242,178,249,64,121,75
-DB 230,230,191,230,99,89,209,133,230,230,191,230,99,89,209,133
-DB 14,14,56,14,112,54,28,126,14,14,56,14,112,54,28,126
-DB 31,31,124,31,248,99,62,231,31,31,124,31,248,99,62,231
-DB 98,98,149,98,55,247,196,85,98,98,149,98,55,247,196,85
-DB 212,212,119,212,238,163,181,58,212,212,119,212,238,163,181,58
-DB 168,168,154,168,41,50,77,129,168,168,154,168,41,50,77,129
-DB 150,150,98,150,196,244,49,82,150,150,98,150,196,244,49,82
-DB 249,249,195,249,155,58,239,98,249,249,195,249,155,58,239,98
-DB 197,197,51,197,102,246,151,163,197,197,51,197,102,246,151,163
-DB 37,37,148,37,53,177,74,16,37,37,148,37,53,177,74,16
-DB 89,89,121,89,242,32,178,171,89,89,121,89,242,32,178,171
-DB 132,132,42,132,84,174,21,208,132,132,42,132,84,174,21,208
-DB 114,114,213,114,183,167,228,197,114,114,213,114,183,167,228,197
-DB 57,57,228,57,213,221,114,236,57,57,228,57,213,221,114,236
-DB 76,76,45,76,90,97,152,22,76,76,45,76,90,97,152,22
-DB 94,94,101,94,202,59,188,148,94,94,101,94,202,59,188,148
-DB 120,120,253,120,231,133,240,159,120,120,253,120,231,133,240,159
-DB 56,56,224,56,221,216,112,229,56,56,224,56,221,216,112,229
-DB 140,140,10,140,20,134,5,152,140,140,10,140,20,134,5,152
-DB 209,209,99,209,198,178,191,23,209,209,99,209,198,178,191,23
-DB 165,165,174,165,65,11,87,228,165,165,174,165,65,11,87,228
-DB 226,226,175,226,67,77,217,161,226,226,175,226,67,77,217,161
-DB 97,97,153,97,47,248,194,78,97,97,153,97,47,248,194,78
-DB 179,179,246,179,241,69,123,66,179,179,246,179,241,69,123,66
-DB 33,33,132,33,21,165,66,52,33,33,132,33,21,165,66,52
-DB 156,156,74,156,148,214,37,8,156,156,74,156,148,214,37,8
-DB 30,30,120,30,240,102,60,238,30,30,120,30,240,102,60,238
-DB 67,67,17,67,34,82,134,97,67,67,17,67,34,82,134,97
-DB 199,199,59,199,118,252,147,177,199,199,59,199,118,252,147,177
-DB 252,252,215,252,179,43,229,79,252,252,215,252,179,43,229,79
-DB 4,4,16,4,32,20,8,36,4,4,16,4,32,20,8,36
-DB 81,81,89,81,178,8,162,227,81,81,89,81,178,8,162,227
-DB 153,153,94,153,188,199,47,37,153,153,94,153,188,199,47,37
-DB 109,109,169,109,79,196,218,34,109,109,169,109,79,196,218,34
-DB 13,13,52,13,104,57,26,101,13,13,52,13,104,57,26,101
-DB 250,250,207,250,131,53,233,121,250,250,207,250,131,53,233,121
-DB 223,223,91,223,182,132,163,105,223,223,91,223,182,132,163,105
-DB 126,126,229,126,215,155,252,169,126,126,229,126,215,155,252,169
-DB 36,36,144,36,61,180,72,25,36,36,144,36,61,180,72,25
-DB 59,59,236,59,197,215,118,254,59,59,236,59,197,215,118,254
-DB 171,171,150,171,49,61,75,154,171,171,150,171,49,61,75,154
-DB 206,206,31,206,62,209,129,240,206,206,31,206,62,209,129,240
-DB 17,17,68,17,136,85,34,153,17,17,68,17,136,85,34,153
-DB 143,143,6,143,12,137,3,131,143,143,6,143,12,137,3,131
-DB 78,78,37,78,74,107,156,4,78,78,37,78,74,107,156,4
-DB 183,183,230,183,209,81,115,102,183,183,230,183,209,81,115,102
-DB 235,235,139,235,11,96,203,224,235,235,139,235,11,96,203,224
-DB 60,60,240,60,253,204,120,193,60,60,240,60,253,204,120,193
-DB 129,129,62,129,124,191,31,253,129,129,62,129,124,191,31,253
-DB 148,148,106,148,212,254,53,64,148,148,106,148,212,254,53,64
-DB 247,247,251,247,235,12,243,28,247,247,251,247,235,12,243,28
-DB 185,185,222,185,161,103,111,24,185,185,222,185,161,103,111,24
-DB 19,19,76,19,152,95,38,139,19,19,76,19,152,95,38,139
-DB 44,44,176,44,125,156,88,81,44,44,176,44,125,156,88,81
-DB 211,211,107,211,214,184,187,5,211,211,107,211,214,184,187,5
-DB 231,231,187,231,107,92,211,140,231,231,187,231,107,92,211,140
-DB 110,110,165,110,87,203,220,57,110,110,165,110,87,203,220,57
-DB 196,196,55,196,110,243,149,170,196,196,55,196,110,243,149,170
-DB 3,3,12,3,24,15,6,27,3,3,12,3,24,15,6,27
-DB 86,86,69,86,138,19,172,220,86,86,69,86,138,19,172,220
-DB 68,68,13,68,26,73,136,94,68,68,13,68,26,73,136,94
-DB 127,127,225,127,223,158,254,160,127,127,225,127,223,158,254,160
-DB 169,169,158,169,33,55,79,136,169,169,158,169,33,55,79,136
-DB 42,42,168,42,77,130,84,103,42,42,168,42,77,130,84,103
-DB 187,187,214,187,177,109,107,10,187,187,214,187,177,109,107,10
-DB 193,193,35,193,70,226,159,135,193,193,35,193,70,226,159,135
-DB 83,83,81,83,162,2,166,241,83,83,81,83,162,2,166,241
-DB 220,220,87,220,174,139,165,114,220,220,87,220,174,139,165,114
-DB 11,11,44,11,88,39,22,83,11,11,44,11,88,39,22,83
-DB 157,157,78,157,156,211,39,1,157,157,78,157,156,211,39,1
-DB 108,108,173,108,71,193,216,43,108,108,173,108,71,193,216,43
-DB 49,49,196,49,149,245,98,164,49,49,196,49,149,245,98,164
-DB 116,116,205,116,135,185,232,243,116,116,205,116,135,185,232,243
-DB 246,246,255,246,227,9,241,21,246,246,255,246,227,9,241,21
-DB 70,70,5,70,10,67,140,76,70,70,5,70,10,67,140,76
-DB 172,172,138,172,9,38,69,165,172,172,138,172,9,38,69,165
-DB 137,137,30,137,60,151,15,181,137,137,30,137,60,151,15,181
-DB 20,20,80,20,160,68,40,180,20,20,80,20,160,68,40,180
-DB 225,225,163,225,91,66,223,186,225,225,163,225,91,66,223,186
-DB 22,22,88,22,176,78,44,166,22,22,88,22,176,78,44,166
-DB 58,58,232,58,205,210,116,247,58,58,232,58,205,210,116,247
-DB 105,105,185,105,111,208,210,6,105,105,185,105,111,208,210,6
-DB 9,9,36,9,72,45,18,65,9,9,36,9,72,45,18,65
-DB 112,112,221,112,167,173,224,215,112,112,221,112,167,173,224,215
-DB 182,182,226,182,217,84,113,111,182,182,226,182,217,84,113,111
-DB 208,208,103,208,206,183,189,30,208,208,103,208,206,183,189,30
-DB 237,237,147,237,59,126,199,214,237,237,147,237,59,126,199,214
-DB 204,204,23,204,46,219,133,226,204,204,23,204,46,219,133,226
-DB 66,66,21,66,42,87,132,104,66,66,21,66,42,87,132,104
-DB 152,152,90,152,180,194,45,44,152,152,90,152,180,194,45,44
-DB 164,164,170,164,73,14,85,237,164,164,170,164,73,14,85,237
-DB 40,40,160,40,93,136,80,117,40,40,160,40,93,136,80,117
-DB 92,92,109,92,218,49,184,134,92,92,109,92,218,49,184,134
-DB 248,248,199,248,147,63,237,107,248,248,199,248,147,63,237,107
-DB 134,134,34,134,68,164,17,194,134,134,34,134,68,164,17,194
-DB 24,35,198,232,135,184,1,79
-DB 54,166,210,245,121,111,145,82
-DB 96,188,155,142,163,12,123,53
-DB 29,224,215,194,46,75,254,87
-DB 21,119,55,229,159,240,74,218
-DB 88,201,41,10,177,160,107,133
-DB 189,93,16,244,203,62,5,103
-DB 228,39,65,139,167,125,149,216
-DB 251,238,124,102,221,23,71,158
-DB 202,45,191,7,173,90,131,51
-EXTERN __imp_RtlVirtualUnwind:NEAR
-
-ALIGN 16
-se_handler PROC PRIVATE
- push rsi
- push rdi
- push rbx
- push rbp
- push r12
- push r13
- push r14
- push r15
- pushfq
- sub rsp,64
-
- mov rax,QWORD PTR[120+r8]
- mov rbx,QWORD PTR[248+r8]
-
- lea r10,QWORD PTR[$L$prologue]
- cmp rbx,r10
- jb $L$in_prologue
-
- mov rax,QWORD PTR[152+r8]
-
- lea r10,QWORD PTR[$L$epilogue]
- cmp rbx,r10
- jae $L$in_prologue
-
- mov rax,QWORD PTR[((128+32))+rax]
-
- mov rbx,QWORD PTR[((-8))+rax]
- mov rbp,QWORD PTR[((-16))+rax]
- mov r12,QWORD PTR[((-24))+rax]
- mov r13,QWORD PTR[((-32))+rax]
- mov r14,QWORD PTR[((-40))+rax]
- mov r15,QWORD PTR[((-48))+rax]
- mov QWORD PTR[144+r8],rbx
- mov QWORD PTR[160+r8],rbp
- mov QWORD PTR[216+r8],r12
- mov QWORD PTR[224+r8],r13
- mov QWORD PTR[232+r8],r14
- mov QWORD PTR[240+r8],r15
-
-$L$in_prologue::
- mov rdi,QWORD PTR[8+rax]
- mov rsi,QWORD PTR[16+rax]
- mov QWORD PTR[152+r8],rax
- mov QWORD PTR[168+r8],rsi
- mov QWORD PTR[176+r8],rdi
-
- mov rdi,QWORD PTR[40+r9]
- mov rsi,r8
- mov ecx,154
- DD 0a548f3fch
-
- mov rsi,r9
- xor rcx,rcx
- mov rdx,QWORD PTR[8+rsi]
- mov r8,QWORD PTR[rsi]
- mov r9,QWORD PTR[16+rsi]
- mov r10,QWORD PTR[40+rsi]
- lea r11,QWORD PTR[56+rsi]
- lea r12,QWORD PTR[24+rsi]
- mov QWORD PTR[32+rsp],r10
- mov QWORD PTR[40+rsp],r11
- mov QWORD PTR[48+rsp],r12
- mov QWORD PTR[56+rsp],rcx
- call QWORD PTR[__imp_RtlVirtualUnwind]
-
- mov eax,1
- add rsp,64
- popfq
- pop r15
- pop r14
- pop r13
- pop r12
- pop rbp
- pop rbx
- pop rdi
- pop rsi
- DB 0F3h,0C3h ;repret
-se_handler ENDP
-
-.text$ ENDS
-.pdata SEGMENT READONLY ALIGN(4)
-ALIGN 4
- DD imagerel $L$SEH_begin_whirlpool_block
- DD imagerel $L$SEH_end_whirlpool_block
- DD imagerel $L$SEH_info_whirlpool_block
-
-.pdata ENDS
-.xdata SEGMENT READONLY ALIGN(8)
-ALIGN 8
-$L$SEH_info_whirlpool_block::
-DB 9,0,0,0
- DD imagerel se_handler
-
-.xdata ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+PUBLIC whirlpool_block
+
+ALIGN 16
+whirlpool_block PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_whirlpool_block::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+
+ mov rax,rsp
+
+ push rbx
+
+ push rbp
+
+ push r12
+
+ push r13
+
+ push r14
+
+ push r15
+
+
+ sub rsp,128+40
+ and rsp,-64
+
+ lea r10,QWORD PTR[128+rsp]
+ mov QWORD PTR[r10],rdi
+ mov QWORD PTR[8+r10],rsi
+ mov QWORD PTR[16+r10],rdx
+ mov QWORD PTR[32+r10],rax
+
+$L$prologue::
+
+ mov rbx,r10
+ lea rbp,QWORD PTR[$L$table]
+
+ xor rcx,rcx
+ xor rdx,rdx
+ mov r8,QWORD PTR[rdi]
+ mov r9,QWORD PTR[8+rdi]
+ mov r10,QWORD PTR[16+rdi]
+ mov r11,QWORD PTR[24+rdi]
+ mov r12,QWORD PTR[32+rdi]
+ mov r13,QWORD PTR[40+rdi]
+ mov r14,QWORD PTR[48+rdi]
+ mov r15,QWORD PTR[56+rdi]
+$L$outerloop::
+ mov QWORD PTR[rsp],r8
+ mov QWORD PTR[8+rsp],r9
+ mov QWORD PTR[16+rsp],r10
+ mov QWORD PTR[24+rsp],r11
+ mov QWORD PTR[32+rsp],r12
+ mov QWORD PTR[40+rsp],r13
+ mov QWORD PTR[48+rsp],r14
+ mov QWORD PTR[56+rsp],r15
+ xor r8,QWORD PTR[rsi]
+ xor r9,QWORD PTR[8+rsi]
+ xor r10,QWORD PTR[16+rsi]
+ xor r11,QWORD PTR[24+rsi]
+ xor r12,QWORD PTR[32+rsi]
+ xor r13,QWORD PTR[40+rsi]
+ xor r14,QWORD PTR[48+rsi]
+ xor r15,QWORD PTR[56+rsi]
+ mov QWORD PTR[((64+0))+rsp],r8
+ mov QWORD PTR[((64+8))+rsp],r9
+ mov QWORD PTR[((64+16))+rsp],r10
+ mov QWORD PTR[((64+24))+rsp],r11
+ mov QWORD PTR[((64+32))+rsp],r12
+ mov QWORD PTR[((64+40))+rsp],r13
+ mov QWORD PTR[((64+48))+rsp],r14
+ mov QWORD PTR[((64+56))+rsp],r15
+ xor rsi,rsi
+ mov QWORD PTR[24+rbx],rsi
+ jmp $L$round
+ALIGN 16
+$L$round::
+ mov r8,QWORD PTR[4096+rsi*8+rbp]
+ mov eax,DWORD PTR[rsp]
+ mov ebx,DWORD PTR[4+rsp]
+ movzx ecx,al
+ movzx edx,ah
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r8,QWORD PTR[rsi*8+rbp]
+ mov r9,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((0+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ mov r10,QWORD PTR[6+rsi*8+rbp]
+ mov r11,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ mov r12,QWORD PTR[4+rsi*8+rbp]
+ mov r13,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((0+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ mov r14,QWORD PTR[2+rsi*8+rbp]
+ mov r15,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r9,QWORD PTR[rsi*8+rbp]
+ xor r10,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((8+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r11,QWORD PTR[6+rsi*8+rbp]
+ xor r12,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r13,QWORD PTR[4+rsi*8+rbp]
+ xor r14,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((8+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r15,QWORD PTR[2+rsi*8+rbp]
+ xor r8,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r10,QWORD PTR[rsi*8+rbp]
+ xor r11,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((16+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r12,QWORD PTR[6+rsi*8+rbp]
+ xor r13,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r14,QWORD PTR[4+rsi*8+rbp]
+ xor r15,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((16+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r8,QWORD PTR[2+rsi*8+rbp]
+ xor r9,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r11,QWORD PTR[rsi*8+rbp]
+ xor r12,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((24+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r13,QWORD PTR[6+rsi*8+rbp]
+ xor r14,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r15,QWORD PTR[4+rsi*8+rbp]
+ xor r8,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((24+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r9,QWORD PTR[2+rsi*8+rbp]
+ xor r10,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r12,QWORD PTR[rsi*8+rbp]
+ xor r13,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((32+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r14,QWORD PTR[6+rsi*8+rbp]
+ xor r15,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r8,QWORD PTR[4+rsi*8+rbp]
+ xor r9,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((32+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r10,QWORD PTR[2+rsi*8+rbp]
+ xor r11,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r13,QWORD PTR[rsi*8+rbp]
+ xor r14,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((40+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r15,QWORD PTR[6+rsi*8+rbp]
+ xor r8,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r9,QWORD PTR[4+rsi*8+rbp]
+ xor r10,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((40+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r11,QWORD PTR[2+rsi*8+rbp]
+ xor r12,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r14,QWORD PTR[rsi*8+rbp]
+ xor r15,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((48+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r8,QWORD PTR[6+rsi*8+rbp]
+ xor r9,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r10,QWORD PTR[4+rsi*8+rbp]
+ xor r11,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((48+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r12,QWORD PTR[2+rsi*8+rbp]
+ xor r13,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r15,QWORD PTR[rsi*8+rbp]
+ xor r8,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((56+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r9,QWORD PTR[6+rsi*8+rbp]
+ xor r10,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r11,QWORD PTR[4+rsi*8+rbp]
+ xor r12,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((56+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r13,QWORD PTR[2+rsi*8+rbp]
+ xor r14,QWORD PTR[1+rdi*8+rbp]
+ mov QWORD PTR[rsp],r8
+ mov QWORD PTR[8+rsp],r9
+ mov QWORD PTR[16+rsp],r10
+ mov QWORD PTR[24+rsp],r11
+ mov QWORD PTR[32+rsp],r12
+ mov QWORD PTR[40+rsp],r13
+ mov QWORD PTR[48+rsp],r14
+ mov QWORD PTR[56+rsp],r15
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r8,QWORD PTR[rsi*8+rbp]
+ xor r9,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((64+0+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r10,QWORD PTR[6+rsi*8+rbp]
+ xor r11,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r12,QWORD PTR[4+rsi*8+rbp]
+ xor r13,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((64+0+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r14,QWORD PTR[2+rsi*8+rbp]
+ xor r15,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r9,QWORD PTR[rsi*8+rbp]
+ xor r10,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((64+8+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r11,QWORD PTR[6+rsi*8+rbp]
+ xor r12,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r13,QWORD PTR[4+rsi*8+rbp]
+ xor r14,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((64+8+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r15,QWORD PTR[2+rsi*8+rbp]
+ xor r8,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r10,QWORD PTR[rsi*8+rbp]
+ xor r11,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((64+16+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r12,QWORD PTR[6+rsi*8+rbp]
+ xor r13,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r14,QWORD PTR[4+rsi*8+rbp]
+ xor r15,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((64+16+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r8,QWORD PTR[2+rsi*8+rbp]
+ xor r9,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r11,QWORD PTR[rsi*8+rbp]
+ xor r12,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((64+24+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r13,QWORD PTR[6+rsi*8+rbp]
+ xor r14,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r15,QWORD PTR[4+rsi*8+rbp]
+ xor r8,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((64+24+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r9,QWORD PTR[2+rsi*8+rbp]
+ xor r10,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r12,QWORD PTR[rsi*8+rbp]
+ xor r13,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((64+32+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r14,QWORD PTR[6+rsi*8+rbp]
+ xor r15,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r8,QWORD PTR[4+rsi*8+rbp]
+ xor r9,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((64+32+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r10,QWORD PTR[2+rsi*8+rbp]
+ xor r11,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r13,QWORD PTR[rsi*8+rbp]
+ xor r14,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((64+40+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r15,QWORD PTR[6+rsi*8+rbp]
+ xor r8,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r9,QWORD PTR[4+rsi*8+rbp]
+ xor r10,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((64+40+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r11,QWORD PTR[2+rsi*8+rbp]
+ xor r12,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r14,QWORD PTR[rsi*8+rbp]
+ xor r15,QWORD PTR[7+rdi*8+rbp]
+ mov eax,DWORD PTR[((64+48+8))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r8,QWORD PTR[6+rsi*8+rbp]
+ xor r9,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r10,QWORD PTR[4+rsi*8+rbp]
+ xor r11,QWORD PTR[3+rdi*8+rbp]
+ mov ebx,DWORD PTR[((64+48+8+4))+rsp]
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r12,QWORD PTR[2+rsi*8+rbp]
+ xor r13,QWORD PTR[1+rdi*8+rbp]
+ shr eax,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r15,QWORD PTR[rsi*8+rbp]
+ xor r8,QWORD PTR[7+rdi*8+rbp]
+
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r9,QWORD PTR[6+rsi*8+rbp]
+ xor r10,QWORD PTR[5+rdi*8+rbp]
+ shr ebx,16
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,bl
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,bh
+ xor r11,QWORD PTR[4+rsi*8+rbp]
+ xor r12,QWORD PTR[3+rdi*8+rbp]
+
+ lea rsi,QWORD PTR[rcx*1+rcx]
+ movzx ecx,al
+ lea rdi,QWORD PTR[rdx*1+rdx]
+ movzx edx,ah
+ xor r13,QWORD PTR[2+rsi*8+rbp]
+ xor r14,QWORD PTR[1+rdi*8+rbp]
+ lea rbx,QWORD PTR[128+rsp]
+ mov rsi,QWORD PTR[24+rbx]
+ add rsi,1
+ cmp rsi,10
+ je $L$roundsdone
+
+ mov QWORD PTR[24+rbx],rsi
+ mov QWORD PTR[((64+0))+rsp],r8
+ mov QWORD PTR[((64+8))+rsp],r9
+ mov QWORD PTR[((64+16))+rsp],r10
+ mov QWORD PTR[((64+24))+rsp],r11
+ mov QWORD PTR[((64+32))+rsp],r12
+ mov QWORD PTR[((64+40))+rsp],r13
+ mov QWORD PTR[((64+48))+rsp],r14
+ mov QWORD PTR[((64+56))+rsp],r15
+ jmp $L$round
+ALIGN 16
+$L$roundsdone::
+ mov rdi,QWORD PTR[rbx]
+ mov rsi,QWORD PTR[8+rbx]
+ mov rax,QWORD PTR[16+rbx]
+ xor r8,QWORD PTR[rsi]
+ xor r9,QWORD PTR[8+rsi]
+ xor r10,QWORD PTR[16+rsi]
+ xor r11,QWORD PTR[24+rsi]
+ xor r12,QWORD PTR[32+rsi]
+ xor r13,QWORD PTR[40+rsi]
+ xor r14,QWORD PTR[48+rsi]
+ xor r15,QWORD PTR[56+rsi]
+ xor r8,QWORD PTR[rdi]
+ xor r9,QWORD PTR[8+rdi]
+ xor r10,QWORD PTR[16+rdi]
+ xor r11,QWORD PTR[24+rdi]
+ xor r12,QWORD PTR[32+rdi]
+ xor r13,QWORD PTR[40+rdi]
+ xor r14,QWORD PTR[48+rdi]
+ xor r15,QWORD PTR[56+rdi]
+ mov QWORD PTR[rdi],r8
+ mov QWORD PTR[8+rdi],r9
+ mov QWORD PTR[16+rdi],r10
+ mov QWORD PTR[24+rdi],r11
+ mov QWORD PTR[32+rdi],r12
+ mov QWORD PTR[40+rdi],r13
+ mov QWORD PTR[48+rdi],r14
+ mov QWORD PTR[56+rdi],r15
+ lea rsi,QWORD PTR[64+rsi]
+ sub rax,1
+ jz $L$alldone
+ mov QWORD PTR[8+rbx],rsi
+ mov QWORD PTR[16+rbx],rax
+ jmp $L$outerloop
+$L$alldone::
+ mov rsi,QWORD PTR[32+rbx]
+
+ mov r15,QWORD PTR[((-48))+rsi]
+
+ mov r14,QWORD PTR[((-40))+rsi]
+
+ mov r13,QWORD PTR[((-32))+rsi]
+
+ mov r12,QWORD PTR[((-24))+rsi]
+
+ mov rbp,QWORD PTR[((-16))+rsi]
+
+ mov rbx,QWORD PTR[((-8))+rsi]
+
+ lea rsp,QWORD PTR[rsi]
+
+$L$epilogue::
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_whirlpool_block::
+whirlpool_block ENDP
+
+ALIGN 64
+
+$L$table::
+DB 24,24,96,24,192,120,48,216,24,24,96,24,192,120,48,216
+DB 35,35,140,35,5,175,70,38,35,35,140,35,5,175,70,38
+DB 198,198,63,198,126,249,145,184,198,198,63,198,126,249,145,184
+DB 232,232,135,232,19,111,205,251,232,232,135,232,19,111,205,251
+DB 135,135,38,135,76,161,19,203,135,135,38,135,76,161,19,203
+DB 184,184,218,184,169,98,109,17,184,184,218,184,169,98,109,17
+DB 1,1,4,1,8,5,2,9,1,1,4,1,8,5,2,9
+DB 79,79,33,79,66,110,158,13,79,79,33,79,66,110,158,13
+DB 54,54,216,54,173,238,108,155,54,54,216,54,173,238,108,155
+DB 166,166,162,166,89,4,81,255,166,166,162,166,89,4,81,255
+DB 210,210,111,210,222,189,185,12,210,210,111,210,222,189,185,12
+DB 245,245,243,245,251,6,247,14,245,245,243,245,251,6,247,14
+DB 121,121,249,121,239,128,242,150,121,121,249,121,239,128,242,150
+DB 111,111,161,111,95,206,222,48,111,111,161,111,95,206,222,48
+DB 145,145,126,145,252,239,63,109,145,145,126,145,252,239,63,109
+DB 82,82,85,82,170,7,164,248,82,82,85,82,170,7,164,248
+DB 96,96,157,96,39,253,192,71,96,96,157,96,39,253,192,71
+DB 188,188,202,188,137,118,101,53,188,188,202,188,137,118,101,53
+DB 155,155,86,155,172,205,43,55,155,155,86,155,172,205,43,55
+DB 142,142,2,142,4,140,1,138,142,142,2,142,4,140,1,138
+DB 163,163,182,163,113,21,91,210,163,163,182,163,113,21,91,210
+DB 12,12,48,12,96,60,24,108,12,12,48,12,96,60,24,108
+DB 123,123,241,123,255,138,246,132,123,123,241,123,255,138,246,132
+DB 53,53,212,53,181,225,106,128,53,53,212,53,181,225,106,128
+DB 29,29,116,29,232,105,58,245,29,29,116,29,232,105,58,245
+DB 224,224,167,224,83,71,221,179,224,224,167,224,83,71,221,179
+DB 215,215,123,215,246,172,179,33,215,215,123,215,246,172,179,33
+DB 194,194,47,194,94,237,153,156,194,194,47,194,94,237,153,156
+DB 46,46,184,46,109,150,92,67,46,46,184,46,109,150,92,67
+DB 75,75,49,75,98,122,150,41,75,75,49,75,98,122,150,41
+DB 254,254,223,254,163,33,225,93,254,254,223,254,163,33,225,93
+DB 87,87,65,87,130,22,174,213,87,87,65,87,130,22,174,213
+DB 21,21,84,21,168,65,42,189,21,21,84,21,168,65,42,189
+DB 119,119,193,119,159,182,238,232,119,119,193,119,159,182,238,232
+DB 55,55,220,55,165,235,110,146,55,55,220,55,165,235,110,146
+DB 229,229,179,229,123,86,215,158,229,229,179,229,123,86,215,158
+DB 159,159,70,159,140,217,35,19,159,159,70,159,140,217,35,19
+DB 240,240,231,240,211,23,253,35,240,240,231,240,211,23,253,35
+DB 74,74,53,74,106,127,148,32,74,74,53,74,106,127,148,32
+DB 218,218,79,218,158,149,169,68,218,218,79,218,158,149,169,68
+DB 88,88,125,88,250,37,176,162,88,88,125,88,250,37,176,162
+DB 201,201,3,201,6,202,143,207,201,201,3,201,6,202,143,207
+DB 41,41,164,41,85,141,82,124,41,41,164,41,85,141,82,124
+DB 10,10,40,10,80,34,20,90,10,10,40,10,80,34,20,90
+DB 177,177,254,177,225,79,127,80,177,177,254,177,225,79,127,80
+DB 160,160,186,160,105,26,93,201,160,160,186,160,105,26,93,201
+DB 107,107,177,107,127,218,214,20,107,107,177,107,127,218,214,20
+DB 133,133,46,133,92,171,23,217,133,133,46,133,92,171,23,217
+DB 189,189,206,189,129,115,103,60,189,189,206,189,129,115,103,60
+DB 93,93,105,93,210,52,186,143,93,93,105,93,210,52,186,143
+DB 16,16,64,16,128,80,32,144,16,16,64,16,128,80,32,144
+DB 244,244,247,244,243,3,245,7,244,244,247,244,243,3,245,7
+DB 203,203,11,203,22,192,139,221,203,203,11,203,22,192,139,221
+DB 62,62,248,62,237,198,124,211,62,62,248,62,237,198,124,211
+DB 5,5,20,5,40,17,10,45,5,5,20,5,40,17,10,45
+DB 103,103,129,103,31,230,206,120,103,103,129,103,31,230,206,120
+DB 228,228,183,228,115,83,213,151,228,228,183,228,115,83,213,151
+DB 39,39,156,39,37,187,78,2,39,39,156,39,37,187,78,2
+DB 65,65,25,65,50,88,130,115,65,65,25,65,50,88,130,115
+DB 139,139,22,139,44,157,11,167,139,139,22,139,44,157,11,167
+DB 167,167,166,167,81,1,83,246,167,167,166,167,81,1,83,246
+DB 125,125,233,125,207,148,250,178,125,125,233,125,207,148,250,178
+DB 149,149,110,149,220,251,55,73,149,149,110,149,220,251,55,73
+DB 216,216,71,216,142,159,173,86,216,216,71,216,142,159,173,86
+DB 251,251,203,251,139,48,235,112,251,251,203,251,139,48,235,112
+DB 238,238,159,238,35,113,193,205,238,238,159,238,35,113,193,205
+DB 124,124,237,124,199,145,248,187,124,124,237,124,199,145,248,187
+DB 102,102,133,102,23,227,204,113,102,102,133,102,23,227,204,113
+DB 221,221,83,221,166,142,167,123,221,221,83,221,166,142,167,123
+DB 23,23,92,23,184,75,46,175,23,23,92,23,184,75,46,175
+DB 71,71,1,71,2,70,142,69,71,71,1,71,2,70,142,69
+DB 158,158,66,158,132,220,33,26,158,158,66,158,132,220,33,26
+DB 202,202,15,202,30,197,137,212,202,202,15,202,30,197,137,212
+DB 45,45,180,45,117,153,90,88,45,45,180,45,117,153,90,88
+DB 191,191,198,191,145,121,99,46,191,191,198,191,145,121,99,46
+DB 7,7,28,7,56,27,14,63,7,7,28,7,56,27,14,63
+DB 173,173,142,173,1,35,71,172,173,173,142,173,1,35,71,172
+DB 90,90,117,90,234,47,180,176,90,90,117,90,234,47,180,176
+DB 131,131,54,131,108,181,27,239,131,131,54,131,108,181,27,239
+DB 51,51,204,51,133,255,102,182,51,51,204,51,133,255,102,182
+DB 99,99,145,99,63,242,198,92,99,99,145,99,63,242,198,92
+DB 2,2,8,2,16,10,4,18,2,2,8,2,16,10,4,18
+DB 170,170,146,170,57,56,73,147,170,170,146,170,57,56,73,147
+DB 113,113,217,113,175,168,226,222,113,113,217,113,175,168,226,222
+DB 200,200,7,200,14,207,141,198,200,200,7,200,14,207,141,198
+DB 25,25,100,25,200,125,50,209,25,25,100,25,200,125,50,209
+DB 73,73,57,73,114,112,146,59,73,73,57,73,114,112,146,59
+DB 217,217,67,217,134,154,175,95,217,217,67,217,134,154,175,95
+DB 242,242,239,242,195,29,249,49,242,242,239,242,195,29,249,49
+DB 227,227,171,227,75,72,219,168,227,227,171,227,75,72,219,168
+DB 91,91,113,91,226,42,182,185,91,91,113,91,226,42,182,185
+DB 136,136,26,136,52,146,13,188,136,136,26,136,52,146,13,188
+DB 154,154,82,154,164,200,41,62,154,154,82,154,164,200,41,62
+DB 38,38,152,38,45,190,76,11,38,38,152,38,45,190,76,11
+DB 50,50,200,50,141,250,100,191,50,50,200,50,141,250,100,191
+DB 176,176,250,176,233,74,125,89,176,176,250,176,233,74,125,89
+DB 233,233,131,233,27,106,207,242,233,233,131,233,27,106,207,242
+DB 15,15,60,15,120,51,30,119,15,15,60,15,120,51,30,119
+DB 213,213,115,213,230,166,183,51,213,213,115,213,230,166,183,51
+DB 128,128,58,128,116,186,29,244,128,128,58,128,116,186,29,244
+DB 190,190,194,190,153,124,97,39,190,190,194,190,153,124,97,39
+DB 205,205,19,205,38,222,135,235,205,205,19,205,38,222,135,235
+DB 52,52,208,52,189,228,104,137,52,52,208,52,189,228,104,137
+DB 72,72,61,72,122,117,144,50,72,72,61,72,122,117,144,50
+DB 255,255,219,255,171,36,227,84,255,255,219,255,171,36,227,84
+DB 122,122,245,122,247,143,244,141,122,122,245,122,247,143,244,141
+DB 144,144,122,144,244,234,61,100,144,144,122,144,244,234,61,100
+DB 95,95,97,95,194,62,190,157,95,95,97,95,194,62,190,157
+DB 32,32,128,32,29,160,64,61,32,32,128,32,29,160,64,61
+DB 104,104,189,104,103,213,208,15,104,104,189,104,103,213,208,15
+DB 26,26,104,26,208,114,52,202,26,26,104,26,208,114,52,202
+DB 174,174,130,174,25,44,65,183,174,174,130,174,25,44,65,183
+DB 180,180,234,180,201,94,117,125,180,180,234,180,201,94,117,125
+DB 84,84,77,84,154,25,168,206,84,84,77,84,154,25,168,206
+DB 147,147,118,147,236,229,59,127,147,147,118,147,236,229,59,127
+DB 34,34,136,34,13,170,68,47,34,34,136,34,13,170,68,47
+DB 100,100,141,100,7,233,200,99,100,100,141,100,7,233,200,99
+DB 241,241,227,241,219,18,255,42,241,241,227,241,219,18,255,42
+DB 115,115,209,115,191,162,230,204,115,115,209,115,191,162,230,204
+DB 18,18,72,18,144,90,36,130,18,18,72,18,144,90,36,130
+DB 64,64,29,64,58,93,128,122,64,64,29,64,58,93,128,122
+DB 8,8,32,8,64,40,16,72,8,8,32,8,64,40,16,72
+DB 195,195,43,195,86,232,155,149,195,195,43,195,86,232,155,149
+DB 236,236,151,236,51,123,197,223,236,236,151,236,51,123,197,223
+DB 219,219,75,219,150,144,171,77,219,219,75,219,150,144,171,77
+DB 161,161,190,161,97,31,95,192,161,161,190,161,97,31,95,192
+DB 141,141,14,141,28,131,7,145,141,141,14,141,28,131,7,145
+DB 61,61,244,61,245,201,122,200,61,61,244,61,245,201,122,200
+DB 151,151,102,151,204,241,51,91,151,151,102,151,204,241,51,91
+DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+DB 207,207,27,207,54,212,131,249,207,207,27,207,54,212,131,249
+DB 43,43,172,43,69,135,86,110,43,43,172,43,69,135,86,110
+DB 118,118,197,118,151,179,236,225,118,118,197,118,151,179,236,225
+DB 130,130,50,130,100,176,25,230,130,130,50,130,100,176,25,230
+DB 214,214,127,214,254,169,177,40,214,214,127,214,254,169,177,40
+DB 27,27,108,27,216,119,54,195,27,27,108,27,216,119,54,195
+DB 181,181,238,181,193,91,119,116,181,181,238,181,193,91,119,116
+DB 175,175,134,175,17,41,67,190,175,175,134,175,17,41,67,190
+DB 106,106,181,106,119,223,212,29,106,106,181,106,119,223,212,29
+DB 80,80,93,80,186,13,160,234,80,80,93,80,186,13,160,234
+DB 69,69,9,69,18,76,138,87,69,69,9,69,18,76,138,87
+DB 243,243,235,243,203,24,251,56,243,243,235,243,203,24,251,56
+DB 48,48,192,48,157,240,96,173,48,48,192,48,157,240,96,173
+DB 239,239,155,239,43,116,195,196,239,239,155,239,43,116,195,196
+DB 63,63,252,63,229,195,126,218,63,63,252,63,229,195,126,218
+DB 85,85,73,85,146,28,170,199,85,85,73,85,146,28,170,199
+DB 162,162,178,162,121,16,89,219,162,162,178,162,121,16,89,219
+DB 234,234,143,234,3,101,201,233,234,234,143,234,3,101,201,233
+DB 101,101,137,101,15,236,202,106,101,101,137,101,15,236,202,106
+DB 186,186,210,186,185,104,105,3,186,186,210,186,185,104,105,3
+DB 47,47,188,47,101,147,94,74,47,47,188,47,101,147,94,74
+DB 192,192,39,192,78,231,157,142,192,192,39,192,78,231,157,142
+DB 222,222,95,222,190,129,161,96,222,222,95,222,190,129,161,96
+DB 28,28,112,28,224,108,56,252,28,28,112,28,224,108,56,252
+DB 253,253,211,253,187,46,231,70,253,253,211,253,187,46,231,70
+DB 77,77,41,77,82,100,154,31,77,77,41,77,82,100,154,31
+DB 146,146,114,146,228,224,57,118,146,146,114,146,228,224,57,118
+DB 117,117,201,117,143,188,234,250,117,117,201,117,143,188,234,250
+DB 6,6,24,6,48,30,12,54,6,6,24,6,48,30,12,54
+DB 138,138,18,138,36,152,9,174,138,138,18,138,36,152,9,174
+DB 178,178,242,178,249,64,121,75,178,178,242,178,249,64,121,75
+DB 230,230,191,230,99,89,209,133,230,230,191,230,99,89,209,133
+DB 14,14,56,14,112,54,28,126,14,14,56,14,112,54,28,126
+DB 31,31,124,31,248,99,62,231,31,31,124,31,248,99,62,231
+DB 98,98,149,98,55,247,196,85,98,98,149,98,55,247,196,85
+DB 212,212,119,212,238,163,181,58,212,212,119,212,238,163,181,58
+DB 168,168,154,168,41,50,77,129,168,168,154,168,41,50,77,129
+DB 150,150,98,150,196,244,49,82,150,150,98,150,196,244,49,82
+DB 249,249,195,249,155,58,239,98,249,249,195,249,155,58,239,98
+DB 197,197,51,197,102,246,151,163,197,197,51,197,102,246,151,163
+DB 37,37,148,37,53,177,74,16,37,37,148,37,53,177,74,16
+DB 89,89,121,89,242,32,178,171,89,89,121,89,242,32,178,171
+DB 132,132,42,132,84,174,21,208,132,132,42,132,84,174,21,208
+DB 114,114,213,114,183,167,228,197,114,114,213,114,183,167,228,197
+DB 57,57,228,57,213,221,114,236,57,57,228,57,213,221,114,236
+DB 76,76,45,76,90,97,152,22,76,76,45,76,90,97,152,22
+DB 94,94,101,94,202,59,188,148,94,94,101,94,202,59,188,148
+DB 120,120,253,120,231,133,240,159,120,120,253,120,231,133,240,159
+DB 56,56,224,56,221,216,112,229,56,56,224,56,221,216,112,229
+DB 140,140,10,140,20,134,5,152,140,140,10,140,20,134,5,152
+DB 209,209,99,209,198,178,191,23,209,209,99,209,198,178,191,23
+DB 165,165,174,165,65,11,87,228,165,165,174,165,65,11,87,228
+DB 226,226,175,226,67,77,217,161,226,226,175,226,67,77,217,161
+DB 97,97,153,97,47,248,194,78,97,97,153,97,47,248,194,78
+DB 179,179,246,179,241,69,123,66,179,179,246,179,241,69,123,66
+DB 33,33,132,33,21,165,66,52,33,33,132,33,21,165,66,52
+DB 156,156,74,156,148,214,37,8,156,156,74,156,148,214,37,8
+DB 30,30,120,30,240,102,60,238,30,30,120,30,240,102,60,238
+DB 67,67,17,67,34,82,134,97,67,67,17,67,34,82,134,97
+DB 199,199,59,199,118,252,147,177,199,199,59,199,118,252,147,177
+DB 252,252,215,252,179,43,229,79,252,252,215,252,179,43,229,79
+DB 4,4,16,4,32,20,8,36,4,4,16,4,32,20,8,36
+DB 81,81,89,81,178,8,162,227,81,81,89,81,178,8,162,227
+DB 153,153,94,153,188,199,47,37,153,153,94,153,188,199,47,37
+DB 109,109,169,109,79,196,218,34,109,109,169,109,79,196,218,34
+DB 13,13,52,13,104,57,26,101,13,13,52,13,104,57,26,101
+DB 250,250,207,250,131,53,233,121,250,250,207,250,131,53,233,121
+DB 223,223,91,223,182,132,163,105,223,223,91,223,182,132,163,105
+DB 126,126,229,126,215,155,252,169,126,126,229,126,215,155,252,169
+DB 36,36,144,36,61,180,72,25,36,36,144,36,61,180,72,25
+DB 59,59,236,59,197,215,118,254,59,59,236,59,197,215,118,254
+DB 171,171,150,171,49,61,75,154,171,171,150,171,49,61,75,154
+DB 206,206,31,206,62,209,129,240,206,206,31,206,62,209,129,240
+DB 17,17,68,17,136,85,34,153,17,17,68,17,136,85,34,153
+DB 143,143,6,143,12,137,3,131,143,143,6,143,12,137,3,131
+DB 78,78,37,78,74,107,156,4,78,78,37,78,74,107,156,4
+DB 183,183,230,183,209,81,115,102,183,183,230,183,209,81,115,102
+DB 235,235,139,235,11,96,203,224,235,235,139,235,11,96,203,224
+DB 60,60,240,60,253,204,120,193,60,60,240,60,253,204,120,193
+DB 129,129,62,129,124,191,31,253,129,129,62,129,124,191,31,253
+DB 148,148,106,148,212,254,53,64,148,148,106,148,212,254,53,64
+DB 247,247,251,247,235,12,243,28,247,247,251,247,235,12,243,28
+DB 185,185,222,185,161,103,111,24,185,185,222,185,161,103,111,24
+DB 19,19,76,19,152,95,38,139,19,19,76,19,152,95,38,139
+DB 44,44,176,44,125,156,88,81,44,44,176,44,125,156,88,81
+DB 211,211,107,211,214,184,187,5,211,211,107,211,214,184,187,5
+DB 231,231,187,231,107,92,211,140,231,231,187,231,107,92,211,140
+DB 110,110,165,110,87,203,220,57,110,110,165,110,87,203,220,57
+DB 196,196,55,196,110,243,149,170,196,196,55,196,110,243,149,170
+DB 3,3,12,3,24,15,6,27,3,3,12,3,24,15,6,27
+DB 86,86,69,86,138,19,172,220,86,86,69,86,138,19,172,220
+DB 68,68,13,68,26,73,136,94,68,68,13,68,26,73,136,94
+DB 127,127,225,127,223,158,254,160,127,127,225,127,223,158,254,160
+DB 169,169,158,169,33,55,79,136,169,169,158,169,33,55,79,136
+DB 42,42,168,42,77,130,84,103,42,42,168,42,77,130,84,103
+DB 187,187,214,187,177,109,107,10,187,187,214,187,177,109,107,10
+DB 193,193,35,193,70,226,159,135,193,193,35,193,70,226,159,135
+DB 83,83,81,83,162,2,166,241,83,83,81,83,162,2,166,241
+DB 220,220,87,220,174,139,165,114,220,220,87,220,174,139,165,114
+DB 11,11,44,11,88,39,22,83,11,11,44,11,88,39,22,83
+DB 157,157,78,157,156,211,39,1,157,157,78,157,156,211,39,1
+DB 108,108,173,108,71,193,216,43,108,108,173,108,71,193,216,43
+DB 49,49,196,49,149,245,98,164,49,49,196,49,149,245,98,164
+DB 116,116,205,116,135,185,232,243,116,116,205,116,135,185,232,243
+DB 246,246,255,246,227,9,241,21,246,246,255,246,227,9,241,21
+DB 70,70,5,70,10,67,140,76,70,70,5,70,10,67,140,76
+DB 172,172,138,172,9,38,69,165,172,172,138,172,9,38,69,165
+DB 137,137,30,137,60,151,15,181,137,137,30,137,60,151,15,181
+DB 20,20,80,20,160,68,40,180,20,20,80,20,160,68,40,180
+DB 225,225,163,225,91,66,223,186,225,225,163,225,91,66,223,186
+DB 22,22,88,22,176,78,44,166,22,22,88,22,176,78,44,166
+DB 58,58,232,58,205,210,116,247,58,58,232,58,205,210,116,247
+DB 105,105,185,105,111,208,210,6,105,105,185,105,111,208,210,6
+DB 9,9,36,9,72,45,18,65,9,9,36,9,72,45,18,65
+DB 112,112,221,112,167,173,224,215,112,112,221,112,167,173,224,215
+DB 182,182,226,182,217,84,113,111,182,182,226,182,217,84,113,111
+DB 208,208,103,208,206,183,189,30,208,208,103,208,206,183,189,30
+DB 237,237,147,237,59,126,199,214,237,237,147,237,59,126,199,214
+DB 204,204,23,204,46,219,133,226,204,204,23,204,46,219,133,226
+DB 66,66,21,66,42,87,132,104,66,66,21,66,42,87,132,104
+DB 152,152,90,152,180,194,45,44,152,152,90,152,180,194,45,44
+DB 164,164,170,164,73,14,85,237,164,164,170,164,73,14,85,237
+DB 40,40,160,40,93,136,80,117,40,40,160,40,93,136,80,117
+DB 92,92,109,92,218,49,184,134,92,92,109,92,218,49,184,134
+DB 248,248,199,248,147,63,237,107,248,248,199,248,147,63,237,107
+DB 134,134,34,134,68,164,17,194,134,134,34,134,68,164,17,194
+DB 24,35,198,232,135,184,1,79
+DB 54,166,210,245,121,111,145,82
+DB 96,188,155,142,163,12,123,53
+DB 29,224,215,194,46,75,254,87
+DB 21,119,55,229,159,240,74,218
+DB 88,201,41,10,177,160,107,133
+DB 189,93,16,244,203,62,5,103
+DB 228,39,65,139,167,125,149,216
+DB 251,238,124,102,221,23,71,158
+DB 202,45,191,7,173,90,131,51
+EXTERN __imp_RtlVirtualUnwind:NEAR
+
+ALIGN 16
+se_handler PROC PRIVATE
+ push rsi
+ push rdi
+ push rbx
+ push rbp
+ push r12
+ push r13
+ push r14
+ push r15
+ pushfq
+ sub rsp,64
+
+ mov rax,QWORD PTR[120+r8]
+ mov rbx,QWORD PTR[248+r8]
+
+ lea r10,QWORD PTR[$L$prologue]
+ cmp rbx,r10
+ jb $L$in_prologue
+
+ mov rax,QWORD PTR[152+r8]
+
+ lea r10,QWORD PTR[$L$epilogue]
+ cmp rbx,r10
+ jae $L$in_prologue
+
+ mov rax,QWORD PTR[((128+32))+rax]
+
+ mov rbx,QWORD PTR[((-8))+rax]
+ mov rbp,QWORD PTR[((-16))+rax]
+ mov r12,QWORD PTR[((-24))+rax]
+ mov r13,QWORD PTR[((-32))+rax]
+ mov r14,QWORD PTR[((-40))+rax]
+ mov r15,QWORD PTR[((-48))+rax]
+ mov QWORD PTR[144+r8],rbx
+ mov QWORD PTR[160+r8],rbp
+ mov QWORD PTR[216+r8],r12
+ mov QWORD PTR[224+r8],r13
+ mov QWORD PTR[232+r8],r14
+ mov QWORD PTR[240+r8],r15
+
+$L$in_prologue::
+ mov rdi,QWORD PTR[8+rax]
+ mov rsi,QWORD PTR[16+rax]
+ mov QWORD PTR[152+r8],rax
+ mov QWORD PTR[168+r8],rsi
+ mov QWORD PTR[176+r8],rdi
+
+ mov rdi,QWORD PTR[40+r9]
+ mov rsi,r8
+ mov ecx,154
+ DD 0a548f3fch
+
+ mov rsi,r9
+ xor rcx,rcx
+ mov rdx,QWORD PTR[8+rsi]
+ mov r8,QWORD PTR[rsi]
+ mov r9,QWORD PTR[16+rsi]
+ mov r10,QWORD PTR[40+rsi]
+ lea r11,QWORD PTR[56+rsi]
+ lea r12,QWORD PTR[24+rsi]
+ mov QWORD PTR[32+rsp],r10
+ mov QWORD PTR[40+rsp],r11
+ mov QWORD PTR[48+rsp],r12
+ mov QWORD PTR[56+rsp],rcx
+ call QWORD PTR[__imp_RtlVirtualUnwind]
+
+ mov eax,1
+ add rsp,64
+ popfq
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rbp
+ pop rbx
+ pop rdi
+ pop rsi
+ DB 0F3h,0C3h ;repret
+se_handler ENDP
+
+.text$ ENDS
+.pdata SEGMENT READONLY ALIGN(4)
+ALIGN 4
+ DD imagerel $L$SEH_begin_whirlpool_block
+ DD imagerel $L$SEH_end_whirlpool_block
+ DD imagerel $L$SEH_info_whirlpool_block
+
+.pdata ENDS
+.xdata SEGMENT READONLY ALIGN(8)
+ALIGN 8
+$L$SEH_info_whirlpool_block::
+DB 9,0,0,0
+ DD imagerel se_handler
+
+.xdata ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/x86_64cpuid.masm b/contrib/libs/openssl/asm/windows/crypto/x86_64cpuid.masm
index 3ee7ea3ff0..ab40782e1e 100644
--- a/contrib/libs/openssl/asm/windows/crypto/x86_64cpuid.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/x86_64cpuid.masm
@@ -1,484 +1,484 @@
-OPTION DOTNAME
-EXTERN OPENSSL_cpuid_setup:NEAR
-
-.CRT$XCU SEGMENT READONLY ALIGN(8)
- DQ OPENSSL_cpuid_setup
-
-
-.CRT$XCU ENDS
-_DATA SEGMENT
-COMM OPENSSL_ia32cap_P:DWORD:4
-
-_DATA ENDS
-.text$ SEGMENT ALIGN(256) 'CODE'
-
-PUBLIC OPENSSL_atomic_add
-
-ALIGN 16
-OPENSSL_atomic_add PROC PUBLIC
-
- mov eax,DWORD PTR[rcx]
-$L$spin:: lea r8,QWORD PTR[rax*1+rdx]
-DB 0f0h
- cmpxchg DWORD PTR[rcx],r8d
- jne $L$spin
- mov eax,r8d
-DB 048h,098h
- DB 0F3h,0C3h ;repret
-
-OPENSSL_atomic_add ENDP
-
-PUBLIC OPENSSL_rdtsc
-
-ALIGN 16
-OPENSSL_rdtsc PROC PUBLIC
-
- rdtsc
- shl rdx,32
- or rax,rdx
- DB 0F3h,0C3h ;repret
-
-OPENSSL_rdtsc ENDP
-
-PUBLIC OPENSSL_ia32_cpuid
-
-ALIGN 16
-OPENSSL_ia32_cpuid PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_OPENSSL_ia32_cpuid::
- mov rdi,rcx
-
-
-
- mov r8,rbx
-
-
- xor eax,eax
- mov QWORD PTR[8+rdi],rax
- cpuid
- mov r11d,eax
-
- xor eax,eax
- cmp ebx,0756e6547h
- setne al
- mov r9d,eax
- cmp edx,049656e69h
- setne al
- or r9d,eax
- cmp ecx,06c65746eh
- setne al
- or r9d,eax
- jz $L$intel
-
- cmp ebx,068747541h
- setne al
- mov r10d,eax
- cmp edx,069746E65h
- setne al
- or r10d,eax
- cmp ecx,0444D4163h
- setne al
- or r10d,eax
- jnz $L$intel
-
-
- mov eax,080000000h
- cpuid
- cmp eax,080000001h
- jb $L$intel
- mov r10d,eax
- mov eax,080000001h
- cpuid
- or r9d,ecx
- and r9d,000000801h
-
- cmp r10d,080000008h
- jb $L$intel
-
- mov eax,080000008h
- cpuid
- movzx r10,cl
- inc r10
-
- mov eax,1
- cpuid
- bt edx,28
- jnc $L$generic
- shr ebx,16
- cmp bl,r10b
- ja $L$generic
- and edx,0efffffffh
- jmp $L$generic
-
-$L$intel::
- cmp r11d,4
- mov r10d,-1
- jb $L$nocacheinfo
-
- mov eax,4
- mov ecx,0
- cpuid
- mov r10d,eax
- shr r10d,14
- and r10d,0fffh
-
-$L$nocacheinfo::
- mov eax,1
- cpuid
- movd xmm0,eax
- and edx,0bfefffffh
- cmp r9d,0
- jne $L$notintel
- or edx,040000000h
- and ah,15
- cmp ah,15
- jne $L$notP4
- or edx,000100000h
-$L$notP4::
- cmp ah,6
- jne $L$notintel
- and eax,00fff0ff0h
- cmp eax,000050670h
- je $L$knights
- cmp eax,000080650h
- jne $L$notintel
-$L$knights::
- and ecx,0fbffffffh
-
-$L$notintel::
- bt edx,28
- jnc $L$generic
- and edx,0efffffffh
- cmp r10d,0
- je $L$generic
-
- or edx,010000000h
- shr ebx,16
- cmp bl,1
- ja $L$generic
- and edx,0efffffffh
-$L$generic::
- and r9d,000000800h
- and ecx,0fffff7ffh
- or r9d,ecx
-
- mov r10d,edx
-
- cmp r11d,7
- jb $L$no_extended_info
- mov eax,7
- xor ecx,ecx
- cpuid
- bt r9d,26
- jc $L$notknights
- and ebx,0fff7ffffh
-$L$notknights::
- movd eax,xmm0
- and eax,00fff0ff0h
- cmp eax,000050650h
- jne $L$notskylakex
- and ebx,0fffeffffh
-
-$L$notskylakex::
- mov DWORD PTR[8+rdi],ebx
- mov DWORD PTR[12+rdi],ecx
-$L$no_extended_info::
-
- bt r9d,27
- jnc $L$clear_avx
- xor ecx,ecx
-DB 00fh,001h,0d0h
- and eax,0e6h
- cmp eax,0e6h
- je $L$done
- and DWORD PTR[8+rdi],03fdeffffh
-
-
-
-
- and eax,6
- cmp eax,6
- je $L$done
-$L$clear_avx::
- mov eax,0efffe7ffh
- and r9d,eax
- mov eax,03fdeffdfh
- and DWORD PTR[8+rdi],eax
-$L$done::
- shl r9,32
- mov eax,r10d
- mov rbx,r8
-
- or rax,r9
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-
-$L$SEH_end_OPENSSL_ia32_cpuid::
-OPENSSL_ia32_cpuid ENDP
-
-PUBLIC OPENSSL_cleanse
-
-ALIGN 16
-OPENSSL_cleanse PROC PUBLIC
-
- xor rax,rax
- cmp rdx,15
- jae $L$ot
- cmp rdx,0
- je $L$ret
-$L$ittle::
- mov BYTE PTR[rcx],al
- sub rdx,1
- lea rcx,QWORD PTR[1+rcx]
- jnz $L$ittle
-$L$ret::
- DB 0F3h,0C3h ;repret
-ALIGN 16
-$L$ot::
- test rcx,7
- jz $L$aligned
- mov BYTE PTR[rcx],al
- lea rdx,QWORD PTR[((-1))+rdx]
- lea rcx,QWORD PTR[1+rcx]
- jmp $L$ot
-$L$aligned::
- mov QWORD PTR[rcx],rax
- lea rdx,QWORD PTR[((-8))+rdx]
- test rdx,-8
- lea rcx,QWORD PTR[8+rcx]
- jnz $L$aligned
- cmp rdx,0
- jne $L$ittle
- DB 0F3h,0C3h ;repret
-
-OPENSSL_cleanse ENDP
-
-PUBLIC CRYPTO_memcmp
-
-ALIGN 16
-CRYPTO_memcmp PROC PUBLIC
-
- xor rax,rax
- xor r10,r10
- cmp r8,0
- je $L$no_data
- cmp r8,16
- jne $L$oop_cmp
- mov r10,QWORD PTR[rcx]
- mov r11,QWORD PTR[8+rcx]
- mov r8,1
- xor r10,QWORD PTR[rdx]
- xor r11,QWORD PTR[8+rdx]
- or r10,r11
- cmovnz rax,r8
- DB 0F3h,0C3h ;repret
-
-ALIGN 16
-$L$oop_cmp::
- mov r10b,BYTE PTR[rcx]
- lea rcx,QWORD PTR[1+rcx]
- xor r10b,BYTE PTR[rdx]
- lea rdx,QWORD PTR[1+rdx]
- or al,r10b
- dec r8
- jnz $L$oop_cmp
- neg rax
- shr rax,63
-$L$no_data::
- DB 0F3h,0C3h ;repret
-
-CRYPTO_memcmp ENDP
-PUBLIC OPENSSL_wipe_cpu
-
-ALIGN 16
-OPENSSL_wipe_cpu PROC PUBLIC
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- xor rcx,rcx
- xor rdx,rdx
- xor r8,r8
- xor r9,r9
- xor r10,r10
- xor r11,r11
- lea rax,QWORD PTR[8+rsp]
- DB 0F3h,0C3h ;repret
-OPENSSL_wipe_cpu ENDP
-PUBLIC OPENSSL_instrument_bus
-
-ALIGN 16
-OPENSSL_instrument_bus PROC PUBLIC
-
- mov r10,rcx
- mov rcx,rdx
- mov r11,rdx
-
- rdtsc
- mov r8d,eax
- mov r9d,0
- clflush [r10]
-DB 0f0h
- add DWORD PTR[r10],r9d
- jmp $L$oop
-ALIGN 16
-$L$oop:: rdtsc
- mov edx,eax
- sub eax,r8d
- mov r8d,edx
- mov r9d,eax
- clflush [r10]
-DB 0f0h
- add DWORD PTR[r10],eax
- lea r10,QWORD PTR[4+r10]
- sub rcx,1
- jnz $L$oop
-
- mov rax,r11
- DB 0F3h,0C3h ;repret
-
-OPENSSL_instrument_bus ENDP
-
-PUBLIC OPENSSL_instrument_bus2
-
-ALIGN 16
-OPENSSL_instrument_bus2 PROC PUBLIC
-
- mov r10,rcx
- mov rcx,rdx
- mov r11,r8
- mov QWORD PTR[8+rsp],rcx
-
- rdtsc
- mov r8d,eax
- mov r9d,0
-
- clflush [r10]
-DB 0f0h
- add DWORD PTR[r10],r9d
-
- rdtsc
- mov edx,eax
- sub eax,r8d
- mov r8d,edx
- mov r9d,eax
-$L$oop2::
- clflush [r10]
-DB 0f0h
- add DWORD PTR[r10],eax
-
- sub r11,1
- jz $L$done2
-
- rdtsc
- mov edx,eax
- sub eax,r8d
- mov r8d,edx
- cmp eax,r9d
- mov r9d,eax
- mov edx,0
- setne dl
- sub rcx,rdx
- lea r10,QWORD PTR[rdx*4+r10]
- jnz $L$oop2
-
-$L$done2::
- mov rax,QWORD PTR[8+rsp]
- sub rax,rcx
- DB 0F3h,0C3h ;repret
-
-OPENSSL_instrument_bus2 ENDP
-PUBLIC OPENSSL_ia32_rdrand_bytes
-
-ALIGN 16
-OPENSSL_ia32_rdrand_bytes PROC PUBLIC
-
- xor rax,rax
- cmp rdx,0
- je $L$done_rdrand_bytes
-
- mov r11,8
-$L$oop_rdrand_bytes::
-DB 73,15,199,242
- jc $L$break_rdrand_bytes
- dec r11
- jnz $L$oop_rdrand_bytes
- jmp $L$done_rdrand_bytes
-
-ALIGN 16
-$L$break_rdrand_bytes::
- cmp rdx,8
- jb $L$tail_rdrand_bytes
- mov QWORD PTR[rcx],r10
- lea rcx,QWORD PTR[8+rcx]
- add rax,8
- sub rdx,8
- jz $L$done_rdrand_bytes
- mov r11,8
- jmp $L$oop_rdrand_bytes
-
-ALIGN 16
-$L$tail_rdrand_bytes::
- mov BYTE PTR[rcx],r10b
- lea rcx,QWORD PTR[1+rcx]
- inc rax
- shr r10,8
- dec rdx
- jnz $L$tail_rdrand_bytes
-
-$L$done_rdrand_bytes::
- xor r10,r10
- DB 0F3h,0C3h ;repret
-
-OPENSSL_ia32_rdrand_bytes ENDP
-PUBLIC OPENSSL_ia32_rdseed_bytes
-
-ALIGN 16
-OPENSSL_ia32_rdseed_bytes PROC PUBLIC
-
- xor rax,rax
- cmp rdx,0
- je $L$done_rdseed_bytes
-
- mov r11,8
-$L$oop_rdseed_bytes::
-DB 73,15,199,250
- jc $L$break_rdseed_bytes
- dec r11
- jnz $L$oop_rdseed_bytes
- jmp $L$done_rdseed_bytes
-
-ALIGN 16
-$L$break_rdseed_bytes::
- cmp rdx,8
- jb $L$tail_rdseed_bytes
- mov QWORD PTR[rcx],r10
- lea rcx,QWORD PTR[8+rcx]
- add rax,8
- sub rdx,8
- jz $L$done_rdseed_bytes
- mov r11,8
- jmp $L$oop_rdseed_bytes
-
-ALIGN 16
-$L$tail_rdseed_bytes::
- mov BYTE PTR[rcx],r10b
- lea rcx,QWORD PTR[1+rcx]
- inc rax
- shr r10,8
- dec rdx
- jnz $L$tail_rdseed_bytes
-
-$L$done_rdseed_bytes::
- xor r10,r10
- DB 0F3h,0C3h ;repret
-
-OPENSSL_ia32_rdseed_bytes ENDP
-
-.text$ ENDS
-END
+OPTION DOTNAME
+EXTERN OPENSSL_cpuid_setup:NEAR
+
+.CRT$XCU SEGMENT READONLY ALIGN(8)
+ DQ OPENSSL_cpuid_setup
+
+
+.CRT$XCU ENDS
+_DATA SEGMENT
+COMM OPENSSL_ia32cap_P:DWORD:4
+
+_DATA ENDS
+.text$ SEGMENT ALIGN(256) 'CODE'
+
+PUBLIC OPENSSL_atomic_add
+
+ALIGN 16
+OPENSSL_atomic_add PROC PUBLIC
+
+ mov eax,DWORD PTR[rcx]
+$L$spin:: lea r8,QWORD PTR[rax*1+rdx]
+DB 0f0h
+ cmpxchg DWORD PTR[rcx],r8d
+ jne $L$spin
+ mov eax,r8d
+DB 048h,098h
+ DB 0F3h,0C3h ;repret
+
+OPENSSL_atomic_add ENDP
+
+PUBLIC OPENSSL_rdtsc
+
+ALIGN 16
+OPENSSL_rdtsc PROC PUBLIC
+
+ rdtsc
+ shl rdx,32
+ or rax,rdx
+ DB 0F3h,0C3h ;repret
+
+OPENSSL_rdtsc ENDP
+
+PUBLIC OPENSSL_ia32_cpuid
+
+ALIGN 16
+OPENSSL_ia32_cpuid PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_OPENSSL_ia32_cpuid::
+ mov rdi,rcx
+
+
+
+ mov r8,rbx
+
+
+ xor eax,eax
+ mov QWORD PTR[8+rdi],rax
+ cpuid
+ mov r11d,eax
+
+ xor eax,eax
+ cmp ebx,0756e6547h
+ setne al
+ mov r9d,eax
+ cmp edx,049656e69h
+ setne al
+ or r9d,eax
+ cmp ecx,06c65746eh
+ setne al
+ or r9d,eax
+ jz $L$intel
+
+ cmp ebx,068747541h
+ setne al
+ mov r10d,eax
+ cmp edx,069746E65h
+ setne al
+ or r10d,eax
+ cmp ecx,0444D4163h
+ setne al
+ or r10d,eax
+ jnz $L$intel
+
+
+ mov eax,080000000h
+ cpuid
+ cmp eax,080000001h
+ jb $L$intel
+ mov r10d,eax
+ mov eax,080000001h
+ cpuid
+ or r9d,ecx
+ and r9d,000000801h
+
+ cmp r10d,080000008h
+ jb $L$intel
+
+ mov eax,080000008h
+ cpuid
+ movzx r10,cl
+ inc r10
+
+ mov eax,1
+ cpuid
+ bt edx,28
+ jnc $L$generic
+ shr ebx,16
+ cmp bl,r10b
+ ja $L$generic
+ and edx,0efffffffh
+ jmp $L$generic
+
+$L$intel::
+ cmp r11d,4
+ mov r10d,-1
+ jb $L$nocacheinfo
+
+ mov eax,4
+ mov ecx,0
+ cpuid
+ mov r10d,eax
+ shr r10d,14
+ and r10d,0fffh
+
+$L$nocacheinfo::
+ mov eax,1
+ cpuid
+ movd xmm0,eax
+ and edx,0bfefffffh
+ cmp r9d,0
+ jne $L$notintel
+ or edx,040000000h
+ and ah,15
+ cmp ah,15
+ jne $L$notP4
+ or edx,000100000h
+$L$notP4::
+ cmp ah,6
+ jne $L$notintel
+ and eax,00fff0ff0h
+ cmp eax,000050670h
+ je $L$knights
+ cmp eax,000080650h
+ jne $L$notintel
+$L$knights::
+ and ecx,0fbffffffh
+
+$L$notintel::
+ bt edx,28
+ jnc $L$generic
+ and edx,0efffffffh
+ cmp r10d,0
+ je $L$generic
+
+ or edx,010000000h
+ shr ebx,16
+ cmp bl,1
+ ja $L$generic
+ and edx,0efffffffh
+$L$generic::
+ and r9d,000000800h
+ and ecx,0fffff7ffh
+ or r9d,ecx
+
+ mov r10d,edx
+
+ cmp r11d,7
+ jb $L$no_extended_info
+ mov eax,7
+ xor ecx,ecx
+ cpuid
+ bt r9d,26
+ jc $L$notknights
+ and ebx,0fff7ffffh
+$L$notknights::
+ movd eax,xmm0
+ and eax,00fff0ff0h
+ cmp eax,000050650h
+ jne $L$notskylakex
+ and ebx,0fffeffffh
+
+$L$notskylakex::
+ mov DWORD PTR[8+rdi],ebx
+ mov DWORD PTR[12+rdi],ecx
+$L$no_extended_info::
+
+ bt r9d,27
+ jnc $L$clear_avx
+ xor ecx,ecx
+DB 00fh,001h,0d0h
+ and eax,0e6h
+ cmp eax,0e6h
+ je $L$done
+ and DWORD PTR[8+rdi],03fdeffffh
+
+
+
+
+ and eax,6
+ cmp eax,6
+ je $L$done
+$L$clear_avx::
+ mov eax,0efffe7ffh
+ and r9d,eax
+ mov eax,03fdeffdfh
+ and DWORD PTR[8+rdi],eax
+$L$done::
+ shl r9,32
+ mov eax,r10d
+ mov rbx,r8
+
+ or rax,r9
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+
+$L$SEH_end_OPENSSL_ia32_cpuid::
+OPENSSL_ia32_cpuid ENDP
+
+PUBLIC OPENSSL_cleanse
+
+ALIGN 16
+OPENSSL_cleanse PROC PUBLIC
+
+ xor rax,rax
+ cmp rdx,15
+ jae $L$ot
+ cmp rdx,0
+ je $L$ret
+$L$ittle::
+ mov BYTE PTR[rcx],al
+ sub rdx,1
+ lea rcx,QWORD PTR[1+rcx]
+ jnz $L$ittle
+$L$ret::
+ DB 0F3h,0C3h ;repret
+ALIGN 16
+$L$ot::
+ test rcx,7
+ jz $L$aligned
+ mov BYTE PTR[rcx],al
+ lea rdx,QWORD PTR[((-1))+rdx]
+ lea rcx,QWORD PTR[1+rcx]
+ jmp $L$ot
+$L$aligned::
+ mov QWORD PTR[rcx],rax
+ lea rdx,QWORD PTR[((-8))+rdx]
+ test rdx,-8
+ lea rcx,QWORD PTR[8+rcx]
+ jnz $L$aligned
+ cmp rdx,0
+ jne $L$ittle
+ DB 0F3h,0C3h ;repret
+
+OPENSSL_cleanse ENDP
+
+PUBLIC CRYPTO_memcmp
+
+ALIGN 16
+CRYPTO_memcmp PROC PUBLIC
+
+ xor rax,rax
+ xor r10,r10
+ cmp r8,0
+ je $L$no_data
+ cmp r8,16
+ jne $L$oop_cmp
+ mov r10,QWORD PTR[rcx]
+ mov r11,QWORD PTR[8+rcx]
+ mov r8,1
+ xor r10,QWORD PTR[rdx]
+ xor r11,QWORD PTR[8+rdx]
+ or r10,r11
+ cmovnz rax,r8
+ DB 0F3h,0C3h ;repret
+
+ALIGN 16
+$L$oop_cmp::
+ mov r10b,BYTE PTR[rcx]
+ lea rcx,QWORD PTR[1+rcx]
+ xor r10b,BYTE PTR[rdx]
+ lea rdx,QWORD PTR[1+rdx]
+ or al,r10b
+ dec r8
+ jnz $L$oop_cmp
+ neg rax
+ shr rax,63
+$L$no_data::
+ DB 0F3h,0C3h ;repret
+
+CRYPTO_memcmp ENDP
+PUBLIC OPENSSL_wipe_cpu
+
+ALIGN 16
+OPENSSL_wipe_cpu PROC PUBLIC
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ xor rcx,rcx
+ xor rdx,rdx
+ xor r8,r8
+ xor r9,r9
+ xor r10,r10
+ xor r11,r11
+ lea rax,QWORD PTR[8+rsp]
+ DB 0F3h,0C3h ;repret
+OPENSSL_wipe_cpu ENDP
+PUBLIC OPENSSL_instrument_bus
+
+ALIGN 16
+OPENSSL_instrument_bus PROC PUBLIC
+
+ mov r10,rcx
+ mov rcx,rdx
+ mov r11,rdx
+
+ rdtsc
+ mov r8d,eax
+ mov r9d,0
+ clflush [r10]
+DB 0f0h
+ add DWORD PTR[r10],r9d
+ jmp $L$oop
+ALIGN 16
+$L$oop:: rdtsc
+ mov edx,eax
+ sub eax,r8d
+ mov r8d,edx
+ mov r9d,eax
+ clflush [r10]
+DB 0f0h
+ add DWORD PTR[r10],eax
+ lea r10,QWORD PTR[4+r10]
+ sub rcx,1
+ jnz $L$oop
+
+ mov rax,r11
+ DB 0F3h,0C3h ;repret
+
+OPENSSL_instrument_bus ENDP
+
+PUBLIC OPENSSL_instrument_bus2
+
+ALIGN 16
+OPENSSL_instrument_bus2 PROC PUBLIC
+
+ mov r10,rcx
+ mov rcx,rdx
+ mov r11,r8
+ mov QWORD PTR[8+rsp],rcx
+
+ rdtsc
+ mov r8d,eax
+ mov r9d,0
+
+ clflush [r10]
+DB 0f0h
+ add DWORD PTR[r10],r9d
+
+ rdtsc
+ mov edx,eax
+ sub eax,r8d
+ mov r8d,edx
+ mov r9d,eax
+$L$oop2::
+ clflush [r10]
+DB 0f0h
+ add DWORD PTR[r10],eax
+
+ sub r11,1
+ jz $L$done2
+
+ rdtsc
+ mov edx,eax
+ sub eax,r8d
+ mov r8d,edx
+ cmp eax,r9d
+ mov r9d,eax
+ mov edx,0
+ setne dl
+ sub rcx,rdx
+ lea r10,QWORD PTR[rdx*4+r10]
+ jnz $L$oop2
+
+$L$done2::
+ mov rax,QWORD PTR[8+rsp]
+ sub rax,rcx
+ DB 0F3h,0C3h ;repret
+
+OPENSSL_instrument_bus2 ENDP
+PUBLIC OPENSSL_ia32_rdrand_bytes
+
+ALIGN 16
+OPENSSL_ia32_rdrand_bytes PROC PUBLIC
+
+ xor rax,rax
+ cmp rdx,0
+ je $L$done_rdrand_bytes
+
+ mov r11,8
+$L$oop_rdrand_bytes::
+DB 73,15,199,242
+ jc $L$break_rdrand_bytes
+ dec r11
+ jnz $L$oop_rdrand_bytes
+ jmp $L$done_rdrand_bytes
+
+ALIGN 16
+$L$break_rdrand_bytes::
+ cmp rdx,8
+ jb $L$tail_rdrand_bytes
+ mov QWORD PTR[rcx],r10
+ lea rcx,QWORD PTR[8+rcx]
+ add rax,8
+ sub rdx,8
+ jz $L$done_rdrand_bytes
+ mov r11,8
+ jmp $L$oop_rdrand_bytes
+
+ALIGN 16
+$L$tail_rdrand_bytes::
+ mov BYTE PTR[rcx],r10b
+ lea rcx,QWORD PTR[1+rcx]
+ inc rax
+ shr r10,8
+ dec rdx
+ jnz $L$tail_rdrand_bytes
+
+$L$done_rdrand_bytes::
+ xor r10,r10
+ DB 0F3h,0C3h ;repret
+
+OPENSSL_ia32_rdrand_bytes ENDP
+PUBLIC OPENSSL_ia32_rdseed_bytes
+
+ALIGN 16
+OPENSSL_ia32_rdseed_bytes PROC PUBLIC
+
+ xor rax,rax
+ cmp rdx,0
+ je $L$done_rdseed_bytes
+
+ mov r11,8
+$L$oop_rdseed_bytes::
+DB 73,15,199,250
+ jc $L$break_rdseed_bytes
+ dec r11
+ jnz $L$oop_rdseed_bytes
+ jmp $L$done_rdseed_bytes
+
+ALIGN 16
+$L$break_rdseed_bytes::
+ cmp rdx,8
+ jb $L$tail_rdseed_bytes
+ mov QWORD PTR[rcx],r10
+ lea rcx,QWORD PTR[8+rcx]
+ add rax,8
+ sub rdx,8
+ jz $L$done_rdseed_bytes
+ mov r11,8
+ jmp $L$oop_rdseed_bytes
+
+ALIGN 16
+$L$tail_rdseed_bytes::
+ mov BYTE PTR[rcx],r10b
+ lea rcx,QWORD PTR[1+rcx]
+ inc rax
+ shr r10,8
+ dec rdx
+ jnz $L$tail_rdseed_bytes
+
+$L$done_rdseed_bytes::
+ xor r10,r10
+ DB 0F3h,0C3h ;repret
+
+OPENSSL_ia32_rdseed_bytes ENDP
+
+.text$ ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/crypto/x86cpuid.masm b/contrib/libs/openssl/asm/windows/crypto/x86cpuid.masm
index 2097c47e47..2a7b1fd55e 100644
--- a/contrib/libs/openssl/asm/windows/crypto/x86cpuid.masm
+++ b/contrib/libs/openssl/asm/windows/crypto/x86cpuid.masm
@@ -1,521 +1,521 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-ALIGN 16
-_OPENSSL_ia32_cpuid PROC PUBLIC
-$L_OPENSSL_ia32_cpuid_begin::
- push ebp
- push ebx
- push esi
- push edi
- xor edx,edx
- pushfd
- pop eax
- mov ecx,eax
- xor eax,2097152
- push eax
- popfd
- pushfd
- pop eax
- xor ecx,eax
- xor eax,eax
- mov esi,DWORD PTR 20[esp]
- mov DWORD PTR 8[esi],eax
- bt ecx,21
- jnc $L000nocpuid
- cpuid
- mov edi,eax
- xor eax,eax
- cmp ebx,1970169159
- setne al
- mov ebp,eax
- cmp edx,1231384169
- setne al
- or ebp,eax
- cmp ecx,1818588270
- setne al
- or ebp,eax
- jz $L001intel
- cmp ebx,1752462657
- setne al
- mov esi,eax
- cmp edx,1769238117
- setne al
- or esi,eax
- cmp ecx,1145913699
- setne al
- or esi,eax
- jnz $L001intel
- mov eax,2147483648
- cpuid
- cmp eax,2147483649
- jb $L001intel
- mov esi,eax
- mov eax,2147483649
- cpuid
- or ebp,ecx
- and ebp,2049
- cmp esi,2147483656
- jb $L001intel
- mov eax,2147483656
- cpuid
- movzx esi,cl
- inc esi
- mov eax,1
- xor ecx,ecx
- cpuid
- bt edx,28
- jnc $L002generic
- shr ebx,16
- and ebx,255
- cmp ebx,esi
- ja $L002generic
- and edx,4026531839
- jmp $L002generic
-$L001intel:
- cmp edi,4
- mov esi,-1
- jb $L003nocacheinfo
- mov eax,4
- mov ecx,0
- cpuid
- mov esi,eax
- shr esi,14
- and esi,4095
-$L003nocacheinfo:
- mov eax,1
- xor ecx,ecx
- cpuid
- and edx,3220176895
- cmp ebp,0
- jne $L004notintel
- or edx,1073741824
- and ah,15
- cmp ah,15
- jne $L004notintel
- or edx,1048576
-$L004notintel:
- bt edx,28
- jnc $L002generic
- and edx,4026531839
- cmp esi,0
- je $L002generic
- or edx,268435456
- shr ebx,16
- cmp bl,1
- ja $L002generic
- and edx,4026531839
-$L002generic:
- and ebp,2048
- and ecx,4294965247
- mov esi,edx
- or ebp,ecx
- cmp edi,7
- mov edi,DWORD PTR 20[esp]
- jb $L005no_extended_info
- mov eax,7
- xor ecx,ecx
- cpuid
- mov DWORD PTR 8[edi],ebx
-$L005no_extended_info:
- bt ebp,27
- jnc $L006clear_avx
- xor ecx,ecx
-DB 15,1,208
- and eax,6
- cmp eax,6
- je $L007done
- cmp eax,2
- je $L006clear_avx
-$L008clear_xmm:
- and ebp,4261412861
- and esi,4278190079
-$L006clear_avx:
- and ebp,4026525695
- and DWORD PTR 8[edi],4294967263
-$L007done:
- mov eax,esi
- mov edx,ebp
-$L000nocpuid:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_OPENSSL_ia32_cpuid ENDP
-;EXTERN _OPENSSL_ia32cap_P:NEAR
-ALIGN 16
-_OPENSSL_rdtsc PROC PUBLIC
-$L_OPENSSL_rdtsc_begin::
- xor eax,eax
- xor edx,edx
- lea ecx,DWORD PTR _OPENSSL_ia32cap_P
- bt DWORD PTR [ecx],4
- jnc $L009notsc
- rdtsc
-$L009notsc:
- ret
-_OPENSSL_rdtsc ENDP
-ALIGN 16
-_OPENSSL_instrument_halt PROC PUBLIC
-$L_OPENSSL_instrument_halt_begin::
- lea ecx,DWORD PTR _OPENSSL_ia32cap_P
- bt DWORD PTR [ecx],4
- jnc $L010nohalt
-DD 2421723150
- and eax,3
- jnz $L010nohalt
- pushfd
- pop eax
- bt eax,9
- jnc $L010nohalt
- rdtsc
- push edx
- push eax
- hlt
- rdtsc
- sub eax,DWORD PTR [esp]
- sbb edx,DWORD PTR 4[esp]
- add esp,8
- ret
-$L010nohalt:
- xor eax,eax
- xor edx,edx
- ret
-_OPENSSL_instrument_halt ENDP
-ALIGN 16
-_OPENSSL_far_spin PROC PUBLIC
-$L_OPENSSL_far_spin_begin::
- pushfd
- pop eax
- bt eax,9
- jnc $L011nospin
- mov eax,DWORD PTR 4[esp]
- mov ecx,DWORD PTR 8[esp]
-DD 2430111262
- xor eax,eax
- mov edx,DWORD PTR [ecx]
- jmp $L012spin
-ALIGN 16
-$L012spin:
- inc eax
- cmp edx,DWORD PTR [ecx]
- je $L012spin
-DD 529567888
- ret
-$L011nospin:
- xor eax,eax
- xor edx,edx
- ret
-_OPENSSL_far_spin ENDP
-ALIGN 16
-_OPENSSL_wipe_cpu PROC PUBLIC
-$L_OPENSSL_wipe_cpu_begin::
- xor eax,eax
- xor edx,edx
- lea ecx,DWORD PTR _OPENSSL_ia32cap_P
- mov ecx,DWORD PTR [ecx]
- bt DWORD PTR [ecx],1
- jnc $L013no_x87
- and ecx,83886080
- cmp ecx,83886080
- jne $L014no_sse2
- pxor xmm0,xmm0
- pxor xmm1,xmm1
- pxor xmm2,xmm2
- pxor xmm3,xmm3
- pxor xmm4,xmm4
- pxor xmm5,xmm5
- pxor xmm6,xmm6
- pxor xmm7,xmm7
-$L014no_sse2:
-DD 4007259865,4007259865,4007259865,4007259865
-DD 2430851995
-$L013no_x87:
- lea eax,DWORD PTR 4[esp]
- ret
-_OPENSSL_wipe_cpu ENDP
-ALIGN 16
-_OPENSSL_atomic_add PROC PUBLIC
-$L_OPENSSL_atomic_add_begin::
- mov edx,DWORD PTR 4[esp]
- mov ecx,DWORD PTR 8[esp]
- push ebx
- nop
- mov eax,DWORD PTR [edx]
-$L015spin:
- lea ebx,DWORD PTR [ecx*1+eax]
- nop
-DD 447811568
- jne $L015spin
- mov eax,ebx
- pop ebx
- ret
-_OPENSSL_atomic_add ENDP
-ALIGN 16
-_OPENSSL_cleanse PROC PUBLIC
-$L_OPENSSL_cleanse_begin::
- mov edx,DWORD PTR 4[esp]
- mov ecx,DWORD PTR 8[esp]
- xor eax,eax
- cmp ecx,7
- jae $L016lot
- cmp ecx,0
- je $L017ret
-$L018little:
- mov BYTE PTR [edx],al
- sub ecx,1
- lea edx,DWORD PTR 1[edx]
- jnz $L018little
-$L017ret:
- ret
-ALIGN 16
-$L016lot:
- test edx,3
- jz $L019aligned
- mov BYTE PTR [edx],al
- lea ecx,DWORD PTR [ecx-1]
- lea edx,DWORD PTR 1[edx]
- jmp $L016lot
-$L019aligned:
- mov DWORD PTR [edx],eax
- lea ecx,DWORD PTR [ecx-4]
- test ecx,-4
- lea edx,DWORD PTR 4[edx]
- jnz $L019aligned
- cmp ecx,0
- jne $L018little
- ret
-_OPENSSL_cleanse ENDP
-ALIGN 16
-_CRYPTO_memcmp PROC PUBLIC
-$L_CRYPTO_memcmp_begin::
- push esi
- push edi
- mov esi,DWORD PTR 12[esp]
- mov edi,DWORD PTR 16[esp]
- mov ecx,DWORD PTR 20[esp]
- xor eax,eax
- xor edx,edx
- cmp ecx,0
- je $L020no_data
-$L021loop:
- mov dl,BYTE PTR [esi]
- lea esi,DWORD PTR 1[esi]
- xor dl,BYTE PTR [edi]
- lea edi,DWORD PTR 1[edi]
- or al,dl
- dec ecx
- jnz $L021loop
- neg eax
- shr eax,31
-$L020no_data:
- pop edi
- pop esi
- ret
-_CRYPTO_memcmp ENDP
-ALIGN 16
-_OPENSSL_instrument_bus PROC PUBLIC
-$L_OPENSSL_instrument_bus_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov eax,0
- lea edx,DWORD PTR _OPENSSL_ia32cap_P
- bt DWORD PTR [edx],4
- jnc $L022nogo
- bt DWORD PTR [edx],19
- jnc $L022nogo
- mov edi,DWORD PTR 20[esp]
- mov ecx,DWORD PTR 24[esp]
- rdtsc
- mov esi,eax
- mov ebx,0
- clflush DWORD PTR [edi]
-DB 240
- add DWORD PTR [edi],ebx
- jmp $L023loop
-ALIGN 16
-$L023loop:
- rdtsc
- mov edx,eax
- sub eax,esi
- mov esi,edx
- mov ebx,eax
- clflush DWORD PTR [edi]
-DB 240
- add DWORD PTR [edi],eax
- lea edi,DWORD PTR 4[edi]
- sub ecx,1
- jnz $L023loop
- mov eax,DWORD PTR 24[esp]
-$L022nogo:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_OPENSSL_instrument_bus ENDP
-ALIGN 16
-_OPENSSL_instrument_bus2 PROC PUBLIC
-$L_OPENSSL_instrument_bus2_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov eax,0
- lea edx,DWORD PTR _OPENSSL_ia32cap_P
- bt DWORD PTR [edx],4
- jnc $L024nogo
- bt DWORD PTR [edx],19
- jnc $L024nogo
- mov edi,DWORD PTR 20[esp]
- mov ecx,DWORD PTR 24[esp]
- mov ebp,DWORD PTR 28[esp]
- rdtsc
- mov esi,eax
- mov ebx,0
- clflush DWORD PTR [edi]
-DB 240
- add DWORD PTR [edi],ebx
- rdtsc
- mov edx,eax
- sub eax,esi
- mov esi,edx
- mov ebx,eax
- jmp $L025loop2
-ALIGN 16
-$L025loop2:
- clflush DWORD PTR [edi]
-DB 240
- add DWORD PTR [edi],eax
- sub ebp,1
- jz $L026done2
- rdtsc
- mov edx,eax
- sub eax,esi
- mov esi,edx
- cmp eax,ebx
- mov ebx,eax
- mov edx,0
- setne dl
- sub ecx,edx
- lea edi,DWORD PTR [edx*4+edi]
- jnz $L025loop2
-$L026done2:
- mov eax,DWORD PTR 24[esp]
- sub eax,ecx
-$L024nogo:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_OPENSSL_instrument_bus2 ENDP
-ALIGN 16
-_OPENSSL_ia32_rdrand_bytes PROC PUBLIC
-$L_OPENSSL_ia32_rdrand_bytes_begin::
- push edi
- push ebx
- xor eax,eax
- mov edi,DWORD PTR 12[esp]
- mov ebx,DWORD PTR 16[esp]
- cmp ebx,0
- je $L027done
- mov ecx,8
-$L028loop:
-DB 15,199,242
- jc $L029break
- loop $L028loop
- jmp $L027done
-ALIGN 16
-$L029break:
- cmp ebx,4
- jb $L030tail
- mov DWORD PTR [edi],edx
- lea edi,DWORD PTR 4[edi]
- add eax,4
- sub ebx,4
- jz $L027done
- mov ecx,8
- jmp $L028loop
-ALIGN 16
-$L030tail:
- mov BYTE PTR [edi],dl
- lea edi,DWORD PTR 1[edi]
- inc eax
- shr edx,8
- dec ebx
- jnz $L030tail
-$L027done:
- xor edx,edx
- pop ebx
- pop edi
- ret
-_OPENSSL_ia32_rdrand_bytes ENDP
-ALIGN 16
-_OPENSSL_ia32_rdseed_bytes PROC PUBLIC
-$L_OPENSSL_ia32_rdseed_bytes_begin::
- push edi
- push ebx
- xor eax,eax
- mov edi,DWORD PTR 12[esp]
- mov ebx,DWORD PTR 16[esp]
- cmp ebx,0
- je $L031done
- mov ecx,8
-$L032loop:
-DB 15,199,250
- jc $L033break
- loop $L032loop
- jmp $L031done
-ALIGN 16
-$L033break:
- cmp ebx,4
- jb $L034tail
- mov DWORD PTR [edi],edx
- lea edi,DWORD PTR 4[edi]
- add eax,4
- sub ebx,4
- jz $L031done
- mov ecx,8
- jmp $L032loop
-ALIGN 16
-$L034tail:
- mov BYTE PTR [edi],dl
- lea edi,DWORD PTR 1[edi]
- inc eax
- shr edx,8
- dec ebx
- jnz $L034tail
-$L031done:
- xor edx,edx
- pop ebx
- pop edi
- ret
-_OPENSSL_ia32_rdseed_bytes ENDP
-.text$ ENDS
-.bss SEGMENT 'BSS'
-COMM _OPENSSL_ia32cap_P:DWORD:4
-.bss ENDS
-.CRT$XCU SEGMENT DWORD PUBLIC 'DATA'
-EXTERN _OPENSSL_cpuid_setup:NEAR
-DD _OPENSSL_cpuid_setup
-.CRT$XCU ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN 16
+_OPENSSL_ia32_cpuid PROC PUBLIC
+$L_OPENSSL_ia32_cpuid_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ xor edx,edx
+ pushfd
+ pop eax
+ mov ecx,eax
+ xor eax,2097152
+ push eax
+ popfd
+ pushfd
+ pop eax
+ xor ecx,eax
+ xor eax,eax
+ mov esi,DWORD PTR 20[esp]
+ mov DWORD PTR 8[esi],eax
+ bt ecx,21
+ jnc $L000nocpuid
+ cpuid
+ mov edi,eax
+ xor eax,eax
+ cmp ebx,1970169159
+ setne al
+ mov ebp,eax
+ cmp edx,1231384169
+ setne al
+ or ebp,eax
+ cmp ecx,1818588270
+ setne al
+ or ebp,eax
+ jz $L001intel
+ cmp ebx,1752462657
+ setne al
+ mov esi,eax
+ cmp edx,1769238117
+ setne al
+ or esi,eax
+ cmp ecx,1145913699
+ setne al
+ or esi,eax
+ jnz $L001intel
+ mov eax,2147483648
+ cpuid
+ cmp eax,2147483649
+ jb $L001intel
+ mov esi,eax
+ mov eax,2147483649
+ cpuid
+ or ebp,ecx
+ and ebp,2049
+ cmp esi,2147483656
+ jb $L001intel
+ mov eax,2147483656
+ cpuid
+ movzx esi,cl
+ inc esi
+ mov eax,1
+ xor ecx,ecx
+ cpuid
+ bt edx,28
+ jnc $L002generic
+ shr ebx,16
+ and ebx,255
+ cmp ebx,esi
+ ja $L002generic
+ and edx,4026531839
+ jmp $L002generic
+$L001intel:
+ cmp edi,4
+ mov esi,-1
+ jb $L003nocacheinfo
+ mov eax,4
+ mov ecx,0
+ cpuid
+ mov esi,eax
+ shr esi,14
+ and esi,4095
+$L003nocacheinfo:
+ mov eax,1
+ xor ecx,ecx
+ cpuid
+ and edx,3220176895
+ cmp ebp,0
+ jne $L004notintel
+ or edx,1073741824
+ and ah,15
+ cmp ah,15
+ jne $L004notintel
+ or edx,1048576
+$L004notintel:
+ bt edx,28
+ jnc $L002generic
+ and edx,4026531839
+ cmp esi,0
+ je $L002generic
+ or edx,268435456
+ shr ebx,16
+ cmp bl,1
+ ja $L002generic
+ and edx,4026531839
+$L002generic:
+ and ebp,2048
+ and ecx,4294965247
+ mov esi,edx
+ or ebp,ecx
+ cmp edi,7
+ mov edi,DWORD PTR 20[esp]
+ jb $L005no_extended_info
+ mov eax,7
+ xor ecx,ecx
+ cpuid
+ mov DWORD PTR 8[edi],ebx
+$L005no_extended_info:
+ bt ebp,27
+ jnc $L006clear_avx
+ xor ecx,ecx
+DB 15,1,208
+ and eax,6
+ cmp eax,6
+ je $L007done
+ cmp eax,2
+ je $L006clear_avx
+$L008clear_xmm:
+ and ebp,4261412861
+ and esi,4278190079
+$L006clear_avx:
+ and ebp,4026525695
+ and DWORD PTR 8[edi],4294967263
+$L007done:
+ mov eax,esi
+ mov edx,ebp
+$L000nocpuid:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_OPENSSL_ia32_cpuid ENDP
+;EXTERN _OPENSSL_ia32cap_P:NEAR
+ALIGN 16
+_OPENSSL_rdtsc PROC PUBLIC
+$L_OPENSSL_rdtsc_begin::
+ xor eax,eax
+ xor edx,edx
+ lea ecx,DWORD PTR _OPENSSL_ia32cap_P
+ bt DWORD PTR [ecx],4
+ jnc $L009notsc
+ rdtsc
+$L009notsc:
+ ret
+_OPENSSL_rdtsc ENDP
+ALIGN 16
+_OPENSSL_instrument_halt PROC PUBLIC
+$L_OPENSSL_instrument_halt_begin::
+ lea ecx,DWORD PTR _OPENSSL_ia32cap_P
+ bt DWORD PTR [ecx],4
+ jnc $L010nohalt
+DD 2421723150
+ and eax,3
+ jnz $L010nohalt
+ pushfd
+ pop eax
+ bt eax,9
+ jnc $L010nohalt
+ rdtsc
+ push edx
+ push eax
+ hlt
+ rdtsc
+ sub eax,DWORD PTR [esp]
+ sbb edx,DWORD PTR 4[esp]
+ add esp,8
+ ret
+$L010nohalt:
+ xor eax,eax
+ xor edx,edx
+ ret
+_OPENSSL_instrument_halt ENDP
+ALIGN 16
+_OPENSSL_far_spin PROC PUBLIC
+$L_OPENSSL_far_spin_begin::
+ pushfd
+ pop eax
+ bt eax,9
+ jnc $L011nospin
+ mov eax,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 8[esp]
+DD 2430111262
+ xor eax,eax
+ mov edx,DWORD PTR [ecx]
+ jmp $L012spin
+ALIGN 16
+$L012spin:
+ inc eax
+ cmp edx,DWORD PTR [ecx]
+ je $L012spin
+DD 529567888
+ ret
+$L011nospin:
+ xor eax,eax
+ xor edx,edx
+ ret
+_OPENSSL_far_spin ENDP
+ALIGN 16
+_OPENSSL_wipe_cpu PROC PUBLIC
+$L_OPENSSL_wipe_cpu_begin::
+ xor eax,eax
+ xor edx,edx
+ lea ecx,DWORD PTR _OPENSSL_ia32cap_P
+ mov ecx,DWORD PTR [ecx]
+ bt DWORD PTR [ecx],1
+ jnc $L013no_x87
+ and ecx,83886080
+ cmp ecx,83886080
+ jne $L014no_sse2
+ pxor xmm0,xmm0
+ pxor xmm1,xmm1
+ pxor xmm2,xmm2
+ pxor xmm3,xmm3
+ pxor xmm4,xmm4
+ pxor xmm5,xmm5
+ pxor xmm6,xmm6
+ pxor xmm7,xmm7
+$L014no_sse2:
+DD 4007259865,4007259865,4007259865,4007259865
+DD 2430851995
+$L013no_x87:
+ lea eax,DWORD PTR 4[esp]
+ ret
+_OPENSSL_wipe_cpu ENDP
+ALIGN 16
+_OPENSSL_atomic_add PROC PUBLIC
+$L_OPENSSL_atomic_add_begin::
+ mov edx,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 8[esp]
+ push ebx
+ nop
+ mov eax,DWORD PTR [edx]
+$L015spin:
+ lea ebx,DWORD PTR [ecx*1+eax]
+ nop
+DD 447811568
+ jne $L015spin
+ mov eax,ebx
+ pop ebx
+ ret
+_OPENSSL_atomic_add ENDP
+ALIGN 16
+_OPENSSL_cleanse PROC PUBLIC
+$L_OPENSSL_cleanse_begin::
+ mov edx,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 8[esp]
+ xor eax,eax
+ cmp ecx,7
+ jae $L016lot
+ cmp ecx,0
+ je $L017ret
+$L018little:
+ mov BYTE PTR [edx],al
+ sub ecx,1
+ lea edx,DWORD PTR 1[edx]
+ jnz $L018little
+$L017ret:
+ ret
+ALIGN 16
+$L016lot:
+ test edx,3
+ jz $L019aligned
+ mov BYTE PTR [edx],al
+ lea ecx,DWORD PTR [ecx-1]
+ lea edx,DWORD PTR 1[edx]
+ jmp $L016lot
+$L019aligned:
+ mov DWORD PTR [edx],eax
+ lea ecx,DWORD PTR [ecx-4]
+ test ecx,-4
+ lea edx,DWORD PTR 4[edx]
+ jnz $L019aligned
+ cmp ecx,0
+ jne $L018little
+ ret
+_OPENSSL_cleanse ENDP
+ALIGN 16
+_CRYPTO_memcmp PROC PUBLIC
+$L_CRYPTO_memcmp_begin::
+ push esi
+ push edi
+ mov esi,DWORD PTR 12[esp]
+ mov edi,DWORD PTR 16[esp]
+ mov ecx,DWORD PTR 20[esp]
+ xor eax,eax
+ xor edx,edx
+ cmp ecx,0
+ je $L020no_data
+$L021loop:
+ mov dl,BYTE PTR [esi]
+ lea esi,DWORD PTR 1[esi]
+ xor dl,BYTE PTR [edi]
+ lea edi,DWORD PTR 1[edi]
+ or al,dl
+ dec ecx
+ jnz $L021loop
+ neg eax
+ shr eax,31
+$L020no_data:
+ pop edi
+ pop esi
+ ret
+_CRYPTO_memcmp ENDP
+ALIGN 16
+_OPENSSL_instrument_bus PROC PUBLIC
+$L_OPENSSL_instrument_bus_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov eax,0
+ lea edx,DWORD PTR _OPENSSL_ia32cap_P
+ bt DWORD PTR [edx],4
+ jnc $L022nogo
+ bt DWORD PTR [edx],19
+ jnc $L022nogo
+ mov edi,DWORD PTR 20[esp]
+ mov ecx,DWORD PTR 24[esp]
+ rdtsc
+ mov esi,eax
+ mov ebx,0
+ clflush DWORD PTR [edi]
+DB 240
+ add DWORD PTR [edi],ebx
+ jmp $L023loop
+ALIGN 16
+$L023loop:
+ rdtsc
+ mov edx,eax
+ sub eax,esi
+ mov esi,edx
+ mov ebx,eax
+ clflush DWORD PTR [edi]
+DB 240
+ add DWORD PTR [edi],eax
+ lea edi,DWORD PTR 4[edi]
+ sub ecx,1
+ jnz $L023loop
+ mov eax,DWORD PTR 24[esp]
+$L022nogo:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_OPENSSL_instrument_bus ENDP
+ALIGN 16
+_OPENSSL_instrument_bus2 PROC PUBLIC
+$L_OPENSSL_instrument_bus2_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov eax,0
+ lea edx,DWORD PTR _OPENSSL_ia32cap_P
+ bt DWORD PTR [edx],4
+ jnc $L024nogo
+ bt DWORD PTR [edx],19
+ jnc $L024nogo
+ mov edi,DWORD PTR 20[esp]
+ mov ecx,DWORD PTR 24[esp]
+ mov ebp,DWORD PTR 28[esp]
+ rdtsc
+ mov esi,eax
+ mov ebx,0
+ clflush DWORD PTR [edi]
+DB 240
+ add DWORD PTR [edi],ebx
+ rdtsc
+ mov edx,eax
+ sub eax,esi
+ mov esi,edx
+ mov ebx,eax
+ jmp $L025loop2
+ALIGN 16
+$L025loop2:
+ clflush DWORD PTR [edi]
+DB 240
+ add DWORD PTR [edi],eax
+ sub ebp,1
+ jz $L026done2
+ rdtsc
+ mov edx,eax
+ sub eax,esi
+ mov esi,edx
+ cmp eax,ebx
+ mov ebx,eax
+ mov edx,0
+ setne dl
+ sub ecx,edx
+ lea edi,DWORD PTR [edx*4+edi]
+ jnz $L025loop2
+$L026done2:
+ mov eax,DWORD PTR 24[esp]
+ sub eax,ecx
+$L024nogo:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_OPENSSL_instrument_bus2 ENDP
+ALIGN 16
+_OPENSSL_ia32_rdrand_bytes PROC PUBLIC
+$L_OPENSSL_ia32_rdrand_bytes_begin::
+ push edi
+ push ebx
+ xor eax,eax
+ mov edi,DWORD PTR 12[esp]
+ mov ebx,DWORD PTR 16[esp]
+ cmp ebx,0
+ je $L027done
+ mov ecx,8
+$L028loop:
+DB 15,199,242
+ jc $L029break
+ loop $L028loop
+ jmp $L027done
+ALIGN 16
+$L029break:
+ cmp ebx,4
+ jb $L030tail
+ mov DWORD PTR [edi],edx
+ lea edi,DWORD PTR 4[edi]
+ add eax,4
+ sub ebx,4
+ jz $L027done
+ mov ecx,8
+ jmp $L028loop
+ALIGN 16
+$L030tail:
+ mov BYTE PTR [edi],dl
+ lea edi,DWORD PTR 1[edi]
+ inc eax
+ shr edx,8
+ dec ebx
+ jnz $L030tail
+$L027done:
+ xor edx,edx
+ pop ebx
+ pop edi
+ ret
+_OPENSSL_ia32_rdrand_bytes ENDP
+ALIGN 16
+_OPENSSL_ia32_rdseed_bytes PROC PUBLIC
+$L_OPENSSL_ia32_rdseed_bytes_begin::
+ push edi
+ push ebx
+ xor eax,eax
+ mov edi,DWORD PTR 12[esp]
+ mov ebx,DWORD PTR 16[esp]
+ cmp ebx,0
+ je $L031done
+ mov ecx,8
+$L032loop:
+DB 15,199,250
+ jc $L033break
+ loop $L032loop
+ jmp $L031done
+ALIGN 16
+$L033break:
+ cmp ebx,4
+ jb $L034tail
+ mov DWORD PTR [edi],edx
+ lea edi,DWORD PTR 4[edi]
+ add eax,4
+ sub ebx,4
+ jz $L031done
+ mov ecx,8
+ jmp $L032loop
+ALIGN 16
+$L034tail:
+ mov BYTE PTR [edi],dl
+ lea edi,DWORD PTR 1[edi]
+ inc eax
+ shr edx,8
+ dec ebx
+ jnz $L034tail
+$L031done:
+ xor edx,edx
+ pop ebx
+ pop edi
+ ret
+_OPENSSL_ia32_rdseed_bytes ENDP
+.text$ ENDS
+.bss SEGMENT 'BSS'
+COMM _OPENSSL_ia32cap_P:DWORD:4
+.bss ENDS
+.CRT$XCU SEGMENT DWORD PUBLIC 'DATA'
+EXTERN _OPENSSL_cpuid_setup:NEAR
+DD _OPENSSL_cpuid_setup
+.CRT$XCU ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/engines/e_padlock-x86.masm b/contrib/libs/openssl/asm/windows/engines/e_padlock-x86.masm
index ed83a736f2..c4c322d12e 100644
--- a/contrib/libs/openssl/asm/windows/engines/e_padlock-x86.masm
+++ b/contrib/libs/openssl/asm/windows/engines/e_padlock-x86.masm
@@ -1,1037 +1,1037 @@
-IF @Version LT 800
-ECHO MASM version 8.00 or later is strongly recommended.
-ENDIF
-.686
-.XMM
-IF @Version LT 800
-XMMWORD STRUCT 16
-DQ 2 dup (?)
-XMMWORD ENDS
-ENDIF
-
-.MODEL FLAT
-OPTION DOTNAME
-IF @Version LT 800
-.text$ SEGMENT PAGE 'CODE'
-ELSE
-.text$ SEGMENT ALIGN(64) 'CODE'
-ENDIF
-ALIGN 16
-_padlock_capability PROC PUBLIC
-$L_padlock_capability_begin::
- push ebx
- pushfd
- pop eax
- mov ecx,eax
- xor eax,2097152
- push eax
- popfd
- pushfd
- pop eax
- xor ecx,eax
- xor eax,eax
- bt ecx,21
- jnc $L000noluck
- cpuid
- xor eax,eax
- cmp ebx,0746e6543h
- jne $L001zhaoxin
- cmp edx,048727561h
- jne $L000noluck
- cmp ecx,0736c7561h
- jne $L000noluck
- jmp $L002zhaoxinEnd
-$L001zhaoxin:
- cmp ebx,068532020h
- jne $L000noluck
- cmp edx,068676e61h
- jne $L000noluck
- cmp ecx,020206961h
- jne $L000noluck
-$L002zhaoxinEnd:
- mov eax,3221225472
- cpuid
- mov edx,eax
- xor eax,eax
- cmp edx,3221225473
- jb $L000noluck
- mov eax,1
- cpuid
- or eax,15
- xor ebx,ebx
- and eax,4095
- cmp eax,1791
- sete bl
- mov eax,3221225473
- push ebx
- cpuid
- pop ebx
- mov eax,edx
- shl ebx,4
- and eax,4294967279
- or eax,ebx
-$L000noluck:
- pop ebx
- ret
-_padlock_capability ENDP
-ALIGN 16
-_padlock_key_bswap PROC PUBLIC
-$L_padlock_key_bswap_begin::
- mov edx,DWORD PTR 4[esp]
- mov ecx,DWORD PTR 240[edx]
-$L003bswap_loop:
- mov eax,DWORD PTR [edx]
- bswap eax
- mov DWORD PTR [edx],eax
- lea edx,DWORD PTR 4[edx]
- sub ecx,1
- jnz $L003bswap_loop
- ret
-_padlock_key_bswap ENDP
-ALIGN 16
-_padlock_verify_context PROC PUBLIC
-$L_padlock_verify_context_begin::
- mov edx,DWORD PTR 4[esp]
- lea eax,DWORD PTR $Lpadlock_saved_context
- pushfd
- call __padlock_verify_ctx
-$L004verify_pic_point:
- lea esp,DWORD PTR 4[esp]
- ret
-_padlock_verify_context ENDP
-ALIGN 16
-__padlock_verify_ctx PROC PRIVATE
- bt DWORD PTR 4[esp],30
- jnc $L005verified
- cmp edx,DWORD PTR [eax]
- je $L005verified
- pushfd
- popfd
-$L005verified:
- mov DWORD PTR [eax],edx
- ret
-__padlock_verify_ctx ENDP
-ALIGN 16
-_padlock_reload_key PROC PUBLIC
-$L_padlock_reload_key_begin::
- pushfd
- popfd
- ret
-_padlock_reload_key ENDP
-ALIGN 16
-_padlock_aes_block PROC PUBLIC
-$L_padlock_aes_block_begin::
- push edi
- push esi
- push ebx
- mov edi,DWORD PTR 16[esp]
- mov esi,DWORD PTR 20[esp]
- mov edx,DWORD PTR 24[esp]
- mov ecx,1
- lea ebx,DWORD PTR 32[edx]
- lea edx,DWORD PTR 16[edx]
-DB 243,15,167,200
- pop ebx
- pop esi
- pop edi
- ret
-_padlock_aes_block ENDP
-ALIGN 16
-_padlock_ecb_encrypt PROC PUBLIC
-$L_padlock_ecb_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov edi,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- mov edx,DWORD PTR 28[esp]
- mov ecx,DWORD PTR 32[esp]
- test edx,15
- jnz $L006ecb_abort
- test ecx,15
- jnz $L006ecb_abort
- lea eax,DWORD PTR $Lpadlock_saved_context
- pushfd
- cld
- call __padlock_verify_ctx
-$L007ecb_pic_point:
- lea edx,DWORD PTR 16[edx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR [edx],32
- jnz $L008ecb_aligned
- test edi,15
- setz al
- test esi,15
- setz bl
- test eax,ebx
- jnz $L008ecb_aligned
- neg eax
- mov ebx,512
- not eax
- lea ebp,DWORD PTR [esp-24]
- cmp ecx,ebx
- cmovc ebx,ecx
- and eax,ebx
- mov ebx,ecx
- neg eax
- and ebx,511
- lea esp,DWORD PTR [ebp*1+eax]
- mov eax,512
- cmovz ebx,eax
- mov eax,ebp
- and ebp,-16
- and esp,-16
- mov DWORD PTR 16[ebp],eax
- cmp ecx,ebx
- ja $L009ecb_loop
- mov eax,esi
- cmp ebp,esp
- cmove eax,edi
- add eax,ecx
- neg eax
- and eax,4095
- cmp eax,128
- mov eax,-128
- cmovae eax,ebx
- and ebx,eax
- jz $L010ecb_unaligned_tail
- jmp $L009ecb_loop
-ALIGN 16
-$L009ecb_loop:
- mov DWORD PTR [ebp],edi
- mov DWORD PTR 4[ebp],esi
- mov DWORD PTR 8[ebp],ecx
- mov ecx,ebx
- mov DWORD PTR 12[ebp],ebx
- test edi,15
- cmovnz edi,esp
- test esi,15
- jz $L011ecb_inp_aligned
- shr ecx,2
-DB 243,165
- sub edi,ebx
- mov ecx,ebx
- mov esi,edi
-$L011ecb_inp_aligned:
- lea eax,DWORD PTR [edx-16]
- lea ebx,DWORD PTR 16[edx]
- shr ecx,4
-DB 243,15,167,200
- mov edi,DWORD PTR [ebp]
- mov ebx,DWORD PTR 12[ebp]
- test edi,15
- jz $L012ecb_out_aligned
- mov ecx,ebx
- lea esi,DWORD PTR [esp]
- shr ecx,2
-DB 243,165
- sub edi,ebx
-$L012ecb_out_aligned:
- mov esi,DWORD PTR 4[ebp]
- mov ecx,DWORD PTR 8[ebp]
- add edi,ebx
- add esi,ebx
- sub ecx,ebx
- mov ebx,512
- jz $L013ecb_break
- cmp ecx,ebx
- jae $L009ecb_loop
-$L010ecb_unaligned_tail:
- xor eax,eax
- cmp esp,ebp
- cmove eax,ecx
- sub esp,eax
- mov eax,edi
- mov ebx,ecx
- shr ecx,2
- lea edi,DWORD PTR [esp]
-DB 243,165
- mov esi,esp
- mov edi,eax
- mov ecx,ebx
- jmp $L009ecb_loop
-ALIGN 16
-$L013ecb_break:
- cmp esp,ebp
- je $L014ecb_done
- pxor xmm0,xmm0
- lea eax,DWORD PTR [esp]
-$L015ecb_bzero:
- movaps XMMWORD PTR [eax],xmm0
- lea eax,DWORD PTR 16[eax]
- cmp ebp,eax
- ja $L015ecb_bzero
-$L014ecb_done:
- mov ebp,DWORD PTR 16[ebp]
- lea esp,DWORD PTR 24[ebp]
- jmp $L016ecb_exit
-ALIGN 16
-$L008ecb_aligned:
- lea ebp,DWORD PTR [ecx*1+esi]
- neg ebp
- and ebp,4095
- xor eax,eax
- cmp ebp,128
- mov ebp,127
- cmovae ebp,eax
- and ebp,ecx
- sub ecx,ebp
- jz $L017ecb_aligned_tail
- lea eax,DWORD PTR [edx-16]
- lea ebx,DWORD PTR 16[edx]
- shr ecx,4
-DB 243,15,167,200
- test ebp,ebp
- jz $L016ecb_exit
-$L017ecb_aligned_tail:
- mov ecx,ebp
- lea ebp,DWORD PTR [esp-24]
- mov esp,ebp
- mov eax,ebp
- sub esp,ecx
- and ebp,-16
- and esp,-16
- mov DWORD PTR 16[ebp],eax
- mov eax,edi
- mov ebx,ecx
- shr ecx,2
- lea edi,DWORD PTR [esp]
-DB 243,165
- mov esi,esp
- mov edi,eax
- mov ecx,ebx
- jmp $L009ecb_loop
-$L016ecb_exit:
- mov eax,1
- lea esp,DWORD PTR 4[esp]
-$L006ecb_abort:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_padlock_ecb_encrypt ENDP
-ALIGN 16
-_padlock_cbc_encrypt PROC PUBLIC
-$L_padlock_cbc_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov edi,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- mov edx,DWORD PTR 28[esp]
- mov ecx,DWORD PTR 32[esp]
- test edx,15
- jnz $L018cbc_abort
- test ecx,15
- jnz $L018cbc_abort
- lea eax,DWORD PTR $Lpadlock_saved_context
- pushfd
- cld
- call __padlock_verify_ctx
-$L019cbc_pic_point:
- lea edx,DWORD PTR 16[edx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR [edx],32
- jnz $L020cbc_aligned
- test edi,15
- setz al
- test esi,15
- setz bl
- test eax,ebx
- jnz $L020cbc_aligned
- neg eax
- mov ebx,512
- not eax
- lea ebp,DWORD PTR [esp-24]
- cmp ecx,ebx
- cmovc ebx,ecx
- and eax,ebx
- mov ebx,ecx
- neg eax
- and ebx,511
- lea esp,DWORD PTR [ebp*1+eax]
- mov eax,512
- cmovz ebx,eax
- mov eax,ebp
- and ebp,-16
- and esp,-16
- mov DWORD PTR 16[ebp],eax
- cmp ecx,ebx
- ja $L021cbc_loop
- mov eax,esi
- cmp ebp,esp
- cmove eax,edi
- add eax,ecx
- neg eax
- and eax,4095
- cmp eax,64
- mov eax,-64
- cmovae eax,ebx
- and ebx,eax
- jz $L022cbc_unaligned_tail
- jmp $L021cbc_loop
-ALIGN 16
-$L021cbc_loop:
- mov DWORD PTR [ebp],edi
- mov DWORD PTR 4[ebp],esi
- mov DWORD PTR 8[ebp],ecx
- mov ecx,ebx
- mov DWORD PTR 12[ebp],ebx
- test edi,15
- cmovnz edi,esp
- test esi,15
- jz $L023cbc_inp_aligned
- shr ecx,2
-DB 243,165
- sub edi,ebx
- mov ecx,ebx
- mov esi,edi
-$L023cbc_inp_aligned:
- lea eax,DWORD PTR [edx-16]
- lea ebx,DWORD PTR 16[edx]
- shr ecx,4
-DB 243,15,167,208
- movaps xmm0,XMMWORD PTR [eax]
- movaps XMMWORD PTR [edx-16],xmm0
- mov edi,DWORD PTR [ebp]
- mov ebx,DWORD PTR 12[ebp]
- test edi,15
- jz $L024cbc_out_aligned
- mov ecx,ebx
- lea esi,DWORD PTR [esp]
- shr ecx,2
-DB 243,165
- sub edi,ebx
-$L024cbc_out_aligned:
- mov esi,DWORD PTR 4[ebp]
- mov ecx,DWORD PTR 8[ebp]
- add edi,ebx
- add esi,ebx
- sub ecx,ebx
- mov ebx,512
- jz $L025cbc_break
- cmp ecx,ebx
- jae $L021cbc_loop
-$L022cbc_unaligned_tail:
- xor eax,eax
- cmp esp,ebp
- cmove eax,ecx
- sub esp,eax
- mov eax,edi
- mov ebx,ecx
- shr ecx,2
- lea edi,DWORD PTR [esp]
-DB 243,165
- mov esi,esp
- mov edi,eax
- mov ecx,ebx
- jmp $L021cbc_loop
-ALIGN 16
-$L025cbc_break:
- cmp esp,ebp
- je $L026cbc_done
- pxor xmm0,xmm0
- lea eax,DWORD PTR [esp]
-$L027cbc_bzero:
- movaps XMMWORD PTR [eax],xmm0
- lea eax,DWORD PTR 16[eax]
- cmp ebp,eax
- ja $L027cbc_bzero
-$L026cbc_done:
- mov ebp,DWORD PTR 16[ebp]
- lea esp,DWORD PTR 24[ebp]
- jmp $L028cbc_exit
-ALIGN 16
-$L020cbc_aligned:
- lea ebp,DWORD PTR [ecx*1+esi]
- neg ebp
- and ebp,4095
- xor eax,eax
- cmp ebp,64
- mov ebp,63
- cmovae ebp,eax
- and ebp,ecx
- sub ecx,ebp
- jz $L029cbc_aligned_tail
- lea eax,DWORD PTR [edx-16]
- lea ebx,DWORD PTR 16[edx]
- shr ecx,4
-DB 243,15,167,208
- movaps xmm0,XMMWORD PTR [eax]
- movaps XMMWORD PTR [edx-16],xmm0
- test ebp,ebp
- jz $L028cbc_exit
-$L029cbc_aligned_tail:
- mov ecx,ebp
- lea ebp,DWORD PTR [esp-24]
- mov esp,ebp
- mov eax,ebp
- sub esp,ecx
- and ebp,-16
- and esp,-16
- mov DWORD PTR 16[ebp],eax
- mov eax,edi
- mov ebx,ecx
- shr ecx,2
- lea edi,DWORD PTR [esp]
-DB 243,165
- mov esi,esp
- mov edi,eax
- mov ecx,ebx
- jmp $L021cbc_loop
-$L028cbc_exit:
- mov eax,1
- lea esp,DWORD PTR 4[esp]
-$L018cbc_abort:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_padlock_cbc_encrypt ENDP
-ALIGN 16
-_padlock_cfb_encrypt PROC PUBLIC
-$L_padlock_cfb_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov edi,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- mov edx,DWORD PTR 28[esp]
- mov ecx,DWORD PTR 32[esp]
- test edx,15
- jnz $L030cfb_abort
- test ecx,15
- jnz $L030cfb_abort
- lea eax,DWORD PTR $Lpadlock_saved_context
- pushfd
- cld
- call __padlock_verify_ctx
-$L031cfb_pic_point:
- lea edx,DWORD PTR 16[edx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR [edx],32
- jnz $L032cfb_aligned
- test edi,15
- setz al
- test esi,15
- setz bl
- test eax,ebx
- jnz $L032cfb_aligned
- neg eax
- mov ebx,512
- not eax
- lea ebp,DWORD PTR [esp-24]
- cmp ecx,ebx
- cmovc ebx,ecx
- and eax,ebx
- mov ebx,ecx
- neg eax
- and ebx,511
- lea esp,DWORD PTR [ebp*1+eax]
- mov eax,512
- cmovz ebx,eax
- mov eax,ebp
- and ebp,-16
- and esp,-16
- mov DWORD PTR 16[ebp],eax
- jmp $L033cfb_loop
-ALIGN 16
-$L033cfb_loop:
- mov DWORD PTR [ebp],edi
- mov DWORD PTR 4[ebp],esi
- mov DWORD PTR 8[ebp],ecx
- mov ecx,ebx
- mov DWORD PTR 12[ebp],ebx
- test edi,15
- cmovnz edi,esp
- test esi,15
- jz $L034cfb_inp_aligned
- shr ecx,2
-DB 243,165
- sub edi,ebx
- mov ecx,ebx
- mov esi,edi
-$L034cfb_inp_aligned:
- lea eax,DWORD PTR [edx-16]
- lea ebx,DWORD PTR 16[edx]
- shr ecx,4
-DB 243,15,167,224
- movaps xmm0,XMMWORD PTR [eax]
- movaps XMMWORD PTR [edx-16],xmm0
- mov edi,DWORD PTR [ebp]
- mov ebx,DWORD PTR 12[ebp]
- test edi,15
- jz $L035cfb_out_aligned
- mov ecx,ebx
- lea esi,DWORD PTR [esp]
- shr ecx,2
-DB 243,165
- sub edi,ebx
-$L035cfb_out_aligned:
- mov esi,DWORD PTR 4[ebp]
- mov ecx,DWORD PTR 8[ebp]
- add edi,ebx
- add esi,ebx
- sub ecx,ebx
- mov ebx,512
- jnz $L033cfb_loop
- cmp esp,ebp
- je $L036cfb_done
- pxor xmm0,xmm0
- lea eax,DWORD PTR [esp]
-$L037cfb_bzero:
- movaps XMMWORD PTR [eax],xmm0
- lea eax,DWORD PTR 16[eax]
- cmp ebp,eax
- ja $L037cfb_bzero
-$L036cfb_done:
- mov ebp,DWORD PTR 16[ebp]
- lea esp,DWORD PTR 24[ebp]
- jmp $L038cfb_exit
-ALIGN 16
-$L032cfb_aligned:
- lea eax,DWORD PTR [edx-16]
- lea ebx,DWORD PTR 16[edx]
- shr ecx,4
-DB 243,15,167,224
- movaps xmm0,XMMWORD PTR [eax]
- movaps XMMWORD PTR [edx-16],xmm0
-$L038cfb_exit:
- mov eax,1
- lea esp,DWORD PTR 4[esp]
-$L030cfb_abort:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_padlock_cfb_encrypt ENDP
-ALIGN 16
-_padlock_ofb_encrypt PROC PUBLIC
-$L_padlock_ofb_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov edi,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- mov edx,DWORD PTR 28[esp]
- mov ecx,DWORD PTR 32[esp]
- test edx,15
- jnz $L039ofb_abort
- test ecx,15
- jnz $L039ofb_abort
- lea eax,DWORD PTR $Lpadlock_saved_context
- pushfd
- cld
- call __padlock_verify_ctx
-$L040ofb_pic_point:
- lea edx,DWORD PTR 16[edx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR [edx],32
- jnz $L041ofb_aligned
- test edi,15
- setz al
- test esi,15
- setz bl
- test eax,ebx
- jnz $L041ofb_aligned
- neg eax
- mov ebx,512
- not eax
- lea ebp,DWORD PTR [esp-24]
- cmp ecx,ebx
- cmovc ebx,ecx
- and eax,ebx
- mov ebx,ecx
- neg eax
- and ebx,511
- lea esp,DWORD PTR [ebp*1+eax]
- mov eax,512
- cmovz ebx,eax
- mov eax,ebp
- and ebp,-16
- and esp,-16
- mov DWORD PTR 16[ebp],eax
- jmp $L042ofb_loop
-ALIGN 16
-$L042ofb_loop:
- mov DWORD PTR [ebp],edi
- mov DWORD PTR 4[ebp],esi
- mov DWORD PTR 8[ebp],ecx
- mov ecx,ebx
- mov DWORD PTR 12[ebp],ebx
- test edi,15
- cmovnz edi,esp
- test esi,15
- jz $L043ofb_inp_aligned
- shr ecx,2
-DB 243,165
- sub edi,ebx
- mov ecx,ebx
- mov esi,edi
-$L043ofb_inp_aligned:
- lea eax,DWORD PTR [edx-16]
- lea ebx,DWORD PTR 16[edx]
- shr ecx,4
-DB 243,15,167,232
- movaps xmm0,XMMWORD PTR [eax]
- movaps XMMWORD PTR [edx-16],xmm0
- mov edi,DWORD PTR [ebp]
- mov ebx,DWORD PTR 12[ebp]
- test edi,15
- jz $L044ofb_out_aligned
- mov ecx,ebx
- lea esi,DWORD PTR [esp]
- shr ecx,2
-DB 243,165
- sub edi,ebx
-$L044ofb_out_aligned:
- mov esi,DWORD PTR 4[ebp]
- mov ecx,DWORD PTR 8[ebp]
- add edi,ebx
- add esi,ebx
- sub ecx,ebx
- mov ebx,512
- jnz $L042ofb_loop
- cmp esp,ebp
- je $L045ofb_done
- pxor xmm0,xmm0
- lea eax,DWORD PTR [esp]
-$L046ofb_bzero:
- movaps XMMWORD PTR [eax],xmm0
- lea eax,DWORD PTR 16[eax]
- cmp ebp,eax
- ja $L046ofb_bzero
-$L045ofb_done:
- mov ebp,DWORD PTR 16[ebp]
- lea esp,DWORD PTR 24[ebp]
- jmp $L047ofb_exit
-ALIGN 16
-$L041ofb_aligned:
- lea eax,DWORD PTR [edx-16]
- lea ebx,DWORD PTR 16[edx]
- shr ecx,4
-DB 243,15,167,232
- movaps xmm0,XMMWORD PTR [eax]
- movaps XMMWORD PTR [edx-16],xmm0
-$L047ofb_exit:
- mov eax,1
- lea esp,DWORD PTR 4[esp]
-$L039ofb_abort:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_padlock_ofb_encrypt ENDP
-ALIGN 16
-_padlock_ctr32_encrypt PROC PUBLIC
-$L_padlock_ctr32_encrypt_begin::
- push ebp
- push ebx
- push esi
- push edi
- mov edi,DWORD PTR 20[esp]
- mov esi,DWORD PTR 24[esp]
- mov edx,DWORD PTR 28[esp]
- mov ecx,DWORD PTR 32[esp]
- test edx,15
- jnz $L048ctr32_abort
- test ecx,15
- jnz $L048ctr32_abort
- lea eax,DWORD PTR $Lpadlock_saved_context
- pushfd
- cld
- call __padlock_verify_ctx
-$L049ctr32_pic_point:
- lea edx,DWORD PTR 16[edx]
- xor eax,eax
- movq mm0,QWORD PTR [edx-16]
- mov ebx,512
- not eax
- lea ebp,DWORD PTR [esp-24]
- cmp ecx,ebx
- cmovc ebx,ecx
- and eax,ebx
- mov ebx,ecx
- neg eax
- and ebx,511
- lea esp,DWORD PTR [ebp*1+eax]
- mov eax,512
- cmovz ebx,eax
- mov eax,ebp
- and ebp,-16
- and esp,-16
- mov DWORD PTR 16[ebp],eax
- jmp $L050ctr32_loop
-ALIGN 16
-$L050ctr32_loop:
- mov DWORD PTR [ebp],edi
- mov DWORD PTR 4[ebp],esi
- mov DWORD PTR 8[ebp],ecx
- mov ecx,ebx
- mov DWORD PTR 12[ebp],ebx
- mov ecx,DWORD PTR [edx-4]
- xor edi,edi
- mov eax,DWORD PTR [edx-8]
-$L051ctr32_prepare:
- mov DWORD PTR 12[edi*1+esp],ecx
- bswap ecx
- movq QWORD PTR [edi*1+esp],mm0
- inc ecx
- mov DWORD PTR 8[edi*1+esp],eax
- bswap ecx
- lea edi,DWORD PTR 16[edi]
- cmp edi,ebx
- jb $L051ctr32_prepare
- mov DWORD PTR [edx-4],ecx
- lea esi,DWORD PTR [esp]
- lea edi,DWORD PTR [esp]
- mov ecx,ebx
- lea eax,DWORD PTR [edx-16]
- lea ebx,DWORD PTR 16[edx]
- shr ecx,4
-DB 243,15,167,200
- mov edi,DWORD PTR [ebp]
- mov ebx,DWORD PTR 12[ebp]
- mov esi,DWORD PTR 4[ebp]
- xor ecx,ecx
-$L052ctr32_xor:
- movups xmm1,XMMWORD PTR [ecx*1+esi]
- lea ecx,DWORD PTR 16[ecx]
- pxor xmm1,XMMWORD PTR [ecx*1+esp-16]
- movups XMMWORD PTR [ecx*1+edi-16],xmm1
- cmp ecx,ebx
- jb $L052ctr32_xor
- mov ecx,DWORD PTR 8[ebp]
- add edi,ebx
- add esi,ebx
- sub ecx,ebx
- mov ebx,512
- jnz $L050ctr32_loop
- pxor xmm0,xmm0
- lea eax,DWORD PTR [esp]
-$L053ctr32_bzero:
- movaps XMMWORD PTR [eax],xmm0
- lea eax,DWORD PTR 16[eax]
- cmp ebp,eax
- ja $L053ctr32_bzero
-$L054ctr32_done:
- mov ebp,DWORD PTR 16[ebp]
- lea esp,DWORD PTR 24[ebp]
- mov eax,1
- lea esp,DWORD PTR 4[esp]
- emms
-$L048ctr32_abort:
- pop edi
- pop esi
- pop ebx
- pop ebp
- ret
-_padlock_ctr32_encrypt ENDP
-ALIGN 16
-_padlock_xstore PROC PUBLIC
-$L_padlock_xstore_begin::
- push edi
- mov edi,DWORD PTR 8[esp]
- mov edx,DWORD PTR 12[esp]
-DB 15,167,192
- pop edi
- ret
-_padlock_xstore ENDP
-ALIGN 16
-__win32_segv_handler PROC PRIVATE
- mov eax,1
- mov edx,DWORD PTR 4[esp]
- mov ecx,DWORD PTR 12[esp]
- cmp DWORD PTR [edx],3221225477
- jne $L055ret
- add DWORD PTR 184[ecx],4
- mov eax,0
-$L055ret:
- ret
-__win32_segv_handler ENDP
-IF @Version GE 710
-.SAFESEH __win32_segv_handler
-ENDIF
-ALIGN 16
-_padlock_sha1_oneshot PROC PUBLIC
-$L_padlock_sha1_oneshot_begin::
- push edi
- push esi
- xor eax,eax
- mov edi,DWORD PTR 12[esp]
- mov esi,DWORD PTR 16[esp]
- mov ecx,DWORD PTR 20[esp]
- push __win32_segv_handler
-DB 100,255,48
-DB 100,137,32
- mov edx,esp
- add esp,-128
- movups xmm0,XMMWORD PTR [edi]
- and esp,-16
- mov eax,DWORD PTR 16[edi]
- movaps XMMWORD PTR [esp],xmm0
- mov edi,esp
- mov DWORD PTR 16[esp],eax
- xor eax,eax
-DB 243,15,166,200
- movaps xmm0,XMMWORD PTR [esp]
- mov eax,DWORD PTR 16[esp]
- mov esp,edx
-DB 100,143,5,0,0,0,0
- lea esp,DWORD PTR 4[esp]
- mov edi,DWORD PTR 16[esp]
- movups XMMWORD PTR [edi],xmm0
- mov DWORD PTR 16[edi],eax
- pop esi
- pop edi
- ret
-_padlock_sha1_oneshot ENDP
-ALIGN 16
-_padlock_sha1_blocks PROC PUBLIC
-$L_padlock_sha1_blocks_begin::
- push edi
- push esi
- mov edi,DWORD PTR 12[esp]
- mov esi,DWORD PTR 16[esp]
- mov edx,esp
- mov ecx,DWORD PTR 20[esp]
- add esp,-128
- movups xmm0,XMMWORD PTR [edi]
- and esp,-16
- mov eax,DWORD PTR 16[edi]
- movaps XMMWORD PTR [esp],xmm0
- mov edi,esp
- mov DWORD PTR 16[esp],eax
- mov eax,-1
-DB 243,15,166,200
- movaps xmm0,XMMWORD PTR [esp]
- mov eax,DWORD PTR 16[esp]
- mov esp,edx
- mov edi,DWORD PTR 12[esp]
- movups XMMWORD PTR [edi],xmm0
- mov DWORD PTR 16[edi],eax
- pop esi
- pop edi
- ret
-_padlock_sha1_blocks ENDP
-ALIGN 16
-_padlock_sha256_oneshot PROC PUBLIC
-$L_padlock_sha256_oneshot_begin::
- push edi
- push esi
- xor eax,eax
- mov edi,DWORD PTR 12[esp]
- mov esi,DWORD PTR 16[esp]
- mov ecx,DWORD PTR 20[esp]
- push __win32_segv_handler
-DB 100,255,48
-DB 100,137,32
- mov edx,esp
- add esp,-128
- movups xmm0,XMMWORD PTR [edi]
- and esp,-16
- movups xmm1,XMMWORD PTR 16[edi]
- movaps XMMWORD PTR [esp],xmm0
- mov edi,esp
- movaps XMMWORD PTR 16[esp],xmm1
- xor eax,eax
-DB 243,15,166,208
- movaps xmm0,XMMWORD PTR [esp]
- movaps xmm1,XMMWORD PTR 16[esp]
- mov esp,edx
-DB 100,143,5,0,0,0,0
- lea esp,DWORD PTR 4[esp]
- mov edi,DWORD PTR 16[esp]
- movups XMMWORD PTR [edi],xmm0
- movups XMMWORD PTR 16[edi],xmm1
- pop esi
- pop edi
- ret
-_padlock_sha256_oneshot ENDP
-ALIGN 16
-_padlock_sha256_blocks PROC PUBLIC
-$L_padlock_sha256_blocks_begin::
- push edi
- push esi
- mov edi,DWORD PTR 12[esp]
- mov esi,DWORD PTR 16[esp]
- mov ecx,DWORD PTR 20[esp]
- mov edx,esp
- add esp,-128
- movups xmm0,XMMWORD PTR [edi]
- and esp,-16
- movups xmm1,XMMWORD PTR 16[edi]
- movaps XMMWORD PTR [esp],xmm0
- mov edi,esp
- movaps XMMWORD PTR 16[esp],xmm1
- mov eax,-1
-DB 243,15,166,208
- movaps xmm0,XMMWORD PTR [esp]
- movaps xmm1,XMMWORD PTR 16[esp]
- mov esp,edx
- mov edi,DWORD PTR 12[esp]
- movups XMMWORD PTR [edi],xmm0
- movups XMMWORD PTR 16[edi],xmm1
- pop esi
- pop edi
- ret
-_padlock_sha256_blocks ENDP
-ALIGN 16
-_padlock_sha512_blocks PROC PUBLIC
-$L_padlock_sha512_blocks_begin::
- push edi
- push esi
- mov edi,DWORD PTR 12[esp]
- mov esi,DWORD PTR 16[esp]
- mov ecx,DWORD PTR 20[esp]
- mov edx,esp
- add esp,-128
- movups xmm0,XMMWORD PTR [edi]
- and esp,-16
- movups xmm1,XMMWORD PTR 16[edi]
- movups xmm2,XMMWORD PTR 32[edi]
- movups xmm3,XMMWORD PTR 48[edi]
- movaps XMMWORD PTR [esp],xmm0
- mov edi,esp
- movaps XMMWORD PTR 16[esp],xmm1
- movaps XMMWORD PTR 32[esp],xmm2
- movaps XMMWORD PTR 48[esp],xmm3
-DB 243,15,166,224
- movaps xmm0,XMMWORD PTR [esp]
- movaps xmm1,XMMWORD PTR 16[esp]
- movaps xmm2,XMMWORD PTR 32[esp]
- movaps xmm3,XMMWORD PTR 48[esp]
- mov esp,edx
- mov edi,DWORD PTR 12[esp]
- movups XMMWORD PTR [edi],xmm0
- movups XMMWORD PTR 16[edi],xmm1
- movups XMMWORD PTR 32[edi],xmm2
- movups XMMWORD PTR 48[edi],xmm3
- pop esi
- pop edi
- ret
-_padlock_sha512_blocks ENDP
-DB 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
-DB 109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
-DB 77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
-DB 110,115,115,108,46,111,114,103,62,0
-ALIGN 16
-.text$ ENDS
-_DATA SEGMENT
-ALIGN 4
-$Lpadlock_saved_context::
-DD 0
-_DATA ENDS
-END
+IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN 16
+_padlock_capability PROC PUBLIC
+$L_padlock_capability_begin::
+ push ebx
+ pushfd
+ pop eax
+ mov ecx,eax
+ xor eax,2097152
+ push eax
+ popfd
+ pushfd
+ pop eax
+ xor ecx,eax
+ xor eax,eax
+ bt ecx,21
+ jnc $L000noluck
+ cpuid
+ xor eax,eax
+ cmp ebx,0746e6543h
+ jne $L001zhaoxin
+ cmp edx,048727561h
+ jne $L000noluck
+ cmp ecx,0736c7561h
+ jne $L000noluck
+ jmp $L002zhaoxinEnd
+$L001zhaoxin:
+ cmp ebx,068532020h
+ jne $L000noluck
+ cmp edx,068676e61h
+ jne $L000noluck
+ cmp ecx,020206961h
+ jne $L000noluck
+$L002zhaoxinEnd:
+ mov eax,3221225472
+ cpuid
+ mov edx,eax
+ xor eax,eax
+ cmp edx,3221225473
+ jb $L000noluck
+ mov eax,1
+ cpuid
+ or eax,15
+ xor ebx,ebx
+ and eax,4095
+ cmp eax,1791
+ sete bl
+ mov eax,3221225473
+ push ebx
+ cpuid
+ pop ebx
+ mov eax,edx
+ shl ebx,4
+ and eax,4294967279
+ or eax,ebx
+$L000noluck:
+ pop ebx
+ ret
+_padlock_capability ENDP
+ALIGN 16
+_padlock_key_bswap PROC PUBLIC
+$L_padlock_key_bswap_begin::
+ mov edx,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 240[edx]
+$L003bswap_loop:
+ mov eax,DWORD PTR [edx]
+ bswap eax
+ mov DWORD PTR [edx],eax
+ lea edx,DWORD PTR 4[edx]
+ sub ecx,1
+ jnz $L003bswap_loop
+ ret
+_padlock_key_bswap ENDP
+ALIGN 16
+_padlock_verify_context PROC PUBLIC
+$L_padlock_verify_context_begin::
+ mov edx,DWORD PTR 4[esp]
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ call __padlock_verify_ctx
+$L004verify_pic_point:
+ lea esp,DWORD PTR 4[esp]
+ ret
+_padlock_verify_context ENDP
+ALIGN 16
+__padlock_verify_ctx PROC PRIVATE
+ bt DWORD PTR 4[esp],30
+ jnc $L005verified
+ cmp edx,DWORD PTR [eax]
+ je $L005verified
+ pushfd
+ popfd
+$L005verified:
+ mov DWORD PTR [eax],edx
+ ret
+__padlock_verify_ctx ENDP
+ALIGN 16
+_padlock_reload_key PROC PUBLIC
+$L_padlock_reload_key_begin::
+ pushfd
+ popfd
+ ret
+_padlock_reload_key ENDP
+ALIGN 16
+_padlock_aes_block PROC PUBLIC
+$L_padlock_aes_block_begin::
+ push edi
+ push esi
+ push ebx
+ mov edi,DWORD PTR 16[esp]
+ mov esi,DWORD PTR 20[esp]
+ mov edx,DWORD PTR 24[esp]
+ mov ecx,1
+ lea ebx,DWORD PTR 32[edx]
+ lea edx,DWORD PTR 16[edx]
+DB 243,15,167,200
+ pop ebx
+ pop esi
+ pop edi
+ ret
+_padlock_aes_block ENDP
+ALIGN 16
+_padlock_ecb_encrypt PROC PUBLIC
+$L_padlock_ecb_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ test edx,15
+ jnz $L006ecb_abort
+ test ecx,15
+ jnz $L006ecb_abort
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ cld
+ call __padlock_verify_ctx
+$L007ecb_pic_point:
+ lea edx,DWORD PTR 16[edx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR [edx],32
+ jnz $L008ecb_aligned
+ test edi,15
+ setz al
+ test esi,15
+ setz bl
+ test eax,ebx
+ jnz $L008ecb_aligned
+ neg eax
+ mov ebx,512
+ not eax
+ lea ebp,DWORD PTR [esp-24]
+ cmp ecx,ebx
+ cmovc ebx,ecx
+ and eax,ebx
+ mov ebx,ecx
+ neg eax
+ and ebx,511
+ lea esp,DWORD PTR [ebp*1+eax]
+ mov eax,512
+ cmovz ebx,eax
+ mov eax,ebp
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ cmp ecx,ebx
+ ja $L009ecb_loop
+ mov eax,esi
+ cmp ebp,esp
+ cmove eax,edi
+ add eax,ecx
+ neg eax
+ and eax,4095
+ cmp eax,128
+ mov eax,-128
+ cmovae eax,ebx
+ and ebx,eax
+ jz $L010ecb_unaligned_tail
+ jmp $L009ecb_loop
+ALIGN 16
+$L009ecb_loop:
+ mov DWORD PTR [ebp],edi
+ mov DWORD PTR 4[ebp],esi
+ mov DWORD PTR 8[ebp],ecx
+ mov ecx,ebx
+ mov DWORD PTR 12[ebp],ebx
+ test edi,15
+ cmovnz edi,esp
+ test esi,15
+ jz $L011ecb_inp_aligned
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+ mov ecx,ebx
+ mov esi,edi
+$L011ecb_inp_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,200
+ mov edi,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 12[ebp]
+ test edi,15
+ jz $L012ecb_out_aligned
+ mov ecx,ebx
+ lea esi,DWORD PTR [esp]
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+$L012ecb_out_aligned:
+ mov esi,DWORD PTR 4[ebp]
+ mov ecx,DWORD PTR 8[ebp]
+ add edi,ebx
+ add esi,ebx
+ sub ecx,ebx
+ mov ebx,512
+ jz $L013ecb_break
+ cmp ecx,ebx
+ jae $L009ecb_loop
+$L010ecb_unaligned_tail:
+ xor eax,eax
+ cmp esp,ebp
+ cmove eax,ecx
+ sub esp,eax
+ mov eax,edi
+ mov ebx,ecx
+ shr ecx,2
+ lea edi,DWORD PTR [esp]
+DB 243,165
+ mov esi,esp
+ mov edi,eax
+ mov ecx,ebx
+ jmp $L009ecb_loop
+ALIGN 16
+$L013ecb_break:
+ cmp esp,ebp
+ je $L014ecb_done
+ pxor xmm0,xmm0
+ lea eax,DWORD PTR [esp]
+$L015ecb_bzero:
+ movaps XMMWORD PTR [eax],xmm0
+ lea eax,DWORD PTR 16[eax]
+ cmp ebp,eax
+ ja $L015ecb_bzero
+$L014ecb_done:
+ mov ebp,DWORD PTR 16[ebp]
+ lea esp,DWORD PTR 24[ebp]
+ jmp $L016ecb_exit
+ALIGN 16
+$L008ecb_aligned:
+ lea ebp,DWORD PTR [ecx*1+esi]
+ neg ebp
+ and ebp,4095
+ xor eax,eax
+ cmp ebp,128
+ mov ebp,127
+ cmovae ebp,eax
+ and ebp,ecx
+ sub ecx,ebp
+ jz $L017ecb_aligned_tail
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,200
+ test ebp,ebp
+ jz $L016ecb_exit
+$L017ecb_aligned_tail:
+ mov ecx,ebp
+ lea ebp,DWORD PTR [esp-24]
+ mov esp,ebp
+ mov eax,ebp
+ sub esp,ecx
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ mov eax,edi
+ mov ebx,ecx
+ shr ecx,2
+ lea edi,DWORD PTR [esp]
+DB 243,165
+ mov esi,esp
+ mov edi,eax
+ mov ecx,ebx
+ jmp $L009ecb_loop
+$L016ecb_exit:
+ mov eax,1
+ lea esp,DWORD PTR 4[esp]
+$L006ecb_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_padlock_ecb_encrypt ENDP
+ALIGN 16
+_padlock_cbc_encrypt PROC PUBLIC
+$L_padlock_cbc_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ test edx,15
+ jnz $L018cbc_abort
+ test ecx,15
+ jnz $L018cbc_abort
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ cld
+ call __padlock_verify_ctx
+$L019cbc_pic_point:
+ lea edx,DWORD PTR 16[edx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR [edx],32
+ jnz $L020cbc_aligned
+ test edi,15
+ setz al
+ test esi,15
+ setz bl
+ test eax,ebx
+ jnz $L020cbc_aligned
+ neg eax
+ mov ebx,512
+ not eax
+ lea ebp,DWORD PTR [esp-24]
+ cmp ecx,ebx
+ cmovc ebx,ecx
+ and eax,ebx
+ mov ebx,ecx
+ neg eax
+ and ebx,511
+ lea esp,DWORD PTR [ebp*1+eax]
+ mov eax,512
+ cmovz ebx,eax
+ mov eax,ebp
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ cmp ecx,ebx
+ ja $L021cbc_loop
+ mov eax,esi
+ cmp ebp,esp
+ cmove eax,edi
+ add eax,ecx
+ neg eax
+ and eax,4095
+ cmp eax,64
+ mov eax,-64
+ cmovae eax,ebx
+ and ebx,eax
+ jz $L022cbc_unaligned_tail
+ jmp $L021cbc_loop
+ALIGN 16
+$L021cbc_loop:
+ mov DWORD PTR [ebp],edi
+ mov DWORD PTR 4[ebp],esi
+ mov DWORD PTR 8[ebp],ecx
+ mov ecx,ebx
+ mov DWORD PTR 12[ebp],ebx
+ test edi,15
+ cmovnz edi,esp
+ test esi,15
+ jz $L023cbc_inp_aligned
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+ mov ecx,ebx
+ mov esi,edi
+$L023cbc_inp_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,208
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+ mov edi,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 12[ebp]
+ test edi,15
+ jz $L024cbc_out_aligned
+ mov ecx,ebx
+ lea esi,DWORD PTR [esp]
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+$L024cbc_out_aligned:
+ mov esi,DWORD PTR 4[ebp]
+ mov ecx,DWORD PTR 8[ebp]
+ add edi,ebx
+ add esi,ebx
+ sub ecx,ebx
+ mov ebx,512
+ jz $L025cbc_break
+ cmp ecx,ebx
+ jae $L021cbc_loop
+$L022cbc_unaligned_tail:
+ xor eax,eax
+ cmp esp,ebp
+ cmove eax,ecx
+ sub esp,eax
+ mov eax,edi
+ mov ebx,ecx
+ shr ecx,2
+ lea edi,DWORD PTR [esp]
+DB 243,165
+ mov esi,esp
+ mov edi,eax
+ mov ecx,ebx
+ jmp $L021cbc_loop
+ALIGN 16
+$L025cbc_break:
+ cmp esp,ebp
+ je $L026cbc_done
+ pxor xmm0,xmm0
+ lea eax,DWORD PTR [esp]
+$L027cbc_bzero:
+ movaps XMMWORD PTR [eax],xmm0
+ lea eax,DWORD PTR 16[eax]
+ cmp ebp,eax
+ ja $L027cbc_bzero
+$L026cbc_done:
+ mov ebp,DWORD PTR 16[ebp]
+ lea esp,DWORD PTR 24[ebp]
+ jmp $L028cbc_exit
+ALIGN 16
+$L020cbc_aligned:
+ lea ebp,DWORD PTR [ecx*1+esi]
+ neg ebp
+ and ebp,4095
+ xor eax,eax
+ cmp ebp,64
+ mov ebp,63
+ cmovae ebp,eax
+ and ebp,ecx
+ sub ecx,ebp
+ jz $L029cbc_aligned_tail
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,208
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+ test ebp,ebp
+ jz $L028cbc_exit
+$L029cbc_aligned_tail:
+ mov ecx,ebp
+ lea ebp,DWORD PTR [esp-24]
+ mov esp,ebp
+ mov eax,ebp
+ sub esp,ecx
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ mov eax,edi
+ mov ebx,ecx
+ shr ecx,2
+ lea edi,DWORD PTR [esp]
+DB 243,165
+ mov esi,esp
+ mov edi,eax
+ mov ecx,ebx
+ jmp $L021cbc_loop
+$L028cbc_exit:
+ mov eax,1
+ lea esp,DWORD PTR 4[esp]
+$L018cbc_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_padlock_cbc_encrypt ENDP
+ALIGN 16
+_padlock_cfb_encrypt PROC PUBLIC
+$L_padlock_cfb_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ test edx,15
+ jnz $L030cfb_abort
+ test ecx,15
+ jnz $L030cfb_abort
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ cld
+ call __padlock_verify_ctx
+$L031cfb_pic_point:
+ lea edx,DWORD PTR 16[edx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR [edx],32
+ jnz $L032cfb_aligned
+ test edi,15
+ setz al
+ test esi,15
+ setz bl
+ test eax,ebx
+ jnz $L032cfb_aligned
+ neg eax
+ mov ebx,512
+ not eax
+ lea ebp,DWORD PTR [esp-24]
+ cmp ecx,ebx
+ cmovc ebx,ecx
+ and eax,ebx
+ mov ebx,ecx
+ neg eax
+ and ebx,511
+ lea esp,DWORD PTR [ebp*1+eax]
+ mov eax,512
+ cmovz ebx,eax
+ mov eax,ebp
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ jmp $L033cfb_loop
+ALIGN 16
+$L033cfb_loop:
+ mov DWORD PTR [ebp],edi
+ mov DWORD PTR 4[ebp],esi
+ mov DWORD PTR 8[ebp],ecx
+ mov ecx,ebx
+ mov DWORD PTR 12[ebp],ebx
+ test edi,15
+ cmovnz edi,esp
+ test esi,15
+ jz $L034cfb_inp_aligned
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+ mov ecx,ebx
+ mov esi,edi
+$L034cfb_inp_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,224
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+ mov edi,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 12[ebp]
+ test edi,15
+ jz $L035cfb_out_aligned
+ mov ecx,ebx
+ lea esi,DWORD PTR [esp]
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+$L035cfb_out_aligned:
+ mov esi,DWORD PTR 4[ebp]
+ mov ecx,DWORD PTR 8[ebp]
+ add edi,ebx
+ add esi,ebx
+ sub ecx,ebx
+ mov ebx,512
+ jnz $L033cfb_loop
+ cmp esp,ebp
+ je $L036cfb_done
+ pxor xmm0,xmm0
+ lea eax,DWORD PTR [esp]
+$L037cfb_bzero:
+ movaps XMMWORD PTR [eax],xmm0
+ lea eax,DWORD PTR 16[eax]
+ cmp ebp,eax
+ ja $L037cfb_bzero
+$L036cfb_done:
+ mov ebp,DWORD PTR 16[ebp]
+ lea esp,DWORD PTR 24[ebp]
+ jmp $L038cfb_exit
+ALIGN 16
+$L032cfb_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,224
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+$L038cfb_exit:
+ mov eax,1
+ lea esp,DWORD PTR 4[esp]
+$L030cfb_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_padlock_cfb_encrypt ENDP
+ALIGN 16
+_padlock_ofb_encrypt PROC PUBLIC
+$L_padlock_ofb_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ test edx,15
+ jnz $L039ofb_abort
+ test ecx,15
+ jnz $L039ofb_abort
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ cld
+ call __padlock_verify_ctx
+$L040ofb_pic_point:
+ lea edx,DWORD PTR 16[edx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR [edx],32
+ jnz $L041ofb_aligned
+ test edi,15
+ setz al
+ test esi,15
+ setz bl
+ test eax,ebx
+ jnz $L041ofb_aligned
+ neg eax
+ mov ebx,512
+ not eax
+ lea ebp,DWORD PTR [esp-24]
+ cmp ecx,ebx
+ cmovc ebx,ecx
+ and eax,ebx
+ mov ebx,ecx
+ neg eax
+ and ebx,511
+ lea esp,DWORD PTR [ebp*1+eax]
+ mov eax,512
+ cmovz ebx,eax
+ mov eax,ebp
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ jmp $L042ofb_loop
+ALIGN 16
+$L042ofb_loop:
+ mov DWORD PTR [ebp],edi
+ mov DWORD PTR 4[ebp],esi
+ mov DWORD PTR 8[ebp],ecx
+ mov ecx,ebx
+ mov DWORD PTR 12[ebp],ebx
+ test edi,15
+ cmovnz edi,esp
+ test esi,15
+ jz $L043ofb_inp_aligned
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+ mov ecx,ebx
+ mov esi,edi
+$L043ofb_inp_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,232
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+ mov edi,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 12[ebp]
+ test edi,15
+ jz $L044ofb_out_aligned
+ mov ecx,ebx
+ lea esi,DWORD PTR [esp]
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+$L044ofb_out_aligned:
+ mov esi,DWORD PTR 4[ebp]
+ mov ecx,DWORD PTR 8[ebp]
+ add edi,ebx
+ add esi,ebx
+ sub ecx,ebx
+ mov ebx,512
+ jnz $L042ofb_loop
+ cmp esp,ebp
+ je $L045ofb_done
+ pxor xmm0,xmm0
+ lea eax,DWORD PTR [esp]
+$L046ofb_bzero:
+ movaps XMMWORD PTR [eax],xmm0
+ lea eax,DWORD PTR 16[eax]
+ cmp ebp,eax
+ ja $L046ofb_bzero
+$L045ofb_done:
+ mov ebp,DWORD PTR 16[ebp]
+ lea esp,DWORD PTR 24[ebp]
+ jmp $L047ofb_exit
+ALIGN 16
+$L041ofb_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,232
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+$L047ofb_exit:
+ mov eax,1
+ lea esp,DWORD PTR 4[esp]
+$L039ofb_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_padlock_ofb_encrypt ENDP
+ALIGN 16
+_padlock_ctr32_encrypt PROC PUBLIC
+$L_padlock_ctr32_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ test edx,15
+ jnz $L048ctr32_abort
+ test ecx,15
+ jnz $L048ctr32_abort
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ cld
+ call __padlock_verify_ctx
+$L049ctr32_pic_point:
+ lea edx,DWORD PTR 16[edx]
+ xor eax,eax
+ movq mm0,QWORD PTR [edx-16]
+ mov ebx,512
+ not eax
+ lea ebp,DWORD PTR [esp-24]
+ cmp ecx,ebx
+ cmovc ebx,ecx
+ and eax,ebx
+ mov ebx,ecx
+ neg eax
+ and ebx,511
+ lea esp,DWORD PTR [ebp*1+eax]
+ mov eax,512
+ cmovz ebx,eax
+ mov eax,ebp
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ jmp $L050ctr32_loop
+ALIGN 16
+$L050ctr32_loop:
+ mov DWORD PTR [ebp],edi
+ mov DWORD PTR 4[ebp],esi
+ mov DWORD PTR 8[ebp],ecx
+ mov ecx,ebx
+ mov DWORD PTR 12[ebp],ebx
+ mov ecx,DWORD PTR [edx-4]
+ xor edi,edi
+ mov eax,DWORD PTR [edx-8]
+$L051ctr32_prepare:
+ mov DWORD PTR 12[edi*1+esp],ecx
+ bswap ecx
+ movq QWORD PTR [edi*1+esp],mm0
+ inc ecx
+ mov DWORD PTR 8[edi*1+esp],eax
+ bswap ecx
+ lea edi,DWORD PTR 16[edi]
+ cmp edi,ebx
+ jb $L051ctr32_prepare
+ mov DWORD PTR [edx-4],ecx
+ lea esi,DWORD PTR [esp]
+ lea edi,DWORD PTR [esp]
+ mov ecx,ebx
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,200
+ mov edi,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 12[ebp]
+ mov esi,DWORD PTR 4[ebp]
+ xor ecx,ecx
+$L052ctr32_xor:
+ movups xmm1,XMMWORD PTR [ecx*1+esi]
+ lea ecx,DWORD PTR 16[ecx]
+ pxor xmm1,XMMWORD PTR [ecx*1+esp-16]
+ movups XMMWORD PTR [ecx*1+edi-16],xmm1
+ cmp ecx,ebx
+ jb $L052ctr32_xor
+ mov ecx,DWORD PTR 8[ebp]
+ add edi,ebx
+ add esi,ebx
+ sub ecx,ebx
+ mov ebx,512
+ jnz $L050ctr32_loop
+ pxor xmm0,xmm0
+ lea eax,DWORD PTR [esp]
+$L053ctr32_bzero:
+ movaps XMMWORD PTR [eax],xmm0
+ lea eax,DWORD PTR 16[eax]
+ cmp ebp,eax
+ ja $L053ctr32_bzero
+$L054ctr32_done:
+ mov ebp,DWORD PTR 16[ebp]
+ lea esp,DWORD PTR 24[ebp]
+ mov eax,1
+ lea esp,DWORD PTR 4[esp]
+ emms
+$L048ctr32_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_padlock_ctr32_encrypt ENDP
+ALIGN 16
+_padlock_xstore PROC PUBLIC
+$L_padlock_xstore_begin::
+ push edi
+ mov edi,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+DB 15,167,192
+ pop edi
+ ret
+_padlock_xstore ENDP
+ALIGN 16
+__win32_segv_handler PROC PRIVATE
+ mov eax,1
+ mov edx,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 12[esp]
+ cmp DWORD PTR [edx],3221225477
+ jne $L055ret
+ add DWORD PTR 184[ecx],4
+ mov eax,0
+$L055ret:
+ ret
+__win32_segv_handler ENDP
+IF @Version GE 710
+.SAFESEH __win32_segv_handler
+ENDIF
+ALIGN 16
+_padlock_sha1_oneshot PROC PUBLIC
+$L_padlock_sha1_oneshot_begin::
+ push edi
+ push esi
+ xor eax,eax
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov ecx,DWORD PTR 20[esp]
+ push __win32_segv_handler
+DB 100,255,48
+DB 100,137,32
+ mov edx,esp
+ add esp,-128
+ movups xmm0,XMMWORD PTR [edi]
+ and esp,-16
+ mov eax,DWORD PTR 16[edi]
+ movaps XMMWORD PTR [esp],xmm0
+ mov edi,esp
+ mov DWORD PTR 16[esp],eax
+ xor eax,eax
+DB 243,15,166,200
+ movaps xmm0,XMMWORD PTR [esp]
+ mov eax,DWORD PTR 16[esp]
+ mov esp,edx
+DB 100,143,5,0,0,0,0
+ lea esp,DWORD PTR 4[esp]
+ mov edi,DWORD PTR 16[esp]
+ movups XMMWORD PTR [edi],xmm0
+ mov DWORD PTR 16[edi],eax
+ pop esi
+ pop edi
+ ret
+_padlock_sha1_oneshot ENDP
+ALIGN 16
+_padlock_sha1_blocks PROC PUBLIC
+$L_padlock_sha1_blocks_begin::
+ push edi
+ push esi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov edx,esp
+ mov ecx,DWORD PTR 20[esp]
+ add esp,-128
+ movups xmm0,XMMWORD PTR [edi]
+ and esp,-16
+ mov eax,DWORD PTR 16[edi]
+ movaps XMMWORD PTR [esp],xmm0
+ mov edi,esp
+ mov DWORD PTR 16[esp],eax
+ mov eax,-1
+DB 243,15,166,200
+ movaps xmm0,XMMWORD PTR [esp]
+ mov eax,DWORD PTR 16[esp]
+ mov esp,edx
+ mov edi,DWORD PTR 12[esp]
+ movups XMMWORD PTR [edi],xmm0
+ mov DWORD PTR 16[edi],eax
+ pop esi
+ pop edi
+ ret
+_padlock_sha1_blocks ENDP
+ALIGN 16
+_padlock_sha256_oneshot PROC PUBLIC
+$L_padlock_sha256_oneshot_begin::
+ push edi
+ push esi
+ xor eax,eax
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov ecx,DWORD PTR 20[esp]
+ push __win32_segv_handler
+DB 100,255,48
+DB 100,137,32
+ mov edx,esp
+ add esp,-128
+ movups xmm0,XMMWORD PTR [edi]
+ and esp,-16
+ movups xmm1,XMMWORD PTR 16[edi]
+ movaps XMMWORD PTR [esp],xmm0
+ mov edi,esp
+ movaps XMMWORD PTR 16[esp],xmm1
+ xor eax,eax
+DB 243,15,166,208
+ movaps xmm0,XMMWORD PTR [esp]
+ movaps xmm1,XMMWORD PTR 16[esp]
+ mov esp,edx
+DB 100,143,5,0,0,0,0
+ lea esp,DWORD PTR 4[esp]
+ mov edi,DWORD PTR 16[esp]
+ movups XMMWORD PTR [edi],xmm0
+ movups XMMWORD PTR 16[edi],xmm1
+ pop esi
+ pop edi
+ ret
+_padlock_sha256_oneshot ENDP
+ALIGN 16
+_padlock_sha256_blocks PROC PUBLIC
+$L_padlock_sha256_blocks_begin::
+ push edi
+ push esi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov ecx,DWORD PTR 20[esp]
+ mov edx,esp
+ add esp,-128
+ movups xmm0,XMMWORD PTR [edi]
+ and esp,-16
+ movups xmm1,XMMWORD PTR 16[edi]
+ movaps XMMWORD PTR [esp],xmm0
+ mov edi,esp
+ movaps XMMWORD PTR 16[esp],xmm1
+ mov eax,-1
+DB 243,15,166,208
+ movaps xmm0,XMMWORD PTR [esp]
+ movaps xmm1,XMMWORD PTR 16[esp]
+ mov esp,edx
+ mov edi,DWORD PTR 12[esp]
+ movups XMMWORD PTR [edi],xmm0
+ movups XMMWORD PTR 16[edi],xmm1
+ pop esi
+ pop edi
+ ret
+_padlock_sha256_blocks ENDP
+ALIGN 16
+_padlock_sha512_blocks PROC PUBLIC
+$L_padlock_sha512_blocks_begin::
+ push edi
+ push esi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov ecx,DWORD PTR 20[esp]
+ mov edx,esp
+ add esp,-128
+ movups xmm0,XMMWORD PTR [edi]
+ and esp,-16
+ movups xmm1,XMMWORD PTR 16[edi]
+ movups xmm2,XMMWORD PTR 32[edi]
+ movups xmm3,XMMWORD PTR 48[edi]
+ movaps XMMWORD PTR [esp],xmm0
+ mov edi,esp
+ movaps XMMWORD PTR 16[esp],xmm1
+ movaps XMMWORD PTR 32[esp],xmm2
+ movaps XMMWORD PTR 48[esp],xmm3
+DB 243,15,166,224
+ movaps xmm0,XMMWORD PTR [esp]
+ movaps xmm1,XMMWORD PTR 16[esp]
+ movaps xmm2,XMMWORD PTR 32[esp]
+ movaps xmm3,XMMWORD PTR 48[esp]
+ mov esp,edx
+ mov edi,DWORD PTR 12[esp]
+ movups XMMWORD PTR [edi],xmm0
+ movups XMMWORD PTR 16[edi],xmm1
+ movups XMMWORD PTR 32[edi],xmm2
+ movups XMMWORD PTR 48[edi],xmm3
+ pop esi
+ pop edi
+ ret
+_padlock_sha512_blocks ENDP
+DB 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
+DB 109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
+DB 77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
+DB 110,115,115,108,46,111,114,103,62,0
+ALIGN 16
+.text$ ENDS
+_DATA SEGMENT
+ALIGN 4
+$Lpadlock_saved_context::
+DD 0
+_DATA ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/engines/e_padlock-x86_64.masm b/contrib/libs/openssl/asm/windows/engines/e_padlock-x86_64.masm
index a3461f1aa1..12adf9b4a6 100644
--- a/contrib/libs/openssl/asm/windows/engines/e_padlock-x86_64.masm
+++ b/contrib/libs/openssl/asm/windows/engines/e_padlock-x86_64.masm
@@ -1,1191 +1,1191 @@
-OPTION DOTNAME
-.text$ SEGMENT ALIGN(256) 'CODE'
-PUBLIC padlock_capability
-
-ALIGN 16
-padlock_capability PROC PUBLIC
- mov r8,rbx
- xor eax,eax
- cpuid
- xor eax,eax
- cmp ebx,0746e6543h
- jne $L$zhaoxin
- cmp edx,048727561h
- jne $L$noluck
- cmp ecx,0736c7561h
- jne $L$noluck
- jmp $L$zhaoxinEnd
-$L$zhaoxin::
- cmp ebx,068532020h
- jne $L$noluck
- cmp edx,068676e61h
- jne $L$noluck
- cmp ecx,020206961h
- jne $L$noluck
-$L$zhaoxinEnd::
- mov eax,0C0000000h
- cpuid
- mov edx,eax
- xor eax,eax
- cmp edx,0C0000001h
- jb $L$noluck
- mov eax,0C0000001h
- cpuid
- mov eax,edx
- and eax,0ffffffefh
- or eax,010h
-$L$noluck::
- mov rbx,r8
- DB 0F3h,0C3h ;repret
-padlock_capability ENDP
-
-PUBLIC padlock_key_bswap
-
-ALIGN 16
-padlock_key_bswap PROC PUBLIC
- mov edx,DWORD PTR[240+rcx]
-$L$bswap_loop::
- mov eax,DWORD PTR[rcx]
- bswap eax
- mov DWORD PTR[rcx],eax
- lea rcx,QWORD PTR[4+rcx]
- sub edx,1
- jnz $L$bswap_loop
- DB 0F3h,0C3h ;repret
-padlock_key_bswap ENDP
-
-PUBLIC padlock_verify_context
-
-ALIGN 16
-padlock_verify_context PROC PUBLIC
- mov rdx,rcx
- pushf
- lea rax,QWORD PTR[$L$padlock_saved_context]
- call _padlock_verify_ctx
- lea rsp,QWORD PTR[8+rsp]
- DB 0F3h,0C3h ;repret
-padlock_verify_context ENDP
-
-
-ALIGN 16
-_padlock_verify_ctx PROC PRIVATE
- mov r8,QWORD PTR[8+rsp]
- bt r8,30
- jnc $L$verified
- cmp rdx,QWORD PTR[rax]
- je $L$verified
- pushf
- popf
-$L$verified::
- mov QWORD PTR[rax],rdx
- DB 0F3h,0C3h ;repret
-_padlock_verify_ctx ENDP
-
-PUBLIC padlock_reload_key
-
-ALIGN 16
-padlock_reload_key PROC PUBLIC
- pushf
- popf
- DB 0F3h,0C3h ;repret
-padlock_reload_key ENDP
-
-PUBLIC padlock_aes_block
-
-ALIGN 16
-padlock_aes_block PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_aes_block::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
- mov r8,rbx
- mov rcx,1
- lea rbx,QWORD PTR[32+rdx]
- lea rdx,QWORD PTR[16+rdx]
-DB 0f3h,00fh,0a7h,0c8h
- mov rbx,r8
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_aes_block::
-padlock_aes_block ENDP
-
-PUBLIC padlock_xstore
-
-ALIGN 16
-padlock_xstore PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_xstore::
- mov rdi,rcx
- mov rsi,rdx
-
-
- mov edx,esi
-DB 00fh,0a7h,0c0h
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_xstore::
-padlock_xstore ENDP
-
-PUBLIC padlock_sha1_oneshot
-
-ALIGN 16
-padlock_sha1_oneshot PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_sha1_oneshot::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
- mov rcx,rdx
- mov rdx,rdi
- movups xmm0,XMMWORD PTR[rdi]
- sub rsp,128+8
- mov eax,DWORD PTR[16+rdi]
- movaps XMMWORD PTR[rsp],xmm0
- mov rdi,rsp
- mov DWORD PTR[16+rsp],eax
- xor rax,rax
-DB 0f3h,00fh,0a6h,0c8h
- movaps xmm0,XMMWORD PTR[rsp]
- mov eax,DWORD PTR[16+rsp]
- add rsp,128+8
- movups XMMWORD PTR[rdx],xmm0
- mov DWORD PTR[16+rdx],eax
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_sha1_oneshot::
-padlock_sha1_oneshot ENDP
-
-PUBLIC padlock_sha1_blocks
-
-ALIGN 16
-padlock_sha1_blocks PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_sha1_blocks::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
- mov rcx,rdx
- mov rdx,rdi
- movups xmm0,XMMWORD PTR[rdi]
- sub rsp,128+8
- mov eax,DWORD PTR[16+rdi]
- movaps XMMWORD PTR[rsp],xmm0
- mov rdi,rsp
- mov DWORD PTR[16+rsp],eax
- mov rax,-1
-DB 0f3h,00fh,0a6h,0c8h
- movaps xmm0,XMMWORD PTR[rsp]
- mov eax,DWORD PTR[16+rsp]
- add rsp,128+8
- movups XMMWORD PTR[rdx],xmm0
- mov DWORD PTR[16+rdx],eax
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_sha1_blocks::
-padlock_sha1_blocks ENDP
-
-PUBLIC padlock_sha256_oneshot
-
-ALIGN 16
-padlock_sha256_oneshot PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_sha256_oneshot::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
- mov rcx,rdx
- mov rdx,rdi
- movups xmm0,XMMWORD PTR[rdi]
- sub rsp,128+8
- movups xmm1,XMMWORD PTR[16+rdi]
- movaps XMMWORD PTR[rsp],xmm0
- mov rdi,rsp
- movaps XMMWORD PTR[16+rsp],xmm1
- xor rax,rax
-DB 0f3h,00fh,0a6h,0d0h
- movaps xmm0,XMMWORD PTR[rsp]
- movaps xmm1,XMMWORD PTR[16+rsp]
- add rsp,128+8
- movups XMMWORD PTR[rdx],xmm0
- movups XMMWORD PTR[16+rdx],xmm1
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_sha256_oneshot::
-padlock_sha256_oneshot ENDP
-
-PUBLIC padlock_sha256_blocks
-
-ALIGN 16
-padlock_sha256_blocks PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_sha256_blocks::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
- mov rcx,rdx
- mov rdx,rdi
- movups xmm0,XMMWORD PTR[rdi]
- sub rsp,128+8
- movups xmm1,XMMWORD PTR[16+rdi]
- movaps XMMWORD PTR[rsp],xmm0
- mov rdi,rsp
- movaps XMMWORD PTR[16+rsp],xmm1
- mov rax,-1
-DB 0f3h,00fh,0a6h,0d0h
- movaps xmm0,XMMWORD PTR[rsp]
- movaps xmm1,XMMWORD PTR[16+rsp]
- add rsp,128+8
- movups XMMWORD PTR[rdx],xmm0
- movups XMMWORD PTR[16+rdx],xmm1
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_sha256_blocks::
-padlock_sha256_blocks ENDP
-
-PUBLIC padlock_sha512_blocks
-
-ALIGN 16
-padlock_sha512_blocks PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_sha512_blocks::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
-
-
- mov rcx,rdx
- mov rdx,rdi
- movups xmm0,XMMWORD PTR[rdi]
- sub rsp,128+8
- movups xmm1,XMMWORD PTR[16+rdi]
- movups xmm2,XMMWORD PTR[32+rdi]
- movups xmm3,XMMWORD PTR[48+rdi]
- movaps XMMWORD PTR[rsp],xmm0
- mov rdi,rsp
- movaps XMMWORD PTR[16+rsp],xmm1
- movaps XMMWORD PTR[32+rsp],xmm2
- movaps XMMWORD PTR[48+rsp],xmm3
-DB 0f3h,00fh,0a6h,0e0h
- movaps xmm0,XMMWORD PTR[rsp]
- movaps xmm1,XMMWORD PTR[16+rsp]
- movaps xmm2,XMMWORD PTR[32+rsp]
- movaps xmm3,XMMWORD PTR[48+rsp]
- add rsp,128+8
- movups XMMWORD PTR[rdx],xmm0
- movups XMMWORD PTR[16+rdx],xmm1
- movups XMMWORD PTR[32+rdx],xmm2
- movups XMMWORD PTR[48+rdx],xmm3
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_sha512_blocks::
-padlock_sha512_blocks ENDP
-PUBLIC padlock_ecb_encrypt
-
-ALIGN 16
-padlock_ecb_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_ecb_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
- push rbp
- push rbx
-
- xor eax,eax
- test rdx,15
- jnz $L$ecb_abort
- test rcx,15
- jnz $L$ecb_abort
- lea rax,QWORD PTR[$L$padlock_saved_context]
- pushf
- cld
- call _padlock_verify_ctx
- lea rdx,QWORD PTR[16+rdx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR[rdx],32
- jnz $L$ecb_aligned
- test rdi,00fh
- setz al
- test rsi,00fh
- setz bl
- test eax,ebx
- jnz $L$ecb_aligned
- neg rax
- mov rbx,512
- not rax
- lea rbp,QWORD PTR[rsp]
- cmp rcx,rbx
- cmovc rbx,rcx
- and rax,rbx
- mov rbx,rcx
- neg rax
- and rbx,512-1
- lea rsp,QWORD PTR[rbp*1+rax]
- mov rax,512
- cmovz rbx,rax
- cmp rcx,rbx
- ja $L$ecb_loop
- mov rax,rsi
- cmp rbp,rsp
- cmove rax,rdi
- add rax,rcx
- neg rax
- and rax,0fffh
- cmp rax,128
- mov rax,-128
- cmovae rax,rbx
- and rbx,rax
- jz $L$ecb_unaligned_tail
- jmp $L$ecb_loop
-ALIGN 16
-$L$ecb_loop::
- cmp rbx,rcx
- cmova rbx,rcx
- mov r8,rdi
- mov r9,rsi
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- test rdi,00fh
- cmovnz rdi,rsp
- test rsi,00fh
- jz $L$ecb_inp_aligned
- shr rcx,3
-DB 0f3h,048h,0a5h
- sub rdi,rbx
- mov rcx,rbx
- mov rsi,rdi
-$L$ecb_inp_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,200
- mov rdi,r8
- mov rbx,r11
- test rdi,00fh
- jz $L$ecb_out_aligned
- mov rcx,rbx
- lea rsi,QWORD PTR[rsp]
- shr rcx,3
-DB 0f3h,048h,0a5h
- sub rdi,rbx
-$L$ecb_out_aligned::
- mov rsi,r9
- mov rcx,r10
- add rdi,rbx
- add rsi,rbx
- sub rcx,rbx
- mov rbx,512
- jz $L$ecb_break
- cmp rcx,rbx
- jae $L$ecb_loop
-$L$ecb_unaligned_tail::
- xor eax,eax
- cmp rbp,rsp
- cmove rax,rcx
- mov r8,rdi
- mov rbx,rcx
- sub rsp,rax
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
-DB 0f3h,048h,0a5h
- mov rsi,rsp
- mov rdi,r8
- mov rcx,rbx
- jmp $L$ecb_loop
-ALIGN 16
-$L$ecb_break::
- cmp rsp,rbp
- je $L$ecb_done
-
- pxor xmm0,xmm0
- lea rax,QWORD PTR[rsp]
-$L$ecb_bzero::
- movaps XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
- cmp rbp,rax
- ja $L$ecb_bzero
-
-$L$ecb_done::
- lea rsp,QWORD PTR[rbp]
- jmp $L$ecb_exit
-
-ALIGN 16
-$L$ecb_aligned::
- lea rbp,QWORD PTR[rcx*1+rsi]
- neg rbp
- and rbp,0fffh
- xor eax,eax
- cmp rbp,128
- mov rbp,128-1
- cmovae rbp,rax
- and rbp,rcx
- sub rcx,rbp
- jz $L$ecb_aligned_tail
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,200
- test rbp,rbp
- jz $L$ecb_exit
-
-$L$ecb_aligned_tail::
- mov r8,rdi
- mov rbx,rbp
- mov rcx,rbp
- lea rbp,QWORD PTR[rsp]
- sub rsp,rcx
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
-DB 0f3h,048h,0a5h
- lea rdi,QWORD PTR[r8]
- lea rsi,QWORD PTR[rsp]
- mov rcx,rbx
- jmp $L$ecb_loop
-$L$ecb_exit::
- mov eax,1
- lea rsp,QWORD PTR[8+rsp]
-$L$ecb_abort::
- pop rbx
- pop rbp
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_ecb_encrypt::
-padlock_ecb_encrypt ENDP
-PUBLIC padlock_cbc_encrypt
-
-ALIGN 16
-padlock_cbc_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_cbc_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
- push rbp
- push rbx
-
- xor eax,eax
- test rdx,15
- jnz $L$cbc_abort
- test rcx,15
- jnz $L$cbc_abort
- lea rax,QWORD PTR[$L$padlock_saved_context]
- pushf
- cld
- call _padlock_verify_ctx
- lea rdx,QWORD PTR[16+rdx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR[rdx],32
- jnz $L$cbc_aligned
- test rdi,00fh
- setz al
- test rsi,00fh
- setz bl
- test eax,ebx
- jnz $L$cbc_aligned
- neg rax
- mov rbx,512
- not rax
- lea rbp,QWORD PTR[rsp]
- cmp rcx,rbx
- cmovc rbx,rcx
- and rax,rbx
- mov rbx,rcx
- neg rax
- and rbx,512-1
- lea rsp,QWORD PTR[rbp*1+rax]
- mov rax,512
- cmovz rbx,rax
- cmp rcx,rbx
- ja $L$cbc_loop
- mov rax,rsi
- cmp rbp,rsp
- cmove rax,rdi
- add rax,rcx
- neg rax
- and rax,0fffh
- cmp rax,64
- mov rax,-64
- cmovae rax,rbx
- and rbx,rax
- jz $L$cbc_unaligned_tail
- jmp $L$cbc_loop
-ALIGN 16
-$L$cbc_loop::
- cmp rbx,rcx
- cmova rbx,rcx
- mov r8,rdi
- mov r9,rsi
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- test rdi,00fh
- cmovnz rdi,rsp
- test rsi,00fh
- jz $L$cbc_inp_aligned
- shr rcx,3
-DB 0f3h,048h,0a5h
- sub rdi,rbx
- mov rcx,rbx
- mov rsi,rdi
-$L$cbc_inp_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,208
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
- mov rdi,r8
- mov rbx,r11
- test rdi,00fh
- jz $L$cbc_out_aligned
- mov rcx,rbx
- lea rsi,QWORD PTR[rsp]
- shr rcx,3
-DB 0f3h,048h,0a5h
- sub rdi,rbx
-$L$cbc_out_aligned::
- mov rsi,r9
- mov rcx,r10
- add rdi,rbx
- add rsi,rbx
- sub rcx,rbx
- mov rbx,512
- jz $L$cbc_break
- cmp rcx,rbx
- jae $L$cbc_loop
-$L$cbc_unaligned_tail::
- xor eax,eax
- cmp rbp,rsp
- cmove rax,rcx
- mov r8,rdi
- mov rbx,rcx
- sub rsp,rax
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
-DB 0f3h,048h,0a5h
- mov rsi,rsp
- mov rdi,r8
- mov rcx,rbx
- jmp $L$cbc_loop
-ALIGN 16
-$L$cbc_break::
- cmp rsp,rbp
- je $L$cbc_done
-
- pxor xmm0,xmm0
- lea rax,QWORD PTR[rsp]
-$L$cbc_bzero::
- movaps XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
- cmp rbp,rax
- ja $L$cbc_bzero
-
-$L$cbc_done::
- lea rsp,QWORD PTR[rbp]
- jmp $L$cbc_exit
-
-ALIGN 16
-$L$cbc_aligned::
- lea rbp,QWORD PTR[rcx*1+rsi]
- neg rbp
- and rbp,0fffh
- xor eax,eax
- cmp rbp,64
- mov rbp,64-1
- cmovae rbp,rax
- and rbp,rcx
- sub rcx,rbp
- jz $L$cbc_aligned_tail
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,208
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
- test rbp,rbp
- jz $L$cbc_exit
-
-$L$cbc_aligned_tail::
- mov r8,rdi
- mov rbx,rbp
- mov rcx,rbp
- lea rbp,QWORD PTR[rsp]
- sub rsp,rcx
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
-DB 0f3h,048h,0a5h
- lea rdi,QWORD PTR[r8]
- lea rsi,QWORD PTR[rsp]
- mov rcx,rbx
- jmp $L$cbc_loop
-$L$cbc_exit::
- mov eax,1
- lea rsp,QWORD PTR[8+rsp]
-$L$cbc_abort::
- pop rbx
- pop rbp
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_cbc_encrypt::
-padlock_cbc_encrypt ENDP
-PUBLIC padlock_cfb_encrypt
-
-ALIGN 16
-padlock_cfb_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_cfb_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
- push rbp
- push rbx
-
- xor eax,eax
- test rdx,15
- jnz $L$cfb_abort
- test rcx,15
- jnz $L$cfb_abort
- lea rax,QWORD PTR[$L$padlock_saved_context]
- pushf
- cld
- call _padlock_verify_ctx
- lea rdx,QWORD PTR[16+rdx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR[rdx],32
- jnz $L$cfb_aligned
- test rdi,00fh
- setz al
- test rsi,00fh
- setz bl
- test eax,ebx
- jnz $L$cfb_aligned
- neg rax
- mov rbx,512
- not rax
- lea rbp,QWORD PTR[rsp]
- cmp rcx,rbx
- cmovc rbx,rcx
- and rax,rbx
- mov rbx,rcx
- neg rax
- and rbx,512-1
- lea rsp,QWORD PTR[rbp*1+rax]
- mov rax,512
- cmovz rbx,rax
- jmp $L$cfb_loop
-ALIGN 16
-$L$cfb_loop::
- cmp rbx,rcx
- cmova rbx,rcx
- mov r8,rdi
- mov r9,rsi
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- test rdi,00fh
- cmovnz rdi,rsp
- test rsi,00fh
- jz $L$cfb_inp_aligned
- shr rcx,3
-DB 0f3h,048h,0a5h
- sub rdi,rbx
- mov rcx,rbx
- mov rsi,rdi
-$L$cfb_inp_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,224
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
- mov rdi,r8
- mov rbx,r11
- test rdi,00fh
- jz $L$cfb_out_aligned
- mov rcx,rbx
- lea rsi,QWORD PTR[rsp]
- shr rcx,3
-DB 0f3h,048h,0a5h
- sub rdi,rbx
-$L$cfb_out_aligned::
- mov rsi,r9
- mov rcx,r10
- add rdi,rbx
- add rsi,rbx
- sub rcx,rbx
- mov rbx,512
- jnz $L$cfb_loop
- cmp rsp,rbp
- je $L$cfb_done
-
- pxor xmm0,xmm0
- lea rax,QWORD PTR[rsp]
-$L$cfb_bzero::
- movaps XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
- cmp rbp,rax
- ja $L$cfb_bzero
-
-$L$cfb_done::
- lea rsp,QWORD PTR[rbp]
- jmp $L$cfb_exit
-
-ALIGN 16
-$L$cfb_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,224
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
-$L$cfb_exit::
- mov eax,1
- lea rsp,QWORD PTR[8+rsp]
-$L$cfb_abort::
- pop rbx
- pop rbp
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_cfb_encrypt::
-padlock_cfb_encrypt ENDP
-PUBLIC padlock_ofb_encrypt
-
-ALIGN 16
-padlock_ofb_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_ofb_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
- push rbp
- push rbx
-
- xor eax,eax
- test rdx,15
- jnz $L$ofb_abort
- test rcx,15
- jnz $L$ofb_abort
- lea rax,QWORD PTR[$L$padlock_saved_context]
- pushf
- cld
- call _padlock_verify_ctx
- lea rdx,QWORD PTR[16+rdx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR[rdx],32
- jnz $L$ofb_aligned
- test rdi,00fh
- setz al
- test rsi,00fh
- setz bl
- test eax,ebx
- jnz $L$ofb_aligned
- neg rax
- mov rbx,512
- not rax
- lea rbp,QWORD PTR[rsp]
- cmp rcx,rbx
- cmovc rbx,rcx
- and rax,rbx
- mov rbx,rcx
- neg rax
- and rbx,512-1
- lea rsp,QWORD PTR[rbp*1+rax]
- mov rax,512
- cmovz rbx,rax
- jmp $L$ofb_loop
-ALIGN 16
-$L$ofb_loop::
- cmp rbx,rcx
- cmova rbx,rcx
- mov r8,rdi
- mov r9,rsi
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- test rdi,00fh
- cmovnz rdi,rsp
- test rsi,00fh
- jz $L$ofb_inp_aligned
- shr rcx,3
-DB 0f3h,048h,0a5h
- sub rdi,rbx
- mov rcx,rbx
- mov rsi,rdi
-$L$ofb_inp_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,232
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
- mov rdi,r8
- mov rbx,r11
- test rdi,00fh
- jz $L$ofb_out_aligned
- mov rcx,rbx
- lea rsi,QWORD PTR[rsp]
- shr rcx,3
-DB 0f3h,048h,0a5h
- sub rdi,rbx
-$L$ofb_out_aligned::
- mov rsi,r9
- mov rcx,r10
- add rdi,rbx
- add rsi,rbx
- sub rcx,rbx
- mov rbx,512
- jnz $L$ofb_loop
- cmp rsp,rbp
- je $L$ofb_done
-
- pxor xmm0,xmm0
- lea rax,QWORD PTR[rsp]
-$L$ofb_bzero::
- movaps XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
- cmp rbp,rax
- ja $L$ofb_bzero
-
-$L$ofb_done::
- lea rsp,QWORD PTR[rbp]
- jmp $L$ofb_exit
-
-ALIGN 16
-$L$ofb_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,232
- movdqa xmm0,XMMWORD PTR[rax]
- movdqa XMMWORD PTR[(-16)+rdx],xmm0
-$L$ofb_exit::
- mov eax,1
- lea rsp,QWORD PTR[8+rsp]
-$L$ofb_abort::
- pop rbx
- pop rbp
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_ofb_encrypt::
-padlock_ofb_encrypt ENDP
-PUBLIC padlock_ctr32_encrypt
-
-ALIGN 16
-padlock_ctr32_encrypt PROC PUBLIC
- mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
- mov QWORD PTR[16+rsp],rsi
- mov rax,rsp
-$L$SEH_begin_padlock_ctr32_encrypt::
- mov rdi,rcx
- mov rsi,rdx
- mov rdx,r8
- mov rcx,r9
-
-
- push rbp
- push rbx
-
- xor eax,eax
- test rdx,15
- jnz $L$ctr32_abort
- test rcx,15
- jnz $L$ctr32_abort
- lea rax,QWORD PTR[$L$padlock_saved_context]
- pushf
- cld
- call _padlock_verify_ctx
- lea rdx,QWORD PTR[16+rdx]
- xor eax,eax
- xor ebx,ebx
- test DWORD PTR[rdx],32
- jnz $L$ctr32_aligned
- test rdi,00fh
- setz al
- test rsi,00fh
- setz bl
- test eax,ebx
- jnz $L$ctr32_aligned
- neg rax
- mov rbx,512
- not rax
- lea rbp,QWORD PTR[rsp]
- cmp rcx,rbx
- cmovc rbx,rcx
- and rax,rbx
- mov rbx,rcx
- neg rax
- and rbx,512-1
- lea rsp,QWORD PTR[rbp*1+rax]
- mov rax,512
- cmovz rbx,rax
-$L$ctr32_reenter::
- mov eax,DWORD PTR[((-4))+rdx]
- bswap eax
- neg eax
- and eax,31
- mov rbx,512
- shl eax,4
- cmovz rax,rbx
- cmp rcx,rax
- cmova rbx,rax
- cmovbe rbx,rcx
- cmp rcx,rbx
- ja $L$ctr32_loop
- mov rax,rsi
- cmp rbp,rsp
- cmove rax,rdi
- add rax,rcx
- neg rax
- and rax,0fffh
- cmp rax,32
- mov rax,-32
- cmovae rax,rbx
- and rbx,rax
- jz $L$ctr32_unaligned_tail
- jmp $L$ctr32_loop
-ALIGN 16
-$L$ctr32_loop::
- cmp rbx,rcx
- cmova rbx,rcx
- mov r8,rdi
- mov r9,rsi
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
- test rdi,00fh
- cmovnz rdi,rsp
- test rsi,00fh
- jz $L$ctr32_inp_aligned
- shr rcx,3
-DB 0f3h,048h,0a5h
- sub rdi,rbx
- mov rcx,rbx
- mov rsi,rdi
-$L$ctr32_inp_aligned::
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,216
- mov eax,DWORD PTR[((-4))+rdx]
- test eax,0ffff0000h
- jnz $L$ctr32_no_carry
- bswap eax
- add eax,010000h
- bswap eax
- mov DWORD PTR[((-4))+rdx],eax
-$L$ctr32_no_carry::
- mov rdi,r8
- mov rbx,r11
- test rdi,00fh
- jz $L$ctr32_out_aligned
- mov rcx,rbx
- lea rsi,QWORD PTR[rsp]
- shr rcx,3
-DB 0f3h,048h,0a5h
- sub rdi,rbx
-$L$ctr32_out_aligned::
- mov rsi,r9
- mov rcx,r10
- add rdi,rbx
- add rsi,rbx
- sub rcx,rbx
- mov rbx,512
- jz $L$ctr32_break
- cmp rcx,rbx
- jae $L$ctr32_loop
- mov rbx,rcx
- mov rax,rsi
- cmp rbp,rsp
- cmove rax,rdi
- add rax,rcx
- neg rax
- and rax,0fffh
- cmp rax,32
- mov rax,-32
- cmovae rax,rbx
- and rbx,rax
- jnz $L$ctr32_loop
-$L$ctr32_unaligned_tail::
- xor eax,eax
- cmp rbp,rsp
- cmove rax,rcx
- mov r8,rdi
- mov rbx,rcx
- sub rsp,rax
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
-DB 0f3h,048h,0a5h
- mov rsi,rsp
- mov rdi,r8
- mov rcx,rbx
- jmp $L$ctr32_loop
-ALIGN 16
-$L$ctr32_break::
- cmp rsp,rbp
- je $L$ctr32_done
-
- pxor xmm0,xmm0
- lea rax,QWORD PTR[rsp]
-$L$ctr32_bzero::
- movaps XMMWORD PTR[rax],xmm0
- lea rax,QWORD PTR[16+rax]
- cmp rbp,rax
- ja $L$ctr32_bzero
-
-$L$ctr32_done::
- lea rsp,QWORD PTR[rbp]
- jmp $L$ctr32_exit
-
-ALIGN 16
-$L$ctr32_aligned::
- mov eax,DWORD PTR[((-4))+rdx]
- bswap eax
- neg eax
- and eax,0ffffh
- mov rbx,1048576
- shl eax,4
- cmovz rax,rbx
- cmp rcx,rax
- cmova rbx,rax
- cmovbe rbx,rcx
- jbe $L$ctr32_aligned_skip
-
-$L$ctr32_aligned_loop::
- mov r10,rcx
- mov rcx,rbx
- mov r11,rbx
-
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,216
-
- mov eax,DWORD PTR[((-4))+rdx]
- bswap eax
- add eax,010000h
- bswap eax
- mov DWORD PTR[((-4))+rdx],eax
-
- mov rcx,r10
- sub rcx,r11
- mov rbx,1048576
- jz $L$ctr32_exit
- cmp rcx,rbx
- jae $L$ctr32_aligned_loop
-
-$L$ctr32_aligned_skip::
- lea rbp,QWORD PTR[rcx*1+rsi]
- neg rbp
- and rbp,0fffh
- xor eax,eax
- cmp rbp,32
- mov rbp,32-1
- cmovae rbp,rax
- and rbp,rcx
- sub rcx,rbp
- jz $L$ctr32_aligned_tail
- lea rax,QWORD PTR[((-16))+rdx]
- lea rbx,QWORD PTR[16+rdx]
- shr rcx,4
-DB 0f3h,00fh,0a7h,216
- test rbp,rbp
- jz $L$ctr32_exit
-
-$L$ctr32_aligned_tail::
- mov r8,rdi
- mov rbx,rbp
- mov rcx,rbp
- lea rbp,QWORD PTR[rsp]
- sub rsp,rcx
- shr rcx,3
- lea rdi,QWORD PTR[rsp]
-DB 0f3h,048h,0a5h
- lea rdi,QWORD PTR[r8]
- lea rsi,QWORD PTR[rsp]
- mov rcx,rbx
- jmp $L$ctr32_loop
-$L$ctr32_exit::
- mov eax,1
- lea rsp,QWORD PTR[8+rsp]
-$L$ctr32_abort::
- pop rbx
- pop rbp
- mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
- mov rsi,QWORD PTR[16+rsp]
- DB 0F3h,0C3h ;repret
-$L$SEH_end_padlock_ctr32_encrypt::
-padlock_ctr32_encrypt ENDP
-DB 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,95
-DB 54,52,32,109,111,100,117,108,101,44,32,67,82,89,80,84
-DB 79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64
-DB 111,112,101,110,115,115,108,46,111,114,103,62,0
-ALIGN 16
-.text$ ENDS
-_DATA SEGMENT
-ALIGN 8
-$L$padlock_saved_context::
- DQ 0
-
-_DATA ENDS
-END
+OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+PUBLIC padlock_capability
+
+ALIGN 16
+padlock_capability PROC PUBLIC
+ mov r8,rbx
+ xor eax,eax
+ cpuid
+ xor eax,eax
+ cmp ebx,0746e6543h
+ jne $L$zhaoxin
+ cmp edx,048727561h
+ jne $L$noluck
+ cmp ecx,0736c7561h
+ jne $L$noluck
+ jmp $L$zhaoxinEnd
+$L$zhaoxin::
+ cmp ebx,068532020h
+ jne $L$noluck
+ cmp edx,068676e61h
+ jne $L$noluck
+ cmp ecx,020206961h
+ jne $L$noluck
+$L$zhaoxinEnd::
+ mov eax,0C0000000h
+ cpuid
+ mov edx,eax
+ xor eax,eax
+ cmp edx,0C0000001h
+ jb $L$noluck
+ mov eax,0C0000001h
+ cpuid
+ mov eax,edx
+ and eax,0ffffffefh
+ or eax,010h
+$L$noluck::
+ mov rbx,r8
+ DB 0F3h,0C3h ;repret
+padlock_capability ENDP
+
+PUBLIC padlock_key_bswap
+
+ALIGN 16
+padlock_key_bswap PROC PUBLIC
+ mov edx,DWORD PTR[240+rcx]
+$L$bswap_loop::
+ mov eax,DWORD PTR[rcx]
+ bswap eax
+ mov DWORD PTR[rcx],eax
+ lea rcx,QWORD PTR[4+rcx]
+ sub edx,1
+ jnz $L$bswap_loop
+ DB 0F3h,0C3h ;repret
+padlock_key_bswap ENDP
+
+PUBLIC padlock_verify_context
+
+ALIGN 16
+padlock_verify_context PROC PUBLIC
+ mov rdx,rcx
+ pushf
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ call _padlock_verify_ctx
+ lea rsp,QWORD PTR[8+rsp]
+ DB 0F3h,0C3h ;repret
+padlock_verify_context ENDP
+
+
+ALIGN 16
+_padlock_verify_ctx PROC PRIVATE
+ mov r8,QWORD PTR[8+rsp]
+ bt r8,30
+ jnc $L$verified
+ cmp rdx,QWORD PTR[rax]
+ je $L$verified
+ pushf
+ popf
+$L$verified::
+ mov QWORD PTR[rax],rdx
+ DB 0F3h,0C3h ;repret
+_padlock_verify_ctx ENDP
+
+PUBLIC padlock_reload_key
+
+ALIGN 16
+padlock_reload_key PROC PUBLIC
+ pushf
+ popf
+ DB 0F3h,0C3h ;repret
+padlock_reload_key ENDP
+
+PUBLIC padlock_aes_block
+
+ALIGN 16
+padlock_aes_block PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_aes_block::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov r8,rbx
+ mov rcx,1
+ lea rbx,QWORD PTR[32+rdx]
+ lea rdx,QWORD PTR[16+rdx]
+DB 0f3h,00fh,0a7h,0c8h
+ mov rbx,r8
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_aes_block::
+padlock_aes_block ENDP
+
+PUBLIC padlock_xstore
+
+ALIGN 16
+padlock_xstore PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_xstore::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+ mov edx,esi
+DB 00fh,0a7h,0c0h
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_xstore::
+padlock_xstore ENDP
+
+PUBLIC padlock_sha1_oneshot
+
+ALIGN 16
+padlock_sha1_oneshot PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_sha1_oneshot::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov rcx,rdx
+ mov rdx,rdi
+ movups xmm0,XMMWORD PTR[rdi]
+ sub rsp,128+8
+ mov eax,DWORD PTR[16+rdi]
+ movaps XMMWORD PTR[rsp],xmm0
+ mov rdi,rsp
+ mov DWORD PTR[16+rsp],eax
+ xor rax,rax
+DB 0f3h,00fh,0a6h,0c8h
+ movaps xmm0,XMMWORD PTR[rsp]
+ mov eax,DWORD PTR[16+rsp]
+ add rsp,128+8
+ movups XMMWORD PTR[rdx],xmm0
+ mov DWORD PTR[16+rdx],eax
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_sha1_oneshot::
+padlock_sha1_oneshot ENDP
+
+PUBLIC padlock_sha1_blocks
+
+ALIGN 16
+padlock_sha1_blocks PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_sha1_blocks::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov rcx,rdx
+ mov rdx,rdi
+ movups xmm0,XMMWORD PTR[rdi]
+ sub rsp,128+8
+ mov eax,DWORD PTR[16+rdi]
+ movaps XMMWORD PTR[rsp],xmm0
+ mov rdi,rsp
+ mov DWORD PTR[16+rsp],eax
+ mov rax,-1
+DB 0f3h,00fh,0a6h,0c8h
+ movaps xmm0,XMMWORD PTR[rsp]
+ mov eax,DWORD PTR[16+rsp]
+ add rsp,128+8
+ movups XMMWORD PTR[rdx],xmm0
+ mov DWORD PTR[16+rdx],eax
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_sha1_blocks::
+padlock_sha1_blocks ENDP
+
+PUBLIC padlock_sha256_oneshot
+
+ALIGN 16
+padlock_sha256_oneshot PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_sha256_oneshot::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov rcx,rdx
+ mov rdx,rdi
+ movups xmm0,XMMWORD PTR[rdi]
+ sub rsp,128+8
+ movups xmm1,XMMWORD PTR[16+rdi]
+ movaps XMMWORD PTR[rsp],xmm0
+ mov rdi,rsp
+ movaps XMMWORD PTR[16+rsp],xmm1
+ xor rax,rax
+DB 0f3h,00fh,0a6h,0d0h
+ movaps xmm0,XMMWORD PTR[rsp]
+ movaps xmm1,XMMWORD PTR[16+rsp]
+ add rsp,128+8
+ movups XMMWORD PTR[rdx],xmm0
+ movups XMMWORD PTR[16+rdx],xmm1
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_sha256_oneshot::
+padlock_sha256_oneshot ENDP
+
+PUBLIC padlock_sha256_blocks
+
+ALIGN 16
+padlock_sha256_blocks PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_sha256_blocks::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov rcx,rdx
+ mov rdx,rdi
+ movups xmm0,XMMWORD PTR[rdi]
+ sub rsp,128+8
+ movups xmm1,XMMWORD PTR[16+rdi]
+ movaps XMMWORD PTR[rsp],xmm0
+ mov rdi,rsp
+ movaps XMMWORD PTR[16+rsp],xmm1
+ mov rax,-1
+DB 0f3h,00fh,0a6h,0d0h
+ movaps xmm0,XMMWORD PTR[rsp]
+ movaps xmm1,XMMWORD PTR[16+rsp]
+ add rsp,128+8
+ movups XMMWORD PTR[rdx],xmm0
+ movups XMMWORD PTR[16+rdx],xmm1
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_sha256_blocks::
+padlock_sha256_blocks ENDP
+
+PUBLIC padlock_sha512_blocks
+
+ALIGN 16
+padlock_sha512_blocks PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_sha512_blocks::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov rcx,rdx
+ mov rdx,rdi
+ movups xmm0,XMMWORD PTR[rdi]
+ sub rsp,128+8
+ movups xmm1,XMMWORD PTR[16+rdi]
+ movups xmm2,XMMWORD PTR[32+rdi]
+ movups xmm3,XMMWORD PTR[48+rdi]
+ movaps XMMWORD PTR[rsp],xmm0
+ mov rdi,rsp
+ movaps XMMWORD PTR[16+rsp],xmm1
+ movaps XMMWORD PTR[32+rsp],xmm2
+ movaps XMMWORD PTR[48+rsp],xmm3
+DB 0f3h,00fh,0a6h,0e0h
+ movaps xmm0,XMMWORD PTR[rsp]
+ movaps xmm1,XMMWORD PTR[16+rsp]
+ movaps xmm2,XMMWORD PTR[32+rsp]
+ movaps xmm3,XMMWORD PTR[48+rsp]
+ add rsp,128+8
+ movups XMMWORD PTR[rdx],xmm0
+ movups XMMWORD PTR[16+rdx],xmm1
+ movups XMMWORD PTR[32+rdx],xmm2
+ movups XMMWORD PTR[48+rdx],xmm3
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_sha512_blocks::
+padlock_sha512_blocks ENDP
+PUBLIC padlock_ecb_encrypt
+
+ALIGN 16
+padlock_ecb_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_ecb_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+ push rbp
+ push rbx
+
+ xor eax,eax
+ test rdx,15
+ jnz $L$ecb_abort
+ test rcx,15
+ jnz $L$ecb_abort
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ pushf
+ cld
+ call _padlock_verify_ctx
+ lea rdx,QWORD PTR[16+rdx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR[rdx],32
+ jnz $L$ecb_aligned
+ test rdi,00fh
+ setz al
+ test rsi,00fh
+ setz bl
+ test eax,ebx
+ jnz $L$ecb_aligned
+ neg rax
+ mov rbx,512
+ not rax
+ lea rbp,QWORD PTR[rsp]
+ cmp rcx,rbx
+ cmovc rbx,rcx
+ and rax,rbx
+ mov rbx,rcx
+ neg rax
+ and rbx,512-1
+ lea rsp,QWORD PTR[rbp*1+rax]
+ mov rax,512
+ cmovz rbx,rax
+ cmp rcx,rbx
+ ja $L$ecb_loop
+ mov rax,rsi
+ cmp rbp,rsp
+ cmove rax,rdi
+ add rax,rcx
+ neg rax
+ and rax,0fffh
+ cmp rax,128
+ mov rax,-128
+ cmovae rax,rbx
+ and rbx,rax
+ jz $L$ecb_unaligned_tail
+ jmp $L$ecb_loop
+ALIGN 16
+$L$ecb_loop::
+ cmp rbx,rcx
+ cmova rbx,rcx
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+ test rdi,00fh
+ cmovnz rdi,rsp
+ test rsi,00fh
+ jz $L$ecb_inp_aligned
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+ mov rcx,rbx
+ mov rsi,rdi
+$L$ecb_inp_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,200
+ mov rdi,r8
+ mov rbx,r11
+ test rdi,00fh
+ jz $L$ecb_out_aligned
+ mov rcx,rbx
+ lea rsi,QWORD PTR[rsp]
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+$L$ecb_out_aligned::
+ mov rsi,r9
+ mov rcx,r10
+ add rdi,rbx
+ add rsi,rbx
+ sub rcx,rbx
+ mov rbx,512
+ jz $L$ecb_break
+ cmp rcx,rbx
+ jae $L$ecb_loop
+$L$ecb_unaligned_tail::
+ xor eax,eax
+ cmp rbp,rsp
+ cmove rax,rcx
+ mov r8,rdi
+ mov rbx,rcx
+ sub rsp,rax
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ mov rsi,rsp
+ mov rdi,r8
+ mov rcx,rbx
+ jmp $L$ecb_loop
+ALIGN 16
+$L$ecb_break::
+ cmp rsp,rbp
+ je $L$ecb_done
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[rsp]
+$L$ecb_bzero::
+ movaps XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+ cmp rbp,rax
+ ja $L$ecb_bzero
+
+$L$ecb_done::
+ lea rsp,QWORD PTR[rbp]
+ jmp $L$ecb_exit
+
+ALIGN 16
+$L$ecb_aligned::
+ lea rbp,QWORD PTR[rcx*1+rsi]
+ neg rbp
+ and rbp,0fffh
+ xor eax,eax
+ cmp rbp,128
+ mov rbp,128-1
+ cmovae rbp,rax
+ and rbp,rcx
+ sub rcx,rbp
+ jz $L$ecb_aligned_tail
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,200
+ test rbp,rbp
+ jz $L$ecb_exit
+
+$L$ecb_aligned_tail::
+ mov r8,rdi
+ mov rbx,rbp
+ mov rcx,rbp
+ lea rbp,QWORD PTR[rsp]
+ sub rsp,rcx
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ lea rdi,QWORD PTR[r8]
+ lea rsi,QWORD PTR[rsp]
+ mov rcx,rbx
+ jmp $L$ecb_loop
+$L$ecb_exit::
+ mov eax,1
+ lea rsp,QWORD PTR[8+rsp]
+$L$ecb_abort::
+ pop rbx
+ pop rbp
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_ecb_encrypt::
+padlock_ecb_encrypt ENDP
+PUBLIC padlock_cbc_encrypt
+
+ALIGN 16
+padlock_cbc_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_cbc_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+ push rbp
+ push rbx
+
+ xor eax,eax
+ test rdx,15
+ jnz $L$cbc_abort
+ test rcx,15
+ jnz $L$cbc_abort
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ pushf
+ cld
+ call _padlock_verify_ctx
+ lea rdx,QWORD PTR[16+rdx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR[rdx],32
+ jnz $L$cbc_aligned
+ test rdi,00fh
+ setz al
+ test rsi,00fh
+ setz bl
+ test eax,ebx
+ jnz $L$cbc_aligned
+ neg rax
+ mov rbx,512
+ not rax
+ lea rbp,QWORD PTR[rsp]
+ cmp rcx,rbx
+ cmovc rbx,rcx
+ and rax,rbx
+ mov rbx,rcx
+ neg rax
+ and rbx,512-1
+ lea rsp,QWORD PTR[rbp*1+rax]
+ mov rax,512
+ cmovz rbx,rax
+ cmp rcx,rbx
+ ja $L$cbc_loop
+ mov rax,rsi
+ cmp rbp,rsp
+ cmove rax,rdi
+ add rax,rcx
+ neg rax
+ and rax,0fffh
+ cmp rax,64
+ mov rax,-64
+ cmovae rax,rbx
+ and rbx,rax
+ jz $L$cbc_unaligned_tail
+ jmp $L$cbc_loop
+ALIGN 16
+$L$cbc_loop::
+ cmp rbx,rcx
+ cmova rbx,rcx
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+ test rdi,00fh
+ cmovnz rdi,rsp
+ test rsi,00fh
+ jz $L$cbc_inp_aligned
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+ mov rcx,rbx
+ mov rsi,rdi
+$L$cbc_inp_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,208
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+ mov rdi,r8
+ mov rbx,r11
+ test rdi,00fh
+ jz $L$cbc_out_aligned
+ mov rcx,rbx
+ lea rsi,QWORD PTR[rsp]
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+$L$cbc_out_aligned::
+ mov rsi,r9
+ mov rcx,r10
+ add rdi,rbx
+ add rsi,rbx
+ sub rcx,rbx
+ mov rbx,512
+ jz $L$cbc_break
+ cmp rcx,rbx
+ jae $L$cbc_loop
+$L$cbc_unaligned_tail::
+ xor eax,eax
+ cmp rbp,rsp
+ cmove rax,rcx
+ mov r8,rdi
+ mov rbx,rcx
+ sub rsp,rax
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ mov rsi,rsp
+ mov rdi,r8
+ mov rcx,rbx
+ jmp $L$cbc_loop
+ALIGN 16
+$L$cbc_break::
+ cmp rsp,rbp
+ je $L$cbc_done
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[rsp]
+$L$cbc_bzero::
+ movaps XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+ cmp rbp,rax
+ ja $L$cbc_bzero
+
+$L$cbc_done::
+ lea rsp,QWORD PTR[rbp]
+ jmp $L$cbc_exit
+
+ALIGN 16
+$L$cbc_aligned::
+ lea rbp,QWORD PTR[rcx*1+rsi]
+ neg rbp
+ and rbp,0fffh
+ xor eax,eax
+ cmp rbp,64
+ mov rbp,64-1
+ cmovae rbp,rax
+ and rbp,rcx
+ sub rcx,rbp
+ jz $L$cbc_aligned_tail
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,208
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+ test rbp,rbp
+ jz $L$cbc_exit
+
+$L$cbc_aligned_tail::
+ mov r8,rdi
+ mov rbx,rbp
+ mov rcx,rbp
+ lea rbp,QWORD PTR[rsp]
+ sub rsp,rcx
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ lea rdi,QWORD PTR[r8]
+ lea rsi,QWORD PTR[rsp]
+ mov rcx,rbx
+ jmp $L$cbc_loop
+$L$cbc_exit::
+ mov eax,1
+ lea rsp,QWORD PTR[8+rsp]
+$L$cbc_abort::
+ pop rbx
+ pop rbp
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_cbc_encrypt::
+padlock_cbc_encrypt ENDP
+PUBLIC padlock_cfb_encrypt
+
+ALIGN 16
+padlock_cfb_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_cfb_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+ push rbp
+ push rbx
+
+ xor eax,eax
+ test rdx,15
+ jnz $L$cfb_abort
+ test rcx,15
+ jnz $L$cfb_abort
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ pushf
+ cld
+ call _padlock_verify_ctx
+ lea rdx,QWORD PTR[16+rdx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR[rdx],32
+ jnz $L$cfb_aligned
+ test rdi,00fh
+ setz al
+ test rsi,00fh
+ setz bl
+ test eax,ebx
+ jnz $L$cfb_aligned
+ neg rax
+ mov rbx,512
+ not rax
+ lea rbp,QWORD PTR[rsp]
+ cmp rcx,rbx
+ cmovc rbx,rcx
+ and rax,rbx
+ mov rbx,rcx
+ neg rax
+ and rbx,512-1
+ lea rsp,QWORD PTR[rbp*1+rax]
+ mov rax,512
+ cmovz rbx,rax
+ jmp $L$cfb_loop
+ALIGN 16
+$L$cfb_loop::
+ cmp rbx,rcx
+ cmova rbx,rcx
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+ test rdi,00fh
+ cmovnz rdi,rsp
+ test rsi,00fh
+ jz $L$cfb_inp_aligned
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+ mov rcx,rbx
+ mov rsi,rdi
+$L$cfb_inp_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,224
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+ mov rdi,r8
+ mov rbx,r11
+ test rdi,00fh
+ jz $L$cfb_out_aligned
+ mov rcx,rbx
+ lea rsi,QWORD PTR[rsp]
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+$L$cfb_out_aligned::
+ mov rsi,r9
+ mov rcx,r10
+ add rdi,rbx
+ add rsi,rbx
+ sub rcx,rbx
+ mov rbx,512
+ jnz $L$cfb_loop
+ cmp rsp,rbp
+ je $L$cfb_done
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[rsp]
+$L$cfb_bzero::
+ movaps XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+ cmp rbp,rax
+ ja $L$cfb_bzero
+
+$L$cfb_done::
+ lea rsp,QWORD PTR[rbp]
+ jmp $L$cfb_exit
+
+ALIGN 16
+$L$cfb_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,224
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+$L$cfb_exit::
+ mov eax,1
+ lea rsp,QWORD PTR[8+rsp]
+$L$cfb_abort::
+ pop rbx
+ pop rbp
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_cfb_encrypt::
+padlock_cfb_encrypt ENDP
+PUBLIC padlock_ofb_encrypt
+
+ALIGN 16
+padlock_ofb_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_ofb_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+ push rbp
+ push rbx
+
+ xor eax,eax
+ test rdx,15
+ jnz $L$ofb_abort
+ test rcx,15
+ jnz $L$ofb_abort
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ pushf
+ cld
+ call _padlock_verify_ctx
+ lea rdx,QWORD PTR[16+rdx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR[rdx],32
+ jnz $L$ofb_aligned
+ test rdi,00fh
+ setz al
+ test rsi,00fh
+ setz bl
+ test eax,ebx
+ jnz $L$ofb_aligned
+ neg rax
+ mov rbx,512
+ not rax
+ lea rbp,QWORD PTR[rsp]
+ cmp rcx,rbx
+ cmovc rbx,rcx
+ and rax,rbx
+ mov rbx,rcx
+ neg rax
+ and rbx,512-1
+ lea rsp,QWORD PTR[rbp*1+rax]
+ mov rax,512
+ cmovz rbx,rax
+ jmp $L$ofb_loop
+ALIGN 16
+$L$ofb_loop::
+ cmp rbx,rcx
+ cmova rbx,rcx
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+ test rdi,00fh
+ cmovnz rdi,rsp
+ test rsi,00fh
+ jz $L$ofb_inp_aligned
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+ mov rcx,rbx
+ mov rsi,rdi
+$L$ofb_inp_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,232
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+ mov rdi,r8
+ mov rbx,r11
+ test rdi,00fh
+ jz $L$ofb_out_aligned
+ mov rcx,rbx
+ lea rsi,QWORD PTR[rsp]
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+$L$ofb_out_aligned::
+ mov rsi,r9
+ mov rcx,r10
+ add rdi,rbx
+ add rsi,rbx
+ sub rcx,rbx
+ mov rbx,512
+ jnz $L$ofb_loop
+ cmp rsp,rbp
+ je $L$ofb_done
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[rsp]
+$L$ofb_bzero::
+ movaps XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+ cmp rbp,rax
+ ja $L$ofb_bzero
+
+$L$ofb_done::
+ lea rsp,QWORD PTR[rbp]
+ jmp $L$ofb_exit
+
+ALIGN 16
+$L$ofb_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,232
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+$L$ofb_exit::
+ mov eax,1
+ lea rsp,QWORD PTR[8+rsp]
+$L$ofb_abort::
+ pop rbx
+ pop rbp
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_ofb_encrypt::
+padlock_ofb_encrypt ENDP
+PUBLIC padlock_ctr32_encrypt
+
+ALIGN 16
+padlock_ctr32_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_ctr32_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+ push rbp
+ push rbx
+
+ xor eax,eax
+ test rdx,15
+ jnz $L$ctr32_abort
+ test rcx,15
+ jnz $L$ctr32_abort
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ pushf
+ cld
+ call _padlock_verify_ctx
+ lea rdx,QWORD PTR[16+rdx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR[rdx],32
+ jnz $L$ctr32_aligned
+ test rdi,00fh
+ setz al
+ test rsi,00fh
+ setz bl
+ test eax,ebx
+ jnz $L$ctr32_aligned
+ neg rax
+ mov rbx,512
+ not rax
+ lea rbp,QWORD PTR[rsp]
+ cmp rcx,rbx
+ cmovc rbx,rcx
+ and rax,rbx
+ mov rbx,rcx
+ neg rax
+ and rbx,512-1
+ lea rsp,QWORD PTR[rbp*1+rax]
+ mov rax,512
+ cmovz rbx,rax
+$L$ctr32_reenter::
+ mov eax,DWORD PTR[((-4))+rdx]
+ bswap eax
+ neg eax
+ and eax,31
+ mov rbx,512
+ shl eax,4
+ cmovz rax,rbx
+ cmp rcx,rax
+ cmova rbx,rax
+ cmovbe rbx,rcx
+ cmp rcx,rbx
+ ja $L$ctr32_loop
+ mov rax,rsi
+ cmp rbp,rsp
+ cmove rax,rdi
+ add rax,rcx
+ neg rax
+ and rax,0fffh
+ cmp rax,32
+ mov rax,-32
+ cmovae rax,rbx
+ and rbx,rax
+ jz $L$ctr32_unaligned_tail
+ jmp $L$ctr32_loop
+ALIGN 16
+$L$ctr32_loop::
+ cmp rbx,rcx
+ cmova rbx,rcx
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+ test rdi,00fh
+ cmovnz rdi,rsp
+ test rsi,00fh
+ jz $L$ctr32_inp_aligned
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+ mov rcx,rbx
+ mov rsi,rdi
+$L$ctr32_inp_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,216
+ mov eax,DWORD PTR[((-4))+rdx]
+ test eax,0ffff0000h
+ jnz $L$ctr32_no_carry
+ bswap eax
+ add eax,010000h
+ bswap eax
+ mov DWORD PTR[((-4))+rdx],eax
+$L$ctr32_no_carry::
+ mov rdi,r8
+ mov rbx,r11
+ test rdi,00fh
+ jz $L$ctr32_out_aligned
+ mov rcx,rbx
+ lea rsi,QWORD PTR[rsp]
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+$L$ctr32_out_aligned::
+ mov rsi,r9
+ mov rcx,r10
+ add rdi,rbx
+ add rsi,rbx
+ sub rcx,rbx
+ mov rbx,512
+ jz $L$ctr32_break
+ cmp rcx,rbx
+ jae $L$ctr32_loop
+ mov rbx,rcx
+ mov rax,rsi
+ cmp rbp,rsp
+ cmove rax,rdi
+ add rax,rcx
+ neg rax
+ and rax,0fffh
+ cmp rax,32
+ mov rax,-32
+ cmovae rax,rbx
+ and rbx,rax
+ jnz $L$ctr32_loop
+$L$ctr32_unaligned_tail::
+ xor eax,eax
+ cmp rbp,rsp
+ cmove rax,rcx
+ mov r8,rdi
+ mov rbx,rcx
+ sub rsp,rax
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ mov rsi,rsp
+ mov rdi,r8
+ mov rcx,rbx
+ jmp $L$ctr32_loop
+ALIGN 16
+$L$ctr32_break::
+ cmp rsp,rbp
+ je $L$ctr32_done
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[rsp]
+$L$ctr32_bzero::
+ movaps XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+ cmp rbp,rax
+ ja $L$ctr32_bzero
+
+$L$ctr32_done::
+ lea rsp,QWORD PTR[rbp]
+ jmp $L$ctr32_exit
+
+ALIGN 16
+$L$ctr32_aligned::
+ mov eax,DWORD PTR[((-4))+rdx]
+ bswap eax
+ neg eax
+ and eax,0ffffh
+ mov rbx,1048576
+ shl eax,4
+ cmovz rax,rbx
+ cmp rcx,rax
+ cmova rbx,rax
+ cmovbe rbx,rcx
+ jbe $L$ctr32_aligned_skip
+
+$L$ctr32_aligned_loop::
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,216
+
+ mov eax,DWORD PTR[((-4))+rdx]
+ bswap eax
+ add eax,010000h
+ bswap eax
+ mov DWORD PTR[((-4))+rdx],eax
+
+ mov rcx,r10
+ sub rcx,r11
+ mov rbx,1048576
+ jz $L$ctr32_exit
+ cmp rcx,rbx
+ jae $L$ctr32_aligned_loop
+
+$L$ctr32_aligned_skip::
+ lea rbp,QWORD PTR[rcx*1+rsi]
+ neg rbp
+ and rbp,0fffh
+ xor eax,eax
+ cmp rbp,32
+ mov rbp,32-1
+ cmovae rbp,rax
+ and rbp,rcx
+ sub rcx,rbp
+ jz $L$ctr32_aligned_tail
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,216
+ test rbp,rbp
+ jz $L$ctr32_exit
+
+$L$ctr32_aligned_tail::
+ mov r8,rdi
+ mov rbx,rbp
+ mov rcx,rbp
+ lea rbp,QWORD PTR[rsp]
+ sub rsp,rcx
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ lea rdi,QWORD PTR[r8]
+ lea rsi,QWORD PTR[rsp]
+ mov rcx,rbx
+ jmp $L$ctr32_loop
+$L$ctr32_exit::
+ mov eax,1
+ lea rsp,QWORD PTR[8+rsp]
+$L$ctr32_abort::
+ pop rbx
+ pop rbp
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_ctr32_encrypt::
+padlock_ctr32_encrypt ENDP
+DB 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,95
+DB 54,52,32,109,111,100,117,108,101,44,32,67,82,89,80,84
+DB 79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64
+DB 111,112,101,110,115,115,108,46,111,114,103,62,0
+ALIGN 16
+.text$ ENDS
+_DATA SEGMENT
+ALIGN 8
+$L$padlock_saved_context::
+ DQ 0
+
+_DATA ENDS
+END
diff --git a/contrib/libs/openssl/crypto/buildinf-win.h b/contrib/libs/openssl/crypto/buildinf-win.h
index e879a93f37..299666c289 100644
--- a/contrib/libs/openssl/crypto/buildinf-win.h
+++ b/contrib/libs/openssl/crypto/buildinf-win.h
@@ -1,45 +1,45 @@
-/*
- * WARNING: do not edit!
- * Generated by util/mkbuildinf.pl
- *
- * Copyright 2014-2017 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the OpenSSL license (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-#define PLATFORM "platform: VC-WIN64A-masm"
-#define DATE "built on: Wed Oct 20 16:49:54 2021 UTC"
-
-/*
- * Generate compiler_flags as an array of individual characters. This is a
- * workaround for the situation where CFLAGS gets too long for a C90 string
- * literal
- */
-static const char compiler_flags[] = {
- 'c','o','m','p','i','l','e','r',':',' ','c','l',' ','/','Z','i',
- ' ','/','F','d','o','s','s','l','_','s','t','a','t','i','c','.',
- 'p','d','b',' ','/','G','s','0',' ','/','G','F',' ','/','G','y',
- ' ','/','M','D',' ','/','W','3',' ','/','w','d','4','0','9','0',
- ' ','/','n','o','l','o','g','o',' ','/','O','2',' ','-','D','L',
- '_','E','N','D','I','A','N',' ','-','D','O','P','E','N','S','S',
- 'L','_','P','I','C',' ','-','D','O','P','E','N','S','S','L','_',
- 'C','P','U','I','D','_','O','B','J',' ','-','D','O','P','E','N',
- 'S','S','L','_','I','A','3','2','_','S','S','E','2',' ','-','D',
- 'O','P','E','N','S','S','L','_','B','N','_','A','S','M','_','M',
- 'O','N','T',' ','-','D','O','P','E','N','S','S','L','_','B','N',
- '_','A','S','M','_','M','O','N','T','5',' ','-','D','O','P','E',
- 'N','S','S','L','_','B','N','_','A','S','M','_','G','F','2','m',
- ' ','-','D','S','H','A','1','_','A','S','M',' ','-','D','S','H',
- 'A','2','5','6','_','A','S','M',' ','-','D','S','H','A','5','1',
- '2','_','A','S','M',' ','-','D','K','E','C','C','A','K','1','6',
- '0','0','_','A','S','M',' ','-','D','R','C','4','_','A','S','M',
- ' ','-','D','M','D','5','_','A','S','M',' ','-','D','A','E','S',
- 'N','I','_','A','S','M',' ','-','D','V','P','A','E','S','_','A',
- 'S','M',' ','-','D','G','H','A','S','H','_','A','S','M',' ','-',
- 'D','E','C','P','_','N','I','S','T','Z','2','5','6','_','A','S',
- 'M',' ','-','D','X','2','5','5','1','9','_','A','S','M',' ','-',
- 'D','P','O','L','Y','1','3','0','5','_','A','S','M','\0'
-};
+/*
+ * WARNING: do not edit!
+ * Generated by util/mkbuildinf.pl
+ *
+ * Copyright 2014-2017 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#define PLATFORM "platform: VC-WIN64A-masm"
+#define DATE "built on: Wed Oct 20 16:49:54 2021 UTC"
+
+/*
+ * Generate compiler_flags as an array of individual characters. This is a
+ * workaround for the situation where CFLAGS gets too long for a C90 string
+ * literal
+ */
+static const char compiler_flags[] = {
+ 'c','o','m','p','i','l','e','r',':',' ','c','l',' ','/','Z','i',
+ ' ','/','F','d','o','s','s','l','_','s','t','a','t','i','c','.',
+ 'p','d','b',' ','/','G','s','0',' ','/','G','F',' ','/','G','y',
+ ' ','/','M','D',' ','/','W','3',' ','/','w','d','4','0','9','0',
+ ' ','/','n','o','l','o','g','o',' ','/','O','2',' ','-','D','L',
+ '_','E','N','D','I','A','N',' ','-','D','O','P','E','N','S','S',
+ 'L','_','P','I','C',' ','-','D','O','P','E','N','S','S','L','_',
+ 'C','P','U','I','D','_','O','B','J',' ','-','D','O','P','E','N',
+ 'S','S','L','_','I','A','3','2','_','S','S','E','2',' ','-','D',
+ 'O','P','E','N','S','S','L','_','B','N','_','A','S','M','_','M',
+ 'O','N','T',' ','-','D','O','P','E','N','S','S','L','_','B','N',
+ '_','A','S','M','_','M','O','N','T','5',' ','-','D','O','P','E',
+ 'N','S','S','L','_','B','N','_','A','S','M','_','G','F','2','m',
+ ' ','-','D','S','H','A','1','_','A','S','M',' ','-','D','S','H',
+ 'A','2','5','6','_','A','S','M',' ','-','D','S','H','A','5','1',
+ '2','_','A','S','M',' ','-','D','K','E','C','C','A','K','1','6',
+ '0','0','_','A','S','M',' ','-','D','R','C','4','_','A','S','M',
+ ' ','-','D','M','D','5','_','A','S','M',' ','-','D','A','E','S',
+ 'N','I','_','A','S','M',' ','-','D','V','P','A','E','S','_','A',
+ 'S','M',' ','-','D','G','H','A','S','H','_','A','S','M',' ','-',
+ 'D','E','C','P','_','N','I','S','T','Z','2','5','6','_','A','S',
+ 'M',' ','-','D','X','2','5','5','1','9','_','A','S','M',' ','-',
+ 'D','P','O','L','Y','1','3','0','5','_','A','S','M','\0'
+};
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-win-i686.h b/contrib/libs/openssl/include/crypto/bn_conf-win-i686.h
index bf6adeb11d..dcd6661cea 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-win-i686.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-win-i686.h
@@ -1,28 +1,28 @@
-/* WARNING: do not edit! */
-/* Generated by makefile from include\crypto\bn_conf.h.in */
-/*
- * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the OpenSSL license (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-#ifndef OSSL_CRYPTO_BN_CONF_H
-# define OSSL_CRYPTO_BN_CONF_H
-
-/*
- * The contents of this file are not used in the UEFI build, as
- * both 32-bit and 64-bit builds are supported from a single run
- * of the Configure script.
- */
-
-/* Should we define BN_DIV2W here? */
-
-/* Only one for the following should be defined */
-#undef SIXTY_FOUR_BIT_LONG
-#undef SIXTY_FOUR_BIT
-#define THIRTY_TWO_BIT
-
-#endif
+/* WARNING: do not edit! */
+/* Generated by makefile from include\crypto\bn_conf.h.in */
+/*
+ * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef OSSL_CRYPTO_BN_CONF_H
+# define OSSL_CRYPTO_BN_CONF_H
+
+/*
+ * The contents of this file are not used in the UEFI build, as
+ * both 32-bit and 64-bit builds are supported from a single run
+ * of the Configure script.
+ */
+
+/* Should we define BN_DIV2W here? */
+
+/* Only one for the following should be defined */
+#undef SIXTY_FOUR_BIT_LONG
+#undef SIXTY_FOUR_BIT
+#define THIRTY_TWO_BIT
+
+#endif
diff --git a/contrib/libs/openssl/include/crypto/bn_conf-win-x86_64.h b/contrib/libs/openssl/include/crypto/bn_conf-win-x86_64.h
index 2d8fa641fb..d734d89d5e 100644
--- a/contrib/libs/openssl/include/crypto/bn_conf-win-x86_64.h
+++ b/contrib/libs/openssl/include/crypto/bn_conf-win-x86_64.h
@@ -1,28 +1,28 @@
-/* WARNING: do not edit! */
-/* Generated by makefile from ..\include\crypto\bn_conf.h.in */
-/*
- * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the OpenSSL license (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-#ifndef OSSL_CRYPTO_BN_CONF_H
-# define OSSL_CRYPTO_BN_CONF_H
-
-/*
- * The contents of this file are not used in the UEFI build, as
- * both 32-bit and 64-bit builds are supported from a single run
- * of the Configure script.
- */
-
-/* Should we define BN_DIV2W here? */
-
-/* Only one for the following should be defined */
-#undef SIXTY_FOUR_BIT_LONG
-#define SIXTY_FOUR_BIT
-#undef THIRTY_TWO_BIT
-
-#endif
+/* WARNING: do not edit! */
+/* Generated by makefile from ..\include\crypto\bn_conf.h.in */
+/*
+ * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef OSSL_CRYPTO_BN_CONF_H
+# define OSSL_CRYPTO_BN_CONF_H
+
+/*
+ * The contents of this file are not used in the UEFI build, as
+ * both 32-bit and 64-bit builds are supported from a single run
+ * of the Configure script.
+ */
+
+/* Should we define BN_DIV2W here? */
+
+/* Only one for the following should be defined */
+#undef SIXTY_FOUR_BIT_LONG
+#define SIXTY_FOUR_BIT
+#undef THIRTY_TWO_BIT
+
+#endif
diff --git a/contrib/libs/openssl/include/crypto/dso_conf-win.h b/contrib/libs/openssl/include/crypto/dso_conf-win.h
index 576fcbe9ed..fef8ca641c 100644
--- a/contrib/libs/openssl/include/crypto/dso_conf-win.h
+++ b/contrib/libs/openssl/include/crypto/dso_conf-win.h
@@ -1,16 +1,16 @@
-/* WARNING: do not edit! */
-/* Generated by makefile from ..\include\crypto\dso_conf.h.in */
-/*
- * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the OpenSSL license (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-#ifndef OSSL_CRYPTO_DSO_CONF_H
-# define OSSL_CRYPTO_DSO_CONF_H
-# define DSO_WIN32
-# define DSO_EXTENSION ".dll"
-#endif
+/* WARNING: do not edit! */
+/* Generated by makefile from ..\include\crypto\dso_conf.h.in */
+/*
+ * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef OSSL_CRYPTO_DSO_CONF_H
+# define OSSL_CRYPTO_DSO_CONF_H
+# define DSO_WIN32
+# define DSO_EXTENSION ".dll"
+#endif
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-win-i686.h b/contrib/libs/openssl/include/openssl/opensslconf-win-i686.h
index 49d8cae85a..850f0c7a2b 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-win-i686.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-win-i686.h
@@ -1,203 +1,203 @@
-/*
- * WARNING: do not edit!
- * Generated by makefile from include\openssl\opensslconf.h.in
- *
- * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the OpenSSL license (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-#include <openssl/opensslv.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef OPENSSL_ALGORITHM_DEFINES
-# error OPENSSL_ALGORITHM_DEFINES no longer supported
-#endif
-
-/*
- * OpenSSL was configured with the following options:
- */
-
-#ifndef OPENSSL_SYS_WIN32
-# define OPENSSL_SYS_WIN32 1
-#endif
-#ifndef OPENSSL_NO_MD2
-# define OPENSSL_NO_MD2
-#endif
-#ifndef OPENSSL_NO_RC5
-# define OPENSSL_NO_RC5
-#endif
-#ifndef OPENSSL_RAND_SEED_OS
-# define OPENSSL_RAND_SEED_OS
-#endif
-#ifndef OPENSSL_NO_AFALGENG
-# define OPENSSL_NO_AFALGENG
-#endif
-#ifndef OPENSSL_NO_ASAN
-# define OPENSSL_NO_ASAN
-#endif
-#ifndef OPENSSL_NO_CRYPTO_MDEBUG
-# define OPENSSL_NO_CRYPTO_MDEBUG
-#endif
-#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
-# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
-#endif
-#ifndef OPENSSL_NO_DEVCRYPTOENG
-# define OPENSSL_NO_DEVCRYPTOENG
-#endif
-#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
-# define OPENSSL_NO_EC_NISTP_64_GCC_128
-#endif
-#ifndef OPENSSL_NO_EGD
-# define OPENSSL_NO_EGD
-#endif
-#ifndef OPENSSL_NO_EXTERNAL_TESTS
-# define OPENSSL_NO_EXTERNAL_TESTS
-#endif
-#ifndef OPENSSL_NO_FUZZ_AFL
-# define OPENSSL_NO_FUZZ_AFL
-#endif
-#ifndef OPENSSL_NO_FUZZ_LIBFUZZER
-# define OPENSSL_NO_FUZZ_LIBFUZZER
-#endif
-#ifndef OPENSSL_NO_HEARTBEATS
-# define OPENSSL_NO_HEARTBEATS
-#endif
-#ifndef OPENSSL_NO_MSAN
-# define OPENSSL_NO_MSAN
-#endif
-#ifndef OPENSSL_NO_SCTP
-# define OPENSSL_NO_SCTP
-#endif
-#ifndef OPENSSL_NO_SSL_TRACE
-# define OPENSSL_NO_SSL_TRACE
-#endif
-#ifndef OPENSSL_NO_SSL3
-# define OPENSSL_NO_SSL3
-#endif
-#ifndef OPENSSL_NO_SSL3_METHOD
-# define OPENSSL_NO_SSL3_METHOD
-#endif
-#ifndef OPENSSL_NO_TESTS
-# define OPENSSL_NO_TESTS
-#endif
-#ifndef OPENSSL_NO_UBSAN
-# define OPENSSL_NO_UBSAN
-#endif
-#ifndef OPENSSL_NO_UNIT_TEST
-# define OPENSSL_NO_UNIT_TEST
-#endif
-#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
-# define OPENSSL_NO_WEAK_SSL_CIPHERS
-#endif
-#ifndef OPENSSL_NO_DYNAMIC_ENGINE
-# define OPENSSL_NO_DYNAMIC_ENGINE
-#endif
-
-
-/*
- * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers
- * don't like that. This will hopefully silence them.
- */
-#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy;
-
-/*
- * Applications should use -DOPENSSL_API_COMPAT=<version> to suppress the
- * declarations of functions deprecated in or before <version>. Otherwise, they
- * still won't see them if the library has been built to disable deprecated
- * functions.
- */
-#ifndef DECLARE_DEPRECATED
-# define DECLARE_DEPRECATED(f) f;
-# ifdef __GNUC__
-# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0)
-# undef DECLARE_DEPRECATED
-# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated));
-# endif
-# elif defined(__SUNPRO_C)
-# if (__SUNPRO_C >= 0x5130)
-# undef DECLARE_DEPRECATED
-# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated));
-# endif
-# endif
-#endif
-
-#ifndef OPENSSL_FILE
-# ifdef OPENSSL_NO_FILENAMES
-# define OPENSSL_FILE ""
-# define OPENSSL_LINE 0
-# else
-# define OPENSSL_FILE __FILE__
-# define OPENSSL_LINE __LINE__
-# endif
-#endif
-
-#ifndef OPENSSL_MIN_API
-# define OPENSSL_MIN_API 0
-#endif
-
-#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API
-# undef OPENSSL_API_COMPAT
-# define OPENSSL_API_COMPAT OPENSSL_MIN_API
-#endif
-
-/*
- * Do not deprecate things to be deprecated in version 1.2.0 before the
- * OpenSSL version number matches.
- */
-#if OPENSSL_VERSION_NUMBER < 0x10200000L
-# define DEPRECATEDIN_1_2_0(f) f;
-#elif OPENSSL_API_COMPAT < 0x10200000L
-# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f)
-#else
-# define DEPRECATEDIN_1_2_0(f)
-#endif
-
-#if OPENSSL_API_COMPAT < 0x10100000L
-# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f)
-#else
-# define DEPRECATEDIN_1_1_0(f)
-#endif
-
-#if OPENSSL_API_COMPAT < 0x10000000L
-# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f)
-#else
-# define DEPRECATEDIN_1_0_0(f)
-#endif
-
-#if OPENSSL_API_COMPAT < 0x00908000L
-# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f)
-#else
-# define DEPRECATEDIN_0_9_8(f)
-#endif
-
-/* Generate 80386 code? */
-#undef I386_ONLY
-
-#undef OPENSSL_UNISTD
-#define OPENSSL_UNISTD <unistd.h>
-
-#define OPENSSL_EXPORT_VAR_AS_FUNCTION
-
-/*
- * The following are cipher-specific, but are part of the public API.
- */
-#if !defined(OPENSSL_SYS_UEFI)
-# define BN_LLONG
-/* Only one for the following should be defined */
-# undef SIXTY_FOUR_BIT_LONG
-# undef SIXTY_FOUR_BIT
-# define THIRTY_TWO_BIT
-#endif
-
-#define RC4_INT unsigned int
-
-#ifdef __cplusplus
-}
-#endif
+/*
+ * WARNING: do not edit!
+ * Generated by makefile from include\openssl\opensslconf.h.in
+ *
+ * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/opensslv.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef OPENSSL_ALGORITHM_DEFINES
+# error OPENSSL_ALGORITHM_DEFINES no longer supported
+#endif
+
+/*
+ * OpenSSL was configured with the following options:
+ */
+
+#ifndef OPENSSL_SYS_WIN32
+# define OPENSSL_SYS_WIN32 1
+#endif
+#ifndef OPENSSL_NO_MD2
+# define OPENSSL_NO_MD2
+#endif
+#ifndef OPENSSL_NO_RC5
+# define OPENSSL_NO_RC5
+#endif
+#ifndef OPENSSL_RAND_SEED_OS
+# define OPENSSL_RAND_SEED_OS
+#endif
+#ifndef OPENSSL_NO_AFALGENG
+# define OPENSSL_NO_AFALGENG
+#endif
+#ifndef OPENSSL_NO_ASAN
+# define OPENSSL_NO_ASAN
+#endif
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
+# define OPENSSL_NO_CRYPTO_MDEBUG
+#endif
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
+# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
+#endif
+#ifndef OPENSSL_NO_DEVCRYPTOENG
+# define OPENSSL_NO_DEVCRYPTOENG
+#endif
+#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
+# define OPENSSL_NO_EC_NISTP_64_GCC_128
+#endif
+#ifndef OPENSSL_NO_EGD
+# define OPENSSL_NO_EGD
+#endif
+#ifndef OPENSSL_NO_EXTERNAL_TESTS
+# define OPENSSL_NO_EXTERNAL_TESTS
+#endif
+#ifndef OPENSSL_NO_FUZZ_AFL
+# define OPENSSL_NO_FUZZ_AFL
+#endif
+#ifndef OPENSSL_NO_FUZZ_LIBFUZZER
+# define OPENSSL_NO_FUZZ_LIBFUZZER
+#endif
+#ifndef OPENSSL_NO_HEARTBEATS
+# define OPENSSL_NO_HEARTBEATS
+#endif
+#ifndef OPENSSL_NO_MSAN
+# define OPENSSL_NO_MSAN
+#endif
+#ifndef OPENSSL_NO_SCTP
+# define OPENSSL_NO_SCTP
+#endif
+#ifndef OPENSSL_NO_SSL_TRACE
+# define OPENSSL_NO_SSL_TRACE
+#endif
+#ifndef OPENSSL_NO_SSL3
+# define OPENSSL_NO_SSL3
+#endif
+#ifndef OPENSSL_NO_SSL3_METHOD
+# define OPENSSL_NO_SSL3_METHOD
+#endif
+#ifndef OPENSSL_NO_TESTS
+# define OPENSSL_NO_TESTS
+#endif
+#ifndef OPENSSL_NO_UBSAN
+# define OPENSSL_NO_UBSAN
+#endif
+#ifndef OPENSSL_NO_UNIT_TEST
+# define OPENSSL_NO_UNIT_TEST
+#endif
+#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
+# define OPENSSL_NO_WEAK_SSL_CIPHERS
+#endif
+#ifndef OPENSSL_NO_DYNAMIC_ENGINE
+# define OPENSSL_NO_DYNAMIC_ENGINE
+#endif
+
+
+/*
+ * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers
+ * don't like that. This will hopefully silence them.
+ */
+#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy;
+
+/*
+ * Applications should use -DOPENSSL_API_COMPAT=<version> to suppress the
+ * declarations of functions deprecated in or before <version>. Otherwise, they
+ * still won't see them if the library has been built to disable deprecated
+ * functions.
+ */
+#ifndef DECLARE_DEPRECATED
+# define DECLARE_DEPRECATED(f) f;
+# ifdef __GNUC__
+# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0)
+# undef DECLARE_DEPRECATED
+# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated));
+# endif
+# elif defined(__SUNPRO_C)
+# if (__SUNPRO_C >= 0x5130)
+# undef DECLARE_DEPRECATED
+# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated));
+# endif
+# endif
+#endif
+
+#ifndef OPENSSL_FILE
+# ifdef OPENSSL_NO_FILENAMES
+# define OPENSSL_FILE ""
+# define OPENSSL_LINE 0
+# else
+# define OPENSSL_FILE __FILE__
+# define OPENSSL_LINE __LINE__
+# endif
+#endif
+
+#ifndef OPENSSL_MIN_API
+# define OPENSSL_MIN_API 0
+#endif
+
+#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API
+# undef OPENSSL_API_COMPAT
+# define OPENSSL_API_COMPAT OPENSSL_MIN_API
+#endif
+
+/*
+ * Do not deprecate things to be deprecated in version 1.2.0 before the
+ * OpenSSL version number matches.
+ */
+#if OPENSSL_VERSION_NUMBER < 0x10200000L
+# define DEPRECATEDIN_1_2_0(f) f;
+#elif OPENSSL_API_COMPAT < 0x10200000L
+# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f)
+#else
+# define DEPRECATEDIN_1_2_0(f)
+#endif
+
+#if OPENSSL_API_COMPAT < 0x10100000L
+# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f)
+#else
+# define DEPRECATEDIN_1_1_0(f)
+#endif
+
+#if OPENSSL_API_COMPAT < 0x10000000L
+# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f)
+#else
+# define DEPRECATEDIN_1_0_0(f)
+#endif
+
+#if OPENSSL_API_COMPAT < 0x00908000L
+# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f)
+#else
+# define DEPRECATEDIN_0_9_8(f)
+#endif
+
+/* Generate 80386 code? */
+#undef I386_ONLY
+
+#undef OPENSSL_UNISTD
+#define OPENSSL_UNISTD <unistd.h>
+
+#define OPENSSL_EXPORT_VAR_AS_FUNCTION
+
+/*
+ * The following are cipher-specific, but are part of the public API.
+ */
+#if !defined(OPENSSL_SYS_UEFI)
+# define BN_LLONG
+/* Only one for the following should be defined */
+# undef SIXTY_FOUR_BIT_LONG
+# undef SIXTY_FOUR_BIT
+# define THIRTY_TWO_BIT
+#endif
+
+#define RC4_INT unsigned int
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/contrib/libs/openssl/include/openssl/opensslconf-win-x86_64.h b/contrib/libs/openssl/include/openssl/opensslconf-win-x86_64.h
index ee82b24925..8e18236d81 100644
--- a/contrib/libs/openssl/include/openssl/opensslconf-win-x86_64.h
+++ b/contrib/libs/openssl/include/openssl/opensslconf-win-x86_64.h
@@ -1,206 +1,206 @@
-/*
- * WARNING: do not edit!
- * Generated by makefile from ..\include\openssl\opensslconf.h.in
- *
- * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the OpenSSL license (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-#include <openssl/opensslv.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef OPENSSL_ALGORITHM_DEFINES
-# error OPENSSL_ALGORITHM_DEFINES no longer supported
-#endif
-
-/*
- * OpenSSL was configured with the following options:
- */
-
-#ifndef OPENSSL_SYS_WIN64A
-# define OPENSSL_SYS_WIN64A 1
-#endif
-#ifndef OPENSSL_NO_MD2
-# define OPENSSL_NO_MD2
-#endif
-#ifndef OPENSSL_NO_RC5
-# define OPENSSL_NO_RC5
-#endif
-#ifndef OPENSSL_THREADS
-# define OPENSSL_THREADS
-#endif
-#ifndef OPENSSL_RAND_SEED_OS
-# define OPENSSL_RAND_SEED_OS
-#endif
-#ifndef OPENSSL_NO_AFALGENG
-# define OPENSSL_NO_AFALGENG
-#endif
-#ifndef OPENSSL_NO_ASAN
-# define OPENSSL_NO_ASAN
-#endif
-#ifndef OPENSSL_NO_CRYPTO_MDEBUG
-# define OPENSSL_NO_CRYPTO_MDEBUG
-#endif
-#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
-# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
-#endif
-#ifndef OPENSSL_NO_DEVCRYPTOENG
-# define OPENSSL_NO_DEVCRYPTOENG
-#endif
-#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
-# define OPENSSL_NO_EC_NISTP_64_GCC_128
-#endif
-#ifndef OPENSSL_NO_EGD
-# define OPENSSL_NO_EGD
-#endif
-#ifndef OPENSSL_NO_EXTERNAL_TESTS
-# define OPENSSL_NO_EXTERNAL_TESTS
-#endif
-#ifndef OPENSSL_NO_FUZZ_AFL
-# define OPENSSL_NO_FUZZ_AFL
-#endif
-#ifndef OPENSSL_NO_FUZZ_LIBFUZZER
-# define OPENSSL_NO_FUZZ_LIBFUZZER
-#endif
-#ifndef OPENSSL_NO_HEARTBEATS
-# define OPENSSL_NO_HEARTBEATS
-#endif
-#ifndef OPENSSL_NO_MSAN
-# define OPENSSL_NO_MSAN
-#endif
-#ifndef OPENSSL_NO_SCTP
-# define OPENSSL_NO_SCTP
-#endif
-#ifndef OPENSSL_NO_SSL_TRACE
-# define OPENSSL_NO_SSL_TRACE
-#endif
-#ifndef OPENSSL_NO_SSL3
-# define OPENSSL_NO_SSL3
-#endif
-#ifndef OPENSSL_NO_SSL3_METHOD
-# define OPENSSL_NO_SSL3_METHOD
-#endif
-#ifndef OPENSSL_NO_TESTS
-# define OPENSSL_NO_TESTS
-#endif
-#ifndef OPENSSL_NO_UBSAN
-# define OPENSSL_NO_UBSAN
-#endif
-#ifndef OPENSSL_NO_UNIT_TEST
-# define OPENSSL_NO_UNIT_TEST
-#endif
-#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
-# define OPENSSL_NO_WEAK_SSL_CIPHERS
-#endif
-#ifndef OPENSSL_NO_DYNAMIC_ENGINE
-# define OPENSSL_NO_DYNAMIC_ENGINE
-#endif
-
-
-/*
- * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers
- * don't like that. This will hopefully silence them.
- */
-#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy;
-
-/*
- * Applications should use -DOPENSSL_API_COMPAT=<version> to suppress the
- * declarations of functions deprecated in or before <version>. Otherwise, they
- * still won't see them if the library has been built to disable deprecated
- * functions.
- */
-#ifndef DECLARE_DEPRECATED
-# define DECLARE_DEPRECATED(f) f;
-# ifdef __GNUC__
-# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0)
-# undef DECLARE_DEPRECATED
-# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated));
-# endif
-# elif defined(__SUNPRO_C)
-# if (__SUNPRO_C >= 0x5130)
-# undef DECLARE_DEPRECATED
-# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated));
-# endif
-# endif
-#endif
-
-#ifndef OPENSSL_FILE
-# ifdef OPENSSL_NO_FILENAMES
-# define OPENSSL_FILE ""
-# define OPENSSL_LINE 0
-# else
-# define OPENSSL_FILE __FILE__
-# define OPENSSL_LINE __LINE__
-# endif
-#endif
-
-#ifndef OPENSSL_MIN_API
-# define OPENSSL_MIN_API 0
-#endif
-
-#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API
-# undef OPENSSL_API_COMPAT
-# define OPENSSL_API_COMPAT OPENSSL_MIN_API
-#endif
-
-/*
- * Do not deprecate things to be deprecated in version 1.2.0 before the
- * OpenSSL version number matches.
- */
-#if OPENSSL_VERSION_NUMBER < 0x10200000L
-# define DEPRECATEDIN_1_2_0(f) f;
-#elif OPENSSL_API_COMPAT < 0x10200000L
-# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f)
-#else
-# define DEPRECATEDIN_1_2_0(f)
-#endif
-
-#if OPENSSL_API_COMPAT < 0x10100000L
-# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f)
-#else
-# define DEPRECATEDIN_1_1_0(f)
-#endif
-
-#if OPENSSL_API_COMPAT < 0x10000000L
-# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f)
-#else
-# define DEPRECATEDIN_1_0_0(f)
-#endif
-
-#if OPENSSL_API_COMPAT < 0x00908000L
-# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f)
-#else
-# define DEPRECATEDIN_0_9_8(f)
-#endif
-
-/* Generate 80386 code? */
-#undef I386_ONLY
-
-#undef OPENSSL_UNISTD
-#define OPENSSL_UNISTD <unistd.h>
-
-#define OPENSSL_EXPORT_VAR_AS_FUNCTION
-
-/*
- * The following are cipher-specific, but are part of the public API.
- */
-#if !defined(OPENSSL_SYS_UEFI)
-# undef BN_LLONG
-/* Only one for the following should be defined */
-# undef SIXTY_FOUR_BIT_LONG
-# define SIXTY_FOUR_BIT
-# undef THIRTY_TWO_BIT
-#endif
-
-#define RC4_INT unsigned int
-
-#ifdef __cplusplus
-}
-#endif
+/*
+ * WARNING: do not edit!
+ * Generated by makefile from ..\include\openssl\opensslconf.h.in
+ *
+ * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <openssl/opensslv.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef OPENSSL_ALGORITHM_DEFINES
+# error OPENSSL_ALGORITHM_DEFINES no longer supported
+#endif
+
+/*
+ * OpenSSL was configured with the following options:
+ */
+
+#ifndef OPENSSL_SYS_WIN64A
+# define OPENSSL_SYS_WIN64A 1
+#endif
+#ifndef OPENSSL_NO_MD2
+# define OPENSSL_NO_MD2
+#endif
+#ifndef OPENSSL_NO_RC5
+# define OPENSSL_NO_RC5
+#endif
+#ifndef OPENSSL_THREADS
+# define OPENSSL_THREADS
+#endif
+#ifndef OPENSSL_RAND_SEED_OS
+# define OPENSSL_RAND_SEED_OS
+#endif
+#ifndef OPENSSL_NO_AFALGENG
+# define OPENSSL_NO_AFALGENG
+#endif
+#ifndef OPENSSL_NO_ASAN
+# define OPENSSL_NO_ASAN
+#endif
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
+# define OPENSSL_NO_CRYPTO_MDEBUG
+#endif
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
+# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE
+#endif
+#ifndef OPENSSL_NO_DEVCRYPTOENG
+# define OPENSSL_NO_DEVCRYPTOENG
+#endif
+#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
+# define OPENSSL_NO_EC_NISTP_64_GCC_128
+#endif
+#ifndef OPENSSL_NO_EGD
+# define OPENSSL_NO_EGD
+#endif
+#ifndef OPENSSL_NO_EXTERNAL_TESTS
+# define OPENSSL_NO_EXTERNAL_TESTS
+#endif
+#ifndef OPENSSL_NO_FUZZ_AFL
+# define OPENSSL_NO_FUZZ_AFL
+#endif
+#ifndef OPENSSL_NO_FUZZ_LIBFUZZER
+# define OPENSSL_NO_FUZZ_LIBFUZZER
+#endif
+#ifndef OPENSSL_NO_HEARTBEATS
+# define OPENSSL_NO_HEARTBEATS
+#endif
+#ifndef OPENSSL_NO_MSAN
+# define OPENSSL_NO_MSAN
+#endif
+#ifndef OPENSSL_NO_SCTP
+# define OPENSSL_NO_SCTP
+#endif
+#ifndef OPENSSL_NO_SSL_TRACE
+# define OPENSSL_NO_SSL_TRACE
+#endif
+#ifndef OPENSSL_NO_SSL3
+# define OPENSSL_NO_SSL3
+#endif
+#ifndef OPENSSL_NO_SSL3_METHOD
+# define OPENSSL_NO_SSL3_METHOD
+#endif
+#ifndef OPENSSL_NO_TESTS
+# define OPENSSL_NO_TESTS
+#endif
+#ifndef OPENSSL_NO_UBSAN
+# define OPENSSL_NO_UBSAN
+#endif
+#ifndef OPENSSL_NO_UNIT_TEST
+# define OPENSSL_NO_UNIT_TEST
+#endif
+#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
+# define OPENSSL_NO_WEAK_SSL_CIPHERS
+#endif
+#ifndef OPENSSL_NO_DYNAMIC_ENGINE
+# define OPENSSL_NO_DYNAMIC_ENGINE
+#endif
+
+
+/*
+ * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers
+ * don't like that. This will hopefully silence them.
+ */
+#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy;
+
+/*
+ * Applications should use -DOPENSSL_API_COMPAT=<version> to suppress the
+ * declarations of functions deprecated in or before <version>. Otherwise, they
+ * still won't see them if the library has been built to disable deprecated
+ * functions.
+ */
+#ifndef DECLARE_DEPRECATED
+# define DECLARE_DEPRECATED(f) f;
+# ifdef __GNUC__
+# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0)
+# undef DECLARE_DEPRECATED
+# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated));
+# endif
+# elif defined(__SUNPRO_C)
+# if (__SUNPRO_C >= 0x5130)
+# undef DECLARE_DEPRECATED
+# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated));
+# endif
+# endif
+#endif
+
+#ifndef OPENSSL_FILE
+# ifdef OPENSSL_NO_FILENAMES
+# define OPENSSL_FILE ""
+# define OPENSSL_LINE 0
+# else
+# define OPENSSL_FILE __FILE__
+# define OPENSSL_LINE __LINE__
+# endif
+#endif
+
+#ifndef OPENSSL_MIN_API
+# define OPENSSL_MIN_API 0
+#endif
+
+#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API
+# undef OPENSSL_API_COMPAT
+# define OPENSSL_API_COMPAT OPENSSL_MIN_API
+#endif
+
+/*
+ * Do not deprecate things to be deprecated in version 1.2.0 before the
+ * OpenSSL version number matches.
+ */
+#if OPENSSL_VERSION_NUMBER < 0x10200000L
+# define DEPRECATEDIN_1_2_0(f) f;
+#elif OPENSSL_API_COMPAT < 0x10200000L
+# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f)
+#else
+# define DEPRECATEDIN_1_2_0(f)
+#endif
+
+#if OPENSSL_API_COMPAT < 0x10100000L
+# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f)
+#else
+# define DEPRECATEDIN_1_1_0(f)
+#endif
+
+#if OPENSSL_API_COMPAT < 0x10000000L
+# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f)
+#else
+# define DEPRECATEDIN_1_0_0(f)
+#endif
+
+#if OPENSSL_API_COMPAT < 0x00908000L
+# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f)
+#else
+# define DEPRECATEDIN_0_9_8(f)
+#endif
+
+/* Generate 80386 code? */
+#undef I386_ONLY
+
+#undef OPENSSL_UNISTD
+#define OPENSSL_UNISTD <unistd.h>
+
+#define OPENSSL_EXPORT_VAR_AS_FUNCTION
+
+/*
+ * The following are cipher-specific, but are part of the public API.
+ */
+#if !defined(OPENSSL_SYS_UEFI)
+# undef BN_LLONG
+/* Only one for the following should be defined */
+# undef SIXTY_FOUR_BIT_LONG
+# define SIXTY_FOUR_BIT
+# undef THIRTY_TWO_BIT
+#endif
+
+#define RC4_INT unsigned int
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/contrib/python/PyHamcrest/src/hamcrest/library/text/stringcontainsinorder.py b/contrib/python/PyHamcrest/src/hamcrest/library/text/stringcontainsinorder.py
index d5b24ffa40..516b1043ab 100644
--- a/contrib/python/PyHamcrest/src/hamcrest/library/text/stringcontainsinorder.py
+++ b/contrib/python/PyHamcrest/src/hamcrest/library/text/stringcontainsinorder.py
@@ -1,52 +1,52 @@
-__author__ = "Romilly Cocking"
-__copyright__ = "Copyright 2011 hamcrest.org"
-__license__ = "BSD, see License.txt"
-
-from hamcrest.core.base_matcher import BaseMatcher
-from hamcrest.core.helpers.hasmethod import hasmethod
-
-import six
-
-class StringContainsInOrder(BaseMatcher):
-
- def __init__(self, *substrings):
- for substring in substrings:
- if not isinstance(substring, six.string_types):
- raise TypeError(self.__class__.__name__
- + ' requires string arguments')
- self.substrings = substrings
-
- def _matches(self, item):
- if not hasmethod(item, 'find'):
- return False
- from_index = 0
- for substring in self.substrings:
- from_index = item.find(substring, from_index)
- if from_index == -1:
- return False
- return True
-
- def describe_to(self, description):
- description.append_list('a string containing ', ', ', ' in order',
- self.substrings)
-
-
-def string_contains_in_order(*substrings):
- """Matches if object is a string containing a given list of substrings in
- relative order.
-
- :param string1,...: A comma-separated list of strings.
-
- This matcher first checks whether the evaluated object is a string. If so,
- it checks whether it contains a given list of strings, in relative order to
- each other. The searches are performed starting from the beginning of the
- evaluated string.
-
- Example::
-
- string_contains_in_order("bc", "fg", "jkl")
-
- will match "abcdefghijklm".
-
- """
- return StringContainsInOrder(*substrings)
+__author__ = "Romilly Cocking"
+__copyright__ = "Copyright 2011 hamcrest.org"
+__license__ = "BSD, see License.txt"
+
+from hamcrest.core.base_matcher import BaseMatcher
+from hamcrest.core.helpers.hasmethod import hasmethod
+
+import six
+
+class StringContainsInOrder(BaseMatcher):
+
+ def __init__(self, *substrings):
+ for substring in substrings:
+ if not isinstance(substring, six.string_types):
+ raise TypeError(self.__class__.__name__
+ + ' requires string arguments')
+ self.substrings = substrings
+
+ def _matches(self, item):
+ if not hasmethod(item, 'find'):
+ return False
+ from_index = 0
+ for substring in self.substrings:
+ from_index = item.find(substring, from_index)
+ if from_index == -1:
+ return False
+ return True
+
+ def describe_to(self, description):
+ description.append_list('a string containing ', ', ', ' in order',
+ self.substrings)
+
+
+def string_contains_in_order(*substrings):
+ """Matches if object is a string containing a given list of substrings in
+ relative order.
+
+ :param string1,...: A comma-separated list of strings.
+
+ This matcher first checks whether the evaluated object is a string. If so,
+ it checks whether it contains a given list of strings, in relative order to
+ each other. The searches are performed starting from the beginning of the
+ evaluated string.
+
+ Example::
+
+ string_contains_in_order("bc", "fg", "jkl")
+
+ will match "abcdefghijklm".
+
+ """
+ return StringContainsInOrder(*substrings)
diff --git a/contrib/python/setuptools/py2/pkg_resources/_vendor/pyparsing.py b/contrib/python/setuptools/py2/pkg_resources/_vendor/pyparsing.py
index 4aa30ee6b2..cf75e1e5fc 100644
--- a/contrib/python/setuptools/py2/pkg_resources/_vendor/pyparsing.py
+++ b/contrib/python/setuptools/py2/pkg_resources/_vendor/pyparsing.py
@@ -1,5742 +1,5742 @@
-# module pyparsing.py
-#
-# Copyright (c) 2003-2018 Paul T. McGuire
-#
-# 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__doc__ = \
-"""
-pyparsing module - Classes and methods to define and execute parsing grammars
-=============================================================================
-
-The pyparsing module is an alternative approach to creating and executing simple grammars,
-vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you
-don't need to learn a new syntax for defining grammars or matching expressions - the parsing module
-provides a library of classes that you use to construct the grammar directly in Python.
-
-Here is a program to parse "Hello, World!" (or any greeting of the form
-C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements
-(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to
-L{Literal} expressions)::
-
- from pyparsing import Word, alphas
-
- # define grammar of a greeting
- greet = Word(alphas) + "," + Word(alphas) + "!"
-
- hello = "Hello, World!"
- print (hello, "->", greet.parseString(hello))
-
-The program outputs the following::
-
- Hello, World! -> ['Hello', ',', 'World', '!']
-
-The Python representation of the grammar is quite readable, owing to the self-explanatory
-class names, and the use of '+', '|' and '^' operators.
-
-The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an
-object with named attributes.
-
-The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
- - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.)
- - quoted strings
- - embedded comments
-
-
-Getting Started -
------------------
-Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing
-classes inherit from. Use the docstrings for examples of how to:
- - construct literal match expressions from L{Literal} and L{CaselessLiteral} classes
- - construct character word-group expressions using the L{Word} class
- - see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes
- - use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones
- - associate names with your parsed results using L{ParserElement.setResultsName}
- - find some helpful expression short-cuts like L{delimitedList} and L{oneOf}
- - find more useful common expressions in the L{pyparsing_common} namespace class
-"""
-
-__version__ = "2.2.1"
-__versionTime__ = "18 Sep 2018 00:49 UTC"
-__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>"
-
-import string
-from weakref import ref as wkref
-import copy
-import sys
-import warnings
-import re
-import sre_constants
-import collections
-import pprint
-import traceback
-import types
-from datetime import datetime
-
-try:
- from _thread import RLock
-except ImportError:
- from threading import RLock
-
-try:
- # Python 3
- from collections.abc import Iterable
- from collections.abc import MutableMapping
-except ImportError:
- # Python 2.7
- from collections import Iterable
- from collections import MutableMapping
-
-try:
- from collections import OrderedDict as _OrderedDict
-except ImportError:
- try:
- from ordereddict import OrderedDict as _OrderedDict
- except ImportError:
- _OrderedDict = None
-
-#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) )
-
-__all__ = [
-'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty',
-'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal',
-'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or',
-'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException',
-'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException',
-'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter',
-'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore',
-'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col',
-'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString',
-'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums',
-'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno',
-'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral',
-'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables',
-'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity',
-'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd',
-'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute',
-'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass',
-'CloseMatch', 'tokenMap', 'pyparsing_common',
-]
-
-system_version = tuple(sys.version_info)[:3]
-PY_3 = system_version[0] == 3
-if PY_3:
- _MAX_INT = sys.maxsize
- basestring = str
- unichr = chr
- _ustr = str
-
- # build list of single arg builtins, that can be used as parse actions
- singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max]
-
-else:
- _MAX_INT = sys.maxint
- range = xrange
-
- def _ustr(obj):
- """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
- str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
- then < returns the unicode object | encodes it with the default encoding | ... >.
- """
- if isinstance(obj,unicode):
- return obj
-
- try:
- # If this works, then _ustr(obj) has the same behaviour as str(obj), so
- # it won't break any existing code.
- return str(obj)
-
- except UnicodeEncodeError:
- # Else encode it
- ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace')
- xmlcharref = Regex(r'&#\d+;')
- xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:])
- return xmlcharref.transformString(ret)
-
- # build list of single arg builtins, tolerant of Python version, that can be used as parse actions
- singleArgBuiltins = []
- import __builtin__
- for fname in "sum len sorted reversed list tuple set any all min max".split():
- try:
- singleArgBuiltins.append(getattr(__builtin__,fname))
- except AttributeError:
- continue
-
-_generatorType = type((y for y in range(1)))
-
-def _xml_escape(data):
- """Escape &, <, >, ", ', etc. in a string of data."""
-
- # ampersand must be replaced first
- from_symbols = '&><"\''
- to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split())
- for from_,to_ in zip(from_symbols, to_symbols):
- data = data.replace(from_, to_)
- return data
-
-class _Constants(object):
- pass
-
-alphas = string.ascii_uppercase + string.ascii_lowercase
-nums = "0123456789"
-hexnums = nums + "ABCDEFabcdef"
-alphanums = alphas + nums
-_bslash = chr(92)
-printables = "".join(c for c in string.printable if c not in string.whitespace)
-
-class ParseBaseException(Exception):
- """base exception class for all parsing runtime exceptions"""
- # Performance tuning: we construct a *lot* of these, so keep this
- # constructor as small and fast as possible
- def __init__( self, pstr, loc=0, msg=None, elem=None ):
- self.loc = loc
- if msg is None:
- self.msg = pstr
- self.pstr = ""
- else:
- self.msg = msg
- self.pstr = pstr
- self.parserElement = elem
- self.args = (pstr, loc, msg)
-
- @classmethod
- def _from_exception(cls, pe):
- """
- internal factory method to simplify creating one type of ParseException
- from another - avoids having __init__ signature conflicts among subclasses
- """
- return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement)
-
- def __getattr__( self, aname ):
- """supported attributes by name are:
- - lineno - returns the line number of the exception text
- - col - returns the column number of the exception text
- - line - returns the line containing the exception text
- """
- if( aname == "lineno" ):
- return lineno( self.loc, self.pstr )
- elif( aname in ("col", "column") ):
- return col( self.loc, self.pstr )
- elif( aname == "line" ):
- return line( self.loc, self.pstr )
- else:
- raise AttributeError(aname)
-
- def __str__( self ):
- return "%s (at char %d), (line:%d, col:%d)" % \
- ( self.msg, self.loc, self.lineno, self.column )
- def __repr__( self ):
- return _ustr(self)
- def markInputline( self, markerString = ">!<" ):
- """Extracts the exception line from the input string, and marks
- the location of the exception with a special symbol.
- """
- line_str = self.line
- line_column = self.column - 1
- if markerString:
- line_str = "".join((line_str[:line_column],
- markerString, line_str[line_column:]))
- return line_str.strip()
- def __dir__(self):
- return "lineno col line".split() + dir(type(self))
-
-class ParseException(ParseBaseException):
- """
- Exception thrown when parse expressions don't match class;
- supported attributes by name are:
- - lineno - returns the line number of the exception text
- - col - returns the column number of the exception text
- - line - returns the line containing the exception text
-
- Example::
- try:
- Word(nums).setName("integer").parseString("ABC")
- except ParseException as pe:
- print(pe)
- print("column: {}".format(pe.col))
-
- prints::
- Expected integer (at char 0), (line:1, col:1)
- column: 1
- """
- pass
-
-class ParseFatalException(ParseBaseException):
- """user-throwable exception thrown when inconsistent parse content
- is found; stops all parsing immediately"""
- pass
-
-class ParseSyntaxException(ParseFatalException):
- """just like L{ParseFatalException}, but thrown internally when an
- L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop
- immediately because an unbacktrackable syntax error has been found"""
- pass
-
-#~ class ReparseException(ParseBaseException):
- #~ """Experimental class - parse actions can raise this exception to cause
- #~ pyparsing to reparse the input string:
- #~ - with a modified input string, and/or
- #~ - with a modified start location
- #~ Set the values of the ReparseException in the constructor, and raise the
- #~ exception in a parse action to cause pyparsing to use the new string/location.
- #~ Setting the values as None causes no change to be made.
- #~ """
- #~ def __init_( self, newstring, restartLoc ):
- #~ self.newParseText = newstring
- #~ self.reparseLoc = restartLoc
-
-class RecursiveGrammarException(Exception):
- """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive"""
- def __init__( self, parseElementList ):
- self.parseElementTrace = parseElementList
-
- def __str__( self ):
- return "RecursiveGrammarException: %s" % self.parseElementTrace
-
-class _ParseResultsWithOffset(object):
- def __init__(self,p1,p2):
- self.tup = (p1,p2)
- def __getitem__(self,i):
- return self.tup[i]
- def __repr__(self):
- return repr(self.tup[0])
- def setOffset(self,i):
- self.tup = (self.tup[0],i)
-
-class ParseResults(object):
- """
- Structured parse results, to provide multiple means of access to the parsed data:
- - as a list (C{len(results)})
- - by list index (C{results[0], results[1]}, etc.)
- - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName})
-
- Example::
- integer = Word(nums)
- date_str = (integer.setResultsName("year") + '/'
- + integer.setResultsName("month") + '/'
- + integer.setResultsName("day"))
- # equivalent form:
- # date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- # parseString returns a ParseResults object
- result = date_str.parseString("1999/12/31")
-
- def test(s, fn=repr):
- print("%s -> %s" % (s, fn(eval(s))))
- test("list(result)")
- test("result[0]")
- test("result['month']")
- test("result.day")
- test("'month' in result")
- test("'minutes' in result")
- test("result.dump()", str)
- prints::
- list(result) -> ['1999', '/', '12', '/', '31']
- result[0] -> '1999'
- result['month'] -> '12'
- result.day -> '31'
- 'month' in result -> True
- 'minutes' in result -> False
- result.dump() -> ['1999', '/', '12', '/', '31']
- - day: 31
- - month: 12
- - year: 1999
- """
- def __new__(cls, toklist=None, name=None, asList=True, modal=True ):
- if isinstance(toklist, cls):
- return toklist
- retobj = object.__new__(cls)
- retobj.__doinit = True
- return retobj
-
- # Performance tuning: we construct a *lot* of these, so keep this
- # constructor as small and fast as possible
- def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ):
- if self.__doinit:
- self.__doinit = False
- self.__name = None
- self.__parent = None
- self.__accumNames = {}
- self.__asList = asList
- self.__modal = modal
- if toklist is None:
- toklist = []
- if isinstance(toklist, list):
- self.__toklist = toklist[:]
- elif isinstance(toklist, _generatorType):
- self.__toklist = list(toklist)
- else:
- self.__toklist = [toklist]
- self.__tokdict = dict()
-
- if name is not None and name:
- if not modal:
- self.__accumNames[name] = 0
- if isinstance(name,int):
- name = _ustr(name) # will always return a str, but use _ustr for consistency
- self.__name = name
- if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])):
- if isinstance(toklist,basestring):
- toklist = [ toklist ]
- if asList:
- if isinstance(toklist,ParseResults):
- self[name] = _ParseResultsWithOffset(toklist.copy(),0)
- else:
- self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0)
- self[name].__name = name
- else:
- try:
- self[name] = toklist[0]
- except (KeyError,TypeError,IndexError):
- self[name] = toklist
-
- def __getitem__( self, i ):
- if isinstance( i, (int,slice) ):
- return self.__toklist[i]
- else:
- if i not in self.__accumNames:
- return self.__tokdict[i][-1][0]
- else:
- return ParseResults([ v[0] for v in self.__tokdict[i] ])
-
- def __setitem__( self, k, v, isinstance=isinstance ):
- if isinstance(v,_ParseResultsWithOffset):
- self.__tokdict[k] = self.__tokdict.get(k,list()) + [v]
- sub = v[0]
- elif isinstance(k,(int,slice)):
- self.__toklist[k] = v
- sub = v
- else:
- self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)]
- sub = v
- if isinstance(sub,ParseResults):
- sub.__parent = wkref(self)
-
- def __delitem__( self, i ):
- if isinstance(i,(int,slice)):
- mylen = len( self.__toklist )
- del self.__toklist[i]
-
- # convert int to slice
- if isinstance(i, int):
- if i < 0:
- i += mylen
- i = slice(i, i+1)
- # get removed indices
- removed = list(range(*i.indices(mylen)))
- removed.reverse()
- # fixup indices in token dictionary
- for name,occurrences in self.__tokdict.items():
- for j in removed:
- for k, (value, position) in enumerate(occurrences):
- occurrences[k] = _ParseResultsWithOffset(value, position - (position > j))
- else:
- del self.__tokdict[i]
-
- def __contains__( self, k ):
- return k in self.__tokdict
-
- def __len__( self ): return len( self.__toklist )
- def __bool__(self): return ( not not self.__toklist )
- __nonzero__ = __bool__
- def __iter__( self ): return iter( self.__toklist )
- def __reversed__( self ): return iter( self.__toklist[::-1] )
- def _iterkeys( self ):
- if hasattr(self.__tokdict, "iterkeys"):
- return self.__tokdict.iterkeys()
- else:
- return iter(self.__tokdict)
-
- def _itervalues( self ):
- return (self[k] for k in self._iterkeys())
-
- def _iteritems( self ):
- return ((k, self[k]) for k in self._iterkeys())
-
- if PY_3:
- keys = _iterkeys
- """Returns an iterator of all named result keys (Python 3.x only)."""
-
- values = _itervalues
- """Returns an iterator of all named result values (Python 3.x only)."""
-
- items = _iteritems
- """Returns an iterator of all named result key-value tuples (Python 3.x only)."""
-
- else:
- iterkeys = _iterkeys
- """Returns an iterator of all named result keys (Python 2.x only)."""
-
- itervalues = _itervalues
- """Returns an iterator of all named result values (Python 2.x only)."""
-
- iteritems = _iteritems
- """Returns an iterator of all named result key-value tuples (Python 2.x only)."""
-
- def keys( self ):
- """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.iterkeys())
-
- def values( self ):
- """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.itervalues())
-
- def items( self ):
- """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.iteritems())
-
- def haskeys( self ):
- """Since keys() returns an iterator, this method is helpful in bypassing
- code that looks for the existence of any defined results names."""
- return bool(self.__tokdict)
-
- def pop( self, *args, **kwargs):
- """
- Removes and returns item at specified index (default=C{last}).
- Supports both C{list} and C{dict} semantics for C{pop()}. If passed no
- argument or an integer argument, it will use C{list} semantics
- and pop tokens from the list of parsed tokens. If passed a
- non-integer argument (most likely a string), it will use C{dict}
- semantics and pop the corresponding value from any defined
- results names. A second default return value argument is
- supported, just as in C{dict.pop()}.
-
- Example::
- def remove_first(tokens):
- tokens.pop(0)
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
- print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321']
-
- label = Word(alphas)
- patt = label("LABEL") + OneOrMore(Word(nums))
- print(patt.parseString("AAB 123 321").dump())
-
- # Use pop() in a parse action to remove named result (note that corresponding value is not
- # removed from list form of results)
- def remove_LABEL(tokens):
- tokens.pop("LABEL")
- return tokens
- patt.addParseAction(remove_LABEL)
- print(patt.parseString("AAB 123 321").dump())
- prints::
- ['AAB', '123', '321']
- - LABEL: AAB
-
- ['AAB', '123', '321']
- """
- if not args:
- args = [-1]
- for k,v in kwargs.items():
- if k == 'default':
- args = (args[0], v)
- else:
- raise TypeError("pop() got an unexpected keyword argument '%s'" % k)
- if (isinstance(args[0], int) or
- len(args) == 1 or
- args[0] in self):
- index = args[0]
- ret = self[index]
- del self[index]
- return ret
- else:
- defaultvalue = args[1]
- return defaultvalue
-
- def get(self, key, defaultValue=None):
- """
- Returns named result matching the given key, or if there is no
- such name, then returns the given C{defaultValue} or C{None} if no
- C{defaultValue} is specified.
-
- Similar to C{dict.get()}.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString("1999/12/31")
- print(result.get("year")) # -> '1999'
- print(result.get("hour", "not specified")) # -> 'not specified'
- print(result.get("hour")) # -> None
- """
- if key in self:
- return self[key]
- else:
- return defaultValue
-
- def insert( self, index, insStr ):
- """
- Inserts new element at location index in the list of parsed tokens.
-
- Similar to C{list.insert()}.
-
- Example::
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
-
- # use a parse action to insert the parse location in the front of the parsed results
- def insert_locn(locn, tokens):
- tokens.insert(0, locn)
- print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321']
- """
- self.__toklist.insert(index, insStr)
- # fixup indices in token dictionary
- for name,occurrences in self.__tokdict.items():
- for k, (value, position) in enumerate(occurrences):
- occurrences[k] = _ParseResultsWithOffset(value, position + (position > index))
-
- def append( self, item ):
- """
- Add single element to end of ParseResults list of elements.
-
- Example::
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
-
- # use a parse action to compute the sum of the parsed integers, and add it to the end
- def append_sum(tokens):
- tokens.append(sum(map(int, tokens)))
- print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444]
- """
- self.__toklist.append(item)
-
- def extend( self, itemseq ):
- """
- Add sequence of elements to end of ParseResults list of elements.
-
- Example::
- patt = OneOrMore(Word(alphas))
-
- # use a parse action to append the reverse of the matched strings, to make a palindrome
- def make_palindrome(tokens):
- tokens.extend(reversed([t[::-1] for t in tokens]))
- return ''.join(tokens)
- print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl'
- """
- if isinstance(itemseq, ParseResults):
- self += itemseq
- else:
- self.__toklist.extend(itemseq)
-
- def clear( self ):
- """
- Clear all elements and results names.
- """
- del self.__toklist[:]
- self.__tokdict.clear()
-
- def __getattr__( self, name ):
- try:
- return self[name]
- except KeyError:
- return ""
-
- if name in self.__tokdict:
- if name not in self.__accumNames:
- return self.__tokdict[name][-1][0]
- else:
- return ParseResults([ v[0] for v in self.__tokdict[name] ])
- else:
- return ""
-
- def __add__( self, other ):
- ret = self.copy()
- ret += other
- return ret
-
- def __iadd__( self, other ):
- if other.__tokdict:
- offset = len(self.__toklist)
- addoffset = lambda a: offset if a<0 else a+offset
- otheritems = other.__tokdict.items()
- otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) )
- for (k,vlist) in otheritems for v in vlist]
- for k,v in otherdictitems:
- self[k] = v
- if isinstance(v[0],ParseResults):
- v[0].__parent = wkref(self)
-
- self.__toklist += other.__toklist
- self.__accumNames.update( other.__accumNames )
- return self
-
- def __radd__(self, other):
- if isinstance(other,int) and other == 0:
- # useful for merging many ParseResults using sum() builtin
- return self.copy()
- else:
- # this may raise a TypeError - so be it
- return other + self
-
- def __repr__( self ):
- return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) )
-
- def __str__( self ):
- return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']'
-
- def _asStringList( self, sep='' ):
- out = []
- for item in self.__toklist:
- if out and sep:
- out.append(sep)
- if isinstance( item, ParseResults ):
- out += item._asStringList()
- else:
- out.append( _ustr(item) )
- return out
-
- def asList( self ):
- """
- Returns the parse results as a nested list of matching tokens, all converted to strings.
-
- Example::
- patt = OneOrMore(Word(alphas))
- result = patt.parseString("sldkj lsdkj sldkj")
- # even though the result prints in string-like form, it is actually a pyparsing ParseResults
- print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj']
-
- # Use asList() to create an actual list
- result_list = result.asList()
- print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj']
- """
- return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist]
-
- def asDict( self ):
- """
- Returns the named parse results as a nested dictionary.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString('12/31/1999')
- print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]})
-
- result_dict = result.asDict()
- print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'}
-
- # even though a ParseResults supports dict-like access, sometime you just need to have a dict
- import json
- print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable
- print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"}
- """
- if PY_3:
- item_fn = self.items
- else:
- item_fn = self.iteritems
-
- def toItem(obj):
- if isinstance(obj, ParseResults):
- if obj.haskeys():
- return obj.asDict()
- else:
- return [toItem(v) for v in obj]
- else:
- return obj
-
- return dict((k,toItem(v)) for k,v in item_fn())
-
- def copy( self ):
- """
- Returns a new copy of a C{ParseResults} object.
- """
- ret = ParseResults( self.__toklist )
- ret.__tokdict = self.__tokdict.copy()
- ret.__parent = self.__parent
- ret.__accumNames.update( self.__accumNames )
- ret.__name = self.__name
- return ret
-
- def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ):
- """
- (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names.
- """
- nl = "\n"
- out = []
- namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items()
- for v in vlist)
- nextLevelIndent = indent + " "
-
- # collapse out indents if formatting is not desired
- if not formatted:
- indent = ""
- nextLevelIndent = ""
- nl = ""
-
- selfTag = None
- if doctag is not None:
- selfTag = doctag
- else:
- if self.__name:
- selfTag = self.__name
-
- if not selfTag:
- if namedItemsOnly:
- return ""
- else:
- selfTag = "ITEM"
-
- out += [ nl, indent, "<", selfTag, ">" ]
-
- for i,res in enumerate(self.__toklist):
- if isinstance(res,ParseResults):
- if i in namedItems:
- out += [ res.asXML(namedItems[i],
- namedItemsOnly and doctag is None,
- nextLevelIndent,
- formatted)]
- else:
- out += [ res.asXML(None,
- namedItemsOnly and doctag is None,
- nextLevelIndent,
- formatted)]
- else:
- # individual token, see if there is a name for it
- resTag = None
- if i in namedItems:
- resTag = namedItems[i]
- if not resTag:
- if namedItemsOnly:
- continue
- else:
- resTag = "ITEM"
- xmlBodyText = _xml_escape(_ustr(res))
- out += [ nl, nextLevelIndent, "<", resTag, ">",
- xmlBodyText,
- "</", resTag, ">" ]
-
- out += [ nl, indent, "</", selfTag, ">" ]
- return "".join(out)
-
- def __lookup(self,sub):
- for k,vlist in self.__tokdict.items():
- for v,loc in vlist:
- if sub is v:
- return k
- return None
-
- def getName(self):
- r"""
- Returns the results name for this token expression. Useful when several
- different expressions might match at a particular location.
-
- Example::
- integer = Word(nums)
- ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d")
- house_number_expr = Suppress('#') + Word(nums, alphanums)
- user_data = (Group(house_number_expr)("house_number")
- | Group(ssn_expr)("ssn")
- | Group(integer)("age"))
- user_info = OneOrMore(user_data)
-
- result = user_info.parseString("22 111-22-3333 #221B")
- for item in result:
- print(item.getName(), ':', item[0])
- prints::
- age : 22
- ssn : 111-22-3333
- house_number : 221B
- """
- if self.__name:
- return self.__name
- elif self.__parent:
- par = self.__parent()
- if par:
- return par.__lookup(self)
- else:
- return None
- elif (len(self) == 1 and
- len(self.__tokdict) == 1 and
- next(iter(self.__tokdict.values()))[0][1] in (0,-1)):
- return next(iter(self.__tokdict.keys()))
- else:
- return None
-
- def dump(self, indent='', depth=0, full=True):
- """
- Diagnostic method for listing out the contents of a C{ParseResults}.
- Accepts an optional C{indent} argument so that this string can be embedded
- in a nested display of other data.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString('12/31/1999')
- print(result.dump())
- prints::
- ['12', '/', '31', '/', '1999']
- - day: 1999
- - month: 31
- - year: 12
- """
- out = []
- NL = '\n'
- out.append( indent+_ustr(self.asList()) )
- if full:
- if self.haskeys():
- items = sorted((str(k), v) for k,v in self.items())
- for k,v in items:
- if out:
- out.append(NL)
- out.append( "%s%s- %s: " % (indent,(' '*depth), k) )
- if isinstance(v,ParseResults):
- if v:
- out.append( v.dump(indent,depth+1) )
- else:
- out.append(_ustr(v))
- else:
- out.append(repr(v))
- elif any(isinstance(vv,ParseResults) for vv in self):
- v = self
- for i,vv in enumerate(v):
- if isinstance(vv,ParseResults):
- out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) ))
- else:
- out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv)))
-
- return "".join(out)
-
- def pprint(self, *args, **kwargs):
- """
- Pretty-printer for parsed results as a list, using the C{pprint} module.
- Accepts additional positional or keyword args as defined for the
- C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint})
-
- Example::
- ident = Word(alphas, alphanums)
- num = Word(nums)
- func = Forward()
- term = ident | num | Group('(' + func + ')')
- func <<= ident + Group(Optional(delimitedList(term)))
- result = func.parseString("fna a,b,(fnb c,d,200),100")
- result.pprint(width=40)
- prints::
- ['fna',
- ['a',
- 'b',
- ['(', 'fnb', ['c', 'd', '200'], ')'],
- '100']]
- """
- pprint.pprint(self.asList(), *args, **kwargs)
-
- # add support for pickle protocol
- def __getstate__(self):
- return ( self.__toklist,
- ( self.__tokdict.copy(),
- self.__parent is not None and self.__parent() or None,
- self.__accumNames,
- self.__name ) )
-
- def __setstate__(self,state):
- self.__toklist = state[0]
- (self.__tokdict,
- par,
- inAccumNames,
- self.__name) = state[1]
- self.__accumNames = {}
- self.__accumNames.update(inAccumNames)
- if par is not None:
- self.__parent = wkref(par)
- else:
- self.__parent = None
-
- def __getnewargs__(self):
- return self.__toklist, self.__name, self.__asList, self.__modal
-
- def __dir__(self):
- return (dir(type(self)) + list(self.keys()))
-
-MutableMapping.register(ParseResults)
-
-def col (loc,strg):
- """Returns current column within a string, counting newlines as line separators.
- The first column is number 1.
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
- """
- s = strg
- return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc)
-
-def lineno(loc,strg):
- """Returns current line number within a string, counting newlines as line separators.
- The first line is number 1.
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
- """
- return strg.count("\n",0,loc) + 1
-
-def line( loc, strg ):
- """Returns the line of text containing loc within a string, counting newlines as line separators.
- """
- lastCR = strg.rfind("\n", 0, loc)
- nextCR = strg.find("\n", loc)
- if nextCR >= 0:
- return strg[lastCR+1:nextCR]
- else:
- return strg[lastCR+1:]
-
-def _defaultStartDebugAction( instring, loc, expr ):
- print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )))
-
-def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ):
- print ("Matched " + _ustr(expr) + " -> " + str(toks.asList()))
-
-def _defaultExceptionDebugAction( instring, loc, expr, exc ):
- print ("Exception raised:" + _ustr(exc))
-
-def nullDebugAction(*args):
- """'Do-nothing' debug action, to suppress debugging output during parsing."""
- pass
-
-# Only works on Python 3.x - nonlocal is toxic to Python 2 installs
-#~ 'decorator to trim function calls to match the arity of the target'
-#~ def _trim_arity(func, maxargs=3):
- #~ if func in singleArgBuiltins:
- #~ return lambda s,l,t: func(t)
- #~ limit = 0
- #~ foundArity = False
- #~ def wrapper(*args):
- #~ nonlocal limit,foundArity
- #~ while 1:
- #~ try:
- #~ ret = func(*args[limit:])
- #~ foundArity = True
- #~ return ret
- #~ except TypeError:
- #~ if limit == maxargs or foundArity:
- #~ raise
- #~ limit += 1
- #~ continue
- #~ return wrapper
-
-# this version is Python 2.x-3.x cross-compatible
-'decorator to trim function calls to match the arity of the target'
-def _trim_arity(func, maxargs=2):
- if func in singleArgBuiltins:
- return lambda s,l,t: func(t)
- limit = [0]
- foundArity = [False]
-
- # traceback return data structure changed in Py3.5 - normalize back to plain tuples
- if system_version[:2] >= (3,5):
- def extract_stack(limit=0):
- # special handling for Python 3.5.0 - extra deep call stack by 1
- offset = -3 if system_version == (3,5,0) else -2
- frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset]
- return [frame_summary[:2]]
- def extract_tb(tb, limit=0):
- frames = traceback.extract_tb(tb, limit=limit)
- frame_summary = frames[-1]
- return [frame_summary[:2]]
- else:
- extract_stack = traceback.extract_stack
- extract_tb = traceback.extract_tb
-
- # synthesize what would be returned by traceback.extract_stack at the call to
- # user's parse action 'func', so that we don't incur call penalty at parse time
-
- LINE_DIFF = 6
- # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND
- # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!!
- this_line = extract_stack(limit=2)[-1]
- pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF)
-
- def wrapper(*args):
- while 1:
- try:
- ret = func(*args[limit[0]:])
- foundArity[0] = True
- return ret
- except TypeError:
- # re-raise TypeErrors if they did not come from our arity testing
- if foundArity[0]:
- raise
- else:
- try:
- tb = sys.exc_info()[-1]
- if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth:
- raise
- finally:
- del tb
-
- if limit[0] <= maxargs:
- limit[0] += 1
- continue
- raise
-
- # copy func name to wrapper for sensible debug output
- func_name = "<parse action>"
- try:
- func_name = getattr(func, '__name__',
- getattr(func, '__class__').__name__)
- except Exception:
- func_name = str(func)
- wrapper.__name__ = func_name
-
- return wrapper
-
-class ParserElement(object):
- """Abstract base level parser element class."""
- DEFAULT_WHITE_CHARS = " \n\t\r"
- verbose_stacktrace = False
-
- @staticmethod
- def setDefaultWhitespaceChars( chars ):
- r"""
- Overrides the default whitespace chars
-
- Example::
- # default whitespace chars are space, <TAB> and newline
- OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl']
-
- # change to just treat newline as significant
- ParserElement.setDefaultWhitespaceChars(" \t")
- OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def']
- """
- ParserElement.DEFAULT_WHITE_CHARS = chars
-
- @staticmethod
- def inlineLiteralsUsing(cls):
- """
- Set class to be used for inclusion of string literals into a parser.
-
- Example::
- # default literal class used is Literal
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
-
-
- # change to Suppress
- ParserElement.inlineLiteralsUsing(Suppress)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- date_str.parseString("1999/12/31") # -> ['1999', '12', '31']
- """
- ParserElement._literalStringClass = cls
-
- def __init__( self, savelist=False ):
- self.parseAction = list()
- self.failAction = None
- #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall
- self.strRepr = None
- self.resultsName = None
- self.saveAsList = savelist
- self.skipWhitespace = True
- self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
- self.copyDefaultWhiteChars = True
- self.mayReturnEmpty = False # used when checking for left-recursion
- self.keepTabs = False
- self.ignoreExprs = list()
- self.debug = False
- self.streamlined = False
- self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index
- self.errmsg = ""
- self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all)
- self.debugActions = ( None, None, None ) #custom debug actions
- self.re = None
- self.callPreparse = True # used to avoid redundant calls to preParse
- self.callDuringTry = False
-
- def copy( self ):
- """
- Make a copy of this C{ParserElement}. Useful for defining different parse actions
- for the same parsing pattern, using copies of the original parse element.
-
- Example::
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K")
- integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
-
- print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M"))
- prints::
- [5120, 100, 655360, 268435456]
- Equivalent form of C{expr.copy()} is just C{expr()}::
- integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
- """
- cpy = copy.copy( self )
- cpy.parseAction = self.parseAction[:]
- cpy.ignoreExprs = self.ignoreExprs[:]
- if self.copyDefaultWhiteChars:
- cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
- return cpy
-
- def setName( self, name ):
- """
- Define name for this expression, makes debugging and exception messages clearer.
-
- Example::
- Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1)
- Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1)
- """
- self.name = name
- self.errmsg = "Expected " + self.name
- if hasattr(self,"exception"):
- self.exception.msg = self.errmsg
- return self
-
- def setResultsName( self, name, listAllMatches=False ):
- """
- Define name for referencing matching tokens as a nested attribute
- of the returned parse results.
- NOTE: this returns a *copy* of the original C{ParserElement} object;
- this is so that the client can define a basic element, such as an
- integer, and reference it in multiple places with different names.
-
- You can also set results names using the abbreviated syntax,
- C{expr("name")} in place of C{expr.setResultsName("name")} -
- see L{I{__call__}<__call__>}.
-
- Example::
- date_str = (integer.setResultsName("year") + '/'
- + integer.setResultsName("month") + '/'
- + integer.setResultsName("day"))
-
- # equivalent form:
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
- """
- newself = self.copy()
- if name.endswith("*"):
- name = name[:-1]
- listAllMatches=True
- newself.resultsName = name
- newself.modalResults = not listAllMatches
- return newself
-
- def setBreak(self,breakFlag = True):
- """Method to invoke the Python pdb debugger when this element is
- about to be parsed. Set C{breakFlag} to True to enable, False to
- disable.
- """
- if breakFlag:
- _parseMethod = self._parse
- def breaker(instring, loc, doActions=True, callPreParse=True):
- import pdb
- pdb.set_trace()
- return _parseMethod( instring, loc, doActions, callPreParse )
- breaker._originalParseMethod = _parseMethod
- self._parse = breaker
- else:
- if hasattr(self._parse,"_originalParseMethod"):
- self._parse = self._parse._originalParseMethod
- return self
-
- def setParseAction( self, *fns, **kwargs ):
- """
- Define one or more actions to perform when successfully matching parse element definition.
- Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)},
- C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where:
- - s = the original string being parsed (see note below)
- - loc = the location of the matching substring
- - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object
- If the functions in fns modify the tokens, they can return them as the return
- value from fn, and the modified list of tokens will replace the original.
- Otherwise, fn does not need to return any value.
-
- Optional keyword arguments:
- - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{parseString}<parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
-
- Example::
- integer = Word(nums)
- date_str = integer + '/' + integer + '/' + integer
-
- date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
-
- # use parse action to convert to ints at parse time
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- date_str = integer + '/' + integer + '/' + integer
-
- # note that integer fields are now ints, not strings
- date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31]
- """
- self.parseAction = list(map(_trim_arity, list(fns)))
- self.callDuringTry = kwargs.get("callDuringTry", False)
- return self
-
- def addParseAction( self, *fns, **kwargs ):
- """
- Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}.
-
- See examples in L{I{copy}<copy>}.
- """
- self.parseAction += list(map(_trim_arity, list(fns)))
- self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
- return self
-
- def addCondition(self, *fns, **kwargs):
- """Add a boolean predicate function to expression's list of parse actions. See
- L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction},
- functions passed to C{addCondition} need to return boolean success/fail of the condition.
-
- Optional keyword arguments:
- - message = define a custom message to be used in the raised exception
- - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException
-
- Example::
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- year_int = integer.copy()
- year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later")
- date_str = year_int + '/' + integer + '/' + integer
-
- result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1)
- """
- msg = kwargs.get("message", "failed user-defined condition")
- exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException
- for fn in fns:
- def pa(s,l,t):
- if not bool(_trim_arity(fn)(s,l,t)):
- raise exc_type(s,l,msg)
- self.parseAction.append(pa)
- self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
- return self
-
- def setFailAction( self, fn ):
- """Define action to perform if parsing fails at this expression.
- Fail acton fn is a callable function that takes the arguments
- C{fn(s,loc,expr,err)} where:
- - s = string being parsed
- - loc = location where expression match was attempted and failed
- - expr = the parse expression that failed
- - err = the exception thrown
- The function returns no value. It may throw C{L{ParseFatalException}}
- if it is desired to stop parsing immediately."""
- self.failAction = fn
- return self
-
- def _skipIgnorables( self, instring, loc ):
- exprsFound = True
- while exprsFound:
- exprsFound = False
- for e in self.ignoreExprs:
- try:
- while 1:
- loc,dummy = e._parse( instring, loc )
- exprsFound = True
- except ParseException:
- pass
- return loc
-
- def preParse( self, instring, loc ):
- if self.ignoreExprs:
- loc = self._skipIgnorables( instring, loc )
-
- if self.skipWhitespace:
- wt = self.whiteChars
- instrlen = len(instring)
- while loc < instrlen and instring[loc] in wt:
- loc += 1
-
- return loc
-
- def parseImpl( self, instring, loc, doActions=True ):
- return loc, []
-
- def postParse( self, instring, loc, tokenlist ):
- return tokenlist
-
- #~ @profile
- def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
- debugging = ( self.debug ) #and doActions )
-
- if debugging or self.failAction:
- #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))
- if (self.debugActions[0] ):
- self.debugActions[0]( instring, loc, self )
- if callPreParse and self.callPreparse:
- preloc = self.preParse( instring, loc )
- else:
- preloc = loc
- tokensStart = preloc
- try:
- try:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
- except IndexError:
- raise ParseException( instring, len(instring), self.errmsg, self )
- except ParseBaseException as err:
- #~ print ("Exception raised:", err)
- if self.debugActions[2]:
- self.debugActions[2]( instring, tokensStart, self, err )
- if self.failAction:
- self.failAction( instring, tokensStart, self, err )
- raise
- else:
- if callPreParse and self.callPreparse:
- preloc = self.preParse( instring, loc )
- else:
- preloc = loc
- tokensStart = preloc
- if self.mayIndexError or preloc >= len(instring):
- try:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
- except IndexError:
- raise ParseException( instring, len(instring), self.errmsg, self )
- else:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
-
- tokens = self.postParse( instring, loc, tokens )
-
- retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults )
- if self.parseAction and (doActions or self.callDuringTry):
- if debugging:
- try:
- for fn in self.parseAction:
- tokens = fn( instring, tokensStart, retTokens )
- if tokens is not None:
- retTokens = ParseResults( tokens,
- self.resultsName,
- asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
- modal=self.modalResults )
- except ParseBaseException as err:
- #~ print "Exception raised in user parse action:", err
- if (self.debugActions[2] ):
- self.debugActions[2]( instring, tokensStart, self, err )
- raise
- else:
- for fn in self.parseAction:
- tokens = fn( instring, tokensStart, retTokens )
- if tokens is not None:
- retTokens = ParseResults( tokens,
- self.resultsName,
- asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
- modal=self.modalResults )
- if debugging:
- #~ print ("Matched",self,"->",retTokens.asList())
- if (self.debugActions[1] ):
- self.debugActions[1]( instring, tokensStart, loc, self, retTokens )
-
- return loc, retTokens
-
- def tryParse( self, instring, loc ):
- try:
- return self._parse( instring, loc, doActions=False )[0]
- except ParseFatalException:
- raise ParseException( instring, loc, self.errmsg, self)
-
- def canParseNext(self, instring, loc):
- try:
- self.tryParse(instring, loc)
- except (ParseException, IndexError):
- return False
- else:
- return True
-
- class _UnboundedCache(object):
- def __init__(self):
- cache = {}
- self.not_in_cache = not_in_cache = object()
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
-
- def clear(self):
- cache.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- if _OrderedDict is not None:
- class _FifoCache(object):
- def __init__(self, size):
- self.not_in_cache = not_in_cache = object()
-
- cache = _OrderedDict()
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
- while len(cache) > size:
- try:
- cache.popitem(False)
- except KeyError:
- pass
-
- def clear(self):
- cache.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- else:
- class _FifoCache(object):
- def __init__(self, size):
- self.not_in_cache = not_in_cache = object()
-
- cache = {}
- key_fifo = collections.deque([], size)
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
- while len(key_fifo) > size:
- cache.pop(key_fifo.popleft(), None)
- key_fifo.append(key)
-
- def clear(self):
- cache.clear()
- key_fifo.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- # argument cache for optimizing repeated calls when backtracking through recursive expressions
- packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail
- packrat_cache_lock = RLock()
- packrat_cache_stats = [0, 0]
-
- # this method gets repeatedly called during backtracking with the same arguments -
- # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression
- def _parseCache( self, instring, loc, doActions=True, callPreParse=True ):
- HIT, MISS = 0, 1
- lookup = (self, instring, loc, callPreParse, doActions)
- with ParserElement.packrat_cache_lock:
- cache = ParserElement.packrat_cache
- value = cache.get(lookup)
- if value is cache.not_in_cache:
- ParserElement.packrat_cache_stats[MISS] += 1
- try:
- value = self._parseNoCache(instring, loc, doActions, callPreParse)
- except ParseBaseException as pe:
- # cache a copy of the exception, without the traceback
- cache.set(lookup, pe.__class__(*pe.args))
- raise
- else:
- cache.set(lookup, (value[0], value[1].copy()))
- return value
- else:
- ParserElement.packrat_cache_stats[HIT] += 1
- if isinstance(value, Exception):
- raise value
- return (value[0], value[1].copy())
-
- _parse = _parseNoCache
-
- @staticmethod
- def resetCache():
- ParserElement.packrat_cache.clear()
- ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats)
-
- _packratEnabled = False
- @staticmethod
- def enablePackrat(cache_size_limit=128):
- """Enables "packrat" parsing, which adds memoizing to the parsing logic.
- Repeated parse attempts at the same string location (which happens
- often in many complex grammars) can immediately return a cached value,
- instead of re-executing parsing/validating code. Memoizing is done of
- both valid results and parsing exceptions.
-
- Parameters:
- - cache_size_limit - (default=C{128}) - if an integer value is provided
- will limit the size of the packrat cache; if None is passed, then
- the cache size will be unbounded; if 0 is passed, the cache will
- be effectively disabled.
-
- This speedup may break existing programs that use parse actions that
- have side-effects. For this reason, packrat parsing is disabled when
- you first import pyparsing. To activate the packrat feature, your
- program must call the class method C{ParserElement.enablePackrat()}. If
- your program uses C{psyco} to "compile as you go", you must call
- C{enablePackrat} before calling C{psyco.full()}. If you do not do this,
- Python will crash. For best results, call C{enablePackrat()} immediately
- after importing pyparsing.
-
- Example::
- import pyparsing
- pyparsing.ParserElement.enablePackrat()
- """
- if not ParserElement._packratEnabled:
- ParserElement._packratEnabled = True
- if cache_size_limit is None:
- ParserElement.packrat_cache = ParserElement._UnboundedCache()
- else:
- ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit)
- ParserElement._parse = ParserElement._parseCache
-
- def parseString( self, instring, parseAll=False ):
- """
- Execute the parse expression with the given string.
- This is the main interface to the client code, once the complete
- expression has been built.
-
- If you want the grammar to require that the entire input string be
- successfully parsed, then set C{parseAll} to True (equivalent to ending
- the grammar with C{L{StringEnd()}}).
-
- Note: C{parseString} implicitly calls C{expandtabs()} on the input string,
- in order to report proper column numbers in parse actions.
- If the input string contains tabs and
- the grammar uses parse actions that use the C{loc} argument to index into the
- string being parsed, you can ensure you have a consistent view of the input
- string by:
- - calling C{parseWithTabs} on your grammar before calling C{parseString}
- (see L{I{parseWithTabs}<parseWithTabs>})
- - define your parse action using the full C{(s,loc,toks)} signature, and
- reference the input string using the parse action's C{s} argument
- - explictly expand the tabs in your input string before calling
- C{parseString}
-
- Example::
- Word('a').parseString('aaaaabaaa') # -> ['aaaaa']
- Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text
- """
- ParserElement.resetCache()
- if not self.streamlined:
- self.streamline()
- #~ self.saveAsList = True
- for e in self.ignoreExprs:
- e.streamline()
- if not self.keepTabs:
- instring = instring.expandtabs()
- try:
- loc, tokens = self._parse( instring, 0 )
- if parseAll:
- loc = self.preParse( instring, loc )
- se = Empty() + StringEnd()
- se._parse( instring, loc )
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
- else:
- return tokens
-
- def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ):
- """
- Scan the input string for expression matches. Each match will return the
- matching tokens, start location, and end location. May be called with optional
- C{maxMatches} argument, to clip scanning after 'n' matches are found. If
- C{overlap} is specified, then overlapping matches will be reported.
-
- Note that the start and end locations are reported relative to the string
- being parsed. See L{I{parseString}<parseString>} for more information on parsing
- strings with embedded tabs.
-
- Example::
- source = "sldjf123lsdjjkf345sldkjf879lkjsfd987"
- print(source)
- for tokens,start,end in Word(alphas).scanString(source):
- print(' '*start + '^'*(end-start))
- print(' '*start + tokens[0])
-
- prints::
-
- sldjf123lsdjjkf345sldkjf879lkjsfd987
- ^^^^^
- sldjf
- ^^^^^^^
- lsdjjkf
- ^^^^^^
- sldkjf
- ^^^^^^
- lkjsfd
- """
- if not self.streamlined:
- self.streamline()
- for e in self.ignoreExprs:
- e.streamline()
-
- if not self.keepTabs:
- instring = _ustr(instring).expandtabs()
- instrlen = len(instring)
- loc = 0
- preparseFn = self.preParse
- parseFn = self._parse
- ParserElement.resetCache()
- matches = 0
- try:
- while loc <= instrlen and matches < maxMatches:
- try:
- preloc = preparseFn( instring, loc )
- nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
- except ParseException:
- loc = preloc+1
- else:
- if nextLoc > loc:
- matches += 1
- yield tokens, preloc, nextLoc
- if overlap:
- nextloc = preparseFn( instring, loc )
- if nextloc > loc:
- loc = nextLoc
- else:
- loc += 1
- else:
- loc = nextLoc
- else:
- loc = preloc+1
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def transformString( self, instring ):
- """
- Extension to C{L{scanString}}, to modify matching text with modified tokens that may
- be returned from a parse action. To use C{transformString}, define a grammar and
- attach a parse action to it that modifies the returned token list.
- Invoking C{transformString()} on a target string will then scan for matches,
- and replace the matched text patterns according to the logic in the parse
- action. C{transformString()} returns the resulting transformed string.
-
- Example::
- wd = Word(alphas)
- wd.setParseAction(lambda toks: toks[0].title())
-
- print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york."))
- Prints::
- Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York.
- """
- out = []
- lastE = 0
- # force preservation of <TAB>s, to minimize unwanted transformation of string, and to
- # keep string locs straight between transformString and scanString
- self.keepTabs = True
- try:
- for t,s,e in self.scanString( instring ):
- out.append( instring[lastE:s] )
- if t:
- if isinstance(t,ParseResults):
- out += t.asList()
- elif isinstance(t,list):
- out += t
- else:
- out.append(t)
- lastE = e
- out.append(instring[lastE:])
- out = [o for o in out if o]
- return "".join(map(_ustr,_flatten(out)))
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def searchString( self, instring, maxMatches=_MAX_INT ):
- """
- Another extension to C{L{scanString}}, simplifying the access to the tokens found
- to match the given parse expression. May be called with optional
- C{maxMatches} argument, to clip searching after 'n' matches are found.
-
- Example::
- # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters
- cap_word = Word(alphas.upper(), alphas.lower())
-
- print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))
-
- # the sum() builtin can be used to merge results into a single ParseResults object
- print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")))
- prints::
- [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']]
- ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity']
- """
- try:
- return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False):
- """
- Generator method to split a string using the given expression as a separator.
- May be called with optional C{maxsplit} argument, to limit the number of splits;
- and the optional C{includeSeparators} argument (default=C{False}), if the separating
- matching text should be included in the split results.
-
- Example::
- punc = oneOf(list(".,;:/-!?"))
- print(list(punc.split("This, this?, this sentence, is badly punctuated!")))
- prints::
- ['This', ' this', '', ' this sentence', ' is badly punctuated', '']
- """
- splits = 0
- last = 0
- for t,s,e in self.scanString(instring, maxMatches=maxsplit):
- yield instring[last:s]
- if includeSeparators:
- yield t[0]
- last = e
- yield instring[last:]
-
- def __add__(self, other ):
- """
- Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement
- converts them to L{Literal}s by default.
-
- Example::
- greet = Word(alphas) + "," + Word(alphas) + "!"
- hello = "Hello, World!"
- print (hello, "->", greet.parseString(hello))
- Prints::
- Hello, World! -> ['Hello', ',', 'World', '!']
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return And( [ self, other ] )
-
- def __radd__(self, other ):
- """
- Implementation of + operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other + self
-
- def __sub__(self, other):
- """
- Implementation of - operator, returns C{L{And}} with error stop
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return self + And._ErrorStop() + other
-
- def __rsub__(self, other ):
- """
- Implementation of - operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other - self
-
- def __mul__(self,other):
- """
- Implementation of * operator, allows use of C{expr * 3} in place of
- C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer
- tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples
- may also include C{None} as in:
- - C{expr*(n,None)} or C{expr*(n,)} is equivalent
- to C{expr*n + L{ZeroOrMore}(expr)}
- (read as "at least n instances of C{expr}")
- - C{expr*(None,n)} is equivalent to C{expr*(0,n)}
- (read as "0 to n instances of C{expr}")
- - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)}
- - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)}
-
- Note that C{expr*(None,n)} does not raise an exception if
- more than n exprs exist in the input stream; that is,
- C{expr*(None,n)} does not enforce a maximum number of expr
- occurrences. If this behavior is desired, then write
- C{expr*(None,n) + ~expr}
- """
- if isinstance(other,int):
- minElements, optElements = other,0
- elif isinstance(other,tuple):
- other = (other + (None, None))[:2]
- if other[0] is None:
- other = (0, other[1])
- if isinstance(other[0],int) and other[1] is None:
- if other[0] == 0:
- return ZeroOrMore(self)
- if other[0] == 1:
- return OneOrMore(self)
- else:
- return self*other[0] + ZeroOrMore(self)
- elif isinstance(other[0],int) and isinstance(other[1],int):
- minElements, optElements = other
- optElements -= minElements
- else:
- raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1]))
- else:
- raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other))
-
- if minElements < 0:
- raise ValueError("cannot multiply ParserElement by negative value")
- if optElements < 0:
- raise ValueError("second tuple value must be greater or equal to first tuple value")
- if minElements == optElements == 0:
- raise ValueError("cannot multiply ParserElement by 0 or (0,0)")
-
- if (optElements):
- def makeOptionalList(n):
- if n>1:
- return Optional(self + makeOptionalList(n-1))
- else:
- return Optional(self)
- if minElements:
- if minElements == 1:
- ret = self + makeOptionalList(optElements)
- else:
- ret = And([self]*minElements) + makeOptionalList(optElements)
- else:
- ret = makeOptionalList(optElements)
- else:
- if minElements == 1:
- ret = self
- else:
- ret = And([self]*minElements)
- return ret
-
- def __rmul__(self, other):
- return self.__mul__(other)
-
- def __or__(self, other ):
- """
- Implementation of | operator - returns C{L{MatchFirst}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return MatchFirst( [ self, other ] )
-
- def __ror__(self, other ):
- """
- Implementation of | operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other | self
-
- def __xor__(self, other ):
- """
- Implementation of ^ operator - returns C{L{Or}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return Or( [ self, other ] )
-
- def __rxor__(self, other ):
- """
- Implementation of ^ operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other ^ self
-
- def __and__(self, other ):
- """
- Implementation of & operator - returns C{L{Each}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return Each( [ self, other ] )
-
- def __rand__(self, other ):
- """
- Implementation of & operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other & self
-
- def __invert__( self ):
- """
- Implementation of ~ operator - returns C{L{NotAny}}
- """
- return NotAny( self )
-
- def __call__(self, name=None):
- """
- Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}.
-
- If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be
- passed as C{True}.
-
- If C{name} is omitted, same as calling C{L{copy}}.
-
- Example::
- # these are equivalent
- userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno")
- userdata = Word(alphas)("name") + Word(nums+"-")("socsecno")
- """
- if name is not None:
- return self.setResultsName(name)
- else:
- return self.copy()
-
- def suppress( self ):
- """
- Suppresses the output of this C{ParserElement}; useful to keep punctuation from
- cluttering up returned output.
- """
- return Suppress( self )
-
- def leaveWhitespace( self ):
- """
- Disables the skipping of whitespace before matching the characters in the
- C{ParserElement}'s defined pattern. This is normally only used internally by
- the pyparsing module, but may be needed in some whitespace-sensitive grammars.
- """
- self.skipWhitespace = False
- return self
-
- def setWhitespaceChars( self, chars ):
- """
- Overrides the default whitespace chars
- """
- self.skipWhitespace = True
- self.whiteChars = chars
- self.copyDefaultWhiteChars = False
- return self
-
- def parseWithTabs( self ):
- """
- Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string.
- Must be called before C{parseString} when the input grammar contains elements that
- match C{<TAB>} characters.
- """
- self.keepTabs = True
- return self
-
- def ignore( self, other ):
- """
- Define expression to be ignored (e.g., comments) while doing pattern
- matching; may be called repeatedly, to define multiple comment or other
- ignorable patterns.
-
- Example::
- patt = OneOrMore(Word(alphas))
- patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj']
-
- patt.ignore(cStyleComment)
- patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd']
- """
- if isinstance(other, basestring):
- other = Suppress(other)
-
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- self.ignoreExprs.append(other)
- else:
- self.ignoreExprs.append( Suppress( other.copy() ) )
- return self
-
- def setDebugActions( self, startAction, successAction, exceptionAction ):
- """
- Enable display of debugging messages while doing pattern matching.
- """
- self.debugActions = (startAction or _defaultStartDebugAction,
- successAction or _defaultSuccessDebugAction,
- exceptionAction or _defaultExceptionDebugAction)
- self.debug = True
- return self
-
- def setDebug( self, flag=True ):
- """
- Enable display of debugging messages while doing pattern matching.
- Set C{flag} to True to enable, False to disable.
-
- Example::
- wd = Word(alphas).setName("alphaword")
- integer = Word(nums).setName("numword")
- term = wd | integer
-
- # turn on debugging for wd
- wd.setDebug()
-
- OneOrMore(term).parseString("abc 123 xyz 890")
-
- prints::
- Match alphaword at loc 0(1,1)
- Matched alphaword -> ['abc']
- Match alphaword at loc 3(1,4)
- Exception raised:Expected alphaword (at char 4), (line:1, col:5)
- Match alphaword at loc 7(1,8)
- Matched alphaword -> ['xyz']
- Match alphaword at loc 11(1,12)
- Exception raised:Expected alphaword (at char 12), (line:1, col:13)
- Match alphaword at loc 15(1,16)
- Exception raised:Expected alphaword (at char 15), (line:1, col:16)
-
- The output shown is that produced by the default debug actions - custom debug actions can be
- specified using L{setDebugActions}. Prior to attempting
- to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"}
- is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"}
- message is shown. Also note the use of L{setName} to assign a human-readable name to the expression,
- which makes debugging and exception messages easier to understand - for instance, the default
- name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}.
- """
- if flag:
- self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction )
- else:
- self.debug = False
- return self
-
- def __str__( self ):
- return self.name
-
- def __repr__( self ):
- return _ustr(self)
-
- def streamline( self ):
- self.streamlined = True
- self.strRepr = None
- return self
-
- def checkRecursion( self, parseElementList ):
- pass
-
- def validate( self, validateTrace=[] ):
- """
- Check defined expressions for valid structure, check for infinite recursive definitions.
- """
- self.checkRecursion( [] )
-
- def parseFile( self, file_or_filename, parseAll=False ):
- """
- Execute the parse expression on the given file or filename.
- If a filename is specified (instead of a file object),
- the entire file is opened, read, and closed before parsing.
- """
- try:
- file_contents = file_or_filename.read()
- except AttributeError:
- with open(file_or_filename, "r") as f:
- file_contents = f.read()
- try:
- return self.parseString(file_contents, parseAll)
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def __eq__(self,other):
- if isinstance(other, ParserElement):
- return self is other or vars(self) == vars(other)
- elif isinstance(other, basestring):
- return self.matches(other)
- else:
- return super(ParserElement,self)==other
-
- def __ne__(self,other):
- return not (self == other)
-
- def __hash__(self):
- return hash(id(self))
-
- def __req__(self,other):
- return self == other
-
- def __rne__(self,other):
- return not (self == other)
-
- def matches(self, testString, parseAll=True):
- """
- Method for quick testing of a parser against a test string. Good for simple
- inline microtests of sub expressions while building up larger parser.
-
- Parameters:
- - testString - to test against this expression for a match
- - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
-
- Example::
- expr = Word(nums)
- assert expr.matches("100")
- """
- try:
- self.parseString(_ustr(testString), parseAll=parseAll)
- return True
- except ParseBaseException:
- return False
-
- def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False):
- """
- Execute the parse expression on a series of test strings, showing each
- test, the parsed results or where the parse failed. Quick and easy way to
- run a parse expression against a list of sample strings.
-
- Parameters:
- - tests - a list of separate test strings, or a multiline string of test strings
- - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
- - comment - (default=C{'#'}) - expression for indicating embedded comments in the test
- string; pass None to disable comment filtering
- - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline;
- if False, only dump nested list
- - printResults - (default=C{True}) prints test output to stdout
- - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing
-
- Returns: a (success, results) tuple, where success indicates that all tests succeeded
- (or failed if C{failureTests} is True), and the results contain a list of lines of each
- test's output
-
- Example::
- number_expr = pyparsing_common.number.copy()
-
- result = number_expr.runTests('''
- # unsigned integer
- 100
- # negative integer
- -100
- # float with scientific notation
- 6.02e23
- # integer with scientific notation
- 1e-12
- ''')
- print("Success" if result[0] else "Failed!")
-
- result = number_expr.runTests('''
- # stray character
- 100Z
- # missing leading digit before '.'
- -.100
- # too many '.'
- 3.14.159
- ''', failureTests=True)
- print("Success" if result[0] else "Failed!")
- prints::
- # unsigned integer
- 100
- [100]
-
- # negative integer
- -100
- [-100]
-
- # float with scientific notation
- 6.02e23
- [6.02e+23]
-
- # integer with scientific notation
- 1e-12
- [1e-12]
-
- Success
-
- # stray character
- 100Z
- ^
- FAIL: Expected end of text (at char 3), (line:1, col:4)
-
- # missing leading digit before '.'
- -.100
- ^
- FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1)
-
- # too many '.'
- 3.14.159
- ^
- FAIL: Expected end of text (at char 4), (line:1, col:5)
-
- Success
-
- Each test string must be on a single line. If you want to test a string that spans multiple
- lines, create a test like this::
-
- expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines")
-
- (Note that this is a raw string literal, you must include the leading 'r'.)
- """
- if isinstance(tests, basestring):
- tests = list(map(str.strip, tests.rstrip().splitlines()))
- if isinstance(comment, basestring):
- comment = Literal(comment)
- allResults = []
- comments = []
- success = True
- for t in tests:
- if comment is not None and comment.matches(t, False) or comments and not t:
- comments.append(t)
- continue
- if not t:
- continue
- out = ['\n'.join(comments), t]
- comments = []
- try:
- t = t.replace(r'\n','\n')
- result = self.parseString(t, parseAll=parseAll)
- out.append(result.dump(full=fullDump))
- success = success and not failureTests
- except ParseBaseException as pe:
- fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else ""
- if '\n' in t:
- out.append(line(pe.loc, t))
- out.append(' '*(col(pe.loc,t)-1) + '^' + fatal)
- else:
- out.append(' '*pe.loc + '^' + fatal)
- out.append("FAIL: " + str(pe))
- success = success and failureTests
- result = pe
- except Exception as exc:
- out.append("FAIL-EXCEPTION: " + str(exc))
- success = success and failureTests
- result = exc
-
- if printResults:
- if fullDump:
- out.append('')
- print('\n'.join(out))
-
- allResults.append((t, result))
-
- return success, allResults
-
-
-class Token(ParserElement):
- """
- Abstract C{ParserElement} subclass, for defining atomic matching patterns.
- """
- def __init__( self ):
- super(Token,self).__init__( savelist=False )
-
-
-class Empty(Token):
- """
- An empty token, will always match.
- """
- def __init__( self ):
- super(Empty,self).__init__()
- self.name = "Empty"
- self.mayReturnEmpty = True
- self.mayIndexError = False
-
-
-class NoMatch(Token):
- """
- A token that will never match.
- """
- def __init__( self ):
- super(NoMatch,self).__init__()
- self.name = "NoMatch"
- self.mayReturnEmpty = True
- self.mayIndexError = False
- self.errmsg = "Unmatchable token"
-
- def parseImpl( self, instring, loc, doActions=True ):
- raise ParseException(instring, loc, self.errmsg, self)
-
-
-class Literal(Token):
- """
- Token to exactly match a specified string.
-
- Example::
- Literal('blah').parseString('blah') # -> ['blah']
- Literal('blah').parseString('blahfooblah') # -> ['blah']
- Literal('blah').parseString('bla') # -> Exception: Expected "blah"
-
- For case-insensitive matching, use L{CaselessLiteral}.
-
- For keyword matching (force word break before and after the matched string),
- use L{Keyword} or L{CaselessKeyword}.
- """
- def __init__( self, matchString ):
- super(Literal,self).__init__()
- self.match = matchString
- self.matchLen = len(matchString)
- try:
- self.firstMatchChar = matchString[0]
- except IndexError:
- warnings.warn("null string passed to Literal; use Empty() instead",
- SyntaxWarning, stacklevel=2)
- self.__class__ = Empty
- self.name = '"%s"' % _ustr(self.match)
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = False
- self.mayIndexError = False
-
- # Performance tuning: this routine gets called a *lot*
- # if this is a single character match string and the first character matches,
- # short-circuit as quickly as possible, and avoid calling startswith
- #~ @profile
- def parseImpl( self, instring, loc, doActions=True ):
- if (instring[loc] == self.firstMatchChar and
- (self.matchLen==1 or instring.startswith(self.match,loc)) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-_L = Literal
-ParserElement._literalStringClass = Literal
-
-class Keyword(Token):
- """
- Token to exactly match a specified string as a keyword, that is, it must be
- immediately followed by a non-keyword character. Compare with C{L{Literal}}:
- - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}.
- - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'}
- Accepts two optional constructor arguments in addition to the keyword string:
- - C{identChars} is a string of characters that would be valid identifier characters,
- defaulting to all alphanumerics + "_" and "$"
- - C{caseless} allows case-insensitive matching, default is C{False}.
-
- Example::
- Keyword("start").parseString("start") # -> ['start']
- Keyword("start").parseString("starting") # -> Exception
-
- For case-insensitive matching, use L{CaselessKeyword}.
- """
- DEFAULT_KEYWORD_CHARS = alphanums+"_$"
-
- def __init__( self, matchString, identChars=None, caseless=False ):
- super(Keyword,self).__init__()
- if identChars is None:
- identChars = Keyword.DEFAULT_KEYWORD_CHARS
- self.match = matchString
- self.matchLen = len(matchString)
- try:
- self.firstMatchChar = matchString[0]
- except IndexError:
- warnings.warn("null string passed to Keyword; use Empty() instead",
- SyntaxWarning, stacklevel=2)
- self.name = '"%s"' % self.match
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = False
- self.mayIndexError = False
- self.caseless = caseless
- if caseless:
- self.caselessmatch = matchString.upper()
- identChars = identChars.upper()
- self.identChars = set(identChars)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.caseless:
- if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and
- (loc == 0 or instring[loc-1].upper() not in self.identChars) ):
- return loc+self.matchLen, self.match
- else:
- if (instring[loc] == self.firstMatchChar and
- (self.matchLen==1 or instring.startswith(self.match,loc)) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and
- (loc == 0 or instring[loc-1] not in self.identChars) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-
- def copy(self):
- c = super(Keyword,self).copy()
- c.identChars = Keyword.DEFAULT_KEYWORD_CHARS
- return c
-
- @staticmethod
- def setDefaultKeywordChars( chars ):
- """Overrides the default Keyword chars
- """
- Keyword.DEFAULT_KEYWORD_CHARS = chars
-
-class CaselessLiteral(Literal):
- """
- Token to match a specified string, ignoring case of letters.
- Note: the matched results will always be in the case of the given
- match string, NOT the case of the input text.
-
- Example::
- OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD']
-
- (Contrast with example for L{CaselessKeyword}.)
- """
- def __init__( self, matchString ):
- super(CaselessLiteral,self).__init__( matchString.upper() )
- # Preserve the defining literal.
- self.returnString = matchString
- self.name = "'%s'" % self.returnString
- self.errmsg = "Expected " + self.name
-
- def parseImpl( self, instring, loc, doActions=True ):
- if instring[ loc:loc+self.matchLen ].upper() == self.match:
- return loc+self.matchLen, self.returnString
- raise ParseException(instring, loc, self.errmsg, self)
-
-class CaselessKeyword(Keyword):
- """
- Caseless version of L{Keyword}.
-
- Example::
- OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD']
-
- (Contrast with example for L{CaselessLiteral}.)
- """
- def __init__( self, matchString, identChars=None ):
- super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True )
-
- def parseImpl( self, instring, loc, doActions=True ):
- if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-
-class CloseMatch(Token):
- """
- A variation on L{Literal} which matches "close" matches, that is,
- strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters:
- - C{match_string} - string to be matched
- - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match
-
- The results from a successful parse will contain the matched text from the input string and the following named results:
- - C{mismatches} - a list of the positions within the match_string where mismatches were found
- - C{original} - the original match_string used to compare against the input string
-
- If C{mismatches} is an empty list, then the match was an exact match.
-
- Example::
- patt = CloseMatch("ATCATCGAATGGA")
- patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']})
- patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1)
-
- # exact match
- patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']})
-
- # close match allowing up to 2 mismatches
- patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2)
- patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']})
- """
- def __init__(self, match_string, maxMismatches=1):
- super(CloseMatch,self).__init__()
- self.name = match_string
- self.match_string = match_string
- self.maxMismatches = maxMismatches
- self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches)
- self.mayIndexError = False
- self.mayReturnEmpty = False
-
- def parseImpl( self, instring, loc, doActions=True ):
- start = loc
- instrlen = len(instring)
- maxloc = start + len(self.match_string)
-
- if maxloc <= instrlen:
- match_string = self.match_string
- match_stringloc = 0
- mismatches = []
- maxMismatches = self.maxMismatches
-
- for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)):
- src,mat = s_m
- if src != mat:
- mismatches.append(match_stringloc)
- if len(mismatches) > maxMismatches:
- break
- else:
- loc = match_stringloc + 1
- results = ParseResults([instring[start:loc]])
- results['original'] = self.match_string
- results['mismatches'] = mismatches
- return loc, results
-
- raise ParseException(instring, loc, self.errmsg, self)
-
-
-class Word(Token):
- """
- Token for matching words composed of allowed character sets.
- Defined with string containing all allowed initial characters,
- an optional string containing allowed body characters (if omitted,
- defaults to the initial character set), and an optional minimum,
- maximum, and/or exact length. The default value for C{min} is 1 (a
- minimum value < 1 is not valid); the default values for C{max} and C{exact}
- are 0, meaning no maximum or exact length restriction. An optional
- C{excludeChars} parameter can list characters that might be found in
- the input C{bodyChars} string; useful to define a word of all printables
- except for one or two characters, for instance.
-
- L{srange} is useful for defining custom character set strings for defining
- C{Word} expressions, using range notation from regular expression character sets.
-
- A common mistake is to use C{Word} to match a specific literal string, as in
- C{Word("Address")}. Remember that C{Word} uses the string argument to define
- I{sets} of matchable characters. This expression would match "Add", "AAA",
- "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'.
- To match an exact literal string, use L{Literal} or L{Keyword}.
-
- pyparsing includes helper strings for building Words:
- - L{alphas}
- - L{nums}
- - L{alphanums}
- - L{hexnums}
- - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.)
- - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.)
- - L{printables} (any non-whitespace character)
-
- Example::
- # a word composed of digits
- integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9"))
-
- # a word with a leading capital, and zero or more lowercase
- capital_word = Word(alphas.upper(), alphas.lower())
-
- # hostnames are alphanumeric, with leading alpha, and '-'
- hostname = Word(alphas, alphanums+'-')
-
- # roman numeral (not a strict parser, accepts invalid mix of characters)
- roman = Word("IVXLCDM")
-
- # any string of non-whitespace characters, except for ','
- csv_value = Word(printables, excludeChars=",")
- """
- def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ):
- super(Word,self).__init__()
- if excludeChars:
- initChars = ''.join(c for c in initChars if c not in excludeChars)
- if bodyChars:
- bodyChars = ''.join(c for c in bodyChars if c not in excludeChars)
- self.initCharsOrig = initChars
- self.initChars = set(initChars)
- if bodyChars :
- self.bodyCharsOrig = bodyChars
- self.bodyChars = set(bodyChars)
- else:
- self.bodyCharsOrig = initChars
- self.bodyChars = set(initChars)
-
- self.maxSpecified = max > 0
-
- if min < 1:
- raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted")
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.asKeyword = asKeyword
-
- if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0):
- if self.bodyCharsOrig == self.initCharsOrig:
- self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig)
- elif len(self.initCharsOrig) == 1:
- self.reString = "%s[%s]*" % \
- (re.escape(self.initCharsOrig),
- _escapeRegexRangeChars(self.bodyCharsOrig),)
- else:
- self.reString = "[%s][%s]*" % \
- (_escapeRegexRangeChars(self.initCharsOrig),
- _escapeRegexRangeChars(self.bodyCharsOrig),)
- if self.asKeyword:
- self.reString = r"\b"+self.reString+r"\b"
- try:
- self.re = re.compile( self.reString )
- except Exception:
- self.re = None
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.re:
- result = self.re.match(instring,loc)
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- return loc, result.group()
-
- if not(instring[ loc ] in self.initChars):
- raise ParseException(instring, loc, self.errmsg, self)
-
- start = loc
- loc += 1
- instrlen = len(instring)
- bodychars = self.bodyChars
- maxloc = start + self.maxLen
- maxloc = min( maxloc, instrlen )
- while loc < maxloc and instring[loc] in bodychars:
- loc += 1
-
- throwException = False
- if loc - start < self.minLen:
- throwException = True
- if self.maxSpecified and loc < instrlen and instring[loc] in bodychars:
- throwException = True
- if self.asKeyword:
- if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars):
- throwException = True
-
- if throwException:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
- def __str__( self ):
- try:
- return super(Word,self).__str__()
- except Exception:
- pass
-
-
- if self.strRepr is None:
-
- def charsAsStr(s):
- if len(s)>4:
- return s[:4]+"..."
- else:
- return s
-
- if ( self.initCharsOrig != self.bodyCharsOrig ):
- self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) )
- else:
- self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig)
-
- return self.strRepr
-
-
-class Regex(Token):
- r"""
- Token for matching strings that match a given regular expression.
- Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
- If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as
- named parse results.
-
- Example::
- realnum = Regex(r"[+-]?\d+\.\d*")
- date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)')
- # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
- roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})")
- """
- compiledREtype = type(re.compile("[A-Z]"))
- def __init__( self, pattern, flags=0):
- """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags."""
- super(Regex,self).__init__()
-
- if isinstance(pattern, basestring):
- if not pattern:
- warnings.warn("null string passed to Regex; use Empty() instead",
- SyntaxWarning, stacklevel=2)
-
- self.pattern = pattern
- self.flags = flags
-
- try:
- self.re = re.compile(self.pattern, self.flags)
- self.reString = self.pattern
- except sre_constants.error:
- warnings.warn("invalid pattern (%s) passed to Regex" % pattern,
- SyntaxWarning, stacklevel=2)
- raise
-
- elif isinstance(pattern, Regex.compiledREtype):
- self.re = pattern
- self.pattern = \
- self.reString = str(pattern)
- self.flags = flags
-
- else:
- raise ValueError("Regex may only be constructed with a string or a compiled RE object")
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- result = self.re.match(instring,loc)
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- d = result.groupdict()
- ret = ParseResults(result.group())
- if d:
- for k in d:
- ret[k] = d[k]
- return loc,ret
-
- def __str__( self ):
- try:
- return super(Regex,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "Re:(%s)" % repr(self.pattern)
-
- return self.strRepr
-
-
-class QuotedString(Token):
- r"""
- Token for matching strings that are delimited by quoting characters.
-
- Defined with the following parameters:
- - quoteChar - string of one or more characters defining the quote delimiting string
- - escChar - character to escape quotes, typically backslash (default=C{None})
- - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None})
- - multiline - boolean indicating whether quotes can span multiple lines (default=C{False})
- - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True})
- - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar)
- - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True})
-
- Example::
- qs = QuotedString('"')
- print(qs.searchString('lsjdf "This is the quote" sldjf'))
- complex_qs = QuotedString('{{', endQuoteChar='}}')
- print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf'))
- sql_qs = QuotedString('"', escQuote='""')
- print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf'))
- prints::
- [['This is the quote']]
- [['This is the "quote"']]
- [['This is the quote with "embedded" quotes']]
- """
- def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True):
- super(QuotedString,self).__init__()
-
- # remove white space from quote chars - wont work anyway
- quoteChar = quoteChar.strip()
- if not quoteChar:
- warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
- raise SyntaxError()
-
- if endQuoteChar is None:
- endQuoteChar = quoteChar
- else:
- endQuoteChar = endQuoteChar.strip()
- if not endQuoteChar:
- warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
- raise SyntaxError()
-
- self.quoteChar = quoteChar
- self.quoteCharLen = len(quoteChar)
- self.firstQuoteChar = quoteChar[0]
- self.endQuoteChar = endQuoteChar
- self.endQuoteCharLen = len(endQuoteChar)
- self.escChar = escChar
- self.escQuote = escQuote
- self.unquoteResults = unquoteResults
- self.convertWhitespaceEscapes = convertWhitespaceEscapes
-
- if multiline:
- self.flags = re.MULTILINE | re.DOTALL
- self.pattern = r'%s(?:[^%s%s]' % \
- ( re.escape(self.quoteChar),
- _escapeRegexRangeChars(self.endQuoteChar[0]),
- (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
- else:
- self.flags = 0
- self.pattern = r'%s(?:[^%s\n\r%s]' % \
- ( re.escape(self.quoteChar),
- _escapeRegexRangeChars(self.endQuoteChar[0]),
- (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
- if len(self.endQuoteChar) > 1:
- self.pattern += (
- '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]),
- _escapeRegexRangeChars(self.endQuoteChar[i]))
- for i in range(len(self.endQuoteChar)-1,0,-1)) + ')'
- )
- if escQuote:
- self.pattern += (r'|(?:%s)' % re.escape(escQuote))
- if escChar:
- self.pattern += (r'|(?:%s.)' % re.escape(escChar))
- self.escCharReplacePattern = re.escape(self.escChar)+"(.)"
- self.pattern += (r')*%s' % re.escape(self.endQuoteChar))
-
- try:
- self.re = re.compile(self.pattern, self.flags)
- self.reString = self.pattern
- except sre_constants.error:
- warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern,
- SyntaxWarning, stacklevel=2)
- raise
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- ret = result.group()
-
- if self.unquoteResults:
-
- # strip off quotes
- ret = ret[self.quoteCharLen:-self.endQuoteCharLen]
-
- if isinstance(ret,basestring):
- # replace escaped whitespace
- if '\\' in ret and self.convertWhitespaceEscapes:
- ws_map = {
- r'\t' : '\t',
- r'\n' : '\n',
- r'\f' : '\f',
- r'\r' : '\r',
- }
- for wslit,wschar in ws_map.items():
- ret = ret.replace(wslit, wschar)
-
- # replace escaped characters
- if self.escChar:
- ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret)
-
- # replace escaped quotes
- if self.escQuote:
- ret = ret.replace(self.escQuote, self.endQuoteChar)
-
- return loc, ret
-
- def __str__( self ):
- try:
- return super(QuotedString,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar)
-
- return self.strRepr
-
-
-class CharsNotIn(Token):
- """
- Token for matching words composed of characters I{not} in a given set (will
- include whitespace in matched characters if not listed in the provided exclusion set - see example).
- Defined with string containing all disallowed characters, and an optional
- minimum, maximum, and/or exact length. The default value for C{min} is 1 (a
- minimum value < 1 is not valid); the default values for C{max} and C{exact}
- are 0, meaning no maximum or exact length restriction.
-
- Example::
- # define a comma-separated-value as anything that is not a ','
- csv_value = CharsNotIn(',')
- print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213"))
- prints::
- ['dkls', 'lsdkjf', 's12 34', '@!#', '213']
- """
- def __init__( self, notChars, min=1, max=0, exact=0 ):
- super(CharsNotIn,self).__init__()
- self.skipWhitespace = False
- self.notChars = notChars
-
- if min < 1:
- raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted")
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = ( self.minLen == 0 )
- self.mayIndexError = False
-
- def parseImpl( self, instring, loc, doActions=True ):
- if instring[loc] in self.notChars:
- raise ParseException(instring, loc, self.errmsg, self)
-
- start = loc
- loc += 1
- notchars = self.notChars
- maxlen = min( start+self.maxLen, len(instring) )
- while loc < maxlen and \
- (instring[loc] not in notchars):
- loc += 1
-
- if loc - start < self.minLen:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
- def __str__( self ):
- try:
- return super(CharsNotIn, self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- if len(self.notChars) > 4:
- self.strRepr = "!W:(%s...)" % self.notChars[:4]
- else:
- self.strRepr = "!W:(%s)" % self.notChars
-
- return self.strRepr
-
-class White(Token):
- """
- Special matching class for matching whitespace. Normally, whitespace is ignored
- by pyparsing grammars. This class is included when some whitespace structures
- are significant. Define with a string containing the whitespace characters to be
- matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments,
- as defined for the C{L{Word}} class.
- """
- whiteStrs = {
- " " : "<SPC>",
- "\t": "<TAB>",
- "\n": "<LF>",
- "\r": "<CR>",
- "\f": "<FF>",
- }
- def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0):
- super(White,self).__init__()
- self.matchWhite = ws
- self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) )
- #~ self.leaveWhitespace()
- self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite))
- self.mayReturnEmpty = True
- self.errmsg = "Expected " + self.name
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- def parseImpl( self, instring, loc, doActions=True ):
- if not(instring[ loc ] in self.matchWhite):
- raise ParseException(instring, loc, self.errmsg, self)
- start = loc
- loc += 1
- maxloc = start + self.maxLen
- maxloc = min( maxloc, len(instring) )
- while loc < maxloc and instring[loc] in self.matchWhite:
- loc += 1
-
- if loc - start < self.minLen:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
-
-class _PositionToken(Token):
- def __init__( self ):
- super(_PositionToken,self).__init__()
- self.name=self.__class__.__name__
- self.mayReturnEmpty = True
- self.mayIndexError = False
-
-class GoToColumn(_PositionToken):
- """
- Token to advance to a specific column of input text; useful for tabular report scraping.
- """
- def __init__( self, colno ):
- super(GoToColumn,self).__init__()
- self.col = colno
-
- def preParse( self, instring, loc ):
- if col(loc,instring) != self.col:
- instrlen = len(instring)
- if self.ignoreExprs:
- loc = self._skipIgnorables( instring, loc )
- while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col :
- loc += 1
- return loc
-
- def parseImpl( self, instring, loc, doActions=True ):
- thiscol = col( loc, instring )
- if thiscol > self.col:
- raise ParseException( instring, loc, "Text not in expected column", self )
- newloc = loc + self.col - thiscol
- ret = instring[ loc: newloc ]
- return newloc, ret
-
-
-class LineStart(_PositionToken):
- """
- Matches if current position is at the beginning of a line within the parse string
-
- Example::
-
- test = '''\
- AAA this line
- AAA and this line
- AAA but not this one
- B AAA and definitely not this one
- '''
-
- for t in (LineStart() + 'AAA' + restOfLine).searchString(test):
- print(t)
-
- Prints::
- ['AAA', ' this line']
- ['AAA', ' and this line']
-
- """
- def __init__( self ):
- super(LineStart,self).__init__()
- self.errmsg = "Expected start of line"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if col(loc, instring) == 1:
- return loc, []
- raise ParseException(instring, loc, self.errmsg, self)
-
-class LineEnd(_PositionToken):
- """
- Matches if current position is at the end of a line within the parse string
- """
- def __init__( self ):
- super(LineEnd,self).__init__()
- self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") )
- self.errmsg = "Expected end of line"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc<len(instring):
- if instring[loc] == "\n":
- return loc+1, "\n"
- else:
- raise ParseException(instring, loc, self.errmsg, self)
- elif loc == len(instring):
- return loc+1, []
- else:
- raise ParseException(instring, loc, self.errmsg, self)
-
-class StringStart(_PositionToken):
- """
- Matches if current position is at the beginning of the parse string
- """
- def __init__( self ):
- super(StringStart,self).__init__()
- self.errmsg = "Expected start of text"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc != 0:
- # see if entire string up to here is just whitespace and ignoreables
- if loc != self.preParse( instring, 0 ):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-class StringEnd(_PositionToken):
- """
- Matches if current position is at the end of the parse string
- """
- def __init__( self ):
- super(StringEnd,self).__init__()
- self.errmsg = "Expected end of text"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc < len(instring):
- raise ParseException(instring, loc, self.errmsg, self)
- elif loc == len(instring):
- return loc+1, []
- elif loc > len(instring):
- return loc, []
- else:
- raise ParseException(instring, loc, self.errmsg, self)
-
-class WordStart(_PositionToken):
- """
- Matches if the current position is at the beginning of a Word, and
- is not preceded by any character in a given set of C{wordChars}
- (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
- use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of
- the string being parsed, or at the beginning of a line.
- """
- def __init__(self, wordChars = printables):
- super(WordStart,self).__init__()
- self.wordChars = set(wordChars)
- self.errmsg = "Not at the start of a word"
-
- def parseImpl(self, instring, loc, doActions=True ):
- if loc != 0:
- if (instring[loc-1] in self.wordChars or
- instring[loc] not in self.wordChars):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-class WordEnd(_PositionToken):
- """
- Matches if the current position is at the end of a Word, and
- is not followed by any character in a given set of C{wordChars}
- (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
- use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of
- the string being parsed, or at the end of a line.
- """
- def __init__(self, wordChars = printables):
- super(WordEnd,self).__init__()
- self.wordChars = set(wordChars)
- self.skipWhitespace = False
- self.errmsg = "Not at the end of a word"
-
- def parseImpl(self, instring, loc, doActions=True ):
- instrlen = len(instring)
- if instrlen>0 and loc<instrlen:
- if (instring[loc] in self.wordChars or
- instring[loc-1] not in self.wordChars):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-
-class ParseExpression(ParserElement):
- """
- Abstract subclass of ParserElement, for combining and post-processing parsed tokens.
- """
- def __init__( self, exprs, savelist = False ):
- super(ParseExpression,self).__init__(savelist)
- if isinstance( exprs, _generatorType ):
- exprs = list(exprs)
-
- if isinstance( exprs, basestring ):
- self.exprs = [ ParserElement._literalStringClass( exprs ) ]
- elif isinstance( exprs, Iterable ):
- exprs = list(exprs)
- # if sequence of strings provided, wrap with Literal
- if all(isinstance(expr, basestring) for expr in exprs):
- exprs = map(ParserElement._literalStringClass, exprs)
- self.exprs = list(exprs)
- else:
- try:
- self.exprs = list( exprs )
- except TypeError:
- self.exprs = [ exprs ]
- self.callPreparse = False
-
- def __getitem__( self, i ):
- return self.exprs[i]
-
- def append( self, other ):
- self.exprs.append( other )
- self.strRepr = None
- return self
-
- def leaveWhitespace( self ):
- """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on
- all contained expressions."""
- self.skipWhitespace = False
- self.exprs = [ e.copy() for e in self.exprs ]
- for e in self.exprs:
- e.leaveWhitespace()
- return self
-
- def ignore( self, other ):
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- super( ParseExpression, self).ignore( other )
- for e in self.exprs:
- e.ignore( self.ignoreExprs[-1] )
- else:
- super( ParseExpression, self).ignore( other )
- for e in self.exprs:
- e.ignore( self.ignoreExprs[-1] )
- return self
-
- def __str__( self ):
- try:
- return super(ParseExpression,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) )
- return self.strRepr
-
- def streamline( self ):
- super(ParseExpression,self).streamline()
-
- for e in self.exprs:
- e.streamline()
-
- # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d )
- # but only if there are no parse actions or resultsNames on the nested And's
- # (likewise for Or's and MatchFirst's)
- if ( len(self.exprs) == 2 ):
- other = self.exprs[0]
- if ( isinstance( other, self.__class__ ) and
- not(other.parseAction) and
- other.resultsName is None and
- not other.debug ):
- self.exprs = other.exprs[:] + [ self.exprs[1] ]
- self.strRepr = None
- self.mayReturnEmpty |= other.mayReturnEmpty
- self.mayIndexError |= other.mayIndexError
-
- other = self.exprs[-1]
- if ( isinstance( other, self.__class__ ) and
- not(other.parseAction) and
- other.resultsName is None and
- not other.debug ):
- self.exprs = self.exprs[:-1] + other.exprs[:]
- self.strRepr = None
- self.mayReturnEmpty |= other.mayReturnEmpty
- self.mayIndexError |= other.mayIndexError
-
- self.errmsg = "Expected " + _ustr(self)
-
- return self
-
- def setResultsName( self, name, listAllMatches=False ):
- ret = super(ParseExpression,self).setResultsName(name,listAllMatches)
- return ret
-
- def validate( self, validateTrace=[] ):
- tmp = validateTrace[:]+[self]
- for e in self.exprs:
- e.validate(tmp)
- self.checkRecursion( [] )
-
- def copy(self):
- ret = super(ParseExpression,self).copy()
- ret.exprs = [e.copy() for e in self.exprs]
- return ret
-
-class And(ParseExpression):
- """
- Requires all given C{ParseExpression}s to be found in the given order.
- Expressions may be separated by whitespace.
- May be constructed using the C{'+'} operator.
- May also be constructed using the C{'-'} operator, which will suppress backtracking.
-
- Example::
- integer = Word(nums)
- name_expr = OneOrMore(Word(alphas))
-
- expr = And([integer("id"),name_expr("name"),integer("age")])
- # more easily written as:
- expr = integer("id") + name_expr("name") + integer("age")
- """
-
- class _ErrorStop(Empty):
- def __init__(self, *args, **kwargs):
- super(And._ErrorStop,self).__init__(*args, **kwargs)
- self.name = '-'
- self.leaveWhitespace()
-
- def __init__( self, exprs, savelist = True ):
- super(And,self).__init__(exprs, savelist)
- self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
- self.setWhitespaceChars( self.exprs[0].whiteChars )
- self.skipWhitespace = self.exprs[0].skipWhitespace
- self.callPreparse = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- # pass False as last arg to _parse for first element, since we already
- # pre-parsed the string as part of our And pre-parsing
- loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
- errorStop = False
- for e in self.exprs[1:]:
- if isinstance(e, And._ErrorStop):
- errorStop = True
- continue
- if errorStop:
- try:
- loc, exprtokens = e._parse( instring, loc, doActions )
- except ParseSyntaxException:
- raise
- except ParseBaseException as pe:
- pe.__traceback__ = None
- raise ParseSyntaxException._from_exception(pe)
- except IndexError:
- raise ParseSyntaxException(instring, len(instring), self.errmsg, self)
- else:
- loc, exprtokens = e._parse( instring, loc, doActions )
- if exprtokens or exprtokens.haskeys():
- resultlist += exprtokens
- return loc, resultlist
-
- def __iadd__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #And( [ self, other ] )
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
- if not e.mayReturnEmpty:
- break
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
-
-class Or(ParseExpression):
- """
- Requires that at least one C{ParseExpression} is found.
- If two expressions match, the expression that matches the longest string will be used.
- May be constructed using the C{'^'} operator.
-
- Example::
- # construct Or using '^' operator
-
- number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums))
- print(number.searchString("123 3.1416 789"))
- prints::
- [['123'], ['3.1416'], ['789']]
- """
- def __init__( self, exprs, savelist = False ):
- super(Or,self).__init__(exprs, savelist)
- if self.exprs:
- self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
- else:
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- maxExcLoc = -1
- maxException = None
- matches = []
- for e in self.exprs:
- try:
- loc2 = e.tryParse( instring, loc )
- except ParseException as err:
- err.__traceback__ = None
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
- except IndexError:
- if len(instring) > maxExcLoc:
- maxException = ParseException(instring,len(instring),e.errmsg,self)
- maxExcLoc = len(instring)
- else:
- # save match among all matches, to retry longest to shortest
- matches.append((loc2, e))
-
- if matches:
- matches.sort(key=lambda x: -x[0])
- for _,e in matches:
- try:
- return e._parse( instring, loc, doActions )
- except ParseException as err:
- err.__traceback__ = None
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
-
- if maxException is not None:
- maxException.msg = self.errmsg
- raise maxException
- else:
- raise ParseException(instring, loc, "no defined alternatives to match", self)
-
-
- def __ixor__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #Or( [ self, other ] )
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class MatchFirst(ParseExpression):
- """
- Requires that at least one C{ParseExpression} is found.
- If two expressions match, the first one listed is the one that will match.
- May be constructed using the C{'|'} operator.
-
- Example::
- # construct MatchFirst using '|' operator
-
- # watch the order of expressions to match
- number = Word(nums) | Combine(Word(nums) + '.' + Word(nums))
- print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']]
-
- # put more selective expression first
- number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums)
- print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']]
- """
- def __init__( self, exprs, savelist = False ):
- super(MatchFirst,self).__init__(exprs, savelist)
- if self.exprs:
- self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
- else:
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- maxExcLoc = -1
- maxException = None
- for e in self.exprs:
- try:
- ret = e._parse( instring, loc, doActions )
- return ret
- except ParseException as err:
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
- except IndexError:
- if len(instring) > maxExcLoc:
- maxException = ParseException(instring,len(instring),e.errmsg,self)
- maxExcLoc = len(instring)
-
- # only got here if no expression matched, raise exception for match that made it the furthest
- else:
- if maxException is not None:
- maxException.msg = self.errmsg
- raise maxException
- else:
- raise ParseException(instring, loc, "no defined alternatives to match", self)
-
- def __ior__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #MatchFirst( [ self, other ] )
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class Each(ParseExpression):
- """
- Requires all given C{ParseExpression}s to be found, but in any order.
- Expressions may be separated by whitespace.
- May be constructed using the C{'&'} operator.
-
- Example::
- color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN")
- shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON")
- integer = Word(nums)
- shape_attr = "shape:" + shape_type("shape")
- posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn")
- color_attr = "color:" + color("color")
- size_attr = "size:" + integer("size")
-
- # use Each (using operator '&') to accept attributes in any order
- # (shape and posn are required, color and size are optional)
- shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr)
-
- shape_spec.runTests('''
- shape: SQUARE color: BLACK posn: 100, 120
- shape: CIRCLE size: 50 color: BLUE posn: 50,80
- color:GREEN size:20 shape:TRIANGLE posn:20,40
- '''
- )
- prints::
- shape: SQUARE color: BLACK posn: 100, 120
- ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']]
- - color: BLACK
- - posn: ['100', ',', '120']
- - x: 100
- - y: 120
- - shape: SQUARE
-
-
- shape: CIRCLE size: 50 color: BLUE posn: 50,80
- ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']]
- - color: BLUE
- - posn: ['50', ',', '80']
- - x: 50
- - y: 80
- - shape: CIRCLE
- - size: 50
-
-
- color: GREEN size: 20 shape: TRIANGLE posn: 20,40
- ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']]
- - color: GREEN
- - posn: ['20', ',', '40']
- - x: 20
- - y: 40
- - shape: TRIANGLE
- - size: 20
- """
- def __init__( self, exprs, savelist = True ):
- super(Each,self).__init__(exprs, savelist)
- self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
- self.skipWhitespace = True
- self.initExprGroups = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.initExprGroups:
- self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional))
- opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ]
- opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)]
- self.optionals = opt1 + opt2
- self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ]
- self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ]
- self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ]
- self.required += self.multirequired
- self.initExprGroups = False
- tmpLoc = loc
- tmpReqd = self.required[:]
- tmpOpt = self.optionals[:]
- matchOrder = []
-
- keepMatching = True
- while keepMatching:
- tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired
- failed = []
- for e in tmpExprs:
- try:
- tmpLoc = e.tryParse( instring, tmpLoc )
- except ParseException:
- failed.append(e)
- else:
- matchOrder.append(self.opt1map.get(id(e),e))
- if e in tmpReqd:
- tmpReqd.remove(e)
- elif e in tmpOpt:
- tmpOpt.remove(e)
- if len(failed) == len(tmpExprs):
- keepMatching = False
-
- if tmpReqd:
- missing = ", ".join(_ustr(e) for e in tmpReqd)
- raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing )
-
- # add any unmatched Optionals, in case they have default values defined
- matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt]
-
- resultlist = []
- for e in matchOrder:
- loc,results = e._parse(instring,loc,doActions)
- resultlist.append(results)
-
- finalResults = sum(resultlist, ParseResults([]))
- return loc, finalResults
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class ParseElementEnhance(ParserElement):
- """
- Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens.
- """
- def __init__( self, expr, savelist=False ):
- super(ParseElementEnhance,self).__init__(savelist)
- if isinstance( expr, basestring ):
- if issubclass(ParserElement._literalStringClass, Token):
- expr = ParserElement._literalStringClass(expr)
- else:
- expr = ParserElement._literalStringClass(Literal(expr))
- self.expr = expr
- self.strRepr = None
- if expr is not None:
- self.mayIndexError = expr.mayIndexError
- self.mayReturnEmpty = expr.mayReturnEmpty
- self.setWhitespaceChars( expr.whiteChars )
- self.skipWhitespace = expr.skipWhitespace
- self.saveAsList = expr.saveAsList
- self.callPreparse = expr.callPreparse
- self.ignoreExprs.extend(expr.ignoreExprs)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.expr is not None:
- return self.expr._parse( instring, loc, doActions, callPreParse=False )
- else:
- raise ParseException("",loc,self.errmsg,self)
-
- def leaveWhitespace( self ):
- self.skipWhitespace = False
- self.expr = self.expr.copy()
- if self.expr is not None:
- self.expr.leaveWhitespace()
- return self
-
- def ignore( self, other ):
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- super( ParseElementEnhance, self).ignore( other )
- if self.expr is not None:
- self.expr.ignore( self.ignoreExprs[-1] )
- else:
- super( ParseElementEnhance, self).ignore( other )
- if self.expr is not None:
- self.expr.ignore( self.ignoreExprs[-1] )
- return self
-
- def streamline( self ):
- super(ParseElementEnhance,self).streamline()
- if self.expr is not None:
- self.expr.streamline()
- return self
-
- def checkRecursion( self, parseElementList ):
- if self in parseElementList:
- raise RecursiveGrammarException( parseElementList+[self] )
- subRecCheckList = parseElementList[:] + [ self ]
- if self.expr is not None:
- self.expr.checkRecursion( subRecCheckList )
-
- def validate( self, validateTrace=[] ):
- tmp = validateTrace[:]+[self]
- if self.expr is not None:
- self.expr.validate(tmp)
- self.checkRecursion( [] )
-
- def __str__( self ):
- try:
- return super(ParseElementEnhance,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None and self.expr is not None:
- self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) )
- return self.strRepr
-
-
-class FollowedBy(ParseElementEnhance):
- """
- Lookahead matching of the given parse expression. C{FollowedBy}
- does I{not} advance the parsing position within the input string, it only
- verifies that the specified parse expression matches at the current
- position. C{FollowedBy} always returns a null token list.
-
- Example::
- # use FollowedBy to match a label only if it is followed by a ':'
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
-
- OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint()
- prints::
- [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']]
- """
- def __init__( self, expr ):
- super(FollowedBy,self).__init__(expr)
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- self.expr.tryParse( instring, loc )
- return loc, []
-
-
-class NotAny(ParseElementEnhance):
- """
- Lookahead to disallow matching with the given parse expression. C{NotAny}
- does I{not} advance the parsing position within the input string, it only
- verifies that the specified parse expression does I{not} match at the current
- position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny}
- always returns a null token list. May be constructed using the '~' operator.
-
- Example::
-
- """
- def __init__( self, expr ):
- super(NotAny,self).__init__(expr)
- #~ self.leaveWhitespace()
- self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs
- self.mayReturnEmpty = True
- self.errmsg = "Found unwanted token, "+_ustr(self.expr)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.expr.canParseNext(instring, loc):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "~{" + _ustr(self.expr) + "}"
-
- return self.strRepr
-
-class _MultipleMatch(ParseElementEnhance):
- def __init__( self, expr, stopOn=None):
- super(_MultipleMatch, self).__init__(expr)
- self.saveAsList = True
- ender = stopOn
- if isinstance(ender, basestring):
- ender = ParserElement._literalStringClass(ender)
- self.not_ender = ~ender if ender is not None else None
-
- def parseImpl( self, instring, loc, doActions=True ):
- self_expr_parse = self.expr._parse
- self_skip_ignorables = self._skipIgnorables
- check_ender = self.not_ender is not None
- if check_ender:
- try_not_ender = self.not_ender.tryParse
-
- # must be at least one (but first see if we are the stopOn sentinel;
- # if so, fail)
- if check_ender:
- try_not_ender(instring, loc)
- loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
- try:
- hasIgnoreExprs = (not not self.ignoreExprs)
- while 1:
- if check_ender:
- try_not_ender(instring, loc)
- if hasIgnoreExprs:
- preloc = self_skip_ignorables( instring, loc )
- else:
- preloc = loc
- loc, tmptokens = self_expr_parse( instring, preloc, doActions )
- if tmptokens or tmptokens.haskeys():
- tokens += tmptokens
- except (ParseException,IndexError):
- pass
-
- return loc, tokens
-
-class OneOrMore(_MultipleMatch):
- """
- Repetition of one or more of the given expression.
-
- Parameters:
- - expr - expression that must match one or more times
- - stopOn - (default=C{None}) - expression for a terminating sentinel
- (only required if the sentinel would ordinarily match the repetition
- expression)
-
- Example::
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
-
- text = "shape: SQUARE posn: upper left color: BLACK"
- OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']]
-
- # use stopOn attribute for OneOrMore to avoid reading label string as part of the data
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
- OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']]
-
- # could also be written as
- (attr_expr * (1,)).parseString(text).pprint()
- """
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + _ustr(self.expr) + "}..."
-
- return self.strRepr
-
-class ZeroOrMore(_MultipleMatch):
- """
- Optional repetition of zero or more of the given expression.
-
- Parameters:
- - expr - expression that must match zero or more times
- - stopOn - (default=C{None}) - expression for a terminating sentinel
- (only required if the sentinel would ordinarily match the repetition
- expression)
-
- Example: similar to L{OneOrMore}
- """
- def __init__( self, expr, stopOn=None):
- super(ZeroOrMore,self).__init__(expr, stopOn=stopOn)
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- try:
- return super(ZeroOrMore, self).parseImpl(instring, loc, doActions)
- except (ParseException,IndexError):
- return loc, []
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "[" + _ustr(self.expr) + "]..."
-
- return self.strRepr
-
-class _NullToken(object):
- def __bool__(self):
- return False
- __nonzero__ = __bool__
- def __str__(self):
- return ""
-
-_optionalNotMatched = _NullToken()
-class Optional(ParseElementEnhance):
- """
- Optional matching of the given expression.
-
- Parameters:
- - expr - expression that must match zero or more times
- - default (optional) - value to be returned if the optional expression is not found.
-
- Example::
- # US postal code can be a 5-digit zip, plus optional 4-digit qualifier
- zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4)))
- zip.runTests('''
- # traditional ZIP code
- 12345
-
- # ZIP+4 form
- 12101-0001
-
- # invalid ZIP
- 98765-
- ''')
- prints::
- # traditional ZIP code
- 12345
- ['12345']
-
- # ZIP+4 form
- 12101-0001
- ['12101-0001']
-
- # invalid ZIP
- 98765-
- ^
- FAIL: Expected end of text (at char 5), (line:1, col:6)
- """
- def __init__( self, expr, default=_optionalNotMatched ):
- super(Optional,self).__init__( expr, savelist=False )
- self.saveAsList = self.expr.saveAsList
- self.defaultValue = default
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- try:
- loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
- except (ParseException,IndexError):
- if self.defaultValue is not _optionalNotMatched:
- if self.expr.resultsName:
- tokens = ParseResults([ self.defaultValue ])
- tokens[self.expr.resultsName] = self.defaultValue
- else:
- tokens = [ self.defaultValue ]
- else:
- tokens = []
- return loc, tokens
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "[" + _ustr(self.expr) + "]"
-
- return self.strRepr
-
-class SkipTo(ParseElementEnhance):
- """
- Token for skipping over all undefined text until the matched expression is found.
-
- Parameters:
- - expr - target expression marking the end of the data to be skipped
- - include - (default=C{False}) if True, the target expression is also parsed
- (the skipped text and target expression are returned as a 2-element list).
- - ignore - (default=C{None}) used to define grammars (typically quoted strings and
- comments) that might contain false matches to the target expression
- - failOn - (default=C{None}) define expressions that are not allowed to be
- included in the skipped test; if found before the target expression is found,
- the SkipTo is not a match
-
- Example::
- report = '''
- Outstanding Issues Report - 1 Jan 2000
-
- # | Severity | Description | Days Open
- -----+----------+-------------------------------------------+-----------
- 101 | Critical | Intermittent system crash | 6
- 94 | Cosmetic | Spelling error on Login ('log|n') | 14
- 79 | Minor | System slow when running too many reports | 47
- '''
- integer = Word(nums)
- SEP = Suppress('|')
- # use SkipTo to simply match everything up until the next SEP
- # - ignore quoted strings, so that a '|' character inside a quoted string does not match
- # - parse action will call token.strip() for each matched token, i.e., the description body
- string_data = SkipTo(SEP, ignore=quotedString)
- string_data.setParseAction(tokenMap(str.strip))
- ticket_expr = (integer("issue_num") + SEP
- + string_data("sev") + SEP
- + string_data("desc") + SEP
- + integer("days_open"))
-
- for tkt in ticket_expr.searchString(report):
- print tkt.dump()
- prints::
- ['101', 'Critical', 'Intermittent system crash', '6']
- - days_open: 6
- - desc: Intermittent system crash
- - issue_num: 101
- - sev: Critical
- ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14']
- - days_open: 14
- - desc: Spelling error on Login ('log|n')
- - issue_num: 94
- - sev: Cosmetic
- ['79', 'Minor', 'System slow when running too many reports', '47']
- - days_open: 47
- - desc: System slow when running too many reports
- - issue_num: 79
- - sev: Minor
- """
- def __init__( self, other, include=False, ignore=None, failOn=None ):
- super( SkipTo, self ).__init__( other )
- self.ignoreExpr = ignore
- self.mayReturnEmpty = True
- self.mayIndexError = False
- self.includeMatch = include
- self.asList = False
- if isinstance(failOn, basestring):
- self.failOn = ParserElement._literalStringClass(failOn)
- else:
- self.failOn = failOn
- self.errmsg = "No match found for "+_ustr(self.expr)
-
- def parseImpl( self, instring, loc, doActions=True ):
- startloc = loc
- instrlen = len(instring)
- expr = self.expr
- expr_parse = self.expr._parse
- self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None
- self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None
-
- tmploc = loc
- while tmploc <= instrlen:
- if self_failOn_canParseNext is not None:
- # break if failOn expression matches
- if self_failOn_canParseNext(instring, tmploc):
- break
-
- if self_ignoreExpr_tryParse is not None:
- # advance past ignore expressions
- while 1:
- try:
- tmploc = self_ignoreExpr_tryParse(instring, tmploc)
- except ParseBaseException:
- break
-
- try:
- expr_parse(instring, tmploc, doActions=False, callPreParse=False)
- except (ParseException, IndexError):
- # no match, advance loc in string
- tmploc += 1
- else:
- # matched skipto expr, done
- break
-
- else:
- # ran off the end of the input string without matching skipto expr, fail
- raise ParseException(instring, loc, self.errmsg, self)
-
- # build up return values
- loc = tmploc
- skiptext = instring[startloc:loc]
- skipresult = ParseResults(skiptext)
-
- if self.includeMatch:
- loc, mat = expr_parse(instring,loc,doActions,callPreParse=False)
- skipresult += mat
-
- return loc, skipresult
-
-class Forward(ParseElementEnhance):
- """
- Forward declaration of an expression to be defined later -
- used for recursive grammars, such as algebraic infix notation.
- When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator.
-
- Note: take care when assigning to C{Forward} not to overlook precedence of operators.
- Specifically, '|' has a lower precedence than '<<', so that::
- fwdExpr << a | b | c
- will actually be evaluated as::
- (fwdExpr << a) | b | c
- thereby leaving b and c out as parseable alternatives. It is recommended that you
- explicitly group the values inserted into the C{Forward}::
- fwdExpr << (a | b | c)
- Converting to use the '<<=' operator instead will avoid this problem.
-
- See L{ParseResults.pprint} for an example of a recursive parser created using
- C{Forward}.
- """
- def __init__( self, other=None ):
- super(Forward,self).__init__( other, savelist=False )
-
- def __lshift__( self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass(other)
- self.expr = other
- self.strRepr = None
- self.mayIndexError = self.expr.mayIndexError
- self.mayReturnEmpty = self.expr.mayReturnEmpty
- self.setWhitespaceChars( self.expr.whiteChars )
- self.skipWhitespace = self.expr.skipWhitespace
- self.saveAsList = self.expr.saveAsList
- self.ignoreExprs.extend(self.expr.ignoreExprs)
- return self
-
- def __ilshift__(self, other):
- return self << other
-
- def leaveWhitespace( self ):
- self.skipWhitespace = False
- return self
-
- def streamline( self ):
- if not self.streamlined:
- self.streamlined = True
- if self.expr is not None:
- self.expr.streamline()
- return self
-
- def validate( self, validateTrace=[] ):
- if self not in validateTrace:
- tmp = validateTrace[:]+[self]
- if self.expr is not None:
- self.expr.validate(tmp)
- self.checkRecursion([])
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
- return self.__class__.__name__ + ": ..."
-
- # stubbed out for now - creates awful memory and perf issues
- self._revertClass = self.__class__
- self.__class__ = _ForwardNoRecurse
- try:
- if self.expr is not None:
- retString = _ustr(self.expr)
- else:
- retString = "None"
- finally:
- self.__class__ = self._revertClass
- return self.__class__.__name__ + ": " + retString
-
- def copy(self):
- if self.expr is not None:
- return super(Forward,self).copy()
- else:
- ret = Forward()
- ret <<= self
- return ret
-
-class _ForwardNoRecurse(Forward):
- def __str__( self ):
- return "..."
-
-class TokenConverter(ParseElementEnhance):
- """
- Abstract subclass of C{ParseExpression}, for converting parsed results.
- """
- def __init__( self, expr, savelist=False ):
- super(TokenConverter,self).__init__( expr )#, savelist )
- self.saveAsList = False
-
-class Combine(TokenConverter):
- """
- Converter to concatenate all matching tokens to a single string.
- By default, the matching patterns must also be contiguous in the input string;
- this can be disabled by specifying C{'adjacent=False'} in the constructor.
-
- Example::
- real = Word(nums) + '.' + Word(nums)
- print(real.parseString('3.1416')) # -> ['3', '.', '1416']
- # will also erroneously match the following
- print(real.parseString('3. 1416')) # -> ['3', '.', '1416']
-
- real = Combine(Word(nums) + '.' + Word(nums))
- print(real.parseString('3.1416')) # -> ['3.1416']
- # no match when there are internal spaces
- print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...)
- """
- def __init__( self, expr, joinString="", adjacent=True ):
- super(Combine,self).__init__( expr )
- # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself
- if adjacent:
- self.leaveWhitespace()
- self.adjacent = adjacent
- self.skipWhitespace = True
- self.joinString = joinString
- self.callPreparse = True
-
- def ignore( self, other ):
- if self.adjacent:
- ParserElement.ignore(self, other)
- else:
- super( Combine, self).ignore( other )
- return self
-
- def postParse( self, instring, loc, tokenlist ):
- retToks = tokenlist.copy()
- del retToks[:]
- retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults)
-
- if self.resultsName and retToks.haskeys():
- return [ retToks ]
- else:
- return retToks
-
-class Group(TokenConverter):
- """
- Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions.
-
- Example::
- ident = Word(alphas)
- num = Word(nums)
- term = ident | num
- func = ident + Optional(delimitedList(term))
- print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100']
-
- func = ident + Group(Optional(delimitedList(term)))
- print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']]
- """
- def __init__( self, expr ):
- super(Group,self).__init__( expr )
- self.saveAsList = True
-
- def postParse( self, instring, loc, tokenlist ):
- return [ tokenlist ]
-
-class Dict(TokenConverter):
- """
- Converter to return a repetitive expression as a list, but also as a dictionary.
- Each element can also be referenced using the first token in the expression as its key.
- Useful for tabular report scraping when the first column can be used as a item key.
-
- Example::
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
-
- text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
- attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
-
- # print attributes as plain groups
- print(OneOrMore(attr_expr).parseString(text).dump())
-
- # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names
- result = Dict(OneOrMore(Group(attr_expr))).parseString(text)
- print(result.dump())
-
- # access named fields as dict entries, or output as dict
- print(result['shape'])
- print(result.asDict())
- prints::
- ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap']
-
- [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
- - color: light blue
- - posn: upper left
- - shape: SQUARE
- - texture: burlap
- SQUARE
- {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'}
- See more examples at L{ParseResults} of accessing fields by results name.
- """
- def __init__( self, expr ):
- super(Dict,self).__init__( expr )
- self.saveAsList = True
-
- def postParse( self, instring, loc, tokenlist ):
- for i,tok in enumerate(tokenlist):
- if len(tok) == 0:
- continue
- ikey = tok[0]
- if isinstance(ikey,int):
- ikey = _ustr(tok[0]).strip()
- if len(tok)==1:
- tokenlist[ikey] = _ParseResultsWithOffset("",i)
- elif len(tok)==2 and not isinstance(tok[1],ParseResults):
- tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i)
- else:
- dictvalue = tok.copy() #ParseResults(i)
- del dictvalue[0]
- if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()):
- tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i)
- else:
- tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i)
-
- if self.resultsName:
- return [ tokenlist ]
- else:
- return tokenlist
-
-
-class Suppress(TokenConverter):
- """
- Converter for ignoring the results of a parsed expression.
-
- Example::
- source = "a, b, c,d"
- wd = Word(alphas)
- wd_list1 = wd + ZeroOrMore(',' + wd)
- print(wd_list1.parseString(source))
-
- # often, delimiters that are useful during parsing are just in the
- # way afterward - use Suppress to keep them out of the parsed output
- wd_list2 = wd + ZeroOrMore(Suppress(',') + wd)
- print(wd_list2.parseString(source))
- prints::
- ['a', ',', 'b', ',', 'c', ',', 'd']
- ['a', 'b', 'c', 'd']
- (See also L{delimitedList}.)
- """
- def postParse( self, instring, loc, tokenlist ):
- return []
-
- def suppress( self ):
- return self
-
-
-class OnlyOnce(object):
- """
- Wrapper for parse actions, to ensure they are only called once.
- """
- def __init__(self, methodCall):
- self.callable = _trim_arity(methodCall)
- self.called = False
- def __call__(self,s,l,t):
- if not self.called:
- results = self.callable(s,l,t)
- self.called = True
- return results
- raise ParseException(s,l,"")
- def reset(self):
- self.called = False
-
-def traceParseAction(f):
- """
- Decorator for debugging parse actions.
-
- When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".}
- When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised.
-
- Example::
- wd = Word(alphas)
-
- @traceParseAction
- def remove_duplicate_chars(tokens):
- return ''.join(sorted(set(''.join(tokens))))
-
- wds = OneOrMore(wd).setParseAction(remove_duplicate_chars)
- print(wds.parseString("slkdjs sld sldd sdlf sdljf"))
- prints::
- >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {}))
- <<leaving remove_duplicate_chars (ret: 'dfjkls')
- ['dfjkls']
- """
- f = _trim_arity(f)
- def z(*paArgs):
- thisFunc = f.__name__
- s,l,t = paArgs[-3:]
- if len(paArgs)>3:
- thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc
- sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) )
- try:
- ret = f(*paArgs)
- except Exception as exc:
- sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) )
- raise
- sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) )
- return ret
- try:
- z.__name__ = f.__name__
- except AttributeError:
- pass
- return z
-
-#
-# global helpers
-#
-def delimitedList( expr, delim=",", combine=False ):
- """
- Helper to define a delimited list of expressions - the delimiter defaults to ','.
- By default, the list elements and delimiters can have intervening whitespace, and
- comments, but this can be overridden by passing C{combine=True} in the constructor.
- If C{combine} is set to C{True}, the matching tokens are returned as a single token
- string, with the delimiters included; otherwise, the matching tokens are returned
- as a list of tokens, with the delimiters suppressed.
-
- Example::
- delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc']
- delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE']
- """
- dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..."
- if combine:
- return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName)
- else:
- return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName)
-
-def countedArray( expr, intExpr=None ):
- """
- Helper to define a counted list of expressions.
- This helper defines a pattern of the form::
- integer expr expr expr...
- where the leading integer tells how many expr expressions follow.
- The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
-
- If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value.
-
- Example::
- countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd']
-
- # in this parser, the leading integer value is given in binary,
- # '10' indicating that 2 values are in the array
- binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2))
- countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd']
- """
- arrayExpr = Forward()
- def countFieldParseAction(s,l,t):
- n = t[0]
- arrayExpr << (n and Group(And([expr]*n)) or Group(empty))
- return []
- if intExpr is None:
- intExpr = Word(nums).setParseAction(lambda t:int(t[0]))
- else:
- intExpr = intExpr.copy()
- intExpr.setName("arrayLen")
- intExpr.addParseAction(countFieldParseAction, callDuringTry=True)
- return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...')
-
-def _flatten(L):
- ret = []
- for i in L:
- if isinstance(i,list):
- ret.extend(_flatten(i))
- else:
- ret.append(i)
- return ret
-
-def matchPreviousLiteral(expr):
- """
- Helper to define an expression that is indirectly defined from
- the tokens matched in a previous expression, that is, it looks
- for a 'repeat' of a previous expression. For example::
- first = Word(nums)
- second = matchPreviousLiteral(first)
- matchExpr = first + ":" + second
- will match C{"1:1"}, but not C{"1:2"}. Because this matches a
- previous literal, will also match the leading C{"1:1"} in C{"1:10"}.
- If this is not desired, use C{matchPreviousExpr}.
- Do I{not} use with packrat parsing enabled.
- """
- rep = Forward()
- def copyTokenToRepeater(s,l,t):
- if t:
- if len(t) == 1:
- rep << t[0]
- else:
- # flatten t tokens
- tflat = _flatten(t.asList())
- rep << And(Literal(tt) for tt in tflat)
- else:
- rep << Empty()
- expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
- rep.setName('(prev) ' + _ustr(expr))
- return rep
-
-def matchPreviousExpr(expr):
- """
- Helper to define an expression that is indirectly defined from
- the tokens matched in a previous expression, that is, it looks
- for a 'repeat' of a previous expression. For example::
- first = Word(nums)
- second = matchPreviousExpr(first)
- matchExpr = first + ":" + second
- will match C{"1:1"}, but not C{"1:2"}. Because this matches by
- expressions, will I{not} match the leading C{"1:1"} in C{"1:10"};
- the expressions are evaluated first, and then compared, so
- C{"1"} is compared with C{"10"}.
- Do I{not} use with packrat parsing enabled.
- """
- rep = Forward()
- e2 = expr.copy()
- rep <<= e2
- def copyTokenToRepeater(s,l,t):
- matchTokens = _flatten(t.asList())
- def mustMatchTheseTokens(s,l,t):
- theseTokens = _flatten(t.asList())
- if theseTokens != matchTokens:
- raise ParseException("",0,"")
- rep.setParseAction( mustMatchTheseTokens, callDuringTry=True )
- expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
- rep.setName('(prev) ' + _ustr(expr))
- return rep
-
-def _escapeRegexRangeChars(s):
- #~ escape these chars: ^-]
- for c in r"\^-]":
- s = s.replace(c,_bslash+c)
- s = s.replace("\n",r"\n")
- s = s.replace("\t",r"\t")
- return _ustr(s)
-
-def oneOf( strs, caseless=False, useRegex=True ):
- """
- Helper to quickly define a set of alternative Literals, and makes sure to do
- longest-first testing when there is a conflict, regardless of the input order,
- but returns a C{L{MatchFirst}} for best performance.
-
- Parameters:
- - strs - a string of space-delimited literals, or a collection of string literals
- - caseless - (default=C{False}) - treat all literals as caseless
- - useRegex - (default=C{True}) - as an optimization, will generate a Regex
- object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or
- if creating a C{Regex} raises an exception)
-
- Example::
- comp_oper = oneOf("< = > <= >= !=")
- var = Word(alphas)
- number = Word(nums)
- term = var | number
- comparison_expr = term + comp_oper + term
- print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12"))
- prints::
- [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']]
- """
- if caseless:
- isequal = ( lambda a,b: a.upper() == b.upper() )
- masks = ( lambda a,b: b.upper().startswith(a.upper()) )
- parseElementClass = CaselessLiteral
- else:
- isequal = ( lambda a,b: a == b )
- masks = ( lambda a,b: b.startswith(a) )
- parseElementClass = Literal
-
- symbols = []
- if isinstance(strs,basestring):
- symbols = strs.split()
- elif isinstance(strs, Iterable):
- symbols = list(strs)
- else:
- warnings.warn("Invalid argument to oneOf, expected string or iterable",
- SyntaxWarning, stacklevel=2)
- if not symbols:
- return NoMatch()
-
- i = 0
- while i < len(symbols)-1:
- cur = symbols[i]
- for j,other in enumerate(symbols[i+1:]):
- if ( isequal(other, cur) ):
- del symbols[i+j+1]
- break
- elif ( masks(cur, other) ):
- del symbols[i+j+1]
- symbols.insert(i,other)
- cur = other
- break
- else:
- i += 1
-
- if not caseless and useRegex:
- #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] ))
- try:
- if len(symbols)==len("".join(symbols)):
- return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols))
- else:
- return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols))
- except Exception:
- warnings.warn("Exception creating Regex for oneOf, building MatchFirst",
- SyntaxWarning, stacklevel=2)
-
-
- # last resort, just use MatchFirst
- return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols))
-
-def dictOf( key, value ):
- """
- Helper to easily and clearly define a dictionary by specifying the respective patterns
- for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens
- in the proper order. The key pattern can include delimiting markers or punctuation,
- as long as they are suppressed, thereby leaving the significant key text. The value
- pattern can include named results, so that the C{Dict} results can include named token
- fields.
-
- Example::
- text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
- attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
- print(OneOrMore(attr_expr).parseString(text).dump())
-
- attr_label = label
- attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)
-
- # similar to Dict, but simpler call format
- result = dictOf(attr_label, attr_value).parseString(text)
- print(result.dump())
- print(result['shape'])
- print(result.shape) # object attribute access works too
- print(result.asDict())
- prints::
- [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
- - color: light blue
- - posn: upper left
- - shape: SQUARE
- - texture: burlap
- SQUARE
- SQUARE
- {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'}
- """
- return Dict( ZeroOrMore( Group ( key + value ) ) )
-
-def originalTextFor(expr, asString=True):
- """
- Helper to return the original, untokenized text for a given expression. Useful to
- restore the parsed fields of an HTML start tag into the raw tag text itself, or to
- revert separate tokens with intervening whitespace back to the original matching
- input text. By default, returns astring containing the original parsed text.
-
- If the optional C{asString} argument is passed as C{False}, then the return value is a
- C{L{ParseResults}} containing any results names that were originally matched, and a
- single token containing the original matched text from the input string. So if
- the expression passed to C{L{originalTextFor}} contains expressions with defined
- results names, you must set C{asString} to C{False} if you want to preserve those
- results name values.
-
- Example::
- src = "this is test <b> bold <i>text</i> </b> normal text "
- for tag in ("b","i"):
- opener,closer = makeHTMLTags(tag)
- patt = originalTextFor(opener + SkipTo(closer) + closer)
- print(patt.searchString(src)[0])
- prints::
- ['<b> bold <i>text</i> </b>']
- ['<i>text</i>']
- """
- locMarker = Empty().setParseAction(lambda s,loc,t: loc)
- endlocMarker = locMarker.copy()
- endlocMarker.callPreparse = False
- matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end")
- if asString:
- extractText = lambda s,l,t: s[t._original_start:t._original_end]
- else:
- def extractText(s,l,t):
- t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]]
- matchExpr.setParseAction(extractText)
- matchExpr.ignoreExprs = expr.ignoreExprs
- return matchExpr
-
-def ungroup(expr):
- """
- Helper to undo pyparsing's default grouping of And expressions, even
- if all but one are non-empty.
- """
- return TokenConverter(expr).setParseAction(lambda t:t[0])
-
-def locatedExpr(expr):
- """
- Helper to decorate a returned token with its starting and ending locations in the input string.
- This helper adds the following results names:
- - locn_start = location where matched expression begins
- - locn_end = location where matched expression ends
- - value = the actual parsed results
-
- Be careful if the input text contains C{<TAB>} characters, you may want to call
- C{L{ParserElement.parseWithTabs}}
-
- Example::
- wd = Word(alphas)
- for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"):
- print(match)
- prints::
- [[0, 'ljsdf', 5]]
- [[8, 'lksdjjf', 15]]
- [[18, 'lkkjj', 23]]
- """
- locator = Empty().setParseAction(lambda s,l,t: l)
- return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end"))
-
-
-# convenience constants for positional expressions
-empty = Empty().setName("empty")
-lineStart = LineStart().setName("lineStart")
-lineEnd = LineEnd().setName("lineEnd")
-stringStart = StringStart().setName("stringStart")
-stringEnd = StringEnd().setName("stringEnd")
-
-_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
-_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16)))
-_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8)))
-_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1)
-_charRange = Group(_singleChar + Suppress("-") + _singleChar)
-_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"
-
-def srange(s):
- r"""
- Helper to easily define string ranges for use in Word construction. Borrows
- syntax from regexp '[]' string range definitions::
- srange("[0-9]") -> "0123456789"
- srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz"
- srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
- The input string must be enclosed in []'s, and the returned string is the expanded
- character set joined into a single string.
- The values enclosed in the []'s may be:
- - a single character
- - an escaped character with a leading backslash (such as C{\-} or C{\]})
- - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character)
- (C{\0x##} is also supported for backwards compatibility)
- - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character)
- - a range of any of the above, separated by a dash (C{'a-z'}, etc.)
- - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.)
- """
- _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1))
- try:
- return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body)
- except Exception:
- return ""
-
-def matchOnlyAtCol(n):
- """
- Helper method for defining parse actions that require matching at a specific
- column in the input text.
- """
- def verifyCol(strg,locn,toks):
- if col(locn,strg) != n:
- raise ParseException(strg,locn,"matched token not at column %d" % n)
- return verifyCol
-
-def replaceWith(replStr):
- """
- Helper method for common parse actions that simply return a literal value. Especially
- useful when used with C{L{transformString<ParserElement.transformString>}()}.
-
- Example::
- num = Word(nums).setParseAction(lambda toks: int(toks[0]))
- na = oneOf("N/A NA").setParseAction(replaceWith(math.nan))
- term = na | num
-
- OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234]
- """
- return lambda s,l,t: [replStr]
-
-def removeQuotes(s,l,t):
- """
- Helper parse action for removing quotation marks from parsed quoted strings.
-
- Example::
- # by default, quotation marks are included in parsed results
- quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"]
-
- # use removeQuotes to strip quotation marks from parsed results
- quotedString.setParseAction(removeQuotes)
- quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"]
- """
- return t[0][1:-1]
-
-def tokenMap(func, *args):
- """
- Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional
- args are passed, they are forwarded to the given function as additional arguments after
- the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the
- parsed data to an integer using base 16.
-
- Example (compare the last to example in L{ParserElement.transformString}::
- hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16))
- hex_ints.runTests('''
- 00 11 22 aa FF 0a 0d 1a
- ''')
-
- upperword = Word(alphas).setParseAction(tokenMap(str.upper))
- OneOrMore(upperword).runTests('''
- my kingdom for a horse
- ''')
-
- wd = Word(alphas).setParseAction(tokenMap(str.title))
- OneOrMore(wd).setParseAction(' '.join).runTests('''
- now is the winter of our discontent made glorious summer by this sun of york
- ''')
- prints::
- 00 11 22 aa FF 0a 0d 1a
- [0, 17, 34, 170, 255, 10, 13, 26]
-
- my kingdom for a horse
- ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE']
-
- now is the winter of our discontent made glorious summer by this sun of york
- ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York']
- """
- def pa(s,l,t):
- return [func(tokn, *args) for tokn in t]
-
- try:
- func_name = getattr(func, '__name__',
- getattr(func, '__class__').__name__)
- except Exception:
- func_name = str(func)
- pa.__name__ = func_name
-
- return pa
-
-upcaseTokens = tokenMap(lambda t: _ustr(t).upper())
-"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}"""
-
-downcaseTokens = tokenMap(lambda t: _ustr(t).lower())
-"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}"""
-
-def _makeTags(tagStr, xml):
- """Internal helper to construct opening and closing tag expressions, given a tag name"""
- if isinstance(tagStr,basestring):
- resname = tagStr
- tagStr = Keyword(tagStr, caseless=not xml)
- else:
- resname = tagStr.name
-
- tagAttrName = Word(alphas,alphanums+"_-:")
- if (xml):
- tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes )
- openTag = Suppress("<") + tagStr("tag") + \
- Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \
- Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
- else:
- printablesLessRAbrack = "".join(c for c in printables if c not in ">")
- tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack)
- openTag = Suppress("<") + tagStr("tag") + \
- Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
- Optional( Suppress("=") + tagAttrValue ) ))) + \
- Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
- closeTag = Combine(_L("</") + tagStr + ">")
-
- openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname)
- closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname)
- openTag.tag = resname
- closeTag.tag = resname
- return openTag, closeTag
-
-def makeHTMLTags(tagStr):
- """
- Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches
- tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values.
-
- Example::
- text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
- # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple
- a,a_end = makeHTMLTags("A")
- link_expr = a + SkipTo(a_end)("link_text") + a_end
-
- for link in link_expr.searchString(text):
- # attributes in the <A> tag (like "href" shown here) are also accessible as named results
- print(link.link_text, '->', link.href)
- prints::
- pyparsing -> http://pyparsing.wikispaces.com
- """
- return _makeTags( tagStr, False )
-
-def makeXMLTags(tagStr):
- """
- Helper to construct opening and closing tag expressions for XML, given a tag name. Matches
- tags only in the given upper/lower case.
-
- Example: similar to L{makeHTMLTags}
- """
- return _makeTags( tagStr, True )
-
-def withAttribute(*args,**attrDict):
- """
- Helper to create a validating parse action to be used with start tags created
- with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag
- with a required attribute value, to avoid false matches on common tags such as
- C{<TD>} or C{<DIV>}.
-
- Call C{withAttribute} with a series of attribute names and values. Specify the list
- of filter attributes names and values as:
- - keyword arguments, as in C{(align="right")}, or
- - as an explicit dict with C{**} operator, when an attribute name is also a Python
- reserved word, as in C{**{"class":"Customer", "align":"right"}}
- - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") )
- For attribute names with a namespace prefix, you must use the second form. Attribute
- names are matched insensitive to upper/lower case.
-
- If just testing for C{class} (with or without a namespace), use C{L{withClass}}.
-
- To verify that the attribute exists, but without specifying a value, pass
- C{withAttribute.ANY_VALUE} as the value.
-
- Example::
- html = '''
- <div>
- Some text
- <div type="grid">1 4 0 1 0</div>
- <div type="graph">1,3 2,3 1,1</div>
- <div>this has no type</div>
- </div>
-
- '''
- div,div_end = makeHTMLTags("div")
-
- # only match div tag having a type attribute with value "grid"
- div_grid = div().setParseAction(withAttribute(type="grid"))
- grid_expr = div_grid + SkipTo(div | div_end)("body")
- for grid_header in grid_expr.searchString(html):
- print(grid_header.body)
-
- # construct a match with any div tag having a type attribute, regardless of the value
- div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE))
- div_expr = div_any_type + SkipTo(div | div_end)("body")
- for div_header in div_expr.searchString(html):
- print(div_header.body)
- prints::
- 1 4 0 1 0
-
- 1 4 0 1 0
- 1,3 2,3 1,1
- """
- if args:
- attrs = args[:]
- else:
- attrs = attrDict.items()
- attrs = [(k,v) for k,v in attrs]
- def pa(s,l,tokens):
- for attrName,attrValue in attrs:
- if attrName not in tokens:
- raise ParseException(s,l,"no matching attribute " + attrName)
- if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue:
- raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" %
- (attrName, tokens[attrName], attrValue))
- return pa
-withAttribute.ANY_VALUE = object()
-
-def withClass(classname, namespace=''):
- """
- Simplified version of C{L{withAttribute}} when matching on a div class - made
- difficult because C{class} is a reserved word in Python.
-
- Example::
- html = '''
- <div>
- Some text
- <div class="grid">1 4 0 1 0</div>
- <div class="graph">1,3 2,3 1,1</div>
- <div>this &lt;div&gt; has no class</div>
- </div>
-
- '''
- div,div_end = makeHTMLTags("div")
- div_grid = div().setParseAction(withClass("grid"))
-
- grid_expr = div_grid + SkipTo(div | div_end)("body")
- for grid_header in grid_expr.searchString(html):
- print(grid_header.body)
-
- div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE))
- div_expr = div_any_type + SkipTo(div | div_end)("body")
- for div_header in div_expr.searchString(html):
- print(div_header.body)
- prints::
- 1 4 0 1 0
-
- 1 4 0 1 0
- 1,3 2,3 1,1
- """
- classattr = "%s:class" % namespace if namespace else "class"
- return withAttribute(**{classattr : classname})
-
-opAssoc = _Constants()
-opAssoc.LEFT = object()
-opAssoc.RIGHT = object()
-
-def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ):
- """
- Helper method for constructing grammars of expressions made up of
- operators working in a precedence hierarchy. Operators may be unary or
- binary, left- or right-associative. Parse actions can also be attached
- to operator expressions. The generated parser will also recognize the use
- of parentheses to override operator precedences (see example below).
-
- Note: if you define a deep operator list, you may see performance issues
- when using infixNotation. See L{ParserElement.enablePackrat} for a
- mechanism to potentially improve your parser performance.
-
- Parameters:
- - baseExpr - expression representing the most basic element for the nested
- - opList - list of tuples, one for each operator precedence level in the
- expression grammar; each tuple is of the form
- (opExpr, numTerms, rightLeftAssoc, parseAction), where:
- - opExpr is the pyparsing expression for the operator;
- may also be a string, which will be converted to a Literal;
- if numTerms is 3, opExpr is a tuple of two expressions, for the
- two operators separating the 3 terms
- - numTerms is the number of terms for this operator (must
- be 1, 2, or 3)
- - rightLeftAssoc is the indicator whether the operator is
- right or left associative, using the pyparsing-defined
- constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}.
- - parseAction is the parse action to be associated with
- expressions matching this operator expression (the
- parse action tuple member may be omitted); if the parse action
- is passed a tuple or list of functions, this is equivalent to
- calling C{setParseAction(*fn)} (L{ParserElement.setParseAction})
- - lpar - expression for matching left-parentheses (default=C{Suppress('(')})
- - rpar - expression for matching right-parentheses (default=C{Suppress(')')})
-
- Example::
- # simple example of four-function arithmetic with ints and variable names
- integer = pyparsing_common.signed_integer
- varname = pyparsing_common.identifier
-
- arith_expr = infixNotation(integer | varname,
- [
- ('-', 1, opAssoc.RIGHT),
- (oneOf('* /'), 2, opAssoc.LEFT),
- (oneOf('+ -'), 2, opAssoc.LEFT),
- ])
-
- arith_expr.runTests('''
- 5+3*6
- (5+3)*6
- -2--11
- ''', fullDump=False)
- prints::
- 5+3*6
- [[5, '+', [3, '*', 6]]]
-
- (5+3)*6
- [[[5, '+', 3], '*', 6]]
-
- -2--11
- [[['-', 2], '-', ['-', 11]]]
- """
- ret = Forward()
- lastExpr = baseExpr | ( lpar + ret + rpar )
- for i,operDef in enumerate(opList):
- opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4]
- termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr
- if arity == 3:
- if opExpr is None or len(opExpr) != 2:
- raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions")
- opExpr1, opExpr2 = opExpr
- thisExpr = Forward().setName(termName)
- if rightLeftAssoc == opAssoc.LEFT:
- if arity == 1:
- matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) )
- elif arity == 2:
- if opExpr is not None:
- matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) )
- else:
- matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) )
- elif arity == 3:
- matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \
- Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr )
- else:
- raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
- elif rightLeftAssoc == opAssoc.RIGHT:
- if arity == 1:
- # try to avoid LR with this extra test
- if not isinstance(opExpr, Optional):
- opExpr = Optional(opExpr)
- matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr )
- elif arity == 2:
- if opExpr is not None:
- matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) )
- else:
- matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) )
- elif arity == 3:
- matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \
- Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr )
- else:
- raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
- else:
- raise ValueError("operator must indicate right or left associativity")
- if pa:
- if isinstance(pa, (tuple, list)):
- matchExpr.setParseAction(*pa)
- else:
- matchExpr.setParseAction(pa)
- thisExpr <<= ( matchExpr.setName(termName) | lastExpr )
- lastExpr = thisExpr
- ret <<= lastExpr
- return ret
-
-operatorPrecedence = infixNotation
-"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release."""
-
-dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes")
-sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes")
-quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'|
- Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes")
-unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal")
-
-def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()):
- """
- Helper method for defining nested lists enclosed in opening and closing
- delimiters ("(" and ")" are the default).
-
- Parameters:
- - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression
- - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression
- - content - expression for items within the nested lists (default=C{None})
- - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString})
-
- If an expression is not provided for the content argument, the nested
- expression will capture all whitespace-delimited content between delimiters
- as a list of separate values.
-
- Use the C{ignoreExpr} argument to define expressions that may contain
- opening or closing characters that should not be treated as opening
- or closing characters for nesting, such as quotedString or a comment
- expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}.
- The default is L{quotedString}, but if no expressions are to be ignored,
- then pass C{None} for this argument.
-
- Example::
- data_type = oneOf("void int short long char float double")
- decl_data_type = Combine(data_type + Optional(Word('*')))
- ident = Word(alphas+'_', alphanums+'_')
- number = pyparsing_common.number
- arg = Group(decl_data_type + ident)
- LPAR,RPAR = map(Suppress, "()")
-
- code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment))
-
- c_function = (decl_data_type("type")
- + ident("name")
- + LPAR + Optional(delimitedList(arg), [])("args") + RPAR
- + code_body("body"))
- c_function.ignore(cStyleComment)
-
- source_code = '''
- int is_odd(int x) {
- return (x%2);
- }
-
- int dec_to_hex(char hchar) {
- if (hchar >= '0' && hchar <= '9') {
- return (ord(hchar)-ord('0'));
- } else {
- return (10+ord(hchar)-ord('A'));
- }
- }
- '''
- for func in c_function.searchString(source_code):
- print("%(name)s (%(type)s) args: %(args)s" % func)
-
- prints::
- is_odd (int) args: [['int', 'x']]
- dec_to_hex (int) args: [['char', 'hchar']]
- """
- if opener == closer:
- raise ValueError("opening and closing strings cannot be the same")
- if content is None:
- if isinstance(opener,basestring) and isinstance(closer,basestring):
- if len(opener) == 1 and len(closer)==1:
- if ignoreExpr is not None:
- content = (Combine(OneOrMore(~ignoreExpr +
- CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS
- ).setParseAction(lambda t:t[0].strip()))
- else:
- if ignoreExpr is not None:
- content = (Combine(OneOrMore(~ignoreExpr +
- ~Literal(opener) + ~Literal(closer) +
- CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) +
- CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- raise ValueError("opening and closing arguments must be strings if no content expression is given")
- ret = Forward()
- if ignoreExpr is not None:
- ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) )
- else:
- ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) )
- ret.setName('nested %s%s expression' % (opener,closer))
- return ret
-
-def indentedBlock(blockStatementExpr, indentStack, indent=True):
- """
- Helper method for defining space-delimited indentation blocks, such as
- those used to define block statements in Python source code.
-
- Parameters:
- - blockStatementExpr - expression defining syntax of statement that
- is repeated within the indented block
- - indentStack - list created by caller to manage indentation stack
- (multiple statementWithIndentedBlock expressions within a single grammar
- should share a common indentStack)
- - indent - boolean indicating whether block must be indented beyond the
- the current level; set to False for block of left-most statements
- (default=C{True})
-
- A valid block must contain at least one C{blockStatement}.
-
- Example::
- data = '''
- def A(z):
- A1
- B = 100
- G = A2
- A2
- A3
- B
- def BB(a,b,c):
- BB1
- def BBA():
- bba1
- bba2
- bba3
- C
- D
- def spam(x,y):
- def eggs(z):
- pass
- '''
-
-
- indentStack = [1]
- stmt = Forward()
-
- identifier = Word(alphas, alphanums)
- funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":")
- func_body = indentedBlock(stmt, indentStack)
- funcDef = Group( funcDecl + func_body )
-
- rvalue = Forward()
- funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")")
- rvalue << (funcCall | identifier | Word(nums))
- assignment = Group(identifier + "=" + rvalue)
- stmt << ( funcDef | assignment | identifier )
-
- module_body = OneOrMore(stmt)
-
- parseTree = module_body.parseString(data)
- parseTree.pprint()
- prints::
- [['def',
- 'A',
- ['(', 'z', ')'],
- ':',
- [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]],
- 'B',
- ['def',
- 'BB',
- ['(', 'a', 'b', 'c', ')'],
- ':',
- [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]],
- 'C',
- 'D',
- ['def',
- 'spam',
- ['(', 'x', 'y', ')'],
- ':',
- [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]]
- """
- def checkPeerIndent(s,l,t):
- if l >= len(s): return
- curCol = col(l,s)
- if curCol != indentStack[-1]:
- if curCol > indentStack[-1]:
- raise ParseFatalException(s,l,"illegal nesting")
- raise ParseException(s,l,"not a peer entry")
-
- def checkSubIndent(s,l,t):
- curCol = col(l,s)
- if curCol > indentStack[-1]:
- indentStack.append( curCol )
- else:
- raise ParseException(s,l,"not a subentry")
-
- def checkUnindent(s,l,t):
- if l >= len(s): return
- curCol = col(l,s)
- if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]):
- raise ParseException(s,l,"not an unindent")
- indentStack.pop()
-
- NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress())
- INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT')
- PEER = Empty().setParseAction(checkPeerIndent).setName('')
- UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT')
- if indent:
- smExpr = Group( Optional(NL) +
- #~ FollowedBy(blockStatementExpr) +
- INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT)
- else:
- smExpr = Group( Optional(NL) +
- (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) )
- blockStatementExpr.ignore(_bslash + LineEnd())
- return smExpr.setName('indented block')
-
-alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
-punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
-
-anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag'))
-_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\''))
-commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity")
-def replaceHTMLEntity(t):
- """Helper parser action to replace common HTML entities with their special characters"""
- return _htmlEntityMap.get(t.entity)
-
-# it's easy to get these comment structures wrong - they're very common, so may as well make them available
-cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment")
-"Comment of the form C{/* ... */}"
-
-htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment")
-"Comment of the form C{<!-- ... -->}"
-
-restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line")
-dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment")
-"Comment of the form C{// ... (to end of line)}"
-
-cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment")
-"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}"
-
-javaStyleComment = cppStyleComment
-"Same as C{L{cppStyleComment}}"
-
-pythonStyleComment = Regex(r"#.*").setName("Python style comment")
-"Comment of the form C{# ... (to end of line)}"
-
-_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') +
- Optional( Word(" \t") +
- ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem")
-commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList")
-"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas.
- This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}."""
-
-# some other useful expressions - using lower-case class name since we are really using this as a namespace
-class pyparsing_common:
- """
- Here are some common low-level expressions that may be useful in jump-starting parser development:
- - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>})
- - common L{programming identifiers<identifier>}
- - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>})
- - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>}
- - L{UUID<uuid>}
- - L{comma-separated list<comma_separated_list>}
- Parse actions:
- - C{L{convertToInteger}}
- - C{L{convertToFloat}}
- - C{L{convertToDate}}
- - C{L{convertToDatetime}}
- - C{L{stripHTMLTags}}
- - C{L{upcaseTokens}}
- - C{L{downcaseTokens}}
-
- Example::
- pyparsing_common.number.runTests('''
- # any int or real number, returned as the appropriate type
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- ''')
-
- pyparsing_common.fnumber.runTests('''
- # any int or real number, returned as float
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- ''')
-
- pyparsing_common.hex_integer.runTests('''
- # hex numbers
- 100
- FF
- ''')
-
- pyparsing_common.fraction.runTests('''
- # fractions
- 1/2
- -3/4
- ''')
-
- pyparsing_common.mixed_integer.runTests('''
- # mixed fractions
- 1
- 1/2
- -3/4
- 1-3/4
- ''')
-
- import uuid
- pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
- pyparsing_common.uuid.runTests('''
- # uuid
- 12345678-1234-5678-1234-567812345678
- ''')
- prints::
- # any int or real number, returned as the appropriate type
- 100
- [100]
-
- -100
- [-100]
-
- +100
- [100]
-
- 3.14159
- [3.14159]
-
- 6.02e23
- [6.02e+23]
-
- 1e-12
- [1e-12]
-
- # any int or real number, returned as float
- 100
- [100.0]
-
- -100
- [-100.0]
-
- +100
- [100.0]
-
- 3.14159
- [3.14159]
-
- 6.02e23
- [6.02e+23]
-
- 1e-12
- [1e-12]
-
- # hex numbers
- 100
- [256]
-
- FF
- [255]
-
- # fractions
- 1/2
- [0.5]
-
- -3/4
- [-0.75]
-
- # mixed fractions
- 1
- [1]
-
- 1/2
- [0.5]
-
- -3/4
- [-0.75]
-
- 1-3/4
- [1.75]
-
- # uuid
- 12345678-1234-5678-1234-567812345678
- [UUID('12345678-1234-5678-1234-567812345678')]
- """
-
- convertToInteger = tokenMap(int)
- """
- Parse action for converting parsed integers to Python int
- """
-
- convertToFloat = tokenMap(float)
- """
- Parse action for converting parsed numbers to Python float
- """
-
- integer = Word(nums).setName("integer").setParseAction(convertToInteger)
- """expression that parses an unsigned integer, returns an int"""
-
- hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16))
- """expression that parses a hexadecimal integer, returns an int"""
-
- signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger)
- """expression that parses an integer with optional leading sign, returns an int"""
-
- fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction")
- """fractional expression of an integer divided by an integer, returns a float"""
- fraction.addParseAction(lambda t: t[0]/t[-1])
-
- mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction")
- """mixed integer of the form 'integer - fraction', with optional leading integer, returns float"""
- mixed_integer.addParseAction(sum)
-
- real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat)
- """expression that parses a floating point number and returns a float"""
-
- sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat)
- """expression that parses a floating point number with optional scientific notation and returns a float"""
-
- # streamlining this expression makes the docs nicer-looking
- number = (sci_real | real | signed_integer).streamline()
- """any numeric expression, returns the corresponding Python type"""
-
- fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat)
- """any int or real number, returned as float"""
-
- identifier = Word(alphas+'_', alphanums+'_').setName("identifier")
- """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')"""
-
- ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address")
- "IPv4 address (C{0.0.0.0 - 255.255.255.255})"
-
- _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer")
- _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address")
- _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address")
- _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8)
- _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address")
- ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address")
- "IPv6 address (long, short, or mixed form)"
-
- mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address")
- "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)"
-
- @staticmethod
- def convertToDate(fmt="%Y-%m-%d"):
- """
- Helper to create a parse action for converting parsed date string to Python datetime.date
-
- Params -
- - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"})
-
- Example::
- date_expr = pyparsing_common.iso8601_date.copy()
- date_expr.setParseAction(pyparsing_common.convertToDate())
- print(date_expr.parseString("1999-12-31"))
- prints::
- [datetime.date(1999, 12, 31)]
- """
- def cvt_fn(s,l,t):
- try:
- return datetime.strptime(t[0], fmt).date()
- except ValueError as ve:
- raise ParseException(s, l, str(ve))
- return cvt_fn
-
- @staticmethod
- def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"):
- """
- Helper to create a parse action for converting parsed datetime string to Python datetime.datetime
-
- Params -
- - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"})
-
- Example::
- dt_expr = pyparsing_common.iso8601_datetime.copy()
- dt_expr.setParseAction(pyparsing_common.convertToDatetime())
- print(dt_expr.parseString("1999-12-31T23:59:59.999"))
- prints::
- [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)]
- """
- def cvt_fn(s,l,t):
- try:
- return datetime.strptime(t[0], fmt)
- except ValueError as ve:
- raise ParseException(s, l, str(ve))
- return cvt_fn
-
- iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date")
- "ISO8601 date (C{yyyy-mm-dd})"
-
- iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime")
- "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}"
-
- uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID")
- "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})"
-
- _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress()
- @staticmethod
- def stripHTMLTags(s, l, tokens):
- """
- Parse action to remove HTML tags from web page HTML source
-
- Example::
- # strip HTML links from normal text
- text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
- td,td_end = makeHTMLTags("TD")
- table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end
-
- print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page'
- """
- return pyparsing_common._html_stripper.transformString(tokens[0])
-
- _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',')
- + Optional( White(" \t") ) ) ).streamline().setName("commaItem")
- comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list")
- """Predefined expression of 1 or more printable words or quoted strings, separated by commas."""
-
- upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper()))
- """Parse action to convert tokens to upper case."""
-
- downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower()))
- """Parse action to convert tokens to lower case."""
-
-
-if __name__ == "__main__":
-
- selectToken = CaselessLiteral("select")
- fromToken = CaselessLiteral("from")
-
- ident = Word(alphas, alphanums + "_$")
-
- columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
- columnNameList = Group(delimitedList(columnName)).setName("columns")
- columnSpec = ('*' | columnNameList)
-
- tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
- tableNameList = Group(delimitedList(tableName)).setName("tables")
-
- simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables")
-
- # demo runTests method, including embedded comments in test string
- simpleSQL.runTests("""
- # '*' as column list and dotted table name
- select * from SYS.XYZZY
-
- # caseless match on "SELECT", and casts back to "select"
- SELECT * from XYZZY, ABC
-
- # list of column names, and mixed case SELECT keyword
- Select AA,BB,CC from Sys.dual
-
- # multiple tables
- Select A, B, C from Sys.dual, Table2
-
- # invalid SELECT keyword - should fail
- Xelect A, B, C from Sys.dual
-
- # incomplete command - should fail
- Select
-
- # invalid column name - should fail
- Select ^^^ frox Sys.dual
-
- """)
-
- pyparsing_common.number.runTests("""
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- """)
-
- # any int or real number, returned as float
- pyparsing_common.fnumber.runTests("""
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- """)
-
- pyparsing_common.hex_integer.runTests("""
- 100
- FF
- """)
-
- import uuid
- pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
- pyparsing_common.uuid.runTests("""
- 12345678-1234-5678-1234-567812345678
- """)
+# module pyparsing.py
+#
+# Copyright (c) 2003-2018 Paul T. McGuire
+#
+# 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__doc__ = \
+"""
+pyparsing module - Classes and methods to define and execute parsing grammars
+=============================================================================
+
+The pyparsing module is an alternative approach to creating and executing simple grammars,
+vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you
+don't need to learn a new syntax for defining grammars or matching expressions - the parsing module
+provides a library of classes that you use to construct the grammar directly in Python.
+
+Here is a program to parse "Hello, World!" (or any greeting of the form
+C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements
+(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to
+L{Literal} expressions)::
+
+ from pyparsing import Word, alphas
+
+ # define grammar of a greeting
+ greet = Word(alphas) + "," + Word(alphas) + "!"
+
+ hello = "Hello, World!"
+ print (hello, "->", greet.parseString(hello))
+
+The program outputs the following::
+
+ Hello, World! -> ['Hello', ',', 'World', '!']
+
+The Python representation of the grammar is quite readable, owing to the self-explanatory
+class names, and the use of '+', '|' and '^' operators.
+
+The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an
+object with named attributes.
+
+The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
+ - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.)
+ - quoted strings
+ - embedded comments
+
+
+Getting Started -
+-----------------
+Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing
+classes inherit from. Use the docstrings for examples of how to:
+ - construct literal match expressions from L{Literal} and L{CaselessLiteral} classes
+ - construct character word-group expressions using the L{Word} class
+ - see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes
+ - use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones
+ - associate names with your parsed results using L{ParserElement.setResultsName}
+ - find some helpful expression short-cuts like L{delimitedList} and L{oneOf}
+ - find more useful common expressions in the L{pyparsing_common} namespace class
+"""
+
+__version__ = "2.2.1"
+__versionTime__ = "18 Sep 2018 00:49 UTC"
+__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>"
+
+import string
+from weakref import ref as wkref
+import copy
+import sys
+import warnings
+import re
+import sre_constants
+import collections
+import pprint
+import traceback
+import types
+from datetime import datetime
+
+try:
+ from _thread import RLock
+except ImportError:
+ from threading import RLock
+
+try:
+ # Python 3
+ from collections.abc import Iterable
+ from collections.abc import MutableMapping
+except ImportError:
+ # Python 2.7
+ from collections import Iterable
+ from collections import MutableMapping
+
+try:
+ from collections import OrderedDict as _OrderedDict
+except ImportError:
+ try:
+ from ordereddict import OrderedDict as _OrderedDict
+ except ImportError:
+ _OrderedDict = None
+
+#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) )
+
+__all__ = [
+'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty',
+'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal',
+'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or',
+'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException',
+'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException',
+'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter',
+'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore',
+'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col',
+'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString',
+'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums',
+'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno',
+'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral',
+'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables',
+'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity',
+'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd',
+'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute',
+'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass',
+'CloseMatch', 'tokenMap', 'pyparsing_common',
+]
+
+system_version = tuple(sys.version_info)[:3]
+PY_3 = system_version[0] == 3
+if PY_3:
+ _MAX_INT = sys.maxsize
+ basestring = str
+ unichr = chr
+ _ustr = str
+
+ # build list of single arg builtins, that can be used as parse actions
+ singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max]
+
+else:
+ _MAX_INT = sys.maxint
+ range = xrange
+
+ def _ustr(obj):
+ """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
+ str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
+ then < returns the unicode object | encodes it with the default encoding | ... >.
+ """
+ if isinstance(obj,unicode):
+ return obj
+
+ try:
+ # If this works, then _ustr(obj) has the same behaviour as str(obj), so
+ # it won't break any existing code.
+ return str(obj)
+
+ except UnicodeEncodeError:
+ # Else encode it
+ ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace')
+ xmlcharref = Regex(r'&#\d+;')
+ xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:])
+ return xmlcharref.transformString(ret)
+
+ # build list of single arg builtins, tolerant of Python version, that can be used as parse actions
+ singleArgBuiltins = []
+ import __builtin__
+ for fname in "sum len sorted reversed list tuple set any all min max".split():
+ try:
+ singleArgBuiltins.append(getattr(__builtin__,fname))
+ except AttributeError:
+ continue
+
+_generatorType = type((y for y in range(1)))
+
+def _xml_escape(data):
+ """Escape &, <, >, ", ', etc. in a string of data."""
+
+ # ampersand must be replaced first
+ from_symbols = '&><"\''
+ to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split())
+ for from_,to_ in zip(from_symbols, to_symbols):
+ data = data.replace(from_, to_)
+ return data
+
+class _Constants(object):
+ pass
+
+alphas = string.ascii_uppercase + string.ascii_lowercase
+nums = "0123456789"
+hexnums = nums + "ABCDEFabcdef"
+alphanums = alphas + nums
+_bslash = chr(92)
+printables = "".join(c for c in string.printable if c not in string.whitespace)
+
+class ParseBaseException(Exception):
+ """base exception class for all parsing runtime exceptions"""
+ # Performance tuning: we construct a *lot* of these, so keep this
+ # constructor as small and fast as possible
+ def __init__( self, pstr, loc=0, msg=None, elem=None ):
+ self.loc = loc
+ if msg is None:
+ self.msg = pstr
+ self.pstr = ""
+ else:
+ self.msg = msg
+ self.pstr = pstr
+ self.parserElement = elem
+ self.args = (pstr, loc, msg)
+
+ @classmethod
+ def _from_exception(cls, pe):
+ """
+ internal factory method to simplify creating one type of ParseException
+ from another - avoids having __init__ signature conflicts among subclasses
+ """
+ return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement)
+
+ def __getattr__( self, aname ):
+ """supported attributes by name are:
+ - lineno - returns the line number of the exception text
+ - col - returns the column number of the exception text
+ - line - returns the line containing the exception text
+ """
+ if( aname == "lineno" ):
+ return lineno( self.loc, self.pstr )
+ elif( aname in ("col", "column") ):
+ return col( self.loc, self.pstr )
+ elif( aname == "line" ):
+ return line( self.loc, self.pstr )
+ else:
+ raise AttributeError(aname)
+
+ def __str__( self ):
+ return "%s (at char %d), (line:%d, col:%d)" % \
+ ( self.msg, self.loc, self.lineno, self.column )
+ def __repr__( self ):
+ return _ustr(self)
+ def markInputline( self, markerString = ">!<" ):
+ """Extracts the exception line from the input string, and marks
+ the location of the exception with a special symbol.
+ """
+ line_str = self.line
+ line_column = self.column - 1
+ if markerString:
+ line_str = "".join((line_str[:line_column],
+ markerString, line_str[line_column:]))
+ return line_str.strip()
+ def __dir__(self):
+ return "lineno col line".split() + dir(type(self))
+
+class ParseException(ParseBaseException):
+ """
+ Exception thrown when parse expressions don't match class;
+ supported attributes by name are:
+ - lineno - returns the line number of the exception text
+ - col - returns the column number of the exception text
+ - line - returns the line containing the exception text
+
+ Example::
+ try:
+ Word(nums).setName("integer").parseString("ABC")
+ except ParseException as pe:
+ print(pe)
+ print("column: {}".format(pe.col))
+
+ prints::
+ Expected integer (at char 0), (line:1, col:1)
+ column: 1
+ """
+ pass
+
+class ParseFatalException(ParseBaseException):
+ """user-throwable exception thrown when inconsistent parse content
+ is found; stops all parsing immediately"""
+ pass
+
+class ParseSyntaxException(ParseFatalException):
+ """just like L{ParseFatalException}, but thrown internally when an
+ L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop
+ immediately because an unbacktrackable syntax error has been found"""
+ pass
+
+#~ class ReparseException(ParseBaseException):
+ #~ """Experimental class - parse actions can raise this exception to cause
+ #~ pyparsing to reparse the input string:
+ #~ - with a modified input string, and/or
+ #~ - with a modified start location
+ #~ Set the values of the ReparseException in the constructor, and raise the
+ #~ exception in a parse action to cause pyparsing to use the new string/location.
+ #~ Setting the values as None causes no change to be made.
+ #~ """
+ #~ def __init_( self, newstring, restartLoc ):
+ #~ self.newParseText = newstring
+ #~ self.reparseLoc = restartLoc
+
+class RecursiveGrammarException(Exception):
+ """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive"""
+ def __init__( self, parseElementList ):
+ self.parseElementTrace = parseElementList
+
+ def __str__( self ):
+ return "RecursiveGrammarException: %s" % self.parseElementTrace
+
+class _ParseResultsWithOffset(object):
+ def __init__(self,p1,p2):
+ self.tup = (p1,p2)
+ def __getitem__(self,i):
+ return self.tup[i]
+ def __repr__(self):
+ return repr(self.tup[0])
+ def setOffset(self,i):
+ self.tup = (self.tup[0],i)
+
+class ParseResults(object):
+ """
+ Structured parse results, to provide multiple means of access to the parsed data:
+ - as a list (C{len(results)})
+ - by list index (C{results[0], results[1]}, etc.)
+ - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName})
+
+ Example::
+ integer = Word(nums)
+ date_str = (integer.setResultsName("year") + '/'
+ + integer.setResultsName("month") + '/'
+ + integer.setResultsName("day"))
+ # equivalent form:
+ # date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ # parseString returns a ParseResults object
+ result = date_str.parseString("1999/12/31")
+
+ def test(s, fn=repr):
+ print("%s -> %s" % (s, fn(eval(s))))
+ test("list(result)")
+ test("result[0]")
+ test("result['month']")
+ test("result.day")
+ test("'month' in result")
+ test("'minutes' in result")
+ test("result.dump()", str)
+ prints::
+ list(result) -> ['1999', '/', '12', '/', '31']
+ result[0] -> '1999'
+ result['month'] -> '12'
+ result.day -> '31'
+ 'month' in result -> True
+ 'minutes' in result -> False
+ result.dump() -> ['1999', '/', '12', '/', '31']
+ - day: 31
+ - month: 12
+ - year: 1999
+ """
+ def __new__(cls, toklist=None, name=None, asList=True, modal=True ):
+ if isinstance(toklist, cls):
+ return toklist
+ retobj = object.__new__(cls)
+ retobj.__doinit = True
+ return retobj
+
+ # Performance tuning: we construct a *lot* of these, so keep this
+ # constructor as small and fast as possible
+ def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ):
+ if self.__doinit:
+ self.__doinit = False
+ self.__name = None
+ self.__parent = None
+ self.__accumNames = {}
+ self.__asList = asList
+ self.__modal = modal
+ if toklist is None:
+ toklist = []
+ if isinstance(toklist, list):
+ self.__toklist = toklist[:]
+ elif isinstance(toklist, _generatorType):
+ self.__toklist = list(toklist)
+ else:
+ self.__toklist = [toklist]
+ self.__tokdict = dict()
+
+ if name is not None and name:
+ if not modal:
+ self.__accumNames[name] = 0
+ if isinstance(name,int):
+ name = _ustr(name) # will always return a str, but use _ustr for consistency
+ self.__name = name
+ if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])):
+ if isinstance(toklist,basestring):
+ toklist = [ toklist ]
+ if asList:
+ if isinstance(toklist,ParseResults):
+ self[name] = _ParseResultsWithOffset(toklist.copy(),0)
+ else:
+ self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0)
+ self[name].__name = name
+ else:
+ try:
+ self[name] = toklist[0]
+ except (KeyError,TypeError,IndexError):
+ self[name] = toklist
+
+ def __getitem__( self, i ):
+ if isinstance( i, (int,slice) ):
+ return self.__toklist[i]
+ else:
+ if i not in self.__accumNames:
+ return self.__tokdict[i][-1][0]
+ else:
+ return ParseResults([ v[0] for v in self.__tokdict[i] ])
+
+ def __setitem__( self, k, v, isinstance=isinstance ):
+ if isinstance(v,_ParseResultsWithOffset):
+ self.__tokdict[k] = self.__tokdict.get(k,list()) + [v]
+ sub = v[0]
+ elif isinstance(k,(int,slice)):
+ self.__toklist[k] = v
+ sub = v
+ else:
+ self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)]
+ sub = v
+ if isinstance(sub,ParseResults):
+ sub.__parent = wkref(self)
+
+ def __delitem__( self, i ):
+ if isinstance(i,(int,slice)):
+ mylen = len( self.__toklist )
+ del self.__toklist[i]
+
+ # convert int to slice
+ if isinstance(i, int):
+ if i < 0:
+ i += mylen
+ i = slice(i, i+1)
+ # get removed indices
+ removed = list(range(*i.indices(mylen)))
+ removed.reverse()
+ # fixup indices in token dictionary
+ for name,occurrences in self.__tokdict.items():
+ for j in removed:
+ for k, (value, position) in enumerate(occurrences):
+ occurrences[k] = _ParseResultsWithOffset(value, position - (position > j))
+ else:
+ del self.__tokdict[i]
+
+ def __contains__( self, k ):
+ return k in self.__tokdict
+
+ def __len__( self ): return len( self.__toklist )
+ def __bool__(self): return ( not not self.__toklist )
+ __nonzero__ = __bool__
+ def __iter__( self ): return iter( self.__toklist )
+ def __reversed__( self ): return iter( self.__toklist[::-1] )
+ def _iterkeys( self ):
+ if hasattr(self.__tokdict, "iterkeys"):
+ return self.__tokdict.iterkeys()
+ else:
+ return iter(self.__tokdict)
+
+ def _itervalues( self ):
+ return (self[k] for k in self._iterkeys())
+
+ def _iteritems( self ):
+ return ((k, self[k]) for k in self._iterkeys())
+
+ if PY_3:
+ keys = _iterkeys
+ """Returns an iterator of all named result keys (Python 3.x only)."""
+
+ values = _itervalues
+ """Returns an iterator of all named result values (Python 3.x only)."""
+
+ items = _iteritems
+ """Returns an iterator of all named result key-value tuples (Python 3.x only)."""
+
+ else:
+ iterkeys = _iterkeys
+ """Returns an iterator of all named result keys (Python 2.x only)."""
+
+ itervalues = _itervalues
+ """Returns an iterator of all named result values (Python 2.x only)."""
+
+ iteritems = _iteritems
+ """Returns an iterator of all named result key-value tuples (Python 2.x only)."""
+
+ def keys( self ):
+ """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.iterkeys())
+
+ def values( self ):
+ """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.itervalues())
+
+ def items( self ):
+ """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.iteritems())
+
+ def haskeys( self ):
+ """Since keys() returns an iterator, this method is helpful in bypassing
+ code that looks for the existence of any defined results names."""
+ return bool(self.__tokdict)
+
+ def pop( self, *args, **kwargs):
+ """
+ Removes and returns item at specified index (default=C{last}).
+ Supports both C{list} and C{dict} semantics for C{pop()}. If passed no
+ argument or an integer argument, it will use C{list} semantics
+ and pop tokens from the list of parsed tokens. If passed a
+ non-integer argument (most likely a string), it will use C{dict}
+ semantics and pop the corresponding value from any defined
+ results names. A second default return value argument is
+ supported, just as in C{dict.pop()}.
+
+ Example::
+ def remove_first(tokens):
+ tokens.pop(0)
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+ print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321']
+
+ label = Word(alphas)
+ patt = label("LABEL") + OneOrMore(Word(nums))
+ print(patt.parseString("AAB 123 321").dump())
+
+ # Use pop() in a parse action to remove named result (note that corresponding value is not
+ # removed from list form of results)
+ def remove_LABEL(tokens):
+ tokens.pop("LABEL")
+ return tokens
+ patt.addParseAction(remove_LABEL)
+ print(patt.parseString("AAB 123 321").dump())
+ prints::
+ ['AAB', '123', '321']
+ - LABEL: AAB
+
+ ['AAB', '123', '321']
+ """
+ if not args:
+ args = [-1]
+ for k,v in kwargs.items():
+ if k == 'default':
+ args = (args[0], v)
+ else:
+ raise TypeError("pop() got an unexpected keyword argument '%s'" % k)
+ if (isinstance(args[0], int) or
+ len(args) == 1 or
+ args[0] in self):
+ index = args[0]
+ ret = self[index]
+ del self[index]
+ return ret
+ else:
+ defaultvalue = args[1]
+ return defaultvalue
+
+ def get(self, key, defaultValue=None):
+ """
+ Returns named result matching the given key, or if there is no
+ such name, then returns the given C{defaultValue} or C{None} if no
+ C{defaultValue} is specified.
+
+ Similar to C{dict.get()}.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString("1999/12/31")
+ print(result.get("year")) # -> '1999'
+ print(result.get("hour", "not specified")) # -> 'not specified'
+ print(result.get("hour")) # -> None
+ """
+ if key in self:
+ return self[key]
+ else:
+ return defaultValue
+
+ def insert( self, index, insStr ):
+ """
+ Inserts new element at location index in the list of parsed tokens.
+
+ Similar to C{list.insert()}.
+
+ Example::
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+
+ # use a parse action to insert the parse location in the front of the parsed results
+ def insert_locn(locn, tokens):
+ tokens.insert(0, locn)
+ print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321']
+ """
+ self.__toklist.insert(index, insStr)
+ # fixup indices in token dictionary
+ for name,occurrences in self.__tokdict.items():
+ for k, (value, position) in enumerate(occurrences):
+ occurrences[k] = _ParseResultsWithOffset(value, position + (position > index))
+
+ def append( self, item ):
+ """
+ Add single element to end of ParseResults list of elements.
+
+ Example::
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+
+ # use a parse action to compute the sum of the parsed integers, and add it to the end
+ def append_sum(tokens):
+ tokens.append(sum(map(int, tokens)))
+ print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444]
+ """
+ self.__toklist.append(item)
+
+ def extend( self, itemseq ):
+ """
+ Add sequence of elements to end of ParseResults list of elements.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+
+ # use a parse action to append the reverse of the matched strings, to make a palindrome
+ def make_palindrome(tokens):
+ tokens.extend(reversed([t[::-1] for t in tokens]))
+ return ''.join(tokens)
+ print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl'
+ """
+ if isinstance(itemseq, ParseResults):
+ self += itemseq
+ else:
+ self.__toklist.extend(itemseq)
+
+ def clear( self ):
+ """
+ Clear all elements and results names.
+ """
+ del self.__toklist[:]
+ self.__tokdict.clear()
+
+ def __getattr__( self, name ):
+ try:
+ return self[name]
+ except KeyError:
+ return ""
+
+ if name in self.__tokdict:
+ if name not in self.__accumNames:
+ return self.__tokdict[name][-1][0]
+ else:
+ return ParseResults([ v[0] for v in self.__tokdict[name] ])
+ else:
+ return ""
+
+ def __add__( self, other ):
+ ret = self.copy()
+ ret += other
+ return ret
+
+ def __iadd__( self, other ):
+ if other.__tokdict:
+ offset = len(self.__toklist)
+ addoffset = lambda a: offset if a<0 else a+offset
+ otheritems = other.__tokdict.items()
+ otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) )
+ for (k,vlist) in otheritems for v in vlist]
+ for k,v in otherdictitems:
+ self[k] = v
+ if isinstance(v[0],ParseResults):
+ v[0].__parent = wkref(self)
+
+ self.__toklist += other.__toklist
+ self.__accumNames.update( other.__accumNames )
+ return self
+
+ def __radd__(self, other):
+ if isinstance(other,int) and other == 0:
+ # useful for merging many ParseResults using sum() builtin
+ return self.copy()
+ else:
+ # this may raise a TypeError - so be it
+ return other + self
+
+ def __repr__( self ):
+ return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) )
+
+ def __str__( self ):
+ return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']'
+
+ def _asStringList( self, sep='' ):
+ out = []
+ for item in self.__toklist:
+ if out and sep:
+ out.append(sep)
+ if isinstance( item, ParseResults ):
+ out += item._asStringList()
+ else:
+ out.append( _ustr(item) )
+ return out
+
+ def asList( self ):
+ """
+ Returns the parse results as a nested list of matching tokens, all converted to strings.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+ result = patt.parseString("sldkj lsdkj sldkj")
+ # even though the result prints in string-like form, it is actually a pyparsing ParseResults
+ print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj']
+
+ # Use asList() to create an actual list
+ result_list = result.asList()
+ print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj']
+ """
+ return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist]
+
+ def asDict( self ):
+ """
+ Returns the named parse results as a nested dictionary.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString('12/31/1999')
+ print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]})
+
+ result_dict = result.asDict()
+ print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'}
+
+ # even though a ParseResults supports dict-like access, sometime you just need to have a dict
+ import json
+ print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable
+ print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"}
+ """
+ if PY_3:
+ item_fn = self.items
+ else:
+ item_fn = self.iteritems
+
+ def toItem(obj):
+ if isinstance(obj, ParseResults):
+ if obj.haskeys():
+ return obj.asDict()
+ else:
+ return [toItem(v) for v in obj]
+ else:
+ return obj
+
+ return dict((k,toItem(v)) for k,v in item_fn())
+
+ def copy( self ):
+ """
+ Returns a new copy of a C{ParseResults} object.
+ """
+ ret = ParseResults( self.__toklist )
+ ret.__tokdict = self.__tokdict.copy()
+ ret.__parent = self.__parent
+ ret.__accumNames.update( self.__accumNames )
+ ret.__name = self.__name
+ return ret
+
+ def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ):
+ """
+ (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names.
+ """
+ nl = "\n"
+ out = []
+ namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items()
+ for v in vlist)
+ nextLevelIndent = indent + " "
+
+ # collapse out indents if formatting is not desired
+ if not formatted:
+ indent = ""
+ nextLevelIndent = ""
+ nl = ""
+
+ selfTag = None
+ if doctag is not None:
+ selfTag = doctag
+ else:
+ if self.__name:
+ selfTag = self.__name
+
+ if not selfTag:
+ if namedItemsOnly:
+ return ""
+ else:
+ selfTag = "ITEM"
+
+ out += [ nl, indent, "<", selfTag, ">" ]
+
+ for i,res in enumerate(self.__toklist):
+ if isinstance(res,ParseResults):
+ if i in namedItems:
+ out += [ res.asXML(namedItems[i],
+ namedItemsOnly and doctag is None,
+ nextLevelIndent,
+ formatted)]
+ else:
+ out += [ res.asXML(None,
+ namedItemsOnly and doctag is None,
+ nextLevelIndent,
+ formatted)]
+ else:
+ # individual token, see if there is a name for it
+ resTag = None
+ if i in namedItems:
+ resTag = namedItems[i]
+ if not resTag:
+ if namedItemsOnly:
+ continue
+ else:
+ resTag = "ITEM"
+ xmlBodyText = _xml_escape(_ustr(res))
+ out += [ nl, nextLevelIndent, "<", resTag, ">",
+ xmlBodyText,
+ "</", resTag, ">" ]
+
+ out += [ nl, indent, "</", selfTag, ">" ]
+ return "".join(out)
+
+ def __lookup(self,sub):
+ for k,vlist in self.__tokdict.items():
+ for v,loc in vlist:
+ if sub is v:
+ return k
+ return None
+
+ def getName(self):
+ r"""
+ Returns the results name for this token expression. Useful when several
+ different expressions might match at a particular location.
+
+ Example::
+ integer = Word(nums)
+ ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d")
+ house_number_expr = Suppress('#') + Word(nums, alphanums)
+ user_data = (Group(house_number_expr)("house_number")
+ | Group(ssn_expr)("ssn")
+ | Group(integer)("age"))
+ user_info = OneOrMore(user_data)
+
+ result = user_info.parseString("22 111-22-3333 #221B")
+ for item in result:
+ print(item.getName(), ':', item[0])
+ prints::
+ age : 22
+ ssn : 111-22-3333
+ house_number : 221B
+ """
+ if self.__name:
+ return self.__name
+ elif self.__parent:
+ par = self.__parent()
+ if par:
+ return par.__lookup(self)
+ else:
+ return None
+ elif (len(self) == 1 and
+ len(self.__tokdict) == 1 and
+ next(iter(self.__tokdict.values()))[0][1] in (0,-1)):
+ return next(iter(self.__tokdict.keys()))
+ else:
+ return None
+
+ def dump(self, indent='', depth=0, full=True):
+ """
+ Diagnostic method for listing out the contents of a C{ParseResults}.
+ Accepts an optional C{indent} argument so that this string can be embedded
+ in a nested display of other data.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString('12/31/1999')
+ print(result.dump())
+ prints::
+ ['12', '/', '31', '/', '1999']
+ - day: 1999
+ - month: 31
+ - year: 12
+ """
+ out = []
+ NL = '\n'
+ out.append( indent+_ustr(self.asList()) )
+ if full:
+ if self.haskeys():
+ items = sorted((str(k), v) for k,v in self.items())
+ for k,v in items:
+ if out:
+ out.append(NL)
+ out.append( "%s%s- %s: " % (indent,(' '*depth), k) )
+ if isinstance(v,ParseResults):
+ if v:
+ out.append( v.dump(indent,depth+1) )
+ else:
+ out.append(_ustr(v))
+ else:
+ out.append(repr(v))
+ elif any(isinstance(vv,ParseResults) for vv in self):
+ v = self
+ for i,vv in enumerate(v):
+ if isinstance(vv,ParseResults):
+ out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) ))
+ else:
+ out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv)))
+
+ return "".join(out)
+
+ def pprint(self, *args, **kwargs):
+ """
+ Pretty-printer for parsed results as a list, using the C{pprint} module.
+ Accepts additional positional or keyword args as defined for the
+ C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint})
+
+ Example::
+ ident = Word(alphas, alphanums)
+ num = Word(nums)
+ func = Forward()
+ term = ident | num | Group('(' + func + ')')
+ func <<= ident + Group(Optional(delimitedList(term)))
+ result = func.parseString("fna a,b,(fnb c,d,200),100")
+ result.pprint(width=40)
+ prints::
+ ['fna',
+ ['a',
+ 'b',
+ ['(', 'fnb', ['c', 'd', '200'], ')'],
+ '100']]
+ """
+ pprint.pprint(self.asList(), *args, **kwargs)
+
+ # add support for pickle protocol
+ def __getstate__(self):
+ return ( self.__toklist,
+ ( self.__tokdict.copy(),
+ self.__parent is not None and self.__parent() or None,
+ self.__accumNames,
+ self.__name ) )
+
+ def __setstate__(self,state):
+ self.__toklist = state[0]
+ (self.__tokdict,
+ par,
+ inAccumNames,
+ self.__name) = state[1]
+ self.__accumNames = {}
+ self.__accumNames.update(inAccumNames)
+ if par is not None:
+ self.__parent = wkref(par)
+ else:
+ self.__parent = None
+
+ def __getnewargs__(self):
+ return self.__toklist, self.__name, self.__asList, self.__modal
+
+ def __dir__(self):
+ return (dir(type(self)) + list(self.keys()))
+
+MutableMapping.register(ParseResults)
+
+def col (loc,strg):
+ """Returns current column within a string, counting newlines as line separators.
+ The first column is number 1.
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+ """
+ s = strg
+ return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc)
+
+def lineno(loc,strg):
+ """Returns current line number within a string, counting newlines as line separators.
+ The first line is number 1.
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+ """
+ return strg.count("\n",0,loc) + 1
+
+def line( loc, strg ):
+ """Returns the line of text containing loc within a string, counting newlines as line separators.
+ """
+ lastCR = strg.rfind("\n", 0, loc)
+ nextCR = strg.find("\n", loc)
+ if nextCR >= 0:
+ return strg[lastCR+1:nextCR]
+ else:
+ return strg[lastCR+1:]
+
+def _defaultStartDebugAction( instring, loc, expr ):
+ print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )))
+
+def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ):
+ print ("Matched " + _ustr(expr) + " -> " + str(toks.asList()))
+
+def _defaultExceptionDebugAction( instring, loc, expr, exc ):
+ print ("Exception raised:" + _ustr(exc))
+
+def nullDebugAction(*args):
+ """'Do-nothing' debug action, to suppress debugging output during parsing."""
+ pass
+
+# Only works on Python 3.x - nonlocal is toxic to Python 2 installs
+#~ 'decorator to trim function calls to match the arity of the target'
+#~ def _trim_arity(func, maxargs=3):
+ #~ if func in singleArgBuiltins:
+ #~ return lambda s,l,t: func(t)
+ #~ limit = 0
+ #~ foundArity = False
+ #~ def wrapper(*args):
+ #~ nonlocal limit,foundArity
+ #~ while 1:
+ #~ try:
+ #~ ret = func(*args[limit:])
+ #~ foundArity = True
+ #~ return ret
+ #~ except TypeError:
+ #~ if limit == maxargs or foundArity:
+ #~ raise
+ #~ limit += 1
+ #~ continue
+ #~ return wrapper
+
+# this version is Python 2.x-3.x cross-compatible
+'decorator to trim function calls to match the arity of the target'
+def _trim_arity(func, maxargs=2):
+ if func in singleArgBuiltins:
+ return lambda s,l,t: func(t)
+ limit = [0]
+ foundArity = [False]
+
+ # traceback return data structure changed in Py3.5 - normalize back to plain tuples
+ if system_version[:2] >= (3,5):
+ def extract_stack(limit=0):
+ # special handling for Python 3.5.0 - extra deep call stack by 1
+ offset = -3 if system_version == (3,5,0) else -2
+ frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset]
+ return [frame_summary[:2]]
+ def extract_tb(tb, limit=0):
+ frames = traceback.extract_tb(tb, limit=limit)
+ frame_summary = frames[-1]
+ return [frame_summary[:2]]
+ else:
+ extract_stack = traceback.extract_stack
+ extract_tb = traceback.extract_tb
+
+ # synthesize what would be returned by traceback.extract_stack at the call to
+ # user's parse action 'func', so that we don't incur call penalty at parse time
+
+ LINE_DIFF = 6
+ # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND
+ # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!!
+ this_line = extract_stack(limit=2)[-1]
+ pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF)
+
+ def wrapper(*args):
+ while 1:
+ try:
+ ret = func(*args[limit[0]:])
+ foundArity[0] = True
+ return ret
+ except TypeError:
+ # re-raise TypeErrors if they did not come from our arity testing
+ if foundArity[0]:
+ raise
+ else:
+ try:
+ tb = sys.exc_info()[-1]
+ if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth:
+ raise
+ finally:
+ del tb
+
+ if limit[0] <= maxargs:
+ limit[0] += 1
+ continue
+ raise
+
+ # copy func name to wrapper for sensible debug output
+ func_name = "<parse action>"
+ try:
+ func_name = getattr(func, '__name__',
+ getattr(func, '__class__').__name__)
+ except Exception:
+ func_name = str(func)
+ wrapper.__name__ = func_name
+
+ return wrapper
+
+class ParserElement(object):
+ """Abstract base level parser element class."""
+ DEFAULT_WHITE_CHARS = " \n\t\r"
+ verbose_stacktrace = False
+
+ @staticmethod
+ def setDefaultWhitespaceChars( chars ):
+ r"""
+ Overrides the default whitespace chars
+
+ Example::
+ # default whitespace chars are space, <TAB> and newline
+ OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl']
+
+ # change to just treat newline as significant
+ ParserElement.setDefaultWhitespaceChars(" \t")
+ OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def']
+ """
+ ParserElement.DEFAULT_WHITE_CHARS = chars
+
+ @staticmethod
+ def inlineLiteralsUsing(cls):
+ """
+ Set class to be used for inclusion of string literals into a parser.
+
+ Example::
+ # default literal class used is Literal
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
+
+
+ # change to Suppress
+ ParserElement.inlineLiteralsUsing(Suppress)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ date_str.parseString("1999/12/31") # -> ['1999', '12', '31']
+ """
+ ParserElement._literalStringClass = cls
+
+ def __init__( self, savelist=False ):
+ self.parseAction = list()
+ self.failAction = None
+ #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall
+ self.strRepr = None
+ self.resultsName = None
+ self.saveAsList = savelist
+ self.skipWhitespace = True
+ self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
+ self.copyDefaultWhiteChars = True
+ self.mayReturnEmpty = False # used when checking for left-recursion
+ self.keepTabs = False
+ self.ignoreExprs = list()
+ self.debug = False
+ self.streamlined = False
+ self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index
+ self.errmsg = ""
+ self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all)
+ self.debugActions = ( None, None, None ) #custom debug actions
+ self.re = None
+ self.callPreparse = True # used to avoid redundant calls to preParse
+ self.callDuringTry = False
+
+ def copy( self ):
+ """
+ Make a copy of this C{ParserElement}. Useful for defining different parse actions
+ for the same parsing pattern, using copies of the original parse element.
+
+ Example::
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K")
+ integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
+
+ print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M"))
+ prints::
+ [5120, 100, 655360, 268435456]
+ Equivalent form of C{expr.copy()} is just C{expr()}::
+ integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
+ """
+ cpy = copy.copy( self )
+ cpy.parseAction = self.parseAction[:]
+ cpy.ignoreExprs = self.ignoreExprs[:]
+ if self.copyDefaultWhiteChars:
+ cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
+ return cpy
+
+ def setName( self, name ):
+ """
+ Define name for this expression, makes debugging and exception messages clearer.
+
+ Example::
+ Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1)
+ Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1)
+ """
+ self.name = name
+ self.errmsg = "Expected " + self.name
+ if hasattr(self,"exception"):
+ self.exception.msg = self.errmsg
+ return self
+
+ def setResultsName( self, name, listAllMatches=False ):
+ """
+ Define name for referencing matching tokens as a nested attribute
+ of the returned parse results.
+ NOTE: this returns a *copy* of the original C{ParserElement} object;
+ this is so that the client can define a basic element, such as an
+ integer, and reference it in multiple places with different names.
+
+ You can also set results names using the abbreviated syntax,
+ C{expr("name")} in place of C{expr.setResultsName("name")} -
+ see L{I{__call__}<__call__>}.
+
+ Example::
+ date_str = (integer.setResultsName("year") + '/'
+ + integer.setResultsName("month") + '/'
+ + integer.setResultsName("day"))
+
+ # equivalent form:
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+ """
+ newself = self.copy()
+ if name.endswith("*"):
+ name = name[:-1]
+ listAllMatches=True
+ newself.resultsName = name
+ newself.modalResults = not listAllMatches
+ return newself
+
+ def setBreak(self,breakFlag = True):
+ """Method to invoke the Python pdb debugger when this element is
+ about to be parsed. Set C{breakFlag} to True to enable, False to
+ disable.
+ """
+ if breakFlag:
+ _parseMethod = self._parse
+ def breaker(instring, loc, doActions=True, callPreParse=True):
+ import pdb
+ pdb.set_trace()
+ return _parseMethod( instring, loc, doActions, callPreParse )
+ breaker._originalParseMethod = _parseMethod
+ self._parse = breaker
+ else:
+ if hasattr(self._parse,"_originalParseMethod"):
+ self._parse = self._parse._originalParseMethod
+ return self
+
+ def setParseAction( self, *fns, **kwargs ):
+ """
+ Define one or more actions to perform when successfully matching parse element definition.
+ Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)},
+ C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where:
+ - s = the original string being parsed (see note below)
+ - loc = the location of the matching substring
+ - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object
+ If the functions in fns modify the tokens, they can return them as the return
+ value from fn, and the modified list of tokens will replace the original.
+ Otherwise, fn does not need to return any value.
+
+ Optional keyword arguments:
+ - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{parseString}<parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer + '/' + integer + '/' + integer
+
+ date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
+
+ # use parse action to convert to ints at parse time
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ date_str = integer + '/' + integer + '/' + integer
+
+ # note that integer fields are now ints, not strings
+ date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31]
+ """
+ self.parseAction = list(map(_trim_arity, list(fns)))
+ self.callDuringTry = kwargs.get("callDuringTry", False)
+ return self
+
+ def addParseAction( self, *fns, **kwargs ):
+ """
+ Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}.
+
+ See examples in L{I{copy}<copy>}.
+ """
+ self.parseAction += list(map(_trim_arity, list(fns)))
+ self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
+ return self
+
+ def addCondition(self, *fns, **kwargs):
+ """Add a boolean predicate function to expression's list of parse actions. See
+ L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction},
+ functions passed to C{addCondition} need to return boolean success/fail of the condition.
+
+ Optional keyword arguments:
+ - message = define a custom message to be used in the raised exception
+ - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException
+
+ Example::
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ year_int = integer.copy()
+ year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later")
+ date_str = year_int + '/' + integer + '/' + integer
+
+ result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1)
+ """
+ msg = kwargs.get("message", "failed user-defined condition")
+ exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException
+ for fn in fns:
+ def pa(s,l,t):
+ if not bool(_trim_arity(fn)(s,l,t)):
+ raise exc_type(s,l,msg)
+ self.parseAction.append(pa)
+ self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
+ return self
+
+ def setFailAction( self, fn ):
+ """Define action to perform if parsing fails at this expression.
+ Fail acton fn is a callable function that takes the arguments
+ C{fn(s,loc,expr,err)} where:
+ - s = string being parsed
+ - loc = location where expression match was attempted and failed
+ - expr = the parse expression that failed
+ - err = the exception thrown
+ The function returns no value. It may throw C{L{ParseFatalException}}
+ if it is desired to stop parsing immediately."""
+ self.failAction = fn
+ return self
+
+ def _skipIgnorables( self, instring, loc ):
+ exprsFound = True
+ while exprsFound:
+ exprsFound = False
+ for e in self.ignoreExprs:
+ try:
+ while 1:
+ loc,dummy = e._parse( instring, loc )
+ exprsFound = True
+ except ParseException:
+ pass
+ return loc
+
+ def preParse( self, instring, loc ):
+ if self.ignoreExprs:
+ loc = self._skipIgnorables( instring, loc )
+
+ if self.skipWhitespace:
+ wt = self.whiteChars
+ instrlen = len(instring)
+ while loc < instrlen and instring[loc] in wt:
+ loc += 1
+
+ return loc
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ return loc, []
+
+ def postParse( self, instring, loc, tokenlist ):
+ return tokenlist
+
+ #~ @profile
+ def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
+ debugging = ( self.debug ) #and doActions )
+
+ if debugging or self.failAction:
+ #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))
+ if (self.debugActions[0] ):
+ self.debugActions[0]( instring, loc, self )
+ if callPreParse and self.callPreparse:
+ preloc = self.preParse( instring, loc )
+ else:
+ preloc = loc
+ tokensStart = preloc
+ try:
+ try:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+ except IndexError:
+ raise ParseException( instring, len(instring), self.errmsg, self )
+ except ParseBaseException as err:
+ #~ print ("Exception raised:", err)
+ if self.debugActions[2]:
+ self.debugActions[2]( instring, tokensStart, self, err )
+ if self.failAction:
+ self.failAction( instring, tokensStart, self, err )
+ raise
+ else:
+ if callPreParse and self.callPreparse:
+ preloc = self.preParse( instring, loc )
+ else:
+ preloc = loc
+ tokensStart = preloc
+ if self.mayIndexError or preloc >= len(instring):
+ try:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+ except IndexError:
+ raise ParseException( instring, len(instring), self.errmsg, self )
+ else:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+
+ tokens = self.postParse( instring, loc, tokens )
+
+ retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults )
+ if self.parseAction and (doActions or self.callDuringTry):
+ if debugging:
+ try:
+ for fn in self.parseAction:
+ tokens = fn( instring, tokensStart, retTokens )
+ if tokens is not None:
+ retTokens = ParseResults( tokens,
+ self.resultsName,
+ asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
+ modal=self.modalResults )
+ except ParseBaseException as err:
+ #~ print "Exception raised in user parse action:", err
+ if (self.debugActions[2] ):
+ self.debugActions[2]( instring, tokensStart, self, err )
+ raise
+ else:
+ for fn in self.parseAction:
+ tokens = fn( instring, tokensStart, retTokens )
+ if tokens is not None:
+ retTokens = ParseResults( tokens,
+ self.resultsName,
+ asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
+ modal=self.modalResults )
+ if debugging:
+ #~ print ("Matched",self,"->",retTokens.asList())
+ if (self.debugActions[1] ):
+ self.debugActions[1]( instring, tokensStart, loc, self, retTokens )
+
+ return loc, retTokens
+
+ def tryParse( self, instring, loc ):
+ try:
+ return self._parse( instring, loc, doActions=False )[0]
+ except ParseFatalException:
+ raise ParseException( instring, loc, self.errmsg, self)
+
+ def canParseNext(self, instring, loc):
+ try:
+ self.tryParse(instring, loc)
+ except (ParseException, IndexError):
+ return False
+ else:
+ return True
+
+ class _UnboundedCache(object):
+ def __init__(self):
+ cache = {}
+ self.not_in_cache = not_in_cache = object()
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+
+ def clear(self):
+ cache.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ if _OrderedDict is not None:
+ class _FifoCache(object):
+ def __init__(self, size):
+ self.not_in_cache = not_in_cache = object()
+
+ cache = _OrderedDict()
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+ while len(cache) > size:
+ try:
+ cache.popitem(False)
+ except KeyError:
+ pass
+
+ def clear(self):
+ cache.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ else:
+ class _FifoCache(object):
+ def __init__(self, size):
+ self.not_in_cache = not_in_cache = object()
+
+ cache = {}
+ key_fifo = collections.deque([], size)
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+ while len(key_fifo) > size:
+ cache.pop(key_fifo.popleft(), None)
+ key_fifo.append(key)
+
+ def clear(self):
+ cache.clear()
+ key_fifo.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ # argument cache for optimizing repeated calls when backtracking through recursive expressions
+ packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail
+ packrat_cache_lock = RLock()
+ packrat_cache_stats = [0, 0]
+
+ # this method gets repeatedly called during backtracking with the same arguments -
+ # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression
+ def _parseCache( self, instring, loc, doActions=True, callPreParse=True ):
+ HIT, MISS = 0, 1
+ lookup = (self, instring, loc, callPreParse, doActions)
+ with ParserElement.packrat_cache_lock:
+ cache = ParserElement.packrat_cache
+ value = cache.get(lookup)
+ if value is cache.not_in_cache:
+ ParserElement.packrat_cache_stats[MISS] += 1
+ try:
+ value = self._parseNoCache(instring, loc, doActions, callPreParse)
+ except ParseBaseException as pe:
+ # cache a copy of the exception, without the traceback
+ cache.set(lookup, pe.__class__(*pe.args))
+ raise
+ else:
+ cache.set(lookup, (value[0], value[1].copy()))
+ return value
+ else:
+ ParserElement.packrat_cache_stats[HIT] += 1
+ if isinstance(value, Exception):
+ raise value
+ return (value[0], value[1].copy())
+
+ _parse = _parseNoCache
+
+ @staticmethod
+ def resetCache():
+ ParserElement.packrat_cache.clear()
+ ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats)
+
+ _packratEnabled = False
+ @staticmethod
+ def enablePackrat(cache_size_limit=128):
+ """Enables "packrat" parsing, which adds memoizing to the parsing logic.
+ Repeated parse attempts at the same string location (which happens
+ often in many complex grammars) can immediately return a cached value,
+ instead of re-executing parsing/validating code. Memoizing is done of
+ both valid results and parsing exceptions.
+
+ Parameters:
+ - cache_size_limit - (default=C{128}) - if an integer value is provided
+ will limit the size of the packrat cache; if None is passed, then
+ the cache size will be unbounded; if 0 is passed, the cache will
+ be effectively disabled.
+
+ This speedup may break existing programs that use parse actions that
+ have side-effects. For this reason, packrat parsing is disabled when
+ you first import pyparsing. To activate the packrat feature, your
+ program must call the class method C{ParserElement.enablePackrat()}. If
+ your program uses C{psyco} to "compile as you go", you must call
+ C{enablePackrat} before calling C{psyco.full()}. If you do not do this,
+ Python will crash. For best results, call C{enablePackrat()} immediately
+ after importing pyparsing.
+
+ Example::
+ import pyparsing
+ pyparsing.ParserElement.enablePackrat()
+ """
+ if not ParserElement._packratEnabled:
+ ParserElement._packratEnabled = True
+ if cache_size_limit is None:
+ ParserElement.packrat_cache = ParserElement._UnboundedCache()
+ else:
+ ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit)
+ ParserElement._parse = ParserElement._parseCache
+
+ def parseString( self, instring, parseAll=False ):
+ """
+ Execute the parse expression with the given string.
+ This is the main interface to the client code, once the complete
+ expression has been built.
+
+ If you want the grammar to require that the entire input string be
+ successfully parsed, then set C{parseAll} to True (equivalent to ending
+ the grammar with C{L{StringEnd()}}).
+
+ Note: C{parseString} implicitly calls C{expandtabs()} on the input string,
+ in order to report proper column numbers in parse actions.
+ If the input string contains tabs and
+ the grammar uses parse actions that use the C{loc} argument to index into the
+ string being parsed, you can ensure you have a consistent view of the input
+ string by:
+ - calling C{parseWithTabs} on your grammar before calling C{parseString}
+ (see L{I{parseWithTabs}<parseWithTabs>})
+ - define your parse action using the full C{(s,loc,toks)} signature, and
+ reference the input string using the parse action's C{s} argument
+ - explictly expand the tabs in your input string before calling
+ C{parseString}
+
+ Example::
+ Word('a').parseString('aaaaabaaa') # -> ['aaaaa']
+ Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text
+ """
+ ParserElement.resetCache()
+ if not self.streamlined:
+ self.streamline()
+ #~ self.saveAsList = True
+ for e in self.ignoreExprs:
+ e.streamline()
+ if not self.keepTabs:
+ instring = instring.expandtabs()
+ try:
+ loc, tokens = self._parse( instring, 0 )
+ if parseAll:
+ loc = self.preParse( instring, loc )
+ se = Empty() + StringEnd()
+ se._parse( instring, loc )
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+ else:
+ return tokens
+
+ def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ):
+ """
+ Scan the input string for expression matches. Each match will return the
+ matching tokens, start location, and end location. May be called with optional
+ C{maxMatches} argument, to clip scanning after 'n' matches are found. If
+ C{overlap} is specified, then overlapping matches will be reported.
+
+ Note that the start and end locations are reported relative to the string
+ being parsed. See L{I{parseString}<parseString>} for more information on parsing
+ strings with embedded tabs.
+
+ Example::
+ source = "sldjf123lsdjjkf345sldkjf879lkjsfd987"
+ print(source)
+ for tokens,start,end in Word(alphas).scanString(source):
+ print(' '*start + '^'*(end-start))
+ print(' '*start + tokens[0])
+
+ prints::
+
+ sldjf123lsdjjkf345sldkjf879lkjsfd987
+ ^^^^^
+ sldjf
+ ^^^^^^^
+ lsdjjkf
+ ^^^^^^
+ sldkjf
+ ^^^^^^
+ lkjsfd
+ """
+ if not self.streamlined:
+ self.streamline()
+ for e in self.ignoreExprs:
+ e.streamline()
+
+ if not self.keepTabs:
+ instring = _ustr(instring).expandtabs()
+ instrlen = len(instring)
+ loc = 0
+ preparseFn = self.preParse
+ parseFn = self._parse
+ ParserElement.resetCache()
+ matches = 0
+ try:
+ while loc <= instrlen and matches < maxMatches:
+ try:
+ preloc = preparseFn( instring, loc )
+ nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
+ except ParseException:
+ loc = preloc+1
+ else:
+ if nextLoc > loc:
+ matches += 1
+ yield tokens, preloc, nextLoc
+ if overlap:
+ nextloc = preparseFn( instring, loc )
+ if nextloc > loc:
+ loc = nextLoc
+ else:
+ loc += 1
+ else:
+ loc = nextLoc
+ else:
+ loc = preloc+1
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def transformString( self, instring ):
+ """
+ Extension to C{L{scanString}}, to modify matching text with modified tokens that may
+ be returned from a parse action. To use C{transformString}, define a grammar and
+ attach a parse action to it that modifies the returned token list.
+ Invoking C{transformString()} on a target string will then scan for matches,
+ and replace the matched text patterns according to the logic in the parse
+ action. C{transformString()} returns the resulting transformed string.
+
+ Example::
+ wd = Word(alphas)
+ wd.setParseAction(lambda toks: toks[0].title())
+
+ print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york."))
+ Prints::
+ Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York.
+ """
+ out = []
+ lastE = 0
+ # force preservation of <TAB>s, to minimize unwanted transformation of string, and to
+ # keep string locs straight between transformString and scanString
+ self.keepTabs = True
+ try:
+ for t,s,e in self.scanString( instring ):
+ out.append( instring[lastE:s] )
+ if t:
+ if isinstance(t,ParseResults):
+ out += t.asList()
+ elif isinstance(t,list):
+ out += t
+ else:
+ out.append(t)
+ lastE = e
+ out.append(instring[lastE:])
+ out = [o for o in out if o]
+ return "".join(map(_ustr,_flatten(out)))
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def searchString( self, instring, maxMatches=_MAX_INT ):
+ """
+ Another extension to C{L{scanString}}, simplifying the access to the tokens found
+ to match the given parse expression. May be called with optional
+ C{maxMatches} argument, to clip searching after 'n' matches are found.
+
+ Example::
+ # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters
+ cap_word = Word(alphas.upper(), alphas.lower())
+
+ print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))
+
+ # the sum() builtin can be used to merge results into a single ParseResults object
+ print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")))
+ prints::
+ [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']]
+ ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity']
+ """
+ try:
+ return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False):
+ """
+ Generator method to split a string using the given expression as a separator.
+ May be called with optional C{maxsplit} argument, to limit the number of splits;
+ and the optional C{includeSeparators} argument (default=C{False}), if the separating
+ matching text should be included in the split results.
+
+ Example::
+ punc = oneOf(list(".,;:/-!?"))
+ print(list(punc.split("This, this?, this sentence, is badly punctuated!")))
+ prints::
+ ['This', ' this', '', ' this sentence', ' is badly punctuated', '']
+ """
+ splits = 0
+ last = 0
+ for t,s,e in self.scanString(instring, maxMatches=maxsplit):
+ yield instring[last:s]
+ if includeSeparators:
+ yield t[0]
+ last = e
+ yield instring[last:]
+
+ def __add__(self, other ):
+ """
+ Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement
+ converts them to L{Literal}s by default.
+
+ Example::
+ greet = Word(alphas) + "," + Word(alphas) + "!"
+ hello = "Hello, World!"
+ print (hello, "->", greet.parseString(hello))
+ Prints::
+ Hello, World! -> ['Hello', ',', 'World', '!']
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return And( [ self, other ] )
+
+ def __radd__(self, other ):
+ """
+ Implementation of + operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other + self
+
+ def __sub__(self, other):
+ """
+ Implementation of - operator, returns C{L{And}} with error stop
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return self + And._ErrorStop() + other
+
+ def __rsub__(self, other ):
+ """
+ Implementation of - operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other - self
+
+ def __mul__(self,other):
+ """
+ Implementation of * operator, allows use of C{expr * 3} in place of
+ C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer
+ tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples
+ may also include C{None} as in:
+ - C{expr*(n,None)} or C{expr*(n,)} is equivalent
+ to C{expr*n + L{ZeroOrMore}(expr)}
+ (read as "at least n instances of C{expr}")
+ - C{expr*(None,n)} is equivalent to C{expr*(0,n)}
+ (read as "0 to n instances of C{expr}")
+ - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)}
+ - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)}
+
+ Note that C{expr*(None,n)} does not raise an exception if
+ more than n exprs exist in the input stream; that is,
+ C{expr*(None,n)} does not enforce a maximum number of expr
+ occurrences. If this behavior is desired, then write
+ C{expr*(None,n) + ~expr}
+ """
+ if isinstance(other,int):
+ minElements, optElements = other,0
+ elif isinstance(other,tuple):
+ other = (other + (None, None))[:2]
+ if other[0] is None:
+ other = (0, other[1])
+ if isinstance(other[0],int) and other[1] is None:
+ if other[0] == 0:
+ return ZeroOrMore(self)
+ if other[0] == 1:
+ return OneOrMore(self)
+ else:
+ return self*other[0] + ZeroOrMore(self)
+ elif isinstance(other[0],int) and isinstance(other[1],int):
+ minElements, optElements = other
+ optElements -= minElements
+ else:
+ raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1]))
+ else:
+ raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other))
+
+ if minElements < 0:
+ raise ValueError("cannot multiply ParserElement by negative value")
+ if optElements < 0:
+ raise ValueError("second tuple value must be greater or equal to first tuple value")
+ if minElements == optElements == 0:
+ raise ValueError("cannot multiply ParserElement by 0 or (0,0)")
+
+ if (optElements):
+ def makeOptionalList(n):
+ if n>1:
+ return Optional(self + makeOptionalList(n-1))
+ else:
+ return Optional(self)
+ if minElements:
+ if minElements == 1:
+ ret = self + makeOptionalList(optElements)
+ else:
+ ret = And([self]*minElements) + makeOptionalList(optElements)
+ else:
+ ret = makeOptionalList(optElements)
+ else:
+ if minElements == 1:
+ ret = self
+ else:
+ ret = And([self]*minElements)
+ return ret
+
+ def __rmul__(self, other):
+ return self.__mul__(other)
+
+ def __or__(self, other ):
+ """
+ Implementation of | operator - returns C{L{MatchFirst}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return MatchFirst( [ self, other ] )
+
+ def __ror__(self, other ):
+ """
+ Implementation of | operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other | self
+
+ def __xor__(self, other ):
+ """
+ Implementation of ^ operator - returns C{L{Or}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return Or( [ self, other ] )
+
+ def __rxor__(self, other ):
+ """
+ Implementation of ^ operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other ^ self
+
+ def __and__(self, other ):
+ """
+ Implementation of & operator - returns C{L{Each}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return Each( [ self, other ] )
+
+ def __rand__(self, other ):
+ """
+ Implementation of & operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other & self
+
+ def __invert__( self ):
+ """
+ Implementation of ~ operator - returns C{L{NotAny}}
+ """
+ return NotAny( self )
+
+ def __call__(self, name=None):
+ """
+ Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}.
+
+ If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be
+ passed as C{True}.
+
+ If C{name} is omitted, same as calling C{L{copy}}.
+
+ Example::
+ # these are equivalent
+ userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno")
+ userdata = Word(alphas)("name") + Word(nums+"-")("socsecno")
+ """
+ if name is not None:
+ return self.setResultsName(name)
+ else:
+ return self.copy()
+
+ def suppress( self ):
+ """
+ Suppresses the output of this C{ParserElement}; useful to keep punctuation from
+ cluttering up returned output.
+ """
+ return Suppress( self )
+
+ def leaveWhitespace( self ):
+ """
+ Disables the skipping of whitespace before matching the characters in the
+ C{ParserElement}'s defined pattern. This is normally only used internally by
+ the pyparsing module, but may be needed in some whitespace-sensitive grammars.
+ """
+ self.skipWhitespace = False
+ return self
+
+ def setWhitespaceChars( self, chars ):
+ """
+ Overrides the default whitespace chars
+ """
+ self.skipWhitespace = True
+ self.whiteChars = chars
+ self.copyDefaultWhiteChars = False
+ return self
+
+ def parseWithTabs( self ):
+ """
+ Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string.
+ Must be called before C{parseString} when the input grammar contains elements that
+ match C{<TAB>} characters.
+ """
+ self.keepTabs = True
+ return self
+
+ def ignore( self, other ):
+ """
+ Define expression to be ignored (e.g., comments) while doing pattern
+ matching; may be called repeatedly, to define multiple comment or other
+ ignorable patterns.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+ patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj']
+
+ patt.ignore(cStyleComment)
+ patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd']
+ """
+ if isinstance(other, basestring):
+ other = Suppress(other)
+
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ self.ignoreExprs.append(other)
+ else:
+ self.ignoreExprs.append( Suppress( other.copy() ) )
+ return self
+
+ def setDebugActions( self, startAction, successAction, exceptionAction ):
+ """
+ Enable display of debugging messages while doing pattern matching.
+ """
+ self.debugActions = (startAction or _defaultStartDebugAction,
+ successAction or _defaultSuccessDebugAction,
+ exceptionAction or _defaultExceptionDebugAction)
+ self.debug = True
+ return self
+
+ def setDebug( self, flag=True ):
+ """
+ Enable display of debugging messages while doing pattern matching.
+ Set C{flag} to True to enable, False to disable.
+
+ Example::
+ wd = Word(alphas).setName("alphaword")
+ integer = Word(nums).setName("numword")
+ term = wd | integer
+
+ # turn on debugging for wd
+ wd.setDebug()
+
+ OneOrMore(term).parseString("abc 123 xyz 890")
+
+ prints::
+ Match alphaword at loc 0(1,1)
+ Matched alphaword -> ['abc']
+ Match alphaword at loc 3(1,4)
+ Exception raised:Expected alphaword (at char 4), (line:1, col:5)
+ Match alphaword at loc 7(1,8)
+ Matched alphaword -> ['xyz']
+ Match alphaword at loc 11(1,12)
+ Exception raised:Expected alphaword (at char 12), (line:1, col:13)
+ Match alphaword at loc 15(1,16)
+ Exception raised:Expected alphaword (at char 15), (line:1, col:16)
+
+ The output shown is that produced by the default debug actions - custom debug actions can be
+ specified using L{setDebugActions}. Prior to attempting
+ to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"}
+ is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"}
+ message is shown. Also note the use of L{setName} to assign a human-readable name to the expression,
+ which makes debugging and exception messages easier to understand - for instance, the default
+ name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}.
+ """
+ if flag:
+ self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction )
+ else:
+ self.debug = False
+ return self
+
+ def __str__( self ):
+ return self.name
+
+ def __repr__( self ):
+ return _ustr(self)
+
+ def streamline( self ):
+ self.streamlined = True
+ self.strRepr = None
+ return self
+
+ def checkRecursion( self, parseElementList ):
+ pass
+
+ def validate( self, validateTrace=[] ):
+ """
+ Check defined expressions for valid structure, check for infinite recursive definitions.
+ """
+ self.checkRecursion( [] )
+
+ def parseFile( self, file_or_filename, parseAll=False ):
+ """
+ Execute the parse expression on the given file or filename.
+ If a filename is specified (instead of a file object),
+ the entire file is opened, read, and closed before parsing.
+ """
+ try:
+ file_contents = file_or_filename.read()
+ except AttributeError:
+ with open(file_or_filename, "r") as f:
+ file_contents = f.read()
+ try:
+ return self.parseString(file_contents, parseAll)
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def __eq__(self,other):
+ if isinstance(other, ParserElement):
+ return self is other or vars(self) == vars(other)
+ elif isinstance(other, basestring):
+ return self.matches(other)
+ else:
+ return super(ParserElement,self)==other
+
+ def __ne__(self,other):
+ return not (self == other)
+
+ def __hash__(self):
+ return hash(id(self))
+
+ def __req__(self,other):
+ return self == other
+
+ def __rne__(self,other):
+ return not (self == other)
+
+ def matches(self, testString, parseAll=True):
+ """
+ Method for quick testing of a parser against a test string. Good for simple
+ inline microtests of sub expressions while building up larger parser.
+
+ Parameters:
+ - testString - to test against this expression for a match
+ - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
+
+ Example::
+ expr = Word(nums)
+ assert expr.matches("100")
+ """
+ try:
+ self.parseString(_ustr(testString), parseAll=parseAll)
+ return True
+ except ParseBaseException:
+ return False
+
+ def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False):
+ """
+ Execute the parse expression on a series of test strings, showing each
+ test, the parsed results or where the parse failed. Quick and easy way to
+ run a parse expression against a list of sample strings.
+
+ Parameters:
+ - tests - a list of separate test strings, or a multiline string of test strings
+ - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
+ - comment - (default=C{'#'}) - expression for indicating embedded comments in the test
+ string; pass None to disable comment filtering
+ - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline;
+ if False, only dump nested list
+ - printResults - (default=C{True}) prints test output to stdout
+ - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing
+
+ Returns: a (success, results) tuple, where success indicates that all tests succeeded
+ (or failed if C{failureTests} is True), and the results contain a list of lines of each
+ test's output
+
+ Example::
+ number_expr = pyparsing_common.number.copy()
+
+ result = number_expr.runTests('''
+ # unsigned integer
+ 100
+ # negative integer
+ -100
+ # float with scientific notation
+ 6.02e23
+ # integer with scientific notation
+ 1e-12
+ ''')
+ print("Success" if result[0] else "Failed!")
+
+ result = number_expr.runTests('''
+ # stray character
+ 100Z
+ # missing leading digit before '.'
+ -.100
+ # too many '.'
+ 3.14.159
+ ''', failureTests=True)
+ print("Success" if result[0] else "Failed!")
+ prints::
+ # unsigned integer
+ 100
+ [100]
+
+ # negative integer
+ -100
+ [-100]
+
+ # float with scientific notation
+ 6.02e23
+ [6.02e+23]
+
+ # integer with scientific notation
+ 1e-12
+ [1e-12]
+
+ Success
+
+ # stray character
+ 100Z
+ ^
+ FAIL: Expected end of text (at char 3), (line:1, col:4)
+
+ # missing leading digit before '.'
+ -.100
+ ^
+ FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1)
+
+ # too many '.'
+ 3.14.159
+ ^
+ FAIL: Expected end of text (at char 4), (line:1, col:5)
+
+ Success
+
+ Each test string must be on a single line. If you want to test a string that spans multiple
+ lines, create a test like this::
+
+ expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines")
+
+ (Note that this is a raw string literal, you must include the leading 'r'.)
+ """
+ if isinstance(tests, basestring):
+ tests = list(map(str.strip, tests.rstrip().splitlines()))
+ if isinstance(comment, basestring):
+ comment = Literal(comment)
+ allResults = []
+ comments = []
+ success = True
+ for t in tests:
+ if comment is not None and comment.matches(t, False) or comments and not t:
+ comments.append(t)
+ continue
+ if not t:
+ continue
+ out = ['\n'.join(comments), t]
+ comments = []
+ try:
+ t = t.replace(r'\n','\n')
+ result = self.parseString(t, parseAll=parseAll)
+ out.append(result.dump(full=fullDump))
+ success = success and not failureTests
+ except ParseBaseException as pe:
+ fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else ""
+ if '\n' in t:
+ out.append(line(pe.loc, t))
+ out.append(' '*(col(pe.loc,t)-1) + '^' + fatal)
+ else:
+ out.append(' '*pe.loc + '^' + fatal)
+ out.append("FAIL: " + str(pe))
+ success = success and failureTests
+ result = pe
+ except Exception as exc:
+ out.append("FAIL-EXCEPTION: " + str(exc))
+ success = success and failureTests
+ result = exc
+
+ if printResults:
+ if fullDump:
+ out.append('')
+ print('\n'.join(out))
+
+ allResults.append((t, result))
+
+ return success, allResults
+
+
+class Token(ParserElement):
+ """
+ Abstract C{ParserElement} subclass, for defining atomic matching patterns.
+ """
+ def __init__( self ):
+ super(Token,self).__init__( savelist=False )
+
+
+class Empty(Token):
+ """
+ An empty token, will always match.
+ """
+ def __init__( self ):
+ super(Empty,self).__init__()
+ self.name = "Empty"
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+
+
+class NoMatch(Token):
+ """
+ A token that will never match.
+ """
+ def __init__( self ):
+ super(NoMatch,self).__init__()
+ self.name = "NoMatch"
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+ self.errmsg = "Unmatchable token"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ raise ParseException(instring, loc, self.errmsg, self)
+
+
+class Literal(Token):
+ """
+ Token to exactly match a specified string.
+
+ Example::
+ Literal('blah').parseString('blah') # -> ['blah']
+ Literal('blah').parseString('blahfooblah') # -> ['blah']
+ Literal('blah').parseString('bla') # -> Exception: Expected "blah"
+
+ For case-insensitive matching, use L{CaselessLiteral}.
+
+ For keyword matching (force word break before and after the matched string),
+ use L{Keyword} or L{CaselessKeyword}.
+ """
+ def __init__( self, matchString ):
+ super(Literal,self).__init__()
+ self.match = matchString
+ self.matchLen = len(matchString)
+ try:
+ self.firstMatchChar = matchString[0]
+ except IndexError:
+ warnings.warn("null string passed to Literal; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+ self.__class__ = Empty
+ self.name = '"%s"' % _ustr(self.match)
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = False
+ self.mayIndexError = False
+
+ # Performance tuning: this routine gets called a *lot*
+ # if this is a single character match string and the first character matches,
+ # short-circuit as quickly as possible, and avoid calling startswith
+ #~ @profile
+ def parseImpl( self, instring, loc, doActions=True ):
+ if (instring[loc] == self.firstMatchChar and
+ (self.matchLen==1 or instring.startswith(self.match,loc)) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+_L = Literal
+ParserElement._literalStringClass = Literal
+
+class Keyword(Token):
+ """
+ Token to exactly match a specified string as a keyword, that is, it must be
+ immediately followed by a non-keyword character. Compare with C{L{Literal}}:
+ - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}.
+ - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'}
+ Accepts two optional constructor arguments in addition to the keyword string:
+ - C{identChars} is a string of characters that would be valid identifier characters,
+ defaulting to all alphanumerics + "_" and "$"
+ - C{caseless} allows case-insensitive matching, default is C{False}.
+
+ Example::
+ Keyword("start").parseString("start") # -> ['start']
+ Keyword("start").parseString("starting") # -> Exception
+
+ For case-insensitive matching, use L{CaselessKeyword}.
+ """
+ DEFAULT_KEYWORD_CHARS = alphanums+"_$"
+
+ def __init__( self, matchString, identChars=None, caseless=False ):
+ super(Keyword,self).__init__()
+ if identChars is None:
+ identChars = Keyword.DEFAULT_KEYWORD_CHARS
+ self.match = matchString
+ self.matchLen = len(matchString)
+ try:
+ self.firstMatchChar = matchString[0]
+ except IndexError:
+ warnings.warn("null string passed to Keyword; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+ self.name = '"%s"' % self.match
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = False
+ self.mayIndexError = False
+ self.caseless = caseless
+ if caseless:
+ self.caselessmatch = matchString.upper()
+ identChars = identChars.upper()
+ self.identChars = set(identChars)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.caseless:
+ if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and
+ (loc == 0 or instring[loc-1].upper() not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ else:
+ if (instring[loc] == self.firstMatchChar and
+ (self.matchLen==1 or instring.startswith(self.match,loc)) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and
+ (loc == 0 or instring[loc-1] not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ def copy(self):
+ c = super(Keyword,self).copy()
+ c.identChars = Keyword.DEFAULT_KEYWORD_CHARS
+ return c
+
+ @staticmethod
+ def setDefaultKeywordChars( chars ):
+ """Overrides the default Keyword chars
+ """
+ Keyword.DEFAULT_KEYWORD_CHARS = chars
+
+class CaselessLiteral(Literal):
+ """
+ Token to match a specified string, ignoring case of letters.
+ Note: the matched results will always be in the case of the given
+ match string, NOT the case of the input text.
+
+ Example::
+ OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD']
+
+ (Contrast with example for L{CaselessKeyword}.)
+ """
+ def __init__( self, matchString ):
+ super(CaselessLiteral,self).__init__( matchString.upper() )
+ # Preserve the defining literal.
+ self.returnString = matchString
+ self.name = "'%s'" % self.returnString
+ self.errmsg = "Expected " + self.name
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if instring[ loc:loc+self.matchLen ].upper() == self.match:
+ return loc+self.matchLen, self.returnString
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class CaselessKeyword(Keyword):
+ """
+ Caseless version of L{Keyword}.
+
+ Example::
+ OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD']
+
+ (Contrast with example for L{CaselessLiteral}.)
+ """
+ def __init__( self, matchString, identChars=None ):
+ super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True )
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class CloseMatch(Token):
+ """
+ A variation on L{Literal} which matches "close" matches, that is,
+ strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters:
+ - C{match_string} - string to be matched
+ - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match
+
+ The results from a successful parse will contain the matched text from the input string and the following named results:
+ - C{mismatches} - a list of the positions within the match_string where mismatches were found
+ - C{original} - the original match_string used to compare against the input string
+
+ If C{mismatches} is an empty list, then the match was an exact match.
+
+ Example::
+ patt = CloseMatch("ATCATCGAATGGA")
+ patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']})
+ patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1)
+
+ # exact match
+ patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']})
+
+ # close match allowing up to 2 mismatches
+ patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2)
+ patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']})
+ """
+ def __init__(self, match_string, maxMismatches=1):
+ super(CloseMatch,self).__init__()
+ self.name = match_string
+ self.match_string = match_string
+ self.maxMismatches = maxMismatches
+ self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches)
+ self.mayIndexError = False
+ self.mayReturnEmpty = False
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ start = loc
+ instrlen = len(instring)
+ maxloc = start + len(self.match_string)
+
+ if maxloc <= instrlen:
+ match_string = self.match_string
+ match_stringloc = 0
+ mismatches = []
+ maxMismatches = self.maxMismatches
+
+ for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)):
+ src,mat = s_m
+ if src != mat:
+ mismatches.append(match_stringloc)
+ if len(mismatches) > maxMismatches:
+ break
+ else:
+ loc = match_stringloc + 1
+ results = ParseResults([instring[start:loc]])
+ results['original'] = self.match_string
+ results['mismatches'] = mismatches
+ return loc, results
+
+ raise ParseException(instring, loc, self.errmsg, self)
+
+
+class Word(Token):
+ """
+ Token for matching words composed of allowed character sets.
+ Defined with string containing all allowed initial characters,
+ an optional string containing allowed body characters (if omitted,
+ defaults to the initial character set), and an optional minimum,
+ maximum, and/or exact length. The default value for C{min} is 1 (a
+ minimum value < 1 is not valid); the default values for C{max} and C{exact}
+ are 0, meaning no maximum or exact length restriction. An optional
+ C{excludeChars} parameter can list characters that might be found in
+ the input C{bodyChars} string; useful to define a word of all printables
+ except for one or two characters, for instance.
+
+ L{srange} is useful for defining custom character set strings for defining
+ C{Word} expressions, using range notation from regular expression character sets.
+
+ A common mistake is to use C{Word} to match a specific literal string, as in
+ C{Word("Address")}. Remember that C{Word} uses the string argument to define
+ I{sets} of matchable characters. This expression would match "Add", "AAA",
+ "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'.
+ To match an exact literal string, use L{Literal} or L{Keyword}.
+
+ pyparsing includes helper strings for building Words:
+ - L{alphas}
+ - L{nums}
+ - L{alphanums}
+ - L{hexnums}
+ - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.)
+ - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.)
+ - L{printables} (any non-whitespace character)
+
+ Example::
+ # a word composed of digits
+ integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9"))
+
+ # a word with a leading capital, and zero or more lowercase
+ capital_word = Word(alphas.upper(), alphas.lower())
+
+ # hostnames are alphanumeric, with leading alpha, and '-'
+ hostname = Word(alphas, alphanums+'-')
+
+ # roman numeral (not a strict parser, accepts invalid mix of characters)
+ roman = Word("IVXLCDM")
+
+ # any string of non-whitespace characters, except for ','
+ csv_value = Word(printables, excludeChars=",")
+ """
+ def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ):
+ super(Word,self).__init__()
+ if excludeChars:
+ initChars = ''.join(c for c in initChars if c not in excludeChars)
+ if bodyChars:
+ bodyChars = ''.join(c for c in bodyChars if c not in excludeChars)
+ self.initCharsOrig = initChars
+ self.initChars = set(initChars)
+ if bodyChars :
+ self.bodyCharsOrig = bodyChars
+ self.bodyChars = set(bodyChars)
+ else:
+ self.bodyCharsOrig = initChars
+ self.bodyChars = set(initChars)
+
+ self.maxSpecified = max > 0
+
+ if min < 1:
+ raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted")
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.asKeyword = asKeyword
+
+ if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0):
+ if self.bodyCharsOrig == self.initCharsOrig:
+ self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig)
+ elif len(self.initCharsOrig) == 1:
+ self.reString = "%s[%s]*" % \
+ (re.escape(self.initCharsOrig),
+ _escapeRegexRangeChars(self.bodyCharsOrig),)
+ else:
+ self.reString = "[%s][%s]*" % \
+ (_escapeRegexRangeChars(self.initCharsOrig),
+ _escapeRegexRangeChars(self.bodyCharsOrig),)
+ if self.asKeyword:
+ self.reString = r"\b"+self.reString+r"\b"
+ try:
+ self.re = re.compile( self.reString )
+ except Exception:
+ self.re = None
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.re:
+ result = self.re.match(instring,loc)
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ return loc, result.group()
+
+ if not(instring[ loc ] in self.initChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ start = loc
+ loc += 1
+ instrlen = len(instring)
+ bodychars = self.bodyChars
+ maxloc = start + self.maxLen
+ maxloc = min( maxloc, instrlen )
+ while loc < maxloc and instring[loc] in bodychars:
+ loc += 1
+
+ throwException = False
+ if loc - start < self.minLen:
+ throwException = True
+ if self.maxSpecified and loc < instrlen and instring[loc] in bodychars:
+ throwException = True
+ if self.asKeyword:
+ if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars):
+ throwException = True
+
+ if throwException:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+ def __str__( self ):
+ try:
+ return super(Word,self).__str__()
+ except Exception:
+ pass
+
+
+ if self.strRepr is None:
+
+ def charsAsStr(s):
+ if len(s)>4:
+ return s[:4]+"..."
+ else:
+ return s
+
+ if ( self.initCharsOrig != self.bodyCharsOrig ):
+ self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) )
+ else:
+ self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig)
+
+ return self.strRepr
+
+
+class Regex(Token):
+ r"""
+ Token for matching strings that match a given regular expression.
+ Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
+ If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as
+ named parse results.
+
+ Example::
+ realnum = Regex(r"[+-]?\d+\.\d*")
+ date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)')
+ # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
+ roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})")
+ """
+ compiledREtype = type(re.compile("[A-Z]"))
+ def __init__( self, pattern, flags=0):
+ """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags."""
+ super(Regex,self).__init__()
+
+ if isinstance(pattern, basestring):
+ if not pattern:
+ warnings.warn("null string passed to Regex; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+
+ self.pattern = pattern
+ self.flags = flags
+
+ try:
+ self.re = re.compile(self.pattern, self.flags)
+ self.reString = self.pattern
+ except sre_constants.error:
+ warnings.warn("invalid pattern (%s) passed to Regex" % pattern,
+ SyntaxWarning, stacklevel=2)
+ raise
+
+ elif isinstance(pattern, Regex.compiledREtype):
+ self.re = pattern
+ self.pattern = \
+ self.reString = str(pattern)
+ self.flags = flags
+
+ else:
+ raise ValueError("Regex may only be constructed with a string or a compiled RE object")
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ result = self.re.match(instring,loc)
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ d = result.groupdict()
+ ret = ParseResults(result.group())
+ if d:
+ for k in d:
+ ret[k] = d[k]
+ return loc,ret
+
+ def __str__( self ):
+ try:
+ return super(Regex,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "Re:(%s)" % repr(self.pattern)
+
+ return self.strRepr
+
+
+class QuotedString(Token):
+ r"""
+ Token for matching strings that are delimited by quoting characters.
+
+ Defined with the following parameters:
+ - quoteChar - string of one or more characters defining the quote delimiting string
+ - escChar - character to escape quotes, typically backslash (default=C{None})
+ - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None})
+ - multiline - boolean indicating whether quotes can span multiple lines (default=C{False})
+ - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True})
+ - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar)
+ - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True})
+
+ Example::
+ qs = QuotedString('"')
+ print(qs.searchString('lsjdf "This is the quote" sldjf'))
+ complex_qs = QuotedString('{{', endQuoteChar='}}')
+ print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf'))
+ sql_qs = QuotedString('"', escQuote='""')
+ print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf'))
+ prints::
+ [['This is the quote']]
+ [['This is the "quote"']]
+ [['This is the quote with "embedded" quotes']]
+ """
+ def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True):
+ super(QuotedString,self).__init__()
+
+ # remove white space from quote chars - wont work anyway
+ quoteChar = quoteChar.strip()
+ if not quoteChar:
+ warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
+ raise SyntaxError()
+
+ if endQuoteChar is None:
+ endQuoteChar = quoteChar
+ else:
+ endQuoteChar = endQuoteChar.strip()
+ if not endQuoteChar:
+ warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
+ raise SyntaxError()
+
+ self.quoteChar = quoteChar
+ self.quoteCharLen = len(quoteChar)
+ self.firstQuoteChar = quoteChar[0]
+ self.endQuoteChar = endQuoteChar
+ self.endQuoteCharLen = len(endQuoteChar)
+ self.escChar = escChar
+ self.escQuote = escQuote
+ self.unquoteResults = unquoteResults
+ self.convertWhitespaceEscapes = convertWhitespaceEscapes
+
+ if multiline:
+ self.flags = re.MULTILINE | re.DOTALL
+ self.pattern = r'%s(?:[^%s%s]' % \
+ ( re.escape(self.quoteChar),
+ _escapeRegexRangeChars(self.endQuoteChar[0]),
+ (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
+ else:
+ self.flags = 0
+ self.pattern = r'%s(?:[^%s\n\r%s]' % \
+ ( re.escape(self.quoteChar),
+ _escapeRegexRangeChars(self.endQuoteChar[0]),
+ (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
+ if len(self.endQuoteChar) > 1:
+ self.pattern += (
+ '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]),
+ _escapeRegexRangeChars(self.endQuoteChar[i]))
+ for i in range(len(self.endQuoteChar)-1,0,-1)) + ')'
+ )
+ if escQuote:
+ self.pattern += (r'|(?:%s)' % re.escape(escQuote))
+ if escChar:
+ self.pattern += (r'|(?:%s.)' % re.escape(escChar))
+ self.escCharReplacePattern = re.escape(self.escChar)+"(.)"
+ self.pattern += (r')*%s' % re.escape(self.endQuoteChar))
+
+ try:
+ self.re = re.compile(self.pattern, self.flags)
+ self.reString = self.pattern
+ except sre_constants.error:
+ warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern,
+ SyntaxWarning, stacklevel=2)
+ raise
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ ret = result.group()
+
+ if self.unquoteResults:
+
+ # strip off quotes
+ ret = ret[self.quoteCharLen:-self.endQuoteCharLen]
+
+ if isinstance(ret,basestring):
+ # replace escaped whitespace
+ if '\\' in ret and self.convertWhitespaceEscapes:
+ ws_map = {
+ r'\t' : '\t',
+ r'\n' : '\n',
+ r'\f' : '\f',
+ r'\r' : '\r',
+ }
+ for wslit,wschar in ws_map.items():
+ ret = ret.replace(wslit, wschar)
+
+ # replace escaped characters
+ if self.escChar:
+ ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret)
+
+ # replace escaped quotes
+ if self.escQuote:
+ ret = ret.replace(self.escQuote, self.endQuoteChar)
+
+ return loc, ret
+
+ def __str__( self ):
+ try:
+ return super(QuotedString,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar)
+
+ return self.strRepr
+
+
+class CharsNotIn(Token):
+ """
+ Token for matching words composed of characters I{not} in a given set (will
+ include whitespace in matched characters if not listed in the provided exclusion set - see example).
+ Defined with string containing all disallowed characters, and an optional
+ minimum, maximum, and/or exact length. The default value for C{min} is 1 (a
+ minimum value < 1 is not valid); the default values for C{max} and C{exact}
+ are 0, meaning no maximum or exact length restriction.
+
+ Example::
+ # define a comma-separated-value as anything that is not a ','
+ csv_value = CharsNotIn(',')
+ print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213"))
+ prints::
+ ['dkls', 'lsdkjf', 's12 34', '@!#', '213']
+ """
+ def __init__( self, notChars, min=1, max=0, exact=0 ):
+ super(CharsNotIn,self).__init__()
+ self.skipWhitespace = False
+ self.notChars = notChars
+
+ if min < 1:
+ raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted")
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = ( self.minLen == 0 )
+ self.mayIndexError = False
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if instring[loc] in self.notChars:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ start = loc
+ loc += 1
+ notchars = self.notChars
+ maxlen = min( start+self.maxLen, len(instring) )
+ while loc < maxlen and \
+ (instring[loc] not in notchars):
+ loc += 1
+
+ if loc - start < self.minLen:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+ def __str__( self ):
+ try:
+ return super(CharsNotIn, self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ if len(self.notChars) > 4:
+ self.strRepr = "!W:(%s...)" % self.notChars[:4]
+ else:
+ self.strRepr = "!W:(%s)" % self.notChars
+
+ return self.strRepr
+
+class White(Token):
+ """
+ Special matching class for matching whitespace. Normally, whitespace is ignored
+ by pyparsing grammars. This class is included when some whitespace structures
+ are significant. Define with a string containing the whitespace characters to be
+ matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments,
+ as defined for the C{L{Word}} class.
+ """
+ whiteStrs = {
+ " " : "<SPC>",
+ "\t": "<TAB>",
+ "\n": "<LF>",
+ "\r": "<CR>",
+ "\f": "<FF>",
+ }
+ def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0):
+ super(White,self).__init__()
+ self.matchWhite = ws
+ self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) )
+ #~ self.leaveWhitespace()
+ self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite))
+ self.mayReturnEmpty = True
+ self.errmsg = "Expected " + self.name
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if not(instring[ loc ] in self.matchWhite):
+ raise ParseException(instring, loc, self.errmsg, self)
+ start = loc
+ loc += 1
+ maxloc = start + self.maxLen
+ maxloc = min( maxloc, len(instring) )
+ while loc < maxloc and instring[loc] in self.matchWhite:
+ loc += 1
+
+ if loc - start < self.minLen:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+
+class _PositionToken(Token):
+ def __init__( self ):
+ super(_PositionToken,self).__init__()
+ self.name=self.__class__.__name__
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+
+class GoToColumn(_PositionToken):
+ """
+ Token to advance to a specific column of input text; useful for tabular report scraping.
+ """
+ def __init__( self, colno ):
+ super(GoToColumn,self).__init__()
+ self.col = colno
+
+ def preParse( self, instring, loc ):
+ if col(loc,instring) != self.col:
+ instrlen = len(instring)
+ if self.ignoreExprs:
+ loc = self._skipIgnorables( instring, loc )
+ while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col :
+ loc += 1
+ return loc
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ thiscol = col( loc, instring )
+ if thiscol > self.col:
+ raise ParseException( instring, loc, "Text not in expected column", self )
+ newloc = loc + self.col - thiscol
+ ret = instring[ loc: newloc ]
+ return newloc, ret
+
+
+class LineStart(_PositionToken):
+ """
+ Matches if current position is at the beginning of a line within the parse string
+
+ Example::
+
+ test = '''\
+ AAA this line
+ AAA and this line
+ AAA but not this one
+ B AAA and definitely not this one
+ '''
+
+ for t in (LineStart() + 'AAA' + restOfLine).searchString(test):
+ print(t)
+
+ Prints::
+ ['AAA', ' this line']
+ ['AAA', ' and this line']
+
+ """
+ def __init__( self ):
+ super(LineStart,self).__init__()
+ self.errmsg = "Expected start of line"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if col(loc, instring) == 1:
+ return loc, []
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class LineEnd(_PositionToken):
+ """
+ Matches if current position is at the end of a line within the parse string
+ """
+ def __init__( self ):
+ super(LineEnd,self).__init__()
+ self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") )
+ self.errmsg = "Expected end of line"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc<len(instring):
+ if instring[loc] == "\n":
+ return loc+1, "\n"
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+ elif loc == len(instring):
+ return loc+1, []
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class StringStart(_PositionToken):
+ """
+ Matches if current position is at the beginning of the parse string
+ """
+ def __init__( self ):
+ super(StringStart,self).__init__()
+ self.errmsg = "Expected start of text"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc != 0:
+ # see if entire string up to here is just whitespace and ignoreables
+ if loc != self.preParse( instring, 0 ):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+class StringEnd(_PositionToken):
+ """
+ Matches if current position is at the end of the parse string
+ """
+ def __init__( self ):
+ super(StringEnd,self).__init__()
+ self.errmsg = "Expected end of text"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc < len(instring):
+ raise ParseException(instring, loc, self.errmsg, self)
+ elif loc == len(instring):
+ return loc+1, []
+ elif loc > len(instring):
+ return loc, []
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class WordStart(_PositionToken):
+ """
+ Matches if the current position is at the beginning of a Word, and
+ is not preceded by any character in a given set of C{wordChars}
+ (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
+ use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of
+ the string being parsed, or at the beginning of a line.
+ """
+ def __init__(self, wordChars = printables):
+ super(WordStart,self).__init__()
+ self.wordChars = set(wordChars)
+ self.errmsg = "Not at the start of a word"
+
+ def parseImpl(self, instring, loc, doActions=True ):
+ if loc != 0:
+ if (instring[loc-1] in self.wordChars or
+ instring[loc] not in self.wordChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+class WordEnd(_PositionToken):
+ """
+ Matches if the current position is at the end of a Word, and
+ is not followed by any character in a given set of C{wordChars}
+ (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
+ use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of
+ the string being parsed, or at the end of a line.
+ """
+ def __init__(self, wordChars = printables):
+ super(WordEnd,self).__init__()
+ self.wordChars = set(wordChars)
+ self.skipWhitespace = False
+ self.errmsg = "Not at the end of a word"
+
+ def parseImpl(self, instring, loc, doActions=True ):
+ instrlen = len(instring)
+ if instrlen>0 and loc<instrlen:
+ if (instring[loc] in self.wordChars or
+ instring[loc-1] not in self.wordChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+
+class ParseExpression(ParserElement):
+ """
+ Abstract subclass of ParserElement, for combining and post-processing parsed tokens.
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(ParseExpression,self).__init__(savelist)
+ if isinstance( exprs, _generatorType ):
+ exprs = list(exprs)
+
+ if isinstance( exprs, basestring ):
+ self.exprs = [ ParserElement._literalStringClass( exprs ) ]
+ elif isinstance( exprs, Iterable ):
+ exprs = list(exprs)
+ # if sequence of strings provided, wrap with Literal
+ if all(isinstance(expr, basestring) for expr in exprs):
+ exprs = map(ParserElement._literalStringClass, exprs)
+ self.exprs = list(exprs)
+ else:
+ try:
+ self.exprs = list( exprs )
+ except TypeError:
+ self.exprs = [ exprs ]
+ self.callPreparse = False
+
+ def __getitem__( self, i ):
+ return self.exprs[i]
+
+ def append( self, other ):
+ self.exprs.append( other )
+ self.strRepr = None
+ return self
+
+ def leaveWhitespace( self ):
+ """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on
+ all contained expressions."""
+ self.skipWhitespace = False
+ self.exprs = [ e.copy() for e in self.exprs ]
+ for e in self.exprs:
+ e.leaveWhitespace()
+ return self
+
+ def ignore( self, other ):
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ super( ParseExpression, self).ignore( other )
+ for e in self.exprs:
+ e.ignore( self.ignoreExprs[-1] )
+ else:
+ super( ParseExpression, self).ignore( other )
+ for e in self.exprs:
+ e.ignore( self.ignoreExprs[-1] )
+ return self
+
+ def __str__( self ):
+ try:
+ return super(ParseExpression,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) )
+ return self.strRepr
+
+ def streamline( self ):
+ super(ParseExpression,self).streamline()
+
+ for e in self.exprs:
+ e.streamline()
+
+ # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d )
+ # but only if there are no parse actions or resultsNames on the nested And's
+ # (likewise for Or's and MatchFirst's)
+ if ( len(self.exprs) == 2 ):
+ other = self.exprs[0]
+ if ( isinstance( other, self.__class__ ) and
+ not(other.parseAction) and
+ other.resultsName is None and
+ not other.debug ):
+ self.exprs = other.exprs[:] + [ self.exprs[1] ]
+ self.strRepr = None
+ self.mayReturnEmpty |= other.mayReturnEmpty
+ self.mayIndexError |= other.mayIndexError
+
+ other = self.exprs[-1]
+ if ( isinstance( other, self.__class__ ) and
+ not(other.parseAction) and
+ other.resultsName is None and
+ not other.debug ):
+ self.exprs = self.exprs[:-1] + other.exprs[:]
+ self.strRepr = None
+ self.mayReturnEmpty |= other.mayReturnEmpty
+ self.mayIndexError |= other.mayIndexError
+
+ self.errmsg = "Expected " + _ustr(self)
+
+ return self
+
+ def setResultsName( self, name, listAllMatches=False ):
+ ret = super(ParseExpression,self).setResultsName(name,listAllMatches)
+ return ret
+
+ def validate( self, validateTrace=[] ):
+ tmp = validateTrace[:]+[self]
+ for e in self.exprs:
+ e.validate(tmp)
+ self.checkRecursion( [] )
+
+ def copy(self):
+ ret = super(ParseExpression,self).copy()
+ ret.exprs = [e.copy() for e in self.exprs]
+ return ret
+
+class And(ParseExpression):
+ """
+ Requires all given C{ParseExpression}s to be found in the given order.
+ Expressions may be separated by whitespace.
+ May be constructed using the C{'+'} operator.
+ May also be constructed using the C{'-'} operator, which will suppress backtracking.
+
+ Example::
+ integer = Word(nums)
+ name_expr = OneOrMore(Word(alphas))
+
+ expr = And([integer("id"),name_expr("name"),integer("age")])
+ # more easily written as:
+ expr = integer("id") + name_expr("name") + integer("age")
+ """
+
+ class _ErrorStop(Empty):
+ def __init__(self, *args, **kwargs):
+ super(And._ErrorStop,self).__init__(*args, **kwargs)
+ self.name = '-'
+ self.leaveWhitespace()
+
+ def __init__( self, exprs, savelist = True ):
+ super(And,self).__init__(exprs, savelist)
+ self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
+ self.setWhitespaceChars( self.exprs[0].whiteChars )
+ self.skipWhitespace = self.exprs[0].skipWhitespace
+ self.callPreparse = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ # pass False as last arg to _parse for first element, since we already
+ # pre-parsed the string as part of our And pre-parsing
+ loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
+ errorStop = False
+ for e in self.exprs[1:]:
+ if isinstance(e, And._ErrorStop):
+ errorStop = True
+ continue
+ if errorStop:
+ try:
+ loc, exprtokens = e._parse( instring, loc, doActions )
+ except ParseSyntaxException:
+ raise
+ except ParseBaseException as pe:
+ pe.__traceback__ = None
+ raise ParseSyntaxException._from_exception(pe)
+ except IndexError:
+ raise ParseSyntaxException(instring, len(instring), self.errmsg, self)
+ else:
+ loc, exprtokens = e._parse( instring, loc, doActions )
+ if exprtokens or exprtokens.haskeys():
+ resultlist += exprtokens
+ return loc, resultlist
+
+ def __iadd__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #And( [ self, other ] )
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+ if not e.mayReturnEmpty:
+ break
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+
+class Or(ParseExpression):
+ """
+ Requires that at least one C{ParseExpression} is found.
+ If two expressions match, the expression that matches the longest string will be used.
+ May be constructed using the C{'^'} operator.
+
+ Example::
+ # construct Or using '^' operator
+
+ number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums))
+ print(number.searchString("123 3.1416 789"))
+ prints::
+ [['123'], ['3.1416'], ['789']]
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(Or,self).__init__(exprs, savelist)
+ if self.exprs:
+ self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
+ else:
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ maxExcLoc = -1
+ maxException = None
+ matches = []
+ for e in self.exprs:
+ try:
+ loc2 = e.tryParse( instring, loc )
+ except ParseException as err:
+ err.__traceback__ = None
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+ except IndexError:
+ if len(instring) > maxExcLoc:
+ maxException = ParseException(instring,len(instring),e.errmsg,self)
+ maxExcLoc = len(instring)
+ else:
+ # save match among all matches, to retry longest to shortest
+ matches.append((loc2, e))
+
+ if matches:
+ matches.sort(key=lambda x: -x[0])
+ for _,e in matches:
+ try:
+ return e._parse( instring, loc, doActions )
+ except ParseException as err:
+ err.__traceback__ = None
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+
+ if maxException is not None:
+ maxException.msg = self.errmsg
+ raise maxException
+ else:
+ raise ParseException(instring, loc, "no defined alternatives to match", self)
+
+
+ def __ixor__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #Or( [ self, other ] )
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class MatchFirst(ParseExpression):
+ """
+ Requires that at least one C{ParseExpression} is found.
+ If two expressions match, the first one listed is the one that will match.
+ May be constructed using the C{'|'} operator.
+
+ Example::
+ # construct MatchFirst using '|' operator
+
+ # watch the order of expressions to match
+ number = Word(nums) | Combine(Word(nums) + '.' + Word(nums))
+ print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']]
+
+ # put more selective expression first
+ number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums)
+ print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']]
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(MatchFirst,self).__init__(exprs, savelist)
+ if self.exprs:
+ self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
+ else:
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ maxExcLoc = -1
+ maxException = None
+ for e in self.exprs:
+ try:
+ ret = e._parse( instring, loc, doActions )
+ return ret
+ except ParseException as err:
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+ except IndexError:
+ if len(instring) > maxExcLoc:
+ maxException = ParseException(instring,len(instring),e.errmsg,self)
+ maxExcLoc = len(instring)
+
+ # only got here if no expression matched, raise exception for match that made it the furthest
+ else:
+ if maxException is not None:
+ maxException.msg = self.errmsg
+ raise maxException
+ else:
+ raise ParseException(instring, loc, "no defined alternatives to match", self)
+
+ def __ior__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #MatchFirst( [ self, other ] )
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class Each(ParseExpression):
+ """
+ Requires all given C{ParseExpression}s to be found, but in any order.
+ Expressions may be separated by whitespace.
+ May be constructed using the C{'&'} operator.
+
+ Example::
+ color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN")
+ shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON")
+ integer = Word(nums)
+ shape_attr = "shape:" + shape_type("shape")
+ posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn")
+ color_attr = "color:" + color("color")
+ size_attr = "size:" + integer("size")
+
+ # use Each (using operator '&') to accept attributes in any order
+ # (shape and posn are required, color and size are optional)
+ shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr)
+
+ shape_spec.runTests('''
+ shape: SQUARE color: BLACK posn: 100, 120
+ shape: CIRCLE size: 50 color: BLUE posn: 50,80
+ color:GREEN size:20 shape:TRIANGLE posn:20,40
+ '''
+ )
+ prints::
+ shape: SQUARE color: BLACK posn: 100, 120
+ ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']]
+ - color: BLACK
+ - posn: ['100', ',', '120']
+ - x: 100
+ - y: 120
+ - shape: SQUARE
+
+
+ shape: CIRCLE size: 50 color: BLUE posn: 50,80
+ ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']]
+ - color: BLUE
+ - posn: ['50', ',', '80']
+ - x: 50
+ - y: 80
+ - shape: CIRCLE
+ - size: 50
+
+
+ color: GREEN size: 20 shape: TRIANGLE posn: 20,40
+ ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']]
+ - color: GREEN
+ - posn: ['20', ',', '40']
+ - x: 20
+ - y: 40
+ - shape: TRIANGLE
+ - size: 20
+ """
+ def __init__( self, exprs, savelist = True ):
+ super(Each,self).__init__(exprs, savelist)
+ self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
+ self.skipWhitespace = True
+ self.initExprGroups = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.initExprGroups:
+ self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional))
+ opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ]
+ opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)]
+ self.optionals = opt1 + opt2
+ self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ]
+ self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ]
+ self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ]
+ self.required += self.multirequired
+ self.initExprGroups = False
+ tmpLoc = loc
+ tmpReqd = self.required[:]
+ tmpOpt = self.optionals[:]
+ matchOrder = []
+
+ keepMatching = True
+ while keepMatching:
+ tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired
+ failed = []
+ for e in tmpExprs:
+ try:
+ tmpLoc = e.tryParse( instring, tmpLoc )
+ except ParseException:
+ failed.append(e)
+ else:
+ matchOrder.append(self.opt1map.get(id(e),e))
+ if e in tmpReqd:
+ tmpReqd.remove(e)
+ elif e in tmpOpt:
+ tmpOpt.remove(e)
+ if len(failed) == len(tmpExprs):
+ keepMatching = False
+
+ if tmpReqd:
+ missing = ", ".join(_ustr(e) for e in tmpReqd)
+ raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing )
+
+ # add any unmatched Optionals, in case they have default values defined
+ matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt]
+
+ resultlist = []
+ for e in matchOrder:
+ loc,results = e._parse(instring,loc,doActions)
+ resultlist.append(results)
+
+ finalResults = sum(resultlist, ParseResults([]))
+ return loc, finalResults
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class ParseElementEnhance(ParserElement):
+ """
+ Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens.
+ """
+ def __init__( self, expr, savelist=False ):
+ super(ParseElementEnhance,self).__init__(savelist)
+ if isinstance( expr, basestring ):
+ if issubclass(ParserElement._literalStringClass, Token):
+ expr = ParserElement._literalStringClass(expr)
+ else:
+ expr = ParserElement._literalStringClass(Literal(expr))
+ self.expr = expr
+ self.strRepr = None
+ if expr is not None:
+ self.mayIndexError = expr.mayIndexError
+ self.mayReturnEmpty = expr.mayReturnEmpty
+ self.setWhitespaceChars( expr.whiteChars )
+ self.skipWhitespace = expr.skipWhitespace
+ self.saveAsList = expr.saveAsList
+ self.callPreparse = expr.callPreparse
+ self.ignoreExprs.extend(expr.ignoreExprs)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.expr is not None:
+ return self.expr._parse( instring, loc, doActions, callPreParse=False )
+ else:
+ raise ParseException("",loc,self.errmsg,self)
+
+ def leaveWhitespace( self ):
+ self.skipWhitespace = False
+ self.expr = self.expr.copy()
+ if self.expr is not None:
+ self.expr.leaveWhitespace()
+ return self
+
+ def ignore( self, other ):
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ super( ParseElementEnhance, self).ignore( other )
+ if self.expr is not None:
+ self.expr.ignore( self.ignoreExprs[-1] )
+ else:
+ super( ParseElementEnhance, self).ignore( other )
+ if self.expr is not None:
+ self.expr.ignore( self.ignoreExprs[-1] )
+ return self
+
+ def streamline( self ):
+ super(ParseElementEnhance,self).streamline()
+ if self.expr is not None:
+ self.expr.streamline()
+ return self
+
+ def checkRecursion( self, parseElementList ):
+ if self in parseElementList:
+ raise RecursiveGrammarException( parseElementList+[self] )
+ subRecCheckList = parseElementList[:] + [ self ]
+ if self.expr is not None:
+ self.expr.checkRecursion( subRecCheckList )
+
+ def validate( self, validateTrace=[] ):
+ tmp = validateTrace[:]+[self]
+ if self.expr is not None:
+ self.expr.validate(tmp)
+ self.checkRecursion( [] )
+
+ def __str__( self ):
+ try:
+ return super(ParseElementEnhance,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None and self.expr is not None:
+ self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) )
+ return self.strRepr
+
+
+class FollowedBy(ParseElementEnhance):
+ """
+ Lookahead matching of the given parse expression. C{FollowedBy}
+ does I{not} advance the parsing position within the input string, it only
+ verifies that the specified parse expression matches at the current
+ position. C{FollowedBy} always returns a null token list.
+
+ Example::
+ # use FollowedBy to match a label only if it is followed by a ':'
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+
+ OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint()
+ prints::
+ [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']]
+ """
+ def __init__( self, expr ):
+ super(FollowedBy,self).__init__(expr)
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ self.expr.tryParse( instring, loc )
+ return loc, []
+
+
+class NotAny(ParseElementEnhance):
+ """
+ Lookahead to disallow matching with the given parse expression. C{NotAny}
+ does I{not} advance the parsing position within the input string, it only
+ verifies that the specified parse expression does I{not} match at the current
+ position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny}
+ always returns a null token list. May be constructed using the '~' operator.
+
+ Example::
+
+ """
+ def __init__( self, expr ):
+ super(NotAny,self).__init__(expr)
+ #~ self.leaveWhitespace()
+ self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs
+ self.mayReturnEmpty = True
+ self.errmsg = "Found unwanted token, "+_ustr(self.expr)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.expr.canParseNext(instring, loc):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "~{" + _ustr(self.expr) + "}"
+
+ return self.strRepr
+
+class _MultipleMatch(ParseElementEnhance):
+ def __init__( self, expr, stopOn=None):
+ super(_MultipleMatch, self).__init__(expr)
+ self.saveAsList = True
+ ender = stopOn
+ if isinstance(ender, basestring):
+ ender = ParserElement._literalStringClass(ender)
+ self.not_ender = ~ender if ender is not None else None
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ self_expr_parse = self.expr._parse
+ self_skip_ignorables = self._skipIgnorables
+ check_ender = self.not_ender is not None
+ if check_ender:
+ try_not_ender = self.not_ender.tryParse
+
+ # must be at least one (but first see if we are the stopOn sentinel;
+ # if so, fail)
+ if check_ender:
+ try_not_ender(instring, loc)
+ loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
+ try:
+ hasIgnoreExprs = (not not self.ignoreExprs)
+ while 1:
+ if check_ender:
+ try_not_ender(instring, loc)
+ if hasIgnoreExprs:
+ preloc = self_skip_ignorables( instring, loc )
+ else:
+ preloc = loc
+ loc, tmptokens = self_expr_parse( instring, preloc, doActions )
+ if tmptokens or tmptokens.haskeys():
+ tokens += tmptokens
+ except (ParseException,IndexError):
+ pass
+
+ return loc, tokens
+
+class OneOrMore(_MultipleMatch):
+ """
+ Repetition of one or more of the given expression.
+
+ Parameters:
+ - expr - expression that must match one or more times
+ - stopOn - (default=C{None}) - expression for a terminating sentinel
+ (only required if the sentinel would ordinarily match the repetition
+ expression)
+
+ Example::
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
+
+ text = "shape: SQUARE posn: upper left color: BLACK"
+ OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']]
+
+ # use stopOn attribute for OneOrMore to avoid reading label string as part of the data
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+ OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']]
+
+ # could also be written as
+ (attr_expr * (1,)).parseString(text).pprint()
+ """
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + _ustr(self.expr) + "}..."
+
+ return self.strRepr
+
+class ZeroOrMore(_MultipleMatch):
+ """
+ Optional repetition of zero or more of the given expression.
+
+ Parameters:
+ - expr - expression that must match zero or more times
+ - stopOn - (default=C{None}) - expression for a terminating sentinel
+ (only required if the sentinel would ordinarily match the repetition
+ expression)
+
+ Example: similar to L{OneOrMore}
+ """
+ def __init__( self, expr, stopOn=None):
+ super(ZeroOrMore,self).__init__(expr, stopOn=stopOn)
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ try:
+ return super(ZeroOrMore, self).parseImpl(instring, loc, doActions)
+ except (ParseException,IndexError):
+ return loc, []
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "[" + _ustr(self.expr) + "]..."
+
+ return self.strRepr
+
+class _NullToken(object):
+ def __bool__(self):
+ return False
+ __nonzero__ = __bool__
+ def __str__(self):
+ return ""
+
+_optionalNotMatched = _NullToken()
+class Optional(ParseElementEnhance):
+ """
+ Optional matching of the given expression.
+
+ Parameters:
+ - expr - expression that must match zero or more times
+ - default (optional) - value to be returned if the optional expression is not found.
+
+ Example::
+ # US postal code can be a 5-digit zip, plus optional 4-digit qualifier
+ zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4)))
+ zip.runTests('''
+ # traditional ZIP code
+ 12345
+
+ # ZIP+4 form
+ 12101-0001
+
+ # invalid ZIP
+ 98765-
+ ''')
+ prints::
+ # traditional ZIP code
+ 12345
+ ['12345']
+
+ # ZIP+4 form
+ 12101-0001
+ ['12101-0001']
+
+ # invalid ZIP
+ 98765-
+ ^
+ FAIL: Expected end of text (at char 5), (line:1, col:6)
+ """
+ def __init__( self, expr, default=_optionalNotMatched ):
+ super(Optional,self).__init__( expr, savelist=False )
+ self.saveAsList = self.expr.saveAsList
+ self.defaultValue = default
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ try:
+ loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
+ except (ParseException,IndexError):
+ if self.defaultValue is not _optionalNotMatched:
+ if self.expr.resultsName:
+ tokens = ParseResults([ self.defaultValue ])
+ tokens[self.expr.resultsName] = self.defaultValue
+ else:
+ tokens = [ self.defaultValue ]
+ else:
+ tokens = []
+ return loc, tokens
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "[" + _ustr(self.expr) + "]"
+
+ return self.strRepr
+
+class SkipTo(ParseElementEnhance):
+ """
+ Token for skipping over all undefined text until the matched expression is found.
+
+ Parameters:
+ - expr - target expression marking the end of the data to be skipped
+ - include - (default=C{False}) if True, the target expression is also parsed
+ (the skipped text and target expression are returned as a 2-element list).
+ - ignore - (default=C{None}) used to define grammars (typically quoted strings and
+ comments) that might contain false matches to the target expression
+ - failOn - (default=C{None}) define expressions that are not allowed to be
+ included in the skipped test; if found before the target expression is found,
+ the SkipTo is not a match
+
+ Example::
+ report = '''
+ Outstanding Issues Report - 1 Jan 2000
+
+ # | Severity | Description | Days Open
+ -----+----------+-------------------------------------------+-----------
+ 101 | Critical | Intermittent system crash | 6
+ 94 | Cosmetic | Spelling error on Login ('log|n') | 14
+ 79 | Minor | System slow when running too many reports | 47
+ '''
+ integer = Word(nums)
+ SEP = Suppress('|')
+ # use SkipTo to simply match everything up until the next SEP
+ # - ignore quoted strings, so that a '|' character inside a quoted string does not match
+ # - parse action will call token.strip() for each matched token, i.e., the description body
+ string_data = SkipTo(SEP, ignore=quotedString)
+ string_data.setParseAction(tokenMap(str.strip))
+ ticket_expr = (integer("issue_num") + SEP
+ + string_data("sev") + SEP
+ + string_data("desc") + SEP
+ + integer("days_open"))
+
+ for tkt in ticket_expr.searchString(report):
+ print tkt.dump()
+ prints::
+ ['101', 'Critical', 'Intermittent system crash', '6']
+ - days_open: 6
+ - desc: Intermittent system crash
+ - issue_num: 101
+ - sev: Critical
+ ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14']
+ - days_open: 14
+ - desc: Spelling error on Login ('log|n')
+ - issue_num: 94
+ - sev: Cosmetic
+ ['79', 'Minor', 'System slow when running too many reports', '47']
+ - days_open: 47
+ - desc: System slow when running too many reports
+ - issue_num: 79
+ - sev: Minor
+ """
+ def __init__( self, other, include=False, ignore=None, failOn=None ):
+ super( SkipTo, self ).__init__( other )
+ self.ignoreExpr = ignore
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+ self.includeMatch = include
+ self.asList = False
+ if isinstance(failOn, basestring):
+ self.failOn = ParserElement._literalStringClass(failOn)
+ else:
+ self.failOn = failOn
+ self.errmsg = "No match found for "+_ustr(self.expr)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ startloc = loc
+ instrlen = len(instring)
+ expr = self.expr
+ expr_parse = self.expr._parse
+ self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None
+ self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None
+
+ tmploc = loc
+ while tmploc <= instrlen:
+ if self_failOn_canParseNext is not None:
+ # break if failOn expression matches
+ if self_failOn_canParseNext(instring, tmploc):
+ break
+
+ if self_ignoreExpr_tryParse is not None:
+ # advance past ignore expressions
+ while 1:
+ try:
+ tmploc = self_ignoreExpr_tryParse(instring, tmploc)
+ except ParseBaseException:
+ break
+
+ try:
+ expr_parse(instring, tmploc, doActions=False, callPreParse=False)
+ except (ParseException, IndexError):
+ # no match, advance loc in string
+ tmploc += 1
+ else:
+ # matched skipto expr, done
+ break
+
+ else:
+ # ran off the end of the input string without matching skipto expr, fail
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ # build up return values
+ loc = tmploc
+ skiptext = instring[startloc:loc]
+ skipresult = ParseResults(skiptext)
+
+ if self.includeMatch:
+ loc, mat = expr_parse(instring,loc,doActions,callPreParse=False)
+ skipresult += mat
+
+ return loc, skipresult
+
+class Forward(ParseElementEnhance):
+ """
+ Forward declaration of an expression to be defined later -
+ used for recursive grammars, such as algebraic infix notation.
+ When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator.
+
+ Note: take care when assigning to C{Forward} not to overlook precedence of operators.
+ Specifically, '|' has a lower precedence than '<<', so that::
+ fwdExpr << a | b | c
+ will actually be evaluated as::
+ (fwdExpr << a) | b | c
+ thereby leaving b and c out as parseable alternatives. It is recommended that you
+ explicitly group the values inserted into the C{Forward}::
+ fwdExpr << (a | b | c)
+ Converting to use the '<<=' operator instead will avoid this problem.
+
+ See L{ParseResults.pprint} for an example of a recursive parser created using
+ C{Forward}.
+ """
+ def __init__( self, other=None ):
+ super(Forward,self).__init__( other, savelist=False )
+
+ def __lshift__( self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass(other)
+ self.expr = other
+ self.strRepr = None
+ self.mayIndexError = self.expr.mayIndexError
+ self.mayReturnEmpty = self.expr.mayReturnEmpty
+ self.setWhitespaceChars( self.expr.whiteChars )
+ self.skipWhitespace = self.expr.skipWhitespace
+ self.saveAsList = self.expr.saveAsList
+ self.ignoreExprs.extend(self.expr.ignoreExprs)
+ return self
+
+ def __ilshift__(self, other):
+ return self << other
+
+ def leaveWhitespace( self ):
+ self.skipWhitespace = False
+ return self
+
+ def streamline( self ):
+ if not self.streamlined:
+ self.streamlined = True
+ if self.expr is not None:
+ self.expr.streamline()
+ return self
+
+ def validate( self, validateTrace=[] ):
+ if self not in validateTrace:
+ tmp = validateTrace[:]+[self]
+ if self.expr is not None:
+ self.expr.validate(tmp)
+ self.checkRecursion([])
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+ return self.__class__.__name__ + ": ..."
+
+ # stubbed out for now - creates awful memory and perf issues
+ self._revertClass = self.__class__
+ self.__class__ = _ForwardNoRecurse
+ try:
+ if self.expr is not None:
+ retString = _ustr(self.expr)
+ else:
+ retString = "None"
+ finally:
+ self.__class__ = self._revertClass
+ return self.__class__.__name__ + ": " + retString
+
+ def copy(self):
+ if self.expr is not None:
+ return super(Forward,self).copy()
+ else:
+ ret = Forward()
+ ret <<= self
+ return ret
+
+class _ForwardNoRecurse(Forward):
+ def __str__( self ):
+ return "..."
+
+class TokenConverter(ParseElementEnhance):
+ """
+ Abstract subclass of C{ParseExpression}, for converting parsed results.
+ """
+ def __init__( self, expr, savelist=False ):
+ super(TokenConverter,self).__init__( expr )#, savelist )
+ self.saveAsList = False
+
+class Combine(TokenConverter):
+ """
+ Converter to concatenate all matching tokens to a single string.
+ By default, the matching patterns must also be contiguous in the input string;
+ this can be disabled by specifying C{'adjacent=False'} in the constructor.
+
+ Example::
+ real = Word(nums) + '.' + Word(nums)
+ print(real.parseString('3.1416')) # -> ['3', '.', '1416']
+ # will also erroneously match the following
+ print(real.parseString('3. 1416')) # -> ['3', '.', '1416']
+
+ real = Combine(Word(nums) + '.' + Word(nums))
+ print(real.parseString('3.1416')) # -> ['3.1416']
+ # no match when there are internal spaces
+ print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...)
+ """
+ def __init__( self, expr, joinString="", adjacent=True ):
+ super(Combine,self).__init__( expr )
+ # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself
+ if adjacent:
+ self.leaveWhitespace()
+ self.adjacent = adjacent
+ self.skipWhitespace = True
+ self.joinString = joinString
+ self.callPreparse = True
+
+ def ignore( self, other ):
+ if self.adjacent:
+ ParserElement.ignore(self, other)
+ else:
+ super( Combine, self).ignore( other )
+ return self
+
+ def postParse( self, instring, loc, tokenlist ):
+ retToks = tokenlist.copy()
+ del retToks[:]
+ retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults)
+
+ if self.resultsName and retToks.haskeys():
+ return [ retToks ]
+ else:
+ return retToks
+
+class Group(TokenConverter):
+ """
+ Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions.
+
+ Example::
+ ident = Word(alphas)
+ num = Word(nums)
+ term = ident | num
+ func = ident + Optional(delimitedList(term))
+ print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100']
+
+ func = ident + Group(Optional(delimitedList(term)))
+ print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']]
+ """
+ def __init__( self, expr ):
+ super(Group,self).__init__( expr )
+ self.saveAsList = True
+
+ def postParse( self, instring, loc, tokenlist ):
+ return [ tokenlist ]
+
+class Dict(TokenConverter):
+ """
+ Converter to return a repetitive expression as a list, but also as a dictionary.
+ Each element can also be referenced using the first token in the expression as its key.
+ Useful for tabular report scraping when the first column can be used as a item key.
+
+ Example::
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
+
+ text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
+ attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+
+ # print attributes as plain groups
+ print(OneOrMore(attr_expr).parseString(text).dump())
+
+ # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names
+ result = Dict(OneOrMore(Group(attr_expr))).parseString(text)
+ print(result.dump())
+
+ # access named fields as dict entries, or output as dict
+ print(result['shape'])
+ print(result.asDict())
+ prints::
+ ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap']
+
+ [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
+ - color: light blue
+ - posn: upper left
+ - shape: SQUARE
+ - texture: burlap
+ SQUARE
+ {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'}
+ See more examples at L{ParseResults} of accessing fields by results name.
+ """
+ def __init__( self, expr ):
+ super(Dict,self).__init__( expr )
+ self.saveAsList = True
+
+ def postParse( self, instring, loc, tokenlist ):
+ for i,tok in enumerate(tokenlist):
+ if len(tok) == 0:
+ continue
+ ikey = tok[0]
+ if isinstance(ikey,int):
+ ikey = _ustr(tok[0]).strip()
+ if len(tok)==1:
+ tokenlist[ikey] = _ParseResultsWithOffset("",i)
+ elif len(tok)==2 and not isinstance(tok[1],ParseResults):
+ tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i)
+ else:
+ dictvalue = tok.copy() #ParseResults(i)
+ del dictvalue[0]
+ if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()):
+ tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i)
+ else:
+ tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i)
+
+ if self.resultsName:
+ return [ tokenlist ]
+ else:
+ return tokenlist
+
+
+class Suppress(TokenConverter):
+ """
+ Converter for ignoring the results of a parsed expression.
+
+ Example::
+ source = "a, b, c,d"
+ wd = Word(alphas)
+ wd_list1 = wd + ZeroOrMore(',' + wd)
+ print(wd_list1.parseString(source))
+
+ # often, delimiters that are useful during parsing are just in the
+ # way afterward - use Suppress to keep them out of the parsed output
+ wd_list2 = wd + ZeroOrMore(Suppress(',') + wd)
+ print(wd_list2.parseString(source))
+ prints::
+ ['a', ',', 'b', ',', 'c', ',', 'd']
+ ['a', 'b', 'c', 'd']
+ (See also L{delimitedList}.)
+ """
+ def postParse( self, instring, loc, tokenlist ):
+ return []
+
+ def suppress( self ):
+ return self
+
+
+class OnlyOnce(object):
+ """
+ Wrapper for parse actions, to ensure they are only called once.
+ """
+ def __init__(self, methodCall):
+ self.callable = _trim_arity(methodCall)
+ self.called = False
+ def __call__(self,s,l,t):
+ if not self.called:
+ results = self.callable(s,l,t)
+ self.called = True
+ return results
+ raise ParseException(s,l,"")
+ def reset(self):
+ self.called = False
+
+def traceParseAction(f):
+ """
+ Decorator for debugging parse actions.
+
+ When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".}
+ When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised.
+
+ Example::
+ wd = Word(alphas)
+
+ @traceParseAction
+ def remove_duplicate_chars(tokens):
+ return ''.join(sorted(set(''.join(tokens))))
+
+ wds = OneOrMore(wd).setParseAction(remove_duplicate_chars)
+ print(wds.parseString("slkdjs sld sldd sdlf sdljf"))
+ prints::
+ >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {}))
+ <<leaving remove_duplicate_chars (ret: 'dfjkls')
+ ['dfjkls']
+ """
+ f = _trim_arity(f)
+ def z(*paArgs):
+ thisFunc = f.__name__
+ s,l,t = paArgs[-3:]
+ if len(paArgs)>3:
+ thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc
+ sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) )
+ try:
+ ret = f(*paArgs)
+ except Exception as exc:
+ sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) )
+ raise
+ sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) )
+ return ret
+ try:
+ z.__name__ = f.__name__
+ except AttributeError:
+ pass
+ return z
+
+#
+# global helpers
+#
+def delimitedList( expr, delim=",", combine=False ):
+ """
+ Helper to define a delimited list of expressions - the delimiter defaults to ','.
+ By default, the list elements and delimiters can have intervening whitespace, and
+ comments, but this can be overridden by passing C{combine=True} in the constructor.
+ If C{combine} is set to C{True}, the matching tokens are returned as a single token
+ string, with the delimiters included; otherwise, the matching tokens are returned
+ as a list of tokens, with the delimiters suppressed.
+
+ Example::
+ delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc']
+ delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE']
+ """
+ dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..."
+ if combine:
+ return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName)
+ else:
+ return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName)
+
+def countedArray( expr, intExpr=None ):
+ """
+ Helper to define a counted list of expressions.
+ This helper defines a pattern of the form::
+ integer expr expr expr...
+ where the leading integer tells how many expr expressions follow.
+ The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
+
+ If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value.
+
+ Example::
+ countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd']
+
+ # in this parser, the leading integer value is given in binary,
+ # '10' indicating that 2 values are in the array
+ binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2))
+ countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd']
+ """
+ arrayExpr = Forward()
+ def countFieldParseAction(s,l,t):
+ n = t[0]
+ arrayExpr << (n and Group(And([expr]*n)) or Group(empty))
+ return []
+ if intExpr is None:
+ intExpr = Word(nums).setParseAction(lambda t:int(t[0]))
+ else:
+ intExpr = intExpr.copy()
+ intExpr.setName("arrayLen")
+ intExpr.addParseAction(countFieldParseAction, callDuringTry=True)
+ return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...')
+
+def _flatten(L):
+ ret = []
+ for i in L:
+ if isinstance(i,list):
+ ret.extend(_flatten(i))
+ else:
+ ret.append(i)
+ return ret
+
+def matchPreviousLiteral(expr):
+ """
+ Helper to define an expression that is indirectly defined from
+ the tokens matched in a previous expression, that is, it looks
+ for a 'repeat' of a previous expression. For example::
+ first = Word(nums)
+ second = matchPreviousLiteral(first)
+ matchExpr = first + ":" + second
+ will match C{"1:1"}, but not C{"1:2"}. Because this matches a
+ previous literal, will also match the leading C{"1:1"} in C{"1:10"}.
+ If this is not desired, use C{matchPreviousExpr}.
+ Do I{not} use with packrat parsing enabled.
+ """
+ rep = Forward()
+ def copyTokenToRepeater(s,l,t):
+ if t:
+ if len(t) == 1:
+ rep << t[0]
+ else:
+ # flatten t tokens
+ tflat = _flatten(t.asList())
+ rep << And(Literal(tt) for tt in tflat)
+ else:
+ rep << Empty()
+ expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
+ rep.setName('(prev) ' + _ustr(expr))
+ return rep
+
+def matchPreviousExpr(expr):
+ """
+ Helper to define an expression that is indirectly defined from
+ the tokens matched in a previous expression, that is, it looks
+ for a 'repeat' of a previous expression. For example::
+ first = Word(nums)
+ second = matchPreviousExpr(first)
+ matchExpr = first + ":" + second
+ will match C{"1:1"}, but not C{"1:2"}. Because this matches by
+ expressions, will I{not} match the leading C{"1:1"} in C{"1:10"};
+ the expressions are evaluated first, and then compared, so
+ C{"1"} is compared with C{"10"}.
+ Do I{not} use with packrat parsing enabled.
+ """
+ rep = Forward()
+ e2 = expr.copy()
+ rep <<= e2
+ def copyTokenToRepeater(s,l,t):
+ matchTokens = _flatten(t.asList())
+ def mustMatchTheseTokens(s,l,t):
+ theseTokens = _flatten(t.asList())
+ if theseTokens != matchTokens:
+ raise ParseException("",0,"")
+ rep.setParseAction( mustMatchTheseTokens, callDuringTry=True )
+ expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
+ rep.setName('(prev) ' + _ustr(expr))
+ return rep
+
+def _escapeRegexRangeChars(s):
+ #~ escape these chars: ^-]
+ for c in r"\^-]":
+ s = s.replace(c,_bslash+c)
+ s = s.replace("\n",r"\n")
+ s = s.replace("\t",r"\t")
+ return _ustr(s)
+
+def oneOf( strs, caseless=False, useRegex=True ):
+ """
+ Helper to quickly define a set of alternative Literals, and makes sure to do
+ longest-first testing when there is a conflict, regardless of the input order,
+ but returns a C{L{MatchFirst}} for best performance.
+
+ Parameters:
+ - strs - a string of space-delimited literals, or a collection of string literals
+ - caseless - (default=C{False}) - treat all literals as caseless
+ - useRegex - (default=C{True}) - as an optimization, will generate a Regex
+ object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or
+ if creating a C{Regex} raises an exception)
+
+ Example::
+ comp_oper = oneOf("< = > <= >= !=")
+ var = Word(alphas)
+ number = Word(nums)
+ term = var | number
+ comparison_expr = term + comp_oper + term
+ print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12"))
+ prints::
+ [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']]
+ """
+ if caseless:
+ isequal = ( lambda a,b: a.upper() == b.upper() )
+ masks = ( lambda a,b: b.upper().startswith(a.upper()) )
+ parseElementClass = CaselessLiteral
+ else:
+ isequal = ( lambda a,b: a == b )
+ masks = ( lambda a,b: b.startswith(a) )
+ parseElementClass = Literal
+
+ symbols = []
+ if isinstance(strs,basestring):
+ symbols = strs.split()
+ elif isinstance(strs, Iterable):
+ symbols = list(strs)
+ else:
+ warnings.warn("Invalid argument to oneOf, expected string or iterable",
+ SyntaxWarning, stacklevel=2)
+ if not symbols:
+ return NoMatch()
+
+ i = 0
+ while i < len(symbols)-1:
+ cur = symbols[i]
+ for j,other in enumerate(symbols[i+1:]):
+ if ( isequal(other, cur) ):
+ del symbols[i+j+1]
+ break
+ elif ( masks(cur, other) ):
+ del symbols[i+j+1]
+ symbols.insert(i,other)
+ cur = other
+ break
+ else:
+ i += 1
+
+ if not caseless and useRegex:
+ #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] ))
+ try:
+ if len(symbols)==len("".join(symbols)):
+ return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols))
+ else:
+ return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols))
+ except Exception:
+ warnings.warn("Exception creating Regex for oneOf, building MatchFirst",
+ SyntaxWarning, stacklevel=2)
+
+
+ # last resort, just use MatchFirst
+ return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols))
+
+def dictOf( key, value ):
+ """
+ Helper to easily and clearly define a dictionary by specifying the respective patterns
+ for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens
+ in the proper order. The key pattern can include delimiting markers or punctuation,
+ as long as they are suppressed, thereby leaving the significant key text. The value
+ pattern can include named results, so that the C{Dict} results can include named token
+ fields.
+
+ Example::
+ text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
+ attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+ print(OneOrMore(attr_expr).parseString(text).dump())
+
+ attr_label = label
+ attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)
+
+ # similar to Dict, but simpler call format
+ result = dictOf(attr_label, attr_value).parseString(text)
+ print(result.dump())
+ print(result['shape'])
+ print(result.shape) # object attribute access works too
+ print(result.asDict())
+ prints::
+ [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
+ - color: light blue
+ - posn: upper left
+ - shape: SQUARE
+ - texture: burlap
+ SQUARE
+ SQUARE
+ {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'}
+ """
+ return Dict( ZeroOrMore( Group ( key + value ) ) )
+
+def originalTextFor(expr, asString=True):
+ """
+ Helper to return the original, untokenized text for a given expression. Useful to
+ restore the parsed fields of an HTML start tag into the raw tag text itself, or to
+ revert separate tokens with intervening whitespace back to the original matching
+ input text. By default, returns astring containing the original parsed text.
+
+ If the optional C{asString} argument is passed as C{False}, then the return value is a
+ C{L{ParseResults}} containing any results names that were originally matched, and a
+ single token containing the original matched text from the input string. So if
+ the expression passed to C{L{originalTextFor}} contains expressions with defined
+ results names, you must set C{asString} to C{False} if you want to preserve those
+ results name values.
+
+ Example::
+ src = "this is test <b> bold <i>text</i> </b> normal text "
+ for tag in ("b","i"):
+ opener,closer = makeHTMLTags(tag)
+ patt = originalTextFor(opener + SkipTo(closer) + closer)
+ print(patt.searchString(src)[0])
+ prints::
+ ['<b> bold <i>text</i> </b>']
+ ['<i>text</i>']
+ """
+ locMarker = Empty().setParseAction(lambda s,loc,t: loc)
+ endlocMarker = locMarker.copy()
+ endlocMarker.callPreparse = False
+ matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end")
+ if asString:
+ extractText = lambda s,l,t: s[t._original_start:t._original_end]
+ else:
+ def extractText(s,l,t):
+ t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]]
+ matchExpr.setParseAction(extractText)
+ matchExpr.ignoreExprs = expr.ignoreExprs
+ return matchExpr
+
+def ungroup(expr):
+ """
+ Helper to undo pyparsing's default grouping of And expressions, even
+ if all but one are non-empty.
+ """
+ return TokenConverter(expr).setParseAction(lambda t:t[0])
+
+def locatedExpr(expr):
+ """
+ Helper to decorate a returned token with its starting and ending locations in the input string.
+ This helper adds the following results names:
+ - locn_start = location where matched expression begins
+ - locn_end = location where matched expression ends
+ - value = the actual parsed results
+
+ Be careful if the input text contains C{<TAB>} characters, you may want to call
+ C{L{ParserElement.parseWithTabs}}
+
+ Example::
+ wd = Word(alphas)
+ for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"):
+ print(match)
+ prints::
+ [[0, 'ljsdf', 5]]
+ [[8, 'lksdjjf', 15]]
+ [[18, 'lkkjj', 23]]
+ """
+ locator = Empty().setParseAction(lambda s,l,t: l)
+ return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end"))
+
+
+# convenience constants for positional expressions
+empty = Empty().setName("empty")
+lineStart = LineStart().setName("lineStart")
+lineEnd = LineEnd().setName("lineEnd")
+stringStart = StringStart().setName("stringStart")
+stringEnd = StringEnd().setName("stringEnd")
+
+_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
+_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16)))
+_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8)))
+_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1)
+_charRange = Group(_singleChar + Suppress("-") + _singleChar)
+_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"
+
+def srange(s):
+ r"""
+ Helper to easily define string ranges for use in Word construction. Borrows
+ syntax from regexp '[]' string range definitions::
+ srange("[0-9]") -> "0123456789"
+ srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz"
+ srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
+ The input string must be enclosed in []'s, and the returned string is the expanded
+ character set joined into a single string.
+ The values enclosed in the []'s may be:
+ - a single character
+ - an escaped character with a leading backslash (such as C{\-} or C{\]})
+ - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character)
+ (C{\0x##} is also supported for backwards compatibility)
+ - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character)
+ - a range of any of the above, separated by a dash (C{'a-z'}, etc.)
+ - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.)
+ """
+ _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1))
+ try:
+ return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body)
+ except Exception:
+ return ""
+
+def matchOnlyAtCol(n):
+ """
+ Helper method for defining parse actions that require matching at a specific
+ column in the input text.
+ """
+ def verifyCol(strg,locn,toks):
+ if col(locn,strg) != n:
+ raise ParseException(strg,locn,"matched token not at column %d" % n)
+ return verifyCol
+
+def replaceWith(replStr):
+ """
+ Helper method for common parse actions that simply return a literal value. Especially
+ useful when used with C{L{transformString<ParserElement.transformString>}()}.
+
+ Example::
+ num = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ na = oneOf("N/A NA").setParseAction(replaceWith(math.nan))
+ term = na | num
+
+ OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234]
+ """
+ return lambda s,l,t: [replStr]
+
+def removeQuotes(s,l,t):
+ """
+ Helper parse action for removing quotation marks from parsed quoted strings.
+
+ Example::
+ # by default, quotation marks are included in parsed results
+ quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"]
+
+ # use removeQuotes to strip quotation marks from parsed results
+ quotedString.setParseAction(removeQuotes)
+ quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"]
+ """
+ return t[0][1:-1]
+
+def tokenMap(func, *args):
+ """
+ Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional
+ args are passed, they are forwarded to the given function as additional arguments after
+ the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the
+ parsed data to an integer using base 16.
+
+ Example (compare the last to example in L{ParserElement.transformString}::
+ hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16))
+ hex_ints.runTests('''
+ 00 11 22 aa FF 0a 0d 1a
+ ''')
+
+ upperword = Word(alphas).setParseAction(tokenMap(str.upper))
+ OneOrMore(upperword).runTests('''
+ my kingdom for a horse
+ ''')
+
+ wd = Word(alphas).setParseAction(tokenMap(str.title))
+ OneOrMore(wd).setParseAction(' '.join).runTests('''
+ now is the winter of our discontent made glorious summer by this sun of york
+ ''')
+ prints::
+ 00 11 22 aa FF 0a 0d 1a
+ [0, 17, 34, 170, 255, 10, 13, 26]
+
+ my kingdom for a horse
+ ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE']
+
+ now is the winter of our discontent made glorious summer by this sun of york
+ ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York']
+ """
+ def pa(s,l,t):
+ return [func(tokn, *args) for tokn in t]
+
+ try:
+ func_name = getattr(func, '__name__',
+ getattr(func, '__class__').__name__)
+ except Exception:
+ func_name = str(func)
+ pa.__name__ = func_name
+
+ return pa
+
+upcaseTokens = tokenMap(lambda t: _ustr(t).upper())
+"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}"""
+
+downcaseTokens = tokenMap(lambda t: _ustr(t).lower())
+"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}"""
+
+def _makeTags(tagStr, xml):
+ """Internal helper to construct opening and closing tag expressions, given a tag name"""
+ if isinstance(tagStr,basestring):
+ resname = tagStr
+ tagStr = Keyword(tagStr, caseless=not xml)
+ else:
+ resname = tagStr.name
+
+ tagAttrName = Word(alphas,alphanums+"_-:")
+ if (xml):
+ tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes )
+ openTag = Suppress("<") + tagStr("tag") + \
+ Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \
+ Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
+ else:
+ printablesLessRAbrack = "".join(c for c in printables if c not in ">")
+ tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack)
+ openTag = Suppress("<") + tagStr("tag") + \
+ Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
+ Optional( Suppress("=") + tagAttrValue ) ))) + \
+ Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
+ closeTag = Combine(_L("</") + tagStr + ">")
+
+ openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname)
+ closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname)
+ openTag.tag = resname
+ closeTag.tag = resname
+ return openTag, closeTag
+
+def makeHTMLTags(tagStr):
+ """
+ Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches
+ tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values.
+
+ Example::
+ text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
+ # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple
+ a,a_end = makeHTMLTags("A")
+ link_expr = a + SkipTo(a_end)("link_text") + a_end
+
+ for link in link_expr.searchString(text):
+ # attributes in the <A> tag (like "href" shown here) are also accessible as named results
+ print(link.link_text, '->', link.href)
+ prints::
+ pyparsing -> http://pyparsing.wikispaces.com
+ """
+ return _makeTags( tagStr, False )
+
+def makeXMLTags(tagStr):
+ """
+ Helper to construct opening and closing tag expressions for XML, given a tag name. Matches
+ tags only in the given upper/lower case.
+
+ Example: similar to L{makeHTMLTags}
+ """
+ return _makeTags( tagStr, True )
+
+def withAttribute(*args,**attrDict):
+ """
+ Helper to create a validating parse action to be used with start tags created
+ with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag
+ with a required attribute value, to avoid false matches on common tags such as
+ C{<TD>} or C{<DIV>}.
+
+ Call C{withAttribute} with a series of attribute names and values. Specify the list
+ of filter attributes names and values as:
+ - keyword arguments, as in C{(align="right")}, or
+ - as an explicit dict with C{**} operator, when an attribute name is also a Python
+ reserved word, as in C{**{"class":"Customer", "align":"right"}}
+ - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") )
+ For attribute names with a namespace prefix, you must use the second form. Attribute
+ names are matched insensitive to upper/lower case.
+
+ If just testing for C{class} (with or without a namespace), use C{L{withClass}}.
+
+ To verify that the attribute exists, but without specifying a value, pass
+ C{withAttribute.ANY_VALUE} as the value.
+
+ Example::
+ html = '''
+ <div>
+ Some text
+ <div type="grid">1 4 0 1 0</div>
+ <div type="graph">1,3 2,3 1,1</div>
+ <div>this has no type</div>
+ </div>
+
+ '''
+ div,div_end = makeHTMLTags("div")
+
+ # only match div tag having a type attribute with value "grid"
+ div_grid = div().setParseAction(withAttribute(type="grid"))
+ grid_expr = div_grid + SkipTo(div | div_end)("body")
+ for grid_header in grid_expr.searchString(html):
+ print(grid_header.body)
+
+ # construct a match with any div tag having a type attribute, regardless of the value
+ div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE))
+ div_expr = div_any_type + SkipTo(div | div_end)("body")
+ for div_header in div_expr.searchString(html):
+ print(div_header.body)
+ prints::
+ 1 4 0 1 0
+
+ 1 4 0 1 0
+ 1,3 2,3 1,1
+ """
+ if args:
+ attrs = args[:]
+ else:
+ attrs = attrDict.items()
+ attrs = [(k,v) for k,v in attrs]
+ def pa(s,l,tokens):
+ for attrName,attrValue in attrs:
+ if attrName not in tokens:
+ raise ParseException(s,l,"no matching attribute " + attrName)
+ if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue:
+ raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" %
+ (attrName, tokens[attrName], attrValue))
+ return pa
+withAttribute.ANY_VALUE = object()
+
+def withClass(classname, namespace=''):
+ """
+ Simplified version of C{L{withAttribute}} when matching on a div class - made
+ difficult because C{class} is a reserved word in Python.
+
+ Example::
+ html = '''
+ <div>
+ Some text
+ <div class="grid">1 4 0 1 0</div>
+ <div class="graph">1,3 2,3 1,1</div>
+ <div>this &lt;div&gt; has no class</div>
+ </div>
+
+ '''
+ div,div_end = makeHTMLTags("div")
+ div_grid = div().setParseAction(withClass("grid"))
+
+ grid_expr = div_grid + SkipTo(div | div_end)("body")
+ for grid_header in grid_expr.searchString(html):
+ print(grid_header.body)
+
+ div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE))
+ div_expr = div_any_type + SkipTo(div | div_end)("body")
+ for div_header in div_expr.searchString(html):
+ print(div_header.body)
+ prints::
+ 1 4 0 1 0
+
+ 1 4 0 1 0
+ 1,3 2,3 1,1
+ """
+ classattr = "%s:class" % namespace if namespace else "class"
+ return withAttribute(**{classattr : classname})
+
+opAssoc = _Constants()
+opAssoc.LEFT = object()
+opAssoc.RIGHT = object()
+
+def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ):
+ """
+ Helper method for constructing grammars of expressions made up of
+ operators working in a precedence hierarchy. Operators may be unary or
+ binary, left- or right-associative. Parse actions can also be attached
+ to operator expressions. The generated parser will also recognize the use
+ of parentheses to override operator precedences (see example below).
+
+ Note: if you define a deep operator list, you may see performance issues
+ when using infixNotation. See L{ParserElement.enablePackrat} for a
+ mechanism to potentially improve your parser performance.
+
+ Parameters:
+ - baseExpr - expression representing the most basic element for the nested
+ - opList - list of tuples, one for each operator precedence level in the
+ expression grammar; each tuple is of the form
+ (opExpr, numTerms, rightLeftAssoc, parseAction), where:
+ - opExpr is the pyparsing expression for the operator;
+ may also be a string, which will be converted to a Literal;
+ if numTerms is 3, opExpr is a tuple of two expressions, for the
+ two operators separating the 3 terms
+ - numTerms is the number of terms for this operator (must
+ be 1, 2, or 3)
+ - rightLeftAssoc is the indicator whether the operator is
+ right or left associative, using the pyparsing-defined
+ constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}.
+ - parseAction is the parse action to be associated with
+ expressions matching this operator expression (the
+ parse action tuple member may be omitted); if the parse action
+ is passed a tuple or list of functions, this is equivalent to
+ calling C{setParseAction(*fn)} (L{ParserElement.setParseAction})
+ - lpar - expression for matching left-parentheses (default=C{Suppress('(')})
+ - rpar - expression for matching right-parentheses (default=C{Suppress(')')})
+
+ Example::
+ # simple example of four-function arithmetic with ints and variable names
+ integer = pyparsing_common.signed_integer
+ varname = pyparsing_common.identifier
+
+ arith_expr = infixNotation(integer | varname,
+ [
+ ('-', 1, opAssoc.RIGHT),
+ (oneOf('* /'), 2, opAssoc.LEFT),
+ (oneOf('+ -'), 2, opAssoc.LEFT),
+ ])
+
+ arith_expr.runTests('''
+ 5+3*6
+ (5+3)*6
+ -2--11
+ ''', fullDump=False)
+ prints::
+ 5+3*6
+ [[5, '+', [3, '*', 6]]]
+
+ (5+3)*6
+ [[[5, '+', 3], '*', 6]]
+
+ -2--11
+ [[['-', 2], '-', ['-', 11]]]
+ """
+ ret = Forward()
+ lastExpr = baseExpr | ( lpar + ret + rpar )
+ for i,operDef in enumerate(opList):
+ opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4]
+ termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr
+ if arity == 3:
+ if opExpr is None or len(opExpr) != 2:
+ raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions")
+ opExpr1, opExpr2 = opExpr
+ thisExpr = Forward().setName(termName)
+ if rightLeftAssoc == opAssoc.LEFT:
+ if arity == 1:
+ matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) )
+ elif arity == 2:
+ if opExpr is not None:
+ matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) )
+ else:
+ matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) )
+ elif arity == 3:
+ matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \
+ Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr )
+ else:
+ raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
+ elif rightLeftAssoc == opAssoc.RIGHT:
+ if arity == 1:
+ # try to avoid LR with this extra test
+ if not isinstance(opExpr, Optional):
+ opExpr = Optional(opExpr)
+ matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr )
+ elif arity == 2:
+ if opExpr is not None:
+ matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) )
+ else:
+ matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) )
+ elif arity == 3:
+ matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \
+ Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr )
+ else:
+ raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
+ else:
+ raise ValueError("operator must indicate right or left associativity")
+ if pa:
+ if isinstance(pa, (tuple, list)):
+ matchExpr.setParseAction(*pa)
+ else:
+ matchExpr.setParseAction(pa)
+ thisExpr <<= ( matchExpr.setName(termName) | lastExpr )
+ lastExpr = thisExpr
+ ret <<= lastExpr
+ return ret
+
+operatorPrecedence = infixNotation
+"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release."""
+
+dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes")
+sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes")
+quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'|
+ Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes")
+unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal")
+
+def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()):
+ """
+ Helper method for defining nested lists enclosed in opening and closing
+ delimiters ("(" and ")" are the default).
+
+ Parameters:
+ - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression
+ - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression
+ - content - expression for items within the nested lists (default=C{None})
+ - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString})
+
+ If an expression is not provided for the content argument, the nested
+ expression will capture all whitespace-delimited content between delimiters
+ as a list of separate values.
+
+ Use the C{ignoreExpr} argument to define expressions that may contain
+ opening or closing characters that should not be treated as opening
+ or closing characters for nesting, such as quotedString or a comment
+ expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}.
+ The default is L{quotedString}, but if no expressions are to be ignored,
+ then pass C{None} for this argument.
+
+ Example::
+ data_type = oneOf("void int short long char float double")
+ decl_data_type = Combine(data_type + Optional(Word('*')))
+ ident = Word(alphas+'_', alphanums+'_')
+ number = pyparsing_common.number
+ arg = Group(decl_data_type + ident)
+ LPAR,RPAR = map(Suppress, "()")
+
+ code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment))
+
+ c_function = (decl_data_type("type")
+ + ident("name")
+ + LPAR + Optional(delimitedList(arg), [])("args") + RPAR
+ + code_body("body"))
+ c_function.ignore(cStyleComment)
+
+ source_code = '''
+ int is_odd(int x) {
+ return (x%2);
+ }
+
+ int dec_to_hex(char hchar) {
+ if (hchar >= '0' && hchar <= '9') {
+ return (ord(hchar)-ord('0'));
+ } else {
+ return (10+ord(hchar)-ord('A'));
+ }
+ }
+ '''
+ for func in c_function.searchString(source_code):
+ print("%(name)s (%(type)s) args: %(args)s" % func)
+
+ prints::
+ is_odd (int) args: [['int', 'x']]
+ dec_to_hex (int) args: [['char', 'hchar']]
+ """
+ if opener == closer:
+ raise ValueError("opening and closing strings cannot be the same")
+ if content is None:
+ if isinstance(opener,basestring) and isinstance(closer,basestring):
+ if len(opener) == 1 and len(closer)==1:
+ if ignoreExpr is not None:
+ content = (Combine(OneOrMore(~ignoreExpr +
+ CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ if ignoreExpr is not None:
+ content = (Combine(OneOrMore(~ignoreExpr +
+ ~Literal(opener) + ~Literal(closer) +
+ CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) +
+ CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ raise ValueError("opening and closing arguments must be strings if no content expression is given")
+ ret = Forward()
+ if ignoreExpr is not None:
+ ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) )
+ else:
+ ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) )
+ ret.setName('nested %s%s expression' % (opener,closer))
+ return ret
+
+def indentedBlock(blockStatementExpr, indentStack, indent=True):
+ """
+ Helper method for defining space-delimited indentation blocks, such as
+ those used to define block statements in Python source code.
+
+ Parameters:
+ - blockStatementExpr - expression defining syntax of statement that
+ is repeated within the indented block
+ - indentStack - list created by caller to manage indentation stack
+ (multiple statementWithIndentedBlock expressions within a single grammar
+ should share a common indentStack)
+ - indent - boolean indicating whether block must be indented beyond the
+ the current level; set to False for block of left-most statements
+ (default=C{True})
+
+ A valid block must contain at least one C{blockStatement}.
+
+ Example::
+ data = '''
+ def A(z):
+ A1
+ B = 100
+ G = A2
+ A2
+ A3
+ B
+ def BB(a,b,c):
+ BB1
+ def BBA():
+ bba1
+ bba2
+ bba3
+ C
+ D
+ def spam(x,y):
+ def eggs(z):
+ pass
+ '''
+
+
+ indentStack = [1]
+ stmt = Forward()
+
+ identifier = Word(alphas, alphanums)
+ funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":")
+ func_body = indentedBlock(stmt, indentStack)
+ funcDef = Group( funcDecl + func_body )
+
+ rvalue = Forward()
+ funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")")
+ rvalue << (funcCall | identifier | Word(nums))
+ assignment = Group(identifier + "=" + rvalue)
+ stmt << ( funcDef | assignment | identifier )
+
+ module_body = OneOrMore(stmt)
+
+ parseTree = module_body.parseString(data)
+ parseTree.pprint()
+ prints::
+ [['def',
+ 'A',
+ ['(', 'z', ')'],
+ ':',
+ [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]],
+ 'B',
+ ['def',
+ 'BB',
+ ['(', 'a', 'b', 'c', ')'],
+ ':',
+ [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]],
+ 'C',
+ 'D',
+ ['def',
+ 'spam',
+ ['(', 'x', 'y', ')'],
+ ':',
+ [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]]
+ """
+ def checkPeerIndent(s,l,t):
+ if l >= len(s): return
+ curCol = col(l,s)
+ if curCol != indentStack[-1]:
+ if curCol > indentStack[-1]:
+ raise ParseFatalException(s,l,"illegal nesting")
+ raise ParseException(s,l,"not a peer entry")
+
+ def checkSubIndent(s,l,t):
+ curCol = col(l,s)
+ if curCol > indentStack[-1]:
+ indentStack.append( curCol )
+ else:
+ raise ParseException(s,l,"not a subentry")
+
+ def checkUnindent(s,l,t):
+ if l >= len(s): return
+ curCol = col(l,s)
+ if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]):
+ raise ParseException(s,l,"not an unindent")
+ indentStack.pop()
+
+ NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress())
+ INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT')
+ PEER = Empty().setParseAction(checkPeerIndent).setName('')
+ UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT')
+ if indent:
+ smExpr = Group( Optional(NL) +
+ #~ FollowedBy(blockStatementExpr) +
+ INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT)
+ else:
+ smExpr = Group( Optional(NL) +
+ (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) )
+ blockStatementExpr.ignore(_bslash + LineEnd())
+ return smExpr.setName('indented block')
+
+alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
+punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
+
+anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag'))
+_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\''))
+commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity")
+def replaceHTMLEntity(t):
+ """Helper parser action to replace common HTML entities with their special characters"""
+ return _htmlEntityMap.get(t.entity)
+
+# it's easy to get these comment structures wrong - they're very common, so may as well make them available
+cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment")
+"Comment of the form C{/* ... */}"
+
+htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment")
+"Comment of the form C{<!-- ... -->}"
+
+restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line")
+dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment")
+"Comment of the form C{// ... (to end of line)}"
+
+cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment")
+"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}"
+
+javaStyleComment = cppStyleComment
+"Same as C{L{cppStyleComment}}"
+
+pythonStyleComment = Regex(r"#.*").setName("Python style comment")
+"Comment of the form C{# ... (to end of line)}"
+
+_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') +
+ Optional( Word(" \t") +
+ ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem")
+commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList")
+"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas.
+ This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}."""
+
+# some other useful expressions - using lower-case class name since we are really using this as a namespace
+class pyparsing_common:
+ """
+ Here are some common low-level expressions that may be useful in jump-starting parser development:
+ - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>})
+ - common L{programming identifiers<identifier>}
+ - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>})
+ - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>}
+ - L{UUID<uuid>}
+ - L{comma-separated list<comma_separated_list>}
+ Parse actions:
+ - C{L{convertToInteger}}
+ - C{L{convertToFloat}}
+ - C{L{convertToDate}}
+ - C{L{convertToDatetime}}
+ - C{L{stripHTMLTags}}
+ - C{L{upcaseTokens}}
+ - C{L{downcaseTokens}}
+
+ Example::
+ pyparsing_common.number.runTests('''
+ # any int or real number, returned as the appropriate type
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ ''')
+
+ pyparsing_common.fnumber.runTests('''
+ # any int or real number, returned as float
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ ''')
+
+ pyparsing_common.hex_integer.runTests('''
+ # hex numbers
+ 100
+ FF
+ ''')
+
+ pyparsing_common.fraction.runTests('''
+ # fractions
+ 1/2
+ -3/4
+ ''')
+
+ pyparsing_common.mixed_integer.runTests('''
+ # mixed fractions
+ 1
+ 1/2
+ -3/4
+ 1-3/4
+ ''')
+
+ import uuid
+ pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
+ pyparsing_common.uuid.runTests('''
+ # uuid
+ 12345678-1234-5678-1234-567812345678
+ ''')
+ prints::
+ # any int or real number, returned as the appropriate type
+ 100
+ [100]
+
+ -100
+ [-100]
+
+ +100
+ [100]
+
+ 3.14159
+ [3.14159]
+
+ 6.02e23
+ [6.02e+23]
+
+ 1e-12
+ [1e-12]
+
+ # any int or real number, returned as float
+ 100
+ [100.0]
+
+ -100
+ [-100.0]
+
+ +100
+ [100.0]
+
+ 3.14159
+ [3.14159]
+
+ 6.02e23
+ [6.02e+23]
+
+ 1e-12
+ [1e-12]
+
+ # hex numbers
+ 100
+ [256]
+
+ FF
+ [255]
+
+ # fractions
+ 1/2
+ [0.5]
+
+ -3/4
+ [-0.75]
+
+ # mixed fractions
+ 1
+ [1]
+
+ 1/2
+ [0.5]
+
+ -3/4
+ [-0.75]
+
+ 1-3/4
+ [1.75]
+
+ # uuid
+ 12345678-1234-5678-1234-567812345678
+ [UUID('12345678-1234-5678-1234-567812345678')]
+ """
+
+ convertToInteger = tokenMap(int)
+ """
+ Parse action for converting parsed integers to Python int
+ """
+
+ convertToFloat = tokenMap(float)
+ """
+ Parse action for converting parsed numbers to Python float
+ """
+
+ integer = Word(nums).setName("integer").setParseAction(convertToInteger)
+ """expression that parses an unsigned integer, returns an int"""
+
+ hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16))
+ """expression that parses a hexadecimal integer, returns an int"""
+
+ signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger)
+ """expression that parses an integer with optional leading sign, returns an int"""
+
+ fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction")
+ """fractional expression of an integer divided by an integer, returns a float"""
+ fraction.addParseAction(lambda t: t[0]/t[-1])
+
+ mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction")
+ """mixed integer of the form 'integer - fraction', with optional leading integer, returns float"""
+ mixed_integer.addParseAction(sum)
+
+ real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat)
+ """expression that parses a floating point number and returns a float"""
+
+ sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat)
+ """expression that parses a floating point number with optional scientific notation and returns a float"""
+
+ # streamlining this expression makes the docs nicer-looking
+ number = (sci_real | real | signed_integer).streamline()
+ """any numeric expression, returns the corresponding Python type"""
+
+ fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat)
+ """any int or real number, returned as float"""
+
+ identifier = Word(alphas+'_', alphanums+'_').setName("identifier")
+ """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')"""
+
+ ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address")
+ "IPv4 address (C{0.0.0.0 - 255.255.255.255})"
+
+ _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer")
+ _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address")
+ _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address")
+ _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8)
+ _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address")
+ ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address")
+ "IPv6 address (long, short, or mixed form)"
+
+ mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address")
+ "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)"
+
+ @staticmethod
+ def convertToDate(fmt="%Y-%m-%d"):
+ """
+ Helper to create a parse action for converting parsed date string to Python datetime.date
+
+ Params -
+ - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"})
+
+ Example::
+ date_expr = pyparsing_common.iso8601_date.copy()
+ date_expr.setParseAction(pyparsing_common.convertToDate())
+ print(date_expr.parseString("1999-12-31"))
+ prints::
+ [datetime.date(1999, 12, 31)]
+ """
+ def cvt_fn(s,l,t):
+ try:
+ return datetime.strptime(t[0], fmt).date()
+ except ValueError as ve:
+ raise ParseException(s, l, str(ve))
+ return cvt_fn
+
+ @staticmethod
+ def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"):
+ """
+ Helper to create a parse action for converting parsed datetime string to Python datetime.datetime
+
+ Params -
+ - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"})
+
+ Example::
+ dt_expr = pyparsing_common.iso8601_datetime.copy()
+ dt_expr.setParseAction(pyparsing_common.convertToDatetime())
+ print(dt_expr.parseString("1999-12-31T23:59:59.999"))
+ prints::
+ [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)]
+ """
+ def cvt_fn(s,l,t):
+ try:
+ return datetime.strptime(t[0], fmt)
+ except ValueError as ve:
+ raise ParseException(s, l, str(ve))
+ return cvt_fn
+
+ iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date")
+ "ISO8601 date (C{yyyy-mm-dd})"
+
+ iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime")
+ "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}"
+
+ uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID")
+ "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})"
+
+ _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress()
+ @staticmethod
+ def stripHTMLTags(s, l, tokens):
+ """
+ Parse action to remove HTML tags from web page HTML source
+
+ Example::
+ # strip HTML links from normal text
+ text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
+ td,td_end = makeHTMLTags("TD")
+ table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end
+
+ print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page'
+ """
+ return pyparsing_common._html_stripper.transformString(tokens[0])
+
+ _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',')
+ + Optional( White(" \t") ) ) ).streamline().setName("commaItem")
+ comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list")
+ """Predefined expression of 1 or more printable words or quoted strings, separated by commas."""
+
+ upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper()))
+ """Parse action to convert tokens to upper case."""
+
+ downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower()))
+ """Parse action to convert tokens to lower case."""
+
+
+if __name__ == "__main__":
+
+ selectToken = CaselessLiteral("select")
+ fromToken = CaselessLiteral("from")
+
+ ident = Word(alphas, alphanums + "_$")
+
+ columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
+ columnNameList = Group(delimitedList(columnName)).setName("columns")
+ columnSpec = ('*' | columnNameList)
+
+ tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
+ tableNameList = Group(delimitedList(tableName)).setName("tables")
+
+ simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables")
+
+ # demo runTests method, including embedded comments in test string
+ simpleSQL.runTests("""
+ # '*' as column list and dotted table name
+ select * from SYS.XYZZY
+
+ # caseless match on "SELECT", and casts back to "select"
+ SELECT * from XYZZY, ABC
+
+ # list of column names, and mixed case SELECT keyword
+ Select AA,BB,CC from Sys.dual
+
+ # multiple tables
+ Select A, B, C from Sys.dual, Table2
+
+ # invalid SELECT keyword - should fail
+ Xelect A, B, C from Sys.dual
+
+ # incomplete command - should fail
+ Select
+
+ # invalid column name - should fail
+ Select ^^^ frox Sys.dual
+
+ """)
+
+ pyparsing_common.number.runTests("""
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ """)
+
+ # any int or real number, returned as float
+ pyparsing_common.fnumber.runTests("""
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ """)
+
+ pyparsing_common.hex_integer.runTests("""
+ 100
+ FF
+ """)
+
+ import uuid
+ pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
+ pyparsing_common.uuid.runTests("""
+ 12345678-1234-5678-1234-567812345678
+ """)
diff --git a/contrib/python/setuptools/py2/setuptools/_vendor/pyparsing.py b/contrib/python/setuptools/py2/setuptools/_vendor/pyparsing.py
index 4aa30ee6b2..cf75e1e5fc 100644
--- a/contrib/python/setuptools/py2/setuptools/_vendor/pyparsing.py
+++ b/contrib/python/setuptools/py2/setuptools/_vendor/pyparsing.py
@@ -1,5742 +1,5742 @@
-# module pyparsing.py
-#
-# Copyright (c) 2003-2018 Paul T. McGuire
-#
-# 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__doc__ = \
-"""
-pyparsing module - Classes and methods to define and execute parsing grammars
-=============================================================================
-
-The pyparsing module is an alternative approach to creating and executing simple grammars,
-vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you
-don't need to learn a new syntax for defining grammars or matching expressions - the parsing module
-provides a library of classes that you use to construct the grammar directly in Python.
-
-Here is a program to parse "Hello, World!" (or any greeting of the form
-C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements
-(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to
-L{Literal} expressions)::
-
- from pyparsing import Word, alphas
-
- # define grammar of a greeting
- greet = Word(alphas) + "," + Word(alphas) + "!"
-
- hello = "Hello, World!"
- print (hello, "->", greet.parseString(hello))
-
-The program outputs the following::
-
- Hello, World! -> ['Hello', ',', 'World', '!']
-
-The Python representation of the grammar is quite readable, owing to the self-explanatory
-class names, and the use of '+', '|' and '^' operators.
-
-The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an
-object with named attributes.
-
-The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
- - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.)
- - quoted strings
- - embedded comments
-
-
-Getting Started -
------------------
-Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing
-classes inherit from. Use the docstrings for examples of how to:
- - construct literal match expressions from L{Literal} and L{CaselessLiteral} classes
- - construct character word-group expressions using the L{Word} class
- - see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes
- - use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones
- - associate names with your parsed results using L{ParserElement.setResultsName}
- - find some helpful expression short-cuts like L{delimitedList} and L{oneOf}
- - find more useful common expressions in the L{pyparsing_common} namespace class
-"""
-
-__version__ = "2.2.1"
-__versionTime__ = "18 Sep 2018 00:49 UTC"
-__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>"
-
-import string
-from weakref import ref as wkref
-import copy
-import sys
-import warnings
-import re
-import sre_constants
-import collections
-import pprint
-import traceback
-import types
-from datetime import datetime
-
-try:
- from _thread import RLock
-except ImportError:
- from threading import RLock
-
-try:
- # Python 3
- from collections.abc import Iterable
- from collections.abc import MutableMapping
-except ImportError:
- # Python 2.7
- from collections import Iterable
- from collections import MutableMapping
-
-try:
- from collections import OrderedDict as _OrderedDict
-except ImportError:
- try:
- from ordereddict import OrderedDict as _OrderedDict
- except ImportError:
- _OrderedDict = None
-
-#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) )
-
-__all__ = [
-'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty',
-'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal',
-'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or',
-'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException',
-'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException',
-'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter',
-'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore',
-'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col',
-'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString',
-'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums',
-'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno',
-'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral',
-'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables',
-'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity',
-'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd',
-'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute',
-'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass',
-'CloseMatch', 'tokenMap', 'pyparsing_common',
-]
-
-system_version = tuple(sys.version_info)[:3]
-PY_3 = system_version[0] == 3
-if PY_3:
- _MAX_INT = sys.maxsize
- basestring = str
- unichr = chr
- _ustr = str
-
- # build list of single arg builtins, that can be used as parse actions
- singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max]
-
-else:
- _MAX_INT = sys.maxint
- range = xrange
-
- def _ustr(obj):
- """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
- str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
- then < returns the unicode object | encodes it with the default encoding | ... >.
- """
- if isinstance(obj,unicode):
- return obj
-
- try:
- # If this works, then _ustr(obj) has the same behaviour as str(obj), so
- # it won't break any existing code.
- return str(obj)
-
- except UnicodeEncodeError:
- # Else encode it
- ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace')
- xmlcharref = Regex(r'&#\d+;')
- xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:])
- return xmlcharref.transformString(ret)
-
- # build list of single arg builtins, tolerant of Python version, that can be used as parse actions
- singleArgBuiltins = []
- import __builtin__
- for fname in "sum len sorted reversed list tuple set any all min max".split():
- try:
- singleArgBuiltins.append(getattr(__builtin__,fname))
- except AttributeError:
- continue
-
-_generatorType = type((y for y in range(1)))
-
-def _xml_escape(data):
- """Escape &, <, >, ", ', etc. in a string of data."""
-
- # ampersand must be replaced first
- from_symbols = '&><"\''
- to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split())
- for from_,to_ in zip(from_symbols, to_symbols):
- data = data.replace(from_, to_)
- return data
-
-class _Constants(object):
- pass
-
-alphas = string.ascii_uppercase + string.ascii_lowercase
-nums = "0123456789"
-hexnums = nums + "ABCDEFabcdef"
-alphanums = alphas + nums
-_bslash = chr(92)
-printables = "".join(c for c in string.printable if c not in string.whitespace)
-
-class ParseBaseException(Exception):
- """base exception class for all parsing runtime exceptions"""
- # Performance tuning: we construct a *lot* of these, so keep this
- # constructor as small and fast as possible
- def __init__( self, pstr, loc=0, msg=None, elem=None ):
- self.loc = loc
- if msg is None:
- self.msg = pstr
- self.pstr = ""
- else:
- self.msg = msg
- self.pstr = pstr
- self.parserElement = elem
- self.args = (pstr, loc, msg)
-
- @classmethod
- def _from_exception(cls, pe):
- """
- internal factory method to simplify creating one type of ParseException
- from another - avoids having __init__ signature conflicts among subclasses
- """
- return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement)
-
- def __getattr__( self, aname ):
- """supported attributes by name are:
- - lineno - returns the line number of the exception text
- - col - returns the column number of the exception text
- - line - returns the line containing the exception text
- """
- if( aname == "lineno" ):
- return lineno( self.loc, self.pstr )
- elif( aname in ("col", "column") ):
- return col( self.loc, self.pstr )
- elif( aname == "line" ):
- return line( self.loc, self.pstr )
- else:
- raise AttributeError(aname)
-
- def __str__( self ):
- return "%s (at char %d), (line:%d, col:%d)" % \
- ( self.msg, self.loc, self.lineno, self.column )
- def __repr__( self ):
- return _ustr(self)
- def markInputline( self, markerString = ">!<" ):
- """Extracts the exception line from the input string, and marks
- the location of the exception with a special symbol.
- """
- line_str = self.line
- line_column = self.column - 1
- if markerString:
- line_str = "".join((line_str[:line_column],
- markerString, line_str[line_column:]))
- return line_str.strip()
- def __dir__(self):
- return "lineno col line".split() + dir(type(self))
-
-class ParseException(ParseBaseException):
- """
- Exception thrown when parse expressions don't match class;
- supported attributes by name are:
- - lineno - returns the line number of the exception text
- - col - returns the column number of the exception text
- - line - returns the line containing the exception text
-
- Example::
- try:
- Word(nums).setName("integer").parseString("ABC")
- except ParseException as pe:
- print(pe)
- print("column: {}".format(pe.col))
-
- prints::
- Expected integer (at char 0), (line:1, col:1)
- column: 1
- """
- pass
-
-class ParseFatalException(ParseBaseException):
- """user-throwable exception thrown when inconsistent parse content
- is found; stops all parsing immediately"""
- pass
-
-class ParseSyntaxException(ParseFatalException):
- """just like L{ParseFatalException}, but thrown internally when an
- L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop
- immediately because an unbacktrackable syntax error has been found"""
- pass
-
-#~ class ReparseException(ParseBaseException):
- #~ """Experimental class - parse actions can raise this exception to cause
- #~ pyparsing to reparse the input string:
- #~ - with a modified input string, and/or
- #~ - with a modified start location
- #~ Set the values of the ReparseException in the constructor, and raise the
- #~ exception in a parse action to cause pyparsing to use the new string/location.
- #~ Setting the values as None causes no change to be made.
- #~ """
- #~ def __init_( self, newstring, restartLoc ):
- #~ self.newParseText = newstring
- #~ self.reparseLoc = restartLoc
-
-class RecursiveGrammarException(Exception):
- """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive"""
- def __init__( self, parseElementList ):
- self.parseElementTrace = parseElementList
-
- def __str__( self ):
- return "RecursiveGrammarException: %s" % self.parseElementTrace
-
-class _ParseResultsWithOffset(object):
- def __init__(self,p1,p2):
- self.tup = (p1,p2)
- def __getitem__(self,i):
- return self.tup[i]
- def __repr__(self):
- return repr(self.tup[0])
- def setOffset(self,i):
- self.tup = (self.tup[0],i)
-
-class ParseResults(object):
- """
- Structured parse results, to provide multiple means of access to the parsed data:
- - as a list (C{len(results)})
- - by list index (C{results[0], results[1]}, etc.)
- - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName})
-
- Example::
- integer = Word(nums)
- date_str = (integer.setResultsName("year") + '/'
- + integer.setResultsName("month") + '/'
- + integer.setResultsName("day"))
- # equivalent form:
- # date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- # parseString returns a ParseResults object
- result = date_str.parseString("1999/12/31")
-
- def test(s, fn=repr):
- print("%s -> %s" % (s, fn(eval(s))))
- test("list(result)")
- test("result[0]")
- test("result['month']")
- test("result.day")
- test("'month' in result")
- test("'minutes' in result")
- test("result.dump()", str)
- prints::
- list(result) -> ['1999', '/', '12', '/', '31']
- result[0] -> '1999'
- result['month'] -> '12'
- result.day -> '31'
- 'month' in result -> True
- 'minutes' in result -> False
- result.dump() -> ['1999', '/', '12', '/', '31']
- - day: 31
- - month: 12
- - year: 1999
- """
- def __new__(cls, toklist=None, name=None, asList=True, modal=True ):
- if isinstance(toklist, cls):
- return toklist
- retobj = object.__new__(cls)
- retobj.__doinit = True
- return retobj
-
- # Performance tuning: we construct a *lot* of these, so keep this
- # constructor as small and fast as possible
- def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ):
- if self.__doinit:
- self.__doinit = False
- self.__name = None
- self.__parent = None
- self.__accumNames = {}
- self.__asList = asList
- self.__modal = modal
- if toklist is None:
- toklist = []
- if isinstance(toklist, list):
- self.__toklist = toklist[:]
- elif isinstance(toklist, _generatorType):
- self.__toklist = list(toklist)
- else:
- self.__toklist = [toklist]
- self.__tokdict = dict()
-
- if name is not None and name:
- if not modal:
- self.__accumNames[name] = 0
- if isinstance(name,int):
- name = _ustr(name) # will always return a str, but use _ustr for consistency
- self.__name = name
- if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])):
- if isinstance(toklist,basestring):
- toklist = [ toklist ]
- if asList:
- if isinstance(toklist,ParseResults):
- self[name] = _ParseResultsWithOffset(toklist.copy(),0)
- else:
- self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0)
- self[name].__name = name
- else:
- try:
- self[name] = toklist[0]
- except (KeyError,TypeError,IndexError):
- self[name] = toklist
-
- def __getitem__( self, i ):
- if isinstance( i, (int,slice) ):
- return self.__toklist[i]
- else:
- if i not in self.__accumNames:
- return self.__tokdict[i][-1][0]
- else:
- return ParseResults([ v[0] for v in self.__tokdict[i] ])
-
- def __setitem__( self, k, v, isinstance=isinstance ):
- if isinstance(v,_ParseResultsWithOffset):
- self.__tokdict[k] = self.__tokdict.get(k,list()) + [v]
- sub = v[0]
- elif isinstance(k,(int,slice)):
- self.__toklist[k] = v
- sub = v
- else:
- self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)]
- sub = v
- if isinstance(sub,ParseResults):
- sub.__parent = wkref(self)
-
- def __delitem__( self, i ):
- if isinstance(i,(int,slice)):
- mylen = len( self.__toklist )
- del self.__toklist[i]
-
- # convert int to slice
- if isinstance(i, int):
- if i < 0:
- i += mylen
- i = slice(i, i+1)
- # get removed indices
- removed = list(range(*i.indices(mylen)))
- removed.reverse()
- # fixup indices in token dictionary
- for name,occurrences in self.__tokdict.items():
- for j in removed:
- for k, (value, position) in enumerate(occurrences):
- occurrences[k] = _ParseResultsWithOffset(value, position - (position > j))
- else:
- del self.__tokdict[i]
-
- def __contains__( self, k ):
- return k in self.__tokdict
-
- def __len__( self ): return len( self.__toklist )
- def __bool__(self): return ( not not self.__toklist )
- __nonzero__ = __bool__
- def __iter__( self ): return iter( self.__toklist )
- def __reversed__( self ): return iter( self.__toklist[::-1] )
- def _iterkeys( self ):
- if hasattr(self.__tokdict, "iterkeys"):
- return self.__tokdict.iterkeys()
- else:
- return iter(self.__tokdict)
-
- def _itervalues( self ):
- return (self[k] for k in self._iterkeys())
-
- def _iteritems( self ):
- return ((k, self[k]) for k in self._iterkeys())
-
- if PY_3:
- keys = _iterkeys
- """Returns an iterator of all named result keys (Python 3.x only)."""
-
- values = _itervalues
- """Returns an iterator of all named result values (Python 3.x only)."""
-
- items = _iteritems
- """Returns an iterator of all named result key-value tuples (Python 3.x only)."""
-
- else:
- iterkeys = _iterkeys
- """Returns an iterator of all named result keys (Python 2.x only)."""
-
- itervalues = _itervalues
- """Returns an iterator of all named result values (Python 2.x only)."""
-
- iteritems = _iteritems
- """Returns an iterator of all named result key-value tuples (Python 2.x only)."""
-
- def keys( self ):
- """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.iterkeys())
-
- def values( self ):
- """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.itervalues())
-
- def items( self ):
- """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.iteritems())
-
- def haskeys( self ):
- """Since keys() returns an iterator, this method is helpful in bypassing
- code that looks for the existence of any defined results names."""
- return bool(self.__tokdict)
-
- def pop( self, *args, **kwargs):
- """
- Removes and returns item at specified index (default=C{last}).
- Supports both C{list} and C{dict} semantics for C{pop()}. If passed no
- argument or an integer argument, it will use C{list} semantics
- and pop tokens from the list of parsed tokens. If passed a
- non-integer argument (most likely a string), it will use C{dict}
- semantics and pop the corresponding value from any defined
- results names. A second default return value argument is
- supported, just as in C{dict.pop()}.
-
- Example::
- def remove_first(tokens):
- tokens.pop(0)
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
- print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321']
-
- label = Word(alphas)
- patt = label("LABEL") + OneOrMore(Word(nums))
- print(patt.parseString("AAB 123 321").dump())
-
- # Use pop() in a parse action to remove named result (note that corresponding value is not
- # removed from list form of results)
- def remove_LABEL(tokens):
- tokens.pop("LABEL")
- return tokens
- patt.addParseAction(remove_LABEL)
- print(patt.parseString("AAB 123 321").dump())
- prints::
- ['AAB', '123', '321']
- - LABEL: AAB
-
- ['AAB', '123', '321']
- """
- if not args:
- args = [-1]
- for k,v in kwargs.items():
- if k == 'default':
- args = (args[0], v)
- else:
- raise TypeError("pop() got an unexpected keyword argument '%s'" % k)
- if (isinstance(args[0], int) or
- len(args) == 1 or
- args[0] in self):
- index = args[0]
- ret = self[index]
- del self[index]
- return ret
- else:
- defaultvalue = args[1]
- return defaultvalue
-
- def get(self, key, defaultValue=None):
- """
- Returns named result matching the given key, or if there is no
- such name, then returns the given C{defaultValue} or C{None} if no
- C{defaultValue} is specified.
-
- Similar to C{dict.get()}.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString("1999/12/31")
- print(result.get("year")) # -> '1999'
- print(result.get("hour", "not specified")) # -> 'not specified'
- print(result.get("hour")) # -> None
- """
- if key in self:
- return self[key]
- else:
- return defaultValue
-
- def insert( self, index, insStr ):
- """
- Inserts new element at location index in the list of parsed tokens.
-
- Similar to C{list.insert()}.
-
- Example::
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
-
- # use a parse action to insert the parse location in the front of the parsed results
- def insert_locn(locn, tokens):
- tokens.insert(0, locn)
- print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321']
- """
- self.__toklist.insert(index, insStr)
- # fixup indices in token dictionary
- for name,occurrences in self.__tokdict.items():
- for k, (value, position) in enumerate(occurrences):
- occurrences[k] = _ParseResultsWithOffset(value, position + (position > index))
-
- def append( self, item ):
- """
- Add single element to end of ParseResults list of elements.
-
- Example::
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
-
- # use a parse action to compute the sum of the parsed integers, and add it to the end
- def append_sum(tokens):
- tokens.append(sum(map(int, tokens)))
- print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444]
- """
- self.__toklist.append(item)
-
- def extend( self, itemseq ):
- """
- Add sequence of elements to end of ParseResults list of elements.
-
- Example::
- patt = OneOrMore(Word(alphas))
-
- # use a parse action to append the reverse of the matched strings, to make a palindrome
- def make_palindrome(tokens):
- tokens.extend(reversed([t[::-1] for t in tokens]))
- return ''.join(tokens)
- print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl'
- """
- if isinstance(itemseq, ParseResults):
- self += itemseq
- else:
- self.__toklist.extend(itemseq)
-
- def clear( self ):
- """
- Clear all elements and results names.
- """
- del self.__toklist[:]
- self.__tokdict.clear()
-
- def __getattr__( self, name ):
- try:
- return self[name]
- except KeyError:
- return ""
-
- if name in self.__tokdict:
- if name not in self.__accumNames:
- return self.__tokdict[name][-1][0]
- else:
- return ParseResults([ v[0] for v in self.__tokdict[name] ])
- else:
- return ""
-
- def __add__( self, other ):
- ret = self.copy()
- ret += other
- return ret
-
- def __iadd__( self, other ):
- if other.__tokdict:
- offset = len(self.__toklist)
- addoffset = lambda a: offset if a<0 else a+offset
- otheritems = other.__tokdict.items()
- otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) )
- for (k,vlist) in otheritems for v in vlist]
- for k,v in otherdictitems:
- self[k] = v
- if isinstance(v[0],ParseResults):
- v[0].__parent = wkref(self)
-
- self.__toklist += other.__toklist
- self.__accumNames.update( other.__accumNames )
- return self
-
- def __radd__(self, other):
- if isinstance(other,int) and other == 0:
- # useful for merging many ParseResults using sum() builtin
- return self.copy()
- else:
- # this may raise a TypeError - so be it
- return other + self
-
- def __repr__( self ):
- return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) )
-
- def __str__( self ):
- return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']'
-
- def _asStringList( self, sep='' ):
- out = []
- for item in self.__toklist:
- if out and sep:
- out.append(sep)
- if isinstance( item, ParseResults ):
- out += item._asStringList()
- else:
- out.append( _ustr(item) )
- return out
-
- def asList( self ):
- """
- Returns the parse results as a nested list of matching tokens, all converted to strings.
-
- Example::
- patt = OneOrMore(Word(alphas))
- result = patt.parseString("sldkj lsdkj sldkj")
- # even though the result prints in string-like form, it is actually a pyparsing ParseResults
- print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj']
-
- # Use asList() to create an actual list
- result_list = result.asList()
- print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj']
- """
- return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist]
-
- def asDict( self ):
- """
- Returns the named parse results as a nested dictionary.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString('12/31/1999')
- print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]})
-
- result_dict = result.asDict()
- print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'}
-
- # even though a ParseResults supports dict-like access, sometime you just need to have a dict
- import json
- print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable
- print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"}
- """
- if PY_3:
- item_fn = self.items
- else:
- item_fn = self.iteritems
-
- def toItem(obj):
- if isinstance(obj, ParseResults):
- if obj.haskeys():
- return obj.asDict()
- else:
- return [toItem(v) for v in obj]
- else:
- return obj
-
- return dict((k,toItem(v)) for k,v in item_fn())
-
- def copy( self ):
- """
- Returns a new copy of a C{ParseResults} object.
- """
- ret = ParseResults( self.__toklist )
- ret.__tokdict = self.__tokdict.copy()
- ret.__parent = self.__parent
- ret.__accumNames.update( self.__accumNames )
- ret.__name = self.__name
- return ret
-
- def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ):
- """
- (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names.
- """
- nl = "\n"
- out = []
- namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items()
- for v in vlist)
- nextLevelIndent = indent + " "
-
- # collapse out indents if formatting is not desired
- if not formatted:
- indent = ""
- nextLevelIndent = ""
- nl = ""
-
- selfTag = None
- if doctag is not None:
- selfTag = doctag
- else:
- if self.__name:
- selfTag = self.__name
-
- if not selfTag:
- if namedItemsOnly:
- return ""
- else:
- selfTag = "ITEM"
-
- out += [ nl, indent, "<", selfTag, ">" ]
-
- for i,res in enumerate(self.__toklist):
- if isinstance(res,ParseResults):
- if i in namedItems:
- out += [ res.asXML(namedItems[i],
- namedItemsOnly and doctag is None,
- nextLevelIndent,
- formatted)]
- else:
- out += [ res.asXML(None,
- namedItemsOnly and doctag is None,
- nextLevelIndent,
- formatted)]
- else:
- # individual token, see if there is a name for it
- resTag = None
- if i in namedItems:
- resTag = namedItems[i]
- if not resTag:
- if namedItemsOnly:
- continue
- else:
- resTag = "ITEM"
- xmlBodyText = _xml_escape(_ustr(res))
- out += [ nl, nextLevelIndent, "<", resTag, ">",
- xmlBodyText,
- "</", resTag, ">" ]
-
- out += [ nl, indent, "</", selfTag, ">" ]
- return "".join(out)
-
- def __lookup(self,sub):
- for k,vlist in self.__tokdict.items():
- for v,loc in vlist:
- if sub is v:
- return k
- return None
-
- def getName(self):
- r"""
- Returns the results name for this token expression. Useful when several
- different expressions might match at a particular location.
-
- Example::
- integer = Word(nums)
- ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d")
- house_number_expr = Suppress('#') + Word(nums, alphanums)
- user_data = (Group(house_number_expr)("house_number")
- | Group(ssn_expr)("ssn")
- | Group(integer)("age"))
- user_info = OneOrMore(user_data)
-
- result = user_info.parseString("22 111-22-3333 #221B")
- for item in result:
- print(item.getName(), ':', item[0])
- prints::
- age : 22
- ssn : 111-22-3333
- house_number : 221B
- """
- if self.__name:
- return self.__name
- elif self.__parent:
- par = self.__parent()
- if par:
- return par.__lookup(self)
- else:
- return None
- elif (len(self) == 1 and
- len(self.__tokdict) == 1 and
- next(iter(self.__tokdict.values()))[0][1] in (0,-1)):
- return next(iter(self.__tokdict.keys()))
- else:
- return None
-
- def dump(self, indent='', depth=0, full=True):
- """
- Diagnostic method for listing out the contents of a C{ParseResults}.
- Accepts an optional C{indent} argument so that this string can be embedded
- in a nested display of other data.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString('12/31/1999')
- print(result.dump())
- prints::
- ['12', '/', '31', '/', '1999']
- - day: 1999
- - month: 31
- - year: 12
- """
- out = []
- NL = '\n'
- out.append( indent+_ustr(self.asList()) )
- if full:
- if self.haskeys():
- items = sorted((str(k), v) for k,v in self.items())
- for k,v in items:
- if out:
- out.append(NL)
- out.append( "%s%s- %s: " % (indent,(' '*depth), k) )
- if isinstance(v,ParseResults):
- if v:
- out.append( v.dump(indent,depth+1) )
- else:
- out.append(_ustr(v))
- else:
- out.append(repr(v))
- elif any(isinstance(vv,ParseResults) for vv in self):
- v = self
- for i,vv in enumerate(v):
- if isinstance(vv,ParseResults):
- out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) ))
- else:
- out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv)))
-
- return "".join(out)
-
- def pprint(self, *args, **kwargs):
- """
- Pretty-printer for parsed results as a list, using the C{pprint} module.
- Accepts additional positional or keyword args as defined for the
- C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint})
-
- Example::
- ident = Word(alphas, alphanums)
- num = Word(nums)
- func = Forward()
- term = ident | num | Group('(' + func + ')')
- func <<= ident + Group(Optional(delimitedList(term)))
- result = func.parseString("fna a,b,(fnb c,d,200),100")
- result.pprint(width=40)
- prints::
- ['fna',
- ['a',
- 'b',
- ['(', 'fnb', ['c', 'd', '200'], ')'],
- '100']]
- """
- pprint.pprint(self.asList(), *args, **kwargs)
-
- # add support for pickle protocol
- def __getstate__(self):
- return ( self.__toklist,
- ( self.__tokdict.copy(),
- self.__parent is not None and self.__parent() or None,
- self.__accumNames,
- self.__name ) )
-
- def __setstate__(self,state):
- self.__toklist = state[0]
- (self.__tokdict,
- par,
- inAccumNames,
- self.__name) = state[1]
- self.__accumNames = {}
- self.__accumNames.update(inAccumNames)
- if par is not None:
- self.__parent = wkref(par)
- else:
- self.__parent = None
-
- def __getnewargs__(self):
- return self.__toklist, self.__name, self.__asList, self.__modal
-
- def __dir__(self):
- return (dir(type(self)) + list(self.keys()))
-
-MutableMapping.register(ParseResults)
-
-def col (loc,strg):
- """Returns current column within a string, counting newlines as line separators.
- The first column is number 1.
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
- """
- s = strg
- return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc)
-
-def lineno(loc,strg):
- """Returns current line number within a string, counting newlines as line separators.
- The first line is number 1.
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
- """
- return strg.count("\n",0,loc) + 1
-
-def line( loc, strg ):
- """Returns the line of text containing loc within a string, counting newlines as line separators.
- """
- lastCR = strg.rfind("\n", 0, loc)
- nextCR = strg.find("\n", loc)
- if nextCR >= 0:
- return strg[lastCR+1:nextCR]
- else:
- return strg[lastCR+1:]
-
-def _defaultStartDebugAction( instring, loc, expr ):
- print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )))
-
-def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ):
- print ("Matched " + _ustr(expr) + " -> " + str(toks.asList()))
-
-def _defaultExceptionDebugAction( instring, loc, expr, exc ):
- print ("Exception raised:" + _ustr(exc))
-
-def nullDebugAction(*args):
- """'Do-nothing' debug action, to suppress debugging output during parsing."""
- pass
-
-# Only works on Python 3.x - nonlocal is toxic to Python 2 installs
-#~ 'decorator to trim function calls to match the arity of the target'
-#~ def _trim_arity(func, maxargs=3):
- #~ if func in singleArgBuiltins:
- #~ return lambda s,l,t: func(t)
- #~ limit = 0
- #~ foundArity = False
- #~ def wrapper(*args):
- #~ nonlocal limit,foundArity
- #~ while 1:
- #~ try:
- #~ ret = func(*args[limit:])
- #~ foundArity = True
- #~ return ret
- #~ except TypeError:
- #~ if limit == maxargs or foundArity:
- #~ raise
- #~ limit += 1
- #~ continue
- #~ return wrapper
-
-# this version is Python 2.x-3.x cross-compatible
-'decorator to trim function calls to match the arity of the target'
-def _trim_arity(func, maxargs=2):
- if func in singleArgBuiltins:
- return lambda s,l,t: func(t)
- limit = [0]
- foundArity = [False]
-
- # traceback return data structure changed in Py3.5 - normalize back to plain tuples
- if system_version[:2] >= (3,5):
- def extract_stack(limit=0):
- # special handling for Python 3.5.0 - extra deep call stack by 1
- offset = -3 if system_version == (3,5,0) else -2
- frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset]
- return [frame_summary[:2]]
- def extract_tb(tb, limit=0):
- frames = traceback.extract_tb(tb, limit=limit)
- frame_summary = frames[-1]
- return [frame_summary[:2]]
- else:
- extract_stack = traceback.extract_stack
- extract_tb = traceback.extract_tb
-
- # synthesize what would be returned by traceback.extract_stack at the call to
- # user's parse action 'func', so that we don't incur call penalty at parse time
-
- LINE_DIFF = 6
- # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND
- # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!!
- this_line = extract_stack(limit=2)[-1]
- pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF)
-
- def wrapper(*args):
- while 1:
- try:
- ret = func(*args[limit[0]:])
- foundArity[0] = True
- return ret
- except TypeError:
- # re-raise TypeErrors if they did not come from our arity testing
- if foundArity[0]:
- raise
- else:
- try:
- tb = sys.exc_info()[-1]
- if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth:
- raise
- finally:
- del tb
-
- if limit[0] <= maxargs:
- limit[0] += 1
- continue
- raise
-
- # copy func name to wrapper for sensible debug output
- func_name = "<parse action>"
- try:
- func_name = getattr(func, '__name__',
- getattr(func, '__class__').__name__)
- except Exception:
- func_name = str(func)
- wrapper.__name__ = func_name
-
- return wrapper
-
-class ParserElement(object):
- """Abstract base level parser element class."""
- DEFAULT_WHITE_CHARS = " \n\t\r"
- verbose_stacktrace = False
-
- @staticmethod
- def setDefaultWhitespaceChars( chars ):
- r"""
- Overrides the default whitespace chars
-
- Example::
- # default whitespace chars are space, <TAB> and newline
- OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl']
-
- # change to just treat newline as significant
- ParserElement.setDefaultWhitespaceChars(" \t")
- OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def']
- """
- ParserElement.DEFAULT_WHITE_CHARS = chars
-
- @staticmethod
- def inlineLiteralsUsing(cls):
- """
- Set class to be used for inclusion of string literals into a parser.
-
- Example::
- # default literal class used is Literal
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
-
-
- # change to Suppress
- ParserElement.inlineLiteralsUsing(Suppress)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- date_str.parseString("1999/12/31") # -> ['1999', '12', '31']
- """
- ParserElement._literalStringClass = cls
-
- def __init__( self, savelist=False ):
- self.parseAction = list()
- self.failAction = None
- #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall
- self.strRepr = None
- self.resultsName = None
- self.saveAsList = savelist
- self.skipWhitespace = True
- self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
- self.copyDefaultWhiteChars = True
- self.mayReturnEmpty = False # used when checking for left-recursion
- self.keepTabs = False
- self.ignoreExprs = list()
- self.debug = False
- self.streamlined = False
- self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index
- self.errmsg = ""
- self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all)
- self.debugActions = ( None, None, None ) #custom debug actions
- self.re = None
- self.callPreparse = True # used to avoid redundant calls to preParse
- self.callDuringTry = False
-
- def copy( self ):
- """
- Make a copy of this C{ParserElement}. Useful for defining different parse actions
- for the same parsing pattern, using copies of the original parse element.
-
- Example::
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K")
- integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
-
- print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M"))
- prints::
- [5120, 100, 655360, 268435456]
- Equivalent form of C{expr.copy()} is just C{expr()}::
- integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
- """
- cpy = copy.copy( self )
- cpy.parseAction = self.parseAction[:]
- cpy.ignoreExprs = self.ignoreExprs[:]
- if self.copyDefaultWhiteChars:
- cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
- return cpy
-
- def setName( self, name ):
- """
- Define name for this expression, makes debugging and exception messages clearer.
-
- Example::
- Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1)
- Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1)
- """
- self.name = name
- self.errmsg = "Expected " + self.name
- if hasattr(self,"exception"):
- self.exception.msg = self.errmsg
- return self
-
- def setResultsName( self, name, listAllMatches=False ):
- """
- Define name for referencing matching tokens as a nested attribute
- of the returned parse results.
- NOTE: this returns a *copy* of the original C{ParserElement} object;
- this is so that the client can define a basic element, such as an
- integer, and reference it in multiple places with different names.
-
- You can also set results names using the abbreviated syntax,
- C{expr("name")} in place of C{expr.setResultsName("name")} -
- see L{I{__call__}<__call__>}.
-
- Example::
- date_str = (integer.setResultsName("year") + '/'
- + integer.setResultsName("month") + '/'
- + integer.setResultsName("day"))
-
- # equivalent form:
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
- """
- newself = self.copy()
- if name.endswith("*"):
- name = name[:-1]
- listAllMatches=True
- newself.resultsName = name
- newself.modalResults = not listAllMatches
- return newself
-
- def setBreak(self,breakFlag = True):
- """Method to invoke the Python pdb debugger when this element is
- about to be parsed. Set C{breakFlag} to True to enable, False to
- disable.
- """
- if breakFlag:
- _parseMethod = self._parse
- def breaker(instring, loc, doActions=True, callPreParse=True):
- import pdb
- pdb.set_trace()
- return _parseMethod( instring, loc, doActions, callPreParse )
- breaker._originalParseMethod = _parseMethod
- self._parse = breaker
- else:
- if hasattr(self._parse,"_originalParseMethod"):
- self._parse = self._parse._originalParseMethod
- return self
-
- def setParseAction( self, *fns, **kwargs ):
- """
- Define one or more actions to perform when successfully matching parse element definition.
- Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)},
- C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where:
- - s = the original string being parsed (see note below)
- - loc = the location of the matching substring
- - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object
- If the functions in fns modify the tokens, they can return them as the return
- value from fn, and the modified list of tokens will replace the original.
- Otherwise, fn does not need to return any value.
-
- Optional keyword arguments:
- - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{parseString}<parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
-
- Example::
- integer = Word(nums)
- date_str = integer + '/' + integer + '/' + integer
-
- date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
-
- # use parse action to convert to ints at parse time
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- date_str = integer + '/' + integer + '/' + integer
-
- # note that integer fields are now ints, not strings
- date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31]
- """
- self.parseAction = list(map(_trim_arity, list(fns)))
- self.callDuringTry = kwargs.get("callDuringTry", False)
- return self
-
- def addParseAction( self, *fns, **kwargs ):
- """
- Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}.
-
- See examples in L{I{copy}<copy>}.
- """
- self.parseAction += list(map(_trim_arity, list(fns)))
- self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
- return self
-
- def addCondition(self, *fns, **kwargs):
- """Add a boolean predicate function to expression's list of parse actions. See
- L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction},
- functions passed to C{addCondition} need to return boolean success/fail of the condition.
-
- Optional keyword arguments:
- - message = define a custom message to be used in the raised exception
- - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException
-
- Example::
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- year_int = integer.copy()
- year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later")
- date_str = year_int + '/' + integer + '/' + integer
-
- result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1)
- """
- msg = kwargs.get("message", "failed user-defined condition")
- exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException
- for fn in fns:
- def pa(s,l,t):
- if not bool(_trim_arity(fn)(s,l,t)):
- raise exc_type(s,l,msg)
- self.parseAction.append(pa)
- self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
- return self
-
- def setFailAction( self, fn ):
- """Define action to perform if parsing fails at this expression.
- Fail acton fn is a callable function that takes the arguments
- C{fn(s,loc,expr,err)} where:
- - s = string being parsed
- - loc = location where expression match was attempted and failed
- - expr = the parse expression that failed
- - err = the exception thrown
- The function returns no value. It may throw C{L{ParseFatalException}}
- if it is desired to stop parsing immediately."""
- self.failAction = fn
- return self
-
- def _skipIgnorables( self, instring, loc ):
- exprsFound = True
- while exprsFound:
- exprsFound = False
- for e in self.ignoreExprs:
- try:
- while 1:
- loc,dummy = e._parse( instring, loc )
- exprsFound = True
- except ParseException:
- pass
- return loc
-
- def preParse( self, instring, loc ):
- if self.ignoreExprs:
- loc = self._skipIgnorables( instring, loc )
-
- if self.skipWhitespace:
- wt = self.whiteChars
- instrlen = len(instring)
- while loc < instrlen and instring[loc] in wt:
- loc += 1
-
- return loc
-
- def parseImpl( self, instring, loc, doActions=True ):
- return loc, []
-
- def postParse( self, instring, loc, tokenlist ):
- return tokenlist
-
- #~ @profile
- def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
- debugging = ( self.debug ) #and doActions )
-
- if debugging or self.failAction:
- #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))
- if (self.debugActions[0] ):
- self.debugActions[0]( instring, loc, self )
- if callPreParse and self.callPreparse:
- preloc = self.preParse( instring, loc )
- else:
- preloc = loc
- tokensStart = preloc
- try:
- try:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
- except IndexError:
- raise ParseException( instring, len(instring), self.errmsg, self )
- except ParseBaseException as err:
- #~ print ("Exception raised:", err)
- if self.debugActions[2]:
- self.debugActions[2]( instring, tokensStart, self, err )
- if self.failAction:
- self.failAction( instring, tokensStart, self, err )
- raise
- else:
- if callPreParse and self.callPreparse:
- preloc = self.preParse( instring, loc )
- else:
- preloc = loc
- tokensStart = preloc
- if self.mayIndexError or preloc >= len(instring):
- try:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
- except IndexError:
- raise ParseException( instring, len(instring), self.errmsg, self )
- else:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
-
- tokens = self.postParse( instring, loc, tokens )
-
- retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults )
- if self.parseAction and (doActions or self.callDuringTry):
- if debugging:
- try:
- for fn in self.parseAction:
- tokens = fn( instring, tokensStart, retTokens )
- if tokens is not None:
- retTokens = ParseResults( tokens,
- self.resultsName,
- asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
- modal=self.modalResults )
- except ParseBaseException as err:
- #~ print "Exception raised in user parse action:", err
- if (self.debugActions[2] ):
- self.debugActions[2]( instring, tokensStart, self, err )
- raise
- else:
- for fn in self.parseAction:
- tokens = fn( instring, tokensStart, retTokens )
- if tokens is not None:
- retTokens = ParseResults( tokens,
- self.resultsName,
- asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
- modal=self.modalResults )
- if debugging:
- #~ print ("Matched",self,"->",retTokens.asList())
- if (self.debugActions[1] ):
- self.debugActions[1]( instring, tokensStart, loc, self, retTokens )
-
- return loc, retTokens
-
- def tryParse( self, instring, loc ):
- try:
- return self._parse( instring, loc, doActions=False )[0]
- except ParseFatalException:
- raise ParseException( instring, loc, self.errmsg, self)
-
- def canParseNext(self, instring, loc):
- try:
- self.tryParse(instring, loc)
- except (ParseException, IndexError):
- return False
- else:
- return True
-
- class _UnboundedCache(object):
- def __init__(self):
- cache = {}
- self.not_in_cache = not_in_cache = object()
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
-
- def clear(self):
- cache.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- if _OrderedDict is not None:
- class _FifoCache(object):
- def __init__(self, size):
- self.not_in_cache = not_in_cache = object()
-
- cache = _OrderedDict()
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
- while len(cache) > size:
- try:
- cache.popitem(False)
- except KeyError:
- pass
-
- def clear(self):
- cache.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- else:
- class _FifoCache(object):
- def __init__(self, size):
- self.not_in_cache = not_in_cache = object()
-
- cache = {}
- key_fifo = collections.deque([], size)
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
- while len(key_fifo) > size:
- cache.pop(key_fifo.popleft(), None)
- key_fifo.append(key)
-
- def clear(self):
- cache.clear()
- key_fifo.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- # argument cache for optimizing repeated calls when backtracking through recursive expressions
- packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail
- packrat_cache_lock = RLock()
- packrat_cache_stats = [0, 0]
-
- # this method gets repeatedly called during backtracking with the same arguments -
- # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression
- def _parseCache( self, instring, loc, doActions=True, callPreParse=True ):
- HIT, MISS = 0, 1
- lookup = (self, instring, loc, callPreParse, doActions)
- with ParserElement.packrat_cache_lock:
- cache = ParserElement.packrat_cache
- value = cache.get(lookup)
- if value is cache.not_in_cache:
- ParserElement.packrat_cache_stats[MISS] += 1
- try:
- value = self._parseNoCache(instring, loc, doActions, callPreParse)
- except ParseBaseException as pe:
- # cache a copy of the exception, without the traceback
- cache.set(lookup, pe.__class__(*pe.args))
- raise
- else:
- cache.set(lookup, (value[0], value[1].copy()))
- return value
- else:
- ParserElement.packrat_cache_stats[HIT] += 1
- if isinstance(value, Exception):
- raise value
- return (value[0], value[1].copy())
-
- _parse = _parseNoCache
-
- @staticmethod
- def resetCache():
- ParserElement.packrat_cache.clear()
- ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats)
-
- _packratEnabled = False
- @staticmethod
- def enablePackrat(cache_size_limit=128):
- """Enables "packrat" parsing, which adds memoizing to the parsing logic.
- Repeated parse attempts at the same string location (which happens
- often in many complex grammars) can immediately return a cached value,
- instead of re-executing parsing/validating code. Memoizing is done of
- both valid results and parsing exceptions.
-
- Parameters:
- - cache_size_limit - (default=C{128}) - if an integer value is provided
- will limit the size of the packrat cache; if None is passed, then
- the cache size will be unbounded; if 0 is passed, the cache will
- be effectively disabled.
-
- This speedup may break existing programs that use parse actions that
- have side-effects. For this reason, packrat parsing is disabled when
- you first import pyparsing. To activate the packrat feature, your
- program must call the class method C{ParserElement.enablePackrat()}. If
- your program uses C{psyco} to "compile as you go", you must call
- C{enablePackrat} before calling C{psyco.full()}. If you do not do this,
- Python will crash. For best results, call C{enablePackrat()} immediately
- after importing pyparsing.
-
- Example::
- import pyparsing
- pyparsing.ParserElement.enablePackrat()
- """
- if not ParserElement._packratEnabled:
- ParserElement._packratEnabled = True
- if cache_size_limit is None:
- ParserElement.packrat_cache = ParserElement._UnboundedCache()
- else:
- ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit)
- ParserElement._parse = ParserElement._parseCache
-
- def parseString( self, instring, parseAll=False ):
- """
- Execute the parse expression with the given string.
- This is the main interface to the client code, once the complete
- expression has been built.
-
- If you want the grammar to require that the entire input string be
- successfully parsed, then set C{parseAll} to True (equivalent to ending
- the grammar with C{L{StringEnd()}}).
-
- Note: C{parseString} implicitly calls C{expandtabs()} on the input string,
- in order to report proper column numbers in parse actions.
- If the input string contains tabs and
- the grammar uses parse actions that use the C{loc} argument to index into the
- string being parsed, you can ensure you have a consistent view of the input
- string by:
- - calling C{parseWithTabs} on your grammar before calling C{parseString}
- (see L{I{parseWithTabs}<parseWithTabs>})
- - define your parse action using the full C{(s,loc,toks)} signature, and
- reference the input string using the parse action's C{s} argument
- - explictly expand the tabs in your input string before calling
- C{parseString}
-
- Example::
- Word('a').parseString('aaaaabaaa') # -> ['aaaaa']
- Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text
- """
- ParserElement.resetCache()
- if not self.streamlined:
- self.streamline()
- #~ self.saveAsList = True
- for e in self.ignoreExprs:
- e.streamline()
- if not self.keepTabs:
- instring = instring.expandtabs()
- try:
- loc, tokens = self._parse( instring, 0 )
- if parseAll:
- loc = self.preParse( instring, loc )
- se = Empty() + StringEnd()
- se._parse( instring, loc )
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
- else:
- return tokens
-
- def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ):
- """
- Scan the input string for expression matches. Each match will return the
- matching tokens, start location, and end location. May be called with optional
- C{maxMatches} argument, to clip scanning after 'n' matches are found. If
- C{overlap} is specified, then overlapping matches will be reported.
-
- Note that the start and end locations are reported relative to the string
- being parsed. See L{I{parseString}<parseString>} for more information on parsing
- strings with embedded tabs.
-
- Example::
- source = "sldjf123lsdjjkf345sldkjf879lkjsfd987"
- print(source)
- for tokens,start,end in Word(alphas).scanString(source):
- print(' '*start + '^'*(end-start))
- print(' '*start + tokens[0])
-
- prints::
-
- sldjf123lsdjjkf345sldkjf879lkjsfd987
- ^^^^^
- sldjf
- ^^^^^^^
- lsdjjkf
- ^^^^^^
- sldkjf
- ^^^^^^
- lkjsfd
- """
- if not self.streamlined:
- self.streamline()
- for e in self.ignoreExprs:
- e.streamline()
-
- if not self.keepTabs:
- instring = _ustr(instring).expandtabs()
- instrlen = len(instring)
- loc = 0
- preparseFn = self.preParse
- parseFn = self._parse
- ParserElement.resetCache()
- matches = 0
- try:
- while loc <= instrlen and matches < maxMatches:
- try:
- preloc = preparseFn( instring, loc )
- nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
- except ParseException:
- loc = preloc+1
- else:
- if nextLoc > loc:
- matches += 1
- yield tokens, preloc, nextLoc
- if overlap:
- nextloc = preparseFn( instring, loc )
- if nextloc > loc:
- loc = nextLoc
- else:
- loc += 1
- else:
- loc = nextLoc
- else:
- loc = preloc+1
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def transformString( self, instring ):
- """
- Extension to C{L{scanString}}, to modify matching text with modified tokens that may
- be returned from a parse action. To use C{transformString}, define a grammar and
- attach a parse action to it that modifies the returned token list.
- Invoking C{transformString()} on a target string will then scan for matches,
- and replace the matched text patterns according to the logic in the parse
- action. C{transformString()} returns the resulting transformed string.
-
- Example::
- wd = Word(alphas)
- wd.setParseAction(lambda toks: toks[0].title())
-
- print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york."))
- Prints::
- Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York.
- """
- out = []
- lastE = 0
- # force preservation of <TAB>s, to minimize unwanted transformation of string, and to
- # keep string locs straight between transformString and scanString
- self.keepTabs = True
- try:
- for t,s,e in self.scanString( instring ):
- out.append( instring[lastE:s] )
- if t:
- if isinstance(t,ParseResults):
- out += t.asList()
- elif isinstance(t,list):
- out += t
- else:
- out.append(t)
- lastE = e
- out.append(instring[lastE:])
- out = [o for o in out if o]
- return "".join(map(_ustr,_flatten(out)))
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def searchString( self, instring, maxMatches=_MAX_INT ):
- """
- Another extension to C{L{scanString}}, simplifying the access to the tokens found
- to match the given parse expression. May be called with optional
- C{maxMatches} argument, to clip searching after 'n' matches are found.
-
- Example::
- # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters
- cap_word = Word(alphas.upper(), alphas.lower())
-
- print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))
-
- # the sum() builtin can be used to merge results into a single ParseResults object
- print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")))
- prints::
- [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']]
- ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity']
- """
- try:
- return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False):
- """
- Generator method to split a string using the given expression as a separator.
- May be called with optional C{maxsplit} argument, to limit the number of splits;
- and the optional C{includeSeparators} argument (default=C{False}), if the separating
- matching text should be included in the split results.
-
- Example::
- punc = oneOf(list(".,;:/-!?"))
- print(list(punc.split("This, this?, this sentence, is badly punctuated!")))
- prints::
- ['This', ' this', '', ' this sentence', ' is badly punctuated', '']
- """
- splits = 0
- last = 0
- for t,s,e in self.scanString(instring, maxMatches=maxsplit):
- yield instring[last:s]
- if includeSeparators:
- yield t[0]
- last = e
- yield instring[last:]
-
- def __add__(self, other ):
- """
- Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement
- converts them to L{Literal}s by default.
-
- Example::
- greet = Word(alphas) + "," + Word(alphas) + "!"
- hello = "Hello, World!"
- print (hello, "->", greet.parseString(hello))
- Prints::
- Hello, World! -> ['Hello', ',', 'World', '!']
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return And( [ self, other ] )
-
- def __radd__(self, other ):
- """
- Implementation of + operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other + self
-
- def __sub__(self, other):
- """
- Implementation of - operator, returns C{L{And}} with error stop
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return self + And._ErrorStop() + other
-
- def __rsub__(self, other ):
- """
- Implementation of - operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other - self
-
- def __mul__(self,other):
- """
- Implementation of * operator, allows use of C{expr * 3} in place of
- C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer
- tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples
- may also include C{None} as in:
- - C{expr*(n,None)} or C{expr*(n,)} is equivalent
- to C{expr*n + L{ZeroOrMore}(expr)}
- (read as "at least n instances of C{expr}")
- - C{expr*(None,n)} is equivalent to C{expr*(0,n)}
- (read as "0 to n instances of C{expr}")
- - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)}
- - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)}
-
- Note that C{expr*(None,n)} does not raise an exception if
- more than n exprs exist in the input stream; that is,
- C{expr*(None,n)} does not enforce a maximum number of expr
- occurrences. If this behavior is desired, then write
- C{expr*(None,n) + ~expr}
- """
- if isinstance(other,int):
- minElements, optElements = other,0
- elif isinstance(other,tuple):
- other = (other + (None, None))[:2]
- if other[0] is None:
- other = (0, other[1])
- if isinstance(other[0],int) and other[1] is None:
- if other[0] == 0:
- return ZeroOrMore(self)
- if other[0] == 1:
- return OneOrMore(self)
- else:
- return self*other[0] + ZeroOrMore(self)
- elif isinstance(other[0],int) and isinstance(other[1],int):
- minElements, optElements = other
- optElements -= minElements
- else:
- raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1]))
- else:
- raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other))
-
- if minElements < 0:
- raise ValueError("cannot multiply ParserElement by negative value")
- if optElements < 0:
- raise ValueError("second tuple value must be greater or equal to first tuple value")
- if minElements == optElements == 0:
- raise ValueError("cannot multiply ParserElement by 0 or (0,0)")
-
- if (optElements):
- def makeOptionalList(n):
- if n>1:
- return Optional(self + makeOptionalList(n-1))
- else:
- return Optional(self)
- if minElements:
- if minElements == 1:
- ret = self + makeOptionalList(optElements)
- else:
- ret = And([self]*minElements) + makeOptionalList(optElements)
- else:
- ret = makeOptionalList(optElements)
- else:
- if minElements == 1:
- ret = self
- else:
- ret = And([self]*minElements)
- return ret
-
- def __rmul__(self, other):
- return self.__mul__(other)
-
- def __or__(self, other ):
- """
- Implementation of | operator - returns C{L{MatchFirst}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return MatchFirst( [ self, other ] )
-
- def __ror__(self, other ):
- """
- Implementation of | operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other | self
-
- def __xor__(self, other ):
- """
- Implementation of ^ operator - returns C{L{Or}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return Or( [ self, other ] )
-
- def __rxor__(self, other ):
- """
- Implementation of ^ operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other ^ self
-
- def __and__(self, other ):
- """
- Implementation of & operator - returns C{L{Each}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return Each( [ self, other ] )
-
- def __rand__(self, other ):
- """
- Implementation of & operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other & self
-
- def __invert__( self ):
- """
- Implementation of ~ operator - returns C{L{NotAny}}
- """
- return NotAny( self )
-
- def __call__(self, name=None):
- """
- Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}.
-
- If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be
- passed as C{True}.
-
- If C{name} is omitted, same as calling C{L{copy}}.
-
- Example::
- # these are equivalent
- userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno")
- userdata = Word(alphas)("name") + Word(nums+"-")("socsecno")
- """
- if name is not None:
- return self.setResultsName(name)
- else:
- return self.copy()
-
- def suppress( self ):
- """
- Suppresses the output of this C{ParserElement}; useful to keep punctuation from
- cluttering up returned output.
- """
- return Suppress( self )
-
- def leaveWhitespace( self ):
- """
- Disables the skipping of whitespace before matching the characters in the
- C{ParserElement}'s defined pattern. This is normally only used internally by
- the pyparsing module, but may be needed in some whitespace-sensitive grammars.
- """
- self.skipWhitespace = False
- return self
-
- def setWhitespaceChars( self, chars ):
- """
- Overrides the default whitespace chars
- """
- self.skipWhitespace = True
- self.whiteChars = chars
- self.copyDefaultWhiteChars = False
- return self
-
- def parseWithTabs( self ):
- """
- Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string.
- Must be called before C{parseString} when the input grammar contains elements that
- match C{<TAB>} characters.
- """
- self.keepTabs = True
- return self
-
- def ignore( self, other ):
- """
- Define expression to be ignored (e.g., comments) while doing pattern
- matching; may be called repeatedly, to define multiple comment or other
- ignorable patterns.
-
- Example::
- patt = OneOrMore(Word(alphas))
- patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj']
-
- patt.ignore(cStyleComment)
- patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd']
- """
- if isinstance(other, basestring):
- other = Suppress(other)
-
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- self.ignoreExprs.append(other)
- else:
- self.ignoreExprs.append( Suppress( other.copy() ) )
- return self
-
- def setDebugActions( self, startAction, successAction, exceptionAction ):
- """
- Enable display of debugging messages while doing pattern matching.
- """
- self.debugActions = (startAction or _defaultStartDebugAction,
- successAction or _defaultSuccessDebugAction,
- exceptionAction or _defaultExceptionDebugAction)
- self.debug = True
- return self
-
- def setDebug( self, flag=True ):
- """
- Enable display of debugging messages while doing pattern matching.
- Set C{flag} to True to enable, False to disable.
-
- Example::
- wd = Word(alphas).setName("alphaword")
- integer = Word(nums).setName("numword")
- term = wd | integer
-
- # turn on debugging for wd
- wd.setDebug()
-
- OneOrMore(term).parseString("abc 123 xyz 890")
-
- prints::
- Match alphaword at loc 0(1,1)
- Matched alphaword -> ['abc']
- Match alphaword at loc 3(1,4)
- Exception raised:Expected alphaword (at char 4), (line:1, col:5)
- Match alphaword at loc 7(1,8)
- Matched alphaword -> ['xyz']
- Match alphaword at loc 11(1,12)
- Exception raised:Expected alphaword (at char 12), (line:1, col:13)
- Match alphaword at loc 15(1,16)
- Exception raised:Expected alphaword (at char 15), (line:1, col:16)
-
- The output shown is that produced by the default debug actions - custom debug actions can be
- specified using L{setDebugActions}. Prior to attempting
- to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"}
- is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"}
- message is shown. Also note the use of L{setName} to assign a human-readable name to the expression,
- which makes debugging and exception messages easier to understand - for instance, the default
- name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}.
- """
- if flag:
- self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction )
- else:
- self.debug = False
- return self
-
- def __str__( self ):
- return self.name
-
- def __repr__( self ):
- return _ustr(self)
-
- def streamline( self ):
- self.streamlined = True
- self.strRepr = None
- return self
-
- def checkRecursion( self, parseElementList ):
- pass
-
- def validate( self, validateTrace=[] ):
- """
- Check defined expressions for valid structure, check for infinite recursive definitions.
- """
- self.checkRecursion( [] )
-
- def parseFile( self, file_or_filename, parseAll=False ):
- """
- Execute the parse expression on the given file or filename.
- If a filename is specified (instead of a file object),
- the entire file is opened, read, and closed before parsing.
- """
- try:
- file_contents = file_or_filename.read()
- except AttributeError:
- with open(file_or_filename, "r") as f:
- file_contents = f.read()
- try:
- return self.parseString(file_contents, parseAll)
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def __eq__(self,other):
- if isinstance(other, ParserElement):
- return self is other or vars(self) == vars(other)
- elif isinstance(other, basestring):
- return self.matches(other)
- else:
- return super(ParserElement,self)==other
-
- def __ne__(self,other):
- return not (self == other)
-
- def __hash__(self):
- return hash(id(self))
-
- def __req__(self,other):
- return self == other
-
- def __rne__(self,other):
- return not (self == other)
-
- def matches(self, testString, parseAll=True):
- """
- Method for quick testing of a parser against a test string. Good for simple
- inline microtests of sub expressions while building up larger parser.
-
- Parameters:
- - testString - to test against this expression for a match
- - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
-
- Example::
- expr = Word(nums)
- assert expr.matches("100")
- """
- try:
- self.parseString(_ustr(testString), parseAll=parseAll)
- return True
- except ParseBaseException:
- return False
-
- def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False):
- """
- Execute the parse expression on a series of test strings, showing each
- test, the parsed results or where the parse failed. Quick and easy way to
- run a parse expression against a list of sample strings.
-
- Parameters:
- - tests - a list of separate test strings, or a multiline string of test strings
- - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
- - comment - (default=C{'#'}) - expression for indicating embedded comments in the test
- string; pass None to disable comment filtering
- - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline;
- if False, only dump nested list
- - printResults - (default=C{True}) prints test output to stdout
- - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing
-
- Returns: a (success, results) tuple, where success indicates that all tests succeeded
- (or failed if C{failureTests} is True), and the results contain a list of lines of each
- test's output
-
- Example::
- number_expr = pyparsing_common.number.copy()
-
- result = number_expr.runTests('''
- # unsigned integer
- 100
- # negative integer
- -100
- # float with scientific notation
- 6.02e23
- # integer with scientific notation
- 1e-12
- ''')
- print("Success" if result[0] else "Failed!")
-
- result = number_expr.runTests('''
- # stray character
- 100Z
- # missing leading digit before '.'
- -.100
- # too many '.'
- 3.14.159
- ''', failureTests=True)
- print("Success" if result[0] else "Failed!")
- prints::
- # unsigned integer
- 100
- [100]
-
- # negative integer
- -100
- [-100]
-
- # float with scientific notation
- 6.02e23
- [6.02e+23]
-
- # integer with scientific notation
- 1e-12
- [1e-12]
-
- Success
-
- # stray character
- 100Z
- ^
- FAIL: Expected end of text (at char 3), (line:1, col:4)
-
- # missing leading digit before '.'
- -.100
- ^
- FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1)
-
- # too many '.'
- 3.14.159
- ^
- FAIL: Expected end of text (at char 4), (line:1, col:5)
-
- Success
-
- Each test string must be on a single line. If you want to test a string that spans multiple
- lines, create a test like this::
-
- expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines")
-
- (Note that this is a raw string literal, you must include the leading 'r'.)
- """
- if isinstance(tests, basestring):
- tests = list(map(str.strip, tests.rstrip().splitlines()))
- if isinstance(comment, basestring):
- comment = Literal(comment)
- allResults = []
- comments = []
- success = True
- for t in tests:
- if comment is not None and comment.matches(t, False) or comments and not t:
- comments.append(t)
- continue
- if not t:
- continue
- out = ['\n'.join(comments), t]
- comments = []
- try:
- t = t.replace(r'\n','\n')
- result = self.parseString(t, parseAll=parseAll)
- out.append(result.dump(full=fullDump))
- success = success and not failureTests
- except ParseBaseException as pe:
- fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else ""
- if '\n' in t:
- out.append(line(pe.loc, t))
- out.append(' '*(col(pe.loc,t)-1) + '^' + fatal)
- else:
- out.append(' '*pe.loc + '^' + fatal)
- out.append("FAIL: " + str(pe))
- success = success and failureTests
- result = pe
- except Exception as exc:
- out.append("FAIL-EXCEPTION: " + str(exc))
- success = success and failureTests
- result = exc
-
- if printResults:
- if fullDump:
- out.append('')
- print('\n'.join(out))
-
- allResults.append((t, result))
-
- return success, allResults
-
-
-class Token(ParserElement):
- """
- Abstract C{ParserElement} subclass, for defining atomic matching patterns.
- """
- def __init__( self ):
- super(Token,self).__init__( savelist=False )
-
-
-class Empty(Token):
- """
- An empty token, will always match.
- """
- def __init__( self ):
- super(Empty,self).__init__()
- self.name = "Empty"
- self.mayReturnEmpty = True
- self.mayIndexError = False
-
-
-class NoMatch(Token):
- """
- A token that will never match.
- """
- def __init__( self ):
- super(NoMatch,self).__init__()
- self.name = "NoMatch"
- self.mayReturnEmpty = True
- self.mayIndexError = False
- self.errmsg = "Unmatchable token"
-
- def parseImpl( self, instring, loc, doActions=True ):
- raise ParseException(instring, loc, self.errmsg, self)
-
-
-class Literal(Token):
- """
- Token to exactly match a specified string.
-
- Example::
- Literal('blah').parseString('blah') # -> ['blah']
- Literal('blah').parseString('blahfooblah') # -> ['blah']
- Literal('blah').parseString('bla') # -> Exception: Expected "blah"
-
- For case-insensitive matching, use L{CaselessLiteral}.
-
- For keyword matching (force word break before and after the matched string),
- use L{Keyword} or L{CaselessKeyword}.
- """
- def __init__( self, matchString ):
- super(Literal,self).__init__()
- self.match = matchString
- self.matchLen = len(matchString)
- try:
- self.firstMatchChar = matchString[0]
- except IndexError:
- warnings.warn("null string passed to Literal; use Empty() instead",
- SyntaxWarning, stacklevel=2)
- self.__class__ = Empty
- self.name = '"%s"' % _ustr(self.match)
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = False
- self.mayIndexError = False
-
- # Performance tuning: this routine gets called a *lot*
- # if this is a single character match string and the first character matches,
- # short-circuit as quickly as possible, and avoid calling startswith
- #~ @profile
- def parseImpl( self, instring, loc, doActions=True ):
- if (instring[loc] == self.firstMatchChar and
- (self.matchLen==1 or instring.startswith(self.match,loc)) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-_L = Literal
-ParserElement._literalStringClass = Literal
-
-class Keyword(Token):
- """
- Token to exactly match a specified string as a keyword, that is, it must be
- immediately followed by a non-keyword character. Compare with C{L{Literal}}:
- - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}.
- - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'}
- Accepts two optional constructor arguments in addition to the keyword string:
- - C{identChars} is a string of characters that would be valid identifier characters,
- defaulting to all alphanumerics + "_" and "$"
- - C{caseless} allows case-insensitive matching, default is C{False}.
-
- Example::
- Keyword("start").parseString("start") # -> ['start']
- Keyword("start").parseString("starting") # -> Exception
-
- For case-insensitive matching, use L{CaselessKeyword}.
- """
- DEFAULT_KEYWORD_CHARS = alphanums+"_$"
-
- def __init__( self, matchString, identChars=None, caseless=False ):
- super(Keyword,self).__init__()
- if identChars is None:
- identChars = Keyword.DEFAULT_KEYWORD_CHARS
- self.match = matchString
- self.matchLen = len(matchString)
- try:
- self.firstMatchChar = matchString[0]
- except IndexError:
- warnings.warn("null string passed to Keyword; use Empty() instead",
- SyntaxWarning, stacklevel=2)
- self.name = '"%s"' % self.match
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = False
- self.mayIndexError = False
- self.caseless = caseless
- if caseless:
- self.caselessmatch = matchString.upper()
- identChars = identChars.upper()
- self.identChars = set(identChars)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.caseless:
- if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and
- (loc == 0 or instring[loc-1].upper() not in self.identChars) ):
- return loc+self.matchLen, self.match
- else:
- if (instring[loc] == self.firstMatchChar and
- (self.matchLen==1 or instring.startswith(self.match,loc)) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and
- (loc == 0 or instring[loc-1] not in self.identChars) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-
- def copy(self):
- c = super(Keyword,self).copy()
- c.identChars = Keyword.DEFAULT_KEYWORD_CHARS
- return c
-
- @staticmethod
- def setDefaultKeywordChars( chars ):
- """Overrides the default Keyword chars
- """
- Keyword.DEFAULT_KEYWORD_CHARS = chars
-
-class CaselessLiteral(Literal):
- """
- Token to match a specified string, ignoring case of letters.
- Note: the matched results will always be in the case of the given
- match string, NOT the case of the input text.
-
- Example::
- OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD']
-
- (Contrast with example for L{CaselessKeyword}.)
- """
- def __init__( self, matchString ):
- super(CaselessLiteral,self).__init__( matchString.upper() )
- # Preserve the defining literal.
- self.returnString = matchString
- self.name = "'%s'" % self.returnString
- self.errmsg = "Expected " + self.name
-
- def parseImpl( self, instring, loc, doActions=True ):
- if instring[ loc:loc+self.matchLen ].upper() == self.match:
- return loc+self.matchLen, self.returnString
- raise ParseException(instring, loc, self.errmsg, self)
-
-class CaselessKeyword(Keyword):
- """
- Caseless version of L{Keyword}.
-
- Example::
- OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD']
-
- (Contrast with example for L{CaselessLiteral}.)
- """
- def __init__( self, matchString, identChars=None ):
- super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True )
-
- def parseImpl( self, instring, loc, doActions=True ):
- if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-
-class CloseMatch(Token):
- """
- A variation on L{Literal} which matches "close" matches, that is,
- strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters:
- - C{match_string} - string to be matched
- - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match
-
- The results from a successful parse will contain the matched text from the input string and the following named results:
- - C{mismatches} - a list of the positions within the match_string where mismatches were found
- - C{original} - the original match_string used to compare against the input string
-
- If C{mismatches} is an empty list, then the match was an exact match.
-
- Example::
- patt = CloseMatch("ATCATCGAATGGA")
- patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']})
- patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1)
-
- # exact match
- patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']})
-
- # close match allowing up to 2 mismatches
- patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2)
- patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']})
- """
- def __init__(self, match_string, maxMismatches=1):
- super(CloseMatch,self).__init__()
- self.name = match_string
- self.match_string = match_string
- self.maxMismatches = maxMismatches
- self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches)
- self.mayIndexError = False
- self.mayReturnEmpty = False
-
- def parseImpl( self, instring, loc, doActions=True ):
- start = loc
- instrlen = len(instring)
- maxloc = start + len(self.match_string)
-
- if maxloc <= instrlen:
- match_string = self.match_string
- match_stringloc = 0
- mismatches = []
- maxMismatches = self.maxMismatches
-
- for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)):
- src,mat = s_m
- if src != mat:
- mismatches.append(match_stringloc)
- if len(mismatches) > maxMismatches:
- break
- else:
- loc = match_stringloc + 1
- results = ParseResults([instring[start:loc]])
- results['original'] = self.match_string
- results['mismatches'] = mismatches
- return loc, results
-
- raise ParseException(instring, loc, self.errmsg, self)
-
-
-class Word(Token):
- """
- Token for matching words composed of allowed character sets.
- Defined with string containing all allowed initial characters,
- an optional string containing allowed body characters (if omitted,
- defaults to the initial character set), and an optional minimum,
- maximum, and/or exact length. The default value for C{min} is 1 (a
- minimum value < 1 is not valid); the default values for C{max} and C{exact}
- are 0, meaning no maximum or exact length restriction. An optional
- C{excludeChars} parameter can list characters that might be found in
- the input C{bodyChars} string; useful to define a word of all printables
- except for one or two characters, for instance.
-
- L{srange} is useful for defining custom character set strings for defining
- C{Word} expressions, using range notation from regular expression character sets.
-
- A common mistake is to use C{Word} to match a specific literal string, as in
- C{Word("Address")}. Remember that C{Word} uses the string argument to define
- I{sets} of matchable characters. This expression would match "Add", "AAA",
- "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'.
- To match an exact literal string, use L{Literal} or L{Keyword}.
-
- pyparsing includes helper strings for building Words:
- - L{alphas}
- - L{nums}
- - L{alphanums}
- - L{hexnums}
- - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.)
- - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.)
- - L{printables} (any non-whitespace character)
-
- Example::
- # a word composed of digits
- integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9"))
-
- # a word with a leading capital, and zero or more lowercase
- capital_word = Word(alphas.upper(), alphas.lower())
-
- # hostnames are alphanumeric, with leading alpha, and '-'
- hostname = Word(alphas, alphanums+'-')
-
- # roman numeral (not a strict parser, accepts invalid mix of characters)
- roman = Word("IVXLCDM")
-
- # any string of non-whitespace characters, except for ','
- csv_value = Word(printables, excludeChars=",")
- """
- def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ):
- super(Word,self).__init__()
- if excludeChars:
- initChars = ''.join(c for c in initChars if c not in excludeChars)
- if bodyChars:
- bodyChars = ''.join(c for c in bodyChars if c not in excludeChars)
- self.initCharsOrig = initChars
- self.initChars = set(initChars)
- if bodyChars :
- self.bodyCharsOrig = bodyChars
- self.bodyChars = set(bodyChars)
- else:
- self.bodyCharsOrig = initChars
- self.bodyChars = set(initChars)
-
- self.maxSpecified = max > 0
-
- if min < 1:
- raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted")
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.asKeyword = asKeyword
-
- if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0):
- if self.bodyCharsOrig == self.initCharsOrig:
- self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig)
- elif len(self.initCharsOrig) == 1:
- self.reString = "%s[%s]*" % \
- (re.escape(self.initCharsOrig),
- _escapeRegexRangeChars(self.bodyCharsOrig),)
- else:
- self.reString = "[%s][%s]*" % \
- (_escapeRegexRangeChars(self.initCharsOrig),
- _escapeRegexRangeChars(self.bodyCharsOrig),)
- if self.asKeyword:
- self.reString = r"\b"+self.reString+r"\b"
- try:
- self.re = re.compile( self.reString )
- except Exception:
- self.re = None
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.re:
- result = self.re.match(instring,loc)
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- return loc, result.group()
-
- if not(instring[ loc ] in self.initChars):
- raise ParseException(instring, loc, self.errmsg, self)
-
- start = loc
- loc += 1
- instrlen = len(instring)
- bodychars = self.bodyChars
- maxloc = start + self.maxLen
- maxloc = min( maxloc, instrlen )
- while loc < maxloc and instring[loc] in bodychars:
- loc += 1
-
- throwException = False
- if loc - start < self.minLen:
- throwException = True
- if self.maxSpecified and loc < instrlen and instring[loc] in bodychars:
- throwException = True
- if self.asKeyword:
- if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars):
- throwException = True
-
- if throwException:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
- def __str__( self ):
- try:
- return super(Word,self).__str__()
- except Exception:
- pass
-
-
- if self.strRepr is None:
-
- def charsAsStr(s):
- if len(s)>4:
- return s[:4]+"..."
- else:
- return s
-
- if ( self.initCharsOrig != self.bodyCharsOrig ):
- self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) )
- else:
- self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig)
-
- return self.strRepr
-
-
-class Regex(Token):
- r"""
- Token for matching strings that match a given regular expression.
- Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
- If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as
- named parse results.
-
- Example::
- realnum = Regex(r"[+-]?\d+\.\d*")
- date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)')
- # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
- roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})")
- """
- compiledREtype = type(re.compile("[A-Z]"))
- def __init__( self, pattern, flags=0):
- """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags."""
- super(Regex,self).__init__()
-
- if isinstance(pattern, basestring):
- if not pattern:
- warnings.warn("null string passed to Regex; use Empty() instead",
- SyntaxWarning, stacklevel=2)
-
- self.pattern = pattern
- self.flags = flags
-
- try:
- self.re = re.compile(self.pattern, self.flags)
- self.reString = self.pattern
- except sre_constants.error:
- warnings.warn("invalid pattern (%s) passed to Regex" % pattern,
- SyntaxWarning, stacklevel=2)
- raise
-
- elif isinstance(pattern, Regex.compiledREtype):
- self.re = pattern
- self.pattern = \
- self.reString = str(pattern)
- self.flags = flags
-
- else:
- raise ValueError("Regex may only be constructed with a string or a compiled RE object")
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- result = self.re.match(instring,loc)
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- d = result.groupdict()
- ret = ParseResults(result.group())
- if d:
- for k in d:
- ret[k] = d[k]
- return loc,ret
-
- def __str__( self ):
- try:
- return super(Regex,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "Re:(%s)" % repr(self.pattern)
-
- return self.strRepr
-
-
-class QuotedString(Token):
- r"""
- Token for matching strings that are delimited by quoting characters.
-
- Defined with the following parameters:
- - quoteChar - string of one or more characters defining the quote delimiting string
- - escChar - character to escape quotes, typically backslash (default=C{None})
- - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None})
- - multiline - boolean indicating whether quotes can span multiple lines (default=C{False})
- - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True})
- - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar)
- - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True})
-
- Example::
- qs = QuotedString('"')
- print(qs.searchString('lsjdf "This is the quote" sldjf'))
- complex_qs = QuotedString('{{', endQuoteChar='}}')
- print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf'))
- sql_qs = QuotedString('"', escQuote='""')
- print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf'))
- prints::
- [['This is the quote']]
- [['This is the "quote"']]
- [['This is the quote with "embedded" quotes']]
- """
- def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True):
- super(QuotedString,self).__init__()
-
- # remove white space from quote chars - wont work anyway
- quoteChar = quoteChar.strip()
- if not quoteChar:
- warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
- raise SyntaxError()
-
- if endQuoteChar is None:
- endQuoteChar = quoteChar
- else:
- endQuoteChar = endQuoteChar.strip()
- if not endQuoteChar:
- warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
- raise SyntaxError()
-
- self.quoteChar = quoteChar
- self.quoteCharLen = len(quoteChar)
- self.firstQuoteChar = quoteChar[0]
- self.endQuoteChar = endQuoteChar
- self.endQuoteCharLen = len(endQuoteChar)
- self.escChar = escChar
- self.escQuote = escQuote
- self.unquoteResults = unquoteResults
- self.convertWhitespaceEscapes = convertWhitespaceEscapes
-
- if multiline:
- self.flags = re.MULTILINE | re.DOTALL
- self.pattern = r'%s(?:[^%s%s]' % \
- ( re.escape(self.quoteChar),
- _escapeRegexRangeChars(self.endQuoteChar[0]),
- (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
- else:
- self.flags = 0
- self.pattern = r'%s(?:[^%s\n\r%s]' % \
- ( re.escape(self.quoteChar),
- _escapeRegexRangeChars(self.endQuoteChar[0]),
- (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
- if len(self.endQuoteChar) > 1:
- self.pattern += (
- '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]),
- _escapeRegexRangeChars(self.endQuoteChar[i]))
- for i in range(len(self.endQuoteChar)-1,0,-1)) + ')'
- )
- if escQuote:
- self.pattern += (r'|(?:%s)' % re.escape(escQuote))
- if escChar:
- self.pattern += (r'|(?:%s.)' % re.escape(escChar))
- self.escCharReplacePattern = re.escape(self.escChar)+"(.)"
- self.pattern += (r')*%s' % re.escape(self.endQuoteChar))
-
- try:
- self.re = re.compile(self.pattern, self.flags)
- self.reString = self.pattern
- except sre_constants.error:
- warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern,
- SyntaxWarning, stacklevel=2)
- raise
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- ret = result.group()
-
- if self.unquoteResults:
-
- # strip off quotes
- ret = ret[self.quoteCharLen:-self.endQuoteCharLen]
-
- if isinstance(ret,basestring):
- # replace escaped whitespace
- if '\\' in ret and self.convertWhitespaceEscapes:
- ws_map = {
- r'\t' : '\t',
- r'\n' : '\n',
- r'\f' : '\f',
- r'\r' : '\r',
- }
- for wslit,wschar in ws_map.items():
- ret = ret.replace(wslit, wschar)
-
- # replace escaped characters
- if self.escChar:
- ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret)
-
- # replace escaped quotes
- if self.escQuote:
- ret = ret.replace(self.escQuote, self.endQuoteChar)
-
- return loc, ret
-
- def __str__( self ):
- try:
- return super(QuotedString,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar)
-
- return self.strRepr
-
-
-class CharsNotIn(Token):
- """
- Token for matching words composed of characters I{not} in a given set (will
- include whitespace in matched characters if not listed in the provided exclusion set - see example).
- Defined with string containing all disallowed characters, and an optional
- minimum, maximum, and/or exact length. The default value for C{min} is 1 (a
- minimum value < 1 is not valid); the default values for C{max} and C{exact}
- are 0, meaning no maximum or exact length restriction.
-
- Example::
- # define a comma-separated-value as anything that is not a ','
- csv_value = CharsNotIn(',')
- print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213"))
- prints::
- ['dkls', 'lsdkjf', 's12 34', '@!#', '213']
- """
- def __init__( self, notChars, min=1, max=0, exact=0 ):
- super(CharsNotIn,self).__init__()
- self.skipWhitespace = False
- self.notChars = notChars
-
- if min < 1:
- raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted")
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = ( self.minLen == 0 )
- self.mayIndexError = False
-
- def parseImpl( self, instring, loc, doActions=True ):
- if instring[loc] in self.notChars:
- raise ParseException(instring, loc, self.errmsg, self)
-
- start = loc
- loc += 1
- notchars = self.notChars
- maxlen = min( start+self.maxLen, len(instring) )
- while loc < maxlen and \
- (instring[loc] not in notchars):
- loc += 1
-
- if loc - start < self.minLen:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
- def __str__( self ):
- try:
- return super(CharsNotIn, self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- if len(self.notChars) > 4:
- self.strRepr = "!W:(%s...)" % self.notChars[:4]
- else:
- self.strRepr = "!W:(%s)" % self.notChars
-
- return self.strRepr
-
-class White(Token):
- """
- Special matching class for matching whitespace. Normally, whitespace is ignored
- by pyparsing grammars. This class is included when some whitespace structures
- are significant. Define with a string containing the whitespace characters to be
- matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments,
- as defined for the C{L{Word}} class.
- """
- whiteStrs = {
- " " : "<SPC>",
- "\t": "<TAB>",
- "\n": "<LF>",
- "\r": "<CR>",
- "\f": "<FF>",
- }
- def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0):
- super(White,self).__init__()
- self.matchWhite = ws
- self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) )
- #~ self.leaveWhitespace()
- self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite))
- self.mayReturnEmpty = True
- self.errmsg = "Expected " + self.name
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- def parseImpl( self, instring, loc, doActions=True ):
- if not(instring[ loc ] in self.matchWhite):
- raise ParseException(instring, loc, self.errmsg, self)
- start = loc
- loc += 1
- maxloc = start + self.maxLen
- maxloc = min( maxloc, len(instring) )
- while loc < maxloc and instring[loc] in self.matchWhite:
- loc += 1
-
- if loc - start < self.minLen:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
-
-class _PositionToken(Token):
- def __init__( self ):
- super(_PositionToken,self).__init__()
- self.name=self.__class__.__name__
- self.mayReturnEmpty = True
- self.mayIndexError = False
-
-class GoToColumn(_PositionToken):
- """
- Token to advance to a specific column of input text; useful for tabular report scraping.
- """
- def __init__( self, colno ):
- super(GoToColumn,self).__init__()
- self.col = colno
-
- def preParse( self, instring, loc ):
- if col(loc,instring) != self.col:
- instrlen = len(instring)
- if self.ignoreExprs:
- loc = self._skipIgnorables( instring, loc )
- while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col :
- loc += 1
- return loc
-
- def parseImpl( self, instring, loc, doActions=True ):
- thiscol = col( loc, instring )
- if thiscol > self.col:
- raise ParseException( instring, loc, "Text not in expected column", self )
- newloc = loc + self.col - thiscol
- ret = instring[ loc: newloc ]
- return newloc, ret
-
-
-class LineStart(_PositionToken):
- """
- Matches if current position is at the beginning of a line within the parse string
-
- Example::
-
- test = '''\
- AAA this line
- AAA and this line
- AAA but not this one
- B AAA and definitely not this one
- '''
-
- for t in (LineStart() + 'AAA' + restOfLine).searchString(test):
- print(t)
-
- Prints::
- ['AAA', ' this line']
- ['AAA', ' and this line']
-
- """
- def __init__( self ):
- super(LineStart,self).__init__()
- self.errmsg = "Expected start of line"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if col(loc, instring) == 1:
- return loc, []
- raise ParseException(instring, loc, self.errmsg, self)
-
-class LineEnd(_PositionToken):
- """
- Matches if current position is at the end of a line within the parse string
- """
- def __init__( self ):
- super(LineEnd,self).__init__()
- self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") )
- self.errmsg = "Expected end of line"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc<len(instring):
- if instring[loc] == "\n":
- return loc+1, "\n"
- else:
- raise ParseException(instring, loc, self.errmsg, self)
- elif loc == len(instring):
- return loc+1, []
- else:
- raise ParseException(instring, loc, self.errmsg, self)
-
-class StringStart(_PositionToken):
- """
- Matches if current position is at the beginning of the parse string
- """
- def __init__( self ):
- super(StringStart,self).__init__()
- self.errmsg = "Expected start of text"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc != 0:
- # see if entire string up to here is just whitespace and ignoreables
- if loc != self.preParse( instring, 0 ):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-class StringEnd(_PositionToken):
- """
- Matches if current position is at the end of the parse string
- """
- def __init__( self ):
- super(StringEnd,self).__init__()
- self.errmsg = "Expected end of text"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc < len(instring):
- raise ParseException(instring, loc, self.errmsg, self)
- elif loc == len(instring):
- return loc+1, []
- elif loc > len(instring):
- return loc, []
- else:
- raise ParseException(instring, loc, self.errmsg, self)
-
-class WordStart(_PositionToken):
- """
- Matches if the current position is at the beginning of a Word, and
- is not preceded by any character in a given set of C{wordChars}
- (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
- use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of
- the string being parsed, or at the beginning of a line.
- """
- def __init__(self, wordChars = printables):
- super(WordStart,self).__init__()
- self.wordChars = set(wordChars)
- self.errmsg = "Not at the start of a word"
-
- def parseImpl(self, instring, loc, doActions=True ):
- if loc != 0:
- if (instring[loc-1] in self.wordChars or
- instring[loc] not in self.wordChars):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-class WordEnd(_PositionToken):
- """
- Matches if the current position is at the end of a Word, and
- is not followed by any character in a given set of C{wordChars}
- (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
- use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of
- the string being parsed, or at the end of a line.
- """
- def __init__(self, wordChars = printables):
- super(WordEnd,self).__init__()
- self.wordChars = set(wordChars)
- self.skipWhitespace = False
- self.errmsg = "Not at the end of a word"
-
- def parseImpl(self, instring, loc, doActions=True ):
- instrlen = len(instring)
- if instrlen>0 and loc<instrlen:
- if (instring[loc] in self.wordChars or
- instring[loc-1] not in self.wordChars):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-
-class ParseExpression(ParserElement):
- """
- Abstract subclass of ParserElement, for combining and post-processing parsed tokens.
- """
- def __init__( self, exprs, savelist = False ):
- super(ParseExpression,self).__init__(savelist)
- if isinstance( exprs, _generatorType ):
- exprs = list(exprs)
-
- if isinstance( exprs, basestring ):
- self.exprs = [ ParserElement._literalStringClass( exprs ) ]
- elif isinstance( exprs, Iterable ):
- exprs = list(exprs)
- # if sequence of strings provided, wrap with Literal
- if all(isinstance(expr, basestring) for expr in exprs):
- exprs = map(ParserElement._literalStringClass, exprs)
- self.exprs = list(exprs)
- else:
- try:
- self.exprs = list( exprs )
- except TypeError:
- self.exprs = [ exprs ]
- self.callPreparse = False
-
- def __getitem__( self, i ):
- return self.exprs[i]
-
- def append( self, other ):
- self.exprs.append( other )
- self.strRepr = None
- return self
-
- def leaveWhitespace( self ):
- """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on
- all contained expressions."""
- self.skipWhitespace = False
- self.exprs = [ e.copy() for e in self.exprs ]
- for e in self.exprs:
- e.leaveWhitespace()
- return self
-
- def ignore( self, other ):
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- super( ParseExpression, self).ignore( other )
- for e in self.exprs:
- e.ignore( self.ignoreExprs[-1] )
- else:
- super( ParseExpression, self).ignore( other )
- for e in self.exprs:
- e.ignore( self.ignoreExprs[-1] )
- return self
-
- def __str__( self ):
- try:
- return super(ParseExpression,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) )
- return self.strRepr
-
- def streamline( self ):
- super(ParseExpression,self).streamline()
-
- for e in self.exprs:
- e.streamline()
-
- # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d )
- # but only if there are no parse actions or resultsNames on the nested And's
- # (likewise for Or's and MatchFirst's)
- if ( len(self.exprs) == 2 ):
- other = self.exprs[0]
- if ( isinstance( other, self.__class__ ) and
- not(other.parseAction) and
- other.resultsName is None and
- not other.debug ):
- self.exprs = other.exprs[:] + [ self.exprs[1] ]
- self.strRepr = None
- self.mayReturnEmpty |= other.mayReturnEmpty
- self.mayIndexError |= other.mayIndexError
-
- other = self.exprs[-1]
- if ( isinstance( other, self.__class__ ) and
- not(other.parseAction) and
- other.resultsName is None and
- not other.debug ):
- self.exprs = self.exprs[:-1] + other.exprs[:]
- self.strRepr = None
- self.mayReturnEmpty |= other.mayReturnEmpty
- self.mayIndexError |= other.mayIndexError
-
- self.errmsg = "Expected " + _ustr(self)
-
- return self
-
- def setResultsName( self, name, listAllMatches=False ):
- ret = super(ParseExpression,self).setResultsName(name,listAllMatches)
- return ret
-
- def validate( self, validateTrace=[] ):
- tmp = validateTrace[:]+[self]
- for e in self.exprs:
- e.validate(tmp)
- self.checkRecursion( [] )
-
- def copy(self):
- ret = super(ParseExpression,self).copy()
- ret.exprs = [e.copy() for e in self.exprs]
- return ret
-
-class And(ParseExpression):
- """
- Requires all given C{ParseExpression}s to be found in the given order.
- Expressions may be separated by whitespace.
- May be constructed using the C{'+'} operator.
- May also be constructed using the C{'-'} operator, which will suppress backtracking.
-
- Example::
- integer = Word(nums)
- name_expr = OneOrMore(Word(alphas))
-
- expr = And([integer("id"),name_expr("name"),integer("age")])
- # more easily written as:
- expr = integer("id") + name_expr("name") + integer("age")
- """
-
- class _ErrorStop(Empty):
- def __init__(self, *args, **kwargs):
- super(And._ErrorStop,self).__init__(*args, **kwargs)
- self.name = '-'
- self.leaveWhitespace()
-
- def __init__( self, exprs, savelist = True ):
- super(And,self).__init__(exprs, savelist)
- self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
- self.setWhitespaceChars( self.exprs[0].whiteChars )
- self.skipWhitespace = self.exprs[0].skipWhitespace
- self.callPreparse = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- # pass False as last arg to _parse for first element, since we already
- # pre-parsed the string as part of our And pre-parsing
- loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
- errorStop = False
- for e in self.exprs[1:]:
- if isinstance(e, And._ErrorStop):
- errorStop = True
- continue
- if errorStop:
- try:
- loc, exprtokens = e._parse( instring, loc, doActions )
- except ParseSyntaxException:
- raise
- except ParseBaseException as pe:
- pe.__traceback__ = None
- raise ParseSyntaxException._from_exception(pe)
- except IndexError:
- raise ParseSyntaxException(instring, len(instring), self.errmsg, self)
- else:
- loc, exprtokens = e._parse( instring, loc, doActions )
- if exprtokens or exprtokens.haskeys():
- resultlist += exprtokens
- return loc, resultlist
-
- def __iadd__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #And( [ self, other ] )
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
- if not e.mayReturnEmpty:
- break
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
-
-class Or(ParseExpression):
- """
- Requires that at least one C{ParseExpression} is found.
- If two expressions match, the expression that matches the longest string will be used.
- May be constructed using the C{'^'} operator.
-
- Example::
- # construct Or using '^' operator
-
- number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums))
- print(number.searchString("123 3.1416 789"))
- prints::
- [['123'], ['3.1416'], ['789']]
- """
- def __init__( self, exprs, savelist = False ):
- super(Or,self).__init__(exprs, savelist)
- if self.exprs:
- self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
- else:
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- maxExcLoc = -1
- maxException = None
- matches = []
- for e in self.exprs:
- try:
- loc2 = e.tryParse( instring, loc )
- except ParseException as err:
- err.__traceback__ = None
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
- except IndexError:
- if len(instring) > maxExcLoc:
- maxException = ParseException(instring,len(instring),e.errmsg,self)
- maxExcLoc = len(instring)
- else:
- # save match among all matches, to retry longest to shortest
- matches.append((loc2, e))
-
- if matches:
- matches.sort(key=lambda x: -x[0])
- for _,e in matches:
- try:
- return e._parse( instring, loc, doActions )
- except ParseException as err:
- err.__traceback__ = None
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
-
- if maxException is not None:
- maxException.msg = self.errmsg
- raise maxException
- else:
- raise ParseException(instring, loc, "no defined alternatives to match", self)
-
-
- def __ixor__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #Or( [ self, other ] )
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class MatchFirst(ParseExpression):
- """
- Requires that at least one C{ParseExpression} is found.
- If two expressions match, the first one listed is the one that will match.
- May be constructed using the C{'|'} operator.
-
- Example::
- # construct MatchFirst using '|' operator
-
- # watch the order of expressions to match
- number = Word(nums) | Combine(Word(nums) + '.' + Word(nums))
- print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']]
-
- # put more selective expression first
- number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums)
- print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']]
- """
- def __init__( self, exprs, savelist = False ):
- super(MatchFirst,self).__init__(exprs, savelist)
- if self.exprs:
- self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
- else:
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- maxExcLoc = -1
- maxException = None
- for e in self.exprs:
- try:
- ret = e._parse( instring, loc, doActions )
- return ret
- except ParseException as err:
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
- except IndexError:
- if len(instring) > maxExcLoc:
- maxException = ParseException(instring,len(instring),e.errmsg,self)
- maxExcLoc = len(instring)
-
- # only got here if no expression matched, raise exception for match that made it the furthest
- else:
- if maxException is not None:
- maxException.msg = self.errmsg
- raise maxException
- else:
- raise ParseException(instring, loc, "no defined alternatives to match", self)
-
- def __ior__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #MatchFirst( [ self, other ] )
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class Each(ParseExpression):
- """
- Requires all given C{ParseExpression}s to be found, but in any order.
- Expressions may be separated by whitespace.
- May be constructed using the C{'&'} operator.
-
- Example::
- color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN")
- shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON")
- integer = Word(nums)
- shape_attr = "shape:" + shape_type("shape")
- posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn")
- color_attr = "color:" + color("color")
- size_attr = "size:" + integer("size")
-
- # use Each (using operator '&') to accept attributes in any order
- # (shape and posn are required, color and size are optional)
- shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr)
-
- shape_spec.runTests('''
- shape: SQUARE color: BLACK posn: 100, 120
- shape: CIRCLE size: 50 color: BLUE posn: 50,80
- color:GREEN size:20 shape:TRIANGLE posn:20,40
- '''
- )
- prints::
- shape: SQUARE color: BLACK posn: 100, 120
- ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']]
- - color: BLACK
- - posn: ['100', ',', '120']
- - x: 100
- - y: 120
- - shape: SQUARE
-
-
- shape: CIRCLE size: 50 color: BLUE posn: 50,80
- ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']]
- - color: BLUE
- - posn: ['50', ',', '80']
- - x: 50
- - y: 80
- - shape: CIRCLE
- - size: 50
-
-
- color: GREEN size: 20 shape: TRIANGLE posn: 20,40
- ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']]
- - color: GREEN
- - posn: ['20', ',', '40']
- - x: 20
- - y: 40
- - shape: TRIANGLE
- - size: 20
- """
- def __init__( self, exprs, savelist = True ):
- super(Each,self).__init__(exprs, savelist)
- self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
- self.skipWhitespace = True
- self.initExprGroups = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.initExprGroups:
- self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional))
- opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ]
- opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)]
- self.optionals = opt1 + opt2
- self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ]
- self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ]
- self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ]
- self.required += self.multirequired
- self.initExprGroups = False
- tmpLoc = loc
- tmpReqd = self.required[:]
- tmpOpt = self.optionals[:]
- matchOrder = []
-
- keepMatching = True
- while keepMatching:
- tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired
- failed = []
- for e in tmpExprs:
- try:
- tmpLoc = e.tryParse( instring, tmpLoc )
- except ParseException:
- failed.append(e)
- else:
- matchOrder.append(self.opt1map.get(id(e),e))
- if e in tmpReqd:
- tmpReqd.remove(e)
- elif e in tmpOpt:
- tmpOpt.remove(e)
- if len(failed) == len(tmpExprs):
- keepMatching = False
-
- if tmpReqd:
- missing = ", ".join(_ustr(e) for e in tmpReqd)
- raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing )
-
- # add any unmatched Optionals, in case they have default values defined
- matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt]
-
- resultlist = []
- for e in matchOrder:
- loc,results = e._parse(instring,loc,doActions)
- resultlist.append(results)
-
- finalResults = sum(resultlist, ParseResults([]))
- return loc, finalResults
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class ParseElementEnhance(ParserElement):
- """
- Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens.
- """
- def __init__( self, expr, savelist=False ):
- super(ParseElementEnhance,self).__init__(savelist)
- if isinstance( expr, basestring ):
- if issubclass(ParserElement._literalStringClass, Token):
- expr = ParserElement._literalStringClass(expr)
- else:
- expr = ParserElement._literalStringClass(Literal(expr))
- self.expr = expr
- self.strRepr = None
- if expr is not None:
- self.mayIndexError = expr.mayIndexError
- self.mayReturnEmpty = expr.mayReturnEmpty
- self.setWhitespaceChars( expr.whiteChars )
- self.skipWhitespace = expr.skipWhitespace
- self.saveAsList = expr.saveAsList
- self.callPreparse = expr.callPreparse
- self.ignoreExprs.extend(expr.ignoreExprs)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.expr is not None:
- return self.expr._parse( instring, loc, doActions, callPreParse=False )
- else:
- raise ParseException("",loc,self.errmsg,self)
-
- def leaveWhitespace( self ):
- self.skipWhitespace = False
- self.expr = self.expr.copy()
- if self.expr is not None:
- self.expr.leaveWhitespace()
- return self
-
- def ignore( self, other ):
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- super( ParseElementEnhance, self).ignore( other )
- if self.expr is not None:
- self.expr.ignore( self.ignoreExprs[-1] )
- else:
- super( ParseElementEnhance, self).ignore( other )
- if self.expr is not None:
- self.expr.ignore( self.ignoreExprs[-1] )
- return self
-
- def streamline( self ):
- super(ParseElementEnhance,self).streamline()
- if self.expr is not None:
- self.expr.streamline()
- return self
-
- def checkRecursion( self, parseElementList ):
- if self in parseElementList:
- raise RecursiveGrammarException( parseElementList+[self] )
- subRecCheckList = parseElementList[:] + [ self ]
- if self.expr is not None:
- self.expr.checkRecursion( subRecCheckList )
-
- def validate( self, validateTrace=[] ):
- tmp = validateTrace[:]+[self]
- if self.expr is not None:
- self.expr.validate(tmp)
- self.checkRecursion( [] )
-
- def __str__( self ):
- try:
- return super(ParseElementEnhance,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None and self.expr is not None:
- self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) )
- return self.strRepr
-
-
-class FollowedBy(ParseElementEnhance):
- """
- Lookahead matching of the given parse expression. C{FollowedBy}
- does I{not} advance the parsing position within the input string, it only
- verifies that the specified parse expression matches at the current
- position. C{FollowedBy} always returns a null token list.
-
- Example::
- # use FollowedBy to match a label only if it is followed by a ':'
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
-
- OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint()
- prints::
- [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']]
- """
- def __init__( self, expr ):
- super(FollowedBy,self).__init__(expr)
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- self.expr.tryParse( instring, loc )
- return loc, []
-
-
-class NotAny(ParseElementEnhance):
- """
- Lookahead to disallow matching with the given parse expression. C{NotAny}
- does I{not} advance the parsing position within the input string, it only
- verifies that the specified parse expression does I{not} match at the current
- position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny}
- always returns a null token list. May be constructed using the '~' operator.
-
- Example::
-
- """
- def __init__( self, expr ):
- super(NotAny,self).__init__(expr)
- #~ self.leaveWhitespace()
- self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs
- self.mayReturnEmpty = True
- self.errmsg = "Found unwanted token, "+_ustr(self.expr)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.expr.canParseNext(instring, loc):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "~{" + _ustr(self.expr) + "}"
-
- return self.strRepr
-
-class _MultipleMatch(ParseElementEnhance):
- def __init__( self, expr, stopOn=None):
- super(_MultipleMatch, self).__init__(expr)
- self.saveAsList = True
- ender = stopOn
- if isinstance(ender, basestring):
- ender = ParserElement._literalStringClass(ender)
- self.not_ender = ~ender if ender is not None else None
-
- def parseImpl( self, instring, loc, doActions=True ):
- self_expr_parse = self.expr._parse
- self_skip_ignorables = self._skipIgnorables
- check_ender = self.not_ender is not None
- if check_ender:
- try_not_ender = self.not_ender.tryParse
-
- # must be at least one (but first see if we are the stopOn sentinel;
- # if so, fail)
- if check_ender:
- try_not_ender(instring, loc)
- loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
- try:
- hasIgnoreExprs = (not not self.ignoreExprs)
- while 1:
- if check_ender:
- try_not_ender(instring, loc)
- if hasIgnoreExprs:
- preloc = self_skip_ignorables( instring, loc )
- else:
- preloc = loc
- loc, tmptokens = self_expr_parse( instring, preloc, doActions )
- if tmptokens or tmptokens.haskeys():
- tokens += tmptokens
- except (ParseException,IndexError):
- pass
-
- return loc, tokens
-
-class OneOrMore(_MultipleMatch):
- """
- Repetition of one or more of the given expression.
-
- Parameters:
- - expr - expression that must match one or more times
- - stopOn - (default=C{None}) - expression for a terminating sentinel
- (only required if the sentinel would ordinarily match the repetition
- expression)
-
- Example::
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
-
- text = "shape: SQUARE posn: upper left color: BLACK"
- OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']]
-
- # use stopOn attribute for OneOrMore to avoid reading label string as part of the data
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
- OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']]
-
- # could also be written as
- (attr_expr * (1,)).parseString(text).pprint()
- """
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + _ustr(self.expr) + "}..."
-
- return self.strRepr
-
-class ZeroOrMore(_MultipleMatch):
- """
- Optional repetition of zero or more of the given expression.
-
- Parameters:
- - expr - expression that must match zero or more times
- - stopOn - (default=C{None}) - expression for a terminating sentinel
- (only required if the sentinel would ordinarily match the repetition
- expression)
-
- Example: similar to L{OneOrMore}
- """
- def __init__( self, expr, stopOn=None):
- super(ZeroOrMore,self).__init__(expr, stopOn=stopOn)
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- try:
- return super(ZeroOrMore, self).parseImpl(instring, loc, doActions)
- except (ParseException,IndexError):
- return loc, []
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "[" + _ustr(self.expr) + "]..."
-
- return self.strRepr
-
-class _NullToken(object):
- def __bool__(self):
- return False
- __nonzero__ = __bool__
- def __str__(self):
- return ""
-
-_optionalNotMatched = _NullToken()
-class Optional(ParseElementEnhance):
- """
- Optional matching of the given expression.
-
- Parameters:
- - expr - expression that must match zero or more times
- - default (optional) - value to be returned if the optional expression is not found.
-
- Example::
- # US postal code can be a 5-digit zip, plus optional 4-digit qualifier
- zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4)))
- zip.runTests('''
- # traditional ZIP code
- 12345
-
- # ZIP+4 form
- 12101-0001
-
- # invalid ZIP
- 98765-
- ''')
- prints::
- # traditional ZIP code
- 12345
- ['12345']
-
- # ZIP+4 form
- 12101-0001
- ['12101-0001']
-
- # invalid ZIP
- 98765-
- ^
- FAIL: Expected end of text (at char 5), (line:1, col:6)
- """
- def __init__( self, expr, default=_optionalNotMatched ):
- super(Optional,self).__init__( expr, savelist=False )
- self.saveAsList = self.expr.saveAsList
- self.defaultValue = default
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- try:
- loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
- except (ParseException,IndexError):
- if self.defaultValue is not _optionalNotMatched:
- if self.expr.resultsName:
- tokens = ParseResults([ self.defaultValue ])
- tokens[self.expr.resultsName] = self.defaultValue
- else:
- tokens = [ self.defaultValue ]
- else:
- tokens = []
- return loc, tokens
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "[" + _ustr(self.expr) + "]"
-
- return self.strRepr
-
-class SkipTo(ParseElementEnhance):
- """
- Token for skipping over all undefined text until the matched expression is found.
-
- Parameters:
- - expr - target expression marking the end of the data to be skipped
- - include - (default=C{False}) if True, the target expression is also parsed
- (the skipped text and target expression are returned as a 2-element list).
- - ignore - (default=C{None}) used to define grammars (typically quoted strings and
- comments) that might contain false matches to the target expression
- - failOn - (default=C{None}) define expressions that are not allowed to be
- included in the skipped test; if found before the target expression is found,
- the SkipTo is not a match
-
- Example::
- report = '''
- Outstanding Issues Report - 1 Jan 2000
-
- # | Severity | Description | Days Open
- -----+----------+-------------------------------------------+-----------
- 101 | Critical | Intermittent system crash | 6
- 94 | Cosmetic | Spelling error on Login ('log|n') | 14
- 79 | Minor | System slow when running too many reports | 47
- '''
- integer = Word(nums)
- SEP = Suppress('|')
- # use SkipTo to simply match everything up until the next SEP
- # - ignore quoted strings, so that a '|' character inside a quoted string does not match
- # - parse action will call token.strip() for each matched token, i.e., the description body
- string_data = SkipTo(SEP, ignore=quotedString)
- string_data.setParseAction(tokenMap(str.strip))
- ticket_expr = (integer("issue_num") + SEP
- + string_data("sev") + SEP
- + string_data("desc") + SEP
- + integer("days_open"))
-
- for tkt in ticket_expr.searchString(report):
- print tkt.dump()
- prints::
- ['101', 'Critical', 'Intermittent system crash', '6']
- - days_open: 6
- - desc: Intermittent system crash
- - issue_num: 101
- - sev: Critical
- ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14']
- - days_open: 14
- - desc: Spelling error on Login ('log|n')
- - issue_num: 94
- - sev: Cosmetic
- ['79', 'Minor', 'System slow when running too many reports', '47']
- - days_open: 47
- - desc: System slow when running too many reports
- - issue_num: 79
- - sev: Minor
- """
- def __init__( self, other, include=False, ignore=None, failOn=None ):
- super( SkipTo, self ).__init__( other )
- self.ignoreExpr = ignore
- self.mayReturnEmpty = True
- self.mayIndexError = False
- self.includeMatch = include
- self.asList = False
- if isinstance(failOn, basestring):
- self.failOn = ParserElement._literalStringClass(failOn)
- else:
- self.failOn = failOn
- self.errmsg = "No match found for "+_ustr(self.expr)
-
- def parseImpl( self, instring, loc, doActions=True ):
- startloc = loc
- instrlen = len(instring)
- expr = self.expr
- expr_parse = self.expr._parse
- self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None
- self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None
-
- tmploc = loc
- while tmploc <= instrlen:
- if self_failOn_canParseNext is not None:
- # break if failOn expression matches
- if self_failOn_canParseNext(instring, tmploc):
- break
-
- if self_ignoreExpr_tryParse is not None:
- # advance past ignore expressions
- while 1:
- try:
- tmploc = self_ignoreExpr_tryParse(instring, tmploc)
- except ParseBaseException:
- break
-
- try:
- expr_parse(instring, tmploc, doActions=False, callPreParse=False)
- except (ParseException, IndexError):
- # no match, advance loc in string
- tmploc += 1
- else:
- # matched skipto expr, done
- break
-
- else:
- # ran off the end of the input string without matching skipto expr, fail
- raise ParseException(instring, loc, self.errmsg, self)
-
- # build up return values
- loc = tmploc
- skiptext = instring[startloc:loc]
- skipresult = ParseResults(skiptext)
-
- if self.includeMatch:
- loc, mat = expr_parse(instring,loc,doActions,callPreParse=False)
- skipresult += mat
-
- return loc, skipresult
-
-class Forward(ParseElementEnhance):
- """
- Forward declaration of an expression to be defined later -
- used for recursive grammars, such as algebraic infix notation.
- When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator.
-
- Note: take care when assigning to C{Forward} not to overlook precedence of operators.
- Specifically, '|' has a lower precedence than '<<', so that::
- fwdExpr << a | b | c
- will actually be evaluated as::
- (fwdExpr << a) | b | c
- thereby leaving b and c out as parseable alternatives. It is recommended that you
- explicitly group the values inserted into the C{Forward}::
- fwdExpr << (a | b | c)
- Converting to use the '<<=' operator instead will avoid this problem.
-
- See L{ParseResults.pprint} for an example of a recursive parser created using
- C{Forward}.
- """
- def __init__( self, other=None ):
- super(Forward,self).__init__( other, savelist=False )
-
- def __lshift__( self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass(other)
- self.expr = other
- self.strRepr = None
- self.mayIndexError = self.expr.mayIndexError
- self.mayReturnEmpty = self.expr.mayReturnEmpty
- self.setWhitespaceChars( self.expr.whiteChars )
- self.skipWhitespace = self.expr.skipWhitespace
- self.saveAsList = self.expr.saveAsList
- self.ignoreExprs.extend(self.expr.ignoreExprs)
- return self
-
- def __ilshift__(self, other):
- return self << other
-
- def leaveWhitespace( self ):
- self.skipWhitespace = False
- return self
-
- def streamline( self ):
- if not self.streamlined:
- self.streamlined = True
- if self.expr is not None:
- self.expr.streamline()
- return self
-
- def validate( self, validateTrace=[] ):
- if self not in validateTrace:
- tmp = validateTrace[:]+[self]
- if self.expr is not None:
- self.expr.validate(tmp)
- self.checkRecursion([])
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
- return self.__class__.__name__ + ": ..."
-
- # stubbed out for now - creates awful memory and perf issues
- self._revertClass = self.__class__
- self.__class__ = _ForwardNoRecurse
- try:
- if self.expr is not None:
- retString = _ustr(self.expr)
- else:
- retString = "None"
- finally:
- self.__class__ = self._revertClass
- return self.__class__.__name__ + ": " + retString
-
- def copy(self):
- if self.expr is not None:
- return super(Forward,self).copy()
- else:
- ret = Forward()
- ret <<= self
- return ret
-
-class _ForwardNoRecurse(Forward):
- def __str__( self ):
- return "..."
-
-class TokenConverter(ParseElementEnhance):
- """
- Abstract subclass of C{ParseExpression}, for converting parsed results.
- """
- def __init__( self, expr, savelist=False ):
- super(TokenConverter,self).__init__( expr )#, savelist )
- self.saveAsList = False
-
-class Combine(TokenConverter):
- """
- Converter to concatenate all matching tokens to a single string.
- By default, the matching patterns must also be contiguous in the input string;
- this can be disabled by specifying C{'adjacent=False'} in the constructor.
-
- Example::
- real = Word(nums) + '.' + Word(nums)
- print(real.parseString('3.1416')) # -> ['3', '.', '1416']
- # will also erroneously match the following
- print(real.parseString('3. 1416')) # -> ['3', '.', '1416']
-
- real = Combine(Word(nums) + '.' + Word(nums))
- print(real.parseString('3.1416')) # -> ['3.1416']
- # no match when there are internal spaces
- print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...)
- """
- def __init__( self, expr, joinString="", adjacent=True ):
- super(Combine,self).__init__( expr )
- # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself
- if adjacent:
- self.leaveWhitespace()
- self.adjacent = adjacent
- self.skipWhitespace = True
- self.joinString = joinString
- self.callPreparse = True
-
- def ignore( self, other ):
- if self.adjacent:
- ParserElement.ignore(self, other)
- else:
- super( Combine, self).ignore( other )
- return self
-
- def postParse( self, instring, loc, tokenlist ):
- retToks = tokenlist.copy()
- del retToks[:]
- retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults)
-
- if self.resultsName and retToks.haskeys():
- return [ retToks ]
- else:
- return retToks
-
-class Group(TokenConverter):
- """
- Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions.
-
- Example::
- ident = Word(alphas)
- num = Word(nums)
- term = ident | num
- func = ident + Optional(delimitedList(term))
- print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100']
-
- func = ident + Group(Optional(delimitedList(term)))
- print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']]
- """
- def __init__( self, expr ):
- super(Group,self).__init__( expr )
- self.saveAsList = True
-
- def postParse( self, instring, loc, tokenlist ):
- return [ tokenlist ]
-
-class Dict(TokenConverter):
- """
- Converter to return a repetitive expression as a list, but also as a dictionary.
- Each element can also be referenced using the first token in the expression as its key.
- Useful for tabular report scraping when the first column can be used as a item key.
-
- Example::
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
-
- text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
- attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
-
- # print attributes as plain groups
- print(OneOrMore(attr_expr).parseString(text).dump())
-
- # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names
- result = Dict(OneOrMore(Group(attr_expr))).parseString(text)
- print(result.dump())
-
- # access named fields as dict entries, or output as dict
- print(result['shape'])
- print(result.asDict())
- prints::
- ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap']
-
- [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
- - color: light blue
- - posn: upper left
- - shape: SQUARE
- - texture: burlap
- SQUARE
- {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'}
- See more examples at L{ParseResults} of accessing fields by results name.
- """
- def __init__( self, expr ):
- super(Dict,self).__init__( expr )
- self.saveAsList = True
-
- def postParse( self, instring, loc, tokenlist ):
- for i,tok in enumerate(tokenlist):
- if len(tok) == 0:
- continue
- ikey = tok[0]
- if isinstance(ikey,int):
- ikey = _ustr(tok[0]).strip()
- if len(tok)==1:
- tokenlist[ikey] = _ParseResultsWithOffset("",i)
- elif len(tok)==2 and not isinstance(tok[1],ParseResults):
- tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i)
- else:
- dictvalue = tok.copy() #ParseResults(i)
- del dictvalue[0]
- if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()):
- tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i)
- else:
- tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i)
-
- if self.resultsName:
- return [ tokenlist ]
- else:
- return tokenlist
-
-
-class Suppress(TokenConverter):
- """
- Converter for ignoring the results of a parsed expression.
-
- Example::
- source = "a, b, c,d"
- wd = Word(alphas)
- wd_list1 = wd + ZeroOrMore(',' + wd)
- print(wd_list1.parseString(source))
-
- # often, delimiters that are useful during parsing are just in the
- # way afterward - use Suppress to keep them out of the parsed output
- wd_list2 = wd + ZeroOrMore(Suppress(',') + wd)
- print(wd_list2.parseString(source))
- prints::
- ['a', ',', 'b', ',', 'c', ',', 'd']
- ['a', 'b', 'c', 'd']
- (See also L{delimitedList}.)
- """
- def postParse( self, instring, loc, tokenlist ):
- return []
-
- def suppress( self ):
- return self
-
-
-class OnlyOnce(object):
- """
- Wrapper for parse actions, to ensure they are only called once.
- """
- def __init__(self, methodCall):
- self.callable = _trim_arity(methodCall)
- self.called = False
- def __call__(self,s,l,t):
- if not self.called:
- results = self.callable(s,l,t)
- self.called = True
- return results
- raise ParseException(s,l,"")
- def reset(self):
- self.called = False
-
-def traceParseAction(f):
- """
- Decorator for debugging parse actions.
-
- When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".}
- When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised.
-
- Example::
- wd = Word(alphas)
-
- @traceParseAction
- def remove_duplicate_chars(tokens):
- return ''.join(sorted(set(''.join(tokens))))
-
- wds = OneOrMore(wd).setParseAction(remove_duplicate_chars)
- print(wds.parseString("slkdjs sld sldd sdlf sdljf"))
- prints::
- >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {}))
- <<leaving remove_duplicate_chars (ret: 'dfjkls')
- ['dfjkls']
- """
- f = _trim_arity(f)
- def z(*paArgs):
- thisFunc = f.__name__
- s,l,t = paArgs[-3:]
- if len(paArgs)>3:
- thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc
- sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) )
- try:
- ret = f(*paArgs)
- except Exception as exc:
- sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) )
- raise
- sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) )
- return ret
- try:
- z.__name__ = f.__name__
- except AttributeError:
- pass
- return z
-
-#
-# global helpers
-#
-def delimitedList( expr, delim=",", combine=False ):
- """
- Helper to define a delimited list of expressions - the delimiter defaults to ','.
- By default, the list elements and delimiters can have intervening whitespace, and
- comments, but this can be overridden by passing C{combine=True} in the constructor.
- If C{combine} is set to C{True}, the matching tokens are returned as a single token
- string, with the delimiters included; otherwise, the matching tokens are returned
- as a list of tokens, with the delimiters suppressed.
-
- Example::
- delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc']
- delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE']
- """
- dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..."
- if combine:
- return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName)
- else:
- return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName)
-
-def countedArray( expr, intExpr=None ):
- """
- Helper to define a counted list of expressions.
- This helper defines a pattern of the form::
- integer expr expr expr...
- where the leading integer tells how many expr expressions follow.
- The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
-
- If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value.
-
- Example::
- countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd']
-
- # in this parser, the leading integer value is given in binary,
- # '10' indicating that 2 values are in the array
- binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2))
- countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd']
- """
- arrayExpr = Forward()
- def countFieldParseAction(s,l,t):
- n = t[0]
- arrayExpr << (n and Group(And([expr]*n)) or Group(empty))
- return []
- if intExpr is None:
- intExpr = Word(nums).setParseAction(lambda t:int(t[0]))
- else:
- intExpr = intExpr.copy()
- intExpr.setName("arrayLen")
- intExpr.addParseAction(countFieldParseAction, callDuringTry=True)
- return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...')
-
-def _flatten(L):
- ret = []
- for i in L:
- if isinstance(i,list):
- ret.extend(_flatten(i))
- else:
- ret.append(i)
- return ret
-
-def matchPreviousLiteral(expr):
- """
- Helper to define an expression that is indirectly defined from
- the tokens matched in a previous expression, that is, it looks
- for a 'repeat' of a previous expression. For example::
- first = Word(nums)
- second = matchPreviousLiteral(first)
- matchExpr = first + ":" + second
- will match C{"1:1"}, but not C{"1:2"}. Because this matches a
- previous literal, will also match the leading C{"1:1"} in C{"1:10"}.
- If this is not desired, use C{matchPreviousExpr}.
- Do I{not} use with packrat parsing enabled.
- """
- rep = Forward()
- def copyTokenToRepeater(s,l,t):
- if t:
- if len(t) == 1:
- rep << t[0]
- else:
- # flatten t tokens
- tflat = _flatten(t.asList())
- rep << And(Literal(tt) for tt in tflat)
- else:
- rep << Empty()
- expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
- rep.setName('(prev) ' + _ustr(expr))
- return rep
-
-def matchPreviousExpr(expr):
- """
- Helper to define an expression that is indirectly defined from
- the tokens matched in a previous expression, that is, it looks
- for a 'repeat' of a previous expression. For example::
- first = Word(nums)
- second = matchPreviousExpr(first)
- matchExpr = first + ":" + second
- will match C{"1:1"}, but not C{"1:2"}. Because this matches by
- expressions, will I{not} match the leading C{"1:1"} in C{"1:10"};
- the expressions are evaluated first, and then compared, so
- C{"1"} is compared with C{"10"}.
- Do I{not} use with packrat parsing enabled.
- """
- rep = Forward()
- e2 = expr.copy()
- rep <<= e2
- def copyTokenToRepeater(s,l,t):
- matchTokens = _flatten(t.asList())
- def mustMatchTheseTokens(s,l,t):
- theseTokens = _flatten(t.asList())
- if theseTokens != matchTokens:
- raise ParseException("",0,"")
- rep.setParseAction( mustMatchTheseTokens, callDuringTry=True )
- expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
- rep.setName('(prev) ' + _ustr(expr))
- return rep
-
-def _escapeRegexRangeChars(s):
- #~ escape these chars: ^-]
- for c in r"\^-]":
- s = s.replace(c,_bslash+c)
- s = s.replace("\n",r"\n")
- s = s.replace("\t",r"\t")
- return _ustr(s)
-
-def oneOf( strs, caseless=False, useRegex=True ):
- """
- Helper to quickly define a set of alternative Literals, and makes sure to do
- longest-first testing when there is a conflict, regardless of the input order,
- but returns a C{L{MatchFirst}} for best performance.
-
- Parameters:
- - strs - a string of space-delimited literals, or a collection of string literals
- - caseless - (default=C{False}) - treat all literals as caseless
- - useRegex - (default=C{True}) - as an optimization, will generate a Regex
- object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or
- if creating a C{Regex} raises an exception)
-
- Example::
- comp_oper = oneOf("< = > <= >= !=")
- var = Word(alphas)
- number = Word(nums)
- term = var | number
- comparison_expr = term + comp_oper + term
- print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12"))
- prints::
- [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']]
- """
- if caseless:
- isequal = ( lambda a,b: a.upper() == b.upper() )
- masks = ( lambda a,b: b.upper().startswith(a.upper()) )
- parseElementClass = CaselessLiteral
- else:
- isequal = ( lambda a,b: a == b )
- masks = ( lambda a,b: b.startswith(a) )
- parseElementClass = Literal
-
- symbols = []
- if isinstance(strs,basestring):
- symbols = strs.split()
- elif isinstance(strs, Iterable):
- symbols = list(strs)
- else:
- warnings.warn("Invalid argument to oneOf, expected string or iterable",
- SyntaxWarning, stacklevel=2)
- if not symbols:
- return NoMatch()
-
- i = 0
- while i < len(symbols)-1:
- cur = symbols[i]
- for j,other in enumerate(symbols[i+1:]):
- if ( isequal(other, cur) ):
- del symbols[i+j+1]
- break
- elif ( masks(cur, other) ):
- del symbols[i+j+1]
- symbols.insert(i,other)
- cur = other
- break
- else:
- i += 1
-
- if not caseless and useRegex:
- #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] ))
- try:
- if len(symbols)==len("".join(symbols)):
- return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols))
- else:
- return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols))
- except Exception:
- warnings.warn("Exception creating Regex for oneOf, building MatchFirst",
- SyntaxWarning, stacklevel=2)
-
-
- # last resort, just use MatchFirst
- return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols))
-
-def dictOf( key, value ):
- """
- Helper to easily and clearly define a dictionary by specifying the respective patterns
- for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens
- in the proper order. The key pattern can include delimiting markers or punctuation,
- as long as they are suppressed, thereby leaving the significant key text. The value
- pattern can include named results, so that the C{Dict} results can include named token
- fields.
-
- Example::
- text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
- attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
- print(OneOrMore(attr_expr).parseString(text).dump())
-
- attr_label = label
- attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)
-
- # similar to Dict, but simpler call format
- result = dictOf(attr_label, attr_value).parseString(text)
- print(result.dump())
- print(result['shape'])
- print(result.shape) # object attribute access works too
- print(result.asDict())
- prints::
- [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
- - color: light blue
- - posn: upper left
- - shape: SQUARE
- - texture: burlap
- SQUARE
- SQUARE
- {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'}
- """
- return Dict( ZeroOrMore( Group ( key + value ) ) )
-
-def originalTextFor(expr, asString=True):
- """
- Helper to return the original, untokenized text for a given expression. Useful to
- restore the parsed fields of an HTML start tag into the raw tag text itself, or to
- revert separate tokens with intervening whitespace back to the original matching
- input text. By default, returns astring containing the original parsed text.
-
- If the optional C{asString} argument is passed as C{False}, then the return value is a
- C{L{ParseResults}} containing any results names that were originally matched, and a
- single token containing the original matched text from the input string. So if
- the expression passed to C{L{originalTextFor}} contains expressions with defined
- results names, you must set C{asString} to C{False} if you want to preserve those
- results name values.
-
- Example::
- src = "this is test <b> bold <i>text</i> </b> normal text "
- for tag in ("b","i"):
- opener,closer = makeHTMLTags(tag)
- patt = originalTextFor(opener + SkipTo(closer) + closer)
- print(patt.searchString(src)[0])
- prints::
- ['<b> bold <i>text</i> </b>']
- ['<i>text</i>']
- """
- locMarker = Empty().setParseAction(lambda s,loc,t: loc)
- endlocMarker = locMarker.copy()
- endlocMarker.callPreparse = False
- matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end")
- if asString:
- extractText = lambda s,l,t: s[t._original_start:t._original_end]
- else:
- def extractText(s,l,t):
- t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]]
- matchExpr.setParseAction(extractText)
- matchExpr.ignoreExprs = expr.ignoreExprs
- return matchExpr
-
-def ungroup(expr):
- """
- Helper to undo pyparsing's default grouping of And expressions, even
- if all but one are non-empty.
- """
- return TokenConverter(expr).setParseAction(lambda t:t[0])
-
-def locatedExpr(expr):
- """
- Helper to decorate a returned token with its starting and ending locations in the input string.
- This helper adds the following results names:
- - locn_start = location where matched expression begins
- - locn_end = location where matched expression ends
- - value = the actual parsed results
-
- Be careful if the input text contains C{<TAB>} characters, you may want to call
- C{L{ParserElement.parseWithTabs}}
-
- Example::
- wd = Word(alphas)
- for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"):
- print(match)
- prints::
- [[0, 'ljsdf', 5]]
- [[8, 'lksdjjf', 15]]
- [[18, 'lkkjj', 23]]
- """
- locator = Empty().setParseAction(lambda s,l,t: l)
- return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end"))
-
-
-# convenience constants for positional expressions
-empty = Empty().setName("empty")
-lineStart = LineStart().setName("lineStart")
-lineEnd = LineEnd().setName("lineEnd")
-stringStart = StringStart().setName("stringStart")
-stringEnd = StringEnd().setName("stringEnd")
-
-_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
-_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16)))
-_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8)))
-_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1)
-_charRange = Group(_singleChar + Suppress("-") + _singleChar)
-_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"
-
-def srange(s):
- r"""
- Helper to easily define string ranges for use in Word construction. Borrows
- syntax from regexp '[]' string range definitions::
- srange("[0-9]") -> "0123456789"
- srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz"
- srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
- The input string must be enclosed in []'s, and the returned string is the expanded
- character set joined into a single string.
- The values enclosed in the []'s may be:
- - a single character
- - an escaped character with a leading backslash (such as C{\-} or C{\]})
- - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character)
- (C{\0x##} is also supported for backwards compatibility)
- - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character)
- - a range of any of the above, separated by a dash (C{'a-z'}, etc.)
- - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.)
- """
- _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1))
- try:
- return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body)
- except Exception:
- return ""
-
-def matchOnlyAtCol(n):
- """
- Helper method for defining parse actions that require matching at a specific
- column in the input text.
- """
- def verifyCol(strg,locn,toks):
- if col(locn,strg) != n:
- raise ParseException(strg,locn,"matched token not at column %d" % n)
- return verifyCol
-
-def replaceWith(replStr):
- """
- Helper method for common parse actions that simply return a literal value. Especially
- useful when used with C{L{transformString<ParserElement.transformString>}()}.
-
- Example::
- num = Word(nums).setParseAction(lambda toks: int(toks[0]))
- na = oneOf("N/A NA").setParseAction(replaceWith(math.nan))
- term = na | num
-
- OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234]
- """
- return lambda s,l,t: [replStr]
-
-def removeQuotes(s,l,t):
- """
- Helper parse action for removing quotation marks from parsed quoted strings.
-
- Example::
- # by default, quotation marks are included in parsed results
- quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"]
-
- # use removeQuotes to strip quotation marks from parsed results
- quotedString.setParseAction(removeQuotes)
- quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"]
- """
- return t[0][1:-1]
-
-def tokenMap(func, *args):
- """
- Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional
- args are passed, they are forwarded to the given function as additional arguments after
- the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the
- parsed data to an integer using base 16.
-
- Example (compare the last to example in L{ParserElement.transformString}::
- hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16))
- hex_ints.runTests('''
- 00 11 22 aa FF 0a 0d 1a
- ''')
-
- upperword = Word(alphas).setParseAction(tokenMap(str.upper))
- OneOrMore(upperword).runTests('''
- my kingdom for a horse
- ''')
-
- wd = Word(alphas).setParseAction(tokenMap(str.title))
- OneOrMore(wd).setParseAction(' '.join).runTests('''
- now is the winter of our discontent made glorious summer by this sun of york
- ''')
- prints::
- 00 11 22 aa FF 0a 0d 1a
- [0, 17, 34, 170, 255, 10, 13, 26]
-
- my kingdom for a horse
- ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE']
-
- now is the winter of our discontent made glorious summer by this sun of york
- ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York']
- """
- def pa(s,l,t):
- return [func(tokn, *args) for tokn in t]
-
- try:
- func_name = getattr(func, '__name__',
- getattr(func, '__class__').__name__)
- except Exception:
- func_name = str(func)
- pa.__name__ = func_name
-
- return pa
-
-upcaseTokens = tokenMap(lambda t: _ustr(t).upper())
-"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}"""
-
-downcaseTokens = tokenMap(lambda t: _ustr(t).lower())
-"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}"""
-
-def _makeTags(tagStr, xml):
- """Internal helper to construct opening and closing tag expressions, given a tag name"""
- if isinstance(tagStr,basestring):
- resname = tagStr
- tagStr = Keyword(tagStr, caseless=not xml)
- else:
- resname = tagStr.name
-
- tagAttrName = Word(alphas,alphanums+"_-:")
- if (xml):
- tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes )
- openTag = Suppress("<") + tagStr("tag") + \
- Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \
- Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
- else:
- printablesLessRAbrack = "".join(c for c in printables if c not in ">")
- tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack)
- openTag = Suppress("<") + tagStr("tag") + \
- Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
- Optional( Suppress("=") + tagAttrValue ) ))) + \
- Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
- closeTag = Combine(_L("</") + tagStr + ">")
-
- openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname)
- closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname)
- openTag.tag = resname
- closeTag.tag = resname
- return openTag, closeTag
-
-def makeHTMLTags(tagStr):
- """
- Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches
- tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values.
-
- Example::
- text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
- # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple
- a,a_end = makeHTMLTags("A")
- link_expr = a + SkipTo(a_end)("link_text") + a_end
-
- for link in link_expr.searchString(text):
- # attributes in the <A> tag (like "href" shown here) are also accessible as named results
- print(link.link_text, '->', link.href)
- prints::
- pyparsing -> http://pyparsing.wikispaces.com
- """
- return _makeTags( tagStr, False )
-
-def makeXMLTags(tagStr):
- """
- Helper to construct opening and closing tag expressions for XML, given a tag name. Matches
- tags only in the given upper/lower case.
-
- Example: similar to L{makeHTMLTags}
- """
- return _makeTags( tagStr, True )
-
-def withAttribute(*args,**attrDict):
- """
- Helper to create a validating parse action to be used with start tags created
- with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag
- with a required attribute value, to avoid false matches on common tags such as
- C{<TD>} or C{<DIV>}.
-
- Call C{withAttribute} with a series of attribute names and values. Specify the list
- of filter attributes names and values as:
- - keyword arguments, as in C{(align="right")}, or
- - as an explicit dict with C{**} operator, when an attribute name is also a Python
- reserved word, as in C{**{"class":"Customer", "align":"right"}}
- - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") )
- For attribute names with a namespace prefix, you must use the second form. Attribute
- names are matched insensitive to upper/lower case.
-
- If just testing for C{class} (with or without a namespace), use C{L{withClass}}.
-
- To verify that the attribute exists, but without specifying a value, pass
- C{withAttribute.ANY_VALUE} as the value.
-
- Example::
- html = '''
- <div>
- Some text
- <div type="grid">1 4 0 1 0</div>
- <div type="graph">1,3 2,3 1,1</div>
- <div>this has no type</div>
- </div>
-
- '''
- div,div_end = makeHTMLTags("div")
-
- # only match div tag having a type attribute with value "grid"
- div_grid = div().setParseAction(withAttribute(type="grid"))
- grid_expr = div_grid + SkipTo(div | div_end)("body")
- for grid_header in grid_expr.searchString(html):
- print(grid_header.body)
-
- # construct a match with any div tag having a type attribute, regardless of the value
- div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE))
- div_expr = div_any_type + SkipTo(div | div_end)("body")
- for div_header in div_expr.searchString(html):
- print(div_header.body)
- prints::
- 1 4 0 1 0
-
- 1 4 0 1 0
- 1,3 2,3 1,1
- """
- if args:
- attrs = args[:]
- else:
- attrs = attrDict.items()
- attrs = [(k,v) for k,v in attrs]
- def pa(s,l,tokens):
- for attrName,attrValue in attrs:
- if attrName not in tokens:
- raise ParseException(s,l,"no matching attribute " + attrName)
- if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue:
- raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" %
- (attrName, tokens[attrName], attrValue))
- return pa
-withAttribute.ANY_VALUE = object()
-
-def withClass(classname, namespace=''):
- """
- Simplified version of C{L{withAttribute}} when matching on a div class - made
- difficult because C{class} is a reserved word in Python.
-
- Example::
- html = '''
- <div>
- Some text
- <div class="grid">1 4 0 1 0</div>
- <div class="graph">1,3 2,3 1,1</div>
- <div>this &lt;div&gt; has no class</div>
- </div>
-
- '''
- div,div_end = makeHTMLTags("div")
- div_grid = div().setParseAction(withClass("grid"))
-
- grid_expr = div_grid + SkipTo(div | div_end)("body")
- for grid_header in grid_expr.searchString(html):
- print(grid_header.body)
-
- div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE))
- div_expr = div_any_type + SkipTo(div | div_end)("body")
- for div_header in div_expr.searchString(html):
- print(div_header.body)
- prints::
- 1 4 0 1 0
-
- 1 4 0 1 0
- 1,3 2,3 1,1
- """
- classattr = "%s:class" % namespace if namespace else "class"
- return withAttribute(**{classattr : classname})
-
-opAssoc = _Constants()
-opAssoc.LEFT = object()
-opAssoc.RIGHT = object()
-
-def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ):
- """
- Helper method for constructing grammars of expressions made up of
- operators working in a precedence hierarchy. Operators may be unary or
- binary, left- or right-associative. Parse actions can also be attached
- to operator expressions. The generated parser will also recognize the use
- of parentheses to override operator precedences (see example below).
-
- Note: if you define a deep operator list, you may see performance issues
- when using infixNotation. See L{ParserElement.enablePackrat} for a
- mechanism to potentially improve your parser performance.
-
- Parameters:
- - baseExpr - expression representing the most basic element for the nested
- - opList - list of tuples, one for each operator precedence level in the
- expression grammar; each tuple is of the form
- (opExpr, numTerms, rightLeftAssoc, parseAction), where:
- - opExpr is the pyparsing expression for the operator;
- may also be a string, which will be converted to a Literal;
- if numTerms is 3, opExpr is a tuple of two expressions, for the
- two operators separating the 3 terms
- - numTerms is the number of terms for this operator (must
- be 1, 2, or 3)
- - rightLeftAssoc is the indicator whether the operator is
- right or left associative, using the pyparsing-defined
- constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}.
- - parseAction is the parse action to be associated with
- expressions matching this operator expression (the
- parse action tuple member may be omitted); if the parse action
- is passed a tuple or list of functions, this is equivalent to
- calling C{setParseAction(*fn)} (L{ParserElement.setParseAction})
- - lpar - expression for matching left-parentheses (default=C{Suppress('(')})
- - rpar - expression for matching right-parentheses (default=C{Suppress(')')})
-
- Example::
- # simple example of four-function arithmetic with ints and variable names
- integer = pyparsing_common.signed_integer
- varname = pyparsing_common.identifier
-
- arith_expr = infixNotation(integer | varname,
- [
- ('-', 1, opAssoc.RIGHT),
- (oneOf('* /'), 2, opAssoc.LEFT),
- (oneOf('+ -'), 2, opAssoc.LEFT),
- ])
-
- arith_expr.runTests('''
- 5+3*6
- (5+3)*6
- -2--11
- ''', fullDump=False)
- prints::
- 5+3*6
- [[5, '+', [3, '*', 6]]]
-
- (5+3)*6
- [[[5, '+', 3], '*', 6]]
-
- -2--11
- [[['-', 2], '-', ['-', 11]]]
- """
- ret = Forward()
- lastExpr = baseExpr | ( lpar + ret + rpar )
- for i,operDef in enumerate(opList):
- opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4]
- termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr
- if arity == 3:
- if opExpr is None or len(opExpr) != 2:
- raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions")
- opExpr1, opExpr2 = opExpr
- thisExpr = Forward().setName(termName)
- if rightLeftAssoc == opAssoc.LEFT:
- if arity == 1:
- matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) )
- elif arity == 2:
- if opExpr is not None:
- matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) )
- else:
- matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) )
- elif arity == 3:
- matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \
- Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr )
- else:
- raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
- elif rightLeftAssoc == opAssoc.RIGHT:
- if arity == 1:
- # try to avoid LR with this extra test
- if not isinstance(opExpr, Optional):
- opExpr = Optional(opExpr)
- matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr )
- elif arity == 2:
- if opExpr is not None:
- matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) )
- else:
- matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) )
- elif arity == 3:
- matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \
- Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr )
- else:
- raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
- else:
- raise ValueError("operator must indicate right or left associativity")
- if pa:
- if isinstance(pa, (tuple, list)):
- matchExpr.setParseAction(*pa)
- else:
- matchExpr.setParseAction(pa)
- thisExpr <<= ( matchExpr.setName(termName) | lastExpr )
- lastExpr = thisExpr
- ret <<= lastExpr
- return ret
-
-operatorPrecedence = infixNotation
-"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release."""
-
-dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes")
-sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes")
-quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'|
- Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes")
-unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal")
-
-def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()):
- """
- Helper method for defining nested lists enclosed in opening and closing
- delimiters ("(" and ")" are the default).
-
- Parameters:
- - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression
- - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression
- - content - expression for items within the nested lists (default=C{None})
- - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString})
-
- If an expression is not provided for the content argument, the nested
- expression will capture all whitespace-delimited content between delimiters
- as a list of separate values.
-
- Use the C{ignoreExpr} argument to define expressions that may contain
- opening or closing characters that should not be treated as opening
- or closing characters for nesting, such as quotedString or a comment
- expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}.
- The default is L{quotedString}, but if no expressions are to be ignored,
- then pass C{None} for this argument.
-
- Example::
- data_type = oneOf("void int short long char float double")
- decl_data_type = Combine(data_type + Optional(Word('*')))
- ident = Word(alphas+'_', alphanums+'_')
- number = pyparsing_common.number
- arg = Group(decl_data_type + ident)
- LPAR,RPAR = map(Suppress, "()")
-
- code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment))
-
- c_function = (decl_data_type("type")
- + ident("name")
- + LPAR + Optional(delimitedList(arg), [])("args") + RPAR
- + code_body("body"))
- c_function.ignore(cStyleComment)
-
- source_code = '''
- int is_odd(int x) {
- return (x%2);
- }
-
- int dec_to_hex(char hchar) {
- if (hchar >= '0' && hchar <= '9') {
- return (ord(hchar)-ord('0'));
- } else {
- return (10+ord(hchar)-ord('A'));
- }
- }
- '''
- for func in c_function.searchString(source_code):
- print("%(name)s (%(type)s) args: %(args)s" % func)
-
- prints::
- is_odd (int) args: [['int', 'x']]
- dec_to_hex (int) args: [['char', 'hchar']]
- """
- if opener == closer:
- raise ValueError("opening and closing strings cannot be the same")
- if content is None:
- if isinstance(opener,basestring) and isinstance(closer,basestring):
- if len(opener) == 1 and len(closer)==1:
- if ignoreExpr is not None:
- content = (Combine(OneOrMore(~ignoreExpr +
- CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS
- ).setParseAction(lambda t:t[0].strip()))
- else:
- if ignoreExpr is not None:
- content = (Combine(OneOrMore(~ignoreExpr +
- ~Literal(opener) + ~Literal(closer) +
- CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) +
- CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- raise ValueError("opening and closing arguments must be strings if no content expression is given")
- ret = Forward()
- if ignoreExpr is not None:
- ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) )
- else:
- ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) )
- ret.setName('nested %s%s expression' % (opener,closer))
- return ret
-
-def indentedBlock(blockStatementExpr, indentStack, indent=True):
- """
- Helper method for defining space-delimited indentation blocks, such as
- those used to define block statements in Python source code.
-
- Parameters:
- - blockStatementExpr - expression defining syntax of statement that
- is repeated within the indented block
- - indentStack - list created by caller to manage indentation stack
- (multiple statementWithIndentedBlock expressions within a single grammar
- should share a common indentStack)
- - indent - boolean indicating whether block must be indented beyond the
- the current level; set to False for block of left-most statements
- (default=C{True})
-
- A valid block must contain at least one C{blockStatement}.
-
- Example::
- data = '''
- def A(z):
- A1
- B = 100
- G = A2
- A2
- A3
- B
- def BB(a,b,c):
- BB1
- def BBA():
- bba1
- bba2
- bba3
- C
- D
- def spam(x,y):
- def eggs(z):
- pass
- '''
-
-
- indentStack = [1]
- stmt = Forward()
-
- identifier = Word(alphas, alphanums)
- funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":")
- func_body = indentedBlock(stmt, indentStack)
- funcDef = Group( funcDecl + func_body )
-
- rvalue = Forward()
- funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")")
- rvalue << (funcCall | identifier | Word(nums))
- assignment = Group(identifier + "=" + rvalue)
- stmt << ( funcDef | assignment | identifier )
-
- module_body = OneOrMore(stmt)
-
- parseTree = module_body.parseString(data)
- parseTree.pprint()
- prints::
- [['def',
- 'A',
- ['(', 'z', ')'],
- ':',
- [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]],
- 'B',
- ['def',
- 'BB',
- ['(', 'a', 'b', 'c', ')'],
- ':',
- [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]],
- 'C',
- 'D',
- ['def',
- 'spam',
- ['(', 'x', 'y', ')'],
- ':',
- [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]]
- """
- def checkPeerIndent(s,l,t):
- if l >= len(s): return
- curCol = col(l,s)
- if curCol != indentStack[-1]:
- if curCol > indentStack[-1]:
- raise ParseFatalException(s,l,"illegal nesting")
- raise ParseException(s,l,"not a peer entry")
-
- def checkSubIndent(s,l,t):
- curCol = col(l,s)
- if curCol > indentStack[-1]:
- indentStack.append( curCol )
- else:
- raise ParseException(s,l,"not a subentry")
-
- def checkUnindent(s,l,t):
- if l >= len(s): return
- curCol = col(l,s)
- if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]):
- raise ParseException(s,l,"not an unindent")
- indentStack.pop()
-
- NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress())
- INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT')
- PEER = Empty().setParseAction(checkPeerIndent).setName('')
- UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT')
- if indent:
- smExpr = Group( Optional(NL) +
- #~ FollowedBy(blockStatementExpr) +
- INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT)
- else:
- smExpr = Group( Optional(NL) +
- (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) )
- blockStatementExpr.ignore(_bslash + LineEnd())
- return smExpr.setName('indented block')
-
-alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
-punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
-
-anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag'))
-_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\''))
-commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity")
-def replaceHTMLEntity(t):
- """Helper parser action to replace common HTML entities with their special characters"""
- return _htmlEntityMap.get(t.entity)
-
-# it's easy to get these comment structures wrong - they're very common, so may as well make them available
-cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment")
-"Comment of the form C{/* ... */}"
-
-htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment")
-"Comment of the form C{<!-- ... -->}"
-
-restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line")
-dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment")
-"Comment of the form C{// ... (to end of line)}"
-
-cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment")
-"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}"
-
-javaStyleComment = cppStyleComment
-"Same as C{L{cppStyleComment}}"
-
-pythonStyleComment = Regex(r"#.*").setName("Python style comment")
-"Comment of the form C{# ... (to end of line)}"
-
-_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') +
- Optional( Word(" \t") +
- ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem")
-commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList")
-"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas.
- This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}."""
-
-# some other useful expressions - using lower-case class name since we are really using this as a namespace
-class pyparsing_common:
- """
- Here are some common low-level expressions that may be useful in jump-starting parser development:
- - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>})
- - common L{programming identifiers<identifier>}
- - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>})
- - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>}
- - L{UUID<uuid>}
- - L{comma-separated list<comma_separated_list>}
- Parse actions:
- - C{L{convertToInteger}}
- - C{L{convertToFloat}}
- - C{L{convertToDate}}
- - C{L{convertToDatetime}}
- - C{L{stripHTMLTags}}
- - C{L{upcaseTokens}}
- - C{L{downcaseTokens}}
-
- Example::
- pyparsing_common.number.runTests('''
- # any int or real number, returned as the appropriate type
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- ''')
-
- pyparsing_common.fnumber.runTests('''
- # any int or real number, returned as float
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- ''')
-
- pyparsing_common.hex_integer.runTests('''
- # hex numbers
- 100
- FF
- ''')
-
- pyparsing_common.fraction.runTests('''
- # fractions
- 1/2
- -3/4
- ''')
-
- pyparsing_common.mixed_integer.runTests('''
- # mixed fractions
- 1
- 1/2
- -3/4
- 1-3/4
- ''')
-
- import uuid
- pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
- pyparsing_common.uuid.runTests('''
- # uuid
- 12345678-1234-5678-1234-567812345678
- ''')
- prints::
- # any int or real number, returned as the appropriate type
- 100
- [100]
-
- -100
- [-100]
-
- +100
- [100]
-
- 3.14159
- [3.14159]
-
- 6.02e23
- [6.02e+23]
-
- 1e-12
- [1e-12]
-
- # any int or real number, returned as float
- 100
- [100.0]
-
- -100
- [-100.0]
-
- +100
- [100.0]
-
- 3.14159
- [3.14159]
-
- 6.02e23
- [6.02e+23]
-
- 1e-12
- [1e-12]
-
- # hex numbers
- 100
- [256]
-
- FF
- [255]
-
- # fractions
- 1/2
- [0.5]
-
- -3/4
- [-0.75]
-
- # mixed fractions
- 1
- [1]
-
- 1/2
- [0.5]
-
- -3/4
- [-0.75]
-
- 1-3/4
- [1.75]
-
- # uuid
- 12345678-1234-5678-1234-567812345678
- [UUID('12345678-1234-5678-1234-567812345678')]
- """
-
- convertToInteger = tokenMap(int)
- """
- Parse action for converting parsed integers to Python int
- """
-
- convertToFloat = tokenMap(float)
- """
- Parse action for converting parsed numbers to Python float
- """
-
- integer = Word(nums).setName("integer").setParseAction(convertToInteger)
- """expression that parses an unsigned integer, returns an int"""
-
- hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16))
- """expression that parses a hexadecimal integer, returns an int"""
-
- signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger)
- """expression that parses an integer with optional leading sign, returns an int"""
-
- fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction")
- """fractional expression of an integer divided by an integer, returns a float"""
- fraction.addParseAction(lambda t: t[0]/t[-1])
-
- mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction")
- """mixed integer of the form 'integer - fraction', with optional leading integer, returns float"""
- mixed_integer.addParseAction(sum)
-
- real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat)
- """expression that parses a floating point number and returns a float"""
-
- sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat)
- """expression that parses a floating point number with optional scientific notation and returns a float"""
-
- # streamlining this expression makes the docs nicer-looking
- number = (sci_real | real | signed_integer).streamline()
- """any numeric expression, returns the corresponding Python type"""
-
- fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat)
- """any int or real number, returned as float"""
-
- identifier = Word(alphas+'_', alphanums+'_').setName("identifier")
- """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')"""
-
- ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address")
- "IPv4 address (C{0.0.0.0 - 255.255.255.255})"
-
- _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer")
- _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address")
- _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address")
- _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8)
- _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address")
- ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address")
- "IPv6 address (long, short, or mixed form)"
-
- mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address")
- "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)"
-
- @staticmethod
- def convertToDate(fmt="%Y-%m-%d"):
- """
- Helper to create a parse action for converting parsed date string to Python datetime.date
-
- Params -
- - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"})
-
- Example::
- date_expr = pyparsing_common.iso8601_date.copy()
- date_expr.setParseAction(pyparsing_common.convertToDate())
- print(date_expr.parseString("1999-12-31"))
- prints::
- [datetime.date(1999, 12, 31)]
- """
- def cvt_fn(s,l,t):
- try:
- return datetime.strptime(t[0], fmt).date()
- except ValueError as ve:
- raise ParseException(s, l, str(ve))
- return cvt_fn
-
- @staticmethod
- def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"):
- """
- Helper to create a parse action for converting parsed datetime string to Python datetime.datetime
-
- Params -
- - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"})
-
- Example::
- dt_expr = pyparsing_common.iso8601_datetime.copy()
- dt_expr.setParseAction(pyparsing_common.convertToDatetime())
- print(dt_expr.parseString("1999-12-31T23:59:59.999"))
- prints::
- [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)]
- """
- def cvt_fn(s,l,t):
- try:
- return datetime.strptime(t[0], fmt)
- except ValueError as ve:
- raise ParseException(s, l, str(ve))
- return cvt_fn
-
- iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date")
- "ISO8601 date (C{yyyy-mm-dd})"
-
- iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime")
- "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}"
-
- uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID")
- "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})"
-
- _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress()
- @staticmethod
- def stripHTMLTags(s, l, tokens):
- """
- Parse action to remove HTML tags from web page HTML source
-
- Example::
- # strip HTML links from normal text
- text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
- td,td_end = makeHTMLTags("TD")
- table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end
-
- print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page'
- """
- return pyparsing_common._html_stripper.transformString(tokens[0])
-
- _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',')
- + Optional( White(" \t") ) ) ).streamline().setName("commaItem")
- comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list")
- """Predefined expression of 1 or more printable words or quoted strings, separated by commas."""
-
- upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper()))
- """Parse action to convert tokens to upper case."""
-
- downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower()))
- """Parse action to convert tokens to lower case."""
-
-
-if __name__ == "__main__":
-
- selectToken = CaselessLiteral("select")
- fromToken = CaselessLiteral("from")
-
- ident = Word(alphas, alphanums + "_$")
-
- columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
- columnNameList = Group(delimitedList(columnName)).setName("columns")
- columnSpec = ('*' | columnNameList)
-
- tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
- tableNameList = Group(delimitedList(tableName)).setName("tables")
-
- simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables")
-
- # demo runTests method, including embedded comments in test string
- simpleSQL.runTests("""
- # '*' as column list and dotted table name
- select * from SYS.XYZZY
-
- # caseless match on "SELECT", and casts back to "select"
- SELECT * from XYZZY, ABC
-
- # list of column names, and mixed case SELECT keyword
- Select AA,BB,CC from Sys.dual
-
- # multiple tables
- Select A, B, C from Sys.dual, Table2
-
- # invalid SELECT keyword - should fail
- Xelect A, B, C from Sys.dual
-
- # incomplete command - should fail
- Select
-
- # invalid column name - should fail
- Select ^^^ frox Sys.dual
-
- """)
-
- pyparsing_common.number.runTests("""
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- """)
-
- # any int or real number, returned as float
- pyparsing_common.fnumber.runTests("""
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- """)
-
- pyparsing_common.hex_integer.runTests("""
- 100
- FF
- """)
-
- import uuid
- pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
- pyparsing_common.uuid.runTests("""
- 12345678-1234-5678-1234-567812345678
- """)
+# module pyparsing.py
+#
+# Copyright (c) 2003-2018 Paul T. McGuire
+#
+# 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__doc__ = \
+"""
+pyparsing module - Classes and methods to define and execute parsing grammars
+=============================================================================
+
+The pyparsing module is an alternative approach to creating and executing simple grammars,
+vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you
+don't need to learn a new syntax for defining grammars or matching expressions - the parsing module
+provides a library of classes that you use to construct the grammar directly in Python.
+
+Here is a program to parse "Hello, World!" (or any greeting of the form
+C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements
+(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to
+L{Literal} expressions)::
+
+ from pyparsing import Word, alphas
+
+ # define grammar of a greeting
+ greet = Word(alphas) + "," + Word(alphas) + "!"
+
+ hello = "Hello, World!"
+ print (hello, "->", greet.parseString(hello))
+
+The program outputs the following::
+
+ Hello, World! -> ['Hello', ',', 'World', '!']
+
+The Python representation of the grammar is quite readable, owing to the self-explanatory
+class names, and the use of '+', '|' and '^' operators.
+
+The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an
+object with named attributes.
+
+The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
+ - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.)
+ - quoted strings
+ - embedded comments
+
+
+Getting Started -
+-----------------
+Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing
+classes inherit from. Use the docstrings for examples of how to:
+ - construct literal match expressions from L{Literal} and L{CaselessLiteral} classes
+ - construct character word-group expressions using the L{Word} class
+ - see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes
+ - use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones
+ - associate names with your parsed results using L{ParserElement.setResultsName}
+ - find some helpful expression short-cuts like L{delimitedList} and L{oneOf}
+ - find more useful common expressions in the L{pyparsing_common} namespace class
+"""
+
+__version__ = "2.2.1"
+__versionTime__ = "18 Sep 2018 00:49 UTC"
+__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>"
+
+import string
+from weakref import ref as wkref
+import copy
+import sys
+import warnings
+import re
+import sre_constants
+import collections
+import pprint
+import traceback
+import types
+from datetime import datetime
+
+try:
+ from _thread import RLock
+except ImportError:
+ from threading import RLock
+
+try:
+ # Python 3
+ from collections.abc import Iterable
+ from collections.abc import MutableMapping
+except ImportError:
+ # Python 2.7
+ from collections import Iterable
+ from collections import MutableMapping
+
+try:
+ from collections import OrderedDict as _OrderedDict
+except ImportError:
+ try:
+ from ordereddict import OrderedDict as _OrderedDict
+ except ImportError:
+ _OrderedDict = None
+
+#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) )
+
+__all__ = [
+'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty',
+'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal',
+'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or',
+'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException',
+'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException',
+'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter',
+'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore',
+'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col',
+'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString',
+'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums',
+'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno',
+'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral',
+'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables',
+'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity',
+'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd',
+'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute',
+'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass',
+'CloseMatch', 'tokenMap', 'pyparsing_common',
+]
+
+system_version = tuple(sys.version_info)[:3]
+PY_3 = system_version[0] == 3
+if PY_3:
+ _MAX_INT = sys.maxsize
+ basestring = str
+ unichr = chr
+ _ustr = str
+
+ # build list of single arg builtins, that can be used as parse actions
+ singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max]
+
+else:
+ _MAX_INT = sys.maxint
+ range = xrange
+
+ def _ustr(obj):
+ """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
+ str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
+ then < returns the unicode object | encodes it with the default encoding | ... >.
+ """
+ if isinstance(obj,unicode):
+ return obj
+
+ try:
+ # If this works, then _ustr(obj) has the same behaviour as str(obj), so
+ # it won't break any existing code.
+ return str(obj)
+
+ except UnicodeEncodeError:
+ # Else encode it
+ ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace')
+ xmlcharref = Regex(r'&#\d+;')
+ xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:])
+ return xmlcharref.transformString(ret)
+
+ # build list of single arg builtins, tolerant of Python version, that can be used as parse actions
+ singleArgBuiltins = []
+ import __builtin__
+ for fname in "sum len sorted reversed list tuple set any all min max".split():
+ try:
+ singleArgBuiltins.append(getattr(__builtin__,fname))
+ except AttributeError:
+ continue
+
+_generatorType = type((y for y in range(1)))
+
+def _xml_escape(data):
+ """Escape &, <, >, ", ', etc. in a string of data."""
+
+ # ampersand must be replaced first
+ from_symbols = '&><"\''
+ to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split())
+ for from_,to_ in zip(from_symbols, to_symbols):
+ data = data.replace(from_, to_)
+ return data
+
+class _Constants(object):
+ pass
+
+alphas = string.ascii_uppercase + string.ascii_lowercase
+nums = "0123456789"
+hexnums = nums + "ABCDEFabcdef"
+alphanums = alphas + nums
+_bslash = chr(92)
+printables = "".join(c for c in string.printable if c not in string.whitespace)
+
+class ParseBaseException(Exception):
+ """base exception class for all parsing runtime exceptions"""
+ # Performance tuning: we construct a *lot* of these, so keep this
+ # constructor as small and fast as possible
+ def __init__( self, pstr, loc=0, msg=None, elem=None ):
+ self.loc = loc
+ if msg is None:
+ self.msg = pstr
+ self.pstr = ""
+ else:
+ self.msg = msg
+ self.pstr = pstr
+ self.parserElement = elem
+ self.args = (pstr, loc, msg)
+
+ @classmethod
+ def _from_exception(cls, pe):
+ """
+ internal factory method to simplify creating one type of ParseException
+ from another - avoids having __init__ signature conflicts among subclasses
+ """
+ return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement)
+
+ def __getattr__( self, aname ):
+ """supported attributes by name are:
+ - lineno - returns the line number of the exception text
+ - col - returns the column number of the exception text
+ - line - returns the line containing the exception text
+ """
+ if( aname == "lineno" ):
+ return lineno( self.loc, self.pstr )
+ elif( aname in ("col", "column") ):
+ return col( self.loc, self.pstr )
+ elif( aname == "line" ):
+ return line( self.loc, self.pstr )
+ else:
+ raise AttributeError(aname)
+
+ def __str__( self ):
+ return "%s (at char %d), (line:%d, col:%d)" % \
+ ( self.msg, self.loc, self.lineno, self.column )
+ def __repr__( self ):
+ return _ustr(self)
+ def markInputline( self, markerString = ">!<" ):
+ """Extracts the exception line from the input string, and marks
+ the location of the exception with a special symbol.
+ """
+ line_str = self.line
+ line_column = self.column - 1
+ if markerString:
+ line_str = "".join((line_str[:line_column],
+ markerString, line_str[line_column:]))
+ return line_str.strip()
+ def __dir__(self):
+ return "lineno col line".split() + dir(type(self))
+
+class ParseException(ParseBaseException):
+ """
+ Exception thrown when parse expressions don't match class;
+ supported attributes by name are:
+ - lineno - returns the line number of the exception text
+ - col - returns the column number of the exception text
+ - line - returns the line containing the exception text
+
+ Example::
+ try:
+ Word(nums).setName("integer").parseString("ABC")
+ except ParseException as pe:
+ print(pe)
+ print("column: {}".format(pe.col))
+
+ prints::
+ Expected integer (at char 0), (line:1, col:1)
+ column: 1
+ """
+ pass
+
+class ParseFatalException(ParseBaseException):
+ """user-throwable exception thrown when inconsistent parse content
+ is found; stops all parsing immediately"""
+ pass
+
+class ParseSyntaxException(ParseFatalException):
+ """just like L{ParseFatalException}, but thrown internally when an
+ L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop
+ immediately because an unbacktrackable syntax error has been found"""
+ pass
+
+#~ class ReparseException(ParseBaseException):
+ #~ """Experimental class - parse actions can raise this exception to cause
+ #~ pyparsing to reparse the input string:
+ #~ - with a modified input string, and/or
+ #~ - with a modified start location
+ #~ Set the values of the ReparseException in the constructor, and raise the
+ #~ exception in a parse action to cause pyparsing to use the new string/location.
+ #~ Setting the values as None causes no change to be made.
+ #~ """
+ #~ def __init_( self, newstring, restartLoc ):
+ #~ self.newParseText = newstring
+ #~ self.reparseLoc = restartLoc
+
+class RecursiveGrammarException(Exception):
+ """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive"""
+ def __init__( self, parseElementList ):
+ self.parseElementTrace = parseElementList
+
+ def __str__( self ):
+ return "RecursiveGrammarException: %s" % self.parseElementTrace
+
+class _ParseResultsWithOffset(object):
+ def __init__(self,p1,p2):
+ self.tup = (p1,p2)
+ def __getitem__(self,i):
+ return self.tup[i]
+ def __repr__(self):
+ return repr(self.tup[0])
+ def setOffset(self,i):
+ self.tup = (self.tup[0],i)
+
+class ParseResults(object):
+ """
+ Structured parse results, to provide multiple means of access to the parsed data:
+ - as a list (C{len(results)})
+ - by list index (C{results[0], results[1]}, etc.)
+ - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName})
+
+ Example::
+ integer = Word(nums)
+ date_str = (integer.setResultsName("year") + '/'
+ + integer.setResultsName("month") + '/'
+ + integer.setResultsName("day"))
+ # equivalent form:
+ # date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ # parseString returns a ParseResults object
+ result = date_str.parseString("1999/12/31")
+
+ def test(s, fn=repr):
+ print("%s -> %s" % (s, fn(eval(s))))
+ test("list(result)")
+ test("result[0]")
+ test("result['month']")
+ test("result.day")
+ test("'month' in result")
+ test("'minutes' in result")
+ test("result.dump()", str)
+ prints::
+ list(result) -> ['1999', '/', '12', '/', '31']
+ result[0] -> '1999'
+ result['month'] -> '12'
+ result.day -> '31'
+ 'month' in result -> True
+ 'minutes' in result -> False
+ result.dump() -> ['1999', '/', '12', '/', '31']
+ - day: 31
+ - month: 12
+ - year: 1999
+ """
+ def __new__(cls, toklist=None, name=None, asList=True, modal=True ):
+ if isinstance(toklist, cls):
+ return toklist
+ retobj = object.__new__(cls)
+ retobj.__doinit = True
+ return retobj
+
+ # Performance tuning: we construct a *lot* of these, so keep this
+ # constructor as small and fast as possible
+ def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ):
+ if self.__doinit:
+ self.__doinit = False
+ self.__name = None
+ self.__parent = None
+ self.__accumNames = {}
+ self.__asList = asList
+ self.__modal = modal
+ if toklist is None:
+ toklist = []
+ if isinstance(toklist, list):
+ self.__toklist = toklist[:]
+ elif isinstance(toklist, _generatorType):
+ self.__toklist = list(toklist)
+ else:
+ self.__toklist = [toklist]
+ self.__tokdict = dict()
+
+ if name is not None and name:
+ if not modal:
+ self.__accumNames[name] = 0
+ if isinstance(name,int):
+ name = _ustr(name) # will always return a str, but use _ustr for consistency
+ self.__name = name
+ if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])):
+ if isinstance(toklist,basestring):
+ toklist = [ toklist ]
+ if asList:
+ if isinstance(toklist,ParseResults):
+ self[name] = _ParseResultsWithOffset(toklist.copy(),0)
+ else:
+ self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0)
+ self[name].__name = name
+ else:
+ try:
+ self[name] = toklist[0]
+ except (KeyError,TypeError,IndexError):
+ self[name] = toklist
+
+ def __getitem__( self, i ):
+ if isinstance( i, (int,slice) ):
+ return self.__toklist[i]
+ else:
+ if i not in self.__accumNames:
+ return self.__tokdict[i][-1][0]
+ else:
+ return ParseResults([ v[0] for v in self.__tokdict[i] ])
+
+ def __setitem__( self, k, v, isinstance=isinstance ):
+ if isinstance(v,_ParseResultsWithOffset):
+ self.__tokdict[k] = self.__tokdict.get(k,list()) + [v]
+ sub = v[0]
+ elif isinstance(k,(int,slice)):
+ self.__toklist[k] = v
+ sub = v
+ else:
+ self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)]
+ sub = v
+ if isinstance(sub,ParseResults):
+ sub.__parent = wkref(self)
+
+ def __delitem__( self, i ):
+ if isinstance(i,(int,slice)):
+ mylen = len( self.__toklist )
+ del self.__toklist[i]
+
+ # convert int to slice
+ if isinstance(i, int):
+ if i < 0:
+ i += mylen
+ i = slice(i, i+1)
+ # get removed indices
+ removed = list(range(*i.indices(mylen)))
+ removed.reverse()
+ # fixup indices in token dictionary
+ for name,occurrences in self.__tokdict.items():
+ for j in removed:
+ for k, (value, position) in enumerate(occurrences):
+ occurrences[k] = _ParseResultsWithOffset(value, position - (position > j))
+ else:
+ del self.__tokdict[i]
+
+ def __contains__( self, k ):
+ return k in self.__tokdict
+
+ def __len__( self ): return len( self.__toklist )
+ def __bool__(self): return ( not not self.__toklist )
+ __nonzero__ = __bool__
+ def __iter__( self ): return iter( self.__toklist )
+ def __reversed__( self ): return iter( self.__toklist[::-1] )
+ def _iterkeys( self ):
+ if hasattr(self.__tokdict, "iterkeys"):
+ return self.__tokdict.iterkeys()
+ else:
+ return iter(self.__tokdict)
+
+ def _itervalues( self ):
+ return (self[k] for k in self._iterkeys())
+
+ def _iteritems( self ):
+ return ((k, self[k]) for k in self._iterkeys())
+
+ if PY_3:
+ keys = _iterkeys
+ """Returns an iterator of all named result keys (Python 3.x only)."""
+
+ values = _itervalues
+ """Returns an iterator of all named result values (Python 3.x only)."""
+
+ items = _iteritems
+ """Returns an iterator of all named result key-value tuples (Python 3.x only)."""
+
+ else:
+ iterkeys = _iterkeys
+ """Returns an iterator of all named result keys (Python 2.x only)."""
+
+ itervalues = _itervalues
+ """Returns an iterator of all named result values (Python 2.x only)."""
+
+ iteritems = _iteritems
+ """Returns an iterator of all named result key-value tuples (Python 2.x only)."""
+
+ def keys( self ):
+ """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.iterkeys())
+
+ def values( self ):
+ """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.itervalues())
+
+ def items( self ):
+ """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.iteritems())
+
+ def haskeys( self ):
+ """Since keys() returns an iterator, this method is helpful in bypassing
+ code that looks for the existence of any defined results names."""
+ return bool(self.__tokdict)
+
+ def pop( self, *args, **kwargs):
+ """
+ Removes and returns item at specified index (default=C{last}).
+ Supports both C{list} and C{dict} semantics for C{pop()}. If passed no
+ argument or an integer argument, it will use C{list} semantics
+ and pop tokens from the list of parsed tokens. If passed a
+ non-integer argument (most likely a string), it will use C{dict}
+ semantics and pop the corresponding value from any defined
+ results names. A second default return value argument is
+ supported, just as in C{dict.pop()}.
+
+ Example::
+ def remove_first(tokens):
+ tokens.pop(0)
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+ print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321']
+
+ label = Word(alphas)
+ patt = label("LABEL") + OneOrMore(Word(nums))
+ print(patt.parseString("AAB 123 321").dump())
+
+ # Use pop() in a parse action to remove named result (note that corresponding value is not
+ # removed from list form of results)
+ def remove_LABEL(tokens):
+ tokens.pop("LABEL")
+ return tokens
+ patt.addParseAction(remove_LABEL)
+ print(patt.parseString("AAB 123 321").dump())
+ prints::
+ ['AAB', '123', '321']
+ - LABEL: AAB
+
+ ['AAB', '123', '321']
+ """
+ if not args:
+ args = [-1]
+ for k,v in kwargs.items():
+ if k == 'default':
+ args = (args[0], v)
+ else:
+ raise TypeError("pop() got an unexpected keyword argument '%s'" % k)
+ if (isinstance(args[0], int) or
+ len(args) == 1 or
+ args[0] in self):
+ index = args[0]
+ ret = self[index]
+ del self[index]
+ return ret
+ else:
+ defaultvalue = args[1]
+ return defaultvalue
+
+ def get(self, key, defaultValue=None):
+ """
+ Returns named result matching the given key, or if there is no
+ such name, then returns the given C{defaultValue} or C{None} if no
+ C{defaultValue} is specified.
+
+ Similar to C{dict.get()}.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString("1999/12/31")
+ print(result.get("year")) # -> '1999'
+ print(result.get("hour", "not specified")) # -> 'not specified'
+ print(result.get("hour")) # -> None
+ """
+ if key in self:
+ return self[key]
+ else:
+ return defaultValue
+
+ def insert( self, index, insStr ):
+ """
+ Inserts new element at location index in the list of parsed tokens.
+
+ Similar to C{list.insert()}.
+
+ Example::
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+
+ # use a parse action to insert the parse location in the front of the parsed results
+ def insert_locn(locn, tokens):
+ tokens.insert(0, locn)
+ print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321']
+ """
+ self.__toklist.insert(index, insStr)
+ # fixup indices in token dictionary
+ for name,occurrences in self.__tokdict.items():
+ for k, (value, position) in enumerate(occurrences):
+ occurrences[k] = _ParseResultsWithOffset(value, position + (position > index))
+
+ def append( self, item ):
+ """
+ Add single element to end of ParseResults list of elements.
+
+ Example::
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+
+ # use a parse action to compute the sum of the parsed integers, and add it to the end
+ def append_sum(tokens):
+ tokens.append(sum(map(int, tokens)))
+ print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444]
+ """
+ self.__toklist.append(item)
+
+ def extend( self, itemseq ):
+ """
+ Add sequence of elements to end of ParseResults list of elements.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+
+ # use a parse action to append the reverse of the matched strings, to make a palindrome
+ def make_palindrome(tokens):
+ tokens.extend(reversed([t[::-1] for t in tokens]))
+ return ''.join(tokens)
+ print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl'
+ """
+ if isinstance(itemseq, ParseResults):
+ self += itemseq
+ else:
+ self.__toklist.extend(itemseq)
+
+ def clear( self ):
+ """
+ Clear all elements and results names.
+ """
+ del self.__toklist[:]
+ self.__tokdict.clear()
+
+ def __getattr__( self, name ):
+ try:
+ return self[name]
+ except KeyError:
+ return ""
+
+ if name in self.__tokdict:
+ if name not in self.__accumNames:
+ return self.__tokdict[name][-1][0]
+ else:
+ return ParseResults([ v[0] for v in self.__tokdict[name] ])
+ else:
+ return ""
+
+ def __add__( self, other ):
+ ret = self.copy()
+ ret += other
+ return ret
+
+ def __iadd__( self, other ):
+ if other.__tokdict:
+ offset = len(self.__toklist)
+ addoffset = lambda a: offset if a<0 else a+offset
+ otheritems = other.__tokdict.items()
+ otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) )
+ for (k,vlist) in otheritems for v in vlist]
+ for k,v in otherdictitems:
+ self[k] = v
+ if isinstance(v[0],ParseResults):
+ v[0].__parent = wkref(self)
+
+ self.__toklist += other.__toklist
+ self.__accumNames.update( other.__accumNames )
+ return self
+
+ def __radd__(self, other):
+ if isinstance(other,int) and other == 0:
+ # useful for merging many ParseResults using sum() builtin
+ return self.copy()
+ else:
+ # this may raise a TypeError - so be it
+ return other + self
+
+ def __repr__( self ):
+ return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) )
+
+ def __str__( self ):
+ return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']'
+
+ def _asStringList( self, sep='' ):
+ out = []
+ for item in self.__toklist:
+ if out and sep:
+ out.append(sep)
+ if isinstance( item, ParseResults ):
+ out += item._asStringList()
+ else:
+ out.append( _ustr(item) )
+ return out
+
+ def asList( self ):
+ """
+ Returns the parse results as a nested list of matching tokens, all converted to strings.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+ result = patt.parseString("sldkj lsdkj sldkj")
+ # even though the result prints in string-like form, it is actually a pyparsing ParseResults
+ print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj']
+
+ # Use asList() to create an actual list
+ result_list = result.asList()
+ print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj']
+ """
+ return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist]
+
+ def asDict( self ):
+ """
+ Returns the named parse results as a nested dictionary.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString('12/31/1999')
+ print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]})
+
+ result_dict = result.asDict()
+ print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'}
+
+ # even though a ParseResults supports dict-like access, sometime you just need to have a dict
+ import json
+ print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable
+ print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"}
+ """
+ if PY_3:
+ item_fn = self.items
+ else:
+ item_fn = self.iteritems
+
+ def toItem(obj):
+ if isinstance(obj, ParseResults):
+ if obj.haskeys():
+ return obj.asDict()
+ else:
+ return [toItem(v) for v in obj]
+ else:
+ return obj
+
+ return dict((k,toItem(v)) for k,v in item_fn())
+
+ def copy( self ):
+ """
+ Returns a new copy of a C{ParseResults} object.
+ """
+ ret = ParseResults( self.__toklist )
+ ret.__tokdict = self.__tokdict.copy()
+ ret.__parent = self.__parent
+ ret.__accumNames.update( self.__accumNames )
+ ret.__name = self.__name
+ return ret
+
+ def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ):
+ """
+ (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names.
+ """
+ nl = "\n"
+ out = []
+ namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items()
+ for v in vlist)
+ nextLevelIndent = indent + " "
+
+ # collapse out indents if formatting is not desired
+ if not formatted:
+ indent = ""
+ nextLevelIndent = ""
+ nl = ""
+
+ selfTag = None
+ if doctag is not None:
+ selfTag = doctag
+ else:
+ if self.__name:
+ selfTag = self.__name
+
+ if not selfTag:
+ if namedItemsOnly:
+ return ""
+ else:
+ selfTag = "ITEM"
+
+ out += [ nl, indent, "<", selfTag, ">" ]
+
+ for i,res in enumerate(self.__toklist):
+ if isinstance(res,ParseResults):
+ if i in namedItems:
+ out += [ res.asXML(namedItems[i],
+ namedItemsOnly and doctag is None,
+ nextLevelIndent,
+ formatted)]
+ else:
+ out += [ res.asXML(None,
+ namedItemsOnly and doctag is None,
+ nextLevelIndent,
+ formatted)]
+ else:
+ # individual token, see if there is a name for it
+ resTag = None
+ if i in namedItems:
+ resTag = namedItems[i]
+ if not resTag:
+ if namedItemsOnly:
+ continue
+ else:
+ resTag = "ITEM"
+ xmlBodyText = _xml_escape(_ustr(res))
+ out += [ nl, nextLevelIndent, "<", resTag, ">",
+ xmlBodyText,
+ "</", resTag, ">" ]
+
+ out += [ nl, indent, "</", selfTag, ">" ]
+ return "".join(out)
+
+ def __lookup(self,sub):
+ for k,vlist in self.__tokdict.items():
+ for v,loc in vlist:
+ if sub is v:
+ return k
+ return None
+
+ def getName(self):
+ r"""
+ Returns the results name for this token expression. Useful when several
+ different expressions might match at a particular location.
+
+ Example::
+ integer = Word(nums)
+ ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d")
+ house_number_expr = Suppress('#') + Word(nums, alphanums)
+ user_data = (Group(house_number_expr)("house_number")
+ | Group(ssn_expr)("ssn")
+ | Group(integer)("age"))
+ user_info = OneOrMore(user_data)
+
+ result = user_info.parseString("22 111-22-3333 #221B")
+ for item in result:
+ print(item.getName(), ':', item[0])
+ prints::
+ age : 22
+ ssn : 111-22-3333
+ house_number : 221B
+ """
+ if self.__name:
+ return self.__name
+ elif self.__parent:
+ par = self.__parent()
+ if par:
+ return par.__lookup(self)
+ else:
+ return None
+ elif (len(self) == 1 and
+ len(self.__tokdict) == 1 and
+ next(iter(self.__tokdict.values()))[0][1] in (0,-1)):
+ return next(iter(self.__tokdict.keys()))
+ else:
+ return None
+
+ def dump(self, indent='', depth=0, full=True):
+ """
+ Diagnostic method for listing out the contents of a C{ParseResults}.
+ Accepts an optional C{indent} argument so that this string can be embedded
+ in a nested display of other data.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString('12/31/1999')
+ print(result.dump())
+ prints::
+ ['12', '/', '31', '/', '1999']
+ - day: 1999
+ - month: 31
+ - year: 12
+ """
+ out = []
+ NL = '\n'
+ out.append( indent+_ustr(self.asList()) )
+ if full:
+ if self.haskeys():
+ items = sorted((str(k), v) for k,v in self.items())
+ for k,v in items:
+ if out:
+ out.append(NL)
+ out.append( "%s%s- %s: " % (indent,(' '*depth), k) )
+ if isinstance(v,ParseResults):
+ if v:
+ out.append( v.dump(indent,depth+1) )
+ else:
+ out.append(_ustr(v))
+ else:
+ out.append(repr(v))
+ elif any(isinstance(vv,ParseResults) for vv in self):
+ v = self
+ for i,vv in enumerate(v):
+ if isinstance(vv,ParseResults):
+ out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) ))
+ else:
+ out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv)))
+
+ return "".join(out)
+
+ def pprint(self, *args, **kwargs):
+ """
+ Pretty-printer for parsed results as a list, using the C{pprint} module.
+ Accepts additional positional or keyword args as defined for the
+ C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint})
+
+ Example::
+ ident = Word(alphas, alphanums)
+ num = Word(nums)
+ func = Forward()
+ term = ident | num | Group('(' + func + ')')
+ func <<= ident + Group(Optional(delimitedList(term)))
+ result = func.parseString("fna a,b,(fnb c,d,200),100")
+ result.pprint(width=40)
+ prints::
+ ['fna',
+ ['a',
+ 'b',
+ ['(', 'fnb', ['c', 'd', '200'], ')'],
+ '100']]
+ """
+ pprint.pprint(self.asList(), *args, **kwargs)
+
+ # add support for pickle protocol
+ def __getstate__(self):
+ return ( self.__toklist,
+ ( self.__tokdict.copy(),
+ self.__parent is not None and self.__parent() or None,
+ self.__accumNames,
+ self.__name ) )
+
+ def __setstate__(self,state):
+ self.__toklist = state[0]
+ (self.__tokdict,
+ par,
+ inAccumNames,
+ self.__name) = state[1]
+ self.__accumNames = {}
+ self.__accumNames.update(inAccumNames)
+ if par is not None:
+ self.__parent = wkref(par)
+ else:
+ self.__parent = None
+
+ def __getnewargs__(self):
+ return self.__toklist, self.__name, self.__asList, self.__modal
+
+ def __dir__(self):
+ return (dir(type(self)) + list(self.keys()))
+
+MutableMapping.register(ParseResults)
+
+def col (loc,strg):
+ """Returns current column within a string, counting newlines as line separators.
+ The first column is number 1.
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+ """
+ s = strg
+ return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc)
+
+def lineno(loc,strg):
+ """Returns current line number within a string, counting newlines as line separators.
+ The first line is number 1.
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+ """
+ return strg.count("\n",0,loc) + 1
+
+def line( loc, strg ):
+ """Returns the line of text containing loc within a string, counting newlines as line separators.
+ """
+ lastCR = strg.rfind("\n", 0, loc)
+ nextCR = strg.find("\n", loc)
+ if nextCR >= 0:
+ return strg[lastCR+1:nextCR]
+ else:
+ return strg[lastCR+1:]
+
+def _defaultStartDebugAction( instring, loc, expr ):
+ print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )))
+
+def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ):
+ print ("Matched " + _ustr(expr) + " -> " + str(toks.asList()))
+
+def _defaultExceptionDebugAction( instring, loc, expr, exc ):
+ print ("Exception raised:" + _ustr(exc))
+
+def nullDebugAction(*args):
+ """'Do-nothing' debug action, to suppress debugging output during parsing."""
+ pass
+
+# Only works on Python 3.x - nonlocal is toxic to Python 2 installs
+#~ 'decorator to trim function calls to match the arity of the target'
+#~ def _trim_arity(func, maxargs=3):
+ #~ if func in singleArgBuiltins:
+ #~ return lambda s,l,t: func(t)
+ #~ limit = 0
+ #~ foundArity = False
+ #~ def wrapper(*args):
+ #~ nonlocal limit,foundArity
+ #~ while 1:
+ #~ try:
+ #~ ret = func(*args[limit:])
+ #~ foundArity = True
+ #~ return ret
+ #~ except TypeError:
+ #~ if limit == maxargs or foundArity:
+ #~ raise
+ #~ limit += 1
+ #~ continue
+ #~ return wrapper
+
+# this version is Python 2.x-3.x cross-compatible
+'decorator to trim function calls to match the arity of the target'
+def _trim_arity(func, maxargs=2):
+ if func in singleArgBuiltins:
+ return lambda s,l,t: func(t)
+ limit = [0]
+ foundArity = [False]
+
+ # traceback return data structure changed in Py3.5 - normalize back to plain tuples
+ if system_version[:2] >= (3,5):
+ def extract_stack(limit=0):
+ # special handling for Python 3.5.0 - extra deep call stack by 1
+ offset = -3 if system_version == (3,5,0) else -2
+ frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset]
+ return [frame_summary[:2]]
+ def extract_tb(tb, limit=0):
+ frames = traceback.extract_tb(tb, limit=limit)
+ frame_summary = frames[-1]
+ return [frame_summary[:2]]
+ else:
+ extract_stack = traceback.extract_stack
+ extract_tb = traceback.extract_tb
+
+ # synthesize what would be returned by traceback.extract_stack at the call to
+ # user's parse action 'func', so that we don't incur call penalty at parse time
+
+ LINE_DIFF = 6
+ # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND
+ # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!!
+ this_line = extract_stack(limit=2)[-1]
+ pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF)
+
+ def wrapper(*args):
+ while 1:
+ try:
+ ret = func(*args[limit[0]:])
+ foundArity[0] = True
+ return ret
+ except TypeError:
+ # re-raise TypeErrors if they did not come from our arity testing
+ if foundArity[0]:
+ raise
+ else:
+ try:
+ tb = sys.exc_info()[-1]
+ if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth:
+ raise
+ finally:
+ del tb
+
+ if limit[0] <= maxargs:
+ limit[0] += 1
+ continue
+ raise
+
+ # copy func name to wrapper for sensible debug output
+ func_name = "<parse action>"
+ try:
+ func_name = getattr(func, '__name__',
+ getattr(func, '__class__').__name__)
+ except Exception:
+ func_name = str(func)
+ wrapper.__name__ = func_name
+
+ return wrapper
+
+class ParserElement(object):
+ """Abstract base level parser element class."""
+ DEFAULT_WHITE_CHARS = " \n\t\r"
+ verbose_stacktrace = False
+
+ @staticmethod
+ def setDefaultWhitespaceChars( chars ):
+ r"""
+ Overrides the default whitespace chars
+
+ Example::
+ # default whitespace chars are space, <TAB> and newline
+ OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl']
+
+ # change to just treat newline as significant
+ ParserElement.setDefaultWhitespaceChars(" \t")
+ OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def']
+ """
+ ParserElement.DEFAULT_WHITE_CHARS = chars
+
+ @staticmethod
+ def inlineLiteralsUsing(cls):
+ """
+ Set class to be used for inclusion of string literals into a parser.
+
+ Example::
+ # default literal class used is Literal
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
+
+
+ # change to Suppress
+ ParserElement.inlineLiteralsUsing(Suppress)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ date_str.parseString("1999/12/31") # -> ['1999', '12', '31']
+ """
+ ParserElement._literalStringClass = cls
+
+ def __init__( self, savelist=False ):
+ self.parseAction = list()
+ self.failAction = None
+ #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall
+ self.strRepr = None
+ self.resultsName = None
+ self.saveAsList = savelist
+ self.skipWhitespace = True
+ self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
+ self.copyDefaultWhiteChars = True
+ self.mayReturnEmpty = False # used when checking for left-recursion
+ self.keepTabs = False
+ self.ignoreExprs = list()
+ self.debug = False
+ self.streamlined = False
+ self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index
+ self.errmsg = ""
+ self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all)
+ self.debugActions = ( None, None, None ) #custom debug actions
+ self.re = None
+ self.callPreparse = True # used to avoid redundant calls to preParse
+ self.callDuringTry = False
+
+ def copy( self ):
+ """
+ Make a copy of this C{ParserElement}. Useful for defining different parse actions
+ for the same parsing pattern, using copies of the original parse element.
+
+ Example::
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K")
+ integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
+
+ print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M"))
+ prints::
+ [5120, 100, 655360, 268435456]
+ Equivalent form of C{expr.copy()} is just C{expr()}::
+ integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
+ """
+ cpy = copy.copy( self )
+ cpy.parseAction = self.parseAction[:]
+ cpy.ignoreExprs = self.ignoreExprs[:]
+ if self.copyDefaultWhiteChars:
+ cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
+ return cpy
+
+ def setName( self, name ):
+ """
+ Define name for this expression, makes debugging and exception messages clearer.
+
+ Example::
+ Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1)
+ Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1)
+ """
+ self.name = name
+ self.errmsg = "Expected " + self.name
+ if hasattr(self,"exception"):
+ self.exception.msg = self.errmsg
+ return self
+
+ def setResultsName( self, name, listAllMatches=False ):
+ """
+ Define name for referencing matching tokens as a nested attribute
+ of the returned parse results.
+ NOTE: this returns a *copy* of the original C{ParserElement} object;
+ this is so that the client can define a basic element, such as an
+ integer, and reference it in multiple places with different names.
+
+ You can also set results names using the abbreviated syntax,
+ C{expr("name")} in place of C{expr.setResultsName("name")} -
+ see L{I{__call__}<__call__>}.
+
+ Example::
+ date_str = (integer.setResultsName("year") + '/'
+ + integer.setResultsName("month") + '/'
+ + integer.setResultsName("day"))
+
+ # equivalent form:
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+ """
+ newself = self.copy()
+ if name.endswith("*"):
+ name = name[:-1]
+ listAllMatches=True
+ newself.resultsName = name
+ newself.modalResults = not listAllMatches
+ return newself
+
+ def setBreak(self,breakFlag = True):
+ """Method to invoke the Python pdb debugger when this element is
+ about to be parsed. Set C{breakFlag} to True to enable, False to
+ disable.
+ """
+ if breakFlag:
+ _parseMethod = self._parse
+ def breaker(instring, loc, doActions=True, callPreParse=True):
+ import pdb
+ pdb.set_trace()
+ return _parseMethod( instring, loc, doActions, callPreParse )
+ breaker._originalParseMethod = _parseMethod
+ self._parse = breaker
+ else:
+ if hasattr(self._parse,"_originalParseMethod"):
+ self._parse = self._parse._originalParseMethod
+ return self
+
+ def setParseAction( self, *fns, **kwargs ):
+ """
+ Define one or more actions to perform when successfully matching parse element definition.
+ Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)},
+ C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where:
+ - s = the original string being parsed (see note below)
+ - loc = the location of the matching substring
+ - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object
+ If the functions in fns modify the tokens, they can return them as the return
+ value from fn, and the modified list of tokens will replace the original.
+ Otherwise, fn does not need to return any value.
+
+ Optional keyword arguments:
+ - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{parseString}<parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer + '/' + integer + '/' + integer
+
+ date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
+
+ # use parse action to convert to ints at parse time
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ date_str = integer + '/' + integer + '/' + integer
+
+ # note that integer fields are now ints, not strings
+ date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31]
+ """
+ self.parseAction = list(map(_trim_arity, list(fns)))
+ self.callDuringTry = kwargs.get("callDuringTry", False)
+ return self
+
+ def addParseAction( self, *fns, **kwargs ):
+ """
+ Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}.
+
+ See examples in L{I{copy}<copy>}.
+ """
+ self.parseAction += list(map(_trim_arity, list(fns)))
+ self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
+ return self
+
+ def addCondition(self, *fns, **kwargs):
+ """Add a boolean predicate function to expression's list of parse actions. See
+ L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction},
+ functions passed to C{addCondition} need to return boolean success/fail of the condition.
+
+ Optional keyword arguments:
+ - message = define a custom message to be used in the raised exception
+ - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException
+
+ Example::
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ year_int = integer.copy()
+ year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later")
+ date_str = year_int + '/' + integer + '/' + integer
+
+ result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1)
+ """
+ msg = kwargs.get("message", "failed user-defined condition")
+ exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException
+ for fn in fns:
+ def pa(s,l,t):
+ if not bool(_trim_arity(fn)(s,l,t)):
+ raise exc_type(s,l,msg)
+ self.parseAction.append(pa)
+ self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
+ return self
+
+ def setFailAction( self, fn ):
+ """Define action to perform if parsing fails at this expression.
+ Fail acton fn is a callable function that takes the arguments
+ C{fn(s,loc,expr,err)} where:
+ - s = string being parsed
+ - loc = location where expression match was attempted and failed
+ - expr = the parse expression that failed
+ - err = the exception thrown
+ The function returns no value. It may throw C{L{ParseFatalException}}
+ if it is desired to stop parsing immediately."""
+ self.failAction = fn
+ return self
+
+ def _skipIgnorables( self, instring, loc ):
+ exprsFound = True
+ while exprsFound:
+ exprsFound = False
+ for e in self.ignoreExprs:
+ try:
+ while 1:
+ loc,dummy = e._parse( instring, loc )
+ exprsFound = True
+ except ParseException:
+ pass
+ return loc
+
+ def preParse( self, instring, loc ):
+ if self.ignoreExprs:
+ loc = self._skipIgnorables( instring, loc )
+
+ if self.skipWhitespace:
+ wt = self.whiteChars
+ instrlen = len(instring)
+ while loc < instrlen and instring[loc] in wt:
+ loc += 1
+
+ return loc
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ return loc, []
+
+ def postParse( self, instring, loc, tokenlist ):
+ return tokenlist
+
+ #~ @profile
+ def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
+ debugging = ( self.debug ) #and doActions )
+
+ if debugging or self.failAction:
+ #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))
+ if (self.debugActions[0] ):
+ self.debugActions[0]( instring, loc, self )
+ if callPreParse and self.callPreparse:
+ preloc = self.preParse( instring, loc )
+ else:
+ preloc = loc
+ tokensStart = preloc
+ try:
+ try:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+ except IndexError:
+ raise ParseException( instring, len(instring), self.errmsg, self )
+ except ParseBaseException as err:
+ #~ print ("Exception raised:", err)
+ if self.debugActions[2]:
+ self.debugActions[2]( instring, tokensStart, self, err )
+ if self.failAction:
+ self.failAction( instring, tokensStart, self, err )
+ raise
+ else:
+ if callPreParse and self.callPreparse:
+ preloc = self.preParse( instring, loc )
+ else:
+ preloc = loc
+ tokensStart = preloc
+ if self.mayIndexError or preloc >= len(instring):
+ try:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+ except IndexError:
+ raise ParseException( instring, len(instring), self.errmsg, self )
+ else:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+
+ tokens = self.postParse( instring, loc, tokens )
+
+ retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults )
+ if self.parseAction and (doActions or self.callDuringTry):
+ if debugging:
+ try:
+ for fn in self.parseAction:
+ tokens = fn( instring, tokensStart, retTokens )
+ if tokens is not None:
+ retTokens = ParseResults( tokens,
+ self.resultsName,
+ asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
+ modal=self.modalResults )
+ except ParseBaseException as err:
+ #~ print "Exception raised in user parse action:", err
+ if (self.debugActions[2] ):
+ self.debugActions[2]( instring, tokensStart, self, err )
+ raise
+ else:
+ for fn in self.parseAction:
+ tokens = fn( instring, tokensStart, retTokens )
+ if tokens is not None:
+ retTokens = ParseResults( tokens,
+ self.resultsName,
+ asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
+ modal=self.modalResults )
+ if debugging:
+ #~ print ("Matched",self,"->",retTokens.asList())
+ if (self.debugActions[1] ):
+ self.debugActions[1]( instring, tokensStart, loc, self, retTokens )
+
+ return loc, retTokens
+
+ def tryParse( self, instring, loc ):
+ try:
+ return self._parse( instring, loc, doActions=False )[0]
+ except ParseFatalException:
+ raise ParseException( instring, loc, self.errmsg, self)
+
+ def canParseNext(self, instring, loc):
+ try:
+ self.tryParse(instring, loc)
+ except (ParseException, IndexError):
+ return False
+ else:
+ return True
+
+ class _UnboundedCache(object):
+ def __init__(self):
+ cache = {}
+ self.not_in_cache = not_in_cache = object()
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+
+ def clear(self):
+ cache.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ if _OrderedDict is not None:
+ class _FifoCache(object):
+ def __init__(self, size):
+ self.not_in_cache = not_in_cache = object()
+
+ cache = _OrderedDict()
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+ while len(cache) > size:
+ try:
+ cache.popitem(False)
+ except KeyError:
+ pass
+
+ def clear(self):
+ cache.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ else:
+ class _FifoCache(object):
+ def __init__(self, size):
+ self.not_in_cache = not_in_cache = object()
+
+ cache = {}
+ key_fifo = collections.deque([], size)
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+ while len(key_fifo) > size:
+ cache.pop(key_fifo.popleft(), None)
+ key_fifo.append(key)
+
+ def clear(self):
+ cache.clear()
+ key_fifo.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ # argument cache for optimizing repeated calls when backtracking through recursive expressions
+ packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail
+ packrat_cache_lock = RLock()
+ packrat_cache_stats = [0, 0]
+
+ # this method gets repeatedly called during backtracking with the same arguments -
+ # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression
+ def _parseCache( self, instring, loc, doActions=True, callPreParse=True ):
+ HIT, MISS = 0, 1
+ lookup = (self, instring, loc, callPreParse, doActions)
+ with ParserElement.packrat_cache_lock:
+ cache = ParserElement.packrat_cache
+ value = cache.get(lookup)
+ if value is cache.not_in_cache:
+ ParserElement.packrat_cache_stats[MISS] += 1
+ try:
+ value = self._parseNoCache(instring, loc, doActions, callPreParse)
+ except ParseBaseException as pe:
+ # cache a copy of the exception, without the traceback
+ cache.set(lookup, pe.__class__(*pe.args))
+ raise
+ else:
+ cache.set(lookup, (value[0], value[1].copy()))
+ return value
+ else:
+ ParserElement.packrat_cache_stats[HIT] += 1
+ if isinstance(value, Exception):
+ raise value
+ return (value[0], value[1].copy())
+
+ _parse = _parseNoCache
+
+ @staticmethod
+ def resetCache():
+ ParserElement.packrat_cache.clear()
+ ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats)
+
+ _packratEnabled = False
+ @staticmethod
+ def enablePackrat(cache_size_limit=128):
+ """Enables "packrat" parsing, which adds memoizing to the parsing logic.
+ Repeated parse attempts at the same string location (which happens
+ often in many complex grammars) can immediately return a cached value,
+ instead of re-executing parsing/validating code. Memoizing is done of
+ both valid results and parsing exceptions.
+
+ Parameters:
+ - cache_size_limit - (default=C{128}) - if an integer value is provided
+ will limit the size of the packrat cache; if None is passed, then
+ the cache size will be unbounded; if 0 is passed, the cache will
+ be effectively disabled.
+
+ This speedup may break existing programs that use parse actions that
+ have side-effects. For this reason, packrat parsing is disabled when
+ you first import pyparsing. To activate the packrat feature, your
+ program must call the class method C{ParserElement.enablePackrat()}. If
+ your program uses C{psyco} to "compile as you go", you must call
+ C{enablePackrat} before calling C{psyco.full()}. If you do not do this,
+ Python will crash. For best results, call C{enablePackrat()} immediately
+ after importing pyparsing.
+
+ Example::
+ import pyparsing
+ pyparsing.ParserElement.enablePackrat()
+ """
+ if not ParserElement._packratEnabled:
+ ParserElement._packratEnabled = True
+ if cache_size_limit is None:
+ ParserElement.packrat_cache = ParserElement._UnboundedCache()
+ else:
+ ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit)
+ ParserElement._parse = ParserElement._parseCache
+
+ def parseString( self, instring, parseAll=False ):
+ """
+ Execute the parse expression with the given string.
+ This is the main interface to the client code, once the complete
+ expression has been built.
+
+ If you want the grammar to require that the entire input string be
+ successfully parsed, then set C{parseAll} to True (equivalent to ending
+ the grammar with C{L{StringEnd()}}).
+
+ Note: C{parseString} implicitly calls C{expandtabs()} on the input string,
+ in order to report proper column numbers in parse actions.
+ If the input string contains tabs and
+ the grammar uses parse actions that use the C{loc} argument to index into the
+ string being parsed, you can ensure you have a consistent view of the input
+ string by:
+ - calling C{parseWithTabs} on your grammar before calling C{parseString}
+ (see L{I{parseWithTabs}<parseWithTabs>})
+ - define your parse action using the full C{(s,loc,toks)} signature, and
+ reference the input string using the parse action's C{s} argument
+ - explictly expand the tabs in your input string before calling
+ C{parseString}
+
+ Example::
+ Word('a').parseString('aaaaabaaa') # -> ['aaaaa']
+ Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text
+ """
+ ParserElement.resetCache()
+ if not self.streamlined:
+ self.streamline()
+ #~ self.saveAsList = True
+ for e in self.ignoreExprs:
+ e.streamline()
+ if not self.keepTabs:
+ instring = instring.expandtabs()
+ try:
+ loc, tokens = self._parse( instring, 0 )
+ if parseAll:
+ loc = self.preParse( instring, loc )
+ se = Empty() + StringEnd()
+ se._parse( instring, loc )
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+ else:
+ return tokens
+
+ def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ):
+ """
+ Scan the input string for expression matches. Each match will return the
+ matching tokens, start location, and end location. May be called with optional
+ C{maxMatches} argument, to clip scanning after 'n' matches are found. If
+ C{overlap} is specified, then overlapping matches will be reported.
+
+ Note that the start and end locations are reported relative to the string
+ being parsed. See L{I{parseString}<parseString>} for more information on parsing
+ strings with embedded tabs.
+
+ Example::
+ source = "sldjf123lsdjjkf345sldkjf879lkjsfd987"
+ print(source)
+ for tokens,start,end in Word(alphas).scanString(source):
+ print(' '*start + '^'*(end-start))
+ print(' '*start + tokens[0])
+
+ prints::
+
+ sldjf123lsdjjkf345sldkjf879lkjsfd987
+ ^^^^^
+ sldjf
+ ^^^^^^^
+ lsdjjkf
+ ^^^^^^
+ sldkjf
+ ^^^^^^
+ lkjsfd
+ """
+ if not self.streamlined:
+ self.streamline()
+ for e in self.ignoreExprs:
+ e.streamline()
+
+ if not self.keepTabs:
+ instring = _ustr(instring).expandtabs()
+ instrlen = len(instring)
+ loc = 0
+ preparseFn = self.preParse
+ parseFn = self._parse
+ ParserElement.resetCache()
+ matches = 0
+ try:
+ while loc <= instrlen and matches < maxMatches:
+ try:
+ preloc = preparseFn( instring, loc )
+ nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
+ except ParseException:
+ loc = preloc+1
+ else:
+ if nextLoc > loc:
+ matches += 1
+ yield tokens, preloc, nextLoc
+ if overlap:
+ nextloc = preparseFn( instring, loc )
+ if nextloc > loc:
+ loc = nextLoc
+ else:
+ loc += 1
+ else:
+ loc = nextLoc
+ else:
+ loc = preloc+1
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def transformString( self, instring ):
+ """
+ Extension to C{L{scanString}}, to modify matching text with modified tokens that may
+ be returned from a parse action. To use C{transformString}, define a grammar and
+ attach a parse action to it that modifies the returned token list.
+ Invoking C{transformString()} on a target string will then scan for matches,
+ and replace the matched text patterns according to the logic in the parse
+ action. C{transformString()} returns the resulting transformed string.
+
+ Example::
+ wd = Word(alphas)
+ wd.setParseAction(lambda toks: toks[0].title())
+
+ print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york."))
+ Prints::
+ Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York.
+ """
+ out = []
+ lastE = 0
+ # force preservation of <TAB>s, to minimize unwanted transformation of string, and to
+ # keep string locs straight between transformString and scanString
+ self.keepTabs = True
+ try:
+ for t,s,e in self.scanString( instring ):
+ out.append( instring[lastE:s] )
+ if t:
+ if isinstance(t,ParseResults):
+ out += t.asList()
+ elif isinstance(t,list):
+ out += t
+ else:
+ out.append(t)
+ lastE = e
+ out.append(instring[lastE:])
+ out = [o for o in out if o]
+ return "".join(map(_ustr,_flatten(out)))
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def searchString( self, instring, maxMatches=_MAX_INT ):
+ """
+ Another extension to C{L{scanString}}, simplifying the access to the tokens found
+ to match the given parse expression. May be called with optional
+ C{maxMatches} argument, to clip searching after 'n' matches are found.
+
+ Example::
+ # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters
+ cap_word = Word(alphas.upper(), alphas.lower())
+
+ print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))
+
+ # the sum() builtin can be used to merge results into a single ParseResults object
+ print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")))
+ prints::
+ [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']]
+ ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity']
+ """
+ try:
+ return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False):
+ """
+ Generator method to split a string using the given expression as a separator.
+ May be called with optional C{maxsplit} argument, to limit the number of splits;
+ and the optional C{includeSeparators} argument (default=C{False}), if the separating
+ matching text should be included in the split results.
+
+ Example::
+ punc = oneOf(list(".,;:/-!?"))
+ print(list(punc.split("This, this?, this sentence, is badly punctuated!")))
+ prints::
+ ['This', ' this', '', ' this sentence', ' is badly punctuated', '']
+ """
+ splits = 0
+ last = 0
+ for t,s,e in self.scanString(instring, maxMatches=maxsplit):
+ yield instring[last:s]
+ if includeSeparators:
+ yield t[0]
+ last = e
+ yield instring[last:]
+
+ def __add__(self, other ):
+ """
+ Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement
+ converts them to L{Literal}s by default.
+
+ Example::
+ greet = Word(alphas) + "," + Word(alphas) + "!"
+ hello = "Hello, World!"
+ print (hello, "->", greet.parseString(hello))
+ Prints::
+ Hello, World! -> ['Hello', ',', 'World', '!']
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return And( [ self, other ] )
+
+ def __radd__(self, other ):
+ """
+ Implementation of + operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other + self
+
+ def __sub__(self, other):
+ """
+ Implementation of - operator, returns C{L{And}} with error stop
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return self + And._ErrorStop() + other
+
+ def __rsub__(self, other ):
+ """
+ Implementation of - operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other - self
+
+ def __mul__(self,other):
+ """
+ Implementation of * operator, allows use of C{expr * 3} in place of
+ C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer
+ tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples
+ may also include C{None} as in:
+ - C{expr*(n,None)} or C{expr*(n,)} is equivalent
+ to C{expr*n + L{ZeroOrMore}(expr)}
+ (read as "at least n instances of C{expr}")
+ - C{expr*(None,n)} is equivalent to C{expr*(0,n)}
+ (read as "0 to n instances of C{expr}")
+ - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)}
+ - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)}
+
+ Note that C{expr*(None,n)} does not raise an exception if
+ more than n exprs exist in the input stream; that is,
+ C{expr*(None,n)} does not enforce a maximum number of expr
+ occurrences. If this behavior is desired, then write
+ C{expr*(None,n) + ~expr}
+ """
+ if isinstance(other,int):
+ minElements, optElements = other,0
+ elif isinstance(other,tuple):
+ other = (other + (None, None))[:2]
+ if other[0] is None:
+ other = (0, other[1])
+ if isinstance(other[0],int) and other[1] is None:
+ if other[0] == 0:
+ return ZeroOrMore(self)
+ if other[0] == 1:
+ return OneOrMore(self)
+ else:
+ return self*other[0] + ZeroOrMore(self)
+ elif isinstance(other[0],int) and isinstance(other[1],int):
+ minElements, optElements = other
+ optElements -= minElements
+ else:
+ raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1]))
+ else:
+ raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other))
+
+ if minElements < 0:
+ raise ValueError("cannot multiply ParserElement by negative value")
+ if optElements < 0:
+ raise ValueError("second tuple value must be greater or equal to first tuple value")
+ if minElements == optElements == 0:
+ raise ValueError("cannot multiply ParserElement by 0 or (0,0)")
+
+ if (optElements):
+ def makeOptionalList(n):
+ if n>1:
+ return Optional(self + makeOptionalList(n-1))
+ else:
+ return Optional(self)
+ if minElements:
+ if minElements == 1:
+ ret = self + makeOptionalList(optElements)
+ else:
+ ret = And([self]*minElements) + makeOptionalList(optElements)
+ else:
+ ret = makeOptionalList(optElements)
+ else:
+ if minElements == 1:
+ ret = self
+ else:
+ ret = And([self]*minElements)
+ return ret
+
+ def __rmul__(self, other):
+ return self.__mul__(other)
+
+ def __or__(self, other ):
+ """
+ Implementation of | operator - returns C{L{MatchFirst}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return MatchFirst( [ self, other ] )
+
+ def __ror__(self, other ):
+ """
+ Implementation of | operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other | self
+
+ def __xor__(self, other ):
+ """
+ Implementation of ^ operator - returns C{L{Or}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return Or( [ self, other ] )
+
+ def __rxor__(self, other ):
+ """
+ Implementation of ^ operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other ^ self
+
+ def __and__(self, other ):
+ """
+ Implementation of & operator - returns C{L{Each}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return Each( [ self, other ] )
+
+ def __rand__(self, other ):
+ """
+ Implementation of & operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other & self
+
+ def __invert__( self ):
+ """
+ Implementation of ~ operator - returns C{L{NotAny}}
+ """
+ return NotAny( self )
+
+ def __call__(self, name=None):
+ """
+ Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}.
+
+ If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be
+ passed as C{True}.
+
+ If C{name} is omitted, same as calling C{L{copy}}.
+
+ Example::
+ # these are equivalent
+ userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno")
+ userdata = Word(alphas)("name") + Word(nums+"-")("socsecno")
+ """
+ if name is not None:
+ return self.setResultsName(name)
+ else:
+ return self.copy()
+
+ def suppress( self ):
+ """
+ Suppresses the output of this C{ParserElement}; useful to keep punctuation from
+ cluttering up returned output.
+ """
+ return Suppress( self )
+
+ def leaveWhitespace( self ):
+ """
+ Disables the skipping of whitespace before matching the characters in the
+ C{ParserElement}'s defined pattern. This is normally only used internally by
+ the pyparsing module, but may be needed in some whitespace-sensitive grammars.
+ """
+ self.skipWhitespace = False
+ return self
+
+ def setWhitespaceChars( self, chars ):
+ """
+ Overrides the default whitespace chars
+ """
+ self.skipWhitespace = True
+ self.whiteChars = chars
+ self.copyDefaultWhiteChars = False
+ return self
+
+ def parseWithTabs( self ):
+ """
+ Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string.
+ Must be called before C{parseString} when the input grammar contains elements that
+ match C{<TAB>} characters.
+ """
+ self.keepTabs = True
+ return self
+
+ def ignore( self, other ):
+ """
+ Define expression to be ignored (e.g., comments) while doing pattern
+ matching; may be called repeatedly, to define multiple comment or other
+ ignorable patterns.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+ patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj']
+
+ patt.ignore(cStyleComment)
+ patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd']
+ """
+ if isinstance(other, basestring):
+ other = Suppress(other)
+
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ self.ignoreExprs.append(other)
+ else:
+ self.ignoreExprs.append( Suppress( other.copy() ) )
+ return self
+
+ def setDebugActions( self, startAction, successAction, exceptionAction ):
+ """
+ Enable display of debugging messages while doing pattern matching.
+ """
+ self.debugActions = (startAction or _defaultStartDebugAction,
+ successAction or _defaultSuccessDebugAction,
+ exceptionAction or _defaultExceptionDebugAction)
+ self.debug = True
+ return self
+
+ def setDebug( self, flag=True ):
+ """
+ Enable display of debugging messages while doing pattern matching.
+ Set C{flag} to True to enable, False to disable.
+
+ Example::
+ wd = Word(alphas).setName("alphaword")
+ integer = Word(nums).setName("numword")
+ term = wd | integer
+
+ # turn on debugging for wd
+ wd.setDebug()
+
+ OneOrMore(term).parseString("abc 123 xyz 890")
+
+ prints::
+ Match alphaword at loc 0(1,1)
+ Matched alphaword -> ['abc']
+ Match alphaword at loc 3(1,4)
+ Exception raised:Expected alphaword (at char 4), (line:1, col:5)
+ Match alphaword at loc 7(1,8)
+ Matched alphaword -> ['xyz']
+ Match alphaword at loc 11(1,12)
+ Exception raised:Expected alphaword (at char 12), (line:1, col:13)
+ Match alphaword at loc 15(1,16)
+ Exception raised:Expected alphaword (at char 15), (line:1, col:16)
+
+ The output shown is that produced by the default debug actions - custom debug actions can be
+ specified using L{setDebugActions}. Prior to attempting
+ to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"}
+ is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"}
+ message is shown. Also note the use of L{setName} to assign a human-readable name to the expression,
+ which makes debugging and exception messages easier to understand - for instance, the default
+ name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}.
+ """
+ if flag:
+ self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction )
+ else:
+ self.debug = False
+ return self
+
+ def __str__( self ):
+ return self.name
+
+ def __repr__( self ):
+ return _ustr(self)
+
+ def streamline( self ):
+ self.streamlined = True
+ self.strRepr = None
+ return self
+
+ def checkRecursion( self, parseElementList ):
+ pass
+
+ def validate( self, validateTrace=[] ):
+ """
+ Check defined expressions for valid structure, check for infinite recursive definitions.
+ """
+ self.checkRecursion( [] )
+
+ def parseFile( self, file_or_filename, parseAll=False ):
+ """
+ Execute the parse expression on the given file or filename.
+ If a filename is specified (instead of a file object),
+ the entire file is opened, read, and closed before parsing.
+ """
+ try:
+ file_contents = file_or_filename.read()
+ except AttributeError:
+ with open(file_or_filename, "r") as f:
+ file_contents = f.read()
+ try:
+ return self.parseString(file_contents, parseAll)
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def __eq__(self,other):
+ if isinstance(other, ParserElement):
+ return self is other or vars(self) == vars(other)
+ elif isinstance(other, basestring):
+ return self.matches(other)
+ else:
+ return super(ParserElement,self)==other
+
+ def __ne__(self,other):
+ return not (self == other)
+
+ def __hash__(self):
+ return hash(id(self))
+
+ def __req__(self,other):
+ return self == other
+
+ def __rne__(self,other):
+ return not (self == other)
+
+ def matches(self, testString, parseAll=True):
+ """
+ Method for quick testing of a parser against a test string. Good for simple
+ inline microtests of sub expressions while building up larger parser.
+
+ Parameters:
+ - testString - to test against this expression for a match
+ - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
+
+ Example::
+ expr = Word(nums)
+ assert expr.matches("100")
+ """
+ try:
+ self.parseString(_ustr(testString), parseAll=parseAll)
+ return True
+ except ParseBaseException:
+ return False
+
+ def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False):
+ """
+ Execute the parse expression on a series of test strings, showing each
+ test, the parsed results or where the parse failed. Quick and easy way to
+ run a parse expression against a list of sample strings.
+
+ Parameters:
+ - tests - a list of separate test strings, or a multiline string of test strings
+ - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
+ - comment - (default=C{'#'}) - expression for indicating embedded comments in the test
+ string; pass None to disable comment filtering
+ - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline;
+ if False, only dump nested list
+ - printResults - (default=C{True}) prints test output to stdout
+ - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing
+
+ Returns: a (success, results) tuple, where success indicates that all tests succeeded
+ (or failed if C{failureTests} is True), and the results contain a list of lines of each
+ test's output
+
+ Example::
+ number_expr = pyparsing_common.number.copy()
+
+ result = number_expr.runTests('''
+ # unsigned integer
+ 100
+ # negative integer
+ -100
+ # float with scientific notation
+ 6.02e23
+ # integer with scientific notation
+ 1e-12
+ ''')
+ print("Success" if result[0] else "Failed!")
+
+ result = number_expr.runTests('''
+ # stray character
+ 100Z
+ # missing leading digit before '.'
+ -.100
+ # too many '.'
+ 3.14.159
+ ''', failureTests=True)
+ print("Success" if result[0] else "Failed!")
+ prints::
+ # unsigned integer
+ 100
+ [100]
+
+ # negative integer
+ -100
+ [-100]
+
+ # float with scientific notation
+ 6.02e23
+ [6.02e+23]
+
+ # integer with scientific notation
+ 1e-12
+ [1e-12]
+
+ Success
+
+ # stray character
+ 100Z
+ ^
+ FAIL: Expected end of text (at char 3), (line:1, col:4)
+
+ # missing leading digit before '.'
+ -.100
+ ^
+ FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1)
+
+ # too many '.'
+ 3.14.159
+ ^
+ FAIL: Expected end of text (at char 4), (line:1, col:5)
+
+ Success
+
+ Each test string must be on a single line. If you want to test a string that spans multiple
+ lines, create a test like this::
+
+ expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines")
+
+ (Note that this is a raw string literal, you must include the leading 'r'.)
+ """
+ if isinstance(tests, basestring):
+ tests = list(map(str.strip, tests.rstrip().splitlines()))
+ if isinstance(comment, basestring):
+ comment = Literal(comment)
+ allResults = []
+ comments = []
+ success = True
+ for t in tests:
+ if comment is not None and comment.matches(t, False) or comments and not t:
+ comments.append(t)
+ continue
+ if not t:
+ continue
+ out = ['\n'.join(comments), t]
+ comments = []
+ try:
+ t = t.replace(r'\n','\n')
+ result = self.parseString(t, parseAll=parseAll)
+ out.append(result.dump(full=fullDump))
+ success = success and not failureTests
+ except ParseBaseException as pe:
+ fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else ""
+ if '\n' in t:
+ out.append(line(pe.loc, t))
+ out.append(' '*(col(pe.loc,t)-1) + '^' + fatal)
+ else:
+ out.append(' '*pe.loc + '^' + fatal)
+ out.append("FAIL: " + str(pe))
+ success = success and failureTests
+ result = pe
+ except Exception as exc:
+ out.append("FAIL-EXCEPTION: " + str(exc))
+ success = success and failureTests
+ result = exc
+
+ if printResults:
+ if fullDump:
+ out.append('')
+ print('\n'.join(out))
+
+ allResults.append((t, result))
+
+ return success, allResults
+
+
+class Token(ParserElement):
+ """
+ Abstract C{ParserElement} subclass, for defining atomic matching patterns.
+ """
+ def __init__( self ):
+ super(Token,self).__init__( savelist=False )
+
+
+class Empty(Token):
+ """
+ An empty token, will always match.
+ """
+ def __init__( self ):
+ super(Empty,self).__init__()
+ self.name = "Empty"
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+
+
+class NoMatch(Token):
+ """
+ A token that will never match.
+ """
+ def __init__( self ):
+ super(NoMatch,self).__init__()
+ self.name = "NoMatch"
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+ self.errmsg = "Unmatchable token"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ raise ParseException(instring, loc, self.errmsg, self)
+
+
+class Literal(Token):
+ """
+ Token to exactly match a specified string.
+
+ Example::
+ Literal('blah').parseString('blah') # -> ['blah']
+ Literal('blah').parseString('blahfooblah') # -> ['blah']
+ Literal('blah').parseString('bla') # -> Exception: Expected "blah"
+
+ For case-insensitive matching, use L{CaselessLiteral}.
+
+ For keyword matching (force word break before and after the matched string),
+ use L{Keyword} or L{CaselessKeyword}.
+ """
+ def __init__( self, matchString ):
+ super(Literal,self).__init__()
+ self.match = matchString
+ self.matchLen = len(matchString)
+ try:
+ self.firstMatchChar = matchString[0]
+ except IndexError:
+ warnings.warn("null string passed to Literal; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+ self.__class__ = Empty
+ self.name = '"%s"' % _ustr(self.match)
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = False
+ self.mayIndexError = False
+
+ # Performance tuning: this routine gets called a *lot*
+ # if this is a single character match string and the first character matches,
+ # short-circuit as quickly as possible, and avoid calling startswith
+ #~ @profile
+ def parseImpl( self, instring, loc, doActions=True ):
+ if (instring[loc] == self.firstMatchChar and
+ (self.matchLen==1 or instring.startswith(self.match,loc)) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+_L = Literal
+ParserElement._literalStringClass = Literal
+
+class Keyword(Token):
+ """
+ Token to exactly match a specified string as a keyword, that is, it must be
+ immediately followed by a non-keyword character. Compare with C{L{Literal}}:
+ - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}.
+ - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'}
+ Accepts two optional constructor arguments in addition to the keyword string:
+ - C{identChars} is a string of characters that would be valid identifier characters,
+ defaulting to all alphanumerics + "_" and "$"
+ - C{caseless} allows case-insensitive matching, default is C{False}.
+
+ Example::
+ Keyword("start").parseString("start") # -> ['start']
+ Keyword("start").parseString("starting") # -> Exception
+
+ For case-insensitive matching, use L{CaselessKeyword}.
+ """
+ DEFAULT_KEYWORD_CHARS = alphanums+"_$"
+
+ def __init__( self, matchString, identChars=None, caseless=False ):
+ super(Keyword,self).__init__()
+ if identChars is None:
+ identChars = Keyword.DEFAULT_KEYWORD_CHARS
+ self.match = matchString
+ self.matchLen = len(matchString)
+ try:
+ self.firstMatchChar = matchString[0]
+ except IndexError:
+ warnings.warn("null string passed to Keyword; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+ self.name = '"%s"' % self.match
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = False
+ self.mayIndexError = False
+ self.caseless = caseless
+ if caseless:
+ self.caselessmatch = matchString.upper()
+ identChars = identChars.upper()
+ self.identChars = set(identChars)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.caseless:
+ if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and
+ (loc == 0 or instring[loc-1].upper() not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ else:
+ if (instring[loc] == self.firstMatchChar and
+ (self.matchLen==1 or instring.startswith(self.match,loc)) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and
+ (loc == 0 or instring[loc-1] not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ def copy(self):
+ c = super(Keyword,self).copy()
+ c.identChars = Keyword.DEFAULT_KEYWORD_CHARS
+ return c
+
+ @staticmethod
+ def setDefaultKeywordChars( chars ):
+ """Overrides the default Keyword chars
+ """
+ Keyword.DEFAULT_KEYWORD_CHARS = chars
+
+class CaselessLiteral(Literal):
+ """
+ Token to match a specified string, ignoring case of letters.
+ Note: the matched results will always be in the case of the given
+ match string, NOT the case of the input text.
+
+ Example::
+ OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD']
+
+ (Contrast with example for L{CaselessKeyword}.)
+ """
+ def __init__( self, matchString ):
+ super(CaselessLiteral,self).__init__( matchString.upper() )
+ # Preserve the defining literal.
+ self.returnString = matchString
+ self.name = "'%s'" % self.returnString
+ self.errmsg = "Expected " + self.name
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if instring[ loc:loc+self.matchLen ].upper() == self.match:
+ return loc+self.matchLen, self.returnString
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class CaselessKeyword(Keyword):
+ """
+ Caseless version of L{Keyword}.
+
+ Example::
+ OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD']
+
+ (Contrast with example for L{CaselessLiteral}.)
+ """
+ def __init__( self, matchString, identChars=None ):
+ super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True )
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class CloseMatch(Token):
+ """
+ A variation on L{Literal} which matches "close" matches, that is,
+ strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters:
+ - C{match_string} - string to be matched
+ - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match
+
+ The results from a successful parse will contain the matched text from the input string and the following named results:
+ - C{mismatches} - a list of the positions within the match_string where mismatches were found
+ - C{original} - the original match_string used to compare against the input string
+
+ If C{mismatches} is an empty list, then the match was an exact match.
+
+ Example::
+ patt = CloseMatch("ATCATCGAATGGA")
+ patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']})
+ patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1)
+
+ # exact match
+ patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']})
+
+ # close match allowing up to 2 mismatches
+ patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2)
+ patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']})
+ """
+ def __init__(self, match_string, maxMismatches=1):
+ super(CloseMatch,self).__init__()
+ self.name = match_string
+ self.match_string = match_string
+ self.maxMismatches = maxMismatches
+ self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches)
+ self.mayIndexError = False
+ self.mayReturnEmpty = False
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ start = loc
+ instrlen = len(instring)
+ maxloc = start + len(self.match_string)
+
+ if maxloc <= instrlen:
+ match_string = self.match_string
+ match_stringloc = 0
+ mismatches = []
+ maxMismatches = self.maxMismatches
+
+ for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)):
+ src,mat = s_m
+ if src != mat:
+ mismatches.append(match_stringloc)
+ if len(mismatches) > maxMismatches:
+ break
+ else:
+ loc = match_stringloc + 1
+ results = ParseResults([instring[start:loc]])
+ results['original'] = self.match_string
+ results['mismatches'] = mismatches
+ return loc, results
+
+ raise ParseException(instring, loc, self.errmsg, self)
+
+
+class Word(Token):
+ """
+ Token for matching words composed of allowed character sets.
+ Defined with string containing all allowed initial characters,
+ an optional string containing allowed body characters (if omitted,
+ defaults to the initial character set), and an optional minimum,
+ maximum, and/or exact length. The default value for C{min} is 1 (a
+ minimum value < 1 is not valid); the default values for C{max} and C{exact}
+ are 0, meaning no maximum or exact length restriction. An optional
+ C{excludeChars} parameter can list characters that might be found in
+ the input C{bodyChars} string; useful to define a word of all printables
+ except for one or two characters, for instance.
+
+ L{srange} is useful for defining custom character set strings for defining
+ C{Word} expressions, using range notation from regular expression character sets.
+
+ A common mistake is to use C{Word} to match a specific literal string, as in
+ C{Word("Address")}. Remember that C{Word} uses the string argument to define
+ I{sets} of matchable characters. This expression would match "Add", "AAA",
+ "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'.
+ To match an exact literal string, use L{Literal} or L{Keyword}.
+
+ pyparsing includes helper strings for building Words:
+ - L{alphas}
+ - L{nums}
+ - L{alphanums}
+ - L{hexnums}
+ - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.)
+ - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.)
+ - L{printables} (any non-whitespace character)
+
+ Example::
+ # a word composed of digits
+ integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9"))
+
+ # a word with a leading capital, and zero or more lowercase
+ capital_word = Word(alphas.upper(), alphas.lower())
+
+ # hostnames are alphanumeric, with leading alpha, and '-'
+ hostname = Word(alphas, alphanums+'-')
+
+ # roman numeral (not a strict parser, accepts invalid mix of characters)
+ roman = Word("IVXLCDM")
+
+ # any string of non-whitespace characters, except for ','
+ csv_value = Word(printables, excludeChars=",")
+ """
+ def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ):
+ super(Word,self).__init__()
+ if excludeChars:
+ initChars = ''.join(c for c in initChars if c not in excludeChars)
+ if bodyChars:
+ bodyChars = ''.join(c for c in bodyChars if c not in excludeChars)
+ self.initCharsOrig = initChars
+ self.initChars = set(initChars)
+ if bodyChars :
+ self.bodyCharsOrig = bodyChars
+ self.bodyChars = set(bodyChars)
+ else:
+ self.bodyCharsOrig = initChars
+ self.bodyChars = set(initChars)
+
+ self.maxSpecified = max > 0
+
+ if min < 1:
+ raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted")
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.asKeyword = asKeyword
+
+ if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0):
+ if self.bodyCharsOrig == self.initCharsOrig:
+ self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig)
+ elif len(self.initCharsOrig) == 1:
+ self.reString = "%s[%s]*" % \
+ (re.escape(self.initCharsOrig),
+ _escapeRegexRangeChars(self.bodyCharsOrig),)
+ else:
+ self.reString = "[%s][%s]*" % \
+ (_escapeRegexRangeChars(self.initCharsOrig),
+ _escapeRegexRangeChars(self.bodyCharsOrig),)
+ if self.asKeyword:
+ self.reString = r"\b"+self.reString+r"\b"
+ try:
+ self.re = re.compile( self.reString )
+ except Exception:
+ self.re = None
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.re:
+ result = self.re.match(instring,loc)
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ return loc, result.group()
+
+ if not(instring[ loc ] in self.initChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ start = loc
+ loc += 1
+ instrlen = len(instring)
+ bodychars = self.bodyChars
+ maxloc = start + self.maxLen
+ maxloc = min( maxloc, instrlen )
+ while loc < maxloc and instring[loc] in bodychars:
+ loc += 1
+
+ throwException = False
+ if loc - start < self.minLen:
+ throwException = True
+ if self.maxSpecified and loc < instrlen and instring[loc] in bodychars:
+ throwException = True
+ if self.asKeyword:
+ if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars):
+ throwException = True
+
+ if throwException:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+ def __str__( self ):
+ try:
+ return super(Word,self).__str__()
+ except Exception:
+ pass
+
+
+ if self.strRepr is None:
+
+ def charsAsStr(s):
+ if len(s)>4:
+ return s[:4]+"..."
+ else:
+ return s
+
+ if ( self.initCharsOrig != self.bodyCharsOrig ):
+ self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) )
+ else:
+ self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig)
+
+ return self.strRepr
+
+
+class Regex(Token):
+ r"""
+ Token for matching strings that match a given regular expression.
+ Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
+ If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as
+ named parse results.
+
+ Example::
+ realnum = Regex(r"[+-]?\d+\.\d*")
+ date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)')
+ # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
+ roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})")
+ """
+ compiledREtype = type(re.compile("[A-Z]"))
+ def __init__( self, pattern, flags=0):
+ """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags."""
+ super(Regex,self).__init__()
+
+ if isinstance(pattern, basestring):
+ if not pattern:
+ warnings.warn("null string passed to Regex; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+
+ self.pattern = pattern
+ self.flags = flags
+
+ try:
+ self.re = re.compile(self.pattern, self.flags)
+ self.reString = self.pattern
+ except sre_constants.error:
+ warnings.warn("invalid pattern (%s) passed to Regex" % pattern,
+ SyntaxWarning, stacklevel=2)
+ raise
+
+ elif isinstance(pattern, Regex.compiledREtype):
+ self.re = pattern
+ self.pattern = \
+ self.reString = str(pattern)
+ self.flags = flags
+
+ else:
+ raise ValueError("Regex may only be constructed with a string or a compiled RE object")
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ result = self.re.match(instring,loc)
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ d = result.groupdict()
+ ret = ParseResults(result.group())
+ if d:
+ for k in d:
+ ret[k] = d[k]
+ return loc,ret
+
+ def __str__( self ):
+ try:
+ return super(Regex,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "Re:(%s)" % repr(self.pattern)
+
+ return self.strRepr
+
+
+class QuotedString(Token):
+ r"""
+ Token for matching strings that are delimited by quoting characters.
+
+ Defined with the following parameters:
+ - quoteChar - string of one or more characters defining the quote delimiting string
+ - escChar - character to escape quotes, typically backslash (default=C{None})
+ - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None})
+ - multiline - boolean indicating whether quotes can span multiple lines (default=C{False})
+ - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True})
+ - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar)
+ - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True})
+
+ Example::
+ qs = QuotedString('"')
+ print(qs.searchString('lsjdf "This is the quote" sldjf'))
+ complex_qs = QuotedString('{{', endQuoteChar='}}')
+ print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf'))
+ sql_qs = QuotedString('"', escQuote='""')
+ print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf'))
+ prints::
+ [['This is the quote']]
+ [['This is the "quote"']]
+ [['This is the quote with "embedded" quotes']]
+ """
+ def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True):
+ super(QuotedString,self).__init__()
+
+ # remove white space from quote chars - wont work anyway
+ quoteChar = quoteChar.strip()
+ if not quoteChar:
+ warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
+ raise SyntaxError()
+
+ if endQuoteChar is None:
+ endQuoteChar = quoteChar
+ else:
+ endQuoteChar = endQuoteChar.strip()
+ if not endQuoteChar:
+ warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
+ raise SyntaxError()
+
+ self.quoteChar = quoteChar
+ self.quoteCharLen = len(quoteChar)
+ self.firstQuoteChar = quoteChar[0]
+ self.endQuoteChar = endQuoteChar
+ self.endQuoteCharLen = len(endQuoteChar)
+ self.escChar = escChar
+ self.escQuote = escQuote
+ self.unquoteResults = unquoteResults
+ self.convertWhitespaceEscapes = convertWhitespaceEscapes
+
+ if multiline:
+ self.flags = re.MULTILINE | re.DOTALL
+ self.pattern = r'%s(?:[^%s%s]' % \
+ ( re.escape(self.quoteChar),
+ _escapeRegexRangeChars(self.endQuoteChar[0]),
+ (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
+ else:
+ self.flags = 0
+ self.pattern = r'%s(?:[^%s\n\r%s]' % \
+ ( re.escape(self.quoteChar),
+ _escapeRegexRangeChars(self.endQuoteChar[0]),
+ (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
+ if len(self.endQuoteChar) > 1:
+ self.pattern += (
+ '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]),
+ _escapeRegexRangeChars(self.endQuoteChar[i]))
+ for i in range(len(self.endQuoteChar)-1,0,-1)) + ')'
+ )
+ if escQuote:
+ self.pattern += (r'|(?:%s)' % re.escape(escQuote))
+ if escChar:
+ self.pattern += (r'|(?:%s.)' % re.escape(escChar))
+ self.escCharReplacePattern = re.escape(self.escChar)+"(.)"
+ self.pattern += (r')*%s' % re.escape(self.endQuoteChar))
+
+ try:
+ self.re = re.compile(self.pattern, self.flags)
+ self.reString = self.pattern
+ except sre_constants.error:
+ warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern,
+ SyntaxWarning, stacklevel=2)
+ raise
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ ret = result.group()
+
+ if self.unquoteResults:
+
+ # strip off quotes
+ ret = ret[self.quoteCharLen:-self.endQuoteCharLen]
+
+ if isinstance(ret,basestring):
+ # replace escaped whitespace
+ if '\\' in ret and self.convertWhitespaceEscapes:
+ ws_map = {
+ r'\t' : '\t',
+ r'\n' : '\n',
+ r'\f' : '\f',
+ r'\r' : '\r',
+ }
+ for wslit,wschar in ws_map.items():
+ ret = ret.replace(wslit, wschar)
+
+ # replace escaped characters
+ if self.escChar:
+ ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret)
+
+ # replace escaped quotes
+ if self.escQuote:
+ ret = ret.replace(self.escQuote, self.endQuoteChar)
+
+ return loc, ret
+
+ def __str__( self ):
+ try:
+ return super(QuotedString,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar)
+
+ return self.strRepr
+
+
+class CharsNotIn(Token):
+ """
+ Token for matching words composed of characters I{not} in a given set (will
+ include whitespace in matched characters if not listed in the provided exclusion set - see example).
+ Defined with string containing all disallowed characters, and an optional
+ minimum, maximum, and/or exact length. The default value for C{min} is 1 (a
+ minimum value < 1 is not valid); the default values for C{max} and C{exact}
+ are 0, meaning no maximum or exact length restriction.
+
+ Example::
+ # define a comma-separated-value as anything that is not a ','
+ csv_value = CharsNotIn(',')
+ print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213"))
+ prints::
+ ['dkls', 'lsdkjf', 's12 34', '@!#', '213']
+ """
+ def __init__( self, notChars, min=1, max=0, exact=0 ):
+ super(CharsNotIn,self).__init__()
+ self.skipWhitespace = False
+ self.notChars = notChars
+
+ if min < 1:
+ raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted")
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = ( self.minLen == 0 )
+ self.mayIndexError = False
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if instring[loc] in self.notChars:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ start = loc
+ loc += 1
+ notchars = self.notChars
+ maxlen = min( start+self.maxLen, len(instring) )
+ while loc < maxlen and \
+ (instring[loc] not in notchars):
+ loc += 1
+
+ if loc - start < self.minLen:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+ def __str__( self ):
+ try:
+ return super(CharsNotIn, self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ if len(self.notChars) > 4:
+ self.strRepr = "!W:(%s...)" % self.notChars[:4]
+ else:
+ self.strRepr = "!W:(%s)" % self.notChars
+
+ return self.strRepr
+
+class White(Token):
+ """
+ Special matching class for matching whitespace. Normally, whitespace is ignored
+ by pyparsing grammars. This class is included when some whitespace structures
+ are significant. Define with a string containing the whitespace characters to be
+ matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments,
+ as defined for the C{L{Word}} class.
+ """
+ whiteStrs = {
+ " " : "<SPC>",
+ "\t": "<TAB>",
+ "\n": "<LF>",
+ "\r": "<CR>",
+ "\f": "<FF>",
+ }
+ def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0):
+ super(White,self).__init__()
+ self.matchWhite = ws
+ self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) )
+ #~ self.leaveWhitespace()
+ self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite))
+ self.mayReturnEmpty = True
+ self.errmsg = "Expected " + self.name
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if not(instring[ loc ] in self.matchWhite):
+ raise ParseException(instring, loc, self.errmsg, self)
+ start = loc
+ loc += 1
+ maxloc = start + self.maxLen
+ maxloc = min( maxloc, len(instring) )
+ while loc < maxloc and instring[loc] in self.matchWhite:
+ loc += 1
+
+ if loc - start < self.minLen:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+
+class _PositionToken(Token):
+ def __init__( self ):
+ super(_PositionToken,self).__init__()
+ self.name=self.__class__.__name__
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+
+class GoToColumn(_PositionToken):
+ """
+ Token to advance to a specific column of input text; useful for tabular report scraping.
+ """
+ def __init__( self, colno ):
+ super(GoToColumn,self).__init__()
+ self.col = colno
+
+ def preParse( self, instring, loc ):
+ if col(loc,instring) != self.col:
+ instrlen = len(instring)
+ if self.ignoreExprs:
+ loc = self._skipIgnorables( instring, loc )
+ while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col :
+ loc += 1
+ return loc
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ thiscol = col( loc, instring )
+ if thiscol > self.col:
+ raise ParseException( instring, loc, "Text not in expected column", self )
+ newloc = loc + self.col - thiscol
+ ret = instring[ loc: newloc ]
+ return newloc, ret
+
+
+class LineStart(_PositionToken):
+ """
+ Matches if current position is at the beginning of a line within the parse string
+
+ Example::
+
+ test = '''\
+ AAA this line
+ AAA and this line
+ AAA but not this one
+ B AAA and definitely not this one
+ '''
+
+ for t in (LineStart() + 'AAA' + restOfLine).searchString(test):
+ print(t)
+
+ Prints::
+ ['AAA', ' this line']
+ ['AAA', ' and this line']
+
+ """
+ def __init__( self ):
+ super(LineStart,self).__init__()
+ self.errmsg = "Expected start of line"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if col(loc, instring) == 1:
+ return loc, []
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class LineEnd(_PositionToken):
+ """
+ Matches if current position is at the end of a line within the parse string
+ """
+ def __init__( self ):
+ super(LineEnd,self).__init__()
+ self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") )
+ self.errmsg = "Expected end of line"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc<len(instring):
+ if instring[loc] == "\n":
+ return loc+1, "\n"
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+ elif loc == len(instring):
+ return loc+1, []
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class StringStart(_PositionToken):
+ """
+ Matches if current position is at the beginning of the parse string
+ """
+ def __init__( self ):
+ super(StringStart,self).__init__()
+ self.errmsg = "Expected start of text"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc != 0:
+ # see if entire string up to here is just whitespace and ignoreables
+ if loc != self.preParse( instring, 0 ):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+class StringEnd(_PositionToken):
+ """
+ Matches if current position is at the end of the parse string
+ """
+ def __init__( self ):
+ super(StringEnd,self).__init__()
+ self.errmsg = "Expected end of text"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc < len(instring):
+ raise ParseException(instring, loc, self.errmsg, self)
+ elif loc == len(instring):
+ return loc+1, []
+ elif loc > len(instring):
+ return loc, []
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class WordStart(_PositionToken):
+ """
+ Matches if the current position is at the beginning of a Word, and
+ is not preceded by any character in a given set of C{wordChars}
+ (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
+ use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of
+ the string being parsed, or at the beginning of a line.
+ """
+ def __init__(self, wordChars = printables):
+ super(WordStart,self).__init__()
+ self.wordChars = set(wordChars)
+ self.errmsg = "Not at the start of a word"
+
+ def parseImpl(self, instring, loc, doActions=True ):
+ if loc != 0:
+ if (instring[loc-1] in self.wordChars or
+ instring[loc] not in self.wordChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+class WordEnd(_PositionToken):
+ """
+ Matches if the current position is at the end of a Word, and
+ is not followed by any character in a given set of C{wordChars}
+ (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
+ use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of
+ the string being parsed, or at the end of a line.
+ """
+ def __init__(self, wordChars = printables):
+ super(WordEnd,self).__init__()
+ self.wordChars = set(wordChars)
+ self.skipWhitespace = False
+ self.errmsg = "Not at the end of a word"
+
+ def parseImpl(self, instring, loc, doActions=True ):
+ instrlen = len(instring)
+ if instrlen>0 and loc<instrlen:
+ if (instring[loc] in self.wordChars or
+ instring[loc-1] not in self.wordChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+
+class ParseExpression(ParserElement):
+ """
+ Abstract subclass of ParserElement, for combining and post-processing parsed tokens.
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(ParseExpression,self).__init__(savelist)
+ if isinstance( exprs, _generatorType ):
+ exprs = list(exprs)
+
+ if isinstance( exprs, basestring ):
+ self.exprs = [ ParserElement._literalStringClass( exprs ) ]
+ elif isinstance( exprs, Iterable ):
+ exprs = list(exprs)
+ # if sequence of strings provided, wrap with Literal
+ if all(isinstance(expr, basestring) for expr in exprs):
+ exprs = map(ParserElement._literalStringClass, exprs)
+ self.exprs = list(exprs)
+ else:
+ try:
+ self.exprs = list( exprs )
+ except TypeError:
+ self.exprs = [ exprs ]
+ self.callPreparse = False
+
+ def __getitem__( self, i ):
+ return self.exprs[i]
+
+ def append( self, other ):
+ self.exprs.append( other )
+ self.strRepr = None
+ return self
+
+ def leaveWhitespace( self ):
+ """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on
+ all contained expressions."""
+ self.skipWhitespace = False
+ self.exprs = [ e.copy() for e in self.exprs ]
+ for e in self.exprs:
+ e.leaveWhitespace()
+ return self
+
+ def ignore( self, other ):
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ super( ParseExpression, self).ignore( other )
+ for e in self.exprs:
+ e.ignore( self.ignoreExprs[-1] )
+ else:
+ super( ParseExpression, self).ignore( other )
+ for e in self.exprs:
+ e.ignore( self.ignoreExprs[-1] )
+ return self
+
+ def __str__( self ):
+ try:
+ return super(ParseExpression,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) )
+ return self.strRepr
+
+ def streamline( self ):
+ super(ParseExpression,self).streamline()
+
+ for e in self.exprs:
+ e.streamline()
+
+ # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d )
+ # but only if there are no parse actions or resultsNames on the nested And's
+ # (likewise for Or's and MatchFirst's)
+ if ( len(self.exprs) == 2 ):
+ other = self.exprs[0]
+ if ( isinstance( other, self.__class__ ) and
+ not(other.parseAction) and
+ other.resultsName is None and
+ not other.debug ):
+ self.exprs = other.exprs[:] + [ self.exprs[1] ]
+ self.strRepr = None
+ self.mayReturnEmpty |= other.mayReturnEmpty
+ self.mayIndexError |= other.mayIndexError
+
+ other = self.exprs[-1]
+ if ( isinstance( other, self.__class__ ) and
+ not(other.parseAction) and
+ other.resultsName is None and
+ not other.debug ):
+ self.exprs = self.exprs[:-1] + other.exprs[:]
+ self.strRepr = None
+ self.mayReturnEmpty |= other.mayReturnEmpty
+ self.mayIndexError |= other.mayIndexError
+
+ self.errmsg = "Expected " + _ustr(self)
+
+ return self
+
+ def setResultsName( self, name, listAllMatches=False ):
+ ret = super(ParseExpression,self).setResultsName(name,listAllMatches)
+ return ret
+
+ def validate( self, validateTrace=[] ):
+ tmp = validateTrace[:]+[self]
+ for e in self.exprs:
+ e.validate(tmp)
+ self.checkRecursion( [] )
+
+ def copy(self):
+ ret = super(ParseExpression,self).copy()
+ ret.exprs = [e.copy() for e in self.exprs]
+ return ret
+
+class And(ParseExpression):
+ """
+ Requires all given C{ParseExpression}s to be found in the given order.
+ Expressions may be separated by whitespace.
+ May be constructed using the C{'+'} operator.
+ May also be constructed using the C{'-'} operator, which will suppress backtracking.
+
+ Example::
+ integer = Word(nums)
+ name_expr = OneOrMore(Word(alphas))
+
+ expr = And([integer("id"),name_expr("name"),integer("age")])
+ # more easily written as:
+ expr = integer("id") + name_expr("name") + integer("age")
+ """
+
+ class _ErrorStop(Empty):
+ def __init__(self, *args, **kwargs):
+ super(And._ErrorStop,self).__init__(*args, **kwargs)
+ self.name = '-'
+ self.leaveWhitespace()
+
+ def __init__( self, exprs, savelist = True ):
+ super(And,self).__init__(exprs, savelist)
+ self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
+ self.setWhitespaceChars( self.exprs[0].whiteChars )
+ self.skipWhitespace = self.exprs[0].skipWhitespace
+ self.callPreparse = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ # pass False as last arg to _parse for first element, since we already
+ # pre-parsed the string as part of our And pre-parsing
+ loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
+ errorStop = False
+ for e in self.exprs[1:]:
+ if isinstance(e, And._ErrorStop):
+ errorStop = True
+ continue
+ if errorStop:
+ try:
+ loc, exprtokens = e._parse( instring, loc, doActions )
+ except ParseSyntaxException:
+ raise
+ except ParseBaseException as pe:
+ pe.__traceback__ = None
+ raise ParseSyntaxException._from_exception(pe)
+ except IndexError:
+ raise ParseSyntaxException(instring, len(instring), self.errmsg, self)
+ else:
+ loc, exprtokens = e._parse( instring, loc, doActions )
+ if exprtokens or exprtokens.haskeys():
+ resultlist += exprtokens
+ return loc, resultlist
+
+ def __iadd__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #And( [ self, other ] )
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+ if not e.mayReturnEmpty:
+ break
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+
+class Or(ParseExpression):
+ """
+ Requires that at least one C{ParseExpression} is found.
+ If two expressions match, the expression that matches the longest string will be used.
+ May be constructed using the C{'^'} operator.
+
+ Example::
+ # construct Or using '^' operator
+
+ number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums))
+ print(number.searchString("123 3.1416 789"))
+ prints::
+ [['123'], ['3.1416'], ['789']]
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(Or,self).__init__(exprs, savelist)
+ if self.exprs:
+ self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
+ else:
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ maxExcLoc = -1
+ maxException = None
+ matches = []
+ for e in self.exprs:
+ try:
+ loc2 = e.tryParse( instring, loc )
+ except ParseException as err:
+ err.__traceback__ = None
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+ except IndexError:
+ if len(instring) > maxExcLoc:
+ maxException = ParseException(instring,len(instring),e.errmsg,self)
+ maxExcLoc = len(instring)
+ else:
+ # save match among all matches, to retry longest to shortest
+ matches.append((loc2, e))
+
+ if matches:
+ matches.sort(key=lambda x: -x[0])
+ for _,e in matches:
+ try:
+ return e._parse( instring, loc, doActions )
+ except ParseException as err:
+ err.__traceback__ = None
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+
+ if maxException is not None:
+ maxException.msg = self.errmsg
+ raise maxException
+ else:
+ raise ParseException(instring, loc, "no defined alternatives to match", self)
+
+
+ def __ixor__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #Or( [ self, other ] )
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class MatchFirst(ParseExpression):
+ """
+ Requires that at least one C{ParseExpression} is found.
+ If two expressions match, the first one listed is the one that will match.
+ May be constructed using the C{'|'} operator.
+
+ Example::
+ # construct MatchFirst using '|' operator
+
+ # watch the order of expressions to match
+ number = Word(nums) | Combine(Word(nums) + '.' + Word(nums))
+ print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']]
+
+ # put more selective expression first
+ number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums)
+ print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']]
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(MatchFirst,self).__init__(exprs, savelist)
+ if self.exprs:
+ self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
+ else:
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ maxExcLoc = -1
+ maxException = None
+ for e in self.exprs:
+ try:
+ ret = e._parse( instring, loc, doActions )
+ return ret
+ except ParseException as err:
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+ except IndexError:
+ if len(instring) > maxExcLoc:
+ maxException = ParseException(instring,len(instring),e.errmsg,self)
+ maxExcLoc = len(instring)
+
+ # only got here if no expression matched, raise exception for match that made it the furthest
+ else:
+ if maxException is not None:
+ maxException.msg = self.errmsg
+ raise maxException
+ else:
+ raise ParseException(instring, loc, "no defined alternatives to match", self)
+
+ def __ior__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #MatchFirst( [ self, other ] )
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class Each(ParseExpression):
+ """
+ Requires all given C{ParseExpression}s to be found, but in any order.
+ Expressions may be separated by whitespace.
+ May be constructed using the C{'&'} operator.
+
+ Example::
+ color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN")
+ shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON")
+ integer = Word(nums)
+ shape_attr = "shape:" + shape_type("shape")
+ posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn")
+ color_attr = "color:" + color("color")
+ size_attr = "size:" + integer("size")
+
+ # use Each (using operator '&') to accept attributes in any order
+ # (shape and posn are required, color and size are optional)
+ shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr)
+
+ shape_spec.runTests('''
+ shape: SQUARE color: BLACK posn: 100, 120
+ shape: CIRCLE size: 50 color: BLUE posn: 50,80
+ color:GREEN size:20 shape:TRIANGLE posn:20,40
+ '''
+ )
+ prints::
+ shape: SQUARE color: BLACK posn: 100, 120
+ ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']]
+ - color: BLACK
+ - posn: ['100', ',', '120']
+ - x: 100
+ - y: 120
+ - shape: SQUARE
+
+
+ shape: CIRCLE size: 50 color: BLUE posn: 50,80
+ ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']]
+ - color: BLUE
+ - posn: ['50', ',', '80']
+ - x: 50
+ - y: 80
+ - shape: CIRCLE
+ - size: 50
+
+
+ color: GREEN size: 20 shape: TRIANGLE posn: 20,40
+ ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']]
+ - color: GREEN
+ - posn: ['20', ',', '40']
+ - x: 20
+ - y: 40
+ - shape: TRIANGLE
+ - size: 20
+ """
+ def __init__( self, exprs, savelist = True ):
+ super(Each,self).__init__(exprs, savelist)
+ self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
+ self.skipWhitespace = True
+ self.initExprGroups = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.initExprGroups:
+ self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional))
+ opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ]
+ opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)]
+ self.optionals = opt1 + opt2
+ self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ]
+ self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ]
+ self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ]
+ self.required += self.multirequired
+ self.initExprGroups = False
+ tmpLoc = loc
+ tmpReqd = self.required[:]
+ tmpOpt = self.optionals[:]
+ matchOrder = []
+
+ keepMatching = True
+ while keepMatching:
+ tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired
+ failed = []
+ for e in tmpExprs:
+ try:
+ tmpLoc = e.tryParse( instring, tmpLoc )
+ except ParseException:
+ failed.append(e)
+ else:
+ matchOrder.append(self.opt1map.get(id(e),e))
+ if e in tmpReqd:
+ tmpReqd.remove(e)
+ elif e in tmpOpt:
+ tmpOpt.remove(e)
+ if len(failed) == len(tmpExprs):
+ keepMatching = False
+
+ if tmpReqd:
+ missing = ", ".join(_ustr(e) for e in tmpReqd)
+ raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing )
+
+ # add any unmatched Optionals, in case they have default values defined
+ matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt]
+
+ resultlist = []
+ for e in matchOrder:
+ loc,results = e._parse(instring,loc,doActions)
+ resultlist.append(results)
+
+ finalResults = sum(resultlist, ParseResults([]))
+ return loc, finalResults
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class ParseElementEnhance(ParserElement):
+ """
+ Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens.
+ """
+ def __init__( self, expr, savelist=False ):
+ super(ParseElementEnhance,self).__init__(savelist)
+ if isinstance( expr, basestring ):
+ if issubclass(ParserElement._literalStringClass, Token):
+ expr = ParserElement._literalStringClass(expr)
+ else:
+ expr = ParserElement._literalStringClass(Literal(expr))
+ self.expr = expr
+ self.strRepr = None
+ if expr is not None:
+ self.mayIndexError = expr.mayIndexError
+ self.mayReturnEmpty = expr.mayReturnEmpty
+ self.setWhitespaceChars( expr.whiteChars )
+ self.skipWhitespace = expr.skipWhitespace
+ self.saveAsList = expr.saveAsList
+ self.callPreparse = expr.callPreparse
+ self.ignoreExprs.extend(expr.ignoreExprs)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.expr is not None:
+ return self.expr._parse( instring, loc, doActions, callPreParse=False )
+ else:
+ raise ParseException("",loc,self.errmsg,self)
+
+ def leaveWhitespace( self ):
+ self.skipWhitespace = False
+ self.expr = self.expr.copy()
+ if self.expr is not None:
+ self.expr.leaveWhitespace()
+ return self
+
+ def ignore( self, other ):
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ super( ParseElementEnhance, self).ignore( other )
+ if self.expr is not None:
+ self.expr.ignore( self.ignoreExprs[-1] )
+ else:
+ super( ParseElementEnhance, self).ignore( other )
+ if self.expr is not None:
+ self.expr.ignore( self.ignoreExprs[-1] )
+ return self
+
+ def streamline( self ):
+ super(ParseElementEnhance,self).streamline()
+ if self.expr is not None:
+ self.expr.streamline()
+ return self
+
+ def checkRecursion( self, parseElementList ):
+ if self in parseElementList:
+ raise RecursiveGrammarException( parseElementList+[self] )
+ subRecCheckList = parseElementList[:] + [ self ]
+ if self.expr is not None:
+ self.expr.checkRecursion( subRecCheckList )
+
+ def validate( self, validateTrace=[] ):
+ tmp = validateTrace[:]+[self]
+ if self.expr is not None:
+ self.expr.validate(tmp)
+ self.checkRecursion( [] )
+
+ def __str__( self ):
+ try:
+ return super(ParseElementEnhance,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None and self.expr is not None:
+ self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) )
+ return self.strRepr
+
+
+class FollowedBy(ParseElementEnhance):
+ """
+ Lookahead matching of the given parse expression. C{FollowedBy}
+ does I{not} advance the parsing position within the input string, it only
+ verifies that the specified parse expression matches at the current
+ position. C{FollowedBy} always returns a null token list.
+
+ Example::
+ # use FollowedBy to match a label only if it is followed by a ':'
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+
+ OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint()
+ prints::
+ [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']]
+ """
+ def __init__( self, expr ):
+ super(FollowedBy,self).__init__(expr)
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ self.expr.tryParse( instring, loc )
+ return loc, []
+
+
+class NotAny(ParseElementEnhance):
+ """
+ Lookahead to disallow matching with the given parse expression. C{NotAny}
+ does I{not} advance the parsing position within the input string, it only
+ verifies that the specified parse expression does I{not} match at the current
+ position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny}
+ always returns a null token list. May be constructed using the '~' operator.
+
+ Example::
+
+ """
+ def __init__( self, expr ):
+ super(NotAny,self).__init__(expr)
+ #~ self.leaveWhitespace()
+ self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs
+ self.mayReturnEmpty = True
+ self.errmsg = "Found unwanted token, "+_ustr(self.expr)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.expr.canParseNext(instring, loc):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "~{" + _ustr(self.expr) + "}"
+
+ return self.strRepr
+
+class _MultipleMatch(ParseElementEnhance):
+ def __init__( self, expr, stopOn=None):
+ super(_MultipleMatch, self).__init__(expr)
+ self.saveAsList = True
+ ender = stopOn
+ if isinstance(ender, basestring):
+ ender = ParserElement._literalStringClass(ender)
+ self.not_ender = ~ender if ender is not None else None
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ self_expr_parse = self.expr._parse
+ self_skip_ignorables = self._skipIgnorables
+ check_ender = self.not_ender is not None
+ if check_ender:
+ try_not_ender = self.not_ender.tryParse
+
+ # must be at least one (but first see if we are the stopOn sentinel;
+ # if so, fail)
+ if check_ender:
+ try_not_ender(instring, loc)
+ loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
+ try:
+ hasIgnoreExprs = (not not self.ignoreExprs)
+ while 1:
+ if check_ender:
+ try_not_ender(instring, loc)
+ if hasIgnoreExprs:
+ preloc = self_skip_ignorables( instring, loc )
+ else:
+ preloc = loc
+ loc, tmptokens = self_expr_parse( instring, preloc, doActions )
+ if tmptokens or tmptokens.haskeys():
+ tokens += tmptokens
+ except (ParseException,IndexError):
+ pass
+
+ return loc, tokens
+
+class OneOrMore(_MultipleMatch):
+ """
+ Repetition of one or more of the given expression.
+
+ Parameters:
+ - expr - expression that must match one or more times
+ - stopOn - (default=C{None}) - expression for a terminating sentinel
+ (only required if the sentinel would ordinarily match the repetition
+ expression)
+
+ Example::
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
+
+ text = "shape: SQUARE posn: upper left color: BLACK"
+ OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']]
+
+ # use stopOn attribute for OneOrMore to avoid reading label string as part of the data
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+ OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']]
+
+ # could also be written as
+ (attr_expr * (1,)).parseString(text).pprint()
+ """
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + _ustr(self.expr) + "}..."
+
+ return self.strRepr
+
+class ZeroOrMore(_MultipleMatch):
+ """
+ Optional repetition of zero or more of the given expression.
+
+ Parameters:
+ - expr - expression that must match zero or more times
+ - stopOn - (default=C{None}) - expression for a terminating sentinel
+ (only required if the sentinel would ordinarily match the repetition
+ expression)
+
+ Example: similar to L{OneOrMore}
+ """
+ def __init__( self, expr, stopOn=None):
+ super(ZeroOrMore,self).__init__(expr, stopOn=stopOn)
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ try:
+ return super(ZeroOrMore, self).parseImpl(instring, loc, doActions)
+ except (ParseException,IndexError):
+ return loc, []
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "[" + _ustr(self.expr) + "]..."
+
+ return self.strRepr
+
+class _NullToken(object):
+ def __bool__(self):
+ return False
+ __nonzero__ = __bool__
+ def __str__(self):
+ return ""
+
+_optionalNotMatched = _NullToken()
+class Optional(ParseElementEnhance):
+ """
+ Optional matching of the given expression.
+
+ Parameters:
+ - expr - expression that must match zero or more times
+ - default (optional) - value to be returned if the optional expression is not found.
+
+ Example::
+ # US postal code can be a 5-digit zip, plus optional 4-digit qualifier
+ zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4)))
+ zip.runTests('''
+ # traditional ZIP code
+ 12345
+
+ # ZIP+4 form
+ 12101-0001
+
+ # invalid ZIP
+ 98765-
+ ''')
+ prints::
+ # traditional ZIP code
+ 12345
+ ['12345']
+
+ # ZIP+4 form
+ 12101-0001
+ ['12101-0001']
+
+ # invalid ZIP
+ 98765-
+ ^
+ FAIL: Expected end of text (at char 5), (line:1, col:6)
+ """
+ def __init__( self, expr, default=_optionalNotMatched ):
+ super(Optional,self).__init__( expr, savelist=False )
+ self.saveAsList = self.expr.saveAsList
+ self.defaultValue = default
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ try:
+ loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
+ except (ParseException,IndexError):
+ if self.defaultValue is not _optionalNotMatched:
+ if self.expr.resultsName:
+ tokens = ParseResults([ self.defaultValue ])
+ tokens[self.expr.resultsName] = self.defaultValue
+ else:
+ tokens = [ self.defaultValue ]
+ else:
+ tokens = []
+ return loc, tokens
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "[" + _ustr(self.expr) + "]"
+
+ return self.strRepr
+
+class SkipTo(ParseElementEnhance):
+ """
+ Token for skipping over all undefined text until the matched expression is found.
+
+ Parameters:
+ - expr - target expression marking the end of the data to be skipped
+ - include - (default=C{False}) if True, the target expression is also parsed
+ (the skipped text and target expression are returned as a 2-element list).
+ - ignore - (default=C{None}) used to define grammars (typically quoted strings and
+ comments) that might contain false matches to the target expression
+ - failOn - (default=C{None}) define expressions that are not allowed to be
+ included in the skipped test; if found before the target expression is found,
+ the SkipTo is not a match
+
+ Example::
+ report = '''
+ Outstanding Issues Report - 1 Jan 2000
+
+ # | Severity | Description | Days Open
+ -----+----------+-------------------------------------------+-----------
+ 101 | Critical | Intermittent system crash | 6
+ 94 | Cosmetic | Spelling error on Login ('log|n') | 14
+ 79 | Minor | System slow when running too many reports | 47
+ '''
+ integer = Word(nums)
+ SEP = Suppress('|')
+ # use SkipTo to simply match everything up until the next SEP
+ # - ignore quoted strings, so that a '|' character inside a quoted string does not match
+ # - parse action will call token.strip() for each matched token, i.e., the description body
+ string_data = SkipTo(SEP, ignore=quotedString)
+ string_data.setParseAction(tokenMap(str.strip))
+ ticket_expr = (integer("issue_num") + SEP
+ + string_data("sev") + SEP
+ + string_data("desc") + SEP
+ + integer("days_open"))
+
+ for tkt in ticket_expr.searchString(report):
+ print tkt.dump()
+ prints::
+ ['101', 'Critical', 'Intermittent system crash', '6']
+ - days_open: 6
+ - desc: Intermittent system crash
+ - issue_num: 101
+ - sev: Critical
+ ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14']
+ - days_open: 14
+ - desc: Spelling error on Login ('log|n')
+ - issue_num: 94
+ - sev: Cosmetic
+ ['79', 'Minor', 'System slow when running too many reports', '47']
+ - days_open: 47
+ - desc: System slow when running too many reports
+ - issue_num: 79
+ - sev: Minor
+ """
+ def __init__( self, other, include=False, ignore=None, failOn=None ):
+ super( SkipTo, self ).__init__( other )
+ self.ignoreExpr = ignore
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+ self.includeMatch = include
+ self.asList = False
+ if isinstance(failOn, basestring):
+ self.failOn = ParserElement._literalStringClass(failOn)
+ else:
+ self.failOn = failOn
+ self.errmsg = "No match found for "+_ustr(self.expr)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ startloc = loc
+ instrlen = len(instring)
+ expr = self.expr
+ expr_parse = self.expr._parse
+ self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None
+ self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None
+
+ tmploc = loc
+ while tmploc <= instrlen:
+ if self_failOn_canParseNext is not None:
+ # break if failOn expression matches
+ if self_failOn_canParseNext(instring, tmploc):
+ break
+
+ if self_ignoreExpr_tryParse is not None:
+ # advance past ignore expressions
+ while 1:
+ try:
+ tmploc = self_ignoreExpr_tryParse(instring, tmploc)
+ except ParseBaseException:
+ break
+
+ try:
+ expr_parse(instring, tmploc, doActions=False, callPreParse=False)
+ except (ParseException, IndexError):
+ # no match, advance loc in string
+ tmploc += 1
+ else:
+ # matched skipto expr, done
+ break
+
+ else:
+ # ran off the end of the input string without matching skipto expr, fail
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ # build up return values
+ loc = tmploc
+ skiptext = instring[startloc:loc]
+ skipresult = ParseResults(skiptext)
+
+ if self.includeMatch:
+ loc, mat = expr_parse(instring,loc,doActions,callPreParse=False)
+ skipresult += mat
+
+ return loc, skipresult
+
+class Forward(ParseElementEnhance):
+ """
+ Forward declaration of an expression to be defined later -
+ used for recursive grammars, such as algebraic infix notation.
+ When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator.
+
+ Note: take care when assigning to C{Forward} not to overlook precedence of operators.
+ Specifically, '|' has a lower precedence than '<<', so that::
+ fwdExpr << a | b | c
+ will actually be evaluated as::
+ (fwdExpr << a) | b | c
+ thereby leaving b and c out as parseable alternatives. It is recommended that you
+ explicitly group the values inserted into the C{Forward}::
+ fwdExpr << (a | b | c)
+ Converting to use the '<<=' operator instead will avoid this problem.
+
+ See L{ParseResults.pprint} for an example of a recursive parser created using
+ C{Forward}.
+ """
+ def __init__( self, other=None ):
+ super(Forward,self).__init__( other, savelist=False )
+
+ def __lshift__( self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass(other)
+ self.expr = other
+ self.strRepr = None
+ self.mayIndexError = self.expr.mayIndexError
+ self.mayReturnEmpty = self.expr.mayReturnEmpty
+ self.setWhitespaceChars( self.expr.whiteChars )
+ self.skipWhitespace = self.expr.skipWhitespace
+ self.saveAsList = self.expr.saveAsList
+ self.ignoreExprs.extend(self.expr.ignoreExprs)
+ return self
+
+ def __ilshift__(self, other):
+ return self << other
+
+ def leaveWhitespace( self ):
+ self.skipWhitespace = False
+ return self
+
+ def streamline( self ):
+ if not self.streamlined:
+ self.streamlined = True
+ if self.expr is not None:
+ self.expr.streamline()
+ return self
+
+ def validate( self, validateTrace=[] ):
+ if self not in validateTrace:
+ tmp = validateTrace[:]+[self]
+ if self.expr is not None:
+ self.expr.validate(tmp)
+ self.checkRecursion([])
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+ return self.__class__.__name__ + ": ..."
+
+ # stubbed out for now - creates awful memory and perf issues
+ self._revertClass = self.__class__
+ self.__class__ = _ForwardNoRecurse
+ try:
+ if self.expr is not None:
+ retString = _ustr(self.expr)
+ else:
+ retString = "None"
+ finally:
+ self.__class__ = self._revertClass
+ return self.__class__.__name__ + ": " + retString
+
+ def copy(self):
+ if self.expr is not None:
+ return super(Forward,self).copy()
+ else:
+ ret = Forward()
+ ret <<= self
+ return ret
+
+class _ForwardNoRecurse(Forward):
+ def __str__( self ):
+ return "..."
+
+class TokenConverter(ParseElementEnhance):
+ """
+ Abstract subclass of C{ParseExpression}, for converting parsed results.
+ """
+ def __init__( self, expr, savelist=False ):
+ super(TokenConverter,self).__init__( expr )#, savelist )
+ self.saveAsList = False
+
+class Combine(TokenConverter):
+ """
+ Converter to concatenate all matching tokens to a single string.
+ By default, the matching patterns must also be contiguous in the input string;
+ this can be disabled by specifying C{'adjacent=False'} in the constructor.
+
+ Example::
+ real = Word(nums) + '.' + Word(nums)
+ print(real.parseString('3.1416')) # -> ['3', '.', '1416']
+ # will also erroneously match the following
+ print(real.parseString('3. 1416')) # -> ['3', '.', '1416']
+
+ real = Combine(Word(nums) + '.' + Word(nums))
+ print(real.parseString('3.1416')) # -> ['3.1416']
+ # no match when there are internal spaces
+ print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...)
+ """
+ def __init__( self, expr, joinString="", adjacent=True ):
+ super(Combine,self).__init__( expr )
+ # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself
+ if adjacent:
+ self.leaveWhitespace()
+ self.adjacent = adjacent
+ self.skipWhitespace = True
+ self.joinString = joinString
+ self.callPreparse = True
+
+ def ignore( self, other ):
+ if self.adjacent:
+ ParserElement.ignore(self, other)
+ else:
+ super( Combine, self).ignore( other )
+ return self
+
+ def postParse( self, instring, loc, tokenlist ):
+ retToks = tokenlist.copy()
+ del retToks[:]
+ retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults)
+
+ if self.resultsName and retToks.haskeys():
+ return [ retToks ]
+ else:
+ return retToks
+
+class Group(TokenConverter):
+ """
+ Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions.
+
+ Example::
+ ident = Word(alphas)
+ num = Word(nums)
+ term = ident | num
+ func = ident + Optional(delimitedList(term))
+ print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100']
+
+ func = ident + Group(Optional(delimitedList(term)))
+ print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']]
+ """
+ def __init__( self, expr ):
+ super(Group,self).__init__( expr )
+ self.saveAsList = True
+
+ def postParse( self, instring, loc, tokenlist ):
+ return [ tokenlist ]
+
+class Dict(TokenConverter):
+ """
+ Converter to return a repetitive expression as a list, but also as a dictionary.
+ Each element can also be referenced using the first token in the expression as its key.
+ Useful for tabular report scraping when the first column can be used as a item key.
+
+ Example::
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
+
+ text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
+ attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+
+ # print attributes as plain groups
+ print(OneOrMore(attr_expr).parseString(text).dump())
+
+ # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names
+ result = Dict(OneOrMore(Group(attr_expr))).parseString(text)
+ print(result.dump())
+
+ # access named fields as dict entries, or output as dict
+ print(result['shape'])
+ print(result.asDict())
+ prints::
+ ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap']
+
+ [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
+ - color: light blue
+ - posn: upper left
+ - shape: SQUARE
+ - texture: burlap
+ SQUARE
+ {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'}
+ See more examples at L{ParseResults} of accessing fields by results name.
+ """
+ def __init__( self, expr ):
+ super(Dict,self).__init__( expr )
+ self.saveAsList = True
+
+ def postParse( self, instring, loc, tokenlist ):
+ for i,tok in enumerate(tokenlist):
+ if len(tok) == 0:
+ continue
+ ikey = tok[0]
+ if isinstance(ikey,int):
+ ikey = _ustr(tok[0]).strip()
+ if len(tok)==1:
+ tokenlist[ikey] = _ParseResultsWithOffset("",i)
+ elif len(tok)==2 and not isinstance(tok[1],ParseResults):
+ tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i)
+ else:
+ dictvalue = tok.copy() #ParseResults(i)
+ del dictvalue[0]
+ if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()):
+ tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i)
+ else:
+ tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i)
+
+ if self.resultsName:
+ return [ tokenlist ]
+ else:
+ return tokenlist
+
+
+class Suppress(TokenConverter):
+ """
+ Converter for ignoring the results of a parsed expression.
+
+ Example::
+ source = "a, b, c,d"
+ wd = Word(alphas)
+ wd_list1 = wd + ZeroOrMore(',' + wd)
+ print(wd_list1.parseString(source))
+
+ # often, delimiters that are useful during parsing are just in the
+ # way afterward - use Suppress to keep them out of the parsed output
+ wd_list2 = wd + ZeroOrMore(Suppress(',') + wd)
+ print(wd_list2.parseString(source))
+ prints::
+ ['a', ',', 'b', ',', 'c', ',', 'd']
+ ['a', 'b', 'c', 'd']
+ (See also L{delimitedList}.)
+ """
+ def postParse( self, instring, loc, tokenlist ):
+ return []
+
+ def suppress( self ):
+ return self
+
+
+class OnlyOnce(object):
+ """
+ Wrapper for parse actions, to ensure they are only called once.
+ """
+ def __init__(self, methodCall):
+ self.callable = _trim_arity(methodCall)
+ self.called = False
+ def __call__(self,s,l,t):
+ if not self.called:
+ results = self.callable(s,l,t)
+ self.called = True
+ return results
+ raise ParseException(s,l,"")
+ def reset(self):
+ self.called = False
+
+def traceParseAction(f):
+ """
+ Decorator for debugging parse actions.
+
+ When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".}
+ When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised.
+
+ Example::
+ wd = Word(alphas)
+
+ @traceParseAction
+ def remove_duplicate_chars(tokens):
+ return ''.join(sorted(set(''.join(tokens))))
+
+ wds = OneOrMore(wd).setParseAction(remove_duplicate_chars)
+ print(wds.parseString("slkdjs sld sldd sdlf sdljf"))
+ prints::
+ >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {}))
+ <<leaving remove_duplicate_chars (ret: 'dfjkls')
+ ['dfjkls']
+ """
+ f = _trim_arity(f)
+ def z(*paArgs):
+ thisFunc = f.__name__
+ s,l,t = paArgs[-3:]
+ if len(paArgs)>3:
+ thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc
+ sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) )
+ try:
+ ret = f(*paArgs)
+ except Exception as exc:
+ sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) )
+ raise
+ sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) )
+ return ret
+ try:
+ z.__name__ = f.__name__
+ except AttributeError:
+ pass
+ return z
+
+#
+# global helpers
+#
+def delimitedList( expr, delim=",", combine=False ):
+ """
+ Helper to define a delimited list of expressions - the delimiter defaults to ','.
+ By default, the list elements and delimiters can have intervening whitespace, and
+ comments, but this can be overridden by passing C{combine=True} in the constructor.
+ If C{combine} is set to C{True}, the matching tokens are returned as a single token
+ string, with the delimiters included; otherwise, the matching tokens are returned
+ as a list of tokens, with the delimiters suppressed.
+
+ Example::
+ delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc']
+ delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE']
+ """
+ dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..."
+ if combine:
+ return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName)
+ else:
+ return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName)
+
+def countedArray( expr, intExpr=None ):
+ """
+ Helper to define a counted list of expressions.
+ This helper defines a pattern of the form::
+ integer expr expr expr...
+ where the leading integer tells how many expr expressions follow.
+ The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
+
+ If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value.
+
+ Example::
+ countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd']
+
+ # in this parser, the leading integer value is given in binary,
+ # '10' indicating that 2 values are in the array
+ binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2))
+ countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd']
+ """
+ arrayExpr = Forward()
+ def countFieldParseAction(s,l,t):
+ n = t[0]
+ arrayExpr << (n and Group(And([expr]*n)) or Group(empty))
+ return []
+ if intExpr is None:
+ intExpr = Word(nums).setParseAction(lambda t:int(t[0]))
+ else:
+ intExpr = intExpr.copy()
+ intExpr.setName("arrayLen")
+ intExpr.addParseAction(countFieldParseAction, callDuringTry=True)
+ return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...')
+
+def _flatten(L):
+ ret = []
+ for i in L:
+ if isinstance(i,list):
+ ret.extend(_flatten(i))
+ else:
+ ret.append(i)
+ return ret
+
+def matchPreviousLiteral(expr):
+ """
+ Helper to define an expression that is indirectly defined from
+ the tokens matched in a previous expression, that is, it looks
+ for a 'repeat' of a previous expression. For example::
+ first = Word(nums)
+ second = matchPreviousLiteral(first)
+ matchExpr = first + ":" + second
+ will match C{"1:1"}, but not C{"1:2"}. Because this matches a
+ previous literal, will also match the leading C{"1:1"} in C{"1:10"}.
+ If this is not desired, use C{matchPreviousExpr}.
+ Do I{not} use with packrat parsing enabled.
+ """
+ rep = Forward()
+ def copyTokenToRepeater(s,l,t):
+ if t:
+ if len(t) == 1:
+ rep << t[0]
+ else:
+ # flatten t tokens
+ tflat = _flatten(t.asList())
+ rep << And(Literal(tt) for tt in tflat)
+ else:
+ rep << Empty()
+ expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
+ rep.setName('(prev) ' + _ustr(expr))
+ return rep
+
+def matchPreviousExpr(expr):
+ """
+ Helper to define an expression that is indirectly defined from
+ the tokens matched in a previous expression, that is, it looks
+ for a 'repeat' of a previous expression. For example::
+ first = Word(nums)
+ second = matchPreviousExpr(first)
+ matchExpr = first + ":" + second
+ will match C{"1:1"}, but not C{"1:2"}. Because this matches by
+ expressions, will I{not} match the leading C{"1:1"} in C{"1:10"};
+ the expressions are evaluated first, and then compared, so
+ C{"1"} is compared with C{"10"}.
+ Do I{not} use with packrat parsing enabled.
+ """
+ rep = Forward()
+ e2 = expr.copy()
+ rep <<= e2
+ def copyTokenToRepeater(s,l,t):
+ matchTokens = _flatten(t.asList())
+ def mustMatchTheseTokens(s,l,t):
+ theseTokens = _flatten(t.asList())
+ if theseTokens != matchTokens:
+ raise ParseException("",0,"")
+ rep.setParseAction( mustMatchTheseTokens, callDuringTry=True )
+ expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
+ rep.setName('(prev) ' + _ustr(expr))
+ return rep
+
+def _escapeRegexRangeChars(s):
+ #~ escape these chars: ^-]
+ for c in r"\^-]":
+ s = s.replace(c,_bslash+c)
+ s = s.replace("\n",r"\n")
+ s = s.replace("\t",r"\t")
+ return _ustr(s)
+
+def oneOf( strs, caseless=False, useRegex=True ):
+ """
+ Helper to quickly define a set of alternative Literals, and makes sure to do
+ longest-first testing when there is a conflict, regardless of the input order,
+ but returns a C{L{MatchFirst}} for best performance.
+
+ Parameters:
+ - strs - a string of space-delimited literals, or a collection of string literals
+ - caseless - (default=C{False}) - treat all literals as caseless
+ - useRegex - (default=C{True}) - as an optimization, will generate a Regex
+ object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or
+ if creating a C{Regex} raises an exception)
+
+ Example::
+ comp_oper = oneOf("< = > <= >= !=")
+ var = Word(alphas)
+ number = Word(nums)
+ term = var | number
+ comparison_expr = term + comp_oper + term
+ print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12"))
+ prints::
+ [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']]
+ """
+ if caseless:
+ isequal = ( lambda a,b: a.upper() == b.upper() )
+ masks = ( lambda a,b: b.upper().startswith(a.upper()) )
+ parseElementClass = CaselessLiteral
+ else:
+ isequal = ( lambda a,b: a == b )
+ masks = ( lambda a,b: b.startswith(a) )
+ parseElementClass = Literal
+
+ symbols = []
+ if isinstance(strs,basestring):
+ symbols = strs.split()
+ elif isinstance(strs, Iterable):
+ symbols = list(strs)
+ else:
+ warnings.warn("Invalid argument to oneOf, expected string or iterable",
+ SyntaxWarning, stacklevel=2)
+ if not symbols:
+ return NoMatch()
+
+ i = 0
+ while i < len(symbols)-1:
+ cur = symbols[i]
+ for j,other in enumerate(symbols[i+1:]):
+ if ( isequal(other, cur) ):
+ del symbols[i+j+1]
+ break
+ elif ( masks(cur, other) ):
+ del symbols[i+j+1]
+ symbols.insert(i,other)
+ cur = other
+ break
+ else:
+ i += 1
+
+ if not caseless and useRegex:
+ #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] ))
+ try:
+ if len(symbols)==len("".join(symbols)):
+ return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols))
+ else:
+ return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols))
+ except Exception:
+ warnings.warn("Exception creating Regex for oneOf, building MatchFirst",
+ SyntaxWarning, stacklevel=2)
+
+
+ # last resort, just use MatchFirst
+ return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols))
+
+def dictOf( key, value ):
+ """
+ Helper to easily and clearly define a dictionary by specifying the respective patterns
+ for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens
+ in the proper order. The key pattern can include delimiting markers or punctuation,
+ as long as they are suppressed, thereby leaving the significant key text. The value
+ pattern can include named results, so that the C{Dict} results can include named token
+ fields.
+
+ Example::
+ text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
+ attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+ print(OneOrMore(attr_expr).parseString(text).dump())
+
+ attr_label = label
+ attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)
+
+ # similar to Dict, but simpler call format
+ result = dictOf(attr_label, attr_value).parseString(text)
+ print(result.dump())
+ print(result['shape'])
+ print(result.shape) # object attribute access works too
+ print(result.asDict())
+ prints::
+ [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
+ - color: light blue
+ - posn: upper left
+ - shape: SQUARE
+ - texture: burlap
+ SQUARE
+ SQUARE
+ {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'}
+ """
+ return Dict( ZeroOrMore( Group ( key + value ) ) )
+
+def originalTextFor(expr, asString=True):
+ """
+ Helper to return the original, untokenized text for a given expression. Useful to
+ restore the parsed fields of an HTML start tag into the raw tag text itself, or to
+ revert separate tokens with intervening whitespace back to the original matching
+ input text. By default, returns astring containing the original parsed text.
+
+ If the optional C{asString} argument is passed as C{False}, then the return value is a
+ C{L{ParseResults}} containing any results names that were originally matched, and a
+ single token containing the original matched text from the input string. So if
+ the expression passed to C{L{originalTextFor}} contains expressions with defined
+ results names, you must set C{asString} to C{False} if you want to preserve those
+ results name values.
+
+ Example::
+ src = "this is test <b> bold <i>text</i> </b> normal text "
+ for tag in ("b","i"):
+ opener,closer = makeHTMLTags(tag)
+ patt = originalTextFor(opener + SkipTo(closer) + closer)
+ print(patt.searchString(src)[0])
+ prints::
+ ['<b> bold <i>text</i> </b>']
+ ['<i>text</i>']
+ """
+ locMarker = Empty().setParseAction(lambda s,loc,t: loc)
+ endlocMarker = locMarker.copy()
+ endlocMarker.callPreparse = False
+ matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end")
+ if asString:
+ extractText = lambda s,l,t: s[t._original_start:t._original_end]
+ else:
+ def extractText(s,l,t):
+ t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]]
+ matchExpr.setParseAction(extractText)
+ matchExpr.ignoreExprs = expr.ignoreExprs
+ return matchExpr
+
+def ungroup(expr):
+ """
+ Helper to undo pyparsing's default grouping of And expressions, even
+ if all but one are non-empty.
+ """
+ return TokenConverter(expr).setParseAction(lambda t:t[0])
+
+def locatedExpr(expr):
+ """
+ Helper to decorate a returned token with its starting and ending locations in the input string.
+ This helper adds the following results names:
+ - locn_start = location where matched expression begins
+ - locn_end = location where matched expression ends
+ - value = the actual parsed results
+
+ Be careful if the input text contains C{<TAB>} characters, you may want to call
+ C{L{ParserElement.parseWithTabs}}
+
+ Example::
+ wd = Word(alphas)
+ for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"):
+ print(match)
+ prints::
+ [[0, 'ljsdf', 5]]
+ [[8, 'lksdjjf', 15]]
+ [[18, 'lkkjj', 23]]
+ """
+ locator = Empty().setParseAction(lambda s,l,t: l)
+ return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end"))
+
+
+# convenience constants for positional expressions
+empty = Empty().setName("empty")
+lineStart = LineStart().setName("lineStart")
+lineEnd = LineEnd().setName("lineEnd")
+stringStart = StringStart().setName("stringStart")
+stringEnd = StringEnd().setName("stringEnd")
+
+_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
+_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16)))
+_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8)))
+_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1)
+_charRange = Group(_singleChar + Suppress("-") + _singleChar)
+_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"
+
+def srange(s):
+ r"""
+ Helper to easily define string ranges for use in Word construction. Borrows
+ syntax from regexp '[]' string range definitions::
+ srange("[0-9]") -> "0123456789"
+ srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz"
+ srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
+ The input string must be enclosed in []'s, and the returned string is the expanded
+ character set joined into a single string.
+ The values enclosed in the []'s may be:
+ - a single character
+ - an escaped character with a leading backslash (such as C{\-} or C{\]})
+ - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character)
+ (C{\0x##} is also supported for backwards compatibility)
+ - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character)
+ - a range of any of the above, separated by a dash (C{'a-z'}, etc.)
+ - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.)
+ """
+ _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1))
+ try:
+ return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body)
+ except Exception:
+ return ""
+
+def matchOnlyAtCol(n):
+ """
+ Helper method for defining parse actions that require matching at a specific
+ column in the input text.
+ """
+ def verifyCol(strg,locn,toks):
+ if col(locn,strg) != n:
+ raise ParseException(strg,locn,"matched token not at column %d" % n)
+ return verifyCol
+
+def replaceWith(replStr):
+ """
+ Helper method for common parse actions that simply return a literal value. Especially
+ useful when used with C{L{transformString<ParserElement.transformString>}()}.
+
+ Example::
+ num = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ na = oneOf("N/A NA").setParseAction(replaceWith(math.nan))
+ term = na | num
+
+ OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234]
+ """
+ return lambda s,l,t: [replStr]
+
+def removeQuotes(s,l,t):
+ """
+ Helper parse action for removing quotation marks from parsed quoted strings.
+
+ Example::
+ # by default, quotation marks are included in parsed results
+ quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"]
+
+ # use removeQuotes to strip quotation marks from parsed results
+ quotedString.setParseAction(removeQuotes)
+ quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"]
+ """
+ return t[0][1:-1]
+
+def tokenMap(func, *args):
+ """
+ Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional
+ args are passed, they are forwarded to the given function as additional arguments after
+ the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the
+ parsed data to an integer using base 16.
+
+ Example (compare the last to example in L{ParserElement.transformString}::
+ hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16))
+ hex_ints.runTests('''
+ 00 11 22 aa FF 0a 0d 1a
+ ''')
+
+ upperword = Word(alphas).setParseAction(tokenMap(str.upper))
+ OneOrMore(upperword).runTests('''
+ my kingdom for a horse
+ ''')
+
+ wd = Word(alphas).setParseAction(tokenMap(str.title))
+ OneOrMore(wd).setParseAction(' '.join).runTests('''
+ now is the winter of our discontent made glorious summer by this sun of york
+ ''')
+ prints::
+ 00 11 22 aa FF 0a 0d 1a
+ [0, 17, 34, 170, 255, 10, 13, 26]
+
+ my kingdom for a horse
+ ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE']
+
+ now is the winter of our discontent made glorious summer by this sun of york
+ ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York']
+ """
+ def pa(s,l,t):
+ return [func(tokn, *args) for tokn in t]
+
+ try:
+ func_name = getattr(func, '__name__',
+ getattr(func, '__class__').__name__)
+ except Exception:
+ func_name = str(func)
+ pa.__name__ = func_name
+
+ return pa
+
+upcaseTokens = tokenMap(lambda t: _ustr(t).upper())
+"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}"""
+
+downcaseTokens = tokenMap(lambda t: _ustr(t).lower())
+"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}"""
+
+def _makeTags(tagStr, xml):
+ """Internal helper to construct opening and closing tag expressions, given a tag name"""
+ if isinstance(tagStr,basestring):
+ resname = tagStr
+ tagStr = Keyword(tagStr, caseless=not xml)
+ else:
+ resname = tagStr.name
+
+ tagAttrName = Word(alphas,alphanums+"_-:")
+ if (xml):
+ tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes )
+ openTag = Suppress("<") + tagStr("tag") + \
+ Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \
+ Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
+ else:
+ printablesLessRAbrack = "".join(c for c in printables if c not in ">")
+ tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack)
+ openTag = Suppress("<") + tagStr("tag") + \
+ Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
+ Optional( Suppress("=") + tagAttrValue ) ))) + \
+ Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
+ closeTag = Combine(_L("</") + tagStr + ">")
+
+ openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname)
+ closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname)
+ openTag.tag = resname
+ closeTag.tag = resname
+ return openTag, closeTag
+
+def makeHTMLTags(tagStr):
+ """
+ Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches
+ tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values.
+
+ Example::
+ text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
+ # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple
+ a,a_end = makeHTMLTags("A")
+ link_expr = a + SkipTo(a_end)("link_text") + a_end
+
+ for link in link_expr.searchString(text):
+ # attributes in the <A> tag (like "href" shown here) are also accessible as named results
+ print(link.link_text, '->', link.href)
+ prints::
+ pyparsing -> http://pyparsing.wikispaces.com
+ """
+ return _makeTags( tagStr, False )
+
+def makeXMLTags(tagStr):
+ """
+ Helper to construct opening and closing tag expressions for XML, given a tag name. Matches
+ tags only in the given upper/lower case.
+
+ Example: similar to L{makeHTMLTags}
+ """
+ return _makeTags( tagStr, True )
+
+def withAttribute(*args,**attrDict):
+ """
+ Helper to create a validating parse action to be used with start tags created
+ with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag
+ with a required attribute value, to avoid false matches on common tags such as
+ C{<TD>} or C{<DIV>}.
+
+ Call C{withAttribute} with a series of attribute names and values. Specify the list
+ of filter attributes names and values as:
+ - keyword arguments, as in C{(align="right")}, or
+ - as an explicit dict with C{**} operator, when an attribute name is also a Python
+ reserved word, as in C{**{"class":"Customer", "align":"right"}}
+ - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") )
+ For attribute names with a namespace prefix, you must use the second form. Attribute
+ names are matched insensitive to upper/lower case.
+
+ If just testing for C{class} (with or without a namespace), use C{L{withClass}}.
+
+ To verify that the attribute exists, but without specifying a value, pass
+ C{withAttribute.ANY_VALUE} as the value.
+
+ Example::
+ html = '''
+ <div>
+ Some text
+ <div type="grid">1 4 0 1 0</div>
+ <div type="graph">1,3 2,3 1,1</div>
+ <div>this has no type</div>
+ </div>
+
+ '''
+ div,div_end = makeHTMLTags("div")
+
+ # only match div tag having a type attribute with value "grid"
+ div_grid = div().setParseAction(withAttribute(type="grid"))
+ grid_expr = div_grid + SkipTo(div | div_end)("body")
+ for grid_header in grid_expr.searchString(html):
+ print(grid_header.body)
+
+ # construct a match with any div tag having a type attribute, regardless of the value
+ div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE))
+ div_expr = div_any_type + SkipTo(div | div_end)("body")
+ for div_header in div_expr.searchString(html):
+ print(div_header.body)
+ prints::
+ 1 4 0 1 0
+
+ 1 4 0 1 0
+ 1,3 2,3 1,1
+ """
+ if args:
+ attrs = args[:]
+ else:
+ attrs = attrDict.items()
+ attrs = [(k,v) for k,v in attrs]
+ def pa(s,l,tokens):
+ for attrName,attrValue in attrs:
+ if attrName not in tokens:
+ raise ParseException(s,l,"no matching attribute " + attrName)
+ if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue:
+ raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" %
+ (attrName, tokens[attrName], attrValue))
+ return pa
+withAttribute.ANY_VALUE = object()
+
+def withClass(classname, namespace=''):
+ """
+ Simplified version of C{L{withAttribute}} when matching on a div class - made
+ difficult because C{class} is a reserved word in Python.
+
+ Example::
+ html = '''
+ <div>
+ Some text
+ <div class="grid">1 4 0 1 0</div>
+ <div class="graph">1,3 2,3 1,1</div>
+ <div>this &lt;div&gt; has no class</div>
+ </div>
+
+ '''
+ div,div_end = makeHTMLTags("div")
+ div_grid = div().setParseAction(withClass("grid"))
+
+ grid_expr = div_grid + SkipTo(div | div_end)("body")
+ for grid_header in grid_expr.searchString(html):
+ print(grid_header.body)
+
+ div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE))
+ div_expr = div_any_type + SkipTo(div | div_end)("body")
+ for div_header in div_expr.searchString(html):
+ print(div_header.body)
+ prints::
+ 1 4 0 1 0
+
+ 1 4 0 1 0
+ 1,3 2,3 1,1
+ """
+ classattr = "%s:class" % namespace if namespace else "class"
+ return withAttribute(**{classattr : classname})
+
+opAssoc = _Constants()
+opAssoc.LEFT = object()
+opAssoc.RIGHT = object()
+
+def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ):
+ """
+ Helper method for constructing grammars of expressions made up of
+ operators working in a precedence hierarchy. Operators may be unary or
+ binary, left- or right-associative. Parse actions can also be attached
+ to operator expressions. The generated parser will also recognize the use
+ of parentheses to override operator precedences (see example below).
+
+ Note: if you define a deep operator list, you may see performance issues
+ when using infixNotation. See L{ParserElement.enablePackrat} for a
+ mechanism to potentially improve your parser performance.
+
+ Parameters:
+ - baseExpr - expression representing the most basic element for the nested
+ - opList - list of tuples, one for each operator precedence level in the
+ expression grammar; each tuple is of the form
+ (opExpr, numTerms, rightLeftAssoc, parseAction), where:
+ - opExpr is the pyparsing expression for the operator;
+ may also be a string, which will be converted to a Literal;
+ if numTerms is 3, opExpr is a tuple of two expressions, for the
+ two operators separating the 3 terms
+ - numTerms is the number of terms for this operator (must
+ be 1, 2, or 3)
+ - rightLeftAssoc is the indicator whether the operator is
+ right or left associative, using the pyparsing-defined
+ constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}.
+ - parseAction is the parse action to be associated with
+ expressions matching this operator expression (the
+ parse action tuple member may be omitted); if the parse action
+ is passed a tuple or list of functions, this is equivalent to
+ calling C{setParseAction(*fn)} (L{ParserElement.setParseAction})
+ - lpar - expression for matching left-parentheses (default=C{Suppress('(')})
+ - rpar - expression for matching right-parentheses (default=C{Suppress(')')})
+
+ Example::
+ # simple example of four-function arithmetic with ints and variable names
+ integer = pyparsing_common.signed_integer
+ varname = pyparsing_common.identifier
+
+ arith_expr = infixNotation(integer | varname,
+ [
+ ('-', 1, opAssoc.RIGHT),
+ (oneOf('* /'), 2, opAssoc.LEFT),
+ (oneOf('+ -'), 2, opAssoc.LEFT),
+ ])
+
+ arith_expr.runTests('''
+ 5+3*6
+ (5+3)*6
+ -2--11
+ ''', fullDump=False)
+ prints::
+ 5+3*6
+ [[5, '+', [3, '*', 6]]]
+
+ (5+3)*6
+ [[[5, '+', 3], '*', 6]]
+
+ -2--11
+ [[['-', 2], '-', ['-', 11]]]
+ """
+ ret = Forward()
+ lastExpr = baseExpr | ( lpar + ret + rpar )
+ for i,operDef in enumerate(opList):
+ opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4]
+ termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr
+ if arity == 3:
+ if opExpr is None or len(opExpr) != 2:
+ raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions")
+ opExpr1, opExpr2 = opExpr
+ thisExpr = Forward().setName(termName)
+ if rightLeftAssoc == opAssoc.LEFT:
+ if arity == 1:
+ matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) )
+ elif arity == 2:
+ if opExpr is not None:
+ matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) )
+ else:
+ matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) )
+ elif arity == 3:
+ matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \
+ Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr )
+ else:
+ raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
+ elif rightLeftAssoc == opAssoc.RIGHT:
+ if arity == 1:
+ # try to avoid LR with this extra test
+ if not isinstance(opExpr, Optional):
+ opExpr = Optional(opExpr)
+ matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr )
+ elif arity == 2:
+ if opExpr is not None:
+ matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) )
+ else:
+ matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) )
+ elif arity == 3:
+ matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \
+ Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr )
+ else:
+ raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
+ else:
+ raise ValueError("operator must indicate right or left associativity")
+ if pa:
+ if isinstance(pa, (tuple, list)):
+ matchExpr.setParseAction(*pa)
+ else:
+ matchExpr.setParseAction(pa)
+ thisExpr <<= ( matchExpr.setName(termName) | lastExpr )
+ lastExpr = thisExpr
+ ret <<= lastExpr
+ return ret
+
+operatorPrecedence = infixNotation
+"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release."""
+
+dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes")
+sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes")
+quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'|
+ Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes")
+unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal")
+
+def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()):
+ """
+ Helper method for defining nested lists enclosed in opening and closing
+ delimiters ("(" and ")" are the default).
+
+ Parameters:
+ - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression
+ - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression
+ - content - expression for items within the nested lists (default=C{None})
+ - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString})
+
+ If an expression is not provided for the content argument, the nested
+ expression will capture all whitespace-delimited content between delimiters
+ as a list of separate values.
+
+ Use the C{ignoreExpr} argument to define expressions that may contain
+ opening or closing characters that should not be treated as opening
+ or closing characters for nesting, such as quotedString or a comment
+ expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}.
+ The default is L{quotedString}, but if no expressions are to be ignored,
+ then pass C{None} for this argument.
+
+ Example::
+ data_type = oneOf("void int short long char float double")
+ decl_data_type = Combine(data_type + Optional(Word('*')))
+ ident = Word(alphas+'_', alphanums+'_')
+ number = pyparsing_common.number
+ arg = Group(decl_data_type + ident)
+ LPAR,RPAR = map(Suppress, "()")
+
+ code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment))
+
+ c_function = (decl_data_type("type")
+ + ident("name")
+ + LPAR + Optional(delimitedList(arg), [])("args") + RPAR
+ + code_body("body"))
+ c_function.ignore(cStyleComment)
+
+ source_code = '''
+ int is_odd(int x) {
+ return (x%2);
+ }
+
+ int dec_to_hex(char hchar) {
+ if (hchar >= '0' && hchar <= '9') {
+ return (ord(hchar)-ord('0'));
+ } else {
+ return (10+ord(hchar)-ord('A'));
+ }
+ }
+ '''
+ for func in c_function.searchString(source_code):
+ print("%(name)s (%(type)s) args: %(args)s" % func)
+
+ prints::
+ is_odd (int) args: [['int', 'x']]
+ dec_to_hex (int) args: [['char', 'hchar']]
+ """
+ if opener == closer:
+ raise ValueError("opening and closing strings cannot be the same")
+ if content is None:
+ if isinstance(opener,basestring) and isinstance(closer,basestring):
+ if len(opener) == 1 and len(closer)==1:
+ if ignoreExpr is not None:
+ content = (Combine(OneOrMore(~ignoreExpr +
+ CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ if ignoreExpr is not None:
+ content = (Combine(OneOrMore(~ignoreExpr +
+ ~Literal(opener) + ~Literal(closer) +
+ CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) +
+ CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ raise ValueError("opening and closing arguments must be strings if no content expression is given")
+ ret = Forward()
+ if ignoreExpr is not None:
+ ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) )
+ else:
+ ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) )
+ ret.setName('nested %s%s expression' % (opener,closer))
+ return ret
+
+def indentedBlock(blockStatementExpr, indentStack, indent=True):
+ """
+ Helper method for defining space-delimited indentation blocks, such as
+ those used to define block statements in Python source code.
+
+ Parameters:
+ - blockStatementExpr - expression defining syntax of statement that
+ is repeated within the indented block
+ - indentStack - list created by caller to manage indentation stack
+ (multiple statementWithIndentedBlock expressions within a single grammar
+ should share a common indentStack)
+ - indent - boolean indicating whether block must be indented beyond the
+ the current level; set to False for block of left-most statements
+ (default=C{True})
+
+ A valid block must contain at least one C{blockStatement}.
+
+ Example::
+ data = '''
+ def A(z):
+ A1
+ B = 100
+ G = A2
+ A2
+ A3
+ B
+ def BB(a,b,c):
+ BB1
+ def BBA():
+ bba1
+ bba2
+ bba3
+ C
+ D
+ def spam(x,y):
+ def eggs(z):
+ pass
+ '''
+
+
+ indentStack = [1]
+ stmt = Forward()
+
+ identifier = Word(alphas, alphanums)
+ funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":")
+ func_body = indentedBlock(stmt, indentStack)
+ funcDef = Group( funcDecl + func_body )
+
+ rvalue = Forward()
+ funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")")
+ rvalue << (funcCall | identifier | Word(nums))
+ assignment = Group(identifier + "=" + rvalue)
+ stmt << ( funcDef | assignment | identifier )
+
+ module_body = OneOrMore(stmt)
+
+ parseTree = module_body.parseString(data)
+ parseTree.pprint()
+ prints::
+ [['def',
+ 'A',
+ ['(', 'z', ')'],
+ ':',
+ [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]],
+ 'B',
+ ['def',
+ 'BB',
+ ['(', 'a', 'b', 'c', ')'],
+ ':',
+ [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]],
+ 'C',
+ 'D',
+ ['def',
+ 'spam',
+ ['(', 'x', 'y', ')'],
+ ':',
+ [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]]
+ """
+ def checkPeerIndent(s,l,t):
+ if l >= len(s): return
+ curCol = col(l,s)
+ if curCol != indentStack[-1]:
+ if curCol > indentStack[-1]:
+ raise ParseFatalException(s,l,"illegal nesting")
+ raise ParseException(s,l,"not a peer entry")
+
+ def checkSubIndent(s,l,t):
+ curCol = col(l,s)
+ if curCol > indentStack[-1]:
+ indentStack.append( curCol )
+ else:
+ raise ParseException(s,l,"not a subentry")
+
+ def checkUnindent(s,l,t):
+ if l >= len(s): return
+ curCol = col(l,s)
+ if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]):
+ raise ParseException(s,l,"not an unindent")
+ indentStack.pop()
+
+ NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress())
+ INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT')
+ PEER = Empty().setParseAction(checkPeerIndent).setName('')
+ UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT')
+ if indent:
+ smExpr = Group( Optional(NL) +
+ #~ FollowedBy(blockStatementExpr) +
+ INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT)
+ else:
+ smExpr = Group( Optional(NL) +
+ (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) )
+ blockStatementExpr.ignore(_bslash + LineEnd())
+ return smExpr.setName('indented block')
+
+alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
+punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
+
+anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag'))
+_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\''))
+commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity")
+def replaceHTMLEntity(t):
+ """Helper parser action to replace common HTML entities with their special characters"""
+ return _htmlEntityMap.get(t.entity)
+
+# it's easy to get these comment structures wrong - they're very common, so may as well make them available
+cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment")
+"Comment of the form C{/* ... */}"
+
+htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment")
+"Comment of the form C{<!-- ... -->}"
+
+restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line")
+dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment")
+"Comment of the form C{// ... (to end of line)}"
+
+cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment")
+"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}"
+
+javaStyleComment = cppStyleComment
+"Same as C{L{cppStyleComment}}"
+
+pythonStyleComment = Regex(r"#.*").setName("Python style comment")
+"Comment of the form C{# ... (to end of line)}"
+
+_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') +
+ Optional( Word(" \t") +
+ ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem")
+commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList")
+"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas.
+ This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}."""
+
+# some other useful expressions - using lower-case class name since we are really using this as a namespace
+class pyparsing_common:
+ """
+ Here are some common low-level expressions that may be useful in jump-starting parser development:
+ - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>})
+ - common L{programming identifiers<identifier>}
+ - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>})
+ - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>}
+ - L{UUID<uuid>}
+ - L{comma-separated list<comma_separated_list>}
+ Parse actions:
+ - C{L{convertToInteger}}
+ - C{L{convertToFloat}}
+ - C{L{convertToDate}}
+ - C{L{convertToDatetime}}
+ - C{L{stripHTMLTags}}
+ - C{L{upcaseTokens}}
+ - C{L{downcaseTokens}}
+
+ Example::
+ pyparsing_common.number.runTests('''
+ # any int or real number, returned as the appropriate type
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ ''')
+
+ pyparsing_common.fnumber.runTests('''
+ # any int or real number, returned as float
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ ''')
+
+ pyparsing_common.hex_integer.runTests('''
+ # hex numbers
+ 100
+ FF
+ ''')
+
+ pyparsing_common.fraction.runTests('''
+ # fractions
+ 1/2
+ -3/4
+ ''')
+
+ pyparsing_common.mixed_integer.runTests('''
+ # mixed fractions
+ 1
+ 1/2
+ -3/4
+ 1-3/4
+ ''')
+
+ import uuid
+ pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
+ pyparsing_common.uuid.runTests('''
+ # uuid
+ 12345678-1234-5678-1234-567812345678
+ ''')
+ prints::
+ # any int or real number, returned as the appropriate type
+ 100
+ [100]
+
+ -100
+ [-100]
+
+ +100
+ [100]
+
+ 3.14159
+ [3.14159]
+
+ 6.02e23
+ [6.02e+23]
+
+ 1e-12
+ [1e-12]
+
+ # any int or real number, returned as float
+ 100
+ [100.0]
+
+ -100
+ [-100.0]
+
+ +100
+ [100.0]
+
+ 3.14159
+ [3.14159]
+
+ 6.02e23
+ [6.02e+23]
+
+ 1e-12
+ [1e-12]
+
+ # hex numbers
+ 100
+ [256]
+
+ FF
+ [255]
+
+ # fractions
+ 1/2
+ [0.5]
+
+ -3/4
+ [-0.75]
+
+ # mixed fractions
+ 1
+ [1]
+
+ 1/2
+ [0.5]
+
+ -3/4
+ [-0.75]
+
+ 1-3/4
+ [1.75]
+
+ # uuid
+ 12345678-1234-5678-1234-567812345678
+ [UUID('12345678-1234-5678-1234-567812345678')]
+ """
+
+ convertToInteger = tokenMap(int)
+ """
+ Parse action for converting parsed integers to Python int
+ """
+
+ convertToFloat = tokenMap(float)
+ """
+ Parse action for converting parsed numbers to Python float
+ """
+
+ integer = Word(nums).setName("integer").setParseAction(convertToInteger)
+ """expression that parses an unsigned integer, returns an int"""
+
+ hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16))
+ """expression that parses a hexadecimal integer, returns an int"""
+
+ signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger)
+ """expression that parses an integer with optional leading sign, returns an int"""
+
+ fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction")
+ """fractional expression of an integer divided by an integer, returns a float"""
+ fraction.addParseAction(lambda t: t[0]/t[-1])
+
+ mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction")
+ """mixed integer of the form 'integer - fraction', with optional leading integer, returns float"""
+ mixed_integer.addParseAction(sum)
+
+ real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat)
+ """expression that parses a floating point number and returns a float"""
+
+ sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat)
+ """expression that parses a floating point number with optional scientific notation and returns a float"""
+
+ # streamlining this expression makes the docs nicer-looking
+ number = (sci_real | real | signed_integer).streamline()
+ """any numeric expression, returns the corresponding Python type"""
+
+ fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat)
+ """any int or real number, returned as float"""
+
+ identifier = Word(alphas+'_', alphanums+'_').setName("identifier")
+ """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')"""
+
+ ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address")
+ "IPv4 address (C{0.0.0.0 - 255.255.255.255})"
+
+ _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer")
+ _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address")
+ _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address")
+ _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8)
+ _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address")
+ ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address")
+ "IPv6 address (long, short, or mixed form)"
+
+ mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address")
+ "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)"
+
+ @staticmethod
+ def convertToDate(fmt="%Y-%m-%d"):
+ """
+ Helper to create a parse action for converting parsed date string to Python datetime.date
+
+ Params -
+ - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"})
+
+ Example::
+ date_expr = pyparsing_common.iso8601_date.copy()
+ date_expr.setParseAction(pyparsing_common.convertToDate())
+ print(date_expr.parseString("1999-12-31"))
+ prints::
+ [datetime.date(1999, 12, 31)]
+ """
+ def cvt_fn(s,l,t):
+ try:
+ return datetime.strptime(t[0], fmt).date()
+ except ValueError as ve:
+ raise ParseException(s, l, str(ve))
+ return cvt_fn
+
+ @staticmethod
+ def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"):
+ """
+ Helper to create a parse action for converting parsed datetime string to Python datetime.datetime
+
+ Params -
+ - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"})
+
+ Example::
+ dt_expr = pyparsing_common.iso8601_datetime.copy()
+ dt_expr.setParseAction(pyparsing_common.convertToDatetime())
+ print(dt_expr.parseString("1999-12-31T23:59:59.999"))
+ prints::
+ [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)]
+ """
+ def cvt_fn(s,l,t):
+ try:
+ return datetime.strptime(t[0], fmt)
+ except ValueError as ve:
+ raise ParseException(s, l, str(ve))
+ return cvt_fn
+
+ iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date")
+ "ISO8601 date (C{yyyy-mm-dd})"
+
+ iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime")
+ "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}"
+
+ uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID")
+ "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})"
+
+ _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress()
+ @staticmethod
+ def stripHTMLTags(s, l, tokens):
+ """
+ Parse action to remove HTML tags from web page HTML source
+
+ Example::
+ # strip HTML links from normal text
+ text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
+ td,td_end = makeHTMLTags("TD")
+ table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end
+
+ print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page'
+ """
+ return pyparsing_common._html_stripper.transformString(tokens[0])
+
+ _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',')
+ + Optional( White(" \t") ) ) ).streamline().setName("commaItem")
+ comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list")
+ """Predefined expression of 1 or more printable words or quoted strings, separated by commas."""
+
+ upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper()))
+ """Parse action to convert tokens to upper case."""
+
+ downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower()))
+ """Parse action to convert tokens to lower case."""
+
+
+if __name__ == "__main__":
+
+ selectToken = CaselessLiteral("select")
+ fromToken = CaselessLiteral("from")
+
+ ident = Word(alphas, alphanums + "_$")
+
+ columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
+ columnNameList = Group(delimitedList(columnName)).setName("columns")
+ columnSpec = ('*' | columnNameList)
+
+ tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
+ tableNameList = Group(delimitedList(tableName)).setName("tables")
+
+ simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables")
+
+ # demo runTests method, including embedded comments in test string
+ simpleSQL.runTests("""
+ # '*' as column list and dotted table name
+ select * from SYS.XYZZY
+
+ # caseless match on "SELECT", and casts back to "select"
+ SELECT * from XYZZY, ABC
+
+ # list of column names, and mixed case SELECT keyword
+ Select AA,BB,CC from Sys.dual
+
+ # multiple tables
+ Select A, B, C from Sys.dual, Table2
+
+ # invalid SELECT keyword - should fail
+ Xelect A, B, C from Sys.dual
+
+ # incomplete command - should fail
+ Select
+
+ # invalid column name - should fail
+ Select ^^^ frox Sys.dual
+
+ """)
+
+ pyparsing_common.number.runTests("""
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ """)
+
+ # any int or real number, returned as float
+ pyparsing_common.fnumber.runTests("""
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ """)
+
+ pyparsing_common.hex_integer.runTests("""
+ 100
+ FF
+ """)
+
+ import uuid
+ pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
+ pyparsing_common.uuid.runTests("""
+ 12345678-1234-5678-1234-567812345678
+ """)
diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/pyparsing.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/pyparsing.py
index 4aa30ee6b2..cf75e1e5fc 100644
--- a/contrib/python/setuptools/py3/pkg_resources/_vendor/pyparsing.py
+++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/pyparsing.py
@@ -1,5742 +1,5742 @@
-# module pyparsing.py
-#
-# Copyright (c) 2003-2018 Paul T. McGuire
-#
-# 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__doc__ = \
-"""
-pyparsing module - Classes and methods to define and execute parsing grammars
-=============================================================================
-
-The pyparsing module is an alternative approach to creating and executing simple grammars,
-vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you
-don't need to learn a new syntax for defining grammars or matching expressions - the parsing module
-provides a library of classes that you use to construct the grammar directly in Python.
-
-Here is a program to parse "Hello, World!" (or any greeting of the form
-C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements
-(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to
-L{Literal} expressions)::
-
- from pyparsing import Word, alphas
-
- # define grammar of a greeting
- greet = Word(alphas) + "," + Word(alphas) + "!"
-
- hello = "Hello, World!"
- print (hello, "->", greet.parseString(hello))
-
-The program outputs the following::
-
- Hello, World! -> ['Hello', ',', 'World', '!']
-
-The Python representation of the grammar is quite readable, owing to the self-explanatory
-class names, and the use of '+', '|' and '^' operators.
-
-The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an
-object with named attributes.
-
-The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
- - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.)
- - quoted strings
- - embedded comments
-
-
-Getting Started -
------------------
-Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing
-classes inherit from. Use the docstrings for examples of how to:
- - construct literal match expressions from L{Literal} and L{CaselessLiteral} classes
- - construct character word-group expressions using the L{Word} class
- - see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes
- - use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones
- - associate names with your parsed results using L{ParserElement.setResultsName}
- - find some helpful expression short-cuts like L{delimitedList} and L{oneOf}
- - find more useful common expressions in the L{pyparsing_common} namespace class
-"""
-
-__version__ = "2.2.1"
-__versionTime__ = "18 Sep 2018 00:49 UTC"
-__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>"
-
-import string
-from weakref import ref as wkref
-import copy
-import sys
-import warnings
-import re
-import sre_constants
-import collections
-import pprint
-import traceback
-import types
-from datetime import datetime
-
-try:
- from _thread import RLock
-except ImportError:
- from threading import RLock
-
-try:
- # Python 3
- from collections.abc import Iterable
- from collections.abc import MutableMapping
-except ImportError:
- # Python 2.7
- from collections import Iterable
- from collections import MutableMapping
-
-try:
- from collections import OrderedDict as _OrderedDict
-except ImportError:
- try:
- from ordereddict import OrderedDict as _OrderedDict
- except ImportError:
- _OrderedDict = None
-
-#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) )
-
-__all__ = [
-'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty',
-'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal',
-'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or',
-'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException',
-'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException',
-'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter',
-'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore',
-'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col',
-'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString',
-'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums',
-'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno',
-'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral',
-'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables',
-'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity',
-'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd',
-'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute',
-'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass',
-'CloseMatch', 'tokenMap', 'pyparsing_common',
-]
-
-system_version = tuple(sys.version_info)[:3]
-PY_3 = system_version[0] == 3
-if PY_3:
- _MAX_INT = sys.maxsize
- basestring = str
- unichr = chr
- _ustr = str
-
- # build list of single arg builtins, that can be used as parse actions
- singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max]
-
-else:
- _MAX_INT = sys.maxint
- range = xrange
-
- def _ustr(obj):
- """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
- str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
- then < returns the unicode object | encodes it with the default encoding | ... >.
- """
- if isinstance(obj,unicode):
- return obj
-
- try:
- # If this works, then _ustr(obj) has the same behaviour as str(obj), so
- # it won't break any existing code.
- return str(obj)
-
- except UnicodeEncodeError:
- # Else encode it
- ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace')
- xmlcharref = Regex(r'&#\d+;')
- xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:])
- return xmlcharref.transformString(ret)
-
- # build list of single arg builtins, tolerant of Python version, that can be used as parse actions
- singleArgBuiltins = []
- import __builtin__
- for fname in "sum len sorted reversed list tuple set any all min max".split():
- try:
- singleArgBuiltins.append(getattr(__builtin__,fname))
- except AttributeError:
- continue
-
-_generatorType = type((y for y in range(1)))
-
-def _xml_escape(data):
- """Escape &, <, >, ", ', etc. in a string of data."""
-
- # ampersand must be replaced first
- from_symbols = '&><"\''
- to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split())
- for from_,to_ in zip(from_symbols, to_symbols):
- data = data.replace(from_, to_)
- return data
-
-class _Constants(object):
- pass
-
-alphas = string.ascii_uppercase + string.ascii_lowercase
-nums = "0123456789"
-hexnums = nums + "ABCDEFabcdef"
-alphanums = alphas + nums
-_bslash = chr(92)
-printables = "".join(c for c in string.printable if c not in string.whitespace)
-
-class ParseBaseException(Exception):
- """base exception class for all parsing runtime exceptions"""
- # Performance tuning: we construct a *lot* of these, so keep this
- # constructor as small and fast as possible
- def __init__( self, pstr, loc=0, msg=None, elem=None ):
- self.loc = loc
- if msg is None:
- self.msg = pstr
- self.pstr = ""
- else:
- self.msg = msg
- self.pstr = pstr
- self.parserElement = elem
- self.args = (pstr, loc, msg)
-
- @classmethod
- def _from_exception(cls, pe):
- """
- internal factory method to simplify creating one type of ParseException
- from another - avoids having __init__ signature conflicts among subclasses
- """
- return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement)
-
- def __getattr__( self, aname ):
- """supported attributes by name are:
- - lineno - returns the line number of the exception text
- - col - returns the column number of the exception text
- - line - returns the line containing the exception text
- """
- if( aname == "lineno" ):
- return lineno( self.loc, self.pstr )
- elif( aname in ("col", "column") ):
- return col( self.loc, self.pstr )
- elif( aname == "line" ):
- return line( self.loc, self.pstr )
- else:
- raise AttributeError(aname)
-
- def __str__( self ):
- return "%s (at char %d), (line:%d, col:%d)" % \
- ( self.msg, self.loc, self.lineno, self.column )
- def __repr__( self ):
- return _ustr(self)
- def markInputline( self, markerString = ">!<" ):
- """Extracts the exception line from the input string, and marks
- the location of the exception with a special symbol.
- """
- line_str = self.line
- line_column = self.column - 1
- if markerString:
- line_str = "".join((line_str[:line_column],
- markerString, line_str[line_column:]))
- return line_str.strip()
- def __dir__(self):
- return "lineno col line".split() + dir(type(self))
-
-class ParseException(ParseBaseException):
- """
- Exception thrown when parse expressions don't match class;
- supported attributes by name are:
- - lineno - returns the line number of the exception text
- - col - returns the column number of the exception text
- - line - returns the line containing the exception text
-
- Example::
- try:
- Word(nums).setName("integer").parseString("ABC")
- except ParseException as pe:
- print(pe)
- print("column: {}".format(pe.col))
-
- prints::
- Expected integer (at char 0), (line:1, col:1)
- column: 1
- """
- pass
-
-class ParseFatalException(ParseBaseException):
- """user-throwable exception thrown when inconsistent parse content
- is found; stops all parsing immediately"""
- pass
-
-class ParseSyntaxException(ParseFatalException):
- """just like L{ParseFatalException}, but thrown internally when an
- L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop
- immediately because an unbacktrackable syntax error has been found"""
- pass
-
-#~ class ReparseException(ParseBaseException):
- #~ """Experimental class - parse actions can raise this exception to cause
- #~ pyparsing to reparse the input string:
- #~ - with a modified input string, and/or
- #~ - with a modified start location
- #~ Set the values of the ReparseException in the constructor, and raise the
- #~ exception in a parse action to cause pyparsing to use the new string/location.
- #~ Setting the values as None causes no change to be made.
- #~ """
- #~ def __init_( self, newstring, restartLoc ):
- #~ self.newParseText = newstring
- #~ self.reparseLoc = restartLoc
-
-class RecursiveGrammarException(Exception):
- """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive"""
- def __init__( self, parseElementList ):
- self.parseElementTrace = parseElementList
-
- def __str__( self ):
- return "RecursiveGrammarException: %s" % self.parseElementTrace
-
-class _ParseResultsWithOffset(object):
- def __init__(self,p1,p2):
- self.tup = (p1,p2)
- def __getitem__(self,i):
- return self.tup[i]
- def __repr__(self):
- return repr(self.tup[0])
- def setOffset(self,i):
- self.tup = (self.tup[0],i)
-
-class ParseResults(object):
- """
- Structured parse results, to provide multiple means of access to the parsed data:
- - as a list (C{len(results)})
- - by list index (C{results[0], results[1]}, etc.)
- - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName})
-
- Example::
- integer = Word(nums)
- date_str = (integer.setResultsName("year") + '/'
- + integer.setResultsName("month") + '/'
- + integer.setResultsName("day"))
- # equivalent form:
- # date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- # parseString returns a ParseResults object
- result = date_str.parseString("1999/12/31")
-
- def test(s, fn=repr):
- print("%s -> %s" % (s, fn(eval(s))))
- test("list(result)")
- test("result[0]")
- test("result['month']")
- test("result.day")
- test("'month' in result")
- test("'minutes' in result")
- test("result.dump()", str)
- prints::
- list(result) -> ['1999', '/', '12', '/', '31']
- result[0] -> '1999'
- result['month'] -> '12'
- result.day -> '31'
- 'month' in result -> True
- 'minutes' in result -> False
- result.dump() -> ['1999', '/', '12', '/', '31']
- - day: 31
- - month: 12
- - year: 1999
- """
- def __new__(cls, toklist=None, name=None, asList=True, modal=True ):
- if isinstance(toklist, cls):
- return toklist
- retobj = object.__new__(cls)
- retobj.__doinit = True
- return retobj
-
- # Performance tuning: we construct a *lot* of these, so keep this
- # constructor as small and fast as possible
- def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ):
- if self.__doinit:
- self.__doinit = False
- self.__name = None
- self.__parent = None
- self.__accumNames = {}
- self.__asList = asList
- self.__modal = modal
- if toklist is None:
- toklist = []
- if isinstance(toklist, list):
- self.__toklist = toklist[:]
- elif isinstance(toklist, _generatorType):
- self.__toklist = list(toklist)
- else:
- self.__toklist = [toklist]
- self.__tokdict = dict()
-
- if name is not None and name:
- if not modal:
- self.__accumNames[name] = 0
- if isinstance(name,int):
- name = _ustr(name) # will always return a str, but use _ustr for consistency
- self.__name = name
- if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])):
- if isinstance(toklist,basestring):
- toklist = [ toklist ]
- if asList:
- if isinstance(toklist,ParseResults):
- self[name] = _ParseResultsWithOffset(toklist.copy(),0)
- else:
- self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0)
- self[name].__name = name
- else:
- try:
- self[name] = toklist[0]
- except (KeyError,TypeError,IndexError):
- self[name] = toklist
-
- def __getitem__( self, i ):
- if isinstance( i, (int,slice) ):
- return self.__toklist[i]
- else:
- if i not in self.__accumNames:
- return self.__tokdict[i][-1][0]
- else:
- return ParseResults([ v[0] for v in self.__tokdict[i] ])
-
- def __setitem__( self, k, v, isinstance=isinstance ):
- if isinstance(v,_ParseResultsWithOffset):
- self.__tokdict[k] = self.__tokdict.get(k,list()) + [v]
- sub = v[0]
- elif isinstance(k,(int,slice)):
- self.__toklist[k] = v
- sub = v
- else:
- self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)]
- sub = v
- if isinstance(sub,ParseResults):
- sub.__parent = wkref(self)
-
- def __delitem__( self, i ):
- if isinstance(i,(int,slice)):
- mylen = len( self.__toklist )
- del self.__toklist[i]
-
- # convert int to slice
- if isinstance(i, int):
- if i < 0:
- i += mylen
- i = slice(i, i+1)
- # get removed indices
- removed = list(range(*i.indices(mylen)))
- removed.reverse()
- # fixup indices in token dictionary
- for name,occurrences in self.__tokdict.items():
- for j in removed:
- for k, (value, position) in enumerate(occurrences):
- occurrences[k] = _ParseResultsWithOffset(value, position - (position > j))
- else:
- del self.__tokdict[i]
-
- def __contains__( self, k ):
- return k in self.__tokdict
-
- def __len__( self ): return len( self.__toklist )
- def __bool__(self): return ( not not self.__toklist )
- __nonzero__ = __bool__
- def __iter__( self ): return iter( self.__toklist )
- def __reversed__( self ): return iter( self.__toklist[::-1] )
- def _iterkeys( self ):
- if hasattr(self.__tokdict, "iterkeys"):
- return self.__tokdict.iterkeys()
- else:
- return iter(self.__tokdict)
-
- def _itervalues( self ):
- return (self[k] for k in self._iterkeys())
-
- def _iteritems( self ):
- return ((k, self[k]) for k in self._iterkeys())
-
- if PY_3:
- keys = _iterkeys
- """Returns an iterator of all named result keys (Python 3.x only)."""
-
- values = _itervalues
- """Returns an iterator of all named result values (Python 3.x only)."""
-
- items = _iteritems
- """Returns an iterator of all named result key-value tuples (Python 3.x only)."""
-
- else:
- iterkeys = _iterkeys
- """Returns an iterator of all named result keys (Python 2.x only)."""
-
- itervalues = _itervalues
- """Returns an iterator of all named result values (Python 2.x only)."""
-
- iteritems = _iteritems
- """Returns an iterator of all named result key-value tuples (Python 2.x only)."""
-
- def keys( self ):
- """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.iterkeys())
-
- def values( self ):
- """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.itervalues())
-
- def items( self ):
- """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.iteritems())
-
- def haskeys( self ):
- """Since keys() returns an iterator, this method is helpful in bypassing
- code that looks for the existence of any defined results names."""
- return bool(self.__tokdict)
-
- def pop( self, *args, **kwargs):
- """
- Removes and returns item at specified index (default=C{last}).
- Supports both C{list} and C{dict} semantics for C{pop()}. If passed no
- argument or an integer argument, it will use C{list} semantics
- and pop tokens from the list of parsed tokens. If passed a
- non-integer argument (most likely a string), it will use C{dict}
- semantics and pop the corresponding value from any defined
- results names. A second default return value argument is
- supported, just as in C{dict.pop()}.
-
- Example::
- def remove_first(tokens):
- tokens.pop(0)
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
- print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321']
-
- label = Word(alphas)
- patt = label("LABEL") + OneOrMore(Word(nums))
- print(patt.parseString("AAB 123 321").dump())
-
- # Use pop() in a parse action to remove named result (note that corresponding value is not
- # removed from list form of results)
- def remove_LABEL(tokens):
- tokens.pop("LABEL")
- return tokens
- patt.addParseAction(remove_LABEL)
- print(patt.parseString("AAB 123 321").dump())
- prints::
- ['AAB', '123', '321']
- - LABEL: AAB
-
- ['AAB', '123', '321']
- """
- if not args:
- args = [-1]
- for k,v in kwargs.items():
- if k == 'default':
- args = (args[0], v)
- else:
- raise TypeError("pop() got an unexpected keyword argument '%s'" % k)
- if (isinstance(args[0], int) or
- len(args) == 1 or
- args[0] in self):
- index = args[0]
- ret = self[index]
- del self[index]
- return ret
- else:
- defaultvalue = args[1]
- return defaultvalue
-
- def get(self, key, defaultValue=None):
- """
- Returns named result matching the given key, or if there is no
- such name, then returns the given C{defaultValue} or C{None} if no
- C{defaultValue} is specified.
-
- Similar to C{dict.get()}.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString("1999/12/31")
- print(result.get("year")) # -> '1999'
- print(result.get("hour", "not specified")) # -> 'not specified'
- print(result.get("hour")) # -> None
- """
- if key in self:
- return self[key]
- else:
- return defaultValue
-
- def insert( self, index, insStr ):
- """
- Inserts new element at location index in the list of parsed tokens.
-
- Similar to C{list.insert()}.
-
- Example::
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
-
- # use a parse action to insert the parse location in the front of the parsed results
- def insert_locn(locn, tokens):
- tokens.insert(0, locn)
- print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321']
- """
- self.__toklist.insert(index, insStr)
- # fixup indices in token dictionary
- for name,occurrences in self.__tokdict.items():
- for k, (value, position) in enumerate(occurrences):
- occurrences[k] = _ParseResultsWithOffset(value, position + (position > index))
-
- def append( self, item ):
- """
- Add single element to end of ParseResults list of elements.
-
- Example::
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
-
- # use a parse action to compute the sum of the parsed integers, and add it to the end
- def append_sum(tokens):
- tokens.append(sum(map(int, tokens)))
- print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444]
- """
- self.__toklist.append(item)
-
- def extend( self, itemseq ):
- """
- Add sequence of elements to end of ParseResults list of elements.
-
- Example::
- patt = OneOrMore(Word(alphas))
-
- # use a parse action to append the reverse of the matched strings, to make a palindrome
- def make_palindrome(tokens):
- tokens.extend(reversed([t[::-1] for t in tokens]))
- return ''.join(tokens)
- print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl'
- """
- if isinstance(itemseq, ParseResults):
- self += itemseq
- else:
- self.__toklist.extend(itemseq)
-
- def clear( self ):
- """
- Clear all elements and results names.
- """
- del self.__toklist[:]
- self.__tokdict.clear()
-
- def __getattr__( self, name ):
- try:
- return self[name]
- except KeyError:
- return ""
-
- if name in self.__tokdict:
- if name not in self.__accumNames:
- return self.__tokdict[name][-1][0]
- else:
- return ParseResults([ v[0] for v in self.__tokdict[name] ])
- else:
- return ""
-
- def __add__( self, other ):
- ret = self.copy()
- ret += other
- return ret
-
- def __iadd__( self, other ):
- if other.__tokdict:
- offset = len(self.__toklist)
- addoffset = lambda a: offset if a<0 else a+offset
- otheritems = other.__tokdict.items()
- otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) )
- for (k,vlist) in otheritems for v in vlist]
- for k,v in otherdictitems:
- self[k] = v
- if isinstance(v[0],ParseResults):
- v[0].__parent = wkref(self)
-
- self.__toklist += other.__toklist
- self.__accumNames.update( other.__accumNames )
- return self
-
- def __radd__(self, other):
- if isinstance(other,int) and other == 0:
- # useful for merging many ParseResults using sum() builtin
- return self.copy()
- else:
- # this may raise a TypeError - so be it
- return other + self
-
- def __repr__( self ):
- return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) )
-
- def __str__( self ):
- return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']'
-
- def _asStringList( self, sep='' ):
- out = []
- for item in self.__toklist:
- if out and sep:
- out.append(sep)
- if isinstance( item, ParseResults ):
- out += item._asStringList()
- else:
- out.append( _ustr(item) )
- return out
-
- def asList( self ):
- """
- Returns the parse results as a nested list of matching tokens, all converted to strings.
-
- Example::
- patt = OneOrMore(Word(alphas))
- result = patt.parseString("sldkj lsdkj sldkj")
- # even though the result prints in string-like form, it is actually a pyparsing ParseResults
- print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj']
-
- # Use asList() to create an actual list
- result_list = result.asList()
- print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj']
- """
- return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist]
-
- def asDict( self ):
- """
- Returns the named parse results as a nested dictionary.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString('12/31/1999')
- print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]})
-
- result_dict = result.asDict()
- print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'}
-
- # even though a ParseResults supports dict-like access, sometime you just need to have a dict
- import json
- print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable
- print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"}
- """
- if PY_3:
- item_fn = self.items
- else:
- item_fn = self.iteritems
-
- def toItem(obj):
- if isinstance(obj, ParseResults):
- if obj.haskeys():
- return obj.asDict()
- else:
- return [toItem(v) for v in obj]
- else:
- return obj
-
- return dict((k,toItem(v)) for k,v in item_fn())
-
- def copy( self ):
- """
- Returns a new copy of a C{ParseResults} object.
- """
- ret = ParseResults( self.__toklist )
- ret.__tokdict = self.__tokdict.copy()
- ret.__parent = self.__parent
- ret.__accumNames.update( self.__accumNames )
- ret.__name = self.__name
- return ret
-
- def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ):
- """
- (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names.
- """
- nl = "\n"
- out = []
- namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items()
- for v in vlist)
- nextLevelIndent = indent + " "
-
- # collapse out indents if formatting is not desired
- if not formatted:
- indent = ""
- nextLevelIndent = ""
- nl = ""
-
- selfTag = None
- if doctag is not None:
- selfTag = doctag
- else:
- if self.__name:
- selfTag = self.__name
-
- if not selfTag:
- if namedItemsOnly:
- return ""
- else:
- selfTag = "ITEM"
-
- out += [ nl, indent, "<", selfTag, ">" ]
-
- for i,res in enumerate(self.__toklist):
- if isinstance(res,ParseResults):
- if i in namedItems:
- out += [ res.asXML(namedItems[i],
- namedItemsOnly and doctag is None,
- nextLevelIndent,
- formatted)]
- else:
- out += [ res.asXML(None,
- namedItemsOnly and doctag is None,
- nextLevelIndent,
- formatted)]
- else:
- # individual token, see if there is a name for it
- resTag = None
- if i in namedItems:
- resTag = namedItems[i]
- if not resTag:
- if namedItemsOnly:
- continue
- else:
- resTag = "ITEM"
- xmlBodyText = _xml_escape(_ustr(res))
- out += [ nl, nextLevelIndent, "<", resTag, ">",
- xmlBodyText,
- "</", resTag, ">" ]
-
- out += [ nl, indent, "</", selfTag, ">" ]
- return "".join(out)
-
- def __lookup(self,sub):
- for k,vlist in self.__tokdict.items():
- for v,loc in vlist:
- if sub is v:
- return k
- return None
-
- def getName(self):
- r"""
- Returns the results name for this token expression. Useful when several
- different expressions might match at a particular location.
-
- Example::
- integer = Word(nums)
- ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d")
- house_number_expr = Suppress('#') + Word(nums, alphanums)
- user_data = (Group(house_number_expr)("house_number")
- | Group(ssn_expr)("ssn")
- | Group(integer)("age"))
- user_info = OneOrMore(user_data)
-
- result = user_info.parseString("22 111-22-3333 #221B")
- for item in result:
- print(item.getName(), ':', item[0])
- prints::
- age : 22
- ssn : 111-22-3333
- house_number : 221B
- """
- if self.__name:
- return self.__name
- elif self.__parent:
- par = self.__parent()
- if par:
- return par.__lookup(self)
- else:
- return None
- elif (len(self) == 1 and
- len(self.__tokdict) == 1 and
- next(iter(self.__tokdict.values()))[0][1] in (0,-1)):
- return next(iter(self.__tokdict.keys()))
- else:
- return None
-
- def dump(self, indent='', depth=0, full=True):
- """
- Diagnostic method for listing out the contents of a C{ParseResults}.
- Accepts an optional C{indent} argument so that this string can be embedded
- in a nested display of other data.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString('12/31/1999')
- print(result.dump())
- prints::
- ['12', '/', '31', '/', '1999']
- - day: 1999
- - month: 31
- - year: 12
- """
- out = []
- NL = '\n'
- out.append( indent+_ustr(self.asList()) )
- if full:
- if self.haskeys():
- items = sorted((str(k), v) for k,v in self.items())
- for k,v in items:
- if out:
- out.append(NL)
- out.append( "%s%s- %s: " % (indent,(' '*depth), k) )
- if isinstance(v,ParseResults):
- if v:
- out.append( v.dump(indent,depth+1) )
- else:
- out.append(_ustr(v))
- else:
- out.append(repr(v))
- elif any(isinstance(vv,ParseResults) for vv in self):
- v = self
- for i,vv in enumerate(v):
- if isinstance(vv,ParseResults):
- out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) ))
- else:
- out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv)))
-
- return "".join(out)
-
- def pprint(self, *args, **kwargs):
- """
- Pretty-printer for parsed results as a list, using the C{pprint} module.
- Accepts additional positional or keyword args as defined for the
- C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint})
-
- Example::
- ident = Word(alphas, alphanums)
- num = Word(nums)
- func = Forward()
- term = ident | num | Group('(' + func + ')')
- func <<= ident + Group(Optional(delimitedList(term)))
- result = func.parseString("fna a,b,(fnb c,d,200),100")
- result.pprint(width=40)
- prints::
- ['fna',
- ['a',
- 'b',
- ['(', 'fnb', ['c', 'd', '200'], ')'],
- '100']]
- """
- pprint.pprint(self.asList(), *args, **kwargs)
-
- # add support for pickle protocol
- def __getstate__(self):
- return ( self.__toklist,
- ( self.__tokdict.copy(),
- self.__parent is not None and self.__parent() or None,
- self.__accumNames,
- self.__name ) )
-
- def __setstate__(self,state):
- self.__toklist = state[0]
- (self.__tokdict,
- par,
- inAccumNames,
- self.__name) = state[1]
- self.__accumNames = {}
- self.__accumNames.update(inAccumNames)
- if par is not None:
- self.__parent = wkref(par)
- else:
- self.__parent = None
-
- def __getnewargs__(self):
- return self.__toklist, self.__name, self.__asList, self.__modal
-
- def __dir__(self):
- return (dir(type(self)) + list(self.keys()))
-
-MutableMapping.register(ParseResults)
-
-def col (loc,strg):
- """Returns current column within a string, counting newlines as line separators.
- The first column is number 1.
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
- """
- s = strg
- return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc)
-
-def lineno(loc,strg):
- """Returns current line number within a string, counting newlines as line separators.
- The first line is number 1.
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
- """
- return strg.count("\n",0,loc) + 1
-
-def line( loc, strg ):
- """Returns the line of text containing loc within a string, counting newlines as line separators.
- """
- lastCR = strg.rfind("\n", 0, loc)
- nextCR = strg.find("\n", loc)
- if nextCR >= 0:
- return strg[lastCR+1:nextCR]
- else:
- return strg[lastCR+1:]
-
-def _defaultStartDebugAction( instring, loc, expr ):
- print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )))
-
-def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ):
- print ("Matched " + _ustr(expr) + " -> " + str(toks.asList()))
-
-def _defaultExceptionDebugAction( instring, loc, expr, exc ):
- print ("Exception raised:" + _ustr(exc))
-
-def nullDebugAction(*args):
- """'Do-nothing' debug action, to suppress debugging output during parsing."""
- pass
-
-# Only works on Python 3.x - nonlocal is toxic to Python 2 installs
-#~ 'decorator to trim function calls to match the arity of the target'
-#~ def _trim_arity(func, maxargs=3):
- #~ if func in singleArgBuiltins:
- #~ return lambda s,l,t: func(t)
- #~ limit = 0
- #~ foundArity = False
- #~ def wrapper(*args):
- #~ nonlocal limit,foundArity
- #~ while 1:
- #~ try:
- #~ ret = func(*args[limit:])
- #~ foundArity = True
- #~ return ret
- #~ except TypeError:
- #~ if limit == maxargs or foundArity:
- #~ raise
- #~ limit += 1
- #~ continue
- #~ return wrapper
-
-# this version is Python 2.x-3.x cross-compatible
-'decorator to trim function calls to match the arity of the target'
-def _trim_arity(func, maxargs=2):
- if func in singleArgBuiltins:
- return lambda s,l,t: func(t)
- limit = [0]
- foundArity = [False]
-
- # traceback return data structure changed in Py3.5 - normalize back to plain tuples
- if system_version[:2] >= (3,5):
- def extract_stack(limit=0):
- # special handling for Python 3.5.0 - extra deep call stack by 1
- offset = -3 if system_version == (3,5,0) else -2
- frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset]
- return [frame_summary[:2]]
- def extract_tb(tb, limit=0):
- frames = traceback.extract_tb(tb, limit=limit)
- frame_summary = frames[-1]
- return [frame_summary[:2]]
- else:
- extract_stack = traceback.extract_stack
- extract_tb = traceback.extract_tb
-
- # synthesize what would be returned by traceback.extract_stack at the call to
- # user's parse action 'func', so that we don't incur call penalty at parse time
-
- LINE_DIFF = 6
- # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND
- # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!!
- this_line = extract_stack(limit=2)[-1]
- pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF)
-
- def wrapper(*args):
- while 1:
- try:
- ret = func(*args[limit[0]:])
- foundArity[0] = True
- return ret
- except TypeError:
- # re-raise TypeErrors if they did not come from our arity testing
- if foundArity[0]:
- raise
- else:
- try:
- tb = sys.exc_info()[-1]
- if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth:
- raise
- finally:
- del tb
-
- if limit[0] <= maxargs:
- limit[0] += 1
- continue
- raise
-
- # copy func name to wrapper for sensible debug output
- func_name = "<parse action>"
- try:
- func_name = getattr(func, '__name__',
- getattr(func, '__class__').__name__)
- except Exception:
- func_name = str(func)
- wrapper.__name__ = func_name
-
- return wrapper
-
-class ParserElement(object):
- """Abstract base level parser element class."""
- DEFAULT_WHITE_CHARS = " \n\t\r"
- verbose_stacktrace = False
-
- @staticmethod
- def setDefaultWhitespaceChars( chars ):
- r"""
- Overrides the default whitespace chars
-
- Example::
- # default whitespace chars are space, <TAB> and newline
- OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl']
-
- # change to just treat newline as significant
- ParserElement.setDefaultWhitespaceChars(" \t")
- OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def']
- """
- ParserElement.DEFAULT_WHITE_CHARS = chars
-
- @staticmethod
- def inlineLiteralsUsing(cls):
- """
- Set class to be used for inclusion of string literals into a parser.
-
- Example::
- # default literal class used is Literal
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
-
-
- # change to Suppress
- ParserElement.inlineLiteralsUsing(Suppress)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- date_str.parseString("1999/12/31") # -> ['1999', '12', '31']
- """
- ParserElement._literalStringClass = cls
-
- def __init__( self, savelist=False ):
- self.parseAction = list()
- self.failAction = None
- #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall
- self.strRepr = None
- self.resultsName = None
- self.saveAsList = savelist
- self.skipWhitespace = True
- self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
- self.copyDefaultWhiteChars = True
- self.mayReturnEmpty = False # used when checking for left-recursion
- self.keepTabs = False
- self.ignoreExprs = list()
- self.debug = False
- self.streamlined = False
- self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index
- self.errmsg = ""
- self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all)
- self.debugActions = ( None, None, None ) #custom debug actions
- self.re = None
- self.callPreparse = True # used to avoid redundant calls to preParse
- self.callDuringTry = False
-
- def copy( self ):
- """
- Make a copy of this C{ParserElement}. Useful for defining different parse actions
- for the same parsing pattern, using copies of the original parse element.
-
- Example::
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K")
- integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
-
- print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M"))
- prints::
- [5120, 100, 655360, 268435456]
- Equivalent form of C{expr.copy()} is just C{expr()}::
- integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
- """
- cpy = copy.copy( self )
- cpy.parseAction = self.parseAction[:]
- cpy.ignoreExprs = self.ignoreExprs[:]
- if self.copyDefaultWhiteChars:
- cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
- return cpy
-
- def setName( self, name ):
- """
- Define name for this expression, makes debugging and exception messages clearer.
-
- Example::
- Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1)
- Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1)
- """
- self.name = name
- self.errmsg = "Expected " + self.name
- if hasattr(self,"exception"):
- self.exception.msg = self.errmsg
- return self
-
- def setResultsName( self, name, listAllMatches=False ):
- """
- Define name for referencing matching tokens as a nested attribute
- of the returned parse results.
- NOTE: this returns a *copy* of the original C{ParserElement} object;
- this is so that the client can define a basic element, such as an
- integer, and reference it in multiple places with different names.
-
- You can also set results names using the abbreviated syntax,
- C{expr("name")} in place of C{expr.setResultsName("name")} -
- see L{I{__call__}<__call__>}.
-
- Example::
- date_str = (integer.setResultsName("year") + '/'
- + integer.setResultsName("month") + '/'
- + integer.setResultsName("day"))
-
- # equivalent form:
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
- """
- newself = self.copy()
- if name.endswith("*"):
- name = name[:-1]
- listAllMatches=True
- newself.resultsName = name
- newself.modalResults = not listAllMatches
- return newself
-
- def setBreak(self,breakFlag = True):
- """Method to invoke the Python pdb debugger when this element is
- about to be parsed. Set C{breakFlag} to True to enable, False to
- disable.
- """
- if breakFlag:
- _parseMethod = self._parse
- def breaker(instring, loc, doActions=True, callPreParse=True):
- import pdb
- pdb.set_trace()
- return _parseMethod( instring, loc, doActions, callPreParse )
- breaker._originalParseMethod = _parseMethod
- self._parse = breaker
- else:
- if hasattr(self._parse,"_originalParseMethod"):
- self._parse = self._parse._originalParseMethod
- return self
-
- def setParseAction( self, *fns, **kwargs ):
- """
- Define one or more actions to perform when successfully matching parse element definition.
- Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)},
- C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where:
- - s = the original string being parsed (see note below)
- - loc = the location of the matching substring
- - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object
- If the functions in fns modify the tokens, they can return them as the return
- value from fn, and the modified list of tokens will replace the original.
- Otherwise, fn does not need to return any value.
-
- Optional keyword arguments:
- - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{parseString}<parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
-
- Example::
- integer = Word(nums)
- date_str = integer + '/' + integer + '/' + integer
-
- date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
-
- # use parse action to convert to ints at parse time
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- date_str = integer + '/' + integer + '/' + integer
-
- # note that integer fields are now ints, not strings
- date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31]
- """
- self.parseAction = list(map(_trim_arity, list(fns)))
- self.callDuringTry = kwargs.get("callDuringTry", False)
- return self
-
- def addParseAction( self, *fns, **kwargs ):
- """
- Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}.
-
- See examples in L{I{copy}<copy>}.
- """
- self.parseAction += list(map(_trim_arity, list(fns)))
- self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
- return self
-
- def addCondition(self, *fns, **kwargs):
- """Add a boolean predicate function to expression's list of parse actions. See
- L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction},
- functions passed to C{addCondition} need to return boolean success/fail of the condition.
-
- Optional keyword arguments:
- - message = define a custom message to be used in the raised exception
- - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException
-
- Example::
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- year_int = integer.copy()
- year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later")
- date_str = year_int + '/' + integer + '/' + integer
-
- result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1)
- """
- msg = kwargs.get("message", "failed user-defined condition")
- exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException
- for fn in fns:
- def pa(s,l,t):
- if not bool(_trim_arity(fn)(s,l,t)):
- raise exc_type(s,l,msg)
- self.parseAction.append(pa)
- self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
- return self
-
- def setFailAction( self, fn ):
- """Define action to perform if parsing fails at this expression.
- Fail acton fn is a callable function that takes the arguments
- C{fn(s,loc,expr,err)} where:
- - s = string being parsed
- - loc = location where expression match was attempted and failed
- - expr = the parse expression that failed
- - err = the exception thrown
- The function returns no value. It may throw C{L{ParseFatalException}}
- if it is desired to stop parsing immediately."""
- self.failAction = fn
- return self
-
- def _skipIgnorables( self, instring, loc ):
- exprsFound = True
- while exprsFound:
- exprsFound = False
- for e in self.ignoreExprs:
- try:
- while 1:
- loc,dummy = e._parse( instring, loc )
- exprsFound = True
- except ParseException:
- pass
- return loc
-
- def preParse( self, instring, loc ):
- if self.ignoreExprs:
- loc = self._skipIgnorables( instring, loc )
-
- if self.skipWhitespace:
- wt = self.whiteChars
- instrlen = len(instring)
- while loc < instrlen and instring[loc] in wt:
- loc += 1
-
- return loc
-
- def parseImpl( self, instring, loc, doActions=True ):
- return loc, []
-
- def postParse( self, instring, loc, tokenlist ):
- return tokenlist
-
- #~ @profile
- def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
- debugging = ( self.debug ) #and doActions )
-
- if debugging or self.failAction:
- #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))
- if (self.debugActions[0] ):
- self.debugActions[0]( instring, loc, self )
- if callPreParse and self.callPreparse:
- preloc = self.preParse( instring, loc )
- else:
- preloc = loc
- tokensStart = preloc
- try:
- try:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
- except IndexError:
- raise ParseException( instring, len(instring), self.errmsg, self )
- except ParseBaseException as err:
- #~ print ("Exception raised:", err)
- if self.debugActions[2]:
- self.debugActions[2]( instring, tokensStart, self, err )
- if self.failAction:
- self.failAction( instring, tokensStart, self, err )
- raise
- else:
- if callPreParse and self.callPreparse:
- preloc = self.preParse( instring, loc )
- else:
- preloc = loc
- tokensStart = preloc
- if self.mayIndexError or preloc >= len(instring):
- try:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
- except IndexError:
- raise ParseException( instring, len(instring), self.errmsg, self )
- else:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
-
- tokens = self.postParse( instring, loc, tokens )
-
- retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults )
- if self.parseAction and (doActions or self.callDuringTry):
- if debugging:
- try:
- for fn in self.parseAction:
- tokens = fn( instring, tokensStart, retTokens )
- if tokens is not None:
- retTokens = ParseResults( tokens,
- self.resultsName,
- asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
- modal=self.modalResults )
- except ParseBaseException as err:
- #~ print "Exception raised in user parse action:", err
- if (self.debugActions[2] ):
- self.debugActions[2]( instring, tokensStart, self, err )
- raise
- else:
- for fn in self.parseAction:
- tokens = fn( instring, tokensStart, retTokens )
- if tokens is not None:
- retTokens = ParseResults( tokens,
- self.resultsName,
- asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
- modal=self.modalResults )
- if debugging:
- #~ print ("Matched",self,"->",retTokens.asList())
- if (self.debugActions[1] ):
- self.debugActions[1]( instring, tokensStart, loc, self, retTokens )
-
- return loc, retTokens
-
- def tryParse( self, instring, loc ):
- try:
- return self._parse( instring, loc, doActions=False )[0]
- except ParseFatalException:
- raise ParseException( instring, loc, self.errmsg, self)
-
- def canParseNext(self, instring, loc):
- try:
- self.tryParse(instring, loc)
- except (ParseException, IndexError):
- return False
- else:
- return True
-
- class _UnboundedCache(object):
- def __init__(self):
- cache = {}
- self.not_in_cache = not_in_cache = object()
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
-
- def clear(self):
- cache.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- if _OrderedDict is not None:
- class _FifoCache(object):
- def __init__(self, size):
- self.not_in_cache = not_in_cache = object()
-
- cache = _OrderedDict()
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
- while len(cache) > size:
- try:
- cache.popitem(False)
- except KeyError:
- pass
-
- def clear(self):
- cache.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- else:
- class _FifoCache(object):
- def __init__(self, size):
- self.not_in_cache = not_in_cache = object()
-
- cache = {}
- key_fifo = collections.deque([], size)
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
- while len(key_fifo) > size:
- cache.pop(key_fifo.popleft(), None)
- key_fifo.append(key)
-
- def clear(self):
- cache.clear()
- key_fifo.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- # argument cache for optimizing repeated calls when backtracking through recursive expressions
- packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail
- packrat_cache_lock = RLock()
- packrat_cache_stats = [0, 0]
-
- # this method gets repeatedly called during backtracking with the same arguments -
- # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression
- def _parseCache( self, instring, loc, doActions=True, callPreParse=True ):
- HIT, MISS = 0, 1
- lookup = (self, instring, loc, callPreParse, doActions)
- with ParserElement.packrat_cache_lock:
- cache = ParserElement.packrat_cache
- value = cache.get(lookup)
- if value is cache.not_in_cache:
- ParserElement.packrat_cache_stats[MISS] += 1
- try:
- value = self._parseNoCache(instring, loc, doActions, callPreParse)
- except ParseBaseException as pe:
- # cache a copy of the exception, without the traceback
- cache.set(lookup, pe.__class__(*pe.args))
- raise
- else:
- cache.set(lookup, (value[0], value[1].copy()))
- return value
- else:
- ParserElement.packrat_cache_stats[HIT] += 1
- if isinstance(value, Exception):
- raise value
- return (value[0], value[1].copy())
-
- _parse = _parseNoCache
-
- @staticmethod
- def resetCache():
- ParserElement.packrat_cache.clear()
- ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats)
-
- _packratEnabled = False
- @staticmethod
- def enablePackrat(cache_size_limit=128):
- """Enables "packrat" parsing, which adds memoizing to the parsing logic.
- Repeated parse attempts at the same string location (which happens
- often in many complex grammars) can immediately return a cached value,
- instead of re-executing parsing/validating code. Memoizing is done of
- both valid results and parsing exceptions.
-
- Parameters:
- - cache_size_limit - (default=C{128}) - if an integer value is provided
- will limit the size of the packrat cache; if None is passed, then
- the cache size will be unbounded; if 0 is passed, the cache will
- be effectively disabled.
-
- This speedup may break existing programs that use parse actions that
- have side-effects. For this reason, packrat parsing is disabled when
- you first import pyparsing. To activate the packrat feature, your
- program must call the class method C{ParserElement.enablePackrat()}. If
- your program uses C{psyco} to "compile as you go", you must call
- C{enablePackrat} before calling C{psyco.full()}. If you do not do this,
- Python will crash. For best results, call C{enablePackrat()} immediately
- after importing pyparsing.
-
- Example::
- import pyparsing
- pyparsing.ParserElement.enablePackrat()
- """
- if not ParserElement._packratEnabled:
- ParserElement._packratEnabled = True
- if cache_size_limit is None:
- ParserElement.packrat_cache = ParserElement._UnboundedCache()
- else:
- ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit)
- ParserElement._parse = ParserElement._parseCache
-
- def parseString( self, instring, parseAll=False ):
- """
- Execute the parse expression with the given string.
- This is the main interface to the client code, once the complete
- expression has been built.
-
- If you want the grammar to require that the entire input string be
- successfully parsed, then set C{parseAll} to True (equivalent to ending
- the grammar with C{L{StringEnd()}}).
-
- Note: C{parseString} implicitly calls C{expandtabs()} on the input string,
- in order to report proper column numbers in parse actions.
- If the input string contains tabs and
- the grammar uses parse actions that use the C{loc} argument to index into the
- string being parsed, you can ensure you have a consistent view of the input
- string by:
- - calling C{parseWithTabs} on your grammar before calling C{parseString}
- (see L{I{parseWithTabs}<parseWithTabs>})
- - define your parse action using the full C{(s,loc,toks)} signature, and
- reference the input string using the parse action's C{s} argument
- - explictly expand the tabs in your input string before calling
- C{parseString}
-
- Example::
- Word('a').parseString('aaaaabaaa') # -> ['aaaaa']
- Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text
- """
- ParserElement.resetCache()
- if not self.streamlined:
- self.streamline()
- #~ self.saveAsList = True
- for e in self.ignoreExprs:
- e.streamline()
- if not self.keepTabs:
- instring = instring.expandtabs()
- try:
- loc, tokens = self._parse( instring, 0 )
- if parseAll:
- loc = self.preParse( instring, loc )
- se = Empty() + StringEnd()
- se._parse( instring, loc )
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
- else:
- return tokens
-
- def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ):
- """
- Scan the input string for expression matches. Each match will return the
- matching tokens, start location, and end location. May be called with optional
- C{maxMatches} argument, to clip scanning after 'n' matches are found. If
- C{overlap} is specified, then overlapping matches will be reported.
-
- Note that the start and end locations are reported relative to the string
- being parsed. See L{I{parseString}<parseString>} for more information on parsing
- strings with embedded tabs.
-
- Example::
- source = "sldjf123lsdjjkf345sldkjf879lkjsfd987"
- print(source)
- for tokens,start,end in Word(alphas).scanString(source):
- print(' '*start + '^'*(end-start))
- print(' '*start + tokens[0])
-
- prints::
-
- sldjf123lsdjjkf345sldkjf879lkjsfd987
- ^^^^^
- sldjf
- ^^^^^^^
- lsdjjkf
- ^^^^^^
- sldkjf
- ^^^^^^
- lkjsfd
- """
- if not self.streamlined:
- self.streamline()
- for e in self.ignoreExprs:
- e.streamline()
-
- if not self.keepTabs:
- instring = _ustr(instring).expandtabs()
- instrlen = len(instring)
- loc = 0
- preparseFn = self.preParse
- parseFn = self._parse
- ParserElement.resetCache()
- matches = 0
- try:
- while loc <= instrlen and matches < maxMatches:
- try:
- preloc = preparseFn( instring, loc )
- nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
- except ParseException:
- loc = preloc+1
- else:
- if nextLoc > loc:
- matches += 1
- yield tokens, preloc, nextLoc
- if overlap:
- nextloc = preparseFn( instring, loc )
- if nextloc > loc:
- loc = nextLoc
- else:
- loc += 1
- else:
- loc = nextLoc
- else:
- loc = preloc+1
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def transformString( self, instring ):
- """
- Extension to C{L{scanString}}, to modify matching text with modified tokens that may
- be returned from a parse action. To use C{transformString}, define a grammar and
- attach a parse action to it that modifies the returned token list.
- Invoking C{transformString()} on a target string will then scan for matches,
- and replace the matched text patterns according to the logic in the parse
- action. C{transformString()} returns the resulting transformed string.
-
- Example::
- wd = Word(alphas)
- wd.setParseAction(lambda toks: toks[0].title())
-
- print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york."))
- Prints::
- Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York.
- """
- out = []
- lastE = 0
- # force preservation of <TAB>s, to minimize unwanted transformation of string, and to
- # keep string locs straight between transformString and scanString
- self.keepTabs = True
- try:
- for t,s,e in self.scanString( instring ):
- out.append( instring[lastE:s] )
- if t:
- if isinstance(t,ParseResults):
- out += t.asList()
- elif isinstance(t,list):
- out += t
- else:
- out.append(t)
- lastE = e
- out.append(instring[lastE:])
- out = [o for o in out if o]
- return "".join(map(_ustr,_flatten(out)))
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def searchString( self, instring, maxMatches=_MAX_INT ):
- """
- Another extension to C{L{scanString}}, simplifying the access to the tokens found
- to match the given parse expression. May be called with optional
- C{maxMatches} argument, to clip searching after 'n' matches are found.
-
- Example::
- # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters
- cap_word = Word(alphas.upper(), alphas.lower())
-
- print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))
-
- # the sum() builtin can be used to merge results into a single ParseResults object
- print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")))
- prints::
- [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']]
- ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity']
- """
- try:
- return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False):
- """
- Generator method to split a string using the given expression as a separator.
- May be called with optional C{maxsplit} argument, to limit the number of splits;
- and the optional C{includeSeparators} argument (default=C{False}), if the separating
- matching text should be included in the split results.
-
- Example::
- punc = oneOf(list(".,;:/-!?"))
- print(list(punc.split("This, this?, this sentence, is badly punctuated!")))
- prints::
- ['This', ' this', '', ' this sentence', ' is badly punctuated', '']
- """
- splits = 0
- last = 0
- for t,s,e in self.scanString(instring, maxMatches=maxsplit):
- yield instring[last:s]
- if includeSeparators:
- yield t[0]
- last = e
- yield instring[last:]
-
- def __add__(self, other ):
- """
- Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement
- converts them to L{Literal}s by default.
-
- Example::
- greet = Word(alphas) + "," + Word(alphas) + "!"
- hello = "Hello, World!"
- print (hello, "->", greet.parseString(hello))
- Prints::
- Hello, World! -> ['Hello', ',', 'World', '!']
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return And( [ self, other ] )
-
- def __radd__(self, other ):
- """
- Implementation of + operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other + self
-
- def __sub__(self, other):
- """
- Implementation of - operator, returns C{L{And}} with error stop
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return self + And._ErrorStop() + other
-
- def __rsub__(self, other ):
- """
- Implementation of - operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other - self
-
- def __mul__(self,other):
- """
- Implementation of * operator, allows use of C{expr * 3} in place of
- C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer
- tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples
- may also include C{None} as in:
- - C{expr*(n,None)} or C{expr*(n,)} is equivalent
- to C{expr*n + L{ZeroOrMore}(expr)}
- (read as "at least n instances of C{expr}")
- - C{expr*(None,n)} is equivalent to C{expr*(0,n)}
- (read as "0 to n instances of C{expr}")
- - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)}
- - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)}
-
- Note that C{expr*(None,n)} does not raise an exception if
- more than n exprs exist in the input stream; that is,
- C{expr*(None,n)} does not enforce a maximum number of expr
- occurrences. If this behavior is desired, then write
- C{expr*(None,n) + ~expr}
- """
- if isinstance(other,int):
- minElements, optElements = other,0
- elif isinstance(other,tuple):
- other = (other + (None, None))[:2]
- if other[0] is None:
- other = (0, other[1])
- if isinstance(other[0],int) and other[1] is None:
- if other[0] == 0:
- return ZeroOrMore(self)
- if other[0] == 1:
- return OneOrMore(self)
- else:
- return self*other[0] + ZeroOrMore(self)
- elif isinstance(other[0],int) and isinstance(other[1],int):
- minElements, optElements = other
- optElements -= minElements
- else:
- raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1]))
- else:
- raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other))
-
- if minElements < 0:
- raise ValueError("cannot multiply ParserElement by negative value")
- if optElements < 0:
- raise ValueError("second tuple value must be greater or equal to first tuple value")
- if minElements == optElements == 0:
- raise ValueError("cannot multiply ParserElement by 0 or (0,0)")
-
- if (optElements):
- def makeOptionalList(n):
- if n>1:
- return Optional(self + makeOptionalList(n-1))
- else:
- return Optional(self)
- if minElements:
- if minElements == 1:
- ret = self + makeOptionalList(optElements)
- else:
- ret = And([self]*minElements) + makeOptionalList(optElements)
- else:
- ret = makeOptionalList(optElements)
- else:
- if minElements == 1:
- ret = self
- else:
- ret = And([self]*minElements)
- return ret
-
- def __rmul__(self, other):
- return self.__mul__(other)
-
- def __or__(self, other ):
- """
- Implementation of | operator - returns C{L{MatchFirst}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return MatchFirst( [ self, other ] )
-
- def __ror__(self, other ):
- """
- Implementation of | operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other | self
-
- def __xor__(self, other ):
- """
- Implementation of ^ operator - returns C{L{Or}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return Or( [ self, other ] )
-
- def __rxor__(self, other ):
- """
- Implementation of ^ operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other ^ self
-
- def __and__(self, other ):
- """
- Implementation of & operator - returns C{L{Each}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return Each( [ self, other ] )
-
- def __rand__(self, other ):
- """
- Implementation of & operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other & self
-
- def __invert__( self ):
- """
- Implementation of ~ operator - returns C{L{NotAny}}
- """
- return NotAny( self )
-
- def __call__(self, name=None):
- """
- Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}.
-
- If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be
- passed as C{True}.
-
- If C{name} is omitted, same as calling C{L{copy}}.
-
- Example::
- # these are equivalent
- userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno")
- userdata = Word(alphas)("name") + Word(nums+"-")("socsecno")
- """
- if name is not None:
- return self.setResultsName(name)
- else:
- return self.copy()
-
- def suppress( self ):
- """
- Suppresses the output of this C{ParserElement}; useful to keep punctuation from
- cluttering up returned output.
- """
- return Suppress( self )
-
- def leaveWhitespace( self ):
- """
- Disables the skipping of whitespace before matching the characters in the
- C{ParserElement}'s defined pattern. This is normally only used internally by
- the pyparsing module, but may be needed in some whitespace-sensitive grammars.
- """
- self.skipWhitespace = False
- return self
-
- def setWhitespaceChars( self, chars ):
- """
- Overrides the default whitespace chars
- """
- self.skipWhitespace = True
- self.whiteChars = chars
- self.copyDefaultWhiteChars = False
- return self
-
- def parseWithTabs( self ):
- """
- Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string.
- Must be called before C{parseString} when the input grammar contains elements that
- match C{<TAB>} characters.
- """
- self.keepTabs = True
- return self
-
- def ignore( self, other ):
- """
- Define expression to be ignored (e.g., comments) while doing pattern
- matching; may be called repeatedly, to define multiple comment or other
- ignorable patterns.
-
- Example::
- patt = OneOrMore(Word(alphas))
- patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj']
-
- patt.ignore(cStyleComment)
- patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd']
- """
- if isinstance(other, basestring):
- other = Suppress(other)
-
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- self.ignoreExprs.append(other)
- else:
- self.ignoreExprs.append( Suppress( other.copy() ) )
- return self
-
- def setDebugActions( self, startAction, successAction, exceptionAction ):
- """
- Enable display of debugging messages while doing pattern matching.
- """
- self.debugActions = (startAction or _defaultStartDebugAction,
- successAction or _defaultSuccessDebugAction,
- exceptionAction or _defaultExceptionDebugAction)
- self.debug = True
- return self
-
- def setDebug( self, flag=True ):
- """
- Enable display of debugging messages while doing pattern matching.
- Set C{flag} to True to enable, False to disable.
-
- Example::
- wd = Word(alphas).setName("alphaword")
- integer = Word(nums).setName("numword")
- term = wd | integer
-
- # turn on debugging for wd
- wd.setDebug()
-
- OneOrMore(term).parseString("abc 123 xyz 890")
-
- prints::
- Match alphaword at loc 0(1,1)
- Matched alphaword -> ['abc']
- Match alphaword at loc 3(1,4)
- Exception raised:Expected alphaword (at char 4), (line:1, col:5)
- Match alphaword at loc 7(1,8)
- Matched alphaword -> ['xyz']
- Match alphaword at loc 11(1,12)
- Exception raised:Expected alphaword (at char 12), (line:1, col:13)
- Match alphaword at loc 15(1,16)
- Exception raised:Expected alphaword (at char 15), (line:1, col:16)
-
- The output shown is that produced by the default debug actions - custom debug actions can be
- specified using L{setDebugActions}. Prior to attempting
- to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"}
- is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"}
- message is shown. Also note the use of L{setName} to assign a human-readable name to the expression,
- which makes debugging and exception messages easier to understand - for instance, the default
- name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}.
- """
- if flag:
- self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction )
- else:
- self.debug = False
- return self
-
- def __str__( self ):
- return self.name
-
- def __repr__( self ):
- return _ustr(self)
-
- def streamline( self ):
- self.streamlined = True
- self.strRepr = None
- return self
-
- def checkRecursion( self, parseElementList ):
- pass
-
- def validate( self, validateTrace=[] ):
- """
- Check defined expressions for valid structure, check for infinite recursive definitions.
- """
- self.checkRecursion( [] )
-
- def parseFile( self, file_or_filename, parseAll=False ):
- """
- Execute the parse expression on the given file or filename.
- If a filename is specified (instead of a file object),
- the entire file is opened, read, and closed before parsing.
- """
- try:
- file_contents = file_or_filename.read()
- except AttributeError:
- with open(file_or_filename, "r") as f:
- file_contents = f.read()
- try:
- return self.parseString(file_contents, parseAll)
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def __eq__(self,other):
- if isinstance(other, ParserElement):
- return self is other or vars(self) == vars(other)
- elif isinstance(other, basestring):
- return self.matches(other)
- else:
- return super(ParserElement,self)==other
-
- def __ne__(self,other):
- return not (self == other)
-
- def __hash__(self):
- return hash(id(self))
-
- def __req__(self,other):
- return self == other
-
- def __rne__(self,other):
- return not (self == other)
-
- def matches(self, testString, parseAll=True):
- """
- Method for quick testing of a parser against a test string. Good for simple
- inline microtests of sub expressions while building up larger parser.
-
- Parameters:
- - testString - to test against this expression for a match
- - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
-
- Example::
- expr = Word(nums)
- assert expr.matches("100")
- """
- try:
- self.parseString(_ustr(testString), parseAll=parseAll)
- return True
- except ParseBaseException:
- return False
-
- def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False):
- """
- Execute the parse expression on a series of test strings, showing each
- test, the parsed results or where the parse failed. Quick and easy way to
- run a parse expression against a list of sample strings.
-
- Parameters:
- - tests - a list of separate test strings, or a multiline string of test strings
- - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
- - comment - (default=C{'#'}) - expression for indicating embedded comments in the test
- string; pass None to disable comment filtering
- - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline;
- if False, only dump nested list
- - printResults - (default=C{True}) prints test output to stdout
- - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing
-
- Returns: a (success, results) tuple, where success indicates that all tests succeeded
- (or failed if C{failureTests} is True), and the results contain a list of lines of each
- test's output
-
- Example::
- number_expr = pyparsing_common.number.copy()
-
- result = number_expr.runTests('''
- # unsigned integer
- 100
- # negative integer
- -100
- # float with scientific notation
- 6.02e23
- # integer with scientific notation
- 1e-12
- ''')
- print("Success" if result[0] else "Failed!")
-
- result = number_expr.runTests('''
- # stray character
- 100Z
- # missing leading digit before '.'
- -.100
- # too many '.'
- 3.14.159
- ''', failureTests=True)
- print("Success" if result[0] else "Failed!")
- prints::
- # unsigned integer
- 100
- [100]
-
- # negative integer
- -100
- [-100]
-
- # float with scientific notation
- 6.02e23
- [6.02e+23]
-
- # integer with scientific notation
- 1e-12
- [1e-12]
-
- Success
-
- # stray character
- 100Z
- ^
- FAIL: Expected end of text (at char 3), (line:1, col:4)
-
- # missing leading digit before '.'
- -.100
- ^
- FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1)
-
- # too many '.'
- 3.14.159
- ^
- FAIL: Expected end of text (at char 4), (line:1, col:5)
-
- Success
-
- Each test string must be on a single line. If you want to test a string that spans multiple
- lines, create a test like this::
-
- expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines")
-
- (Note that this is a raw string literal, you must include the leading 'r'.)
- """
- if isinstance(tests, basestring):
- tests = list(map(str.strip, tests.rstrip().splitlines()))
- if isinstance(comment, basestring):
- comment = Literal(comment)
- allResults = []
- comments = []
- success = True
- for t in tests:
- if comment is not None and comment.matches(t, False) or comments and not t:
- comments.append(t)
- continue
- if not t:
- continue
- out = ['\n'.join(comments), t]
- comments = []
- try:
- t = t.replace(r'\n','\n')
- result = self.parseString(t, parseAll=parseAll)
- out.append(result.dump(full=fullDump))
- success = success and not failureTests
- except ParseBaseException as pe:
- fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else ""
- if '\n' in t:
- out.append(line(pe.loc, t))
- out.append(' '*(col(pe.loc,t)-1) + '^' + fatal)
- else:
- out.append(' '*pe.loc + '^' + fatal)
- out.append("FAIL: " + str(pe))
- success = success and failureTests
- result = pe
- except Exception as exc:
- out.append("FAIL-EXCEPTION: " + str(exc))
- success = success and failureTests
- result = exc
-
- if printResults:
- if fullDump:
- out.append('')
- print('\n'.join(out))
-
- allResults.append((t, result))
-
- return success, allResults
-
-
-class Token(ParserElement):
- """
- Abstract C{ParserElement} subclass, for defining atomic matching patterns.
- """
- def __init__( self ):
- super(Token,self).__init__( savelist=False )
-
-
-class Empty(Token):
- """
- An empty token, will always match.
- """
- def __init__( self ):
- super(Empty,self).__init__()
- self.name = "Empty"
- self.mayReturnEmpty = True
- self.mayIndexError = False
-
-
-class NoMatch(Token):
- """
- A token that will never match.
- """
- def __init__( self ):
- super(NoMatch,self).__init__()
- self.name = "NoMatch"
- self.mayReturnEmpty = True
- self.mayIndexError = False
- self.errmsg = "Unmatchable token"
-
- def parseImpl( self, instring, loc, doActions=True ):
- raise ParseException(instring, loc, self.errmsg, self)
-
-
-class Literal(Token):
- """
- Token to exactly match a specified string.
-
- Example::
- Literal('blah').parseString('blah') # -> ['blah']
- Literal('blah').parseString('blahfooblah') # -> ['blah']
- Literal('blah').parseString('bla') # -> Exception: Expected "blah"
-
- For case-insensitive matching, use L{CaselessLiteral}.
-
- For keyword matching (force word break before and after the matched string),
- use L{Keyword} or L{CaselessKeyword}.
- """
- def __init__( self, matchString ):
- super(Literal,self).__init__()
- self.match = matchString
- self.matchLen = len(matchString)
- try:
- self.firstMatchChar = matchString[0]
- except IndexError:
- warnings.warn("null string passed to Literal; use Empty() instead",
- SyntaxWarning, stacklevel=2)
- self.__class__ = Empty
- self.name = '"%s"' % _ustr(self.match)
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = False
- self.mayIndexError = False
-
- # Performance tuning: this routine gets called a *lot*
- # if this is a single character match string and the first character matches,
- # short-circuit as quickly as possible, and avoid calling startswith
- #~ @profile
- def parseImpl( self, instring, loc, doActions=True ):
- if (instring[loc] == self.firstMatchChar and
- (self.matchLen==1 or instring.startswith(self.match,loc)) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-_L = Literal
-ParserElement._literalStringClass = Literal
-
-class Keyword(Token):
- """
- Token to exactly match a specified string as a keyword, that is, it must be
- immediately followed by a non-keyword character. Compare with C{L{Literal}}:
- - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}.
- - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'}
- Accepts two optional constructor arguments in addition to the keyword string:
- - C{identChars} is a string of characters that would be valid identifier characters,
- defaulting to all alphanumerics + "_" and "$"
- - C{caseless} allows case-insensitive matching, default is C{False}.
-
- Example::
- Keyword("start").parseString("start") # -> ['start']
- Keyword("start").parseString("starting") # -> Exception
-
- For case-insensitive matching, use L{CaselessKeyword}.
- """
- DEFAULT_KEYWORD_CHARS = alphanums+"_$"
-
- def __init__( self, matchString, identChars=None, caseless=False ):
- super(Keyword,self).__init__()
- if identChars is None:
- identChars = Keyword.DEFAULT_KEYWORD_CHARS
- self.match = matchString
- self.matchLen = len(matchString)
- try:
- self.firstMatchChar = matchString[0]
- except IndexError:
- warnings.warn("null string passed to Keyword; use Empty() instead",
- SyntaxWarning, stacklevel=2)
- self.name = '"%s"' % self.match
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = False
- self.mayIndexError = False
- self.caseless = caseless
- if caseless:
- self.caselessmatch = matchString.upper()
- identChars = identChars.upper()
- self.identChars = set(identChars)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.caseless:
- if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and
- (loc == 0 or instring[loc-1].upper() not in self.identChars) ):
- return loc+self.matchLen, self.match
- else:
- if (instring[loc] == self.firstMatchChar and
- (self.matchLen==1 or instring.startswith(self.match,loc)) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and
- (loc == 0 or instring[loc-1] not in self.identChars) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-
- def copy(self):
- c = super(Keyword,self).copy()
- c.identChars = Keyword.DEFAULT_KEYWORD_CHARS
- return c
-
- @staticmethod
- def setDefaultKeywordChars( chars ):
- """Overrides the default Keyword chars
- """
- Keyword.DEFAULT_KEYWORD_CHARS = chars
-
-class CaselessLiteral(Literal):
- """
- Token to match a specified string, ignoring case of letters.
- Note: the matched results will always be in the case of the given
- match string, NOT the case of the input text.
-
- Example::
- OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD']
-
- (Contrast with example for L{CaselessKeyword}.)
- """
- def __init__( self, matchString ):
- super(CaselessLiteral,self).__init__( matchString.upper() )
- # Preserve the defining literal.
- self.returnString = matchString
- self.name = "'%s'" % self.returnString
- self.errmsg = "Expected " + self.name
-
- def parseImpl( self, instring, loc, doActions=True ):
- if instring[ loc:loc+self.matchLen ].upper() == self.match:
- return loc+self.matchLen, self.returnString
- raise ParseException(instring, loc, self.errmsg, self)
-
-class CaselessKeyword(Keyword):
- """
- Caseless version of L{Keyword}.
-
- Example::
- OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD']
-
- (Contrast with example for L{CaselessLiteral}.)
- """
- def __init__( self, matchString, identChars=None ):
- super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True )
-
- def parseImpl( self, instring, loc, doActions=True ):
- if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-
-class CloseMatch(Token):
- """
- A variation on L{Literal} which matches "close" matches, that is,
- strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters:
- - C{match_string} - string to be matched
- - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match
-
- The results from a successful parse will contain the matched text from the input string and the following named results:
- - C{mismatches} - a list of the positions within the match_string where mismatches were found
- - C{original} - the original match_string used to compare against the input string
-
- If C{mismatches} is an empty list, then the match was an exact match.
-
- Example::
- patt = CloseMatch("ATCATCGAATGGA")
- patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']})
- patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1)
-
- # exact match
- patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']})
-
- # close match allowing up to 2 mismatches
- patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2)
- patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']})
- """
- def __init__(self, match_string, maxMismatches=1):
- super(CloseMatch,self).__init__()
- self.name = match_string
- self.match_string = match_string
- self.maxMismatches = maxMismatches
- self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches)
- self.mayIndexError = False
- self.mayReturnEmpty = False
-
- def parseImpl( self, instring, loc, doActions=True ):
- start = loc
- instrlen = len(instring)
- maxloc = start + len(self.match_string)
-
- if maxloc <= instrlen:
- match_string = self.match_string
- match_stringloc = 0
- mismatches = []
- maxMismatches = self.maxMismatches
-
- for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)):
- src,mat = s_m
- if src != mat:
- mismatches.append(match_stringloc)
- if len(mismatches) > maxMismatches:
- break
- else:
- loc = match_stringloc + 1
- results = ParseResults([instring[start:loc]])
- results['original'] = self.match_string
- results['mismatches'] = mismatches
- return loc, results
-
- raise ParseException(instring, loc, self.errmsg, self)
-
-
-class Word(Token):
- """
- Token for matching words composed of allowed character sets.
- Defined with string containing all allowed initial characters,
- an optional string containing allowed body characters (if omitted,
- defaults to the initial character set), and an optional minimum,
- maximum, and/or exact length. The default value for C{min} is 1 (a
- minimum value < 1 is not valid); the default values for C{max} and C{exact}
- are 0, meaning no maximum or exact length restriction. An optional
- C{excludeChars} parameter can list characters that might be found in
- the input C{bodyChars} string; useful to define a word of all printables
- except for one or two characters, for instance.
-
- L{srange} is useful for defining custom character set strings for defining
- C{Word} expressions, using range notation from regular expression character sets.
-
- A common mistake is to use C{Word} to match a specific literal string, as in
- C{Word("Address")}. Remember that C{Word} uses the string argument to define
- I{sets} of matchable characters. This expression would match "Add", "AAA",
- "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'.
- To match an exact literal string, use L{Literal} or L{Keyword}.
-
- pyparsing includes helper strings for building Words:
- - L{alphas}
- - L{nums}
- - L{alphanums}
- - L{hexnums}
- - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.)
- - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.)
- - L{printables} (any non-whitespace character)
-
- Example::
- # a word composed of digits
- integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9"))
-
- # a word with a leading capital, and zero or more lowercase
- capital_word = Word(alphas.upper(), alphas.lower())
-
- # hostnames are alphanumeric, with leading alpha, and '-'
- hostname = Word(alphas, alphanums+'-')
-
- # roman numeral (not a strict parser, accepts invalid mix of characters)
- roman = Word("IVXLCDM")
-
- # any string of non-whitespace characters, except for ','
- csv_value = Word(printables, excludeChars=",")
- """
- def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ):
- super(Word,self).__init__()
- if excludeChars:
- initChars = ''.join(c for c in initChars if c not in excludeChars)
- if bodyChars:
- bodyChars = ''.join(c for c in bodyChars if c not in excludeChars)
- self.initCharsOrig = initChars
- self.initChars = set(initChars)
- if bodyChars :
- self.bodyCharsOrig = bodyChars
- self.bodyChars = set(bodyChars)
- else:
- self.bodyCharsOrig = initChars
- self.bodyChars = set(initChars)
-
- self.maxSpecified = max > 0
-
- if min < 1:
- raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted")
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.asKeyword = asKeyword
-
- if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0):
- if self.bodyCharsOrig == self.initCharsOrig:
- self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig)
- elif len(self.initCharsOrig) == 1:
- self.reString = "%s[%s]*" % \
- (re.escape(self.initCharsOrig),
- _escapeRegexRangeChars(self.bodyCharsOrig),)
- else:
- self.reString = "[%s][%s]*" % \
- (_escapeRegexRangeChars(self.initCharsOrig),
- _escapeRegexRangeChars(self.bodyCharsOrig),)
- if self.asKeyword:
- self.reString = r"\b"+self.reString+r"\b"
- try:
- self.re = re.compile( self.reString )
- except Exception:
- self.re = None
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.re:
- result = self.re.match(instring,loc)
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- return loc, result.group()
-
- if not(instring[ loc ] in self.initChars):
- raise ParseException(instring, loc, self.errmsg, self)
-
- start = loc
- loc += 1
- instrlen = len(instring)
- bodychars = self.bodyChars
- maxloc = start + self.maxLen
- maxloc = min( maxloc, instrlen )
- while loc < maxloc and instring[loc] in bodychars:
- loc += 1
-
- throwException = False
- if loc - start < self.minLen:
- throwException = True
- if self.maxSpecified and loc < instrlen and instring[loc] in bodychars:
- throwException = True
- if self.asKeyword:
- if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars):
- throwException = True
-
- if throwException:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
- def __str__( self ):
- try:
- return super(Word,self).__str__()
- except Exception:
- pass
-
-
- if self.strRepr is None:
-
- def charsAsStr(s):
- if len(s)>4:
- return s[:4]+"..."
- else:
- return s
-
- if ( self.initCharsOrig != self.bodyCharsOrig ):
- self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) )
- else:
- self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig)
-
- return self.strRepr
-
-
-class Regex(Token):
- r"""
- Token for matching strings that match a given regular expression.
- Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
- If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as
- named parse results.
-
- Example::
- realnum = Regex(r"[+-]?\d+\.\d*")
- date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)')
- # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
- roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})")
- """
- compiledREtype = type(re.compile("[A-Z]"))
- def __init__( self, pattern, flags=0):
- """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags."""
- super(Regex,self).__init__()
-
- if isinstance(pattern, basestring):
- if not pattern:
- warnings.warn("null string passed to Regex; use Empty() instead",
- SyntaxWarning, stacklevel=2)
-
- self.pattern = pattern
- self.flags = flags
-
- try:
- self.re = re.compile(self.pattern, self.flags)
- self.reString = self.pattern
- except sre_constants.error:
- warnings.warn("invalid pattern (%s) passed to Regex" % pattern,
- SyntaxWarning, stacklevel=2)
- raise
-
- elif isinstance(pattern, Regex.compiledREtype):
- self.re = pattern
- self.pattern = \
- self.reString = str(pattern)
- self.flags = flags
-
- else:
- raise ValueError("Regex may only be constructed with a string or a compiled RE object")
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- result = self.re.match(instring,loc)
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- d = result.groupdict()
- ret = ParseResults(result.group())
- if d:
- for k in d:
- ret[k] = d[k]
- return loc,ret
-
- def __str__( self ):
- try:
- return super(Regex,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "Re:(%s)" % repr(self.pattern)
-
- return self.strRepr
-
-
-class QuotedString(Token):
- r"""
- Token for matching strings that are delimited by quoting characters.
-
- Defined with the following parameters:
- - quoteChar - string of one or more characters defining the quote delimiting string
- - escChar - character to escape quotes, typically backslash (default=C{None})
- - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None})
- - multiline - boolean indicating whether quotes can span multiple lines (default=C{False})
- - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True})
- - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar)
- - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True})
-
- Example::
- qs = QuotedString('"')
- print(qs.searchString('lsjdf "This is the quote" sldjf'))
- complex_qs = QuotedString('{{', endQuoteChar='}}')
- print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf'))
- sql_qs = QuotedString('"', escQuote='""')
- print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf'))
- prints::
- [['This is the quote']]
- [['This is the "quote"']]
- [['This is the quote with "embedded" quotes']]
- """
- def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True):
- super(QuotedString,self).__init__()
-
- # remove white space from quote chars - wont work anyway
- quoteChar = quoteChar.strip()
- if not quoteChar:
- warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
- raise SyntaxError()
-
- if endQuoteChar is None:
- endQuoteChar = quoteChar
- else:
- endQuoteChar = endQuoteChar.strip()
- if not endQuoteChar:
- warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
- raise SyntaxError()
-
- self.quoteChar = quoteChar
- self.quoteCharLen = len(quoteChar)
- self.firstQuoteChar = quoteChar[0]
- self.endQuoteChar = endQuoteChar
- self.endQuoteCharLen = len(endQuoteChar)
- self.escChar = escChar
- self.escQuote = escQuote
- self.unquoteResults = unquoteResults
- self.convertWhitespaceEscapes = convertWhitespaceEscapes
-
- if multiline:
- self.flags = re.MULTILINE | re.DOTALL
- self.pattern = r'%s(?:[^%s%s]' % \
- ( re.escape(self.quoteChar),
- _escapeRegexRangeChars(self.endQuoteChar[0]),
- (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
- else:
- self.flags = 0
- self.pattern = r'%s(?:[^%s\n\r%s]' % \
- ( re.escape(self.quoteChar),
- _escapeRegexRangeChars(self.endQuoteChar[0]),
- (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
- if len(self.endQuoteChar) > 1:
- self.pattern += (
- '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]),
- _escapeRegexRangeChars(self.endQuoteChar[i]))
- for i in range(len(self.endQuoteChar)-1,0,-1)) + ')'
- )
- if escQuote:
- self.pattern += (r'|(?:%s)' % re.escape(escQuote))
- if escChar:
- self.pattern += (r'|(?:%s.)' % re.escape(escChar))
- self.escCharReplacePattern = re.escape(self.escChar)+"(.)"
- self.pattern += (r')*%s' % re.escape(self.endQuoteChar))
-
- try:
- self.re = re.compile(self.pattern, self.flags)
- self.reString = self.pattern
- except sre_constants.error:
- warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern,
- SyntaxWarning, stacklevel=2)
- raise
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- ret = result.group()
-
- if self.unquoteResults:
-
- # strip off quotes
- ret = ret[self.quoteCharLen:-self.endQuoteCharLen]
-
- if isinstance(ret,basestring):
- # replace escaped whitespace
- if '\\' in ret and self.convertWhitespaceEscapes:
- ws_map = {
- r'\t' : '\t',
- r'\n' : '\n',
- r'\f' : '\f',
- r'\r' : '\r',
- }
- for wslit,wschar in ws_map.items():
- ret = ret.replace(wslit, wschar)
-
- # replace escaped characters
- if self.escChar:
- ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret)
-
- # replace escaped quotes
- if self.escQuote:
- ret = ret.replace(self.escQuote, self.endQuoteChar)
-
- return loc, ret
-
- def __str__( self ):
- try:
- return super(QuotedString,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar)
-
- return self.strRepr
-
-
-class CharsNotIn(Token):
- """
- Token for matching words composed of characters I{not} in a given set (will
- include whitespace in matched characters if not listed in the provided exclusion set - see example).
- Defined with string containing all disallowed characters, and an optional
- minimum, maximum, and/or exact length. The default value for C{min} is 1 (a
- minimum value < 1 is not valid); the default values for C{max} and C{exact}
- are 0, meaning no maximum or exact length restriction.
-
- Example::
- # define a comma-separated-value as anything that is not a ','
- csv_value = CharsNotIn(',')
- print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213"))
- prints::
- ['dkls', 'lsdkjf', 's12 34', '@!#', '213']
- """
- def __init__( self, notChars, min=1, max=0, exact=0 ):
- super(CharsNotIn,self).__init__()
- self.skipWhitespace = False
- self.notChars = notChars
-
- if min < 1:
- raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted")
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = ( self.minLen == 0 )
- self.mayIndexError = False
-
- def parseImpl( self, instring, loc, doActions=True ):
- if instring[loc] in self.notChars:
- raise ParseException(instring, loc, self.errmsg, self)
-
- start = loc
- loc += 1
- notchars = self.notChars
- maxlen = min( start+self.maxLen, len(instring) )
- while loc < maxlen and \
- (instring[loc] not in notchars):
- loc += 1
-
- if loc - start < self.minLen:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
- def __str__( self ):
- try:
- return super(CharsNotIn, self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- if len(self.notChars) > 4:
- self.strRepr = "!W:(%s...)" % self.notChars[:4]
- else:
- self.strRepr = "!W:(%s)" % self.notChars
-
- return self.strRepr
-
-class White(Token):
- """
- Special matching class for matching whitespace. Normally, whitespace is ignored
- by pyparsing grammars. This class is included when some whitespace structures
- are significant. Define with a string containing the whitespace characters to be
- matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments,
- as defined for the C{L{Word}} class.
- """
- whiteStrs = {
- " " : "<SPC>",
- "\t": "<TAB>",
- "\n": "<LF>",
- "\r": "<CR>",
- "\f": "<FF>",
- }
- def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0):
- super(White,self).__init__()
- self.matchWhite = ws
- self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) )
- #~ self.leaveWhitespace()
- self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite))
- self.mayReturnEmpty = True
- self.errmsg = "Expected " + self.name
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- def parseImpl( self, instring, loc, doActions=True ):
- if not(instring[ loc ] in self.matchWhite):
- raise ParseException(instring, loc, self.errmsg, self)
- start = loc
- loc += 1
- maxloc = start + self.maxLen
- maxloc = min( maxloc, len(instring) )
- while loc < maxloc and instring[loc] in self.matchWhite:
- loc += 1
-
- if loc - start < self.minLen:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
-
-class _PositionToken(Token):
- def __init__( self ):
- super(_PositionToken,self).__init__()
- self.name=self.__class__.__name__
- self.mayReturnEmpty = True
- self.mayIndexError = False
-
-class GoToColumn(_PositionToken):
- """
- Token to advance to a specific column of input text; useful for tabular report scraping.
- """
- def __init__( self, colno ):
- super(GoToColumn,self).__init__()
- self.col = colno
-
- def preParse( self, instring, loc ):
- if col(loc,instring) != self.col:
- instrlen = len(instring)
- if self.ignoreExprs:
- loc = self._skipIgnorables( instring, loc )
- while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col :
- loc += 1
- return loc
-
- def parseImpl( self, instring, loc, doActions=True ):
- thiscol = col( loc, instring )
- if thiscol > self.col:
- raise ParseException( instring, loc, "Text not in expected column", self )
- newloc = loc + self.col - thiscol
- ret = instring[ loc: newloc ]
- return newloc, ret
-
-
-class LineStart(_PositionToken):
- """
- Matches if current position is at the beginning of a line within the parse string
-
- Example::
-
- test = '''\
- AAA this line
- AAA and this line
- AAA but not this one
- B AAA and definitely not this one
- '''
-
- for t in (LineStart() + 'AAA' + restOfLine).searchString(test):
- print(t)
-
- Prints::
- ['AAA', ' this line']
- ['AAA', ' and this line']
-
- """
- def __init__( self ):
- super(LineStart,self).__init__()
- self.errmsg = "Expected start of line"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if col(loc, instring) == 1:
- return loc, []
- raise ParseException(instring, loc, self.errmsg, self)
-
-class LineEnd(_PositionToken):
- """
- Matches if current position is at the end of a line within the parse string
- """
- def __init__( self ):
- super(LineEnd,self).__init__()
- self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") )
- self.errmsg = "Expected end of line"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc<len(instring):
- if instring[loc] == "\n":
- return loc+1, "\n"
- else:
- raise ParseException(instring, loc, self.errmsg, self)
- elif loc == len(instring):
- return loc+1, []
- else:
- raise ParseException(instring, loc, self.errmsg, self)
-
-class StringStart(_PositionToken):
- """
- Matches if current position is at the beginning of the parse string
- """
- def __init__( self ):
- super(StringStart,self).__init__()
- self.errmsg = "Expected start of text"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc != 0:
- # see if entire string up to here is just whitespace and ignoreables
- if loc != self.preParse( instring, 0 ):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-class StringEnd(_PositionToken):
- """
- Matches if current position is at the end of the parse string
- """
- def __init__( self ):
- super(StringEnd,self).__init__()
- self.errmsg = "Expected end of text"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc < len(instring):
- raise ParseException(instring, loc, self.errmsg, self)
- elif loc == len(instring):
- return loc+1, []
- elif loc > len(instring):
- return loc, []
- else:
- raise ParseException(instring, loc, self.errmsg, self)
-
-class WordStart(_PositionToken):
- """
- Matches if the current position is at the beginning of a Word, and
- is not preceded by any character in a given set of C{wordChars}
- (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
- use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of
- the string being parsed, or at the beginning of a line.
- """
- def __init__(self, wordChars = printables):
- super(WordStart,self).__init__()
- self.wordChars = set(wordChars)
- self.errmsg = "Not at the start of a word"
-
- def parseImpl(self, instring, loc, doActions=True ):
- if loc != 0:
- if (instring[loc-1] in self.wordChars or
- instring[loc] not in self.wordChars):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-class WordEnd(_PositionToken):
- """
- Matches if the current position is at the end of a Word, and
- is not followed by any character in a given set of C{wordChars}
- (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
- use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of
- the string being parsed, or at the end of a line.
- """
- def __init__(self, wordChars = printables):
- super(WordEnd,self).__init__()
- self.wordChars = set(wordChars)
- self.skipWhitespace = False
- self.errmsg = "Not at the end of a word"
-
- def parseImpl(self, instring, loc, doActions=True ):
- instrlen = len(instring)
- if instrlen>0 and loc<instrlen:
- if (instring[loc] in self.wordChars or
- instring[loc-1] not in self.wordChars):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-
-class ParseExpression(ParserElement):
- """
- Abstract subclass of ParserElement, for combining and post-processing parsed tokens.
- """
- def __init__( self, exprs, savelist = False ):
- super(ParseExpression,self).__init__(savelist)
- if isinstance( exprs, _generatorType ):
- exprs = list(exprs)
-
- if isinstance( exprs, basestring ):
- self.exprs = [ ParserElement._literalStringClass( exprs ) ]
- elif isinstance( exprs, Iterable ):
- exprs = list(exprs)
- # if sequence of strings provided, wrap with Literal
- if all(isinstance(expr, basestring) for expr in exprs):
- exprs = map(ParserElement._literalStringClass, exprs)
- self.exprs = list(exprs)
- else:
- try:
- self.exprs = list( exprs )
- except TypeError:
- self.exprs = [ exprs ]
- self.callPreparse = False
-
- def __getitem__( self, i ):
- return self.exprs[i]
-
- def append( self, other ):
- self.exprs.append( other )
- self.strRepr = None
- return self
-
- def leaveWhitespace( self ):
- """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on
- all contained expressions."""
- self.skipWhitespace = False
- self.exprs = [ e.copy() for e in self.exprs ]
- for e in self.exprs:
- e.leaveWhitespace()
- return self
-
- def ignore( self, other ):
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- super( ParseExpression, self).ignore( other )
- for e in self.exprs:
- e.ignore( self.ignoreExprs[-1] )
- else:
- super( ParseExpression, self).ignore( other )
- for e in self.exprs:
- e.ignore( self.ignoreExprs[-1] )
- return self
-
- def __str__( self ):
- try:
- return super(ParseExpression,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) )
- return self.strRepr
-
- def streamline( self ):
- super(ParseExpression,self).streamline()
-
- for e in self.exprs:
- e.streamline()
-
- # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d )
- # but only if there are no parse actions or resultsNames on the nested And's
- # (likewise for Or's and MatchFirst's)
- if ( len(self.exprs) == 2 ):
- other = self.exprs[0]
- if ( isinstance( other, self.__class__ ) and
- not(other.parseAction) and
- other.resultsName is None and
- not other.debug ):
- self.exprs = other.exprs[:] + [ self.exprs[1] ]
- self.strRepr = None
- self.mayReturnEmpty |= other.mayReturnEmpty
- self.mayIndexError |= other.mayIndexError
-
- other = self.exprs[-1]
- if ( isinstance( other, self.__class__ ) and
- not(other.parseAction) and
- other.resultsName is None and
- not other.debug ):
- self.exprs = self.exprs[:-1] + other.exprs[:]
- self.strRepr = None
- self.mayReturnEmpty |= other.mayReturnEmpty
- self.mayIndexError |= other.mayIndexError
-
- self.errmsg = "Expected " + _ustr(self)
-
- return self
-
- def setResultsName( self, name, listAllMatches=False ):
- ret = super(ParseExpression,self).setResultsName(name,listAllMatches)
- return ret
-
- def validate( self, validateTrace=[] ):
- tmp = validateTrace[:]+[self]
- for e in self.exprs:
- e.validate(tmp)
- self.checkRecursion( [] )
-
- def copy(self):
- ret = super(ParseExpression,self).copy()
- ret.exprs = [e.copy() for e in self.exprs]
- return ret
-
-class And(ParseExpression):
- """
- Requires all given C{ParseExpression}s to be found in the given order.
- Expressions may be separated by whitespace.
- May be constructed using the C{'+'} operator.
- May also be constructed using the C{'-'} operator, which will suppress backtracking.
-
- Example::
- integer = Word(nums)
- name_expr = OneOrMore(Word(alphas))
-
- expr = And([integer("id"),name_expr("name"),integer("age")])
- # more easily written as:
- expr = integer("id") + name_expr("name") + integer("age")
- """
-
- class _ErrorStop(Empty):
- def __init__(self, *args, **kwargs):
- super(And._ErrorStop,self).__init__(*args, **kwargs)
- self.name = '-'
- self.leaveWhitespace()
-
- def __init__( self, exprs, savelist = True ):
- super(And,self).__init__(exprs, savelist)
- self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
- self.setWhitespaceChars( self.exprs[0].whiteChars )
- self.skipWhitespace = self.exprs[0].skipWhitespace
- self.callPreparse = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- # pass False as last arg to _parse for first element, since we already
- # pre-parsed the string as part of our And pre-parsing
- loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
- errorStop = False
- for e in self.exprs[1:]:
- if isinstance(e, And._ErrorStop):
- errorStop = True
- continue
- if errorStop:
- try:
- loc, exprtokens = e._parse( instring, loc, doActions )
- except ParseSyntaxException:
- raise
- except ParseBaseException as pe:
- pe.__traceback__ = None
- raise ParseSyntaxException._from_exception(pe)
- except IndexError:
- raise ParseSyntaxException(instring, len(instring), self.errmsg, self)
- else:
- loc, exprtokens = e._parse( instring, loc, doActions )
- if exprtokens or exprtokens.haskeys():
- resultlist += exprtokens
- return loc, resultlist
-
- def __iadd__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #And( [ self, other ] )
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
- if not e.mayReturnEmpty:
- break
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
-
-class Or(ParseExpression):
- """
- Requires that at least one C{ParseExpression} is found.
- If two expressions match, the expression that matches the longest string will be used.
- May be constructed using the C{'^'} operator.
-
- Example::
- # construct Or using '^' operator
-
- number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums))
- print(number.searchString("123 3.1416 789"))
- prints::
- [['123'], ['3.1416'], ['789']]
- """
- def __init__( self, exprs, savelist = False ):
- super(Or,self).__init__(exprs, savelist)
- if self.exprs:
- self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
- else:
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- maxExcLoc = -1
- maxException = None
- matches = []
- for e in self.exprs:
- try:
- loc2 = e.tryParse( instring, loc )
- except ParseException as err:
- err.__traceback__ = None
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
- except IndexError:
- if len(instring) > maxExcLoc:
- maxException = ParseException(instring,len(instring),e.errmsg,self)
- maxExcLoc = len(instring)
- else:
- # save match among all matches, to retry longest to shortest
- matches.append((loc2, e))
-
- if matches:
- matches.sort(key=lambda x: -x[0])
- for _,e in matches:
- try:
- return e._parse( instring, loc, doActions )
- except ParseException as err:
- err.__traceback__ = None
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
-
- if maxException is not None:
- maxException.msg = self.errmsg
- raise maxException
- else:
- raise ParseException(instring, loc, "no defined alternatives to match", self)
-
-
- def __ixor__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #Or( [ self, other ] )
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class MatchFirst(ParseExpression):
- """
- Requires that at least one C{ParseExpression} is found.
- If two expressions match, the first one listed is the one that will match.
- May be constructed using the C{'|'} operator.
-
- Example::
- # construct MatchFirst using '|' operator
-
- # watch the order of expressions to match
- number = Word(nums) | Combine(Word(nums) + '.' + Word(nums))
- print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']]
-
- # put more selective expression first
- number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums)
- print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']]
- """
- def __init__( self, exprs, savelist = False ):
- super(MatchFirst,self).__init__(exprs, savelist)
- if self.exprs:
- self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
- else:
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- maxExcLoc = -1
- maxException = None
- for e in self.exprs:
- try:
- ret = e._parse( instring, loc, doActions )
- return ret
- except ParseException as err:
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
- except IndexError:
- if len(instring) > maxExcLoc:
- maxException = ParseException(instring,len(instring),e.errmsg,self)
- maxExcLoc = len(instring)
-
- # only got here if no expression matched, raise exception for match that made it the furthest
- else:
- if maxException is not None:
- maxException.msg = self.errmsg
- raise maxException
- else:
- raise ParseException(instring, loc, "no defined alternatives to match", self)
-
- def __ior__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #MatchFirst( [ self, other ] )
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class Each(ParseExpression):
- """
- Requires all given C{ParseExpression}s to be found, but in any order.
- Expressions may be separated by whitespace.
- May be constructed using the C{'&'} operator.
-
- Example::
- color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN")
- shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON")
- integer = Word(nums)
- shape_attr = "shape:" + shape_type("shape")
- posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn")
- color_attr = "color:" + color("color")
- size_attr = "size:" + integer("size")
-
- # use Each (using operator '&') to accept attributes in any order
- # (shape and posn are required, color and size are optional)
- shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr)
-
- shape_spec.runTests('''
- shape: SQUARE color: BLACK posn: 100, 120
- shape: CIRCLE size: 50 color: BLUE posn: 50,80
- color:GREEN size:20 shape:TRIANGLE posn:20,40
- '''
- )
- prints::
- shape: SQUARE color: BLACK posn: 100, 120
- ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']]
- - color: BLACK
- - posn: ['100', ',', '120']
- - x: 100
- - y: 120
- - shape: SQUARE
-
-
- shape: CIRCLE size: 50 color: BLUE posn: 50,80
- ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']]
- - color: BLUE
- - posn: ['50', ',', '80']
- - x: 50
- - y: 80
- - shape: CIRCLE
- - size: 50
-
-
- color: GREEN size: 20 shape: TRIANGLE posn: 20,40
- ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']]
- - color: GREEN
- - posn: ['20', ',', '40']
- - x: 20
- - y: 40
- - shape: TRIANGLE
- - size: 20
- """
- def __init__( self, exprs, savelist = True ):
- super(Each,self).__init__(exprs, savelist)
- self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
- self.skipWhitespace = True
- self.initExprGroups = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.initExprGroups:
- self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional))
- opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ]
- opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)]
- self.optionals = opt1 + opt2
- self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ]
- self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ]
- self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ]
- self.required += self.multirequired
- self.initExprGroups = False
- tmpLoc = loc
- tmpReqd = self.required[:]
- tmpOpt = self.optionals[:]
- matchOrder = []
-
- keepMatching = True
- while keepMatching:
- tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired
- failed = []
- for e in tmpExprs:
- try:
- tmpLoc = e.tryParse( instring, tmpLoc )
- except ParseException:
- failed.append(e)
- else:
- matchOrder.append(self.opt1map.get(id(e),e))
- if e in tmpReqd:
- tmpReqd.remove(e)
- elif e in tmpOpt:
- tmpOpt.remove(e)
- if len(failed) == len(tmpExprs):
- keepMatching = False
-
- if tmpReqd:
- missing = ", ".join(_ustr(e) for e in tmpReqd)
- raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing )
-
- # add any unmatched Optionals, in case they have default values defined
- matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt]
-
- resultlist = []
- for e in matchOrder:
- loc,results = e._parse(instring,loc,doActions)
- resultlist.append(results)
-
- finalResults = sum(resultlist, ParseResults([]))
- return loc, finalResults
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class ParseElementEnhance(ParserElement):
- """
- Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens.
- """
- def __init__( self, expr, savelist=False ):
- super(ParseElementEnhance,self).__init__(savelist)
- if isinstance( expr, basestring ):
- if issubclass(ParserElement._literalStringClass, Token):
- expr = ParserElement._literalStringClass(expr)
- else:
- expr = ParserElement._literalStringClass(Literal(expr))
- self.expr = expr
- self.strRepr = None
- if expr is not None:
- self.mayIndexError = expr.mayIndexError
- self.mayReturnEmpty = expr.mayReturnEmpty
- self.setWhitespaceChars( expr.whiteChars )
- self.skipWhitespace = expr.skipWhitespace
- self.saveAsList = expr.saveAsList
- self.callPreparse = expr.callPreparse
- self.ignoreExprs.extend(expr.ignoreExprs)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.expr is not None:
- return self.expr._parse( instring, loc, doActions, callPreParse=False )
- else:
- raise ParseException("",loc,self.errmsg,self)
-
- def leaveWhitespace( self ):
- self.skipWhitespace = False
- self.expr = self.expr.copy()
- if self.expr is not None:
- self.expr.leaveWhitespace()
- return self
-
- def ignore( self, other ):
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- super( ParseElementEnhance, self).ignore( other )
- if self.expr is not None:
- self.expr.ignore( self.ignoreExprs[-1] )
- else:
- super( ParseElementEnhance, self).ignore( other )
- if self.expr is not None:
- self.expr.ignore( self.ignoreExprs[-1] )
- return self
-
- def streamline( self ):
- super(ParseElementEnhance,self).streamline()
- if self.expr is not None:
- self.expr.streamline()
- return self
-
- def checkRecursion( self, parseElementList ):
- if self in parseElementList:
- raise RecursiveGrammarException( parseElementList+[self] )
- subRecCheckList = parseElementList[:] + [ self ]
- if self.expr is not None:
- self.expr.checkRecursion( subRecCheckList )
-
- def validate( self, validateTrace=[] ):
- tmp = validateTrace[:]+[self]
- if self.expr is not None:
- self.expr.validate(tmp)
- self.checkRecursion( [] )
-
- def __str__( self ):
- try:
- return super(ParseElementEnhance,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None and self.expr is not None:
- self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) )
- return self.strRepr
-
-
-class FollowedBy(ParseElementEnhance):
- """
- Lookahead matching of the given parse expression. C{FollowedBy}
- does I{not} advance the parsing position within the input string, it only
- verifies that the specified parse expression matches at the current
- position. C{FollowedBy} always returns a null token list.
-
- Example::
- # use FollowedBy to match a label only if it is followed by a ':'
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
-
- OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint()
- prints::
- [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']]
- """
- def __init__( self, expr ):
- super(FollowedBy,self).__init__(expr)
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- self.expr.tryParse( instring, loc )
- return loc, []
-
-
-class NotAny(ParseElementEnhance):
- """
- Lookahead to disallow matching with the given parse expression. C{NotAny}
- does I{not} advance the parsing position within the input string, it only
- verifies that the specified parse expression does I{not} match at the current
- position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny}
- always returns a null token list. May be constructed using the '~' operator.
-
- Example::
-
- """
- def __init__( self, expr ):
- super(NotAny,self).__init__(expr)
- #~ self.leaveWhitespace()
- self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs
- self.mayReturnEmpty = True
- self.errmsg = "Found unwanted token, "+_ustr(self.expr)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.expr.canParseNext(instring, loc):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "~{" + _ustr(self.expr) + "}"
-
- return self.strRepr
-
-class _MultipleMatch(ParseElementEnhance):
- def __init__( self, expr, stopOn=None):
- super(_MultipleMatch, self).__init__(expr)
- self.saveAsList = True
- ender = stopOn
- if isinstance(ender, basestring):
- ender = ParserElement._literalStringClass(ender)
- self.not_ender = ~ender if ender is not None else None
-
- def parseImpl( self, instring, loc, doActions=True ):
- self_expr_parse = self.expr._parse
- self_skip_ignorables = self._skipIgnorables
- check_ender = self.not_ender is not None
- if check_ender:
- try_not_ender = self.not_ender.tryParse
-
- # must be at least one (but first see if we are the stopOn sentinel;
- # if so, fail)
- if check_ender:
- try_not_ender(instring, loc)
- loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
- try:
- hasIgnoreExprs = (not not self.ignoreExprs)
- while 1:
- if check_ender:
- try_not_ender(instring, loc)
- if hasIgnoreExprs:
- preloc = self_skip_ignorables( instring, loc )
- else:
- preloc = loc
- loc, tmptokens = self_expr_parse( instring, preloc, doActions )
- if tmptokens or tmptokens.haskeys():
- tokens += tmptokens
- except (ParseException,IndexError):
- pass
-
- return loc, tokens
-
-class OneOrMore(_MultipleMatch):
- """
- Repetition of one or more of the given expression.
-
- Parameters:
- - expr - expression that must match one or more times
- - stopOn - (default=C{None}) - expression for a terminating sentinel
- (only required if the sentinel would ordinarily match the repetition
- expression)
-
- Example::
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
-
- text = "shape: SQUARE posn: upper left color: BLACK"
- OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']]
-
- # use stopOn attribute for OneOrMore to avoid reading label string as part of the data
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
- OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']]
-
- # could also be written as
- (attr_expr * (1,)).parseString(text).pprint()
- """
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + _ustr(self.expr) + "}..."
-
- return self.strRepr
-
-class ZeroOrMore(_MultipleMatch):
- """
- Optional repetition of zero or more of the given expression.
-
- Parameters:
- - expr - expression that must match zero or more times
- - stopOn - (default=C{None}) - expression for a terminating sentinel
- (only required if the sentinel would ordinarily match the repetition
- expression)
-
- Example: similar to L{OneOrMore}
- """
- def __init__( self, expr, stopOn=None):
- super(ZeroOrMore,self).__init__(expr, stopOn=stopOn)
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- try:
- return super(ZeroOrMore, self).parseImpl(instring, loc, doActions)
- except (ParseException,IndexError):
- return loc, []
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "[" + _ustr(self.expr) + "]..."
-
- return self.strRepr
-
-class _NullToken(object):
- def __bool__(self):
- return False
- __nonzero__ = __bool__
- def __str__(self):
- return ""
-
-_optionalNotMatched = _NullToken()
-class Optional(ParseElementEnhance):
- """
- Optional matching of the given expression.
-
- Parameters:
- - expr - expression that must match zero or more times
- - default (optional) - value to be returned if the optional expression is not found.
-
- Example::
- # US postal code can be a 5-digit zip, plus optional 4-digit qualifier
- zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4)))
- zip.runTests('''
- # traditional ZIP code
- 12345
-
- # ZIP+4 form
- 12101-0001
-
- # invalid ZIP
- 98765-
- ''')
- prints::
- # traditional ZIP code
- 12345
- ['12345']
-
- # ZIP+4 form
- 12101-0001
- ['12101-0001']
-
- # invalid ZIP
- 98765-
- ^
- FAIL: Expected end of text (at char 5), (line:1, col:6)
- """
- def __init__( self, expr, default=_optionalNotMatched ):
- super(Optional,self).__init__( expr, savelist=False )
- self.saveAsList = self.expr.saveAsList
- self.defaultValue = default
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- try:
- loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
- except (ParseException,IndexError):
- if self.defaultValue is not _optionalNotMatched:
- if self.expr.resultsName:
- tokens = ParseResults([ self.defaultValue ])
- tokens[self.expr.resultsName] = self.defaultValue
- else:
- tokens = [ self.defaultValue ]
- else:
- tokens = []
- return loc, tokens
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "[" + _ustr(self.expr) + "]"
-
- return self.strRepr
-
-class SkipTo(ParseElementEnhance):
- """
- Token for skipping over all undefined text until the matched expression is found.
-
- Parameters:
- - expr - target expression marking the end of the data to be skipped
- - include - (default=C{False}) if True, the target expression is also parsed
- (the skipped text and target expression are returned as a 2-element list).
- - ignore - (default=C{None}) used to define grammars (typically quoted strings and
- comments) that might contain false matches to the target expression
- - failOn - (default=C{None}) define expressions that are not allowed to be
- included in the skipped test; if found before the target expression is found,
- the SkipTo is not a match
-
- Example::
- report = '''
- Outstanding Issues Report - 1 Jan 2000
-
- # | Severity | Description | Days Open
- -----+----------+-------------------------------------------+-----------
- 101 | Critical | Intermittent system crash | 6
- 94 | Cosmetic | Spelling error on Login ('log|n') | 14
- 79 | Minor | System slow when running too many reports | 47
- '''
- integer = Word(nums)
- SEP = Suppress('|')
- # use SkipTo to simply match everything up until the next SEP
- # - ignore quoted strings, so that a '|' character inside a quoted string does not match
- # - parse action will call token.strip() for each matched token, i.e., the description body
- string_data = SkipTo(SEP, ignore=quotedString)
- string_data.setParseAction(tokenMap(str.strip))
- ticket_expr = (integer("issue_num") + SEP
- + string_data("sev") + SEP
- + string_data("desc") + SEP
- + integer("days_open"))
-
- for tkt in ticket_expr.searchString(report):
- print tkt.dump()
- prints::
- ['101', 'Critical', 'Intermittent system crash', '6']
- - days_open: 6
- - desc: Intermittent system crash
- - issue_num: 101
- - sev: Critical
- ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14']
- - days_open: 14
- - desc: Spelling error on Login ('log|n')
- - issue_num: 94
- - sev: Cosmetic
- ['79', 'Minor', 'System slow when running too many reports', '47']
- - days_open: 47
- - desc: System slow when running too many reports
- - issue_num: 79
- - sev: Minor
- """
- def __init__( self, other, include=False, ignore=None, failOn=None ):
- super( SkipTo, self ).__init__( other )
- self.ignoreExpr = ignore
- self.mayReturnEmpty = True
- self.mayIndexError = False
- self.includeMatch = include
- self.asList = False
- if isinstance(failOn, basestring):
- self.failOn = ParserElement._literalStringClass(failOn)
- else:
- self.failOn = failOn
- self.errmsg = "No match found for "+_ustr(self.expr)
-
- def parseImpl( self, instring, loc, doActions=True ):
- startloc = loc
- instrlen = len(instring)
- expr = self.expr
- expr_parse = self.expr._parse
- self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None
- self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None
-
- tmploc = loc
- while tmploc <= instrlen:
- if self_failOn_canParseNext is not None:
- # break if failOn expression matches
- if self_failOn_canParseNext(instring, tmploc):
- break
-
- if self_ignoreExpr_tryParse is not None:
- # advance past ignore expressions
- while 1:
- try:
- tmploc = self_ignoreExpr_tryParse(instring, tmploc)
- except ParseBaseException:
- break
-
- try:
- expr_parse(instring, tmploc, doActions=False, callPreParse=False)
- except (ParseException, IndexError):
- # no match, advance loc in string
- tmploc += 1
- else:
- # matched skipto expr, done
- break
-
- else:
- # ran off the end of the input string without matching skipto expr, fail
- raise ParseException(instring, loc, self.errmsg, self)
-
- # build up return values
- loc = tmploc
- skiptext = instring[startloc:loc]
- skipresult = ParseResults(skiptext)
-
- if self.includeMatch:
- loc, mat = expr_parse(instring,loc,doActions,callPreParse=False)
- skipresult += mat
-
- return loc, skipresult
-
-class Forward(ParseElementEnhance):
- """
- Forward declaration of an expression to be defined later -
- used for recursive grammars, such as algebraic infix notation.
- When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator.
-
- Note: take care when assigning to C{Forward} not to overlook precedence of operators.
- Specifically, '|' has a lower precedence than '<<', so that::
- fwdExpr << a | b | c
- will actually be evaluated as::
- (fwdExpr << a) | b | c
- thereby leaving b and c out as parseable alternatives. It is recommended that you
- explicitly group the values inserted into the C{Forward}::
- fwdExpr << (a | b | c)
- Converting to use the '<<=' operator instead will avoid this problem.
-
- See L{ParseResults.pprint} for an example of a recursive parser created using
- C{Forward}.
- """
- def __init__( self, other=None ):
- super(Forward,self).__init__( other, savelist=False )
-
- def __lshift__( self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass(other)
- self.expr = other
- self.strRepr = None
- self.mayIndexError = self.expr.mayIndexError
- self.mayReturnEmpty = self.expr.mayReturnEmpty
- self.setWhitespaceChars( self.expr.whiteChars )
- self.skipWhitespace = self.expr.skipWhitespace
- self.saveAsList = self.expr.saveAsList
- self.ignoreExprs.extend(self.expr.ignoreExprs)
- return self
-
- def __ilshift__(self, other):
- return self << other
-
- def leaveWhitespace( self ):
- self.skipWhitespace = False
- return self
-
- def streamline( self ):
- if not self.streamlined:
- self.streamlined = True
- if self.expr is not None:
- self.expr.streamline()
- return self
-
- def validate( self, validateTrace=[] ):
- if self not in validateTrace:
- tmp = validateTrace[:]+[self]
- if self.expr is not None:
- self.expr.validate(tmp)
- self.checkRecursion([])
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
- return self.__class__.__name__ + ": ..."
-
- # stubbed out for now - creates awful memory and perf issues
- self._revertClass = self.__class__
- self.__class__ = _ForwardNoRecurse
- try:
- if self.expr is not None:
- retString = _ustr(self.expr)
- else:
- retString = "None"
- finally:
- self.__class__ = self._revertClass
- return self.__class__.__name__ + ": " + retString
-
- def copy(self):
- if self.expr is not None:
- return super(Forward,self).copy()
- else:
- ret = Forward()
- ret <<= self
- return ret
-
-class _ForwardNoRecurse(Forward):
- def __str__( self ):
- return "..."
-
-class TokenConverter(ParseElementEnhance):
- """
- Abstract subclass of C{ParseExpression}, for converting parsed results.
- """
- def __init__( self, expr, savelist=False ):
- super(TokenConverter,self).__init__( expr )#, savelist )
- self.saveAsList = False
-
-class Combine(TokenConverter):
- """
- Converter to concatenate all matching tokens to a single string.
- By default, the matching patterns must also be contiguous in the input string;
- this can be disabled by specifying C{'adjacent=False'} in the constructor.
-
- Example::
- real = Word(nums) + '.' + Word(nums)
- print(real.parseString('3.1416')) # -> ['3', '.', '1416']
- # will also erroneously match the following
- print(real.parseString('3. 1416')) # -> ['3', '.', '1416']
-
- real = Combine(Word(nums) + '.' + Word(nums))
- print(real.parseString('3.1416')) # -> ['3.1416']
- # no match when there are internal spaces
- print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...)
- """
- def __init__( self, expr, joinString="", adjacent=True ):
- super(Combine,self).__init__( expr )
- # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself
- if adjacent:
- self.leaveWhitespace()
- self.adjacent = adjacent
- self.skipWhitespace = True
- self.joinString = joinString
- self.callPreparse = True
-
- def ignore( self, other ):
- if self.adjacent:
- ParserElement.ignore(self, other)
- else:
- super( Combine, self).ignore( other )
- return self
-
- def postParse( self, instring, loc, tokenlist ):
- retToks = tokenlist.copy()
- del retToks[:]
- retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults)
-
- if self.resultsName and retToks.haskeys():
- return [ retToks ]
- else:
- return retToks
-
-class Group(TokenConverter):
- """
- Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions.
-
- Example::
- ident = Word(alphas)
- num = Word(nums)
- term = ident | num
- func = ident + Optional(delimitedList(term))
- print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100']
-
- func = ident + Group(Optional(delimitedList(term)))
- print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']]
- """
- def __init__( self, expr ):
- super(Group,self).__init__( expr )
- self.saveAsList = True
-
- def postParse( self, instring, loc, tokenlist ):
- return [ tokenlist ]
-
-class Dict(TokenConverter):
- """
- Converter to return a repetitive expression as a list, but also as a dictionary.
- Each element can also be referenced using the first token in the expression as its key.
- Useful for tabular report scraping when the first column can be used as a item key.
-
- Example::
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
-
- text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
- attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
-
- # print attributes as plain groups
- print(OneOrMore(attr_expr).parseString(text).dump())
-
- # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names
- result = Dict(OneOrMore(Group(attr_expr))).parseString(text)
- print(result.dump())
-
- # access named fields as dict entries, or output as dict
- print(result['shape'])
- print(result.asDict())
- prints::
- ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap']
-
- [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
- - color: light blue
- - posn: upper left
- - shape: SQUARE
- - texture: burlap
- SQUARE
- {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'}
- See more examples at L{ParseResults} of accessing fields by results name.
- """
- def __init__( self, expr ):
- super(Dict,self).__init__( expr )
- self.saveAsList = True
-
- def postParse( self, instring, loc, tokenlist ):
- for i,tok in enumerate(tokenlist):
- if len(tok) == 0:
- continue
- ikey = tok[0]
- if isinstance(ikey,int):
- ikey = _ustr(tok[0]).strip()
- if len(tok)==1:
- tokenlist[ikey] = _ParseResultsWithOffset("",i)
- elif len(tok)==2 and not isinstance(tok[1],ParseResults):
- tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i)
- else:
- dictvalue = tok.copy() #ParseResults(i)
- del dictvalue[0]
- if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()):
- tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i)
- else:
- tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i)
-
- if self.resultsName:
- return [ tokenlist ]
- else:
- return tokenlist
-
-
-class Suppress(TokenConverter):
- """
- Converter for ignoring the results of a parsed expression.
-
- Example::
- source = "a, b, c,d"
- wd = Word(alphas)
- wd_list1 = wd + ZeroOrMore(',' + wd)
- print(wd_list1.parseString(source))
-
- # often, delimiters that are useful during parsing are just in the
- # way afterward - use Suppress to keep them out of the parsed output
- wd_list2 = wd + ZeroOrMore(Suppress(',') + wd)
- print(wd_list2.parseString(source))
- prints::
- ['a', ',', 'b', ',', 'c', ',', 'd']
- ['a', 'b', 'c', 'd']
- (See also L{delimitedList}.)
- """
- def postParse( self, instring, loc, tokenlist ):
- return []
-
- def suppress( self ):
- return self
-
-
-class OnlyOnce(object):
- """
- Wrapper for parse actions, to ensure they are only called once.
- """
- def __init__(self, methodCall):
- self.callable = _trim_arity(methodCall)
- self.called = False
- def __call__(self,s,l,t):
- if not self.called:
- results = self.callable(s,l,t)
- self.called = True
- return results
- raise ParseException(s,l,"")
- def reset(self):
- self.called = False
-
-def traceParseAction(f):
- """
- Decorator for debugging parse actions.
-
- When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".}
- When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised.
-
- Example::
- wd = Word(alphas)
-
- @traceParseAction
- def remove_duplicate_chars(tokens):
- return ''.join(sorted(set(''.join(tokens))))
-
- wds = OneOrMore(wd).setParseAction(remove_duplicate_chars)
- print(wds.parseString("slkdjs sld sldd sdlf sdljf"))
- prints::
- >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {}))
- <<leaving remove_duplicate_chars (ret: 'dfjkls')
- ['dfjkls']
- """
- f = _trim_arity(f)
- def z(*paArgs):
- thisFunc = f.__name__
- s,l,t = paArgs[-3:]
- if len(paArgs)>3:
- thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc
- sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) )
- try:
- ret = f(*paArgs)
- except Exception as exc:
- sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) )
- raise
- sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) )
- return ret
- try:
- z.__name__ = f.__name__
- except AttributeError:
- pass
- return z
-
-#
-# global helpers
-#
-def delimitedList( expr, delim=",", combine=False ):
- """
- Helper to define a delimited list of expressions - the delimiter defaults to ','.
- By default, the list elements and delimiters can have intervening whitespace, and
- comments, but this can be overridden by passing C{combine=True} in the constructor.
- If C{combine} is set to C{True}, the matching tokens are returned as a single token
- string, with the delimiters included; otherwise, the matching tokens are returned
- as a list of tokens, with the delimiters suppressed.
-
- Example::
- delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc']
- delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE']
- """
- dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..."
- if combine:
- return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName)
- else:
- return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName)
-
-def countedArray( expr, intExpr=None ):
- """
- Helper to define a counted list of expressions.
- This helper defines a pattern of the form::
- integer expr expr expr...
- where the leading integer tells how many expr expressions follow.
- The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
-
- If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value.
-
- Example::
- countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd']
-
- # in this parser, the leading integer value is given in binary,
- # '10' indicating that 2 values are in the array
- binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2))
- countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd']
- """
- arrayExpr = Forward()
- def countFieldParseAction(s,l,t):
- n = t[0]
- arrayExpr << (n and Group(And([expr]*n)) or Group(empty))
- return []
- if intExpr is None:
- intExpr = Word(nums).setParseAction(lambda t:int(t[0]))
- else:
- intExpr = intExpr.copy()
- intExpr.setName("arrayLen")
- intExpr.addParseAction(countFieldParseAction, callDuringTry=True)
- return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...')
-
-def _flatten(L):
- ret = []
- for i in L:
- if isinstance(i,list):
- ret.extend(_flatten(i))
- else:
- ret.append(i)
- return ret
-
-def matchPreviousLiteral(expr):
- """
- Helper to define an expression that is indirectly defined from
- the tokens matched in a previous expression, that is, it looks
- for a 'repeat' of a previous expression. For example::
- first = Word(nums)
- second = matchPreviousLiteral(first)
- matchExpr = first + ":" + second
- will match C{"1:1"}, but not C{"1:2"}. Because this matches a
- previous literal, will also match the leading C{"1:1"} in C{"1:10"}.
- If this is not desired, use C{matchPreviousExpr}.
- Do I{not} use with packrat parsing enabled.
- """
- rep = Forward()
- def copyTokenToRepeater(s,l,t):
- if t:
- if len(t) == 1:
- rep << t[0]
- else:
- # flatten t tokens
- tflat = _flatten(t.asList())
- rep << And(Literal(tt) for tt in tflat)
- else:
- rep << Empty()
- expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
- rep.setName('(prev) ' + _ustr(expr))
- return rep
-
-def matchPreviousExpr(expr):
- """
- Helper to define an expression that is indirectly defined from
- the tokens matched in a previous expression, that is, it looks
- for a 'repeat' of a previous expression. For example::
- first = Word(nums)
- second = matchPreviousExpr(first)
- matchExpr = first + ":" + second
- will match C{"1:1"}, but not C{"1:2"}. Because this matches by
- expressions, will I{not} match the leading C{"1:1"} in C{"1:10"};
- the expressions are evaluated first, and then compared, so
- C{"1"} is compared with C{"10"}.
- Do I{not} use with packrat parsing enabled.
- """
- rep = Forward()
- e2 = expr.copy()
- rep <<= e2
- def copyTokenToRepeater(s,l,t):
- matchTokens = _flatten(t.asList())
- def mustMatchTheseTokens(s,l,t):
- theseTokens = _flatten(t.asList())
- if theseTokens != matchTokens:
- raise ParseException("",0,"")
- rep.setParseAction( mustMatchTheseTokens, callDuringTry=True )
- expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
- rep.setName('(prev) ' + _ustr(expr))
- return rep
-
-def _escapeRegexRangeChars(s):
- #~ escape these chars: ^-]
- for c in r"\^-]":
- s = s.replace(c,_bslash+c)
- s = s.replace("\n",r"\n")
- s = s.replace("\t",r"\t")
- return _ustr(s)
-
-def oneOf( strs, caseless=False, useRegex=True ):
- """
- Helper to quickly define a set of alternative Literals, and makes sure to do
- longest-first testing when there is a conflict, regardless of the input order,
- but returns a C{L{MatchFirst}} for best performance.
-
- Parameters:
- - strs - a string of space-delimited literals, or a collection of string literals
- - caseless - (default=C{False}) - treat all literals as caseless
- - useRegex - (default=C{True}) - as an optimization, will generate a Regex
- object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or
- if creating a C{Regex} raises an exception)
-
- Example::
- comp_oper = oneOf("< = > <= >= !=")
- var = Word(alphas)
- number = Word(nums)
- term = var | number
- comparison_expr = term + comp_oper + term
- print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12"))
- prints::
- [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']]
- """
- if caseless:
- isequal = ( lambda a,b: a.upper() == b.upper() )
- masks = ( lambda a,b: b.upper().startswith(a.upper()) )
- parseElementClass = CaselessLiteral
- else:
- isequal = ( lambda a,b: a == b )
- masks = ( lambda a,b: b.startswith(a) )
- parseElementClass = Literal
-
- symbols = []
- if isinstance(strs,basestring):
- symbols = strs.split()
- elif isinstance(strs, Iterable):
- symbols = list(strs)
- else:
- warnings.warn("Invalid argument to oneOf, expected string or iterable",
- SyntaxWarning, stacklevel=2)
- if not symbols:
- return NoMatch()
-
- i = 0
- while i < len(symbols)-1:
- cur = symbols[i]
- for j,other in enumerate(symbols[i+1:]):
- if ( isequal(other, cur) ):
- del symbols[i+j+1]
- break
- elif ( masks(cur, other) ):
- del symbols[i+j+1]
- symbols.insert(i,other)
- cur = other
- break
- else:
- i += 1
-
- if not caseless and useRegex:
- #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] ))
- try:
- if len(symbols)==len("".join(symbols)):
- return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols))
- else:
- return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols))
- except Exception:
- warnings.warn("Exception creating Regex for oneOf, building MatchFirst",
- SyntaxWarning, stacklevel=2)
-
-
- # last resort, just use MatchFirst
- return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols))
-
-def dictOf( key, value ):
- """
- Helper to easily and clearly define a dictionary by specifying the respective patterns
- for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens
- in the proper order. The key pattern can include delimiting markers or punctuation,
- as long as they are suppressed, thereby leaving the significant key text. The value
- pattern can include named results, so that the C{Dict} results can include named token
- fields.
-
- Example::
- text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
- attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
- print(OneOrMore(attr_expr).parseString(text).dump())
-
- attr_label = label
- attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)
-
- # similar to Dict, but simpler call format
- result = dictOf(attr_label, attr_value).parseString(text)
- print(result.dump())
- print(result['shape'])
- print(result.shape) # object attribute access works too
- print(result.asDict())
- prints::
- [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
- - color: light blue
- - posn: upper left
- - shape: SQUARE
- - texture: burlap
- SQUARE
- SQUARE
- {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'}
- """
- return Dict( ZeroOrMore( Group ( key + value ) ) )
-
-def originalTextFor(expr, asString=True):
- """
- Helper to return the original, untokenized text for a given expression. Useful to
- restore the parsed fields of an HTML start tag into the raw tag text itself, or to
- revert separate tokens with intervening whitespace back to the original matching
- input text. By default, returns astring containing the original parsed text.
-
- If the optional C{asString} argument is passed as C{False}, then the return value is a
- C{L{ParseResults}} containing any results names that were originally matched, and a
- single token containing the original matched text from the input string. So if
- the expression passed to C{L{originalTextFor}} contains expressions with defined
- results names, you must set C{asString} to C{False} if you want to preserve those
- results name values.
-
- Example::
- src = "this is test <b> bold <i>text</i> </b> normal text "
- for tag in ("b","i"):
- opener,closer = makeHTMLTags(tag)
- patt = originalTextFor(opener + SkipTo(closer) + closer)
- print(patt.searchString(src)[0])
- prints::
- ['<b> bold <i>text</i> </b>']
- ['<i>text</i>']
- """
- locMarker = Empty().setParseAction(lambda s,loc,t: loc)
- endlocMarker = locMarker.copy()
- endlocMarker.callPreparse = False
- matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end")
- if asString:
- extractText = lambda s,l,t: s[t._original_start:t._original_end]
- else:
- def extractText(s,l,t):
- t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]]
- matchExpr.setParseAction(extractText)
- matchExpr.ignoreExprs = expr.ignoreExprs
- return matchExpr
-
-def ungroup(expr):
- """
- Helper to undo pyparsing's default grouping of And expressions, even
- if all but one are non-empty.
- """
- return TokenConverter(expr).setParseAction(lambda t:t[0])
-
-def locatedExpr(expr):
- """
- Helper to decorate a returned token with its starting and ending locations in the input string.
- This helper adds the following results names:
- - locn_start = location where matched expression begins
- - locn_end = location where matched expression ends
- - value = the actual parsed results
-
- Be careful if the input text contains C{<TAB>} characters, you may want to call
- C{L{ParserElement.parseWithTabs}}
-
- Example::
- wd = Word(alphas)
- for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"):
- print(match)
- prints::
- [[0, 'ljsdf', 5]]
- [[8, 'lksdjjf', 15]]
- [[18, 'lkkjj', 23]]
- """
- locator = Empty().setParseAction(lambda s,l,t: l)
- return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end"))
-
-
-# convenience constants for positional expressions
-empty = Empty().setName("empty")
-lineStart = LineStart().setName("lineStart")
-lineEnd = LineEnd().setName("lineEnd")
-stringStart = StringStart().setName("stringStart")
-stringEnd = StringEnd().setName("stringEnd")
-
-_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
-_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16)))
-_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8)))
-_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1)
-_charRange = Group(_singleChar + Suppress("-") + _singleChar)
-_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"
-
-def srange(s):
- r"""
- Helper to easily define string ranges for use in Word construction. Borrows
- syntax from regexp '[]' string range definitions::
- srange("[0-9]") -> "0123456789"
- srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz"
- srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
- The input string must be enclosed in []'s, and the returned string is the expanded
- character set joined into a single string.
- The values enclosed in the []'s may be:
- - a single character
- - an escaped character with a leading backslash (such as C{\-} or C{\]})
- - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character)
- (C{\0x##} is also supported for backwards compatibility)
- - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character)
- - a range of any of the above, separated by a dash (C{'a-z'}, etc.)
- - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.)
- """
- _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1))
- try:
- return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body)
- except Exception:
- return ""
-
-def matchOnlyAtCol(n):
- """
- Helper method for defining parse actions that require matching at a specific
- column in the input text.
- """
- def verifyCol(strg,locn,toks):
- if col(locn,strg) != n:
- raise ParseException(strg,locn,"matched token not at column %d" % n)
- return verifyCol
-
-def replaceWith(replStr):
- """
- Helper method for common parse actions that simply return a literal value. Especially
- useful when used with C{L{transformString<ParserElement.transformString>}()}.
-
- Example::
- num = Word(nums).setParseAction(lambda toks: int(toks[0]))
- na = oneOf("N/A NA").setParseAction(replaceWith(math.nan))
- term = na | num
-
- OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234]
- """
- return lambda s,l,t: [replStr]
-
-def removeQuotes(s,l,t):
- """
- Helper parse action for removing quotation marks from parsed quoted strings.
-
- Example::
- # by default, quotation marks are included in parsed results
- quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"]
-
- # use removeQuotes to strip quotation marks from parsed results
- quotedString.setParseAction(removeQuotes)
- quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"]
- """
- return t[0][1:-1]
-
-def tokenMap(func, *args):
- """
- Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional
- args are passed, they are forwarded to the given function as additional arguments after
- the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the
- parsed data to an integer using base 16.
-
- Example (compare the last to example in L{ParserElement.transformString}::
- hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16))
- hex_ints.runTests('''
- 00 11 22 aa FF 0a 0d 1a
- ''')
-
- upperword = Word(alphas).setParseAction(tokenMap(str.upper))
- OneOrMore(upperword).runTests('''
- my kingdom for a horse
- ''')
-
- wd = Word(alphas).setParseAction(tokenMap(str.title))
- OneOrMore(wd).setParseAction(' '.join).runTests('''
- now is the winter of our discontent made glorious summer by this sun of york
- ''')
- prints::
- 00 11 22 aa FF 0a 0d 1a
- [0, 17, 34, 170, 255, 10, 13, 26]
-
- my kingdom for a horse
- ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE']
-
- now is the winter of our discontent made glorious summer by this sun of york
- ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York']
- """
- def pa(s,l,t):
- return [func(tokn, *args) for tokn in t]
-
- try:
- func_name = getattr(func, '__name__',
- getattr(func, '__class__').__name__)
- except Exception:
- func_name = str(func)
- pa.__name__ = func_name
-
- return pa
-
-upcaseTokens = tokenMap(lambda t: _ustr(t).upper())
-"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}"""
-
-downcaseTokens = tokenMap(lambda t: _ustr(t).lower())
-"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}"""
-
-def _makeTags(tagStr, xml):
- """Internal helper to construct opening and closing tag expressions, given a tag name"""
- if isinstance(tagStr,basestring):
- resname = tagStr
- tagStr = Keyword(tagStr, caseless=not xml)
- else:
- resname = tagStr.name
-
- tagAttrName = Word(alphas,alphanums+"_-:")
- if (xml):
- tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes )
- openTag = Suppress("<") + tagStr("tag") + \
- Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \
- Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
- else:
- printablesLessRAbrack = "".join(c for c in printables if c not in ">")
- tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack)
- openTag = Suppress("<") + tagStr("tag") + \
- Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
- Optional( Suppress("=") + tagAttrValue ) ))) + \
- Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
- closeTag = Combine(_L("</") + tagStr + ">")
-
- openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname)
- closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname)
- openTag.tag = resname
- closeTag.tag = resname
- return openTag, closeTag
-
-def makeHTMLTags(tagStr):
- """
- Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches
- tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values.
-
- Example::
- text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
- # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple
- a,a_end = makeHTMLTags("A")
- link_expr = a + SkipTo(a_end)("link_text") + a_end
-
- for link in link_expr.searchString(text):
- # attributes in the <A> tag (like "href" shown here) are also accessible as named results
- print(link.link_text, '->', link.href)
- prints::
- pyparsing -> http://pyparsing.wikispaces.com
- """
- return _makeTags( tagStr, False )
-
-def makeXMLTags(tagStr):
- """
- Helper to construct opening and closing tag expressions for XML, given a tag name. Matches
- tags only in the given upper/lower case.
-
- Example: similar to L{makeHTMLTags}
- """
- return _makeTags( tagStr, True )
-
-def withAttribute(*args,**attrDict):
- """
- Helper to create a validating parse action to be used with start tags created
- with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag
- with a required attribute value, to avoid false matches on common tags such as
- C{<TD>} or C{<DIV>}.
-
- Call C{withAttribute} with a series of attribute names and values. Specify the list
- of filter attributes names and values as:
- - keyword arguments, as in C{(align="right")}, or
- - as an explicit dict with C{**} operator, when an attribute name is also a Python
- reserved word, as in C{**{"class":"Customer", "align":"right"}}
- - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") )
- For attribute names with a namespace prefix, you must use the second form. Attribute
- names are matched insensitive to upper/lower case.
-
- If just testing for C{class} (with or without a namespace), use C{L{withClass}}.
-
- To verify that the attribute exists, but without specifying a value, pass
- C{withAttribute.ANY_VALUE} as the value.
-
- Example::
- html = '''
- <div>
- Some text
- <div type="grid">1 4 0 1 0</div>
- <div type="graph">1,3 2,3 1,1</div>
- <div>this has no type</div>
- </div>
-
- '''
- div,div_end = makeHTMLTags("div")
-
- # only match div tag having a type attribute with value "grid"
- div_grid = div().setParseAction(withAttribute(type="grid"))
- grid_expr = div_grid + SkipTo(div | div_end)("body")
- for grid_header in grid_expr.searchString(html):
- print(grid_header.body)
-
- # construct a match with any div tag having a type attribute, regardless of the value
- div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE))
- div_expr = div_any_type + SkipTo(div | div_end)("body")
- for div_header in div_expr.searchString(html):
- print(div_header.body)
- prints::
- 1 4 0 1 0
-
- 1 4 0 1 0
- 1,3 2,3 1,1
- """
- if args:
- attrs = args[:]
- else:
- attrs = attrDict.items()
- attrs = [(k,v) for k,v in attrs]
- def pa(s,l,tokens):
- for attrName,attrValue in attrs:
- if attrName not in tokens:
- raise ParseException(s,l,"no matching attribute " + attrName)
- if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue:
- raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" %
- (attrName, tokens[attrName], attrValue))
- return pa
-withAttribute.ANY_VALUE = object()
-
-def withClass(classname, namespace=''):
- """
- Simplified version of C{L{withAttribute}} when matching on a div class - made
- difficult because C{class} is a reserved word in Python.
-
- Example::
- html = '''
- <div>
- Some text
- <div class="grid">1 4 0 1 0</div>
- <div class="graph">1,3 2,3 1,1</div>
- <div>this &lt;div&gt; has no class</div>
- </div>
-
- '''
- div,div_end = makeHTMLTags("div")
- div_grid = div().setParseAction(withClass("grid"))
-
- grid_expr = div_grid + SkipTo(div | div_end)("body")
- for grid_header in grid_expr.searchString(html):
- print(grid_header.body)
-
- div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE))
- div_expr = div_any_type + SkipTo(div | div_end)("body")
- for div_header in div_expr.searchString(html):
- print(div_header.body)
- prints::
- 1 4 0 1 0
-
- 1 4 0 1 0
- 1,3 2,3 1,1
- """
- classattr = "%s:class" % namespace if namespace else "class"
- return withAttribute(**{classattr : classname})
-
-opAssoc = _Constants()
-opAssoc.LEFT = object()
-opAssoc.RIGHT = object()
-
-def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ):
- """
- Helper method for constructing grammars of expressions made up of
- operators working in a precedence hierarchy. Operators may be unary or
- binary, left- or right-associative. Parse actions can also be attached
- to operator expressions. The generated parser will also recognize the use
- of parentheses to override operator precedences (see example below).
-
- Note: if you define a deep operator list, you may see performance issues
- when using infixNotation. See L{ParserElement.enablePackrat} for a
- mechanism to potentially improve your parser performance.
-
- Parameters:
- - baseExpr - expression representing the most basic element for the nested
- - opList - list of tuples, one for each operator precedence level in the
- expression grammar; each tuple is of the form
- (opExpr, numTerms, rightLeftAssoc, parseAction), where:
- - opExpr is the pyparsing expression for the operator;
- may also be a string, which will be converted to a Literal;
- if numTerms is 3, opExpr is a tuple of two expressions, for the
- two operators separating the 3 terms
- - numTerms is the number of terms for this operator (must
- be 1, 2, or 3)
- - rightLeftAssoc is the indicator whether the operator is
- right or left associative, using the pyparsing-defined
- constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}.
- - parseAction is the parse action to be associated with
- expressions matching this operator expression (the
- parse action tuple member may be omitted); if the parse action
- is passed a tuple or list of functions, this is equivalent to
- calling C{setParseAction(*fn)} (L{ParserElement.setParseAction})
- - lpar - expression for matching left-parentheses (default=C{Suppress('(')})
- - rpar - expression for matching right-parentheses (default=C{Suppress(')')})
-
- Example::
- # simple example of four-function arithmetic with ints and variable names
- integer = pyparsing_common.signed_integer
- varname = pyparsing_common.identifier
-
- arith_expr = infixNotation(integer | varname,
- [
- ('-', 1, opAssoc.RIGHT),
- (oneOf('* /'), 2, opAssoc.LEFT),
- (oneOf('+ -'), 2, opAssoc.LEFT),
- ])
-
- arith_expr.runTests('''
- 5+3*6
- (5+3)*6
- -2--11
- ''', fullDump=False)
- prints::
- 5+3*6
- [[5, '+', [3, '*', 6]]]
-
- (5+3)*6
- [[[5, '+', 3], '*', 6]]
-
- -2--11
- [[['-', 2], '-', ['-', 11]]]
- """
- ret = Forward()
- lastExpr = baseExpr | ( lpar + ret + rpar )
- for i,operDef in enumerate(opList):
- opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4]
- termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr
- if arity == 3:
- if opExpr is None or len(opExpr) != 2:
- raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions")
- opExpr1, opExpr2 = opExpr
- thisExpr = Forward().setName(termName)
- if rightLeftAssoc == opAssoc.LEFT:
- if arity == 1:
- matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) )
- elif arity == 2:
- if opExpr is not None:
- matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) )
- else:
- matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) )
- elif arity == 3:
- matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \
- Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr )
- else:
- raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
- elif rightLeftAssoc == opAssoc.RIGHT:
- if arity == 1:
- # try to avoid LR with this extra test
- if not isinstance(opExpr, Optional):
- opExpr = Optional(opExpr)
- matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr )
- elif arity == 2:
- if opExpr is not None:
- matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) )
- else:
- matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) )
- elif arity == 3:
- matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \
- Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr )
- else:
- raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
- else:
- raise ValueError("operator must indicate right or left associativity")
- if pa:
- if isinstance(pa, (tuple, list)):
- matchExpr.setParseAction(*pa)
- else:
- matchExpr.setParseAction(pa)
- thisExpr <<= ( matchExpr.setName(termName) | lastExpr )
- lastExpr = thisExpr
- ret <<= lastExpr
- return ret
-
-operatorPrecedence = infixNotation
-"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release."""
-
-dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes")
-sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes")
-quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'|
- Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes")
-unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal")
-
-def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()):
- """
- Helper method for defining nested lists enclosed in opening and closing
- delimiters ("(" and ")" are the default).
-
- Parameters:
- - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression
- - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression
- - content - expression for items within the nested lists (default=C{None})
- - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString})
-
- If an expression is not provided for the content argument, the nested
- expression will capture all whitespace-delimited content between delimiters
- as a list of separate values.
-
- Use the C{ignoreExpr} argument to define expressions that may contain
- opening or closing characters that should not be treated as opening
- or closing characters for nesting, such as quotedString or a comment
- expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}.
- The default is L{quotedString}, but if no expressions are to be ignored,
- then pass C{None} for this argument.
-
- Example::
- data_type = oneOf("void int short long char float double")
- decl_data_type = Combine(data_type + Optional(Word('*')))
- ident = Word(alphas+'_', alphanums+'_')
- number = pyparsing_common.number
- arg = Group(decl_data_type + ident)
- LPAR,RPAR = map(Suppress, "()")
-
- code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment))
-
- c_function = (decl_data_type("type")
- + ident("name")
- + LPAR + Optional(delimitedList(arg), [])("args") + RPAR
- + code_body("body"))
- c_function.ignore(cStyleComment)
-
- source_code = '''
- int is_odd(int x) {
- return (x%2);
- }
-
- int dec_to_hex(char hchar) {
- if (hchar >= '0' && hchar <= '9') {
- return (ord(hchar)-ord('0'));
- } else {
- return (10+ord(hchar)-ord('A'));
- }
- }
- '''
- for func in c_function.searchString(source_code):
- print("%(name)s (%(type)s) args: %(args)s" % func)
-
- prints::
- is_odd (int) args: [['int', 'x']]
- dec_to_hex (int) args: [['char', 'hchar']]
- """
- if opener == closer:
- raise ValueError("opening and closing strings cannot be the same")
- if content is None:
- if isinstance(opener,basestring) and isinstance(closer,basestring):
- if len(opener) == 1 and len(closer)==1:
- if ignoreExpr is not None:
- content = (Combine(OneOrMore(~ignoreExpr +
- CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS
- ).setParseAction(lambda t:t[0].strip()))
- else:
- if ignoreExpr is not None:
- content = (Combine(OneOrMore(~ignoreExpr +
- ~Literal(opener) + ~Literal(closer) +
- CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) +
- CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- raise ValueError("opening and closing arguments must be strings if no content expression is given")
- ret = Forward()
- if ignoreExpr is not None:
- ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) )
- else:
- ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) )
- ret.setName('nested %s%s expression' % (opener,closer))
- return ret
-
-def indentedBlock(blockStatementExpr, indentStack, indent=True):
- """
- Helper method for defining space-delimited indentation blocks, such as
- those used to define block statements in Python source code.
-
- Parameters:
- - blockStatementExpr - expression defining syntax of statement that
- is repeated within the indented block
- - indentStack - list created by caller to manage indentation stack
- (multiple statementWithIndentedBlock expressions within a single grammar
- should share a common indentStack)
- - indent - boolean indicating whether block must be indented beyond the
- the current level; set to False for block of left-most statements
- (default=C{True})
-
- A valid block must contain at least one C{blockStatement}.
-
- Example::
- data = '''
- def A(z):
- A1
- B = 100
- G = A2
- A2
- A3
- B
- def BB(a,b,c):
- BB1
- def BBA():
- bba1
- bba2
- bba3
- C
- D
- def spam(x,y):
- def eggs(z):
- pass
- '''
-
-
- indentStack = [1]
- stmt = Forward()
-
- identifier = Word(alphas, alphanums)
- funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":")
- func_body = indentedBlock(stmt, indentStack)
- funcDef = Group( funcDecl + func_body )
-
- rvalue = Forward()
- funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")")
- rvalue << (funcCall | identifier | Word(nums))
- assignment = Group(identifier + "=" + rvalue)
- stmt << ( funcDef | assignment | identifier )
-
- module_body = OneOrMore(stmt)
-
- parseTree = module_body.parseString(data)
- parseTree.pprint()
- prints::
- [['def',
- 'A',
- ['(', 'z', ')'],
- ':',
- [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]],
- 'B',
- ['def',
- 'BB',
- ['(', 'a', 'b', 'c', ')'],
- ':',
- [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]],
- 'C',
- 'D',
- ['def',
- 'spam',
- ['(', 'x', 'y', ')'],
- ':',
- [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]]
- """
- def checkPeerIndent(s,l,t):
- if l >= len(s): return
- curCol = col(l,s)
- if curCol != indentStack[-1]:
- if curCol > indentStack[-1]:
- raise ParseFatalException(s,l,"illegal nesting")
- raise ParseException(s,l,"not a peer entry")
-
- def checkSubIndent(s,l,t):
- curCol = col(l,s)
- if curCol > indentStack[-1]:
- indentStack.append( curCol )
- else:
- raise ParseException(s,l,"not a subentry")
-
- def checkUnindent(s,l,t):
- if l >= len(s): return
- curCol = col(l,s)
- if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]):
- raise ParseException(s,l,"not an unindent")
- indentStack.pop()
-
- NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress())
- INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT')
- PEER = Empty().setParseAction(checkPeerIndent).setName('')
- UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT')
- if indent:
- smExpr = Group( Optional(NL) +
- #~ FollowedBy(blockStatementExpr) +
- INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT)
- else:
- smExpr = Group( Optional(NL) +
- (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) )
- blockStatementExpr.ignore(_bslash + LineEnd())
- return smExpr.setName('indented block')
-
-alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
-punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
-
-anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag'))
-_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\''))
-commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity")
-def replaceHTMLEntity(t):
- """Helper parser action to replace common HTML entities with their special characters"""
- return _htmlEntityMap.get(t.entity)
-
-# it's easy to get these comment structures wrong - they're very common, so may as well make them available
-cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment")
-"Comment of the form C{/* ... */}"
-
-htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment")
-"Comment of the form C{<!-- ... -->}"
-
-restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line")
-dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment")
-"Comment of the form C{// ... (to end of line)}"
-
-cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment")
-"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}"
-
-javaStyleComment = cppStyleComment
-"Same as C{L{cppStyleComment}}"
-
-pythonStyleComment = Regex(r"#.*").setName("Python style comment")
-"Comment of the form C{# ... (to end of line)}"
-
-_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') +
- Optional( Word(" \t") +
- ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem")
-commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList")
-"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas.
- This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}."""
-
-# some other useful expressions - using lower-case class name since we are really using this as a namespace
-class pyparsing_common:
- """
- Here are some common low-level expressions that may be useful in jump-starting parser development:
- - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>})
- - common L{programming identifiers<identifier>}
- - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>})
- - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>}
- - L{UUID<uuid>}
- - L{comma-separated list<comma_separated_list>}
- Parse actions:
- - C{L{convertToInteger}}
- - C{L{convertToFloat}}
- - C{L{convertToDate}}
- - C{L{convertToDatetime}}
- - C{L{stripHTMLTags}}
- - C{L{upcaseTokens}}
- - C{L{downcaseTokens}}
-
- Example::
- pyparsing_common.number.runTests('''
- # any int or real number, returned as the appropriate type
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- ''')
-
- pyparsing_common.fnumber.runTests('''
- # any int or real number, returned as float
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- ''')
-
- pyparsing_common.hex_integer.runTests('''
- # hex numbers
- 100
- FF
- ''')
-
- pyparsing_common.fraction.runTests('''
- # fractions
- 1/2
- -3/4
- ''')
-
- pyparsing_common.mixed_integer.runTests('''
- # mixed fractions
- 1
- 1/2
- -3/4
- 1-3/4
- ''')
-
- import uuid
- pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
- pyparsing_common.uuid.runTests('''
- # uuid
- 12345678-1234-5678-1234-567812345678
- ''')
- prints::
- # any int or real number, returned as the appropriate type
- 100
- [100]
-
- -100
- [-100]
-
- +100
- [100]
-
- 3.14159
- [3.14159]
-
- 6.02e23
- [6.02e+23]
-
- 1e-12
- [1e-12]
-
- # any int or real number, returned as float
- 100
- [100.0]
-
- -100
- [-100.0]
-
- +100
- [100.0]
-
- 3.14159
- [3.14159]
-
- 6.02e23
- [6.02e+23]
-
- 1e-12
- [1e-12]
-
- # hex numbers
- 100
- [256]
-
- FF
- [255]
-
- # fractions
- 1/2
- [0.5]
-
- -3/4
- [-0.75]
-
- # mixed fractions
- 1
- [1]
-
- 1/2
- [0.5]
-
- -3/4
- [-0.75]
-
- 1-3/4
- [1.75]
-
- # uuid
- 12345678-1234-5678-1234-567812345678
- [UUID('12345678-1234-5678-1234-567812345678')]
- """
-
- convertToInteger = tokenMap(int)
- """
- Parse action for converting parsed integers to Python int
- """
-
- convertToFloat = tokenMap(float)
- """
- Parse action for converting parsed numbers to Python float
- """
-
- integer = Word(nums).setName("integer").setParseAction(convertToInteger)
- """expression that parses an unsigned integer, returns an int"""
-
- hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16))
- """expression that parses a hexadecimal integer, returns an int"""
-
- signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger)
- """expression that parses an integer with optional leading sign, returns an int"""
-
- fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction")
- """fractional expression of an integer divided by an integer, returns a float"""
- fraction.addParseAction(lambda t: t[0]/t[-1])
-
- mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction")
- """mixed integer of the form 'integer - fraction', with optional leading integer, returns float"""
- mixed_integer.addParseAction(sum)
-
- real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat)
- """expression that parses a floating point number and returns a float"""
-
- sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat)
- """expression that parses a floating point number with optional scientific notation and returns a float"""
-
- # streamlining this expression makes the docs nicer-looking
- number = (sci_real | real | signed_integer).streamline()
- """any numeric expression, returns the corresponding Python type"""
-
- fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat)
- """any int or real number, returned as float"""
-
- identifier = Word(alphas+'_', alphanums+'_').setName("identifier")
- """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')"""
-
- ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address")
- "IPv4 address (C{0.0.0.0 - 255.255.255.255})"
-
- _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer")
- _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address")
- _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address")
- _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8)
- _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address")
- ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address")
- "IPv6 address (long, short, or mixed form)"
-
- mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address")
- "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)"
-
- @staticmethod
- def convertToDate(fmt="%Y-%m-%d"):
- """
- Helper to create a parse action for converting parsed date string to Python datetime.date
-
- Params -
- - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"})
-
- Example::
- date_expr = pyparsing_common.iso8601_date.copy()
- date_expr.setParseAction(pyparsing_common.convertToDate())
- print(date_expr.parseString("1999-12-31"))
- prints::
- [datetime.date(1999, 12, 31)]
- """
- def cvt_fn(s,l,t):
- try:
- return datetime.strptime(t[0], fmt).date()
- except ValueError as ve:
- raise ParseException(s, l, str(ve))
- return cvt_fn
-
- @staticmethod
- def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"):
- """
- Helper to create a parse action for converting parsed datetime string to Python datetime.datetime
-
- Params -
- - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"})
-
- Example::
- dt_expr = pyparsing_common.iso8601_datetime.copy()
- dt_expr.setParseAction(pyparsing_common.convertToDatetime())
- print(dt_expr.parseString("1999-12-31T23:59:59.999"))
- prints::
- [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)]
- """
- def cvt_fn(s,l,t):
- try:
- return datetime.strptime(t[0], fmt)
- except ValueError as ve:
- raise ParseException(s, l, str(ve))
- return cvt_fn
-
- iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date")
- "ISO8601 date (C{yyyy-mm-dd})"
-
- iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime")
- "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}"
-
- uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID")
- "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})"
-
- _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress()
- @staticmethod
- def stripHTMLTags(s, l, tokens):
- """
- Parse action to remove HTML tags from web page HTML source
-
- Example::
- # strip HTML links from normal text
- text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
- td,td_end = makeHTMLTags("TD")
- table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end
-
- print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page'
- """
- return pyparsing_common._html_stripper.transformString(tokens[0])
-
- _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',')
- + Optional( White(" \t") ) ) ).streamline().setName("commaItem")
- comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list")
- """Predefined expression of 1 or more printable words or quoted strings, separated by commas."""
-
- upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper()))
- """Parse action to convert tokens to upper case."""
-
- downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower()))
- """Parse action to convert tokens to lower case."""
-
-
-if __name__ == "__main__":
-
- selectToken = CaselessLiteral("select")
- fromToken = CaselessLiteral("from")
-
- ident = Word(alphas, alphanums + "_$")
-
- columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
- columnNameList = Group(delimitedList(columnName)).setName("columns")
- columnSpec = ('*' | columnNameList)
-
- tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
- tableNameList = Group(delimitedList(tableName)).setName("tables")
-
- simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables")
-
- # demo runTests method, including embedded comments in test string
- simpleSQL.runTests("""
- # '*' as column list and dotted table name
- select * from SYS.XYZZY
-
- # caseless match on "SELECT", and casts back to "select"
- SELECT * from XYZZY, ABC
-
- # list of column names, and mixed case SELECT keyword
- Select AA,BB,CC from Sys.dual
-
- # multiple tables
- Select A, B, C from Sys.dual, Table2
-
- # invalid SELECT keyword - should fail
- Xelect A, B, C from Sys.dual
-
- # incomplete command - should fail
- Select
-
- # invalid column name - should fail
- Select ^^^ frox Sys.dual
-
- """)
-
- pyparsing_common.number.runTests("""
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- """)
-
- # any int or real number, returned as float
- pyparsing_common.fnumber.runTests("""
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- """)
-
- pyparsing_common.hex_integer.runTests("""
- 100
- FF
- """)
-
- import uuid
- pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
- pyparsing_common.uuid.runTests("""
- 12345678-1234-5678-1234-567812345678
- """)
+# module pyparsing.py
+#
+# Copyright (c) 2003-2018 Paul T. McGuire
+#
+# 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__doc__ = \
+"""
+pyparsing module - Classes and methods to define and execute parsing grammars
+=============================================================================
+
+The pyparsing module is an alternative approach to creating and executing simple grammars,
+vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you
+don't need to learn a new syntax for defining grammars or matching expressions - the parsing module
+provides a library of classes that you use to construct the grammar directly in Python.
+
+Here is a program to parse "Hello, World!" (or any greeting of the form
+C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements
+(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to
+L{Literal} expressions)::
+
+ from pyparsing import Word, alphas
+
+ # define grammar of a greeting
+ greet = Word(alphas) + "," + Word(alphas) + "!"
+
+ hello = "Hello, World!"
+ print (hello, "->", greet.parseString(hello))
+
+The program outputs the following::
+
+ Hello, World! -> ['Hello', ',', 'World', '!']
+
+The Python representation of the grammar is quite readable, owing to the self-explanatory
+class names, and the use of '+', '|' and '^' operators.
+
+The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an
+object with named attributes.
+
+The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
+ - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.)
+ - quoted strings
+ - embedded comments
+
+
+Getting Started -
+-----------------
+Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing
+classes inherit from. Use the docstrings for examples of how to:
+ - construct literal match expressions from L{Literal} and L{CaselessLiteral} classes
+ - construct character word-group expressions using the L{Word} class
+ - see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes
+ - use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones
+ - associate names with your parsed results using L{ParserElement.setResultsName}
+ - find some helpful expression short-cuts like L{delimitedList} and L{oneOf}
+ - find more useful common expressions in the L{pyparsing_common} namespace class
+"""
+
+__version__ = "2.2.1"
+__versionTime__ = "18 Sep 2018 00:49 UTC"
+__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>"
+
+import string
+from weakref import ref as wkref
+import copy
+import sys
+import warnings
+import re
+import sre_constants
+import collections
+import pprint
+import traceback
+import types
+from datetime import datetime
+
+try:
+ from _thread import RLock
+except ImportError:
+ from threading import RLock
+
+try:
+ # Python 3
+ from collections.abc import Iterable
+ from collections.abc import MutableMapping
+except ImportError:
+ # Python 2.7
+ from collections import Iterable
+ from collections import MutableMapping
+
+try:
+ from collections import OrderedDict as _OrderedDict
+except ImportError:
+ try:
+ from ordereddict import OrderedDict as _OrderedDict
+ except ImportError:
+ _OrderedDict = None
+
+#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) )
+
+__all__ = [
+'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty',
+'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal',
+'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or',
+'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException',
+'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException',
+'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter',
+'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore',
+'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col',
+'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString',
+'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums',
+'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno',
+'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral',
+'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables',
+'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity',
+'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd',
+'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute',
+'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass',
+'CloseMatch', 'tokenMap', 'pyparsing_common',
+]
+
+system_version = tuple(sys.version_info)[:3]
+PY_3 = system_version[0] == 3
+if PY_3:
+ _MAX_INT = sys.maxsize
+ basestring = str
+ unichr = chr
+ _ustr = str
+
+ # build list of single arg builtins, that can be used as parse actions
+ singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max]
+
+else:
+ _MAX_INT = sys.maxint
+ range = xrange
+
+ def _ustr(obj):
+ """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
+ str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
+ then < returns the unicode object | encodes it with the default encoding | ... >.
+ """
+ if isinstance(obj,unicode):
+ return obj
+
+ try:
+ # If this works, then _ustr(obj) has the same behaviour as str(obj), so
+ # it won't break any existing code.
+ return str(obj)
+
+ except UnicodeEncodeError:
+ # Else encode it
+ ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace')
+ xmlcharref = Regex(r'&#\d+;')
+ xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:])
+ return xmlcharref.transformString(ret)
+
+ # build list of single arg builtins, tolerant of Python version, that can be used as parse actions
+ singleArgBuiltins = []
+ import __builtin__
+ for fname in "sum len sorted reversed list tuple set any all min max".split():
+ try:
+ singleArgBuiltins.append(getattr(__builtin__,fname))
+ except AttributeError:
+ continue
+
+_generatorType = type((y for y in range(1)))
+
+def _xml_escape(data):
+ """Escape &, <, >, ", ', etc. in a string of data."""
+
+ # ampersand must be replaced first
+ from_symbols = '&><"\''
+ to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split())
+ for from_,to_ in zip(from_symbols, to_symbols):
+ data = data.replace(from_, to_)
+ return data
+
+class _Constants(object):
+ pass
+
+alphas = string.ascii_uppercase + string.ascii_lowercase
+nums = "0123456789"
+hexnums = nums + "ABCDEFabcdef"
+alphanums = alphas + nums
+_bslash = chr(92)
+printables = "".join(c for c in string.printable if c not in string.whitespace)
+
+class ParseBaseException(Exception):
+ """base exception class for all parsing runtime exceptions"""
+ # Performance tuning: we construct a *lot* of these, so keep this
+ # constructor as small and fast as possible
+ def __init__( self, pstr, loc=0, msg=None, elem=None ):
+ self.loc = loc
+ if msg is None:
+ self.msg = pstr
+ self.pstr = ""
+ else:
+ self.msg = msg
+ self.pstr = pstr
+ self.parserElement = elem
+ self.args = (pstr, loc, msg)
+
+ @classmethod
+ def _from_exception(cls, pe):
+ """
+ internal factory method to simplify creating one type of ParseException
+ from another - avoids having __init__ signature conflicts among subclasses
+ """
+ return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement)
+
+ def __getattr__( self, aname ):
+ """supported attributes by name are:
+ - lineno - returns the line number of the exception text
+ - col - returns the column number of the exception text
+ - line - returns the line containing the exception text
+ """
+ if( aname == "lineno" ):
+ return lineno( self.loc, self.pstr )
+ elif( aname in ("col", "column") ):
+ return col( self.loc, self.pstr )
+ elif( aname == "line" ):
+ return line( self.loc, self.pstr )
+ else:
+ raise AttributeError(aname)
+
+ def __str__( self ):
+ return "%s (at char %d), (line:%d, col:%d)" % \
+ ( self.msg, self.loc, self.lineno, self.column )
+ def __repr__( self ):
+ return _ustr(self)
+ def markInputline( self, markerString = ">!<" ):
+ """Extracts the exception line from the input string, and marks
+ the location of the exception with a special symbol.
+ """
+ line_str = self.line
+ line_column = self.column - 1
+ if markerString:
+ line_str = "".join((line_str[:line_column],
+ markerString, line_str[line_column:]))
+ return line_str.strip()
+ def __dir__(self):
+ return "lineno col line".split() + dir(type(self))
+
+class ParseException(ParseBaseException):
+ """
+ Exception thrown when parse expressions don't match class;
+ supported attributes by name are:
+ - lineno - returns the line number of the exception text
+ - col - returns the column number of the exception text
+ - line - returns the line containing the exception text
+
+ Example::
+ try:
+ Word(nums).setName("integer").parseString("ABC")
+ except ParseException as pe:
+ print(pe)
+ print("column: {}".format(pe.col))
+
+ prints::
+ Expected integer (at char 0), (line:1, col:1)
+ column: 1
+ """
+ pass
+
+class ParseFatalException(ParseBaseException):
+ """user-throwable exception thrown when inconsistent parse content
+ is found; stops all parsing immediately"""
+ pass
+
+class ParseSyntaxException(ParseFatalException):
+ """just like L{ParseFatalException}, but thrown internally when an
+ L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop
+ immediately because an unbacktrackable syntax error has been found"""
+ pass
+
+#~ class ReparseException(ParseBaseException):
+ #~ """Experimental class - parse actions can raise this exception to cause
+ #~ pyparsing to reparse the input string:
+ #~ - with a modified input string, and/or
+ #~ - with a modified start location
+ #~ Set the values of the ReparseException in the constructor, and raise the
+ #~ exception in a parse action to cause pyparsing to use the new string/location.
+ #~ Setting the values as None causes no change to be made.
+ #~ """
+ #~ def __init_( self, newstring, restartLoc ):
+ #~ self.newParseText = newstring
+ #~ self.reparseLoc = restartLoc
+
+class RecursiveGrammarException(Exception):
+ """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive"""
+ def __init__( self, parseElementList ):
+ self.parseElementTrace = parseElementList
+
+ def __str__( self ):
+ return "RecursiveGrammarException: %s" % self.parseElementTrace
+
+class _ParseResultsWithOffset(object):
+ def __init__(self,p1,p2):
+ self.tup = (p1,p2)
+ def __getitem__(self,i):
+ return self.tup[i]
+ def __repr__(self):
+ return repr(self.tup[0])
+ def setOffset(self,i):
+ self.tup = (self.tup[0],i)
+
+class ParseResults(object):
+ """
+ Structured parse results, to provide multiple means of access to the parsed data:
+ - as a list (C{len(results)})
+ - by list index (C{results[0], results[1]}, etc.)
+ - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName})
+
+ Example::
+ integer = Word(nums)
+ date_str = (integer.setResultsName("year") + '/'
+ + integer.setResultsName("month") + '/'
+ + integer.setResultsName("day"))
+ # equivalent form:
+ # date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ # parseString returns a ParseResults object
+ result = date_str.parseString("1999/12/31")
+
+ def test(s, fn=repr):
+ print("%s -> %s" % (s, fn(eval(s))))
+ test("list(result)")
+ test("result[0]")
+ test("result['month']")
+ test("result.day")
+ test("'month' in result")
+ test("'minutes' in result")
+ test("result.dump()", str)
+ prints::
+ list(result) -> ['1999', '/', '12', '/', '31']
+ result[0] -> '1999'
+ result['month'] -> '12'
+ result.day -> '31'
+ 'month' in result -> True
+ 'minutes' in result -> False
+ result.dump() -> ['1999', '/', '12', '/', '31']
+ - day: 31
+ - month: 12
+ - year: 1999
+ """
+ def __new__(cls, toklist=None, name=None, asList=True, modal=True ):
+ if isinstance(toklist, cls):
+ return toklist
+ retobj = object.__new__(cls)
+ retobj.__doinit = True
+ return retobj
+
+ # Performance tuning: we construct a *lot* of these, so keep this
+ # constructor as small and fast as possible
+ def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ):
+ if self.__doinit:
+ self.__doinit = False
+ self.__name = None
+ self.__parent = None
+ self.__accumNames = {}
+ self.__asList = asList
+ self.__modal = modal
+ if toklist is None:
+ toklist = []
+ if isinstance(toklist, list):
+ self.__toklist = toklist[:]
+ elif isinstance(toklist, _generatorType):
+ self.__toklist = list(toklist)
+ else:
+ self.__toklist = [toklist]
+ self.__tokdict = dict()
+
+ if name is not None and name:
+ if not modal:
+ self.__accumNames[name] = 0
+ if isinstance(name,int):
+ name = _ustr(name) # will always return a str, but use _ustr for consistency
+ self.__name = name
+ if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])):
+ if isinstance(toklist,basestring):
+ toklist = [ toklist ]
+ if asList:
+ if isinstance(toklist,ParseResults):
+ self[name] = _ParseResultsWithOffset(toklist.copy(),0)
+ else:
+ self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0)
+ self[name].__name = name
+ else:
+ try:
+ self[name] = toklist[0]
+ except (KeyError,TypeError,IndexError):
+ self[name] = toklist
+
+ def __getitem__( self, i ):
+ if isinstance( i, (int,slice) ):
+ return self.__toklist[i]
+ else:
+ if i not in self.__accumNames:
+ return self.__tokdict[i][-1][0]
+ else:
+ return ParseResults([ v[0] for v in self.__tokdict[i] ])
+
+ def __setitem__( self, k, v, isinstance=isinstance ):
+ if isinstance(v,_ParseResultsWithOffset):
+ self.__tokdict[k] = self.__tokdict.get(k,list()) + [v]
+ sub = v[0]
+ elif isinstance(k,(int,slice)):
+ self.__toklist[k] = v
+ sub = v
+ else:
+ self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)]
+ sub = v
+ if isinstance(sub,ParseResults):
+ sub.__parent = wkref(self)
+
+ def __delitem__( self, i ):
+ if isinstance(i,(int,slice)):
+ mylen = len( self.__toklist )
+ del self.__toklist[i]
+
+ # convert int to slice
+ if isinstance(i, int):
+ if i < 0:
+ i += mylen
+ i = slice(i, i+1)
+ # get removed indices
+ removed = list(range(*i.indices(mylen)))
+ removed.reverse()
+ # fixup indices in token dictionary
+ for name,occurrences in self.__tokdict.items():
+ for j in removed:
+ for k, (value, position) in enumerate(occurrences):
+ occurrences[k] = _ParseResultsWithOffset(value, position - (position > j))
+ else:
+ del self.__tokdict[i]
+
+ def __contains__( self, k ):
+ return k in self.__tokdict
+
+ def __len__( self ): return len( self.__toklist )
+ def __bool__(self): return ( not not self.__toklist )
+ __nonzero__ = __bool__
+ def __iter__( self ): return iter( self.__toklist )
+ def __reversed__( self ): return iter( self.__toklist[::-1] )
+ def _iterkeys( self ):
+ if hasattr(self.__tokdict, "iterkeys"):
+ return self.__tokdict.iterkeys()
+ else:
+ return iter(self.__tokdict)
+
+ def _itervalues( self ):
+ return (self[k] for k in self._iterkeys())
+
+ def _iteritems( self ):
+ return ((k, self[k]) for k in self._iterkeys())
+
+ if PY_3:
+ keys = _iterkeys
+ """Returns an iterator of all named result keys (Python 3.x only)."""
+
+ values = _itervalues
+ """Returns an iterator of all named result values (Python 3.x only)."""
+
+ items = _iteritems
+ """Returns an iterator of all named result key-value tuples (Python 3.x only)."""
+
+ else:
+ iterkeys = _iterkeys
+ """Returns an iterator of all named result keys (Python 2.x only)."""
+
+ itervalues = _itervalues
+ """Returns an iterator of all named result values (Python 2.x only)."""
+
+ iteritems = _iteritems
+ """Returns an iterator of all named result key-value tuples (Python 2.x only)."""
+
+ def keys( self ):
+ """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.iterkeys())
+
+ def values( self ):
+ """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.itervalues())
+
+ def items( self ):
+ """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.iteritems())
+
+ def haskeys( self ):
+ """Since keys() returns an iterator, this method is helpful in bypassing
+ code that looks for the existence of any defined results names."""
+ return bool(self.__tokdict)
+
+ def pop( self, *args, **kwargs):
+ """
+ Removes and returns item at specified index (default=C{last}).
+ Supports both C{list} and C{dict} semantics for C{pop()}. If passed no
+ argument or an integer argument, it will use C{list} semantics
+ and pop tokens from the list of parsed tokens. If passed a
+ non-integer argument (most likely a string), it will use C{dict}
+ semantics and pop the corresponding value from any defined
+ results names. A second default return value argument is
+ supported, just as in C{dict.pop()}.
+
+ Example::
+ def remove_first(tokens):
+ tokens.pop(0)
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+ print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321']
+
+ label = Word(alphas)
+ patt = label("LABEL") + OneOrMore(Word(nums))
+ print(patt.parseString("AAB 123 321").dump())
+
+ # Use pop() in a parse action to remove named result (note that corresponding value is not
+ # removed from list form of results)
+ def remove_LABEL(tokens):
+ tokens.pop("LABEL")
+ return tokens
+ patt.addParseAction(remove_LABEL)
+ print(patt.parseString("AAB 123 321").dump())
+ prints::
+ ['AAB', '123', '321']
+ - LABEL: AAB
+
+ ['AAB', '123', '321']
+ """
+ if not args:
+ args = [-1]
+ for k,v in kwargs.items():
+ if k == 'default':
+ args = (args[0], v)
+ else:
+ raise TypeError("pop() got an unexpected keyword argument '%s'" % k)
+ if (isinstance(args[0], int) or
+ len(args) == 1 or
+ args[0] in self):
+ index = args[0]
+ ret = self[index]
+ del self[index]
+ return ret
+ else:
+ defaultvalue = args[1]
+ return defaultvalue
+
+ def get(self, key, defaultValue=None):
+ """
+ Returns named result matching the given key, or if there is no
+ such name, then returns the given C{defaultValue} or C{None} if no
+ C{defaultValue} is specified.
+
+ Similar to C{dict.get()}.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString("1999/12/31")
+ print(result.get("year")) # -> '1999'
+ print(result.get("hour", "not specified")) # -> 'not specified'
+ print(result.get("hour")) # -> None
+ """
+ if key in self:
+ return self[key]
+ else:
+ return defaultValue
+
+ def insert( self, index, insStr ):
+ """
+ Inserts new element at location index in the list of parsed tokens.
+
+ Similar to C{list.insert()}.
+
+ Example::
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+
+ # use a parse action to insert the parse location in the front of the parsed results
+ def insert_locn(locn, tokens):
+ tokens.insert(0, locn)
+ print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321']
+ """
+ self.__toklist.insert(index, insStr)
+ # fixup indices in token dictionary
+ for name,occurrences in self.__tokdict.items():
+ for k, (value, position) in enumerate(occurrences):
+ occurrences[k] = _ParseResultsWithOffset(value, position + (position > index))
+
+ def append( self, item ):
+ """
+ Add single element to end of ParseResults list of elements.
+
+ Example::
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+
+ # use a parse action to compute the sum of the parsed integers, and add it to the end
+ def append_sum(tokens):
+ tokens.append(sum(map(int, tokens)))
+ print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444]
+ """
+ self.__toklist.append(item)
+
+ def extend( self, itemseq ):
+ """
+ Add sequence of elements to end of ParseResults list of elements.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+
+ # use a parse action to append the reverse of the matched strings, to make a palindrome
+ def make_palindrome(tokens):
+ tokens.extend(reversed([t[::-1] for t in tokens]))
+ return ''.join(tokens)
+ print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl'
+ """
+ if isinstance(itemseq, ParseResults):
+ self += itemseq
+ else:
+ self.__toklist.extend(itemseq)
+
+ def clear( self ):
+ """
+ Clear all elements and results names.
+ """
+ del self.__toklist[:]
+ self.__tokdict.clear()
+
+ def __getattr__( self, name ):
+ try:
+ return self[name]
+ except KeyError:
+ return ""
+
+ if name in self.__tokdict:
+ if name not in self.__accumNames:
+ return self.__tokdict[name][-1][0]
+ else:
+ return ParseResults([ v[0] for v in self.__tokdict[name] ])
+ else:
+ return ""
+
+ def __add__( self, other ):
+ ret = self.copy()
+ ret += other
+ return ret
+
+ def __iadd__( self, other ):
+ if other.__tokdict:
+ offset = len(self.__toklist)
+ addoffset = lambda a: offset if a<0 else a+offset
+ otheritems = other.__tokdict.items()
+ otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) )
+ for (k,vlist) in otheritems for v in vlist]
+ for k,v in otherdictitems:
+ self[k] = v
+ if isinstance(v[0],ParseResults):
+ v[0].__parent = wkref(self)
+
+ self.__toklist += other.__toklist
+ self.__accumNames.update( other.__accumNames )
+ return self
+
+ def __radd__(self, other):
+ if isinstance(other,int) and other == 0:
+ # useful for merging many ParseResults using sum() builtin
+ return self.copy()
+ else:
+ # this may raise a TypeError - so be it
+ return other + self
+
+ def __repr__( self ):
+ return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) )
+
+ def __str__( self ):
+ return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']'
+
+ def _asStringList( self, sep='' ):
+ out = []
+ for item in self.__toklist:
+ if out and sep:
+ out.append(sep)
+ if isinstance( item, ParseResults ):
+ out += item._asStringList()
+ else:
+ out.append( _ustr(item) )
+ return out
+
+ def asList( self ):
+ """
+ Returns the parse results as a nested list of matching tokens, all converted to strings.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+ result = patt.parseString("sldkj lsdkj sldkj")
+ # even though the result prints in string-like form, it is actually a pyparsing ParseResults
+ print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj']
+
+ # Use asList() to create an actual list
+ result_list = result.asList()
+ print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj']
+ """
+ return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist]
+
+ def asDict( self ):
+ """
+ Returns the named parse results as a nested dictionary.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString('12/31/1999')
+ print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]})
+
+ result_dict = result.asDict()
+ print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'}
+
+ # even though a ParseResults supports dict-like access, sometime you just need to have a dict
+ import json
+ print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable
+ print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"}
+ """
+ if PY_3:
+ item_fn = self.items
+ else:
+ item_fn = self.iteritems
+
+ def toItem(obj):
+ if isinstance(obj, ParseResults):
+ if obj.haskeys():
+ return obj.asDict()
+ else:
+ return [toItem(v) for v in obj]
+ else:
+ return obj
+
+ return dict((k,toItem(v)) for k,v in item_fn())
+
+ def copy( self ):
+ """
+ Returns a new copy of a C{ParseResults} object.
+ """
+ ret = ParseResults( self.__toklist )
+ ret.__tokdict = self.__tokdict.copy()
+ ret.__parent = self.__parent
+ ret.__accumNames.update( self.__accumNames )
+ ret.__name = self.__name
+ return ret
+
+ def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ):
+ """
+ (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names.
+ """
+ nl = "\n"
+ out = []
+ namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items()
+ for v in vlist)
+ nextLevelIndent = indent + " "
+
+ # collapse out indents if formatting is not desired
+ if not formatted:
+ indent = ""
+ nextLevelIndent = ""
+ nl = ""
+
+ selfTag = None
+ if doctag is not None:
+ selfTag = doctag
+ else:
+ if self.__name:
+ selfTag = self.__name
+
+ if not selfTag:
+ if namedItemsOnly:
+ return ""
+ else:
+ selfTag = "ITEM"
+
+ out += [ nl, indent, "<", selfTag, ">" ]
+
+ for i,res in enumerate(self.__toklist):
+ if isinstance(res,ParseResults):
+ if i in namedItems:
+ out += [ res.asXML(namedItems[i],
+ namedItemsOnly and doctag is None,
+ nextLevelIndent,
+ formatted)]
+ else:
+ out += [ res.asXML(None,
+ namedItemsOnly and doctag is None,
+ nextLevelIndent,
+ formatted)]
+ else:
+ # individual token, see if there is a name for it
+ resTag = None
+ if i in namedItems:
+ resTag = namedItems[i]
+ if not resTag:
+ if namedItemsOnly:
+ continue
+ else:
+ resTag = "ITEM"
+ xmlBodyText = _xml_escape(_ustr(res))
+ out += [ nl, nextLevelIndent, "<", resTag, ">",
+ xmlBodyText,
+ "</", resTag, ">" ]
+
+ out += [ nl, indent, "</", selfTag, ">" ]
+ return "".join(out)
+
+ def __lookup(self,sub):
+ for k,vlist in self.__tokdict.items():
+ for v,loc in vlist:
+ if sub is v:
+ return k
+ return None
+
+ def getName(self):
+ r"""
+ Returns the results name for this token expression. Useful when several
+ different expressions might match at a particular location.
+
+ Example::
+ integer = Word(nums)
+ ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d")
+ house_number_expr = Suppress('#') + Word(nums, alphanums)
+ user_data = (Group(house_number_expr)("house_number")
+ | Group(ssn_expr)("ssn")
+ | Group(integer)("age"))
+ user_info = OneOrMore(user_data)
+
+ result = user_info.parseString("22 111-22-3333 #221B")
+ for item in result:
+ print(item.getName(), ':', item[0])
+ prints::
+ age : 22
+ ssn : 111-22-3333
+ house_number : 221B
+ """
+ if self.__name:
+ return self.__name
+ elif self.__parent:
+ par = self.__parent()
+ if par:
+ return par.__lookup(self)
+ else:
+ return None
+ elif (len(self) == 1 and
+ len(self.__tokdict) == 1 and
+ next(iter(self.__tokdict.values()))[0][1] in (0,-1)):
+ return next(iter(self.__tokdict.keys()))
+ else:
+ return None
+
+ def dump(self, indent='', depth=0, full=True):
+ """
+ Diagnostic method for listing out the contents of a C{ParseResults}.
+ Accepts an optional C{indent} argument so that this string can be embedded
+ in a nested display of other data.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString('12/31/1999')
+ print(result.dump())
+ prints::
+ ['12', '/', '31', '/', '1999']
+ - day: 1999
+ - month: 31
+ - year: 12
+ """
+ out = []
+ NL = '\n'
+ out.append( indent+_ustr(self.asList()) )
+ if full:
+ if self.haskeys():
+ items = sorted((str(k), v) for k,v in self.items())
+ for k,v in items:
+ if out:
+ out.append(NL)
+ out.append( "%s%s- %s: " % (indent,(' '*depth), k) )
+ if isinstance(v,ParseResults):
+ if v:
+ out.append( v.dump(indent,depth+1) )
+ else:
+ out.append(_ustr(v))
+ else:
+ out.append(repr(v))
+ elif any(isinstance(vv,ParseResults) for vv in self):
+ v = self
+ for i,vv in enumerate(v):
+ if isinstance(vv,ParseResults):
+ out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) ))
+ else:
+ out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv)))
+
+ return "".join(out)
+
+ def pprint(self, *args, **kwargs):
+ """
+ Pretty-printer for parsed results as a list, using the C{pprint} module.
+ Accepts additional positional or keyword args as defined for the
+ C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint})
+
+ Example::
+ ident = Word(alphas, alphanums)
+ num = Word(nums)
+ func = Forward()
+ term = ident | num | Group('(' + func + ')')
+ func <<= ident + Group(Optional(delimitedList(term)))
+ result = func.parseString("fna a,b,(fnb c,d,200),100")
+ result.pprint(width=40)
+ prints::
+ ['fna',
+ ['a',
+ 'b',
+ ['(', 'fnb', ['c', 'd', '200'], ')'],
+ '100']]
+ """
+ pprint.pprint(self.asList(), *args, **kwargs)
+
+ # add support for pickle protocol
+ def __getstate__(self):
+ return ( self.__toklist,
+ ( self.__tokdict.copy(),
+ self.__parent is not None and self.__parent() or None,
+ self.__accumNames,
+ self.__name ) )
+
+ def __setstate__(self,state):
+ self.__toklist = state[0]
+ (self.__tokdict,
+ par,
+ inAccumNames,
+ self.__name) = state[1]
+ self.__accumNames = {}
+ self.__accumNames.update(inAccumNames)
+ if par is not None:
+ self.__parent = wkref(par)
+ else:
+ self.__parent = None
+
+ def __getnewargs__(self):
+ return self.__toklist, self.__name, self.__asList, self.__modal
+
+ def __dir__(self):
+ return (dir(type(self)) + list(self.keys()))
+
+MutableMapping.register(ParseResults)
+
+def col (loc,strg):
+ """Returns current column within a string, counting newlines as line separators.
+ The first column is number 1.
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+ """
+ s = strg
+ return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc)
+
+def lineno(loc,strg):
+ """Returns current line number within a string, counting newlines as line separators.
+ The first line is number 1.
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+ """
+ return strg.count("\n",0,loc) + 1
+
+def line( loc, strg ):
+ """Returns the line of text containing loc within a string, counting newlines as line separators.
+ """
+ lastCR = strg.rfind("\n", 0, loc)
+ nextCR = strg.find("\n", loc)
+ if nextCR >= 0:
+ return strg[lastCR+1:nextCR]
+ else:
+ return strg[lastCR+1:]
+
+def _defaultStartDebugAction( instring, loc, expr ):
+ print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )))
+
+def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ):
+ print ("Matched " + _ustr(expr) + " -> " + str(toks.asList()))
+
+def _defaultExceptionDebugAction( instring, loc, expr, exc ):
+ print ("Exception raised:" + _ustr(exc))
+
+def nullDebugAction(*args):
+ """'Do-nothing' debug action, to suppress debugging output during parsing."""
+ pass
+
+# Only works on Python 3.x - nonlocal is toxic to Python 2 installs
+#~ 'decorator to trim function calls to match the arity of the target'
+#~ def _trim_arity(func, maxargs=3):
+ #~ if func in singleArgBuiltins:
+ #~ return lambda s,l,t: func(t)
+ #~ limit = 0
+ #~ foundArity = False
+ #~ def wrapper(*args):
+ #~ nonlocal limit,foundArity
+ #~ while 1:
+ #~ try:
+ #~ ret = func(*args[limit:])
+ #~ foundArity = True
+ #~ return ret
+ #~ except TypeError:
+ #~ if limit == maxargs or foundArity:
+ #~ raise
+ #~ limit += 1
+ #~ continue
+ #~ return wrapper
+
+# this version is Python 2.x-3.x cross-compatible
+'decorator to trim function calls to match the arity of the target'
+def _trim_arity(func, maxargs=2):
+ if func in singleArgBuiltins:
+ return lambda s,l,t: func(t)
+ limit = [0]
+ foundArity = [False]
+
+ # traceback return data structure changed in Py3.5 - normalize back to plain tuples
+ if system_version[:2] >= (3,5):
+ def extract_stack(limit=0):
+ # special handling for Python 3.5.0 - extra deep call stack by 1
+ offset = -3 if system_version == (3,5,0) else -2
+ frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset]
+ return [frame_summary[:2]]
+ def extract_tb(tb, limit=0):
+ frames = traceback.extract_tb(tb, limit=limit)
+ frame_summary = frames[-1]
+ return [frame_summary[:2]]
+ else:
+ extract_stack = traceback.extract_stack
+ extract_tb = traceback.extract_tb
+
+ # synthesize what would be returned by traceback.extract_stack at the call to
+ # user's parse action 'func', so that we don't incur call penalty at parse time
+
+ LINE_DIFF = 6
+ # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND
+ # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!!
+ this_line = extract_stack(limit=2)[-1]
+ pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF)
+
+ def wrapper(*args):
+ while 1:
+ try:
+ ret = func(*args[limit[0]:])
+ foundArity[0] = True
+ return ret
+ except TypeError:
+ # re-raise TypeErrors if they did not come from our arity testing
+ if foundArity[0]:
+ raise
+ else:
+ try:
+ tb = sys.exc_info()[-1]
+ if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth:
+ raise
+ finally:
+ del tb
+
+ if limit[0] <= maxargs:
+ limit[0] += 1
+ continue
+ raise
+
+ # copy func name to wrapper for sensible debug output
+ func_name = "<parse action>"
+ try:
+ func_name = getattr(func, '__name__',
+ getattr(func, '__class__').__name__)
+ except Exception:
+ func_name = str(func)
+ wrapper.__name__ = func_name
+
+ return wrapper
+
+class ParserElement(object):
+ """Abstract base level parser element class."""
+ DEFAULT_WHITE_CHARS = " \n\t\r"
+ verbose_stacktrace = False
+
+ @staticmethod
+ def setDefaultWhitespaceChars( chars ):
+ r"""
+ Overrides the default whitespace chars
+
+ Example::
+ # default whitespace chars are space, <TAB> and newline
+ OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl']
+
+ # change to just treat newline as significant
+ ParserElement.setDefaultWhitespaceChars(" \t")
+ OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def']
+ """
+ ParserElement.DEFAULT_WHITE_CHARS = chars
+
+ @staticmethod
+ def inlineLiteralsUsing(cls):
+ """
+ Set class to be used for inclusion of string literals into a parser.
+
+ Example::
+ # default literal class used is Literal
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
+
+
+ # change to Suppress
+ ParserElement.inlineLiteralsUsing(Suppress)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ date_str.parseString("1999/12/31") # -> ['1999', '12', '31']
+ """
+ ParserElement._literalStringClass = cls
+
+ def __init__( self, savelist=False ):
+ self.parseAction = list()
+ self.failAction = None
+ #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall
+ self.strRepr = None
+ self.resultsName = None
+ self.saveAsList = savelist
+ self.skipWhitespace = True
+ self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
+ self.copyDefaultWhiteChars = True
+ self.mayReturnEmpty = False # used when checking for left-recursion
+ self.keepTabs = False
+ self.ignoreExprs = list()
+ self.debug = False
+ self.streamlined = False
+ self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index
+ self.errmsg = ""
+ self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all)
+ self.debugActions = ( None, None, None ) #custom debug actions
+ self.re = None
+ self.callPreparse = True # used to avoid redundant calls to preParse
+ self.callDuringTry = False
+
+ def copy( self ):
+ """
+ Make a copy of this C{ParserElement}. Useful for defining different parse actions
+ for the same parsing pattern, using copies of the original parse element.
+
+ Example::
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K")
+ integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
+
+ print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M"))
+ prints::
+ [5120, 100, 655360, 268435456]
+ Equivalent form of C{expr.copy()} is just C{expr()}::
+ integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
+ """
+ cpy = copy.copy( self )
+ cpy.parseAction = self.parseAction[:]
+ cpy.ignoreExprs = self.ignoreExprs[:]
+ if self.copyDefaultWhiteChars:
+ cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
+ return cpy
+
+ def setName( self, name ):
+ """
+ Define name for this expression, makes debugging and exception messages clearer.
+
+ Example::
+ Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1)
+ Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1)
+ """
+ self.name = name
+ self.errmsg = "Expected " + self.name
+ if hasattr(self,"exception"):
+ self.exception.msg = self.errmsg
+ return self
+
+ def setResultsName( self, name, listAllMatches=False ):
+ """
+ Define name for referencing matching tokens as a nested attribute
+ of the returned parse results.
+ NOTE: this returns a *copy* of the original C{ParserElement} object;
+ this is so that the client can define a basic element, such as an
+ integer, and reference it in multiple places with different names.
+
+ You can also set results names using the abbreviated syntax,
+ C{expr("name")} in place of C{expr.setResultsName("name")} -
+ see L{I{__call__}<__call__>}.
+
+ Example::
+ date_str = (integer.setResultsName("year") + '/'
+ + integer.setResultsName("month") + '/'
+ + integer.setResultsName("day"))
+
+ # equivalent form:
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+ """
+ newself = self.copy()
+ if name.endswith("*"):
+ name = name[:-1]
+ listAllMatches=True
+ newself.resultsName = name
+ newself.modalResults = not listAllMatches
+ return newself
+
+ def setBreak(self,breakFlag = True):
+ """Method to invoke the Python pdb debugger when this element is
+ about to be parsed. Set C{breakFlag} to True to enable, False to
+ disable.
+ """
+ if breakFlag:
+ _parseMethod = self._parse
+ def breaker(instring, loc, doActions=True, callPreParse=True):
+ import pdb
+ pdb.set_trace()
+ return _parseMethod( instring, loc, doActions, callPreParse )
+ breaker._originalParseMethod = _parseMethod
+ self._parse = breaker
+ else:
+ if hasattr(self._parse,"_originalParseMethod"):
+ self._parse = self._parse._originalParseMethod
+ return self
+
+ def setParseAction( self, *fns, **kwargs ):
+ """
+ Define one or more actions to perform when successfully matching parse element definition.
+ Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)},
+ C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where:
+ - s = the original string being parsed (see note below)
+ - loc = the location of the matching substring
+ - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object
+ If the functions in fns modify the tokens, they can return them as the return
+ value from fn, and the modified list of tokens will replace the original.
+ Otherwise, fn does not need to return any value.
+
+ Optional keyword arguments:
+ - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{parseString}<parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer + '/' + integer + '/' + integer
+
+ date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
+
+ # use parse action to convert to ints at parse time
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ date_str = integer + '/' + integer + '/' + integer
+
+ # note that integer fields are now ints, not strings
+ date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31]
+ """
+ self.parseAction = list(map(_trim_arity, list(fns)))
+ self.callDuringTry = kwargs.get("callDuringTry", False)
+ return self
+
+ def addParseAction( self, *fns, **kwargs ):
+ """
+ Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}.
+
+ See examples in L{I{copy}<copy>}.
+ """
+ self.parseAction += list(map(_trim_arity, list(fns)))
+ self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
+ return self
+
+ def addCondition(self, *fns, **kwargs):
+ """Add a boolean predicate function to expression's list of parse actions. See
+ L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction},
+ functions passed to C{addCondition} need to return boolean success/fail of the condition.
+
+ Optional keyword arguments:
+ - message = define a custom message to be used in the raised exception
+ - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException
+
+ Example::
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ year_int = integer.copy()
+ year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later")
+ date_str = year_int + '/' + integer + '/' + integer
+
+ result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1)
+ """
+ msg = kwargs.get("message", "failed user-defined condition")
+ exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException
+ for fn in fns:
+ def pa(s,l,t):
+ if not bool(_trim_arity(fn)(s,l,t)):
+ raise exc_type(s,l,msg)
+ self.parseAction.append(pa)
+ self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
+ return self
+
+ def setFailAction( self, fn ):
+ """Define action to perform if parsing fails at this expression.
+ Fail acton fn is a callable function that takes the arguments
+ C{fn(s,loc,expr,err)} where:
+ - s = string being parsed
+ - loc = location where expression match was attempted and failed
+ - expr = the parse expression that failed
+ - err = the exception thrown
+ The function returns no value. It may throw C{L{ParseFatalException}}
+ if it is desired to stop parsing immediately."""
+ self.failAction = fn
+ return self
+
+ def _skipIgnorables( self, instring, loc ):
+ exprsFound = True
+ while exprsFound:
+ exprsFound = False
+ for e in self.ignoreExprs:
+ try:
+ while 1:
+ loc,dummy = e._parse( instring, loc )
+ exprsFound = True
+ except ParseException:
+ pass
+ return loc
+
+ def preParse( self, instring, loc ):
+ if self.ignoreExprs:
+ loc = self._skipIgnorables( instring, loc )
+
+ if self.skipWhitespace:
+ wt = self.whiteChars
+ instrlen = len(instring)
+ while loc < instrlen and instring[loc] in wt:
+ loc += 1
+
+ return loc
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ return loc, []
+
+ def postParse( self, instring, loc, tokenlist ):
+ return tokenlist
+
+ #~ @profile
+ def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
+ debugging = ( self.debug ) #and doActions )
+
+ if debugging or self.failAction:
+ #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))
+ if (self.debugActions[0] ):
+ self.debugActions[0]( instring, loc, self )
+ if callPreParse and self.callPreparse:
+ preloc = self.preParse( instring, loc )
+ else:
+ preloc = loc
+ tokensStart = preloc
+ try:
+ try:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+ except IndexError:
+ raise ParseException( instring, len(instring), self.errmsg, self )
+ except ParseBaseException as err:
+ #~ print ("Exception raised:", err)
+ if self.debugActions[2]:
+ self.debugActions[2]( instring, tokensStart, self, err )
+ if self.failAction:
+ self.failAction( instring, tokensStart, self, err )
+ raise
+ else:
+ if callPreParse and self.callPreparse:
+ preloc = self.preParse( instring, loc )
+ else:
+ preloc = loc
+ tokensStart = preloc
+ if self.mayIndexError or preloc >= len(instring):
+ try:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+ except IndexError:
+ raise ParseException( instring, len(instring), self.errmsg, self )
+ else:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+
+ tokens = self.postParse( instring, loc, tokens )
+
+ retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults )
+ if self.parseAction and (doActions or self.callDuringTry):
+ if debugging:
+ try:
+ for fn in self.parseAction:
+ tokens = fn( instring, tokensStart, retTokens )
+ if tokens is not None:
+ retTokens = ParseResults( tokens,
+ self.resultsName,
+ asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
+ modal=self.modalResults )
+ except ParseBaseException as err:
+ #~ print "Exception raised in user parse action:", err
+ if (self.debugActions[2] ):
+ self.debugActions[2]( instring, tokensStart, self, err )
+ raise
+ else:
+ for fn in self.parseAction:
+ tokens = fn( instring, tokensStart, retTokens )
+ if tokens is not None:
+ retTokens = ParseResults( tokens,
+ self.resultsName,
+ asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
+ modal=self.modalResults )
+ if debugging:
+ #~ print ("Matched",self,"->",retTokens.asList())
+ if (self.debugActions[1] ):
+ self.debugActions[1]( instring, tokensStart, loc, self, retTokens )
+
+ return loc, retTokens
+
+ def tryParse( self, instring, loc ):
+ try:
+ return self._parse( instring, loc, doActions=False )[0]
+ except ParseFatalException:
+ raise ParseException( instring, loc, self.errmsg, self)
+
+ def canParseNext(self, instring, loc):
+ try:
+ self.tryParse(instring, loc)
+ except (ParseException, IndexError):
+ return False
+ else:
+ return True
+
+ class _UnboundedCache(object):
+ def __init__(self):
+ cache = {}
+ self.not_in_cache = not_in_cache = object()
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+
+ def clear(self):
+ cache.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ if _OrderedDict is not None:
+ class _FifoCache(object):
+ def __init__(self, size):
+ self.not_in_cache = not_in_cache = object()
+
+ cache = _OrderedDict()
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+ while len(cache) > size:
+ try:
+ cache.popitem(False)
+ except KeyError:
+ pass
+
+ def clear(self):
+ cache.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ else:
+ class _FifoCache(object):
+ def __init__(self, size):
+ self.not_in_cache = not_in_cache = object()
+
+ cache = {}
+ key_fifo = collections.deque([], size)
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+ while len(key_fifo) > size:
+ cache.pop(key_fifo.popleft(), None)
+ key_fifo.append(key)
+
+ def clear(self):
+ cache.clear()
+ key_fifo.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ # argument cache for optimizing repeated calls when backtracking through recursive expressions
+ packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail
+ packrat_cache_lock = RLock()
+ packrat_cache_stats = [0, 0]
+
+ # this method gets repeatedly called during backtracking with the same arguments -
+ # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression
+ def _parseCache( self, instring, loc, doActions=True, callPreParse=True ):
+ HIT, MISS = 0, 1
+ lookup = (self, instring, loc, callPreParse, doActions)
+ with ParserElement.packrat_cache_lock:
+ cache = ParserElement.packrat_cache
+ value = cache.get(lookup)
+ if value is cache.not_in_cache:
+ ParserElement.packrat_cache_stats[MISS] += 1
+ try:
+ value = self._parseNoCache(instring, loc, doActions, callPreParse)
+ except ParseBaseException as pe:
+ # cache a copy of the exception, without the traceback
+ cache.set(lookup, pe.__class__(*pe.args))
+ raise
+ else:
+ cache.set(lookup, (value[0], value[1].copy()))
+ return value
+ else:
+ ParserElement.packrat_cache_stats[HIT] += 1
+ if isinstance(value, Exception):
+ raise value
+ return (value[0], value[1].copy())
+
+ _parse = _parseNoCache
+
+ @staticmethod
+ def resetCache():
+ ParserElement.packrat_cache.clear()
+ ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats)
+
+ _packratEnabled = False
+ @staticmethod
+ def enablePackrat(cache_size_limit=128):
+ """Enables "packrat" parsing, which adds memoizing to the parsing logic.
+ Repeated parse attempts at the same string location (which happens
+ often in many complex grammars) can immediately return a cached value,
+ instead of re-executing parsing/validating code. Memoizing is done of
+ both valid results and parsing exceptions.
+
+ Parameters:
+ - cache_size_limit - (default=C{128}) - if an integer value is provided
+ will limit the size of the packrat cache; if None is passed, then
+ the cache size will be unbounded; if 0 is passed, the cache will
+ be effectively disabled.
+
+ This speedup may break existing programs that use parse actions that
+ have side-effects. For this reason, packrat parsing is disabled when
+ you first import pyparsing. To activate the packrat feature, your
+ program must call the class method C{ParserElement.enablePackrat()}. If
+ your program uses C{psyco} to "compile as you go", you must call
+ C{enablePackrat} before calling C{psyco.full()}. If you do not do this,
+ Python will crash. For best results, call C{enablePackrat()} immediately
+ after importing pyparsing.
+
+ Example::
+ import pyparsing
+ pyparsing.ParserElement.enablePackrat()
+ """
+ if not ParserElement._packratEnabled:
+ ParserElement._packratEnabled = True
+ if cache_size_limit is None:
+ ParserElement.packrat_cache = ParserElement._UnboundedCache()
+ else:
+ ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit)
+ ParserElement._parse = ParserElement._parseCache
+
+ def parseString( self, instring, parseAll=False ):
+ """
+ Execute the parse expression with the given string.
+ This is the main interface to the client code, once the complete
+ expression has been built.
+
+ If you want the grammar to require that the entire input string be
+ successfully parsed, then set C{parseAll} to True (equivalent to ending
+ the grammar with C{L{StringEnd()}}).
+
+ Note: C{parseString} implicitly calls C{expandtabs()} on the input string,
+ in order to report proper column numbers in parse actions.
+ If the input string contains tabs and
+ the grammar uses parse actions that use the C{loc} argument to index into the
+ string being parsed, you can ensure you have a consistent view of the input
+ string by:
+ - calling C{parseWithTabs} on your grammar before calling C{parseString}
+ (see L{I{parseWithTabs}<parseWithTabs>})
+ - define your parse action using the full C{(s,loc,toks)} signature, and
+ reference the input string using the parse action's C{s} argument
+ - explictly expand the tabs in your input string before calling
+ C{parseString}
+
+ Example::
+ Word('a').parseString('aaaaabaaa') # -> ['aaaaa']
+ Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text
+ """
+ ParserElement.resetCache()
+ if not self.streamlined:
+ self.streamline()
+ #~ self.saveAsList = True
+ for e in self.ignoreExprs:
+ e.streamline()
+ if not self.keepTabs:
+ instring = instring.expandtabs()
+ try:
+ loc, tokens = self._parse( instring, 0 )
+ if parseAll:
+ loc = self.preParse( instring, loc )
+ se = Empty() + StringEnd()
+ se._parse( instring, loc )
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+ else:
+ return tokens
+
+ def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ):
+ """
+ Scan the input string for expression matches. Each match will return the
+ matching tokens, start location, and end location. May be called with optional
+ C{maxMatches} argument, to clip scanning after 'n' matches are found. If
+ C{overlap} is specified, then overlapping matches will be reported.
+
+ Note that the start and end locations are reported relative to the string
+ being parsed. See L{I{parseString}<parseString>} for more information on parsing
+ strings with embedded tabs.
+
+ Example::
+ source = "sldjf123lsdjjkf345sldkjf879lkjsfd987"
+ print(source)
+ for tokens,start,end in Word(alphas).scanString(source):
+ print(' '*start + '^'*(end-start))
+ print(' '*start + tokens[0])
+
+ prints::
+
+ sldjf123lsdjjkf345sldkjf879lkjsfd987
+ ^^^^^
+ sldjf
+ ^^^^^^^
+ lsdjjkf
+ ^^^^^^
+ sldkjf
+ ^^^^^^
+ lkjsfd
+ """
+ if not self.streamlined:
+ self.streamline()
+ for e in self.ignoreExprs:
+ e.streamline()
+
+ if not self.keepTabs:
+ instring = _ustr(instring).expandtabs()
+ instrlen = len(instring)
+ loc = 0
+ preparseFn = self.preParse
+ parseFn = self._parse
+ ParserElement.resetCache()
+ matches = 0
+ try:
+ while loc <= instrlen and matches < maxMatches:
+ try:
+ preloc = preparseFn( instring, loc )
+ nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
+ except ParseException:
+ loc = preloc+1
+ else:
+ if nextLoc > loc:
+ matches += 1
+ yield tokens, preloc, nextLoc
+ if overlap:
+ nextloc = preparseFn( instring, loc )
+ if nextloc > loc:
+ loc = nextLoc
+ else:
+ loc += 1
+ else:
+ loc = nextLoc
+ else:
+ loc = preloc+1
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def transformString( self, instring ):
+ """
+ Extension to C{L{scanString}}, to modify matching text with modified tokens that may
+ be returned from a parse action. To use C{transformString}, define a grammar and
+ attach a parse action to it that modifies the returned token list.
+ Invoking C{transformString()} on a target string will then scan for matches,
+ and replace the matched text patterns according to the logic in the parse
+ action. C{transformString()} returns the resulting transformed string.
+
+ Example::
+ wd = Word(alphas)
+ wd.setParseAction(lambda toks: toks[0].title())
+
+ print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york."))
+ Prints::
+ Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York.
+ """
+ out = []
+ lastE = 0
+ # force preservation of <TAB>s, to minimize unwanted transformation of string, and to
+ # keep string locs straight between transformString and scanString
+ self.keepTabs = True
+ try:
+ for t,s,e in self.scanString( instring ):
+ out.append( instring[lastE:s] )
+ if t:
+ if isinstance(t,ParseResults):
+ out += t.asList()
+ elif isinstance(t,list):
+ out += t
+ else:
+ out.append(t)
+ lastE = e
+ out.append(instring[lastE:])
+ out = [o for o in out if o]
+ return "".join(map(_ustr,_flatten(out)))
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def searchString( self, instring, maxMatches=_MAX_INT ):
+ """
+ Another extension to C{L{scanString}}, simplifying the access to the tokens found
+ to match the given parse expression. May be called with optional
+ C{maxMatches} argument, to clip searching after 'n' matches are found.
+
+ Example::
+ # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters
+ cap_word = Word(alphas.upper(), alphas.lower())
+
+ print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))
+
+ # the sum() builtin can be used to merge results into a single ParseResults object
+ print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")))
+ prints::
+ [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']]
+ ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity']
+ """
+ try:
+ return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False):
+ """
+ Generator method to split a string using the given expression as a separator.
+ May be called with optional C{maxsplit} argument, to limit the number of splits;
+ and the optional C{includeSeparators} argument (default=C{False}), if the separating
+ matching text should be included in the split results.
+
+ Example::
+ punc = oneOf(list(".,;:/-!?"))
+ print(list(punc.split("This, this?, this sentence, is badly punctuated!")))
+ prints::
+ ['This', ' this', '', ' this sentence', ' is badly punctuated', '']
+ """
+ splits = 0
+ last = 0
+ for t,s,e in self.scanString(instring, maxMatches=maxsplit):
+ yield instring[last:s]
+ if includeSeparators:
+ yield t[0]
+ last = e
+ yield instring[last:]
+
+ def __add__(self, other ):
+ """
+ Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement
+ converts them to L{Literal}s by default.
+
+ Example::
+ greet = Word(alphas) + "," + Word(alphas) + "!"
+ hello = "Hello, World!"
+ print (hello, "->", greet.parseString(hello))
+ Prints::
+ Hello, World! -> ['Hello', ',', 'World', '!']
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return And( [ self, other ] )
+
+ def __radd__(self, other ):
+ """
+ Implementation of + operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other + self
+
+ def __sub__(self, other):
+ """
+ Implementation of - operator, returns C{L{And}} with error stop
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return self + And._ErrorStop() + other
+
+ def __rsub__(self, other ):
+ """
+ Implementation of - operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other - self
+
+ def __mul__(self,other):
+ """
+ Implementation of * operator, allows use of C{expr * 3} in place of
+ C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer
+ tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples
+ may also include C{None} as in:
+ - C{expr*(n,None)} or C{expr*(n,)} is equivalent
+ to C{expr*n + L{ZeroOrMore}(expr)}
+ (read as "at least n instances of C{expr}")
+ - C{expr*(None,n)} is equivalent to C{expr*(0,n)}
+ (read as "0 to n instances of C{expr}")
+ - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)}
+ - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)}
+
+ Note that C{expr*(None,n)} does not raise an exception if
+ more than n exprs exist in the input stream; that is,
+ C{expr*(None,n)} does not enforce a maximum number of expr
+ occurrences. If this behavior is desired, then write
+ C{expr*(None,n) + ~expr}
+ """
+ if isinstance(other,int):
+ minElements, optElements = other,0
+ elif isinstance(other,tuple):
+ other = (other + (None, None))[:2]
+ if other[0] is None:
+ other = (0, other[1])
+ if isinstance(other[0],int) and other[1] is None:
+ if other[0] == 0:
+ return ZeroOrMore(self)
+ if other[0] == 1:
+ return OneOrMore(self)
+ else:
+ return self*other[0] + ZeroOrMore(self)
+ elif isinstance(other[0],int) and isinstance(other[1],int):
+ minElements, optElements = other
+ optElements -= minElements
+ else:
+ raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1]))
+ else:
+ raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other))
+
+ if minElements < 0:
+ raise ValueError("cannot multiply ParserElement by negative value")
+ if optElements < 0:
+ raise ValueError("second tuple value must be greater or equal to first tuple value")
+ if minElements == optElements == 0:
+ raise ValueError("cannot multiply ParserElement by 0 or (0,0)")
+
+ if (optElements):
+ def makeOptionalList(n):
+ if n>1:
+ return Optional(self + makeOptionalList(n-1))
+ else:
+ return Optional(self)
+ if minElements:
+ if minElements == 1:
+ ret = self + makeOptionalList(optElements)
+ else:
+ ret = And([self]*minElements) + makeOptionalList(optElements)
+ else:
+ ret = makeOptionalList(optElements)
+ else:
+ if minElements == 1:
+ ret = self
+ else:
+ ret = And([self]*minElements)
+ return ret
+
+ def __rmul__(self, other):
+ return self.__mul__(other)
+
+ def __or__(self, other ):
+ """
+ Implementation of | operator - returns C{L{MatchFirst}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return MatchFirst( [ self, other ] )
+
+ def __ror__(self, other ):
+ """
+ Implementation of | operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other | self
+
+ def __xor__(self, other ):
+ """
+ Implementation of ^ operator - returns C{L{Or}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return Or( [ self, other ] )
+
+ def __rxor__(self, other ):
+ """
+ Implementation of ^ operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other ^ self
+
+ def __and__(self, other ):
+ """
+ Implementation of & operator - returns C{L{Each}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return Each( [ self, other ] )
+
+ def __rand__(self, other ):
+ """
+ Implementation of & operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other & self
+
+ def __invert__( self ):
+ """
+ Implementation of ~ operator - returns C{L{NotAny}}
+ """
+ return NotAny( self )
+
+ def __call__(self, name=None):
+ """
+ Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}.
+
+ If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be
+ passed as C{True}.
+
+ If C{name} is omitted, same as calling C{L{copy}}.
+
+ Example::
+ # these are equivalent
+ userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno")
+ userdata = Word(alphas)("name") + Word(nums+"-")("socsecno")
+ """
+ if name is not None:
+ return self.setResultsName(name)
+ else:
+ return self.copy()
+
+ def suppress( self ):
+ """
+ Suppresses the output of this C{ParserElement}; useful to keep punctuation from
+ cluttering up returned output.
+ """
+ return Suppress( self )
+
+ def leaveWhitespace( self ):
+ """
+ Disables the skipping of whitespace before matching the characters in the
+ C{ParserElement}'s defined pattern. This is normally only used internally by
+ the pyparsing module, but may be needed in some whitespace-sensitive grammars.
+ """
+ self.skipWhitespace = False
+ return self
+
+ def setWhitespaceChars( self, chars ):
+ """
+ Overrides the default whitespace chars
+ """
+ self.skipWhitespace = True
+ self.whiteChars = chars
+ self.copyDefaultWhiteChars = False
+ return self
+
+ def parseWithTabs( self ):
+ """
+ Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string.
+ Must be called before C{parseString} when the input grammar contains elements that
+ match C{<TAB>} characters.
+ """
+ self.keepTabs = True
+ return self
+
+ def ignore( self, other ):
+ """
+ Define expression to be ignored (e.g., comments) while doing pattern
+ matching; may be called repeatedly, to define multiple comment or other
+ ignorable patterns.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+ patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj']
+
+ patt.ignore(cStyleComment)
+ patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd']
+ """
+ if isinstance(other, basestring):
+ other = Suppress(other)
+
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ self.ignoreExprs.append(other)
+ else:
+ self.ignoreExprs.append( Suppress( other.copy() ) )
+ return self
+
+ def setDebugActions( self, startAction, successAction, exceptionAction ):
+ """
+ Enable display of debugging messages while doing pattern matching.
+ """
+ self.debugActions = (startAction or _defaultStartDebugAction,
+ successAction or _defaultSuccessDebugAction,
+ exceptionAction or _defaultExceptionDebugAction)
+ self.debug = True
+ return self
+
+ def setDebug( self, flag=True ):
+ """
+ Enable display of debugging messages while doing pattern matching.
+ Set C{flag} to True to enable, False to disable.
+
+ Example::
+ wd = Word(alphas).setName("alphaword")
+ integer = Word(nums).setName("numword")
+ term = wd | integer
+
+ # turn on debugging for wd
+ wd.setDebug()
+
+ OneOrMore(term).parseString("abc 123 xyz 890")
+
+ prints::
+ Match alphaword at loc 0(1,1)
+ Matched alphaword -> ['abc']
+ Match alphaword at loc 3(1,4)
+ Exception raised:Expected alphaword (at char 4), (line:1, col:5)
+ Match alphaword at loc 7(1,8)
+ Matched alphaword -> ['xyz']
+ Match alphaword at loc 11(1,12)
+ Exception raised:Expected alphaword (at char 12), (line:1, col:13)
+ Match alphaword at loc 15(1,16)
+ Exception raised:Expected alphaword (at char 15), (line:1, col:16)
+
+ The output shown is that produced by the default debug actions - custom debug actions can be
+ specified using L{setDebugActions}. Prior to attempting
+ to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"}
+ is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"}
+ message is shown. Also note the use of L{setName} to assign a human-readable name to the expression,
+ which makes debugging and exception messages easier to understand - for instance, the default
+ name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}.
+ """
+ if flag:
+ self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction )
+ else:
+ self.debug = False
+ return self
+
+ def __str__( self ):
+ return self.name
+
+ def __repr__( self ):
+ return _ustr(self)
+
+ def streamline( self ):
+ self.streamlined = True
+ self.strRepr = None
+ return self
+
+ def checkRecursion( self, parseElementList ):
+ pass
+
+ def validate( self, validateTrace=[] ):
+ """
+ Check defined expressions for valid structure, check for infinite recursive definitions.
+ """
+ self.checkRecursion( [] )
+
+ def parseFile( self, file_or_filename, parseAll=False ):
+ """
+ Execute the parse expression on the given file or filename.
+ If a filename is specified (instead of a file object),
+ the entire file is opened, read, and closed before parsing.
+ """
+ try:
+ file_contents = file_or_filename.read()
+ except AttributeError:
+ with open(file_or_filename, "r") as f:
+ file_contents = f.read()
+ try:
+ return self.parseString(file_contents, parseAll)
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def __eq__(self,other):
+ if isinstance(other, ParserElement):
+ return self is other or vars(self) == vars(other)
+ elif isinstance(other, basestring):
+ return self.matches(other)
+ else:
+ return super(ParserElement,self)==other
+
+ def __ne__(self,other):
+ return not (self == other)
+
+ def __hash__(self):
+ return hash(id(self))
+
+ def __req__(self,other):
+ return self == other
+
+ def __rne__(self,other):
+ return not (self == other)
+
+ def matches(self, testString, parseAll=True):
+ """
+ Method for quick testing of a parser against a test string. Good for simple
+ inline microtests of sub expressions while building up larger parser.
+
+ Parameters:
+ - testString - to test against this expression for a match
+ - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
+
+ Example::
+ expr = Word(nums)
+ assert expr.matches("100")
+ """
+ try:
+ self.parseString(_ustr(testString), parseAll=parseAll)
+ return True
+ except ParseBaseException:
+ return False
+
+ def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False):
+ """
+ Execute the parse expression on a series of test strings, showing each
+ test, the parsed results or where the parse failed. Quick and easy way to
+ run a parse expression against a list of sample strings.
+
+ Parameters:
+ - tests - a list of separate test strings, or a multiline string of test strings
+ - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
+ - comment - (default=C{'#'}) - expression for indicating embedded comments in the test
+ string; pass None to disable comment filtering
+ - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline;
+ if False, only dump nested list
+ - printResults - (default=C{True}) prints test output to stdout
+ - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing
+
+ Returns: a (success, results) tuple, where success indicates that all tests succeeded
+ (or failed if C{failureTests} is True), and the results contain a list of lines of each
+ test's output
+
+ Example::
+ number_expr = pyparsing_common.number.copy()
+
+ result = number_expr.runTests('''
+ # unsigned integer
+ 100
+ # negative integer
+ -100
+ # float with scientific notation
+ 6.02e23
+ # integer with scientific notation
+ 1e-12
+ ''')
+ print("Success" if result[0] else "Failed!")
+
+ result = number_expr.runTests('''
+ # stray character
+ 100Z
+ # missing leading digit before '.'
+ -.100
+ # too many '.'
+ 3.14.159
+ ''', failureTests=True)
+ print("Success" if result[0] else "Failed!")
+ prints::
+ # unsigned integer
+ 100
+ [100]
+
+ # negative integer
+ -100
+ [-100]
+
+ # float with scientific notation
+ 6.02e23
+ [6.02e+23]
+
+ # integer with scientific notation
+ 1e-12
+ [1e-12]
+
+ Success
+
+ # stray character
+ 100Z
+ ^
+ FAIL: Expected end of text (at char 3), (line:1, col:4)
+
+ # missing leading digit before '.'
+ -.100
+ ^
+ FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1)
+
+ # too many '.'
+ 3.14.159
+ ^
+ FAIL: Expected end of text (at char 4), (line:1, col:5)
+
+ Success
+
+ Each test string must be on a single line. If you want to test a string that spans multiple
+ lines, create a test like this::
+
+ expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines")
+
+ (Note that this is a raw string literal, you must include the leading 'r'.)
+ """
+ if isinstance(tests, basestring):
+ tests = list(map(str.strip, tests.rstrip().splitlines()))
+ if isinstance(comment, basestring):
+ comment = Literal(comment)
+ allResults = []
+ comments = []
+ success = True
+ for t in tests:
+ if comment is not None and comment.matches(t, False) or comments and not t:
+ comments.append(t)
+ continue
+ if not t:
+ continue
+ out = ['\n'.join(comments), t]
+ comments = []
+ try:
+ t = t.replace(r'\n','\n')
+ result = self.parseString(t, parseAll=parseAll)
+ out.append(result.dump(full=fullDump))
+ success = success and not failureTests
+ except ParseBaseException as pe:
+ fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else ""
+ if '\n' in t:
+ out.append(line(pe.loc, t))
+ out.append(' '*(col(pe.loc,t)-1) + '^' + fatal)
+ else:
+ out.append(' '*pe.loc + '^' + fatal)
+ out.append("FAIL: " + str(pe))
+ success = success and failureTests
+ result = pe
+ except Exception as exc:
+ out.append("FAIL-EXCEPTION: " + str(exc))
+ success = success and failureTests
+ result = exc
+
+ if printResults:
+ if fullDump:
+ out.append('')
+ print('\n'.join(out))
+
+ allResults.append((t, result))
+
+ return success, allResults
+
+
+class Token(ParserElement):
+ """
+ Abstract C{ParserElement} subclass, for defining atomic matching patterns.
+ """
+ def __init__( self ):
+ super(Token,self).__init__( savelist=False )
+
+
+class Empty(Token):
+ """
+ An empty token, will always match.
+ """
+ def __init__( self ):
+ super(Empty,self).__init__()
+ self.name = "Empty"
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+
+
+class NoMatch(Token):
+ """
+ A token that will never match.
+ """
+ def __init__( self ):
+ super(NoMatch,self).__init__()
+ self.name = "NoMatch"
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+ self.errmsg = "Unmatchable token"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ raise ParseException(instring, loc, self.errmsg, self)
+
+
+class Literal(Token):
+ """
+ Token to exactly match a specified string.
+
+ Example::
+ Literal('blah').parseString('blah') # -> ['blah']
+ Literal('blah').parseString('blahfooblah') # -> ['blah']
+ Literal('blah').parseString('bla') # -> Exception: Expected "blah"
+
+ For case-insensitive matching, use L{CaselessLiteral}.
+
+ For keyword matching (force word break before and after the matched string),
+ use L{Keyword} or L{CaselessKeyword}.
+ """
+ def __init__( self, matchString ):
+ super(Literal,self).__init__()
+ self.match = matchString
+ self.matchLen = len(matchString)
+ try:
+ self.firstMatchChar = matchString[0]
+ except IndexError:
+ warnings.warn("null string passed to Literal; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+ self.__class__ = Empty
+ self.name = '"%s"' % _ustr(self.match)
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = False
+ self.mayIndexError = False
+
+ # Performance tuning: this routine gets called a *lot*
+ # if this is a single character match string and the first character matches,
+ # short-circuit as quickly as possible, and avoid calling startswith
+ #~ @profile
+ def parseImpl( self, instring, loc, doActions=True ):
+ if (instring[loc] == self.firstMatchChar and
+ (self.matchLen==1 or instring.startswith(self.match,loc)) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+_L = Literal
+ParserElement._literalStringClass = Literal
+
+class Keyword(Token):
+ """
+ Token to exactly match a specified string as a keyword, that is, it must be
+ immediately followed by a non-keyword character. Compare with C{L{Literal}}:
+ - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}.
+ - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'}
+ Accepts two optional constructor arguments in addition to the keyword string:
+ - C{identChars} is a string of characters that would be valid identifier characters,
+ defaulting to all alphanumerics + "_" and "$"
+ - C{caseless} allows case-insensitive matching, default is C{False}.
+
+ Example::
+ Keyword("start").parseString("start") # -> ['start']
+ Keyword("start").parseString("starting") # -> Exception
+
+ For case-insensitive matching, use L{CaselessKeyword}.
+ """
+ DEFAULT_KEYWORD_CHARS = alphanums+"_$"
+
+ def __init__( self, matchString, identChars=None, caseless=False ):
+ super(Keyword,self).__init__()
+ if identChars is None:
+ identChars = Keyword.DEFAULT_KEYWORD_CHARS
+ self.match = matchString
+ self.matchLen = len(matchString)
+ try:
+ self.firstMatchChar = matchString[0]
+ except IndexError:
+ warnings.warn("null string passed to Keyword; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+ self.name = '"%s"' % self.match
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = False
+ self.mayIndexError = False
+ self.caseless = caseless
+ if caseless:
+ self.caselessmatch = matchString.upper()
+ identChars = identChars.upper()
+ self.identChars = set(identChars)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.caseless:
+ if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and
+ (loc == 0 or instring[loc-1].upper() not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ else:
+ if (instring[loc] == self.firstMatchChar and
+ (self.matchLen==1 or instring.startswith(self.match,loc)) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and
+ (loc == 0 or instring[loc-1] not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ def copy(self):
+ c = super(Keyword,self).copy()
+ c.identChars = Keyword.DEFAULT_KEYWORD_CHARS
+ return c
+
+ @staticmethod
+ def setDefaultKeywordChars( chars ):
+ """Overrides the default Keyword chars
+ """
+ Keyword.DEFAULT_KEYWORD_CHARS = chars
+
+class CaselessLiteral(Literal):
+ """
+ Token to match a specified string, ignoring case of letters.
+ Note: the matched results will always be in the case of the given
+ match string, NOT the case of the input text.
+
+ Example::
+ OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD']
+
+ (Contrast with example for L{CaselessKeyword}.)
+ """
+ def __init__( self, matchString ):
+ super(CaselessLiteral,self).__init__( matchString.upper() )
+ # Preserve the defining literal.
+ self.returnString = matchString
+ self.name = "'%s'" % self.returnString
+ self.errmsg = "Expected " + self.name
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if instring[ loc:loc+self.matchLen ].upper() == self.match:
+ return loc+self.matchLen, self.returnString
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class CaselessKeyword(Keyword):
+ """
+ Caseless version of L{Keyword}.
+
+ Example::
+ OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD']
+
+ (Contrast with example for L{CaselessLiteral}.)
+ """
+ def __init__( self, matchString, identChars=None ):
+ super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True )
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class CloseMatch(Token):
+ """
+ A variation on L{Literal} which matches "close" matches, that is,
+ strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters:
+ - C{match_string} - string to be matched
+ - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match
+
+ The results from a successful parse will contain the matched text from the input string and the following named results:
+ - C{mismatches} - a list of the positions within the match_string where mismatches were found
+ - C{original} - the original match_string used to compare against the input string
+
+ If C{mismatches} is an empty list, then the match was an exact match.
+
+ Example::
+ patt = CloseMatch("ATCATCGAATGGA")
+ patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']})
+ patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1)
+
+ # exact match
+ patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']})
+
+ # close match allowing up to 2 mismatches
+ patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2)
+ patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']})
+ """
+ def __init__(self, match_string, maxMismatches=1):
+ super(CloseMatch,self).__init__()
+ self.name = match_string
+ self.match_string = match_string
+ self.maxMismatches = maxMismatches
+ self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches)
+ self.mayIndexError = False
+ self.mayReturnEmpty = False
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ start = loc
+ instrlen = len(instring)
+ maxloc = start + len(self.match_string)
+
+ if maxloc <= instrlen:
+ match_string = self.match_string
+ match_stringloc = 0
+ mismatches = []
+ maxMismatches = self.maxMismatches
+
+ for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)):
+ src,mat = s_m
+ if src != mat:
+ mismatches.append(match_stringloc)
+ if len(mismatches) > maxMismatches:
+ break
+ else:
+ loc = match_stringloc + 1
+ results = ParseResults([instring[start:loc]])
+ results['original'] = self.match_string
+ results['mismatches'] = mismatches
+ return loc, results
+
+ raise ParseException(instring, loc, self.errmsg, self)
+
+
+class Word(Token):
+ """
+ Token for matching words composed of allowed character sets.
+ Defined with string containing all allowed initial characters,
+ an optional string containing allowed body characters (if omitted,
+ defaults to the initial character set), and an optional minimum,
+ maximum, and/or exact length. The default value for C{min} is 1 (a
+ minimum value < 1 is not valid); the default values for C{max} and C{exact}
+ are 0, meaning no maximum or exact length restriction. An optional
+ C{excludeChars} parameter can list characters that might be found in
+ the input C{bodyChars} string; useful to define a word of all printables
+ except for one or two characters, for instance.
+
+ L{srange} is useful for defining custom character set strings for defining
+ C{Word} expressions, using range notation from regular expression character sets.
+
+ A common mistake is to use C{Word} to match a specific literal string, as in
+ C{Word("Address")}. Remember that C{Word} uses the string argument to define
+ I{sets} of matchable characters. This expression would match "Add", "AAA",
+ "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'.
+ To match an exact literal string, use L{Literal} or L{Keyword}.
+
+ pyparsing includes helper strings for building Words:
+ - L{alphas}
+ - L{nums}
+ - L{alphanums}
+ - L{hexnums}
+ - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.)
+ - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.)
+ - L{printables} (any non-whitespace character)
+
+ Example::
+ # a word composed of digits
+ integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9"))
+
+ # a word with a leading capital, and zero or more lowercase
+ capital_word = Word(alphas.upper(), alphas.lower())
+
+ # hostnames are alphanumeric, with leading alpha, and '-'
+ hostname = Word(alphas, alphanums+'-')
+
+ # roman numeral (not a strict parser, accepts invalid mix of characters)
+ roman = Word("IVXLCDM")
+
+ # any string of non-whitespace characters, except for ','
+ csv_value = Word(printables, excludeChars=",")
+ """
+ def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ):
+ super(Word,self).__init__()
+ if excludeChars:
+ initChars = ''.join(c for c in initChars if c not in excludeChars)
+ if bodyChars:
+ bodyChars = ''.join(c for c in bodyChars if c not in excludeChars)
+ self.initCharsOrig = initChars
+ self.initChars = set(initChars)
+ if bodyChars :
+ self.bodyCharsOrig = bodyChars
+ self.bodyChars = set(bodyChars)
+ else:
+ self.bodyCharsOrig = initChars
+ self.bodyChars = set(initChars)
+
+ self.maxSpecified = max > 0
+
+ if min < 1:
+ raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted")
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.asKeyword = asKeyword
+
+ if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0):
+ if self.bodyCharsOrig == self.initCharsOrig:
+ self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig)
+ elif len(self.initCharsOrig) == 1:
+ self.reString = "%s[%s]*" % \
+ (re.escape(self.initCharsOrig),
+ _escapeRegexRangeChars(self.bodyCharsOrig),)
+ else:
+ self.reString = "[%s][%s]*" % \
+ (_escapeRegexRangeChars(self.initCharsOrig),
+ _escapeRegexRangeChars(self.bodyCharsOrig),)
+ if self.asKeyword:
+ self.reString = r"\b"+self.reString+r"\b"
+ try:
+ self.re = re.compile( self.reString )
+ except Exception:
+ self.re = None
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.re:
+ result = self.re.match(instring,loc)
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ return loc, result.group()
+
+ if not(instring[ loc ] in self.initChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ start = loc
+ loc += 1
+ instrlen = len(instring)
+ bodychars = self.bodyChars
+ maxloc = start + self.maxLen
+ maxloc = min( maxloc, instrlen )
+ while loc < maxloc and instring[loc] in bodychars:
+ loc += 1
+
+ throwException = False
+ if loc - start < self.minLen:
+ throwException = True
+ if self.maxSpecified and loc < instrlen and instring[loc] in bodychars:
+ throwException = True
+ if self.asKeyword:
+ if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars):
+ throwException = True
+
+ if throwException:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+ def __str__( self ):
+ try:
+ return super(Word,self).__str__()
+ except Exception:
+ pass
+
+
+ if self.strRepr is None:
+
+ def charsAsStr(s):
+ if len(s)>4:
+ return s[:4]+"..."
+ else:
+ return s
+
+ if ( self.initCharsOrig != self.bodyCharsOrig ):
+ self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) )
+ else:
+ self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig)
+
+ return self.strRepr
+
+
+class Regex(Token):
+ r"""
+ Token for matching strings that match a given regular expression.
+ Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
+ If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as
+ named parse results.
+
+ Example::
+ realnum = Regex(r"[+-]?\d+\.\d*")
+ date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)')
+ # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
+ roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})")
+ """
+ compiledREtype = type(re.compile("[A-Z]"))
+ def __init__( self, pattern, flags=0):
+ """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags."""
+ super(Regex,self).__init__()
+
+ if isinstance(pattern, basestring):
+ if not pattern:
+ warnings.warn("null string passed to Regex; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+
+ self.pattern = pattern
+ self.flags = flags
+
+ try:
+ self.re = re.compile(self.pattern, self.flags)
+ self.reString = self.pattern
+ except sre_constants.error:
+ warnings.warn("invalid pattern (%s) passed to Regex" % pattern,
+ SyntaxWarning, stacklevel=2)
+ raise
+
+ elif isinstance(pattern, Regex.compiledREtype):
+ self.re = pattern
+ self.pattern = \
+ self.reString = str(pattern)
+ self.flags = flags
+
+ else:
+ raise ValueError("Regex may only be constructed with a string or a compiled RE object")
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ result = self.re.match(instring,loc)
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ d = result.groupdict()
+ ret = ParseResults(result.group())
+ if d:
+ for k in d:
+ ret[k] = d[k]
+ return loc,ret
+
+ def __str__( self ):
+ try:
+ return super(Regex,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "Re:(%s)" % repr(self.pattern)
+
+ return self.strRepr
+
+
+class QuotedString(Token):
+ r"""
+ Token for matching strings that are delimited by quoting characters.
+
+ Defined with the following parameters:
+ - quoteChar - string of one or more characters defining the quote delimiting string
+ - escChar - character to escape quotes, typically backslash (default=C{None})
+ - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None})
+ - multiline - boolean indicating whether quotes can span multiple lines (default=C{False})
+ - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True})
+ - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar)
+ - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True})
+
+ Example::
+ qs = QuotedString('"')
+ print(qs.searchString('lsjdf "This is the quote" sldjf'))
+ complex_qs = QuotedString('{{', endQuoteChar='}}')
+ print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf'))
+ sql_qs = QuotedString('"', escQuote='""')
+ print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf'))
+ prints::
+ [['This is the quote']]
+ [['This is the "quote"']]
+ [['This is the quote with "embedded" quotes']]
+ """
+ def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True):
+ super(QuotedString,self).__init__()
+
+ # remove white space from quote chars - wont work anyway
+ quoteChar = quoteChar.strip()
+ if not quoteChar:
+ warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
+ raise SyntaxError()
+
+ if endQuoteChar is None:
+ endQuoteChar = quoteChar
+ else:
+ endQuoteChar = endQuoteChar.strip()
+ if not endQuoteChar:
+ warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
+ raise SyntaxError()
+
+ self.quoteChar = quoteChar
+ self.quoteCharLen = len(quoteChar)
+ self.firstQuoteChar = quoteChar[0]
+ self.endQuoteChar = endQuoteChar
+ self.endQuoteCharLen = len(endQuoteChar)
+ self.escChar = escChar
+ self.escQuote = escQuote
+ self.unquoteResults = unquoteResults
+ self.convertWhitespaceEscapes = convertWhitespaceEscapes
+
+ if multiline:
+ self.flags = re.MULTILINE | re.DOTALL
+ self.pattern = r'%s(?:[^%s%s]' % \
+ ( re.escape(self.quoteChar),
+ _escapeRegexRangeChars(self.endQuoteChar[0]),
+ (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
+ else:
+ self.flags = 0
+ self.pattern = r'%s(?:[^%s\n\r%s]' % \
+ ( re.escape(self.quoteChar),
+ _escapeRegexRangeChars(self.endQuoteChar[0]),
+ (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
+ if len(self.endQuoteChar) > 1:
+ self.pattern += (
+ '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]),
+ _escapeRegexRangeChars(self.endQuoteChar[i]))
+ for i in range(len(self.endQuoteChar)-1,0,-1)) + ')'
+ )
+ if escQuote:
+ self.pattern += (r'|(?:%s)' % re.escape(escQuote))
+ if escChar:
+ self.pattern += (r'|(?:%s.)' % re.escape(escChar))
+ self.escCharReplacePattern = re.escape(self.escChar)+"(.)"
+ self.pattern += (r')*%s' % re.escape(self.endQuoteChar))
+
+ try:
+ self.re = re.compile(self.pattern, self.flags)
+ self.reString = self.pattern
+ except sre_constants.error:
+ warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern,
+ SyntaxWarning, stacklevel=2)
+ raise
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ ret = result.group()
+
+ if self.unquoteResults:
+
+ # strip off quotes
+ ret = ret[self.quoteCharLen:-self.endQuoteCharLen]
+
+ if isinstance(ret,basestring):
+ # replace escaped whitespace
+ if '\\' in ret and self.convertWhitespaceEscapes:
+ ws_map = {
+ r'\t' : '\t',
+ r'\n' : '\n',
+ r'\f' : '\f',
+ r'\r' : '\r',
+ }
+ for wslit,wschar in ws_map.items():
+ ret = ret.replace(wslit, wschar)
+
+ # replace escaped characters
+ if self.escChar:
+ ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret)
+
+ # replace escaped quotes
+ if self.escQuote:
+ ret = ret.replace(self.escQuote, self.endQuoteChar)
+
+ return loc, ret
+
+ def __str__( self ):
+ try:
+ return super(QuotedString,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar)
+
+ return self.strRepr
+
+
+class CharsNotIn(Token):
+ """
+ Token for matching words composed of characters I{not} in a given set (will
+ include whitespace in matched characters if not listed in the provided exclusion set - see example).
+ Defined with string containing all disallowed characters, and an optional
+ minimum, maximum, and/or exact length. The default value for C{min} is 1 (a
+ minimum value < 1 is not valid); the default values for C{max} and C{exact}
+ are 0, meaning no maximum or exact length restriction.
+
+ Example::
+ # define a comma-separated-value as anything that is not a ','
+ csv_value = CharsNotIn(',')
+ print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213"))
+ prints::
+ ['dkls', 'lsdkjf', 's12 34', '@!#', '213']
+ """
+ def __init__( self, notChars, min=1, max=0, exact=0 ):
+ super(CharsNotIn,self).__init__()
+ self.skipWhitespace = False
+ self.notChars = notChars
+
+ if min < 1:
+ raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted")
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = ( self.minLen == 0 )
+ self.mayIndexError = False
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if instring[loc] in self.notChars:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ start = loc
+ loc += 1
+ notchars = self.notChars
+ maxlen = min( start+self.maxLen, len(instring) )
+ while loc < maxlen and \
+ (instring[loc] not in notchars):
+ loc += 1
+
+ if loc - start < self.minLen:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+ def __str__( self ):
+ try:
+ return super(CharsNotIn, self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ if len(self.notChars) > 4:
+ self.strRepr = "!W:(%s...)" % self.notChars[:4]
+ else:
+ self.strRepr = "!W:(%s)" % self.notChars
+
+ return self.strRepr
+
+class White(Token):
+ """
+ Special matching class for matching whitespace. Normally, whitespace is ignored
+ by pyparsing grammars. This class is included when some whitespace structures
+ are significant. Define with a string containing the whitespace characters to be
+ matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments,
+ as defined for the C{L{Word}} class.
+ """
+ whiteStrs = {
+ " " : "<SPC>",
+ "\t": "<TAB>",
+ "\n": "<LF>",
+ "\r": "<CR>",
+ "\f": "<FF>",
+ }
+ def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0):
+ super(White,self).__init__()
+ self.matchWhite = ws
+ self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) )
+ #~ self.leaveWhitespace()
+ self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite))
+ self.mayReturnEmpty = True
+ self.errmsg = "Expected " + self.name
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if not(instring[ loc ] in self.matchWhite):
+ raise ParseException(instring, loc, self.errmsg, self)
+ start = loc
+ loc += 1
+ maxloc = start + self.maxLen
+ maxloc = min( maxloc, len(instring) )
+ while loc < maxloc and instring[loc] in self.matchWhite:
+ loc += 1
+
+ if loc - start < self.minLen:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+
+class _PositionToken(Token):
+ def __init__( self ):
+ super(_PositionToken,self).__init__()
+ self.name=self.__class__.__name__
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+
+class GoToColumn(_PositionToken):
+ """
+ Token to advance to a specific column of input text; useful for tabular report scraping.
+ """
+ def __init__( self, colno ):
+ super(GoToColumn,self).__init__()
+ self.col = colno
+
+ def preParse( self, instring, loc ):
+ if col(loc,instring) != self.col:
+ instrlen = len(instring)
+ if self.ignoreExprs:
+ loc = self._skipIgnorables( instring, loc )
+ while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col :
+ loc += 1
+ return loc
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ thiscol = col( loc, instring )
+ if thiscol > self.col:
+ raise ParseException( instring, loc, "Text not in expected column", self )
+ newloc = loc + self.col - thiscol
+ ret = instring[ loc: newloc ]
+ return newloc, ret
+
+
+class LineStart(_PositionToken):
+ """
+ Matches if current position is at the beginning of a line within the parse string
+
+ Example::
+
+ test = '''\
+ AAA this line
+ AAA and this line
+ AAA but not this one
+ B AAA and definitely not this one
+ '''
+
+ for t in (LineStart() + 'AAA' + restOfLine).searchString(test):
+ print(t)
+
+ Prints::
+ ['AAA', ' this line']
+ ['AAA', ' and this line']
+
+ """
+ def __init__( self ):
+ super(LineStart,self).__init__()
+ self.errmsg = "Expected start of line"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if col(loc, instring) == 1:
+ return loc, []
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class LineEnd(_PositionToken):
+ """
+ Matches if current position is at the end of a line within the parse string
+ """
+ def __init__( self ):
+ super(LineEnd,self).__init__()
+ self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") )
+ self.errmsg = "Expected end of line"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc<len(instring):
+ if instring[loc] == "\n":
+ return loc+1, "\n"
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+ elif loc == len(instring):
+ return loc+1, []
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class StringStart(_PositionToken):
+ """
+ Matches if current position is at the beginning of the parse string
+ """
+ def __init__( self ):
+ super(StringStart,self).__init__()
+ self.errmsg = "Expected start of text"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc != 0:
+ # see if entire string up to here is just whitespace and ignoreables
+ if loc != self.preParse( instring, 0 ):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+class StringEnd(_PositionToken):
+ """
+ Matches if current position is at the end of the parse string
+ """
+ def __init__( self ):
+ super(StringEnd,self).__init__()
+ self.errmsg = "Expected end of text"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc < len(instring):
+ raise ParseException(instring, loc, self.errmsg, self)
+ elif loc == len(instring):
+ return loc+1, []
+ elif loc > len(instring):
+ return loc, []
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class WordStart(_PositionToken):
+ """
+ Matches if the current position is at the beginning of a Word, and
+ is not preceded by any character in a given set of C{wordChars}
+ (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
+ use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of
+ the string being parsed, or at the beginning of a line.
+ """
+ def __init__(self, wordChars = printables):
+ super(WordStart,self).__init__()
+ self.wordChars = set(wordChars)
+ self.errmsg = "Not at the start of a word"
+
+ def parseImpl(self, instring, loc, doActions=True ):
+ if loc != 0:
+ if (instring[loc-1] in self.wordChars or
+ instring[loc] not in self.wordChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+class WordEnd(_PositionToken):
+ """
+ Matches if the current position is at the end of a Word, and
+ is not followed by any character in a given set of C{wordChars}
+ (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
+ use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of
+ the string being parsed, or at the end of a line.
+ """
+ def __init__(self, wordChars = printables):
+ super(WordEnd,self).__init__()
+ self.wordChars = set(wordChars)
+ self.skipWhitespace = False
+ self.errmsg = "Not at the end of a word"
+
+ def parseImpl(self, instring, loc, doActions=True ):
+ instrlen = len(instring)
+ if instrlen>0 and loc<instrlen:
+ if (instring[loc] in self.wordChars or
+ instring[loc-1] not in self.wordChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+
+class ParseExpression(ParserElement):
+ """
+ Abstract subclass of ParserElement, for combining and post-processing parsed tokens.
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(ParseExpression,self).__init__(savelist)
+ if isinstance( exprs, _generatorType ):
+ exprs = list(exprs)
+
+ if isinstance( exprs, basestring ):
+ self.exprs = [ ParserElement._literalStringClass( exprs ) ]
+ elif isinstance( exprs, Iterable ):
+ exprs = list(exprs)
+ # if sequence of strings provided, wrap with Literal
+ if all(isinstance(expr, basestring) for expr in exprs):
+ exprs = map(ParserElement._literalStringClass, exprs)
+ self.exprs = list(exprs)
+ else:
+ try:
+ self.exprs = list( exprs )
+ except TypeError:
+ self.exprs = [ exprs ]
+ self.callPreparse = False
+
+ def __getitem__( self, i ):
+ return self.exprs[i]
+
+ def append( self, other ):
+ self.exprs.append( other )
+ self.strRepr = None
+ return self
+
+ def leaveWhitespace( self ):
+ """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on
+ all contained expressions."""
+ self.skipWhitespace = False
+ self.exprs = [ e.copy() for e in self.exprs ]
+ for e in self.exprs:
+ e.leaveWhitespace()
+ return self
+
+ def ignore( self, other ):
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ super( ParseExpression, self).ignore( other )
+ for e in self.exprs:
+ e.ignore( self.ignoreExprs[-1] )
+ else:
+ super( ParseExpression, self).ignore( other )
+ for e in self.exprs:
+ e.ignore( self.ignoreExprs[-1] )
+ return self
+
+ def __str__( self ):
+ try:
+ return super(ParseExpression,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) )
+ return self.strRepr
+
+ def streamline( self ):
+ super(ParseExpression,self).streamline()
+
+ for e in self.exprs:
+ e.streamline()
+
+ # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d )
+ # but only if there are no parse actions or resultsNames on the nested And's
+ # (likewise for Or's and MatchFirst's)
+ if ( len(self.exprs) == 2 ):
+ other = self.exprs[0]
+ if ( isinstance( other, self.__class__ ) and
+ not(other.parseAction) and
+ other.resultsName is None and
+ not other.debug ):
+ self.exprs = other.exprs[:] + [ self.exprs[1] ]
+ self.strRepr = None
+ self.mayReturnEmpty |= other.mayReturnEmpty
+ self.mayIndexError |= other.mayIndexError
+
+ other = self.exprs[-1]
+ if ( isinstance( other, self.__class__ ) and
+ not(other.parseAction) and
+ other.resultsName is None and
+ not other.debug ):
+ self.exprs = self.exprs[:-1] + other.exprs[:]
+ self.strRepr = None
+ self.mayReturnEmpty |= other.mayReturnEmpty
+ self.mayIndexError |= other.mayIndexError
+
+ self.errmsg = "Expected " + _ustr(self)
+
+ return self
+
+ def setResultsName( self, name, listAllMatches=False ):
+ ret = super(ParseExpression,self).setResultsName(name,listAllMatches)
+ return ret
+
+ def validate( self, validateTrace=[] ):
+ tmp = validateTrace[:]+[self]
+ for e in self.exprs:
+ e.validate(tmp)
+ self.checkRecursion( [] )
+
+ def copy(self):
+ ret = super(ParseExpression,self).copy()
+ ret.exprs = [e.copy() for e in self.exprs]
+ return ret
+
+class And(ParseExpression):
+ """
+ Requires all given C{ParseExpression}s to be found in the given order.
+ Expressions may be separated by whitespace.
+ May be constructed using the C{'+'} operator.
+ May also be constructed using the C{'-'} operator, which will suppress backtracking.
+
+ Example::
+ integer = Word(nums)
+ name_expr = OneOrMore(Word(alphas))
+
+ expr = And([integer("id"),name_expr("name"),integer("age")])
+ # more easily written as:
+ expr = integer("id") + name_expr("name") + integer("age")
+ """
+
+ class _ErrorStop(Empty):
+ def __init__(self, *args, **kwargs):
+ super(And._ErrorStop,self).__init__(*args, **kwargs)
+ self.name = '-'
+ self.leaveWhitespace()
+
+ def __init__( self, exprs, savelist = True ):
+ super(And,self).__init__(exprs, savelist)
+ self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
+ self.setWhitespaceChars( self.exprs[0].whiteChars )
+ self.skipWhitespace = self.exprs[0].skipWhitespace
+ self.callPreparse = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ # pass False as last arg to _parse for first element, since we already
+ # pre-parsed the string as part of our And pre-parsing
+ loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
+ errorStop = False
+ for e in self.exprs[1:]:
+ if isinstance(e, And._ErrorStop):
+ errorStop = True
+ continue
+ if errorStop:
+ try:
+ loc, exprtokens = e._parse( instring, loc, doActions )
+ except ParseSyntaxException:
+ raise
+ except ParseBaseException as pe:
+ pe.__traceback__ = None
+ raise ParseSyntaxException._from_exception(pe)
+ except IndexError:
+ raise ParseSyntaxException(instring, len(instring), self.errmsg, self)
+ else:
+ loc, exprtokens = e._parse( instring, loc, doActions )
+ if exprtokens or exprtokens.haskeys():
+ resultlist += exprtokens
+ return loc, resultlist
+
+ def __iadd__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #And( [ self, other ] )
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+ if not e.mayReturnEmpty:
+ break
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+
+class Or(ParseExpression):
+ """
+ Requires that at least one C{ParseExpression} is found.
+ If two expressions match, the expression that matches the longest string will be used.
+ May be constructed using the C{'^'} operator.
+
+ Example::
+ # construct Or using '^' operator
+
+ number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums))
+ print(number.searchString("123 3.1416 789"))
+ prints::
+ [['123'], ['3.1416'], ['789']]
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(Or,self).__init__(exprs, savelist)
+ if self.exprs:
+ self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
+ else:
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ maxExcLoc = -1
+ maxException = None
+ matches = []
+ for e in self.exprs:
+ try:
+ loc2 = e.tryParse( instring, loc )
+ except ParseException as err:
+ err.__traceback__ = None
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+ except IndexError:
+ if len(instring) > maxExcLoc:
+ maxException = ParseException(instring,len(instring),e.errmsg,self)
+ maxExcLoc = len(instring)
+ else:
+ # save match among all matches, to retry longest to shortest
+ matches.append((loc2, e))
+
+ if matches:
+ matches.sort(key=lambda x: -x[0])
+ for _,e in matches:
+ try:
+ return e._parse( instring, loc, doActions )
+ except ParseException as err:
+ err.__traceback__ = None
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+
+ if maxException is not None:
+ maxException.msg = self.errmsg
+ raise maxException
+ else:
+ raise ParseException(instring, loc, "no defined alternatives to match", self)
+
+
+ def __ixor__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #Or( [ self, other ] )
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class MatchFirst(ParseExpression):
+ """
+ Requires that at least one C{ParseExpression} is found.
+ If two expressions match, the first one listed is the one that will match.
+ May be constructed using the C{'|'} operator.
+
+ Example::
+ # construct MatchFirst using '|' operator
+
+ # watch the order of expressions to match
+ number = Word(nums) | Combine(Word(nums) + '.' + Word(nums))
+ print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']]
+
+ # put more selective expression first
+ number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums)
+ print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']]
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(MatchFirst,self).__init__(exprs, savelist)
+ if self.exprs:
+ self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
+ else:
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ maxExcLoc = -1
+ maxException = None
+ for e in self.exprs:
+ try:
+ ret = e._parse( instring, loc, doActions )
+ return ret
+ except ParseException as err:
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+ except IndexError:
+ if len(instring) > maxExcLoc:
+ maxException = ParseException(instring,len(instring),e.errmsg,self)
+ maxExcLoc = len(instring)
+
+ # only got here if no expression matched, raise exception for match that made it the furthest
+ else:
+ if maxException is not None:
+ maxException.msg = self.errmsg
+ raise maxException
+ else:
+ raise ParseException(instring, loc, "no defined alternatives to match", self)
+
+ def __ior__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #MatchFirst( [ self, other ] )
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class Each(ParseExpression):
+ """
+ Requires all given C{ParseExpression}s to be found, but in any order.
+ Expressions may be separated by whitespace.
+ May be constructed using the C{'&'} operator.
+
+ Example::
+ color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN")
+ shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON")
+ integer = Word(nums)
+ shape_attr = "shape:" + shape_type("shape")
+ posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn")
+ color_attr = "color:" + color("color")
+ size_attr = "size:" + integer("size")
+
+ # use Each (using operator '&') to accept attributes in any order
+ # (shape and posn are required, color and size are optional)
+ shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr)
+
+ shape_spec.runTests('''
+ shape: SQUARE color: BLACK posn: 100, 120
+ shape: CIRCLE size: 50 color: BLUE posn: 50,80
+ color:GREEN size:20 shape:TRIANGLE posn:20,40
+ '''
+ )
+ prints::
+ shape: SQUARE color: BLACK posn: 100, 120
+ ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']]
+ - color: BLACK
+ - posn: ['100', ',', '120']
+ - x: 100
+ - y: 120
+ - shape: SQUARE
+
+
+ shape: CIRCLE size: 50 color: BLUE posn: 50,80
+ ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']]
+ - color: BLUE
+ - posn: ['50', ',', '80']
+ - x: 50
+ - y: 80
+ - shape: CIRCLE
+ - size: 50
+
+
+ color: GREEN size: 20 shape: TRIANGLE posn: 20,40
+ ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']]
+ - color: GREEN
+ - posn: ['20', ',', '40']
+ - x: 20
+ - y: 40
+ - shape: TRIANGLE
+ - size: 20
+ """
+ def __init__( self, exprs, savelist = True ):
+ super(Each,self).__init__(exprs, savelist)
+ self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
+ self.skipWhitespace = True
+ self.initExprGroups = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.initExprGroups:
+ self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional))
+ opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ]
+ opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)]
+ self.optionals = opt1 + opt2
+ self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ]
+ self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ]
+ self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ]
+ self.required += self.multirequired
+ self.initExprGroups = False
+ tmpLoc = loc
+ tmpReqd = self.required[:]
+ tmpOpt = self.optionals[:]
+ matchOrder = []
+
+ keepMatching = True
+ while keepMatching:
+ tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired
+ failed = []
+ for e in tmpExprs:
+ try:
+ tmpLoc = e.tryParse( instring, tmpLoc )
+ except ParseException:
+ failed.append(e)
+ else:
+ matchOrder.append(self.opt1map.get(id(e),e))
+ if e in tmpReqd:
+ tmpReqd.remove(e)
+ elif e in tmpOpt:
+ tmpOpt.remove(e)
+ if len(failed) == len(tmpExprs):
+ keepMatching = False
+
+ if tmpReqd:
+ missing = ", ".join(_ustr(e) for e in tmpReqd)
+ raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing )
+
+ # add any unmatched Optionals, in case they have default values defined
+ matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt]
+
+ resultlist = []
+ for e in matchOrder:
+ loc,results = e._parse(instring,loc,doActions)
+ resultlist.append(results)
+
+ finalResults = sum(resultlist, ParseResults([]))
+ return loc, finalResults
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class ParseElementEnhance(ParserElement):
+ """
+ Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens.
+ """
+ def __init__( self, expr, savelist=False ):
+ super(ParseElementEnhance,self).__init__(savelist)
+ if isinstance( expr, basestring ):
+ if issubclass(ParserElement._literalStringClass, Token):
+ expr = ParserElement._literalStringClass(expr)
+ else:
+ expr = ParserElement._literalStringClass(Literal(expr))
+ self.expr = expr
+ self.strRepr = None
+ if expr is not None:
+ self.mayIndexError = expr.mayIndexError
+ self.mayReturnEmpty = expr.mayReturnEmpty
+ self.setWhitespaceChars( expr.whiteChars )
+ self.skipWhitespace = expr.skipWhitespace
+ self.saveAsList = expr.saveAsList
+ self.callPreparse = expr.callPreparse
+ self.ignoreExprs.extend(expr.ignoreExprs)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.expr is not None:
+ return self.expr._parse( instring, loc, doActions, callPreParse=False )
+ else:
+ raise ParseException("",loc,self.errmsg,self)
+
+ def leaveWhitespace( self ):
+ self.skipWhitespace = False
+ self.expr = self.expr.copy()
+ if self.expr is not None:
+ self.expr.leaveWhitespace()
+ return self
+
+ def ignore( self, other ):
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ super( ParseElementEnhance, self).ignore( other )
+ if self.expr is not None:
+ self.expr.ignore( self.ignoreExprs[-1] )
+ else:
+ super( ParseElementEnhance, self).ignore( other )
+ if self.expr is not None:
+ self.expr.ignore( self.ignoreExprs[-1] )
+ return self
+
+ def streamline( self ):
+ super(ParseElementEnhance,self).streamline()
+ if self.expr is not None:
+ self.expr.streamline()
+ return self
+
+ def checkRecursion( self, parseElementList ):
+ if self in parseElementList:
+ raise RecursiveGrammarException( parseElementList+[self] )
+ subRecCheckList = parseElementList[:] + [ self ]
+ if self.expr is not None:
+ self.expr.checkRecursion( subRecCheckList )
+
+ def validate( self, validateTrace=[] ):
+ tmp = validateTrace[:]+[self]
+ if self.expr is not None:
+ self.expr.validate(tmp)
+ self.checkRecursion( [] )
+
+ def __str__( self ):
+ try:
+ return super(ParseElementEnhance,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None and self.expr is not None:
+ self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) )
+ return self.strRepr
+
+
+class FollowedBy(ParseElementEnhance):
+ """
+ Lookahead matching of the given parse expression. C{FollowedBy}
+ does I{not} advance the parsing position within the input string, it only
+ verifies that the specified parse expression matches at the current
+ position. C{FollowedBy} always returns a null token list.
+
+ Example::
+ # use FollowedBy to match a label only if it is followed by a ':'
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+
+ OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint()
+ prints::
+ [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']]
+ """
+ def __init__( self, expr ):
+ super(FollowedBy,self).__init__(expr)
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ self.expr.tryParse( instring, loc )
+ return loc, []
+
+
+class NotAny(ParseElementEnhance):
+ """
+ Lookahead to disallow matching with the given parse expression. C{NotAny}
+ does I{not} advance the parsing position within the input string, it only
+ verifies that the specified parse expression does I{not} match at the current
+ position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny}
+ always returns a null token list. May be constructed using the '~' operator.
+
+ Example::
+
+ """
+ def __init__( self, expr ):
+ super(NotAny,self).__init__(expr)
+ #~ self.leaveWhitespace()
+ self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs
+ self.mayReturnEmpty = True
+ self.errmsg = "Found unwanted token, "+_ustr(self.expr)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.expr.canParseNext(instring, loc):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "~{" + _ustr(self.expr) + "}"
+
+ return self.strRepr
+
+class _MultipleMatch(ParseElementEnhance):
+ def __init__( self, expr, stopOn=None):
+ super(_MultipleMatch, self).__init__(expr)
+ self.saveAsList = True
+ ender = stopOn
+ if isinstance(ender, basestring):
+ ender = ParserElement._literalStringClass(ender)
+ self.not_ender = ~ender if ender is not None else None
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ self_expr_parse = self.expr._parse
+ self_skip_ignorables = self._skipIgnorables
+ check_ender = self.not_ender is not None
+ if check_ender:
+ try_not_ender = self.not_ender.tryParse
+
+ # must be at least one (but first see if we are the stopOn sentinel;
+ # if so, fail)
+ if check_ender:
+ try_not_ender(instring, loc)
+ loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
+ try:
+ hasIgnoreExprs = (not not self.ignoreExprs)
+ while 1:
+ if check_ender:
+ try_not_ender(instring, loc)
+ if hasIgnoreExprs:
+ preloc = self_skip_ignorables( instring, loc )
+ else:
+ preloc = loc
+ loc, tmptokens = self_expr_parse( instring, preloc, doActions )
+ if tmptokens or tmptokens.haskeys():
+ tokens += tmptokens
+ except (ParseException,IndexError):
+ pass
+
+ return loc, tokens
+
+class OneOrMore(_MultipleMatch):
+ """
+ Repetition of one or more of the given expression.
+
+ Parameters:
+ - expr - expression that must match one or more times
+ - stopOn - (default=C{None}) - expression for a terminating sentinel
+ (only required if the sentinel would ordinarily match the repetition
+ expression)
+
+ Example::
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
+
+ text = "shape: SQUARE posn: upper left color: BLACK"
+ OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']]
+
+ # use stopOn attribute for OneOrMore to avoid reading label string as part of the data
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+ OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']]
+
+ # could also be written as
+ (attr_expr * (1,)).parseString(text).pprint()
+ """
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + _ustr(self.expr) + "}..."
+
+ return self.strRepr
+
+class ZeroOrMore(_MultipleMatch):
+ """
+ Optional repetition of zero or more of the given expression.
+
+ Parameters:
+ - expr - expression that must match zero or more times
+ - stopOn - (default=C{None}) - expression for a terminating sentinel
+ (only required if the sentinel would ordinarily match the repetition
+ expression)
+
+ Example: similar to L{OneOrMore}
+ """
+ def __init__( self, expr, stopOn=None):
+ super(ZeroOrMore,self).__init__(expr, stopOn=stopOn)
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ try:
+ return super(ZeroOrMore, self).parseImpl(instring, loc, doActions)
+ except (ParseException,IndexError):
+ return loc, []
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "[" + _ustr(self.expr) + "]..."
+
+ return self.strRepr
+
+class _NullToken(object):
+ def __bool__(self):
+ return False
+ __nonzero__ = __bool__
+ def __str__(self):
+ return ""
+
+_optionalNotMatched = _NullToken()
+class Optional(ParseElementEnhance):
+ """
+ Optional matching of the given expression.
+
+ Parameters:
+ - expr - expression that must match zero or more times
+ - default (optional) - value to be returned if the optional expression is not found.
+
+ Example::
+ # US postal code can be a 5-digit zip, plus optional 4-digit qualifier
+ zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4)))
+ zip.runTests('''
+ # traditional ZIP code
+ 12345
+
+ # ZIP+4 form
+ 12101-0001
+
+ # invalid ZIP
+ 98765-
+ ''')
+ prints::
+ # traditional ZIP code
+ 12345
+ ['12345']
+
+ # ZIP+4 form
+ 12101-0001
+ ['12101-0001']
+
+ # invalid ZIP
+ 98765-
+ ^
+ FAIL: Expected end of text (at char 5), (line:1, col:6)
+ """
+ def __init__( self, expr, default=_optionalNotMatched ):
+ super(Optional,self).__init__( expr, savelist=False )
+ self.saveAsList = self.expr.saveAsList
+ self.defaultValue = default
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ try:
+ loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
+ except (ParseException,IndexError):
+ if self.defaultValue is not _optionalNotMatched:
+ if self.expr.resultsName:
+ tokens = ParseResults([ self.defaultValue ])
+ tokens[self.expr.resultsName] = self.defaultValue
+ else:
+ tokens = [ self.defaultValue ]
+ else:
+ tokens = []
+ return loc, tokens
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "[" + _ustr(self.expr) + "]"
+
+ return self.strRepr
+
+class SkipTo(ParseElementEnhance):
+ """
+ Token for skipping over all undefined text until the matched expression is found.
+
+ Parameters:
+ - expr - target expression marking the end of the data to be skipped
+ - include - (default=C{False}) if True, the target expression is also parsed
+ (the skipped text and target expression are returned as a 2-element list).
+ - ignore - (default=C{None}) used to define grammars (typically quoted strings and
+ comments) that might contain false matches to the target expression
+ - failOn - (default=C{None}) define expressions that are not allowed to be
+ included in the skipped test; if found before the target expression is found,
+ the SkipTo is not a match
+
+ Example::
+ report = '''
+ Outstanding Issues Report - 1 Jan 2000
+
+ # | Severity | Description | Days Open
+ -----+----------+-------------------------------------------+-----------
+ 101 | Critical | Intermittent system crash | 6
+ 94 | Cosmetic | Spelling error on Login ('log|n') | 14
+ 79 | Minor | System slow when running too many reports | 47
+ '''
+ integer = Word(nums)
+ SEP = Suppress('|')
+ # use SkipTo to simply match everything up until the next SEP
+ # - ignore quoted strings, so that a '|' character inside a quoted string does not match
+ # - parse action will call token.strip() for each matched token, i.e., the description body
+ string_data = SkipTo(SEP, ignore=quotedString)
+ string_data.setParseAction(tokenMap(str.strip))
+ ticket_expr = (integer("issue_num") + SEP
+ + string_data("sev") + SEP
+ + string_data("desc") + SEP
+ + integer("days_open"))
+
+ for tkt in ticket_expr.searchString(report):
+ print tkt.dump()
+ prints::
+ ['101', 'Critical', 'Intermittent system crash', '6']
+ - days_open: 6
+ - desc: Intermittent system crash
+ - issue_num: 101
+ - sev: Critical
+ ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14']
+ - days_open: 14
+ - desc: Spelling error on Login ('log|n')
+ - issue_num: 94
+ - sev: Cosmetic
+ ['79', 'Minor', 'System slow when running too many reports', '47']
+ - days_open: 47
+ - desc: System slow when running too many reports
+ - issue_num: 79
+ - sev: Minor
+ """
+ def __init__( self, other, include=False, ignore=None, failOn=None ):
+ super( SkipTo, self ).__init__( other )
+ self.ignoreExpr = ignore
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+ self.includeMatch = include
+ self.asList = False
+ if isinstance(failOn, basestring):
+ self.failOn = ParserElement._literalStringClass(failOn)
+ else:
+ self.failOn = failOn
+ self.errmsg = "No match found for "+_ustr(self.expr)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ startloc = loc
+ instrlen = len(instring)
+ expr = self.expr
+ expr_parse = self.expr._parse
+ self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None
+ self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None
+
+ tmploc = loc
+ while tmploc <= instrlen:
+ if self_failOn_canParseNext is not None:
+ # break if failOn expression matches
+ if self_failOn_canParseNext(instring, tmploc):
+ break
+
+ if self_ignoreExpr_tryParse is not None:
+ # advance past ignore expressions
+ while 1:
+ try:
+ tmploc = self_ignoreExpr_tryParse(instring, tmploc)
+ except ParseBaseException:
+ break
+
+ try:
+ expr_parse(instring, tmploc, doActions=False, callPreParse=False)
+ except (ParseException, IndexError):
+ # no match, advance loc in string
+ tmploc += 1
+ else:
+ # matched skipto expr, done
+ break
+
+ else:
+ # ran off the end of the input string without matching skipto expr, fail
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ # build up return values
+ loc = tmploc
+ skiptext = instring[startloc:loc]
+ skipresult = ParseResults(skiptext)
+
+ if self.includeMatch:
+ loc, mat = expr_parse(instring,loc,doActions,callPreParse=False)
+ skipresult += mat
+
+ return loc, skipresult
+
+class Forward(ParseElementEnhance):
+ """
+ Forward declaration of an expression to be defined later -
+ used for recursive grammars, such as algebraic infix notation.
+ When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator.
+
+ Note: take care when assigning to C{Forward} not to overlook precedence of operators.
+ Specifically, '|' has a lower precedence than '<<', so that::
+ fwdExpr << a | b | c
+ will actually be evaluated as::
+ (fwdExpr << a) | b | c
+ thereby leaving b and c out as parseable alternatives. It is recommended that you
+ explicitly group the values inserted into the C{Forward}::
+ fwdExpr << (a | b | c)
+ Converting to use the '<<=' operator instead will avoid this problem.
+
+ See L{ParseResults.pprint} for an example of a recursive parser created using
+ C{Forward}.
+ """
+ def __init__( self, other=None ):
+ super(Forward,self).__init__( other, savelist=False )
+
+ def __lshift__( self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass(other)
+ self.expr = other
+ self.strRepr = None
+ self.mayIndexError = self.expr.mayIndexError
+ self.mayReturnEmpty = self.expr.mayReturnEmpty
+ self.setWhitespaceChars( self.expr.whiteChars )
+ self.skipWhitespace = self.expr.skipWhitespace
+ self.saveAsList = self.expr.saveAsList
+ self.ignoreExprs.extend(self.expr.ignoreExprs)
+ return self
+
+ def __ilshift__(self, other):
+ return self << other
+
+ def leaveWhitespace( self ):
+ self.skipWhitespace = False
+ return self
+
+ def streamline( self ):
+ if not self.streamlined:
+ self.streamlined = True
+ if self.expr is not None:
+ self.expr.streamline()
+ return self
+
+ def validate( self, validateTrace=[] ):
+ if self not in validateTrace:
+ tmp = validateTrace[:]+[self]
+ if self.expr is not None:
+ self.expr.validate(tmp)
+ self.checkRecursion([])
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+ return self.__class__.__name__ + ": ..."
+
+ # stubbed out for now - creates awful memory and perf issues
+ self._revertClass = self.__class__
+ self.__class__ = _ForwardNoRecurse
+ try:
+ if self.expr is not None:
+ retString = _ustr(self.expr)
+ else:
+ retString = "None"
+ finally:
+ self.__class__ = self._revertClass
+ return self.__class__.__name__ + ": " + retString
+
+ def copy(self):
+ if self.expr is not None:
+ return super(Forward,self).copy()
+ else:
+ ret = Forward()
+ ret <<= self
+ return ret
+
+class _ForwardNoRecurse(Forward):
+ def __str__( self ):
+ return "..."
+
+class TokenConverter(ParseElementEnhance):
+ """
+ Abstract subclass of C{ParseExpression}, for converting parsed results.
+ """
+ def __init__( self, expr, savelist=False ):
+ super(TokenConverter,self).__init__( expr )#, savelist )
+ self.saveAsList = False
+
+class Combine(TokenConverter):
+ """
+ Converter to concatenate all matching tokens to a single string.
+ By default, the matching patterns must also be contiguous in the input string;
+ this can be disabled by specifying C{'adjacent=False'} in the constructor.
+
+ Example::
+ real = Word(nums) + '.' + Word(nums)
+ print(real.parseString('3.1416')) # -> ['3', '.', '1416']
+ # will also erroneously match the following
+ print(real.parseString('3. 1416')) # -> ['3', '.', '1416']
+
+ real = Combine(Word(nums) + '.' + Word(nums))
+ print(real.parseString('3.1416')) # -> ['3.1416']
+ # no match when there are internal spaces
+ print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...)
+ """
+ def __init__( self, expr, joinString="", adjacent=True ):
+ super(Combine,self).__init__( expr )
+ # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself
+ if adjacent:
+ self.leaveWhitespace()
+ self.adjacent = adjacent
+ self.skipWhitespace = True
+ self.joinString = joinString
+ self.callPreparse = True
+
+ def ignore( self, other ):
+ if self.adjacent:
+ ParserElement.ignore(self, other)
+ else:
+ super( Combine, self).ignore( other )
+ return self
+
+ def postParse( self, instring, loc, tokenlist ):
+ retToks = tokenlist.copy()
+ del retToks[:]
+ retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults)
+
+ if self.resultsName and retToks.haskeys():
+ return [ retToks ]
+ else:
+ return retToks
+
+class Group(TokenConverter):
+ """
+ Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions.
+
+ Example::
+ ident = Word(alphas)
+ num = Word(nums)
+ term = ident | num
+ func = ident + Optional(delimitedList(term))
+ print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100']
+
+ func = ident + Group(Optional(delimitedList(term)))
+ print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']]
+ """
+ def __init__( self, expr ):
+ super(Group,self).__init__( expr )
+ self.saveAsList = True
+
+ def postParse( self, instring, loc, tokenlist ):
+ return [ tokenlist ]
+
+class Dict(TokenConverter):
+ """
+ Converter to return a repetitive expression as a list, but also as a dictionary.
+ Each element can also be referenced using the first token in the expression as its key.
+ Useful for tabular report scraping when the first column can be used as a item key.
+
+ Example::
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
+
+ text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
+ attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+
+ # print attributes as plain groups
+ print(OneOrMore(attr_expr).parseString(text).dump())
+
+ # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names
+ result = Dict(OneOrMore(Group(attr_expr))).parseString(text)
+ print(result.dump())
+
+ # access named fields as dict entries, or output as dict
+ print(result['shape'])
+ print(result.asDict())
+ prints::
+ ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap']
+
+ [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
+ - color: light blue
+ - posn: upper left
+ - shape: SQUARE
+ - texture: burlap
+ SQUARE
+ {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'}
+ See more examples at L{ParseResults} of accessing fields by results name.
+ """
+ def __init__( self, expr ):
+ super(Dict,self).__init__( expr )
+ self.saveAsList = True
+
+ def postParse( self, instring, loc, tokenlist ):
+ for i,tok in enumerate(tokenlist):
+ if len(tok) == 0:
+ continue
+ ikey = tok[0]
+ if isinstance(ikey,int):
+ ikey = _ustr(tok[0]).strip()
+ if len(tok)==1:
+ tokenlist[ikey] = _ParseResultsWithOffset("",i)
+ elif len(tok)==2 and not isinstance(tok[1],ParseResults):
+ tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i)
+ else:
+ dictvalue = tok.copy() #ParseResults(i)
+ del dictvalue[0]
+ if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()):
+ tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i)
+ else:
+ tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i)
+
+ if self.resultsName:
+ return [ tokenlist ]
+ else:
+ return tokenlist
+
+
+class Suppress(TokenConverter):
+ """
+ Converter for ignoring the results of a parsed expression.
+
+ Example::
+ source = "a, b, c,d"
+ wd = Word(alphas)
+ wd_list1 = wd + ZeroOrMore(',' + wd)
+ print(wd_list1.parseString(source))
+
+ # often, delimiters that are useful during parsing are just in the
+ # way afterward - use Suppress to keep them out of the parsed output
+ wd_list2 = wd + ZeroOrMore(Suppress(',') + wd)
+ print(wd_list2.parseString(source))
+ prints::
+ ['a', ',', 'b', ',', 'c', ',', 'd']
+ ['a', 'b', 'c', 'd']
+ (See also L{delimitedList}.)
+ """
+ def postParse( self, instring, loc, tokenlist ):
+ return []
+
+ def suppress( self ):
+ return self
+
+
+class OnlyOnce(object):
+ """
+ Wrapper for parse actions, to ensure they are only called once.
+ """
+ def __init__(self, methodCall):
+ self.callable = _trim_arity(methodCall)
+ self.called = False
+ def __call__(self,s,l,t):
+ if not self.called:
+ results = self.callable(s,l,t)
+ self.called = True
+ return results
+ raise ParseException(s,l,"")
+ def reset(self):
+ self.called = False
+
+def traceParseAction(f):
+ """
+ Decorator for debugging parse actions.
+
+ When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".}
+ When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised.
+
+ Example::
+ wd = Word(alphas)
+
+ @traceParseAction
+ def remove_duplicate_chars(tokens):
+ return ''.join(sorted(set(''.join(tokens))))
+
+ wds = OneOrMore(wd).setParseAction(remove_duplicate_chars)
+ print(wds.parseString("slkdjs sld sldd sdlf sdljf"))
+ prints::
+ >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {}))
+ <<leaving remove_duplicate_chars (ret: 'dfjkls')
+ ['dfjkls']
+ """
+ f = _trim_arity(f)
+ def z(*paArgs):
+ thisFunc = f.__name__
+ s,l,t = paArgs[-3:]
+ if len(paArgs)>3:
+ thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc
+ sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) )
+ try:
+ ret = f(*paArgs)
+ except Exception as exc:
+ sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) )
+ raise
+ sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) )
+ return ret
+ try:
+ z.__name__ = f.__name__
+ except AttributeError:
+ pass
+ return z
+
+#
+# global helpers
+#
+def delimitedList( expr, delim=",", combine=False ):
+ """
+ Helper to define a delimited list of expressions - the delimiter defaults to ','.
+ By default, the list elements and delimiters can have intervening whitespace, and
+ comments, but this can be overridden by passing C{combine=True} in the constructor.
+ If C{combine} is set to C{True}, the matching tokens are returned as a single token
+ string, with the delimiters included; otherwise, the matching tokens are returned
+ as a list of tokens, with the delimiters suppressed.
+
+ Example::
+ delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc']
+ delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE']
+ """
+ dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..."
+ if combine:
+ return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName)
+ else:
+ return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName)
+
+def countedArray( expr, intExpr=None ):
+ """
+ Helper to define a counted list of expressions.
+ This helper defines a pattern of the form::
+ integer expr expr expr...
+ where the leading integer tells how many expr expressions follow.
+ The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
+
+ If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value.
+
+ Example::
+ countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd']
+
+ # in this parser, the leading integer value is given in binary,
+ # '10' indicating that 2 values are in the array
+ binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2))
+ countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd']
+ """
+ arrayExpr = Forward()
+ def countFieldParseAction(s,l,t):
+ n = t[0]
+ arrayExpr << (n and Group(And([expr]*n)) or Group(empty))
+ return []
+ if intExpr is None:
+ intExpr = Word(nums).setParseAction(lambda t:int(t[0]))
+ else:
+ intExpr = intExpr.copy()
+ intExpr.setName("arrayLen")
+ intExpr.addParseAction(countFieldParseAction, callDuringTry=True)
+ return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...')
+
+def _flatten(L):
+ ret = []
+ for i in L:
+ if isinstance(i,list):
+ ret.extend(_flatten(i))
+ else:
+ ret.append(i)
+ return ret
+
+def matchPreviousLiteral(expr):
+ """
+ Helper to define an expression that is indirectly defined from
+ the tokens matched in a previous expression, that is, it looks
+ for a 'repeat' of a previous expression. For example::
+ first = Word(nums)
+ second = matchPreviousLiteral(first)
+ matchExpr = first + ":" + second
+ will match C{"1:1"}, but not C{"1:2"}. Because this matches a
+ previous literal, will also match the leading C{"1:1"} in C{"1:10"}.
+ If this is not desired, use C{matchPreviousExpr}.
+ Do I{not} use with packrat parsing enabled.
+ """
+ rep = Forward()
+ def copyTokenToRepeater(s,l,t):
+ if t:
+ if len(t) == 1:
+ rep << t[0]
+ else:
+ # flatten t tokens
+ tflat = _flatten(t.asList())
+ rep << And(Literal(tt) for tt in tflat)
+ else:
+ rep << Empty()
+ expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
+ rep.setName('(prev) ' + _ustr(expr))
+ return rep
+
+def matchPreviousExpr(expr):
+ """
+ Helper to define an expression that is indirectly defined from
+ the tokens matched in a previous expression, that is, it looks
+ for a 'repeat' of a previous expression. For example::
+ first = Word(nums)
+ second = matchPreviousExpr(first)
+ matchExpr = first + ":" + second
+ will match C{"1:1"}, but not C{"1:2"}. Because this matches by
+ expressions, will I{not} match the leading C{"1:1"} in C{"1:10"};
+ the expressions are evaluated first, and then compared, so
+ C{"1"} is compared with C{"10"}.
+ Do I{not} use with packrat parsing enabled.
+ """
+ rep = Forward()
+ e2 = expr.copy()
+ rep <<= e2
+ def copyTokenToRepeater(s,l,t):
+ matchTokens = _flatten(t.asList())
+ def mustMatchTheseTokens(s,l,t):
+ theseTokens = _flatten(t.asList())
+ if theseTokens != matchTokens:
+ raise ParseException("",0,"")
+ rep.setParseAction( mustMatchTheseTokens, callDuringTry=True )
+ expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
+ rep.setName('(prev) ' + _ustr(expr))
+ return rep
+
+def _escapeRegexRangeChars(s):
+ #~ escape these chars: ^-]
+ for c in r"\^-]":
+ s = s.replace(c,_bslash+c)
+ s = s.replace("\n",r"\n")
+ s = s.replace("\t",r"\t")
+ return _ustr(s)
+
+def oneOf( strs, caseless=False, useRegex=True ):
+ """
+ Helper to quickly define a set of alternative Literals, and makes sure to do
+ longest-first testing when there is a conflict, regardless of the input order,
+ but returns a C{L{MatchFirst}} for best performance.
+
+ Parameters:
+ - strs - a string of space-delimited literals, or a collection of string literals
+ - caseless - (default=C{False}) - treat all literals as caseless
+ - useRegex - (default=C{True}) - as an optimization, will generate a Regex
+ object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or
+ if creating a C{Regex} raises an exception)
+
+ Example::
+ comp_oper = oneOf("< = > <= >= !=")
+ var = Word(alphas)
+ number = Word(nums)
+ term = var | number
+ comparison_expr = term + comp_oper + term
+ print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12"))
+ prints::
+ [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']]
+ """
+ if caseless:
+ isequal = ( lambda a,b: a.upper() == b.upper() )
+ masks = ( lambda a,b: b.upper().startswith(a.upper()) )
+ parseElementClass = CaselessLiteral
+ else:
+ isequal = ( lambda a,b: a == b )
+ masks = ( lambda a,b: b.startswith(a) )
+ parseElementClass = Literal
+
+ symbols = []
+ if isinstance(strs,basestring):
+ symbols = strs.split()
+ elif isinstance(strs, Iterable):
+ symbols = list(strs)
+ else:
+ warnings.warn("Invalid argument to oneOf, expected string or iterable",
+ SyntaxWarning, stacklevel=2)
+ if not symbols:
+ return NoMatch()
+
+ i = 0
+ while i < len(symbols)-1:
+ cur = symbols[i]
+ for j,other in enumerate(symbols[i+1:]):
+ if ( isequal(other, cur) ):
+ del symbols[i+j+1]
+ break
+ elif ( masks(cur, other) ):
+ del symbols[i+j+1]
+ symbols.insert(i,other)
+ cur = other
+ break
+ else:
+ i += 1
+
+ if not caseless and useRegex:
+ #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] ))
+ try:
+ if len(symbols)==len("".join(symbols)):
+ return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols))
+ else:
+ return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols))
+ except Exception:
+ warnings.warn("Exception creating Regex for oneOf, building MatchFirst",
+ SyntaxWarning, stacklevel=2)
+
+
+ # last resort, just use MatchFirst
+ return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols))
+
+def dictOf( key, value ):
+ """
+ Helper to easily and clearly define a dictionary by specifying the respective patterns
+ for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens
+ in the proper order. The key pattern can include delimiting markers or punctuation,
+ as long as they are suppressed, thereby leaving the significant key text. The value
+ pattern can include named results, so that the C{Dict} results can include named token
+ fields.
+
+ Example::
+ text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
+ attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+ print(OneOrMore(attr_expr).parseString(text).dump())
+
+ attr_label = label
+ attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)
+
+ # similar to Dict, but simpler call format
+ result = dictOf(attr_label, attr_value).parseString(text)
+ print(result.dump())
+ print(result['shape'])
+ print(result.shape) # object attribute access works too
+ print(result.asDict())
+ prints::
+ [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
+ - color: light blue
+ - posn: upper left
+ - shape: SQUARE
+ - texture: burlap
+ SQUARE
+ SQUARE
+ {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'}
+ """
+ return Dict( ZeroOrMore( Group ( key + value ) ) )
+
+def originalTextFor(expr, asString=True):
+ """
+ Helper to return the original, untokenized text for a given expression. Useful to
+ restore the parsed fields of an HTML start tag into the raw tag text itself, or to
+ revert separate tokens with intervening whitespace back to the original matching
+ input text. By default, returns astring containing the original parsed text.
+
+ If the optional C{asString} argument is passed as C{False}, then the return value is a
+ C{L{ParseResults}} containing any results names that were originally matched, and a
+ single token containing the original matched text from the input string. So if
+ the expression passed to C{L{originalTextFor}} contains expressions with defined
+ results names, you must set C{asString} to C{False} if you want to preserve those
+ results name values.
+
+ Example::
+ src = "this is test <b> bold <i>text</i> </b> normal text "
+ for tag in ("b","i"):
+ opener,closer = makeHTMLTags(tag)
+ patt = originalTextFor(opener + SkipTo(closer) + closer)
+ print(patt.searchString(src)[0])
+ prints::
+ ['<b> bold <i>text</i> </b>']
+ ['<i>text</i>']
+ """
+ locMarker = Empty().setParseAction(lambda s,loc,t: loc)
+ endlocMarker = locMarker.copy()
+ endlocMarker.callPreparse = False
+ matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end")
+ if asString:
+ extractText = lambda s,l,t: s[t._original_start:t._original_end]
+ else:
+ def extractText(s,l,t):
+ t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]]
+ matchExpr.setParseAction(extractText)
+ matchExpr.ignoreExprs = expr.ignoreExprs
+ return matchExpr
+
+def ungroup(expr):
+ """
+ Helper to undo pyparsing's default grouping of And expressions, even
+ if all but one are non-empty.
+ """
+ return TokenConverter(expr).setParseAction(lambda t:t[0])
+
+def locatedExpr(expr):
+ """
+ Helper to decorate a returned token with its starting and ending locations in the input string.
+ This helper adds the following results names:
+ - locn_start = location where matched expression begins
+ - locn_end = location where matched expression ends
+ - value = the actual parsed results
+
+ Be careful if the input text contains C{<TAB>} characters, you may want to call
+ C{L{ParserElement.parseWithTabs}}
+
+ Example::
+ wd = Word(alphas)
+ for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"):
+ print(match)
+ prints::
+ [[0, 'ljsdf', 5]]
+ [[8, 'lksdjjf', 15]]
+ [[18, 'lkkjj', 23]]
+ """
+ locator = Empty().setParseAction(lambda s,l,t: l)
+ return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end"))
+
+
+# convenience constants for positional expressions
+empty = Empty().setName("empty")
+lineStart = LineStart().setName("lineStart")
+lineEnd = LineEnd().setName("lineEnd")
+stringStart = StringStart().setName("stringStart")
+stringEnd = StringEnd().setName("stringEnd")
+
+_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
+_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16)))
+_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8)))
+_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1)
+_charRange = Group(_singleChar + Suppress("-") + _singleChar)
+_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"
+
+def srange(s):
+ r"""
+ Helper to easily define string ranges for use in Word construction. Borrows
+ syntax from regexp '[]' string range definitions::
+ srange("[0-9]") -> "0123456789"
+ srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz"
+ srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
+ The input string must be enclosed in []'s, and the returned string is the expanded
+ character set joined into a single string.
+ The values enclosed in the []'s may be:
+ - a single character
+ - an escaped character with a leading backslash (such as C{\-} or C{\]})
+ - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character)
+ (C{\0x##} is also supported for backwards compatibility)
+ - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character)
+ - a range of any of the above, separated by a dash (C{'a-z'}, etc.)
+ - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.)
+ """
+ _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1))
+ try:
+ return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body)
+ except Exception:
+ return ""
+
+def matchOnlyAtCol(n):
+ """
+ Helper method for defining parse actions that require matching at a specific
+ column in the input text.
+ """
+ def verifyCol(strg,locn,toks):
+ if col(locn,strg) != n:
+ raise ParseException(strg,locn,"matched token not at column %d" % n)
+ return verifyCol
+
+def replaceWith(replStr):
+ """
+ Helper method for common parse actions that simply return a literal value. Especially
+ useful when used with C{L{transformString<ParserElement.transformString>}()}.
+
+ Example::
+ num = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ na = oneOf("N/A NA").setParseAction(replaceWith(math.nan))
+ term = na | num
+
+ OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234]
+ """
+ return lambda s,l,t: [replStr]
+
+def removeQuotes(s,l,t):
+ """
+ Helper parse action for removing quotation marks from parsed quoted strings.
+
+ Example::
+ # by default, quotation marks are included in parsed results
+ quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"]
+
+ # use removeQuotes to strip quotation marks from parsed results
+ quotedString.setParseAction(removeQuotes)
+ quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"]
+ """
+ return t[0][1:-1]
+
+def tokenMap(func, *args):
+ """
+ Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional
+ args are passed, they are forwarded to the given function as additional arguments after
+ the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the
+ parsed data to an integer using base 16.
+
+ Example (compare the last to example in L{ParserElement.transformString}::
+ hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16))
+ hex_ints.runTests('''
+ 00 11 22 aa FF 0a 0d 1a
+ ''')
+
+ upperword = Word(alphas).setParseAction(tokenMap(str.upper))
+ OneOrMore(upperword).runTests('''
+ my kingdom for a horse
+ ''')
+
+ wd = Word(alphas).setParseAction(tokenMap(str.title))
+ OneOrMore(wd).setParseAction(' '.join).runTests('''
+ now is the winter of our discontent made glorious summer by this sun of york
+ ''')
+ prints::
+ 00 11 22 aa FF 0a 0d 1a
+ [0, 17, 34, 170, 255, 10, 13, 26]
+
+ my kingdom for a horse
+ ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE']
+
+ now is the winter of our discontent made glorious summer by this sun of york
+ ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York']
+ """
+ def pa(s,l,t):
+ return [func(tokn, *args) for tokn in t]
+
+ try:
+ func_name = getattr(func, '__name__',
+ getattr(func, '__class__').__name__)
+ except Exception:
+ func_name = str(func)
+ pa.__name__ = func_name
+
+ return pa
+
+upcaseTokens = tokenMap(lambda t: _ustr(t).upper())
+"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}"""
+
+downcaseTokens = tokenMap(lambda t: _ustr(t).lower())
+"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}"""
+
+def _makeTags(tagStr, xml):
+ """Internal helper to construct opening and closing tag expressions, given a tag name"""
+ if isinstance(tagStr,basestring):
+ resname = tagStr
+ tagStr = Keyword(tagStr, caseless=not xml)
+ else:
+ resname = tagStr.name
+
+ tagAttrName = Word(alphas,alphanums+"_-:")
+ if (xml):
+ tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes )
+ openTag = Suppress("<") + tagStr("tag") + \
+ Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \
+ Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
+ else:
+ printablesLessRAbrack = "".join(c for c in printables if c not in ">")
+ tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack)
+ openTag = Suppress("<") + tagStr("tag") + \
+ Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
+ Optional( Suppress("=") + tagAttrValue ) ))) + \
+ Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
+ closeTag = Combine(_L("</") + tagStr + ">")
+
+ openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname)
+ closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname)
+ openTag.tag = resname
+ closeTag.tag = resname
+ return openTag, closeTag
+
+def makeHTMLTags(tagStr):
+ """
+ Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches
+ tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values.
+
+ Example::
+ text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
+ # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple
+ a,a_end = makeHTMLTags("A")
+ link_expr = a + SkipTo(a_end)("link_text") + a_end
+
+ for link in link_expr.searchString(text):
+ # attributes in the <A> tag (like "href" shown here) are also accessible as named results
+ print(link.link_text, '->', link.href)
+ prints::
+ pyparsing -> http://pyparsing.wikispaces.com
+ """
+ return _makeTags( tagStr, False )
+
+def makeXMLTags(tagStr):
+ """
+ Helper to construct opening and closing tag expressions for XML, given a tag name. Matches
+ tags only in the given upper/lower case.
+
+ Example: similar to L{makeHTMLTags}
+ """
+ return _makeTags( tagStr, True )
+
+def withAttribute(*args,**attrDict):
+ """
+ Helper to create a validating parse action to be used with start tags created
+ with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag
+ with a required attribute value, to avoid false matches on common tags such as
+ C{<TD>} or C{<DIV>}.
+
+ Call C{withAttribute} with a series of attribute names and values. Specify the list
+ of filter attributes names and values as:
+ - keyword arguments, as in C{(align="right")}, or
+ - as an explicit dict with C{**} operator, when an attribute name is also a Python
+ reserved word, as in C{**{"class":"Customer", "align":"right"}}
+ - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") )
+ For attribute names with a namespace prefix, you must use the second form. Attribute
+ names are matched insensitive to upper/lower case.
+
+ If just testing for C{class} (with or without a namespace), use C{L{withClass}}.
+
+ To verify that the attribute exists, but without specifying a value, pass
+ C{withAttribute.ANY_VALUE} as the value.
+
+ Example::
+ html = '''
+ <div>
+ Some text
+ <div type="grid">1 4 0 1 0</div>
+ <div type="graph">1,3 2,3 1,1</div>
+ <div>this has no type</div>
+ </div>
+
+ '''
+ div,div_end = makeHTMLTags("div")
+
+ # only match div tag having a type attribute with value "grid"
+ div_grid = div().setParseAction(withAttribute(type="grid"))
+ grid_expr = div_grid + SkipTo(div | div_end)("body")
+ for grid_header in grid_expr.searchString(html):
+ print(grid_header.body)
+
+ # construct a match with any div tag having a type attribute, regardless of the value
+ div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE))
+ div_expr = div_any_type + SkipTo(div | div_end)("body")
+ for div_header in div_expr.searchString(html):
+ print(div_header.body)
+ prints::
+ 1 4 0 1 0
+
+ 1 4 0 1 0
+ 1,3 2,3 1,1
+ """
+ if args:
+ attrs = args[:]
+ else:
+ attrs = attrDict.items()
+ attrs = [(k,v) for k,v in attrs]
+ def pa(s,l,tokens):
+ for attrName,attrValue in attrs:
+ if attrName not in tokens:
+ raise ParseException(s,l,"no matching attribute " + attrName)
+ if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue:
+ raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" %
+ (attrName, tokens[attrName], attrValue))
+ return pa
+withAttribute.ANY_VALUE = object()
+
+def withClass(classname, namespace=''):
+ """
+ Simplified version of C{L{withAttribute}} when matching on a div class - made
+ difficult because C{class} is a reserved word in Python.
+
+ Example::
+ html = '''
+ <div>
+ Some text
+ <div class="grid">1 4 0 1 0</div>
+ <div class="graph">1,3 2,3 1,1</div>
+ <div>this &lt;div&gt; has no class</div>
+ </div>
+
+ '''
+ div,div_end = makeHTMLTags("div")
+ div_grid = div().setParseAction(withClass("grid"))
+
+ grid_expr = div_grid + SkipTo(div | div_end)("body")
+ for grid_header in grid_expr.searchString(html):
+ print(grid_header.body)
+
+ div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE))
+ div_expr = div_any_type + SkipTo(div | div_end)("body")
+ for div_header in div_expr.searchString(html):
+ print(div_header.body)
+ prints::
+ 1 4 0 1 0
+
+ 1 4 0 1 0
+ 1,3 2,3 1,1
+ """
+ classattr = "%s:class" % namespace if namespace else "class"
+ return withAttribute(**{classattr : classname})
+
+opAssoc = _Constants()
+opAssoc.LEFT = object()
+opAssoc.RIGHT = object()
+
+def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ):
+ """
+ Helper method for constructing grammars of expressions made up of
+ operators working in a precedence hierarchy. Operators may be unary or
+ binary, left- or right-associative. Parse actions can also be attached
+ to operator expressions. The generated parser will also recognize the use
+ of parentheses to override operator precedences (see example below).
+
+ Note: if you define a deep operator list, you may see performance issues
+ when using infixNotation. See L{ParserElement.enablePackrat} for a
+ mechanism to potentially improve your parser performance.
+
+ Parameters:
+ - baseExpr - expression representing the most basic element for the nested
+ - opList - list of tuples, one for each operator precedence level in the
+ expression grammar; each tuple is of the form
+ (opExpr, numTerms, rightLeftAssoc, parseAction), where:
+ - opExpr is the pyparsing expression for the operator;
+ may also be a string, which will be converted to a Literal;
+ if numTerms is 3, opExpr is a tuple of two expressions, for the
+ two operators separating the 3 terms
+ - numTerms is the number of terms for this operator (must
+ be 1, 2, or 3)
+ - rightLeftAssoc is the indicator whether the operator is
+ right or left associative, using the pyparsing-defined
+ constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}.
+ - parseAction is the parse action to be associated with
+ expressions matching this operator expression (the
+ parse action tuple member may be omitted); if the parse action
+ is passed a tuple or list of functions, this is equivalent to
+ calling C{setParseAction(*fn)} (L{ParserElement.setParseAction})
+ - lpar - expression for matching left-parentheses (default=C{Suppress('(')})
+ - rpar - expression for matching right-parentheses (default=C{Suppress(')')})
+
+ Example::
+ # simple example of four-function arithmetic with ints and variable names
+ integer = pyparsing_common.signed_integer
+ varname = pyparsing_common.identifier
+
+ arith_expr = infixNotation(integer | varname,
+ [
+ ('-', 1, opAssoc.RIGHT),
+ (oneOf('* /'), 2, opAssoc.LEFT),
+ (oneOf('+ -'), 2, opAssoc.LEFT),
+ ])
+
+ arith_expr.runTests('''
+ 5+3*6
+ (5+3)*6
+ -2--11
+ ''', fullDump=False)
+ prints::
+ 5+3*6
+ [[5, '+', [3, '*', 6]]]
+
+ (5+3)*6
+ [[[5, '+', 3], '*', 6]]
+
+ -2--11
+ [[['-', 2], '-', ['-', 11]]]
+ """
+ ret = Forward()
+ lastExpr = baseExpr | ( lpar + ret + rpar )
+ for i,operDef in enumerate(opList):
+ opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4]
+ termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr
+ if arity == 3:
+ if opExpr is None or len(opExpr) != 2:
+ raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions")
+ opExpr1, opExpr2 = opExpr
+ thisExpr = Forward().setName(termName)
+ if rightLeftAssoc == opAssoc.LEFT:
+ if arity == 1:
+ matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) )
+ elif arity == 2:
+ if opExpr is not None:
+ matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) )
+ else:
+ matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) )
+ elif arity == 3:
+ matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \
+ Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr )
+ else:
+ raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
+ elif rightLeftAssoc == opAssoc.RIGHT:
+ if arity == 1:
+ # try to avoid LR with this extra test
+ if not isinstance(opExpr, Optional):
+ opExpr = Optional(opExpr)
+ matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr )
+ elif arity == 2:
+ if opExpr is not None:
+ matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) )
+ else:
+ matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) )
+ elif arity == 3:
+ matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \
+ Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr )
+ else:
+ raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
+ else:
+ raise ValueError("operator must indicate right or left associativity")
+ if pa:
+ if isinstance(pa, (tuple, list)):
+ matchExpr.setParseAction(*pa)
+ else:
+ matchExpr.setParseAction(pa)
+ thisExpr <<= ( matchExpr.setName(termName) | lastExpr )
+ lastExpr = thisExpr
+ ret <<= lastExpr
+ return ret
+
+operatorPrecedence = infixNotation
+"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release."""
+
+dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes")
+sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes")
+quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'|
+ Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes")
+unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal")
+
+def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()):
+ """
+ Helper method for defining nested lists enclosed in opening and closing
+ delimiters ("(" and ")" are the default).
+
+ Parameters:
+ - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression
+ - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression
+ - content - expression for items within the nested lists (default=C{None})
+ - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString})
+
+ If an expression is not provided for the content argument, the nested
+ expression will capture all whitespace-delimited content between delimiters
+ as a list of separate values.
+
+ Use the C{ignoreExpr} argument to define expressions that may contain
+ opening or closing characters that should not be treated as opening
+ or closing characters for nesting, such as quotedString or a comment
+ expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}.
+ The default is L{quotedString}, but if no expressions are to be ignored,
+ then pass C{None} for this argument.
+
+ Example::
+ data_type = oneOf("void int short long char float double")
+ decl_data_type = Combine(data_type + Optional(Word('*')))
+ ident = Word(alphas+'_', alphanums+'_')
+ number = pyparsing_common.number
+ arg = Group(decl_data_type + ident)
+ LPAR,RPAR = map(Suppress, "()")
+
+ code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment))
+
+ c_function = (decl_data_type("type")
+ + ident("name")
+ + LPAR + Optional(delimitedList(arg), [])("args") + RPAR
+ + code_body("body"))
+ c_function.ignore(cStyleComment)
+
+ source_code = '''
+ int is_odd(int x) {
+ return (x%2);
+ }
+
+ int dec_to_hex(char hchar) {
+ if (hchar >= '0' && hchar <= '9') {
+ return (ord(hchar)-ord('0'));
+ } else {
+ return (10+ord(hchar)-ord('A'));
+ }
+ }
+ '''
+ for func in c_function.searchString(source_code):
+ print("%(name)s (%(type)s) args: %(args)s" % func)
+
+ prints::
+ is_odd (int) args: [['int', 'x']]
+ dec_to_hex (int) args: [['char', 'hchar']]
+ """
+ if opener == closer:
+ raise ValueError("opening and closing strings cannot be the same")
+ if content is None:
+ if isinstance(opener,basestring) and isinstance(closer,basestring):
+ if len(opener) == 1 and len(closer)==1:
+ if ignoreExpr is not None:
+ content = (Combine(OneOrMore(~ignoreExpr +
+ CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ if ignoreExpr is not None:
+ content = (Combine(OneOrMore(~ignoreExpr +
+ ~Literal(opener) + ~Literal(closer) +
+ CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) +
+ CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ raise ValueError("opening and closing arguments must be strings if no content expression is given")
+ ret = Forward()
+ if ignoreExpr is not None:
+ ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) )
+ else:
+ ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) )
+ ret.setName('nested %s%s expression' % (opener,closer))
+ return ret
+
+def indentedBlock(blockStatementExpr, indentStack, indent=True):
+ """
+ Helper method for defining space-delimited indentation blocks, such as
+ those used to define block statements in Python source code.
+
+ Parameters:
+ - blockStatementExpr - expression defining syntax of statement that
+ is repeated within the indented block
+ - indentStack - list created by caller to manage indentation stack
+ (multiple statementWithIndentedBlock expressions within a single grammar
+ should share a common indentStack)
+ - indent - boolean indicating whether block must be indented beyond the
+ the current level; set to False for block of left-most statements
+ (default=C{True})
+
+ A valid block must contain at least one C{blockStatement}.
+
+ Example::
+ data = '''
+ def A(z):
+ A1
+ B = 100
+ G = A2
+ A2
+ A3
+ B
+ def BB(a,b,c):
+ BB1
+ def BBA():
+ bba1
+ bba2
+ bba3
+ C
+ D
+ def spam(x,y):
+ def eggs(z):
+ pass
+ '''
+
+
+ indentStack = [1]
+ stmt = Forward()
+
+ identifier = Word(alphas, alphanums)
+ funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":")
+ func_body = indentedBlock(stmt, indentStack)
+ funcDef = Group( funcDecl + func_body )
+
+ rvalue = Forward()
+ funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")")
+ rvalue << (funcCall | identifier | Word(nums))
+ assignment = Group(identifier + "=" + rvalue)
+ stmt << ( funcDef | assignment | identifier )
+
+ module_body = OneOrMore(stmt)
+
+ parseTree = module_body.parseString(data)
+ parseTree.pprint()
+ prints::
+ [['def',
+ 'A',
+ ['(', 'z', ')'],
+ ':',
+ [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]],
+ 'B',
+ ['def',
+ 'BB',
+ ['(', 'a', 'b', 'c', ')'],
+ ':',
+ [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]],
+ 'C',
+ 'D',
+ ['def',
+ 'spam',
+ ['(', 'x', 'y', ')'],
+ ':',
+ [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]]
+ """
+ def checkPeerIndent(s,l,t):
+ if l >= len(s): return
+ curCol = col(l,s)
+ if curCol != indentStack[-1]:
+ if curCol > indentStack[-1]:
+ raise ParseFatalException(s,l,"illegal nesting")
+ raise ParseException(s,l,"not a peer entry")
+
+ def checkSubIndent(s,l,t):
+ curCol = col(l,s)
+ if curCol > indentStack[-1]:
+ indentStack.append( curCol )
+ else:
+ raise ParseException(s,l,"not a subentry")
+
+ def checkUnindent(s,l,t):
+ if l >= len(s): return
+ curCol = col(l,s)
+ if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]):
+ raise ParseException(s,l,"not an unindent")
+ indentStack.pop()
+
+ NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress())
+ INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT')
+ PEER = Empty().setParseAction(checkPeerIndent).setName('')
+ UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT')
+ if indent:
+ smExpr = Group( Optional(NL) +
+ #~ FollowedBy(blockStatementExpr) +
+ INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT)
+ else:
+ smExpr = Group( Optional(NL) +
+ (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) )
+ blockStatementExpr.ignore(_bslash + LineEnd())
+ return smExpr.setName('indented block')
+
+alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
+punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
+
+anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag'))
+_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\''))
+commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity")
+def replaceHTMLEntity(t):
+ """Helper parser action to replace common HTML entities with their special characters"""
+ return _htmlEntityMap.get(t.entity)
+
+# it's easy to get these comment structures wrong - they're very common, so may as well make them available
+cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment")
+"Comment of the form C{/* ... */}"
+
+htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment")
+"Comment of the form C{<!-- ... -->}"
+
+restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line")
+dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment")
+"Comment of the form C{// ... (to end of line)}"
+
+cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment")
+"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}"
+
+javaStyleComment = cppStyleComment
+"Same as C{L{cppStyleComment}}"
+
+pythonStyleComment = Regex(r"#.*").setName("Python style comment")
+"Comment of the form C{# ... (to end of line)}"
+
+_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') +
+ Optional( Word(" \t") +
+ ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem")
+commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList")
+"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas.
+ This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}."""
+
+# some other useful expressions - using lower-case class name since we are really using this as a namespace
+class pyparsing_common:
+ """
+ Here are some common low-level expressions that may be useful in jump-starting parser development:
+ - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>})
+ - common L{programming identifiers<identifier>}
+ - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>})
+ - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>}
+ - L{UUID<uuid>}
+ - L{comma-separated list<comma_separated_list>}
+ Parse actions:
+ - C{L{convertToInteger}}
+ - C{L{convertToFloat}}
+ - C{L{convertToDate}}
+ - C{L{convertToDatetime}}
+ - C{L{stripHTMLTags}}
+ - C{L{upcaseTokens}}
+ - C{L{downcaseTokens}}
+
+ Example::
+ pyparsing_common.number.runTests('''
+ # any int or real number, returned as the appropriate type
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ ''')
+
+ pyparsing_common.fnumber.runTests('''
+ # any int or real number, returned as float
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ ''')
+
+ pyparsing_common.hex_integer.runTests('''
+ # hex numbers
+ 100
+ FF
+ ''')
+
+ pyparsing_common.fraction.runTests('''
+ # fractions
+ 1/2
+ -3/4
+ ''')
+
+ pyparsing_common.mixed_integer.runTests('''
+ # mixed fractions
+ 1
+ 1/2
+ -3/4
+ 1-3/4
+ ''')
+
+ import uuid
+ pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
+ pyparsing_common.uuid.runTests('''
+ # uuid
+ 12345678-1234-5678-1234-567812345678
+ ''')
+ prints::
+ # any int or real number, returned as the appropriate type
+ 100
+ [100]
+
+ -100
+ [-100]
+
+ +100
+ [100]
+
+ 3.14159
+ [3.14159]
+
+ 6.02e23
+ [6.02e+23]
+
+ 1e-12
+ [1e-12]
+
+ # any int or real number, returned as float
+ 100
+ [100.0]
+
+ -100
+ [-100.0]
+
+ +100
+ [100.0]
+
+ 3.14159
+ [3.14159]
+
+ 6.02e23
+ [6.02e+23]
+
+ 1e-12
+ [1e-12]
+
+ # hex numbers
+ 100
+ [256]
+
+ FF
+ [255]
+
+ # fractions
+ 1/2
+ [0.5]
+
+ -3/4
+ [-0.75]
+
+ # mixed fractions
+ 1
+ [1]
+
+ 1/2
+ [0.5]
+
+ -3/4
+ [-0.75]
+
+ 1-3/4
+ [1.75]
+
+ # uuid
+ 12345678-1234-5678-1234-567812345678
+ [UUID('12345678-1234-5678-1234-567812345678')]
+ """
+
+ convertToInteger = tokenMap(int)
+ """
+ Parse action for converting parsed integers to Python int
+ """
+
+ convertToFloat = tokenMap(float)
+ """
+ Parse action for converting parsed numbers to Python float
+ """
+
+ integer = Word(nums).setName("integer").setParseAction(convertToInteger)
+ """expression that parses an unsigned integer, returns an int"""
+
+ hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16))
+ """expression that parses a hexadecimal integer, returns an int"""
+
+ signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger)
+ """expression that parses an integer with optional leading sign, returns an int"""
+
+ fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction")
+ """fractional expression of an integer divided by an integer, returns a float"""
+ fraction.addParseAction(lambda t: t[0]/t[-1])
+
+ mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction")
+ """mixed integer of the form 'integer - fraction', with optional leading integer, returns float"""
+ mixed_integer.addParseAction(sum)
+
+ real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat)
+ """expression that parses a floating point number and returns a float"""
+
+ sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat)
+ """expression that parses a floating point number with optional scientific notation and returns a float"""
+
+ # streamlining this expression makes the docs nicer-looking
+ number = (sci_real | real | signed_integer).streamline()
+ """any numeric expression, returns the corresponding Python type"""
+
+ fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat)
+ """any int or real number, returned as float"""
+
+ identifier = Word(alphas+'_', alphanums+'_').setName("identifier")
+ """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')"""
+
+ ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address")
+ "IPv4 address (C{0.0.0.0 - 255.255.255.255})"
+
+ _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer")
+ _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address")
+ _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address")
+ _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8)
+ _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address")
+ ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address")
+ "IPv6 address (long, short, or mixed form)"
+
+ mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address")
+ "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)"
+
+ @staticmethod
+ def convertToDate(fmt="%Y-%m-%d"):
+ """
+ Helper to create a parse action for converting parsed date string to Python datetime.date
+
+ Params -
+ - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"})
+
+ Example::
+ date_expr = pyparsing_common.iso8601_date.copy()
+ date_expr.setParseAction(pyparsing_common.convertToDate())
+ print(date_expr.parseString("1999-12-31"))
+ prints::
+ [datetime.date(1999, 12, 31)]
+ """
+ def cvt_fn(s,l,t):
+ try:
+ return datetime.strptime(t[0], fmt).date()
+ except ValueError as ve:
+ raise ParseException(s, l, str(ve))
+ return cvt_fn
+
+ @staticmethod
+ def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"):
+ """
+ Helper to create a parse action for converting parsed datetime string to Python datetime.datetime
+
+ Params -
+ - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"})
+
+ Example::
+ dt_expr = pyparsing_common.iso8601_datetime.copy()
+ dt_expr.setParseAction(pyparsing_common.convertToDatetime())
+ print(dt_expr.parseString("1999-12-31T23:59:59.999"))
+ prints::
+ [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)]
+ """
+ def cvt_fn(s,l,t):
+ try:
+ return datetime.strptime(t[0], fmt)
+ except ValueError as ve:
+ raise ParseException(s, l, str(ve))
+ return cvt_fn
+
+ iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date")
+ "ISO8601 date (C{yyyy-mm-dd})"
+
+ iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime")
+ "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}"
+
+ uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID")
+ "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})"
+
+ _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress()
+ @staticmethod
+ def stripHTMLTags(s, l, tokens):
+ """
+ Parse action to remove HTML tags from web page HTML source
+
+ Example::
+ # strip HTML links from normal text
+ text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
+ td,td_end = makeHTMLTags("TD")
+ table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end
+
+ print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page'
+ """
+ return pyparsing_common._html_stripper.transformString(tokens[0])
+
+ _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',')
+ + Optional( White(" \t") ) ) ).streamline().setName("commaItem")
+ comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list")
+ """Predefined expression of 1 or more printable words or quoted strings, separated by commas."""
+
+ upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper()))
+ """Parse action to convert tokens to upper case."""
+
+ downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower()))
+ """Parse action to convert tokens to lower case."""
+
+
+if __name__ == "__main__":
+
+ selectToken = CaselessLiteral("select")
+ fromToken = CaselessLiteral("from")
+
+ ident = Word(alphas, alphanums + "_$")
+
+ columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
+ columnNameList = Group(delimitedList(columnName)).setName("columns")
+ columnSpec = ('*' | columnNameList)
+
+ tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
+ tableNameList = Group(delimitedList(tableName)).setName("tables")
+
+ simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables")
+
+ # demo runTests method, including embedded comments in test string
+ simpleSQL.runTests("""
+ # '*' as column list and dotted table name
+ select * from SYS.XYZZY
+
+ # caseless match on "SELECT", and casts back to "select"
+ SELECT * from XYZZY, ABC
+
+ # list of column names, and mixed case SELECT keyword
+ Select AA,BB,CC from Sys.dual
+
+ # multiple tables
+ Select A, B, C from Sys.dual, Table2
+
+ # invalid SELECT keyword - should fail
+ Xelect A, B, C from Sys.dual
+
+ # incomplete command - should fail
+ Select
+
+ # invalid column name - should fail
+ Select ^^^ frox Sys.dual
+
+ """)
+
+ pyparsing_common.number.runTests("""
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ """)
+
+ # any int or real number, returned as float
+ pyparsing_common.fnumber.runTests("""
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ """)
+
+ pyparsing_common.hex_integer.runTests("""
+ 100
+ FF
+ """)
+
+ import uuid
+ pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
+ pyparsing_common.uuid.runTests("""
+ 12345678-1234-5678-1234-567812345678
+ """)
diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/pyparsing.py b/contrib/python/setuptools/py3/setuptools/_vendor/pyparsing.py
index 4aa30ee6b2..cf75e1e5fc 100644
--- a/contrib/python/setuptools/py3/setuptools/_vendor/pyparsing.py
+++ b/contrib/python/setuptools/py3/setuptools/_vendor/pyparsing.py
@@ -1,5742 +1,5742 @@
-# module pyparsing.py
-#
-# Copyright (c) 2003-2018 Paul T. McGuire
-#
-# 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__doc__ = \
-"""
-pyparsing module - Classes and methods to define and execute parsing grammars
-=============================================================================
-
-The pyparsing module is an alternative approach to creating and executing simple grammars,
-vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you
-don't need to learn a new syntax for defining grammars or matching expressions - the parsing module
-provides a library of classes that you use to construct the grammar directly in Python.
-
-Here is a program to parse "Hello, World!" (or any greeting of the form
-C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements
-(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to
-L{Literal} expressions)::
-
- from pyparsing import Word, alphas
-
- # define grammar of a greeting
- greet = Word(alphas) + "," + Word(alphas) + "!"
-
- hello = "Hello, World!"
- print (hello, "->", greet.parseString(hello))
-
-The program outputs the following::
-
- Hello, World! -> ['Hello', ',', 'World', '!']
-
-The Python representation of the grammar is quite readable, owing to the self-explanatory
-class names, and the use of '+', '|' and '^' operators.
-
-The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an
-object with named attributes.
-
-The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
- - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.)
- - quoted strings
- - embedded comments
-
-
-Getting Started -
------------------
-Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing
-classes inherit from. Use the docstrings for examples of how to:
- - construct literal match expressions from L{Literal} and L{CaselessLiteral} classes
- - construct character word-group expressions using the L{Word} class
- - see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes
- - use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones
- - associate names with your parsed results using L{ParserElement.setResultsName}
- - find some helpful expression short-cuts like L{delimitedList} and L{oneOf}
- - find more useful common expressions in the L{pyparsing_common} namespace class
-"""
-
-__version__ = "2.2.1"
-__versionTime__ = "18 Sep 2018 00:49 UTC"
-__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>"
-
-import string
-from weakref import ref as wkref
-import copy
-import sys
-import warnings
-import re
-import sre_constants
-import collections
-import pprint
-import traceback
-import types
-from datetime import datetime
-
-try:
- from _thread import RLock
-except ImportError:
- from threading import RLock
-
-try:
- # Python 3
- from collections.abc import Iterable
- from collections.abc import MutableMapping
-except ImportError:
- # Python 2.7
- from collections import Iterable
- from collections import MutableMapping
-
-try:
- from collections import OrderedDict as _OrderedDict
-except ImportError:
- try:
- from ordereddict import OrderedDict as _OrderedDict
- except ImportError:
- _OrderedDict = None
-
-#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) )
-
-__all__ = [
-'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty',
-'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal',
-'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or',
-'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException',
-'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException',
-'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter',
-'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore',
-'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col',
-'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString',
-'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums',
-'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno',
-'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral',
-'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables',
-'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity',
-'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd',
-'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute',
-'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass',
-'CloseMatch', 'tokenMap', 'pyparsing_common',
-]
-
-system_version = tuple(sys.version_info)[:3]
-PY_3 = system_version[0] == 3
-if PY_3:
- _MAX_INT = sys.maxsize
- basestring = str
- unichr = chr
- _ustr = str
-
- # build list of single arg builtins, that can be used as parse actions
- singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max]
-
-else:
- _MAX_INT = sys.maxint
- range = xrange
-
- def _ustr(obj):
- """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
- str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
- then < returns the unicode object | encodes it with the default encoding | ... >.
- """
- if isinstance(obj,unicode):
- return obj
-
- try:
- # If this works, then _ustr(obj) has the same behaviour as str(obj), so
- # it won't break any existing code.
- return str(obj)
-
- except UnicodeEncodeError:
- # Else encode it
- ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace')
- xmlcharref = Regex(r'&#\d+;')
- xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:])
- return xmlcharref.transformString(ret)
-
- # build list of single arg builtins, tolerant of Python version, that can be used as parse actions
- singleArgBuiltins = []
- import __builtin__
- for fname in "sum len sorted reversed list tuple set any all min max".split():
- try:
- singleArgBuiltins.append(getattr(__builtin__,fname))
- except AttributeError:
- continue
-
-_generatorType = type((y for y in range(1)))
-
-def _xml_escape(data):
- """Escape &, <, >, ", ', etc. in a string of data."""
-
- # ampersand must be replaced first
- from_symbols = '&><"\''
- to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split())
- for from_,to_ in zip(from_symbols, to_symbols):
- data = data.replace(from_, to_)
- return data
-
-class _Constants(object):
- pass
-
-alphas = string.ascii_uppercase + string.ascii_lowercase
-nums = "0123456789"
-hexnums = nums + "ABCDEFabcdef"
-alphanums = alphas + nums
-_bslash = chr(92)
-printables = "".join(c for c in string.printable if c not in string.whitespace)
-
-class ParseBaseException(Exception):
- """base exception class for all parsing runtime exceptions"""
- # Performance tuning: we construct a *lot* of these, so keep this
- # constructor as small and fast as possible
- def __init__( self, pstr, loc=0, msg=None, elem=None ):
- self.loc = loc
- if msg is None:
- self.msg = pstr
- self.pstr = ""
- else:
- self.msg = msg
- self.pstr = pstr
- self.parserElement = elem
- self.args = (pstr, loc, msg)
-
- @classmethod
- def _from_exception(cls, pe):
- """
- internal factory method to simplify creating one type of ParseException
- from another - avoids having __init__ signature conflicts among subclasses
- """
- return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement)
-
- def __getattr__( self, aname ):
- """supported attributes by name are:
- - lineno - returns the line number of the exception text
- - col - returns the column number of the exception text
- - line - returns the line containing the exception text
- """
- if( aname == "lineno" ):
- return lineno( self.loc, self.pstr )
- elif( aname in ("col", "column") ):
- return col( self.loc, self.pstr )
- elif( aname == "line" ):
- return line( self.loc, self.pstr )
- else:
- raise AttributeError(aname)
-
- def __str__( self ):
- return "%s (at char %d), (line:%d, col:%d)" % \
- ( self.msg, self.loc, self.lineno, self.column )
- def __repr__( self ):
- return _ustr(self)
- def markInputline( self, markerString = ">!<" ):
- """Extracts the exception line from the input string, and marks
- the location of the exception with a special symbol.
- """
- line_str = self.line
- line_column = self.column - 1
- if markerString:
- line_str = "".join((line_str[:line_column],
- markerString, line_str[line_column:]))
- return line_str.strip()
- def __dir__(self):
- return "lineno col line".split() + dir(type(self))
-
-class ParseException(ParseBaseException):
- """
- Exception thrown when parse expressions don't match class;
- supported attributes by name are:
- - lineno - returns the line number of the exception text
- - col - returns the column number of the exception text
- - line - returns the line containing the exception text
-
- Example::
- try:
- Word(nums).setName("integer").parseString("ABC")
- except ParseException as pe:
- print(pe)
- print("column: {}".format(pe.col))
-
- prints::
- Expected integer (at char 0), (line:1, col:1)
- column: 1
- """
- pass
-
-class ParseFatalException(ParseBaseException):
- """user-throwable exception thrown when inconsistent parse content
- is found; stops all parsing immediately"""
- pass
-
-class ParseSyntaxException(ParseFatalException):
- """just like L{ParseFatalException}, but thrown internally when an
- L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop
- immediately because an unbacktrackable syntax error has been found"""
- pass
-
-#~ class ReparseException(ParseBaseException):
- #~ """Experimental class - parse actions can raise this exception to cause
- #~ pyparsing to reparse the input string:
- #~ - with a modified input string, and/or
- #~ - with a modified start location
- #~ Set the values of the ReparseException in the constructor, and raise the
- #~ exception in a parse action to cause pyparsing to use the new string/location.
- #~ Setting the values as None causes no change to be made.
- #~ """
- #~ def __init_( self, newstring, restartLoc ):
- #~ self.newParseText = newstring
- #~ self.reparseLoc = restartLoc
-
-class RecursiveGrammarException(Exception):
- """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive"""
- def __init__( self, parseElementList ):
- self.parseElementTrace = parseElementList
-
- def __str__( self ):
- return "RecursiveGrammarException: %s" % self.parseElementTrace
-
-class _ParseResultsWithOffset(object):
- def __init__(self,p1,p2):
- self.tup = (p1,p2)
- def __getitem__(self,i):
- return self.tup[i]
- def __repr__(self):
- return repr(self.tup[0])
- def setOffset(self,i):
- self.tup = (self.tup[0],i)
-
-class ParseResults(object):
- """
- Structured parse results, to provide multiple means of access to the parsed data:
- - as a list (C{len(results)})
- - by list index (C{results[0], results[1]}, etc.)
- - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName})
-
- Example::
- integer = Word(nums)
- date_str = (integer.setResultsName("year") + '/'
- + integer.setResultsName("month") + '/'
- + integer.setResultsName("day"))
- # equivalent form:
- # date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- # parseString returns a ParseResults object
- result = date_str.parseString("1999/12/31")
-
- def test(s, fn=repr):
- print("%s -> %s" % (s, fn(eval(s))))
- test("list(result)")
- test("result[0]")
- test("result['month']")
- test("result.day")
- test("'month' in result")
- test("'minutes' in result")
- test("result.dump()", str)
- prints::
- list(result) -> ['1999', '/', '12', '/', '31']
- result[0] -> '1999'
- result['month'] -> '12'
- result.day -> '31'
- 'month' in result -> True
- 'minutes' in result -> False
- result.dump() -> ['1999', '/', '12', '/', '31']
- - day: 31
- - month: 12
- - year: 1999
- """
- def __new__(cls, toklist=None, name=None, asList=True, modal=True ):
- if isinstance(toklist, cls):
- return toklist
- retobj = object.__new__(cls)
- retobj.__doinit = True
- return retobj
-
- # Performance tuning: we construct a *lot* of these, so keep this
- # constructor as small and fast as possible
- def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ):
- if self.__doinit:
- self.__doinit = False
- self.__name = None
- self.__parent = None
- self.__accumNames = {}
- self.__asList = asList
- self.__modal = modal
- if toklist is None:
- toklist = []
- if isinstance(toklist, list):
- self.__toklist = toklist[:]
- elif isinstance(toklist, _generatorType):
- self.__toklist = list(toklist)
- else:
- self.__toklist = [toklist]
- self.__tokdict = dict()
-
- if name is not None and name:
- if not modal:
- self.__accumNames[name] = 0
- if isinstance(name,int):
- name = _ustr(name) # will always return a str, but use _ustr for consistency
- self.__name = name
- if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])):
- if isinstance(toklist,basestring):
- toklist = [ toklist ]
- if asList:
- if isinstance(toklist,ParseResults):
- self[name] = _ParseResultsWithOffset(toklist.copy(),0)
- else:
- self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0)
- self[name].__name = name
- else:
- try:
- self[name] = toklist[0]
- except (KeyError,TypeError,IndexError):
- self[name] = toklist
-
- def __getitem__( self, i ):
- if isinstance( i, (int,slice) ):
- return self.__toklist[i]
- else:
- if i not in self.__accumNames:
- return self.__tokdict[i][-1][0]
- else:
- return ParseResults([ v[0] for v in self.__tokdict[i] ])
-
- def __setitem__( self, k, v, isinstance=isinstance ):
- if isinstance(v,_ParseResultsWithOffset):
- self.__tokdict[k] = self.__tokdict.get(k,list()) + [v]
- sub = v[0]
- elif isinstance(k,(int,slice)):
- self.__toklist[k] = v
- sub = v
- else:
- self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)]
- sub = v
- if isinstance(sub,ParseResults):
- sub.__parent = wkref(self)
-
- def __delitem__( self, i ):
- if isinstance(i,(int,slice)):
- mylen = len( self.__toklist )
- del self.__toklist[i]
-
- # convert int to slice
- if isinstance(i, int):
- if i < 0:
- i += mylen
- i = slice(i, i+1)
- # get removed indices
- removed = list(range(*i.indices(mylen)))
- removed.reverse()
- # fixup indices in token dictionary
- for name,occurrences in self.__tokdict.items():
- for j in removed:
- for k, (value, position) in enumerate(occurrences):
- occurrences[k] = _ParseResultsWithOffset(value, position - (position > j))
- else:
- del self.__tokdict[i]
-
- def __contains__( self, k ):
- return k in self.__tokdict
-
- def __len__( self ): return len( self.__toklist )
- def __bool__(self): return ( not not self.__toklist )
- __nonzero__ = __bool__
- def __iter__( self ): return iter( self.__toklist )
- def __reversed__( self ): return iter( self.__toklist[::-1] )
- def _iterkeys( self ):
- if hasattr(self.__tokdict, "iterkeys"):
- return self.__tokdict.iterkeys()
- else:
- return iter(self.__tokdict)
-
- def _itervalues( self ):
- return (self[k] for k in self._iterkeys())
-
- def _iteritems( self ):
- return ((k, self[k]) for k in self._iterkeys())
-
- if PY_3:
- keys = _iterkeys
- """Returns an iterator of all named result keys (Python 3.x only)."""
-
- values = _itervalues
- """Returns an iterator of all named result values (Python 3.x only)."""
-
- items = _iteritems
- """Returns an iterator of all named result key-value tuples (Python 3.x only)."""
-
- else:
- iterkeys = _iterkeys
- """Returns an iterator of all named result keys (Python 2.x only)."""
-
- itervalues = _itervalues
- """Returns an iterator of all named result values (Python 2.x only)."""
-
- iteritems = _iteritems
- """Returns an iterator of all named result key-value tuples (Python 2.x only)."""
-
- def keys( self ):
- """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.iterkeys())
-
- def values( self ):
- """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.itervalues())
-
- def items( self ):
- """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x)."""
- return list(self.iteritems())
-
- def haskeys( self ):
- """Since keys() returns an iterator, this method is helpful in bypassing
- code that looks for the existence of any defined results names."""
- return bool(self.__tokdict)
-
- def pop( self, *args, **kwargs):
- """
- Removes and returns item at specified index (default=C{last}).
- Supports both C{list} and C{dict} semantics for C{pop()}. If passed no
- argument or an integer argument, it will use C{list} semantics
- and pop tokens from the list of parsed tokens. If passed a
- non-integer argument (most likely a string), it will use C{dict}
- semantics and pop the corresponding value from any defined
- results names. A second default return value argument is
- supported, just as in C{dict.pop()}.
-
- Example::
- def remove_first(tokens):
- tokens.pop(0)
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
- print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321']
-
- label = Word(alphas)
- patt = label("LABEL") + OneOrMore(Word(nums))
- print(patt.parseString("AAB 123 321").dump())
-
- # Use pop() in a parse action to remove named result (note that corresponding value is not
- # removed from list form of results)
- def remove_LABEL(tokens):
- tokens.pop("LABEL")
- return tokens
- patt.addParseAction(remove_LABEL)
- print(patt.parseString("AAB 123 321").dump())
- prints::
- ['AAB', '123', '321']
- - LABEL: AAB
-
- ['AAB', '123', '321']
- """
- if not args:
- args = [-1]
- for k,v in kwargs.items():
- if k == 'default':
- args = (args[0], v)
- else:
- raise TypeError("pop() got an unexpected keyword argument '%s'" % k)
- if (isinstance(args[0], int) or
- len(args) == 1 or
- args[0] in self):
- index = args[0]
- ret = self[index]
- del self[index]
- return ret
- else:
- defaultvalue = args[1]
- return defaultvalue
-
- def get(self, key, defaultValue=None):
- """
- Returns named result matching the given key, or if there is no
- such name, then returns the given C{defaultValue} or C{None} if no
- C{defaultValue} is specified.
-
- Similar to C{dict.get()}.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString("1999/12/31")
- print(result.get("year")) # -> '1999'
- print(result.get("hour", "not specified")) # -> 'not specified'
- print(result.get("hour")) # -> None
- """
- if key in self:
- return self[key]
- else:
- return defaultValue
-
- def insert( self, index, insStr ):
- """
- Inserts new element at location index in the list of parsed tokens.
-
- Similar to C{list.insert()}.
-
- Example::
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
-
- # use a parse action to insert the parse location in the front of the parsed results
- def insert_locn(locn, tokens):
- tokens.insert(0, locn)
- print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321']
- """
- self.__toklist.insert(index, insStr)
- # fixup indices in token dictionary
- for name,occurrences in self.__tokdict.items():
- for k, (value, position) in enumerate(occurrences):
- occurrences[k] = _ParseResultsWithOffset(value, position + (position > index))
-
- def append( self, item ):
- """
- Add single element to end of ParseResults list of elements.
-
- Example::
- print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
-
- # use a parse action to compute the sum of the parsed integers, and add it to the end
- def append_sum(tokens):
- tokens.append(sum(map(int, tokens)))
- print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444]
- """
- self.__toklist.append(item)
-
- def extend( self, itemseq ):
- """
- Add sequence of elements to end of ParseResults list of elements.
-
- Example::
- patt = OneOrMore(Word(alphas))
-
- # use a parse action to append the reverse of the matched strings, to make a palindrome
- def make_palindrome(tokens):
- tokens.extend(reversed([t[::-1] for t in tokens]))
- return ''.join(tokens)
- print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl'
- """
- if isinstance(itemseq, ParseResults):
- self += itemseq
- else:
- self.__toklist.extend(itemseq)
-
- def clear( self ):
- """
- Clear all elements and results names.
- """
- del self.__toklist[:]
- self.__tokdict.clear()
-
- def __getattr__( self, name ):
- try:
- return self[name]
- except KeyError:
- return ""
-
- if name in self.__tokdict:
- if name not in self.__accumNames:
- return self.__tokdict[name][-1][0]
- else:
- return ParseResults([ v[0] for v in self.__tokdict[name] ])
- else:
- return ""
-
- def __add__( self, other ):
- ret = self.copy()
- ret += other
- return ret
-
- def __iadd__( self, other ):
- if other.__tokdict:
- offset = len(self.__toklist)
- addoffset = lambda a: offset if a<0 else a+offset
- otheritems = other.__tokdict.items()
- otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) )
- for (k,vlist) in otheritems for v in vlist]
- for k,v in otherdictitems:
- self[k] = v
- if isinstance(v[0],ParseResults):
- v[0].__parent = wkref(self)
-
- self.__toklist += other.__toklist
- self.__accumNames.update( other.__accumNames )
- return self
-
- def __radd__(self, other):
- if isinstance(other,int) and other == 0:
- # useful for merging many ParseResults using sum() builtin
- return self.copy()
- else:
- # this may raise a TypeError - so be it
- return other + self
-
- def __repr__( self ):
- return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) )
-
- def __str__( self ):
- return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']'
-
- def _asStringList( self, sep='' ):
- out = []
- for item in self.__toklist:
- if out and sep:
- out.append(sep)
- if isinstance( item, ParseResults ):
- out += item._asStringList()
- else:
- out.append( _ustr(item) )
- return out
-
- def asList( self ):
- """
- Returns the parse results as a nested list of matching tokens, all converted to strings.
-
- Example::
- patt = OneOrMore(Word(alphas))
- result = patt.parseString("sldkj lsdkj sldkj")
- # even though the result prints in string-like form, it is actually a pyparsing ParseResults
- print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj']
-
- # Use asList() to create an actual list
- result_list = result.asList()
- print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj']
- """
- return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist]
-
- def asDict( self ):
- """
- Returns the named parse results as a nested dictionary.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString('12/31/1999')
- print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]})
-
- result_dict = result.asDict()
- print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'}
-
- # even though a ParseResults supports dict-like access, sometime you just need to have a dict
- import json
- print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable
- print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"}
- """
- if PY_3:
- item_fn = self.items
- else:
- item_fn = self.iteritems
-
- def toItem(obj):
- if isinstance(obj, ParseResults):
- if obj.haskeys():
- return obj.asDict()
- else:
- return [toItem(v) for v in obj]
- else:
- return obj
-
- return dict((k,toItem(v)) for k,v in item_fn())
-
- def copy( self ):
- """
- Returns a new copy of a C{ParseResults} object.
- """
- ret = ParseResults( self.__toklist )
- ret.__tokdict = self.__tokdict.copy()
- ret.__parent = self.__parent
- ret.__accumNames.update( self.__accumNames )
- ret.__name = self.__name
- return ret
-
- def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ):
- """
- (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names.
- """
- nl = "\n"
- out = []
- namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items()
- for v in vlist)
- nextLevelIndent = indent + " "
-
- # collapse out indents if formatting is not desired
- if not formatted:
- indent = ""
- nextLevelIndent = ""
- nl = ""
-
- selfTag = None
- if doctag is not None:
- selfTag = doctag
- else:
- if self.__name:
- selfTag = self.__name
-
- if not selfTag:
- if namedItemsOnly:
- return ""
- else:
- selfTag = "ITEM"
-
- out += [ nl, indent, "<", selfTag, ">" ]
-
- for i,res in enumerate(self.__toklist):
- if isinstance(res,ParseResults):
- if i in namedItems:
- out += [ res.asXML(namedItems[i],
- namedItemsOnly and doctag is None,
- nextLevelIndent,
- formatted)]
- else:
- out += [ res.asXML(None,
- namedItemsOnly and doctag is None,
- nextLevelIndent,
- formatted)]
- else:
- # individual token, see if there is a name for it
- resTag = None
- if i in namedItems:
- resTag = namedItems[i]
- if not resTag:
- if namedItemsOnly:
- continue
- else:
- resTag = "ITEM"
- xmlBodyText = _xml_escape(_ustr(res))
- out += [ nl, nextLevelIndent, "<", resTag, ">",
- xmlBodyText,
- "</", resTag, ">" ]
-
- out += [ nl, indent, "</", selfTag, ">" ]
- return "".join(out)
-
- def __lookup(self,sub):
- for k,vlist in self.__tokdict.items():
- for v,loc in vlist:
- if sub is v:
- return k
- return None
-
- def getName(self):
- r"""
- Returns the results name for this token expression. Useful when several
- different expressions might match at a particular location.
-
- Example::
- integer = Word(nums)
- ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d")
- house_number_expr = Suppress('#') + Word(nums, alphanums)
- user_data = (Group(house_number_expr)("house_number")
- | Group(ssn_expr)("ssn")
- | Group(integer)("age"))
- user_info = OneOrMore(user_data)
-
- result = user_info.parseString("22 111-22-3333 #221B")
- for item in result:
- print(item.getName(), ':', item[0])
- prints::
- age : 22
- ssn : 111-22-3333
- house_number : 221B
- """
- if self.__name:
- return self.__name
- elif self.__parent:
- par = self.__parent()
- if par:
- return par.__lookup(self)
- else:
- return None
- elif (len(self) == 1 and
- len(self.__tokdict) == 1 and
- next(iter(self.__tokdict.values()))[0][1] in (0,-1)):
- return next(iter(self.__tokdict.keys()))
- else:
- return None
-
- def dump(self, indent='', depth=0, full=True):
- """
- Diagnostic method for listing out the contents of a C{ParseResults}.
- Accepts an optional C{indent} argument so that this string can be embedded
- in a nested display of other data.
-
- Example::
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- result = date_str.parseString('12/31/1999')
- print(result.dump())
- prints::
- ['12', '/', '31', '/', '1999']
- - day: 1999
- - month: 31
- - year: 12
- """
- out = []
- NL = '\n'
- out.append( indent+_ustr(self.asList()) )
- if full:
- if self.haskeys():
- items = sorted((str(k), v) for k,v in self.items())
- for k,v in items:
- if out:
- out.append(NL)
- out.append( "%s%s- %s: " % (indent,(' '*depth), k) )
- if isinstance(v,ParseResults):
- if v:
- out.append( v.dump(indent,depth+1) )
- else:
- out.append(_ustr(v))
- else:
- out.append(repr(v))
- elif any(isinstance(vv,ParseResults) for vv in self):
- v = self
- for i,vv in enumerate(v):
- if isinstance(vv,ParseResults):
- out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) ))
- else:
- out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv)))
-
- return "".join(out)
-
- def pprint(self, *args, **kwargs):
- """
- Pretty-printer for parsed results as a list, using the C{pprint} module.
- Accepts additional positional or keyword args as defined for the
- C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint})
-
- Example::
- ident = Word(alphas, alphanums)
- num = Word(nums)
- func = Forward()
- term = ident | num | Group('(' + func + ')')
- func <<= ident + Group(Optional(delimitedList(term)))
- result = func.parseString("fna a,b,(fnb c,d,200),100")
- result.pprint(width=40)
- prints::
- ['fna',
- ['a',
- 'b',
- ['(', 'fnb', ['c', 'd', '200'], ')'],
- '100']]
- """
- pprint.pprint(self.asList(), *args, **kwargs)
-
- # add support for pickle protocol
- def __getstate__(self):
- return ( self.__toklist,
- ( self.__tokdict.copy(),
- self.__parent is not None and self.__parent() or None,
- self.__accumNames,
- self.__name ) )
-
- def __setstate__(self,state):
- self.__toklist = state[0]
- (self.__tokdict,
- par,
- inAccumNames,
- self.__name) = state[1]
- self.__accumNames = {}
- self.__accumNames.update(inAccumNames)
- if par is not None:
- self.__parent = wkref(par)
- else:
- self.__parent = None
-
- def __getnewargs__(self):
- return self.__toklist, self.__name, self.__asList, self.__modal
-
- def __dir__(self):
- return (dir(type(self)) + list(self.keys()))
-
-MutableMapping.register(ParseResults)
-
-def col (loc,strg):
- """Returns current column within a string, counting newlines as line separators.
- The first column is number 1.
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
- """
- s = strg
- return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc)
-
-def lineno(loc,strg):
- """Returns current line number within a string, counting newlines as line separators.
- The first line is number 1.
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
- """
- return strg.count("\n",0,loc) + 1
-
-def line( loc, strg ):
- """Returns the line of text containing loc within a string, counting newlines as line separators.
- """
- lastCR = strg.rfind("\n", 0, loc)
- nextCR = strg.find("\n", loc)
- if nextCR >= 0:
- return strg[lastCR+1:nextCR]
- else:
- return strg[lastCR+1:]
-
-def _defaultStartDebugAction( instring, loc, expr ):
- print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )))
-
-def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ):
- print ("Matched " + _ustr(expr) + " -> " + str(toks.asList()))
-
-def _defaultExceptionDebugAction( instring, loc, expr, exc ):
- print ("Exception raised:" + _ustr(exc))
-
-def nullDebugAction(*args):
- """'Do-nothing' debug action, to suppress debugging output during parsing."""
- pass
-
-# Only works on Python 3.x - nonlocal is toxic to Python 2 installs
-#~ 'decorator to trim function calls to match the arity of the target'
-#~ def _trim_arity(func, maxargs=3):
- #~ if func in singleArgBuiltins:
- #~ return lambda s,l,t: func(t)
- #~ limit = 0
- #~ foundArity = False
- #~ def wrapper(*args):
- #~ nonlocal limit,foundArity
- #~ while 1:
- #~ try:
- #~ ret = func(*args[limit:])
- #~ foundArity = True
- #~ return ret
- #~ except TypeError:
- #~ if limit == maxargs or foundArity:
- #~ raise
- #~ limit += 1
- #~ continue
- #~ return wrapper
-
-# this version is Python 2.x-3.x cross-compatible
-'decorator to trim function calls to match the arity of the target'
-def _trim_arity(func, maxargs=2):
- if func in singleArgBuiltins:
- return lambda s,l,t: func(t)
- limit = [0]
- foundArity = [False]
-
- # traceback return data structure changed in Py3.5 - normalize back to plain tuples
- if system_version[:2] >= (3,5):
- def extract_stack(limit=0):
- # special handling for Python 3.5.0 - extra deep call stack by 1
- offset = -3 if system_version == (3,5,0) else -2
- frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset]
- return [frame_summary[:2]]
- def extract_tb(tb, limit=0):
- frames = traceback.extract_tb(tb, limit=limit)
- frame_summary = frames[-1]
- return [frame_summary[:2]]
- else:
- extract_stack = traceback.extract_stack
- extract_tb = traceback.extract_tb
-
- # synthesize what would be returned by traceback.extract_stack at the call to
- # user's parse action 'func', so that we don't incur call penalty at parse time
-
- LINE_DIFF = 6
- # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND
- # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!!
- this_line = extract_stack(limit=2)[-1]
- pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF)
-
- def wrapper(*args):
- while 1:
- try:
- ret = func(*args[limit[0]:])
- foundArity[0] = True
- return ret
- except TypeError:
- # re-raise TypeErrors if they did not come from our arity testing
- if foundArity[0]:
- raise
- else:
- try:
- tb = sys.exc_info()[-1]
- if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth:
- raise
- finally:
- del tb
-
- if limit[0] <= maxargs:
- limit[0] += 1
- continue
- raise
-
- # copy func name to wrapper for sensible debug output
- func_name = "<parse action>"
- try:
- func_name = getattr(func, '__name__',
- getattr(func, '__class__').__name__)
- except Exception:
- func_name = str(func)
- wrapper.__name__ = func_name
-
- return wrapper
-
-class ParserElement(object):
- """Abstract base level parser element class."""
- DEFAULT_WHITE_CHARS = " \n\t\r"
- verbose_stacktrace = False
-
- @staticmethod
- def setDefaultWhitespaceChars( chars ):
- r"""
- Overrides the default whitespace chars
-
- Example::
- # default whitespace chars are space, <TAB> and newline
- OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl']
-
- # change to just treat newline as significant
- ParserElement.setDefaultWhitespaceChars(" \t")
- OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def']
- """
- ParserElement.DEFAULT_WHITE_CHARS = chars
-
- @staticmethod
- def inlineLiteralsUsing(cls):
- """
- Set class to be used for inclusion of string literals into a parser.
-
- Example::
- # default literal class used is Literal
- integer = Word(nums)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
-
-
- # change to Suppress
- ParserElement.inlineLiteralsUsing(Suppress)
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
-
- date_str.parseString("1999/12/31") # -> ['1999', '12', '31']
- """
- ParserElement._literalStringClass = cls
-
- def __init__( self, savelist=False ):
- self.parseAction = list()
- self.failAction = None
- #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall
- self.strRepr = None
- self.resultsName = None
- self.saveAsList = savelist
- self.skipWhitespace = True
- self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
- self.copyDefaultWhiteChars = True
- self.mayReturnEmpty = False # used when checking for left-recursion
- self.keepTabs = False
- self.ignoreExprs = list()
- self.debug = False
- self.streamlined = False
- self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index
- self.errmsg = ""
- self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all)
- self.debugActions = ( None, None, None ) #custom debug actions
- self.re = None
- self.callPreparse = True # used to avoid redundant calls to preParse
- self.callDuringTry = False
-
- def copy( self ):
- """
- Make a copy of this C{ParserElement}. Useful for defining different parse actions
- for the same parsing pattern, using copies of the original parse element.
-
- Example::
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K")
- integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
-
- print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M"))
- prints::
- [5120, 100, 655360, 268435456]
- Equivalent form of C{expr.copy()} is just C{expr()}::
- integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
- """
- cpy = copy.copy( self )
- cpy.parseAction = self.parseAction[:]
- cpy.ignoreExprs = self.ignoreExprs[:]
- if self.copyDefaultWhiteChars:
- cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
- return cpy
-
- def setName( self, name ):
- """
- Define name for this expression, makes debugging and exception messages clearer.
-
- Example::
- Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1)
- Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1)
- """
- self.name = name
- self.errmsg = "Expected " + self.name
- if hasattr(self,"exception"):
- self.exception.msg = self.errmsg
- return self
-
- def setResultsName( self, name, listAllMatches=False ):
- """
- Define name for referencing matching tokens as a nested attribute
- of the returned parse results.
- NOTE: this returns a *copy* of the original C{ParserElement} object;
- this is so that the client can define a basic element, such as an
- integer, and reference it in multiple places with different names.
-
- You can also set results names using the abbreviated syntax,
- C{expr("name")} in place of C{expr.setResultsName("name")} -
- see L{I{__call__}<__call__>}.
-
- Example::
- date_str = (integer.setResultsName("year") + '/'
- + integer.setResultsName("month") + '/'
- + integer.setResultsName("day"))
-
- # equivalent form:
- date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
- """
- newself = self.copy()
- if name.endswith("*"):
- name = name[:-1]
- listAllMatches=True
- newself.resultsName = name
- newself.modalResults = not listAllMatches
- return newself
-
- def setBreak(self,breakFlag = True):
- """Method to invoke the Python pdb debugger when this element is
- about to be parsed. Set C{breakFlag} to True to enable, False to
- disable.
- """
- if breakFlag:
- _parseMethod = self._parse
- def breaker(instring, loc, doActions=True, callPreParse=True):
- import pdb
- pdb.set_trace()
- return _parseMethod( instring, loc, doActions, callPreParse )
- breaker._originalParseMethod = _parseMethod
- self._parse = breaker
- else:
- if hasattr(self._parse,"_originalParseMethod"):
- self._parse = self._parse._originalParseMethod
- return self
-
- def setParseAction( self, *fns, **kwargs ):
- """
- Define one or more actions to perform when successfully matching parse element definition.
- Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)},
- C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where:
- - s = the original string being parsed (see note below)
- - loc = the location of the matching substring
- - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object
- If the functions in fns modify the tokens, they can return them as the return
- value from fn, and the modified list of tokens will replace the original.
- Otherwise, fn does not need to return any value.
-
- Optional keyword arguments:
- - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing
-
- Note: the default parsing behavior is to expand tabs in the input string
- before starting the parsing process. See L{I{parseString}<parseString>} for more information
- on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
- consistent view of the parsed string, the parse location, and line and column
- positions within the parsed string.
-
- Example::
- integer = Word(nums)
- date_str = integer + '/' + integer + '/' + integer
-
- date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
-
- # use parse action to convert to ints at parse time
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- date_str = integer + '/' + integer + '/' + integer
-
- # note that integer fields are now ints, not strings
- date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31]
- """
- self.parseAction = list(map(_trim_arity, list(fns)))
- self.callDuringTry = kwargs.get("callDuringTry", False)
- return self
-
- def addParseAction( self, *fns, **kwargs ):
- """
- Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}.
-
- See examples in L{I{copy}<copy>}.
- """
- self.parseAction += list(map(_trim_arity, list(fns)))
- self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
- return self
-
- def addCondition(self, *fns, **kwargs):
- """Add a boolean predicate function to expression's list of parse actions. See
- L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction},
- functions passed to C{addCondition} need to return boolean success/fail of the condition.
-
- Optional keyword arguments:
- - message = define a custom message to be used in the raised exception
- - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException
-
- Example::
- integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
- year_int = integer.copy()
- year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later")
- date_str = year_int + '/' + integer + '/' + integer
-
- result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1)
- """
- msg = kwargs.get("message", "failed user-defined condition")
- exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException
- for fn in fns:
- def pa(s,l,t):
- if not bool(_trim_arity(fn)(s,l,t)):
- raise exc_type(s,l,msg)
- self.parseAction.append(pa)
- self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
- return self
-
- def setFailAction( self, fn ):
- """Define action to perform if parsing fails at this expression.
- Fail acton fn is a callable function that takes the arguments
- C{fn(s,loc,expr,err)} where:
- - s = string being parsed
- - loc = location where expression match was attempted and failed
- - expr = the parse expression that failed
- - err = the exception thrown
- The function returns no value. It may throw C{L{ParseFatalException}}
- if it is desired to stop parsing immediately."""
- self.failAction = fn
- return self
-
- def _skipIgnorables( self, instring, loc ):
- exprsFound = True
- while exprsFound:
- exprsFound = False
- for e in self.ignoreExprs:
- try:
- while 1:
- loc,dummy = e._parse( instring, loc )
- exprsFound = True
- except ParseException:
- pass
- return loc
-
- def preParse( self, instring, loc ):
- if self.ignoreExprs:
- loc = self._skipIgnorables( instring, loc )
-
- if self.skipWhitespace:
- wt = self.whiteChars
- instrlen = len(instring)
- while loc < instrlen and instring[loc] in wt:
- loc += 1
-
- return loc
-
- def parseImpl( self, instring, loc, doActions=True ):
- return loc, []
-
- def postParse( self, instring, loc, tokenlist ):
- return tokenlist
-
- #~ @profile
- def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
- debugging = ( self.debug ) #and doActions )
-
- if debugging or self.failAction:
- #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))
- if (self.debugActions[0] ):
- self.debugActions[0]( instring, loc, self )
- if callPreParse and self.callPreparse:
- preloc = self.preParse( instring, loc )
- else:
- preloc = loc
- tokensStart = preloc
- try:
- try:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
- except IndexError:
- raise ParseException( instring, len(instring), self.errmsg, self )
- except ParseBaseException as err:
- #~ print ("Exception raised:", err)
- if self.debugActions[2]:
- self.debugActions[2]( instring, tokensStart, self, err )
- if self.failAction:
- self.failAction( instring, tokensStart, self, err )
- raise
- else:
- if callPreParse and self.callPreparse:
- preloc = self.preParse( instring, loc )
- else:
- preloc = loc
- tokensStart = preloc
- if self.mayIndexError or preloc >= len(instring):
- try:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
- except IndexError:
- raise ParseException( instring, len(instring), self.errmsg, self )
- else:
- loc,tokens = self.parseImpl( instring, preloc, doActions )
-
- tokens = self.postParse( instring, loc, tokens )
-
- retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults )
- if self.parseAction and (doActions or self.callDuringTry):
- if debugging:
- try:
- for fn in self.parseAction:
- tokens = fn( instring, tokensStart, retTokens )
- if tokens is not None:
- retTokens = ParseResults( tokens,
- self.resultsName,
- asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
- modal=self.modalResults )
- except ParseBaseException as err:
- #~ print "Exception raised in user parse action:", err
- if (self.debugActions[2] ):
- self.debugActions[2]( instring, tokensStart, self, err )
- raise
- else:
- for fn in self.parseAction:
- tokens = fn( instring, tokensStart, retTokens )
- if tokens is not None:
- retTokens = ParseResults( tokens,
- self.resultsName,
- asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
- modal=self.modalResults )
- if debugging:
- #~ print ("Matched",self,"->",retTokens.asList())
- if (self.debugActions[1] ):
- self.debugActions[1]( instring, tokensStart, loc, self, retTokens )
-
- return loc, retTokens
-
- def tryParse( self, instring, loc ):
- try:
- return self._parse( instring, loc, doActions=False )[0]
- except ParseFatalException:
- raise ParseException( instring, loc, self.errmsg, self)
-
- def canParseNext(self, instring, loc):
- try:
- self.tryParse(instring, loc)
- except (ParseException, IndexError):
- return False
- else:
- return True
-
- class _UnboundedCache(object):
- def __init__(self):
- cache = {}
- self.not_in_cache = not_in_cache = object()
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
-
- def clear(self):
- cache.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- if _OrderedDict is not None:
- class _FifoCache(object):
- def __init__(self, size):
- self.not_in_cache = not_in_cache = object()
-
- cache = _OrderedDict()
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
- while len(cache) > size:
- try:
- cache.popitem(False)
- except KeyError:
- pass
-
- def clear(self):
- cache.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- else:
- class _FifoCache(object):
- def __init__(self, size):
- self.not_in_cache = not_in_cache = object()
-
- cache = {}
- key_fifo = collections.deque([], size)
-
- def get(self, key):
- return cache.get(key, not_in_cache)
-
- def set(self, key, value):
- cache[key] = value
- while len(key_fifo) > size:
- cache.pop(key_fifo.popleft(), None)
- key_fifo.append(key)
-
- def clear(self):
- cache.clear()
- key_fifo.clear()
-
- def cache_len(self):
- return len(cache)
-
- self.get = types.MethodType(get, self)
- self.set = types.MethodType(set, self)
- self.clear = types.MethodType(clear, self)
- self.__len__ = types.MethodType(cache_len, self)
-
- # argument cache for optimizing repeated calls when backtracking through recursive expressions
- packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail
- packrat_cache_lock = RLock()
- packrat_cache_stats = [0, 0]
-
- # this method gets repeatedly called during backtracking with the same arguments -
- # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression
- def _parseCache( self, instring, loc, doActions=True, callPreParse=True ):
- HIT, MISS = 0, 1
- lookup = (self, instring, loc, callPreParse, doActions)
- with ParserElement.packrat_cache_lock:
- cache = ParserElement.packrat_cache
- value = cache.get(lookup)
- if value is cache.not_in_cache:
- ParserElement.packrat_cache_stats[MISS] += 1
- try:
- value = self._parseNoCache(instring, loc, doActions, callPreParse)
- except ParseBaseException as pe:
- # cache a copy of the exception, without the traceback
- cache.set(lookup, pe.__class__(*pe.args))
- raise
- else:
- cache.set(lookup, (value[0], value[1].copy()))
- return value
- else:
- ParserElement.packrat_cache_stats[HIT] += 1
- if isinstance(value, Exception):
- raise value
- return (value[0], value[1].copy())
-
- _parse = _parseNoCache
-
- @staticmethod
- def resetCache():
- ParserElement.packrat_cache.clear()
- ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats)
-
- _packratEnabled = False
- @staticmethod
- def enablePackrat(cache_size_limit=128):
- """Enables "packrat" parsing, which adds memoizing to the parsing logic.
- Repeated parse attempts at the same string location (which happens
- often in many complex grammars) can immediately return a cached value,
- instead of re-executing parsing/validating code. Memoizing is done of
- both valid results and parsing exceptions.
-
- Parameters:
- - cache_size_limit - (default=C{128}) - if an integer value is provided
- will limit the size of the packrat cache; if None is passed, then
- the cache size will be unbounded; if 0 is passed, the cache will
- be effectively disabled.
-
- This speedup may break existing programs that use parse actions that
- have side-effects. For this reason, packrat parsing is disabled when
- you first import pyparsing. To activate the packrat feature, your
- program must call the class method C{ParserElement.enablePackrat()}. If
- your program uses C{psyco} to "compile as you go", you must call
- C{enablePackrat} before calling C{psyco.full()}. If you do not do this,
- Python will crash. For best results, call C{enablePackrat()} immediately
- after importing pyparsing.
-
- Example::
- import pyparsing
- pyparsing.ParserElement.enablePackrat()
- """
- if not ParserElement._packratEnabled:
- ParserElement._packratEnabled = True
- if cache_size_limit is None:
- ParserElement.packrat_cache = ParserElement._UnboundedCache()
- else:
- ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit)
- ParserElement._parse = ParserElement._parseCache
-
- def parseString( self, instring, parseAll=False ):
- """
- Execute the parse expression with the given string.
- This is the main interface to the client code, once the complete
- expression has been built.
-
- If you want the grammar to require that the entire input string be
- successfully parsed, then set C{parseAll} to True (equivalent to ending
- the grammar with C{L{StringEnd()}}).
-
- Note: C{parseString} implicitly calls C{expandtabs()} on the input string,
- in order to report proper column numbers in parse actions.
- If the input string contains tabs and
- the grammar uses parse actions that use the C{loc} argument to index into the
- string being parsed, you can ensure you have a consistent view of the input
- string by:
- - calling C{parseWithTabs} on your grammar before calling C{parseString}
- (see L{I{parseWithTabs}<parseWithTabs>})
- - define your parse action using the full C{(s,loc,toks)} signature, and
- reference the input string using the parse action's C{s} argument
- - explictly expand the tabs in your input string before calling
- C{parseString}
-
- Example::
- Word('a').parseString('aaaaabaaa') # -> ['aaaaa']
- Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text
- """
- ParserElement.resetCache()
- if not self.streamlined:
- self.streamline()
- #~ self.saveAsList = True
- for e in self.ignoreExprs:
- e.streamline()
- if not self.keepTabs:
- instring = instring.expandtabs()
- try:
- loc, tokens = self._parse( instring, 0 )
- if parseAll:
- loc = self.preParse( instring, loc )
- se = Empty() + StringEnd()
- se._parse( instring, loc )
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
- else:
- return tokens
-
- def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ):
- """
- Scan the input string for expression matches. Each match will return the
- matching tokens, start location, and end location. May be called with optional
- C{maxMatches} argument, to clip scanning after 'n' matches are found. If
- C{overlap} is specified, then overlapping matches will be reported.
-
- Note that the start and end locations are reported relative to the string
- being parsed. See L{I{parseString}<parseString>} for more information on parsing
- strings with embedded tabs.
-
- Example::
- source = "sldjf123lsdjjkf345sldkjf879lkjsfd987"
- print(source)
- for tokens,start,end in Word(alphas).scanString(source):
- print(' '*start + '^'*(end-start))
- print(' '*start + tokens[0])
-
- prints::
-
- sldjf123lsdjjkf345sldkjf879lkjsfd987
- ^^^^^
- sldjf
- ^^^^^^^
- lsdjjkf
- ^^^^^^
- sldkjf
- ^^^^^^
- lkjsfd
- """
- if not self.streamlined:
- self.streamline()
- for e in self.ignoreExprs:
- e.streamline()
-
- if not self.keepTabs:
- instring = _ustr(instring).expandtabs()
- instrlen = len(instring)
- loc = 0
- preparseFn = self.preParse
- parseFn = self._parse
- ParserElement.resetCache()
- matches = 0
- try:
- while loc <= instrlen and matches < maxMatches:
- try:
- preloc = preparseFn( instring, loc )
- nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
- except ParseException:
- loc = preloc+1
- else:
- if nextLoc > loc:
- matches += 1
- yield tokens, preloc, nextLoc
- if overlap:
- nextloc = preparseFn( instring, loc )
- if nextloc > loc:
- loc = nextLoc
- else:
- loc += 1
- else:
- loc = nextLoc
- else:
- loc = preloc+1
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def transformString( self, instring ):
- """
- Extension to C{L{scanString}}, to modify matching text with modified tokens that may
- be returned from a parse action. To use C{transformString}, define a grammar and
- attach a parse action to it that modifies the returned token list.
- Invoking C{transformString()} on a target string will then scan for matches,
- and replace the matched text patterns according to the logic in the parse
- action. C{transformString()} returns the resulting transformed string.
-
- Example::
- wd = Word(alphas)
- wd.setParseAction(lambda toks: toks[0].title())
-
- print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york."))
- Prints::
- Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York.
- """
- out = []
- lastE = 0
- # force preservation of <TAB>s, to minimize unwanted transformation of string, and to
- # keep string locs straight between transformString and scanString
- self.keepTabs = True
- try:
- for t,s,e in self.scanString( instring ):
- out.append( instring[lastE:s] )
- if t:
- if isinstance(t,ParseResults):
- out += t.asList()
- elif isinstance(t,list):
- out += t
- else:
- out.append(t)
- lastE = e
- out.append(instring[lastE:])
- out = [o for o in out if o]
- return "".join(map(_ustr,_flatten(out)))
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def searchString( self, instring, maxMatches=_MAX_INT ):
- """
- Another extension to C{L{scanString}}, simplifying the access to the tokens found
- to match the given parse expression. May be called with optional
- C{maxMatches} argument, to clip searching after 'n' matches are found.
-
- Example::
- # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters
- cap_word = Word(alphas.upper(), alphas.lower())
-
- print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))
-
- # the sum() builtin can be used to merge results into a single ParseResults object
- print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")))
- prints::
- [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']]
- ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity']
- """
- try:
- return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False):
- """
- Generator method to split a string using the given expression as a separator.
- May be called with optional C{maxsplit} argument, to limit the number of splits;
- and the optional C{includeSeparators} argument (default=C{False}), if the separating
- matching text should be included in the split results.
-
- Example::
- punc = oneOf(list(".,;:/-!?"))
- print(list(punc.split("This, this?, this sentence, is badly punctuated!")))
- prints::
- ['This', ' this', '', ' this sentence', ' is badly punctuated', '']
- """
- splits = 0
- last = 0
- for t,s,e in self.scanString(instring, maxMatches=maxsplit):
- yield instring[last:s]
- if includeSeparators:
- yield t[0]
- last = e
- yield instring[last:]
-
- def __add__(self, other ):
- """
- Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement
- converts them to L{Literal}s by default.
-
- Example::
- greet = Word(alphas) + "," + Word(alphas) + "!"
- hello = "Hello, World!"
- print (hello, "->", greet.parseString(hello))
- Prints::
- Hello, World! -> ['Hello', ',', 'World', '!']
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return And( [ self, other ] )
-
- def __radd__(self, other ):
- """
- Implementation of + operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other + self
-
- def __sub__(self, other):
- """
- Implementation of - operator, returns C{L{And}} with error stop
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return self + And._ErrorStop() + other
-
- def __rsub__(self, other ):
- """
- Implementation of - operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other - self
-
- def __mul__(self,other):
- """
- Implementation of * operator, allows use of C{expr * 3} in place of
- C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer
- tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples
- may also include C{None} as in:
- - C{expr*(n,None)} or C{expr*(n,)} is equivalent
- to C{expr*n + L{ZeroOrMore}(expr)}
- (read as "at least n instances of C{expr}")
- - C{expr*(None,n)} is equivalent to C{expr*(0,n)}
- (read as "0 to n instances of C{expr}")
- - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)}
- - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)}
-
- Note that C{expr*(None,n)} does not raise an exception if
- more than n exprs exist in the input stream; that is,
- C{expr*(None,n)} does not enforce a maximum number of expr
- occurrences. If this behavior is desired, then write
- C{expr*(None,n) + ~expr}
- """
- if isinstance(other,int):
- minElements, optElements = other,0
- elif isinstance(other,tuple):
- other = (other + (None, None))[:2]
- if other[0] is None:
- other = (0, other[1])
- if isinstance(other[0],int) and other[1] is None:
- if other[0] == 0:
- return ZeroOrMore(self)
- if other[0] == 1:
- return OneOrMore(self)
- else:
- return self*other[0] + ZeroOrMore(self)
- elif isinstance(other[0],int) and isinstance(other[1],int):
- minElements, optElements = other
- optElements -= minElements
- else:
- raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1]))
- else:
- raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other))
-
- if minElements < 0:
- raise ValueError("cannot multiply ParserElement by negative value")
- if optElements < 0:
- raise ValueError("second tuple value must be greater or equal to first tuple value")
- if minElements == optElements == 0:
- raise ValueError("cannot multiply ParserElement by 0 or (0,0)")
-
- if (optElements):
- def makeOptionalList(n):
- if n>1:
- return Optional(self + makeOptionalList(n-1))
- else:
- return Optional(self)
- if minElements:
- if minElements == 1:
- ret = self + makeOptionalList(optElements)
- else:
- ret = And([self]*minElements) + makeOptionalList(optElements)
- else:
- ret = makeOptionalList(optElements)
- else:
- if minElements == 1:
- ret = self
- else:
- ret = And([self]*minElements)
- return ret
-
- def __rmul__(self, other):
- return self.__mul__(other)
-
- def __or__(self, other ):
- """
- Implementation of | operator - returns C{L{MatchFirst}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return MatchFirst( [ self, other ] )
-
- def __ror__(self, other ):
- """
- Implementation of | operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other | self
-
- def __xor__(self, other ):
- """
- Implementation of ^ operator - returns C{L{Or}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return Or( [ self, other ] )
-
- def __rxor__(self, other ):
- """
- Implementation of ^ operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other ^ self
-
- def __and__(self, other ):
- """
- Implementation of & operator - returns C{L{Each}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return Each( [ self, other ] )
-
- def __rand__(self, other ):
- """
- Implementation of & operator when left operand is not a C{L{ParserElement}}
- """
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- if not isinstance( other, ParserElement ):
- warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
- SyntaxWarning, stacklevel=2)
- return None
- return other & self
-
- def __invert__( self ):
- """
- Implementation of ~ operator - returns C{L{NotAny}}
- """
- return NotAny( self )
-
- def __call__(self, name=None):
- """
- Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}.
-
- If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be
- passed as C{True}.
-
- If C{name} is omitted, same as calling C{L{copy}}.
-
- Example::
- # these are equivalent
- userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno")
- userdata = Word(alphas)("name") + Word(nums+"-")("socsecno")
- """
- if name is not None:
- return self.setResultsName(name)
- else:
- return self.copy()
-
- def suppress( self ):
- """
- Suppresses the output of this C{ParserElement}; useful to keep punctuation from
- cluttering up returned output.
- """
- return Suppress( self )
-
- def leaveWhitespace( self ):
- """
- Disables the skipping of whitespace before matching the characters in the
- C{ParserElement}'s defined pattern. This is normally only used internally by
- the pyparsing module, but may be needed in some whitespace-sensitive grammars.
- """
- self.skipWhitespace = False
- return self
-
- def setWhitespaceChars( self, chars ):
- """
- Overrides the default whitespace chars
- """
- self.skipWhitespace = True
- self.whiteChars = chars
- self.copyDefaultWhiteChars = False
- return self
-
- def parseWithTabs( self ):
- """
- Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string.
- Must be called before C{parseString} when the input grammar contains elements that
- match C{<TAB>} characters.
- """
- self.keepTabs = True
- return self
-
- def ignore( self, other ):
- """
- Define expression to be ignored (e.g., comments) while doing pattern
- matching; may be called repeatedly, to define multiple comment or other
- ignorable patterns.
-
- Example::
- patt = OneOrMore(Word(alphas))
- patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj']
-
- patt.ignore(cStyleComment)
- patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd']
- """
- if isinstance(other, basestring):
- other = Suppress(other)
-
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- self.ignoreExprs.append(other)
- else:
- self.ignoreExprs.append( Suppress( other.copy() ) )
- return self
-
- def setDebugActions( self, startAction, successAction, exceptionAction ):
- """
- Enable display of debugging messages while doing pattern matching.
- """
- self.debugActions = (startAction or _defaultStartDebugAction,
- successAction or _defaultSuccessDebugAction,
- exceptionAction or _defaultExceptionDebugAction)
- self.debug = True
- return self
-
- def setDebug( self, flag=True ):
- """
- Enable display of debugging messages while doing pattern matching.
- Set C{flag} to True to enable, False to disable.
-
- Example::
- wd = Word(alphas).setName("alphaword")
- integer = Word(nums).setName("numword")
- term = wd | integer
-
- # turn on debugging for wd
- wd.setDebug()
-
- OneOrMore(term).parseString("abc 123 xyz 890")
-
- prints::
- Match alphaword at loc 0(1,1)
- Matched alphaword -> ['abc']
- Match alphaword at loc 3(1,4)
- Exception raised:Expected alphaword (at char 4), (line:1, col:5)
- Match alphaword at loc 7(1,8)
- Matched alphaword -> ['xyz']
- Match alphaword at loc 11(1,12)
- Exception raised:Expected alphaword (at char 12), (line:1, col:13)
- Match alphaword at loc 15(1,16)
- Exception raised:Expected alphaword (at char 15), (line:1, col:16)
-
- The output shown is that produced by the default debug actions - custom debug actions can be
- specified using L{setDebugActions}. Prior to attempting
- to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"}
- is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"}
- message is shown. Also note the use of L{setName} to assign a human-readable name to the expression,
- which makes debugging and exception messages easier to understand - for instance, the default
- name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}.
- """
- if flag:
- self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction )
- else:
- self.debug = False
- return self
-
- def __str__( self ):
- return self.name
-
- def __repr__( self ):
- return _ustr(self)
-
- def streamline( self ):
- self.streamlined = True
- self.strRepr = None
- return self
-
- def checkRecursion( self, parseElementList ):
- pass
-
- def validate( self, validateTrace=[] ):
- """
- Check defined expressions for valid structure, check for infinite recursive definitions.
- """
- self.checkRecursion( [] )
-
- def parseFile( self, file_or_filename, parseAll=False ):
- """
- Execute the parse expression on the given file or filename.
- If a filename is specified (instead of a file object),
- the entire file is opened, read, and closed before parsing.
- """
- try:
- file_contents = file_or_filename.read()
- except AttributeError:
- with open(file_or_filename, "r") as f:
- file_contents = f.read()
- try:
- return self.parseString(file_contents, parseAll)
- except ParseBaseException as exc:
- if ParserElement.verbose_stacktrace:
- raise
- else:
- # catch and re-raise exception from here, clears out pyparsing internal stack trace
- raise exc
-
- def __eq__(self,other):
- if isinstance(other, ParserElement):
- return self is other or vars(self) == vars(other)
- elif isinstance(other, basestring):
- return self.matches(other)
- else:
- return super(ParserElement,self)==other
-
- def __ne__(self,other):
- return not (self == other)
-
- def __hash__(self):
- return hash(id(self))
-
- def __req__(self,other):
- return self == other
-
- def __rne__(self,other):
- return not (self == other)
-
- def matches(self, testString, parseAll=True):
- """
- Method for quick testing of a parser against a test string. Good for simple
- inline microtests of sub expressions while building up larger parser.
-
- Parameters:
- - testString - to test against this expression for a match
- - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
-
- Example::
- expr = Word(nums)
- assert expr.matches("100")
- """
- try:
- self.parseString(_ustr(testString), parseAll=parseAll)
- return True
- except ParseBaseException:
- return False
-
- def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False):
- """
- Execute the parse expression on a series of test strings, showing each
- test, the parsed results or where the parse failed. Quick and easy way to
- run a parse expression against a list of sample strings.
-
- Parameters:
- - tests - a list of separate test strings, or a multiline string of test strings
- - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
- - comment - (default=C{'#'}) - expression for indicating embedded comments in the test
- string; pass None to disable comment filtering
- - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline;
- if False, only dump nested list
- - printResults - (default=C{True}) prints test output to stdout
- - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing
-
- Returns: a (success, results) tuple, where success indicates that all tests succeeded
- (or failed if C{failureTests} is True), and the results contain a list of lines of each
- test's output
-
- Example::
- number_expr = pyparsing_common.number.copy()
-
- result = number_expr.runTests('''
- # unsigned integer
- 100
- # negative integer
- -100
- # float with scientific notation
- 6.02e23
- # integer with scientific notation
- 1e-12
- ''')
- print("Success" if result[0] else "Failed!")
-
- result = number_expr.runTests('''
- # stray character
- 100Z
- # missing leading digit before '.'
- -.100
- # too many '.'
- 3.14.159
- ''', failureTests=True)
- print("Success" if result[0] else "Failed!")
- prints::
- # unsigned integer
- 100
- [100]
-
- # negative integer
- -100
- [-100]
-
- # float with scientific notation
- 6.02e23
- [6.02e+23]
-
- # integer with scientific notation
- 1e-12
- [1e-12]
-
- Success
-
- # stray character
- 100Z
- ^
- FAIL: Expected end of text (at char 3), (line:1, col:4)
-
- # missing leading digit before '.'
- -.100
- ^
- FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1)
-
- # too many '.'
- 3.14.159
- ^
- FAIL: Expected end of text (at char 4), (line:1, col:5)
-
- Success
-
- Each test string must be on a single line. If you want to test a string that spans multiple
- lines, create a test like this::
-
- expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines")
-
- (Note that this is a raw string literal, you must include the leading 'r'.)
- """
- if isinstance(tests, basestring):
- tests = list(map(str.strip, tests.rstrip().splitlines()))
- if isinstance(comment, basestring):
- comment = Literal(comment)
- allResults = []
- comments = []
- success = True
- for t in tests:
- if comment is not None and comment.matches(t, False) or comments and not t:
- comments.append(t)
- continue
- if not t:
- continue
- out = ['\n'.join(comments), t]
- comments = []
- try:
- t = t.replace(r'\n','\n')
- result = self.parseString(t, parseAll=parseAll)
- out.append(result.dump(full=fullDump))
- success = success and not failureTests
- except ParseBaseException as pe:
- fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else ""
- if '\n' in t:
- out.append(line(pe.loc, t))
- out.append(' '*(col(pe.loc,t)-1) + '^' + fatal)
- else:
- out.append(' '*pe.loc + '^' + fatal)
- out.append("FAIL: " + str(pe))
- success = success and failureTests
- result = pe
- except Exception as exc:
- out.append("FAIL-EXCEPTION: " + str(exc))
- success = success and failureTests
- result = exc
-
- if printResults:
- if fullDump:
- out.append('')
- print('\n'.join(out))
-
- allResults.append((t, result))
-
- return success, allResults
-
-
-class Token(ParserElement):
- """
- Abstract C{ParserElement} subclass, for defining atomic matching patterns.
- """
- def __init__( self ):
- super(Token,self).__init__( savelist=False )
-
-
-class Empty(Token):
- """
- An empty token, will always match.
- """
- def __init__( self ):
- super(Empty,self).__init__()
- self.name = "Empty"
- self.mayReturnEmpty = True
- self.mayIndexError = False
-
-
-class NoMatch(Token):
- """
- A token that will never match.
- """
- def __init__( self ):
- super(NoMatch,self).__init__()
- self.name = "NoMatch"
- self.mayReturnEmpty = True
- self.mayIndexError = False
- self.errmsg = "Unmatchable token"
-
- def parseImpl( self, instring, loc, doActions=True ):
- raise ParseException(instring, loc, self.errmsg, self)
-
-
-class Literal(Token):
- """
- Token to exactly match a specified string.
-
- Example::
- Literal('blah').parseString('blah') # -> ['blah']
- Literal('blah').parseString('blahfooblah') # -> ['blah']
- Literal('blah').parseString('bla') # -> Exception: Expected "blah"
-
- For case-insensitive matching, use L{CaselessLiteral}.
-
- For keyword matching (force word break before and after the matched string),
- use L{Keyword} or L{CaselessKeyword}.
- """
- def __init__( self, matchString ):
- super(Literal,self).__init__()
- self.match = matchString
- self.matchLen = len(matchString)
- try:
- self.firstMatchChar = matchString[0]
- except IndexError:
- warnings.warn("null string passed to Literal; use Empty() instead",
- SyntaxWarning, stacklevel=2)
- self.__class__ = Empty
- self.name = '"%s"' % _ustr(self.match)
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = False
- self.mayIndexError = False
-
- # Performance tuning: this routine gets called a *lot*
- # if this is a single character match string and the first character matches,
- # short-circuit as quickly as possible, and avoid calling startswith
- #~ @profile
- def parseImpl( self, instring, loc, doActions=True ):
- if (instring[loc] == self.firstMatchChar and
- (self.matchLen==1 or instring.startswith(self.match,loc)) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-_L = Literal
-ParserElement._literalStringClass = Literal
-
-class Keyword(Token):
- """
- Token to exactly match a specified string as a keyword, that is, it must be
- immediately followed by a non-keyword character. Compare with C{L{Literal}}:
- - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}.
- - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'}
- Accepts two optional constructor arguments in addition to the keyword string:
- - C{identChars} is a string of characters that would be valid identifier characters,
- defaulting to all alphanumerics + "_" and "$"
- - C{caseless} allows case-insensitive matching, default is C{False}.
-
- Example::
- Keyword("start").parseString("start") # -> ['start']
- Keyword("start").parseString("starting") # -> Exception
-
- For case-insensitive matching, use L{CaselessKeyword}.
- """
- DEFAULT_KEYWORD_CHARS = alphanums+"_$"
-
- def __init__( self, matchString, identChars=None, caseless=False ):
- super(Keyword,self).__init__()
- if identChars is None:
- identChars = Keyword.DEFAULT_KEYWORD_CHARS
- self.match = matchString
- self.matchLen = len(matchString)
- try:
- self.firstMatchChar = matchString[0]
- except IndexError:
- warnings.warn("null string passed to Keyword; use Empty() instead",
- SyntaxWarning, stacklevel=2)
- self.name = '"%s"' % self.match
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = False
- self.mayIndexError = False
- self.caseless = caseless
- if caseless:
- self.caselessmatch = matchString.upper()
- identChars = identChars.upper()
- self.identChars = set(identChars)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.caseless:
- if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and
- (loc == 0 or instring[loc-1].upper() not in self.identChars) ):
- return loc+self.matchLen, self.match
- else:
- if (instring[loc] == self.firstMatchChar and
- (self.matchLen==1 or instring.startswith(self.match,loc)) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and
- (loc == 0 or instring[loc-1] not in self.identChars) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-
- def copy(self):
- c = super(Keyword,self).copy()
- c.identChars = Keyword.DEFAULT_KEYWORD_CHARS
- return c
-
- @staticmethod
- def setDefaultKeywordChars( chars ):
- """Overrides the default Keyword chars
- """
- Keyword.DEFAULT_KEYWORD_CHARS = chars
-
-class CaselessLiteral(Literal):
- """
- Token to match a specified string, ignoring case of letters.
- Note: the matched results will always be in the case of the given
- match string, NOT the case of the input text.
-
- Example::
- OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD']
-
- (Contrast with example for L{CaselessKeyword}.)
- """
- def __init__( self, matchString ):
- super(CaselessLiteral,self).__init__( matchString.upper() )
- # Preserve the defining literal.
- self.returnString = matchString
- self.name = "'%s'" % self.returnString
- self.errmsg = "Expected " + self.name
-
- def parseImpl( self, instring, loc, doActions=True ):
- if instring[ loc:loc+self.matchLen ].upper() == self.match:
- return loc+self.matchLen, self.returnString
- raise ParseException(instring, loc, self.errmsg, self)
-
-class CaselessKeyword(Keyword):
- """
- Caseless version of L{Keyword}.
-
- Example::
- OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD']
-
- (Contrast with example for L{CaselessLiteral}.)
- """
- def __init__( self, matchString, identChars=None ):
- super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True )
-
- def parseImpl( self, instring, loc, doActions=True ):
- if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
- (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ):
- return loc+self.matchLen, self.match
- raise ParseException(instring, loc, self.errmsg, self)
-
-class CloseMatch(Token):
- """
- A variation on L{Literal} which matches "close" matches, that is,
- strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters:
- - C{match_string} - string to be matched
- - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match
-
- The results from a successful parse will contain the matched text from the input string and the following named results:
- - C{mismatches} - a list of the positions within the match_string where mismatches were found
- - C{original} - the original match_string used to compare against the input string
-
- If C{mismatches} is an empty list, then the match was an exact match.
-
- Example::
- patt = CloseMatch("ATCATCGAATGGA")
- patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']})
- patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1)
-
- # exact match
- patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']})
-
- # close match allowing up to 2 mismatches
- patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2)
- patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']})
- """
- def __init__(self, match_string, maxMismatches=1):
- super(CloseMatch,self).__init__()
- self.name = match_string
- self.match_string = match_string
- self.maxMismatches = maxMismatches
- self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches)
- self.mayIndexError = False
- self.mayReturnEmpty = False
-
- def parseImpl( self, instring, loc, doActions=True ):
- start = loc
- instrlen = len(instring)
- maxloc = start + len(self.match_string)
-
- if maxloc <= instrlen:
- match_string = self.match_string
- match_stringloc = 0
- mismatches = []
- maxMismatches = self.maxMismatches
-
- for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)):
- src,mat = s_m
- if src != mat:
- mismatches.append(match_stringloc)
- if len(mismatches) > maxMismatches:
- break
- else:
- loc = match_stringloc + 1
- results = ParseResults([instring[start:loc]])
- results['original'] = self.match_string
- results['mismatches'] = mismatches
- return loc, results
-
- raise ParseException(instring, loc, self.errmsg, self)
-
-
-class Word(Token):
- """
- Token for matching words composed of allowed character sets.
- Defined with string containing all allowed initial characters,
- an optional string containing allowed body characters (if omitted,
- defaults to the initial character set), and an optional minimum,
- maximum, and/or exact length. The default value for C{min} is 1 (a
- minimum value < 1 is not valid); the default values for C{max} and C{exact}
- are 0, meaning no maximum or exact length restriction. An optional
- C{excludeChars} parameter can list characters that might be found in
- the input C{bodyChars} string; useful to define a word of all printables
- except for one or two characters, for instance.
-
- L{srange} is useful for defining custom character set strings for defining
- C{Word} expressions, using range notation from regular expression character sets.
-
- A common mistake is to use C{Word} to match a specific literal string, as in
- C{Word("Address")}. Remember that C{Word} uses the string argument to define
- I{sets} of matchable characters. This expression would match "Add", "AAA",
- "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'.
- To match an exact literal string, use L{Literal} or L{Keyword}.
-
- pyparsing includes helper strings for building Words:
- - L{alphas}
- - L{nums}
- - L{alphanums}
- - L{hexnums}
- - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.)
- - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.)
- - L{printables} (any non-whitespace character)
-
- Example::
- # a word composed of digits
- integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9"))
-
- # a word with a leading capital, and zero or more lowercase
- capital_word = Word(alphas.upper(), alphas.lower())
-
- # hostnames are alphanumeric, with leading alpha, and '-'
- hostname = Word(alphas, alphanums+'-')
-
- # roman numeral (not a strict parser, accepts invalid mix of characters)
- roman = Word("IVXLCDM")
-
- # any string of non-whitespace characters, except for ','
- csv_value = Word(printables, excludeChars=",")
- """
- def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ):
- super(Word,self).__init__()
- if excludeChars:
- initChars = ''.join(c for c in initChars if c not in excludeChars)
- if bodyChars:
- bodyChars = ''.join(c for c in bodyChars if c not in excludeChars)
- self.initCharsOrig = initChars
- self.initChars = set(initChars)
- if bodyChars :
- self.bodyCharsOrig = bodyChars
- self.bodyChars = set(bodyChars)
- else:
- self.bodyCharsOrig = initChars
- self.bodyChars = set(initChars)
-
- self.maxSpecified = max > 0
-
- if min < 1:
- raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted")
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.asKeyword = asKeyword
-
- if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0):
- if self.bodyCharsOrig == self.initCharsOrig:
- self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig)
- elif len(self.initCharsOrig) == 1:
- self.reString = "%s[%s]*" % \
- (re.escape(self.initCharsOrig),
- _escapeRegexRangeChars(self.bodyCharsOrig),)
- else:
- self.reString = "[%s][%s]*" % \
- (_escapeRegexRangeChars(self.initCharsOrig),
- _escapeRegexRangeChars(self.bodyCharsOrig),)
- if self.asKeyword:
- self.reString = r"\b"+self.reString+r"\b"
- try:
- self.re = re.compile( self.reString )
- except Exception:
- self.re = None
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.re:
- result = self.re.match(instring,loc)
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- return loc, result.group()
-
- if not(instring[ loc ] in self.initChars):
- raise ParseException(instring, loc, self.errmsg, self)
-
- start = loc
- loc += 1
- instrlen = len(instring)
- bodychars = self.bodyChars
- maxloc = start + self.maxLen
- maxloc = min( maxloc, instrlen )
- while loc < maxloc and instring[loc] in bodychars:
- loc += 1
-
- throwException = False
- if loc - start < self.minLen:
- throwException = True
- if self.maxSpecified and loc < instrlen and instring[loc] in bodychars:
- throwException = True
- if self.asKeyword:
- if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars):
- throwException = True
-
- if throwException:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
- def __str__( self ):
- try:
- return super(Word,self).__str__()
- except Exception:
- pass
-
-
- if self.strRepr is None:
-
- def charsAsStr(s):
- if len(s)>4:
- return s[:4]+"..."
- else:
- return s
-
- if ( self.initCharsOrig != self.bodyCharsOrig ):
- self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) )
- else:
- self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig)
-
- return self.strRepr
-
-
-class Regex(Token):
- r"""
- Token for matching strings that match a given regular expression.
- Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
- If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as
- named parse results.
-
- Example::
- realnum = Regex(r"[+-]?\d+\.\d*")
- date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)')
- # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
- roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})")
- """
- compiledREtype = type(re.compile("[A-Z]"))
- def __init__( self, pattern, flags=0):
- """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags."""
- super(Regex,self).__init__()
-
- if isinstance(pattern, basestring):
- if not pattern:
- warnings.warn("null string passed to Regex; use Empty() instead",
- SyntaxWarning, stacklevel=2)
-
- self.pattern = pattern
- self.flags = flags
-
- try:
- self.re = re.compile(self.pattern, self.flags)
- self.reString = self.pattern
- except sre_constants.error:
- warnings.warn("invalid pattern (%s) passed to Regex" % pattern,
- SyntaxWarning, stacklevel=2)
- raise
-
- elif isinstance(pattern, Regex.compiledREtype):
- self.re = pattern
- self.pattern = \
- self.reString = str(pattern)
- self.flags = flags
-
- else:
- raise ValueError("Regex may only be constructed with a string or a compiled RE object")
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- result = self.re.match(instring,loc)
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- d = result.groupdict()
- ret = ParseResults(result.group())
- if d:
- for k in d:
- ret[k] = d[k]
- return loc,ret
-
- def __str__( self ):
- try:
- return super(Regex,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "Re:(%s)" % repr(self.pattern)
-
- return self.strRepr
-
-
-class QuotedString(Token):
- r"""
- Token for matching strings that are delimited by quoting characters.
-
- Defined with the following parameters:
- - quoteChar - string of one or more characters defining the quote delimiting string
- - escChar - character to escape quotes, typically backslash (default=C{None})
- - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None})
- - multiline - boolean indicating whether quotes can span multiple lines (default=C{False})
- - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True})
- - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar)
- - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True})
-
- Example::
- qs = QuotedString('"')
- print(qs.searchString('lsjdf "This is the quote" sldjf'))
- complex_qs = QuotedString('{{', endQuoteChar='}}')
- print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf'))
- sql_qs = QuotedString('"', escQuote='""')
- print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf'))
- prints::
- [['This is the quote']]
- [['This is the "quote"']]
- [['This is the quote with "embedded" quotes']]
- """
- def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True):
- super(QuotedString,self).__init__()
-
- # remove white space from quote chars - wont work anyway
- quoteChar = quoteChar.strip()
- if not quoteChar:
- warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
- raise SyntaxError()
-
- if endQuoteChar is None:
- endQuoteChar = quoteChar
- else:
- endQuoteChar = endQuoteChar.strip()
- if not endQuoteChar:
- warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
- raise SyntaxError()
-
- self.quoteChar = quoteChar
- self.quoteCharLen = len(quoteChar)
- self.firstQuoteChar = quoteChar[0]
- self.endQuoteChar = endQuoteChar
- self.endQuoteCharLen = len(endQuoteChar)
- self.escChar = escChar
- self.escQuote = escQuote
- self.unquoteResults = unquoteResults
- self.convertWhitespaceEscapes = convertWhitespaceEscapes
-
- if multiline:
- self.flags = re.MULTILINE | re.DOTALL
- self.pattern = r'%s(?:[^%s%s]' % \
- ( re.escape(self.quoteChar),
- _escapeRegexRangeChars(self.endQuoteChar[0]),
- (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
- else:
- self.flags = 0
- self.pattern = r'%s(?:[^%s\n\r%s]' % \
- ( re.escape(self.quoteChar),
- _escapeRegexRangeChars(self.endQuoteChar[0]),
- (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
- if len(self.endQuoteChar) > 1:
- self.pattern += (
- '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]),
- _escapeRegexRangeChars(self.endQuoteChar[i]))
- for i in range(len(self.endQuoteChar)-1,0,-1)) + ')'
- )
- if escQuote:
- self.pattern += (r'|(?:%s)' % re.escape(escQuote))
- if escChar:
- self.pattern += (r'|(?:%s.)' % re.escape(escChar))
- self.escCharReplacePattern = re.escape(self.escChar)+"(.)"
- self.pattern += (r')*%s' % re.escape(self.endQuoteChar))
-
- try:
- self.re = re.compile(self.pattern, self.flags)
- self.reString = self.pattern
- except sre_constants.error:
- warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern,
- SyntaxWarning, stacklevel=2)
- raise
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayIndexError = False
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None
- if not result:
- raise ParseException(instring, loc, self.errmsg, self)
-
- loc = result.end()
- ret = result.group()
-
- if self.unquoteResults:
-
- # strip off quotes
- ret = ret[self.quoteCharLen:-self.endQuoteCharLen]
-
- if isinstance(ret,basestring):
- # replace escaped whitespace
- if '\\' in ret and self.convertWhitespaceEscapes:
- ws_map = {
- r'\t' : '\t',
- r'\n' : '\n',
- r'\f' : '\f',
- r'\r' : '\r',
- }
- for wslit,wschar in ws_map.items():
- ret = ret.replace(wslit, wschar)
-
- # replace escaped characters
- if self.escChar:
- ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret)
-
- # replace escaped quotes
- if self.escQuote:
- ret = ret.replace(self.escQuote, self.endQuoteChar)
-
- return loc, ret
-
- def __str__( self ):
- try:
- return super(QuotedString,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar)
-
- return self.strRepr
-
-
-class CharsNotIn(Token):
- """
- Token for matching words composed of characters I{not} in a given set (will
- include whitespace in matched characters if not listed in the provided exclusion set - see example).
- Defined with string containing all disallowed characters, and an optional
- minimum, maximum, and/or exact length. The default value for C{min} is 1 (a
- minimum value < 1 is not valid); the default values for C{max} and C{exact}
- are 0, meaning no maximum or exact length restriction.
-
- Example::
- # define a comma-separated-value as anything that is not a ','
- csv_value = CharsNotIn(',')
- print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213"))
- prints::
- ['dkls', 'lsdkjf', 's12 34', '@!#', '213']
- """
- def __init__( self, notChars, min=1, max=0, exact=0 ):
- super(CharsNotIn,self).__init__()
- self.skipWhitespace = False
- self.notChars = notChars
-
- if min < 1:
- raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted")
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- self.name = _ustr(self)
- self.errmsg = "Expected " + self.name
- self.mayReturnEmpty = ( self.minLen == 0 )
- self.mayIndexError = False
-
- def parseImpl( self, instring, loc, doActions=True ):
- if instring[loc] in self.notChars:
- raise ParseException(instring, loc, self.errmsg, self)
-
- start = loc
- loc += 1
- notchars = self.notChars
- maxlen = min( start+self.maxLen, len(instring) )
- while loc < maxlen and \
- (instring[loc] not in notchars):
- loc += 1
-
- if loc - start < self.minLen:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
- def __str__( self ):
- try:
- return super(CharsNotIn, self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- if len(self.notChars) > 4:
- self.strRepr = "!W:(%s...)" % self.notChars[:4]
- else:
- self.strRepr = "!W:(%s)" % self.notChars
-
- return self.strRepr
-
-class White(Token):
- """
- Special matching class for matching whitespace. Normally, whitespace is ignored
- by pyparsing grammars. This class is included when some whitespace structures
- are significant. Define with a string containing the whitespace characters to be
- matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments,
- as defined for the C{L{Word}} class.
- """
- whiteStrs = {
- " " : "<SPC>",
- "\t": "<TAB>",
- "\n": "<LF>",
- "\r": "<CR>",
- "\f": "<FF>",
- }
- def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0):
- super(White,self).__init__()
- self.matchWhite = ws
- self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) )
- #~ self.leaveWhitespace()
- self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite))
- self.mayReturnEmpty = True
- self.errmsg = "Expected " + self.name
-
- self.minLen = min
-
- if max > 0:
- self.maxLen = max
- else:
- self.maxLen = _MAX_INT
-
- if exact > 0:
- self.maxLen = exact
- self.minLen = exact
-
- def parseImpl( self, instring, loc, doActions=True ):
- if not(instring[ loc ] in self.matchWhite):
- raise ParseException(instring, loc, self.errmsg, self)
- start = loc
- loc += 1
- maxloc = start + self.maxLen
- maxloc = min( maxloc, len(instring) )
- while loc < maxloc and instring[loc] in self.matchWhite:
- loc += 1
-
- if loc - start < self.minLen:
- raise ParseException(instring, loc, self.errmsg, self)
-
- return loc, instring[start:loc]
-
-
-class _PositionToken(Token):
- def __init__( self ):
- super(_PositionToken,self).__init__()
- self.name=self.__class__.__name__
- self.mayReturnEmpty = True
- self.mayIndexError = False
-
-class GoToColumn(_PositionToken):
- """
- Token to advance to a specific column of input text; useful for tabular report scraping.
- """
- def __init__( self, colno ):
- super(GoToColumn,self).__init__()
- self.col = colno
-
- def preParse( self, instring, loc ):
- if col(loc,instring) != self.col:
- instrlen = len(instring)
- if self.ignoreExprs:
- loc = self._skipIgnorables( instring, loc )
- while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col :
- loc += 1
- return loc
-
- def parseImpl( self, instring, loc, doActions=True ):
- thiscol = col( loc, instring )
- if thiscol > self.col:
- raise ParseException( instring, loc, "Text not in expected column", self )
- newloc = loc + self.col - thiscol
- ret = instring[ loc: newloc ]
- return newloc, ret
-
-
-class LineStart(_PositionToken):
- """
- Matches if current position is at the beginning of a line within the parse string
-
- Example::
-
- test = '''\
- AAA this line
- AAA and this line
- AAA but not this one
- B AAA and definitely not this one
- '''
-
- for t in (LineStart() + 'AAA' + restOfLine).searchString(test):
- print(t)
-
- Prints::
- ['AAA', ' this line']
- ['AAA', ' and this line']
-
- """
- def __init__( self ):
- super(LineStart,self).__init__()
- self.errmsg = "Expected start of line"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if col(loc, instring) == 1:
- return loc, []
- raise ParseException(instring, loc, self.errmsg, self)
-
-class LineEnd(_PositionToken):
- """
- Matches if current position is at the end of a line within the parse string
- """
- def __init__( self ):
- super(LineEnd,self).__init__()
- self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") )
- self.errmsg = "Expected end of line"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc<len(instring):
- if instring[loc] == "\n":
- return loc+1, "\n"
- else:
- raise ParseException(instring, loc, self.errmsg, self)
- elif loc == len(instring):
- return loc+1, []
- else:
- raise ParseException(instring, loc, self.errmsg, self)
-
-class StringStart(_PositionToken):
- """
- Matches if current position is at the beginning of the parse string
- """
- def __init__( self ):
- super(StringStart,self).__init__()
- self.errmsg = "Expected start of text"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc != 0:
- # see if entire string up to here is just whitespace and ignoreables
- if loc != self.preParse( instring, 0 ):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-class StringEnd(_PositionToken):
- """
- Matches if current position is at the end of the parse string
- """
- def __init__( self ):
- super(StringEnd,self).__init__()
- self.errmsg = "Expected end of text"
-
- def parseImpl( self, instring, loc, doActions=True ):
- if loc < len(instring):
- raise ParseException(instring, loc, self.errmsg, self)
- elif loc == len(instring):
- return loc+1, []
- elif loc > len(instring):
- return loc, []
- else:
- raise ParseException(instring, loc, self.errmsg, self)
-
-class WordStart(_PositionToken):
- """
- Matches if the current position is at the beginning of a Word, and
- is not preceded by any character in a given set of C{wordChars}
- (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
- use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of
- the string being parsed, or at the beginning of a line.
- """
- def __init__(self, wordChars = printables):
- super(WordStart,self).__init__()
- self.wordChars = set(wordChars)
- self.errmsg = "Not at the start of a word"
-
- def parseImpl(self, instring, loc, doActions=True ):
- if loc != 0:
- if (instring[loc-1] in self.wordChars or
- instring[loc] not in self.wordChars):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-class WordEnd(_PositionToken):
- """
- Matches if the current position is at the end of a Word, and
- is not followed by any character in a given set of C{wordChars}
- (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
- use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of
- the string being parsed, or at the end of a line.
- """
- def __init__(self, wordChars = printables):
- super(WordEnd,self).__init__()
- self.wordChars = set(wordChars)
- self.skipWhitespace = False
- self.errmsg = "Not at the end of a word"
-
- def parseImpl(self, instring, loc, doActions=True ):
- instrlen = len(instring)
- if instrlen>0 and loc<instrlen:
- if (instring[loc] in self.wordChars or
- instring[loc-1] not in self.wordChars):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
-
-class ParseExpression(ParserElement):
- """
- Abstract subclass of ParserElement, for combining and post-processing parsed tokens.
- """
- def __init__( self, exprs, savelist = False ):
- super(ParseExpression,self).__init__(savelist)
- if isinstance( exprs, _generatorType ):
- exprs = list(exprs)
-
- if isinstance( exprs, basestring ):
- self.exprs = [ ParserElement._literalStringClass( exprs ) ]
- elif isinstance( exprs, Iterable ):
- exprs = list(exprs)
- # if sequence of strings provided, wrap with Literal
- if all(isinstance(expr, basestring) for expr in exprs):
- exprs = map(ParserElement._literalStringClass, exprs)
- self.exprs = list(exprs)
- else:
- try:
- self.exprs = list( exprs )
- except TypeError:
- self.exprs = [ exprs ]
- self.callPreparse = False
-
- def __getitem__( self, i ):
- return self.exprs[i]
-
- def append( self, other ):
- self.exprs.append( other )
- self.strRepr = None
- return self
-
- def leaveWhitespace( self ):
- """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on
- all contained expressions."""
- self.skipWhitespace = False
- self.exprs = [ e.copy() for e in self.exprs ]
- for e in self.exprs:
- e.leaveWhitespace()
- return self
-
- def ignore( self, other ):
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- super( ParseExpression, self).ignore( other )
- for e in self.exprs:
- e.ignore( self.ignoreExprs[-1] )
- else:
- super( ParseExpression, self).ignore( other )
- for e in self.exprs:
- e.ignore( self.ignoreExprs[-1] )
- return self
-
- def __str__( self ):
- try:
- return super(ParseExpression,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None:
- self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) )
- return self.strRepr
-
- def streamline( self ):
- super(ParseExpression,self).streamline()
-
- for e in self.exprs:
- e.streamline()
-
- # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d )
- # but only if there are no parse actions or resultsNames on the nested And's
- # (likewise for Or's and MatchFirst's)
- if ( len(self.exprs) == 2 ):
- other = self.exprs[0]
- if ( isinstance( other, self.__class__ ) and
- not(other.parseAction) and
- other.resultsName is None and
- not other.debug ):
- self.exprs = other.exprs[:] + [ self.exprs[1] ]
- self.strRepr = None
- self.mayReturnEmpty |= other.mayReturnEmpty
- self.mayIndexError |= other.mayIndexError
-
- other = self.exprs[-1]
- if ( isinstance( other, self.__class__ ) and
- not(other.parseAction) and
- other.resultsName is None and
- not other.debug ):
- self.exprs = self.exprs[:-1] + other.exprs[:]
- self.strRepr = None
- self.mayReturnEmpty |= other.mayReturnEmpty
- self.mayIndexError |= other.mayIndexError
-
- self.errmsg = "Expected " + _ustr(self)
-
- return self
-
- def setResultsName( self, name, listAllMatches=False ):
- ret = super(ParseExpression,self).setResultsName(name,listAllMatches)
- return ret
-
- def validate( self, validateTrace=[] ):
- tmp = validateTrace[:]+[self]
- for e in self.exprs:
- e.validate(tmp)
- self.checkRecursion( [] )
-
- def copy(self):
- ret = super(ParseExpression,self).copy()
- ret.exprs = [e.copy() for e in self.exprs]
- return ret
-
-class And(ParseExpression):
- """
- Requires all given C{ParseExpression}s to be found in the given order.
- Expressions may be separated by whitespace.
- May be constructed using the C{'+'} operator.
- May also be constructed using the C{'-'} operator, which will suppress backtracking.
-
- Example::
- integer = Word(nums)
- name_expr = OneOrMore(Word(alphas))
-
- expr = And([integer("id"),name_expr("name"),integer("age")])
- # more easily written as:
- expr = integer("id") + name_expr("name") + integer("age")
- """
-
- class _ErrorStop(Empty):
- def __init__(self, *args, **kwargs):
- super(And._ErrorStop,self).__init__(*args, **kwargs)
- self.name = '-'
- self.leaveWhitespace()
-
- def __init__( self, exprs, savelist = True ):
- super(And,self).__init__(exprs, savelist)
- self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
- self.setWhitespaceChars( self.exprs[0].whiteChars )
- self.skipWhitespace = self.exprs[0].skipWhitespace
- self.callPreparse = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- # pass False as last arg to _parse for first element, since we already
- # pre-parsed the string as part of our And pre-parsing
- loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
- errorStop = False
- for e in self.exprs[1:]:
- if isinstance(e, And._ErrorStop):
- errorStop = True
- continue
- if errorStop:
- try:
- loc, exprtokens = e._parse( instring, loc, doActions )
- except ParseSyntaxException:
- raise
- except ParseBaseException as pe:
- pe.__traceback__ = None
- raise ParseSyntaxException._from_exception(pe)
- except IndexError:
- raise ParseSyntaxException(instring, len(instring), self.errmsg, self)
- else:
- loc, exprtokens = e._parse( instring, loc, doActions )
- if exprtokens or exprtokens.haskeys():
- resultlist += exprtokens
- return loc, resultlist
-
- def __iadd__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #And( [ self, other ] )
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
- if not e.mayReturnEmpty:
- break
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
-
-class Or(ParseExpression):
- """
- Requires that at least one C{ParseExpression} is found.
- If two expressions match, the expression that matches the longest string will be used.
- May be constructed using the C{'^'} operator.
-
- Example::
- # construct Or using '^' operator
-
- number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums))
- print(number.searchString("123 3.1416 789"))
- prints::
- [['123'], ['3.1416'], ['789']]
- """
- def __init__( self, exprs, savelist = False ):
- super(Or,self).__init__(exprs, savelist)
- if self.exprs:
- self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
- else:
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- maxExcLoc = -1
- maxException = None
- matches = []
- for e in self.exprs:
- try:
- loc2 = e.tryParse( instring, loc )
- except ParseException as err:
- err.__traceback__ = None
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
- except IndexError:
- if len(instring) > maxExcLoc:
- maxException = ParseException(instring,len(instring),e.errmsg,self)
- maxExcLoc = len(instring)
- else:
- # save match among all matches, to retry longest to shortest
- matches.append((loc2, e))
-
- if matches:
- matches.sort(key=lambda x: -x[0])
- for _,e in matches:
- try:
- return e._parse( instring, loc, doActions )
- except ParseException as err:
- err.__traceback__ = None
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
-
- if maxException is not None:
- maxException.msg = self.errmsg
- raise maxException
- else:
- raise ParseException(instring, loc, "no defined alternatives to match", self)
-
-
- def __ixor__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #Or( [ self, other ] )
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class MatchFirst(ParseExpression):
- """
- Requires that at least one C{ParseExpression} is found.
- If two expressions match, the first one listed is the one that will match.
- May be constructed using the C{'|'} operator.
-
- Example::
- # construct MatchFirst using '|' operator
-
- # watch the order of expressions to match
- number = Word(nums) | Combine(Word(nums) + '.' + Word(nums))
- print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']]
-
- # put more selective expression first
- number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums)
- print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']]
- """
- def __init__( self, exprs, savelist = False ):
- super(MatchFirst,self).__init__(exprs, savelist)
- if self.exprs:
- self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
- else:
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- maxExcLoc = -1
- maxException = None
- for e in self.exprs:
- try:
- ret = e._parse( instring, loc, doActions )
- return ret
- except ParseException as err:
- if err.loc > maxExcLoc:
- maxException = err
- maxExcLoc = err.loc
- except IndexError:
- if len(instring) > maxExcLoc:
- maxException = ParseException(instring,len(instring),e.errmsg,self)
- maxExcLoc = len(instring)
-
- # only got here if no expression matched, raise exception for match that made it the furthest
- else:
- if maxException is not None:
- maxException.msg = self.errmsg
- raise maxException
- else:
- raise ParseException(instring, loc, "no defined alternatives to match", self)
-
- def __ior__(self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass( other )
- return self.append( other ) #MatchFirst( [ self, other ] )
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class Each(ParseExpression):
- """
- Requires all given C{ParseExpression}s to be found, but in any order.
- Expressions may be separated by whitespace.
- May be constructed using the C{'&'} operator.
-
- Example::
- color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN")
- shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON")
- integer = Word(nums)
- shape_attr = "shape:" + shape_type("shape")
- posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn")
- color_attr = "color:" + color("color")
- size_attr = "size:" + integer("size")
-
- # use Each (using operator '&') to accept attributes in any order
- # (shape and posn are required, color and size are optional)
- shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr)
-
- shape_spec.runTests('''
- shape: SQUARE color: BLACK posn: 100, 120
- shape: CIRCLE size: 50 color: BLUE posn: 50,80
- color:GREEN size:20 shape:TRIANGLE posn:20,40
- '''
- )
- prints::
- shape: SQUARE color: BLACK posn: 100, 120
- ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']]
- - color: BLACK
- - posn: ['100', ',', '120']
- - x: 100
- - y: 120
- - shape: SQUARE
-
-
- shape: CIRCLE size: 50 color: BLUE posn: 50,80
- ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']]
- - color: BLUE
- - posn: ['50', ',', '80']
- - x: 50
- - y: 80
- - shape: CIRCLE
- - size: 50
-
-
- color: GREEN size: 20 shape: TRIANGLE posn: 20,40
- ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']]
- - color: GREEN
- - posn: ['20', ',', '40']
- - x: 20
- - y: 40
- - shape: TRIANGLE
- - size: 20
- """
- def __init__( self, exprs, savelist = True ):
- super(Each,self).__init__(exprs, savelist)
- self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
- self.skipWhitespace = True
- self.initExprGroups = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.initExprGroups:
- self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional))
- opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ]
- opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)]
- self.optionals = opt1 + opt2
- self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ]
- self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ]
- self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ]
- self.required += self.multirequired
- self.initExprGroups = False
- tmpLoc = loc
- tmpReqd = self.required[:]
- tmpOpt = self.optionals[:]
- matchOrder = []
-
- keepMatching = True
- while keepMatching:
- tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired
- failed = []
- for e in tmpExprs:
- try:
- tmpLoc = e.tryParse( instring, tmpLoc )
- except ParseException:
- failed.append(e)
- else:
- matchOrder.append(self.opt1map.get(id(e),e))
- if e in tmpReqd:
- tmpReqd.remove(e)
- elif e in tmpOpt:
- tmpOpt.remove(e)
- if len(failed) == len(tmpExprs):
- keepMatching = False
-
- if tmpReqd:
- missing = ", ".join(_ustr(e) for e in tmpReqd)
- raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing )
-
- # add any unmatched Optionals, in case they have default values defined
- matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt]
-
- resultlist = []
- for e in matchOrder:
- loc,results = e._parse(instring,loc,doActions)
- resultlist.append(results)
-
- finalResults = sum(resultlist, ParseResults([]))
- return loc, finalResults
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}"
-
- return self.strRepr
-
- def checkRecursion( self, parseElementList ):
- subRecCheckList = parseElementList[:] + [ self ]
- for e in self.exprs:
- e.checkRecursion( subRecCheckList )
-
-
-class ParseElementEnhance(ParserElement):
- """
- Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens.
- """
- def __init__( self, expr, savelist=False ):
- super(ParseElementEnhance,self).__init__(savelist)
- if isinstance( expr, basestring ):
- if issubclass(ParserElement._literalStringClass, Token):
- expr = ParserElement._literalStringClass(expr)
- else:
- expr = ParserElement._literalStringClass(Literal(expr))
- self.expr = expr
- self.strRepr = None
- if expr is not None:
- self.mayIndexError = expr.mayIndexError
- self.mayReturnEmpty = expr.mayReturnEmpty
- self.setWhitespaceChars( expr.whiteChars )
- self.skipWhitespace = expr.skipWhitespace
- self.saveAsList = expr.saveAsList
- self.callPreparse = expr.callPreparse
- self.ignoreExprs.extend(expr.ignoreExprs)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.expr is not None:
- return self.expr._parse( instring, loc, doActions, callPreParse=False )
- else:
- raise ParseException("",loc,self.errmsg,self)
-
- def leaveWhitespace( self ):
- self.skipWhitespace = False
- self.expr = self.expr.copy()
- if self.expr is not None:
- self.expr.leaveWhitespace()
- return self
-
- def ignore( self, other ):
- if isinstance( other, Suppress ):
- if other not in self.ignoreExprs:
- super( ParseElementEnhance, self).ignore( other )
- if self.expr is not None:
- self.expr.ignore( self.ignoreExprs[-1] )
- else:
- super( ParseElementEnhance, self).ignore( other )
- if self.expr is not None:
- self.expr.ignore( self.ignoreExprs[-1] )
- return self
-
- def streamline( self ):
- super(ParseElementEnhance,self).streamline()
- if self.expr is not None:
- self.expr.streamline()
- return self
-
- def checkRecursion( self, parseElementList ):
- if self in parseElementList:
- raise RecursiveGrammarException( parseElementList+[self] )
- subRecCheckList = parseElementList[:] + [ self ]
- if self.expr is not None:
- self.expr.checkRecursion( subRecCheckList )
-
- def validate( self, validateTrace=[] ):
- tmp = validateTrace[:]+[self]
- if self.expr is not None:
- self.expr.validate(tmp)
- self.checkRecursion( [] )
-
- def __str__( self ):
- try:
- return super(ParseElementEnhance,self).__str__()
- except Exception:
- pass
-
- if self.strRepr is None and self.expr is not None:
- self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) )
- return self.strRepr
-
-
-class FollowedBy(ParseElementEnhance):
- """
- Lookahead matching of the given parse expression. C{FollowedBy}
- does I{not} advance the parsing position within the input string, it only
- verifies that the specified parse expression matches at the current
- position. C{FollowedBy} always returns a null token list.
-
- Example::
- # use FollowedBy to match a label only if it is followed by a ':'
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
-
- OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint()
- prints::
- [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']]
- """
- def __init__( self, expr ):
- super(FollowedBy,self).__init__(expr)
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- self.expr.tryParse( instring, loc )
- return loc, []
-
-
-class NotAny(ParseElementEnhance):
- """
- Lookahead to disallow matching with the given parse expression. C{NotAny}
- does I{not} advance the parsing position within the input string, it only
- verifies that the specified parse expression does I{not} match at the current
- position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny}
- always returns a null token list. May be constructed using the '~' operator.
-
- Example::
-
- """
- def __init__( self, expr ):
- super(NotAny,self).__init__(expr)
- #~ self.leaveWhitespace()
- self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs
- self.mayReturnEmpty = True
- self.errmsg = "Found unwanted token, "+_ustr(self.expr)
-
- def parseImpl( self, instring, loc, doActions=True ):
- if self.expr.canParseNext(instring, loc):
- raise ParseException(instring, loc, self.errmsg, self)
- return loc, []
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "~{" + _ustr(self.expr) + "}"
-
- return self.strRepr
-
-class _MultipleMatch(ParseElementEnhance):
- def __init__( self, expr, stopOn=None):
- super(_MultipleMatch, self).__init__(expr)
- self.saveAsList = True
- ender = stopOn
- if isinstance(ender, basestring):
- ender = ParserElement._literalStringClass(ender)
- self.not_ender = ~ender if ender is not None else None
-
- def parseImpl( self, instring, loc, doActions=True ):
- self_expr_parse = self.expr._parse
- self_skip_ignorables = self._skipIgnorables
- check_ender = self.not_ender is not None
- if check_ender:
- try_not_ender = self.not_ender.tryParse
-
- # must be at least one (but first see if we are the stopOn sentinel;
- # if so, fail)
- if check_ender:
- try_not_ender(instring, loc)
- loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
- try:
- hasIgnoreExprs = (not not self.ignoreExprs)
- while 1:
- if check_ender:
- try_not_ender(instring, loc)
- if hasIgnoreExprs:
- preloc = self_skip_ignorables( instring, loc )
- else:
- preloc = loc
- loc, tmptokens = self_expr_parse( instring, preloc, doActions )
- if tmptokens or tmptokens.haskeys():
- tokens += tmptokens
- except (ParseException,IndexError):
- pass
-
- return loc, tokens
-
-class OneOrMore(_MultipleMatch):
- """
- Repetition of one or more of the given expression.
-
- Parameters:
- - expr - expression that must match one or more times
- - stopOn - (default=C{None}) - expression for a terminating sentinel
- (only required if the sentinel would ordinarily match the repetition
- expression)
-
- Example::
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
-
- text = "shape: SQUARE posn: upper left color: BLACK"
- OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']]
-
- # use stopOn attribute for OneOrMore to avoid reading label string as part of the data
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
- OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']]
-
- # could also be written as
- (attr_expr * (1,)).parseString(text).pprint()
- """
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "{" + _ustr(self.expr) + "}..."
-
- return self.strRepr
-
-class ZeroOrMore(_MultipleMatch):
- """
- Optional repetition of zero or more of the given expression.
-
- Parameters:
- - expr - expression that must match zero or more times
- - stopOn - (default=C{None}) - expression for a terminating sentinel
- (only required if the sentinel would ordinarily match the repetition
- expression)
-
- Example: similar to L{OneOrMore}
- """
- def __init__( self, expr, stopOn=None):
- super(ZeroOrMore,self).__init__(expr, stopOn=stopOn)
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- try:
- return super(ZeroOrMore, self).parseImpl(instring, loc, doActions)
- except (ParseException,IndexError):
- return loc, []
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "[" + _ustr(self.expr) + "]..."
-
- return self.strRepr
-
-class _NullToken(object):
- def __bool__(self):
- return False
- __nonzero__ = __bool__
- def __str__(self):
- return ""
-
-_optionalNotMatched = _NullToken()
-class Optional(ParseElementEnhance):
- """
- Optional matching of the given expression.
-
- Parameters:
- - expr - expression that must match zero or more times
- - default (optional) - value to be returned if the optional expression is not found.
-
- Example::
- # US postal code can be a 5-digit zip, plus optional 4-digit qualifier
- zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4)))
- zip.runTests('''
- # traditional ZIP code
- 12345
-
- # ZIP+4 form
- 12101-0001
-
- # invalid ZIP
- 98765-
- ''')
- prints::
- # traditional ZIP code
- 12345
- ['12345']
-
- # ZIP+4 form
- 12101-0001
- ['12101-0001']
-
- # invalid ZIP
- 98765-
- ^
- FAIL: Expected end of text (at char 5), (line:1, col:6)
- """
- def __init__( self, expr, default=_optionalNotMatched ):
- super(Optional,self).__init__( expr, savelist=False )
- self.saveAsList = self.expr.saveAsList
- self.defaultValue = default
- self.mayReturnEmpty = True
-
- def parseImpl( self, instring, loc, doActions=True ):
- try:
- loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
- except (ParseException,IndexError):
- if self.defaultValue is not _optionalNotMatched:
- if self.expr.resultsName:
- tokens = ParseResults([ self.defaultValue ])
- tokens[self.expr.resultsName] = self.defaultValue
- else:
- tokens = [ self.defaultValue ]
- else:
- tokens = []
- return loc, tokens
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
-
- if self.strRepr is None:
- self.strRepr = "[" + _ustr(self.expr) + "]"
-
- return self.strRepr
-
-class SkipTo(ParseElementEnhance):
- """
- Token for skipping over all undefined text until the matched expression is found.
-
- Parameters:
- - expr - target expression marking the end of the data to be skipped
- - include - (default=C{False}) if True, the target expression is also parsed
- (the skipped text and target expression are returned as a 2-element list).
- - ignore - (default=C{None}) used to define grammars (typically quoted strings and
- comments) that might contain false matches to the target expression
- - failOn - (default=C{None}) define expressions that are not allowed to be
- included in the skipped test; if found before the target expression is found,
- the SkipTo is not a match
-
- Example::
- report = '''
- Outstanding Issues Report - 1 Jan 2000
-
- # | Severity | Description | Days Open
- -----+----------+-------------------------------------------+-----------
- 101 | Critical | Intermittent system crash | 6
- 94 | Cosmetic | Spelling error on Login ('log|n') | 14
- 79 | Minor | System slow when running too many reports | 47
- '''
- integer = Word(nums)
- SEP = Suppress('|')
- # use SkipTo to simply match everything up until the next SEP
- # - ignore quoted strings, so that a '|' character inside a quoted string does not match
- # - parse action will call token.strip() for each matched token, i.e., the description body
- string_data = SkipTo(SEP, ignore=quotedString)
- string_data.setParseAction(tokenMap(str.strip))
- ticket_expr = (integer("issue_num") + SEP
- + string_data("sev") + SEP
- + string_data("desc") + SEP
- + integer("days_open"))
-
- for tkt in ticket_expr.searchString(report):
- print tkt.dump()
- prints::
- ['101', 'Critical', 'Intermittent system crash', '6']
- - days_open: 6
- - desc: Intermittent system crash
- - issue_num: 101
- - sev: Critical
- ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14']
- - days_open: 14
- - desc: Spelling error on Login ('log|n')
- - issue_num: 94
- - sev: Cosmetic
- ['79', 'Minor', 'System slow when running too many reports', '47']
- - days_open: 47
- - desc: System slow when running too many reports
- - issue_num: 79
- - sev: Minor
- """
- def __init__( self, other, include=False, ignore=None, failOn=None ):
- super( SkipTo, self ).__init__( other )
- self.ignoreExpr = ignore
- self.mayReturnEmpty = True
- self.mayIndexError = False
- self.includeMatch = include
- self.asList = False
- if isinstance(failOn, basestring):
- self.failOn = ParserElement._literalStringClass(failOn)
- else:
- self.failOn = failOn
- self.errmsg = "No match found for "+_ustr(self.expr)
-
- def parseImpl( self, instring, loc, doActions=True ):
- startloc = loc
- instrlen = len(instring)
- expr = self.expr
- expr_parse = self.expr._parse
- self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None
- self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None
-
- tmploc = loc
- while tmploc <= instrlen:
- if self_failOn_canParseNext is not None:
- # break if failOn expression matches
- if self_failOn_canParseNext(instring, tmploc):
- break
-
- if self_ignoreExpr_tryParse is not None:
- # advance past ignore expressions
- while 1:
- try:
- tmploc = self_ignoreExpr_tryParse(instring, tmploc)
- except ParseBaseException:
- break
-
- try:
- expr_parse(instring, tmploc, doActions=False, callPreParse=False)
- except (ParseException, IndexError):
- # no match, advance loc in string
- tmploc += 1
- else:
- # matched skipto expr, done
- break
-
- else:
- # ran off the end of the input string without matching skipto expr, fail
- raise ParseException(instring, loc, self.errmsg, self)
-
- # build up return values
- loc = tmploc
- skiptext = instring[startloc:loc]
- skipresult = ParseResults(skiptext)
-
- if self.includeMatch:
- loc, mat = expr_parse(instring,loc,doActions,callPreParse=False)
- skipresult += mat
-
- return loc, skipresult
-
-class Forward(ParseElementEnhance):
- """
- Forward declaration of an expression to be defined later -
- used for recursive grammars, such as algebraic infix notation.
- When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator.
-
- Note: take care when assigning to C{Forward} not to overlook precedence of operators.
- Specifically, '|' has a lower precedence than '<<', so that::
- fwdExpr << a | b | c
- will actually be evaluated as::
- (fwdExpr << a) | b | c
- thereby leaving b and c out as parseable alternatives. It is recommended that you
- explicitly group the values inserted into the C{Forward}::
- fwdExpr << (a | b | c)
- Converting to use the '<<=' operator instead will avoid this problem.
-
- See L{ParseResults.pprint} for an example of a recursive parser created using
- C{Forward}.
- """
- def __init__( self, other=None ):
- super(Forward,self).__init__( other, savelist=False )
-
- def __lshift__( self, other ):
- if isinstance( other, basestring ):
- other = ParserElement._literalStringClass(other)
- self.expr = other
- self.strRepr = None
- self.mayIndexError = self.expr.mayIndexError
- self.mayReturnEmpty = self.expr.mayReturnEmpty
- self.setWhitespaceChars( self.expr.whiteChars )
- self.skipWhitespace = self.expr.skipWhitespace
- self.saveAsList = self.expr.saveAsList
- self.ignoreExprs.extend(self.expr.ignoreExprs)
- return self
-
- def __ilshift__(self, other):
- return self << other
-
- def leaveWhitespace( self ):
- self.skipWhitespace = False
- return self
-
- def streamline( self ):
- if not self.streamlined:
- self.streamlined = True
- if self.expr is not None:
- self.expr.streamline()
- return self
-
- def validate( self, validateTrace=[] ):
- if self not in validateTrace:
- tmp = validateTrace[:]+[self]
- if self.expr is not None:
- self.expr.validate(tmp)
- self.checkRecursion([])
-
- def __str__( self ):
- if hasattr(self,"name"):
- return self.name
- return self.__class__.__name__ + ": ..."
-
- # stubbed out for now - creates awful memory and perf issues
- self._revertClass = self.__class__
- self.__class__ = _ForwardNoRecurse
- try:
- if self.expr is not None:
- retString = _ustr(self.expr)
- else:
- retString = "None"
- finally:
- self.__class__ = self._revertClass
- return self.__class__.__name__ + ": " + retString
-
- def copy(self):
- if self.expr is not None:
- return super(Forward,self).copy()
- else:
- ret = Forward()
- ret <<= self
- return ret
-
-class _ForwardNoRecurse(Forward):
- def __str__( self ):
- return "..."
-
-class TokenConverter(ParseElementEnhance):
- """
- Abstract subclass of C{ParseExpression}, for converting parsed results.
- """
- def __init__( self, expr, savelist=False ):
- super(TokenConverter,self).__init__( expr )#, savelist )
- self.saveAsList = False
-
-class Combine(TokenConverter):
- """
- Converter to concatenate all matching tokens to a single string.
- By default, the matching patterns must also be contiguous in the input string;
- this can be disabled by specifying C{'adjacent=False'} in the constructor.
-
- Example::
- real = Word(nums) + '.' + Word(nums)
- print(real.parseString('3.1416')) # -> ['3', '.', '1416']
- # will also erroneously match the following
- print(real.parseString('3. 1416')) # -> ['3', '.', '1416']
-
- real = Combine(Word(nums) + '.' + Word(nums))
- print(real.parseString('3.1416')) # -> ['3.1416']
- # no match when there are internal spaces
- print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...)
- """
- def __init__( self, expr, joinString="", adjacent=True ):
- super(Combine,self).__init__( expr )
- # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself
- if adjacent:
- self.leaveWhitespace()
- self.adjacent = adjacent
- self.skipWhitespace = True
- self.joinString = joinString
- self.callPreparse = True
-
- def ignore( self, other ):
- if self.adjacent:
- ParserElement.ignore(self, other)
- else:
- super( Combine, self).ignore( other )
- return self
-
- def postParse( self, instring, loc, tokenlist ):
- retToks = tokenlist.copy()
- del retToks[:]
- retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults)
-
- if self.resultsName and retToks.haskeys():
- return [ retToks ]
- else:
- return retToks
-
-class Group(TokenConverter):
- """
- Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions.
-
- Example::
- ident = Word(alphas)
- num = Word(nums)
- term = ident | num
- func = ident + Optional(delimitedList(term))
- print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100']
-
- func = ident + Group(Optional(delimitedList(term)))
- print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']]
- """
- def __init__( self, expr ):
- super(Group,self).__init__( expr )
- self.saveAsList = True
-
- def postParse( self, instring, loc, tokenlist ):
- return [ tokenlist ]
-
-class Dict(TokenConverter):
- """
- Converter to return a repetitive expression as a list, but also as a dictionary.
- Each element can also be referenced using the first token in the expression as its key.
- Useful for tabular report scraping when the first column can be used as a item key.
-
- Example::
- data_word = Word(alphas)
- label = data_word + FollowedBy(':')
- attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
-
- text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
- attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
-
- # print attributes as plain groups
- print(OneOrMore(attr_expr).parseString(text).dump())
-
- # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names
- result = Dict(OneOrMore(Group(attr_expr))).parseString(text)
- print(result.dump())
-
- # access named fields as dict entries, or output as dict
- print(result['shape'])
- print(result.asDict())
- prints::
- ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap']
-
- [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
- - color: light blue
- - posn: upper left
- - shape: SQUARE
- - texture: burlap
- SQUARE
- {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'}
- See more examples at L{ParseResults} of accessing fields by results name.
- """
- def __init__( self, expr ):
- super(Dict,self).__init__( expr )
- self.saveAsList = True
-
- def postParse( self, instring, loc, tokenlist ):
- for i,tok in enumerate(tokenlist):
- if len(tok) == 0:
- continue
- ikey = tok[0]
- if isinstance(ikey,int):
- ikey = _ustr(tok[0]).strip()
- if len(tok)==1:
- tokenlist[ikey] = _ParseResultsWithOffset("",i)
- elif len(tok)==2 and not isinstance(tok[1],ParseResults):
- tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i)
- else:
- dictvalue = tok.copy() #ParseResults(i)
- del dictvalue[0]
- if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()):
- tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i)
- else:
- tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i)
-
- if self.resultsName:
- return [ tokenlist ]
- else:
- return tokenlist
-
-
-class Suppress(TokenConverter):
- """
- Converter for ignoring the results of a parsed expression.
-
- Example::
- source = "a, b, c,d"
- wd = Word(alphas)
- wd_list1 = wd + ZeroOrMore(',' + wd)
- print(wd_list1.parseString(source))
-
- # often, delimiters that are useful during parsing are just in the
- # way afterward - use Suppress to keep them out of the parsed output
- wd_list2 = wd + ZeroOrMore(Suppress(',') + wd)
- print(wd_list2.parseString(source))
- prints::
- ['a', ',', 'b', ',', 'c', ',', 'd']
- ['a', 'b', 'c', 'd']
- (See also L{delimitedList}.)
- """
- def postParse( self, instring, loc, tokenlist ):
- return []
-
- def suppress( self ):
- return self
-
-
-class OnlyOnce(object):
- """
- Wrapper for parse actions, to ensure they are only called once.
- """
- def __init__(self, methodCall):
- self.callable = _trim_arity(methodCall)
- self.called = False
- def __call__(self,s,l,t):
- if not self.called:
- results = self.callable(s,l,t)
- self.called = True
- return results
- raise ParseException(s,l,"")
- def reset(self):
- self.called = False
-
-def traceParseAction(f):
- """
- Decorator for debugging parse actions.
-
- When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".}
- When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised.
-
- Example::
- wd = Word(alphas)
-
- @traceParseAction
- def remove_duplicate_chars(tokens):
- return ''.join(sorted(set(''.join(tokens))))
-
- wds = OneOrMore(wd).setParseAction(remove_duplicate_chars)
- print(wds.parseString("slkdjs sld sldd sdlf sdljf"))
- prints::
- >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {}))
- <<leaving remove_duplicate_chars (ret: 'dfjkls')
- ['dfjkls']
- """
- f = _trim_arity(f)
- def z(*paArgs):
- thisFunc = f.__name__
- s,l,t = paArgs[-3:]
- if len(paArgs)>3:
- thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc
- sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) )
- try:
- ret = f(*paArgs)
- except Exception as exc:
- sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) )
- raise
- sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) )
- return ret
- try:
- z.__name__ = f.__name__
- except AttributeError:
- pass
- return z
-
-#
-# global helpers
-#
-def delimitedList( expr, delim=",", combine=False ):
- """
- Helper to define a delimited list of expressions - the delimiter defaults to ','.
- By default, the list elements and delimiters can have intervening whitespace, and
- comments, but this can be overridden by passing C{combine=True} in the constructor.
- If C{combine} is set to C{True}, the matching tokens are returned as a single token
- string, with the delimiters included; otherwise, the matching tokens are returned
- as a list of tokens, with the delimiters suppressed.
-
- Example::
- delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc']
- delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE']
- """
- dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..."
- if combine:
- return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName)
- else:
- return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName)
-
-def countedArray( expr, intExpr=None ):
- """
- Helper to define a counted list of expressions.
- This helper defines a pattern of the form::
- integer expr expr expr...
- where the leading integer tells how many expr expressions follow.
- The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
-
- If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value.
-
- Example::
- countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd']
-
- # in this parser, the leading integer value is given in binary,
- # '10' indicating that 2 values are in the array
- binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2))
- countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd']
- """
- arrayExpr = Forward()
- def countFieldParseAction(s,l,t):
- n = t[0]
- arrayExpr << (n and Group(And([expr]*n)) or Group(empty))
- return []
- if intExpr is None:
- intExpr = Word(nums).setParseAction(lambda t:int(t[0]))
- else:
- intExpr = intExpr.copy()
- intExpr.setName("arrayLen")
- intExpr.addParseAction(countFieldParseAction, callDuringTry=True)
- return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...')
-
-def _flatten(L):
- ret = []
- for i in L:
- if isinstance(i,list):
- ret.extend(_flatten(i))
- else:
- ret.append(i)
- return ret
-
-def matchPreviousLiteral(expr):
- """
- Helper to define an expression that is indirectly defined from
- the tokens matched in a previous expression, that is, it looks
- for a 'repeat' of a previous expression. For example::
- first = Word(nums)
- second = matchPreviousLiteral(first)
- matchExpr = first + ":" + second
- will match C{"1:1"}, but not C{"1:2"}. Because this matches a
- previous literal, will also match the leading C{"1:1"} in C{"1:10"}.
- If this is not desired, use C{matchPreviousExpr}.
- Do I{not} use with packrat parsing enabled.
- """
- rep = Forward()
- def copyTokenToRepeater(s,l,t):
- if t:
- if len(t) == 1:
- rep << t[0]
- else:
- # flatten t tokens
- tflat = _flatten(t.asList())
- rep << And(Literal(tt) for tt in tflat)
- else:
- rep << Empty()
- expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
- rep.setName('(prev) ' + _ustr(expr))
- return rep
-
-def matchPreviousExpr(expr):
- """
- Helper to define an expression that is indirectly defined from
- the tokens matched in a previous expression, that is, it looks
- for a 'repeat' of a previous expression. For example::
- first = Word(nums)
- second = matchPreviousExpr(first)
- matchExpr = first + ":" + second
- will match C{"1:1"}, but not C{"1:2"}. Because this matches by
- expressions, will I{not} match the leading C{"1:1"} in C{"1:10"};
- the expressions are evaluated first, and then compared, so
- C{"1"} is compared with C{"10"}.
- Do I{not} use with packrat parsing enabled.
- """
- rep = Forward()
- e2 = expr.copy()
- rep <<= e2
- def copyTokenToRepeater(s,l,t):
- matchTokens = _flatten(t.asList())
- def mustMatchTheseTokens(s,l,t):
- theseTokens = _flatten(t.asList())
- if theseTokens != matchTokens:
- raise ParseException("",0,"")
- rep.setParseAction( mustMatchTheseTokens, callDuringTry=True )
- expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
- rep.setName('(prev) ' + _ustr(expr))
- return rep
-
-def _escapeRegexRangeChars(s):
- #~ escape these chars: ^-]
- for c in r"\^-]":
- s = s.replace(c,_bslash+c)
- s = s.replace("\n",r"\n")
- s = s.replace("\t",r"\t")
- return _ustr(s)
-
-def oneOf( strs, caseless=False, useRegex=True ):
- """
- Helper to quickly define a set of alternative Literals, and makes sure to do
- longest-first testing when there is a conflict, regardless of the input order,
- but returns a C{L{MatchFirst}} for best performance.
-
- Parameters:
- - strs - a string of space-delimited literals, or a collection of string literals
- - caseless - (default=C{False}) - treat all literals as caseless
- - useRegex - (default=C{True}) - as an optimization, will generate a Regex
- object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or
- if creating a C{Regex} raises an exception)
-
- Example::
- comp_oper = oneOf("< = > <= >= !=")
- var = Word(alphas)
- number = Word(nums)
- term = var | number
- comparison_expr = term + comp_oper + term
- print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12"))
- prints::
- [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']]
- """
- if caseless:
- isequal = ( lambda a,b: a.upper() == b.upper() )
- masks = ( lambda a,b: b.upper().startswith(a.upper()) )
- parseElementClass = CaselessLiteral
- else:
- isequal = ( lambda a,b: a == b )
- masks = ( lambda a,b: b.startswith(a) )
- parseElementClass = Literal
-
- symbols = []
- if isinstance(strs,basestring):
- symbols = strs.split()
- elif isinstance(strs, Iterable):
- symbols = list(strs)
- else:
- warnings.warn("Invalid argument to oneOf, expected string or iterable",
- SyntaxWarning, stacklevel=2)
- if not symbols:
- return NoMatch()
-
- i = 0
- while i < len(symbols)-1:
- cur = symbols[i]
- for j,other in enumerate(symbols[i+1:]):
- if ( isequal(other, cur) ):
- del symbols[i+j+1]
- break
- elif ( masks(cur, other) ):
- del symbols[i+j+1]
- symbols.insert(i,other)
- cur = other
- break
- else:
- i += 1
-
- if not caseless and useRegex:
- #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] ))
- try:
- if len(symbols)==len("".join(symbols)):
- return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols))
- else:
- return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols))
- except Exception:
- warnings.warn("Exception creating Regex for oneOf, building MatchFirst",
- SyntaxWarning, stacklevel=2)
-
-
- # last resort, just use MatchFirst
- return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols))
-
-def dictOf( key, value ):
- """
- Helper to easily and clearly define a dictionary by specifying the respective patterns
- for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens
- in the proper order. The key pattern can include delimiting markers or punctuation,
- as long as they are suppressed, thereby leaving the significant key text. The value
- pattern can include named results, so that the C{Dict} results can include named token
- fields.
-
- Example::
- text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
- attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
- print(OneOrMore(attr_expr).parseString(text).dump())
-
- attr_label = label
- attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)
-
- # similar to Dict, but simpler call format
- result = dictOf(attr_label, attr_value).parseString(text)
- print(result.dump())
- print(result['shape'])
- print(result.shape) # object attribute access works too
- print(result.asDict())
- prints::
- [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
- - color: light blue
- - posn: upper left
- - shape: SQUARE
- - texture: burlap
- SQUARE
- SQUARE
- {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'}
- """
- return Dict( ZeroOrMore( Group ( key + value ) ) )
-
-def originalTextFor(expr, asString=True):
- """
- Helper to return the original, untokenized text for a given expression. Useful to
- restore the parsed fields of an HTML start tag into the raw tag text itself, or to
- revert separate tokens with intervening whitespace back to the original matching
- input text. By default, returns astring containing the original parsed text.
-
- If the optional C{asString} argument is passed as C{False}, then the return value is a
- C{L{ParseResults}} containing any results names that were originally matched, and a
- single token containing the original matched text from the input string. So if
- the expression passed to C{L{originalTextFor}} contains expressions with defined
- results names, you must set C{asString} to C{False} if you want to preserve those
- results name values.
-
- Example::
- src = "this is test <b> bold <i>text</i> </b> normal text "
- for tag in ("b","i"):
- opener,closer = makeHTMLTags(tag)
- patt = originalTextFor(opener + SkipTo(closer) + closer)
- print(patt.searchString(src)[0])
- prints::
- ['<b> bold <i>text</i> </b>']
- ['<i>text</i>']
- """
- locMarker = Empty().setParseAction(lambda s,loc,t: loc)
- endlocMarker = locMarker.copy()
- endlocMarker.callPreparse = False
- matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end")
- if asString:
- extractText = lambda s,l,t: s[t._original_start:t._original_end]
- else:
- def extractText(s,l,t):
- t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]]
- matchExpr.setParseAction(extractText)
- matchExpr.ignoreExprs = expr.ignoreExprs
- return matchExpr
-
-def ungroup(expr):
- """
- Helper to undo pyparsing's default grouping of And expressions, even
- if all but one are non-empty.
- """
- return TokenConverter(expr).setParseAction(lambda t:t[0])
-
-def locatedExpr(expr):
- """
- Helper to decorate a returned token with its starting and ending locations in the input string.
- This helper adds the following results names:
- - locn_start = location where matched expression begins
- - locn_end = location where matched expression ends
- - value = the actual parsed results
-
- Be careful if the input text contains C{<TAB>} characters, you may want to call
- C{L{ParserElement.parseWithTabs}}
-
- Example::
- wd = Word(alphas)
- for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"):
- print(match)
- prints::
- [[0, 'ljsdf', 5]]
- [[8, 'lksdjjf', 15]]
- [[18, 'lkkjj', 23]]
- """
- locator = Empty().setParseAction(lambda s,l,t: l)
- return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end"))
-
-
-# convenience constants for positional expressions
-empty = Empty().setName("empty")
-lineStart = LineStart().setName("lineStart")
-lineEnd = LineEnd().setName("lineEnd")
-stringStart = StringStart().setName("stringStart")
-stringEnd = StringEnd().setName("stringEnd")
-
-_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
-_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16)))
-_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8)))
-_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1)
-_charRange = Group(_singleChar + Suppress("-") + _singleChar)
-_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"
-
-def srange(s):
- r"""
- Helper to easily define string ranges for use in Word construction. Borrows
- syntax from regexp '[]' string range definitions::
- srange("[0-9]") -> "0123456789"
- srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz"
- srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
- The input string must be enclosed in []'s, and the returned string is the expanded
- character set joined into a single string.
- The values enclosed in the []'s may be:
- - a single character
- - an escaped character with a leading backslash (such as C{\-} or C{\]})
- - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character)
- (C{\0x##} is also supported for backwards compatibility)
- - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character)
- - a range of any of the above, separated by a dash (C{'a-z'}, etc.)
- - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.)
- """
- _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1))
- try:
- return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body)
- except Exception:
- return ""
-
-def matchOnlyAtCol(n):
- """
- Helper method for defining parse actions that require matching at a specific
- column in the input text.
- """
- def verifyCol(strg,locn,toks):
- if col(locn,strg) != n:
- raise ParseException(strg,locn,"matched token not at column %d" % n)
- return verifyCol
-
-def replaceWith(replStr):
- """
- Helper method for common parse actions that simply return a literal value. Especially
- useful when used with C{L{transformString<ParserElement.transformString>}()}.
-
- Example::
- num = Word(nums).setParseAction(lambda toks: int(toks[0]))
- na = oneOf("N/A NA").setParseAction(replaceWith(math.nan))
- term = na | num
-
- OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234]
- """
- return lambda s,l,t: [replStr]
-
-def removeQuotes(s,l,t):
- """
- Helper parse action for removing quotation marks from parsed quoted strings.
-
- Example::
- # by default, quotation marks are included in parsed results
- quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"]
-
- # use removeQuotes to strip quotation marks from parsed results
- quotedString.setParseAction(removeQuotes)
- quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"]
- """
- return t[0][1:-1]
-
-def tokenMap(func, *args):
- """
- Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional
- args are passed, they are forwarded to the given function as additional arguments after
- the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the
- parsed data to an integer using base 16.
-
- Example (compare the last to example in L{ParserElement.transformString}::
- hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16))
- hex_ints.runTests('''
- 00 11 22 aa FF 0a 0d 1a
- ''')
-
- upperword = Word(alphas).setParseAction(tokenMap(str.upper))
- OneOrMore(upperword).runTests('''
- my kingdom for a horse
- ''')
-
- wd = Word(alphas).setParseAction(tokenMap(str.title))
- OneOrMore(wd).setParseAction(' '.join).runTests('''
- now is the winter of our discontent made glorious summer by this sun of york
- ''')
- prints::
- 00 11 22 aa FF 0a 0d 1a
- [0, 17, 34, 170, 255, 10, 13, 26]
-
- my kingdom for a horse
- ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE']
-
- now is the winter of our discontent made glorious summer by this sun of york
- ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York']
- """
- def pa(s,l,t):
- return [func(tokn, *args) for tokn in t]
-
- try:
- func_name = getattr(func, '__name__',
- getattr(func, '__class__').__name__)
- except Exception:
- func_name = str(func)
- pa.__name__ = func_name
-
- return pa
-
-upcaseTokens = tokenMap(lambda t: _ustr(t).upper())
-"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}"""
-
-downcaseTokens = tokenMap(lambda t: _ustr(t).lower())
-"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}"""
-
-def _makeTags(tagStr, xml):
- """Internal helper to construct opening and closing tag expressions, given a tag name"""
- if isinstance(tagStr,basestring):
- resname = tagStr
- tagStr = Keyword(tagStr, caseless=not xml)
- else:
- resname = tagStr.name
-
- tagAttrName = Word(alphas,alphanums+"_-:")
- if (xml):
- tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes )
- openTag = Suppress("<") + tagStr("tag") + \
- Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \
- Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
- else:
- printablesLessRAbrack = "".join(c for c in printables if c not in ">")
- tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack)
- openTag = Suppress("<") + tagStr("tag") + \
- Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
- Optional( Suppress("=") + tagAttrValue ) ))) + \
- Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
- closeTag = Combine(_L("</") + tagStr + ">")
-
- openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname)
- closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname)
- openTag.tag = resname
- closeTag.tag = resname
- return openTag, closeTag
-
-def makeHTMLTags(tagStr):
- """
- Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches
- tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values.
-
- Example::
- text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
- # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple
- a,a_end = makeHTMLTags("A")
- link_expr = a + SkipTo(a_end)("link_text") + a_end
-
- for link in link_expr.searchString(text):
- # attributes in the <A> tag (like "href" shown here) are also accessible as named results
- print(link.link_text, '->', link.href)
- prints::
- pyparsing -> http://pyparsing.wikispaces.com
- """
- return _makeTags( tagStr, False )
-
-def makeXMLTags(tagStr):
- """
- Helper to construct opening and closing tag expressions for XML, given a tag name. Matches
- tags only in the given upper/lower case.
-
- Example: similar to L{makeHTMLTags}
- """
- return _makeTags( tagStr, True )
-
-def withAttribute(*args,**attrDict):
- """
- Helper to create a validating parse action to be used with start tags created
- with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag
- with a required attribute value, to avoid false matches on common tags such as
- C{<TD>} or C{<DIV>}.
-
- Call C{withAttribute} with a series of attribute names and values. Specify the list
- of filter attributes names and values as:
- - keyword arguments, as in C{(align="right")}, or
- - as an explicit dict with C{**} operator, when an attribute name is also a Python
- reserved word, as in C{**{"class":"Customer", "align":"right"}}
- - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") )
- For attribute names with a namespace prefix, you must use the second form. Attribute
- names are matched insensitive to upper/lower case.
-
- If just testing for C{class} (with or without a namespace), use C{L{withClass}}.
-
- To verify that the attribute exists, but without specifying a value, pass
- C{withAttribute.ANY_VALUE} as the value.
-
- Example::
- html = '''
- <div>
- Some text
- <div type="grid">1 4 0 1 0</div>
- <div type="graph">1,3 2,3 1,1</div>
- <div>this has no type</div>
- </div>
-
- '''
- div,div_end = makeHTMLTags("div")
-
- # only match div tag having a type attribute with value "grid"
- div_grid = div().setParseAction(withAttribute(type="grid"))
- grid_expr = div_grid + SkipTo(div | div_end)("body")
- for grid_header in grid_expr.searchString(html):
- print(grid_header.body)
-
- # construct a match with any div tag having a type attribute, regardless of the value
- div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE))
- div_expr = div_any_type + SkipTo(div | div_end)("body")
- for div_header in div_expr.searchString(html):
- print(div_header.body)
- prints::
- 1 4 0 1 0
-
- 1 4 0 1 0
- 1,3 2,3 1,1
- """
- if args:
- attrs = args[:]
- else:
- attrs = attrDict.items()
- attrs = [(k,v) for k,v in attrs]
- def pa(s,l,tokens):
- for attrName,attrValue in attrs:
- if attrName not in tokens:
- raise ParseException(s,l,"no matching attribute " + attrName)
- if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue:
- raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" %
- (attrName, tokens[attrName], attrValue))
- return pa
-withAttribute.ANY_VALUE = object()
-
-def withClass(classname, namespace=''):
- """
- Simplified version of C{L{withAttribute}} when matching on a div class - made
- difficult because C{class} is a reserved word in Python.
-
- Example::
- html = '''
- <div>
- Some text
- <div class="grid">1 4 0 1 0</div>
- <div class="graph">1,3 2,3 1,1</div>
- <div>this &lt;div&gt; has no class</div>
- </div>
-
- '''
- div,div_end = makeHTMLTags("div")
- div_grid = div().setParseAction(withClass("grid"))
-
- grid_expr = div_grid + SkipTo(div | div_end)("body")
- for grid_header in grid_expr.searchString(html):
- print(grid_header.body)
-
- div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE))
- div_expr = div_any_type + SkipTo(div | div_end)("body")
- for div_header in div_expr.searchString(html):
- print(div_header.body)
- prints::
- 1 4 0 1 0
-
- 1 4 0 1 0
- 1,3 2,3 1,1
- """
- classattr = "%s:class" % namespace if namespace else "class"
- return withAttribute(**{classattr : classname})
-
-opAssoc = _Constants()
-opAssoc.LEFT = object()
-opAssoc.RIGHT = object()
-
-def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ):
- """
- Helper method for constructing grammars of expressions made up of
- operators working in a precedence hierarchy. Operators may be unary or
- binary, left- or right-associative. Parse actions can also be attached
- to operator expressions. The generated parser will also recognize the use
- of parentheses to override operator precedences (see example below).
-
- Note: if you define a deep operator list, you may see performance issues
- when using infixNotation. See L{ParserElement.enablePackrat} for a
- mechanism to potentially improve your parser performance.
-
- Parameters:
- - baseExpr - expression representing the most basic element for the nested
- - opList - list of tuples, one for each operator precedence level in the
- expression grammar; each tuple is of the form
- (opExpr, numTerms, rightLeftAssoc, parseAction), where:
- - opExpr is the pyparsing expression for the operator;
- may also be a string, which will be converted to a Literal;
- if numTerms is 3, opExpr is a tuple of two expressions, for the
- two operators separating the 3 terms
- - numTerms is the number of terms for this operator (must
- be 1, 2, or 3)
- - rightLeftAssoc is the indicator whether the operator is
- right or left associative, using the pyparsing-defined
- constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}.
- - parseAction is the parse action to be associated with
- expressions matching this operator expression (the
- parse action tuple member may be omitted); if the parse action
- is passed a tuple or list of functions, this is equivalent to
- calling C{setParseAction(*fn)} (L{ParserElement.setParseAction})
- - lpar - expression for matching left-parentheses (default=C{Suppress('(')})
- - rpar - expression for matching right-parentheses (default=C{Suppress(')')})
-
- Example::
- # simple example of four-function arithmetic with ints and variable names
- integer = pyparsing_common.signed_integer
- varname = pyparsing_common.identifier
-
- arith_expr = infixNotation(integer | varname,
- [
- ('-', 1, opAssoc.RIGHT),
- (oneOf('* /'), 2, opAssoc.LEFT),
- (oneOf('+ -'), 2, opAssoc.LEFT),
- ])
-
- arith_expr.runTests('''
- 5+3*6
- (5+3)*6
- -2--11
- ''', fullDump=False)
- prints::
- 5+3*6
- [[5, '+', [3, '*', 6]]]
-
- (5+3)*6
- [[[5, '+', 3], '*', 6]]
-
- -2--11
- [[['-', 2], '-', ['-', 11]]]
- """
- ret = Forward()
- lastExpr = baseExpr | ( lpar + ret + rpar )
- for i,operDef in enumerate(opList):
- opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4]
- termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr
- if arity == 3:
- if opExpr is None or len(opExpr) != 2:
- raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions")
- opExpr1, opExpr2 = opExpr
- thisExpr = Forward().setName(termName)
- if rightLeftAssoc == opAssoc.LEFT:
- if arity == 1:
- matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) )
- elif arity == 2:
- if opExpr is not None:
- matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) )
- else:
- matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) )
- elif arity == 3:
- matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \
- Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr )
- else:
- raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
- elif rightLeftAssoc == opAssoc.RIGHT:
- if arity == 1:
- # try to avoid LR with this extra test
- if not isinstance(opExpr, Optional):
- opExpr = Optional(opExpr)
- matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr )
- elif arity == 2:
- if opExpr is not None:
- matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) )
- else:
- matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) )
- elif arity == 3:
- matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \
- Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr )
- else:
- raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
- else:
- raise ValueError("operator must indicate right or left associativity")
- if pa:
- if isinstance(pa, (tuple, list)):
- matchExpr.setParseAction(*pa)
- else:
- matchExpr.setParseAction(pa)
- thisExpr <<= ( matchExpr.setName(termName) | lastExpr )
- lastExpr = thisExpr
- ret <<= lastExpr
- return ret
-
-operatorPrecedence = infixNotation
-"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release."""
-
-dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes")
-sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes")
-quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'|
- Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes")
-unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal")
-
-def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()):
- """
- Helper method for defining nested lists enclosed in opening and closing
- delimiters ("(" and ")" are the default).
-
- Parameters:
- - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression
- - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression
- - content - expression for items within the nested lists (default=C{None})
- - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString})
-
- If an expression is not provided for the content argument, the nested
- expression will capture all whitespace-delimited content between delimiters
- as a list of separate values.
-
- Use the C{ignoreExpr} argument to define expressions that may contain
- opening or closing characters that should not be treated as opening
- or closing characters for nesting, such as quotedString or a comment
- expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}.
- The default is L{quotedString}, but if no expressions are to be ignored,
- then pass C{None} for this argument.
-
- Example::
- data_type = oneOf("void int short long char float double")
- decl_data_type = Combine(data_type + Optional(Word('*')))
- ident = Word(alphas+'_', alphanums+'_')
- number = pyparsing_common.number
- arg = Group(decl_data_type + ident)
- LPAR,RPAR = map(Suppress, "()")
-
- code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment))
-
- c_function = (decl_data_type("type")
- + ident("name")
- + LPAR + Optional(delimitedList(arg), [])("args") + RPAR
- + code_body("body"))
- c_function.ignore(cStyleComment)
-
- source_code = '''
- int is_odd(int x) {
- return (x%2);
- }
-
- int dec_to_hex(char hchar) {
- if (hchar >= '0' && hchar <= '9') {
- return (ord(hchar)-ord('0'));
- } else {
- return (10+ord(hchar)-ord('A'));
- }
- }
- '''
- for func in c_function.searchString(source_code):
- print("%(name)s (%(type)s) args: %(args)s" % func)
-
- prints::
- is_odd (int) args: [['int', 'x']]
- dec_to_hex (int) args: [['char', 'hchar']]
- """
- if opener == closer:
- raise ValueError("opening and closing strings cannot be the same")
- if content is None:
- if isinstance(opener,basestring) and isinstance(closer,basestring):
- if len(opener) == 1 and len(closer)==1:
- if ignoreExpr is not None:
- content = (Combine(OneOrMore(~ignoreExpr +
- CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS
- ).setParseAction(lambda t:t[0].strip()))
- else:
- if ignoreExpr is not None:
- content = (Combine(OneOrMore(~ignoreExpr +
- ~Literal(opener) + ~Literal(closer) +
- CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) +
- CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
- ).setParseAction(lambda t:t[0].strip()))
- else:
- raise ValueError("opening and closing arguments must be strings if no content expression is given")
- ret = Forward()
- if ignoreExpr is not None:
- ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) )
- else:
- ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) )
- ret.setName('nested %s%s expression' % (opener,closer))
- return ret
-
-def indentedBlock(blockStatementExpr, indentStack, indent=True):
- """
- Helper method for defining space-delimited indentation blocks, such as
- those used to define block statements in Python source code.
-
- Parameters:
- - blockStatementExpr - expression defining syntax of statement that
- is repeated within the indented block
- - indentStack - list created by caller to manage indentation stack
- (multiple statementWithIndentedBlock expressions within a single grammar
- should share a common indentStack)
- - indent - boolean indicating whether block must be indented beyond the
- the current level; set to False for block of left-most statements
- (default=C{True})
-
- A valid block must contain at least one C{blockStatement}.
-
- Example::
- data = '''
- def A(z):
- A1
- B = 100
- G = A2
- A2
- A3
- B
- def BB(a,b,c):
- BB1
- def BBA():
- bba1
- bba2
- bba3
- C
- D
- def spam(x,y):
- def eggs(z):
- pass
- '''
-
-
- indentStack = [1]
- stmt = Forward()
-
- identifier = Word(alphas, alphanums)
- funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":")
- func_body = indentedBlock(stmt, indentStack)
- funcDef = Group( funcDecl + func_body )
-
- rvalue = Forward()
- funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")")
- rvalue << (funcCall | identifier | Word(nums))
- assignment = Group(identifier + "=" + rvalue)
- stmt << ( funcDef | assignment | identifier )
-
- module_body = OneOrMore(stmt)
-
- parseTree = module_body.parseString(data)
- parseTree.pprint()
- prints::
- [['def',
- 'A',
- ['(', 'z', ')'],
- ':',
- [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]],
- 'B',
- ['def',
- 'BB',
- ['(', 'a', 'b', 'c', ')'],
- ':',
- [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]],
- 'C',
- 'D',
- ['def',
- 'spam',
- ['(', 'x', 'y', ')'],
- ':',
- [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]]
- """
- def checkPeerIndent(s,l,t):
- if l >= len(s): return
- curCol = col(l,s)
- if curCol != indentStack[-1]:
- if curCol > indentStack[-1]:
- raise ParseFatalException(s,l,"illegal nesting")
- raise ParseException(s,l,"not a peer entry")
-
- def checkSubIndent(s,l,t):
- curCol = col(l,s)
- if curCol > indentStack[-1]:
- indentStack.append( curCol )
- else:
- raise ParseException(s,l,"not a subentry")
-
- def checkUnindent(s,l,t):
- if l >= len(s): return
- curCol = col(l,s)
- if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]):
- raise ParseException(s,l,"not an unindent")
- indentStack.pop()
-
- NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress())
- INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT')
- PEER = Empty().setParseAction(checkPeerIndent).setName('')
- UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT')
- if indent:
- smExpr = Group( Optional(NL) +
- #~ FollowedBy(blockStatementExpr) +
- INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT)
- else:
- smExpr = Group( Optional(NL) +
- (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) )
- blockStatementExpr.ignore(_bslash + LineEnd())
- return smExpr.setName('indented block')
-
-alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
-punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
-
-anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag'))
-_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\''))
-commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity")
-def replaceHTMLEntity(t):
- """Helper parser action to replace common HTML entities with their special characters"""
- return _htmlEntityMap.get(t.entity)
-
-# it's easy to get these comment structures wrong - they're very common, so may as well make them available
-cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment")
-"Comment of the form C{/* ... */}"
-
-htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment")
-"Comment of the form C{<!-- ... -->}"
-
-restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line")
-dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment")
-"Comment of the form C{// ... (to end of line)}"
-
-cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment")
-"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}"
-
-javaStyleComment = cppStyleComment
-"Same as C{L{cppStyleComment}}"
-
-pythonStyleComment = Regex(r"#.*").setName("Python style comment")
-"Comment of the form C{# ... (to end of line)}"
-
-_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') +
- Optional( Word(" \t") +
- ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem")
-commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList")
-"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas.
- This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}."""
-
-# some other useful expressions - using lower-case class name since we are really using this as a namespace
-class pyparsing_common:
- """
- Here are some common low-level expressions that may be useful in jump-starting parser development:
- - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>})
- - common L{programming identifiers<identifier>}
- - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>})
- - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>}
- - L{UUID<uuid>}
- - L{comma-separated list<comma_separated_list>}
- Parse actions:
- - C{L{convertToInteger}}
- - C{L{convertToFloat}}
- - C{L{convertToDate}}
- - C{L{convertToDatetime}}
- - C{L{stripHTMLTags}}
- - C{L{upcaseTokens}}
- - C{L{downcaseTokens}}
-
- Example::
- pyparsing_common.number.runTests('''
- # any int or real number, returned as the appropriate type
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- ''')
-
- pyparsing_common.fnumber.runTests('''
- # any int or real number, returned as float
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- ''')
-
- pyparsing_common.hex_integer.runTests('''
- # hex numbers
- 100
- FF
- ''')
-
- pyparsing_common.fraction.runTests('''
- # fractions
- 1/2
- -3/4
- ''')
-
- pyparsing_common.mixed_integer.runTests('''
- # mixed fractions
- 1
- 1/2
- -3/4
- 1-3/4
- ''')
-
- import uuid
- pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
- pyparsing_common.uuid.runTests('''
- # uuid
- 12345678-1234-5678-1234-567812345678
- ''')
- prints::
- # any int or real number, returned as the appropriate type
- 100
- [100]
-
- -100
- [-100]
-
- +100
- [100]
-
- 3.14159
- [3.14159]
-
- 6.02e23
- [6.02e+23]
-
- 1e-12
- [1e-12]
-
- # any int or real number, returned as float
- 100
- [100.0]
-
- -100
- [-100.0]
-
- +100
- [100.0]
-
- 3.14159
- [3.14159]
-
- 6.02e23
- [6.02e+23]
-
- 1e-12
- [1e-12]
-
- # hex numbers
- 100
- [256]
-
- FF
- [255]
-
- # fractions
- 1/2
- [0.5]
-
- -3/4
- [-0.75]
-
- # mixed fractions
- 1
- [1]
-
- 1/2
- [0.5]
-
- -3/4
- [-0.75]
-
- 1-3/4
- [1.75]
-
- # uuid
- 12345678-1234-5678-1234-567812345678
- [UUID('12345678-1234-5678-1234-567812345678')]
- """
-
- convertToInteger = tokenMap(int)
- """
- Parse action for converting parsed integers to Python int
- """
-
- convertToFloat = tokenMap(float)
- """
- Parse action for converting parsed numbers to Python float
- """
-
- integer = Word(nums).setName("integer").setParseAction(convertToInteger)
- """expression that parses an unsigned integer, returns an int"""
-
- hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16))
- """expression that parses a hexadecimal integer, returns an int"""
-
- signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger)
- """expression that parses an integer with optional leading sign, returns an int"""
-
- fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction")
- """fractional expression of an integer divided by an integer, returns a float"""
- fraction.addParseAction(lambda t: t[0]/t[-1])
-
- mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction")
- """mixed integer of the form 'integer - fraction', with optional leading integer, returns float"""
- mixed_integer.addParseAction(sum)
-
- real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat)
- """expression that parses a floating point number and returns a float"""
-
- sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat)
- """expression that parses a floating point number with optional scientific notation and returns a float"""
-
- # streamlining this expression makes the docs nicer-looking
- number = (sci_real | real | signed_integer).streamline()
- """any numeric expression, returns the corresponding Python type"""
-
- fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat)
- """any int or real number, returned as float"""
-
- identifier = Word(alphas+'_', alphanums+'_').setName("identifier")
- """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')"""
-
- ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address")
- "IPv4 address (C{0.0.0.0 - 255.255.255.255})"
-
- _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer")
- _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address")
- _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address")
- _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8)
- _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address")
- ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address")
- "IPv6 address (long, short, or mixed form)"
-
- mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address")
- "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)"
-
- @staticmethod
- def convertToDate(fmt="%Y-%m-%d"):
- """
- Helper to create a parse action for converting parsed date string to Python datetime.date
-
- Params -
- - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"})
-
- Example::
- date_expr = pyparsing_common.iso8601_date.copy()
- date_expr.setParseAction(pyparsing_common.convertToDate())
- print(date_expr.parseString("1999-12-31"))
- prints::
- [datetime.date(1999, 12, 31)]
- """
- def cvt_fn(s,l,t):
- try:
- return datetime.strptime(t[0], fmt).date()
- except ValueError as ve:
- raise ParseException(s, l, str(ve))
- return cvt_fn
-
- @staticmethod
- def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"):
- """
- Helper to create a parse action for converting parsed datetime string to Python datetime.datetime
-
- Params -
- - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"})
-
- Example::
- dt_expr = pyparsing_common.iso8601_datetime.copy()
- dt_expr.setParseAction(pyparsing_common.convertToDatetime())
- print(dt_expr.parseString("1999-12-31T23:59:59.999"))
- prints::
- [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)]
- """
- def cvt_fn(s,l,t):
- try:
- return datetime.strptime(t[0], fmt)
- except ValueError as ve:
- raise ParseException(s, l, str(ve))
- return cvt_fn
-
- iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date")
- "ISO8601 date (C{yyyy-mm-dd})"
-
- iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime")
- "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}"
-
- uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID")
- "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})"
-
- _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress()
- @staticmethod
- def stripHTMLTags(s, l, tokens):
- """
- Parse action to remove HTML tags from web page HTML source
-
- Example::
- # strip HTML links from normal text
- text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
- td,td_end = makeHTMLTags("TD")
- table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end
-
- print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page'
- """
- return pyparsing_common._html_stripper.transformString(tokens[0])
-
- _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',')
- + Optional( White(" \t") ) ) ).streamline().setName("commaItem")
- comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list")
- """Predefined expression of 1 or more printable words or quoted strings, separated by commas."""
-
- upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper()))
- """Parse action to convert tokens to upper case."""
-
- downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower()))
- """Parse action to convert tokens to lower case."""
-
-
-if __name__ == "__main__":
-
- selectToken = CaselessLiteral("select")
- fromToken = CaselessLiteral("from")
-
- ident = Word(alphas, alphanums + "_$")
-
- columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
- columnNameList = Group(delimitedList(columnName)).setName("columns")
- columnSpec = ('*' | columnNameList)
-
- tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
- tableNameList = Group(delimitedList(tableName)).setName("tables")
-
- simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables")
-
- # demo runTests method, including embedded comments in test string
- simpleSQL.runTests("""
- # '*' as column list and dotted table name
- select * from SYS.XYZZY
-
- # caseless match on "SELECT", and casts back to "select"
- SELECT * from XYZZY, ABC
-
- # list of column names, and mixed case SELECT keyword
- Select AA,BB,CC from Sys.dual
-
- # multiple tables
- Select A, B, C from Sys.dual, Table2
-
- # invalid SELECT keyword - should fail
- Xelect A, B, C from Sys.dual
-
- # incomplete command - should fail
- Select
-
- # invalid column name - should fail
- Select ^^^ frox Sys.dual
-
- """)
-
- pyparsing_common.number.runTests("""
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- """)
-
- # any int or real number, returned as float
- pyparsing_common.fnumber.runTests("""
- 100
- -100
- +100
- 3.14159
- 6.02e23
- 1e-12
- """)
-
- pyparsing_common.hex_integer.runTests("""
- 100
- FF
- """)
-
- import uuid
- pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
- pyparsing_common.uuid.runTests("""
- 12345678-1234-5678-1234-567812345678
- """)
+# module pyparsing.py
+#
+# Copyright (c) 2003-2018 Paul T. McGuire
+#
+# 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+
+__doc__ = \
+"""
+pyparsing module - Classes and methods to define and execute parsing grammars
+=============================================================================
+
+The pyparsing module is an alternative approach to creating and executing simple grammars,
+vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you
+don't need to learn a new syntax for defining grammars or matching expressions - the parsing module
+provides a library of classes that you use to construct the grammar directly in Python.
+
+Here is a program to parse "Hello, World!" (or any greeting of the form
+C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements
+(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to
+L{Literal} expressions)::
+
+ from pyparsing import Word, alphas
+
+ # define grammar of a greeting
+ greet = Word(alphas) + "," + Word(alphas) + "!"
+
+ hello = "Hello, World!"
+ print (hello, "->", greet.parseString(hello))
+
+The program outputs the following::
+
+ Hello, World! -> ['Hello', ',', 'World', '!']
+
+The Python representation of the grammar is quite readable, owing to the self-explanatory
+class names, and the use of '+', '|' and '^' operators.
+
+The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an
+object with named attributes.
+
+The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
+ - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.)
+ - quoted strings
+ - embedded comments
+
+
+Getting Started -
+-----------------
+Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing
+classes inherit from. Use the docstrings for examples of how to:
+ - construct literal match expressions from L{Literal} and L{CaselessLiteral} classes
+ - construct character word-group expressions using the L{Word} class
+ - see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes
+ - use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones
+ - associate names with your parsed results using L{ParserElement.setResultsName}
+ - find some helpful expression short-cuts like L{delimitedList} and L{oneOf}
+ - find more useful common expressions in the L{pyparsing_common} namespace class
+"""
+
+__version__ = "2.2.1"
+__versionTime__ = "18 Sep 2018 00:49 UTC"
+__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>"
+
+import string
+from weakref import ref as wkref
+import copy
+import sys
+import warnings
+import re
+import sre_constants
+import collections
+import pprint
+import traceback
+import types
+from datetime import datetime
+
+try:
+ from _thread import RLock
+except ImportError:
+ from threading import RLock
+
+try:
+ # Python 3
+ from collections.abc import Iterable
+ from collections.abc import MutableMapping
+except ImportError:
+ # Python 2.7
+ from collections import Iterable
+ from collections import MutableMapping
+
+try:
+ from collections import OrderedDict as _OrderedDict
+except ImportError:
+ try:
+ from ordereddict import OrderedDict as _OrderedDict
+ except ImportError:
+ _OrderedDict = None
+
+#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) )
+
+__all__ = [
+'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty',
+'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal',
+'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or',
+'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException',
+'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException',
+'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter',
+'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore',
+'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col',
+'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString',
+'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums',
+'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno',
+'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral',
+'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables',
+'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity',
+'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd',
+'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute',
+'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass',
+'CloseMatch', 'tokenMap', 'pyparsing_common',
+]
+
+system_version = tuple(sys.version_info)[:3]
+PY_3 = system_version[0] == 3
+if PY_3:
+ _MAX_INT = sys.maxsize
+ basestring = str
+ unichr = chr
+ _ustr = str
+
+ # build list of single arg builtins, that can be used as parse actions
+ singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max]
+
+else:
+ _MAX_INT = sys.maxint
+ range = xrange
+
+ def _ustr(obj):
+ """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
+ str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
+ then < returns the unicode object | encodes it with the default encoding | ... >.
+ """
+ if isinstance(obj,unicode):
+ return obj
+
+ try:
+ # If this works, then _ustr(obj) has the same behaviour as str(obj), so
+ # it won't break any existing code.
+ return str(obj)
+
+ except UnicodeEncodeError:
+ # Else encode it
+ ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace')
+ xmlcharref = Regex(r'&#\d+;')
+ xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:])
+ return xmlcharref.transformString(ret)
+
+ # build list of single arg builtins, tolerant of Python version, that can be used as parse actions
+ singleArgBuiltins = []
+ import __builtin__
+ for fname in "sum len sorted reversed list tuple set any all min max".split():
+ try:
+ singleArgBuiltins.append(getattr(__builtin__,fname))
+ except AttributeError:
+ continue
+
+_generatorType = type((y for y in range(1)))
+
+def _xml_escape(data):
+ """Escape &, <, >, ", ', etc. in a string of data."""
+
+ # ampersand must be replaced first
+ from_symbols = '&><"\''
+ to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split())
+ for from_,to_ in zip(from_symbols, to_symbols):
+ data = data.replace(from_, to_)
+ return data
+
+class _Constants(object):
+ pass
+
+alphas = string.ascii_uppercase + string.ascii_lowercase
+nums = "0123456789"
+hexnums = nums + "ABCDEFabcdef"
+alphanums = alphas + nums
+_bslash = chr(92)
+printables = "".join(c for c in string.printable if c not in string.whitespace)
+
+class ParseBaseException(Exception):
+ """base exception class for all parsing runtime exceptions"""
+ # Performance tuning: we construct a *lot* of these, so keep this
+ # constructor as small and fast as possible
+ def __init__( self, pstr, loc=0, msg=None, elem=None ):
+ self.loc = loc
+ if msg is None:
+ self.msg = pstr
+ self.pstr = ""
+ else:
+ self.msg = msg
+ self.pstr = pstr
+ self.parserElement = elem
+ self.args = (pstr, loc, msg)
+
+ @classmethod
+ def _from_exception(cls, pe):
+ """
+ internal factory method to simplify creating one type of ParseException
+ from another - avoids having __init__ signature conflicts among subclasses
+ """
+ return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement)
+
+ def __getattr__( self, aname ):
+ """supported attributes by name are:
+ - lineno - returns the line number of the exception text
+ - col - returns the column number of the exception text
+ - line - returns the line containing the exception text
+ """
+ if( aname == "lineno" ):
+ return lineno( self.loc, self.pstr )
+ elif( aname in ("col", "column") ):
+ return col( self.loc, self.pstr )
+ elif( aname == "line" ):
+ return line( self.loc, self.pstr )
+ else:
+ raise AttributeError(aname)
+
+ def __str__( self ):
+ return "%s (at char %d), (line:%d, col:%d)" % \
+ ( self.msg, self.loc, self.lineno, self.column )
+ def __repr__( self ):
+ return _ustr(self)
+ def markInputline( self, markerString = ">!<" ):
+ """Extracts the exception line from the input string, and marks
+ the location of the exception with a special symbol.
+ """
+ line_str = self.line
+ line_column = self.column - 1
+ if markerString:
+ line_str = "".join((line_str[:line_column],
+ markerString, line_str[line_column:]))
+ return line_str.strip()
+ def __dir__(self):
+ return "lineno col line".split() + dir(type(self))
+
+class ParseException(ParseBaseException):
+ """
+ Exception thrown when parse expressions don't match class;
+ supported attributes by name are:
+ - lineno - returns the line number of the exception text
+ - col - returns the column number of the exception text
+ - line - returns the line containing the exception text
+
+ Example::
+ try:
+ Word(nums).setName("integer").parseString("ABC")
+ except ParseException as pe:
+ print(pe)
+ print("column: {}".format(pe.col))
+
+ prints::
+ Expected integer (at char 0), (line:1, col:1)
+ column: 1
+ """
+ pass
+
+class ParseFatalException(ParseBaseException):
+ """user-throwable exception thrown when inconsistent parse content
+ is found; stops all parsing immediately"""
+ pass
+
+class ParseSyntaxException(ParseFatalException):
+ """just like L{ParseFatalException}, but thrown internally when an
+ L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop
+ immediately because an unbacktrackable syntax error has been found"""
+ pass
+
+#~ class ReparseException(ParseBaseException):
+ #~ """Experimental class - parse actions can raise this exception to cause
+ #~ pyparsing to reparse the input string:
+ #~ - with a modified input string, and/or
+ #~ - with a modified start location
+ #~ Set the values of the ReparseException in the constructor, and raise the
+ #~ exception in a parse action to cause pyparsing to use the new string/location.
+ #~ Setting the values as None causes no change to be made.
+ #~ """
+ #~ def __init_( self, newstring, restartLoc ):
+ #~ self.newParseText = newstring
+ #~ self.reparseLoc = restartLoc
+
+class RecursiveGrammarException(Exception):
+ """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive"""
+ def __init__( self, parseElementList ):
+ self.parseElementTrace = parseElementList
+
+ def __str__( self ):
+ return "RecursiveGrammarException: %s" % self.parseElementTrace
+
+class _ParseResultsWithOffset(object):
+ def __init__(self,p1,p2):
+ self.tup = (p1,p2)
+ def __getitem__(self,i):
+ return self.tup[i]
+ def __repr__(self):
+ return repr(self.tup[0])
+ def setOffset(self,i):
+ self.tup = (self.tup[0],i)
+
+class ParseResults(object):
+ """
+ Structured parse results, to provide multiple means of access to the parsed data:
+ - as a list (C{len(results)})
+ - by list index (C{results[0], results[1]}, etc.)
+ - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName})
+
+ Example::
+ integer = Word(nums)
+ date_str = (integer.setResultsName("year") + '/'
+ + integer.setResultsName("month") + '/'
+ + integer.setResultsName("day"))
+ # equivalent form:
+ # date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ # parseString returns a ParseResults object
+ result = date_str.parseString("1999/12/31")
+
+ def test(s, fn=repr):
+ print("%s -> %s" % (s, fn(eval(s))))
+ test("list(result)")
+ test("result[0]")
+ test("result['month']")
+ test("result.day")
+ test("'month' in result")
+ test("'minutes' in result")
+ test("result.dump()", str)
+ prints::
+ list(result) -> ['1999', '/', '12', '/', '31']
+ result[0] -> '1999'
+ result['month'] -> '12'
+ result.day -> '31'
+ 'month' in result -> True
+ 'minutes' in result -> False
+ result.dump() -> ['1999', '/', '12', '/', '31']
+ - day: 31
+ - month: 12
+ - year: 1999
+ """
+ def __new__(cls, toklist=None, name=None, asList=True, modal=True ):
+ if isinstance(toklist, cls):
+ return toklist
+ retobj = object.__new__(cls)
+ retobj.__doinit = True
+ return retobj
+
+ # Performance tuning: we construct a *lot* of these, so keep this
+ # constructor as small and fast as possible
+ def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ):
+ if self.__doinit:
+ self.__doinit = False
+ self.__name = None
+ self.__parent = None
+ self.__accumNames = {}
+ self.__asList = asList
+ self.__modal = modal
+ if toklist is None:
+ toklist = []
+ if isinstance(toklist, list):
+ self.__toklist = toklist[:]
+ elif isinstance(toklist, _generatorType):
+ self.__toklist = list(toklist)
+ else:
+ self.__toklist = [toklist]
+ self.__tokdict = dict()
+
+ if name is not None and name:
+ if not modal:
+ self.__accumNames[name] = 0
+ if isinstance(name,int):
+ name = _ustr(name) # will always return a str, but use _ustr for consistency
+ self.__name = name
+ if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])):
+ if isinstance(toklist,basestring):
+ toklist = [ toklist ]
+ if asList:
+ if isinstance(toklist,ParseResults):
+ self[name] = _ParseResultsWithOffset(toklist.copy(),0)
+ else:
+ self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0)
+ self[name].__name = name
+ else:
+ try:
+ self[name] = toklist[0]
+ except (KeyError,TypeError,IndexError):
+ self[name] = toklist
+
+ def __getitem__( self, i ):
+ if isinstance( i, (int,slice) ):
+ return self.__toklist[i]
+ else:
+ if i not in self.__accumNames:
+ return self.__tokdict[i][-1][0]
+ else:
+ return ParseResults([ v[0] for v in self.__tokdict[i] ])
+
+ def __setitem__( self, k, v, isinstance=isinstance ):
+ if isinstance(v,_ParseResultsWithOffset):
+ self.__tokdict[k] = self.__tokdict.get(k,list()) + [v]
+ sub = v[0]
+ elif isinstance(k,(int,slice)):
+ self.__toklist[k] = v
+ sub = v
+ else:
+ self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)]
+ sub = v
+ if isinstance(sub,ParseResults):
+ sub.__parent = wkref(self)
+
+ def __delitem__( self, i ):
+ if isinstance(i,(int,slice)):
+ mylen = len( self.__toklist )
+ del self.__toklist[i]
+
+ # convert int to slice
+ if isinstance(i, int):
+ if i < 0:
+ i += mylen
+ i = slice(i, i+1)
+ # get removed indices
+ removed = list(range(*i.indices(mylen)))
+ removed.reverse()
+ # fixup indices in token dictionary
+ for name,occurrences in self.__tokdict.items():
+ for j in removed:
+ for k, (value, position) in enumerate(occurrences):
+ occurrences[k] = _ParseResultsWithOffset(value, position - (position > j))
+ else:
+ del self.__tokdict[i]
+
+ def __contains__( self, k ):
+ return k in self.__tokdict
+
+ def __len__( self ): return len( self.__toklist )
+ def __bool__(self): return ( not not self.__toklist )
+ __nonzero__ = __bool__
+ def __iter__( self ): return iter( self.__toklist )
+ def __reversed__( self ): return iter( self.__toklist[::-1] )
+ def _iterkeys( self ):
+ if hasattr(self.__tokdict, "iterkeys"):
+ return self.__tokdict.iterkeys()
+ else:
+ return iter(self.__tokdict)
+
+ def _itervalues( self ):
+ return (self[k] for k in self._iterkeys())
+
+ def _iteritems( self ):
+ return ((k, self[k]) for k in self._iterkeys())
+
+ if PY_3:
+ keys = _iterkeys
+ """Returns an iterator of all named result keys (Python 3.x only)."""
+
+ values = _itervalues
+ """Returns an iterator of all named result values (Python 3.x only)."""
+
+ items = _iteritems
+ """Returns an iterator of all named result key-value tuples (Python 3.x only)."""
+
+ else:
+ iterkeys = _iterkeys
+ """Returns an iterator of all named result keys (Python 2.x only)."""
+
+ itervalues = _itervalues
+ """Returns an iterator of all named result values (Python 2.x only)."""
+
+ iteritems = _iteritems
+ """Returns an iterator of all named result key-value tuples (Python 2.x only)."""
+
+ def keys( self ):
+ """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.iterkeys())
+
+ def values( self ):
+ """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.itervalues())
+
+ def items( self ):
+ """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x)."""
+ return list(self.iteritems())
+
+ def haskeys( self ):
+ """Since keys() returns an iterator, this method is helpful in bypassing
+ code that looks for the existence of any defined results names."""
+ return bool(self.__tokdict)
+
+ def pop( self, *args, **kwargs):
+ """
+ Removes and returns item at specified index (default=C{last}).
+ Supports both C{list} and C{dict} semantics for C{pop()}. If passed no
+ argument or an integer argument, it will use C{list} semantics
+ and pop tokens from the list of parsed tokens. If passed a
+ non-integer argument (most likely a string), it will use C{dict}
+ semantics and pop the corresponding value from any defined
+ results names. A second default return value argument is
+ supported, just as in C{dict.pop()}.
+
+ Example::
+ def remove_first(tokens):
+ tokens.pop(0)
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+ print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321']
+
+ label = Word(alphas)
+ patt = label("LABEL") + OneOrMore(Word(nums))
+ print(patt.parseString("AAB 123 321").dump())
+
+ # Use pop() in a parse action to remove named result (note that corresponding value is not
+ # removed from list form of results)
+ def remove_LABEL(tokens):
+ tokens.pop("LABEL")
+ return tokens
+ patt.addParseAction(remove_LABEL)
+ print(patt.parseString("AAB 123 321").dump())
+ prints::
+ ['AAB', '123', '321']
+ - LABEL: AAB
+
+ ['AAB', '123', '321']
+ """
+ if not args:
+ args = [-1]
+ for k,v in kwargs.items():
+ if k == 'default':
+ args = (args[0], v)
+ else:
+ raise TypeError("pop() got an unexpected keyword argument '%s'" % k)
+ if (isinstance(args[0], int) or
+ len(args) == 1 or
+ args[0] in self):
+ index = args[0]
+ ret = self[index]
+ del self[index]
+ return ret
+ else:
+ defaultvalue = args[1]
+ return defaultvalue
+
+ def get(self, key, defaultValue=None):
+ """
+ Returns named result matching the given key, or if there is no
+ such name, then returns the given C{defaultValue} or C{None} if no
+ C{defaultValue} is specified.
+
+ Similar to C{dict.get()}.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString("1999/12/31")
+ print(result.get("year")) # -> '1999'
+ print(result.get("hour", "not specified")) # -> 'not specified'
+ print(result.get("hour")) # -> None
+ """
+ if key in self:
+ return self[key]
+ else:
+ return defaultValue
+
+ def insert( self, index, insStr ):
+ """
+ Inserts new element at location index in the list of parsed tokens.
+
+ Similar to C{list.insert()}.
+
+ Example::
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+
+ # use a parse action to insert the parse location in the front of the parsed results
+ def insert_locn(locn, tokens):
+ tokens.insert(0, locn)
+ print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321']
+ """
+ self.__toklist.insert(index, insStr)
+ # fixup indices in token dictionary
+ for name,occurrences in self.__tokdict.items():
+ for k, (value, position) in enumerate(occurrences):
+ occurrences[k] = _ParseResultsWithOffset(value, position + (position > index))
+
+ def append( self, item ):
+ """
+ Add single element to end of ParseResults list of elements.
+
+ Example::
+ print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
+
+ # use a parse action to compute the sum of the parsed integers, and add it to the end
+ def append_sum(tokens):
+ tokens.append(sum(map(int, tokens)))
+ print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444]
+ """
+ self.__toklist.append(item)
+
+ def extend( self, itemseq ):
+ """
+ Add sequence of elements to end of ParseResults list of elements.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+
+ # use a parse action to append the reverse of the matched strings, to make a palindrome
+ def make_palindrome(tokens):
+ tokens.extend(reversed([t[::-1] for t in tokens]))
+ return ''.join(tokens)
+ print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl'
+ """
+ if isinstance(itemseq, ParseResults):
+ self += itemseq
+ else:
+ self.__toklist.extend(itemseq)
+
+ def clear( self ):
+ """
+ Clear all elements and results names.
+ """
+ del self.__toklist[:]
+ self.__tokdict.clear()
+
+ def __getattr__( self, name ):
+ try:
+ return self[name]
+ except KeyError:
+ return ""
+
+ if name in self.__tokdict:
+ if name not in self.__accumNames:
+ return self.__tokdict[name][-1][0]
+ else:
+ return ParseResults([ v[0] for v in self.__tokdict[name] ])
+ else:
+ return ""
+
+ def __add__( self, other ):
+ ret = self.copy()
+ ret += other
+ return ret
+
+ def __iadd__( self, other ):
+ if other.__tokdict:
+ offset = len(self.__toklist)
+ addoffset = lambda a: offset if a<0 else a+offset
+ otheritems = other.__tokdict.items()
+ otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) )
+ for (k,vlist) in otheritems for v in vlist]
+ for k,v in otherdictitems:
+ self[k] = v
+ if isinstance(v[0],ParseResults):
+ v[0].__parent = wkref(self)
+
+ self.__toklist += other.__toklist
+ self.__accumNames.update( other.__accumNames )
+ return self
+
+ def __radd__(self, other):
+ if isinstance(other,int) and other == 0:
+ # useful for merging many ParseResults using sum() builtin
+ return self.copy()
+ else:
+ # this may raise a TypeError - so be it
+ return other + self
+
+ def __repr__( self ):
+ return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) )
+
+ def __str__( self ):
+ return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']'
+
+ def _asStringList( self, sep='' ):
+ out = []
+ for item in self.__toklist:
+ if out and sep:
+ out.append(sep)
+ if isinstance( item, ParseResults ):
+ out += item._asStringList()
+ else:
+ out.append( _ustr(item) )
+ return out
+
+ def asList( self ):
+ """
+ Returns the parse results as a nested list of matching tokens, all converted to strings.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+ result = patt.parseString("sldkj lsdkj sldkj")
+ # even though the result prints in string-like form, it is actually a pyparsing ParseResults
+ print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj']
+
+ # Use asList() to create an actual list
+ result_list = result.asList()
+ print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj']
+ """
+ return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist]
+
+ def asDict( self ):
+ """
+ Returns the named parse results as a nested dictionary.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString('12/31/1999')
+ print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]})
+
+ result_dict = result.asDict()
+ print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'}
+
+ # even though a ParseResults supports dict-like access, sometime you just need to have a dict
+ import json
+ print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable
+ print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"}
+ """
+ if PY_3:
+ item_fn = self.items
+ else:
+ item_fn = self.iteritems
+
+ def toItem(obj):
+ if isinstance(obj, ParseResults):
+ if obj.haskeys():
+ return obj.asDict()
+ else:
+ return [toItem(v) for v in obj]
+ else:
+ return obj
+
+ return dict((k,toItem(v)) for k,v in item_fn())
+
+ def copy( self ):
+ """
+ Returns a new copy of a C{ParseResults} object.
+ """
+ ret = ParseResults( self.__toklist )
+ ret.__tokdict = self.__tokdict.copy()
+ ret.__parent = self.__parent
+ ret.__accumNames.update( self.__accumNames )
+ ret.__name = self.__name
+ return ret
+
+ def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ):
+ """
+ (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names.
+ """
+ nl = "\n"
+ out = []
+ namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items()
+ for v in vlist)
+ nextLevelIndent = indent + " "
+
+ # collapse out indents if formatting is not desired
+ if not formatted:
+ indent = ""
+ nextLevelIndent = ""
+ nl = ""
+
+ selfTag = None
+ if doctag is not None:
+ selfTag = doctag
+ else:
+ if self.__name:
+ selfTag = self.__name
+
+ if not selfTag:
+ if namedItemsOnly:
+ return ""
+ else:
+ selfTag = "ITEM"
+
+ out += [ nl, indent, "<", selfTag, ">" ]
+
+ for i,res in enumerate(self.__toklist):
+ if isinstance(res,ParseResults):
+ if i in namedItems:
+ out += [ res.asXML(namedItems[i],
+ namedItemsOnly and doctag is None,
+ nextLevelIndent,
+ formatted)]
+ else:
+ out += [ res.asXML(None,
+ namedItemsOnly and doctag is None,
+ nextLevelIndent,
+ formatted)]
+ else:
+ # individual token, see if there is a name for it
+ resTag = None
+ if i in namedItems:
+ resTag = namedItems[i]
+ if not resTag:
+ if namedItemsOnly:
+ continue
+ else:
+ resTag = "ITEM"
+ xmlBodyText = _xml_escape(_ustr(res))
+ out += [ nl, nextLevelIndent, "<", resTag, ">",
+ xmlBodyText,
+ "</", resTag, ">" ]
+
+ out += [ nl, indent, "</", selfTag, ">" ]
+ return "".join(out)
+
+ def __lookup(self,sub):
+ for k,vlist in self.__tokdict.items():
+ for v,loc in vlist:
+ if sub is v:
+ return k
+ return None
+
+ def getName(self):
+ r"""
+ Returns the results name for this token expression. Useful when several
+ different expressions might match at a particular location.
+
+ Example::
+ integer = Word(nums)
+ ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d")
+ house_number_expr = Suppress('#') + Word(nums, alphanums)
+ user_data = (Group(house_number_expr)("house_number")
+ | Group(ssn_expr)("ssn")
+ | Group(integer)("age"))
+ user_info = OneOrMore(user_data)
+
+ result = user_info.parseString("22 111-22-3333 #221B")
+ for item in result:
+ print(item.getName(), ':', item[0])
+ prints::
+ age : 22
+ ssn : 111-22-3333
+ house_number : 221B
+ """
+ if self.__name:
+ return self.__name
+ elif self.__parent:
+ par = self.__parent()
+ if par:
+ return par.__lookup(self)
+ else:
+ return None
+ elif (len(self) == 1 and
+ len(self.__tokdict) == 1 and
+ next(iter(self.__tokdict.values()))[0][1] in (0,-1)):
+ return next(iter(self.__tokdict.keys()))
+ else:
+ return None
+
+ def dump(self, indent='', depth=0, full=True):
+ """
+ Diagnostic method for listing out the contents of a C{ParseResults}.
+ Accepts an optional C{indent} argument so that this string can be embedded
+ in a nested display of other data.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ result = date_str.parseString('12/31/1999')
+ print(result.dump())
+ prints::
+ ['12', '/', '31', '/', '1999']
+ - day: 1999
+ - month: 31
+ - year: 12
+ """
+ out = []
+ NL = '\n'
+ out.append( indent+_ustr(self.asList()) )
+ if full:
+ if self.haskeys():
+ items = sorted((str(k), v) for k,v in self.items())
+ for k,v in items:
+ if out:
+ out.append(NL)
+ out.append( "%s%s- %s: " % (indent,(' '*depth), k) )
+ if isinstance(v,ParseResults):
+ if v:
+ out.append( v.dump(indent,depth+1) )
+ else:
+ out.append(_ustr(v))
+ else:
+ out.append(repr(v))
+ elif any(isinstance(vv,ParseResults) for vv in self):
+ v = self
+ for i,vv in enumerate(v):
+ if isinstance(vv,ParseResults):
+ out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) ))
+ else:
+ out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv)))
+
+ return "".join(out)
+
+ def pprint(self, *args, **kwargs):
+ """
+ Pretty-printer for parsed results as a list, using the C{pprint} module.
+ Accepts additional positional or keyword args as defined for the
+ C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint})
+
+ Example::
+ ident = Word(alphas, alphanums)
+ num = Word(nums)
+ func = Forward()
+ term = ident | num | Group('(' + func + ')')
+ func <<= ident + Group(Optional(delimitedList(term)))
+ result = func.parseString("fna a,b,(fnb c,d,200),100")
+ result.pprint(width=40)
+ prints::
+ ['fna',
+ ['a',
+ 'b',
+ ['(', 'fnb', ['c', 'd', '200'], ')'],
+ '100']]
+ """
+ pprint.pprint(self.asList(), *args, **kwargs)
+
+ # add support for pickle protocol
+ def __getstate__(self):
+ return ( self.__toklist,
+ ( self.__tokdict.copy(),
+ self.__parent is not None and self.__parent() or None,
+ self.__accumNames,
+ self.__name ) )
+
+ def __setstate__(self,state):
+ self.__toklist = state[0]
+ (self.__tokdict,
+ par,
+ inAccumNames,
+ self.__name) = state[1]
+ self.__accumNames = {}
+ self.__accumNames.update(inAccumNames)
+ if par is not None:
+ self.__parent = wkref(par)
+ else:
+ self.__parent = None
+
+ def __getnewargs__(self):
+ return self.__toklist, self.__name, self.__asList, self.__modal
+
+ def __dir__(self):
+ return (dir(type(self)) + list(self.keys()))
+
+MutableMapping.register(ParseResults)
+
+def col (loc,strg):
+ """Returns current column within a string, counting newlines as line separators.
+ The first column is number 1.
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+ """
+ s = strg
+ return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc)
+
+def lineno(loc,strg):
+ """Returns current line number within a string, counting newlines as line separators.
+ The first line is number 1.
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+ """
+ return strg.count("\n",0,loc) + 1
+
+def line( loc, strg ):
+ """Returns the line of text containing loc within a string, counting newlines as line separators.
+ """
+ lastCR = strg.rfind("\n", 0, loc)
+ nextCR = strg.find("\n", loc)
+ if nextCR >= 0:
+ return strg[lastCR+1:nextCR]
+ else:
+ return strg[lastCR+1:]
+
+def _defaultStartDebugAction( instring, loc, expr ):
+ print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )))
+
+def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ):
+ print ("Matched " + _ustr(expr) + " -> " + str(toks.asList()))
+
+def _defaultExceptionDebugAction( instring, loc, expr, exc ):
+ print ("Exception raised:" + _ustr(exc))
+
+def nullDebugAction(*args):
+ """'Do-nothing' debug action, to suppress debugging output during parsing."""
+ pass
+
+# Only works on Python 3.x - nonlocal is toxic to Python 2 installs
+#~ 'decorator to trim function calls to match the arity of the target'
+#~ def _trim_arity(func, maxargs=3):
+ #~ if func in singleArgBuiltins:
+ #~ return lambda s,l,t: func(t)
+ #~ limit = 0
+ #~ foundArity = False
+ #~ def wrapper(*args):
+ #~ nonlocal limit,foundArity
+ #~ while 1:
+ #~ try:
+ #~ ret = func(*args[limit:])
+ #~ foundArity = True
+ #~ return ret
+ #~ except TypeError:
+ #~ if limit == maxargs or foundArity:
+ #~ raise
+ #~ limit += 1
+ #~ continue
+ #~ return wrapper
+
+# this version is Python 2.x-3.x cross-compatible
+'decorator to trim function calls to match the arity of the target'
+def _trim_arity(func, maxargs=2):
+ if func in singleArgBuiltins:
+ return lambda s,l,t: func(t)
+ limit = [0]
+ foundArity = [False]
+
+ # traceback return data structure changed in Py3.5 - normalize back to plain tuples
+ if system_version[:2] >= (3,5):
+ def extract_stack(limit=0):
+ # special handling for Python 3.5.0 - extra deep call stack by 1
+ offset = -3 if system_version == (3,5,0) else -2
+ frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset]
+ return [frame_summary[:2]]
+ def extract_tb(tb, limit=0):
+ frames = traceback.extract_tb(tb, limit=limit)
+ frame_summary = frames[-1]
+ return [frame_summary[:2]]
+ else:
+ extract_stack = traceback.extract_stack
+ extract_tb = traceback.extract_tb
+
+ # synthesize what would be returned by traceback.extract_stack at the call to
+ # user's parse action 'func', so that we don't incur call penalty at parse time
+
+ LINE_DIFF = 6
+ # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND
+ # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!!
+ this_line = extract_stack(limit=2)[-1]
+ pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF)
+
+ def wrapper(*args):
+ while 1:
+ try:
+ ret = func(*args[limit[0]:])
+ foundArity[0] = True
+ return ret
+ except TypeError:
+ # re-raise TypeErrors if they did not come from our arity testing
+ if foundArity[0]:
+ raise
+ else:
+ try:
+ tb = sys.exc_info()[-1]
+ if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth:
+ raise
+ finally:
+ del tb
+
+ if limit[0] <= maxargs:
+ limit[0] += 1
+ continue
+ raise
+
+ # copy func name to wrapper for sensible debug output
+ func_name = "<parse action>"
+ try:
+ func_name = getattr(func, '__name__',
+ getattr(func, '__class__').__name__)
+ except Exception:
+ func_name = str(func)
+ wrapper.__name__ = func_name
+
+ return wrapper
+
+class ParserElement(object):
+ """Abstract base level parser element class."""
+ DEFAULT_WHITE_CHARS = " \n\t\r"
+ verbose_stacktrace = False
+
+ @staticmethod
+ def setDefaultWhitespaceChars( chars ):
+ r"""
+ Overrides the default whitespace chars
+
+ Example::
+ # default whitespace chars are space, <TAB> and newline
+ OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl']
+
+ # change to just treat newline as significant
+ ParserElement.setDefaultWhitespaceChars(" \t")
+ OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def']
+ """
+ ParserElement.DEFAULT_WHITE_CHARS = chars
+
+ @staticmethod
+ def inlineLiteralsUsing(cls):
+ """
+ Set class to be used for inclusion of string literals into a parser.
+
+ Example::
+ # default literal class used is Literal
+ integer = Word(nums)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
+
+
+ # change to Suppress
+ ParserElement.inlineLiteralsUsing(Suppress)
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+
+ date_str.parseString("1999/12/31") # -> ['1999', '12', '31']
+ """
+ ParserElement._literalStringClass = cls
+
+ def __init__( self, savelist=False ):
+ self.parseAction = list()
+ self.failAction = None
+ #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall
+ self.strRepr = None
+ self.resultsName = None
+ self.saveAsList = savelist
+ self.skipWhitespace = True
+ self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
+ self.copyDefaultWhiteChars = True
+ self.mayReturnEmpty = False # used when checking for left-recursion
+ self.keepTabs = False
+ self.ignoreExprs = list()
+ self.debug = False
+ self.streamlined = False
+ self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index
+ self.errmsg = ""
+ self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all)
+ self.debugActions = ( None, None, None ) #custom debug actions
+ self.re = None
+ self.callPreparse = True # used to avoid redundant calls to preParse
+ self.callDuringTry = False
+
+ def copy( self ):
+ """
+ Make a copy of this C{ParserElement}. Useful for defining different parse actions
+ for the same parsing pattern, using copies of the original parse element.
+
+ Example::
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K")
+ integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
+
+ print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M"))
+ prints::
+ [5120, 100, 655360, 268435456]
+ Equivalent form of C{expr.copy()} is just C{expr()}::
+ integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
+ """
+ cpy = copy.copy( self )
+ cpy.parseAction = self.parseAction[:]
+ cpy.ignoreExprs = self.ignoreExprs[:]
+ if self.copyDefaultWhiteChars:
+ cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS
+ return cpy
+
+ def setName( self, name ):
+ """
+ Define name for this expression, makes debugging and exception messages clearer.
+
+ Example::
+ Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1)
+ Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1)
+ """
+ self.name = name
+ self.errmsg = "Expected " + self.name
+ if hasattr(self,"exception"):
+ self.exception.msg = self.errmsg
+ return self
+
+ def setResultsName( self, name, listAllMatches=False ):
+ """
+ Define name for referencing matching tokens as a nested attribute
+ of the returned parse results.
+ NOTE: this returns a *copy* of the original C{ParserElement} object;
+ this is so that the client can define a basic element, such as an
+ integer, and reference it in multiple places with different names.
+
+ You can also set results names using the abbreviated syntax,
+ C{expr("name")} in place of C{expr.setResultsName("name")} -
+ see L{I{__call__}<__call__>}.
+
+ Example::
+ date_str = (integer.setResultsName("year") + '/'
+ + integer.setResultsName("month") + '/'
+ + integer.setResultsName("day"))
+
+ # equivalent form:
+ date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
+ """
+ newself = self.copy()
+ if name.endswith("*"):
+ name = name[:-1]
+ listAllMatches=True
+ newself.resultsName = name
+ newself.modalResults = not listAllMatches
+ return newself
+
+ def setBreak(self,breakFlag = True):
+ """Method to invoke the Python pdb debugger when this element is
+ about to be parsed. Set C{breakFlag} to True to enable, False to
+ disable.
+ """
+ if breakFlag:
+ _parseMethod = self._parse
+ def breaker(instring, loc, doActions=True, callPreParse=True):
+ import pdb
+ pdb.set_trace()
+ return _parseMethod( instring, loc, doActions, callPreParse )
+ breaker._originalParseMethod = _parseMethod
+ self._parse = breaker
+ else:
+ if hasattr(self._parse,"_originalParseMethod"):
+ self._parse = self._parse._originalParseMethod
+ return self
+
+ def setParseAction( self, *fns, **kwargs ):
+ """
+ Define one or more actions to perform when successfully matching parse element definition.
+ Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)},
+ C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where:
+ - s = the original string being parsed (see note below)
+ - loc = the location of the matching substring
+ - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object
+ If the functions in fns modify the tokens, they can return them as the return
+ value from fn, and the modified list of tokens will replace the original.
+ Otherwise, fn does not need to return any value.
+
+ Optional keyword arguments:
+ - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing
+
+ Note: the default parsing behavior is to expand tabs in the input string
+ before starting the parsing process. See L{I{parseString}<parseString>} for more information
+ on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
+ consistent view of the parsed string, the parse location, and line and column
+ positions within the parsed string.
+
+ Example::
+ integer = Word(nums)
+ date_str = integer + '/' + integer + '/' + integer
+
+ date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31']
+
+ # use parse action to convert to ints at parse time
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ date_str = integer + '/' + integer + '/' + integer
+
+ # note that integer fields are now ints, not strings
+ date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31]
+ """
+ self.parseAction = list(map(_trim_arity, list(fns)))
+ self.callDuringTry = kwargs.get("callDuringTry", False)
+ return self
+
+ def addParseAction( self, *fns, **kwargs ):
+ """
+ Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}.
+
+ See examples in L{I{copy}<copy>}.
+ """
+ self.parseAction += list(map(_trim_arity, list(fns)))
+ self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
+ return self
+
+ def addCondition(self, *fns, **kwargs):
+ """Add a boolean predicate function to expression's list of parse actions. See
+ L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction},
+ functions passed to C{addCondition} need to return boolean success/fail of the condition.
+
+ Optional keyword arguments:
+ - message = define a custom message to be used in the raised exception
+ - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException
+
+ Example::
+ integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ year_int = integer.copy()
+ year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later")
+ date_str = year_int + '/' + integer + '/' + integer
+
+ result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1)
+ """
+ msg = kwargs.get("message", "failed user-defined condition")
+ exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException
+ for fn in fns:
+ def pa(s,l,t):
+ if not bool(_trim_arity(fn)(s,l,t)):
+ raise exc_type(s,l,msg)
+ self.parseAction.append(pa)
+ self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False)
+ return self
+
+ def setFailAction( self, fn ):
+ """Define action to perform if parsing fails at this expression.
+ Fail acton fn is a callable function that takes the arguments
+ C{fn(s,loc,expr,err)} where:
+ - s = string being parsed
+ - loc = location where expression match was attempted and failed
+ - expr = the parse expression that failed
+ - err = the exception thrown
+ The function returns no value. It may throw C{L{ParseFatalException}}
+ if it is desired to stop parsing immediately."""
+ self.failAction = fn
+ return self
+
+ def _skipIgnorables( self, instring, loc ):
+ exprsFound = True
+ while exprsFound:
+ exprsFound = False
+ for e in self.ignoreExprs:
+ try:
+ while 1:
+ loc,dummy = e._parse( instring, loc )
+ exprsFound = True
+ except ParseException:
+ pass
+ return loc
+
+ def preParse( self, instring, loc ):
+ if self.ignoreExprs:
+ loc = self._skipIgnorables( instring, loc )
+
+ if self.skipWhitespace:
+ wt = self.whiteChars
+ instrlen = len(instring)
+ while loc < instrlen and instring[loc] in wt:
+ loc += 1
+
+ return loc
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ return loc, []
+
+ def postParse( self, instring, loc, tokenlist ):
+ return tokenlist
+
+ #~ @profile
+ def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ):
+ debugging = ( self.debug ) #and doActions )
+
+ if debugging or self.failAction:
+ #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))
+ if (self.debugActions[0] ):
+ self.debugActions[0]( instring, loc, self )
+ if callPreParse and self.callPreparse:
+ preloc = self.preParse( instring, loc )
+ else:
+ preloc = loc
+ tokensStart = preloc
+ try:
+ try:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+ except IndexError:
+ raise ParseException( instring, len(instring), self.errmsg, self )
+ except ParseBaseException as err:
+ #~ print ("Exception raised:", err)
+ if self.debugActions[2]:
+ self.debugActions[2]( instring, tokensStart, self, err )
+ if self.failAction:
+ self.failAction( instring, tokensStart, self, err )
+ raise
+ else:
+ if callPreParse and self.callPreparse:
+ preloc = self.preParse( instring, loc )
+ else:
+ preloc = loc
+ tokensStart = preloc
+ if self.mayIndexError or preloc >= len(instring):
+ try:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+ except IndexError:
+ raise ParseException( instring, len(instring), self.errmsg, self )
+ else:
+ loc,tokens = self.parseImpl( instring, preloc, doActions )
+
+ tokens = self.postParse( instring, loc, tokens )
+
+ retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults )
+ if self.parseAction and (doActions or self.callDuringTry):
+ if debugging:
+ try:
+ for fn in self.parseAction:
+ tokens = fn( instring, tokensStart, retTokens )
+ if tokens is not None:
+ retTokens = ParseResults( tokens,
+ self.resultsName,
+ asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
+ modal=self.modalResults )
+ except ParseBaseException as err:
+ #~ print "Exception raised in user parse action:", err
+ if (self.debugActions[2] ):
+ self.debugActions[2]( instring, tokensStart, self, err )
+ raise
+ else:
+ for fn in self.parseAction:
+ tokens = fn( instring, tokensStart, retTokens )
+ if tokens is not None:
+ retTokens = ParseResults( tokens,
+ self.resultsName,
+ asList=self.saveAsList and isinstance(tokens,(ParseResults,list)),
+ modal=self.modalResults )
+ if debugging:
+ #~ print ("Matched",self,"->",retTokens.asList())
+ if (self.debugActions[1] ):
+ self.debugActions[1]( instring, tokensStart, loc, self, retTokens )
+
+ return loc, retTokens
+
+ def tryParse( self, instring, loc ):
+ try:
+ return self._parse( instring, loc, doActions=False )[0]
+ except ParseFatalException:
+ raise ParseException( instring, loc, self.errmsg, self)
+
+ def canParseNext(self, instring, loc):
+ try:
+ self.tryParse(instring, loc)
+ except (ParseException, IndexError):
+ return False
+ else:
+ return True
+
+ class _UnboundedCache(object):
+ def __init__(self):
+ cache = {}
+ self.not_in_cache = not_in_cache = object()
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+
+ def clear(self):
+ cache.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ if _OrderedDict is not None:
+ class _FifoCache(object):
+ def __init__(self, size):
+ self.not_in_cache = not_in_cache = object()
+
+ cache = _OrderedDict()
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+ while len(cache) > size:
+ try:
+ cache.popitem(False)
+ except KeyError:
+ pass
+
+ def clear(self):
+ cache.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ else:
+ class _FifoCache(object):
+ def __init__(self, size):
+ self.not_in_cache = not_in_cache = object()
+
+ cache = {}
+ key_fifo = collections.deque([], size)
+
+ def get(self, key):
+ return cache.get(key, not_in_cache)
+
+ def set(self, key, value):
+ cache[key] = value
+ while len(key_fifo) > size:
+ cache.pop(key_fifo.popleft(), None)
+ key_fifo.append(key)
+
+ def clear(self):
+ cache.clear()
+ key_fifo.clear()
+
+ def cache_len(self):
+ return len(cache)
+
+ self.get = types.MethodType(get, self)
+ self.set = types.MethodType(set, self)
+ self.clear = types.MethodType(clear, self)
+ self.__len__ = types.MethodType(cache_len, self)
+
+ # argument cache for optimizing repeated calls when backtracking through recursive expressions
+ packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail
+ packrat_cache_lock = RLock()
+ packrat_cache_stats = [0, 0]
+
+ # this method gets repeatedly called during backtracking with the same arguments -
+ # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression
+ def _parseCache( self, instring, loc, doActions=True, callPreParse=True ):
+ HIT, MISS = 0, 1
+ lookup = (self, instring, loc, callPreParse, doActions)
+ with ParserElement.packrat_cache_lock:
+ cache = ParserElement.packrat_cache
+ value = cache.get(lookup)
+ if value is cache.not_in_cache:
+ ParserElement.packrat_cache_stats[MISS] += 1
+ try:
+ value = self._parseNoCache(instring, loc, doActions, callPreParse)
+ except ParseBaseException as pe:
+ # cache a copy of the exception, without the traceback
+ cache.set(lookup, pe.__class__(*pe.args))
+ raise
+ else:
+ cache.set(lookup, (value[0], value[1].copy()))
+ return value
+ else:
+ ParserElement.packrat_cache_stats[HIT] += 1
+ if isinstance(value, Exception):
+ raise value
+ return (value[0], value[1].copy())
+
+ _parse = _parseNoCache
+
+ @staticmethod
+ def resetCache():
+ ParserElement.packrat_cache.clear()
+ ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats)
+
+ _packratEnabled = False
+ @staticmethod
+ def enablePackrat(cache_size_limit=128):
+ """Enables "packrat" parsing, which adds memoizing to the parsing logic.
+ Repeated parse attempts at the same string location (which happens
+ often in many complex grammars) can immediately return a cached value,
+ instead of re-executing parsing/validating code. Memoizing is done of
+ both valid results and parsing exceptions.
+
+ Parameters:
+ - cache_size_limit - (default=C{128}) - if an integer value is provided
+ will limit the size of the packrat cache; if None is passed, then
+ the cache size will be unbounded; if 0 is passed, the cache will
+ be effectively disabled.
+
+ This speedup may break existing programs that use parse actions that
+ have side-effects. For this reason, packrat parsing is disabled when
+ you first import pyparsing. To activate the packrat feature, your
+ program must call the class method C{ParserElement.enablePackrat()}. If
+ your program uses C{psyco} to "compile as you go", you must call
+ C{enablePackrat} before calling C{psyco.full()}. If you do not do this,
+ Python will crash. For best results, call C{enablePackrat()} immediately
+ after importing pyparsing.
+
+ Example::
+ import pyparsing
+ pyparsing.ParserElement.enablePackrat()
+ """
+ if not ParserElement._packratEnabled:
+ ParserElement._packratEnabled = True
+ if cache_size_limit is None:
+ ParserElement.packrat_cache = ParserElement._UnboundedCache()
+ else:
+ ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit)
+ ParserElement._parse = ParserElement._parseCache
+
+ def parseString( self, instring, parseAll=False ):
+ """
+ Execute the parse expression with the given string.
+ This is the main interface to the client code, once the complete
+ expression has been built.
+
+ If you want the grammar to require that the entire input string be
+ successfully parsed, then set C{parseAll} to True (equivalent to ending
+ the grammar with C{L{StringEnd()}}).
+
+ Note: C{parseString} implicitly calls C{expandtabs()} on the input string,
+ in order to report proper column numbers in parse actions.
+ If the input string contains tabs and
+ the grammar uses parse actions that use the C{loc} argument to index into the
+ string being parsed, you can ensure you have a consistent view of the input
+ string by:
+ - calling C{parseWithTabs} on your grammar before calling C{parseString}
+ (see L{I{parseWithTabs}<parseWithTabs>})
+ - define your parse action using the full C{(s,loc,toks)} signature, and
+ reference the input string using the parse action's C{s} argument
+ - explictly expand the tabs in your input string before calling
+ C{parseString}
+
+ Example::
+ Word('a').parseString('aaaaabaaa') # -> ['aaaaa']
+ Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text
+ """
+ ParserElement.resetCache()
+ if not self.streamlined:
+ self.streamline()
+ #~ self.saveAsList = True
+ for e in self.ignoreExprs:
+ e.streamline()
+ if not self.keepTabs:
+ instring = instring.expandtabs()
+ try:
+ loc, tokens = self._parse( instring, 0 )
+ if parseAll:
+ loc = self.preParse( instring, loc )
+ se = Empty() + StringEnd()
+ se._parse( instring, loc )
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+ else:
+ return tokens
+
+ def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ):
+ """
+ Scan the input string for expression matches. Each match will return the
+ matching tokens, start location, and end location. May be called with optional
+ C{maxMatches} argument, to clip scanning after 'n' matches are found. If
+ C{overlap} is specified, then overlapping matches will be reported.
+
+ Note that the start and end locations are reported relative to the string
+ being parsed. See L{I{parseString}<parseString>} for more information on parsing
+ strings with embedded tabs.
+
+ Example::
+ source = "sldjf123lsdjjkf345sldkjf879lkjsfd987"
+ print(source)
+ for tokens,start,end in Word(alphas).scanString(source):
+ print(' '*start + '^'*(end-start))
+ print(' '*start + tokens[0])
+
+ prints::
+
+ sldjf123lsdjjkf345sldkjf879lkjsfd987
+ ^^^^^
+ sldjf
+ ^^^^^^^
+ lsdjjkf
+ ^^^^^^
+ sldkjf
+ ^^^^^^
+ lkjsfd
+ """
+ if not self.streamlined:
+ self.streamline()
+ for e in self.ignoreExprs:
+ e.streamline()
+
+ if not self.keepTabs:
+ instring = _ustr(instring).expandtabs()
+ instrlen = len(instring)
+ loc = 0
+ preparseFn = self.preParse
+ parseFn = self._parse
+ ParserElement.resetCache()
+ matches = 0
+ try:
+ while loc <= instrlen and matches < maxMatches:
+ try:
+ preloc = preparseFn( instring, loc )
+ nextLoc,tokens = parseFn( instring, preloc, callPreParse=False )
+ except ParseException:
+ loc = preloc+1
+ else:
+ if nextLoc > loc:
+ matches += 1
+ yield tokens, preloc, nextLoc
+ if overlap:
+ nextloc = preparseFn( instring, loc )
+ if nextloc > loc:
+ loc = nextLoc
+ else:
+ loc += 1
+ else:
+ loc = nextLoc
+ else:
+ loc = preloc+1
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def transformString( self, instring ):
+ """
+ Extension to C{L{scanString}}, to modify matching text with modified tokens that may
+ be returned from a parse action. To use C{transformString}, define a grammar and
+ attach a parse action to it that modifies the returned token list.
+ Invoking C{transformString()} on a target string will then scan for matches,
+ and replace the matched text patterns according to the logic in the parse
+ action. C{transformString()} returns the resulting transformed string.
+
+ Example::
+ wd = Word(alphas)
+ wd.setParseAction(lambda toks: toks[0].title())
+
+ print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york."))
+ Prints::
+ Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York.
+ """
+ out = []
+ lastE = 0
+ # force preservation of <TAB>s, to minimize unwanted transformation of string, and to
+ # keep string locs straight between transformString and scanString
+ self.keepTabs = True
+ try:
+ for t,s,e in self.scanString( instring ):
+ out.append( instring[lastE:s] )
+ if t:
+ if isinstance(t,ParseResults):
+ out += t.asList()
+ elif isinstance(t,list):
+ out += t
+ else:
+ out.append(t)
+ lastE = e
+ out.append(instring[lastE:])
+ out = [o for o in out if o]
+ return "".join(map(_ustr,_flatten(out)))
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def searchString( self, instring, maxMatches=_MAX_INT ):
+ """
+ Another extension to C{L{scanString}}, simplifying the access to the tokens found
+ to match the given parse expression. May be called with optional
+ C{maxMatches} argument, to clip searching after 'n' matches are found.
+
+ Example::
+ # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters
+ cap_word = Word(alphas.upper(), alphas.lower())
+
+ print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))
+
+ # the sum() builtin can be used to merge results into a single ParseResults object
+ print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")))
+ prints::
+ [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']]
+ ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity']
+ """
+ try:
+ return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ])
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False):
+ """
+ Generator method to split a string using the given expression as a separator.
+ May be called with optional C{maxsplit} argument, to limit the number of splits;
+ and the optional C{includeSeparators} argument (default=C{False}), if the separating
+ matching text should be included in the split results.
+
+ Example::
+ punc = oneOf(list(".,;:/-!?"))
+ print(list(punc.split("This, this?, this sentence, is badly punctuated!")))
+ prints::
+ ['This', ' this', '', ' this sentence', ' is badly punctuated', '']
+ """
+ splits = 0
+ last = 0
+ for t,s,e in self.scanString(instring, maxMatches=maxsplit):
+ yield instring[last:s]
+ if includeSeparators:
+ yield t[0]
+ last = e
+ yield instring[last:]
+
+ def __add__(self, other ):
+ """
+ Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement
+ converts them to L{Literal}s by default.
+
+ Example::
+ greet = Word(alphas) + "," + Word(alphas) + "!"
+ hello = "Hello, World!"
+ print (hello, "->", greet.parseString(hello))
+ Prints::
+ Hello, World! -> ['Hello', ',', 'World', '!']
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return And( [ self, other ] )
+
+ def __radd__(self, other ):
+ """
+ Implementation of + operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other + self
+
+ def __sub__(self, other):
+ """
+ Implementation of - operator, returns C{L{And}} with error stop
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return self + And._ErrorStop() + other
+
+ def __rsub__(self, other ):
+ """
+ Implementation of - operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other - self
+
+ def __mul__(self,other):
+ """
+ Implementation of * operator, allows use of C{expr * 3} in place of
+ C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer
+ tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples
+ may also include C{None} as in:
+ - C{expr*(n,None)} or C{expr*(n,)} is equivalent
+ to C{expr*n + L{ZeroOrMore}(expr)}
+ (read as "at least n instances of C{expr}")
+ - C{expr*(None,n)} is equivalent to C{expr*(0,n)}
+ (read as "0 to n instances of C{expr}")
+ - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)}
+ - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)}
+
+ Note that C{expr*(None,n)} does not raise an exception if
+ more than n exprs exist in the input stream; that is,
+ C{expr*(None,n)} does not enforce a maximum number of expr
+ occurrences. If this behavior is desired, then write
+ C{expr*(None,n) + ~expr}
+ """
+ if isinstance(other,int):
+ minElements, optElements = other,0
+ elif isinstance(other,tuple):
+ other = (other + (None, None))[:2]
+ if other[0] is None:
+ other = (0, other[1])
+ if isinstance(other[0],int) and other[1] is None:
+ if other[0] == 0:
+ return ZeroOrMore(self)
+ if other[0] == 1:
+ return OneOrMore(self)
+ else:
+ return self*other[0] + ZeroOrMore(self)
+ elif isinstance(other[0],int) and isinstance(other[1],int):
+ minElements, optElements = other
+ optElements -= minElements
+ else:
+ raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1]))
+ else:
+ raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other))
+
+ if minElements < 0:
+ raise ValueError("cannot multiply ParserElement by negative value")
+ if optElements < 0:
+ raise ValueError("second tuple value must be greater or equal to first tuple value")
+ if minElements == optElements == 0:
+ raise ValueError("cannot multiply ParserElement by 0 or (0,0)")
+
+ if (optElements):
+ def makeOptionalList(n):
+ if n>1:
+ return Optional(self + makeOptionalList(n-1))
+ else:
+ return Optional(self)
+ if minElements:
+ if minElements == 1:
+ ret = self + makeOptionalList(optElements)
+ else:
+ ret = And([self]*minElements) + makeOptionalList(optElements)
+ else:
+ ret = makeOptionalList(optElements)
+ else:
+ if minElements == 1:
+ ret = self
+ else:
+ ret = And([self]*minElements)
+ return ret
+
+ def __rmul__(self, other):
+ return self.__mul__(other)
+
+ def __or__(self, other ):
+ """
+ Implementation of | operator - returns C{L{MatchFirst}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return MatchFirst( [ self, other ] )
+
+ def __ror__(self, other ):
+ """
+ Implementation of | operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other | self
+
+ def __xor__(self, other ):
+ """
+ Implementation of ^ operator - returns C{L{Or}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return Or( [ self, other ] )
+
+ def __rxor__(self, other ):
+ """
+ Implementation of ^ operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other ^ self
+
+ def __and__(self, other ):
+ """
+ Implementation of & operator - returns C{L{Each}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return Each( [ self, other ] )
+
+ def __rand__(self, other ):
+ """
+ Implementation of & operator when left operand is not a C{L{ParserElement}}
+ """
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ if not isinstance( other, ParserElement ):
+ warnings.warn("Cannot combine element of type %s with ParserElement" % type(other),
+ SyntaxWarning, stacklevel=2)
+ return None
+ return other & self
+
+ def __invert__( self ):
+ """
+ Implementation of ~ operator - returns C{L{NotAny}}
+ """
+ return NotAny( self )
+
+ def __call__(self, name=None):
+ """
+ Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}.
+
+ If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be
+ passed as C{True}.
+
+ If C{name} is omitted, same as calling C{L{copy}}.
+
+ Example::
+ # these are equivalent
+ userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno")
+ userdata = Word(alphas)("name") + Word(nums+"-")("socsecno")
+ """
+ if name is not None:
+ return self.setResultsName(name)
+ else:
+ return self.copy()
+
+ def suppress( self ):
+ """
+ Suppresses the output of this C{ParserElement}; useful to keep punctuation from
+ cluttering up returned output.
+ """
+ return Suppress( self )
+
+ def leaveWhitespace( self ):
+ """
+ Disables the skipping of whitespace before matching the characters in the
+ C{ParserElement}'s defined pattern. This is normally only used internally by
+ the pyparsing module, but may be needed in some whitespace-sensitive grammars.
+ """
+ self.skipWhitespace = False
+ return self
+
+ def setWhitespaceChars( self, chars ):
+ """
+ Overrides the default whitespace chars
+ """
+ self.skipWhitespace = True
+ self.whiteChars = chars
+ self.copyDefaultWhiteChars = False
+ return self
+
+ def parseWithTabs( self ):
+ """
+ Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string.
+ Must be called before C{parseString} when the input grammar contains elements that
+ match C{<TAB>} characters.
+ """
+ self.keepTabs = True
+ return self
+
+ def ignore( self, other ):
+ """
+ Define expression to be ignored (e.g., comments) while doing pattern
+ matching; may be called repeatedly, to define multiple comment or other
+ ignorable patterns.
+
+ Example::
+ patt = OneOrMore(Word(alphas))
+ patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj']
+
+ patt.ignore(cStyleComment)
+ patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd']
+ """
+ if isinstance(other, basestring):
+ other = Suppress(other)
+
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ self.ignoreExprs.append(other)
+ else:
+ self.ignoreExprs.append( Suppress( other.copy() ) )
+ return self
+
+ def setDebugActions( self, startAction, successAction, exceptionAction ):
+ """
+ Enable display of debugging messages while doing pattern matching.
+ """
+ self.debugActions = (startAction or _defaultStartDebugAction,
+ successAction or _defaultSuccessDebugAction,
+ exceptionAction or _defaultExceptionDebugAction)
+ self.debug = True
+ return self
+
+ def setDebug( self, flag=True ):
+ """
+ Enable display of debugging messages while doing pattern matching.
+ Set C{flag} to True to enable, False to disable.
+
+ Example::
+ wd = Word(alphas).setName("alphaword")
+ integer = Word(nums).setName("numword")
+ term = wd | integer
+
+ # turn on debugging for wd
+ wd.setDebug()
+
+ OneOrMore(term).parseString("abc 123 xyz 890")
+
+ prints::
+ Match alphaword at loc 0(1,1)
+ Matched alphaword -> ['abc']
+ Match alphaword at loc 3(1,4)
+ Exception raised:Expected alphaword (at char 4), (line:1, col:5)
+ Match alphaword at loc 7(1,8)
+ Matched alphaword -> ['xyz']
+ Match alphaword at loc 11(1,12)
+ Exception raised:Expected alphaword (at char 12), (line:1, col:13)
+ Match alphaword at loc 15(1,16)
+ Exception raised:Expected alphaword (at char 15), (line:1, col:16)
+
+ The output shown is that produced by the default debug actions - custom debug actions can be
+ specified using L{setDebugActions}. Prior to attempting
+ to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"}
+ is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"}
+ message is shown. Also note the use of L{setName} to assign a human-readable name to the expression,
+ which makes debugging and exception messages easier to understand - for instance, the default
+ name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}.
+ """
+ if flag:
+ self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction )
+ else:
+ self.debug = False
+ return self
+
+ def __str__( self ):
+ return self.name
+
+ def __repr__( self ):
+ return _ustr(self)
+
+ def streamline( self ):
+ self.streamlined = True
+ self.strRepr = None
+ return self
+
+ def checkRecursion( self, parseElementList ):
+ pass
+
+ def validate( self, validateTrace=[] ):
+ """
+ Check defined expressions for valid structure, check for infinite recursive definitions.
+ """
+ self.checkRecursion( [] )
+
+ def parseFile( self, file_or_filename, parseAll=False ):
+ """
+ Execute the parse expression on the given file or filename.
+ If a filename is specified (instead of a file object),
+ the entire file is opened, read, and closed before parsing.
+ """
+ try:
+ file_contents = file_or_filename.read()
+ except AttributeError:
+ with open(file_or_filename, "r") as f:
+ file_contents = f.read()
+ try:
+ return self.parseString(file_contents, parseAll)
+ except ParseBaseException as exc:
+ if ParserElement.verbose_stacktrace:
+ raise
+ else:
+ # catch and re-raise exception from here, clears out pyparsing internal stack trace
+ raise exc
+
+ def __eq__(self,other):
+ if isinstance(other, ParserElement):
+ return self is other or vars(self) == vars(other)
+ elif isinstance(other, basestring):
+ return self.matches(other)
+ else:
+ return super(ParserElement,self)==other
+
+ def __ne__(self,other):
+ return not (self == other)
+
+ def __hash__(self):
+ return hash(id(self))
+
+ def __req__(self,other):
+ return self == other
+
+ def __rne__(self,other):
+ return not (self == other)
+
+ def matches(self, testString, parseAll=True):
+ """
+ Method for quick testing of a parser against a test string. Good for simple
+ inline microtests of sub expressions while building up larger parser.
+
+ Parameters:
+ - testString - to test against this expression for a match
+ - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
+
+ Example::
+ expr = Word(nums)
+ assert expr.matches("100")
+ """
+ try:
+ self.parseString(_ustr(testString), parseAll=parseAll)
+ return True
+ except ParseBaseException:
+ return False
+
+ def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False):
+ """
+ Execute the parse expression on a series of test strings, showing each
+ test, the parsed results or where the parse failed. Quick and easy way to
+ run a parse expression against a list of sample strings.
+
+ Parameters:
+ - tests - a list of separate test strings, or a multiline string of test strings
+ - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
+ - comment - (default=C{'#'}) - expression for indicating embedded comments in the test
+ string; pass None to disable comment filtering
+ - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline;
+ if False, only dump nested list
+ - printResults - (default=C{True}) prints test output to stdout
+ - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing
+
+ Returns: a (success, results) tuple, where success indicates that all tests succeeded
+ (or failed if C{failureTests} is True), and the results contain a list of lines of each
+ test's output
+
+ Example::
+ number_expr = pyparsing_common.number.copy()
+
+ result = number_expr.runTests('''
+ # unsigned integer
+ 100
+ # negative integer
+ -100
+ # float with scientific notation
+ 6.02e23
+ # integer with scientific notation
+ 1e-12
+ ''')
+ print("Success" if result[0] else "Failed!")
+
+ result = number_expr.runTests('''
+ # stray character
+ 100Z
+ # missing leading digit before '.'
+ -.100
+ # too many '.'
+ 3.14.159
+ ''', failureTests=True)
+ print("Success" if result[0] else "Failed!")
+ prints::
+ # unsigned integer
+ 100
+ [100]
+
+ # negative integer
+ -100
+ [-100]
+
+ # float with scientific notation
+ 6.02e23
+ [6.02e+23]
+
+ # integer with scientific notation
+ 1e-12
+ [1e-12]
+
+ Success
+
+ # stray character
+ 100Z
+ ^
+ FAIL: Expected end of text (at char 3), (line:1, col:4)
+
+ # missing leading digit before '.'
+ -.100
+ ^
+ FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1)
+
+ # too many '.'
+ 3.14.159
+ ^
+ FAIL: Expected end of text (at char 4), (line:1, col:5)
+
+ Success
+
+ Each test string must be on a single line. If you want to test a string that spans multiple
+ lines, create a test like this::
+
+ expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines")
+
+ (Note that this is a raw string literal, you must include the leading 'r'.)
+ """
+ if isinstance(tests, basestring):
+ tests = list(map(str.strip, tests.rstrip().splitlines()))
+ if isinstance(comment, basestring):
+ comment = Literal(comment)
+ allResults = []
+ comments = []
+ success = True
+ for t in tests:
+ if comment is not None and comment.matches(t, False) or comments and not t:
+ comments.append(t)
+ continue
+ if not t:
+ continue
+ out = ['\n'.join(comments), t]
+ comments = []
+ try:
+ t = t.replace(r'\n','\n')
+ result = self.parseString(t, parseAll=parseAll)
+ out.append(result.dump(full=fullDump))
+ success = success and not failureTests
+ except ParseBaseException as pe:
+ fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else ""
+ if '\n' in t:
+ out.append(line(pe.loc, t))
+ out.append(' '*(col(pe.loc,t)-1) + '^' + fatal)
+ else:
+ out.append(' '*pe.loc + '^' + fatal)
+ out.append("FAIL: " + str(pe))
+ success = success and failureTests
+ result = pe
+ except Exception as exc:
+ out.append("FAIL-EXCEPTION: " + str(exc))
+ success = success and failureTests
+ result = exc
+
+ if printResults:
+ if fullDump:
+ out.append('')
+ print('\n'.join(out))
+
+ allResults.append((t, result))
+
+ return success, allResults
+
+
+class Token(ParserElement):
+ """
+ Abstract C{ParserElement} subclass, for defining atomic matching patterns.
+ """
+ def __init__( self ):
+ super(Token,self).__init__( savelist=False )
+
+
+class Empty(Token):
+ """
+ An empty token, will always match.
+ """
+ def __init__( self ):
+ super(Empty,self).__init__()
+ self.name = "Empty"
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+
+
+class NoMatch(Token):
+ """
+ A token that will never match.
+ """
+ def __init__( self ):
+ super(NoMatch,self).__init__()
+ self.name = "NoMatch"
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+ self.errmsg = "Unmatchable token"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ raise ParseException(instring, loc, self.errmsg, self)
+
+
+class Literal(Token):
+ """
+ Token to exactly match a specified string.
+
+ Example::
+ Literal('blah').parseString('blah') # -> ['blah']
+ Literal('blah').parseString('blahfooblah') # -> ['blah']
+ Literal('blah').parseString('bla') # -> Exception: Expected "blah"
+
+ For case-insensitive matching, use L{CaselessLiteral}.
+
+ For keyword matching (force word break before and after the matched string),
+ use L{Keyword} or L{CaselessKeyword}.
+ """
+ def __init__( self, matchString ):
+ super(Literal,self).__init__()
+ self.match = matchString
+ self.matchLen = len(matchString)
+ try:
+ self.firstMatchChar = matchString[0]
+ except IndexError:
+ warnings.warn("null string passed to Literal; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+ self.__class__ = Empty
+ self.name = '"%s"' % _ustr(self.match)
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = False
+ self.mayIndexError = False
+
+ # Performance tuning: this routine gets called a *lot*
+ # if this is a single character match string and the first character matches,
+ # short-circuit as quickly as possible, and avoid calling startswith
+ #~ @profile
+ def parseImpl( self, instring, loc, doActions=True ):
+ if (instring[loc] == self.firstMatchChar and
+ (self.matchLen==1 or instring.startswith(self.match,loc)) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+_L = Literal
+ParserElement._literalStringClass = Literal
+
+class Keyword(Token):
+ """
+ Token to exactly match a specified string as a keyword, that is, it must be
+ immediately followed by a non-keyword character. Compare with C{L{Literal}}:
+ - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}.
+ - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'}
+ Accepts two optional constructor arguments in addition to the keyword string:
+ - C{identChars} is a string of characters that would be valid identifier characters,
+ defaulting to all alphanumerics + "_" and "$"
+ - C{caseless} allows case-insensitive matching, default is C{False}.
+
+ Example::
+ Keyword("start").parseString("start") # -> ['start']
+ Keyword("start").parseString("starting") # -> Exception
+
+ For case-insensitive matching, use L{CaselessKeyword}.
+ """
+ DEFAULT_KEYWORD_CHARS = alphanums+"_$"
+
+ def __init__( self, matchString, identChars=None, caseless=False ):
+ super(Keyword,self).__init__()
+ if identChars is None:
+ identChars = Keyword.DEFAULT_KEYWORD_CHARS
+ self.match = matchString
+ self.matchLen = len(matchString)
+ try:
+ self.firstMatchChar = matchString[0]
+ except IndexError:
+ warnings.warn("null string passed to Keyword; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+ self.name = '"%s"' % self.match
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = False
+ self.mayIndexError = False
+ self.caseless = caseless
+ if caseless:
+ self.caselessmatch = matchString.upper()
+ identChars = identChars.upper()
+ self.identChars = set(identChars)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.caseless:
+ if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and
+ (loc == 0 or instring[loc-1].upper() not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ else:
+ if (instring[loc] == self.firstMatchChar and
+ (self.matchLen==1 or instring.startswith(self.match,loc)) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and
+ (loc == 0 or instring[loc-1] not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ def copy(self):
+ c = super(Keyword,self).copy()
+ c.identChars = Keyword.DEFAULT_KEYWORD_CHARS
+ return c
+
+ @staticmethod
+ def setDefaultKeywordChars( chars ):
+ """Overrides the default Keyword chars
+ """
+ Keyword.DEFAULT_KEYWORD_CHARS = chars
+
+class CaselessLiteral(Literal):
+ """
+ Token to match a specified string, ignoring case of letters.
+ Note: the matched results will always be in the case of the given
+ match string, NOT the case of the input text.
+
+ Example::
+ OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD']
+
+ (Contrast with example for L{CaselessKeyword}.)
+ """
+ def __init__( self, matchString ):
+ super(CaselessLiteral,self).__init__( matchString.upper() )
+ # Preserve the defining literal.
+ self.returnString = matchString
+ self.name = "'%s'" % self.returnString
+ self.errmsg = "Expected " + self.name
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if instring[ loc:loc+self.matchLen ].upper() == self.match:
+ return loc+self.matchLen, self.returnString
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class CaselessKeyword(Keyword):
+ """
+ Caseless version of L{Keyword}.
+
+ Example::
+ OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD']
+
+ (Contrast with example for L{CaselessLiteral}.)
+ """
+ def __init__( self, matchString, identChars=None ):
+ super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True )
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and
+ (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ):
+ return loc+self.matchLen, self.match
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class CloseMatch(Token):
+ """
+ A variation on L{Literal} which matches "close" matches, that is,
+ strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters:
+ - C{match_string} - string to be matched
+ - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match
+
+ The results from a successful parse will contain the matched text from the input string and the following named results:
+ - C{mismatches} - a list of the positions within the match_string where mismatches were found
+ - C{original} - the original match_string used to compare against the input string
+
+ If C{mismatches} is an empty list, then the match was an exact match.
+
+ Example::
+ patt = CloseMatch("ATCATCGAATGGA")
+ patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']})
+ patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1)
+
+ # exact match
+ patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']})
+
+ # close match allowing up to 2 mismatches
+ patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2)
+ patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']})
+ """
+ def __init__(self, match_string, maxMismatches=1):
+ super(CloseMatch,self).__init__()
+ self.name = match_string
+ self.match_string = match_string
+ self.maxMismatches = maxMismatches
+ self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches)
+ self.mayIndexError = False
+ self.mayReturnEmpty = False
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ start = loc
+ instrlen = len(instring)
+ maxloc = start + len(self.match_string)
+
+ if maxloc <= instrlen:
+ match_string = self.match_string
+ match_stringloc = 0
+ mismatches = []
+ maxMismatches = self.maxMismatches
+
+ for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)):
+ src,mat = s_m
+ if src != mat:
+ mismatches.append(match_stringloc)
+ if len(mismatches) > maxMismatches:
+ break
+ else:
+ loc = match_stringloc + 1
+ results = ParseResults([instring[start:loc]])
+ results['original'] = self.match_string
+ results['mismatches'] = mismatches
+ return loc, results
+
+ raise ParseException(instring, loc, self.errmsg, self)
+
+
+class Word(Token):
+ """
+ Token for matching words composed of allowed character sets.
+ Defined with string containing all allowed initial characters,
+ an optional string containing allowed body characters (if omitted,
+ defaults to the initial character set), and an optional minimum,
+ maximum, and/or exact length. The default value for C{min} is 1 (a
+ minimum value < 1 is not valid); the default values for C{max} and C{exact}
+ are 0, meaning no maximum or exact length restriction. An optional
+ C{excludeChars} parameter can list characters that might be found in
+ the input C{bodyChars} string; useful to define a word of all printables
+ except for one or two characters, for instance.
+
+ L{srange} is useful for defining custom character set strings for defining
+ C{Word} expressions, using range notation from regular expression character sets.
+
+ A common mistake is to use C{Word} to match a specific literal string, as in
+ C{Word("Address")}. Remember that C{Word} uses the string argument to define
+ I{sets} of matchable characters. This expression would match "Add", "AAA",
+ "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'.
+ To match an exact literal string, use L{Literal} or L{Keyword}.
+
+ pyparsing includes helper strings for building Words:
+ - L{alphas}
+ - L{nums}
+ - L{alphanums}
+ - L{hexnums}
+ - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.)
+ - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.)
+ - L{printables} (any non-whitespace character)
+
+ Example::
+ # a word composed of digits
+ integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9"))
+
+ # a word with a leading capital, and zero or more lowercase
+ capital_word = Word(alphas.upper(), alphas.lower())
+
+ # hostnames are alphanumeric, with leading alpha, and '-'
+ hostname = Word(alphas, alphanums+'-')
+
+ # roman numeral (not a strict parser, accepts invalid mix of characters)
+ roman = Word("IVXLCDM")
+
+ # any string of non-whitespace characters, except for ','
+ csv_value = Word(printables, excludeChars=",")
+ """
+ def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ):
+ super(Word,self).__init__()
+ if excludeChars:
+ initChars = ''.join(c for c in initChars if c not in excludeChars)
+ if bodyChars:
+ bodyChars = ''.join(c for c in bodyChars if c not in excludeChars)
+ self.initCharsOrig = initChars
+ self.initChars = set(initChars)
+ if bodyChars :
+ self.bodyCharsOrig = bodyChars
+ self.bodyChars = set(bodyChars)
+ else:
+ self.bodyCharsOrig = initChars
+ self.bodyChars = set(initChars)
+
+ self.maxSpecified = max > 0
+
+ if min < 1:
+ raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted")
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.asKeyword = asKeyword
+
+ if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0):
+ if self.bodyCharsOrig == self.initCharsOrig:
+ self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig)
+ elif len(self.initCharsOrig) == 1:
+ self.reString = "%s[%s]*" % \
+ (re.escape(self.initCharsOrig),
+ _escapeRegexRangeChars(self.bodyCharsOrig),)
+ else:
+ self.reString = "[%s][%s]*" % \
+ (_escapeRegexRangeChars(self.initCharsOrig),
+ _escapeRegexRangeChars(self.bodyCharsOrig),)
+ if self.asKeyword:
+ self.reString = r"\b"+self.reString+r"\b"
+ try:
+ self.re = re.compile( self.reString )
+ except Exception:
+ self.re = None
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.re:
+ result = self.re.match(instring,loc)
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ return loc, result.group()
+
+ if not(instring[ loc ] in self.initChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ start = loc
+ loc += 1
+ instrlen = len(instring)
+ bodychars = self.bodyChars
+ maxloc = start + self.maxLen
+ maxloc = min( maxloc, instrlen )
+ while loc < maxloc and instring[loc] in bodychars:
+ loc += 1
+
+ throwException = False
+ if loc - start < self.minLen:
+ throwException = True
+ if self.maxSpecified and loc < instrlen and instring[loc] in bodychars:
+ throwException = True
+ if self.asKeyword:
+ if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars):
+ throwException = True
+
+ if throwException:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+ def __str__( self ):
+ try:
+ return super(Word,self).__str__()
+ except Exception:
+ pass
+
+
+ if self.strRepr is None:
+
+ def charsAsStr(s):
+ if len(s)>4:
+ return s[:4]+"..."
+ else:
+ return s
+
+ if ( self.initCharsOrig != self.bodyCharsOrig ):
+ self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) )
+ else:
+ self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig)
+
+ return self.strRepr
+
+
+class Regex(Token):
+ r"""
+ Token for matching strings that match a given regular expression.
+ Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
+ If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as
+ named parse results.
+
+ Example::
+ realnum = Regex(r"[+-]?\d+\.\d*")
+ date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)')
+ # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
+ roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})")
+ """
+ compiledREtype = type(re.compile("[A-Z]"))
+ def __init__( self, pattern, flags=0):
+ """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags."""
+ super(Regex,self).__init__()
+
+ if isinstance(pattern, basestring):
+ if not pattern:
+ warnings.warn("null string passed to Regex; use Empty() instead",
+ SyntaxWarning, stacklevel=2)
+
+ self.pattern = pattern
+ self.flags = flags
+
+ try:
+ self.re = re.compile(self.pattern, self.flags)
+ self.reString = self.pattern
+ except sre_constants.error:
+ warnings.warn("invalid pattern (%s) passed to Regex" % pattern,
+ SyntaxWarning, stacklevel=2)
+ raise
+
+ elif isinstance(pattern, Regex.compiledREtype):
+ self.re = pattern
+ self.pattern = \
+ self.reString = str(pattern)
+ self.flags = flags
+
+ else:
+ raise ValueError("Regex may only be constructed with a string or a compiled RE object")
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ result = self.re.match(instring,loc)
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ d = result.groupdict()
+ ret = ParseResults(result.group())
+ if d:
+ for k in d:
+ ret[k] = d[k]
+ return loc,ret
+
+ def __str__( self ):
+ try:
+ return super(Regex,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "Re:(%s)" % repr(self.pattern)
+
+ return self.strRepr
+
+
+class QuotedString(Token):
+ r"""
+ Token for matching strings that are delimited by quoting characters.
+
+ Defined with the following parameters:
+ - quoteChar - string of one or more characters defining the quote delimiting string
+ - escChar - character to escape quotes, typically backslash (default=C{None})
+ - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None})
+ - multiline - boolean indicating whether quotes can span multiple lines (default=C{False})
+ - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True})
+ - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar)
+ - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True})
+
+ Example::
+ qs = QuotedString('"')
+ print(qs.searchString('lsjdf "This is the quote" sldjf'))
+ complex_qs = QuotedString('{{', endQuoteChar='}}')
+ print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf'))
+ sql_qs = QuotedString('"', escQuote='""')
+ print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf'))
+ prints::
+ [['This is the quote']]
+ [['This is the "quote"']]
+ [['This is the quote with "embedded" quotes']]
+ """
+ def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True):
+ super(QuotedString,self).__init__()
+
+ # remove white space from quote chars - wont work anyway
+ quoteChar = quoteChar.strip()
+ if not quoteChar:
+ warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
+ raise SyntaxError()
+
+ if endQuoteChar is None:
+ endQuoteChar = quoteChar
+ else:
+ endQuoteChar = endQuoteChar.strip()
+ if not endQuoteChar:
+ warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2)
+ raise SyntaxError()
+
+ self.quoteChar = quoteChar
+ self.quoteCharLen = len(quoteChar)
+ self.firstQuoteChar = quoteChar[0]
+ self.endQuoteChar = endQuoteChar
+ self.endQuoteCharLen = len(endQuoteChar)
+ self.escChar = escChar
+ self.escQuote = escQuote
+ self.unquoteResults = unquoteResults
+ self.convertWhitespaceEscapes = convertWhitespaceEscapes
+
+ if multiline:
+ self.flags = re.MULTILINE | re.DOTALL
+ self.pattern = r'%s(?:[^%s%s]' % \
+ ( re.escape(self.quoteChar),
+ _escapeRegexRangeChars(self.endQuoteChar[0]),
+ (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
+ else:
+ self.flags = 0
+ self.pattern = r'%s(?:[^%s\n\r%s]' % \
+ ( re.escape(self.quoteChar),
+ _escapeRegexRangeChars(self.endQuoteChar[0]),
+ (escChar is not None and _escapeRegexRangeChars(escChar) or '') )
+ if len(self.endQuoteChar) > 1:
+ self.pattern += (
+ '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]),
+ _escapeRegexRangeChars(self.endQuoteChar[i]))
+ for i in range(len(self.endQuoteChar)-1,0,-1)) + ')'
+ )
+ if escQuote:
+ self.pattern += (r'|(?:%s)' % re.escape(escQuote))
+ if escChar:
+ self.pattern += (r'|(?:%s.)' % re.escape(escChar))
+ self.escCharReplacePattern = re.escape(self.escChar)+"(.)"
+ self.pattern += (r')*%s' % re.escape(self.endQuoteChar))
+
+ try:
+ self.re = re.compile(self.pattern, self.flags)
+ self.reString = self.pattern
+ except sre_constants.error:
+ warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern,
+ SyntaxWarning, stacklevel=2)
+ raise
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayIndexError = False
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None
+ if not result:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ loc = result.end()
+ ret = result.group()
+
+ if self.unquoteResults:
+
+ # strip off quotes
+ ret = ret[self.quoteCharLen:-self.endQuoteCharLen]
+
+ if isinstance(ret,basestring):
+ # replace escaped whitespace
+ if '\\' in ret and self.convertWhitespaceEscapes:
+ ws_map = {
+ r'\t' : '\t',
+ r'\n' : '\n',
+ r'\f' : '\f',
+ r'\r' : '\r',
+ }
+ for wslit,wschar in ws_map.items():
+ ret = ret.replace(wslit, wschar)
+
+ # replace escaped characters
+ if self.escChar:
+ ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret)
+
+ # replace escaped quotes
+ if self.escQuote:
+ ret = ret.replace(self.escQuote, self.endQuoteChar)
+
+ return loc, ret
+
+ def __str__( self ):
+ try:
+ return super(QuotedString,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar)
+
+ return self.strRepr
+
+
+class CharsNotIn(Token):
+ """
+ Token for matching words composed of characters I{not} in a given set (will
+ include whitespace in matched characters if not listed in the provided exclusion set - see example).
+ Defined with string containing all disallowed characters, and an optional
+ minimum, maximum, and/or exact length. The default value for C{min} is 1 (a
+ minimum value < 1 is not valid); the default values for C{max} and C{exact}
+ are 0, meaning no maximum or exact length restriction.
+
+ Example::
+ # define a comma-separated-value as anything that is not a ','
+ csv_value = CharsNotIn(',')
+ print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213"))
+ prints::
+ ['dkls', 'lsdkjf', 's12 34', '@!#', '213']
+ """
+ def __init__( self, notChars, min=1, max=0, exact=0 ):
+ super(CharsNotIn,self).__init__()
+ self.skipWhitespace = False
+ self.notChars = notChars
+
+ if min < 1:
+ raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted")
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ self.name = _ustr(self)
+ self.errmsg = "Expected " + self.name
+ self.mayReturnEmpty = ( self.minLen == 0 )
+ self.mayIndexError = False
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if instring[loc] in self.notChars:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ start = loc
+ loc += 1
+ notchars = self.notChars
+ maxlen = min( start+self.maxLen, len(instring) )
+ while loc < maxlen and \
+ (instring[loc] not in notchars):
+ loc += 1
+
+ if loc - start < self.minLen:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+ def __str__( self ):
+ try:
+ return super(CharsNotIn, self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ if len(self.notChars) > 4:
+ self.strRepr = "!W:(%s...)" % self.notChars[:4]
+ else:
+ self.strRepr = "!W:(%s)" % self.notChars
+
+ return self.strRepr
+
+class White(Token):
+ """
+ Special matching class for matching whitespace. Normally, whitespace is ignored
+ by pyparsing grammars. This class is included when some whitespace structures
+ are significant. Define with a string containing the whitespace characters to be
+ matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments,
+ as defined for the C{L{Word}} class.
+ """
+ whiteStrs = {
+ " " : "<SPC>",
+ "\t": "<TAB>",
+ "\n": "<LF>",
+ "\r": "<CR>",
+ "\f": "<FF>",
+ }
+ def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0):
+ super(White,self).__init__()
+ self.matchWhite = ws
+ self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) )
+ #~ self.leaveWhitespace()
+ self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite))
+ self.mayReturnEmpty = True
+ self.errmsg = "Expected " + self.name
+
+ self.minLen = min
+
+ if max > 0:
+ self.maxLen = max
+ else:
+ self.maxLen = _MAX_INT
+
+ if exact > 0:
+ self.maxLen = exact
+ self.minLen = exact
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if not(instring[ loc ] in self.matchWhite):
+ raise ParseException(instring, loc, self.errmsg, self)
+ start = loc
+ loc += 1
+ maxloc = start + self.maxLen
+ maxloc = min( maxloc, len(instring) )
+ while loc < maxloc and instring[loc] in self.matchWhite:
+ loc += 1
+
+ if loc - start < self.minLen:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ return loc, instring[start:loc]
+
+
+class _PositionToken(Token):
+ def __init__( self ):
+ super(_PositionToken,self).__init__()
+ self.name=self.__class__.__name__
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+
+class GoToColumn(_PositionToken):
+ """
+ Token to advance to a specific column of input text; useful for tabular report scraping.
+ """
+ def __init__( self, colno ):
+ super(GoToColumn,self).__init__()
+ self.col = colno
+
+ def preParse( self, instring, loc ):
+ if col(loc,instring) != self.col:
+ instrlen = len(instring)
+ if self.ignoreExprs:
+ loc = self._skipIgnorables( instring, loc )
+ while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col :
+ loc += 1
+ return loc
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ thiscol = col( loc, instring )
+ if thiscol > self.col:
+ raise ParseException( instring, loc, "Text not in expected column", self )
+ newloc = loc + self.col - thiscol
+ ret = instring[ loc: newloc ]
+ return newloc, ret
+
+
+class LineStart(_PositionToken):
+ """
+ Matches if current position is at the beginning of a line within the parse string
+
+ Example::
+
+ test = '''\
+ AAA this line
+ AAA and this line
+ AAA but not this one
+ B AAA and definitely not this one
+ '''
+
+ for t in (LineStart() + 'AAA' + restOfLine).searchString(test):
+ print(t)
+
+ Prints::
+ ['AAA', ' this line']
+ ['AAA', ' and this line']
+
+ """
+ def __init__( self ):
+ super(LineStart,self).__init__()
+ self.errmsg = "Expected start of line"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if col(loc, instring) == 1:
+ return loc, []
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class LineEnd(_PositionToken):
+ """
+ Matches if current position is at the end of a line within the parse string
+ """
+ def __init__( self ):
+ super(LineEnd,self).__init__()
+ self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") )
+ self.errmsg = "Expected end of line"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc<len(instring):
+ if instring[loc] == "\n":
+ return loc+1, "\n"
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+ elif loc == len(instring):
+ return loc+1, []
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class StringStart(_PositionToken):
+ """
+ Matches if current position is at the beginning of the parse string
+ """
+ def __init__( self ):
+ super(StringStart,self).__init__()
+ self.errmsg = "Expected start of text"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc != 0:
+ # see if entire string up to here is just whitespace and ignoreables
+ if loc != self.preParse( instring, 0 ):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+class StringEnd(_PositionToken):
+ """
+ Matches if current position is at the end of the parse string
+ """
+ def __init__( self ):
+ super(StringEnd,self).__init__()
+ self.errmsg = "Expected end of text"
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if loc < len(instring):
+ raise ParseException(instring, loc, self.errmsg, self)
+ elif loc == len(instring):
+ return loc+1, []
+ elif loc > len(instring):
+ return loc, []
+ else:
+ raise ParseException(instring, loc, self.errmsg, self)
+
+class WordStart(_PositionToken):
+ """
+ Matches if the current position is at the beginning of a Word, and
+ is not preceded by any character in a given set of C{wordChars}
+ (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
+ use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of
+ the string being parsed, or at the beginning of a line.
+ """
+ def __init__(self, wordChars = printables):
+ super(WordStart,self).__init__()
+ self.wordChars = set(wordChars)
+ self.errmsg = "Not at the start of a word"
+
+ def parseImpl(self, instring, loc, doActions=True ):
+ if loc != 0:
+ if (instring[loc-1] in self.wordChars or
+ instring[loc] not in self.wordChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+class WordEnd(_PositionToken):
+ """
+ Matches if the current position is at the end of a Word, and
+ is not followed by any character in a given set of C{wordChars}
+ (default=C{printables}). To emulate the C{\b} behavior of regular expressions,
+ use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of
+ the string being parsed, or at the end of a line.
+ """
+ def __init__(self, wordChars = printables):
+ super(WordEnd,self).__init__()
+ self.wordChars = set(wordChars)
+ self.skipWhitespace = False
+ self.errmsg = "Not at the end of a word"
+
+ def parseImpl(self, instring, loc, doActions=True ):
+ instrlen = len(instring)
+ if instrlen>0 and loc<instrlen:
+ if (instring[loc] in self.wordChars or
+ instring[loc-1] not in self.wordChars):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+
+class ParseExpression(ParserElement):
+ """
+ Abstract subclass of ParserElement, for combining and post-processing parsed tokens.
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(ParseExpression,self).__init__(savelist)
+ if isinstance( exprs, _generatorType ):
+ exprs = list(exprs)
+
+ if isinstance( exprs, basestring ):
+ self.exprs = [ ParserElement._literalStringClass( exprs ) ]
+ elif isinstance( exprs, Iterable ):
+ exprs = list(exprs)
+ # if sequence of strings provided, wrap with Literal
+ if all(isinstance(expr, basestring) for expr in exprs):
+ exprs = map(ParserElement._literalStringClass, exprs)
+ self.exprs = list(exprs)
+ else:
+ try:
+ self.exprs = list( exprs )
+ except TypeError:
+ self.exprs = [ exprs ]
+ self.callPreparse = False
+
+ def __getitem__( self, i ):
+ return self.exprs[i]
+
+ def append( self, other ):
+ self.exprs.append( other )
+ self.strRepr = None
+ return self
+
+ def leaveWhitespace( self ):
+ """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on
+ all contained expressions."""
+ self.skipWhitespace = False
+ self.exprs = [ e.copy() for e in self.exprs ]
+ for e in self.exprs:
+ e.leaveWhitespace()
+ return self
+
+ def ignore( self, other ):
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ super( ParseExpression, self).ignore( other )
+ for e in self.exprs:
+ e.ignore( self.ignoreExprs[-1] )
+ else:
+ super( ParseExpression, self).ignore( other )
+ for e in self.exprs:
+ e.ignore( self.ignoreExprs[-1] )
+ return self
+
+ def __str__( self ):
+ try:
+ return super(ParseExpression,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None:
+ self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) )
+ return self.strRepr
+
+ def streamline( self ):
+ super(ParseExpression,self).streamline()
+
+ for e in self.exprs:
+ e.streamline()
+
+ # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d )
+ # but only if there are no parse actions or resultsNames on the nested And's
+ # (likewise for Or's and MatchFirst's)
+ if ( len(self.exprs) == 2 ):
+ other = self.exprs[0]
+ if ( isinstance( other, self.__class__ ) and
+ not(other.parseAction) and
+ other.resultsName is None and
+ not other.debug ):
+ self.exprs = other.exprs[:] + [ self.exprs[1] ]
+ self.strRepr = None
+ self.mayReturnEmpty |= other.mayReturnEmpty
+ self.mayIndexError |= other.mayIndexError
+
+ other = self.exprs[-1]
+ if ( isinstance( other, self.__class__ ) and
+ not(other.parseAction) and
+ other.resultsName is None and
+ not other.debug ):
+ self.exprs = self.exprs[:-1] + other.exprs[:]
+ self.strRepr = None
+ self.mayReturnEmpty |= other.mayReturnEmpty
+ self.mayIndexError |= other.mayIndexError
+
+ self.errmsg = "Expected " + _ustr(self)
+
+ return self
+
+ def setResultsName( self, name, listAllMatches=False ):
+ ret = super(ParseExpression,self).setResultsName(name,listAllMatches)
+ return ret
+
+ def validate( self, validateTrace=[] ):
+ tmp = validateTrace[:]+[self]
+ for e in self.exprs:
+ e.validate(tmp)
+ self.checkRecursion( [] )
+
+ def copy(self):
+ ret = super(ParseExpression,self).copy()
+ ret.exprs = [e.copy() for e in self.exprs]
+ return ret
+
+class And(ParseExpression):
+ """
+ Requires all given C{ParseExpression}s to be found in the given order.
+ Expressions may be separated by whitespace.
+ May be constructed using the C{'+'} operator.
+ May also be constructed using the C{'-'} operator, which will suppress backtracking.
+
+ Example::
+ integer = Word(nums)
+ name_expr = OneOrMore(Word(alphas))
+
+ expr = And([integer("id"),name_expr("name"),integer("age")])
+ # more easily written as:
+ expr = integer("id") + name_expr("name") + integer("age")
+ """
+
+ class _ErrorStop(Empty):
+ def __init__(self, *args, **kwargs):
+ super(And._ErrorStop,self).__init__(*args, **kwargs)
+ self.name = '-'
+ self.leaveWhitespace()
+
+ def __init__( self, exprs, savelist = True ):
+ super(And,self).__init__(exprs, savelist)
+ self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
+ self.setWhitespaceChars( self.exprs[0].whiteChars )
+ self.skipWhitespace = self.exprs[0].skipWhitespace
+ self.callPreparse = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ # pass False as last arg to _parse for first element, since we already
+ # pre-parsed the string as part of our And pre-parsing
+ loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
+ errorStop = False
+ for e in self.exprs[1:]:
+ if isinstance(e, And._ErrorStop):
+ errorStop = True
+ continue
+ if errorStop:
+ try:
+ loc, exprtokens = e._parse( instring, loc, doActions )
+ except ParseSyntaxException:
+ raise
+ except ParseBaseException as pe:
+ pe.__traceback__ = None
+ raise ParseSyntaxException._from_exception(pe)
+ except IndexError:
+ raise ParseSyntaxException(instring, len(instring), self.errmsg, self)
+ else:
+ loc, exprtokens = e._parse( instring, loc, doActions )
+ if exprtokens or exprtokens.haskeys():
+ resultlist += exprtokens
+ return loc, resultlist
+
+ def __iadd__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #And( [ self, other ] )
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+ if not e.mayReturnEmpty:
+ break
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+
+class Or(ParseExpression):
+ """
+ Requires that at least one C{ParseExpression} is found.
+ If two expressions match, the expression that matches the longest string will be used.
+ May be constructed using the C{'^'} operator.
+
+ Example::
+ # construct Or using '^' operator
+
+ number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums))
+ print(number.searchString("123 3.1416 789"))
+ prints::
+ [['123'], ['3.1416'], ['789']]
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(Or,self).__init__(exprs, savelist)
+ if self.exprs:
+ self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
+ else:
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ maxExcLoc = -1
+ maxException = None
+ matches = []
+ for e in self.exprs:
+ try:
+ loc2 = e.tryParse( instring, loc )
+ except ParseException as err:
+ err.__traceback__ = None
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+ except IndexError:
+ if len(instring) > maxExcLoc:
+ maxException = ParseException(instring,len(instring),e.errmsg,self)
+ maxExcLoc = len(instring)
+ else:
+ # save match among all matches, to retry longest to shortest
+ matches.append((loc2, e))
+
+ if matches:
+ matches.sort(key=lambda x: -x[0])
+ for _,e in matches:
+ try:
+ return e._parse( instring, loc, doActions )
+ except ParseException as err:
+ err.__traceback__ = None
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+
+ if maxException is not None:
+ maxException.msg = self.errmsg
+ raise maxException
+ else:
+ raise ParseException(instring, loc, "no defined alternatives to match", self)
+
+
+ def __ixor__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #Or( [ self, other ] )
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class MatchFirst(ParseExpression):
+ """
+ Requires that at least one C{ParseExpression} is found.
+ If two expressions match, the first one listed is the one that will match.
+ May be constructed using the C{'|'} operator.
+
+ Example::
+ # construct MatchFirst using '|' operator
+
+ # watch the order of expressions to match
+ number = Word(nums) | Combine(Word(nums) + '.' + Word(nums))
+ print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']]
+
+ # put more selective expression first
+ number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums)
+ print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']]
+ """
+ def __init__( self, exprs, savelist = False ):
+ super(MatchFirst,self).__init__(exprs, savelist)
+ if self.exprs:
+ self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
+ else:
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ maxExcLoc = -1
+ maxException = None
+ for e in self.exprs:
+ try:
+ ret = e._parse( instring, loc, doActions )
+ return ret
+ except ParseException as err:
+ if err.loc > maxExcLoc:
+ maxException = err
+ maxExcLoc = err.loc
+ except IndexError:
+ if len(instring) > maxExcLoc:
+ maxException = ParseException(instring,len(instring),e.errmsg,self)
+ maxExcLoc = len(instring)
+
+ # only got here if no expression matched, raise exception for match that made it the furthest
+ else:
+ if maxException is not None:
+ maxException.msg = self.errmsg
+ raise maxException
+ else:
+ raise ParseException(instring, loc, "no defined alternatives to match", self)
+
+ def __ior__(self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass( other )
+ return self.append( other ) #MatchFirst( [ self, other ] )
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class Each(ParseExpression):
+ """
+ Requires all given C{ParseExpression}s to be found, but in any order.
+ Expressions may be separated by whitespace.
+ May be constructed using the C{'&'} operator.
+
+ Example::
+ color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN")
+ shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON")
+ integer = Word(nums)
+ shape_attr = "shape:" + shape_type("shape")
+ posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn")
+ color_attr = "color:" + color("color")
+ size_attr = "size:" + integer("size")
+
+ # use Each (using operator '&') to accept attributes in any order
+ # (shape and posn are required, color and size are optional)
+ shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr)
+
+ shape_spec.runTests('''
+ shape: SQUARE color: BLACK posn: 100, 120
+ shape: CIRCLE size: 50 color: BLUE posn: 50,80
+ color:GREEN size:20 shape:TRIANGLE posn:20,40
+ '''
+ )
+ prints::
+ shape: SQUARE color: BLACK posn: 100, 120
+ ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']]
+ - color: BLACK
+ - posn: ['100', ',', '120']
+ - x: 100
+ - y: 120
+ - shape: SQUARE
+
+
+ shape: CIRCLE size: 50 color: BLUE posn: 50,80
+ ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']]
+ - color: BLUE
+ - posn: ['50', ',', '80']
+ - x: 50
+ - y: 80
+ - shape: CIRCLE
+ - size: 50
+
+
+ color: GREEN size: 20 shape: TRIANGLE posn: 20,40
+ ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']]
+ - color: GREEN
+ - posn: ['20', ',', '40']
+ - x: 20
+ - y: 40
+ - shape: TRIANGLE
+ - size: 20
+ """
+ def __init__( self, exprs, savelist = True ):
+ super(Each,self).__init__(exprs, savelist)
+ self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
+ self.skipWhitespace = True
+ self.initExprGroups = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.initExprGroups:
+ self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional))
+ opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ]
+ opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)]
+ self.optionals = opt1 + opt2
+ self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ]
+ self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ]
+ self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ]
+ self.required += self.multirequired
+ self.initExprGroups = False
+ tmpLoc = loc
+ tmpReqd = self.required[:]
+ tmpOpt = self.optionals[:]
+ matchOrder = []
+
+ keepMatching = True
+ while keepMatching:
+ tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired
+ failed = []
+ for e in tmpExprs:
+ try:
+ tmpLoc = e.tryParse( instring, tmpLoc )
+ except ParseException:
+ failed.append(e)
+ else:
+ matchOrder.append(self.opt1map.get(id(e),e))
+ if e in tmpReqd:
+ tmpReqd.remove(e)
+ elif e in tmpOpt:
+ tmpOpt.remove(e)
+ if len(failed) == len(tmpExprs):
+ keepMatching = False
+
+ if tmpReqd:
+ missing = ", ".join(_ustr(e) for e in tmpReqd)
+ raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing )
+
+ # add any unmatched Optionals, in case they have default values defined
+ matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt]
+
+ resultlist = []
+ for e in matchOrder:
+ loc,results = e._parse(instring,loc,doActions)
+ resultlist.append(results)
+
+ finalResults = sum(resultlist, ParseResults([]))
+ return loc, finalResults
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}"
+
+ return self.strRepr
+
+ def checkRecursion( self, parseElementList ):
+ subRecCheckList = parseElementList[:] + [ self ]
+ for e in self.exprs:
+ e.checkRecursion( subRecCheckList )
+
+
+class ParseElementEnhance(ParserElement):
+ """
+ Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens.
+ """
+ def __init__( self, expr, savelist=False ):
+ super(ParseElementEnhance,self).__init__(savelist)
+ if isinstance( expr, basestring ):
+ if issubclass(ParserElement._literalStringClass, Token):
+ expr = ParserElement._literalStringClass(expr)
+ else:
+ expr = ParserElement._literalStringClass(Literal(expr))
+ self.expr = expr
+ self.strRepr = None
+ if expr is not None:
+ self.mayIndexError = expr.mayIndexError
+ self.mayReturnEmpty = expr.mayReturnEmpty
+ self.setWhitespaceChars( expr.whiteChars )
+ self.skipWhitespace = expr.skipWhitespace
+ self.saveAsList = expr.saveAsList
+ self.callPreparse = expr.callPreparse
+ self.ignoreExprs.extend(expr.ignoreExprs)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.expr is not None:
+ return self.expr._parse( instring, loc, doActions, callPreParse=False )
+ else:
+ raise ParseException("",loc,self.errmsg,self)
+
+ def leaveWhitespace( self ):
+ self.skipWhitespace = False
+ self.expr = self.expr.copy()
+ if self.expr is not None:
+ self.expr.leaveWhitespace()
+ return self
+
+ def ignore( self, other ):
+ if isinstance( other, Suppress ):
+ if other not in self.ignoreExprs:
+ super( ParseElementEnhance, self).ignore( other )
+ if self.expr is not None:
+ self.expr.ignore( self.ignoreExprs[-1] )
+ else:
+ super( ParseElementEnhance, self).ignore( other )
+ if self.expr is not None:
+ self.expr.ignore( self.ignoreExprs[-1] )
+ return self
+
+ def streamline( self ):
+ super(ParseElementEnhance,self).streamline()
+ if self.expr is not None:
+ self.expr.streamline()
+ return self
+
+ def checkRecursion( self, parseElementList ):
+ if self in parseElementList:
+ raise RecursiveGrammarException( parseElementList+[self] )
+ subRecCheckList = parseElementList[:] + [ self ]
+ if self.expr is not None:
+ self.expr.checkRecursion( subRecCheckList )
+
+ def validate( self, validateTrace=[] ):
+ tmp = validateTrace[:]+[self]
+ if self.expr is not None:
+ self.expr.validate(tmp)
+ self.checkRecursion( [] )
+
+ def __str__( self ):
+ try:
+ return super(ParseElementEnhance,self).__str__()
+ except Exception:
+ pass
+
+ if self.strRepr is None and self.expr is not None:
+ self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) )
+ return self.strRepr
+
+
+class FollowedBy(ParseElementEnhance):
+ """
+ Lookahead matching of the given parse expression. C{FollowedBy}
+ does I{not} advance the parsing position within the input string, it only
+ verifies that the specified parse expression matches at the current
+ position. C{FollowedBy} always returns a null token list.
+
+ Example::
+ # use FollowedBy to match a label only if it is followed by a ':'
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+
+ OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint()
+ prints::
+ [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']]
+ """
+ def __init__( self, expr ):
+ super(FollowedBy,self).__init__(expr)
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ self.expr.tryParse( instring, loc )
+ return loc, []
+
+
+class NotAny(ParseElementEnhance):
+ """
+ Lookahead to disallow matching with the given parse expression. C{NotAny}
+ does I{not} advance the parsing position within the input string, it only
+ verifies that the specified parse expression does I{not} match at the current
+ position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny}
+ always returns a null token list. May be constructed using the '~' operator.
+
+ Example::
+
+ """
+ def __init__( self, expr ):
+ super(NotAny,self).__init__(expr)
+ #~ self.leaveWhitespace()
+ self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs
+ self.mayReturnEmpty = True
+ self.errmsg = "Found unwanted token, "+_ustr(self.expr)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ if self.expr.canParseNext(instring, loc):
+ raise ParseException(instring, loc, self.errmsg, self)
+ return loc, []
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "~{" + _ustr(self.expr) + "}"
+
+ return self.strRepr
+
+class _MultipleMatch(ParseElementEnhance):
+ def __init__( self, expr, stopOn=None):
+ super(_MultipleMatch, self).__init__(expr)
+ self.saveAsList = True
+ ender = stopOn
+ if isinstance(ender, basestring):
+ ender = ParserElement._literalStringClass(ender)
+ self.not_ender = ~ender if ender is not None else None
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ self_expr_parse = self.expr._parse
+ self_skip_ignorables = self._skipIgnorables
+ check_ender = self.not_ender is not None
+ if check_ender:
+ try_not_ender = self.not_ender.tryParse
+
+ # must be at least one (but first see if we are the stopOn sentinel;
+ # if so, fail)
+ if check_ender:
+ try_not_ender(instring, loc)
+ loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
+ try:
+ hasIgnoreExprs = (not not self.ignoreExprs)
+ while 1:
+ if check_ender:
+ try_not_ender(instring, loc)
+ if hasIgnoreExprs:
+ preloc = self_skip_ignorables( instring, loc )
+ else:
+ preloc = loc
+ loc, tmptokens = self_expr_parse( instring, preloc, doActions )
+ if tmptokens or tmptokens.haskeys():
+ tokens += tmptokens
+ except (ParseException,IndexError):
+ pass
+
+ return loc, tokens
+
+class OneOrMore(_MultipleMatch):
+ """
+ Repetition of one or more of the given expression.
+
+ Parameters:
+ - expr - expression that must match one or more times
+ - stopOn - (default=C{None}) - expression for a terminating sentinel
+ (only required if the sentinel would ordinarily match the repetition
+ expression)
+
+ Example::
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
+
+ text = "shape: SQUARE posn: upper left color: BLACK"
+ OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']]
+
+ # use stopOn attribute for OneOrMore to avoid reading label string as part of the data
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+ OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']]
+
+ # could also be written as
+ (attr_expr * (1,)).parseString(text).pprint()
+ """
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "{" + _ustr(self.expr) + "}..."
+
+ return self.strRepr
+
+class ZeroOrMore(_MultipleMatch):
+ """
+ Optional repetition of zero or more of the given expression.
+
+ Parameters:
+ - expr - expression that must match zero or more times
+ - stopOn - (default=C{None}) - expression for a terminating sentinel
+ (only required if the sentinel would ordinarily match the repetition
+ expression)
+
+ Example: similar to L{OneOrMore}
+ """
+ def __init__( self, expr, stopOn=None):
+ super(ZeroOrMore,self).__init__(expr, stopOn=stopOn)
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ try:
+ return super(ZeroOrMore, self).parseImpl(instring, loc, doActions)
+ except (ParseException,IndexError):
+ return loc, []
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "[" + _ustr(self.expr) + "]..."
+
+ return self.strRepr
+
+class _NullToken(object):
+ def __bool__(self):
+ return False
+ __nonzero__ = __bool__
+ def __str__(self):
+ return ""
+
+_optionalNotMatched = _NullToken()
+class Optional(ParseElementEnhance):
+ """
+ Optional matching of the given expression.
+
+ Parameters:
+ - expr - expression that must match zero or more times
+ - default (optional) - value to be returned if the optional expression is not found.
+
+ Example::
+ # US postal code can be a 5-digit zip, plus optional 4-digit qualifier
+ zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4)))
+ zip.runTests('''
+ # traditional ZIP code
+ 12345
+
+ # ZIP+4 form
+ 12101-0001
+
+ # invalid ZIP
+ 98765-
+ ''')
+ prints::
+ # traditional ZIP code
+ 12345
+ ['12345']
+
+ # ZIP+4 form
+ 12101-0001
+ ['12101-0001']
+
+ # invalid ZIP
+ 98765-
+ ^
+ FAIL: Expected end of text (at char 5), (line:1, col:6)
+ """
+ def __init__( self, expr, default=_optionalNotMatched ):
+ super(Optional,self).__init__( expr, savelist=False )
+ self.saveAsList = self.expr.saveAsList
+ self.defaultValue = default
+ self.mayReturnEmpty = True
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ try:
+ loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False )
+ except (ParseException,IndexError):
+ if self.defaultValue is not _optionalNotMatched:
+ if self.expr.resultsName:
+ tokens = ParseResults([ self.defaultValue ])
+ tokens[self.expr.resultsName] = self.defaultValue
+ else:
+ tokens = [ self.defaultValue ]
+ else:
+ tokens = []
+ return loc, tokens
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+
+ if self.strRepr is None:
+ self.strRepr = "[" + _ustr(self.expr) + "]"
+
+ return self.strRepr
+
+class SkipTo(ParseElementEnhance):
+ """
+ Token for skipping over all undefined text until the matched expression is found.
+
+ Parameters:
+ - expr - target expression marking the end of the data to be skipped
+ - include - (default=C{False}) if True, the target expression is also parsed
+ (the skipped text and target expression are returned as a 2-element list).
+ - ignore - (default=C{None}) used to define grammars (typically quoted strings and
+ comments) that might contain false matches to the target expression
+ - failOn - (default=C{None}) define expressions that are not allowed to be
+ included in the skipped test; if found before the target expression is found,
+ the SkipTo is not a match
+
+ Example::
+ report = '''
+ Outstanding Issues Report - 1 Jan 2000
+
+ # | Severity | Description | Days Open
+ -----+----------+-------------------------------------------+-----------
+ 101 | Critical | Intermittent system crash | 6
+ 94 | Cosmetic | Spelling error on Login ('log|n') | 14
+ 79 | Minor | System slow when running too many reports | 47
+ '''
+ integer = Word(nums)
+ SEP = Suppress('|')
+ # use SkipTo to simply match everything up until the next SEP
+ # - ignore quoted strings, so that a '|' character inside a quoted string does not match
+ # - parse action will call token.strip() for each matched token, i.e., the description body
+ string_data = SkipTo(SEP, ignore=quotedString)
+ string_data.setParseAction(tokenMap(str.strip))
+ ticket_expr = (integer("issue_num") + SEP
+ + string_data("sev") + SEP
+ + string_data("desc") + SEP
+ + integer("days_open"))
+
+ for tkt in ticket_expr.searchString(report):
+ print tkt.dump()
+ prints::
+ ['101', 'Critical', 'Intermittent system crash', '6']
+ - days_open: 6
+ - desc: Intermittent system crash
+ - issue_num: 101
+ - sev: Critical
+ ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14']
+ - days_open: 14
+ - desc: Spelling error on Login ('log|n')
+ - issue_num: 94
+ - sev: Cosmetic
+ ['79', 'Minor', 'System slow when running too many reports', '47']
+ - days_open: 47
+ - desc: System slow when running too many reports
+ - issue_num: 79
+ - sev: Minor
+ """
+ def __init__( self, other, include=False, ignore=None, failOn=None ):
+ super( SkipTo, self ).__init__( other )
+ self.ignoreExpr = ignore
+ self.mayReturnEmpty = True
+ self.mayIndexError = False
+ self.includeMatch = include
+ self.asList = False
+ if isinstance(failOn, basestring):
+ self.failOn = ParserElement._literalStringClass(failOn)
+ else:
+ self.failOn = failOn
+ self.errmsg = "No match found for "+_ustr(self.expr)
+
+ def parseImpl( self, instring, loc, doActions=True ):
+ startloc = loc
+ instrlen = len(instring)
+ expr = self.expr
+ expr_parse = self.expr._parse
+ self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None
+ self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None
+
+ tmploc = loc
+ while tmploc <= instrlen:
+ if self_failOn_canParseNext is not None:
+ # break if failOn expression matches
+ if self_failOn_canParseNext(instring, tmploc):
+ break
+
+ if self_ignoreExpr_tryParse is not None:
+ # advance past ignore expressions
+ while 1:
+ try:
+ tmploc = self_ignoreExpr_tryParse(instring, tmploc)
+ except ParseBaseException:
+ break
+
+ try:
+ expr_parse(instring, tmploc, doActions=False, callPreParse=False)
+ except (ParseException, IndexError):
+ # no match, advance loc in string
+ tmploc += 1
+ else:
+ # matched skipto expr, done
+ break
+
+ else:
+ # ran off the end of the input string without matching skipto expr, fail
+ raise ParseException(instring, loc, self.errmsg, self)
+
+ # build up return values
+ loc = tmploc
+ skiptext = instring[startloc:loc]
+ skipresult = ParseResults(skiptext)
+
+ if self.includeMatch:
+ loc, mat = expr_parse(instring,loc,doActions,callPreParse=False)
+ skipresult += mat
+
+ return loc, skipresult
+
+class Forward(ParseElementEnhance):
+ """
+ Forward declaration of an expression to be defined later -
+ used for recursive grammars, such as algebraic infix notation.
+ When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator.
+
+ Note: take care when assigning to C{Forward} not to overlook precedence of operators.
+ Specifically, '|' has a lower precedence than '<<', so that::
+ fwdExpr << a | b | c
+ will actually be evaluated as::
+ (fwdExpr << a) | b | c
+ thereby leaving b and c out as parseable alternatives. It is recommended that you
+ explicitly group the values inserted into the C{Forward}::
+ fwdExpr << (a | b | c)
+ Converting to use the '<<=' operator instead will avoid this problem.
+
+ See L{ParseResults.pprint} for an example of a recursive parser created using
+ C{Forward}.
+ """
+ def __init__( self, other=None ):
+ super(Forward,self).__init__( other, savelist=False )
+
+ def __lshift__( self, other ):
+ if isinstance( other, basestring ):
+ other = ParserElement._literalStringClass(other)
+ self.expr = other
+ self.strRepr = None
+ self.mayIndexError = self.expr.mayIndexError
+ self.mayReturnEmpty = self.expr.mayReturnEmpty
+ self.setWhitespaceChars( self.expr.whiteChars )
+ self.skipWhitespace = self.expr.skipWhitespace
+ self.saveAsList = self.expr.saveAsList
+ self.ignoreExprs.extend(self.expr.ignoreExprs)
+ return self
+
+ def __ilshift__(self, other):
+ return self << other
+
+ def leaveWhitespace( self ):
+ self.skipWhitespace = False
+ return self
+
+ def streamline( self ):
+ if not self.streamlined:
+ self.streamlined = True
+ if self.expr is not None:
+ self.expr.streamline()
+ return self
+
+ def validate( self, validateTrace=[] ):
+ if self not in validateTrace:
+ tmp = validateTrace[:]+[self]
+ if self.expr is not None:
+ self.expr.validate(tmp)
+ self.checkRecursion([])
+
+ def __str__( self ):
+ if hasattr(self,"name"):
+ return self.name
+ return self.__class__.__name__ + ": ..."
+
+ # stubbed out for now - creates awful memory and perf issues
+ self._revertClass = self.__class__
+ self.__class__ = _ForwardNoRecurse
+ try:
+ if self.expr is not None:
+ retString = _ustr(self.expr)
+ else:
+ retString = "None"
+ finally:
+ self.__class__ = self._revertClass
+ return self.__class__.__name__ + ": " + retString
+
+ def copy(self):
+ if self.expr is not None:
+ return super(Forward,self).copy()
+ else:
+ ret = Forward()
+ ret <<= self
+ return ret
+
+class _ForwardNoRecurse(Forward):
+ def __str__( self ):
+ return "..."
+
+class TokenConverter(ParseElementEnhance):
+ """
+ Abstract subclass of C{ParseExpression}, for converting parsed results.
+ """
+ def __init__( self, expr, savelist=False ):
+ super(TokenConverter,self).__init__( expr )#, savelist )
+ self.saveAsList = False
+
+class Combine(TokenConverter):
+ """
+ Converter to concatenate all matching tokens to a single string.
+ By default, the matching patterns must also be contiguous in the input string;
+ this can be disabled by specifying C{'adjacent=False'} in the constructor.
+
+ Example::
+ real = Word(nums) + '.' + Word(nums)
+ print(real.parseString('3.1416')) # -> ['3', '.', '1416']
+ # will also erroneously match the following
+ print(real.parseString('3. 1416')) # -> ['3', '.', '1416']
+
+ real = Combine(Word(nums) + '.' + Word(nums))
+ print(real.parseString('3.1416')) # -> ['3.1416']
+ # no match when there are internal spaces
+ print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...)
+ """
+ def __init__( self, expr, joinString="", adjacent=True ):
+ super(Combine,self).__init__( expr )
+ # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself
+ if adjacent:
+ self.leaveWhitespace()
+ self.adjacent = adjacent
+ self.skipWhitespace = True
+ self.joinString = joinString
+ self.callPreparse = True
+
+ def ignore( self, other ):
+ if self.adjacent:
+ ParserElement.ignore(self, other)
+ else:
+ super( Combine, self).ignore( other )
+ return self
+
+ def postParse( self, instring, loc, tokenlist ):
+ retToks = tokenlist.copy()
+ del retToks[:]
+ retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults)
+
+ if self.resultsName and retToks.haskeys():
+ return [ retToks ]
+ else:
+ return retToks
+
+class Group(TokenConverter):
+ """
+ Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions.
+
+ Example::
+ ident = Word(alphas)
+ num = Word(nums)
+ term = ident | num
+ func = ident + Optional(delimitedList(term))
+ print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100']
+
+ func = ident + Group(Optional(delimitedList(term)))
+ print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']]
+ """
+ def __init__( self, expr ):
+ super(Group,self).__init__( expr )
+ self.saveAsList = True
+
+ def postParse( self, instring, loc, tokenlist ):
+ return [ tokenlist ]
+
+class Dict(TokenConverter):
+ """
+ Converter to return a repetitive expression as a list, but also as a dictionary.
+ Each element can also be referenced using the first token in the expression as its key.
+ Useful for tabular report scraping when the first column can be used as a item key.
+
+ Example::
+ data_word = Word(alphas)
+ label = data_word + FollowedBy(':')
+ attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))
+
+ text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
+ attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+
+ # print attributes as plain groups
+ print(OneOrMore(attr_expr).parseString(text).dump())
+
+ # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names
+ result = Dict(OneOrMore(Group(attr_expr))).parseString(text)
+ print(result.dump())
+
+ # access named fields as dict entries, or output as dict
+ print(result['shape'])
+ print(result.asDict())
+ prints::
+ ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap']
+
+ [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
+ - color: light blue
+ - posn: upper left
+ - shape: SQUARE
+ - texture: burlap
+ SQUARE
+ {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'}
+ See more examples at L{ParseResults} of accessing fields by results name.
+ """
+ def __init__( self, expr ):
+ super(Dict,self).__init__( expr )
+ self.saveAsList = True
+
+ def postParse( self, instring, loc, tokenlist ):
+ for i,tok in enumerate(tokenlist):
+ if len(tok) == 0:
+ continue
+ ikey = tok[0]
+ if isinstance(ikey,int):
+ ikey = _ustr(tok[0]).strip()
+ if len(tok)==1:
+ tokenlist[ikey] = _ParseResultsWithOffset("",i)
+ elif len(tok)==2 and not isinstance(tok[1],ParseResults):
+ tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i)
+ else:
+ dictvalue = tok.copy() #ParseResults(i)
+ del dictvalue[0]
+ if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()):
+ tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i)
+ else:
+ tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i)
+
+ if self.resultsName:
+ return [ tokenlist ]
+ else:
+ return tokenlist
+
+
+class Suppress(TokenConverter):
+ """
+ Converter for ignoring the results of a parsed expression.
+
+ Example::
+ source = "a, b, c,d"
+ wd = Word(alphas)
+ wd_list1 = wd + ZeroOrMore(',' + wd)
+ print(wd_list1.parseString(source))
+
+ # often, delimiters that are useful during parsing are just in the
+ # way afterward - use Suppress to keep them out of the parsed output
+ wd_list2 = wd + ZeroOrMore(Suppress(',') + wd)
+ print(wd_list2.parseString(source))
+ prints::
+ ['a', ',', 'b', ',', 'c', ',', 'd']
+ ['a', 'b', 'c', 'd']
+ (See also L{delimitedList}.)
+ """
+ def postParse( self, instring, loc, tokenlist ):
+ return []
+
+ def suppress( self ):
+ return self
+
+
+class OnlyOnce(object):
+ """
+ Wrapper for parse actions, to ensure they are only called once.
+ """
+ def __init__(self, methodCall):
+ self.callable = _trim_arity(methodCall)
+ self.called = False
+ def __call__(self,s,l,t):
+ if not self.called:
+ results = self.callable(s,l,t)
+ self.called = True
+ return results
+ raise ParseException(s,l,"")
+ def reset(self):
+ self.called = False
+
+def traceParseAction(f):
+ """
+ Decorator for debugging parse actions.
+
+ When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".}
+ When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised.
+
+ Example::
+ wd = Word(alphas)
+
+ @traceParseAction
+ def remove_duplicate_chars(tokens):
+ return ''.join(sorted(set(''.join(tokens))))
+
+ wds = OneOrMore(wd).setParseAction(remove_duplicate_chars)
+ print(wds.parseString("slkdjs sld sldd sdlf sdljf"))
+ prints::
+ >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {}))
+ <<leaving remove_duplicate_chars (ret: 'dfjkls')
+ ['dfjkls']
+ """
+ f = _trim_arity(f)
+ def z(*paArgs):
+ thisFunc = f.__name__
+ s,l,t = paArgs[-3:]
+ if len(paArgs)>3:
+ thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc
+ sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) )
+ try:
+ ret = f(*paArgs)
+ except Exception as exc:
+ sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) )
+ raise
+ sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) )
+ return ret
+ try:
+ z.__name__ = f.__name__
+ except AttributeError:
+ pass
+ return z
+
+#
+# global helpers
+#
+def delimitedList( expr, delim=",", combine=False ):
+ """
+ Helper to define a delimited list of expressions - the delimiter defaults to ','.
+ By default, the list elements and delimiters can have intervening whitespace, and
+ comments, but this can be overridden by passing C{combine=True} in the constructor.
+ If C{combine} is set to C{True}, the matching tokens are returned as a single token
+ string, with the delimiters included; otherwise, the matching tokens are returned
+ as a list of tokens, with the delimiters suppressed.
+
+ Example::
+ delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc']
+ delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE']
+ """
+ dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..."
+ if combine:
+ return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName)
+ else:
+ return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName)
+
+def countedArray( expr, intExpr=None ):
+ """
+ Helper to define a counted list of expressions.
+ This helper defines a pattern of the form::
+ integer expr expr expr...
+ where the leading integer tells how many expr expressions follow.
+ The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
+
+ If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value.
+
+ Example::
+ countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd']
+
+ # in this parser, the leading integer value is given in binary,
+ # '10' indicating that 2 values are in the array
+ binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2))
+ countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd']
+ """
+ arrayExpr = Forward()
+ def countFieldParseAction(s,l,t):
+ n = t[0]
+ arrayExpr << (n and Group(And([expr]*n)) or Group(empty))
+ return []
+ if intExpr is None:
+ intExpr = Word(nums).setParseAction(lambda t:int(t[0]))
+ else:
+ intExpr = intExpr.copy()
+ intExpr.setName("arrayLen")
+ intExpr.addParseAction(countFieldParseAction, callDuringTry=True)
+ return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...')
+
+def _flatten(L):
+ ret = []
+ for i in L:
+ if isinstance(i,list):
+ ret.extend(_flatten(i))
+ else:
+ ret.append(i)
+ return ret
+
+def matchPreviousLiteral(expr):
+ """
+ Helper to define an expression that is indirectly defined from
+ the tokens matched in a previous expression, that is, it looks
+ for a 'repeat' of a previous expression. For example::
+ first = Word(nums)
+ second = matchPreviousLiteral(first)
+ matchExpr = first + ":" + second
+ will match C{"1:1"}, but not C{"1:2"}. Because this matches a
+ previous literal, will also match the leading C{"1:1"} in C{"1:10"}.
+ If this is not desired, use C{matchPreviousExpr}.
+ Do I{not} use with packrat parsing enabled.
+ """
+ rep = Forward()
+ def copyTokenToRepeater(s,l,t):
+ if t:
+ if len(t) == 1:
+ rep << t[0]
+ else:
+ # flatten t tokens
+ tflat = _flatten(t.asList())
+ rep << And(Literal(tt) for tt in tflat)
+ else:
+ rep << Empty()
+ expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
+ rep.setName('(prev) ' + _ustr(expr))
+ return rep
+
+def matchPreviousExpr(expr):
+ """
+ Helper to define an expression that is indirectly defined from
+ the tokens matched in a previous expression, that is, it looks
+ for a 'repeat' of a previous expression. For example::
+ first = Word(nums)
+ second = matchPreviousExpr(first)
+ matchExpr = first + ":" + second
+ will match C{"1:1"}, but not C{"1:2"}. Because this matches by
+ expressions, will I{not} match the leading C{"1:1"} in C{"1:10"};
+ the expressions are evaluated first, and then compared, so
+ C{"1"} is compared with C{"10"}.
+ Do I{not} use with packrat parsing enabled.
+ """
+ rep = Forward()
+ e2 = expr.copy()
+ rep <<= e2
+ def copyTokenToRepeater(s,l,t):
+ matchTokens = _flatten(t.asList())
+ def mustMatchTheseTokens(s,l,t):
+ theseTokens = _flatten(t.asList())
+ if theseTokens != matchTokens:
+ raise ParseException("",0,"")
+ rep.setParseAction( mustMatchTheseTokens, callDuringTry=True )
+ expr.addParseAction(copyTokenToRepeater, callDuringTry=True)
+ rep.setName('(prev) ' + _ustr(expr))
+ return rep
+
+def _escapeRegexRangeChars(s):
+ #~ escape these chars: ^-]
+ for c in r"\^-]":
+ s = s.replace(c,_bslash+c)
+ s = s.replace("\n",r"\n")
+ s = s.replace("\t",r"\t")
+ return _ustr(s)
+
+def oneOf( strs, caseless=False, useRegex=True ):
+ """
+ Helper to quickly define a set of alternative Literals, and makes sure to do
+ longest-first testing when there is a conflict, regardless of the input order,
+ but returns a C{L{MatchFirst}} for best performance.
+
+ Parameters:
+ - strs - a string of space-delimited literals, or a collection of string literals
+ - caseless - (default=C{False}) - treat all literals as caseless
+ - useRegex - (default=C{True}) - as an optimization, will generate a Regex
+ object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or
+ if creating a C{Regex} raises an exception)
+
+ Example::
+ comp_oper = oneOf("< = > <= >= !=")
+ var = Word(alphas)
+ number = Word(nums)
+ term = var | number
+ comparison_expr = term + comp_oper + term
+ print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12"))
+ prints::
+ [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']]
+ """
+ if caseless:
+ isequal = ( lambda a,b: a.upper() == b.upper() )
+ masks = ( lambda a,b: b.upper().startswith(a.upper()) )
+ parseElementClass = CaselessLiteral
+ else:
+ isequal = ( lambda a,b: a == b )
+ masks = ( lambda a,b: b.startswith(a) )
+ parseElementClass = Literal
+
+ symbols = []
+ if isinstance(strs,basestring):
+ symbols = strs.split()
+ elif isinstance(strs, Iterable):
+ symbols = list(strs)
+ else:
+ warnings.warn("Invalid argument to oneOf, expected string or iterable",
+ SyntaxWarning, stacklevel=2)
+ if not symbols:
+ return NoMatch()
+
+ i = 0
+ while i < len(symbols)-1:
+ cur = symbols[i]
+ for j,other in enumerate(symbols[i+1:]):
+ if ( isequal(other, cur) ):
+ del symbols[i+j+1]
+ break
+ elif ( masks(cur, other) ):
+ del symbols[i+j+1]
+ symbols.insert(i,other)
+ cur = other
+ break
+ else:
+ i += 1
+
+ if not caseless and useRegex:
+ #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] ))
+ try:
+ if len(symbols)==len("".join(symbols)):
+ return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols))
+ else:
+ return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols))
+ except Exception:
+ warnings.warn("Exception creating Regex for oneOf, building MatchFirst",
+ SyntaxWarning, stacklevel=2)
+
+
+ # last resort, just use MatchFirst
+ return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols))
+
+def dictOf( key, value ):
+ """
+ Helper to easily and clearly define a dictionary by specifying the respective patterns
+ for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens
+ in the proper order. The key pattern can include delimiting markers or punctuation,
+ as long as they are suppressed, thereby leaving the significant key text. The value
+ pattern can include named results, so that the C{Dict} results can include named token
+ fields.
+
+ Example::
+ text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
+ attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
+ print(OneOrMore(attr_expr).parseString(text).dump())
+
+ attr_label = label
+ attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)
+
+ # similar to Dict, but simpler call format
+ result = dictOf(attr_label, attr_value).parseString(text)
+ print(result.dump())
+ print(result['shape'])
+ print(result.shape) # object attribute access works too
+ print(result.asDict())
+ prints::
+ [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
+ - color: light blue
+ - posn: upper left
+ - shape: SQUARE
+ - texture: burlap
+ SQUARE
+ SQUARE
+ {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'}
+ """
+ return Dict( ZeroOrMore( Group ( key + value ) ) )
+
+def originalTextFor(expr, asString=True):
+ """
+ Helper to return the original, untokenized text for a given expression. Useful to
+ restore the parsed fields of an HTML start tag into the raw tag text itself, or to
+ revert separate tokens with intervening whitespace back to the original matching
+ input text. By default, returns astring containing the original parsed text.
+
+ If the optional C{asString} argument is passed as C{False}, then the return value is a
+ C{L{ParseResults}} containing any results names that were originally matched, and a
+ single token containing the original matched text from the input string. So if
+ the expression passed to C{L{originalTextFor}} contains expressions with defined
+ results names, you must set C{asString} to C{False} if you want to preserve those
+ results name values.
+
+ Example::
+ src = "this is test <b> bold <i>text</i> </b> normal text "
+ for tag in ("b","i"):
+ opener,closer = makeHTMLTags(tag)
+ patt = originalTextFor(opener + SkipTo(closer) + closer)
+ print(patt.searchString(src)[0])
+ prints::
+ ['<b> bold <i>text</i> </b>']
+ ['<i>text</i>']
+ """
+ locMarker = Empty().setParseAction(lambda s,loc,t: loc)
+ endlocMarker = locMarker.copy()
+ endlocMarker.callPreparse = False
+ matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end")
+ if asString:
+ extractText = lambda s,l,t: s[t._original_start:t._original_end]
+ else:
+ def extractText(s,l,t):
+ t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]]
+ matchExpr.setParseAction(extractText)
+ matchExpr.ignoreExprs = expr.ignoreExprs
+ return matchExpr
+
+def ungroup(expr):
+ """
+ Helper to undo pyparsing's default grouping of And expressions, even
+ if all but one are non-empty.
+ """
+ return TokenConverter(expr).setParseAction(lambda t:t[0])
+
+def locatedExpr(expr):
+ """
+ Helper to decorate a returned token with its starting and ending locations in the input string.
+ This helper adds the following results names:
+ - locn_start = location where matched expression begins
+ - locn_end = location where matched expression ends
+ - value = the actual parsed results
+
+ Be careful if the input text contains C{<TAB>} characters, you may want to call
+ C{L{ParserElement.parseWithTabs}}
+
+ Example::
+ wd = Word(alphas)
+ for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"):
+ print(match)
+ prints::
+ [[0, 'ljsdf', 5]]
+ [[8, 'lksdjjf', 15]]
+ [[18, 'lkkjj', 23]]
+ """
+ locator = Empty().setParseAction(lambda s,l,t: l)
+ return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end"))
+
+
+# convenience constants for positional expressions
+empty = Empty().setName("empty")
+lineStart = LineStart().setName("lineStart")
+lineEnd = LineEnd().setName("lineEnd")
+stringStart = StringStart().setName("stringStart")
+stringEnd = StringEnd().setName("stringEnd")
+
+_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1])
+_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16)))
+_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8)))
+_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1)
+_charRange = Group(_singleChar + Suppress("-") + _singleChar)
+_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]"
+
+def srange(s):
+ r"""
+ Helper to easily define string ranges for use in Word construction. Borrows
+ syntax from regexp '[]' string range definitions::
+ srange("[0-9]") -> "0123456789"
+ srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz"
+ srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
+ The input string must be enclosed in []'s, and the returned string is the expanded
+ character set joined into a single string.
+ The values enclosed in the []'s may be:
+ - a single character
+ - an escaped character with a leading backslash (such as C{\-} or C{\]})
+ - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character)
+ (C{\0x##} is also supported for backwards compatibility)
+ - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character)
+ - a range of any of the above, separated by a dash (C{'a-z'}, etc.)
+ - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.)
+ """
+ _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1))
+ try:
+ return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body)
+ except Exception:
+ return ""
+
+def matchOnlyAtCol(n):
+ """
+ Helper method for defining parse actions that require matching at a specific
+ column in the input text.
+ """
+ def verifyCol(strg,locn,toks):
+ if col(locn,strg) != n:
+ raise ParseException(strg,locn,"matched token not at column %d" % n)
+ return verifyCol
+
+def replaceWith(replStr):
+ """
+ Helper method for common parse actions that simply return a literal value. Especially
+ useful when used with C{L{transformString<ParserElement.transformString>}()}.
+
+ Example::
+ num = Word(nums).setParseAction(lambda toks: int(toks[0]))
+ na = oneOf("N/A NA").setParseAction(replaceWith(math.nan))
+ term = na | num
+
+ OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234]
+ """
+ return lambda s,l,t: [replStr]
+
+def removeQuotes(s,l,t):
+ """
+ Helper parse action for removing quotation marks from parsed quoted strings.
+
+ Example::
+ # by default, quotation marks are included in parsed results
+ quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"]
+
+ # use removeQuotes to strip quotation marks from parsed results
+ quotedString.setParseAction(removeQuotes)
+ quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"]
+ """
+ return t[0][1:-1]
+
+def tokenMap(func, *args):
+ """
+ Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional
+ args are passed, they are forwarded to the given function as additional arguments after
+ the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the
+ parsed data to an integer using base 16.
+
+ Example (compare the last to example in L{ParserElement.transformString}::
+ hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16))
+ hex_ints.runTests('''
+ 00 11 22 aa FF 0a 0d 1a
+ ''')
+
+ upperword = Word(alphas).setParseAction(tokenMap(str.upper))
+ OneOrMore(upperword).runTests('''
+ my kingdom for a horse
+ ''')
+
+ wd = Word(alphas).setParseAction(tokenMap(str.title))
+ OneOrMore(wd).setParseAction(' '.join).runTests('''
+ now is the winter of our discontent made glorious summer by this sun of york
+ ''')
+ prints::
+ 00 11 22 aa FF 0a 0d 1a
+ [0, 17, 34, 170, 255, 10, 13, 26]
+
+ my kingdom for a horse
+ ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE']
+
+ now is the winter of our discontent made glorious summer by this sun of york
+ ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York']
+ """
+ def pa(s,l,t):
+ return [func(tokn, *args) for tokn in t]
+
+ try:
+ func_name = getattr(func, '__name__',
+ getattr(func, '__class__').__name__)
+ except Exception:
+ func_name = str(func)
+ pa.__name__ = func_name
+
+ return pa
+
+upcaseTokens = tokenMap(lambda t: _ustr(t).upper())
+"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}"""
+
+downcaseTokens = tokenMap(lambda t: _ustr(t).lower())
+"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}"""
+
+def _makeTags(tagStr, xml):
+ """Internal helper to construct opening and closing tag expressions, given a tag name"""
+ if isinstance(tagStr,basestring):
+ resname = tagStr
+ tagStr = Keyword(tagStr, caseless=not xml)
+ else:
+ resname = tagStr.name
+
+ tagAttrName = Word(alphas,alphanums+"_-:")
+ if (xml):
+ tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes )
+ openTag = Suppress("<") + tagStr("tag") + \
+ Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \
+ Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
+ else:
+ printablesLessRAbrack = "".join(c for c in printables if c not in ">")
+ tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack)
+ openTag = Suppress("<") + tagStr("tag") + \
+ Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \
+ Optional( Suppress("=") + tagAttrValue ) ))) + \
+ Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">")
+ closeTag = Combine(_L("</") + tagStr + ">")
+
+ openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname)
+ closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname)
+ openTag.tag = resname
+ closeTag.tag = resname
+ return openTag, closeTag
+
+def makeHTMLTags(tagStr):
+ """
+ Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches
+ tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values.
+
+ Example::
+ text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
+ # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple
+ a,a_end = makeHTMLTags("A")
+ link_expr = a + SkipTo(a_end)("link_text") + a_end
+
+ for link in link_expr.searchString(text):
+ # attributes in the <A> tag (like "href" shown here) are also accessible as named results
+ print(link.link_text, '->', link.href)
+ prints::
+ pyparsing -> http://pyparsing.wikispaces.com
+ """
+ return _makeTags( tagStr, False )
+
+def makeXMLTags(tagStr):
+ """
+ Helper to construct opening and closing tag expressions for XML, given a tag name. Matches
+ tags only in the given upper/lower case.
+
+ Example: similar to L{makeHTMLTags}
+ """
+ return _makeTags( tagStr, True )
+
+def withAttribute(*args,**attrDict):
+ """
+ Helper to create a validating parse action to be used with start tags created
+ with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag
+ with a required attribute value, to avoid false matches on common tags such as
+ C{<TD>} or C{<DIV>}.
+
+ Call C{withAttribute} with a series of attribute names and values. Specify the list
+ of filter attributes names and values as:
+ - keyword arguments, as in C{(align="right")}, or
+ - as an explicit dict with C{**} operator, when an attribute name is also a Python
+ reserved word, as in C{**{"class":"Customer", "align":"right"}}
+ - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") )
+ For attribute names with a namespace prefix, you must use the second form. Attribute
+ names are matched insensitive to upper/lower case.
+
+ If just testing for C{class} (with or without a namespace), use C{L{withClass}}.
+
+ To verify that the attribute exists, but without specifying a value, pass
+ C{withAttribute.ANY_VALUE} as the value.
+
+ Example::
+ html = '''
+ <div>
+ Some text
+ <div type="grid">1 4 0 1 0</div>
+ <div type="graph">1,3 2,3 1,1</div>
+ <div>this has no type</div>
+ </div>
+
+ '''
+ div,div_end = makeHTMLTags("div")
+
+ # only match div tag having a type attribute with value "grid"
+ div_grid = div().setParseAction(withAttribute(type="grid"))
+ grid_expr = div_grid + SkipTo(div | div_end)("body")
+ for grid_header in grid_expr.searchString(html):
+ print(grid_header.body)
+
+ # construct a match with any div tag having a type attribute, regardless of the value
+ div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE))
+ div_expr = div_any_type + SkipTo(div | div_end)("body")
+ for div_header in div_expr.searchString(html):
+ print(div_header.body)
+ prints::
+ 1 4 0 1 0
+
+ 1 4 0 1 0
+ 1,3 2,3 1,1
+ """
+ if args:
+ attrs = args[:]
+ else:
+ attrs = attrDict.items()
+ attrs = [(k,v) for k,v in attrs]
+ def pa(s,l,tokens):
+ for attrName,attrValue in attrs:
+ if attrName not in tokens:
+ raise ParseException(s,l,"no matching attribute " + attrName)
+ if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue:
+ raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" %
+ (attrName, tokens[attrName], attrValue))
+ return pa
+withAttribute.ANY_VALUE = object()
+
+def withClass(classname, namespace=''):
+ """
+ Simplified version of C{L{withAttribute}} when matching on a div class - made
+ difficult because C{class} is a reserved word in Python.
+
+ Example::
+ html = '''
+ <div>
+ Some text
+ <div class="grid">1 4 0 1 0</div>
+ <div class="graph">1,3 2,3 1,1</div>
+ <div>this &lt;div&gt; has no class</div>
+ </div>
+
+ '''
+ div,div_end = makeHTMLTags("div")
+ div_grid = div().setParseAction(withClass("grid"))
+
+ grid_expr = div_grid + SkipTo(div | div_end)("body")
+ for grid_header in grid_expr.searchString(html):
+ print(grid_header.body)
+
+ div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE))
+ div_expr = div_any_type + SkipTo(div | div_end)("body")
+ for div_header in div_expr.searchString(html):
+ print(div_header.body)
+ prints::
+ 1 4 0 1 0
+
+ 1 4 0 1 0
+ 1,3 2,3 1,1
+ """
+ classattr = "%s:class" % namespace if namespace else "class"
+ return withAttribute(**{classattr : classname})
+
+opAssoc = _Constants()
+opAssoc.LEFT = object()
+opAssoc.RIGHT = object()
+
+def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ):
+ """
+ Helper method for constructing grammars of expressions made up of
+ operators working in a precedence hierarchy. Operators may be unary or
+ binary, left- or right-associative. Parse actions can also be attached
+ to operator expressions. The generated parser will also recognize the use
+ of parentheses to override operator precedences (see example below).
+
+ Note: if you define a deep operator list, you may see performance issues
+ when using infixNotation. See L{ParserElement.enablePackrat} for a
+ mechanism to potentially improve your parser performance.
+
+ Parameters:
+ - baseExpr - expression representing the most basic element for the nested
+ - opList - list of tuples, one for each operator precedence level in the
+ expression grammar; each tuple is of the form
+ (opExpr, numTerms, rightLeftAssoc, parseAction), where:
+ - opExpr is the pyparsing expression for the operator;
+ may also be a string, which will be converted to a Literal;
+ if numTerms is 3, opExpr is a tuple of two expressions, for the
+ two operators separating the 3 terms
+ - numTerms is the number of terms for this operator (must
+ be 1, 2, or 3)
+ - rightLeftAssoc is the indicator whether the operator is
+ right or left associative, using the pyparsing-defined
+ constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}.
+ - parseAction is the parse action to be associated with
+ expressions matching this operator expression (the
+ parse action tuple member may be omitted); if the parse action
+ is passed a tuple or list of functions, this is equivalent to
+ calling C{setParseAction(*fn)} (L{ParserElement.setParseAction})
+ - lpar - expression for matching left-parentheses (default=C{Suppress('(')})
+ - rpar - expression for matching right-parentheses (default=C{Suppress(')')})
+
+ Example::
+ # simple example of four-function arithmetic with ints and variable names
+ integer = pyparsing_common.signed_integer
+ varname = pyparsing_common.identifier
+
+ arith_expr = infixNotation(integer | varname,
+ [
+ ('-', 1, opAssoc.RIGHT),
+ (oneOf('* /'), 2, opAssoc.LEFT),
+ (oneOf('+ -'), 2, opAssoc.LEFT),
+ ])
+
+ arith_expr.runTests('''
+ 5+3*6
+ (5+3)*6
+ -2--11
+ ''', fullDump=False)
+ prints::
+ 5+3*6
+ [[5, '+', [3, '*', 6]]]
+
+ (5+3)*6
+ [[[5, '+', 3], '*', 6]]
+
+ -2--11
+ [[['-', 2], '-', ['-', 11]]]
+ """
+ ret = Forward()
+ lastExpr = baseExpr | ( lpar + ret + rpar )
+ for i,operDef in enumerate(opList):
+ opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4]
+ termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr
+ if arity == 3:
+ if opExpr is None or len(opExpr) != 2:
+ raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions")
+ opExpr1, opExpr2 = opExpr
+ thisExpr = Forward().setName(termName)
+ if rightLeftAssoc == opAssoc.LEFT:
+ if arity == 1:
+ matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) )
+ elif arity == 2:
+ if opExpr is not None:
+ matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) )
+ else:
+ matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) )
+ elif arity == 3:
+ matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \
+ Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr )
+ else:
+ raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
+ elif rightLeftAssoc == opAssoc.RIGHT:
+ if arity == 1:
+ # try to avoid LR with this extra test
+ if not isinstance(opExpr, Optional):
+ opExpr = Optional(opExpr)
+ matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr )
+ elif arity == 2:
+ if opExpr is not None:
+ matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) )
+ else:
+ matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) )
+ elif arity == 3:
+ matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \
+ Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr )
+ else:
+ raise ValueError("operator must be unary (1), binary (2), or ternary (3)")
+ else:
+ raise ValueError("operator must indicate right or left associativity")
+ if pa:
+ if isinstance(pa, (tuple, list)):
+ matchExpr.setParseAction(*pa)
+ else:
+ matchExpr.setParseAction(pa)
+ thisExpr <<= ( matchExpr.setName(termName) | lastExpr )
+ lastExpr = thisExpr
+ ret <<= lastExpr
+ return ret
+
+operatorPrecedence = infixNotation
+"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release."""
+
+dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes")
+sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes")
+quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'|
+ Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes")
+unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal")
+
+def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()):
+ """
+ Helper method for defining nested lists enclosed in opening and closing
+ delimiters ("(" and ")" are the default).
+
+ Parameters:
+ - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression
+ - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression
+ - content - expression for items within the nested lists (default=C{None})
+ - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString})
+
+ If an expression is not provided for the content argument, the nested
+ expression will capture all whitespace-delimited content between delimiters
+ as a list of separate values.
+
+ Use the C{ignoreExpr} argument to define expressions that may contain
+ opening or closing characters that should not be treated as opening
+ or closing characters for nesting, such as quotedString or a comment
+ expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}.
+ The default is L{quotedString}, but if no expressions are to be ignored,
+ then pass C{None} for this argument.
+
+ Example::
+ data_type = oneOf("void int short long char float double")
+ decl_data_type = Combine(data_type + Optional(Word('*')))
+ ident = Word(alphas+'_', alphanums+'_')
+ number = pyparsing_common.number
+ arg = Group(decl_data_type + ident)
+ LPAR,RPAR = map(Suppress, "()")
+
+ code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment))
+
+ c_function = (decl_data_type("type")
+ + ident("name")
+ + LPAR + Optional(delimitedList(arg), [])("args") + RPAR
+ + code_body("body"))
+ c_function.ignore(cStyleComment)
+
+ source_code = '''
+ int is_odd(int x) {
+ return (x%2);
+ }
+
+ int dec_to_hex(char hchar) {
+ if (hchar >= '0' && hchar <= '9') {
+ return (ord(hchar)-ord('0'));
+ } else {
+ return (10+ord(hchar)-ord('A'));
+ }
+ }
+ '''
+ for func in c_function.searchString(source_code):
+ print("%(name)s (%(type)s) args: %(args)s" % func)
+
+ prints::
+ is_odd (int) args: [['int', 'x']]
+ dec_to_hex (int) args: [['char', 'hchar']]
+ """
+ if opener == closer:
+ raise ValueError("opening and closing strings cannot be the same")
+ if content is None:
+ if isinstance(opener,basestring) and isinstance(closer,basestring):
+ if len(opener) == 1 and len(closer)==1:
+ if ignoreExpr is not None:
+ content = (Combine(OneOrMore(~ignoreExpr +
+ CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ if ignoreExpr is not None:
+ content = (Combine(OneOrMore(~ignoreExpr +
+ ~Literal(opener) + ~Literal(closer) +
+ CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) +
+ CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1))
+ ).setParseAction(lambda t:t[0].strip()))
+ else:
+ raise ValueError("opening and closing arguments must be strings if no content expression is given")
+ ret = Forward()
+ if ignoreExpr is not None:
+ ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) )
+ else:
+ ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) )
+ ret.setName('nested %s%s expression' % (opener,closer))
+ return ret
+
+def indentedBlock(blockStatementExpr, indentStack, indent=True):
+ """
+ Helper method for defining space-delimited indentation blocks, such as
+ those used to define block statements in Python source code.
+
+ Parameters:
+ - blockStatementExpr - expression defining syntax of statement that
+ is repeated within the indented block
+ - indentStack - list created by caller to manage indentation stack
+ (multiple statementWithIndentedBlock expressions within a single grammar
+ should share a common indentStack)
+ - indent - boolean indicating whether block must be indented beyond the
+ the current level; set to False for block of left-most statements
+ (default=C{True})
+
+ A valid block must contain at least one C{blockStatement}.
+
+ Example::
+ data = '''
+ def A(z):
+ A1
+ B = 100
+ G = A2
+ A2
+ A3
+ B
+ def BB(a,b,c):
+ BB1
+ def BBA():
+ bba1
+ bba2
+ bba3
+ C
+ D
+ def spam(x,y):
+ def eggs(z):
+ pass
+ '''
+
+
+ indentStack = [1]
+ stmt = Forward()
+
+ identifier = Word(alphas, alphanums)
+ funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":")
+ func_body = indentedBlock(stmt, indentStack)
+ funcDef = Group( funcDecl + func_body )
+
+ rvalue = Forward()
+ funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")")
+ rvalue << (funcCall | identifier | Word(nums))
+ assignment = Group(identifier + "=" + rvalue)
+ stmt << ( funcDef | assignment | identifier )
+
+ module_body = OneOrMore(stmt)
+
+ parseTree = module_body.parseString(data)
+ parseTree.pprint()
+ prints::
+ [['def',
+ 'A',
+ ['(', 'z', ')'],
+ ':',
+ [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]],
+ 'B',
+ ['def',
+ 'BB',
+ ['(', 'a', 'b', 'c', ')'],
+ ':',
+ [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]],
+ 'C',
+ 'D',
+ ['def',
+ 'spam',
+ ['(', 'x', 'y', ')'],
+ ':',
+ [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]]
+ """
+ def checkPeerIndent(s,l,t):
+ if l >= len(s): return
+ curCol = col(l,s)
+ if curCol != indentStack[-1]:
+ if curCol > indentStack[-1]:
+ raise ParseFatalException(s,l,"illegal nesting")
+ raise ParseException(s,l,"not a peer entry")
+
+ def checkSubIndent(s,l,t):
+ curCol = col(l,s)
+ if curCol > indentStack[-1]:
+ indentStack.append( curCol )
+ else:
+ raise ParseException(s,l,"not a subentry")
+
+ def checkUnindent(s,l,t):
+ if l >= len(s): return
+ curCol = col(l,s)
+ if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]):
+ raise ParseException(s,l,"not an unindent")
+ indentStack.pop()
+
+ NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress())
+ INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT')
+ PEER = Empty().setParseAction(checkPeerIndent).setName('')
+ UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT')
+ if indent:
+ smExpr = Group( Optional(NL) +
+ #~ FollowedBy(blockStatementExpr) +
+ INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT)
+ else:
+ smExpr = Group( Optional(NL) +
+ (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) )
+ blockStatementExpr.ignore(_bslash + LineEnd())
+ return smExpr.setName('indented block')
+
+alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]")
+punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]")
+
+anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag'))
+_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\''))
+commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity")
+def replaceHTMLEntity(t):
+ """Helper parser action to replace common HTML entities with their special characters"""
+ return _htmlEntityMap.get(t.entity)
+
+# it's easy to get these comment structures wrong - they're very common, so may as well make them available
+cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment")
+"Comment of the form C{/* ... */}"
+
+htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment")
+"Comment of the form C{<!-- ... -->}"
+
+restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line")
+dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment")
+"Comment of the form C{// ... (to end of line)}"
+
+cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment")
+"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}"
+
+javaStyleComment = cppStyleComment
+"Same as C{L{cppStyleComment}}"
+
+pythonStyleComment = Regex(r"#.*").setName("Python style comment")
+"Comment of the form C{# ... (to end of line)}"
+
+_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') +
+ Optional( Word(" \t") +
+ ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem")
+commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList")
+"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas.
+ This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}."""
+
+# some other useful expressions - using lower-case class name since we are really using this as a namespace
+class pyparsing_common:
+ """
+ Here are some common low-level expressions that may be useful in jump-starting parser development:
+ - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>})
+ - common L{programming identifiers<identifier>}
+ - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>})
+ - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>}
+ - L{UUID<uuid>}
+ - L{comma-separated list<comma_separated_list>}
+ Parse actions:
+ - C{L{convertToInteger}}
+ - C{L{convertToFloat}}
+ - C{L{convertToDate}}
+ - C{L{convertToDatetime}}
+ - C{L{stripHTMLTags}}
+ - C{L{upcaseTokens}}
+ - C{L{downcaseTokens}}
+
+ Example::
+ pyparsing_common.number.runTests('''
+ # any int or real number, returned as the appropriate type
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ ''')
+
+ pyparsing_common.fnumber.runTests('''
+ # any int or real number, returned as float
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ ''')
+
+ pyparsing_common.hex_integer.runTests('''
+ # hex numbers
+ 100
+ FF
+ ''')
+
+ pyparsing_common.fraction.runTests('''
+ # fractions
+ 1/2
+ -3/4
+ ''')
+
+ pyparsing_common.mixed_integer.runTests('''
+ # mixed fractions
+ 1
+ 1/2
+ -3/4
+ 1-3/4
+ ''')
+
+ import uuid
+ pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
+ pyparsing_common.uuid.runTests('''
+ # uuid
+ 12345678-1234-5678-1234-567812345678
+ ''')
+ prints::
+ # any int or real number, returned as the appropriate type
+ 100
+ [100]
+
+ -100
+ [-100]
+
+ +100
+ [100]
+
+ 3.14159
+ [3.14159]
+
+ 6.02e23
+ [6.02e+23]
+
+ 1e-12
+ [1e-12]
+
+ # any int or real number, returned as float
+ 100
+ [100.0]
+
+ -100
+ [-100.0]
+
+ +100
+ [100.0]
+
+ 3.14159
+ [3.14159]
+
+ 6.02e23
+ [6.02e+23]
+
+ 1e-12
+ [1e-12]
+
+ # hex numbers
+ 100
+ [256]
+
+ FF
+ [255]
+
+ # fractions
+ 1/2
+ [0.5]
+
+ -3/4
+ [-0.75]
+
+ # mixed fractions
+ 1
+ [1]
+
+ 1/2
+ [0.5]
+
+ -3/4
+ [-0.75]
+
+ 1-3/4
+ [1.75]
+
+ # uuid
+ 12345678-1234-5678-1234-567812345678
+ [UUID('12345678-1234-5678-1234-567812345678')]
+ """
+
+ convertToInteger = tokenMap(int)
+ """
+ Parse action for converting parsed integers to Python int
+ """
+
+ convertToFloat = tokenMap(float)
+ """
+ Parse action for converting parsed numbers to Python float
+ """
+
+ integer = Word(nums).setName("integer").setParseAction(convertToInteger)
+ """expression that parses an unsigned integer, returns an int"""
+
+ hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16))
+ """expression that parses a hexadecimal integer, returns an int"""
+
+ signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger)
+ """expression that parses an integer with optional leading sign, returns an int"""
+
+ fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction")
+ """fractional expression of an integer divided by an integer, returns a float"""
+ fraction.addParseAction(lambda t: t[0]/t[-1])
+
+ mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction")
+ """mixed integer of the form 'integer - fraction', with optional leading integer, returns float"""
+ mixed_integer.addParseAction(sum)
+
+ real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat)
+ """expression that parses a floating point number and returns a float"""
+
+ sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat)
+ """expression that parses a floating point number with optional scientific notation and returns a float"""
+
+ # streamlining this expression makes the docs nicer-looking
+ number = (sci_real | real | signed_integer).streamline()
+ """any numeric expression, returns the corresponding Python type"""
+
+ fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat)
+ """any int or real number, returned as float"""
+
+ identifier = Word(alphas+'_', alphanums+'_').setName("identifier")
+ """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')"""
+
+ ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address")
+ "IPv4 address (C{0.0.0.0 - 255.255.255.255})"
+
+ _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer")
+ _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address")
+ _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address")
+ _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8)
+ _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address")
+ ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address")
+ "IPv6 address (long, short, or mixed form)"
+
+ mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address")
+ "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)"
+
+ @staticmethod
+ def convertToDate(fmt="%Y-%m-%d"):
+ """
+ Helper to create a parse action for converting parsed date string to Python datetime.date
+
+ Params -
+ - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"})
+
+ Example::
+ date_expr = pyparsing_common.iso8601_date.copy()
+ date_expr.setParseAction(pyparsing_common.convertToDate())
+ print(date_expr.parseString("1999-12-31"))
+ prints::
+ [datetime.date(1999, 12, 31)]
+ """
+ def cvt_fn(s,l,t):
+ try:
+ return datetime.strptime(t[0], fmt).date()
+ except ValueError as ve:
+ raise ParseException(s, l, str(ve))
+ return cvt_fn
+
+ @staticmethod
+ def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"):
+ """
+ Helper to create a parse action for converting parsed datetime string to Python datetime.datetime
+
+ Params -
+ - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"})
+
+ Example::
+ dt_expr = pyparsing_common.iso8601_datetime.copy()
+ dt_expr.setParseAction(pyparsing_common.convertToDatetime())
+ print(dt_expr.parseString("1999-12-31T23:59:59.999"))
+ prints::
+ [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)]
+ """
+ def cvt_fn(s,l,t):
+ try:
+ return datetime.strptime(t[0], fmt)
+ except ValueError as ve:
+ raise ParseException(s, l, str(ve))
+ return cvt_fn
+
+ iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date")
+ "ISO8601 date (C{yyyy-mm-dd})"
+
+ iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime")
+ "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}"
+
+ uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID")
+ "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})"
+
+ _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress()
+ @staticmethod
+ def stripHTMLTags(s, l, tokens):
+ """
+ Parse action to remove HTML tags from web page HTML source
+
+ Example::
+ # strip HTML links from normal text
+ text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
+ td,td_end = makeHTMLTags("TD")
+ table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end
+
+ print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page'
+ """
+ return pyparsing_common._html_stripper.transformString(tokens[0])
+
+ _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',')
+ + Optional( White(" \t") ) ) ).streamline().setName("commaItem")
+ comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list")
+ """Predefined expression of 1 or more printable words or quoted strings, separated by commas."""
+
+ upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper()))
+ """Parse action to convert tokens to upper case."""
+
+ downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower()))
+ """Parse action to convert tokens to lower case."""
+
+
+if __name__ == "__main__":
+
+ selectToken = CaselessLiteral("select")
+ fromToken = CaselessLiteral("from")
+
+ ident = Word(alphas, alphanums + "_$")
+
+ columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
+ columnNameList = Group(delimitedList(columnName)).setName("columns")
+ columnSpec = ('*' | columnNameList)
+
+ tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens)
+ tableNameList = Group(delimitedList(tableName)).setName("tables")
+
+ simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables")
+
+ # demo runTests method, including embedded comments in test string
+ simpleSQL.runTests("""
+ # '*' as column list and dotted table name
+ select * from SYS.XYZZY
+
+ # caseless match on "SELECT", and casts back to "select"
+ SELECT * from XYZZY, ABC
+
+ # list of column names, and mixed case SELECT keyword
+ Select AA,BB,CC from Sys.dual
+
+ # multiple tables
+ Select A, B, C from Sys.dual, Table2
+
+ # invalid SELECT keyword - should fail
+ Xelect A, B, C from Sys.dual
+
+ # incomplete command - should fail
+ Select
+
+ # invalid column name - should fail
+ Select ^^^ frox Sys.dual
+
+ """)
+
+ pyparsing_common.number.runTests("""
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ """)
+
+ # any int or real number, returned as float
+ pyparsing_common.fnumber.runTests("""
+ 100
+ -100
+ +100
+ 3.14159
+ 6.02e23
+ 1e-12
+ """)
+
+ pyparsing_common.hex_integer.runTests("""
+ 100
+ FF
+ """)
+
+ import uuid
+ pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
+ pyparsing_common.uuid.runTests("""
+ 12345678-1234-5678-1234-567812345678
+ """)
diff --git a/contrib/restricted/boost/boost/qvm/all.hpp b/contrib/restricted/boost/boost/qvm/all.hpp
index 62f779ed9d..73e8b81f27 100644
--- a/contrib/restricted/boost/boost/qvm/all.hpp
+++ b/contrib/restricted/boost/boost/qvm/all.hpp
@@ -1,32 +1,32 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_BE94EA1A31B211E0BBF943CFDFD72085
-#define UUID_BE94EA1A31B211E0BBF943CFDFD72085
-
-#include <boost/qvm/error.hpp>
-#include <boost/qvm/mat_operations.hpp>
-#include <boost/qvm/mat_access.hpp>
-#include <boost/qvm/mat_traits_defaults.hpp>
-#include <boost/qvm/mat_traits_array.hpp>
-#include <boost/qvm/map.hpp>
-#include <boost/qvm/mat.hpp>
-#include <boost/qvm/math.hpp>
-#include <boost/qvm/quat_operations.hpp>
-#include <boost/qvm/quat_access.hpp>
-#include <boost/qvm/quat_traits_defaults.hpp>
-#include <boost/qvm/quat_traits.hpp>
-#include <boost/qvm/quat.hpp>
-#include <boost/qvm/quat_vec_operations.hpp>
-#include <boost/qvm/swizzle.hpp>
-#include <boost/qvm/vec_operations.hpp>
-#include <boost/qvm/vec_access.hpp>
-#include <boost/qvm/vec_traits_defaults.hpp>
-#include <boost/qvm/vec_traits_array.hpp>
-#include <boost/qvm/vec.hpp>
-#include <boost/qvm/vec_mat_operations.hpp>
-#include <boost/qvm/to_string.hpp>
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_BE94EA1A31B211E0BBF943CFDFD72085
+#define UUID_BE94EA1A31B211E0BBF943CFDFD72085
+
+#include <boost/qvm/error.hpp>
+#include <boost/qvm/mat_operations.hpp>
+#include <boost/qvm/mat_access.hpp>
+#include <boost/qvm/mat_traits_defaults.hpp>
+#include <boost/qvm/mat_traits_array.hpp>
+#include <boost/qvm/map.hpp>
+#include <boost/qvm/mat.hpp>
+#include <boost/qvm/math.hpp>
+#include <boost/qvm/quat_operations.hpp>
+#include <boost/qvm/quat_access.hpp>
+#include <boost/qvm/quat_traits_defaults.hpp>
+#include <boost/qvm/quat_traits.hpp>
+#include <boost/qvm/quat.hpp>
+#include <boost/qvm/quat_vec_operations.hpp>
+#include <boost/qvm/swizzle.hpp>
+#include <boost/qvm/vec_operations.hpp>
+#include <boost/qvm/vec_access.hpp>
+#include <boost/qvm/vec_traits_defaults.hpp>
+#include <boost/qvm/vec_traits_array.hpp>
+#include <boost/qvm/vec.hpp>
+#include <boost/qvm/vec_mat_operations.hpp>
+#include <boost/qvm/to_string.hpp>
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/assert.hpp b/contrib/restricted/boost/boost/qvm/assert.hpp
index 116ab92c51..ef7826fbeb 100644
--- a/contrib/restricted/boost/boost/qvm/assert.hpp
+++ b/contrib/restricted/boost/boost/qvm/assert.hpp
@@ -1,9 +1,9 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_ASSERT
-#include <boost/assert.hpp>
-#define BOOST_QVM_ASSERT BOOST_ASSERT
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_ASSERT
+#include <boost/assert.hpp>
+#define BOOST_QVM_ASSERT BOOST_ASSERT
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/deduce_mat.hpp b/contrib/restricted/boost/boost/qvm/deduce_mat.hpp
index c9b3ca3e00..e2fb7a2127 100644
--- a/contrib/restricted/boost/boost/qvm/deduce_mat.hpp
+++ b/contrib/restricted/boost/boost/qvm/deduce_mat.hpp
@@ -1,90 +1,90 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_C5DC682E196211E0A4C1686BDFD72085
-#define UUID_C5DC682E196211E0A4C1686BDFD72085
-
-#include <boost/qvm/deduce_scalar.hpp>
-#include <boost/qvm/mat_traits.hpp>
-#include <boost/qvm/static_assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class T,int Rows,int Cols>
- struct mat;
-
- namespace
- qvm_detail
- {
- template <class M,int R,int C,
- int MR=mat_traits<M>::rows,
- int MC=mat_traits<M>::cols>
- struct
- deduce_mat_default
- {
- BOOST_QVM_STATIC_ASSERT(is_mat<M>::value);
- typedef mat<typename mat_traits<M>::scalar_type,R,C> type;
- };
-
- template <class M,int R,int C>
- struct
- deduce_mat_default<M,R,C,R,C>
- {
- BOOST_QVM_STATIC_ASSERT(is_mat<M>::value);
- typedef M type;
- };
- }
-
- template <class Type,int Rows=mat_traits<Type>::rows,int Cols=mat_traits<Type>::cols>
- struct
- deduce_mat
- {
- BOOST_QVM_STATIC_ASSERT(is_mat<Type>::value);
- typedef typename qvm_detail::deduce_mat_default<Type,Rows,Cols>::type type;
- };
-
- namespace
- qvm_detail
- {
- template <class A,class B,int R,int C,
- bool VA=is_mat<A>::value,
- bool VB=is_mat<B>::value,
- int AR=mat_traits<A>::rows,
- int AC=mat_traits<A>::cols,
- int BR=mat_traits<B>::rows,
- int BC=mat_traits<B>::cols>
- struct
- deduce_m2_default
- {
- typedef mat<
- typename deduce_scalar<
- typename scalar<A>::type,
- typename scalar<B>::type>::type,
- R,C> type;
- };
-
- template <class M,int R,int C>
- struct
- deduce_m2_default<M,M,R,C,true,true,R,C,R,C>
- {
- typedef M type;
- };
- }
-
- template <class A,class B,int R,int C>
- struct
- deduce_mat2
- {
- BOOST_QVM_STATIC_ASSERT(is_mat<A>::value || is_mat<B>::value);
- typedef typename qvm_detail::deduce_m2_default<A,B,R,C>::type type;
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_C5DC682E196211E0A4C1686BDFD72085
+#define UUID_C5DC682E196211E0A4C1686BDFD72085
+
+#include <boost/qvm/deduce_scalar.hpp>
+#include <boost/qvm/mat_traits.hpp>
+#include <boost/qvm/static_assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class T,int Rows,int Cols>
+ struct mat;
+
+ namespace
+ qvm_detail
+ {
+ template <class M,int R,int C,
+ int MR=mat_traits<M>::rows,
+ int MC=mat_traits<M>::cols>
+ struct
+ deduce_mat_default
+ {
+ BOOST_QVM_STATIC_ASSERT(is_mat<M>::value);
+ typedef mat<typename mat_traits<M>::scalar_type,R,C> type;
+ };
+
+ template <class M,int R,int C>
+ struct
+ deduce_mat_default<M,R,C,R,C>
+ {
+ BOOST_QVM_STATIC_ASSERT(is_mat<M>::value);
+ typedef M type;
+ };
+ }
+
+ template <class Type,int Rows=mat_traits<Type>::rows,int Cols=mat_traits<Type>::cols>
+ struct
+ deduce_mat
+ {
+ BOOST_QVM_STATIC_ASSERT(is_mat<Type>::value);
+ typedef typename qvm_detail::deduce_mat_default<Type,Rows,Cols>::type type;
+ };
+
+ namespace
+ qvm_detail
+ {
+ template <class A,class B,int R,int C,
+ bool VA=is_mat<A>::value,
+ bool VB=is_mat<B>::value,
+ int AR=mat_traits<A>::rows,
+ int AC=mat_traits<A>::cols,
+ int BR=mat_traits<B>::rows,
+ int BC=mat_traits<B>::cols>
+ struct
+ deduce_m2_default
+ {
+ typedef mat<
+ typename deduce_scalar<
+ typename scalar<A>::type,
+ typename scalar<B>::type>::type,
+ R,C> type;
+ };
+
+ template <class M,int R,int C>
+ struct
+ deduce_m2_default<M,M,R,C,true,true,R,C,R,C>
+ {
+ typedef M type;
+ };
+ }
+
+ template <class A,class B,int R,int C>
+ struct
+ deduce_mat2
+ {
+ BOOST_QVM_STATIC_ASSERT(is_mat<A>::value || is_mat<B>::value);
+ typedef typename qvm_detail::deduce_m2_default<A,B,R,C>::type type;
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/deduce_quat.hpp b/contrib/restricted/boost/boost/qvm/deduce_quat.hpp
index 33481ce49c..6235f1f517 100644
--- a/contrib/restricted/boost/boost/qvm/deduce_quat.hpp
+++ b/contrib/restricted/boost/boost/qvm/deduce_quat.hpp
@@ -1,63 +1,63 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_435FA7E8196311E0A176DE6BDFD72085
-#define UUID_435FA7E8196311E0A176DE6BDFD72085
-
-#include <boost/qvm/deduce_scalar.hpp>
-#include <boost/qvm/quat_traits.hpp>
-#include <boost/qvm/static_assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class T>
- struct quat;
-
- template <class Q>
- struct
- deduce_quat
- {
- BOOST_QVM_STATIC_ASSERT(is_quat<Q>::value);
- typedef Q type;
- };
-
- namespace
- qvm_detail
- {
- template <class A,class B,
- bool QA=is_quat<A>::value,
- bool QB=is_quat<B>::value>
- struct
- deduce_quat2_default
- {
- typedef quat<
- typename deduce_scalar<
- typename scalar<A>::type,
- typename scalar<B>::type>::type> type;
- };
-
- template <class Q>
- struct
- deduce_quat2_default<Q,Q,true,true>
- {
- typedef Q type;
- };
- }
-
- template <class A,class B>
- struct
- deduce_quat2
- {
- BOOST_QVM_STATIC_ASSERT(is_quat<A>::value || is_quat<B>::value);
- typedef typename qvm_detail::deduce_quat2_default<A,B>::type type;
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_435FA7E8196311E0A176DE6BDFD72085
+#define UUID_435FA7E8196311E0A176DE6BDFD72085
+
+#include <boost/qvm/deduce_scalar.hpp>
+#include <boost/qvm/quat_traits.hpp>
+#include <boost/qvm/static_assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class T>
+ struct quat;
+
+ template <class Q>
+ struct
+ deduce_quat
+ {
+ BOOST_QVM_STATIC_ASSERT(is_quat<Q>::value);
+ typedef Q type;
+ };
+
+ namespace
+ qvm_detail
+ {
+ template <class A,class B,
+ bool QA=is_quat<A>::value,
+ bool QB=is_quat<B>::value>
+ struct
+ deduce_quat2_default
+ {
+ typedef quat<
+ typename deduce_scalar<
+ typename scalar<A>::type,
+ typename scalar<B>::type>::type> type;
+ };
+
+ template <class Q>
+ struct
+ deduce_quat2_default<Q,Q,true,true>
+ {
+ typedef Q type;
+ };
+ }
+
+ template <class A,class B>
+ struct
+ deduce_quat2
+ {
+ BOOST_QVM_STATIC_ASSERT(is_quat<A>::value || is_quat<B>::value);
+ typedef typename qvm_detail::deduce_quat2_default<A,B>::type type;
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/deduce_scalar.hpp b/contrib/restricted/boost/boost/qvm/deduce_scalar.hpp
index 5039338712..010af34043 100644
--- a/contrib/restricted/boost/boost/qvm/deduce_scalar.hpp
+++ b/contrib/restricted/boost/boost/qvm/deduce_scalar.hpp
@@ -1,131 +1,131 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_F20566FC196311E0B99D606CDFD72085
-#define UUID_F20566FC196311E0B99D606CDFD72085
-
-#include <boost/qvm/scalar_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- deduce_scalar_detail
- {
- template <class A,class B> struct deduce_scalar_impl { };
-
- template <class T>
- struct
- deduce_scalar_impl<T,T>
- {
- typedef T type;
- };
-
- template <> struct deduce_scalar_impl<signed char,unsigned char> { typedef unsigned char type; };
- template <> struct deduce_scalar_impl<signed char,unsigned short> { typedef unsigned short type; };
- template <> struct deduce_scalar_impl<signed char,unsigned int> { typedef unsigned int type; };
- template <> struct deduce_scalar_impl<signed char,unsigned long> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<signed char,signed short> { typedef signed short type; };
- template <> struct deduce_scalar_impl<signed char,signed int> { typedef signed int type; };
- template <> struct deduce_scalar_impl<signed char,signed long> { typedef signed long type; };
- template <> struct deduce_scalar_impl<signed char,float> { typedef float type; };
- template <> struct deduce_scalar_impl<signed char,double> { typedef double type; };
- template <> struct deduce_scalar_impl<unsigned char,unsigned short> { typedef unsigned short type; };
- template <> struct deduce_scalar_impl<unsigned char,unsigned int> { typedef unsigned int type; };
- template <> struct deduce_scalar_impl<unsigned char,unsigned long> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<unsigned char,signed short> { typedef signed short type; };
- template <> struct deduce_scalar_impl<unsigned char,signed int> { typedef signed int type; };
- template <> struct deduce_scalar_impl<unsigned char,signed long> { typedef signed long type; };
- template <> struct deduce_scalar_impl<unsigned char,float> { typedef float type; };
- template <> struct deduce_scalar_impl<unsigned char,double> { typedef double type; };
- template <> struct deduce_scalar_impl<signed short,unsigned short> { typedef unsigned short type; };
- template <> struct deduce_scalar_impl<signed short,unsigned int> { typedef unsigned int type; };
- template <> struct deduce_scalar_impl<signed short,unsigned long> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<signed short,signed int> { typedef signed int type; };
- template <> struct deduce_scalar_impl<signed short,signed long> { typedef signed long type; };
- template <> struct deduce_scalar_impl<signed short,float> { typedef float type; };
- template <> struct deduce_scalar_impl<signed short,double> { typedef double type; };
- template <> struct deduce_scalar_impl<unsigned short,unsigned int> { typedef unsigned int type; };
- template <> struct deduce_scalar_impl<unsigned short,unsigned long> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<unsigned short,signed int> { typedef signed int type; };
- template <> struct deduce_scalar_impl<unsigned short,signed long> { typedef signed long type; };
- template <> struct deduce_scalar_impl<unsigned short,float> { typedef float type; };
- template <> struct deduce_scalar_impl<unsigned short,double> { typedef double type; };
- template <> struct deduce_scalar_impl<signed int,unsigned int> { typedef unsigned int type; };
- template <> struct deduce_scalar_impl<signed int,unsigned long> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<signed int,signed long> { typedef signed long type; };
- template <> struct deduce_scalar_impl<signed int,float> { typedef float type; };
- template <> struct deduce_scalar_impl<signed int,double> { typedef double type; };
- template <> struct deduce_scalar_impl<unsigned int,unsigned long> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<unsigned int,signed long> { typedef signed long type; };
- template <> struct deduce_scalar_impl<unsigned int,float> { typedef float type; };
- template <> struct deduce_scalar_impl<unsigned int,double> { typedef double type; };
- template <> struct deduce_scalar_impl<signed long,unsigned long> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<signed long,float> { typedef float type; };
- template <> struct deduce_scalar_impl<signed long,double> { typedef double type; };
- template <> struct deduce_scalar_impl<unsigned long,float> { typedef float type; };
- template <> struct deduce_scalar_impl<unsigned long,double> { typedef double type; };
- template <> struct deduce_scalar_impl<float,double> { typedef double type; };
-
- template <> struct deduce_scalar_impl<unsigned char,signed char> { typedef unsigned char type; };
- template <> struct deduce_scalar_impl<unsigned short,signed char> { typedef unsigned short type; };
- template <> struct deduce_scalar_impl<unsigned int,signed char> { typedef unsigned int type; };
- template <> struct deduce_scalar_impl<unsigned long,signed char> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<signed short,signed char> { typedef signed short type; };
- template <> struct deduce_scalar_impl<signed int,signed char> { typedef signed int type; };
- template <> struct deduce_scalar_impl<signed long,signed char> { typedef signed long type; };
- template <> struct deduce_scalar_impl<float,signed char> { typedef float type; };
- template <> struct deduce_scalar_impl<double,signed char> { typedef double type; };
- template <> struct deduce_scalar_impl<unsigned short,unsigned char> { typedef unsigned short type; };
- template <> struct deduce_scalar_impl<unsigned int,unsigned char> { typedef unsigned int type; };
- template <> struct deduce_scalar_impl<unsigned long,unsigned char> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<signed short,unsigned char> { typedef signed short type; };
- template <> struct deduce_scalar_impl<signed int,unsigned char> { typedef signed int type; };
- template <> struct deduce_scalar_impl<signed long,unsigned char> { typedef signed long type; };
- template <> struct deduce_scalar_impl<float,unsigned char> { typedef float type; };
- template <> struct deduce_scalar_impl<double,unsigned char> { typedef double type; };
- template <> struct deduce_scalar_impl<unsigned short,signed short> { typedef unsigned short type; };
- template <> struct deduce_scalar_impl<unsigned int,signed short> { typedef unsigned int type; };
- template <> struct deduce_scalar_impl<unsigned long,signed short> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<signed int,signed short> { typedef signed int type; };
- template <> struct deduce_scalar_impl<signed long,signed short> { typedef signed long type; };
- template <> struct deduce_scalar_impl<float,signed short> { typedef float type; };
- template <> struct deduce_scalar_impl<double,signed short> { typedef double type; };
- template <> struct deduce_scalar_impl<unsigned int,unsigned short> { typedef unsigned int type; };
- template <> struct deduce_scalar_impl<unsigned long,unsigned short> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<signed int,unsigned short> { typedef signed int type; };
- template <> struct deduce_scalar_impl<signed long,unsigned short> { typedef signed long type; };
- template <> struct deduce_scalar_impl<float,unsigned short> { typedef float type; };
- template <> struct deduce_scalar_impl<double,unsigned short> { typedef double type; };
- template <> struct deduce_scalar_impl<unsigned int,signed int> { typedef unsigned int type; };
- template <> struct deduce_scalar_impl<unsigned long,signed int> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<signed long,signed int> { typedef signed long type; };
- template <> struct deduce_scalar_impl<float,signed int> { typedef float type; };
- template <> struct deduce_scalar_impl<double,signed int> { typedef double type; };
- template <> struct deduce_scalar_impl<unsigned long,unsigned int> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<signed long,unsigned int> { typedef signed long type; };
- template <> struct deduce_scalar_impl<float,unsigned int> { typedef float type; };
- template <> struct deduce_scalar_impl<double,unsigned int> { typedef double type; };
- template <> struct deduce_scalar_impl<unsigned long,signed long> { typedef unsigned long type; };
- template <> struct deduce_scalar_impl<float,signed long> { typedef float type; };
- template <> struct deduce_scalar_impl<double,signed long> { typedef double type; };
- template <> struct deduce_scalar_impl<float,unsigned long> { typedef float type; };
- template <> struct deduce_scalar_impl<double,unsigned long> { typedef double type; };
- template <> struct deduce_scalar_impl<double,float> { typedef double type; };
- }
-
- template <class A,class B>
- struct
- deduce_scalar
- {
- typedef typename deduce_scalar_detail::deduce_scalar_impl<A,B>::type type;
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_F20566FC196311E0B99D606CDFD72085
+#define UUID_F20566FC196311E0B99D606CDFD72085
+
+#include <boost/qvm/scalar_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ deduce_scalar_detail
+ {
+ template <class A,class B> struct deduce_scalar_impl { };
+
+ template <class T>
+ struct
+ deduce_scalar_impl<T,T>
+ {
+ typedef T type;
+ };
+
+ template <> struct deduce_scalar_impl<signed char,unsigned char> { typedef unsigned char type; };
+ template <> struct deduce_scalar_impl<signed char,unsigned short> { typedef unsigned short type; };
+ template <> struct deduce_scalar_impl<signed char,unsigned int> { typedef unsigned int type; };
+ template <> struct deduce_scalar_impl<signed char,unsigned long> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<signed char,signed short> { typedef signed short type; };
+ template <> struct deduce_scalar_impl<signed char,signed int> { typedef signed int type; };
+ template <> struct deduce_scalar_impl<signed char,signed long> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<signed char,float> { typedef float type; };
+ template <> struct deduce_scalar_impl<signed char,double> { typedef double type; };
+ template <> struct deduce_scalar_impl<unsigned char,unsigned short> { typedef unsigned short type; };
+ template <> struct deduce_scalar_impl<unsigned char,unsigned int> { typedef unsigned int type; };
+ template <> struct deduce_scalar_impl<unsigned char,unsigned long> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<unsigned char,signed short> { typedef signed short type; };
+ template <> struct deduce_scalar_impl<unsigned char,signed int> { typedef signed int type; };
+ template <> struct deduce_scalar_impl<unsigned char,signed long> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<unsigned char,float> { typedef float type; };
+ template <> struct deduce_scalar_impl<unsigned char,double> { typedef double type; };
+ template <> struct deduce_scalar_impl<signed short,unsigned short> { typedef unsigned short type; };
+ template <> struct deduce_scalar_impl<signed short,unsigned int> { typedef unsigned int type; };
+ template <> struct deduce_scalar_impl<signed short,unsigned long> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<signed short,signed int> { typedef signed int type; };
+ template <> struct deduce_scalar_impl<signed short,signed long> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<signed short,float> { typedef float type; };
+ template <> struct deduce_scalar_impl<signed short,double> { typedef double type; };
+ template <> struct deduce_scalar_impl<unsigned short,unsigned int> { typedef unsigned int type; };
+ template <> struct deduce_scalar_impl<unsigned short,unsigned long> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<unsigned short,signed int> { typedef signed int type; };
+ template <> struct deduce_scalar_impl<unsigned short,signed long> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<unsigned short,float> { typedef float type; };
+ template <> struct deduce_scalar_impl<unsigned short,double> { typedef double type; };
+ template <> struct deduce_scalar_impl<signed int,unsigned int> { typedef unsigned int type; };
+ template <> struct deduce_scalar_impl<signed int,unsigned long> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<signed int,signed long> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<signed int,float> { typedef float type; };
+ template <> struct deduce_scalar_impl<signed int,double> { typedef double type; };
+ template <> struct deduce_scalar_impl<unsigned int,unsigned long> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<unsigned int,signed long> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<unsigned int,float> { typedef float type; };
+ template <> struct deduce_scalar_impl<unsigned int,double> { typedef double type; };
+ template <> struct deduce_scalar_impl<signed long,unsigned long> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<signed long,float> { typedef float type; };
+ template <> struct deduce_scalar_impl<signed long,double> { typedef double type; };
+ template <> struct deduce_scalar_impl<unsigned long,float> { typedef float type; };
+ template <> struct deduce_scalar_impl<unsigned long,double> { typedef double type; };
+ template <> struct deduce_scalar_impl<float,double> { typedef double type; };
+
+ template <> struct deduce_scalar_impl<unsigned char,signed char> { typedef unsigned char type; };
+ template <> struct deduce_scalar_impl<unsigned short,signed char> { typedef unsigned short type; };
+ template <> struct deduce_scalar_impl<unsigned int,signed char> { typedef unsigned int type; };
+ template <> struct deduce_scalar_impl<unsigned long,signed char> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<signed short,signed char> { typedef signed short type; };
+ template <> struct deduce_scalar_impl<signed int,signed char> { typedef signed int type; };
+ template <> struct deduce_scalar_impl<signed long,signed char> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<float,signed char> { typedef float type; };
+ template <> struct deduce_scalar_impl<double,signed char> { typedef double type; };
+ template <> struct deduce_scalar_impl<unsigned short,unsigned char> { typedef unsigned short type; };
+ template <> struct deduce_scalar_impl<unsigned int,unsigned char> { typedef unsigned int type; };
+ template <> struct deduce_scalar_impl<unsigned long,unsigned char> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<signed short,unsigned char> { typedef signed short type; };
+ template <> struct deduce_scalar_impl<signed int,unsigned char> { typedef signed int type; };
+ template <> struct deduce_scalar_impl<signed long,unsigned char> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<float,unsigned char> { typedef float type; };
+ template <> struct deduce_scalar_impl<double,unsigned char> { typedef double type; };
+ template <> struct deduce_scalar_impl<unsigned short,signed short> { typedef unsigned short type; };
+ template <> struct deduce_scalar_impl<unsigned int,signed short> { typedef unsigned int type; };
+ template <> struct deduce_scalar_impl<unsigned long,signed short> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<signed int,signed short> { typedef signed int type; };
+ template <> struct deduce_scalar_impl<signed long,signed short> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<float,signed short> { typedef float type; };
+ template <> struct deduce_scalar_impl<double,signed short> { typedef double type; };
+ template <> struct deduce_scalar_impl<unsigned int,unsigned short> { typedef unsigned int type; };
+ template <> struct deduce_scalar_impl<unsigned long,unsigned short> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<signed int,unsigned short> { typedef signed int type; };
+ template <> struct deduce_scalar_impl<signed long,unsigned short> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<float,unsigned short> { typedef float type; };
+ template <> struct deduce_scalar_impl<double,unsigned short> { typedef double type; };
+ template <> struct deduce_scalar_impl<unsigned int,signed int> { typedef unsigned int type; };
+ template <> struct deduce_scalar_impl<unsigned long,signed int> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<signed long,signed int> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<float,signed int> { typedef float type; };
+ template <> struct deduce_scalar_impl<double,signed int> { typedef double type; };
+ template <> struct deduce_scalar_impl<unsigned long,unsigned int> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<signed long,unsigned int> { typedef signed long type; };
+ template <> struct deduce_scalar_impl<float,unsigned int> { typedef float type; };
+ template <> struct deduce_scalar_impl<double,unsigned int> { typedef double type; };
+ template <> struct deduce_scalar_impl<unsigned long,signed long> { typedef unsigned long type; };
+ template <> struct deduce_scalar_impl<float,signed long> { typedef float type; };
+ template <> struct deduce_scalar_impl<double,signed long> { typedef double type; };
+ template <> struct deduce_scalar_impl<float,unsigned long> { typedef float type; };
+ template <> struct deduce_scalar_impl<double,unsigned long> { typedef double type; };
+ template <> struct deduce_scalar_impl<double,float> { typedef double type; };
+ }
+
+ template <class A,class B>
+ struct
+ deduce_scalar
+ {
+ typedef typename deduce_scalar_detail::deduce_scalar_impl<A,B>::type type;
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/deduce_vec.hpp b/contrib/restricted/boost/boost/qvm/deduce_vec.hpp
index d3d022e38d..e15cf0eec3 100644
--- a/contrib/restricted/boost/boost/qvm/deduce_vec.hpp
+++ b/contrib/restricted/boost/boost/qvm/deduce_vec.hpp
@@ -1,85 +1,85 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_7E7AB138196311E0907B246CDFD72085
-#define UUID_7E7AB138196311E0907B246CDFD72085
-
-#include <boost/qvm/deduce_scalar.hpp>
-#include <boost/qvm/vec_traits.hpp>
-#include <boost/qvm/static_assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class T,int D>
- struct vec;
-
- namespace
- qvm_detail
- {
- template <class V,int D,
- int VD=vec_traits<V>::dim>
- struct
- deduce_vec_default
- {
- typedef vec<typename vec_traits<V>::scalar_type,D> type;
- };
-
- template <class V,int D>
- struct
- deduce_vec_default<V,D,D>
- {
- typedef V type;
- };
- }
-
- template <class V,int Dim=vec_traits<V>::dim>
- struct
- deduce_vec
- {
- BOOST_QVM_STATIC_ASSERT(is_vec<V>::value);
- typedef typename qvm_detail::deduce_vec_default<V,Dim>::type type;
- };
-
- namespace
- qvm_detail
- {
- template <class A,class B,int D,
- bool VA=is_vec<A>::value,
- bool VB=is_vec<B>::value,
- int AD=vec_traits<A>::dim,
- int BD=vec_traits<B>::dim>
- struct
- deduce_v2_default
- {
- typedef vec<
- typename deduce_scalar<
- typename scalar<A>::type,
- typename scalar<B>::type>::type,
- D> type;
- };
-
- template <class V,int D>
- struct
- deduce_v2_default<V,V,D,true,true,D,D>
- {
- typedef V type;
- };
- }
-
- template <class A,class B,int D>
- struct
- deduce_vec2
- {
- BOOST_QVM_STATIC_ASSERT(is_vec<A>::value || is_vec<B>::value);
- typedef typename qvm_detail::deduce_v2_default<A,B,D>::type type;
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_7E7AB138196311E0907B246CDFD72085
+#define UUID_7E7AB138196311E0907B246CDFD72085
+
+#include <boost/qvm/deduce_scalar.hpp>
+#include <boost/qvm/vec_traits.hpp>
+#include <boost/qvm/static_assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class T,int D>
+ struct vec;
+
+ namespace
+ qvm_detail
+ {
+ template <class V,int D,
+ int VD=vec_traits<V>::dim>
+ struct
+ deduce_vec_default
+ {
+ typedef vec<typename vec_traits<V>::scalar_type,D> type;
+ };
+
+ template <class V,int D>
+ struct
+ deduce_vec_default<V,D,D>
+ {
+ typedef V type;
+ };
+ }
+
+ template <class V,int Dim=vec_traits<V>::dim>
+ struct
+ deduce_vec
+ {
+ BOOST_QVM_STATIC_ASSERT(is_vec<V>::value);
+ typedef typename qvm_detail::deduce_vec_default<V,Dim>::type type;
+ };
+
+ namespace
+ qvm_detail
+ {
+ template <class A,class B,int D,
+ bool VA=is_vec<A>::value,
+ bool VB=is_vec<B>::value,
+ int AD=vec_traits<A>::dim,
+ int BD=vec_traits<B>::dim>
+ struct
+ deduce_v2_default
+ {
+ typedef vec<
+ typename deduce_scalar<
+ typename scalar<A>::type,
+ typename scalar<B>::type>::type,
+ D> type;
+ };
+
+ template <class V,int D>
+ struct
+ deduce_v2_default<V,V,D,true,true,D,D>
+ {
+ typedef V type;
+ };
+ }
+
+ template <class A,class B,int D>
+ struct
+ deduce_vec2
+ {
+ BOOST_QVM_STATIC_ASSERT(is_vec<A>::value || is_vec<B>::value);
+ typedef typename qvm_detail::deduce_v2_default<A,B,D>::type type;
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/detail/cofactor_impl.hpp b/contrib/restricted/boost/boost/qvm/detail/cofactor_impl.hpp
index a4894e4aa7..b4ccd5b2f7 100644
--- a/contrib/restricted/boost/boost/qvm/detail/cofactor_impl.hpp
+++ b/contrib/restricted/boost/boost/qvm/detail/cofactor_impl.hpp
@@ -1,64 +1,64 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_995547FAAE0E11DE8CF511E755D89593
-#define UUID_995547FAAE0E11DE8CF511E755D89593
-
-#include <boost/qvm/detail/determinant_impl.hpp>
-#include <boost/qvm/mat_traits.hpp>
-#include <boost/qvm/static_assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_detail
- {
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename deduce_mat<A>::type
- cofactor_impl( A const & a )
- {
- BOOST_QVM_STATIC_ASSERT(mat_traits<A>::rows==mat_traits<A>::cols);
- int const N=mat_traits<A>::rows;
- typedef typename mat_traits<A>::scalar_type T;
- T c[N-1][N-1];
- typedef typename deduce_mat<A>::type R;
- R b;
- for( int j=0; j!=N; ++j )
- {
- for( int i=0; i!=N; ++i )
- {
- int i1=0;
- for( int ii=0; ii!=N; ++ii )
- {
- if( ii==i )
- continue;
- int j1=0;
- for( int jj=0; jj!=N; ++jj )
- {
- if( jj==j )
- continue;
- c[i1][j1] = mat_traits<A>::read_element_idx(ii,jj,a);
- ++j1;
- }
- ++i1;
- }
- T det = determinant_impl(c);
- if( (i+j)&1 )
- det=-det;
- mat_traits<R>::write_element_idx(i,j,b) = det;
- }
- }
- return b;
- }
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_995547FAAE0E11DE8CF511E755D89593
+#define UUID_995547FAAE0E11DE8CF511E755D89593
+
+#include <boost/qvm/detail/determinant_impl.hpp>
+#include <boost/qvm/mat_traits.hpp>
+#include <boost/qvm/static_assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename deduce_mat<A>::type
+ cofactor_impl( A const & a )
+ {
+ BOOST_QVM_STATIC_ASSERT(mat_traits<A>::rows==mat_traits<A>::cols);
+ int const N=mat_traits<A>::rows;
+ typedef typename mat_traits<A>::scalar_type T;
+ T c[N-1][N-1];
+ typedef typename deduce_mat<A>::type R;
+ R b;
+ for( int j=0; j!=N; ++j )
+ {
+ for( int i=0; i!=N; ++i )
+ {
+ int i1=0;
+ for( int ii=0; ii!=N; ++ii )
+ {
+ if( ii==i )
+ continue;
+ int j1=0;
+ for( int jj=0; jj!=N; ++jj )
+ {
+ if( jj==j )
+ continue;
+ c[i1][j1] = mat_traits<A>::read_element_idx(ii,jj,a);
+ ++j1;
+ }
+ ++i1;
+ }
+ T det = determinant_impl(c);
+ if( (i+j)&1 )
+ det=-det;
+ mat_traits<R>::write_element_idx(i,j,b) = det;
+ }
+ }
+ return b;
+ }
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/detail/determinant_impl.hpp b/contrib/restricted/boost/boost/qvm/detail/determinant_impl.hpp
index 7d3e519975..6886c4ee83 100644
--- a/contrib/restricted/boost/boost/qvm/detail/determinant_impl.hpp
+++ b/contrib/restricted/boost/boost/qvm/detail/determinant_impl.hpp
@@ -1,79 +1,79 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_3DCF6B90AE0E11DE9A315BE555D89593
-#define UUID_3DCF6B90AE0E11DE9A315BE555D89593
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/mat_traits_array.hpp>
-#include <boost/qvm/static_assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_detail
- {
- template <int N>
- struct
- det_size
- {
- };
-
- template <class M>
- BOOST_QVM_INLINE_TRIVIAL
- typename mat_traits<M>::scalar_type
- determinant_impl_( M const & a, det_size<2> )
- {
- return
- mat_traits<M>::template read_element<0,0>(a) * mat_traits<M>::template read_element<1,1>(a) -
- mat_traits<M>::template read_element<1,0>(a) * mat_traits<M>::template read_element<0,1>(a);
- }
-
- template <class M,int N>
- BOOST_QVM_INLINE_RECURSION
- typename mat_traits<M>::scalar_type
- determinant_impl_( M const & a, det_size<N> )
- {
- typedef typename mat_traits<M>::scalar_type T;
- T m[N-1][N-1];
- T det=T(0);
- for( int j1=0; j1!=N; ++j1 )
- {
- for( int i=1; i!=N; ++i )
- {
- int j2 = 0;
- for( int j=0; j!=N; ++j )
- {
- if( j==j1 )
- continue;
- m[i-1][j2] = mat_traits<M>::read_element_idx(i,j,a);
- ++j2;
- }
- }
- T d=determinant_impl_(m,det_size<N-1>());
- if( j1&1 )
- d=-d;
- det += mat_traits<M>::read_element_idx(0,j1,a) * d;
- }
- return det;
- }
-
- template <class M>
- BOOST_QVM_INLINE_TRIVIAL
- typename mat_traits<M>::scalar_type
- determinant_impl( M const & a )
- {
- BOOST_QVM_STATIC_ASSERT(mat_traits<M>::rows==mat_traits<M>::cols);
- return determinant_impl_(a,det_size<mat_traits<M>::rows>());
- }
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_3DCF6B90AE0E11DE9A315BE555D89593
+#define UUID_3DCF6B90AE0E11DE9A315BE555D89593
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/mat_traits_array.hpp>
+#include <boost/qvm/static_assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ template <int N>
+ struct
+ det_size
+ {
+ };
+
+ template <class M>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename mat_traits<M>::scalar_type
+ determinant_impl_( M const & a, det_size<2> )
+ {
+ return
+ mat_traits<M>::template read_element<0,0>(a) * mat_traits<M>::template read_element<1,1>(a) -
+ mat_traits<M>::template read_element<1,0>(a) * mat_traits<M>::template read_element<0,1>(a);
+ }
+
+ template <class M,int N>
+ BOOST_QVM_INLINE_RECURSION
+ typename mat_traits<M>::scalar_type
+ determinant_impl_( M const & a, det_size<N> )
+ {
+ typedef typename mat_traits<M>::scalar_type T;
+ T m[N-1][N-1];
+ T det=T(0);
+ for( int j1=0; j1!=N; ++j1 )
+ {
+ for( int i=1; i!=N; ++i )
+ {
+ int j2 = 0;
+ for( int j=0; j!=N; ++j )
+ {
+ if( j==j1 )
+ continue;
+ m[i-1][j2] = mat_traits<M>::read_element_idx(i,j,a);
+ ++j2;
+ }
+ }
+ T d=determinant_impl_(m,det_size<N-1>());
+ if( j1&1 )
+ d=-d;
+ det += mat_traits<M>::read_element_idx(0,j1,a) * d;
+ }
+ return det;
+ }
+
+ template <class M>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename mat_traits<M>::scalar_type
+ determinant_impl( M const & a )
+ {
+ BOOST_QVM_STATIC_ASSERT(mat_traits<M>::rows==mat_traits<M>::cols);
+ return determinant_impl_(a,det_size<mat_traits<M>::rows>());
+ }
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/detail/mat_assign.hpp b/contrib/restricted/boost/boost/qvm/detail/mat_assign.hpp
index 173094bcd6..89d50243eb 100644
--- a/contrib/restricted/boost/boost/qvm/detail/mat_assign.hpp
+++ b/contrib/restricted/boost/boost/qvm/detail/mat_assign.hpp
@@ -1,75 +1,75 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_47136D2C385411E7BA27D3B681262D2E
-#define UUID_47136D2C385411E7BA27D3B681262D2E
-
-#include <boost/qvm/gen/mat_assign2.hpp>
-#include <boost/qvm/gen/mat_assign3.hpp>
-#include <boost/qvm/gen/mat_assign4.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- assign_mm_defined
- {
- static bool const value=false;
- };
-
- template <int I,int N>
- struct
- copy_matrix_elements
- {
- template <class A,class B>
- static
- BOOST_QVM_INLINE_CRITICAL
- void
- f( A & a, B const & b )
- {
- mat_traits<A>::template write_element<I/mat_traits<A>::cols,I%mat_traits<A>::cols>(a) =
- mat_traits<B>::template read_element<I/mat_traits<B>::cols,I%mat_traits<B>::cols>(b);
- copy_matrix_elements<I+1,N>::f(a,b);
- }
- };
-
- template <int N>
- struct
- copy_matrix_elements<N,N>
- {
- template <class A,class B>
- static
- BOOST_QVM_INLINE_CRITICAL
- void
- f( A &, B const & )
- {
- }
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_TRIVIAL
- typename boost::enable_if_c<
- is_mat<A>::value && is_mat<B>::value &&
- mat_traits<A>::rows==mat_traits<B>::rows &&
- mat_traits<A>::cols==mat_traits<B>::cols &&
- !qvm_detail::assign_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- A &>::type
- assign( A & a, B const & b )
- {
- qvm_detail::copy_matrix_elements<0,mat_traits<A>::rows*mat_traits<A>::cols>::f(a,b);
- return a;
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_47136D2C385411E7BA27D3B681262D2E
+#define UUID_47136D2C385411E7BA27D3B681262D2E
+
+#include <boost/qvm/gen/mat_assign2.hpp>
+#include <boost/qvm/gen/mat_assign3.hpp>
+#include <boost/qvm/gen/mat_assign4.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ assign_mm_defined
+ {
+ static bool const value=false;
+ };
+
+ template <int I,int N>
+ struct
+ copy_matrix_elements
+ {
+ template <class A,class B>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ void
+ f( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<I/mat_traits<A>::cols,I%mat_traits<A>::cols>(a) =
+ mat_traits<B>::template read_element<I/mat_traits<B>::cols,I%mat_traits<B>::cols>(b);
+ copy_matrix_elements<I+1,N>::f(a,b);
+ }
+ };
+
+ template <int N>
+ struct
+ copy_matrix_elements<N,N>
+ {
+ template <class A,class B>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ void
+ f( A &, B const & )
+ {
+ }
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename boost::enable_if_c<
+ is_mat<A>::value && is_mat<B>::value &&
+ mat_traits<A>::rows==mat_traits<B>::rows &&
+ mat_traits<A>::cols==mat_traits<B>::cols &&
+ !qvm_detail::assign_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ qvm_detail::copy_matrix_elements<0,mat_traits<A>::rows*mat_traits<A>::cols>::f(a,b);
+ return a;
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/detail/quat_assign.hpp b/contrib/restricted/boost/boost/qvm/detail/quat_assign.hpp
index 06527b5b08..87b2cf1f62 100644
--- a/contrib/restricted/boost/boost/qvm/detail/quat_assign.hpp
+++ b/contrib/restricted/boost/boost/qvm/detail/quat_assign.hpp
@@ -1,35 +1,35 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_86A42DA4385511E7822024B881262D2E
-#define UUID_86A42DA4385511E7822024B881262D2E
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/quat_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value && is_quat<B>::value,
- A &>::type
- assign( A & a, B const & b )
- {
- quat_traits<A>::template write_element<0>(a) = quat_traits<B>::template read_element<0>(b);
- quat_traits<A>::template write_element<1>(a) = quat_traits<B>::template read_element<1>(b);
- quat_traits<A>::template write_element<2>(a) = quat_traits<B>::template read_element<2>(b);
- quat_traits<A>::template write_element<3>(a) = quat_traits<B>::template read_element<3>(b);
- return a;
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_86A42DA4385511E7822024B881262D2E
+#define UUID_86A42DA4385511E7822024B881262D2E
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/quat_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value && is_quat<B>::value,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ quat_traits<A>::template write_element<0>(a) = quat_traits<B>::template read_element<0>(b);
+ quat_traits<A>::template write_element<1>(a) = quat_traits<B>::template read_element<1>(b);
+ quat_traits<A>::template write_element<2>(a) = quat_traits<B>::template read_element<2>(b);
+ quat_traits<A>::template write_element<3>(a) = quat_traits<B>::template read_element<3>(b);
+ return a;
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/detail/remove_const.hpp b/contrib/restricted/boost/boost/qvm/detail/remove_const.hpp
index 9ed98bfeca..82f1d1cef5 100644
--- a/contrib/restricted/boost/boost/qvm/detail/remove_const.hpp
+++ b/contrib/restricted/boost/boost/qvm/detail/remove_const.hpp
@@ -1,35 +1,35 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_4E340430AE4C11DEBA56149755D89593
-#define UUID_4E340430AE4C11DEBA56149755D89593
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_detail
- {
- template <class T>
- struct
- remove_const
- {
- typedef T type;
- };
-
- template <class T>
- struct
- remove_const<T const>
- {
- typedef T type;
- };
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_4E340430AE4C11DEBA56149755D89593
+#define UUID_4E340430AE4C11DEBA56149755D89593
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ template <class T>
+ struct
+ remove_const
+ {
+ typedef T type;
+ };
+
+ template <class T>
+ struct
+ remove_const<T const>
+ {
+ typedef T type;
+ };
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/detail/swizzle_traits.hpp b/contrib/restricted/boost/boost/qvm/detail/swizzle_traits.hpp
index db573d50a6..8ead2976f5 100644
--- a/contrib/restricted/boost/boost/qvm/detail/swizzle_traits.hpp
+++ b/contrib/restricted/boost/boost/qvm/detail/swizzle_traits.hpp
@@ -1,338 +1,338 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_E831FAD6B38F11DE8CECBF0D56D89593
-#define UUID_E831FAD6B38F11DE8CECBF0D56D89593
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_detail
- {
- BOOST_QVM_INLINE_CRITICAL
- void const *
- get_null()
- {
- static int const obj=0;
- return &obj;
- }
-
- template <int A,class Next=void> struct swizzle_idx { static int const value=A; typedef Next next; };
-
- template <class V,int Idx>
- struct
- const_value
- {
- static
- BOOST_QVM_INLINE_TRIVIAL
- typename vec_traits<V>::scalar_type
- value()
- {
- BOOST_QVM_ASSERT(0);
- return typename vec_traits<V>::scalar_type();
- }
- };
-
- template <class V>
- struct
- const_value<V,-1>
- {
- static
- BOOST_QVM_INLINE_TRIVIAL
- typename vec_traits<V>::scalar_type
- value()
- {
- return scalar_traits<typename vec_traits<V>::scalar_type>::value(0);
- }
- };
-
- template <class V>
- struct
- const_value<V,-2>
- {
- static
- BOOST_QVM_INLINE_TRIVIAL
- typename vec_traits<V>::scalar_type
- value()
- {
- return scalar_traits<typename vec_traits<V>::scalar_type>::value(1);
- }
- };
-
- template <int Index,bool Neg=(Index<0)>
- struct neg_zero;
-
- template <int Index>
- struct
- neg_zero<Index,true>
- {
- static int const value=0;
- };
-
- template <int Index>
- struct
- neg_zero<Index,false>
- {
- static int const value=Index;
- };
-
- template <class SwizzleList,int Index,int C=0>
- struct
- swizzle
- {
- static int const value=swizzle<typename SwizzleList::next,Index,C+1>::value;
- };
-
- template <class SwizzleList,int Match>
- struct
- swizzle<SwizzleList,Match,Match>
- {
- static int const value=SwizzleList::value;
- };
-
- template <int Index,int C>
- struct swizzle<void,Index,C>;
-
- template <class SwizzleList,int C=0>
- struct
- swizzle_list_length
- {
- static int const value=swizzle_list_length<typename SwizzleList::next,C+1>::value;
- };
-
- template <int C>
- struct
- swizzle_list_length<void,C>
- {
- static int const value=C;
- };
-
- template <class SwizzleList,int D>
- struct
- validate_swizzle_list
- {
- static bool const value =
- ((SwizzleList::value)<D) && //don't touch extra (), MSVC parsing bug.
- validate_swizzle_list<typename SwizzleList::next,D>::value;
- };
-
- template <int D>
- struct
- validate_swizzle_list<void,D>
- {
- static bool const value=true;
- };
-
- template <class OriginalType,class SwizzleList>
- class
- sw_
- {
- sw_( sw_ const & );
- sw_ & operator=( sw_ const & );
- ~sw_();
-
- BOOST_QVM_STATIC_ASSERT((validate_swizzle_list<SwizzleList,vec_traits<OriginalType>::dim>::value));
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- sw_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <class SwizzleList>
- class
- sw01_
- {
- sw01_( sw01_ const & );
- sw01_ & operator=( sw01_ const & );
- ~sw01_();
-
- public:
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <class OriginalType,class SwizzleList>
- class
- sws_
- {
- sws_( sws_ const & );
- sws_ & operator=( sws_ const & );
- ~sws_();
-
- BOOST_QVM_STATIC_ASSERT((validate_swizzle_list<SwizzleList,1>::value));
-
- public:
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class OriginalVector,class SwizzleList>
- struct
- vec_traits<qvm_detail::sw_<OriginalVector,SwizzleList> >
- {
- typedef qvm_detail::sw_<OriginalVector,SwizzleList> this_vector;
- typedef typename vec_traits<OriginalVector>::scalar_type scalar_type;
- static int const dim=qvm_detail::swizzle_list_length<SwizzleList>::value;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- int const idx=qvm_detail::swizzle<SwizzleList,I>::value;
- BOOST_QVM_STATIC_ASSERT(idx<vec_traits<OriginalVector>::dim);
- return idx>=0?
- vec_traits<OriginalVector>::template read_element<qvm_detail::neg_zero<idx>::value>(reinterpret_cast<OriginalVector const &>(x)) :
- qvm_detail::const_value<this_vector,idx>::value();
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_vector & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- int const idx=qvm_detail::swizzle<SwizzleList,I>::value;
- BOOST_QVM_STATIC_ASSERT(idx>=0);
- BOOST_QVM_STATIC_ASSERT(idx<vec_traits<OriginalVector>::dim);
- return vec_traits<OriginalVector>::template write_element<idx>(reinterpret_cast<OriginalVector &>(x));
- }
- };
-
- template <class SwizzleList>
- struct
- vec_traits<qvm_detail::sw01_<SwizzleList> >
- {
- typedef qvm_detail::sw01_<SwizzleList> this_vector;
- typedef int scalar_type;
- static int const dim=qvm_detail::swizzle_list_length<SwizzleList>::value;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- int const idx=qvm_detail::swizzle<SwizzleList,I>::value;
- BOOST_QVM_STATIC_ASSERT(idx<0);
- return qvm_detail::const_value<this_vector,idx>::value();
- }
- };
-
- template <class OriginalScalar,class SwizzleList>
- struct
- vec_traits<qvm_detail::sws_<OriginalScalar,SwizzleList> >
- {
- typedef qvm_detail::sws_<OriginalScalar,SwizzleList> this_vector;
- typedef OriginalScalar scalar_type;
- static int const dim=qvm_detail::swizzle_list_length<SwizzleList>::value;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- int const idx=qvm_detail::swizzle<SwizzleList,I>::value;
- BOOST_QVM_STATIC_ASSERT(idx<1);
- return idx==0?
- reinterpret_cast<OriginalScalar const &>(x) :
- qvm_detail::const_value<this_vector,idx>::value();
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_vector & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- int const idx=qvm_detail::swizzle<SwizzleList,I>::value;
- BOOST_QVM_STATIC_ASSERT(idx==0);
- return reinterpret_cast<OriginalScalar &>(x);
- }
- };
-
- template <class OriginalVector,class SwizzleList,int D>
- struct
- deduce_vec<qvm_detail::sw_<OriginalVector,SwizzleList>,D>
- {
- typedef vec<typename vec_traits<OriginalVector>::scalar_type,D> type;
- };
-
- template <class OriginalVector,class SwizzleList,int D>
- struct
- deduce_vec2<qvm_detail::sw_<OriginalVector,SwizzleList>,qvm_detail::sw_<OriginalVector,SwizzleList>,D>
- {
- typedef vec<typename vec_traits<OriginalVector>::scalar_type,D> type;
- };
-
- template <class Scalar,class SwizzleList,int D>
- struct
- deduce_vec<qvm_detail::sws_<Scalar,SwizzleList>,D>
- {
- typedef vec<Scalar,D> type;
- };
-
- template <class Scalar,class SwizzleList,int D>
- struct
- deduce_vec2<qvm_detail::sws_<Scalar,SwizzleList>,qvm_detail::sws_<Scalar,SwizzleList>,D>
- {
- typedef vec<Scalar,D> type;
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_E831FAD6B38F11DE8CECBF0D56D89593
+#define UUID_E831FAD6B38F11DE8CECBF0D56D89593
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ BOOST_QVM_INLINE_CRITICAL
+ void const *
+ get_null()
+ {
+ static int const obj=0;
+ return &obj;
+ }
+
+ template <int A,class Next=void> struct swizzle_idx { static int const value=A; typedef Next next; };
+
+ template <class V,int Idx>
+ struct
+ const_value
+ {
+ static
+ BOOST_QVM_INLINE_TRIVIAL
+ typename vec_traits<V>::scalar_type
+ value()
+ {
+ BOOST_QVM_ASSERT(0);
+ return typename vec_traits<V>::scalar_type();
+ }
+ };
+
+ template <class V>
+ struct
+ const_value<V,-1>
+ {
+ static
+ BOOST_QVM_INLINE_TRIVIAL
+ typename vec_traits<V>::scalar_type
+ value()
+ {
+ return scalar_traits<typename vec_traits<V>::scalar_type>::value(0);
+ }
+ };
+
+ template <class V>
+ struct
+ const_value<V,-2>
+ {
+ static
+ BOOST_QVM_INLINE_TRIVIAL
+ typename vec_traits<V>::scalar_type
+ value()
+ {
+ return scalar_traits<typename vec_traits<V>::scalar_type>::value(1);
+ }
+ };
+
+ template <int Index,bool Neg=(Index<0)>
+ struct neg_zero;
+
+ template <int Index>
+ struct
+ neg_zero<Index,true>
+ {
+ static int const value=0;
+ };
+
+ template <int Index>
+ struct
+ neg_zero<Index,false>
+ {
+ static int const value=Index;
+ };
+
+ template <class SwizzleList,int Index,int C=0>
+ struct
+ swizzle
+ {
+ static int const value=swizzle<typename SwizzleList::next,Index,C+1>::value;
+ };
+
+ template <class SwizzleList,int Match>
+ struct
+ swizzle<SwizzleList,Match,Match>
+ {
+ static int const value=SwizzleList::value;
+ };
+
+ template <int Index,int C>
+ struct swizzle<void,Index,C>;
+
+ template <class SwizzleList,int C=0>
+ struct
+ swizzle_list_length
+ {
+ static int const value=swizzle_list_length<typename SwizzleList::next,C+1>::value;
+ };
+
+ template <int C>
+ struct
+ swizzle_list_length<void,C>
+ {
+ static int const value=C;
+ };
+
+ template <class SwizzleList,int D>
+ struct
+ validate_swizzle_list
+ {
+ static bool const value =
+ ((SwizzleList::value)<D) && //don't touch extra (), MSVC parsing bug.
+ validate_swizzle_list<typename SwizzleList::next,D>::value;
+ };
+
+ template <int D>
+ struct
+ validate_swizzle_list<void,D>
+ {
+ static bool const value=true;
+ };
+
+ template <class OriginalType,class SwizzleList>
+ class
+ sw_
+ {
+ sw_( sw_ const & );
+ sw_ & operator=( sw_ const & );
+ ~sw_();
+
+ BOOST_QVM_STATIC_ASSERT((validate_swizzle_list<SwizzleList,vec_traits<OriginalType>::dim>::value));
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ sw_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <class SwizzleList>
+ class
+ sw01_
+ {
+ sw01_( sw01_ const & );
+ sw01_ & operator=( sw01_ const & );
+ ~sw01_();
+
+ public:
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <class OriginalType,class SwizzleList>
+ class
+ sws_
+ {
+ sws_( sws_ const & );
+ sws_ & operator=( sws_ const & );
+ ~sws_();
+
+ BOOST_QVM_STATIC_ASSERT((validate_swizzle_list<SwizzleList,1>::value));
+
+ public:
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class OriginalVector,class SwizzleList>
+ struct
+ vec_traits<qvm_detail::sw_<OriginalVector,SwizzleList> >
+ {
+ typedef qvm_detail::sw_<OriginalVector,SwizzleList> this_vector;
+ typedef typename vec_traits<OriginalVector>::scalar_type scalar_type;
+ static int const dim=qvm_detail::swizzle_list_length<SwizzleList>::value;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ int const idx=qvm_detail::swizzle<SwizzleList,I>::value;
+ BOOST_QVM_STATIC_ASSERT(idx<vec_traits<OriginalVector>::dim);
+ return idx>=0?
+ vec_traits<OriginalVector>::template read_element<qvm_detail::neg_zero<idx>::value>(reinterpret_cast<OriginalVector const &>(x)) :
+ qvm_detail::const_value<this_vector,idx>::value();
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_vector & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ int const idx=qvm_detail::swizzle<SwizzleList,I>::value;
+ BOOST_QVM_STATIC_ASSERT(idx>=0);
+ BOOST_QVM_STATIC_ASSERT(idx<vec_traits<OriginalVector>::dim);
+ return vec_traits<OriginalVector>::template write_element<idx>(reinterpret_cast<OriginalVector &>(x));
+ }
+ };
+
+ template <class SwizzleList>
+ struct
+ vec_traits<qvm_detail::sw01_<SwizzleList> >
+ {
+ typedef qvm_detail::sw01_<SwizzleList> this_vector;
+ typedef int scalar_type;
+ static int const dim=qvm_detail::swizzle_list_length<SwizzleList>::value;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ int const idx=qvm_detail::swizzle<SwizzleList,I>::value;
+ BOOST_QVM_STATIC_ASSERT(idx<0);
+ return qvm_detail::const_value<this_vector,idx>::value();
+ }
+ };
+
+ template <class OriginalScalar,class SwizzleList>
+ struct
+ vec_traits<qvm_detail::sws_<OriginalScalar,SwizzleList> >
+ {
+ typedef qvm_detail::sws_<OriginalScalar,SwizzleList> this_vector;
+ typedef OriginalScalar scalar_type;
+ static int const dim=qvm_detail::swizzle_list_length<SwizzleList>::value;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ int const idx=qvm_detail::swizzle<SwizzleList,I>::value;
+ BOOST_QVM_STATIC_ASSERT(idx<1);
+ return idx==0?
+ reinterpret_cast<OriginalScalar const &>(x) :
+ qvm_detail::const_value<this_vector,idx>::value();
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_vector & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ int const idx=qvm_detail::swizzle<SwizzleList,I>::value;
+ BOOST_QVM_STATIC_ASSERT(idx==0);
+ return reinterpret_cast<OriginalScalar &>(x);
+ }
+ };
+
+ template <class OriginalVector,class SwizzleList,int D>
+ struct
+ deduce_vec<qvm_detail::sw_<OriginalVector,SwizzleList>,D>
+ {
+ typedef vec<typename vec_traits<OriginalVector>::scalar_type,D> type;
+ };
+
+ template <class OriginalVector,class SwizzleList,int D>
+ struct
+ deduce_vec2<qvm_detail::sw_<OriginalVector,SwizzleList>,qvm_detail::sw_<OriginalVector,SwizzleList>,D>
+ {
+ typedef vec<typename vec_traits<OriginalVector>::scalar_type,D> type;
+ };
+
+ template <class Scalar,class SwizzleList,int D>
+ struct
+ deduce_vec<qvm_detail::sws_<Scalar,SwizzleList>,D>
+ {
+ typedef vec<Scalar,D> type;
+ };
+
+ template <class Scalar,class SwizzleList,int D>
+ struct
+ deduce_vec2<qvm_detail::sws_<Scalar,SwizzleList>,qvm_detail::sws_<Scalar,SwizzleList>,D>
+ {
+ typedef vec<Scalar,D> type;
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/detail/transp_impl.hpp b/contrib/restricted/boost/boost/qvm/detail/transp_impl.hpp
index 31ebc483ec..8ead1da9fc 100644
--- a/contrib/restricted/boost/boost/qvm/detail/transp_impl.hpp
+++ b/contrib/restricted/boost/boost/qvm/detail/transp_impl.hpp
@@ -1,128 +1,128 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_B3B8081A277711E09E007F2DDFD72085
-#define UUID_B3B8081A277711E09E007F2DDFD72085
-
-#include <boost/qvm/deduce_mat.hpp>
-#include <boost/qvm/static_assert.hpp>
-#include <boost/qvm/assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_detail
- {
- template <class OriginalMatrix>
- class
- transposed_
- {
- transposed_( transposed_ const & );
- transposed_ & operator=( transposed_ const & );
- ~transposed_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- transposed_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class OriginalMatrix>
- struct
- mat_traits< qvm_detail::transposed_<OriginalMatrix> >
- {
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- typedef qvm_detail::transposed_<OriginalMatrix> this_matrix;
- static int const rows=mat_traits<OriginalMatrix>::cols;
- static int const cols=mat_traits<OriginalMatrix>::rows;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template read_element<Col,Row>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template write_element<Col,Row>(reinterpret_cast<OriginalMatrix &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::read_element_idx(col,row,reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::write_element_idx(col,row,reinterpret_cast<OriginalMatrix &>(x));
- }
- };
-
- template <class OriginalMatrix,int R,int C>
- struct
- deduce_mat<qvm_detail::transposed_<OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <class OriginalMatrix,int R,int C>
- struct
- deduce_mat2<qvm_detail::transposed_<OriginalMatrix>,qvm_detail::transposed_<OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_B3B8081A277711E09E007F2DDFD72085
+#define UUID_B3B8081A277711E09E007F2DDFD72085
+
+#include <boost/qvm/deduce_mat.hpp>
+#include <boost/qvm/static_assert.hpp>
+#include <boost/qvm/assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ template <class OriginalMatrix>
+ class
+ transposed_
+ {
+ transposed_( transposed_ const & );
+ transposed_ & operator=( transposed_ const & );
+ ~transposed_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ transposed_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class OriginalMatrix>
+ struct
+ mat_traits< qvm_detail::transposed_<OriginalMatrix> >
+ {
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ typedef qvm_detail::transposed_<OriginalMatrix> this_matrix;
+ static int const rows=mat_traits<OriginalMatrix>::cols;
+ static int const cols=mat_traits<OriginalMatrix>::rows;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template read_element<Col,Row>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template write_element<Col,Row>(reinterpret_cast<OriginalMatrix &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::read_element_idx(col,row,reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::write_element_idx(col,row,reinterpret_cast<OriginalMatrix &>(x));
+ }
+ };
+
+ template <class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat<qvm_detail::transposed_<OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::transposed_<OriginalMatrix>,qvm_detail::transposed_<OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/detail/vec_assign.hpp b/contrib/restricted/boost/boost/qvm/detail/vec_assign.hpp
index f11e8bd3ed..c196c4f68d 100644
--- a/contrib/restricted/boost/boost/qvm/detail/vec_assign.hpp
+++ b/contrib/restricted/boost/boost/qvm/detail/vec_assign.hpp
@@ -1,71 +1,71 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_185557CE385511E780ACD7B781262D2E
-#define UUID_185557CE385511E780ACD7B781262D2E
-
-#include <boost/qvm/gen/vec_assign2.hpp>
-#include <boost/qvm/gen/vec_assign3.hpp>
-#include <boost/qvm/gen/vec_assign4.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_detail
- {
- template <int D>
- struct
- assign_vv_defined
- {
- static bool const value=false;
- };
-
- template <int I,int N>
- struct
- copy_vector_elements
- {
- template <class A,class B>
- static
- void
- f( A & a, B const & b )
- {
- vec_traits<A>::template write_element<I>(a)=vec_traits<B>::template read_element<I>(b);
- copy_vector_elements<I+1,N>::f(a,b);
- }
- };
-
- template <int N>
- struct
- copy_vector_elements<N,N>
- {
- template <class A,class B>
- static
- void
- f( A &, B const & )
- {
- }
- };
- }
-
- template <class A,class B>
- inline
- typename boost::enable_if_c<
- is_vec<A>::value && is_vec<B>::value &&
- vec_traits<A>::dim==vec_traits<B>::dim &&
- !qvm_detail::assign_vv_defined<vec_traits<A>::dim>::value,
- A &>::type
- assign( A & a, B const & b )
- {
- qvm_detail::copy_vector_elements<0,vec_traits<A>::dim>::f(a,b);
- return a;
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_185557CE385511E780ACD7B781262D2E
+#define UUID_185557CE385511E780ACD7B781262D2E
+
+#include <boost/qvm/gen/vec_assign2.hpp>
+#include <boost/qvm/gen/vec_assign3.hpp>
+#include <boost/qvm/gen/vec_assign4.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ assign_vv_defined
+ {
+ static bool const value=false;
+ };
+
+ template <int I,int N>
+ struct
+ copy_vector_elements
+ {
+ template <class A,class B>
+ static
+ void
+ f( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<I>(a)=vec_traits<B>::template read_element<I>(b);
+ copy_vector_elements<I+1,N>::f(a,b);
+ }
+ };
+
+ template <int N>
+ struct
+ copy_vector_elements<N,N>
+ {
+ template <class A,class B>
+ static
+ void
+ f( A &, B const & )
+ {
+ }
+ };
+ }
+
+ template <class A,class B>
+ inline
+ typename boost::enable_if_c<
+ is_vec<A>::value && is_vec<B>::value &&
+ vec_traits<A>::dim==vec_traits<B>::dim &&
+ !qvm_detail::assign_vv_defined<vec_traits<A>::dim>::value,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ qvm_detail::copy_vector_elements<0,vec_traits<A>::dim>::f(a,b);
+ return a;
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/enable_if.hpp b/contrib/restricted/boost/boost/qvm/enable_if.hpp
index b7f1d35012..3ce0b4f9ea 100644
--- a/contrib/restricted/boost/boost/qvm/enable_if.hpp
+++ b/contrib/restricted/boost/boost/qvm/enable_if.hpp
@@ -1,24 +1,24 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_A4FA0794391911DF85A6622B56D89593
-#define UUID_A4FA0794391911DF85A6622B56D89593
-
-#include <boost/utility/enable_if.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- using boost::enable_if;
- using boost::enable_if_c;
- using boost::lazy_enable_if;
- using boost::lazy_enable_if_c;
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_A4FA0794391911DF85A6622B56D89593
+#define UUID_A4FA0794391911DF85A6622B56D89593
+
+#include <boost/utility/enable_if.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ using boost::enable_if;
+ using boost::enable_if_c;
+ using boost::lazy_enable_if;
+ using boost::lazy_enable_if_c;
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/error.hpp b/contrib/restricted/boost/boost/qvm/error.hpp
index 08821dc884..c62c76d1fd 100644
--- a/contrib/restricted/boost/boost/qvm/error.hpp
+++ b/contrib/restricted/boost/boost/qvm/error.hpp
@@ -1,40 +1,40 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_92B1247AAE1111DE9655F2FC55D89593
-#define UUID_92B1247AAE1111DE9655F2FC55D89593
-
-#include "boost/exception/exception.hpp"
-#include "boost/exception/error_info.hpp"
-#include <exception>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- struct
- error:
- virtual boost::exception,
- virtual std::exception
- {
- char const *
- what() const noexcept
- {
- return "Boost QVM error";
- }
-
- ~error()
- {
- }
- };
-
- struct zero_determinant_error: virtual error { };
- struct zero_magnitude_error: virtual error { };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_92B1247AAE1111DE9655F2FC55D89593
+#define UUID_92B1247AAE1111DE9655F2FC55D89593
+
+#include "boost/exception/exception.hpp"
+#include "boost/exception/error_info.hpp"
+#include <exception>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ struct
+ error:
+ virtual boost::exception,
+ virtual std::exception
+ {
+ char const *
+ what() const noexcept
+ {
+ return "Boost QVM error";
+ }
+
+ ~error()
+ {
+ }
+ };
+
+ struct zero_determinant_error: virtual error { };
+ struct zero_magnitude_error: virtual error { };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/mat_assign2.hpp b/contrib/restricted/boost/boost/qvm/gen/mat_assign2.hpp
index 89db684941..8a4285c911 100644
--- a/contrib/restricted/boost/boost/qvm/gen/mat_assign2.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/mat_assign2.hpp
@@ -1,125 +1,125 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_5DD4CBFC96F5453B13D89A1CDBAE32
-#define BOOST_QVM_5DD4CBFC96F5453B13D89A1CDBAE32
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/mat_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- A &>::type
- assign( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct assign_mm_defined;
-
- template <>
- struct
- assign_mm_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- A &>::type
- assign( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct assign_mm_defined;
-
- template <>
- struct
- assign_mm_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- A &>::type
- assign( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct assign_mm_defined;
-
- template <>
- struct
- assign_mm_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_5DD4CBFC96F5453B13D89A1CDBAE32
+#define BOOST_QVM_5DD4CBFC96F5453B13D89A1CDBAE32
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/mat_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct assign_mm_defined;
+
+ template <>
+ struct
+ assign_mm_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct assign_mm_defined;
+
+ template <>
+ struct
+ assign_mm_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct assign_mm_defined;
+
+ template <>
+ struct
+ assign_mm_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/mat_assign3.hpp b/contrib/restricted/boost/boost/qvm/gen/mat_assign3.hpp
index b7ef4bf51b..b2e8f12f4c 100644
--- a/contrib/restricted/boost/boost/qvm/gen/mat_assign3.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/mat_assign3.hpp
@@ -1,132 +1,132 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_209A50EE407836FD124932F69E7D49DC
-#define BOOST_QVM_209A50EE407836FD124932F69E7D49DC
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/mat_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- A &>::type
- assign( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
- mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
- mat_traits<A>::template write_element<1,2>(a)=mat_traits<B>::template read_element<1,2>(b);
- mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
- mat_traits<A>::template write_element<2,1>(a)=mat_traits<B>::template read_element<2,1>(b);
- mat_traits<A>::template write_element<2,2>(a)=mat_traits<B>::template read_element<2,2>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct assign_mm_defined;
-
- template <>
- struct
- assign_mm_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- A &>::type
- assign( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct assign_mm_defined;
-
- template <>
- struct
- assign_mm_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- A &>::type
- assign( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct assign_mm_defined;
-
- template <>
- struct
- assign_mm_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_209A50EE407836FD124932F69E7D49DC
+#define BOOST_QVM_209A50EE407836FD124932F69E7D49DC
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/mat_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<A>::template write_element<1,2>(a)=mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<A>::template write_element<2,1>(a)=mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<A>::template write_element<2,2>(a)=mat_traits<B>::template read_element<2,2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct assign_mm_defined;
+
+ template <>
+ struct
+ assign_mm_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct assign_mm_defined;
+
+ template <>
+ struct
+ assign_mm_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct assign_mm_defined;
+
+ template <>
+ struct
+ assign_mm_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/mat_assign4.hpp b/contrib/restricted/boost/boost/qvm/gen/mat_assign4.hpp
index 1518a353b9..69fa3e1928 100644
--- a/contrib/restricted/boost/boost/qvm/gen/mat_assign4.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/mat_assign4.hpp
@@ -1,141 +1,141 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_AD4F14F2444066D06BC430B7323BA122
-#define BOOST_QVM_AD4F14F2444066D06BC430B7323BA122
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/mat_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- A &>::type
- assign( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
- mat_traits<A>::template write_element<0,3>(a)=mat_traits<B>::template read_element<0,3>(b);
- mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
- mat_traits<A>::template write_element<1,2>(a)=mat_traits<B>::template read_element<1,2>(b);
- mat_traits<A>::template write_element<1,3>(a)=mat_traits<B>::template read_element<1,3>(b);
- mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
- mat_traits<A>::template write_element<2,1>(a)=mat_traits<B>::template read_element<2,1>(b);
- mat_traits<A>::template write_element<2,2>(a)=mat_traits<B>::template read_element<2,2>(b);
- mat_traits<A>::template write_element<2,3>(a)=mat_traits<B>::template read_element<2,3>(b);
- mat_traits<A>::template write_element<3,0>(a)=mat_traits<B>::template read_element<3,0>(b);
- mat_traits<A>::template write_element<3,1>(a)=mat_traits<B>::template read_element<3,1>(b);
- mat_traits<A>::template write_element<3,2>(a)=mat_traits<B>::template read_element<3,2>(b);
- mat_traits<A>::template write_element<3,3>(a)=mat_traits<B>::template read_element<3,3>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct assign_mm_defined;
-
- template <>
- struct
- assign_mm_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- A &>::type
- assign( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
- mat_traits<A>::template write_element<3,0>(a)=mat_traits<B>::template read_element<3,0>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct assign_mm_defined;
-
- template <>
- struct
- assign_mm_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- A &>::type
- assign( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
- mat_traits<A>::template write_element<0,3>(a)=mat_traits<B>::template read_element<0,3>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct assign_mm_defined;
-
- template <>
- struct
- assign_mm_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_AD4F14F2444066D06BC430B7323BA122
+#define BOOST_QVM_AD4F14F2444066D06BC430B7323BA122
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/mat_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<A>::template write_element<0,3>(a)=mat_traits<B>::template read_element<0,3>(b);
+ mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<1,1>(a)=mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<A>::template write_element<1,2>(a)=mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<A>::template write_element<1,3>(a)=mat_traits<B>::template read_element<1,3>(b);
+ mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<A>::template write_element<2,1>(a)=mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<A>::template write_element<2,2>(a)=mat_traits<B>::template read_element<2,2>(b);
+ mat_traits<A>::template write_element<2,3>(a)=mat_traits<B>::template read_element<2,3>(b);
+ mat_traits<A>::template write_element<3,0>(a)=mat_traits<B>::template read_element<3,0>(b);
+ mat_traits<A>::template write_element<3,1>(a)=mat_traits<B>::template read_element<3,1>(b);
+ mat_traits<A>::template write_element<3,2>(a)=mat_traits<B>::template read_element<3,2>(b);
+ mat_traits<A>::template write_element<3,3>(a)=mat_traits<B>::template read_element<3,3>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct assign_mm_defined;
+
+ template <>
+ struct
+ assign_mm_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<1,0>(a)=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<2,0>(a)=mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<A>::template write_element<3,0>(a)=mat_traits<B>::template read_element<3,0>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct assign_mm_defined;
+
+ template <>
+ struct
+ assign_mm_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)=mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<A>::template write_element<0,3>(a)=mat_traits<B>::template read_element<0,3>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct assign_mm_defined;
+
+ template <>
+ struct
+ assign_mm_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/mat_operations2.hpp b/contrib/restricted/boost/boost/qvm/gen/mat_operations2.hpp
index 0501586378..d20339bc7d 100644
--- a/contrib/restricted/boost/boost/qvm/gen/mat_operations2.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/mat_operations2.hpp
@@ -1,1720 +1,1720 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_2923BE84E16CD6AE529049F1F1BBE9EB
-#define BOOST_QVM_2923BE84E16CD6AE529049F1F1BBE9EB
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/deduce_mat.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/error.hpp>
-#include <boost/qvm/gen/mat_assign2.hpp>
-#include <boost/qvm/throw_exception.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- deduce_mat2<A,B,2,2> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,2,2>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)+mat_traits<B>::template read_element<1,1>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_mm_defined;
-
- template <>
- struct
- plus_mm_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- deduce_mat2<A,B,2,1> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,2,1>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_mm_defined;
-
- template <>
- struct
- plus_mm_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- deduce_mat2<A,B,1,2> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,1,2>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_mm_defined;
-
- template <>
- struct
- plus_mm_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- deduce_mat2<A,B,2,2> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,2,2>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)-mat_traits<B>::template read_element<1,1>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_mm_defined;
-
- template <>
- struct
- minus_mm_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- deduce_mat2<A,B,2,1> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,2,1>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_mm_defined;
-
- template <>
- struct
- minus_mm_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- deduce_mat2<A,B,1,2> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,1,2>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_mm_defined;
-
- template <>
- struct
- minus_mm_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- A &>::type
- operator+=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<1,1>(a)+=mat_traits<B>::template read_element<1,1>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_eq_mm_defined;
-
- template <>
- struct
- plus_eq_mm_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- A &>::type
- operator+=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_eq_mm_defined;
-
- template <>
- struct
- plus_eq_mm_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- A &>::type
- operator+=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_eq_mm_defined;
-
- template <>
- struct
- plus_eq_mm_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- A &>::type
- operator-=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<1,1>(a)-=mat_traits<B>::template read_element<1,1>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_eq_mm_defined;
-
- template <>
- struct
- minus_eq_mm_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- A &>::type
- operator-=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_eq_mm_defined;
-
- template <>
- struct
- minus_eq_mm_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- A &>::type
- operator-=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_eq_mm_defined;
-
- template <>
- struct
- minus_eq_mm_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==2 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_ms_defined;
-
- template <>
- struct
- mul_ms_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==2 && mat_traits<B>::cols==2,
- deduce_mat<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=a*mat_traits<B>::template read_element<1,1>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_sm_defined;
-
- template <>
- struct
- mul_sm_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_ms_defined;
-
- template <>
- struct
- mul_ms_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==2 && mat_traits<B>::cols==1,
- deduce_mat<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_sm_defined;
-
- template <>
- struct
- mul_sm_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==2 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_ms_defined;
-
- template <>
- struct
- mul_ms_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==1 && mat_traits<B>::cols==2,
- deduce_mat<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_sm_defined;
-
- template <>
- struct
- mul_sm_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==2 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)*=b;
- mat_traits<A>::template write_element<0,1>(a)*=b;
- mat_traits<A>::template write_element<1,0>(a)*=b;
- mat_traits<A>::template write_element<1,1>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_eq_ms_defined;
-
- template <>
- struct
- mul_eq_ms_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)*=b;
- mat_traits<A>::template write_element<1,0>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_eq_ms_defined;
-
- template <>
- struct
- mul_eq_ms_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==2 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)*=b;
- mat_traits<A>::template write_element<0,1>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_eq_ms_defined;
-
- template <>
- struct
- mul_eq_ms_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==2 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_ms_defined;
-
- template <>
- struct
- div_ms_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==2 && mat_traits<B>::cols==2,
- deduce_mat<B> >::type
- operator/( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=a/mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=a/mat_traits<B>::template read_element<1,1>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_sm_defined;
-
- template <>
- struct
- div_sm_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_ms_defined;
-
- template <>
- struct
- div_ms_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==2 && mat_traits<B>::cols==1,
- deduce_mat<B> >::type
- operator/( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_sm_defined;
-
- template <>
- struct
- div_sm_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==2 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_ms_defined;
-
- template <>
- struct
- div_ms_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==2 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)/=b;
- mat_traits<A>::template write_element<0,1>(a)/=b;
- mat_traits<A>::template write_element<1,0>(a)/=b;
- mat_traits<A>::template write_element<1,1>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_eq_ms_defined;
-
- template <>
- struct
- div_eq_ms_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)/=b;
- mat_traits<A>::template write_element<1,0>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_eq_ms_defined;
-
- template <>
- struct
- div_eq_ms_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==2 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)/=b;
- mat_traits<A>::template write_element<0,1>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_eq_ms_defined;
-
- template <>
- struct
- div_eq_ms_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<R>::rows==2 && mat_traits<A>::rows==2 &&
- mat_traits<R>::cols==2 && mat_traits<A>::cols==2,
- R>::type
- convert_to( A const & a )
- {
- R r;
- mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
- mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
- mat_traits<R>::template write_element<1,1>(r) = mat_traits<A>::template read_element<1,1>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct convert_to_m_defined;
-
- template <>
- struct
- convert_to_m_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<R>::rows==2 && mat_traits<A>::rows==2 &&
- mat_traits<R>::cols==1 && mat_traits<A>::cols==1,
- R>::type
- convert_to( A const & a )
- {
- R r;
- mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct convert_to_m_defined;
-
- template <>
- struct
- convert_to_m_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<R>::rows==1 && mat_traits<A>::rows==1 &&
- mat_traits<R>::cols==2 && mat_traits<A>::cols==2,
- R>::type
- convert_to( A const & a )
- {
- R r;
- mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct convert_to_m_defined;
-
- template <>
- struct
- convert_to_m_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
- mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b) &&
- mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b) &&
- mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct eq_mm_defined;
-
- template <>
- struct
- eq_mm_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
- mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct eq_mm_defined;
-
- template <>
- struct
- eq_mm_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
- mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct eq_mm_defined;
-
- template <>
- struct
- eq_mm_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
- !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b)) ||
- !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b)) ||
- !(mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct neq_mm_defined;
-
- template <>
- struct
- neq_mm_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
- !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct neq_mm_defined;
-
- template <>
- struct
- neq_mm_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
- !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct neq_mm_defined;
-
- template <>
- struct
- neq_mm_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==2,
- deduce_mat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
- mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
- mat_traits<R>::template write_element<1,1>(r)=-mat_traits<A>::template read_element<1,1>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_m_defined;
-
- template <>
- struct
- minus_m_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==1,
- deduce_mat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_m_defined;
-
- template <>
- struct
- minus_m_defined<2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==2,
- deduce_mat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_m_defined;
-
- template <>
- struct
- minus_m_defined<1,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==2,
- typename mat_traits<A>::scalar_type>::type
- determinant( A const & a )
- {
- typedef typename mat_traits<A>::scalar_type T;
- T const a00=mat_traits<A>::template read_element<0,0>(a);
- T const a01=mat_traits<A>::template read_element<0,1>(a);
- T const a10=mat_traits<A>::template read_element<1,0>(a);
- T const a11=mat_traits<A>::template read_element<1,1>(a);
- T det=(a00*a11-a01*a10);
- return det;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::determinant;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct determinant_defined;
-
- template <>
- struct
- determinant_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==2 && is_scalar<B>::value,
- deduce_mat<A> >::type
- inverse( A const & a, B det )
- {
- typedef typename mat_traits<A>::scalar_type T;
- BOOST_QVM_ASSERT(det!=scalar_traits<B>::value(0));
- T const a00=mat_traits<A>::template read_element<0,0>(a);
- T const a01=mat_traits<A>::template read_element<0,1>(a);
- T const a10=mat_traits<A>::template read_element<1,0>(a);
- T const a11=mat_traits<A>::template read_element<1,1>(a);
- T const f=scalar_traits<T>::value(1)/det;
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)= f*a11;
- mat_traits<R>::template write_element<0,1>(r)=-f*a01;
- mat_traits<R>::template write_element<1,0>(r)=-f*a10;
- mat_traits<R>::template write_element<1,1>(r)= f*a00;
- return r;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==2,
- deduce_mat<A> >::type
- inverse( A const & a )
- {
- typedef typename mat_traits<A>::scalar_type T;
- T det=determinant(a);
- if( det==scalar_traits<T>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_determinant_error());
- return inverse(a,det);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::inverse;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct inverse_m_defined;
-
- template <>
- struct
- inverse_m_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- deduce_mat2<A,B,2,2> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- typedef typename deduce_mat2<A,B,2,2>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10;
- mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11;
- mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10;
- mat_traits<R>::template write_element<1,1>(r)=a10*b01+a11*b11;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int CR,int C>
- struct mul_mm_defined;
-
- template <>
- struct
- mul_mm_defined<2,2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- A &>::type
- operator*=( A & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- mat_traits<A>::template write_element<0,0>(a)=a00*b00+a01*b10;
- mat_traits<A>::template write_element<0,1>(a)=a00*b01+a01*b11;
- mat_traits<A>::template write_element<1,0>(a)=a10*b00+a11*b10;
- mat_traits<A>::template write_element<1,1>(a)=a10*b01+a11*b11;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_eq_mm_defined;
-
- template <>
- struct
- mul_eq_mm_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==1,
- deduce_mat2<A,B,2,1> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- typedef typename deduce_mat2<A,B,2,1>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10;
- mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int CR,int C>
- struct mul_mm_defined;
-
- template <>
- struct
- mul_mm_defined<2,2,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==2 &&
- mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
- deduce_mat2<A,B,1,2> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- typedef typename deduce_mat2<A,B,1,2>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10;
- mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int CR,int C>
- struct mul_mm_defined;
-
- template <>
- struct
- mul_mm_defined<1,2,2>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_2923BE84E16CD6AE529049F1F1BBE9EB
+#define BOOST_QVM_2923BE84E16CD6AE529049F1F1BBE9EB
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/deduce_mat.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/error.hpp>
+#include <boost/qvm/gen/mat_assign2.hpp>
+#include <boost/qvm/throw_exception.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ deduce_mat2<A,B,2,2> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,2,2>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)+mat_traits<B>::template read_element<1,1>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_mm_defined;
+
+ template <>
+ struct
+ plus_mm_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ deduce_mat2<A,B,2,1> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,2,1>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_mm_defined;
+
+ template <>
+ struct
+ plus_mm_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ deduce_mat2<A,B,1,2> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,1,2>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_mm_defined;
+
+ template <>
+ struct
+ plus_mm_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ deduce_mat2<A,B,2,2> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,2,2>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)-mat_traits<B>::template read_element<1,1>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_mm_defined;
+
+ template <>
+ struct
+ minus_mm_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ deduce_mat2<A,B,2,1> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,2,1>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_mm_defined;
+
+ template <>
+ struct
+ minus_mm_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ deduce_mat2<A,B,1,2> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,1,2>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_mm_defined;
+
+ template <>
+ struct
+ minus_mm_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<1,1>(a)+=mat_traits<B>::template read_element<1,1>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_eq_mm_defined;
+
+ template <>
+ struct
+ plus_eq_mm_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_eq_mm_defined;
+
+ template <>
+ struct
+ plus_eq_mm_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_eq_mm_defined;
+
+ template <>
+ struct
+ plus_eq_mm_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<1,1>(a)-=mat_traits<B>::template read_element<1,1>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_eq_mm_defined;
+
+ template <>
+ struct
+ minus_eq_mm_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_eq_mm_defined;
+
+ template <>
+ struct
+ minus_eq_mm_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_eq_mm_defined;
+
+ template <>
+ struct
+ minus_eq_mm_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==2 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_ms_defined;
+
+ template <>
+ struct
+ mul_ms_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==2 && mat_traits<B>::cols==2,
+ deduce_mat<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=a*mat_traits<B>::template read_element<1,1>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_sm_defined;
+
+ template <>
+ struct
+ mul_sm_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_ms_defined;
+
+ template <>
+ struct
+ mul_ms_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==2 && mat_traits<B>::cols==1,
+ deduce_mat<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_sm_defined;
+
+ template <>
+ struct
+ mul_sm_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==2 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_ms_defined;
+
+ template <>
+ struct
+ mul_ms_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==1 && mat_traits<B>::cols==2,
+ deduce_mat<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_sm_defined;
+
+ template <>
+ struct
+ mul_sm_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==2 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)*=b;
+ mat_traits<A>::template write_element<0,1>(a)*=b;
+ mat_traits<A>::template write_element<1,0>(a)*=b;
+ mat_traits<A>::template write_element<1,1>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_eq_ms_defined;
+
+ template <>
+ struct
+ mul_eq_ms_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)*=b;
+ mat_traits<A>::template write_element<1,0>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_eq_ms_defined;
+
+ template <>
+ struct
+ mul_eq_ms_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==2 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)*=b;
+ mat_traits<A>::template write_element<0,1>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_eq_ms_defined;
+
+ template <>
+ struct
+ mul_eq_ms_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==2 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_ms_defined;
+
+ template <>
+ struct
+ div_ms_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==2 && mat_traits<B>::cols==2,
+ deduce_mat<B> >::type
+ operator/( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=a/mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=a/mat_traits<B>::template read_element<1,1>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_sm_defined;
+
+ template <>
+ struct
+ div_sm_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_ms_defined;
+
+ template <>
+ struct
+ div_ms_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==2 && mat_traits<B>::cols==1,
+ deduce_mat<B> >::type
+ operator/( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_sm_defined;
+
+ template <>
+ struct
+ div_sm_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==2 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_ms_defined;
+
+ template <>
+ struct
+ div_ms_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==2 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)/=b;
+ mat_traits<A>::template write_element<0,1>(a)/=b;
+ mat_traits<A>::template write_element<1,0>(a)/=b;
+ mat_traits<A>::template write_element<1,1>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_eq_ms_defined;
+
+ template <>
+ struct
+ div_eq_ms_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)/=b;
+ mat_traits<A>::template write_element<1,0>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_eq_ms_defined;
+
+ template <>
+ struct
+ div_eq_ms_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==2 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)/=b;
+ mat_traits<A>::template write_element<0,1>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_eq_ms_defined;
+
+ template <>
+ struct
+ div_eq_ms_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<R>::rows==2 && mat_traits<A>::rows==2 &&
+ mat_traits<R>::cols==2 && mat_traits<A>::cols==2,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
+ mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
+ mat_traits<R>::template write_element<1,1>(r) = mat_traits<A>::template read_element<1,1>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct convert_to_m_defined;
+
+ template <>
+ struct
+ convert_to_m_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<R>::rows==2 && mat_traits<A>::rows==2 &&
+ mat_traits<R>::cols==1 && mat_traits<A>::cols==1,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct convert_to_m_defined;
+
+ template <>
+ struct
+ convert_to_m_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<R>::rows==1 && mat_traits<A>::rows==1 &&
+ mat_traits<R>::cols==2 && mat_traits<A>::cols==2,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct convert_to_m_defined;
+
+ template <>
+ struct
+ convert_to_m_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
+ mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b) &&
+ mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b) &&
+ mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct eq_mm_defined;
+
+ template <>
+ struct
+ eq_mm_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
+ mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct eq_mm_defined;
+
+ template <>
+ struct
+ eq_mm_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
+ mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct eq_mm_defined;
+
+ template <>
+ struct
+ eq_mm_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
+ !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b)) ||
+ !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b)) ||
+ !(mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct neq_mm_defined;
+
+ template <>
+ struct
+ neq_mm_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
+ !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct neq_mm_defined;
+
+ template <>
+ struct
+ neq_mm_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
+ !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct neq_mm_defined;
+
+ template <>
+ struct
+ neq_mm_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==2,
+ deduce_mat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
+ mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
+ mat_traits<R>::template write_element<1,1>(r)=-mat_traits<A>::template read_element<1,1>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_m_defined;
+
+ template <>
+ struct
+ minus_m_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==1,
+ deduce_mat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_m_defined;
+
+ template <>
+ struct
+ minus_m_defined<2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==2,
+ deduce_mat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_m_defined;
+
+ template <>
+ struct
+ minus_m_defined<1,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==2,
+ typename mat_traits<A>::scalar_type>::type
+ determinant( A const & a )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ T const a00=mat_traits<A>::template read_element<0,0>(a);
+ T const a01=mat_traits<A>::template read_element<0,1>(a);
+ T const a10=mat_traits<A>::template read_element<1,0>(a);
+ T const a11=mat_traits<A>::template read_element<1,1>(a);
+ T det=(a00*a11-a01*a10);
+ return det;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::determinant;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct determinant_defined;
+
+ template <>
+ struct
+ determinant_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==2 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ inverse( A const & a, B det )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ BOOST_QVM_ASSERT(det!=scalar_traits<B>::value(0));
+ T const a00=mat_traits<A>::template read_element<0,0>(a);
+ T const a01=mat_traits<A>::template read_element<0,1>(a);
+ T const a10=mat_traits<A>::template read_element<1,0>(a);
+ T const a11=mat_traits<A>::template read_element<1,1>(a);
+ T const f=scalar_traits<T>::value(1)/det;
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)= f*a11;
+ mat_traits<R>::template write_element<0,1>(r)=-f*a01;
+ mat_traits<R>::template write_element<1,0>(r)=-f*a10;
+ mat_traits<R>::template write_element<1,1>(r)= f*a00;
+ return r;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==2,
+ deduce_mat<A> >::type
+ inverse( A const & a )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ T det=determinant(a);
+ if( det==scalar_traits<T>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_determinant_error());
+ return inverse(a,det);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::inverse;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct inverse_m_defined;
+
+ template <>
+ struct
+ inverse_m_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ deduce_mat2<A,B,2,2> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ typedef typename deduce_mat2<A,B,2,2>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10;
+ mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11;
+ mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10;
+ mat_traits<R>::template write_element<1,1>(r)=a10*b01+a11*b11;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int CR,int C>
+ struct mul_mm_defined;
+
+ template <>
+ struct
+ mul_mm_defined<2,2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ A &>::type
+ operator*=( A & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<A>::template write_element<0,0>(a)=a00*b00+a01*b10;
+ mat_traits<A>::template write_element<0,1>(a)=a00*b01+a01*b11;
+ mat_traits<A>::template write_element<1,0>(a)=a10*b00+a11*b10;
+ mat_traits<A>::template write_element<1,1>(a)=a10*b01+a11*b11;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_eq_mm_defined;
+
+ template <>
+ struct
+ mul_eq_mm_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==1,
+ deduce_mat2<A,B,2,1> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ typedef typename deduce_mat2<A,B,2,1>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==2);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10;
+ mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int CR,int C>
+ struct mul_mm_defined;
+
+ template <>
+ struct
+ mul_mm_defined<2,2,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==2 &&
+ mat_traits<A>::cols==2 && mat_traits<B>::cols==2,
+ deduce_mat2<A,B,1,2> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ typedef typename deduce_mat2<A,B,1,2>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==2);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10;
+ mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int CR,int C>
+ struct mul_mm_defined;
+
+ template <>
+ struct
+ mul_mm_defined<1,2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/mat_operations3.hpp b/contrib/restricted/boost/boost/qvm/gen/mat_operations3.hpp
index 607ad22bd3..31cf755dab 100644
--- a/contrib/restricted/boost/boost/qvm/gen/mat_operations3.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/mat_operations3.hpp
@@ -1,1915 +1,1915 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_B3A6DB3C87C3E99245ED1C6B747DE
-#define BOOST_QVM_B3A6DB3C87C3E99245ED1C6B747DE
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/deduce_mat.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/error.hpp>
-#include <boost/qvm/gen/mat_assign3.hpp>
-#include <boost/qvm/quat_traits.hpp>
-#include <boost/qvm/scalar_traits.hpp>
-#include <boost/qvm/throw_exception.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- deduce_mat2<A,B,3,3> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,3,3>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)+mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)+mat_traits<B>::template read_element<1,1>(b);
- mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)+mat_traits<B>::template read_element<1,2>(b);
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)+mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)+mat_traits<B>::template read_element<2,1>(b);
- mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)+mat_traits<B>::template read_element<2,2>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_mm_defined;
-
- template <>
- struct
- plus_mm_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- deduce_mat2<A,B,3,1> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,3,1>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)+mat_traits<B>::template read_element<2,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_mm_defined;
-
- template <>
- struct
- plus_mm_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- deduce_mat2<A,B,1,3> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,1,3>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)+mat_traits<B>::template read_element<0,2>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_mm_defined;
-
- template <>
- struct
- plus_mm_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- deduce_mat2<A,B,3,3> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,3,3>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)-mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)-mat_traits<B>::template read_element<1,1>(b);
- mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)-mat_traits<B>::template read_element<1,2>(b);
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)-mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)-mat_traits<B>::template read_element<2,1>(b);
- mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)-mat_traits<B>::template read_element<2,2>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_mm_defined;
-
- template <>
- struct
- minus_mm_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- deduce_mat2<A,B,3,1> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,3,1>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)-mat_traits<B>::template read_element<2,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_mm_defined;
-
- template <>
- struct
- minus_mm_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- deduce_mat2<A,B,1,3> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,1,3>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)-mat_traits<B>::template read_element<0,2>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_mm_defined;
-
- template <>
- struct
- minus_mm_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- A &>::type
- operator+=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)+=mat_traits<B>::template read_element<0,2>(b);
- mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<1,1>(a)+=mat_traits<B>::template read_element<1,1>(b);
- mat_traits<A>::template write_element<1,2>(a)+=mat_traits<B>::template read_element<1,2>(b);
- mat_traits<A>::template write_element<2,0>(a)+=mat_traits<B>::template read_element<2,0>(b);
- mat_traits<A>::template write_element<2,1>(a)+=mat_traits<B>::template read_element<2,1>(b);
- mat_traits<A>::template write_element<2,2>(a)+=mat_traits<B>::template read_element<2,2>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_eq_mm_defined;
-
- template <>
- struct
- plus_eq_mm_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- A &>::type
- operator+=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<2,0>(a)+=mat_traits<B>::template read_element<2,0>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_eq_mm_defined;
-
- template <>
- struct
- plus_eq_mm_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- A &>::type
- operator+=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)+=mat_traits<B>::template read_element<0,2>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_eq_mm_defined;
-
- template <>
- struct
- plus_eq_mm_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- A &>::type
- operator-=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)-=mat_traits<B>::template read_element<0,2>(b);
- mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<1,1>(a)-=mat_traits<B>::template read_element<1,1>(b);
- mat_traits<A>::template write_element<1,2>(a)-=mat_traits<B>::template read_element<1,2>(b);
- mat_traits<A>::template write_element<2,0>(a)-=mat_traits<B>::template read_element<2,0>(b);
- mat_traits<A>::template write_element<2,1>(a)-=mat_traits<B>::template read_element<2,1>(b);
- mat_traits<A>::template write_element<2,2>(a)-=mat_traits<B>::template read_element<2,2>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_eq_mm_defined;
-
- template <>
- struct
- minus_eq_mm_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- A &>::type
- operator-=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<2,0>(a)-=mat_traits<B>::template read_element<2,0>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_eq_mm_defined;
-
- template <>
- struct
- minus_eq_mm_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- A &>::type
- operator-=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)-=mat_traits<B>::template read_element<0,2>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_eq_mm_defined;
-
- template <>
- struct
- minus_eq_mm_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==3 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)*b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)*b;
- mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)*b;
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)*b;
- mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)*b;
- mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_ms_defined;
-
- template <>
- struct
- mul_ms_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==3 && mat_traits<B>::cols==3,
- deduce_mat<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=a*mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=a*mat_traits<B>::template read_element<1,1>(b);
- mat_traits<R>::template write_element<1,2>(r)=a*mat_traits<B>::template read_element<1,2>(b);
- mat_traits<R>::template write_element<2,0>(r)=a*mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<2,1>(r)=a*mat_traits<B>::template read_element<2,1>(b);
- mat_traits<R>::template write_element<2,2>(r)=a*mat_traits<B>::template read_element<2,2>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_sm_defined;
-
- template <>
- struct
- mul_sm_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_ms_defined;
-
- template <>
- struct
- mul_ms_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==3 && mat_traits<B>::cols==1,
- deduce_mat<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<2,0>(r)=a*mat_traits<B>::template read_element<2,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_sm_defined;
-
- template <>
- struct
- mul_sm_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==3 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_ms_defined;
-
- template <>
- struct
- mul_ms_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==1 && mat_traits<B>::cols==3,
- deduce_mat<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=a*mat_traits<B>::template read_element<0,2>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_sm_defined;
-
- template <>
- struct
- mul_sm_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==3 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)*=b;
- mat_traits<A>::template write_element<0,1>(a)*=b;
- mat_traits<A>::template write_element<0,2>(a)*=b;
- mat_traits<A>::template write_element<1,0>(a)*=b;
- mat_traits<A>::template write_element<1,1>(a)*=b;
- mat_traits<A>::template write_element<1,2>(a)*=b;
- mat_traits<A>::template write_element<2,0>(a)*=b;
- mat_traits<A>::template write_element<2,1>(a)*=b;
- mat_traits<A>::template write_element<2,2>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_eq_ms_defined;
-
- template <>
- struct
- mul_eq_ms_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)*=b;
- mat_traits<A>::template write_element<1,0>(a)*=b;
- mat_traits<A>::template write_element<2,0>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_eq_ms_defined;
-
- template <>
- struct
- mul_eq_ms_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==3 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)*=b;
- mat_traits<A>::template write_element<0,1>(a)*=b;
- mat_traits<A>::template write_element<0,2>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_eq_ms_defined;
-
- template <>
- struct
- mul_eq_ms_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==3 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)/b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)/b;
- mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)/b;
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)/b;
- mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)/b;
- mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_ms_defined;
-
- template <>
- struct
- div_ms_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==3 && mat_traits<B>::cols==3,
- deduce_mat<B> >::type
- operator/( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=a/mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=a/mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=a/mat_traits<B>::template read_element<1,1>(b);
- mat_traits<R>::template write_element<1,2>(r)=a/mat_traits<B>::template read_element<1,2>(b);
- mat_traits<R>::template write_element<2,0>(r)=a/mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<2,1>(r)=a/mat_traits<B>::template read_element<2,1>(b);
- mat_traits<R>::template write_element<2,2>(r)=a/mat_traits<B>::template read_element<2,2>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_sm_defined;
-
- template <>
- struct
- div_sm_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_ms_defined;
-
- template <>
- struct
- div_ms_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==3 && mat_traits<B>::cols==1,
- deduce_mat<B> >::type
- operator/( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<2,0>(r)=a/mat_traits<B>::template read_element<2,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_sm_defined;
-
- template <>
- struct
- div_sm_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==3 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_ms_defined;
-
- template <>
- struct
- div_ms_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==3 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)/=b;
- mat_traits<A>::template write_element<0,1>(a)/=b;
- mat_traits<A>::template write_element<0,2>(a)/=b;
- mat_traits<A>::template write_element<1,0>(a)/=b;
- mat_traits<A>::template write_element<1,1>(a)/=b;
- mat_traits<A>::template write_element<1,2>(a)/=b;
- mat_traits<A>::template write_element<2,0>(a)/=b;
- mat_traits<A>::template write_element<2,1>(a)/=b;
- mat_traits<A>::template write_element<2,2>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_eq_ms_defined;
-
- template <>
- struct
- div_eq_ms_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)/=b;
- mat_traits<A>::template write_element<1,0>(a)/=b;
- mat_traits<A>::template write_element<2,0>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_eq_ms_defined;
-
- template <>
- struct
- div_eq_ms_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==3 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)/=b;
- mat_traits<A>::template write_element<0,1>(a)/=b;
- mat_traits<A>::template write_element<0,2>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_eq_ms_defined;
-
- template <>
- struct
- div_eq_ms_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<R>::rows==3 && mat_traits<A>::rows==3 &&
- mat_traits<R>::cols==3 && mat_traits<A>::cols==3,
- R>::type
- convert_to( A const & a )
- {
- R r;
- mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
- mat_traits<R>::template write_element<0,2>(r) = mat_traits<A>::template read_element<0,2>(a);
- mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
- mat_traits<R>::template write_element<1,1>(r) = mat_traits<A>::template read_element<1,1>(a);
- mat_traits<R>::template write_element<1,2>(r) = mat_traits<A>::template read_element<1,2>(a);
- mat_traits<R>::template write_element<2,0>(r) = mat_traits<A>::template read_element<2,0>(a);
- mat_traits<R>::template write_element<2,1>(r) = mat_traits<A>::template read_element<2,1>(a);
- mat_traits<R>::template write_element<2,2>(r) = mat_traits<A>::template read_element<2,2>(a);
- return r;
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE
- typename enable_if_c<
- is_mat<R>::value && is_quat<A>::value &&
- mat_traits<R>::rows==3 && mat_traits<R>::cols==3,
- R>::type
- convert_to( A const & q )
- {
- typedef typename mat_traits<R>::scalar_type T;
- T const a=quat_traits<A>::template read_element<0>(q);
- T const b=quat_traits<A>::template read_element<1>(q);
- T const c=quat_traits<A>::template read_element<2>(q);
- T const d=quat_traits<A>::template read_element<3>(q);
- T const bb = b*b;
- T const cc = c*c;
- T const dd = d*d;
- T const bc = b*c;
- T const bd = b*d;
- T const cd = c*d;
- T const ab = a*b;
- T const ac = a*c;
- T const ad = a*d;
- T const one = scalar_traits<T>::value(1);
- T const two = one+one;
- R r;
- mat_traits<R>::template write_element<0,0>(r) = one - two*(cc+dd);
- mat_traits<R>::template write_element<0,1>(r) = two*(bc-ad);
- mat_traits<R>::template write_element<0,2>(r) = two*(bd+ac);
- mat_traits<R>::template write_element<1,0>(r) = two*(bc+ad);
- mat_traits<R>::template write_element<1,1>(r) = one - two*(bb+dd);
- mat_traits<R>::template write_element<1,2>(r) = two*(cd-ab);
- mat_traits<R>::template write_element<2,0>(r) = two*(bd-ac);
- mat_traits<R>::template write_element<2,1>(r) = two*(cd+ab);
- mat_traits<R>::template write_element<2,2>(r) = one - two*(bb+cc);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct convert_to_m_defined;
-
- template <>
- struct
- convert_to_m_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<R>::rows==3 && mat_traits<A>::rows==3 &&
- mat_traits<R>::cols==1 && mat_traits<A>::cols==1,
- R>::type
- convert_to( A const & a )
- {
- R r;
- mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
- mat_traits<R>::template write_element<2,0>(r) = mat_traits<A>::template read_element<2,0>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct convert_to_m_defined;
-
- template <>
- struct
- convert_to_m_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<R>::rows==1 && mat_traits<A>::rows==1 &&
- mat_traits<R>::cols==3 && mat_traits<A>::cols==3,
- R>::type
- convert_to( A const & a )
- {
- R r;
- mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
- mat_traits<R>::template write_element<0,2>(r) = mat_traits<A>::template read_element<0,2>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct convert_to_m_defined;
-
- template <>
- struct
- convert_to_m_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
- mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b) &&
- mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b) &&
- mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b) &&
- mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b) &&
- mat_traits<A>::template read_element<1,2>(a)==mat_traits<B>::template read_element<1,2>(b) &&
- mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b) &&
- mat_traits<A>::template read_element<2,1>(a)==mat_traits<B>::template read_element<2,1>(b) &&
- mat_traits<A>::template read_element<2,2>(a)==mat_traits<B>::template read_element<2,2>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct eq_mm_defined;
-
- template <>
- struct
- eq_mm_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
- mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b) &&
- mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct eq_mm_defined;
-
- template <>
- struct
- eq_mm_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
- mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b) &&
- mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct eq_mm_defined;
-
- template <>
- struct
- eq_mm_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
- !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b)) ||
- !(mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b)) ||
- !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b)) ||
- !(mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b)) ||
- !(mat_traits<A>::template read_element<1,2>(a)==mat_traits<B>::template read_element<1,2>(b)) ||
- !(mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b)) ||
- !(mat_traits<A>::template read_element<2,1>(a)==mat_traits<B>::template read_element<2,1>(b)) ||
- !(mat_traits<A>::template read_element<2,2>(a)==mat_traits<B>::template read_element<2,2>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct neq_mm_defined;
-
- template <>
- struct
- neq_mm_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
- !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b)) ||
- !(mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct neq_mm_defined;
-
- template <>
- struct
- neq_mm_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
- !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b)) ||
- !(mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct neq_mm_defined;
-
- template <>
- struct
- neq_mm_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==3,
- deduce_mat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
- mat_traits<R>::template write_element<0,2>(r)=-mat_traits<A>::template read_element<0,2>(a);
- mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
- mat_traits<R>::template write_element<1,1>(r)=-mat_traits<A>::template read_element<1,1>(a);
- mat_traits<R>::template write_element<1,2>(r)=-mat_traits<A>::template read_element<1,2>(a);
- mat_traits<R>::template write_element<2,0>(r)=-mat_traits<A>::template read_element<2,0>(a);
- mat_traits<R>::template write_element<2,1>(r)=-mat_traits<A>::template read_element<2,1>(a);
- mat_traits<R>::template write_element<2,2>(r)=-mat_traits<A>::template read_element<2,2>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_m_defined;
-
- template <>
- struct
- minus_m_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==1,
- deduce_mat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
- mat_traits<R>::template write_element<2,0>(r)=-mat_traits<A>::template read_element<2,0>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_m_defined;
-
- template <>
- struct
- minus_m_defined<3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==3,
- deduce_mat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
- mat_traits<R>::template write_element<0,2>(r)=-mat_traits<A>::template read_element<0,2>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_m_defined;
-
- template <>
- struct
- minus_m_defined<1,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==3,
- typename mat_traits<A>::scalar_type>::type
- determinant( A const & a )
- {
- typedef typename mat_traits<A>::scalar_type T;
- T const a00=mat_traits<A>::template read_element<0,0>(a);
- T const a01=mat_traits<A>::template read_element<0,1>(a);
- T const a02=mat_traits<A>::template read_element<0,2>(a);
- T const a10=mat_traits<A>::template read_element<1,0>(a);
- T const a11=mat_traits<A>::template read_element<1,1>(a);
- T const a12=mat_traits<A>::template read_element<1,2>(a);
- T const a20=mat_traits<A>::template read_element<2,0>(a);
- T const a21=mat_traits<A>::template read_element<2,1>(a);
- T const a22=mat_traits<A>::template read_element<2,2>(a);
- T det=(a00*(a11*a22-a12*a21)-a01*(a10*a22-a12*a20)+a02*(a10*a21-a11*a20));
- return det;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::determinant;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct determinant_defined;
-
- template <>
- struct
- determinant_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==3 && is_scalar<B>::value,
- deduce_mat<A> >::type
- inverse( A const & a, B det )
- {
- typedef typename mat_traits<A>::scalar_type T;
- BOOST_QVM_ASSERT(det!=scalar_traits<B>::value(0));
- T const a00=mat_traits<A>::template read_element<0,0>(a);
- T const a01=mat_traits<A>::template read_element<0,1>(a);
- T const a02=mat_traits<A>::template read_element<0,2>(a);
- T const a10=mat_traits<A>::template read_element<1,0>(a);
- T const a11=mat_traits<A>::template read_element<1,1>(a);
- T const a12=mat_traits<A>::template read_element<1,2>(a);
- T const a20=mat_traits<A>::template read_element<2,0>(a);
- T const a21=mat_traits<A>::template read_element<2,1>(a);
- T const a22=mat_traits<A>::template read_element<2,2>(a);
- T const f=scalar_traits<T>::value(1)/det;
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)= f*(a11*a22-a12*a21);
- mat_traits<R>::template write_element<0,1>(r)=-f*(a01*a22-a02*a21);
- mat_traits<R>::template write_element<0,2>(r)= f*(a01*a12-a02*a11);
- mat_traits<R>::template write_element<1,0>(r)=-f*(a10*a22-a12*a20);
- mat_traits<R>::template write_element<1,1>(r)= f*(a00*a22-a02*a20);
- mat_traits<R>::template write_element<1,2>(r)=-f*(a00*a12-a02*a10);
- mat_traits<R>::template write_element<2,0>(r)= f*(a10*a21-a11*a20);
- mat_traits<R>::template write_element<2,1>(r)=-f*(a00*a21-a01*a20);
- mat_traits<R>::template write_element<2,2>(r)= f*(a00*a11-a01*a10);
- return r;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==3,
- deduce_mat<A> >::type
- inverse( A const & a )
- {
- typedef typename mat_traits<A>::scalar_type T;
- T det=determinant(a);
- if( det==scalar_traits<T>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_determinant_error());
- return inverse(a,det);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::inverse;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct inverse_m_defined;
-
- template <>
- struct
- inverse_m_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- deduce_mat2<A,B,3,3> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
- Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
- Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
- Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
- Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
- Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
- Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
- typedef typename deduce_mat2<A,B,3,3>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20;
- mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11+a02*b21;
- mat_traits<R>::template write_element<0,2>(r)=a00*b02+a01*b12+a02*b22;
- mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10+a12*b20;
- mat_traits<R>::template write_element<1,1>(r)=a10*b01+a11*b11+a12*b21;
- mat_traits<R>::template write_element<1,2>(r)=a10*b02+a11*b12+a12*b22;
- mat_traits<R>::template write_element<2,0>(r)=a20*b00+a21*b10+a22*b20;
- mat_traits<R>::template write_element<2,1>(r)=a20*b01+a21*b11+a22*b21;
- mat_traits<R>::template write_element<2,2>(r)=a20*b02+a21*b12+a22*b22;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int CR,int C>
- struct mul_mm_defined;
-
- template <>
- struct
- mul_mm_defined<3,3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- A &>::type
- operator*=( A & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
- Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
- Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
- Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
- Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
- Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
- Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
- mat_traits<A>::template write_element<0,0>(a)=a00*b00+a01*b10+a02*b20;
- mat_traits<A>::template write_element<0,1>(a)=a00*b01+a01*b11+a02*b21;
- mat_traits<A>::template write_element<0,2>(a)=a00*b02+a01*b12+a02*b22;
- mat_traits<A>::template write_element<1,0>(a)=a10*b00+a11*b10+a12*b20;
- mat_traits<A>::template write_element<1,1>(a)=a10*b01+a11*b11+a12*b21;
- mat_traits<A>::template write_element<1,2>(a)=a10*b02+a11*b12+a12*b22;
- mat_traits<A>::template write_element<2,0>(a)=a20*b00+a21*b10+a22*b20;
- mat_traits<A>::template write_element<2,1>(a)=a20*b01+a21*b11+a22*b21;
- mat_traits<A>::template write_element<2,2>(a)=a20*b02+a21*b12+a22*b22;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_eq_mm_defined;
-
- template <>
- struct
- mul_eq_mm_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==1,
- deduce_mat2<A,B,3,1> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
- Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
- Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
- Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
- typedef typename deduce_mat2<A,B,3,1>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20;
- mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10+a12*b20;
- mat_traits<R>::template write_element<2,0>(r)=a20*b00+a21*b10+a22*b20;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int CR,int C>
- struct mul_mm_defined;
-
- template <>
- struct
- mul_mm_defined<3,3,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==3 &&
- mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
- deduce_mat2<A,B,1,3> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
- Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
- Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
- Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
- typedef typename deduce_mat2<A,B,1,3>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20;
- mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11+a02*b21;
- mat_traits<R>::template write_element<0,2>(r)=a00*b02+a01*b12+a02*b22;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int CR,int C>
- struct mul_mm_defined;
-
- template <>
- struct
- mul_mm_defined<1,3,3>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_B3A6DB3C87C3E99245ED1C6B747DE
+#define BOOST_QVM_B3A6DB3C87C3E99245ED1C6B747DE
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/deduce_mat.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/error.hpp>
+#include <boost/qvm/gen/mat_assign3.hpp>
+#include <boost/qvm/quat_traits.hpp>
+#include <boost/qvm/scalar_traits.hpp>
+#include <boost/qvm/throw_exception.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ deduce_mat2<A,B,3,3> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,3,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)+mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)+mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)+mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)+mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)+mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)+mat_traits<B>::template read_element<2,2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_mm_defined;
+
+ template <>
+ struct
+ plus_mm_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ deduce_mat2<A,B,3,1> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,3,1>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)+mat_traits<B>::template read_element<2,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_mm_defined;
+
+ template <>
+ struct
+ plus_mm_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ deduce_mat2<A,B,1,3> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,1,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)+mat_traits<B>::template read_element<0,2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_mm_defined;
+
+ template <>
+ struct
+ plus_mm_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ deduce_mat2<A,B,3,3> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,3,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)-mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)-mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)-mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)-mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)-mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)-mat_traits<B>::template read_element<2,2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_mm_defined;
+
+ template <>
+ struct
+ minus_mm_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ deduce_mat2<A,B,3,1> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,3,1>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)-mat_traits<B>::template read_element<2,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_mm_defined;
+
+ template <>
+ struct
+ minus_mm_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ deduce_mat2<A,B,1,3> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,1,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)-mat_traits<B>::template read_element<0,2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_mm_defined;
+
+ template <>
+ struct
+ minus_mm_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)+=mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<1,1>(a)+=mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<A>::template write_element<1,2>(a)+=mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<A>::template write_element<2,0>(a)+=mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<A>::template write_element<2,1>(a)+=mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<A>::template write_element<2,2>(a)+=mat_traits<B>::template read_element<2,2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_eq_mm_defined;
+
+ template <>
+ struct
+ plus_eq_mm_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<2,0>(a)+=mat_traits<B>::template read_element<2,0>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_eq_mm_defined;
+
+ template <>
+ struct
+ plus_eq_mm_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)+=mat_traits<B>::template read_element<0,2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_eq_mm_defined;
+
+ template <>
+ struct
+ plus_eq_mm_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)-=mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<1,1>(a)-=mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<A>::template write_element<1,2>(a)-=mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<A>::template write_element<2,0>(a)-=mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<A>::template write_element<2,1>(a)-=mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<A>::template write_element<2,2>(a)-=mat_traits<B>::template read_element<2,2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_eq_mm_defined;
+
+ template <>
+ struct
+ minus_eq_mm_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<2,0>(a)-=mat_traits<B>::template read_element<2,0>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_eq_mm_defined;
+
+ template <>
+ struct
+ minus_eq_mm_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)-=mat_traits<B>::template read_element<0,2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_eq_mm_defined;
+
+ template <>
+ struct
+ minus_eq_mm_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==3 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)*b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)*b;
+ mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)*b;
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)*b;
+ mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)*b;
+ mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_ms_defined;
+
+ template <>
+ struct
+ mul_ms_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==3 && mat_traits<B>::cols==3,
+ deduce_mat<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=a*mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=a*mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<R>::template write_element<1,2>(r)=a*mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<R>::template write_element<2,0>(r)=a*mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<2,1>(r)=a*mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<R>::template write_element<2,2>(r)=a*mat_traits<B>::template read_element<2,2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_sm_defined;
+
+ template <>
+ struct
+ mul_sm_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_ms_defined;
+
+ template <>
+ struct
+ mul_ms_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==3 && mat_traits<B>::cols==1,
+ deduce_mat<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<2,0>(r)=a*mat_traits<B>::template read_element<2,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_sm_defined;
+
+ template <>
+ struct
+ mul_sm_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==3 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_ms_defined;
+
+ template <>
+ struct
+ mul_ms_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==1 && mat_traits<B>::cols==3,
+ deduce_mat<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=a*mat_traits<B>::template read_element<0,2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_sm_defined;
+
+ template <>
+ struct
+ mul_sm_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==3 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)*=b;
+ mat_traits<A>::template write_element<0,1>(a)*=b;
+ mat_traits<A>::template write_element<0,2>(a)*=b;
+ mat_traits<A>::template write_element<1,0>(a)*=b;
+ mat_traits<A>::template write_element<1,1>(a)*=b;
+ mat_traits<A>::template write_element<1,2>(a)*=b;
+ mat_traits<A>::template write_element<2,0>(a)*=b;
+ mat_traits<A>::template write_element<2,1>(a)*=b;
+ mat_traits<A>::template write_element<2,2>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_eq_ms_defined;
+
+ template <>
+ struct
+ mul_eq_ms_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)*=b;
+ mat_traits<A>::template write_element<1,0>(a)*=b;
+ mat_traits<A>::template write_element<2,0>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_eq_ms_defined;
+
+ template <>
+ struct
+ mul_eq_ms_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==3 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)*=b;
+ mat_traits<A>::template write_element<0,1>(a)*=b;
+ mat_traits<A>::template write_element<0,2>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_eq_ms_defined;
+
+ template <>
+ struct
+ mul_eq_ms_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==3 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)/b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)/b;
+ mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)/b;
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)/b;
+ mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)/b;
+ mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_ms_defined;
+
+ template <>
+ struct
+ div_ms_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==3 && mat_traits<B>::cols==3,
+ deduce_mat<B> >::type
+ operator/( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=a/mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=a/mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=a/mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<R>::template write_element<1,2>(r)=a/mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<R>::template write_element<2,0>(r)=a/mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<2,1>(r)=a/mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<R>::template write_element<2,2>(r)=a/mat_traits<B>::template read_element<2,2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_sm_defined;
+
+ template <>
+ struct
+ div_sm_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_ms_defined;
+
+ template <>
+ struct
+ div_ms_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==3 && mat_traits<B>::cols==1,
+ deduce_mat<B> >::type
+ operator/( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<2,0>(r)=a/mat_traits<B>::template read_element<2,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_sm_defined;
+
+ template <>
+ struct
+ div_sm_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==3 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_ms_defined;
+
+ template <>
+ struct
+ div_ms_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==3 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)/=b;
+ mat_traits<A>::template write_element<0,1>(a)/=b;
+ mat_traits<A>::template write_element<0,2>(a)/=b;
+ mat_traits<A>::template write_element<1,0>(a)/=b;
+ mat_traits<A>::template write_element<1,1>(a)/=b;
+ mat_traits<A>::template write_element<1,2>(a)/=b;
+ mat_traits<A>::template write_element<2,0>(a)/=b;
+ mat_traits<A>::template write_element<2,1>(a)/=b;
+ mat_traits<A>::template write_element<2,2>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_eq_ms_defined;
+
+ template <>
+ struct
+ div_eq_ms_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)/=b;
+ mat_traits<A>::template write_element<1,0>(a)/=b;
+ mat_traits<A>::template write_element<2,0>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_eq_ms_defined;
+
+ template <>
+ struct
+ div_eq_ms_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==3 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)/=b;
+ mat_traits<A>::template write_element<0,1>(a)/=b;
+ mat_traits<A>::template write_element<0,2>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_eq_ms_defined;
+
+ template <>
+ struct
+ div_eq_ms_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<R>::rows==3 && mat_traits<A>::rows==3 &&
+ mat_traits<R>::cols==3 && mat_traits<A>::cols==3,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
+ mat_traits<R>::template write_element<0,2>(r) = mat_traits<A>::template read_element<0,2>(a);
+ mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
+ mat_traits<R>::template write_element<1,1>(r) = mat_traits<A>::template read_element<1,1>(a);
+ mat_traits<R>::template write_element<1,2>(r) = mat_traits<A>::template read_element<1,2>(a);
+ mat_traits<R>::template write_element<2,0>(r) = mat_traits<A>::template read_element<2,0>(a);
+ mat_traits<R>::template write_element<2,1>(r) = mat_traits<A>::template read_element<2,1>(a);
+ mat_traits<R>::template write_element<2,2>(r) = mat_traits<A>::template read_element<2,2>(a);
+ return r;
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE
+ typename enable_if_c<
+ is_mat<R>::value && is_quat<A>::value &&
+ mat_traits<R>::rows==3 && mat_traits<R>::cols==3,
+ R>::type
+ convert_to( A const & q )
+ {
+ typedef typename mat_traits<R>::scalar_type T;
+ T const a=quat_traits<A>::template read_element<0>(q);
+ T const b=quat_traits<A>::template read_element<1>(q);
+ T const c=quat_traits<A>::template read_element<2>(q);
+ T const d=quat_traits<A>::template read_element<3>(q);
+ T const bb = b*b;
+ T const cc = c*c;
+ T const dd = d*d;
+ T const bc = b*c;
+ T const bd = b*d;
+ T const cd = c*d;
+ T const ab = a*b;
+ T const ac = a*c;
+ T const ad = a*d;
+ T const one = scalar_traits<T>::value(1);
+ T const two = one+one;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = one - two*(cc+dd);
+ mat_traits<R>::template write_element<0,1>(r) = two*(bc-ad);
+ mat_traits<R>::template write_element<0,2>(r) = two*(bd+ac);
+ mat_traits<R>::template write_element<1,0>(r) = two*(bc+ad);
+ mat_traits<R>::template write_element<1,1>(r) = one - two*(bb+dd);
+ mat_traits<R>::template write_element<1,2>(r) = two*(cd-ab);
+ mat_traits<R>::template write_element<2,0>(r) = two*(bd-ac);
+ mat_traits<R>::template write_element<2,1>(r) = two*(cd+ab);
+ mat_traits<R>::template write_element<2,2>(r) = one - two*(bb+cc);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct convert_to_m_defined;
+
+ template <>
+ struct
+ convert_to_m_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<R>::rows==3 && mat_traits<A>::rows==3 &&
+ mat_traits<R>::cols==1 && mat_traits<A>::cols==1,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
+ mat_traits<R>::template write_element<2,0>(r) = mat_traits<A>::template read_element<2,0>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct convert_to_m_defined;
+
+ template <>
+ struct
+ convert_to_m_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<R>::rows==1 && mat_traits<A>::rows==1 &&
+ mat_traits<R>::cols==3 && mat_traits<A>::cols==3,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
+ mat_traits<R>::template write_element<0,2>(r) = mat_traits<A>::template read_element<0,2>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct convert_to_m_defined;
+
+ template <>
+ struct
+ convert_to_m_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
+ mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b) &&
+ mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b) &&
+ mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b) &&
+ mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b) &&
+ mat_traits<A>::template read_element<1,2>(a)==mat_traits<B>::template read_element<1,2>(b) &&
+ mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b) &&
+ mat_traits<A>::template read_element<2,1>(a)==mat_traits<B>::template read_element<2,1>(b) &&
+ mat_traits<A>::template read_element<2,2>(a)==mat_traits<B>::template read_element<2,2>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct eq_mm_defined;
+
+ template <>
+ struct
+ eq_mm_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
+ mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b) &&
+ mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct eq_mm_defined;
+
+ template <>
+ struct
+ eq_mm_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
+ mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b) &&
+ mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct eq_mm_defined;
+
+ template <>
+ struct
+ eq_mm_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
+ !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b)) ||
+ !(mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b)) ||
+ !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b)) ||
+ !(mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b)) ||
+ !(mat_traits<A>::template read_element<1,2>(a)==mat_traits<B>::template read_element<1,2>(b)) ||
+ !(mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b)) ||
+ !(mat_traits<A>::template read_element<2,1>(a)==mat_traits<B>::template read_element<2,1>(b)) ||
+ !(mat_traits<A>::template read_element<2,2>(a)==mat_traits<B>::template read_element<2,2>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct neq_mm_defined;
+
+ template <>
+ struct
+ neq_mm_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
+ !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b)) ||
+ !(mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct neq_mm_defined;
+
+ template <>
+ struct
+ neq_mm_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
+ !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b)) ||
+ !(mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct neq_mm_defined;
+
+ template <>
+ struct
+ neq_mm_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==3,
+ deduce_mat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
+ mat_traits<R>::template write_element<0,2>(r)=-mat_traits<A>::template read_element<0,2>(a);
+ mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
+ mat_traits<R>::template write_element<1,1>(r)=-mat_traits<A>::template read_element<1,1>(a);
+ mat_traits<R>::template write_element<1,2>(r)=-mat_traits<A>::template read_element<1,2>(a);
+ mat_traits<R>::template write_element<2,0>(r)=-mat_traits<A>::template read_element<2,0>(a);
+ mat_traits<R>::template write_element<2,1>(r)=-mat_traits<A>::template read_element<2,1>(a);
+ mat_traits<R>::template write_element<2,2>(r)=-mat_traits<A>::template read_element<2,2>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_m_defined;
+
+ template <>
+ struct
+ minus_m_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==1,
+ deduce_mat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
+ mat_traits<R>::template write_element<2,0>(r)=-mat_traits<A>::template read_element<2,0>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_m_defined;
+
+ template <>
+ struct
+ minus_m_defined<3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==3,
+ deduce_mat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
+ mat_traits<R>::template write_element<0,2>(r)=-mat_traits<A>::template read_element<0,2>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_m_defined;
+
+ template <>
+ struct
+ minus_m_defined<1,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==3,
+ typename mat_traits<A>::scalar_type>::type
+ determinant( A const & a )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ T const a00=mat_traits<A>::template read_element<0,0>(a);
+ T const a01=mat_traits<A>::template read_element<0,1>(a);
+ T const a02=mat_traits<A>::template read_element<0,2>(a);
+ T const a10=mat_traits<A>::template read_element<1,0>(a);
+ T const a11=mat_traits<A>::template read_element<1,1>(a);
+ T const a12=mat_traits<A>::template read_element<1,2>(a);
+ T const a20=mat_traits<A>::template read_element<2,0>(a);
+ T const a21=mat_traits<A>::template read_element<2,1>(a);
+ T const a22=mat_traits<A>::template read_element<2,2>(a);
+ T det=(a00*(a11*a22-a12*a21)-a01*(a10*a22-a12*a20)+a02*(a10*a21-a11*a20));
+ return det;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::determinant;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct determinant_defined;
+
+ template <>
+ struct
+ determinant_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==3 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ inverse( A const & a, B det )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ BOOST_QVM_ASSERT(det!=scalar_traits<B>::value(0));
+ T const a00=mat_traits<A>::template read_element<0,0>(a);
+ T const a01=mat_traits<A>::template read_element<0,1>(a);
+ T const a02=mat_traits<A>::template read_element<0,2>(a);
+ T const a10=mat_traits<A>::template read_element<1,0>(a);
+ T const a11=mat_traits<A>::template read_element<1,1>(a);
+ T const a12=mat_traits<A>::template read_element<1,2>(a);
+ T const a20=mat_traits<A>::template read_element<2,0>(a);
+ T const a21=mat_traits<A>::template read_element<2,1>(a);
+ T const a22=mat_traits<A>::template read_element<2,2>(a);
+ T const f=scalar_traits<T>::value(1)/det;
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)= f*(a11*a22-a12*a21);
+ mat_traits<R>::template write_element<0,1>(r)=-f*(a01*a22-a02*a21);
+ mat_traits<R>::template write_element<0,2>(r)= f*(a01*a12-a02*a11);
+ mat_traits<R>::template write_element<1,0>(r)=-f*(a10*a22-a12*a20);
+ mat_traits<R>::template write_element<1,1>(r)= f*(a00*a22-a02*a20);
+ mat_traits<R>::template write_element<1,2>(r)=-f*(a00*a12-a02*a10);
+ mat_traits<R>::template write_element<2,0>(r)= f*(a10*a21-a11*a20);
+ mat_traits<R>::template write_element<2,1>(r)=-f*(a00*a21-a01*a20);
+ mat_traits<R>::template write_element<2,2>(r)= f*(a00*a11-a01*a10);
+ return r;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==3,
+ deduce_mat<A> >::type
+ inverse( A const & a )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ T det=determinant(a);
+ if( det==scalar_traits<T>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_determinant_error());
+ return inverse(a,det);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::inverse;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct inverse_m_defined;
+
+ template <>
+ struct
+ inverse_m_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ deduce_mat2<A,B,3,3> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
+ Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
+ Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
+ Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
+ Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
+ Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
+ Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
+ typedef typename deduce_mat2<A,B,3,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20;
+ mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11+a02*b21;
+ mat_traits<R>::template write_element<0,2>(r)=a00*b02+a01*b12+a02*b22;
+ mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10+a12*b20;
+ mat_traits<R>::template write_element<1,1>(r)=a10*b01+a11*b11+a12*b21;
+ mat_traits<R>::template write_element<1,2>(r)=a10*b02+a11*b12+a12*b22;
+ mat_traits<R>::template write_element<2,0>(r)=a20*b00+a21*b10+a22*b20;
+ mat_traits<R>::template write_element<2,1>(r)=a20*b01+a21*b11+a22*b21;
+ mat_traits<R>::template write_element<2,2>(r)=a20*b02+a21*b12+a22*b22;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int CR,int C>
+ struct mul_mm_defined;
+
+ template <>
+ struct
+ mul_mm_defined<3,3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ A &>::type
+ operator*=( A & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
+ Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
+ Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
+ Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
+ Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
+ Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
+ Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
+ mat_traits<A>::template write_element<0,0>(a)=a00*b00+a01*b10+a02*b20;
+ mat_traits<A>::template write_element<0,1>(a)=a00*b01+a01*b11+a02*b21;
+ mat_traits<A>::template write_element<0,2>(a)=a00*b02+a01*b12+a02*b22;
+ mat_traits<A>::template write_element<1,0>(a)=a10*b00+a11*b10+a12*b20;
+ mat_traits<A>::template write_element<1,1>(a)=a10*b01+a11*b11+a12*b21;
+ mat_traits<A>::template write_element<1,2>(a)=a10*b02+a11*b12+a12*b22;
+ mat_traits<A>::template write_element<2,0>(a)=a20*b00+a21*b10+a22*b20;
+ mat_traits<A>::template write_element<2,1>(a)=a20*b01+a21*b11+a22*b21;
+ mat_traits<A>::template write_element<2,2>(a)=a20*b02+a21*b12+a22*b22;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_eq_mm_defined;
+
+ template <>
+ struct
+ mul_eq_mm_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==1,
+ deduce_mat2<A,B,3,1> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
+ Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
+ Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
+ Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
+ typedef typename deduce_mat2<A,B,3,1>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==3);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20;
+ mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10+a12*b20;
+ mat_traits<R>::template write_element<2,0>(r)=a20*b00+a21*b10+a22*b20;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int CR,int C>
+ struct mul_mm_defined;
+
+ template <>
+ struct
+ mul_mm_defined<3,3,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==3 &&
+ mat_traits<A>::cols==3 && mat_traits<B>::cols==3,
+ deduce_mat2<A,B,1,3> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
+ Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
+ Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
+ Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
+ typedef typename deduce_mat2<A,B,1,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==3);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20;
+ mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11+a02*b21;
+ mat_traits<R>::template write_element<0,2>(r)=a00*b02+a01*b12+a02*b22;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int CR,int C>
+ struct mul_mm_defined;
+
+ template <>
+ struct
+ mul_mm_defined<1,3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/mat_operations4.hpp b/contrib/restricted/boost/boost/qvm/gen/mat_operations4.hpp
index fcdc1beadf..1c50131461 100644
--- a/contrib/restricted/boost/boost/qvm/gen/mat_operations4.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/mat_operations4.hpp
@@ -1,2129 +1,2129 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_B3124DC843BB8BA61F35A7D938251F
-#define BOOST_QVM_B3124DC843BB8BA61F35A7D938251F
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/deduce_mat.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/error.hpp>
-#include <boost/qvm/gen/mat_assign4.hpp>
-#include <boost/qvm/quat_traits.hpp>
-#include <boost/qvm/scalar_traits.hpp>
-#include <boost/qvm/throw_exception.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- deduce_mat2<A,B,4,4> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,4,4>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)+mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)+mat_traits<B>::template read_element<0,3>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)+mat_traits<B>::template read_element<1,1>(b);
- mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)+mat_traits<B>::template read_element<1,2>(b);
- mat_traits<R>::template write_element<1,3>(r)=mat_traits<A>::template read_element<1,3>(a)+mat_traits<B>::template read_element<1,3>(b);
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)+mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)+mat_traits<B>::template read_element<2,1>(b);
- mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)+mat_traits<B>::template read_element<2,2>(b);
- mat_traits<R>::template write_element<2,3>(r)=mat_traits<A>::template read_element<2,3>(a)+mat_traits<B>::template read_element<2,3>(b);
- mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)+mat_traits<B>::template read_element<3,0>(b);
- mat_traits<R>::template write_element<3,1>(r)=mat_traits<A>::template read_element<3,1>(a)+mat_traits<B>::template read_element<3,1>(b);
- mat_traits<R>::template write_element<3,2>(r)=mat_traits<A>::template read_element<3,2>(a)+mat_traits<B>::template read_element<3,2>(b);
- mat_traits<R>::template write_element<3,3>(r)=mat_traits<A>::template read_element<3,3>(a)+mat_traits<B>::template read_element<3,3>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_mm_defined;
-
- template <>
- struct
- plus_mm_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- deduce_mat2<A,B,4,1> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,4,1>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)+mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)+mat_traits<B>::template read_element<3,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_mm_defined;
-
- template <>
- struct
- plus_mm_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- deduce_mat2<A,B,1,4> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,1,4>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)+mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)+mat_traits<B>::template read_element<0,3>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_mm_defined;
-
- template <>
- struct
- plus_mm_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- deduce_mat2<A,B,4,4> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,4,4>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)-mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)-mat_traits<B>::template read_element<0,3>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)-mat_traits<B>::template read_element<1,1>(b);
- mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)-mat_traits<B>::template read_element<1,2>(b);
- mat_traits<R>::template write_element<1,3>(r)=mat_traits<A>::template read_element<1,3>(a)-mat_traits<B>::template read_element<1,3>(b);
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)-mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)-mat_traits<B>::template read_element<2,1>(b);
- mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)-mat_traits<B>::template read_element<2,2>(b);
- mat_traits<R>::template write_element<2,3>(r)=mat_traits<A>::template read_element<2,3>(a)-mat_traits<B>::template read_element<2,3>(b);
- mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)-mat_traits<B>::template read_element<3,0>(b);
- mat_traits<R>::template write_element<3,1>(r)=mat_traits<A>::template read_element<3,1>(a)-mat_traits<B>::template read_element<3,1>(b);
- mat_traits<R>::template write_element<3,2>(r)=mat_traits<A>::template read_element<3,2>(a)-mat_traits<B>::template read_element<3,2>(b);
- mat_traits<R>::template write_element<3,3>(r)=mat_traits<A>::template read_element<3,3>(a)-mat_traits<B>::template read_element<3,3>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_mm_defined;
-
- template <>
- struct
- minus_mm_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- deduce_mat2<A,B,4,1> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,4,1>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)-mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)-mat_traits<B>::template read_element<3,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_mm_defined;
-
- template <>
- struct
- minus_mm_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- deduce_mat2<A,B,1,4> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,1,4>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)-mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)-mat_traits<B>::template read_element<0,3>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_mm_defined;
-
- template <>
- struct
- minus_mm_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- A &>::type
- operator+=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)+=mat_traits<B>::template read_element<0,2>(b);
- mat_traits<A>::template write_element<0,3>(a)+=mat_traits<B>::template read_element<0,3>(b);
- mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<1,1>(a)+=mat_traits<B>::template read_element<1,1>(b);
- mat_traits<A>::template write_element<1,2>(a)+=mat_traits<B>::template read_element<1,2>(b);
- mat_traits<A>::template write_element<1,3>(a)+=mat_traits<B>::template read_element<1,3>(b);
- mat_traits<A>::template write_element<2,0>(a)+=mat_traits<B>::template read_element<2,0>(b);
- mat_traits<A>::template write_element<2,1>(a)+=mat_traits<B>::template read_element<2,1>(b);
- mat_traits<A>::template write_element<2,2>(a)+=mat_traits<B>::template read_element<2,2>(b);
- mat_traits<A>::template write_element<2,3>(a)+=mat_traits<B>::template read_element<2,3>(b);
- mat_traits<A>::template write_element<3,0>(a)+=mat_traits<B>::template read_element<3,0>(b);
- mat_traits<A>::template write_element<3,1>(a)+=mat_traits<B>::template read_element<3,1>(b);
- mat_traits<A>::template write_element<3,2>(a)+=mat_traits<B>::template read_element<3,2>(b);
- mat_traits<A>::template write_element<3,3>(a)+=mat_traits<B>::template read_element<3,3>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_eq_mm_defined;
-
- template <>
- struct
- plus_eq_mm_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- A &>::type
- operator+=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<2,0>(a)+=mat_traits<B>::template read_element<2,0>(b);
- mat_traits<A>::template write_element<3,0>(a)+=mat_traits<B>::template read_element<3,0>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_eq_mm_defined;
-
- template <>
- struct
- plus_eq_mm_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- A &>::type
- operator+=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)+=mat_traits<B>::template read_element<0,2>(b);
- mat_traits<A>::template write_element<0,3>(a)+=mat_traits<B>::template read_element<0,3>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct plus_eq_mm_defined;
-
- template <>
- struct
- plus_eq_mm_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- A &>::type
- operator-=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)-=mat_traits<B>::template read_element<0,2>(b);
- mat_traits<A>::template write_element<0,3>(a)-=mat_traits<B>::template read_element<0,3>(b);
- mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<1,1>(a)-=mat_traits<B>::template read_element<1,1>(b);
- mat_traits<A>::template write_element<1,2>(a)-=mat_traits<B>::template read_element<1,2>(b);
- mat_traits<A>::template write_element<1,3>(a)-=mat_traits<B>::template read_element<1,3>(b);
- mat_traits<A>::template write_element<2,0>(a)-=mat_traits<B>::template read_element<2,0>(b);
- mat_traits<A>::template write_element<2,1>(a)-=mat_traits<B>::template read_element<2,1>(b);
- mat_traits<A>::template write_element<2,2>(a)-=mat_traits<B>::template read_element<2,2>(b);
- mat_traits<A>::template write_element<2,3>(a)-=mat_traits<B>::template read_element<2,3>(b);
- mat_traits<A>::template write_element<3,0>(a)-=mat_traits<B>::template read_element<3,0>(b);
- mat_traits<A>::template write_element<3,1>(a)-=mat_traits<B>::template read_element<3,1>(b);
- mat_traits<A>::template write_element<3,2>(a)-=mat_traits<B>::template read_element<3,2>(b);
- mat_traits<A>::template write_element<3,3>(a)-=mat_traits<B>::template read_element<3,3>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_eq_mm_defined;
-
- template <>
- struct
- minus_eq_mm_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- A &>::type
- operator-=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
- mat_traits<A>::template write_element<2,0>(a)-=mat_traits<B>::template read_element<2,0>(b);
- mat_traits<A>::template write_element<3,0>(a)-=mat_traits<B>::template read_element<3,0>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_eq_mm_defined;
-
- template <>
- struct
- minus_eq_mm_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- A &>::type
- operator-=( A & a, B const & b )
- {
- mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
- mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
- mat_traits<A>::template write_element<0,2>(a)-=mat_traits<B>::template read_element<0,2>(b);
- mat_traits<A>::template write_element<0,3>(a)-=mat_traits<B>::template read_element<0,3>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_eq_mm_defined;
-
- template <>
- struct
- minus_eq_mm_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)*b;
- mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)*b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)*b;
- mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)*b;
- mat_traits<R>::template write_element<1,3>(r)=mat_traits<A>::template read_element<1,3>(a)*b;
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)*b;
- mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)*b;
- mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)*b;
- mat_traits<R>::template write_element<2,3>(r)=mat_traits<A>::template read_element<2,3>(a)*b;
- mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)*b;
- mat_traits<R>::template write_element<3,1>(r)=mat_traits<A>::template read_element<3,1>(a)*b;
- mat_traits<R>::template write_element<3,2>(r)=mat_traits<A>::template read_element<3,2>(a)*b;
- mat_traits<R>::template write_element<3,3>(r)=mat_traits<A>::template read_element<3,3>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_ms_defined;
-
- template <>
- struct
- mul_ms_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==4 && mat_traits<B>::cols==4,
- deduce_mat<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=a*mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<0,3>(r)=a*mat_traits<B>::template read_element<0,3>(b);
- mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=a*mat_traits<B>::template read_element<1,1>(b);
- mat_traits<R>::template write_element<1,2>(r)=a*mat_traits<B>::template read_element<1,2>(b);
- mat_traits<R>::template write_element<1,3>(r)=a*mat_traits<B>::template read_element<1,3>(b);
- mat_traits<R>::template write_element<2,0>(r)=a*mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<2,1>(r)=a*mat_traits<B>::template read_element<2,1>(b);
- mat_traits<R>::template write_element<2,2>(r)=a*mat_traits<B>::template read_element<2,2>(b);
- mat_traits<R>::template write_element<2,3>(r)=a*mat_traits<B>::template read_element<2,3>(b);
- mat_traits<R>::template write_element<3,0>(r)=a*mat_traits<B>::template read_element<3,0>(b);
- mat_traits<R>::template write_element<3,1>(r)=a*mat_traits<B>::template read_element<3,1>(b);
- mat_traits<R>::template write_element<3,2>(r)=a*mat_traits<B>::template read_element<3,2>(b);
- mat_traits<R>::template write_element<3,3>(r)=a*mat_traits<B>::template read_element<3,3>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_sm_defined;
-
- template <>
- struct
- mul_sm_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)*b;
- mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_ms_defined;
-
- template <>
- struct
- mul_ms_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==4 && mat_traits<B>::cols==1,
- deduce_mat<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<2,0>(r)=a*mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<3,0>(r)=a*mat_traits<B>::template read_element<3,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_sm_defined;
-
- template <>
- struct
- mul_sm_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==4 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)*b;
- mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_ms_defined;
-
- template <>
- struct
- mul_ms_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==1 && mat_traits<B>::cols==4,
- deduce_mat<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=a*mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<0,3>(r)=a*mat_traits<B>::template read_element<0,3>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_sm_defined;
-
- template <>
- struct
- mul_sm_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)*=b;
- mat_traits<A>::template write_element<0,1>(a)*=b;
- mat_traits<A>::template write_element<0,2>(a)*=b;
- mat_traits<A>::template write_element<0,3>(a)*=b;
- mat_traits<A>::template write_element<1,0>(a)*=b;
- mat_traits<A>::template write_element<1,1>(a)*=b;
- mat_traits<A>::template write_element<1,2>(a)*=b;
- mat_traits<A>::template write_element<1,3>(a)*=b;
- mat_traits<A>::template write_element<2,0>(a)*=b;
- mat_traits<A>::template write_element<2,1>(a)*=b;
- mat_traits<A>::template write_element<2,2>(a)*=b;
- mat_traits<A>::template write_element<2,3>(a)*=b;
- mat_traits<A>::template write_element<3,0>(a)*=b;
- mat_traits<A>::template write_element<3,1>(a)*=b;
- mat_traits<A>::template write_element<3,2>(a)*=b;
- mat_traits<A>::template write_element<3,3>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_eq_ms_defined;
-
- template <>
- struct
- mul_eq_ms_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)*=b;
- mat_traits<A>::template write_element<1,0>(a)*=b;
- mat_traits<A>::template write_element<2,0>(a)*=b;
- mat_traits<A>::template write_element<3,0>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_eq_ms_defined;
-
- template <>
- struct
- mul_eq_ms_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==4 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)*=b;
- mat_traits<A>::template write_element<0,1>(a)*=b;
- mat_traits<A>::template write_element<0,2>(a)*=b;
- mat_traits<A>::template write_element<0,3>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_eq_ms_defined;
-
- template <>
- struct
- mul_eq_ms_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)/b;
- mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)/b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
- mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)/b;
- mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)/b;
- mat_traits<R>::template write_element<1,3>(r)=mat_traits<A>::template read_element<1,3>(a)/b;
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)/b;
- mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)/b;
- mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)/b;
- mat_traits<R>::template write_element<2,3>(r)=mat_traits<A>::template read_element<2,3>(a)/b;
- mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)/b;
- mat_traits<R>::template write_element<3,1>(r)=mat_traits<A>::template read_element<3,1>(a)/b;
- mat_traits<R>::template write_element<3,2>(r)=mat_traits<A>::template read_element<3,2>(a)/b;
- mat_traits<R>::template write_element<3,3>(r)=mat_traits<A>::template read_element<3,3>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_ms_defined;
-
- template <>
- struct
- div_ms_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==4 && mat_traits<B>::cols==4,
- deduce_mat<B> >::type
- operator/( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<0,1>(r)=a/mat_traits<B>::template read_element<0,1>(b);
- mat_traits<R>::template write_element<0,2>(r)=a/mat_traits<B>::template read_element<0,2>(b);
- mat_traits<R>::template write_element<0,3>(r)=a/mat_traits<B>::template read_element<0,3>(b);
- mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<1,1>(r)=a/mat_traits<B>::template read_element<1,1>(b);
- mat_traits<R>::template write_element<1,2>(r)=a/mat_traits<B>::template read_element<1,2>(b);
- mat_traits<R>::template write_element<1,3>(r)=a/mat_traits<B>::template read_element<1,3>(b);
- mat_traits<R>::template write_element<2,0>(r)=a/mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<2,1>(r)=a/mat_traits<B>::template read_element<2,1>(b);
- mat_traits<R>::template write_element<2,2>(r)=a/mat_traits<B>::template read_element<2,2>(b);
- mat_traits<R>::template write_element<2,3>(r)=a/mat_traits<B>::template read_element<2,3>(b);
- mat_traits<R>::template write_element<3,0>(r)=a/mat_traits<B>::template read_element<3,0>(b);
- mat_traits<R>::template write_element<3,1>(r)=a/mat_traits<B>::template read_element<3,1>(b);
- mat_traits<R>::template write_element<3,2>(r)=a/mat_traits<B>::template read_element<3,2>(b);
- mat_traits<R>::template write_element<3,3>(r)=a/mat_traits<B>::template read_element<3,3>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_sm_defined;
-
- template <>
- struct
- div_sm_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
- mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
- mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)/b;
- mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_ms_defined;
-
- template <>
- struct
- div_ms_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && mat_traits<B>::rows==4 && mat_traits<B>::cols==1,
- deduce_mat<B> >::type
- operator/( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
- mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
- mat_traits<R>::template write_element<2,0>(r)=a/mat_traits<B>::template read_element<2,0>(b);
- mat_traits<R>::template write_element<3,0>(r)=a/mat_traits<B>::template read_element<3,0>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_sm_defined;
-
- template <>
- struct
- div_sm_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==4 && is_scalar<B>::value,
- deduce_mat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
- mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
- mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)/b;
- mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_ms_defined;
-
- template <>
- struct
- div_ms_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)/=b;
- mat_traits<A>::template write_element<0,1>(a)/=b;
- mat_traits<A>::template write_element<0,2>(a)/=b;
- mat_traits<A>::template write_element<0,3>(a)/=b;
- mat_traits<A>::template write_element<1,0>(a)/=b;
- mat_traits<A>::template write_element<1,1>(a)/=b;
- mat_traits<A>::template write_element<1,2>(a)/=b;
- mat_traits<A>::template write_element<1,3>(a)/=b;
- mat_traits<A>::template write_element<2,0>(a)/=b;
- mat_traits<A>::template write_element<2,1>(a)/=b;
- mat_traits<A>::template write_element<2,2>(a)/=b;
- mat_traits<A>::template write_element<2,3>(a)/=b;
- mat_traits<A>::template write_element<3,0>(a)/=b;
- mat_traits<A>::template write_element<3,1>(a)/=b;
- mat_traits<A>::template write_element<3,2>(a)/=b;
- mat_traits<A>::template write_element<3,3>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_eq_ms_defined;
-
- template <>
- struct
- div_eq_ms_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==1 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)/=b;
- mat_traits<A>::template write_element<1,0>(a)/=b;
- mat_traits<A>::template write_element<2,0>(a)/=b;
- mat_traits<A>::template write_element<3,0>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_eq_ms_defined;
-
- template <>
- struct
- div_eq_ms_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==4 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- mat_traits<A>::template write_element<0,0>(a)/=b;
- mat_traits<A>::template write_element<0,1>(a)/=b;
- mat_traits<A>::template write_element<0,2>(a)/=b;
- mat_traits<A>::template write_element<0,3>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct div_eq_ms_defined;
-
- template <>
- struct
- div_eq_ms_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<R>::rows==4 && mat_traits<A>::rows==4 &&
- mat_traits<R>::cols==4 && mat_traits<A>::cols==4,
- R>::type
- convert_to( A const & a )
- {
- R r;
- mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
- mat_traits<R>::template write_element<0,2>(r) = mat_traits<A>::template read_element<0,2>(a);
- mat_traits<R>::template write_element<0,3>(r) = mat_traits<A>::template read_element<0,3>(a);
- mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
- mat_traits<R>::template write_element<1,1>(r) = mat_traits<A>::template read_element<1,1>(a);
- mat_traits<R>::template write_element<1,2>(r) = mat_traits<A>::template read_element<1,2>(a);
- mat_traits<R>::template write_element<1,3>(r) = mat_traits<A>::template read_element<1,3>(a);
- mat_traits<R>::template write_element<2,0>(r) = mat_traits<A>::template read_element<2,0>(a);
- mat_traits<R>::template write_element<2,1>(r) = mat_traits<A>::template read_element<2,1>(a);
- mat_traits<R>::template write_element<2,2>(r) = mat_traits<A>::template read_element<2,2>(a);
- mat_traits<R>::template write_element<2,3>(r) = mat_traits<A>::template read_element<2,3>(a);
- mat_traits<R>::template write_element<3,0>(r) = mat_traits<A>::template read_element<3,0>(a);
- mat_traits<R>::template write_element<3,1>(r) = mat_traits<A>::template read_element<3,1>(a);
- mat_traits<R>::template write_element<3,2>(r) = mat_traits<A>::template read_element<3,2>(a);
- mat_traits<R>::template write_element<3,3>(r) = mat_traits<A>::template read_element<3,3>(a);
- return r;
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE
- typename enable_if_c<
- is_mat<R>::value && is_quat<A>::value &&
- mat_traits<R>::rows==4 && mat_traits<R>::cols==4,
- R>::type
- convert_to( A const & q )
- {
- typedef typename mat_traits<R>::scalar_type T;
- T const a=quat_traits<A>::template read_element<0>(q);
- T const b=quat_traits<A>::template read_element<1>(q);
- T const c=quat_traits<A>::template read_element<2>(q);
- T const d=quat_traits<A>::template read_element<3>(q);
- T const bb = b*b;
- T const cc = c*c;
- T const dd = d*d;
- T const bc = b*c;
- T const bd = b*d;
- T const cd = c*d;
- T const ab = a*b;
- T const ac = a*c;
- T const ad = a*d;
- T const zero = scalar_traits<T>::value(0);
- T const one = scalar_traits<T>::value(1);
- T const two = one+one;
- R r;
- mat_traits<R>::template write_element<0,0>(r) = one - two*(cc+dd);
- mat_traits<R>::template write_element<0,1>(r) = two*(bc-ad);
- mat_traits<R>::template write_element<0,2>(r) = two*(bd+ac);
- mat_traits<R>::template write_element<0,3>(r) = zero;
- mat_traits<R>::template write_element<1,0>(r) = two*(bc+ad);
- mat_traits<R>::template write_element<1,1>(r) = one - two*(bb+dd);
- mat_traits<R>::template write_element<1,2>(r) = two*(cd-ab);
- mat_traits<R>::template write_element<1,3>(r) = zero;
- mat_traits<R>::template write_element<2,0>(r) = two*(bd-ac);
- mat_traits<R>::template write_element<2,1>(r) = two*(cd+ab);
- mat_traits<R>::template write_element<2,2>(r) = one - two*(bb+cc);
- mat_traits<R>::template write_element<2,3>(r) = zero;
- mat_traits<R>::template write_element<3,0>(r) = zero;
- mat_traits<R>::template write_element<3,1>(r) = zero;
- mat_traits<R>::template write_element<3,2>(r) = zero;
- mat_traits<R>::template write_element<3,3>(r) = one;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct convert_to_m_defined;
-
- template <>
- struct
- convert_to_m_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<R>::rows==4 && mat_traits<A>::rows==4 &&
- mat_traits<R>::cols==1 && mat_traits<A>::cols==1,
- R>::type
- convert_to( A const & a )
- {
- R r;
- mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
- mat_traits<R>::template write_element<2,0>(r) = mat_traits<A>::template read_element<2,0>(a);
- mat_traits<R>::template write_element<3,0>(r) = mat_traits<A>::template read_element<3,0>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct convert_to_m_defined;
-
- template <>
- struct
- convert_to_m_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<R>::rows==1 && mat_traits<A>::rows==1 &&
- mat_traits<R>::cols==4 && mat_traits<A>::cols==4,
- R>::type
- convert_to( A const & a )
- {
- R r;
- mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
- mat_traits<R>::template write_element<0,2>(r) = mat_traits<A>::template read_element<0,2>(a);
- mat_traits<R>::template write_element<0,3>(r) = mat_traits<A>::template read_element<0,3>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct convert_to_m_defined;
-
- template <>
- struct
- convert_to_m_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
- mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b) &&
- mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b) &&
- mat_traits<A>::template read_element<0,3>(a)==mat_traits<B>::template read_element<0,3>(b) &&
- mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b) &&
- mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b) &&
- mat_traits<A>::template read_element<1,2>(a)==mat_traits<B>::template read_element<1,2>(b) &&
- mat_traits<A>::template read_element<1,3>(a)==mat_traits<B>::template read_element<1,3>(b) &&
- mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b) &&
- mat_traits<A>::template read_element<2,1>(a)==mat_traits<B>::template read_element<2,1>(b) &&
- mat_traits<A>::template read_element<2,2>(a)==mat_traits<B>::template read_element<2,2>(b) &&
- mat_traits<A>::template read_element<2,3>(a)==mat_traits<B>::template read_element<2,3>(b) &&
- mat_traits<A>::template read_element<3,0>(a)==mat_traits<B>::template read_element<3,0>(b) &&
- mat_traits<A>::template read_element<3,1>(a)==mat_traits<B>::template read_element<3,1>(b) &&
- mat_traits<A>::template read_element<3,2>(a)==mat_traits<B>::template read_element<3,2>(b) &&
- mat_traits<A>::template read_element<3,3>(a)==mat_traits<B>::template read_element<3,3>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct eq_mm_defined;
-
- template <>
- struct
- eq_mm_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
- mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b) &&
- mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b) &&
- mat_traits<A>::template read_element<3,0>(a)==mat_traits<B>::template read_element<3,0>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct eq_mm_defined;
-
- template <>
- struct
- eq_mm_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
- mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b) &&
- mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b) &&
- mat_traits<A>::template read_element<0,3>(a)==mat_traits<B>::template read_element<0,3>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct eq_mm_defined;
-
- template <>
- struct
- eq_mm_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
- !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b)) ||
- !(mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b)) ||
- !(mat_traits<A>::template read_element<0,3>(a)==mat_traits<B>::template read_element<0,3>(b)) ||
- !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b)) ||
- !(mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b)) ||
- !(mat_traits<A>::template read_element<1,2>(a)==mat_traits<B>::template read_element<1,2>(b)) ||
- !(mat_traits<A>::template read_element<1,3>(a)==mat_traits<B>::template read_element<1,3>(b)) ||
- !(mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b)) ||
- !(mat_traits<A>::template read_element<2,1>(a)==mat_traits<B>::template read_element<2,1>(b)) ||
- !(mat_traits<A>::template read_element<2,2>(a)==mat_traits<B>::template read_element<2,2>(b)) ||
- !(mat_traits<A>::template read_element<2,3>(a)==mat_traits<B>::template read_element<2,3>(b)) ||
- !(mat_traits<A>::template read_element<3,0>(a)==mat_traits<B>::template read_element<3,0>(b)) ||
- !(mat_traits<A>::template read_element<3,1>(a)==mat_traits<B>::template read_element<3,1>(b)) ||
- !(mat_traits<A>::template read_element<3,2>(a)==mat_traits<B>::template read_element<3,2>(b)) ||
- !(mat_traits<A>::template read_element<3,3>(a)==mat_traits<B>::template read_element<3,3>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct neq_mm_defined;
-
- template <>
- struct
- neq_mm_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
- !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b)) ||
- !(mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b)) ||
- !(mat_traits<A>::template read_element<3,0>(a)==mat_traits<B>::template read_element<3,0>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct neq_mm_defined;
-
- template <>
- struct
- neq_mm_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
- !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b)) ||
- !(mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b)) ||
- !(mat_traits<A>::template read_element<0,3>(a)==mat_traits<B>::template read_element<0,3>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct neq_mm_defined;
-
- template <>
- struct
- neq_mm_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4,
- deduce_mat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
- mat_traits<R>::template write_element<0,2>(r)=-mat_traits<A>::template read_element<0,2>(a);
- mat_traits<R>::template write_element<0,3>(r)=-mat_traits<A>::template read_element<0,3>(a);
- mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
- mat_traits<R>::template write_element<1,1>(r)=-mat_traits<A>::template read_element<1,1>(a);
- mat_traits<R>::template write_element<1,2>(r)=-mat_traits<A>::template read_element<1,2>(a);
- mat_traits<R>::template write_element<1,3>(r)=-mat_traits<A>::template read_element<1,3>(a);
- mat_traits<R>::template write_element<2,0>(r)=-mat_traits<A>::template read_element<2,0>(a);
- mat_traits<R>::template write_element<2,1>(r)=-mat_traits<A>::template read_element<2,1>(a);
- mat_traits<R>::template write_element<2,2>(r)=-mat_traits<A>::template read_element<2,2>(a);
- mat_traits<R>::template write_element<2,3>(r)=-mat_traits<A>::template read_element<2,3>(a);
- mat_traits<R>::template write_element<3,0>(r)=-mat_traits<A>::template read_element<3,0>(a);
- mat_traits<R>::template write_element<3,1>(r)=-mat_traits<A>::template read_element<3,1>(a);
- mat_traits<R>::template write_element<3,2>(r)=-mat_traits<A>::template read_element<3,2>(a);
- mat_traits<R>::template write_element<3,3>(r)=-mat_traits<A>::template read_element<3,3>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_m_defined;
-
- template <>
- struct
- minus_m_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==1,
- deduce_mat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
- mat_traits<R>::template write_element<2,0>(r)=-mat_traits<A>::template read_element<2,0>(a);
- mat_traits<R>::template write_element<3,0>(r)=-mat_traits<A>::template read_element<3,0>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_m_defined;
-
- template <>
- struct
- minus_m_defined<4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<A>::cols==4,
- deduce_mat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
- mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
- mat_traits<R>::template write_element<0,2>(r)=-mat_traits<A>::template read_element<0,2>(a);
- mat_traits<R>::template write_element<0,3>(r)=-mat_traits<A>::template read_element<0,3>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct minus_m_defined;
-
- template <>
- struct
- minus_m_defined<1,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4,
- typename mat_traits<A>::scalar_type>::type
- determinant( A const & a )
- {
- typedef typename mat_traits<A>::scalar_type T;
- T const a00=mat_traits<A>::template read_element<0,0>(a);
- T const a01=mat_traits<A>::template read_element<0,1>(a);
- T const a02=mat_traits<A>::template read_element<0,2>(a);
- T const a03=mat_traits<A>::template read_element<0,3>(a);
- T const a10=mat_traits<A>::template read_element<1,0>(a);
- T const a11=mat_traits<A>::template read_element<1,1>(a);
- T const a12=mat_traits<A>::template read_element<1,2>(a);
- T const a13=mat_traits<A>::template read_element<1,3>(a);
- T const a20=mat_traits<A>::template read_element<2,0>(a);
- T const a21=mat_traits<A>::template read_element<2,1>(a);
- T const a22=mat_traits<A>::template read_element<2,2>(a);
- T const a23=mat_traits<A>::template read_element<2,3>(a);
- T const a30=mat_traits<A>::template read_element<3,0>(a);
- T const a31=mat_traits<A>::template read_element<3,1>(a);
- T const a32=mat_traits<A>::template read_element<3,2>(a);
- T const a33=mat_traits<A>::template read_element<3,3>(a);
- T det=(a00*(a11*(a22*a33-a23*a32)-a12*(a21*a33-a23*a31)+a13*(a21*a32-a22*a31))-a01*(a10*(a22*a33-a23*a32)-a12*(a20*a33-a23*a30)+a13*(a20*a32-a22*a30))+a02*(a10*(a21*a33-a23*a31)-a11*(a20*a33-a23*a30)+a13*(a20*a31-a21*a30))-a03*(a10*(a21*a32-a22*a31)-a11*(a20*a32-a22*a30)+a12*(a20*a31-a21*a30)));
- return det;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::determinant;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct determinant_defined;
-
- template <>
- struct
- determinant_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4 && is_scalar<B>::value,
- deduce_mat<A> >::type
- inverse( A const & a, B det )
- {
- typedef typename mat_traits<A>::scalar_type T;
- BOOST_QVM_ASSERT(det!=scalar_traits<B>::value(0));
- T const a00=mat_traits<A>::template read_element<0,0>(a);
- T const a01=mat_traits<A>::template read_element<0,1>(a);
- T const a02=mat_traits<A>::template read_element<0,2>(a);
- T const a03=mat_traits<A>::template read_element<0,3>(a);
- T const a10=mat_traits<A>::template read_element<1,0>(a);
- T const a11=mat_traits<A>::template read_element<1,1>(a);
- T const a12=mat_traits<A>::template read_element<1,2>(a);
- T const a13=mat_traits<A>::template read_element<1,3>(a);
- T const a20=mat_traits<A>::template read_element<2,0>(a);
- T const a21=mat_traits<A>::template read_element<2,1>(a);
- T const a22=mat_traits<A>::template read_element<2,2>(a);
- T const a23=mat_traits<A>::template read_element<2,3>(a);
- T const a30=mat_traits<A>::template read_element<3,0>(a);
- T const a31=mat_traits<A>::template read_element<3,1>(a);
- T const a32=mat_traits<A>::template read_element<3,2>(a);
- T const a33=mat_traits<A>::template read_element<3,3>(a);
- T const f=scalar_traits<T>::value(1)/det;
- typedef typename deduce_mat<A>::type R;
- R r;
- mat_traits<R>::template write_element<0,0>(r)= f*(a11*(a22*a33-a23*a32)-a12*(a21*a33-a23*a31)+a13*(a21*a32-a22*a31));
- mat_traits<R>::template write_element<0,1>(r)=-f*(a01*(a22*a33-a23*a32)-a02*(a21*a33-a23*a31)+a03*(a21*a32-a22*a31));
- mat_traits<R>::template write_element<0,2>(r)= f*(a01*(a12*a33-a13*a32)-a02*(a11*a33-a13*a31)+a03*(a11*a32-a12*a31));
- mat_traits<R>::template write_element<0,3>(r)=-f*(a01*(a12*a23-a13*a22)-a02*(a11*a23-a13*a21)+a03*(a11*a22-a12*a21));
- mat_traits<R>::template write_element<1,0>(r)=-f*(a10*(a22*a33-a23*a32)-a12*(a20*a33-a23*a30)+a13*(a20*a32-a22*a30));
- mat_traits<R>::template write_element<1,1>(r)= f*(a00*(a22*a33-a23*a32)-a02*(a20*a33-a23*a30)+a03*(a20*a32-a22*a30));
- mat_traits<R>::template write_element<1,2>(r)=-f*(a00*(a12*a33-a13*a32)-a02*(a10*a33-a13*a30)+a03*(a10*a32-a12*a30));
- mat_traits<R>::template write_element<1,3>(r)= f*(a00*(a12*a23-a13*a22)-a02*(a10*a23-a13*a20)+a03*(a10*a22-a12*a20));
- mat_traits<R>::template write_element<2,0>(r)= f*(a10*(a21*a33-a23*a31)-a11*(a20*a33-a23*a30)+a13*(a20*a31-a21*a30));
- mat_traits<R>::template write_element<2,1>(r)=-f*(a00*(a21*a33-a23*a31)-a01*(a20*a33-a23*a30)+a03*(a20*a31-a21*a30));
- mat_traits<R>::template write_element<2,2>(r)= f*(a00*(a11*a33-a13*a31)-a01*(a10*a33-a13*a30)+a03*(a10*a31-a11*a30));
- mat_traits<R>::template write_element<2,3>(r)=-f*(a00*(a11*a23-a13*a21)-a01*(a10*a23-a13*a20)+a03*(a10*a21-a11*a20));
- mat_traits<R>::template write_element<3,0>(r)=-f*(a10*(a21*a32-a22*a31)-a11*(a20*a32-a22*a30)+a12*(a20*a31-a21*a30));
- mat_traits<R>::template write_element<3,1>(r)= f*(a00*(a21*a32-a22*a31)-a01*(a20*a32-a22*a30)+a02*(a20*a31-a21*a30));
- mat_traits<R>::template write_element<3,2>(r)=-f*(a00*(a11*a32-a12*a31)-a01*(a10*a32-a12*a30)+a02*(a10*a31-a11*a30));
- mat_traits<R>::template write_element<3,3>(r)= f*(a00*(a11*a22-a12*a21)-a01*(a10*a22-a12*a20)+a02*(a10*a21-a11*a20));
- return r;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4,
- deduce_mat<A> >::type
- inverse( A const & a )
- {
- typedef typename mat_traits<A>::scalar_type T;
- T det=determinant(a);
- if( det==scalar_traits<T>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_determinant_error());
- return inverse(a,det);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::inverse;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct inverse_m_defined;
-
- template <>
- struct
- inverse_m_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- deduce_mat2<A,B,4,4> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
- Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
- Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
- Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
- Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
- Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
- Ta const a30 = mat_traits<A>::template read_element<3,0>(a);
- Ta const a31 = mat_traits<A>::template read_element<3,1>(a);
- Ta const a32 = mat_traits<A>::template read_element<3,2>(a);
- Ta const a33 = mat_traits<A>::template read_element<3,3>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
- Tb const b03 = mat_traits<B>::template read_element<0,3>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
- Tb const b13 = mat_traits<B>::template read_element<1,3>(b);
- Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
- Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
- Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
- Tb const b23 = mat_traits<B>::template read_element<2,3>(b);
- Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
- Tb const b31 = mat_traits<B>::template read_element<3,1>(b);
- Tb const b32 = mat_traits<B>::template read_element<3,2>(b);
- Tb const b33 = mat_traits<B>::template read_element<3,3>(b);
- typedef typename deduce_mat2<A,B,4,4>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20+a03*b30;
- mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11+a02*b21+a03*b31;
- mat_traits<R>::template write_element<0,2>(r)=a00*b02+a01*b12+a02*b22+a03*b32;
- mat_traits<R>::template write_element<0,3>(r)=a00*b03+a01*b13+a02*b23+a03*b33;
- mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10+a12*b20+a13*b30;
- mat_traits<R>::template write_element<1,1>(r)=a10*b01+a11*b11+a12*b21+a13*b31;
- mat_traits<R>::template write_element<1,2>(r)=a10*b02+a11*b12+a12*b22+a13*b32;
- mat_traits<R>::template write_element<1,3>(r)=a10*b03+a11*b13+a12*b23+a13*b33;
- mat_traits<R>::template write_element<2,0>(r)=a20*b00+a21*b10+a22*b20+a23*b30;
- mat_traits<R>::template write_element<2,1>(r)=a20*b01+a21*b11+a22*b21+a23*b31;
- mat_traits<R>::template write_element<2,2>(r)=a20*b02+a21*b12+a22*b22+a23*b32;
- mat_traits<R>::template write_element<2,3>(r)=a20*b03+a21*b13+a22*b23+a23*b33;
- mat_traits<R>::template write_element<3,0>(r)=a30*b00+a31*b10+a32*b20+a33*b30;
- mat_traits<R>::template write_element<3,1>(r)=a30*b01+a31*b11+a32*b21+a33*b31;
- mat_traits<R>::template write_element<3,2>(r)=a30*b02+a31*b12+a32*b22+a33*b32;
- mat_traits<R>::template write_element<3,3>(r)=a30*b03+a31*b13+a32*b23+a33*b33;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int CR,int C>
- struct mul_mm_defined;
-
- template <>
- struct
- mul_mm_defined<4,4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- A &>::type
- operator*=( A & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
- Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
- Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
- Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
- Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
- Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
- Ta const a30 = mat_traits<A>::template read_element<3,0>(a);
- Ta const a31 = mat_traits<A>::template read_element<3,1>(a);
- Ta const a32 = mat_traits<A>::template read_element<3,2>(a);
- Ta const a33 = mat_traits<A>::template read_element<3,3>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
- Tb const b03 = mat_traits<B>::template read_element<0,3>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
- Tb const b13 = mat_traits<B>::template read_element<1,3>(b);
- Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
- Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
- Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
- Tb const b23 = mat_traits<B>::template read_element<2,3>(b);
- Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
- Tb const b31 = mat_traits<B>::template read_element<3,1>(b);
- Tb const b32 = mat_traits<B>::template read_element<3,2>(b);
- Tb const b33 = mat_traits<B>::template read_element<3,3>(b);
- mat_traits<A>::template write_element<0,0>(a)=a00*b00+a01*b10+a02*b20+a03*b30;
- mat_traits<A>::template write_element<0,1>(a)=a00*b01+a01*b11+a02*b21+a03*b31;
- mat_traits<A>::template write_element<0,2>(a)=a00*b02+a01*b12+a02*b22+a03*b32;
- mat_traits<A>::template write_element<0,3>(a)=a00*b03+a01*b13+a02*b23+a03*b33;
- mat_traits<A>::template write_element<1,0>(a)=a10*b00+a11*b10+a12*b20+a13*b30;
- mat_traits<A>::template write_element<1,1>(a)=a10*b01+a11*b11+a12*b21+a13*b31;
- mat_traits<A>::template write_element<1,2>(a)=a10*b02+a11*b12+a12*b22+a13*b32;
- mat_traits<A>::template write_element<1,3>(a)=a10*b03+a11*b13+a12*b23+a13*b33;
- mat_traits<A>::template write_element<2,0>(a)=a20*b00+a21*b10+a22*b20+a23*b30;
- mat_traits<A>::template write_element<2,1>(a)=a20*b01+a21*b11+a22*b21+a23*b31;
- mat_traits<A>::template write_element<2,2>(a)=a20*b02+a21*b12+a22*b22+a23*b32;
- mat_traits<A>::template write_element<2,3>(a)=a20*b03+a21*b13+a22*b23+a23*b33;
- mat_traits<A>::template write_element<3,0>(a)=a30*b00+a31*b10+a32*b20+a33*b30;
- mat_traits<A>::template write_element<3,1>(a)=a30*b01+a31*b11+a32*b21+a33*b31;
- mat_traits<A>::template write_element<3,2>(a)=a30*b02+a31*b12+a32*b22+a33*b32;
- mat_traits<A>::template write_element<3,3>(a)=a30*b03+a31*b13+a32*b23+a33*b33;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_eq_mm_defined;
-
- template <>
- struct
- mul_eq_mm_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==1,
- deduce_mat2<A,B,4,1> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
- Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
- Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
- Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
- Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
- Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
- Ta const a30 = mat_traits<A>::template read_element<3,0>(a);
- Ta const a31 = mat_traits<A>::template read_element<3,1>(a);
- Ta const a32 = mat_traits<A>::template read_element<3,2>(a);
- Ta const a33 = mat_traits<A>::template read_element<3,3>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
- Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
- typedef typename deduce_mat2<A,B,4,1>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20+a03*b30;
- mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10+a12*b20+a13*b30;
- mat_traits<R>::template write_element<2,0>(r)=a20*b00+a21*b10+a22*b20+a23*b30;
- mat_traits<R>::template write_element<3,0>(r)=a30*b00+a31*b10+a32*b20+a33*b30;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int CR,int C>
- struct mul_mm_defined;
-
- template <>
- struct
- mul_mm_defined<4,4,1>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==1 && mat_traits<B>::rows==4 &&
- mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
- deduce_mat2<A,B,1,4> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
- Tb const b03 = mat_traits<B>::template read_element<0,3>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
- Tb const b13 = mat_traits<B>::template read_element<1,3>(b);
- Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
- Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
- Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
- Tb const b23 = mat_traits<B>::template read_element<2,3>(b);
- Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
- Tb const b31 = mat_traits<B>::template read_element<3,1>(b);
- Tb const b32 = mat_traits<B>::template read_element<3,2>(b);
- Tb const b33 = mat_traits<B>::template read_element<3,3>(b);
- typedef typename deduce_mat2<A,B,1,4>::type R;
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
- BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
- R r;
- mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20+a03*b30;
- mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11+a02*b21+a03*b31;
- mat_traits<R>::template write_element<0,2>(r)=a00*b02+a01*b12+a02*b22+a03*b32;
- mat_traits<R>::template write_element<0,3>(r)=a00*b03+a01*b13+a02*b23+a03*b33;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int CR,int C>
- struct mul_mm_defined;
-
- template <>
- struct
- mul_mm_defined<1,4,4>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_B3124DC843BB8BA61F35A7D938251F
+#define BOOST_QVM_B3124DC843BB8BA61F35A7D938251F
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/deduce_mat.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/error.hpp>
+#include <boost/qvm/gen/mat_assign4.hpp>
+#include <boost/qvm/quat_traits.hpp>
+#include <boost/qvm/scalar_traits.hpp>
+#include <boost/qvm/throw_exception.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ deduce_mat2<A,B,4,4> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,4,4>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)+mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)+mat_traits<B>::template read_element<0,3>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)+mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)+mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<R>::template write_element<1,3>(r)=mat_traits<A>::template read_element<1,3>(a)+mat_traits<B>::template read_element<1,3>(b);
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)+mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)+mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)+mat_traits<B>::template read_element<2,2>(b);
+ mat_traits<R>::template write_element<2,3>(r)=mat_traits<A>::template read_element<2,3>(a)+mat_traits<B>::template read_element<2,3>(b);
+ mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)+mat_traits<B>::template read_element<3,0>(b);
+ mat_traits<R>::template write_element<3,1>(r)=mat_traits<A>::template read_element<3,1>(a)+mat_traits<B>::template read_element<3,1>(b);
+ mat_traits<R>::template write_element<3,2>(r)=mat_traits<A>::template read_element<3,2>(a)+mat_traits<B>::template read_element<3,2>(b);
+ mat_traits<R>::template write_element<3,3>(r)=mat_traits<A>::template read_element<3,3>(a)+mat_traits<B>::template read_element<3,3>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_mm_defined;
+
+ template <>
+ struct
+ plus_mm_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ deduce_mat2<A,B,4,1> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,4,1>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)+mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)+mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)+mat_traits<B>::template read_element<3,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_mm_defined;
+
+ template <>
+ struct
+ plus_mm_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ deduce_mat2<A,B,1,4> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,1,4>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)+mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)+mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)+mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)+mat_traits<B>::template read_element<0,3>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_mm_defined;
+
+ template <>
+ struct
+ plus_mm_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ deduce_mat2<A,B,4,4> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,4,4>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)-mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)-mat_traits<B>::template read_element<0,3>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)-mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)-mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<R>::template write_element<1,3>(r)=mat_traits<A>::template read_element<1,3>(a)-mat_traits<B>::template read_element<1,3>(b);
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)-mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)-mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)-mat_traits<B>::template read_element<2,2>(b);
+ mat_traits<R>::template write_element<2,3>(r)=mat_traits<A>::template read_element<2,3>(a)-mat_traits<B>::template read_element<2,3>(b);
+ mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)-mat_traits<B>::template read_element<3,0>(b);
+ mat_traits<R>::template write_element<3,1>(r)=mat_traits<A>::template read_element<3,1>(a)-mat_traits<B>::template read_element<3,1>(b);
+ mat_traits<R>::template write_element<3,2>(r)=mat_traits<A>::template read_element<3,2>(a)-mat_traits<B>::template read_element<3,2>(b);
+ mat_traits<R>::template write_element<3,3>(r)=mat_traits<A>::template read_element<3,3>(a)-mat_traits<B>::template read_element<3,3>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_mm_defined;
+
+ template <>
+ struct
+ minus_mm_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ deduce_mat2<A,B,4,1> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,4,1>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)-mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)-mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)-mat_traits<B>::template read_element<3,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_mm_defined;
+
+ template <>
+ struct
+ minus_mm_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ deduce_mat2<A,B,1,4> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,1,4>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)-mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)-mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)-mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)-mat_traits<B>::template read_element<0,3>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_mm_defined;
+
+ template <>
+ struct
+ minus_mm_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)+=mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<A>::template write_element<0,3>(a)+=mat_traits<B>::template read_element<0,3>(b);
+ mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<1,1>(a)+=mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<A>::template write_element<1,2>(a)+=mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<A>::template write_element<1,3>(a)+=mat_traits<B>::template read_element<1,3>(b);
+ mat_traits<A>::template write_element<2,0>(a)+=mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<A>::template write_element<2,1>(a)+=mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<A>::template write_element<2,2>(a)+=mat_traits<B>::template read_element<2,2>(b);
+ mat_traits<A>::template write_element<2,3>(a)+=mat_traits<B>::template read_element<2,3>(b);
+ mat_traits<A>::template write_element<3,0>(a)+=mat_traits<B>::template read_element<3,0>(b);
+ mat_traits<A>::template write_element<3,1>(a)+=mat_traits<B>::template read_element<3,1>(b);
+ mat_traits<A>::template write_element<3,2>(a)+=mat_traits<B>::template read_element<3,2>(b);
+ mat_traits<A>::template write_element<3,3>(a)+=mat_traits<B>::template read_element<3,3>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_eq_mm_defined;
+
+ template <>
+ struct
+ plus_eq_mm_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<1,0>(a)+=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<2,0>(a)+=mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<A>::template write_element<3,0>(a)+=mat_traits<B>::template read_element<3,0>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_eq_mm_defined;
+
+ template <>
+ struct
+ plus_eq_mm_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)+=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)+=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)+=mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<A>::template write_element<0,3>(a)+=mat_traits<B>::template read_element<0,3>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct plus_eq_mm_defined;
+
+ template <>
+ struct
+ plus_eq_mm_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)-=mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<A>::template write_element<0,3>(a)-=mat_traits<B>::template read_element<0,3>(b);
+ mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<1,1>(a)-=mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<A>::template write_element<1,2>(a)-=mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<A>::template write_element<1,3>(a)-=mat_traits<B>::template read_element<1,3>(b);
+ mat_traits<A>::template write_element<2,0>(a)-=mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<A>::template write_element<2,1>(a)-=mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<A>::template write_element<2,2>(a)-=mat_traits<B>::template read_element<2,2>(b);
+ mat_traits<A>::template write_element<2,3>(a)-=mat_traits<B>::template read_element<2,3>(b);
+ mat_traits<A>::template write_element<3,0>(a)-=mat_traits<B>::template read_element<3,0>(b);
+ mat_traits<A>::template write_element<3,1>(a)-=mat_traits<B>::template read_element<3,1>(b);
+ mat_traits<A>::template write_element<3,2>(a)-=mat_traits<B>::template read_element<3,2>(b);
+ mat_traits<A>::template write_element<3,3>(a)-=mat_traits<B>::template read_element<3,3>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_eq_mm_defined;
+
+ template <>
+ struct
+ minus_eq_mm_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<1,0>(a)-=mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<A>::template write_element<2,0>(a)-=mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<A>::template write_element<3,0>(a)-=mat_traits<B>::template read_element<3,0>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_eq_mm_defined;
+
+ template <>
+ struct
+ minus_eq_mm_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)-=mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<A>::template write_element<0,1>(a)-=mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<A>::template write_element<0,2>(a)-=mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<A>::template write_element<0,3>(a)-=mat_traits<B>::template read_element<0,3>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_eq_mm_defined;
+
+ template <>
+ struct
+ minus_eq_mm_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)*b;
+ mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)*b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)*b;
+ mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)*b;
+ mat_traits<R>::template write_element<1,3>(r)=mat_traits<A>::template read_element<1,3>(a)*b;
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)*b;
+ mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)*b;
+ mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)*b;
+ mat_traits<R>::template write_element<2,3>(r)=mat_traits<A>::template read_element<2,3>(a)*b;
+ mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)*b;
+ mat_traits<R>::template write_element<3,1>(r)=mat_traits<A>::template read_element<3,1>(a)*b;
+ mat_traits<R>::template write_element<3,2>(r)=mat_traits<A>::template read_element<3,2>(a)*b;
+ mat_traits<R>::template write_element<3,3>(r)=mat_traits<A>::template read_element<3,3>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_ms_defined;
+
+ template <>
+ struct
+ mul_ms_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==4 && mat_traits<B>::cols==4,
+ deduce_mat<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=a*mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<0,3>(r)=a*mat_traits<B>::template read_element<0,3>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=a*mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<R>::template write_element<1,2>(r)=a*mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<R>::template write_element<1,3>(r)=a*mat_traits<B>::template read_element<1,3>(b);
+ mat_traits<R>::template write_element<2,0>(r)=a*mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<2,1>(r)=a*mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<R>::template write_element<2,2>(r)=a*mat_traits<B>::template read_element<2,2>(b);
+ mat_traits<R>::template write_element<2,3>(r)=a*mat_traits<B>::template read_element<2,3>(b);
+ mat_traits<R>::template write_element<3,0>(r)=a*mat_traits<B>::template read_element<3,0>(b);
+ mat_traits<R>::template write_element<3,1>(r)=a*mat_traits<B>::template read_element<3,1>(b);
+ mat_traits<R>::template write_element<3,2>(r)=a*mat_traits<B>::template read_element<3,2>(b);
+ mat_traits<R>::template write_element<3,3>(r)=a*mat_traits<B>::template read_element<3,3>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_sm_defined;
+
+ template <>
+ struct
+ mul_sm_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)*b;
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)*b;
+ mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_ms_defined;
+
+ template <>
+ struct
+ mul_ms_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==4 && mat_traits<B>::cols==1,
+ deduce_mat<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a*mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<2,0>(r)=a*mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<3,0>(r)=a*mat_traits<B>::template read_element<3,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_sm_defined;
+
+ template <>
+ struct
+ mul_sm_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==4 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)*b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)*b;
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)*b;
+ mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_ms_defined;
+
+ template <>
+ struct
+ mul_ms_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==1 && mat_traits<B>::cols==4,
+ deduce_mat<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a*mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=a*mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=a*mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<0,3>(r)=a*mat_traits<B>::template read_element<0,3>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_sm_defined;
+
+ template <>
+ struct
+ mul_sm_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)*=b;
+ mat_traits<A>::template write_element<0,1>(a)*=b;
+ mat_traits<A>::template write_element<0,2>(a)*=b;
+ mat_traits<A>::template write_element<0,3>(a)*=b;
+ mat_traits<A>::template write_element<1,0>(a)*=b;
+ mat_traits<A>::template write_element<1,1>(a)*=b;
+ mat_traits<A>::template write_element<1,2>(a)*=b;
+ mat_traits<A>::template write_element<1,3>(a)*=b;
+ mat_traits<A>::template write_element<2,0>(a)*=b;
+ mat_traits<A>::template write_element<2,1>(a)*=b;
+ mat_traits<A>::template write_element<2,2>(a)*=b;
+ mat_traits<A>::template write_element<2,3>(a)*=b;
+ mat_traits<A>::template write_element<3,0>(a)*=b;
+ mat_traits<A>::template write_element<3,1>(a)*=b;
+ mat_traits<A>::template write_element<3,2>(a)*=b;
+ mat_traits<A>::template write_element<3,3>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_eq_ms_defined;
+
+ template <>
+ struct
+ mul_eq_ms_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)*=b;
+ mat_traits<A>::template write_element<1,0>(a)*=b;
+ mat_traits<A>::template write_element<2,0>(a)*=b;
+ mat_traits<A>::template write_element<3,0>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_eq_ms_defined;
+
+ template <>
+ struct
+ mul_eq_ms_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==4 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)*=b;
+ mat_traits<A>::template write_element<0,1>(a)*=b;
+ mat_traits<A>::template write_element<0,2>(a)*=b;
+ mat_traits<A>::template write_element<0,3>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_eq_ms_defined;
+
+ template <>
+ struct
+ mul_eq_ms_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)/b;
+ mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)/b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
+ mat_traits<R>::template write_element<1,1>(r)=mat_traits<A>::template read_element<1,1>(a)/b;
+ mat_traits<R>::template write_element<1,2>(r)=mat_traits<A>::template read_element<1,2>(a)/b;
+ mat_traits<R>::template write_element<1,3>(r)=mat_traits<A>::template read_element<1,3>(a)/b;
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)/b;
+ mat_traits<R>::template write_element<2,1>(r)=mat_traits<A>::template read_element<2,1>(a)/b;
+ mat_traits<R>::template write_element<2,2>(r)=mat_traits<A>::template read_element<2,2>(a)/b;
+ mat_traits<R>::template write_element<2,3>(r)=mat_traits<A>::template read_element<2,3>(a)/b;
+ mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)/b;
+ mat_traits<R>::template write_element<3,1>(r)=mat_traits<A>::template read_element<3,1>(a)/b;
+ mat_traits<R>::template write_element<3,2>(r)=mat_traits<A>::template read_element<3,2>(a)/b;
+ mat_traits<R>::template write_element<3,3>(r)=mat_traits<A>::template read_element<3,3>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_ms_defined;
+
+ template <>
+ struct
+ div_ms_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==4 && mat_traits<B>::cols==4,
+ deduce_mat<B> >::type
+ operator/( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<0,1>(r)=a/mat_traits<B>::template read_element<0,1>(b);
+ mat_traits<R>::template write_element<0,2>(r)=a/mat_traits<B>::template read_element<0,2>(b);
+ mat_traits<R>::template write_element<0,3>(r)=a/mat_traits<B>::template read_element<0,3>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<1,1>(r)=a/mat_traits<B>::template read_element<1,1>(b);
+ mat_traits<R>::template write_element<1,2>(r)=a/mat_traits<B>::template read_element<1,2>(b);
+ mat_traits<R>::template write_element<1,3>(r)=a/mat_traits<B>::template read_element<1,3>(b);
+ mat_traits<R>::template write_element<2,0>(r)=a/mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<2,1>(r)=a/mat_traits<B>::template read_element<2,1>(b);
+ mat_traits<R>::template write_element<2,2>(r)=a/mat_traits<B>::template read_element<2,2>(b);
+ mat_traits<R>::template write_element<2,3>(r)=a/mat_traits<B>::template read_element<2,3>(b);
+ mat_traits<R>::template write_element<3,0>(r)=a/mat_traits<B>::template read_element<3,0>(b);
+ mat_traits<R>::template write_element<3,1>(r)=a/mat_traits<B>::template read_element<3,1>(b);
+ mat_traits<R>::template write_element<3,2>(r)=a/mat_traits<B>::template read_element<3,2>(b);
+ mat_traits<R>::template write_element<3,3>(r)=a/mat_traits<B>::template read_element<3,3>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_sm_defined;
+
+ template <>
+ struct
+ div_sm_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
+ mat_traits<R>::template write_element<1,0>(r)=mat_traits<A>::template read_element<1,0>(a)/b;
+ mat_traits<R>::template write_element<2,0>(r)=mat_traits<A>::template read_element<2,0>(a)/b;
+ mat_traits<R>::template write_element<3,0>(r)=mat_traits<A>::template read_element<3,0>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_ms_defined;
+
+ template <>
+ struct
+ div_ms_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && mat_traits<B>::rows==4 && mat_traits<B>::cols==1,
+ deduce_mat<B> >::type
+ operator/( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a/mat_traits<B>::template read_element<0,0>(b);
+ mat_traits<R>::template write_element<1,0>(r)=a/mat_traits<B>::template read_element<1,0>(b);
+ mat_traits<R>::template write_element<2,0>(r)=a/mat_traits<B>::template read_element<2,0>(b);
+ mat_traits<R>::template write_element<3,0>(r)=a/mat_traits<B>::template read_element<3,0>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_sm_defined;
+
+ template <>
+ struct
+ div_sm_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==4 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=mat_traits<A>::template read_element<0,0>(a)/b;
+ mat_traits<R>::template write_element<0,1>(r)=mat_traits<A>::template read_element<0,1>(a)/b;
+ mat_traits<R>::template write_element<0,2>(r)=mat_traits<A>::template read_element<0,2>(a)/b;
+ mat_traits<R>::template write_element<0,3>(r)=mat_traits<A>::template read_element<0,3>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_ms_defined;
+
+ template <>
+ struct
+ div_ms_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)/=b;
+ mat_traits<A>::template write_element<0,1>(a)/=b;
+ mat_traits<A>::template write_element<0,2>(a)/=b;
+ mat_traits<A>::template write_element<0,3>(a)/=b;
+ mat_traits<A>::template write_element<1,0>(a)/=b;
+ mat_traits<A>::template write_element<1,1>(a)/=b;
+ mat_traits<A>::template write_element<1,2>(a)/=b;
+ mat_traits<A>::template write_element<1,3>(a)/=b;
+ mat_traits<A>::template write_element<2,0>(a)/=b;
+ mat_traits<A>::template write_element<2,1>(a)/=b;
+ mat_traits<A>::template write_element<2,2>(a)/=b;
+ mat_traits<A>::template write_element<2,3>(a)/=b;
+ mat_traits<A>::template write_element<3,0>(a)/=b;
+ mat_traits<A>::template write_element<3,1>(a)/=b;
+ mat_traits<A>::template write_element<3,2>(a)/=b;
+ mat_traits<A>::template write_element<3,3>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_eq_ms_defined;
+
+ template <>
+ struct
+ div_eq_ms_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==1 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)/=b;
+ mat_traits<A>::template write_element<1,0>(a)/=b;
+ mat_traits<A>::template write_element<2,0>(a)/=b;
+ mat_traits<A>::template write_element<3,0>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_eq_ms_defined;
+
+ template <>
+ struct
+ div_eq_ms_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==4 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ mat_traits<A>::template write_element<0,0>(a)/=b;
+ mat_traits<A>::template write_element<0,1>(a)/=b;
+ mat_traits<A>::template write_element<0,2>(a)/=b;
+ mat_traits<A>::template write_element<0,3>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct div_eq_ms_defined;
+
+ template <>
+ struct
+ div_eq_ms_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<R>::rows==4 && mat_traits<A>::rows==4 &&
+ mat_traits<R>::cols==4 && mat_traits<A>::cols==4,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
+ mat_traits<R>::template write_element<0,2>(r) = mat_traits<A>::template read_element<0,2>(a);
+ mat_traits<R>::template write_element<0,3>(r) = mat_traits<A>::template read_element<0,3>(a);
+ mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
+ mat_traits<R>::template write_element<1,1>(r) = mat_traits<A>::template read_element<1,1>(a);
+ mat_traits<R>::template write_element<1,2>(r) = mat_traits<A>::template read_element<1,2>(a);
+ mat_traits<R>::template write_element<1,3>(r) = mat_traits<A>::template read_element<1,3>(a);
+ mat_traits<R>::template write_element<2,0>(r) = mat_traits<A>::template read_element<2,0>(a);
+ mat_traits<R>::template write_element<2,1>(r) = mat_traits<A>::template read_element<2,1>(a);
+ mat_traits<R>::template write_element<2,2>(r) = mat_traits<A>::template read_element<2,2>(a);
+ mat_traits<R>::template write_element<2,3>(r) = mat_traits<A>::template read_element<2,3>(a);
+ mat_traits<R>::template write_element<3,0>(r) = mat_traits<A>::template read_element<3,0>(a);
+ mat_traits<R>::template write_element<3,1>(r) = mat_traits<A>::template read_element<3,1>(a);
+ mat_traits<R>::template write_element<3,2>(r) = mat_traits<A>::template read_element<3,2>(a);
+ mat_traits<R>::template write_element<3,3>(r) = mat_traits<A>::template read_element<3,3>(a);
+ return r;
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE
+ typename enable_if_c<
+ is_mat<R>::value && is_quat<A>::value &&
+ mat_traits<R>::rows==4 && mat_traits<R>::cols==4,
+ R>::type
+ convert_to( A const & q )
+ {
+ typedef typename mat_traits<R>::scalar_type T;
+ T const a=quat_traits<A>::template read_element<0>(q);
+ T const b=quat_traits<A>::template read_element<1>(q);
+ T const c=quat_traits<A>::template read_element<2>(q);
+ T const d=quat_traits<A>::template read_element<3>(q);
+ T const bb = b*b;
+ T const cc = c*c;
+ T const dd = d*d;
+ T const bc = b*c;
+ T const bd = b*d;
+ T const cd = c*d;
+ T const ab = a*b;
+ T const ac = a*c;
+ T const ad = a*d;
+ T const zero = scalar_traits<T>::value(0);
+ T const one = scalar_traits<T>::value(1);
+ T const two = one+one;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = one - two*(cc+dd);
+ mat_traits<R>::template write_element<0,1>(r) = two*(bc-ad);
+ mat_traits<R>::template write_element<0,2>(r) = two*(bd+ac);
+ mat_traits<R>::template write_element<0,3>(r) = zero;
+ mat_traits<R>::template write_element<1,0>(r) = two*(bc+ad);
+ mat_traits<R>::template write_element<1,1>(r) = one - two*(bb+dd);
+ mat_traits<R>::template write_element<1,2>(r) = two*(cd-ab);
+ mat_traits<R>::template write_element<1,3>(r) = zero;
+ mat_traits<R>::template write_element<2,0>(r) = two*(bd-ac);
+ mat_traits<R>::template write_element<2,1>(r) = two*(cd+ab);
+ mat_traits<R>::template write_element<2,2>(r) = one - two*(bb+cc);
+ mat_traits<R>::template write_element<2,3>(r) = zero;
+ mat_traits<R>::template write_element<3,0>(r) = zero;
+ mat_traits<R>::template write_element<3,1>(r) = zero;
+ mat_traits<R>::template write_element<3,2>(r) = zero;
+ mat_traits<R>::template write_element<3,3>(r) = one;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct convert_to_m_defined;
+
+ template <>
+ struct
+ convert_to_m_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<R>::rows==4 && mat_traits<A>::rows==4 &&
+ mat_traits<R>::cols==1 && mat_traits<A>::cols==1,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<1,0>(r) = mat_traits<A>::template read_element<1,0>(a);
+ mat_traits<R>::template write_element<2,0>(r) = mat_traits<A>::template read_element<2,0>(a);
+ mat_traits<R>::template write_element<3,0>(r) = mat_traits<A>::template read_element<3,0>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct convert_to_m_defined;
+
+ template <>
+ struct
+ convert_to_m_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<R>::rows==1 && mat_traits<A>::rows==1 &&
+ mat_traits<R>::cols==4 && mat_traits<A>::cols==4,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ mat_traits<R>::template write_element<0,0>(r) = mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r) = mat_traits<A>::template read_element<0,1>(a);
+ mat_traits<R>::template write_element<0,2>(r) = mat_traits<A>::template read_element<0,2>(a);
+ mat_traits<R>::template write_element<0,3>(r) = mat_traits<A>::template read_element<0,3>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct convert_to_m_defined;
+
+ template <>
+ struct
+ convert_to_m_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
+ mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b) &&
+ mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b) &&
+ mat_traits<A>::template read_element<0,3>(a)==mat_traits<B>::template read_element<0,3>(b) &&
+ mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b) &&
+ mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b) &&
+ mat_traits<A>::template read_element<1,2>(a)==mat_traits<B>::template read_element<1,2>(b) &&
+ mat_traits<A>::template read_element<1,3>(a)==mat_traits<B>::template read_element<1,3>(b) &&
+ mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b) &&
+ mat_traits<A>::template read_element<2,1>(a)==mat_traits<B>::template read_element<2,1>(b) &&
+ mat_traits<A>::template read_element<2,2>(a)==mat_traits<B>::template read_element<2,2>(b) &&
+ mat_traits<A>::template read_element<2,3>(a)==mat_traits<B>::template read_element<2,3>(b) &&
+ mat_traits<A>::template read_element<3,0>(a)==mat_traits<B>::template read_element<3,0>(b) &&
+ mat_traits<A>::template read_element<3,1>(a)==mat_traits<B>::template read_element<3,1>(b) &&
+ mat_traits<A>::template read_element<3,2>(a)==mat_traits<B>::template read_element<3,2>(b) &&
+ mat_traits<A>::template read_element<3,3>(a)==mat_traits<B>::template read_element<3,3>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct eq_mm_defined;
+
+ template <>
+ struct
+ eq_mm_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
+ mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b) &&
+ mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b) &&
+ mat_traits<A>::template read_element<3,0>(a)==mat_traits<B>::template read_element<3,0>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct eq_mm_defined;
+
+ template <>
+ struct
+ eq_mm_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b) &&
+ mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b) &&
+ mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b) &&
+ mat_traits<A>::template read_element<0,3>(a)==mat_traits<B>::template read_element<0,3>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct eq_mm_defined;
+
+ template <>
+ struct
+ eq_mm_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
+ !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b)) ||
+ !(mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b)) ||
+ !(mat_traits<A>::template read_element<0,3>(a)==mat_traits<B>::template read_element<0,3>(b)) ||
+ !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b)) ||
+ !(mat_traits<A>::template read_element<1,1>(a)==mat_traits<B>::template read_element<1,1>(b)) ||
+ !(mat_traits<A>::template read_element<1,2>(a)==mat_traits<B>::template read_element<1,2>(b)) ||
+ !(mat_traits<A>::template read_element<1,3>(a)==mat_traits<B>::template read_element<1,3>(b)) ||
+ !(mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b)) ||
+ !(mat_traits<A>::template read_element<2,1>(a)==mat_traits<B>::template read_element<2,1>(b)) ||
+ !(mat_traits<A>::template read_element<2,2>(a)==mat_traits<B>::template read_element<2,2>(b)) ||
+ !(mat_traits<A>::template read_element<2,3>(a)==mat_traits<B>::template read_element<2,3>(b)) ||
+ !(mat_traits<A>::template read_element<3,0>(a)==mat_traits<B>::template read_element<3,0>(b)) ||
+ !(mat_traits<A>::template read_element<3,1>(a)==mat_traits<B>::template read_element<3,1>(b)) ||
+ !(mat_traits<A>::template read_element<3,2>(a)==mat_traits<B>::template read_element<3,2>(b)) ||
+ !(mat_traits<A>::template read_element<3,3>(a)==mat_traits<B>::template read_element<3,3>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct neq_mm_defined;
+
+ template <>
+ struct
+ neq_mm_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==1 && mat_traits<B>::cols==1,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
+ !(mat_traits<A>::template read_element<1,0>(a)==mat_traits<B>::template read_element<1,0>(b)) ||
+ !(mat_traits<A>::template read_element<2,0>(a)==mat_traits<B>::template read_element<2,0>(b)) ||
+ !(mat_traits<A>::template read_element<3,0>(a)==mat_traits<B>::template read_element<3,0>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct neq_mm_defined;
+
+ template <>
+ struct
+ neq_mm_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==1 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(mat_traits<A>::template read_element<0,0>(a)==mat_traits<B>::template read_element<0,0>(b)) ||
+ !(mat_traits<A>::template read_element<0,1>(a)==mat_traits<B>::template read_element<0,1>(b)) ||
+ !(mat_traits<A>::template read_element<0,2>(a)==mat_traits<B>::template read_element<0,2>(b)) ||
+ !(mat_traits<A>::template read_element<0,3>(a)==mat_traits<B>::template read_element<0,3>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct neq_mm_defined;
+
+ template <>
+ struct
+ neq_mm_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4,
+ deduce_mat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
+ mat_traits<R>::template write_element<0,2>(r)=-mat_traits<A>::template read_element<0,2>(a);
+ mat_traits<R>::template write_element<0,3>(r)=-mat_traits<A>::template read_element<0,3>(a);
+ mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
+ mat_traits<R>::template write_element<1,1>(r)=-mat_traits<A>::template read_element<1,1>(a);
+ mat_traits<R>::template write_element<1,2>(r)=-mat_traits<A>::template read_element<1,2>(a);
+ mat_traits<R>::template write_element<1,3>(r)=-mat_traits<A>::template read_element<1,3>(a);
+ mat_traits<R>::template write_element<2,0>(r)=-mat_traits<A>::template read_element<2,0>(a);
+ mat_traits<R>::template write_element<2,1>(r)=-mat_traits<A>::template read_element<2,1>(a);
+ mat_traits<R>::template write_element<2,2>(r)=-mat_traits<A>::template read_element<2,2>(a);
+ mat_traits<R>::template write_element<2,3>(r)=-mat_traits<A>::template read_element<2,3>(a);
+ mat_traits<R>::template write_element<3,0>(r)=-mat_traits<A>::template read_element<3,0>(a);
+ mat_traits<R>::template write_element<3,1>(r)=-mat_traits<A>::template read_element<3,1>(a);
+ mat_traits<R>::template write_element<3,2>(r)=-mat_traits<A>::template read_element<3,2>(a);
+ mat_traits<R>::template write_element<3,3>(r)=-mat_traits<A>::template read_element<3,3>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_m_defined;
+
+ template <>
+ struct
+ minus_m_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==1,
+ deduce_mat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<1,0>(r)=-mat_traits<A>::template read_element<1,0>(a);
+ mat_traits<R>::template write_element<2,0>(r)=-mat_traits<A>::template read_element<2,0>(a);
+ mat_traits<R>::template write_element<3,0>(r)=-mat_traits<A>::template read_element<3,0>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_m_defined;
+
+ template <>
+ struct
+ minus_m_defined<4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<A>::cols==4,
+ deduce_mat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=-mat_traits<A>::template read_element<0,0>(a);
+ mat_traits<R>::template write_element<0,1>(r)=-mat_traits<A>::template read_element<0,1>(a);
+ mat_traits<R>::template write_element<0,2>(r)=-mat_traits<A>::template read_element<0,2>(a);
+ mat_traits<R>::template write_element<0,3>(r)=-mat_traits<A>::template read_element<0,3>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct minus_m_defined;
+
+ template <>
+ struct
+ minus_m_defined<1,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4,
+ typename mat_traits<A>::scalar_type>::type
+ determinant( A const & a )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ T const a00=mat_traits<A>::template read_element<0,0>(a);
+ T const a01=mat_traits<A>::template read_element<0,1>(a);
+ T const a02=mat_traits<A>::template read_element<0,2>(a);
+ T const a03=mat_traits<A>::template read_element<0,3>(a);
+ T const a10=mat_traits<A>::template read_element<1,0>(a);
+ T const a11=mat_traits<A>::template read_element<1,1>(a);
+ T const a12=mat_traits<A>::template read_element<1,2>(a);
+ T const a13=mat_traits<A>::template read_element<1,3>(a);
+ T const a20=mat_traits<A>::template read_element<2,0>(a);
+ T const a21=mat_traits<A>::template read_element<2,1>(a);
+ T const a22=mat_traits<A>::template read_element<2,2>(a);
+ T const a23=mat_traits<A>::template read_element<2,3>(a);
+ T const a30=mat_traits<A>::template read_element<3,0>(a);
+ T const a31=mat_traits<A>::template read_element<3,1>(a);
+ T const a32=mat_traits<A>::template read_element<3,2>(a);
+ T const a33=mat_traits<A>::template read_element<3,3>(a);
+ T det=(a00*(a11*(a22*a33-a23*a32)-a12*(a21*a33-a23*a31)+a13*(a21*a32-a22*a31))-a01*(a10*(a22*a33-a23*a32)-a12*(a20*a33-a23*a30)+a13*(a20*a32-a22*a30))+a02*(a10*(a21*a33-a23*a31)-a11*(a20*a33-a23*a30)+a13*(a20*a31-a21*a30))-a03*(a10*(a21*a32-a22*a31)-a11*(a20*a32-a22*a30)+a12*(a20*a31-a21*a30)));
+ return det;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::determinant;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct determinant_defined;
+
+ template <>
+ struct
+ determinant_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4 && is_scalar<B>::value,
+ deduce_mat<A> >::type
+ inverse( A const & a, B det )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ BOOST_QVM_ASSERT(det!=scalar_traits<B>::value(0));
+ T const a00=mat_traits<A>::template read_element<0,0>(a);
+ T const a01=mat_traits<A>::template read_element<0,1>(a);
+ T const a02=mat_traits<A>::template read_element<0,2>(a);
+ T const a03=mat_traits<A>::template read_element<0,3>(a);
+ T const a10=mat_traits<A>::template read_element<1,0>(a);
+ T const a11=mat_traits<A>::template read_element<1,1>(a);
+ T const a12=mat_traits<A>::template read_element<1,2>(a);
+ T const a13=mat_traits<A>::template read_element<1,3>(a);
+ T const a20=mat_traits<A>::template read_element<2,0>(a);
+ T const a21=mat_traits<A>::template read_element<2,1>(a);
+ T const a22=mat_traits<A>::template read_element<2,2>(a);
+ T const a23=mat_traits<A>::template read_element<2,3>(a);
+ T const a30=mat_traits<A>::template read_element<3,0>(a);
+ T const a31=mat_traits<A>::template read_element<3,1>(a);
+ T const a32=mat_traits<A>::template read_element<3,2>(a);
+ T const a33=mat_traits<A>::template read_element<3,3>(a);
+ T const f=scalar_traits<T>::value(1)/det;
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)= f*(a11*(a22*a33-a23*a32)-a12*(a21*a33-a23*a31)+a13*(a21*a32-a22*a31));
+ mat_traits<R>::template write_element<0,1>(r)=-f*(a01*(a22*a33-a23*a32)-a02*(a21*a33-a23*a31)+a03*(a21*a32-a22*a31));
+ mat_traits<R>::template write_element<0,2>(r)= f*(a01*(a12*a33-a13*a32)-a02*(a11*a33-a13*a31)+a03*(a11*a32-a12*a31));
+ mat_traits<R>::template write_element<0,3>(r)=-f*(a01*(a12*a23-a13*a22)-a02*(a11*a23-a13*a21)+a03*(a11*a22-a12*a21));
+ mat_traits<R>::template write_element<1,0>(r)=-f*(a10*(a22*a33-a23*a32)-a12*(a20*a33-a23*a30)+a13*(a20*a32-a22*a30));
+ mat_traits<R>::template write_element<1,1>(r)= f*(a00*(a22*a33-a23*a32)-a02*(a20*a33-a23*a30)+a03*(a20*a32-a22*a30));
+ mat_traits<R>::template write_element<1,2>(r)=-f*(a00*(a12*a33-a13*a32)-a02*(a10*a33-a13*a30)+a03*(a10*a32-a12*a30));
+ mat_traits<R>::template write_element<1,3>(r)= f*(a00*(a12*a23-a13*a22)-a02*(a10*a23-a13*a20)+a03*(a10*a22-a12*a20));
+ mat_traits<R>::template write_element<2,0>(r)= f*(a10*(a21*a33-a23*a31)-a11*(a20*a33-a23*a30)+a13*(a20*a31-a21*a30));
+ mat_traits<R>::template write_element<2,1>(r)=-f*(a00*(a21*a33-a23*a31)-a01*(a20*a33-a23*a30)+a03*(a20*a31-a21*a30));
+ mat_traits<R>::template write_element<2,2>(r)= f*(a00*(a11*a33-a13*a31)-a01*(a10*a33-a13*a30)+a03*(a10*a31-a11*a30));
+ mat_traits<R>::template write_element<2,3>(r)=-f*(a00*(a11*a23-a13*a21)-a01*(a10*a23-a13*a20)+a03*(a10*a21-a11*a20));
+ mat_traits<R>::template write_element<3,0>(r)=-f*(a10*(a21*a32-a22*a31)-a11*(a20*a32-a22*a30)+a12*(a20*a31-a21*a30));
+ mat_traits<R>::template write_element<3,1>(r)= f*(a00*(a21*a32-a22*a31)-a01*(a20*a32-a22*a30)+a02*(a20*a31-a21*a30));
+ mat_traits<R>::template write_element<3,2>(r)=-f*(a00*(a11*a32-a12*a31)-a01*(a10*a32-a12*a30)+a02*(a10*a31-a11*a30));
+ mat_traits<R>::template write_element<3,3>(r)= f*(a00*(a11*a22-a12*a21)-a01*(a10*a22-a12*a20)+a02*(a10*a21-a11*a20));
+ return r;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4,
+ deduce_mat<A> >::type
+ inverse( A const & a )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ T det=determinant(a);
+ if( det==scalar_traits<T>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_determinant_error());
+ return inverse(a,det);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::inverse;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct inverse_m_defined;
+
+ template <>
+ struct
+ inverse_m_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ deduce_mat2<A,B,4,4> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
+ Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
+ Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
+ Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
+ Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
+ Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
+ Ta const a30 = mat_traits<A>::template read_element<3,0>(a);
+ Ta const a31 = mat_traits<A>::template read_element<3,1>(a);
+ Ta const a32 = mat_traits<A>::template read_element<3,2>(a);
+ Ta const a33 = mat_traits<A>::template read_element<3,3>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
+ Tb const b03 = mat_traits<B>::template read_element<0,3>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
+ Tb const b13 = mat_traits<B>::template read_element<1,3>(b);
+ Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
+ Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
+ Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
+ Tb const b23 = mat_traits<B>::template read_element<2,3>(b);
+ Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
+ Tb const b31 = mat_traits<B>::template read_element<3,1>(b);
+ Tb const b32 = mat_traits<B>::template read_element<3,2>(b);
+ Tb const b33 = mat_traits<B>::template read_element<3,3>(b);
+ typedef typename deduce_mat2<A,B,4,4>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20+a03*b30;
+ mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11+a02*b21+a03*b31;
+ mat_traits<R>::template write_element<0,2>(r)=a00*b02+a01*b12+a02*b22+a03*b32;
+ mat_traits<R>::template write_element<0,3>(r)=a00*b03+a01*b13+a02*b23+a03*b33;
+ mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10+a12*b20+a13*b30;
+ mat_traits<R>::template write_element<1,1>(r)=a10*b01+a11*b11+a12*b21+a13*b31;
+ mat_traits<R>::template write_element<1,2>(r)=a10*b02+a11*b12+a12*b22+a13*b32;
+ mat_traits<R>::template write_element<1,3>(r)=a10*b03+a11*b13+a12*b23+a13*b33;
+ mat_traits<R>::template write_element<2,0>(r)=a20*b00+a21*b10+a22*b20+a23*b30;
+ mat_traits<R>::template write_element<2,1>(r)=a20*b01+a21*b11+a22*b21+a23*b31;
+ mat_traits<R>::template write_element<2,2>(r)=a20*b02+a21*b12+a22*b22+a23*b32;
+ mat_traits<R>::template write_element<2,3>(r)=a20*b03+a21*b13+a22*b23+a23*b33;
+ mat_traits<R>::template write_element<3,0>(r)=a30*b00+a31*b10+a32*b20+a33*b30;
+ mat_traits<R>::template write_element<3,1>(r)=a30*b01+a31*b11+a32*b21+a33*b31;
+ mat_traits<R>::template write_element<3,2>(r)=a30*b02+a31*b12+a32*b22+a33*b32;
+ mat_traits<R>::template write_element<3,3>(r)=a30*b03+a31*b13+a32*b23+a33*b33;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int CR,int C>
+ struct mul_mm_defined;
+
+ template <>
+ struct
+ mul_mm_defined<4,4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ A &>::type
+ operator*=( A & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
+ Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
+ Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
+ Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
+ Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
+ Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
+ Ta const a30 = mat_traits<A>::template read_element<3,0>(a);
+ Ta const a31 = mat_traits<A>::template read_element<3,1>(a);
+ Ta const a32 = mat_traits<A>::template read_element<3,2>(a);
+ Ta const a33 = mat_traits<A>::template read_element<3,3>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
+ Tb const b03 = mat_traits<B>::template read_element<0,3>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
+ Tb const b13 = mat_traits<B>::template read_element<1,3>(b);
+ Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
+ Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
+ Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
+ Tb const b23 = mat_traits<B>::template read_element<2,3>(b);
+ Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
+ Tb const b31 = mat_traits<B>::template read_element<3,1>(b);
+ Tb const b32 = mat_traits<B>::template read_element<3,2>(b);
+ Tb const b33 = mat_traits<B>::template read_element<3,3>(b);
+ mat_traits<A>::template write_element<0,0>(a)=a00*b00+a01*b10+a02*b20+a03*b30;
+ mat_traits<A>::template write_element<0,1>(a)=a00*b01+a01*b11+a02*b21+a03*b31;
+ mat_traits<A>::template write_element<0,2>(a)=a00*b02+a01*b12+a02*b22+a03*b32;
+ mat_traits<A>::template write_element<0,3>(a)=a00*b03+a01*b13+a02*b23+a03*b33;
+ mat_traits<A>::template write_element<1,0>(a)=a10*b00+a11*b10+a12*b20+a13*b30;
+ mat_traits<A>::template write_element<1,1>(a)=a10*b01+a11*b11+a12*b21+a13*b31;
+ mat_traits<A>::template write_element<1,2>(a)=a10*b02+a11*b12+a12*b22+a13*b32;
+ mat_traits<A>::template write_element<1,3>(a)=a10*b03+a11*b13+a12*b23+a13*b33;
+ mat_traits<A>::template write_element<2,0>(a)=a20*b00+a21*b10+a22*b20+a23*b30;
+ mat_traits<A>::template write_element<2,1>(a)=a20*b01+a21*b11+a22*b21+a23*b31;
+ mat_traits<A>::template write_element<2,2>(a)=a20*b02+a21*b12+a22*b22+a23*b32;
+ mat_traits<A>::template write_element<2,3>(a)=a20*b03+a21*b13+a22*b23+a23*b33;
+ mat_traits<A>::template write_element<3,0>(a)=a30*b00+a31*b10+a32*b20+a33*b30;
+ mat_traits<A>::template write_element<3,1>(a)=a30*b01+a31*b11+a32*b21+a33*b31;
+ mat_traits<A>::template write_element<3,2>(a)=a30*b02+a31*b12+a32*b22+a33*b32;
+ mat_traits<A>::template write_element<3,3>(a)=a30*b03+a31*b13+a32*b23+a33*b33;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_eq_mm_defined;
+
+ template <>
+ struct
+ mul_eq_mm_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==1,
+ deduce_mat2<A,B,4,1> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
+ Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
+ Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
+ Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
+ Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
+ Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
+ Ta const a30 = mat_traits<A>::template read_element<3,0>(a);
+ Ta const a31 = mat_traits<A>::template read_element<3,1>(a);
+ Ta const a32 = mat_traits<A>::template read_element<3,2>(a);
+ Ta const a33 = mat_traits<A>::template read_element<3,3>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
+ Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
+ typedef typename deduce_mat2<A,B,4,1>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==4);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==1);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20+a03*b30;
+ mat_traits<R>::template write_element<1,0>(r)=a10*b00+a11*b10+a12*b20+a13*b30;
+ mat_traits<R>::template write_element<2,0>(r)=a20*b00+a21*b10+a22*b20+a23*b30;
+ mat_traits<R>::template write_element<3,0>(r)=a30*b00+a31*b10+a32*b20+a33*b30;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int CR,int C>
+ struct mul_mm_defined;
+
+ template <>
+ struct
+ mul_mm_defined<4,4,1>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==1 && mat_traits<B>::rows==4 &&
+ mat_traits<A>::cols==4 && mat_traits<B>::cols==4,
+ deduce_mat2<A,B,1,4> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
+ Tb const b03 = mat_traits<B>::template read_element<0,3>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
+ Tb const b13 = mat_traits<B>::template read_element<1,3>(b);
+ Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
+ Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
+ Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
+ Tb const b23 = mat_traits<B>::template read_element<2,3>(b);
+ Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
+ Tb const b31 = mat_traits<B>::template read_element<3,1>(b);
+ Tb const b32 = mat_traits<B>::template read_element<3,2>(b);
+ Tb const b33 = mat_traits<B>::template read_element<3,3>(b);
+ typedef typename deduce_mat2<A,B,1,4>::type R;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::rows==1);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<R>::cols==4);
+ R r;
+ mat_traits<R>::template write_element<0,0>(r)=a00*b00+a01*b10+a02*b20+a03*b30;
+ mat_traits<R>::template write_element<0,1>(r)=a00*b01+a01*b11+a02*b21+a03*b31;
+ mat_traits<R>::template write_element<0,2>(r)=a00*b02+a01*b12+a02*b22+a03*b32;
+ mat_traits<R>::template write_element<0,3>(r)=a00*b03+a01*b13+a02*b23+a03*b33;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int CR,int C>
+ struct mul_mm_defined;
+
+ template <>
+ struct
+ mul_mm_defined<1,4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/swizzle2.hpp b/contrib/restricted/boost/boost/qvm/gen/swizzle2.hpp
index 11c0a4f9f6..a4f6ac27aa 100644
--- a/contrib/restricted/boost/boost/qvm/gen/swizzle2.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/swizzle2.hpp
@@ -1,714 +1,714 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_9673ED9162F6768D4F74A4AD0576876
-#define BOOST_QVM_9673ED9162F6768D4F74A4AD0576876
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/detail/swizzle_traits.hpp>
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > const &
- _11()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > const &
- _01()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > const &>::type
- W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > &>::type
- W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > const &>::type
- Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > &>::type
- Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > const &>::type
- Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > &>::type
- Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>::type
- X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>::type
- X1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>::type
- X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>::type
- X1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > const &
- _10()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > const &
- _00()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > const &>::type
- W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > &>::type
- W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > const &>::type
- Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > &>::type
- Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > const &>::type
- Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > &>::type
- Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>::type
- X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>::type
- X0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>::type
- X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>::type
- X0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > const &>::type
- _1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > &>::type
- _1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > const &>::type
- _0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > &>::type
- _0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > const &>::type
- WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > &>::type
- WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > const &>::type
- ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > &>::type
- ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > const &>::type
- YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > &>::type
- YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > const &>::type
- XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > &>::type
- XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > const &>::type
- _1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > &>::type
- _1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > const &>::type
- _0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > &>::type
- _0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > const &>::type
- WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > &>::type
- WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > const &>::type
- ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > &>::type
- ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > const &>::type
- YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > &>::type
- YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > const &>::type
- XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > &>::type
- XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > const &>::type
- _1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > &>::type
- _1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > const &>::type
- _0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > &>::type
- _0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > const &>::type
- WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > &>::type
- WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > const &>::type
- ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > &>::type
- ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > const &>::type
- YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > &>::type
- YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > const &>::type
- XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > &>::type
- XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>::type
- _1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>::type
- _1X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>::type
- _1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>::type
- _1X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>::type
- _0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>::type
- _0X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>::type
- _0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>::type
- _0X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > const &>::type
- WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > &>::type
- WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > const &>::type
- ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > &>::type
- ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > const &>::type
- YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > &>::type
- YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>::type
- XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>::type
- XX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>::type
- XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>::type
- XX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>(a);
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_9673ED9162F6768D4F74A4AD0576876
+#define BOOST_QVM_9673ED9162F6768D4F74A4AD0576876
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/detail/swizzle_traits.hpp>
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > const &
+ _11()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > const &
+ _01()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > const &>::type
+ W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > &>::type
+ W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > const &>::type
+ Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > &>::type
+ Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > const &>::type
+ Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > &>::type
+ Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>::type
+ X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>::type
+ X1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>::type
+ X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>::type
+ X1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > const &
+ _10()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > const &
+ _00()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > const &>::type
+ W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > &>::type
+ W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > const &>::type
+ Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > &>::type
+ Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > const &>::type
+ Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > &>::type
+ Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>::type
+ X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>::type
+ X0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>::type
+ X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>::type
+ X0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > const &>::type
+ _1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > &>::type
+ _1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > const &>::type
+ _0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > &>::type
+ _0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > const &>::type
+ WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > &>::type
+ WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > const &>::type
+ ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > &>::type
+ ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > const &>::type
+ YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > &>::type
+ YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > const &>::type
+ XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > &>::type
+ XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > const &>::type
+ _1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > &>::type
+ _1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > const &>::type
+ _0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > &>::type
+ _0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > const &>::type
+ WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > &>::type
+ WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > const &>::type
+ ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > &>::type
+ ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > const &>::type
+ YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > &>::type
+ YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > const &>::type
+ XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > &>::type
+ XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > const &>::type
+ _1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > &>::type
+ _1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > const &>::type
+ _0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > &>::type
+ _0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > const &>::type
+ WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > &>::type
+ WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > const &>::type
+ ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > &>::type
+ ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > const &>::type
+ YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > &>::type
+ YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > const &>::type
+ XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > &>::type
+ XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>::type
+ _1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>::type
+ _1X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>::type
+ _1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>::type
+ _1X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>::type
+ _0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>::type
+ _0X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>::type
+ _0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>::type
+ _0X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > const &>::type
+ WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > &>::type
+ WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > const &>::type
+ ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > &>::type
+ ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > const &>::type
+ YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > &>::type
+ YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>::type
+ XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>::type
+ XX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>::type
+ XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>::type
+ XX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > &>(a);
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/swizzle3.hpp b/contrib/restricted/boost/boost/qvm/gen/swizzle3.hpp
index aacba3334f..beacb2681e 100644
--- a/contrib/restricted/boost/boost/qvm/gen/swizzle3.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/swizzle3.hpp
@@ -1,4158 +1,4158 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_FA16BB11ADAE248879FE52DB2543E53C
-#define BOOST_QVM_FA16BB11ADAE248879FE52DB2543E53C
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/detail/swizzle_traits.hpp>
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &
- _111()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &
- _011()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- W11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- W11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- Z11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- Z11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- Y11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- Y11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- X11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- X11( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- X11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- X11( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &
- _101()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &
- _001()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- W01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- W01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- Z01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- Z01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- Y01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- Y01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- X01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- X01( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- X01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- X01( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- _1W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
- _1W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- _0W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
- _0W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- WW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
- WW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- ZW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
- ZW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- YW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
- YW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- XW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
- XW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- _1Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- _1Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- _0Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- _0Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- WZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- WZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- ZZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- ZZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- YZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- YZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- XZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
- XZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- _1Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- _1Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- _0Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- _0Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- WY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- WY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- ZY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- ZY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- YY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- YY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- XY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
- XY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- _1X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- _1X1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
- _1X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
- _1X1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- _0X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- _0X1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
- _0X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
- _0X1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- WX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
- WX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- ZX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
- ZX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- YX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
- YX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- XX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
- XX1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
- XX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
- XX1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &
- _110()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &
- _010()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- W10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- W10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- Z10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- Z10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- Y10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- Y10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- X10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- X10( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- X10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- X10( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &
- _100()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &
- _000()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- W00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- W00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- Z00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- Z00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- Y00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- Y00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- X00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- X00( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- X00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- X00( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- _1W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
- _1W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- _0W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
- _0W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- WW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
- WW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- ZW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
- ZW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- YW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
- YW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- XW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
- XW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- _1Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- _1Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- _0Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- _0Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- WZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- WZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- ZZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- ZZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- YZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- YZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- XZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
- XZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- _1Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- _1Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- _0Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- _0Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- WY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- WY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- ZY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- ZY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- YY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- YY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- XY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
- XY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- _1X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- _1X0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
- _1X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
- _1X0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- _0X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- _0X0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
- _0X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
- _0X0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- WX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
- WX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- ZX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
- ZX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- YX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
- YX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- XX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
- XX0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
- XX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
- XX0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _11W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
- _11W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _01W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
- _01W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- W1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
- W1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- Z1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
- Z1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- Y1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
- Y1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- X1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
- X1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _10W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
- _10W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _00W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
- _00W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- W0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
- W0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- Z0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
- Z0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- Y0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
- Y0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- X0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
- X0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _1WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
- _1WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _0WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
- _0WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
- WWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
- WWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
- ZWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
- ZWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
- YWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
- YWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
- XWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
- XWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _1ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
- _1ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _0ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
- _0ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- WZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
- WZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- ZZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
- ZZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- YZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
- YZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
- XZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
- XZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _1YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
- _1YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _0YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
- _0YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- WYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
- WYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- ZYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
- ZYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- YYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
- YYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
- XYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
- XYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _1XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
- _1XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
- _0XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
- _0XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
- WXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
- WXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
- ZXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
- ZXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
- YXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
- YXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
- XXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
- XXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _11Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
- _11Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _01Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
- _01Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- W1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
- W1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- Z1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
- Z1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- Y1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
- Y1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- X1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
- X1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _10Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
- _10Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _00Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
- _00Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- W0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
- W0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- Z0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
- Z0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- Y0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
- Y0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- X0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
- X0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _1WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
- _1WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _0WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
- _0WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
- WWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
- WWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
- ZWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
- ZWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
- YWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
- YWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
- XWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
- XWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _1ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
- _1ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _0ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
- _0ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- WZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
- WZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- ZZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
- ZZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- YZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
- YZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
- XZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
- XZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _1YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
- _1YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _0YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
- _0YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- WYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
- WYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- ZYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
- ZYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- YYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
- YYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
- XYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
- XYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _1XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
- _1XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
- _0XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
- _0XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
- WXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
- WXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
- ZXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
- ZXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
- YXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
- YXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
- XXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
- XXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _11Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
- _11Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _01Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
- _01Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- W1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
- W1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- Z1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
- Z1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- Y1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
- Y1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- X1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
- X1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _10Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
- _10Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _00Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
- _00Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- W0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
- W0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- Z0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
- Z0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- Y0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
- Y0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- X0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
- X0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _1WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
- _1WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _0WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
- _0WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
- WWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
- WWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
- ZWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
- ZWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
- YWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
- YWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
- XWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
- XWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _1ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
- _1ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _0ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
- _0ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- WZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
- WZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- ZZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
- ZZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- YZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
- YZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
- XZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
- XZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _1YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
- _1YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _0YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
- _0YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- WYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
- WYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- ZYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
- ZYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- YYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
- YYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
- XYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
- XYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _1XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
- _1XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
- _0XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
- _0XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
- WXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
- WXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
- ZXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
- ZXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
- YXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
- YXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
- XXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
- XXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _11X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _11X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
- _11X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
- _11X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _01X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _01X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
- _01X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
- _01X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- W1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
- W1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- Z1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
- Z1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- Y1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
- Y1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- X1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- X1X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
- X1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
- X1X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _10X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _10X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
- _10X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
- _10X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _00X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _00X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
- _00X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
- _00X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- W0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
- W0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- Z0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
- Z0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- Y0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
- Y0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- X0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- X0X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
- X0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
- X0X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _1WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
- _1WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _0WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
- _0WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
- WWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
- WWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
- ZWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
- ZWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
- YWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
- YWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
- XWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
- XWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _1ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
- _1ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _0ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
- _0ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- WZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
- WZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- ZZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
- ZZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- YZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
- YZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
- XZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
- XZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _1YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
- _1YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _0YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
- _0YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- WYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
- WYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- ZYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
- ZYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- YYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
- YYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
- XYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
- XYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _1XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _1XX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
- _1XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
- _1XX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _0XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
- _0XX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
- _0XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
- _0XX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
- WXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
- WXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
- ZXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
- ZXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
- YXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
- YXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
- XXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
- XXX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
- XXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
- XXX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_FA16BB11ADAE248879FE52DB2543E53C
+#define BOOST_QVM_FA16BB11ADAE248879FE52DB2543E53C
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/detail/swizzle_traits.hpp>
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &
+ _111()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &
+ _011()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ W11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ W11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ Z11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ Z11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ Y11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ Y11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ X11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ X11( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ X11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ X11( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &
+ _101()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &
+ _001()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ W01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ W01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ Z01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ Z01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ Y01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ Y01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ X01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ X01( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ X01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ X01( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ _1W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ _1W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ _0W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ _0W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ WW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ WW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ ZW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ ZW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ YW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ YW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ XW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ XW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ _1Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ _1Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ _0Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ _0Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ WZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ WZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ ZZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ ZZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ YZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ YZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ XZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ XZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ _1Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ _1Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ _0Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ _0Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ WY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ WY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ ZY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ ZY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ YY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ YY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ XY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ XY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ _1X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ _1X1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ _1X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ _1X1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ _0X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ _0X1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ _0X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ _0X1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ WX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ WX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ ZX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ ZX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ YX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ YX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ XX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>::type
+ XX1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ XX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>::type
+ XX1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &
+ _110()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &
+ _010()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ W10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ W10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ Z10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ Z10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ Y10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ Y10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ X10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ X10( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ X10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ X10( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &
+ _100()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &
+ _000()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ W00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ W00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ Z00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ Z00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ Y00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ Y00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ X00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ X00( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ X00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ X00( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ _1W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ _1W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ _0W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ _0W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ WW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ WW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ ZW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ ZW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ YW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ YW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ XW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ XW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ _1Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ _1Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ _0Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ _0Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ WZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ WZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ ZZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ ZZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ YZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ YZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ XZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ XZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ _1Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ _1Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ _0Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ _0Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ WY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ WY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ ZY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ ZY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ YY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ YY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ XY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ XY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ _1X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ _1X0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ _1X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ _1X0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ _0X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ _0X0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ _0X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ _0X0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ WX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ WX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ ZX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ ZX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ YX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ YX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ XX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>::type
+ XX0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ XX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>::type
+ XX0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _11W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _11W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _01W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _01W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ W1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ W1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ Z1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ Z1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ Y1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ Y1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ X1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ X1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _10W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _10W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _00W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _00W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ W0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ W0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ Z0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ Z0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ Y0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ Y0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ X0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ X0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _1WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _1WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _0WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _0WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ WWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
+ WWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ ZWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
+ ZWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ YWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
+ YWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ XWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>::type
+ XWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _1ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _1ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _0ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _0ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ WZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ WZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ ZZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ ZZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ YZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ YZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ XZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>::type
+ XZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _1YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _1YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _0YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _0YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ WYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ WYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ ZYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ ZYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ YYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ YYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ XYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>::type
+ XYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _1XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _1XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ _0XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
+ _0XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ WXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
+ WXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ ZXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
+ ZXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ YXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
+ YXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>::type
+ XXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>::type
+ XXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _11Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _11Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _01Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _01Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ W1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ W1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ Z1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ Z1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ Y1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ Y1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ X1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ X1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _10Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _10Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _00Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _00Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ W0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ W0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ Z0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ Z0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ Y0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ Y0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ X0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ X0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _1WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _1WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _0WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _0WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ WWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
+ WWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ ZWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
+ ZWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ YWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
+ YWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ XWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>::type
+ XWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _1ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _1ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _0ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _0ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ WZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ WZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ ZZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ ZZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ YZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ YZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ XZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>::type
+ XZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _1YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _1YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _0YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _0YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ WYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ WYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ ZYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ ZYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ YYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ YYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ XYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>::type
+ XYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _1XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _1XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ _0XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
+ _0XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ WXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
+ WXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ ZXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
+ ZXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ YXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
+ YXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>::type
+ XXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>::type
+ XXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _11Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _11Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _01Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _01Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ W1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ W1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ Z1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ Z1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ Y1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ Y1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ X1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ X1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _10Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _10Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _00Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _00Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ W0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ W0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ Z0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ Z0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ Y0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ Y0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ X0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ X0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _1WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _1WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _0WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _0WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ WWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
+ WWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ ZWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
+ ZWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ YWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
+ YWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ XWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>::type
+ XWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _1ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _1ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _0ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _0ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ WZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ WZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ ZZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ ZZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ YZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ YZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ XZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>::type
+ XZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _1YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _1YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _0YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _0YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ WYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ WYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ ZYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ ZYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ YYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ YYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ XYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>::type
+ XYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _1XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _1XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ _0XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
+ _0XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ WXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
+ WXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ ZXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
+ ZXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ YXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
+ YXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>::type
+ XXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>::type
+ XXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _11X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _11X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _11X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _11X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _01X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _01X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _01X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _01X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ W1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ W1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ Z1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ Z1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ Y1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ Y1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ X1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ X1X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ X1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ X1X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _10X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _10X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _10X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _10X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _00X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _00X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _00X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _00X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ W0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ W0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ Z0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ Z0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ Y0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ Y0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ X0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ X0X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ X0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ X0X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _1WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _1WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _0WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _0WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ WWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
+ WWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ ZWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
+ ZWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ YWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
+ YWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ XWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>::type
+ XWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _1ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _1ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _0ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _0ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ WZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ WZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ ZZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ ZZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ YZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ YZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ XZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>::type
+ XZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _1YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _1YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _0YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _0YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ WYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ WYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ ZYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ ZYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ YYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ YYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ XYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>::type
+ XYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _1XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _1XX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _1XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _1XX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _0XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ _0XX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _0XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
+ _0XX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ WXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
+ WXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ ZXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
+ ZXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ YXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
+ YXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ XXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>::type
+ XXX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
+ XXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>::type
+ XXX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > &>(a);
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/swizzle4.hpp b/contrib/restricted/boost/boost/qvm/gen/swizzle4.hpp
index b6b2951121..c400a12a6f 100644
--- a/contrib/restricted/boost/boost/qvm/gen/swizzle4.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/swizzle4.hpp
@@ -1,24330 +1,24330 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_F445D3D828CEBF5C560593D97278A59
-#define BOOST_QVM_F445D3D828CEBF5C560593D97278A59
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/detail/swizzle_traits.hpp>
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &
- _1111()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &
- _0111()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W111( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W111( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z111( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z111( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y111( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y111( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X111( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X111( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X111( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X111( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &
- _1011()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &
- _0011()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W011( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W011( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z011( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z011( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y011( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y011( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X011( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X011( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X011( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X011( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1W11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1W11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0W11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0W11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WW11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WW11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZW11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZW11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YW11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YW11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XW11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XW11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1Z11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1Z11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0Z11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0Z11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WZ11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WZ11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZZ11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZZ11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YZ11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YZ11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XZ11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XZ11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1Y11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1Y11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0Y11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0Y11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WY11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WY11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZY11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZY11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YY11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YY11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XY11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XY11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1X11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1X11( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1X11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1X11( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0X11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0X11( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0X11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0X11( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WX11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WX11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZX11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZX11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YX11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YX11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XX11( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XX11( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XX11( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XX11( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &
- _1101()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &
- _0101()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W101( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W101( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z101( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z101( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y101( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y101( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X101( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X101( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X101( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X101( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &
- _1001()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &
- _0001()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W001( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W001( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z001( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z001( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y001( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y001( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X001( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X001( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X001( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X001( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1W01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1W01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0W01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0W01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WW01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WW01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZW01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZW01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YW01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YW01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XW01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XW01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1Z01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1Z01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0Z01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0Z01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WZ01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WZ01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZZ01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZZ01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YZ01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YZ01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XZ01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XZ01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1Y01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1Y01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0Y01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0Y01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WY01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WY01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZY01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZY01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YY01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YY01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XY01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XY01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1X01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1X01( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1X01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1X01( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0X01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0X01( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0X01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0X01( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WX01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WX01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZX01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZX01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YX01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YX01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XX01( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XX01( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XX01( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XX01( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _11W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _11W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _01W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _01W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W1W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W1W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z1W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z1W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y1W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y1W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X1W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X1W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _10W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _10W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _00W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _00W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W0W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W0W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z0W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z0W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y0W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y0W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X0W1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X0W1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1WW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1WW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0WW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0WW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WWW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WWW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZWW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZWW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YWW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YWW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XWW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XWW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1ZW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1ZW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0ZW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0ZW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WZW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WZW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZZW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZZW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YZW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YZW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XZW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XZW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1YW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1YW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0YW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0YW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WYW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WYW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZYW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZYW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YYW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YYW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XYW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XYW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1XW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1XW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0XW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0XW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WXW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WXW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZXW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZXW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YXW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YXW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XXW1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XXW1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _11Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _11Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _01Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _01Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W1Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W1Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z1Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z1Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y1Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y1Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X1Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X1Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _10Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _10Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _00Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _00Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W0Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W0Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z0Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z0Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y0Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y0Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X0Z1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X0Z1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1WZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1WZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0WZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0WZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WWZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WWZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZWZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZWZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YWZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YWZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XWZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XWZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1ZZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1ZZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0ZZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0ZZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WZZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WZZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZZZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZZZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YZZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YZZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XZZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XZZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1YZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1YZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0YZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0YZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WYZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WYZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZYZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZYZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YYZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YYZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XYZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XYZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1XZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1XZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0XZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0XZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WXZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WXZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZXZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZXZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YXZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YXZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XXZ1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XXZ1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _11Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _11Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _01Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _01Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W1Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W1Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z1Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z1Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y1Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y1Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X1Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X1Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _10Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _10Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _00Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _00Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W0Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W0Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z0Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z0Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y0Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y0Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X0Y1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X0Y1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1WY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1WY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0WY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0WY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WWY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WWY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZWY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZWY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YWY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YWY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XWY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XWY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1ZY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1ZY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0ZY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0ZY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WZY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WZY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZZY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZZY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YZY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YZY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XZY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XZY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1YY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1YY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0YY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0YY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WYY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WYY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZYY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZYY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YYY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YYY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XYY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XYY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1XY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1XY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0XY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0XY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WXY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WXY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZXY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZXY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YXY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YXY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XXY1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XXY1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _11X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _11X1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _11X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _11X1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _01X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _01X1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _01X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _01X1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W1X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W1X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z1X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z1X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y1X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y1X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X1X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X1X1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X1X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X1X1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _10X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _10X1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _10X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _10X1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _00X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _00X1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _00X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _00X1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- W0X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- W0X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Z0X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Z0X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- Y0X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- Y0X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X0X1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- X0X1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X0X1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- X0X1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1WX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1WX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0WX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0WX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WWX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WWX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZWX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZWX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YWX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YWX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XWX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XWX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1ZX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1ZX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0ZX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0ZX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WZX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WZX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZZX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZZX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YZX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YZX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XZX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XZX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1YX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1YX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0YX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0YX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WYX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WYX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZYX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZYX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YYX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YYX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XYX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XYX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1XX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _1XX1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1XX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _1XX1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0XX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- _0XX1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0XX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- _0XX1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- WXX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- WXX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- ZXX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- ZXX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- YXX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- YXX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XXX1( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
- XXX1( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XXX1( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
- XXX1( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &
- _1110()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &
- _0110()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W110( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W110( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z110( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z110( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y110( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y110( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X110( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X110( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X110( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X110( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &
- _1010()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &
- _0010()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W010( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W010( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z010( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z010( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y010( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y010( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X010( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X010( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X010( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X010( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1W10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1W10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0W10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0W10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WW10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WW10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZW10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZW10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YW10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YW10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XW10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XW10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1Z10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1Z10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0Z10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0Z10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WZ10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WZ10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZZ10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZZ10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YZ10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YZ10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XZ10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XZ10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1Y10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1Y10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0Y10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0Y10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WY10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WY10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZY10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZY10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YY10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YY10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XY10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XY10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1X10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1X10( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1X10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1X10( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0X10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0X10( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0X10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0X10( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WX10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WX10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZX10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZX10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YX10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YX10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XX10( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XX10( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XX10( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XX10( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &
- _1100()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &
- _0100()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W100( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W100( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z100( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z100( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y100( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y100( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X100( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X100( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X100( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X100( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &
- _1000()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
- }
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &
- _0000()
- {
- return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W000( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W000( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z000( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z000( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y000( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y000( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X000( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X000( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X000( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X000( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1W00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1W00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0W00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0W00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WW00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WW00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZW00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZW00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YW00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YW00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XW00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XW00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1Z00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1Z00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0Z00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0Z00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WZ00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WZ00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZZ00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZZ00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YZ00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YZ00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XZ00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XZ00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1Y00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1Y00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0Y00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0Y00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WY00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WY00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZY00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZY00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YY00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YY00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XY00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XY00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1X00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1X00( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1X00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1X00( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0X00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0X00( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0X00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0X00( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WX00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WX00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZX00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZX00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YX00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YX00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XX00( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XX00( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XX00( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XX00( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _11W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _11W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _01W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _01W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W1W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W1W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z1W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z1W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y1W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y1W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X1W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X1W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _10W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _10W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _00W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _00W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W0W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W0W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z0W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z0W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y0W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y0W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X0W0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X0W0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1WW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1WW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0WW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0WW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WWW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WWW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZWW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZWW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YWW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YWW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XWW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XWW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1ZW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1ZW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0ZW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0ZW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WZW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WZW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZZW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZZW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YZW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YZW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XZW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XZW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1YW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1YW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0YW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0YW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WYW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WYW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZYW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZYW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YYW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YYW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XYW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XYW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1XW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1XW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0XW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0XW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WXW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WXW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZXW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZXW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YXW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YXW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XXW0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XXW0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _11Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _11Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _01Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _01Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W1Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W1Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z1Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z1Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y1Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y1Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X1Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X1Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _10Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _10Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _00Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _00Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W0Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W0Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z0Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z0Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y0Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y0Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X0Z0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X0Z0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1WZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1WZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0WZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0WZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WWZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WWZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZWZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZWZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YWZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YWZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XWZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XWZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1ZZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1ZZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0ZZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0ZZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WZZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WZZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZZZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZZZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YZZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YZZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XZZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XZZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1YZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1YZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0YZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0YZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WYZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WYZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZYZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZYZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YYZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YYZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XYZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XYZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1XZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1XZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0XZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0XZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WXZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WXZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZXZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZXZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YXZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YXZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XXZ0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XXZ0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _11Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _11Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _01Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _01Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W1Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W1Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z1Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z1Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y1Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y1Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X1Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X1Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _10Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _10Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _00Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _00Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W0Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W0Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z0Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z0Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y0Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y0Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X0Y0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X0Y0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1WY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1WY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0WY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0WY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WWY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WWY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZWY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZWY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YWY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YWY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XWY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XWY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1ZY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1ZY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0ZY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0ZY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WZY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WZY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZZY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZZY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YZY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YZY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XZY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XZY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1YY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1YY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0YY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0YY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WYY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WYY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZYY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZYY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YYY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YYY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XYY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XYY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1XY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1XY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0XY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0XY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WXY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WXY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZXY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZXY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YXY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YXY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XXY0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XXY0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _11X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _11X0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _11X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _11X0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _01X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _01X0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _01X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _01X0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W1X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W1X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z1X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z1X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y1X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y1X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X1X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X1X0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X1X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X1X0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _10X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _10X0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _10X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _10X0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _00X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _00X0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _00X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _00X0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- W0X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- W0X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Z0X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Z0X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- Y0X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- Y0X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X0X0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- X0X0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X0X0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- X0X0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1WX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1WX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0WX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0WX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WWX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WWX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZWX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZWX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YWX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YWX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XWX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XWX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1ZX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1ZX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0ZX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0ZX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WZX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WZX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZZX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZZX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YZX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YZX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XZX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XZX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1YX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1YX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0YX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0YX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WYX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WYX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZYX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZYX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YYX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YYX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XYX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XYX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1XX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _1XX0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1XX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _1XX0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0XX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- _0XX0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0XX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- _0XX0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- WXX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- WXX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- ZXX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- ZXX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- YXX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- YXX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XXX0( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
- XXX0( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XXX0( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
- XXX0( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _111W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _111W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _011W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _011W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W11W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W11W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z11W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z11W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y11W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y11W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X11W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X11W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _101W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _101W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _001W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _001W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W01W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W01W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z01W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z01W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y01W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y01W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X01W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X01W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1W1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1W1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0W1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0W1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WW1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WW1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZW1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZW1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YW1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YW1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XW1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XW1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1Z1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1Z1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0Z1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0Z1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WZ1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WZ1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZZ1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZZ1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YZ1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YZ1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XZ1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XZ1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1Y1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1Y1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0Y1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0Y1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WY1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WY1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZY1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZY1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YY1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YY1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XY1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XY1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1X1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1X1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0X1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0X1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WX1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WX1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZX1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZX1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YX1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YX1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XX1W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XX1W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _110W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _110W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _010W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _010W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W10W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W10W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z10W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z10W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y10W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y10W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X10W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X10W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _100W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _100W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _000W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _000W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W00W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W00W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z00W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z00W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y00W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y00W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X00W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X00W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1W0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1W0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0W0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0W0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WW0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WW0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZW0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZW0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YW0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YW0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XW0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XW0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1Z0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1Z0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0Z0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0Z0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WZ0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WZ0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZZ0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZZ0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YZ0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YZ0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XZ0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XZ0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1Y0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1Y0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0Y0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0Y0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WY0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WY0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZY0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZY0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YY0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YY0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XY0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XY0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1X0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1X0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0X0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0X0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WX0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WX0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZX0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZX0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YX0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YX0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XX0W( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XX0W( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _11WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _11WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _01WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _01WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W1WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W1WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z1WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z1WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y1WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y1WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X1WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X1WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _10WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _10WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _00WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _00WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W0WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W0WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z0WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z0WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y0WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y0WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X0WW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X0WW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1WWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1WWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0WWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0WWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WWWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WWWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZWWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZWWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YWWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YWWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XWWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XWWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1ZWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1ZWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0ZWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0ZWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WZWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WZWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZZWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZZWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YZWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YZWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XZWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XZWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1YWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1YWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0YWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0YWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WYWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WYWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZYWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZYWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YYWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YYWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XYWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XYWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1XWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1XWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0XWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0XWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WXWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WXWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZXWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZXWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YXWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YXWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XXWW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XXWW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _11ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _11ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _01ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _01ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W1ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W1ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z1ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z1ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y1ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y1ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X1ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X1ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _10ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _10ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _00ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _00ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W0ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W0ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z0ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z0ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y0ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y0ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X0ZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X0ZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1WZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1WZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0WZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0WZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WWZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WWZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZWZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZWZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YWZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YWZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XWZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XWZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1ZZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1ZZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0ZZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0ZZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WZZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WZZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZZZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZZZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YZZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YZZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XZZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XZZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1YZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1YZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0YZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0YZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WYZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WYZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZYZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZYZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YYZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YYZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XYZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XYZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1XZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1XZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0XZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0XZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WXZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WXZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZXZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZXZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YXZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YXZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XXZW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XXZW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _11YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _11YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _01YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _01YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W1YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W1YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z1YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z1YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y1YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y1YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X1YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X1YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _10YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _10YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _00YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _00YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W0YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W0YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z0YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z0YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y0YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y0YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X0YW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X0YW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1WYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1WYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0WYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0WYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WWYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WWYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZWYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZWYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YWYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YWYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XWYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XWYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1ZYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1ZYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0ZYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0ZYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WZYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WZYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZZYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZZYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YZYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YZYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XZYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XZYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1YYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1YYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0YYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0YYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WYYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WYYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZYYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZYYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YYYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YYYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XYYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XYYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1XYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1XYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0XYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0XYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WXYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WXYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZXYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZXYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YXYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YXYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XXYW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XXYW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _11XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _11XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _01XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _01XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W1XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W1XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z1XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z1XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y1XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y1XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X1XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X1XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _10XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _10XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _00XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _00XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- W0XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- W0XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Z0XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Z0XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- Y0XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- Y0XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- X0XW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- X0XW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1WXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1WXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0WXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0WXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WWXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WWXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZWXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZWXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YWXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YWXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XWXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XWXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1ZXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1ZXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0ZXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0ZXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WZXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WZXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZZXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZZXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YZXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YZXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XZXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XZXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1YXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1YXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0YXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0YXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WYXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WYXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZYXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZYXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YYXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YYXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XYXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XYXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _1XXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _1XXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- _0XXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- _0XXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- WXXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- WXXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- ZXXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- ZXXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- YXXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- YXXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
- XXXW( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
- XXXW( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _111Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _111Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _011Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _011Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W11Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W11Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z11Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z11Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y11Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y11Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X11Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X11Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _101Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _101Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _001Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _001Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W01Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W01Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z01Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z01Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y01Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y01Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X01Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X01Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1W1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1W1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0W1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0W1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WW1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WW1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZW1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZW1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YW1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YW1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XW1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XW1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1Z1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1Z1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0Z1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0Z1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WZ1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WZ1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZZ1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZZ1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YZ1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YZ1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XZ1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XZ1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1Y1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1Y1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0Y1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0Y1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WY1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WY1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZY1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZY1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YY1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YY1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XY1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XY1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1X1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1X1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0X1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0X1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WX1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WX1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZX1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZX1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YX1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YX1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XX1Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XX1Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _110Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _110Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _010Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _010Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W10Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W10Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z10Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z10Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y10Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y10Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X10Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X10Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _100Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _100Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _000Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _000Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W00Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W00Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z00Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z00Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y00Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y00Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X00Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X00Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1W0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1W0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0W0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0W0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WW0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WW0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZW0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZW0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YW0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YW0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XW0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XW0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1Z0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1Z0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0Z0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0Z0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WZ0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WZ0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZZ0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZZ0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YZ0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YZ0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XZ0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XZ0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1Y0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1Y0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0Y0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0Y0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WY0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WY0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZY0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZY0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YY0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YY0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XY0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XY0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1X0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1X0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0X0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0X0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WX0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WX0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZX0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZX0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YX0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YX0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XX0Z( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XX0Z( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _11WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _11WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _01WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _01WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W1WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W1WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z1WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z1WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y1WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y1WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X1WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X1WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _10WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _10WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _00WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _00WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W0WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W0WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z0WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z0WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y0WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y0WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X0WZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X0WZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1WWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1WWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0WWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0WWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WWWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WWWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZWWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZWWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YWWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YWWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XWWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XWWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1ZWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1ZWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0ZWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0ZWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WZWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WZWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZZWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZZWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YZWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YZWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XZWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XZWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1YWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1YWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0YWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0YWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WYWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WYWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZYWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZYWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YYWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YYWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XYWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XYWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1XWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1XWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0XWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0XWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WXWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WXWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZXWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZXWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YXWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YXWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XXWZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XXWZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _11ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _11ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _01ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _01ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W1ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W1ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z1ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z1ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y1ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y1ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X1ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X1ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _10ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _10ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _00ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _00ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W0ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W0ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z0ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z0ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y0ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y0ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X0ZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X0ZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1WZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1WZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0WZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0WZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WWZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WWZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZWZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZWZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YWZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YWZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XWZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XWZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1ZZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1ZZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0ZZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0ZZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WZZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WZZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZZZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZZZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YZZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YZZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XZZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XZZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1YZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1YZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0YZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0YZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WYZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WYZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZYZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZYZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YYZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YYZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XYZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XYZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1XZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1XZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0XZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0XZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WXZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WXZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZXZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZXZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YXZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YXZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XXZZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XXZZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _11YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _11YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _01YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _01YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W1YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W1YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z1YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z1YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y1YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y1YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X1YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X1YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _10YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _10YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _00YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _00YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W0YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W0YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z0YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z0YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y0YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y0YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X0YZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X0YZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1WYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1WYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0WYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0WYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WWYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WWYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZWYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZWYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YWYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YWYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XWYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XWYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1ZYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1ZYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0ZYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0ZYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WZYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WZYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZZYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZZYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YZYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YZYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XZYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XZYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1YYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1YYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0YYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0YYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WYYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WYYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZYYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZYYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YYYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YYYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XYYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XYYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1XYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1XYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0XYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0XYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WXYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WXYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZXYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZXYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YXYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YXYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XXYZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XXYZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _11XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _11XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _01XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _01XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W1XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W1XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z1XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z1XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y1XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y1XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X1XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X1XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _10XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _10XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _00XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _00XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- W0XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- W0XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Z0XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Z0XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- Y0XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- Y0XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- X0XZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- X0XZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1WXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1WXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0WXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0WXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WWXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WWXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZWXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZWXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YWXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YWXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XWXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XWXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1ZXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1ZXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0ZXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0ZXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WZXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WZXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZZXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZZXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YZXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YZXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XZXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XZXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1YXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1YXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0YXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0YXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WYXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WYXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZYXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZYXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YYXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YYXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XYXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XYXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _1XXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _1XXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- _0XXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- _0XXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- WXXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- WXXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- ZXXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- ZXXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- YXXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- YXXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
- XXXZ( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
- XXXZ( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _111Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _111Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _011Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _011Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W11Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W11Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z11Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z11Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y11Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y11Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X11Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X11Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _101Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _101Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _001Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _001Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W01Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W01Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z01Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z01Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y01Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y01Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X01Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X01Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1W1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1W1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0W1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0W1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WW1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WW1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZW1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZW1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YW1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YW1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XW1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XW1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1Z1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1Z1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0Z1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0Z1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WZ1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WZ1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZZ1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZZ1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YZ1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YZ1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XZ1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XZ1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1Y1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1Y1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0Y1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0Y1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WY1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WY1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZY1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZY1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YY1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YY1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XY1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XY1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1X1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1X1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0X1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0X1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WX1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WX1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZX1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZX1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YX1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YX1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XX1Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XX1Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _110Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _110Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _010Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _010Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W10Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W10Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z10Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z10Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y10Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y10Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X10Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X10Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _100Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _100Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _000Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _000Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W00Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W00Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z00Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z00Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y00Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y00Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X00Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X00Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1W0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1W0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0W0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0W0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WW0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WW0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZW0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZW0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YW0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YW0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XW0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XW0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1Z0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1Z0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0Z0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0Z0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WZ0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WZ0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZZ0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZZ0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YZ0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YZ0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XZ0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XZ0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1Y0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1Y0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0Y0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0Y0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WY0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WY0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZY0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZY0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YY0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YY0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XY0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XY0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1X0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1X0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0X0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0X0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WX0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WX0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZX0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZX0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YX0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YX0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XX0Y( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XX0Y( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _11WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _11WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _01WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _01WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W1WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W1WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z1WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z1WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y1WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y1WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X1WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X1WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _10WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _10WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _00WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _00WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W0WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W0WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z0WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z0WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y0WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y0WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X0WY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X0WY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1WWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1WWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0WWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0WWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WWWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WWWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZWWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZWWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YWWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YWWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XWWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XWWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1ZWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1ZWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0ZWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0ZWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WZWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WZWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZZWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZZWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YZWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YZWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XZWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XZWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1YWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1YWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0YWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0YWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WYWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WYWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZYWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZYWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YYWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YYWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XYWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XYWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1XWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1XWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0XWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0XWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WXWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WXWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZXWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZXWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YXWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YXWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XXWY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XXWY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _11ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _11ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _01ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _01ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W1ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W1ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z1ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z1ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y1ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y1ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X1ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X1ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _10ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _10ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _00ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _00ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W0ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W0ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z0ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z0ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y0ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y0ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X0ZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X0ZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1WZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1WZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0WZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0WZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WWZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WWZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZWZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZWZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YWZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YWZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XWZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XWZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1ZZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1ZZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0ZZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0ZZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WZZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WZZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZZZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZZZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YZZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YZZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XZZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XZZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1YZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1YZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0YZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0YZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WYZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WYZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZYZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZYZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YYZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YYZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XYZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XYZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1XZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1XZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0XZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0XZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WXZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WXZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZXZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZXZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YXZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YXZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XXZY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XXZY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _11YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _11YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _01YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _01YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W1YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W1YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z1YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z1YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y1YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y1YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X1YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X1YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _10YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _10YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _00YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _00YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W0YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W0YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z0YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z0YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y0YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y0YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X0YY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X0YY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1WYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1WYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0WYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0WYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WWYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WWYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZWYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZWYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YWYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YWYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XWYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XWYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1ZYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1ZYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0ZYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0ZYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WZYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WZYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZZYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZZYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YZYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YZYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XZYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XZYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1YYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1YYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0YYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0YYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WYYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WYYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZYYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZYYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YYYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YYYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XYYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XYYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1XYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1XYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0XYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0XYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WXYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WXYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZXYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZXYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YXYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YXYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XXYY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XXYY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _11XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _11XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _01XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _01XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W1XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W1XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z1XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z1XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y1XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y1XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X1XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X1XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _10XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _10XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _00XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _00XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- W0XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- W0XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Z0XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Z0XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- Y0XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- Y0XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- X0XY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- X0XY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1WXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1WXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0WXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0WXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WWXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WWXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZWXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZWXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YWXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YWXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XWXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XWXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1ZXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1ZXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0ZXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0ZXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WZXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WZXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZZXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZZXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YZXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YZXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XZXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XZXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1YXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1YXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0YXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0YXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WYXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WYXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZYXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZYXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YYXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YYXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XYXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XYXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _1XXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _1XXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- _0XXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- _0XXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- WXXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- WXXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- ZXXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- ZXXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- YXXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- YXXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
- XXXY( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
- XXXY( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _111X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _111X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _111X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _111X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _011X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _011X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _011X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _011X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W11X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W11X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z11X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z11X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y11X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y11X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X11X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X11X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X11X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X11X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _101X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _101X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _101X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _101X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _001X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _001X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _001X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _001X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W01X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W01X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z01X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z01X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y01X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y01X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X01X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X01X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X01X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X01X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1W1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1W1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0W1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0W1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WW1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WW1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZW1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZW1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YW1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YW1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XW1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XW1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1Z1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1Z1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0Z1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0Z1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WZ1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WZ1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZZ1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZZ1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YZ1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YZ1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XZ1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XZ1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1Y1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1Y1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0Y1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0Y1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WY1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WY1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZY1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZY1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YY1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YY1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XY1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XY1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1X1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1X1X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1X1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1X1X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0X1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0X1X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0X1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0X1X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WX1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WX1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZX1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZX1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YX1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YX1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XX1X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XX1X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XX1X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XX1X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _110X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _110X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _110X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _110X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _010X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _010X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _010X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _010X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W10X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W10X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z10X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z10X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y10X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y10X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X10X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X10X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X10X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X10X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _100X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _100X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _100X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _100X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _000X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _000X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _000X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _000X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W00X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W00X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z00X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z00X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y00X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y00X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X00X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X00X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X00X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X00X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1W0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1W0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0W0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0W0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WW0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WW0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZW0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZW0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YW0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YW0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XW0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XW0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1Z0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1Z0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0Z0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0Z0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WZ0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WZ0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZZ0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZZ0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YZ0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YZ0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XZ0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XZ0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1Y0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1Y0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0Y0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0Y0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WY0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WY0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZY0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZY0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YY0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YY0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XY0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XY0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1X0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1X0X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1X0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1X0X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0X0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0X0X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0X0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0X0X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WX0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WX0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZX0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZX0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YX0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YX0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XX0X( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XX0X( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XX0X( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XX0X( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _11WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _11WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _01WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _01WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W1WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W1WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z1WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z1WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y1WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y1WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X1WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X1WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _10WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _10WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _00WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _00WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W0WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W0WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z0WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z0WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y0WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y0WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X0WX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X0WX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1WWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1WWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0WWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0WWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WWWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WWWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZWWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZWWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YWWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YWWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XWWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XWWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1ZWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1ZWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0ZWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0ZWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WZWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WZWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZZWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZZWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YZWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YZWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XZWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XZWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1YWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1YWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0YWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0YWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WYWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WYWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZYWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZYWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YYWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YYWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XYWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XYWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1XWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1XWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0XWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0XWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WXWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WXWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZXWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZXWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YXWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YXWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XXWX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XXWX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _11ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _11ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _01ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _01ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W1ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W1ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z1ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z1ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y1ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y1ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X1ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X1ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _10ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _10ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _00ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _00ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W0ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W0ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z0ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z0ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y0ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y0ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X0ZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X0ZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1WZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1WZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0WZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0WZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WWZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WWZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZWZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZWZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YWZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YWZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XWZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XWZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1ZZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1ZZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0ZZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0ZZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WZZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WZZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZZZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZZZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YZZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YZZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XZZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XZZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1YZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1YZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0YZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0YZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WYZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WYZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZYZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZYZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YYZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YYZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XYZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XYZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1XZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1XZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0XZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0XZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WXZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WXZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZXZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZXZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YXZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YXZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XXZX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XXZX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _11YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _11YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _01YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _01YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W1YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W1YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z1YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z1YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y1YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y1YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X1YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X1YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _10YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _10YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _00YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _00YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W0YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W0YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z0YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z0YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y0YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y0YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X0YX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X0YX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1WYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1WYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0WYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0WYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WWYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WWYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZWYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZWYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YWYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YWYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XWYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XWYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1ZYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1ZYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0ZYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0ZYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WZYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WZYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZZYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZZYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YZYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YZYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XZYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XZYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1YYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1YYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0YYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0YYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WYYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WYYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZYYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZYYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YYYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YYYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XYYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XYYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1XYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1XYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0XYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0XYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WXYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WXYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZXYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZXYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YXYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YXYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XXYX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XXYX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _11XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _11XX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _11XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _11XX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _01XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _01XX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _01XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _01XX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W1XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W1XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z1XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z1XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y1XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y1XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X1XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X1XX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X1XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X1XX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _10XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _10XX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _10XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _10XX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _00XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _00XX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _00XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _00XX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- W0XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- W0XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Z0XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Z0XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- Y0XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- Y0XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X0XX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- X0XX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X0XX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- X0XX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1WXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1WXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0WXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0WXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WWXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WWXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZWXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZWXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YWXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YWXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XWXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XWXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1ZXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1ZXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0ZXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0ZXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WZXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WZXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZZXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZZXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YZXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YZXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XZXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XZXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1YXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1YXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0YXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0YXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WYXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WYXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZYXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZYXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YYXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YYXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XYXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XYXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1XXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _1XXX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1XXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _1XXX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0XXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- _0XXX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0XXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- _0XXX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- WXXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=4,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- WXXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- ZXXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=3,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- ZXXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- YXXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=2,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- YXXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XXXX( V const & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
- XXXX( S const & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
- }
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim>=1,
- qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XXXX( V & a )
- {
- return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- template <class S>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_scalar<S>::value,
- qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
- XXXX( S & a )
- {
- return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_F445D3D828CEBF5C560593D97278A59
+#define BOOST_QVM_F445D3D828CEBF5C560593D97278A59
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/detail/swizzle_traits.hpp>
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &
+ _1111()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &
+ _0111()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W111( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W111( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z111( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z111( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y111( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y111( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X111( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X111( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X111( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X111( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &
+ _1011()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &
+ _0011()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W011( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W011( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z011( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z011( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y011( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y011( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X011( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X011( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X011( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X011( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1W11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1W11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0W11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0W11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WW11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WW11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZW11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZW11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YW11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YW11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XW11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XW11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1Z11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1Z11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0Z11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0Z11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WZ11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WZ11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZZ11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZZ11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YZ11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YZ11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XZ11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XZ11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1Y11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1Y11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0Y11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0Y11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WY11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WY11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZY11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZY11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YY11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YY11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XY11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XY11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1X11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1X11( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1X11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1X11( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0X11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0X11( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0X11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0X11( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WX11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WX11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZX11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZX11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YX11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YX11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XX11( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XX11( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XX11( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XX11( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &
+ _1101()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &
+ _0101()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W101( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W101( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z101( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z101( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y101( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y101( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X101( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X101( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X101( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X101( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &
+ _1001()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &
+ _0001()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W001( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W001( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z001( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z001( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y001( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y001( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X001( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X001( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X001( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X001( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1W01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1W01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0W01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0W01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WW01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WW01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZW01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZW01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YW01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YW01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XW01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XW01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1Z01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1Z01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0Z01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0Z01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WZ01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WZ01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZZ01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZZ01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YZ01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YZ01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XZ01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XZ01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1Y01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1Y01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0Y01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0Y01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WY01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WY01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZY01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZY01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YY01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YY01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XY01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XY01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1X01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1X01( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1X01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1X01( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0X01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0X01( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0X01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0X01( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WX01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WX01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZX01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZX01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YX01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YX01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XX01( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XX01( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XX01( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XX01( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _11W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _11W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _01W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _01W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W1W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W1W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z1W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z1W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y1W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y1W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X1W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X1W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _10W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _10W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _00W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _00W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W0W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W0W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z0W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z0W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y0W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y0W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X0W1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X0W1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1WW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1WW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0WW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0WW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WWW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WWW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZWW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZWW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YWW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YWW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XWW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XWW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1ZW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1ZW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0ZW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0ZW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WZW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WZW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZZW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZZW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YZW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YZW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XZW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XZW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1YW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1YW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0YW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0YW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WYW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WYW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZYW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZYW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YYW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YYW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XYW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XYW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1XW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1XW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0XW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0XW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WXW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WXW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZXW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZXW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YXW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YXW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XXW1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XXW1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _11Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _11Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _01Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _01Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W1Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W1Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z1Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z1Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y1Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y1Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X1Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X1Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _10Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _10Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _00Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _00Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W0Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W0Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z0Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z0Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y0Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y0Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X0Z1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X0Z1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1WZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1WZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0WZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0WZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WWZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WWZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZWZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZWZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YWZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YWZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XWZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XWZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1ZZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1ZZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0ZZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0ZZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WZZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WZZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZZZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZZZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YZZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YZZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XZZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XZZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1YZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1YZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0YZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0YZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WYZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WYZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZYZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZYZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YYZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YYZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XYZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XYZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1XZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1XZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0XZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0XZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WXZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WXZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZXZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZXZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YXZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YXZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XXZ1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XXZ1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _11Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _11Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _01Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _01Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W1Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W1Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z1Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z1Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y1Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y1Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X1Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X1Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _10Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _10Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _00Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _00Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W0Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W0Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z0Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z0Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y0Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y0Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X0Y1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X0Y1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1WY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1WY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0WY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0WY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WWY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WWY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZWY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZWY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YWY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YWY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XWY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XWY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1ZY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1ZY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0ZY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0ZY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WZY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WZY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZZY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZZY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YZY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YZY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XZY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XZY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1YY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1YY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0YY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0YY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WYY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WYY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZYY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZYY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YYY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YYY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XYY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XYY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1XY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1XY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0XY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0XY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WXY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WXY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZXY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZXY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YXY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YXY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XXY1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XXY1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _11X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _11X1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _11X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _11X1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _01X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _01X1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _01X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _01X1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W1X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W1X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z1X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z1X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y1X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y1X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X1X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X1X1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X1X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X1X1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _10X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _10X1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _10X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _10X1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _00X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _00X1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _00X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _00X1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ W0X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ W0X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Z0X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Z0X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ Y0X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ Y0X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X0X1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ X0X1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X0X1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ X0X1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1WX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1WX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0WX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0WX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WWX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WWX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZWX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZWX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YWX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YWX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XWX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XWX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1ZX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1ZX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0ZX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0ZX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WZX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WZX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZZX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZZX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YZX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YZX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XZX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XZX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1YX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1YX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0YX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0YX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WYX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WYX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZYX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZYX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YYX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YYX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XYX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XYX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1XX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _1XX1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1XX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _1XX1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0XX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ _0XX1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0XX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ _0XX1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ WXX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ WXX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ ZXX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ ZXX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ YXX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ YXX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XXX1( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>::type
+ XXX1( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XXX1( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>::type
+ XXX1( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2 > > > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &
+ _1110()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &
+ _0110()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W110( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W110( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z110( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z110( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y110( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y110( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X110( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X110( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X110( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X110( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &
+ _1010()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &
+ _0010()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W010( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W010( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z010( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z010( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y010( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y010( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X010( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X010( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X010( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X010( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1W10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1W10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0W10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0W10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WW10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WW10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZW10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZW10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YW10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YW10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XW10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XW10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1Z10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1Z10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0Z10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0Z10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WZ10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WZ10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZZ10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZZ10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YZ10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YZ10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XZ10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XZ10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1Y10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1Y10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0Y10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0Y10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WY10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WY10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZY10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZY10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YY10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YY10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XY10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XY10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1X10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1X10( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1X10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1X10( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0X10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0X10( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0X10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0X10( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WX10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WX10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZX10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZX10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YX10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YX10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XX10( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XX10( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XX10( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XX10( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &
+ _1100()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &
+ _0100()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W100( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W100( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z100( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z100( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y100( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y100( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X100( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X100( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X100( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X100( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &
+ _1000()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
+ }
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &
+ _0000()
+ {
+ return *reinterpret_cast<qvm_detail::sw01_<qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const *>(qvm_detail::get_null());
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W000( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W000( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z000( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z000( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y000( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y000( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X000( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X000( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X000( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X000( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1W00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1W00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0W00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0W00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WW00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WW00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZW00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZW00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YW00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YW00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XW00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XW00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1Z00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1Z00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0Z00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0Z00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WZ00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WZ00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZZ00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZZ00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YZ00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YZ00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XZ00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XZ00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1Y00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1Y00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0Y00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0Y00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WY00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WY00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZY00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZY00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YY00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YY00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XY00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XY00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1X00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1X00( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1X00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1X00( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0X00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0X00( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0X00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0X00( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WX00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WX00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZX00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZX00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YX00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YX00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XX00( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XX00( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XX00( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XX00( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _11W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _11W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _01W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _01W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W1W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W1W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z1W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z1W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y1W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y1W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X1W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X1W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _10W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _10W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _00W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _00W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W0W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W0W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z0W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z0W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y0W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y0W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X0W0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X0W0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1WW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1WW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0WW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0WW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WWW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WWW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZWW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZWW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YWW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YWW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XWW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XWW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1ZW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1ZW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0ZW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0ZW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WZW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WZW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZZW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZZW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YZW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YZW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XZW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XZW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1YW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1YW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0YW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0YW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WYW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WYW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZYW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZYW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YYW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YYW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XYW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XYW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1XW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1XW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0XW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0XW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WXW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WXW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZXW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZXW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YXW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YXW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XXW0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XXW0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _11Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _11Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _01Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _01Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W1Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W1Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z1Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z1Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y1Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y1Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X1Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X1Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _10Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _10Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _00Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _00Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W0Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W0Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z0Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z0Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y0Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y0Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X0Z0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X0Z0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1WZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1WZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0WZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0WZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WWZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WWZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZWZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZWZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YWZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YWZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XWZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XWZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1ZZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1ZZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0ZZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0ZZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WZZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WZZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZZZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZZZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YZZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YZZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XZZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XZZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1YZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1YZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0YZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0YZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WYZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WYZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZYZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZYZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YYZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YYZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XYZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XYZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1XZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1XZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0XZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0XZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WXZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WXZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZXZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZXZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YXZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YXZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XXZ0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XXZ0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _11Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _11Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _01Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _01Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W1Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W1Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z1Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z1Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y1Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y1Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X1Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X1Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _10Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _10Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _00Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _00Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W0Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W0Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z0Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z0Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y0Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y0Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X0Y0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X0Y0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1WY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1WY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0WY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0WY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WWY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WWY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZWY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZWY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YWY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YWY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XWY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XWY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1ZY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1ZY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0ZY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0ZY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WZY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WZY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZZY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZZY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YZY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YZY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XZY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XZY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1YY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1YY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0YY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0YY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WYY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WYY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZYY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZYY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YYY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YYY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XYY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XYY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1XY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1XY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0XY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0XY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WXY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WXY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZXY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZXY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YXY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YXY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XXY0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XXY0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _11X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _11X0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _11X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _11X0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _01X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _01X0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _01X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _01X0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W1X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W1X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z1X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z1X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y1X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y1X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X1X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X1X0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X1X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X1X0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _10X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _10X0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _10X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _10X0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _00X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _00X0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _00X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _00X0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ W0X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ W0X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Z0X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Z0X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ Y0X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ Y0X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X0X0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ X0X0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X0X0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ X0X0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1WX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1WX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0WX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0WX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WWX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WWX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZWX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZWX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YWX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YWX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XWX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XWX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1ZX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1ZX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0ZX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0ZX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WZX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WZX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZZX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZZX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YZX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YZX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XZX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XZX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1YX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1YX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0YX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0YX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WYX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WYX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZYX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZYX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YYX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YYX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XYX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XYX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1XX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _1XX0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1XX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _1XX0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0XX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ _0XX0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0XX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ _0XX0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ WXX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ WXX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ ZXX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ ZXX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ YXX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ YXX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XXX0( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>::type
+ XXX0( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XXX0( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>::type
+ XXX0( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _111W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _111W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _011W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _011W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W11W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W11W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z11W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z11W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y11W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y11W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X11W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X11W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _101W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _101W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _001W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _001W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W01W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W01W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z01W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z01W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y01W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y01W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X01W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X01W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1W1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1W1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0W1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0W1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WW1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WW1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZW1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZW1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YW1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YW1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XW1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XW1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1Z1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1Z1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0Z1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0Z1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WZ1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WZ1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZZ1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZZ1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YZ1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YZ1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XZ1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XZ1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1Y1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1Y1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0Y1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0Y1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WY1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WY1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZY1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZY1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YY1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YY1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XY1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XY1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1X1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1X1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0X1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0X1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WX1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WX1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZX1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZX1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YX1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YX1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XX1W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XX1W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _110W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _110W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _010W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _010W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W10W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W10W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z10W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z10W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y10W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y10W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X10W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X10W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _100W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _100W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _000W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _000W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W00W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W00W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z00W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z00W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y00W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y00W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X00W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X00W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1W0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1W0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0W0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0W0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WW0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WW0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZW0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZW0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YW0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YW0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XW0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XW0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1Z0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1Z0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0Z0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0Z0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WZ0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WZ0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZZ0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZZ0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YZ0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YZ0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XZ0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XZ0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1Y0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1Y0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0Y0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0Y0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WY0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WY0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZY0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZY0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YY0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YY0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XY0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XY0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1X0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1X0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0X0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0X0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WX0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WX0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZX0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZX0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YX0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YX0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XX0W( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XX0W( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _11WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _11WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _01WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _01WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W1WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W1WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z1WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z1WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y1WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y1WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X1WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X1WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _10WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _10WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _00WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _00WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W0WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W0WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z0WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z0WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y0WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y0WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X0WW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X0WW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1WWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1WWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0WWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0WWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WWWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WWWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZWWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZWWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YWWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YWWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XWWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XWWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1ZWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1ZWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0ZWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0ZWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WZWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WZWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZZWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZZWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YZWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YZWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XZWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XZWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1YWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1YWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0YWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0YWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WYWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WYWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZYWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZYWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YYWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YYWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XYWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XYWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1XWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1XWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0XWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0XWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WXWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WXWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZXWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZXWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YXWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YXWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XXWW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XXWW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _11ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _11ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _01ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _01ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W1ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W1ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z1ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z1ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y1ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y1ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X1ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X1ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _10ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _10ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _00ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _00ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W0ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W0ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z0ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z0ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y0ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y0ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X0ZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X0ZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1WZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1WZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0WZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0WZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WWZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WWZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZWZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZWZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YWZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YWZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XWZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XWZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1ZZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1ZZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0ZZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0ZZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WZZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WZZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZZZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZZZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YZZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YZZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XZZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XZZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1YZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1YZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0YZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0YZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WYZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WYZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZYZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZYZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YYZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YYZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XYZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XYZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1XZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1XZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0XZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0XZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WXZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WXZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZXZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZXZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YXZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YXZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XXZW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XXZW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _11YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _11YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _01YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _01YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W1YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W1YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z1YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z1YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y1YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y1YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X1YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X1YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _10YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _10YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _00YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _00YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W0YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W0YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z0YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z0YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y0YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y0YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X0YW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X0YW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1WYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1WYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0WYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0WYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WWYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WWYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZWYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZWYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YWYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YWYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XWYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XWYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1ZYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1ZYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0ZYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0ZYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WZYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WZYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZZYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZZYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YZYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YZYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XZYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XZYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1YYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1YYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0YYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0YYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WYYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WYYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZYYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZYYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YYYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YYYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XYYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XYYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1XYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1XYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0XYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0XYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WXYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WXYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZXYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZXYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YXYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YXYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XXYW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XXYW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _11XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _11XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _01XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _01XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W1XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W1XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z1XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z1XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y1XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y1XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X1XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X1XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _10XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _10XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _00XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _00XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ W0XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ W0XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Z0XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Z0XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ Y0XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ Y0XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ X0XW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ X0XW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1WXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1WXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0WXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0WXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WWXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WWXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZWXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZWXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YWXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YWXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XWXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XWXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1ZXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1ZXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0ZXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0ZXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WZXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WZXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZZXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZZXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YZXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YZXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XZXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XZXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1YXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1YXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0YXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0YXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WYXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WYXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZYXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZYXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YYXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YYXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XYXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XYXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _1XXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _1XXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ _0XXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ _0XXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ WXXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ WXXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ ZXXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ ZXXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ YXXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ YXXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>::type
+ XXXW( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>::type
+ XXXW( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _111Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _111Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _011Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _011Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W11Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W11Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z11Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z11Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y11Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y11Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X11Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X11Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _101Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _101Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _001Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _001Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W01Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W01Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z01Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z01Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y01Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y01Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X01Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X01Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1W1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1W1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0W1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0W1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WW1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WW1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZW1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZW1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YW1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YW1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XW1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XW1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1Z1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1Z1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0Z1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0Z1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WZ1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WZ1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZZ1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZZ1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YZ1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YZ1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XZ1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XZ1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1Y1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1Y1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0Y1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0Y1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WY1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WY1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZY1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZY1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YY1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YY1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XY1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XY1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1X1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1X1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0X1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0X1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WX1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WX1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZX1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZX1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YX1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YX1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XX1Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XX1Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _110Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _110Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _010Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _010Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W10Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W10Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z10Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z10Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y10Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y10Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X10Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X10Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _100Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _100Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _000Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _000Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W00Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W00Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z00Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z00Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y00Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y00Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X00Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X00Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1W0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1W0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0W0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0W0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WW0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WW0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZW0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZW0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YW0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YW0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XW0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XW0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1Z0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1Z0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0Z0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0Z0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WZ0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WZ0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZZ0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZZ0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YZ0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YZ0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XZ0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XZ0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1Y0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1Y0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0Y0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0Y0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WY0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WY0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZY0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZY0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YY0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YY0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XY0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XY0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1X0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1X0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0X0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0X0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WX0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WX0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZX0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZX0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YX0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YX0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XX0Z( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XX0Z( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _11WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _11WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _01WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _01WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W1WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W1WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z1WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z1WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y1WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y1WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X1WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X1WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _10WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _10WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _00WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _00WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W0WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W0WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z0WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z0WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y0WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y0WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X0WZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X0WZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1WWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1WWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0WWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0WWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WWWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WWWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZWWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZWWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YWWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YWWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XWWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XWWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1ZWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1ZWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0ZWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0ZWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WZWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WZWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZZWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZZWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YZWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YZWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XZWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XZWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1YWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1YWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0YWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0YWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WYWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WYWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZYWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZYWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YYWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YYWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XYWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XYWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1XWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1XWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0XWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0XWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WXWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WXWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZXWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZXWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YXWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YXWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XXWZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XXWZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _11ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _11ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _01ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _01ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W1ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W1ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z1ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z1ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y1ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y1ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X1ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X1ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _10ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _10ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _00ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _00ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W0ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W0ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z0ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z0ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y0ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y0ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X0ZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X0ZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1WZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1WZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0WZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0WZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WWZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WWZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZWZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZWZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YWZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YWZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XWZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XWZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1ZZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1ZZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0ZZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0ZZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WZZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WZZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZZZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZZZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YZZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YZZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XZZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XZZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1YZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1YZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0YZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0YZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WYZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WYZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZYZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZYZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YYZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YYZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XYZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XYZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1XZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1XZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0XZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0XZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WXZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WXZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZXZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZXZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YXZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YXZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XXZZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XXZZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _11YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _11YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _01YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _01YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W1YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W1YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z1YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z1YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y1YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y1YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X1YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X1YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _10YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _10YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _00YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _00YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W0YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W0YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z0YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z0YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y0YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y0YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X0YZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X0YZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1WYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1WYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0WYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0WYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WWYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WWYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZWYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZWYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YWYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YWYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XWYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XWYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1ZYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1ZYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0ZYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0ZYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WZYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WZYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZZYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZZYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YZYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YZYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XZYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XZYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1YYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1YYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0YYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0YYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WYYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WYYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZYYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZYYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YYYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YYYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XYYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XYYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1XYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1XYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0XYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0XYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WXYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WXYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZXYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZXYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YXYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YXYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XXYZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XXYZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _11XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _11XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _01XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _01XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W1XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W1XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z1XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z1XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y1XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y1XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X1XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X1XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _10XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _10XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _00XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _00XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ W0XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ W0XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Z0XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Z0XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ Y0XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ Y0XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ X0XZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ X0XZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1WXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1WXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0WXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0WXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WWXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WWXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZWXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZWXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YWXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YWXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XWXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XWXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1ZXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1ZXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0ZXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0ZXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WZXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WZXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZZXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZZXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YZXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YZXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XZXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XZXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1YXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1YXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0YXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0YXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WYXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WYXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZYXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZYXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YYXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YYXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XYXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XYXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _1XXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _1XXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ _0XXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ _0XXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ WXXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ WXXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ ZXXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ ZXXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ YXXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ YXXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>::type
+ XXXZ( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>::type
+ XXXZ( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _111Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _111Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _011Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _011Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W11Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W11Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z11Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z11Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y11Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y11Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X11Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X11Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _101Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _101Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _001Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _001Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W01Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W01Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z01Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z01Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y01Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y01Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X01Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X01Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1W1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1W1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0W1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0W1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WW1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WW1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZW1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZW1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YW1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YW1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XW1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XW1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1Z1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1Z1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0Z1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0Z1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WZ1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WZ1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZZ1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZZ1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YZ1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YZ1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XZ1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XZ1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1Y1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1Y1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0Y1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0Y1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WY1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WY1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZY1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZY1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YY1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YY1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XY1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XY1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1X1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1X1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0X1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0X1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WX1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WX1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZX1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZX1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YX1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YX1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XX1Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XX1Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _110Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _110Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _010Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _010Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W10Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W10Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z10Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z10Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y10Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y10Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X10Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X10Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _100Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _100Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _000Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _000Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W00Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W00Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z00Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z00Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y00Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y00Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X00Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X00Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1W0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1W0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0W0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0W0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WW0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WW0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZW0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZW0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YW0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YW0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XW0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XW0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1Z0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1Z0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0Z0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0Z0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WZ0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WZ0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZZ0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZZ0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YZ0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YZ0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XZ0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XZ0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1Y0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1Y0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0Y0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0Y0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WY0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WY0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZY0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZY0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YY0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YY0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XY0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XY0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1X0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1X0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0X0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0X0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WX0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WX0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZX0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZX0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YX0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YX0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XX0Y( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XX0Y( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _11WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _11WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _01WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _01WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W1WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W1WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z1WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z1WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y1WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y1WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X1WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X1WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _10WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _10WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _00WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _00WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W0WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W0WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z0WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z0WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y0WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y0WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X0WY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X0WY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1WWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1WWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0WWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0WWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WWWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WWWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZWWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZWWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YWWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YWWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XWWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XWWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1ZWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1ZWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0ZWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0ZWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WZWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WZWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZZWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZZWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YZWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YZWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XZWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XZWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1YWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1YWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0YWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0YWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WYWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WYWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZYWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZYWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YYWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YYWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XYWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XYWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1XWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1XWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0XWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0XWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WXWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WXWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZXWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZXWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YXWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YXWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XXWY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XXWY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _11ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _11ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _01ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _01ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W1ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W1ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z1ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z1ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y1ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y1ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X1ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X1ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _10ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _10ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _00ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _00ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W0ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W0ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z0ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z0ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y0ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y0ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X0ZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X0ZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1WZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1WZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0WZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0WZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WWZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WWZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZWZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZWZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YWZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YWZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XWZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XWZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1ZZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1ZZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0ZZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0ZZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WZZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WZZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZZZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZZZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YZZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YZZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XZZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XZZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1YZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1YZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0YZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0YZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WYZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WYZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZYZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZYZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YYZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YYZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XYZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XYZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1XZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1XZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0XZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0XZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WXZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WXZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZXZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZXZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YXZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YXZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XXZY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XXZY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _11YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _11YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _01YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _01YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W1YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W1YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z1YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z1YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y1YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y1YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X1YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X1YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _10YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _10YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _00YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _00YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W0YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W0YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z0YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z0YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y0YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y0YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X0YY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X0YY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1WYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1WYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0WYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0WYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WWYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WWYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZWYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZWYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YWYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YWYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XWYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XWYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1ZYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1ZYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0ZYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0ZYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WZYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WZYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZZYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZZYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YZYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YZYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XZYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XZYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1YYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1YYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0YYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0YYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WYYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WYYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZYYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZYYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YYYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YYYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XYYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XYYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1XYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1XYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0XYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0XYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WXYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WXYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZXYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZXYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YXYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YXYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XXYY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XXYY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _11XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _11XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _01XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _01XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W1XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W1XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z1XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z1XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y1XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y1XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X1XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X1XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _10XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _10XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _00XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _00XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ W0XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ W0XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Z0XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Z0XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ Y0XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ Y0XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ X0XY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ X0XY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1WXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1WXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0WXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0WXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WWXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WWXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZWXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZWXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YWXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YWXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XWXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XWXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1ZXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1ZXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0ZXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0ZXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WZXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WZXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZZXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZZXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YZXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YZXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XZXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XZXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1YXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1YXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0YXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0YXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WYXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WYXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZYXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZYXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YYXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YYXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XYXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XYXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _1XXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _1XXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ _0XXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ _0XXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ WXXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ WXXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ ZXXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ ZXXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ YXXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ YXXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>::type
+ XXXY( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>::type
+ XXXY( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _111X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _111X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _111X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _111X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _011X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _011X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _011X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _011X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W11X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W11X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z11X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z11X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y11X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y11X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X11X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X11X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X11X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X11X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _101X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _101X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _101X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _101X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _001X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _001X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _001X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _001X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W01X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W01X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z01X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z01X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y01X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y01X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X01X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X01X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X01X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X01X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1W1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1W1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0W1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0W1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WW1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WW1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZW1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZW1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YW1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YW1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XW1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XW1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1Z1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1Z1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0Z1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0Z1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WZ1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WZ1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZZ1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZZ1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YZ1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YZ1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XZ1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XZ1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1Y1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1Y1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0Y1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0Y1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WY1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WY1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZY1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZY1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YY1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YY1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XY1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XY1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1X1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1X1X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1X1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1X1X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0X1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0X1X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0X1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0X1X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WX1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WX1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZX1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZX1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YX1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YX1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XX1X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XX1X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XX1X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XX1X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _110X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _110X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _110X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _110X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _010X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _010X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _010X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _010X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W10X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W10X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z10X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z10X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y10X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y10X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X10X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X10X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X10X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X10X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _100X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _100X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _100X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _100X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _000X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _000X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _000X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _000X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W00X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W00X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z00X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z00X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y00X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y00X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X00X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X00X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X00X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X00X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1W0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1W0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0W0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0W0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WW0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WW0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZW0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZW0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YW0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YW0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XW0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XW0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1Z0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1Z0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0Z0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0Z0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WZ0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WZ0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZZ0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZZ0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YZ0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YZ0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XZ0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XZ0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1Y0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1Y0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0Y0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0Y0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WY0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WY0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZY0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZY0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YY0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YY0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XY0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XY0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1X0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1X0X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1X0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1X0X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0X0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0X0X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0X0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0X0X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WX0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WX0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZX0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZX0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YX0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YX0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XX0X( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XX0X( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XX0X( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XX0X( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _11WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _11WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _01WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _01WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W1WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W1WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z1WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z1WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y1WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y1WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X1WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X1WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _10WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _10WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _00WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _00WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W0WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W0WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z0WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z0WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y0WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y0WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X0WX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X0WX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1WWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1WWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0WWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0WWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WWWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WWWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZWWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZWWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YWWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YWWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XWWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XWWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1ZWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1ZWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0ZWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0ZWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WZWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WZWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZZWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZZWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YZWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YZWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XZWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XZWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1YWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1YWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0YWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0YWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WYWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WYWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZYWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZYWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YYWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YYWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XYWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XYWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1XWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1XWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0XWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0XWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WXWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WXWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZXWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZXWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YXWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YXWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XXWX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XXWX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _11ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _11ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _01ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _01ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W1ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W1ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z1ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z1ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y1ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y1ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X1ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X1ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _10ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _10ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _00ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _00ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W0ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W0ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z0ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z0ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y0ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y0ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X0ZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X0ZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1WZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1WZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0WZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0WZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WWZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WWZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZWZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZWZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YWZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YWZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XWZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XWZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1ZZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1ZZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0ZZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0ZZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WZZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WZZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZZZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZZZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YZZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YZZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XZZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XZZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1YZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1YZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0YZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0YZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WYZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WYZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZYZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZYZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YYZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YYZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XYZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XYZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1XZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1XZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0XZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0XZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WXZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WXZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZXZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZXZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YXZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YXZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XXZX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XXZX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _11YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _11YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _01YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _01YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W1YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W1YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z1YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z1YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y1YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y1YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X1YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X1YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _10YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _10YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _00YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _00YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W0YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W0YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z0YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z0YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y0YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y0YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X0YX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X0YX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1WYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1WYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0WYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0WYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WWYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WWYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZWYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZWYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YWYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YWYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XWYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XWYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1ZYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1ZYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0ZYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0ZYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WZYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WZYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZZYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZZYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YZYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YZYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XZYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XZYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1YYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1YYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0YYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0YYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WYYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WYYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZYYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZYYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YYYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YYYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XYYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XYYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1XYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1XYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0XYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0XYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WXYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WXYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZXYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZXYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YXYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YXYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XXYX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XXYX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _11XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _11XX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _11XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _11XX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _01XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _01XX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _01XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _01XX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W1XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W1XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z1XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z1XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y1XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y1XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X1XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X1XX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X1XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X1XX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _10XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _10XX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _10XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _10XX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _00XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _00XX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _00XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _00XX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ W0XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ W0XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Z0XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Z0XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ Y0XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ Y0XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X0XX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ X0XX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X0XX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ X0XX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1WXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1WXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0WXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0WXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WWXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WWXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZWXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZWXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YWXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YWXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XWXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XWXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1ZXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1ZXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0ZXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0ZXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WZXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WZXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZZXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZZXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YZXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YZXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XZXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XZXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1YXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1YXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0YXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0YXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WYXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WYXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZYXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZYXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YYXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YYXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XYXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XYXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1XXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _1XXX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1XXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _1XXX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0XXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ _0XXX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0XXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ _0XXX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<-1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ WXXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=4,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ WXXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<3,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ ZXXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=3,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ ZXXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<2,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ YXXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=2,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ YXXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<1,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XXXX( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>::type
+ XXXX( S const & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > const &>(a);
+ }
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim>=1,
+ qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XXXX( V & a )
+ {
+ return reinterpret_cast<qvm_detail::sw_<V,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ template <class S>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_scalar<S>::value,
+ qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>::type
+ XXXX( S & a )
+ {
+ return reinterpret_cast<qvm_detail::sws_<S,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0,qvm_detail::swizzle_idx<0 > > > > > &>(a);
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/vec_assign2.hpp b/contrib/restricted/boost/boost/qvm/gen/vec_assign2.hpp
index 442a0d2214..2265602b7a 100644
--- a/contrib/restricted/boost/boost/qvm/gen/vec_assign2.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/vec_assign2.hpp
@@ -1,56 +1,56 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_61CDD11E9D9C167272E61DF0844F4A77
-#define BOOST_QVM_61CDD11E9D9C167272E61DF0844F4A77
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/vec_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
- A &>::type
- assign( A & a, B const & b )
- {
- vec_traits<A>::template write_element<0>(a)=vec_traits<B>::template read_element<0>(b);
- vec_traits<A>::template write_element<1>(a)=vec_traits<B>::template read_element<1>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct assign_vv_defined;
-
- template <>
- struct
- assign_vv_defined<2>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_61CDD11E9D9C167272E61DF0844F4A77
+#define BOOST_QVM_61CDD11E9D9C167272E61DF0844F4A77
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/vec_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)=vec_traits<B>::template read_element<1>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct assign_vv_defined;
+
+ template <>
+ struct
+ assign_vv_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/vec_assign3.hpp b/contrib/restricted/boost/boost/qvm/gen/vec_assign3.hpp
index 1ca4be7305..17da3ad9af 100644
--- a/contrib/restricted/boost/boost/qvm/gen/vec_assign3.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/vec_assign3.hpp
@@ -1,57 +1,57 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_2D7E8392C53CBC9121E33749ECF4D5
-#define BOOST_QVM_2D7E8392C53CBC9121E33749ECF4D5
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/vec_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
- A &>::type
- assign( A & a, B const & b )
- {
- vec_traits<A>::template write_element<0>(a)=vec_traits<B>::template read_element<0>(b);
- vec_traits<A>::template write_element<1>(a)=vec_traits<B>::template read_element<1>(b);
- vec_traits<A>::template write_element<2>(a)=vec_traits<B>::template read_element<2>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct assign_vv_defined;
-
- template <>
- struct
- assign_vv_defined<3>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_2D7E8392C53CBC9121E33749ECF4D5
+#define BOOST_QVM_2D7E8392C53CBC9121E33749ECF4D5
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/vec_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)=vec_traits<B>::template read_element<1>(b);
+ vec_traits<A>::template write_element<2>(a)=vec_traits<B>::template read_element<2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct assign_vv_defined;
+
+ template <>
+ struct
+ assign_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/vec_assign4.hpp b/contrib/restricted/boost/boost/qvm/gen/vec_assign4.hpp
index 9fa63830e5..7fa7a566ef 100644
--- a/contrib/restricted/boost/boost/qvm/gen/vec_assign4.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/vec_assign4.hpp
@@ -1,58 +1,58 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_D49FD4A4597E35CF3222F4CCCFD3902D
-#define BOOST_QVM_D49FD4A4597E35CF3222F4CCCFD3902D
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/vec_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
- A &>::type
- assign( A & a, B const & b )
- {
- vec_traits<A>::template write_element<0>(a)=vec_traits<B>::template read_element<0>(b);
- vec_traits<A>::template write_element<1>(a)=vec_traits<B>::template read_element<1>(b);
- vec_traits<A>::template write_element<2>(a)=vec_traits<B>::template read_element<2>(b);
- vec_traits<A>::template write_element<3>(a)=vec_traits<B>::template read_element<3>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct assign_vv_defined;
-
- template <>
- struct
- assign_vv_defined<4>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_D49FD4A4597E35CF3222F4CCCFD3902D
+#define BOOST_QVM_D49FD4A4597E35CF3222F4CCCFD3902D
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/vec_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
+ A &>::type
+ assign( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)=vec_traits<B>::template read_element<1>(b);
+ vec_traits<A>::template write_element<2>(a)=vec_traits<B>::template read_element<2>(b);
+ vec_traits<A>::template write_element<3>(a)=vec_traits<B>::template read_element<3>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct assign_vv_defined;
+
+ template <>
+ struct
+ assign_vv_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations2.hpp b/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations2.hpp
index 981eff722f..8b52bd25e4 100644
--- a/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations2.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations2.hpp
@@ -1,114 +1,114 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_48D38F75E6D91D2AE5C0F72B78818744
-#define BOOST_QVM_48D38F75E6D91D2AE5C0F72B78818744
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/mat_traits.hpp>
-#include <boost/qvm/vec_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==2 && mat_traits<A>::cols==2 &&
- vec_traits<B>::dim==2,
- deduce_vec2<A,B,2> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename vec_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Tb const b0 = vec_traits<B>::template read_element<0>(b);
- Tb const b1 = vec_traits<B>::template read_element<1>(b);
- typedef typename deduce_vec2<A,B,2>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
- R r;
- vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1;
- vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_mv_defined;
-
- template <>
- struct
- mul_mv_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<B>::rows==2 && mat_traits<B>::cols==2 &&
- vec_traits<A>::dim==2,
- deduce_vec2<A,B,2> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename vec_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a0 = vec_traits<A>::template read_element<0>(a);
- Ta const a1 = vec_traits<A>::template read_element<1>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- typedef typename deduce_vec2<A,B,2>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
- R r;
- vec_traits<R>::template write_element<0>(r)=a0*b00+a1*b10;
- vec_traits<R>::template write_element<1>(r)=a0*b01+a1*b11;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_vm_defined;
-
- template <>
- struct
- mul_vm_defined<2,2>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_48D38F75E6D91D2AE5C0F72B78818744
+#define BOOST_QVM_48D38F75E6D91D2AE5C0F72B78818744
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/mat_traits.hpp>
+#include <boost/qvm/vec_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==2 && mat_traits<A>::cols==2 &&
+ vec_traits<B>::dim==2,
+ deduce_vec2<A,B,2> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename vec_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Tb const b0 = vec_traits<B>::template read_element<0>(b);
+ Tb const b1 = vec_traits<B>::template read_element<1>(b);
+ typedef typename deduce_vec2<A,B,2>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1;
+ vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_mv_defined;
+
+ template <>
+ struct
+ mul_mv_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<B>::rows==2 && mat_traits<B>::cols==2 &&
+ vec_traits<A>::dim==2,
+ deduce_vec2<A,B,2> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename vec_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a0 = vec_traits<A>::template read_element<0>(a);
+ Ta const a1 = vec_traits<A>::template read_element<1>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ typedef typename deduce_vec2<A,B,2>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a0*b00+a1*b10;
+ vec_traits<R>::template write_element<1>(r)=a0*b01+a1*b11;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_vm_defined;
+
+ template <>
+ struct
+ mul_vm_defined<2,2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations3.hpp b/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations3.hpp
index 7c32031914..9e0da9045e 100644
--- a/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations3.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations3.hpp
@@ -1,128 +1,128 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_E5F500D4618DBE7B51573B33821F
-#define BOOST_QVM_E5F500D4618DBE7B51573B33821F
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/mat_traits.hpp>
-#include <boost/qvm/vec_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==3 && mat_traits<A>::cols==3 &&
- vec_traits<B>::dim==3,
- deduce_vec2<A,B,3> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename vec_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
- Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
- Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
- Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
- Tb const b0 = vec_traits<B>::template read_element<0>(b);
- Tb const b1 = vec_traits<B>::template read_element<1>(b);
- Tb const b2 = vec_traits<B>::template read_element<2>(b);
- typedef typename deduce_vec2<A,B,3>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
- R r;
- vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1+a02*b2;
- vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1+a12*b2;
- vec_traits<R>::template write_element<2>(r)=a20*b0+a21*b1+a22*b2;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_mv_defined;
-
- template <>
- struct
- mul_mv_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<B>::rows==3 && mat_traits<B>::cols==3 &&
- vec_traits<A>::dim==3,
- deduce_vec2<A,B,3> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename vec_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a0 = vec_traits<A>::template read_element<0>(a);
- Ta const a1 = vec_traits<A>::template read_element<1>(a);
- Ta const a2 = vec_traits<A>::template read_element<2>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
- Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
- Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
- Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
- typedef typename deduce_vec2<A,B,3>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
- R r;
- vec_traits<R>::template write_element<0>(r)=a0*b00+a1*b10+a2*b20;
- vec_traits<R>::template write_element<1>(r)=a0*b01+a1*b11+a2*b21;
- vec_traits<R>::template write_element<2>(r)=a0*b02+a1*b12+a2*b22;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_vm_defined;
-
- template <>
- struct
- mul_vm_defined<3,3>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_E5F500D4618DBE7B51573B33821F
+#define BOOST_QVM_E5F500D4618DBE7B51573B33821F
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/mat_traits.hpp>
+#include <boost/qvm/vec_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==3 &&
+ vec_traits<B>::dim==3,
+ deduce_vec2<A,B,3> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename vec_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
+ Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
+ Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
+ Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
+ Tb const b0 = vec_traits<B>::template read_element<0>(b);
+ Tb const b1 = vec_traits<B>::template read_element<1>(b);
+ Tb const b2 = vec_traits<B>::template read_element<2>(b);
+ typedef typename deduce_vec2<A,B,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1+a02*b2;
+ vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1+a12*b2;
+ vec_traits<R>::template write_element<2>(r)=a20*b0+a21*b1+a22*b2;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_mv_defined;
+
+ template <>
+ struct
+ mul_mv_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<B>::rows==3 && mat_traits<B>::cols==3 &&
+ vec_traits<A>::dim==3,
+ deduce_vec2<A,B,3> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename vec_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a0 = vec_traits<A>::template read_element<0>(a);
+ Ta const a1 = vec_traits<A>::template read_element<1>(a);
+ Ta const a2 = vec_traits<A>::template read_element<2>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
+ Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
+ Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
+ Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
+ typedef typename deduce_vec2<A,B,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a0*b00+a1*b10+a2*b20;
+ vec_traits<R>::template write_element<1>(r)=a0*b01+a1*b11+a2*b21;
+ vec_traits<R>::template write_element<2>(r)=a0*b02+a1*b12+a2*b22;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_vm_defined;
+
+ template <>
+ struct
+ mul_vm_defined<3,3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations4.hpp b/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations4.hpp
index e5ba1bc0b3..ab7db98e31 100644
--- a/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations4.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/vec_mat_operations4.hpp
@@ -1,146 +1,146 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_187092DA6454CEB1853E6915F8466A4
-#define BOOST_QVM_187092DA6454CEB1853E6915F8466A4
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/mat_traits.hpp>
-#include <boost/qvm/vec_traits.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4 &&
- vec_traits<B>::dim==4,
- deduce_vec2<A,B,4> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename vec_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
- Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
- Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
- Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
- Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
- Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
- Ta const a30 = mat_traits<A>::template read_element<3,0>(a);
- Ta const a31 = mat_traits<A>::template read_element<3,1>(a);
- Ta const a32 = mat_traits<A>::template read_element<3,2>(a);
- Ta const a33 = mat_traits<A>::template read_element<3,3>(a);
- Tb const b0 = vec_traits<B>::template read_element<0>(b);
- Tb const b1 = vec_traits<B>::template read_element<1>(b);
- Tb const b2 = vec_traits<B>::template read_element<2>(b);
- Tb const b3 = vec_traits<B>::template read_element<3>(b);
- typedef typename deduce_vec2<A,B,4>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
- R r;
- vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1+a02*b2+a03*b3;
- vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1+a12*b2+a13*b3;
- vec_traits<R>::template write_element<2>(r)=a20*b0+a21*b1+a22*b2+a23*b3;
- vec_traits<R>::template write_element<3>(r)=a30*b0+a31*b1+a32*b2+a33*b3;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_mv_defined;
-
- template <>
- struct
- mul_mv_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<B>::rows==4 && mat_traits<B>::cols==4 &&
- vec_traits<A>::dim==4,
- deduce_vec2<A,B,4> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename vec_traits<A>::scalar_type Ta;
- typedef typename mat_traits<B>::scalar_type Tb;
- Ta const a0 = vec_traits<A>::template read_element<0>(a);
- Ta const a1 = vec_traits<A>::template read_element<1>(a);
- Ta const a2 = vec_traits<A>::template read_element<2>(a);
- Ta const a3 = vec_traits<A>::template read_element<3>(a);
- Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
- Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
- Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
- Tb const b03 = mat_traits<B>::template read_element<0,3>(b);
- Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
- Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
- Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
- Tb const b13 = mat_traits<B>::template read_element<1,3>(b);
- Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
- Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
- Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
- Tb const b23 = mat_traits<B>::template read_element<2,3>(b);
- Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
- Tb const b31 = mat_traits<B>::template read_element<3,1>(b);
- Tb const b32 = mat_traits<B>::template read_element<3,2>(b);
- Tb const b33 = mat_traits<B>::template read_element<3,3>(b);
- typedef typename deduce_vec2<A,B,4>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
- R r;
- vec_traits<R>::template write_element<0>(r)=a0*b00+a1*b10+a2*b20+a3*b30;
- vec_traits<R>::template write_element<1>(r)=a0*b01+a1*b11+a2*b21+a3*b31;
- vec_traits<R>::template write_element<2>(r)=a0*b02+a1*b12+a2*b22+a3*b32;
- vec_traits<R>::template write_element<3>(r)=a0*b03+a1*b13+a2*b23+a3*b33;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct mul_vm_defined;
-
- template <>
- struct
- mul_vm_defined<4,4>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_187092DA6454CEB1853E6915F8466A4
+#define BOOST_QVM_187092DA6454CEB1853E6915F8466A4
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/mat_traits.hpp>
+#include <boost/qvm/vec_traits.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4 &&
+ vec_traits<B>::dim==4,
+ deduce_vec2<A,B,4> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename vec_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
+ Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
+ Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
+ Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
+ Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
+ Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
+ Ta const a30 = mat_traits<A>::template read_element<3,0>(a);
+ Ta const a31 = mat_traits<A>::template read_element<3,1>(a);
+ Ta const a32 = mat_traits<A>::template read_element<3,2>(a);
+ Ta const a33 = mat_traits<A>::template read_element<3,3>(a);
+ Tb const b0 = vec_traits<B>::template read_element<0>(b);
+ Tb const b1 = vec_traits<B>::template read_element<1>(b);
+ Tb const b2 = vec_traits<B>::template read_element<2>(b);
+ Tb const b3 = vec_traits<B>::template read_element<3>(b);
+ typedef typename deduce_vec2<A,B,4>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1+a02*b2+a03*b3;
+ vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1+a12*b2+a13*b3;
+ vec_traits<R>::template write_element<2>(r)=a20*b0+a21*b1+a22*b2+a23*b3;
+ vec_traits<R>::template write_element<3>(r)=a30*b0+a31*b1+a32*b2+a33*b3;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_mv_defined;
+
+ template <>
+ struct
+ mul_mv_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<B>::rows==4 && mat_traits<B>::cols==4 &&
+ vec_traits<A>::dim==4,
+ deduce_vec2<A,B,4> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename vec_traits<A>::scalar_type Ta;
+ typedef typename mat_traits<B>::scalar_type Tb;
+ Ta const a0 = vec_traits<A>::template read_element<0>(a);
+ Ta const a1 = vec_traits<A>::template read_element<1>(a);
+ Ta const a2 = vec_traits<A>::template read_element<2>(a);
+ Ta const a3 = vec_traits<A>::template read_element<3>(a);
+ Tb const b00 = mat_traits<B>::template read_element<0,0>(b);
+ Tb const b01 = mat_traits<B>::template read_element<0,1>(b);
+ Tb const b02 = mat_traits<B>::template read_element<0,2>(b);
+ Tb const b03 = mat_traits<B>::template read_element<0,3>(b);
+ Tb const b10 = mat_traits<B>::template read_element<1,0>(b);
+ Tb const b11 = mat_traits<B>::template read_element<1,1>(b);
+ Tb const b12 = mat_traits<B>::template read_element<1,2>(b);
+ Tb const b13 = mat_traits<B>::template read_element<1,3>(b);
+ Tb const b20 = mat_traits<B>::template read_element<2,0>(b);
+ Tb const b21 = mat_traits<B>::template read_element<2,1>(b);
+ Tb const b22 = mat_traits<B>::template read_element<2,2>(b);
+ Tb const b23 = mat_traits<B>::template read_element<2,3>(b);
+ Tb const b30 = mat_traits<B>::template read_element<3,0>(b);
+ Tb const b31 = mat_traits<B>::template read_element<3,1>(b);
+ Tb const b32 = mat_traits<B>::template read_element<3,2>(b);
+ Tb const b33 = mat_traits<B>::template read_element<3,3>(b);
+ typedef typename deduce_vec2<A,B,4>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a0*b00+a1*b10+a2*b20+a3*b30;
+ vec_traits<R>::template write_element<1>(r)=a0*b01+a1*b11+a2*b21+a3*b31;
+ vec_traits<R>::template write_element<2>(r)=a0*b02+a1*b12+a2*b22+a3*b32;
+ vec_traits<R>::template write_element<3>(r)=a0*b03+a1*b13+a2*b23+a3*b33;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct mul_vm_defined;
+
+ template <>
+ struct
+ mul_vm_defined<4,4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/vec_operations2.hpp b/contrib/restricted/boost/boost/qvm/gen/vec_operations2.hpp
index 7a382e705d..08faeddb38 100644
--- a/contrib/restricted/boost/boost/qvm/gen/vec_operations2.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/vec_operations2.hpp
@@ -1,632 +1,632 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_F622919DE18B1FDAB0CA992B9729D49
-#define BOOST_QVM_F622919DE18B1FDAB0CA992B9729D49
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/deduce_scalar.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/error.hpp>
-#include <boost/qvm/gen/vec_assign2.hpp>
-#include <boost/qvm/math.hpp>
-#include <boost/qvm/static_assert.hpp>
-#include <boost/qvm/throw_exception.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
- deduce_vec2<A,B,2> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,2>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)+vec_traits<B>::template read_element<0>(b);
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)+vec_traits<B>::template read_element<1>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct plus_vv_defined;
-
- template <>
- struct
- plus_vv_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
- deduce_vec2<A,B,2> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,2>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)-vec_traits<B>::template read_element<0>(b);
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)-vec_traits<B>::template read_element<1>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct minus_vv_defined;
-
- template <>
- struct
- minus_vv_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
- A &>::type
- operator+=( A & a, B const & b )
- {
- vec_traits<A>::template write_element<0>(a)+=vec_traits<B>::template read_element<0>(b);
- vec_traits<A>::template write_element<1>(a)+=vec_traits<B>::template read_element<1>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct plus_eq_vv_defined;
-
- template <>
- struct
- plus_eq_vv_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
- A &>::type
- operator-=( A & a, B const & b )
- {
- vec_traits<A>::template write_element<0>(a)-=vec_traits<B>::template read_element<0>(b);
- vec_traits<A>::template write_element<1>(a)-=vec_traits<B>::template read_element<1>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct minus_eq_vv_defined;
-
- template <>
- struct
- minus_eq_vv_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==2 && is_scalar<B>::value,
- deduce_vec<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)*b;
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_vs_defined;
-
- template <>
- struct
- mul_vs_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && vec_traits<B>::dim==2,
- deduce_vec<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_vec<B>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=a*vec_traits<B>::template read_element<0>(b);
- vec_traits<R>::template write_element<1>(r)=a*vec_traits<B>::template read_element<1>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_sv_defined;
-
- template <>
- struct
- mul_sv_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==2 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- vec_traits<A>::template write_element<0>(a)*=b;
- vec_traits<A>::template write_element<1>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_eq_vs_defined;
-
- template <>
- struct
- mul_eq_vs_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==2 && is_scalar<B>::value,
- deduce_vec<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)/b;
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct div_vs_defined;
-
- template <>
- struct
- div_vs_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==2 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- vec_traits<A>::template write_element<0>(a)/=b;
- vec_traits<A>::template write_element<1>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct div_eq_vs_defined;
-
- template <>
- struct
- div_eq_vs_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value &&
- vec_traits<R>::dim==2 && vec_traits<A>::dim==2,
- R>::type
- convert_to( A const & a )
- {
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a);
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct convert_to_v_defined;
-
- template <>
- struct
- convert_to_v_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b) &&
- vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct eq_vv_defined;
-
- template <>
- struct
- eq_vv_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b)) ||
- !(vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct neq_vv_defined;
-
- template <>
- struct
- neq_vv_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==2,
- deduce_vec<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=-vec_traits<A>::template read_element<0>(a);
- vec_traits<R>::template write_element<1>(r)=-vec_traits<A>::template read_element<1>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct minus_v_defined;
-
- template <>
- struct
- minus_v_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && vec_traits<A>::dim==2,
- typename vec_traits<A>::scalar_type>::type
- mag( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const m2=a0*a0+a1*a1;
- T const mag=sqrt<T>(m2);
- return mag;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::mag;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mag_v_defined;
-
- template <>
- struct
- mag_v_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && vec_traits<A>::dim==2,
- typename vec_traits<A>::scalar_type>::type
- mag_sqr( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const m2=a0*a0+a1*a1;
- return m2;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::mag_sqr;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mag_sqr_v_defined;
-
- template <>
- struct
- mag_sqr_v_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==2,
- deduce_vec<A> >::type
- normalized( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const m2=a0*a0+a1*a1;
- if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=a0*rm;
- vec_traits<R>::template write_element<1>(r)=a1*rm;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::normalized;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==2,
- void>::type
- normalize( A & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const m2=a0*a0+a1*a1;
- if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
- vec_traits<A>::template write_element<0>(a)*=rm;
- vec_traits<A>::template write_element<1>(a)*=rm;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::normalize;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct normalize_v_defined;
-
- template <>
- struct
- normalize_v_defined<2>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
- deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type> >::type
- dot( A const & a, B const & b )
- {
- typedef typename vec_traits<A>::scalar_type Ta;
- typedef typename vec_traits<B>::scalar_type Tb;
- typedef typename deduce_scalar<Ta,Tb>::type Tr;
- Ta const a0=vec_traits<A>::template read_element<0>(a);
- Ta const a1=vec_traits<A>::template read_element<1>(a);
- Tb const b0=vec_traits<B>::template read_element<0>(b);
- Tb const b1=vec_traits<B>::template read_element<1>(b);
- Tr const dot=a0*b0+a1*b1;
- return dot;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::dot;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct dot_vv_defined;
-
- template <>
- struct
- dot_vv_defined<2>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_F622919DE18B1FDAB0CA992B9729D49
+#define BOOST_QVM_F622919DE18B1FDAB0CA992B9729D49
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/deduce_scalar.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/error.hpp>
+#include <boost/qvm/gen/vec_assign2.hpp>
+#include <boost/qvm/math.hpp>
+#include <boost/qvm/static_assert.hpp>
+#include <boost/qvm/throw_exception.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
+ deduce_vec2<A,B,2> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,2>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)+vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)+vec_traits<B>::template read_element<1>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct plus_vv_defined;
+
+ template <>
+ struct
+ plus_vv_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
+ deduce_vec2<A,B,2> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,2>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==2);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)-vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)-vec_traits<B>::template read_element<1>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_vv_defined;
+
+ template <>
+ struct
+ minus_vv_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)+=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)+=vec_traits<B>::template read_element<1>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct plus_eq_vv_defined;
+
+ template <>
+ struct
+ plus_eq_vv_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)-=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)-=vec_traits<B>::template read_element<1>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_eq_vv_defined;
+
+ template <>
+ struct
+ minus_eq_vv_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==2 && is_scalar<B>::value,
+ deduce_vec<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)*b;
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_vs_defined;
+
+ template <>
+ struct
+ mul_vs_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && vec_traits<B>::dim==2,
+ deduce_vec<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_vec<B>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a*vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=a*vec_traits<B>::template read_element<1>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_sv_defined;
+
+ template <>
+ struct
+ mul_sv_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==2 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ vec_traits<A>::template write_element<0>(a)*=b;
+ vec_traits<A>::template write_element<1>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_eq_vs_defined;
+
+ template <>
+ struct
+ mul_eq_vs_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==2 && is_scalar<B>::value,
+ deduce_vec<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)/b;
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct div_vs_defined;
+
+ template <>
+ struct
+ div_vs_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==2 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ vec_traits<A>::template write_element<0>(a)/=b;
+ vec_traits<A>::template write_element<1>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct div_eq_vs_defined;
+
+ template <>
+ struct
+ div_eq_vs_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value &&
+ vec_traits<R>::dim==2 && vec_traits<A>::dim==2,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct convert_to_v_defined;
+
+ template <>
+ struct
+ convert_to_v_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b) &&
+ vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct eq_vv_defined;
+
+ template <>
+ struct
+ eq_vv_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b)) ||
+ !(vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct neq_vv_defined;
+
+ template <>
+ struct
+ neq_vv_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==2,
+ deduce_vec<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=-vec_traits<A>::template read_element<0>(a);
+ vec_traits<R>::template write_element<1>(r)=-vec_traits<A>::template read_element<1>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_v_defined;
+
+ template <>
+ struct
+ minus_v_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && vec_traits<A>::dim==2,
+ typename vec_traits<A>::scalar_type>::type
+ mag( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const m2=a0*a0+a1*a1;
+ T const mag=sqrt<T>(m2);
+ return mag;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::mag;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mag_v_defined;
+
+ template <>
+ struct
+ mag_v_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && vec_traits<A>::dim==2,
+ typename vec_traits<A>::scalar_type>::type
+ mag_sqr( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const m2=a0*a0+a1*a1;
+ return m2;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::mag_sqr;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mag_sqr_v_defined;
+
+ template <>
+ struct
+ mag_sqr_v_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==2,
+ deduce_vec<A> >::type
+ normalized( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const m2=a0*a0+a1*a1;
+ if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a0*rm;
+ vec_traits<R>::template write_element<1>(r)=a1*rm;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::normalized;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==2,
+ void>::type
+ normalize( A & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const m2=a0*a0+a1*a1;
+ if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
+ vec_traits<A>::template write_element<0>(a)*=rm;
+ vec_traits<A>::template write_element<1>(a)*=rm;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::normalize;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct normalize_v_defined;
+
+ template <>
+ struct
+ normalize_v_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==2 && vec_traits<B>::dim==2,
+ deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type> >::type
+ dot( A const & a, B const & b )
+ {
+ typedef typename vec_traits<A>::scalar_type Ta;
+ typedef typename vec_traits<B>::scalar_type Tb;
+ typedef typename deduce_scalar<Ta,Tb>::type Tr;
+ Ta const a0=vec_traits<A>::template read_element<0>(a);
+ Ta const a1=vec_traits<A>::template read_element<1>(a);
+ Tb const b0=vec_traits<B>::template read_element<0>(b);
+ Tb const b1=vec_traits<B>::template read_element<1>(b);
+ Tr const dot=a0*b0+a1*b1;
+ return dot;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::dot;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct dot_vv_defined;
+
+ template <>
+ struct
+ dot_vv_defined<2>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/vec_operations3.hpp b/contrib/restricted/boost/boost/qvm/gen/vec_operations3.hpp
index 0c4aa518cb..c985721d65 100644
--- a/contrib/restricted/boost/boost/qvm/gen/vec_operations3.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/vec_operations3.hpp
@@ -1,653 +1,653 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_2C807EC599D5E980B2EAC9CC53BF67D6
-#define BOOST_QVM_2C807EC599D5E980B2EAC9CC53BF67D6
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/deduce_scalar.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/error.hpp>
-#include <boost/qvm/gen/vec_assign3.hpp>
-#include <boost/qvm/math.hpp>
-#include <boost/qvm/static_assert.hpp>
-#include <boost/qvm/throw_exception.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
- deduce_vec2<A,B,3> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,3>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)+vec_traits<B>::template read_element<0>(b);
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)+vec_traits<B>::template read_element<1>(b);
- vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)+vec_traits<B>::template read_element<2>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct plus_vv_defined;
-
- template <>
- struct
- plus_vv_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
- deduce_vec2<A,B,3> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,3>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)-vec_traits<B>::template read_element<0>(b);
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)-vec_traits<B>::template read_element<1>(b);
- vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)-vec_traits<B>::template read_element<2>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct minus_vv_defined;
-
- template <>
- struct
- minus_vv_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
- A &>::type
- operator+=( A & a, B const & b )
- {
- vec_traits<A>::template write_element<0>(a)+=vec_traits<B>::template read_element<0>(b);
- vec_traits<A>::template write_element<1>(a)+=vec_traits<B>::template read_element<1>(b);
- vec_traits<A>::template write_element<2>(a)+=vec_traits<B>::template read_element<2>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct plus_eq_vv_defined;
-
- template <>
- struct
- plus_eq_vv_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
- A &>::type
- operator-=( A & a, B const & b )
- {
- vec_traits<A>::template write_element<0>(a)-=vec_traits<B>::template read_element<0>(b);
- vec_traits<A>::template write_element<1>(a)-=vec_traits<B>::template read_element<1>(b);
- vec_traits<A>::template write_element<2>(a)-=vec_traits<B>::template read_element<2>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct minus_eq_vv_defined;
-
- template <>
- struct
- minus_eq_vv_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==3 && is_scalar<B>::value,
- deduce_vec<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)*b;
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)*b;
- vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_vs_defined;
-
- template <>
- struct
- mul_vs_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && vec_traits<B>::dim==3,
- deduce_vec<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_vec<B>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=a*vec_traits<B>::template read_element<0>(b);
- vec_traits<R>::template write_element<1>(r)=a*vec_traits<B>::template read_element<1>(b);
- vec_traits<R>::template write_element<2>(r)=a*vec_traits<B>::template read_element<2>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_sv_defined;
-
- template <>
- struct
- mul_sv_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==3 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- vec_traits<A>::template write_element<0>(a)*=b;
- vec_traits<A>::template write_element<1>(a)*=b;
- vec_traits<A>::template write_element<2>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_eq_vs_defined;
-
- template <>
- struct
- mul_eq_vs_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==3 && is_scalar<B>::value,
- deduce_vec<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)/b;
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)/b;
- vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct div_vs_defined;
-
- template <>
- struct
- div_vs_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==3 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- vec_traits<A>::template write_element<0>(a)/=b;
- vec_traits<A>::template write_element<1>(a)/=b;
- vec_traits<A>::template write_element<2>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct div_eq_vs_defined;
-
- template <>
- struct
- div_eq_vs_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value &&
- vec_traits<R>::dim==3 && vec_traits<A>::dim==3,
- R>::type
- convert_to( A const & a )
- {
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a);
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a);
- vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct convert_to_v_defined;
-
- template <>
- struct
- convert_to_v_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b) &&
- vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b) &&
- vec_traits<A>::template read_element<2>(a)==vec_traits<B>::template read_element<2>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct eq_vv_defined;
-
- template <>
- struct
- eq_vv_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b)) ||
- !(vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b)) ||
- !(vec_traits<A>::template read_element<2>(a)==vec_traits<B>::template read_element<2>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct neq_vv_defined;
-
- template <>
- struct
- neq_vv_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==3,
- deduce_vec<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=-vec_traits<A>::template read_element<0>(a);
- vec_traits<R>::template write_element<1>(r)=-vec_traits<A>::template read_element<1>(a);
- vec_traits<R>::template write_element<2>(r)=-vec_traits<A>::template read_element<2>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct minus_v_defined;
-
- template <>
- struct
- minus_v_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && vec_traits<A>::dim==3,
- typename vec_traits<A>::scalar_type>::type
- mag( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const a2=vec_traits<A>::template read_element<2>(a);
- T const m2=a0*a0+a1*a1+a2*a2;
- T const mag=sqrt<T>(m2);
- return mag;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::mag;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mag_v_defined;
-
- template <>
- struct
- mag_v_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && vec_traits<A>::dim==3,
- typename vec_traits<A>::scalar_type>::type
- mag_sqr( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const a2=vec_traits<A>::template read_element<2>(a);
- T const m2=a0*a0+a1*a1+a2*a2;
- return m2;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::mag_sqr;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mag_sqr_v_defined;
-
- template <>
- struct
- mag_sqr_v_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==3,
- deduce_vec<A> >::type
- normalized( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const a2=vec_traits<A>::template read_element<2>(a);
- T const m2=a0*a0+a1*a1+a2*a2;
- if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=a0*rm;
- vec_traits<R>::template write_element<1>(r)=a1*rm;
- vec_traits<R>::template write_element<2>(r)=a2*rm;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::normalized;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==3,
- void>::type
- normalize( A & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const a2=vec_traits<A>::template read_element<2>(a);
- T const m2=a0*a0+a1*a1+a2*a2;
- if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
- vec_traits<A>::template write_element<0>(a)*=rm;
- vec_traits<A>::template write_element<1>(a)*=rm;
- vec_traits<A>::template write_element<2>(a)*=rm;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::normalize;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct normalize_v_defined;
-
- template <>
- struct
- normalize_v_defined<3>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
- deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type> >::type
- dot( A const & a, B const & b )
- {
- typedef typename vec_traits<A>::scalar_type Ta;
- typedef typename vec_traits<B>::scalar_type Tb;
- typedef typename deduce_scalar<Ta,Tb>::type Tr;
- Ta const a0=vec_traits<A>::template read_element<0>(a);
- Ta const a1=vec_traits<A>::template read_element<1>(a);
- Ta const a2=vec_traits<A>::template read_element<2>(a);
- Tb const b0=vec_traits<B>::template read_element<0>(b);
- Tb const b1=vec_traits<B>::template read_element<1>(b);
- Tb const b2=vec_traits<B>::template read_element<2>(b);
- Tr const dot=a0*b0+a1*b1+a2*b2;
- return dot;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::dot;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct dot_vv_defined;
-
- template <>
- struct
- dot_vv_defined<3>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_2C807EC599D5E980B2EAC9CC53BF67D6
+#define BOOST_QVM_2C807EC599D5E980B2EAC9CC53BF67D6
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/deduce_scalar.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/error.hpp>
+#include <boost/qvm/gen/vec_assign3.hpp>
+#include <boost/qvm/math.hpp>
+#include <boost/qvm/static_assert.hpp>
+#include <boost/qvm/throw_exception.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ deduce_vec2<A,B,3> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)+vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)+vec_traits<B>::template read_element<1>(b);
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)+vec_traits<B>::template read_element<2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct plus_vv_defined;
+
+ template <>
+ struct
+ plus_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ deduce_vec2<A,B,3> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)-vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)-vec_traits<B>::template read_element<1>(b);
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)-vec_traits<B>::template read_element<2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_vv_defined;
+
+ template <>
+ struct
+ minus_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)+=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)+=vec_traits<B>::template read_element<1>(b);
+ vec_traits<A>::template write_element<2>(a)+=vec_traits<B>::template read_element<2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct plus_eq_vv_defined;
+
+ template <>
+ struct
+ plus_eq_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)-=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)-=vec_traits<B>::template read_element<1>(b);
+ vec_traits<A>::template write_element<2>(a)-=vec_traits<B>::template read_element<2>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_eq_vv_defined;
+
+ template <>
+ struct
+ minus_eq_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3 && is_scalar<B>::value,
+ deduce_vec<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)*b;
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)*b;
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_vs_defined;
+
+ template <>
+ struct
+ mul_vs_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && vec_traits<B>::dim==3,
+ deduce_vec<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_vec<B>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a*vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=a*vec_traits<B>::template read_element<1>(b);
+ vec_traits<R>::template write_element<2>(r)=a*vec_traits<B>::template read_element<2>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_sv_defined;
+
+ template <>
+ struct
+ mul_sv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ vec_traits<A>::template write_element<0>(a)*=b;
+ vec_traits<A>::template write_element<1>(a)*=b;
+ vec_traits<A>::template write_element<2>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_eq_vs_defined;
+
+ template <>
+ struct
+ mul_eq_vs_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3 && is_scalar<B>::value,
+ deduce_vec<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)/b;
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)/b;
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct div_vs_defined;
+
+ template <>
+ struct
+ div_vs_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ vec_traits<A>::template write_element<0>(a)/=b;
+ vec_traits<A>::template write_element<1>(a)/=b;
+ vec_traits<A>::template write_element<2>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct div_eq_vs_defined;
+
+ template <>
+ struct
+ div_eq_vs_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value &&
+ vec_traits<R>::dim==3 && vec_traits<A>::dim==3,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a);
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct convert_to_v_defined;
+
+ template <>
+ struct
+ convert_to_v_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b) &&
+ vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b) &&
+ vec_traits<A>::template read_element<2>(a)==vec_traits<B>::template read_element<2>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct eq_vv_defined;
+
+ template <>
+ struct
+ eq_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b)) ||
+ !(vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b)) ||
+ !(vec_traits<A>::template read_element<2>(a)==vec_traits<B>::template read_element<2>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct neq_vv_defined;
+
+ template <>
+ struct
+ neq_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3,
+ deduce_vec<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=-vec_traits<A>::template read_element<0>(a);
+ vec_traits<R>::template write_element<1>(r)=-vec_traits<A>::template read_element<1>(a);
+ vec_traits<R>::template write_element<2>(r)=-vec_traits<A>::template read_element<2>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_v_defined;
+
+ template <>
+ struct
+ minus_v_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && vec_traits<A>::dim==3,
+ typename vec_traits<A>::scalar_type>::type
+ mag( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const m2=a0*a0+a1*a1+a2*a2;
+ T const mag=sqrt<T>(m2);
+ return mag;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::mag;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mag_v_defined;
+
+ template <>
+ struct
+ mag_v_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && vec_traits<A>::dim==3,
+ typename vec_traits<A>::scalar_type>::type
+ mag_sqr( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const m2=a0*a0+a1*a1+a2*a2;
+ return m2;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::mag_sqr;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mag_sqr_v_defined;
+
+ template <>
+ struct
+ mag_sqr_v_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3,
+ deduce_vec<A> >::type
+ normalized( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const m2=a0*a0+a1*a1+a2*a2;
+ if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a0*rm;
+ vec_traits<R>::template write_element<1>(r)=a1*rm;
+ vec_traits<R>::template write_element<2>(r)=a2*rm;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::normalized;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==3,
+ void>::type
+ normalize( A & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const m2=a0*a0+a1*a1+a2*a2;
+ if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
+ vec_traits<A>::template write_element<0>(a)*=rm;
+ vec_traits<A>::template write_element<1>(a)*=rm;
+ vec_traits<A>::template write_element<2>(a)*=rm;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::normalize;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct normalize_v_defined;
+
+ template <>
+ struct
+ normalize_v_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type> >::type
+ dot( A const & a, B const & b )
+ {
+ typedef typename vec_traits<A>::scalar_type Ta;
+ typedef typename vec_traits<B>::scalar_type Tb;
+ typedef typename deduce_scalar<Ta,Tb>::type Tr;
+ Ta const a0=vec_traits<A>::template read_element<0>(a);
+ Ta const a1=vec_traits<A>::template read_element<1>(a);
+ Ta const a2=vec_traits<A>::template read_element<2>(a);
+ Tb const b0=vec_traits<B>::template read_element<0>(b);
+ Tb const b1=vec_traits<B>::template read_element<1>(b);
+ Tb const b2=vec_traits<B>::template read_element<2>(b);
+ Tr const dot=a0*b0+a1*b1+a2*b2;
+ return dot;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::dot;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct dot_vv_defined;
+
+ template <>
+ struct
+ dot_vv_defined<3>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/gen/vec_operations4.hpp b/contrib/restricted/boost/boost/qvm/gen/vec_operations4.hpp
index ee7eb1577a..e3edfa27c3 100644
--- a/contrib/restricted/boost/boost/qvm/gen/vec_operations4.hpp
+++ b/contrib/restricted/boost/boost/qvm/gen/vec_operations4.hpp
@@ -1,674 +1,674 @@
-//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_BF14D67E2DDC8E6683EF574961FF698F
-#define BOOST_QVM_BF14D67E2DDC8E6683EF574961FF698F
-
-//This file was generated by a program. Do not edit manually.
-
-#include <boost/qvm/deduce_scalar.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/error.hpp>
-#include <boost/qvm/gen/vec_assign4.hpp>
-#include <boost/qvm/math.hpp>
-#include <boost/qvm/static_assert.hpp>
-#include <boost/qvm/throw_exception.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
- deduce_vec2<A,B,4> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,4>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)+vec_traits<B>::template read_element<0>(b);
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)+vec_traits<B>::template read_element<1>(b);
- vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)+vec_traits<B>::template read_element<2>(b);
- vec_traits<R>::template write_element<3>(r)=vec_traits<A>::template read_element<3>(a)+vec_traits<B>::template read_element<3>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct plus_vv_defined;
-
- template <>
- struct
- plus_vv_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
- deduce_vec2<A,B,4> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,4>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)-vec_traits<B>::template read_element<0>(b);
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)-vec_traits<B>::template read_element<1>(b);
- vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)-vec_traits<B>::template read_element<2>(b);
- vec_traits<R>::template write_element<3>(r)=vec_traits<A>::template read_element<3>(a)-vec_traits<B>::template read_element<3>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct minus_vv_defined;
-
- template <>
- struct
- minus_vv_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
- A &>::type
- operator+=( A & a, B const & b )
- {
- vec_traits<A>::template write_element<0>(a)+=vec_traits<B>::template read_element<0>(b);
- vec_traits<A>::template write_element<1>(a)+=vec_traits<B>::template read_element<1>(b);
- vec_traits<A>::template write_element<2>(a)+=vec_traits<B>::template read_element<2>(b);
- vec_traits<A>::template write_element<3>(a)+=vec_traits<B>::template read_element<3>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator+=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct plus_eq_vv_defined;
-
- template <>
- struct
- plus_eq_vv_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
- A &>::type
- operator-=( A & a, B const & b )
- {
- vec_traits<A>::template write_element<0>(a)-=vec_traits<B>::template read_element<0>(b);
- vec_traits<A>::template write_element<1>(a)-=vec_traits<B>::template read_element<1>(b);
- vec_traits<A>::template write_element<2>(a)-=vec_traits<B>::template read_element<2>(b);
- vec_traits<A>::template write_element<3>(a)-=vec_traits<B>::template read_element<3>(b);
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct minus_eq_vv_defined;
-
- template <>
- struct
- minus_eq_vv_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==4 && is_scalar<B>::value,
- deduce_vec<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)*b;
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)*b;
- vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)*b;
- vec_traits<R>::template write_element<3>(r)=vec_traits<A>::template read_element<3>(a)*b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_vs_defined;
-
- template <>
- struct
- mul_vs_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && vec_traits<B>::dim==4,
- deduce_vec<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_vec<B>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=a*vec_traits<B>::template read_element<0>(b);
- vec_traits<R>::template write_element<1>(r)=a*vec_traits<B>::template read_element<1>(b);
- vec_traits<R>::template write_element<2>(r)=a*vec_traits<B>::template read_element<2>(b);
- vec_traits<R>::template write_element<3>(r)=a*vec_traits<B>::template read_element<3>(b);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_sv_defined;
-
- template <>
- struct
- mul_sv_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==4 && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- vec_traits<A>::template write_element<0>(a)*=b;
- vec_traits<A>::template write_element<1>(a)*=b;
- vec_traits<A>::template write_element<2>(a)*=b;
- vec_traits<A>::template write_element<3>(a)*=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mul_eq_vs_defined;
-
- template <>
- struct
- mul_eq_vs_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==4 && is_scalar<B>::value,
- deduce_vec<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)/b;
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)/b;
- vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)/b;
- vec_traits<R>::template write_element<3>(r)=vec_traits<A>::template read_element<3>(a)/b;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct div_vs_defined;
-
- template <>
- struct
- div_vs_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==4 && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- vec_traits<A>::template write_element<0>(a)/=b;
- vec_traits<A>::template write_element<1>(a)/=b;
- vec_traits<A>::template write_element<2>(a)/=b;
- vec_traits<A>::template write_element<3>(a)/=b;
- return a;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator/=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct div_eq_vs_defined;
-
- template <>
- struct
- div_eq_vs_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value &&
- vec_traits<R>::dim==4 && vec_traits<A>::dim==4,
- R>::type
- convert_to( A const & a )
- {
- R r;
- vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a);
- vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a);
- vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a);
- vec_traits<R>::template write_element<3>(r)=vec_traits<A>::template read_element<3>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::convert_to;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct convert_to_v_defined;
-
- template <>
- struct
- convert_to_v_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b) &&
- vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b) &&
- vec_traits<A>::template read_element<2>(a)==vec_traits<B>::template read_element<2>(b) &&
- vec_traits<A>::template read_element<3>(a)==vec_traits<B>::template read_element<3>(b);
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator==;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct eq_vv_defined;
-
- template <>
- struct
- eq_vv_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- !(vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b)) ||
- !(vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b)) ||
- !(vec_traits<A>::template read_element<2>(a)==vec_traits<B>::template read_element<2>(b)) ||
- !(vec_traits<A>::template read_element<3>(a)==vec_traits<B>::template read_element<3>(b));
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator!=;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct neq_vv_defined;
-
- template <>
- struct
- neq_vv_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==4,
- deduce_vec<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=-vec_traits<A>::template read_element<0>(a);
- vec_traits<R>::template write_element<1>(r)=-vec_traits<A>::template read_element<1>(a);
- vec_traits<R>::template write_element<2>(r)=-vec_traits<A>::template read_element<2>(a);
- vec_traits<R>::template write_element<3>(r)=-vec_traits<A>::template read_element<3>(a);
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator-;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct minus_v_defined;
-
- template <>
- struct
- minus_v_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && vec_traits<A>::dim==4,
- typename vec_traits<A>::scalar_type>::type
- mag( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const a2=vec_traits<A>::template read_element<2>(a);
- T const a3=vec_traits<A>::template read_element<3>(a);
- T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
- T const mag=sqrt<T>(m2);
- return mag;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::mag;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mag_v_defined;
-
- template <>
- struct
- mag_v_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && vec_traits<A>::dim==4,
- typename vec_traits<A>::scalar_type>::type
- mag_sqr( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const a2=vec_traits<A>::template read_element<2>(a);
- T const a3=vec_traits<A>::template read_element<3>(a);
- T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
- return m2;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::mag_sqr;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct mag_sqr_v_defined;
-
- template <>
- struct
- mag_sqr_v_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==4,
- deduce_vec<A> >::type
- normalized( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const a2=vec_traits<A>::template read_element<2>(a);
- T const a3=vec_traits<A>::template read_element<3>(a);
- T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
- if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
- typedef typename deduce_vec<A>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=a0*rm;
- vec_traits<R>::template write_element<1>(r)=a1*rm;
- vec_traits<R>::template write_element<2>(r)=a2*rm;
- vec_traits<R>::template write_element<3>(r)=a3*rm;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::normalized;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- vec_traits<A>::dim==4,
- void>::type
- normalize( A & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T const a0=vec_traits<A>::template read_element<0>(a);
- T const a1=vec_traits<A>::template read_element<1>(a);
- T const a2=vec_traits<A>::template read_element<2>(a);
- T const a3=vec_traits<A>::template read_element<3>(a);
- T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
- if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
- vec_traits<A>::template write_element<0>(a)*=rm;
- vec_traits<A>::template write_element<1>(a)*=rm;
- vec_traits<A>::template write_element<2>(a)*=rm;
- vec_traits<A>::template write_element<3>(a)*=rm;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::normalize;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct normalize_v_defined;
-
- template <>
- struct
- normalize_v_defined<4>
- {
- static bool const value=true;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
- deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type> >::type
- dot( A const & a, B const & b )
- {
- typedef typename vec_traits<A>::scalar_type Ta;
- typedef typename vec_traits<B>::scalar_type Tb;
- typedef typename deduce_scalar<Ta,Tb>::type Tr;
- Ta const a0=vec_traits<A>::template read_element<0>(a);
- Ta const a1=vec_traits<A>::template read_element<1>(a);
- Ta const a2=vec_traits<A>::template read_element<2>(a);
- Ta const a3=vec_traits<A>::template read_element<3>(a);
- Tb const b0=vec_traits<B>::template read_element<0>(b);
- Tb const b1=vec_traits<B>::template read_element<1>(b);
- Tb const b2=vec_traits<B>::template read_element<2>(b);
- Tb const b3=vec_traits<B>::template read_element<3>(b);
- Tr const dot=a0*b0+a1*b1+a2*b2+a3*b3;
- return dot;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::dot;
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct dot_vv_defined;
-
- template <>
- struct
- dot_vv_defined<4>
- {
- static bool const value=true;
- };
- }
-
- }
- }
-
-#endif
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_BF14D67E2DDC8E6683EF574961FF698F
+#define BOOST_QVM_BF14D67E2DDC8E6683EF574961FF698F
+
+//This file was generated by a program. Do not edit manually.
+
+#include <boost/qvm/deduce_scalar.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/error.hpp>
+#include <boost/qvm/gen/vec_assign4.hpp>
+#include <boost/qvm/math.hpp>
+#include <boost/qvm/static_assert.hpp>
+#include <boost/qvm/throw_exception.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
+ deduce_vec2<A,B,4> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,4>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)+vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)+vec_traits<B>::template read_element<1>(b);
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)+vec_traits<B>::template read_element<2>(b);
+ vec_traits<R>::template write_element<3>(r)=vec_traits<A>::template read_element<3>(a)+vec_traits<B>::template read_element<3>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct plus_vv_defined;
+
+ template <>
+ struct
+ plus_vv_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
+ deduce_vec2<A,B,4> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,4>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==4);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)-vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)-vec_traits<B>::template read_element<1>(b);
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)-vec_traits<B>::template read_element<2>(b);
+ vec_traits<R>::template write_element<3>(r)=vec_traits<A>::template read_element<3>(a)-vec_traits<B>::template read_element<3>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_vv_defined;
+
+ template <>
+ struct
+ minus_vv_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)+=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)+=vec_traits<B>::template read_element<1>(b);
+ vec_traits<A>::template write_element<2>(a)+=vec_traits<B>::template read_element<2>(b);
+ vec_traits<A>::template write_element<3>(a)+=vec_traits<B>::template read_element<3>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator+=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct plus_eq_vv_defined;
+
+ template <>
+ struct
+ plus_eq_vv_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ vec_traits<A>::template write_element<0>(a)-=vec_traits<B>::template read_element<0>(b);
+ vec_traits<A>::template write_element<1>(a)-=vec_traits<B>::template read_element<1>(b);
+ vec_traits<A>::template write_element<2>(a)-=vec_traits<B>::template read_element<2>(b);
+ vec_traits<A>::template write_element<3>(a)-=vec_traits<B>::template read_element<3>(b);
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_eq_vv_defined;
+
+ template <>
+ struct
+ minus_eq_vv_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==4 && is_scalar<B>::value,
+ deduce_vec<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)*b;
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)*b;
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)*b;
+ vec_traits<R>::template write_element<3>(r)=vec_traits<A>::template read_element<3>(a)*b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_vs_defined;
+
+ template <>
+ struct
+ mul_vs_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && vec_traits<B>::dim==4,
+ deduce_vec<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_vec<B>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a*vec_traits<B>::template read_element<0>(b);
+ vec_traits<R>::template write_element<1>(r)=a*vec_traits<B>::template read_element<1>(b);
+ vec_traits<R>::template write_element<2>(r)=a*vec_traits<B>::template read_element<2>(b);
+ vec_traits<R>::template write_element<3>(r)=a*vec_traits<B>::template read_element<3>(b);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_sv_defined;
+
+ template <>
+ struct
+ mul_sv_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==4 && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ vec_traits<A>::template write_element<0>(a)*=b;
+ vec_traits<A>::template write_element<1>(a)*=b;
+ vec_traits<A>::template write_element<2>(a)*=b;
+ vec_traits<A>::template write_element<3>(a)*=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mul_eq_vs_defined;
+
+ template <>
+ struct
+ mul_eq_vs_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==4 && is_scalar<B>::value,
+ deduce_vec<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a)/b;
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a)/b;
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a)/b;
+ vec_traits<R>::template write_element<3>(r)=vec_traits<A>::template read_element<3>(a)/b;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct div_vs_defined;
+
+ template <>
+ struct
+ div_vs_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==4 && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ vec_traits<A>::template write_element<0>(a)/=b;
+ vec_traits<A>::template write_element<1>(a)/=b;
+ vec_traits<A>::template write_element<2>(a)/=b;
+ vec_traits<A>::template write_element<3>(a)/=b;
+ return a;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator/=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct div_eq_vs_defined;
+
+ template <>
+ struct
+ div_eq_vs_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value &&
+ vec_traits<R>::dim==4 && vec_traits<A>::dim==4,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ vec_traits<R>::template write_element<0>(r)=vec_traits<A>::template read_element<0>(a);
+ vec_traits<R>::template write_element<1>(r)=vec_traits<A>::template read_element<1>(a);
+ vec_traits<R>::template write_element<2>(r)=vec_traits<A>::template read_element<2>(a);
+ vec_traits<R>::template write_element<3>(r)=vec_traits<A>::template read_element<3>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::convert_to;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct convert_to_v_defined;
+
+ template <>
+ struct
+ convert_to_v_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b) &&
+ vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b) &&
+ vec_traits<A>::template read_element<2>(a)==vec_traits<B>::template read_element<2>(b) &&
+ vec_traits<A>::template read_element<3>(a)==vec_traits<B>::template read_element<3>(b);
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator==;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct eq_vv_defined;
+
+ template <>
+ struct
+ eq_vv_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ !(vec_traits<A>::template read_element<0>(a)==vec_traits<B>::template read_element<0>(b)) ||
+ !(vec_traits<A>::template read_element<1>(a)==vec_traits<B>::template read_element<1>(b)) ||
+ !(vec_traits<A>::template read_element<2>(a)==vec_traits<B>::template read_element<2>(b)) ||
+ !(vec_traits<A>::template read_element<3>(a)==vec_traits<B>::template read_element<3>(b));
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator!=;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct neq_vv_defined;
+
+ template <>
+ struct
+ neq_vv_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==4,
+ deduce_vec<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=-vec_traits<A>::template read_element<0>(a);
+ vec_traits<R>::template write_element<1>(r)=-vec_traits<A>::template read_element<1>(a);
+ vec_traits<R>::template write_element<2>(r)=-vec_traits<A>::template read_element<2>(a);
+ vec_traits<R>::template write_element<3>(r)=-vec_traits<A>::template read_element<3>(a);
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator-;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct minus_v_defined;
+
+ template <>
+ struct
+ minus_v_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && vec_traits<A>::dim==4,
+ typename vec_traits<A>::scalar_type>::type
+ mag( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const a3=vec_traits<A>::template read_element<3>(a);
+ T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
+ T const mag=sqrt<T>(m2);
+ return mag;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::mag;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mag_v_defined;
+
+ template <>
+ struct
+ mag_v_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && vec_traits<A>::dim==4,
+ typename vec_traits<A>::scalar_type>::type
+ mag_sqr( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const a3=vec_traits<A>::template read_element<3>(a);
+ T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
+ return m2;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::mag_sqr;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct mag_sqr_v_defined;
+
+ template <>
+ struct
+ mag_sqr_v_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==4,
+ deduce_vec<A> >::type
+ normalized( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const a3=vec_traits<A>::template read_element<3>(a);
+ T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
+ if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a0*rm;
+ vec_traits<R>::template write_element<1>(r)=a1*rm;
+ vec_traits<R>::template write_element<2>(r)=a2*rm;
+ vec_traits<R>::template write_element<3>(r)=a3*rm;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::normalized;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ vec_traits<A>::dim==4,
+ void>::type
+ normalize( A & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T const a0=vec_traits<A>::template read_element<0>(a);
+ T const a1=vec_traits<A>::template read_element<1>(a);
+ T const a2=vec_traits<A>::template read_element<2>(a);
+ T const a3=vec_traits<A>::template read_element<3>(a);
+ T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
+ if( m2==scalar_traits<typename vec_traits<A>::scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
+ vec_traits<A>::template write_element<0>(a)*=rm;
+ vec_traits<A>::template write_element<1>(a)*=rm;
+ vec_traits<A>::template write_element<2>(a)*=rm;
+ vec_traits<A>::template write_element<3>(a)*=rm;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::normalize;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct normalize_v_defined;
+
+ template <>
+ struct
+ normalize_v_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ vec_traits<A>::dim==4 && vec_traits<B>::dim==4,
+ deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type> >::type
+ dot( A const & a, B const & b )
+ {
+ typedef typename vec_traits<A>::scalar_type Ta;
+ typedef typename vec_traits<B>::scalar_type Tb;
+ typedef typename deduce_scalar<Ta,Tb>::type Tr;
+ Ta const a0=vec_traits<A>::template read_element<0>(a);
+ Ta const a1=vec_traits<A>::template read_element<1>(a);
+ Ta const a2=vec_traits<A>::template read_element<2>(a);
+ Ta const a3=vec_traits<A>::template read_element<3>(a);
+ Tb const b0=vec_traits<B>::template read_element<0>(b);
+ Tb const b1=vec_traits<B>::template read_element<1>(b);
+ Tb const b2=vec_traits<B>::template read_element<2>(b);
+ Tb const b3=vec_traits<B>::template read_element<3>(b);
+ Tr const dot=a0*b0+a1*b1+a2*b2+a3*b3;
+ return dot;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::dot;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct dot_vv_defined;
+
+ template <>
+ struct
+ dot_vv_defined<4>
+ {
+ static bool const value=true;
+ };
+ }
+
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/inline.hpp b/contrib/restricted/boost/boost/qvm/inline.hpp
index 0d1ac8f5ca..419fad223e 100644
--- a/contrib/restricted/boost/boost/qvm/inline.hpp
+++ b/contrib/restricted/boost/boost/qvm/inline.hpp
@@ -1,34 +1,34 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_FORCEINLINE
-# if defined(_MSC_VER)
-# define BOOST_QVM_FORCEINLINE __forceinline
-# elif defined(__GNUC__) && __GNUC__>3
-# define BOOST_QVM_FORCEINLINE inline __attribute__ ((always_inline))
-# else
-# define BOOST_QVM_FORCEINLINE inline
-# endif
-#endif
-
-#ifndef BOOST_QVM_INLINE
-#define BOOST_QVM_INLINE inline
-#endif
-
-#ifndef BOOST_QVM_INLINE_TRIVIAL
-#define BOOST_QVM_INLINE_TRIVIAL BOOST_QVM_FORCEINLINE
-#endif
-
-#ifndef BOOST_QVM_INLINE_CRITICAL
-#define BOOST_QVM_INLINE_CRITICAL BOOST_QVM_FORCEINLINE
-#endif
-
-#ifndef BOOST_QVM_INLINE_OPERATIONS
-#define BOOST_QVM_INLINE_OPERATIONS BOOST_QVM_INLINE
-#endif
-
-#ifndef BOOST_QVM_INLINE_RECURSION
-#define BOOST_QVM_INLINE_RECURSION BOOST_QVM_INLINE_OPERATIONS
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_FORCEINLINE
+# if defined(_MSC_VER)
+# define BOOST_QVM_FORCEINLINE __forceinline
+# elif defined(__GNUC__) && __GNUC__>3
+# define BOOST_QVM_FORCEINLINE inline __attribute__ ((always_inline))
+# else
+# define BOOST_QVM_FORCEINLINE inline
+# endif
+#endif
+
+#ifndef BOOST_QVM_INLINE
+#define BOOST_QVM_INLINE inline
+#endif
+
+#ifndef BOOST_QVM_INLINE_TRIVIAL
+#define BOOST_QVM_INLINE_TRIVIAL BOOST_QVM_FORCEINLINE
+#endif
+
+#ifndef BOOST_QVM_INLINE_CRITICAL
+#define BOOST_QVM_INLINE_CRITICAL BOOST_QVM_FORCEINLINE
+#endif
+
+#ifndef BOOST_QVM_INLINE_OPERATIONS
+#define BOOST_QVM_INLINE_OPERATIONS BOOST_QVM_INLINE
+#endif
+
+#ifndef BOOST_QVM_INLINE_RECURSION
+#define BOOST_QVM_INLINE_RECURSION BOOST_QVM_INLINE_OPERATIONS
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/map.hpp b/contrib/restricted/boost/boost/qvm/map.hpp
index e9bf742505..9b53211a90 100644
--- a/contrib/restricted/boost/boost/qvm/map.hpp
+++ b/contrib/restricted/boost/boost/qvm/map.hpp
@@ -1,13 +1,13 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_74318C76B4ED11E58A3AE198BB8E7F8B
-#define UUID_74318C76B4ED11E58A3AE198BB8E7F8B
-
-#include <boost/qvm/map_vec_mat.hpp>
-#include <boost/qvm/map_mat_vec.hpp>
-#include <boost/qvm/map_mat_mat.hpp>
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_74318C76B4ED11E58A3AE198BB8E7F8B
+#define UUID_74318C76B4ED11E58A3AE198BB8E7F8B
+
+#include <boost/qvm/map_vec_mat.hpp>
+#include <boost/qvm/map_mat_vec.hpp>
+#include <boost/qvm/map_mat_mat.hpp>
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/map_mat_mat.hpp b/contrib/restricted/boost/boost/qvm/map_mat_mat.hpp
index f3704307d7..8f691722ea 100644
--- a/contrib/restricted/boost/boost/qvm/map_mat_mat.hpp
+++ b/contrib/restricted/boost/boost/qvm/map_mat_mat.hpp
@@ -1,895 +1,895 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_20D98340A3EB11DEB2180CD156D89593
-#define UUID_20D98340A3EB11DEB2180CD156D89593
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/deduce_mat.hpp>
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/enable_if.hpp>
-#include <boost/qvm/detail/transp_impl.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Row,class OriginalMatrix>
- class
- del_row_
- {
- del_row_( del_row_ const & );
- del_row_ & operator=( del_row_ const & );
- ~del_row_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- del_row_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <int I,class OriginalMatrix>
- struct
- mat_traits< qvm_detail::del_row_<I,OriginalMatrix> >
- {
- typedef qvm_detail::del_row_<I,OriginalMatrix> this_matrix;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const rows=mat_traits<OriginalMatrix>::rows-1;
- static int const cols=mat_traits<OriginalMatrix>::cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template read_element<Row+(Row>=I),Col>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template write_element<Row+(Row>=I),Col>(reinterpret_cast<OriginalMatrix &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::read_element_idx(row+(row>=I),col,reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::write_element_idx(row+(row>=I),col,reinterpret_cast<OriginalMatrix &>(x));
- }
- };
-
- template <int J,class OriginalMatrix,int R,int C>
- struct
- deduce_mat<qvm_detail::del_row_<J,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int J,class OriginalMatrix,int R,int C>
- struct
- deduce_mat2<qvm_detail::del_row_<J,OriginalMatrix>,qvm_detail::del_row_<J,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int Row,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::del_row_<Row,A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- del_row( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::del_row_<Row,A> const &>(a);
- }
-
- template <int Row,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::del_row_<Row,A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- del_row( A & a )
- {
- return reinterpret_cast<typename qvm_detail::del_row_<Row,A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Col,class OriginalMatrix>
- class
- del_col_
- {
- del_col_( del_col_ const & );
- del_col_ & operator=( del_col_ const & );
- ~del_col_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- del_col_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <int J,class OriginalMatrix>
- struct
- mat_traits< qvm_detail::del_col_<J,OriginalMatrix> >
- {
- typedef qvm_detail::del_col_<J,OriginalMatrix> this_matrix;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const rows=mat_traits<OriginalMatrix>::rows;
- static int const cols=mat_traits<OriginalMatrix>::cols-1;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template read_element<Row,Col+(Col>=J)>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template write_element<Row,Col+(Col>=J)>(reinterpret_cast<OriginalMatrix &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::read_element_idx(row,col+(col>=J),reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::write_element_idx(row,col+(col>=J),reinterpret_cast<OriginalMatrix &>(x));
- }
- };
-
- template <int J,class OriginalMatrix,int R,int C>
- struct
- deduce_mat<qvm_detail::del_col_<J,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int J,class OriginalMatrix,int R,int C>
- struct
- deduce_mat2<qvm_detail::del_col_<J,OriginalMatrix>,qvm_detail::del_col_<J,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int Col,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::del_col_<Col,A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- del_col( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::del_col_<Col,A> const &>(a);
- }
-
- template <int Col,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::del_col_<Col,A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- del_col( A & a )
- {
- return reinterpret_cast<typename qvm_detail::del_col_<Col,A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Row,int Col,class OriginalMatrix>
- class
- del_row_col_
- {
- del_row_col_( del_row_col_ const & );
- ~del_row_col_();
-
- public:
-
- BOOST_QVM_INLINE_TRIVIAL
- del_row_col_ &
- operator=( del_row_col_ const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- del_row_col_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <int I,int J,class OriginalMatrix>
- struct
- mat_traits< qvm_detail::del_row_col_<I,J,OriginalMatrix> >
- {
- typedef qvm_detail::del_row_col_<I,J,OriginalMatrix> this_matrix;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const rows=mat_traits<OriginalMatrix>::rows-1;
- static int const cols=mat_traits<OriginalMatrix>::cols-1;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template read_element<Row+(Row>=I),Col+(Col>=J)>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template write_element<Row+(Row>=I),Col+(Col>=J)>(reinterpret_cast<OriginalMatrix &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::read_element_idx(row+(row>=I),col+(col>=J),reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::write_element_idx(row+(row>=I),col+(col>=J),reinterpret_cast<OriginalMatrix &>(x));
- }
- };
-
- template <int I,int J,class OriginalMatrix,int R,int C>
- struct
- deduce_mat<qvm_detail::del_row_col_<I,J,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int I,int J,class OriginalMatrix,int R,int C>
- struct
- deduce_mat2<qvm_detail::del_row_col_<I,J,OriginalMatrix>,qvm_detail::del_row_col_<I,J,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int Row,int Col,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::del_row_col_<Row,Col,A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- del_row_col( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::del_row_col_<Row,Col,A> const &>(a);
- }
-
- template <int Row,int Col,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::del_row_col_<Row,Col,A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- del_row_col( A & a )
- {
- return reinterpret_cast<typename qvm_detail::del_row_col_<Row,Col,A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Row,class OriginalMatrix>
- class
- neg_row_
- {
- neg_row_( neg_row_ const & );
- neg_row_ & operator=( neg_row_ const & );
- ~neg_row_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- neg_row_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <int I,class OriginalMatrix>
- struct
- mat_traits< qvm_detail::neg_row_<I,OriginalMatrix> >
- {
- typedef qvm_detail::neg_row_<I,OriginalMatrix> this_matrix;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const rows=mat_traits<OriginalMatrix>::rows;
- static int const cols=mat_traits<OriginalMatrix>::cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return Row==I ?
- -mat_traits<OriginalMatrix>::template read_element<Row,Col>(reinterpret_cast<OriginalMatrix const &>(x)) :
- mat_traits<OriginalMatrix>::template read_element<Row,Col>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return row==I?
- -mat_traits<OriginalMatrix>::read_element_idx(row,col,reinterpret_cast<OriginalMatrix const &>(x)) :
- mat_traits<OriginalMatrix>::read_element_idx(row,col,reinterpret_cast<OriginalMatrix const &>(x));
- }
- };
-
- template <int J,class OriginalMatrix,int R,int C>
- struct
- deduce_mat<qvm_detail::neg_row_<J,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int J,class OriginalMatrix,int R,int C>
- struct
- deduce_mat2<qvm_detail::neg_row_<J,OriginalMatrix>,qvm_detail::neg_row_<J,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int Row,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::neg_row_<Row,A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- neg_row( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::neg_row_<Row,A> const &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Col,class OriginalMatrix>
- class
- neg_col_
- {
- neg_col_( neg_col_ const & );
- neg_col_ & operator=( neg_col_ const & );
- ~neg_col_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- neg_col_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <int J,class OriginalMatrix>
- struct
- mat_traits< qvm_detail::neg_col_<J,OriginalMatrix> >
- {
- typedef qvm_detail::neg_col_<J,OriginalMatrix> this_matrix;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const rows=mat_traits<OriginalMatrix>::rows;
- static int const cols=mat_traits<OriginalMatrix>::cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return Col==J?
- -mat_traits<OriginalMatrix>::template read_element<Row,Col>(reinterpret_cast<OriginalMatrix const &>(x)) :
- mat_traits<OriginalMatrix>::template read_element<Row,Col>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return col==J?
- -mat_traits<OriginalMatrix>::read_element_idx(row,col,reinterpret_cast<OriginalMatrix const &>(x)) :
- mat_traits<OriginalMatrix>::read_element_idx(row,col,reinterpret_cast<OriginalMatrix const &>(x));
- }
- };
-
- template <int J,class OriginalMatrix,int R,int C>
- struct
- deduce_mat<qvm_detail::neg_col_<J,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int J,class OriginalMatrix,int R,int C>
- struct
- deduce_mat2<qvm_detail::neg_col_<J,OriginalMatrix>,qvm_detail::neg_col_<J,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int Col,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::neg_col_<Col,A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- neg_col( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::neg_col_<Col,A> const &>(a);
- }
-
- ////////////////////////////////////////////////
-
- template <class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::transposed_<A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- transposed( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::transposed_<A> const &>(a);
- }
-
- template <class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::transposed_<A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- transposed( A & a )
- {
- return reinterpret_cast<typename qvm_detail::transposed_<A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Row1,int Row2,class OriginalMatrix>
- class
- swap_rows_
- {
- swap_rows_( swap_rows_ const & );
- swap_rows_ & operator=( swap_rows_ const & );
- ~swap_rows_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- swap_rows_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <int R1,int R2,class OriginalMatrix>
- struct
- mat_traits< qvm_detail::swap_rows_<R1,R2,OriginalMatrix> >
- {
- typedef qvm_detail::swap_rows_<R1,R2,OriginalMatrix> this_matrix;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const rows=mat_traits<OriginalMatrix>::rows;
- static int const cols=mat_traits<OriginalMatrix>::cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template read_element<(Row==R1 && R1!=R2)*R2+(Row==R2 && R1!=R2)*R1+((Row!=R1 && Row!=R2) || R1==R2)*Row,Col>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template write_element<(Row==R1 && R1!=R2)*R2+(Row==R2 && R1!=R2)*R1+((Row!=R1 && Row!=R2) || R1==R2)*Row,Col>(reinterpret_cast<OriginalMatrix &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::read_element_idx(row==R1?R2:row==R2?R1:row,col,reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::write_element_idx(row==R1?R2:row==R2?R1:row,col,reinterpret_cast<OriginalMatrix &>(x));
- }
- };
-
- template <int R1,int R2,class OriginalMatrix,int R,int C>
- struct
- deduce_mat<qvm_detail::swap_rows_<R1,R2,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int R1,int R2,class OriginalMatrix,int R,int C>
- struct
- deduce_mat2<qvm_detail::swap_rows_<R1,R2,OriginalMatrix>,qvm_detail::swap_rows_<R1,R2,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int R1,int R2,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::swap_rows_<R1,R2,A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- swap_rows( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::swap_rows_<R1,R2,A> const &>(a);
- }
-
- template <int R1,int R2,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::swap_rows_<R1,R2,A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- swap_rows( A & a )
- {
- return reinterpret_cast<typename qvm_detail::swap_rows_<R1,R2,A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Row1,int Row2,class OriginalMatrix>
- class
- swap_cols_
- {
- swap_cols_( swap_cols_ const & );
- swap_cols_ & operator=( swap_cols_ const & );
- ~swap_cols_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- swap_cols_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <int C1,int C2,class OriginalMatrix>
- struct
- mat_traits< qvm_detail::swap_cols_<C1,C2,OriginalMatrix> >
- {
- typedef qvm_detail::swap_cols_<C1,C2,OriginalMatrix> this_matrix;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const rows=mat_traits<OriginalMatrix>::rows;
- static int const cols=mat_traits<OriginalMatrix>::cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template read_element<Row,(Col==C1 && C1!=C2)*C2+(Col==C2 && C1!=C2)*C1+((Col!=C1 && Col!=C2) || C1==C2)*Col>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<OriginalMatrix>::template write_element<Row,(Col==C1 && C1!=C2)*C2+(Col==C2 && C1!=C2)*C1+((Col!=C1 && Col!=C2) || C1==C2)*Col>(reinterpret_cast<OriginalMatrix &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::read_element_idx(row,col==C1?C2:col==C2?C1:col,reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<OriginalMatrix>::write_element_idx(row,col==C1?C2:col==C2?C1:col,reinterpret_cast<OriginalMatrix &>(x));
- }
- };
-
- template <int C1,int C2,class OriginalMatrix,int R,int C>
- struct
- deduce_mat<qvm_detail::swap_cols_<C1,C2,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int C1,int C2,class OriginalMatrix,int R,int C>
- struct
- deduce_mat2<qvm_detail::swap_cols_<C1,C2,OriginalMatrix>,qvm_detail::swap_cols_<C1,C2,OriginalMatrix>,R,C>
- {
- typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
- };
-
- template <int C1,int C2,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::swap_cols_<C1,C2,A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- swap_cols( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::swap_cols_<C1,C2,A> const &>(a);
- }
-
- template <int C1,int C2,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::swap_cols_<C1,C2,A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- swap_cols( A & a )
- {
- return reinterpret_cast<typename qvm_detail::swap_cols_<C1,C2,A> &>(a);
- }
-
- ////////////////////////////////////////////////
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_20D98340A3EB11DEB2180CD156D89593
+#define UUID_20D98340A3EB11DEB2180CD156D89593
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/deduce_mat.hpp>
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/enable_if.hpp>
+#include <boost/qvm/detail/transp_impl.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Row,class OriginalMatrix>
+ class
+ del_row_
+ {
+ del_row_( del_row_ const & );
+ del_row_ & operator=( del_row_ const & );
+ ~del_row_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ del_row_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <int I,class OriginalMatrix>
+ struct
+ mat_traits< qvm_detail::del_row_<I,OriginalMatrix> >
+ {
+ typedef qvm_detail::del_row_<I,OriginalMatrix> this_matrix;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const rows=mat_traits<OriginalMatrix>::rows-1;
+ static int const cols=mat_traits<OriginalMatrix>::cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template read_element<Row+(Row>=I),Col>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template write_element<Row+(Row>=I),Col>(reinterpret_cast<OriginalMatrix &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::read_element_idx(row+(row>=I),col,reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::write_element_idx(row+(row>=I),col,reinterpret_cast<OriginalMatrix &>(x));
+ }
+ };
+
+ template <int J,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat<qvm_detail::del_row_<J,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int J,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::del_row_<J,OriginalMatrix>,qvm_detail::del_row_<J,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int Row,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::del_row_<Row,A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ del_row( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::del_row_<Row,A> const &>(a);
+ }
+
+ template <int Row,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::del_row_<Row,A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ del_row( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::del_row_<Row,A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Col,class OriginalMatrix>
+ class
+ del_col_
+ {
+ del_col_( del_col_ const & );
+ del_col_ & operator=( del_col_ const & );
+ ~del_col_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ del_col_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <int J,class OriginalMatrix>
+ struct
+ mat_traits< qvm_detail::del_col_<J,OriginalMatrix> >
+ {
+ typedef qvm_detail::del_col_<J,OriginalMatrix> this_matrix;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const rows=mat_traits<OriginalMatrix>::rows;
+ static int const cols=mat_traits<OriginalMatrix>::cols-1;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template read_element<Row,Col+(Col>=J)>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template write_element<Row,Col+(Col>=J)>(reinterpret_cast<OriginalMatrix &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::read_element_idx(row,col+(col>=J),reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::write_element_idx(row,col+(col>=J),reinterpret_cast<OriginalMatrix &>(x));
+ }
+ };
+
+ template <int J,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat<qvm_detail::del_col_<J,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int J,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::del_col_<J,OriginalMatrix>,qvm_detail::del_col_<J,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int Col,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::del_col_<Col,A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ del_col( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::del_col_<Col,A> const &>(a);
+ }
+
+ template <int Col,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::del_col_<Col,A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ del_col( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::del_col_<Col,A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Row,int Col,class OriginalMatrix>
+ class
+ del_row_col_
+ {
+ del_row_col_( del_row_col_ const & );
+ ~del_row_col_();
+
+ public:
+
+ BOOST_QVM_INLINE_TRIVIAL
+ del_row_col_ &
+ operator=( del_row_col_ const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ del_row_col_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <int I,int J,class OriginalMatrix>
+ struct
+ mat_traits< qvm_detail::del_row_col_<I,J,OriginalMatrix> >
+ {
+ typedef qvm_detail::del_row_col_<I,J,OriginalMatrix> this_matrix;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const rows=mat_traits<OriginalMatrix>::rows-1;
+ static int const cols=mat_traits<OriginalMatrix>::cols-1;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template read_element<Row+(Row>=I),Col+(Col>=J)>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template write_element<Row+(Row>=I),Col+(Col>=J)>(reinterpret_cast<OriginalMatrix &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::read_element_idx(row+(row>=I),col+(col>=J),reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::write_element_idx(row+(row>=I),col+(col>=J),reinterpret_cast<OriginalMatrix &>(x));
+ }
+ };
+
+ template <int I,int J,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat<qvm_detail::del_row_col_<I,J,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int I,int J,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::del_row_col_<I,J,OriginalMatrix>,qvm_detail::del_row_col_<I,J,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int Row,int Col,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::del_row_col_<Row,Col,A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ del_row_col( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::del_row_col_<Row,Col,A> const &>(a);
+ }
+
+ template <int Row,int Col,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::del_row_col_<Row,Col,A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ del_row_col( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::del_row_col_<Row,Col,A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Row,class OriginalMatrix>
+ class
+ neg_row_
+ {
+ neg_row_( neg_row_ const & );
+ neg_row_ & operator=( neg_row_ const & );
+ ~neg_row_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ neg_row_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <int I,class OriginalMatrix>
+ struct
+ mat_traits< qvm_detail::neg_row_<I,OriginalMatrix> >
+ {
+ typedef qvm_detail::neg_row_<I,OriginalMatrix> this_matrix;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const rows=mat_traits<OriginalMatrix>::rows;
+ static int const cols=mat_traits<OriginalMatrix>::cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return Row==I ?
+ -mat_traits<OriginalMatrix>::template read_element<Row,Col>(reinterpret_cast<OriginalMatrix const &>(x)) :
+ mat_traits<OriginalMatrix>::template read_element<Row,Col>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return row==I?
+ -mat_traits<OriginalMatrix>::read_element_idx(row,col,reinterpret_cast<OriginalMatrix const &>(x)) :
+ mat_traits<OriginalMatrix>::read_element_idx(row,col,reinterpret_cast<OriginalMatrix const &>(x));
+ }
+ };
+
+ template <int J,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat<qvm_detail::neg_row_<J,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int J,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::neg_row_<J,OriginalMatrix>,qvm_detail::neg_row_<J,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int Row,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::neg_row_<Row,A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ neg_row( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::neg_row_<Row,A> const &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Col,class OriginalMatrix>
+ class
+ neg_col_
+ {
+ neg_col_( neg_col_ const & );
+ neg_col_ & operator=( neg_col_ const & );
+ ~neg_col_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ neg_col_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <int J,class OriginalMatrix>
+ struct
+ mat_traits< qvm_detail::neg_col_<J,OriginalMatrix> >
+ {
+ typedef qvm_detail::neg_col_<J,OriginalMatrix> this_matrix;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const rows=mat_traits<OriginalMatrix>::rows;
+ static int const cols=mat_traits<OriginalMatrix>::cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return Col==J?
+ -mat_traits<OriginalMatrix>::template read_element<Row,Col>(reinterpret_cast<OriginalMatrix const &>(x)) :
+ mat_traits<OriginalMatrix>::template read_element<Row,Col>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return col==J?
+ -mat_traits<OriginalMatrix>::read_element_idx(row,col,reinterpret_cast<OriginalMatrix const &>(x)) :
+ mat_traits<OriginalMatrix>::read_element_idx(row,col,reinterpret_cast<OriginalMatrix const &>(x));
+ }
+ };
+
+ template <int J,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat<qvm_detail::neg_col_<J,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int J,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::neg_col_<J,OriginalMatrix>,qvm_detail::neg_col_<J,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int Col,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::neg_col_<Col,A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ neg_col( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::neg_col_<Col,A> const &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::transposed_<A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ transposed( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::transposed_<A> const &>(a);
+ }
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::transposed_<A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ transposed( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::transposed_<A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Row1,int Row2,class OriginalMatrix>
+ class
+ swap_rows_
+ {
+ swap_rows_( swap_rows_ const & );
+ swap_rows_ & operator=( swap_rows_ const & );
+ ~swap_rows_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ swap_rows_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <int R1,int R2,class OriginalMatrix>
+ struct
+ mat_traits< qvm_detail::swap_rows_<R1,R2,OriginalMatrix> >
+ {
+ typedef qvm_detail::swap_rows_<R1,R2,OriginalMatrix> this_matrix;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const rows=mat_traits<OriginalMatrix>::rows;
+ static int const cols=mat_traits<OriginalMatrix>::cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template read_element<(Row==R1 && R1!=R2)*R2+(Row==R2 && R1!=R2)*R1+((Row!=R1 && Row!=R2) || R1==R2)*Row,Col>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template write_element<(Row==R1 && R1!=R2)*R2+(Row==R2 && R1!=R2)*R1+((Row!=R1 && Row!=R2) || R1==R2)*Row,Col>(reinterpret_cast<OriginalMatrix &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::read_element_idx(row==R1?R2:row==R2?R1:row,col,reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::write_element_idx(row==R1?R2:row==R2?R1:row,col,reinterpret_cast<OriginalMatrix &>(x));
+ }
+ };
+
+ template <int R1,int R2,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat<qvm_detail::swap_rows_<R1,R2,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int R1,int R2,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::swap_rows_<R1,R2,OriginalMatrix>,qvm_detail::swap_rows_<R1,R2,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int R1,int R2,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::swap_rows_<R1,R2,A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ swap_rows( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::swap_rows_<R1,R2,A> const &>(a);
+ }
+
+ template <int R1,int R2,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::swap_rows_<R1,R2,A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ swap_rows( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::swap_rows_<R1,R2,A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Row1,int Row2,class OriginalMatrix>
+ class
+ swap_cols_
+ {
+ swap_cols_( swap_cols_ const & );
+ swap_cols_ & operator=( swap_cols_ const & );
+ ~swap_cols_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ swap_cols_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <int C1,int C2,class OriginalMatrix>
+ struct
+ mat_traits< qvm_detail::swap_cols_<C1,C2,OriginalMatrix> >
+ {
+ typedef qvm_detail::swap_cols_<C1,C2,OriginalMatrix> this_matrix;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const rows=mat_traits<OriginalMatrix>::rows;
+ static int const cols=mat_traits<OriginalMatrix>::cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template read_element<Row,(Col==C1 && C1!=C2)*C2+(Col==C2 && C1!=C2)*C1+((Col!=C1 && Col!=C2) || C1==C2)*Col>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<OriginalMatrix>::template write_element<Row,(Col==C1 && C1!=C2)*C2+(Col==C2 && C1!=C2)*C1+((Col!=C1 && Col!=C2) || C1==C2)*Col>(reinterpret_cast<OriginalMatrix &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::read_element_idx(row,col==C1?C2:col==C2?C1:col,reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<OriginalMatrix>::write_element_idx(row,col==C1?C2:col==C2?C1:col,reinterpret_cast<OriginalMatrix &>(x));
+ }
+ };
+
+ template <int C1,int C2,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat<qvm_detail::swap_cols_<C1,C2,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int C1,int C2,class OriginalMatrix,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::swap_cols_<C1,C2,OriginalMatrix>,qvm_detail::swap_cols_<C1,C2,OriginalMatrix>,R,C>
+ {
+ typedef mat<typename mat_traits<OriginalMatrix>::scalar_type,R,C> type;
+ };
+
+ template <int C1,int C2,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::swap_cols_<C1,C2,A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ swap_cols( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::swap_cols_<C1,C2,A> const &>(a);
+ }
+
+ template <int C1,int C2,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::swap_cols_<C1,C2,A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ swap_cols( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::swap_cols_<C1,C2,A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/map_mat_vec.hpp b/contrib/restricted/boost/boost/qvm/map_mat_vec.hpp
index 0ef6c94daa..81a2527d21 100644
--- a/contrib/restricted/boost/boost/qvm/map_mat_vec.hpp
+++ b/contrib/restricted/boost/boost/qvm/map_mat_vec.hpp
@@ -1,537 +1,537 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_5265FC7CA1C011DE9EBDFFA956D89593
-#define UUID_5265FC7CA1C011DE9EBDFFA956D89593
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/mat_traits.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/enable_if.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Col,class OriginalMatrix>
- class
- col_
- {
- col_( col_ const & );
- col_ & operator=( col_ const & );
- ~col_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- col_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <int Col,class OriginalMatrix>
- struct
- vec_traits< qvm_detail::col_<Col,OriginalMatrix> >
- {
- typedef qvm_detail::col_<Col,OriginalMatrix> this_vector;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const dim=mat_traits<OriginalMatrix>::rows;
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<mat_traits<OriginalMatrix>::cols);
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return mat_traits<OriginalMatrix>::template read_element<I,Col>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_vector & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return mat_traits<OriginalMatrix>::template write_element<I,Col>(reinterpret_cast<OriginalMatrix &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_vector const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return mat_traits<OriginalMatrix>::read_element_idx(i,Col,reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int i, this_vector & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return mat_traits<OriginalMatrix>::write_element_idx(i,Col,reinterpret_cast<OriginalMatrix &>(x));
- }
- };
-
- template <int Col,class OriginalMatrix,int D>
- struct
- deduce_vec<qvm_detail::col_<Col,OriginalMatrix>,D>
- {
- typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
- };
-
- template <int Col,class OriginalMatrix,int D>
- struct
- deduce_vec2<qvm_detail::col_<Col,OriginalMatrix>,qvm_detail::col_<Col,OriginalMatrix>,D>
- {
- typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
- };
-
- template <int Col,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::col_<Col,A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- col( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::col_<Col,A> const &>(a);
- }
-
- template <int Col,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::col_<Col,A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- col( A & a )
- {
- return reinterpret_cast<typename qvm_detail::col_<Col,A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Row,class OriginalMatrix>
- class
- row_
- {
- row_( row_ const & );
- row_ & operator=( row_ const & );
- ~row_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- row_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <int Row,class OriginalMatrix>
- struct
- vec_traits< qvm_detail::row_<Row,OriginalMatrix> >
- {
- typedef qvm_detail::row_<Row,OriginalMatrix> this_vector;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const dim=mat_traits<OriginalMatrix>::cols;
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<mat_traits<OriginalMatrix>::rows);
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return mat_traits<OriginalMatrix>::template read_element<Row,I>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_vector & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return mat_traits<OriginalMatrix>::template write_element<Row,I>(reinterpret_cast<OriginalMatrix &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_vector const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return mat_traits<OriginalMatrix>::read_element_idx(Row,i,reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int i, this_vector & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return mat_traits<OriginalMatrix>::write_element_idx(Row,i,reinterpret_cast<OriginalMatrix &>(x));
- }
- };
-
- template <int Row,class OriginalMatrix,int D>
- struct
- deduce_vec<qvm_detail::row_<Row,OriginalMatrix>,D>
- {
- typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
- };
-
- template <int Row,class OriginalMatrix,int D>
- struct
- deduce_vec2<qvm_detail::row_<Row,OriginalMatrix>,qvm_detail::row_<Row,OriginalMatrix>,D>
- {
- typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
- };
-
- template <int Row,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::row_<Row,A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- row( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::row_<Row,A> const &>(a);
- }
-
- template <int Row,class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::row_<Row,A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- row( A & a )
- {
- return reinterpret_cast<typename qvm_detail::row_<Row,A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class OriginalMatrix>
- class
- diag_
- {
- diag_( diag_ const & );
- diag_ & operator=( diag_ const & );
- ~diag_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- diag_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <int X,int Y,bool Which>
- struct diag_bool_dispatch;
-
- template <int X,int Y>
- struct
- diag_bool_dispatch<X,Y,true>
- {
- static int const value=X;
- };
-
- template <int X,int Y>
- struct
- diag_bool_dispatch<X,Y,false>
- {
- static int const value=Y;
- };
- }
-
- template <class OriginalMatrix>
- struct
- vec_traits< qvm_detail::diag_<OriginalMatrix> >
- {
- typedef qvm_detail::diag_<OriginalMatrix> this_vector;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const dim=qvm_detail::diag_bool_dispatch<
- mat_traits<OriginalMatrix>::rows,
- mat_traits<OriginalMatrix>::cols,
- mat_traits<OriginalMatrix>::rows<=mat_traits<OriginalMatrix>::cols>::value;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return mat_traits<OriginalMatrix>::template read_element<I,I>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_vector & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return mat_traits<OriginalMatrix>::template write_element<I,I>(reinterpret_cast<OriginalMatrix &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_vector const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return mat_traits<OriginalMatrix>::read_element_idx(i,i,reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int i, this_vector & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return mat_traits<OriginalMatrix>::write_element_idx(i,i,reinterpret_cast<OriginalMatrix &>(x));
- }
- };
-
- template <class OriginalMatrix,int D>
- struct
- deduce_vec<qvm_detail::diag_<OriginalMatrix>,D>
- {
- typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
- };
-
- template <class OriginalMatrix,int D>
- struct
- deduce_vec2<qvm_detail::diag_<OriginalMatrix>,qvm_detail::diag_<OriginalMatrix>,D>
- {
- typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
- };
-
- template <class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::diag_<A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- diag( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::diag_<A> const &>(a);
- }
-
- template <class A>
- typename boost::enable_if_c<
- is_mat<A>::value,
- qvm_detail::diag_<A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- diag( A & a )
- {
- return reinterpret_cast<typename qvm_detail::diag_<A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class OriginalMatrix>
- class
- translation_
- {
- translation_( translation_ const & );
- ~translation_();
-
- public:
-
- translation_ &
- operator=( translation_ const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- translation_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class OriginalMatrix>
- struct
- vec_traits< qvm_detail::translation_<OriginalMatrix> >
- {
- typedef qvm_detail::translation_<OriginalMatrix> this_vector;
- typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
- static int const dim=mat_traits<OriginalMatrix>::rows-1;
- BOOST_QVM_STATIC_ASSERT(mat_traits<OriginalMatrix>::rows==mat_traits<OriginalMatrix>::cols);
- BOOST_QVM_STATIC_ASSERT(mat_traits<OriginalMatrix>::rows>=3);
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return mat_traits<OriginalMatrix>::template read_element<I,dim>(reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_vector & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return mat_traits<OriginalMatrix>::template write_element<I,dim>(reinterpret_cast<OriginalMatrix &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_vector const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return mat_traits<OriginalMatrix>::read_element_idx(i,dim,reinterpret_cast<OriginalMatrix const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int i, this_vector & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return mat_traits<OriginalMatrix>::write_element_idx(i,dim,reinterpret_cast<OriginalMatrix &>(x));
- }
- };
-
- template <class OriginalMatrix,int D>
- struct
- deduce_vec<qvm_detail::translation_<OriginalMatrix>,D>
- {
- typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
- };
-
- template <class OriginalMatrix,int D>
- struct
- deduce_vec2<qvm_detail::translation_<OriginalMatrix>,qvm_detail::translation_<OriginalMatrix>,D>
- {
- typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
- };
-
- template <class A>
- typename boost::enable_if_c<
- is_mat<A>::value && mat_traits<A>::rows==mat_traits<A>::cols && mat_traits<A>::rows>=3,
- qvm_detail::translation_<A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- translation( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::translation_<A> const &>(a);
- }
-
- template <class A>
- typename boost::enable_if_c<
- is_mat<A>::value && mat_traits<A>::rows==mat_traits<A>::cols && mat_traits<A>::rows>=3,
- qvm_detail::translation_<A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- translation( A & a )
- {
- return reinterpret_cast<typename qvm_detail::translation_<A> &>(a);
- }
-
- ////////////////////////////////////////////////
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_5265FC7CA1C011DE9EBDFFA956D89593
+#define UUID_5265FC7CA1C011DE9EBDFFA956D89593
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/mat_traits.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/enable_if.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Col,class OriginalMatrix>
+ class
+ col_
+ {
+ col_( col_ const & );
+ col_ & operator=( col_ const & );
+ ~col_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ col_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <int Col,class OriginalMatrix>
+ struct
+ vec_traits< qvm_detail::col_<Col,OriginalMatrix> >
+ {
+ typedef qvm_detail::col_<Col,OriginalMatrix> this_vector;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const dim=mat_traits<OriginalMatrix>::rows;
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<mat_traits<OriginalMatrix>::cols);
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return mat_traits<OriginalMatrix>::template read_element<I,Col>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_vector & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return mat_traits<OriginalMatrix>::template write_element<I,Col>(reinterpret_cast<OriginalMatrix &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_vector const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return mat_traits<OriginalMatrix>::read_element_idx(i,Col,reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int i, this_vector & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return mat_traits<OriginalMatrix>::write_element_idx(i,Col,reinterpret_cast<OriginalMatrix &>(x));
+ }
+ };
+
+ template <int Col,class OriginalMatrix,int D>
+ struct
+ deduce_vec<qvm_detail::col_<Col,OriginalMatrix>,D>
+ {
+ typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
+ };
+
+ template <int Col,class OriginalMatrix,int D>
+ struct
+ deduce_vec2<qvm_detail::col_<Col,OriginalMatrix>,qvm_detail::col_<Col,OriginalMatrix>,D>
+ {
+ typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
+ };
+
+ template <int Col,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::col_<Col,A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ col( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::col_<Col,A> const &>(a);
+ }
+
+ template <int Col,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::col_<Col,A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ col( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::col_<Col,A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Row,class OriginalMatrix>
+ class
+ row_
+ {
+ row_( row_ const & );
+ row_ & operator=( row_ const & );
+ ~row_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ row_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <int Row,class OriginalMatrix>
+ struct
+ vec_traits< qvm_detail::row_<Row,OriginalMatrix> >
+ {
+ typedef qvm_detail::row_<Row,OriginalMatrix> this_vector;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const dim=mat_traits<OriginalMatrix>::cols;
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<mat_traits<OriginalMatrix>::rows);
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return mat_traits<OriginalMatrix>::template read_element<Row,I>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_vector & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return mat_traits<OriginalMatrix>::template write_element<Row,I>(reinterpret_cast<OriginalMatrix &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_vector const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return mat_traits<OriginalMatrix>::read_element_idx(Row,i,reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int i, this_vector & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return mat_traits<OriginalMatrix>::write_element_idx(Row,i,reinterpret_cast<OriginalMatrix &>(x));
+ }
+ };
+
+ template <int Row,class OriginalMatrix,int D>
+ struct
+ deduce_vec<qvm_detail::row_<Row,OriginalMatrix>,D>
+ {
+ typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
+ };
+
+ template <int Row,class OriginalMatrix,int D>
+ struct
+ deduce_vec2<qvm_detail::row_<Row,OriginalMatrix>,qvm_detail::row_<Row,OriginalMatrix>,D>
+ {
+ typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
+ };
+
+ template <int Row,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::row_<Row,A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ row( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::row_<Row,A> const &>(a);
+ }
+
+ template <int Row,class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::row_<Row,A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ row( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::row_<Row,A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class OriginalMatrix>
+ class
+ diag_
+ {
+ diag_( diag_ const & );
+ diag_ & operator=( diag_ const & );
+ ~diag_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ diag_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <int X,int Y,bool Which>
+ struct diag_bool_dispatch;
+
+ template <int X,int Y>
+ struct
+ diag_bool_dispatch<X,Y,true>
+ {
+ static int const value=X;
+ };
+
+ template <int X,int Y>
+ struct
+ diag_bool_dispatch<X,Y,false>
+ {
+ static int const value=Y;
+ };
+ }
+
+ template <class OriginalMatrix>
+ struct
+ vec_traits< qvm_detail::diag_<OriginalMatrix> >
+ {
+ typedef qvm_detail::diag_<OriginalMatrix> this_vector;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const dim=qvm_detail::diag_bool_dispatch<
+ mat_traits<OriginalMatrix>::rows,
+ mat_traits<OriginalMatrix>::cols,
+ mat_traits<OriginalMatrix>::rows<=mat_traits<OriginalMatrix>::cols>::value;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return mat_traits<OriginalMatrix>::template read_element<I,I>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_vector & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return mat_traits<OriginalMatrix>::template write_element<I,I>(reinterpret_cast<OriginalMatrix &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_vector const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return mat_traits<OriginalMatrix>::read_element_idx(i,i,reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int i, this_vector & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return mat_traits<OriginalMatrix>::write_element_idx(i,i,reinterpret_cast<OriginalMatrix &>(x));
+ }
+ };
+
+ template <class OriginalMatrix,int D>
+ struct
+ deduce_vec<qvm_detail::diag_<OriginalMatrix>,D>
+ {
+ typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
+ };
+
+ template <class OriginalMatrix,int D>
+ struct
+ deduce_vec2<qvm_detail::diag_<OriginalMatrix>,qvm_detail::diag_<OriginalMatrix>,D>
+ {
+ typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
+ };
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::diag_<A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ diag( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::diag_<A> const &>(a);
+ }
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value,
+ qvm_detail::diag_<A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ diag( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::diag_<A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class OriginalMatrix>
+ class
+ translation_
+ {
+ translation_( translation_ const & );
+ ~translation_();
+
+ public:
+
+ translation_ &
+ operator=( translation_ const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ translation_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class OriginalMatrix>
+ struct
+ vec_traits< qvm_detail::translation_<OriginalMatrix> >
+ {
+ typedef qvm_detail::translation_<OriginalMatrix> this_vector;
+ typedef typename mat_traits<OriginalMatrix>::scalar_type scalar_type;
+ static int const dim=mat_traits<OriginalMatrix>::rows-1;
+ BOOST_QVM_STATIC_ASSERT(mat_traits<OriginalMatrix>::rows==mat_traits<OriginalMatrix>::cols);
+ BOOST_QVM_STATIC_ASSERT(mat_traits<OriginalMatrix>::rows>=3);
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return mat_traits<OriginalMatrix>::template read_element<I,dim>(reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_vector & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return mat_traits<OriginalMatrix>::template write_element<I,dim>(reinterpret_cast<OriginalMatrix &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_vector const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return mat_traits<OriginalMatrix>::read_element_idx(i,dim,reinterpret_cast<OriginalMatrix const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int i, this_vector & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return mat_traits<OriginalMatrix>::write_element_idx(i,dim,reinterpret_cast<OriginalMatrix &>(x));
+ }
+ };
+
+ template <class OriginalMatrix,int D>
+ struct
+ deduce_vec<qvm_detail::translation_<OriginalMatrix>,D>
+ {
+ typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
+ };
+
+ template <class OriginalMatrix,int D>
+ struct
+ deduce_vec2<qvm_detail::translation_<OriginalMatrix>,qvm_detail::translation_<OriginalMatrix>,D>
+ {
+ typedef vec<typename mat_traits<OriginalMatrix>::scalar_type,D> type;
+ };
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value && mat_traits<A>::rows==mat_traits<A>::cols && mat_traits<A>::rows>=3,
+ qvm_detail::translation_<A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ translation( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::translation_<A> const &>(a);
+ }
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_mat<A>::value && mat_traits<A>::rows==mat_traits<A>::cols && mat_traits<A>::rows>=3,
+ qvm_detail::translation_<A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ translation( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::translation_<A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/map_vec_mat.hpp b/contrib/restricted/boost/boost/qvm/map_vec_mat.hpp
index ca3f976ff9..b7412f2963 100644
--- a/contrib/restricted/boost/boost/qvm/map_vec_mat.hpp
+++ b/contrib/restricted/boost/boost/qvm/map_vec_mat.hpp
@@ -1,591 +1,591 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_3EDF999CA1C011DEBA5C8DA956D89593
-#define UUID_3EDF999CA1C011DEBA5C8DA956D89593
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/deduce_mat.hpp>
-#include <boost/qvm/vec_traits.hpp>
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/enable_if.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class OriginalVector>
- class
- col_mat_
- {
- col_mat_( col_mat_ const & );
- col_mat_ & operator=( col_mat_ const & );
- ~col_mat_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- col_mat_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class OriginalVector>
- struct
- mat_traits< qvm_detail::col_mat_<OriginalVector> >
- {
- typedef qvm_detail::col_mat_<OriginalVector> this_matrix;
- typedef typename vec_traits<OriginalVector>::scalar_type scalar_type;
- static int const rows=vec_traits<OriginalVector>::dim;
- static int const cols=1;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Col==0);
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- return vec_traits<OriginalVector>::template read_element<Row>(reinterpret_cast<OriginalVector const &>(x));
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Col==0);
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- return vec_traits<OriginalVector>::template write_element<Row>(reinterpret_cast<OriginalVector &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(col==0);
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- return vec_traits<OriginalVector>::read_element_idx(row,reinterpret_cast<OriginalVector const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(col==0);
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- return vec_traits<OriginalVector>::write_element_idx(row,reinterpret_cast<OriginalVector &>(x));
- }
- };
-
- template <class OriginalVector,int R,int C>
- struct
- deduce_mat<qvm_detail::col_mat_<OriginalVector>,R,C>
- {
- typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
- };
-
- template <class OriginalVector,int R,int C>
- struct
- deduce_mat2<qvm_detail::col_mat_<OriginalVector>,qvm_detail::col_mat_<OriginalVector>,R,C>
- {
- typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
- };
-
- template <class A>
- typename boost::enable_if_c<
- is_vec<A>::value,
- qvm_detail::col_mat_<A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- col_mat( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::col_mat_<A> const &>(a);
- }
-
- template <class A>
- typename boost::enable_if_c<
- is_vec<A>::value,
- qvm_detail::col_mat_<A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- col_mat( A & a )
- {
- return reinterpret_cast<typename qvm_detail::col_mat_<A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class OriginalVector>
- class
- row_mat_
- {
- row_mat_( row_mat_ const & );
- row_mat_ & operator=( row_mat_ const & );
- ~row_mat_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- row_mat_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class OriginalVector>
- struct
- mat_traits< qvm_detail::row_mat_<OriginalVector> >
- {
- typedef qvm_detail::row_mat_<OriginalVector> this_matrix;
- typedef typename vec_traits<OriginalVector>::scalar_type scalar_type;
- static int const rows=1;
- static int const cols=vec_traits<OriginalVector>::dim;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row==0);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return vec_traits<OriginalVector>::template read_element<Col>(reinterpret_cast<OriginalVector const &>(x));
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row==0);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return vec_traits<OriginalVector>::template write_element<Col>(reinterpret_cast<OriginalVector &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row==0);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return vec_traits<OriginalVector>::read_element_idx(col,reinterpret_cast<OriginalVector const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row==0);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return vec_traits<OriginalVector>::write_element_idx(col,reinterpret_cast<OriginalVector &>(x));
- }
- };
-
- template <class OriginalVector,int R,int C>
- struct
- deduce_mat<qvm_detail::row_mat_<OriginalVector>,R,C>
- {
- typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
- };
-
- template <class OriginalVector,int R,int C>
- struct
- deduce_mat2<qvm_detail::row_mat_<OriginalVector>,qvm_detail::row_mat_<OriginalVector>,R,C>
- {
- typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
- };
-
- template <class A>
- typename boost::enable_if_c<
- is_vec<A>::value,
- qvm_detail::row_mat_<A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- row_mat( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::row_mat_<A> const &>(a);
- }
-
- template <class A>
- typename boost::enable_if_c<
- is_vec<A>::value,
- qvm_detail::row_mat_<A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- row_mat( A & a )
- {
- return reinterpret_cast<typename qvm_detail::row_mat_<A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class OriginalVector>
- class
- translation_mat_
- {
- translation_mat_( translation_mat_ const & );
- translation_mat_ & operator=( translation_mat_ const & );
- ~translation_mat_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- translation_mat_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <class M,int Row,int Col,bool TransCol=(Col==mat_traits<M>::cols-1)>
- struct read_translation_matat;
-
- template <class OriginalVector,int Row,int Col,bool TransCol>
- struct
- read_translation_matat<translation_mat_<OriginalVector>,Row,Col,TransCol>
- {
- static
- BOOST_QVM_INLINE_CRITICAL
- typename mat_traits< translation_mat_<OriginalVector> >::scalar_type
- f( translation_mat_<OriginalVector> const & )
- {
- return scalar_traits<typename mat_traits< translation_mat_<OriginalVector> >::scalar_type>::value(0);
- }
- };
-
- template <class OriginalVector,int D>
- struct
- read_translation_matat<translation_mat_<OriginalVector>,D,D,false>
- {
- static
- BOOST_QVM_INLINE_CRITICAL
- typename mat_traits< translation_mat_<OriginalVector> >::scalar_type
- f( translation_mat_<OriginalVector> const & )
- {
- return scalar_traits<typename mat_traits< translation_mat_<OriginalVector> >::scalar_type>::value(1);
- }
- };
-
- template <class OriginalVector,int D>
- struct
- read_translation_matat<translation_mat_<OriginalVector>,D,D,true>
- {
- static
- BOOST_QVM_INLINE_CRITICAL
- typename mat_traits< translation_mat_<OriginalVector> >::scalar_type
- f( translation_mat_<OriginalVector> const & )
- {
- return scalar_traits<typename mat_traits< translation_mat_<OriginalVector> >::scalar_type>::value(1);
- }
- };
-
- template <class OriginalVector,int Row,int Col>
- struct
- read_translation_matat<translation_mat_<OriginalVector>,Row,Col,true>
- {
- static
- BOOST_QVM_INLINE_CRITICAL
- typename mat_traits< translation_mat_<OriginalVector> >::scalar_type
- f( translation_mat_<OriginalVector> const & x )
- {
- return vec_traits<OriginalVector>::template read_element<Row>(reinterpret_cast<OriginalVector const &>(x));
- }
- };
- }
-
- template <class OriginalVector>
- struct
- mat_traits< qvm_detail::translation_mat_<OriginalVector> >
- {
- typedef qvm_detail::translation_mat_<OriginalVector> this_matrix;
- typedef typename vec_traits<OriginalVector>::scalar_type scalar_type;
- static int const rows=vec_traits<OriginalVector>::dim+1;
- static int const cols=vec_traits<OriginalVector>::dim+1;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return qvm_detail::read_translation_matat<qvm_detail::translation_mat_<OriginalVector>,Row,Col>::f(x);
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col==cols-1);
- BOOST_QVM_STATIC_ASSERT(Col!=Row);
- return vec_traits<OriginalVector>::template write_element<Row>(reinterpret_cast<OriginalVector &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return
- row==col?
- scalar_traits<scalar_type>::value(1):
- (col==cols-1?
- vec_traits<OriginalVector>::read_element_idx(row,reinterpret_cast<OriginalVector const &>(x)):
- scalar_traits<scalar_type>::value(0));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col==cols-1);
- BOOST_QVM_ASSERT(col!=row);
- return vec_traits<OriginalVector>::write_element_idx(row,reinterpret_cast<OriginalVector &>(x));
- }
- };
-
- template <class OriginalVector,int R,int C>
- struct
- deduce_mat<qvm_detail::translation_mat_<OriginalVector>,R,C>
- {
- typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
- };
-
- template <class OriginalVector,int R,int C>
- struct
- deduce_mat2<qvm_detail::translation_mat_<OriginalVector>,qvm_detail::translation_mat_<OriginalVector>,R,C>
- {
- typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
- };
-
- template <class A>
- typename boost::enable_if_c<
- is_vec<A>::value,
- qvm_detail::translation_mat_<A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- translation_mat( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::translation_mat_<A> const &>(a);
- }
-
- template <class A>
- typename boost::enable_if_c<
- is_vec<A>::value,
- qvm_detail::translation_mat_<A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- translation_mat( A & a )
- {
- return reinterpret_cast<typename qvm_detail::translation_mat_<A> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class OriginalVector>
- class
- diag_mat_
- {
- diag_mat_( diag_mat_ const & );
- diag_mat_ & operator=( diag_mat_ const & );
- ~diag_mat_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- diag_mat_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class OriginalVector>
- struct
- mat_traits< qvm_detail::diag_mat_<OriginalVector> >
- {
- typedef qvm_detail::diag_mat_<OriginalVector> this_matrix;
- typedef typename vec_traits<OriginalVector>::scalar_type scalar_type;
- static int const rows=vec_traits<OriginalVector>::dim;
- static int const cols=vec_traits<OriginalVector>::dim;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return Row==Col?vec_traits<OriginalVector>::template read_element<Row>(reinterpret_cast<OriginalVector const &>(x)):scalar_traits<scalar_type>::value(0);
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Row==Col);
- return vec_traits<OriginalVector>::template write_element<Row>(reinterpret_cast<OriginalVector &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return row==col?vec_traits<OriginalVector>::read_element_idx(row,reinterpret_cast<OriginalVector const &>(x)):scalar_traits<scalar_type>::value(0);
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(row==col);
- return vec_traits<OriginalVector>::write_element_idx(row,reinterpret_cast<OriginalVector &>(x));
- }
- };
-
- template <class OriginalVector,int R,int C>
- struct
- deduce_mat<qvm_detail::diag_mat_<OriginalVector>,R,C>
- {
- typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
- };
-
- template <class OriginalVector,int R,int C>
- struct
- deduce_mat2<qvm_detail::diag_mat_<OriginalVector>,qvm_detail::diag_mat_<OriginalVector>,R,C>
- {
- typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
- };
-
- template <class A>
- typename boost::enable_if_c<
- is_vec<A>::value,
- qvm_detail::diag_mat_<A> const &>::type
- BOOST_QVM_INLINE_TRIVIAL
- diag_mat( A const & a )
- {
- return reinterpret_cast<typename qvm_detail::diag_mat_<A> const &>(a);
- }
-
- template <class A>
- typename boost::enable_if_c<
- is_vec<A>::value,
- qvm_detail::diag_mat_<A> &>::type
- BOOST_QVM_INLINE_TRIVIAL
- diag_mat( A & a )
- {
- return reinterpret_cast<typename qvm_detail::diag_mat_<A> &>(a);
- }
-
- ////////////////////////////////////////////////
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_3EDF999CA1C011DEBA5C8DA956D89593
+#define UUID_3EDF999CA1C011DEBA5C8DA956D89593
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/deduce_mat.hpp>
+#include <boost/qvm/vec_traits.hpp>
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/enable_if.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class OriginalVector>
+ class
+ col_mat_
+ {
+ col_mat_( col_mat_ const & );
+ col_mat_ & operator=( col_mat_ const & );
+ ~col_mat_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ col_mat_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class OriginalVector>
+ struct
+ mat_traits< qvm_detail::col_mat_<OriginalVector> >
+ {
+ typedef qvm_detail::col_mat_<OriginalVector> this_matrix;
+ typedef typename vec_traits<OriginalVector>::scalar_type scalar_type;
+ static int const rows=vec_traits<OriginalVector>::dim;
+ static int const cols=1;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Col==0);
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ return vec_traits<OriginalVector>::template read_element<Row>(reinterpret_cast<OriginalVector const &>(x));
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Col==0);
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ return vec_traits<OriginalVector>::template write_element<Row>(reinterpret_cast<OriginalVector &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(col==0);
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ return vec_traits<OriginalVector>::read_element_idx(row,reinterpret_cast<OriginalVector const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(col==0);
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ return vec_traits<OriginalVector>::write_element_idx(row,reinterpret_cast<OriginalVector &>(x));
+ }
+ };
+
+ template <class OriginalVector,int R,int C>
+ struct
+ deduce_mat<qvm_detail::col_mat_<OriginalVector>,R,C>
+ {
+ typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
+ };
+
+ template <class OriginalVector,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::col_mat_<OriginalVector>,qvm_detail::col_mat_<OriginalVector>,R,C>
+ {
+ typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
+ };
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_vec<A>::value,
+ qvm_detail::col_mat_<A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ col_mat( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::col_mat_<A> const &>(a);
+ }
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_vec<A>::value,
+ qvm_detail::col_mat_<A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ col_mat( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::col_mat_<A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class OriginalVector>
+ class
+ row_mat_
+ {
+ row_mat_( row_mat_ const & );
+ row_mat_ & operator=( row_mat_ const & );
+ ~row_mat_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ row_mat_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class OriginalVector>
+ struct
+ mat_traits< qvm_detail::row_mat_<OriginalVector> >
+ {
+ typedef qvm_detail::row_mat_<OriginalVector> this_matrix;
+ typedef typename vec_traits<OriginalVector>::scalar_type scalar_type;
+ static int const rows=1;
+ static int const cols=vec_traits<OriginalVector>::dim;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row==0);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return vec_traits<OriginalVector>::template read_element<Col>(reinterpret_cast<OriginalVector const &>(x));
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row==0);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return vec_traits<OriginalVector>::template write_element<Col>(reinterpret_cast<OriginalVector &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row==0);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return vec_traits<OriginalVector>::read_element_idx(col,reinterpret_cast<OriginalVector const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row==0);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return vec_traits<OriginalVector>::write_element_idx(col,reinterpret_cast<OriginalVector &>(x));
+ }
+ };
+
+ template <class OriginalVector,int R,int C>
+ struct
+ deduce_mat<qvm_detail::row_mat_<OriginalVector>,R,C>
+ {
+ typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
+ };
+
+ template <class OriginalVector,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::row_mat_<OriginalVector>,qvm_detail::row_mat_<OriginalVector>,R,C>
+ {
+ typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
+ };
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_vec<A>::value,
+ qvm_detail::row_mat_<A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ row_mat( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::row_mat_<A> const &>(a);
+ }
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_vec<A>::value,
+ qvm_detail::row_mat_<A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ row_mat( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::row_mat_<A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class OriginalVector>
+ class
+ translation_mat_
+ {
+ translation_mat_( translation_mat_ const & );
+ translation_mat_ & operator=( translation_mat_ const & );
+ ~translation_mat_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ translation_mat_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <class M,int Row,int Col,bool TransCol=(Col==mat_traits<M>::cols-1)>
+ struct read_translation_matat;
+
+ template <class OriginalVector,int Row,int Col,bool TransCol>
+ struct
+ read_translation_matat<translation_mat_<OriginalVector>,Row,Col,TransCol>
+ {
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ typename mat_traits< translation_mat_<OriginalVector> >::scalar_type
+ f( translation_mat_<OriginalVector> const & )
+ {
+ return scalar_traits<typename mat_traits< translation_mat_<OriginalVector> >::scalar_type>::value(0);
+ }
+ };
+
+ template <class OriginalVector,int D>
+ struct
+ read_translation_matat<translation_mat_<OriginalVector>,D,D,false>
+ {
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ typename mat_traits< translation_mat_<OriginalVector> >::scalar_type
+ f( translation_mat_<OriginalVector> const & )
+ {
+ return scalar_traits<typename mat_traits< translation_mat_<OriginalVector> >::scalar_type>::value(1);
+ }
+ };
+
+ template <class OriginalVector,int D>
+ struct
+ read_translation_matat<translation_mat_<OriginalVector>,D,D,true>
+ {
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ typename mat_traits< translation_mat_<OriginalVector> >::scalar_type
+ f( translation_mat_<OriginalVector> const & )
+ {
+ return scalar_traits<typename mat_traits< translation_mat_<OriginalVector> >::scalar_type>::value(1);
+ }
+ };
+
+ template <class OriginalVector,int Row,int Col>
+ struct
+ read_translation_matat<translation_mat_<OriginalVector>,Row,Col,true>
+ {
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ typename mat_traits< translation_mat_<OriginalVector> >::scalar_type
+ f( translation_mat_<OriginalVector> const & x )
+ {
+ return vec_traits<OriginalVector>::template read_element<Row>(reinterpret_cast<OriginalVector const &>(x));
+ }
+ };
+ }
+
+ template <class OriginalVector>
+ struct
+ mat_traits< qvm_detail::translation_mat_<OriginalVector> >
+ {
+ typedef qvm_detail::translation_mat_<OriginalVector> this_matrix;
+ typedef typename vec_traits<OriginalVector>::scalar_type scalar_type;
+ static int const rows=vec_traits<OriginalVector>::dim+1;
+ static int const cols=vec_traits<OriginalVector>::dim+1;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return qvm_detail::read_translation_matat<qvm_detail::translation_mat_<OriginalVector>,Row,Col>::f(x);
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col==cols-1);
+ BOOST_QVM_STATIC_ASSERT(Col!=Row);
+ return vec_traits<OriginalVector>::template write_element<Row>(reinterpret_cast<OriginalVector &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return
+ row==col?
+ scalar_traits<scalar_type>::value(1):
+ (col==cols-1?
+ vec_traits<OriginalVector>::read_element_idx(row,reinterpret_cast<OriginalVector const &>(x)):
+ scalar_traits<scalar_type>::value(0));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col==cols-1);
+ BOOST_QVM_ASSERT(col!=row);
+ return vec_traits<OriginalVector>::write_element_idx(row,reinterpret_cast<OriginalVector &>(x));
+ }
+ };
+
+ template <class OriginalVector,int R,int C>
+ struct
+ deduce_mat<qvm_detail::translation_mat_<OriginalVector>,R,C>
+ {
+ typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
+ };
+
+ template <class OriginalVector,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::translation_mat_<OriginalVector>,qvm_detail::translation_mat_<OriginalVector>,R,C>
+ {
+ typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
+ };
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_vec<A>::value,
+ qvm_detail::translation_mat_<A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ translation_mat( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::translation_mat_<A> const &>(a);
+ }
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_vec<A>::value,
+ qvm_detail::translation_mat_<A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ translation_mat( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::translation_mat_<A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class OriginalVector>
+ class
+ diag_mat_
+ {
+ diag_mat_( diag_mat_ const & );
+ diag_mat_ & operator=( diag_mat_ const & );
+ ~diag_mat_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ diag_mat_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class OriginalVector>
+ struct
+ mat_traits< qvm_detail::diag_mat_<OriginalVector> >
+ {
+ typedef qvm_detail::diag_mat_<OriginalVector> this_matrix;
+ typedef typename vec_traits<OriginalVector>::scalar_type scalar_type;
+ static int const rows=vec_traits<OriginalVector>::dim;
+ static int const cols=vec_traits<OriginalVector>::dim;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return Row==Col?vec_traits<OriginalVector>::template read_element<Row>(reinterpret_cast<OriginalVector const &>(x)):scalar_traits<scalar_type>::value(0);
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Row==Col);
+ return vec_traits<OriginalVector>::template write_element<Row>(reinterpret_cast<OriginalVector &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return row==col?vec_traits<OriginalVector>::read_element_idx(row,reinterpret_cast<OriginalVector const &>(x)):scalar_traits<scalar_type>::value(0);
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(row==col);
+ return vec_traits<OriginalVector>::write_element_idx(row,reinterpret_cast<OriginalVector &>(x));
+ }
+ };
+
+ template <class OriginalVector,int R,int C>
+ struct
+ deduce_mat<qvm_detail::diag_mat_<OriginalVector>,R,C>
+ {
+ typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
+ };
+
+ template <class OriginalVector,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::diag_mat_<OriginalVector>,qvm_detail::diag_mat_<OriginalVector>,R,C>
+ {
+ typedef mat<typename vec_traits<OriginalVector>::scalar_type,R,C> type;
+ };
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_vec<A>::value,
+ qvm_detail::diag_mat_<A> const &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ diag_mat( A const & a )
+ {
+ return reinterpret_cast<typename qvm_detail::diag_mat_<A> const &>(a);
+ }
+
+ template <class A>
+ typename boost::enable_if_c<
+ is_vec<A>::value,
+ qvm_detail::diag_mat_<A> &>::type
+ BOOST_QVM_INLINE_TRIVIAL
+ diag_mat( A & a )
+ {
+ return reinterpret_cast<typename qvm_detail::diag_mat_<A> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/mat.hpp b/contrib/restricted/boost/boost/qvm/mat.hpp
index aceaa5a9fd..a3d44a9699 100644
--- a/contrib/restricted/boost/boost/qvm/mat.hpp
+++ b/contrib/restricted/boost/boost/qvm/mat.hpp
@@ -1,98 +1,98 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_67E67D68A32F11DEA56FD18556D89593
-#define UUID_67E67D68A32F11DEA56FD18556D89593
-
-#include <boost/qvm/detail/mat_assign.hpp>
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/static_assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class T,int Rows,int Cols>
- struct
- mat
- {
- T a[Rows][Cols];
- template <class R>
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <class M>
- struct mat_traits;
-
- template <class T,int Rows,int Cols>
- struct
- mat_traits< mat<T,Rows,Cols> >
- {
- typedef mat<T,Rows,Cols> this_matrix;
- typedef T scalar_type;
- static int const rows=Rows;
- static int const cols=Cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<Rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<Cols);
- return x.a[Row][Col];
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<Rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<Cols);
- return x.a[Row][Col];
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<Rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<Cols);
- return x.a[row][col];
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<Rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<Cols);
- return x.a[row][col];
- }
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_67E67D68A32F11DEA56FD18556D89593
+#define UUID_67E67D68A32F11DEA56FD18556D89593
+
+#include <boost/qvm/detail/mat_assign.hpp>
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/static_assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class T,int Rows,int Cols>
+ struct
+ mat
+ {
+ T a[Rows][Cols];
+ template <class R>
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <class M>
+ struct mat_traits;
+
+ template <class T,int Rows,int Cols>
+ struct
+ mat_traits< mat<T,Rows,Cols> >
+ {
+ typedef mat<T,Rows,Cols> this_matrix;
+ typedef T scalar_type;
+ static int const rows=Rows;
+ static int const cols=Cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<Rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<Cols);
+ return x.a[Row][Col];
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<Rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<Cols);
+ return x.a[Row][Col];
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<Rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<Cols);
+ return x.a[row][col];
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<Rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<Cols);
+ return x.a[row][col];
+ }
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/mat_access.hpp b/contrib/restricted/boost/boost/qvm/mat_access.hpp
index 3d7487ae72..a50ff66db2 100644
--- a/contrib/restricted/boost/boost/qvm/mat_access.hpp
+++ b/contrib/restricted/boost/boost/qvm/mat_access.hpp
@@ -1,258 +1,258 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_47B1D1217B411E08424FA0ADFD72085
-#define UUID_47B1D1217B411E08424FA0ADFD72085
-
-#include <boost/qvm/mat_traits.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/static_assert.hpp>
-#include <boost/qvm/enable_if.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- ////////////////////////////////////////////////
-
- template <int R,int C,class M>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_mat<M>::value,
- typename mat_traits<M>::scalar_type>::type
- A( M const & a )
- {
- BOOST_STATIC_ASSERT(R>=0);
- BOOST_STATIC_ASSERT(R<mat_traits<M>::rows);
- BOOST_STATIC_ASSERT(C>=0);
- BOOST_STATIC_ASSERT(C<mat_traits<M>::cols);
- return mat_traits<M>::template read_element<R,C>(a);
- }
-
- template <int R,int C,class M>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_mat<M>::value,
- typename mat_traits<M>::scalar_type &>::type
- A( M & a )
- {
- BOOST_STATIC_ASSERT(R>=0);
- BOOST_STATIC_ASSERT(R<mat_traits<M>::rows);
- BOOST_STATIC_ASSERT(C>=0);
- BOOST_STATIC_ASSERT(C<mat_traits<M>::cols);
- return mat_traits<M>::template write_element<R,C>(a);
- }
-
- ////////////////////////////////////////////////
-
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A00( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A01( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A02( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A03( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A04( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A05( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A06( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A07( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A08( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A09( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A10( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A11( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A12( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A13( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A14( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A15( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A16( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A17( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A18( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A19( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A20( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A21( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A22( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A23( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A24( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A25( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A26( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A27( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A28( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A29( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A30( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A31( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A32( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A33( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A34( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A35( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A36( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A37( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A38( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A39( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A40( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A41( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A42( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A43( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A44( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A45( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A46( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A47( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A48( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A49( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A50( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A51( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A52( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A53( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A54( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A55( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A56( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A57( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A58( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A59( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A60( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A61( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A62( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A63( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A64( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A65( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A66( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A67( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A68( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A69( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A70( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A71( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A72( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A73( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A74( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A75( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A76( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A77( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A78( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A79( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A80( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A81( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A82( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A83( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A84( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A85( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A86( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A87( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A88( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A89( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A90( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A91( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A92( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A93( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A94( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A95( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A96( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A97( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A98( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A99( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,9>(a); }
-
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A00( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A01( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A02( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A03( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A04( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A05( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A06( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A07( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A08( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A09( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A10( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A11( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A12( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A13( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A14( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A15( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A16( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A17( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A18( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A19( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A20( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A21( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A22( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A23( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A24( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A25( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A26( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A27( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A28( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A29( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A30( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A31( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A32( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A33( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A34( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A35( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A36( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A37( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A38( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A39( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A40( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A41( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A42( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A43( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A44( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A45( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A46( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A47( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A48( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A49( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A50( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A51( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A52( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A53( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A54( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A55( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A56( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A57( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A58( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A59( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A60( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A61( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A62( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A63( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A64( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A65( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A66( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A67( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A68( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A69( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A70( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A71( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A72( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A73( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A74( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A75( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A76( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A77( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A78( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A79( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A80( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A81( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A82( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A83( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A84( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A85( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A86( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A87( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A88( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A89( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,9>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A90( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,0>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A91( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,1>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A92( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,2>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A93( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,3>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A94( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,4>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A95( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,5>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A96( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,6>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A97( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,7>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A98( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,8>(a); }
- template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A99( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,9>(a); }
-
- ////////////////////////////////////////////////
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_47B1D1217B411E08424FA0ADFD72085
+#define UUID_47B1D1217B411E08424FA0ADFD72085
+
+#include <boost/qvm/mat_traits.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/static_assert.hpp>
+#include <boost/qvm/enable_if.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ ////////////////////////////////////////////////
+
+ template <int R,int C,class M>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_mat<M>::value,
+ typename mat_traits<M>::scalar_type>::type
+ A( M const & a )
+ {
+ BOOST_STATIC_ASSERT(R>=0);
+ BOOST_STATIC_ASSERT(R<mat_traits<M>::rows);
+ BOOST_STATIC_ASSERT(C>=0);
+ BOOST_STATIC_ASSERT(C<mat_traits<M>::cols);
+ return mat_traits<M>::template read_element<R,C>(a);
+ }
+
+ template <int R,int C,class M>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_mat<M>::value,
+ typename mat_traits<M>::scalar_type &>::type
+ A( M & a )
+ {
+ BOOST_STATIC_ASSERT(R>=0);
+ BOOST_STATIC_ASSERT(R<mat_traits<M>::rows);
+ BOOST_STATIC_ASSERT(C>=0);
+ BOOST_STATIC_ASSERT(C<mat_traits<M>::cols);
+ return mat_traits<M>::template write_element<R,C>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A00( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A01( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A02( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A03( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A04( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A05( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A06( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A07( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A08( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A09( M const & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<0,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A10( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A11( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A12( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A13( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A14( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A15( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A16( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A17( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A18( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A19( M const & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<1,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A20( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A21( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A22( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A23( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A24( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A25( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A26( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A27( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A28( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A29( M const & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<2,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A30( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A31( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A32( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A33( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A34( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A35( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A36( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A37( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A38( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A39( M const & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<3,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A40( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A41( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A42( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A43( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A44( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A45( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A46( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A47( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A48( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A49( M const & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<4,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A50( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A51( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A52( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A53( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A54( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A55( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A56( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A57( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A58( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A59( M const & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<5,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A60( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A61( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A62( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A63( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A64( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A65( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A66( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A67( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A68( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A69( M const & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<6,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A70( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A71( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A72( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A73( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A74( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A75( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A76( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A77( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A78( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A79( M const & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<7,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A80( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A81( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A82( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A83( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A84( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A85( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A86( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A87( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A88( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A89( M const & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<8,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A90( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A91( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A92( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A93( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A94( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A95( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A96( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A97( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A98( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type>::type A99( M const & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template read_element<9,9>(a); }
+
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A00( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A01( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A02( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A03( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A04( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A05( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A06( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A07( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A08( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A09( M & a ) { BOOST_STATIC_ASSERT(0<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<0,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A10( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A11( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A12( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A13( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A14( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A15( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A16( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A17( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A18( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A19( M & a ) { BOOST_STATIC_ASSERT(1<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<1,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A20( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A21( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A22( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A23( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A24( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A25( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A26( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A27( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A28( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A29( M & a ) { BOOST_STATIC_ASSERT(2<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<2,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A30( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A31( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A32( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A33( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A34( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A35( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A36( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A37( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A38( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A39( M & a ) { BOOST_STATIC_ASSERT(3<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<3,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A40( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A41( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A42( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A43( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A44( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A45( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A46( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A47( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A48( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A49( M & a ) { BOOST_STATIC_ASSERT(4<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<4,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A50( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A51( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A52( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A53( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A54( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A55( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A56( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A57( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A58( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A59( M & a ) { BOOST_STATIC_ASSERT(5<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<5,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A60( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A61( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A62( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A63( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A64( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A65( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A66( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A67( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A68( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A69( M & a ) { BOOST_STATIC_ASSERT(6<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<6,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A70( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A71( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A72( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A73( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A74( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A75( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A76( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A77( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A78( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A79( M & a ) { BOOST_STATIC_ASSERT(7<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<7,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A80( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A81( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A82( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A83( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A84( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A85( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A86( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A87( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A88( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A89( M & a ) { BOOST_STATIC_ASSERT(8<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<8,9>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A90( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 0<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,0>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A91( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 1<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,1>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A92( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 2<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,2>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A93( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 3<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,3>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A94( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 4<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,4>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A95( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 5<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,5>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A96( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 6<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,6>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A97( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 7<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,7>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A98( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 8<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,8>(a); }
+ template <class M> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_mat<M>::value,typename mat_traits<M>::scalar_type &>::type A99( M & a ) { BOOST_STATIC_ASSERT(9<mat_traits<M>::rows && 9<mat_traits<M>::cols); return mat_traits<M>::template write_element<9,9>(a); }
+
+ ////////////////////////////////////////////////
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/mat_operations.hpp b/contrib/restricted/boost/boost/qvm/mat_operations.hpp
index 39117dddef..cf98cc75b3 100644
--- a/contrib/restricted/boost/boost/qvm/mat_operations.hpp
+++ b/contrib/restricted/boost/boost/qvm/mat_operations.hpp
@@ -1,2474 +1,2474 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifdef __GNUC__
-#pragma GCC system_header
-#endif
-
-#ifndef UUID_4F915D9ED30A11DF962186E3DFD72085
-#define UUID_4F915D9ED30A11DF962186E3DFD72085
-
-#include <boost/qvm/detail/mat_assign.hpp>
-#include <boost/qvm/mat_operations2.hpp>
-#include <boost/qvm/mat_operations3.hpp>
-#include <boost/qvm/mat_operations4.hpp>
-#include <boost/qvm/math.hpp>
-#include <boost/qvm/detail/determinant_impl.hpp>
-#include <boost/qvm/detail/cofactor_impl.hpp>
-#include <boost/qvm/detail/transp_impl.hpp>
-#include <boost/qvm/scalar_traits.hpp>
-#include <string>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_detail
- {
- BOOST_QVM_INLINE_CRITICAL
- void const *
- get_valid_ptr_mat_operations()
- {
- static int const obj=0;
- return &obj;
- }
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_to_string_detail
- {
- template <class T>
- std::string to_string( T const & x );
- }
-
- namespace
- qvm_detail
- {
- template <int R,int C>
- struct
- to_string_m_defined
- {
- static bool const value=false;
- };
-
- template <int I,int SizeMinusOne>
- struct
- to_string_matrix_elements
- {
- template <class A>
- static
- std::string
- f( A const & a )
- {
- using namespace qvm_to_string_detail;
- return
- ( (I%mat_traits<A>::cols)==0 ? '(' : ',' ) +
- to_string(mat_traits<A>::template read_element<I/mat_traits<A>::cols,I%mat_traits<A>::cols>(a)) +
- ( (I%mat_traits<A>::cols)==mat_traits<A>::cols-1 ? ")" : "" ) +
- to_string_matrix_elements<I+1,SizeMinusOne>::f(a);
- }
- };
-
- template <int SizeMinusOne>
- struct
- to_string_matrix_elements<SizeMinusOne,SizeMinusOne>
- {
- template <class A>
- static
- std::string
- f( A const & a )
- {
- using namespace qvm_to_string_detail;
- return
- ( (SizeMinusOne%mat_traits<A>::cols)==0 ? '(' : ',' ) +
- to_string(mat_traits<A>::template read_element<SizeMinusOne/mat_traits<A>::cols,SizeMinusOne%mat_traits<A>::cols>(a)) +
- ')';
- }
- };
- }
-
- template <class A>
- inline
- typename boost::enable_if_c<
- is_mat<A>::value &&
- !qvm_detail::to_string_m_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- std::string>::type
- to_string( A const & a )
- {
- return "("+qvm_detail::to_string_matrix_elements<0,mat_traits<A>::rows*mat_traits<A>::cols-1>::f(a)+')';
- }
-
- ////////////////////////////////////////////////
-
- template <class A,class B,class Cmp>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value && is_mat<B>::value &&
- mat_traits<A>::rows==mat_traits<B>::rows &&
- mat_traits<A>::cols==mat_traits<B>::cols,
- bool>::type
- cmp( A const & a, B const & b, Cmp f )
- {
- typedef typename deduce_scalar<
- typename mat_traits<A>::scalar_type,
- typename mat_traits<B>::scalar_type>::type T;
- int const rows=mat_traits<A>::rows;
- int const cols=mat_traits<A>::cols;
- T m1[rows][cols]; assign(m1,a);
- T m2[rows][cols]; assign(m2,b);
- for( int i=0; i!=rows; ++i )
- for( int j=0; j!=cols; ++j )
- if( !f(m1[i][j],m2[i][j]) )
- return false;
- return true;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- convert_to_m_defined
- {
- static bool const value=false;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_mat<R>::value && is_mat<A>::value &&
- mat_traits<R>::rows==mat_traits<A>::rows &&
- mat_traits<R>::cols==mat_traits<A>::cols &&
- !qvm_detail::convert_to_m_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- R>::type
- convert_to( A const & a )
- {
- R r; assign(r,a);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- determinant_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- !qvm_detail::determinant_defined<mat_traits<A>::rows>::value,
- typename mat_traits<A>::scalar_type>::type
- determinant( A const & a )
- {
- return qvm_detail::determinant_impl(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T,int Dim>
- class
- identity_mat_
- {
- identity_mat_( identity_mat_ const & );
- identity_mat_ & operator=( identity_mat_ const & );
- ~identity_mat_();
-
- public:
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class T,int Dim>
- struct
- mat_traits< qvm_detail::identity_mat_<T,Dim> >
- {
- typedef qvm_detail::identity_mat_<T,Dim> this_matrix;
- typedef T scalar_type;
- static int const rows=Dim;
- static int const cols=Dim;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<Dim);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<Dim);
- return scalar_traits<scalar_type>::value(Row==Col);
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<Dim);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<Dim);
- return scalar_traits<scalar_type>::value(row==col);
- }
- };
-
- template <class T,int Dim>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::identity_mat_<T,Dim> const &
- identity_mat()
- {
- return *(qvm_detail::identity_mat_<T,Dim> const *)qvm_detail::get_valid_ptr_mat_operations();
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols,
- void>::type
- set_identity( A & a )
- {
- assign(a,identity_mat<typename mat_traits<A>::scalar_type,mat_traits<A>::rows>());
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T>
- struct
- projection_
- {
- T const _00;
- T const _11;
- T const _22;
- T const _23;
- T const _32;
-
- BOOST_QVM_INLINE_TRIVIAL
- projection_( T _00, T _11, T _22, T _23, T _32 ):
- _00(_00),
- _11(_11),
- _22(_22),
- _23(_23),
- _32(_32)
- {
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <int Row,int Col>
- struct
- projection_get
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( projection_<T> const & )
- {
- return scalar_traits<T>::value(0);
- }
- };
-
- template <> struct projection_get<0,0> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( projection_<T> const & m ) { return m._00; } };
- template <> struct projection_get<1,1> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( projection_<T> const & m ) { return m._11; } };
- template <> struct projection_get<2,2> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( projection_<T> const & m ) { return m._22; } };
- template <> struct projection_get<2,3> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( projection_<T> const & m ) { return m._23; } };
- template <> struct projection_get<3,2> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( projection_<T> const & m ) { return m._32; } };
- }
-
- template <class T>
- struct
- mat_traits< qvm_detail::projection_<T> >
- {
- typedef qvm_detail::projection_<T> this_matrix;
- typedef T scalar_type;
- static int const rows=4;
- static int const cols=4;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return qvm_detail::projection_get<Row,Col>::get(x);
- }
- };
-
- template <class T>
- qvm_detail::projection_<T>
- BOOST_QVM_INLINE_OPERATIONS
- perspective_lh( T fov_y, T aspect_ratio, T z_near, T z_far )
- {
- T const one = scalar_traits<T>::value(1);
- T const ys = one/tan<T>(fov_y/scalar_traits<T>::value(2));
- T const xs = ys/aspect_ratio;
- T const zd = z_far-z_near;
- T const z1 = z_far/zd;
- T const z2 = -z_near*z1;
- return qvm_detail::projection_<T>(xs,ys,z1,z2,one);
- }
-
- template <class T>
- qvm_detail::projection_<T>
- BOOST_QVM_INLINE_OPERATIONS
- perspective_rh( T fov_y, T aspect_ratio, T z_near, T z_far )
- {
- T const one = scalar_traits<T>::value(1);
- T const ys = one/tan<T>(fov_y/scalar_traits<T>::value(2));
- T const xs = ys/aspect_ratio;
- T const zd = z_near-z_far;
- T const z1 = z_far/zd;
- T const z2 = z_near*z1;
- return qvm_detail::projection_<T>(xs,ys,z1,z2,-one);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class OriginalType,class Scalar>
- class
- matrix_scalar_cast_
- {
- matrix_scalar_cast_( matrix_scalar_cast_ const & );
- matrix_scalar_cast_ & operator=( matrix_scalar_cast_ const & );
- ~matrix_scalar_cast_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- matrix_scalar_cast_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <bool> struct scalar_cast_matrix_filter { };
- template <> struct scalar_cast_matrix_filter<true> { typedef int type; };
- }
-
- template <class OriginalType,class Scalar>
- struct
- mat_traits< qvm_detail::matrix_scalar_cast_<OriginalType,Scalar> >
- {
- typedef Scalar scalar_type;
- typedef qvm_detail::matrix_scalar_cast_<OriginalType,Scalar> this_matrix;
- static int const rows=mat_traits<OriginalType>::rows;
- static int const cols=mat_traits<OriginalType>::cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return scalar_type(mat_traits<OriginalType>::template read_element<Row,Col>(reinterpret_cast<OriginalType const &>(x)));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return scalar_type(mat_traits<OriginalType>::read_element_idx(col,row,reinterpret_cast<OriginalType const &>(x)));
- }
- };
-
- template <class OriginalType,class Scalar,int R,int C>
- struct
- deduce_mat<qvm_detail::matrix_scalar_cast_<OriginalType,Scalar>,R,C>
- {
- typedef mat<Scalar,R,C> type;
- };
-
- template <class Scalar,class T>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::matrix_scalar_cast_<T,Scalar> const &
- scalar_cast( T const & x, typename qvm_detail::scalar_cast_matrix_filter<is_mat<T>::value>::type=0 )
- {
- return reinterpret_cast<qvm_detail::matrix_scalar_cast_<T,Scalar> const &>(x);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- div_eq_ms_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value && is_scalar<B>::value &&
- !qvm_detail::div_eq_ms_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- mat_traits<A>::write_element_idx(i,j,a)/=b;
- return a;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- div_ms_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_mat<A>::value && is_scalar<B>::value &&
- !qvm_detail::div_ms_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- deduce_mat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- mat_traits<R>::write_element_idx(i,j,r)=mat_traits<A>::read_element_idx(i,j,a)/b;
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- eq_mm_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value && is_mat<B>::value &&
- mat_traits<A>::rows==mat_traits<B>::rows &&
- mat_traits<A>::cols==mat_traits<B>::cols &&
- !qvm_detail::eq_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- bool>::type
- operator==( A const & a, B const & b )
- {
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- if( mat_traits<A>::read_element_idx(i,j,a)!=mat_traits<B>::read_element_idx(i,j,b) )
- return false;
- return true;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- minus_eq_mm_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value && is_mat<B>::value &&
- mat_traits<A>::rows==mat_traits<B>::rows &&
- mat_traits<A>::cols==mat_traits<B>::cols &&
- !qvm_detail::minus_eq_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- A &>::type
- operator-=( A & a, B const & b )
- {
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- mat_traits<A>::write_element_idx(i,j,a)-=mat_traits<B>::read_element_idx(i,j,b);
- return a;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- minus_m_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_mat<A>::value &&
- !qvm_detail::minus_m_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- deduce_mat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- mat_traits<R>::write_element_idx(i,j,r)=-mat_traits<A>::read_element_idx(i,j,a);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- minus_mm_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_mat<A>::value && is_mat<B>::value &&
- mat_traits<A>::rows==mat_traits<B>::rows &&
- mat_traits<A>::cols==mat_traits<B>::cols &&
- !qvm_detail::minus_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<A>::cols> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<A>::cols>::type R;
- R r;
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- mat_traits<R>::write_element_idx(i,j,r)=mat_traits<A>::read_element_idx(i,j,a)-mat_traits<B>::read_element_idx(i,j,b);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- mul_eq_mm_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- is_mat<B>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows==mat_traits<B>::rows &&
- mat_traits<A>::cols==mat_traits<B>::cols &&
- !qvm_detail::mul_eq_mm_defined<mat_traits<A>::rows>::value,
- A &>::type
- operator*=( A & r, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- Ta a[mat_traits<A>::rows][mat_traits<A>::cols];
- for( int i=0; i<mat_traits<A>::rows; ++i )
- for( int j=0; j<mat_traits<B>::cols; ++j )
- a[i][j]=mat_traits<A>::read_element_idx(i,j,r);
- for( int i=0; i<mat_traits<A>::rows; ++i )
- for( int j=0; j<mat_traits<B>::cols; ++j )
- {
- Ta x(scalar_traits<Ta>::value(0));
- for( int k=0; k<mat_traits<A>::cols; ++k )
- x += a[i][k]*mat_traits<B>::read_element_idx(k,j,b);
- mat_traits<A>::write_element_idx(i,j,r) = x;
- }
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- mul_eq_ms_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value && is_scalar<B>::value &&
- !qvm_detail::mul_eq_ms_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- mat_traits<A>::write_element_idx(i,j,a)*=b;
- return a;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int R,int CR,int C>
- struct
- mul_mm_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_mat<A>::value && is_mat<B>::value &&
- mat_traits<A>::cols==mat_traits<B>::rows &&
- !qvm_detail::mul_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols,mat_traits<B>::cols>::value,
- deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<B>::cols> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<B>::cols>::type R;
- R r;
- for( int i=0; i<mat_traits<A>::rows; ++i )
- for( int j=0; j<mat_traits<B>::cols; ++j )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- Ta x(scalar_traits<Ta>::value(0));
- for( int k=0; k<mat_traits<A>::cols; ++k )
- x += mat_traits<A>::read_element_idx(i,k,a)*mat_traits<B>::read_element_idx(k,j,b);
- mat_traits<R>::write_element_idx(i,j,r) = x;
- }
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- mul_ms_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_mat<A>::value && is_scalar<B>::value &&
- !qvm_detail::mul_ms_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- deduce_mat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_mat<A>::type R;
- R r;
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- mat_traits<R>::write_element_idx(i,j,r)=mat_traits<A>::read_element_idx(i,j,a)*b;
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- mul_sm_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && is_mat<B>::value &&
- !qvm_detail::mul_sm_defined<mat_traits<B>::rows,mat_traits<B>::cols>::value,
- deduce_mat<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_mat<B>::type R;
- R r;
- for( int i=0; i!=mat_traits<B>::rows; ++i )
- for( int j=0; j!=mat_traits<B>::cols; ++j )
- mat_traits<R>::write_element_idx(i,j,r)=a*mat_traits<B>::read_element_idx(i,j,b);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- neq_mm_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value && is_mat<B>::value &&
- mat_traits<A>::rows==mat_traits<B>::rows &&
- mat_traits<A>::cols==mat_traits<B>::cols &&
- !qvm_detail::neq_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- if( mat_traits<A>::read_element_idx(i,j,a)!=mat_traits<B>::read_element_idx(i,j,b) )
- return true;
- return false;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- plus_eq_mm_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value && is_mat<B>::value &&
- mat_traits<A>::rows==mat_traits<B>::rows &&
- mat_traits<A>::cols==mat_traits<B>::cols &&
- !qvm_detail::plus_eq_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- A &>::type
- operator+=( A & a, B const & b )
- {
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- mat_traits<A>::write_element_idx(i,j,a)+=mat_traits<B>::read_element_idx(i,j,b);
- return a;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- plus_mm_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_mat<A>::value && is_mat<B>::value &&
- mat_traits<A>::rows==mat_traits<B>::rows &&
- mat_traits<A>::cols==mat_traits<B>::cols &&
- !qvm_detail::plus_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<A>::cols> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<A>::cols>::type R;
- R r;
- for( int i=0; i!=mat_traits<A>::rows; ++i )
- for( int j=0; j!=mat_traits<A>::cols; ++j )
- mat_traits<R>::write_element_idx(i,j,r)=mat_traits<A>::read_element_idx(i,j,a)+mat_traits<B>::read_element_idx(i,j,b);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T>
- class
- mref_
- {
- mref_( mref_ const & );
- mref_ & operator=( mref_ const & );
- ~mref_();
-
- public:
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- mref_ &
- operator=( R const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class M>
- struct
- mat_traits< qvm_detail::mref_<M> >
- {
- typedef typename mat_traits<M>::scalar_type scalar_type;
- typedef qvm_detail::mref_<M> this_matrix;
- static int const rows=mat_traits<M>::rows;
- static int const cols=mat_traits<M>::cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<M>::template read_element<Row,Col>(reinterpret_cast<M const &>(x));
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<cols);
- return mat_traits<M>::template write_element<Row,Col>(reinterpret_cast<M &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<M>::read_element_idx(row,col,reinterpret_cast<M const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return mat_traits<M>::write_element_idx(row,col,reinterpret_cast<M &>(x));
- }
- };
-
- template <class M,int R,int C>
- struct
- deduce_mat<qvm_detail::mref_<M>,R,C>
- {
- typedef mat<typename mat_traits<M>::scalar_type,R,C> type;
- };
-
- template <class M>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_mat<M>::value,
- qvm_detail::mref_<M> const &>::type
- mref( M const & a )
- {
- return reinterpret_cast<qvm_detail::mref_<M> const &>(a);
- }
-
- template <class M>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_mat<M>::value,
- qvm_detail::mref_<M> &>::type
- mref( M & a )
- {
- return reinterpret_cast<qvm_detail::mref_<M> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T,int Rows,int Cols>
- class
- zero_mat_
- {
- zero_mat_( zero_mat_ const & );
- zero_mat_ & operator=( zero_mat_ const & );
- ~zero_mat_();
-
- public:
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class T,int Rows,int Cols>
- struct
- mat_traits< qvm_detail::zero_mat_<T,Rows,Cols> >
- {
- typedef qvm_detail::zero_mat_<T,Rows,Cols> this_matrix;
- typedef T scalar_type;
- static int const rows=Rows;
- static int const cols=Cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<Rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<Cols);
- return scalar_traits<scalar_type>::value(0);
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<cols);
- return scalar_traits<scalar_type>::value(0);
- }
- };
-
- template <class T,int Rows,int Cols,int R,int C>
- struct
- deduce_mat<qvm_detail::zero_mat_<T,Rows,Cols>,R,C>
- {
- typedef mat<T,R,C> type;
- };
-
- template <class T,int Rows,int Cols>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::zero_mat_<T,Rows,Cols> const &
- zero_mat()
- {
- return *(qvm_detail::zero_mat_<T,Rows,Cols> const *)qvm_detail::get_valid_ptr_mat_operations();
- }
-
- template <class T,int Dim>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::zero_mat_<T,Dim,Dim> const &
- zero_mat()
- {
- return *(qvm_detail::zero_mat_<T,Dim,Dim> const *)qvm_detail::get_valid_ptr_mat_operations();
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value,
- void>::type
- set_zero( A & a )
- {
- assign(a,zero_mat<typename mat_traits<A>::scalar_type,mat_traits<A>::rows,mat_traits<A>::cols>());
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D,class S>
- struct
- rot_mat_
- {
- typedef S scalar_type;
- scalar_type a[3][3];
-
- BOOST_QVM_INLINE
- rot_mat_(
- scalar_type a00, scalar_type a01, scalar_type a02,
- scalar_type a10, scalar_type a11, scalar_type a12,
- scalar_type a20, scalar_type a21, scalar_type a22 )
- {
- a[0][0] = a00;
- a[0][1] = a01;
- a[0][2] = a02;
- a[1][0] = a10;
- a[1][1] = a11;
- a[1][2] = a12;
- a[2][0] = a20;
- a[2][1] = a21;
- a[2][2] = a22;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <int Row,int Col>
- struct
- rot_m_get
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const (&)[3][3] )
- {
- return scalar_traits<T>::value(Row==Col);
- }
- };
-
- template <> struct rot_m_get<0,0> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[0][0]; } };
- template <> struct rot_m_get<0,1> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[0][1]; } };
- template <> struct rot_m_get<0,2> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[0][2]; } };
- template <> struct rot_m_get<1,0> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[1][0]; } };
- template <> struct rot_m_get<1,1> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[1][1]; } };
- template <> struct rot_m_get<1,2> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[1][2]; } };
- template <> struct rot_m_get<2,0> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[2][0]; } };
- template <> struct rot_m_get<2,1> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[2][1]; } };
- template <> struct rot_m_get<2,2> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[2][2]; } };
- }
-
- template <class M>
- struct mat_traits;
-
- template <int D,class S>
- struct
- mat_traits< qvm_detail::rot_mat_<D,S> >
- {
- typedef qvm_detail::rot_mat_<D,S> this_matrix;
- typedef typename this_matrix::scalar_type scalar_type;
- static int const rows=D;
- static int const cols=D;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<D);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<D);
- return qvm_detail::rot_m_get<Row,Col>::get(x.a);
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<D);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<D);
- return row<3 && col<3?
- x.a[row][col] :
- scalar_traits<scalar_type>::value(row==col);
- }
- };
-
- template <int Dim,class V,class Angle>
- BOOST_QVM_INLINE
- typename enable_if_c<
- is_vec<V>::value && vec_traits<V>::dim==3,
- qvm_detail::rot_mat_<Dim,Angle> >::type
- rot_mat( V const & axis, Angle angle )
- {
- typedef Angle scalar_type;
- scalar_type const x=vec_traits<V>::template read_element<0>(axis);
- scalar_type const y=vec_traits<V>::template read_element<1>(axis);
- scalar_type const z=vec_traits<V>::template read_element<2>(axis);
- scalar_type const m2=x*x+y*y+z*z;
- if( m2==scalar_traits<scalar_type>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- scalar_type const s = sin<scalar_type>(angle);
- scalar_type const c = cos<scalar_type>(angle);
- scalar_type const x2 = x*x;
- scalar_type const y2 = y*y;
- scalar_type const z2 = z*z;
- scalar_type const xy = x*y;
- scalar_type const xz = x*z;
- scalar_type const yz = y*z;
- scalar_type const xs = x*s;
- scalar_type const ys = y*s;
- scalar_type const zs = z*s;
- scalar_type const one = scalar_traits<scalar_type>::value(1);
- scalar_type const c1 = one-c;
- return qvm_detail::rot_mat_<Dim,Angle>(
- x2+(one-x2)*c, xy*c1-zs, xz*(one-c)+ys,
- xy*c1+zs, y2+(one-y2)*c, yz*c1-xs,
- xz*c1-ys, yz*c1+xs, z2+(one-z2)*c );
- }
-
- template <class A,class B,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3 &&
- is_vec<B>::value && vec_traits<B>::dim==3,
- void>::type
- set_rot( A & a, B const & axis, Angle angle )
- {
- assign(a,rot_mat<mat_traits<A>::rows>(axis,angle));
- }
-
- template <class A,class B,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3 &&
- is_vec<B>::value && vec_traits<B>::dim==3,
- void>::type
- rotate( A & a, B const & axis, Angle angle )
- {
- a *= rot_mat<mat_traits<A>::rows>(axis,angle);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_xzy( Angle x1, Angle z2, Angle y3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(x1);
- scalar_type const s1 = sin<scalar_type>(x1);
- scalar_type const c2 = cos<scalar_type>(z2);
- scalar_type const s2 = sin<scalar_type>(z2);
- scalar_type const c3 = cos<scalar_type>(y3);
- scalar_type const s3 = sin<scalar_type>(y3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c2*c3, -s2, c2*s3,
- s1*s3 + c1*c3*s2, c1*c2, c1*s2*s3 - c3*s1,
- c3*s1*s2 - c1*s3, c2*s1, c1*c3 + s1*s2*s3 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_xzy( A & a, Angle x1, Angle z2, Angle y3 )
- {
- assign(a,rot_mat_xzy<mat_traits<A>::rows>(x1,z2,y3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_xzy( A & a, Angle x1, Angle z2, Angle y3 )
- {
- a *= rot_mat_xzy<mat_traits<A>::rows>(x1,z2,y3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_xyz( Angle x1, Angle y2, Angle z3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(x1);
- scalar_type const s1 = sin<scalar_type>(x1);
- scalar_type const c2 = cos<scalar_type>(y2);
- scalar_type const s2 = sin<scalar_type>(y2);
- scalar_type const c3 = cos<scalar_type>(z3);
- scalar_type const s3 = sin<scalar_type>(z3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c2*c3, -c2*s3, s2,
- c1*s3 + c3*s1*s2, c1*c3 - s1*s2*s3, -c2*s1,
- s1*s3 - c1*c3*s2, c3*s1 + c1*s2*s3, c1*c2 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_xyz( A & a, Angle x1, Angle y2, Angle z3 )
- {
- assign(a,rot_mat_xyz<mat_traits<A>::rows>(x1,y2,z3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_xyz( A & a, Angle x1, Angle y2, Angle z3 )
- {
- a *= rot_mat_xyz<mat_traits<A>::rows>(x1,y2,z3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_yxz( Angle y1, Angle x2, Angle z3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(y1);
- scalar_type const s1 = sin<scalar_type>(y1);
- scalar_type const c2 = cos<scalar_type>(x2);
- scalar_type const s2 = sin<scalar_type>(x2);
- scalar_type const c3 = cos<scalar_type>(z3);
- scalar_type const s3 = sin<scalar_type>(z3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c1*c3 + s1*s2*s3, c3*s1*s2 - c1*s3, c2*s1,
- c2*s3, c2*c3, -s2,
- c1*s2*s3 - c3*s1, c1*c3*s2 + s1*s3, c1*c2 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_yxz( A & a, Angle y1, Angle x2, Angle z3 )
- {
- assign(a,rot_mat_yxz<mat_traits<A>::rows>(y1,x2,z3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_yxz( A & a, Angle y1, Angle x2, Angle z3 )
- {
- a *= rot_mat_yxz<mat_traits<A>::rows>(y1,x2,z3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_yzx( Angle y1, Angle z2, Angle x3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(y1);
- scalar_type const s1 = sin<scalar_type>(y1);
- scalar_type const c2 = cos<scalar_type>(z2);
- scalar_type const s2 = sin<scalar_type>(z2);
- scalar_type const c3 = cos<scalar_type>(x3);
- scalar_type const s3 = sin<scalar_type>(x3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c1*c2, s1*s3 - c1*c3*s2, c3*s1 + c1*s2*s3,
- s2, c2*c3, -c2*s3,
- -c2*s1, c1*s3 + c3*s1*s2, c1*c3 - s1*s2*s3 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_yzx( A & a, Angle y1, Angle z2, Angle x3 )
- {
- assign(a,rot_mat_yzx<mat_traits<A>::rows>(y1,z2,x3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_yzx( A & a, Angle y1, Angle z2, Angle x3 )
- {
- a *= rot_mat_yzx<mat_traits<A>::rows>(y1,z2,x3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_zyx( Angle z1, Angle y2, Angle x3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(z1);
- scalar_type const s1 = sin<scalar_type>(z1);
- scalar_type const c2 = cos<scalar_type>(y2);
- scalar_type const s2 = sin<scalar_type>(y2);
- scalar_type const c3 = cos<scalar_type>(x3);
- scalar_type const s3 = sin<scalar_type>(x3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c1*c2, c1*s2*s3 - c3*s1, s1*s3 + c1*c3*s2,
- c2*s1, c1*c3 + s1*s2*s3, c3*s1*s2 - c1*s3,
- -s2, c2*s3, c2*c3 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_zyx( A & a, Angle z1, Angle y2, Angle x3 )
- {
- assign(a,rot_mat_zyx<mat_traits<A>::rows>(z1,y2,x3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_zyx( A & a, Angle z1, Angle y2, Angle x3 )
- {
- a *= rot_mat_zyx<mat_traits<A>::rows>(z1,y2,x3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_zxy( Angle z1, Angle x2, Angle y3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(z1);
- scalar_type const s1 = sin<scalar_type>(z1);
- scalar_type const c2 = cos<scalar_type>(x2);
- scalar_type const s2 = sin<scalar_type>(x2);
- scalar_type const c3 = cos<scalar_type>(y3);
- scalar_type const s3 = sin<scalar_type>(y3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c1*c3 - s1*s2*s3, -c2*s1, c1*s3 + c3*s1*s2,
- c3*s1 + c1*s2*s3, c1*c2, s1*s3 - c1*c3*s2,
- -c2*s3, s2, c2*c3 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_zxy( A & a, Angle z1, Angle x2, Angle y3 )
- {
- assign(a,rot_mat_zxy<mat_traits<A>::rows>(z1,x2,y3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_zxy( A & a, Angle z1, Angle x2, Angle y3 )
- {
- a *= rot_mat_zxy<mat_traits<A>::rows>(z1,x2,y3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_xzx( Angle x1, Angle z2, Angle x3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(x1);
- scalar_type const s1 = sin<scalar_type>(x1);
- scalar_type const c2 = cos<scalar_type>(z2);
- scalar_type const s2 = sin<scalar_type>(z2);
- scalar_type const c3 = cos<scalar_type>(x3);
- scalar_type const s3 = sin<scalar_type>(x3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c2, -c3*s2, s2*s3,
- c1*s2, c1*c2*c3 - s1*s3, -c3*s1 - c1*c2*s3,
- s1*s2, c1*s3 + c2*c3*s1, c1*c3 - c2*s1*s3 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_xzx( A & a, Angle x1, Angle z2, Angle x3 )
- {
- assign(a,rot_mat_xzx<mat_traits<A>::rows>(x1,z2,x3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_xzx( A & a, Angle x1, Angle z2, Angle x3 )
- {
- a *= rot_mat_xzx<mat_traits<A>::rows>(x1,z2,x3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_xyx( Angle x1, Angle y2, Angle x3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(x1);
- scalar_type const s1 = sin<scalar_type>(x1);
- scalar_type const c2 = cos<scalar_type>(y2);
- scalar_type const s2 = sin<scalar_type>(y2);
- scalar_type const c3 = cos<scalar_type>(x3);
- scalar_type const s3 = sin<scalar_type>(x3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c2, s2*s3, c3*s2,
- s1*s2, c1*c3 - c2*s1*s3, -c1*s3 - c2*c3*s1,
- -c1*s2, c3*s1 + c1*c2*s3, c1*c2*c3 - s1*s3 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_xyx( A & a, Angle x1, Angle y2, Angle x3 )
- {
- assign(a,rot_mat_xyx<mat_traits<A>::rows>(x1,y2,x3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_xyx( A & a, Angle x1, Angle y2, Angle x3 )
- {
- a *= rot_mat_xyx<mat_traits<A>::rows>(x1,y2,x3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_yxy( Angle y1, Angle x2, Angle y3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(y1);
- scalar_type const s1 = sin<scalar_type>(y1);
- scalar_type const c2 = cos<scalar_type>(x2);
- scalar_type const s2 = sin<scalar_type>(x2);
- scalar_type const c3 = cos<scalar_type>(y3);
- scalar_type const s3 = sin<scalar_type>(y3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c1*c3 - c2*s1*s3, s1*s2, c1*s3 + c2*c3*s1,
- s2*s3, c2, -c3*s2,
- -c3*s1 - c1*c2*s3, c1*s2, c1*c2*c3 - s1*s3 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_yxy( A & a, Angle y1, Angle x2, Angle y3 )
- {
- assign(a,rot_mat_yxy<mat_traits<A>::rows>(y1,x2,y3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_yxy( A & a, Angle y1, Angle x2, Angle y3 )
- {
- a *= rot_mat_yxy<mat_traits<A>::rows>(y1,x2,y3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_yzy( Angle y1, Angle z2, Angle y3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(y1);
- scalar_type const s1 = sin<scalar_type>(y1);
- scalar_type const c2 = cos<scalar_type>(z2);
- scalar_type const s2 = sin<scalar_type>(z2);
- scalar_type const c3 = cos<scalar_type>(y3);
- scalar_type const s3 = sin<scalar_type>(y3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c1*c2*c3 - s1*s3, -c1*s2, c3*s1 + c1*c2*s3,
- c3*s2, c2, s2*s3,
- -c1*s3 - c2*c3*s1, s1*s2, c1*c3 - c2*s1*s3 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_yzy( A & a, Angle y1, Angle z2, Angle y3 )
- {
- assign(a,rot_mat_yzy<mat_traits<A>::rows>(y1,z2,y3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_yzy( A & a, Angle y1, Angle z2, Angle y3 )
- {
- a *= rot_mat_yzy<mat_traits<A>::rows>(y1,z2,y3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_zyz( Angle z1, Angle y2, Angle z3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(z1);
- scalar_type const s1 = sin<scalar_type>(z1);
- scalar_type const c2 = cos<scalar_type>(y2);
- scalar_type const s2 = sin<scalar_type>(y2);
- scalar_type const c3 = cos<scalar_type>(z3);
- scalar_type const s3 = sin<scalar_type>(z3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c1*c2*c3 - s1*s3, -c3*s1 - c1*c2*s3, c1*s2,
- c1*s3 + c2*c3*s1, c1*c3 - c2*s1*s3, s1*s2,
- -c3*s2, s2*s3, c2 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_zyz( A & a, Angle z1, Angle y2, Angle z3 )
- {
- assign(a,rot_mat_zyz<mat_traits<A>::rows>(z1,y2,z3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_zyz( A & a, Angle z1, Angle y2, Angle z3 )
- {
- a *= rot_mat_zyz<mat_traits<A>::rows>(z1,y2,z3);
- }
-
- ////////////////////////////////////////////////
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE
- qvm_detail::rot_mat_<Dim,Angle>
- rot_mat_zxz( Angle z1, Angle x2, Angle z3 )
- {
- typedef Angle scalar_type;
- scalar_type const c1 = cos<scalar_type>(z1);
- scalar_type const s1 = sin<scalar_type>(z1);
- scalar_type const c2 = cos<scalar_type>(x2);
- scalar_type const s2 = sin<scalar_type>(x2);
- scalar_type const c3 = cos<scalar_type>(z3);
- scalar_type const s3 = sin<scalar_type>(z3);
- return qvm_detail::rot_mat_<Dim,Angle>(
- c1*c3 - c2*s1*s3, -c1*s3 - c2*c3*s1, s1*s2,
- c3*s1 + c1*c2*s3, c1*c2*c3 - s1*s3, -c1*s2,
- s2*s3, c3*s2, c2 );
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- set_rot_zxz( A & a, Angle z1, Angle x2, Angle z3 )
- {
- assign(a,rot_mat_zxz<mat_traits<A>::rows>(z1,x2,z3));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- mat_traits<A>::rows>=3,
- void>::type
- rotate_zxz( A & a, Angle z1, Angle x2, Angle z3 )
- {
- a *= rot_mat_zxz<mat_traits<A>::rows>(z1,x2,z3);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Dim,class Angle>
- struct
- rotx_mat_
- {
- BOOST_QVM_INLINE_TRIVIAL
- rotx_mat_()
- {
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
-
- private:
-
- rotx_mat_( rotx_mat_ const & );
- rotx_mat_ & operator=( rotx_mat_ const & );
- ~rotx_mat_();
- };
-
- template <int Row,int Col>
- struct
- rotx_m_get
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & )
- {
- return scalar_traits<T>::value(Row==Col);
- }
- };
-
- template <>
- struct
- rotx_m_get<1,1>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return cos<T>(angle);
- }
- };
-
- template <>
- struct
- rotx_m_get<1,2>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return -sin<T>(angle);
- }
- };
-
- template <>
- struct
- rotx_m_get<2,1>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return sin<T>(angle);
- }
- };
-
- template <>
- struct
- rotx_m_get<2,2>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return cos<T>(angle);
- }
- };
- }
-
- template <int Dim,class Angle>
- struct
- mat_traits< qvm_detail::rotx_mat_<Dim,Angle> >
- {
- typedef qvm_detail::rotx_mat_<Dim,Angle> this_matrix;
- typedef Angle scalar_type;
- static int const rows=Dim;
- static int const cols=Dim;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Row<Dim);
- BOOST_QVM_STATIC_ASSERT(Col<Dim);
- return qvm_detail::rotx_m_get<Row,Col>::get(reinterpret_cast<Angle const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(row<Dim);
- BOOST_QVM_ASSERT(col<Dim);
- Angle const & a=reinterpret_cast<Angle const &>(x);
- if( row==1 )
- {
- if( col==1 )
- return cos<scalar_type>(a);
- if( col==2 )
- return -sin<scalar_type>(a);
- }
- if( row==2 )
- {
- if( col==1 )
- return sin<scalar_type>(a);
- if( col==2 )
- return cos<scalar_type>(a);
- }
- return scalar_traits<scalar_type>::value(row==col);
- }
- };
-
- template <int Dim,class Angle>
- struct
- deduce_mat<qvm_detail::rotx_mat_<Dim,Angle>,Dim,Dim>
- {
- typedef mat<Angle,Dim,Dim> type;
- };
-
- template <int Dim,class Angle>
- struct
- deduce_mat2<qvm_detail::rotx_mat_<Dim,Angle>,qvm_detail::rotx_mat_<Dim,Angle>,Dim,Dim>
- {
- typedef mat<Angle,Dim,Dim> type;
- };
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::rotx_mat_<Dim,Angle> const &
- rotx_mat( Angle const & angle )
- {
- BOOST_QVM_STATIC_ASSERT(Dim>=3);
- return reinterpret_cast<qvm_detail::rotx_mat_<Dim,Angle> const &>(angle);
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows>=3 &&
- mat_traits<A>::rows==mat_traits<A>::cols,
- void>::type
- set_rotx( A & a, Angle angle )
- {
- assign(a,rotx_mat<mat_traits<A>::rows>(angle));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows>=3 &&
- mat_traits<A>::rows==mat_traits<A>::cols,
- void>::type
- rotate_x( A & a, Angle angle )
- {
- a *= rotx_mat<mat_traits<A>::rows>(angle);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Dim,class Angle>
- struct
- roty_mat_
- {
- BOOST_QVM_INLINE_TRIVIAL
- roty_mat_()
- {
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
-
- private:
-
- roty_mat_( roty_mat_ const & );
- roty_mat_ & operator=( roty_mat_ const & );
- ~roty_mat_();
- };
-
- template <int Row,int Col>
- struct
- roty_m_get
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & )
- {
- return scalar_traits<T>::value(Row==Col);
- }
- };
-
- template <>
- struct
- roty_m_get<0,0>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return cos<T>(angle);
- }
- };
-
- template <>
- struct
- roty_m_get<0,2>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return sin<T>(angle);
- }
- };
-
- template <>
- struct
- roty_m_get<2,0>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return -sin<T>(angle);
- }
- };
-
- template <>
- struct
- roty_m_get<2,2>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return cos<T>(angle);
- }
- };
- }
-
- template <int Dim,class Angle>
- struct
- mat_traits< qvm_detail::roty_mat_<Dim,Angle> >
- {
- typedef qvm_detail::roty_mat_<Dim,Angle> this_matrix;
- typedef Angle scalar_type;
- static int const rows=Dim;
- static int const cols=Dim;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Row<Dim);
- BOOST_QVM_STATIC_ASSERT(Col<Dim);
- return qvm_detail::roty_m_get<Row,Col>::get(reinterpret_cast<Angle const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(row<Dim);
- BOOST_QVM_ASSERT(col<Dim);
- Angle const & a=reinterpret_cast<Angle const &>(x);
- if( row==0 )
- {
- if( col==0 )
- return cos<scalar_type>(a);
- if( col==2 )
- return sin<scalar_type>(a);
- }
- if( row==2 )
- {
- if( col==0 )
- return -sin<scalar_type>(a);
- if( col==2 )
- return cos<scalar_type>(a);
- }
- return scalar_traits<scalar_type>::value(row==col);
- }
- };
-
- template <int Dim,class Angle>
- struct
- deduce_mat<qvm_detail::roty_mat_<Dim,Angle>,Dim,Dim>
- {
- typedef mat<Angle,Dim,Dim> type;
- };
-
- template <int Dim,class Angle>
- struct
- deduce_mat2<qvm_detail::roty_mat_<Dim,Angle>,qvm_detail::roty_mat_<Dim,Angle>,Dim,Dim>
- {
- typedef mat<Angle,Dim,Dim> type;
- };
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::roty_mat_<Dim,Angle> const &
- roty_mat( Angle const & angle )
- {
- BOOST_QVM_STATIC_ASSERT(Dim>=3);
- return reinterpret_cast<qvm_detail::roty_mat_<Dim,Angle> const &>(angle);
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows>=2 &&
- mat_traits<A>::rows==mat_traits<A>::cols,
- void>::type
- set_roty( A & a, Angle angle )
- {
- assign(a,roty_mat<mat_traits<A>::rows>(angle));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows>=3 &&
- mat_traits<A>::rows==mat_traits<A>::cols,
- void>::type
- rotate_y( A & a, Angle angle )
- {
- a *= roty_mat<mat_traits<A>::rows>(angle);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int Dim,class Angle>
- struct
- rotz_mat_
- {
- BOOST_QVM_INLINE_TRIVIAL
- rotz_mat_()
- {
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
-
- private:
-
- rotz_mat_( rotz_mat_ const & );
- rotz_mat_ & operator=( rotz_mat_ const & );
- ~rotz_mat_();
- };
-
- template <int Row,int Col>
- struct
- rotz_m_get
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & )
- {
- return scalar_traits<T>::value(Row==Col);
- }
- };
-
- template <>
- struct
- rotz_m_get<0,0>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return cos<T>(angle);
- }
- };
-
- template <>
- struct
- rotz_m_get<0,1>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return -sin<T>(angle);
- }
- };
-
- template <>
- struct
- rotz_m_get<1,0>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return sin<T>(angle);
- }
- };
-
- template <>
- struct
- rotz_m_get<1,1>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return cos<T>(angle);
- }
- };
- }
-
- template <int Dim,class Angle>
- struct
- mat_traits< qvm_detail::rotz_mat_<Dim,Angle> >
- {
- typedef qvm_detail::rotz_mat_<Dim,Angle> this_matrix;
- typedef Angle scalar_type;
- static int const rows=Dim;
- static int const cols=Dim;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Row<Dim);
- BOOST_QVM_STATIC_ASSERT(Col<Dim);
- return qvm_detail::rotz_m_get<Row,Col>::get(reinterpret_cast<Angle const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(row<Dim);
- BOOST_QVM_ASSERT(col<Dim);
- Angle const & a=reinterpret_cast<Angle const &>(x);
- if( row==0 )
- {
- if( col==0 )
- return cos<scalar_type>(a);
- if( col==1 )
- return -sin<scalar_type>(a);
- }
- if( row==1 )
- {
- if( col==0 )
- return sin<scalar_type>(a);
- if( col==1 )
- return cos<scalar_type>(a);
- }
- return scalar_traits<scalar_type>::value(row==col);
- }
- };
-
- template <int Dim,class Angle>
- struct
- deduce_mat<qvm_detail::rotz_mat_<Dim,Angle>,Dim,Dim>
- {
- typedef mat<Angle,Dim,Dim> type;
- };
-
- template <int Dim,class Angle,int R,int C>
- struct
- deduce_mat2<qvm_detail::rotz_mat_<Dim,Angle>,qvm_detail::rotz_mat_<Dim,Angle>,R,C>
- {
- typedef mat<Angle,R,C> type;
- };
-
- template <int Dim,class Angle>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::rotz_mat_<Dim,Angle> const &
- rotz_mat( Angle const & angle )
- {
- BOOST_QVM_STATIC_ASSERT(Dim>=2);
- return reinterpret_cast<qvm_detail::rotz_mat_<Dim,Angle> const &>(angle);
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows>=2 &&
- mat_traits<A>::rows==mat_traits<A>::cols,
- void>::type
- set_rotz( A & a, Angle angle )
- {
- assign(a,rotz_mat<mat_traits<A>::rows>(angle));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows>=2 &&
- mat_traits<A>::rows==mat_traits<A>::cols,
- void>::type
- rotate_z( A & a, Angle angle )
- {
- a *= rotz_mat<mat_traits<A>::rows>(angle);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- inverse_m_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_TRIVIAL
- typename lazy_enable_if_c<
- is_mat<A>::value && is_scalar<B>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- !qvm_detail::inverse_m_defined<mat_traits<A>::rows>::value,
- deduce_mat<A> >::type
- inverse( A const & a, B det )
- {
- typedef typename mat_traits<A>::scalar_type T;
- BOOST_QVM_ASSERT(det!=scalar_traits<T>::value(0));
- T f=scalar_traits<T>::value(1)/det;
- typedef typename deduce_mat<A>::type cofactor_return_type;
- cofactor_return_type c=qvm_detail::cofactor_impl(a);
- return reinterpret_cast<qvm_detail::transposed_<cofactor_return_type> const &>(c) * f;
- }
-
- template <class A>
- BOOST_QVM_INLINE_TRIVIAL
- typename lazy_enable_if_c<
- is_mat<A>::value &&
- mat_traits<A>::rows==mat_traits<A>::cols &&
- !qvm_detail::inverse_m_defined<mat_traits<A>::rows>::value,
- deduce_mat<A> >::type
- inverse( A const & a )
- {
- typedef typename mat_traits<A>::scalar_type T;
- T det=determinant(a);
- if( det==scalar_traits<T>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_determinant_error());
- return inverse(a,det);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- sfinae
- {
- using ::boost::qvm::to_string;
- using ::boost::qvm::assign;
- using ::boost::qvm::determinant;
- using ::boost::qvm::cmp;
- using ::boost::qvm::convert_to;
- using ::boost::qvm::set_identity;
- using ::boost::qvm::set_zero;
- using ::boost::qvm::scalar_cast;
- using ::boost::qvm::operator/=;
- using ::boost::qvm::operator/;
- using ::boost::qvm::operator==;
- using ::boost::qvm::operator-=;
- using ::boost::qvm::operator-;
- using ::boost::qvm::operator*=;
- using ::boost::qvm::operator*;
- using ::boost::qvm::operator!=;
- using ::boost::qvm::operator+=;
- using ::boost::qvm::operator+;
- using ::boost::qvm::mref;
- using ::boost::qvm::rot_mat;
- using ::boost::qvm::set_rot;
- using ::boost::qvm::rotate;
- using ::boost::qvm::set_rotx;
- using ::boost::qvm::rotate_x;
- using ::boost::qvm::set_roty;
- using ::boost::qvm::rotate_y;
- using ::boost::qvm::set_rotz;
- using ::boost::qvm::rotate_z;
- using ::boost::qvm::inverse;
- }
-
- ////////////////////////////////////////////////
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifdef __GNUC__
+#pragma GCC system_header
+#endif
+
+#ifndef UUID_4F915D9ED30A11DF962186E3DFD72085
+#define UUID_4F915D9ED30A11DF962186E3DFD72085
+
+#include <boost/qvm/detail/mat_assign.hpp>
+#include <boost/qvm/mat_operations2.hpp>
+#include <boost/qvm/mat_operations3.hpp>
+#include <boost/qvm/mat_operations4.hpp>
+#include <boost/qvm/math.hpp>
+#include <boost/qvm/detail/determinant_impl.hpp>
+#include <boost/qvm/detail/cofactor_impl.hpp>
+#include <boost/qvm/detail/transp_impl.hpp>
+#include <boost/qvm/scalar_traits.hpp>
+#include <string>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ BOOST_QVM_INLINE_CRITICAL
+ void const *
+ get_valid_ptr_mat_operations()
+ {
+ static int const obj=0;
+ return &obj;
+ }
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_to_string_detail
+ {
+ template <class T>
+ std::string to_string( T const & x );
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int C>
+ struct
+ to_string_m_defined
+ {
+ static bool const value=false;
+ };
+
+ template <int I,int SizeMinusOne>
+ struct
+ to_string_matrix_elements
+ {
+ template <class A>
+ static
+ std::string
+ f( A const & a )
+ {
+ using namespace qvm_to_string_detail;
+ return
+ ( (I%mat_traits<A>::cols)==0 ? '(' : ',' ) +
+ to_string(mat_traits<A>::template read_element<I/mat_traits<A>::cols,I%mat_traits<A>::cols>(a)) +
+ ( (I%mat_traits<A>::cols)==mat_traits<A>::cols-1 ? ")" : "" ) +
+ to_string_matrix_elements<I+1,SizeMinusOne>::f(a);
+ }
+ };
+
+ template <int SizeMinusOne>
+ struct
+ to_string_matrix_elements<SizeMinusOne,SizeMinusOne>
+ {
+ template <class A>
+ static
+ std::string
+ f( A const & a )
+ {
+ using namespace qvm_to_string_detail;
+ return
+ ( (SizeMinusOne%mat_traits<A>::cols)==0 ? '(' : ',' ) +
+ to_string(mat_traits<A>::template read_element<SizeMinusOne/mat_traits<A>::cols,SizeMinusOne%mat_traits<A>::cols>(a)) +
+ ')';
+ }
+ };
+ }
+
+ template <class A>
+ inline
+ typename boost::enable_if_c<
+ is_mat<A>::value &&
+ !qvm_detail::to_string_m_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ std::string>::type
+ to_string( A const & a )
+ {
+ return "("+qvm_detail::to_string_matrix_elements<0,mat_traits<A>::rows*mat_traits<A>::cols-1>::f(a)+')';
+ }
+
+ ////////////////////////////////////////////////
+
+ template <class A,class B,class Cmp>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value && is_mat<B>::value &&
+ mat_traits<A>::rows==mat_traits<B>::rows &&
+ mat_traits<A>::cols==mat_traits<B>::cols,
+ bool>::type
+ cmp( A const & a, B const & b, Cmp f )
+ {
+ typedef typename deduce_scalar<
+ typename mat_traits<A>::scalar_type,
+ typename mat_traits<B>::scalar_type>::type T;
+ int const rows=mat_traits<A>::rows;
+ int const cols=mat_traits<A>::cols;
+ T m1[rows][cols]; assign(m1,a);
+ T m2[rows][cols]; assign(m2,b);
+ for( int i=0; i!=rows; ++i )
+ for( int j=0; j!=cols; ++j )
+ if( !f(m1[i][j],m2[i][j]) )
+ return false;
+ return true;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ convert_to_m_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_mat<R>::value && is_mat<A>::value &&
+ mat_traits<R>::rows==mat_traits<A>::rows &&
+ mat_traits<R>::cols==mat_traits<A>::cols &&
+ !qvm_detail::convert_to_m_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r; assign(r,a);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ determinant_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ !qvm_detail::determinant_defined<mat_traits<A>::rows>::value,
+ typename mat_traits<A>::scalar_type>::type
+ determinant( A const & a )
+ {
+ return qvm_detail::determinant_impl(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T,int Dim>
+ class
+ identity_mat_
+ {
+ identity_mat_( identity_mat_ const & );
+ identity_mat_ & operator=( identity_mat_ const & );
+ ~identity_mat_();
+
+ public:
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class T,int Dim>
+ struct
+ mat_traits< qvm_detail::identity_mat_<T,Dim> >
+ {
+ typedef qvm_detail::identity_mat_<T,Dim> this_matrix;
+ typedef T scalar_type;
+ static int const rows=Dim;
+ static int const cols=Dim;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<Dim);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<Dim);
+ return scalar_traits<scalar_type>::value(Row==Col);
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<Dim);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<Dim);
+ return scalar_traits<scalar_type>::value(row==col);
+ }
+ };
+
+ template <class T,int Dim>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::identity_mat_<T,Dim> const &
+ identity_mat()
+ {
+ return *(qvm_detail::identity_mat_<T,Dim> const *)qvm_detail::get_valid_ptr_mat_operations();
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols,
+ void>::type
+ set_identity( A & a )
+ {
+ assign(a,identity_mat<typename mat_traits<A>::scalar_type,mat_traits<A>::rows>());
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T>
+ struct
+ projection_
+ {
+ T const _00;
+ T const _11;
+ T const _22;
+ T const _23;
+ T const _32;
+
+ BOOST_QVM_INLINE_TRIVIAL
+ projection_( T _00, T _11, T _22, T _23, T _32 ):
+ _00(_00),
+ _11(_11),
+ _22(_22),
+ _23(_23),
+ _32(_32)
+ {
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <int Row,int Col>
+ struct
+ projection_get
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( projection_<T> const & )
+ {
+ return scalar_traits<T>::value(0);
+ }
+ };
+
+ template <> struct projection_get<0,0> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( projection_<T> const & m ) { return m._00; } };
+ template <> struct projection_get<1,1> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( projection_<T> const & m ) { return m._11; } };
+ template <> struct projection_get<2,2> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( projection_<T> const & m ) { return m._22; } };
+ template <> struct projection_get<2,3> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( projection_<T> const & m ) { return m._23; } };
+ template <> struct projection_get<3,2> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( projection_<T> const & m ) { return m._32; } };
+ }
+
+ template <class T>
+ struct
+ mat_traits< qvm_detail::projection_<T> >
+ {
+ typedef qvm_detail::projection_<T> this_matrix;
+ typedef T scalar_type;
+ static int const rows=4;
+ static int const cols=4;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return qvm_detail::projection_get<Row,Col>::get(x);
+ }
+ };
+
+ template <class T>
+ qvm_detail::projection_<T>
+ BOOST_QVM_INLINE_OPERATIONS
+ perspective_lh( T fov_y, T aspect_ratio, T z_near, T z_far )
+ {
+ T const one = scalar_traits<T>::value(1);
+ T const ys = one/tan<T>(fov_y/scalar_traits<T>::value(2));
+ T const xs = ys/aspect_ratio;
+ T const zd = z_far-z_near;
+ T const z1 = z_far/zd;
+ T const z2 = -z_near*z1;
+ return qvm_detail::projection_<T>(xs,ys,z1,z2,one);
+ }
+
+ template <class T>
+ qvm_detail::projection_<T>
+ BOOST_QVM_INLINE_OPERATIONS
+ perspective_rh( T fov_y, T aspect_ratio, T z_near, T z_far )
+ {
+ T const one = scalar_traits<T>::value(1);
+ T const ys = one/tan<T>(fov_y/scalar_traits<T>::value(2));
+ T const xs = ys/aspect_ratio;
+ T const zd = z_near-z_far;
+ T const z1 = z_far/zd;
+ T const z2 = z_near*z1;
+ return qvm_detail::projection_<T>(xs,ys,z1,z2,-one);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class OriginalType,class Scalar>
+ class
+ matrix_scalar_cast_
+ {
+ matrix_scalar_cast_( matrix_scalar_cast_ const & );
+ matrix_scalar_cast_ & operator=( matrix_scalar_cast_ const & );
+ ~matrix_scalar_cast_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ matrix_scalar_cast_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <bool> struct scalar_cast_matrix_filter { };
+ template <> struct scalar_cast_matrix_filter<true> { typedef int type; };
+ }
+
+ template <class OriginalType,class Scalar>
+ struct
+ mat_traits< qvm_detail::matrix_scalar_cast_<OriginalType,Scalar> >
+ {
+ typedef Scalar scalar_type;
+ typedef qvm_detail::matrix_scalar_cast_<OriginalType,Scalar> this_matrix;
+ static int const rows=mat_traits<OriginalType>::rows;
+ static int const cols=mat_traits<OriginalType>::cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return scalar_type(mat_traits<OriginalType>::template read_element<Row,Col>(reinterpret_cast<OriginalType const &>(x)));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return scalar_type(mat_traits<OriginalType>::read_element_idx(col,row,reinterpret_cast<OriginalType const &>(x)));
+ }
+ };
+
+ template <class OriginalType,class Scalar,int R,int C>
+ struct
+ deduce_mat<qvm_detail::matrix_scalar_cast_<OriginalType,Scalar>,R,C>
+ {
+ typedef mat<Scalar,R,C> type;
+ };
+
+ template <class Scalar,class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::matrix_scalar_cast_<T,Scalar> const &
+ scalar_cast( T const & x, typename qvm_detail::scalar_cast_matrix_filter<is_mat<T>::value>::type=0 )
+ {
+ return reinterpret_cast<qvm_detail::matrix_scalar_cast_<T,Scalar> const &>(x);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ div_eq_ms_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value && is_scalar<B>::value &&
+ !qvm_detail::div_eq_ms_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ mat_traits<A>::write_element_idx(i,j,a)/=b;
+ return a;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ div_ms_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_mat<A>::value && is_scalar<B>::value &&
+ !qvm_detail::div_ms_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ deduce_mat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ mat_traits<R>::write_element_idx(i,j,r)=mat_traits<A>::read_element_idx(i,j,a)/b;
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ eq_mm_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value && is_mat<B>::value &&
+ mat_traits<A>::rows==mat_traits<B>::rows &&
+ mat_traits<A>::cols==mat_traits<B>::cols &&
+ !qvm_detail::eq_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ if( mat_traits<A>::read_element_idx(i,j,a)!=mat_traits<B>::read_element_idx(i,j,b) )
+ return false;
+ return true;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ minus_eq_mm_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value && is_mat<B>::value &&
+ mat_traits<A>::rows==mat_traits<B>::rows &&
+ mat_traits<A>::cols==mat_traits<B>::cols &&
+ !qvm_detail::minus_eq_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ mat_traits<A>::write_element_idx(i,j,a)-=mat_traits<B>::read_element_idx(i,j,b);
+ return a;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ minus_m_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_mat<A>::value &&
+ !qvm_detail::minus_m_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ deduce_mat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ mat_traits<R>::write_element_idx(i,j,r)=-mat_traits<A>::read_element_idx(i,j,a);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ minus_mm_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_mat<A>::value && is_mat<B>::value &&
+ mat_traits<A>::rows==mat_traits<B>::rows &&
+ mat_traits<A>::cols==mat_traits<B>::cols &&
+ !qvm_detail::minus_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<A>::cols> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<A>::cols>::type R;
+ R r;
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ mat_traits<R>::write_element_idx(i,j,r)=mat_traits<A>::read_element_idx(i,j,a)-mat_traits<B>::read_element_idx(i,j,b);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ mul_eq_mm_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ is_mat<B>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows==mat_traits<B>::rows &&
+ mat_traits<A>::cols==mat_traits<B>::cols &&
+ !qvm_detail::mul_eq_mm_defined<mat_traits<A>::rows>::value,
+ A &>::type
+ operator*=( A & r, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ Ta a[mat_traits<A>::rows][mat_traits<A>::cols];
+ for( int i=0; i<mat_traits<A>::rows; ++i )
+ for( int j=0; j<mat_traits<B>::cols; ++j )
+ a[i][j]=mat_traits<A>::read_element_idx(i,j,r);
+ for( int i=0; i<mat_traits<A>::rows; ++i )
+ for( int j=0; j<mat_traits<B>::cols; ++j )
+ {
+ Ta x(scalar_traits<Ta>::value(0));
+ for( int k=0; k<mat_traits<A>::cols; ++k )
+ x += a[i][k]*mat_traits<B>::read_element_idx(k,j,b);
+ mat_traits<A>::write_element_idx(i,j,r) = x;
+ }
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ mul_eq_ms_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value && is_scalar<B>::value &&
+ !qvm_detail::mul_eq_ms_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ mat_traits<A>::write_element_idx(i,j,a)*=b;
+ return a;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int R,int CR,int C>
+ struct
+ mul_mm_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_mat<A>::value && is_mat<B>::value &&
+ mat_traits<A>::cols==mat_traits<B>::rows &&
+ !qvm_detail::mul_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols,mat_traits<B>::cols>::value,
+ deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<B>::cols> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<B>::cols>::type R;
+ R r;
+ for( int i=0; i<mat_traits<A>::rows; ++i )
+ for( int j=0; j<mat_traits<B>::cols; ++j )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ Ta x(scalar_traits<Ta>::value(0));
+ for( int k=0; k<mat_traits<A>::cols; ++k )
+ x += mat_traits<A>::read_element_idx(i,k,a)*mat_traits<B>::read_element_idx(k,j,b);
+ mat_traits<R>::write_element_idx(i,j,r) = x;
+ }
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ mul_ms_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_mat<A>::value && is_scalar<B>::value &&
+ !qvm_detail::mul_ms_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ deduce_mat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_mat<A>::type R;
+ R r;
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ mat_traits<R>::write_element_idx(i,j,r)=mat_traits<A>::read_element_idx(i,j,a)*b;
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ mul_sm_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && is_mat<B>::value &&
+ !qvm_detail::mul_sm_defined<mat_traits<B>::rows,mat_traits<B>::cols>::value,
+ deduce_mat<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_mat<B>::type R;
+ R r;
+ for( int i=0; i!=mat_traits<B>::rows; ++i )
+ for( int j=0; j!=mat_traits<B>::cols; ++j )
+ mat_traits<R>::write_element_idx(i,j,r)=a*mat_traits<B>::read_element_idx(i,j,b);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ neq_mm_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value && is_mat<B>::value &&
+ mat_traits<A>::rows==mat_traits<B>::rows &&
+ mat_traits<A>::cols==mat_traits<B>::cols &&
+ !qvm_detail::neq_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ if( mat_traits<A>::read_element_idx(i,j,a)!=mat_traits<B>::read_element_idx(i,j,b) )
+ return true;
+ return false;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ plus_eq_mm_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value && is_mat<B>::value &&
+ mat_traits<A>::rows==mat_traits<B>::rows &&
+ mat_traits<A>::cols==mat_traits<B>::cols &&
+ !qvm_detail::plus_eq_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ mat_traits<A>::write_element_idx(i,j,a)+=mat_traits<B>::read_element_idx(i,j,b);
+ return a;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ plus_mm_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_mat<A>::value && is_mat<B>::value &&
+ mat_traits<A>::rows==mat_traits<B>::rows &&
+ mat_traits<A>::cols==mat_traits<B>::cols &&
+ !qvm_detail::plus_mm_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<A>::cols> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_mat2<A,B,mat_traits<A>::rows,mat_traits<A>::cols>::type R;
+ R r;
+ for( int i=0; i!=mat_traits<A>::rows; ++i )
+ for( int j=0; j!=mat_traits<A>::cols; ++j )
+ mat_traits<R>::write_element_idx(i,j,r)=mat_traits<A>::read_element_idx(i,j,a)+mat_traits<B>::read_element_idx(i,j,b);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T>
+ class
+ mref_
+ {
+ mref_( mref_ const & );
+ mref_ & operator=( mref_ const & );
+ ~mref_();
+
+ public:
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ mref_ &
+ operator=( R const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class M>
+ struct
+ mat_traits< qvm_detail::mref_<M> >
+ {
+ typedef typename mat_traits<M>::scalar_type scalar_type;
+ typedef qvm_detail::mref_<M> this_matrix;
+ static int const rows=mat_traits<M>::rows;
+ static int const cols=mat_traits<M>::cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<M>::template read_element<Row,Col>(reinterpret_cast<M const &>(x));
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<cols);
+ return mat_traits<M>::template write_element<Row,Col>(reinterpret_cast<M &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<M>::read_element_idx(row,col,reinterpret_cast<M const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return mat_traits<M>::write_element_idx(row,col,reinterpret_cast<M &>(x));
+ }
+ };
+
+ template <class M,int R,int C>
+ struct
+ deduce_mat<qvm_detail::mref_<M>,R,C>
+ {
+ typedef mat<typename mat_traits<M>::scalar_type,R,C> type;
+ };
+
+ template <class M>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_mat<M>::value,
+ qvm_detail::mref_<M> const &>::type
+ mref( M const & a )
+ {
+ return reinterpret_cast<qvm_detail::mref_<M> const &>(a);
+ }
+
+ template <class M>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_mat<M>::value,
+ qvm_detail::mref_<M> &>::type
+ mref( M & a )
+ {
+ return reinterpret_cast<qvm_detail::mref_<M> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T,int Rows,int Cols>
+ class
+ zero_mat_
+ {
+ zero_mat_( zero_mat_ const & );
+ zero_mat_ & operator=( zero_mat_ const & );
+ ~zero_mat_();
+
+ public:
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class T,int Rows,int Cols>
+ struct
+ mat_traits< qvm_detail::zero_mat_<T,Rows,Cols> >
+ {
+ typedef qvm_detail::zero_mat_<T,Rows,Cols> this_matrix;
+ typedef T scalar_type;
+ static int const rows=Rows;
+ static int const cols=Cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<Rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<Cols);
+ return scalar_traits<scalar_type>::value(0);
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<cols);
+ return scalar_traits<scalar_type>::value(0);
+ }
+ };
+
+ template <class T,int Rows,int Cols,int R,int C>
+ struct
+ deduce_mat<qvm_detail::zero_mat_<T,Rows,Cols>,R,C>
+ {
+ typedef mat<T,R,C> type;
+ };
+
+ template <class T,int Rows,int Cols>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::zero_mat_<T,Rows,Cols> const &
+ zero_mat()
+ {
+ return *(qvm_detail::zero_mat_<T,Rows,Cols> const *)qvm_detail::get_valid_ptr_mat_operations();
+ }
+
+ template <class T,int Dim>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::zero_mat_<T,Dim,Dim> const &
+ zero_mat()
+ {
+ return *(qvm_detail::zero_mat_<T,Dim,Dim> const *)qvm_detail::get_valid_ptr_mat_operations();
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value,
+ void>::type
+ set_zero( A & a )
+ {
+ assign(a,zero_mat<typename mat_traits<A>::scalar_type,mat_traits<A>::rows,mat_traits<A>::cols>());
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D,class S>
+ struct
+ rot_mat_
+ {
+ typedef S scalar_type;
+ scalar_type a[3][3];
+
+ BOOST_QVM_INLINE
+ rot_mat_(
+ scalar_type a00, scalar_type a01, scalar_type a02,
+ scalar_type a10, scalar_type a11, scalar_type a12,
+ scalar_type a20, scalar_type a21, scalar_type a22 )
+ {
+ a[0][0] = a00;
+ a[0][1] = a01;
+ a[0][2] = a02;
+ a[1][0] = a10;
+ a[1][1] = a11;
+ a[1][2] = a12;
+ a[2][0] = a20;
+ a[2][1] = a21;
+ a[2][2] = a22;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <int Row,int Col>
+ struct
+ rot_m_get
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const (&)[3][3] )
+ {
+ return scalar_traits<T>::value(Row==Col);
+ }
+ };
+
+ template <> struct rot_m_get<0,0> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[0][0]; } };
+ template <> struct rot_m_get<0,1> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[0][1]; } };
+ template <> struct rot_m_get<0,2> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[0][2]; } };
+ template <> struct rot_m_get<1,0> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[1][0]; } };
+ template <> struct rot_m_get<1,1> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[1][1]; } };
+ template <> struct rot_m_get<1,2> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[1][2]; } };
+ template <> struct rot_m_get<2,0> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[2][0]; } };
+ template <> struct rot_m_get<2,1> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[2][1]; } };
+ template <> struct rot_m_get<2,2> { template <class T> static BOOST_QVM_INLINE_CRITICAL T get( T const (&a)[3][3] ) { return a[2][2]; } };
+ }
+
+ template <class M>
+ struct mat_traits;
+
+ template <int D,class S>
+ struct
+ mat_traits< qvm_detail::rot_mat_<D,S> >
+ {
+ typedef qvm_detail::rot_mat_<D,S> this_matrix;
+ typedef typename this_matrix::scalar_type scalar_type;
+ static int const rows=D;
+ static int const cols=D;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<D);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<D);
+ return qvm_detail::rot_m_get<Row,Col>::get(x.a);
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<D);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<D);
+ return row<3 && col<3?
+ x.a[row][col] :
+ scalar_traits<scalar_type>::value(row==col);
+ }
+ };
+
+ template <int Dim,class V,class Angle>
+ BOOST_QVM_INLINE
+ typename enable_if_c<
+ is_vec<V>::value && vec_traits<V>::dim==3,
+ qvm_detail::rot_mat_<Dim,Angle> >::type
+ rot_mat( V const & axis, Angle angle )
+ {
+ typedef Angle scalar_type;
+ scalar_type const x=vec_traits<V>::template read_element<0>(axis);
+ scalar_type const y=vec_traits<V>::template read_element<1>(axis);
+ scalar_type const z=vec_traits<V>::template read_element<2>(axis);
+ scalar_type const m2=x*x+y*y+z*z;
+ if( m2==scalar_traits<scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ scalar_type const s = sin<scalar_type>(angle);
+ scalar_type const c = cos<scalar_type>(angle);
+ scalar_type const x2 = x*x;
+ scalar_type const y2 = y*y;
+ scalar_type const z2 = z*z;
+ scalar_type const xy = x*y;
+ scalar_type const xz = x*z;
+ scalar_type const yz = y*z;
+ scalar_type const xs = x*s;
+ scalar_type const ys = y*s;
+ scalar_type const zs = z*s;
+ scalar_type const one = scalar_traits<scalar_type>::value(1);
+ scalar_type const c1 = one-c;
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ x2+(one-x2)*c, xy*c1-zs, xz*(one-c)+ys,
+ xy*c1+zs, y2+(one-y2)*c, yz*c1-xs,
+ xz*c1-ys, yz*c1+xs, z2+(one-z2)*c );
+ }
+
+ template <class A,class B,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3 &&
+ is_vec<B>::value && vec_traits<B>::dim==3,
+ void>::type
+ set_rot( A & a, B const & axis, Angle angle )
+ {
+ assign(a,rot_mat<mat_traits<A>::rows>(axis,angle));
+ }
+
+ template <class A,class B,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3 &&
+ is_vec<B>::value && vec_traits<B>::dim==3,
+ void>::type
+ rotate( A & a, B const & axis, Angle angle )
+ {
+ a *= rot_mat<mat_traits<A>::rows>(axis,angle);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_xzy( Angle x1, Angle z2, Angle y3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(x1);
+ scalar_type const s1 = sin<scalar_type>(x1);
+ scalar_type const c2 = cos<scalar_type>(z2);
+ scalar_type const s2 = sin<scalar_type>(z2);
+ scalar_type const c3 = cos<scalar_type>(y3);
+ scalar_type const s3 = sin<scalar_type>(y3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c2*c3, -s2, c2*s3,
+ s1*s3 + c1*c3*s2, c1*c2, c1*s2*s3 - c3*s1,
+ c3*s1*s2 - c1*s3, c2*s1, c1*c3 + s1*s2*s3 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_xzy( A & a, Angle x1, Angle z2, Angle y3 )
+ {
+ assign(a,rot_mat_xzy<mat_traits<A>::rows>(x1,z2,y3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_xzy( A & a, Angle x1, Angle z2, Angle y3 )
+ {
+ a *= rot_mat_xzy<mat_traits<A>::rows>(x1,z2,y3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_xyz( Angle x1, Angle y2, Angle z3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(x1);
+ scalar_type const s1 = sin<scalar_type>(x1);
+ scalar_type const c2 = cos<scalar_type>(y2);
+ scalar_type const s2 = sin<scalar_type>(y2);
+ scalar_type const c3 = cos<scalar_type>(z3);
+ scalar_type const s3 = sin<scalar_type>(z3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c2*c3, -c2*s3, s2,
+ c1*s3 + c3*s1*s2, c1*c3 - s1*s2*s3, -c2*s1,
+ s1*s3 - c1*c3*s2, c3*s1 + c1*s2*s3, c1*c2 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_xyz( A & a, Angle x1, Angle y2, Angle z3 )
+ {
+ assign(a,rot_mat_xyz<mat_traits<A>::rows>(x1,y2,z3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_xyz( A & a, Angle x1, Angle y2, Angle z3 )
+ {
+ a *= rot_mat_xyz<mat_traits<A>::rows>(x1,y2,z3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_yxz( Angle y1, Angle x2, Angle z3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(y1);
+ scalar_type const s1 = sin<scalar_type>(y1);
+ scalar_type const c2 = cos<scalar_type>(x2);
+ scalar_type const s2 = sin<scalar_type>(x2);
+ scalar_type const c3 = cos<scalar_type>(z3);
+ scalar_type const s3 = sin<scalar_type>(z3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c1*c3 + s1*s2*s3, c3*s1*s2 - c1*s3, c2*s1,
+ c2*s3, c2*c3, -s2,
+ c1*s2*s3 - c3*s1, c1*c3*s2 + s1*s3, c1*c2 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_yxz( A & a, Angle y1, Angle x2, Angle z3 )
+ {
+ assign(a,rot_mat_yxz<mat_traits<A>::rows>(y1,x2,z3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_yxz( A & a, Angle y1, Angle x2, Angle z3 )
+ {
+ a *= rot_mat_yxz<mat_traits<A>::rows>(y1,x2,z3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_yzx( Angle y1, Angle z2, Angle x3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(y1);
+ scalar_type const s1 = sin<scalar_type>(y1);
+ scalar_type const c2 = cos<scalar_type>(z2);
+ scalar_type const s2 = sin<scalar_type>(z2);
+ scalar_type const c3 = cos<scalar_type>(x3);
+ scalar_type const s3 = sin<scalar_type>(x3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c1*c2, s1*s3 - c1*c3*s2, c3*s1 + c1*s2*s3,
+ s2, c2*c3, -c2*s3,
+ -c2*s1, c1*s3 + c3*s1*s2, c1*c3 - s1*s2*s3 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_yzx( A & a, Angle y1, Angle z2, Angle x3 )
+ {
+ assign(a,rot_mat_yzx<mat_traits<A>::rows>(y1,z2,x3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_yzx( A & a, Angle y1, Angle z2, Angle x3 )
+ {
+ a *= rot_mat_yzx<mat_traits<A>::rows>(y1,z2,x3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_zyx( Angle z1, Angle y2, Angle x3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(z1);
+ scalar_type const s1 = sin<scalar_type>(z1);
+ scalar_type const c2 = cos<scalar_type>(y2);
+ scalar_type const s2 = sin<scalar_type>(y2);
+ scalar_type const c3 = cos<scalar_type>(x3);
+ scalar_type const s3 = sin<scalar_type>(x3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c1*c2, c1*s2*s3 - c3*s1, s1*s3 + c1*c3*s2,
+ c2*s1, c1*c3 + s1*s2*s3, c3*s1*s2 - c1*s3,
+ -s2, c2*s3, c2*c3 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_zyx( A & a, Angle z1, Angle y2, Angle x3 )
+ {
+ assign(a,rot_mat_zyx<mat_traits<A>::rows>(z1,y2,x3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_zyx( A & a, Angle z1, Angle y2, Angle x3 )
+ {
+ a *= rot_mat_zyx<mat_traits<A>::rows>(z1,y2,x3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_zxy( Angle z1, Angle x2, Angle y3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(z1);
+ scalar_type const s1 = sin<scalar_type>(z1);
+ scalar_type const c2 = cos<scalar_type>(x2);
+ scalar_type const s2 = sin<scalar_type>(x2);
+ scalar_type const c3 = cos<scalar_type>(y3);
+ scalar_type const s3 = sin<scalar_type>(y3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c1*c3 - s1*s2*s3, -c2*s1, c1*s3 + c3*s1*s2,
+ c3*s1 + c1*s2*s3, c1*c2, s1*s3 - c1*c3*s2,
+ -c2*s3, s2, c2*c3 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_zxy( A & a, Angle z1, Angle x2, Angle y3 )
+ {
+ assign(a,rot_mat_zxy<mat_traits<A>::rows>(z1,x2,y3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_zxy( A & a, Angle z1, Angle x2, Angle y3 )
+ {
+ a *= rot_mat_zxy<mat_traits<A>::rows>(z1,x2,y3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_xzx( Angle x1, Angle z2, Angle x3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(x1);
+ scalar_type const s1 = sin<scalar_type>(x1);
+ scalar_type const c2 = cos<scalar_type>(z2);
+ scalar_type const s2 = sin<scalar_type>(z2);
+ scalar_type const c3 = cos<scalar_type>(x3);
+ scalar_type const s3 = sin<scalar_type>(x3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c2, -c3*s2, s2*s3,
+ c1*s2, c1*c2*c3 - s1*s3, -c3*s1 - c1*c2*s3,
+ s1*s2, c1*s3 + c2*c3*s1, c1*c3 - c2*s1*s3 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_xzx( A & a, Angle x1, Angle z2, Angle x3 )
+ {
+ assign(a,rot_mat_xzx<mat_traits<A>::rows>(x1,z2,x3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_xzx( A & a, Angle x1, Angle z2, Angle x3 )
+ {
+ a *= rot_mat_xzx<mat_traits<A>::rows>(x1,z2,x3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_xyx( Angle x1, Angle y2, Angle x3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(x1);
+ scalar_type const s1 = sin<scalar_type>(x1);
+ scalar_type const c2 = cos<scalar_type>(y2);
+ scalar_type const s2 = sin<scalar_type>(y2);
+ scalar_type const c3 = cos<scalar_type>(x3);
+ scalar_type const s3 = sin<scalar_type>(x3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c2, s2*s3, c3*s2,
+ s1*s2, c1*c3 - c2*s1*s3, -c1*s3 - c2*c3*s1,
+ -c1*s2, c3*s1 + c1*c2*s3, c1*c2*c3 - s1*s3 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_xyx( A & a, Angle x1, Angle y2, Angle x3 )
+ {
+ assign(a,rot_mat_xyx<mat_traits<A>::rows>(x1,y2,x3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_xyx( A & a, Angle x1, Angle y2, Angle x3 )
+ {
+ a *= rot_mat_xyx<mat_traits<A>::rows>(x1,y2,x3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_yxy( Angle y1, Angle x2, Angle y3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(y1);
+ scalar_type const s1 = sin<scalar_type>(y1);
+ scalar_type const c2 = cos<scalar_type>(x2);
+ scalar_type const s2 = sin<scalar_type>(x2);
+ scalar_type const c3 = cos<scalar_type>(y3);
+ scalar_type const s3 = sin<scalar_type>(y3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c1*c3 - c2*s1*s3, s1*s2, c1*s3 + c2*c3*s1,
+ s2*s3, c2, -c3*s2,
+ -c3*s1 - c1*c2*s3, c1*s2, c1*c2*c3 - s1*s3 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_yxy( A & a, Angle y1, Angle x2, Angle y3 )
+ {
+ assign(a,rot_mat_yxy<mat_traits<A>::rows>(y1,x2,y3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_yxy( A & a, Angle y1, Angle x2, Angle y3 )
+ {
+ a *= rot_mat_yxy<mat_traits<A>::rows>(y1,x2,y3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_yzy( Angle y1, Angle z2, Angle y3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(y1);
+ scalar_type const s1 = sin<scalar_type>(y1);
+ scalar_type const c2 = cos<scalar_type>(z2);
+ scalar_type const s2 = sin<scalar_type>(z2);
+ scalar_type const c3 = cos<scalar_type>(y3);
+ scalar_type const s3 = sin<scalar_type>(y3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c1*c2*c3 - s1*s3, -c1*s2, c3*s1 + c1*c2*s3,
+ c3*s2, c2, s2*s3,
+ -c1*s3 - c2*c3*s1, s1*s2, c1*c3 - c2*s1*s3 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_yzy( A & a, Angle y1, Angle z2, Angle y3 )
+ {
+ assign(a,rot_mat_yzy<mat_traits<A>::rows>(y1,z2,y3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_yzy( A & a, Angle y1, Angle z2, Angle y3 )
+ {
+ a *= rot_mat_yzy<mat_traits<A>::rows>(y1,z2,y3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_zyz( Angle z1, Angle y2, Angle z3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(z1);
+ scalar_type const s1 = sin<scalar_type>(z1);
+ scalar_type const c2 = cos<scalar_type>(y2);
+ scalar_type const s2 = sin<scalar_type>(y2);
+ scalar_type const c3 = cos<scalar_type>(z3);
+ scalar_type const s3 = sin<scalar_type>(z3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c1*c2*c3 - s1*s3, -c3*s1 - c1*c2*s3, c1*s2,
+ c1*s3 + c2*c3*s1, c1*c3 - c2*s1*s3, s1*s2,
+ -c3*s2, s2*s3, c2 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_zyz( A & a, Angle z1, Angle y2, Angle z3 )
+ {
+ assign(a,rot_mat_zyz<mat_traits<A>::rows>(z1,y2,z3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_zyz( A & a, Angle z1, Angle y2, Angle z3 )
+ {
+ a *= rot_mat_zyz<mat_traits<A>::rows>(z1,y2,z3);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE
+ qvm_detail::rot_mat_<Dim,Angle>
+ rot_mat_zxz( Angle z1, Angle x2, Angle z3 )
+ {
+ typedef Angle scalar_type;
+ scalar_type const c1 = cos<scalar_type>(z1);
+ scalar_type const s1 = sin<scalar_type>(z1);
+ scalar_type const c2 = cos<scalar_type>(x2);
+ scalar_type const s2 = sin<scalar_type>(x2);
+ scalar_type const c3 = cos<scalar_type>(z3);
+ scalar_type const s3 = sin<scalar_type>(z3);
+ return qvm_detail::rot_mat_<Dim,Angle>(
+ c1*c3 - c2*s1*s3, -c1*s3 - c2*c3*s1, s1*s2,
+ c3*s1 + c1*c2*s3, c1*c2*c3 - s1*s3, -c1*s2,
+ s2*s3, c3*s2, c2 );
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ set_rot_zxz( A & a, Angle z1, Angle x2, Angle z3 )
+ {
+ assign(a,rot_mat_zxz<mat_traits<A>::rows>(z1,x2,z3));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ mat_traits<A>::rows>=3,
+ void>::type
+ rotate_zxz( A & a, Angle z1, Angle x2, Angle z3 )
+ {
+ a *= rot_mat_zxz<mat_traits<A>::rows>(z1,x2,z3);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Dim,class Angle>
+ struct
+ rotx_mat_
+ {
+ BOOST_QVM_INLINE_TRIVIAL
+ rotx_mat_()
+ {
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+
+ private:
+
+ rotx_mat_( rotx_mat_ const & );
+ rotx_mat_ & operator=( rotx_mat_ const & );
+ ~rotx_mat_();
+ };
+
+ template <int Row,int Col>
+ struct
+ rotx_m_get
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & )
+ {
+ return scalar_traits<T>::value(Row==Col);
+ }
+ };
+
+ template <>
+ struct
+ rotx_m_get<1,1>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return cos<T>(angle);
+ }
+ };
+
+ template <>
+ struct
+ rotx_m_get<1,2>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return -sin<T>(angle);
+ }
+ };
+
+ template <>
+ struct
+ rotx_m_get<2,1>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return sin<T>(angle);
+ }
+ };
+
+ template <>
+ struct
+ rotx_m_get<2,2>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return cos<T>(angle);
+ }
+ };
+ }
+
+ template <int Dim,class Angle>
+ struct
+ mat_traits< qvm_detail::rotx_mat_<Dim,Angle> >
+ {
+ typedef qvm_detail::rotx_mat_<Dim,Angle> this_matrix;
+ typedef Angle scalar_type;
+ static int const rows=Dim;
+ static int const cols=Dim;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<Dim);
+ BOOST_QVM_STATIC_ASSERT(Col<Dim);
+ return qvm_detail::rotx_m_get<Row,Col>::get(reinterpret_cast<Angle const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(row<Dim);
+ BOOST_QVM_ASSERT(col<Dim);
+ Angle const & a=reinterpret_cast<Angle const &>(x);
+ if( row==1 )
+ {
+ if( col==1 )
+ return cos<scalar_type>(a);
+ if( col==2 )
+ return -sin<scalar_type>(a);
+ }
+ if( row==2 )
+ {
+ if( col==1 )
+ return sin<scalar_type>(a);
+ if( col==2 )
+ return cos<scalar_type>(a);
+ }
+ return scalar_traits<scalar_type>::value(row==col);
+ }
+ };
+
+ template <int Dim,class Angle>
+ struct
+ deduce_mat<qvm_detail::rotx_mat_<Dim,Angle>,Dim,Dim>
+ {
+ typedef mat<Angle,Dim,Dim> type;
+ };
+
+ template <int Dim,class Angle>
+ struct
+ deduce_mat2<qvm_detail::rotx_mat_<Dim,Angle>,qvm_detail::rotx_mat_<Dim,Angle>,Dim,Dim>
+ {
+ typedef mat<Angle,Dim,Dim> type;
+ };
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::rotx_mat_<Dim,Angle> const &
+ rotx_mat( Angle const & angle )
+ {
+ BOOST_QVM_STATIC_ASSERT(Dim>=3);
+ return reinterpret_cast<qvm_detail::rotx_mat_<Dim,Angle> const &>(angle);
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows>=3 &&
+ mat_traits<A>::rows==mat_traits<A>::cols,
+ void>::type
+ set_rotx( A & a, Angle angle )
+ {
+ assign(a,rotx_mat<mat_traits<A>::rows>(angle));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows>=3 &&
+ mat_traits<A>::rows==mat_traits<A>::cols,
+ void>::type
+ rotate_x( A & a, Angle angle )
+ {
+ a *= rotx_mat<mat_traits<A>::rows>(angle);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Dim,class Angle>
+ struct
+ roty_mat_
+ {
+ BOOST_QVM_INLINE_TRIVIAL
+ roty_mat_()
+ {
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+
+ private:
+
+ roty_mat_( roty_mat_ const & );
+ roty_mat_ & operator=( roty_mat_ const & );
+ ~roty_mat_();
+ };
+
+ template <int Row,int Col>
+ struct
+ roty_m_get
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & )
+ {
+ return scalar_traits<T>::value(Row==Col);
+ }
+ };
+
+ template <>
+ struct
+ roty_m_get<0,0>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return cos<T>(angle);
+ }
+ };
+
+ template <>
+ struct
+ roty_m_get<0,2>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return sin<T>(angle);
+ }
+ };
+
+ template <>
+ struct
+ roty_m_get<2,0>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return -sin<T>(angle);
+ }
+ };
+
+ template <>
+ struct
+ roty_m_get<2,2>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return cos<T>(angle);
+ }
+ };
+ }
+
+ template <int Dim,class Angle>
+ struct
+ mat_traits< qvm_detail::roty_mat_<Dim,Angle> >
+ {
+ typedef qvm_detail::roty_mat_<Dim,Angle> this_matrix;
+ typedef Angle scalar_type;
+ static int const rows=Dim;
+ static int const cols=Dim;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<Dim);
+ BOOST_QVM_STATIC_ASSERT(Col<Dim);
+ return qvm_detail::roty_m_get<Row,Col>::get(reinterpret_cast<Angle const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(row<Dim);
+ BOOST_QVM_ASSERT(col<Dim);
+ Angle const & a=reinterpret_cast<Angle const &>(x);
+ if( row==0 )
+ {
+ if( col==0 )
+ return cos<scalar_type>(a);
+ if( col==2 )
+ return sin<scalar_type>(a);
+ }
+ if( row==2 )
+ {
+ if( col==0 )
+ return -sin<scalar_type>(a);
+ if( col==2 )
+ return cos<scalar_type>(a);
+ }
+ return scalar_traits<scalar_type>::value(row==col);
+ }
+ };
+
+ template <int Dim,class Angle>
+ struct
+ deduce_mat<qvm_detail::roty_mat_<Dim,Angle>,Dim,Dim>
+ {
+ typedef mat<Angle,Dim,Dim> type;
+ };
+
+ template <int Dim,class Angle>
+ struct
+ deduce_mat2<qvm_detail::roty_mat_<Dim,Angle>,qvm_detail::roty_mat_<Dim,Angle>,Dim,Dim>
+ {
+ typedef mat<Angle,Dim,Dim> type;
+ };
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::roty_mat_<Dim,Angle> const &
+ roty_mat( Angle const & angle )
+ {
+ BOOST_QVM_STATIC_ASSERT(Dim>=3);
+ return reinterpret_cast<qvm_detail::roty_mat_<Dim,Angle> const &>(angle);
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows>=2 &&
+ mat_traits<A>::rows==mat_traits<A>::cols,
+ void>::type
+ set_roty( A & a, Angle angle )
+ {
+ assign(a,roty_mat<mat_traits<A>::rows>(angle));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows>=3 &&
+ mat_traits<A>::rows==mat_traits<A>::cols,
+ void>::type
+ rotate_y( A & a, Angle angle )
+ {
+ a *= roty_mat<mat_traits<A>::rows>(angle);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int Dim,class Angle>
+ struct
+ rotz_mat_
+ {
+ BOOST_QVM_INLINE_TRIVIAL
+ rotz_mat_()
+ {
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+
+ private:
+
+ rotz_mat_( rotz_mat_ const & );
+ rotz_mat_ & operator=( rotz_mat_ const & );
+ ~rotz_mat_();
+ };
+
+ template <int Row,int Col>
+ struct
+ rotz_m_get
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & )
+ {
+ return scalar_traits<T>::value(Row==Col);
+ }
+ };
+
+ template <>
+ struct
+ rotz_m_get<0,0>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return cos<T>(angle);
+ }
+ };
+
+ template <>
+ struct
+ rotz_m_get<0,1>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return -sin<T>(angle);
+ }
+ };
+
+ template <>
+ struct
+ rotz_m_get<1,0>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return sin<T>(angle);
+ }
+ };
+
+ template <>
+ struct
+ rotz_m_get<1,1>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return cos<T>(angle);
+ }
+ };
+ }
+
+ template <int Dim,class Angle>
+ struct
+ mat_traits< qvm_detail::rotz_mat_<Dim,Angle> >
+ {
+ typedef qvm_detail::rotz_mat_<Dim,Angle> this_matrix;
+ typedef Angle scalar_type;
+ static int const rows=Dim;
+ static int const cols=Dim;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<Dim);
+ BOOST_QVM_STATIC_ASSERT(Col<Dim);
+ return qvm_detail::rotz_m_get<Row,Col>::get(reinterpret_cast<Angle const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(row<Dim);
+ BOOST_QVM_ASSERT(col<Dim);
+ Angle const & a=reinterpret_cast<Angle const &>(x);
+ if( row==0 )
+ {
+ if( col==0 )
+ return cos<scalar_type>(a);
+ if( col==1 )
+ return -sin<scalar_type>(a);
+ }
+ if( row==1 )
+ {
+ if( col==0 )
+ return sin<scalar_type>(a);
+ if( col==1 )
+ return cos<scalar_type>(a);
+ }
+ return scalar_traits<scalar_type>::value(row==col);
+ }
+ };
+
+ template <int Dim,class Angle>
+ struct
+ deduce_mat<qvm_detail::rotz_mat_<Dim,Angle>,Dim,Dim>
+ {
+ typedef mat<Angle,Dim,Dim> type;
+ };
+
+ template <int Dim,class Angle,int R,int C>
+ struct
+ deduce_mat2<qvm_detail::rotz_mat_<Dim,Angle>,qvm_detail::rotz_mat_<Dim,Angle>,R,C>
+ {
+ typedef mat<Angle,R,C> type;
+ };
+
+ template <int Dim,class Angle>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::rotz_mat_<Dim,Angle> const &
+ rotz_mat( Angle const & angle )
+ {
+ BOOST_QVM_STATIC_ASSERT(Dim>=2);
+ return reinterpret_cast<qvm_detail::rotz_mat_<Dim,Angle> const &>(angle);
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows>=2 &&
+ mat_traits<A>::rows==mat_traits<A>::cols,
+ void>::type
+ set_rotz( A & a, Angle angle )
+ {
+ assign(a,rotz_mat<mat_traits<A>::rows>(angle));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows>=2 &&
+ mat_traits<A>::rows==mat_traits<A>::cols,
+ void>::type
+ rotate_z( A & a, Angle angle )
+ {
+ a *= rotz_mat<mat_traits<A>::rows>(angle);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ inverse_m_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename lazy_enable_if_c<
+ is_mat<A>::value && is_scalar<B>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ !qvm_detail::inverse_m_defined<mat_traits<A>::rows>::value,
+ deduce_mat<A> >::type
+ inverse( A const & a, B det )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ BOOST_QVM_ASSERT(det!=scalar_traits<T>::value(0));
+ T f=scalar_traits<T>::value(1)/det;
+ typedef typename deduce_mat<A>::type cofactor_return_type;
+ cofactor_return_type c=qvm_detail::cofactor_impl(a);
+ return reinterpret_cast<qvm_detail::transposed_<cofactor_return_type> const &>(c) * f;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename lazy_enable_if_c<
+ is_mat<A>::value &&
+ mat_traits<A>::rows==mat_traits<A>::cols &&
+ !qvm_detail::inverse_m_defined<mat_traits<A>::rows>::value,
+ deduce_mat<A> >::type
+ inverse( A const & a )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ T det=determinant(a);
+ if( det==scalar_traits<T>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_determinant_error());
+ return inverse(a,det);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::to_string;
+ using ::boost::qvm::assign;
+ using ::boost::qvm::determinant;
+ using ::boost::qvm::cmp;
+ using ::boost::qvm::convert_to;
+ using ::boost::qvm::set_identity;
+ using ::boost::qvm::set_zero;
+ using ::boost::qvm::scalar_cast;
+ using ::boost::qvm::operator/=;
+ using ::boost::qvm::operator/;
+ using ::boost::qvm::operator==;
+ using ::boost::qvm::operator-=;
+ using ::boost::qvm::operator-;
+ using ::boost::qvm::operator*=;
+ using ::boost::qvm::operator*;
+ using ::boost::qvm::operator!=;
+ using ::boost::qvm::operator+=;
+ using ::boost::qvm::operator+;
+ using ::boost::qvm::mref;
+ using ::boost::qvm::rot_mat;
+ using ::boost::qvm::set_rot;
+ using ::boost::qvm::rotate;
+ using ::boost::qvm::set_rotx;
+ using ::boost::qvm::rotate_x;
+ using ::boost::qvm::set_roty;
+ using ::boost::qvm::rotate_y;
+ using ::boost::qvm::set_rotz;
+ using ::boost::qvm::rotate_z;
+ using ::boost::qvm::inverse;
+ }
+
+ ////////////////////////////////////////////////
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/mat_operations2.hpp b/contrib/restricted/boost/boost/qvm/mat_operations2.hpp
index cdbaca00e0..b390780173 100644
--- a/contrib/restricted/boost/boost/qvm/mat_operations2.hpp
+++ b/contrib/restricted/boost/boost/qvm/mat_operations2.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/mat_operations2.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/mat_operations2.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/mat_operations3.hpp b/contrib/restricted/boost/boost/qvm/mat_operations3.hpp
index a68485839c..4c76d0753c 100644
--- a/contrib/restricted/boost/boost/qvm/mat_operations3.hpp
+++ b/contrib/restricted/boost/boost/qvm/mat_operations3.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/mat_operations3.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/mat_operations3.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/mat_operations4.hpp b/contrib/restricted/boost/boost/qvm/mat_operations4.hpp
index b0aca0932c..ab0835adf7 100644
--- a/contrib/restricted/boost/boost/qvm/mat_operations4.hpp
+++ b/contrib/restricted/boost/boost/qvm/mat_operations4.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/mat_operations4.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/mat_operations4.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/mat_traits.hpp b/contrib/restricted/boost/boost/qvm/mat_traits.hpp
index a84fb4de78..9937443979 100644
--- a/contrib/restricted/boost/boost/qvm/mat_traits.hpp
+++ b/contrib/restricted/boost/boost/qvm/mat_traits.hpp
@@ -1,33 +1,33 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_8C06FE26A3E711DEA02C88BA55D89593
-#define UUID_8C06FE26A3E711DEA02C88BA55D89593
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class M>
- struct
- mat_traits
- {
- static int const rows=0;
- static int const cols=0;
- typedef void scalar_type;
- };
-
- template <class T>
- struct
- is_mat
- {
- static bool const value=mat_traits<T>::rows>0 && mat_traits<T>::cols>0;
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_8C06FE26A3E711DEA02C88BA55D89593
+#define UUID_8C06FE26A3E711DEA02C88BA55D89593
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class M>
+ struct
+ mat_traits
+ {
+ static int const rows=0;
+ static int const cols=0;
+ typedef void scalar_type;
+ };
+
+ template <class T>
+ struct
+ is_mat
+ {
+ static bool const value=mat_traits<T>::rows>0 && mat_traits<T>::cols>0;
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/mat_traits_array.hpp b/contrib/restricted/boost/boost/qvm/mat_traits_array.hpp
index dadc83c44c..160ead7d61 100644
--- a/contrib/restricted/boost/boost/qvm/mat_traits_array.hpp
+++ b/contrib/restricted/boost/boost/qvm/mat_traits_array.hpp
@@ -1,118 +1,118 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_FA3ED0DCA17911DEA6BBA09955D89593
-#define UUID_FA3ED0DCA17911DEA6BBA09955D89593
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/deduce_mat.hpp>
-#include <boost/qvm/detail/remove_const.hpp>
-#include <boost/qvm/assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class T,int R,int CR,int C>
- struct
- mat_traits<T[R][CR][C]>
- {
- static int const rows=0;
- static int const cols=0;
- typedef void scalar_type;
- };
-
- template <class T,int Rows,int Cols>
- struct
- mat_traits<T[Rows][Cols]>
- {
- typedef T this_matrix[Rows][Cols];
- typedef typename qvm_detail::remove_const<T>::type scalar_type;
- static int const rows=Rows;
- static int const cols=Cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_matrix const & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<Rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<Cols);
- return x[Row][Col];
- }
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_matrix & x )
- {
- BOOST_QVM_STATIC_ASSERT(Row>=0);
- BOOST_QVM_STATIC_ASSERT(Row<Rows);
- BOOST_QVM_STATIC_ASSERT(Col>=0);
- BOOST_QVM_STATIC_ASSERT(Col<Cols);
- return x[Row][Col];
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int row, int col, this_matrix const & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<Rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<Cols);
- return x[row][col];
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int row, int col, this_matrix & x )
- {
- BOOST_QVM_ASSERT(row>=0);
- BOOST_QVM_ASSERT(row<Rows);
- BOOST_QVM_ASSERT(col>=0);
- BOOST_QVM_ASSERT(col<Cols);
- return x[row][col];
- }
- };
-
- template <class T,int Rows,int Cols,int R,int C>
- struct
- deduce_mat<T[Rows][Cols],R,C>
- {
- typedef mat<T,R,C> type;
- };
-
- template <class T,int Rows,int Cols,int R,int C>
- struct
- deduce_mat<T const[Rows][Cols],R,C>
- {
- typedef mat<T,R,C> type;
- };
-
- template <class T1,class T2,int Rows,int Cols,int R,int C>
- struct
- deduce_mat2<T1[Rows][Cols],T2[Rows][Cols],R,C>
- {
- typedef mat<typename deduce_scalar<T1,T2>::type,R,C> type;
- };
-
- template <int Rows,int Cols,class T>
- T (&ptr_mref( T * ptr ))[Rows][Cols]
- {
- return *reinterpret_cast<T (*)[Rows][Cols]>(ptr);
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_FA3ED0DCA17911DEA6BBA09955D89593
+#define UUID_FA3ED0DCA17911DEA6BBA09955D89593
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/deduce_mat.hpp>
+#include <boost/qvm/detail/remove_const.hpp>
+#include <boost/qvm/assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class T,int R,int CR,int C>
+ struct
+ mat_traits<T[R][CR][C]>
+ {
+ static int const rows=0;
+ static int const cols=0;
+ typedef void scalar_type;
+ };
+
+ template <class T,int Rows,int Cols>
+ struct
+ mat_traits<T[Rows][Cols]>
+ {
+ typedef T this_matrix[Rows][Cols];
+ typedef typename qvm_detail::remove_const<T>::type scalar_type;
+ static int const rows=Rows;
+ static int const cols=Cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_matrix const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<Rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<Cols);
+ return x[Row][Col];
+ }
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_matrix & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(Row>=0);
+ BOOST_QVM_STATIC_ASSERT(Row<Rows);
+ BOOST_QVM_STATIC_ASSERT(Col>=0);
+ BOOST_QVM_STATIC_ASSERT(Col<Cols);
+ return x[Row][Col];
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int row, int col, this_matrix const & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<Rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<Cols);
+ return x[row][col];
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int row, int col, this_matrix & x )
+ {
+ BOOST_QVM_ASSERT(row>=0);
+ BOOST_QVM_ASSERT(row<Rows);
+ BOOST_QVM_ASSERT(col>=0);
+ BOOST_QVM_ASSERT(col<Cols);
+ return x[row][col];
+ }
+ };
+
+ template <class T,int Rows,int Cols,int R,int C>
+ struct
+ deduce_mat<T[Rows][Cols],R,C>
+ {
+ typedef mat<T,R,C> type;
+ };
+
+ template <class T,int Rows,int Cols,int R,int C>
+ struct
+ deduce_mat<T const[Rows][Cols],R,C>
+ {
+ typedef mat<T,R,C> type;
+ };
+
+ template <class T1,class T2,int Rows,int Cols,int R,int C>
+ struct
+ deduce_mat2<T1[Rows][Cols],T2[Rows][Cols],R,C>
+ {
+ typedef mat<typename deduce_scalar<T1,T2>::type,R,C> type;
+ };
+
+ template <int Rows,int Cols,class T>
+ T (&ptr_mref( T * ptr ))[Rows][Cols]
+ {
+ return *reinterpret_cast<T (*)[Rows][Cols]>(ptr);
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/mat_traits_defaults.hpp b/contrib/restricted/boost/boost/qvm/mat_traits_defaults.hpp
index aeda2e9d7b..898e79064a 100644
--- a/contrib/restricted/boost/boost/qvm/mat_traits_defaults.hpp
+++ b/contrib/restricted/boost/boost/qvm/mat_traits_defaults.hpp
@@ -1,95 +1,95 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_FB4D5BEAC71B11E68D0EEF1707624D53
-#define UUID_FB4D5BEAC71B11E68D0EEF1707624D53
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class>
- struct mat_traits;
-
- namespace
- qvm_detail
- {
- template <int I,int N>
- struct
- matrix_w
- {
- template <class A>
- static
- BOOST_QVM_INLINE_CRITICAL
- typename mat_traits<A>::scalar_type &
- write_element_idx( int r, int c, A & a )
- {
- return (I/mat_traits<A>::cols)==r && (I%mat_traits<A>::cols)==c?
- mat_traits<A>::template write_element<I/mat_traits<A>::cols,I%mat_traits<A>::cols>(a) :
- matrix_w<I+1,N>::write_element_idx(r,c,a);
- }
- };
-
- template <int N>
- struct
- matrix_w<N,N>
- {
- template <class A>
- static
- BOOST_QVM_INLINE_TRIVIAL
- typename mat_traits<A>::scalar_type &
- write_element_idx( int, int, A & a )
- {
- BOOST_QVM_ASSERT(0);
- return mat_traits<A>::template write_element<0,0>(a);
- }
- };
- }
-
- template <class MatType,class ScalarType,int Rows,int Cols>
- struct
- mat_traits_defaults
- {
- typedef MatType mat_type;
- typedef ScalarType scalar_type;
- static int const rows=Rows;
- static int const cols=Cols;
-
- template <int Row,int Col>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( mat_type const & x )
- {
- return mat_traits<mat_type>::template write_element<Row,Col>(const_cast<mat_type &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int r, int c, mat_type const & x )
- {
- return mat_traits<mat_type>::write_element_idx(r,c,const_cast<mat_type &>(x));
- }
-
- protected:
-
- static
- BOOST_QVM_INLINE_TRIVIAL
- scalar_type &
- write_element_idx( int r, int c, mat_type & m )
- {
- return qvm_detail::matrix_w<0,mat_traits<mat_type>::rows*mat_traits<mat_type>::cols>::write_element_idx(r,c,m);
- }
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_FB4D5BEAC71B11E68D0EEF1707624D53
+#define UUID_FB4D5BEAC71B11E68D0EEF1707624D53
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class>
+ struct mat_traits;
+
+ namespace
+ qvm_detail
+ {
+ template <int I,int N>
+ struct
+ matrix_w
+ {
+ template <class A>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ typename mat_traits<A>::scalar_type &
+ write_element_idx( int r, int c, A & a )
+ {
+ return (I/mat_traits<A>::cols)==r && (I%mat_traits<A>::cols)==c?
+ mat_traits<A>::template write_element<I/mat_traits<A>::cols,I%mat_traits<A>::cols>(a) :
+ matrix_w<I+1,N>::write_element_idx(r,c,a);
+ }
+ };
+
+ template <int N>
+ struct
+ matrix_w<N,N>
+ {
+ template <class A>
+ static
+ BOOST_QVM_INLINE_TRIVIAL
+ typename mat_traits<A>::scalar_type &
+ write_element_idx( int, int, A & a )
+ {
+ BOOST_QVM_ASSERT(0);
+ return mat_traits<A>::template write_element<0,0>(a);
+ }
+ };
+ }
+
+ template <class MatType,class ScalarType,int Rows,int Cols>
+ struct
+ mat_traits_defaults
+ {
+ typedef MatType mat_type;
+ typedef ScalarType scalar_type;
+ static int const rows=Rows;
+ static int const cols=Cols;
+
+ template <int Row,int Col>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( mat_type const & x )
+ {
+ return mat_traits<mat_type>::template write_element<Row,Col>(const_cast<mat_type &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int r, int c, mat_type const & x )
+ {
+ return mat_traits<mat_type>::write_element_idx(r,c,const_cast<mat_type &>(x));
+ }
+
+ protected:
+
+ static
+ BOOST_QVM_INLINE_TRIVIAL
+ scalar_type &
+ write_element_idx( int r, int c, mat_type & m )
+ {
+ return qvm_detail::matrix_w<0,mat_traits<mat_type>::rows*mat_traits<mat_type>::cols>::write_element_idx(r,c,m);
+ }
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/math.hpp b/contrib/restricted/boost/boost/qvm/math.hpp
index 1f8d57037e..26ab3f4c86 100644
--- a/contrib/restricted/boost/boost/qvm/math.hpp
+++ b/contrib/restricted/boost/boost/qvm/math.hpp
@@ -1,87 +1,87 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_5FD6A664ACC811DEAAFF8A8055D89593
-#define UUID_5FD6A664ACC811DEAAFF8A8055D89593
-
-#include <math.h>
-#include <boost/qvm/inline.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class T> T acos( T );
- template <class T> T asin( T );
- template <class T> T atan( T );
- template <class T> T atan2( T, T );
- template <class T> T cos( T );
- template <class T> T sin( T );
- template <class T> T tan( T );
- template <class T> T cosh( T );
- template <class T> T sinh( T );
- template <class T> T tanh( T );
- template <class T> T exp( T );
- template <class T> T log( T );
- template <class T> T log10( T );
- template <class T> T mod( T , T );
- template <class T> T pow( T, T );
- template <class T> T sqrt( T );
- template <class T> T ceil( T );
- template <class T> T abs( T );
- template <class T> T floor( T );
- template <class T> T mod( T, T );
- template <class T> T ldexp( T, int );
- template <class T> T sign( T );
-
- template <> BOOST_QVM_INLINE_TRIVIAL float acos<float>( float x ) { return ::acosf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float asin<float>( float x ) { return ::asinf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float atan<float>( float x ) { return ::atanf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float atan2<float>( float x, float y ) { return ::atan2f(x,y); }
- template <> BOOST_QVM_INLINE_TRIVIAL float cos<float>( float x ) { return ::cosf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float sin<float>( float x ) { return ::sinf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float tan<float>( float x ) { return ::tanf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float cosh<float>( float x ) { return ::coshf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float sinh<float>( float x ) { return ::sinhf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float tanh<float>( float x ) { return ::tanhf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float exp<float>( float x ) { return ::expf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float log<float>( float x ) { return ::logf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float log10<float>( float x ) { return ::log10f(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float mod<float>( float x, float y ) { return ::fmodf(x,y); }
- template <> BOOST_QVM_INLINE_TRIVIAL float pow<float>( float x, float y ) { return ::powf(x,y); }
- template <> BOOST_QVM_INLINE_TRIVIAL float sqrt<float>( float x ) { return ::sqrtf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float ceil<float>( float x ) { return ::ceilf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float abs<float>( float x ) { return ::fabsf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float floor<float>( float x ) { return ::floorf(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL float ldexp<float>( float x, int y ) { return ::ldexpf(x,y); }
- template <> BOOST_QVM_INLINE_TRIVIAL float sign<float>( float x ) { return x<0 ? -1.f : +1.f; }
-
- template <> BOOST_QVM_INLINE_TRIVIAL double acos<double>( double x ) { return ::acos(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double asin<double>( double x ) { return ::asin(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double atan<double>( double x ) { return ::atan(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double atan2<double>( double x, double y ) { return ::atan2(x,y); }
- template <> BOOST_QVM_INLINE_TRIVIAL double cos<double>( double x ) { return ::cos(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double sin<double>( double x ) { return ::sin(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double tan<double>( double x ) { return ::tan(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double cosh<double>( double x ) { return ::cosh(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double sinh<double>( double x ) { return ::sinh(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double tanh<double>( double x ) { return ::tanh(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double exp<double>( double x ) { return ::exp(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double log<double>( double x ) { return ::log(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double log10<double>( double x ) { return ::log10(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double mod<double>( double x, double y ) { return ::fmod(x,y); }
- template <> BOOST_QVM_INLINE_TRIVIAL double pow<double>( double x, double y ) { return ::pow(x,y); }
- template <> BOOST_QVM_INLINE_TRIVIAL double sqrt<double>( double x ) { return ::sqrt(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double ceil<double>( double x ) { return ::ceil(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double abs<double>( double x ) { return ::fabs(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double floor<double>( double x ) { return ::floor(x); }
- template <> BOOST_QVM_INLINE_TRIVIAL double ldexp<double>( double x, int y ) { return ::ldexp(x,y); }
- template <> BOOST_QVM_INLINE_TRIVIAL double sign<double>( double x ) { return x<0 ? -1.0 : +1.0; }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_5FD6A664ACC811DEAAFF8A8055D89593
+#define UUID_5FD6A664ACC811DEAAFF8A8055D89593
+
+#include <math.h>
+#include <boost/qvm/inline.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class T> T acos( T );
+ template <class T> T asin( T );
+ template <class T> T atan( T );
+ template <class T> T atan2( T, T );
+ template <class T> T cos( T );
+ template <class T> T sin( T );
+ template <class T> T tan( T );
+ template <class T> T cosh( T );
+ template <class T> T sinh( T );
+ template <class T> T tanh( T );
+ template <class T> T exp( T );
+ template <class T> T log( T );
+ template <class T> T log10( T );
+ template <class T> T mod( T , T );
+ template <class T> T pow( T, T );
+ template <class T> T sqrt( T );
+ template <class T> T ceil( T );
+ template <class T> T abs( T );
+ template <class T> T floor( T );
+ template <class T> T mod( T, T );
+ template <class T> T ldexp( T, int );
+ template <class T> T sign( T );
+
+ template <> BOOST_QVM_INLINE_TRIVIAL float acos<float>( float x ) { return ::acosf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float asin<float>( float x ) { return ::asinf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float atan<float>( float x ) { return ::atanf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float atan2<float>( float x, float y ) { return ::atan2f(x,y); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float cos<float>( float x ) { return ::cosf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float sin<float>( float x ) { return ::sinf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float tan<float>( float x ) { return ::tanf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float cosh<float>( float x ) { return ::coshf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float sinh<float>( float x ) { return ::sinhf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float tanh<float>( float x ) { return ::tanhf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float exp<float>( float x ) { return ::expf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float log<float>( float x ) { return ::logf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float log10<float>( float x ) { return ::log10f(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float mod<float>( float x, float y ) { return ::fmodf(x,y); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float pow<float>( float x, float y ) { return ::powf(x,y); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float sqrt<float>( float x ) { return ::sqrtf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float ceil<float>( float x ) { return ::ceilf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float abs<float>( float x ) { return ::fabsf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float floor<float>( float x ) { return ::floorf(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float ldexp<float>( float x, int y ) { return ::ldexpf(x,y); }
+ template <> BOOST_QVM_INLINE_TRIVIAL float sign<float>( float x ) { return x<0 ? -1.f : +1.f; }
+
+ template <> BOOST_QVM_INLINE_TRIVIAL double acos<double>( double x ) { return ::acos(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double asin<double>( double x ) { return ::asin(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double atan<double>( double x ) { return ::atan(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double atan2<double>( double x, double y ) { return ::atan2(x,y); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double cos<double>( double x ) { return ::cos(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double sin<double>( double x ) { return ::sin(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double tan<double>( double x ) { return ::tan(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double cosh<double>( double x ) { return ::cosh(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double sinh<double>( double x ) { return ::sinh(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double tanh<double>( double x ) { return ::tanh(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double exp<double>( double x ) { return ::exp(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double log<double>( double x ) { return ::log(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double log10<double>( double x ) { return ::log10(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double mod<double>( double x, double y ) { return ::fmod(x,y); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double pow<double>( double x, double y ) { return ::pow(x,y); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double sqrt<double>( double x ) { return ::sqrt(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double ceil<double>( double x ) { return ::ceil(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double abs<double>( double x ) { return ::fabs(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double floor<double>( double x ) { return ::floor(x); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double ldexp<double>( double x, int y ) { return ::ldexp(x,y); }
+ template <> BOOST_QVM_INLINE_TRIVIAL double sign<double>( double x ) { return x<0 ? -1.0 : +1.0; }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/operations.hpp b/contrib/restricted/boost/boost/qvm/operations.hpp
index 42d6ab9116..a82ddf8e84 100644
--- a/contrib/restricted/boost/boost/qvm/operations.hpp
+++ b/contrib/restricted/boost/boost/qvm/operations.hpp
@@ -1,15 +1,15 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_0B9D9FB6B95D11DEA8E0305E55D89593
-#define UUID_0B9D9FB6B95D11DEA8E0305E55D89593
-
-#include <boost/qvm/quat_operations.hpp>
-#include <boost/qvm/vec_operations.hpp>
-#include <boost/qvm/mat_operations.hpp>
-#include <boost/qvm/quat_vec_operations.hpp>
-#include <boost/qvm/vec_mat_operations.hpp>
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_0B9D9FB6B95D11DEA8E0305E55D89593
+#define UUID_0B9D9FB6B95D11DEA8E0305E55D89593
+
+#include <boost/qvm/quat_operations.hpp>
+#include <boost/qvm/vec_operations.hpp>
+#include <boost/qvm/mat_operations.hpp>
+#include <boost/qvm/quat_vec_operations.hpp>
+#include <boost/qvm/vec_mat_operations.hpp>
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/quat.hpp b/contrib/restricted/boost/boost/qvm/quat.hpp
index c0fbbd768a..cd078ee091 100644
--- a/contrib/restricted/boost/boost/qvm/quat.hpp
+++ b/contrib/restricted/boost/boost/qvm/quat.hpp
@@ -1,68 +1,68 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_49C5A1042AEF11DF9603880056D89593
-#define UUID_49C5A1042AEF11DF9603880056D89593
-
-#include <boost/qvm/detail/quat_assign.hpp>
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/static_assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class T>
- struct
- quat
- {
- T a[4];
- template <class R>
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <class Q>
- struct quat_traits;
-
- template <class T>
- struct
- quat_traits< quat<T> >
- {
- typedef quat<T> this_quaternion;
- typedef T scalar_type;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_quaternion const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return x.a[I];
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_quaternion & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return x.a[I];
- }
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_49C5A1042AEF11DF9603880056D89593
+#define UUID_49C5A1042AEF11DF9603880056D89593
+
+#include <boost/qvm/detail/quat_assign.hpp>
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/static_assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class T>
+ struct
+ quat
+ {
+ T a[4];
+ template <class R>
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <class Q>
+ struct quat_traits;
+
+ template <class T>
+ struct
+ quat_traits< quat<T> >
+ {
+ typedef quat<T> this_quaternion;
+ typedef T scalar_type;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_quaternion const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return x.a[I];
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_quaternion & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return x.a[I];
+ }
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/quat_access.hpp b/contrib/restricted/boost/boost/qvm/quat_access.hpp
index 774b057070..fe69b29cb1 100644
--- a/contrib/restricted/boost/boost/qvm/quat_access.hpp
+++ b/contrib/restricted/boost/boost/qvm/quat_access.hpp
@@ -1,128 +1,128 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_8AC84A2217C411E0A7AF3A1BDFD72085
-#define UUID_8AC84A2217C411E0A7AF3A1BDFD72085
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/quat_traits.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/static_assert.hpp>
-#include <boost/qvm/enable_if.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class Q>
- struct
- quat_v_
- {
- template <class R>
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
-
- private:
-
- quat_v_( quat_v_ const & );
- quat_v_ const & operator=( quat_v_ const & );
- ~quat_v_();
- };
- }
-
- template <class V>
- struct vec_traits;
-
- template <class Q>
- struct
- vec_traits< qvm_detail::quat_v_<Q> >
- {
- typedef qvm_detail::quat_v_<Q> this_vector;
- typedef typename quat_traits<Q>::scalar_type scalar_type;
- static int const dim=3;
-
- template <int I>
- BOOST_QVM_INLINE_CRITICAL
- static
- scalar_type
- read_element( this_vector const & q )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return quat_traits<Q>::template read_element<I+1>( reinterpret_cast<Q const &>(q) );
- }
-
- template <int I>
- BOOST_QVM_INLINE_CRITICAL
- static
- scalar_type &
- write_element( this_vector & q )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return quat_traits<Q>::template write_element<I+1>( reinterpret_cast<Q &>(q) );
- }
- };
-
- template <class Q,int D>
- struct
- deduce_vec<qvm_detail::quat_v_<Q>,D>
- {
- typedef vec<typename quat_traits<Q>::scalar_type,D> type;
- };
-
- template <class Q,int D>
- struct
- deduce_vec2<qvm_detail::quat_v_<Q>,qvm_detail::quat_v_<Q>,D>
- {
- typedef vec<typename quat_traits<Q>::scalar_type,D> type;
- };
-
- template <class Q>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_quat<Q>::value,
- qvm_detail::quat_v_<Q> const &>::type
- V( Q const & a )
- {
- return reinterpret_cast<qvm_detail::quat_v_<Q> const &>(a);
- }
-
- template <class Q>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_quat<Q>::value,
- qvm_detail::quat_v_<Q> &>::type
- V( Q & a )
- {
- return reinterpret_cast<qvm_detail::quat_v_<Q> &>(a);
- }
-
- template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type>::type S( Q const & a ) { return quat_traits<Q>::template read_element<0>(a); }
- template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type>::type X( Q const & a ) { return quat_traits<Q>::template read_element<1>(a); }
- template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type>::type Y( Q const & a ) { return quat_traits<Q>::template read_element<2>(a); }
- template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type>::type Z( Q const & a ) { return quat_traits<Q>::template read_element<3>(a); }
-
- template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type &>::type S( Q & a ) { return quat_traits<Q>::template write_element<0>(a); }
- template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type &>::type X( Q & a ) { return quat_traits<Q>::template write_element<1>(a); }
- template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type &>::type Y( Q & a ) { return quat_traits<Q>::template write_element<2>(a); }
- template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type &>::type Z( Q & a ) { return quat_traits<Q>::template write_element<3>(a); }
-
- ////////////////////////////////////////////////
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_8AC84A2217C411E0A7AF3A1BDFD72085
+#define UUID_8AC84A2217C411E0A7AF3A1BDFD72085
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/quat_traits.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/static_assert.hpp>
+#include <boost/qvm/enable_if.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class Q>
+ struct
+ quat_v_
+ {
+ template <class R>
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+
+ private:
+
+ quat_v_( quat_v_ const & );
+ quat_v_ const & operator=( quat_v_ const & );
+ ~quat_v_();
+ };
+ }
+
+ template <class V>
+ struct vec_traits;
+
+ template <class Q>
+ struct
+ vec_traits< qvm_detail::quat_v_<Q> >
+ {
+ typedef qvm_detail::quat_v_<Q> this_vector;
+ typedef typename quat_traits<Q>::scalar_type scalar_type;
+ static int const dim=3;
+
+ template <int I>
+ BOOST_QVM_INLINE_CRITICAL
+ static
+ scalar_type
+ read_element( this_vector const & q )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return quat_traits<Q>::template read_element<I+1>( reinterpret_cast<Q const &>(q) );
+ }
+
+ template <int I>
+ BOOST_QVM_INLINE_CRITICAL
+ static
+ scalar_type &
+ write_element( this_vector & q )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return quat_traits<Q>::template write_element<I+1>( reinterpret_cast<Q &>(q) );
+ }
+ };
+
+ template <class Q,int D>
+ struct
+ deduce_vec<qvm_detail::quat_v_<Q>,D>
+ {
+ typedef vec<typename quat_traits<Q>::scalar_type,D> type;
+ };
+
+ template <class Q,int D>
+ struct
+ deduce_vec2<qvm_detail::quat_v_<Q>,qvm_detail::quat_v_<Q>,D>
+ {
+ typedef vec<typename quat_traits<Q>::scalar_type,D> type;
+ };
+
+ template <class Q>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_quat<Q>::value,
+ qvm_detail::quat_v_<Q> const &>::type
+ V( Q const & a )
+ {
+ return reinterpret_cast<qvm_detail::quat_v_<Q> const &>(a);
+ }
+
+ template <class Q>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_quat<Q>::value,
+ qvm_detail::quat_v_<Q> &>::type
+ V( Q & a )
+ {
+ return reinterpret_cast<qvm_detail::quat_v_<Q> &>(a);
+ }
+
+ template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type>::type S( Q const & a ) { return quat_traits<Q>::template read_element<0>(a); }
+ template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type>::type X( Q const & a ) { return quat_traits<Q>::template read_element<1>(a); }
+ template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type>::type Y( Q const & a ) { return quat_traits<Q>::template read_element<2>(a); }
+ template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type>::type Z( Q const & a ) { return quat_traits<Q>::template read_element<3>(a); }
+
+ template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type &>::type S( Q & a ) { return quat_traits<Q>::template write_element<0>(a); }
+ template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type &>::type X( Q & a ) { return quat_traits<Q>::template write_element<1>(a); }
+ template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type &>::type Y( Q & a ) { return quat_traits<Q>::template write_element<2>(a); }
+ template <class Q> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_quat<Q>::value,typename quat_traits<Q>::scalar_type &>::type Z( Q & a ) { return quat_traits<Q>::template write_element<3>(a); }
+
+ ////////////////////////////////////////////////
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/quat_operations.hpp b/contrib/restricted/boost/boost/qvm/quat_operations.hpp
index 1a4fdbf249..aad0331fc6 100644
--- a/contrib/restricted/boost/boost/qvm/quat_operations.hpp
+++ b/contrib/restricted/boost/boost/qvm/quat_operations.hpp
@@ -1,1493 +1,1493 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_E6519754D19211DFB8405F74DFD72085
-#define UUID_E6519754D19211DFB8405F74DFD72085
-
-#include <boost/qvm/detail/quat_assign.hpp>
-#include <boost/qvm/deduce_quat.hpp>
-#include <boost/qvm/mat_traits.hpp>
-#include <boost/qvm/scalar_traits.hpp>
-#include <boost/qvm/math.hpp>
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/error.hpp>
-#include <boost/qvm/throw_exception.hpp>
-#include <string>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_detail
- {
- BOOST_QVM_INLINE_CRITICAL
- void const *
- get_valid_ptr_quat_operations()
- {
- static int const obj=0;
- return &obj;
- }
- }
-
- ////////////////////////////////////////////////
-
- namespace
- msvc_parse_bug_workaround
- {
- template <class A,class B>
- struct
- quats
- {
- static bool const value=is_quat<A>::value && is_quat<B>::value;
- };
- }
-
- namespace
- qvm_to_string_detail
- {
- template <class T>
- std::string to_string( T const & x );
- }
-
- template <class A>
- inline
- typename boost::enable_if_c<
- is_quat<A>::value,
- std::string>::type
- to_string( A const & a )
- {
- using namespace qvm_to_string_detail;
- return '('+
- to_string(quat_traits<A>::template read_element<0>(a))+','+
- to_string(quat_traits<A>::template read_element<1>(a))+','+
- to_string(quat_traits<A>::template read_element<2>(a))+','+
- to_string(quat_traits<A>::template read_element<3>(a))+')';
- }
-
- ////////////////////////////////////////////////
-
- template <class A,class B,class Cmp>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value && is_quat<B>::value,
- bool>::type
- cmp( A const & a, B const & b, Cmp f )
- {
- typedef typename deduce_scalar<
- typename quat_traits<A>::scalar_type,
- typename quat_traits<B>::scalar_type>::type T;
- T q1[4] =
- {
- quat_traits<A>::template read_element<0>(a),
- quat_traits<A>::template read_element<1>(a),
- quat_traits<A>::template read_element<2>(a),
- quat_traits<A>::template read_element<3>(a)
- };
- T q2[4] =
- {
- quat_traits<B>::template read_element<0>(b),
- quat_traits<B>::template read_element<1>(b),
- quat_traits<B>::template read_element<2>(b),
- quat_traits<B>::template read_element<3>(b)
- };
- int i;
- for( i=0; i!=4; ++i )
- if( !f(q1[i],q2[i]) )
- break;
- if( i==4 )
- return true;
- for( i=0; i!=4; ++i )
- if( !f(q1[i],-q2[i]) )
- return false;
- return true;
- }
-
- ////////////////////////////////////////////////
-
- template <class R,class A>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_quat<R>::value && is_quat<A>::value,
- R>::type
- convert_to( A const & a )
- {
- R r;
- quat_traits<R>::template write_element<0>(r) = quat_traits<A>::template read_element<0>(a);
- quat_traits<R>::template write_element<1>(r) = quat_traits<A>::template read_element<1>(a);
- quat_traits<R>::template write_element<2>(r) = quat_traits<A>::template read_element<2>(a);
- quat_traits<R>::template write_element<3>(r) = quat_traits<A>::template read_element<3>(a);
- return r;
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<R>::value && is_mat<A>::value &&
- mat_traits<A>::rows==3 && mat_traits<A>::cols==3,
- R>::type
- convert_to( A const & a )
- {
- typedef typename mat_traits<A>::scalar_type T;
- T const mat[3][3] =
- {
- { mat_traits<A>::template read_element<0,0>(a), mat_traits<A>::template read_element<0,1>(a), mat_traits<A>::template read_element<0,2>(a) },
- { mat_traits<A>::template read_element<1,0>(a), mat_traits<A>::template read_element<1,1>(a), mat_traits<A>::template read_element<1,2>(a) },
- { mat_traits<A>::template read_element<2,0>(a), mat_traits<A>::template read_element<2,1>(a), mat_traits<A>::template read_element<2,2>(a) }
- };
- R r;
- if( mat[0][0]+mat[1][1]+mat[2][2] > scalar_traits<T>::value(0) )
- {
- T t = mat[0][0] + mat[1][1] + mat[2][2] + scalar_traits<T>::value(1);
- T s = (scalar_traits<T>::value(1)/sqrt<T>(t))/2;
- quat_traits<R>::template write_element<0>(r)=s*t;
- quat_traits<R>::template write_element<1>(r)=(mat[2][1]-mat[1][2])*s;
- quat_traits<R>::template write_element<2>(r)=(mat[0][2]-mat[2][0])*s;
- quat_traits<R>::template write_element<3>(r)=(mat[1][0]-mat[0][1])*s;
- }
- else if( mat[0][0]>mat[1][1] && mat[0][0]>mat[2][2] )
- {
- T t = mat[0][0] - mat[1][1] - mat[2][2] + scalar_traits<T>::value(1);
- T s = (scalar_traits<T>::value(1)/sqrt<T>(t))/2;
- quat_traits<R>::template write_element<0>(r)=(mat[2][1]-mat[1][2])*s;
- quat_traits<R>::template write_element<1>(r)=s*t;
- quat_traits<R>::template write_element<2>(r)=(mat[1][0]+mat[0][1])*s;
- quat_traits<R>::template write_element<3>(r)=(mat[0][2]+mat[2][0])*s;
- }
- else if( mat[1][1]>mat[2][2] )
- {
- T t = - mat[0][0] + mat[1][1] - mat[2][2] + scalar_traits<T>::value(1);
- T s = (scalar_traits<T>::value(1)/sqrt<T>(t))/2;
- quat_traits<R>::template write_element<0>(r)=(mat[0][2]-mat[2][0])*s;
- quat_traits<R>::template write_element<1>(r)=(mat[1][0]+mat[0][1])*s;
- quat_traits<R>::template write_element<2>(r)=s*t;
- quat_traits<R>::template write_element<3>(r)=(mat[2][1]+mat[1][2])*s;
- }
- else
- {
- T t = - mat[0][0] - mat[1][1] + mat[2][2] + scalar_traits<T>::value(1);
- T s = (scalar_traits<T>::value(1)/sqrt<T>(t))/2;
- quat_traits<R>::template write_element<0>(r)=(mat[1][0]-mat[0][1])*s;
- quat_traits<R>::template write_element<1>(r)=(mat[0][2]+mat[2][0])*s;
- quat_traits<R>::template write_element<2>(r)=(mat[2][1]+mat[1][2])*s;
- quat_traits<R>::template write_element<3>(r)=s*t;
- }
- return r;
- }
-
- ////////////////////////////////////////////////
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value,
- deduce_quat<A> >::type
- conjugate( A const & a )
- {
- typedef typename deduce_quat<A>::type R;
- R r;
- quat_traits<R>::template write_element<0>(r)=quat_traits<A>::template read_element<0>(a);
- quat_traits<R>::template write_element<1>(r)=-quat_traits<A>::template read_element<1>(a);
- quat_traits<R>::template write_element<2>(r)=-quat_traits<A>::template read_element<2>(a);
- quat_traits<R>::template write_element<3>(r)=-quat_traits<A>::template read_element<3>(a);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T>
- class
- identity_quat_
- {
- identity_quat_( identity_quat_ const & );
- identity_quat_ & operator=( identity_quat_ const & );
- ~identity_quat_();
-
- public:
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class T>
- struct
- quat_traits< qvm_detail::identity_quat_<T> >
- {
- typedef qvm_detail::identity_quat_<T> this_quaternion;
- typedef T scalar_type;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_quaternion const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return scalar_traits<T>::value(I==0);
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_quaternion const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<4);
- return scalar_traits<T>::value(i==0);
- }
- };
-
- template <class T>
- struct
- deduce_quat< qvm_detail::identity_quat_<T> >
- {
- typedef quat<T> type;
- };
-
- template <class T>
- struct
- deduce_quat2< qvm_detail::identity_quat_<T>, qvm_detail::identity_quat_<T> >
- {
- typedef quat<T> type;
- };
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::identity_quat_<T> const &
- identity_quat()
- {
- return *(qvm_detail::identity_quat_<T> const *)qvm_detail::get_valid_ptr_quat_operations();
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- void>::type
- set_identity( A & a )
- {
- typedef typename quat_traits<A>::scalar_type T;
- T const zero=scalar_traits<T>::value(0);
- T const one=scalar_traits<T>::value(1);
- quat_traits<A>::template write_element<0>(a) = one;
- quat_traits<A>::template write_element<1>(a) = zero;
- quat_traits<A>::template write_element<2>(a) = zero;
- quat_traits<A>::template write_element<3>(a) = zero;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class OriginalType,class Scalar>
- class
- quaternion_scalar_cast_
- {
- quaternion_scalar_cast_( quaternion_scalar_cast_ const & );
- quaternion_scalar_cast_ & operator=( quaternion_scalar_cast_ const & );
- ~quaternion_scalar_cast_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- quaternion_scalar_cast_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <bool> struct scalar_cast_quaternion_filter { };
- template <> struct scalar_cast_quaternion_filter<true> { typedef int type; };
- }
-
- template <class OriginalType,class Scalar>
- struct
- quat_traits< qvm_detail::quaternion_scalar_cast_<OriginalType,Scalar> >
- {
- typedef Scalar scalar_type;
- typedef qvm_detail::quaternion_scalar_cast_<OriginalType,Scalar> this_quaternion;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_quaternion const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return scalar_type(quat_traits<OriginalType>::template read_element<I>(reinterpret_cast<OriginalType const &>(x)));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_quaternion const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<4);
- return scalar_type(quat_traits<OriginalType>::read_element_idx(i,reinterpret_cast<OriginalType const &>(x)));
- }
- };
-
- template <class Scalar,class T>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::quaternion_scalar_cast_<T,Scalar> const &
- scalar_cast( T const & x, typename qvm_detail::scalar_cast_quaternion_filter<is_quat<T>::value>::type=0 )
- {
- return reinterpret_cast<qvm_detail::quaternion_scalar_cast_<T,Scalar> const &>(x);
- }
-
- ////////////////////////////////////////////////
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value && is_scalar<B>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- quat_traits<A>::template write_element<0>(a)/=b;
- quat_traits<A>::template write_element<1>(a)/=b;
- quat_traits<A>::template write_element<2>(a)/=b;
- quat_traits<A>::template write_element<3>(a)/=b;
- return a;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value && is_scalar<B>::value,
- deduce_quat<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_quat<A>::type R;
- R r;
- quat_traits<R>::template write_element<0>(r) = quat_traits<A>::template read_element<0>(a)/b;
- quat_traits<R>::template write_element<1>(r) = quat_traits<A>::template read_element<1>(a)/b;
- quat_traits<R>::template write_element<2>(r) = quat_traits<A>::template read_element<2>(a)/b;
- quat_traits<R>::template write_element<3>(r) = quat_traits<A>::template read_element<3>(a)/b;
- return r;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value && is_quat<B>::value,
- deduce_scalar<typename quat_traits<A>::scalar_type,typename quat_traits<B>::scalar_type> >::type
- dot( A const & a, B const & b )
- {
- typedef typename quat_traits<A>::scalar_type Ta;
- typedef typename quat_traits<B>::scalar_type Tb;
- typedef typename deduce_scalar<Ta,Tb>::type Tr;
- Ta const a0=quat_traits<A>::template read_element<0>(a);
- Ta const a1=quat_traits<A>::template read_element<1>(a);
- Ta const a2=quat_traits<A>::template read_element<2>(a);
- Ta const a3=quat_traits<A>::template read_element<3>(a);
- Tb const b0=quat_traits<B>::template read_element<0>(b);
- Tb const b1=quat_traits<B>::template read_element<1>(b);
- Tb const b2=quat_traits<B>::template read_element<2>(b);
- Tb const b3=quat_traits<B>::template read_element<3>(b);
- Tr const dp=a0*b0+a1*b1+a2*b2+a3*b3;
- return dp;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value && is_quat<B>::value,
- bool>::type
- operator==( A const & a, B const & b )
- {
- return
- quat_traits<A>::template read_element<0>(a)==quat_traits<B>::template read_element<0>(b) &&
- quat_traits<A>::template read_element<1>(a)==quat_traits<B>::template read_element<1>(b) &&
- quat_traits<A>::template read_element<2>(a)==quat_traits<B>::template read_element<2>(b) &&
- quat_traits<A>::template read_element<3>(a)==quat_traits<B>::template read_element<3>(b);
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value,
- deduce_quat<A> >::type
- inverse( A const & a )
- {
- typedef typename deduce_quat<A>::type R;
- typedef typename quat_traits<A>::scalar_type TA;
- TA aa = quat_traits<A>::template read_element<0>(a);
- TA ab = quat_traits<A>::template read_element<1>(a);
- TA ac = quat_traits<A>::template read_element<2>(a);
- TA ad = quat_traits<A>::template read_element<3>(a);
- TA m2 = ab*ab + ac*ac + ad*ad + aa*aa;
- if( m2==scalar_traits<TA>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- TA rm=scalar_traits<TA>::value(1)/m2;
- R r;
- quat_traits<R>::template write_element<0>(r) = aa*rm;
- quat_traits<R>::template write_element<1>(r) = -ab*rm;
- quat_traits<R>::template write_element<2>(r) = -ac*rm;
- quat_traits<R>::template write_element<3>(r) = -ad*rm;
- return r;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- typename quat_traits<A>::scalar_type>::type
- mag_sqr( A const & a )
- {
- typedef typename quat_traits<A>::scalar_type T;
- T x=quat_traits<A>::template read_element<0>(a);
- T y=quat_traits<A>::template read_element<1>(a);
- T z=quat_traits<A>::template read_element<2>(a);
- T w=quat_traits<A>::template read_element<3>(a);
- return x*x+y*y+z*z+w*w;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- typename quat_traits<A>::scalar_type>::type
- mag( A const & a )
- {
- typedef typename quat_traits<A>::scalar_type T;
- T x=quat_traits<A>::template read_element<0>(a);
- T y=quat_traits<A>::template read_element<1>(a);
- T z=quat_traits<A>::template read_element<2>(a);
- T w=quat_traits<A>::template read_element<3>(a);
- return sqrt<T>(x*x+y*y+z*z+w*w);
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if<
- msvc_parse_bug_workaround::quats<A,B>,
- A &>::type
- operator-=( A & a, B const & b )
- {
- quat_traits<A>::template write_element<0>(a)-=quat_traits<B>::template read_element<0>(b);
- quat_traits<A>::template write_element<1>(a)-=quat_traits<B>::template read_element<1>(b);
- quat_traits<A>::template write_element<2>(a)-=quat_traits<B>::template read_element<2>(b);
- quat_traits<A>::template write_element<3>(a)-=quat_traits<B>::template read_element<3>(b);
- return a;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value && is_quat<B>::value,
- deduce_quat2<A,B> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_quat2<A,B>::type R;
- R r;
- quat_traits<R>::template write_element<0>(r)=quat_traits<A>::template read_element<0>(a)-quat_traits<B>::template read_element<0>(b);
- quat_traits<R>::template write_element<1>(r)=quat_traits<A>::template read_element<1>(a)-quat_traits<B>::template read_element<1>(b);
- quat_traits<R>::template write_element<2>(r)=quat_traits<A>::template read_element<2>(a)-quat_traits<B>::template read_element<2>(b);
- quat_traits<R>::template write_element<3>(r)=quat_traits<A>::template read_element<3>(a)-quat_traits<B>::template read_element<3>(b);
- return r;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value,
- deduce_quat<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_quat<A>::type R;
- R r;
- quat_traits<R>::template write_element<0>(r)=-quat_traits<A>::template read_element<0>(a);
- quat_traits<R>::template write_element<1>(r)=-quat_traits<A>::template read_element<1>(a);
- quat_traits<R>::template write_element<2>(r)=-quat_traits<A>::template read_element<2>(a);
- quat_traits<R>::template write_element<3>(r)=-quat_traits<A>::template read_element<3>(a);
- return r;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if<
- msvc_parse_bug_workaround::quats<A,B>,
- A &>::type
- operator*=( A & a, B const & b )
- {
- typedef typename quat_traits<A>::scalar_type TA;
- typedef typename quat_traits<B>::scalar_type TB;
- TA const aa=quat_traits<A>::template read_element<0>(a);
- TA const ab=quat_traits<A>::template read_element<1>(a);
- TA const ac=quat_traits<A>::template read_element<2>(a);
- TA const ad=quat_traits<A>::template read_element<3>(a);
- TB const ba=quat_traits<B>::template read_element<0>(b);
- TB const bb=quat_traits<B>::template read_element<1>(b);
- TB const bc=quat_traits<B>::template read_element<2>(b);
- TB const bd=quat_traits<B>::template read_element<3>(b);
- quat_traits<A>::template write_element<0>(a) = aa*ba - ab*bb - ac*bc - ad*bd;
- quat_traits<A>::template write_element<1>(a) = aa*bb + ab*ba + ac*bd - ad*bc;
- quat_traits<A>::template write_element<2>(a) = aa*bc + ac*ba + ad*bb - ab*bd;
- quat_traits<A>::template write_element<3>(a) = aa*bd + ad*ba + ab*bc - ac*bb;
- return a;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value && is_scalar<B>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- quat_traits<A>::template write_element<0>(a)*=b;
- quat_traits<A>::template write_element<1>(a)*=b;
- quat_traits<A>::template write_element<2>(a)*=b;
- quat_traits<A>::template write_element<3>(a)*=b;
- return a;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value && is_quat<B>::value,
- deduce_quat2<A,B> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename deduce_quat2<A,B>::type R;
- typedef typename quat_traits<A>::scalar_type TA;
- typedef typename quat_traits<B>::scalar_type TB;
- TA const aa=quat_traits<A>::template read_element<0>(a);
- TA const ab=quat_traits<A>::template read_element<1>(a);
- TA const ac=quat_traits<A>::template read_element<2>(a);
- TA const ad=quat_traits<A>::template read_element<3>(a);
- TB const ba=quat_traits<B>::template read_element<0>(b);
- TB const bb=quat_traits<B>::template read_element<1>(b);
- TB const bc=quat_traits<B>::template read_element<2>(b);
- TB const bd=quat_traits<B>::template read_element<3>(b);
- R r;
- quat_traits<R>::template write_element<0>(r) = aa*ba - ab*bb - ac*bc - ad*bd;
- quat_traits<R>::template write_element<1>(r) = aa*bb + ab*ba + ac*bd - ad*bc;
- quat_traits<R>::template write_element<2>(r) = aa*bc + ac*ba + ad*bb - ab*bd;
- quat_traits<R>::template write_element<3>(r) = aa*bd + ad*ba + ab*bc - ac*bb;
- return r;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value && is_scalar<B>::value,
- deduce_quat<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_quat<A>::type R;
- R r;
- quat_traits<R>::template write_element<0>(r)=quat_traits<A>::template read_element<0>(a)*b;
- quat_traits<R>::template write_element<1>(r)=quat_traits<A>::template read_element<1>(a)*b;
- quat_traits<R>::template write_element<2>(r)=quat_traits<A>::template read_element<2>(a)*b;
- quat_traits<R>::template write_element<3>(r)=quat_traits<A>::template read_element<3>(a)*b;
- return r;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value && is_quat<B>::value,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- return
- quat_traits<A>::template read_element<0>(a)!=quat_traits<B>::template read_element<0>(b) ||
- quat_traits<A>::template read_element<1>(a)!=quat_traits<B>::template read_element<1>(b) ||
- quat_traits<A>::template read_element<2>(a)!=quat_traits<B>::template read_element<2>(b) ||
- quat_traits<A>::template read_element<3>(a)!=quat_traits<B>::template read_element<3>(b);
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value,
- deduce_quat<A> >::type
- normalized( A const & a )
- {
- typedef typename quat_traits<A>::scalar_type T;
- T const a0=quat_traits<A>::template read_element<0>(a);
- T const a1=quat_traits<A>::template read_element<1>(a);
- T const a2=quat_traits<A>::template read_element<2>(a);
- T const a3=quat_traits<A>::template read_element<3>(a);
- T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
- if( m2==scalar_traits<typename quat_traits<A>::scalar_type>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
- typedef typename deduce_quat<A>::type R;
- R r;
- quat_traits<R>::template write_element<0>(r)=a0*rm;
- quat_traits<R>::template write_element<1>(r)=a1*rm;
- quat_traits<R>::template write_element<2>(r)=a2*rm;
- quat_traits<R>::template write_element<3>(r)=a3*rm;
- return r;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- void>::type
- normalize( A & a )
- {
- typedef typename quat_traits<A>::scalar_type T;
- T const a0=quat_traits<A>::template read_element<0>(a);
- T const a1=quat_traits<A>::template read_element<1>(a);
- T const a2=quat_traits<A>::template read_element<2>(a);
- T const a3=quat_traits<A>::template read_element<3>(a);
- T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
- if( m2==scalar_traits<typename quat_traits<A>::scalar_type>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
- quat_traits<A>::template write_element<0>(a)*=rm;
- quat_traits<A>::template write_element<1>(a)*=rm;
- quat_traits<A>::template write_element<2>(a)*=rm;
- quat_traits<A>::template write_element<3>(a)*=rm;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if<
- msvc_parse_bug_workaround::quats<A,B>,
- A &>::type
- operator+=( A & a, B const & b )
- {
- quat_traits<A>::template write_element<0>(a)+=quat_traits<B>::template read_element<0>(b);
- quat_traits<A>::template write_element<1>(a)+=quat_traits<B>::template read_element<1>(b);
- quat_traits<A>::template write_element<2>(a)+=quat_traits<B>::template read_element<2>(b);
- quat_traits<A>::template write_element<3>(a)+=quat_traits<B>::template read_element<3>(b);
- return a;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value && is_quat<B>::value,
- deduce_quat2<A,B> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_quat2<A,B>::type R;
- R r;
- quat_traits<R>::template write_element<0>(r)=quat_traits<A>::template read_element<0>(a)+quat_traits<B>::template read_element<0>(b);
- quat_traits<R>::template write_element<1>(r)=quat_traits<A>::template read_element<1>(a)+quat_traits<B>::template read_element<1>(b);
- quat_traits<R>::template write_element<2>(r)=quat_traits<A>::template read_element<2>(a)+quat_traits<B>::template read_element<2>(b);
- quat_traits<R>::template write_element<3>(r)=quat_traits<A>::template read_element<3>(a)+quat_traits<B>::template read_element<3>(b);
- return r;
- }
-
- template <class A,class B,class C>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value && is_quat<B>::value && is_scalar<C>::value,
- deduce_quat2<A,B> >::type
- slerp( A const & a, B const & b, C t )
- {
- typedef typename deduce_quat2<A,B>::type R;
- typedef typename quat_traits<R>::scalar_type TR;
- TR const one = scalar_traits<TR>::value(1);
- TR dp = dot(a,b);
- TR sc=one;
- if( dp < one )
- {
- TR const theta = acosf(dp);
- TR const invsintheta = one/sin<TR>(theta);
- TR const scale = sin<TR>(theta*(one-t)) * invsintheta;
- TR const invscale = sin<TR>(theta*t) * invsintheta * sc;
- return a*scale + b*invscale;
- }
- else
- return normalized(a+(b-a)*t);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T>
- class
- qref_
- {
- qref_( qref_ const & );
- qref_ & operator=( qref_ const & );
- ~qref_();
-
- public:
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- qref_ &
- operator=( R const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class Q>
- struct quat_traits;
-
- template <class Q>
- struct
- quat_traits< qvm_detail::qref_<Q> >
- {
- typedef typename quat_traits<Q>::scalar_type scalar_type;
- typedef qvm_detail::qref_<Q> this_quaternion;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_quaternion const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return quat_traits<Q>::template read_element<I>(reinterpret_cast<Q const &>(x));
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_quaternion & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return quat_traits<Q>::template write_element<I>(reinterpret_cast<Q &>(x));
- }
- };
-
- template <class Q>
- struct
- deduce_quat< qvm_detail::qref_<Q> >
- {
- typedef quat<typename quat_traits<Q>::scalar_type> type;
- };
-
- template <class Q>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_quat<Q>::value,
- qvm_detail::qref_<Q> const &>::type
- qref( Q const & a )
- {
- return reinterpret_cast<qvm_detail::qref_<Q> const &>(a);
- }
-
- template <class Q>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_quat<Q>::value,
- qvm_detail::qref_<Q> &>::type
- qref( Q & a )
- {
- return reinterpret_cast<qvm_detail::qref_<Q> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T>
- class
- zero_q_
- {
- zero_q_( zero_q_ const & );
- zero_q_ & operator=( zero_q_ const & );
- ~zero_q_();
-
- public:
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class T>
- struct
- quat_traits< qvm_detail::zero_q_<T> >
- {
- typedef qvm_detail::zero_q_<T> this_quaternion;
- typedef T scalar_type;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_quaternion const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return scalar_traits<scalar_type>::value(0);
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_quaternion const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<4);
- return scalar_traits<scalar_type>::value(0);
- }
- };
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::zero_q_<T> const &
- zero_quat()
- {
- return *(qvm_detail::zero_q_<T> const *)qvm_detail::get_valid_ptr_quat_operations();
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- void>::type
- set_zero( A & a )
- {
- typedef typename quat_traits<A>::scalar_type T;
- T const zero=scalar_traits<T>::value(0);
- quat_traits<A>::template write_element<0>(a) = zero;
- quat_traits<A>::template write_element<1>(a) = zero;
- quat_traits<A>::template write_element<2>(a) = zero;
- quat_traits<A>::template write_element<3>(a) = zero;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class V>
- struct
- rot_quat_
- {
- typedef typename vec_traits<V>::scalar_type scalar_type;
- scalar_type a[4];
-
- template <class Angle>
- BOOST_QVM_INLINE
- rot_quat_( V const & axis, Angle angle )
- {
- scalar_type const x=vec_traits<V>::template read_element<0>(axis);
- scalar_type const y=vec_traits<V>::template read_element<1>(axis);
- scalar_type const z=vec_traits<V>::template read_element<2>(axis);
- scalar_type const m2=x*x+y*y+z*z;
- if( m2==scalar_traits<scalar_type>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- scalar_type const rm=scalar_traits<scalar_type>::value(1)/sqrt<scalar_type>(m2);
- angle/=2;
- scalar_type const s=sin<Angle>(angle);
- a[0] = cos<Angle>(angle);
- a[1] = rm*x*s;
- a[2] = rm*y*s;
- a[3] = rm*z*s;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class V>
- struct
- quat_traits< qvm_detail::rot_quat_<V> >
- {
- typedef qvm_detail::rot_quat_<V> this_quaternion;
- typedef typename this_quaternion::scalar_type scalar_type;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_quaternion const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return x.a[I];
- }
- };
-
- template <class V>
- struct
- deduce_quat< qvm_detail::rot_quat_<V> >
- {
- typedef quat<typename vec_traits<V>::scalar_type> type;
- };
-
- template <class A,class Angle>
- BOOST_QVM_INLINE
- typename enable_if_c<
- is_vec<A>::value && vec_traits<A>::dim==3,
- qvm_detail::rot_quat_<A> >::type
- rot_quat( A const & axis, Angle angle )
- {
- return qvm_detail::rot_quat_<A>(axis,angle);
- }
-
- template <class A,class B,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value &&
- is_vec<B>::value && vec_traits<B>::dim==3,
- void>::type
- set_rot( A & a, B const & axis, Angle angle )
- {
- assign(a,rot_quat(axis,angle));
- }
-
- template <class A,class B,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value &&
- is_vec<B>::value && vec_traits<B>::dim==3,
- void>::type
- rotate( A & a, B const & axis, Angle angle )
- {
- a *= rot_quat(axis,angle);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T>
- struct
- rotx_quat_
- {
- BOOST_QVM_INLINE_TRIVIAL
- rotx_quat_()
- {
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
-
- private:
-
- rotx_quat_( rotx_quat_ const & );
- rotx_quat_ & operator=( rotx_quat_ const & );
- ~rotx_quat_();
- };
-
- template <int I>
- struct
- rotx_q_get
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & )
- {
- return scalar_traits<T>::value(0);
- }
- };
-
- template <>
- struct
- rotx_q_get<1>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return sin<T>(angle/2);
- }
- };
-
- template <>
- struct
- rotx_q_get<0>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return cos<T>(angle/2);
- }
- };
- }
-
- template <class Angle>
- struct
- quat_traits< qvm_detail::rotx_quat_<Angle> >
- {
- typedef qvm_detail::rotx_quat_<Angle> this_quaternion;
- typedef Angle scalar_type;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_quaternion const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return qvm_detail::rotx_q_get<I>::get(reinterpret_cast<Angle const &>(x));
- }
- };
-
- template <class Angle>
- struct
- deduce_quat< qvm_detail::rotx_quat_<Angle> >
- {
- typedef quat<Angle> type;
- };
-
- template <class Angle>
- struct
- deduce_quat2< qvm_detail::rotx_quat_<Angle>, qvm_detail::rotx_quat_<Angle> >
- {
- typedef quat<Angle> type;
- };
-
- template <class Angle>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::rotx_quat_<Angle> const &
- rotx_quat( Angle const & angle )
- {
- return reinterpret_cast<qvm_detail::rotx_quat_<Angle> const &>(angle);
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- void>::type
- set_rotx( A & a, Angle angle )
- {
- assign(a,rotx_quat(angle));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- void>::type
- rotate_x( A & a, Angle angle )
- {
- a *= rotx_quat(angle);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T>
- struct
- roty_quat_
- {
- BOOST_QVM_INLINE_TRIVIAL
- roty_quat_()
- {
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
-
- private:
-
- roty_quat_( roty_quat_ const & );
- roty_quat_ & operator=( roty_quat_ const & );
- ~roty_quat_();
- };
-
- template <int I>
- struct
- roty_q_get
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & )
- {
- return scalar_traits<T>::value(0);
- }
- };
-
- template <>
- struct
- roty_q_get<2>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return sin<T>(angle/2);
- }
- };
-
- template <>
- struct
- roty_q_get<0>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return cos<T>(angle/2);
- }
- };
- }
-
- template <class Angle>
- struct
- quat_traits< qvm_detail::roty_quat_<Angle> >
- {
- typedef qvm_detail::roty_quat_<Angle> this_quaternion;
- typedef Angle scalar_type;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_quaternion const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return qvm_detail::roty_q_get<I>::get(reinterpret_cast<Angle const &>(x));
- }
- };
-
- template <class Angle>
- struct
- deduce_quat< qvm_detail::roty_quat_<Angle> >
- {
- typedef quat<Angle> type;
- };
-
- template <class Angle>
- struct
- deduce_quat2< qvm_detail::roty_quat_<Angle>, qvm_detail::roty_quat_<Angle> >
- {
- typedef quat<Angle> type;
- };
-
- template <class Angle>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::roty_quat_<Angle> const &
- roty_quat( Angle const & angle )
- {
- return reinterpret_cast<qvm_detail::roty_quat_<Angle> const &>(angle);
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- void>::type
- set_roty( A & a, Angle angle )
- {
- assign(a,roty_quat(angle));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- void>::type
- rotate_y( A & a, Angle angle )
- {
- a *= roty_quat(angle);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T>
- struct
- rotz_quat_
- {
- BOOST_QVM_INLINE_TRIVIAL
- rotz_quat_()
- {
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
-
- private:
-
- rotz_quat_( rotz_quat_ const & );
- rotz_quat_ & operator=( rotz_quat_ const & );
- ~rotz_quat_();
- };
-
- template <int I>
- struct
- rotz_q_get
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & )
- {
- return scalar_traits<T>::value(0);
- }
- };
-
- template <>
- struct
- rotz_q_get<3>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return sin<T>(angle/2);
- }
- };
-
- template <>
- struct
- rotz_q_get<0>
- {
- template <class T>
- static
- BOOST_QVM_INLINE_CRITICAL
- T
- get( T const & angle )
- {
- return cos<T>(angle/2);
- }
- };
- }
-
- template <class Angle>
- struct
- quat_traits< qvm_detail::rotz_quat_<Angle> >
- {
- typedef qvm_detail::rotz_quat_<Angle> this_quaternion;
- typedef Angle scalar_type;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_quaternion const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return qvm_detail::rotz_q_get<I>::get(reinterpret_cast<Angle const &>(x));
- }
- };
-
- template <class Angle>
- struct
- deduce_quat< qvm_detail::rotz_quat_<Angle> >
- {
- typedef quat<Angle> type;
- };
-
- template <class Angle>
- struct
- deduce_quat2< qvm_detail::rotz_quat_<Angle>, qvm_detail::rotz_quat_<Angle> >
- {
- typedef quat<Angle> type;
- };
-
- template <class Angle>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::rotz_quat_<Angle> const &
- rotz_quat( Angle const & angle )
- {
- return reinterpret_cast<qvm_detail::rotz_quat_<Angle> const &>(angle);
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- void>::type
- set_rotz( A & a, Angle angle )
- {
- assign(a,rotz_quat(angle));
- }
-
- template <class A,class Angle>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value,
- void>::type
- rotate_z( A & a, Angle angle )
- {
- a *= rotz_quat(angle);
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_quat<A>::value && is_vec<B>::value && vec_traits<B>::dim==3,
- typename quat_traits<A>::scalar_type>::type
- axis_angle( A const & a, B & b )
- {
- typedef typename quat_traits<A>::scalar_type T;
- T a0=quat_traits<A>::template read_element<0>(a);
- T a1=quat_traits<A>::template read_element<1>(a);
- T a2=quat_traits<A>::template read_element<2>(a);
- T a3=quat_traits<A>::template read_element<3>(a);
- if( a0>1 )
- {
- T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
- if( m2==scalar_traits<T>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T const s=sqrt<T>(m2);
- a0/=s;
- a1/=s;
- a2/=s;
- a3/=s;
- }
- if( T s=sqrt<T>(1-a0*a0) )
- {
- vec_traits<B>::template write_element<0>(b) = a1/s;
- vec_traits<B>::template write_element<1>(b) = a2/s;
- vec_traits<B>::template write_element<2>(b) = a3/s;
- }
- else
- {
- typedef typename vec_traits<B>::scalar_type T;
- vec_traits<B>::template write_element<0>(b) = scalar_traits<T>::value(1);
- vec_traits<B>::template write_element<1>(b) = vec_traits<B>::template write_element<2>(b) = scalar_traits<T>::value(0);
- }
- return scalar_traits<T>::value(2) * qvm::acos(a0);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- sfinae
- {
- using ::boost::qvm::assign;
- using ::boost::qvm::cmp;
- using ::boost::qvm::convert_to;
- using ::boost::qvm::conjugate;
- using ::boost::qvm::set_identity;
- using ::boost::qvm::set_zero;
- using ::boost::qvm::scalar_cast;
- using ::boost::qvm::operator/=;
- using ::boost::qvm::operator/;
- using ::boost::qvm::dot;
- using ::boost::qvm::operator==;
- using ::boost::qvm::inverse;
- using ::boost::qvm::mag_sqr;
- using ::boost::qvm::mag;
- using ::boost::qvm::slerp;
- using ::boost::qvm::operator-=;
- using ::boost::qvm::operator-;
- using ::boost::qvm::operator*=;
- using ::boost::qvm::operator*;
- using ::boost::qvm::operator!=;
- using ::boost::qvm::normalized;
- using ::boost::qvm::normalize;
- using ::boost::qvm::operator+=;
- using ::boost::qvm::operator+;
- using ::boost::qvm::qref;
- using ::boost::qvm::rot_quat;
- using ::boost::qvm::set_rot;
- using ::boost::qvm::rotate;
- using ::boost::qvm::rotx_quat;
- using ::boost::qvm::set_rotx;
- using ::boost::qvm::rotate_x;
- using ::boost::qvm::roty_quat;
- using ::boost::qvm::set_roty;
- using ::boost::qvm::rotate_y;
- using ::boost::qvm::rotz_quat;
- using ::boost::qvm::set_rotz;
- using ::boost::qvm::rotate_z;
- }
-
- ////////////////////////////////////////////////
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_E6519754D19211DFB8405F74DFD72085
+#define UUID_E6519754D19211DFB8405F74DFD72085
+
+#include <boost/qvm/detail/quat_assign.hpp>
+#include <boost/qvm/deduce_quat.hpp>
+#include <boost/qvm/mat_traits.hpp>
+#include <boost/qvm/scalar_traits.hpp>
+#include <boost/qvm/math.hpp>
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/error.hpp>
+#include <boost/qvm/throw_exception.hpp>
+#include <string>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ BOOST_QVM_INLINE_CRITICAL
+ void const *
+ get_valid_ptr_quat_operations()
+ {
+ static int const obj=0;
+ return &obj;
+ }
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ msvc_parse_bug_workaround
+ {
+ template <class A,class B>
+ struct
+ quats
+ {
+ static bool const value=is_quat<A>::value && is_quat<B>::value;
+ };
+ }
+
+ namespace
+ qvm_to_string_detail
+ {
+ template <class T>
+ std::string to_string( T const & x );
+ }
+
+ template <class A>
+ inline
+ typename boost::enable_if_c<
+ is_quat<A>::value,
+ std::string>::type
+ to_string( A const & a )
+ {
+ using namespace qvm_to_string_detail;
+ return '('+
+ to_string(quat_traits<A>::template read_element<0>(a))+','+
+ to_string(quat_traits<A>::template read_element<1>(a))+','+
+ to_string(quat_traits<A>::template read_element<2>(a))+','+
+ to_string(quat_traits<A>::template read_element<3>(a))+')';
+ }
+
+ ////////////////////////////////////////////////
+
+ template <class A,class B,class Cmp>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value && is_quat<B>::value,
+ bool>::type
+ cmp( A const & a, B const & b, Cmp f )
+ {
+ typedef typename deduce_scalar<
+ typename quat_traits<A>::scalar_type,
+ typename quat_traits<B>::scalar_type>::type T;
+ T q1[4] =
+ {
+ quat_traits<A>::template read_element<0>(a),
+ quat_traits<A>::template read_element<1>(a),
+ quat_traits<A>::template read_element<2>(a),
+ quat_traits<A>::template read_element<3>(a)
+ };
+ T q2[4] =
+ {
+ quat_traits<B>::template read_element<0>(b),
+ quat_traits<B>::template read_element<1>(b),
+ quat_traits<B>::template read_element<2>(b),
+ quat_traits<B>::template read_element<3>(b)
+ };
+ int i;
+ for( i=0; i!=4; ++i )
+ if( !f(q1[i],q2[i]) )
+ break;
+ if( i==4 )
+ return true;
+ for( i=0; i!=4; ++i )
+ if( !f(q1[i],-q2[i]) )
+ return false;
+ return true;
+ }
+
+ ////////////////////////////////////////////////
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_quat<R>::value && is_quat<A>::value,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r;
+ quat_traits<R>::template write_element<0>(r) = quat_traits<A>::template read_element<0>(a);
+ quat_traits<R>::template write_element<1>(r) = quat_traits<A>::template read_element<1>(a);
+ quat_traits<R>::template write_element<2>(r) = quat_traits<A>::template read_element<2>(a);
+ quat_traits<R>::template write_element<3>(r) = quat_traits<A>::template read_element<3>(a);
+ return r;
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<R>::value && is_mat<A>::value &&
+ mat_traits<A>::rows==3 && mat_traits<A>::cols==3,
+ R>::type
+ convert_to( A const & a )
+ {
+ typedef typename mat_traits<A>::scalar_type T;
+ T const mat[3][3] =
+ {
+ { mat_traits<A>::template read_element<0,0>(a), mat_traits<A>::template read_element<0,1>(a), mat_traits<A>::template read_element<0,2>(a) },
+ { mat_traits<A>::template read_element<1,0>(a), mat_traits<A>::template read_element<1,1>(a), mat_traits<A>::template read_element<1,2>(a) },
+ { mat_traits<A>::template read_element<2,0>(a), mat_traits<A>::template read_element<2,1>(a), mat_traits<A>::template read_element<2,2>(a) }
+ };
+ R r;
+ if( mat[0][0]+mat[1][1]+mat[2][2] > scalar_traits<T>::value(0) )
+ {
+ T t = mat[0][0] + mat[1][1] + mat[2][2] + scalar_traits<T>::value(1);
+ T s = (scalar_traits<T>::value(1)/sqrt<T>(t))/2;
+ quat_traits<R>::template write_element<0>(r)=s*t;
+ quat_traits<R>::template write_element<1>(r)=(mat[2][1]-mat[1][2])*s;
+ quat_traits<R>::template write_element<2>(r)=(mat[0][2]-mat[2][0])*s;
+ quat_traits<R>::template write_element<3>(r)=(mat[1][0]-mat[0][1])*s;
+ }
+ else if( mat[0][0]>mat[1][1] && mat[0][0]>mat[2][2] )
+ {
+ T t = mat[0][0] - mat[1][1] - mat[2][2] + scalar_traits<T>::value(1);
+ T s = (scalar_traits<T>::value(1)/sqrt<T>(t))/2;
+ quat_traits<R>::template write_element<0>(r)=(mat[2][1]-mat[1][2])*s;
+ quat_traits<R>::template write_element<1>(r)=s*t;
+ quat_traits<R>::template write_element<2>(r)=(mat[1][0]+mat[0][1])*s;
+ quat_traits<R>::template write_element<3>(r)=(mat[0][2]+mat[2][0])*s;
+ }
+ else if( mat[1][1]>mat[2][2] )
+ {
+ T t = - mat[0][0] + mat[1][1] - mat[2][2] + scalar_traits<T>::value(1);
+ T s = (scalar_traits<T>::value(1)/sqrt<T>(t))/2;
+ quat_traits<R>::template write_element<0>(r)=(mat[0][2]-mat[2][0])*s;
+ quat_traits<R>::template write_element<1>(r)=(mat[1][0]+mat[0][1])*s;
+ quat_traits<R>::template write_element<2>(r)=s*t;
+ quat_traits<R>::template write_element<3>(r)=(mat[2][1]+mat[1][2])*s;
+ }
+ else
+ {
+ T t = - mat[0][0] - mat[1][1] + mat[2][2] + scalar_traits<T>::value(1);
+ T s = (scalar_traits<T>::value(1)/sqrt<T>(t))/2;
+ quat_traits<R>::template write_element<0>(r)=(mat[1][0]-mat[0][1])*s;
+ quat_traits<R>::template write_element<1>(r)=(mat[0][2]+mat[2][0])*s;
+ quat_traits<R>::template write_element<2>(r)=(mat[2][1]+mat[1][2])*s;
+ quat_traits<R>::template write_element<3>(r)=s*t;
+ }
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value,
+ deduce_quat<A> >::type
+ conjugate( A const & a )
+ {
+ typedef typename deduce_quat<A>::type R;
+ R r;
+ quat_traits<R>::template write_element<0>(r)=quat_traits<A>::template read_element<0>(a);
+ quat_traits<R>::template write_element<1>(r)=-quat_traits<A>::template read_element<1>(a);
+ quat_traits<R>::template write_element<2>(r)=-quat_traits<A>::template read_element<2>(a);
+ quat_traits<R>::template write_element<3>(r)=-quat_traits<A>::template read_element<3>(a);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T>
+ class
+ identity_quat_
+ {
+ identity_quat_( identity_quat_ const & );
+ identity_quat_ & operator=( identity_quat_ const & );
+ ~identity_quat_();
+
+ public:
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class T>
+ struct
+ quat_traits< qvm_detail::identity_quat_<T> >
+ {
+ typedef qvm_detail::identity_quat_<T> this_quaternion;
+ typedef T scalar_type;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_quaternion const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return scalar_traits<T>::value(I==0);
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_quaternion const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<4);
+ return scalar_traits<T>::value(i==0);
+ }
+ };
+
+ template <class T>
+ struct
+ deduce_quat< qvm_detail::identity_quat_<T> >
+ {
+ typedef quat<T> type;
+ };
+
+ template <class T>
+ struct
+ deduce_quat2< qvm_detail::identity_quat_<T>, qvm_detail::identity_quat_<T> >
+ {
+ typedef quat<T> type;
+ };
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::identity_quat_<T> const &
+ identity_quat()
+ {
+ return *(qvm_detail::identity_quat_<T> const *)qvm_detail::get_valid_ptr_quat_operations();
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ void>::type
+ set_identity( A & a )
+ {
+ typedef typename quat_traits<A>::scalar_type T;
+ T const zero=scalar_traits<T>::value(0);
+ T const one=scalar_traits<T>::value(1);
+ quat_traits<A>::template write_element<0>(a) = one;
+ quat_traits<A>::template write_element<1>(a) = zero;
+ quat_traits<A>::template write_element<2>(a) = zero;
+ quat_traits<A>::template write_element<3>(a) = zero;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class OriginalType,class Scalar>
+ class
+ quaternion_scalar_cast_
+ {
+ quaternion_scalar_cast_( quaternion_scalar_cast_ const & );
+ quaternion_scalar_cast_ & operator=( quaternion_scalar_cast_ const & );
+ ~quaternion_scalar_cast_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ quaternion_scalar_cast_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <bool> struct scalar_cast_quaternion_filter { };
+ template <> struct scalar_cast_quaternion_filter<true> { typedef int type; };
+ }
+
+ template <class OriginalType,class Scalar>
+ struct
+ quat_traits< qvm_detail::quaternion_scalar_cast_<OriginalType,Scalar> >
+ {
+ typedef Scalar scalar_type;
+ typedef qvm_detail::quaternion_scalar_cast_<OriginalType,Scalar> this_quaternion;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_quaternion const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return scalar_type(quat_traits<OriginalType>::template read_element<I>(reinterpret_cast<OriginalType const &>(x)));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_quaternion const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<4);
+ return scalar_type(quat_traits<OriginalType>::read_element_idx(i,reinterpret_cast<OriginalType const &>(x)));
+ }
+ };
+
+ template <class Scalar,class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::quaternion_scalar_cast_<T,Scalar> const &
+ scalar_cast( T const & x, typename qvm_detail::scalar_cast_quaternion_filter<is_quat<T>::value>::type=0 )
+ {
+ return reinterpret_cast<qvm_detail::quaternion_scalar_cast_<T,Scalar> const &>(x);
+ }
+
+ ////////////////////////////////////////////////
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value && is_scalar<B>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ quat_traits<A>::template write_element<0>(a)/=b;
+ quat_traits<A>::template write_element<1>(a)/=b;
+ quat_traits<A>::template write_element<2>(a)/=b;
+ quat_traits<A>::template write_element<3>(a)/=b;
+ return a;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value && is_scalar<B>::value,
+ deduce_quat<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_quat<A>::type R;
+ R r;
+ quat_traits<R>::template write_element<0>(r) = quat_traits<A>::template read_element<0>(a)/b;
+ quat_traits<R>::template write_element<1>(r) = quat_traits<A>::template read_element<1>(a)/b;
+ quat_traits<R>::template write_element<2>(r) = quat_traits<A>::template read_element<2>(a)/b;
+ quat_traits<R>::template write_element<3>(r) = quat_traits<A>::template read_element<3>(a)/b;
+ return r;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value && is_quat<B>::value,
+ deduce_scalar<typename quat_traits<A>::scalar_type,typename quat_traits<B>::scalar_type> >::type
+ dot( A const & a, B const & b )
+ {
+ typedef typename quat_traits<A>::scalar_type Ta;
+ typedef typename quat_traits<B>::scalar_type Tb;
+ typedef typename deduce_scalar<Ta,Tb>::type Tr;
+ Ta const a0=quat_traits<A>::template read_element<0>(a);
+ Ta const a1=quat_traits<A>::template read_element<1>(a);
+ Ta const a2=quat_traits<A>::template read_element<2>(a);
+ Ta const a3=quat_traits<A>::template read_element<3>(a);
+ Tb const b0=quat_traits<B>::template read_element<0>(b);
+ Tb const b1=quat_traits<B>::template read_element<1>(b);
+ Tb const b2=quat_traits<B>::template read_element<2>(b);
+ Tb const b3=quat_traits<B>::template read_element<3>(b);
+ Tr const dp=a0*b0+a1*b1+a2*b2+a3*b3;
+ return dp;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value && is_quat<B>::value,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ return
+ quat_traits<A>::template read_element<0>(a)==quat_traits<B>::template read_element<0>(b) &&
+ quat_traits<A>::template read_element<1>(a)==quat_traits<B>::template read_element<1>(b) &&
+ quat_traits<A>::template read_element<2>(a)==quat_traits<B>::template read_element<2>(b) &&
+ quat_traits<A>::template read_element<3>(a)==quat_traits<B>::template read_element<3>(b);
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value,
+ deduce_quat<A> >::type
+ inverse( A const & a )
+ {
+ typedef typename deduce_quat<A>::type R;
+ typedef typename quat_traits<A>::scalar_type TA;
+ TA aa = quat_traits<A>::template read_element<0>(a);
+ TA ab = quat_traits<A>::template read_element<1>(a);
+ TA ac = quat_traits<A>::template read_element<2>(a);
+ TA ad = quat_traits<A>::template read_element<3>(a);
+ TA m2 = ab*ab + ac*ac + ad*ad + aa*aa;
+ if( m2==scalar_traits<TA>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ TA rm=scalar_traits<TA>::value(1)/m2;
+ R r;
+ quat_traits<R>::template write_element<0>(r) = aa*rm;
+ quat_traits<R>::template write_element<1>(r) = -ab*rm;
+ quat_traits<R>::template write_element<2>(r) = -ac*rm;
+ quat_traits<R>::template write_element<3>(r) = -ad*rm;
+ return r;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ typename quat_traits<A>::scalar_type>::type
+ mag_sqr( A const & a )
+ {
+ typedef typename quat_traits<A>::scalar_type T;
+ T x=quat_traits<A>::template read_element<0>(a);
+ T y=quat_traits<A>::template read_element<1>(a);
+ T z=quat_traits<A>::template read_element<2>(a);
+ T w=quat_traits<A>::template read_element<3>(a);
+ return x*x+y*y+z*z+w*w;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ typename quat_traits<A>::scalar_type>::type
+ mag( A const & a )
+ {
+ typedef typename quat_traits<A>::scalar_type T;
+ T x=quat_traits<A>::template read_element<0>(a);
+ T y=quat_traits<A>::template read_element<1>(a);
+ T z=quat_traits<A>::template read_element<2>(a);
+ T w=quat_traits<A>::template read_element<3>(a);
+ return sqrt<T>(x*x+y*y+z*z+w*w);
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if<
+ msvc_parse_bug_workaround::quats<A,B>,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ quat_traits<A>::template write_element<0>(a)-=quat_traits<B>::template read_element<0>(b);
+ quat_traits<A>::template write_element<1>(a)-=quat_traits<B>::template read_element<1>(b);
+ quat_traits<A>::template write_element<2>(a)-=quat_traits<B>::template read_element<2>(b);
+ quat_traits<A>::template write_element<3>(a)-=quat_traits<B>::template read_element<3>(b);
+ return a;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value && is_quat<B>::value,
+ deduce_quat2<A,B> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_quat2<A,B>::type R;
+ R r;
+ quat_traits<R>::template write_element<0>(r)=quat_traits<A>::template read_element<0>(a)-quat_traits<B>::template read_element<0>(b);
+ quat_traits<R>::template write_element<1>(r)=quat_traits<A>::template read_element<1>(a)-quat_traits<B>::template read_element<1>(b);
+ quat_traits<R>::template write_element<2>(r)=quat_traits<A>::template read_element<2>(a)-quat_traits<B>::template read_element<2>(b);
+ quat_traits<R>::template write_element<3>(r)=quat_traits<A>::template read_element<3>(a)-quat_traits<B>::template read_element<3>(b);
+ return r;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value,
+ deduce_quat<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_quat<A>::type R;
+ R r;
+ quat_traits<R>::template write_element<0>(r)=-quat_traits<A>::template read_element<0>(a);
+ quat_traits<R>::template write_element<1>(r)=-quat_traits<A>::template read_element<1>(a);
+ quat_traits<R>::template write_element<2>(r)=-quat_traits<A>::template read_element<2>(a);
+ quat_traits<R>::template write_element<3>(r)=-quat_traits<A>::template read_element<3>(a);
+ return r;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if<
+ msvc_parse_bug_workaround::quats<A,B>,
+ A &>::type
+ operator*=( A & a, B const & b )
+ {
+ typedef typename quat_traits<A>::scalar_type TA;
+ typedef typename quat_traits<B>::scalar_type TB;
+ TA const aa=quat_traits<A>::template read_element<0>(a);
+ TA const ab=quat_traits<A>::template read_element<1>(a);
+ TA const ac=quat_traits<A>::template read_element<2>(a);
+ TA const ad=quat_traits<A>::template read_element<3>(a);
+ TB const ba=quat_traits<B>::template read_element<0>(b);
+ TB const bb=quat_traits<B>::template read_element<1>(b);
+ TB const bc=quat_traits<B>::template read_element<2>(b);
+ TB const bd=quat_traits<B>::template read_element<3>(b);
+ quat_traits<A>::template write_element<0>(a) = aa*ba - ab*bb - ac*bc - ad*bd;
+ quat_traits<A>::template write_element<1>(a) = aa*bb + ab*ba + ac*bd - ad*bc;
+ quat_traits<A>::template write_element<2>(a) = aa*bc + ac*ba + ad*bb - ab*bd;
+ quat_traits<A>::template write_element<3>(a) = aa*bd + ad*ba + ab*bc - ac*bb;
+ return a;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value && is_scalar<B>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ quat_traits<A>::template write_element<0>(a)*=b;
+ quat_traits<A>::template write_element<1>(a)*=b;
+ quat_traits<A>::template write_element<2>(a)*=b;
+ quat_traits<A>::template write_element<3>(a)*=b;
+ return a;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value && is_quat<B>::value,
+ deduce_quat2<A,B> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename deduce_quat2<A,B>::type R;
+ typedef typename quat_traits<A>::scalar_type TA;
+ typedef typename quat_traits<B>::scalar_type TB;
+ TA const aa=quat_traits<A>::template read_element<0>(a);
+ TA const ab=quat_traits<A>::template read_element<1>(a);
+ TA const ac=quat_traits<A>::template read_element<2>(a);
+ TA const ad=quat_traits<A>::template read_element<3>(a);
+ TB const ba=quat_traits<B>::template read_element<0>(b);
+ TB const bb=quat_traits<B>::template read_element<1>(b);
+ TB const bc=quat_traits<B>::template read_element<2>(b);
+ TB const bd=quat_traits<B>::template read_element<3>(b);
+ R r;
+ quat_traits<R>::template write_element<0>(r) = aa*ba - ab*bb - ac*bc - ad*bd;
+ quat_traits<R>::template write_element<1>(r) = aa*bb + ab*ba + ac*bd - ad*bc;
+ quat_traits<R>::template write_element<2>(r) = aa*bc + ac*ba + ad*bb - ab*bd;
+ quat_traits<R>::template write_element<3>(r) = aa*bd + ad*ba + ab*bc - ac*bb;
+ return r;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value && is_scalar<B>::value,
+ deduce_quat<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_quat<A>::type R;
+ R r;
+ quat_traits<R>::template write_element<0>(r)=quat_traits<A>::template read_element<0>(a)*b;
+ quat_traits<R>::template write_element<1>(r)=quat_traits<A>::template read_element<1>(a)*b;
+ quat_traits<R>::template write_element<2>(r)=quat_traits<A>::template read_element<2>(a)*b;
+ quat_traits<R>::template write_element<3>(r)=quat_traits<A>::template read_element<3>(a)*b;
+ return r;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value && is_quat<B>::value,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ return
+ quat_traits<A>::template read_element<0>(a)!=quat_traits<B>::template read_element<0>(b) ||
+ quat_traits<A>::template read_element<1>(a)!=quat_traits<B>::template read_element<1>(b) ||
+ quat_traits<A>::template read_element<2>(a)!=quat_traits<B>::template read_element<2>(b) ||
+ quat_traits<A>::template read_element<3>(a)!=quat_traits<B>::template read_element<3>(b);
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value,
+ deduce_quat<A> >::type
+ normalized( A const & a )
+ {
+ typedef typename quat_traits<A>::scalar_type T;
+ T const a0=quat_traits<A>::template read_element<0>(a);
+ T const a1=quat_traits<A>::template read_element<1>(a);
+ T const a2=quat_traits<A>::template read_element<2>(a);
+ T const a3=quat_traits<A>::template read_element<3>(a);
+ T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
+ if( m2==scalar_traits<typename quat_traits<A>::scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
+ typedef typename deduce_quat<A>::type R;
+ R r;
+ quat_traits<R>::template write_element<0>(r)=a0*rm;
+ quat_traits<R>::template write_element<1>(r)=a1*rm;
+ quat_traits<R>::template write_element<2>(r)=a2*rm;
+ quat_traits<R>::template write_element<3>(r)=a3*rm;
+ return r;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ void>::type
+ normalize( A & a )
+ {
+ typedef typename quat_traits<A>::scalar_type T;
+ T const a0=quat_traits<A>::template read_element<0>(a);
+ T const a1=quat_traits<A>::template read_element<1>(a);
+ T const a2=quat_traits<A>::template read_element<2>(a);
+ T const a3=quat_traits<A>::template read_element<3>(a);
+ T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
+ if( m2==scalar_traits<typename quat_traits<A>::scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const rm=scalar_traits<T>::value(1)/sqrt<T>(m2);
+ quat_traits<A>::template write_element<0>(a)*=rm;
+ quat_traits<A>::template write_element<1>(a)*=rm;
+ quat_traits<A>::template write_element<2>(a)*=rm;
+ quat_traits<A>::template write_element<3>(a)*=rm;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if<
+ msvc_parse_bug_workaround::quats<A,B>,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ quat_traits<A>::template write_element<0>(a)+=quat_traits<B>::template read_element<0>(b);
+ quat_traits<A>::template write_element<1>(a)+=quat_traits<B>::template read_element<1>(b);
+ quat_traits<A>::template write_element<2>(a)+=quat_traits<B>::template read_element<2>(b);
+ quat_traits<A>::template write_element<3>(a)+=quat_traits<B>::template read_element<3>(b);
+ return a;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value && is_quat<B>::value,
+ deduce_quat2<A,B> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_quat2<A,B>::type R;
+ R r;
+ quat_traits<R>::template write_element<0>(r)=quat_traits<A>::template read_element<0>(a)+quat_traits<B>::template read_element<0>(b);
+ quat_traits<R>::template write_element<1>(r)=quat_traits<A>::template read_element<1>(a)+quat_traits<B>::template read_element<1>(b);
+ quat_traits<R>::template write_element<2>(r)=quat_traits<A>::template read_element<2>(a)+quat_traits<B>::template read_element<2>(b);
+ quat_traits<R>::template write_element<3>(r)=quat_traits<A>::template read_element<3>(a)+quat_traits<B>::template read_element<3>(b);
+ return r;
+ }
+
+ template <class A,class B,class C>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value && is_quat<B>::value && is_scalar<C>::value,
+ deduce_quat2<A,B> >::type
+ slerp( A const & a, B const & b, C t )
+ {
+ typedef typename deduce_quat2<A,B>::type R;
+ typedef typename quat_traits<R>::scalar_type TR;
+ TR const one = scalar_traits<TR>::value(1);
+ TR dp = dot(a,b);
+ TR sc=one;
+ if( dp < one )
+ {
+ TR const theta = acosf(dp);
+ TR const invsintheta = one/sin<TR>(theta);
+ TR const scale = sin<TR>(theta*(one-t)) * invsintheta;
+ TR const invscale = sin<TR>(theta*t) * invsintheta * sc;
+ return a*scale + b*invscale;
+ }
+ else
+ return normalized(a+(b-a)*t);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T>
+ class
+ qref_
+ {
+ qref_( qref_ const & );
+ qref_ & operator=( qref_ const & );
+ ~qref_();
+
+ public:
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ qref_ &
+ operator=( R const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class Q>
+ struct quat_traits;
+
+ template <class Q>
+ struct
+ quat_traits< qvm_detail::qref_<Q> >
+ {
+ typedef typename quat_traits<Q>::scalar_type scalar_type;
+ typedef qvm_detail::qref_<Q> this_quaternion;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_quaternion const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return quat_traits<Q>::template read_element<I>(reinterpret_cast<Q const &>(x));
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_quaternion & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return quat_traits<Q>::template write_element<I>(reinterpret_cast<Q &>(x));
+ }
+ };
+
+ template <class Q>
+ struct
+ deduce_quat< qvm_detail::qref_<Q> >
+ {
+ typedef quat<typename quat_traits<Q>::scalar_type> type;
+ };
+
+ template <class Q>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_quat<Q>::value,
+ qvm_detail::qref_<Q> const &>::type
+ qref( Q const & a )
+ {
+ return reinterpret_cast<qvm_detail::qref_<Q> const &>(a);
+ }
+
+ template <class Q>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_quat<Q>::value,
+ qvm_detail::qref_<Q> &>::type
+ qref( Q & a )
+ {
+ return reinterpret_cast<qvm_detail::qref_<Q> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T>
+ class
+ zero_q_
+ {
+ zero_q_( zero_q_ const & );
+ zero_q_ & operator=( zero_q_ const & );
+ ~zero_q_();
+
+ public:
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class T>
+ struct
+ quat_traits< qvm_detail::zero_q_<T> >
+ {
+ typedef qvm_detail::zero_q_<T> this_quaternion;
+ typedef T scalar_type;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_quaternion const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return scalar_traits<scalar_type>::value(0);
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_quaternion const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<4);
+ return scalar_traits<scalar_type>::value(0);
+ }
+ };
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::zero_q_<T> const &
+ zero_quat()
+ {
+ return *(qvm_detail::zero_q_<T> const *)qvm_detail::get_valid_ptr_quat_operations();
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ void>::type
+ set_zero( A & a )
+ {
+ typedef typename quat_traits<A>::scalar_type T;
+ T const zero=scalar_traits<T>::value(0);
+ quat_traits<A>::template write_element<0>(a) = zero;
+ quat_traits<A>::template write_element<1>(a) = zero;
+ quat_traits<A>::template write_element<2>(a) = zero;
+ quat_traits<A>::template write_element<3>(a) = zero;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class V>
+ struct
+ rot_quat_
+ {
+ typedef typename vec_traits<V>::scalar_type scalar_type;
+ scalar_type a[4];
+
+ template <class Angle>
+ BOOST_QVM_INLINE
+ rot_quat_( V const & axis, Angle angle )
+ {
+ scalar_type const x=vec_traits<V>::template read_element<0>(axis);
+ scalar_type const y=vec_traits<V>::template read_element<1>(axis);
+ scalar_type const z=vec_traits<V>::template read_element<2>(axis);
+ scalar_type const m2=x*x+y*y+z*z;
+ if( m2==scalar_traits<scalar_type>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ scalar_type const rm=scalar_traits<scalar_type>::value(1)/sqrt<scalar_type>(m2);
+ angle/=2;
+ scalar_type const s=sin<Angle>(angle);
+ a[0] = cos<Angle>(angle);
+ a[1] = rm*x*s;
+ a[2] = rm*y*s;
+ a[3] = rm*z*s;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class V>
+ struct
+ quat_traits< qvm_detail::rot_quat_<V> >
+ {
+ typedef qvm_detail::rot_quat_<V> this_quaternion;
+ typedef typename this_quaternion::scalar_type scalar_type;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_quaternion const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return x.a[I];
+ }
+ };
+
+ template <class V>
+ struct
+ deduce_quat< qvm_detail::rot_quat_<V> >
+ {
+ typedef quat<typename vec_traits<V>::scalar_type> type;
+ };
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE
+ typename enable_if_c<
+ is_vec<A>::value && vec_traits<A>::dim==3,
+ qvm_detail::rot_quat_<A> >::type
+ rot_quat( A const & axis, Angle angle )
+ {
+ return qvm_detail::rot_quat_<A>(axis,angle);
+ }
+
+ template <class A,class B,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value &&
+ is_vec<B>::value && vec_traits<B>::dim==3,
+ void>::type
+ set_rot( A & a, B const & axis, Angle angle )
+ {
+ assign(a,rot_quat(axis,angle));
+ }
+
+ template <class A,class B,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value &&
+ is_vec<B>::value && vec_traits<B>::dim==3,
+ void>::type
+ rotate( A & a, B const & axis, Angle angle )
+ {
+ a *= rot_quat(axis,angle);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T>
+ struct
+ rotx_quat_
+ {
+ BOOST_QVM_INLINE_TRIVIAL
+ rotx_quat_()
+ {
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+
+ private:
+
+ rotx_quat_( rotx_quat_ const & );
+ rotx_quat_ & operator=( rotx_quat_ const & );
+ ~rotx_quat_();
+ };
+
+ template <int I>
+ struct
+ rotx_q_get
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & )
+ {
+ return scalar_traits<T>::value(0);
+ }
+ };
+
+ template <>
+ struct
+ rotx_q_get<1>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return sin<T>(angle/2);
+ }
+ };
+
+ template <>
+ struct
+ rotx_q_get<0>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return cos<T>(angle/2);
+ }
+ };
+ }
+
+ template <class Angle>
+ struct
+ quat_traits< qvm_detail::rotx_quat_<Angle> >
+ {
+ typedef qvm_detail::rotx_quat_<Angle> this_quaternion;
+ typedef Angle scalar_type;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_quaternion const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return qvm_detail::rotx_q_get<I>::get(reinterpret_cast<Angle const &>(x));
+ }
+ };
+
+ template <class Angle>
+ struct
+ deduce_quat< qvm_detail::rotx_quat_<Angle> >
+ {
+ typedef quat<Angle> type;
+ };
+
+ template <class Angle>
+ struct
+ deduce_quat2< qvm_detail::rotx_quat_<Angle>, qvm_detail::rotx_quat_<Angle> >
+ {
+ typedef quat<Angle> type;
+ };
+
+ template <class Angle>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::rotx_quat_<Angle> const &
+ rotx_quat( Angle const & angle )
+ {
+ return reinterpret_cast<qvm_detail::rotx_quat_<Angle> const &>(angle);
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ void>::type
+ set_rotx( A & a, Angle angle )
+ {
+ assign(a,rotx_quat(angle));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ void>::type
+ rotate_x( A & a, Angle angle )
+ {
+ a *= rotx_quat(angle);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T>
+ struct
+ roty_quat_
+ {
+ BOOST_QVM_INLINE_TRIVIAL
+ roty_quat_()
+ {
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+
+ private:
+
+ roty_quat_( roty_quat_ const & );
+ roty_quat_ & operator=( roty_quat_ const & );
+ ~roty_quat_();
+ };
+
+ template <int I>
+ struct
+ roty_q_get
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & )
+ {
+ return scalar_traits<T>::value(0);
+ }
+ };
+
+ template <>
+ struct
+ roty_q_get<2>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return sin<T>(angle/2);
+ }
+ };
+
+ template <>
+ struct
+ roty_q_get<0>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return cos<T>(angle/2);
+ }
+ };
+ }
+
+ template <class Angle>
+ struct
+ quat_traits< qvm_detail::roty_quat_<Angle> >
+ {
+ typedef qvm_detail::roty_quat_<Angle> this_quaternion;
+ typedef Angle scalar_type;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_quaternion const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return qvm_detail::roty_q_get<I>::get(reinterpret_cast<Angle const &>(x));
+ }
+ };
+
+ template <class Angle>
+ struct
+ deduce_quat< qvm_detail::roty_quat_<Angle> >
+ {
+ typedef quat<Angle> type;
+ };
+
+ template <class Angle>
+ struct
+ deduce_quat2< qvm_detail::roty_quat_<Angle>, qvm_detail::roty_quat_<Angle> >
+ {
+ typedef quat<Angle> type;
+ };
+
+ template <class Angle>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::roty_quat_<Angle> const &
+ roty_quat( Angle const & angle )
+ {
+ return reinterpret_cast<qvm_detail::roty_quat_<Angle> const &>(angle);
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ void>::type
+ set_roty( A & a, Angle angle )
+ {
+ assign(a,roty_quat(angle));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ void>::type
+ rotate_y( A & a, Angle angle )
+ {
+ a *= roty_quat(angle);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T>
+ struct
+ rotz_quat_
+ {
+ BOOST_QVM_INLINE_TRIVIAL
+ rotz_quat_()
+ {
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+
+ private:
+
+ rotz_quat_( rotz_quat_ const & );
+ rotz_quat_ & operator=( rotz_quat_ const & );
+ ~rotz_quat_();
+ };
+
+ template <int I>
+ struct
+ rotz_q_get
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & )
+ {
+ return scalar_traits<T>::value(0);
+ }
+ };
+
+ template <>
+ struct
+ rotz_q_get<3>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return sin<T>(angle/2);
+ }
+ };
+
+ template <>
+ struct
+ rotz_q_get<0>
+ {
+ template <class T>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ T
+ get( T const & angle )
+ {
+ return cos<T>(angle/2);
+ }
+ };
+ }
+
+ template <class Angle>
+ struct
+ quat_traits< qvm_detail::rotz_quat_<Angle> >
+ {
+ typedef qvm_detail::rotz_quat_<Angle> this_quaternion;
+ typedef Angle scalar_type;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_quaternion const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return qvm_detail::rotz_q_get<I>::get(reinterpret_cast<Angle const &>(x));
+ }
+ };
+
+ template <class Angle>
+ struct
+ deduce_quat< qvm_detail::rotz_quat_<Angle> >
+ {
+ typedef quat<Angle> type;
+ };
+
+ template <class Angle>
+ struct
+ deduce_quat2< qvm_detail::rotz_quat_<Angle>, qvm_detail::rotz_quat_<Angle> >
+ {
+ typedef quat<Angle> type;
+ };
+
+ template <class Angle>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::rotz_quat_<Angle> const &
+ rotz_quat( Angle const & angle )
+ {
+ return reinterpret_cast<qvm_detail::rotz_quat_<Angle> const &>(angle);
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ void>::type
+ set_rotz( A & a, Angle angle )
+ {
+ assign(a,rotz_quat(angle));
+ }
+
+ template <class A,class Angle>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value,
+ void>::type
+ rotate_z( A & a, Angle angle )
+ {
+ a *= rotz_quat(angle);
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_quat<A>::value && is_vec<B>::value && vec_traits<B>::dim==3,
+ typename quat_traits<A>::scalar_type>::type
+ axis_angle( A const & a, B & b )
+ {
+ typedef typename quat_traits<A>::scalar_type T;
+ T a0=quat_traits<A>::template read_element<0>(a);
+ T a1=quat_traits<A>::template read_element<1>(a);
+ T a2=quat_traits<A>::template read_element<2>(a);
+ T a3=quat_traits<A>::template read_element<3>(a);
+ if( a0>1 )
+ {
+ T const m2=a0*a0+a1*a1+a2*a2+a3*a3;
+ if( m2==scalar_traits<T>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T const s=sqrt<T>(m2);
+ a0/=s;
+ a1/=s;
+ a2/=s;
+ a3/=s;
+ }
+ if( T s=sqrt<T>(1-a0*a0) )
+ {
+ vec_traits<B>::template write_element<0>(b) = a1/s;
+ vec_traits<B>::template write_element<1>(b) = a2/s;
+ vec_traits<B>::template write_element<2>(b) = a3/s;
+ }
+ else
+ {
+ typedef typename vec_traits<B>::scalar_type T;
+ vec_traits<B>::template write_element<0>(b) = scalar_traits<T>::value(1);
+ vec_traits<B>::template write_element<1>(b) = vec_traits<B>::template write_element<2>(b) = scalar_traits<T>::value(0);
+ }
+ return scalar_traits<T>::value(2) * qvm::acos(a0);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::assign;
+ using ::boost::qvm::cmp;
+ using ::boost::qvm::convert_to;
+ using ::boost::qvm::conjugate;
+ using ::boost::qvm::set_identity;
+ using ::boost::qvm::set_zero;
+ using ::boost::qvm::scalar_cast;
+ using ::boost::qvm::operator/=;
+ using ::boost::qvm::operator/;
+ using ::boost::qvm::dot;
+ using ::boost::qvm::operator==;
+ using ::boost::qvm::inverse;
+ using ::boost::qvm::mag_sqr;
+ using ::boost::qvm::mag;
+ using ::boost::qvm::slerp;
+ using ::boost::qvm::operator-=;
+ using ::boost::qvm::operator-;
+ using ::boost::qvm::operator*=;
+ using ::boost::qvm::operator*;
+ using ::boost::qvm::operator!=;
+ using ::boost::qvm::normalized;
+ using ::boost::qvm::normalize;
+ using ::boost::qvm::operator+=;
+ using ::boost::qvm::operator+;
+ using ::boost::qvm::qref;
+ using ::boost::qvm::rot_quat;
+ using ::boost::qvm::set_rot;
+ using ::boost::qvm::rotate;
+ using ::boost::qvm::rotx_quat;
+ using ::boost::qvm::set_rotx;
+ using ::boost::qvm::rotate_x;
+ using ::boost::qvm::roty_quat;
+ using ::boost::qvm::set_roty;
+ using ::boost::qvm::rotate_y;
+ using ::boost::qvm::rotz_quat;
+ using ::boost::qvm::set_rotz;
+ using ::boost::qvm::rotate_z;
+ }
+
+ ////////////////////////////////////////////////
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/quat_traits.hpp b/contrib/restricted/boost/boost/qvm/quat_traits.hpp
index d26025df4b..9c46a049eb 100644
--- a/contrib/restricted/boost/boost/qvm/quat_traits.hpp
+++ b/contrib/restricted/boost/boost/qvm/quat_traits.hpp
@@ -1,49 +1,49 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_EF321CBE275911E084A4550FDFD72085
-#define UUID_EF321CBE275911E084A4550FDFD72085
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class Q>
- struct
- quat_traits
- {
- typedef void scalar_type;
- };
-
- namespace
- is_quaternion_detail
- {
- template <class>
- struct
- is_void
- {
- static bool const value=false;
- };
-
- template <>
- struct
- is_void<void>
- {
- static bool const value=true;
- };
- }
-
- template <class T>
- struct
- is_quat
- {
- static bool const value=!is_quaternion_detail::is_void<typename quat_traits<T>::scalar_type>::value;
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_EF321CBE275911E084A4550FDFD72085
+#define UUID_EF321CBE275911E084A4550FDFD72085
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class Q>
+ struct
+ quat_traits
+ {
+ typedef void scalar_type;
+ };
+
+ namespace
+ is_quaternion_detail
+ {
+ template <class>
+ struct
+ is_void
+ {
+ static bool const value=false;
+ };
+
+ template <>
+ struct
+ is_void<void>
+ {
+ static bool const value=true;
+ };
+ }
+
+ template <class T>
+ struct
+ is_quat
+ {
+ static bool const value=!is_quaternion_detail::is_void<typename quat_traits<T>::scalar_type>::value;
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/quat_traits_array.hpp b/contrib/restricted/boost/boost/qvm/quat_traits_array.hpp
index d54d17b33e..f3b13d2dd5 100644
--- a/contrib/restricted/boost/boost/qvm/quat_traits_array.hpp
+++ b/contrib/restricted/boost/boost/qvm/quat_traits_array.hpp
@@ -1,130 +1,130 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_6D6B1EE2119A11E291554FEE6188709B
-#define UUID_6D6B1EE2119A11E291554FEE6188709B
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/deduce_quat.hpp>
-#include <boost/qvm/detail/remove_const.hpp>
-#include <boost/qvm/assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class T,int D>
- struct
- quat_traits<T[D]>
- {
- typedef void scalar_type;
- };
- template <class T,int D>
- struct
- quat_traits<T[D][4]>
- {
- typedef void scalar_type;
- };
- template <class T,int D>
- struct
- quat_traits<T[4][D]>
- {
- typedef void scalar_type;
- };
- template <class T>
- struct
- quat_traits<T[4][4]>
- {
- typedef void scalar_type;
- };
- template <class T,int M,int N>
- struct
- quat_traits<T[M][N]>
- {
- typedef void scalar_type;
- };
-
- template <class T>
- struct
- quat_traits<T[4]>
- {
- typedef T this_quaternion[4];
- typedef typename qvm_detail::remove_const<T>::type scalar_type;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_quaternion const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return x[I];
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_quaternion & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<4);
- return x[I];
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_quaternion const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<4);
- return x[i];
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int i, this_quaternion & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<4);
- return x[i];
- }
- };
-
- template <class T>
- struct
- deduce_quat<T[4]>
- {
- typedef quat<T> type;
- };
-
- template <class T>
- struct
- deduce_quat<T const[4]>
- {
- typedef quat<T> type;
- };
-
- template <class T1,class T2>
- struct
- deduce_quat2<T1[4],T2[4]>
- {
- typedef quat<typename deduce_scalar<T1,T2>::type> type;
- };
-
- template <class T>
- T (&ptr_qref( T * ptr ))[4]
- {
- return *reinterpret_cast<T (*)[4]>(ptr);
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_6D6B1EE2119A11E291554FEE6188709B
+#define UUID_6D6B1EE2119A11E291554FEE6188709B
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/deduce_quat.hpp>
+#include <boost/qvm/detail/remove_const.hpp>
+#include <boost/qvm/assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class T,int D>
+ struct
+ quat_traits<T[D]>
+ {
+ typedef void scalar_type;
+ };
+ template <class T,int D>
+ struct
+ quat_traits<T[D][4]>
+ {
+ typedef void scalar_type;
+ };
+ template <class T,int D>
+ struct
+ quat_traits<T[4][D]>
+ {
+ typedef void scalar_type;
+ };
+ template <class T>
+ struct
+ quat_traits<T[4][4]>
+ {
+ typedef void scalar_type;
+ };
+ template <class T,int M,int N>
+ struct
+ quat_traits<T[M][N]>
+ {
+ typedef void scalar_type;
+ };
+
+ template <class T>
+ struct
+ quat_traits<T[4]>
+ {
+ typedef T this_quaternion[4];
+ typedef typename qvm_detail::remove_const<T>::type scalar_type;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_quaternion const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return x[I];
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_quaternion & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<4);
+ return x[I];
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_quaternion const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<4);
+ return x[i];
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int i, this_quaternion & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<4);
+ return x[i];
+ }
+ };
+
+ template <class T>
+ struct
+ deduce_quat<T[4]>
+ {
+ typedef quat<T> type;
+ };
+
+ template <class T>
+ struct
+ deduce_quat<T const[4]>
+ {
+ typedef quat<T> type;
+ };
+
+ template <class T1,class T2>
+ struct
+ deduce_quat2<T1[4],T2[4]>
+ {
+ typedef quat<typename deduce_scalar<T1,T2>::type> type;
+ };
+
+ template <class T>
+ T (&ptr_qref( T * ptr ))[4]
+ {
+ return *reinterpret_cast<T (*)[4]>(ptr);
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/quat_traits_defaults.hpp b/contrib/restricted/boost/boost/qvm/quat_traits_defaults.hpp
index 48342144b8..a343b2a3ad 100644
--- a/contrib/restricted/boost/boost/qvm/quat_traits_defaults.hpp
+++ b/contrib/restricted/boost/boost/qvm/quat_traits_defaults.hpp
@@ -1,40 +1,40 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_0595DEC2C72D11E6B6B77C2A07624D53
-#define UUID_0595DEC2C72D11E6B6B77C2A07624D53
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class>
- struct quat_traits;
-
- template <class QuatType,class ScalarType>
- struct
- quat_traits_defaults
- {
- typedef QuatType quat_type;
- typedef ScalarType scalar_type;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( quat_type const & x )
- {
- return quat_traits<quat_type>::template write_element<I>(const_cast<quat_type &>(x));
- }
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_0595DEC2C72D11E6B6B77C2A07624D53
+#define UUID_0595DEC2C72D11E6B6B77C2A07624D53
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class>
+ struct quat_traits;
+
+ template <class QuatType,class ScalarType>
+ struct
+ quat_traits_defaults
+ {
+ typedef QuatType quat_type;
+ typedef ScalarType scalar_type;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( quat_type const & x )
+ {
+ return quat_traits<quat_type>::template write_element<I>(const_cast<quat_type &>(x));
+ }
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/quat_vec_operations.hpp b/contrib/restricted/boost/boost/qvm/quat_vec_operations.hpp
index 7e1660447c..bbdf33c390 100644
--- a/contrib/restricted/boost/boost/qvm/quat_vec_operations.hpp
+++ b/contrib/restricted/boost/boost/qvm/quat_vec_operations.hpp
@@ -1,62 +1,62 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_51968952D30A11DFAFE78CE3DFD72085
-#define UUID_51968952D30A11DFAFE78CE3DFD72085
-
-#include <boost/qvm/quat_traits.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/enable_if.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_quat<A>::value &&
- is_vec<B>::value && vec_traits<B>::dim==3,
- deduce_vec2<A,B,3> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,3>::type R;
- typedef typename quat_traits<A>::scalar_type TA;
- typedef typename vec_traits<B>::scalar_type TB;
- TA const aa = quat_traits<A>::template read_element<0>(a);
- TA const ab = quat_traits<A>::template read_element<1>(a);
- TA const ac = quat_traits<A>::template read_element<2>(a);
- TA const ad = quat_traits<A>::template read_element<3>(a);
- TA const t2 = aa*ab;
- TA const t3 = aa*ac;
- TA const t4 = aa*ad;
- TA const t5 = -ab*ab;
- TA const t6 = ab*ac;
- TA const t7 = ab*ad;
- TA const t8 = -ac*ac;
- TA const t9 = ac*ad;
- TA const t10 = -ad*ad;
- TB const bx = vec_traits<B>::template read_element<0>(b);
- TB const by = vec_traits<B>::template read_element<1>(b);
- TB const bz = vec_traits<B>::template read_element<2>(b);
- R r;
- vec_traits<R>::template write_element<0>(r) = 2*((t8+t10)*bx + (t6-t4)*by + (t3+t7)*bz) + bx;
- vec_traits<R>::template write_element<1>(r) = 2*((t4+t6)*bx + (t5+t10)*by + (t9-t2)*bz) + by;
- vec_traits<R>::template write_element<2>(r) = 2*((t7-t3)*bx + (t2+t9)*by + (t5+t8)*bz) + bz;
- return r;
- }
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_51968952D30A11DFAFE78CE3DFD72085
+#define UUID_51968952D30A11DFAFE78CE3DFD72085
+
+#include <boost/qvm/quat_traits.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/enable_if.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_quat<A>::value &&
+ is_vec<B>::value && vec_traits<B>::dim==3,
+ deduce_vec2<A,B,3> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,3>::type R;
+ typedef typename quat_traits<A>::scalar_type TA;
+ typedef typename vec_traits<B>::scalar_type TB;
+ TA const aa = quat_traits<A>::template read_element<0>(a);
+ TA const ab = quat_traits<A>::template read_element<1>(a);
+ TA const ac = quat_traits<A>::template read_element<2>(a);
+ TA const ad = quat_traits<A>::template read_element<3>(a);
+ TA const t2 = aa*ab;
+ TA const t3 = aa*ac;
+ TA const t4 = aa*ad;
+ TA const t5 = -ab*ab;
+ TA const t6 = ab*ac;
+ TA const t7 = ab*ad;
+ TA const t8 = -ac*ac;
+ TA const t9 = ac*ad;
+ TA const t10 = -ad*ad;
+ TB const bx = vec_traits<B>::template read_element<0>(b);
+ TB const by = vec_traits<B>::template read_element<1>(b);
+ TB const bz = vec_traits<B>::template read_element<2>(b);
+ R r;
+ vec_traits<R>::template write_element<0>(r) = 2*((t8+t10)*bx + (t6-t4)*by + (t3+t7)*bz) + bx;
+ vec_traits<R>::template write_element<1>(r) = 2*((t4+t6)*bx + (t5+t10)*by + (t9-t2)*bz) + by;
+ vec_traits<R>::template write_element<2>(r) = 2*((t7-t3)*bx + (t2+t9)*by + (t5+t8)*bz) + bz;
+ return r;
+ }
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/scalar_traits.hpp b/contrib/restricted/boost/boost/qvm/scalar_traits.hpp
index f637d40572..8552dfa0ab 100644
--- a/contrib/restricted/boost/boost/qvm/scalar_traits.hpp
+++ b/contrib/restricted/boost/boost/qvm/scalar_traits.hpp
@@ -1,92 +1,92 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_57E1C032B9F311DEB7D9BAFE55D89593
-#define UUID_57E1C032B9F311DEB7D9BAFE55D89593
-
-#include <boost/qvm/quat_traits.hpp>
-#include <boost/qvm/vec_traits.hpp>
-#include <boost/qvm/mat_traits.hpp>
-#include <boost/qvm/inline.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class Scalar>
- struct
- scalar_traits
- {
- static
- BOOST_QVM_INLINE_CRITICAL
- Scalar
- value( int v )
- {
- return Scalar(v);
- }
- };
-
- template <class T>
- struct
- is_scalar
- {
- static bool const value=false;
- };
- template <> struct is_scalar<char> { static bool const value=true; };
- template <> struct is_scalar<signed char> { static bool const value=true; };
- template <> struct is_scalar<unsigned char> { static bool const value=true; };
- template <> struct is_scalar<signed short> { static bool const value=true; };
- template <> struct is_scalar<unsigned short> { static bool const value=true; };
- template <> struct is_scalar<signed int> { static bool const value=true; };
- template <> struct is_scalar<unsigned int> { static bool const value=true; };
- template <> struct is_scalar<signed long> { static bool const value=true; };
- template <> struct is_scalar<unsigned long> { static bool const value=true; };
- template <> struct is_scalar<float> { static bool const value=true; };
- template <> struct is_scalar<double> { static bool const value=true; };
- template <> struct is_scalar<long double> { static bool const value=true; };
-
- namespace
- qvm_detail
- {
- template <class A,bool M=is_mat<A>::value,bool Q=is_quat<A>::value,bool V=is_vec<A>::value>
- struct
- scalar_impl
- {
- };
-
- template <class A>
- struct
- scalar_impl<A,true,false,false>
- {
- typedef typename mat_traits<A>::scalar_type type;
- };
-
- template <class A>
- struct
- scalar_impl<A,false,true,false>
- {
- typedef typename quat_traits<A>::scalar_type type;
- };
-
- template <class A>
- struct
- scalar_impl<A,false,false,true>
- {
- typedef typename vec_traits<A>::scalar_type type;
- };
- }
-
- template <class A>
- struct
- scalar
- {
- typedef typename qvm_detail::scalar_impl<A>::type type;
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_57E1C032B9F311DEB7D9BAFE55D89593
+#define UUID_57E1C032B9F311DEB7D9BAFE55D89593
+
+#include <boost/qvm/quat_traits.hpp>
+#include <boost/qvm/vec_traits.hpp>
+#include <boost/qvm/mat_traits.hpp>
+#include <boost/qvm/inline.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class Scalar>
+ struct
+ scalar_traits
+ {
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ Scalar
+ value( int v )
+ {
+ return Scalar(v);
+ }
+ };
+
+ template <class T>
+ struct
+ is_scalar
+ {
+ static bool const value=false;
+ };
+ template <> struct is_scalar<char> { static bool const value=true; };
+ template <> struct is_scalar<signed char> { static bool const value=true; };
+ template <> struct is_scalar<unsigned char> { static bool const value=true; };
+ template <> struct is_scalar<signed short> { static bool const value=true; };
+ template <> struct is_scalar<unsigned short> { static bool const value=true; };
+ template <> struct is_scalar<signed int> { static bool const value=true; };
+ template <> struct is_scalar<unsigned int> { static bool const value=true; };
+ template <> struct is_scalar<signed long> { static bool const value=true; };
+ template <> struct is_scalar<unsigned long> { static bool const value=true; };
+ template <> struct is_scalar<float> { static bool const value=true; };
+ template <> struct is_scalar<double> { static bool const value=true; };
+ template <> struct is_scalar<long double> { static bool const value=true; };
+
+ namespace
+ qvm_detail
+ {
+ template <class A,bool M=is_mat<A>::value,bool Q=is_quat<A>::value,bool V=is_vec<A>::value>
+ struct
+ scalar_impl
+ {
+ };
+
+ template <class A>
+ struct
+ scalar_impl<A,true,false,false>
+ {
+ typedef typename mat_traits<A>::scalar_type type;
+ };
+
+ template <class A>
+ struct
+ scalar_impl<A,false,true,false>
+ {
+ typedef typename quat_traits<A>::scalar_type type;
+ };
+
+ template <class A>
+ struct
+ scalar_impl<A,false,false,true>
+ {
+ typedef typename vec_traits<A>::scalar_type type;
+ };
+ }
+
+ template <class A>
+ struct
+ scalar
+ {
+ typedef typename qvm_detail::scalar_impl<A>::type type;
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/static_assert.hpp b/contrib/restricted/boost/boost/qvm/static_assert.hpp
index c11746333f..e97ff4c519 100644
--- a/contrib/restricted/boost/boost/qvm/static_assert.hpp
+++ b/contrib/restricted/boost/boost/qvm/static_assert.hpp
@@ -1,9 +1,9 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_STATIC_ASSERT
-#include <boost/static_assert.hpp>
-#define BOOST_QVM_STATIC_ASSERT BOOST_STATIC_ASSERT
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_STATIC_ASSERT
+#include <boost/static_assert.hpp>
+#define BOOST_QVM_STATIC_ASSERT BOOST_STATIC_ASSERT
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/swizzle.hpp b/contrib/restricted/boost/boost/qvm/swizzle.hpp
index 250ff6bd84..9275f263ae 100644
--- a/contrib/restricted/boost/boost/qvm/swizzle.hpp
+++ b/contrib/restricted/boost/boost/qvm/swizzle.hpp
@@ -1,13 +1,13 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_3B4919D8A41411DEB0818E4C56D89593
-#define UUID_3B4919D8A41411DEB0818E4C56D89593
-
-#include <boost/qvm/swizzle2.hpp>
-#include <boost/qvm/swizzle3.hpp>
-#include <boost/qvm/swizzle4.hpp>
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_3B4919D8A41411DEB0818E4C56D89593
+#define UUID_3B4919D8A41411DEB0818E4C56D89593
+
+#include <boost/qvm/swizzle2.hpp>
+#include <boost/qvm/swizzle3.hpp>
+#include <boost/qvm/swizzle4.hpp>
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/swizzle2.hpp b/contrib/restricted/boost/boost/qvm/swizzle2.hpp
index 6380f91606..0a5771645e 100644
--- a/contrib/restricted/boost/boost/qvm/swizzle2.hpp
+++ b/contrib/restricted/boost/boost/qvm/swizzle2.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/swizzle2.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/swizzle2.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/swizzle3.hpp b/contrib/restricted/boost/boost/qvm/swizzle3.hpp
index 46473a0696..7a561db07e 100644
--- a/contrib/restricted/boost/boost/qvm/swizzle3.hpp
+++ b/contrib/restricted/boost/boost/qvm/swizzle3.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/swizzle3.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/swizzle3.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/swizzle4.hpp b/contrib/restricted/boost/boost/qvm/swizzle4.hpp
index 6c87e076a7..ee3592ea6b 100644
--- a/contrib/restricted/boost/boost/qvm/swizzle4.hpp
+++ b/contrib/restricted/boost/boost/qvm/swizzle4.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/swizzle4.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/swizzle4.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/throw_exception.hpp b/contrib/restricted/boost/boost/qvm/throw_exception.hpp
index 74ccaa381f..83a498ea6b 100644
--- a/contrib/restricted/boost/boost/qvm/throw_exception.hpp
+++ b/contrib/restricted/boost/boost/qvm/throw_exception.hpp
@@ -1,9 +1,9 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_QVM_THROW_EXCEPTION
-#include <boost/throw_exception.hpp>
-#define BOOST_QVM_THROW_EXCEPTION BOOST_THROW_EXCEPTION
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_QVM_THROW_EXCEPTION
+#include <boost/throw_exception.hpp>
+#define BOOST_QVM_THROW_EXCEPTION BOOST_THROW_EXCEPTION
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/to_string.hpp b/contrib/restricted/boost/boost/qvm/to_string.hpp
index 11fade6bd9..d1826ea56e 100644
--- a/contrib/restricted/boost/boost/qvm/to_string.hpp
+++ b/contrib/restricted/boost/boost/qvm/to_string.hpp
@@ -1,31 +1,31 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_2812944066B011E29F616DCB6188709B
-#define UUID_2812944066B011E29F616DCB6188709B
-
-#include <boost/exception/to_string.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_to_string_detail
- {
- template <class T>
- std::string
- to_string( T const & x )
- {
- using boost::to_string;
- return to_string(x);
- }
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_2812944066B011E29F616DCB6188709B
+#define UUID_2812944066B011E29F616DCB6188709B
+
+#include <boost/exception/to_string.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_to_string_detail
+ {
+ template <class T>
+ std::string
+ to_string( T const & x )
+ {
+ using boost::to_string;
+ return to_string(x);
+ }
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/vec.hpp b/contrib/restricted/boost/boost/qvm/vec.hpp
index 267f15c7d7..950e58f429 100644
--- a/contrib/restricted/boost/boost/qvm/vec.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec.hpp
@@ -1,89 +1,89 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_44EB56F0A33711DEB31B41BB56D89593
-#define UUID_44EB56F0A33711DEB31B41BB56D89593
-
-#include <boost/qvm/detail/vec_assign.hpp>
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/static_assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class T,int D>
- struct
- vec
- {
- T a[D];
- template <class R>
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <class V>
- struct vec_traits;
-
- template <class T,int Dim>
- struct
- vec_traits< vec<T,Dim> >
- {
- typedef vec<T,Dim> this_vector;
- typedef T scalar_type;
- static int const dim=Dim;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return x.a[I];
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_vector & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return x.a[I];
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_vector const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return x.a[i];
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int i, this_vector & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return x.a[i];
- }
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_44EB56F0A33711DEB31B41BB56D89593
+#define UUID_44EB56F0A33711DEB31B41BB56D89593
+
+#include <boost/qvm/detail/vec_assign.hpp>
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/static_assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class T,int D>
+ struct
+ vec
+ {
+ T a[D];
+ template <class R>
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <class V>
+ struct vec_traits;
+
+ template <class T,int Dim>
+ struct
+ vec_traits< vec<T,Dim> >
+ {
+ typedef vec<T,Dim> this_vector;
+ typedef T scalar_type;
+ static int const dim=Dim;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return x.a[I];
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_vector & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return x.a[I];
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_vector const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return x.a[i];
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int i, this_vector & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return x.a[i];
+ }
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/vec_access.hpp b/contrib/restricted/boost/boost/qvm/vec_access.hpp
index 5b59165a46..add176b03a 100644
--- a/contrib/restricted/boost/boost/qvm/vec_access.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_access.hpp
@@ -1,82 +1,82 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_10F2D1EA17B511E0BA29FE0BDFD72085
-#define UUID_10F2D1EA17B511E0BA29FE0BDFD72085
-
-#include <boost/qvm/vec_traits.hpp>
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/static_assert.hpp>
-#include <boost/qvm/enable_if.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- ////////////////////////////////////////////////
-
- template <int I,class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value,
- typename vec_traits<V>::scalar_type>::type
- A( V const & a )
- {
- BOOST_STATIC_ASSERT(I>=0);
- BOOST_STATIC_ASSERT(I<vec_traits<V>::dim);
- return vec_traits<V>::template read_element<I>(a);
- }
-
- template <int I,class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value,
- typename vec_traits<V>::scalar_type &>::type
- A( V & a )
- {
- BOOST_STATIC_ASSERT(I>=0);
- BOOST_STATIC_ASSERT(I<vec_traits<V>::dim);
- return vec_traits<V>::template write_element<I>(a);
- }
-
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type X( V const & a ) { BOOST_STATIC_ASSERT(0<vec_traits<V>::dim); return vec_traits<V>::template read_element<0>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type Y( V const & a ) { BOOST_STATIC_ASSERT(1<vec_traits<V>::dim); return vec_traits<V>::template read_element<1>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type Z( V const & a ) { BOOST_STATIC_ASSERT(2<vec_traits<V>::dim); return vec_traits<V>::template read_element<2>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type W( V const & a ) { BOOST_STATIC_ASSERT(3<vec_traits<V>::dim); return vec_traits<V>::template read_element<3>(a); }
-
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type X( V & a ) { BOOST_STATIC_ASSERT(0<vec_traits<V>::dim); return vec_traits<V>::template write_element<0>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type Y( V & a ) { BOOST_STATIC_ASSERT(1<vec_traits<V>::dim); return vec_traits<V>::template write_element<1>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type Z( V & a ) { BOOST_STATIC_ASSERT(2<vec_traits<V>::dim); return vec_traits<V>::template write_element<2>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type W( V & a ) { BOOST_STATIC_ASSERT(3<vec_traits<V>::dim); return vec_traits<V>::template write_element<3>(a); }
-
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A0( V const & a ) { BOOST_STATIC_ASSERT(0<vec_traits<V>::dim); return vec_traits<V>::template read_element<0>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A1( V const & a ) { BOOST_STATIC_ASSERT(1<vec_traits<V>::dim); return vec_traits<V>::template read_element<1>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A2( V const & a ) { BOOST_STATIC_ASSERT(2<vec_traits<V>::dim); return vec_traits<V>::template read_element<2>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A3( V const & a ) { BOOST_STATIC_ASSERT(3<vec_traits<V>::dim); return vec_traits<V>::template read_element<3>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A4( V const & a ) { BOOST_STATIC_ASSERT(4<vec_traits<V>::dim); return vec_traits<V>::template read_element<4>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A5( V const & a ) { BOOST_STATIC_ASSERT(5<vec_traits<V>::dim); return vec_traits<V>::template read_element<5>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A6( V const & a ) { BOOST_STATIC_ASSERT(6<vec_traits<V>::dim); return vec_traits<V>::template read_element<6>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A7( V const & a ) { BOOST_STATIC_ASSERT(7<vec_traits<V>::dim); return vec_traits<V>::template read_element<7>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A8( V const & a ) { BOOST_STATIC_ASSERT(8<vec_traits<V>::dim); return vec_traits<V>::template read_element<8>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A9( V const & a ) { BOOST_STATIC_ASSERT(9<vec_traits<V>::dim); return vec_traits<V>::template read_element<9>(a); }
-
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A0( V & a ) { BOOST_STATIC_ASSERT(0<vec_traits<V>::dim); return vec_traits<V>::template write_element<0>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A1( V & a ) { BOOST_STATIC_ASSERT(1<vec_traits<V>::dim); return vec_traits<V>::template write_element<1>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A2( V & a ) { BOOST_STATIC_ASSERT(2<vec_traits<V>::dim); return vec_traits<V>::template write_element<2>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A3( V & a ) { BOOST_STATIC_ASSERT(3<vec_traits<V>::dim); return vec_traits<V>::template write_element<3>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A4( V & a ) { BOOST_STATIC_ASSERT(4<vec_traits<V>::dim); return vec_traits<V>::template write_element<4>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A5( V & a ) { BOOST_STATIC_ASSERT(5<vec_traits<V>::dim); return vec_traits<V>::template write_element<5>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A6( V & a ) { BOOST_STATIC_ASSERT(6<vec_traits<V>::dim); return vec_traits<V>::template write_element<6>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A7( V & a ) { BOOST_STATIC_ASSERT(7<vec_traits<V>::dim); return vec_traits<V>::template write_element<7>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A8( V & a ) { BOOST_STATIC_ASSERT(8<vec_traits<V>::dim); return vec_traits<V>::template write_element<8>(a); }
- template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A9( V & a ) { BOOST_STATIC_ASSERT(9<vec_traits<V>::dim); return vec_traits<V>::template write_element<9>(a); }
-
- ////////////////////////////////////////////////
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_10F2D1EA17B511E0BA29FE0BDFD72085
+#define UUID_10F2D1EA17B511E0BA29FE0BDFD72085
+
+#include <boost/qvm/vec_traits.hpp>
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/static_assert.hpp>
+#include <boost/qvm/enable_if.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ ////////////////////////////////////////////////
+
+ template <int I,class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value,
+ typename vec_traits<V>::scalar_type>::type
+ A( V const & a )
+ {
+ BOOST_STATIC_ASSERT(I>=0);
+ BOOST_STATIC_ASSERT(I<vec_traits<V>::dim);
+ return vec_traits<V>::template read_element<I>(a);
+ }
+
+ template <int I,class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value,
+ typename vec_traits<V>::scalar_type &>::type
+ A( V & a )
+ {
+ BOOST_STATIC_ASSERT(I>=0);
+ BOOST_STATIC_ASSERT(I<vec_traits<V>::dim);
+ return vec_traits<V>::template write_element<I>(a);
+ }
+
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type X( V const & a ) { BOOST_STATIC_ASSERT(0<vec_traits<V>::dim); return vec_traits<V>::template read_element<0>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type Y( V const & a ) { BOOST_STATIC_ASSERT(1<vec_traits<V>::dim); return vec_traits<V>::template read_element<1>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type Z( V const & a ) { BOOST_STATIC_ASSERT(2<vec_traits<V>::dim); return vec_traits<V>::template read_element<2>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type W( V const & a ) { BOOST_STATIC_ASSERT(3<vec_traits<V>::dim); return vec_traits<V>::template read_element<3>(a); }
+
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type X( V & a ) { BOOST_STATIC_ASSERT(0<vec_traits<V>::dim); return vec_traits<V>::template write_element<0>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type Y( V & a ) { BOOST_STATIC_ASSERT(1<vec_traits<V>::dim); return vec_traits<V>::template write_element<1>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type Z( V & a ) { BOOST_STATIC_ASSERT(2<vec_traits<V>::dim); return vec_traits<V>::template write_element<2>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type W( V & a ) { BOOST_STATIC_ASSERT(3<vec_traits<V>::dim); return vec_traits<V>::template write_element<3>(a); }
+
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A0( V const & a ) { BOOST_STATIC_ASSERT(0<vec_traits<V>::dim); return vec_traits<V>::template read_element<0>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A1( V const & a ) { BOOST_STATIC_ASSERT(1<vec_traits<V>::dim); return vec_traits<V>::template read_element<1>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A2( V const & a ) { BOOST_STATIC_ASSERT(2<vec_traits<V>::dim); return vec_traits<V>::template read_element<2>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A3( V const & a ) { BOOST_STATIC_ASSERT(3<vec_traits<V>::dim); return vec_traits<V>::template read_element<3>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A4( V const & a ) { BOOST_STATIC_ASSERT(4<vec_traits<V>::dim); return vec_traits<V>::template read_element<4>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A5( V const & a ) { BOOST_STATIC_ASSERT(5<vec_traits<V>::dim); return vec_traits<V>::template read_element<5>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A6( V const & a ) { BOOST_STATIC_ASSERT(6<vec_traits<V>::dim); return vec_traits<V>::template read_element<6>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A7( V const & a ) { BOOST_STATIC_ASSERT(7<vec_traits<V>::dim); return vec_traits<V>::template read_element<7>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A8( V const & a ) { BOOST_STATIC_ASSERT(8<vec_traits<V>::dim); return vec_traits<V>::template read_element<8>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type>::type A9( V const & a ) { BOOST_STATIC_ASSERT(9<vec_traits<V>::dim); return vec_traits<V>::template read_element<9>(a); }
+
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A0( V & a ) { BOOST_STATIC_ASSERT(0<vec_traits<V>::dim); return vec_traits<V>::template write_element<0>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A1( V & a ) { BOOST_STATIC_ASSERT(1<vec_traits<V>::dim); return vec_traits<V>::template write_element<1>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A2( V & a ) { BOOST_STATIC_ASSERT(2<vec_traits<V>::dim); return vec_traits<V>::template write_element<2>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A3( V & a ) { BOOST_STATIC_ASSERT(3<vec_traits<V>::dim); return vec_traits<V>::template write_element<3>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A4( V & a ) { BOOST_STATIC_ASSERT(4<vec_traits<V>::dim); return vec_traits<V>::template write_element<4>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A5( V & a ) { BOOST_STATIC_ASSERT(5<vec_traits<V>::dim); return vec_traits<V>::template write_element<5>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A6( V & a ) { BOOST_STATIC_ASSERT(6<vec_traits<V>::dim); return vec_traits<V>::template write_element<6>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A7( V & a ) { BOOST_STATIC_ASSERT(7<vec_traits<V>::dim); return vec_traits<V>::template write_element<7>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A8( V & a ) { BOOST_STATIC_ASSERT(8<vec_traits<V>::dim); return vec_traits<V>::template write_element<8>(a); }
+ template <class V> BOOST_QVM_INLINE_TRIVIAL typename enable_if_c<is_vec<V>::value,typename vec_traits<V>::scalar_type &>::type A9( V & a ) { BOOST_STATIC_ASSERT(9<vec_traits<V>::dim); return vec_traits<V>::template write_element<9>(a); }
+
+ ////////////////////////////////////////////////
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/vec_mat_operations.hpp b/contrib/restricted/boost/boost/qvm/vec_mat_operations.hpp
index 39bc18db28..db84bd0205 100644
--- a/contrib/restricted/boost/boost/qvm/vec_mat_operations.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_mat_operations.hpp
@@ -1,168 +1,168 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_A61EC088D31511DFA59D2B03E0D72085
-#define UUID_A61EC088D31511DFA59D2B03E0D72085
-
-#include <boost/qvm/vec_mat_operations2.hpp>
-#include <boost/qvm/vec_mat_operations3.hpp>
-#include <boost/qvm/vec_mat_operations4.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- mul_mv_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_mat<A>::value && is_vec<B>::value &&
- mat_traits<A>::cols==vec_traits<B>::dim &&
- !qvm_detail::mul_mv_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
- deduce_vec2<A,B,mat_traits<A>::rows> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,mat_traits<A>::rows>::type R;
- R r;
- for( int i=0; i<mat_traits<A>::rows; ++i )
- {
- typedef typename vec_traits<R>::scalar_type Tr;
- Tr x(scalar_traits<Tr>::value(0));
- for( int j=0; j<mat_traits<A>::cols; ++j )
- x += mat_traits<A>::read_element_idx(i,j,a)*vec_traits<B>::read_element_idx(j,b);
- vec_traits<R>::write_element_idx(i,r) = x;
- }
- return r;
- }
-
- namespace
- qvm_detail
- {
- template <int M,int N>
- struct
- mul_vm_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_vec<A>::value && is_mat<B>::value &&
- vec_traits<A>::dim==mat_traits<B>::rows &&
- !qvm_detail::mul_vm_defined<mat_traits<B>::rows,mat_traits<B>::cols>::value,
- deduce_vec2<A,B,mat_traits<B>::cols> >::type
- operator*( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,mat_traits<B>::cols>::type R;
- R r;
- for( int i=0; i<mat_traits<B>::cols; ++i )
- {
- typedef typename vec_traits<R>::scalar_type Tr;
- Tr x(scalar_traits<Tr>::value(0));
- for( int j=0; j<mat_traits<B>::rows; ++j )
- x += vec_traits<A>::read_element_idx(j,a)*mat_traits<B>::read_element_idx(j,i,b);
- vec_traits<R>::write_element_idx(i,r) = x;
- }
- return r;
- }
-
- ////////////////////////////////////////////////
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4 &&
- vec_traits<B>::dim==3,
- deduce_vec2<A,B,3> >::type
- transform_point( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename vec_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
- Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
- Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
- Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
- Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
- Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
- Tb const b0 = vec_traits<B>::template read_element<0>(b);
- Tb const b1 = vec_traits<B>::template read_element<1>(b);
- Tb const b2 = vec_traits<B>::template read_element<2>(b);
- typedef typename deduce_vec2<A,B,3>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
- R r;
- vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1+a02*b2+a03;
- vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1+a12*b2+a13;
- vec_traits<R>::template write_element<2>(r)=a20*b0+a21*b1+a22*b2+a23;
- return r;
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- mat_traits<A>::rows==4 && mat_traits<A>::cols==4 &&
- vec_traits<B>::dim==3,
- deduce_vec2<A,B,3> >::type
- transform_vector( A const & a, B const & b )
- {
- typedef typename mat_traits<A>::scalar_type Ta;
- typedef typename vec_traits<B>::scalar_type Tb;
- Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
- Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
- Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
- Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
- Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
- Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
- Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
- Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
- Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
- Tb const b0 = vec_traits<B>::template read_element<0>(b);
- Tb const b1 = vec_traits<B>::template read_element<1>(b);
- Tb const b2 = vec_traits<B>::template read_element<2>(b);
- typedef typename deduce_vec2<A,B,3>::type R;
- BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
- R r;
- vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1+a02*b2;
- vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1+a12*b2;
- vec_traits<R>::template write_element<2>(r)=a20*b0+a21*b1+a22*b2;
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- sfinae
- {
- using ::boost::qvm::operator*;
- using ::boost::qvm::transform_point;
- using ::boost::qvm::transform_vector;
- }
-
- ////////////////////////////////////////////////
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_A61EC088D31511DFA59D2B03E0D72085
+#define UUID_A61EC088D31511DFA59D2B03E0D72085
+
+#include <boost/qvm/vec_mat_operations2.hpp>
+#include <boost/qvm/vec_mat_operations3.hpp>
+#include <boost/qvm/vec_mat_operations4.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ mul_mv_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_mat<A>::value && is_vec<B>::value &&
+ mat_traits<A>::cols==vec_traits<B>::dim &&
+ !qvm_detail::mul_mv_defined<mat_traits<A>::rows,mat_traits<A>::cols>::value,
+ deduce_vec2<A,B,mat_traits<A>::rows> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,mat_traits<A>::rows>::type R;
+ R r;
+ for( int i=0; i<mat_traits<A>::rows; ++i )
+ {
+ typedef typename vec_traits<R>::scalar_type Tr;
+ Tr x(scalar_traits<Tr>::value(0));
+ for( int j=0; j<mat_traits<A>::cols; ++j )
+ x += mat_traits<A>::read_element_idx(i,j,a)*vec_traits<B>::read_element_idx(j,b);
+ vec_traits<R>::write_element_idx(i,r) = x;
+ }
+ return r;
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int M,int N>
+ struct
+ mul_vm_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_vec<A>::value && is_mat<B>::value &&
+ vec_traits<A>::dim==mat_traits<B>::rows &&
+ !qvm_detail::mul_vm_defined<mat_traits<B>::rows,mat_traits<B>::cols>::value,
+ deduce_vec2<A,B,mat_traits<B>::cols> >::type
+ operator*( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,mat_traits<B>::cols>::type R;
+ R r;
+ for( int i=0; i<mat_traits<B>::cols; ++i )
+ {
+ typedef typename vec_traits<R>::scalar_type Tr;
+ Tr x(scalar_traits<Tr>::value(0));
+ for( int j=0; j<mat_traits<B>::rows; ++j )
+ x += vec_traits<A>::read_element_idx(j,a)*mat_traits<B>::read_element_idx(j,i,b);
+ vec_traits<R>::write_element_idx(i,r) = x;
+ }
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4 &&
+ vec_traits<B>::dim==3,
+ deduce_vec2<A,B,3> >::type
+ transform_point( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename vec_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a03 = mat_traits<A>::template read_element<0,3>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
+ Ta const a13 = mat_traits<A>::template read_element<1,3>(a);
+ Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
+ Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
+ Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
+ Ta const a23 = mat_traits<A>::template read_element<2,3>(a);
+ Tb const b0 = vec_traits<B>::template read_element<0>(b);
+ Tb const b1 = vec_traits<B>::template read_element<1>(b);
+ Tb const b2 = vec_traits<B>::template read_element<2>(b);
+ typedef typename deduce_vec2<A,B,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1+a02*b2+a03;
+ vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1+a12*b2+a13;
+ vec_traits<R>::template write_element<2>(r)=a20*b0+a21*b1+a22*b2+a23;
+ return r;
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ mat_traits<A>::rows==4 && mat_traits<A>::cols==4 &&
+ vec_traits<B>::dim==3,
+ deduce_vec2<A,B,3> >::type
+ transform_vector( A const & a, B const & b )
+ {
+ typedef typename mat_traits<A>::scalar_type Ta;
+ typedef typename vec_traits<B>::scalar_type Tb;
+ Ta const a00 = mat_traits<A>::template read_element<0,0>(a);
+ Ta const a01 = mat_traits<A>::template read_element<0,1>(a);
+ Ta const a02 = mat_traits<A>::template read_element<0,2>(a);
+ Ta const a10 = mat_traits<A>::template read_element<1,0>(a);
+ Ta const a11 = mat_traits<A>::template read_element<1,1>(a);
+ Ta const a12 = mat_traits<A>::template read_element<1,2>(a);
+ Ta const a20 = mat_traits<A>::template read_element<2,0>(a);
+ Ta const a21 = mat_traits<A>::template read_element<2,1>(a);
+ Ta const a22 = mat_traits<A>::template read_element<2,2>(a);
+ Tb const b0 = vec_traits<B>::template read_element<0>(b);
+ Tb const b1 = vec_traits<B>::template read_element<1>(b);
+ Tb const b2 = vec_traits<B>::template read_element<2>(b);
+ typedef typename deduce_vec2<A,B,3>::type R;
+ BOOST_QVM_STATIC_ASSERT(vec_traits<R>::dim==3);
+ R r;
+ vec_traits<R>::template write_element<0>(r)=a00*b0+a01*b1+a02*b2;
+ vec_traits<R>::template write_element<1>(r)=a10*b0+a11*b1+a12*b2;
+ vec_traits<R>::template write_element<2>(r)=a20*b0+a21*b1+a22*b2;
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::operator*;
+ using ::boost::qvm::transform_point;
+ using ::boost::qvm::transform_vector;
+ }
+
+ ////////////////////////////////////////////////
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/vec_mat_operations2.hpp b/contrib/restricted/boost/boost/qvm/vec_mat_operations2.hpp
index 4f22e3311d..8d4a9b6014 100644
--- a/contrib/restricted/boost/boost/qvm/vec_mat_operations2.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_mat_operations2.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/vec_mat_operations2.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/vec_mat_operations2.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/vec_mat_operations3.hpp b/contrib/restricted/boost/boost/qvm/vec_mat_operations3.hpp
index 81fc908e4a..8265ab293d 100644
--- a/contrib/restricted/boost/boost/qvm/vec_mat_operations3.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_mat_operations3.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/vec_mat_operations3.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/vec_mat_operations3.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/vec_mat_operations4.hpp b/contrib/restricted/boost/boost/qvm/vec_mat_operations4.hpp
index 92b9bd1b07..194005365e 100644
--- a/contrib/restricted/boost/boost/qvm/vec_mat_operations4.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_mat_operations4.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/vec_mat_operations4.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/vec_mat_operations4.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/vec_operations.hpp b/contrib/restricted/boost/boost/qvm/vec_operations.hpp
index abdd82483c..075e03fba9 100644
--- a/contrib/restricted/boost/boost/qvm/vec_operations.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_operations.hpp
@@ -1,963 +1,963 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_384AFF3AD23A11DFA80B754FE0D72085
-#define UUID_384AFF3AD23A11DFA80B754FE0D72085
-
-#include <boost/qvm/detail/vec_assign.hpp>
-#include <boost/qvm/vec_operations2.hpp>
-#include <boost/qvm/vec_operations3.hpp>
-#include <boost/qvm/vec_operations4.hpp>
-#include <boost/qvm/assert.hpp>
-#include <boost/qvm/scalar_traits.hpp>
-#include <string>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- namespace
- qvm_detail
- {
- BOOST_QVM_INLINE_CRITICAL
- void const *
- get_valid_ptr_vec_operations()
- {
- static int const obj=0;
- return &obj;
- }
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_to_string_detail
- {
- template <class T>
- std::string to_string( T const & x );
- }
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- to_string_v_defined
- {
- static bool const value=false;
- };
-
- template <int I,int DimMinusOne>
- struct
- to_string_vector_elements
- {
- template <class A>
- static
- std::string
- f( A const & a )
- {
- using namespace qvm_to_string_detail;
- return to_string(vec_traits<A>::template read_element<I>(a))+','+to_string_vector_elements<I+1,DimMinusOne>::f(a);
- }
- };
-
- template <int DimMinusOne>
- struct
- to_string_vector_elements<DimMinusOne,DimMinusOne>
- {
- template <class A>
- static
- std::string
- f( A const & a )
- {
- using namespace qvm_to_string_detail;
- return to_string(vec_traits<A>::template read_element<DimMinusOne>(a));
- }
- };
- }
-
- template <class A>
- inline
- typename boost::enable_if_c<
- is_vec<A>::value &&
- !qvm_detail::to_string_v_defined<vec_traits<A>::dim>::value,
- std::string>::type
- to_string( A const & a )
- {
- return '('+qvm_detail::to_string_vector_elements<0,vec_traits<A>::dim-1>::f(a)+')';
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- convert_to_v_defined
- {
- static bool const value=false;
- };
- }
-
- template <class R,class A>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<R>::value && is_vec<A>::value &&
- vec_traits<R>::dim==vec_traits<A>::dim &&
- !qvm_detail::convert_to_v_defined<vec_traits<R>::dim>::value,
- R>::type
- convert_to( A const & a )
- {
- R r; assign(r,a);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_vec<A>::value && is_vec<B>::value &&
- vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
- deduce_vec2<A,B,3> >::type
- cross( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,3>::type R;
- R r;
- vec_traits<R>::template write_element<0>(r)=
- vec_traits<A>::template read_element<1>(a)*vec_traits<B>::template read_element<2>(b)-
- vec_traits<A>::template read_element<2>(a)*vec_traits<B>::template read_element<1>(b);
- vec_traits<R>::template write_element<1>(r)=
- vec_traits<A>::template read_element<2>(a)*vec_traits<B>::template read_element<0>(b)-
- vec_traits<A>::template read_element<0>(a)*vec_traits<B>::template read_element<2>(b);
- vec_traits<R>::template write_element<2>(r)=
- vec_traits<A>::template read_element<0>(a)*vec_traits<B>::template read_element<1>(b)-
- vec_traits<A>::template read_element<1>(a)*vec_traits<B>::template read_element<0>(b);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- template <class A,class B,class Cmp>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && is_vec<B>::value &&
- vec_traits<A>::dim==vec_traits<B>::dim,
- bool>::type
- cmp( A const & a, B const & b, Cmp f )
- {
- typedef typename deduce_scalar<
- typename vec_traits<A>::scalar_type,
- typename vec_traits<B>::scalar_type>::type T;
- int const dim=vec_traits<A>::dim;
- T v1[dim]; assign(v1,a);
- T v2[dim]; assign(v2,b);
- for( int i=0; i!=dim; ++i )
- if( !f(v1[i],v2[i]) )
- return false;
- return true;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T,int Dim>
- class
- zero_vec_
- {
- zero_vec_( zero_vec_ const & );
- zero_vec_ & operator=( zero_vec_ const & );
- ~zero_vec_();
-
- public:
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class V>
- struct vec_traits;
-
- template <class T,int Dim>
- struct
- vec_traits< qvm_detail::zero_vec_<T,Dim> >
- {
- typedef qvm_detail::zero_vec_<T,Dim> this_vector;
- typedef T scalar_type;
- static int const dim=Dim;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<Dim);
- return scalar_traits<scalar_type>::value(0);
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_vector const & )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<Dim);
- return scalar_traits<scalar_type>::value(0);
- }
- };
-
- template <class T,int Dim,int D>
- struct
- deduce_vec<qvm_detail::zero_vec_<T,Dim>,D>
- {
- typedef vec<T,D> type;
- };
-
- template <class T,int Dim>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::zero_vec_<T,Dim> const &
- zero_vec()
- {
- return *(qvm_detail::zero_vec_<T,Dim> const *)qvm_detail::get_valid_ptr_vec_operations();
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value,
- void>::type
- set_zero( A & a )
- {
- assign(a,zero_vec<typename vec_traits<A>::scalar_type,vec_traits<A>::dim>());
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class OriginalType,class Scalar>
- class
- vector_scalar_cast_
- {
- vector_scalar_cast_( vector_scalar_cast_ const & );
- vector_scalar_cast_ & operator=( vector_scalar_cast_ const & );
- ~vector_scalar_cast_();
-
- public:
-
- template <class T>
- BOOST_QVM_INLINE_TRIVIAL
- vector_scalar_cast_ &
- operator=( T const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
-
- template <bool> struct scalar_cast_vector_filter { };
- template <> struct scalar_cast_vector_filter<true> { typedef int type; };
- }
-
- template <class OriginalType,class Scalar>
- struct
- vec_traits< qvm_detail::vector_scalar_cast_<OriginalType,Scalar> >
- {
- typedef Scalar scalar_type;
- typedef qvm_detail::vector_scalar_cast_<OriginalType,Scalar> this_vector;
- static int const dim=vec_traits<OriginalType>::dim;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return scalar_type(vec_traits<OriginalType>::template read_element<I>(reinterpret_cast<OriginalType const &>(x)));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_vector const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return scalar_type(vec_traits<OriginalType>::read_element_idx(i,reinterpret_cast<OriginalType const &>(x)));
- }
- };
-
- template <class OriginalType,class Scalar,int D>
- struct
- deduce_vec<qvm_detail::vector_scalar_cast_<OriginalType,Scalar>,D>
- {
- typedef vec<Scalar,D> type;
- };
-
- template <class Scalar,class T>
- BOOST_QVM_INLINE_TRIVIAL
- qvm_detail::vector_scalar_cast_<T,Scalar> const &
- scalar_cast( T const & x, typename qvm_detail::scalar_cast_vector_filter<is_vec<T>::value>::type=0 )
- {
- return reinterpret_cast<qvm_detail::vector_scalar_cast_<T,Scalar> const &>(x);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- div_eq_vs_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && is_scalar<B>::value &&
- !qvm_detail::div_eq_vs_defined<vec_traits<A>::dim>::value,
- A &>::type
- operator/=( A & a, B b )
- {
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<A>::write_element_idx(i,a)/=b;
- return a;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- div_vs_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_vec<A>::value && is_scalar<B>::value &&
- !qvm_detail::div_vs_defined<vec_traits<A>::dim>::value,
- deduce_vec<A> >::type
- operator/( A const & a, B b )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<R>::write_element_idx(i,r)=vec_traits<A>::read_element_idx(i,a)/b;
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- dot_vv_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_vec<A>::value && is_vec<B>::value &&
- vec_traits<A>::dim==vec_traits<B>::dim &&
- !qvm_detail::dot_vv_defined<vec_traits<A>::dim>::value,
- deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type> >::type
- dot( A const & a, B const & b )
- {
- typedef typename deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type>::type T;
- T m(scalar_traits<T>::value(0));
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- m+=vec_traits<A>::read_element_idx(i,a)*vec_traits<B>::read_element_idx(i,b);
- return m;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- eq_vv_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && is_vec<B>::value &&
- vec_traits<A>::dim==vec_traits<B>::dim &&
- !qvm_detail::eq_vv_defined<vec_traits<A>::dim>::value,
- bool>::type
- operator==( A const & a, B const & b )
- {
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- if( vec_traits<A>::read_element_idx(i,a)!=vec_traits<B>::read_element_idx(i,b) )
- return false;
- return true;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- mag_sqr_v_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value &&
- !qvm_detail::mag_sqr_v_defined<vec_traits<A>::dim>::value,
- typename vec_traits<A>::scalar_type>::type
- mag_sqr( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T m(scalar_traits<T>::value(0));
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- {
- T x=vec_traits<A>::read_element_idx(i,a);
- m+=x*x;
- }
- return m;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- mag_v_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value &&
- !qvm_detail::mag_v_defined<vec_traits<A>::dim>::value,
- typename vec_traits<A>::scalar_type>::type
- mag( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T m(scalar_traits<T>::value(0));
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- {
- T x=vec_traits<A>::read_element_idx(i,a);
- m+=x*x;
- }
- return sqrt<T>(m);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- minus_eq_vv_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && is_vec<B>::value &&
- vec_traits<A>::dim==vec_traits<B>::dim &&
- !qvm_detail::minus_eq_vv_defined<vec_traits<A>::dim>::value,
- A &>::type
- operator-=( A & a, B const & b )
- {
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<A>::write_element_idx(i,a)-=vec_traits<B>::read_element_idx(i,b);
- return a;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- minus_v_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_vec<A>::value &&
- !qvm_detail::minus_v_defined<vec_traits<A>::dim>::value,
- deduce_vec<A> >::type
- operator-( A const & a )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<R>::write_element_idx(i,r)=-vec_traits<A>::read_element_idx(i,a);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- minus_vv_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_vec<A>::value && is_vec<B>::value &&
- vec_traits<A>::dim==vec_traits<B>::dim &&
- !qvm_detail::minus_vv_defined<vec_traits<A>::dim>::value,
- deduce_vec2<A,B,vec_traits<A>::dim> >::type
- operator-( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,vec_traits<A>::dim>::type R;
- R r;
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<R>::write_element_idx(i,r)=vec_traits<A>::read_element_idx(i,a)-vec_traits<B>::read_element_idx(i,b);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- mul_eq_vs_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && is_scalar<B>::value &&
- !qvm_detail::mul_eq_vs_defined<vec_traits<A>::dim>::value,
- A &>::type
- operator*=( A & a, B b )
- {
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<A>::write_element_idx(i,a)*=b;
- return a;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- mul_vs_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_vec<A>::value && is_scalar<B>::value &&
- !qvm_detail::mul_vs_defined<vec_traits<A>::dim>::value,
- deduce_vec<A> >::type
- operator*( A const & a, B b )
- {
- typedef typename deduce_vec<A>::type R;
- R r;
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<R>::write_element_idx(i,r)=vec_traits<A>::read_element_idx(i,a)*b;
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- mul_sv_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_scalar<A>::value && is_vec<B>::value &&
- !qvm_detail::mul_sv_defined<vec_traits<B>::dim>::value,
- deduce_vec<B> >::type
- operator*( A a, B const & b )
- {
- typedef typename deduce_vec<B>::type R;
- R r;
- for( int i=0; i!=vec_traits<B>::dim; ++i )
- vec_traits<R>::write_element_idx(i,r)=a*vec_traits<B>::read_element_idx(i,b);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- neq_vv_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && is_vec<B>::value &&
- vec_traits<A>::dim==vec_traits<B>::dim &&
- !qvm_detail::neq_vv_defined<vec_traits<A>::dim>::value,
- bool>::type
- operator!=( A const & a, B const & b )
- {
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- if( vec_traits<A>::read_element_idx(i,a)!=vec_traits<B>::read_element_idx(i,b) )
- return true;
- return false;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- normalize_v_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_vec<A>::value &&
- !qvm_detail::normalize_v_defined<vec_traits<A>::dim>::value,
- deduce_vec<A> >::type
- normalized( A const & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T m(scalar_traits<T>::value(0));
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- {
- T x=vec_traits<A>::read_element_idx(i,a);
- m+=x*x;
- }
- if( m==scalar_traits<T>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T rm=scalar_traits<T>::value(1)/sqrt<T>(m);
- typedef typename deduce_vec<A>::type R;
- R r;
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<R>::write_element_idx(i,r)=vec_traits<A>::read_element_idx(i,a)*rm;
- return r;
- }
-
- template <class A>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value &&
- !qvm_detail::normalize_v_defined<vec_traits<A>::dim>::value,
- void>::type
- normalize( A & a )
- {
- typedef typename vec_traits<A>::scalar_type T;
- T m(scalar_traits<T>::value(0));
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- {
- T x=vec_traits<A>::read_element_idx(i,a);
- m+=x*x;
- }
- if( m==scalar_traits<T>::value(0) )
- BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
- T rm=scalar_traits<T>::value(1)/sqrt<T>(m);
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<A>::write_element_idx(i,a)*=rm;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- plus_eq_vv_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename enable_if_c<
- is_vec<A>::value && is_vec<B>::value &&
- vec_traits<A>::dim==vec_traits<B>::dim &&
- !qvm_detail::plus_eq_vv_defined<vec_traits<A>::dim>::value,
- A &>::type
- operator+=( A & a, B const & b )
- {
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<A>::write_element_idx(i,a)+=vec_traits<B>::read_element_idx(i,b);
- return a;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <int D>
- struct
- plus_vv_defined
- {
- static bool const value=false;
- };
- }
-
- template <class A,class B>
- BOOST_QVM_INLINE_OPERATIONS
- typename lazy_enable_if_c<
- is_vec<A>::value && is_vec<B>::value &&
- vec_traits<A>::dim==vec_traits<B>::dim &&
- !qvm_detail::plus_vv_defined<vec_traits<A>::dim>::value,
- deduce_vec2<A,B,vec_traits<A>::dim> >::type
- operator+( A const & a, B const & b )
- {
- typedef typename deduce_vec2<A,B,vec_traits<A>::dim>::type R;
- R r;
- for( int i=0; i!=vec_traits<A>::dim; ++i )
- vec_traits<R>::write_element_idx(i,r)=vec_traits<A>::read_element_idx(i,a)+vec_traits<B>::read_element_idx(i,b);
- return r;
- }
-
- ////////////////////////////////////////////////
-
- namespace
- qvm_detail
- {
- template <class T>
- class
- vref_
- {
- vref_( vref_ const & );
- vref_ & operator=( vref_ const & );
- ~vref_();
-
- public:
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- vref_ &
- operator=( R const & x )
- {
- assign(*this,x);
- return *this;
- }
-
- template <class R>
- BOOST_QVM_INLINE_TRIVIAL
- operator R() const
- {
- R r;
- assign(r,*this);
- return r;
- }
- };
- }
-
- template <class V>
- struct
- vec_traits< qvm_detail::vref_<V> >
- {
- typedef typename vec_traits<V>::scalar_type scalar_type;
- typedef qvm_detail::vref_<V> this_vector;
- static int const dim=vec_traits<V>::dim;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return vec_traits<V>::template read_element<I>(reinterpret_cast<V const &>(x));
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_vector & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<dim);
- return vec_traits<V>::template write_element<I>(reinterpret_cast<V &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_vector const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return vec_traits<V>::read_element_idx(i,reinterpret_cast<V const &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int i, this_vector & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<dim);
- return vec_traits<V>::write_element_idx(i,reinterpret_cast<V &>(x));
- }
- };
-
- template <class V,int D>
- struct
- deduce_vec<qvm_detail::vref_<V>,D>
- {
- typedef vec<typename vec_traits<V>::scalar_type,D> type;
- };
-
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value,
- qvm_detail::vref_<V> const &>::type
- vref( V const & a )
- {
- return reinterpret_cast<qvm_detail::vref_<V> const &>(a);
- }
-
- template <class V>
- BOOST_QVM_INLINE_TRIVIAL
- typename enable_if_c<
- is_vec<V>::value,
- qvm_detail::vref_<V> &>::type
- vref( V & a )
- {
- return reinterpret_cast<qvm_detail::vref_<V> &>(a);
- }
-
- ////////////////////////////////////////////////
-
- namespace
- sfinae
- {
- using ::boost::qvm::to_string;
- using ::boost::qvm::assign;
- using ::boost::qvm::convert_to;
- using ::boost::qvm::cross;
- using ::boost::qvm::cmp;
- using ::boost::qvm::set_zero;
- using ::boost::qvm::scalar_cast;
- using ::boost::qvm::operator/=;
- using ::boost::qvm::operator/;
- using ::boost::qvm::dot;
- using ::boost::qvm::operator==;
- using ::boost::qvm::mag_sqr;
- using ::boost::qvm::mag;
- using ::boost::qvm::operator-=;
- using ::boost::qvm::operator-;
- using ::boost::qvm::operator*=;
- using ::boost::qvm::operator*;
- using ::boost::qvm::operator!=;
- using ::boost::qvm::normalized;
- using ::boost::qvm::normalize;
- using ::boost::qvm::operator+=;
- using ::boost::qvm::operator+;
- using ::boost::qvm::vref;
- }
-
- ////////////////////////////////////////////////
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_384AFF3AD23A11DFA80B754FE0D72085
+#define UUID_384AFF3AD23A11DFA80B754FE0D72085
+
+#include <boost/qvm/detail/vec_assign.hpp>
+#include <boost/qvm/vec_operations2.hpp>
+#include <boost/qvm/vec_operations3.hpp>
+#include <boost/qvm/vec_operations4.hpp>
+#include <boost/qvm/assert.hpp>
+#include <boost/qvm/scalar_traits.hpp>
+#include <string>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ namespace
+ qvm_detail
+ {
+ BOOST_QVM_INLINE_CRITICAL
+ void const *
+ get_valid_ptr_vec_operations()
+ {
+ static int const obj=0;
+ return &obj;
+ }
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_to_string_detail
+ {
+ template <class T>
+ std::string to_string( T const & x );
+ }
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ to_string_v_defined
+ {
+ static bool const value=false;
+ };
+
+ template <int I,int DimMinusOne>
+ struct
+ to_string_vector_elements
+ {
+ template <class A>
+ static
+ std::string
+ f( A const & a )
+ {
+ using namespace qvm_to_string_detail;
+ return to_string(vec_traits<A>::template read_element<I>(a))+','+to_string_vector_elements<I+1,DimMinusOne>::f(a);
+ }
+ };
+
+ template <int DimMinusOne>
+ struct
+ to_string_vector_elements<DimMinusOne,DimMinusOne>
+ {
+ template <class A>
+ static
+ std::string
+ f( A const & a )
+ {
+ using namespace qvm_to_string_detail;
+ return to_string(vec_traits<A>::template read_element<DimMinusOne>(a));
+ }
+ };
+ }
+
+ template <class A>
+ inline
+ typename boost::enable_if_c<
+ is_vec<A>::value &&
+ !qvm_detail::to_string_v_defined<vec_traits<A>::dim>::value,
+ std::string>::type
+ to_string( A const & a )
+ {
+ return '('+qvm_detail::to_string_vector_elements<0,vec_traits<A>::dim-1>::f(a)+')';
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ convert_to_v_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class R,class A>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<R>::value && is_vec<A>::value &&
+ vec_traits<R>::dim==vec_traits<A>::dim &&
+ !qvm_detail::convert_to_v_defined<vec_traits<R>::dim>::value,
+ R>::type
+ convert_to( A const & a )
+ {
+ R r; assign(r,a);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_vec<A>::value && is_vec<B>::value &&
+ vec_traits<A>::dim==3 && vec_traits<B>::dim==3,
+ deduce_vec2<A,B,3> >::type
+ cross( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,3>::type R;
+ R r;
+ vec_traits<R>::template write_element<0>(r)=
+ vec_traits<A>::template read_element<1>(a)*vec_traits<B>::template read_element<2>(b)-
+ vec_traits<A>::template read_element<2>(a)*vec_traits<B>::template read_element<1>(b);
+ vec_traits<R>::template write_element<1>(r)=
+ vec_traits<A>::template read_element<2>(a)*vec_traits<B>::template read_element<0>(b)-
+ vec_traits<A>::template read_element<0>(a)*vec_traits<B>::template read_element<2>(b);
+ vec_traits<R>::template write_element<2>(r)=
+ vec_traits<A>::template read_element<0>(a)*vec_traits<B>::template read_element<1>(b)-
+ vec_traits<A>::template read_element<1>(a)*vec_traits<B>::template read_element<0>(b);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ template <class A,class B,class Cmp>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && is_vec<B>::value &&
+ vec_traits<A>::dim==vec_traits<B>::dim,
+ bool>::type
+ cmp( A const & a, B const & b, Cmp f )
+ {
+ typedef typename deduce_scalar<
+ typename vec_traits<A>::scalar_type,
+ typename vec_traits<B>::scalar_type>::type T;
+ int const dim=vec_traits<A>::dim;
+ T v1[dim]; assign(v1,a);
+ T v2[dim]; assign(v2,b);
+ for( int i=0; i!=dim; ++i )
+ if( !f(v1[i],v2[i]) )
+ return false;
+ return true;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T,int Dim>
+ class
+ zero_vec_
+ {
+ zero_vec_( zero_vec_ const & );
+ zero_vec_ & operator=( zero_vec_ const & );
+ ~zero_vec_();
+
+ public:
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class V>
+ struct vec_traits;
+
+ template <class T,int Dim>
+ struct
+ vec_traits< qvm_detail::zero_vec_<T,Dim> >
+ {
+ typedef qvm_detail::zero_vec_<T,Dim> this_vector;
+ typedef T scalar_type;
+ static int const dim=Dim;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<Dim);
+ return scalar_traits<scalar_type>::value(0);
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_vector const & )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<Dim);
+ return scalar_traits<scalar_type>::value(0);
+ }
+ };
+
+ template <class T,int Dim,int D>
+ struct
+ deduce_vec<qvm_detail::zero_vec_<T,Dim>,D>
+ {
+ typedef vec<T,D> type;
+ };
+
+ template <class T,int Dim>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::zero_vec_<T,Dim> const &
+ zero_vec()
+ {
+ return *(qvm_detail::zero_vec_<T,Dim> const *)qvm_detail::get_valid_ptr_vec_operations();
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value,
+ void>::type
+ set_zero( A & a )
+ {
+ assign(a,zero_vec<typename vec_traits<A>::scalar_type,vec_traits<A>::dim>());
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class OriginalType,class Scalar>
+ class
+ vector_scalar_cast_
+ {
+ vector_scalar_cast_( vector_scalar_cast_ const & );
+ vector_scalar_cast_ & operator=( vector_scalar_cast_ const & );
+ ~vector_scalar_cast_();
+
+ public:
+
+ template <class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ vector_scalar_cast_ &
+ operator=( T const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+
+ template <bool> struct scalar_cast_vector_filter { };
+ template <> struct scalar_cast_vector_filter<true> { typedef int type; };
+ }
+
+ template <class OriginalType,class Scalar>
+ struct
+ vec_traits< qvm_detail::vector_scalar_cast_<OriginalType,Scalar> >
+ {
+ typedef Scalar scalar_type;
+ typedef qvm_detail::vector_scalar_cast_<OriginalType,Scalar> this_vector;
+ static int const dim=vec_traits<OriginalType>::dim;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return scalar_type(vec_traits<OriginalType>::template read_element<I>(reinterpret_cast<OriginalType const &>(x)));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_vector const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return scalar_type(vec_traits<OriginalType>::read_element_idx(i,reinterpret_cast<OriginalType const &>(x)));
+ }
+ };
+
+ template <class OriginalType,class Scalar,int D>
+ struct
+ deduce_vec<qvm_detail::vector_scalar_cast_<OriginalType,Scalar>,D>
+ {
+ typedef vec<Scalar,D> type;
+ };
+
+ template <class Scalar,class T>
+ BOOST_QVM_INLINE_TRIVIAL
+ qvm_detail::vector_scalar_cast_<T,Scalar> const &
+ scalar_cast( T const & x, typename qvm_detail::scalar_cast_vector_filter<is_vec<T>::value>::type=0 )
+ {
+ return reinterpret_cast<qvm_detail::vector_scalar_cast_<T,Scalar> const &>(x);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ div_eq_vs_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && is_scalar<B>::value &&
+ !qvm_detail::div_eq_vs_defined<vec_traits<A>::dim>::value,
+ A &>::type
+ operator/=( A & a, B b )
+ {
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<A>::write_element_idx(i,a)/=b;
+ return a;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ div_vs_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_vec<A>::value && is_scalar<B>::value &&
+ !qvm_detail::div_vs_defined<vec_traits<A>::dim>::value,
+ deduce_vec<A> >::type
+ operator/( A const & a, B b )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<R>::write_element_idx(i,r)=vec_traits<A>::read_element_idx(i,a)/b;
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ dot_vv_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_vec<A>::value && is_vec<B>::value &&
+ vec_traits<A>::dim==vec_traits<B>::dim &&
+ !qvm_detail::dot_vv_defined<vec_traits<A>::dim>::value,
+ deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type> >::type
+ dot( A const & a, B const & b )
+ {
+ typedef typename deduce_scalar<typename vec_traits<A>::scalar_type,typename vec_traits<B>::scalar_type>::type T;
+ T m(scalar_traits<T>::value(0));
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ m+=vec_traits<A>::read_element_idx(i,a)*vec_traits<B>::read_element_idx(i,b);
+ return m;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ eq_vv_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && is_vec<B>::value &&
+ vec_traits<A>::dim==vec_traits<B>::dim &&
+ !qvm_detail::eq_vv_defined<vec_traits<A>::dim>::value,
+ bool>::type
+ operator==( A const & a, B const & b )
+ {
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ if( vec_traits<A>::read_element_idx(i,a)!=vec_traits<B>::read_element_idx(i,b) )
+ return false;
+ return true;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ mag_sqr_v_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value &&
+ !qvm_detail::mag_sqr_v_defined<vec_traits<A>::dim>::value,
+ typename vec_traits<A>::scalar_type>::type
+ mag_sqr( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T m(scalar_traits<T>::value(0));
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ {
+ T x=vec_traits<A>::read_element_idx(i,a);
+ m+=x*x;
+ }
+ return m;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ mag_v_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value &&
+ !qvm_detail::mag_v_defined<vec_traits<A>::dim>::value,
+ typename vec_traits<A>::scalar_type>::type
+ mag( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T m(scalar_traits<T>::value(0));
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ {
+ T x=vec_traits<A>::read_element_idx(i,a);
+ m+=x*x;
+ }
+ return sqrt<T>(m);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ minus_eq_vv_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && is_vec<B>::value &&
+ vec_traits<A>::dim==vec_traits<B>::dim &&
+ !qvm_detail::minus_eq_vv_defined<vec_traits<A>::dim>::value,
+ A &>::type
+ operator-=( A & a, B const & b )
+ {
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<A>::write_element_idx(i,a)-=vec_traits<B>::read_element_idx(i,b);
+ return a;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ minus_v_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_vec<A>::value &&
+ !qvm_detail::minus_v_defined<vec_traits<A>::dim>::value,
+ deduce_vec<A> >::type
+ operator-( A const & a )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<R>::write_element_idx(i,r)=-vec_traits<A>::read_element_idx(i,a);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ minus_vv_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_vec<A>::value && is_vec<B>::value &&
+ vec_traits<A>::dim==vec_traits<B>::dim &&
+ !qvm_detail::minus_vv_defined<vec_traits<A>::dim>::value,
+ deduce_vec2<A,B,vec_traits<A>::dim> >::type
+ operator-( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,vec_traits<A>::dim>::type R;
+ R r;
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<R>::write_element_idx(i,r)=vec_traits<A>::read_element_idx(i,a)-vec_traits<B>::read_element_idx(i,b);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ mul_eq_vs_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && is_scalar<B>::value &&
+ !qvm_detail::mul_eq_vs_defined<vec_traits<A>::dim>::value,
+ A &>::type
+ operator*=( A & a, B b )
+ {
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<A>::write_element_idx(i,a)*=b;
+ return a;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ mul_vs_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_vec<A>::value && is_scalar<B>::value &&
+ !qvm_detail::mul_vs_defined<vec_traits<A>::dim>::value,
+ deduce_vec<A> >::type
+ operator*( A const & a, B b )
+ {
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<R>::write_element_idx(i,r)=vec_traits<A>::read_element_idx(i,a)*b;
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ mul_sv_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_scalar<A>::value && is_vec<B>::value &&
+ !qvm_detail::mul_sv_defined<vec_traits<B>::dim>::value,
+ deduce_vec<B> >::type
+ operator*( A a, B const & b )
+ {
+ typedef typename deduce_vec<B>::type R;
+ R r;
+ for( int i=0; i!=vec_traits<B>::dim; ++i )
+ vec_traits<R>::write_element_idx(i,r)=a*vec_traits<B>::read_element_idx(i,b);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ neq_vv_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && is_vec<B>::value &&
+ vec_traits<A>::dim==vec_traits<B>::dim &&
+ !qvm_detail::neq_vv_defined<vec_traits<A>::dim>::value,
+ bool>::type
+ operator!=( A const & a, B const & b )
+ {
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ if( vec_traits<A>::read_element_idx(i,a)!=vec_traits<B>::read_element_idx(i,b) )
+ return true;
+ return false;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ normalize_v_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_vec<A>::value &&
+ !qvm_detail::normalize_v_defined<vec_traits<A>::dim>::value,
+ deduce_vec<A> >::type
+ normalized( A const & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T m(scalar_traits<T>::value(0));
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ {
+ T x=vec_traits<A>::read_element_idx(i,a);
+ m+=x*x;
+ }
+ if( m==scalar_traits<T>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T rm=scalar_traits<T>::value(1)/sqrt<T>(m);
+ typedef typename deduce_vec<A>::type R;
+ R r;
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<R>::write_element_idx(i,r)=vec_traits<A>::read_element_idx(i,a)*rm;
+ return r;
+ }
+
+ template <class A>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value &&
+ !qvm_detail::normalize_v_defined<vec_traits<A>::dim>::value,
+ void>::type
+ normalize( A & a )
+ {
+ typedef typename vec_traits<A>::scalar_type T;
+ T m(scalar_traits<T>::value(0));
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ {
+ T x=vec_traits<A>::read_element_idx(i,a);
+ m+=x*x;
+ }
+ if( m==scalar_traits<T>::value(0) )
+ BOOST_QVM_THROW_EXCEPTION(zero_magnitude_error());
+ T rm=scalar_traits<T>::value(1)/sqrt<T>(m);
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<A>::write_element_idx(i,a)*=rm;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ plus_eq_vv_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename enable_if_c<
+ is_vec<A>::value && is_vec<B>::value &&
+ vec_traits<A>::dim==vec_traits<B>::dim &&
+ !qvm_detail::plus_eq_vv_defined<vec_traits<A>::dim>::value,
+ A &>::type
+ operator+=( A & a, B const & b )
+ {
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<A>::write_element_idx(i,a)+=vec_traits<B>::read_element_idx(i,b);
+ return a;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <int D>
+ struct
+ plus_vv_defined
+ {
+ static bool const value=false;
+ };
+ }
+
+ template <class A,class B>
+ BOOST_QVM_INLINE_OPERATIONS
+ typename lazy_enable_if_c<
+ is_vec<A>::value && is_vec<B>::value &&
+ vec_traits<A>::dim==vec_traits<B>::dim &&
+ !qvm_detail::plus_vv_defined<vec_traits<A>::dim>::value,
+ deduce_vec2<A,B,vec_traits<A>::dim> >::type
+ operator+( A const & a, B const & b )
+ {
+ typedef typename deduce_vec2<A,B,vec_traits<A>::dim>::type R;
+ R r;
+ for( int i=0; i!=vec_traits<A>::dim; ++i )
+ vec_traits<R>::write_element_idx(i,r)=vec_traits<A>::read_element_idx(i,a)+vec_traits<B>::read_element_idx(i,b);
+ return r;
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ qvm_detail
+ {
+ template <class T>
+ class
+ vref_
+ {
+ vref_( vref_ const & );
+ vref_ & operator=( vref_ const & );
+ ~vref_();
+
+ public:
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ vref_ &
+ operator=( R const & x )
+ {
+ assign(*this,x);
+ return *this;
+ }
+
+ template <class R>
+ BOOST_QVM_INLINE_TRIVIAL
+ operator R() const
+ {
+ R r;
+ assign(r,*this);
+ return r;
+ }
+ };
+ }
+
+ template <class V>
+ struct
+ vec_traits< qvm_detail::vref_<V> >
+ {
+ typedef typename vec_traits<V>::scalar_type scalar_type;
+ typedef qvm_detail::vref_<V> this_vector;
+ static int const dim=vec_traits<V>::dim;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return vec_traits<V>::template read_element<I>(reinterpret_cast<V const &>(x));
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_vector & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<dim);
+ return vec_traits<V>::template write_element<I>(reinterpret_cast<V &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_vector const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return vec_traits<V>::read_element_idx(i,reinterpret_cast<V const &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int i, this_vector & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<dim);
+ return vec_traits<V>::write_element_idx(i,reinterpret_cast<V &>(x));
+ }
+ };
+
+ template <class V,int D>
+ struct
+ deduce_vec<qvm_detail::vref_<V>,D>
+ {
+ typedef vec<typename vec_traits<V>::scalar_type,D> type;
+ };
+
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value,
+ qvm_detail::vref_<V> const &>::type
+ vref( V const & a )
+ {
+ return reinterpret_cast<qvm_detail::vref_<V> const &>(a);
+ }
+
+ template <class V>
+ BOOST_QVM_INLINE_TRIVIAL
+ typename enable_if_c<
+ is_vec<V>::value,
+ qvm_detail::vref_<V> &>::type
+ vref( V & a )
+ {
+ return reinterpret_cast<qvm_detail::vref_<V> &>(a);
+ }
+
+ ////////////////////////////////////////////////
+
+ namespace
+ sfinae
+ {
+ using ::boost::qvm::to_string;
+ using ::boost::qvm::assign;
+ using ::boost::qvm::convert_to;
+ using ::boost::qvm::cross;
+ using ::boost::qvm::cmp;
+ using ::boost::qvm::set_zero;
+ using ::boost::qvm::scalar_cast;
+ using ::boost::qvm::operator/=;
+ using ::boost::qvm::operator/;
+ using ::boost::qvm::dot;
+ using ::boost::qvm::operator==;
+ using ::boost::qvm::mag_sqr;
+ using ::boost::qvm::mag;
+ using ::boost::qvm::operator-=;
+ using ::boost::qvm::operator-;
+ using ::boost::qvm::operator*=;
+ using ::boost::qvm::operator*;
+ using ::boost::qvm::operator!=;
+ using ::boost::qvm::normalized;
+ using ::boost::qvm::normalize;
+ using ::boost::qvm::operator+=;
+ using ::boost::qvm::operator+;
+ using ::boost::qvm::vref;
+ }
+
+ ////////////////////////////////////////////////
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/vec_operations2.hpp b/contrib/restricted/boost/boost/qvm/vec_operations2.hpp
index bf3c67a95d..bc1933d299 100644
--- a/contrib/restricted/boost/boost/qvm/vec_operations2.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_operations2.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/vec_operations2.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/vec_operations2.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/vec_operations3.hpp b/contrib/restricted/boost/boost/qvm/vec_operations3.hpp
index 01959d88a5..b979c597d5 100644
--- a/contrib/restricted/boost/boost/qvm/vec_operations3.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_operations3.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/vec_operations3.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/vec_operations3.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/vec_operations4.hpp b/contrib/restricted/boost/boost/qvm/vec_operations4.hpp
index dbba29c65a..a08be2ad20 100644
--- a/contrib/restricted/boost/boost/qvm/vec_operations4.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_operations4.hpp
@@ -1,6 +1,6 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/qvm/gen/vec_operations4.hpp>
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/qvm/gen/vec_operations4.hpp>
diff --git a/contrib/restricted/boost/boost/qvm/vec_traits.hpp b/contrib/restricted/boost/boost/qvm/vec_traits.hpp
index 4d807b8c1e..9b4465a92f 100644
--- a/contrib/restricted/boost/boost/qvm/vec_traits.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_traits.hpp
@@ -1,32 +1,32 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_01224884FC4111DF9570F7E4DED72085
-#define UUID_01224884FC4111DF9570F7E4DED72085
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class V>
- struct
- vec_traits
- {
- static int const dim=0;
- typedef void scalar_type;
- };
-
- template <class T>
- struct
- is_vec
- {
- static bool const value=vec_traits<T>::dim>0;
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_01224884FC4111DF9570F7E4DED72085
+#define UUID_01224884FC4111DF9570F7E4DED72085
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class V>
+ struct
+ vec_traits
+ {
+ static int const dim=0;
+ typedef void scalar_type;
+ };
+
+ template <class T>
+ struct
+ is_vec
+ {
+ static bool const value=vec_traits<T>::dim>0;
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/vec_traits_array.hpp b/contrib/restricted/boost/boost/qvm/vec_traits_array.hpp
index 218d0dba57..78c1333a67 100644
--- a/contrib/restricted/boost/boost/qvm/vec_traits_array.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_traits_array.hpp
@@ -1,108 +1,108 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_DEC6035EA1C211DEA5E8ECB856D89593
-#define UUID_DEC6035EA1C211DEA5E8ECB856D89593
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/deduce_vec.hpp>
-#include <boost/qvm/detail/remove_const.hpp>
-#include <boost/qvm/assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class T,int M,int N>
- struct
- vec_traits<T[M][N]>
- {
- static int const dim=0;
- typedef void scalar_type;
- };
-
- template <class T,int Dim>
- struct
- vec_traits<T[Dim]>
- {
- typedef T this_vector[Dim];
- typedef typename qvm_detail::remove_const<T>::type scalar_type;
- static int const dim=Dim;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( this_vector const & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<Dim);
- return x[I];
- }
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element( this_vector & x )
- {
- BOOST_QVM_STATIC_ASSERT(I>=0);
- BOOST_QVM_STATIC_ASSERT(I<Dim);
- return x[I];
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, this_vector const & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<Dim);
- return x[i];
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type &
- write_element_idx( int i, this_vector & x )
- {
- BOOST_QVM_ASSERT(i>=0);
- BOOST_QVM_ASSERT(i<Dim);
- return x[i];
- }
- };
-
- template <class T,int Dim,int D>
- struct
- deduce_vec<T[Dim],D>
- {
- typedef vec<T,D> type;
- };
-
- template <class T,int Dim,int D>
- struct
- deduce_vec<T const[Dim],D>
- {
- typedef vec<T,D> type;
- };
-
- template <class T1,class T2,int Dim,int D>
- struct
- deduce_vec2<T1[Dim],T2[Dim],D>
- {
- typedef vec<typename deduce_scalar<T1,T2>::type,D> type;
- };
-
- template <int Dim,class T>
- T (&ptr_vref( T * ptr ))[Dim]
- {
- return *reinterpret_cast<T (*)[Dim]>(ptr);
- }
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_DEC6035EA1C211DEA5E8ECB856D89593
+#define UUID_DEC6035EA1C211DEA5E8ECB856D89593
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/deduce_vec.hpp>
+#include <boost/qvm/detail/remove_const.hpp>
+#include <boost/qvm/assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class T,int M,int N>
+ struct
+ vec_traits<T[M][N]>
+ {
+ static int const dim=0;
+ typedef void scalar_type;
+ };
+
+ template <class T,int Dim>
+ struct
+ vec_traits<T[Dim]>
+ {
+ typedef T this_vector[Dim];
+ typedef typename qvm_detail::remove_const<T>::type scalar_type;
+ static int const dim=Dim;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( this_vector const & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<Dim);
+ return x[I];
+ }
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element( this_vector & x )
+ {
+ BOOST_QVM_STATIC_ASSERT(I>=0);
+ BOOST_QVM_STATIC_ASSERT(I<Dim);
+ return x[I];
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, this_vector const & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<Dim);
+ return x[i];
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type &
+ write_element_idx( int i, this_vector & x )
+ {
+ BOOST_QVM_ASSERT(i>=0);
+ BOOST_QVM_ASSERT(i<Dim);
+ return x[i];
+ }
+ };
+
+ template <class T,int Dim,int D>
+ struct
+ deduce_vec<T[Dim],D>
+ {
+ typedef vec<T,D> type;
+ };
+
+ template <class T,int Dim,int D>
+ struct
+ deduce_vec<T const[Dim],D>
+ {
+ typedef vec<T,D> type;
+ };
+
+ template <class T1,class T2,int Dim,int D>
+ struct
+ deduce_vec2<T1[Dim],T2[Dim],D>
+ {
+ typedef vec<typename deduce_scalar<T1,T2>::type,D> type;
+ };
+
+ template <int Dim,class T>
+ T (&ptr_vref( T * ptr ))[Dim]
+ {
+ return *reinterpret_cast<T (*)[Dim]>(ptr);
+ }
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/boost/qvm/vec_traits_defaults.hpp b/contrib/restricted/boost/boost/qvm/vec_traits_defaults.hpp
index 537ede48a0..80b5f858d0 100644
--- a/contrib/restricted/boost/boost/qvm/vec_traits_defaults.hpp
+++ b/contrib/restricted/boost/boost/qvm/vec_traits_defaults.hpp
@@ -1,94 +1,94 @@
-//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
-
-//Distributed under the Boost Software License, Version 1.0. (See accompanying
-//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef UUID_DFFD61ACC72311E6955FFF1F07624D53
-#define UUID_DFFD61ACC72311E6955FFF1F07624D53
-
-#include <boost/qvm/inline.hpp>
-#include <boost/qvm/assert.hpp>
-
-namespace
-boost
- {
- namespace
- qvm
- {
- template <class>
- struct vec_traits;
-
- namespace
- qvm_detail
- {
- template <int I,int N>
- struct
- vector_w
- {
- template <class A>
- static
- BOOST_QVM_INLINE_CRITICAL
- typename vec_traits<A>::scalar_type &
- write_element_idx( int i, A & a )
- {
- return I==i?
- vec_traits<A>::template write_element<I>(a) :
- vector_w<I+1,N>::write_element_idx(i,a);
- }
- };
-
- template <int N>
- struct
- vector_w<N,N>
- {
- template <class A>
- static
- BOOST_QVM_INLINE_TRIVIAL
- typename vec_traits<A>::scalar_type &
- write_element_idx( int, A & a )
- {
- BOOST_QVM_ASSERT(0);
- return vec_traits<A>::template write_element<0>(a);
- }
- };
- }
-
- template <class VecType,class ScalarType,int Dim>
- struct
- vec_traits_defaults
- {
- typedef VecType vec_type;
- typedef ScalarType scalar_type;
- static int const dim=Dim;
-
- template <int I>
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element( vec_type const & x )
- {
- return vec_traits<vec_type>::template write_element<I>(const_cast<vec_type &>(x));
- }
-
- static
- BOOST_QVM_INLINE_CRITICAL
- scalar_type
- read_element_idx( int i, vec_type const & x )
- {
- return vec_traits<vec_type>::write_element_idx(i,const_cast<vec_type &>(x));
- }
-
- protected:
-
- static
- BOOST_QVM_INLINE_TRIVIAL
- scalar_type &
- write_element_idx( int i, vec_type & m )
- {
- return qvm_detail::vector_w<0,vec_traits<vec_type>::dim>::write_element_idx(i,m);
- }
- };
- }
- }
-
-#endif
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_DFFD61ACC72311E6955FFF1F07624D53
+#define UUID_DFFD61ACC72311E6955FFF1F07624D53
+
+#include <boost/qvm/inline.hpp>
+#include <boost/qvm/assert.hpp>
+
+namespace
+boost
+ {
+ namespace
+ qvm
+ {
+ template <class>
+ struct vec_traits;
+
+ namespace
+ qvm_detail
+ {
+ template <int I,int N>
+ struct
+ vector_w
+ {
+ template <class A>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ typename vec_traits<A>::scalar_type &
+ write_element_idx( int i, A & a )
+ {
+ return I==i?
+ vec_traits<A>::template write_element<I>(a) :
+ vector_w<I+1,N>::write_element_idx(i,a);
+ }
+ };
+
+ template <int N>
+ struct
+ vector_w<N,N>
+ {
+ template <class A>
+ static
+ BOOST_QVM_INLINE_TRIVIAL
+ typename vec_traits<A>::scalar_type &
+ write_element_idx( int, A & a )
+ {
+ BOOST_QVM_ASSERT(0);
+ return vec_traits<A>::template write_element<0>(a);
+ }
+ };
+ }
+
+ template <class VecType,class ScalarType,int Dim>
+ struct
+ vec_traits_defaults
+ {
+ typedef VecType vec_type;
+ typedef ScalarType scalar_type;
+ static int const dim=Dim;
+
+ template <int I>
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element( vec_type const & x )
+ {
+ return vec_traits<vec_type>::template write_element<I>(const_cast<vec_type &>(x));
+ }
+
+ static
+ BOOST_QVM_INLINE_CRITICAL
+ scalar_type
+ read_element_idx( int i, vec_type const & x )
+ {
+ return vec_traits<vec_type>::write_element_idx(i,const_cast<vec_type &>(x));
+ }
+
+ protected:
+
+ static
+ BOOST_QVM_INLINE_TRIVIAL
+ scalar_type &
+ write_element_idx( int i, vec_type & m )
+ {
+ return qvm_detail::vector_w<0,vec_traits<vec_type>::dim>::write_element_idx(i,m);
+ }
+ };
+ }
+ }
+
+#endif
diff --git a/contrib/restricted/boost/libs/log/src/windows/simple_event_log.h b/contrib/restricted/boost/libs/log/src/windows/simple_event_log.h
index b08c086f93..10c133c7c0 100644
--- a/contrib/restricted/boost/libs/log/src/windows/simple_event_log.h
+++ b/contrib/restricted/boost/libs/log/src/windows/simple_event_log.h
@@ -1,95 +1,95 @@
-/*
- * Copyright Andrey Semashev 2007 - 2015.
- * Distributed under the Boost Software License, Version 1.0.
- * (See accompanying file LICENSE_1_0.txt or copy at
- * http://www.boost.org/LICENSE_1_0.txt)
- *
- * This file is the Boost.Log library implementation, see the library documentation
- * at http://www.boost.org/libs/log/doc/log.html.
- */
-
-/* --------------------------------------------------------
- * HEADER SECTION
- */
-
-
-
-/* ------------------------------------------------------------------
- * MESSAGE DEFINITION SECTION
- */
-//
-// Values are 32 bit values laid out as follows:
-//
-// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
-// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
-// +---+-+-+-----------------------+-------------------------------+
-// |Sev|C|R| Facility | Code |
-// +---+-+-+-----------------------+-------------------------------+
-//
-// where
-//
-// Sev - is the severity code
-//
-// 00 - Success
-// 01 - Informational
-// 10 - Warning
-// 11 - Error
-//
-// C - is the Customer code flag
-//
-// R - is a reserved bit
-//
-// Facility - is the facility code
-//
-// Code - is the facility's status code
-//
-//
-// Define the facility codes
-//
-
-
-//
-// Define the severity codes
-//
-#define BOOST_LOG_SEVERITY_WARNING 0x2
-#define BOOST_LOG_SEVERITY_ERROR 0x3
-#define BOOST_LOG_SEVERITY_DEBUG 0x0
-#define BOOST_LOG_SEVERITY_INFO 0x1
-
-
-//
-// MessageId: BOOST_LOG_MSG_DEBUG
-//
-// MessageText:
-//
-// %1
-//
-#define BOOST_LOG_MSG_DEBUG ((DWORD)0x00000100L)
-
-//
-// MessageId: BOOST_LOG_MSG_INFO
-//
-// MessageText:
-//
-// %1
-//
-#define BOOST_LOG_MSG_INFO ((DWORD)0x40000101L)
-
-//
-// MessageId: BOOST_LOG_MSG_WARNING
-//
-// MessageText:
-//
-// %1
-//
-#define BOOST_LOG_MSG_WARNING ((DWORD)0x80000102L)
-
-//
-// MessageId: BOOST_LOG_MSG_ERROR
-//
-// MessageText:
-//
-// %1
-//
-#define BOOST_LOG_MSG_ERROR ((DWORD)0xC0000103L)
-
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * This file is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/libs/log/doc/log.html.
+ */
+
+/* --------------------------------------------------------
+ * HEADER SECTION
+ */
+
+
+
+/* ------------------------------------------------------------------
+ * MESSAGE DEFINITION SECTION
+ */
+//
+// Values are 32 bit values laid out as follows:
+//
+// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
+// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+// +---+-+-+-----------------------+-------------------------------+
+// |Sev|C|R| Facility | Code |
+// +---+-+-+-----------------------+-------------------------------+
+//
+// where
+//
+// Sev - is the severity code
+//
+// 00 - Success
+// 01 - Informational
+// 10 - Warning
+// 11 - Error
+//
+// C - is the Customer code flag
+//
+// R - is a reserved bit
+//
+// Facility - is the facility code
+//
+// Code - is the facility's status code
+//
+//
+// Define the facility codes
+//
+
+
+//
+// Define the severity codes
+//
+#define BOOST_LOG_SEVERITY_WARNING 0x2
+#define BOOST_LOG_SEVERITY_ERROR 0x3
+#define BOOST_LOG_SEVERITY_DEBUG 0x0
+#define BOOST_LOG_SEVERITY_INFO 0x1
+
+
+//
+// MessageId: BOOST_LOG_MSG_DEBUG
+//
+// MessageText:
+//
+// %1
+//
+#define BOOST_LOG_MSG_DEBUG ((DWORD)0x00000100L)
+
+//
+// MessageId: BOOST_LOG_MSG_INFO
+//
+// MessageText:
+//
+// %1
+//
+#define BOOST_LOG_MSG_INFO ((DWORD)0x40000101L)
+
+//
+// MessageId: BOOST_LOG_MSG_WARNING
+//
+// MessageText:
+//
+// %1
+//
+#define BOOST_LOG_MSG_WARNING ((DWORD)0x80000102L)
+
+//
+// MessageId: BOOST_LOG_MSG_ERROR
+//
+// MessageText:
+//
+// %1
+//
+#define BOOST_LOG_MSG_ERROR ((DWORD)0xC0000103L)
+
diff --git a/contrib/restricted/libffi/configs/i386-microsoft-windows/fficonfig.h b/contrib/restricted/libffi/configs/i386-microsoft-windows/fficonfig.h
index a1cc6192c2..5bf4af5f44 100755
--- a/contrib/restricted/libffi/configs/i386-microsoft-windows/fficonfig.h
+++ b/contrib/restricted/libffi/configs/i386-microsoft-windows/fficonfig.h
@@ -18,15 +18,13 @@
/* Define this if you want extra debugging. */
/* #undef FFI_DEBUG */
-/* Cannot use PROT_EXEC on this target, so, we revert to
- alternative means */
+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */
/* #undef FFI_EXEC_TRAMPOLINE_TABLE */
/* Define this if you want to enable pax emulated trampolines */
/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */
-/* Cannot use malloc on this target, so, we revert to
- alternative means */
+/* Cannot use malloc on this target, so, we revert to alternative means */
/* #undef FFI_MMAP_EXEC_WRIT */
/* Define this if you do not want support for the raw API. */
diff --git a/contrib/restricted/libffi/configs/x86_64-microsoft-windows/fficonfig.h b/contrib/restricted/libffi/configs/x86_64-microsoft-windows/fficonfig.h
index 738e1e4472..c2cffe1056 100755
--- a/contrib/restricted/libffi/configs/x86_64-microsoft-windows/fficonfig.h
+++ b/contrib/restricted/libffi/configs/x86_64-microsoft-windows/fficonfig.h
@@ -18,15 +18,13 @@
/* Define this if you want extra debugging. */
/* #undef FFI_DEBUG */
-/* Cannot use PROT_EXEC on this target, so, we revert to
- alternative means */
+/* Cannot use PROT_EXEC on this target, so, we revert to alternative means */
/* #undef FFI_EXEC_TRAMPOLINE_TABLE */
/* Define this if you want to enable pax emulated trampolines */
/* #undef FFI_MMAP_EXEC_EMUTRAMP_PAX */
-/* Cannot use malloc on this target, so, we revert to
- alternative means */
+/* Cannot use malloc on this target, so, we revert to alternative means */
/* #undef FFI_MMAP_EXEC_WRIT */
/* Define this if you do not want support for the raw API. */
diff --git a/contrib/tools/python3/src/Lib/venv/scripts/common/Activate.ps1 b/contrib/tools/python3/src/Lib/venv/scripts/common/Activate.ps1
index 7bc3e7c698..9d3646a4fc 100644
--- a/contrib/tools/python3/src/Lib/venv/scripts/common/Activate.ps1
+++ b/contrib/tools/python3/src/Lib/venv/scripts/common/Activate.ps1
@@ -1,241 +1,241 @@
-<#
-.Synopsis
-Activate a Python virtual environment for the current PowerShell session.
-
-.Description
-Pushes the python executable for a virtual environment to the front of the
-$Env:PATH environment variable and sets the prompt to signify that you are
-in a Python virtual environment. Makes use of the command line switches as
-well as the `pyvenv.cfg` file values present in the virtual environment.
-
-.Parameter VenvDir
-Path to the directory that contains the virtual environment to activate. The
-default value for this is the parent of the directory that the Activate.ps1
-script is located within.
-
-.Parameter Prompt
-The prompt prefix to display when this virtual environment is activated. By
-default, this prompt is the name of the virtual environment folder (VenvDir)
-surrounded by parentheses and followed by a single space (ie. '(.venv) ').
-
-.Example
-Activate.ps1
-Activates the Python virtual environment that contains the Activate.ps1 script.
-
-.Example
-Activate.ps1 -Verbose
-Activates the Python virtual environment that contains the Activate.ps1 script,
-and shows extra information about the activation as it executes.
-
-.Example
-Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
-Activates the Python virtual environment located in the specified location.
-
-.Example
-Activate.ps1 -Prompt "MyPython"
-Activates the Python virtual environment that contains the Activate.ps1 script,
-and prefixes the current prompt with the specified string (surrounded in
-parentheses) while the virtual environment is active.
-
-.Notes
-On Windows, it may be required to enable this Activate.ps1 script by setting the
-execution policy for the user. You can do this by issuing the following PowerShell
-command:
-
-PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
-
-For more information on Execution Policies:
-https://go.microsoft.com/fwlink/?LinkID=135170
-
-#>
-Param(
- [Parameter(Mandatory = $false)]
- [String]
- $VenvDir,
- [Parameter(Mandatory = $false)]
- [String]
- $Prompt
-)
-
-<# Function declarations --------------------------------------------------- #>
-
-<#
-.Synopsis
-Remove all shell session elements added by the Activate script, including the
-addition of the virtual environment's Python executable from the beginning of
-the PATH variable.
-
-.Parameter NonDestructive
-If present, do not remove this function from the global namespace for the
-session.
-
-#>
-function global:deactivate ([switch]$NonDestructive) {
- # Revert to original values
-
- # The prior prompt:
- if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
- Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
- Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
- }
-
- # The prior PYTHONHOME:
- if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
- Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
- Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
- }
-
- # The prior PATH:
- if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
- Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
- Remove-Item -Path Env:_OLD_VIRTUAL_PATH
- }
-
- # Just remove the VIRTUAL_ENV altogether:
- if (Test-Path -Path Env:VIRTUAL_ENV) {
- Remove-Item -Path env:VIRTUAL_ENV
- }
-
- # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
- if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
- Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
- }
-
- # Leave deactivate function in the global namespace if requested:
- if (-not $NonDestructive) {
- Remove-Item -Path function:deactivate
- }
-}
-
-<#
-.Description
-Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
-given folder, and returns them in a map.
-
-For each line in the pyvenv.cfg file, if that line can be parsed into exactly
-two strings separated by `=` (with any amount of whitespace surrounding the =)
-then it is considered a `key = value` line. The left hand string is the key,
-the right hand is the value.
-
-If the value starts with a `'` or a `"` then the first and last character is
-stripped from the value before being captured.
-
-.Parameter ConfigDir
-Path to the directory that contains the `pyvenv.cfg` file.
-#>
-function Get-PyVenvConfig(
- [String]
- $ConfigDir
-) {
- Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
-
- # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
- $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
-
- # An empty map will be returned if no config file is found.
- $pyvenvConfig = @{ }
-
- if ($pyvenvConfigPath) {
-
- Write-Verbose "File exists, parse `key = value` lines"
- $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
-
- $pyvenvConfigContent | ForEach-Object {
- $keyval = $PSItem -split "\s*=\s*", 2
- if ($keyval[0] -and $keyval[1]) {
- $val = $keyval[1]
-
- # Remove extraneous quotations around a string value.
- if ("'""".Contains($val.Substring(0, 1))) {
- $val = $val.Substring(1, $val.Length - 2)
- }
-
- $pyvenvConfig[$keyval[0]] = $val
- Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
- }
- }
- }
- return $pyvenvConfig
-}
-
-
-<# Begin Activate script --------------------------------------------------- #>
-
-# Determine the containing directory of this script
-$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
-$VenvExecDir = Get-Item -Path $VenvExecPath
-
-Write-Verbose "Activation script is located in path: '$VenvExecPath'"
-Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
-Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
-
-# Set values required in priority: CmdLine, ConfigFile, Default
-# First, get the location of the virtual environment, it might not be
-# VenvExecDir if specified on the command line.
-if ($VenvDir) {
- Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
-}
-else {
- Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
- $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
- Write-Verbose "VenvDir=$VenvDir"
-}
-
-# Next, read the `pyvenv.cfg` file to determine any required value such
-# as `prompt`.
-$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
-
-# Next, set the prompt from the command line, or the config file, or
-# just use the name of the virtual environment folder.
-if ($Prompt) {
- Write-Verbose "Prompt specified as argument, using '$Prompt'"
-}
-else {
- Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
- if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
- Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
- $Prompt = $pyvenvCfg['prompt'];
- }
- else {
- Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
- Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
- $Prompt = Split-Path -Path $venvDir -Leaf
- }
-}
-
-Write-Verbose "Prompt = '$Prompt'"
-Write-Verbose "VenvDir='$VenvDir'"
-
-# Deactivate any currently active virtual environment, but leave the
-# deactivate function in place.
-deactivate -nondestructive
-
-# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
-# that there is an activated venv.
-$env:VIRTUAL_ENV = $VenvDir
-
-if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
-
- Write-Verbose "Setting prompt to '$Prompt'"
-
- # Set the prompt to include the env name
- # Make sure _OLD_VIRTUAL_PROMPT is global
- function global:_OLD_VIRTUAL_PROMPT { "" }
- Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
- New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
-
- function global:prompt {
- Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
- _OLD_VIRTUAL_PROMPT
- }
-}
-
-# Clear PYTHONHOME
-if (Test-Path -Path Env:PYTHONHOME) {
- Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
- Remove-Item -Path Env:PYTHONHOME
-}
-
-# Add the venv to the PATH
-Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
-$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
+<#
+.Synopsis
+Activate a Python virtual environment for the current PowerShell session.
+
+.Description
+Pushes the python executable for a virtual environment to the front of the
+$Env:PATH environment variable and sets the prompt to signify that you are
+in a Python virtual environment. Makes use of the command line switches as
+well as the `pyvenv.cfg` file values present in the virtual environment.
+
+.Parameter VenvDir
+Path to the directory that contains the virtual environment to activate. The
+default value for this is the parent of the directory that the Activate.ps1
+script is located within.
+
+.Parameter Prompt
+The prompt prefix to display when this virtual environment is activated. By
+default, this prompt is the name of the virtual environment folder (VenvDir)
+surrounded by parentheses and followed by a single space (ie. '(.venv) ').
+
+.Example
+Activate.ps1
+Activates the Python virtual environment that contains the Activate.ps1 script.
+
+.Example
+Activate.ps1 -Verbose
+Activates the Python virtual environment that contains the Activate.ps1 script,
+and shows extra information about the activation as it executes.
+
+.Example
+Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
+Activates the Python virtual environment located in the specified location.
+
+.Example
+Activate.ps1 -Prompt "MyPython"
+Activates the Python virtual environment that contains the Activate.ps1 script,
+and prefixes the current prompt with the specified string (surrounded in
+parentheses) while the virtual environment is active.
+
+.Notes
+On Windows, it may be required to enable this Activate.ps1 script by setting the
+execution policy for the user. You can do this by issuing the following PowerShell
+command:
+
+PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
+
+For more information on Execution Policies:
+https://go.microsoft.com/fwlink/?LinkID=135170
+
+#>
+Param(
+ [Parameter(Mandatory = $false)]
+ [String]
+ $VenvDir,
+ [Parameter(Mandatory = $false)]
+ [String]
+ $Prompt
+)
+
+<# Function declarations --------------------------------------------------- #>
+
+<#
+.Synopsis
+Remove all shell session elements added by the Activate script, including the
+addition of the virtual environment's Python executable from the beginning of
+the PATH variable.
+
+.Parameter NonDestructive
+If present, do not remove this function from the global namespace for the
+session.
+
+#>
+function global:deactivate ([switch]$NonDestructive) {
+ # Revert to original values
+
+ # The prior prompt:
+ if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
+ Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
+ Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
+ }
+
+ # The prior PYTHONHOME:
+ if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
+ Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
+ Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
+ }
+
+ # The prior PATH:
+ if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
+ Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
+ Remove-Item -Path Env:_OLD_VIRTUAL_PATH
+ }
+
+ # Just remove the VIRTUAL_ENV altogether:
+ if (Test-Path -Path Env:VIRTUAL_ENV) {
+ Remove-Item -Path env:VIRTUAL_ENV
+ }
+
+ # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
+ if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
+ Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
+ }
+
+ # Leave deactivate function in the global namespace if requested:
+ if (-not $NonDestructive) {
+ Remove-Item -Path function:deactivate
+ }
+}
+
+<#
+.Description
+Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
+given folder, and returns them in a map.
+
+For each line in the pyvenv.cfg file, if that line can be parsed into exactly
+two strings separated by `=` (with any amount of whitespace surrounding the =)
+then it is considered a `key = value` line. The left hand string is the key,
+the right hand is the value.
+
+If the value starts with a `'` or a `"` then the first and last character is
+stripped from the value before being captured.
+
+.Parameter ConfigDir
+Path to the directory that contains the `pyvenv.cfg` file.
+#>
+function Get-PyVenvConfig(
+ [String]
+ $ConfigDir
+) {
+ Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
+
+ # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
+ $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
+
+ # An empty map will be returned if no config file is found.
+ $pyvenvConfig = @{ }
+
+ if ($pyvenvConfigPath) {
+
+ Write-Verbose "File exists, parse `key = value` lines"
+ $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
+
+ $pyvenvConfigContent | ForEach-Object {
+ $keyval = $PSItem -split "\s*=\s*", 2
+ if ($keyval[0] -and $keyval[1]) {
+ $val = $keyval[1]
+
+ # Remove extraneous quotations around a string value.
+ if ("'""".Contains($val.Substring(0, 1))) {
+ $val = $val.Substring(1, $val.Length - 2)
+ }
+
+ $pyvenvConfig[$keyval[0]] = $val
+ Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
+ }
+ }
+ }
+ return $pyvenvConfig
+}
+
+
+<# Begin Activate script --------------------------------------------------- #>
+
+# Determine the containing directory of this script
+$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
+$VenvExecDir = Get-Item -Path $VenvExecPath
+
+Write-Verbose "Activation script is located in path: '$VenvExecPath'"
+Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
+Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
+
+# Set values required in priority: CmdLine, ConfigFile, Default
+# First, get the location of the virtual environment, it might not be
+# VenvExecDir if specified on the command line.
+if ($VenvDir) {
+ Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
+}
+else {
+ Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
+ $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
+ Write-Verbose "VenvDir=$VenvDir"
+}
+
+# Next, read the `pyvenv.cfg` file to determine any required value such
+# as `prompt`.
+$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
+
+# Next, set the prompt from the command line, or the config file, or
+# just use the name of the virtual environment folder.
+if ($Prompt) {
+ Write-Verbose "Prompt specified as argument, using '$Prompt'"
+}
+else {
+ Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
+ if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
+ Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
+ $Prompt = $pyvenvCfg['prompt'];
+ }
+ else {
+ Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
+ Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
+ $Prompt = Split-Path -Path $venvDir -Leaf
+ }
+}
+
+Write-Verbose "Prompt = '$Prompt'"
+Write-Verbose "VenvDir='$VenvDir'"
+
+# Deactivate any currently active virtual environment, but leave the
+# deactivate function in place.
+deactivate -nondestructive
+
+# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
+# that there is an activated venv.
+$env:VIRTUAL_ENV = $VenvDir
+
+if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
+
+ Write-Verbose "Setting prompt to '$Prompt'"
+
+ # Set the prompt to include the env name
+ # Make sure _OLD_VIRTUAL_PROMPT is global
+ function global:_OLD_VIRTUAL_PROMPT { "" }
+ Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
+ New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
+
+ function global:prompt {
+ Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
+ _OLD_VIRTUAL_PROMPT
+ }
+}
+
+# Clear PYTHONHOME
+if (Test-Path -Path Env:PYTHONHOME) {
+ Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
+ Remove-Item -Path Env:PYTHONHOME
+}
+
+# Add the venv to the PATH
+Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
+$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
diff --git a/contrib/tools/python3/src/Lib/venv/scripts/nt/activate.bat b/contrib/tools/python3/src/Lib/venv/scripts/nt/activate.bat
index af4c7e0aba..f61413e232 100644
--- a/contrib/tools/python3/src/Lib/venv/scripts/nt/activate.bat
+++ b/contrib/tools/python3/src/Lib/venv/scripts/nt/activate.bat
@@ -1,33 +1,33 @@
-@echo off
-
-rem This file is UTF-8 encoded, so we need to update the current code page while executing it
-for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do (
- set _OLD_CODEPAGE=%%a
-)
-if defined _OLD_CODEPAGE (
- "%SystemRoot%\System32\chcp.com" 65001 > nul
-)
-
-set VIRTUAL_ENV=__VENV_DIR__
-
-if not defined PROMPT set PROMPT=$P$G
-
-if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT%
-if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%
-
-set _OLD_VIRTUAL_PROMPT=%PROMPT%
-set PROMPT=__VENV_PROMPT__%PROMPT%
-
-if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
-set PYTHONHOME=
-
-if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
-if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH%
-
-set PATH=%VIRTUAL_ENV%\__VENV_BIN_NAME__;%PATH%
-
-:END
-if defined _OLD_CODEPAGE (
- "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul
- set _OLD_CODEPAGE=
-)
+@echo off
+
+rem This file is UTF-8 encoded, so we need to update the current code page while executing it
+for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do (
+ set _OLD_CODEPAGE=%%a
+)
+if defined _OLD_CODEPAGE (
+ "%SystemRoot%\System32\chcp.com" 65001 > nul
+)
+
+set VIRTUAL_ENV=__VENV_DIR__
+
+if not defined PROMPT set PROMPT=$P$G
+
+if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT%
+if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%
+
+set _OLD_VIRTUAL_PROMPT=%PROMPT%
+set PROMPT=__VENV_PROMPT__%PROMPT%
+
+if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
+set PYTHONHOME=
+
+if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
+if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH%
+
+set PATH=%VIRTUAL_ENV%\__VENV_BIN_NAME__;%PATH%
+
+:END
+if defined _OLD_CODEPAGE (
+ "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul
+ set _OLD_CODEPAGE=
+)
diff --git a/contrib/tools/python3/src/Lib/venv/scripts/nt/deactivate.bat b/contrib/tools/python3/src/Lib/venv/scripts/nt/deactivate.bat
index 1205c61868..313c079117 100644
--- a/contrib/tools/python3/src/Lib/venv/scripts/nt/deactivate.bat
+++ b/contrib/tools/python3/src/Lib/venv/scripts/nt/deactivate.bat
@@ -1,21 +1,21 @@
-@echo off
-
-if defined _OLD_VIRTUAL_PROMPT (
- set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
-)
-set _OLD_VIRTUAL_PROMPT=
-
-if defined _OLD_VIRTUAL_PYTHONHOME (
- set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%"
- set _OLD_VIRTUAL_PYTHONHOME=
-)
-
-if defined _OLD_VIRTUAL_PATH (
- set "PATH=%_OLD_VIRTUAL_PATH%"
-)
-
-set _OLD_VIRTUAL_PATH=
-
-set VIRTUAL_ENV=
-
-:END
+@echo off
+
+if defined _OLD_VIRTUAL_PROMPT (
+ set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
+)
+set _OLD_VIRTUAL_PROMPT=
+
+if defined _OLD_VIRTUAL_PYTHONHOME (
+ set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%"
+ set _OLD_VIRTUAL_PYTHONHOME=
+)
+
+if defined _OLD_VIRTUAL_PATH (
+ set "PATH=%_OLD_VIRTUAL_PATH%"
+)
+
+set _OLD_VIRTUAL_PATH=
+
+set VIRTUAL_ENV=
+
+:END
diff --git a/library/cpp/monlib/service/pages/tablesorter/resources/jquery.tablesorter.js b/library/cpp/monlib/service/pages/tablesorter/resources/jquery.tablesorter.js
index 116e35af68..3001b4b833 100644
--- a/library/cpp/monlib/service/pages/tablesorter/resources/jquery.tablesorter.js
+++ b/library/cpp/monlib/service/pages/tablesorter/resources/jquery.tablesorter.js
@@ -1,7 +1,3 @@
/* jquery.tablesorter.js v2.22.3 */ !function(e){"use strict";e.extend({tablesorter:new function(){function t(){var e=arguments[0],t=arguments.length>1?Array.prototype.slice.call(arguments):e;"undefined"!=typeof console&&"undefined"!=typeof console.log?console[/error/i.test(e)?"error":/warn/i.test(e)?"warn":"log"](t):alert(t)}function r(e,r){t(e+" ("+((new Date).getTime()-r.getTime())+"ms)")}function s(e){for(var t in e)return!1;return!0}function a(r,s,a,n){for(var o,i,d=v.parsers.length,c=!1,l="",p=!0;""===l&&p;)a++,s[a]?(c=s[a].cells[n],l=v.getElementText(r,c,n),i=e(c),r.debug&&t("Checking if value was empty on row "+a+", column: "+n+': "'+l+'"')):p=!1;for(;--d>=0;)if(o=v.parsers[d],o&&"text"!==o.id&&o.is&&o.is(l,r.table,c,i))return o;return v.getParserById("text")}function n(e,s){var n,o,i,d,c,l,p,u,g,f,h,m,b=e.table,y=0,w="";if(e.$tbodies=e.$table.children("tbody:not(."+e.cssInfoBlock+")"),h="undefined"==typeof s?e.$tbodies:s,m=h.length,0===m)return e.debug?t("Warning: *Empty table!* Not building a parser cache"):"";for(e.debug&&(f=new Date,t("Detecting parsers for each column")),o={extractors:[],parsers:[]};m>y;){if(n=h[y].rows,n.length)for(i=e.columns,d=0;i>d;d++)c=e.$headerIndexed[d],l=v.getColumnData(b,e.headers,d),g=v.getParserById(v.getData(c,l,"extractor")),u=v.getParserById(v.getData(c,l,"sorter")),p="false"===v.getData(c,l,"parser"),e.empties[d]=(v.getData(c,l,"empty")||e.emptyTo||(e.emptyToBottom?"bottom":"top")).toLowerCase(),e.strings[d]=(v.getData(c,l,"string")||e.stringTo||"max").toLowerCase(),p&&(u=v.getParserById("no-parser")),g||(g=!1),u||(u=a(e,n,-1,d)),e.debug&&(w+="column:"+d+"; extractor:"+g.id+"; parser:"+u.id+"; string:"+e.strings[d]+"; empty: "+e.empties[d]+"\n"),o.parsers[d]=u,o.extractors[d]=g;y+=o.parsers.length?m:1}e.debug&&(t(w?w:"No parsers detected"),r("Completed detecting parsers",f)),e.parsers=o.parsers,e.extractors=o.extractors}function o(s,a){var n,o,i,d,c,l,p,u,g,f,h,m,b,y,w=s.config,x=w.parsers;if(w.$tbodies=w.$table.children("tbody:not(."+w.cssInfoBlock+")"),p="undefined"==typeof a?w.$tbodies:a,w.cache={},w.totalRows=0,!x)return w.debug?t("Warning: *Empty table!* Not building a cache"):"";for(w.debug&&(f=new Date),w.showProcessing&&v.isProcessing(s,!0),l=0;l<p.length;l++){for(y=[],n=w.cache[l]={normalized:[]},h=p[l]&&p[l].rows.length||0,d=0;h>d;++d)if(m={child:[],raw:[]},u=e(p[l].rows[d]),g=[],u.hasClass(w.cssChildRow)&&0!==d)for(o=n.normalized.length-1,b=n.normalized[o][w.columns],b.$row=b.$row.add(u),u.prev().hasClass(w.cssChildRow)||u.prev().addClass(v.css.cssHasChild),i=u.children("th, td"),o=b.child.length,b.child[o]=[],c=0;c<w.columns;c++)b.child[o][c]=v.getParsedText(w,i[c],c);else{for(m.$row=u,m.order=d,c=0;c<w.columns;++c)"undefined"!=typeof x[c]?(o=v.getElementText(w,u[0].cells[c],c),m.raw.push(o),i=v.getParsedText(w,u[0].cells[c],c,o),g.push(i),"numeric"===(x[c].type||"").toLowerCase()&&(y[c]=Math.max(Math.abs(i)||0,y[c]||0))):w.debug&&t("No parser found for cell:",u[0].cells[c],"does it have a header?");g[w.columns]=m,n.normalized.push(g)}n.colMax=y,w.totalRows+=n.normalized.length}w.showProcessing&&v.isProcessing(s),w.debug&&r("Building cache for "+h+" rows",f)}function i(e,t){var a,n,o,i,d,c,l,p=e.config,u=p.widgetOptions,g=p.$tbodies,f=[],h=p.cache;if(s(h))return p.appender?p.appender(e,f):e.isUpdating?p.$table.trigger("updateComplete",e):"";for(p.debug&&(l=new Date),c=0;c<g.length;c++)if(o=g.eq(c),o.length){for(i=v.processTbody(e,o,!0),a=h[c].normalized,n=a.length,d=0;n>d;d++)f.push(a[d][p.columns].$row),p.appender&&(!p.pager||p.pager.removeRows&&u.pager_removeRows||p.pager.ajax)||i.append(a[d][p.columns].$row);v.processTbody(e,i,!1)}p.appender&&p.appender(e,f),p.debug&&r("Rebuilt table",l),t||p.appender||v.applyWidget(e),e.isUpdating&&p.$table.trigger("updateComplete",e)}function d(e){return/^d/i.test(e)||1===e}function c(s){var a,n,o,i,c,l,u,g,f=s.config;for(f.headerList=[],f.headerContent=[],f.debug&&(u=new Date),f.columns=v.computeColumnIndex(f.$table.children("thead, tfoot").children("tr")),i=f.cssIcon?'<i class="'+(f.cssIcon===v.css.icon?v.css.icon:f.cssIcon+" "+v.css.icon)+'"></i>':"",f.$headers=e(e.map(e(s).find(f.selectorHeaders),function(t,r){return n=e(t),n.parent().hasClass(f.cssIgnoreRow)?void 0:(a=v.getColumnData(s,f.headers,r,!0),f.headerContent[r]=n.html(),""===f.headerTemplate||n.find("."+v.css.headerIn).length||(c=f.headerTemplate.replace(/\{content\}/g,n.html()).replace(/\{icon\}/g,n.find("."+v.css.icon).length?"":i),f.onRenderTemplate&&(o=f.onRenderTemplate.apply(n,[r,c]),o&&"string"==typeof o&&(c=o)),n.html('<div class="'+v.css.headerIn+'">'+c+"</div>")),f.onRenderHeader&&f.onRenderHeader.apply(n,[r,f,f.$table]),t.column=parseInt(n.attr("data-column"),10),t.order=d(v.getData(n,a,"sortInitialOrder")||f.sortInitialOrder)?[1,0,2]:[0,1,2],t.count=-1,t.lockedOrder=!1,l=v.getData(n,a,"lockedOrder")||!1,"undefined"!=typeof l&&l!==!1&&(t.order=t.lockedOrder=d(l)?[1,1,1]:[0,0,0]),n.addClass(v.css.header+" "+f.cssHeader),f.headerList[r]=t,n.parent().addClass(v.css.headerRow+" "+f.cssHeaderRow).attr("role","row"),f.tabIndex&&n.attr("tabindex",0),t)})),f.$headerIndexed=[],g=0;g<f.columns;g++)n=f.$headers.filter('[data-column="'+g+'"]'),f.$headerIndexed[g]=n.not(".sorter-false").length?n.not(".sorter-false").filter(":last"):n.filter(":last");e(s).find(f.selectorHeaders).attr({scope:"col",role:"columnheader"}),p(s),f.debug&&(r("Built headers:",u),t(f.$headers))}function l(e,t,r){var s=e.config;s.$table.find(s.selectorRemove).remove(),n(s),o(e),y(s,t,r)}function p(e){var t,r,s,a,n=e.config,o=n.$headers.length;for(t=0;o>t;t++)s=n.$headers.eq(t),a=v.getColumnData(e,n.headers,t,!0),r="false"===v.getData(s,a,"sorter")||"false"===v.getData(s,a,"parser"),s[0].sortDisabled=r,s[r?"addClass":"removeClass"]("sorter-false").attr("aria-disabled",""+r),e.id&&(r?s.removeAttr("aria-controls"):s.attr("aria-controls",e.id))}function u(t){var r,s,a,n,o,i,d,c,l=t.config,p=l.sortList,u=p.length,g=v.css.sortNone+" "+l.cssNone,f=[v.css.sortAsc+" "+l.cssAsc,v.css.sortDesc+" "+l.cssDesc],h=[l.cssIconAsc,l.cssIconDesc,l.cssIconNone],m=["ascending","descending"],b=e(t).find("tfoot tr").children().add(e(l.namespace+"_extra_headers")).removeClass(f.join(" "));for(l.$headers.removeClass(f.join(" ")).addClass(g).attr("aria-sort","none").find("."+v.css.icon).removeClass(h.join(" ")).addClass(h[2]),a=0;u>a;a++)if(2!==p[a][1]&&(r=l.$headers.not(".sorter-false").filter('[data-column="'+p[a][0]+'"]'+(1===u?":last":"")),r.length)){for(n=0;n<r.length;n++)r[n].sortDisabled||r.eq(n).removeClass(g).addClass(f[p[a][1]]).attr("aria-sort",m[p[a][1]]).find("."+v.css.icon).removeClass(h[2]).addClass(h[p[a][1]]);b.length&&b.filter('[data-column="'+p[a][0]+'"]').removeClass(g).addClass(f[p[a][1]])}for(u=l.$headers.length,o=l.$headers.not(".sorter-false"),a=0;u>a;a++)i=o.eq(a),i.length&&(s=o[a],d=s.order[(s.count+1)%(l.sortReset?3:2)],c=e.trim(i.text())+": "+v.language[i.hasClass(v.css.sortAsc)?"sortAsc":i.hasClass(v.css.sortDesc)?"sortDesc":"sortNone"]+v.language[0===d?"nextAsc":1===d?"nextDesc":"nextNone"],i.attr("aria-label",c))}function g(t,r){var s,a,n,o,i,d,c,l,p=t.config,u=r||p.sortList,g=u.length;for(p.sortList=[],i=0;g>i;i++)if(l=u[i],s=parseInt(l[0],10),s<p.columns&&p.$headerIndexed[s]){switch(o=p.$headerIndexed[s][0],a=(""+l[1]).match(/^(1|d|s|o|n)/),a=a?a[0]:""){case"1":case"d":a=1;break;case"s":a=d||0;break;case"o":c=o.order[(d||0)%(p.sortReset?3:2)],a=0===c?1:1===c?0:2;break;case"n":o.count=o.count+1,a=o.order[o.count%(p.sortReset?3:2)];break;default:a=0}d=0===i?a:d,n=[s,parseInt(a,10)||0],p.sortList.push(n),a=e.inArray(n[1],o.order),o.count=a>=0?a:n[1]%(p.sortReset?3:2)}}function f(e,t){return e&&e[t]?e[t].type||"":""}function h(t,r,s){if(t.isUpdating)return setTimeout(function(){h(t,r,s)},50);var a,n,o,d,c,l,p,g=t.config,f=!s[g.sortMultiSortKey],b=g.$table,y=g.$headers.length;if(b.trigger("sortStart",t),r.count=s[g.sortResetKey]?2:(r.count+1)%(g.sortReset?3:2),g.sortRestart)for(n=r,o=0;y>o;o++)p=g.$headers.eq(o),p[0]===n||!f&&p.is("."+v.css.sortDesc+",."+v.css.sortAsc)||(p[0].count=-1);if(n=parseInt(e(r).attr("data-column"),10),f){if(g.sortList=[],null!==g.sortForce)for(a=g.sortForce,d=0;d<a.length;d++)a[d][0]!==n&&g.sortList.push(a[d]);if(c=r.order[r.count],2>c&&(g.sortList.push([n,c]),r.colSpan>1))for(d=1;d<r.colSpan;d++)g.sortList.push([n+d,c])}else{if(g.sortAppend&&g.sortList.length>1)for(d=0;d<g.sortAppend.length;d++)l=v.isValueInArray(g.sortAppend[d][0],g.sortList),l>=0&&g.sortList.splice(l,1);if(v.isValueInArray(n,g.sortList)>=0)for(d=0;d<g.sortList.length;d++)l=g.sortList[d],c=g.$headerIndexed[l[0]][0],l[0]===n&&(l[1]=c.order[r.count],2===l[1]&&(g.sortList.splice(d,1),c.count=-1));else if(c=r.order[r.count],2>c&&(g.sortList.push([n,c]),r.colSpan>1))for(d=1;d<r.colSpan;d++)g.sortList.push([n+d,c])}if(null!==g.sortAppend)for(a=g.sortAppend,d=0;d<a.length;d++)a[d][0]!==n&&g.sortList.push(a[d]);b.trigger("sortBegin",t),setTimeout(function(){u(t),m(t),i(t),b.trigger("sortEnd",t)},1)}function m(e){var t,a,n,o,i,d,c,l,p,u,g,h=0,m=e.config,b=m.textSorter||"",y=m.sortList,w=y.length,x=m.$tbodies.length;if(!m.serverSideSorting&&!s(m.cache)){for(m.debug&&(i=new Date),a=0;x>a;a++)d=m.cache[a].colMax,c=m.cache[a].normalized,c.sort(function(r,s){for(t=0;w>t;t++){if(o=y[t][0],l=y[t][1],h=0===l,m.sortStable&&r[o]===s[o]&&1===w)return r[m.columns].order-s[m.columns].order;if(n=/n/i.test(f(m.parsers,o)),n&&m.strings[o]?(n="boolean"==typeof m.string[m.strings[o]]?(h?1:-1)*(m.string[m.strings[o]]?-1:1):m.strings[o]?m.string[m.strings[o]]||0:0,p=m.numberSorter?m.numberSorter(r[o],s[o],h,d[o],e):v["sortNumeric"+(h?"Asc":"Desc")](r[o],s[o],n,d[o],o,e)):(u=h?r:s,g=h?s:r,p="function"==typeof b?b(u[o],g[o],h,o,e):"object"==typeof b&&b.hasOwnProperty(o)?b[o](u[o],g[o],h,o,e):v["sortNatural"+(h?"Asc":"Desc")](r[o],s[o],o,e,m)),p)return p}return r[m.columns].order-s[m.columns].order});m.debug&&r("Sorting on "+y.toString()+" and dir "+l+" time",i)}}function b(t,r){t.table.isUpdating&&t.$table.trigger("updateComplete",t.table),e.isFunction(r)&&r(t.table)}function y(t,r,s){var a=e.isArray(r)?r:t.sortList,n="undefined"==typeof r?t.resort:r;n===!1||t.serverSideSorting||t.table.isProcessing?(b(t,s),v.applyWidget(t.table,!1)):a.length?t.$table.trigger("sorton",[a,function(){b(t,s)},!0]):t.$table.trigger("sortReset",[function(){b(t,s),v.applyWidget(t.table,!1)}])}function w(t){var r=t.config,a=r.$table,d="sortReset update updateRows updateCell updateAll addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(r.namespace+" ");a.unbind(d.replace(/\s+/g," ")).bind("sortReset"+r.namespace,function(s,a){s.stopPropagation(),r.sortList=[],u(t),m(t),i(t),e.isFunction(a)&&a(t)}).bind("updateAll"+r.namespace,function(e,s,a){e.stopPropagation(),t.isUpdating=!0,v.refreshWidgets(t,!0,!0),c(t),v.bindEvents(t,r.$headers,!0),w(t),l(t,s,a)}).bind("update"+r.namespace+" updateRows"+r.namespace,function(e,r,s){e.stopPropagation(),t.isUpdating=!0,p(t),l(t,r,s)}).bind("updateCell"+r.namespace,function(s,n,o,i){s.stopPropagation(),t.isUpdating=!0,a.find(r.selectorRemove).remove();var d,c,l,p,u=r.$tbodies,g=e(n),f=u.index(e.fn.closest?g.closest("tbody"):g.parents("tbody").filter(":first")),h=r.cache[f],m=e.fn.closest?g.closest("tr"):g.parents("tr").filter(":first");n=g[0],u.length&&f>=0&&(c=u.eq(f).find("tr").index(m),p=h.normalized[c],l=g.index(),d=v.getParsedText(r,n,l),p[l]=d,p[r.columns].$row=m,"numeric"===(r.parsers[l].type||"").toLowerCase()&&(h.colMax[l]=Math.max(Math.abs(d)||0,h.colMax[l]||0)),d="undefined"!==o?o:r.resort,d!==!1?y(r,d,i):(e.isFunction(i)&&i(t),r.$table.trigger("updateComplete",r.table)))}).bind("addRows"+r.namespace,function(a,o,i,d){if(a.stopPropagation(),t.isUpdating=!0,s(r.cache))p(t),l(t,i,d);else{o=e(o).attr("role","row");var c,u,g,f,h,m=o.filter("tr").length,b=r.$tbodies.index(o.parents("tbody").filter(":first"));for(r.parsers&&r.parsers.length||n(r),c=0;m>c;c++){for(g=o[c].cells.length,h=[],f={child:[],$row:o.eq(c),order:r.cache[b].normalized.length},u=0;g>u;u++)h[u]=v.getParsedText(r,o[c].cells[u],u),"numeric"===(r.parsers[u].type||"").toLowerCase()&&(r.cache[b].colMax[u]=Math.max(Math.abs(h[u])||0,r.cache[b].colMax[u]||0));h.push(f),r.cache[b].normalized.push(h)}y(r,i,d)}}).bind("updateComplete"+r.namespace,function(){t.isUpdating=!1}).bind("sorton"+r.namespace,function(r,n,d,c){var l=t.config;r.stopPropagation(),a.trigger("sortStart",this),g(t,n),u(t),l.delayInit&&s(l.cache)&&o(t),a.trigger("sortBegin",this),m(t),i(t,c),a.trigger("sortEnd",this),v.applyWidget(t),e.isFunction(d)&&d(t)}).bind("appendCache"+r.namespace,function(r,s,a){r.stopPropagation(),i(t,a),e.isFunction(s)&&s(t)}).bind("updateCache"+r.namespace,function(s,a,i){r.parsers&&r.parsers.length||n(r,i),o(t,i),e.isFunction(a)&&a(t)}).bind("applyWidgetId"+r.namespace,function(e,s){e.stopPropagation(),v.getWidgetById(s).format(t,r,r.widgetOptions)}).bind("applyWidgets"+r.namespace,function(e,r){e.stopPropagation(),v.applyWidget(t,r)}).bind("refreshWidgets"+r.namespace,function(e,r,s){e.stopPropagation(),v.refreshWidgets(t,r,s)}).bind("destroy"+r.namespace,function(e,r,s){e.stopPropagation(),v.destroy(t,r,s)}).bind("resetToLoadState"+r.namespace,function(){v.removeWidget(t,!0,!1),r=e.extend(!0,v.defaults,r.originalSettings),t.hasInitialized=!1,v.setup(t,r)})}var v=this;v.version="2.22.3",v.parsers=[],v.widgets=[],v.defaults={theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,tabIndex:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,resort:!0,headers:{},ignoreCase:!0,sortForce:null,sortList:[],sortAppend:null,sortStable:!1,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",textExtraction:"basic",textAttribute:"data-text",textSorter:null,numberSorter:null,widgets:[],widgetOptions:{zebra:["even","odd"]},initWidgets:!0,widgetClass:"widget-{name}",initialized:null,tableClass:"",cssAsc:"",cssDesc:"",cssNone:"",cssHeader:"",cssHeaderRow:"",cssProcessing:"",cssChildRow:"tablesorter-childRow",cssIcon:"tablesorter-icon",cssIconNone:"",cssIconAsc:"",cssIconDesc:"",cssInfoBlock:"tablesorter-infoOnly",cssNoSort:"tablesorter-noSort",cssIgnoreRow:"tablesorter-ignoreRow",pointerClick:"click",pointerDown:"mousedown",pointerUp:"mouseup",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[]},v.css={table:"tablesorter",cssHasChild:"tablesorter-hasChildRow",childRow:"tablesorter-childRow",colgroup:"tablesorter-colgroup",header:"tablesorter-header",headerRow:"tablesorter-headerRow",headerIn:"tablesorter-header-inner",icon:"tablesorter-icon",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc",sortNone:"tablesorter-headerUnSorted"},v.language={sortAsc:"Ascending sort applied, ",sortDesc:"Descending sort applied, ",sortNone:"No sort applied, ",nextAsc:"activate to apply an ascending sort",nextDesc:"activate to apply a descending sort",nextNone:"activate to remove the sort"},v.instanceMethods={},v.log=t,v.benchmark=r,v.getElementText=function(t,r,s){if(!r)return"";var a,n=t.textExtraction||"",o=r.jquery?r:e(r);return e.trim("string"==typeof n?"basic"===n&&"undefined"!=typeof(a=o.attr(t.textAttribute))?a:r.textContent||o.text():"function"==typeof n?n(o[0],t.table,s):"function"==typeof(a=v.getColumnData(t.table,n,s))?a(o[0],t.table,s):o[0].textContent||o.text())},v.getParsedText=function(e,t,r,s){"undefined"==typeof s&&(s=v.getElementText(e,t,r));var a=""+s,n=e.parsers[r],o=e.extractors[r];return n&&(o&&"function"==typeof o.format&&(s=o.format(s,e.table,t,r)),a="no-parser"===n.id?"":n.format(""+s,e.table,t,r),e.ignoreCase&&"string"==typeof a&&(a=a.toLowerCase())),a},v.construct=function(t){return this.each(function(){var r=this,s=e.extend(!0,{},v.defaults,t,v.instanceMethods);s.originalSettings=t,!r.hasInitialized&&v.buildTable&&"TABLE"!==this.nodeName?v.buildTable(r,s):v.setup(r,s)})},v.setup=function(r,s){if(!r||!r.tHead||0===r.tBodies.length||r.hasInitialized===!0)return s.debug?t("ERROR: stopping initialization! No table, thead, tbody or tablesorter has already been initialized"):"";var a="",i=e(r),d=e.metadata;r.hasInitialized=!1,r.isProcessing=!0,r.config=s,e.data(r,"tablesorter",s),s.debug&&e.data(r,"startoveralltimer",new Date),s.supportsDataObject=function(e){return e[0]=parseInt(e[0],10),e[0]>1||1===e[0]&&parseInt(e[1],10)>=4}(e.fn.jquery.split(".")),s.string={max:1,min:-1,emptymin:1,emptymax:-1,zero:0,none:0,"null":0,top:!0,bottom:!1},s.emptyTo=s.emptyTo.toLowerCase(),s.stringTo=s.stringTo.toLowerCase(),/tablesorter\-/.test(i.attr("class"))||(a=""!==s.theme?" tablesorter-"+s.theme:""),s.table=r,s.$table=i.addClass(v.css.table+" "+s.tableClass+a).attr("role","grid"),s.$headers=i.find(s.selectorHeaders),s.namespace=s.namespace?"."+s.namespace.replace(/\W/g,""):".tablesorter"+Math.random().toString(16).slice(2),s.$table.children().children("tr").attr("role","row"),s.$tbodies=i.children("tbody:not(."+s.cssInfoBlock+")").attr({"aria-live":"polite","aria-relevant":"all"}),s.$table.children("caption").length&&(a=s.$table.children("caption")[0],a.id||(a.id=s.namespace.slice(1)+"caption"),s.$table.attr("aria-labelledby",a.id)),s.widgetInit={},s.textExtraction=s.$table.attr("data-text-extraction")||s.textExtraction||"basic",c(r),v.fixColumnWidth(r),v.applyWidgetOptions(r,s),n(s),s.totalRows=0,s.delayInit||o(r),v.bindEvents(r,s.$headers,!0),w(r),s.supportsDataObject&&"undefined"!=typeof i.data().sortlist?s.sortList=i.data().sortlist:d&&i.metadata()&&i.metadata().sortlist&&(s.sortList=i.metadata().sortlist),v.applyWidget(r,!0),s.sortList.length>0?i.trigger("sorton",[s.sortList,{},!s.initWidgets,!0]):(u(r),s.initWidgets&&v.applyWidget(r,!1)),s.showProcessing&&i.unbind("sortBegin"+s.namespace+" sortEnd"+s.namespace).bind("sortBegin"+s.namespace+" sortEnd"+s.namespace,function(e){clearTimeout(s.processTimer),v.isProcessing(r),"sortBegin"===e.type&&(s.processTimer=setTimeout(function(){v.isProcessing(r,!0)},500))}),r.hasInitialized=!0,r.isProcessing=!1,s.debug&&v.benchmark("Overall initialization time",e.data(r,"startoveralltimer")),i.trigger("tablesorter-initialized",r),"function"==typeof s.initialized&&s.initialized(r)},v.fixColumnWidth=function(t){t=e(t)[0];var r,s,a,n,o,i=t.config,d=i.$table.children("colgroup");if(d.length&&d.hasClass(v.css.colgroup)&&d.remove(),i.widthFixed&&0===i.$table.children("colgroup").length){for(d=e('<colgroup class="'+v.css.colgroup+'">'),r=i.$table.width(),a=i.$tbodies.find("tr:first").children(":visible"),n=a.length,o=0;n>o;o++)s=parseInt(a.eq(o).width()/r*1e3,10)/10+"%",d.append(e("<col>").css("width",s));i.$table.prepend(d)}},v.getColumnData=function(t,r,s,a,n){if("undefined"!=typeof r&&null!==r){t=e(t)[0];var o,i,d=t.config,c=n||d.$headers,l=d.$headerIndexed&&d.$headerIndexed[s]||c.filter('[data-column="'+s+'"]:last');if(r[s])return a?r[s]:r[c.index(l)];for(i in r)if("string"==typeof i&&(o=l.filter(i).add(l.find(i)),o.length))return r[i]}},v.computeColumnIndex=function(t){var r,s,a,n,o,i,d,c,l,p,u,g,f=[],h=[],m={};for(r=0;r<t.length;r++)for(d=t[r].cells,s=0;s<d.length;s++){for(i=d[s],o=e(i),c=i.parentNode.rowIndex,l=c+"-"+o.index(),p=i.rowSpan||1,u=i.colSpan||1,"undefined"==typeof f[c]&&(f[c]=[]),a=0;a<f[c].length+1;a++)if("undefined"==typeof f[c][a]){g=a;break}for(m[l]=g,o.attr({"data-column":g}),a=c;c+p>a;a++)for("undefined"==typeof f[a]&&(f[a]=[]),h=f[a],n=g;g+u>n;n++)h[n]="x"}return h.length},v.isProcessing=function(t,r,s){t=e(t);var a=t[0].config,n=s||t.find("."+v.css.header);r?("undefined"!=typeof s&&a.sortList.length>0&&(n=n.filter(function(){return this.sortDisabled?!1:v.isValueInArray(parseFloat(e(this).attr("data-column")),a.sortList)>=0})),t.add(n).addClass(v.css.processing+" "+a.cssProcessing)):t.add(n).removeClass(v.css.processing+" "+a.cssProcessing)},v.processTbody=function(t,r,s){t=e(t)[0];var a;return s?(t.isProcessing=!0,r.before('<span class="tablesorter-savemyplace"/>'),a=e.fn.detach?r.detach():r.remove()):(a=e(t).find("span.tablesorter-savemyplace"),r.insertAfter(a),a.remove(),void(t.isProcessing=!1))},v.clearTableBody=function(t){e(t)[0].config.$tbodies.children().detach()},v.bindEvents=function(t,r,a){t=e(t)[0];var n,i=null,d=t.config;a!==!0&&(r.addClass(d.namespace.slice(1)+"_extra_headers"),n=e.fn.closest?r.closest("table")[0]:r.parents("table")[0],n&&"TABLE"===n.nodeName&&n!==t&&e(n).addClass(d.namespace.slice(1)+"_extra_table")),n=(d.pointerDown+" "+d.pointerUp+" "+d.pointerClick+" sort keyup ").replace(/\s+/g," ").split(" ").join(d.namespace+" "),r.find(d.selectorSort).add(r.filter(d.selectorSort)).unbind(n).bind(n,function(a,n){var c,l,p=e(a.target),u=" "+a.type+" ";if(!(1!==(a.which||a.button)&&!u.match(" "+d.pointerClick+" | sort | keyup ")||" keyup "===u&&13!==a.which||u.match(" "+d.pointerClick+" ")&&"undefined"!=typeof a.which||u.match(" "+d.pointerUp+" ")&&i!==a.target&&n!==!0)){if(u.match(" "+d.pointerDown+" "))return i=a.target,l=p.jquery.split("."),void("1"===l[0]&&l[1]<4&&a.preventDefault());if(i=null,/(input|select|button|textarea)/i.test(a.target.nodeName)||p.hasClass(d.cssNoSort)||p.parents("."+d.cssNoSort).length>0||p.parents("button").length>0)return!d.cancelSelection;d.delayInit&&s(d.cache)&&o(t),c=e.fn.closest?e(this).closest("th, td")[0]:/TH|TD/.test(this.nodeName)?this:e(this).parents("th, td")[0],c=d.$headers[r.index(c)],c.sortDisabled||h(t,c,a)}}),d.cancelSelection&&r.attr("unselectable","on").bind("selectstart",!1).css({"user-select":"none",MozUserSelect:"none"})},v.restoreHeaders=function(t){var r,s,a=e(t)[0].config,n=a.$table.find(a.selectorHeaders),o=n.length;for(r=0;o>r;r++)s=n.eq(r),s.find("."+v.css.headerIn).length&&s.html(a.headerContent[r])},v.destroy=function(t,r,s){if(t=e(t)[0],t.hasInitialized){v.removeWidget(t,!0,!1);var a,n=e(t),o=t.config,i=n.find("thead:first"),d=i.find("tr."+v.css.headerRow).removeClass(v.css.headerRow+" "+o.cssHeaderRow),c=n.find("tfoot:first > tr").children("th, td");r===!1&&e.inArray("uitheme",o.widgets)>=0&&(n.trigger("applyWidgetId",["uitheme"]),n.trigger("applyWidgetId",["zebra"])),i.find("tr").not(d).remove(),a="sortReset update updateAll updateRows updateCell addRows updateComplete sorton appendCache updateCache "+"applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd resetToLoadState ".split(" ").join(o.namespace+" "),n.removeData("tablesorter").unbind(a.replace(/\s+/g," ")),o.$headers.add(c).removeClass([v.css.header,o.cssHeader,o.cssAsc,o.cssDesc,v.css.sortAsc,v.css.sortDesc,v.css.sortNone].join(" ")).removeAttr("data-column").removeAttr("aria-label").attr("aria-disabled","true"),d.find(o.selectorSort).unbind("mousedown mouseup keypress ".split(" ").join(o.namespace+" ").replace(/\s+/g," ")),v.restoreHeaders(t),n.toggleClass(v.css.table+" "+o.tableClass+" tablesorter-"+o.theme,r===!1),t.hasInitialized=!1,delete t.config.cache,"function"==typeof s&&s(t)}},v.regex={chunk:/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,chunks:/(^\\0|\\0$)/,hex:/^0x[0-9a-f]+$/i},v.sortNatural=function(e,t){if(e===t)return 0;var r,s,a,n,o,i,d,c,l=v.regex;if(l.hex.test(t)){if(s=parseInt(e.match(l.hex),16),n=parseInt(t.match(l.hex),16),n>s)return-1;if(s>n)return 1}for(r=e.replace(l.chunk,"\\0$1\\0").replace(l.chunks,"").split("\\0"),a=t.replace(l.chunk,"\\0$1\\0").replace(l.chunks,"").split("\\0"),c=Math.max(r.length,a.length),d=0;c>d;d++){if(o=isNaN(r[d])?r[d]||0:parseFloat(r[d])||0,i=isNaN(a[d])?a[d]||0:parseFloat(a[d])||0,isNaN(o)!==isNaN(i))return isNaN(o)?1:-1;if(typeof o!=typeof i&&(o+="",i+=""),i>o)return-1;if(o>i)return 1}return 0},v.sortNaturalAsc=function(e,t,r,s,a){if(e===t)return 0;var n=a.string[a.empties[r]||a.emptyTo];return""===e&&0!==n?"boolean"==typeof n?n?-1:1:-n||-1:""===t&&0!==n?"boolean"==typeof n?n?1:-1:n||1:v.sortNatural(e,t)},v.sortNaturalDesc=function(e,t,r,s,a){if(e===t)return 0;var n=a.string[a.empties[r]||a.emptyTo];return""===e&&0!==n?"boolean"==typeof n?n?-1:1:n||1:""===t&&0!==n?"boolean"==typeof n?n?1:-1:-n||-1:v.sortNatural(t,e)},v.sortText=function(e,t){return e>t?1:t>e?-1:0},v.getTextValue=function(e,t,r){if(r){var s,a=e?e.length:0,n=r+t;for(s=0;a>s;s++)n+=e.charCodeAt(s);return t*n}return 0},v.sortNumericAsc=function(e,t,r,s,a,n){if(e===t)return 0;var o=n.config,i=o.string[o.empties[a]||o.emptyTo];return""===e&&0!==i?"boolean"==typeof i?i?-1:1:-i||-1:""===t&&0!==i?"boolean"==typeof i?i?1:-1:i||1:(isNaN(e)&&(e=v.getTextValue(e,r,s)),isNaN(t)&&(t=v.getTextValue(t,r,s)),e-t)},v.sortNumericDesc=function(e,t,r,s,a,n){if(e===t)return 0;var o=n.config,i=o.string[o.empties[a]||o.emptyTo];return""===e&&0!==i?"boolean"==typeof i?i?-1:1:i||1:""===t&&0!==i?"boolean"==typeof i?i?1:-1:-i||-1:(isNaN(e)&&(e=v.getTextValue(e,r,s)),isNaN(t)&&(t=v.getTextValue(t,r,s)),t-e)},v.sortNumeric=function(e,t){return e-t},v.characterEquivalents={a:"áàâãäąå",A:"ÁÀÂÃÄĄÅ",c:"çćč",C:"ÇĆČ",e:"éèêëěę",E:"ÉÈÊËĚĘ",i:"íìİîïı",I:"ÍÌİÎÏ",o:"óòôõöō",O:"ÓÒÔÕÖŌ",ss:"ß",SS:"ẞ",u:"úùûüů",U:"ÚÙÛÜŮ"},v.replaceAccents=function(e){var t,r="[",s=v.characterEquivalents;if(!v.characterRegex){v.characterRegexArray={};for(t in s)"string"==typeof t&&(r+=s[t],v.characterRegexArray[t]=new RegExp("["+s[t]+"]","g"));v.characterRegex=new RegExp(r+"]")}if(v.characterRegex.test(e))for(t in s)"string"==typeof t&&(e=e.replace(v.characterRegexArray[t],t));return e},v.isValueInArray=function(e,t){var r,s=t.length;for(r=0;s>r;r++)if(t[r][0]===e)return r;return-1},v.addParser=function(e){var t,r=v.parsers.length,s=!0;for(t=0;r>t;t++)v.parsers[t].id.toLowerCase()===e.id.toLowerCase()&&(s=!1);s&&v.parsers.push(e)},v.addInstanceMethods=function(t){e.extend(v.instanceMethods,t)},v.getParserById=function(e){if("false"==e)return!1;var t,r=v.parsers.length;for(t=0;r>t;t++)if(v.parsers[t].id.toLowerCase()===e.toString().toLowerCase())return v.parsers[t];return!1},v.addWidget=function(e){v.widgets.push(e)},v.hasWidget=function(t,r){return t=e(t),t.length&&t[0].config&&t[0].config.widgetInit[r]||!1},v.getWidgetById=function(e){var t,r,s=v.widgets.length;for(t=0;s>t;t++)if(r=v.widgets[t],r&&r.hasOwnProperty("id")&&r.id.toLowerCase()===e.toLowerCase())return r},v.applyWidgetOptions=function(t,r){var s,a,n=r.widgets.length,o=r.widgetOptions;if(n)for(s=0;n>s;s++)a=v.getWidgetById(r.widgets[s]),a&&"options"in a&&(o=t.config.widgetOptions=e.extend(!0,{},a.options,o))},v.applyWidget=function(t,s,a){t=e(t)[0];var n,o,i,d,c,l,p,u=t.config,g=u.widgetOptions,f=" "+u.table.className+" ",h=[];if(s===!1||!t.hasInitialized||!t.isApplyingWidgets&&!t.isUpdating){if(u.debug&&(d=new Date),p=new RegExp("\\s"+u.widgetClass.replace(/\{name\}/i,"([\\w-]+)")+"\\s","g"),f.match(p)&&(l=f.match(p)))for(o=l.length,n=0;o>n;n++)u.widgets.push(l[n].replace(p,"$1"));if(u.widgets.length){for(t.isApplyingWidgets=!0,u.widgets=e.grep(u.widgets,function(t,r){return e.inArray(t,u.widgets)===r}),i=u.widgets||[],o=i.length,n=0;o>n;n++)p=v.getWidgetById(i[n]),p&&p.id&&(p.priority||(p.priority=10),h[n]=p);for(h.sort(function(e,t){return e.priority<t.priority?-1:e.priority===t.priority?0:1}),o=h.length,n=0;o>n;n++)h[n]&&((s||!u.widgetInit[h[n].id])&&(u.widgetInit[h[n].id]=!0,t.hasInitialized&&v.applyWidgetOptions(t,u),"init"in h[n]&&(u.debug&&(c=new Date),h[n].init(t,h[n],u,g),u.debug&&v.benchmark("Initializing "+h[n].id+" widget",c))),!s&&"format"in h[n]&&(u.debug&&(c=new Date),h[n].format(t,u,g,!1),u.debug&&v.benchmark((s?"Initializing ":"Applying ")+h[n].id+" widget",c)));s||"function"!=typeof a||a(t)}setTimeout(function(){t.isApplyingWidgets=!1,e.data(t,"lastWidgetApplication",new Date)},0),u.debug&&(l=u.widgets.length,r("Completed "+(s===!0?"initializing ":"applying ")+l+" widget"+(1!==l?"s":""),d))}},v.removeWidget=function(r,s,a){r=e(r)[0];var n,o,i,d,c=r.config;if(s===!0)for(s=[],d=v.widgets.length,i=0;d>i;i++)o=v.widgets[i],o&&o.id&&s.push(o.id);else s=(e.isArray(s)?s.join(","):s||"").toLowerCase().split(/[\s,]+/);for(d=s.length,n=0;d>n;n++)o=v.getWidgetById(s[n]),i=e.inArray(s[n],c.widgets),o&&"remove"in o&&(c.debug&&i>=0&&t('Removing "'+s[n]+'" widget'),o.remove(r,c,c.widgetOptions,a),c.widgetInit[s[n]]=!1),i>=0&&a!==!0&&c.widgets.splice(i,1)},v.refreshWidgets=function(t,r,s){t=e(t)[0];var a,n=t.config,o=n.widgets,i=v.widgets,d=i.length,c=[],l=function(t){e(t).trigger("refreshComplete")};for(a=0;d>a;a++)i[a]&&i[a].id&&(r||e.inArray(i[a].id,o)<0)&&c.push(i[a].id);v.removeWidget(t,c.join(","),!0),s!==!0?(v.applyWidget(t,r||!1,l),r&&v.applyWidget(t,!1,l)):l(t)},v.getColumnText=function(t,r,a){t=e(t)[0];var n,o,i,d,c,l,p,u,g,f,h="function"==typeof a,m="all"===r,b={raw:[],parsed:[],$cell:[]},y=t.config;if(!s(y)){for(c=y.$tbodies.length,n=0;c>n;n++)for(i=y.cache[n].normalized,l=i.length,o=0;l>o;o++)f=!0,d=i[o],u=m?d.slice(0,y.columns):d[r],d=d[y.columns],p=m?d.raw:d.raw[r],g=m?d.$row.children():d.$row.children().eq(r),h&&(f=a({tbodyIndex:n,rowIndex:o,parsed:u,raw:p,$row:d.$row,$cell:g})),f!==!1&&(b.parsed.push(u),b.raw.push(p),b.$cell.push(g));return b}},v.getData=function(t,r,s){var a,n,o="",i=e(t);return i.length?(a=e.metadata?i.metadata():!1,n=" "+(i.attr("class")||""),"undefined"!=typeof i.data(s)||"undefined"!=typeof i.data(s.toLowerCase())?o+=i.data(s)||i.data(s.toLowerCase()):a&&"undefined"!=typeof a[s]?o+=a[s]:r&&"undefined"!=typeof r[s]?o+=r[s]:" "!==n&&n.match(" "+s+"-")&&(o=n.match(new RegExp("\\s"+s+"-([\\w-]+)"))[1]||""),e.trim(o)):""},v.formatFloat=function(t,r){if("string"!=typeof t||""===t)return t;var s,a=r&&r.config?r.config.usNumberFormat!==!1:"undefined"!=typeof r?r:!0;return t=a?t.replace(/,/g,""):t.replace(/[\s|\.]/g,"").replace(/,/g,"."),/^\s*\([.\d]+\)/.test(t)&&(t=t.replace(/^\s*\(([.\d]+)\)/,"-$1")),s=parseFloat(t),isNaN(s)?e.trim(t):s},v.isDigit=function(e){return isNaN(e)?/^[\-+(]?\d+[)]?$/.test(e.toString().replace(/[,.'"\s]/g,"")):""!==e}}});var t=e.tablesorter;e.fn.extend({tablesorter:t.construct}),t.addParser({id:"no-parser",is:function(){return!1},format:function(){return""},type:"text"}),t.addParser({id:"text",is:function(){return!0},format:function(r,s){var a=s.config;return r&&(r=e.trim(a.ignoreCase?r.toLocaleLowerCase():r),r=a.sortLocaleCompare?t.replaceAccents(r):r),r},type:"text"}),t.addParser({id:"digit",is:function(e){return t.isDigit(e)},format:function(r,s){var a=t.formatFloat((r||"").replace(/[^\w,. \-()]/g,""),s);return r&&"number"==typeof a?a:r?e.trim(r&&s.config.ignoreCase?r.toLocaleLowerCase():r):r},type:"numeric"}),t.addParser({id:"currency",is:function(e){return/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((e||"").replace(/[+\-,. ]/g,""))},format:function(r,s){var a=t.formatFloat((r||"").replace(/[^\w,. \-()]/g,""),s);return r&&"number"==typeof a?a:r?e.trim(r&&s.config.ignoreCase?r.toLocaleLowerCase():r):r},type:"numeric"}),t.addParser({id:"url",is:function(e){return/^(https?|ftp|file):\/\//.test(e)},format:function(t){return t?e.trim(t.replace(/(https?|ftp|file):\/\//,"")):t},parsed:!0,type:"text"}),t.addParser({id:"isoDate",is:function(e){return/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/.test(e)},format:function(e){var t=e?new Date(e.replace(/-/g,"/")):e;return t instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"}),t.addParser({id:"percent",is:function(e){return/(\d\s*?%|%\s*?\d)/.test(e)&&e.length<15},format:function(e,r){return e?t.formatFloat(e.replace(/%/g,""),r):e},type:"numeric"}),t.addParser({id:"image",is:function(e,t,r,s){return s.find("img").length>0},format:function(t,r,s){return e(s).find("img").attr(r.config.imgAttr||"alt")||t},parsed:!0,type:"text"}),t.addParser({id:"usLongDate",is:function(e){return/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(e)||/^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(e)},format:function(e){var t=e?new Date(e.replace(/(\S)([AP]M)$/i,"$1 $2")):e;return t instanceof Date&&isFinite(t)?t.getTime():e
-},type:"numeric"}),t.addParser({id:"shortDate",is:function(e){return/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/.test((e||"").replace(/\s+/g," ").replace(/[\-.,]/g,"/"))},format:function(e,r,s,a){if(e){var n,o,i=r.config,d=i.$headerIndexed[a],c=d.length&&d[0].dateFormat||t.getData(d,t.getColumnData(r,i.headers,a),"dateFormat")||i.dateFormat;return o=e.replace(/\s+/g," ").replace(/[\-.,]/g,"/"),"mmddyyyy"===c?o=o.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$1/$2"):"ddmmyyyy"===c?o=o.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$2/$1"):"yyyymmdd"===c&&(o=o.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,"$1/$2/$3")),n=new Date(o),n instanceof Date&&isFinite(n)?n.getTime():e}return e},type:"numeric"}),t.addParser({id:"time",is:function(e){return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(e)},format:function(e){var t=e?new Date("2000/01/01 "+e.replace(/(\S)([AP]M)$/i,"$1 $2")):e;return t instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"}),t.addParser({id:"metadata",is:function(){return!1},format:function(t,r,s){var a=r.config,n=a.parserMetadataName?a.parserMetadataName:"sortValue";return e(s).metadata()[n]},type:"numeric"}),t.addWidget({id:"zebra",priority:90,format:function(t,r,s){var a,n,o,i,d,c,l,p,u=new RegExp(r.cssChildRow,"i"),g=r.$tbodies.add(e(r.namespace+"_extra_table").children("tbody:not(."+r.cssInfoBlock+")"));for(r.debug&&(d=new Date),c=0;c<g.length;c++)for(o=0,a=g.eq(c).children("tr:visible").not(r.selectorRemove),p=a.length,l=0;p>l;l++)n=a.eq(l),u.test(n[0].className)||o++,i=o%2===0,n.removeClass(s.zebra[i?1:0]).addClass(s.zebra[i?0:1])},remove:function(e,r,s,a){if(!a){var n,o,i=r.$tbodies,d=(s.zebra||["even","odd"]).join(" ");for(n=0;n<i.length;n++)o=t.processTbody(e,i.eq(n),!0),o.children().removeClass(d),t.processTbody(e,o,!1)}}})}(jQuery);
-/* jquery.tablesorter.widgets.js v2.22.3 */ !function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){return function(e,t,r){"use strict";var i=e.tablesorter||{};i.storage=function(l,a,s,n){l=e(l)[0];var o,c,d,f=!1,u={},h=l.config,p=h&&h.widgetOptions,g=n&&n.useSessionStorage||p&&p.storage_useSessionStorage?"sessionStorage":"localStorage",m=e(l),b=n&&n.id||m.attr(n&&n.group||p&&p.storage_group||"data-table-group")||p&&p.storage_tableId||l.id||e(".tablesorter").index(m),y=n&&n.url||m.attr(n&&n.page||p&&p.storage_page||"data-table-page")||p&&p.storage_fixedUrl||h&&h.fixedUrl||t.location.pathname;if(g in t)try{t[g].setItem("_tmptest","temp"),f=!0,t[g].removeItem("_tmptest")}catch(_){h&&h.debug&&i.log(g+" is not supported in this browser")}return e.parseJSON&&(f?u=e.parseJSON(t[g][a]||"null")||{}:(c=r.cookie.split(/[;\s|=]/),o=e.inArray(a,c)+1,u=0!==o?e.parseJSON(c[o]||"null")||{}:{})),(s||""===s)&&t.JSON&&JSON.hasOwnProperty("stringify")?(u[y]||(u[y]={}),u[y][b]=s,f?t[g][a]=JSON.stringify(u):(d=new Date,d.setTime(d.getTime()+31536e6),r.cookie=a+"="+JSON.stringify(u).replace(/\"/g,'"')+"; expires="+d.toGMTString()+"; path=/"),void 0):u&&u[y]?u[y][b]:""}}(jQuery,window,document),function(e){"use strict";var t=e.tablesorter||{};t.themes={bootstrap:{table:"table table-bordered table-striped",caption:"caption",header:"bootstrap-header",sortNone:"",sortAsc:"",sortDesc:"",active:"",hover:"",icons:"",iconSortNone:"bootstrap-icon-unsorted",iconSortAsc:"icon-chevron-up glyphicon glyphicon-chevron-up",iconSortDesc:"icon-chevron-down glyphicon glyphicon-chevron-down",filterRow:"",footerRow:"",footerCells:"",even:"",odd:""},jui:{table:"ui-widget ui-widget-content ui-corner-all",caption:"ui-widget-content",header:"ui-widget-header ui-corner-all ui-state-default",sortNone:"",sortAsc:"",sortDesc:"",active:"ui-state-active",hover:"ui-state-hover",icons:"ui-icon",iconSortNone:"ui-icon-carat-2-n-s",iconSortAsc:"ui-icon-carat-1-n",iconSortDesc:"ui-icon-carat-1-s",filterRow:"",footerRow:"",footerCells:"",even:"ui-widget-content",odd:"ui-state-default"}},e.extend(t.css,{wrapper:"tablesorter-wrapper"}),t.addWidget({id:"uitheme",priority:10,format:function(r,i,l){var a,s,n,o,c,d,f,u,h,p,g,m,b=t.themes,y=i.$table.add(e(i.namespace+"_extra_table")),_=i.$headers.add(e(i.namespace+"_extra_headers")),v=i.theme||"jui",w=b[v]||{},x=e.trim([w.sortNone,w.sortDesc,w.sortAsc,w.active].join(" ")),C=e.trim([w.iconSortNone,w.iconSortDesc,w.iconSortAsc].join(" "));for(i.debug&&(o=new Date),y.hasClass("tablesorter-"+v)&&i.theme===i.appliedTheme&&l.uitheme_applied||(l.uitheme_applied=!0,h=b[i.appliedTheme]||{},m=!e.isEmptyObject(h),p=m?[h.sortNone,h.sortDesc,h.sortAsc,h.active].join(" "):"",g=m?[h.iconSortNone,h.iconSortDesc,h.iconSortAsc].join(" "):"",m&&(l.zebra[0]=e.trim(" "+l.zebra[0].replace(" "+h.even,"")),l.zebra[1]=e.trim(" "+l.zebra[1].replace(" "+h.odd,"")),i.$tbodies.children().removeClass([h.even,h.odd].join(" "))),w.even&&(l.zebra[0]+=" "+w.even),w.odd&&(l.zebra[1]+=" "+w.odd),y.children("caption").removeClass(h.caption||"").addClass(w.caption),f=y.removeClass((i.appliedTheme?"tablesorter-"+(i.appliedTheme||""):"")+" "+(h.table||"")).addClass("tablesorter-"+v+" "+(w.table||"")).children("tfoot"),i.appliedTheme=i.theme,f.length&&f.children("tr").removeClass(h.footerRow||"").addClass(w.footerRow).children("th, td").removeClass(h.footerCells||"").addClass(w.footerCells),_.removeClass((m?[h.header,h.hover,p].join(" "):"")||"").addClass(w.header).not(".sorter-false").unbind("mouseenter.tsuitheme mouseleave.tsuitheme").bind("mouseenter.tsuitheme mouseleave.tsuitheme",function(t){e(this)["mouseenter"===t.type?"addClass":"removeClass"](w.hover||"")}),_.each(function(){var r=e(this);r.find("."+t.css.wrapper).length||r.wrapInner('<div class="'+t.css.wrapper+'" style="position:relative;height:100%;width:100%"></div>')}),i.cssIcon&&_.find("."+t.css.icon).removeClass(m?[h.icons,g].join(" "):"").addClass(w.icons||""),y.hasClass("hasFilters")&&y.children("thead").children("."+t.css.filterRow).removeClass(m?h.filterRow||"":"").addClass(w.filterRow||"")),a=0;a<i.columns;a++)c=i.$headers.add(e(i.namespace+"_extra_headers")).not(".sorter-false").filter('[data-column="'+a+'"]'),d=t.css.icon?c.find("."+t.css.icon):e(),u=_.not(".sorter-false").filter('[data-column="'+a+'"]:last'),u.length&&(c.removeClass(x),d.removeClass(C),u[0].sortDisabled?d.removeClass(w.icons||""):(s=w.sortNone,n=w.iconSortNone,u.hasClass(t.css.sortAsc)?(s=[w.sortAsc,w.active].join(" "),n=w.iconSortAsc):u.hasClass(t.css.sortDesc)&&(s=[w.sortDesc,w.active].join(" "),n=w.iconSortDesc),c.addClass(s),d.addClass(n||"")));i.debug&&t.benchmark("Applying "+v+" theme",o)},remove:function(e,r,i,l){if(i.uitheme_applied){var a=r.$table,s=r.appliedTheme||"jui",n=t.themes[s]||t.themes.jui,o=a.children("thead").children(),c=n.sortNone+" "+n.sortDesc+" "+n.sortAsc,d=n.iconSortNone+" "+n.iconSortDesc+" "+n.iconSortAsc;a.removeClass("tablesorter-"+s+" "+n.table),i.uitheme_applied=!1,l||(a.find(t.css.header).removeClass(n.header),o.unbind("mouseenter.tsuitheme mouseleave.tsuitheme").removeClass(n.hover+" "+c+" "+n.active).filter("."+t.css.filterRow).removeClass(n.filterRow),o.find("."+t.css.icon).removeClass(n.icons+" "+d))}}})}(jQuery),function(e){"use strict";var t=e.tablesorter||{};t.addWidget({id:"columns",priority:30,options:{columns:["primary","secondary","tertiary"]},format:function(r,i,l){var a,s,n,o,c,d,f,u,h=i.$table,p=i.$tbodies,g=i.sortList,m=g.length,b=l&&l.columns||["primary","secondary","tertiary"],y=b.length-1;for(f=b.join(" "),s=0;s<p.length;s++)a=t.processTbody(r,p.eq(s),!0),n=a.children("tr"),n.each(function(){if(c=e(this),"none"!==this.style.display&&(d=c.children().removeClass(f),g&&g[0]&&(d.eq(g[0][0]).addClass(b[0]),m>1)))for(u=1;m>u;u++)d.eq(g[u][0]).addClass(b[u]||b[y])}),t.processTbody(r,a,!1);if(o=l.columns_thead!==!1?["thead tr"]:[],l.columns_tfoot!==!1&&o.push("tfoot tr"),o.length&&(n=h.find(o.join(",")).children().removeClass(f),m))for(u=0;m>u;u++)n.filter('[data-column="'+g[u][0]+'"]').addClass(b[u]||b[y])},remove:function(r,i,l){var a,s,n=i.$tbodies,o=(l.columns||["primary","secondary","tertiary"]).join(" ");for(i.$headers.removeClass(o),i.$table.children("tfoot").children("tr").children("th, td").removeClass(o),a=0;a<n.length;a++)s=t.processTbody(r,n.eq(a),!0),s.children("tr").each(function(){e(this).children().removeClass(o)}),t.processTbody(r,s,!1)}})}(jQuery),function(e){"use strict";var t=e.tablesorter||{},r=t.css;e.extend(r,{filterRow:"tablesorter-filter-row",filter:"tablesorter-filter",filterDisabled:"disabled",filterRowHide:"hideme"}),t.addWidget({id:"filter",priority:50,options:{filter_childRows:!1,filter_childByColumn:!1,filter_columnFilters:!0,filter_columnAnyMatch:!0,filter_cellFilter:"",filter_cssFilter:"",filter_defaultFilter:{},filter_excludeFilter:{},filter_external:"",filter_filteredRow:"filtered",filter_formatter:null,filter_functions:null,filter_hideEmpty:!0,filter_hideFilters:!1,filter_ignoreCase:!0,filter_liveSearch:!0,filter_onlyAvail:"filter-onlyAvail",filter_placeholder:{search:"",select:""},filter_reset:null,filter_saveFilters:!1,filter_searchDelay:300,filter_searchFiltered:!0,filter_selectSource:null,filter_startsWith:!1,filter_useParsedData:!1,filter_serversideFiltering:!1,filter_defaultAttrib:"data-value",filter_selectSourceSeparator:"|"},format:function(e,r,i){r.$table.hasClass("hasFilters")||t.filter.init(e,r,i)},remove:function(i,l,a,s){var n,o,c=l.$table,d=l.$tbodies,f="addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(l.namespace+"filter ");if(c.removeClass("hasFilters").unbind(f.replace(/\s+/g," ")).find("."+r.filterRow).remove(),!s){for(n=0;n<d.length;n++)o=t.processTbody(i,d.eq(n),!0),o.children().removeClass(a.filter_filteredRow).show(),t.processTbody(i,o,!1);a.filter_reset&&e(document).undelegate(a.filter_reset,"click.tsfilter")}}}),t.filter={regex:{regex:/^\/((?:\\\/|[^\/])+)\/([mig]{0,3})?$/,child:/tablesorter-childRow/,filtered:/filtered/,type:/undefined|number/,exact:/(^[\"\'=]+)|([\"\'=]+$)/g,nondigit:/[^\w,. \-()]/g,operators:/[<>=]/g,query:"(q|query)"},types:{or:function(r,i,l){if(/\|/.test(i.iFilter)||t.filter.regex.orSplit.test(i.filter)){var a,s,n,o,c=e.extend({},i),d=i.index,f=i.parsed[d],u=i.filter.split(t.filter.regex.orSplit),h=i.iFilter.split(t.filter.regex.orSplit),p=u.length;for(a=0;p>a;a++)if(c.nestedFilters=!0,c.filter=""+(t.filter.parseFilter(r,u[a],d,f)||""),c.iFilter=""+(t.filter.parseFilter(r,h[a],d,f)||""),n="("+(t.filter.parseFilter(r,c.filter,d,f)||"")+")",o=new RegExp(i.isMatch?n:"^"+n+"$",r.widgetOptions.filter_ignoreCase?"i":""),s=o.test(c.exact)||t.filter.processTypes(r,c,l))return s;return s||!1}return null},and:function(r,i,l){if(t.filter.regex.andTest.test(i.filter)){var a,s,n,o,c,d=e.extend({},i),f=i.index,u=i.parsed[f],h=i.filter.split(t.filter.regex.andSplit),p=i.iFilter.split(t.filter.regex.andSplit),g=h.length;for(a=0;g>a;a++)d.nestedFilters=!0,d.filter=""+(t.filter.parseFilter(r,h[a],f,u)||""),d.iFilter=""+(t.filter.parseFilter(r,p[a],f,u)||""),o=("("+(t.filter.parseFilter(r,d.filter,f,u)||"")+")").replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*"),c=new RegExp(i.isMatch?o:"^"+o+"$",r.widgetOptions.filter_ignoreCase?"i":""),n=c.test(d.exact)||t.filter.processTypes(r,d,l),s=0===a?n:s&&n;return s||!1}return null},regex:function(e,r){if(t.filter.regex.regex.test(r.filter)){var i,l=r.filter_regexCache[r.index]||t.filter.regex.regex.exec(r.filter),a=l instanceof RegExp;try{a||(r.filter_regexCache[r.index]=l=new RegExp(l[1],l[2])),i=l.test(r.exact)}catch(s){i=!1}return i}return null},operators:function(r,i){if(/^[<>]=?/.test(i.iFilter)&&""!==i.iExact){var l,a,s,n=r.table,o=i.index,c=i.parsed[o],d=t.formatFloat(i.iFilter.replace(t.filter.regex.operators,""),n),f=r.parsers[o],u=d;return(c||"numeric"===f.type)&&(s=e.trim(""+i.iFilter.replace(t.filter.regex.operators,"")),a=t.filter.parseFilter(r,s,o,!0),d="number"!=typeof a||""===a||isNaN(a)?d:a),!c&&"numeric"!==f.type||isNaN(d)||"undefined"==typeof i.cache?(s=isNaN(i.iExact)?i.iExact.replace(t.filter.regex.nondigit,""):i.iExact,l=t.formatFloat(s,n)):l=i.cache,/>/.test(i.iFilter)?a=/>=/.test(i.iFilter)?l>=d:l>d:/</.test(i.iFilter)&&(a=/<=/.test(i.iFilter)?d>=l:d>l),a||""!==u||(a=!0),a}return null},notMatch:function(r,i){if(/^\!/.test(i.iFilter)){var l,a=i.iFilter.replace("!",""),s=t.filter.parseFilter(r,a,i.index,i.parsed[i.index])||"";return t.filter.regex.exact.test(s)?(s=s.replace(t.filter.regex.exact,""),""===s?!0:e.trim(s)!==i.iExact):(l=i.iExact.search(e.trim(s)),""===s?!0:!(r.widgetOptions.filter_startsWith?0===l:l>=0))}return null},exact:function(r,i){if(t.filter.regex.exact.test(i.iFilter)){var l=i.iFilter.replace(t.filter.regex.exact,""),a=t.filter.parseFilter(r,l,i.index,i.parsed[i.index])||"";return i.anyMatch?e.inArray(a,i.rowArray)>=0:a==i.iExact}return null},range:function(e,r){if(t.filter.regex.toTest.test(r.iFilter)){var i,l,a,s,n=e.table,o=r.index,c=r.parsed[o],d=r.iFilter.split(t.filter.regex.toSplit);return l=d[0].replace(t.filter.regex.nondigit,"")||"",a=t.formatFloat(t.filter.parseFilter(e,l,o,c),n),l=d[1].replace(t.filter.regex.nondigit,"")||"",s=t.formatFloat(t.filter.parseFilter(e,l,o,c),n),(c||"numeric"===e.parsers[o].type)&&(i=e.parsers[o].format(""+d[0],n,e.$headers.eq(o),o),a=""===i||isNaN(i)?a:i,i=e.parsers[o].format(""+d[1],n,e.$headers.eq(o),o),s=""===i||isNaN(i)?s:i),!c&&"numeric"!==e.parsers[o].type||isNaN(a)||isNaN(s)?(l=isNaN(r.iExact)?r.iExact.replace(t.filter.regex.nondigit,""):r.iExact,i=t.formatFloat(l,n)):i=r.cache,a>s&&(l=a,a=s,s=l),i>=a&&s>=i||""===a||""===s}return null},wild:function(e,r){if(/[\?\*\|]/.test(r.iFilter)){var i=r.index,l=r.parsed[i],a=""+(t.filter.parseFilter(e,r.iFilter,i,l)||"");return!/\?\*/.test(a)&&r.nestedFilters&&(a=r.isMatch?a:"^("+a+")$"),new RegExp(a.replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*"),e.widgetOptions.filter_ignoreCase?"i":"").test(r.exact)}return null},fuzzy:function(e,r){if(/^~/.test(r.iFilter)){var i,l=0,a=r.iExact.length,s=r.iFilter.slice(1),n=t.filter.parseFilter(e,s,r.index,r.parsed[r.index])||"";for(i=0;a>i;i++)r.iExact[i]===n[l]&&(l+=1);return l===n.length?!0:!1}return null}},init:function(i,l,a){t.language=e.extend(!0,{},{to:"to",or:"or",and:"and"},t.language);var s,n,o,c,d,f,u,h,p,g=t.filter.regex;if(l.$table.addClass("hasFilters"),a.searchTimer=null,a.filter_initTimer=null,a.filter_formatterCount=0,a.filter_formatterInit=[],a.filter_anyColumnSelector='[data-column="all"],[data-column="any"]',a.filter_multipleColumnSelector='[data-column*="-"],[data-column*=","]',u="\\{"+t.filter.regex.query+"\\}",e.extend(g,{child:new RegExp(l.cssChildRow),filtered:new RegExp(a.filter_filteredRow),alreadyFiltered:new RegExp("(\\s+("+t.language.or+"|-|"+t.language.to+")\\s+)","i"),toTest:new RegExp("\\s+(-|"+t.language.to+")\\s+","i"),toSplit:new RegExp("(?:\\s+(?:-|"+t.language.to+")\\s+)","gi"),andTest:new RegExp("\\s+("+t.language.and+"|&&)\\s+","i"),andSplit:new RegExp("(?:\\s+(?:"+t.language.and+"|&&)\\s+)","gi"),orSplit:new RegExp("(?:\\s+(?:"+t.language.or+")\\s+|\\|)","gi"),iQuery:new RegExp(u,"i"),igQuery:new RegExp(u,"ig")}),u=l.$headers.filter(".filter-false, .parser-false").length,a.filter_columnFilters!==!1&&u!==l.$headers.length&&t.filter.buildRow(i,l,a),o="addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(l.namespace+"filter "),l.$table.bind(o,function(s,n){return u=a.filter_hideEmpty&&e.isEmptyObject(l.cache)&&!(l.delayInit&&"appendCache"===s.type),l.$table.find("."+r.filterRow).toggleClass(a.filter_filteredRow,u),/(search|filter)/.test(s.type)||(s.stopPropagation(),t.filter.buildDefault(i,!0)),"filterReset"===s.type?(l.$table.find("."+r.filter).add(a.filter_$externalFilters).val(""),t.filter.searching(i,[])):"filterEnd"===s.type?t.filter.buildDefault(i,!0):(n="search"===s.type?n:"updateComplete"===s.type?l.$table.data("lastSearch"):"",/(update|add)/.test(s.type)&&"updateComplete"!==s.type&&(l.lastCombinedFilter=null,l.lastSearch=[]),t.filter.searching(i,n,!0)),!1}),a.filter_reset&&(a.filter_reset instanceof e?a.filter_reset.click(function(){l.$table.trigger("filterReset")}):e(a.filter_reset).length&&e(document).undelegate(a.filter_reset,"click.tsfilter").delegate(a.filter_reset,"click.tsfilter",function(){l.$table.trigger("filterReset")})),a.filter_functions)for(d=0;d<l.columns;d++)if(h=t.getColumnData(i,a.filter_functions,d))if(c=l.$headerIndexed[d].removeClass("filter-select"),p=!(c.hasClass("filter-false")||c.hasClass("parser-false")),s="",h===!0&&p)t.filter.buildSelect(i,d);else if("object"==typeof h&&p){for(n in h)"string"==typeof n&&(s+=""===s?'<option value="">'+(c.data("placeholder")||c.attr("data-placeholder")||a.filter_placeholder.select||"")+"</option>":"",u=n,o=n,n.indexOf(a.filter_selectSourceSeparator)>=0&&(u=n.split(a.filter_selectSourceSeparator),o=u[1],u=u[0]),s+="<option "+(o===u?"":'data-function-name="'+n+'" ')+'value="'+u+'">'+o+"</option>");l.$table.find("thead").find("select."+r.filter+'[data-column="'+d+'"]').append(s),o=a.filter_selectSource,h=e.isFunction(o)?!0:t.getColumnData(i,o,d),h&&t.filter.buildSelect(l.table,d,"",!0,c.hasClass(a.filter_onlyAvail))}t.filter.buildDefault(i,!0),t.filter.bindSearch(i,l.$table.find("."+r.filter),!0),a.filter_external&&t.filter.bindSearch(i,a.filter_external),a.filter_hideFilters&&t.filter.hideFilters(i,l),l.showProcessing&&(o="filterStart filterEnd ".split(" ").join(l.namespace+"filter "),l.$table.unbind(o.replace(/\s+/g," ")).bind(o,function(a,s){c=s?l.$table.find("."+r.header).filter("[data-column]").filter(function(){return""!==s[e(this).data("column")]}):"",t.isProcessing(i,"filterStart"===a.type,s?c:"")})),l.filteredRows=l.totalRows,o="tablesorter-initialized pagerBeforeInitialized ".split(" ").join(l.namespace+"filter "),l.$table.unbind(o.replace(/\s+/g," ")).bind(o,function(){var e=this.config.widgetOptions;f=t.filter.setDefaults(i,l,e)||[],f.length&&(l.delayInit&&""===f.join("")||t.setFilters(i,f,!0)),l.$table.trigger("filterFomatterUpdate"),setTimeout(function(){e.filter_initialized||t.filter.filterInitComplete(l)},100)}),l.pager&&l.pager.initialized&&!a.filter_initialized&&(l.$table.trigger("filterFomatterUpdate"),setTimeout(function(){t.filter.filterInitComplete(l)},100))},formatterUpdated:function(e,t){var r=e.closest("table")[0].config.widgetOptions;r.filter_initialized||(r.filter_formatterInit[t]=1)},filterInitComplete:function(r){var i,l,a=r.widgetOptions,s=0,n=function(){a.filter_initialized=!0,r.$table.trigger("filterInit",r),t.filter.findRows(r.table,r.$table.data("lastSearch")||[])};if(e.isEmptyObject(a.filter_formatter))n();else{for(l=a.filter_formatterInit.length,i=0;l>i;i++)1===a.filter_formatterInit[i]&&s++;clearTimeout(a.filter_initTimer),a.filter_initialized||s!==a.filter_formatterCount?a.filter_initialized||(a.filter_initTimer=setTimeout(function(){n()},500)):n()}},setDefaults:function(r,i,l){var a,s,n,o,c,d=t.getFilters(r)||[];if(l.filter_saveFilters&&t.storage&&(s=t.storage(r,"tablesorter-filters")||[],a=e.isArray(s),a&&""===s.join("")||!a||(d=s)),""===d.join(""))for(c=i.$headers.add(l.filter_$externalFilters).filter("["+l.filter_defaultAttrib+"]"),n=0;n<=i.columns;n++)o=n===i.columns?"all":n,d[n]=c.filter('[data-column="'+o+'"]').attr(l.filter_defaultAttrib)||d[n]||"";return i.$table.data("lastSearch",d),d},parseFilter:function(e,t,r,i){return i?e.parsers[r].format(t,e.table,[],r):t},buildRow:function(i,l,a){var s,n,o,c,d,f,u,h,p=a.filter_cellFilter,g=l.columns,m=e.isArray(p),b='<tr role="row" class="'+r.filterRow+" "+l.cssIgnoreRow+'">';for(n=0;g>n;n++)b+="<td",b+=m?p[n]?' class="'+p[n]+'"':"":""!==p?' class="'+p+'"':"",b+="></td>";for(l.$filters=e(b+="</tr>").appendTo(l.$table.children("thead").eq(0)).find("td"),n=0;g>n;n++)d=!1,o=l.$headerIndexed[n],u=t.getColumnData(i,a.filter_functions,n),c=a.filter_functions&&u&&"function"!=typeof u||o.hasClass("filter-select"),s=t.getColumnData(i,l.headers,n),d="false"===t.getData(o[0],s,"filter")||"false"===t.getData(o[0],s,"parser"),c?b=e("<select>").appendTo(l.$filters.eq(n)):(u=t.getColumnData(i,a.filter_formatter,n),u?(a.filter_formatterCount++,b=u(l.$filters.eq(n),n),b&&0===b.length&&(b=l.$filters.eq(n).children("input")),b&&(0===b.parent().length||b.parent().length&&b.parent()[0]!==l.$filters[n])&&l.$filters.eq(n).append(b)):b=e('<input type="search">').appendTo(l.$filters.eq(n)),b&&(h=o.data("placeholder")||o.attr("data-placeholder")||a.filter_placeholder.search||"",b.attr("placeholder",h))),b&&(f=(e.isArray(a.filter_cssFilter)?"undefined"!=typeof a.filter_cssFilter[n]?a.filter_cssFilter[n]||"":"":a.filter_cssFilter)||"",b.addClass(r.filter+" "+f).attr("data-column",n),d&&(b.attr("placeholder","").addClass(r.filterDisabled)[0].disabled=!0))},bindSearch:function(r,i,l){if(r=e(r)[0],i=e(i),i.length){var a,s=r.config,n=s.widgetOptions,o=s.namespace+"filter",c=n.filter_$externalFilters;l!==!0&&(a=n.filter_anyColumnSelector+","+n.filter_multipleColumnSelector,n.filter_$anyMatch=i.filter(a),n.filter_$externalFilters=c&&c.length?n.filter_$externalFilters.add(i):i,t.setFilters(r,s.$table.data("lastSearch")||[],l===!1)),a="keypress keyup search change ".split(" ").join(o+" "),i.attr("data-lastSearchTime",(new Date).getTime()).unbind(a.replace(/\s+/g," ")).bind("keyup"+o,function(i){if(e(this).attr("data-lastSearchTime",(new Date).getTime()),27===i.which)this.value="";else{if(n.filter_liveSearch===!1)return;if(""!==this.value&&("number"==typeof n.filter_liveSearch&&this.value.length<n.filter_liveSearch||13!==i.which&&8!==i.which&&(i.which<32||i.which>=37&&i.which<=40)))return}t.filter.searching(r,!0,!0)}).bind("search change keypress ".split(" ").join(o+" "),function(i){var l=e(this).data("column");(13===i.which||"search"===i.type||"change"===i.type&&this.value!==s.lastSearch[l])&&(i.preventDefault(),e(this).attr("data-lastSearchTime",(new Date).getTime()),t.filter.searching(r,!1,!0))})}},searching:function(e,r,i){var l=e.config.widgetOptions;clearTimeout(l.searchTimer),"undefined"==typeof r||r===!0?l.searchTimer=setTimeout(function(){t.filter.checkFilters(e,r,i)},l.filter_liveSearch?l.filter_searchDelay:10):t.filter.checkFilters(e,r,i)},checkFilters:function(i,l,a){var s=i.config,n=s.widgetOptions,o=e.isArray(l),c=o?l:t.getFilters(i,!0),d=(c||[]).join("");return e.isEmptyObject(s.cache)?void(s.delayInit&&s.pager&&s.pager.initialized&&s.$table.trigger("updateCache",[function(){t.filter.checkFilters(i,!1,a)}])):(o&&(t.setFilters(i,c,!1,a!==!0),n.filter_initialized||(s.lastCombinedFilter="")),n.filter_hideFilters&&s.$table.find("."+r.filterRow).trigger(""===d?"mouseleave":"mouseenter"),s.lastCombinedFilter!==d||l===!1?(l===!1&&(s.lastCombinedFilter=null,s.lastSearch=[]),n.filter_initialized&&s.$table.trigger("filterStart",[c]),s.showProcessing?void setTimeout(function(){return t.filter.findRows(i,c,d),!1},30):(t.filter.findRows(i,c,d),!1)):void 0)},hideFilters:function(i,l){var a;l.$table.find("."+r.filterRow).bind("mouseenter mouseleave",function(t){var i=t,s=e(this);clearTimeout(a),a=setTimeout(function(){/enter|over/.test(i.type)?s.removeClass(r.filterRowHide):e(document.activeElement).closest("tr")[0]!==s[0]&&""===l.lastCombinedFilter&&s.addClass(r.filterRowHide)},200)}).find("input, select").bind("focus blur",function(i){var s=i,n=e(this).closest("tr");clearTimeout(a),a=setTimeout(function(){clearTimeout(a),""===t.getFilters(l.$table).join("")&&n.toggleClass(r.filterRowHide,"focus"!==s.type)},200)})},defaultFilter:function(r,i){if(""===r)return r;var l=t.filter.regex.iQuery,a=i.match(t.filter.regex.igQuery).length,s=a>1?e.trim(r).split(/\s/):[e.trim(r)],n=s.length-1,o=0,c=i;for(1>n&&a>1&&(s[1]=s[0]);l.test(c);)c=c.replace(l,s[o++]||""),l.test(c)&&n>o&&""!==(s[o]||"")&&(c=i.replace(l,c));return c},getLatestSearch:function(t){return t?t.sort(function(t,r){return e(r).attr("data-lastSearchTime")-e(t).attr("data-lastSearchTime")}):t||e()},multipleColumns:function(r,i){var l,a,s,n,o,c,d,f,u,h=r.widgetOptions,p=h.filter_initialized||!i.filter(h.filter_anyColumnSelector).length,g=[],m=e.trim(t.filter.getLatestSearch(i).attr("data-column")||"");if(p&&/-/.test(m))for(a=m.match(/(\d+)\s*-\s*(\d+)/g),u=a.length,f=0;u>f;f++){for(s=a[f].split(/\s*-\s*/),n=parseInt(s[0],10)||0,o=parseInt(s[1],10)||r.columns-1,n>o&&(l=n,n=o,o=l),o>=r.columns&&(o=r.columns-1);o>=n;n++)g.push(n);m=m.replace(a[f],"")}if(p&&/,/.test(m))for(c=m.split(/\s*,\s*/),u=c.length,d=0;u>d;d++)""!==c[d]&&(f=parseInt(c[d],10),f<r.columns&&g.push(f));if(!g.length)for(f=0;f<r.columns;f++)g.push(f);return g},processTypes:function(r,i,l){var a,s=null,n=null;for(a in t.filter.types)e.inArray(a,l.excludeMatch)<0&&null===n&&(n=t.filter.types[a](r,i,l),null!==n&&(s=n));return s},processRow:function(r,i,l){var a,s,n,o,c,d,f,u,h=t.filter.regex,p=r.widgetOptions,g=!0;if(i.$cells=i.$row.children(),i.anyMatchFlag){if(a=t.filter.multipleColumns(r,p.filter_$anyMatch),i.anyMatch=!0,i.isMatch=!0,i.rowArray=i.$cells.map(function(l){return e.inArray(l,a)>-1?(i.parsed[l]?u=i.cacheArray[l]:(u=i.rawArray[l],u=e.trim(p.filter_ignoreCase?u.toLowerCase():u),r.sortLocaleCompare&&(u=t.replaceAccents(u))),u):void 0}).get(),i.filter=i.anyMatchFilter,i.iFilter=i.iAnyMatchFilter,i.exact=i.rowArray.join(" "),i.iExact=p.filter_ignoreCase?i.exact.toLowerCase():i.exact,i.cache=i.cacheArray.slice(0,-1).join(" "),l.excludeMatch=l.noAnyMatch,c=t.filter.processTypes(r,i,l),null!==c)g=c;else if(p.filter_startsWith)for(g=!1,a=r.columns;!g&&a>0;)a--,g=g||0===i.rowArray[a].indexOf(i.iFilter);else g=(i.iExact+i.childRowText).indexOf(i.iFilter)>=0;if(i.anyMatch=!1,i.filters.join("")===i.filter)return g}for(a=0;a<r.columns;a++)i.filter=i.filters[a],i.index=a,l.excludeMatch=l.excludeFilter[a],i.filter&&(i.cache=i.cacheArray[a],p.filter_useParsedData||i.parsed[a]?i.exact=i.cache:(n=i.rawArray[a]||"",i.exact=r.sortLocaleCompare?t.replaceAccents(n):n),i.iExact=!h.type.test(typeof i.exact)&&p.filter_ignoreCase?i.exact.toLowerCase():i.exact,i.isMatch=r.$headerIndexed[i.index].hasClass("filter-match"),n=g,f=p.filter_columnFilters?r.$filters.add(r.$externalFilters).filter('[data-column="'+a+'"]').find("select option:selected").attr("data-function-name")||"":"",r.sortLocaleCompare&&(i.filter=t.replaceAccents(i.filter)),o=!0,p.filter_defaultFilter&&h.iQuery.test(l.defaultColFilter[a])&&(i.filter=t.filter.defaultFilter(i.filter,l.defaultColFilter[a]),o=!1),i.iFilter=p.filter_ignoreCase?(i.filter||"").toLowerCase():i.filter,d=l.functions[a],s=r.$headerIndexed[a].hasClass("filter-select"),c=null,(d||s&&o)&&(d===!0||s?c=i.isMatch?i.iExact.search(i.iFilter)>=0:i.filter===i.exact:"function"==typeof d?c=d(i.exact,i.cache,i.filter,a,i.$row,r,i):"function"==typeof d[f||i.filter]&&(u=f||i.filter,c=d[u](i.exact,i.cache,i.filter,a,i.$row,r,i))),null===c?(c=t.filter.processTypes(r,i,l),null!==c?n=c:(u=(i.iExact+i.childRowText).indexOf(t.filter.parseFilter(r,i.iFilter,a,i.parsed[a])),n=!p.filter_startsWith&&u>=0||p.filter_startsWith&&0===u)):n=c,g=n?g:!1);return g},findRows:function(r,i,l){if(r.config.lastCombinedFilter!==l&&r.config.widgetOptions.filter_initialized){var a,s,n,o,c,d,f,u,h,p,g,m,b,y,_,v,w,x,C,z,S,$,F=e.extend([],i),R=t.filter.regex,k=r.config,T=k.widgetOptions,A={anyMatch:!1,filters:i,filter_regexCache:[]},H={noAnyMatch:["range","notMatch","operators"],functions:[],excludeFilter:[],defaultColFilter:[],defaultAnyFilter:t.getColumnData(r,T.filter_defaultFilter,k.columns,!0)||""};for(A.parsed=k.$headers.map(function(i){return k.parsers&&k.parsers[i]&&k.parsers[i].parsed||t.getData&&"parsed"===t.getData(k.$headerIndexed[i],t.getColumnData(r,k.headers,i),"filter")||e(this).hasClass("filter-parsed")}).get(),u=0;u<k.columns;u++)H.functions[u]=t.getColumnData(r,T.filter_functions,u),H.defaultColFilter[u]=t.getColumnData(r,T.filter_defaultFilter,u)||"",H.excludeFilter[u]=(t.getColumnData(r,T.filter_excludeFilter,u,!0)||"").split(/\s+/);for(k.debug&&(t.log("Filter: Starting filter widget search",i),b=new Date),k.filteredRows=0,k.totalRows=0,l=(F||[]).join(""),d=0;d<k.$tbodies.length;d++){if(f=t.processTbody(r,k.$tbodies.eq(d),!0),u=k.columns,s=k.cache[d].normalized,o=e(e.map(s,function(e){return e[u].$row.get()})),""===l||T.filter_serversideFiltering)o.removeClass(T.filter_filteredRow).not("."+k.cssChildRow).css("display","");else{if(o=o.not("."+k.cssChildRow),a=o.length,(T.filter_$anyMatch&&T.filter_$anyMatch.length||"undefined"!=typeof i[k.columns])&&(A.anyMatchFlag=!0,A.anyMatchFilter=""+(i[k.columns]||T.filter_$anyMatch&&t.filter.getLatestSearch(T.filter_$anyMatch).val()||""),T.filter_columnAnyMatch)){for(x=A.anyMatchFilter.split(R.andSplit),C=!1,_=0;_<x.length;_++)z=x[_].split(":"),z.length>1&&(S=parseInt(z[0],10)-1,S>=0&&S<k.columns&&(i[S]=z[1],x.splice(_,1),_--,C=!0));C&&(A.anyMatchFilter=x.join(" && "))}if(w=T.filter_searchFiltered,g=k.lastSearch||k.$table.data("lastSearch")||[],w)for(_=0;u+1>_;_++)y=i[_]||"",w||(_=u),w=!(!w||!g.length||0!==y.indexOf(g[_]||"")||R.alreadyFiltered.test(y)||/[=\"\|!]/.test(y)||/(>=?\s*-\d)/.test(y)||/(<=?\s*\d)/.test(y)||""!==y&&k.$filters&&k.$filters.eq(_).find("select").length&&!k.$headerIndexed[_].hasClass("filter-match"));for(v=o.not("."+T.filter_filteredRow).length,w&&0===v&&(w=!1),k.debug&&t.log("Filter: Searching through "+(w&&a>v?v:"all")+" rows"),A.anyMatchFlag&&(k.sortLocaleCompare&&(A.anyMatchFilter=t.replaceAccents(A.anyMatchFilter)),T.filter_defaultFilter&&R.iQuery.test(H.defaultAnyFilter)&&(A.anyMatchFilter=t.filter.defaultFilter(A.anyMatchFilter,H.defaultAnyFilter),w=!1),A.iAnyMatchFilter=T.filter_ignoreCase&&k.ignoreCase?A.anyMatchFilter.toLowerCase():A.anyMatchFilter),c=0;a>c;c++)if($=o[c].className,h=c&&R.child.test($),!(h||w&&R.filtered.test($))){if(A.$row=o.eq(c),A.cacheArray=s[c],n=A.cacheArray[k.columns],A.rawArray=n.raw,A.childRowText="",!T.filter_childByColumn){for($="",p=n.child,_=0;_<p.length;_++)$+=" "+p[_].join("")||"";A.childRowText=T.filter_childRows?T.filter_ignoreCase?$.toLowerCase():$:""}if(m=t.filter.processRow(k,A,H),p=n.$row.filter(":gt( 0 )"),T.filter_childRows&&p.length){if(T.filter_childByColumn)for(_=0;_<p.length;_++)A.$row=p.eq(_),A.cacheArray=n.child[_],A.rawArray=A.cacheArray,m=m||t.filter.processRow(k,A,H);p.toggleClass(T.filter_filteredRow,!m)}n.$row.toggleClass(T.filter_filteredRow,!m)[0].display=m?"":"none"}}k.filteredRows+=o.not("."+T.filter_filteredRow).length,k.totalRows+=o.length,t.processTbody(r,f,!1)}k.lastCombinedFilter=l,k.lastSearch=F,k.$table.data("lastSearch",F),T.filter_saveFilters&&t.storage&&t.storage(r,"tablesorter-filters",F),k.debug&&t.benchmark("Completed filter widget search",b),T.filter_initialized&&k.$table.trigger("filterEnd",k),setTimeout(function(){k.$table.trigger("applyWidgets")},0)}},getOptionSource:function(r,i,l){r=e(r)[0];var a,s,n,o,c=r.config,d=c.widgetOptions,f=[],u=!1,h=d.filter_selectSource,p=c.$table.data("lastSearch")||[],g=e.isFunction(h)?!0:t.getColumnData(r,h,i);if(l&&""!==p[i]&&(l=!1),g===!0)u=h(r,i,l);else{if(g instanceof e||"string"===e.type(g)&&g.indexOf("</option>")>=0)return g;e.isArray(g)?u=g:"object"===e.type(h)&&g&&(u=g(r,i,l))}if(u===!1&&(u=t.filter.getOptions(r,i,l)),u=e.grep(u,function(t,r){return e.inArray(t,u)===r}),c.$headerIndexed[i].hasClass("filter-select-nosort"))return u;for(o=u.length,n=0;o>n;n++)s=u[n],f.push({t:s,p:c.parsers&&c.parsers.length&&c.parsers[i].format(s,r,[],i)||s});for(a=c.textSorter||"",f.sort(function(l,s){var n=l.p.toString(),o=s.p.toString();return e.isFunction(a)?a(n,o,!0,i,r):"object"==typeof a&&a.hasOwnProperty(i)?a[i](n,o,!0,i,r):t.sortNatural?t.sortNatural(n,o):!0}),u=[],o=f.length,n=0;o>n;n++)u.push(f[n].t);return u},getOptions:function(t,r,i){t=e(t)[0];var l,a,s,n,o,c=t.config,d=c.widgetOptions,f=[];for(a=0;a<c.$tbodies.length;a++)for(o=c.cache[a],s=c.cache[a].normalized.length,l=0;s>l;l++)n=o.row?o.row[l]:o.normalized[l][c.columns].$row[0],i&&n.className.match(d.filter_filteredRow)||f.push(d.filter_useParsedData||c.parsers[r].parsed||c.$headerIndexed[r].hasClass("filter-parsed")?""+o.normalized[l][r]:o.normalized[l][c.columns].raw[r]);return f},buildSelect:function(i,l,a,s,n){if(i=e(i)[0],l=parseInt(l,10),i.config.cache&&!e.isEmptyObject(i.config.cache)){var o,c,d,f,u,h,p=i.config,g=p.widgetOptions,m=p.$headerIndexed[l],b='<option value="">'+(m.data("placeholder")||m.attr("data-placeholder")||g.filter_placeholder.select||"")+"</option>",y=p.$table.find("thead").find("select."+r.filter+'[data-column="'+l+'"]').val();if(("undefined"==typeof a||""===a)&&(a=t.filter.getOptionSource(i,l,n)),e.isArray(a)){for(o=0;o<a.length;o++)d=a[o]=(""+a[o]).replace(/\"/g,"&quot;"),c=d,d.indexOf(g.filter_selectSourceSeparator)>=0&&(f=d.split(g.filter_selectSourceSeparator),c=f[0],d=f[1]),b+=""!==a[o]?"<option "+(c===d?"":'data-function-name="'+a[o]+'" ')+'value="'+c+'">'+d+"</option>":"";a=[]}u=(p.$filters?p.$filters:p.$table.children("thead")).find("."+r.filter),g.filter_$externalFilters&&(u=u&&u.length?u.add(g.filter_$externalFilters):g.filter_$externalFilters),h=u.filter('select[data-column="'+l+'"]'),h.length&&(h[s?"html":"append"](b),e.isArray(a)||h.append(a).val(y),h.val(y))}},buildDefault:function(e,r){var i,l,a,s=e.config,n=s.widgetOptions,o=s.columns;for(i=0;o>i;i++)l=s.$headerIndexed[i],a=!(l.hasClass("filter-false")||l.hasClass("parser-false")),(l.hasClass("filter-select")||t.getColumnData(e,n.filter_functions,i)===!0)&&a&&t.filter.buildSelect(e,i,"",r,l.hasClass(n.filter_onlyAvail))}},t.getFilters=function(i,l,a,s){var n,o,c,d,f=!1,u=i?e(i)[0].config:"",h=u?u.widgetOptions:"";if(l!==!0&&h&&!h.filter_columnFilters||e.isArray(a)&&a.join("")===u.lastCombinedFilter)return e(i).data("lastSearch");if(u&&(u.$filters&&(o=u.$filters.find("."+r.filter)),h.filter_$externalFilters&&(o=o&&o.length?o.add(h.filter_$externalFilters):h.filter_$externalFilters),o&&o.length))for(f=a||[],n=0;n<u.columns+1;n++)d=n===u.columns?h.filter_anyColumnSelector+","+h.filter_multipleColumnSelector:'[data-column="'+n+'"]',c=o.filter(d),c.length&&(c=t.filter.getLatestSearch(c),e.isArray(a)?(s&&c.length>1&&(c=c.slice(1)),n===u.columns&&(d=c.filter(h.filter_anyColumnSelector),c=d.length?d:c),c.val(a[n]).trigger("change.tsfilter")):(f[n]=c.val()||"",n===u.columns?c.slice(1).filter('[data-column*="'+c.attr("data-column")+'"]').val(f[n]):c.slice(1).val(f[n])),n===u.columns&&c.length&&(h.filter_$anyMatch=c));
- return 0===f.length&&(f=!1),f},t.setFilters=function(r,i,l,a){var s=r?e(r)[0].config:"",n=t.getFilters(r,!0,i,a);return s&&l&&(s.lastCombinedFilter=null,s.lastSearch=[],t.filter.searching(s.table,i,a),s.$table.trigger("filterFomatterUpdate")),!!n}}(jQuery),function(e,t){"use strict";var r=e.tablesorter||{};e.extend(r.css,{sticky:"tablesorter-stickyHeader",stickyVis:"tablesorter-sticky-visible",stickyHide:"tablesorter-sticky-hidden",stickyWrap:"tablesorter-sticky-wrapper"}),r.addHeaderResizeEvent=function(t,r,i){if(t=e(t)[0],t.config){var l={timer:250},a=e.extend({},l,i),s=t.config,n=s.widgetOptions,o=function(e){var t,r,i,l,a,o,c=s.$headers.length;for(n.resize_flag=!0,r=[],t=0;c>t;t++)i=s.$headers.eq(t),l=i.data("savedSizes")||[0,0],a=i[0].offsetWidth,o=i[0].offsetHeight,(a!==l[0]||o!==l[1])&&(i.data("savedSizes",[a,o]),r.push(i[0]));r.length&&e!==!1&&s.$table.trigger("resize",[r]),n.resize_flag=!1};return o(!1),clearInterval(n.resize_timer),r?(n.resize_flag=!1,!1):void(n.resize_timer=setInterval(function(){n.resize_flag||o()},a.timer))}},r.addWidget({id:"stickyHeaders",priority:60,options:{stickyHeaders:"",stickyHeaders_attachTo:null,stickyHeaders_xScroll:null,stickyHeaders_yScroll:null,stickyHeaders_offset:0,stickyHeaders_filteredToTop:!0,stickyHeaders_cloneId:"-sticky",stickyHeaders_addResizeEvent:!0,stickyHeaders_includeCaption:!0,stickyHeaders_zIndex:2},format:function(i,l,a){if(!(l.$table.hasClass("hasStickyHeaders")||e.inArray("filter",l.widgets)>=0&&!l.$table.hasClass("hasFilters"))){var s,n,o,c,d=l.$table,f=e(a.stickyHeaders_attachTo),u=l.namespace+"stickyheaders ",h=e(a.stickyHeaders_yScroll||a.stickyHeaders_attachTo||t),p=e(a.stickyHeaders_xScroll||a.stickyHeaders_attachTo||t),g=d.children("thead:first"),m=g.children("tr").not(".sticky-false").children(),b=d.children("tfoot"),y=isNaN(a.stickyHeaders_offset)?e(a.stickyHeaders_offset):"",_=y.length?y.height()||0:parseInt(a.stickyHeaders_offset,10)||0,v=d.parent().closest("."+r.css.table).hasClass("hasStickyHeaders")?d.parent().closest("table.tablesorter")[0].config.widgetOptions.$sticky.parent():[],w=v.length?v.height():0,x=a.$sticky=d.clone().addClass("containsStickyHeaders "+r.css.sticky+" "+a.stickyHeaders+" "+l.namespace.slice(1)+"_extra_table").wrap('<div class="'+r.css.stickyWrap+'">'),C=x.parent().addClass(r.css.stickyHide).css({position:f.length?"absolute":"fixed",padding:parseInt(x.parent().parent().css("padding-left"),10),top:_+w,left:0,visibility:"hidden",zIndex:a.stickyHeaders_zIndex||2}),z=x.children("thead:first"),S="",$=0,F=function(e,r){var i,l,a,s,n,o=e.filter(":visible"),c=o.length;for(i=0;c>i;i++)s=r.filter(":visible").eq(i),n=o.eq(i),"border-box"===n.css("box-sizing")?l=n.outerWidth():"collapse"===s.css("border-collapse")?t.getComputedStyle?l=parseFloat(t.getComputedStyle(n[0],null).width):(a=parseFloat(n.css("border-width")),l=n.outerWidth()-parseFloat(n.css("padding-left"))-parseFloat(n.css("padding-right"))-a):l=n.width(),s.css({width:l,"min-width":l,"max-width":l})},R=function(){_=y.length?y.height()||0:parseInt(a.stickyHeaders_offset,10)||0,$=0,C.css({left:f.length?parseInt(f.css("padding-left"),10)||0:d.offset().left-parseInt(d.css("margin-left"),10)-p.scrollLeft()-$,width:d.outerWidth()}),F(d,x),F(m,c)},k=function(t){if(d.is(":visible")){w=v.length?v.offset().top-h.scrollTop()+v.height():0;var i=d.offset(),l=e.isWindow(h[0]),a=e.isWindow(p[0]),s=(f.length?l?h.scrollTop():h.offset().top:h.scrollTop())+_+w,n=d.height()-(C.height()+(b.height()||0)),o=s>i.top&&s<i.top+n?"visible":"hidden",c={visibility:o};f.length&&(c.top=l?s-f.offset().top:f.scrollTop()),a&&(c.left=d.offset().left-parseInt(d.css("margin-left"),10)-p.scrollLeft()-$),v.length&&(c.top=(c.top||0)+_+w),C.removeClass(r.css.stickyVis+" "+r.css.stickyHide).addClass("visible"===o?r.css.stickyVis:r.css.stickyHide).css(c),(o!==S||t)&&(R(),S=o)}};if(f.length&&!f.css("position")&&f.css("position","relative"),x.attr("id")&&(x[0].id+=a.stickyHeaders_cloneId),x.find("thead:gt(0), tr.sticky-false").hide(),x.find("tbody, tfoot").remove(),x.find("caption").toggle(a.stickyHeaders_includeCaption),c=z.children().children(),x.css({height:0,width:0,margin:0}),c.find("."+r.css.resizer).remove(),d.addClass("hasStickyHeaders").bind("pagerComplete"+u,function(){R()}),r.bindEvents(i,z.children().children("."+r.css.header)),d.after(C),l.onRenderHeader)for(o=z.children("tr").children(),n=o.length,s=0;n>s;s++)l.onRenderHeader.apply(o.eq(s),[s,l,x]);p.add(h).unbind("scroll resize ".split(" ").join(u).replace(/\s+/g," ")).bind("scroll resize ".split(" ").join(u),function(e){k("resize"===e.type)}),l.$table.unbind("stickyHeadersUpdate"+u).bind("stickyHeadersUpdate"+u,function(){k(!0)}),a.stickyHeaders_addResizeEvent&&r.addHeaderResizeEvent(i),d.hasClass("hasFilters")&&a.filter_columnFilters&&(d.bind("filterEnd"+u,function(){var i=e(document.activeElement).closest("td"),s=i.parent().children().index(i);C.hasClass(r.css.stickyVis)&&a.stickyHeaders_filteredToTop&&(t.scrollTo(0,d.position().top),s>=0&&l.$filters&&l.$filters.eq(s).find("a, select, input").filter(":visible").focus())}),r.filter.bindSearch(d,c.find("."+r.css.filter)),a.filter_hideFilters&&r.filter.hideFilters(x,l)),d.trigger("stickyHeadersInit")}},remove:function(i,l,a){var s=l.namespace+"stickyheaders ";l.$table.removeClass("hasStickyHeaders").unbind("pagerComplete filterEnd stickyHeadersUpdate ".split(" ").join(s).replace(/\s+/g," ")).next("."+r.css.stickyWrap).remove(),a.$sticky&&a.$sticky.length&&a.$sticky.remove(),e(t).add(a.stickyHeaders_xScroll).add(a.stickyHeaders_yScroll).add(a.stickyHeaders_attachTo).unbind("scroll resize ".split(" ").join(s).replace(/\s+/g," ")),r.addHeaderResizeEvent(i,!1)}})}(jQuery,window),function(e,t){"use strict";var r=e.tablesorter||{};e.extend(r.css,{resizableContainer:"tablesorter-resizable-container",resizableHandle:"tablesorter-resizable-handle",resizableNoSelect:"tablesorter-disableSelection",resizableStorage:"tablesorter-resizable"}),e(function(){var t="<style>body."+r.css.resizableNoSelect+" { -ms-user-select: none; -moz-user-select: -moz-none;-khtml-user-select: none; -webkit-user-select: none; user-select: none; }."+r.css.resizableContainer+" { position: relative; height: 1px; }."+r.css.resizableHandle+" { position: absolute; display: inline-block; width: 8px;top: 1px; cursor: ew-resize; z-index: 3; user-select: none; -moz-user-select: none; }</style>";e(t).appendTo("body")}),r.resizable={init:function(t,i){if(!t.$table.hasClass("hasResizable")){t.$table.addClass("hasResizable");var l,a,s,n,o,c=t.$table,d=c.parent(),f=parseInt(c.css("margin-top"),10),u=i.resizable_={useStorage:r.storage&&i.resizable!==!1,$wrap:d,mouseXPosition:0,$target:null,$next:null,overflow:"auto"===d.css("overflow")||"scroll"===d.css("overflow")||"auto"===d.css("overflow-x")||"scroll"===d.css("overflow-x"),storedSizes:[]};for(r.resizableReset(t.table,!0),u.tableWidth=c.width(),u.fullWidth=Math.abs(d.width()-u.tableWidth)<20,u.useStorage&&u.overflow&&(r.storage(t.table,"tablesorter-table-original-css-width",u.tableWidth),o=r.storage(t.table,"tablesorter-table-resized-width")||"auto",r.resizable.setWidth(c,o,!0)),i.resizable_.storedSizes=n=(u.useStorage?r.storage(t.table,r.css.resizableStorage):[])||[],r.resizable.setWidths(t,i,n),r.resizable.updateStoredSizes(t,i),i.$resizable_container=e('<div class="'+r.css.resizableContainer+'">').css({top:f}).insertBefore(c),s=0;s<t.columns;s++)a=t.$headerIndexed[s],o=r.getColumnData(t.table,t.headers,s),l="false"===r.getData(a,o,"resizable"),l||e('<div class="'+r.css.resizableHandle+'">').appendTo(i.$resizable_container).attr({"data-column":s,unselectable:"on"}).data("header",a).bind("selectstart",!1);c.one("tablesorter-initialized",function(){r.resizable.setHandlePosition(t,i),r.resizable.bindings(this.config,this.config.widgetOptions)})}},updateStoredSizes:function(e,t){var r,i,l=e.columns,a=t.resizable_;for(a.storedSizes=[],r=0;l>r;r++)i=e.$headerIndexed[r],a.storedSizes[r]=i.is(":visible")?i.width():0},setWidth:function(e,t,r){e.css({width:t,"min-width":r?t:"","max-width":r?t:""})},setWidths:function(t,i,l){var a,s,n=i.resizable_,o=e(t.namespace+"_extra_headers"),c=t.$table.children("colgroup").children("col");if(l=l||n.storedSizes||[],l.length){for(a=0;a<t.columns;a++)r.resizable.setWidth(t.$headerIndexed[a],l[a],n.overflow),o.length&&(s=o.eq(a).add(c.eq(a)),r.resizable.setWidth(s,l[a],n.overflow));s=e(t.namespace+"_extra_table"),s.length&&!r.hasWidget(t.table,"scroller")&&r.resizable.setWidth(s,t.$table.outerWidth(),n.overflow)}},setHandlePosition:function(t,i){var l,a=r.hasWidget(t.table,"scroller"),s=t.$table.height(),n=i.$resizable_container.children(),o=Math.floor(n.width()/2);a&&(s=0,t.$table.closest("."+r.css.scrollerWrap).children().each(function(){var t=e(this);s+=t.filter('[style*="height"]').length?t.height():t.children("table").height()})),l=t.$table.position().left,n.each(function(){var r=e(this),a=parseInt(r.attr("data-column"),10),n=t.columns-1,c=r.data("header");c&&(c.is(":visible")?(n>a||a===n&&i.resizable_addLastColumn)&&r.css({display:"inline-block",height:s,left:c.position().left-l+c.outerWidth()-o}):r.hide())})},toggleTextSelection:function(t,i){var l=t.namespace+"tsresize";t.widgetOptions.resizable_.disabled=i,e("body").toggleClass(r.css.resizableNoSelect,i),i?e("body").attr("unselectable","on").bind("selectstart"+l,!1):e("body").removeAttr("unselectable").unbind("selectstart"+l)},bindings:function(i,l){var a=i.namespace+"tsresize";l.$resizable_container.children().bind("mousedown",function(t){var a,s=l.resizable_,n=e(i.namespace+"_extra_headers"),o=e(t.target).data("header");a=parseInt(o.attr("data-column"),10),s.$target=o=o.add(n.filter('[data-column="'+a+'"]')),s.target=a,s.$next=t.shiftKey||l.resizable_targetLast?o.parent().children().not(".resizable-false").filter(":last"):o.nextAll(":not(.resizable-false)").eq(0),a=parseInt(s.$next.attr("data-column"),10),s.$next=s.$next.add(n.filter('[data-column="'+a+'"]')),s.next=a,s.mouseXPosition=t.pageX,r.resizable.updateStoredSizes(i,l),r.resizable.toggleTextSelection(i,!0)}),e(document).bind("mousemove"+a,function(e){var t=l.resizable_;t.disabled&&0!==t.mouseXPosition&&t.$target&&(l.resizable_throttle?(clearTimeout(t.timer),t.timer=setTimeout(function(){r.resizable.mouseMove(i,l,e)},isNaN(l.resizable_throttle)?5:l.resizable_throttle)):r.resizable.mouseMove(i,l,e))}).bind("mouseup"+a,function(){l.resizable_.disabled&&(r.resizable.toggleTextSelection(i,!1),r.resizable.stopResize(i,l),r.resizable.setHandlePosition(i,l))}),e(t).bind("resize"+a+" resizeEnd"+a,function(){r.resizable.setHandlePosition(i,l)}),i.$table.bind("columnUpdate"+a,function(){r.resizable.setHandlePosition(i,l)}).find("thead:first").add(e(i.namespace+"_extra_table").find("thead:first")).bind("contextmenu"+a,function(){var e=0===l.resizable_.storedSizes.length;return r.resizableReset(i.table),r.resizable.setHandlePosition(i,l),l.resizable_.storedSizes=[],e})},mouseMove:function(t,i,l){if(0!==i.resizable_.mouseXPosition&&i.resizable_.$target){var a,s=0,n=i.resizable_,o=n.$next,c=n.storedSizes[n.target],d=l.pageX-n.mouseXPosition;if(n.overflow){if(c+d>0){for(n.storedSizes[n.target]+=d,r.resizable.setWidth(n.$target,n.storedSizes[n.target],!0),a=0;a<t.columns;a++)s+=n.storedSizes[a];r.resizable.setWidth(t.$table.add(e(t.namespace+"_extra_table")),s)}o.length||(n.$wrap[0].scrollLeft=t.$table.width())}else n.fullWidth?(n.storedSizes[n.target]+=d,n.storedSizes[n.next]-=d,r.resizable.setWidths(t,i)):(n.storedSizes[n.target]+=d,r.resizable.setWidths(t,i));n.mouseXPosition=l.pageX,t.$table.trigger("stickyHeadersUpdate")}},stopResize:function(e,t){var i=t.resizable_;r.resizable.updateStoredSizes(e,t),i.useStorage&&(r.storage(e.table,r.css.resizableStorage,i.storedSizes),r.storage(e.table,"tablesorter-table-resized-width",e.$table.width())),i.mouseXPosition=0,i.$target=i.$next=null,e.$table.trigger("stickyHeadersUpdate")}},r.addWidget({id:"resizable",priority:40,options:{resizable:!0,resizable_addLastColumn:!1,resizable_widths:[],resizable_throttle:!1,resizable_targetLast:!1,resizable_fullWidth:null},init:function(e,t,i,l){r.resizable.init(i,l)},remove:function(t,i,l,a){if(l.$resizable_container){var s=i.namespace+"tsresize";i.$table.add(e(i.namespace+"_extra_table")).removeClass("hasResizable").children("thead").unbind("contextmenu"+s),l.$resizable_container.remove(),r.resizable.toggleTextSelection(i,!1),r.resizableReset(t,a),e(document).unbind("mousemove"+s+" mouseup"+s)}}}),r.resizableReset=function(t,i){e(t).each(function(){var e,l,a=this.config,s=a&&a.widgetOptions,n=s.resizable_;if(t&&a&&a.$headerIndexed.length){for(n.overflow&&n.tableWidth&&(r.resizable.setWidth(a.$table,n.tableWidth,!0),n.useStorage&&r.storage(t,"tablesorter-table-resized-width","auto")),e=0;e<a.columns;e++)l=a.$headerIndexed[e],s.resizable_widths&&s.resizable_widths[e]?r.resizable.setWidth(l,s.resizable_widths[e],n.overflow):l.hasClass("resizable-false")||r.resizable.setWidth(l,"",n.overflow);a.$table.trigger("stickyHeadersUpdate"),r.storage&&!i&&r.storage(this,r.css.resizableStorage,{})}})}}(jQuery,window),function(e){"use strict";var t=e.tablesorter||{};t.addWidget({id:"saveSort",priority:20,options:{saveSort:!0},init:function(e,t,r,i){t.format(e,r,i,!0)},format:function(r,i,l,a){var s,n,o=i.$table,c=l.saveSort!==!1,d={sortList:i.sortList};i.debug&&(n=new Date),o.hasClass("hasSaveSort")?c&&r.hasInitialized&&t.storage&&(t.storage(r,"tablesorter-savesort",d),i.debug&&t.benchmark("saveSort widget: Saving last sort: "+i.sortList,n)):(o.addClass("hasSaveSort"),d="",t.storage&&(s=t.storage(r,"tablesorter-savesort"),d=s&&s.hasOwnProperty("sortList")&&e.isArray(s.sortList)?s.sortList:"",i.debug&&t.benchmark('saveSort: Last sort loaded: "'+d+'"',n),o.bind("saveSortReset",function(e){e.stopPropagation(),t.storage(r,"tablesorter-savesort","")})),a&&d&&d.length>0?i.sortList=d:r.hasInitialized&&d&&d.length>0&&o.trigger("sorton",[d]))},remove:function(e,r){r.$table.removeClass("hasSaveSort"),t.storage&&t.storage(e,"tablesorter-savesort","")}})}(jQuery),e.tablesorter});
-/* custom */ $(document).ready(function(){$('.table-sortable').tablesorter({theme:'bootstrap',widgets:['uitheme','zebra','filter'],headerTemplate:'{content} {icon}',widthFixed:true,ignoreCase:true,widgetOptions:{filter_columnFilters:true,zebra:['even','odd'],filter_reset:'.reset'}});});
-/* jquery.tablesorter.widgets.js */ !function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){return function(e,t,r){"use strict";var i=e.tablesorter||{};i.storage=function(l,a,s,n){l=e(l)[0];var o,c,d,f=!1,u={},h=l.config,p=h&&h.widgetOptions,g=n&&n.useSessionStorage||p&&p.storage_useSessionStorage?"sessionStorage":"localStorage",m=e(l),b=n&&n.id||m.attr(n&&n.group||p&&p.storage_group||"data-table-group")||p&&p.storage_tableId||l.id||e(".tablesorter").index(m),y=n&&n.url||m.attr(n&&n.page||p&&p.storage_page||"data-table-page")||p&&p.storage_fixedUrl||h&&h.fixedUrl||t.location.pathname;if(g in t)try{t[g].setItem("_tmptest","temp"),f=!0,t[g].removeItem("_tmptest")}catch(_){h&&h.debug&&i.log(g+" is not supported in this browser")}return e.parseJSON&&(f?u=e.parseJSON(t[g][a]||"null")||{}:(c=r.cookie.split(/[;\s|=]/),o=e.inArray(a,c)+1,u=0!==o?e.parseJSON(c[o]||"null")||{}:{})),(s||""===s)&&t.JSON&&JSON.hasOwnProperty("stringify")?(u[y]||(u[y]={}),u[y][b]=s,f?t[g][a]=JSON.stringify(u):(d=new Date,d.setTime(d.getTime()+31536e6),r.cookie=a+"="+JSON.stringify(u).replace(/\"/g,'"')+"; expires="+d.toGMTString()+"; path=/"),void 0):u&&u[y]?u[y][b]:""}}(jQuery,window,document),function(e){"use strict";var t=e.tablesorter||{};t.themes={bootstrap:{table:"table table-bordered table-striped",caption:"caption",header:"bootstrap-header",sortNone:"",sortAsc:"",sortDesc:"",active:"",hover:"",icons:"",iconSortNone:"bootstrap-icon-unsorted",iconSortAsc:"icon-chevron-up glyphicon glyphicon-chevron-up",iconSortDesc:"icon-chevron-down glyphicon glyphicon-chevron-down",filterRow:"",footerRow:"",footerCells:"",even:"",odd:""},jui:{table:"ui-widget ui-widget-content ui-corner-all",caption:"ui-widget-content",header:"ui-widget-header ui-corner-all ui-state-default",sortNone:"",sortAsc:"",sortDesc:"",active:"ui-state-active",hover:"ui-state-hover",icons:"ui-icon",iconSortNone:"ui-icon-carat-2-n-s",iconSortAsc:"ui-icon-carat-1-n",iconSortDesc:"ui-icon-carat-1-s",filterRow:"",footerRow:"",footerCells:"",even:"ui-widget-content",odd:"ui-state-default"}},e.extend(t.css,{wrapper:"tablesorter-wrapper"}),t.addWidget({id:"uitheme",priority:10,format:function(r,i,l){var a,s,n,o,c,d,f,u,h,p,g,m,b=t.themes,y=i.$table.add(e(i.namespace+"_extra_table")),_=i.$headers.add(e(i.namespace+"_extra_headers")),v=i.theme||"jui",w=b[v]||{},x=e.trim([w.sortNone,w.sortDesc,w.sortAsc,w.active].join(" ")),C=e.trim([w.iconSortNone,w.iconSortDesc,w.iconSortAsc].join(" "));for(i.debug&&(o=new Date),y.hasClass("tablesorter-"+v)&&i.theme===i.appliedTheme&&l.uitheme_applied||(l.uitheme_applied=!0,h=b[i.appliedTheme]||{},m=!e.isEmptyObject(h),p=m?[h.sortNone,h.sortDesc,h.sortAsc,h.active].join(" "):"",g=m?[h.iconSortNone,h.iconSortDesc,h.iconSortAsc].join(" "):"",m&&(l.zebra[0]=e.trim(" "+l.zebra[0].replace(" "+h.even,"")),l.zebra[1]=e.trim(" "+l.zebra[1].replace(" "+h.odd,"")),i.$tbodies.children().removeClass([h.even,h.odd].join(" "))),w.even&&(l.zebra[0]+=" "+w.even),w.odd&&(l.zebra[1]+=" "+w.odd),y.children("caption").removeClass(h.caption||"").addClass(w.caption),f=y.removeClass((i.appliedTheme?"tablesorter-"+(i.appliedTheme||""):"")+" "+(h.table||"")).addClass("tablesorter-"+v+" "+(w.table||"")).children("tfoot"),i.appliedTheme=i.theme,f.length&&f.children("tr").removeClass(h.footerRow||"").addClass(w.footerRow).children("th, td").removeClass(h.footerCells||"").addClass(w.footerCells),_.removeClass((m?[h.header,h.hover,p].join(" "):"")||"").addClass(w.header).not(".sorter-false").unbind("mouseenter.tsuitheme mouseleave.tsuitheme").bind("mouseenter.tsuitheme mouseleave.tsuitheme",function(t){e(this)["mouseenter"===t.type?"addClass":"removeClass"](w.hover||"")}),_.each(function(){var r=e(this);r.find("."+t.css.wrapper).length||r.wrapInner('<div class="'+t.css.wrapper+'" style="position:relative;height:100%;width:100%"></div>')}),i.cssIcon&&_.find("."+t.css.icon).removeClass(m?[h.icons,g].join(" "):"").addClass(w.icons||""),y.hasClass("hasFilters")&&y.children("thead").children("."+t.css.filterRow).removeClass(m?h.filterRow||"":"").addClass(w.filterRow||"")),a=0;a<i.columns;a++)c=i.$headers.add(e(i.namespace+"_extra_headers")).not(".sorter-false").filter('[data-column="'+a+'"]'),d=t.css.icon?c.find("."+t.css.icon):e(),u=_.not(".sorter-false").filter('[data-column="'+a+'"]:last'),u.length&&(c.removeClass(x),d.removeClass(C),u[0].sortDisabled?d.removeClass(w.icons||""):(s=w.sortNone,n=w.iconSortNone,u.hasClass(t.css.sortAsc)?(s=[w.sortAsc,w.active].join(" "),n=w.iconSortAsc):u.hasClass(t.css.sortDesc)&&(s=[w.sortDesc,w.active].join(" "),n=w.iconSortDesc),c.addClass(s),d.addClass(n||"")));i.debug&&t.benchmark("Applying "+v+" theme",o)},remove:function(e,r,i,l){if(i.uitheme_applied){var a=r.$table,s=r.appliedTheme||"jui",n=t.themes[s]||t.themes.jui,o=a.children("thead").children(),c=n.sortNone+" "+n.sortDesc+" "+n.sortAsc,d=n.iconSortNone+" "+n.iconSortDesc+" "+n.iconSortAsc;a.removeClass("tablesorter-"+s+" "+n.table),i.uitheme_applied=!1,l||(a.find(t.css.header).removeClass(n.header),o.unbind("mouseenter.tsuitheme mouseleave.tsuitheme").removeClass(n.hover+" "+c+" "+n.active).filter("."+t.css.filterRow).removeClass(n.filterRow),o.find("."+t.css.icon).removeClass(n.icons+" "+d))}}})}(jQuery),function(e){"use strict";var t=e.tablesorter||{};t.addWidget({id:"columns",priority:30,options:{columns:["primary","secondary","tertiary"]},format:function(r,i,l){var a,s,n,o,c,d,f,u,h=i.$table,p=i.$tbodies,g=i.sortList,m=g.length,b=l&&l.columns||["primary","secondary","tertiary"],y=b.length-1;for(f=b.join(" "),s=0;s<p.length;s++)a=t.processTbody(r,p.eq(s),!0),n=a.children("tr"),n.each(function(){if(c=e(this),"none"!==this.style.display&&(d=c.children().removeClass(f),g&&g[0]&&(d.eq(g[0][0]).addClass(b[0]),m>1)))for(u=1;m>u;u++)d.eq(g[u][0]).addClass(b[u]||b[y])}),t.processTbody(r,a,!1);if(o=l.columns_thead!==!1?["thead tr"]:[],l.columns_tfoot!==!1&&o.push("tfoot tr"),o.length&&(n=h.find(o.join(",")).children().removeClass(f),m))for(u=0;m>u;u++)n.filter('[data-column="'+g[u][0]+'"]').addClass(b[u]||b[y])},remove:function(r,i,l){var a,s,n=i.$tbodies,o=(l.columns||["primary","secondary","tertiary"]).join(" ");for(i.$headers.removeClass(o),i.$table.children("tfoot").children("tr").children("th, td").removeClass(o),a=0;a<n.length;a++)s=t.processTbody(r,n.eq(a),!0),s.children("tr").each(function(){e(this).children().removeClass(o)}),t.processTbody(r,s,!1)}})}(jQuery),function(e){"use strict";var t=e.tablesorter||{},r=t.css;e.extend(r,{filterRow:"tablesorter-filter-row",filter:"tablesorter-filter",filterDisabled:"disabled",filterRowHide:"hideme"}),t.addWidget({id:"filter",priority:50,options:{filter_childRows:!1,filter_childByColumn:!1,filter_columnFilters:!0,filter_columnAnyMatch:!0,filter_cellFilter:"",filter_cssFilter:"",filter_defaultFilter:{},filter_excludeFilter:{},filter_external:"",filter_filteredRow:"filtered",filter_formatter:null,filter_functions:null,filter_hideEmpty:!0,filter_hideFilters:!1,filter_ignoreCase:!0,filter_liveSearch:!0,filter_onlyAvail:"filter-onlyAvail",filter_placeholder:{search:"",select:""},filter_reset:null,filter_saveFilters:!1,filter_searchDelay:300,filter_searchFiltered:!0,filter_selectSource:null,filter_startsWith:!1,filter_useParsedData:!1,filter_serversideFiltering:!1,filter_defaultAttrib:"data-value",filter_selectSourceSeparator:"|"},format:function(e,r,i){r.$table.hasClass("hasFilters")||t.filter.init(e,r,i)},remove:function(i,l,a,s){var n,o,c=l.$table,d=l.$tbodies,f="addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(l.namespace+"filter ");if(c.removeClass("hasFilters").unbind(f.replace(/\s+/g," ")).find("."+r.filterRow).remove(),!s){for(n=0;n<d.length;n++)o=t.processTbody(i,d.eq(n),!0),o.children().removeClass(a.filter_filteredRow).show(),t.processTbody(i,o,!1);a.filter_reset&&e(document).undelegate(a.filter_reset,"click.tsfilter")}}}),t.filter={regex:{regex:/^\/((?:\\\/|[^\/])+)\/([mig]{0,3})?$/,child:/tablesorter-childRow/,filtered:/filtered/,type:/undefined|number/,exact:/(^[\"\'=]+)|([\"\'=]+$)/g,nondigit:/[^\w,. \-()]/g,operators:/[<>=]/g,query:"(q|query)"},types:{or:function(r,i,l){if(/\|/.test(i.iFilter)||t.filter.regex.orSplit.test(i.filter)){var a,s,n,o,c=e.extend({},i),d=i.index,f=i.parsed[d],u=i.filter.split(t.filter.regex.orSplit),h=i.iFilter.split(t.filter.regex.orSplit),p=u.length;for(a=0;p>a;a++)if(c.nestedFilters=!0,c.filter=""+(t.filter.parseFilter(r,u[a],d,f)||""),c.iFilter=""+(t.filter.parseFilter(r,h[a],d,f)||""),n="("+(t.filter.parseFilter(r,c.filter,d,f)||"")+")",o=new RegExp(i.isMatch?n:"^"+n+"$",r.widgetOptions.filter_ignoreCase?"i":""),s=o.test(c.exact)||t.filter.processTypes(r,c,l))return s;return s||!1}return null},and:function(r,i,l){if(t.filter.regex.andTest.test(i.filter)){var a,s,n,o,c,d=e.extend({},i),f=i.index,u=i.parsed[f],h=i.filter.split(t.filter.regex.andSplit),p=i.iFilter.split(t.filter.regex.andSplit),g=h.length;for(a=0;g>a;a++)d.nestedFilters=!0,d.filter=""+(t.filter.parseFilter(r,h[a],f,u)||""),d.iFilter=""+(t.filter.parseFilter(r,p[a],f,u)||""),o=("("+(t.filter.parseFilter(r,d.filter,f,u)||"")+")").replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*"),c=new RegExp(i.isMatch?o:"^"+o+"$",r.widgetOptions.filter_ignoreCase?"i":""),n=c.test(d.exact)||t.filter.processTypes(r,d,l),s=0===a?n:s&&n;return s||!1}return null},regex:function(e,r){if(t.filter.regex.regex.test(r.filter)){var i,l=r.filter_regexCache[r.index]||t.filter.regex.regex.exec(r.filter),a=l instanceof RegExp;try{a||(r.filter_regexCache[r.index]=l=new RegExp(l[1],l[2])),i=l.test(r.exact)}catch(s){i=!1}return i}return null},operators:function(r,i){if(/^[<>]=?/.test(i.iFilter)&&""!==i.iExact){var l,a,s,n=r.table,o=i.index,c=i.parsed[o],d=t.formatFloat(i.iFilter.replace(t.filter.regex.operators,""),n),f=r.parsers[o],u=d;return(c||"numeric"===f.type)&&(s=e.trim(""+i.iFilter.replace(t.filter.regex.operators,"")),a=t.filter.parseFilter(r,s,o,!0),d="number"!=typeof a||""===a||isNaN(a)?d:a),!c&&"numeric"!==f.type||isNaN(d)||"undefined"==typeof i.cache?(s=isNaN(i.iExact)?i.iExact.replace(t.filter.regex.nondigit,""):i.iExact,l=t.formatFloat(s,n)):l=i.cache,/>/.test(i.iFilter)?a=/>=/.test(i.iFilter)?l>=d:l>d:/</.test(i.iFilter)&&(a=/<=/.test(i.iFilter)?d>=l:d>l),a||""!==u||(a=!0),a}return null},notMatch:function(r,i){if(/^\!/.test(i.iFilter)){var l,a=i.iFilter.replace("!",""),s=t.filter.parseFilter(r,a,i.index,i.parsed[i.index])||"";return t.filter.regex.exact.test(s)?(s=s.replace(t.filter.regex.exact,""),""===s?!0:e.trim(s)!==i.iExact):(l=i.iExact.search(e.trim(s)),""===s?!0:!(r.widgetOptions.filter_startsWith?0===l:l>=0))}return null},exact:function(r,i){if(t.filter.regex.exact.test(i.iFilter)){var l=i.iFilter.replace(t.filter.regex.exact,""),a=t.filter.parseFilter(r,l,i.index,i.parsed[i.index])||"";return i.anyMatch?e.inArray(a,i.rowArray)>=0:a==i.iExact}return null},range:function(e,r){if(t.filter.regex.toTest.test(r.iFilter)){var i,l,a,s,n=e.table,o=r.index,c=r.parsed[o],d=r.iFilter.split(t.filter.regex.toSplit);return l=d[0].replace(t.filter.regex.nondigit,"")||"",a=t.formatFloat(t.filter.parseFilter(e,l,o,c),n),l=d[1].replace(t.filter.regex.nondigit,"")||"",s=t.formatFloat(t.filter.parseFilter(e,l,o,c),n),(c||"numeric"===e.parsers[o].type)&&(i=e.parsers[o].format(""+d[0],n,e.$headers.eq(o),o),a=""===i||isNaN(i)?a:i,i=e.parsers[o].format(""+d[1],n,e.$headers.eq(o),o),s=""===i||isNaN(i)?s:i),!c&&"numeric"!==e.parsers[o].type||isNaN(a)||isNaN(s)?(l=isNaN(r.iExact)?r.iExact.replace(t.filter.regex.nondigit,""):r.iExact,i=t.formatFloat(l,n)):i=r.cache,a>s&&(l=a,a=s,s=l),i>=a&&s>=i||""===a||""===s}return null},wild:function(e,r){if(/[\?\*\|]/.test(r.iFilter)){var i=r.index,l=r.parsed[i],a=""+(t.filter.parseFilter(e,r.iFilter,i,l)||"");return!/\?\*/.test(a)&&r.nestedFilters&&(a=r.isMatch?a:"^("+a+")$"),new RegExp(a.replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*"),e.widgetOptions.filter_ignoreCase?"i":"").test(r.exact)}return null},fuzzy:function(e,r){if(/^~/.test(r.iFilter)){var i,l=0,a=r.iExact.length,s=r.iFilter.slice(1),n=t.filter.parseFilter(e,s,r.index,r.parsed[r.index])||"";for(i=0;a>i;i++)r.iExact[i]===n[l]&&(l+=1);return l===n.length?!0:!1}return null}},init:function(i,l,a){t.language=e.extend(!0,{},{to:"to",or:"or",and:"and"},t.language);var s,n,o,c,d,f,u,h,p,g=t.filter.regex;if(l.$table.addClass("hasFilters"),a.searchTimer=null,a.filter_initTimer=null,a.filter_formatterCount=0,a.filter_formatterInit=[],a.filter_anyColumnSelector='[data-column="all"],[data-column="any"]',a.filter_multipleColumnSelector='[data-column*="-"],[data-column*=","]',u="\\{"+t.filter.regex.query+"\\}",e.extend(g,{child:new RegExp(l.cssChildRow),filtered:new RegExp(a.filter_filteredRow),alreadyFiltered:new RegExp("(\\s+("+t.language.or+"|-|"+t.language.to+")\\s+)","i"),toTest:new RegExp("\\s+(-|"+t.language.to+")\\s+","i"),toSplit:new RegExp("(?:\\s+(?:-|"+t.language.to+")\\s+)","gi"),andTest:new RegExp("\\s+("+t.language.and+"|&&)\\s+","i"),andSplit:new RegExp("(?:\\s+(?:"+t.language.and+"|&&)\\s+)","gi"),orSplit:new RegExp("(?:\\s+(?:"+t.language.or+")\\s+|\\|)","gi"),iQuery:new RegExp(u,"i"),igQuery:new RegExp(u,"ig")}),u=l.$headers.filter(".filter-false, .parser-false").length,a.filter_columnFilters!==!1&&u!==l.$headers.length&&t.filter.buildRow(i,l,a),o="addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(l.namespace+"filter "),l.$table.bind(o,function(s,n){return u=a.filter_hideEmpty&&e.isEmptyObject(l.cache)&&!(l.delayInit&&"appendCache"===s.type),l.$table.find("."+r.filterRow).toggleClass(a.filter_filteredRow,u),/(search|filter)/.test(s.type)||(s.stopPropagation(),t.filter.buildDefault(i,!0)),"filterReset"===s.type?(l.$table.find("."+r.filter).add(a.filter_$externalFilters).val(""),t.filter.searching(i,[])):"filterEnd"===s.type?t.filter.buildDefault(i,!0):(n="search"===s.type?n:"updateComplete"===s.type?l.$table.data("lastSearch"):"",/(update|add)/.test(s.type)&&"updateComplete"!==s.type&&(l.lastCombinedFilter=null,l.lastSearch=[]),t.filter.searching(i,n,!0)),!1}),a.filter_reset&&(a.filter_reset instanceof e?a.filter_reset.click(function(){l.$table.trigger("filterReset")}):e(a.filter_reset).length&&e(document).undelegate(a.filter_reset,"click.tsfilter").delegate(a.filter_reset,"click.tsfilter",function(){l.$table.trigger("filterReset")})),a.filter_functions)for(d=0;d<l.columns;d++)if(h=t.getColumnData(i,a.filter_functions,d))if(c=l.$headerIndexed[d].removeClass("filter-select"),p=!(c.hasClass("filter-false")||c.hasClass("parser-false")),s="",h===!0&&p)t.filter.buildSelect(i,d);else if("object"==typeof h&&p){for(n in h)"string"==typeof n&&(s+=""===s?'<option value="">'+(c.data("placeholder")||c.attr("data-placeholder")||a.filter_placeholder.select||"")+"</option>":"",u=n,o=n,n.indexOf(a.filter_selectSourceSeparator)>=0&&(u=n.split(a.filter_selectSourceSeparator),o=u[1],u=u[0]),s+="<option "+(o===u?"":'data-function-name="'+n+'" ')+'value="'+u+'">'+o+"</option>");l.$table.find("thead").find("select."+r.filter+'[data-column="'+d+'"]').append(s),o=a.filter_selectSource,h=e.isFunction(o)?!0:t.getColumnData(i,o,d),h&&t.filter.buildSelect(l.table,d,"",!0,c.hasClass(a.filter_onlyAvail))}t.filter.buildDefault(i,!0),t.filter.bindSearch(i,l.$table.find("."+r.filter),!0),a.filter_external&&t.filter.bindSearch(i,a.filter_external),a.filter_hideFilters&&t.filter.hideFilters(i,l),l.showProcessing&&(o="filterStart filterEnd ".split(" ").join(l.namespace+"filter "),l.$table.unbind(o.replace(/\s+/g," ")).bind(o,function(a,s){c=s?l.$table.find("."+r.header).filter("[data-column]").filter(function(){return""!==s[e(this).data("column")]}):"",t.isProcessing(i,"filterStart"===a.type,s?c:"")})),l.filteredRows=l.totalRows,o="tablesorter-initialized pagerBeforeInitialized ".split(" ").join(l.namespace+"filter "),l.$table.unbind(o.replace(/\s+/g," ")).bind(o,function(){var e=this.config.widgetOptions;f=t.filter.setDefaults(i,l,e)||[],f.length&&(l.delayInit&&""===f.join("")||t.setFilters(i,f,!0)),l.$table.trigger("filterFomatterUpdate"),setTimeout(function(){e.filter_initialized||t.filter.filterInitComplete(l)},100)}),l.pager&&l.pager.initialized&&!a.filter_initialized&&(l.$table.trigger("filterFomatterUpdate"),setTimeout(function(){t.filter.filterInitComplete(l)},100))},formatterUpdated:function(e,t){var r=e.closest("table")[0].config.widgetOptions;r.filter_initialized||(r.filter_formatterInit[t]=1)},filterInitComplete:function(r){var i,l,a=r.widgetOptions,s=0,n=function(){a.filter_initialized=!0,r.$table.trigger("filterInit",r),t.filter.findRows(r.table,r.$table.data("lastSearch")||[])};if(e.isEmptyObject(a.filter_formatter))n();else{for(l=a.filter_formatterInit.length,i=0;l>i;i++)1===a.filter_formatterInit[i]&&s++;clearTimeout(a.filter_initTimer),a.filter_initialized||s!==a.filter_formatterCount?a.filter_initialized||(a.filter_initTimer=setTimeout(function(){n()},500)):n()}},setDefaults:function(r,i,l){var a,s,n,o,c,d=t.getFilters(r)||[];if(l.filter_saveFilters&&t.storage&&(s=t.storage(r,"tablesorter-filters")||[],a=e.isArray(s),a&&""===s.join("")||!a||(d=s)),""===d.join(""))for(c=i.$headers.add(l.filter_$externalFilters).filter("["+l.filter_defaultAttrib+"]"),n=0;n<=i.columns;n++)o=n===i.columns?"all":n,d[n]=c.filter('[data-column="'+o+'"]').attr(l.filter_defaultAttrib)||d[n]||"";return i.$table.data("lastSearch",d),d},parseFilter:function(e,t,r,i){return i?e.parsers[r].format(t,e.table,[],r):t},buildRow:function(i,l,a){var s,n,o,c,d,f,u,h,p=a.filter_cellFilter,g=l.columns,m=e.isArray(p),b='<tr role="row" class="'+r.filterRow+" "+l.cssIgnoreRow+'">';for(n=0;g>n;n++)b+="<td",b+=m?p[n]?' class="'+p[n]+'"':"":""!==p?' class="'+p+'"':"",b+="></td>";for(l.$filters=e(b+="</tr>").appendTo(l.$table.children("thead").eq(0)).find("td"),n=0;g>n;n++)d=!1,o=l.$headerIndexed[n],u=t.getColumnData(i,a.filter_functions,n),c=a.filter_functions&&u&&"function"!=typeof u||o.hasClass("filter-select"),s=t.getColumnData(i,l.headers,n),d="false"===t.getData(o[0],s,"filter")||"false"===t.getData(o[0],s,"parser"),c?b=e("<select>").appendTo(l.$filters.eq(n)):(u=t.getColumnData(i,a.filter_formatter,n),u?(a.filter_formatterCount++,b=u(l.$filters.eq(n),n),b&&0===b.length&&(b=l.$filters.eq(n).children("input")),b&&(0===b.parent().length||b.parent().length&&b.parent()[0]!==l.$filters[n])&&l.$filters.eq(n).append(b)):b=e('<input type="search">').appendTo(l.$filters.eq(n)),b&&(h=o.data("placeholder")||o.attr("data-placeholder")||a.filter_placeholder.search||"",b.attr("placeholder",h))),b&&(f=(e.isArray(a.filter_cssFilter)?"undefined"!=typeof a.filter_cssFilter[n]?a.filter_cssFilter[n]||"":"":a.filter_cssFilter)||"",b.addClass(r.filter+" "+f).attr("data-column",n),d&&(b.attr("placeholder","").addClass(r.filterDisabled)[0].disabled=!0))},bindSearch:function(r,i,l){if(r=e(r)[0],i=e(i),i.length){var a,s=r.config,n=s.widgetOptions,o=s.namespace+"filter",c=n.filter_$externalFilters;l!==!0&&(a=n.filter_anyColumnSelector+","+n.filter_multipleColumnSelector,n.filter_$anyMatch=i.filter(a),n.filter_$externalFilters=c&&c.length?n.filter_$externalFilters.add(i):i,t.setFilters(r,s.$table.data("lastSearch")||[],l===!1)),a="keypress keyup search change ".split(" ").join(o+" "),i.attr("data-lastSearchTime",(new Date).getTime()).unbind(a.replace(/\s+/g," ")).bind("keyup"+o,function(i){if(e(this).attr("data-lastSearchTime",(new Date).getTime()),27===i.which)this.value="";else{if(n.filter_liveSearch===!1)return;if(""!==this.value&&("number"==typeof n.filter_liveSearch&&this.value.length<n.filter_liveSearch||13!==i.which&&8!==i.which&&(i.which<32||i.which>=37&&i.which<=40)))return}t.filter.searching(r,!0,!0)}).bind("search change keypress ".split(" ").join(o+" "),function(i){var l=e(this).data("column");(13===i.which||"search"===i.type||"change"===i.type&&this.value!==s.lastSearch[l])&&(i.preventDefault(),e(this).attr("data-lastSearchTime",(new Date).getTime()),t.filter.searching(r,!1,!0))})}},searching:function(e,r,i){var l=e.config.widgetOptions;clearTimeout(l.searchTimer),"undefined"==typeof r||r===!0?l.searchTimer=setTimeout(function(){t.filter.checkFilters(e,r,i)},l.filter_liveSearch?l.filter_searchDelay:10):t.filter.checkFilters(e,r,i)},checkFilters:function(i,l,a){var s=i.config,n=s.widgetOptions,o=e.isArray(l),c=o?l:t.getFilters(i,!0),d=(c||[]).join("");return e.isEmptyObject(s.cache)?void(s.delayInit&&s.pager&&s.pager.initialized&&s.$table.trigger("updateCache",[function(){t.filter.checkFilters(i,!1,a)}])):(o&&(t.setFilters(i,c,!1,a!==!0),n.filter_initialized||(s.lastCombinedFilter="")),n.filter_hideFilters&&s.$table.find("."+r.filterRow).trigger(""===d?"mouseleave":"mouseenter"),s.lastCombinedFilter!==d||l===!1?(l===!1&&(s.lastCombinedFilter=null,s.lastSearch=[]),n.filter_initialized&&s.$table.trigger("filterStart",[c]),s.showProcessing?void setTimeout(function(){return t.filter.findRows(i,c,d),!1},30):(t.filter.findRows(i,c,d),!1)):void 0)},hideFilters:function(i,l){var a;l.$table.find("."+r.filterRow).bind("mouseenter mouseleave",function(t){var i=t,s=e(this);clearTimeout(a),a=setTimeout(function(){/enter|over/.test(i.type)?s.removeClass(r.filterRowHide):e(document.activeElement).closest("tr")[0]!==s[0]&&""===l.lastCombinedFilter&&s.addClass(r.filterRowHide)},200)}).find("input, select").bind("focus blur",function(i){var s=i,n=e(this).closest("tr");clearTimeout(a),a=setTimeout(function(){clearTimeout(a),""===t.getFilters(l.$table).join("")&&n.toggleClass(r.filterRowHide,"focus"!==s.type)},200)})},defaultFilter:function(r,i){if(""===r)return r;var l=t.filter.regex.iQuery,a=i.match(t.filter.regex.igQuery).length,s=a>1?e.trim(r).split(/\s/):[e.trim(r)],n=s.length-1,o=0,c=i;for(1>n&&a>1&&(s[1]=s[0]);l.test(c);)c=c.replace(l,s[o++]||""),l.test(c)&&n>o&&""!==(s[o]||"")&&(c=i.replace(l,c));return c},getLatestSearch:function(t){return t?t.sort(function(t,r){return e(r).attr("data-lastSearchTime")-e(t).attr("data-lastSearchTime")}):t||e()},multipleColumns:function(r,i){var l,a,s,n,o,c,d,f,u,h=r.widgetOptions,p=h.filter_initialized||!i.filter(h.filter_anyColumnSelector).length,g=[],m=e.trim(t.filter.getLatestSearch(i).attr("data-column")||"");if(p&&/-/.test(m))for(a=m.match(/(\d+)\s*-\s*(\d+)/g),u=a.length,f=0;u>f;f++){for(s=a[f].split(/\s*-\s*/),n=parseInt(s[0],10)||0,o=parseInt(s[1],10)||r.columns-1,n>o&&(l=n,n=o,o=l),o>=r.columns&&(o=r.columns-1);o>=n;n++)g.push(n);m=m.replace(a[f],"")}if(p&&/,/.test(m))for(c=m.split(/\s*,\s*/),u=c.length,d=0;u>d;d++)""!==c[d]&&(f=parseInt(c[d],10),f<r.columns&&g.push(f));if(!g.length)for(f=0;f<r.columns;f++)g.push(f);return g},processTypes:function(r,i,l){var a,s=null,n=null;for(a in t.filter.types)e.inArray(a,l.excludeMatch)<0&&null===n&&(n=t.filter.types[a](r,i,l),null!==n&&(s=n));return s},processRow:function(r,i,l){var a,s,n,o,c,d,f,u,h=t.filter.regex,p=r.widgetOptions,g=!0;if(i.$cells=i.$row.children(),i.anyMatchFlag){if(a=t.filter.multipleColumns(r,p.filter_$anyMatch),i.anyMatch=!0,i.isMatch=!0,i.rowArray=i.$cells.map(function(l){return e.inArray(l,a)>-1?(i.parsed[l]?u=i.cacheArray[l]:(u=i.rawArray[l],u=e.trim(p.filter_ignoreCase?u.toLowerCase():u),r.sortLocaleCompare&&(u=t.replaceAccents(u))),u):void 0}).get(),i.filter=i.anyMatchFilter,i.iFilter=i.iAnyMatchFilter,i.exact=i.rowArray.join(" "),i.iExact=p.filter_ignoreCase?i.exact.toLowerCase():i.exact,i.cache=i.cacheArray.slice(0,-1).join(" "),l.excludeMatch=l.noAnyMatch,c=t.filter.processTypes(r,i,l),null!==c)g=c;else if(p.filter_startsWith)for(g=!1,a=r.columns;!g&&a>0;)a--,g=g||0===i.rowArray[a].indexOf(i.iFilter);else g=(i.iExact+i.childRowText).indexOf(i.iFilter)>=0;if(i.anyMatch=!1,i.filters.join("")===i.filter)return g}for(a=0;a<r.columns;a++)i.filter=i.filters[a],i.index=a,l.excludeMatch=l.excludeFilter[a],i.filter&&(i.cache=i.cacheArray[a],p.filter_useParsedData||i.parsed[a]?i.exact=i.cache:(n=i.rawArray[a]||"",i.exact=r.sortLocaleCompare?t.replaceAccents(n):n),i.iExact=!h.type.test(typeof i.exact)&&p.filter_ignoreCase?i.exact.toLowerCase():i.exact,i.isMatch=r.$headerIndexed[i.index].hasClass("filter-match"),n=g,f=p.filter_columnFilters?r.$filters.add(r.$externalFilters).filter('[data-column="'+a+'"]').find("select option:selected").attr("data-function-name")||"":"",r.sortLocaleCompare&&(i.filter=t.replaceAccents(i.filter)),o=!0,p.filter_defaultFilter&&h.iQuery.test(l.defaultColFilter[a])&&(i.filter=t.filter.defaultFilter(i.filter,l.defaultColFilter[a]),o=!1),i.iFilter=p.filter_ignoreCase?(i.filter||"").toLowerCase():i.filter,d=l.functions[a],s=r.$headerIndexed[a].hasClass("filter-select"),c=null,(d||s&&o)&&(d===!0||s?c=i.isMatch?i.iExact.search(i.iFilter)>=0:i.filter===i.exact:"function"==typeof d?c=d(i.exact,i.cache,i.filter,a,i.$row,r,i):"function"==typeof d[f||i.filter]&&(u=f||i.filter,c=d[u](i.exact,i.cache,i.filter,a,i.$row,r,i))),null===c?(c=t.filter.processTypes(r,i,l),null!==c?n=c:(u=(i.iExact+i.childRowText).indexOf(t.filter.parseFilter(r,i.iFilter,a,i.parsed[a])),n=!p.filter_startsWith&&u>=0||p.filter_startsWith&&0===u)):n=c,g=n?g:!1);return g},findRows:function(r,i,l){if(r.config.lastCombinedFilter!==l&&r.config.widgetOptions.filter_initialized){var a,s,n,o,c,d,f,u,h,p,g,m,b,y,_,v,w,x,C,z,S,$,F=e.extend([],i),R=t.filter.regex,k=r.config,T=k.widgetOptions,A={anyMatch:!1,filters:i,filter_regexCache:[]},H={noAnyMatch:["range","notMatch","operators"],functions:[],excludeFilter:[],defaultColFilter:[],defaultAnyFilter:t.getColumnData(r,T.filter_defaultFilter,k.columns,!0)||""};for(A.parsed=k.$headers.map(function(i){return k.parsers&&k.parsers[i]&&k.parsers[i].parsed||t.getData&&"parsed"===t.getData(k.$headerIndexed[i],t.getColumnData(r,k.headers,i),"filter")||e(this).hasClass("filter-parsed")}).get(),u=0;u<k.columns;u++)H.functions[u]=t.getColumnData(r,T.filter_functions,u),H.defaultColFilter[u]=t.getColumnData(r,T.filter_defaultFilter,u)||"",H.excludeFilter[u]=(t.getColumnData(r,T.filter_excludeFilter,u,!0)||"").split(/\s+/);for(k.debug&&(t.log("Filter: Starting filter widget search",i),b=new Date),k.filteredRows=0,k.totalRows=0,l=(F||[]).join(""),d=0;d<k.$tbodies.length;d++){if(f=t.processTbody(r,k.$tbodies.eq(d),!0),u=k.columns,s=k.cache[d].normalized,o=e(e.map(s,function(e){return e[u].$row.get()})),""===l||T.filter_serversideFiltering)o.removeClass(T.filter_filteredRow).not("."+k.cssChildRow).css("display","");else{if(o=o.not("."+k.cssChildRow),a=o.length,(T.filter_$anyMatch&&T.filter_$anyMatch.length||"undefined"!=typeof i[k.columns])&&(A.anyMatchFlag=!0,A.anyMatchFilter=""+(i[k.columns]||T.filter_$anyMatch&&t.filter.getLatestSearch(T.filter_$anyMatch).val()||""),T.filter_columnAnyMatch)){for(x=A.anyMatchFilter.split(R.andSplit),C=!1,_=0;_<x.length;_++)z=x[_].split(":"),z.length>1&&(S=parseInt(z[0],10)-1,S>=0&&S<k.columns&&(i[S]=z[1],x.splice(_,1),_--,C=!0));C&&(A.anyMatchFilter=x.join(" && "))}if(w=T.filter_searchFiltered,g=k.lastSearch||k.$table.data("lastSearch")||[],w)for(_=0;u+1>_;_++)y=i[_]||"",w||(_=u),w=!(!w||!g.length||0!==y.indexOf(g[_]||"")||R.alreadyFiltered.test(y)||/[=\"\|!]/.test(y)||/(>=?\s*-\d)/.test(y)||/(<=?\s*\d)/.test(y)||""!==y&&k.$filters&&k.$filters.eq(_).find("select").length&&!k.$headerIndexed[_].hasClass("filter-match"));for(v=o.not("."+T.filter_filteredRow).length,w&&0===v&&(w=!1),k.debug&&t.log("Filter: Searching through "+(w&&a>v?v:"all")+" rows"),A.anyMatchFlag&&(k.sortLocaleCompare&&(A.anyMatchFilter=t.replaceAccents(A.anyMatchFilter)),T.filter_defaultFilter&&R.iQuery.test(H.defaultAnyFilter)&&(A.anyMatchFilter=t.filter.defaultFilter(A.anyMatchFilter,H.defaultAnyFilter),w=!1),A.iAnyMatchFilter=T.filter_ignoreCase&&k.ignoreCase?A.anyMatchFilter.toLowerCase():A.anyMatchFilter),c=0;a>c;c++)if($=o[c].className,h=c&&R.child.test($),!(h||w&&R.filtered.test($))){if(A.$row=o.eq(c),A.cacheArray=s[c],n=A.cacheArray[k.columns],A.rawArray=n.raw,A.childRowText="",!T.filter_childByColumn){for($="",p=n.child,_=0;_<p.length;_++)$+=" "+p[_].join("")||"";A.childRowText=T.filter_childRows?T.filter_ignoreCase?$.toLowerCase():$:""}if(m=t.filter.processRow(k,A,H),p=n.$row.filter(":gt( 0 )"),T.filter_childRows&&p.length){if(T.filter_childByColumn)for(_=0;_<p.length;_++)A.$row=p.eq(_),A.cacheArray=n.child[_],A.rawArray=A.cacheArray,m=m||t.filter.processRow(k,A,H);p.toggleClass(T.filter_filteredRow,!m)}n.$row.toggleClass(T.filter_filteredRow,!m)[0].display=m?"":"none"}}k.filteredRows+=o.not("."+T.filter_filteredRow).length,k.totalRows+=o.length,t.processTbody(r,f,!1)}k.lastCombinedFilter=l,k.lastSearch=F,k.$table.data("lastSearch",F),T.filter_saveFilters&&t.storage&&t.storage(r,"tablesorter-filters",F),k.debug&&t.benchmark("Completed filter widget search",b),T.filter_initialized&&k.$table.trigger("filterEnd",k),setTimeout(function(){k.$table.trigger("applyWidgets")},0)}},getOptionSource:function(r,i,l){r=e(r)[0];var a,s,n,o,c=r.config,d=c.widgetOptions,f=[],u=!1,h=d.filter_selectSource,p=c.$table.data("lastSearch")||[],g=e.isFunction(h)?!0:t.getColumnData(r,h,i);if(l&&""!==p[i]&&(l=!1),g===!0)u=h(r,i,l);else{if(g instanceof e||"string"===e.type(g)&&g.indexOf("</option>")>=0)return g;e.isArray(g)?u=g:"object"===e.type(h)&&g&&(u=g(r,i,l))}if(u===!1&&(u=t.filter.getOptions(r,i,l)),u=e.grep(u,function(t,r){return e.inArray(t,u)===r}),c.$headerIndexed[i].hasClass("filter-select-nosort"))return u;for(o=u.length,n=0;o>n;n++)s=u[n],f.push({t:s,p:c.parsers&&c.parsers.length&&c.parsers[i].format(s,r,[],i)||s});for(a=c.textSorter||"",f.sort(function(l,s){var n=l.p.toString(),o=s.p.toString();return e.isFunction(a)?a(n,o,!0,i,r):"object"==typeof a&&a.hasOwnProperty(i)?a[i](n,o,!0,i,r):t.sortNatural?t.sortNatural(n,o):!0}),u=[],o=f.length,n=0;o>n;n++)u.push(f[n].t);return u},getOptions:function(t,r,i){t=e(t)[0];var l,a,s,n,o,c=t.config,d=c.widgetOptions,f=[];for(a=0;a<c.$tbodies.length;a++)for(o=c.cache[a],s=c.cache[a].normalized.length,l=0;s>l;l++)n=o.row?o.row[l]:o.normalized[l][c.columns].$row[0],i&&n.className.match(d.filter_filteredRow)||f.push(d.filter_useParsedData||c.parsers[r].parsed||c.$headerIndexed[r].hasClass("filter-parsed")?""+o.normalized[l][r]:o.normalized[l][c.columns].raw[r]);return f},buildSelect:function(i,l,a,s,n){if(i=e(i)[0],l=parseInt(l,10),i.config.cache&&!e.isEmptyObject(i.config.cache)){var o,c,d,f,u,h,p=i.config,g=p.widgetOptions,m=p.$headerIndexed[l],b='<option value="">'+(m.data("placeholder")||m.attr("data-placeholder")||g.filter_placeholder.select||"")+"</option>",y=p.$table.find("thead").find("select."+r.filter+'[data-column="'+l+'"]').val();if(("undefined"==typeof a||""===a)&&(a=t.filter.getOptionSource(i,l,n)),e.isArray(a)){for(o=0;o<a.length;o++)d=a[o]=(""+a[o]).replace(/\"/g,"&quot;"),c=d,d.indexOf(g.filter_selectSourceSeparator)>=0&&(f=d.split(g.filter_selectSourceSeparator),c=f[0],d=f[1]),b+=""!==a[o]?"<option "+(c===d?"":'data-function-name="'+a[o]+'" ')+'value="'+c+'">'+d+"</option>":"";a=[]}u=(p.$filters?p.$filters:p.$table.children("thead")).find("."+r.filter),g.filter_$externalFilters&&(u=u&&u.length?u.add(g.filter_$externalFilters):g.filter_$externalFilters),h=u.filter('select[data-column="'+l+'"]'),h.length&&(h[s?"html":"append"](b),e.isArray(a)||h.append(a).val(y),h.val(y))}},buildDefault:function(e,r){var i,l,a,s=e.config,n=s.widgetOptions,o=s.columns;for(i=0;o>i;i++)l=s.$headerIndexed[i],a=!(l.hasClass("filter-false")||l.hasClass("parser-false")),(l.hasClass("filter-select")||t.getColumnData(e,n.filter_functions,i)===!0)&&a&&t.filter.buildSelect(e,i,"",r,l.hasClass(n.filter_onlyAvail))}},t.getFilters=function(i,l,a,s){var n,o,c,d,f=!1,u=i?e(i)[0].config:"",h=u?u.widgetOptions:"";if(l!==!0&&h&&!h.filter_columnFilters||e.isArray(a)&&a.join("")===u.lastCombinedFilter)return e(i).data("lastSearch");if(u&&(u.$filters&&(o=u.$filters.find("."+r.filter)),h.filter_$externalFilters&&(o=o&&o.length?o.add(h.filter_$externalFilters):h.filter_$externalFilters),o&&o.length))for(f=a||[],n=0;n<u.columns+1;n++)d=n===u.columns?h.filter_anyColumnSelector+","+h.filter_multipleColumnSelector:'[data-column="'+n+'"]',c=o.filter(d),c.length&&(c=t.filter.getLatestSearch(c),e.isArray(a)?(s&&c.length>1&&(c=c.slice(1)),n===u.columns&&(d=c.filter(h.filter_anyColumnSelector),c=d.length?d:c),c.val(a[n]).trigger("change.tsfilter")):(f[n]=c.val()||"",n===u.columns?c.slice(1).filter('[data-column*="'+c.attr("data-column")+'"]').val(f[n]):c.slice(1).val(f[n])),n===u.columns&&c.length&&(h.filter_$anyMatch=c)); return 0===f.length&&(f=!1),f},t.setFilters=function(r,i,l,a){var s=r?e(r)[0].config:"",n=t.getFilters(r,!0,i,a);return s&&l&&(s.lastCombinedFilter=null,s.lastSearch=[],t.filter.searching(s.table,i,a),s.$table.trigger("filterFomatterUpdate")),!!n}}(jQuery),function(e,t){"use strict";var r=e.tablesorter||{};e.extend(r.css,{sticky:"tablesorter-stickyHeader",stickyVis:"tablesorter-sticky-visible",stickyHide:"tablesorter-sticky-hidden",stickyWrap:"tablesorter-sticky-wrapper"}),r.addHeaderResizeEvent=function(t,r,i){if(t=e(t)[0],t.config){var l={timer:250},a=e.extend({},l,i),s=t.config,n=s.widgetOptions,o=function(e){var t,r,i,l,a,o,c=s.$headers.length;for(n.resize_flag=!0,r=[],t=0;c>t;t++)i=s.$headers.eq(t),l=i.data("savedSizes")||[0,0],a=i[0].offsetWidth,o=i[0].offsetHeight,(a!==l[0]||o!==l[1])&&(i.data("savedSizes",[a,o]),r.push(i[0]));r.length&&e!==!1&&s.$table.trigger("resize",[r]),n.resize_flag=!1};return o(!1),clearInterval(n.resize_timer),r?(n.resize_flag=!1,!1):void(n.resize_timer=setInterval(function(){n.resize_flag||o()},a.timer))}},r.addWidget({id:"stickyHeaders",priority:60,options:{stickyHeaders:"",stickyHeaders_attachTo:null,stickyHeaders_xScroll:null,stickyHeaders_yScroll:null,stickyHeaders_offset:0,stickyHeaders_filteredToTop:!0,stickyHeaders_cloneId:"-sticky",stickyHeaders_addResizeEvent:!0,stickyHeaders_includeCaption:!0,stickyHeaders_zIndex:2},format:function(i,l,a){if(!(l.$table.hasClass("hasStickyHeaders")||e.inArray("filter",l.widgets)>=0&&!l.$table.hasClass("hasFilters"))){var s,n,o,c,d=l.$table,f=e(a.stickyHeaders_attachTo),u=l.namespace+"stickyheaders ",h=e(a.stickyHeaders_yScroll||a.stickyHeaders_attachTo||t),p=e(a.stickyHeaders_xScroll||a.stickyHeaders_attachTo||t),g=d.children("thead:first"),m=g.children("tr").not(".sticky-false").children(),b=d.children("tfoot"),y=isNaN(a.stickyHeaders_offset)?e(a.stickyHeaders_offset):"",_=y.length?y.height()||0:parseInt(a.stickyHeaders_offset,10)||0,v=d.parent().closest("."+r.css.table).hasClass("hasStickyHeaders")?d.parent().closest("table.tablesorter")[0].config.widgetOptions.$sticky.parent():[],w=v.length?v.height():0,x=a.$sticky=d.clone().addClass("containsStickyHeaders "+r.css.sticky+" "+a.stickyHeaders+" "+l.namespace.slice(1)+"_extra_table").wrap('<div class="'+r.css.stickyWrap+'">'),C=x.parent().addClass(r.css.stickyHide).css({position:f.length?"absolute":"fixed",padding:parseInt(x.parent().parent().css("padding-left"),10),top:_+w,left:0,visibility:"hidden",zIndex:a.stickyHeaders_zIndex||2}),z=x.children("thead:first"),S="",$=0,F=function(e,r){var i,l,a,s,n,o=e.filter(":visible"),c=o.length;for(i=0;c>i;i++)s=r.filter(":visible").eq(i),n=o.eq(i),"border-box"===n.css("box-sizing")?l=n.outerWidth():"collapse"===s.css("border-collapse")?t.getComputedStyle?l=parseFloat(t.getComputedStyle(n[0],null).width):(a=parseFloat(n.css("border-width")),l=n.outerWidth()-parseFloat(n.css("padding-left"))-parseFloat(n.css("padding-right"))-a):l=n.width(),s.css({width:l,"min-width":l,"max-width":l})},R=function(){_=y.length?y.height()||0:parseInt(a.stickyHeaders_offset,10)||0,$=0,C.css({left:f.length?parseInt(f.css("padding-left"),10)||0:d.offset().left-parseInt(d.css("margin-left"),10)-p.scrollLeft()-$,width:d.outerWidth()}),F(d,x),F(m,c)},k=function(t){if(d.is(":visible")){w=v.length?v.offset().top-h.scrollTop()+v.height():0;var i=d.offset(),l=e.isWindow(h[0]),a=e.isWindow(p[0]),s=(f.length?l?h.scrollTop():h.offset().top:h.scrollTop())+_+w,n=d.height()-(C.height()+(b.height()||0)),o=s>i.top&&s<i.top+n?"visible":"hidden",c={visibility:o};f.length&&(c.top=l?s-f.offset().top:f.scrollTop()),a&&(c.left=d.offset().left-parseInt(d.css("margin-left"),10)-p.scrollLeft()-$),v.length&&(c.top=(c.top||0)+_+w),C.removeClass(r.css.stickyVis+" "+r.css.stickyHide).addClass("visible"===o?r.css.stickyVis:r.css.stickyHide).css(c),(o!==S||t)&&(R(),S=o)}};if(f.length&&!f.css("position")&&f.css("position","relative"),x.attr("id")&&(x[0].id+=a.stickyHeaders_cloneId),x.find("thead:gt(0), tr.sticky-false").hide(),x.find("tbody, tfoot").remove(),x.find("caption").toggle(a.stickyHeaders_includeCaption),c=z.children().children(),x.css({height:0,width:0,margin:0}),c.find("."+r.css.resizer).remove(),d.addClass("hasStickyHeaders").bind("pagerComplete"+u,function(){R()}),r.bindEvents(i,z.children().children("."+r.css.header)),d.after(C),l.onRenderHeader)for(o=z.children("tr").children(),n=o.length,s=0;n>s;s++)l.onRenderHeader.apply(o.eq(s),[s,l,x]);p.add(h).unbind("scroll resize ".split(" ").join(u).replace(/\s+/g," ")).bind("scroll resize ".split(" ").join(u),function(e){k("resize"===e.type)}),l.$table.unbind("stickyHeadersUpdate"+u).bind("stickyHeadersUpdate"+u,function(){k(!0)}),a.stickyHeaders_addResizeEvent&&r.addHeaderResizeEvent(i),d.hasClass("hasFilters")&&a.filter_columnFilters&&(d.bind("filterEnd"+u,function(){var i=e(document.activeElement).closest("td"),s=i.parent().children().index(i);C.hasClass(r.css.stickyVis)&&a.stickyHeaders_filteredToTop&&(t.scrollTo(0,d.position().top),s>=0&&l.$filters&&l.$filters.eq(s).find("a, select, input").filter(":visible").focus())}),r.filter.bindSearch(d,c.find("."+r.css.filter)),a.filter_hideFilters&&r.filter.hideFilters(x,l)),d.trigger("stickyHeadersInit")}},remove:function(i,l,a){var s=l.namespace+"stickyheaders ";l.$table.removeClass("hasStickyHeaders").unbind("pagerComplete filterEnd stickyHeadersUpdate ".split(" ").join(s).replace(/\s+/g," ")).next("."+r.css.stickyWrap).remove(),a.$sticky&&a.$sticky.length&&a.$sticky.remove(),e(t).add(a.stickyHeaders_xScroll).add(a.stickyHeaders_yScroll).add(a.stickyHeaders_attachTo).unbind("scroll resize ".split(" ").join(s).replace(/\s+/g," ")),r.addHeaderResizeEvent(i,!1)}})}(jQuery,window),function(e,t){"use strict";var r=e.tablesorter||{};e.extend(r.css,{resizableContainer:"tablesorter-resizable-container",resizableHandle:"tablesorter-resizable-handle",resizableNoSelect:"tablesorter-disableSelection",resizableStorage:"tablesorter-resizable"}),e(function(){var t="<style>body."+r.css.resizableNoSelect+" { -ms-user-select: none; -moz-user-select: -moz-none;-khtml-user-select: none; -webkit-user-select: none; user-select: none; }."+r.css.resizableContainer+" { position: relative; height: 1px; }."+r.css.resizableHandle+" { position: absolute; display: inline-block; width: 8px;top: 1px; cursor: ew-resize; z-index: 3; user-select: none; -moz-user-select: none; }</style>";e(t).appendTo("body")}),r.resizable={init:function(t,i){if(!t.$table.hasClass("hasResizable")){t.$table.addClass("hasResizable");var l,a,s,n,o,c=t.$table,d=c.parent(),f=parseInt(c.css("margin-top"),10),u=i.resizable_={useStorage:r.storage&&i.resizable!==!1,$wrap:d,mouseXPosition:0,$target:null,$next:null,overflow:"auto"===d.css("overflow")||"scroll"===d.css("overflow")||"auto"===d.css("overflow-x")||"scroll"===d.css("overflow-x"),storedSizes:[]};for(r.resizableReset(t.table,!0),u.tableWidth=c.width(),u.fullWidth=Math.abs(d.width()-u.tableWidth)<20,u.useStorage&&u.overflow&&(r.storage(t.table,"tablesorter-table-original-css-width",u.tableWidth),o=r.storage(t.table,"tablesorter-table-resized-width")||"auto",r.resizable.setWidth(c,o,!0)),i.resizable_.storedSizes=n=(u.useStorage?r.storage(t.table,r.css.resizableStorage):[])||[],r.resizable.setWidths(t,i,n),r.resizable.updateStoredSizes(t,i),i.$resizable_container=e('<div class="'+r.css.resizableContainer+'">').css({top:f}).insertBefore(c),s=0;s<t.columns;s++)a=t.$headerIndexed[s],o=r.getColumnData(t.table,t.headers,s),l="false"===r.getData(a,o,"resizable"),l||e('<div class="'+r.css.resizableHandle+'">').appendTo(i.$resizable_container).attr({"data-column":s,unselectable:"on"}).data("header",a).bind("selectstart",!1);c.one("tablesorter-initialized",function(){r.resizable.setHandlePosition(t,i),r.resizable.bindings(this.config,this.config.widgetOptions)})}},updateStoredSizes:function(e,t){var r,i,l=e.columns,a=t.resizable_;for(a.storedSizes=[],r=0;l>r;r++)i=e.$headerIndexed[r],a.storedSizes[r]=i.is(":visible")?i.width():0},setWidth:function(e,t,r){e.css({width:t,"min-width":r?t:"","max-width":r?t:""})},setWidths:function(t,i,l){var a,s,n=i.resizable_,o=e(t.namespace+"_extra_headers"),c=t.$table.children("colgroup").children("col");if(l=l||n.storedSizes||[],l.length){for(a=0;a<t.columns;a++)r.resizable.setWidth(t.$headerIndexed[a],l[a],n.overflow),o.length&&(s=o.eq(a).add(c.eq(a)),r.resizable.setWidth(s,l[a],n.overflow));s=e(t.namespace+"_extra_table"),s.length&&!r.hasWidget(t.table,"scroller")&&r.resizable.setWidth(s,t.$table.outerWidth(),n.overflow)}},setHandlePosition:function(t,i){var l,a=r.hasWidget(t.table,"scroller"),s=t.$table.height(),n=i.$resizable_container.children(),o=Math.floor(n.width()/2);a&&(s=0,t.$table.closest("."+r.css.scrollerWrap).children().each(function(){var t=e(this);s+=t.filter('[style*="height"]').length?t.height():t.children("table").height()})),l=t.$table.position().left,n.each(function(){var r=e(this),a=parseInt(r.attr("data-column"),10),n=t.columns-1,c=r.data("header");c&&(c.is(":visible")?(n>a||a===n&&i.resizable_addLastColumn)&&r.css({display:"inline-block",height:s,left:c.position().left-l+c.outerWidth()-o}):r.hide())})},toggleTextSelection:function(t,i){var l=t.namespace+"tsresize";t.widgetOptions.resizable_.disabled=i,e("body").toggleClass(r.css.resizableNoSelect,i),i?e("body").attr("unselectable","on").bind("selectstart"+l,!1):e("body").removeAttr("unselectable").unbind("selectstart"+l)},bindings:function(i,l){var a=i.namespace+"tsresize";l.$resizable_container.children().bind("mousedown",function(t){var a,s=l.resizable_,n=e(i.namespace+"_extra_headers"),o=e(t.target).data("header");a=parseInt(o.attr("data-column"),10),s.$target=o=o.add(n.filter('[data-column="'+a+'"]')),s.target=a,s.$next=t.shiftKey||l.resizable_targetLast?o.parent().children().not(".resizable-false").filter(":last"):o.nextAll(":not(.resizable-false)").eq(0),a=parseInt(s.$next.attr("data-column"),10),s.$next=s.$next.add(n.filter('[data-column="'+a+'"]')),s.next=a,s.mouseXPosition=t.pageX,r.resizable.updateStoredSizes(i,l),r.resizable.toggleTextSelection(i,!0)}),e(document).bind("mousemove"+a,function(e){var t=l.resizable_;t.disabled&&0!==t.mouseXPosition&&t.$target&&(l.resizable_throttle?(clearTimeout(t.timer),t.timer=setTimeout(function(){r.resizable.mouseMove(i,l,e)},isNaN(l.resizable_throttle)?5:l.resizable_throttle)):r.resizable.mouseMove(i,l,e))}).bind("mouseup"+a,function(){l.resizable_.disabled&&(r.resizable.toggleTextSelection(i,!1),r.resizable.stopResize(i,l),r.resizable.setHandlePosition(i,l))}),e(t).bind("resize"+a+" resizeEnd"+a,function(){r.resizable.setHandlePosition(i,l)}),i.$table.bind("columnUpdate"+a,function(){r.resizable.setHandlePosition(i,l)}).find("thead:first").add(e(i.namespace+"_extra_table").find("thead:first")).bind("contextmenu"+a,function(){var e=0===l.resizable_.storedSizes.length;return r.resizableReset(i.table),r.resizable.setHandlePosition(i,l),l.resizable_.storedSizes=[],e})},mouseMove:function(t,i,l){if(0!==i.resizable_.mouseXPosition&&i.resizable_.$target){var a,s=0,n=i.resizable_,o=n.$next,c=n.storedSizes[n.target],d=l.pageX-n.mouseXPosition;if(n.overflow){if(c+d>0){for(n.storedSizes[n.target]+=d,r.resizable.setWidth(n.$target,n.storedSizes[n.target],!0),a=0;a<t.columns;a++)s+=n.storedSizes[a];r.resizable.setWidth(t.$table.add(e(t.namespace+"_extra_table")),s)}o.length||(n.$wrap[0].scrollLeft=t.$table.width())}else n.fullWidth?(n.storedSizes[n.target]+=d,n.storedSizes[n.next]-=d,r.resizable.setWidths(t,i)):(n.storedSizes[n.target]+=d,r.resizable.setWidths(t,i));n.mouseXPosition=l.pageX,t.$table.trigger("stickyHeadersUpdate")}},stopResize:function(e,t){var i=t.resizable_;r.resizable.updateStoredSizes(e,t),i.useStorage&&(r.storage(e.table,r.css.resizableStorage,i.storedSizes),r.storage(e.table,"tablesorter-table-resized-width",e.$table.width())),i.mouseXPosition=0,i.$target=i.$next=null,e.$table.trigger("stickyHeadersUpdate")}},r.addWidget({id:"resizable",priority:40,options:{resizable:!0,resizable_addLastColumn:!1,resizable_widths:[],resizable_throttle:!1,resizable_targetLast:!1,resizable_fullWidth:null},init:function(e,t,i,l){r.resizable.init(i,l)},remove:function(t,i,l,a){if(l.$resizable_container){var s=i.namespace+"tsresize";i.$table.add(e(i.namespace+"_extra_table")).removeClass("hasResizable").children("thead").unbind("contextmenu"+s),l.$resizable_container.remove(),r.resizable.toggleTextSelection(i,!1),r.resizableReset(t,a),e(document).unbind("mousemove"+s+" mouseup"+s)}}}),r.resizableReset=function(t,i){e(t).each(function(){var e,l,a=this.config,s=a&&a.widgetOptions,n=s.resizable_;if(t&&a&&a.$headerIndexed.length){for(n.overflow&&n.tableWidth&&(r.resizable.setWidth(a.$table,n.tableWidth,!0),n.useStorage&&r.storage(t,"tablesorter-table-resized-width","auto")),e=0;e<a.columns;e++)l=a.$headerIndexed[e],s.resizable_widths&&s.resizable_widths[e]?r.resizable.setWidth(l,s.resizable_widths[e],n.overflow):l.hasClass("resizable-false")||r.resizable.setWidth(l,"",n.overflow);a.$table.trigger("stickyHeadersUpdate"),r.storage&&!i&&r.storage(this,r.css.resizableStorage,{})}})}}(jQuery,window),function(e){"use strict";var t=e.tablesorter||{};t.addWidget({id:"saveSort",priority:20,options:{saveSort:!0},init:function(e,t,r,i){t.format(e,r,i,!0)},format:function(r,i,l,a){var s,n,o=i.$table,c=l.saveSort!==!1,d={sortList:i.sortList};i.debug&&(n=new Date),o.hasClass("hasSaveSort")?c&&r.hasInitialized&&t.storage&&(t.storage(r,"tablesorter-savesort",d),i.debug&&t.benchmark("saveSort widget: Saving last sort: "+i.sortList,n)):(o.addClass("hasSaveSort"),d="",t.storage&&(s=t.storage(r,"tablesorter-savesort"),d=s&&s.hasOwnProperty("sortList")&&e.isArray(s.sortList)?s.sortList:"",i.debug&&t.benchmark('saveSort: Last sort loaded: "'+d+'"',n),o.bind("saveSortReset",function(e){e.stopPropagation(),t.storage(r,"tablesorter-savesort","")})),a&&d&&d.length>0?i.sortList=d:r.hasInitialized&&d&&d.length>0&&o.trigger("sorton",[d]))},remove:function(e,r){r.$table.removeClass("hasSaveSort"),t.storage&&t.storage(e,"tablesorter-savesort","")}})}(jQuery),e.tablesorter});
-/* custom */ $(document).ready(function(){$('.table-sortable').tablesorter({theme:'bootstrap',widgets:['uitheme','zebra','filter','stickyHeaders','saveSort'],headerTemplate:'{content} {icon}',widthFixed:true,ignoreCase:true,widgetOptions:{filter_columnFilters:true,zebra:['even','odd'],filter_reset:'.reset'}});});
+},type:"numeric"}),t.addParser({id:"shortDate",is:function(e){return/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/.test((e||"").replace(/\s+/g," ").replace(/[\-.,]/g,"/"))},format:function(e,r,s,a){if(e){var n,o,i=r.config,d=i.$headerIndexed[a],c=d.length&&d[0].dateFormat||t.getData(d,t.getColumnData(r,i.headers,a),"dateFormat")||i.dateFormat;return o=e.replace(/\s+/g," ").replace(/[\-.,]/g,"/"),"mmddyyyy"===c?o=o.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$1/$2"):"ddmmyyyy"===c?o=o.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$2/$1"):"yyyymmdd"===c&&(o=o.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,"$1/$2/$3")),n=new Date(o),n instanceof Date&&isFinite(n)?n.getTime():e}return e},type:"numeric"}),t.addParser({id:"time",is:function(e){return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(e)},format:function(e){var t=e?new Date("2000/01/01 "+e.replace(/(\S)([AP]M)$/i,"$1 $2")):e;return t instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"}),t.addParser({id:"metadata",is:function(){return!1},format:function(t,r,s){var a=r.config,n=a.parserMetadataName?a.parserMetadataName:"sortValue";return e(s).metadata()[n]},type:"numeric"}),t.addWidget({id:"zebra",priority:90,format:function(t,r,s){var a,n,o,i,d,c,l,p,u=new RegExp(r.cssChildRow,"i"),g=r.$tbodies.add(e(r.namespace+"_extra_table").children("tbody:not(."+r.cssInfoBlock+")"));for(r.debug&&(d=new Date),c=0;c<g.length;c++)for(o=0,a=g.eq(c).children("tr:visible").not(r.selectorRemove),p=a.length,l=0;p>l;l++)n=a.eq(l),u.test(n[0].className)||o++,i=o%2===0,n.removeClass(s.zebra[i?1:0]).addClass(s.zebra[i?0:1])},remove:function(e,r,s,a){if(!a){var n,o,i=r.$tbodies,d=(s.zebra||["even","odd"]).join(" ");for(n=0;n<i.length;n++)o=t.processTbody(e,i.eq(n),!0),o.children().removeClass(d),t.processTbody(e,o,!1)}}})}(jQuery); /* jquery.tablesorter.widgets.js v2.22.3 */ !function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){return function(e,t,r){"use strict";var i=e.tablesorter||{};i.storage=function(l,a,s,n){l=e(l)[0];var o,c,d,f=!1,u={},h=l.config,p=h&&h.widgetOptions,g=n&&n.useSessionStorage||p&&p.storage_useSessionStorage?"sessionStorage":"localStorage",m=e(l),b=n&&n.id||m.attr(n&&n.group||p&&p.storage_group||"data-table-group")||p&&p.storage_tableId||l.id||e(".tablesorter").index(m),y=n&&n.url||m.attr(n&&n.page||p&&p.storage_page||"data-table-page")||p&&p.storage_fixedUrl||h&&h.fixedUrl||t.location.pathname;if(g in t)try{t[g].setItem("_tmptest","temp"),f=!0,t[g].removeItem("_tmptest")}catch(_){h&&h.debug&&i.log(g+" is not supported in this browser")}return e.parseJSON&&(f?u=e.parseJSON(t[g][a]||"null")||{}:(c=r.cookie.split(/[;\s|=]/),o=e.inArray(a,c)+1,u=0!==o?e.parseJSON(c[o]||"null")||{}:{})),(s||""===s)&&t.JSON&&JSON.hasOwnProperty("stringify")?(u[y]||(u[y]={}),u[y][b]=s,f?t[g][a]=JSON.stringify(u):(d=new Date,d.setTime(d.getTime()+31536e6),r.cookie=a+"="+JSON.stringify(u).replace(/\"/g,'"')+"; expires="+d.toGMTString()+"; path=/"),void 0):u&&u[y]?u[y][b]:""}}(jQuery,window,document),function(e){"use strict";var t=e.tablesorter||{};t.themes={bootstrap:{table:"table table-bordered table-striped",caption:"caption",header:"bootstrap-header",sortNone:"",sortAsc:"",sortDesc:"",active:"",hover:"",icons:"",iconSortNone:"bootstrap-icon-unsorted",iconSortAsc:"icon-chevron-up glyphicon glyphicon-chevron-up",iconSortDesc:"icon-chevron-down glyphicon glyphicon-chevron-down",filterRow:"",footerRow:"",footerCells:"",even:"",odd:""},jui:{table:"ui-widget ui-widget-content ui-corner-all",caption:"ui-widget-content",header:"ui-widget-header ui-corner-all ui-state-default",sortNone:"",sortAsc:"",sortDesc:"",active:"ui-state-active",hover:"ui-state-hover",icons:"ui-icon",iconSortNone:"ui-icon-carat-2-n-s",iconSortAsc:"ui-icon-carat-1-n",iconSortDesc:"ui-icon-carat-1-s",filterRow:"",footerRow:"",footerCells:"",even:"ui-widget-content",odd:"ui-state-default"}},e.extend(t.css,{wrapper:"tablesorter-wrapper"}),t.addWidget({id:"uitheme",priority:10,format:function(r,i,l){var a,s,n,o,c,d,f,u,h,p,g,m,b=t.themes,y=i.$table.add(e(i.namespace+"_extra_table")),_=i.$headers.add(e(i.namespace+"_extra_headers")),v=i.theme||"jui",w=b[v]||{},x=e.trim([w.sortNone,w.sortDesc,w.sortAsc,w.active].join(" ")),C=e.trim([w.iconSortNone,w.iconSortDesc,w.iconSortAsc].join(" "));for(i.debug&&(o=new Date),y.hasClass("tablesorter-"+v)&&i.theme===i.appliedTheme&&l.uitheme_applied||(l.uitheme_applied=!0,h=b[i.appliedTheme]||{},m=!e.isEmptyObject(h),p=m?[h.sortNone,h.sortDesc,h.sortAsc,h.active].join(" "):"",g=m?[h.iconSortNone,h.iconSortDesc,h.iconSortAsc].join(" "):"",m&&(l.zebra[0]=e.trim(" "+l.zebra[0].replace(" "+h.even,"")),l.zebra[1]=e.trim(" "+l.zebra[1].replace(" "+h.odd,"")),i.$tbodies.children().removeClass([h.even,h.odd].join(" "))),w.even&&(l.zebra[0]+=" "+w.even),w.odd&&(l.zebra[1]+=" "+w.odd),y.children("caption").removeClass(h.caption||"").addClass(w.caption),f=y.removeClass((i.appliedTheme?"tablesorter-"+(i.appliedTheme||""):"")+" "+(h.table||"")).addClass("tablesorter-"+v+" "+(w.table||"")).children("tfoot"),i.appliedTheme=i.theme,f.length&&f.children("tr").removeClass(h.footerRow||"").addClass(w.footerRow).children("th, td").removeClass(h.footerCells||"").addClass(w.footerCells),_.removeClass((m?[h.header,h.hover,p].join(" "):"")||"").addClass(w.header).not(".sorter-false").unbind("mouseenter.tsuitheme mouseleave.tsuitheme").bind("mouseenter.tsuitheme mouseleave.tsuitheme",function(t){e(this)["mouseenter"===t.type?"addClass":"removeClass"](w.hover||"")}),_.each(function(){var r=e(this);r.find("."+t.css.wrapper).length||r.wrapInner('<div class="'+t.css.wrapper+'" style="position:relative;height:100%;width:100%"></div>')}),i.cssIcon&&_.find("."+t.css.icon).removeClass(m?[h.icons,g].join(" "):"").addClass(w.icons||""),y.hasClass("hasFilters")&&y.children("thead").children("."+t.css.filterRow).removeClass(m?h.filterRow||"":"").addClass(w.filterRow||"")),a=0;a<i.columns;a++)c=i.$headers.add(e(i.namespace+"_extra_headers")).not(".sorter-false").filter('[data-column="'+a+'"]'),d=t.css.icon?c.find("."+t.css.icon):e(),u=_.not(".sorter-false").filter('[data-column="'+a+'"]:last'),u.length&&(c.removeClass(x),d.removeClass(C),u[0].sortDisabled?d.removeClass(w.icons||""):(s=w.sortNone,n=w.iconSortNone,u.hasClass(t.css.sortAsc)?(s=[w.sortAsc,w.active].join(" "),n=w.iconSortAsc):u.hasClass(t.css.sortDesc)&&(s=[w.sortDesc,w.active].join(" "),n=w.iconSortDesc),c.addClass(s),d.addClass(n||"")));i.debug&&t.benchmark("Applying "+v+" theme",o)},remove:function(e,r,i,l){if(i.uitheme_applied){var a=r.$table,s=r.appliedTheme||"jui",n=t.themes[s]||t.themes.jui,o=a.children("thead").children(),c=n.sortNone+" "+n.sortDesc+" "+n.sortAsc,d=n.iconSortNone+" "+n.iconSortDesc+" "+n.iconSortAsc;a.removeClass("tablesorter-"+s+" "+n.table),i.uitheme_applied=!1,l||(a.find(t.css.header).removeClass(n.header),o.unbind("mouseenter.tsuitheme mouseleave.tsuitheme").removeClass(n.hover+" "+c+" "+n.active).filter("."+t.css.filterRow).removeClass(n.filterRow),o.find("."+t.css.icon).removeClass(n.icons+" "+d))}}})}(jQuery),function(e){"use strict";var t=e.tablesorter||{};t.addWidget({id:"columns",priority:30,options:{columns:["primary","secondary","tertiary"]},format:function(r,i,l){var a,s,n,o,c,d,f,u,h=i.$table,p=i.$tbodies,g=i.sortList,m=g.length,b=l&&l.columns||["primary","secondary","tertiary"],y=b.length-1;for(f=b.join(" "),s=0;s<p.length;s++)a=t.processTbody(r,p.eq(s),!0),n=a.children("tr"),n.each(function(){if(c=e(this),"none"!==this.style.display&&(d=c.children().removeClass(f),g&&g[0]&&(d.eq(g[0][0]).addClass(b[0]),m>1)))for(u=1;m>u;u++)d.eq(g[u][0]).addClass(b[u]||b[y])}),t.processTbody(r,a,!1);if(o=l.columns_thead!==!1?["thead tr"]:[],l.columns_tfoot!==!1&&o.push("tfoot tr"),o.length&&(n=h.find(o.join(",")).children().removeClass(f),m))for(u=0;m>u;u++)n.filter('[data-column="'+g[u][0]+'"]').addClass(b[u]||b[y])},remove:function(r,i,l){var a,s,n=i.$tbodies,o=(l.columns||["primary","secondary","tertiary"]).join(" ");for(i.$headers.removeClass(o),i.$table.children("tfoot").children("tr").children("th, td").removeClass(o),a=0;a<n.length;a++)s=t.processTbody(r,n.eq(a),!0),s.children("tr").each(function(){e(this).children().removeClass(o)}),t.processTbody(r,s,!1)}})}(jQuery),function(e){"use strict";var t=e.tablesorter||{},r=t.css;e.extend(r,{filterRow:"tablesorter-filter-row",filter:"tablesorter-filter",filterDisabled:"disabled",filterRowHide:"hideme"}),t.addWidget({id:"filter",priority:50,options:{filter_childRows:!1,filter_childByColumn:!1,filter_columnFilters:!0,filter_columnAnyMatch:!0,filter_cellFilter:"",filter_cssFilter:"",filter_defaultFilter:{},filter_excludeFilter:{},filter_external:"",filter_filteredRow:"filtered",filter_formatter:null,filter_functions:null,filter_hideEmpty:!0,filter_hideFilters:!1,filter_ignoreCase:!0,filter_liveSearch:!0,filter_onlyAvail:"filter-onlyAvail",filter_placeholder:{search:"",select:""},filter_reset:null,filter_saveFilters:!1,filter_searchDelay:300,filter_searchFiltered:!0,filter_selectSource:null,filter_startsWith:!1,filter_useParsedData:!1,filter_serversideFiltering:!1,filter_defaultAttrib:"data-value",filter_selectSourceSeparator:"|"},format:function(e,r,i){r.$table.hasClass("hasFilters")||t.filter.init(e,r,i)},remove:function(i,l,a,s){var n,o,c=l.$table,d=l.$tbodies,f="addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(l.namespace+"filter ");if(c.removeClass("hasFilters").unbind(f.replace(/\s+/g," ")).find("."+r.filterRow).remove(),!s){for(n=0;n<d.length;n++)o=t.processTbody(i,d.eq(n),!0),o.children().removeClass(a.filter_filteredRow).show(),t.processTbody(i,o,!1);a.filter_reset&&e(document).undelegate(a.filter_reset,"click.tsfilter")}}}),t.filter={regex:{regex:/^\/((?:\\\/|[^\/])+)\/([mig]{0,3})?$/,child:/tablesorter-childRow/,filtered:/filtered/,type:/undefined|number/,exact:/(^[\"\'=]+)|([\"\'=]+$)/g,nondigit:/[^\w,. \-()]/g,operators:/[<>=]/g,query:"(q|query)"},types:{or:function(r,i,l){if(/\|/.test(i.iFilter)||t.filter.regex.orSplit.test(i.filter)){var a,s,n,o,c=e.extend({},i),d=i.index,f=i.parsed[d],u=i.filter.split(t.filter.regex.orSplit),h=i.iFilter.split(t.filter.regex.orSplit),p=u.length;for(a=0;p>a;a++)if(c.nestedFilters=!0,c.filter=""+(t.filter.parseFilter(r,u[a],d,f)||""),c.iFilter=""+(t.filter.parseFilter(r,h[a],d,f)||""),n="("+(t.filter.parseFilter(r,c.filter,d,f)||"")+")",o=new RegExp(i.isMatch?n:"^"+n+"$",r.widgetOptions.filter_ignoreCase?"i":""),s=o.test(c.exact)||t.filter.processTypes(r,c,l))return s;return s||!1}return null},and:function(r,i,l){if(t.filter.regex.andTest.test(i.filter)){var a,s,n,o,c,d=e.extend({},i),f=i.index,u=i.parsed[f],h=i.filter.split(t.filter.regex.andSplit),p=i.iFilter.split(t.filter.regex.andSplit),g=h.length;for(a=0;g>a;a++)d.nestedFilters=!0,d.filter=""+(t.filter.parseFilter(r,h[a],f,u)||""),d.iFilter=""+(t.filter.parseFilter(r,p[a],f,u)||""),o=("("+(t.filter.parseFilter(r,d.filter,f,u)||"")+")").replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*"),c=new RegExp(i.isMatch?o:"^"+o+"$",r.widgetOptions.filter_ignoreCase?"i":""),n=c.test(d.exact)||t.filter.processTypes(r,d,l),s=0===a?n:s&&n;return s||!1}return null},regex:function(e,r){if(t.filter.regex.regex.test(r.filter)){var i,l=r.filter_regexCache[r.index]||t.filter.regex.regex.exec(r.filter),a=l instanceof RegExp;try{a||(r.filter_regexCache[r.index]=l=new RegExp(l[1],l[2])),i=l.test(r.exact)}catch(s){i=!1}return i}return null},operators:function(r,i){if(/^[<>]=?/.test(i.iFilter)&&""!==i.iExact){var l,a,s,n=r.table,o=i.index,c=i.parsed[o],d=t.formatFloat(i.iFilter.replace(t.filter.regex.operators,""),n),f=r.parsers[o],u=d;return(c||"numeric"===f.type)&&(s=e.trim(""+i.iFilter.replace(t.filter.regex.operators,"")),a=t.filter.parseFilter(r,s,o,!0),d="number"!=typeof a||""===a||isNaN(a)?d:a),!c&&"numeric"!==f.type||isNaN(d)||"undefined"==typeof i.cache?(s=isNaN(i.iExact)?i.iExact.replace(t.filter.regex.nondigit,""):i.iExact,l=t.formatFloat(s,n)):l=i.cache,/>/.test(i.iFilter)?a=/>=/.test(i.iFilter)?l>=d:l>d:/</.test(i.iFilter)&&(a=/<=/.test(i.iFilter)?d>=l:d>l),a||""!==u||(a=!0),a}return null},notMatch:function(r,i){if(/^\!/.test(i.iFilter)){var l,a=i.iFilter.replace("!",""),s=t.filter.parseFilter(r,a,i.index,i.parsed[i.index])||"";return t.filter.regex.exact.test(s)?(s=s.replace(t.filter.regex.exact,""),""===s?!0:e.trim(s)!==i.iExact):(l=i.iExact.search(e.trim(s)),""===s?!0:!(r.widgetOptions.filter_startsWith?0===l:l>=0))}return null},exact:function(r,i){if(t.filter.regex.exact.test(i.iFilter)){var l=i.iFilter.replace(t.filter.regex.exact,""),a=t.filter.parseFilter(r,l,i.index,i.parsed[i.index])||"";return i.anyMatch?e.inArray(a,i.rowArray)>=0:a==i.iExact}return null},range:function(e,r){if(t.filter.regex.toTest.test(r.iFilter)){var i,l,a,s,n=e.table,o=r.index,c=r.parsed[o],d=r.iFilter.split(t.filter.regex.toSplit);return l=d[0].replace(t.filter.regex.nondigit,"")||"",a=t.formatFloat(t.filter.parseFilter(e,l,o,c),n),l=d[1].replace(t.filter.regex.nondigit,"")||"",s=t.formatFloat(t.filter.parseFilter(e,l,o,c),n),(c||"numeric"===e.parsers[o].type)&&(i=e.parsers[o].format(""+d[0],n,e.$headers.eq(o),o),a=""===i||isNaN(i)?a:i,i=e.parsers[o].format(""+d[1],n,e.$headers.eq(o),o),s=""===i||isNaN(i)?s:i),!c&&"numeric"!==e.parsers[o].type||isNaN(a)||isNaN(s)?(l=isNaN(r.iExact)?r.iExact.replace(t.filter.regex.nondigit,""):r.iExact,i=t.formatFloat(l,n)):i=r.cache,a>s&&(l=a,a=s,s=l),i>=a&&s>=i||""===a||""===s}return null},wild:function(e,r){if(/[\?\*\|]/.test(r.iFilter)){var i=r.index,l=r.parsed[i],a=""+(t.filter.parseFilter(e,r.iFilter,i,l)||"");return!/\?\*/.test(a)&&r.nestedFilters&&(a=r.isMatch?a:"^("+a+")$"),new RegExp(a.replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*"),e.widgetOptions.filter_ignoreCase?"i":"").test(r.exact)}return null},fuzzy:function(e,r){if(/^~/.test(r.iFilter)){var i,l=0,a=r.iExact.length,s=r.iFilter.slice(1),n=t.filter.parseFilter(e,s,r.index,r.parsed[r.index])||"";for(i=0;a>i;i++)r.iExact[i]===n[l]&&(l+=1);return l===n.length?!0:!1}return null}},init:function(i,l,a){t.language=e.extend(!0,{},{to:"to",or:"or",and:"and"},t.language);var s,n,o,c,d,f,u,h,p,g=t.filter.regex;if(l.$table.addClass("hasFilters"),a.searchTimer=null,a.filter_initTimer=null,a.filter_formatterCount=0,a.filter_formatterInit=[],a.filter_anyColumnSelector='[data-column="all"],[data-column="any"]',a.filter_multipleColumnSelector='[data-column*="-"],[data-column*=","]',u="\\{"+t.filter.regex.query+"\\}",e.extend(g,{child:new RegExp(l.cssChildRow),filtered:new RegExp(a.filter_filteredRow),alreadyFiltered:new RegExp("(\\s+("+t.language.or+"|-|"+t.language.to+")\\s+)","i"),toTest:new RegExp("\\s+(-|"+t.language.to+")\\s+","i"),toSplit:new RegExp("(?:\\s+(?:-|"+t.language.to+")\\s+)","gi"),andTest:new RegExp("\\s+("+t.language.and+"|&&)\\s+","i"),andSplit:new RegExp("(?:\\s+(?:"+t.language.and+"|&&)\\s+)","gi"),orSplit:new RegExp("(?:\\s+(?:"+t.language.or+")\\s+|\\|)","gi"),iQuery:new RegExp(u,"i"),igQuery:new RegExp(u,"ig")}),u=l.$headers.filter(".filter-false, .parser-false").length,a.filter_columnFilters!==!1&&u!==l.$headers.length&&t.filter.buildRow(i,l,a),o="addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(l.namespace+"filter "),l.$table.bind(o,function(s,n){return u=a.filter_hideEmpty&&e.isEmptyObject(l.cache)&&!(l.delayInit&&"appendCache"===s.type),l.$table.find("."+r.filterRow).toggleClass(a.filter_filteredRow,u),/(search|filter)/.test(s.type)||(s.stopPropagation(),t.filter.buildDefault(i,!0)),"filterReset"===s.type?(l.$table.find("."+r.filter).add(a.filter_$externalFilters).val(""),t.filter.searching(i,[])):"filterEnd"===s.type?t.filter.buildDefault(i,!0):(n="search"===s.type?n:"updateComplete"===s.type?l.$table.data("lastSearch"):"",/(update|add)/.test(s.type)&&"updateComplete"!==s.type&&(l.lastCombinedFilter=null,l.lastSearch=[]),t.filter.searching(i,n,!0)),!1}),a.filter_reset&&(a.filter_reset instanceof e?a.filter_reset.click(function(){l.$table.trigger("filterReset")}):e(a.filter_reset).length&&e(document).undelegate(a.filter_reset,"click.tsfilter").delegate(a.filter_reset,"click.tsfilter",function(){l.$table.trigger("filterReset")})),a.filter_functions)for(d=0;d<l.columns;d++)if(h=t.getColumnData(i,a.filter_functions,d))if(c=l.$headerIndexed[d].removeClass("filter-select"),p=!(c.hasClass("filter-false")||c.hasClass("parser-false")),s="",h===!0&&p)t.filter.buildSelect(i,d);else if("object"==typeof h&&p){for(n in h)"string"==typeof n&&(s+=""===s?'<option value="">'+(c.data("placeholder")||c.attr("data-placeholder")||a.filter_placeholder.select||"")+"</option>":"",u=n,o=n,n.indexOf(a.filter_selectSourceSeparator)>=0&&(u=n.split(a.filter_selectSourceSeparator),o=u[1],u=u[0]),s+="<option "+(o===u?"":'data-function-name="'+n+'" ')+'value="'+u+'">'+o+"</option>");l.$table.find("thead").find("select."+r.filter+'[data-column="'+d+'"]').append(s),o=a.filter_selectSource,h=e.isFunction(o)?!0:t.getColumnData(i,o,d),h&&t.filter.buildSelect(l.table,d,"",!0,c.hasClass(a.filter_onlyAvail))}t.filter.buildDefault(i,!0),t.filter.bindSearch(i,l.$table.find("."+r.filter),!0),a.filter_external&&t.filter.bindSearch(i,a.filter_external),a.filter_hideFilters&&t.filter.hideFilters(i,l),l.showProcessing&&(o="filterStart filterEnd ".split(" ").join(l.namespace+"filter "),l.$table.unbind(o.replace(/\s+/g," ")).bind(o,function(a,s){c=s?l.$table.find("."+r.header).filter("[data-column]").filter(function(){return""!==s[e(this).data("column")]}):"",t.isProcessing(i,"filterStart"===a.type,s?c:"")})),l.filteredRows=l.totalRows,o="tablesorter-initialized pagerBeforeInitialized ".split(" ").join(l.namespace+"filter "),l.$table.unbind(o.replace(/\s+/g," ")).bind(o,function(){var e=this.config.widgetOptions;f=t.filter.setDefaults(i,l,e)||[],f.length&&(l.delayInit&&""===f.join("")||t.setFilters(i,f,!0)),l.$table.trigger("filterFomatterUpdate"),setTimeout(function(){e.filter_initialized||t.filter.filterInitComplete(l)},100)}),l.pager&&l.pager.initialized&&!a.filter_initialized&&(l.$table.trigger("filterFomatterUpdate"),setTimeout(function(){t.filter.filterInitComplete(l)},100))},formatterUpdated:function(e,t){var r=e.closest("table")[0].config.widgetOptions;r.filter_initialized||(r.filter_formatterInit[t]=1)},filterInitComplete:function(r){var i,l,a=r.widgetOptions,s=0,n=function(){a.filter_initialized=!0,r.$table.trigger("filterInit",r),t.filter.findRows(r.table,r.$table.data("lastSearch")||[])};if(e.isEmptyObject(a.filter_formatter))n();else{for(l=a.filter_formatterInit.length,i=0;l>i;i++)1===a.filter_formatterInit[i]&&s++;clearTimeout(a.filter_initTimer),a.filter_initialized||s!==a.filter_formatterCount?a.filter_initialized||(a.filter_initTimer=setTimeout(function(){n()},500)):n()}},setDefaults:function(r,i,l){var a,s,n,o,c,d=t.getFilters(r)||[];if(l.filter_saveFilters&&t.storage&&(s=t.storage(r,"tablesorter-filters")||[],a=e.isArray(s),a&&""===s.join("")||!a||(d=s)),""===d.join(""))for(c=i.$headers.add(l.filter_$externalFilters).filter("["+l.filter_defaultAttrib+"]"),n=0;n<=i.columns;n++)o=n===i.columns?"all":n,d[n]=c.filter('[data-column="'+o+'"]').attr(l.filter_defaultAttrib)||d[n]||"";return i.$table.data("lastSearch",d),d},parseFilter:function(e,t,r,i){return i?e.parsers[r].format(t,e.table,[],r):t},buildRow:function(i,l,a){var s,n,o,c,d,f,u,h,p=a.filter_cellFilter,g=l.columns,m=e.isArray(p),b='<tr role="row" class="'+r.filterRow+" "+l.cssIgnoreRow+'">';for(n=0;g>n;n++)b+="<td",b+=m?p[n]?' class="'+p[n]+'"':"":""!==p?' class="'+p+'"':"",b+="></td>";for(l.$filters=e(b+="</tr>").appendTo(l.$table.children("thead").eq(0)).find("td"),n=0;g>n;n++)d=!1,o=l.$headerIndexed[n],u=t.getColumnData(i,a.filter_functions,n),c=a.filter_functions&&u&&"function"!=typeof u||o.hasClass("filter-select"),s=t.getColumnData(i,l.headers,n),d="false"===t.getData(o[0],s,"filter")||"false"===t.getData(o[0],s,"parser"),c?b=e("<select>").appendTo(l.$filters.eq(n)):(u=t.getColumnData(i,a.filter_formatter,n),u?(a.filter_formatterCount++,b=u(l.$filters.eq(n),n),b&&0===b.length&&(b=l.$filters.eq(n).children("input")),b&&(0===b.parent().length||b.parent().length&&b.parent()[0]!==l.$filters[n])&&l.$filters.eq(n).append(b)):b=e('<input type="search">').appendTo(l.$filters.eq(n)),b&&(h=o.data("placeholder")||o.attr("data-placeholder")||a.filter_placeholder.search||"",b.attr("placeholder",h))),b&&(f=(e.isArray(a.filter_cssFilter)?"undefined"!=typeof a.filter_cssFilter[n]?a.filter_cssFilter[n]||"":"":a.filter_cssFilter)||"",b.addClass(r.filter+" "+f).attr("data-column",n),d&&(b.attr("placeholder","").addClass(r.filterDisabled)[0].disabled=!0))},bindSearch:function(r,i,l){if(r=e(r)[0],i=e(i),i.length){var a,s=r.config,n=s.widgetOptions,o=s.namespace+"filter",c=n.filter_$externalFilters;l!==!0&&(a=n.filter_anyColumnSelector+","+n.filter_multipleColumnSelector,n.filter_$anyMatch=i.filter(a),n.filter_$externalFilters=c&&c.length?n.filter_$externalFilters.add(i):i,t.setFilters(r,s.$table.data("lastSearch")||[],l===!1)),a="keypress keyup search change ".split(" ").join(o+" "),i.attr("data-lastSearchTime",(new Date).getTime()).unbind(a.replace(/\s+/g," ")).bind("keyup"+o,function(i){if(e(this).attr("data-lastSearchTime",(new Date).getTime()),27===i.which)this.value="";else{if(n.filter_liveSearch===!1)return;if(""!==this.value&&("number"==typeof n.filter_liveSearch&&this.value.length<n.filter_liveSearch||13!==i.which&&8!==i.which&&(i.which<32||i.which>=37&&i.which<=40)))return}t.filter.searching(r,!0,!0)}).bind("search change keypress ".split(" ").join(o+" "),function(i){var l=e(this).data("column");(13===i.which||"search"===i.type||"change"===i.type&&this.value!==s.lastSearch[l])&&(i.preventDefault(),e(this).attr("data-lastSearchTime",(new Date).getTime()),t.filter.searching(r,!1,!0))})}},searching:function(e,r,i){var l=e.config.widgetOptions;clearTimeout(l.searchTimer),"undefined"==typeof r||r===!0?l.searchTimer=setTimeout(function(){t.filter.checkFilters(e,r,i)},l.filter_liveSearch?l.filter_searchDelay:10):t.filter.checkFilters(e,r,i)},checkFilters:function(i,l,a){var s=i.config,n=s.widgetOptions,o=e.isArray(l),c=o?l:t.getFilters(i,!0),d=(c||[]).join("");return e.isEmptyObject(s.cache)?void(s.delayInit&&s.pager&&s.pager.initialized&&s.$table.trigger("updateCache",[function(){t.filter.checkFilters(i,!1,a)}])):(o&&(t.setFilters(i,c,!1,a!==!0),n.filter_initialized||(s.lastCombinedFilter="")),n.filter_hideFilters&&s.$table.find("."+r.filterRow).trigger(""===d?"mouseleave":"mouseenter"),s.lastCombinedFilter!==d||l===!1?(l===!1&&(s.lastCombinedFilter=null,s.lastSearch=[]),n.filter_initialized&&s.$table.trigger("filterStart",[c]),s.showProcessing?void setTimeout(function(){return t.filter.findRows(i,c,d),!1},30):(t.filter.findRows(i,c,d),!1)):void 0)},hideFilters:function(i,l){var a;l.$table.find("."+r.filterRow).bind("mouseenter mouseleave",function(t){var i=t,s=e(this);clearTimeout(a),a=setTimeout(function(){/enter|over/.test(i.type)?s.removeClass(r.filterRowHide):e(document.activeElement).closest("tr")[0]!==s[0]&&""===l.lastCombinedFilter&&s.addClass(r.filterRowHide)},200)}).find("input, select").bind("focus blur",function(i){var s=i,n=e(this).closest("tr");clearTimeout(a),a=setTimeout(function(){clearTimeout(a),""===t.getFilters(l.$table).join("")&&n.toggleClass(r.filterRowHide,"focus"!==s.type)},200)})},defaultFilter:function(r,i){if(""===r)return r;var l=t.filter.regex.iQuery,a=i.match(t.filter.regex.igQuery).length,s=a>1?e.trim(r).split(/\s/):[e.trim(r)],n=s.length-1,o=0,c=i;for(1>n&&a>1&&(s[1]=s[0]);l.test(c);)c=c.replace(l,s[o++]||""),l.test(c)&&n>o&&""!==(s[o]||"")&&(c=i.replace(l,c));return c},getLatestSearch:function(t){return t?t.sort(function(t,r){return e(r).attr("data-lastSearchTime")-e(t).attr("data-lastSearchTime")}):t||e()},multipleColumns:function(r,i){var l,a,s,n,o,c,d,f,u,h=r.widgetOptions,p=h.filter_initialized||!i.filter(h.filter_anyColumnSelector).length,g=[],m=e.trim(t.filter.getLatestSearch(i).attr("data-column")||"");if(p&&/-/.test(m))for(a=m.match(/(\d+)\s*-\s*(\d+)/g),u=a.length,f=0;u>f;f++){for(s=a[f].split(/\s*-\s*/),n=parseInt(s[0],10)||0,o=parseInt(s[1],10)||r.columns-1,n>o&&(l=n,n=o,o=l),o>=r.columns&&(o=r.columns-1);o>=n;n++)g.push(n);m=m.replace(a[f],"")}if(p&&/,/.test(m))for(c=m.split(/\s*,\s*/),u=c.length,d=0;u>d;d++)""!==c[d]&&(f=parseInt(c[d],10),f<r.columns&&g.push(f));if(!g.length)for(f=0;f<r.columns;f++)g.push(f);return g},processTypes:function(r,i,l){var a,s=null,n=null;for(a in t.filter.types)e.inArray(a,l.excludeMatch)<0&&null===n&&(n=t.filter.types[a](r,i,l),null!==n&&(s=n));return s},processRow:function(r,i,l){var a,s,n,o,c,d,f,u,h=t.filter.regex,p=r.widgetOptions,g=!0;if(i.$cells=i.$row.children(),i.anyMatchFlag){if(a=t.filter.multipleColumns(r,p.filter_$anyMatch),i.anyMatch=!0,i.isMatch=!0,i.rowArray=i.$cells.map(function(l){return e.inArray(l,a)>-1?(i.parsed[l]?u=i.cacheArray[l]:(u=i.rawArray[l],u=e.trim(p.filter_ignoreCase?u.toLowerCase():u),r.sortLocaleCompare&&(u=t.replaceAccents(u))),u):void 0}).get(),i.filter=i.anyMatchFilter,i.iFilter=i.iAnyMatchFilter,i.exact=i.rowArray.join(" "),i.iExact=p.filter_ignoreCase?i.exact.toLowerCase():i.exact,i.cache=i.cacheArray.slice(0,-1).join(" "),l.excludeMatch=l.noAnyMatch,c=t.filter.processTypes(r,i,l),null!==c)g=c;else if(p.filter_startsWith)for(g=!1,a=r.columns;!g&&a>0;)a--,g=g||0===i.rowArray[a].indexOf(i.iFilter);else g=(i.iExact+i.childRowText).indexOf(i.iFilter)>=0;if(i.anyMatch=!1,i.filters.join("")===i.filter)return g}for(a=0;a<r.columns;a++)i.filter=i.filters[a],i.index=a,l.excludeMatch=l.excludeFilter[a],i.filter&&(i.cache=i.cacheArray[a],p.filter_useParsedData||i.parsed[a]?i.exact=i.cache:(n=i.rawArray[a]||"",i.exact=r.sortLocaleCompare?t.replaceAccents(n):n),i.iExact=!h.type.test(typeof i.exact)&&p.filter_ignoreCase?i.exact.toLowerCase():i.exact,i.isMatch=r.$headerIndexed[i.index].hasClass("filter-match"),n=g,f=p.filter_columnFilters?r.$filters.add(r.$externalFilters).filter('[data-column="'+a+'"]').find("select option:selected").attr("data-function-name")||"":"",r.sortLocaleCompare&&(i.filter=t.replaceAccents(i.filter)),o=!0,p.filter_defaultFilter&&h.iQuery.test(l.defaultColFilter[a])&&(i.filter=t.filter.defaultFilter(i.filter,l.defaultColFilter[a]),o=!1),i.iFilter=p.filter_ignoreCase?(i.filter||"").toLowerCase():i.filter,d=l.functions[a],s=r.$headerIndexed[a].hasClass("filter-select"),c=null,(d||s&&o)&&(d===!0||s?c=i.isMatch?i.iExact.search(i.iFilter)>=0:i.filter===i.exact:"function"==typeof d?c=d(i.exact,i.cache,i.filter,a,i.$row,r,i):"function"==typeof d[f||i.filter]&&(u=f||i.filter,c=d[u](i.exact,i.cache,i.filter,a,i.$row,r,i))),null===c?(c=t.filter.processTypes(r,i,l),null!==c?n=c:(u=(i.iExact+i.childRowText).indexOf(t.filter.parseFilter(r,i.iFilter,a,i.parsed[a])),n=!p.filter_startsWith&&u>=0||p.filter_startsWith&&0===u)):n=c,g=n?g:!1);return g},findRows:function(r,i,l){if(r.config.lastCombinedFilter!==l&&r.config.widgetOptions.filter_initialized){var a,s,n,o,c,d,f,u,h,p,g,m,b,y,_,v,w,x,C,z,S,$,F=e.extend([],i),R=t.filter.regex,k=r.config,T=k.widgetOptions,A={anyMatch:!1,filters:i,filter_regexCache:[]},H={noAnyMatch:["range","notMatch","operators"],functions:[],excludeFilter:[],defaultColFilter:[],defaultAnyFilter:t.getColumnData(r,T.filter_defaultFilter,k.columns,!0)||""};for(A.parsed=k.$headers.map(function(i){return k.parsers&&k.parsers[i]&&k.parsers[i].parsed||t.getData&&"parsed"===t.getData(k.$headerIndexed[i],t.getColumnData(r,k.headers,i),"filter")||e(this).hasClass("filter-parsed")}).get(),u=0;u<k.columns;u++)H.functions[u]=t.getColumnData(r,T.filter_functions,u),H.defaultColFilter[u]=t.getColumnData(r,T.filter_defaultFilter,u)||"",H.excludeFilter[u]=(t.getColumnData(r,T.filter_excludeFilter,u,!0)||"").split(/\s+/);for(k.debug&&(t.log("Filter: Starting filter widget search",i),b=new Date),k.filteredRows=0,k.totalRows=0,l=(F||[]).join(""),d=0;d<k.$tbodies.length;d++){if(f=t.processTbody(r,k.$tbodies.eq(d),!0),u=k.columns,s=k.cache[d].normalized,o=e(e.map(s,function(e){return e[u].$row.get()})),""===l||T.filter_serversideFiltering)o.removeClass(T.filter_filteredRow).not("."+k.cssChildRow).css("display","");else{if(o=o.not("."+k.cssChildRow),a=o.length,(T.filter_$anyMatch&&T.filter_$anyMatch.length||"undefined"!=typeof i[k.columns])&&(A.anyMatchFlag=!0,A.anyMatchFilter=""+(i[k.columns]||T.filter_$anyMatch&&t.filter.getLatestSearch(T.filter_$anyMatch).val()||""),T.filter_columnAnyMatch)){for(x=A.anyMatchFilter.split(R.andSplit),C=!1,_=0;_<x.length;_++)z=x[_].split(":"),z.length>1&&(S=parseInt(z[0],10)-1,S>=0&&S<k.columns&&(i[S]=z[1],x.splice(_,1),_--,C=!0));C&&(A.anyMatchFilter=x.join(" && "))}if(w=T.filter_searchFiltered,g=k.lastSearch||k.$table.data("lastSearch")||[],w)for(_=0;u+1>_;_++)y=i[_]||"",w||(_=u),w=!(!w||!g.length||0!==y.indexOf(g[_]||"")||R.alreadyFiltered.test(y)||/[=\"\|!]/.test(y)||/(>=?\s*-\d)/.test(y)||/(<=?\s*\d)/.test(y)||""!==y&&k.$filters&&k.$filters.eq(_).find("select").length&&!k.$headerIndexed[_].hasClass("filter-match"));for(v=o.not("."+T.filter_filteredRow).length,w&&0===v&&(w=!1),k.debug&&t.log("Filter: Searching through "+(w&&a>v?v:"all")+" rows"),A.anyMatchFlag&&(k.sortLocaleCompare&&(A.anyMatchFilter=t.replaceAccents(A.anyMatchFilter)),T.filter_defaultFilter&&R.iQuery.test(H.defaultAnyFilter)&&(A.anyMatchFilter=t.filter.defaultFilter(A.anyMatchFilter,H.defaultAnyFilter),w=!1),A.iAnyMatchFilter=T.filter_ignoreCase&&k.ignoreCase?A.anyMatchFilter.toLowerCase():A.anyMatchFilter),c=0;a>c;c++)if($=o[c].className,h=c&&R.child.test($),!(h||w&&R.filtered.test($))){if(A.$row=o.eq(c),A.cacheArray=s[c],n=A.cacheArray[k.columns],A.rawArray=n.raw,A.childRowText="",!T.filter_childByColumn){for($="",p=n.child,_=0;_<p.length;_++)$+=" "+p[_].join("")||"";A.childRowText=T.filter_childRows?T.filter_ignoreCase?$.toLowerCase():$:""}if(m=t.filter.processRow(k,A,H),p=n.$row.filter(":gt( 0 )"),T.filter_childRows&&p.length){if(T.filter_childByColumn)for(_=0;_<p.length;_++)A.$row=p.eq(_),A.cacheArray=n.child[_],A.rawArray=A.cacheArray,m=m||t.filter.processRow(k,A,H);p.toggleClass(T.filter_filteredRow,!m)}n.$row.toggleClass(T.filter_filteredRow,!m)[0].display=m?"":"none"}}k.filteredRows+=o.not("."+T.filter_filteredRow).length,k.totalRows+=o.length,t.processTbody(r,f,!1)}k.lastCombinedFilter=l,k.lastSearch=F,k.$table.data("lastSearch",F),T.filter_saveFilters&&t.storage&&t.storage(r,"tablesorter-filters",F),k.debug&&t.benchmark("Completed filter widget search",b),T.filter_initialized&&k.$table.trigger("filterEnd",k),setTimeout(function(){k.$table.trigger("applyWidgets")},0)}},getOptionSource:function(r,i,l){r=e(r)[0];var a,s,n,o,c=r.config,d=c.widgetOptions,f=[],u=!1,h=d.filter_selectSource,p=c.$table.data("lastSearch")||[],g=e.isFunction(h)?!0:t.getColumnData(r,h,i);if(l&&""!==p[i]&&(l=!1),g===!0)u=h(r,i,l);else{if(g instanceof e||"string"===e.type(g)&&g.indexOf("</option>")>=0)return g;e.isArray(g)?u=g:"object"===e.type(h)&&g&&(u=g(r,i,l))}if(u===!1&&(u=t.filter.getOptions(r,i,l)),u=e.grep(u,function(t,r){return e.inArray(t,u)===r}),c.$headerIndexed[i].hasClass("filter-select-nosort"))return u;for(o=u.length,n=0;o>n;n++)s=u[n],f.push({t:s,p:c.parsers&&c.parsers.length&&c.parsers[i].format(s,r,[],i)||s});for(a=c.textSorter||"",f.sort(function(l,s){var n=l.p.toString(),o=s.p.toString();return e.isFunction(a)?a(n,o,!0,i,r):"object"==typeof a&&a.hasOwnProperty(i)?a[i](n,o,!0,i,r):t.sortNatural?t.sortNatural(n,o):!0}),u=[],o=f.length,n=0;o>n;n++)u.push(f[n].t);return u},getOptions:function(t,r,i){t=e(t)[0];var l,a,s,n,o,c=t.config,d=c.widgetOptions,f=[];for(a=0;a<c.$tbodies.length;a++)for(o=c.cache[a],s=c.cache[a].normalized.length,l=0;s>l;l++)n=o.row?o.row[l]:o.normalized[l][c.columns].$row[0],i&&n.className.match(d.filter_filteredRow)||f.push(d.filter_useParsedData||c.parsers[r].parsed||c.$headerIndexed[r].hasClass("filter-parsed")?""+o.normalized[l][r]:o.normalized[l][c.columns].raw[r]);return f},buildSelect:function(i,l,a,s,n){if(i=e(i)[0],l=parseInt(l,10),i.config.cache&&!e.isEmptyObject(i.config.cache)){var o,c,d,f,u,h,p=i.config,g=p.widgetOptions,m=p.$headerIndexed[l],b='<option value="">'+(m.data("placeholder")||m.attr("data-placeholder")||g.filter_placeholder.select||"")+"</option>",y=p.$table.find("thead").find("select."+r.filter+'[data-column="'+l+'"]').val();if(("undefined"==typeof a||""===a)&&(a=t.filter.getOptionSource(i,l,n)),e.isArray(a)){for(o=0;o<a.length;o++)d=a[o]=(""+a[o]).replace(/\"/g,"&quot;"),c=d,d.indexOf(g.filter_selectSourceSeparator)>=0&&(f=d.split(g.filter_selectSourceSeparator),c=f[0],d=f[1]),b+=""!==a[o]?"<option "+(c===d?"":'data-function-name="'+a[o]+'" ')+'value="'+c+'">'+d+"</option>":"";a=[]}u=(p.$filters?p.$filters:p.$table.children("thead")).find("."+r.filter),g.filter_$externalFilters&&(u=u&&u.length?u.add(g.filter_$externalFilters):g.filter_$externalFilters),h=u.filter('select[data-column="'+l+'"]'),h.length&&(h[s?"html":"append"](b),e.isArray(a)||h.append(a).val(y),h.val(y))}},buildDefault:function(e,r){var i,l,a,s=e.config,n=s.widgetOptions,o=s.columns;for(i=0;o>i;i++)l=s.$headerIndexed[i],a=!(l.hasClass("filter-false")||l.hasClass("parser-false")),(l.hasClass("filter-select")||t.getColumnData(e,n.filter_functions,i)===!0)&&a&&t.filter.buildSelect(e,i,"",r,l.hasClass(n.filter_onlyAvail))}},t.getFilters=function(i,l,a,s){var n,o,c,d,f=!1,u=i?e(i)[0].config:"",h=u?u.widgetOptions:"";if(l!==!0&&h&&!h.filter_columnFilters||e.isArray(a)&&a.join("")===u.lastCombinedFilter)return e(i).data("lastSearch");if(u&&(u.$filters&&(o=u.$filters.find("."+r.filter)),h.filter_$externalFilters&&(o=o&&o.length?o.add(h.filter_$externalFilters):h.filter_$externalFilters),o&&o.length))for(f=a||[],n=0;n<u.columns+1;n++)d=n===u.columns?h.filter_anyColumnSelector+","+h.filter_multipleColumnSelector:'[data-column="'+n+'"]',c=o.filter(d),c.length&&(c=t.filter.getLatestSearch(c),e.isArray(a)?(s&&c.length>1&&(c=c.slice(1)),n===u.columns&&(d=c.filter(h.filter_anyColumnSelector),c=d.length?d:c),c.val(a[n]).trigger("change.tsfilter")):(f[n]=c.val()||"",n===u.columns?c.slice(1).filter('[data-column*="'+c.attr("data-column")+'"]').val(f[n]):c.slice(1).val(f[n])),n===u.columns&&c.length&&(h.filter_$anyMatch=c));
+ return 0===f.length&&(f=!1),f},t.setFilters=function(r,i,l,a){var s=r?e(r)[0].config:"",n=t.getFilters(r,!0,i,a);return s&&l&&(s.lastCombinedFilter=null,s.lastSearch=[],t.filter.searching(s.table,i,a),s.$table.trigger("filterFomatterUpdate")),!!n}}(jQuery),function(e,t){"use strict";var r=e.tablesorter||{};e.extend(r.css,{sticky:"tablesorter-stickyHeader",stickyVis:"tablesorter-sticky-visible",stickyHide:"tablesorter-sticky-hidden",stickyWrap:"tablesorter-sticky-wrapper"}),r.addHeaderResizeEvent=function(t,r,i){if(t=e(t)[0],t.config){var l={timer:250},a=e.extend({},l,i),s=t.config,n=s.widgetOptions,o=function(e){var t,r,i,l,a,o,c=s.$headers.length;for(n.resize_flag=!0,r=[],t=0;c>t;t++)i=s.$headers.eq(t),l=i.data("savedSizes")||[0,0],a=i[0].offsetWidth,o=i[0].offsetHeight,(a!==l[0]||o!==l[1])&&(i.data("savedSizes",[a,o]),r.push(i[0]));r.length&&e!==!1&&s.$table.trigger("resize",[r]),n.resize_flag=!1};return o(!1),clearInterval(n.resize_timer),r?(n.resize_flag=!1,!1):void(n.resize_timer=setInterval(function(){n.resize_flag||o()},a.timer))}},r.addWidget({id:"stickyHeaders",priority:60,options:{stickyHeaders:"",stickyHeaders_attachTo:null,stickyHeaders_xScroll:null,stickyHeaders_yScroll:null,stickyHeaders_offset:0,stickyHeaders_filteredToTop:!0,stickyHeaders_cloneId:"-sticky",stickyHeaders_addResizeEvent:!0,stickyHeaders_includeCaption:!0,stickyHeaders_zIndex:2},format:function(i,l,a){if(!(l.$table.hasClass("hasStickyHeaders")||e.inArray("filter",l.widgets)>=0&&!l.$table.hasClass("hasFilters"))){var s,n,o,c,d=l.$table,f=e(a.stickyHeaders_attachTo),u=l.namespace+"stickyheaders ",h=e(a.stickyHeaders_yScroll||a.stickyHeaders_attachTo||t),p=e(a.stickyHeaders_xScroll||a.stickyHeaders_attachTo||t),g=d.children("thead:first"),m=g.children("tr").not(".sticky-false").children(),b=d.children("tfoot"),y=isNaN(a.stickyHeaders_offset)?e(a.stickyHeaders_offset):"",_=y.length?y.height()||0:parseInt(a.stickyHeaders_offset,10)||0,v=d.parent().closest("."+r.css.table).hasClass("hasStickyHeaders")?d.parent().closest("table.tablesorter")[0].config.widgetOptions.$sticky.parent():[],w=v.length?v.height():0,x=a.$sticky=d.clone().addClass("containsStickyHeaders "+r.css.sticky+" "+a.stickyHeaders+" "+l.namespace.slice(1)+"_extra_table").wrap('<div class="'+r.css.stickyWrap+'">'),C=x.parent().addClass(r.css.stickyHide).css({position:f.length?"absolute":"fixed",padding:parseInt(x.parent().parent().css("padding-left"),10),top:_+w,left:0,visibility:"hidden",zIndex:a.stickyHeaders_zIndex||2}),z=x.children("thead:first"),S="",$=0,F=function(e,r){var i,l,a,s,n,o=e.filter(":visible"),c=o.length;for(i=0;c>i;i++)s=r.filter(":visible").eq(i),n=o.eq(i),"border-box"===n.css("box-sizing")?l=n.outerWidth():"collapse"===s.css("border-collapse")?t.getComputedStyle?l=parseFloat(t.getComputedStyle(n[0],null).width):(a=parseFloat(n.css("border-width")),l=n.outerWidth()-parseFloat(n.css("padding-left"))-parseFloat(n.css("padding-right"))-a):l=n.width(),s.css({width:l,"min-width":l,"max-width":l})},R=function(){_=y.length?y.height()||0:parseInt(a.stickyHeaders_offset,10)||0,$=0,C.css({left:f.length?parseInt(f.css("padding-left"),10)||0:d.offset().left-parseInt(d.css("margin-left"),10)-p.scrollLeft()-$,width:d.outerWidth()}),F(d,x),F(m,c)},k=function(t){if(d.is(":visible")){w=v.length?v.offset().top-h.scrollTop()+v.height():0;var i=d.offset(),l=e.isWindow(h[0]),a=e.isWindow(p[0]),s=(f.length?l?h.scrollTop():h.offset().top:h.scrollTop())+_+w,n=d.height()-(C.height()+(b.height()||0)),o=s>i.top&&s<i.top+n?"visible":"hidden",c={visibility:o};f.length&&(c.top=l?s-f.offset().top:f.scrollTop()),a&&(c.left=d.offset().left-parseInt(d.css("margin-left"),10)-p.scrollLeft()-$),v.length&&(c.top=(c.top||0)+_+w),C.removeClass(r.css.stickyVis+" "+r.css.stickyHide).addClass("visible"===o?r.css.stickyVis:r.css.stickyHide).css(c),(o!==S||t)&&(R(),S=o)}};if(f.length&&!f.css("position")&&f.css("position","relative"),x.attr("id")&&(x[0].id+=a.stickyHeaders_cloneId),x.find("thead:gt(0), tr.sticky-false").hide(),x.find("tbody, tfoot").remove(),x.find("caption").toggle(a.stickyHeaders_includeCaption),c=z.children().children(),x.css({height:0,width:0,margin:0}),c.find("."+r.css.resizer).remove(),d.addClass("hasStickyHeaders").bind("pagerComplete"+u,function(){R()}),r.bindEvents(i,z.children().children("."+r.css.header)),d.after(C),l.onRenderHeader)for(o=z.children("tr").children(),n=o.length,s=0;n>s;s++)l.onRenderHeader.apply(o.eq(s),[s,l,x]);p.add(h).unbind("scroll resize ".split(" ").join(u).replace(/\s+/g," ")).bind("scroll resize ".split(" ").join(u),function(e){k("resize"===e.type)}),l.$table.unbind("stickyHeadersUpdate"+u).bind("stickyHeadersUpdate"+u,function(){k(!0)}),a.stickyHeaders_addResizeEvent&&r.addHeaderResizeEvent(i),d.hasClass("hasFilters")&&a.filter_columnFilters&&(d.bind("filterEnd"+u,function(){var i=e(document.activeElement).closest("td"),s=i.parent().children().index(i);C.hasClass(r.css.stickyVis)&&a.stickyHeaders_filteredToTop&&(t.scrollTo(0,d.position().top),s>=0&&l.$filters&&l.$filters.eq(s).find("a, select, input").filter(":visible").focus())}),r.filter.bindSearch(d,c.find("."+r.css.filter)),a.filter_hideFilters&&r.filter.hideFilters(x,l)),d.trigger("stickyHeadersInit")}},remove:function(i,l,a){var s=l.namespace+"stickyheaders ";l.$table.removeClass("hasStickyHeaders").unbind("pagerComplete filterEnd stickyHeadersUpdate ".split(" ").join(s).replace(/\s+/g," ")).next("."+r.css.stickyWrap).remove(),a.$sticky&&a.$sticky.length&&a.$sticky.remove(),e(t).add(a.stickyHeaders_xScroll).add(a.stickyHeaders_yScroll).add(a.stickyHeaders_attachTo).unbind("scroll resize ".split(" ").join(s).replace(/\s+/g," ")),r.addHeaderResizeEvent(i,!1)}})}(jQuery,window),function(e,t){"use strict";var r=e.tablesorter||{};e.extend(r.css,{resizableContainer:"tablesorter-resizable-container",resizableHandle:"tablesorter-resizable-handle",resizableNoSelect:"tablesorter-disableSelection",resizableStorage:"tablesorter-resizable"}),e(function(){var t="<style>body."+r.css.resizableNoSelect+" { -ms-user-select: none; -moz-user-select: -moz-none;-khtml-user-select: none; -webkit-user-select: none; user-select: none; }."+r.css.resizableContainer+" { position: relative; height: 1px; }."+r.css.resizableHandle+" { position: absolute; display: inline-block; width: 8px;top: 1px; cursor: ew-resize; z-index: 3; user-select: none; -moz-user-select: none; }</style>";e(t).appendTo("body")}),r.resizable={init:function(t,i){if(!t.$table.hasClass("hasResizable")){t.$table.addClass("hasResizable");var l,a,s,n,o,c=t.$table,d=c.parent(),f=parseInt(c.css("margin-top"),10),u=i.resizable_={useStorage:r.storage&&i.resizable!==!1,$wrap:d,mouseXPosition:0,$target:null,$next:null,overflow:"auto"===d.css("overflow")||"scroll"===d.css("overflow")||"auto"===d.css("overflow-x")||"scroll"===d.css("overflow-x"),storedSizes:[]};for(r.resizableReset(t.table,!0),u.tableWidth=c.width(),u.fullWidth=Math.abs(d.width()-u.tableWidth)<20,u.useStorage&&u.overflow&&(r.storage(t.table,"tablesorter-table-original-css-width",u.tableWidth),o=r.storage(t.table,"tablesorter-table-resized-width")||"auto",r.resizable.setWidth(c,o,!0)),i.resizable_.storedSizes=n=(u.useStorage?r.storage(t.table,r.css.resizableStorage):[])||[],r.resizable.setWidths(t,i,n),r.resizable.updateStoredSizes(t,i),i.$resizable_container=e('<div class="'+r.css.resizableContainer+'">').css({top:f}).insertBefore(c),s=0;s<t.columns;s++)a=t.$headerIndexed[s],o=r.getColumnData(t.table,t.headers,s),l="false"===r.getData(a,o,"resizable"),l||e('<div class="'+r.css.resizableHandle+'">').appendTo(i.$resizable_container).attr({"data-column":s,unselectable:"on"}).data("header",a).bind("selectstart",!1);c.one("tablesorter-initialized",function(){r.resizable.setHandlePosition(t,i),r.resizable.bindings(this.config,this.config.widgetOptions)})}},updateStoredSizes:function(e,t){var r,i,l=e.columns,a=t.resizable_;for(a.storedSizes=[],r=0;l>r;r++)i=e.$headerIndexed[r],a.storedSizes[r]=i.is(":visible")?i.width():0},setWidth:function(e,t,r){e.css({width:t,"min-width":r?t:"","max-width":r?t:""})},setWidths:function(t,i,l){var a,s,n=i.resizable_,o=e(t.namespace+"_extra_headers"),c=t.$table.children("colgroup").children("col");if(l=l||n.storedSizes||[],l.length){for(a=0;a<t.columns;a++)r.resizable.setWidth(t.$headerIndexed[a],l[a],n.overflow),o.length&&(s=o.eq(a).add(c.eq(a)),r.resizable.setWidth(s,l[a],n.overflow));s=e(t.namespace+"_extra_table"),s.length&&!r.hasWidget(t.table,"scroller")&&r.resizable.setWidth(s,t.$table.outerWidth(),n.overflow)}},setHandlePosition:function(t,i){var l,a=r.hasWidget(t.table,"scroller"),s=t.$table.height(),n=i.$resizable_container.children(),o=Math.floor(n.width()/2);a&&(s=0,t.$table.closest("."+r.css.scrollerWrap).children().each(function(){var t=e(this);s+=t.filter('[style*="height"]').length?t.height():t.children("table").height()})),l=t.$table.position().left,n.each(function(){var r=e(this),a=parseInt(r.attr("data-column"),10),n=t.columns-1,c=r.data("header");c&&(c.is(":visible")?(n>a||a===n&&i.resizable_addLastColumn)&&r.css({display:"inline-block",height:s,left:c.position().left-l+c.outerWidth()-o}):r.hide())})},toggleTextSelection:function(t,i){var l=t.namespace+"tsresize";t.widgetOptions.resizable_.disabled=i,e("body").toggleClass(r.css.resizableNoSelect,i),i?e("body").attr("unselectable","on").bind("selectstart"+l,!1):e("body").removeAttr("unselectable").unbind("selectstart"+l)},bindings:function(i,l){var a=i.namespace+"tsresize";l.$resizable_container.children().bind("mousedown",function(t){var a,s=l.resizable_,n=e(i.namespace+"_extra_headers"),o=e(t.target).data("header");a=parseInt(o.attr("data-column"),10),s.$target=o=o.add(n.filter('[data-column="'+a+'"]')),s.target=a,s.$next=t.shiftKey||l.resizable_targetLast?o.parent().children().not(".resizable-false").filter(":last"):o.nextAll(":not(.resizable-false)").eq(0),a=parseInt(s.$next.attr("data-column"),10),s.$next=s.$next.add(n.filter('[data-column="'+a+'"]')),s.next=a,s.mouseXPosition=t.pageX,r.resizable.updateStoredSizes(i,l),r.resizable.toggleTextSelection(i,!0)}),e(document).bind("mousemove"+a,function(e){var t=l.resizable_;t.disabled&&0!==t.mouseXPosition&&t.$target&&(l.resizable_throttle?(clearTimeout(t.timer),t.timer=setTimeout(function(){r.resizable.mouseMove(i,l,e)},isNaN(l.resizable_throttle)?5:l.resizable_throttle)):r.resizable.mouseMove(i,l,e))}).bind("mouseup"+a,function(){l.resizable_.disabled&&(r.resizable.toggleTextSelection(i,!1),r.resizable.stopResize(i,l),r.resizable.setHandlePosition(i,l))}),e(t).bind("resize"+a+" resizeEnd"+a,function(){r.resizable.setHandlePosition(i,l)}),i.$table.bind("columnUpdate"+a,function(){r.resizable.setHandlePosition(i,l)}).find("thead:first").add(e(i.namespace+"_extra_table").find("thead:first")).bind("contextmenu"+a,function(){var e=0===l.resizable_.storedSizes.length;return r.resizableReset(i.table),r.resizable.setHandlePosition(i,l),l.resizable_.storedSizes=[],e})},mouseMove:function(t,i,l){if(0!==i.resizable_.mouseXPosition&&i.resizable_.$target){var a,s=0,n=i.resizable_,o=n.$next,c=n.storedSizes[n.target],d=l.pageX-n.mouseXPosition;if(n.overflow){if(c+d>0){for(n.storedSizes[n.target]+=d,r.resizable.setWidth(n.$target,n.storedSizes[n.target],!0),a=0;a<t.columns;a++)s+=n.storedSizes[a];r.resizable.setWidth(t.$table.add(e(t.namespace+"_extra_table")),s)}o.length||(n.$wrap[0].scrollLeft=t.$table.width())}else n.fullWidth?(n.storedSizes[n.target]+=d,n.storedSizes[n.next]-=d,r.resizable.setWidths(t,i)):(n.storedSizes[n.target]+=d,r.resizable.setWidths(t,i));n.mouseXPosition=l.pageX,t.$table.trigger("stickyHeadersUpdate")}},stopResize:function(e,t){var i=t.resizable_;r.resizable.updateStoredSizes(e,t),i.useStorage&&(r.storage(e.table,r.css.resizableStorage,i.storedSizes),r.storage(e.table,"tablesorter-table-resized-width",e.$table.width())),i.mouseXPosition=0,i.$target=i.$next=null,e.$table.trigger("stickyHeadersUpdate")}},r.addWidget({id:"resizable",priority:40,options:{resizable:!0,resizable_addLastColumn:!1,resizable_widths:[],resizable_throttle:!1,resizable_targetLast:!1,resizable_fullWidth:null},init:function(e,t,i,l){r.resizable.init(i,l)},remove:function(t,i,l,a){if(l.$resizable_container){var s=i.namespace+"tsresize";i.$table.add(e(i.namespace+"_extra_table")).removeClass("hasResizable").children("thead").unbind("contextmenu"+s),l.$resizable_container.remove(),r.resizable.toggleTextSelection(i,!1),r.resizableReset(t,a),e(document).unbind("mousemove"+s+" mouseup"+s)}}}),r.resizableReset=function(t,i){e(t).each(function(){var e,l,a=this.config,s=a&&a.widgetOptions,n=s.resizable_;if(t&&a&&a.$headerIndexed.length){for(n.overflow&&n.tableWidth&&(r.resizable.setWidth(a.$table,n.tableWidth,!0),n.useStorage&&r.storage(t,"tablesorter-table-resized-width","auto")),e=0;e<a.columns;e++)l=a.$headerIndexed[e],s.resizable_widths&&s.resizable_widths[e]?r.resizable.setWidth(l,s.resizable_widths[e],n.overflow):l.hasClass("resizable-false")||r.resizable.setWidth(l,"",n.overflow);a.$table.trigger("stickyHeadersUpdate"),r.storage&&!i&&r.storage(this,r.css.resizableStorage,{})}})}}(jQuery,window),function(e){"use strict";var t=e.tablesorter||{};t.addWidget({id:"saveSort",priority:20,options:{saveSort:!0},init:function(e,t,r,i){t.format(e,r,i,!0)},format:function(r,i,l,a){var s,n,o=i.$table,c=l.saveSort!==!1,d={sortList:i.sortList};i.debug&&(n=new Date),o.hasClass("hasSaveSort")?c&&r.hasInitialized&&t.storage&&(t.storage(r,"tablesorter-savesort",d),i.debug&&t.benchmark("saveSort widget: Saving last sort: "+i.sortList,n)):(o.addClass("hasSaveSort"),d="",t.storage&&(s=t.storage(r,"tablesorter-savesort"),d=s&&s.hasOwnProperty("sortList")&&e.isArray(s.sortList)?s.sortList:"",i.debug&&t.benchmark('saveSort: Last sort loaded: "'+d+'"',n),o.bind("saveSortReset",function(e){e.stopPropagation(),t.storage(r,"tablesorter-savesort","")})),a&&d&&d.length>0?i.sortList=d:r.hasInitialized&&d&&d.length>0&&o.trigger("sorton",[d]))},remove:function(e,r){r.$table.removeClass("hasSaveSort"),t.storage&&t.storage(e,"tablesorter-savesort","")}})}(jQuery),e.tablesorter}); /* custom */ $(document).ready(function(){$('.table-sortable').tablesorter({theme:'bootstrap',widgets:['uitheme','zebra','filter'],headerTemplate:'{content} {icon}',widthFixed:true,ignoreCase:true,widgetOptions:{filter_columnFilters:true,zebra:['even','odd'],filter_reset:'.reset'}});}); /* jquery.tablesorter.widgets.js */ !function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){return function(e,t,r){"use strict";var i=e.tablesorter||{};i.storage=function(l,a,s,n){l=e(l)[0];var o,c,d,f=!1,u={},h=l.config,p=h&&h.widgetOptions,g=n&&n.useSessionStorage||p&&p.storage_useSessionStorage?"sessionStorage":"localStorage",m=e(l),b=n&&n.id||m.attr(n&&n.group||p&&p.storage_group||"data-table-group")||p&&p.storage_tableId||l.id||e(".tablesorter").index(m),y=n&&n.url||m.attr(n&&n.page||p&&p.storage_page||"data-table-page")||p&&p.storage_fixedUrl||h&&h.fixedUrl||t.location.pathname;if(g in t)try{t[g].setItem("_tmptest","temp"),f=!0,t[g].removeItem("_tmptest")}catch(_){h&&h.debug&&i.log(g+" is not supported in this browser")}return e.parseJSON&&(f?u=e.parseJSON(t[g][a]||"null")||{}:(c=r.cookie.split(/[;\s|=]/),o=e.inArray(a,c)+1,u=0!==o?e.parseJSON(c[o]||"null")||{}:{})),(s||""===s)&&t.JSON&&JSON.hasOwnProperty("stringify")?(u[y]||(u[y]={}),u[y][b]=s,f?t[g][a]=JSON.stringify(u):(d=new Date,d.setTime(d.getTime()+31536e6),r.cookie=a+"="+JSON.stringify(u).replace(/\"/g,'"')+"; expires="+d.toGMTString()+"; path=/"),void 0):u&&u[y]?u[y][b]:""}}(jQuery,window,document),function(e){"use strict";var t=e.tablesorter||{};t.themes={bootstrap:{table:"table table-bordered table-striped",caption:"caption",header:"bootstrap-header",sortNone:"",sortAsc:"",sortDesc:"",active:"",hover:"",icons:"",iconSortNone:"bootstrap-icon-unsorted",iconSortAsc:"icon-chevron-up glyphicon glyphicon-chevron-up",iconSortDesc:"icon-chevron-down glyphicon glyphicon-chevron-down",filterRow:"",footerRow:"",footerCells:"",even:"",odd:""},jui:{table:"ui-widget ui-widget-content ui-corner-all",caption:"ui-widget-content",header:"ui-widget-header ui-corner-all ui-state-default",sortNone:"",sortAsc:"",sortDesc:"",active:"ui-state-active",hover:"ui-state-hover",icons:"ui-icon",iconSortNone:"ui-icon-carat-2-n-s",iconSortAsc:"ui-icon-carat-1-n",iconSortDesc:"ui-icon-carat-1-s",filterRow:"",footerRow:"",footerCells:"",even:"ui-widget-content",odd:"ui-state-default"}},e.extend(t.css,{wrapper:"tablesorter-wrapper"}),t.addWidget({id:"uitheme",priority:10,format:function(r,i,l){var a,s,n,o,c,d,f,u,h,p,g,m,b=t.themes,y=i.$table.add(e(i.namespace+"_extra_table")),_=i.$headers.add(e(i.namespace+"_extra_headers")),v=i.theme||"jui",w=b[v]||{},x=e.trim([w.sortNone,w.sortDesc,w.sortAsc,w.active].join(" ")),C=e.trim([w.iconSortNone,w.iconSortDesc,w.iconSortAsc].join(" "));for(i.debug&&(o=new Date),y.hasClass("tablesorter-"+v)&&i.theme===i.appliedTheme&&l.uitheme_applied||(l.uitheme_applied=!0,h=b[i.appliedTheme]||{},m=!e.isEmptyObject(h),p=m?[h.sortNone,h.sortDesc,h.sortAsc,h.active].join(" "):"",g=m?[h.iconSortNone,h.iconSortDesc,h.iconSortAsc].join(" "):"",m&&(l.zebra[0]=e.trim(" "+l.zebra[0].replace(" "+h.even,"")),l.zebra[1]=e.trim(" "+l.zebra[1].replace(" "+h.odd,"")),i.$tbodies.children().removeClass([h.even,h.odd].join(" "))),w.even&&(l.zebra[0]+=" "+w.even),w.odd&&(l.zebra[1]+=" "+w.odd),y.children("caption").removeClass(h.caption||"").addClass(w.caption),f=y.removeClass((i.appliedTheme?"tablesorter-"+(i.appliedTheme||""):"")+" "+(h.table||"")).addClass("tablesorter-"+v+" "+(w.table||"")).children("tfoot"),i.appliedTheme=i.theme,f.length&&f.children("tr").removeClass(h.footerRow||"").addClass(w.footerRow).children("th, td").removeClass(h.footerCells||"").addClass(w.footerCells),_.removeClass((m?[h.header,h.hover,p].join(" "):"")||"").addClass(w.header).not(".sorter-false").unbind("mouseenter.tsuitheme mouseleave.tsuitheme").bind("mouseenter.tsuitheme mouseleave.tsuitheme",function(t){e(this)["mouseenter"===t.type?"addClass":"removeClass"](w.hover||"")}),_.each(function(){var r=e(this);r.find("."+t.css.wrapper).length||r.wrapInner('<div class="'+t.css.wrapper+'" style="position:relative;height:100%;width:100%"></div>')}),i.cssIcon&&_.find("."+t.css.icon).removeClass(m?[h.icons,g].join(" "):"").addClass(w.icons||""),y.hasClass("hasFilters")&&y.children("thead").children("."+t.css.filterRow).removeClass(m?h.filterRow||"":"").addClass(w.filterRow||"")),a=0;a<i.columns;a++)c=i.$headers.add(e(i.namespace+"_extra_headers")).not(".sorter-false").filter('[data-column="'+a+'"]'),d=t.css.icon?c.find("."+t.css.icon):e(),u=_.not(".sorter-false").filter('[data-column="'+a+'"]:last'),u.length&&(c.removeClass(x),d.removeClass(C),u[0].sortDisabled?d.removeClass(w.icons||""):(s=w.sortNone,n=w.iconSortNone,u.hasClass(t.css.sortAsc)?(s=[w.sortAsc,w.active].join(" "),n=w.iconSortAsc):u.hasClass(t.css.sortDesc)&&(s=[w.sortDesc,w.active].join(" "),n=w.iconSortDesc),c.addClass(s),d.addClass(n||"")));i.debug&&t.benchmark("Applying "+v+" theme",o)},remove:function(e,r,i,l){if(i.uitheme_applied){var a=r.$table,s=r.appliedTheme||"jui",n=t.themes[s]||t.themes.jui,o=a.children("thead").children(),c=n.sortNone+" "+n.sortDesc+" "+n.sortAsc,d=n.iconSortNone+" "+n.iconSortDesc+" "+n.iconSortAsc;a.removeClass("tablesorter-"+s+" "+n.table),i.uitheme_applied=!1,l||(a.find(t.css.header).removeClass(n.header),o.unbind("mouseenter.tsuitheme mouseleave.tsuitheme").removeClass(n.hover+" "+c+" "+n.active).filter("."+t.css.filterRow).removeClass(n.filterRow),o.find("."+t.css.icon).removeClass(n.icons+" "+d))}}})}(jQuery),function(e){"use strict";var t=e.tablesorter||{};t.addWidget({id:"columns",priority:30,options:{columns:["primary","secondary","tertiary"]},format:function(r,i,l){var a,s,n,o,c,d,f,u,h=i.$table,p=i.$tbodies,g=i.sortList,m=g.length,b=l&&l.columns||["primary","secondary","tertiary"],y=b.length-1;for(f=b.join(" "),s=0;s<p.length;s++)a=t.processTbody(r,p.eq(s),!0),n=a.children("tr"),n.each(function(){if(c=e(this),"none"!==this.style.display&&(d=c.children().removeClass(f),g&&g[0]&&(d.eq(g[0][0]).addClass(b[0]),m>1)))for(u=1;m>u;u++)d.eq(g[u][0]).addClass(b[u]||b[y])}),t.processTbody(r,a,!1);if(o=l.columns_thead!==!1?["thead tr"]:[],l.columns_tfoot!==!1&&o.push("tfoot tr"),o.length&&(n=h.find(o.join(",")).children().removeClass(f),m))for(u=0;m>u;u++)n.filter('[data-column="'+g[u][0]+'"]').addClass(b[u]||b[y])},remove:function(r,i,l){var a,s,n=i.$tbodies,o=(l.columns||["primary","secondary","tertiary"]).join(" ");for(i.$headers.removeClass(o),i.$table.children("tfoot").children("tr").children("th, td").removeClass(o),a=0;a<n.length;a++)s=t.processTbody(r,n.eq(a),!0),s.children("tr").each(function(){e(this).children().removeClass(o)}),t.processTbody(r,s,!1)}})}(jQuery),function(e){"use strict";var t=e.tablesorter||{},r=t.css;e.extend(r,{filterRow:"tablesorter-filter-row",filter:"tablesorter-filter",filterDisabled:"disabled",filterRowHide:"hideme"}),t.addWidget({id:"filter",priority:50,options:{filter_childRows:!1,filter_childByColumn:!1,filter_columnFilters:!0,filter_columnAnyMatch:!0,filter_cellFilter:"",filter_cssFilter:"",filter_defaultFilter:{},filter_excludeFilter:{},filter_external:"",filter_filteredRow:"filtered",filter_formatter:null,filter_functions:null,filter_hideEmpty:!0,filter_hideFilters:!1,filter_ignoreCase:!0,filter_liveSearch:!0,filter_onlyAvail:"filter-onlyAvail",filter_placeholder:{search:"",select:""},filter_reset:null,filter_saveFilters:!1,filter_searchDelay:300,filter_searchFiltered:!0,filter_selectSource:null,filter_startsWith:!1,filter_useParsedData:!1,filter_serversideFiltering:!1,filter_defaultAttrib:"data-value",filter_selectSourceSeparator:"|"},format:function(e,r,i){r.$table.hasClass("hasFilters")||t.filter.init(e,r,i)},remove:function(i,l,a,s){var n,o,c=l.$table,d=l.$tbodies,f="addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(l.namespace+"filter ");if(c.removeClass("hasFilters").unbind(f.replace(/\s+/g," ")).find("."+r.filterRow).remove(),!s){for(n=0;n<d.length;n++)o=t.processTbody(i,d.eq(n),!0),o.children().removeClass(a.filter_filteredRow).show(),t.processTbody(i,o,!1);a.filter_reset&&e(document).undelegate(a.filter_reset,"click.tsfilter")}}}),t.filter={regex:{regex:/^\/((?:\\\/|[^\/])+)\/([mig]{0,3})?$/,child:/tablesorter-childRow/,filtered:/filtered/,type:/undefined|number/,exact:/(^[\"\'=]+)|([\"\'=]+$)/g,nondigit:/[^\w,. \-()]/g,operators:/[<>=]/g,query:"(q|query)"},types:{or:function(r,i,l){if(/\|/.test(i.iFilter)||t.filter.regex.orSplit.test(i.filter)){var a,s,n,o,c=e.extend({},i),d=i.index,f=i.parsed[d],u=i.filter.split(t.filter.regex.orSplit),h=i.iFilter.split(t.filter.regex.orSplit),p=u.length;for(a=0;p>a;a++)if(c.nestedFilters=!0,c.filter=""+(t.filter.parseFilter(r,u[a],d,f)||""),c.iFilter=""+(t.filter.parseFilter(r,h[a],d,f)||""),n="("+(t.filter.parseFilter(r,c.filter,d,f)||"")+")",o=new RegExp(i.isMatch?n:"^"+n+"$",r.widgetOptions.filter_ignoreCase?"i":""),s=o.test(c.exact)||t.filter.processTypes(r,c,l))return s;return s||!1}return null},and:function(r,i,l){if(t.filter.regex.andTest.test(i.filter)){var a,s,n,o,c,d=e.extend({},i),f=i.index,u=i.parsed[f],h=i.filter.split(t.filter.regex.andSplit),p=i.iFilter.split(t.filter.regex.andSplit),g=h.length;for(a=0;g>a;a++)d.nestedFilters=!0,d.filter=""+(t.filter.parseFilter(r,h[a],f,u)||""),d.iFilter=""+(t.filter.parseFilter(r,p[a],f,u)||""),o=("("+(t.filter.parseFilter(r,d.filter,f,u)||"")+")").replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*"),c=new RegExp(i.isMatch?o:"^"+o+"$",r.widgetOptions.filter_ignoreCase?"i":""),n=c.test(d.exact)||t.filter.processTypes(r,d,l),s=0===a?n:s&&n;return s||!1}return null},regex:function(e,r){if(t.filter.regex.regex.test(r.filter)){var i,l=r.filter_regexCache[r.index]||t.filter.regex.regex.exec(r.filter),a=l instanceof RegExp;try{a||(r.filter_regexCache[r.index]=l=new RegExp(l[1],l[2])),i=l.test(r.exact)}catch(s){i=!1}return i}return null},operators:function(r,i){if(/^[<>]=?/.test(i.iFilter)&&""!==i.iExact){var l,a,s,n=r.table,o=i.index,c=i.parsed[o],d=t.formatFloat(i.iFilter.replace(t.filter.regex.operators,""),n),f=r.parsers[o],u=d;return(c||"numeric"===f.type)&&(s=e.trim(""+i.iFilter.replace(t.filter.regex.operators,"")),a=t.filter.parseFilter(r,s,o,!0),d="number"!=typeof a||""===a||isNaN(a)?d:a),!c&&"numeric"!==f.type||isNaN(d)||"undefined"==typeof i.cache?(s=isNaN(i.iExact)?i.iExact.replace(t.filter.regex.nondigit,""):i.iExact,l=t.formatFloat(s,n)):l=i.cache,/>/.test(i.iFilter)?a=/>=/.test(i.iFilter)?l>=d:l>d:/</.test(i.iFilter)&&(a=/<=/.test(i.iFilter)?d>=l:d>l),a||""!==u||(a=!0),a}return null},notMatch:function(r,i){if(/^\!/.test(i.iFilter)){var l,a=i.iFilter.replace("!",""),s=t.filter.parseFilter(r,a,i.index,i.parsed[i.index])||"";return t.filter.regex.exact.test(s)?(s=s.replace(t.filter.regex.exact,""),""===s?!0:e.trim(s)!==i.iExact):(l=i.iExact.search(e.trim(s)),""===s?!0:!(r.widgetOptions.filter_startsWith?0===l:l>=0))}return null},exact:function(r,i){if(t.filter.regex.exact.test(i.iFilter)){var l=i.iFilter.replace(t.filter.regex.exact,""),a=t.filter.parseFilter(r,l,i.index,i.parsed[i.index])||"";return i.anyMatch?e.inArray(a,i.rowArray)>=0:a==i.iExact}return null},range:function(e,r){if(t.filter.regex.toTest.test(r.iFilter)){var i,l,a,s,n=e.table,o=r.index,c=r.parsed[o],d=r.iFilter.split(t.filter.regex.toSplit);return l=d[0].replace(t.filter.regex.nondigit,"")||"",a=t.formatFloat(t.filter.parseFilter(e,l,o,c),n),l=d[1].replace(t.filter.regex.nondigit,"")||"",s=t.formatFloat(t.filter.parseFilter(e,l,o,c),n),(c||"numeric"===e.parsers[o].type)&&(i=e.parsers[o].format(""+d[0],n,e.$headers.eq(o),o),a=""===i||isNaN(i)?a:i,i=e.parsers[o].format(""+d[1],n,e.$headers.eq(o),o),s=""===i||isNaN(i)?s:i),!c&&"numeric"!==e.parsers[o].type||isNaN(a)||isNaN(s)?(l=isNaN(r.iExact)?r.iExact.replace(t.filter.regex.nondigit,""):r.iExact,i=t.formatFloat(l,n)):i=r.cache,a>s&&(l=a,a=s,s=l),i>=a&&s>=i||""===a||""===s}return null},wild:function(e,r){if(/[\?\*\|]/.test(r.iFilter)){var i=r.index,l=r.parsed[i],a=""+(t.filter.parseFilter(e,r.iFilter,i,l)||"");return!/\?\*/.test(a)&&r.nestedFilters&&(a=r.isMatch?a:"^("+a+")$"),new RegExp(a.replace(/\?/g,"\\S{1}").replace(/\*/g,"\\S*"),e.widgetOptions.filter_ignoreCase?"i":"").test(r.exact)}return null},fuzzy:function(e,r){if(/^~/.test(r.iFilter)){var i,l=0,a=r.iExact.length,s=r.iFilter.slice(1),n=t.filter.parseFilter(e,s,r.index,r.parsed[r.index])||"";for(i=0;a>i;i++)r.iExact[i]===n[l]&&(l+=1);return l===n.length?!0:!1}return null}},init:function(i,l,a){t.language=e.extend(!0,{},{to:"to",or:"or",and:"and"},t.language);var s,n,o,c,d,f,u,h,p,g=t.filter.regex;if(l.$table.addClass("hasFilters"),a.searchTimer=null,a.filter_initTimer=null,a.filter_formatterCount=0,a.filter_formatterInit=[],a.filter_anyColumnSelector='[data-column="all"],[data-column="any"]',a.filter_multipleColumnSelector='[data-column*="-"],[data-column*=","]',u="\\{"+t.filter.regex.query+"\\}",e.extend(g,{child:new RegExp(l.cssChildRow),filtered:new RegExp(a.filter_filteredRow),alreadyFiltered:new RegExp("(\\s+("+t.language.or+"|-|"+t.language.to+")\\s+)","i"),toTest:new RegExp("\\s+(-|"+t.language.to+")\\s+","i"),toSplit:new RegExp("(?:\\s+(?:-|"+t.language.to+")\\s+)","gi"),andTest:new RegExp("\\s+("+t.language.and+"|&&)\\s+","i"),andSplit:new RegExp("(?:\\s+(?:"+t.language.and+"|&&)\\s+)","gi"),orSplit:new RegExp("(?:\\s+(?:"+t.language.or+")\\s+|\\|)","gi"),iQuery:new RegExp(u,"i"),igQuery:new RegExp(u,"ig")}),u=l.$headers.filter(".filter-false, .parser-false").length,a.filter_columnFilters!==!1&&u!==l.$headers.length&&t.filter.buildRow(i,l,a),o="addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(l.namespace+"filter "),l.$table.bind(o,function(s,n){return u=a.filter_hideEmpty&&e.isEmptyObject(l.cache)&&!(l.delayInit&&"appendCache"===s.type),l.$table.find("."+r.filterRow).toggleClass(a.filter_filteredRow,u),/(search|filter)/.test(s.type)||(s.stopPropagation(),t.filter.buildDefault(i,!0)),"filterReset"===s.type?(l.$table.find("."+r.filter).add(a.filter_$externalFilters).val(""),t.filter.searching(i,[])):"filterEnd"===s.type?t.filter.buildDefault(i,!0):(n="search"===s.type?n:"updateComplete"===s.type?l.$table.data("lastSearch"):"",/(update|add)/.test(s.type)&&"updateComplete"!==s.type&&(l.lastCombinedFilter=null,l.lastSearch=[]),t.filter.searching(i,n,!0)),!1}),a.filter_reset&&(a.filter_reset instanceof e?a.filter_reset.click(function(){l.$table.trigger("filterReset")}):e(a.filter_reset).length&&e(document).undelegate(a.filter_reset,"click.tsfilter").delegate(a.filter_reset,"click.tsfilter",function(){l.$table.trigger("filterReset")})),a.filter_functions)for(d=0;d<l.columns;d++)if(h=t.getColumnData(i,a.filter_functions,d))if(c=l.$headerIndexed[d].removeClass("filter-select"),p=!(c.hasClass("filter-false")||c.hasClass("parser-false")),s="",h===!0&&p)t.filter.buildSelect(i,d);else if("object"==typeof h&&p){for(n in h)"string"==typeof n&&(s+=""===s?'<option value="">'+(c.data("placeholder")||c.attr("data-placeholder")||a.filter_placeholder.select||"")+"</option>":"",u=n,o=n,n.indexOf(a.filter_selectSourceSeparator)>=0&&(u=n.split(a.filter_selectSourceSeparator),o=u[1],u=u[0]),s+="<option "+(o===u?"":'data-function-name="'+n+'" ')+'value="'+u+'">'+o+"</option>");l.$table.find("thead").find("select."+r.filter+'[data-column="'+d+'"]').append(s),o=a.filter_selectSource,h=e.isFunction(o)?!0:t.getColumnData(i,o,d),h&&t.filter.buildSelect(l.table,d,"",!0,c.hasClass(a.filter_onlyAvail))}t.filter.buildDefault(i,!0),t.filter.bindSearch(i,l.$table.find("."+r.filter),!0),a.filter_external&&t.filter.bindSearch(i,a.filter_external),a.filter_hideFilters&&t.filter.hideFilters(i,l),l.showProcessing&&(o="filterStart filterEnd ".split(" ").join(l.namespace+"filter "),l.$table.unbind(o.replace(/\s+/g," ")).bind(o,function(a,s){c=s?l.$table.find("."+r.header).filter("[data-column]").filter(function(){return""!==s[e(this).data("column")]}):"",t.isProcessing(i,"filterStart"===a.type,s?c:"")})),l.filteredRows=l.totalRows,o="tablesorter-initialized pagerBeforeInitialized ".split(" ").join(l.namespace+"filter "),l.$table.unbind(o.replace(/\s+/g," ")).bind(o,function(){var e=this.config.widgetOptions;f=t.filter.setDefaults(i,l,e)||[],f.length&&(l.delayInit&&""===f.join("")||t.setFilters(i,f,!0)),l.$table.trigger("filterFomatterUpdate"),setTimeout(function(){e.filter_initialized||t.filter.filterInitComplete(l)},100)}),l.pager&&l.pager.initialized&&!a.filter_initialized&&(l.$table.trigger("filterFomatterUpdate"),setTimeout(function(){t.filter.filterInitComplete(l)},100))},formatterUpdated:function(e,t){var r=e.closest("table")[0].config.widgetOptions;r.filter_initialized||(r.filter_formatterInit[t]=1)},filterInitComplete:function(r){var i,l,a=r.widgetOptions,s=0,n=function(){a.filter_initialized=!0,r.$table.trigger("filterInit",r),t.filter.findRows(r.table,r.$table.data("lastSearch")||[])};if(e.isEmptyObject(a.filter_formatter))n();else{for(l=a.filter_formatterInit.length,i=0;l>i;i++)1===a.filter_formatterInit[i]&&s++;clearTimeout(a.filter_initTimer),a.filter_initialized||s!==a.filter_formatterCount?a.filter_initialized||(a.filter_initTimer=setTimeout(function(){n()},500)):n()}},setDefaults:function(r,i,l){var a,s,n,o,c,d=t.getFilters(r)||[];if(l.filter_saveFilters&&t.storage&&(s=t.storage(r,"tablesorter-filters")||[],a=e.isArray(s),a&&""===s.join("")||!a||(d=s)),""===d.join(""))for(c=i.$headers.add(l.filter_$externalFilters).filter("["+l.filter_defaultAttrib+"]"),n=0;n<=i.columns;n++)o=n===i.columns?"all":n,d[n]=c.filter('[data-column="'+o+'"]').attr(l.filter_defaultAttrib)||d[n]||"";return i.$table.data("lastSearch",d),d},parseFilter:function(e,t,r,i){return i?e.parsers[r].format(t,e.table,[],r):t},buildRow:function(i,l,a){var s,n,o,c,d,f,u,h,p=a.filter_cellFilter,g=l.columns,m=e.isArray(p),b='<tr role="row" class="'+r.filterRow+" "+l.cssIgnoreRow+'">';for(n=0;g>n;n++)b+="<td",b+=m?p[n]?' class="'+p[n]+'"':"":""!==p?' class="'+p+'"':"",b+="></td>";for(l.$filters=e(b+="</tr>").appendTo(l.$table.children("thead").eq(0)).find("td"),n=0;g>n;n++)d=!1,o=l.$headerIndexed[n],u=t.getColumnData(i,a.filter_functions,n),c=a.filter_functions&&u&&"function"!=typeof u||o.hasClass("filter-select"),s=t.getColumnData(i,l.headers,n),d="false"===t.getData(o[0],s,"filter")||"false"===t.getData(o[0],s,"parser"),c?b=e("<select>").appendTo(l.$filters.eq(n)):(u=t.getColumnData(i,a.filter_formatter,n),u?(a.filter_formatterCount++,b=u(l.$filters.eq(n),n),b&&0===b.length&&(b=l.$filters.eq(n).children("input")),b&&(0===b.parent().length||b.parent().length&&b.parent()[0]!==l.$filters[n])&&l.$filters.eq(n).append(b)):b=e('<input type="search">').appendTo(l.$filters.eq(n)),b&&(h=o.data("placeholder")||o.attr("data-placeholder")||a.filter_placeholder.search||"",b.attr("placeholder",h))),b&&(f=(e.isArray(a.filter_cssFilter)?"undefined"!=typeof a.filter_cssFilter[n]?a.filter_cssFilter[n]||"":"":a.filter_cssFilter)||"",b.addClass(r.filter+" "+f).attr("data-column",n),d&&(b.attr("placeholder","").addClass(r.filterDisabled)[0].disabled=!0))},bindSearch:function(r,i,l){if(r=e(r)[0],i=e(i),i.length){var a,s=r.config,n=s.widgetOptions,o=s.namespace+"filter",c=n.filter_$externalFilters;l!==!0&&(a=n.filter_anyColumnSelector+","+n.filter_multipleColumnSelector,n.filter_$anyMatch=i.filter(a),n.filter_$externalFilters=c&&c.length?n.filter_$externalFilters.add(i):i,t.setFilters(r,s.$table.data("lastSearch")||[],l===!1)),a="keypress keyup search change ".split(" ").join(o+" "),i.attr("data-lastSearchTime",(new Date).getTime()).unbind(a.replace(/\s+/g," ")).bind("keyup"+o,function(i){if(e(this).attr("data-lastSearchTime",(new Date).getTime()),27===i.which)this.value="";else{if(n.filter_liveSearch===!1)return;if(""!==this.value&&("number"==typeof n.filter_liveSearch&&this.value.length<n.filter_liveSearch||13!==i.which&&8!==i.which&&(i.which<32||i.which>=37&&i.which<=40)))return}t.filter.searching(r,!0,!0)}).bind("search change keypress ".split(" ").join(o+" "),function(i){var l=e(this).data("column");(13===i.which||"search"===i.type||"change"===i.type&&this.value!==s.lastSearch[l])&&(i.preventDefault(),e(this).attr("data-lastSearchTime",(new Date).getTime()),t.filter.searching(r,!1,!0))})}},searching:function(e,r,i){var l=e.config.widgetOptions;clearTimeout(l.searchTimer),"undefined"==typeof r||r===!0?l.searchTimer=setTimeout(function(){t.filter.checkFilters(e,r,i)},l.filter_liveSearch?l.filter_searchDelay:10):t.filter.checkFilters(e,r,i)},checkFilters:function(i,l,a){var s=i.config,n=s.widgetOptions,o=e.isArray(l),c=o?l:t.getFilters(i,!0),d=(c||[]).join("");return e.isEmptyObject(s.cache)?void(s.delayInit&&s.pager&&s.pager.initialized&&s.$table.trigger("updateCache",[function(){t.filter.checkFilters(i,!1,a)}])):(o&&(t.setFilters(i,c,!1,a!==!0),n.filter_initialized||(s.lastCombinedFilter="")),n.filter_hideFilters&&s.$table.find("."+r.filterRow).trigger(""===d?"mouseleave":"mouseenter"),s.lastCombinedFilter!==d||l===!1?(l===!1&&(s.lastCombinedFilter=null,s.lastSearch=[]),n.filter_initialized&&s.$table.trigger("filterStart",[c]),s.showProcessing?void setTimeout(function(){return t.filter.findRows(i,c,d),!1},30):(t.filter.findRows(i,c,d),!1)):void 0)},hideFilters:function(i,l){var a;l.$table.find("."+r.filterRow).bind("mouseenter mouseleave",function(t){var i=t,s=e(this);clearTimeout(a),a=setTimeout(function(){/enter|over/.test(i.type)?s.removeClass(r.filterRowHide):e(document.activeElement).closest("tr")[0]!==s[0]&&""===l.lastCombinedFilter&&s.addClass(r.filterRowHide)},200)}).find("input, select").bind("focus blur",function(i){var s=i,n=e(this).closest("tr");clearTimeout(a),a=setTimeout(function(){clearTimeout(a),""===t.getFilters(l.$table).join("")&&n.toggleClass(r.filterRowHide,"focus"!==s.type)},200)})},defaultFilter:function(r,i){if(""===r)return r;var l=t.filter.regex.iQuery,a=i.match(t.filter.regex.igQuery).length,s=a>1?e.trim(r).split(/\s/):[e.trim(r)],n=s.length-1,o=0,c=i;for(1>n&&a>1&&(s[1]=s[0]);l.test(c);)c=c.replace(l,s[o++]||""),l.test(c)&&n>o&&""!==(s[o]||"")&&(c=i.replace(l,c));return c},getLatestSearch:function(t){return t?t.sort(function(t,r){return e(r).attr("data-lastSearchTime")-e(t).attr("data-lastSearchTime")}):t||e()},multipleColumns:function(r,i){var l,a,s,n,o,c,d,f,u,h=r.widgetOptions,p=h.filter_initialized||!i.filter(h.filter_anyColumnSelector).length,g=[],m=e.trim(t.filter.getLatestSearch(i).attr("data-column")||"");if(p&&/-/.test(m))for(a=m.match(/(\d+)\s*-\s*(\d+)/g),u=a.length,f=0;u>f;f++){for(s=a[f].split(/\s*-\s*/),n=parseInt(s[0],10)||0,o=parseInt(s[1],10)||r.columns-1,n>o&&(l=n,n=o,o=l),o>=r.columns&&(o=r.columns-1);o>=n;n++)g.push(n);m=m.replace(a[f],"")}if(p&&/,/.test(m))for(c=m.split(/\s*,\s*/),u=c.length,d=0;u>d;d++)""!==c[d]&&(f=parseInt(c[d],10),f<r.columns&&g.push(f));if(!g.length)for(f=0;f<r.columns;f++)g.push(f);return g},processTypes:function(r,i,l){var a,s=null,n=null;for(a in t.filter.types)e.inArray(a,l.excludeMatch)<0&&null===n&&(n=t.filter.types[a](r,i,l),null!==n&&(s=n));return s},processRow:function(r,i,l){var a,s,n,o,c,d,f,u,h=t.filter.regex,p=r.widgetOptions,g=!0;if(i.$cells=i.$row.children(),i.anyMatchFlag){if(a=t.filter.multipleColumns(r,p.filter_$anyMatch),i.anyMatch=!0,i.isMatch=!0,i.rowArray=i.$cells.map(function(l){return e.inArray(l,a)>-1?(i.parsed[l]?u=i.cacheArray[l]:(u=i.rawArray[l],u=e.trim(p.filter_ignoreCase?u.toLowerCase():u),r.sortLocaleCompare&&(u=t.replaceAccents(u))),u):void 0}).get(),i.filter=i.anyMatchFilter,i.iFilter=i.iAnyMatchFilter,i.exact=i.rowArray.join(" "),i.iExact=p.filter_ignoreCase?i.exact.toLowerCase():i.exact,i.cache=i.cacheArray.slice(0,-1).join(" "),l.excludeMatch=l.noAnyMatch,c=t.filter.processTypes(r,i,l),null!==c)g=c;else if(p.filter_startsWith)for(g=!1,a=r.columns;!g&&a>0;)a--,g=g||0===i.rowArray[a].indexOf(i.iFilter);else g=(i.iExact+i.childRowText).indexOf(i.iFilter)>=0;if(i.anyMatch=!1,i.filters.join("")===i.filter)return g}for(a=0;a<r.columns;a++)i.filter=i.filters[a],i.index=a,l.excludeMatch=l.excludeFilter[a],i.filter&&(i.cache=i.cacheArray[a],p.filter_useParsedData||i.parsed[a]?i.exact=i.cache:(n=i.rawArray[a]||"",i.exact=r.sortLocaleCompare?t.replaceAccents(n):n),i.iExact=!h.type.test(typeof i.exact)&&p.filter_ignoreCase?i.exact.toLowerCase():i.exact,i.isMatch=r.$headerIndexed[i.index].hasClass("filter-match"),n=g,f=p.filter_columnFilters?r.$filters.add(r.$externalFilters).filter('[data-column="'+a+'"]').find("select option:selected").attr("data-function-name")||"":"",r.sortLocaleCompare&&(i.filter=t.replaceAccents(i.filter)),o=!0,p.filter_defaultFilter&&h.iQuery.test(l.defaultColFilter[a])&&(i.filter=t.filter.defaultFilter(i.filter,l.defaultColFilter[a]),o=!1),i.iFilter=p.filter_ignoreCase?(i.filter||"").toLowerCase():i.filter,d=l.functions[a],s=r.$headerIndexed[a].hasClass("filter-select"),c=null,(d||s&&o)&&(d===!0||s?c=i.isMatch?i.iExact.search(i.iFilter)>=0:i.filter===i.exact:"function"==typeof d?c=d(i.exact,i.cache,i.filter,a,i.$row,r,i):"function"==typeof d[f||i.filter]&&(u=f||i.filter,c=d[u](i.exact,i.cache,i.filter,a,i.$row,r,i))),null===c?(c=t.filter.processTypes(r,i,l),null!==c?n=c:(u=(i.iExact+i.childRowText).indexOf(t.filter.parseFilter(r,i.iFilter,a,i.parsed[a])),n=!p.filter_startsWith&&u>=0||p.filter_startsWith&&0===u)):n=c,g=n?g:!1);return g},findRows:function(r,i,l){if(r.config.lastCombinedFilter!==l&&r.config.widgetOptions.filter_initialized){var a,s,n,o,c,d,f,u,h,p,g,m,b,y,_,v,w,x,C,z,S,$,F=e.extend([],i),R=t.filter.regex,k=r.config,T=k.widgetOptions,A={anyMatch:!1,filters:i,filter_regexCache:[]},H={noAnyMatch:["range","notMatch","operators"],functions:[],excludeFilter:[],defaultColFilter:[],defaultAnyFilter:t.getColumnData(r,T.filter_defaultFilter,k.columns,!0)||""};for(A.parsed=k.$headers.map(function(i){return k.parsers&&k.parsers[i]&&k.parsers[i].parsed||t.getData&&"parsed"===t.getData(k.$headerIndexed[i],t.getColumnData(r,k.headers,i),"filter")||e(this).hasClass("filter-parsed")}).get(),u=0;u<k.columns;u++)H.functions[u]=t.getColumnData(r,T.filter_functions,u),H.defaultColFilter[u]=t.getColumnData(r,T.filter_defaultFilter,u)||"",H.excludeFilter[u]=(t.getColumnData(r,T.filter_excludeFilter,u,!0)||"").split(/\s+/);for(k.debug&&(t.log("Filter: Starting filter widget search",i),b=new Date),k.filteredRows=0,k.totalRows=0,l=(F||[]).join(""),d=0;d<k.$tbodies.length;d++){if(f=t.processTbody(r,k.$tbodies.eq(d),!0),u=k.columns,s=k.cache[d].normalized,o=e(e.map(s,function(e){return e[u].$row.get()})),""===l||T.filter_serversideFiltering)o.removeClass(T.filter_filteredRow).not("."+k.cssChildRow).css("display","");else{if(o=o.not("."+k.cssChildRow),a=o.length,(T.filter_$anyMatch&&T.filter_$anyMatch.length||"undefined"!=typeof i[k.columns])&&(A.anyMatchFlag=!0,A.anyMatchFilter=""+(i[k.columns]||T.filter_$anyMatch&&t.filter.getLatestSearch(T.filter_$anyMatch).val()||""),T.filter_columnAnyMatch)){for(x=A.anyMatchFilter.split(R.andSplit),C=!1,_=0;_<x.length;_++)z=x[_].split(":"),z.length>1&&(S=parseInt(z[0],10)-1,S>=0&&S<k.columns&&(i[S]=z[1],x.splice(_,1),_--,C=!0));C&&(A.anyMatchFilter=x.join(" && "))}if(w=T.filter_searchFiltered,g=k.lastSearch||k.$table.data("lastSearch")||[],w)for(_=0;u+1>_;_++)y=i[_]||"",w||(_=u),w=!(!w||!g.length||0!==y.indexOf(g[_]||"")||R.alreadyFiltered.test(y)||/[=\"\|!]/.test(y)||/(>=?\s*-\d)/.test(y)||/(<=?\s*\d)/.test(y)||""!==y&&k.$filters&&k.$filters.eq(_).find("select").length&&!k.$headerIndexed[_].hasClass("filter-match"));for(v=o.not("."+T.filter_filteredRow).length,w&&0===v&&(w=!1),k.debug&&t.log("Filter: Searching through "+(w&&a>v?v:"all")+" rows"),A.anyMatchFlag&&(k.sortLocaleCompare&&(A.anyMatchFilter=t.replaceAccents(A.anyMatchFilter)),T.filter_defaultFilter&&R.iQuery.test(H.defaultAnyFilter)&&(A.anyMatchFilter=t.filter.defaultFilter(A.anyMatchFilter,H.defaultAnyFilter),w=!1),A.iAnyMatchFilter=T.filter_ignoreCase&&k.ignoreCase?A.anyMatchFilter.toLowerCase():A.anyMatchFilter),c=0;a>c;c++)if($=o[c].className,h=c&&R.child.test($),!(h||w&&R.filtered.test($))){if(A.$row=o.eq(c),A.cacheArray=s[c],n=A.cacheArray[k.columns],A.rawArray=n.raw,A.childRowText="",!T.filter_childByColumn){for($="",p=n.child,_=0;_<p.length;_++)$+=" "+p[_].join("")||"";A.childRowText=T.filter_childRows?T.filter_ignoreCase?$.toLowerCase():$:""}if(m=t.filter.processRow(k,A,H),p=n.$row.filter(":gt( 0 )"),T.filter_childRows&&p.length){if(T.filter_childByColumn)for(_=0;_<p.length;_++)A.$row=p.eq(_),A.cacheArray=n.child[_],A.rawArray=A.cacheArray,m=m||t.filter.processRow(k,A,H);p.toggleClass(T.filter_filteredRow,!m)}n.$row.toggleClass(T.filter_filteredRow,!m)[0].display=m?"":"none"}}k.filteredRows+=o.not("."+T.filter_filteredRow).length,k.totalRows+=o.length,t.processTbody(r,f,!1)}k.lastCombinedFilter=l,k.lastSearch=F,k.$table.data("lastSearch",F),T.filter_saveFilters&&t.storage&&t.storage(r,"tablesorter-filters",F),k.debug&&t.benchmark("Completed filter widget search",b),T.filter_initialized&&k.$table.trigger("filterEnd",k),setTimeout(function(){k.$table.trigger("applyWidgets")},0)}},getOptionSource:function(r,i,l){r=e(r)[0];var a,s,n,o,c=r.config,d=c.widgetOptions,f=[],u=!1,h=d.filter_selectSource,p=c.$table.data("lastSearch")||[],g=e.isFunction(h)?!0:t.getColumnData(r,h,i);if(l&&""!==p[i]&&(l=!1),g===!0)u=h(r,i,l);else{if(g instanceof e||"string"===e.type(g)&&g.indexOf("</option>")>=0)return g;e.isArray(g)?u=g:"object"===e.type(h)&&g&&(u=g(r,i,l))}if(u===!1&&(u=t.filter.getOptions(r,i,l)),u=e.grep(u,function(t,r){return e.inArray(t,u)===r}),c.$headerIndexed[i].hasClass("filter-select-nosort"))return u;for(o=u.length,n=0;o>n;n++)s=u[n],f.push({t:s,p:c.parsers&&c.parsers.length&&c.parsers[i].format(s,r,[],i)||s});for(a=c.textSorter||"",f.sort(function(l,s){var n=l.p.toString(),o=s.p.toString();return e.isFunction(a)?a(n,o,!0,i,r):"object"==typeof a&&a.hasOwnProperty(i)?a[i](n,o,!0,i,r):t.sortNatural?t.sortNatural(n,o):!0}),u=[],o=f.length,n=0;o>n;n++)u.push(f[n].t);return u},getOptions:function(t,r,i){t=e(t)[0];var l,a,s,n,o,c=t.config,d=c.widgetOptions,f=[];for(a=0;a<c.$tbodies.length;a++)for(o=c.cache[a],s=c.cache[a].normalized.length,l=0;s>l;l++)n=o.row?o.row[l]:o.normalized[l][c.columns].$row[0],i&&n.className.match(d.filter_filteredRow)||f.push(d.filter_useParsedData||c.parsers[r].parsed||c.$headerIndexed[r].hasClass("filter-parsed")?""+o.normalized[l][r]:o.normalized[l][c.columns].raw[r]);return f},buildSelect:function(i,l,a,s,n){if(i=e(i)[0],l=parseInt(l,10),i.config.cache&&!e.isEmptyObject(i.config.cache)){var o,c,d,f,u,h,p=i.config,g=p.widgetOptions,m=p.$headerIndexed[l],b='<option value="">'+(m.data("placeholder")||m.attr("data-placeholder")||g.filter_placeholder.select||"")+"</option>",y=p.$table.find("thead").find("select."+r.filter+'[data-column="'+l+'"]').val();if(("undefined"==typeof a||""===a)&&(a=t.filter.getOptionSource(i,l,n)),e.isArray(a)){for(o=0;o<a.length;o++)d=a[o]=(""+a[o]).replace(/\"/g,"&quot;"),c=d,d.indexOf(g.filter_selectSourceSeparator)>=0&&(f=d.split(g.filter_selectSourceSeparator),c=f[0],d=f[1]),b+=""!==a[o]?"<option "+(c===d?"":'data-function-name="'+a[o]+'" ')+'value="'+c+'">'+d+"</option>":"";a=[]}u=(p.$filters?p.$filters:p.$table.children("thead")).find("."+r.filter),g.filter_$externalFilters&&(u=u&&u.length?u.add(g.filter_$externalFilters):g.filter_$externalFilters),h=u.filter('select[data-column="'+l+'"]'),h.length&&(h[s?"html":"append"](b),e.isArray(a)||h.append(a).val(y),h.val(y))}},buildDefault:function(e,r){var i,l,a,s=e.config,n=s.widgetOptions,o=s.columns;for(i=0;o>i;i++)l=s.$headerIndexed[i],a=!(l.hasClass("filter-false")||l.hasClass("parser-false")),(l.hasClass("filter-select")||t.getColumnData(e,n.filter_functions,i)===!0)&&a&&t.filter.buildSelect(e,i,"",r,l.hasClass(n.filter_onlyAvail))}},t.getFilters=function(i,l,a,s){var n,o,c,d,f=!1,u=i?e(i)[0].config:"",h=u?u.widgetOptions:"";if(l!==!0&&h&&!h.filter_columnFilters||e.isArray(a)&&a.join("")===u.lastCombinedFilter)return e(i).data("lastSearch");if(u&&(u.$filters&&(o=u.$filters.find("."+r.filter)),h.filter_$externalFilters&&(o=o&&o.length?o.add(h.filter_$externalFilters):h.filter_$externalFilters),o&&o.length))for(f=a||[],n=0;n<u.columns+1;n++)d=n===u.columns?h.filter_anyColumnSelector+","+h.filter_multipleColumnSelector:'[data-column="'+n+'"]',c=o.filter(d),c.length&&(c=t.filter.getLatestSearch(c),e.isArray(a)?(s&&c.length>1&&(c=c.slice(1)),n===u.columns&&(d=c.filter(h.filter_anyColumnSelector),c=d.length?d:c),c.val(a[n]).trigger("change.tsfilter")):(f[n]=c.val()||"",n===u.columns?c.slice(1).filter('[data-column*="'+c.attr("data-column")+'"]').val(f[n]):c.slice(1).val(f[n])),n===u.columns&&c.length&&(h.filter_$anyMatch=c)); return 0===f.length&&(f=!1),f},t.setFilters=function(r,i,l,a){var s=r?e(r)[0].config:"",n=t.getFilters(r,!0,i,a);return s&&l&&(s.lastCombinedFilter=null,s.lastSearch=[],t.filter.searching(s.table,i,a),s.$table.trigger("filterFomatterUpdate")),!!n}}(jQuery),function(e,t){"use strict";var r=e.tablesorter||{};e.extend(r.css,{sticky:"tablesorter-stickyHeader",stickyVis:"tablesorter-sticky-visible",stickyHide:"tablesorter-sticky-hidden",stickyWrap:"tablesorter-sticky-wrapper"}),r.addHeaderResizeEvent=function(t,r,i){if(t=e(t)[0],t.config){var l={timer:250},a=e.extend({},l,i),s=t.config,n=s.widgetOptions,o=function(e){var t,r,i,l,a,o,c=s.$headers.length;for(n.resize_flag=!0,r=[],t=0;c>t;t++)i=s.$headers.eq(t),l=i.data("savedSizes")||[0,0],a=i[0].offsetWidth,o=i[0].offsetHeight,(a!==l[0]||o!==l[1])&&(i.data("savedSizes",[a,o]),r.push(i[0]));r.length&&e!==!1&&s.$table.trigger("resize",[r]),n.resize_flag=!1};return o(!1),clearInterval(n.resize_timer),r?(n.resize_flag=!1,!1):void(n.resize_timer=setInterval(function(){n.resize_flag||o()},a.timer))}},r.addWidget({id:"stickyHeaders",priority:60,options:{stickyHeaders:"",stickyHeaders_attachTo:null,stickyHeaders_xScroll:null,stickyHeaders_yScroll:null,stickyHeaders_offset:0,stickyHeaders_filteredToTop:!0,stickyHeaders_cloneId:"-sticky",stickyHeaders_addResizeEvent:!0,stickyHeaders_includeCaption:!0,stickyHeaders_zIndex:2},format:function(i,l,a){if(!(l.$table.hasClass("hasStickyHeaders")||e.inArray("filter",l.widgets)>=0&&!l.$table.hasClass("hasFilters"))){var s,n,o,c,d=l.$table,f=e(a.stickyHeaders_attachTo),u=l.namespace+"stickyheaders ",h=e(a.stickyHeaders_yScroll||a.stickyHeaders_attachTo||t),p=e(a.stickyHeaders_xScroll||a.stickyHeaders_attachTo||t),g=d.children("thead:first"),m=g.children("tr").not(".sticky-false").children(),b=d.children("tfoot"),y=isNaN(a.stickyHeaders_offset)?e(a.stickyHeaders_offset):"",_=y.length?y.height()||0:parseInt(a.stickyHeaders_offset,10)||0,v=d.parent().closest("."+r.css.table).hasClass("hasStickyHeaders")?d.parent().closest("table.tablesorter")[0].config.widgetOptions.$sticky.parent():[],w=v.length?v.height():0,x=a.$sticky=d.clone().addClass("containsStickyHeaders "+r.css.sticky+" "+a.stickyHeaders+" "+l.namespace.slice(1)+"_extra_table").wrap('<div class="'+r.css.stickyWrap+'">'),C=x.parent().addClass(r.css.stickyHide).css({position:f.length?"absolute":"fixed",padding:parseInt(x.parent().parent().css("padding-left"),10),top:_+w,left:0,visibility:"hidden",zIndex:a.stickyHeaders_zIndex||2}),z=x.children("thead:first"),S="",$=0,F=function(e,r){var i,l,a,s,n,o=e.filter(":visible"),c=o.length;for(i=0;c>i;i++)s=r.filter(":visible").eq(i),n=o.eq(i),"border-box"===n.css("box-sizing")?l=n.outerWidth():"collapse"===s.css("border-collapse")?t.getComputedStyle?l=parseFloat(t.getComputedStyle(n[0],null).width):(a=parseFloat(n.css("border-width")),l=n.outerWidth()-parseFloat(n.css("padding-left"))-parseFloat(n.css("padding-right"))-a):l=n.width(),s.css({width:l,"min-width":l,"max-width":l})},R=function(){_=y.length?y.height()||0:parseInt(a.stickyHeaders_offset,10)||0,$=0,C.css({left:f.length?parseInt(f.css("padding-left"),10)||0:d.offset().left-parseInt(d.css("margin-left"),10)-p.scrollLeft()-$,width:d.outerWidth()}),F(d,x),F(m,c)},k=function(t){if(d.is(":visible")){w=v.length?v.offset().top-h.scrollTop()+v.height():0;var i=d.offset(),l=e.isWindow(h[0]),a=e.isWindow(p[0]),s=(f.length?l?h.scrollTop():h.offset().top:h.scrollTop())+_+w,n=d.height()-(C.height()+(b.height()||0)),o=s>i.top&&s<i.top+n?"visible":"hidden",c={visibility:o};f.length&&(c.top=l?s-f.offset().top:f.scrollTop()),a&&(c.left=d.offset().left-parseInt(d.css("margin-left"),10)-p.scrollLeft()-$),v.length&&(c.top=(c.top||0)+_+w),C.removeClass(r.css.stickyVis+" "+r.css.stickyHide).addClass("visible"===o?r.css.stickyVis:r.css.stickyHide).css(c),(o!==S||t)&&(R(),S=o)}};if(f.length&&!f.css("position")&&f.css("position","relative"),x.attr("id")&&(x[0].id+=a.stickyHeaders_cloneId),x.find("thead:gt(0), tr.sticky-false").hide(),x.find("tbody, tfoot").remove(),x.find("caption").toggle(a.stickyHeaders_includeCaption),c=z.children().children(),x.css({height:0,width:0,margin:0}),c.find("."+r.css.resizer).remove(),d.addClass("hasStickyHeaders").bind("pagerComplete"+u,function(){R()}),r.bindEvents(i,z.children().children("."+r.css.header)),d.after(C),l.onRenderHeader)for(o=z.children("tr").children(),n=o.length,s=0;n>s;s++)l.onRenderHeader.apply(o.eq(s),[s,l,x]);p.add(h).unbind("scroll resize ".split(" ").join(u).replace(/\s+/g," ")).bind("scroll resize ".split(" ").join(u),function(e){k("resize"===e.type)}),l.$table.unbind("stickyHeadersUpdate"+u).bind("stickyHeadersUpdate"+u,function(){k(!0)}),a.stickyHeaders_addResizeEvent&&r.addHeaderResizeEvent(i),d.hasClass("hasFilters")&&a.filter_columnFilters&&(d.bind("filterEnd"+u,function(){var i=e(document.activeElement).closest("td"),s=i.parent().children().index(i);C.hasClass(r.css.stickyVis)&&a.stickyHeaders_filteredToTop&&(t.scrollTo(0,d.position().top),s>=0&&l.$filters&&l.$filters.eq(s).find("a, select, input").filter(":visible").focus())}),r.filter.bindSearch(d,c.find("."+r.css.filter)),a.filter_hideFilters&&r.filter.hideFilters(x,l)),d.trigger("stickyHeadersInit")}},remove:function(i,l,a){var s=l.namespace+"stickyheaders ";l.$table.removeClass("hasStickyHeaders").unbind("pagerComplete filterEnd stickyHeadersUpdate ".split(" ").join(s).replace(/\s+/g," ")).next("."+r.css.stickyWrap).remove(),a.$sticky&&a.$sticky.length&&a.$sticky.remove(),e(t).add(a.stickyHeaders_xScroll).add(a.stickyHeaders_yScroll).add(a.stickyHeaders_attachTo).unbind("scroll resize ".split(" ").join(s).replace(/\s+/g," ")),r.addHeaderResizeEvent(i,!1)}})}(jQuery,window),function(e,t){"use strict";var r=e.tablesorter||{};e.extend(r.css,{resizableContainer:"tablesorter-resizable-container",resizableHandle:"tablesorter-resizable-handle",resizableNoSelect:"tablesorter-disableSelection",resizableStorage:"tablesorter-resizable"}),e(function(){var t="<style>body."+r.css.resizableNoSelect+" { -ms-user-select: none; -moz-user-select: -moz-none;-khtml-user-select: none; -webkit-user-select: none; user-select: none; }."+r.css.resizableContainer+" { position: relative; height: 1px; }."+r.css.resizableHandle+" { position: absolute; display: inline-block; width: 8px;top: 1px; cursor: ew-resize; z-index: 3; user-select: none; -moz-user-select: none; }</style>";e(t).appendTo("body")}),r.resizable={init:function(t,i){if(!t.$table.hasClass("hasResizable")){t.$table.addClass("hasResizable");var l,a,s,n,o,c=t.$table,d=c.parent(),f=parseInt(c.css("margin-top"),10),u=i.resizable_={useStorage:r.storage&&i.resizable!==!1,$wrap:d,mouseXPosition:0,$target:null,$next:null,overflow:"auto"===d.css("overflow")||"scroll"===d.css("overflow")||"auto"===d.css("overflow-x")||"scroll"===d.css("overflow-x"),storedSizes:[]};for(r.resizableReset(t.table,!0),u.tableWidth=c.width(),u.fullWidth=Math.abs(d.width()-u.tableWidth)<20,u.useStorage&&u.overflow&&(r.storage(t.table,"tablesorter-table-original-css-width",u.tableWidth),o=r.storage(t.table,"tablesorter-table-resized-width")||"auto",r.resizable.setWidth(c,o,!0)),i.resizable_.storedSizes=n=(u.useStorage?r.storage(t.table,r.css.resizableStorage):[])||[],r.resizable.setWidths(t,i,n),r.resizable.updateStoredSizes(t,i),i.$resizable_container=e('<div class="'+r.css.resizableContainer+'">').css({top:f}).insertBefore(c),s=0;s<t.columns;s++)a=t.$headerIndexed[s],o=r.getColumnData(t.table,t.headers,s),l="false"===r.getData(a,o,"resizable"),l||e('<div class="'+r.css.resizableHandle+'">').appendTo(i.$resizable_container).attr({"data-column":s,unselectable:"on"}).data("header",a).bind("selectstart",!1);c.one("tablesorter-initialized",function(){r.resizable.setHandlePosition(t,i),r.resizable.bindings(this.config,this.config.widgetOptions)})}},updateStoredSizes:function(e,t){var r,i,l=e.columns,a=t.resizable_;for(a.storedSizes=[],r=0;l>r;r++)i=e.$headerIndexed[r],a.storedSizes[r]=i.is(":visible")?i.width():0},setWidth:function(e,t,r){e.css({width:t,"min-width":r?t:"","max-width":r?t:""})},setWidths:function(t,i,l){var a,s,n=i.resizable_,o=e(t.namespace+"_extra_headers"),c=t.$table.children("colgroup").children("col");if(l=l||n.storedSizes||[],l.length){for(a=0;a<t.columns;a++)r.resizable.setWidth(t.$headerIndexed[a],l[a],n.overflow),o.length&&(s=o.eq(a).add(c.eq(a)),r.resizable.setWidth(s,l[a],n.overflow));s=e(t.namespace+"_extra_table"),s.length&&!r.hasWidget(t.table,"scroller")&&r.resizable.setWidth(s,t.$table.outerWidth(),n.overflow)}},setHandlePosition:function(t,i){var l,a=r.hasWidget(t.table,"scroller"),s=t.$table.height(),n=i.$resizable_container.children(),o=Math.floor(n.width()/2);a&&(s=0,t.$table.closest("."+r.css.scrollerWrap).children().each(function(){var t=e(this);s+=t.filter('[style*="height"]').length?t.height():t.children("table").height()})),l=t.$table.position().left,n.each(function(){var r=e(this),a=parseInt(r.attr("data-column"),10),n=t.columns-1,c=r.data("header");c&&(c.is(":visible")?(n>a||a===n&&i.resizable_addLastColumn)&&r.css({display:"inline-block",height:s,left:c.position().left-l+c.outerWidth()-o}):r.hide())})},toggleTextSelection:function(t,i){var l=t.namespace+"tsresize";t.widgetOptions.resizable_.disabled=i,e("body").toggleClass(r.css.resizableNoSelect,i),i?e("body").attr("unselectable","on").bind("selectstart"+l,!1):e("body").removeAttr("unselectable").unbind("selectstart"+l)},bindings:function(i,l){var a=i.namespace+"tsresize";l.$resizable_container.children().bind("mousedown",function(t){var a,s=l.resizable_,n=e(i.namespace+"_extra_headers"),o=e(t.target).data("header");a=parseInt(o.attr("data-column"),10),s.$target=o=o.add(n.filter('[data-column="'+a+'"]')),s.target=a,s.$next=t.shiftKey||l.resizable_targetLast?o.parent().children().not(".resizable-false").filter(":last"):o.nextAll(":not(.resizable-false)").eq(0),a=parseInt(s.$next.attr("data-column"),10),s.$next=s.$next.add(n.filter('[data-column="'+a+'"]')),s.next=a,s.mouseXPosition=t.pageX,r.resizable.updateStoredSizes(i,l),r.resizable.toggleTextSelection(i,!0)}),e(document).bind("mousemove"+a,function(e){var t=l.resizable_;t.disabled&&0!==t.mouseXPosition&&t.$target&&(l.resizable_throttle?(clearTimeout(t.timer),t.timer=setTimeout(function(){r.resizable.mouseMove(i,l,e)},isNaN(l.resizable_throttle)?5:l.resizable_throttle)):r.resizable.mouseMove(i,l,e))}).bind("mouseup"+a,function(){l.resizable_.disabled&&(r.resizable.toggleTextSelection(i,!1),r.resizable.stopResize(i,l),r.resizable.setHandlePosition(i,l))}),e(t).bind("resize"+a+" resizeEnd"+a,function(){r.resizable.setHandlePosition(i,l)}),i.$table.bind("columnUpdate"+a,function(){r.resizable.setHandlePosition(i,l)}).find("thead:first").add(e(i.namespace+"_extra_table").find("thead:first")).bind("contextmenu"+a,function(){var e=0===l.resizable_.storedSizes.length;return r.resizableReset(i.table),r.resizable.setHandlePosition(i,l),l.resizable_.storedSizes=[],e})},mouseMove:function(t,i,l){if(0!==i.resizable_.mouseXPosition&&i.resizable_.$target){var a,s=0,n=i.resizable_,o=n.$next,c=n.storedSizes[n.target],d=l.pageX-n.mouseXPosition;if(n.overflow){if(c+d>0){for(n.storedSizes[n.target]+=d,r.resizable.setWidth(n.$target,n.storedSizes[n.target],!0),a=0;a<t.columns;a++)s+=n.storedSizes[a];r.resizable.setWidth(t.$table.add(e(t.namespace+"_extra_table")),s)}o.length||(n.$wrap[0].scrollLeft=t.$table.width())}else n.fullWidth?(n.storedSizes[n.target]+=d,n.storedSizes[n.next]-=d,r.resizable.setWidths(t,i)):(n.storedSizes[n.target]+=d,r.resizable.setWidths(t,i));n.mouseXPosition=l.pageX,t.$table.trigger("stickyHeadersUpdate")}},stopResize:function(e,t){var i=t.resizable_;r.resizable.updateStoredSizes(e,t),i.useStorage&&(r.storage(e.table,r.css.resizableStorage,i.storedSizes),r.storage(e.table,"tablesorter-table-resized-width",e.$table.width())),i.mouseXPosition=0,i.$target=i.$next=null,e.$table.trigger("stickyHeadersUpdate")}},r.addWidget({id:"resizable",priority:40,options:{resizable:!0,resizable_addLastColumn:!1,resizable_widths:[],resizable_throttle:!1,resizable_targetLast:!1,resizable_fullWidth:null},init:function(e,t,i,l){r.resizable.init(i,l)},remove:function(t,i,l,a){if(l.$resizable_container){var s=i.namespace+"tsresize";i.$table.add(e(i.namespace+"_extra_table")).removeClass("hasResizable").children("thead").unbind("contextmenu"+s),l.$resizable_container.remove(),r.resizable.toggleTextSelection(i,!1),r.resizableReset(t,a),e(document).unbind("mousemove"+s+" mouseup"+s)}}}),r.resizableReset=function(t,i){e(t).each(function(){var e,l,a=this.config,s=a&&a.widgetOptions,n=s.resizable_;if(t&&a&&a.$headerIndexed.length){for(n.overflow&&n.tableWidth&&(r.resizable.setWidth(a.$table,n.tableWidth,!0),n.useStorage&&r.storage(t,"tablesorter-table-resized-width","auto")),e=0;e<a.columns;e++)l=a.$headerIndexed[e],s.resizable_widths&&s.resizable_widths[e]?r.resizable.setWidth(l,s.resizable_widths[e],n.overflow):l.hasClass("resizable-false")||r.resizable.setWidth(l,"",n.overflow);a.$table.trigger("stickyHeadersUpdate"),r.storage&&!i&&r.storage(this,r.css.resizableStorage,{})}})}}(jQuery,window),function(e){"use strict";var t=e.tablesorter||{};t.addWidget({id:"saveSort",priority:20,options:{saveSort:!0},init:function(e,t,r,i){t.format(e,r,i,!0)},format:function(r,i,l,a){var s,n,o=i.$table,c=l.saveSort!==!1,d={sortList:i.sortList};i.debug&&(n=new Date),o.hasClass("hasSaveSort")?c&&r.hasInitialized&&t.storage&&(t.storage(r,"tablesorter-savesort",d),i.debug&&t.benchmark("saveSort widget: Saving last sort: "+i.sortList,n)):(o.addClass("hasSaveSort"),d="",t.storage&&(s=t.storage(r,"tablesorter-savesort"),d=s&&s.hasOwnProperty("sortList")&&e.isArray(s.sortList)?s.sortList:"",i.debug&&t.benchmark('saveSort: Last sort loaded: "'+d+'"',n),o.bind("saveSortReset",function(e){e.stopPropagation(),t.storage(r,"tablesorter-savesort","")})),a&&d&&d.length>0?i.sortList=d:r.hasInitialized&&d&&d.length>0&&o.trigger("sorton",[d]))},remove:function(e,r){r.$table.removeClass("hasSaveSort"),t.storage&&t.storage(e,"tablesorter-savesort","")}})}(jQuery),e.tablesorter}); /* custom */ $(document).ready(function(){$('.table-sortable').tablesorter({theme:'bootstrap',widgets:['uitheme','zebra','filter','stickyHeaders','saveSort'],headerTemplate:'{content} {icon}',widthFixed:true,ignoreCase:true,widgetOptions:{filter_columnFilters:true,zebra:['even','odd'],filter_reset:'.reset'}});}); \ No newline at end of file
diff --git a/ya.bat b/ya.bat
index dc6eba5aed..4e897c1045 100755
--- a/ya.bat
+++ b/ya.bat
@@ -1,86 +1,86 @@
-@echo off
-rem Ya Simple Windows launcher
-setlocal
-call :dbg Ya Simple Windows Launcher (Debug)
-call :find_ya
-if ERRORLEVEL 1 exit /b 1
-call :dbg Ya: %YA_BAT_REAL%
-call :fix_env
-call :find_python
-if ERRORLEVEL 1 exit /b 1
-call :dbg Python: "%YA_BAT_PYTHON%"
-call "%YA_BAT_PYTHON%" "%YA_BAT_REAL%" %*
-exit /b %ERRORLEVEL%
-
-:find_ya
-call :dbg Searching for ya near ya.bat...
-set YA_BAT_REAL=%~dp0ya
-if exist "%YA_BAT_REAL%" exit /b 0
-call :err Ya not found
-exit /b 1
-
-:fix_env
-call :dbg Fixing environment...
-for /f "delims=: tokens=2" %%F in ('chcp') do (
- if "%%F" == " 65001" (
- call :dbg -- Forcing I/O encoding for python: utf-8
- set PYTHONIOENCODING=utf-8
- )
-)
-exit /b 0
-
-:find_python
-call :dbg Searching for python in PATH...
-for /f "delims=" %%F in ('where python 2^>nul') do (
- call :test_python %%~sF
- if not ERRORLEVEL 1 (
- set YA_BAT_PYTHON=%%F
- exit /b 0
- )
-)
-call :dbg Searching for python in ftypes...
-for /f delims^=^=^"^ tokens^=2 %%F in ('ftype Python.File 2^>nul') do (
- call :test_python %%F
- if not ERRORLEVEL 1 (
- set YA_BAT_PYTHON=%%F
- exit /b 0
- )
-)
-call :dbg Searching for python manually...
-for %%F in (
- C:\Python27\python.exe
- C:\Python26\python.exe
-) do (
- call :test_python %%F
- if not ERRORLEVEL 1 (
- set YA_BAT_PYTHON=%%F
- exit /b 0
- )
-)
-call :err Python not found
-exit /b 1
-
-:test_python
-call :dbg -- Checking python: %1
-if not exist %1 (
- call :dbg ---- Not found
- exit /b 1
-)
-for /f %%P in ('%1 -c "import os, sys; sys.stdout.write(os.name + '\n')" 2^>nul') do set YA_BAT_PYTHON_PLATFORM=%%P
-if not defined YA_BAT_PYTHON_PLATFORM (
- call :dbg ---- Not runnable
- exit /b 2
-)
-if not "%YA_BAT_PYTHON_PLATFORM%"=="nt" (
- call :dbg ---- Non-windows: %YA_BAT_PYTHON_PLATFORM%
- exit /b 3
-)
-exit /b 0
-
-:dbg
-if defined YA_BAT_DEBUG echo [ya.bat] %* 1>&2
-exit /b 0
-
-:err
-echo [ya.bat] Error: %* 1>&2
-exit /b 0
+@echo off
+rem Ya Simple Windows launcher
+setlocal
+call :dbg Ya Simple Windows Launcher (Debug)
+call :find_ya
+if ERRORLEVEL 1 exit /b 1
+call :dbg Ya: %YA_BAT_REAL%
+call :fix_env
+call :find_python
+if ERRORLEVEL 1 exit /b 1
+call :dbg Python: "%YA_BAT_PYTHON%"
+call "%YA_BAT_PYTHON%" "%YA_BAT_REAL%" %*
+exit /b %ERRORLEVEL%
+
+:find_ya
+call :dbg Searching for ya near ya.bat...
+set YA_BAT_REAL=%~dp0ya
+if exist "%YA_BAT_REAL%" exit /b 0
+call :err Ya not found
+exit /b 1
+
+:fix_env
+call :dbg Fixing environment...
+for /f "delims=: tokens=2" %%F in ('chcp') do (
+ if "%%F" == " 65001" (
+ call :dbg -- Forcing I/O encoding for python: utf-8
+ set PYTHONIOENCODING=utf-8
+ )
+)
+exit /b 0
+
+:find_python
+call :dbg Searching for python in PATH...
+for /f "delims=" %%F in ('where python 2^>nul') do (
+ call :test_python %%~sF
+ if not ERRORLEVEL 1 (
+ set YA_BAT_PYTHON=%%F
+ exit /b 0
+ )
+)
+call :dbg Searching for python in ftypes...
+for /f delims^=^=^"^ tokens^=2 %%F in ('ftype Python.File 2^>nul') do (
+ call :test_python %%F
+ if not ERRORLEVEL 1 (
+ set YA_BAT_PYTHON=%%F
+ exit /b 0
+ )
+)
+call :dbg Searching for python manually...
+for %%F in (
+ C:\Python27\python.exe
+ C:\Python26\python.exe
+) do (
+ call :test_python %%F
+ if not ERRORLEVEL 1 (
+ set YA_BAT_PYTHON=%%F
+ exit /b 0
+ )
+)
+call :err Python not found
+exit /b 1
+
+:test_python
+call :dbg -- Checking python: %1
+if not exist %1 (
+ call :dbg ---- Not found
+ exit /b 1
+)
+for /f %%P in ('%1 -c "import os, sys; sys.stdout.write(os.name + '\n')" 2^>nul') do set YA_BAT_PYTHON_PLATFORM=%%P
+if not defined YA_BAT_PYTHON_PLATFORM (
+ call :dbg ---- Not runnable
+ exit /b 2
+)
+if not "%YA_BAT_PYTHON_PLATFORM%"=="nt" (
+ call :dbg ---- Non-windows: %YA_BAT_PYTHON_PLATFORM%
+ exit /b 3
+)
+exit /b 0
+
+:dbg
+if defined YA_BAT_DEBUG echo [ya.bat] %* 1>&2
+exit /b 0
+
+:err
+echo [ya.bat] Error: %* 1>&2
+exit /b 0
diff --git a/ydb/library/yql/parser/pg_query_wrapper/outfuncs.c b/ydb/library/yql/parser/pg_query_wrapper/outfuncs.c
index 10f59d6551..66fd9a38d7 100644
--- a/ydb/library/yql/parser/pg_query_wrapper/outfuncs.c
+++ b/ydb/library/yql/parser/pg_query_wrapper/outfuncs.c
@@ -1,4404 +1,4404 @@
-/*-------------------------------------------------------------------------
- *
- * outfuncs.c
- * Output functions for Postgres tree nodes.
- *
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- * src/backend/nodes/outfuncs.c
- *
- * NOTES
- * Every node type that can appear in stored rules' parsetrees *must*
- * have an output function defined here (as well as an input function
- * in readfuncs.c). In addition, plan nodes should have input and
- * output functions so that they can be sent to parallel workers.
- *
- * For use in debugging, we also provide output functions for nodes
- * that appear in raw parsetrees and planner Paths. These node types
- * need not have input functions. Output support for raw parsetrees
- * is somewhat incomplete, too; in particular, utility statements are
- * almost entirely unsupported. We try to support everything that can
- * appear in a raw SELECT, though.
- *
- *-------------------------------------------------------------------------
- */
-#include "postgres.h"
-
-#include <ctype.h>
-
-#include "lib/stringinfo.h"
-#include "miscadmin.h"
-#include "nodes/extensible.h"
-#include "nodes/pathnodes.h"
-#include "nodes/plannodes.h"
-#include "utils/datum.h"
-#include "utils/rel.h"
-
-static void outChar(StringInfo str, char c);
-
-
-/*
- * Macros to simplify output of different kinds of fields. Use these
- * wherever possible to reduce the chance for silly typos. Note that these
- * hard-wire conventions about the names of the local variables in an Out
- * routine.
- */
-
-/* Write the label for the node type */
-#define WRITE_NODE_TYPE(nodelabel) \
- appendStringInfoString(str, nodelabel)
-
-/* Write an integer field (anything written as ":fldname %d") */
-#define WRITE_INT_FIELD(fldname) \
- appendStringInfo(str, " :" CppAsString(fldname) " %d", node->fldname)
-
-/* Write an unsigned integer field (anything written as ":fldname %u") */
-#define WRITE_UINT_FIELD(fldname) \
- appendStringInfo(str, " :" CppAsString(fldname) " %u", node->fldname)
-
-/* Write an unsigned integer field (anything written with UINT64_FORMAT) */
-#define WRITE_UINT64_FIELD(fldname) \
- appendStringInfo(str, " :" CppAsString(fldname) " " UINT64_FORMAT, \
- node->fldname)
-
-/* Write an OID field (don't hard-wire assumption that OID is same as uint) */
-#define WRITE_OID_FIELD(fldname) \
- appendStringInfo(str, " :" CppAsString(fldname) " %u", node->fldname)
-
-/* Write a long-integer field */
-#define WRITE_LONG_FIELD(fldname) \
- appendStringInfo(str, " :" CppAsString(fldname) " %ld", node->fldname)
-
-/* Write a char field (ie, one ascii character) */
-#define WRITE_CHAR_FIELD(fldname) \
- (appendStringInfo(str, " :" CppAsString(fldname) " "), \
- outChar(str, node->fldname))
-
-/* Write an enumerated-type field as an integer code */
-#define WRITE_ENUM_FIELD(fldname, enumtype) \
- appendStringInfo(str, " :" CppAsString(fldname) " %d", \
- (int) node->fldname)
-
-/* Write a float field --- caller must give format to define precision */
-#define WRITE_FLOAT_FIELD(fldname,format) \
- appendStringInfo(str, " :" CppAsString(fldname) " " format, node->fldname)
-
-/* Write a boolean field */
-#define WRITE_BOOL_FIELD(fldname) \
- appendStringInfo(str, " :" CppAsString(fldname) " %s", \
- booltostr(node->fldname))
-
-/* Write a character-string (possibly NULL) field */
-#define WRITE_STRING_FIELD(fldname) \
- (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
- outToken(str, node->fldname))
-
-/* Write a parse location field (actually same as INT case) */
-#define WRITE_LOCATION_FIELD(fldname) \
- appendStringInfo(str, " :" CppAsString(fldname) " %d", node->fldname)
-
-/* Write a Node field */
-#define WRITE_NODE_FIELD(fldname) \
- (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
- outNode(str, node->fldname))
-
-/* Write a bitmapset field */
-#define WRITE_BITMAPSET_FIELD(fldname) \
- (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
- outBitmapset(str, node->fldname))
-
-#define WRITE_ATTRNUMBER_ARRAY(fldname, len) \
- do { \
- appendStringInfoString(str, " :" CppAsString(fldname) " "); \
- for (int i = 0; i < len; i++) \
- appendStringInfo(str, " %d", node->fldname[i]); \
- } while(0)
-
-#define WRITE_OID_ARRAY(fldname, len) \
- do { \
- appendStringInfoString(str, " :" CppAsString(fldname) " "); \
- for (int i = 0; i < len; i++) \
- appendStringInfo(str, " %u", node->fldname[i]); \
- } while(0)
-
-#define WRITE_INT_ARRAY(fldname, len) \
- do { \
- appendStringInfoString(str, " :" CppAsString(fldname) " "); \
- for (int i = 0; i < len; i++) \
- appendStringInfo(str, " %d", node->fldname[i]); \
- } while(0)
-
-#define WRITE_BOOL_ARRAY(fldname, len) \
- do { \
- appendStringInfoString(str, " :" CppAsString(fldname) " "); \
- for (int i = 0; i < len; i++) \
- appendStringInfo(str, " %s", booltostr(node->fldname[i])); \
- } while(0)
-
-
-#define booltostr(x) ((x) ? "true" : "false")
-
-
-/*
- * outToken
- * Convert an ordinary string (eg, an identifier) into a form that
- * will be decoded back to a plain token by read.c's functions.
- *
- * If a null or empty string is given, it is encoded as "<>".
- */
-void
-outToken(StringInfo str, const char *s)
-{
- if (s == NULL || *s == '\0')
- {
- appendStringInfoString(str, "<>");
- return;
- }
-
- /*
- * Look for characters or patterns that are treated specially by read.c
- * (either in pg_strtok() or in nodeRead()), and therefore need a
- * protective backslash.
- */
- /* These characters only need to be quoted at the start of the string */
- if (*s == '<' ||
- *s == '"' ||
- isdigit((unsigned char) *s) ||
- ((*s == '+' || *s == '-') &&
- (isdigit((unsigned char) s[1]) || s[1] == '.')))
- appendStringInfoChar(str, '\\');
- while (*s)
- {
- /* These chars must be backslashed anywhere in the string */
- if (*s == ' ' || *s == '\n' || *s == '\t' ||
- *s == '(' || *s == ')' || *s == '{' || *s == '}' ||
- *s == '\\')
- appendStringInfoChar(str, '\\');
- appendStringInfoChar(str, *s++);
- }
-}
-
-/*
- * Convert one char. Goes through outToken() so that special characters are
- * escaped.
- */
-static void
-outChar(StringInfo str, char c)
-{
- char in[2];
-
- in[0] = c;
- in[1] = '\0';
-
- outToken(str, in);
-}
-
-static void
-_outList(StringInfo str, const List *node)
-{
- const ListCell *lc;
-
- appendStringInfoChar(str, '(');
-
- if (IsA(node, IntList))
- appendStringInfoChar(str, 'i');
- else if (IsA(node, OidList))
- appendStringInfoChar(str, 'o');
-
- foreach(lc, node)
- {
- /*
- * For the sake of backward compatibility, we emit a slightly
- * different whitespace format for lists of nodes vs. other types of
- * lists. XXX: is this necessary?
- */
- if (IsA(node, List))
- {
- outNode(str, lfirst(lc));
- if (lnext(node, lc))
- appendStringInfoChar(str, ' ');
- }
- else if (IsA(node, IntList))
- appendStringInfo(str, " %d", lfirst_int(lc));
- else if (IsA(node, OidList))
- appendStringInfo(str, " %u", lfirst_oid(lc));
- else
- elog(ERROR, "unrecognized list node type: %d",
- (int) node->type);
- }
-
- appendStringInfoChar(str, ')');
-}
-
-/*
- * outBitmapset -
- * converts a bitmap set of integers
- *
- * Note: the output format is "(b int int ...)", similar to an integer List.
- */
-void
-outBitmapset(StringInfo str, const Bitmapset *bms)
-{
- int x;
-
- appendStringInfoChar(str, '(');
- appendStringInfoChar(str, 'b');
- x = -1;
- while ((x = bms_next_member(bms, x)) >= 0)
- appendStringInfo(str, " %d", x);
- appendStringInfoChar(str, ')');
-}
-
-/*
- * Print the value of a Datum given its type.
- */
-void
-outDatum(StringInfo str, Datum value, int typlen, bool typbyval)
-{
- Size length,
- i;
- char *s;
-
- length = datumGetSize(value, typbyval, typlen);
-
- if (typbyval)
- {
- s = (char *) (&value);
- appendStringInfo(str, "%u [ ", (unsigned int) length);
- for (i = 0; i < (Size) sizeof(Datum); i++)
- appendStringInfo(str, "%d ", (int) (s[i]));
- appendStringInfoChar(str, ']');
- }
- else
- {
- s = (char *) DatumGetPointer(value);
- if (!PointerIsValid(s))
- appendStringInfoString(str, "0 [ ]");
- else
- {
- appendStringInfo(str, "%u [ ", (unsigned int) length);
- for (i = 0; i < length; i++)
- appendStringInfo(str, "%d ", (int) (s[i]));
- appendStringInfoChar(str, ']');
- }
- }
-}
-
-
-/*
- * Stuff from plannodes.h
- */
-
-static void
-_outPlannedStmt(StringInfo str, const PlannedStmt *node)
-{
- WRITE_NODE_TYPE("PLANNEDSTMT");
-
- WRITE_ENUM_FIELD(commandType, CmdType);
- WRITE_UINT64_FIELD(queryId);
- WRITE_BOOL_FIELD(hasReturning);
- WRITE_BOOL_FIELD(hasModifyingCTE);
- WRITE_BOOL_FIELD(canSetTag);
- WRITE_BOOL_FIELD(transientPlan);
- WRITE_BOOL_FIELD(dependsOnRole);
- WRITE_BOOL_FIELD(parallelModeNeeded);
- WRITE_INT_FIELD(jitFlags);
- WRITE_NODE_FIELD(planTree);
- WRITE_NODE_FIELD(rtable);
- WRITE_NODE_FIELD(resultRelations);
- WRITE_NODE_FIELD(rootResultRelations);
- WRITE_NODE_FIELD(appendRelations);
- WRITE_NODE_FIELD(subplans);
- WRITE_BITMAPSET_FIELD(rewindPlanIDs);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_NODE_FIELD(relationOids);
- WRITE_NODE_FIELD(invalItems);
- WRITE_NODE_FIELD(paramExecTypes);
- WRITE_NODE_FIELD(utilityStmt);
- WRITE_LOCATION_FIELD(stmt_location);
- WRITE_INT_FIELD(stmt_len);
-}
-
-/*
- * print the basic stuff of all nodes that inherit from Plan
- */
-static void
-_outPlanInfo(StringInfo str, const Plan *node)
-{
- WRITE_FLOAT_FIELD(startup_cost, "%.2f");
- WRITE_FLOAT_FIELD(total_cost, "%.2f");
- WRITE_FLOAT_FIELD(plan_rows, "%.0f");
- WRITE_INT_FIELD(plan_width);
- WRITE_BOOL_FIELD(parallel_aware);
- WRITE_BOOL_FIELD(parallel_safe);
- WRITE_INT_FIELD(plan_node_id);
- WRITE_NODE_FIELD(targetlist);
- WRITE_NODE_FIELD(qual);
- WRITE_NODE_FIELD(lefttree);
- WRITE_NODE_FIELD(righttree);
- WRITE_NODE_FIELD(initPlan);
- WRITE_BITMAPSET_FIELD(extParam);
- WRITE_BITMAPSET_FIELD(allParam);
-}
-
-/*
- * print the basic stuff of all nodes that inherit from Scan
- */
-static void
-_outScanInfo(StringInfo str, const Scan *node)
-{
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_UINT_FIELD(scanrelid);
-}
-
-/*
- * print the basic stuff of all nodes that inherit from Join
- */
-static void
-_outJoinPlanInfo(StringInfo str, const Join *node)
-{
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_ENUM_FIELD(jointype, JoinType);
- WRITE_BOOL_FIELD(inner_unique);
- WRITE_NODE_FIELD(joinqual);
-}
-
-
-static void
-_outPlan(StringInfo str, const Plan *node)
-{
- WRITE_NODE_TYPE("PLAN");
-
- _outPlanInfo(str, (const Plan *) node);
-}
-
-static void
-_outResult(StringInfo str, const Result *node)
-{
- WRITE_NODE_TYPE("RESULT");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_NODE_FIELD(resconstantqual);
-}
-
-static void
-_outProjectSet(StringInfo str, const ProjectSet *node)
-{
- WRITE_NODE_TYPE("PROJECTSET");
-
- _outPlanInfo(str, (const Plan *) node);
-}
-
-static void
-_outModifyTable(StringInfo str, const ModifyTable *node)
-{
- WRITE_NODE_TYPE("MODIFYTABLE");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_ENUM_FIELD(operation, CmdType);
- WRITE_BOOL_FIELD(canSetTag);
- WRITE_UINT_FIELD(nominalRelation);
- WRITE_UINT_FIELD(rootRelation);
- WRITE_BOOL_FIELD(partColsUpdated);
- WRITE_NODE_FIELD(resultRelations);
- WRITE_INT_FIELD(resultRelIndex);
- WRITE_INT_FIELD(rootResultRelIndex);
- WRITE_NODE_FIELD(plans);
- WRITE_NODE_FIELD(withCheckOptionLists);
- WRITE_NODE_FIELD(returningLists);
- WRITE_NODE_FIELD(fdwPrivLists);
- WRITE_BITMAPSET_FIELD(fdwDirectModifyPlans);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_INT_FIELD(epqParam);
- WRITE_ENUM_FIELD(onConflictAction, OnConflictAction);
- WRITE_NODE_FIELD(arbiterIndexes);
- WRITE_NODE_FIELD(onConflictSet);
- WRITE_NODE_FIELD(onConflictWhere);
- WRITE_UINT_FIELD(exclRelRTI);
- WRITE_NODE_FIELD(exclRelTlist);
-}
-
-static void
-_outAppend(StringInfo str, const Append *node)
-{
- WRITE_NODE_TYPE("APPEND");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_BITMAPSET_FIELD(apprelids);
- WRITE_NODE_FIELD(appendplans);
- WRITE_INT_FIELD(first_partial_plan);
- WRITE_NODE_FIELD(part_prune_info);
-}
-
-static void
-_outMergeAppend(StringInfo str, const MergeAppend *node)
-{
- WRITE_NODE_TYPE("MERGEAPPEND");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_BITMAPSET_FIELD(apprelids);
- WRITE_NODE_FIELD(mergeplans);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numCols);
- WRITE_OID_ARRAY(sortOperators, node->numCols);
- WRITE_OID_ARRAY(collations, node->numCols);
- WRITE_BOOL_ARRAY(nullsFirst, node->numCols);
- WRITE_NODE_FIELD(part_prune_info);
-}
-
-static void
-_outRecursiveUnion(StringInfo str, const RecursiveUnion *node)
-{
- WRITE_NODE_TYPE("RECURSIVEUNION");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_INT_FIELD(wtParam);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(dupColIdx, node->numCols);
- WRITE_OID_ARRAY(dupOperators, node->numCols);
- WRITE_OID_ARRAY(dupCollations, node->numCols);
- WRITE_LONG_FIELD(numGroups);
-}
-
-static void
-_outBitmapAnd(StringInfo str, const BitmapAnd *node)
-{
- WRITE_NODE_TYPE("BITMAPAND");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_NODE_FIELD(bitmapplans);
-}
-
-static void
-_outBitmapOr(StringInfo str, const BitmapOr *node)
-{
- WRITE_NODE_TYPE("BITMAPOR");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_BOOL_FIELD(isshared);
- WRITE_NODE_FIELD(bitmapplans);
-}
-
-static void
-_outGather(StringInfo str, const Gather *node)
-{
- WRITE_NODE_TYPE("GATHER");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_INT_FIELD(num_workers);
- WRITE_INT_FIELD(rescan_param);
- WRITE_BOOL_FIELD(single_copy);
- WRITE_BOOL_FIELD(invisible);
- WRITE_BITMAPSET_FIELD(initParam);
-}
-
-static void
-_outGatherMerge(StringInfo str, const GatherMerge *node)
-{
- WRITE_NODE_TYPE("GATHERMERGE");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_INT_FIELD(num_workers);
- WRITE_INT_FIELD(rescan_param);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numCols);
- WRITE_OID_ARRAY(sortOperators, node->numCols);
- WRITE_OID_ARRAY(collations, node->numCols);
- WRITE_BOOL_ARRAY(nullsFirst, node->numCols);
- WRITE_BITMAPSET_FIELD(initParam);
-}
-
-static void
-_outScan(StringInfo str, const Scan *node)
-{
- WRITE_NODE_TYPE("SCAN");
-
- _outScanInfo(str, node);
-}
-
-static void
-_outSeqScan(StringInfo str, const SeqScan *node)
-{
- WRITE_NODE_TYPE("SEQSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-}
-
-static void
-_outSampleScan(StringInfo str, const SampleScan *node)
-{
- WRITE_NODE_TYPE("SAMPLESCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_NODE_FIELD(tablesample);
-}
-
-static void
-_outIndexScan(StringInfo str, const IndexScan *node)
-{
- WRITE_NODE_TYPE("INDEXSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_OID_FIELD(indexid);
- WRITE_NODE_FIELD(indexqual);
- WRITE_NODE_FIELD(indexqualorig);
- WRITE_NODE_FIELD(indexorderby);
- WRITE_NODE_FIELD(indexorderbyorig);
- WRITE_NODE_FIELD(indexorderbyops);
- WRITE_ENUM_FIELD(indexorderdir, ScanDirection);
-}
-
-static void
-_outIndexOnlyScan(StringInfo str, const IndexOnlyScan *node)
-{
- WRITE_NODE_TYPE("INDEXONLYSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_OID_FIELD(indexid);
- WRITE_NODE_FIELD(indexqual);
- //WRITE_NODE_FIELD(recheckqual);
- WRITE_NODE_FIELD(indexorderby);
- WRITE_NODE_FIELD(indextlist);
- WRITE_ENUM_FIELD(indexorderdir, ScanDirection);
-}
-
-static void
-_outBitmapIndexScan(StringInfo str, const BitmapIndexScan *node)
-{
- WRITE_NODE_TYPE("BITMAPINDEXSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_OID_FIELD(indexid);
- WRITE_BOOL_FIELD(isshared);
- WRITE_NODE_FIELD(indexqual);
- WRITE_NODE_FIELD(indexqualorig);
-}
-
-static void
-_outBitmapHeapScan(StringInfo str, const BitmapHeapScan *node)
-{
- WRITE_NODE_TYPE("BITMAPHEAPSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_NODE_FIELD(bitmapqualorig);
-}
-
-static void
-_outTidScan(StringInfo str, const TidScan *node)
-{
- WRITE_NODE_TYPE("TIDSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_NODE_FIELD(tidquals);
-}
-
-static void
-_outSubqueryScan(StringInfo str, const SubqueryScan *node)
-{
- WRITE_NODE_TYPE("SUBQUERYSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_NODE_FIELD(subplan);
-}
-
-static void
-_outFunctionScan(StringInfo str, const FunctionScan *node)
-{
- WRITE_NODE_TYPE("FUNCTIONSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_NODE_FIELD(functions);
- WRITE_BOOL_FIELD(funcordinality);
-}
-
-static void
-_outTableFuncScan(StringInfo str, const TableFuncScan *node)
-{
- WRITE_NODE_TYPE("TABLEFUNCSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_NODE_FIELD(tablefunc);
-}
-
-static void
-_outValuesScan(StringInfo str, const ValuesScan *node)
-{
- WRITE_NODE_TYPE("VALUESSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_NODE_FIELD(values_lists);
-}
-
-static void
-_outCteScan(StringInfo str, const CteScan *node)
-{
- WRITE_NODE_TYPE("CTESCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_INT_FIELD(ctePlanId);
- WRITE_INT_FIELD(cteParam);
-}
-
-static void
-_outNamedTuplestoreScan(StringInfo str, const NamedTuplestoreScan *node)
-{
- WRITE_NODE_TYPE("NAMEDTUPLESTORESCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_STRING_FIELD(enrname);
-}
-
-static void
-_outWorkTableScan(StringInfo str, const WorkTableScan *node)
-{
- WRITE_NODE_TYPE("WORKTABLESCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_INT_FIELD(wtParam);
-}
-
-static void
-_outForeignScan(StringInfo str, const ForeignScan *node)
-{
- WRITE_NODE_TYPE("FOREIGNSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_ENUM_FIELD(operation, CmdType);
- WRITE_OID_FIELD(fs_server);
- WRITE_NODE_FIELD(fdw_exprs);
- WRITE_NODE_FIELD(fdw_private);
- WRITE_NODE_FIELD(fdw_scan_tlist);
- WRITE_NODE_FIELD(fdw_recheck_quals);
- WRITE_BITMAPSET_FIELD(fs_relids);
- WRITE_BOOL_FIELD(fsSystemCol);
-}
-
-static void
-_outCustomScan(StringInfo str, const CustomScan *node)
-{
- WRITE_NODE_TYPE("CUSTOMSCAN");
-
- _outScanInfo(str, (const Scan *) node);
-
- WRITE_UINT_FIELD(flags);
- WRITE_NODE_FIELD(custom_plans);
- WRITE_NODE_FIELD(custom_exprs);
- WRITE_NODE_FIELD(custom_private);
- WRITE_NODE_FIELD(custom_scan_tlist);
- WRITE_BITMAPSET_FIELD(custom_relids);
- /* CustomName is a key to lookup CustomScanMethods */
- appendStringInfoString(str, " :methods ");
- outToken(str, node->methods->CustomName);
-}
-
-static void
-_outJoin(StringInfo str, const Join *node)
-{
- WRITE_NODE_TYPE("JOIN");
-
- _outJoinPlanInfo(str, (const Join *) node);
-}
-
-static void
-_outNestLoop(StringInfo str, const NestLoop *node)
-{
- WRITE_NODE_TYPE("NESTLOOP");
-
- _outJoinPlanInfo(str, (const Join *) node);
-
- WRITE_NODE_FIELD(nestParams);
-}
-
-static void
-_outMergeJoin(StringInfo str, const MergeJoin *node)
-{
- int numCols;
-
- WRITE_NODE_TYPE("MERGEJOIN");
-
- _outJoinPlanInfo(str, (const Join *) node);
-
- WRITE_BOOL_FIELD(skip_mark_restore);
- WRITE_NODE_FIELD(mergeclauses);
-
- numCols = list_length(node->mergeclauses);
-
- WRITE_OID_ARRAY(mergeFamilies, numCols);
- WRITE_OID_ARRAY(mergeCollations, numCols);
- WRITE_INT_ARRAY(mergeStrategies, numCols);
- WRITE_BOOL_ARRAY(mergeNullsFirst, numCols);
-}
-
-static void
-_outHashJoin(StringInfo str, const HashJoin *node)
-{
- WRITE_NODE_TYPE("HASHJOIN");
-
- _outJoinPlanInfo(str, (const Join *) node);
-
- WRITE_NODE_FIELD(hashclauses);
- WRITE_NODE_FIELD(hashoperators);
- WRITE_NODE_FIELD(hashcollations);
- WRITE_NODE_FIELD(hashkeys);
-}
-
-static void
-_outAgg(StringInfo str, const Agg *node)
-{
- WRITE_NODE_TYPE("AGG");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_ENUM_FIELD(aggstrategy, AggStrategy);
- WRITE_ENUM_FIELD(aggsplit, AggSplit);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(grpColIdx, node->numCols);
- WRITE_OID_ARRAY(grpOperators, node->numCols);
- WRITE_OID_ARRAY(grpCollations, node->numCols);
- WRITE_LONG_FIELD(numGroups);
- WRITE_UINT64_FIELD(transitionSpace);
- WRITE_BITMAPSET_FIELD(aggParams);
- WRITE_NODE_FIELD(groupingSets);
- WRITE_NODE_FIELD(chain);
-}
-
-static void
-_outWindowAgg(StringInfo str, const WindowAgg *node)
-{
- WRITE_NODE_TYPE("WINDOWAGG");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_UINT_FIELD(winref);
- WRITE_INT_FIELD(partNumCols);
- WRITE_ATTRNUMBER_ARRAY(partColIdx, node->partNumCols);
- WRITE_OID_ARRAY(partOperators, node->partNumCols);
- WRITE_OID_ARRAY(partCollations, node->partNumCols);
- WRITE_INT_FIELD(ordNumCols);
- WRITE_ATTRNUMBER_ARRAY(ordColIdx, node->ordNumCols);
- WRITE_OID_ARRAY(ordOperators, node->ordNumCols);
- WRITE_OID_ARRAY(ordCollations, node->ordNumCols);
- WRITE_INT_FIELD(frameOptions);
- WRITE_NODE_FIELD(startOffset);
- WRITE_NODE_FIELD(endOffset);
- WRITE_OID_FIELD(startInRangeFunc);
- WRITE_OID_FIELD(endInRangeFunc);
- WRITE_OID_FIELD(inRangeColl);
- WRITE_BOOL_FIELD(inRangeAsc);
- WRITE_BOOL_FIELD(inRangeNullsFirst);
-}
-
-static void
-_outGroup(StringInfo str, const Group *node)
-{
- WRITE_NODE_TYPE("GROUP");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(grpColIdx, node->numCols);
- WRITE_OID_ARRAY(grpOperators, node->numCols);
- WRITE_OID_ARRAY(grpCollations, node->numCols);
-}
-
-static void
-_outMaterial(StringInfo str, const Material *node)
-{
- WRITE_NODE_TYPE("MATERIAL");
-
- _outPlanInfo(str, (const Plan *) node);
-}
-
-static void
-_outSortInfo(StringInfo str, const Sort *node)
-{
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numCols);
- WRITE_OID_ARRAY(sortOperators, node->numCols);
- WRITE_OID_ARRAY(collations, node->numCols);
- WRITE_BOOL_ARRAY(nullsFirst, node->numCols);
-}
-
-static void
-_outSort(StringInfo str, const Sort *node)
-{
- WRITE_NODE_TYPE("SORT");
-
- _outSortInfo(str, node);
-}
-
-static void
-_outIncrementalSort(StringInfo str, const IncrementalSort *node)
-{
- WRITE_NODE_TYPE("INCREMENTALSORT");
-
- _outSortInfo(str, (const Sort *) node);
-
- WRITE_INT_FIELD(nPresortedCols);
-}
-
-static void
-_outUnique(StringInfo str, const Unique *node)
-{
- WRITE_NODE_TYPE("UNIQUE");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(uniqColIdx, node->numCols);
- WRITE_OID_ARRAY(uniqOperators, node->numCols);
- WRITE_OID_ARRAY(uniqCollations, node->numCols);
-}
-
-static void
-_outHash(StringInfo str, const Hash *node)
-{
- WRITE_NODE_TYPE("HASH");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_NODE_FIELD(hashkeys);
- WRITE_OID_FIELD(skewTable);
- WRITE_INT_FIELD(skewColumn);
- WRITE_BOOL_FIELD(skewInherit);
- WRITE_FLOAT_FIELD(rows_total, "%.0f");
-}
-
-static void
-_outSetOp(StringInfo str, const SetOp *node)
-{
- WRITE_NODE_TYPE("SETOP");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_ENUM_FIELD(cmd, SetOpCmd);
- WRITE_ENUM_FIELD(strategy, SetOpStrategy);
- WRITE_INT_FIELD(numCols);
- WRITE_ATTRNUMBER_ARRAY(dupColIdx, node->numCols);
- WRITE_OID_ARRAY(dupOperators, node->numCols);
- WRITE_OID_ARRAY(dupCollations, node->numCols);
- WRITE_INT_FIELD(flagColIdx);
- WRITE_INT_FIELD(firstFlag);
- WRITE_LONG_FIELD(numGroups);
-}
-
-static void
-_outLockRows(StringInfo str, const LockRows *node)
-{
- WRITE_NODE_TYPE("LOCKROWS");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_NODE_FIELD(rowMarks);
- WRITE_INT_FIELD(epqParam);
-}
-
-static void
-_outLimit(StringInfo str, const Limit *node)
-{
- WRITE_NODE_TYPE("LIMIT");
-
- _outPlanInfo(str, (const Plan *) node);
-
- WRITE_NODE_FIELD(limitOffset);
- WRITE_NODE_FIELD(limitCount);
- WRITE_ENUM_FIELD(limitOption, LimitOption);
- WRITE_INT_FIELD(uniqNumCols);
- WRITE_ATTRNUMBER_ARRAY(uniqColIdx, node->uniqNumCols);
- WRITE_OID_ARRAY(uniqOperators, node->uniqNumCols);
- WRITE_OID_ARRAY(uniqCollations, node->uniqNumCols);
-}
-
-static void
-_outNestLoopParam(StringInfo str, const NestLoopParam *node)
-{
- WRITE_NODE_TYPE("NESTLOOPPARAM");
-
- WRITE_INT_FIELD(paramno);
- WRITE_NODE_FIELD(paramval);
-}
-
-static void
-_outPlanRowMark(StringInfo str, const PlanRowMark *node)
-{
- WRITE_NODE_TYPE("PLANROWMARK");
-
- WRITE_UINT_FIELD(rti);
- WRITE_UINT_FIELD(prti);
- WRITE_UINT_FIELD(rowmarkId);
- WRITE_ENUM_FIELD(markType, RowMarkType);
- WRITE_INT_FIELD(allMarkTypes);
- WRITE_ENUM_FIELD(strength, LockClauseStrength);
- WRITE_ENUM_FIELD(waitPolicy, LockWaitPolicy);
- WRITE_BOOL_FIELD(isParent);
-}
-
-static void
-_outPartitionPruneInfo(StringInfo str, const PartitionPruneInfo *node)
-{
- WRITE_NODE_TYPE("PARTITIONPRUNEINFO");
-
- WRITE_NODE_FIELD(prune_infos);
- WRITE_BITMAPSET_FIELD(other_subplans);
-}
-
-static void
-_outPartitionedRelPruneInfo(StringInfo str, const PartitionedRelPruneInfo *node)
-{
- WRITE_NODE_TYPE("PARTITIONEDRELPRUNEINFO");
-
- WRITE_UINT_FIELD(rtindex);
- WRITE_BITMAPSET_FIELD(present_parts);
- WRITE_INT_FIELD(nparts);
- WRITE_INT_ARRAY(subplan_map, node->nparts);
- WRITE_INT_ARRAY(subpart_map, node->nparts);
- WRITE_OID_ARRAY(relid_map, node->nparts);
- WRITE_NODE_FIELD(initial_pruning_steps);
- WRITE_NODE_FIELD(exec_pruning_steps);
- WRITE_BITMAPSET_FIELD(execparamids);
-}
-
-static void
-_outPartitionPruneStepOp(StringInfo str, const PartitionPruneStepOp *node)
-{
- WRITE_NODE_TYPE("PARTITIONPRUNESTEPOP");
-
- WRITE_INT_FIELD(step.step_id);
- WRITE_INT_FIELD(opstrategy);
- WRITE_NODE_FIELD(exprs);
- WRITE_NODE_FIELD(cmpfns);
- WRITE_BITMAPSET_FIELD(nullkeys);
-}
-
-static void
-_outPartitionPruneStepCombine(StringInfo str, const PartitionPruneStepCombine *node)
-{
- WRITE_NODE_TYPE("PARTITIONPRUNESTEPCOMBINE");
-
- WRITE_INT_FIELD(step.step_id);
- WRITE_ENUM_FIELD(combineOp, PartitionPruneCombineOp);
- WRITE_NODE_FIELD(source_stepids);
-}
-
-static void
-_outPlanInvalItem(StringInfo str, const PlanInvalItem *node)
-{
- WRITE_NODE_TYPE("PLANINVALITEM");
-
- WRITE_INT_FIELD(cacheId);
- WRITE_UINT_FIELD(hashValue);
-}
-
-/*****************************************************************************
- *
- * Stuff from primnodes.h.
- *
- *****************************************************************************/
-
-static void
-_outAlias(StringInfo str, const Alias *node)
-{
- WRITE_NODE_TYPE("ALIAS");
-
- WRITE_STRING_FIELD(aliasname);
- WRITE_NODE_FIELD(colnames);
-}
-
-static void
-_outRangeVar(StringInfo str, const RangeVar *node)
-{
- WRITE_NODE_TYPE("RANGEVAR");
-
- /*
- * we deliberately ignore catalogname here, since it is presently not
- * semantically meaningful
- */
- WRITE_STRING_FIELD(schemaname);
- WRITE_STRING_FIELD(relname);
- WRITE_BOOL_FIELD(inh);
- WRITE_CHAR_FIELD(relpersistence);
- WRITE_NODE_FIELD(alias);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outTableFunc(StringInfo str, const TableFunc *node)
-{
- WRITE_NODE_TYPE("TABLEFUNC");
-
- WRITE_NODE_FIELD(ns_uris);
- WRITE_NODE_FIELD(ns_names);
- WRITE_NODE_FIELD(docexpr);
- WRITE_NODE_FIELD(rowexpr);
- WRITE_NODE_FIELD(colnames);
- WRITE_NODE_FIELD(coltypes);
- WRITE_NODE_FIELD(coltypmods);
- WRITE_NODE_FIELD(colcollations);
- WRITE_NODE_FIELD(colexprs);
- WRITE_NODE_FIELD(coldefexprs);
- WRITE_BITMAPSET_FIELD(notnulls);
- WRITE_INT_FIELD(ordinalitycol);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outIntoClause(StringInfo str, const IntoClause *node)
-{
- WRITE_NODE_TYPE("INTOCLAUSE");
-
- WRITE_NODE_FIELD(rel);
- WRITE_NODE_FIELD(colNames);
- WRITE_STRING_FIELD(accessMethod);
- WRITE_NODE_FIELD(options);
- WRITE_ENUM_FIELD(onCommit, OnCommitAction);
- WRITE_STRING_FIELD(tableSpaceName);
- WRITE_NODE_FIELD(viewQuery);
- WRITE_BOOL_FIELD(skipData);
-}
-
-static void
-_outVar(StringInfo str, const Var *node)
-{
- WRITE_NODE_TYPE("VAR");
-
- WRITE_UINT_FIELD(varno);
- WRITE_INT_FIELD(varattno);
- WRITE_OID_FIELD(vartype);
- WRITE_INT_FIELD(vartypmod);
- WRITE_OID_FIELD(varcollid);
- WRITE_UINT_FIELD(varlevelsup);
- WRITE_UINT_FIELD(varnosyn);
- WRITE_INT_FIELD(varattnosyn);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outConst(StringInfo str, const Const *node)
-{
- WRITE_NODE_TYPE("CONST");
-
- WRITE_OID_FIELD(consttype);
- WRITE_INT_FIELD(consttypmod);
- WRITE_OID_FIELD(constcollid);
- WRITE_INT_FIELD(constlen);
- WRITE_BOOL_FIELD(constbyval);
- WRITE_BOOL_FIELD(constisnull);
- WRITE_LOCATION_FIELD(location);
-
- appendStringInfoString(str, " :constvalue ");
- if (node->constisnull)
- appendStringInfoString(str, "<>");
- else
- outDatum(str, node->constvalue, node->constlen, node->constbyval);
-}
-
-static void
-_outParam(StringInfo str, const Param *node)
-{
- WRITE_NODE_TYPE("PARAM");
-
- WRITE_ENUM_FIELD(paramkind, ParamKind);
- WRITE_INT_FIELD(paramid);
- WRITE_OID_FIELD(paramtype);
- WRITE_INT_FIELD(paramtypmod);
- WRITE_OID_FIELD(paramcollid);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outAggref(StringInfo str, const Aggref *node)
-{
- WRITE_NODE_TYPE("AGGREF");
-
- WRITE_OID_FIELD(aggfnoid);
- WRITE_OID_FIELD(aggtype);
- WRITE_OID_FIELD(aggcollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_OID_FIELD(aggtranstype);
- WRITE_NODE_FIELD(aggargtypes);
- WRITE_NODE_FIELD(aggdirectargs);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(aggorder);
- WRITE_NODE_FIELD(aggdistinct);
- WRITE_NODE_FIELD(aggfilter);
- WRITE_BOOL_FIELD(aggstar);
- WRITE_BOOL_FIELD(aggvariadic);
- WRITE_CHAR_FIELD(aggkind);
- WRITE_UINT_FIELD(agglevelsup);
- WRITE_ENUM_FIELD(aggsplit, AggSplit);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outGroupingFunc(StringInfo str, const GroupingFunc *node)
-{
- WRITE_NODE_TYPE("GROUPINGFUNC");
-
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(refs);
- WRITE_NODE_FIELD(cols);
- WRITE_UINT_FIELD(agglevelsup);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outWindowFunc(StringInfo str, const WindowFunc *node)
-{
- WRITE_NODE_TYPE("WINDOWFUNC");
-
- WRITE_OID_FIELD(winfnoid);
- WRITE_OID_FIELD(wintype);
- WRITE_OID_FIELD(wincollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(aggfilter);
- WRITE_UINT_FIELD(winref);
- WRITE_BOOL_FIELD(winstar);
- WRITE_BOOL_FIELD(winagg);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outSubscriptingRef(StringInfo str, const SubscriptingRef *node)
-{
- WRITE_NODE_TYPE("SUBSCRIPTINGREF");
-
- WRITE_OID_FIELD(refcontainertype);
- WRITE_OID_FIELD(refelemtype);
- WRITE_INT_FIELD(reftypmod);
- WRITE_OID_FIELD(refcollid);
- WRITE_NODE_FIELD(refupperindexpr);
- WRITE_NODE_FIELD(reflowerindexpr);
- WRITE_NODE_FIELD(refexpr);
- WRITE_NODE_FIELD(refassgnexpr);
-}
-
-static void
-_outFuncExpr(StringInfo str, const FuncExpr *node)
-{
- WRITE_NODE_TYPE("FUNCEXPR");
-
- WRITE_OID_FIELD(funcid);
- WRITE_OID_FIELD(funcresulttype);
- WRITE_BOOL_FIELD(funcretset);
- WRITE_BOOL_FIELD(funcvariadic);
- WRITE_ENUM_FIELD(funcformat, CoercionForm);
- WRITE_OID_FIELD(funccollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outNamedArgExpr(StringInfo str, const NamedArgExpr *node)
-{
- WRITE_NODE_TYPE("NAMEDARGEXPR");
-
- WRITE_NODE_FIELD(arg);
- WRITE_STRING_FIELD(name);
- WRITE_INT_FIELD(argnumber);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outOpExpr(StringInfo str, const OpExpr *node)
-{
- WRITE_NODE_TYPE("OPEXPR");
-
- WRITE_OID_FIELD(opno);
- WRITE_OID_FIELD(opfuncid);
- WRITE_OID_FIELD(opresulttype);
- WRITE_BOOL_FIELD(opretset);
- WRITE_OID_FIELD(opcollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outDistinctExpr(StringInfo str, const DistinctExpr *node)
-{
- WRITE_NODE_TYPE("DISTINCTEXPR");
-
- WRITE_OID_FIELD(opno);
- WRITE_OID_FIELD(opfuncid);
- WRITE_OID_FIELD(opresulttype);
- WRITE_BOOL_FIELD(opretset);
- WRITE_OID_FIELD(opcollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outNullIfExpr(StringInfo str, const NullIfExpr *node)
-{
- WRITE_NODE_TYPE("NULLIFEXPR");
-
- WRITE_OID_FIELD(opno);
- WRITE_OID_FIELD(opfuncid);
- WRITE_OID_FIELD(opresulttype);
- WRITE_BOOL_FIELD(opretset);
- WRITE_OID_FIELD(opcollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outScalarArrayOpExpr(StringInfo str, const ScalarArrayOpExpr *node)
-{
- WRITE_NODE_TYPE("SCALARARRAYOPEXPR");
-
- WRITE_OID_FIELD(opno);
- WRITE_OID_FIELD(opfuncid);
- WRITE_BOOL_FIELD(useOr);
- WRITE_OID_FIELD(inputcollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outBoolExpr(StringInfo str, const BoolExpr *node)
-{
- char *opstr = NULL;
-
- WRITE_NODE_TYPE("BOOLEXPR");
-
- /* do-it-yourself enum representation */
- switch (node->boolop)
- {
- case AND_EXPR:
- opstr = "and";
- break;
- case OR_EXPR:
- opstr = "or";
- break;
- case NOT_EXPR:
- opstr = "not";
- break;
- }
- appendStringInfoString(str, " :boolop ");
- outToken(str, opstr);
-
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outSubLink(StringInfo str, const SubLink *node)
-{
- WRITE_NODE_TYPE("SUBLINK");
-
- WRITE_ENUM_FIELD(subLinkType, SubLinkType);
- WRITE_INT_FIELD(subLinkId);
- WRITE_NODE_FIELD(testexpr);
- WRITE_NODE_FIELD(operName);
- WRITE_NODE_FIELD(subselect);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outSubPlan(StringInfo str, const SubPlan *node)
-{
- WRITE_NODE_TYPE("SUBPLAN");
-
- WRITE_ENUM_FIELD(subLinkType, SubLinkType);
- WRITE_NODE_FIELD(testexpr);
- WRITE_NODE_FIELD(paramIds);
- WRITE_INT_FIELD(plan_id);
- WRITE_STRING_FIELD(plan_name);
- WRITE_OID_FIELD(firstColType);
- WRITE_INT_FIELD(firstColTypmod);
- WRITE_OID_FIELD(firstColCollation);
- WRITE_BOOL_FIELD(useHashTable);
- WRITE_BOOL_FIELD(unknownEqFalse);
- WRITE_BOOL_FIELD(parallel_safe);
- WRITE_NODE_FIELD(setParam);
- WRITE_NODE_FIELD(parParam);
- WRITE_NODE_FIELD(args);
- WRITE_FLOAT_FIELD(startup_cost, "%.2f");
- WRITE_FLOAT_FIELD(per_call_cost, "%.2f");
-}
-
-static void
-_outAlternativeSubPlan(StringInfo str, const AlternativeSubPlan *node)
-{
- WRITE_NODE_TYPE("ALTERNATIVESUBPLAN");
-
- WRITE_NODE_FIELD(subplans);
-}
-
-static void
-_outFieldSelect(StringInfo str, const FieldSelect *node)
-{
- WRITE_NODE_TYPE("FIELDSELECT");
-
- WRITE_NODE_FIELD(arg);
- WRITE_INT_FIELD(fieldnum);
- WRITE_OID_FIELD(resulttype);
- WRITE_INT_FIELD(resulttypmod);
- WRITE_OID_FIELD(resultcollid);
-}
-
-static void
-_outFieldStore(StringInfo str, const FieldStore *node)
-{
- WRITE_NODE_TYPE("FIELDSTORE");
-
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(newvals);
- WRITE_NODE_FIELD(fieldnums);
- WRITE_OID_FIELD(resulttype);
-}
-
-static void
-_outRelabelType(StringInfo str, const RelabelType *node)
-{
- WRITE_NODE_TYPE("RELABELTYPE");
-
- WRITE_NODE_FIELD(arg);
- WRITE_OID_FIELD(resulttype);
- WRITE_INT_FIELD(resulttypmod);
- WRITE_OID_FIELD(resultcollid);
- WRITE_ENUM_FIELD(relabelformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCoerceViaIO(StringInfo str, const CoerceViaIO *node)
-{
- WRITE_NODE_TYPE("COERCEVIAIO");
-
- WRITE_NODE_FIELD(arg);
- WRITE_OID_FIELD(resulttype);
- WRITE_OID_FIELD(resultcollid);
- WRITE_ENUM_FIELD(coerceformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outArrayCoerceExpr(StringInfo str, const ArrayCoerceExpr *node)
-{
- WRITE_NODE_TYPE("ARRAYCOERCEEXPR");
-
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(elemexpr);
- WRITE_OID_FIELD(resulttype);
- WRITE_INT_FIELD(resulttypmod);
- WRITE_OID_FIELD(resultcollid);
- WRITE_ENUM_FIELD(coerceformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outConvertRowtypeExpr(StringInfo str, const ConvertRowtypeExpr *node)
-{
- WRITE_NODE_TYPE("CONVERTROWTYPEEXPR");
-
- WRITE_NODE_FIELD(arg);
- WRITE_OID_FIELD(resulttype);
- WRITE_ENUM_FIELD(convertformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCollateExpr(StringInfo str, const CollateExpr *node)
-{
- WRITE_NODE_TYPE("COLLATE");
-
- WRITE_NODE_FIELD(arg);
- WRITE_OID_FIELD(collOid);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCaseExpr(StringInfo str, const CaseExpr *node)
-{
- WRITE_NODE_TYPE("CASE");
-
- WRITE_OID_FIELD(casetype);
- WRITE_OID_FIELD(casecollid);
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(defresult);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCaseWhen(StringInfo str, const CaseWhen *node)
-{
- WRITE_NODE_TYPE("WHEN");
-
- WRITE_NODE_FIELD(expr);
- WRITE_NODE_FIELD(result);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCaseTestExpr(StringInfo str, const CaseTestExpr *node)
-{
- WRITE_NODE_TYPE("CASETESTEXPR");
-
- WRITE_OID_FIELD(typeId);
- WRITE_INT_FIELD(typeMod);
- WRITE_OID_FIELD(collation);
-}
-
-static void
-_outArrayExpr(StringInfo str, const ArrayExpr *node)
-{
- WRITE_NODE_TYPE("ARRAY");
-
- WRITE_OID_FIELD(array_typeid);
- WRITE_OID_FIELD(array_collid);
- WRITE_OID_FIELD(element_typeid);
- WRITE_NODE_FIELD(elements);
- WRITE_BOOL_FIELD(multidims);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outRowExpr(StringInfo str, const RowExpr *node)
-{
- WRITE_NODE_TYPE("ROW");
-
- WRITE_NODE_FIELD(args);
- WRITE_OID_FIELD(row_typeid);
- WRITE_ENUM_FIELD(row_format, CoercionForm);
- WRITE_NODE_FIELD(colnames);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outRowCompareExpr(StringInfo str, const RowCompareExpr *node)
-{
- WRITE_NODE_TYPE("ROWCOMPARE");
-
- WRITE_ENUM_FIELD(rctype, RowCompareType);
- WRITE_NODE_FIELD(opnos);
- WRITE_NODE_FIELD(opfamilies);
- WRITE_NODE_FIELD(inputcollids);
- WRITE_NODE_FIELD(largs);
- WRITE_NODE_FIELD(rargs);
-}
-
-static void
-_outCoalesceExpr(StringInfo str, const CoalesceExpr *node)
-{
- WRITE_NODE_TYPE("COALESCE");
-
- WRITE_OID_FIELD(coalescetype);
- WRITE_OID_FIELD(coalescecollid);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outMinMaxExpr(StringInfo str, const MinMaxExpr *node)
-{
- WRITE_NODE_TYPE("MINMAX");
-
- WRITE_OID_FIELD(minmaxtype);
- WRITE_OID_FIELD(minmaxcollid);
- WRITE_OID_FIELD(inputcollid);
- WRITE_ENUM_FIELD(op, MinMaxOp);
- WRITE_NODE_FIELD(args);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outSQLValueFunction(StringInfo str, const SQLValueFunction *node)
-{
- WRITE_NODE_TYPE("SQLVALUEFUNCTION");
-
- WRITE_ENUM_FIELD(op, SQLValueFunctionOp);
- WRITE_OID_FIELD(type);
- WRITE_INT_FIELD(typmod);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outXmlExpr(StringInfo str, const XmlExpr *node)
-{
- WRITE_NODE_TYPE("XMLEXPR");
-
- WRITE_ENUM_FIELD(op, XmlExprOp);
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(named_args);
- WRITE_NODE_FIELD(arg_names);
- WRITE_NODE_FIELD(args);
- WRITE_ENUM_FIELD(xmloption, XmlOptionType);
- WRITE_OID_FIELD(type);
- WRITE_INT_FIELD(typmod);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outNullTest(StringInfo str, const NullTest *node)
-{
- WRITE_NODE_TYPE("NULLTEST");
-
- WRITE_NODE_FIELD(arg);
- WRITE_ENUM_FIELD(nulltesttype, NullTestType);
- WRITE_BOOL_FIELD(argisrow);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outBooleanTest(StringInfo str, const BooleanTest *node)
-{
- WRITE_NODE_TYPE("BOOLEANTEST");
-
- WRITE_NODE_FIELD(arg);
- WRITE_ENUM_FIELD(booltesttype, BoolTestType);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCoerceToDomain(StringInfo str, const CoerceToDomain *node)
-{
- WRITE_NODE_TYPE("COERCETODOMAIN");
-
- WRITE_NODE_FIELD(arg);
- WRITE_OID_FIELD(resulttype);
- WRITE_INT_FIELD(resulttypmod);
- WRITE_OID_FIELD(resultcollid);
- WRITE_ENUM_FIELD(coercionformat, CoercionForm);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCoerceToDomainValue(StringInfo str, const CoerceToDomainValue *node)
-{
- WRITE_NODE_TYPE("COERCETODOMAINVALUE");
-
- WRITE_OID_FIELD(typeId);
- WRITE_INT_FIELD(typeMod);
- WRITE_OID_FIELD(collation);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outSetToDefault(StringInfo str, const SetToDefault *node)
-{
- WRITE_NODE_TYPE("SETTODEFAULT");
-
- WRITE_OID_FIELD(typeId);
- WRITE_INT_FIELD(typeMod);
- WRITE_OID_FIELD(collation);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCurrentOfExpr(StringInfo str, const CurrentOfExpr *node)
-{
- WRITE_NODE_TYPE("CURRENTOFEXPR");
-
- WRITE_UINT_FIELD(cvarno);
- WRITE_STRING_FIELD(cursor_name);
- WRITE_INT_FIELD(cursor_param);
-}
-
-static void
-_outNextValueExpr(StringInfo str, const NextValueExpr *node)
-{
- WRITE_NODE_TYPE("NEXTVALUEEXPR");
-
- WRITE_OID_FIELD(seqid);
- WRITE_OID_FIELD(typeId);
-}
-
-static void
-_outInferenceElem(StringInfo str, const InferenceElem *node)
-{
- WRITE_NODE_TYPE("INFERENCEELEM");
-
- WRITE_NODE_FIELD(expr);
- WRITE_OID_FIELD(infercollid);
- WRITE_OID_FIELD(inferopclass);
-}
-
-static void
-_outTargetEntry(StringInfo str, const TargetEntry *node)
-{
- WRITE_NODE_TYPE("TARGETENTRY");
-
- WRITE_NODE_FIELD(expr);
- WRITE_INT_FIELD(resno);
- WRITE_STRING_FIELD(resname);
- WRITE_UINT_FIELD(ressortgroupref);
- WRITE_OID_FIELD(resorigtbl);
- WRITE_INT_FIELD(resorigcol);
- WRITE_BOOL_FIELD(resjunk);
-}
-
-static void
-_outRangeTblRef(StringInfo str, const RangeTblRef *node)
-{
- WRITE_NODE_TYPE("RANGETBLREF");
-
- WRITE_INT_FIELD(rtindex);
-}
-
-static void
-_outJoinExpr(StringInfo str, const JoinExpr *node)
-{
- WRITE_NODE_TYPE("JOINEXPR");
-
- WRITE_ENUM_FIELD(jointype, JoinType);
- WRITE_BOOL_FIELD(isNatural);
- WRITE_NODE_FIELD(larg);
- WRITE_NODE_FIELD(rarg);
- WRITE_NODE_FIELD(usingClause);
- WRITE_NODE_FIELD(quals);
- WRITE_NODE_FIELD(alias);
- WRITE_INT_FIELD(rtindex);
-}
-
-static void
-_outFromExpr(StringInfo str, const FromExpr *node)
-{
- WRITE_NODE_TYPE("FROMEXPR");
-
- WRITE_NODE_FIELD(fromlist);
- WRITE_NODE_FIELD(quals);
-}
-
-static void
-_outOnConflictExpr(StringInfo str, const OnConflictExpr *node)
-{
- WRITE_NODE_TYPE("ONCONFLICTEXPR");
-
- WRITE_ENUM_FIELD(action, OnConflictAction);
- WRITE_NODE_FIELD(arbiterElems);
- WRITE_NODE_FIELD(arbiterWhere);
- WRITE_OID_FIELD(constraint);
- WRITE_NODE_FIELD(onConflictSet);
- WRITE_NODE_FIELD(onConflictWhere);
- WRITE_INT_FIELD(exclRelIndex);
- WRITE_NODE_FIELD(exclRelTlist);
-}
-
-/*****************************************************************************
- *
- * Stuff from pathnodes.h.
- *
- *****************************************************************************/
-
-/*
- * print the basic stuff of all nodes that inherit from Path
- *
- * Note we do NOT print the parent, else we'd be in infinite recursion.
- * We can print the parent's relids for identification purposes, though.
- * We print the pathtarget only if it's not the default one for the rel.
- * We also do not print the whole of param_info, since it's printed by
- * _outRelOptInfo; it's sufficient and less cluttering to print just the
- * required outer relids.
- */
-static void
-_outPathInfo(StringInfo str, const Path *node)
-{
- WRITE_ENUM_FIELD(pathtype, NodeTag);
- appendStringInfoString(str, " :parent_relids ");
- outBitmapset(str, node->parent->relids);
- if (node->pathtarget != node->parent->reltarget)
- WRITE_NODE_FIELD(pathtarget);
- appendStringInfoString(str, " :required_outer ");
- if (node->param_info)
- outBitmapset(str, node->param_info->ppi_req_outer);
- else
- outBitmapset(str, NULL);
- WRITE_BOOL_FIELD(parallel_aware);
- WRITE_BOOL_FIELD(parallel_safe);
- WRITE_INT_FIELD(parallel_workers);
- WRITE_FLOAT_FIELD(rows, "%.0f");
- WRITE_FLOAT_FIELD(startup_cost, "%.2f");
- WRITE_FLOAT_FIELD(total_cost, "%.2f");
- WRITE_NODE_FIELD(pathkeys);
-}
-
-/*
- * print the basic stuff of all nodes that inherit from JoinPath
- */
-static void
-_outJoinPathInfo(StringInfo str, const JoinPath *node)
-{
- _outPathInfo(str, (const Path *) node);
-
- WRITE_ENUM_FIELD(jointype, JoinType);
- WRITE_BOOL_FIELD(inner_unique);
- WRITE_NODE_FIELD(outerjoinpath);
- WRITE_NODE_FIELD(innerjoinpath);
- WRITE_NODE_FIELD(joinrestrictinfo);
-}
-
-static void
-_outPath(StringInfo str, const Path *node)
-{
- WRITE_NODE_TYPE("PATH");
-
- _outPathInfo(str, (const Path *) node);
-}
-
-static void
-_outIndexPath(StringInfo str, const IndexPath *node)
-{
- WRITE_NODE_TYPE("INDEXPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(indexinfo);
- WRITE_NODE_FIELD(indexclauses);
- WRITE_NODE_FIELD(indexorderbys);
- WRITE_NODE_FIELD(indexorderbycols);
- WRITE_ENUM_FIELD(indexscandir, ScanDirection);
- WRITE_FLOAT_FIELD(indextotalcost, "%.2f");
- WRITE_FLOAT_FIELD(indexselectivity, "%.4f");
-}
-
-static void
-_outBitmapHeapPath(StringInfo str, const BitmapHeapPath *node)
-{
- WRITE_NODE_TYPE("BITMAPHEAPPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(bitmapqual);
-}
-
-static void
-_outBitmapAndPath(StringInfo str, const BitmapAndPath *node)
-{
- WRITE_NODE_TYPE("BITMAPANDPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(bitmapquals);
- WRITE_FLOAT_FIELD(bitmapselectivity, "%.4f");
-}
-
-static void
-_outBitmapOrPath(StringInfo str, const BitmapOrPath *node)
-{
- WRITE_NODE_TYPE("BITMAPORPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(bitmapquals);
- WRITE_FLOAT_FIELD(bitmapselectivity, "%.4f");
-}
-
-static void
-_outTidPath(StringInfo str, const TidPath *node)
-{
- WRITE_NODE_TYPE("TIDPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(tidquals);
-}
-
-static void
-_outSubqueryScanPath(StringInfo str, const SubqueryScanPath *node)
-{
- WRITE_NODE_TYPE("SUBQUERYSCANPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
-}
-
-static void
-_outForeignPath(StringInfo str, const ForeignPath *node)
-{
- WRITE_NODE_TYPE("FOREIGNPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(fdw_outerpath);
- WRITE_NODE_FIELD(fdw_private);
-}
-
-static void
-_outCustomPath(StringInfo str, const CustomPath *node)
-{
- WRITE_NODE_TYPE("CUSTOMPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_UINT_FIELD(flags);
- WRITE_NODE_FIELD(custom_paths);
- WRITE_NODE_FIELD(custom_private);
- appendStringInfoString(str, " :methods ");
- outToken(str, node->methods->CustomName);
-}
-
-static void
-_outAppendPath(StringInfo str, const AppendPath *node)
-{
- WRITE_NODE_TYPE("APPENDPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(partitioned_rels);
- WRITE_NODE_FIELD(subpaths);
- WRITE_INT_FIELD(first_partial_path);
- WRITE_FLOAT_FIELD(limit_tuples, "%.0f");
-}
-
-static void
-_outMergeAppendPath(StringInfo str, const MergeAppendPath *node)
-{
- WRITE_NODE_TYPE("MERGEAPPENDPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(partitioned_rels);
- WRITE_NODE_FIELD(subpaths);
- WRITE_FLOAT_FIELD(limit_tuples, "%.0f");
-}
-
-static void
-_outGroupResultPath(StringInfo str, const GroupResultPath *node)
-{
- WRITE_NODE_TYPE("GROUPRESULTPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(quals);
-}
-
-static void
-_outMaterialPath(StringInfo str, const MaterialPath *node)
-{
- WRITE_NODE_TYPE("MATERIALPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
-}
-
-static void
-_outUniquePath(StringInfo str, const UniquePath *node)
-{
- WRITE_NODE_TYPE("UNIQUEPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_ENUM_FIELD(umethod, UniquePathMethod);
- WRITE_NODE_FIELD(in_operators);
- WRITE_NODE_FIELD(uniq_exprs);
-}
-
-static void
-_outGatherPath(StringInfo str, const GatherPath *node)
-{
- WRITE_NODE_TYPE("GATHERPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_BOOL_FIELD(single_copy);
- WRITE_INT_FIELD(num_workers);
-}
-
-static void
-_outProjectionPath(StringInfo str, const ProjectionPath *node)
-{
- WRITE_NODE_TYPE("PROJECTIONPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_BOOL_FIELD(dummypp);
-}
-
-static void
-_outProjectSetPath(StringInfo str, const ProjectSetPath *node)
-{
- WRITE_NODE_TYPE("PROJECTSETPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
-}
-
-static void
-_outSortPathInfo(StringInfo str, const SortPath *node)
-{
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
-}
-
-static void
-_outSortPath(StringInfo str, const SortPath *node)
-{
- WRITE_NODE_TYPE("SORTPATH");
-
- _outSortPathInfo(str, node);
-}
-
-static void
-_outIncrementalSortPath(StringInfo str, const IncrementalSortPath *node)
-{
- WRITE_NODE_TYPE("INCREMENTALSORTPATH");
-
- _outSortPathInfo(str, (const SortPath *) node);
-
- WRITE_INT_FIELD(nPresortedCols);
-}
-
-static void
-_outGroupPath(StringInfo str, const GroupPath *node)
-{
- WRITE_NODE_TYPE("GROUPPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_NODE_FIELD(groupClause);
- WRITE_NODE_FIELD(qual);
-}
-
-static void
-_outUpperUniquePath(StringInfo str, const UpperUniquePath *node)
-{
- WRITE_NODE_TYPE("UPPERUNIQUEPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_INT_FIELD(numkeys);
-}
-
-static void
-_outAggPath(StringInfo str, const AggPath *node)
-{
- WRITE_NODE_TYPE("AGGPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_ENUM_FIELD(aggstrategy, AggStrategy);
- WRITE_ENUM_FIELD(aggsplit, AggSplit);
- WRITE_FLOAT_FIELD(numGroups, "%.0f");
- WRITE_UINT64_FIELD(transitionSpace);
- WRITE_NODE_FIELD(groupClause);
- WRITE_NODE_FIELD(qual);
-}
-
-static void
-_outRollupData(StringInfo str, const RollupData *node)
-{
- WRITE_NODE_TYPE("ROLLUP");
-
- WRITE_NODE_FIELD(groupClause);
- WRITE_NODE_FIELD(gsets);
- WRITE_NODE_FIELD(gsets_data);
- WRITE_FLOAT_FIELD(numGroups, "%.0f");
- WRITE_BOOL_FIELD(hashable);
- WRITE_BOOL_FIELD(is_hashed);
-}
-
-static void
-_outGroupingSetData(StringInfo str, const GroupingSetData *node)
-{
- WRITE_NODE_TYPE("GSDATA");
-
- WRITE_NODE_FIELD(set);
- WRITE_FLOAT_FIELD(numGroups, "%.0f");
-}
-
-static void
-_outGroupingSetsPath(StringInfo str, const GroupingSetsPath *node)
-{
- WRITE_NODE_TYPE("GROUPINGSETSPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_ENUM_FIELD(aggstrategy, AggStrategy);
- WRITE_NODE_FIELD(rollups);
- WRITE_NODE_FIELD(qual);
- WRITE_UINT64_FIELD(transitionSpace);
-}
-
-static void
-_outMinMaxAggPath(StringInfo str, const MinMaxAggPath *node)
-{
- WRITE_NODE_TYPE("MINMAXAGGPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(mmaggregates);
- WRITE_NODE_FIELD(quals);
-}
-
-static void
-_outWindowAggPath(StringInfo str, const WindowAggPath *node)
-{
- WRITE_NODE_TYPE("WINDOWAGGPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_NODE_FIELD(winclause);
-}
-
-static void
-_outSetOpPath(StringInfo str, const SetOpPath *node)
-{
- WRITE_NODE_TYPE("SETOPPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_ENUM_FIELD(cmd, SetOpCmd);
- WRITE_ENUM_FIELD(strategy, SetOpStrategy);
- WRITE_NODE_FIELD(distinctList);
- WRITE_INT_FIELD(flagColIdx);
- WRITE_INT_FIELD(firstFlag);
- WRITE_FLOAT_FIELD(numGroups, "%.0f");
-}
-
-static void
-_outRecursiveUnionPath(StringInfo str, const RecursiveUnionPath *node)
-{
- WRITE_NODE_TYPE("RECURSIVEUNIONPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(leftpath);
- WRITE_NODE_FIELD(rightpath);
- WRITE_NODE_FIELD(distinctList);
- WRITE_INT_FIELD(wtParam);
- WRITE_FLOAT_FIELD(numGroups, "%.0f");
-}
-
-static void
-_outLockRowsPath(StringInfo str, const LockRowsPath *node)
-{
- WRITE_NODE_TYPE("LOCKROWSPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_INT_FIELD(epqParam);
-}
-
-static void
-_outModifyTablePath(StringInfo str, const ModifyTablePath *node)
-{
- WRITE_NODE_TYPE("MODIFYTABLEPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_ENUM_FIELD(operation, CmdType);
- WRITE_BOOL_FIELD(canSetTag);
- WRITE_UINT_FIELD(nominalRelation);
- WRITE_UINT_FIELD(rootRelation);
- WRITE_BOOL_FIELD(partColsUpdated);
- WRITE_NODE_FIELD(resultRelations);
- WRITE_NODE_FIELD(subpaths);
- WRITE_NODE_FIELD(subroots);
- WRITE_NODE_FIELD(withCheckOptionLists);
- WRITE_NODE_FIELD(returningLists);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_NODE_FIELD(onconflict);
- WRITE_INT_FIELD(epqParam);
-}
-
-static void
-_outLimitPath(StringInfo str, const LimitPath *node)
-{
- WRITE_NODE_TYPE("LIMITPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_NODE_FIELD(limitOffset);
- WRITE_NODE_FIELD(limitCount);
- WRITE_ENUM_FIELD(limitOption, LimitOption);
-}
-
-static void
-_outGatherMergePath(StringInfo str, const GatherMergePath *node)
-{
- WRITE_NODE_TYPE("GATHERMERGEPATH");
-
- _outPathInfo(str, (const Path *) node);
-
- WRITE_NODE_FIELD(subpath);
- WRITE_INT_FIELD(num_workers);
-}
-
-static void
-_outNestPath(StringInfo str, const NestPath *node)
-{
- WRITE_NODE_TYPE("NESTPATH");
-
- _outJoinPathInfo(str, (const JoinPath *) node);
-}
-
-static void
-_outMergePath(StringInfo str, const MergePath *node)
-{
- WRITE_NODE_TYPE("MERGEPATH");
-
- _outJoinPathInfo(str, (const JoinPath *) node);
-
- WRITE_NODE_FIELD(path_mergeclauses);
- WRITE_NODE_FIELD(outersortkeys);
- WRITE_NODE_FIELD(innersortkeys);
- WRITE_BOOL_FIELD(skip_mark_restore);
- WRITE_BOOL_FIELD(materialize_inner);
-}
-
-static void
-_outHashPath(StringInfo str, const HashPath *node)
-{
- WRITE_NODE_TYPE("HASHPATH");
-
- _outJoinPathInfo(str, (const JoinPath *) node);
-
- WRITE_NODE_FIELD(path_hashclauses);
- WRITE_INT_FIELD(num_batches);
- WRITE_FLOAT_FIELD(inner_rows_total, "%.0f");
-}
-
-static void
-_outPlannerGlobal(StringInfo str, const PlannerGlobal *node)
-{
- WRITE_NODE_TYPE("PLANNERGLOBAL");
-
- /* NB: this isn't a complete set of fields */
- WRITE_NODE_FIELD(subplans);
- WRITE_BITMAPSET_FIELD(rewindPlanIDs);
- WRITE_NODE_FIELD(finalrtable);
- WRITE_NODE_FIELD(finalrowmarks);
- WRITE_NODE_FIELD(resultRelations);
- WRITE_NODE_FIELD(rootResultRelations);
- WRITE_NODE_FIELD(appendRelations);
- WRITE_NODE_FIELD(relationOids);
- WRITE_NODE_FIELD(invalItems);
- WRITE_NODE_FIELD(paramExecTypes);
- WRITE_UINT_FIELD(lastPHId);
- WRITE_UINT_FIELD(lastRowMarkId);
- WRITE_INT_FIELD(lastPlanNodeId);
- WRITE_BOOL_FIELD(transientPlan);
- WRITE_BOOL_FIELD(dependsOnRole);
- WRITE_BOOL_FIELD(parallelModeOK);
- WRITE_BOOL_FIELD(parallelModeNeeded);
- WRITE_CHAR_FIELD(maxParallelHazard);
-}
-
-static void
-_outPlannerInfo(StringInfo str, const PlannerInfo *node)
-{
- WRITE_NODE_TYPE("PLANNERINFO");
-
- /* NB: this isn't a complete set of fields */
- WRITE_NODE_FIELD(parse);
- WRITE_NODE_FIELD(glob);
- WRITE_UINT_FIELD(query_level);
- WRITE_NODE_FIELD(plan_params);
- WRITE_BITMAPSET_FIELD(outer_params);
- WRITE_BITMAPSET_FIELD(all_baserels);
- WRITE_BITMAPSET_FIELD(nullable_baserels);
- WRITE_NODE_FIELD(join_rel_list);
- WRITE_INT_FIELD(join_cur_level);
- WRITE_NODE_FIELD(init_plans);
- WRITE_NODE_FIELD(cte_plan_ids);
- WRITE_NODE_FIELD(multiexpr_params);
- WRITE_NODE_FIELD(eq_classes);
- WRITE_BOOL_FIELD(ec_merging_done);
- WRITE_NODE_FIELD(canon_pathkeys);
- WRITE_NODE_FIELD(left_join_clauses);
- WRITE_NODE_FIELD(right_join_clauses);
- WRITE_NODE_FIELD(full_join_clauses);
- WRITE_NODE_FIELD(join_info_list);
- WRITE_NODE_FIELD(append_rel_list);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_NODE_FIELD(placeholder_list);
- WRITE_NODE_FIELD(fkey_list);
- WRITE_NODE_FIELD(query_pathkeys);
- WRITE_NODE_FIELD(group_pathkeys);
- WRITE_NODE_FIELD(window_pathkeys);
- WRITE_NODE_FIELD(distinct_pathkeys);
- WRITE_NODE_FIELD(sort_pathkeys);
- WRITE_NODE_FIELD(processed_tlist);
- WRITE_NODE_FIELD(minmax_aggs);
- WRITE_FLOAT_FIELD(total_table_pages, "%.0f");
- WRITE_FLOAT_FIELD(tuple_fraction, "%.4f");
- WRITE_FLOAT_FIELD(limit_tuples, "%.0f");
- WRITE_UINT_FIELD(qual_security_level);
- WRITE_ENUM_FIELD(inhTargetKind, InheritanceKind);
- WRITE_BOOL_FIELD(hasJoinRTEs);
- WRITE_BOOL_FIELD(hasLateralRTEs);
- WRITE_BOOL_FIELD(hasHavingQual);
- WRITE_BOOL_FIELD(hasPseudoConstantQuals);
- WRITE_BOOL_FIELD(hasRecursion);
- WRITE_INT_FIELD(wt_param_id);
- WRITE_BITMAPSET_FIELD(curOuterRels);
- WRITE_NODE_FIELD(curOuterParams);
- WRITE_BOOL_FIELD(partColsUpdated);
-}
-
-static void
-_outRelOptInfo(StringInfo str, const RelOptInfo *node)
-{
- WRITE_NODE_TYPE("RELOPTINFO");
-
- /* NB: this isn't a complete set of fields */
- WRITE_ENUM_FIELD(reloptkind, RelOptKind);
- WRITE_BITMAPSET_FIELD(relids);
- WRITE_FLOAT_FIELD(rows, "%.0f");
- WRITE_BOOL_FIELD(consider_startup);
- WRITE_BOOL_FIELD(consider_param_startup);
- WRITE_BOOL_FIELD(consider_parallel);
- WRITE_NODE_FIELD(reltarget);
- WRITE_NODE_FIELD(pathlist);
- WRITE_NODE_FIELD(ppilist);
- WRITE_NODE_FIELD(partial_pathlist);
- WRITE_NODE_FIELD(cheapest_startup_path);
- WRITE_NODE_FIELD(cheapest_total_path);
- WRITE_NODE_FIELD(cheapest_unique_path);
- WRITE_NODE_FIELD(cheapest_parameterized_paths);
- WRITE_BITMAPSET_FIELD(direct_lateral_relids);
- WRITE_BITMAPSET_FIELD(lateral_relids);
- WRITE_UINT_FIELD(relid);
- WRITE_OID_FIELD(reltablespace);
- WRITE_ENUM_FIELD(rtekind, RTEKind);
- WRITE_INT_FIELD(min_attr);
- WRITE_INT_FIELD(max_attr);
- WRITE_NODE_FIELD(lateral_vars);
- WRITE_BITMAPSET_FIELD(lateral_referencers);
- WRITE_NODE_FIELD(indexlist);
- WRITE_NODE_FIELD(statlist);
- WRITE_UINT_FIELD(pages);
- WRITE_FLOAT_FIELD(tuples, "%.0f");
- WRITE_FLOAT_FIELD(allvisfrac, "%.6f");
- WRITE_BITMAPSET_FIELD(eclass_indexes);
- WRITE_NODE_FIELD(subroot);
- WRITE_NODE_FIELD(subplan_params);
- WRITE_INT_FIELD(rel_parallel_workers);
- WRITE_OID_FIELD(serverid);
- WRITE_OID_FIELD(userid);
- WRITE_BOOL_FIELD(useridiscurrent);
- /* we don't try to print fdwroutine or fdw_private */
- /* can't print unique_for_rels/non_unique_for_rels; BMSes aren't Nodes */
- WRITE_NODE_FIELD(baserestrictinfo);
- WRITE_UINT_FIELD(baserestrict_min_security);
- WRITE_NODE_FIELD(joininfo);
- WRITE_BOOL_FIELD(has_eclass_joins);
- WRITE_BOOL_FIELD(consider_partitionwise_join);
- WRITE_BITMAPSET_FIELD(top_parent_relids);
- WRITE_BOOL_FIELD(partbounds_merged);
- WRITE_BITMAPSET_FIELD(all_partrels);
- WRITE_NODE_FIELD(partitioned_child_rels);
-}
-
-static void
-_outIndexOptInfo(StringInfo str, const IndexOptInfo *node)
-{
- WRITE_NODE_TYPE("INDEXOPTINFO");
-
- /* NB: this isn't a complete set of fields */
- WRITE_OID_FIELD(indexoid);
- /* Do NOT print rel field, else infinite recursion */
- WRITE_UINT_FIELD(pages);
- WRITE_FLOAT_FIELD(tuples, "%.0f");
- WRITE_INT_FIELD(tree_height);
- WRITE_INT_FIELD(ncolumns);
- /* array fields aren't really worth the trouble to print */
- WRITE_OID_FIELD(relam);
- /* indexprs is redundant since we print indextlist */
- WRITE_NODE_FIELD(indpred);
- WRITE_NODE_FIELD(indextlist);
- WRITE_NODE_FIELD(indrestrictinfo);
- WRITE_BOOL_FIELD(predOK);
- WRITE_BOOL_FIELD(unique);
- WRITE_BOOL_FIELD(immediate);
- WRITE_BOOL_FIELD(hypothetical);
- /* we don't bother with fields copied from the index AM's API struct */
-}
-
-static void
-_outForeignKeyOptInfo(StringInfo str, const ForeignKeyOptInfo *node)
-{
- int i;
-
- WRITE_NODE_TYPE("FOREIGNKEYOPTINFO");
-
- WRITE_UINT_FIELD(con_relid);
- WRITE_UINT_FIELD(ref_relid);
- WRITE_INT_FIELD(nkeys);
- WRITE_ATTRNUMBER_ARRAY(conkey, node->nkeys);
- WRITE_ATTRNUMBER_ARRAY(confkey, node->nkeys);
- WRITE_OID_ARRAY(conpfeqop, node->nkeys);
- WRITE_INT_FIELD(nmatched_ec);
- WRITE_INT_FIELD(nmatched_rcols);
- WRITE_INT_FIELD(nmatched_ri);
- /* for compactness, just print the number of matches per column: */
- appendStringInfoString(str, " :eclass");
- for (i = 0; i < node->nkeys; i++)
- appendStringInfo(str, " %d", (node->eclass[i] != NULL));
- appendStringInfoString(str, " :rinfos");
- for (i = 0; i < node->nkeys; i++)
- appendStringInfo(str, " %d", list_length(node->rinfos[i]));
-}
-
-static void
-_outStatisticExtInfo(StringInfo str, const StatisticExtInfo *node)
-{
- WRITE_NODE_TYPE("STATISTICEXTINFO");
-
- /* NB: this isn't a complete set of fields */
- WRITE_OID_FIELD(statOid);
- /* don't write rel, leads to infinite recursion in plan tree dump */
- WRITE_CHAR_FIELD(kind);
- WRITE_BITMAPSET_FIELD(keys);
-}
-
-static void
-_outEquivalenceClass(StringInfo str, const EquivalenceClass *node)
-{
- /*
- * To simplify reading, we just chase up to the topmost merged EC and
- * print that, without bothering to show the merge-ees separately.
- */
- while (node->ec_merged)
- node = node->ec_merged;
-
- WRITE_NODE_TYPE("EQUIVALENCECLASS");
-
- WRITE_NODE_FIELD(ec_opfamilies);
- WRITE_OID_FIELD(ec_collation);
- WRITE_NODE_FIELD(ec_members);
- WRITE_NODE_FIELD(ec_sources);
- WRITE_NODE_FIELD(ec_derives);
- WRITE_BITMAPSET_FIELD(ec_relids);
- WRITE_BOOL_FIELD(ec_has_const);
- WRITE_BOOL_FIELD(ec_has_volatile);
- WRITE_BOOL_FIELD(ec_below_outer_join);
- WRITE_BOOL_FIELD(ec_broken);
- WRITE_UINT_FIELD(ec_sortref);
- WRITE_UINT_FIELD(ec_min_security);
- WRITE_UINT_FIELD(ec_max_security);
-}
-
-static void
-_outEquivalenceMember(StringInfo str, const EquivalenceMember *node)
-{
- WRITE_NODE_TYPE("EQUIVALENCEMEMBER");
-
- WRITE_NODE_FIELD(em_expr);
- WRITE_BITMAPSET_FIELD(em_relids);
- WRITE_BITMAPSET_FIELD(em_nullable_relids);
- WRITE_BOOL_FIELD(em_is_const);
- WRITE_BOOL_FIELD(em_is_child);
- WRITE_OID_FIELD(em_datatype);
-}
-
-static void
-_outPathKey(StringInfo str, const PathKey *node)
-{
- WRITE_NODE_TYPE("PATHKEY");
-
- WRITE_NODE_FIELD(pk_eclass);
- WRITE_OID_FIELD(pk_opfamily);
- WRITE_INT_FIELD(pk_strategy);
- WRITE_BOOL_FIELD(pk_nulls_first);
-}
-
-static void
-_outPathTarget(StringInfo str, const PathTarget *node)
-{
- WRITE_NODE_TYPE("PATHTARGET");
-
- WRITE_NODE_FIELD(exprs);
- if (node->sortgrouprefs)
- {
- int i;
-
- appendStringInfoString(str, " :sortgrouprefs");
- for (i = 0; i < list_length(node->exprs); i++)
- appendStringInfo(str, " %u", node->sortgrouprefs[i]);
- }
- WRITE_FLOAT_FIELD(cost.startup, "%.2f");
- WRITE_FLOAT_FIELD(cost.per_tuple, "%.2f");
- WRITE_INT_FIELD(width);
-}
-
-static void
-_outParamPathInfo(StringInfo str, const ParamPathInfo *node)
-{
- WRITE_NODE_TYPE("PARAMPATHINFO");
-
- WRITE_BITMAPSET_FIELD(ppi_req_outer);
- WRITE_FLOAT_FIELD(ppi_rows, "%.0f");
- WRITE_NODE_FIELD(ppi_clauses);
-}
-
-static void
-_outRestrictInfo(StringInfo str, const RestrictInfo *node)
-{
- WRITE_NODE_TYPE("RESTRICTINFO");
-
- /* NB: this isn't a complete set of fields */
- WRITE_NODE_FIELD(clause);
- WRITE_BOOL_FIELD(is_pushed_down);
- WRITE_BOOL_FIELD(outerjoin_delayed);
- WRITE_BOOL_FIELD(can_join);
- WRITE_BOOL_FIELD(pseudoconstant);
- WRITE_BOOL_FIELD(leakproof);
- WRITE_UINT_FIELD(security_level);
- WRITE_BITMAPSET_FIELD(clause_relids);
- WRITE_BITMAPSET_FIELD(required_relids);
- WRITE_BITMAPSET_FIELD(outer_relids);
- WRITE_BITMAPSET_FIELD(nullable_relids);
- WRITE_BITMAPSET_FIELD(left_relids);
- WRITE_BITMAPSET_FIELD(right_relids);
- WRITE_NODE_FIELD(orclause);
- /* don't write parent_ec, leads to infinite recursion in plan tree dump */
- WRITE_FLOAT_FIELD(norm_selec, "%.4f");
- WRITE_FLOAT_FIELD(outer_selec, "%.4f");
- WRITE_NODE_FIELD(mergeopfamilies);
- /* don't write left_ec, leads to infinite recursion in plan tree dump */
- /* don't write right_ec, leads to infinite recursion in plan tree dump */
- WRITE_NODE_FIELD(left_em);
- WRITE_NODE_FIELD(right_em);
- WRITE_BOOL_FIELD(outer_is_left);
- WRITE_OID_FIELD(hashjoinoperator);
-}
-
-static void
-_outIndexClause(StringInfo str, const IndexClause *node)
-{
- WRITE_NODE_TYPE("INDEXCLAUSE");
-
- WRITE_NODE_FIELD(rinfo);
- WRITE_NODE_FIELD(indexquals);
- WRITE_BOOL_FIELD(lossy);
- WRITE_INT_FIELD(indexcol);
- WRITE_NODE_FIELD(indexcols);
-}
-
-static void
-_outPlaceHolderVar(StringInfo str, const PlaceHolderVar *node)
-{
- WRITE_NODE_TYPE("PLACEHOLDERVAR");
-
- WRITE_NODE_FIELD(phexpr);
- WRITE_BITMAPSET_FIELD(phrels);
- WRITE_UINT_FIELD(phid);
- WRITE_UINT_FIELD(phlevelsup);
-}
-
-static void
-_outSpecialJoinInfo(StringInfo str, const SpecialJoinInfo *node)
-{
- WRITE_NODE_TYPE("SPECIALJOININFO");
-
- WRITE_BITMAPSET_FIELD(min_lefthand);
- WRITE_BITMAPSET_FIELD(min_righthand);
- WRITE_BITMAPSET_FIELD(syn_lefthand);
- WRITE_BITMAPSET_FIELD(syn_righthand);
- WRITE_ENUM_FIELD(jointype, JoinType);
- WRITE_BOOL_FIELD(lhs_strict);
- WRITE_BOOL_FIELD(delay_upper_joins);
- WRITE_BOOL_FIELD(semi_can_btree);
- WRITE_BOOL_FIELD(semi_can_hash);
- WRITE_NODE_FIELD(semi_operators);
- WRITE_NODE_FIELD(semi_rhs_exprs);
-}
-
-static void
-_outAppendRelInfo(StringInfo str, const AppendRelInfo *node)
-{
- WRITE_NODE_TYPE("APPENDRELINFO");
-
- WRITE_UINT_FIELD(parent_relid);
- WRITE_UINT_FIELD(child_relid);
- WRITE_OID_FIELD(parent_reltype);
- WRITE_OID_FIELD(child_reltype);
- WRITE_NODE_FIELD(translated_vars);
- WRITE_INT_FIELD(num_child_cols);
- WRITE_ATTRNUMBER_ARRAY(parent_colnos, node->num_child_cols);
- WRITE_OID_FIELD(parent_reloid);
-}
-
-static void
-_outPlaceHolderInfo(StringInfo str, const PlaceHolderInfo *node)
-{
- WRITE_NODE_TYPE("PLACEHOLDERINFO");
-
- WRITE_UINT_FIELD(phid);
- WRITE_NODE_FIELD(ph_var);
- WRITE_BITMAPSET_FIELD(ph_eval_at);
- WRITE_BITMAPSET_FIELD(ph_lateral);
- WRITE_BITMAPSET_FIELD(ph_needed);
- WRITE_INT_FIELD(ph_width);
-}
-
-static void
-_outMinMaxAggInfo(StringInfo str, const MinMaxAggInfo *node)
-{
- WRITE_NODE_TYPE("MINMAXAGGINFO");
-
- WRITE_OID_FIELD(aggfnoid);
- WRITE_OID_FIELD(aggsortop);
- WRITE_NODE_FIELD(target);
- /* We intentionally omit subroot --- too large, not interesting enough */
- WRITE_NODE_FIELD(path);
- WRITE_FLOAT_FIELD(pathcost, "%.2f");
- WRITE_NODE_FIELD(param);
-}
-
-static void
-_outPlannerParamItem(StringInfo str, const PlannerParamItem *node)
-{
- WRITE_NODE_TYPE("PLANNERPARAMITEM");
-
- WRITE_NODE_FIELD(item);
- WRITE_INT_FIELD(paramId);
-}
-
-/*****************************************************************************
- *
- * Stuff from extensible.h
- *
- *****************************************************************************/
-
-static void
-_outExtensibleNode(StringInfo str, const ExtensibleNode *node)
-{
- const ExtensibleNodeMethods *methods;
-
- methods = GetExtensibleNodeMethods(node->extnodename, false);
-
- WRITE_NODE_TYPE("EXTENSIBLENODE");
-
- WRITE_STRING_FIELD(extnodename);
-
- /* serialize the private fields */
- methods->nodeOut(str, node);
-}
-
-/*****************************************************************************
- *
- * Stuff from parsenodes.h.
- *
- *****************************************************************************/
-
-/*
- * print the basic stuff of all nodes that inherit from CreateStmt
- */
-static void
-_outCreateStmtInfo(StringInfo str, const CreateStmt *node)
-{
- WRITE_NODE_FIELD(relation);
- WRITE_NODE_FIELD(tableElts);
- WRITE_NODE_FIELD(inhRelations);
- WRITE_NODE_FIELD(partspec);
- WRITE_NODE_FIELD(partbound);
- WRITE_NODE_FIELD(ofTypename);
- WRITE_NODE_FIELD(constraints);
- WRITE_NODE_FIELD(options);
- WRITE_ENUM_FIELD(oncommit, OnCommitAction);
- WRITE_STRING_FIELD(tablespacename);
- WRITE_STRING_FIELD(accessMethod);
- WRITE_BOOL_FIELD(if_not_exists);
-}
-
-static void
-_outCreateStmt(StringInfo str, const CreateStmt *node)
-{
- WRITE_NODE_TYPE("CREATESTMT");
-
- _outCreateStmtInfo(str, (const CreateStmt *) node);
-}
-
-static void
-_outCreateForeignTableStmt(StringInfo str, const CreateForeignTableStmt *node)
-{
- WRITE_NODE_TYPE("CREATEFOREIGNTABLESTMT");
-
- _outCreateStmtInfo(str, (const CreateStmt *) node);
-
- WRITE_STRING_FIELD(servername);
- WRITE_NODE_FIELD(options);
-}
-
-static void
-_outImportForeignSchemaStmt(StringInfo str, const ImportForeignSchemaStmt *node)
-{
- WRITE_NODE_TYPE("IMPORTFOREIGNSCHEMASTMT");
-
- WRITE_STRING_FIELD(server_name);
- WRITE_STRING_FIELD(remote_schema);
- WRITE_STRING_FIELD(local_schema);
- WRITE_ENUM_FIELD(list_type, ImportForeignSchemaType);
- WRITE_NODE_FIELD(table_list);
- WRITE_NODE_FIELD(options);
-}
-
-static void
-_outIndexStmt(StringInfo str, const IndexStmt *node)
-{
- WRITE_NODE_TYPE("INDEXSTMT");
-
- WRITE_STRING_FIELD(idxname);
- WRITE_NODE_FIELD(relation);
- WRITE_STRING_FIELD(accessMethod);
- WRITE_STRING_FIELD(tableSpace);
- WRITE_NODE_FIELD(indexParams);
- WRITE_NODE_FIELD(indexIncludingParams);
- WRITE_NODE_FIELD(options);
- WRITE_NODE_FIELD(whereClause);
- WRITE_NODE_FIELD(excludeOpNames);
- WRITE_STRING_FIELD(idxcomment);
- WRITE_OID_FIELD(indexOid);
- WRITE_OID_FIELD(oldNode);
- WRITE_UINT_FIELD(oldCreateSubid);
- WRITE_UINT_FIELD(oldFirstRelfilenodeSubid);
- WRITE_BOOL_FIELD(unique);
- WRITE_BOOL_FIELD(primary);
- WRITE_BOOL_FIELD(isconstraint);
- WRITE_BOOL_FIELD(deferrable);
- WRITE_BOOL_FIELD(initdeferred);
- WRITE_BOOL_FIELD(transformed);
- WRITE_BOOL_FIELD(concurrent);
- WRITE_BOOL_FIELD(if_not_exists);
- WRITE_BOOL_FIELD(reset_default_tblspc);
-}
-
-static void
-_outCreateStatsStmt(StringInfo str, const CreateStatsStmt *node)
-{
- WRITE_NODE_TYPE("CREATESTATSSTMT");
-
- WRITE_NODE_FIELD(defnames);
- WRITE_NODE_FIELD(stat_types);
- WRITE_NODE_FIELD(exprs);
- WRITE_NODE_FIELD(relations);
- WRITE_STRING_FIELD(stxcomment);
- WRITE_BOOL_FIELD(if_not_exists);
-}
-
-static void
-_outAlterStatsStmt(StringInfo str, const AlterStatsStmt *node)
-{
- WRITE_NODE_TYPE("ALTERSTATSSTMT");
-
- WRITE_NODE_FIELD(defnames);
- WRITE_INT_FIELD(stxstattarget);
- WRITE_BOOL_FIELD(missing_ok);
-}
-
-static void
-_outNotifyStmt(StringInfo str, const NotifyStmt *node)
-{
- WRITE_NODE_TYPE("NOTIFY");
-
- WRITE_STRING_FIELD(conditionname);
- WRITE_STRING_FIELD(payload);
-}
-
-static void
-_outDeclareCursorStmt(StringInfo str, const DeclareCursorStmt *node)
-{
- WRITE_NODE_TYPE("DECLARECURSOR");
-
- WRITE_STRING_FIELD(portalname);
- WRITE_INT_FIELD(options);
- WRITE_NODE_FIELD(query);
-}
-
-static void
-_outSelectStmt(StringInfo str, const SelectStmt *node)
-{
- WRITE_NODE_TYPE("SELECT");
-
- WRITE_NODE_FIELD(distinctClause);
- WRITE_NODE_FIELD(intoClause);
- WRITE_NODE_FIELD(targetList);
- WRITE_NODE_FIELD(fromClause);
- WRITE_NODE_FIELD(whereClause);
- WRITE_NODE_FIELD(groupClause);
- WRITE_NODE_FIELD(havingClause);
- WRITE_NODE_FIELD(windowClause);
- WRITE_NODE_FIELD(valuesLists);
- WRITE_NODE_FIELD(sortClause);
- WRITE_NODE_FIELD(limitOffset);
- WRITE_NODE_FIELD(limitCount);
- WRITE_ENUM_FIELD(limitOption, LimitOption);
- WRITE_NODE_FIELD(lockingClause);
- WRITE_NODE_FIELD(withClause);
- WRITE_ENUM_FIELD(op, SetOperation);
- WRITE_BOOL_FIELD(all);
- WRITE_NODE_FIELD(larg);
- WRITE_NODE_FIELD(rarg);
-}
-
-static void
-_outFuncCall(StringInfo str, const FuncCall *node)
-{
- WRITE_NODE_TYPE("FUNCCALL");
-
- WRITE_NODE_FIELD(funcname);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(agg_order);
- WRITE_NODE_FIELD(agg_filter);
- WRITE_BOOL_FIELD(agg_within_group);
- WRITE_BOOL_FIELD(agg_star);
- WRITE_BOOL_FIELD(agg_distinct);
- WRITE_BOOL_FIELD(func_variadic);
- WRITE_NODE_FIELD(over);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outDefElem(StringInfo str, const DefElem *node)
-{
- WRITE_NODE_TYPE("DEFELEM");
-
- WRITE_STRING_FIELD(defnamespace);
- WRITE_STRING_FIELD(defname);
- WRITE_NODE_FIELD(arg);
- WRITE_ENUM_FIELD(defaction, DefElemAction);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outTableLikeClause(StringInfo str, const TableLikeClause *node)
-{
- WRITE_NODE_TYPE("TABLELIKECLAUSE");
-
- WRITE_NODE_FIELD(relation);
- WRITE_UINT_FIELD(options);
- WRITE_OID_FIELD(relationOid);
-}
-
-static void
-_outLockingClause(StringInfo str, const LockingClause *node)
-{
- WRITE_NODE_TYPE("LOCKINGCLAUSE");
-
- WRITE_NODE_FIELD(lockedRels);
- WRITE_ENUM_FIELD(strength, LockClauseStrength);
- WRITE_ENUM_FIELD(waitPolicy, LockWaitPolicy);
-}
-
-static void
-_outXmlSerialize(StringInfo str, const XmlSerialize *node)
-{
- WRITE_NODE_TYPE("XMLSERIALIZE");
-
- WRITE_ENUM_FIELD(xmloption, XmlOptionType);
- WRITE_NODE_FIELD(expr);
- WRITE_NODE_FIELD(typeName);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outTriggerTransition(StringInfo str, const TriggerTransition *node)
-{
- WRITE_NODE_TYPE("TRIGGERTRANSITION");
-
- WRITE_STRING_FIELD(name);
- WRITE_BOOL_FIELD(isNew);
- WRITE_BOOL_FIELD(isTable);
-}
-
-static void
-_outColumnDef(StringInfo str, const ColumnDef *node)
-{
- WRITE_NODE_TYPE("COLUMNDEF");
-
- WRITE_STRING_FIELD(colname);
- WRITE_NODE_FIELD(typeName);
- WRITE_INT_FIELD(inhcount);
- WRITE_BOOL_FIELD(is_local);
- WRITE_BOOL_FIELD(is_not_null);
- WRITE_BOOL_FIELD(is_from_type);
- WRITE_CHAR_FIELD(storage);
- WRITE_NODE_FIELD(raw_default);
- WRITE_NODE_FIELD(cooked_default);
- WRITE_CHAR_FIELD(identity);
- WRITE_NODE_FIELD(identitySequence);
- WRITE_CHAR_FIELD(generated);
- WRITE_NODE_FIELD(collClause);
- WRITE_OID_FIELD(collOid);
- WRITE_NODE_FIELD(constraints);
- WRITE_NODE_FIELD(fdwoptions);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outTypeName(StringInfo str, const TypeName *node)
-{
- WRITE_NODE_TYPE("TYPENAME");
-
- WRITE_NODE_FIELD(names);
- WRITE_OID_FIELD(typeOid);
- WRITE_BOOL_FIELD(setof);
- WRITE_BOOL_FIELD(pct_type);
- WRITE_NODE_FIELD(typmods);
- WRITE_INT_FIELD(typemod);
- WRITE_NODE_FIELD(arrayBounds);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outTypeCast(StringInfo str, const TypeCast *node)
-{
- WRITE_NODE_TYPE("TYPECAST");
-
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(typeName);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCollateClause(StringInfo str, const CollateClause *node)
-{
- WRITE_NODE_TYPE("COLLATECLAUSE");
-
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(collname);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outIndexElem(StringInfo str, const IndexElem *node)
-{
- WRITE_NODE_TYPE("INDEXELEM");
-
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(expr);
- WRITE_STRING_FIELD(indexcolname);
- WRITE_NODE_FIELD(collation);
- WRITE_NODE_FIELD(opclass);
- WRITE_NODE_FIELD(opclassopts);
- WRITE_ENUM_FIELD(ordering, SortByDir);
- WRITE_ENUM_FIELD(nulls_ordering, SortByNulls);
-}
-
-static void
-_outQuery(StringInfo str, const Query *node)
-{
- WRITE_NODE_TYPE("QUERY");
-
- WRITE_ENUM_FIELD(commandType, CmdType);
- WRITE_ENUM_FIELD(querySource, QuerySource);
- /* we intentionally do not print the queryId field */
- WRITE_BOOL_FIELD(canSetTag);
-
- /*
- * Hack to work around missing outfuncs routines for a lot of the
- * utility-statement node types. (The only one we actually *need* for
- * rules support is NotifyStmt.) Someday we ought to support 'em all, but
- * for the meantime do this to avoid getting lots of warnings when running
- * with debug_print_parse on.
- */
- if (node->utilityStmt)
- {
- switch (nodeTag(node->utilityStmt))
- {
- case T_CreateStmt:
- case T_IndexStmt:
- case T_NotifyStmt:
- case T_DeclareCursorStmt:
- WRITE_NODE_FIELD(utilityStmt);
- break;
- default:
- appendStringInfoString(str, " :utilityStmt ?");
- break;
- }
- }
- else
- appendStringInfoString(str, " :utilityStmt <>");
-
- WRITE_INT_FIELD(resultRelation);
- WRITE_BOOL_FIELD(hasAggs);
- WRITE_BOOL_FIELD(hasWindowFuncs);
- WRITE_BOOL_FIELD(hasTargetSRFs);
- WRITE_BOOL_FIELD(hasSubLinks);
- WRITE_BOOL_FIELD(hasDistinctOn);
- WRITE_BOOL_FIELD(hasRecursive);
- WRITE_BOOL_FIELD(hasModifyingCTE);
- WRITE_BOOL_FIELD(hasForUpdate);
- WRITE_BOOL_FIELD(hasRowSecurity);
- WRITE_NODE_FIELD(cteList);
- WRITE_NODE_FIELD(rtable);
- WRITE_NODE_FIELD(jointree);
- WRITE_NODE_FIELD(targetList);
- WRITE_ENUM_FIELD(override, OverridingKind);
- WRITE_NODE_FIELD(onConflict);
- WRITE_NODE_FIELD(returningList);
- WRITE_NODE_FIELD(groupClause);
- WRITE_NODE_FIELD(groupingSets);
- WRITE_NODE_FIELD(havingQual);
- WRITE_NODE_FIELD(windowClause);
- WRITE_NODE_FIELD(distinctClause);
- WRITE_NODE_FIELD(sortClause);
- WRITE_NODE_FIELD(limitOffset);
- WRITE_NODE_FIELD(limitCount);
- WRITE_ENUM_FIELD(limitOption, LimitOption);
- WRITE_NODE_FIELD(rowMarks);
- WRITE_NODE_FIELD(setOperations);
- WRITE_NODE_FIELD(constraintDeps);
- WRITE_NODE_FIELD(withCheckOptions);
- WRITE_LOCATION_FIELD(stmt_location);
- WRITE_INT_FIELD(stmt_len);
-}
-
-static void
-_outWithCheckOption(StringInfo str, const WithCheckOption *node)
-{
- WRITE_NODE_TYPE("WITHCHECKOPTION");
-
- WRITE_ENUM_FIELD(kind, WCOKind);
- WRITE_STRING_FIELD(relname);
- WRITE_STRING_FIELD(polname);
- WRITE_NODE_FIELD(qual);
- WRITE_BOOL_FIELD(cascaded);
-}
-
-static void
-_outSortGroupClause(StringInfo str, const SortGroupClause *node)
-{
- WRITE_NODE_TYPE("SORTGROUPCLAUSE");
-
- WRITE_UINT_FIELD(tleSortGroupRef);
- WRITE_OID_FIELD(eqop);
- WRITE_OID_FIELD(sortop);
- WRITE_BOOL_FIELD(nulls_first);
- WRITE_BOOL_FIELD(hashable);
-}
-
-static void
-_outGroupingSet(StringInfo str, const GroupingSet *node)
-{
- WRITE_NODE_TYPE("GROUPINGSET");
-
- WRITE_ENUM_FIELD(kind, GroupingSetKind);
- WRITE_NODE_FIELD(content);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outWindowClause(StringInfo str, const WindowClause *node)
-{
- WRITE_NODE_TYPE("WINDOWCLAUSE");
-
- WRITE_STRING_FIELD(name);
- WRITE_STRING_FIELD(refname);
- WRITE_NODE_FIELD(partitionClause);
- WRITE_NODE_FIELD(orderClause);
- WRITE_INT_FIELD(frameOptions);
- WRITE_NODE_FIELD(startOffset);
- WRITE_NODE_FIELD(endOffset);
- WRITE_OID_FIELD(startInRangeFunc);
- WRITE_OID_FIELD(endInRangeFunc);
- WRITE_OID_FIELD(inRangeColl);
- WRITE_BOOL_FIELD(inRangeAsc);
- WRITE_BOOL_FIELD(inRangeNullsFirst);
- WRITE_UINT_FIELD(winref);
- WRITE_BOOL_FIELD(copiedOrder);
-}
-
-static void
-_outRowMarkClause(StringInfo str, const RowMarkClause *node)
-{
- WRITE_NODE_TYPE("ROWMARKCLAUSE");
-
- WRITE_UINT_FIELD(rti);
- WRITE_ENUM_FIELD(strength, LockClauseStrength);
- WRITE_ENUM_FIELD(waitPolicy, LockWaitPolicy);
- WRITE_BOOL_FIELD(pushedDown);
-}
-
-static void
-_outWithClause(StringInfo str, const WithClause *node)
-{
- WRITE_NODE_TYPE("WITHCLAUSE");
-
- WRITE_NODE_FIELD(ctes);
- WRITE_BOOL_FIELD(recursive);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outCommonTableExpr(StringInfo str, const CommonTableExpr *node)
-{
- WRITE_NODE_TYPE("COMMONTABLEEXPR");
-
- WRITE_STRING_FIELD(ctename);
- WRITE_NODE_FIELD(aliascolnames);
- WRITE_ENUM_FIELD(ctematerialized, CTEMaterialize);
- WRITE_NODE_FIELD(ctequery);
- WRITE_LOCATION_FIELD(location);
- WRITE_BOOL_FIELD(cterecursive);
- WRITE_INT_FIELD(cterefcount);
- WRITE_NODE_FIELD(ctecolnames);
- WRITE_NODE_FIELD(ctecoltypes);
- WRITE_NODE_FIELD(ctecoltypmods);
- WRITE_NODE_FIELD(ctecolcollations);
-}
-
-static void
-_outSetOperationStmt(StringInfo str, const SetOperationStmt *node)
-{
- WRITE_NODE_TYPE("SETOPERATIONSTMT");
-
- WRITE_ENUM_FIELD(op, SetOperation);
- WRITE_BOOL_FIELD(all);
- WRITE_NODE_FIELD(larg);
- WRITE_NODE_FIELD(rarg);
- WRITE_NODE_FIELD(colTypes);
- WRITE_NODE_FIELD(colTypmods);
- WRITE_NODE_FIELD(colCollations);
- WRITE_NODE_FIELD(groupClauses);
-}
-
-static void
-_outRangeTblEntry(StringInfo str, const RangeTblEntry *node)
-{
- WRITE_NODE_TYPE("RTE");
-
- /* put alias + eref first to make dump more legible */
- WRITE_NODE_FIELD(alias);
- WRITE_NODE_FIELD(eref);
- WRITE_ENUM_FIELD(rtekind, RTEKind);
-
- switch (node->rtekind)
- {
- case RTE_RELATION:
- WRITE_OID_FIELD(relid);
- WRITE_CHAR_FIELD(relkind);
- WRITE_INT_FIELD(rellockmode);
- WRITE_NODE_FIELD(tablesample);
- break;
- case RTE_SUBQUERY:
- WRITE_NODE_FIELD(subquery);
- WRITE_BOOL_FIELD(security_barrier);
- break;
- case RTE_JOIN:
- WRITE_ENUM_FIELD(jointype, JoinType);
- WRITE_INT_FIELD(joinmergedcols);
- WRITE_NODE_FIELD(joinaliasvars);
- WRITE_NODE_FIELD(joinleftcols);
- WRITE_NODE_FIELD(joinrightcols);
- break;
- case RTE_FUNCTION:
- WRITE_NODE_FIELD(functions);
- WRITE_BOOL_FIELD(funcordinality);
- break;
- case RTE_TABLEFUNC:
- WRITE_NODE_FIELD(tablefunc);
- break;
- case RTE_VALUES:
- WRITE_NODE_FIELD(values_lists);
- WRITE_NODE_FIELD(coltypes);
- WRITE_NODE_FIELD(coltypmods);
- WRITE_NODE_FIELD(colcollations);
- break;
- case RTE_CTE:
- WRITE_STRING_FIELD(ctename);
- WRITE_UINT_FIELD(ctelevelsup);
- WRITE_BOOL_FIELD(self_reference);
- WRITE_NODE_FIELD(coltypes);
- WRITE_NODE_FIELD(coltypmods);
- WRITE_NODE_FIELD(colcollations);
- break;
- case RTE_NAMEDTUPLESTORE:
- WRITE_STRING_FIELD(enrname);
- WRITE_FLOAT_FIELD(enrtuples, "%.0f");
- WRITE_OID_FIELD(relid);
- WRITE_NODE_FIELD(coltypes);
- WRITE_NODE_FIELD(coltypmods);
- WRITE_NODE_FIELD(colcollations);
- break;
- case RTE_RESULT:
- /* no extra fields */
- break;
- default:
- elog(ERROR, "unrecognized RTE kind: %d", (int) node->rtekind);
- break;
- }
-
- WRITE_BOOL_FIELD(lateral);
- WRITE_BOOL_FIELD(inh);
- WRITE_BOOL_FIELD(inFromCl);
- WRITE_UINT_FIELD(requiredPerms);
- WRITE_OID_FIELD(checkAsUser);
- WRITE_BITMAPSET_FIELD(selectedCols);
- WRITE_BITMAPSET_FIELD(insertedCols);
- WRITE_BITMAPSET_FIELD(updatedCols);
- WRITE_BITMAPSET_FIELD(extraUpdatedCols);
- WRITE_NODE_FIELD(securityQuals);
-}
-
-static void
-_outRangeTblFunction(StringInfo str, const RangeTblFunction *node)
-{
- WRITE_NODE_TYPE("RANGETBLFUNCTION");
-
- WRITE_NODE_FIELD(funcexpr);
- WRITE_INT_FIELD(funccolcount);
- WRITE_NODE_FIELD(funccolnames);
- WRITE_NODE_FIELD(funccoltypes);
- WRITE_NODE_FIELD(funccoltypmods);
- WRITE_NODE_FIELD(funccolcollations);
- WRITE_BITMAPSET_FIELD(funcparams);
-}
-
-static void
-_outTableSampleClause(StringInfo str, const TableSampleClause *node)
-{
- WRITE_NODE_TYPE("TABLESAMPLECLAUSE");
-
- WRITE_OID_FIELD(tsmhandler);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(repeatable);
-}
-
-static void
-_outAExpr(StringInfo str, const A_Expr *node)
-{
- WRITE_NODE_TYPE("AEXPR");
-
- switch (node->kind)
- {
- case AEXPR_OP:
- appendStringInfoChar(str, ' ');
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_OP_ANY:
- appendStringInfoChar(str, ' ');
- WRITE_NODE_FIELD(name);
- appendStringInfoString(str, " ANY ");
- break;
- case AEXPR_OP_ALL:
- appendStringInfoChar(str, ' ');
- WRITE_NODE_FIELD(name);
- appendStringInfoString(str, " ALL ");
- break;
- case AEXPR_DISTINCT:
- appendStringInfoString(str, " DISTINCT ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_NOT_DISTINCT:
- appendStringInfoString(str, " NOT_DISTINCT ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_NULLIF:
- appendStringInfoString(str, " NULLIF ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_OF:
- appendStringInfoString(str, " OF ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_IN:
- appendStringInfoString(str, " IN ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_LIKE:
- appendStringInfoString(str, " LIKE ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_ILIKE:
- appendStringInfoString(str, " ILIKE ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_SIMILAR:
- appendStringInfoString(str, " SIMILAR ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_BETWEEN:
- appendStringInfoString(str, " BETWEEN ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_NOT_BETWEEN:
- appendStringInfoString(str, " NOT_BETWEEN ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_BETWEEN_SYM:
- appendStringInfoString(str, " BETWEEN_SYM ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_NOT_BETWEEN_SYM:
- appendStringInfoString(str, " NOT_BETWEEN_SYM ");
- WRITE_NODE_FIELD(name);
- break;
- case AEXPR_PAREN:
- appendStringInfoString(str, " PAREN");
- break;
- default:
- appendStringInfoString(str, " ??");
- break;
- }
-
- WRITE_NODE_FIELD(lexpr);
- WRITE_NODE_FIELD(rexpr);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outValue(StringInfo str, const Value *value)
-{
- switch (value->type)
- {
- case T_Integer:
- appendStringInfo(str, "%d", value->val.ival);
- break;
- case T_Float:
-
- /*
- * We assume the value is a valid numeric literal and so does not
- * need quoting.
- */
- appendStringInfoString(str, value->val.str);
- break;
- case T_String:
-
- /*
- * We use outToken to provide escaping of the string's content,
- * but we don't want it to do anything with an empty string.
- */
- appendStringInfoChar(str, '"');
- if (value->val.str[0] != '\0')
- outToken(str, value->val.str);
- appendStringInfoChar(str, '"');
- break;
- case T_BitString:
- /* internal representation already has leading 'b' */
- appendStringInfoString(str, value->val.str);
- break;
- case T_Null:
- /* this is seen only within A_Const, not in transformed trees */
- appendStringInfoString(str, "NULL");
- break;
- default:
- elog(ERROR, "unrecognized node type: %d", (int) value->type);
- break;
- }
-}
-
-static void
-_outColumnRef(StringInfo str, const ColumnRef *node)
-{
- WRITE_NODE_TYPE("COLUMNREF");
-
- WRITE_NODE_FIELD(fields);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outParamRef(StringInfo str, const ParamRef *node)
-{
- WRITE_NODE_TYPE("PARAMREF");
-
- WRITE_INT_FIELD(number);
- WRITE_LOCATION_FIELD(location);
-}
-
-/*
- * Node types found in raw parse trees (supported for debug purposes)
- */
-
-static void
-_outRawStmt(StringInfo str, const RawStmt *node)
-{
- WRITE_NODE_TYPE("RAWSTMT");
-
- WRITE_NODE_FIELD(stmt);
- WRITE_LOCATION_FIELD(stmt_location);
- WRITE_INT_FIELD(stmt_len);
-}
-
-static void
-_outAConst(StringInfo str, const A_Const *node)
-{
- WRITE_NODE_TYPE("A_CONST");
-
- appendStringInfoString(str, " :val ");
- _outValue(str, &(node->val));
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outA_Star(StringInfo str, const A_Star *node)
-{
- WRITE_NODE_TYPE("A_STAR");
-}
-
-static void
-_outA_Indices(StringInfo str, const A_Indices *node)
-{
- WRITE_NODE_TYPE("A_INDICES");
-
- WRITE_BOOL_FIELD(is_slice);
- WRITE_NODE_FIELD(lidx);
- WRITE_NODE_FIELD(uidx);
-}
-
-static void
-_outA_Indirection(StringInfo str, const A_Indirection *node)
-{
- WRITE_NODE_TYPE("A_INDIRECTION");
-
- WRITE_NODE_FIELD(arg);
- WRITE_NODE_FIELD(indirection);
-}
-
-static void
-_outA_ArrayExpr(StringInfo str, const A_ArrayExpr *node)
-{
- WRITE_NODE_TYPE("A_ARRAYEXPR");
-
- WRITE_NODE_FIELD(elements);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outResTarget(StringInfo str, const ResTarget *node)
-{
- WRITE_NODE_TYPE("RESTARGET");
-
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(indirection);
- WRITE_NODE_FIELD(val);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outMultiAssignRef(StringInfo str, const MultiAssignRef *node)
-{
- WRITE_NODE_TYPE("MULTIASSIGNREF");
-
- WRITE_NODE_FIELD(source);
- WRITE_INT_FIELD(colno);
- WRITE_INT_FIELD(ncolumns);
-}
-
-static void
-_outSortBy(StringInfo str, const SortBy *node)
-{
- WRITE_NODE_TYPE("SORTBY");
-
- WRITE_NODE_FIELD(node);
- WRITE_ENUM_FIELD(sortby_dir, SortByDir);
- WRITE_ENUM_FIELD(sortby_nulls, SortByNulls);
- WRITE_NODE_FIELD(useOp);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outWindowDef(StringInfo str, const WindowDef *node)
-{
- WRITE_NODE_TYPE("WINDOWDEF");
-
- WRITE_STRING_FIELD(name);
- WRITE_STRING_FIELD(refname);
- WRITE_NODE_FIELD(partitionClause);
- WRITE_NODE_FIELD(orderClause);
- WRITE_INT_FIELD(frameOptions);
- WRITE_NODE_FIELD(startOffset);
- WRITE_NODE_FIELD(endOffset);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outRangeSubselect(StringInfo str, const RangeSubselect *node)
-{
- WRITE_NODE_TYPE("RANGESUBSELECT");
-
- WRITE_BOOL_FIELD(lateral);
- WRITE_NODE_FIELD(subquery);
- WRITE_NODE_FIELD(alias);
-}
-
-static void
-_outRangeFunction(StringInfo str, const RangeFunction *node)
-{
- WRITE_NODE_TYPE("RANGEFUNCTION");
-
- WRITE_BOOL_FIELD(lateral);
- WRITE_BOOL_FIELD(ordinality);
- WRITE_BOOL_FIELD(is_rowsfrom);
- WRITE_NODE_FIELD(functions);
- WRITE_NODE_FIELD(alias);
- WRITE_NODE_FIELD(coldeflist);
-}
-
-static void
-_outRangeTableSample(StringInfo str, const RangeTableSample *node)
-{
- WRITE_NODE_TYPE("RANGETABLESAMPLE");
-
- WRITE_NODE_FIELD(relation);
- WRITE_NODE_FIELD(method);
- WRITE_NODE_FIELD(args);
- WRITE_NODE_FIELD(repeatable);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outRangeTableFunc(StringInfo str, const RangeTableFunc *node)
-{
- WRITE_NODE_TYPE("RANGETABLEFUNC");
-
- WRITE_BOOL_FIELD(lateral);
- WRITE_NODE_FIELD(docexpr);
- WRITE_NODE_FIELD(rowexpr);
- WRITE_NODE_FIELD(namespaces);
- WRITE_NODE_FIELD(columns);
- WRITE_NODE_FIELD(alias);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outRangeTableFuncCol(StringInfo str, const RangeTableFuncCol *node)
-{
- WRITE_NODE_TYPE("RANGETABLEFUNCCOL");
-
- WRITE_STRING_FIELD(colname);
- WRITE_NODE_FIELD(typeName);
- WRITE_BOOL_FIELD(for_ordinality);
- WRITE_BOOL_FIELD(is_not_null);
- WRITE_NODE_FIELD(colexpr);
- WRITE_NODE_FIELD(coldefexpr);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outConstraint(StringInfo str, const Constraint *node)
-{
- WRITE_NODE_TYPE("CONSTRAINT");
-
- WRITE_STRING_FIELD(conname);
- WRITE_BOOL_FIELD(deferrable);
- WRITE_BOOL_FIELD(initdeferred);
- WRITE_LOCATION_FIELD(location);
-
- appendStringInfoString(str, " :contype ");
- switch (node->contype)
- {
- case CONSTR_NULL:
- appendStringInfoString(str, "NULL");
- break;
-
- case CONSTR_NOTNULL:
- appendStringInfoString(str, "NOT_NULL");
- break;
-
- case CONSTR_DEFAULT:
- appendStringInfoString(str, "DEFAULT");
- WRITE_NODE_FIELD(raw_expr);
- WRITE_STRING_FIELD(cooked_expr);
- break;
-
- case CONSTR_IDENTITY:
- appendStringInfoString(str, "IDENTITY");
- WRITE_NODE_FIELD(raw_expr);
- WRITE_STRING_FIELD(cooked_expr);
- WRITE_CHAR_FIELD(generated_when);
- break;
-
- case CONSTR_GENERATED:
- appendStringInfoString(str, "GENERATED");
- WRITE_NODE_FIELD(raw_expr);
- WRITE_STRING_FIELD(cooked_expr);
- WRITE_CHAR_FIELD(generated_when);
- break;
-
- case CONSTR_CHECK:
- appendStringInfoString(str, "CHECK");
- WRITE_BOOL_FIELD(is_no_inherit);
- WRITE_NODE_FIELD(raw_expr);
- WRITE_STRING_FIELD(cooked_expr);
- break;
-
- case CONSTR_PRIMARY:
- appendStringInfoString(str, "PRIMARY_KEY");
- WRITE_NODE_FIELD(keys);
- WRITE_NODE_FIELD(including);
- WRITE_NODE_FIELD(options);
- WRITE_STRING_FIELD(indexname);
- WRITE_STRING_FIELD(indexspace);
- WRITE_BOOL_FIELD(reset_default_tblspc);
- /* access_method and where_clause not currently used */
- break;
-
- case CONSTR_UNIQUE:
- appendStringInfoString(str, "UNIQUE");
- WRITE_NODE_FIELD(keys);
- WRITE_NODE_FIELD(including);
- WRITE_NODE_FIELD(options);
- WRITE_STRING_FIELD(indexname);
- WRITE_STRING_FIELD(indexspace);
- WRITE_BOOL_FIELD(reset_default_tblspc);
- /* access_method and where_clause not currently used */
- break;
-
- case CONSTR_EXCLUSION:
- appendStringInfoString(str, "EXCLUSION");
- WRITE_NODE_FIELD(exclusions);
- WRITE_NODE_FIELD(including);
- WRITE_NODE_FIELD(options);
- WRITE_STRING_FIELD(indexname);
- WRITE_STRING_FIELD(indexspace);
- WRITE_BOOL_FIELD(reset_default_tblspc);
- WRITE_STRING_FIELD(access_method);
- WRITE_NODE_FIELD(where_clause);
- break;
-
- case CONSTR_FOREIGN:
- appendStringInfoString(str, "FOREIGN_KEY");
- WRITE_NODE_FIELD(pktable);
- WRITE_NODE_FIELD(fk_attrs);
- WRITE_NODE_FIELD(pk_attrs);
- WRITE_CHAR_FIELD(fk_matchtype);
- WRITE_CHAR_FIELD(fk_upd_action);
- WRITE_CHAR_FIELD(fk_del_action);
- WRITE_NODE_FIELD(old_conpfeqop);
- WRITE_OID_FIELD(old_pktable_oid);
- WRITE_BOOL_FIELD(skip_validation);
- WRITE_BOOL_FIELD(initially_valid);
- break;
-
- case CONSTR_ATTR_DEFERRABLE:
- appendStringInfoString(str, "ATTR_DEFERRABLE");
- break;
-
- case CONSTR_ATTR_NOT_DEFERRABLE:
- appendStringInfoString(str, "ATTR_NOT_DEFERRABLE");
- break;
-
- case CONSTR_ATTR_DEFERRED:
- appendStringInfoString(str, "ATTR_DEFERRED");
- break;
-
- case CONSTR_ATTR_IMMEDIATE:
- appendStringInfoString(str, "ATTR_IMMEDIATE");
- break;
-
- default:
- appendStringInfo(str, "<unrecognized_constraint %d>",
- (int) node->contype);
- break;
- }
-}
-
-static void
-_outForeignKeyCacheInfo(StringInfo str, const ForeignKeyCacheInfo *node)
-{
- WRITE_NODE_TYPE("FOREIGNKEYCACHEINFO");
-
- WRITE_OID_FIELD(conoid);
- WRITE_OID_FIELD(conrelid);
- WRITE_OID_FIELD(confrelid);
- WRITE_INT_FIELD(nkeys);
- WRITE_ATTRNUMBER_ARRAY(conkey, node->nkeys);
- WRITE_ATTRNUMBER_ARRAY(confkey, node->nkeys);
- WRITE_OID_ARRAY(conpfeqop, node->nkeys);
-}
-
-static void
-_outPartitionElem(StringInfo str, const PartitionElem *node)
-{
- WRITE_NODE_TYPE("PARTITIONELEM");
-
- WRITE_STRING_FIELD(name);
- WRITE_NODE_FIELD(expr);
- WRITE_NODE_FIELD(collation);
- WRITE_NODE_FIELD(opclass);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outPartitionSpec(StringInfo str, const PartitionSpec *node)
-{
- WRITE_NODE_TYPE("PARTITIONSPEC");
-
- WRITE_STRING_FIELD(strategy);
- WRITE_NODE_FIELD(partParams);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outPartitionBoundSpec(StringInfo str, const PartitionBoundSpec *node)
-{
- WRITE_NODE_TYPE("PARTITIONBOUNDSPEC");
-
- WRITE_CHAR_FIELD(strategy);
- WRITE_BOOL_FIELD(is_default);
- WRITE_INT_FIELD(modulus);
- WRITE_INT_FIELD(remainder);
- WRITE_NODE_FIELD(listdatums);
- WRITE_NODE_FIELD(lowerdatums);
- WRITE_NODE_FIELD(upperdatums);
- WRITE_LOCATION_FIELD(location);
-}
-
-static void
-_outPartitionRangeDatum(StringInfo str, const PartitionRangeDatum *node)
-{
- WRITE_NODE_TYPE("PARTITIONRANGEDATUM");
-
- WRITE_ENUM_FIELD(kind, PartitionRangeDatumKind);
- WRITE_NODE_FIELD(value);
- WRITE_LOCATION_FIELD(location);
-}
-
-/*
- * outNode -
- * converts a Node into ascii string and append it to 'str'
- */
-void
-outNode(StringInfo str, const void *obj)
-{
- /* Guard against stack overflow due to overly complex expressions */
- check_stack_depth();
-
- if (obj == NULL)
- appendStringInfoString(str, "<>");
- else if (IsA(obj, List) || IsA(obj, IntList) || IsA(obj, OidList))
- _outList(str, obj);
- else if (IsA(obj, Integer) ||
- IsA(obj, Float) ||
- IsA(obj, String) ||
- IsA(obj, BitString))
- {
- /* nodeRead does not want to see { } around these! */
- _outValue(str, obj);
- }
- else
- {
- appendStringInfoChar(str, '{');
- switch (nodeTag(obj))
- {
- case T_PlannedStmt:
- _outPlannedStmt(str, obj);
- break;
- case T_Plan:
- _outPlan(str, obj);
- break;
- case T_Result:
- _outResult(str, obj);
- break;
- case T_ProjectSet:
- _outProjectSet(str, obj);
- break;
- case T_ModifyTable:
- _outModifyTable(str, obj);
- break;
- case T_Append:
- _outAppend(str, obj);
- break;
- case T_MergeAppend:
- _outMergeAppend(str, obj);
- break;
- case T_RecursiveUnion:
- _outRecursiveUnion(str, obj);
- break;
- case T_BitmapAnd:
- _outBitmapAnd(str, obj);
- break;
- case T_BitmapOr:
- _outBitmapOr(str, obj);
- break;
- case T_Gather:
- _outGather(str, obj);
- break;
- case T_GatherMerge:
- _outGatherMerge(str, obj);
- break;
- case T_Scan:
- _outScan(str, obj);
- break;
- case T_SeqScan:
- _outSeqScan(str, obj);
- break;
- case T_SampleScan:
- _outSampleScan(str, obj);
- break;
- case T_IndexScan:
- _outIndexScan(str, obj);
- break;
- case T_IndexOnlyScan:
- _outIndexOnlyScan(str, obj);
- break;
- case T_BitmapIndexScan:
- _outBitmapIndexScan(str, obj);
- break;
- case T_BitmapHeapScan:
- _outBitmapHeapScan(str, obj);
- break;
- case T_TidScan:
- _outTidScan(str, obj);
- break;
- case T_SubqueryScan:
- _outSubqueryScan(str, obj);
- break;
- case T_FunctionScan:
- _outFunctionScan(str, obj);
- break;
- case T_TableFuncScan:
- _outTableFuncScan(str, obj);
- break;
- case T_ValuesScan:
- _outValuesScan(str, obj);
- break;
- case T_CteScan:
- _outCteScan(str, obj);
- break;
- case T_NamedTuplestoreScan:
- _outNamedTuplestoreScan(str, obj);
- break;
- case T_WorkTableScan:
- _outWorkTableScan(str, obj);
- break;
- case T_ForeignScan:
- _outForeignScan(str, obj);
- break;
- case T_CustomScan:
- _outCustomScan(str, obj);
- break;
- case T_Join:
- _outJoin(str, obj);
- break;
- case T_NestLoop:
- _outNestLoop(str, obj);
- break;
- case T_MergeJoin:
- _outMergeJoin(str, obj);
- break;
- case T_HashJoin:
- _outHashJoin(str, obj);
- break;
- case T_Agg:
- _outAgg(str, obj);
- break;
- case T_WindowAgg:
- _outWindowAgg(str, obj);
- break;
- case T_Group:
- _outGroup(str, obj);
- break;
- case T_Material:
- _outMaterial(str, obj);
- break;
- case T_Sort:
- _outSort(str, obj);
- break;
- case T_IncrementalSort:
- _outIncrementalSort(str, obj);
- break;
- case T_Unique:
- _outUnique(str, obj);
- break;
- case T_Hash:
- _outHash(str, obj);
- break;
- case T_SetOp:
- _outSetOp(str, obj);
- break;
- case T_LockRows:
- _outLockRows(str, obj);
- break;
- case T_Limit:
- _outLimit(str, obj);
- break;
- case T_NestLoopParam:
- _outNestLoopParam(str, obj);
- break;
- case T_PlanRowMark:
- _outPlanRowMark(str, obj);
- break;
- case T_PartitionPruneInfo:
- _outPartitionPruneInfo(str, obj);
- break;
- case T_PartitionedRelPruneInfo:
- _outPartitionedRelPruneInfo(str, obj);
- break;
- case T_PartitionPruneStepOp:
- _outPartitionPruneStepOp(str, obj);
- break;
- case T_PartitionPruneStepCombine:
- _outPartitionPruneStepCombine(str, obj);
- break;
- case T_PlanInvalItem:
- _outPlanInvalItem(str, obj);
- break;
- case T_Alias:
- _outAlias(str, obj);
- break;
- case T_RangeVar:
- _outRangeVar(str, obj);
- break;
- case T_TableFunc:
- _outTableFunc(str, obj);
- break;
- case T_IntoClause:
- _outIntoClause(str, obj);
- break;
- case T_Var:
- _outVar(str, obj);
- break;
- case T_Const:
- _outConst(str, obj);
- break;
- case T_Param:
- _outParam(str, obj);
- break;
- case T_Aggref:
- _outAggref(str, obj);
- break;
- case T_GroupingFunc:
- _outGroupingFunc(str, obj);
- break;
- case T_WindowFunc:
- _outWindowFunc(str, obj);
- break;
- case T_SubscriptingRef:
- _outSubscriptingRef(str, obj);
- break;
- case T_FuncExpr:
- _outFuncExpr(str, obj);
- break;
- case T_NamedArgExpr:
- _outNamedArgExpr(str, obj);
- break;
- case T_OpExpr:
- _outOpExpr(str, obj);
- break;
- case T_DistinctExpr:
- _outDistinctExpr(str, obj);
- break;
- case T_NullIfExpr:
- _outNullIfExpr(str, obj);
- break;
- case T_ScalarArrayOpExpr:
- _outScalarArrayOpExpr(str, obj);
- break;
- case T_BoolExpr:
- _outBoolExpr(str, obj);
- break;
- case T_SubLink:
- _outSubLink(str, obj);
- break;
- case T_SubPlan:
- _outSubPlan(str, obj);
- break;
- case T_AlternativeSubPlan:
- _outAlternativeSubPlan(str, obj);
- break;
- case T_FieldSelect:
- _outFieldSelect(str, obj);
- break;
- case T_FieldStore:
- _outFieldStore(str, obj);
- break;
- case T_RelabelType:
- _outRelabelType(str, obj);
- break;
- case T_CoerceViaIO:
- _outCoerceViaIO(str, obj);
- break;
- case T_ArrayCoerceExpr:
- _outArrayCoerceExpr(str, obj);
- break;
- case T_ConvertRowtypeExpr:
- _outConvertRowtypeExpr(str, obj);
- break;
- case T_CollateExpr:
- _outCollateExpr(str, obj);
- break;
- case T_CaseExpr:
- _outCaseExpr(str, obj);
- break;
- case T_CaseWhen:
- _outCaseWhen(str, obj);
- break;
- case T_CaseTestExpr:
- _outCaseTestExpr(str, obj);
- break;
- case T_ArrayExpr:
- _outArrayExpr(str, obj);
- break;
- case T_RowExpr:
- _outRowExpr(str, obj);
- break;
- case T_RowCompareExpr:
- _outRowCompareExpr(str, obj);
- break;
- case T_CoalesceExpr:
- _outCoalesceExpr(str, obj);
- break;
- case T_MinMaxExpr:
- _outMinMaxExpr(str, obj);
- break;
- case T_SQLValueFunction:
- _outSQLValueFunction(str, obj);
- break;
- case T_XmlExpr:
- _outXmlExpr(str, obj);
- break;
- case T_NullTest:
- _outNullTest(str, obj);
- break;
- case T_BooleanTest:
- _outBooleanTest(str, obj);
- break;
- case T_CoerceToDomain:
- _outCoerceToDomain(str, obj);
- break;
- case T_CoerceToDomainValue:
- _outCoerceToDomainValue(str, obj);
- break;
- case T_SetToDefault:
- _outSetToDefault(str, obj);
- break;
- case T_CurrentOfExpr:
- _outCurrentOfExpr(str, obj);
- break;
- case T_NextValueExpr:
- _outNextValueExpr(str, obj);
- break;
- case T_InferenceElem:
- _outInferenceElem(str, obj);
- break;
- case T_TargetEntry:
- _outTargetEntry(str, obj);
- break;
- case T_RangeTblRef:
- _outRangeTblRef(str, obj);
- break;
- case T_JoinExpr:
- _outJoinExpr(str, obj);
- break;
- case T_FromExpr:
- _outFromExpr(str, obj);
- break;
- case T_OnConflictExpr:
- _outOnConflictExpr(str, obj);
- break;
- case T_Path:
- _outPath(str, obj);
- break;
- case T_IndexPath:
- _outIndexPath(str, obj);
- break;
- case T_BitmapHeapPath:
- _outBitmapHeapPath(str, obj);
- break;
- case T_BitmapAndPath:
- _outBitmapAndPath(str, obj);
- break;
- case T_BitmapOrPath:
- _outBitmapOrPath(str, obj);
- break;
- case T_TidPath:
- _outTidPath(str, obj);
- break;
- case T_SubqueryScanPath:
- _outSubqueryScanPath(str, obj);
- break;
- case T_ForeignPath:
- _outForeignPath(str, obj);
- break;
- case T_CustomPath:
- _outCustomPath(str, obj);
- break;
- case T_AppendPath:
- _outAppendPath(str, obj);
- break;
- case T_MergeAppendPath:
- _outMergeAppendPath(str, obj);
- break;
- case T_GroupResultPath:
- _outGroupResultPath(str, obj);
- break;
- case T_MaterialPath:
- _outMaterialPath(str, obj);
- break;
- case T_UniquePath:
- _outUniquePath(str, obj);
- break;
- case T_GatherPath:
- _outGatherPath(str, obj);
- break;
- case T_ProjectionPath:
- _outProjectionPath(str, obj);
- break;
- case T_ProjectSetPath:
- _outProjectSetPath(str, obj);
- break;
- case T_SortPath:
- _outSortPath(str, obj);
- break;
- case T_IncrementalSortPath:
- _outIncrementalSortPath(str, obj);
- break;
- case T_GroupPath:
- _outGroupPath(str, obj);
- break;
- case T_UpperUniquePath:
- _outUpperUniquePath(str, obj);
- break;
- case T_AggPath:
- _outAggPath(str, obj);
- break;
- case T_GroupingSetsPath:
- _outGroupingSetsPath(str, obj);
- break;
- case T_MinMaxAggPath:
- _outMinMaxAggPath(str, obj);
- break;
- case T_WindowAggPath:
- _outWindowAggPath(str, obj);
- break;
- case T_SetOpPath:
- _outSetOpPath(str, obj);
- break;
- case T_RecursiveUnionPath:
- _outRecursiveUnionPath(str, obj);
- break;
- case T_LockRowsPath:
- _outLockRowsPath(str, obj);
- break;
- case T_ModifyTablePath:
- _outModifyTablePath(str, obj);
- break;
- case T_LimitPath:
- _outLimitPath(str, obj);
- break;
- case T_GatherMergePath:
- _outGatherMergePath(str, obj);
- break;
- case T_NestPath:
- _outNestPath(str, obj);
- break;
- case T_MergePath:
- _outMergePath(str, obj);
- break;
- case T_HashPath:
- _outHashPath(str, obj);
- break;
- case T_PlannerGlobal:
- _outPlannerGlobal(str, obj);
- break;
- case T_PlannerInfo:
- _outPlannerInfo(str, obj);
- break;
- case T_RelOptInfo:
- _outRelOptInfo(str, obj);
- break;
- case T_IndexOptInfo:
- _outIndexOptInfo(str, obj);
- break;
- case T_ForeignKeyOptInfo:
- _outForeignKeyOptInfo(str, obj);
- break;
- case T_EquivalenceClass:
- _outEquivalenceClass(str, obj);
- break;
- case T_EquivalenceMember:
- _outEquivalenceMember(str, obj);
- break;
- case T_PathKey:
- _outPathKey(str, obj);
- break;
- case T_PathTarget:
- _outPathTarget(str, obj);
- break;
- case T_ParamPathInfo:
- _outParamPathInfo(str, obj);
- break;
- case T_RestrictInfo:
- _outRestrictInfo(str, obj);
- break;
- case T_IndexClause:
- _outIndexClause(str, obj);
- break;
- case T_PlaceHolderVar:
- _outPlaceHolderVar(str, obj);
- break;
- case T_SpecialJoinInfo:
- _outSpecialJoinInfo(str, obj);
- break;
- case T_AppendRelInfo:
- _outAppendRelInfo(str, obj);
- break;
- case T_PlaceHolderInfo:
- _outPlaceHolderInfo(str, obj);
- break;
- case T_MinMaxAggInfo:
- _outMinMaxAggInfo(str, obj);
- break;
- case T_PlannerParamItem:
- _outPlannerParamItem(str, obj);
- break;
- case T_RollupData:
- _outRollupData(str, obj);
- break;
- case T_GroupingSetData:
- _outGroupingSetData(str, obj);
- break;
- case T_StatisticExtInfo:
- _outStatisticExtInfo(str, obj);
- break;
- case T_ExtensibleNode:
- _outExtensibleNode(str, obj);
- break;
- case T_CreateStmt:
- _outCreateStmt(str, obj);
- break;
- case T_CreateForeignTableStmt:
- _outCreateForeignTableStmt(str, obj);
- break;
- case T_ImportForeignSchemaStmt:
- _outImportForeignSchemaStmt(str, obj);
- break;
- case T_IndexStmt:
- _outIndexStmt(str, obj);
- break;
- case T_CreateStatsStmt:
- _outCreateStatsStmt(str, obj);
- break;
- case T_AlterStatsStmt:
- _outAlterStatsStmt(str, obj);
- break;
- case T_NotifyStmt:
- _outNotifyStmt(str, obj);
- break;
- case T_DeclareCursorStmt:
- _outDeclareCursorStmt(str, obj);
- break;
- case T_SelectStmt:
- _outSelectStmt(str, obj);
- break;
- case T_ColumnDef:
- _outColumnDef(str, obj);
- break;
- case T_TypeName:
- _outTypeName(str, obj);
- break;
- case T_TypeCast:
- _outTypeCast(str, obj);
- break;
- case T_CollateClause:
- _outCollateClause(str, obj);
- break;
- case T_IndexElem:
- _outIndexElem(str, obj);
- break;
- case T_Query:
- _outQuery(str, obj);
- break;
- case T_WithCheckOption:
- _outWithCheckOption(str, obj);
- break;
- case T_SortGroupClause:
- _outSortGroupClause(str, obj);
- break;
- case T_GroupingSet:
- _outGroupingSet(str, obj);
- break;
- case T_WindowClause:
- _outWindowClause(str, obj);
- break;
- case T_RowMarkClause:
- _outRowMarkClause(str, obj);
- break;
- case T_WithClause:
- _outWithClause(str, obj);
- break;
- case T_CommonTableExpr:
- _outCommonTableExpr(str, obj);
- break;
- case T_SetOperationStmt:
- _outSetOperationStmt(str, obj);
- break;
- case T_RangeTblEntry:
- _outRangeTblEntry(str, obj);
- break;
- case T_RangeTblFunction:
- _outRangeTblFunction(str, obj);
- break;
- case T_TableSampleClause:
- _outTableSampleClause(str, obj);
- break;
- case T_A_Expr:
- _outAExpr(str, obj);
- break;
- case T_ColumnRef:
- _outColumnRef(str, obj);
- break;
- case T_ParamRef:
- _outParamRef(str, obj);
- break;
- case T_RawStmt:
- _outRawStmt(str, obj);
- break;
- case T_A_Const:
- _outAConst(str, obj);
- break;
- case T_A_Star:
- _outA_Star(str, obj);
- break;
- case T_A_Indices:
- _outA_Indices(str, obj);
- break;
- case T_A_Indirection:
- _outA_Indirection(str, obj);
- break;
- case T_A_ArrayExpr:
- _outA_ArrayExpr(str, obj);
- break;
- case T_ResTarget:
- _outResTarget(str, obj);
- break;
- case T_MultiAssignRef:
- _outMultiAssignRef(str, obj);
- break;
- case T_SortBy:
- _outSortBy(str, obj);
- break;
- case T_WindowDef:
- _outWindowDef(str, obj);
- break;
- case T_RangeSubselect:
- _outRangeSubselect(str, obj);
- break;
- case T_RangeFunction:
- _outRangeFunction(str, obj);
- break;
- case T_RangeTableSample:
- _outRangeTableSample(str, obj);
- break;
- case T_RangeTableFunc:
- _outRangeTableFunc(str, obj);
- break;
- case T_RangeTableFuncCol:
- _outRangeTableFuncCol(str, obj);
- break;
- case T_Constraint:
- _outConstraint(str, obj);
- break;
- case T_FuncCall:
- _outFuncCall(str, obj);
- break;
- case T_DefElem:
- _outDefElem(str, obj);
- break;
- case T_TableLikeClause:
- _outTableLikeClause(str, obj);
- break;
- case T_LockingClause:
- _outLockingClause(str, obj);
- break;
- case T_XmlSerialize:
- _outXmlSerialize(str, obj);
- break;
- case T_ForeignKeyCacheInfo:
- _outForeignKeyCacheInfo(str, obj);
- break;
- case T_TriggerTransition:
- _outTriggerTransition(str, obj);
- break;
- case T_PartitionElem:
- _outPartitionElem(str, obj);
- break;
- case T_PartitionSpec:
- _outPartitionSpec(str, obj);
- break;
- case T_PartitionBoundSpec:
- _outPartitionBoundSpec(str, obj);
- break;
- case T_PartitionRangeDatum:
- _outPartitionRangeDatum(str, obj);
- break;
-
- default:
-
- /*
- * This should be an ERROR, but it's too useful to be able to
- * dump structures that outNode only understands part of.
- */
- elog(WARNING, "could not dump unrecognized node type: %d",
- (int) nodeTag(obj));
- break;
- }
- appendStringInfoChar(str, '}');
- }
-}
-
-/*
- * nodeToString -
- * returns the ascii representation of the Node as a palloc'd string
- */
-char *
-nodeToString(const void *obj)
-{
- StringInfoData str;
-
- /* see stringinfo.h for an explanation of this maneuver */
- initStringInfo(&str);
- outNode(&str, obj);
- return str.data;
-}
-
-/*
- * bmsToString -
- * returns the ascii representation of the Bitmapset as a palloc'd string
- */
-char *
-bmsToString(const Bitmapset *bms)
-{
- StringInfoData str;
-
- /* see stringinfo.h for an explanation of this maneuver */
- initStringInfo(&str);
- outBitmapset(&str, bms);
- return str.data;
+/*-------------------------------------------------------------------------
+ *
+ * outfuncs.c
+ * Output functions for Postgres tree nodes.
+ *
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ *
+ * IDENTIFICATION
+ * src/backend/nodes/outfuncs.c
+ *
+ * NOTES
+ * Every node type that can appear in stored rules' parsetrees *must*
+ * have an output function defined here (as well as an input function
+ * in readfuncs.c). In addition, plan nodes should have input and
+ * output functions so that they can be sent to parallel workers.
+ *
+ * For use in debugging, we also provide output functions for nodes
+ * that appear in raw parsetrees and planner Paths. These node types
+ * need not have input functions. Output support for raw parsetrees
+ * is somewhat incomplete, too; in particular, utility statements are
+ * almost entirely unsupported. We try to support everything that can
+ * appear in a raw SELECT, though.
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "postgres.h"
+
+#include <ctype.h>
+
+#include "lib/stringinfo.h"
+#include "miscadmin.h"
+#include "nodes/extensible.h"
+#include "nodes/pathnodes.h"
+#include "nodes/plannodes.h"
+#include "utils/datum.h"
+#include "utils/rel.h"
+
+static void outChar(StringInfo str, char c);
+
+
+/*
+ * Macros to simplify output of different kinds of fields. Use these
+ * wherever possible to reduce the chance for silly typos. Note that these
+ * hard-wire conventions about the names of the local variables in an Out
+ * routine.
+ */
+
+/* Write the label for the node type */
+#define WRITE_NODE_TYPE(nodelabel) \
+ appendStringInfoString(str, nodelabel)
+
+/* Write an integer field (anything written as ":fldname %d") */
+#define WRITE_INT_FIELD(fldname) \
+ appendStringInfo(str, " :" CppAsString(fldname) " %d", node->fldname)
+
+/* Write an unsigned integer field (anything written as ":fldname %u") */
+#define WRITE_UINT_FIELD(fldname) \
+ appendStringInfo(str, " :" CppAsString(fldname) " %u", node->fldname)
+
+/* Write an unsigned integer field (anything written with UINT64_FORMAT) */
+#define WRITE_UINT64_FIELD(fldname) \
+ appendStringInfo(str, " :" CppAsString(fldname) " " UINT64_FORMAT, \
+ node->fldname)
+
+/* Write an OID field (don't hard-wire assumption that OID is same as uint) */
+#define WRITE_OID_FIELD(fldname) \
+ appendStringInfo(str, " :" CppAsString(fldname) " %u", node->fldname)
+
+/* Write a long-integer field */
+#define WRITE_LONG_FIELD(fldname) \
+ appendStringInfo(str, " :" CppAsString(fldname) " %ld", node->fldname)
+
+/* Write a char field (ie, one ascii character) */
+#define WRITE_CHAR_FIELD(fldname) \
+ (appendStringInfo(str, " :" CppAsString(fldname) " "), \
+ outChar(str, node->fldname))
+
+/* Write an enumerated-type field as an integer code */
+#define WRITE_ENUM_FIELD(fldname, enumtype) \
+ appendStringInfo(str, " :" CppAsString(fldname) " %d", \
+ (int) node->fldname)
+
+/* Write a float field --- caller must give format to define precision */
+#define WRITE_FLOAT_FIELD(fldname,format) \
+ appendStringInfo(str, " :" CppAsString(fldname) " " format, node->fldname)
+
+/* Write a boolean field */
+#define WRITE_BOOL_FIELD(fldname) \
+ appendStringInfo(str, " :" CppAsString(fldname) " %s", \
+ booltostr(node->fldname))
+
+/* Write a character-string (possibly NULL) field */
+#define WRITE_STRING_FIELD(fldname) \
+ (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
+ outToken(str, node->fldname))
+
+/* Write a parse location field (actually same as INT case) */
+#define WRITE_LOCATION_FIELD(fldname) \
+ appendStringInfo(str, " :" CppAsString(fldname) " %d", node->fldname)
+
+/* Write a Node field */
+#define WRITE_NODE_FIELD(fldname) \
+ (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
+ outNode(str, node->fldname))
+
+/* Write a bitmapset field */
+#define WRITE_BITMAPSET_FIELD(fldname) \
+ (appendStringInfoString(str, " :" CppAsString(fldname) " "), \
+ outBitmapset(str, node->fldname))
+
+#define WRITE_ATTRNUMBER_ARRAY(fldname, len) \
+ do { \
+ appendStringInfoString(str, " :" CppAsString(fldname) " "); \
+ for (int i = 0; i < len; i++) \
+ appendStringInfo(str, " %d", node->fldname[i]); \
+ } while(0)
+
+#define WRITE_OID_ARRAY(fldname, len) \
+ do { \
+ appendStringInfoString(str, " :" CppAsString(fldname) " "); \
+ for (int i = 0; i < len; i++) \
+ appendStringInfo(str, " %u", node->fldname[i]); \
+ } while(0)
+
+#define WRITE_INT_ARRAY(fldname, len) \
+ do { \
+ appendStringInfoString(str, " :" CppAsString(fldname) " "); \
+ for (int i = 0; i < len; i++) \
+ appendStringInfo(str, " %d", node->fldname[i]); \
+ } while(0)
+
+#define WRITE_BOOL_ARRAY(fldname, len) \
+ do { \
+ appendStringInfoString(str, " :" CppAsString(fldname) " "); \
+ for (int i = 0; i < len; i++) \
+ appendStringInfo(str, " %s", booltostr(node->fldname[i])); \
+ } while(0)
+
+
+#define booltostr(x) ((x) ? "true" : "false")
+
+
+/*
+ * outToken
+ * Convert an ordinary string (eg, an identifier) into a form that
+ * will be decoded back to a plain token by read.c's functions.
+ *
+ * If a null or empty string is given, it is encoded as "<>".
+ */
+void
+outToken(StringInfo str, const char *s)
+{
+ if (s == NULL || *s == '\0')
+ {
+ appendStringInfoString(str, "<>");
+ return;
+ }
+
+ /*
+ * Look for characters or patterns that are treated specially by read.c
+ * (either in pg_strtok() or in nodeRead()), and therefore need a
+ * protective backslash.
+ */
+ /* These characters only need to be quoted at the start of the string */
+ if (*s == '<' ||
+ *s == '"' ||
+ isdigit((unsigned char) *s) ||
+ ((*s == '+' || *s == '-') &&
+ (isdigit((unsigned char) s[1]) || s[1] == '.')))
+ appendStringInfoChar(str, '\\');
+ while (*s)
+ {
+ /* These chars must be backslashed anywhere in the string */
+ if (*s == ' ' || *s == '\n' || *s == '\t' ||
+ *s == '(' || *s == ')' || *s == '{' || *s == '}' ||
+ *s == '\\')
+ appendStringInfoChar(str, '\\');
+ appendStringInfoChar(str, *s++);
+ }
+}
+
+/*
+ * Convert one char. Goes through outToken() so that special characters are
+ * escaped.
+ */
+static void
+outChar(StringInfo str, char c)
+{
+ char in[2];
+
+ in[0] = c;
+ in[1] = '\0';
+
+ outToken(str, in);
+}
+
+static void
+_outList(StringInfo str, const List *node)
+{
+ const ListCell *lc;
+
+ appendStringInfoChar(str, '(');
+
+ if (IsA(node, IntList))
+ appendStringInfoChar(str, 'i');
+ else if (IsA(node, OidList))
+ appendStringInfoChar(str, 'o');
+
+ foreach(lc, node)
+ {
+ /*
+ * For the sake of backward compatibility, we emit a slightly
+ * different whitespace format for lists of nodes vs. other types of
+ * lists. XXX: is this necessary?
+ */
+ if (IsA(node, List))
+ {
+ outNode(str, lfirst(lc));
+ if (lnext(node, lc))
+ appendStringInfoChar(str, ' ');
+ }
+ else if (IsA(node, IntList))
+ appendStringInfo(str, " %d", lfirst_int(lc));
+ else if (IsA(node, OidList))
+ appendStringInfo(str, " %u", lfirst_oid(lc));
+ else
+ elog(ERROR, "unrecognized list node type: %d",
+ (int) node->type);
+ }
+
+ appendStringInfoChar(str, ')');
+}
+
+/*
+ * outBitmapset -
+ * converts a bitmap set of integers
+ *
+ * Note: the output format is "(b int int ...)", similar to an integer List.
+ */
+void
+outBitmapset(StringInfo str, const Bitmapset *bms)
+{
+ int x;
+
+ appendStringInfoChar(str, '(');
+ appendStringInfoChar(str, 'b');
+ x = -1;
+ while ((x = bms_next_member(bms, x)) >= 0)
+ appendStringInfo(str, " %d", x);
+ appendStringInfoChar(str, ')');
+}
+
+/*
+ * Print the value of a Datum given its type.
+ */
+void
+outDatum(StringInfo str, Datum value, int typlen, bool typbyval)
+{
+ Size length,
+ i;
+ char *s;
+
+ length = datumGetSize(value, typbyval, typlen);
+
+ if (typbyval)
+ {
+ s = (char *) (&value);
+ appendStringInfo(str, "%u [ ", (unsigned int) length);
+ for (i = 0; i < (Size) sizeof(Datum); i++)
+ appendStringInfo(str, "%d ", (int) (s[i]));
+ appendStringInfoChar(str, ']');
+ }
+ else
+ {
+ s = (char *) DatumGetPointer(value);
+ if (!PointerIsValid(s))
+ appendStringInfoString(str, "0 [ ]");
+ else
+ {
+ appendStringInfo(str, "%u [ ", (unsigned int) length);
+ for (i = 0; i < length; i++)
+ appendStringInfo(str, "%d ", (int) (s[i]));
+ appendStringInfoChar(str, ']');
+ }
+ }
+}
+
+
+/*
+ * Stuff from plannodes.h
+ */
+
+static void
+_outPlannedStmt(StringInfo str, const PlannedStmt *node)
+{
+ WRITE_NODE_TYPE("PLANNEDSTMT");
+
+ WRITE_ENUM_FIELD(commandType, CmdType);
+ WRITE_UINT64_FIELD(queryId);
+ WRITE_BOOL_FIELD(hasReturning);
+ WRITE_BOOL_FIELD(hasModifyingCTE);
+ WRITE_BOOL_FIELD(canSetTag);
+ WRITE_BOOL_FIELD(transientPlan);
+ WRITE_BOOL_FIELD(dependsOnRole);
+ WRITE_BOOL_FIELD(parallelModeNeeded);
+ WRITE_INT_FIELD(jitFlags);
+ WRITE_NODE_FIELD(planTree);
+ WRITE_NODE_FIELD(rtable);
+ WRITE_NODE_FIELD(resultRelations);
+ WRITE_NODE_FIELD(rootResultRelations);
+ WRITE_NODE_FIELD(appendRelations);
+ WRITE_NODE_FIELD(subplans);
+ WRITE_BITMAPSET_FIELD(rewindPlanIDs);
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_NODE_FIELD(relationOids);
+ WRITE_NODE_FIELD(invalItems);
+ WRITE_NODE_FIELD(paramExecTypes);
+ WRITE_NODE_FIELD(utilityStmt);
+ WRITE_LOCATION_FIELD(stmt_location);
+ WRITE_INT_FIELD(stmt_len);
+}
+
+/*
+ * print the basic stuff of all nodes that inherit from Plan
+ */
+static void
+_outPlanInfo(StringInfo str, const Plan *node)
+{
+ WRITE_FLOAT_FIELD(startup_cost, "%.2f");
+ WRITE_FLOAT_FIELD(total_cost, "%.2f");
+ WRITE_FLOAT_FIELD(plan_rows, "%.0f");
+ WRITE_INT_FIELD(plan_width);
+ WRITE_BOOL_FIELD(parallel_aware);
+ WRITE_BOOL_FIELD(parallel_safe);
+ WRITE_INT_FIELD(plan_node_id);
+ WRITE_NODE_FIELD(targetlist);
+ WRITE_NODE_FIELD(qual);
+ WRITE_NODE_FIELD(lefttree);
+ WRITE_NODE_FIELD(righttree);
+ WRITE_NODE_FIELD(initPlan);
+ WRITE_BITMAPSET_FIELD(extParam);
+ WRITE_BITMAPSET_FIELD(allParam);
+}
+
+/*
+ * print the basic stuff of all nodes that inherit from Scan
+ */
+static void
+_outScanInfo(StringInfo str, const Scan *node)
+{
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_UINT_FIELD(scanrelid);
+}
+
+/*
+ * print the basic stuff of all nodes that inherit from Join
+ */
+static void
+_outJoinPlanInfo(StringInfo str, const Join *node)
+{
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_ENUM_FIELD(jointype, JoinType);
+ WRITE_BOOL_FIELD(inner_unique);
+ WRITE_NODE_FIELD(joinqual);
+}
+
+
+static void
+_outPlan(StringInfo str, const Plan *node)
+{
+ WRITE_NODE_TYPE("PLAN");
+
+ _outPlanInfo(str, (const Plan *) node);
+}
+
+static void
+_outResult(StringInfo str, const Result *node)
+{
+ WRITE_NODE_TYPE("RESULT");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_NODE_FIELD(resconstantqual);
+}
+
+static void
+_outProjectSet(StringInfo str, const ProjectSet *node)
+{
+ WRITE_NODE_TYPE("PROJECTSET");
+
+ _outPlanInfo(str, (const Plan *) node);
+}
+
+static void
+_outModifyTable(StringInfo str, const ModifyTable *node)
+{
+ WRITE_NODE_TYPE("MODIFYTABLE");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_ENUM_FIELD(operation, CmdType);
+ WRITE_BOOL_FIELD(canSetTag);
+ WRITE_UINT_FIELD(nominalRelation);
+ WRITE_UINT_FIELD(rootRelation);
+ WRITE_BOOL_FIELD(partColsUpdated);
+ WRITE_NODE_FIELD(resultRelations);
+ WRITE_INT_FIELD(resultRelIndex);
+ WRITE_INT_FIELD(rootResultRelIndex);
+ WRITE_NODE_FIELD(plans);
+ WRITE_NODE_FIELD(withCheckOptionLists);
+ WRITE_NODE_FIELD(returningLists);
+ WRITE_NODE_FIELD(fdwPrivLists);
+ WRITE_BITMAPSET_FIELD(fdwDirectModifyPlans);
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_INT_FIELD(epqParam);
+ WRITE_ENUM_FIELD(onConflictAction, OnConflictAction);
+ WRITE_NODE_FIELD(arbiterIndexes);
+ WRITE_NODE_FIELD(onConflictSet);
+ WRITE_NODE_FIELD(onConflictWhere);
+ WRITE_UINT_FIELD(exclRelRTI);
+ WRITE_NODE_FIELD(exclRelTlist);
+}
+
+static void
+_outAppend(StringInfo str, const Append *node)
+{
+ WRITE_NODE_TYPE("APPEND");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_BITMAPSET_FIELD(apprelids);
+ WRITE_NODE_FIELD(appendplans);
+ WRITE_INT_FIELD(first_partial_plan);
+ WRITE_NODE_FIELD(part_prune_info);
+}
+
+static void
+_outMergeAppend(StringInfo str, const MergeAppend *node)
+{
+ WRITE_NODE_TYPE("MERGEAPPEND");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_BITMAPSET_FIELD(apprelids);
+ WRITE_NODE_FIELD(mergeplans);
+ WRITE_INT_FIELD(numCols);
+ WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numCols);
+ WRITE_OID_ARRAY(sortOperators, node->numCols);
+ WRITE_OID_ARRAY(collations, node->numCols);
+ WRITE_BOOL_ARRAY(nullsFirst, node->numCols);
+ WRITE_NODE_FIELD(part_prune_info);
+}
+
+static void
+_outRecursiveUnion(StringInfo str, const RecursiveUnion *node)
+{
+ WRITE_NODE_TYPE("RECURSIVEUNION");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_INT_FIELD(wtParam);
+ WRITE_INT_FIELD(numCols);
+ WRITE_ATTRNUMBER_ARRAY(dupColIdx, node->numCols);
+ WRITE_OID_ARRAY(dupOperators, node->numCols);
+ WRITE_OID_ARRAY(dupCollations, node->numCols);
+ WRITE_LONG_FIELD(numGroups);
+}
+
+static void
+_outBitmapAnd(StringInfo str, const BitmapAnd *node)
+{
+ WRITE_NODE_TYPE("BITMAPAND");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_NODE_FIELD(bitmapplans);
+}
+
+static void
+_outBitmapOr(StringInfo str, const BitmapOr *node)
+{
+ WRITE_NODE_TYPE("BITMAPOR");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_BOOL_FIELD(isshared);
+ WRITE_NODE_FIELD(bitmapplans);
+}
+
+static void
+_outGather(StringInfo str, const Gather *node)
+{
+ WRITE_NODE_TYPE("GATHER");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_INT_FIELD(num_workers);
+ WRITE_INT_FIELD(rescan_param);
+ WRITE_BOOL_FIELD(single_copy);
+ WRITE_BOOL_FIELD(invisible);
+ WRITE_BITMAPSET_FIELD(initParam);
+}
+
+static void
+_outGatherMerge(StringInfo str, const GatherMerge *node)
+{
+ WRITE_NODE_TYPE("GATHERMERGE");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_INT_FIELD(num_workers);
+ WRITE_INT_FIELD(rescan_param);
+ WRITE_INT_FIELD(numCols);
+ WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numCols);
+ WRITE_OID_ARRAY(sortOperators, node->numCols);
+ WRITE_OID_ARRAY(collations, node->numCols);
+ WRITE_BOOL_ARRAY(nullsFirst, node->numCols);
+ WRITE_BITMAPSET_FIELD(initParam);
+}
+
+static void
+_outScan(StringInfo str, const Scan *node)
+{
+ WRITE_NODE_TYPE("SCAN");
+
+ _outScanInfo(str, node);
+}
+
+static void
+_outSeqScan(StringInfo str, const SeqScan *node)
+{
+ WRITE_NODE_TYPE("SEQSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+}
+
+static void
+_outSampleScan(StringInfo str, const SampleScan *node)
+{
+ WRITE_NODE_TYPE("SAMPLESCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_NODE_FIELD(tablesample);
+}
+
+static void
+_outIndexScan(StringInfo str, const IndexScan *node)
+{
+ WRITE_NODE_TYPE("INDEXSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_OID_FIELD(indexid);
+ WRITE_NODE_FIELD(indexqual);
+ WRITE_NODE_FIELD(indexqualorig);
+ WRITE_NODE_FIELD(indexorderby);
+ WRITE_NODE_FIELD(indexorderbyorig);
+ WRITE_NODE_FIELD(indexorderbyops);
+ WRITE_ENUM_FIELD(indexorderdir, ScanDirection);
+}
+
+static void
+_outIndexOnlyScan(StringInfo str, const IndexOnlyScan *node)
+{
+ WRITE_NODE_TYPE("INDEXONLYSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_OID_FIELD(indexid);
+ WRITE_NODE_FIELD(indexqual);
+ //WRITE_NODE_FIELD(recheckqual);
+ WRITE_NODE_FIELD(indexorderby);
+ WRITE_NODE_FIELD(indextlist);
+ WRITE_ENUM_FIELD(indexorderdir, ScanDirection);
+}
+
+static void
+_outBitmapIndexScan(StringInfo str, const BitmapIndexScan *node)
+{
+ WRITE_NODE_TYPE("BITMAPINDEXSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_OID_FIELD(indexid);
+ WRITE_BOOL_FIELD(isshared);
+ WRITE_NODE_FIELD(indexqual);
+ WRITE_NODE_FIELD(indexqualorig);
+}
+
+static void
+_outBitmapHeapScan(StringInfo str, const BitmapHeapScan *node)
+{
+ WRITE_NODE_TYPE("BITMAPHEAPSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_NODE_FIELD(bitmapqualorig);
+}
+
+static void
+_outTidScan(StringInfo str, const TidScan *node)
+{
+ WRITE_NODE_TYPE("TIDSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_NODE_FIELD(tidquals);
+}
+
+static void
+_outSubqueryScan(StringInfo str, const SubqueryScan *node)
+{
+ WRITE_NODE_TYPE("SUBQUERYSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_NODE_FIELD(subplan);
+}
+
+static void
+_outFunctionScan(StringInfo str, const FunctionScan *node)
+{
+ WRITE_NODE_TYPE("FUNCTIONSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_NODE_FIELD(functions);
+ WRITE_BOOL_FIELD(funcordinality);
+}
+
+static void
+_outTableFuncScan(StringInfo str, const TableFuncScan *node)
+{
+ WRITE_NODE_TYPE("TABLEFUNCSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_NODE_FIELD(tablefunc);
+}
+
+static void
+_outValuesScan(StringInfo str, const ValuesScan *node)
+{
+ WRITE_NODE_TYPE("VALUESSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_NODE_FIELD(values_lists);
+}
+
+static void
+_outCteScan(StringInfo str, const CteScan *node)
+{
+ WRITE_NODE_TYPE("CTESCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_INT_FIELD(ctePlanId);
+ WRITE_INT_FIELD(cteParam);
+}
+
+static void
+_outNamedTuplestoreScan(StringInfo str, const NamedTuplestoreScan *node)
+{
+ WRITE_NODE_TYPE("NAMEDTUPLESTORESCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_STRING_FIELD(enrname);
+}
+
+static void
+_outWorkTableScan(StringInfo str, const WorkTableScan *node)
+{
+ WRITE_NODE_TYPE("WORKTABLESCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_INT_FIELD(wtParam);
+}
+
+static void
+_outForeignScan(StringInfo str, const ForeignScan *node)
+{
+ WRITE_NODE_TYPE("FOREIGNSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_ENUM_FIELD(operation, CmdType);
+ WRITE_OID_FIELD(fs_server);
+ WRITE_NODE_FIELD(fdw_exprs);
+ WRITE_NODE_FIELD(fdw_private);
+ WRITE_NODE_FIELD(fdw_scan_tlist);
+ WRITE_NODE_FIELD(fdw_recheck_quals);
+ WRITE_BITMAPSET_FIELD(fs_relids);
+ WRITE_BOOL_FIELD(fsSystemCol);
+}
+
+static void
+_outCustomScan(StringInfo str, const CustomScan *node)
+{
+ WRITE_NODE_TYPE("CUSTOMSCAN");
+
+ _outScanInfo(str, (const Scan *) node);
+
+ WRITE_UINT_FIELD(flags);
+ WRITE_NODE_FIELD(custom_plans);
+ WRITE_NODE_FIELD(custom_exprs);
+ WRITE_NODE_FIELD(custom_private);
+ WRITE_NODE_FIELD(custom_scan_tlist);
+ WRITE_BITMAPSET_FIELD(custom_relids);
+ /* CustomName is a key to lookup CustomScanMethods */
+ appendStringInfoString(str, " :methods ");
+ outToken(str, node->methods->CustomName);
+}
+
+static void
+_outJoin(StringInfo str, const Join *node)
+{
+ WRITE_NODE_TYPE("JOIN");
+
+ _outJoinPlanInfo(str, (const Join *) node);
+}
+
+static void
+_outNestLoop(StringInfo str, const NestLoop *node)
+{
+ WRITE_NODE_TYPE("NESTLOOP");
+
+ _outJoinPlanInfo(str, (const Join *) node);
+
+ WRITE_NODE_FIELD(nestParams);
+}
+
+static void
+_outMergeJoin(StringInfo str, const MergeJoin *node)
+{
+ int numCols;
+
+ WRITE_NODE_TYPE("MERGEJOIN");
+
+ _outJoinPlanInfo(str, (const Join *) node);
+
+ WRITE_BOOL_FIELD(skip_mark_restore);
+ WRITE_NODE_FIELD(mergeclauses);
+
+ numCols = list_length(node->mergeclauses);
+
+ WRITE_OID_ARRAY(mergeFamilies, numCols);
+ WRITE_OID_ARRAY(mergeCollations, numCols);
+ WRITE_INT_ARRAY(mergeStrategies, numCols);
+ WRITE_BOOL_ARRAY(mergeNullsFirst, numCols);
+}
+
+static void
+_outHashJoin(StringInfo str, const HashJoin *node)
+{
+ WRITE_NODE_TYPE("HASHJOIN");
+
+ _outJoinPlanInfo(str, (const Join *) node);
+
+ WRITE_NODE_FIELD(hashclauses);
+ WRITE_NODE_FIELD(hashoperators);
+ WRITE_NODE_FIELD(hashcollations);
+ WRITE_NODE_FIELD(hashkeys);
+}
+
+static void
+_outAgg(StringInfo str, const Agg *node)
+{
+ WRITE_NODE_TYPE("AGG");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_ENUM_FIELD(aggstrategy, AggStrategy);
+ WRITE_ENUM_FIELD(aggsplit, AggSplit);
+ WRITE_INT_FIELD(numCols);
+ WRITE_ATTRNUMBER_ARRAY(grpColIdx, node->numCols);
+ WRITE_OID_ARRAY(grpOperators, node->numCols);
+ WRITE_OID_ARRAY(grpCollations, node->numCols);
+ WRITE_LONG_FIELD(numGroups);
+ WRITE_UINT64_FIELD(transitionSpace);
+ WRITE_BITMAPSET_FIELD(aggParams);
+ WRITE_NODE_FIELD(groupingSets);
+ WRITE_NODE_FIELD(chain);
+}
+
+static void
+_outWindowAgg(StringInfo str, const WindowAgg *node)
+{
+ WRITE_NODE_TYPE("WINDOWAGG");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_UINT_FIELD(winref);
+ WRITE_INT_FIELD(partNumCols);
+ WRITE_ATTRNUMBER_ARRAY(partColIdx, node->partNumCols);
+ WRITE_OID_ARRAY(partOperators, node->partNumCols);
+ WRITE_OID_ARRAY(partCollations, node->partNumCols);
+ WRITE_INT_FIELD(ordNumCols);
+ WRITE_ATTRNUMBER_ARRAY(ordColIdx, node->ordNumCols);
+ WRITE_OID_ARRAY(ordOperators, node->ordNumCols);
+ WRITE_OID_ARRAY(ordCollations, node->ordNumCols);
+ WRITE_INT_FIELD(frameOptions);
+ WRITE_NODE_FIELD(startOffset);
+ WRITE_NODE_FIELD(endOffset);
+ WRITE_OID_FIELD(startInRangeFunc);
+ WRITE_OID_FIELD(endInRangeFunc);
+ WRITE_OID_FIELD(inRangeColl);
+ WRITE_BOOL_FIELD(inRangeAsc);
+ WRITE_BOOL_FIELD(inRangeNullsFirst);
+}
+
+static void
+_outGroup(StringInfo str, const Group *node)
+{
+ WRITE_NODE_TYPE("GROUP");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_INT_FIELD(numCols);
+ WRITE_ATTRNUMBER_ARRAY(grpColIdx, node->numCols);
+ WRITE_OID_ARRAY(grpOperators, node->numCols);
+ WRITE_OID_ARRAY(grpCollations, node->numCols);
+}
+
+static void
+_outMaterial(StringInfo str, const Material *node)
+{
+ WRITE_NODE_TYPE("MATERIAL");
+
+ _outPlanInfo(str, (const Plan *) node);
+}
+
+static void
+_outSortInfo(StringInfo str, const Sort *node)
+{
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_INT_FIELD(numCols);
+ WRITE_ATTRNUMBER_ARRAY(sortColIdx, node->numCols);
+ WRITE_OID_ARRAY(sortOperators, node->numCols);
+ WRITE_OID_ARRAY(collations, node->numCols);
+ WRITE_BOOL_ARRAY(nullsFirst, node->numCols);
+}
+
+static void
+_outSort(StringInfo str, const Sort *node)
+{
+ WRITE_NODE_TYPE("SORT");
+
+ _outSortInfo(str, node);
+}
+
+static void
+_outIncrementalSort(StringInfo str, const IncrementalSort *node)
+{
+ WRITE_NODE_TYPE("INCREMENTALSORT");
+
+ _outSortInfo(str, (const Sort *) node);
+
+ WRITE_INT_FIELD(nPresortedCols);
+}
+
+static void
+_outUnique(StringInfo str, const Unique *node)
+{
+ WRITE_NODE_TYPE("UNIQUE");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_INT_FIELD(numCols);
+ WRITE_ATTRNUMBER_ARRAY(uniqColIdx, node->numCols);
+ WRITE_OID_ARRAY(uniqOperators, node->numCols);
+ WRITE_OID_ARRAY(uniqCollations, node->numCols);
+}
+
+static void
+_outHash(StringInfo str, const Hash *node)
+{
+ WRITE_NODE_TYPE("HASH");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_NODE_FIELD(hashkeys);
+ WRITE_OID_FIELD(skewTable);
+ WRITE_INT_FIELD(skewColumn);
+ WRITE_BOOL_FIELD(skewInherit);
+ WRITE_FLOAT_FIELD(rows_total, "%.0f");
+}
+
+static void
+_outSetOp(StringInfo str, const SetOp *node)
+{
+ WRITE_NODE_TYPE("SETOP");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_ENUM_FIELD(cmd, SetOpCmd);
+ WRITE_ENUM_FIELD(strategy, SetOpStrategy);
+ WRITE_INT_FIELD(numCols);
+ WRITE_ATTRNUMBER_ARRAY(dupColIdx, node->numCols);
+ WRITE_OID_ARRAY(dupOperators, node->numCols);
+ WRITE_OID_ARRAY(dupCollations, node->numCols);
+ WRITE_INT_FIELD(flagColIdx);
+ WRITE_INT_FIELD(firstFlag);
+ WRITE_LONG_FIELD(numGroups);
+}
+
+static void
+_outLockRows(StringInfo str, const LockRows *node)
+{
+ WRITE_NODE_TYPE("LOCKROWS");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_INT_FIELD(epqParam);
+}
+
+static void
+_outLimit(StringInfo str, const Limit *node)
+{
+ WRITE_NODE_TYPE("LIMIT");
+
+ _outPlanInfo(str, (const Plan *) node);
+
+ WRITE_NODE_FIELD(limitOffset);
+ WRITE_NODE_FIELD(limitCount);
+ WRITE_ENUM_FIELD(limitOption, LimitOption);
+ WRITE_INT_FIELD(uniqNumCols);
+ WRITE_ATTRNUMBER_ARRAY(uniqColIdx, node->uniqNumCols);
+ WRITE_OID_ARRAY(uniqOperators, node->uniqNumCols);
+ WRITE_OID_ARRAY(uniqCollations, node->uniqNumCols);
+}
+
+static void
+_outNestLoopParam(StringInfo str, const NestLoopParam *node)
+{
+ WRITE_NODE_TYPE("NESTLOOPPARAM");
+
+ WRITE_INT_FIELD(paramno);
+ WRITE_NODE_FIELD(paramval);
+}
+
+static void
+_outPlanRowMark(StringInfo str, const PlanRowMark *node)
+{
+ WRITE_NODE_TYPE("PLANROWMARK");
+
+ WRITE_UINT_FIELD(rti);
+ WRITE_UINT_FIELD(prti);
+ WRITE_UINT_FIELD(rowmarkId);
+ WRITE_ENUM_FIELD(markType, RowMarkType);
+ WRITE_INT_FIELD(allMarkTypes);
+ WRITE_ENUM_FIELD(strength, LockClauseStrength);
+ WRITE_ENUM_FIELD(waitPolicy, LockWaitPolicy);
+ WRITE_BOOL_FIELD(isParent);
+}
+
+static void
+_outPartitionPruneInfo(StringInfo str, const PartitionPruneInfo *node)
+{
+ WRITE_NODE_TYPE("PARTITIONPRUNEINFO");
+
+ WRITE_NODE_FIELD(prune_infos);
+ WRITE_BITMAPSET_FIELD(other_subplans);
+}
+
+static void
+_outPartitionedRelPruneInfo(StringInfo str, const PartitionedRelPruneInfo *node)
+{
+ WRITE_NODE_TYPE("PARTITIONEDRELPRUNEINFO");
+
+ WRITE_UINT_FIELD(rtindex);
+ WRITE_BITMAPSET_FIELD(present_parts);
+ WRITE_INT_FIELD(nparts);
+ WRITE_INT_ARRAY(subplan_map, node->nparts);
+ WRITE_INT_ARRAY(subpart_map, node->nparts);
+ WRITE_OID_ARRAY(relid_map, node->nparts);
+ WRITE_NODE_FIELD(initial_pruning_steps);
+ WRITE_NODE_FIELD(exec_pruning_steps);
+ WRITE_BITMAPSET_FIELD(execparamids);
+}
+
+static void
+_outPartitionPruneStepOp(StringInfo str, const PartitionPruneStepOp *node)
+{
+ WRITE_NODE_TYPE("PARTITIONPRUNESTEPOP");
+
+ WRITE_INT_FIELD(step.step_id);
+ WRITE_INT_FIELD(opstrategy);
+ WRITE_NODE_FIELD(exprs);
+ WRITE_NODE_FIELD(cmpfns);
+ WRITE_BITMAPSET_FIELD(nullkeys);
+}
+
+static void
+_outPartitionPruneStepCombine(StringInfo str, const PartitionPruneStepCombine *node)
+{
+ WRITE_NODE_TYPE("PARTITIONPRUNESTEPCOMBINE");
+
+ WRITE_INT_FIELD(step.step_id);
+ WRITE_ENUM_FIELD(combineOp, PartitionPruneCombineOp);
+ WRITE_NODE_FIELD(source_stepids);
+}
+
+static void
+_outPlanInvalItem(StringInfo str, const PlanInvalItem *node)
+{
+ WRITE_NODE_TYPE("PLANINVALITEM");
+
+ WRITE_INT_FIELD(cacheId);
+ WRITE_UINT_FIELD(hashValue);
+}
+
+/*****************************************************************************
+ *
+ * Stuff from primnodes.h.
+ *
+ *****************************************************************************/
+
+static void
+_outAlias(StringInfo str, const Alias *node)
+{
+ WRITE_NODE_TYPE("ALIAS");
+
+ WRITE_STRING_FIELD(aliasname);
+ WRITE_NODE_FIELD(colnames);
+}
+
+static void
+_outRangeVar(StringInfo str, const RangeVar *node)
+{
+ WRITE_NODE_TYPE("RANGEVAR");
+
+ /*
+ * we deliberately ignore catalogname here, since it is presently not
+ * semantically meaningful
+ */
+ WRITE_STRING_FIELD(schemaname);
+ WRITE_STRING_FIELD(relname);
+ WRITE_BOOL_FIELD(inh);
+ WRITE_CHAR_FIELD(relpersistence);
+ WRITE_NODE_FIELD(alias);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outTableFunc(StringInfo str, const TableFunc *node)
+{
+ WRITE_NODE_TYPE("TABLEFUNC");
+
+ WRITE_NODE_FIELD(ns_uris);
+ WRITE_NODE_FIELD(ns_names);
+ WRITE_NODE_FIELD(docexpr);
+ WRITE_NODE_FIELD(rowexpr);
+ WRITE_NODE_FIELD(colnames);
+ WRITE_NODE_FIELD(coltypes);
+ WRITE_NODE_FIELD(coltypmods);
+ WRITE_NODE_FIELD(colcollations);
+ WRITE_NODE_FIELD(colexprs);
+ WRITE_NODE_FIELD(coldefexprs);
+ WRITE_BITMAPSET_FIELD(notnulls);
+ WRITE_INT_FIELD(ordinalitycol);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outIntoClause(StringInfo str, const IntoClause *node)
+{
+ WRITE_NODE_TYPE("INTOCLAUSE");
+
+ WRITE_NODE_FIELD(rel);
+ WRITE_NODE_FIELD(colNames);
+ WRITE_STRING_FIELD(accessMethod);
+ WRITE_NODE_FIELD(options);
+ WRITE_ENUM_FIELD(onCommit, OnCommitAction);
+ WRITE_STRING_FIELD(tableSpaceName);
+ WRITE_NODE_FIELD(viewQuery);
+ WRITE_BOOL_FIELD(skipData);
+}
+
+static void
+_outVar(StringInfo str, const Var *node)
+{
+ WRITE_NODE_TYPE("VAR");
+
+ WRITE_UINT_FIELD(varno);
+ WRITE_INT_FIELD(varattno);
+ WRITE_OID_FIELD(vartype);
+ WRITE_INT_FIELD(vartypmod);
+ WRITE_OID_FIELD(varcollid);
+ WRITE_UINT_FIELD(varlevelsup);
+ WRITE_UINT_FIELD(varnosyn);
+ WRITE_INT_FIELD(varattnosyn);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outConst(StringInfo str, const Const *node)
+{
+ WRITE_NODE_TYPE("CONST");
+
+ WRITE_OID_FIELD(consttype);
+ WRITE_INT_FIELD(consttypmod);
+ WRITE_OID_FIELD(constcollid);
+ WRITE_INT_FIELD(constlen);
+ WRITE_BOOL_FIELD(constbyval);
+ WRITE_BOOL_FIELD(constisnull);
+ WRITE_LOCATION_FIELD(location);
+
+ appendStringInfoString(str, " :constvalue ");
+ if (node->constisnull)
+ appendStringInfoString(str, "<>");
+ else
+ outDatum(str, node->constvalue, node->constlen, node->constbyval);
+}
+
+static void
+_outParam(StringInfo str, const Param *node)
+{
+ WRITE_NODE_TYPE("PARAM");
+
+ WRITE_ENUM_FIELD(paramkind, ParamKind);
+ WRITE_INT_FIELD(paramid);
+ WRITE_OID_FIELD(paramtype);
+ WRITE_INT_FIELD(paramtypmod);
+ WRITE_OID_FIELD(paramcollid);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outAggref(StringInfo str, const Aggref *node)
+{
+ WRITE_NODE_TYPE("AGGREF");
+
+ WRITE_OID_FIELD(aggfnoid);
+ WRITE_OID_FIELD(aggtype);
+ WRITE_OID_FIELD(aggcollid);
+ WRITE_OID_FIELD(inputcollid);
+ WRITE_OID_FIELD(aggtranstype);
+ WRITE_NODE_FIELD(aggargtypes);
+ WRITE_NODE_FIELD(aggdirectargs);
+ WRITE_NODE_FIELD(args);
+ WRITE_NODE_FIELD(aggorder);
+ WRITE_NODE_FIELD(aggdistinct);
+ WRITE_NODE_FIELD(aggfilter);
+ WRITE_BOOL_FIELD(aggstar);
+ WRITE_BOOL_FIELD(aggvariadic);
+ WRITE_CHAR_FIELD(aggkind);
+ WRITE_UINT_FIELD(agglevelsup);
+ WRITE_ENUM_FIELD(aggsplit, AggSplit);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outGroupingFunc(StringInfo str, const GroupingFunc *node)
+{
+ WRITE_NODE_TYPE("GROUPINGFUNC");
+
+ WRITE_NODE_FIELD(args);
+ WRITE_NODE_FIELD(refs);
+ WRITE_NODE_FIELD(cols);
+ WRITE_UINT_FIELD(agglevelsup);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outWindowFunc(StringInfo str, const WindowFunc *node)
+{
+ WRITE_NODE_TYPE("WINDOWFUNC");
+
+ WRITE_OID_FIELD(winfnoid);
+ WRITE_OID_FIELD(wintype);
+ WRITE_OID_FIELD(wincollid);
+ WRITE_OID_FIELD(inputcollid);
+ WRITE_NODE_FIELD(args);
+ WRITE_NODE_FIELD(aggfilter);
+ WRITE_UINT_FIELD(winref);
+ WRITE_BOOL_FIELD(winstar);
+ WRITE_BOOL_FIELD(winagg);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outSubscriptingRef(StringInfo str, const SubscriptingRef *node)
+{
+ WRITE_NODE_TYPE("SUBSCRIPTINGREF");
+
+ WRITE_OID_FIELD(refcontainertype);
+ WRITE_OID_FIELD(refelemtype);
+ WRITE_INT_FIELD(reftypmod);
+ WRITE_OID_FIELD(refcollid);
+ WRITE_NODE_FIELD(refupperindexpr);
+ WRITE_NODE_FIELD(reflowerindexpr);
+ WRITE_NODE_FIELD(refexpr);
+ WRITE_NODE_FIELD(refassgnexpr);
+}
+
+static void
+_outFuncExpr(StringInfo str, const FuncExpr *node)
+{
+ WRITE_NODE_TYPE("FUNCEXPR");
+
+ WRITE_OID_FIELD(funcid);
+ WRITE_OID_FIELD(funcresulttype);
+ WRITE_BOOL_FIELD(funcretset);
+ WRITE_BOOL_FIELD(funcvariadic);
+ WRITE_ENUM_FIELD(funcformat, CoercionForm);
+ WRITE_OID_FIELD(funccollid);
+ WRITE_OID_FIELD(inputcollid);
+ WRITE_NODE_FIELD(args);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outNamedArgExpr(StringInfo str, const NamedArgExpr *node)
+{
+ WRITE_NODE_TYPE("NAMEDARGEXPR");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_STRING_FIELD(name);
+ WRITE_INT_FIELD(argnumber);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outOpExpr(StringInfo str, const OpExpr *node)
+{
+ WRITE_NODE_TYPE("OPEXPR");
+
+ WRITE_OID_FIELD(opno);
+ WRITE_OID_FIELD(opfuncid);
+ WRITE_OID_FIELD(opresulttype);
+ WRITE_BOOL_FIELD(opretset);
+ WRITE_OID_FIELD(opcollid);
+ WRITE_OID_FIELD(inputcollid);
+ WRITE_NODE_FIELD(args);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outDistinctExpr(StringInfo str, const DistinctExpr *node)
+{
+ WRITE_NODE_TYPE("DISTINCTEXPR");
+
+ WRITE_OID_FIELD(opno);
+ WRITE_OID_FIELD(opfuncid);
+ WRITE_OID_FIELD(opresulttype);
+ WRITE_BOOL_FIELD(opretset);
+ WRITE_OID_FIELD(opcollid);
+ WRITE_OID_FIELD(inputcollid);
+ WRITE_NODE_FIELD(args);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outNullIfExpr(StringInfo str, const NullIfExpr *node)
+{
+ WRITE_NODE_TYPE("NULLIFEXPR");
+
+ WRITE_OID_FIELD(opno);
+ WRITE_OID_FIELD(opfuncid);
+ WRITE_OID_FIELD(opresulttype);
+ WRITE_BOOL_FIELD(opretset);
+ WRITE_OID_FIELD(opcollid);
+ WRITE_OID_FIELD(inputcollid);
+ WRITE_NODE_FIELD(args);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outScalarArrayOpExpr(StringInfo str, const ScalarArrayOpExpr *node)
+{
+ WRITE_NODE_TYPE("SCALARARRAYOPEXPR");
+
+ WRITE_OID_FIELD(opno);
+ WRITE_OID_FIELD(opfuncid);
+ WRITE_BOOL_FIELD(useOr);
+ WRITE_OID_FIELD(inputcollid);
+ WRITE_NODE_FIELD(args);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outBoolExpr(StringInfo str, const BoolExpr *node)
+{
+ char *opstr = NULL;
+
+ WRITE_NODE_TYPE("BOOLEXPR");
+
+ /* do-it-yourself enum representation */
+ switch (node->boolop)
+ {
+ case AND_EXPR:
+ opstr = "and";
+ break;
+ case OR_EXPR:
+ opstr = "or";
+ break;
+ case NOT_EXPR:
+ opstr = "not";
+ break;
+ }
+ appendStringInfoString(str, " :boolop ");
+ outToken(str, opstr);
+
+ WRITE_NODE_FIELD(args);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outSubLink(StringInfo str, const SubLink *node)
+{
+ WRITE_NODE_TYPE("SUBLINK");
+
+ WRITE_ENUM_FIELD(subLinkType, SubLinkType);
+ WRITE_INT_FIELD(subLinkId);
+ WRITE_NODE_FIELD(testexpr);
+ WRITE_NODE_FIELD(operName);
+ WRITE_NODE_FIELD(subselect);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outSubPlan(StringInfo str, const SubPlan *node)
+{
+ WRITE_NODE_TYPE("SUBPLAN");
+
+ WRITE_ENUM_FIELD(subLinkType, SubLinkType);
+ WRITE_NODE_FIELD(testexpr);
+ WRITE_NODE_FIELD(paramIds);
+ WRITE_INT_FIELD(plan_id);
+ WRITE_STRING_FIELD(plan_name);
+ WRITE_OID_FIELD(firstColType);
+ WRITE_INT_FIELD(firstColTypmod);
+ WRITE_OID_FIELD(firstColCollation);
+ WRITE_BOOL_FIELD(useHashTable);
+ WRITE_BOOL_FIELD(unknownEqFalse);
+ WRITE_BOOL_FIELD(parallel_safe);
+ WRITE_NODE_FIELD(setParam);
+ WRITE_NODE_FIELD(parParam);
+ WRITE_NODE_FIELD(args);
+ WRITE_FLOAT_FIELD(startup_cost, "%.2f");
+ WRITE_FLOAT_FIELD(per_call_cost, "%.2f");
+}
+
+static void
+_outAlternativeSubPlan(StringInfo str, const AlternativeSubPlan *node)
+{
+ WRITE_NODE_TYPE("ALTERNATIVESUBPLAN");
+
+ WRITE_NODE_FIELD(subplans);
+}
+
+static void
+_outFieldSelect(StringInfo str, const FieldSelect *node)
+{
+ WRITE_NODE_TYPE("FIELDSELECT");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_INT_FIELD(fieldnum);
+ WRITE_OID_FIELD(resulttype);
+ WRITE_INT_FIELD(resulttypmod);
+ WRITE_OID_FIELD(resultcollid);
+}
+
+static void
+_outFieldStore(StringInfo str, const FieldStore *node)
+{
+ WRITE_NODE_TYPE("FIELDSTORE");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_NODE_FIELD(newvals);
+ WRITE_NODE_FIELD(fieldnums);
+ WRITE_OID_FIELD(resulttype);
+}
+
+static void
+_outRelabelType(StringInfo str, const RelabelType *node)
+{
+ WRITE_NODE_TYPE("RELABELTYPE");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_OID_FIELD(resulttype);
+ WRITE_INT_FIELD(resulttypmod);
+ WRITE_OID_FIELD(resultcollid);
+ WRITE_ENUM_FIELD(relabelformat, CoercionForm);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outCoerceViaIO(StringInfo str, const CoerceViaIO *node)
+{
+ WRITE_NODE_TYPE("COERCEVIAIO");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_OID_FIELD(resulttype);
+ WRITE_OID_FIELD(resultcollid);
+ WRITE_ENUM_FIELD(coerceformat, CoercionForm);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outArrayCoerceExpr(StringInfo str, const ArrayCoerceExpr *node)
+{
+ WRITE_NODE_TYPE("ARRAYCOERCEEXPR");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_NODE_FIELD(elemexpr);
+ WRITE_OID_FIELD(resulttype);
+ WRITE_INT_FIELD(resulttypmod);
+ WRITE_OID_FIELD(resultcollid);
+ WRITE_ENUM_FIELD(coerceformat, CoercionForm);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outConvertRowtypeExpr(StringInfo str, const ConvertRowtypeExpr *node)
+{
+ WRITE_NODE_TYPE("CONVERTROWTYPEEXPR");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_OID_FIELD(resulttype);
+ WRITE_ENUM_FIELD(convertformat, CoercionForm);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outCollateExpr(StringInfo str, const CollateExpr *node)
+{
+ WRITE_NODE_TYPE("COLLATE");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_OID_FIELD(collOid);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outCaseExpr(StringInfo str, const CaseExpr *node)
+{
+ WRITE_NODE_TYPE("CASE");
+
+ WRITE_OID_FIELD(casetype);
+ WRITE_OID_FIELD(casecollid);
+ WRITE_NODE_FIELD(arg);
+ WRITE_NODE_FIELD(args);
+ WRITE_NODE_FIELD(defresult);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outCaseWhen(StringInfo str, const CaseWhen *node)
+{
+ WRITE_NODE_TYPE("WHEN");
+
+ WRITE_NODE_FIELD(expr);
+ WRITE_NODE_FIELD(result);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outCaseTestExpr(StringInfo str, const CaseTestExpr *node)
+{
+ WRITE_NODE_TYPE("CASETESTEXPR");
+
+ WRITE_OID_FIELD(typeId);
+ WRITE_INT_FIELD(typeMod);
+ WRITE_OID_FIELD(collation);
+}
+
+static void
+_outArrayExpr(StringInfo str, const ArrayExpr *node)
+{
+ WRITE_NODE_TYPE("ARRAY");
+
+ WRITE_OID_FIELD(array_typeid);
+ WRITE_OID_FIELD(array_collid);
+ WRITE_OID_FIELD(element_typeid);
+ WRITE_NODE_FIELD(elements);
+ WRITE_BOOL_FIELD(multidims);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outRowExpr(StringInfo str, const RowExpr *node)
+{
+ WRITE_NODE_TYPE("ROW");
+
+ WRITE_NODE_FIELD(args);
+ WRITE_OID_FIELD(row_typeid);
+ WRITE_ENUM_FIELD(row_format, CoercionForm);
+ WRITE_NODE_FIELD(colnames);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outRowCompareExpr(StringInfo str, const RowCompareExpr *node)
+{
+ WRITE_NODE_TYPE("ROWCOMPARE");
+
+ WRITE_ENUM_FIELD(rctype, RowCompareType);
+ WRITE_NODE_FIELD(opnos);
+ WRITE_NODE_FIELD(opfamilies);
+ WRITE_NODE_FIELD(inputcollids);
+ WRITE_NODE_FIELD(largs);
+ WRITE_NODE_FIELD(rargs);
+}
+
+static void
+_outCoalesceExpr(StringInfo str, const CoalesceExpr *node)
+{
+ WRITE_NODE_TYPE("COALESCE");
+
+ WRITE_OID_FIELD(coalescetype);
+ WRITE_OID_FIELD(coalescecollid);
+ WRITE_NODE_FIELD(args);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outMinMaxExpr(StringInfo str, const MinMaxExpr *node)
+{
+ WRITE_NODE_TYPE("MINMAX");
+
+ WRITE_OID_FIELD(minmaxtype);
+ WRITE_OID_FIELD(minmaxcollid);
+ WRITE_OID_FIELD(inputcollid);
+ WRITE_ENUM_FIELD(op, MinMaxOp);
+ WRITE_NODE_FIELD(args);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outSQLValueFunction(StringInfo str, const SQLValueFunction *node)
+{
+ WRITE_NODE_TYPE("SQLVALUEFUNCTION");
+
+ WRITE_ENUM_FIELD(op, SQLValueFunctionOp);
+ WRITE_OID_FIELD(type);
+ WRITE_INT_FIELD(typmod);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outXmlExpr(StringInfo str, const XmlExpr *node)
+{
+ WRITE_NODE_TYPE("XMLEXPR");
+
+ WRITE_ENUM_FIELD(op, XmlExprOp);
+ WRITE_STRING_FIELD(name);
+ WRITE_NODE_FIELD(named_args);
+ WRITE_NODE_FIELD(arg_names);
+ WRITE_NODE_FIELD(args);
+ WRITE_ENUM_FIELD(xmloption, XmlOptionType);
+ WRITE_OID_FIELD(type);
+ WRITE_INT_FIELD(typmod);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outNullTest(StringInfo str, const NullTest *node)
+{
+ WRITE_NODE_TYPE("NULLTEST");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_ENUM_FIELD(nulltesttype, NullTestType);
+ WRITE_BOOL_FIELD(argisrow);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outBooleanTest(StringInfo str, const BooleanTest *node)
+{
+ WRITE_NODE_TYPE("BOOLEANTEST");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_ENUM_FIELD(booltesttype, BoolTestType);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outCoerceToDomain(StringInfo str, const CoerceToDomain *node)
+{
+ WRITE_NODE_TYPE("COERCETODOMAIN");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_OID_FIELD(resulttype);
+ WRITE_INT_FIELD(resulttypmod);
+ WRITE_OID_FIELD(resultcollid);
+ WRITE_ENUM_FIELD(coercionformat, CoercionForm);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outCoerceToDomainValue(StringInfo str, const CoerceToDomainValue *node)
+{
+ WRITE_NODE_TYPE("COERCETODOMAINVALUE");
+
+ WRITE_OID_FIELD(typeId);
+ WRITE_INT_FIELD(typeMod);
+ WRITE_OID_FIELD(collation);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outSetToDefault(StringInfo str, const SetToDefault *node)
+{
+ WRITE_NODE_TYPE("SETTODEFAULT");
+
+ WRITE_OID_FIELD(typeId);
+ WRITE_INT_FIELD(typeMod);
+ WRITE_OID_FIELD(collation);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outCurrentOfExpr(StringInfo str, const CurrentOfExpr *node)
+{
+ WRITE_NODE_TYPE("CURRENTOFEXPR");
+
+ WRITE_UINT_FIELD(cvarno);
+ WRITE_STRING_FIELD(cursor_name);
+ WRITE_INT_FIELD(cursor_param);
+}
+
+static void
+_outNextValueExpr(StringInfo str, const NextValueExpr *node)
+{
+ WRITE_NODE_TYPE("NEXTVALUEEXPR");
+
+ WRITE_OID_FIELD(seqid);
+ WRITE_OID_FIELD(typeId);
+}
+
+static void
+_outInferenceElem(StringInfo str, const InferenceElem *node)
+{
+ WRITE_NODE_TYPE("INFERENCEELEM");
+
+ WRITE_NODE_FIELD(expr);
+ WRITE_OID_FIELD(infercollid);
+ WRITE_OID_FIELD(inferopclass);
+}
+
+static void
+_outTargetEntry(StringInfo str, const TargetEntry *node)
+{
+ WRITE_NODE_TYPE("TARGETENTRY");
+
+ WRITE_NODE_FIELD(expr);
+ WRITE_INT_FIELD(resno);
+ WRITE_STRING_FIELD(resname);
+ WRITE_UINT_FIELD(ressortgroupref);
+ WRITE_OID_FIELD(resorigtbl);
+ WRITE_INT_FIELD(resorigcol);
+ WRITE_BOOL_FIELD(resjunk);
+}
+
+static void
+_outRangeTblRef(StringInfo str, const RangeTblRef *node)
+{
+ WRITE_NODE_TYPE("RANGETBLREF");
+
+ WRITE_INT_FIELD(rtindex);
+}
+
+static void
+_outJoinExpr(StringInfo str, const JoinExpr *node)
+{
+ WRITE_NODE_TYPE("JOINEXPR");
+
+ WRITE_ENUM_FIELD(jointype, JoinType);
+ WRITE_BOOL_FIELD(isNatural);
+ WRITE_NODE_FIELD(larg);
+ WRITE_NODE_FIELD(rarg);
+ WRITE_NODE_FIELD(usingClause);
+ WRITE_NODE_FIELD(quals);
+ WRITE_NODE_FIELD(alias);
+ WRITE_INT_FIELD(rtindex);
+}
+
+static void
+_outFromExpr(StringInfo str, const FromExpr *node)
+{
+ WRITE_NODE_TYPE("FROMEXPR");
+
+ WRITE_NODE_FIELD(fromlist);
+ WRITE_NODE_FIELD(quals);
+}
+
+static void
+_outOnConflictExpr(StringInfo str, const OnConflictExpr *node)
+{
+ WRITE_NODE_TYPE("ONCONFLICTEXPR");
+
+ WRITE_ENUM_FIELD(action, OnConflictAction);
+ WRITE_NODE_FIELD(arbiterElems);
+ WRITE_NODE_FIELD(arbiterWhere);
+ WRITE_OID_FIELD(constraint);
+ WRITE_NODE_FIELD(onConflictSet);
+ WRITE_NODE_FIELD(onConflictWhere);
+ WRITE_INT_FIELD(exclRelIndex);
+ WRITE_NODE_FIELD(exclRelTlist);
+}
+
+/*****************************************************************************
+ *
+ * Stuff from pathnodes.h.
+ *
+ *****************************************************************************/
+
+/*
+ * print the basic stuff of all nodes that inherit from Path
+ *
+ * Note we do NOT print the parent, else we'd be in infinite recursion.
+ * We can print the parent's relids for identification purposes, though.
+ * We print the pathtarget only if it's not the default one for the rel.
+ * We also do not print the whole of param_info, since it's printed by
+ * _outRelOptInfo; it's sufficient and less cluttering to print just the
+ * required outer relids.
+ */
+static void
+_outPathInfo(StringInfo str, const Path *node)
+{
+ WRITE_ENUM_FIELD(pathtype, NodeTag);
+ appendStringInfoString(str, " :parent_relids ");
+ outBitmapset(str, node->parent->relids);
+ if (node->pathtarget != node->parent->reltarget)
+ WRITE_NODE_FIELD(pathtarget);
+ appendStringInfoString(str, " :required_outer ");
+ if (node->param_info)
+ outBitmapset(str, node->param_info->ppi_req_outer);
+ else
+ outBitmapset(str, NULL);
+ WRITE_BOOL_FIELD(parallel_aware);
+ WRITE_BOOL_FIELD(parallel_safe);
+ WRITE_INT_FIELD(parallel_workers);
+ WRITE_FLOAT_FIELD(rows, "%.0f");
+ WRITE_FLOAT_FIELD(startup_cost, "%.2f");
+ WRITE_FLOAT_FIELD(total_cost, "%.2f");
+ WRITE_NODE_FIELD(pathkeys);
+}
+
+/*
+ * print the basic stuff of all nodes that inherit from JoinPath
+ */
+static void
+_outJoinPathInfo(StringInfo str, const JoinPath *node)
+{
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_ENUM_FIELD(jointype, JoinType);
+ WRITE_BOOL_FIELD(inner_unique);
+ WRITE_NODE_FIELD(outerjoinpath);
+ WRITE_NODE_FIELD(innerjoinpath);
+ WRITE_NODE_FIELD(joinrestrictinfo);
+}
+
+static void
+_outPath(StringInfo str, const Path *node)
+{
+ WRITE_NODE_TYPE("PATH");
+
+ _outPathInfo(str, (const Path *) node);
+}
+
+static void
+_outIndexPath(StringInfo str, const IndexPath *node)
+{
+ WRITE_NODE_TYPE("INDEXPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(indexinfo);
+ WRITE_NODE_FIELD(indexclauses);
+ WRITE_NODE_FIELD(indexorderbys);
+ WRITE_NODE_FIELD(indexorderbycols);
+ WRITE_ENUM_FIELD(indexscandir, ScanDirection);
+ WRITE_FLOAT_FIELD(indextotalcost, "%.2f");
+ WRITE_FLOAT_FIELD(indexselectivity, "%.4f");
+}
+
+static void
+_outBitmapHeapPath(StringInfo str, const BitmapHeapPath *node)
+{
+ WRITE_NODE_TYPE("BITMAPHEAPPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(bitmapqual);
+}
+
+static void
+_outBitmapAndPath(StringInfo str, const BitmapAndPath *node)
+{
+ WRITE_NODE_TYPE("BITMAPANDPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(bitmapquals);
+ WRITE_FLOAT_FIELD(bitmapselectivity, "%.4f");
+}
+
+static void
+_outBitmapOrPath(StringInfo str, const BitmapOrPath *node)
+{
+ WRITE_NODE_TYPE("BITMAPORPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(bitmapquals);
+ WRITE_FLOAT_FIELD(bitmapselectivity, "%.4f");
+}
+
+static void
+_outTidPath(StringInfo str, const TidPath *node)
+{
+ WRITE_NODE_TYPE("TIDPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(tidquals);
+}
+
+static void
+_outSubqueryScanPath(StringInfo str, const SubqueryScanPath *node)
+{
+ WRITE_NODE_TYPE("SUBQUERYSCANPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+}
+
+static void
+_outForeignPath(StringInfo str, const ForeignPath *node)
+{
+ WRITE_NODE_TYPE("FOREIGNPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(fdw_outerpath);
+ WRITE_NODE_FIELD(fdw_private);
+}
+
+static void
+_outCustomPath(StringInfo str, const CustomPath *node)
+{
+ WRITE_NODE_TYPE("CUSTOMPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_UINT_FIELD(flags);
+ WRITE_NODE_FIELD(custom_paths);
+ WRITE_NODE_FIELD(custom_private);
+ appendStringInfoString(str, " :methods ");
+ outToken(str, node->methods->CustomName);
+}
+
+static void
+_outAppendPath(StringInfo str, const AppendPath *node)
+{
+ WRITE_NODE_TYPE("APPENDPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(partitioned_rels);
+ WRITE_NODE_FIELD(subpaths);
+ WRITE_INT_FIELD(first_partial_path);
+ WRITE_FLOAT_FIELD(limit_tuples, "%.0f");
+}
+
+static void
+_outMergeAppendPath(StringInfo str, const MergeAppendPath *node)
+{
+ WRITE_NODE_TYPE("MERGEAPPENDPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(partitioned_rels);
+ WRITE_NODE_FIELD(subpaths);
+ WRITE_FLOAT_FIELD(limit_tuples, "%.0f");
+}
+
+static void
+_outGroupResultPath(StringInfo str, const GroupResultPath *node)
+{
+ WRITE_NODE_TYPE("GROUPRESULTPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(quals);
+}
+
+static void
+_outMaterialPath(StringInfo str, const MaterialPath *node)
+{
+ WRITE_NODE_TYPE("MATERIALPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+}
+
+static void
+_outUniquePath(StringInfo str, const UniquePath *node)
+{
+ WRITE_NODE_TYPE("UNIQUEPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_ENUM_FIELD(umethod, UniquePathMethod);
+ WRITE_NODE_FIELD(in_operators);
+ WRITE_NODE_FIELD(uniq_exprs);
+}
+
+static void
+_outGatherPath(StringInfo str, const GatherPath *node)
+{
+ WRITE_NODE_TYPE("GATHERPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_BOOL_FIELD(single_copy);
+ WRITE_INT_FIELD(num_workers);
+}
+
+static void
+_outProjectionPath(StringInfo str, const ProjectionPath *node)
+{
+ WRITE_NODE_TYPE("PROJECTIONPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_BOOL_FIELD(dummypp);
+}
+
+static void
+_outProjectSetPath(StringInfo str, const ProjectSetPath *node)
+{
+ WRITE_NODE_TYPE("PROJECTSETPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+}
+
+static void
+_outSortPathInfo(StringInfo str, const SortPath *node)
+{
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+}
+
+static void
+_outSortPath(StringInfo str, const SortPath *node)
+{
+ WRITE_NODE_TYPE("SORTPATH");
+
+ _outSortPathInfo(str, node);
+}
+
+static void
+_outIncrementalSortPath(StringInfo str, const IncrementalSortPath *node)
+{
+ WRITE_NODE_TYPE("INCREMENTALSORTPATH");
+
+ _outSortPathInfo(str, (const SortPath *) node);
+
+ WRITE_INT_FIELD(nPresortedCols);
+}
+
+static void
+_outGroupPath(StringInfo str, const GroupPath *node)
+{
+ WRITE_NODE_TYPE("GROUPPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_NODE_FIELD(groupClause);
+ WRITE_NODE_FIELD(qual);
+}
+
+static void
+_outUpperUniquePath(StringInfo str, const UpperUniquePath *node)
+{
+ WRITE_NODE_TYPE("UPPERUNIQUEPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_INT_FIELD(numkeys);
+}
+
+static void
+_outAggPath(StringInfo str, const AggPath *node)
+{
+ WRITE_NODE_TYPE("AGGPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_ENUM_FIELD(aggstrategy, AggStrategy);
+ WRITE_ENUM_FIELD(aggsplit, AggSplit);
+ WRITE_FLOAT_FIELD(numGroups, "%.0f");
+ WRITE_UINT64_FIELD(transitionSpace);
+ WRITE_NODE_FIELD(groupClause);
+ WRITE_NODE_FIELD(qual);
+}
+
+static void
+_outRollupData(StringInfo str, const RollupData *node)
+{
+ WRITE_NODE_TYPE("ROLLUP");
+
+ WRITE_NODE_FIELD(groupClause);
+ WRITE_NODE_FIELD(gsets);
+ WRITE_NODE_FIELD(gsets_data);
+ WRITE_FLOAT_FIELD(numGroups, "%.0f");
+ WRITE_BOOL_FIELD(hashable);
+ WRITE_BOOL_FIELD(is_hashed);
+}
+
+static void
+_outGroupingSetData(StringInfo str, const GroupingSetData *node)
+{
+ WRITE_NODE_TYPE("GSDATA");
+
+ WRITE_NODE_FIELD(set);
+ WRITE_FLOAT_FIELD(numGroups, "%.0f");
+}
+
+static void
+_outGroupingSetsPath(StringInfo str, const GroupingSetsPath *node)
+{
+ WRITE_NODE_TYPE("GROUPINGSETSPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_ENUM_FIELD(aggstrategy, AggStrategy);
+ WRITE_NODE_FIELD(rollups);
+ WRITE_NODE_FIELD(qual);
+ WRITE_UINT64_FIELD(transitionSpace);
+}
+
+static void
+_outMinMaxAggPath(StringInfo str, const MinMaxAggPath *node)
+{
+ WRITE_NODE_TYPE("MINMAXAGGPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(mmaggregates);
+ WRITE_NODE_FIELD(quals);
+}
+
+static void
+_outWindowAggPath(StringInfo str, const WindowAggPath *node)
+{
+ WRITE_NODE_TYPE("WINDOWAGGPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_NODE_FIELD(winclause);
+}
+
+static void
+_outSetOpPath(StringInfo str, const SetOpPath *node)
+{
+ WRITE_NODE_TYPE("SETOPPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_ENUM_FIELD(cmd, SetOpCmd);
+ WRITE_ENUM_FIELD(strategy, SetOpStrategy);
+ WRITE_NODE_FIELD(distinctList);
+ WRITE_INT_FIELD(flagColIdx);
+ WRITE_INT_FIELD(firstFlag);
+ WRITE_FLOAT_FIELD(numGroups, "%.0f");
+}
+
+static void
+_outRecursiveUnionPath(StringInfo str, const RecursiveUnionPath *node)
+{
+ WRITE_NODE_TYPE("RECURSIVEUNIONPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(leftpath);
+ WRITE_NODE_FIELD(rightpath);
+ WRITE_NODE_FIELD(distinctList);
+ WRITE_INT_FIELD(wtParam);
+ WRITE_FLOAT_FIELD(numGroups, "%.0f");
+}
+
+static void
+_outLockRowsPath(StringInfo str, const LockRowsPath *node)
+{
+ WRITE_NODE_TYPE("LOCKROWSPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_INT_FIELD(epqParam);
+}
+
+static void
+_outModifyTablePath(StringInfo str, const ModifyTablePath *node)
+{
+ WRITE_NODE_TYPE("MODIFYTABLEPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_ENUM_FIELD(operation, CmdType);
+ WRITE_BOOL_FIELD(canSetTag);
+ WRITE_UINT_FIELD(nominalRelation);
+ WRITE_UINT_FIELD(rootRelation);
+ WRITE_BOOL_FIELD(partColsUpdated);
+ WRITE_NODE_FIELD(resultRelations);
+ WRITE_NODE_FIELD(subpaths);
+ WRITE_NODE_FIELD(subroots);
+ WRITE_NODE_FIELD(withCheckOptionLists);
+ WRITE_NODE_FIELD(returningLists);
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_NODE_FIELD(onconflict);
+ WRITE_INT_FIELD(epqParam);
+}
+
+static void
+_outLimitPath(StringInfo str, const LimitPath *node)
+{
+ WRITE_NODE_TYPE("LIMITPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_NODE_FIELD(limitOffset);
+ WRITE_NODE_FIELD(limitCount);
+ WRITE_ENUM_FIELD(limitOption, LimitOption);
+}
+
+static void
+_outGatherMergePath(StringInfo str, const GatherMergePath *node)
+{
+ WRITE_NODE_TYPE("GATHERMERGEPATH");
+
+ _outPathInfo(str, (const Path *) node);
+
+ WRITE_NODE_FIELD(subpath);
+ WRITE_INT_FIELD(num_workers);
+}
+
+static void
+_outNestPath(StringInfo str, const NestPath *node)
+{
+ WRITE_NODE_TYPE("NESTPATH");
+
+ _outJoinPathInfo(str, (const JoinPath *) node);
+}
+
+static void
+_outMergePath(StringInfo str, const MergePath *node)
+{
+ WRITE_NODE_TYPE("MERGEPATH");
+
+ _outJoinPathInfo(str, (const JoinPath *) node);
+
+ WRITE_NODE_FIELD(path_mergeclauses);
+ WRITE_NODE_FIELD(outersortkeys);
+ WRITE_NODE_FIELD(innersortkeys);
+ WRITE_BOOL_FIELD(skip_mark_restore);
+ WRITE_BOOL_FIELD(materialize_inner);
+}
+
+static void
+_outHashPath(StringInfo str, const HashPath *node)
+{
+ WRITE_NODE_TYPE("HASHPATH");
+
+ _outJoinPathInfo(str, (const JoinPath *) node);
+
+ WRITE_NODE_FIELD(path_hashclauses);
+ WRITE_INT_FIELD(num_batches);
+ WRITE_FLOAT_FIELD(inner_rows_total, "%.0f");
+}
+
+static void
+_outPlannerGlobal(StringInfo str, const PlannerGlobal *node)
+{
+ WRITE_NODE_TYPE("PLANNERGLOBAL");
+
+ /* NB: this isn't a complete set of fields */
+ WRITE_NODE_FIELD(subplans);
+ WRITE_BITMAPSET_FIELD(rewindPlanIDs);
+ WRITE_NODE_FIELD(finalrtable);
+ WRITE_NODE_FIELD(finalrowmarks);
+ WRITE_NODE_FIELD(resultRelations);
+ WRITE_NODE_FIELD(rootResultRelations);
+ WRITE_NODE_FIELD(appendRelations);
+ WRITE_NODE_FIELD(relationOids);
+ WRITE_NODE_FIELD(invalItems);
+ WRITE_NODE_FIELD(paramExecTypes);
+ WRITE_UINT_FIELD(lastPHId);
+ WRITE_UINT_FIELD(lastRowMarkId);
+ WRITE_INT_FIELD(lastPlanNodeId);
+ WRITE_BOOL_FIELD(transientPlan);
+ WRITE_BOOL_FIELD(dependsOnRole);
+ WRITE_BOOL_FIELD(parallelModeOK);
+ WRITE_BOOL_FIELD(parallelModeNeeded);
+ WRITE_CHAR_FIELD(maxParallelHazard);
+}
+
+static void
+_outPlannerInfo(StringInfo str, const PlannerInfo *node)
+{
+ WRITE_NODE_TYPE("PLANNERINFO");
+
+ /* NB: this isn't a complete set of fields */
+ WRITE_NODE_FIELD(parse);
+ WRITE_NODE_FIELD(glob);
+ WRITE_UINT_FIELD(query_level);
+ WRITE_NODE_FIELD(plan_params);
+ WRITE_BITMAPSET_FIELD(outer_params);
+ WRITE_BITMAPSET_FIELD(all_baserels);
+ WRITE_BITMAPSET_FIELD(nullable_baserels);
+ WRITE_NODE_FIELD(join_rel_list);
+ WRITE_INT_FIELD(join_cur_level);
+ WRITE_NODE_FIELD(init_plans);
+ WRITE_NODE_FIELD(cte_plan_ids);
+ WRITE_NODE_FIELD(multiexpr_params);
+ WRITE_NODE_FIELD(eq_classes);
+ WRITE_BOOL_FIELD(ec_merging_done);
+ WRITE_NODE_FIELD(canon_pathkeys);
+ WRITE_NODE_FIELD(left_join_clauses);
+ WRITE_NODE_FIELD(right_join_clauses);
+ WRITE_NODE_FIELD(full_join_clauses);
+ WRITE_NODE_FIELD(join_info_list);
+ WRITE_NODE_FIELD(append_rel_list);
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_NODE_FIELD(placeholder_list);
+ WRITE_NODE_FIELD(fkey_list);
+ WRITE_NODE_FIELD(query_pathkeys);
+ WRITE_NODE_FIELD(group_pathkeys);
+ WRITE_NODE_FIELD(window_pathkeys);
+ WRITE_NODE_FIELD(distinct_pathkeys);
+ WRITE_NODE_FIELD(sort_pathkeys);
+ WRITE_NODE_FIELD(processed_tlist);
+ WRITE_NODE_FIELD(minmax_aggs);
+ WRITE_FLOAT_FIELD(total_table_pages, "%.0f");
+ WRITE_FLOAT_FIELD(tuple_fraction, "%.4f");
+ WRITE_FLOAT_FIELD(limit_tuples, "%.0f");
+ WRITE_UINT_FIELD(qual_security_level);
+ WRITE_ENUM_FIELD(inhTargetKind, InheritanceKind);
+ WRITE_BOOL_FIELD(hasJoinRTEs);
+ WRITE_BOOL_FIELD(hasLateralRTEs);
+ WRITE_BOOL_FIELD(hasHavingQual);
+ WRITE_BOOL_FIELD(hasPseudoConstantQuals);
+ WRITE_BOOL_FIELD(hasRecursion);
+ WRITE_INT_FIELD(wt_param_id);
+ WRITE_BITMAPSET_FIELD(curOuterRels);
+ WRITE_NODE_FIELD(curOuterParams);
+ WRITE_BOOL_FIELD(partColsUpdated);
+}
+
+static void
+_outRelOptInfo(StringInfo str, const RelOptInfo *node)
+{
+ WRITE_NODE_TYPE("RELOPTINFO");
+
+ /* NB: this isn't a complete set of fields */
+ WRITE_ENUM_FIELD(reloptkind, RelOptKind);
+ WRITE_BITMAPSET_FIELD(relids);
+ WRITE_FLOAT_FIELD(rows, "%.0f");
+ WRITE_BOOL_FIELD(consider_startup);
+ WRITE_BOOL_FIELD(consider_param_startup);
+ WRITE_BOOL_FIELD(consider_parallel);
+ WRITE_NODE_FIELD(reltarget);
+ WRITE_NODE_FIELD(pathlist);
+ WRITE_NODE_FIELD(ppilist);
+ WRITE_NODE_FIELD(partial_pathlist);
+ WRITE_NODE_FIELD(cheapest_startup_path);
+ WRITE_NODE_FIELD(cheapest_total_path);
+ WRITE_NODE_FIELD(cheapest_unique_path);
+ WRITE_NODE_FIELD(cheapest_parameterized_paths);
+ WRITE_BITMAPSET_FIELD(direct_lateral_relids);
+ WRITE_BITMAPSET_FIELD(lateral_relids);
+ WRITE_UINT_FIELD(relid);
+ WRITE_OID_FIELD(reltablespace);
+ WRITE_ENUM_FIELD(rtekind, RTEKind);
+ WRITE_INT_FIELD(min_attr);
+ WRITE_INT_FIELD(max_attr);
+ WRITE_NODE_FIELD(lateral_vars);
+ WRITE_BITMAPSET_FIELD(lateral_referencers);
+ WRITE_NODE_FIELD(indexlist);
+ WRITE_NODE_FIELD(statlist);
+ WRITE_UINT_FIELD(pages);
+ WRITE_FLOAT_FIELD(tuples, "%.0f");
+ WRITE_FLOAT_FIELD(allvisfrac, "%.6f");
+ WRITE_BITMAPSET_FIELD(eclass_indexes);
+ WRITE_NODE_FIELD(subroot);
+ WRITE_NODE_FIELD(subplan_params);
+ WRITE_INT_FIELD(rel_parallel_workers);
+ WRITE_OID_FIELD(serverid);
+ WRITE_OID_FIELD(userid);
+ WRITE_BOOL_FIELD(useridiscurrent);
+ /* we don't try to print fdwroutine or fdw_private */
+ /* can't print unique_for_rels/non_unique_for_rels; BMSes aren't Nodes */
+ WRITE_NODE_FIELD(baserestrictinfo);
+ WRITE_UINT_FIELD(baserestrict_min_security);
+ WRITE_NODE_FIELD(joininfo);
+ WRITE_BOOL_FIELD(has_eclass_joins);
+ WRITE_BOOL_FIELD(consider_partitionwise_join);
+ WRITE_BITMAPSET_FIELD(top_parent_relids);
+ WRITE_BOOL_FIELD(partbounds_merged);
+ WRITE_BITMAPSET_FIELD(all_partrels);
+ WRITE_NODE_FIELD(partitioned_child_rels);
+}
+
+static void
+_outIndexOptInfo(StringInfo str, const IndexOptInfo *node)
+{
+ WRITE_NODE_TYPE("INDEXOPTINFO");
+
+ /* NB: this isn't a complete set of fields */
+ WRITE_OID_FIELD(indexoid);
+ /* Do NOT print rel field, else infinite recursion */
+ WRITE_UINT_FIELD(pages);
+ WRITE_FLOAT_FIELD(tuples, "%.0f");
+ WRITE_INT_FIELD(tree_height);
+ WRITE_INT_FIELD(ncolumns);
+ /* array fields aren't really worth the trouble to print */
+ WRITE_OID_FIELD(relam);
+ /* indexprs is redundant since we print indextlist */
+ WRITE_NODE_FIELD(indpred);
+ WRITE_NODE_FIELD(indextlist);
+ WRITE_NODE_FIELD(indrestrictinfo);
+ WRITE_BOOL_FIELD(predOK);
+ WRITE_BOOL_FIELD(unique);
+ WRITE_BOOL_FIELD(immediate);
+ WRITE_BOOL_FIELD(hypothetical);
+ /* we don't bother with fields copied from the index AM's API struct */
+}
+
+static void
+_outForeignKeyOptInfo(StringInfo str, const ForeignKeyOptInfo *node)
+{
+ int i;
+
+ WRITE_NODE_TYPE("FOREIGNKEYOPTINFO");
+
+ WRITE_UINT_FIELD(con_relid);
+ WRITE_UINT_FIELD(ref_relid);
+ WRITE_INT_FIELD(nkeys);
+ WRITE_ATTRNUMBER_ARRAY(conkey, node->nkeys);
+ WRITE_ATTRNUMBER_ARRAY(confkey, node->nkeys);
+ WRITE_OID_ARRAY(conpfeqop, node->nkeys);
+ WRITE_INT_FIELD(nmatched_ec);
+ WRITE_INT_FIELD(nmatched_rcols);
+ WRITE_INT_FIELD(nmatched_ri);
+ /* for compactness, just print the number of matches per column: */
+ appendStringInfoString(str, " :eclass");
+ for (i = 0; i < node->nkeys; i++)
+ appendStringInfo(str, " %d", (node->eclass[i] != NULL));
+ appendStringInfoString(str, " :rinfos");
+ for (i = 0; i < node->nkeys; i++)
+ appendStringInfo(str, " %d", list_length(node->rinfos[i]));
+}
+
+static void
+_outStatisticExtInfo(StringInfo str, const StatisticExtInfo *node)
+{
+ WRITE_NODE_TYPE("STATISTICEXTINFO");
+
+ /* NB: this isn't a complete set of fields */
+ WRITE_OID_FIELD(statOid);
+ /* don't write rel, leads to infinite recursion in plan tree dump */
+ WRITE_CHAR_FIELD(kind);
+ WRITE_BITMAPSET_FIELD(keys);
+}
+
+static void
+_outEquivalenceClass(StringInfo str, const EquivalenceClass *node)
+{
+ /*
+ * To simplify reading, we just chase up to the topmost merged EC and
+ * print that, without bothering to show the merge-ees separately.
+ */
+ while (node->ec_merged)
+ node = node->ec_merged;
+
+ WRITE_NODE_TYPE("EQUIVALENCECLASS");
+
+ WRITE_NODE_FIELD(ec_opfamilies);
+ WRITE_OID_FIELD(ec_collation);
+ WRITE_NODE_FIELD(ec_members);
+ WRITE_NODE_FIELD(ec_sources);
+ WRITE_NODE_FIELD(ec_derives);
+ WRITE_BITMAPSET_FIELD(ec_relids);
+ WRITE_BOOL_FIELD(ec_has_const);
+ WRITE_BOOL_FIELD(ec_has_volatile);
+ WRITE_BOOL_FIELD(ec_below_outer_join);
+ WRITE_BOOL_FIELD(ec_broken);
+ WRITE_UINT_FIELD(ec_sortref);
+ WRITE_UINT_FIELD(ec_min_security);
+ WRITE_UINT_FIELD(ec_max_security);
+}
+
+static void
+_outEquivalenceMember(StringInfo str, const EquivalenceMember *node)
+{
+ WRITE_NODE_TYPE("EQUIVALENCEMEMBER");
+
+ WRITE_NODE_FIELD(em_expr);
+ WRITE_BITMAPSET_FIELD(em_relids);
+ WRITE_BITMAPSET_FIELD(em_nullable_relids);
+ WRITE_BOOL_FIELD(em_is_const);
+ WRITE_BOOL_FIELD(em_is_child);
+ WRITE_OID_FIELD(em_datatype);
+}
+
+static void
+_outPathKey(StringInfo str, const PathKey *node)
+{
+ WRITE_NODE_TYPE("PATHKEY");
+
+ WRITE_NODE_FIELD(pk_eclass);
+ WRITE_OID_FIELD(pk_opfamily);
+ WRITE_INT_FIELD(pk_strategy);
+ WRITE_BOOL_FIELD(pk_nulls_first);
+}
+
+static void
+_outPathTarget(StringInfo str, const PathTarget *node)
+{
+ WRITE_NODE_TYPE("PATHTARGET");
+
+ WRITE_NODE_FIELD(exprs);
+ if (node->sortgrouprefs)
+ {
+ int i;
+
+ appendStringInfoString(str, " :sortgrouprefs");
+ for (i = 0; i < list_length(node->exprs); i++)
+ appendStringInfo(str, " %u", node->sortgrouprefs[i]);
+ }
+ WRITE_FLOAT_FIELD(cost.startup, "%.2f");
+ WRITE_FLOAT_FIELD(cost.per_tuple, "%.2f");
+ WRITE_INT_FIELD(width);
+}
+
+static void
+_outParamPathInfo(StringInfo str, const ParamPathInfo *node)
+{
+ WRITE_NODE_TYPE("PARAMPATHINFO");
+
+ WRITE_BITMAPSET_FIELD(ppi_req_outer);
+ WRITE_FLOAT_FIELD(ppi_rows, "%.0f");
+ WRITE_NODE_FIELD(ppi_clauses);
+}
+
+static void
+_outRestrictInfo(StringInfo str, const RestrictInfo *node)
+{
+ WRITE_NODE_TYPE("RESTRICTINFO");
+
+ /* NB: this isn't a complete set of fields */
+ WRITE_NODE_FIELD(clause);
+ WRITE_BOOL_FIELD(is_pushed_down);
+ WRITE_BOOL_FIELD(outerjoin_delayed);
+ WRITE_BOOL_FIELD(can_join);
+ WRITE_BOOL_FIELD(pseudoconstant);
+ WRITE_BOOL_FIELD(leakproof);
+ WRITE_UINT_FIELD(security_level);
+ WRITE_BITMAPSET_FIELD(clause_relids);
+ WRITE_BITMAPSET_FIELD(required_relids);
+ WRITE_BITMAPSET_FIELD(outer_relids);
+ WRITE_BITMAPSET_FIELD(nullable_relids);
+ WRITE_BITMAPSET_FIELD(left_relids);
+ WRITE_BITMAPSET_FIELD(right_relids);
+ WRITE_NODE_FIELD(orclause);
+ /* don't write parent_ec, leads to infinite recursion in plan tree dump */
+ WRITE_FLOAT_FIELD(norm_selec, "%.4f");
+ WRITE_FLOAT_FIELD(outer_selec, "%.4f");
+ WRITE_NODE_FIELD(mergeopfamilies);
+ /* don't write left_ec, leads to infinite recursion in plan tree dump */
+ /* don't write right_ec, leads to infinite recursion in plan tree dump */
+ WRITE_NODE_FIELD(left_em);
+ WRITE_NODE_FIELD(right_em);
+ WRITE_BOOL_FIELD(outer_is_left);
+ WRITE_OID_FIELD(hashjoinoperator);
+}
+
+static void
+_outIndexClause(StringInfo str, const IndexClause *node)
+{
+ WRITE_NODE_TYPE("INDEXCLAUSE");
+
+ WRITE_NODE_FIELD(rinfo);
+ WRITE_NODE_FIELD(indexquals);
+ WRITE_BOOL_FIELD(lossy);
+ WRITE_INT_FIELD(indexcol);
+ WRITE_NODE_FIELD(indexcols);
+}
+
+static void
+_outPlaceHolderVar(StringInfo str, const PlaceHolderVar *node)
+{
+ WRITE_NODE_TYPE("PLACEHOLDERVAR");
+
+ WRITE_NODE_FIELD(phexpr);
+ WRITE_BITMAPSET_FIELD(phrels);
+ WRITE_UINT_FIELD(phid);
+ WRITE_UINT_FIELD(phlevelsup);
+}
+
+static void
+_outSpecialJoinInfo(StringInfo str, const SpecialJoinInfo *node)
+{
+ WRITE_NODE_TYPE("SPECIALJOININFO");
+
+ WRITE_BITMAPSET_FIELD(min_lefthand);
+ WRITE_BITMAPSET_FIELD(min_righthand);
+ WRITE_BITMAPSET_FIELD(syn_lefthand);
+ WRITE_BITMAPSET_FIELD(syn_righthand);
+ WRITE_ENUM_FIELD(jointype, JoinType);
+ WRITE_BOOL_FIELD(lhs_strict);
+ WRITE_BOOL_FIELD(delay_upper_joins);
+ WRITE_BOOL_FIELD(semi_can_btree);
+ WRITE_BOOL_FIELD(semi_can_hash);
+ WRITE_NODE_FIELD(semi_operators);
+ WRITE_NODE_FIELD(semi_rhs_exprs);
+}
+
+static void
+_outAppendRelInfo(StringInfo str, const AppendRelInfo *node)
+{
+ WRITE_NODE_TYPE("APPENDRELINFO");
+
+ WRITE_UINT_FIELD(parent_relid);
+ WRITE_UINT_FIELD(child_relid);
+ WRITE_OID_FIELD(parent_reltype);
+ WRITE_OID_FIELD(child_reltype);
+ WRITE_NODE_FIELD(translated_vars);
+ WRITE_INT_FIELD(num_child_cols);
+ WRITE_ATTRNUMBER_ARRAY(parent_colnos, node->num_child_cols);
+ WRITE_OID_FIELD(parent_reloid);
+}
+
+static void
+_outPlaceHolderInfo(StringInfo str, const PlaceHolderInfo *node)
+{
+ WRITE_NODE_TYPE("PLACEHOLDERINFO");
+
+ WRITE_UINT_FIELD(phid);
+ WRITE_NODE_FIELD(ph_var);
+ WRITE_BITMAPSET_FIELD(ph_eval_at);
+ WRITE_BITMAPSET_FIELD(ph_lateral);
+ WRITE_BITMAPSET_FIELD(ph_needed);
+ WRITE_INT_FIELD(ph_width);
+}
+
+static void
+_outMinMaxAggInfo(StringInfo str, const MinMaxAggInfo *node)
+{
+ WRITE_NODE_TYPE("MINMAXAGGINFO");
+
+ WRITE_OID_FIELD(aggfnoid);
+ WRITE_OID_FIELD(aggsortop);
+ WRITE_NODE_FIELD(target);
+ /* We intentionally omit subroot --- too large, not interesting enough */
+ WRITE_NODE_FIELD(path);
+ WRITE_FLOAT_FIELD(pathcost, "%.2f");
+ WRITE_NODE_FIELD(param);
+}
+
+static void
+_outPlannerParamItem(StringInfo str, const PlannerParamItem *node)
+{
+ WRITE_NODE_TYPE("PLANNERPARAMITEM");
+
+ WRITE_NODE_FIELD(item);
+ WRITE_INT_FIELD(paramId);
+}
+
+/*****************************************************************************
+ *
+ * Stuff from extensible.h
+ *
+ *****************************************************************************/
+
+static void
+_outExtensibleNode(StringInfo str, const ExtensibleNode *node)
+{
+ const ExtensibleNodeMethods *methods;
+
+ methods = GetExtensibleNodeMethods(node->extnodename, false);
+
+ WRITE_NODE_TYPE("EXTENSIBLENODE");
+
+ WRITE_STRING_FIELD(extnodename);
+
+ /* serialize the private fields */
+ methods->nodeOut(str, node);
+}
+
+/*****************************************************************************
+ *
+ * Stuff from parsenodes.h.
+ *
+ *****************************************************************************/
+
+/*
+ * print the basic stuff of all nodes that inherit from CreateStmt
+ */
+static void
+_outCreateStmtInfo(StringInfo str, const CreateStmt *node)
+{
+ WRITE_NODE_FIELD(relation);
+ WRITE_NODE_FIELD(tableElts);
+ WRITE_NODE_FIELD(inhRelations);
+ WRITE_NODE_FIELD(partspec);
+ WRITE_NODE_FIELD(partbound);
+ WRITE_NODE_FIELD(ofTypename);
+ WRITE_NODE_FIELD(constraints);
+ WRITE_NODE_FIELD(options);
+ WRITE_ENUM_FIELD(oncommit, OnCommitAction);
+ WRITE_STRING_FIELD(tablespacename);
+ WRITE_STRING_FIELD(accessMethod);
+ WRITE_BOOL_FIELD(if_not_exists);
+}
+
+static void
+_outCreateStmt(StringInfo str, const CreateStmt *node)
+{
+ WRITE_NODE_TYPE("CREATESTMT");
+
+ _outCreateStmtInfo(str, (const CreateStmt *) node);
+}
+
+static void
+_outCreateForeignTableStmt(StringInfo str, const CreateForeignTableStmt *node)
+{
+ WRITE_NODE_TYPE("CREATEFOREIGNTABLESTMT");
+
+ _outCreateStmtInfo(str, (const CreateStmt *) node);
+
+ WRITE_STRING_FIELD(servername);
+ WRITE_NODE_FIELD(options);
+}
+
+static void
+_outImportForeignSchemaStmt(StringInfo str, const ImportForeignSchemaStmt *node)
+{
+ WRITE_NODE_TYPE("IMPORTFOREIGNSCHEMASTMT");
+
+ WRITE_STRING_FIELD(server_name);
+ WRITE_STRING_FIELD(remote_schema);
+ WRITE_STRING_FIELD(local_schema);
+ WRITE_ENUM_FIELD(list_type, ImportForeignSchemaType);
+ WRITE_NODE_FIELD(table_list);
+ WRITE_NODE_FIELD(options);
+}
+
+static void
+_outIndexStmt(StringInfo str, const IndexStmt *node)
+{
+ WRITE_NODE_TYPE("INDEXSTMT");
+
+ WRITE_STRING_FIELD(idxname);
+ WRITE_NODE_FIELD(relation);
+ WRITE_STRING_FIELD(accessMethod);
+ WRITE_STRING_FIELD(tableSpace);
+ WRITE_NODE_FIELD(indexParams);
+ WRITE_NODE_FIELD(indexIncludingParams);
+ WRITE_NODE_FIELD(options);
+ WRITE_NODE_FIELD(whereClause);
+ WRITE_NODE_FIELD(excludeOpNames);
+ WRITE_STRING_FIELD(idxcomment);
+ WRITE_OID_FIELD(indexOid);
+ WRITE_OID_FIELD(oldNode);
+ WRITE_UINT_FIELD(oldCreateSubid);
+ WRITE_UINT_FIELD(oldFirstRelfilenodeSubid);
+ WRITE_BOOL_FIELD(unique);
+ WRITE_BOOL_FIELD(primary);
+ WRITE_BOOL_FIELD(isconstraint);
+ WRITE_BOOL_FIELD(deferrable);
+ WRITE_BOOL_FIELD(initdeferred);
+ WRITE_BOOL_FIELD(transformed);
+ WRITE_BOOL_FIELD(concurrent);
+ WRITE_BOOL_FIELD(if_not_exists);
+ WRITE_BOOL_FIELD(reset_default_tblspc);
+}
+
+static void
+_outCreateStatsStmt(StringInfo str, const CreateStatsStmt *node)
+{
+ WRITE_NODE_TYPE("CREATESTATSSTMT");
+
+ WRITE_NODE_FIELD(defnames);
+ WRITE_NODE_FIELD(stat_types);
+ WRITE_NODE_FIELD(exprs);
+ WRITE_NODE_FIELD(relations);
+ WRITE_STRING_FIELD(stxcomment);
+ WRITE_BOOL_FIELD(if_not_exists);
+}
+
+static void
+_outAlterStatsStmt(StringInfo str, const AlterStatsStmt *node)
+{
+ WRITE_NODE_TYPE("ALTERSTATSSTMT");
+
+ WRITE_NODE_FIELD(defnames);
+ WRITE_INT_FIELD(stxstattarget);
+ WRITE_BOOL_FIELD(missing_ok);
+}
+
+static void
+_outNotifyStmt(StringInfo str, const NotifyStmt *node)
+{
+ WRITE_NODE_TYPE("NOTIFY");
+
+ WRITE_STRING_FIELD(conditionname);
+ WRITE_STRING_FIELD(payload);
+}
+
+static void
+_outDeclareCursorStmt(StringInfo str, const DeclareCursorStmt *node)
+{
+ WRITE_NODE_TYPE("DECLARECURSOR");
+
+ WRITE_STRING_FIELD(portalname);
+ WRITE_INT_FIELD(options);
+ WRITE_NODE_FIELD(query);
+}
+
+static void
+_outSelectStmt(StringInfo str, const SelectStmt *node)
+{
+ WRITE_NODE_TYPE("SELECT");
+
+ WRITE_NODE_FIELD(distinctClause);
+ WRITE_NODE_FIELD(intoClause);
+ WRITE_NODE_FIELD(targetList);
+ WRITE_NODE_FIELD(fromClause);
+ WRITE_NODE_FIELD(whereClause);
+ WRITE_NODE_FIELD(groupClause);
+ WRITE_NODE_FIELD(havingClause);
+ WRITE_NODE_FIELD(windowClause);
+ WRITE_NODE_FIELD(valuesLists);
+ WRITE_NODE_FIELD(sortClause);
+ WRITE_NODE_FIELD(limitOffset);
+ WRITE_NODE_FIELD(limitCount);
+ WRITE_ENUM_FIELD(limitOption, LimitOption);
+ WRITE_NODE_FIELD(lockingClause);
+ WRITE_NODE_FIELD(withClause);
+ WRITE_ENUM_FIELD(op, SetOperation);
+ WRITE_BOOL_FIELD(all);
+ WRITE_NODE_FIELD(larg);
+ WRITE_NODE_FIELD(rarg);
+}
+
+static void
+_outFuncCall(StringInfo str, const FuncCall *node)
+{
+ WRITE_NODE_TYPE("FUNCCALL");
+
+ WRITE_NODE_FIELD(funcname);
+ WRITE_NODE_FIELD(args);
+ WRITE_NODE_FIELD(agg_order);
+ WRITE_NODE_FIELD(agg_filter);
+ WRITE_BOOL_FIELD(agg_within_group);
+ WRITE_BOOL_FIELD(agg_star);
+ WRITE_BOOL_FIELD(agg_distinct);
+ WRITE_BOOL_FIELD(func_variadic);
+ WRITE_NODE_FIELD(over);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outDefElem(StringInfo str, const DefElem *node)
+{
+ WRITE_NODE_TYPE("DEFELEM");
+
+ WRITE_STRING_FIELD(defnamespace);
+ WRITE_STRING_FIELD(defname);
+ WRITE_NODE_FIELD(arg);
+ WRITE_ENUM_FIELD(defaction, DefElemAction);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outTableLikeClause(StringInfo str, const TableLikeClause *node)
+{
+ WRITE_NODE_TYPE("TABLELIKECLAUSE");
+
+ WRITE_NODE_FIELD(relation);
+ WRITE_UINT_FIELD(options);
+ WRITE_OID_FIELD(relationOid);
+}
+
+static void
+_outLockingClause(StringInfo str, const LockingClause *node)
+{
+ WRITE_NODE_TYPE("LOCKINGCLAUSE");
+
+ WRITE_NODE_FIELD(lockedRels);
+ WRITE_ENUM_FIELD(strength, LockClauseStrength);
+ WRITE_ENUM_FIELD(waitPolicy, LockWaitPolicy);
+}
+
+static void
+_outXmlSerialize(StringInfo str, const XmlSerialize *node)
+{
+ WRITE_NODE_TYPE("XMLSERIALIZE");
+
+ WRITE_ENUM_FIELD(xmloption, XmlOptionType);
+ WRITE_NODE_FIELD(expr);
+ WRITE_NODE_FIELD(typeName);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outTriggerTransition(StringInfo str, const TriggerTransition *node)
+{
+ WRITE_NODE_TYPE("TRIGGERTRANSITION");
+
+ WRITE_STRING_FIELD(name);
+ WRITE_BOOL_FIELD(isNew);
+ WRITE_BOOL_FIELD(isTable);
+}
+
+static void
+_outColumnDef(StringInfo str, const ColumnDef *node)
+{
+ WRITE_NODE_TYPE("COLUMNDEF");
+
+ WRITE_STRING_FIELD(colname);
+ WRITE_NODE_FIELD(typeName);
+ WRITE_INT_FIELD(inhcount);
+ WRITE_BOOL_FIELD(is_local);
+ WRITE_BOOL_FIELD(is_not_null);
+ WRITE_BOOL_FIELD(is_from_type);
+ WRITE_CHAR_FIELD(storage);
+ WRITE_NODE_FIELD(raw_default);
+ WRITE_NODE_FIELD(cooked_default);
+ WRITE_CHAR_FIELD(identity);
+ WRITE_NODE_FIELD(identitySequence);
+ WRITE_CHAR_FIELD(generated);
+ WRITE_NODE_FIELD(collClause);
+ WRITE_OID_FIELD(collOid);
+ WRITE_NODE_FIELD(constraints);
+ WRITE_NODE_FIELD(fdwoptions);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outTypeName(StringInfo str, const TypeName *node)
+{
+ WRITE_NODE_TYPE("TYPENAME");
+
+ WRITE_NODE_FIELD(names);
+ WRITE_OID_FIELD(typeOid);
+ WRITE_BOOL_FIELD(setof);
+ WRITE_BOOL_FIELD(pct_type);
+ WRITE_NODE_FIELD(typmods);
+ WRITE_INT_FIELD(typemod);
+ WRITE_NODE_FIELD(arrayBounds);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outTypeCast(StringInfo str, const TypeCast *node)
+{
+ WRITE_NODE_TYPE("TYPECAST");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_NODE_FIELD(typeName);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outCollateClause(StringInfo str, const CollateClause *node)
+{
+ WRITE_NODE_TYPE("COLLATECLAUSE");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_NODE_FIELD(collname);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outIndexElem(StringInfo str, const IndexElem *node)
+{
+ WRITE_NODE_TYPE("INDEXELEM");
+
+ WRITE_STRING_FIELD(name);
+ WRITE_NODE_FIELD(expr);
+ WRITE_STRING_FIELD(indexcolname);
+ WRITE_NODE_FIELD(collation);
+ WRITE_NODE_FIELD(opclass);
+ WRITE_NODE_FIELD(opclassopts);
+ WRITE_ENUM_FIELD(ordering, SortByDir);
+ WRITE_ENUM_FIELD(nulls_ordering, SortByNulls);
+}
+
+static void
+_outQuery(StringInfo str, const Query *node)
+{
+ WRITE_NODE_TYPE("QUERY");
+
+ WRITE_ENUM_FIELD(commandType, CmdType);
+ WRITE_ENUM_FIELD(querySource, QuerySource);
+ /* we intentionally do not print the queryId field */
+ WRITE_BOOL_FIELD(canSetTag);
+
+ /*
+ * Hack to work around missing outfuncs routines for a lot of the
+ * utility-statement node types. (The only one we actually *need* for
+ * rules support is NotifyStmt.) Someday we ought to support 'em all, but
+ * for the meantime do this to avoid getting lots of warnings when running
+ * with debug_print_parse on.
+ */
+ if (node->utilityStmt)
+ {
+ switch (nodeTag(node->utilityStmt))
+ {
+ case T_CreateStmt:
+ case T_IndexStmt:
+ case T_NotifyStmt:
+ case T_DeclareCursorStmt:
+ WRITE_NODE_FIELD(utilityStmt);
+ break;
+ default:
+ appendStringInfoString(str, " :utilityStmt ?");
+ break;
+ }
+ }
+ else
+ appendStringInfoString(str, " :utilityStmt <>");
+
+ WRITE_INT_FIELD(resultRelation);
+ WRITE_BOOL_FIELD(hasAggs);
+ WRITE_BOOL_FIELD(hasWindowFuncs);
+ WRITE_BOOL_FIELD(hasTargetSRFs);
+ WRITE_BOOL_FIELD(hasSubLinks);
+ WRITE_BOOL_FIELD(hasDistinctOn);
+ WRITE_BOOL_FIELD(hasRecursive);
+ WRITE_BOOL_FIELD(hasModifyingCTE);
+ WRITE_BOOL_FIELD(hasForUpdate);
+ WRITE_BOOL_FIELD(hasRowSecurity);
+ WRITE_NODE_FIELD(cteList);
+ WRITE_NODE_FIELD(rtable);
+ WRITE_NODE_FIELD(jointree);
+ WRITE_NODE_FIELD(targetList);
+ WRITE_ENUM_FIELD(override, OverridingKind);
+ WRITE_NODE_FIELD(onConflict);
+ WRITE_NODE_FIELD(returningList);
+ WRITE_NODE_FIELD(groupClause);
+ WRITE_NODE_FIELD(groupingSets);
+ WRITE_NODE_FIELD(havingQual);
+ WRITE_NODE_FIELD(windowClause);
+ WRITE_NODE_FIELD(distinctClause);
+ WRITE_NODE_FIELD(sortClause);
+ WRITE_NODE_FIELD(limitOffset);
+ WRITE_NODE_FIELD(limitCount);
+ WRITE_ENUM_FIELD(limitOption, LimitOption);
+ WRITE_NODE_FIELD(rowMarks);
+ WRITE_NODE_FIELD(setOperations);
+ WRITE_NODE_FIELD(constraintDeps);
+ WRITE_NODE_FIELD(withCheckOptions);
+ WRITE_LOCATION_FIELD(stmt_location);
+ WRITE_INT_FIELD(stmt_len);
+}
+
+static void
+_outWithCheckOption(StringInfo str, const WithCheckOption *node)
+{
+ WRITE_NODE_TYPE("WITHCHECKOPTION");
+
+ WRITE_ENUM_FIELD(kind, WCOKind);
+ WRITE_STRING_FIELD(relname);
+ WRITE_STRING_FIELD(polname);
+ WRITE_NODE_FIELD(qual);
+ WRITE_BOOL_FIELD(cascaded);
+}
+
+static void
+_outSortGroupClause(StringInfo str, const SortGroupClause *node)
+{
+ WRITE_NODE_TYPE("SORTGROUPCLAUSE");
+
+ WRITE_UINT_FIELD(tleSortGroupRef);
+ WRITE_OID_FIELD(eqop);
+ WRITE_OID_FIELD(sortop);
+ WRITE_BOOL_FIELD(nulls_first);
+ WRITE_BOOL_FIELD(hashable);
+}
+
+static void
+_outGroupingSet(StringInfo str, const GroupingSet *node)
+{
+ WRITE_NODE_TYPE("GROUPINGSET");
+
+ WRITE_ENUM_FIELD(kind, GroupingSetKind);
+ WRITE_NODE_FIELD(content);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outWindowClause(StringInfo str, const WindowClause *node)
+{
+ WRITE_NODE_TYPE("WINDOWCLAUSE");
+
+ WRITE_STRING_FIELD(name);
+ WRITE_STRING_FIELD(refname);
+ WRITE_NODE_FIELD(partitionClause);
+ WRITE_NODE_FIELD(orderClause);
+ WRITE_INT_FIELD(frameOptions);
+ WRITE_NODE_FIELD(startOffset);
+ WRITE_NODE_FIELD(endOffset);
+ WRITE_OID_FIELD(startInRangeFunc);
+ WRITE_OID_FIELD(endInRangeFunc);
+ WRITE_OID_FIELD(inRangeColl);
+ WRITE_BOOL_FIELD(inRangeAsc);
+ WRITE_BOOL_FIELD(inRangeNullsFirst);
+ WRITE_UINT_FIELD(winref);
+ WRITE_BOOL_FIELD(copiedOrder);
+}
+
+static void
+_outRowMarkClause(StringInfo str, const RowMarkClause *node)
+{
+ WRITE_NODE_TYPE("ROWMARKCLAUSE");
+
+ WRITE_UINT_FIELD(rti);
+ WRITE_ENUM_FIELD(strength, LockClauseStrength);
+ WRITE_ENUM_FIELD(waitPolicy, LockWaitPolicy);
+ WRITE_BOOL_FIELD(pushedDown);
+}
+
+static void
+_outWithClause(StringInfo str, const WithClause *node)
+{
+ WRITE_NODE_TYPE("WITHCLAUSE");
+
+ WRITE_NODE_FIELD(ctes);
+ WRITE_BOOL_FIELD(recursive);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outCommonTableExpr(StringInfo str, const CommonTableExpr *node)
+{
+ WRITE_NODE_TYPE("COMMONTABLEEXPR");
+
+ WRITE_STRING_FIELD(ctename);
+ WRITE_NODE_FIELD(aliascolnames);
+ WRITE_ENUM_FIELD(ctematerialized, CTEMaterialize);
+ WRITE_NODE_FIELD(ctequery);
+ WRITE_LOCATION_FIELD(location);
+ WRITE_BOOL_FIELD(cterecursive);
+ WRITE_INT_FIELD(cterefcount);
+ WRITE_NODE_FIELD(ctecolnames);
+ WRITE_NODE_FIELD(ctecoltypes);
+ WRITE_NODE_FIELD(ctecoltypmods);
+ WRITE_NODE_FIELD(ctecolcollations);
+}
+
+static void
+_outSetOperationStmt(StringInfo str, const SetOperationStmt *node)
+{
+ WRITE_NODE_TYPE("SETOPERATIONSTMT");
+
+ WRITE_ENUM_FIELD(op, SetOperation);
+ WRITE_BOOL_FIELD(all);
+ WRITE_NODE_FIELD(larg);
+ WRITE_NODE_FIELD(rarg);
+ WRITE_NODE_FIELD(colTypes);
+ WRITE_NODE_FIELD(colTypmods);
+ WRITE_NODE_FIELD(colCollations);
+ WRITE_NODE_FIELD(groupClauses);
+}
+
+static void
+_outRangeTblEntry(StringInfo str, const RangeTblEntry *node)
+{
+ WRITE_NODE_TYPE("RTE");
+
+ /* put alias + eref first to make dump more legible */
+ WRITE_NODE_FIELD(alias);
+ WRITE_NODE_FIELD(eref);
+ WRITE_ENUM_FIELD(rtekind, RTEKind);
+
+ switch (node->rtekind)
+ {
+ case RTE_RELATION:
+ WRITE_OID_FIELD(relid);
+ WRITE_CHAR_FIELD(relkind);
+ WRITE_INT_FIELD(rellockmode);
+ WRITE_NODE_FIELD(tablesample);
+ break;
+ case RTE_SUBQUERY:
+ WRITE_NODE_FIELD(subquery);
+ WRITE_BOOL_FIELD(security_barrier);
+ break;
+ case RTE_JOIN:
+ WRITE_ENUM_FIELD(jointype, JoinType);
+ WRITE_INT_FIELD(joinmergedcols);
+ WRITE_NODE_FIELD(joinaliasvars);
+ WRITE_NODE_FIELD(joinleftcols);
+ WRITE_NODE_FIELD(joinrightcols);
+ break;
+ case RTE_FUNCTION:
+ WRITE_NODE_FIELD(functions);
+ WRITE_BOOL_FIELD(funcordinality);
+ break;
+ case RTE_TABLEFUNC:
+ WRITE_NODE_FIELD(tablefunc);
+ break;
+ case RTE_VALUES:
+ WRITE_NODE_FIELD(values_lists);
+ WRITE_NODE_FIELD(coltypes);
+ WRITE_NODE_FIELD(coltypmods);
+ WRITE_NODE_FIELD(colcollations);
+ break;
+ case RTE_CTE:
+ WRITE_STRING_FIELD(ctename);
+ WRITE_UINT_FIELD(ctelevelsup);
+ WRITE_BOOL_FIELD(self_reference);
+ WRITE_NODE_FIELD(coltypes);
+ WRITE_NODE_FIELD(coltypmods);
+ WRITE_NODE_FIELD(colcollations);
+ break;
+ case RTE_NAMEDTUPLESTORE:
+ WRITE_STRING_FIELD(enrname);
+ WRITE_FLOAT_FIELD(enrtuples, "%.0f");
+ WRITE_OID_FIELD(relid);
+ WRITE_NODE_FIELD(coltypes);
+ WRITE_NODE_FIELD(coltypmods);
+ WRITE_NODE_FIELD(colcollations);
+ break;
+ case RTE_RESULT:
+ /* no extra fields */
+ break;
+ default:
+ elog(ERROR, "unrecognized RTE kind: %d", (int) node->rtekind);
+ break;
+ }
+
+ WRITE_BOOL_FIELD(lateral);
+ WRITE_BOOL_FIELD(inh);
+ WRITE_BOOL_FIELD(inFromCl);
+ WRITE_UINT_FIELD(requiredPerms);
+ WRITE_OID_FIELD(checkAsUser);
+ WRITE_BITMAPSET_FIELD(selectedCols);
+ WRITE_BITMAPSET_FIELD(insertedCols);
+ WRITE_BITMAPSET_FIELD(updatedCols);
+ WRITE_BITMAPSET_FIELD(extraUpdatedCols);
+ WRITE_NODE_FIELD(securityQuals);
+}
+
+static void
+_outRangeTblFunction(StringInfo str, const RangeTblFunction *node)
+{
+ WRITE_NODE_TYPE("RANGETBLFUNCTION");
+
+ WRITE_NODE_FIELD(funcexpr);
+ WRITE_INT_FIELD(funccolcount);
+ WRITE_NODE_FIELD(funccolnames);
+ WRITE_NODE_FIELD(funccoltypes);
+ WRITE_NODE_FIELD(funccoltypmods);
+ WRITE_NODE_FIELD(funccolcollations);
+ WRITE_BITMAPSET_FIELD(funcparams);
+}
+
+static void
+_outTableSampleClause(StringInfo str, const TableSampleClause *node)
+{
+ WRITE_NODE_TYPE("TABLESAMPLECLAUSE");
+
+ WRITE_OID_FIELD(tsmhandler);
+ WRITE_NODE_FIELD(args);
+ WRITE_NODE_FIELD(repeatable);
+}
+
+static void
+_outAExpr(StringInfo str, const A_Expr *node)
+{
+ WRITE_NODE_TYPE("AEXPR");
+
+ switch (node->kind)
+ {
+ case AEXPR_OP:
+ appendStringInfoChar(str, ' ');
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_OP_ANY:
+ appendStringInfoChar(str, ' ');
+ WRITE_NODE_FIELD(name);
+ appendStringInfoString(str, " ANY ");
+ break;
+ case AEXPR_OP_ALL:
+ appendStringInfoChar(str, ' ');
+ WRITE_NODE_FIELD(name);
+ appendStringInfoString(str, " ALL ");
+ break;
+ case AEXPR_DISTINCT:
+ appendStringInfoString(str, " DISTINCT ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_NOT_DISTINCT:
+ appendStringInfoString(str, " NOT_DISTINCT ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_NULLIF:
+ appendStringInfoString(str, " NULLIF ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_OF:
+ appendStringInfoString(str, " OF ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_IN:
+ appendStringInfoString(str, " IN ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_LIKE:
+ appendStringInfoString(str, " LIKE ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_ILIKE:
+ appendStringInfoString(str, " ILIKE ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_SIMILAR:
+ appendStringInfoString(str, " SIMILAR ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_BETWEEN:
+ appendStringInfoString(str, " BETWEEN ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_NOT_BETWEEN:
+ appendStringInfoString(str, " NOT_BETWEEN ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_BETWEEN_SYM:
+ appendStringInfoString(str, " BETWEEN_SYM ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_NOT_BETWEEN_SYM:
+ appendStringInfoString(str, " NOT_BETWEEN_SYM ");
+ WRITE_NODE_FIELD(name);
+ break;
+ case AEXPR_PAREN:
+ appendStringInfoString(str, " PAREN");
+ break;
+ default:
+ appendStringInfoString(str, " ??");
+ break;
+ }
+
+ WRITE_NODE_FIELD(lexpr);
+ WRITE_NODE_FIELD(rexpr);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outValue(StringInfo str, const Value *value)
+{
+ switch (value->type)
+ {
+ case T_Integer:
+ appendStringInfo(str, "%d", value->val.ival);
+ break;
+ case T_Float:
+
+ /*
+ * We assume the value is a valid numeric literal and so does not
+ * need quoting.
+ */
+ appendStringInfoString(str, value->val.str);
+ break;
+ case T_String:
+
+ /*
+ * We use outToken to provide escaping of the string's content,
+ * but we don't want it to do anything with an empty string.
+ */
+ appendStringInfoChar(str, '"');
+ if (value->val.str[0] != '\0')
+ outToken(str, value->val.str);
+ appendStringInfoChar(str, '"');
+ break;
+ case T_BitString:
+ /* internal representation already has leading 'b' */
+ appendStringInfoString(str, value->val.str);
+ break;
+ case T_Null:
+ /* this is seen only within A_Const, not in transformed trees */
+ appendStringInfoString(str, "NULL");
+ break;
+ default:
+ elog(ERROR, "unrecognized node type: %d", (int) value->type);
+ break;
+ }
+}
+
+static void
+_outColumnRef(StringInfo str, const ColumnRef *node)
+{
+ WRITE_NODE_TYPE("COLUMNREF");
+
+ WRITE_NODE_FIELD(fields);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outParamRef(StringInfo str, const ParamRef *node)
+{
+ WRITE_NODE_TYPE("PARAMREF");
+
+ WRITE_INT_FIELD(number);
+ WRITE_LOCATION_FIELD(location);
+}
+
+/*
+ * Node types found in raw parse trees (supported for debug purposes)
+ */
+
+static void
+_outRawStmt(StringInfo str, const RawStmt *node)
+{
+ WRITE_NODE_TYPE("RAWSTMT");
+
+ WRITE_NODE_FIELD(stmt);
+ WRITE_LOCATION_FIELD(stmt_location);
+ WRITE_INT_FIELD(stmt_len);
+}
+
+static void
+_outAConst(StringInfo str, const A_Const *node)
+{
+ WRITE_NODE_TYPE("A_CONST");
+
+ appendStringInfoString(str, " :val ");
+ _outValue(str, &(node->val));
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outA_Star(StringInfo str, const A_Star *node)
+{
+ WRITE_NODE_TYPE("A_STAR");
+}
+
+static void
+_outA_Indices(StringInfo str, const A_Indices *node)
+{
+ WRITE_NODE_TYPE("A_INDICES");
+
+ WRITE_BOOL_FIELD(is_slice);
+ WRITE_NODE_FIELD(lidx);
+ WRITE_NODE_FIELD(uidx);
+}
+
+static void
+_outA_Indirection(StringInfo str, const A_Indirection *node)
+{
+ WRITE_NODE_TYPE("A_INDIRECTION");
+
+ WRITE_NODE_FIELD(arg);
+ WRITE_NODE_FIELD(indirection);
+}
+
+static void
+_outA_ArrayExpr(StringInfo str, const A_ArrayExpr *node)
+{
+ WRITE_NODE_TYPE("A_ARRAYEXPR");
+
+ WRITE_NODE_FIELD(elements);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outResTarget(StringInfo str, const ResTarget *node)
+{
+ WRITE_NODE_TYPE("RESTARGET");
+
+ WRITE_STRING_FIELD(name);
+ WRITE_NODE_FIELD(indirection);
+ WRITE_NODE_FIELD(val);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outMultiAssignRef(StringInfo str, const MultiAssignRef *node)
+{
+ WRITE_NODE_TYPE("MULTIASSIGNREF");
+
+ WRITE_NODE_FIELD(source);
+ WRITE_INT_FIELD(colno);
+ WRITE_INT_FIELD(ncolumns);
+}
+
+static void
+_outSortBy(StringInfo str, const SortBy *node)
+{
+ WRITE_NODE_TYPE("SORTBY");
+
+ WRITE_NODE_FIELD(node);
+ WRITE_ENUM_FIELD(sortby_dir, SortByDir);
+ WRITE_ENUM_FIELD(sortby_nulls, SortByNulls);
+ WRITE_NODE_FIELD(useOp);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outWindowDef(StringInfo str, const WindowDef *node)
+{
+ WRITE_NODE_TYPE("WINDOWDEF");
+
+ WRITE_STRING_FIELD(name);
+ WRITE_STRING_FIELD(refname);
+ WRITE_NODE_FIELD(partitionClause);
+ WRITE_NODE_FIELD(orderClause);
+ WRITE_INT_FIELD(frameOptions);
+ WRITE_NODE_FIELD(startOffset);
+ WRITE_NODE_FIELD(endOffset);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outRangeSubselect(StringInfo str, const RangeSubselect *node)
+{
+ WRITE_NODE_TYPE("RANGESUBSELECT");
+
+ WRITE_BOOL_FIELD(lateral);
+ WRITE_NODE_FIELD(subquery);
+ WRITE_NODE_FIELD(alias);
+}
+
+static void
+_outRangeFunction(StringInfo str, const RangeFunction *node)
+{
+ WRITE_NODE_TYPE("RANGEFUNCTION");
+
+ WRITE_BOOL_FIELD(lateral);
+ WRITE_BOOL_FIELD(ordinality);
+ WRITE_BOOL_FIELD(is_rowsfrom);
+ WRITE_NODE_FIELD(functions);
+ WRITE_NODE_FIELD(alias);
+ WRITE_NODE_FIELD(coldeflist);
+}
+
+static void
+_outRangeTableSample(StringInfo str, const RangeTableSample *node)
+{
+ WRITE_NODE_TYPE("RANGETABLESAMPLE");
+
+ WRITE_NODE_FIELD(relation);
+ WRITE_NODE_FIELD(method);
+ WRITE_NODE_FIELD(args);
+ WRITE_NODE_FIELD(repeatable);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outRangeTableFunc(StringInfo str, const RangeTableFunc *node)
+{
+ WRITE_NODE_TYPE("RANGETABLEFUNC");
+
+ WRITE_BOOL_FIELD(lateral);
+ WRITE_NODE_FIELD(docexpr);
+ WRITE_NODE_FIELD(rowexpr);
+ WRITE_NODE_FIELD(namespaces);
+ WRITE_NODE_FIELD(columns);
+ WRITE_NODE_FIELD(alias);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outRangeTableFuncCol(StringInfo str, const RangeTableFuncCol *node)
+{
+ WRITE_NODE_TYPE("RANGETABLEFUNCCOL");
+
+ WRITE_STRING_FIELD(colname);
+ WRITE_NODE_FIELD(typeName);
+ WRITE_BOOL_FIELD(for_ordinality);
+ WRITE_BOOL_FIELD(is_not_null);
+ WRITE_NODE_FIELD(colexpr);
+ WRITE_NODE_FIELD(coldefexpr);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outConstraint(StringInfo str, const Constraint *node)
+{
+ WRITE_NODE_TYPE("CONSTRAINT");
+
+ WRITE_STRING_FIELD(conname);
+ WRITE_BOOL_FIELD(deferrable);
+ WRITE_BOOL_FIELD(initdeferred);
+ WRITE_LOCATION_FIELD(location);
+
+ appendStringInfoString(str, " :contype ");
+ switch (node->contype)
+ {
+ case CONSTR_NULL:
+ appendStringInfoString(str, "NULL");
+ break;
+
+ case CONSTR_NOTNULL:
+ appendStringInfoString(str, "NOT_NULL");
+ break;
+
+ case CONSTR_DEFAULT:
+ appendStringInfoString(str, "DEFAULT");
+ WRITE_NODE_FIELD(raw_expr);
+ WRITE_STRING_FIELD(cooked_expr);
+ break;
+
+ case CONSTR_IDENTITY:
+ appendStringInfoString(str, "IDENTITY");
+ WRITE_NODE_FIELD(raw_expr);
+ WRITE_STRING_FIELD(cooked_expr);
+ WRITE_CHAR_FIELD(generated_when);
+ break;
+
+ case CONSTR_GENERATED:
+ appendStringInfoString(str, "GENERATED");
+ WRITE_NODE_FIELD(raw_expr);
+ WRITE_STRING_FIELD(cooked_expr);
+ WRITE_CHAR_FIELD(generated_when);
+ break;
+
+ case CONSTR_CHECK:
+ appendStringInfoString(str, "CHECK");
+ WRITE_BOOL_FIELD(is_no_inherit);
+ WRITE_NODE_FIELD(raw_expr);
+ WRITE_STRING_FIELD(cooked_expr);
+ break;
+
+ case CONSTR_PRIMARY:
+ appendStringInfoString(str, "PRIMARY_KEY");
+ WRITE_NODE_FIELD(keys);
+ WRITE_NODE_FIELD(including);
+ WRITE_NODE_FIELD(options);
+ WRITE_STRING_FIELD(indexname);
+ WRITE_STRING_FIELD(indexspace);
+ WRITE_BOOL_FIELD(reset_default_tblspc);
+ /* access_method and where_clause not currently used */
+ break;
+
+ case CONSTR_UNIQUE:
+ appendStringInfoString(str, "UNIQUE");
+ WRITE_NODE_FIELD(keys);
+ WRITE_NODE_FIELD(including);
+ WRITE_NODE_FIELD(options);
+ WRITE_STRING_FIELD(indexname);
+ WRITE_STRING_FIELD(indexspace);
+ WRITE_BOOL_FIELD(reset_default_tblspc);
+ /* access_method and where_clause not currently used */
+ break;
+
+ case CONSTR_EXCLUSION:
+ appendStringInfoString(str, "EXCLUSION");
+ WRITE_NODE_FIELD(exclusions);
+ WRITE_NODE_FIELD(including);
+ WRITE_NODE_FIELD(options);
+ WRITE_STRING_FIELD(indexname);
+ WRITE_STRING_FIELD(indexspace);
+ WRITE_BOOL_FIELD(reset_default_tblspc);
+ WRITE_STRING_FIELD(access_method);
+ WRITE_NODE_FIELD(where_clause);
+ break;
+
+ case CONSTR_FOREIGN:
+ appendStringInfoString(str, "FOREIGN_KEY");
+ WRITE_NODE_FIELD(pktable);
+ WRITE_NODE_FIELD(fk_attrs);
+ WRITE_NODE_FIELD(pk_attrs);
+ WRITE_CHAR_FIELD(fk_matchtype);
+ WRITE_CHAR_FIELD(fk_upd_action);
+ WRITE_CHAR_FIELD(fk_del_action);
+ WRITE_NODE_FIELD(old_conpfeqop);
+ WRITE_OID_FIELD(old_pktable_oid);
+ WRITE_BOOL_FIELD(skip_validation);
+ WRITE_BOOL_FIELD(initially_valid);
+ break;
+
+ case CONSTR_ATTR_DEFERRABLE:
+ appendStringInfoString(str, "ATTR_DEFERRABLE");
+ break;
+
+ case CONSTR_ATTR_NOT_DEFERRABLE:
+ appendStringInfoString(str, "ATTR_NOT_DEFERRABLE");
+ break;
+
+ case CONSTR_ATTR_DEFERRED:
+ appendStringInfoString(str, "ATTR_DEFERRED");
+ break;
+
+ case CONSTR_ATTR_IMMEDIATE:
+ appendStringInfoString(str, "ATTR_IMMEDIATE");
+ break;
+
+ default:
+ appendStringInfo(str, "<unrecognized_constraint %d>",
+ (int) node->contype);
+ break;
+ }
+}
+
+static void
+_outForeignKeyCacheInfo(StringInfo str, const ForeignKeyCacheInfo *node)
+{
+ WRITE_NODE_TYPE("FOREIGNKEYCACHEINFO");
+
+ WRITE_OID_FIELD(conoid);
+ WRITE_OID_FIELD(conrelid);
+ WRITE_OID_FIELD(confrelid);
+ WRITE_INT_FIELD(nkeys);
+ WRITE_ATTRNUMBER_ARRAY(conkey, node->nkeys);
+ WRITE_ATTRNUMBER_ARRAY(confkey, node->nkeys);
+ WRITE_OID_ARRAY(conpfeqop, node->nkeys);
+}
+
+static void
+_outPartitionElem(StringInfo str, const PartitionElem *node)
+{
+ WRITE_NODE_TYPE("PARTITIONELEM");
+
+ WRITE_STRING_FIELD(name);
+ WRITE_NODE_FIELD(expr);
+ WRITE_NODE_FIELD(collation);
+ WRITE_NODE_FIELD(opclass);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outPartitionSpec(StringInfo str, const PartitionSpec *node)
+{
+ WRITE_NODE_TYPE("PARTITIONSPEC");
+
+ WRITE_STRING_FIELD(strategy);
+ WRITE_NODE_FIELD(partParams);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outPartitionBoundSpec(StringInfo str, const PartitionBoundSpec *node)
+{
+ WRITE_NODE_TYPE("PARTITIONBOUNDSPEC");
+
+ WRITE_CHAR_FIELD(strategy);
+ WRITE_BOOL_FIELD(is_default);
+ WRITE_INT_FIELD(modulus);
+ WRITE_INT_FIELD(remainder);
+ WRITE_NODE_FIELD(listdatums);
+ WRITE_NODE_FIELD(lowerdatums);
+ WRITE_NODE_FIELD(upperdatums);
+ WRITE_LOCATION_FIELD(location);
+}
+
+static void
+_outPartitionRangeDatum(StringInfo str, const PartitionRangeDatum *node)
+{
+ WRITE_NODE_TYPE("PARTITIONRANGEDATUM");
+
+ WRITE_ENUM_FIELD(kind, PartitionRangeDatumKind);
+ WRITE_NODE_FIELD(value);
+ WRITE_LOCATION_FIELD(location);
+}
+
+/*
+ * outNode -
+ * converts a Node into ascii string and append it to 'str'
+ */
+void
+outNode(StringInfo str, const void *obj)
+{
+ /* Guard against stack overflow due to overly complex expressions */
+ check_stack_depth();
+
+ if (obj == NULL)
+ appendStringInfoString(str, "<>");
+ else if (IsA(obj, List) || IsA(obj, IntList) || IsA(obj, OidList))
+ _outList(str, obj);
+ else if (IsA(obj, Integer) ||
+ IsA(obj, Float) ||
+ IsA(obj, String) ||
+ IsA(obj, BitString))
+ {
+ /* nodeRead does not want to see { } around these! */
+ _outValue(str, obj);
+ }
+ else
+ {
+ appendStringInfoChar(str, '{');
+ switch (nodeTag(obj))
+ {
+ case T_PlannedStmt:
+ _outPlannedStmt(str, obj);
+ break;
+ case T_Plan:
+ _outPlan(str, obj);
+ break;
+ case T_Result:
+ _outResult(str, obj);
+ break;
+ case T_ProjectSet:
+ _outProjectSet(str, obj);
+ break;
+ case T_ModifyTable:
+ _outModifyTable(str, obj);
+ break;
+ case T_Append:
+ _outAppend(str, obj);
+ break;
+ case T_MergeAppend:
+ _outMergeAppend(str, obj);
+ break;
+ case T_RecursiveUnion:
+ _outRecursiveUnion(str, obj);
+ break;
+ case T_BitmapAnd:
+ _outBitmapAnd(str, obj);
+ break;
+ case T_BitmapOr:
+ _outBitmapOr(str, obj);
+ break;
+ case T_Gather:
+ _outGather(str, obj);
+ break;
+ case T_GatherMerge:
+ _outGatherMerge(str, obj);
+ break;
+ case T_Scan:
+ _outScan(str, obj);
+ break;
+ case T_SeqScan:
+ _outSeqScan(str, obj);
+ break;
+ case T_SampleScan:
+ _outSampleScan(str, obj);
+ break;
+ case T_IndexScan:
+ _outIndexScan(str, obj);
+ break;
+ case T_IndexOnlyScan:
+ _outIndexOnlyScan(str, obj);
+ break;
+ case T_BitmapIndexScan:
+ _outBitmapIndexScan(str, obj);
+ break;
+ case T_BitmapHeapScan:
+ _outBitmapHeapScan(str, obj);
+ break;
+ case T_TidScan:
+ _outTidScan(str, obj);
+ break;
+ case T_SubqueryScan:
+ _outSubqueryScan(str, obj);
+ break;
+ case T_FunctionScan:
+ _outFunctionScan(str, obj);
+ break;
+ case T_TableFuncScan:
+ _outTableFuncScan(str, obj);
+ break;
+ case T_ValuesScan:
+ _outValuesScan(str, obj);
+ break;
+ case T_CteScan:
+ _outCteScan(str, obj);
+ break;
+ case T_NamedTuplestoreScan:
+ _outNamedTuplestoreScan(str, obj);
+ break;
+ case T_WorkTableScan:
+ _outWorkTableScan(str, obj);
+ break;
+ case T_ForeignScan:
+ _outForeignScan(str, obj);
+ break;
+ case T_CustomScan:
+ _outCustomScan(str, obj);
+ break;
+ case T_Join:
+ _outJoin(str, obj);
+ break;
+ case T_NestLoop:
+ _outNestLoop(str, obj);
+ break;
+ case T_MergeJoin:
+ _outMergeJoin(str, obj);
+ break;
+ case T_HashJoin:
+ _outHashJoin(str, obj);
+ break;
+ case T_Agg:
+ _outAgg(str, obj);
+ break;
+ case T_WindowAgg:
+ _outWindowAgg(str, obj);
+ break;
+ case T_Group:
+ _outGroup(str, obj);
+ break;
+ case T_Material:
+ _outMaterial(str, obj);
+ break;
+ case T_Sort:
+ _outSort(str, obj);
+ break;
+ case T_IncrementalSort:
+ _outIncrementalSort(str, obj);
+ break;
+ case T_Unique:
+ _outUnique(str, obj);
+ break;
+ case T_Hash:
+ _outHash(str, obj);
+ break;
+ case T_SetOp:
+ _outSetOp(str, obj);
+ break;
+ case T_LockRows:
+ _outLockRows(str, obj);
+ break;
+ case T_Limit:
+ _outLimit(str, obj);
+ break;
+ case T_NestLoopParam:
+ _outNestLoopParam(str, obj);
+ break;
+ case T_PlanRowMark:
+ _outPlanRowMark(str, obj);
+ break;
+ case T_PartitionPruneInfo:
+ _outPartitionPruneInfo(str, obj);
+ break;
+ case T_PartitionedRelPruneInfo:
+ _outPartitionedRelPruneInfo(str, obj);
+ break;
+ case T_PartitionPruneStepOp:
+ _outPartitionPruneStepOp(str, obj);
+ break;
+ case T_PartitionPruneStepCombine:
+ _outPartitionPruneStepCombine(str, obj);
+ break;
+ case T_PlanInvalItem:
+ _outPlanInvalItem(str, obj);
+ break;
+ case T_Alias:
+ _outAlias(str, obj);
+ break;
+ case T_RangeVar:
+ _outRangeVar(str, obj);
+ break;
+ case T_TableFunc:
+ _outTableFunc(str, obj);
+ break;
+ case T_IntoClause:
+ _outIntoClause(str, obj);
+ break;
+ case T_Var:
+ _outVar(str, obj);
+ break;
+ case T_Const:
+ _outConst(str, obj);
+ break;
+ case T_Param:
+ _outParam(str, obj);
+ break;
+ case T_Aggref:
+ _outAggref(str, obj);
+ break;
+ case T_GroupingFunc:
+ _outGroupingFunc(str, obj);
+ break;
+ case T_WindowFunc:
+ _outWindowFunc(str, obj);
+ break;
+ case T_SubscriptingRef:
+ _outSubscriptingRef(str, obj);
+ break;
+ case T_FuncExpr:
+ _outFuncExpr(str, obj);
+ break;
+ case T_NamedArgExpr:
+ _outNamedArgExpr(str, obj);
+ break;
+ case T_OpExpr:
+ _outOpExpr(str, obj);
+ break;
+ case T_DistinctExpr:
+ _outDistinctExpr(str, obj);
+ break;
+ case T_NullIfExpr:
+ _outNullIfExpr(str, obj);
+ break;
+ case T_ScalarArrayOpExpr:
+ _outScalarArrayOpExpr(str, obj);
+ break;
+ case T_BoolExpr:
+ _outBoolExpr(str, obj);
+ break;
+ case T_SubLink:
+ _outSubLink(str, obj);
+ break;
+ case T_SubPlan:
+ _outSubPlan(str, obj);
+ break;
+ case T_AlternativeSubPlan:
+ _outAlternativeSubPlan(str, obj);
+ break;
+ case T_FieldSelect:
+ _outFieldSelect(str, obj);
+ break;
+ case T_FieldStore:
+ _outFieldStore(str, obj);
+ break;
+ case T_RelabelType:
+ _outRelabelType(str, obj);
+ break;
+ case T_CoerceViaIO:
+ _outCoerceViaIO(str, obj);
+ break;
+ case T_ArrayCoerceExpr:
+ _outArrayCoerceExpr(str, obj);
+ break;
+ case T_ConvertRowtypeExpr:
+ _outConvertRowtypeExpr(str, obj);
+ break;
+ case T_CollateExpr:
+ _outCollateExpr(str, obj);
+ break;
+ case T_CaseExpr:
+ _outCaseExpr(str, obj);
+ break;
+ case T_CaseWhen:
+ _outCaseWhen(str, obj);
+ break;
+ case T_CaseTestExpr:
+ _outCaseTestExpr(str, obj);
+ break;
+ case T_ArrayExpr:
+ _outArrayExpr(str, obj);
+ break;
+ case T_RowExpr:
+ _outRowExpr(str, obj);
+ break;
+ case T_RowCompareExpr:
+ _outRowCompareExpr(str, obj);
+ break;
+ case T_CoalesceExpr:
+ _outCoalesceExpr(str, obj);
+ break;
+ case T_MinMaxExpr:
+ _outMinMaxExpr(str, obj);
+ break;
+ case T_SQLValueFunction:
+ _outSQLValueFunction(str, obj);
+ break;
+ case T_XmlExpr:
+ _outXmlExpr(str, obj);
+ break;
+ case T_NullTest:
+ _outNullTest(str, obj);
+ break;
+ case T_BooleanTest:
+ _outBooleanTest(str, obj);
+ break;
+ case T_CoerceToDomain:
+ _outCoerceToDomain(str, obj);
+ break;
+ case T_CoerceToDomainValue:
+ _outCoerceToDomainValue(str, obj);
+ break;
+ case T_SetToDefault:
+ _outSetToDefault(str, obj);
+ break;
+ case T_CurrentOfExpr:
+ _outCurrentOfExpr(str, obj);
+ break;
+ case T_NextValueExpr:
+ _outNextValueExpr(str, obj);
+ break;
+ case T_InferenceElem:
+ _outInferenceElem(str, obj);
+ break;
+ case T_TargetEntry:
+ _outTargetEntry(str, obj);
+ break;
+ case T_RangeTblRef:
+ _outRangeTblRef(str, obj);
+ break;
+ case T_JoinExpr:
+ _outJoinExpr(str, obj);
+ break;
+ case T_FromExpr:
+ _outFromExpr(str, obj);
+ break;
+ case T_OnConflictExpr:
+ _outOnConflictExpr(str, obj);
+ break;
+ case T_Path:
+ _outPath(str, obj);
+ break;
+ case T_IndexPath:
+ _outIndexPath(str, obj);
+ break;
+ case T_BitmapHeapPath:
+ _outBitmapHeapPath(str, obj);
+ break;
+ case T_BitmapAndPath:
+ _outBitmapAndPath(str, obj);
+ break;
+ case T_BitmapOrPath:
+ _outBitmapOrPath(str, obj);
+ break;
+ case T_TidPath:
+ _outTidPath(str, obj);
+ break;
+ case T_SubqueryScanPath:
+ _outSubqueryScanPath(str, obj);
+ break;
+ case T_ForeignPath:
+ _outForeignPath(str, obj);
+ break;
+ case T_CustomPath:
+ _outCustomPath(str, obj);
+ break;
+ case T_AppendPath:
+ _outAppendPath(str, obj);
+ break;
+ case T_MergeAppendPath:
+ _outMergeAppendPath(str, obj);
+ break;
+ case T_GroupResultPath:
+ _outGroupResultPath(str, obj);
+ break;
+ case T_MaterialPath:
+ _outMaterialPath(str, obj);
+ break;
+ case T_UniquePath:
+ _outUniquePath(str, obj);
+ break;
+ case T_GatherPath:
+ _outGatherPath(str, obj);
+ break;
+ case T_ProjectionPath:
+ _outProjectionPath(str, obj);
+ break;
+ case T_ProjectSetPath:
+ _outProjectSetPath(str, obj);
+ break;
+ case T_SortPath:
+ _outSortPath(str, obj);
+ break;
+ case T_IncrementalSortPath:
+ _outIncrementalSortPath(str, obj);
+ break;
+ case T_GroupPath:
+ _outGroupPath(str, obj);
+ break;
+ case T_UpperUniquePath:
+ _outUpperUniquePath(str, obj);
+ break;
+ case T_AggPath:
+ _outAggPath(str, obj);
+ break;
+ case T_GroupingSetsPath:
+ _outGroupingSetsPath(str, obj);
+ break;
+ case T_MinMaxAggPath:
+ _outMinMaxAggPath(str, obj);
+ break;
+ case T_WindowAggPath:
+ _outWindowAggPath(str, obj);
+ break;
+ case T_SetOpPath:
+ _outSetOpPath(str, obj);
+ break;
+ case T_RecursiveUnionPath:
+ _outRecursiveUnionPath(str, obj);
+ break;
+ case T_LockRowsPath:
+ _outLockRowsPath(str, obj);
+ break;
+ case T_ModifyTablePath:
+ _outModifyTablePath(str, obj);
+ break;
+ case T_LimitPath:
+ _outLimitPath(str, obj);
+ break;
+ case T_GatherMergePath:
+ _outGatherMergePath(str, obj);
+ break;
+ case T_NestPath:
+ _outNestPath(str, obj);
+ break;
+ case T_MergePath:
+ _outMergePath(str, obj);
+ break;
+ case T_HashPath:
+ _outHashPath(str, obj);
+ break;
+ case T_PlannerGlobal:
+ _outPlannerGlobal(str, obj);
+ break;
+ case T_PlannerInfo:
+ _outPlannerInfo(str, obj);
+ break;
+ case T_RelOptInfo:
+ _outRelOptInfo(str, obj);
+ break;
+ case T_IndexOptInfo:
+ _outIndexOptInfo(str, obj);
+ break;
+ case T_ForeignKeyOptInfo:
+ _outForeignKeyOptInfo(str, obj);
+ break;
+ case T_EquivalenceClass:
+ _outEquivalenceClass(str, obj);
+ break;
+ case T_EquivalenceMember:
+ _outEquivalenceMember(str, obj);
+ break;
+ case T_PathKey:
+ _outPathKey(str, obj);
+ break;
+ case T_PathTarget:
+ _outPathTarget(str, obj);
+ break;
+ case T_ParamPathInfo:
+ _outParamPathInfo(str, obj);
+ break;
+ case T_RestrictInfo:
+ _outRestrictInfo(str, obj);
+ break;
+ case T_IndexClause:
+ _outIndexClause(str, obj);
+ break;
+ case T_PlaceHolderVar:
+ _outPlaceHolderVar(str, obj);
+ break;
+ case T_SpecialJoinInfo:
+ _outSpecialJoinInfo(str, obj);
+ break;
+ case T_AppendRelInfo:
+ _outAppendRelInfo(str, obj);
+ break;
+ case T_PlaceHolderInfo:
+ _outPlaceHolderInfo(str, obj);
+ break;
+ case T_MinMaxAggInfo:
+ _outMinMaxAggInfo(str, obj);
+ break;
+ case T_PlannerParamItem:
+ _outPlannerParamItem(str, obj);
+ break;
+ case T_RollupData:
+ _outRollupData(str, obj);
+ break;
+ case T_GroupingSetData:
+ _outGroupingSetData(str, obj);
+ break;
+ case T_StatisticExtInfo:
+ _outStatisticExtInfo(str, obj);
+ break;
+ case T_ExtensibleNode:
+ _outExtensibleNode(str, obj);
+ break;
+ case T_CreateStmt:
+ _outCreateStmt(str, obj);
+ break;
+ case T_CreateForeignTableStmt:
+ _outCreateForeignTableStmt(str, obj);
+ break;
+ case T_ImportForeignSchemaStmt:
+ _outImportForeignSchemaStmt(str, obj);
+ break;
+ case T_IndexStmt:
+ _outIndexStmt(str, obj);
+ break;
+ case T_CreateStatsStmt:
+ _outCreateStatsStmt(str, obj);
+ break;
+ case T_AlterStatsStmt:
+ _outAlterStatsStmt(str, obj);
+ break;
+ case T_NotifyStmt:
+ _outNotifyStmt(str, obj);
+ break;
+ case T_DeclareCursorStmt:
+ _outDeclareCursorStmt(str, obj);
+ break;
+ case T_SelectStmt:
+ _outSelectStmt(str, obj);
+ break;
+ case T_ColumnDef:
+ _outColumnDef(str, obj);
+ break;
+ case T_TypeName:
+ _outTypeName(str, obj);
+ break;
+ case T_TypeCast:
+ _outTypeCast(str, obj);
+ break;
+ case T_CollateClause:
+ _outCollateClause(str, obj);
+ break;
+ case T_IndexElem:
+ _outIndexElem(str, obj);
+ break;
+ case T_Query:
+ _outQuery(str, obj);
+ break;
+ case T_WithCheckOption:
+ _outWithCheckOption(str, obj);
+ break;
+ case T_SortGroupClause:
+ _outSortGroupClause(str, obj);
+ break;
+ case T_GroupingSet:
+ _outGroupingSet(str, obj);
+ break;
+ case T_WindowClause:
+ _outWindowClause(str, obj);
+ break;
+ case T_RowMarkClause:
+ _outRowMarkClause(str, obj);
+ break;
+ case T_WithClause:
+ _outWithClause(str, obj);
+ break;
+ case T_CommonTableExpr:
+ _outCommonTableExpr(str, obj);
+ break;
+ case T_SetOperationStmt:
+ _outSetOperationStmt(str, obj);
+ break;
+ case T_RangeTblEntry:
+ _outRangeTblEntry(str, obj);
+ break;
+ case T_RangeTblFunction:
+ _outRangeTblFunction(str, obj);
+ break;
+ case T_TableSampleClause:
+ _outTableSampleClause(str, obj);
+ break;
+ case T_A_Expr:
+ _outAExpr(str, obj);
+ break;
+ case T_ColumnRef:
+ _outColumnRef(str, obj);
+ break;
+ case T_ParamRef:
+ _outParamRef(str, obj);
+ break;
+ case T_RawStmt:
+ _outRawStmt(str, obj);
+ break;
+ case T_A_Const:
+ _outAConst(str, obj);
+ break;
+ case T_A_Star:
+ _outA_Star(str, obj);
+ break;
+ case T_A_Indices:
+ _outA_Indices(str, obj);
+ break;
+ case T_A_Indirection:
+ _outA_Indirection(str, obj);
+ break;
+ case T_A_ArrayExpr:
+ _outA_ArrayExpr(str, obj);
+ break;
+ case T_ResTarget:
+ _outResTarget(str, obj);
+ break;
+ case T_MultiAssignRef:
+ _outMultiAssignRef(str, obj);
+ break;
+ case T_SortBy:
+ _outSortBy(str, obj);
+ break;
+ case T_WindowDef:
+ _outWindowDef(str, obj);
+ break;
+ case T_RangeSubselect:
+ _outRangeSubselect(str, obj);
+ break;
+ case T_RangeFunction:
+ _outRangeFunction(str, obj);
+ break;
+ case T_RangeTableSample:
+ _outRangeTableSample(str, obj);
+ break;
+ case T_RangeTableFunc:
+ _outRangeTableFunc(str, obj);
+ break;
+ case T_RangeTableFuncCol:
+ _outRangeTableFuncCol(str, obj);
+ break;
+ case T_Constraint:
+ _outConstraint(str, obj);
+ break;
+ case T_FuncCall:
+ _outFuncCall(str, obj);
+ break;
+ case T_DefElem:
+ _outDefElem(str, obj);
+ break;
+ case T_TableLikeClause:
+ _outTableLikeClause(str, obj);
+ break;
+ case T_LockingClause:
+ _outLockingClause(str, obj);
+ break;
+ case T_XmlSerialize:
+ _outXmlSerialize(str, obj);
+ break;
+ case T_ForeignKeyCacheInfo:
+ _outForeignKeyCacheInfo(str, obj);
+ break;
+ case T_TriggerTransition:
+ _outTriggerTransition(str, obj);
+ break;
+ case T_PartitionElem:
+ _outPartitionElem(str, obj);
+ break;
+ case T_PartitionSpec:
+ _outPartitionSpec(str, obj);
+ break;
+ case T_PartitionBoundSpec:
+ _outPartitionBoundSpec(str, obj);
+ break;
+ case T_PartitionRangeDatum:
+ _outPartitionRangeDatum(str, obj);
+ break;
+
+ default:
+
+ /*
+ * This should be an ERROR, but it's too useful to be able to
+ * dump structures that outNode only understands part of.
+ */
+ elog(WARNING, "could not dump unrecognized node type: %d",
+ (int) nodeTag(obj));
+ break;
+ }
+ appendStringInfoChar(str, '}');
+ }
+}
+
+/*
+ * nodeToString -
+ * returns the ascii representation of the Node as a palloc'd string
+ */
+char *
+nodeToString(const void *obj)
+{
+ StringInfoData str;
+
+ /* see stringinfo.h for an explanation of this maneuver */
+ initStringInfo(&str);
+ outNode(&str, obj);
+ return str.data;
+}
+
+/*
+ * bmsToString -
+ * returns the ascii representation of the Bitmapset as a palloc'd string
+ */
+char *
+bmsToString(const Bitmapset *bms)
+{
+ StringInfoData str;
+
+ /* see stringinfo.h for an explanation of this maneuver */
+ initStringInfo(&str);
+ outBitmapset(&str, bms);
+ return str.data;
} \ No newline at end of file